| Author | SHA1 | Message | Date |
|---|---|---|---|
|
|
ebc5a92dd1 | Merge remote-tracking branch 'origin/master' | 2 months ago |
|
|
205a0f44d1 | feat:【数据对接】提交 | 2 months ago |
| @ -0,0 +1,130 @@ | |||
| <?xml version="1.0" encoding="UTF-8"?> | |||
| <project xmlns="http://maven.apache.org/POM/4.0.0" | |||
| xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | |||
| xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> | |||
| <modelVersion>4.0.0</modelVersion> | |||
| <parent> | |||
| <groupId>com.hxhq</groupId> | |||
| <artifactId>hxhq-modules</artifactId> | |||
| <version>3.6.6</version> | |||
| </parent> | |||
| <artifactId>hxhq-modules-integration</artifactId> | |||
| <description> | |||
| hxhq-modules-system系统模块 | |||
| </description> | |||
| <dependencies> | |||
| <!-- SpringCloud Alibaba Nacos --> | |||
| <dependency> | |||
| <groupId>com.alibaba.cloud</groupId> | |||
| <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> | |||
| </dependency> | |||
| <!-- SpringCloud Alibaba Nacos Config --> | |||
| <dependency> | |||
| <groupId>com.alibaba.cloud</groupId> | |||
| <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> | |||
| </dependency> | |||
| <!-- SpringCloud Alibaba Sentinel --> | |||
| <dependency> | |||
| <groupId>com.alibaba.cloud</groupId> | |||
| <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId> | |||
| </dependency> | |||
| <!-- SpringBoot Actuator --> | |||
| <dependency> | |||
| <groupId>org.springframework.boot</groupId> | |||
| <artifactId>spring-boot-starter-actuator</artifactId> | |||
| </dependency> | |||
| <!-- Mysql Connector --> | |||
| <dependency> | |||
| <groupId>com.mysql</groupId> | |||
| <artifactId>mysql-connector-j</artifactId> | |||
| </dependency> | |||
| <!-- hxhq Common DataSource --> | |||
| <dependency> | |||
| <groupId>com.hxhq</groupId> | |||
| <artifactId>hxhq-common-datasource</artifactId> | |||
| </dependency> | |||
| <!-- hxhq Common DataScope --> | |||
| <dependency> | |||
| <groupId>com.hxhq</groupId> | |||
| <artifactId>hxhq-common-datascope</artifactId> | |||
| </dependency> | |||
| <!-- hxhq Common Log --> | |||
| <dependency> | |||
| <groupId>com.hxhq</groupId> | |||
| <artifactId>hxhq-common-log</artifactId> | |||
| </dependency> | |||
| <!-- hxhq Common Swagger --> | |||
| <dependency> | |||
| <groupId>com.hxhq</groupId> | |||
| <artifactId>hxhq-common-swagger</artifactId> | |||
| </dependency> | |||
| <!-- test --> | |||
| <dependency> | |||
| <groupId>org.springframework.boot</groupId> | |||
| <artifactId>spring-boot-starter-test</artifactId> | |||
| <scope>test</scope> | |||
| </dependency> | |||
| <!-- pdf:start --> | |||
| <dependency> | |||
| <groupId>com.itextpdf</groupId> | |||
| <artifactId>itextpdf</artifactId> | |||
| <version>5.5.11</version> | |||
| </dependency> | |||
| <dependency> | |||
| <groupId>com.itextpdf.tool</groupId> | |||
| <artifactId>xmlworker</artifactId> | |||
| <version>5.5.11</version> | |||
| </dependency> | |||
| <!-- 支持中文 --> | |||
| <dependency> | |||
| <groupId>com.itextpdf</groupId> | |||
| <artifactId>itext-asian</artifactId> | |||
| <version>5.2.0</version> | |||
| </dependency> | |||
| <dependency> | |||
| <groupId>org.projectlombok</groupId> | |||
| <artifactId>lombok</artifactId> | |||
| </dependency> | |||
| <dependency> | |||
| <groupId>cn.hutool</groupId> | |||
| <artifactId>hutool-all</artifactId> | |||
| <version>5.8.16</version> | |||
| </dependency> | |||
| <dependency> | |||
| <groupId>com.belerweb</groupId> | |||
| <artifactId>pinyin4j</artifactId> | |||
| <version>2.5.1</version> | |||
| </dependency> | |||
| </dependencies> | |||
| <build> | |||
| <finalName>${project.artifactId}</finalName> | |||
| <plugins> | |||
| <plugin> | |||
| <groupId>org.springframework.boot</groupId> | |||
| <artifactId>spring-boot-maven-plugin</artifactId> | |||
| <executions> | |||
| <execution> | |||
| <goals> | |||
| <goal>repackage</goal> | |||
| </goals> | |||
| </execution> | |||
| </executions> | |||
| </plugin> | |||
| </plugins> | |||
| </build> | |||
| </project> | |||
| @ -0,0 +1,25 @@ | |||
| package com.hxhq; | |||
| import com.hxhq.common.security.annotation.EnableCustomConfig; | |||
| import com.hxhq.common.security.annotation.EnableRyFeignClients; | |||
| import org.springframework.boot.SpringApplication; | |||
| import org.springframework.boot.autoconfigure.SpringBootApplication; | |||
| import org.springframework.context.annotation.ComponentScan; | |||
| /** | |||
| * 系统模块 | |||
| * | |||
| * @author hxhq | |||
| */ | |||
| @EnableCustomConfig | |||
| @EnableRyFeignClients | |||
| @SpringBootApplication | |||
| @ComponentScan({"com.hxhq.*"}) | |||
| public class HxhqIntegrationApplication | |||
| { | |||
| public static void main(String[] args) | |||
| { | |||
| SpringApplication.run(HxhqIntegrationApplication.class, args); | |||
| System.out.println("数据对接模块启动成功"); | |||
| } | |||
| } | |||
| @ -0,0 +1,44 @@ | |||
| package com.hxhq.common; | |||
| /** | |||
| * model参数常量常量 | |||
| * | |||
| * @author yuyantian | |||
| * @date | |||
| */ | |||
| public class EntityConstants { | |||
| /** | |||
| * 数据同步状态状态(0-正常状态,1删除状态) | |||
| */ | |||
| public final static Integer NORMAL = 0; | |||
| /** | |||
| * 系统名称 | |||
| */ | |||
| public final static String SYS_HXHQ = "hxhq"; | |||
| /** | |||
| * 日志同步类型 试剂 | |||
| */ | |||
| public final static String LOG_REAGENT = "reagent"; | |||
| /** | |||
| * 日志同步类型 仪器 | |||
| */ | |||
| public final static String LOG_INSTRUMENT = "instrument"; | |||
| /** | |||
| * 日志同步类型 供试品 | |||
| */ | |||
| public final static String LOG_CONTAINER = "container"; | |||
| /** | |||
| * 系统名称 中间库 | |||
| */ | |||
| public final static String SYS_STAGING_DATABASE = "stagingDatabase"; | |||
| public static final String PENDING = "pending"; | |||
| public static final String SUCCESS = "success"; | |||
| public static final String FAILED = "failed"; | |||
| } | |||
| @ -0,0 +1,46 @@ | |||
| package com.hxhq.controller; | |||
| import com.hxhq.common.core.web.controller.BaseController; | |||
| import com.hxhq.common.core.web.domain.AjaxResult; | |||
| import com.hxhq.dto.ContainerDTO; | |||
| import com.hxhq.service.ContainerService; | |||
| import org.springframework.beans.factory.annotation.Autowired; | |||
| import org.springframework.web.bind.annotation.GetMapping; | |||
| import org.springframework.web.bind.annotation.PostMapping; | |||
| import org.springframework.web.bind.annotation.RequestMapping; | |||
| import org.springframework.web.bind.annotation.RestController; | |||
| /** | |||
| * 供试品 | |||
| * | |||
| * @author hxhq | |||
| */ | |||
| @RestController | |||
| @RequestMapping("/container") | |||
| public class ContainerController extends BaseController | |||
| { | |||
| @Autowired | |||
| private ContainerService containerService; | |||
| /** | |||
| * | |||
| * 供试品数据推送至中间库 | |||
| * @param dto | |||
| * @create 2026/1/29 | |||
| **/ | |||
| @PostMapping("/dataPush") | |||
| public AjaxResult dataPush(ContainerDTO dto) { | |||
| containerService.dataPush(dto); | |||
| return AjaxResult.success("推送数据成功"); | |||
| } | |||
| /** | |||
| * | |||
| * 供试品数据同步 | |||
| * @create 2026/1/29 | |||
| **/ | |||
| @GetMapping("/dataSync") | |||
| public AjaxResult dataSync() { | |||
| containerService.dataSync(); | |||
| return AjaxResult.success("同步成功"); | |||
| } | |||
| } | |||
| @ -0,0 +1,46 @@ | |||
| package com.hxhq.controller; | |||
| import com.hxhq.common.core.web.controller.BaseController; | |||
| import com.hxhq.common.core.web.domain.AjaxResult; | |||
| import com.hxhq.dto.InstrumentPushDTO; | |||
| import com.hxhq.service.InstrumentService; | |||
| import org.springframework.beans.factory.annotation.Autowired; | |||
| import org.springframework.web.bind.annotation.GetMapping; | |||
| import org.springframework.web.bind.annotation.PostMapping; | |||
| import org.springframework.web.bind.annotation.RequestMapping; | |||
| import org.springframework.web.bind.annotation.RestController; | |||
| /** | |||
| * 仪器 | |||
| * | |||
| * @author hxhq | |||
| */ | |||
| @RestController | |||
| @RequestMapping("/instrument") | |||
| public class InstrumentController extends BaseController | |||
| { | |||
| @Autowired | |||
| private InstrumentService instrumentService; | |||
| /** | |||
| * | |||
| * 仪器数据推送至中间库 | |||
| * @param dto | |||
| * @create 2026/1/29 | |||
| **/ | |||
| @PostMapping("/dataPush") | |||
| public AjaxResult dataPush(InstrumentPushDTO dto) { | |||
| instrumentService.dataPush(dto); | |||
| return AjaxResult.success("推送数据成功"); | |||
| } | |||
| /** | |||
| * | |||
| * 仪器数据同步 | |||
| * @create 2026/1/29 | |||
| **/ | |||
| @GetMapping("/dataSync") | |||
| public AjaxResult dataSync() { | |||
| instrumentService.dataSync(); | |||
| return AjaxResult.success("同步成功"); | |||
| } | |||
| } | |||
| @ -0,0 +1,47 @@ | |||
| package com.hxhq.controller; | |||
| import com.hxhq.common.core.web.controller.BaseController; | |||
| import com.hxhq.common.core.web.domain.AjaxResult; | |||
| import com.hxhq.dto.ReagentStockPushDTO; | |||
| import com.hxhq.service.ReagentStockService; | |||
| import org.springframework.beans.factory.annotation.Autowired; | |||
| import org.springframework.web.bind.annotation.GetMapping; | |||
| import org.springframework.web.bind.annotation.PostMapping; | |||
| import org.springframework.web.bind.annotation.RequestMapping; | |||
| import org.springframework.web.bind.annotation.RestController; | |||
| /** | |||
| * 试剂 | |||
| * | |||
| * @author hxhq | |||
| */ | |||
| @RestController | |||
| @RequestMapping("/reagentStock") | |||
| public class ReagentStockController extends BaseController | |||
| { | |||
| @Autowired | |||
| private ReagentStockService reagentStockService; | |||
| /** | |||
| * | |||
| * 试剂数据推送至中间库 | |||
| * @param dto | |||
| * @create 2026/1/29 | |||
| **/ | |||
| @PostMapping("/dataPush") | |||
| public AjaxResult dataPush(ReagentStockPushDTO dto) { | |||
| reagentStockService.dataPush(dto); | |||
| return AjaxResult.success("推送数据成功"); | |||
| } | |||
| /** | |||
| * | |||
| * 试剂数据同步 | |||
| * @create 2026/1/29 | |||
| **/ | |||
| @GetMapping("/dataSync") | |||
| public AjaxResult dataSync() { | |||
| reagentStockService.dataSync(); | |||
| return AjaxResult.success("同步成功"); | |||
| } | |||
| } | |||
| @ -0,0 +1,115 @@ | |||
| package com.hxhq.domain; | |||
| import com.baomidou.mybatisplus.annotation.IdType; | |||
| import com.baomidou.mybatisplus.annotation.TableField; | |||
| import com.baomidou.mybatisplus.annotation.TableId; | |||
| import com.baomidou.mybatisplus.annotation.TableName; | |||
| import lombok.Data; | |||
| import java.math.BigDecimal; | |||
| import java.time.LocalDateTime; | |||
| /** | |||
| * @author zhangjing | |||
| * @date 2026/01/30 14:15 | |||
| * @description 供试品 | |||
| */ | |||
| @Data | |||
| @TableName("container") | |||
| public class Container { | |||
| /** | |||
| * 主键 ID(自增) | |||
| **/ | |||
| @TableId(value = "id",type = IdType.AUTO) | |||
| private Integer id; | |||
| /** | |||
| * 容器ID | |||
| **/ | |||
| @TableField(value = "CONTAINER_ID") | |||
| private Integer containerId; | |||
| /** | |||
| * 物质编码 | |||
| **/ | |||
| @TableField(value = "SUBSTANCE_CODE") | |||
| private String substanceCode; | |||
| /** | |||
| * 物质名称 | |||
| **/ | |||
| @TableField(value = "SUBSTANCE_NAME") | |||
| private String substanceName; | |||
| /** | |||
| * 备注 | |||
| **/ | |||
| @TableField(value = "COMMENTS") | |||
| private String comments; | |||
| /** | |||
| * 当前净含量 | |||
| **/ | |||
| @TableField(value = "CURRENT_NET_AMOUNT") | |||
| private BigDecimal currentNetAmount; | |||
| /** | |||
| * 当前净含量单位 | |||
| **/ | |||
| @TableField(value = "CURRENT_NET_AMOUNT_UNIT") | |||
| private String currentNetAmountUnit; | |||
| /** | |||
| * 批号 | |||
| **/ | |||
| @TableField(value = "LOT_NUMBER") | |||
| private String lotNumber; | |||
| /** | |||
| * 失效日期 | |||
| **/ | |||
| @TableField(value = "EXPIRATION_DATE") | |||
| private LocalDateTime expirationDate; | |||
| /** | |||
| * 容器用途 | |||
| **/ | |||
| @TableField(value = "CONTAINER_USE") | |||
| private String containerUse; | |||
| /** | |||
| * 药房接收时间 | |||
| **/ | |||
| @TableField(value = "DATE_TIME_PHARMACY_RECV") | |||
| private LocalDateTime dateTimePharmacyRecv; | |||
| /** | |||
| * 交易日期(默认当前时间) | |||
| **/ | |||
| @TableField(value = "TRANS_DATE") | |||
| private LocalDateTime transDate; | |||
| /** | |||
| * 存储位置 | |||
| **/ | |||
| @TableField(value = "STORAGE_LOCATION") | |||
| private String storageLocation; | |||
| /** | |||
| * 录入人 | |||
| **/ | |||
| @TableField(value = "ENTERED_BY") | |||
| private String enteredBy; | |||
| /** | |||
| * 研究编号 | |||
| **/ | |||
| @TableField(value = "STUDY_NUMBER") | |||
| private String studyNumber; | |||
| /** | |||
| * 录入时间 | |||
| **/ | |||
| @TableField(value = "DATE_TIME_ENTERED") | |||
| private LocalDateTime dateTimeEntered; | |||
| } | |||
| @ -0,0 +1,633 @@ | |||
| package com.hxhq.domain; | |||
| import com.baomidou.mybatisplus.annotation.FieldStrategy; | |||
| import com.baomidou.mybatisplus.annotation.TableField; | |||
| import com.baomidou.mybatisplus.annotation.TableName; | |||
| import com.fasterxml.jackson.annotation.JsonFormat; | |||
| import com.hxhq.common.core.annotation.Compare; | |||
| import com.hxhq.common.core.domain.MpBaseEntity; | |||
| import java.util.Date; | |||
| /** | |||
| * 供试品管理对象 t_gsp | |||
| * | |||
| * @author HanLong | |||
| * @date 2025-12-30 | |||
| */ | |||
| @TableName("t_gsp") | |||
| public class Gsp extends MpBaseEntity | |||
| { | |||
| private static final long serialVersionUID = 1L; | |||
| /** 制剂状态 1:入库 3:已发放 5:已锁定 7:待归档 9:归档 11:待解档 */ | |||
| private Integer zjzt; | |||
| /** 借阅状态 1:未借阅 3:待借阅 5:借阅中 */ | |||
| private Integer jyzt; | |||
| /** 编辑状态:1:未编辑 3:审核中 */ | |||
| private Integer bjzt; | |||
| /** 库存编辑状态:1:未编辑 3:审核中 */ | |||
| private Integer kcbjzt; | |||
| /** 名称 */ | |||
| @Compare(name = "名称", nameEn = "Name") | |||
| private String mc; | |||
| /** 编号 */ | |||
| private String bh; | |||
| /** 批号 */ | |||
| @Compare(name = "批号", nameEn = "Batch Number") | |||
| private String ph; | |||
| /** 规格 */ | |||
| @Compare(name = "规格", nameEn = "Specification") | |||
| private String gg; | |||
| /** 规格 */ | |||
| @Compare(name = "规格单位", nameEn = "Specification Unit") | |||
| private String ggdw; | |||
| /** 库存数量 */ | |||
| private String kc; | |||
| /** 库存单位 */ | |||
| private String kcdw; | |||
| /** 有效期 */ | |||
| @Compare(name = "有效期", nameEn = "Validity Period") | |||
| @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") | |||
| private Date yxq; | |||
| /** 接收日期 */ | |||
| @Compare(name = "接收日期", nameEn = "Date Received") | |||
| @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") | |||
| private Date jsrq; | |||
| /** 存储条件 */ | |||
| @Compare(name = "存储条件", nameEn = "Storage Condition") | |||
| private String cctj; | |||
| /** 注意事项 */ | |||
| @Compare(name = "注意事项", nameEn = "Notification") | |||
| private String zysx; | |||
| /** 名称编辑 */ | |||
| @TableField(updateStrategy = FieldStrategy.IGNORED) | |||
| private String mcbj; | |||
| /** 批号编辑 */ | |||
| @TableField(updateStrategy = FieldStrategy.IGNORED) | |||
| private String phbj; | |||
| /** 规格编辑 */ | |||
| @TableField(updateStrategy = FieldStrategy.IGNORED) | |||
| private String ggbj; | |||
| /** 规格单位 */ | |||
| @TableField(updateStrategy = FieldStrategy.IGNORED) | |||
| private String ggdwbj; | |||
| /** 有效期编辑 */ | |||
| @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") | |||
| @TableField(updateStrategy = FieldStrategy.IGNORED) | |||
| private Date yxqbj; | |||
| /** 接收日期编辑 */ | |||
| @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") | |||
| @TableField(updateStrategy = FieldStrategy.IGNORED) | |||
| private Date jsrqbj; | |||
| /** 存储条件编辑 */ | |||
| @TableField(updateStrategy = FieldStrategy.IGNORED) | |||
| private String cctjbj; | |||
| /** 注意事项编辑 */ | |||
| @TableField(updateStrategy = FieldStrategy.IGNORED) | |||
| private String zysxbj; | |||
| /** 库存编辑 */ | |||
| @TableField(updateStrategy = FieldStrategy.IGNORED) | |||
| private String kcbj; | |||
| /** 库存单位编辑 */ | |||
| @TableField(updateStrategy = FieldStrategy.IGNORED) | |||
| private String kcdwbj; | |||
| /** 编辑备注 */ | |||
| @TableField(updateStrategy = FieldStrategy.IGNORED) | |||
| private String bjbz; | |||
| /** 库存备注 */ | |||
| @TableField(updateStrategy = FieldStrategy.IGNORED) | |||
| private String kcbjbz; | |||
| /** 编辑人id */ | |||
| @TableField(updateStrategy = FieldStrategy.IGNORED) | |||
| private Long bjrId; | |||
| /** 编辑人名称 */ | |||
| @TableField(updateStrategy = FieldStrategy.IGNORED) | |||
| private String bjrMc; | |||
| /** 库存编辑人id */ | |||
| @TableField(updateStrategy = FieldStrategy.IGNORED) | |||
| private Long kcbjrId; | |||
| /** 库存编辑人名称 */ | |||
| @TableField(updateStrategy = FieldStrategy.IGNORED) | |||
| private String kcbjrMc; | |||
| /** 发放转移条件 */ | |||
| private String ffzytj; | |||
| /** 领取人1id */ | |||
| private Long lqr1Id; | |||
| /** 领取人2id */ | |||
| private Long lqr2Id; | |||
| /** 发放人1id */ | |||
| private Long ffr1Id; | |||
| /** 发放人2id */ | |||
| private Long ffr2Id; | |||
| /** 领取人1名称 */ | |||
| private String lqr1Mc; | |||
| /** 领取人2名称 */ | |||
| private String lqr2Mc; | |||
| /** 发放人1名称 */ | |||
| private String ffr1Mc; | |||
| /** 发放人2名称 */ | |||
| private String ffr2Mc; | |||
| /** 发放日期 */ | |||
| @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") | |||
| private Date ffrq; | |||
| /** 发放备注 */ | |||
| private String ffbz; | |||
| /** 发放目的ids */ | |||
| private String mdIds; | |||
| /** 发放目的其他 */ | |||
| private String mdOther; | |||
| /** 关联暂存柜id */ | |||
| @TableField(updateStrategy = FieldStrategy.IGNORED) | |||
| private Long zcgId; | |||
| /** 借阅开始日期 */ | |||
| @JsonFormat(pattern = "yyyy-MM-dd") | |||
| private Date jyksrq; | |||
| /** 借阅结束日期 */ | |||
| @JsonFormat(pattern = "yyyy-MM-dd") | |||
| private Date jyjsrq; | |||
| /** 归档申请时间 */ | |||
| @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") | |||
| private Date gdsqsj; | |||
| /** 档案申请人名称 */ | |||
| private String gdsqrMc; | |||
| /** 档案申请人ID*/ | |||
| private Long gdsqrId; | |||
| public Date getGdsqsj() { | |||
| return gdsqsj; | |||
| } | |||
| public void setGdsqsj(Date gdsqsj) { | |||
| this.gdsqsj = gdsqsj; | |||
| } | |||
| public String getGdsqrMc() { | |||
| return gdsqrMc; | |||
| } | |||
| public void setGdsqrMc(String gdsqrMc) { | |||
| this.gdsqrMc = gdsqrMc; | |||
| } | |||
| public Long getGdsqrId() { | |||
| return gdsqrId; | |||
| } | |||
| public void setGdsqrId(Long gdsqrId) { | |||
| this.gdsqrId = gdsqrId; | |||
| } | |||
| public Date getJyksrq() { | |||
| return jyksrq; | |||
| } | |||
| public void setJyksrq(Date jyksrq) { | |||
| this.jyksrq = jyksrq; | |||
| } | |||
| public Date getJyjsrq() { | |||
| return jyjsrq; | |||
| } | |||
| public void setJyjsrq(Date jyjsrq) { | |||
| this.jyjsrq = jyjsrq; | |||
| } | |||
| public Long getZcgId() { | |||
| return zcgId; | |||
| } | |||
| public void setZcgId(Long zcgId) { | |||
| this.zcgId = zcgId; | |||
| } | |||
| public void setZjzt(Integer zjzt) | |||
| { | |||
| this.zjzt = zjzt; | |||
| } | |||
| public Integer getZjzt() | |||
| { | |||
| return zjzt; | |||
| } | |||
| public void setJyzt(Integer jyzt) | |||
| { | |||
| this.jyzt = jyzt; | |||
| } | |||
| public Integer getJyzt() | |||
| { | |||
| return jyzt; | |||
| } | |||
| public void setMc(String mc) | |||
| { | |||
| this.mc = mc; | |||
| } | |||
| public String getMc() | |||
| { | |||
| return mc; | |||
| } | |||
| public void setBh(String bh) | |||
| { | |||
| this.bh = bh; | |||
| } | |||
| public String getBh() | |||
| { | |||
| return bh; | |||
| } | |||
| public void setPh(String ph) | |||
| { | |||
| this.ph = ph; | |||
| } | |||
| public String getPh() | |||
| { | |||
| return ph; | |||
| } | |||
| public void setGg(String gg) | |||
| { | |||
| this.gg = gg; | |||
| } | |||
| public String getGg() | |||
| { | |||
| return gg; | |||
| } | |||
| public void setGgdw(String ggdw) | |||
| { | |||
| this.ggdw = ggdw; | |||
| } | |||
| public String getGgdw() | |||
| { | |||
| return ggdw; | |||
| } | |||
| public void setKc(String kc) | |||
| { | |||
| this.kc = kc; | |||
| } | |||
| public String getKc() | |||
| { | |||
| return kc; | |||
| } | |||
| public void setKcdw(String kcdw) | |||
| { | |||
| this.kcdw = kcdw; | |||
| } | |||
| public String getKcdw() | |||
| { | |||
| return kcdw; | |||
| } | |||
| public void setYxq(Date yxq) | |||
| { | |||
| this.yxq = yxq; | |||
| } | |||
| public Date getYxq() | |||
| { | |||
| return yxq; | |||
| } | |||
| public void setJsrq(Date jsrq) | |||
| { | |||
| this.jsrq = jsrq; | |||
| } | |||
| public Date getJsrq() | |||
| { | |||
| return jsrq; | |||
| } | |||
| public void setCctj(String cctj) | |||
| { | |||
| this.cctj = cctj; | |||
| } | |||
| public String getCctj() | |||
| { | |||
| return cctj; | |||
| } | |||
| public void setZysx(String zysx) | |||
| { | |||
| this.zysx = zysx; | |||
| } | |||
| public String getZysx() | |||
| { | |||
| return zysx; | |||
| } | |||
| public Integer getBjzt() { | |||
| return bjzt; | |||
| } | |||
| public void setBjzt(Integer bjzt) { | |||
| this.bjzt = bjzt; | |||
| } | |||
| public Integer getKcbjzt() { | |||
| return kcbjzt; | |||
| } | |||
| public void setKcbjzt(Integer kcbjzt) { | |||
| this.kcbjzt = kcbjzt; | |||
| } | |||
| public String getMcbj() { | |||
| return mcbj; | |||
| } | |||
| public void setMcbj(String mcbj) { | |||
| this.mcbj = mcbj; | |||
| } | |||
| public String getPhbj() { | |||
| return phbj; | |||
| } | |||
| public void setPhbj(String phbj) { | |||
| this.phbj = phbj; | |||
| } | |||
| public String getGgbj() { | |||
| return ggbj; | |||
| } | |||
| public void setGgbj(String ggbj) { | |||
| this.ggbj = ggbj; | |||
| } | |||
| public String getGgdwbj() { | |||
| return ggdwbj; | |||
| } | |||
| public void setGgdwbj(String ggdwbj) { | |||
| this.ggdwbj = ggdwbj; | |||
| } | |||
| public Date getYxqbj() { | |||
| return yxqbj; | |||
| } | |||
| public void setYxqbj(Date yxqbj) { | |||
| this.yxqbj = yxqbj; | |||
| } | |||
| public Date getJsrqbj() { | |||
| return jsrqbj; | |||
| } | |||
| public void setJsrqbj(Date jsrqbj) { | |||
| this.jsrqbj = jsrqbj; | |||
| } | |||
| public String getCctjbj() { | |||
| return cctjbj; | |||
| } | |||
| public void setCctjbj(String cctjbj) { | |||
| this.cctjbj = cctjbj; | |||
| } | |||
| public String getZysxbj() { | |||
| return zysxbj; | |||
| } | |||
| public void setZysxbj(String zysxbj) { | |||
| this.zysxbj = zysxbj; | |||
| } | |||
| public String getKcbj() { | |||
| return kcbj; | |||
| } | |||
| public void setKcbj(String kcbj) { | |||
| this.kcbj = kcbj; | |||
| } | |||
| public String getKcdwbj() { | |||
| return kcdwbj; | |||
| } | |||
| public void setKcdwbj(String kcdwbj) { | |||
| this.kcdwbj = kcdwbj; | |||
| } | |||
| public String getBjbz() { | |||
| return bjbz; | |||
| } | |||
| public void setBjbz(String bjbz) { | |||
| this.bjbz = bjbz; | |||
| } | |||
| public String getKcbjbz() { | |||
| return kcbjbz; | |||
| } | |||
| public void setKcbjbz(String kcbjbz) { | |||
| this.kcbjbz = kcbjbz; | |||
| } | |||
| public Long getBjrId() { | |||
| return bjrId; | |||
| } | |||
| public void setBjrId(Long bjrId) { | |||
| this.bjrId = bjrId; | |||
| } | |||
| public String getBjrMc() { | |||
| return bjrMc; | |||
| } | |||
| public void setBjrMc(String bjrMc) { | |||
| this.bjrMc = bjrMc; | |||
| } | |||
| public Long getKcbjrId() { | |||
| return kcbjrId; | |||
| } | |||
| public void setKcbjrId(Long kcbjrId) { | |||
| this.kcbjrId = kcbjrId; | |||
| } | |||
| public String getKcbjrMc() { | |||
| return kcbjrMc; | |||
| } | |||
| public void setKcbjrMc(String kcbjrMc) { | |||
| this.kcbjrMc = kcbjrMc; | |||
| } | |||
| public String getFfzytj() { | |||
| return ffzytj; | |||
| } | |||
| public void setFfzytj(String ffzytj) { | |||
| this.ffzytj = ffzytj; | |||
| } | |||
| public Long getLqr1Id() { | |||
| return lqr1Id; | |||
| } | |||
| public void setLqr1Id(Long lqr1Id) { | |||
| this.lqr1Id = lqr1Id; | |||
| } | |||
| public Long getLqr2Id() { | |||
| return lqr2Id; | |||
| } | |||
| public void setLqr2Id(Long lqr2Id) { | |||
| this.lqr2Id = lqr2Id; | |||
| } | |||
| public Long getFfr1Id() { | |||
| return ffr1Id; | |||
| } | |||
| public void setFfr1Id(Long ffr1Id) { | |||
| this.ffr1Id = ffr1Id; | |||
| } | |||
| public Long getFfr2Id() { | |||
| return ffr2Id; | |||
| } | |||
| public void setFfr2Id(Long ffr2Id) { | |||
| this.ffr2Id = ffr2Id; | |||
| } | |||
| public String getLqr1Mc() { | |||
| return lqr1Mc; | |||
| } | |||
| public void setLqr1Mc(String lqr1Mc) { | |||
| this.lqr1Mc = lqr1Mc; | |||
| } | |||
| public String getLqr2Mc() { | |||
| return lqr2Mc; | |||
| } | |||
| public void setLqr2Mc(String lqr2Mc) { | |||
| this.lqr2Mc = lqr2Mc; | |||
| } | |||
| public String getFfr1Mc() { | |||
| return ffr1Mc; | |||
| } | |||
| public void setFfr1Mc(String ffr1Mc) { | |||
| this.ffr1Mc = ffr1Mc; | |||
| } | |||
| public String getFfr2Mc() { | |||
| return ffr2Mc; | |||
| } | |||
| public void setFfr2Mc(String ffr2Mc) { | |||
| this.ffr2Mc = ffr2Mc; | |||
| } | |||
| public Date getFfrq() { | |||
| return ffrq; | |||
| } | |||
| public void setFfrq(Date ffrq) { | |||
| this.ffrq = ffrq; | |||
| } | |||
| public String getFfbz() { | |||
| return ffbz; | |||
| } | |||
| public void setFfbz(String ffbz) { | |||
| this.ffbz = ffbz; | |||
| } | |||
| public String getMdIds() { | |||
| return mdIds; | |||
| } | |||
| public void setMdIds(String mdIds) { | |||
| this.mdIds = mdIds; | |||
| } | |||
| public String getMdOther() { | |||
| return mdOther; | |||
| } | |||
| public void setMdOther(String mdOther) { | |||
| this.mdOther = mdOther; | |||
| } | |||
| } | |||
| @ -0,0 +1,79 @@ | |||
| package com.hxhq.domain; | |||
| import com.baomidou.mybatisplus.annotation.IdType; | |||
| import com.baomidou.mybatisplus.annotation.TableField; | |||
| import com.baomidou.mybatisplus.annotation.TableId; | |||
| import com.baomidou.mybatisplus.annotation.TableName; | |||
| import lombok.Data; | |||
| import java.time.LocalDate; | |||
| import java.time.LocalDateTime; | |||
| /** | |||
| * @author zhangjing | |||
| * @date 2026/01/30 10:39 | |||
| * @description 仪器 | |||
| */ | |||
| @Data | |||
| @TableName("instrument") | |||
| public class Instrument { | |||
| /** | |||
| *仪器库存ID(主键,雪花ID) | |||
| **/ | |||
| @TableId(value = "instrument_id", type = IdType.ASSIGN_ID) | |||
| private String instrumentId; | |||
| /** | |||
| * 名称 | |||
| **/ | |||
| @TableField(value = "name") | |||
| private String name; | |||
| /** | |||
| * 编号 | |||
| **/ | |||
| @TableField(value = "sn") | |||
| private String sn; | |||
| /** | |||
| * 型号 | |||
| **/ | |||
| @TableField(value = "model") | |||
| private String model; | |||
| /** | |||
| * 所属部门 | |||
| **/ | |||
| @TableField(value = "department") | |||
| private String department; | |||
| /** | |||
| * 下次校准日期 | |||
| **/ | |||
| @TableField(value = "calibration_date") | |||
| private LocalDateTime calibrationDate; | |||
| /** | |||
| * 来源 | |||
| **/ | |||
| @TableField(value = "source") | |||
| private String source; | |||
| /** | |||
| * 温层(存储条件) | |||
| **/ | |||
| @TableField(value = "storage_conditions") | |||
| private String storageConditions; | |||
| /** | |||
| * 备注 | |||
| **/ | |||
| @TableField(value = "remark") | |||
| private String remark; | |||
| /** | |||
| * 是否是历史数据。0否1是 | |||
| **/ | |||
| @TableField(value = "is_history") | |||
| private String isHistory; | |||
| } | |||
| @ -0,0 +1,100 @@ | |||
| package com.hxhq.domain; | |||
| import com.baomidou.mybatisplus.annotation.IdType; | |||
| import com.baomidou.mybatisplus.annotation.TableField; | |||
| import com.baomidou.mybatisplus.annotation.TableId; | |||
| import com.baomidou.mybatisplus.annotation.TableName; | |||
| import lombok.Data; | |||
| import java.time.LocalDateTime; | |||
| /** | |||
| * @author zhangjing | |||
| * @date 2026/01/30 10:39 | |||
| * @description 仪器推送 | |||
| */ | |||
| @Data | |||
| @TableName("instrument_push") | |||
| public class InstrumentPush { | |||
| /** | |||
| *仪器推送ID(主键,雪花ID) | |||
| **/ | |||
| @TableId(value = "instrument_push_id", type = IdType.ASSIGN_ID) | |||
| private String instrumentPushId; | |||
| /** | |||
| * 名称 | |||
| **/ | |||
| @TableField(value = "name") | |||
| private String name; | |||
| /** | |||
| * 编号 | |||
| **/ | |||
| @TableField(value = "sn") | |||
| private String sn; | |||
| /** | |||
| * 试验编号 | |||
| **/ | |||
| @TableField(value = "trial_number") | |||
| private String trialNumber; | |||
| /** | |||
| * 试验名称 | |||
| **/ | |||
| @TableField(value = "trial_name") | |||
| private String trialName; | |||
| /** | |||
| * 表单系统模板名 | |||
| **/ | |||
| @TableField(value = "form_template_name") | |||
| private String formTemplateName; | |||
| /** | |||
| * 表单名 | |||
| **/ | |||
| @TableField(value = "form_name") | |||
| private String formName; | |||
| /** | |||
| * 使用时间(可理解为主记录时间或开始时间) | |||
| **/ | |||
| @TableField(value = "usage_time") | |||
| private LocalDateTime usageTime; | |||
| /** | |||
| * 使用时长 | |||
| **/ | |||
| @TableField(value = "usage_duration") | |||
| private String usageDuration; | |||
| /** | |||
| * 使用时长-单位 | |||
| **/ | |||
| @TableField(value = "usage_duration_unit") | |||
| private String usageDurationUnit; | |||
| /** | |||
| * 使用人 | |||
| **/ | |||
| @TableField(value = "user_name") | |||
| private String userName; | |||
| /** | |||
| * 开始使用时间 | |||
| **/ | |||
| @TableField(value = "start_time") | |||
| private LocalDateTime startTime; | |||
| /** | |||
| * 结束使用时间 | |||
| **/ | |||
| @TableField(value = "end_time") | |||
| private LocalDateTime endTime; | |||
| } | |||
| @ -0,0 +1,137 @@ | |||
| package com.hxhq.domain; | |||
| import com.baomidou.mybatisplus.annotation.*; | |||
| import lombok.Data; | |||
| import java.math.BigDecimal; | |||
| import java.time.LocalDate; | |||
| import java.time.LocalDateTime; | |||
| /** | |||
| * @author zhangjing | |||
| * @date 2026/01/28 15:28 | |||
| * @description 试剂库存信息 | |||
| */ | |||
| @Data | |||
| @TableName("reagent_stock") | |||
| public class ReagentStock { | |||
| /** | |||
| *试剂库存ID(主键,雪花ID) | |||
| **/ | |||
| @TableId(value = "reagent_stock_id", type = IdType.ASSIGN_ID) | |||
| private String reagentStockId; | |||
| /** | |||
| *名称 | |||
| **/ | |||
| private String name; | |||
| /** | |||
| *编号(唯一标识,如批次+序列) | |||
| **/ | |||
| @TableField(value = "sn") | |||
| private String sn; | |||
| /** | |||
| *浓度/含量/纯度(数值) | |||
| **/ | |||
| @TableField(value = "purity") | |||
| private BigDecimal purity; | |||
| /** | |||
| *浓度/含量/纯度单位(如 mg/mL、%、mol/L) | |||
| **/ | |||
| private String purityUnit; | |||
| /** | |||
| *库存数量(支持小数) | |||
| **/ | |||
| private BigDecimal stockCount; | |||
| /** | |||
| *库存单位(如 mg、mL、g) | |||
| **/ | |||
| private String stockUnit; | |||
| /** | |||
| *规格(如 100mL/瓶) | |||
| **/ | |||
| private String specs; | |||
| /** | |||
| *来源(供应商或制备方式) | |||
| **/ | |||
| private String source; | |||
| /** | |||
| *所属部门 | |||
| **/ | |||
| private String department; | |||
| /** | |||
| *批号 | |||
| **/ | |||
| private String batchNumber; | |||
| /** | |||
| *有效周期(数值,如 30) | |||
| **/ | |||
| private String validityPeriod; | |||
| /** | |||
| *有效周期单位(hour/day/month/year) | |||
| **/ | |||
| private String validityPeriodUnit; | |||
| /** | |||
| *失效日期(精确到秒) | |||
| **/ | |||
| private LocalDateTime expiryDate; | |||
| /** | |||
| *存储位置(如 A-01-冰箱) | |||
| **/ | |||
| private String storageLocation; | |||
| /** | |||
| *存储条件(如 -20℃避光) | |||
| **/ | |||
| private String storageConditions; | |||
| /** | |||
| *配置日期(仅日期) | |||
| **/ | |||
| private LocalDateTime configurationDate; | |||
| /** | |||
| *创建时间 | |||
| **/ | |||
| @TableField(fill = FieldFill.INSERT) | |||
| private LocalDateTime createTime; | |||
| /** | |||
| *修改时间 | |||
| **/ | |||
| @TableField(fill = FieldFill.INSERT_UPDATE) | |||
| private LocalDateTime updateTime; | |||
| /** | |||
| *创建者(用户ID) | |||
| **/ | |||
| @TableField(fill = FieldFill.INSERT) | |||
| private String createBy; | |||
| /** | |||
| *修改者 | |||
| **/ | |||
| @TableField(fill = FieldFill.INSERT_UPDATE) | |||
| private String updateBy; | |||
| /** | |||
| *逻辑删除标记(0-未删除,1-已删除) | |||
| **/ | |||
| private Integer isDeleted; | |||
| } | |||
| @ -0,0 +1,158 @@ | |||
| package com.hxhq.domain; | |||
| import com.baomidou.mybatisplus.annotation.*; | |||
| import lombok.Data; | |||
| import java.math.BigDecimal; | |||
| import java.time.LocalDateTime; | |||
| /** | |||
| * @author zhangjing | |||
| * @date 2026/01/28 15:28 | |||
| * @description 试剂库存推送信息 | |||
| */ | |||
| @Data | |||
| @TableName("reagent_stock_push") | |||
| public class ReagentStockPush { | |||
| /** | |||
| * 试剂库存推送ID(主键,雪花ID) | |||
| **/ | |||
| @TableId(value = "reagent_stock_push_id", type = IdType.ASSIGN_ID) | |||
| private String reagentStockPushId; | |||
| /** | |||
| * 名称 | |||
| **/ | |||
| private String name; | |||
| /** | |||
| * 编号(唯一标识,如批次+序列) | |||
| **/ | |||
| @TableField(value = "sn") | |||
| private String sn; | |||
| /** | |||
| * 浓度/含量/纯度(数值) | |||
| **/ | |||
| @TableField(value = "purity") | |||
| private BigDecimal purity; | |||
| /** | |||
| * 浓度/含量/纯度单位(如 mg/mL、%、mol/L) | |||
| **/ | |||
| private String purityUnit; | |||
| /** | |||
| * 库存数量(支持小数) | |||
| **/ | |||
| private BigDecimal stockCount; | |||
| /** | |||
| * 库存单位(如 mg、mL、g) | |||
| **/ | |||
| private String stockUnit; | |||
| /** | |||
| * 规格(如 100mL/瓶) | |||
| **/ | |||
| private String specs; | |||
| /** | |||
| * 来源(供应商或制备方式) | |||
| **/ | |||
| private String source; | |||
| /** | |||
| * 所属部门 | |||
| **/ | |||
| private String department; | |||
| /** | |||
| * 批号 | |||
| **/ | |||
| private String batchNumber; | |||
| /** | |||
| * 有效周期(数值,如 30) | |||
| **/ | |||
| private String validityPeriod; | |||
| /** | |||
| * 有效周期单位(hour/day/month/year) | |||
| **/ | |||
| private String validityPeriodUnit; | |||
| /** | |||
| * 失效日期(精确到秒) | |||
| **/ | |||
| private LocalDateTime expiryDate; | |||
| /** | |||
| * 存储位置(如 A-01-冰箱) | |||
| **/ | |||
| private String storageLocation; | |||
| /** | |||
| * 存储条件(如 -20℃避光) | |||
| **/ | |||
| private String storageConditions; | |||
| /** | |||
| * 配置日期(仅日期) | |||
| **/ | |||
| private LocalDateTime configurationDate; | |||
| /** | |||
| * 创建时间 | |||
| **/ | |||
| @TableField(fill = FieldFill.INSERT) | |||
| private LocalDateTime createTime; | |||
| /** | |||
| * 修改时间 | |||
| **/ | |||
| @TableField(fill = FieldFill.INSERT_UPDATE) | |||
| private LocalDateTime updateTime; | |||
| /** | |||
| * 创建者(用户ID) | |||
| **/ | |||
| @TableField(fill = FieldFill.INSERT) | |||
| private String createBy; | |||
| /** | |||
| * 修改者 | |||
| **/ | |||
| @TableField(fill = FieldFill.INSERT_UPDATE) | |||
| private String updateBy; | |||
| /** | |||
| * 逻辑删除标记(0-未删除,1-已删除) | |||
| **/ | |||
| private Integer isDeleted; | |||
| /** | |||
| * 试验编号 | |||
| **/ | |||
| @TableField(value = "trial_number") | |||
| private String trialNumber; | |||
| /** | |||
| * 试验名称 | |||
| **/ | |||
| @TableField(value = "trial_name") | |||
| private String trialName; | |||
| /** | |||
| * 表单系统模板名 | |||
| **/ | |||
| @TableField(value = "form_template_name") | |||
| private String formTemplateName; | |||
| /** | |||
| * 表单名 | |||
| **/ | |||
| @TableField(value = "form_name") | |||
| private String formName; | |||
| } | |||
| @ -0,0 +1,349 @@ | |||
| package com.hxhq.domain; | |||
| import com.baomidou.mybatisplus.annotation.TableName; | |||
| import com.fasterxml.jackson.annotation.JsonFormat; | |||
| import com.hxhq.common.core.annotation.Compare; | |||
| import com.hxhq.common.core.domain.MpBaseEntity; | |||
| import java.util.Date; | |||
| /** | |||
| * 试剂库存对象 t_sjkc | |||
| * | |||
| * @author HanLong | |||
| * @date 2025-12-22 | |||
| */ | |||
| @TableName("t_sj") | |||
| public class Sj extends MpBaseEntity | |||
| { | |||
| private static final long serialVersionUID = 1L; | |||
| /** 试验id */ | |||
| private Long studyId; | |||
| /** 试验表单id */ | |||
| private Long studyFormId; | |||
| /** 所属部门/学科 */ | |||
| private Long deptId; | |||
| /** 制剂状态 1:入库 5:已锁定 7:待归档 9:归档 11:待解档 */ | |||
| private Integer zjzt; | |||
| /** 借阅状态 1:未借阅 3:待借阅 5:借阅中 */ | |||
| private Integer jyzt; | |||
| /** 所属部门 */ | |||
| private String ssbm; | |||
| /** 名称 */ | |||
| @Compare(name = "名称") | |||
| private String mc; | |||
| /** 编号 */ | |||
| private String bh; | |||
| /** 批号 */ | |||
| private String ph; | |||
| /** 规格 */ | |||
| private String gg; | |||
| /** 浓度/含量/纯度 */ | |||
| @Compare(name = "浓度/含量/纯度", nameEn = "Concentration/Purity") | |||
| private String nd; | |||
| /** 浓度单位 */ | |||
| @Compare(name = "浓度/含量/纯度单位", nameEn = "Concentration/Purity Unit") | |||
| private String nddw; | |||
| /** 库存数量 */ | |||
| @Compare(name = "库存数量", nameEn = "Inventory") | |||
| private String kc; | |||
| /** 库存单位 */ | |||
| @Compare(name = "库存单位", nameEn = "Inventory Unit") | |||
| private String kcdw; | |||
| /** 来源 */ | |||
| private String ly; | |||
| /** 存储条件 */ | |||
| @Compare(name = "存储条件", nameEn = "Storage Condition") | |||
| private String cctj; | |||
| /** 存储位置 */ | |||
| @Compare(name = "存储位置", nameEn = "Storage Location") | |||
| private String ccwz; | |||
| /** 有效周期 */ | |||
| private String yxzq; | |||
| /** 有效周期单位 */ | |||
| private String yxzqdw; | |||
| /** 失效日 */ | |||
| @Compare(name = "失效日", nameEn = "Expiration") | |||
| @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") | |||
| private Date sxr; | |||
| /** 配置日期 */ | |||
| @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") | |||
| private Date pzrq; | |||
| /** 借阅开始日期 */ | |||
| @JsonFormat(pattern = "yyyy-MM-dd") | |||
| private Date jyksrq; | |||
| /** 借阅结束日期 */ | |||
| @JsonFormat(pattern = "yyyy-MM-dd") | |||
| private Date jyjsrq; | |||
| /** 归档申请时间 */ | |||
| @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") | |||
| private Date gdsqsj; | |||
| /** 档案申请人id */ | |||
| private Long gdsqrId; | |||
| /** 母液编号 */ | |||
| private String parentBh; | |||
| public String getParentBh() { | |||
| return parentBh; | |||
| } | |||
| public void setParentBh(String parentBh) { | |||
| this.parentBh = parentBh; | |||
| } | |||
| public Date getGdsqsj() { | |||
| return gdsqsj; | |||
| } | |||
| public void setGdsqsj(Date gdsqsj) { | |||
| this.gdsqsj = gdsqsj; | |||
| } | |||
| public Long getStudyId() { | |||
| return studyId; | |||
| } | |||
| public void setStudyId(Long studyId) { | |||
| this.studyId = studyId; | |||
| } | |||
| public Long getStudyFormId() { | |||
| return studyFormId; | |||
| } | |||
| public void setStudyFormId(Long studyFormId) { | |||
| this.studyFormId = studyFormId; | |||
| } | |||
| public void setZjzt(Integer zjzt) | |||
| { | |||
| this.zjzt = zjzt; | |||
| } | |||
| public Integer getZjzt() | |||
| { | |||
| return zjzt; | |||
| } | |||
| public void setJyzt(Integer jyzt) | |||
| { | |||
| this.jyzt = jyzt; | |||
| } | |||
| public Integer getJyzt() | |||
| { | |||
| return jyzt; | |||
| } | |||
| public void setMc(String mc) | |||
| { | |||
| this.mc = mc; | |||
| } | |||
| public String getMc() | |||
| { | |||
| return mc; | |||
| } | |||
| public void setBh(String bh) | |||
| { | |||
| this.bh = bh; | |||
| } | |||
| public String getBh() | |||
| { | |||
| return bh; | |||
| } | |||
| public void setPh(String ph) | |||
| { | |||
| this.ph = ph; | |||
| } | |||
| public String getPh() | |||
| { | |||
| return ph; | |||
| } | |||
| public void setGg(String gg) | |||
| { | |||
| this.gg = gg; | |||
| } | |||
| public String getGg() | |||
| { | |||
| return gg; | |||
| } | |||
| public void setNd(String nd) | |||
| { | |||
| this.nd = nd; | |||
| } | |||
| public String getNd() | |||
| { | |||
| return nd; | |||
| } | |||
| public void setKc(String kc) | |||
| { | |||
| this.kc = kc; | |||
| } | |||
| public String getKc() | |||
| { | |||
| return kc; | |||
| } | |||
| public void setKcdw(String kcdw) | |||
| { | |||
| this.kcdw = kcdw; | |||
| } | |||
| public String getKcdw() | |||
| { | |||
| return kcdw; | |||
| } | |||
| public void setLy(String ly) | |||
| { | |||
| this.ly = ly; | |||
| } | |||
| public String getLy() | |||
| { | |||
| return ly; | |||
| } | |||
| public void setCctj(String cctj) | |||
| { | |||
| this.cctj = cctj; | |||
| } | |||
| public String getCctj() | |||
| { | |||
| return cctj; | |||
| } | |||
| public void setCcwz(String ccwz) | |||
| { | |||
| this.ccwz = ccwz; | |||
| } | |||
| public String getCcwz() | |||
| { | |||
| return ccwz; | |||
| } | |||
| public void setSxr(Date sxr) | |||
| { | |||
| this.sxr = sxr; | |||
| } | |||
| public Date getSxr() | |||
| { | |||
| return sxr; | |||
| } | |||
| public void setPzrq(Date pzrq) | |||
| { | |||
| this.pzrq = pzrq; | |||
| } | |||
| public Date getPzrq() | |||
| { | |||
| return pzrq; | |||
| } | |||
| public String getNddw() { | |||
| return nddw; | |||
| } | |||
| public void setNddw(String nddw) { | |||
| this.nddw = nddw; | |||
| } | |||
| public void setYxzq(String yxzq) { | |||
| this.yxzq = yxzq; | |||
| } | |||
| public String getYxzqdw() { | |||
| return yxzqdw; | |||
| } | |||
| public void setYxzqdw(String yxzqdw) { | |||
| this.yxzqdw = yxzqdw; | |||
| } | |||
| public String getSsbm() { | |||
| return ssbm; | |||
| } | |||
| public void setSsbm(String ssbm) { | |||
| this.ssbm = ssbm; | |||
| } | |||
| public String getYxzq() { | |||
| return yxzq; | |||
| } | |||
| public Date getJyksrq() { | |||
| return jyksrq; | |||
| } | |||
| public void setJyksrq(Date jyksrq) { | |||
| this.jyksrq = jyksrq; | |||
| } | |||
| public Date getJyjsrq() { | |||
| return jyjsrq; | |||
| } | |||
| public void setJyjsrq(Date jyjsrq) { | |||
| this.jyjsrq = jyjsrq; | |||
| } | |||
| public Long getDeptId() { | |||
| return deptId; | |||
| } | |||
| public void setDeptId(Long deptId) { | |||
| this.deptId = deptId; | |||
| } | |||
| public Long getGdsqrId() { | |||
| return gdsqrId; | |||
| } | |||
| public void setGdsqrId(Long gdsqrId) { | |||
| this.gdsqrId = gdsqrId; | |||
| } | |||
| } | |||
| @ -0,0 +1,77 @@ | |||
| package com.hxhq.domain; | |||
| import com.baomidou.mybatisplus.annotation.IdType; | |||
| import com.baomidou.mybatisplus.annotation.TableField; | |||
| import com.baomidou.mybatisplus.annotation.TableId; | |||
| import com.hxhq.common.core.annotation.Excel; | |||
| import lombok.Data; | |||
| import java.time.LocalDateTime; | |||
| /** | |||
| * @author zhangjing | |||
| * @date 2026/01/29 16:24 | |||
| * @description 数据同步日志 | |||
| */ | |||
| @Data | |||
| public class SyncLog { | |||
| /** | |||
| * 主键 ID | |||
| **/ | |||
| @TableId(value = "id", type = IdType.AUTO) | |||
| private Long id; | |||
| /** | |||
| * 源系统主键 | |||
| **/ | |||
| @TableField(value = "source_record_id") | |||
| private String sourceRecordId; | |||
| /** | |||
| * 源数据类型:reagent(试剂) | |||
| **/ | |||
| @TableField(value = "source_type") | |||
| private String sourceType; | |||
| /** | |||
| * 目标系统名称 | |||
| **/ | |||
| @TableField(value = "target_system") | |||
| private String targetSystem; | |||
| /** | |||
| * 同步状态(pending / success / failed) | |||
| **/ | |||
| @TableField(value = "sync_status") | |||
| private String syncStatus; | |||
| /** | |||
| * 上次同步时间 | |||
| **/ | |||
| @TableField(value = "last_sync_time") | |||
| private LocalDateTime lastSyncTime; | |||
| /** | |||
| * 同步错误信息 | |||
| **/ | |||
| @TableField(value = "sync_error_message") | |||
| private String syncErrorMessage; | |||
| /** | |||
| * 重试次数 | |||
| **/ | |||
| @TableField(value = "retry_count") | |||
| private Integer retryCount; | |||
| /** | |||
| * 创建时间 | |||
| **/ | |||
| @TableField(value = "created_at") | |||
| private LocalDateTime createdAt; | |||
| /** | |||
| * 更新时间 | |||
| **/ | |||
| @TableField(value = "updated_at") | |||
| private LocalDateTime updatedAt; | |||
| } | |||
| @ -0,0 +1,148 @@ | |||
| package com.hxhq.domain; | |||
| import com.baomidou.mybatisplus.annotation.TableField; | |||
| import com.baomidou.mybatisplus.annotation.TableName; | |||
| import com.fasterxml.jackson.annotation.JsonFormat; | |||
| import com.hxhq.common.core.annotation.Compare; | |||
| import com.hxhq.common.core.domain.MpBaseEntity; | |||
| import org.hibernate.validator.constraints.Length; | |||
| import javax.validation.constraints.NotEmpty; | |||
| import javax.validation.constraints.NotNull; | |||
| import java.util.Date; | |||
| /** | |||
| * 仪器管理对象 t_yq | |||
| * | |||
| * @author HanLong | |||
| * @date 2025-12-20 | |||
| */ | |||
| @TableName("t_yq") | |||
| public class Yq extends MpBaseEntity { | |||
| private static final long serialVersionUID = 1L; | |||
| /** | |||
| * 名称 | |||
| */ | |||
| @NotEmpty(message = "请输入仪器名称") | |||
| @Length(max = 50, message = "仪器名称不能超过50字") | |||
| @Compare(name = "仪器名称", nameEn = "Name") | |||
| private String mc; | |||
| /** | |||
| * 编号 | |||
| */ | |||
| @NotEmpty(message = "请输入仪器编号") | |||
| @Length(max = 50, message = "仪器编号不能超过50字") | |||
| @Compare(name = "仪器编号", nameEn = "ID") | |||
| private String bh; | |||
| /** | |||
| * 型号 | |||
| */ | |||
| @NotEmpty(message = "请输入仪器型号") | |||
| @Length(max = 50, message = "仪器型号不能超过50字") | |||
| @Compare(name = "仪器型号", nameEn = "Type") | |||
| private String xh; | |||
| /** | |||
| * 来源 | |||
| */ | |||
| @NotEmpty(message = "请输入仪器来源") | |||
| @Length(max = 50, message = "仪器来源不能超过50字") | |||
| @Compare(name = "仪器来源", nameEn = "Source") | |||
| private String ly; | |||
| /** | |||
| * 校准日期 | |||
| */ | |||
| @JsonFormat(pattern = "yyyy-MM-dd") | |||
| @NotNull(message = "请选择校准日期") | |||
| @Compare(name = "下次校准日期", nameEn = "Next Calibration") | |||
| private Date jzrq; | |||
| /** | |||
| * 部门id | |||
| */ | |||
| @NotNull(message = "请选择所属部门") | |||
| private Long bmId; | |||
| /** 部门名称 */ | |||
| @Compare(name = "所属部门") | |||
| @TableField(exist = false) | |||
| private String bmMc; | |||
| /** | |||
| * 温层 | |||
| */ | |||
| @NotNull(message = "请选择所温层") | |||
| @Compare(name = "温层") | |||
| private String wc; | |||
| public void setMc(String mc) { | |||
| this.mc = mc; | |||
| } | |||
| public String getMc() { | |||
| return mc; | |||
| } | |||
| public void setBh(String bh) { | |||
| this.bh = bh; | |||
| } | |||
| public String getBh() { | |||
| return bh; | |||
| } | |||
| public void setXh(String xh) { | |||
| this.xh = xh; | |||
| } | |||
| public String getXh() { | |||
| return xh; | |||
| } | |||
| public void setLy(String ly) { | |||
| this.ly = ly; | |||
| } | |||
| public String getLy() { | |||
| return ly; | |||
| } | |||
| public void setJzrq(Date jzrq) { | |||
| this.jzrq = jzrq; | |||
| } | |||
| public Date getJzrq() { | |||
| return jzrq; | |||
| } | |||
| public void setBmId(Long bmId) { | |||
| this.bmId = bmId; | |||
| } | |||
| public Long getBmId() { | |||
| return bmId; | |||
| } | |||
| public void setWc(String wc) { | |||
| this.wc = wc; | |||
| } | |||
| public String getWc() { | |||
| return wc; | |||
| } | |||
| public String getBmMc() { | |||
| return bmMc; | |||
| } | |||
| public void setBmMc(String bmMc) { | |||
| this.bmMc = bmMc; | |||
| } | |||
| } | |||
| @ -0,0 +1,18 @@ | |||
| package com.hxhq.domain.vo; | |||
| import com.baomidou.mybatisplus.annotation.TableName; | |||
| import com.hxhq.common.core.utils.StringUtils; | |||
| /** | |||
| * | |||
| * | |||
| * @author hxhq | |||
| */ | |||
| public class TestVO | |||
| { | |||
| private String code; | |||
| } | |||
| @ -0,0 +1,114 @@ | |||
| package com.hxhq.dto; | |||
| import com.baomidou.mybatisplus.annotation.IdType; | |||
| import com.baomidou.mybatisplus.annotation.TableField; | |||
| import com.baomidou.mybatisplus.annotation.TableId; | |||
| import com.baomidou.mybatisplus.annotation.TableName; | |||
| import lombok.Data; | |||
| import java.math.BigDecimal; | |||
| import java.time.LocalDateTime; | |||
| /** | |||
| * @author zhangjing | |||
| * @date 2026/01/30 14:15 | |||
| * @description 供试品 | |||
| */ | |||
| @Data | |||
| public class ContainerDTO { | |||
| /** | |||
| * 主键 ID(自增) | |||
| **/ | |||
| @TableId(value = "id",type = IdType.AUTO) | |||
| private Integer id; | |||
| /** | |||
| * 容器ID | |||
| **/ | |||
| @TableField(value = "CONTAINER_ID") | |||
| private Integer containerId; | |||
| /** | |||
| * 物质编码 | |||
| **/ | |||
| @TableField(value = "SUBSTANCE_CODE") | |||
| private String substanceCode; | |||
| /** | |||
| * 物质名称 | |||
| **/ | |||
| @TableField(value = "SUBSTANCE_NAME") | |||
| private String substanceName; | |||
| /** | |||
| * 备注 | |||
| **/ | |||
| @TableField(value = "COMMENTS") | |||
| private String comments; | |||
| /** | |||
| * 当前净含量 | |||
| **/ | |||
| @TableField(value = "CURRENT_NET_AMOUNT") | |||
| private BigDecimal currentNetAmount; | |||
| /** | |||
| * 当前净含量单位 | |||
| **/ | |||
| @TableField(value = "CURRENT_NET_AMOUNT_UNIT") | |||
| private String currentNetAmountUnit; | |||
| /** | |||
| * 批号 | |||
| **/ | |||
| @TableField(value = "LOT_NUMBER") | |||
| private String lotNumber; | |||
| /** | |||
| * 失效日期 | |||
| **/ | |||
| @TableField(value = "EXPIRATION_DATE") | |||
| private LocalDateTime expirationDate; | |||
| /** | |||
| * 容器用途 | |||
| **/ | |||
| @TableField(value = "CONTAINER_USE") | |||
| private String containerUse; | |||
| /** | |||
| * 药房接收时间 | |||
| **/ | |||
| @TableField(value = "DATE_TIME_PHARMACY_RECV") | |||
| private LocalDateTime dateTimePharmacyRecv; | |||
| /** | |||
| * 交易日期(默认当前时间) | |||
| **/ | |||
| @TableField(value = "TRANS_DATE") | |||
| private LocalDateTime transDate; | |||
| /** | |||
| * 存储位置 | |||
| **/ | |||
| @TableField(value = "STORAGE_LOCATION") | |||
| private String storageLocation; | |||
| /** | |||
| * 录入人 | |||
| **/ | |||
| @TableField(value = "ENTERED_BY") | |||
| private String enteredBy; | |||
| /** | |||
| * 研究编号 | |||
| **/ | |||
| @TableField(value = "STUDY_NUMBER") | |||
| private String studyNumber; | |||
| /** | |||
| * 录入时间 | |||
| **/ | |||
| @TableField(value = "DATE_TIME_ENTERED") | |||
| private LocalDateTime dateTimeEntered; | |||
| } | |||
| @ -0,0 +1,95 @@ | |||
| package com.hxhq.dto; | |||
| import com.baomidou.mybatisplus.annotation.IdType; | |||
| import com.baomidou.mybatisplus.annotation.TableField; | |||
| import com.baomidou.mybatisplus.annotation.TableId; | |||
| import com.baomidou.mybatisplus.annotation.TableName; | |||
| import lombok.Data; | |||
| import java.time.LocalDateTime; | |||
| /** | |||
| * @author zhangjing | |||
| * @date 2026/01/30 10:39 | |||
| * @description 仪器推送 | |||
| */ | |||
| @Data | |||
| public class InstrumentPushDTO { | |||
| /** | |||
| * 名称 | |||
| **/ | |||
| @TableField(value = "name") | |||
| private String name; | |||
| /** | |||
| * 编号 | |||
| **/ | |||
| @TableField(value = "sn") | |||
| private String sn; | |||
| /** | |||
| * 试验编号 | |||
| **/ | |||
| @TableField(value = "trial_number") | |||
| private String trialNumber; | |||
| /** | |||
| * 试验名称 | |||
| **/ | |||
| @TableField(value = "trial_name") | |||
| private String trialName; | |||
| /** | |||
| * 表单系统模板名 | |||
| **/ | |||
| @TableField(value = "form_template_name") | |||
| private String formTemplateName; | |||
| /** | |||
| * 表单名 | |||
| **/ | |||
| @TableField(value = "form_name") | |||
| private String formName; | |||
| /** | |||
| * 使用时间(可理解为主记录时间或开始时间) | |||
| **/ | |||
| @TableField(value = "usage_time") | |||
| private LocalDateTime usageTime; | |||
| /** | |||
| * 使用时长 | |||
| **/ | |||
| @TableField(value = "usage_duration") | |||
| private String usageDuration; | |||
| /** | |||
| * 使用时长-单位 | |||
| **/ | |||
| @TableField(value = "usage_duration_unit") | |||
| private String usageDurationUnit; | |||
| /** | |||
| * 使用人 | |||
| **/ | |||
| @TableField(value = "user_name") | |||
| private String userName; | |||
| /** | |||
| * 开始使用时间 | |||
| **/ | |||
| @TableField(value = "start_time") | |||
| private LocalDateTime startTime; | |||
| /** | |||
| * 结束使用时间 | |||
| **/ | |||
| @TableField(value = "end_time") | |||
| private LocalDateTime endTime; | |||
| } | |||
| @ -0,0 +1,129 @@ | |||
| package com.hxhq.dto; | |||
| import com.baomidou.mybatisplus.annotation.*; | |||
| import lombok.Data; | |||
| import java.math.BigDecimal; | |||
| import java.time.LocalDateTime; | |||
| /** | |||
| * @author zhangjing | |||
| * @date 2026/01/28 15:28 | |||
| * @description 试剂库存推送信息 | |||
| */ | |||
| @Data | |||
| public class ReagentStockPushDTO { | |||
| /** | |||
| * 试剂库存推送ID(主键,雪花ID) | |||
| **/ | |||
| @TableId(value = "reagent_stock_push_id", type = IdType.ASSIGN_ID) | |||
| private String reagentStockPushId; | |||
| /** | |||
| * 名称 | |||
| **/ | |||
| private String name; | |||
| /** | |||
| * 编号(唯一标识,如批次+序列) | |||
| **/ | |||
| @TableField(value = "sn") | |||
| private String sn; | |||
| /** | |||
| * 浓度/含量/纯度(数值) | |||
| **/ | |||
| @TableField(value = "purity") | |||
| private BigDecimal purity; | |||
| /** | |||
| * 浓度/含量/纯度单位(如 mg/mL、%、mol/L) | |||
| **/ | |||
| private String purityUnit; | |||
| /** | |||
| * 库存数量(支持小数) | |||
| **/ | |||
| private BigDecimal stockCount; | |||
| /** | |||
| * 库存单位(如 mg、mL、g) | |||
| **/ | |||
| private String stockUnit; | |||
| /** | |||
| * 规格(如 100mL/瓶) | |||
| **/ | |||
| private String specs; | |||
| /** | |||
| * 来源(供应商或制备方式) | |||
| **/ | |||
| private String source; | |||
| /** | |||
| * 所属部门 | |||
| **/ | |||
| private String department; | |||
| /** | |||
| * 批号 | |||
| **/ | |||
| private String batchNumber; | |||
| /** | |||
| * 有效周期(数值,如 30) | |||
| **/ | |||
| private String validityPeriod; | |||
| /** | |||
| * 有效周期单位(hour/day/month/year) | |||
| **/ | |||
| private String validityPeriodUnit; | |||
| /** | |||
| * 失效日期(精确到秒) | |||
| **/ | |||
| private LocalDateTime expiryDate; | |||
| /** | |||
| * 存储位置(如 A-01-冰箱) | |||
| **/ | |||
| private String storageLocation; | |||
| /** | |||
| * 存储条件(如 -20℃避光) | |||
| **/ | |||
| private String storageConditions; | |||
| /** | |||
| * 配置日期(仅日期) | |||
| **/ | |||
| private LocalDateTime configurationDate; | |||
| /** | |||
| * 试验编号 | |||
| **/ | |||
| @TableField(value = "trial_number") | |||
| private String trialNumber; | |||
| /** | |||
| * 试验名称 | |||
| **/ | |||
| @TableField(value = "trial_name") | |||
| private String trialName; | |||
| /** | |||
| * 表单系统模板名 | |||
| **/ | |||
| @TableField(value = "form_template_name") | |||
| private String formTemplateName; | |||
| /** | |||
| * 表单名 | |||
| **/ | |||
| @TableField(value = "form_name") | |||
| private String formName; | |||
| } | |||
| @ -0,0 +1,19 @@ | |||
| package com.hxhq.mapper; | |||
| import com.baomidou.mybatisplus.core.mapper.BaseMapper; | |||
| import com.hxhq.domain.Container; | |||
| import java.util.List; | |||
| /** | |||
| * 参数配置 数据层 | |||
| * | |||
| * @author hxhq | |||
| */ | |||
| public interface ContainerMapper extends BaseMapper<Container> | |||
| { | |||
| List<Container> notSync(); | |||
| } | |||
| @ -0,0 +1,21 @@ | |||
| package com.hxhq.mapper; | |||
| import com.baomidou.dynamic.datasource.annotation.DS; | |||
| import com.baomidou.mybatisplus.core.mapper.BaseMapper; | |||
| import com.hxhq.domain.Gsp; | |||
| import com.hxhq.domain.Sj; | |||
| import org.apache.ibatis.annotations.Mapper; | |||
| /** | |||
| * 参数配置 数据层 | |||
| * | |||
| * @author hxhq | |||
| */ | |||
| @DS("hxhq") | |||
| @Mapper | |||
| public interface GspMapper extends BaseMapper<Gsp> | |||
| { | |||
| } | |||
| @ -0,0 +1,20 @@ | |||
| package com.hxhq.mapper; | |||
| import com.baomidou.mybatisplus.core.mapper.BaseMapper; | |||
| import com.hxhq.domain.Instrument; | |||
| import com.hxhq.domain.ReagentStock; | |||
| import java.util.List; | |||
| /** | |||
| * 参数配置 数据层 | |||
| * | |||
| * @author hxhq | |||
| */ | |||
| public interface InstrumentMapper extends BaseMapper<Instrument> | |||
| { | |||
| List<Instrument> notSync(); | |||
| } | |||
| @ -0,0 +1,18 @@ | |||
| package com.hxhq.mapper; | |||
| import com.baomidou.mybatisplus.core.mapper.BaseMapper; | |||
| import com.hxhq.domain.InstrumentPush; | |||
| import org.apache.ibatis.annotations.Mapper; | |||
| /** | |||
| * 参数配置 数据层 | |||
| * | |||
| * @author hxhq | |||
| */ | |||
| @Mapper | |||
| public interface InstrumentPushMapper extends BaseMapper<InstrumentPush> | |||
| { | |||
| } | |||
| @ -0,0 +1,18 @@ | |||
| package com.hxhq.mapper; | |||
| import com.baomidou.mybatisplus.core.mapper.BaseMapper; | |||
| import com.hxhq.domain.ReagentStock; | |||
| import java.util.List; | |||
| /** | |||
| * 参数配置 数据层 | |||
| * | |||
| * @author hxhq | |||
| */ | |||
| public interface ReagentStockMapper extends BaseMapper<ReagentStock> | |||
| { | |||
| List<ReagentStock> notSync(); | |||
| } | |||
| @ -0,0 +1,19 @@ | |||
| package com.hxhq.mapper; | |||
| import com.baomidou.dynamic.datasource.annotation.DS; | |||
| import com.baomidou.mybatisplus.core.mapper.BaseMapper; | |||
| import com.hxhq.domain.ReagentStockPush; | |||
| import org.apache.ibatis.annotations.Mapper; | |||
| /** | |||
| * 参数配置 数据层 | |||
| * | |||
| * @author hxhq | |||
| */ | |||
| @Mapper | |||
| public interface ReagentStockPushMapper extends BaseMapper<ReagentStockPush> | |||
| { | |||
| } | |||
| @ -0,0 +1,23 @@ | |||
| package com.hxhq.mapper; | |||
| import com.baomidou.dynamic.datasource.annotation.DS; | |||
| import com.baomidou.mybatisplus.core.mapper.BaseMapper; | |||
| import com.hxhq.domain.ReagentStock; | |||
| import com.hxhq.domain.Sj; | |||
| import org.apache.ibatis.annotations.Mapper; | |||
| import java.util.List; | |||
| /** | |||
| * 参数配置 数据层 | |||
| * | |||
| * @author hxhq | |||
| */ | |||
| @DS("hxhq") | |||
| @Mapper | |||
| public interface SjMapper extends BaseMapper<Sj> | |||
| { | |||
| } | |||
| @ -0,0 +1,18 @@ | |||
| package com.hxhq.mapper; | |||
| import com.baomidou.mybatisplus.core.mapper.BaseMapper; | |||
| import com.hxhq.domain.SyncLog; | |||
| import java.util.List; | |||
| /** | |||
| * 参数配置 数据层 | |||
| * | |||
| * @author hxhq | |||
| */ | |||
| public interface SyncLogMapper extends BaseMapper<SyncLog> | |||
| { | |||
| } | |||
| @ -0,0 +1,21 @@ | |||
| package com.hxhq.mapper; | |||
| import com.baomidou.dynamic.datasource.annotation.DS; | |||
| import com.baomidou.mybatisplus.core.mapper.BaseMapper; | |||
| import com.hxhq.domain.Sj; | |||
| import com.hxhq.domain.Yq; | |||
| import org.apache.ibatis.annotations.Mapper; | |||
| /** | |||
| * 参数配置 数据层 | |||
| * | |||
| * @author hxhq | |||
| */ | |||
| @DS("hxhq") | |||
| @Mapper | |||
| public interface YqMapper extends BaseMapper<Yq> | |||
| { | |||
| } | |||
| @ -0,0 +1,15 @@ | |||
| package com.hxhq.service; | |||
| import com.hxhq.dto.ContainerDTO; | |||
| /** | |||
| * @author zhangjing | |||
| * @date 2026/01/28 15:50 | |||
| * @description | |||
| */ | |||
| public interface ContainerService { | |||
| void dataPush(ContainerDTO dto); | |||
| void dataSync(); | |||
| } | |||
| @ -0,0 +1,15 @@ | |||
| package com.hxhq.service; | |||
| import com.hxhq.domain.Gsp; | |||
| import com.hxhq.domain.Sj; | |||
| import java.util.List; | |||
| /** | |||
| * @author zhangjing | |||
| * @date 2026/01/28 15:50 | |||
| * @description | |||
| */ | |||
| public interface GspService { | |||
| void saveList(List<Gsp> sjList); | |||
| } | |||
| @ -0,0 +1,10 @@ | |||
| package com.hxhq.service; | |||
| /** | |||
| * @author zhangjing | |||
| * @date 2026/01/28 15:50 | |||
| * @description | |||
| */ | |||
| public interface InstrumentPushService { | |||
| } | |||
| @ -0,0 +1,15 @@ | |||
| package com.hxhq.service; | |||
| import com.hxhq.dto.InstrumentPushDTO; | |||
| /** | |||
| * @author zhangjing | |||
| * @date 2026/01/28 15:50 | |||
| * @description | |||
| */ | |||
| public interface InstrumentService { | |||
| void dataPush(InstrumentPushDTO dto); | |||
| void dataSync(); | |||
| } | |||
| @ -0,0 +1,10 @@ | |||
| package com.hxhq.service; | |||
| /** | |||
| * @author zhangjing | |||
| * @date 2026/01/28 15:50 | |||
| * @description | |||
| */ | |||
| public interface ReagentStockPushService { | |||
| } | |||
| @ -0,0 +1,15 @@ | |||
| package com.hxhq.service; | |||
| import com.hxhq.dto.ReagentStockPushDTO; | |||
| /** | |||
| * @author zhangjing | |||
| * @date 2026/01/28 15:50 | |||
| * @description | |||
| */ | |||
| public interface ReagentStockService { | |||
| void dataPush(ReagentStockPushDTO dto); | |||
| void dataSync(); | |||
| } | |||
| @ -0,0 +1,14 @@ | |||
| package com.hxhq.service; | |||
| import com.hxhq.domain.Sj; | |||
| import java.util.List; | |||
| /** | |||
| * @author zhangjing | |||
| * @date 2026/01/28 15:50 | |||
| * @description | |||
| */ | |||
| public interface SjService { | |||
| void saveList(List<Sj> sjList); | |||
| } | |||
| @ -0,0 +1,10 @@ | |||
| package com.hxhq.service; | |||
| /** | |||
| * @author zhangjing | |||
| * @date 2026/01/28 15:50 | |||
| * @description | |||
| */ | |||
| public interface SyncLogService { | |||
| } | |||
| @ -0,0 +1,21 @@ | |||
| package com.hxhq.service; | |||
| import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | |||
| import com.hxhq.domain.Sj; | |||
| import com.hxhq.domain.Yq; | |||
| import java.util.List; | |||
| import java.util.Set; | |||
| /** | |||
| * @author zhangjing | |||
| * @date 2026/01/28 15:50 | |||
| * @description | |||
| */ | |||
| public interface YqService { | |||
| void saveList(List<Yq> sjList); | |||
| List<Yq> listByBh(Set<String> incomingBhSet); | |||
| void updateList(List<Yq> recordsToUpdate); | |||
| } | |||
| @ -0,0 +1,108 @@ | |||
| package com.hxhq.service.impl; | |||
| import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; | |||
| import com.hxhq.common.EntityConstants; | |||
| import com.hxhq.domain.Container; | |||
| import com.hxhq.domain.Gsp; | |||
| import com.hxhq.domain.SyncLog; | |||
| import com.hxhq.domain.Yq; | |||
| import com.hxhq.dto.ContainerDTO; | |||
| import com.hxhq.mapper.ContainerMapper; | |||
| import com.hxhq.service.ContainerService; | |||
| import com.hxhq.service.GspService; | |||
| import com.hxhq.service.YqService; | |||
| import com.hxhq.util.BeanConvert; | |||
| import com.hxhq.util.TimeUtil; | |||
| import org.springframework.stereotype.Service; | |||
| import org.springframework.transaction.annotation.Transactional; | |||
| import javax.annotation.Resource; | |||
| import java.time.LocalDateTime; | |||
| import java.util.ArrayList; | |||
| import java.util.List; | |||
| /** | |||
| * @author zhangjing | |||
| * @date 2026/01/28 15:50 | |||
| * @description | |||
| */ | |||
| @Service | |||
| public class ContainerServiceImpl extends ServiceImpl<ContainerMapper, Container> implements ContainerService { | |||
| @Resource | |||
| GspService gspService; | |||
| @Resource | |||
| SyncLogServiceImpl syncLogService; | |||
| @Override | |||
| public void dataPush(ContainerDTO dto) { | |||
| Container Container = BeanConvert.convert(dto, Container.class); | |||
| save(Container); | |||
| } | |||
| @Override | |||
| public void dataSync() { | |||
| List<Container> list = baseMapper.notSync(); | |||
| if (list == null || list.isEmpty()) { | |||
| return ; | |||
| } | |||
| //供试品 | |||
| List<Gsp> gspList = changeToGsp(list); | |||
| gspService.saveList(gspList); | |||
| //日志 | |||
| List<SyncLog> syncLogList = getLogList(list); | |||
| saveLogList(syncLogList); | |||
| } | |||
| @Transactional | |||
| public void saveLogList(List<SyncLog> syncLogList) { | |||
| syncLogService.saveBatch(syncLogList); | |||
| } | |||
| private List<SyncLog> getLogList(List<Container> list) { | |||
| List<SyncLog> syncLogList = new ArrayList<>(); | |||
| LocalDateTime now = LocalDateTime.now(); | |||
| list.forEach(item ->{ | |||
| SyncLog syncLog = new SyncLog(); | |||
| syncLog.setSourceRecordId(item.getId().toString()); | |||
| syncLog.setTargetSystem(EntityConstants.SYS_HXHQ); | |||
| syncLog.setSourceType(EntityConstants.LOG_CONTAINER); | |||
| syncLog.setCreatedAt(now); | |||
| syncLog.setSyncStatus(EntityConstants.SUCCESS); | |||
| syncLogList.add(syncLog); | |||
| }); | |||
| return syncLogList; | |||
| } | |||
| // | |||
| private List<Gsp> changeToGsp(List<Container> list) { | |||
| List<Gsp> gspList = new ArrayList<>(); | |||
| list.forEach(item ->{ | |||
| Gsp sj = new Gsp(); | |||
| sj.setMc(item.getSubstanceName()); | |||
| sj.setBh(item.getSubstanceCode()); | |||
| sj.setPh(item.getLotNumber()); | |||
| sj.setRemark(item.getComments()); | |||
| sj.setRemark(item.getComments()); | |||
| sj.setKc(item.getCurrentNetAmount().toString()); | |||
| sj.setKcdw(item.getCurrentNetAmountUnit()); | |||
| sj.setYxq(TimeUtil.getDate(item.getExpirationDate())); | |||
| //状态 开会讨论状态迁移都为1未入库 | |||
| sj.setZjzt(1); | |||
| sj.setJyzt(1); | |||
| //容器用途 | |||
| // sj.set(item.getContainerUse()); | |||
| sj.setJsrq(TimeUtil.getDate(item.getDateTimePharmacyRecv())); | |||
| //交易日期(默认当前时间) | |||
| // sj.set(item.getTransDate()); | |||
| //存储位置 | |||
| // sj.setCz(item.getStorageLocation()); | |||
| //研究编号 | |||
| // sj.setCz(item.getStudyNumber()); | |||
| //录入时间 | |||
| // sj.setLr(TimeUtil.getDate(item.getExpirationDate())); | |||
| gspList.add(sj); | |||
| }); | |||
| return gspList; | |||
| } | |||
| } | |||
| @ -0,0 +1,30 @@ | |||
| package com.hxhq.service.impl; | |||
| import com.baomidou.dynamic.datasource.annotation.DS; | |||
| import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; | |||
| import com.hxhq.domain.Gsp; | |||
| import com.hxhq.mapper.GspMapper; | |||
| import com.hxhq.service.GspService; | |||
| import org.springframework.stereotype.Service; | |||
| import org.springframework.transaction.annotation.Transactional; | |||
| import java.util.List; | |||
| /** | |||
| * @author zhangjing | |||
| * @date 2026/01/28 15:50 | |||
| * @description | |||
| */ | |||
| @Service | |||
| public class GspServiceImpl extends ServiceImpl<GspMapper, Gsp> implements GspService { | |||
| @DS("hxhq") | |||
| @Override | |||
| public void saveList(List<Gsp> GspList) { | |||
| saveGspList(GspList); | |||
| } | |||
| @Transactional | |||
| public void saveGspList(List<Gsp> GspList) { | |||
| this.saveBatch(GspList); | |||
| } | |||
| } | |||
| @ -0,0 +1,18 @@ | |||
| package com.hxhq.service.impl; | |||
| import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; | |||
| import com.hxhq.domain.InstrumentPush; | |||
| import com.hxhq.mapper.InstrumentPushMapper; | |||
| import com.hxhq.service.InstrumentPushService; | |||
| import org.springframework.stereotype.Service; | |||
| /** | |||
| * @author zhangjing | |||
| * @date 2026/01/28 15:50 | |||
| * @description | |||
| */ | |||
| @Service | |||
| public class InstrumentPushServiceImpl extends ServiceImpl<InstrumentPushMapper, InstrumentPush> implements InstrumentPushService { | |||
| } | |||
| @ -0,0 +1,164 @@ | |||
| package com.hxhq.service.impl; | |||
| import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; | |||
| import com.hxhq.common.EntityConstants; | |||
| import com.hxhq.domain.Instrument; | |||
| import com.hxhq.domain.InstrumentPush; | |||
| import com.hxhq.domain.SyncLog; | |||
| import com.hxhq.domain.Yq; | |||
| import com.hxhq.dto.InstrumentPushDTO; | |||
| import com.hxhq.mapper.InstrumentMapper; | |||
| import com.hxhq.service.InstrumentService; | |||
| import com.hxhq.service.YqService; | |||
| import com.hxhq.util.BeanConvert; | |||
| import com.hxhq.util.TimeUtil; | |||
| import org.springframework.stereotype.Service; | |||
| import org.springframework.transaction.annotation.Transactional; | |||
| import javax.annotation.Resource; | |||
| import java.time.LocalDateTime; | |||
| import java.util.ArrayList; | |||
| import java.util.List; | |||
| import java.util.Set; | |||
| import java.util.stream.Collectors; | |||
| /** | |||
| * @author zhangjing | |||
| * @date 2026/01/28 15:50 | |||
| * @description | |||
| */ | |||
| @Service | |||
| public class InstrumentServiceImpl extends ServiceImpl<InstrumentMapper, Instrument> implements InstrumentService { | |||
| @Resource | |||
| YqService yqService; | |||
| @Resource | |||
| SyncLogServiceImpl syncLogService; | |||
| @Resource | |||
| InstrumentPushServiceImpl instrumentPushService; | |||
| @Override | |||
| public void dataPush(InstrumentPushDTO dto) { | |||
| InstrumentPush instrument = BeanConvert.convert(dto, InstrumentPush.class); | |||
| instrumentPushService.save(instrument); | |||
| } | |||
| @Override | |||
| public void dataSync() { | |||
| List<Instrument> list = baseMapper.notSync(); | |||
| if (list == null || list.isEmpty()) { | |||
| return ; | |||
| } | |||
| //仪器 | |||
| List<Yq> sjList = changeToYq(list); | |||
| //这里sjList 里 yq 里通过bh字段去更新已有数据,如果没有相同的就新增,该怎么处理。 | |||
| performUpsertByBh(sjList); | |||
| //日志 | |||
| List<SyncLog> syncLogList = getLogList(list); | |||
| saveLogList(syncLogList); | |||
| } | |||
| @Transactional | |||
| public void saveLogList(List<SyncLog> syncLogList) { | |||
| syncLogService.saveBatch(syncLogList); | |||
| } | |||
| /** | |||
| * 核心方法:根据 Yq 对象的 bh 字段执行新增或更新操作 | |||
| * @param sjList 待处理的 Yq 对象列表 | |||
| */ | |||
| @Transactional | |||
| public void performUpsertByBh(List<Yq> sjList) { | |||
| // 1. 提取传入列表中的所有 bh 值 | |||
| Set<String> incomingBhSet = sjList.stream() | |||
| .map(Yq::getBh) | |||
| .collect(Collectors.toSet()); | |||
| // 2. 查询数据库中已存在的、与传入列表匹配的 Yq 记录 | |||
| List<Yq> existingRecordsInDb = yqService.listByBh(incomingBhSet); | |||
| // 3. 提取数据库中已存在的 bh 集合,用于快速判断 | |||
| Set<String> existingBhSet = existingRecordsInDb.stream() | |||
| .map(Yq::getBh) | |||
| .collect(Collectors.toSet()); | |||
| // 4. 区分新增和更新的记录 | |||
| List<Yq> recordsToInsert = new ArrayList<>(); | |||
| List<Yq> recordsToUpdate = new ArrayList<>(); | |||
| for (Yq incomingRecord : sjList) { | |||
| String bh = incomingRecord.getBh(); | |||
| if (existingBhSet.contains(bh)) { | |||
| // 如果数据库中已存在此 bh,则标记为更新 | |||
| // 需要将现有记录的 ID 补充到 incomingRecord 上,以便 MP 知道更新哪一行 | |||
| Yq existingRecord = existingRecordsInDb.stream() | |||
| .filter(r -> r.getBh().equals(bh)) | |||
| .findFirst() | |||
| .orElse(null); // 理论上一定能找到,因为 existingBhSet.contains(bh) | |||
| if (existingRecord != null) { | |||
| // 补全 ID | |||
| incomingRecord.setId(existingRecord.getId()); | |||
| recordsToUpdate.add(incomingRecord); | |||
| } else { | |||
| // 理论上不应该走到这里,除非并发问题。可以记录警告或抛异常。 | |||
| System.err.println("警告:逻辑错误,bh 为 " + bh + " 的记录在 existingBhSet 中,但在 existingRecordsInDb 中未找到。"); | |||
| } | |||
| } else { | |||
| // 如果数据库中不存在此 bh,则标记为新增 | |||
| recordsToInsert.add(incomingRecord); | |||
| } | |||
| } | |||
| // 5. 执行批量新增和更新操作 | |||
| if (!recordsToInsert.isEmpty()) { | |||
| // 批量新增 | |||
| yqService.saveList(recordsToInsert); | |||
| System.out.println("批量新增 Yq 记录: " + recordsToInsert.size() + " 条"); | |||
| } | |||
| if (!recordsToUpdate.isEmpty()) { | |||
| // 批量更新 | |||
| // 使用 updateBatchById,它会根据 ID 进行更新 | |||
| yqService.updateList(recordsToUpdate); | |||
| System.out.println("批量更新 Yq 记录: " + recordsToUpdate.size() + " 条"); | |||
| } | |||
| } | |||
| private List<SyncLog> getLogList(List<Instrument> list) { | |||
| List<SyncLog> syncLogList = new ArrayList<>(); | |||
| LocalDateTime now = LocalDateTime.now(); | |||
| list.forEach(item ->{ | |||
| SyncLog syncLog = new SyncLog(); | |||
| syncLog.setSourceRecordId(item.getInstrumentId()); | |||
| syncLog.setTargetSystem(EntityConstants.SYS_HXHQ); | |||
| syncLog.setSourceType(EntityConstants.LOG_INSTRUMENT); | |||
| syncLog.setCreatedAt(now); | |||
| syncLog.setSyncStatus(EntityConstants.SUCCESS); | |||
| syncLogList.add(syncLog); | |||
| }); | |||
| return syncLogList; | |||
| } | |||
| // | |||
| private List<Yq> changeToYq(List<Instrument> list) { | |||
| List<Yq> yqList = new ArrayList<>(); | |||
| list.forEach(item ->{ | |||
| Yq sj = new Yq(); | |||
| sj.setMc(item.getName()); | |||
| sj.setBh(item.getSn()); | |||
| sj.setXh(item.getModel()); | |||
| //部门名称 | |||
| sj.setBmMc(item.getDepartment()); | |||
| sj.setJzrq(TimeUtil.getDate(item.getCalibrationDate())); | |||
| //无来源默认为:中间库 | |||
| sj.setLy(item.getSource()!=null?item.getSource():EntityConstants.SYS_STAGING_DATABASE); | |||
| sj.setWc(item.getStorageConditions()); | |||
| sj.setRemark(item.getRemark()); | |||
| yqList.add(sj); | |||
| }); | |||
| return yqList; | |||
| } | |||
| } | |||
| @ -0,0 +1,18 @@ | |||
| package com.hxhq.service.impl; | |||
| import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; | |||
| import com.hxhq.domain.ReagentStockPush; | |||
| import com.hxhq.mapper.ReagentStockPushMapper; | |||
| import com.hxhq.service.ReagentStockPushService; | |||
| import org.springframework.stereotype.Service; | |||
| /** | |||
| * @author zhangjing | |||
| * @date 2026/01/28 15:50 | |||
| * @description | |||
| */ | |||
| @Service | |||
| public class ReagentStockPushServiceImpl extends ServiceImpl<ReagentStockPushMapper, ReagentStockPush> implements ReagentStockPushService { | |||
| } | |||
| @ -0,0 +1,118 @@ | |||
| package com.hxhq.service.impl; | |||
| import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; | |||
| import com.hxhq.common.EntityConstants; | |||
| import com.hxhq.domain.ReagentStock; | |||
| import com.hxhq.domain.ReagentStockPush; | |||
| import com.hxhq.domain.Sj; | |||
| import com.hxhq.domain.SyncLog; | |||
| import com.hxhq.dto.ReagentStockPushDTO; | |||
| import com.hxhq.mapper.ReagentStockMapper; | |||
| import com.hxhq.service.ReagentStockService; | |||
| import com.hxhq.service.SjService; | |||
| import com.hxhq.util.BeanConvert; | |||
| import com.hxhq.util.TimeUtil; | |||
| import org.springframework.stereotype.Service; | |||
| import org.springframework.transaction.annotation.Transactional; | |||
| import javax.annotation.Resource; | |||
| import java.time.LocalDateTime; | |||
| import java.util.ArrayList; | |||
| import java.util.List; | |||
| /** | |||
| * @author zhangjing | |||
| * @date 2026/01/28 15:50 | |||
| * @description | |||
| */ | |||
| @Service | |||
| public class ReagentStockServiceImpl extends ServiceImpl<ReagentStockMapper, ReagentStock> implements ReagentStockService { | |||
| @Resource | |||
| SjService sjService; | |||
| @Resource | |||
| SyncLogServiceImpl syncLogService; | |||
| @Resource | |||
| ReagentStockPushServiceImpl reagentStockPushService; | |||
| @Transactional | |||
| @Override | |||
| public void dataPush(ReagentStockPushDTO dto) { | |||
| ReagentStockPush reagentStock = BeanConvert.convert(dto, ReagentStockPush.class); | |||
| reagentStockPushService.save(reagentStock); | |||
| } | |||
| @Override | |||
| public void dataSync() { | |||
| List<ReagentStock> list = baseMapper.notSync(); | |||
| if (list == null || list.isEmpty()) { | |||
| return ; | |||
| } | |||
| //试剂 | |||
| List<Sj> sjList = changeToSj(list); | |||
| sjService.saveList(sjList); | |||
| //日志 | |||
| List<SyncLog> syncLogList = getLogList(list); | |||
| saveLogList(syncLogList); | |||
| } | |||
| @Transactional | |||
| public void saveLogList(List<SyncLog> syncLogList) { | |||
| syncLogService.saveBatch(syncLogList); | |||
| } | |||
| private List<SyncLog> getLogList(List<ReagentStock> list) { | |||
| List<SyncLog> syncLogList = new ArrayList<>(); | |||
| LocalDateTime now = LocalDateTime.now(); | |||
| list.forEach(item ->{ | |||
| SyncLog syncLog = new SyncLog(); | |||
| syncLog.setSourceRecordId(item.getReagentStockId()); | |||
| syncLog.setTargetSystem(EntityConstants.SYS_HXHQ); | |||
| syncLog.setSourceType(EntityConstants.LOG_REAGENT); | |||
| syncLog.setCreatedAt(now); | |||
| syncLog.setSyncStatus(EntityConstants.SUCCESS); | |||
| syncLogList.add(syncLog); | |||
| }); | |||
| return syncLogList; | |||
| } | |||
| private List<Sj> changeToSj(List<ReagentStock> list) { | |||
| List<Sj> sjList = new ArrayList<>(); | |||
| list.forEach(item ->{ | |||
| Sj sj = new Sj(); | |||
| /** 制剂状态 1:入库 5:已锁定 7:待归档 9:归档 11:待解档 */ | |||
| /** 借阅状态 1:未借阅 3:待借阅 5:借阅中 */ | |||
| sj.setMc(item.getName()); | |||
| sj.setBh(item.getSn()); | |||
| sj.setNd(item.getPurity()!=null?item.getPurity().toString():null); | |||
| sj.setNddw(item.getPurityUnit()); | |||
| sj.setKc(item.getStockCount().toString()); | |||
| sj.setKcdw(item.getStockUnit()); | |||
| sj.setGg(item.getSpecs()); | |||
| //无来源默认为:中间库 | |||
| sj.setLy(item.getSource()!=null?item.getSource():EntityConstants.SYS_STAGING_DATABASE); | |||
| //部门名称 | |||
| sj.setSsbm(item.getDepartment()); | |||
| //状态 开会讨论状态迁移都为1未入库 | |||
| sj.setZjzt(1); | |||
| sj.setJyzt(1); | |||
| sj.setPh(item.getBatchNumber()); | |||
| sj.setYxzq(item.getValidityPeriod()); | |||
| sj.setYxzqdw(item.getValidityPeriodUnit()); | |||
| sj.setSxr(TimeUtil.getDate(item.getExpiryDate())); | |||
| sj.setCcwz(item.getStorageLocation()); | |||
| sj.setCctj(item.getStorageConditions()); | |||
| sj.setPzrq(TimeUtil.getDate(item.getConfigurationDate())); | |||
| sjList.add(sj); | |||
| }); | |||
| return sjList; | |||
| } | |||
| } | |||
| @ -0,0 +1,30 @@ | |||
| package com.hxhq.service.impl; | |||
| import com.baomidou.dynamic.datasource.annotation.DS; | |||
| import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; | |||
| import com.hxhq.domain.Sj; | |||
| import com.hxhq.mapper.SjMapper; | |||
| import com.hxhq.service.SjService; | |||
| import org.springframework.stereotype.Service; | |||
| import org.springframework.transaction.annotation.Transactional; | |||
| import java.util.List; | |||
| /** | |||
| * @author zhangjing | |||
| * @date 2026/01/28 15:50 | |||
| * @description | |||
| */ | |||
| @Service | |||
| public class SjServiceImpl extends ServiceImpl<SjMapper, Sj> implements SjService { | |||
| @DS("hxhq") | |||
| @Override | |||
| public void saveList(List<Sj> sjList) { | |||
| saveSjList(sjList); | |||
| } | |||
| @Transactional | |||
| public void saveSjList(List<Sj> sjList) { | |||
| this.saveBatch(sjList); | |||
| } | |||
| } | |||
| @ -0,0 +1,18 @@ | |||
| package com.hxhq.service.impl; | |||
| import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; | |||
| import com.hxhq.domain.SyncLog; | |||
| import com.hxhq.mapper.SyncLogMapper; | |||
| import com.hxhq.service.SyncLogService; | |||
| import org.springframework.stereotype.Service; | |||
| /** | |||
| * @author zhangjing | |||
| * @date 2026/01/28 15:50 | |||
| * @description | |||
| */ | |||
| @Service | |||
| public class SyncLogServiceImpl extends ServiceImpl<SyncLogMapper, SyncLog> implements SyncLogService { | |||
| } | |||
| @ -0,0 +1,50 @@ | |||
| package com.hxhq.service.impl; | |||
| import com.baomidou.dynamic.datasource.annotation.DS; | |||
| import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | |||
| import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; | |||
| import com.hxhq.domain.Sj; | |||
| import com.hxhq.domain.Yq; | |||
| import com.hxhq.mapper.SjMapper; | |||
| import com.hxhq.mapper.YqMapper; | |||
| import com.hxhq.service.SjService; | |||
| import com.hxhq.service.YqService; | |||
| import org.springframework.stereotype.Service; | |||
| import org.springframework.transaction.annotation.Transactional; | |||
| import java.util.List; | |||
| import java.util.Set; | |||
| /** | |||
| * @author zhangjing | |||
| * @date 2026/01/28 15:50 | |||
| * @description | |||
| */ | |||
| @Service | |||
| public class YqServiceImpl extends ServiceImpl<YqMapper, Yq> implements YqService { | |||
| @DS("hxhq") | |||
| @Override | |||
| public void saveList(List<Yq> yqList) { | |||
| saveYqList(yqList); | |||
| } | |||
| @DS("hxhq") | |||
| @Override | |||
| public List<Yq> listByBh(Set<String> incomingBhSet) { | |||
| LambdaQueryWrapper<Yq> queryWrapper = new LambdaQueryWrapper<>(); | |||
| queryWrapper.in(Yq::getBh, incomingBhSet); | |||
| return list(queryWrapper); | |||
| } | |||
| @DS("hxhq") | |||
| @Override | |||
| public void updateList(List<Yq> recordsToUpdate) { | |||
| updateBatchById(recordsToUpdate); | |||
| } | |||
| @Transactional | |||
| public void saveYqList(List<Yq> yqList) { | |||
| this.saveBatch(yqList); | |||
| } | |||
| } | |||
| @ -0,0 +1,49 @@ | |||
| package com.hxhq.util; | |||
| import org.springframework.beans.BeanUtils; | |||
| import java.util.Collections; | |||
| import java.util.List; | |||
| import java.util.stream.Collectors; | |||
| /** | |||
| * @author zhangjing | |||
| * @date 2025/08/12 15:27 | |||
| * @description | |||
| */ | |||
| public class BeanConvert { | |||
| /** | |||
| * 将源对象转换为目标类的实例 | |||
| * @param source 源对象 | |||
| * @param targetClass 目标类 | |||
| * @param <T> 目标类型 | |||
| * @return 转换后的对象 | |||
| */ | |||
| public static <T> T convert(Object source, Class<T> targetClass) { | |||
| if (source == null) { | |||
| return null; | |||
| } | |||
| try { | |||
| T target = targetClass.newInstance(); | |||
| BeanUtils.copyProperties(source, target); | |||
| return target; | |||
| } catch (Exception e) { | |||
| throw new RuntimeException("Bean转换失败", e); | |||
| } | |||
| } | |||
| /** | |||
| * 将源列表转换为目标类的实例列表 | |||
| * @param sourceList 源对象列表 | |||
| * @param targetClass 目标类 | |||
| * @param <T> 目标类型 | |||
| * @return 转换后的对象列表 | |||
| */ | |||
| public static <T> List<T> convertList(List<?> sourceList, Class<T> targetClass) { | |||
| if (sourceList == null || sourceList.isEmpty()) { | |||
| return Collections.emptyList(); | |||
| } | |||
| return sourceList.stream() | |||
| .map(source -> convert(source, targetClass)) | |||
| .collect(Collectors.toList()); | |||
| } | |||
| } | |||
| @ -0,0 +1,45 @@ | |||
| package com.hxhq.util; | |||
| /** | |||
| * @author zhangjing | |||
| * @date 2025/07/08 19:29 | |||
| * @description 元数据定时 | |||
| */ | |||
| import com.hxhq.service.ReagentStockService; | |||
| import org.springframework.beans.factory.annotation.Autowired; | |||
| import org.springframework.scheduling.annotation.Scheduled; | |||
| import org.springframework.stereotype.Component; | |||
| import java.util.Date; | |||
| @Component | |||
| public class DailyTask { | |||
| @Autowired | |||
| ReagentStockService reagentStockService; | |||
| // 北京时间 | |||
| // @Scheduled(cron = "0 0 1 * * ?", zone = "Asia/Shanghai") | |||
| // public void executeAtOneAMInShanghai() { | |||
| // reagentStockService.dataSync(); | |||
| // System.out.println("【北京时间】每天凌晨1点执行:" + new Date()); | |||
| // } | |||
| // @Scheduled(cron = "0 0/5 * * * ?") | |||
| // public void executeEveryFiveMinutes() { | |||
| // metadataRecordService.uploadRecord(); | |||
| // System.out.println("【每5分钟执行】当前时间:" + new Date()); | |||
| // } | |||
| @Scheduled(cron = "0 * * * * ?") | |||
| public void executeEveryMinute() { | |||
| reagentStockService.dataSync(); | |||
| System.out.println("【每分钟执行】当前时间:" + new Date()); | |||
| } | |||
| // @Scheduled(cron = "0 */3 * * * ?") | |||
| // public void executeEveryThreeMinutes() { | |||
| // metadataRecordService.uploadRecord(); | |||
| // System.out.println("【每3分钟执行】当前时间:" + new Date()); | |||
| // } | |||
| } | |||
| @ -0,0 +1,21 @@ | |||
| package com.hxhq.util; | |||
| import java.time.LocalDateTime; | |||
| import java.time.ZoneId; | |||
| import java.util.Date; | |||
| /** | |||
| * @author zhangjing | |||
| * @date 2026/01/30 14:50 | |||
| * @description | |||
| */ | |||
| public class TimeUtil { | |||
| public static Date getDate(LocalDateTime localDateTime){ | |||
| if (localDateTime==null){ | |||
| return null; | |||
| } | |||
| // 转换为 Date(使用系统默认时区) | |||
| Date date = Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant()); | |||
| return date; | |||
| }; | |||
| } | |||
| @ -0,0 +1,38 @@ | |||
| # Tomcat | |||
| server: | |||
| port: 9210 | |||
| # Spring | |||
| spring: | |||
| main: | |||
| allow-circular-references: true | |||
| application: | |||
| # 应用名称 | |||
| name: hxhq-integration | |||
| profiles: | |||
| # 环境配置 | |||
| active: dev | |||
| cloud: | |||
| nacos: | |||
| username: nacos | |||
| password: nacosHxhq | |||
| discovery: | |||
| # 服务注册地址 | |||
| server-addr: 127.0.0.1:8848 | |||
| config: | |||
| # 配置中心地址 | |||
| server-addr: 127.0.0.1:8848 | |||
| # 配置文件格式 | |||
| file-extension: yml | |||
| # 共享配置 | |||
| shared-configs: | |||
| - application- $ {spring.profiles.active}. $ {spring.cloud.nacos.config.file-extension} | |||
| - hxhq-integration- $ {spring.profiles.active}. $ {spring.cloud.nacos.config.file-extension} | |||
| # token配置 | |||
| token: | |||
| # 是否允许账户多终端同时登录(true允许 false不允许) | |||
| soloLogin: false | |||
| logging: | |||
| level: | |||
| com.alibaba.cloud.nacos: DEBUG | |||
| @ -0,0 +1,15 @@ | |||
| <?xml version="1.0" encoding="UTF-8" ?> | |||
| <!DOCTYPE mapper | |||
| PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" | |||
| "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | |||
| <mapper namespace="com.hxhq.mapper.ContainerMapper"> | |||
| <select id="notSync" resultType="com.hxhq.domain.Container"> | |||
| SELECT c.* | |||
| FROM container c | |||
| LEFT JOIN sync_log s | |||
| ON c.container_id = s.source_record_id | |||
| AND s.target_system = 'hxhq' | |||
| AND s.source_type = 'container' | |||
| WHERE s.source_record_id IS NULL; | |||
| </select> | |||
| </mapper> | |||
| @ -0,0 +1,15 @@ | |||
| <?xml version="1.0" encoding="UTF-8" ?> | |||
| <!DOCTYPE mapper | |||
| PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" | |||
| "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | |||
| <mapper namespace="com.hxhq.mapper.InstrumentMapper"> | |||
| <select id="notSync" resultType="com.hxhq.domain.Instrument"> | |||
| SELECT i.* | |||
| FROM instrument i | |||
| LEFT JOIN sync_log s | |||
| ON i.instrument_id = s.source_record_id | |||
| AND s.target_system = 'hxhq' | |||
| AND s.source_type = 'instrument' | |||
| WHERE s.source_record_id IS NULL; | |||
| </select> | |||
| </mapper> | |||
| @ -0,0 +1,15 @@ | |||
| <?xml version="1.0" encoding="UTF-8" ?> | |||
| <!DOCTYPE mapper | |||
| PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" | |||
| "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | |||
| <mapper namespace="com.hxhq.mapper.ReagentStockMapper"> | |||
| <select id="notSync" resultType="com.hxhq.domain.ReagentStock"> | |||
| SELECT rs.* | |||
| FROM reagent_stock rs | |||
| LEFT JOIN sync_log s | |||
| ON rs.reagent_stock_id = s.source_record_id | |||
| AND s.target_system = 'hxhq' | |||
| AND s.source_type = 'reagent' | |||
| WHERE s.source_record_id IS NULL; | |||
| </select> | |||
| </mapper> | |||
| @ -0,0 +1,25 @@ | |||
| package com.hxhq.job.service; | |||
| import com.hxhq.common.core.web.domain.AjaxResult; | |||
| import org.springframework.cloud.openfeign.FeignClient; | |||
| import org.springframework.web.bind.annotation.GetMapping; | |||
| import org.springframework.web.bind.annotation.PostMapping; | |||
| /** | |||
| * 定时任务 | |||
| * | |||
| * @author hxhq | |||
| */ | |||
| @FeignClient(name = "hxhq-integration") | |||
| public interface DataSyncTaskService | |||
| { | |||
| @GetMapping("/reagentStock/dataSync") | |||
| AjaxResult syncReagentStock(); | |||
| @GetMapping("/instrument/dataSync") | |||
| AjaxResult syncInstrument(); | |||
| @GetMapping("/container/dataSync") | |||
| AjaxResult syncContainer(); | |||
| } | |||
| @ -0,0 +1,57 @@ | |||
| package com.hxhq.job.task; | |||
| import com.hxhq.common.core.web.domain.AjaxResult; | |||
| import com.hxhq.job.service.DataSyncTaskService; | |||
| import org.springframework.stereotype.Component; | |||
| import javax.annotation.Resource; | |||
| import static jdk.nashorn.internal.runtime.regexp.joni.Config.log; | |||
| /** | |||
| * @author zhangjing | |||
| * @date 2026/01/30 15:54 | |||
| * @description 数据对接定时 | |||
| */ | |||
| @Component("DataSyncTask") | |||
| public class DataSyncTask { | |||
| @Resource | |||
| DataSyncTaskService dataSyncTaskService; | |||
| /** | |||
| * | |||
| * 试剂同步 | |||
| * @return void | |||
| **/ | |||
| public void syncReagentStock() { | |||
| try { | |||
| AjaxResult result = dataSyncTaskService.syncReagentStock(); | |||
| } catch (Exception e) { | |||
| log.printf("调用 syncReagentStock 失败", e); | |||
| } | |||
| } | |||
| /** | |||
| * | |||
| * 仪器同步 | |||
| * @return void | |||
| **/ | |||
| public void syncInstrument() { | |||
| try { | |||
| AjaxResult result = dataSyncTaskService.syncInstrument(); | |||
| } catch (Exception e) { | |||
| log.printf("调用 syncInstrument 失败", e); | |||
| } | |||
| } | |||
| /** | |||
| * | |||
| * 供试品同步 | |||
| * @return void | |||
| **/ | |||
| public void syncContainer() { | |||
| try { | |||
| AjaxResult result = dataSyncTaskService.syncContainer(); | |||
| } catch (Exception e) { | |||
| log.printf("调用 syncContainer 失败", e); | |||
| } | |||
| } | |||
| } | |||