liugc 1 год назад
Родитель
Сommit
4f766e020e

+ 2 - 2
app/adminapi/lists/works/IssueWorkLists.php

@@ -86,12 +86,12 @@ class IssueWorkLists extends BaseAdminDataLists implements ListsSearchInterface
                 },'serviceWork'=>function(Query $query){
                     $query->field('id,title,work_sn,address');
                 },'returnWork'=>function(Query $query){
-                    $query->field('id,work_sn,finished_images');
+                    $query->field('id,work_sn,issue_work_id,finished_images');
                 }
             ])
             ->where($this->searchWhere)
             ->where($this->querySearch())
-            ->field(['id', 'work_sn', 'service_work_id', 'master_worker_id','user_id', 'issue_approval', 'complaint_status', 'responsible', 'complaint_details', 'complaint_images', 'finished_time', 'approval_admin_id', 'approval_time', 'create_time', 'update_time'])
+            ->field(['id', 'work_sn', 'service_work_id', 'master_worker_id','user_id', 'issue_approval', 'complaint_status', 'responsible', 'complaint_details', 'complaint_images', 'finished_time', 'approval_admin_id', 'approval_time', 'create_time', 'update_time','appeal_info'])
             ->limit($this->limitOffset, $this->limitLength)
             ->order(['id' => 'desc'])
             ->select()

+ 9 - 5
app/adminapi/logic/works/IssueWorkLogic.php

@@ -25,6 +25,7 @@ use app\common\logic\BaseLogic;
 use app\common\model\works\ReturnWork;
 use app\common\model\works\ServiceWork;
 use think\facade\Db;
