Преглед изворни кода

add - 配件审核状态新增 超时未审 时,该单配件费冻结到质保金

liugc пре 11 месеци
родитељ
комит
2b6e252997

+ 18 - 8
app/adminapi/logic/spare_part/SparePartLogic.php

@@ -15,8 +15,10 @@
 namespace app\adminapi\logic\spare_part;
 
 
+use app\adminapi\logic\works\ServiceWorkLogic;
 use app\common\model\spare_part\SparePart;
 use app\common\logic\BaseLogic;
+use app\common\model\works\ServiceWorkSpareAudit;
 use think\facade\Db;
 
 
@@ -109,16 +111,24 @@ class SparePartLogic extends BaseLogic
         return SparePart::destroy($params['id']);
     }
 
-
     /**
-     * @notes 获取详情
-     * @param $params
-     * @return array
-     * @author likeadmin
-     * @date 2024/09/14 15:08
+     * 配件定时任务
+     * @return bool
+     * @author liugc <466014217@qq.com>
+     * @date 2025/5/27 15:10
      */
-    public static function detail($params): array
+    public static function examineSpare()
     {
-        return SparePart::findOrEmpty($params['id'])->toArray();
+        $tm = time() - 3 * 86400;
+        $spareAudits = ServiceWorkSpareAudit::where("create_time",'<', $tm)->where('status', 2)->select()->toArray();
+        foreach ($spareAudits as $spareAudit) {
+            try {
+                ServiceWorkLogic::settlementSpare(['id' => $spareAudit['service_work_id'],  'status' => 3]);
+            } catch (\Exception $e) {
+                self::setError($e->getMessage());
+            }
+        }
+        return true;
     }
+
 }

+ 1 - 1
app/adminapi/logic/works/ServiceWorkLogic.php

