Răsfoiți Sursa

审核完成自动同步科研和LIS系统,并增加错误日志

陈长荣 1 lună în urmă
părinte
comite
14d4b4c7aa

+ 8 - 0
jfcloud-gene-biz/pom.xml

@@ -15,6 +15,7 @@
     <maven.compiler.source>8</maven.compiler.source>
     <maven.compiler.target>8</maven.compiler.target>
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    <aew.version>K7.5.2</aew.version>
   </properties>
 
   <dependencies>
@@ -60,6 +61,13 @@
     <dependency>
       <groupId>com.github.jfcloud</groupId>
       <artifactId>jfcloud-aew-rich-text</artifactId>
+      <version>${aew.version}</version>
+    </dependency>
+
+    <dependency>
+      <groupId>com.github.jfcloud</groupId>
+      <artifactId>jfcloud-aew-error-log</artifactId>
+      <version>${aew.version}</version>
     </dependency>
 
     <dependency>

+ 18 - 0
jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/event/SyncKyEvent.java

@@ -0,0 +1,18 @@
+package com.github.jfcloud.gene.event;
+
+import lombok.Getter;
+import org.springframework.context.ApplicationEvent;
+
+/**
+ * 同步科研事件
+ */
+public class SyncKyEvent extends ApplicationEvent {
+
+    @Getter
+    private Long sampleId;
+
+    public SyncKyEvent(Long sampleId) {
+        super(sampleId);
+        this.sampleId = sampleId;
+    }
+}

+ 18 - 0
jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/event/SyncLisEvent.java

@@ -0,0 +1,18 @@
+package com.github.jfcloud.gene.event;
+
+import lombok.Getter;
+import org.springframework.context.ApplicationEvent;
+
+/**
+ * 同步LIS事件
+ */
+public class SyncLisEvent extends ApplicationEvent {
+
+    @Getter
+    private Long sampleId;
+
+    public SyncLisEvent(Long sampleId) {
+        super(sampleId);
+        this.sampleId = sampleId;
+    }
+}

+ 21 - 0
jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/lis/service/LisSyncService.java

@@ -10,6 +10,9 @@ import cn.hutool.db.Entity;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
+import com.github.jfcloud.error.annotation.ErrorLog;
+import com.github.jfcloud.error.util.ErrorLogTool;
+import com.github.jfcloud.gene.event.SyncLisEvent;
 import com.github.jfcloud.gene.lis.config.LisDb;
 import com.github.jfcloud.gene.lis.entity.HtScienceApply;
 import com.github.jfcloud.gene.lis.entity.HtScienceApplyItem;
@@ -22,9 +25,11 @@ import com.github.jfcloud.gene.sample.service.SampleInfoService;
 import com.github.jfcloud.gene.sample.vo.CheckItemSerumVo;
 import com.github.jfcloud.gene.sample.vo.SampleAnimalVo;
 import com.github.jfcloud.gene.sample.vo.SampleCheckSerumVo;
+import com.github.jfcloud.gene.sys.service.DBSystemPropertiesService;
 import lombok.RequiredArgsConstructor;
 import lombok.SneakyThrows;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.context.event.EventListener;
 import org.springframework.stereotype.Service;
 
 import java.lang.reflect.Field;
@@ -44,11 +49,17 @@ public class LisSyncService {
     private final SampleCheckOrderMapper checkOrderMapper;
     private final SampleAnimalService sampleAnimalService;
     private final SampleInfoService sampleInfoService;
+    private final DBSystemPropertiesService systemPropertiesService;
 
     /**
      * 同步LIS
      */
+    @ErrorLog("同步LIS")
     public void sync(Long sampleId) {
+        if (!systemPropertiesService.getBooleanValue("sample.sync.lis")) {
+            return;
+        }
+
         SampleInfo sampleInfo = sampleInfoService.getById(sampleId);
         SampleAnimalVo animalDetail = sampleAnimalService.getDetail(sampleId);
         Assert.notNull(animalDetail, "同步LIS失败,动物样本检测不存在");
@@ -285,4 +296,14 @@ public class LisSyncService {
             co.updateById();
         });
     }
+
+
+    @EventListener(SyncLisEvent.class)
+    public void listenLis(SyncLisEvent event) {
+        try {
+            sync(event.getSampleId());
+        } catch (Exception e) {
+            ErrorLogTool.logError(e, "同步LIS");
+        }
+    }
 }

+ 3 - 0
jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/sample/dto/SamplePageDto.java

@@ -15,6 +15,9 @@ public class SamplePageDto {
     @Schema(description = "科研id")
     private Long kyId;
 
+    @Schema(description = "LIS id")
+    private Long lisId;
+
     /**
      * 项目名称
      */

+ 9 - 1
jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/sample/mapper/SampleCheckOrderMapper.java

@@ -12,4 +12,12 @@ import java.util.List;
 public interface SampleCheckOrderMapper extends JfcloudBaseMapper<SampleCheckOrder> {
 
     List<SampleCheckOrderVo> getOrderList(@Param("sampleAnimalId") Long sampleAnimalId);
-}
+
+    /**
+     * 获取附加数据
+     *
+     * @param sampleId 样本id
+     * @return
+     */
+    String getExtData(@Param("sampleId") Long sampleId);
+}

+ 15 - 0
jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/sample/service/SampleCheckOrderService.java

@@ -0,0 +1,15 @@
+package com.github.jfcloud.gene.sample.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.github.jfcloud.gene.sample.entity.SampleCheckOrder;
+
+public interface SampleCheckOrderService extends IService<SampleCheckOrder> {
+
+    /**
+     * 获取LIS同步的ID
+     *
+     * @param sampleId 样本id
+     * @return
+     */
+    Long getLisId(Long sampleId);
+}

+ 12 - 5
jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/sample/service/biz/CommonSampleEditServiceImpl.java

@@ -10,16 +10,20 @@ import com.github.jfcloud.admin.api.sys.dto.message.MessageUserDTO;
 import com.github.jfcloud.gene.cache.UserIdNameCache;
 import com.github.jfcloud.gene.common.util.UserUtil;
 import com.github.jfcloud.gene.constants.GeneStatusEnum;
+import com.github.jfcloud.gene.event.SyncKyEvent;
+import com.github.jfcloud.gene.event.SyncLisEvent;
 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.SampleInfo;
+import com.github.jfcloud.gene.sample.enums.SampleTypeEnum;
 import com.github.jfcloud.gene.sample.mapper.SampleInfoMapper;
 import com.github.jfcloud.gene.sample.service.SampleEditService;
 import com.github.jfcloud.gene.sample.vo.SampleSubmitVo;
 import com.github.jfcloud.gene.sys.service.DBSystemPropertiesService;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.context.ApplicationContext;
 import org.springframework.stereotype.Service;
 
 import java.util.*;