+use think\facade\Log;
 
 
 /**
@@ -85,10 +86,11 @@ class IssueWorkLogic extends BaseLogic
             //查询是否完成返修
             $returnModel = ReturnWork::where('issue_work_id', $params['id'])->findOrEmpty();
             if($params['issue_approval'] == 4) {
-                if(!$returnModel->isEmpty() && $returnModel->return_work_status != 2){
+                if(!$returnModel->isEmpty() && $returnModel->return_work_status != 4){
                     throw new \Exception("返修工单编号:".$returnModel->work_sn.'未返修完成');
                 }
             }
+            $issueWork = IssueWork::where('id', $params['id'])->findOrEmpty();
             IssueWork::where('id', $params['id'])->update([
                 'work_sn' => $params['work_sn'],
                 'service_work_id' => $params['service_work_id'],
@@ -102,9 +104,10 @@ class IssueWorkLogic extends BaseLogic
                 'approval_admin_id' =>$params['approval_admin_id'],
                 'approval_time' => time(),
             ]);
-            $issueWork = IssueWork::where('id', $params['id'])->findOrEmpty();
+
+            Log::info('IssueWorkLogic-edit-error:'.$issueWork);
             // 投诉- 非完成状态时工程师的质保金可用金额 被冻结
-            if($issueWork->is_refunded_payment == 0 && !in_array($issueWork->issue_approval,[5,4])){
+            if(!in_array($issueWork->issue_approval,[5,4]) && $issueWork->is_refunded_payment == 0 && !in_array($params['issue_approval'],[5,4])){
                 if(RetentionMoneyLogic::warrantyDepositFreeze($issueWork)){
                     // 原工程师返修收成款是否被冻结 is_refunded_payment
                     $issueWork->is_refunded_payment = 1;
@@ -113,7 +116,7 @@ class IssueWorkLogic extends BaseLogic
             }
 
             // 投诉完成-质保金可用金额 解冻
-            if($issueWork->is_refunded_payment == 1 && $issueWork->issue_approval == 4){
+            if($issueWork->issue_approval != 4 &&  $issueWork->is_refunded_payment == 1 && $params['issue_approval'] == 4){
                 $serviceWork = ServiceWork::where('id',$issueWork->service_work_id)->findOrEmpty();
                 if(!$serviceWork->isEmpty()){
                     $is_zero = false;
@@ -135,7 +138,7 @@ class IssueWorkLogic extends BaseLogic
                             // 存在则按返修工单中的最新师傅 计算收益
                             $extra['ReturnWorkInfo'] = ['id'=>$work->id,'master_worker_id'=>$work->master_worker_id,'service_work_id'=>$work->service_work_id,'issue_work_id'=>$work->issue_work_id];
                             $remark = '工单号:'.$issueWork->work_sn.',返修单号:'.$work->work_sn.',收益金额:'.$change_amount.',原因:返修工单新工程师收益';
-                            WorkerAccountLogLogic::addAccountLog($serviceWork,$change_amount,WorkerAccountLogEnum::UM_INC_ADMIN,WorkerAccountLogEnum::INC,$remark,$extra);
+                            WorkerAccountLogLogic::addAccountLog($serviceWork,$change_amount,WorkerAccountLogEnum::UM_INC_ADMIN,WorkerAccountLogEnum::INC,$remark,$extra,$work->master_worker_id);
                             $is_zero = true;
                         }
                     }
@@ -157,6 +160,7 @@ class IssueWorkLogic extends BaseLogic
         } catch (\Exception $e) {
             Db::rollback();
             self::setError($e->getMessage());
+            Log::info('IssueWorkLogic-edit-error:'.$e->getMessage());
             return false;
         }
     }

+ 49 - 7
app/api/logic/ReturnWorkLogic.php

@@ -5,6 +5,7 @@ use app\common\logic\BaseLogic;
 use app\common\logic\WorkerAccountLogLogic;
 use app\common\model\master_worker\MasterWorker;
 use app\common\model\master_worker\MasterWorkerAccountLog;
+use app\common\model\master_worker\MasterWorkerFreezeAmountLog;
 use app\common\model\master_worker\MasterWorkerRetentionMoneyLog;
 use app\common\model\works\IssueWork;
 use app\common\model\works\ReturnWork;
@@ -64,13 +65,54 @@ class ReturnWorkLogic extends BaseLogic
             $work->save();
             MasterWorker::setWorktotal('inc',$work->master_worker_id);
             //更新投诉状态
-            $issue = IssueWork::where('service_work_id',$work->service_work_id)->findOrEmpty();
-            if(!$issue->isEmpty()){
-                $issue->issue_approval = 4;
-                $issue->complaint_status = 2;
-                $issue->responsible = 2;
-                $issue->finished_time = time();
-                $issue->save();
+            $issueWork = IssueWork::where('service_work_id',$work->service_work_id)->findOrEmpty();
+            if(!$issueWork->isEmpty()){
+
+                // 投诉完成-质保金可用金额 解冻
+                if($issueWork->issue_approval != 4 &&  $issueWork->is_refunded_payment == 1){
+                    $serviceWork = ServiceWork::where('id',$issueWork->service_work_id)->findOrEmpty();
+                    if(!$serviceWork->isEmpty()){
+                        $is_zero = false;
+                        // 查询出该投诉的冻结金额 master_worker_freeze_amount_log  issue_work_id master_worker_id
+                        $amount = MasterWorkerFreezeAmountLog::where([
+                            'action'=>WorkerAccountLogEnum::INC,'source'=>1,
+                            'issue_work_id'=>$issueWork->id,'master_worker_id'=>$issueWork->master_worker_id])->value('amount');
+
+                        // 是否存在返修工单?
+                        $work = ReturnWork::where('issue_work_id',$issueWork->id)->findOrEmpty();
+                        if(!$work->isEmpty()){
+                            // 最新师傅
+                            if($issueWork->master_worker_id != $work->master_worker_id){
+                                // 加账户余额 收益
+                                $change_amount = MasterWorkerAccountLog::where([
+                                    'change_object'=>WorkerAccountLogEnum::UM,'change_type'=>WorkerAccountLogEnum::UM_INC_ADMIN,
+                                    'action'=>WorkerAccountLogEnum::INC,'worker_id'=>$issueWork->master_worker_id,
+                                    'work_sn'=>$issueWork->work_sn])->value('change_amount');
+                                // 存在则按返修工单中的最新师傅 计算收益
+                                $extra['ReturnWorkInfo'] = ['id'=>$work->id,'master_worker_id'=>$work->master_worker_id,'service_work_id'=>$work->service_work_id,'issue_work_id'=>$work->issue_work_id];
+                                $remark = '工单号:'.$issueWork->work_sn.',返修单号:'.$work->work_sn.',收益金额:'.$change_amount.',原因:返修工单新工程师收益';
+                                WorkerAccountLogLogic::addAccountLog($serviceWork,$change_amount,WorkerAccountLogEnum::UM_INC_ADMIN,WorkerAccountLogEnum::INC,$remark,$extra,$work->master_worker_id);
+                                $is_zero = true;
+                            }
+                        }
+                        /*to_freeze source remark work_id amount  worker_id issue_work_id*/
+                        // 对原工程师的 质保金解冻质保金 / 清零
+                        \app\common\logic\RetentionMoneyLogic::warrantyDepositRelease([
+                            'to_freeze'=>2,
+                            'source'=>1,
+                            'remark'=>'对原工程师的质保金解冻质保金/清零',
+                            'work_id'=>$work->service_work_id,'worker_id'=>$issueWork->master_worker_id,
+                            'issue_work_id'=>$issueWork->id,
+                            'amount'=>$amount,
+                        ],$is_zero);
+                    }
+                }
+
+                $issueWork->issue_approval = 4;
+                $issueWork->complaint_status = 2;
+                $issueWork->responsible = 2;
+                $issueWork->finished_time = time();
+                $issueWork->save();
             }
 
             Db::commit();

+ 12 - 2
app/common/logic/RetentionMoneyLogic.php

@@ -126,6 +126,7 @@ class RetentionMoneyLogic extends BaseLogic
         } catch (\Exception $e) {
             Db::rollback();
             self::setError($e->getMessage());
+            Log::info('RetentionMoneyLogic-addDeduct-error:'.$e->getMessage());
             return false;
         }
     }
@@ -172,6 +173,7 @@ class RetentionMoneyLogic extends BaseLogic
         } catch (\Exception $e) {
             Db::rollback();
             self::setError($e->getMessage());
+            Log::info('RetentionMoneyLogic-retentionPayment-error:'.$e->getMessage());
             return false;
         }
     }
@@ -187,7 +189,9 @@ class RetentionMoneyLogic extends BaseLogic
             $masterWorkerInfo = MasterWorker::where('id', $params['worker_id'])->findOrEmpty();
             $earnest_money_usable = $masterWorkerInfo->earnest_money_usable - $params['amount'];
             if($earnest_money_usable < 0){
-                throw new \Exception('退可用质保金不足');
+                Log::info('RetentionMoneyLogic-refundRetention-error:退可用质保金不足:'.$earnest_money_usable.',可用质保金:'.$masterWorkerInfo->earnest_money_usable);
+                $earnest_money_usable = 0;
+                $params['amount'] = $masterWorkerInfo->earnest_money_usable;
             }
             $masterWorkerInfo->earnest_money_usable = $earnest_money_usable;
             // 是否要扣到 冻结 里面?
@@ -224,6 +228,7 @@ class RetentionMoneyLogic extends BaseLogic
         } catch (\Exception $e) {
             Db::rollback();
             self::setError($e->getMessage());
+            Log::info('RetentionMoneyLogic-refundRetention-error:'.$e->getMessage());
             return false;
         }
     }
@@ -253,12 +258,15 @@ class RetentionMoneyLogic extends BaseLogic
                     ',应退余额:'.($change_amount?:0).
                     ',应退质保金:'.($retentionAmount?:0).
                     ',退款原因:投诉冻结';
