From 1707e0f4cab7ac3182de1f1f92178a695c5b09fe Mon Sep 17 00:00:00 2001 From: xiaodaozi Date: Thu, 22 May 2025 18:36:38 +0800 Subject: [PATCH] =?UTF-8?q?HIS=E5=8C=BB=E4=BF=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/win/yinyitong-dll-stand.bat | 13 ++- .../com/dpkj/common/config/ChsConfig.java | 5 + .../chs/controller/HispayController.java | 37 +++--- .../com/dpkj/modules/chs/dll/HispayDll.java | 13 --- .../modules/chs/service/IHispayService.java | 4 +- .../chs/service/impl/HispayServiceImpl.java | 108 ++++++++++++++---- src/main/resources/application-pro.yml | 2 + src/main/resources/logback-spring.xml | 6 +- 8 files changed, 129 insertions(+), 59 deletions(-) diff --git a/doc/win/yinyitong-dll-stand.bat b/doc/win/yinyitong-dll-stand.bat index 3b7f810..6233cf4 100644 --- a/doc/win/yinyitong-dll-stand.bat +++ b/doc/win/yinyitong-dll-stand.bat @@ -7,14 +7,17 @@ set NAME=yinyitong-dll-stand :: 端口号 set PROT=5946 -echo 关闭%PROT%端口进程 +echo 关闭端口进程:%PROT% for /f "tokens=1-5" %%i in ('netstat -ano^|findstr ":%PROT%"') do taskkill /pid %%m -t -f -echo 启动%NAME% +echo 启动:%NAME% -start javaw -jar %~dp0\%NAME%.jar --server.port=%PROT% -Dfile.encoding=UTF-8 -Djava.library.path=%CHSPATH% +cd %CHSPATH% + +start javaw.exe -Dfile.encoding=UTF-8 -Djava.library.path=%CHSPATH% -Dlog.path=%~dp0 -jar %~dp0\%NAME%.jar --server.port=%PROT% echo 启动完成 -::exit -pause +exit +::pause + diff --git a/src/main/java/com/dpkj/common/config/ChsConfig.java b/src/main/java/com/dpkj/common/config/ChsConfig.java index 17ef7b5..9a08570 100644 --- a/src/main/java/com/dpkj/common/config/ChsConfig.java +++ b/src/main/java/com/dpkj/common/config/ChsConfig.java @@ -19,4 +19,9 @@ public class ChsConfig { */ private String orgcode; + /** + * 鍖讳繚璇诲崱涔嬪悗淇濆瓨淇℃伅鐨勬枃浠跺悕 + */ + private String fileName; + } diff --git a/src/main/java/com/dpkj/modules/chs/controller/HispayController.java b/src/main/java/com/dpkj/modules/chs/controller/HispayController.java index 8bd9b52..67b775c 100644 --- a/src/main/java/com/dpkj/modules/chs/controller/HispayController.java +++ b/src/main/java/com/dpkj/modules/chs/controller/HispayController.java @@ -4,11 +4,14 @@ import cn.hutool.core.date.DatePattern; import cn.hutool.core.date.DateUnit; import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Console; +import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSONObject; import com.dpkj.common.vo.Result; import com.dpkj.modules.chs.service.IHispayService; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.Mapping; +import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; @@ -28,26 +31,28 @@ public class HispayController { private final IHispayService iHispayService; - @RequestMapping("getPatientInfo") - public Result getPatientInfo() { + /** + * 閫氳繃鍖讳繚鍗℃垨鍖讳繚鐢靛瓙鍑瘉璇诲崱 + * + * @param data : type 1.灏辫瘖鍗★紝2.鍖讳繚鍗★紝5.闂ㄨ瘖鍙凤紝6.鎮h呭鍚嶅拰鐢佃瘽鍙风爜锛8.鐢靛瓙鍋ュ悍鐮/鍗★紝9.鍖讳繚鐢靛瓙鍑瘉 + * @return com.dpkj.common.vo.Result + * @author 钀ч亾瀛 2025/5/20 + */ + @PostMapping("findReadCard") + public Result findReadCard(@RequestBody JSONObject data) { try { - iHispayService.getPatientInfo("2", null); - return Result.ok("鎴愬姛", null); + String type = data.getString("type"); + if (StrUtil.isEmpty(type)) { + throw new RuntimeException("鍙傛暟缂哄け"); + } + log.info("[HispayController][getPatientInfo][鍖讳繚璇诲崱] 璇诲崱绫诲瀷锛歿}", type); + JSONObject res = iHispayService.getPatientInfo(type, null); + return Result.ok("鎴愬姛", res); } catch (Exception e) { e.printStackTrace(); - return Result.error("澶辫触"); + log.error("[HispayController][getPatientInfo][鍖讳繚璇诲崱] 锛歿}", e.getMessage()); + return Result.error(e.getMessage()); } } - - @RequestMapping("t1") - public Result t1(@RequestBody JSONObject map) throws InterruptedException { - // Console.log("41 - {}\n", map); - // Thread.sleep(100); - String format = DateUtil.format(DateUtil.date(), DatePattern.PURE_DATETIME_MS_FORMAT); - System.out.println(format); - return Result.ok("鎴愬姛", format); - } - - } diff --git a/src/main/java/com/dpkj/modules/chs/dll/HispayDll.java b/src/main/java/com/dpkj/modules/chs/dll/HispayDll.java index 55b3d8d..cd31aa1 100644 --- a/src/main/java/com/dpkj/modules/chs/dll/HispayDll.java +++ b/src/main/java/com/dpkj/modules/chs/dll/HispayDll.java @@ -14,18 +14,5 @@ import lombok.extern.slf4j.Slf4j; @Slf4j public class HispayDll { - /** - * 鑾峰彇 AlipayDll 瀹炰緥锛屽悓鏃舵敞鍐 AlipayDll 鎺т欢銆 - */ - public static ActiveXComponent instance() { - try { - ActiveXComponent active = new ActiveXComponent("PayClient.clsPayClient"); - log.info("[HispayDll][getPrintSDK][HIS鍖讳繚COM搴揮 鍔犺浇鎴愬姛"); - return active; - } catch (UnsatisfiedLinkError e) { - log.error("[HispayDll][getPrintSDK][HIS鍖讳繚COM搴揮 鍔犺浇澶辫触锛歿}", e.getMessage()); - return null; - } - } } diff --git a/src/main/java/com/dpkj/modules/chs/service/IHispayService.java b/src/main/java/com/dpkj/modules/chs/service/IHispayService.java index 59e8b23..0875059 100644 --- a/src/main/java/com/dpkj/modules/chs/service/IHispayService.java +++ b/src/main/java/com/dpkj/modules/chs/service/IHispayService.java @@ -1,5 +1,7 @@ package com.dpkj.modules.chs.service; +import com.alibaba.fastjson.JSONObject; + public interface IHispayService { /** @@ -10,5 +12,5 @@ public interface IHispayService { * @return void * @author 钀ч亾瀛 2025/4/28 */ - void getPatientInfo(String type, String content); + JSONObject getPatientInfo(String type, String content); } diff --git a/src/main/java/com/dpkj/modules/chs/service/impl/HispayServiceImpl.java b/src/main/java/com/dpkj/modules/chs/service/impl/HispayServiceImpl.java index 625998f..4ba246d 100644 --- a/src/main/java/com/dpkj/modules/chs/service/impl/HispayServiceImpl.java +++ b/src/main/java/com/dpkj/modules/chs/service/impl/HispayServiceImpl.java @@ -1,15 +1,19 @@ package com.dpkj.modules.chs.service.impl; import cn.hutool.core.date.DateUtil; +import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.file.FileReader; import cn.hutool.core.lang.Console; import cn.hutool.core.util.CharsetUtil; import cn.hutool.core.util.XmlUtil; import com.alibaba.fastjson.JSONObject; +import com.dpkj.common.config.ChsConfig; import com.dpkj.common.config.HisConfig; import com.dpkj.common.utils.IDGenerator; import com.dpkj.modules.chs.dll.HispayDll; import com.dpkj.modules.chs.service.IHispayService; import com.jacob.activeX.ActiveXComponent; +import com.jacob.com.ComThread; import com.jacob.com.Dispatch; import com.jacob.com.Variant; import lombok.AllArgsConstructor; @@ -20,6 +24,7 @@ import org.springframework.stereotype.Service; import org.w3c.dom.Document; import javax.annotation.PostConstruct; +import java.io.File; import java.lang.reflect.Method; import java.util.Map; @@ -31,26 +36,29 @@ import java.util.Map; */ @Slf4j @Service +@AllArgsConstructor public class HispayServiceImpl implements IHispayService { - @Autowired - private HisConfig hisConfig; - - private static ActiveXComponent dll = HispayDll.instance(); - - // @PostConstruct - public void postConstruct() { - log.info("[HispayServiceImpl][postConstruct][鍖讳繚DLL-HIS] 鍒濆鍖栧姩鎬侀摼鎺ュ簱"); - initPrinter(); - } - - - private void initPrinter() { - } + private final HisConfig hisConfig; + private final ChsConfig chsConfig; @Override - public void getPatientInfo(String type, String content) { + public JSONObject getPatientInfo(String type, String content) { + Dispatch dispatch = instanceActive(); + + /** + * 1銆佸垹闄や繚瀛楬IS璇诲崱鍐呭鐨勬枃浠 閬垮厤璇诲彇鍒伴敊璇俊鎭 + */ + // 鑾峰彇HIS-CHS鍖讳繚搴撹矾寰 + String chsPath = System.getProperty("java.library.path"); + String filePath = chsPath + "/" + chsConfig.getFileName(); + // 鍒犻櫎鏂囦欢 + FileUtil.del(FileUtil.file(filePath)); + + /** + * 2銆佺粍瑁呭弬鏁 + */ String soleid = IDGenerator.getSnowflakeIdToStr(); JSONObject req = new JSONObject() {{ put("timestamp", DateUtil.format(DateUtil.date(), "yyyyMMddHHmmss")); // 璇锋眰鍙戦佹椂闂 @@ -65,16 +73,74 @@ public class HispayServiceImpl implements IHispayService { put("phone", ""); // 鎮h呯數璇濆彿鐮 }}); }}; - Document document = XmlUtil.mapToXml(req, "request"); - String reqParams = XmlUtil.toStr(document, "UTF-8", true, true); - Console.log("75 - {}\n", reqParams); + String params = XmlUtil.toStr(document, "UTF-8", false, true); + log.info("[HispayServiceImpl][getPatientInfo][鍖讳繚璇诲崱] 鎺ュ彛鍏ュ弬锛歿}", params); - String rest = ""; + /** + * 3銆佽皟鐢–OM鍑芥暟 + */ + Variant rest = new Variant(); + Variant call = Dispatch.call(dispatch, "fRun", "BMZXX010", params, rest); + log.info("[HispayServiceImpl][getPatientInfo][鍖讳繚璇诲崱] call杩斿洖鍊硷細{}", call); - Variant call = Dispatch.call(dll.getObject(), "fRun", "BMZXX010", reqParams, rest); + // 閲婃斁璧勬簮 + releaseActive(); - Console.log("82 - {}\n", call); + /** + * 4銆佸鐞嗚鍗$粨鏋 + */ + // COM鍑芥暟璋冪敤涔嬪悗浼氱敓鎴愭柊鐨勬枃浠 闇瑕佸垽鏂 + File file = FileUtil.file(filePath); + if (!file.exists()) { + throw new RuntimeException("璇诲崱澶辫触锛氭暟鎹湭璇诲彇"); + } + // 鑾峰彇璇诲崱缁撴灉 + FileReader fileReader = new FileReader(file, "GBK"); + String data = fileReader.readString(); + + JSONObject result; + try { + result = JSONObject.parseObject(data); + log.info("[HispayServiceImpl][getPatientInfo][鍖讳繚璇诲崱] 璇诲崱鍊硷細{}", result); + } catch (Exception e) { + throw new RuntimeException("璇诲崱澶辫触锛" + data); + } + return result; } + + + /** + * 鑾峰彇HIS鍖讳繚瀹炰緥 + * + * @return com.jacob.activeX.ActiveXComponent + * @author 钀ч亾瀛 2025/5/21 + */ + private Dispatch instanceActive() { + try { + // 鍒濆鍖 + ComThread.InitSTA(); + // 鑾峰彇COM瀵硅薄 + ActiveXComponent active = new ActiveXComponent("PayClient.clsPayClient"); + log.info("[HispayServiceImpl][instanceActive][HIS鍖讳繚COM搴揮 鍔犺浇鎴愬姛"); + return active; + } catch (UnsatisfiedLinkError e) { + log.info("[HispayServiceImpl][instanceActive][HIS鍖讳繚COM搴揮 鍔犺浇澶辫触锛歿}", e.getMessage()); + throw new RuntimeException("HIS鍖讳繚COM搴撳姞杞藉け璐ワ細" + e.getMessage(), e); + } + } + + + /** + * 閲婃斁璧勬簮 + * + * @return void + * @author 钀ч亾瀛 2025/5/21 + */ + private void releaseActive() { + ComThread.Release(); + } + + } diff --git a/src/main/resources/application-pro.yml b/src/main/resources/application-pro.yml index efbbdd2..5c2994a 100644 --- a/src/main/resources/application-pro.yml +++ b/src/main/resources/application-pro.yml @@ -9,6 +9,8 @@ dpkj: chs: # 鍖讳繚鏈烘瀯缂栫爜 orgcode: H53082800070 + # 鍖讳繚璇诲崱涔嬪悗淇濆瓨淇℃伅鐨勬枃浠跺悕 + file-name: outfile1191.txt file: # 鏂囦欢淇濆瓨鍦板潃 path: D:\Project\Express\upload diff --git a/src/main/resources/logback-spring.xml b/src/main/resources/logback-spring.xml index 4be9829..226d8a2 100644 --- a/src/main/resources/logback-spring.xml +++ b/src/main/resources/logback-spring.xml @@ -1,7 +1,7 @@ - + @@ -70,8 +70,8 @@ - - + +