|
|
@@ -15,7 +15,10 @@
|
|
|
namespace app\adminapi\logic\master_worker;
|
|
|
|
|
|
|
|
|
+use app\common\enum\worker\WorkerAccountLogEnum;
|
|
|
+use app\common\logic\WorkerAccountLogLogic;
|
|
|
use app\common\model\finance\MasterWorkerCaseOutLog;
|
|
|
+use app\common\model\financial\FinancialPaymentRecords;
|
|
|
use app\common\model\financial\MasterSettlementDetails;
|
|
|
use app\common\model\master_worker\EngineerSettlement;
|
|
|
use app\common\logic\BaseLogic;
|
|
|
@@ -41,20 +44,10 @@ class EngineerSettlementLogic extends BaseLogic
|
|
|
*/
|
|
|
public static function add(array $params, $adminId): bool
|
|
|
{
|
|
|
-
|
|
|
- /*判断表格中打款状态是否已打款:
|
|
|
- 已打款 - 再判断数据表la_engineer_settlement中状态是否真已打 - la_master_settlement_details 更新为 已结算及不参与下批次计算
|
|
|
- 对已结算的:添加实发扣款记录
|
|
|
- 添加直接扣款记录
|
|
|
- 更新|添加xls到详细记录数据表:包括打款状态
|
|
|
- 检查 la_master_settlement_details 中该批号的所有记录,判断打款状态, 更新表格记录 : 已上传、全部已打款*/
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
Db::startTrans();
|
|
|
try {
|
|
|
foreach ($params as $param) {
|
|
|
- //$param['payment_status'] == 1
|
|
|
+ //$param['payment_status'] == 1 默认上传的都是已经打款了
|
|
|
$engineerSettlement = EngineerSettlement::where('master_worker_id', $param['master_worker_id'])
|
|
|
->where('batch_number', $param['batch_number'])
|
|
|
->where('is_export', 1)
|
|
|
@@ -62,76 +55,112 @@ class EngineerSettlementLogic extends BaseLogic
|
|
|
->where('payment_status', 0)
|
|
|
->findOrEmpty();
|
|
|
if(!$engineerSettlement->isEmpty()){
|
|
|
- MasterSettlementDetails::where('master_worker_id', $param['master_worker_id'])
|
|
|
- ->where('batch_number', $param['batch_number'])
|
|
|
- ->where('status', 2)
|
|
|
- ->update([
|
|
|
- 'payment_status' => 1,
|
|
|
- 'payment_time' => $param['settlement_time']??date('Y-m-d H:i:s'),
|
|
|
- 'status'=>3, 'remark'=>''
|
|
|
+
|
|
|
+ $masterWorker = MasterWorker::where('id', $param['master_worker_id'])->where('worker_number', $param['worker_number'])->find();
|
|
|
+ if($masterWorker && $masterWorker->user_money >= $param['total_settlement_amount']){
|
|
|
+ //$masterWorker->user_money = $masterWorker->user_money - $param['total_settlement_amount'];
|
|
|
+ //$masterWorker->save();
|
|
|
+ //实发扣款
|
|
|
+ if($param['final_settlement_amount']){
|
|
|
+ $final_res = WorkerAccountLogLogic::masterAccountLog($param['master_worker_id'],(float)$param['final_settlement_amount'],WorkerAccountLogEnum::UM_DEC_ADMIN,WorkerAccountLogEnum::DEC, '实发扣款','',[
|
|
|
+ 'engineerSettlementId'=>$engineerSettlement->id,
|
|
|
+ 'batch_number'=>$param['batch_number'],
|
|
|
+ ]);
|
|
|
+ if($final_res->id){
|
|
|
+ MasterSettlementDetails::create([
|
|
|
+ 'account_log_id' => $final_res->id,
|
|
|
+ 'payment_time' => $param['settlement_time']??date('Y-m-d H:i:s'),
|
|
|
+ 'batch_number' => $param['batch_number'],
|
|
|
+ 'status' => 3,
|
|
|
+ 'master_worker_id' => $param['master_worker_id'],
|
|
|
+ 'amount_change' => -(float)$param['final_settlement_amount'],
|
|
|
+ 'change_time' => time(),
|
|
|
+ 'remark' => '实发扣款'
|
|
|
+ ]);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //直接扣款
|
|
|
+ if($param['deduction_amount']){
|
|
|
+ $deduction_res = WorkerAccountLogLogic::masterAccountLog($param['master_worker_id'],(float)$param['deduction_amount'],WorkerAccountLogEnum::UM_DEC_ADMIN,WorkerAccountLogEnum::DEC, '直接扣款','',[
|
|
|
+ 'engineerSettlementId'=>$engineerSettlement->id,
|
|
|
+ 'batch_number'=>$param['batch_number'],
|
|
|
+ ]);
|
|
|
+ if($deduction_res->id){
|
|
|
+ MasterSettlementDetails::create([
|
|
|
+ 'account_log_id' => $deduction_res->id,
|
|
|
+ 'payment_time' => $param['settlement_time']??date('Y-m-d H:i:s'),
|
|
|
+ 'batch_number' => $param['batch_number'],
|
|
|
+ 'status' => 3,
|
|
|
+ 'master_worker_id' => $param['master_worker_id'],
|
|
|
+ 'amount_change' => -(float)$param['final_settlement_amount'],
|
|
|
+ 'change_time' => time(),
|
|
|
+ 'remark' => '直接扣款'
|
|
|
+ ]);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 提现记录
|
|
|
+ $case_remark = '应发:'.$param['total_settlement_amount'].($param['deduction_amount']>0?',扣款:'.$param['deduction_amount'].',扣款说明:'.$param['deduction_describe']:'').',实发:'.$param['final_settlement_amount'];
|
|
|
+ MasterWorkerCaseOutLog::create([
|
|
|
+ 'sn' => generate_sn(MasterWorkerCaseOutLog::class,'sn'),
|
|
|
+ 'worker_id' => $masterWorker->id,
|
|
|
+ 'title' => '财务打款',
|
|
|
+ 'change_amount' => $param['total_settlement_amount'],
|
|
|
+ 'review_status' => 3,
|
|
|
+ 'admin_id' => $adminId,
|
|
|
+ 'remark' => '财务打款-'.$case_remark,
|
|
|
+ 'create_time' => time(),
|
|
|
+ 'update_time' => time(),
|
|
|
]);
|
|
|
|
|
|
- // 添加实发扣款记录
|
|
|
- $masterWorker = MasterWorker::where('id', $param['master_worker_id'])->where('worker_number', $param['worker_number'])->find();
|
|
|
- if($masterWorker && $masterWorker->user_money >= $param['total_settlement_amount']){
|
|
|
- $masterWorker->user_money = $masterWorker->user_money - $param['total_settlement_amount'];
|
|
|
- $masterWorker->save();
|
|
|
- MasterWorkerCaseOutLog::create([
|
|
|
- 'sn' => generate_sn(MasterWorkerCaseOutLog::class,'sn'),
|
|
|
- 'worker_id' => $masterWorker->id,
|
|
|
- 'title' => '财务打款',
|
|
|
- 'change_amount' => $param['total_settlement_amount'],
|
|
|
- 'review_status' => 3,
|
|
|
- 'admin_id' => $adminId,
|
|
|
- 'remark' => '财务打款',
|
|
|
- 'create_time' => time(),
|
|
|
- 'update_time' => time(),
|
|
|
- ]);
|
|
|
- }else{
|
|
|
- throw new \Exception('工程师不存在、余额不足');
|
|
|
- }
|
|
|
-添加直接扣款记录
|
|
|
+ $engineerSettlement->deduction_amount = $param['deduction_amount']??0;
|
|
|
+ $engineerSettlement->deduction_describe = $param['deduction_describe']??'';
|
|
|
+ $engineerSettlement->final_settlement_amount = $param['final_settlement_amount']??0;
|
|
|
+ $engineerSettlement->settlement_time = $param['settlement_time']??date('Y-m-d H:i:s');
|
|
|
+ $engineerSettlement->settlement_details_remarks = $param['settlement_details_remarks']??'';
|
|
|
+ $engineerSettlement->new_balance = $masterWorker->user_money;
|
|
|
+ $engineerSettlement->payment_status = 1;
|
|
|
+ $engineerSettlement->is_export = 2;
|
|
|
+ $engineerSettlement->admin_id = $adminId;
|
|
|
+ $engineerSettlement->is_deduction = 1;
|
|
|
+ $engineerSettlement->save();
|
|
|
|
|
|
+ MasterSettlementDetails::where('master_worker_id', $param['master_worker_id'])
|
|
|
+ ->where('batch_number', $param['batch_number'])
|
|
|
+ ->where('status', 2)
|
|
|
+ ->update([
|
|
|
+ 'payment_status' => 1,
|
|
|
+ 'payment_time' => $param['settlement_time']??date('Y-m-d H:i:s'),
|
|
|
+ 'status'=>3, 'remark'=>''
|
|
|
+ ]);
|
|
|
|
|
|
- }
|
|
|
+ }else{
|
|
|
|
|
|
+ $engineerSettlement->deduction_amount = $param['deduction_amount']??0;
|
|
|
+ $engineerSettlement->deduction_describe = $param['deduction_describe']??'';
|
|
|
+ $engineerSettlement->final_settlement_amount = $param['final_settlement_amount']??0;
|
|
|
+ $engineerSettlement->settlement_time = $param['settlement_time']??date('Y-m-d H:i:s');
|
|
|
+ $engineerSettlement->settlement_details_remarks = ($param['settlement_details_remarks']??'').'-余额不足';
|
|
|
+ $engineerSettlement->new_balance = $masterWorker->user_money;
|
|
|
+ $engineerSettlement->payment_status = 1;
|
|
|
+ $engineerSettlement->is_export = 2;
|
|
|
+ $engineerSettlement->admin_id = $adminId;
|
|
|
+ $engineerSettlement->is_deduction = 2;
|
|
|
+ $engineerSettlement->save();
|
|
|
|
|
|
- /*EngineerSettlement::create([
|
|
|
- 'master_worker_id' => $param['master_worker_id'],
|
|
|
- 'worker_number' => $param['worker_number'],
|
|
|
- 'engineer_name' => $param['engineer_name'],
|
|
|
- 'original_balance' => $param['original_balance'],
|
|
|
- 'total_settlement_amount' => $param['total_settlement_amount'],
|
|
|
- 'deduction_amount' => $param['deduction_amount'],
|
|
|
- 'final_settlement_amount' => $param['final_settlement_amount'],
|
|
|
- 'settlement_time' => $param['settlement_time'],
|
|
|
- 'settlement_details_remarks' => $param['settlement_details_remarks'],
|
|
|
- ]);*/
|
|
|
-
|
|
|
- $masterWorker = MasterWorker::where('id', $param['master_worker_id'])->where('worker_number', $param['worker_number'])->find();
|
|
|
- $user_money = $masterWorker->user_money;
|
|
|
- if($masterWorker && $user_money >= $param['total_settlement_amount']){
|
|
|
- $user_money = $user_money - $param['total_settlement_amount'];
|
|
|
- $masterWorker->user_money = $user_money;
|
|
|
- MasterWorkerCaseOutLog::create([
|
|
|
- 'sn' => generate_sn(MasterWorkerCaseOutLog::class,'sn'),
|
|
|
- 'worker_id' => $masterWorker->id,
|
|
|
- 'title' => '财务打款',
|
|
|
- 'change_amount' => $param['total_settlement_amount'],
|
|
|
- 'review_status' => 3,
|
|
|
- 'admin_id' => $adminId,
|
|
|
- 'remark' => '财务打款',
|
|
|
- 'create_time' => time(),
|
|
|
- 'update_time' => time(),
|
|
|
- ]);
|
|
|
- }else{
|
|
|
- throw new \Exception('工程师不存在、余额不足');
|
|
|
+ //throw new \Exception('工程师不存在、余额不足');
|
|
|
+ }
|
|
|
}
|
|
|
+ }
|
|
|
|
|
|
- $masterWorker->save();
|
|
|
-
|
|
|
+ $payment_num = MasterSettlementDetails::where('batch_number', $params[0]['batch_number'])->where('status','<', 3)->count('id');
|
|
|
+ FinancialPaymentRecords::where('batch_number', $params[0]['batch_number'])
|
|
|
+ ->where('upload_status', 1)
|
|
|
+ ->where('payment_status', 1)
|
|
|
+ ->update([
|
|
|
+ 'upload_status' => 3,
|
|
|
+ 'payment_status'=> $payment_num>0?2:3
|
|
|
+ ]);
|
|
|
|
|
|
- }
|
|
|
Db::commit();
|
|
|
return true;
|
|
|
} catch (\Exception $e) {
|
|
|
@@ -210,9 +239,39 @@ class EngineerSettlementLogic extends BaseLogic
|
|
|
|
|
|
public static function engineerSettlementValidate($params)
|
|
|
{
|
|
|
+ //
|
|
|
+ //上传表格中所有批号必须相同
|
|
|
+ //$engineerSettlement 中每条都不能为空
|
|
|
+ // $masterWorker->user_money >= $param['total_settlement_amount']
|
|
|
+ //$param['total_settlement_amount'] = $params['final_settlement_amount']+deduction_amount;
|
|
|
+
|
|
|
try {
|
|
|
if(empty($params)) throw new \Exception('表格数据为空');
|
|
|
+
|
|
|
+ //上传表格中所有 master_worker_id 不能存在重复
|
|
|
+
|
|
|
+ if(count(array_unique(array_column($params, 'master_worker_id')))>1){
|
|
|
+ throw new \Exception('上传表格中所有 master_worker_id 必须不能存在重复');
|
|
|
+ }
|
|
|
+
|
|
|
+ //上传表格中所有批号必须相同
|
|
|
+ if(count(array_unique(array_column($params, 'batch_number')))>1){
|
|
|
+ throw new \Exception('上传表格中所有批号必须相同');
|
|
|
+ }
|
|
|
+ // 每条数据在表 EngineerSettlement 中不能为空
|
|
|
+ $engineer_worker_ids = EngineerSettlement::where('batch_number', $params[0]['batch_number'])
|
|
|
+ ->where('is_export', 1)
|
|
|
+ ->where('is_deduction', 0)
|
|
|
+ ->where('payment_status', 0)
|
|
|
+ ->column('master_worker_id');
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
foreach ($params as &$param) {
|
|
|
+ if(!in_array($param['master_worker_id'], $engineer_worker_ids)) throw new \Exception('工程师不存在');
|
|
|
+
|
|
|
+
|
|
|
//判断日期时间格式是否正确 2024/1/1 00:00:00 或 2024-1-1 00:00:00
|
|
|
if(!preg_match('/^[0-9]{4}\/[0-9]{1,2}\/[0-9]{1,2} [0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}$/', $param['settlement_time'])
|
|
|
&& !preg_match('/^[0-9]{4}-[0-9]{1,2}-[0-9]{1,2} [0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}$/', $param['settlement_time'])){
|