cqp 3 săptămâni în urmă
părinte
comite
ca6f4db418
1 a modificat fișierele cu 59 adăugiri și 1 ștergeri
  1. 59 1
      app/Service/ItemService.php

+ 59 - 1
app/Service/ItemService.php

@@ -312,9 +312,13 @@ class ItemService extends Service
             ->where('del_time',0)
             ->first();
         if(empty($model)) return [false, '项目不存在或已被删除'];
+        $tableName = $model->getTable();
         $oldData = $model->toArray();
         if($oldData['state'] == Item::TYPE_THREE) return [false, '项目已完成,请勿重复操作'];
 
+        list($bool, $msg) = $this->checkIsDelivery($oldData, $tableName);
+        if(! $bool) return [false , $msg];
+
         $bool = ItemNode::where('del_time',0)
             ->where('item_id', $data['id'])
             ->where('state', '<>',ItemNode::TYPE_THREE)
@@ -1117,7 +1121,6 @@ class ItemService extends Service
         list($status, $msg) = $this->validateListRelation($data['device_list'], $data['top_depart_id'], '设备', 'data_id');
         if (!$status) return [false, $msg];
 
-
         // 5. 核心业务逻辑校验(新增 vs 编辑)
         $codeQuery = Item::where('code', $data['code'])
             ->where('top_depart_id', $data['top_depart_id'])
@@ -1133,6 +1136,13 @@ class ItemService extends Service
             $item = Item::where('id', $data['id'])->where('del_time', 0)->first();
             if (empty($item)) return [false, '项目不存在或已被删除'];
 
+            //交付物
+            if($data['state'] == Item::TYPE_THREE){
+                $tableName = $item->getTable();
+                list($bool, $msg) = $this->checkIsDelivery($item->toArray(), $tableName);
+                if(! $bool) return [false , $msg];
+            }
+
             // 状态拦截
             if ($item->state == Item::TYPE_THREE) return [false, '项目已完结,操作失败'];
 
@@ -1308,9 +1318,14 @@ class ItemService extends Service
             ->where('del_time',0)
             ->first();
         if(empty($model)) return [false, '项目节点不存在或已被删除'];
+        $tableName = $model->getTable();
         $oldData = $model->toArray();
         if($oldData['state'] == ItemNode::TYPE_THREE) return [false, '项目节点已完成,请勿重复操作'];
 
+        //交付物
+        list($bool, $msg) = $this->checkIsDelivery($oldData, $tableName);
+        if(! $bool) return [false , $msg];
+
         $bool = ItemNodeMission::where('del_time',0)
             ->where('item_node_id', $data['id'])
             ->where('state', '<>',ItemNodeMission::TYPE_THREE)
@@ -2041,6 +2056,13 @@ class ItemService extends Service
             if ($node->state == ItemNode::TYPE_THREE) return [false, '节点已完结,操作失败'];
             if ($node->approval_state == ItemNode::TYPE_MINUS_ONE) return [false, '节点审核中,操作失败'];
 
+            //交付物
+            if($data['state'] == ItemNode::TYPE_THREE){
+                $tableName = $node->getTable();
+                list($bool, $msg) = $this->checkIsDelivery($node->toArray(), $tableName);
+                if(! $bool) return [false , $msg];
+            }
+
             // 试图完结节点时,校验下游任务
             if (isset($data['state']) && $data['state'] == ItemNode::TYPE_THREE) {
                 $hasUnfinishedMission = ItemNodeMission::where('del_time', 0)
@@ -2101,9 +2123,13 @@ class ItemService extends Service
             ->where('del_time',0)
             ->first();
         if(empty($model)) return [false, '任务不存在或已被删除'];
+        $tableName = $model->getTable();
         $oldData = $model->toArray();
         if($oldData['state'] == ItemNodeMission::TYPE_THREE) return [false, '任务已完成,请勿重复操作'];
 
+        list($bool, $msg) = $this->checkIsDelivery($oldData, $tableName);
+        if(! $bool) return [false , $msg];
+
         $bool = ItemNodeMission::where('del_time',0)
             ->where('parent_item_node_mission_id', $data['id'])
             ->where('state', '<>',ItemNodeMission::TYPE_THREE)
@@ -2944,6 +2970,12 @@ class ItemService extends Service
             if ($mission->state == ItemNodeMission::TYPE_THREE) return [false, '任务已完结,操作失败'];
             if ($mission->approval_state == ItemNodeMission::TYPE_MINUS_ONE) return [false, '任务审核中,操作失败'];
 
+            if($data['state'] == ItemNodeMission::TYPE_THREE){
+                $tableName = $mission->getTable();
+                list($bool, $msg) = $this->checkIsDelivery($mission->toArray(), $tableName);
+                if(! $bool) return [false , $msg];
+            }
+
             // 试图完结任务时,校验其下面的子任务是否全部完结
             if (isset($data['state']) && $data['state'] == ItemNodeMission::TYPE_THREE) {
                 $hasUnfinishedSubMission = ItemNodeMission::where('del_time', 0)
@@ -3067,6 +3099,32 @@ class ItemService extends Service
             ->toArray();
     }
 
+    public function checkIsDelivery($data, $tableName){
+        //是否需要交付物完结
+        if($data['is_review_required']){
+            $column = $tableName . '_id';
+            $bool = ItemFile::where('del_time',0)
+                ->where($column, $data['id'])
+                ->where('top_depart_id', $data['top_depart_id'])
+                ->where('is_delivery', ItemFile::delivery_one)
+                ->exists();
+            if($bool) return [true, ''];
+
+            $bool = CustomFieldValue::where('del_time',0)
+                ->where('table_name', $tableName)
+                ->where('model_id', $data['id'])
+                ->where('top_depart_id', $data['top_depart_id'])
+                ->where('field_type', CustomFieldValue::type_two)
+                ->where('is_delivery', CustomFieldValue::delivery_one)
+                ->exists();
+            if($bool) return [true, ''];
+
+            return [false, '需上传交付物完结'];
+        }
+
+        return [true, ''];
+    }
+
     /**
      * 通用权重校验
      * @param int|float $weight 权重值