@@ -921,7 +921,7 @@ class ServiceWorkLogic extends BaseLogic
             if($spareAudit->isEmpty()){
                 throw new \Exception('无配件审核');
             }else{
-                if($spareAudit->status != 1 && $params['status'] == 1){
+                if(in_array($spareAudit->status,[0,2]) && in_array($params['status'],[1,3])){
                     $serviceWorkInfo->user_confirm_status = 5;
                     $serviceWorkInfo->work_status = 7;
                     $serviceWorkInfo->work_pay_status = 1;

+ 47 - 3
app/api/logic/PerformanceLogic.php

@@ -20,6 +20,7 @@ use app\common\model\recharge\OrderGoods;
 use app\common\logic\RetentionMoneyLogic;
 use app\common\model\works\ServiceWork;
 use app\common\model\works\ServiceWorkLog;
+use app\common\model\works\ServiceWorkSpareAudit;
 use think\facade\Db;
 use think\facade\Log;
 
@@ -131,7 +132,21 @@ class PerformanceLogic extends BaseLogic
             $settlement_amount += (float)$work->add_work_amount;
 
             //工程师可提现金额,汇总 配件总金额
-            $settlement_amount += (float)$work->spare_total;
+            $status = ServiceWorkSpareAudit::where("service_work_id", $work->id)->value('status')??0;
+            if((int)$status === 3){
+                // work_id
+                $retentionMoneyLog = MasterWorkerRetentionMoneyLog::create([
+                    'sn' => generate_sn(MasterWorkerRetentionMoneyLog::class,'sn'),
+                    'worker_id' => $work->master_worker_id,
+                    'action' => WorkerAccountLogEnum::DEC,
+                    'amount' => (float)$work->spare_total,
+                    'work_id' => $work->id,
+                    'remark' => '配件费超时审核冻结',
+                ])->getData();
+                Log::info('配件费超时审核冻结:'.$work->master_worker_id.',工单Id:'.$work->id);
+            }else{
+                $settlement_amount += (float)$work->spare_total;
+            }
 
             Log::info('工单'.$work->id.',总服务费:'.$worker_price.'可提现金额:'.$settlement_amount.',加单金额:'.$work->add_work_amount.',缴纳质保金:'.$work->earnest_money.',系统回收金额:'.$work->system_amount.',门店总金额(包含工程师):'.$work->tenant_all_amount . ',门店实际金额:'.$work->tenant_amount);
 
@@ -217,7 +232,22 @@ class PerformanceLogic extends BaseLogic
             //工程师可提现金额,汇总了加单金额
             $settlement_amount += (float)$work->add_work_amount;
             //工程师可提现金额,汇总 配件总金额
-            $settlement_amount += (float)$work->spare_total;
+            $status = ServiceWorkSpareAudit::where("service_work_id", $work->id)->value('status')??0;
+            if((int)$status === 3){
+                // work_id
+                $retentionMoneyLog = MasterWorkerRetentionMoneyLog::create([
+                    'sn' => generate_sn(MasterWorkerRetentionMoneyLog::class,'sn'),
+                    'worker_id' => $work->master_worker_id,
+                    'action' => WorkerAccountLogEnum::DEC,
+                    'amount' => (float)$work->spare_total,
+                    'work_id' => $work->id,
+                    'remark' => '配件费超时审核冻结',
+                ])->getData();
+                Log::info('配件费超时审核冻结:'.$work->master_worker_id.',工单Id:'.$work->id);
+            }else{
+                $settlement_amount += (float)$work->spare_total;
+            }
+
             Log::info('calculatePerformanceCommission:工单'.$work->id.',总服务费:'.$work->worker_price.'可提现金额:'.$settlement_amount.',加单金额:'.$work->add_work_amount.',缴纳质保金:'.$work->earnest_money.',系统回收金额:'.$work->system_amount.',门店总金额(包含工程师):'.$work->tenant_all_amount . ',门店实际金额:'.$work->tenant_amount);
 
             WorkerAccountLogLogic::addAccountLog($work,$settlement_amount,WorkerAccountLogEnum::UM_INC_ADMIN,WorkerAccountLogEnum::INC);
@@ -401,7 +431,21 @@ class PerformanceLogic extends BaseLogic
                 //工程师可提现金额,汇总了加单金额
                 $settlement_amount += (float)$work->add_work_amount;
                 //工程师可提现金额,汇总 配件总金额
-                $settlement_amount += (float)$work->spare_total;
+                $status = ServiceWorkSpareAudit::where("service_work_id", $work->id)->value('status')??0;
+                if((int)$status === 3){
+                    // work_id
+                    $retentionMoneyLog = MasterWorkerRetentionMoneyLog::create([
+                        'sn' => generate_sn(MasterWorkerRetentionMoneyLog::class,'sn'),
+                        'worker_id' => $work->master_worker_id,
+                        'action' => WorkerAccountLogEnum::DEC,
+                        'amount' => (float)$work->spare_total,
+                        'work_id' => $work->id,
+                        'remark' => '配件费超时审核冻结',
+                    ])->getData();
+                    Log::info('配件费超时审核冻结:'.$work->master_worker_id.',工单Id:'.$work->id);
+                }else{
+                    $settlement_amount += (float)$work->spare_total;
+                }
                 Log::info('工单'.$work->id.',总服务费:'.$worker_price.'可提现金额:'.$settlement_amount.',加单金额:'.$work->add_work_amount.',缴纳质保金:'.$work->earnest_money.',系统回收金额:'.$work->system_amount.',门店总金额(包含工程师):'.$work->tenant_all_amount . ',门店实际金额:'.$work->tenant_amount);
 
                 WorkerAccountLogLogic::addAccountLog($work,$settlement_amount,WorkerAccountLogEnum::UM_INC_ADMIN,WorkerAccountLogEnum::INC);

+ 37 - 0
app/common/command/ExamineSpare.php

@@ -0,0 +1,37 @@
+<?php
+namespace app\common\command;
+
+use app\adminapi\logic\spare_part\SparePartLogic;
+use app\common\model\bank_account\BankAccount;
+use app\common\model\export\Export;
+use app\common\model\master_worker\MasterWorker;
+use app\common\model\master_worker\MasterWorkerInfo;
+use app\common\service\ExcelExportService;
+use think\console\Command;
+use think\console\Input;
+use think\console\Output;
+use think\facade\Log;
+
+/**
+ *  审核配件-结算
+ * Class ExamineSpare
+ * @package app\command
+ */
+class ExamineSpare extends Command
+{
+    protected function configure()
+    {
+        $this->setName('examine_spare')->setDescription('审核配件');
+    }
+
+    protected function execute(Input $input, Output $output)
+    {
+        try {
+            SparePartLogic::examineSpare();
+            return true;
+        } catch (\Exception $e) {
+            Log::write('ExamineSpare:'.$e->getMessage());
+            return $e->getMessage();
+        }
+    }
+}

+ 1 - 1
app/common/model/works/ServiceWork.php

@@ -69,7 +69,7 @@ class ServiceWork extends BaseModel
                 $is_settlement = true;
             }else{
                 // 通过审核且未结算 - 结算
-                $isAudit->status == 1 && $model->settlement_amount == 0 && $model->earnest_money == 0 && $model->system_amount == 0 && $is_settlement = true;
+                in_array($isAudit->status,[1,3]) && $model->settlement_amount == 0 && $model->earnest_money == 0 && $model->system_amount == 0 && $is_settlement = true;
             }
         }
         if($is_settlement){

+ 2 - 0
config/console.php

@@ -25,6 +25,8 @@ return [
         'group_order' => 'app\common\command\GroupOrder',
         // 导出表格
         'excel_export' => 'app\common\command\ExcelExport',
+        //配件定时任务
+        'examine_spare' => 'app\common\command\ExamineSpare',
         //维修故障限价数据初始化抓取
         'fault_init' => 'app\common\command\FaultInit',
     ],