From 9ea1026daa6fc03a1b008b50ce48ff6ba3b21348 Mon Sep 17 00:00:00 2001 From: xiaodaozi Date: Thu, 12 Jun 2025 11:30:33 +0800 Subject: [PATCH] =?UTF-8?q?=E7=94=B5=E5=AD=90=E5=8C=BB=E4=BF=9D=E5=87=AD?= =?UTF-8?q?=E8=AF=81=E6=94=AF=E4=BB=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/win/yinyitong-dll-stand.bat | 12 +-- pom.xml | 12 +-- .../common/exception/ControllerAdvice.java | 7 +- .../java/com/dpkj/common/vo/ResultData.java | 45 +++++++++++ .../chs/controller/HispayController.java | 30 ++++---- .../modules/chs/service/IHispayService.java | 10 ++- .../chs/service/impl/HispayServiceImpl.java | 77 ++++++++++++++----- ...etModel.java => OutpatientBeginModel.java} | 3 +- .../modules/chs/vo/OutpatientFinalModel.java | 47 +++++++++++ src/main/resources/application.yml | 4 + 10 files changed, 188 insertions(+), 59 deletions(-) create mode 100644 src/main/java/com/dpkj/common/vo/ResultData.java rename src/main/java/com/dpkj/modules/chs/vo/{OutpatientBudgetModel.java => OutpatientBeginModel.java} (89%) create mode 100644 src/main/java/com/dpkj/modules/chs/vo/OutpatientFinalModel.java diff --git a/doc/win/yinyitong-dll-stand.bat b/doc/win/yinyitong-dll-stand.bat index 6233cf4..7f08c75 100644 --- a/doc/win/yinyitong-dll-stand.bat +++ b/doc/win/yinyitong-dll-stand.bat @@ -1,22 +1,22 @@ @echo off -:: 医保程序地址 +:: 鍖讳繚绋嬪簭鍦板潃 set CHSPATH=D:/Project/CHS -:: jar名称 +:: jar鍚嶇О 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% cd %CHSPATH% start javaw.exe -Dfile.encoding=UTF-8 -Djava.library.path=%CHSPATH% -Dlog.path=%~dp0 -jar %~dp0\%NAME%.jar --server.port=%PROT% -echo 启动完成 +echo 鍚姩瀹屾垚 exit ::pause diff --git a/pom.xml b/pom.xml index 32d2e84..a5d3514 100644 --- a/pom.xml +++ b/pom.xml @@ -36,6 +36,12 @@ true + + + org.springframework.boot + spring-boot-starter-validation + + org.springframework.boot spring-boot-starter-test @@ -136,12 +142,6 @@ 3.1.28 - - - javax.validation - validation-api - 2.0.1.Final - diff --git a/src/main/java/com/dpkj/common/exception/ControllerAdvice.java b/src/main/java/com/dpkj/common/exception/ControllerAdvice.java index c346e7a..d5cb6f0 100644 --- a/src/main/java/com/dpkj/common/exception/ControllerAdvice.java +++ b/src/main/java/com/dpkj/common/exception/ControllerAdvice.java @@ -5,8 +5,6 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.http.converter.HttpMessageNotReadableException; import org.springframework.stereotype.Component; import org.springframework.stereotype.Controller; -import org.springframework.validation.BindingResult; -import org.springframework.validation.FieldError; import org.springframework.web.HttpRequestMethodNotSupportedException; import org.springframework.web.bind.MethodArgumentNotValidException; import org.springframework.web.bind.MissingServletRequestParameterException; @@ -15,9 +13,6 @@ import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestControllerAdvice; import org.springframework.web.method.annotation.MethodArgumentTypeMismatchException; -import java.util.HashMap; -import java.util.List; -import java.util.Map; import java.util.stream.Collectors; /** @@ -44,7 +39,7 @@ public class ControllerAdvice { .getFieldErrors() .parallelStream() .map(m -> /*m.getField() + ":" +*/ m.getDefaultMessage()) - .collect(Collectors.joining("锛")); + .collect(Collectors.joining("銆")); log.error(e.getMessage(), e); return Result.error(errMsg); } diff --git a/src/main/java/com/dpkj/common/vo/ResultData.java b/src/main/java/com/dpkj/common/vo/ResultData.java new file mode 100644 index 0000000..a6e2f18 --- /dev/null +++ b/src/main/java/com/dpkj/common/vo/ResultData.java @@ -0,0 +1,45 @@ +package com.dpkj.common.vo; + +import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +/** + * 鎺ュ彛杩斿洖鏁版嵁鏍煎紡 + */ +@Data +@Accessors(chain = true) +public class ResultData implements Serializable { + private static final long serialVersionUID = 1L; + + /** + * 璇锋眰鏃堕棿 + */ + private String requestTime; + + /** + * 璇锋眰鍐呭 + */ + private String requestContent; + + /** + * 鍝嶅簲鏃堕棿 + */ + private String responseTime; + + /** + * 鍝嶅簲鍐呭 + */ + private String responseContent; + + /** + * 鎮h匢D + */ + private String patientId; + + /** + * 澶勭悊鍚庣殑鍝嶅簲鍐呭 + */ + private Object result; +} 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 e325aa1..09c9ad1 100644 --- a/src/main/java/com/dpkj/modules/chs/controller/HispayController.java +++ b/src/main/java/com/dpkj/modules/chs/controller/HispayController.java @@ -3,8 +3,10 @@ package com.dpkj.modules.chs.controller; import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSONObject; import com.dpkj.common.vo.Result; +import com.dpkj.common.vo.ResultData; import com.dpkj.modules.chs.service.IHispayService; -import com.dpkj.modules.chs.vo.OutpatientBudgetModel; +import com.dpkj.modules.chs.vo.OutpatientBeginModel; +import com.dpkj.modules.chs.vo.OutpatientFinalModel; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.validation.annotation.Validated; @@ -78,15 +80,15 @@ public class HispayController { * @return com.dpkj.common.vo.Result * @author 钀ч亾瀛 2025/5/27 */ - @PostMapping("outpatientBudgetByCode") - public Result outpatientBudgetByCode(@RequestBody @Validated OutpatientBudgetModel data) { + @PostMapping("chsCodeAsOutpatientBegin") + public Result chsCodeAsOutpatientBegin(@RequestBody @Validated OutpatientBeginModel data) { try { - log.info("[HispayController][outpatientBudgetByCode][闂ㄨ瘖缂磋垂-棰勭畻-鐢靛瓙鍖讳繚鍑瘉] 鍙傛暟锛歿}", data); - JSONObject res = iHispayService.outpatientBudgetByCode(data); + log.info("[HispayController][chsCodeAsOutpatientBegin][闂ㄨ瘖缂磋垂-棰勭畻-鐢靛瓙鍖讳繚鍑瘉] 鍙傛暟锛歿}", data); + ResultData res = iHispayService.chsCodeAsOutpatientBegin(data); return Result.ok("鎴愬姛", res); } catch (Exception e) { e.printStackTrace(); - log.info("[HispayController][outpatientBudgetByCode][闂ㄨ瘖缂磋垂-棰勭畻-鐢靛瓙鍖讳繚鍑瘉] 澶辫触锛歿}", e.getMessage()); + log.info("[HispayController][chsCodeAsOutpatientBegin][闂ㄨ瘖缂磋垂-棰勭畻-鐢靛瓙鍖讳繚鍑瘉] 澶辫触锛歿}", e.getMessage()); return Result.error(e.getMessage()); } } @@ -99,19 +101,15 @@ public class HispayController { * @return com.dpkj.common.vo.Result * @author 钀ч亾瀛 2025/5/27 */ - @PostMapping("doOutpatientPayment") - public Result doRegistrationPayment(@RequestBody JSONObject data) { + @PostMapping("chsCodeAsOutpatientFinal") + public Result chsCodeAsOutpatientFinal(@RequestBody @Validated OutpatientFinalModel data) { try { - String type = data.getString("type"); - if (StrUtil.isEmpty(type)) { - throw new RuntimeException("鍙傛暟缂哄け"); - } - - log.info("[HispayController][doRegistrationPayment][鎸傚彿-缁撶畻] 鍙傛暟锛歿}", data); - return Result.ok("鎴愬姛", null); + log.info("[HispayController][chsCodeAsOutpatientFinal][闂ㄨ瘖缂磋垂-缁撶畻-鐢靛瓙鍖讳繚鍑瘉] 鍙傛暟锛歿}", data); + ResultData res = iHispayService.chsCodeAsOutpatientFinal(data); + return Result.ok("鎴愬姛", res); } catch (Exception e) { e.printStackTrace(); - log.info("[HispayController][doRegistrationPayment][鎸傚彿-缁撶畻] 澶辫触锛歿}", e.getMessage()); + log.info("[HispayController][chsCodeAsOutpatientFinal][闂ㄨ瘖缂磋垂-缁撶畻-鐢靛瓙鍖讳繚鍑瘉] 澶辫触锛歿}", e.getMessage()); return Result.error(e.getMessage()); } } 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 b458f52..c9a5aef 100644 --- a/src/main/java/com/dpkj/modules/chs/service/IHispayService.java +++ b/src/main/java/com/dpkj/modules/chs/service/IHispayService.java @@ -1,7 +1,9 @@ package com.dpkj.modules.chs.service; import com.alibaba.fastjson.JSONObject; -import com.dpkj.modules.chs.vo.OutpatientBudgetModel; +import com.dpkj.common.vo.ResultData; +import com.dpkj.modules.chs.vo.OutpatientBeginModel; +import com.dpkj.modules.chs.vo.OutpatientFinalModel; public interface IHispayService { @@ -30,16 +32,16 @@ public interface IHispayService { * @return com.dpkj.common.vo.Result * @author 钀ч亾瀛 2025/5/27 */ - JSONObject outpatientBudgetByCode(OutpatientBudgetModel data); + ResultData chsCodeAsOutpatientBegin(OutpatientBeginModel data); /** - * 闂ㄨ瘖缂磋垂-棰勭畻 鍖讳繚鍗℃敮浠 + * 闂ㄨ瘖缂磋垂-缁撶畻 鐢靛瓙鍑瘉鏀粯 * * @param data : * @return com.dpkj.common.vo.Result * @author 钀ч亾瀛 2025/5/27 */ - JSONObject outpatientBudgetByCard(OutpatientBudgetModel data); + ResultData chsCodeAsOutpatientFinal(OutpatientFinalModel data); } 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 d3bd9d0..ab58e58 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,31 +1,26 @@ package com.dpkj.modules.chs.service.impl; -import cn.hutool.core.collection.CollUtil; 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.StrUtil; import cn.hutool.core.util.XmlUtil; +import com.alibaba.fastjson.JSON; 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.common.vo.ResultData; import com.dpkj.modules.chs.service.IHispayService; -import com.dpkj.modules.chs.vo.OutpatientBudgetModel; +import com.dpkj.modules.chs.vo.OutpatientBeginModel; +import com.dpkj.modules.chs.vo.OutpatientFinalModel; import com.jacob.activeX.ActiveXComponent; import com.jacob.com.ComThread; import com.jacob.com.Dispatch; import com.jacob.com.Variant; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.w3c.dom.Document; -import javax.annotation.PostConstruct; -import java.io.File; import java.util.Map; @@ -250,7 +245,7 @@ public class HispayServiceImpl implements IHispayService { // } - private JSONObject outpatientBudget(OutpatientBudgetModel data) { + private ResultData outpatientBudget(OutpatientBeginModel data) { // 鍔犺浇璧勬簮 ActiveXComponent dispatch = instanceActive(); @@ -264,10 +259,13 @@ public class HispayServiceImpl implements IHispayService { String params = processParameters(val, data.getPassword()); log.info("[HispayServiceImpl][outpatientBudget][闂ㄨ瘖缂磋垂-棰勭畻] 鎺ュ彛鍏ュ弬锛歿}", params); + String requestTime = DateUtil.now(); + /** 2銆佽皟鐢–OM鍑芥暟 */ Variant resVariant = new Variant("", true); Variant call = Dispatch.call(dispatch, "fRun", "BMZJF001", params, resVariant); + String responseTime = DateUtil.now(); String resStr = resVariant.getStringRef(); log.info("[HispayServiceImpl][outpatientBudget][闂ㄨ瘖缂磋垂-棰勭畻] call杩斿洖鍊硷細{} 缁撴灉锛歿}", call, resStr); @@ -275,24 +273,65 @@ public class HispayServiceImpl implements IHispayService { releaseActive(); /** 3銆佸鐞嗙粨鏋 */ - return verifyResult(resStr); + JSONObject result = verifyResult(resStr); + + return new ResultData() + .setRequestTime(requestTime) + .setRequestContent(params) + .setResponseTime(responseTime) + .setPatientId(data.getPatientId()) + .setResponseContent(resStr) + .setResult(result); } - @Override - public JSONObject outpatientBudgetByCode(OutpatientBudgetModel data) { - JSONObject userInfo = readCode(); + @Override + public ResultData chsCodeAsOutpatientBegin(OutpatientBeginModel data) { + // 鐢ㄦ埛璇诲崱-鐢熸垚token + JSONObject userInfo = readCode(); String patientId = userInfo.getString("patid"); data.setPatientId(patientId); - JSONObject result = outpatientBudget(data); - - return result; + return outpatientBudget(data); } @Override - public JSONObject outpatientBudgetByCard(OutpatientBudgetModel data) { - return null; + public ResultData chsCodeAsOutpatientFinal(OutpatientFinalModel data) { + // 鍔犺浇璧勬簮 + ActiveXComponent dispatch = instanceActive(); + + /** 1銆佺粍瑁呭弬鏁 */ + JSONObject val = (JSONObject) JSON.toJSON(data); + String params = processParameters(val, null); + log.info("[HispayServiceImpl][chsCodeAsOutpatientFinal][闂ㄨ瘖缂磋垂-缁撶畻] 鎺ュ彛鍏ュ弬锛歿}", params); + + String requestTime = DateUtil.now(); + + /** 2銆佽皟鐢–OM鍑芥暟 */ + Variant resVariant = new Variant("", true); + Variant call = Dispatch.call(dispatch, "fRun", "BMZJF002", params, resVariant); + + String responseTime = DateUtil.now(); + String resStr = resVariant.getStringRef(); + log.info("[HispayServiceImpl][chsCodeAsOutpatientFinal][闂ㄨ瘖缂磋垂-缁撶畻] call杩斿洖鍊硷細{} 缁撴灉锛歿}", call, resStr); + + // 閲婃斁璧勬簮 + releaseActive(); + + // TODO BEGIN 钀ч亾瀛 2025/6/10 : 妯℃嫙鍙傛暟 + // String resStr = "01234567892025-06-10 10:23:14"; + // TODO END 钀ч亾瀛 2025/6/10 : 妯℃嫙鍙傛暟 + + /** 3銆佸鐞嗙粨鏋 */ + JSONObject result = verifyResult(resStr); + + return new ResultData() + .setRequestTime(requestTime) + .setRequestContent(params) + .setResponseTime(responseTime) + .setPatientId(data.getPatid()) + .setResponseContent(resStr) + .setResult(result); } diff --git a/src/main/java/com/dpkj/modules/chs/vo/OutpatientBudgetModel.java b/src/main/java/com/dpkj/modules/chs/vo/OutpatientBeginModel.java similarity index 89% rename from src/main/java/com/dpkj/modules/chs/vo/OutpatientBudgetModel.java rename to src/main/java/com/dpkj/modules/chs/vo/OutpatientBeginModel.java index d18dabe..21f36f9 100644 --- a/src/main/java/com/dpkj/modules/chs/vo/OutpatientBudgetModel.java +++ b/src/main/java/com/dpkj/modules/chs/vo/OutpatientBeginModel.java @@ -5,7 +5,6 @@ import lombok.experimental.Accessors; import javax.validation.constraints.NotEmpty; import java.io.Serializable; -import java.util.List; /** * @Auther: 钀ч亾瀛 @@ -14,7 +13,7 @@ import java.util.List; */ @Data @Accessors(chain = true) -public class OutpatientBudgetModel implements Serializable { +public class OutpatientBeginModel implements Serializable { private static final long serialVersionUID = 1L; /** diff --git a/src/main/java/com/dpkj/modules/chs/vo/OutpatientFinalModel.java b/src/main/java/com/dpkj/modules/chs/vo/OutpatientFinalModel.java new file mode 100644 index 0000000..58ab250 --- /dev/null +++ b/src/main/java/com/dpkj/modules/chs/vo/OutpatientFinalModel.java @@ -0,0 +1,47 @@ +package com.dpkj.modules.chs.vo; + +import lombok.Data; +import lombok.experimental.Accessors; + +import javax.validation.constraints.NotEmpty; +import java.io.Serializable; + +/** + * @Auther: 钀ч亾瀛 + * @Date: 2025/5/27 16:52 + * @Description: 缁撶畻 + */ +@Data +@Accessors(chain = true) +public class OutpatientFinalModel implements Serializable { + private static final long serialVersionUID = 1L; + + @NotEmpty(message = "鎮h匢D涓嶅彲涓虹┖!") + private String patid; + + @NotEmpty(message = "鏀舵嵁鍙蜂笉鍙负绌!") + private String sjh; + + @NotEmpty(message = "鎬婚噾棰濅笉鍙负绌!") + private String zje; + + @NotEmpty(message = "搴斾粯閲戦涓嶅彲涓虹┖!") + private String ysje; + + @NotEmpty(message = "鏀粯鏂瑰紡涓嶅彲涓虹┖!") + private String paytype; + + @NotEmpty(message = "鏀粯閲戦涓嶅彲涓虹┖!") + private String paymoney; + + @NotEmpty(message = "鏀粯娴佹按鍙蜂笉鍙负绌!") + private String paylsh; + + @NotEmpty(message = "鍖讳繚鎶ラ攢閲戦涓嶅彲涓虹┖!") + private String ybzf; + + /** + * 鏀粯鏃堕棿 + */ + private String paytime; +} diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index ec034ed..2f40ba7 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -12,6 +12,10 @@ server: min-response-size: 1024 mime-types: application/javascript,application/json,application/xml,text/html,text/xml,text/plain,text/css,image/* +logging: + level: + com.dpkj: debug + spring: servlet: multipart: