Bläddra i källkod

动物样本送检执行后钉钉通知

陈长荣 2 månader sedan
förälder
incheckning
0df7c93f61

+ 7 - 0
jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/sample/service/SampleEditService.java

@@ -24,6 +24,13 @@ public interface SampleEditService {
      * @param sampleId
      */
     void generate(Long sampleId);
+
+    /**
+     * 执行后置操作
+     *
+     * @param sampleId
+     */
+    void afterExecute(Long sampleId);
 }
 
 

+ 5 - 0
jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/sample/service/biz/SampleAnimalImagingServiceImpl.java

@@ -209,6 +209,11 @@ public class SampleAnimalImagingServiceImpl extends ServiceImpl<SampleAnimalImag
         fileInfoService.uploadFileWithFileName(modelName, fileName, sampleInfo.getId(), sampleInfo.getStatus(), dataMap);
     }
 
+    @Override
+    public void afterExecute(Long sampleId) {
+
+    }
+
     @Override
     public SampleAnimalImagingVo getDetail(Long sampleId) {
         SampleAnimalImaging animalImaging = getOne(new LambdaQueryWrapper<>(SampleAnimalImaging.class)

+ 73 - 0
jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/sample/service/biz/SampleAnimalServiceImpl.java

@@ -1,6 +1,7 @@
 package com.github.jfcloud.gene.sample.service.biz;
 
 import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.date.DatePattern;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.lang.Assert;
@@ -13,15 +14,19 @@ import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.serializer.SerializerFeature;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.github.jfcloud.admin.api.sys.dto.message.MessageUserDTO;
 import com.github.jfcloud.gene.cache.UserIdNameCache;
 import com.github.jfcloud.gene.common.constant.StrConstant;
 import com.github.jfcloud.gene.common.constant.WhetherEnum;
 import com.github.jfcloud.gene.common.util.CustomIdGenerator;
+import com.github.jfcloud.gene.common.util.UserUtil;
 import com.github.jfcloud.gene.constants.GeneStatusEnum;
 import com.github.jfcloud.gene.file.service.FileInfoService;
 import com.github.jfcloud.gene.flow.entity.FlowAudit;
 import com.github.jfcloud.gene.flow.service.FlowAuditService;
+import com.github.jfcloud.gene.flow.service.NotifyService;
 import com.github.jfcloud.gene.sample.entity.*;
+import com.github.jfcloud.gene.sample.enums.SampleTypeEnum;
 import com.github.jfcloud.gene.sample.mapper.InspectionCommissionMapper;
 import com.github.jfcloud.gene.sample.mapper.SampleAnimalMapper;
 import com.github.jfcloud.gene.sample.mapper.SampleCheckOrderMapper;
@@ -31,6 +36,7 @@ import com.github.jfcloud.gene.sample.service.SampleAnimalService;
 import com.github.jfcloud.gene.sample.service.SampleCheckItemService;
 import com.github.jfcloud.gene.sample.service.SampleEditService;
 import com.github.jfcloud.gene.sample.vo.*;
+import com.github.jfcloud.gene.sys.service.DBSystemPropertiesService;
 import com.github.jfcloud.gene.util.WordDataService;
 import com.github.jfcloud.gene.util.WordUtil;
 import com.github.jfcloud.rich.vo.HtmlParseVo;
@@ -42,7 +48,9 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.lang.reflect.Field;
+import java.util.HashSet;
 import java.util.List;
+import java.util.Objects;
 import java.util.Set;
 import java.util.stream.Collectors;
 
@@ -60,6 +68,8 @@ public class SampleAnimalServiceImpl extends ServiceImpl<SampleAnimalMapper, Sam
     private final FileInfoService fileInfoService;
     private final UserIdNameCache userIdNameCache;
     private final FlowAuditService flowAuditService;
+    private final DBSystemPropertiesService systemPropertiesService;
+    private final NotifyService notifyService;
 
     @Override
     public void removeBySampleId(Long sampleId) {
@@ -257,6 +267,69 @@ public class SampleAnimalServiceImpl extends ServiceImpl<SampleAnimalMapper, Sam
         fileInfoService.uploadFileWithFileName(modelName, fileName, sampleInfo.getId(), sampleInfo.getStatus(), dataMap);
     }
 
+    @Override
+    public void afterExecute(Long sampleId) {
+        //钉钉消息通知申请人、送检人、样本接收人、检测人员
+        if (!systemPropertiesService.getBooleanValue("sample.afterExecute.dingding.enable")) {
+            return;
+        }
+
+        SampleInfo sampleInfo = sampleInfoMapper.selectById(sampleId);
+
+        String projectType = "样本送检/" + Objects.requireNonNull(SampleTypeEnum.resolve(sampleInfo.getType())).getLabel();
+        if (StrUtil.isNotBlank(sampleInfo.getProjectNo())) {
+            projectType += "/" + sampleInfo.getProjectNo();
+        }
+        if (StrUtil.isNotBlank(sampleInfo.getProjectName())) {
+            projectType += "/" + sampleInfo.getProjectName();
+        }
+        String dingMsg = String.format("【%s】【%s】已执行项目", projectType, UserUtil.getNickName());
+
+        Set<Long> userIds = new HashSet<>();
+
+        //申请人
+        userIds.add(sampleInfo.getApplicantId());
+        //检测人员
+        if (StrUtil.isNotBlank(sampleInfo.getInspector())) {
+            JSON.parseArray(sampleInfo.getInspector()).forEach(item -> {
+                JSONObject obj = (JSONObject) item;
+                if (obj.containsKey("id")) {
+                    userIds.add(obj.getLong("id"));
+                }
+            });
+        }
+        //委托单接收人
+        List<CommissionVo> commissionList = inspectionCommissionMapper.getCommissionList(sampleId);
+        if (CollUtil.isNotEmpty(commissionList)) {
+            commissionList.forEach(commission -> {
+                if (commission.getSubmitUserId() != null) {
+                    userIds.add(commission.getSubmitUserId());
+                }
+            });
+        }
+        //送检单接收人、送检人
+        List<SampleCheckOrderVo> orderList = checkOrderMapper.getOrderList(sampleId);
+        if (CollUtil.isNotEmpty(orderList)) {
+            orderList.forEach(order -> {
+                if (order.getReceiveUserId() != null) {
+                    userIds.add(order.getReceiveUserId());
+                }
+                if (order.getSendUserId() != null) {
+                    userIds.add(order.getSendUserId());
+                }
+            });
+        }
+
+        List<MessageUserDTO> users = userIds.stream()
+                .map(x -> {
+                    MessageUserDTO messageUserDTO = new MessageUserDTO();
+                    messageUserDTO.setUserId(x);
+                    return messageUserDTO;
+                })
+                .collect(Collectors.toList());
+        notifyService.sendDingding("样本送检", dingMsg, users);
+    }
+
     @Override
     public SampleAnimalVo getDetail(Long sampleId) {
         SampleAnimal sampleAnimal = getOne(new LambdaQueryWrapper<>(SampleAnimal.class)

+ 5 - 0
jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/sample/service/biz/SamplePathologicalServiceImpl.java

@@ -266,6 +266,11 @@ public class SamplePathologicalServiceImpl extends ServiceImpl<SamplePathologica
         fileInfoService.uploadFileWithFileName(modelName, fileName, sampleInfo.getId(), sampleInfo.getStatus(), dataMap);
     }
 
+    @Override
+    public void afterExecute(Long sampleId) {
+
+    }
+
     @Override
     public SamplePathologicalVo getDetail(Long sampleId) {
         SamplePathological samplePathological = getOne(new LambdaQueryWrapper<>(SamplePathological.class)

+ 4 - 2
jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/sample/service/impl/SampleInfoServiceImpl.java

@@ -21,7 +21,6 @@ import com.github.jfcloud.gene.common.util.UserUtil;
 import com.github.jfcloud.gene.constants.GeneStatusEnum;
 import com.github.jfcloud.gene.file.vo.FileVo;
 import com.github.jfcloud.gene.flow.entity.FlowAudit;
-import com.github.jfcloud.gene.flow.entity.FlowInfo;
 import com.github.jfcloud.gene.flow.service.FlowAuditService;
 import com.github.jfcloud.gene.flow.service.FlowFileVersionService;
 import com.github.jfcloud.gene.flow.service.NotifyService;
@@ -366,7 +365,7 @@ public class SampleInfoServiceImpl extends ServiceImpl<SampleInfoMapper, SampleI
             }
             Assert.isTrue(longR.isOk(), "操作失败,科研" + longR);
             kyId = longR.getData();
-            new FlowInfo().setId(id).setKyId(kyId).updateById();
+            new SampleInfo().setId(id).setKyId(kyId).updateById();
         } else {
             log.warn("样本送检-科研同步配置未开启,不进行同步");
             return;
@@ -387,6 +386,9 @@ public class SampleInfoServiceImpl extends ServiceImpl<SampleInfoMapper, SampleI
         } else {
             log.warn("样本送检-动物中心同步配置未开启,不进行同步");
         }
+
+        log.info("样本送检项目 ({}) 同步成功", sampleInfo.getProjectName());
+        getServiceByType(sampleInfo.getType()).afterExecute(id);
     }
 
     private void notify(Long sampleId) {

+ 2 - 0
jfcloud-gene-biz/src/main/resources/sql/ddl-20250321.sql

@@ -6,6 +6,8 @@ INSERT INTO jfcloud_gene.system_properties (prop_key,prop_value,remark) VALUES
     ('sample.60.dingding.enable','true','样本送检项目管理部审核钉钉通知');
 INSERT INTO jfcloud_gene.system_properties (prop_key,prop_value,remark) VALUES
     ('sample.100.dingding.enable','true','样本送检完成钉钉通知');
+INSERT INTO jfcloud_gene.system_properties (prop_key,prop_value,remark) VALUES
+    ('sample.afterExecute.dingding.enable','true','样本送检执行后钉钉通知');
 
 INSERT INTO jfcloud_gene.system_properties (prop_key,prop_value,remark) VALUES
     ('gene.sync.ky','true','基因定制科研同步');