-                self::refundRetention([
+                $res = self::refundRetention([
                     'source'=>1,'remark'=>$remark,
                     'issue_work_id' => $issueWork->id?:0,
                     'work_id'=>$issueWork->service_work_id,'worker_id'=>$issueWork->master_worker_id,
                     'amount'=>$totalAmount,'to_freeze'=>1
                 ]);
+                if (false === $res) {
+                    throw new \Exception(self::getError());
+                }
             }
 
 
@@ -267,6 +275,7 @@ class RetentionMoneyLogic extends BaseLogic
         } catch (\Exception $e) {
             Db::rollback();
             self::setError($e->getMessage());
+            Log::info('RetentionMoneyLogic-warrantyDepositFreeze-error:'.$e->getMessage());
             return false;
         }
     }
@@ -321,6 +330,7 @@ class RetentionMoneyLogic extends BaseLogic
         } catch (\Exception $e) {
             Db::rollback();
             self::setError($e->getMessage());
+            Log::info('RetentionMoneyLogic-warrantyDepositRelease-error:'.$e->getMessage());
             return false;
         }
     }

+ 3 - 3
app/common/logic/WorkerAccountLogLogic.php

@@ -17,9 +17,9 @@ class WorkerAccountLogLogic extends BaseLogic
      * @return bool|void
      * @throws Exception
      */
-    public static function addAccountLog($work,$changeAmount,$changeType,$action, string $remark = '',  array $extra = [])
+    public static function addAccountLog($work,$changeAmount,$changeType,$action, string $remark = '',  array $extra = [],int $appoint_worker_id = 0)
     {
-        $worker = MasterWorker::findOrFail($work->master_worker_id);
+        $worker = MasterWorker::findOrFail($appoint_worker_id?:$work->master_worker_id);
         if($worker->isEmpty()) {
             throw new Exception('工程师不存在');
         }
@@ -40,7 +40,7 @@ class WorkerAccountLogLogic extends BaseLogic
         $data = [
             'sn' => generate_sn(MasterWorkerAccountLog::class, 'sn', 20),
             'title'=>$work->title,
-            'worker_id' => $work->master_worker_id,
+            'worker_id' => $appoint_worker_id?:$work->master_worker_id,
             'change_object' => $changeObject,
             'change_type' => $changeType,
             'action' => $action,

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

@@ -46,7 +46,7 @@ class IssueWork extends BaseModel
     }
     public function returnWork()
     {
-        return $this->hasOne(ReturnWork::class,'work_sn','work_sn');
+        return $this->hasOne(ReturnWork::class,'issue_work_id','id');
     }
     public function admin()
     {

+ 4 - 12
app/workerapi/logic/MasterWorkerLogic.php

@@ -171,28 +171,20 @@ class MasterWorkerLogic extends  BaseLogic
                     }
                 }
                 $upData['accept_status_time'] = time();
-            }else{
                 //验证身份证信息是否审核通过
                 $idCard = MasterWorkerInfo::where(['worker_id'=>$userId])->findOrEmpty();
                 if ($idCard->isEmpty()) {
                     return ['code'=>20,'msg'=>'请先完善身份证信息'];
                 }
-                if($idCard->audit_state == 0){
-                    return ['code'=>20,'msg'=>'身份证信息核验中,请等待核验完成'];
-                }
-                if($idCard->audit_state == 2){
-                    return ['code'=>20,'msg'=>'身份证信息核验不通过,请重新填写'];
-                }
                 //验证银行卡信息是否审核通过
                 $bank = BankAccount::where(['worker_id'=>$userId])->findOrEmpty();
                 if ($bank->isEmpty()) {
                     return ['code'=>21,'msg'=>'请先完善银行卡信息'];
                 }
-                if($bank->audit_state == 0){
-                    return ['code'=>21,'msg'=>'银行卡信息核验中,请等待核验完成'];
-                }
-                if($bank->audit_state == 2){
-                    return ['code'=>21,'msg'=>'银行卡信息核验不通过,请重新填写'];
+                //验证协议信息是否审核通过
+                $agree = MasterWorkerAgree::where(['worker_id'=>$userId])->findOrEmpty();
+                if ($agree->isEmpty()) {
+                    return ['code'=>21,'msg'=>'请先签写协议信息'];
                 }
             }