diff --git a/ruoyi-admin/pom.xml b/ruoyi-admin/pom.xml index 7b3dbc4e6..7fe7cf12c 100644 --- a/ruoyi-admin/pom.xml +++ b/ruoyi-admin/pom.xml @@ -25,11 +25,11 @@ - - - - - + + org.springframework.boot + spring-boot-devtools + true + @@ -119,6 +119,11 @@ gson 2.11.0 + + com.google.guava + guava + 32.1.3-jre + diff --git a/ruoyi-admin/src/main/java/com/neuhis/his/app/controller/AppBjCaController.java b/ruoyi-admin/src/main/java/com/neuhis/his/app/controller/AppBjCaController.java index e06b86630..5ae0aa6cf 100644 --- a/ruoyi-admin/src/main/java/com/neuhis/his/app/controller/AppBjCaController.java +++ b/ruoyi-admin/src/main/java/com/neuhis/his/app/controller/AppBjCaController.java @@ -5,6 +5,7 @@ import com.neuhis.his.domain.vo.bjca.BjCaResult; import com.neuhis.his.domain.vo.bjca.CaResultVo; import com.neuhis.his.domain.vo.bjca.CaStartVo; import com.neuhis.his.service.IBjCaService; +import com.neuhis.his.service.winlis.ILasSapSampleregService; import com.neuhis.his.service.winlis.IWinLisService; import com.ruoyi.common.core.domain.AjaxResult; import io.swagger.annotations.Api; @@ -31,6 +32,8 @@ public class AppBjCaController { private IBjCaService bjCaService; @Resource private IWinLisService winLisService; + @Resource + private ILasSapSampleregService lasSapSampleregService; /** * startAutoSign启动自动签名获取的签名数据,[签名任务id] * 使用过的任务id: SD_4c6ec5f6-22e3-4fae-b2aa-681e5beacf1e @@ -64,7 +67,9 @@ public class AppBjCaController { @ApiOperation(value = "获取:Winlis的CA原文", notes = "获取:Winlis的CA原文;生成CA信息(签名结果、证书、时间戳)") public AjaxResult getWinLisCaInfo() { //String caOriginText = winLisService.getWinLisCaOriginText("20250228", "WSW_caris200", "9999"); - CaResultVo caResultVo = winLisService.generateBjCaInfo("20250228", "WSW_caris200", "9999", autoSignSignDataId); - return AjaxResult.success(caResultVo); + //CaResultVo caResultVo = winLisService.generateBjCaInfo("20250228", "WSW_caris200", "9999", autoSignSignDataId); + //return AjaxResult.success(caResultVo); + //return AjaxResult.success(lasSapSampleregService.selectWaitingCaSignList("202503", 10)); + return AjaxResult.success(winLisService.winlistCaTask("202503", 10)); } } diff --git a/ruoyi-admin/src/main/java/com/neuhis/his/domain/entity/winlis/LasSapCadata.java b/ruoyi-admin/src/main/java/com/neuhis/his/domain/entity/winlis/LasSapCadata.java index e361a903a..999db1b55 100644 --- a/ruoyi-admin/src/main/java/com/neuhis/his/domain/entity/winlis/LasSapCadata.java +++ b/ruoyi-admin/src/main/java/com/neuhis/his/domain/entity/winlis/LasSapCadata.java @@ -2,18 +2,22 @@ package com.neuhis.his.domain.entity.winlis; import java.util.Date; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringStyle; import com.ruoyi.common.annotation.Excel; import com.ruoyi.common.core.domain.BaseEntity; /** - * CA签名信息 - 对通过数字签名完成的数据进行保存对象 las_sap_cadata - * + * CA签名信息 对通过数字签名完成的数据进行保存对象 las_sap_cadata * @author ruoyi * @date 2025-03-07 */ +@Getter +@Setter +@NoArgsConstructor public class LasSapCadata extends BaseEntity { private static final long serialVersionUID = 1L; @@ -34,124 +38,27 @@ public class LasSapCadata extends BaseEntity @Excel(name = "条码号") private String barcode; + /** 原始数据 */ @Excel(name = "原始数据") private String srcdata; - /** CA数据 */ - @Excel(name = "CA数据") - private String caclobdata; - - /** CA原始数据 */ - @Excel(name = "CA原始数据") + /** CA原始数据(原始数据的BASE64形式) */ + @Excel(name = "CA原始数据(原始数据的BASE64形式)") private String srcclobdata; + /** + * CA数据,形如: + *
+     * 签名结果:
+     * 时间戳:
+     * 证书:
+     * 
+ */ + @Excel(name = "CA数据,包含:签名结果:、时间戳:、证书:") + private String caclobdata; + /** CAID */ @Excel(name = "CAID") private String caid; - - public void setCatime(Date catime) - { - this.catime = catime; - } - - public Date getCatime() - { - return catime; - } - - public void setTestdate(String testdate) - { - this.testdate = testdate; - } - - public String getTestdate() - { - return testdate; - } - - public void setMachineid(String machineid) - { - this.machineid = machineid; - } - - public String getMachineid() - { - return machineid; - } - - public void setSampleid(String sampleid) - { - this.sampleid = sampleid; - } - - public String getSampleid() - { - return sampleid; - } - - public void setBarcode(String barcode) - { - this.barcode = barcode; - } - - public String getBarcode() - { - return barcode; - } - - public void setSrcdata(String srcdata) - { - this.srcdata = srcdata; - } - - public String getSrcdata() - { - return srcdata; - } - - public void setCaclobdata(String caclobdata) - { - this.caclobdata = caclobdata; - } - - public String getCaclobdata() - { - return caclobdata; - } - - public void setSrcclobdata(String srcclobdata) - { - this.srcclobdata = srcclobdata; - } - - public String getSrcclobdata() - { - return srcclobdata; - } - - public void setCaid(String caid) - { - this.caid = caid; - } - - public String getCaid() - { - return caid; - } - - @Override - public String toString() { - return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) - .append("catime", getCatime()) - .append("testdate", getTestdate()) - .append("machineid", getMachineid()) - .append("sampleid", getSampleid()) - .append("barcode", getBarcode()) - .append("srcdata", getSrcdata()) - .append("caclobdata", getCaclobdata()) - .append("srcclobdata", getSrcclobdata()) - .append("caid", getCaid()) - .toString(); - } } diff --git a/ruoyi-admin/src/main/java/com/neuhis/his/domain/vo/winlis/LasSapCadataWatingSignVo.java b/ruoyi-admin/src/main/java/com/neuhis/his/domain/vo/winlis/LasSapCadataWatingSignVo.java new file mode 100644 index 000000000..038152a86 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/neuhis/his/domain/vo/winlis/LasSapCadataWatingSignVo.java @@ -0,0 +1,24 @@ +package com.neuhis.his.domain.vo.winlis; + +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +/** + * 查询等待签名的CA列表 + * + * @author dazer + * @date 2025/3/7 08:55 + **/ +@Getter +@Setter +@NoArgsConstructor +public class LasSapCadataWatingSignVo { + private String testdate; + private String machineid; + private String sampleid; + /** + * 条码号 + */ + private String barcode; +} diff --git a/ruoyi-admin/src/main/java/com/neuhis/his/mapper/winlis/LasSapCadataMapper.java b/ruoyi-admin/src/main/java/com/neuhis/his/mapper/winlis/LasSapCadataMapper.java index 1415e3e95..4277ff915 100644 --- a/ruoyi-admin/src/main/java/com/neuhis/his/mapper/winlis/LasSapCadataMapper.java +++ b/ruoyi-admin/src/main/java/com/neuhis/his/mapper/winlis/LasSapCadataMapper.java @@ -1,77 +1,35 @@ package com.neuhis.his.mapper.winlis; import com.neuhis.his.domain.entity.winlis.LasSapCadata; +import com.neuhis.his.domain.vo.winlis.LasSapCadataWatingSignVo; import java.util.Date; import java.util.List; /** - * CA签名信息 - 对通过数字签名完成的数据进行保存Mapper接口 + * CA签名信息 对通过数字签名完成的数据进行保存Mapper接口 * * @author ruoyi * @date 2025-03-07 */ public interface LasSapCadataMapper { + /** + * 查询等待CA签名的列表 + */ + List selectWaitingCaSignList(String testdateLike, Integer limit); /** - * 查询CA签名信息 - 对通过数字签名完成的数据进行保存 + * 新增CA签名信息 对通过数字签名完成的数据进行保存 * - * @param catime CA签名信息 - 对通过数字签名完成的数据进行保存主键 - * @return CA签名信息 - 对通过数字签名完成的数据进行保存 - */ - public LasSapCadata selectLasSapCadataByCatime(Date catime); - - /** - * 查询CA签名信息 - 对通过数字签名完成的数据进行保存列表 - * - * @param lasSapCadata CA签名信息 - 对通过数字签名完成的数据进行保存 - * @return CA签名信息 - 对通过数字签名完成的数据进行保存集合 - */ - public List selectLasSapCadataList(LasSapCadata lasSapCadata); - - /** - * 新增CA签名信息 - 对通过数字签名完成的数据进行保存 - * - * @param lasSapCadata CA签名信息 - 对通过数字签名完成的数据进行保存 + * @param lasSapCadata CA签名信息 对通过数字签名完成的数据进行保存 * @return 结果 */ - public int insertLasSapCadata(LasSapCadata lasSapCadata); + int insertLasSapCadata(LasSapCadata lasSapCadata); /** - * 修改CA签名信息 - 对通过数字签名完成的数据进行保存 - * - * @param lasSapCadata CA签名信息 - 对通过数字签名完成的数据进行保存 + * 修改CA签名信息对通过数字签名完成的数据进行保存 + * @param lasSapCadata CA签名信息 对通过数字签名完成的数据进行保存 * @return 结果 */ - public int updateLasSapCadata(LasSapCadata lasSapCadata); - - /** - * 删除CA签名信息 - 对通过数字签名完成的数据进行保存 - * - * @param catime CA签名信息 - 对通过数字签名完成的数据进行保存主键 - * @return 结果 - */ - public int deleteLasSapCadataByCatime(Date catime); - - /** - * 批量删除CA签名信息 - 对通过数字签名完成的数据进行保存 - * - * @param catimes 需要删除的数据主键集合 - * @return 结果 - */ - public int deleteLasSapCadataByCatimes(String[] catimes); + int updateLasSapCadata(LasSapCadata lasSapCadata); } diff --git a/ruoyi-admin/src/main/java/com/neuhis/his/mapper/winlis/LasSapSampleregMapper.java b/ruoyi-admin/src/main/java/com/neuhis/his/mapper/winlis/LasSapSampleregMapper.java index f2ec3fe45..e442b87e2 100644 --- a/ruoyi-admin/src/main/java/com/neuhis/his/mapper/winlis/LasSapSampleregMapper.java +++ b/ruoyi-admin/src/main/java/com/neuhis/his/mapper/winlis/LasSapSampleregMapper.java @@ -15,22 +15,9 @@ Mapper接口 public interface LasSapSampleregMapper { /** - * - - * + * 根据:三要素查询常规检验注册信息 * @param testdate 常规检验登记表 * @return 常规检验登记表 */ LasSapSamplereg selectLasSapSampleregByTestdate(@Param("testdate")String testdate,@Param("machineid") String machineid,@Param("sampleId") String sampleId); - - /** - * -列表 - * - * @param lasSapSamplereg 常规检验登记表 - - * @return 常规检验登记表 -集合 - */ - List selectLasSapSampleregList(LasSapSamplereg lasSapSamplereg); } diff --git a/ruoyi-admin/src/main/java/com/neuhis/his/service/impl/BjCaServiceImpl.java b/ruoyi-admin/src/main/java/com/neuhis/his/service/impl/BjCaServiceImpl.java index 5a408f458..f4b44ad52 100644 --- a/ruoyi-admin/src/main/java/com/neuhis/his/service/impl/BjCaServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/neuhis/his/service/impl/BjCaServiceImpl.java @@ -33,7 +33,6 @@ import java.util.Map; public class BjCaServiceImpl implements IBjCaService { @Autowired private BjCaConfig bjCaConfig; - /** * 通过 https://demo-system.isignet.cn/signHelper/sign.html 校验签名值是否正确 * @return @@ -87,7 +86,7 @@ public class BjCaServiceImpl implements IBjCaService { params.put("attachCert", StrUtil.isNotEmpty(signature) ? "true" : "false");//最终产生的时间戳是否带证书 (true/false) params.put("signature", signature);//最终产生的时间戳是否带证书 (true/false) BjCaResult result = postBjCa(bjCaConfig.getServerTssInfo(), params, CaCreateAndGetTssInfoVo.class); - return result != null && result.isSuccess() ? result.getData().getTsResp() : ""; + return result.isSuccess() ? result.getData().getTsResp() : ""; } @SuppressWarnings("all") @@ -109,6 +108,10 @@ public class BjCaServiceImpl implements IBjCaService { "北京CA开始HTTP请求,URL:" + (bjCaConfig.getServerBase()+url) + "\n," + "请求入参:" + requestJson + "\n" + "响应结果:" + resultJson); + //89003046 自动签未开启或已过期, 如果;提示这个,需要重新【协同签名】app,后续所有的操作都无法进行 + if (bjCaResult.getStatus() != null && bjCaResult.getStatus().equals(89003046L)) { + throw new RuntimeException("错误码:89003046;错误信息:自动签未开启或已过期,请重新【协同签名】app,后续所有的操作都无法进行,所有操作需要中断!"); + } return bjCaResult; } diff --git a/ruoyi-admin/src/main/java/com/neuhis/his/service/impl/OracleSysServiceImpl.java b/ruoyi-admin/src/main/java/com/neuhis/his/service/impl/OracleSysServiceImpl.java index 712fb563f..cc578e8cb 100644 --- a/ruoyi-admin/src/main/java/com/neuhis/his/service/impl/OracleSysServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/neuhis/his/service/impl/OracleSysServiceImpl.java @@ -1,6 +1,8 @@ package com.neuhis.his.service.impl; +import cn.hutool.core.codec.Base64; import cn.hutool.core.collection.ListUtil; +import com.fasterxml.jackson.databind.ser.Serializers; import com.neuhis.his.domain.dto.DeadLockRac; import com.ruoyi.common.annotation.DataSource; import com.ruoyi.common.enums.DataSourceType; diff --git a/ruoyi-admin/src/main/java/com/neuhis/his/service/impl/winlis/LasSapSampleregServiceImpl.java b/ruoyi-admin/src/main/java/com/neuhis/his/service/impl/winlis/LasSapSampleregServiceImpl.java index b66216cf4..167091f51 100644 --- a/ruoyi-admin/src/main/java/com/neuhis/his/service/impl/winlis/LasSapSampleregServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/neuhis/his/service/impl/winlis/LasSapSampleregServiceImpl.java @@ -1,5 +1,7 @@ package com.neuhis.his.service.impl.winlis; +import java.util.Collections; +import java.util.Date; import java.util.List; import cn.hutool.core.bean.BeanUtil; @@ -7,10 +9,14 @@ import cn.hutool.core.lang.Opt; import cn.hutool.core.util.StrUtil; import com.neuhis.his.domain.entity.winlis.LasRolPerson; import com.neuhis.his.domain.entity.winlis.LasRtResult; +import com.neuhis.his.domain.entity.winlis.LasSapCadata; import com.neuhis.his.domain.entity.winlis.LasSapSamplereg; +import com.neuhis.his.domain.vo.bjca.CaResultVo; +import com.neuhis.his.domain.vo.winlis.LasSapCadataWatingSignVo; import com.neuhis.his.domain.vo.winlis.LasSapSampleregVo; import com.neuhis.his.mapper.winlis.LasRolPersonMapper; import com.neuhis.his.mapper.winlis.LasRtResultMapper; +import com.neuhis.his.mapper.winlis.LasSapCadataMapper; import com.neuhis.his.mapper.winlis.LasSapSampleregMapper; import com.neuhis.his.service.winlis.ILasSapSampleregService; import com.ruoyi.common.annotation.DataSource; @@ -35,23 +41,10 @@ public class LasSapSampleregServiceImpl implements ILasSapSampleregService private LasRtResultMapper lasRtResultMapper; @Autowired private LasRolPersonMapper latestRolPersonMapper; + @Autowired + private LasSapCadataMapper lasSapCadataMapper; - /** - * - - * - * @param testdate 常规检验登记表 -主键 - * @return 常规检验登记表 - - */ - @Override - public LasSapSamplereg selectLasSapSampleregByTestdate(String testdate, String machineid, String sampleId) - { - return lasSapSampleregMapper.selectLasSapSampleregByTestdate(testdate, machineid, sampleId); - } - @Override public LasSapSampleregVo selectLasSapSampleregVo(String testdate, String machineid, String sampleId) { //region 查询1:条码信息 Winlis.las_sap_samplereg @@ -78,14 +71,39 @@ public class LasSapSampleregServiceImpl implements ILasSapSampleregService return vo; } - /** - * - * @param lasSapSamplereg 常规检验登记表 - * @return 常规检验登记表 - */ @Override - public List selectLasSapSampleregList(LasSapSamplereg lasSapSamplereg) - { - return lasSapSampleregMapper.selectLasSapSampleregList(lasSapSamplereg); + public List selectWaitingCaSignList(String testdateLike, Integer limit) { + return lasSapCadataMapper.selectWaitingCaSignList(testdateLike, limit); + } + + @Override + public int insertLasSapCaData(LasSapCadataWatingSignVo watingSignVo, CaResultVo caResultVo) { + if (watingSignVo == null || caResultVo == null) { + return 0; + } + LasSapCadata cadata = new LasSapCadata(); + cadata.setTestdate(watingSignVo.getTestdate()); + cadata.setMachineid(watingSignVo.getMachineid()); + cadata.setSampleid(watingSignVo.getSampleid()); + cadata.setBarcode(watingSignVo.getBarcode()); + + cadata.setSrcdata(caResultVo.getOriData()); + cadata.setSrcclobdata(caResultVo.getOriDataBase64()); + cadata.setCatime(new Date()); + cadata.setCaid(caResultVo.getSignDataId()); + + /** + * CA数据,形如: + * 签名结果: + * 时间戳: + * 证书: + */ + String caclobdata = + "签名结果:" + caResultVo.getSignResult() + "\n" + +"时间戳:" + caResultVo.getTimeciphertext() + "\n" + +"证书:" + caResultVo.getSignCert() + ; + cadata.setCaclobdata(caclobdata); + return lasSapCadataMapper.insertLasSapCadata(cadata); } } diff --git a/ruoyi-admin/src/main/java/com/neuhis/his/service/impl/winlis/WinLisServiceImpl.java b/ruoyi-admin/src/main/java/com/neuhis/his/service/impl/winlis/WinLisServiceImpl.java index d63e343b5..d2440e3ea 100644 --- a/ruoyi-admin/src/main/java/com/neuhis/his/service/impl/winlis/WinLisServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/neuhis/his/service/impl/winlis/WinLisServiceImpl.java @@ -4,10 +4,12 @@ import cn.hutool.core.codec.Base64; import cn.hutool.core.date.DatePattern; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.StrUtil; +import com.google.common.util.concurrent.ThreadFactoryBuilder; import com.neuhis.his.domain.entity.winlis.LasRtResult; import com.neuhis.his.domain.vo.bjca.BjCaResult; import com.neuhis.his.domain.vo.bjca.CaResultVo; import com.neuhis.his.domain.vo.bjca.CaStartVo; +import com.neuhis.his.domain.vo.winlis.LasSapCadataWatingSignVo; import com.neuhis.his.domain.vo.winlis.LasSapSampleregVo; import com.neuhis.his.service.IBjCaService; import com.neuhis.his.service.winlis.ILasSapSampleregService; @@ -20,8 +22,10 @@ import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.List; - -import static cn.hutool.core.date.DatePattern.NORM_DATETIME_PATTERN; +import java.util.concurrent.ArrayBlockingQueue; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicInteger; /** * Winlis相关 @@ -33,10 +37,27 @@ import static cn.hutool.core.date.DatePattern.NORM_DATETIME_PATTERN; @Service @DataSource(value = DataSourceType.WINLIS) public class WinLisServiceImpl implements IWinLisService { + /** + * 线程池 + * Executors.newFixedThreadPool(10); + * 这里不限制大小,线程会按照最大能力,开启,限制了大小,比如:10, 就一共只开启这么多线程 + * 核心线程:60个;当线程超过核心线程会增加到最大线程:120个;当超过队列:500个,就会抛弃掉; + * 队列数量不能太多:否则oom + */ + private static ThreadPoolExecutor executorService = new ThreadPoolExecutor(20, 50, 60L, TimeUnit.SECONDS, + new ArrayBlockingQueue<>(5000), new ThreadFactoryBuilder().setNameFormat("winlisca-task-thread-pool-%d").build()); @Autowired private ILasSapSampleregService lasSapSampleregService; @Autowired private IBjCaService bjCaService; + /** + * startAutoSign启动自动签名获取的签名数据,[签名任务id] + * 使用过的任务id: SD_4c6ec5f6-22e3-4fae-b2aa-681e5beacf1e + * 使用过的任务id: SD_892d8817-4a96-445c-a5c1-2eb9f334fecc + */ + private String autoSignSignDataId = "SD_4c6ec5f6-22e3-4fae-b2aa-681e5beacf1e"; + + @Override public String getWinLisCaOriginText(String testdate, String machineid, String sampleId) { LasSapSampleregVo reg = lasSapSampleregService.selectLasSapSampleregVo(testdate, machineid, sampleId); @@ -230,7 +251,7 @@ public class WinLisServiceImpl implements IWinLisService { //region 2、北京CA自动签名 BjCaResult autoSignRe = bjCaService.autoSign(autoSignSignDataId, Base64.encode(originText)); - if (autoSignRe == null || !autoSignRe.isSuccess()) { + if (autoSignRe == null) { return null; } //endregion @@ -255,6 +276,26 @@ public class WinLisServiceImpl implements IWinLisService { return caResultVo; } + @Override + public int winlistCaTask(String testdateLike, Integer limit) { + AtomicInteger successNum = new AtomicInteger(); + List watingSignVos = lasSapSampleregService.selectWaitingCaSignList(testdateLike, limit); + for (LasSapCadataWatingSignVo vo : watingSignVos) { + AtomicInteger i = new AtomicInteger(); + executorService.execute(() -> { + log.debug("开始winlistCaTask, index = {}", i.incrementAndGet()); + String originText = getWinLisCaOriginText(vo.getTestdate(), vo.getMachineid(), vo.getSampleid()); + CaResultVo caResultVo = generateBjCaInfo(vo.getTestdate(), vo.getMachineid(), vo.getSampleid(), autoSignSignDataId); + if (StrUtil.isEmpty(originText) || caResultVo == null) { + return; + } + int result = lasSapSampleregService.insertLasSapCaData(vo, caResultVo); + successNum.addAndGet(result); + }); + } + return successNum.get(); + } + private String strDef(String str) { if ("null".equalsIgnoreCase(str)) { return ""; diff --git a/ruoyi-admin/src/main/java/com/neuhis/his/service/winlis/ILasSapSampleregService.java b/ruoyi-admin/src/main/java/com/neuhis/his/service/winlis/ILasSapSampleregService.java index 4f5568d1e..f0a6f2a46 100644 --- a/ruoyi-admin/src/main/java/com/neuhis/his/service/winlis/ILasSapSampleregService.java +++ b/ruoyi-admin/src/main/java/com/neuhis/his/service/winlis/ILasSapSampleregService.java @@ -1,6 +1,9 @@ package com.neuhis.his.service.winlis; +import com.neuhis.his.domain.entity.winlis.LasSapCadata; import com.neuhis.his.domain.entity.winlis.LasSapSamplereg; +import com.neuhis.his.domain.vo.bjca.CaResultVo; +import com.neuhis.his.domain.vo.winlis.LasSapCadataWatingSignVo; import com.neuhis.his.domain.vo.winlis.LasSapSampleregVo; import java.util.List; @@ -14,29 +17,21 @@ Service接口 */ public interface ILasSapSampleregService { - /** - * - - * - * @param testdate 常规检验登记表 -主键 - * @return 常规检验登记表 - - */ - LasSapSamplereg selectLasSapSampleregByTestdate(String testdate, String machineid, String sampleId); - /** * 返回一个试管检验条码信息和检验结果明细信息 * @param testdate 检验时间 - * @param barcode 条码 * @param machineid 机器 + * @param sampleId 样本号 */ LasSapSampleregVo selectLasSapSampleregVo(String testdate, String machineid, String sampleId); + /** + * 查询等待CA签名的列表 + * @param testdateLike,查询时间:2025,202503 + */ + List selectWaitingCaSignList(String testdateLike, Integer limit); /** - * - * @param lasSapSamplereg 常规检验登记表 - * @return 常规检验登记表 + * 插入CA数据 */ - List selectLasSapSampleregList(LasSapSamplereg lasSapSamplereg); + int insertLasSapCaData(LasSapCadataWatingSignVo watingSignVo, CaResultVo caResultVo); } diff --git a/ruoyi-admin/src/main/java/com/neuhis/his/service/winlis/IWinLisService.java b/ruoyi-admin/src/main/java/com/neuhis/his/service/winlis/IWinLisService.java index d5688a8c0..a6066cc6d 100644 --- a/ruoyi-admin/src/main/java/com/neuhis/his/service/winlis/IWinLisService.java +++ b/ruoyi-admin/src/main/java/com/neuhis/his/service/winlis/IWinLisService.java @@ -22,4 +22,6 @@ public interface IWinLisService { * 生成北京CA签名信息 */ CaResultVo generateBjCaInfo(String testdate, String machineid, String sampleId, String autoSignSignDataId); + + int winlistCaTask(String testdateLike, Integer limit); } diff --git a/ruoyi-admin/src/main/java/com/neuhis/quartz/task/HisTask.java b/ruoyi-admin/src/main/java/com/neuhis/quartz/task/HisTask.java index 387998c3c..389689c1a 100644 --- a/ruoyi-admin/src/main/java/com/neuhis/quartz/task/HisTask.java +++ b/ruoyi-admin/src/main/java/com/neuhis/quartz/task/HisTask.java @@ -5,6 +5,7 @@ import com.neuhis.his.domain.dto.DeadLock; import com.neuhis.his.domain.dto.DeadLockRac; import com.neuhis.his.push.OracleSlaveDataAutoPushService; import com.neuhis.his.service.IOracleSysService; +import com.neuhis.his.service.winlis.IWinLisService; import com.neuhis.quartz.task.common.JobService; import com.ruoyi.common.config.RuoYiConfig; import com.neuhis.quartz.task.common.JobSwitchConstant; @@ -31,6 +32,8 @@ public class HisTask { private IOracleSysService oracleSysService; @Autowired private RuoYiConfig ruoYiConfig; + @Autowired + private IWinLisService winLisService; public void pushData() { @@ -82,4 +85,13 @@ public class HisTask { log.info("日志数据删除结束,共删除 "+num+" 条日志。" + DateUtil.format(DateUtil.date(), "yyyy-MM-dd HH:mm:ss")); } } + + public void winlisCaTask(String testdateLike, Integer limit) + { + if (ruoYiConfig.isQuzrtzTask()) { + log.info("winlisCA数据推送开始" + DateUtil.format(DateUtil.date(), "yyyy-MM-dd HH:mm:ss")); + winLisService.winlistCaTask(testdateLike,limit); + log.info("winlisCA数据推送结束" + DateUtil.format(DateUtil.date(), "yyyy-MM-dd HH:mm:ss")); + } + } } diff --git a/ruoyi-admin/src/main/resources/mapper/winlis/LasSapCadataMapper.xml b/ruoyi-admin/src/main/resources/mapper/winlis/LasSapCadataMapper.xml index 9b628669f..574014528 100644 --- a/ruoyi-admin/src/main/resources/mapper/winlis/LasSapCadataMapper.xml +++ b/ruoyi-admin/src/main/resources/mapper/winlis/LasSapCadataMapper.xml @@ -20,20 +20,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" select catime, testdate, machineid, sampleid, barcode, srcdata, caclobdata, srcclobdata, caid from las_sap_cadata - - - + select r.* from ( + select t.testdate, t.machineid, t.sampleid, t.barcode from Winlis.las_sap_samplereg t where not exists + (select 1 from winlis.las_sap_cadata c where c.testdate = t.testdate and c.machineid = t.machineid and c.sampleid = t.sampleid) + and t.approvetime is not null + and t.testdate like #{srcclobdata}||'%' order by t.testdate desc + ) r where rownum #{rownum} @@ -74,16 +67,4 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" where catime = #{catime} - - - delete from las_sap_cadata where catime = #{catime} - - - - delete from las_sap_cadata where catime in - - #{catime} - - - \ No newline at end of file diff --git a/ruoyi-admin/src/main/resources/mapper/winlis/LasSapSampleregMapper.xml b/ruoyi-admin/src/main/resources/mapper/winlis/LasSapSampleregMapper.xml index 73414fa43..35bb7b433 100644 --- a/ruoyi-admin/src/main/resources/mapper/winlis/LasSapSampleregMapper.xml +++ b/ruoyi-admin/src/main/resources/mapper/winlis/LasSapSampleregMapper.xml @@ -108,106 +108,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" select testdate, machineid, sampleid, barcode, patienttype, patientid, patientseq, patientname, patientsex, patientage, patientageunit, patienttel, patientbedno, patientidenno, patientrace, patientsite, execsqn, emc, hisitemidlist, hisitemnamelist, hisitemprice, doctorid, doctorname, deptid, deptname, ordertime, execdeptid, execdeptname, wardid, wardname, sampletype, urineqty, samplestate, sampleposition, diagnosis, confirmstate, printstate, alertstate, state, testtype, groupid, nurseid, nursename, sampletime, senderid, sendername, sendtime, sendformid, inceptorid, inceptorname, incepttime, accepterid, acceptername, accepttime, approverid, approvername, approvetime, memo, rackcup, printedtime, printerid, printername, checktime, resulttime, hospitalid, sampleid2, lismemo, birthday, extrainfo, planitemcount, actualitemcount, testeditemcount, ishighrisk, isgcp, barcode2, barprinttime, documenttime, documentid, documentname, reporttime, samplegetname, samplegetid, state2, lsptestform, execsqn2, diagnosisid, patientid2, patientid3, patientinfo, autoconfirminfo, barcodememo, tjflag, menstrualcycle, translationinfo, mixcode, passportno, patientnameen from las_sap_samplereg - -