Explorar o código

[task-3214] 【后端】提供一个新的接口,去修改ibps_bpm_approval_his表中的时间戳信息,并生成新的快照

Li Yuan hai 1 ano
pai
achega
e9d7682fc4

+ 6 - 2
ibps-provider-root/modules/provider-platform/src/main/java/com/lc/ibps/platform/api/IPlatformPatchService.java

@@ -1,6 +1,7 @@
 package com.lc.ibps.platform.api;
 
 import com.lc.ibps.bpmn.persistence.entity.BpmApprovePo;
+import com.lc.ibps.bpmn.persistence.entity.BpmInstPo;
 import com.lc.ibps.cloud.entity.APIResult;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.RequestBody;
@@ -16,7 +17,10 @@ import java.util.List;
 @RestController
 public interface IPlatformPatchService {
 
-    @RequestMapping(value = "/changCompleteTime", method = RequestMethod.POST)
-    public APIResult<Void> changCompleteTime(
+    @RequestMapping(value = "/changeCompleteTime", method = RequestMethod.POST)
+    public APIResult<Void> changeCompleteTime(
             @RequestBody(required = true)  @Valid List<BpmApprovePo> approvals);
+
+    @RequestMapping(value = "/replenishSnapshot", method = RequestMethod.POST)
+    public APIResult<Void> replenishSnapshot(@RequestBody(required = true)  @Valid BpmApprovePo po);
 }

+ 14 - 2
ibps-provider-root/modules/provider-platform/src/main/java/com/lc/ibps/platform/provider/PlatformPatchProvider.java

@@ -1,6 +1,7 @@
 package com.lc.ibps.platform.provider;
 
 import com.lc.ibps.bpmn.persistence.entity.BpmApprovePo;
+import com.lc.ibps.bpmn.persistence.entity.BpmInstPo;
 import com.lc.ibps.cloud.entity.APIResult;
 import com.lc.ibps.cloud.provider.GenericProvider;
 import com.lc.ibps.platform.api.IPlatformPatchService;
@@ -20,13 +21,24 @@ public class PlatformPatchProvider extends GenericProvider implements IPlatformP
     @Autowired
     private PatchService patchService;
     @Override
-    public APIResult<Void> changCompleteTime(List<BpmApprovePo> approvals) {
+    public APIResult<Void> changeCompleteTime(List<BpmApprovePo> approvals) {
         patchService.changCompleteTime(approvals);
         try {
             patchService.replenishSnapshotAsync();
         } catch (Exception e) {
             logger.error(e.getMessage(),e);
         }
-        return null;
+        return new APIResult<Void>();
+    }
+
+    @Override
+    public APIResult<Void> replenishSnapshot(BpmApprovePo po) {
+        patchService.createSnapshotRecord(po.getId());
+        try {
+            patchService.replenishSnapshotAsync();
+        } catch (Exception e) {
+            logger.error(e.getMessage(),e);
+        }
+        return new APIResult<Void>();
     }
 }

+ 80 - 17
ibps-provider-root/modules/provider-platform/src/main/java/com/lc/ibps/platform/service/PatchService.java

@@ -1,5 +1,6 @@
 package com.lc.ibps.platform.service;
 
+import com.lc.ibps.api.base.id.IdGenerator;
 import com.lc.ibps.base.core.constants.StringPool;
 import com.lc.ibps.base.core.util.AppUtil;
 import com.lc.ibps.base.core.util.BeanUtils;
@@ -13,6 +14,7 @@ import com.lc.ibps.cloud.entity.APIResult;
 import com.lc.ibps.cloud.file.provider.UploadProvider;
 import com.lc.ibps.common.file.persistence.entity.AttachmentPo;
 import com.lc.ibps.org.party.persistence.entity.DefaultPartyUserPo;
+import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -24,8 +26,10 @@ import javax.annotation.Resource;
 import java.net.URLEncoder;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
+import java.util.Date;
 import java.util.List;
 import java.util.Map;
+import java.util.UUID;
 import java.util.concurrent.Future;
 
 @Service
@@ -37,33 +41,92 @@ public class PatchService {
     private ICommonDao<?> commonDao;
     @Autowired
     private UploadProvider uploadFile;
+    @Autowired
+    IdGenerator idGenerator;
 
-    public  void changCompleteTime(List<BpmApprovePo> approvals){
-        if(Collections.isEmpty(approvals)) return;
-        String bizKey;
-        String boCode;
-        String kuaiZhao;
-        for (BpmApprovePo po :approvals) {
+    public  void changCompleteTime(List<BpmApprovePo> approvals) {
+        if (Collections.isEmpty(approvals)) return;
+        updateBpmApprovePo(approvals);
+        for (BpmApprovePo po : approvals) {
             String procInstId = po.getProcInstId();
-            List<Map<String, Object>> query = (List<Map<String, Object>>) commonDao.query("SELECT h.biz_key_ bizKey,CONCAT('t_',f.BO_CODE_) AS boCode FROM ibps_bpm_inst_his h,ibps_bpm_def f \n" +
-                    "    WHERE f.bpmn_def_id_ = h.bpmn_def_id_  AND h.id_ =#{p0}", new String[]{procInstId});
+            if(createSnapshotRecord(procInstId)){
+                break;
+            }
+        }
 
-            if(Collections.isNotEmpty(query)){
-                bizKey = (String)query.get(0).get("bizKey");
-                boCode = (String)query.get(0).get("boCode");
-                List<Map<String, Object>> query1 = (List<Map<String, Object>>)commonDao.query("SELECT kuai_zhao_ kuaiZhao FROM " + boCode + " WHERE id_=#{p0}", new String[]{bizKey});
+    }
 
-                if(Collections.isNotEmpty(query1)){
-                    kuaiZhao = (String)query1.get(0).get("kuaiZhao");
-                    break;
-                }
+    public boolean createSnapshotRecord(String procInstId) {
+        String bizKey = null;
+        String boCode = null;
+        String kuaiZhao = "";
+
+        String id = idGenerator.getId();
+
+        List<Map<String, Object>> query = (List<Map<String, Object>>) commonDao.query("SELECT h.biz_key_ bizKey,CONCAT('t_',f.BO_CODE_) AS boCode FROM ibps_bpm_inst_his h,ibps_bpm_def f \n" +
+                "    WHERE f.bpmn_def_id_ = h.bpmn_def_id_  AND h.id_ =#{p0}", new String[]{procInstId});
+
+        if (Collections.isNotEmpty(query)) {
+            bizKey = (String) query.get(0).get("bizKey");
+            boCode = (String) query.get(0).get("boCode");
+            List<Map<String, Object>> query1 = (List<Map<String, Object>>) commonDao.query("SELECT kuai_zhao_ kuaiZhao FROM " + boCode + " WHERE id_=#{p0}", new String[]{bizKey});
+
+            if (Collections.isNotEmpty(query1)) {
+                kuaiZhao = (String) query1.get(0).get("kuaiZhao");
+                commonDao.execute("INSERT INTO t_bckzsjb (ID_, tenant_id_, CREATE_BY_, CREATE_TIME_,BIZ_KEY_, PROC_DEF_KEY_, PROC_DEF_NAME_, bao_biao_lu_jing_,user_id_,user_name_,account_,END_TIME_,BO_CODE_,position_id_,org_id_)\n" +
+                        "SELECT\n" +
+                        "    #{p0},#{p1},h.CREATE_BY_,NOW(),h.BIZ_KEY_,h.PROC_DEF_KEY_,h.PROC_DEF_NAME_,d.bao_biao_lu_jing_,e.id_ user_id_,e.name_,u.ACCOUNT_,h.END_TIME_,\n" +
+                        "    CONCAT('t_',f.BO_CODE_) AS BO_CODE_,e1.position_id,SUBSTRING_INDEX(p.PATH_,'.', 1) AS org_id_\n" +
+                        "FROM\n" +
+                        "    ibps_bpm_inst_his h\n" +
+                        "    INNER JOIN t_lcidglbdbb d ON h.PROC_DEF_KEY_ = d.liu_cheng_xuan_ze\n" +
+                        "    LEFT JOIN ibps_bpm_def f ON f.DEF_KEY_ = h.PROC_DEF_KEY_\n" +
+                        "    LEFT JOIN ibps_party_employee e ON e.id_ = h.CREATE_BY_\n" +
+                        "    LEFT JOIN ibps_party_user u ON e.id_ = u.id_\n" +
+                        "  LEFT JOIN (SELECT id_, SUBSTRING_INDEX(POSITIONS_, ',', 1) AS position_id FROM ibps_party_employee) e1 ON e.id_ = e1.id_\n" +
+                        "    LEFT JOIN ibps_party_entity p ON e1.position_id = p.id_\n" +
+                        "WHERE\n" +
+                        "    d.bao_biao_lu_jing_ IS NOT NULL\n" +
+                        "    AND d.bao_biao_lu_jing_ <> ''\n" +
+                        "    and h.BIZ_KEY_ =#{p2}", new String[]{id, kuaiZhao, bizKey});
+                return true;
             }
-//                commonDao.execute("update ibps_bpm_approval_his set COMPLETE_TIME_='1',CREATE_TIME_='"+kuaiZhaoId+"' where id_='"+id+"'");
         }
+        return false;
+    }
 
 
+    private void updateBpmApprovePo(List<BpmApprovePo> approvals){
+        Date t = null;
+        String id = null;
+        for (BpmApprovePo po :approvals) {
+            id = po.getProcInstId();
+            if(po.getCompleteTime()==null ||StringUtils.isAnyBlank(po.getId(),po.getTaskKey(),po.getProcInstId())){
+                throw new RuntimeException("必选栏位不能为空");
+            }
+            if(t == null) {
+                t = po.getCompleteTime();
+            }else if(t.after(po.getCompleteTime())){
+                throw new RuntimeException("完成时间不匹配,请重新检查");
+            }else{
+                t = po.getCompleteTime();
+            }
+        }
+        for (BpmApprovePo po :approvals) {
+            commonDao.execute("update ibps_bpm_approval_his set COMPLETE_TIME_=#{p0},CREATE_TIME_=#{p1} where id_=#{p2}",
+                    new Object[]{po.getCompleteTime(),po.getCompleteTime(),po.getId()});
+            if(StringUtils.isNotEmpty(po.getTaskKey())) {
+                commonDao.execute("update ibps_bpm_oper_log set CREATE_TIME_=#{p0} where proc_inst_id_=#{p1} and node_id_=#{p2}",
+                        new Object[]{po.getCompleteTime(), po.getProcInstId(), po.getTaskKey()});
+            }
+        }
+        commonDao.execute("update ibps_bpm_inst_his set end_TIME_=#{p0} where id_=#{p1} ", new Object[]{t, id});
 
     }
+
+
+
+
     @Async(value = "addAllApiExecutor")
     public Future<Void> replenishSnapshotAsync() throws Exception {
         replenishSnapshot();