From 760147292fcc7fe745332ba068874d1758bd7248 Mon Sep 17 00:00:00 2001
From: wangting <675591594@qq.com>
Date: 星期三, 05 七月 2023 17:48:26 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/constant/BtmTypeConstant.java           |   10 +
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/pagemodel/BaseQueryObject.java |    7 
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/feign/BtmTypeClient.java                        |    3 
 Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/service/impl/VCIFlowserviceImpl.java       |   16 -
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/ILifeCycleService.java                  |    5 
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/mapper/LifeCycleNodeMapper.java                 |   12 +
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/LifeCycleRuleWrapper.java               |    5 
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/controller/LifeCycleController.java             |    7 
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/mapper/LifeCycleEdgeMapper.java                 |   12 +
 Source/UBCS-WEB/src/mixins/codeApply.js                                                                          |    7 
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/mapper/LifeCycleLineEventMapper.java            |   13 +
 Source/UBCS-WEB/src/components/BatchImport/index.vue                                                             |    8 
 Source/UBCS-WEB/src/views/modeling/originalAdd.vue                                                               |   18 +-
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/LifeCycleServiceImpl.java          |  286 ++++++++++++++++++++++++++++++++++-
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/IBtmTypeService.java                    |   14 +
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/BtmTypeServiceImpl.java            |   33 ++++
 16 files changed, 420 insertions(+), 36 deletions(-)

