浏览代码

血清送检申请单字段增加年龄单位,增加lis同步接口

陈长荣 2 周之前
父节点
当前提交
3a3ff36570

+ 26 - 3
jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/lis/config/LisDb.java

@@ -10,6 +10,7 @@ import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Component;
 
 import java.util.List;
+import java.util.function.Consumer;
 
 @Slf4j
 @Component
@@ -27,12 +28,34 @@ public class LisDb {
         dataSource = new SimpleDataSource(lisDbProperty.getUrl(), lisDbProperty.getUsername(), lisDbProperty.getPassword());
     }
 
-    @SneakyThrows
-    public List<Entity> query (String sql) {
+    private Db getDb() {
         if (dataSource == null) {
             throw new RuntimeException("LIS数据库未配置");
         }
+        return Db.use(dataSource);
+    }
+
+    /**
+     * 查询
+     * @param sql
+     * @return
+     */
+    @SneakyThrows
+    public List<Entity> query (String sql) {
         log.info("【LIS查询】:\n{}", SqlFormatter.format(sql));
-        return Db.use(dataSource).query(sql);
+        return getDb().query(sql);
+    }
+
+    /**
+     * 执行,用事务方式执行
+     * @param consumer
+     */
+    @SneakyThrows
+    public void execute(Consumer<Db> consumer) {
+        if (!enable) {
+            log.info("LIS未启用,不执行sql语句");
+            return;
+        }
+        getDb().tx(consumer::accept);
     }
 }

+ 2 - 2
jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/lis/controller/SampleCheckItemSerumController.java → jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/lis/controller/SampleLisController.java

@@ -31,7 +31,7 @@ import java.util.stream.Collectors;
 @RestController
 @RequestMapping("/sample/lis")
 @RequiredArgsConstructor
