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: