Просмотр исходного кода

样本送检-动物样本-血清送检,LIS同步调整,附件调整

陈长荣 1 месяц назад
Родитель
Сommit
b10f6ca1d0

+ 3 - 2
jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/handler/BaseEntityMetaObjectHandler.java

@@ -10,6 +10,7 @@ import org.slf4j.LoggerFactory;
 import org.springframework.util.ClassUtils;
 
 import java.nio.charset.Charset;
+import java.time.LocalDateTime;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.Map;
@@ -37,8 +38,8 @@ public class BaseEntityMetaObjectHandler implements MetaObjectHandler {
     public void insertFill(MetaObject metaObject) {
         log.debug("mybatis plus start insert fill ....");
         Map<String, Object> fieldsToFill = new HashMap<>();
-        fieldsToFill.put("createTime", new Date());
-        fieldsToFill.put("create_time", new Date());
+        fieldsToFill.put("createTime", LocalDateTime.now());
+        fieldsToFill.put("create_time", LocalDateTime.now());
         fieldsToFill.put("createBy", UserUtil.getUserName());
         fieldsToFill.put("delFlag", "0");
         fieldsToFill.put("deleted", "0");

+ 14 - 7
jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/lis/service/LisSyncService.java

@@ -1,6 +1,7 @@
 package com.github.jfcloud.gene.lis.service;
 
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.date.DatePattern;
 import cn.hutool.core.date.DateTime;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.lang.Assert;
@@ -20,8 +21,8 @@ import com.github.jfcloud.gene.sample.entity.SampleCheckOrder;
 import com.github.jfcloud.gene.sample.entity.SampleInfo;
 import com.github.jfcloud.gene.sample.enums.ScientificSampleTypeEnum;
 import com.github.jfcloud.gene.sample.mapper.SampleCheckOrderMapper;
-import com.github.jfcloud.gene.sample.service.SampleAnimalService;
 import com.github.jfcloud.gene.sample.service.SampleInfoService;
+import com.github.jfcloud.gene.sample.service.biz.SampleAnimalServiceImpl;
 import com.github.jfcloud.gene.sample.vo.CheckItemSerumVo;
 import com.github.jfcloud.gene.sample.vo.SampleAnimalVo;
 import com.github.jfcloud.gene.sample.vo.SampleCheckSerumVo;
@@ -46,7 +47,7 @@ public class LisSyncService {
 
     private final LisDb lisDb;
     private final SampleCheckOrderMapper checkOrderMapper;
-    private final SampleAnimalService sampleAnimalService;
+    private final SampleAnimalServiceImpl sampleAnimalService;
     private final SampleInfoService sampleInfoService;
     private final DBSystemPropertiesService systemPropertiesService;
     private final StringRedisTemplate redisTemplate;
@@ -85,6 +86,7 @@ public class LisSyncService {
         }
 
         //根据昵称查询用户id
+        Assert.notEmpty(sampleInfo.getApplicantName(), "同步LIS失败,申请人姓名为空", sampleInfo.getApplicantName());
         Entity applyUser = lisDb.queryOne("select top 1 user_id from dbo.HT_INFO_USER_EXTEND where name = N'" + sampleInfo.getApplicantName() + "' order by user_id desc");
         Assert.notNull(applyUser, "同步LIS失败,申请人姓名[{}]不存在LIS系统", sampleInfo.getApplicantName());
 
@@ -155,12 +157,10 @@ public class LisSyncService {
         scienceApply.setDeliverTime(new DateTime(item.getSendDate()));
         scienceApply.setSampleCount(Integer.parseInt(item.getNum()));
         Assert.isTrue(scienceApply.getSampleCount() > 0, "同步LIS失败,样本数量不能为0");
-        scienceApply.setBeginNo(String.format("%0" + scienceApply.getSampleCount().toString().length() + "d", 1));
 
         //HT_SCIENCE_APPLY主键非自增,为年份2位+月份2位+日期2位+483+7位序列号,为了避免冲突,这里使用480
         String idPrefix = DateUtil.format(scienceApply.getApplyTime(), "yyMMdd") + "480";
         long applyId = Long.parseLong(String.format("%s%07d", idPrefix, 1));
-        scienceApply.setId(applyId);
 
         //编号起始
         int beginNo = 1;
@@ -173,10 +173,12 @@ public class LisSyncService {
             String[] split = sampleNo.split("-");
             beginNo = Integer.parseInt(split[2]) + 1;
         }
+        scienceApply.setId(applyId);
 
         //编号结尾
         int endNo = beginNo + scienceApply.getSampleCount() - 1;
-        scienceApply.setSampleNo(String.format("HKYBKY%s-%d-%d", item.getApplyDate().replace("-", ""), beginNo, endNo));
+        scienceApply.setBeginNo(String.format("%0" + scienceApply.getSampleCount().toString().length() + "d", 1));
+        scienceApply.setSampleNo(String.format("HKYBKY%s-%d-%d", DateUtil.format(scienceApply.getApplyTime(), DatePattern.PURE_DATE_FORMAT), beginNo, endNo));
         fillNullWithDefault(scienceApply);
 
         //检测指标
@@ -206,12 +208,15 @@ public class LisSyncService {
 
         lisDb.execute(db -> {
             try {
-                db.insert(Entity.create("dbo.HT_SCIENCE_APPLY").parseBean(scienceApply, true, false));
+                Entity scienceApplyEntity = Entity.create("dbo.HT_SCIENCE_APPLY").parseBean(scienceApply, true, false);
+                scienceApplyEntity.set("SampleNo", scienceApply.getSampleNo());
+                scienceApplyEntity.remove("sample_no");
+                db.insert(scienceApplyEntity);
                 List<Entity> applyItemEntities = applyItemList.stream().map(x -> Entity.create("dbo.HT_SCIENCE_APPLY_ITEM").parseBean(x, true, false)).collect(Collectors.toList());
                 db.insert(applyItemEntities);
             } catch (Exception e) {
                 log.error("同步LIS失败", e);
-                throw new RuntimeException("同步LIS失败");
+                throw new RuntimeException("同步LIS失败" + e.getMessage());
             }
         });
 
@@ -224,6 +229,8 @@ public class LisSyncService {
 
         redisTemplate.opsForValue().set(LIS_PREFIX + DateUtil.today(), redisPrefix, 1, TimeUnit.DAYS);
         log.info("同步lis数据库完成 sampleId={} ", sampleId);
+        //更新编号规则到附件上
+        sampleAnimalService.generate(sampleId);
     }
 
     /**

+ 18 - 7
jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/sample/service/biz/SampleAnimalServiceImpl.java

@@ -18,15 +18,14 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.github.jfcloud.common.core.constant.enums.YesNoEnum;
 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.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.lis.config.LisDb;
+import com.github.jfcloud.gene.lis.entity.HtScienceApply;
 import com.github.jfcloud.gene.sample.entity.*;
-import com.github.jfcloud.gene.sample.enums.AgeUnitEnum;
 import com.github.jfcloud.gene.sample.enums.PathogenSampleTypeEnum;
 import com.github.jfcloud.gene.sample.enums.ScientificSampleTypeEnum;
 import com.github.jfcloud.gene.sample.mapper.InspectionCommissionMapper;
@@ -196,6 +195,10 @@ public class SampleAnimalServiceImpl extends ServiceImpl<SampleAnimalMapper, Sam
     public void generate(Long sampleId) {
         SampleInfo sampleInfo = sampleInfoMapper.selectById(sampleId);
         SampleAnimalVo sampleAnimal = getDetail(sampleId);
+        //样本编号
+        if (StrUtil.isNotBlank(sampleAnimal.getSampleNum())) {
+            sampleAnimal.setSampleNum(sampleAnimal.getSampleNum().replace(',', '、'));
+        }
 
         //血清样本送检
         if (StrUtil.isNotBlank(sampleAnimal.getScientificSampleType()) &&
@@ -203,11 +206,9 @@ public class SampleAnimalServiceImpl extends ServiceImpl<SampleAnimalMapper, Sam
             Map<Integer, Map<String, String>> lisDictItemMap = new HashMap<>();
 
             sampleAnimal.getOrder().getSerum().getItems().forEach(item -> {
-                //加急
-                item.setQuick(WhetherEnum.getLabel(item.getQuick()));
-                //年龄
-                if (StrUtil.isNotBlank(item.getAge()) && StrUtil.isNotBlank(item.getAgeUnit())) {
-                    item.setAge(item.getAge() + AgeUnitEnum.getLabel(item.getAgeUnit()));
+                //样本编号
+                if (StrUtil.isNotBlank(item.getCodePrefix())) {
+                    item.setCodePrefix(item.getCodePrefix().replace(',', '、'));
                 }
                 //检测指标
                 if (StrUtil.isNotBlank(item.getTarget())) {
@@ -322,6 +323,16 @@ public class SampleAnimalServiceImpl extends ServiceImpl<SampleAnimalMapper, Sam
         sampleInfoObj.put("approvalDate", WordUtil.padString(sampleInfo.getApprovalDate(), 8));
         sampleInfoObj.put("expireDate", WordUtil.padString(sampleInfo.getExpireDate(), 8));
 
+        //样本规则
+        String extData = checkOrderMapper.getExtData(sampleId);
+        if (StrUtil.isNotBlank(extData)) {
+            JSONObject object = JSON.parseObject(extData);
+            HtScienceApply scienceApply = object.getObject("scienceApply", HtScienceApply.class);
+            if (scienceApply != null) {
+                sampleAnimalObj.put("sampleRule", scienceApply.getPreText() + "-" + scienceApply.getBeginNo());
+            }
+        }
+
         String modelName = "animalSampleTesting.ftl";
         fileInfoService.uploadFileWithFileName(modelName, fileName, sampleInfo.getId(), sampleInfo.getStatus(), dataMap);
     }

+ 127 - 1
jfcloud-gene-biz/src/main/resources/ftlTemplate/animalSampleTesting.ftl

@@ -2576,7 +2576,7 @@
 											<w:rFonts w:hint="default"/>
                                             <w:u w:val="single"/>
 										</w:rPr>
-										<w:t xml:space="preserve">${sampleAnimal.handoverRemark!}</w:t>
+										<w:t xml:space="preserve">${sampleAnimal.handoverRemarkOther!}</w:t>
 									</w:r>
 								</w:p>
 							</w:tc>
@@ -49205,6 +49205,132 @@
                                 </w:p>
                             </w:tc>
                         </w:tr>
+                            <#if sampleAnimal.sampleRule??>
+                        <w:tr>
+                            <w:tblPrEx>
+                                <w:tblBorders>
+                                    <w:top w:val="none" w:color="auto" w:sz="0" w:space="0" />
+                                    <w:left w:val="none" w:color="auto" w:sz="0" w:space="0" />
+                                    <w:bottom w:val="none" w:color="auto" w:sz="0" w:space="0" />
+                                    <w:right w:val="none" w:color="auto" w:sz="0" w:space="0" />
+                                    <w:insideH w:val="none" w:color="auto" w:sz="0" w:space="0" />
+                                    <w:insideV w:val="none" w:color="auto" w:sz="0" w:space="0" />
+                                </w:tblBorders>
+                                <w:shd w:val="clear" />
+                                <w:tblCellMar>
+                                    <w:top w:w="56" w:type="dxa" />
+                                    <w:left w:w="96" w:type="dxa" />
+                                    <w:bottom w:w="56" w:type="dxa" />
+                                    <w:right w:w="96" w:type="dxa" />
+                                </w:tblCellMar>
+                            </w:tblPrEx>
+                            <w:trPr>
+                                <w:trHeight w:val="0" w:hRule="atLeast" />
+                                <w:jc w:val="center" />
+                            </w:trPr>
+                            <w:tc>
+                                <w:tcPr>
+                                    <w:tcW w:w="2426" w:type="dxa" />
+                                    <w:tcBorders>
+                                        <w:top w:val="single" w:color="000000" w:sz="8" w:space="0" />
+                                        <w:left w:val="single" w:color="000000" w:sz="8" w:space="0" />
+                                        <w:bottom w:val="nil" />
+                                        <w:right w:val="single" w:color="000000" w:sz="8"
+                                            w:space="0" />
+                                    </w:tcBorders>
+                                    <w:shd w:val="clear" w:color="auto" w:fill="A9D08E" />
+                                    <w:noWrap />
+                                    <w:vAlign w:val="center" />
+                                </w:tcPr>
+                                <w:p>
+                                    <w:pPr>
+                                        <w:keepNext w:val="0" />
+                                        <w:keepLines w:val="0" />
+                                        <w:widowControl />
+                                        <w:suppressLineNumbers w:val="0" />
+                                        <w:snapToGrid w:val="0" />
+                                        <w:jc w:val="center" />
+                                        <w:textAlignment w:val="center" />
+                                        <w:rPr>
+                                            <w:rFonts w:hint="eastAsia" w:asciiTheme="minorEastAsia"
+                                                w:hAnsiTheme="minorEastAsia"
+                                                w:eastAsiaTheme="minorEastAsia"
+                                                w:cstheme="minorEastAsia" />
+                                            <w:b />
+                                            <w:bCs />
+                                            <w:i w:val="0" />
+                                            <w:iCs w:val="0" />
+                                            <w:color w:val="000000" />
+                                            <w:sz w:val="24" />
+                                            <w:szCs w:val="24" />
+                                            <w:u w:val="none" />
+                                        </w:rPr>
+                                    </w:pPr>
+                                    <w:r>
+                                        <w:rPr>
+                                            <w:rFonts w:hint="eastAsia" w:asciiTheme="minorEastAsia"
+                                                w:hAnsiTheme="minorEastAsia"
+                                                w:eastAsiaTheme="minorEastAsia"
+                                                w:cstheme="minorEastAsia" />
+                                            <w:b />
+                                            <w:bCs />
+                                            <w:i w:val="0" />
+                                            <w:iCs w:val="0" />
+                                            <w:color w:val="000000" />
+                                            <w:kern w:val="0" />
+                                            <w:sz w:val="24" />
+                                            <w:szCs w:val="24" />
+                                            <w:u w:val="none" />
+                                            <w:bdr w:val="none" w:color="auto" w:sz="0" w:space="0" />
+                                            <w:lang w:val="en-US" w:eastAsia="zh-CN" w:bidi="ar" />
+                                        </w:rPr>
+                                        <w:t>样本规则</w:t>
+                                    </w:r>
+                                </w:p>
+                            </w:tc>
+                            <w:tc>
+                                <w:tcPr>
+                                    <w:tcW w:w="1976" w:type="dxa" />
+                                    <w:gridSpan w:val="3" />
+                                    <w:tcBorders>
+                                        <w:top w:val="single" w:color="000000" w:sz="8" w:space="0" />
+                                        <w:left w:val="nil" />
+                                        <w:bottom w:val="nil" />
+                                        <w:right w:val="single" w:color="000000" w:sz="8"
+                                            w:space="0" />
+                                    </w:tcBorders>
+                                    <w:shd w:val="clear" w:color="auto" w:fill="A9D08E" />
+                                    <w:vAlign w:val="center" />
+                                </w:tcPr>
+                                <w:p>
+                                    <w:pPr>
+                                        <w:snapToGrid w:val="0" />
+                                        <w:jc w:val="center" />
+                                        <w:rPr>
+                                            <w:rFonts w:hint="eastAsia" w:asciiTheme="minorEastAsia"
+                                                w:hAnsiTheme="minorEastAsia"
+                                                w:eastAsiaTheme="minorEastAsia"
+                                                w:cstheme="minorEastAsia" />
+                                            <w:b />
+                                            <w:bCs />
+                                            <w:i w:val="0" />
+                                            <w:iCs w:val="0" />
+                                            <w:color w:val="000000" />
+                                            <w:sz w:val="24" />
+                                            <w:szCs w:val="24" />
+                                            <w:u w:val="none" />
+                                        </w:rPr>
+                                    </w:pPr>
+                                    <w:r>
+										<w:rPr>
+											<w:rFonts w:hint="default"/>
+										</w:rPr>
+										<w:t xml:space="preserve">${sampleAnimal.sampleRule!}</w:t>
+									</w:r>
+                                </w:p>
+                            </w:tc>
+                        </w:tr>
+                            </#if>
                         <w:tr w14:paraId="4C168EAF">
                             <w:tblPrEx>
                                 <w:tblBorders>