diff --git a/Source/UBCS-WEB/src/components/BatchImport/index.vue b/Source/UBCS-WEB/src/components/BatchImport/index.vue
index b794d20..b54d048 100644
--- a/Source/UBCS-WEB/src/components/BatchImport/index.vue
+++ b/Source/UBCS-WEB/src/components/BatchImport/index.vue
@@ -148,9 +148,15 @@
           classifyAttr: this.classifyAttr,
         };
       } else if (this.type === "batchImportApply") {
+        const secDTOList = this.localSecVOList.map(item => {
+            return {
+              secOid: item.oid,
+              secValue: this.codeApplyForm[item.id]
+            }
+          })
         return {
           codeClassifyOid: this.codeClassifyOid,
-          secDTOList: this.secDTOList,
+          secDTOList: JSON.stringify(secDTOList),
           ...this.codeApplyForm,
         };
       } else if (this.type === "batchApplyCode") {
diff --git a/Source/UBCS-WEB/src/mixins/codeApply.js b/Source/UBCS-WEB/src/mixins/codeApply.js
index 3f0c1be..4b84617 100644
--- a/Source/UBCS-WEB/src/mixins/codeApply.js
+++ b/Source/UBCS-WEB/src/mixins/codeApply.js
@@ -3,6 +3,7 @@
   data() {
     return {
       secVOList: [],
+      localSecVOList: [],
       showCodeApply: false,
       selfColumnType: {
         codefixedsec: "combox",
@@ -57,13 +58,13 @@
             "coderefersec",
           ];
           this.secVOList = res.data.data.secVOList || []
-          let localSecVOList = (res.data.data.secVOList || []).filter((item) =>
+          this.localSecVOList = (res.data.data.secVOList || []).filter((item) =>
             typeList.includes(item.secType)
           );
-          if (localSecVOList.length > 0) {
+          if (this.localSecVOList.length > 0) {
             this.showCodeApply = true
             this.$nextTick(() => {
-              this.$refs.CodeApply.templateRender(localSecVOList);
+              this.$refs.CodeApply.templateRender(this.localSecVOList);
             });
           }
 
diff --git a/Source/UBCS-WEB/src/views/modeling/originalAdd.vue b/Source/UBCS-WEB/src/views/modeling/originalAdd.vue
index f73ccfa..35dccbd 100644
--- a/Source/UBCS-WEB/src/views/modeling/originalAdd.vue
+++ b/Source/UBCS-WEB/src/views/modeling/originalAdd.vue
@@ -297,17 +297,17 @@
         submitAttribute() {
             const that = this;
             if (that.referInitFlag && that.referEditFlag){
-                this.$delete(this.attribute,'dictCode');
-                this.$delete(this.attribute,'dictKey');
-                this.$delete(this.attribute,'dictValue');
-                this.$delete(this.attribute,'usingDict');
+                this.$set(this.attribute,'dictCode','');
+                this.$set(this.attribute,'dictKey','');
+                this.$set(this.attribute,'dictValue','');
+                this.$set(this.attribute,'usingDict','');
             }
             if (that.enumInitFlag && that.enumEditFlag){
-                this.$delete(this.attribute,'referTypeCode');
-                this.$delete(this.attribute,'referTypeKey');
-                this.$delete(this.attribute,'referTypeValue');
-                this.$delete(this.attribute,'referToId');
-                this.$delete(this.attribute,'referToName');
+                this.$set(this.attribute,'referTypeCode','');
+                this.$set(this.attribute,'referTypeKey','');
+                this.$set(this.attribute,'referTypeValue','');
+                this.$set(this.attribute,'referToId','');
+                this.$set(this.attribute,'referToName','');
             }
             this.$refs.form.validate(function (pass, field) {
                 if (pass) {
diff --git a/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/service/impl/VCIFlowserviceImpl.java b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/service/impl/VCIFlowserviceImpl.java
index e9ec1fd..b01bb9d 100644
--- a/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/service/impl/VCIFlowserviceImpl.java
+++ b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/service/impl/VCIFlowserviceImpl.java
@@ -62,6 +62,8 @@
 	private final ProcessStageAttrService processStageAttrService;
 
 	private static String MODELKEY = "modelKey";//鍓嶇浼犺繃鏉ョ殑妯″瀷key
+	private static String TASKID = "taskId";//鍓嶇浼犺繃鏉ョ殑妯″瀷key
+	private static String PROCESSINSTANCEID = "processInstanceId";//鍓嶇浼犺繃鏉ョ殑妯″瀷key
 	@Override
 	public R<BladeFlow> startProcess(FlowTaskDTO flowTaskUserC){
 		Map<String, Object> kvv = flowTaskUserC.getVariables();
@@ -228,16 +230,10 @@
 			flowTaskDTO.setVariables(variables);
 		}
 
-		String templateId = variables.get("templateId").toString();
-		//娴佺▼闃舵
-		Map<String, Object> m = new HashMap<>();
-		m.put("template_id", templateId);
-		m.put("task_id", crruentActivityId);
-		m.put("model_key", modelKey);
-		QueryWrapper q = Condition.getQueryWrapper(m, ProcessStageAttr.class)
-			.select("attr_id attrId,attr_name attrName,attr_group attrGroup");
-		List<ProcessStageAttr> stageAttrs = processStageAttrService.list(q);
-		flowTaskDTO.setStageAttrs(stageAttrs);
+
+		//鏀惧叆娴佺▼闃舵銆佹祦绋媘odelkey
+		variables.put(TASKID,crruentActivityId);
+		variables.put(PROCESSINSTANCEID,processInstanceId);
 		return flowTaskDTO;
 	}
 }
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/constant/BtmTypeConstant.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/constant/BtmTypeConstant.java
index 59145dd..659a53a 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/constant/BtmTypeConstant.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/constant/BtmTypeConstant.java
@@ -54,6 +54,16 @@
 	public static final String LIFE_CYCLE_EVENT = "lifeCycleEvent";
 
 	/**
+	 * 鐢熷懡鍛ㄦ湡鐨勮妭鐐�
+	 */
+	public static final String LIFE_CYCLE_NODE = "lifeCycleNode";
+
+	/**
+	 * 鐢熷懡鍛ㄦ湡鐨勮繛鎺ョ嚎淇℃伅
+	 */
+	public static final String LIFE_CYCLE_EDGE = "lifeCycleEdge";
+
+	/**
 	 * 鐢熷懡鍛ㄦ湡杩炴帴绾跨殑涓氬姟绫诲瀷鍚嶇О
 	 */
 	public static final String LIFE_CYCLE_LINE = "lifeCycleLine";
diff --git a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/pagemodel/BaseQueryObject.java b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/pagemodel/BaseQueryObject.java
index 780a0c2..b833bf9 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/pagemodel/BaseQueryObject.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/pagemodel/BaseQueryObject.java
@@ -8,6 +8,7 @@
 
 import com.alibaba.fastjson.annotation.JSONField;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import org.springblade.core.mp.support.Query;
 
 import java.io.Serializable;
 import java.util.HashMap;
@@ -103,10 +104,15 @@
 		this.limit = limit;
 	}
 
+	/**
+	 * 浠庝互鍓嶇殑椤圭洰鎷疯礉杩囨潵鐨勫垎椤�
+	 * @return
+	 */
 	@JSONField(
 		serialize = false,
 		deserialize = false
 	)
+	@Deprecated
 	public PageHelper getPageHelper() {
 		PageHelper pageHelper = new PageHelper(this.limit);
 		pageHelper.setPage(this.getPage());
@@ -115,6 +121,7 @@
 		return pageHelper;
 	}
 
+
 	public BaseQueryObject addSort(String sort, String order) {
 		this.setSort(StringUtils.isBlank(this.getSort()) ? sort : this.getSort() + "," + sort);
 		this.setOrder(StringUtils.isBlank(this.getOrder()) ? order : this.getOrder() + "," + order);
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/controller/LifeCycleController.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/controller/LifeCycleController.java
index c3a9567..2360c4b 100644
--- a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/controller/LifeCycleController.java
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/controller/LifeCycleController.java
@@ -9,6 +9,7 @@
 import com.vci.ubcs.omd.vo.LifeCycleVO;
 import com.vci.ubcs.omd.wrapper.LifeCycleRuleWrapper;
 import com.vci.ubcs.starter.web.pagemodel.BaseQueryObject;
+import com.vci.ubcs.starter.web.pagemodel.BladeQueryObject;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
@@ -43,12 +44,12 @@
 	@GetMapping("page")
 	@ApiOperationSupport(order = 2)
 	@ApiOperation(value = "鍒嗛〉鏌ヨ鐢熷懡鍛ㄦ湡",notes = "鍒嗛〉鏌ヨ鐢熷懡鍛ㄦ湡")
-	public R<IPage<LifeCycleVO>> page(BaseQueryObject baseQueryObject){
-		Map<String, String> conditionMap = baseQueryObject.getConditionMap();
+	public R<IPage<LifeCycleVO>> page(BladeQueryObject baseQueryObject){
+		Map<String, Object> conditionMap = baseQueryObject.getConditionMap();
 		if (conditionMap == null){
 			conditionMap = new HashMap<>();
 		}
-		return R.data(lifeCycleService.listLife(conditionMap,baseQueryObject.getPageHelper()));
+		return R.data(lifeCycleService.listLife(conditionMap,baseQueryObject.getQuery()));
 	}
 
 
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/feign/BtmTypeClient.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/feign/BtmTypeClient.java
index b94fd52..f75ae74 100644
--- a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/feign/BtmTypeClient.java
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/feign/BtmTypeClient.java
@@ -171,6 +171,7 @@
 	 * @return 榛樿瀛楁灞炴��
 	 */
 	@Override
+	@GetMapping(GET_DEFAULT_ATTR_BY_BTM_ID)
 	public R<BtmTypeVO> getDefaultAttrByBtmId(String btmTypeId) {
 		return R.data(Optional.ofNullable(btmTypeService.getDefaultAttrByBtmId(btmTypeId)).orElseGet(BtmTypeVO::new));
 	}
@@ -182,6 +183,7 @@
 	 * @return 鎵�鏈夊瓧娈�
 	 */
 	@Override
+	@GetMapping(GET_ALL_ATTR_BY_BTM_ID)
 	public R<BtmTypeVO> getAllAttributeByBtmId(String btmTypeId) {
 		return R.data(Optional.ofNullable(btmTypeService.getAllAttributeByBtmId(btmTypeId)).orElseGet(BtmTypeVO::new));
 	}
@@ -193,6 +195,7 @@
 	 * @return 鎵�鏈夊瓧娈�
 	 */
 	@Override
+	@GetMapping(GET_ALL_ATTR_BY_BTM_OID)
 	public R<BtmTypeVO> getAllAttributeByBtmOid(String btmTypeOid) {
 		return R.data(Optional.ofNullable(btmTypeService.getAllAttributeByBtmOid(btmTypeOid)).orElseGet(BtmTypeVO::new));
 	}
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/mapper/LifeCycleEdgeMapper.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/mapper/LifeCycleEdgeMapper.java
new file mode 100644
index 0000000..139bed1
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/mapper/LifeCycleEdgeMapper.java
@@ -0,0 +1,12 @@
+package com.vci.ubcs.omd.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.vci.ubcs.omd.entity.LifeCycleEdge;
+
+/**
+ * 鐢熷懡鍛ㄦ湡鐨勮繛鎺ョ嚎
+ * @author weidy
+ * @date 2023/7/4
+ */
+public interface LifeCycleEdgeMapper extends BaseMapper<LifeCycleEdge> {
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/mapper/LifeCycleLineEventMapper.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/mapper/LifeCycleLineEventMapper.java
new file mode 100644
index 0000000..1128048
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/mapper/LifeCycleLineEventMapper.java
@@ -0,0 +1,13 @@
+package com.vci.ubcs.omd.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.vci.ubcs.omd.dto.LifeCycleLineEventDTO;
+import com.vci.ubcs.omd.entity.LifeCycleLineEvent;
+
+/**
+ * 鐢熷懡鍛ㄦ湡杩炴帴绾跨殑浜嬩欢
+ * @author weidy
+ * @date 2023/7/4
+ */
+public interface LifeCycleLineEventMapper extends BaseMapper<LifeCycleLineEvent> {
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/mapper/LifeCycleNodeMapper.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/mapper/LifeCycleNodeMapper.java
new file mode 100644
index 0000000..882bf55
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/mapper/LifeCycleNodeMapper.java
@@ -0,0 +1,12 @@
+package com.vci.ubcs.omd.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.vci.ubcs.omd.entity.LifeCycleNode;
+
+/**
+ * 鐢熷懡鍛ㄦ湡鐨勮妭鐐瑰瓨鍌�
+ * @author weidy
+ * @date 2023/7/4
+ */
+public interface LifeCycleNodeMapper extends BaseMapper<LifeCycleNode> {
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/IBtmTypeService.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/IBtmTypeService.java
index 0049267..b8a6aff 100644
--- a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/IBtmTypeService.java
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/IBtmTypeService.java
@@ -250,4 +250,18 @@
 	 * @return 涓氬姟绫诲瀷
 	 */
 	BtmTypeVO getAllAttributeByBtmOid(String btmTypeOid);
+
+	/**
+	 * 鑾峰彇寮曠敤鏌愪釜鐢熷懡鍛ㄦ湡鐨勪笟鍔$被鍨�
+	 * @param lifeOid 鐢熷懡鍛ㄦ湡鐨勪富閿�
+	 * @return 涓氬姟绫诲瀷鏄剧ず瀵硅薄
+	 */
+    List<BtmTypeVO> selectByLifeId(String lifeId);
+
+	/**
+	 * 缁熻寮曠敤鏌愪釜鐢熷懡鍛ㄦ湡鐨勪笟鍔$被鍨�
+	 * @param lifeOid 鐢熷懡鍛ㄦ湡鐨勪富閿�
+	 * @return 涓暟
+	 */
+	Integer countByLifeId(String lifeId);
 }
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/ILifeCycleService.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/ILifeCycleService.java
index fd21582..525cfcd 100644
--- a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/ILifeCycleService.java
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/ILifeCycleService.java
@@ -7,6 +7,7 @@
 import com.vci.ubcs.omd.vo.BtmTypeVO;
 import com.vci.ubcs.omd.vo.LifeCycleVO;
 import com.vci.ubcs.starter.web.pagemodel.PageHelper;
+import org.springblade.core.mp.support.Query;
 
 import java.util.List;
 import java.util.Map;
@@ -21,10 +22,10 @@
 	/**
 	 * 鑾峰彇鐢熷懡鍛ㄦ湡鍒楄〃
 	 * @param conditionMap 鏌ヨ鏉′欢
-	 * @param pageHelper 鍒嗛〉
+	 * @param query 鍒嗛〉
 	 * @return 鐢熷懡鍛ㄦ湡鐨勬樉绀哄璞�
 	 */
-	IPage<LifeCycleVO> listLife(Map<String, String> conditionMap, PageHelper pageHelper);
+	IPage<LifeCycleVO> listLife(Map<String, Object> conditionMap, Query query);
 
 	/**
 	 * 娣诲姞淇濆瓨
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/BtmTypeServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/BtmTypeServiceImpl.java
index f947641..af7f220 100644
--- a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/BtmTypeServiceImpl.java
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/BtmTypeServiceImpl.java
@@ -4,6 +4,7 @@
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.nacos.api.exception.NacosException;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.vci.ubcs.omd.constant.BtmTypeConstant;
@@ -868,4 +869,36 @@
 		btmType.setAttributes(btmTypeAttributeService.getAllAttribute(btmType));
 		return btmType;
 	}
+
+	/**
+	 * 鑾峰彇寮曠敤鏌愪釜鐢熷懡鍛ㄦ湡鐨勪笟鍔$被鍨�
+	 *
+	 * @param lifeId 鐢熷懡鍛ㄦ湡鐨勭紪鍙�
+	 * @return 涓氬姟绫诲瀷鏄剧ず瀵硅薄
+	 */
+	@Override
+	public List<BtmTypeVO> selectByLifeId(String lifeId) {
+		if(StringUtils.isBlank(lifeId)){
+			return new ArrayList<>();
+		}
+		LambdaQueryWrapper<BtmType> query = new LambdaQueryWrapper<BtmType>();
+		query.eq(BtmType::getLifeCycleId,lifeId);
+		return BtmTypeWrapper.build().listEntityVO(getBaseMapper().selectList(query));
+	}
+
+	/**
+	 * 缁熻寮曠敤鏌愪釜鐢熷懡鍛ㄦ湡鐨勪笟鍔$被鍨�
+	 *
+	 * @param lifeId 鐢熷懡鍛ㄦ湡鐨勭紪鍙�
+	 * @return 涓暟
+	 */
+	@Override
+	public Integer countByLifeId(String lifeId) {
+		if(StringUtils.isBlank(lifeId)){
+			return 0;
+		}
+		LambdaQueryWrapper<BtmType> query = new LambdaQueryWrapper<BtmType>();
+		query.eq(BtmType::getLifeCycleId,lifeId);
+		return baseMapper.selectCount(query).intValue();
+	}
 }
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/LifeCycleServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/LifeCycleServiceImpl.java
index 29ad035..62db19e 100644
--- a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/LifeCycleServiceImpl.java
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/LifeCycleServiceImpl.java
@@ -1,18 +1,49 @@
 package com.vci.ubcs.omd.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.vci.ubcs.omd.constant.BtmTypeConstant;
 import com.vci.ubcs.omd.dto.LifeCycleDTO;
+import com.vci.ubcs.omd.dto.LifeCycleEdgeDTO;
+import com.vci.ubcs.omd.dto.LifeCycleLineEventDTO;
+import com.vci.ubcs.omd.dto.LifeCycleNodeDTO;
+import com.vci.ubcs.omd.entity.LifeCycleEdge;
+import com.vci.ubcs.omd.entity.LifeCycleLineEvent;
+import com.vci.ubcs.omd.entity.LifeCycleNode;
 import com.vci.ubcs.omd.entity.LifeCycleRule;
+import com.vci.ubcs.omd.mapper.LifeCycleEdgeMapper;
+import com.vci.ubcs.omd.mapper.LifeCycleLineEventMapper;
 import com.vci.ubcs.omd.mapper.LifeCycleMapper;
+import com.vci.ubcs.omd.mapper.LifeCycleNodeMapper;
+import com.vci.ubcs.omd.repeater.DomainRepeater;
+import com.vci.ubcs.omd.service.IBtmTypeService;
 import com.vci.ubcs.omd.service.ILifeCycleService;
+import com.vci.ubcs.omd.service.IStatusService;
 import com.vci.ubcs.omd.vo.BtmTypeVO;
 import com.vci.ubcs.omd.vo.LifeCycleVO;
-import com.vci.ubcs.starter.web.pagemodel.PageHelper;
+import com.vci.ubcs.omd.vo.StatusVO;
+import com.vci.ubcs.omd.wrapper.LifeCycleRuleWrapper;
+import com.vci.ubcs.starter.enumpack.NewAppConstantEnum;
+import com.vci.ubcs.starter.exception.VciBaseException;
+import com.vci.ubcs.starter.web.constant.RegExpConstant;
+import com.vci.ubcs.starter.web.util.BeanUtil;
+import com.vci.ubcs.starter.web.util.VciBaseUtil;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.secure.utils.AuthUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
+import org.springframework.util.StringUtils;
 
-import java.util.List;
-import java.util.Map;
+import javax.annotation.Resource;
+import java.util.*;
+import java.util.stream.Collectors;
+
 
 /**
  * 鐢熷懡鍛ㄦ湡鐨勬湇鍔�
@@ -22,17 +53,49 @@
 @Service
 public class LifeCycleServiceImpl  extends ServiceImpl<LifeCycleMapper, LifeCycleRule> implements ILifeCycleService{
 
+	/**
+	 * 鑺傜偣鐨勬暟鎹眰
+	 */
+	@Resource
+	private LifeCycleNodeMapper nodeMapper;
+
+	/**
+	 * 杩炴帴绾挎暟鎹眰
+	 */
+	@Resource
+	private LifeCycleEdgeMapper edgeMapper;
+
+	/**
+	 * 鐘舵��
+	 */
+	@Autowired(required = false)
+	@Lazy
+	private IStatusService statusService;
+
+	/**
+	 * 杩炴帴绾跨殑浜嬩欢
+	 */
+	@Resource
+	private LifeCycleLineEventMapper lineEventMapper;
+
+	/**
+	 * 涓氬姟绫诲瀷鐨勬湇鍔�
+	 */
+	@Autowired(required = false)
+	@Lazy
+	private IBtmTypeService btmTypeService;
+
 
 	/**
 	 * 鑾峰彇鐢熷懡鍛ㄦ湡鍒楄〃
 	 *
 	 * @param conditionMap 鏌ヨ鏉′欢
-	 * @param pageHelper   鍒嗛〉
+	 * @param query   鍒嗛〉
 	 * @return 鐢熷懡鍛ㄦ湡鐨勬樉绀哄璞�
 	 */
 	@Override
-	public IPage<LifeCycleVO> listLife(Map<String, String> conditionMap, PageHelper pageHelper) {
-		return null;
+	public IPage<LifeCycleVO> listLife(Map<String, Object> conditionMap, Query query) {
+		return LifeCycleRuleWrapper.build().pageVO(baseMapper.selectPage(Condition.getPage(query),Condition.getQueryWrapper(conditionMap,LifeCycleRule.class).lambda().orderByAsc(LifeCycleRule::getId)));
 	}
 
 	/**
@@ -42,9 +105,160 @@
 	 * @return 娣诲姞鍚庣殑鏄剧ず瀵硅薄
 	 */
 	@Override
+	@Transactional
 	public LifeCycleVO addSave(LifeCycleDTO lifeCycleDTO) {
-		return null;
+		VciBaseUtil.alertNotNull(lifeCycleDTO,"鐢熷懡鍛ㄦ湡淇℃伅",lifeCycleDTO.getId(),"鐢熷懡鍛ㄦ湡鐨勭紪鍙�",lifeCycleDTO.getName(),"鐢熷懡鍛ㄦ湡鍚嶇О",lifeCycleDTO.getNodes(),"鐢熷懡鍛ㄦ湡鐨勮妭鐐�",lifeCycleDTO.getStartStatus(),"璧峰鐘舵��");
+		//鍏堟煡璇㈡槸鍚﹀瓨鍦�
+		QueryWrapper wrapper = new QueryWrapper(LifeCycleRule.class);
+		wrapper.eq("lower(id)",lifeCycleDTO.getId().toLowerCase(Locale.ROOT));
+		if(baseMapper.selectCount(wrapper)>0){
+			throw new VciBaseException("鐢熷懡鍛ㄦ湡鐨勭紪鍙蜂笉鑳介噸澶�");
+		}
+		String lifeOid = addLifeCycle(lifeCycleDTO);
+		return LifeCycleRuleWrapper.build().entityVO(baseMapper.selectById(lifeOid));
 	}
+
+	/**
+	 * 娣诲姞鐢熷懡鍛ㄦ湡
+	 * @param lifeCycleDTO
+	 * @return 涓婚敭
+	 */
+	private String addLifeCycle(LifeCycleDTO lifeCycleDTO){
+		//缂栧彿涓嶈兘鏈夌壒娈婄殑鍐呭
+		if(!lifeCycleDTO.getId().matches(RegExpConstant.LETTER)){
+			throw new VciBaseException("鐢熷懡鍛ㄦ湡鐨勭紪鍙峰彧鑳芥槸瀛楁瘝");
+		}
+		LifeCycleRule life = LifeCycleRuleWrapper.build().copyDTO2DO(lifeCycleDTO);
+		life.setOid(VciBaseUtil.getPk());
+		String creator = AuthUtil.getUserAccount();
+		Date now = new Date();
+		life.setBtmname(BtmTypeConstant.LIFE_CYCLE);
+		life.setOwner(creator);
+		life.setCreator(creator);
+		life.setCreateTime(now);
+		life.setLastModifier(creator);
+		life.setLastModifyTime(now);
+		life.setTs(now);
+
+		List<String> statusList = new ArrayList<>();
+		//澶勭悊鑺傜偣
+		if(!CollectionUtils.isEmpty(lifeCycleDTO.getNodes())){
+			lifeCycleDTO.getNodes().stream().forEach(nodeDTO->{
+				addLifeCycleNode(nodeDTO,life.getOid(),creator,now);
+				statusList.add(nodeDTO.getId());
+			});
+		}
+		if(!statusList.contains(life.getStartStatus())){
+			throw new VciBaseException("璧峰鐘舵�佷笉鍦ㄧ敓鍛藉懆鏈熺殑鐢诲竷涓�");
+		}
+		//鍒ゆ柇鎵�鏈夌殑鑺傜偣鍦ㄧ郴缁熼噷閮藉瓨鍦�
+		List<String> existStatusIdList = statusService.listStatusByIdCollection(statusList).stream().map(StatusVO::getId).collect(Collectors.toList());
+		String unExistStatus = statusList.stream().filter(s -> !existStatusIdList.contains(s)).collect(Collectors.joining(","));
+		if(StringUtils.hasLength(unExistStatus)){
+			throw new VciBaseException(unExistStatus + "杩欎簺鐘舵�佸湪鐘舵�佹睜閲屼笉瀛樺湪锛屼笉鑳芥坊鍔犲埌鐢熷懡鍛ㄦ湡涓�");
+		}
+		//澶勭悊杈圭晫鍜岃繛鎺ョ嚎
+		if(!CollectionUtils.isEmpty(lifeCycleDTO.getEdges())){
+			lifeCycleDTO.getEdges().stream().forEach(edgeDTO->{
+				String edgeOid = addLifeCycleEdge(edgeDTO,statusList,life.getOid(),creator,now);
+				if(!CollectionUtils.isEmpty(edgeDTO.getEvents())){
+					//鏈変簨浠�
+					edgeDTO.getEvents().stream().forEach(eventDTO->{
+						addLifeCycleLineEvent(eventDTO,edgeOid,creator,now);
+					});
+				}
+			});
+		}
+		baseMapper.insert(life);
+		return life.getOid();
+	}
+
+	/**
+	 * 娣诲姞鐢熷懡鍛ㄦ湡鐨勮繛鎺ョ嚎涓婄殑浜嬩欢
+	 * @param eventDTO
+	 * @param edgeOid
+	 * @param creator
+	 * @param now
+	 */
+	private void addLifeCycleLineEvent(LifeCycleLineEventDTO eventDTO,String edgeOid,String creator,Date now){
+		VciBaseUtil.alertNotNull(eventDTO.getBizDomain(),"鎵�灞為鍩�",eventDTO.getEventFullName(),"浜嬩欢鐨勫叏璺緞");
+		NewAppConstantEnum[] values = NewAppConstantEnum.values();
+		Boolean fined = false;
+		for (int i = 0; i < values.length; i++) {
+			NewAppConstantEnum value = values[i];
+			if(value.getName().equalsIgnoreCase(eventDTO.getBizDomain())){
+				fined = true;
+				break;
+			}
+		}
+		if(!fined){
+			throw new VciBaseException(eventDTO.getBizDomain() + "杩欎釜棰嗗煙杩樻病鏈夊紑鏀�,璇疯寮�鍙戜汉鍛樺湪NewAppConstantEnum绫讳腑娣诲姞");
+		}
+		LifeCycleLineEvent event = org.springblade.core.tool.utils.BeanUtil.copy(eventDTO, LifeCycleLineEvent.class);
+		event.setOid(VciBaseUtil.getPk());
+		event.setPkLifeCycleEdge(edgeOid);
+		event.setBtmname(BtmTypeConstant.LIFE_CYCLE_LINE_EVENT);
+		event.setOwner(creator);
+		event.setCreator(creator);
+		event.setCreateTime(now);
+		event.setLastModifier(creator);
+		event.setLastModifyTime(now);
+		event.setTs(now);
+		lineEventMapper.insert(event);
+	}
+
+	/**
+	 * 娣诲姞鐢熷懡鍛ㄦ湡鐨勮妭鐐�
+	 * @param nodeDTO
+	 * @param lifeOid
+	 * @param creator
+	 * @param now
+	 */
+	private void addLifeCycleNode(LifeCycleNodeDTO nodeDTO,String lifeOid,String creator,Date now){
+		VciBaseUtil.alertNotNull(nodeDTO.getId(),"鐘舵�佹爣璇�",nodeDTO.getName(),"鐘舵�佸悕绉�");
+		LifeCycleNode node = org.springblade.core.tool.utils.BeanUtil.copy(nodeDTO, LifeCycleNode.class);
+		node.setOid(VciBaseUtil.getPk());
+		node.setLifeCycleOid(lifeOid);
+		node.setBtmname(BtmTypeConstant.LIFE_CYCLE_NODE);
+		node.setOwner(creator);
+		node.setCreator(creator);
+		node.setCreateTime(now);
+		node.setLastModifier(creator);
+		node.setLastModifyTime(now);
+		node.setTs(now);
+		nodeMapper.insert(node);
+	}
+
+	/**
+	 * 娣诲姞鐢熷懡鍛ㄦ湡鐨勮繛鎺ョ嚎
+	 * @param edgeDTO
+	 * @param statusList
+	 * @param lifeOid
+	 * @param creator
+	 * @param now
+	 * @return 杩炴帴绾跨殑涓婚敭
+	 */
+	private String addLifeCycleEdge(LifeCycleEdgeDTO edgeDTO,List<String> statusList,String lifeOid,String creator,Date now){
+		VciBaseUtil.alertNotNull(edgeDTO.getSource(),"鏉ユ簮鐘舵��",edgeDTO.getTarget(),"鐩爣鐘舵��",edgeDTO.getName(),"杩炴帴绾垮悕绉�");
+		if(!statusList.contains(edgeDTO.getSource())
+			||!statusList.contains(edgeDTO.getTarget())){
+			throw new VciBaseException("鏁版嵁閿欒锛孾" + edgeDTO.getName() + "]杩炴帴绾夸笂涓娇鐢ㄧ殑鐘舵�佹病鏈夋壘鍒�");
+		}
+		LifeCycleEdge edge = org.springblade.core.tool.utils.BeanUtil.copy(edgeDTO, LifeCycleEdge.class);
+		edge.setOid(VciBaseUtil.getPk());
+		edge.setLifeCycleOid(lifeOid);
+		edge.setBtmname(BtmTypeConstant.LIFE_CYCLE_EDGE);
+		edge.setOwner(creator);
+		edge.setCreator(creator);
+		edge.setCreateTime(now);
+		edge.setLastModifier(creator);
+		edge.setLastModifyTime(now);
+		edge.setTs(now);
+		edgeMapper.insert(edge);
+		return edge.getOid();
+	}
+
+
 
 	/**
 	 * 鎵归噺娣诲姞鍐呭
@@ -53,8 +267,40 @@
 	 * @return 娣诲姞鍚庣殑鏄剧ず瀵硅薄
 	 */
 	@Override
+	@Transactional
 	public List<LifeCycleVO> batchAddSave(List<LifeCycleDTO> lifeCycleDTOs) {
-		return null;
+		VciBaseUtil.alertNotNull(lifeCycleDTOs,"鐢熷懡鍛ㄦ湡鐨勪俊鎭�");
+		//鍏堥泦浣撴牎楠屼竴涓�
+		if(lifeCycleDTOs.stream().anyMatch(s->!StringUtils.hasLength(s.getId()) || !StringUtils.hasLength(s.getName())
+		|| CollectionUtils.isEmpty(s.getNodes()) || !StringUtils.hasLength(s.getStartStatus()))){
+			throw new VciBaseException("鐢熷懡鍛ㄦ湡鐨勭紪鍙凤紝鍚嶇О锛岃捣濮嬬姸鎬侊紝鍖呭惈鐨勮妭鐐逛笉鑳戒负绌�");
+		}
+		//缁熶竴鏍¢獙閲嶅
+		Map<String, List<LifeCycleDTO>> dtoMap = lifeCycleDTOs.stream().collect(Collectors.groupingBy(LifeCycleDTO::getId));
+		dtoMap.forEach((id,dtos)->{
+			if(dtos.size()>1){
+				throw new VciBaseException("缂栧彿涓恒��" + id + "銆戠殑鐢熷懡鍛ㄦ湡閲嶅");
+			}
+		});
+		VciBaseUtil.switchCollectionForOracleIn(dtoMap.keySet()).stream().forEach(
+			ids->{
+				QueryWrapper wrapper = new QueryWrapper(LifeCycleRule.class);
+				ids.stream().forEach(id->{
+					wrapper.eq("lower(id)",id.toLowerCase(Locale.ROOT));
+					wrapper.or();
+				});
+				wrapper.eq("1","2");
+				if(baseMapper.selectCount(wrapper)>0){
+					throw new VciBaseException("鐢熷懡鍛ㄦ湡鐨勭紪鍙蜂笉鑳介噸澶�");
+				}
+			}
+		);
+		//鍏堝惊鐜鐞嗕笅锛屽洜涓虹幇鍦ㄥ綋鍓嶇敤鎴锋病鏈夊鐞嗕负绾跨▼鍏变韩鐨勶紝鍚庨潰淇敼鍚庯紝鍙互鐢ㄥ苟鍙戞祦鍘诲鐞�
+		List<String> oidList = new ArrayList<>();
+		lifeCycleDTOs.stream().forEach(dto->{
+			oidList.add(addLifeCycle(dto));
+		});
+		return LifeCycleRuleWrapper.build().listEntityVO(listByIds(oidList));
 	}
 
 	/**
@@ -63,10 +309,34 @@
 	 * @param lifeCycleDTO 鏁版嵁浼犺緭瀵硅薄
 	 */
 	@Override
+	@Transactional
 	public void delete(LifeCycleDTO lifeCycleDTO) {
+		VciBaseUtil.alertNotNull(lifeCycleDTO,"鏁版嵁浼犺緭瀵硅薄",lifeCycleDTO.getOid(),"涓婚敭");
+		LifeCycleRule rule = null;
+		try {
+			rule = getById(lifeCycleDTO.getOid());
+		}catch (Throwable e){
+			throw new VciBaseException("浣跨敤涓婚敭鑾峰彇瀵硅薄鍑洪敊锛岃繖涓暟鎹彲鑳戒笉瀛樺湪锛屾垨鑰呮暟鎹噸澶嶄簡");
+		}
+		//妫�鏌ヨ寮曠敤涓嶈兘鍒犻櫎
+		Integer count = btmTypeService.countByLifeId(lifeCycleDTO.getOid());
+		if(count !=null && count>0){
+			throw new VciBaseException("鐢熷懡鍛ㄦ湡琚娇鐢紝涓嶈兘琚垹闄�");
+		}
+		//鎴戜滑鏌ヨ鍏ㄩ儴node鍜宔dge锛岀劧鍚庝竴璧峰垹闄�
 
 	}
 
+
+	private List<LifeCycleNode> selectNodeByLifeOid(String lifeOid){
+		if(!StringUtils.hasLength(lifeOid)){
+			return new ArrayList<>();
+		}
+		LambdaQueryWrapper<LifeCycleNode> query = new LambdaQueryWrapper<LifeCycleNode>();
+		query.eq(LifeCycleNode::getLifeCycleOid,lifeOid);
+		return nodeMapper.selectList(query);
+	}
+
 	/**
 	 * 鎵归噺鍒犻櫎鐢熷懡鍛ㄦ湡
 	 *
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/LifeCycleRuleWrapper.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/LifeCycleRuleWrapper.java
index 739efa7..4bf2bf2 100644
--- a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/LifeCycleRuleWrapper.java
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/LifeCycleRuleWrapper.java
@@ -1,5 +1,6 @@
 package com.vci.ubcs.omd.wrapper;
 
+import com.vci.ubcs.omd.dto.LifeCycleDTO;
 import com.vci.ubcs.omd.entity.LifeCycleRule;
 import com.vci.ubcs.omd.vo.LifeCycleVO;
 import org.springblade.core.mp.support.BaseEntityWrapper;
@@ -43,4 +44,8 @@
 	}
 
 
+    public LifeCycleRule copyDTO2DO(LifeCycleDTO lifeCycleDTO) {
+		LifeCycleRule LifeCycleRule = BeanUtil.copy(lifeCycleDTO, LifeCycleRule.class);
+		return LifeCycleRule;
+    }
 }

--
Gitblit v1.9.3