@@ -35,6 +39,7 @@ public class CommonSampleEditServiceImpl implements SampleEditService {
     private final DBSystemPropertiesService systemPropertiesService;
     private final NotifyService notifyService;
     private final UserIdNameCache userIdNameCache;
+    private final ApplicationContext applicationContext;
 
     @Override
     public void removeBySampleId(Long sampleId) {
@@ -91,10 +96,12 @@ public class CommonSampleEditServiceImpl implements SampleEditService {
                 dingMsg = String.format("【%s】【%s/%s】%s同意,请进行审查", projectType, previousStatus, previousUser, now);
                 break;
             case COMPLETED:
-                //执行
-                userId = userIdNameCache.getUserIdByUsername(sampleInfo.getCreateBy());
-                dingMsg = String.format("【%s】【%s/%s】%s同意,请执行项目", projectType, previousStatus, previousUser, now);
-                break;
+                //自动【执行】到科研管理系统,并【同步】到lis系统;为了不出现循环依赖,使用事件;目前只有<动物样本检测>、<宠物食品检测>
+                if (SampleTypeEnum.ANIMAL.getType().equals(sampleInfo.getType()) || SampleTypeEnum.ANIMAL_FOOD.getType().equals(sampleInfo.getType())) {
+                    applicationContext.publishEvent(new SyncKyEvent(sampleId));
+                    applicationContext.publishEvent(new SyncLisEvent(sampleId));
+                }
+                return;
             default:
                 log.error("流程项目 ({}) 状态异常 {}", sampleInfo.getProjectName(), statusEnum.getDescription());
                 return;
@@ -126,7 +133,7 @@ public class CommonSampleEditServiceImpl implements SampleEditService {
         }
 
         SampleInfo sampleInfo = sampleInfoMapper.selectById(sampleId);
-        String now = DateUtil.format(new Date(), DatePattern.CHINESE_DATE_TIME_PATTERN);
+        String now = DateUtil.format(new Date(), DatePattern.NORM_DATETIME_PATTERN);
         String dingMsg = String.format("【%s】【%s】%s执行项目", sampleInfo.projectType(), UserUtil.getNickName(), now);
 
         //申请人

+ 32 - 0
jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/sample/service/impl/SampleCheckOrderServiceImpl.java

@@ -0,0 +1,32 @@
+package com.github.jfcloud.gene.sample.service.impl;
+
+import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.github.jfcloud.gene.sample.entity.SampleCheckOrder;
+import com.github.jfcloud.gene.sample.mapper.SampleCheckOrderMapper;
+import com.github.jfcloud.gene.sample.service.SampleCheckOrderService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+@Slf4j
+@Service
+public class SampleCheckOrderServiceImpl extends ServiceImpl<SampleCheckOrderMapper, SampleCheckOrder> implements SampleCheckOrderService {
+
+    @Override
+    public Long getLisId(Long sampleId) {
+        String extData = baseMapper.getExtData(sampleId);
+        if (StrUtil.isBlank(extData)) {
+            return null;
+        }
+
+        JSONObject extJson = JSONObject.parseObject(extData);
+        if (!extJson.containsKey("lisIds")) {
+            return null;
+        }
+
+        JSONArray array = extJson.getJSONArray("lisIds");
+        return array.getLong(0);
+    }
+}

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

@@ -13,11 +13,14 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.github.jfcloud.common.core.constant.enums.YesNoEnum;
 import com.github.jfcloud.common.core.util.R;
 import com.github.jfcloud.common.data.datascope.DataScope;
+import com.github.jfcloud.error.annotation.ErrorLog;
+import com.github.jfcloud.error.util.ErrorLogTool;
 import com.github.jfcloud.gene.cache.UserIdNameCache;
 import com.github.jfcloud.gene.common.constant.StrConstant;
 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.event.SyncKyEvent;
 import com.github.jfcloud.gene.file.vo.FileVo;
 import com.github.jfcloud.gene.flow.entity.FlowAudit;
 import com.github.jfcloud.gene.flow.service.FlowAuditService;
@@ -29,6 +32,7 @@ import com.github.jfcloud.gene.sample.dto.SamplePageDto;
 import com.github.jfcloud.gene.sample.entity.SampleInfo;
 import com.github.jfcloud.gene.sample.enums.SampleTypeEnum;
 import com.github.jfcloud.gene.sample.mapper.SampleInfoMapper;
+import com.github.jfcloud.gene.sample.service.SampleCheckOrderService;
 import com.github.jfcloud.gene.sample.service.SampleEditService;
 import com.github.jfcloud.gene.sample.service.SampleInfoService;
 import com.github.jfcloud.gene.sample.service.biz.SampleAnimalImagingServiceImpl;
@@ -45,6 +49,7 @@ import com.github.jfcloud.project.api.feign.RemoteProjectService;
 import com.github.jfcloud.project.api.feign.SubProjectFeign;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.context.event.EventListener;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -66,6 +71,7 @@ public class SampleInfoServiceImpl extends ServiceImpl<SampleInfoMapper, SampleI
     private final DBSystemPropertiesService systemPropertiesService;
     private final RemoteProjectService remoteProjectService;
     private final SubProjectFeign subProjectFeign;
+    private final SampleCheckOrderService checkOrderService;
 
     /**
      * 根据样本检测类型获取对应的Service
@@ -219,6 +225,10 @@ public class SampleInfoServiceImpl extends ServiceImpl<SampleInfoMapper, SampleI
             item.setFileUrl(latestFile.getUrl());
             item.setFilename(latestFile.getName());
             item.setStatusLabel(Objects.requireNonNull(GeneStatusEnum.getByStatus(item.getStatus())).getDescription());
+            //查询lis id
+            if (SampleTypeEnum.ANIMAL.getType().equals(item.getType())) {
+                item.setLisId(checkOrderService.getLisId(item.getId()));
+            }
         });
         pageResult.setRecords(records);
         return pageResult;
@@ -350,6 +360,7 @@ public class SampleInfoServiceImpl extends ServiceImpl<SampleInfoMapper, SampleI
         return auditDtos;
     }
 
+    @ErrorLog("同步科研")
     @Transactional(rollbackFor = Exception.class)
     @Override
     public void execute(Long id, SynProjectVo vo) {
@@ -385,6 +396,10 @@ public class SampleInfoServiceImpl extends ServiceImpl<SampleInfoMapper, SampleI
         ProjectFeignDTO projectFeignDTO = new ProjectFeignDTO();
         projectFeignDTO.setName(projectName);
         projectFeignDTO.setLeader(vo.getProjectLeader());
+        if (projectFeignDTO.getLeader() == null) {
+            //默认部门负责人
+            projectFeignDTO.setLeader(sampleInfo.getDepartLeaderId());
+        }
         projectFeignDTO.setProjectType(vo.getApprovalType());
         projectFeignDTO.setProjectCode(projectNo);
         projectFeignDTO.setApplicantUserId(userIdNameCache.getUserIdByUsername(sampleInfo.getCreateBy()));
@@ -424,6 +439,14 @@ public class SampleInfoServiceImpl extends ServiceImpl<SampleInfoMapper, SampleI
         getServiceByType(sampleInfo.getType()).afterExecute(id);
     }
 
+    @EventListener(SyncKyEvent.class)
+    public void listenKy(SyncKyEvent event) {
+        try {
+            execute(event.getSampleId(), new SynProjectVo());
+        } catch (Exception e) {
+            ErrorLogTool.logError(e, "同步科研");
+        }
+    }
 }
 
 

+ 9 - 0
jfcloud-gene-biz/src/main/resources/mapper/SampleCheckOrderMapper.xml

@@ -13,4 +13,13 @@
     order by id asc
   </select>
 
+  <select id="getExtData" resultType="java.lang.String">
+    select sco.ext_data
+    from sample_check_order sco
+    left join sample_animal sa on sco.sample_animal_id = sa.id
+    left join sample_info si on sa.sample_id = si.id
+    where sco.deleted = '0' and sa.deleted = '0' and si.deleted = '0'
+    and si.id = #{sampleId}
+  </select>
+
 </mapper>

+ 1 - 6
pom.xml

@@ -25,7 +25,7 @@
     <mapstruct.version>1.4.2.Final</mapstruct.version>
     <jfcloud-bom.version>K7.5.1</jfcloud-bom.version>
     <jfcloud-dependencies.version>K7.5.0</jfcloud-dependencies.version>
-    <rich-text.version>K7.5.2</rich-text.version>
+
   </properties>
 
   <dependencies>
@@ -46,11 +46,6 @@
         <type>pom</type>
         <scope>import</scope>
       </dependency>
-      <dependency>
-        <groupId>com.github.jfcloud</groupId>
-        <artifactId>jfcloud-aew-rich-text</artifactId>
-        <version>${rich-text.version}</version>
-      </dependency>
     </dependencies>
   </dependencyManagement>