|
|
@@ -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 权重值
|