Browse Source

dedup sup advice with sup_id, sup_res, remarks, createby

dengjia 2 months ago
parent
commit
61bee92e05

+ 3 - 0
hnqz-upms/hnqz-upms-api/src/main/java/com/qunzhixinxi/hnqz/admin/api/entity/WmTaskSupervisionAdvice.java

@@ -38,4 +38,7 @@ public class WmTaskSupervisionAdvice {
 
     private LocalDateTime createTime;
 
+    // unique index: taskSupervisionId + digest
+    private String digest; // supervisionResult  + md5sum(remarks)
+
 }

+ 1 - 1
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/supervision/WmSupervisionController.java

@@ -81,7 +81,7 @@ public class WmSupervisionController {
     try {
         return R.ok(supervisionManager.doTaskSupervision(resource, SecurityUtils.getUser()));
     }catch(BizException e) {
-        if (e.getMessage().startsWith("任务已被监督:")) {
+        if (e.getMessage().startsWith("当前任务已存在监督记录,请刷新页面:")) {
             return R.failed(e.getMessage());
         }
         throw e;

+ 20 - 5
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/manager/WmSupervisionManager.java

@@ -1941,8 +1941,13 @@ private Page<WmTask> getReviewTaskPage(WmSupervisionDto.OnTaskSupervisionPage qu
 }
 
   // 执行任务监察
+  @Transactional(rollbackFor = Exception.class)
   public Boolean doTaskSupervision(WmSupervisionDto.OnTaskSupervision resource, HnqzUser operator) {
 
+    if (!resource.getSupervision() && StrUtil.isBlankOrUndefined(resource.getRemarks())) {
+        throw new BizException("监督意见不能为空");
+    }
+
     // 监察任务是否有监察记录
     WmTaskSupervision supervision =
         taskSupervisionService.getSupervisionByTaskId(resource.getTaskId());
@@ -1962,8 +1967,13 @@ private Page<WmTask> getReviewTaskPage(WmSupervisionDto.OnTaskSupervisionPage qu
 
         resource.setRemarks(remarks);
         
-        taskSupervisionAdviceService.createAdvice(
-            supervision.getSupervisionId(), resource, supervision.getRemarks(), operator);
+        try {
+            taskSupervisionAdviceService.createAdvice(
+                supervision.getSupervisionId(), resource, supervision.getRemarks(), operator);
+        } catch (DataIntegrityViolationException e) {
+            log.warn("创建监督意见冲突: " + supervision.getSupervisionId().toString());
+            throw new BizException("创建监督意见冲突", e);
+        }
         
         taskSupervisionService.updateSupervision(
             supervision.getSupervisionId(), supervision.getRemarks(), modifiable, supervision.getSupervisionResult(), operator);
@@ -1978,8 +1988,13 @@ private Page<WmTask> getReviewTaskPage(WmSupervisionDto.OnTaskSupervisionPage qu
         taskSupervisionService.updateSupervision(
             supervision.getSupervisionId(), remarks, modifiable, resource.getSupervision(), operator);
         // 监督员advice作为历史保留
-        taskSupervisionAdviceService.createAdvice(
-            supervision.getSupervisionId(), resource, null, operator);
+        try {
+            taskSupervisionAdviceService.createAdvice(
+                supervision.getSupervisionId(), resource, null, operator);
+        } catch (DataIntegrityViolationException e) {
+            log.warn("创建监督意见冲突: " + supervision.getSupervisionId().toString());
+            throw new BizException("创建监督意见冲突", e);
+        }
       }
      
     }
@@ -1995,7 +2010,7 @@ private Page<WmTask> getReviewTaskPage(WmSupervisionDto.OnTaskSupervisionPage qu
         taskSupervisionAdviceService.createAdvice(
             sup.getSupervisionId(), resource, null, operator);
       } catch(DataIntegrityViolationException e) {
-        throw new BizException("任务已被监督:" + resource.getTaskId().toString());
+        throw new BizException("当前任务已存在监督记录,请刷新页面:" + resource.getTaskId().toString());
       }
       // 更新监督结果
       packageStatusService.updateSupervisionFlag(resource.getPkgId());

+ 12 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/WmTaskSupervisionAdviceServiceImpl.java

@@ -11,8 +11,12 @@ import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
 import java.time.LocalDateTime;
 
+import javax.xml.bind.DatatypeConverter;
+
 /**
  * 任务监察建议服务实现
  *
@@ -46,6 +50,14 @@ public class WmTaskSupervisionAdviceServiceImpl extends ServiceImpl<WmTaskSuperv
         advice.setUpdateBy(operator.getUsername());
         advice.setUpdateTime(LocalDateTime.now());
         advice.setDelFlag(false);
+        try {
+            MessageDigest md = MessageDigest.getInstance("MD5");
+            md.update(resource.getRemarks().getBytes());
+            byte[] digest = md.digest();
+            advice.setDigest(String.format("%s%s", resource.getSupervision() ? "1" : "0", DatatypeConverter.printHexBinary(digest).toLowerCase()));
+        } catch (NoSuchAlgorithmException e) {
+            e.printStackTrace();
+        }
 
         this.save(advice);