فهرست منبع

Merge remote-tracking branch 'origin/featCnbg-supervFilter-20250325' into cnbg-master

dengjia 2 ماه پیش
والد
کامیت
fcf5bb49d7

+ 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;

+ 28 - 7
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/manager/WmSupervisionManager.java

@@ -1947,8 +1947,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());
@@ -1968,8 +1973,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(), supervision.getSupervisionResult(), operator);
+        } catch (DataIntegrityViolationException e) {
+            log.warn("创建监督意见冲突: " + supervision.getSupervisionId().toString());
+            throw new BizException("创建监督意见冲突", e);
+        }
         
         taskSupervisionService.updateSupervision(
             supervision.getSupervisionId(), supervision.getRemarks(), modifiable, supervision.getSupervisionResult(), operator);
@@ -1977,15 +1987,26 @@ private Page<WmTask> getReviewTaskPage(WmSupervisionDto.OnTaskSupervisionPage qu
       } else { // 监督员
         if (!StrUtil.equals(operator.getUsername(), supervision.getCreateBy())) {
             // 独占
-            return false;
+            log.warn("该任务已存在其他账号监督记录,请刷新页面: " + supervision.getSupervisionId().toString());
+            throw new BizException("该任务已存在其他账号监督记录,请刷新页面");
+        }
+        if (!supervision.getModifiable()) {
+            // 只写一次
+            log.warn("此任务已被监督: " + supervision.getSupervisionId().toString());
+            throw new BizException("此任务已被监督");
         }
         // 监察员重新提交,删除历史的审核意见
         taskSupervisionAdviceService.delAdvice(supervision.getSupervisionId(), operator);
         taskSupervisionService.updateSupervision(
             supervision.getSupervisionId(), remarks, modifiable, resource.getSupervision(), operator);
         // 监督员advice作为历史保留
-        taskSupervisionAdviceService.createAdvice(
-            supervision.getSupervisionId(), resource, null, operator);
+        try {
+            taskSupervisionAdviceService.createAdvice(
+                supervision.getSupervisionId(), resource, null, resource.getSupervision(), operator);
+        } catch (DataIntegrityViolationException e) {
+            log.warn("创建监督意见冲突: " + supervision.getSupervisionId().toString());
+            throw new BizException("创建监督意见冲突", e);
+        }
       }
      
     }
@@ -1999,9 +2020,9 @@ private Page<WmTask> getReviewTaskPage(WmSupervisionDto.OnTaskSupervisionPage qu
         }
         // 监督员advice作为历史保留
         taskSupervisionAdviceService.createAdvice(
-            sup.getSupervisionId(), resource, null, operator);
+            sup.getSupervisionId(), resource, null, sup.getSupervisionResult(), operator);
       } catch(DataIntegrityViolationException e) {
-        throw new BizException("任务已被监督:" + resource.getTaskId().toString());
+        throw new BizException("当前任务已存在监督记录,请刷新页面:" + resource.getTaskId().toString());
       }
       // 更新监督结果
       packageStatusService.updateSupervisionFlag(resource.getPkgId());

+ 2 - 1
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/WmTaskSupervisionAdviceService.java

@@ -19,9 +19,10 @@ public interface WmTaskSupervisionAdviceService extends IService<WmTaskSupervisi
      * @param supervisionId      监察ID
      * @param supervisionContent 原始内容
      * @param resource           意见信息
+     * @param supResult 
      * @param operator           操作人
      */
-    void createAdvice(Long supervisionId, WmSupervisionDto.OnTaskSupervision resource, String supervisionContent, HnqzUser operator);
+    void createAdvice(Long supervisionId, WmSupervisionDto.OnTaskSupervision resource, String supervisionContent, Boolean supResult, HnqzUser operator);
 
     /**
      * 删除历史

+ 13 - 1
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;
+
 /**
  * 任务监察建议服务实现
  *
@@ -34,7 +38,7 @@ public class WmTaskSupervisionAdviceServiceImpl extends ServiceImpl<WmTaskSuperv
      */
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public void createAdvice(Long supervisionId, WmSupervisionDto.OnTaskSupervision resource, String supervisionContent, HnqzUser operator) {
+    public void createAdvice(Long supervisionId, WmSupervisionDto.OnTaskSupervision resource, String supervisionContent, Boolean supResult, HnqzUser operator) {
 
         WmTaskSupervisionAdvice advice = new WmTaskSupervisionAdvice();
         advice.setTaskSupervisionId(supervisionId);
@@ -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", supResult ? "1" : "0", DatatypeConverter.printHexBinary(digest).toLowerCase()));
+        } catch (NoSuchAlgorithmException e) {
+            e.printStackTrace();
+        }
 
         this.save(advice);