ソースを参照

新增保存流程数据

wangliang 3 年 前
コミット
973cb3bfb7

+ 17 - 3
distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/TFCustomFlow.java

@@ -50,7 +50,7 @@ public class TFCustomFlow extends BaseEntity implements Serializable {
 
     @ApiModelProperty(value = "版本号")
     @JsonSerialize(using = ToStringSerializer.class)
-    private Long version;
+    private Integer version;
 
     @ApiModelProperty(value = "流程key")
     private String flowKey;
@@ -62,6 +62,20 @@ public class TFCustomFlow extends BaseEntity implements Serializable {
         return schoolId;
     }
 
+    public TFCustomFlow() {
+
+    }
+
+    public TFCustomFlow(Long schoolId, Long orgId, String name, TFCustomTypeEnum type, Boolean publish, String objectData, Long userId) {
+        this.schoolId = schoolId;
+        this.orgId = orgId;
+        this.name = name;
+        this.type = type;
+        this.publish = publish;
+        this.objectData = objectData;
+        insertInfo(userId);
+    }
+
     public void setSchoolId(Long schoolId) {
         this.schoolId = schoolId;
     }
@@ -114,11 +128,11 @@ public class TFCustomFlow extends BaseEntity implements Serializable {
         this.objectData = objectData;
     }
 
-    public Long getVersion() {
+    public Integer getVersion() {
         return version;
     }
 
-    public void setVersion(Long version) {
+    public void setVersion(Integer version) {
         this.version = version;
     }
 

+ 10 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/TFCustomFlowMapper.java

@@ -2,6 +2,7 @@ package com.qmth.distributed.print.business.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.qmth.distributed.print.business.entity.TFCustomFlow;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * <p>
@@ -13,4 +14,13 @@ import com.qmth.distributed.print.business.entity.TFCustomFlow;
  */
 public interface TFCustomFlowMapper extends BaseMapper<TFCustomFlow> {
 
+    /**
+     * 查询版本号
+     *
+     * @param schoolId
+     * @param orgId
+     * @param type
+     * @return
+     */
+    Integer findMaxVersion(@Param("schoolId") Long schoolId, @Param("orgId") Long orgId, @Param("type") String type);
 }

+ 10 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/TFCustomFlowService.java

@@ -2,6 +2,7 @@ package com.qmth.distributed.print.business.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.qmth.distributed.print.business.entity.TFCustomFlow;
+import com.qmth.distributed.print.business.enums.TFCustomTypeEnum;
 
 /**
  * <p>
@@ -13,4 +14,13 @@ import com.qmth.distributed.print.business.entity.TFCustomFlow;
  */
 public interface TFCustomFlowService extends IService<TFCustomFlow> {
 
+    /**
+     * 查询版本号
+     *
+     * @param schoolId
+     * @param orgId
+     * @param type
+     * @return
+     */
+    Integer findMaxVersion(Long schoolId, Long orgId, TFCustomTypeEnum type);
 }

+ 19 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/TFCustomFlowServiceImpl.java

@@ -2,10 +2,14 @@ package com.qmth.distributed.print.business.service.impl;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.qmth.distributed.print.business.entity.TFCustomFlow;
+import com.qmth.distributed.print.business.enums.TFCustomTypeEnum;
 import com.qmth.distributed.print.business.mapper.TFCustomFlowMapper;
 import com.qmth.distributed.print.business.service.TFCustomFlowService;
 import org.springframework.stereotype.Service;
 
+import javax.annotation.Resource;
+import java.util.Objects;
+
 /**
  * <p>
  * 自定义流程表 服务实现类
@@ -17,4 +21,19 @@ import org.springframework.stereotype.Service;
 @Service
 public class TFCustomFlowServiceImpl extends ServiceImpl<TFCustomFlowMapper, TFCustomFlow> implements TFCustomFlowService {
 
+    @Resource
+    TFCustomFlowMapper tfCustomFlowMapper;
+
+    /**
+     * 查询版本号
+     *
+     * @param schoolId
+     * @param orgId
+     * @param type
+     * @return
+     */
+    @Override
+    public Integer findMaxVersion(Long schoolId, Long orgId, TFCustomTypeEnum type) {
+        return tfCustomFlowMapper.findMaxVersion(schoolId, orgId, Objects.nonNull(type) ? type.name() : null);
+    }
 }

+ 14 - 0
distributed-print-business/src/main/resources/mapper/TFCustomFlowMapper.xml

@@ -2,4 +2,18 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.qmth.distributed.print.business.mapper.TFCustomFlowMapper">
 
+    <select id="findMaxVersion" resultType="java.lang.Integer">
+        select max(t.version) from t_f_custom_flow t
+        <where>
+            <if test="schoolId != null and schoolId != ''">
+                and t.school_id = #{schoolId}
+            </if>
+            <if test="orgId != null and orgId != ''">
+                and t.org_id = #{orgId}
+            </if>
+            <if test="type != null and type != ''">
+                and t.type = #{type}
+            </if>
+        </where>
+    </select>
 </mapper>

+ 41 - 2
distributed-print/src/main/java/com/qmth/distributed/print/api/TFCustomFlowController.java

@@ -4,8 +4,13 @@ package com.qmth.distributed.print.api;
 import com.qmth.boot.api.annotation.Aac;
 import com.qmth.boot.api.annotation.BOOL;
 import com.qmth.boot.api.constant.ApiConstant;
+import com.qmth.boot.api.exception.ApiException;
 import com.qmth.distributed.print.business.bean.flow.CustomFlowSaveDto;
+import com.qmth.distributed.print.business.entity.TFCustomFlow;
+import com.qmth.distributed.print.business.service.TFCustomFlowService;
+import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.entity.SysUser;
+import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
 import com.qmth.teachcloud.common.util.*;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -20,8 +25,11 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.RestController;
 
+import javax.annotation.Resource;
 import javax.validation.Valid;
 import java.security.NoSuchAlgorithmException;
+import java.util.Objects;
+import java.util.concurrent.atomic.AtomicInteger;
 
 /**
  * <p>
@@ -39,6 +47,12 @@ import java.security.NoSuchAlgorithmException;
 public class TFCustomFlowController {
     private final static Logger log = LoggerFactory.getLogger(TFCustomFlowController.class);
 
+    @Resource
+    TFCustomFlowService tfCustomFlowService;
+
+    @Resource
+    RedisUtil redisUtil;
+
     @ApiOperation(value = "保存和发布流程")
     @ApiResponses({@ApiResponse(code = 200, message = "常规信息", response = ResultUtil.class)})
     @RequestMapping(value = "/save", method = RequestMethod.POST)
@@ -49,8 +63,33 @@ public class TFCustomFlowController {
         SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
         customFlowSaveDto.setSchoolAndOrgInfo(sysUser.getSchoolId(), sysUser.getOrgId());
         log.info("customFlowSaveDto:{}", JacksonUtil.parseJson(customFlowSaveDto));
-        log.info("customFlowSaveDto.toString:{}", customFlowSaveDto.toString());
-        log.info("md5加密后得到id:{}", MD5Util.encoder(customFlowSaveDto.toString()));
+        String flowBpmnId = MD5Util.encoder(customFlowSaveDto.toString());
+        boolean lock = redisUtil.lock(SystemConstant.REDIS_LOCK_CUSTOM_FLOW_PREFIX + flowBpmnId, SystemConstant.REDIS_LOCK_CUSTOM_FLOW_TIME_OUT);
+        if (!lock) {
+            throw ExceptionResultEnum.ERROR.exception("正在发布中,请稍候再试!");
+        }
+        try {
+            Integer dbVersion = tfCustomFlowService.findMaxVersion(customFlowSaveDto.getSchoolId(), customFlowSaveDto.getOrgId(), customFlowSaveDto.getType());
+            TFCustomFlow tfCustomFlow = new TFCustomFlow(customFlowSaveDto.getSchoolId(), customFlowSaveDto.getOrgId(), customFlowSaveDto.getName(), customFlowSaveDto.getType(), customFlowSaveDto.getPublish(), JacksonUtil.parseJson(customFlowSaveDto.getCustomFlowLists()), sysUser.getId());
+            AtomicInteger atomicInteger = null;
+            if (Objects.isNull(dbVersion)) {//新增
+                atomicInteger = new AtomicInteger(1);
+                tfCustomFlow.setVersion(atomicInteger.get());
+            } else {//版本号递增
+                atomicInteger = new AtomicInteger(dbVersion);
+                tfCustomFlow.setVersion(atomicInteger.incrementAndGet());
+            }
+            tfCustomFlowService.save(tfCustomFlow);
+        } catch (Exception e) {
+            log.error(SystemConstant.LOG_ERROR, e);
+            if (e instanceof ApiException) {
+                ResultUtil.error((ApiException) e, e.getMessage());
+            } else {
+                ResultUtil.error(e.getMessage());
+            }
+        } finally {
+            redisUtil.releaseLock(SystemConstant.REDIS_LOCK_CUSTOM_FLOW_PREFIX + flowBpmnId);
+        }
         return ResultUtil.ok(true);
     }
 }

+ 2 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/contant/SystemConstant.java

@@ -228,6 +228,8 @@ public class SystemConstant {
     public static final long REDIS_LOCK_EXAM_TASK_FLOW_TIME_OUT = 60L * 2;
     public static final String REDIS_LOCK_FLOW_PREFIX = "redis:lock:flow:";//流程锁
     public static final long REDIS_LOCK_FLOW_TIME_OUT = 60L * 2;
+    public static final String REDIS_LOCK_CUSTOM_FLOW_PREFIX = "redis:lock:custom:flow:";//自定义流程锁
+    public static final long REDIS_LOCK_CUSTOM_FLOW_TIME_OUT = 60L * 2;
 
     /**
      * 机器心跳