-public class SampleCheckItemSerumController {
+public class SampleLisController {
 
     private final LisDb lisDb;
 
@@ -116,7 +116,7 @@ public class SampleCheckItemSerumController {
         return R.ok(dictItems);
     }
 
-    @Operation(summary = "获取仪器", description = "profId专业组id")
+    @Operation(summary = "获取专业组下仪器", description = "profId专业组id")
     @GetMapping("/machine")
     public R<List<DictItem>> getLisInstrument(@RequestParam Integer profId) {
         String sql = "select m.id, m.name from dbo.HT_BAS_PROF_MACHINE pm " +

+ 157 - 0
jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/lis/entity/HtScienceApply.java

@@ -0,0 +1,157 @@
+package com.github.jfcloud.gene.lis.entity;
+
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.util.Date;
+
+@Accessors(chain = true)
+@Data
+public class HtScienceApply {
+
+    /**
+     * 主键ID,非自增
+     */
+    private Long id;
+
+    /**
+     * 机构ID,HT_INFO_HSP机构信息表 HT_INFO_DEP
+     */
+    private String hspId;
+
+    /**
+     * 中心机构ID,HT_INFO_HSP机构信息表 (2101101001惠康动物检测中心)
+     */
+    private String centerHspId = "2101101001";
+
+    /**
+     * 经销商ID ,HT_INFO_DEALERS经销商信息表(220844003内部用户)
+     */
+    private String dealersId = "220844003";
+
+    /**
+     * 宠物种类1193,字典HT_BAS_DICT
+     */
+    private String petType;
+
+    /**
+     * 邮箱
+     */
+    private String email;
+
+    /**
+     * 联系方式
+     */
+    private String phone;
+
+    /**
+     * 创建人姓名
+     */
+    private String createName;
+
+    /**
+     * 创建人ID
+     */
+    private String createId;
+
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+
+    /**
+     * 性别1002,字典
+     */
+    private String sex;
+
+    /**
+     * 年龄 200
+     */
+    private Integer age;
+
+    /**
+     * 年龄单位1013,字典 0时 1天 2月 3岁
+     */
+    private String ageUnit;
+
+    /**
+     * 年龄显示
+     */
+    private String ageDisplay;
+
+    /**
+     * 加急标志 0/1
+     */
+    private Integer fastFlag;
+
+    /**
+     * 申请科室,HT_BAS_DEP_USER科室关联人员信息表
+     */
+    private String applyDep;
+
+    /**
+     * 申请医生
+     */
+    private String applyDoc;
+
+    /**
+     * 申请医生ID,HT_INFO_USER_EXTEND人员信息扩展表
+     */
+    private String applyDocId;
+
+    /**
+     * 申请时间
+     */
+    private Date applyTime;
+
+    /**
+     * 送检人,HT_INFO_USER_EXTEND人员信息扩展表
+     */
+    private String deliverOper;
+
+    /**
+     * 送检人ID,HT_INFO_USER_EXTEND人员信息扩展表
+     */
+    private String deliverOperId;
+
+    /**
+     * 送检时间
+     */
+    private Date deliverTime;
+
+    /**
+     * 标本ID,HT_DICT_SAMPLE 固定1000000002血清
+     */
+    private String sampleId = "1000000002";
+
+    /**
+     * 标本规格,0固定
+     */
+    private Integer sampleFormatId = 0;
+
+    /**
+     * 样本数
+     */
+    private Integer sampleCount;
+
+    /**
+     * 编号前缀
+     */
+    private String preText;
+
+    /**
+     * 起始编号,与样本数的位数相同
+     */
+    private String beginNo;
+
+    /**
+     * 登记状态 1
+     */
+    private Integer status = 1;
+
+    /**
+     * 样本编号 HKYBKY20250326-14-15(HKYBKY+日期+当天编号最大值+(当天编号最大值+样本数))
+     */
+    private String sampleNo;
+
+}

+ 22 - 0
jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/lis/entity/HtScienceApplyItem.java

@@ -0,0 +1,22 @@
+package com.github.jfcloud.gene.lis.entity;
+
+import lombok.Data;
+
+@Data
+public class HtScienceApplyItem {
+
+    /**
+     * 主键ID,非自增
+     */
+    private Long id;
+
+
+    private Long applyId;
+
+    /**
+     * 检测项目ID
+     */
+    private Long itemId;
+
+    private Integer status = 1;
+}

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

@@ -0,0 +1,98 @@
+package com.github.jfcloud.gene.lis.service;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.lang.Assert;
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.db.Entity;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.github.jfcloud.gene.lis.config.LisDb;
+import com.github.jfcloud.gene.lis.entity.HtScienceApply;
+import com.github.jfcloud.gene.lis.entity.HtScienceApplyItem;
+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.mapper.SampleInfoMapper;
+import com.github.jfcloud.gene.sample.service.SampleAnimalService;
+import com.github.jfcloud.gene.sample.service.SampleCheckItemSerumService;
+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 lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+@Slf4j
+@Service
+@RequiredArgsConstructor
+public class LisSyncService {
+
+    private final LisDb lisDb;
+    private final SampleInfoMapper sampleInfoMapper;
+    private final SampleCheckOrderMapper checkOrderMapper;
+    private final SampleAnimalService sampleAnimalService;
+    private final SampleCheckItemSerumService sampleCheckItemSerumService;
+
+    /**
+     * 同步LIS
+     */
+    public void sync(Long sampleId) {
+        SampleAnimalVo animalDetail = sampleAnimalService.getDetail(sampleId);
+        Assert.notNull(animalDetail, "同步LIS失败,动物样本检测不存在");
+        Assert.isTrue(animalDetail.getScientificSampleType().contains(ScientificSampleTypeEnum.serum.getDescription()), "同步LIS失败,只有包含血清样本送检才可以同步");
+        SampleCheckSerumVo serum = animalDetail.getOrder().getSerum();
+
+        SampleCheckOrder checkOrder = checkOrderMapper.selectById(serum.getId());
+        if (StrUtil.isNotBlank(checkOrder.getExtData())) {
+            JSONObject extObj = JSON.parseObject(checkOrder.getExtData());
+            Assert.isFalse(extObj.containsKey("lisId"), "同步LIS失败,已同步过");
+        }
+
+        SampleInfo sampleInfo = sampleInfoMapper.selectById(sampleId);
+
+        //HT_SCIENCE_APPLY主键非自增,为年份2位+月份2位+日期2位+483+7位序列号,为了避免冲突,这里使用480
+        String idPrefix = sampleInfo.getApplyTime().format(DateTimeFormatter.ofPattern("yyMMdd")) + "480";
+        long firstId = Long.parseLong(String.format("%s%07d", idPrefix, 1));
+        //查询当前最大的id
+        String sql = String.format("select top 1 id from dbo.HT_SCIENCE_APPLY where id like '%s%%' order by id desc ",  idPrefix);
+        List<Entity> idEntities = lisDb.query(sql);
+        if (CollUtil.isNotEmpty(idEntities)) {
+            firstId = idEntities.get(0).getLong("id") + 1;
+        }
+
+        //todo 同步LIS
+        List<HtScienceApply> applyList = new ArrayList<>();
+        List<HtScienceApplyItem> applyItemList = new ArrayList<>();
+        for (CheckItemSerumVo item : serum.getItems()) {
+            HtScienceApply scienceApply = new HtScienceApply();
+            scienceApply.setId(firstId++);
+            scienceApply.setPhone(serum.getApplyUserMobile());
+            scienceApply.setEmail(serum.getApplyUserEmail());
+            applyList.add(scienceApply);
+        }
+
+        lisDb.execute(db -> {
+            try {
+                List<Entity> applyEntities = applyList.stream().map(x -> Entity.create("dbo.HT_SCIENCE_APPLY").parseBean(x)).collect(Collectors.toList());
+                db.insert(applyEntities);
+                List<Entity> applyItemEntities = applyItemList.stream().map(x -> Entity.create("dbo.HT_SCIENCE_APPLY_ITEM").parseBean(x)).collect(Collectors.toList());
+                db.insert(applyItemEntities);
+            } catch (Exception e) {
+                log.error("同步LIS失败", e);
+            }
+        });
+    }
+
+    /**
+     * 取消同步LIS
+     */
+    public void cancelSyncLis(Long sampleId) {
+        log.info("取消同步LIS");
+    }
+}

+ 39 - 0
jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/sample/controller/SampleCheckSerumController.java

@@ -0,0 +1,39 @@
+package com.github.jfcloud.gene.sample.controller;
+
+import com.github.jfcloud.common.core.util.R;
+import com.github.jfcloud.gene.lis.service.LisSyncService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.RequiredArgsConstructor;
+import lombok.SneakyThrows;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+@Slf4j
+@Tag(name = "样本送检申请单-血清")
+@RestController
+@RequestMapping("/sample/check/serum")
+@RequiredArgsConstructor
+public class SampleCheckSerumController {
+
+    private final LisSyncService lisSyncService;
+
+    @Operation(summary = "同步lis")
+    @SneakyThrows
+    @PostMapping("/syncLis")
+    public R syncLis(@RequestParam Long sampleId) {
+        lisSyncService.sync(sampleId);
+        return R.ok();
+    }
+
+    @Operation(summary = "取消同步lis")
+    @SneakyThrows
+    @PostMapping("/cancelSyncLis")
+    public R cancelSyncLis(@RequestParam Long sampleId) {
+        lisSyncService.cancelSyncLis(sampleId);
+        return R.ok();
+    }
+}

+ 3 - 0
jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/sample/entity/SampleCheckItemSerum.java

@@ -39,6 +39,9 @@ public class SampleCheckItemSerum extends BaseEntity {
     @Schema(description = "年龄")
     private String age;
 
+    @Schema(description = "年龄单位")
+    private String ageUnit;
+
     @Schema(description = "lis动物种类id")
     private Integer lisPetTypeId;
 

+ 4 - 1
jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/sample/vo/CheckItemSerumVo.java

@@ -27,9 +27,12 @@ public class CheckItemSerumVo {
     @Schema(description = "lis性别")
     private String lisSexName;
 
-    @Schema(description = "年龄,1y2m3d")
+    @Schema(description = "年龄")
     private String age;
 
+    @Schema(description = "年龄单位")
+    private String ageUnit;
+
     @Schema(description = "lis动物种类id")
     private Integer lisPetTypeId;
 

+ 32 - 31
jfcloud-gene-biz/src/main/resources/sql/ddl-20250513.sql

@@ -3,41 +3,42 @@ ALTER TABLE `jfcloud_gene`.`sample_check_order`
 ALTER TABLE `jfcloud_gene`.`sample_check_order`
     ADD COLUMN `send_org_name` VARCHAR(255) NULL COMMENT '送检机构名称' AFTER `send_org_id`;
 ALTER TABLE `jfcloud_gene`.`sample_check_order`
-    ADD COLUMN `ext_data` TEXT NULL COMMENT '附加数据' ;
+    ADD COLUMN `ext_data` TEXT NULL COMMENT '附加数据';
 
 CREATE TABLE sample_check_item_serum
 (
-    id                 int          NOT NULL AUTO_INCREMENT PRIMARY KEY,
-    check_order_id     bigint       NOT NULL COMMENT '送检申请单id',
-    code_prefix        varchar(255) NULL COMMENT '样本编号前缀',
-    code_suffix        varchar(255) NULL COMMENT '样本编号后缀',
+    id                   int          NOT NULL AUTO_INCREMENT PRIMARY KEY,
+    check_order_id       bigint       NOT NULL COMMENT '送检申请单id',
+    code_prefix          varchar(255) NULL COMMENT '样本编号前缀',
+    code_suffix          varchar(255) NULL COMMENT '样本编号后缀',
 
-    lis_sample_type_id        int COMMENT 'lis样本类型id',
-    lis_sample_type_name      VARCHAR(20) COMMENT 'lis样本类型',
-    lis_sex_id         int COMMENT 'lis性别id',
-    lis_sex_name       VARCHAR(10) COMMENT 'lis性别',
-    age                VARCHAR(10) COMMENT '年龄',
-    lis_pet_type_id     int NULL COMMENT 'lis动物种类id',
-    lis_pet_type_name    varchar(20) NULL COMMENT 'lis动物种类',
-    lis_prof_id int NULL COMMENT 'lis专业组id,HT_INFO_PROF',
-    lis_prof_name VARCHAR(255) COMMENT 'lis专业组',
-    lis_machine_id int NULL COMMENT 'lis仪器id,HT_INFO_MACHINE',
-    lis_machine_name VARCHAR(255) COMMENT 'lis仪器',
+    lis_sample_type_id   int COMMENT 'lis样本类型id',
+    lis_sample_type_name VARCHAR(20) COMMENT 'lis样本类型',
+    lis_sex_id           int COMMENT 'lis性别id',
+    lis_sex_name         VARCHAR(10) COMMENT 'lis性别',
+    age                  VARCHAR(10) COMMENT '年龄',
+    age_unit             varchar(10)  NULL COMMENT '年龄单位',
+    lis_pet_type_id      int          NULL COMMENT 'lis动物种类id',
+    lis_pet_type_name    varchar(20)  NULL COMMENT 'lis动物种类',
+    lis_prof_id          int          NULL COMMENT 'lis专业组id,HT_INFO_PROF',
+    lis_prof_name        VARCHAR(255) COMMENT 'lis专业组',
+    lis_machine_id       int          NULL COMMENT 'lis仪器id,HT_INFO_MACHINE',
+    lis_machine_name     VARCHAR(255) COMMENT 'lis仪器',
 
-    target             TEXT NULL COMMENT '检测指标',
-    num                varchar(255) NULL COMMENT '样本数量',
-    volume             varchar(255) NULL COMMENT '送检样本体积',
-    apply_date         varchar(255) NULL COMMENT '申请日期',
-    send_date          varchar(255) NULL COMMENT '送检日期',
-    quick              char(1) NULL COMMENT '加急 0否 1是',
-    need_back          varchar(255) NULL COMMENT '样本需返还',
-    remark             text COMMENT '备注或其他需求',
-    create_by          varchar(64)  NOT NULL COMMENT '创建人',
-    update_by          varchar(64)  NULL COMMENT '修改人',
-    create_time        datetime              DEFAULT NULL COMMENT '创建时间',
-    update_time        datetime              DEFAULT NULL COMMENT '修改时间',
-    deleted            char(1)      NOT NULL DEFAULT '0' COMMENT '删除标记,0未删除,1已删除',
-    tenant_id          bigint                DEFAULT NULL COMMENT '所属租户ID',
-    dept_id            bigint                DEFAULT NULL COMMENT '所属部门ID'
+    target               TEXT         NULL COMMENT '检测指标',
+    num                  varchar(255) NULL COMMENT '样本数量',
+    volume               varchar(255) NULL COMMENT '送检样本体积',
+    apply_date           varchar(255) NULL COMMENT '申请日期',
+    send_date            varchar(255) NULL COMMENT '送检日期',
+    quick                char(1)      NULL COMMENT '加急 0否 1是',
+    need_back            varchar(255) NULL COMMENT '样本需返还',
+    remark               text COMMENT '备注或其他需求',
+    create_by            varchar(64)  NOT NULL COMMENT '创建人',
+    update_by            varchar(64)  NULL COMMENT '修改人',
+    create_time          datetime              DEFAULT NULL COMMENT '创建时间',
+    update_time          datetime              DEFAULT NULL COMMENT '修改时间',
+    deleted              char(1)      NOT NULL DEFAULT '0' COMMENT '删除标记,0未删除,1已删除',
+    tenant_id            bigint                DEFAULT NULL COMMENT '所属租户ID',
+    dept_id              bigint                DEFAULT NULL COMMENT '所属部门ID'
 ) DEFAULT CHARSET = utf8mb4
   COLLATE = utf8mb4_general_ci COMMENT '样本送检申请单血清详情';