Compare commits
25 Commits
1.0
...
9740a85f65
| Author | SHA1 | Date | |
|---|---|---|---|
| 9740a85f65 | |||
| 7b5ca7edfc | |||
| 4fc1335cc8 | |||
| 40f6728cea | |||
| 20ac1e4bb3 | |||
| 9c990e8103 | |||
| 8728b62a47 | |||
| 7b75ce8438 | |||
| 73fb4f18ff | |||
| 5e3c75d227 | |||
| 5071814758 | |||
| 8c47f5b204 | |||
| 09407c70c7 | |||
| 4da90e9a04 | |||
| 55bcca0dff | |||
| 1904cec8f8 | |||
| 60019a4283 | |||
| 9e7fc2d5a2 | |||
| 547bdb6d08 | |||
| 235306ae33 | |||
| 789d0d17cb | |||
| 26e504232e | |||
| 367429587f | |||
| 1343d01478 | |||
| c6e3d65245 |
18
pom.xml
18
pom.xml
@@ -4,7 +4,6 @@
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<groupId>com.dpkj</groupId>
|
||||
<!-- 银医通-澜沧中医院-DLL-台式机 -->
|
||||
<artifactId>yinyitong-dll-stand</artifactId>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
<name>yinyitong-dll-stand</name>
|
||||
@@ -166,16 +165,15 @@
|
||||
<build>
|
||||
<finalName>${project.artifactId}</finalName>
|
||||
|
||||
<!--打包时将resource下的文件一起打包-->
|
||||
<resources>
|
||||
<!-- <resources>
|
||||
<resource>
|
||||
<directory>src/main/resources</directory>
|
||||
<filtering>false</filtering>
|
||||
<includes>
|
||||
<include>**/**</include>
|
||||
</includes>
|
||||
<filtering>false</filtering>
|
||||
</resource>
|
||||
</resources>
|
||||
</resources>-->
|
||||
|
||||
<plugins>
|
||||
<plugin>
|
||||
@@ -278,14 +276,20 @@
|
||||
<profiles>
|
||||
<profile>
|
||||
<id>dev</id>
|
||||
<activation>
|
||||
<!--默认激活配置-->
|
||||
<activeByDefault>true</activeByDefault>
|
||||
</activation>
|
||||
<properties>
|
||||
|
||||
<!--测试环境-->
|
||||
<profile.name>dev</profile.name>
|
||||
</properties>
|
||||
</profile>
|
||||
<profile>
|
||||
<id>pro</id>
|
||||
<properties>
|
||||
|
||||
<!--正式环境-->
|
||||
<profile.name>pro</profile.name>
|
||||
</properties>
|
||||
</profile>
|
||||
</profiles>
|
||||
|
||||
@@ -0,0 +1,59 @@
|
||||
package com.dpkj.modules.chs.constant;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @Auther: 萧道子
|
||||
* @Date: 2025/6/18 15:57
|
||||
* @Description: 医保状态记录常量类
|
||||
*/
|
||||
public class ChsPayStateConst {
|
||||
|
||||
private static Map<String, Integer> chsPayState = new HashMap<String, Integer>(1);
|
||||
|
||||
|
||||
/**
|
||||
* 清除所有
|
||||
*
|
||||
* @return void
|
||||
* @author 萧道子 2025/6/18
|
||||
*/
|
||||
public static void clear() {
|
||||
chsPayState.clear();
|
||||
}
|
||||
|
||||
/**
|
||||
* 按key删除
|
||||
*
|
||||
* @return void
|
||||
* @author 萧道子 2025/6/18
|
||||
*/
|
||||
public static void remove(String key) {
|
||||
chsPayState.remove(key);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 添加
|
||||
*
|
||||
* @return void
|
||||
* @author 萧道子 2025/6/18
|
||||
*/
|
||||
public static void put(String key, Integer val) {
|
||||
chsPayState.put(key, val);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 获取
|
||||
*
|
||||
* @return void
|
||||
* @author 萧道子 2025/6/18
|
||||
*/
|
||||
public static Integer get(String key) {
|
||||
return chsPayState.get(key);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -1,20 +1,8 @@
|
||||
package com.dpkj.modules.chs.controller;
|
||||
|
||||
import cn.hutool.core.lang.Console;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.dpkj.common.config.ChsConfig;
|
||||
import com.dpkj.common.constant.ChsConst;
|
||||
import com.dpkj.common.vo.Result;
|
||||
import com.dpkj.modules.chs.dll.AlipayDll;
|
||||
import com.dpkj.modules.chs.entity.AlipayEcRequestData;
|
||||
import com.dpkj.modules.chs.service.IAlipayService;
|
||||
import com.sun.jna.Memory;
|
||||
import com.sun.jna.Pointer;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
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.RestController;
|
||||
|
||||
@@ -28,54 +16,6 @@ import org.springframework.web.bind.annotation.RestController;
|
||||
@RestController
|
||||
@RequestMapping("/chs/alipay")
|
||||
public class AlipayController {
|
||||
|
||||
private final IAlipayService alipayService;
|
||||
|
||||
private final ChsConfig charsConfig;
|
||||
|
||||
|
||||
@GetMapping("test")
|
||||
public Result<?> test() {
|
||||
try {
|
||||
AlipayDll.Dll dll = AlipayDll.instance();
|
||||
// Native.load("libeay32", AlipayDll.Dll.class);
|
||||
// Native.load("ssleay32", AlipayDll.Dll.class);
|
||||
|
||||
|
||||
JSONObject data = new JSONObject();
|
||||
AlipayEcRequestData alipayEcRequestData = new AlipayEcRequestData()
|
||||
.setOrgId(charsConfig.getOrgcode())
|
||||
.setTransType(ChsConst.APITYPE_DECODE)
|
||||
.setData(data);
|
||||
String dataJson = JSONObject.toJSONString(alipayEcRequestData);
|
||||
|
||||
Pointer resultStr = new Memory(1024 * 10);
|
||||
String rs = dll.NationEcTrans(
|
||||
"http://172.16.11.13:5946/api/chs/qrCodeQuery",
|
||||
dataJson,
|
||||
resultStr
|
||||
);
|
||||
String rsStrString = resultStr.getString(0, "GB18030");
|
||||
Console.log(rsStrString);
|
||||
Console.log(rs);
|
||||
|
||||
return Result.ok("成功", rsStrString);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
return Result.error("失败");
|
||||
}
|
||||
}
|
||||
|
||||
@PostMapping("qrCodeQuery")
|
||||
public Result<?> qrCodeQuery(@RequestBody JSONObject data) {
|
||||
try {
|
||||
|
||||
Console.log(data);
|
||||
return Result.ok("成功", null);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
return Result.error("失败");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@ 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.constant.ChsPayStateConst;
|
||||
import com.dpkj.modules.chs.service.IHispayService;
|
||||
import com.dpkj.modules.chs.vo.OutpatientBeginModel;
|
||||
import com.dpkj.modules.chs.vo.OutpatientFinalModel;
|
||||
@@ -26,7 +27,7 @@ import org.springframework.web.bind.annotation.RestController;
|
||||
@RequestMapping("/chs/hispay")
|
||||
public class HispayController {
|
||||
|
||||
private final IHispayService iHispayService;
|
||||
private final IHispayService hispayService;
|
||||
|
||||
|
||||
/**
|
||||
@@ -38,7 +39,7 @@ public class HispayController {
|
||||
@PostMapping("findReadCode")
|
||||
public Result<?> findReadCode() {
|
||||
try {
|
||||
JSONObject res = iHispayService.readCode();
|
||||
JSONObject res = hispayService.readCode();
|
||||
return Result.ok("成功", res);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
@@ -63,7 +64,7 @@ public class HispayController {
|
||||
throw new RuntimeException("密码不可为空");
|
||||
}
|
||||
|
||||
JSONObject res = iHispayService.readCard(password);
|
||||
JSONObject res = hispayService.readCard(password);
|
||||
return Result.ok("成功", res);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
@@ -83,8 +84,11 @@ public class HispayController {
|
||||
@PostMapping("chsCodeAsOutpatientBegin")
|
||||
public Result<?> chsCodeAsOutpatientBegin(@RequestBody @Validated OutpatientBeginModel data) {
|
||||
try {
|
||||
// 清空状态常量
|
||||
ChsPayStateConst.clear();
|
||||
|
||||
log.info("[HispayController][chsCodeAsOutpatientBegin][门诊缴费-预算-电子医保凭证] 参数:{}", data);
|
||||
ResultData res = iHispayService.chsCodeAsOutpatientBegin(data);
|
||||
ResultData res = hispayService.chsCodeAsOutpatientBegin(data);
|
||||
return Result.ok("成功", res);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
@@ -105,7 +109,7 @@ public class HispayController {
|
||||
public Result<?> chsCodeAsOutpatientFinal(@RequestBody @Validated OutpatientFinalModel data) {
|
||||
try {
|
||||
log.info("[HispayController][chsCodeAsOutpatientFinal][门诊缴费-结算-电子医保凭证] 参数:{}", data);
|
||||
ResultData res = iHispayService.chsCodeAsOutpatientFinal(data);
|
||||
ResultData res = hispayService.chsCodeAsOutpatientFinal(data);
|
||||
return Result.ok("成功", res);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
@@ -114,4 +118,20 @@ public class HispayController {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取医保支付状态
|
||||
*
|
||||
* @return com.dpkj.common.vo.Result<?>
|
||||
* @author 萧道子 2025/6/18
|
||||
*/
|
||||
@PostMapping("getChsPayState")
|
||||
public Result<?> getChsPayState(@RequestBody OutpatientBeginModel data) {
|
||||
String no = data.getPrescriptionNo();
|
||||
if (StrUtil.isEmpty(no)) {
|
||||
return Result.error("收据号不可为空");
|
||||
}
|
||||
Integer num = ChsPayStateConst.get(no);
|
||||
return Result.ok("成功", num);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -43,5 +43,4 @@ public interface IHispayService {
|
||||
*/
|
||||
ResultData chsCodeAsOutpatientFinal(OutpatientFinalModel data);
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
package com.dpkj.modules.chs.service.impl;
|
||||
|
||||
import cn.hutool.core.lang.Console;
|
||||
import com.dpkj.modules.chs.dll.AlipayDll;
|
||||
import com.dpkj.modules.chs.service.IAlipayService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
@@ -17,22 +16,22 @@ import javax.annotation.PostConstruct;
|
||||
@Service
|
||||
public class AlipayServiceImpl implements IAlipayService {
|
||||
|
||||
private AlipayDll.Dll dll = AlipayDll.instance();
|
||||
private AlipayDll.Dll dll;
|
||||
|
||||
|
||||
public AlipayServiceImpl() throws AlipayDll.DllRegistrationException {
|
||||
}
|
||||
|
||||
@PostConstruct
|
||||
public void postConstruct() {
|
||||
log.info("[AlipayServiceImpl][postConstruct][医保DLL] 初始化动态链接库");
|
||||
try {
|
||||
dll = AlipayDll.instance();
|
||||
} catch (AlipayDll.DllRegistrationException e) {
|
||||
// TODO 萧道子 2025/6/19 :
|
||||
}
|
||||
initPrinter();
|
||||
}
|
||||
|
||||
|
||||
private void initPrinter() {
|
||||
Console.log(dll);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,20 +7,20 @@ 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.common.vo.ResultData;
|
||||
import com.dpkj.modules.chs.constant.ChsPayStateConst;
|
||||
import com.dpkj.modules.chs.service.IHispayService;
|
||||
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.util.Map;
|
||||
|
||||
|
||||
@@ -31,11 +31,21 @@ import java.util.Map;
|
||||
*/
|
||||
@Slf4j
|
||||
@Service
|
||||
@AllArgsConstructor
|
||||
// @AllArgsConstructor
|
||||
public class HispayServiceImpl implements IHispayService {
|
||||
|
||||
private final HisConfig hisConfig;
|
||||
private final ChsConfig chsConfig;
|
||||
@Autowired
|
||||
private HisConfig hisConfig;
|
||||
@Autowired
|
||||
private ChsConfig chsConfig;
|
||||
|
||||
// COM对象
|
||||
private static ActiveXComponent dispatch;
|
||||
|
||||
@PostConstruct
|
||||
public void postConstruct() {
|
||||
dispatch = instanceActive();
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取HIS医保实例
|
||||
@@ -43,14 +53,13 @@ public class HispayServiceImpl implements IHispayService {
|
||||
* @return com.jacob.activeX.ActiveXComponent
|
||||
* @author 萧道子 2025/5/21
|
||||
*/
|
||||
private ActiveXComponent instanceActive() {
|
||||
private static ActiveXComponent instanceActive() {
|
||||
try {
|
||||
// 初始化
|
||||
ComThread.InitSTA();
|
||||
// 获取COM对象
|
||||
ActiveXComponent active = new ActiveXComponent("PayClient.clsPayClient");
|
||||
// ComThread.InitSTA(); //容易导致线程发生阻塞
|
||||
ActiveXComponent activeXComponent = new ActiveXComponent("PayClient.clsPayClient");
|
||||
log.info("[HispayServiceImpl][instanceActive][HIS医保COM库] 加载成功");
|
||||
return active;
|
||||
return activeXComponent;
|
||||
} catch (UnsatisfiedLinkError e) {
|
||||
log.info("[HispayServiceImpl][instanceActive][HIS医保COM库] 加载失败:{}", e.getMessage());
|
||||
throw new RuntimeException("HIS医保COM库加载失败:" + e.getMessage(), e);
|
||||
@@ -65,7 +74,7 @@ public class HispayServiceImpl implements IHispayService {
|
||||
* @author 萧道子 2025/5/21
|
||||
*/
|
||||
private void releaseActive() {
|
||||
ComThread.Release();
|
||||
// ComThread.Release(); //容易导致线程发生阻塞
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -78,9 +87,9 @@ public class HispayServiceImpl implements IHispayService {
|
||||
*/
|
||||
private String processParameters(JSONObject params, String password) {
|
||||
JSONObject req = new JSONObject() {{
|
||||
put("timestamp", DateUtil.format(DateUtil.date(), "yyyyMMddHHmmss")); // 请求发送时间
|
||||
put("requestid", IDGenerator.getSnowflakeIdToStr()); // 唯一请求id
|
||||
put("operid", hisConfig.getOperationId()); // 调用者代码
|
||||
put("timestamp", ""); // 请求发送时间 DateUtil.format(DateUtil.date(), "yyyyMMddHHmmss")
|
||||
put("requestid", ""); // 唯一请求id IDGenerator.getSnowflakeIdToStr()
|
||||
put("operid", ""); // 调用者代码 hisConfig.getOperationId()
|
||||
put("password", password); // 密码
|
||||
put("params", params);
|
||||
}};
|
||||
@@ -120,9 +129,6 @@ public class HispayServiceImpl implements IHispayService {
|
||||
|
||||
@Override
|
||||
public JSONObject readCode() {
|
||||
// 加载资源
|
||||
Dispatch dispatch = instanceActive();
|
||||
|
||||
/** 1、组装参数 */
|
||||
JSONObject val = new JSONObject()
|
||||
.fluentPut("cardtype", "9") // 1.就诊卡,2.医保卡,5.门诊号,6.患者姓名和电话号码,8.电子健康码/卡,9.医保电子凭证
|
||||
@@ -140,8 +146,6 @@ public class HispayServiceImpl implements IHispayService {
|
||||
String resStr = vres.getStringRef();
|
||||
log.info("[HispayServiceImpl][readCode][医保读卡-电子凭证] call返回值:{} 结果:{}", call, resStr);
|
||||
|
||||
// 释放资源
|
||||
releaseActive();
|
||||
|
||||
/** 3、处理读卡结果 */
|
||||
JSONObject result = verifyResult(resStr);
|
||||
@@ -154,8 +158,6 @@ public class HispayServiceImpl implements IHispayService {
|
||||
|
||||
@Override
|
||||
public JSONObject readCard(String password) {
|
||||
// 加载资源
|
||||
Dispatch dispatch = instanceActive();
|
||||
|
||||
/** 1、组装参数 */
|
||||
JSONObject val = new JSONObject()
|
||||
@@ -174,9 +176,6 @@ public class HispayServiceImpl implements IHispayService {
|
||||
String resStr = vres.getStringRef();
|
||||
log.info("[HispayServiceImpl][readCard][医保读卡-医保卡] call返回值:{} 结果:{}", call, resStr);
|
||||
|
||||
// 释放资源
|
||||
releaseActive();
|
||||
|
||||
/** 3、处理读卡结果 */
|
||||
JSONObject result = verifyResult(resStr);
|
||||
if (!result.containsKey("item")) {
|
||||
@@ -187,67 +186,7 @@ public class HispayServiceImpl implements IHispayService {
|
||||
}
|
||||
|
||||
|
||||
// public JSONObject getPatientInfo_old(String type, String content) {
|
||||
// Dispatch dispatch = instanceActive();
|
||||
//
|
||||
// /**
|
||||
// * 1、删除保存HIS读卡内容的文件 避免读取到错误信息
|
||||
// */
|
||||
// // 获取HIS-CHS医保库路径
|
||||
// String chsPath = System.getProperty("java.library.path");
|
||||
// String filePath = chsPath + "/" + chsConfig.getFileName();
|
||||
// // 删除文件
|
||||
// FileUtil.del(FileUtil.file(filePath));
|
||||
//
|
||||
// /**
|
||||
// * 2、组装参数
|
||||
// */
|
||||
// JSONObject val = new JSONObject()
|
||||
// .fluentPut("cardtype", type) // 1.就诊卡,2.医保卡,5.门诊号,6.患者姓名和电话号码,8.电子健康码/卡,9.医保电子凭证
|
||||
// .fluentPut("cardno", "") // 患者就诊卡号
|
||||
// .fluentPut("sfzh", "") // 身份证号
|
||||
// .fluentPut("hzxm", "") // 患者姓名
|
||||
// .fluentPut("phone", ""); // 患者电话号码
|
||||
// String params = processParameters(val, content);
|
||||
// log.info("[HispayServiceImpl][getPatientInfo][医保读卡] 接口入参:{}", params);
|
||||
//
|
||||
// /**
|
||||
// * 3、调用COM函数
|
||||
// */
|
||||
// Variant rest = new Variant();
|
||||
// Variant call = Dispatch.call(dispatch, "fRun", "BMZXX010", params, rest);
|
||||
// log.info("[HispayServiceImpl][getPatientInfo][医保读卡] call返回值:{}", call);
|
||||
//
|
||||
// // 释放资源
|
||||
// releaseActive();
|
||||
//
|
||||
// /**
|
||||
// * 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;
|
||||
// }
|
||||
|
||||
|
||||
private ResultData outpatientBudget(OutpatientBeginModel data) {
|
||||
// 加载资源
|
||||
ActiveXComponent dispatch = instanceActive();
|
||||
|
||||
/** 1、组装参数 */
|
||||
JSONObject val = new JSONObject()
|
||||
@@ -269,8 +208,6 @@ public class HispayServiceImpl implements IHispayService {
|
||||
String resStr = resVariant.getStringRef();
|
||||
log.info("[HispayServiceImpl][outpatientBudget][门诊缴费-预算] call返回值:{} 结果:{}", call, resStr);
|
||||
|
||||
// 释放资源
|
||||
releaseActive();
|
||||
|
||||
/** 3、处理结果 */
|
||||
JSONObject result = verifyResult(resStr);
|
||||
@@ -291,22 +228,29 @@ public class HispayServiceImpl implements IHispayService {
|
||||
JSONObject userInfo = readCode();
|
||||
String patientId = userInfo.getString("patid");
|
||||
data.setPatientId(patientId);
|
||||
|
||||
// 更新常量状态 已读卡
|
||||
ChsPayStateConst.put(data.getPrescriptionNo(), 1);
|
||||
|
||||
return outpatientBudget(data);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public ResultData chsCodeAsOutpatientFinal(OutpatientFinalModel data) {
|
||||
// 加载资源
|
||||
ActiveXComponent dispatch = instanceActive();
|
||||
|
||||
/** 1、组装参数 */
|
||||
JSONObject val = (JSONObject) JSON.toJSON(data);
|
||||
String requestTime = DateUtil.now();
|
||||
data.setPaytime(requestTime);
|
||||
JSONObject val = ((JSONObject) JSON.toJSON(data))
|
||||
.fluentPut("czksfbz", "0") // 是否扣院内账户,与预算保持一致
|
||||
.fluentPut("zfjsbz", "0") // 是否自费结算,与预算保持一致,0根据病人医保代码结算,1自费结算
|
||||
.fluentPut("ybrc", "")
|
||||
.fluentPut("ptlsh", "")
|
||||
.fluentPut("jysm", "");
|
||||
String params = processParameters(val, null);
|
||||
log.info("[HispayServiceImpl][chsCodeAsOutpatientFinal][门诊缴费-结算] 接口入参:{}", params);
|
||||
|
||||
String requestTime = DateUtil.now();
|
||||
|
||||
/** 2、调用COM函数 */
|
||||
Variant resVariant = new Variant("", true);
|
||||
Variant call = Dispatch.call(dispatch, "fRun", "BMZJF002", params, resVariant);
|
||||
@@ -315,13 +259,6 @@ public class HispayServiceImpl implements IHispayService {
|
||||
String resStr = resVariant.getStringRef();
|
||||
log.info("[HispayServiceImpl][chsCodeAsOutpatientFinal][门诊缴费-结算] call返回值:{} 结果:{}", call, resStr);
|
||||
|
||||
// 释放资源
|
||||
releaseActive();
|
||||
|
||||
// TODO BEGIN 萧道子 2025/6/10 : 模拟参数
|
||||
// String resStr = "<response><resultCode>0</resultCode><resultMessage/><result><sjh>123456789</sjh><sfrq>2025-06-10 10:23:14</sfrq><bz/><pyckjh/><fyckjh/><yflshjh/><ybcc/></result></response>";
|
||||
// TODO END 萧道子 2025/6/10 : 模拟参数
|
||||
|
||||
/** 3、处理结果 */
|
||||
JSONObject result = verifyResult(resStr);
|
||||
|
||||
|
||||
@@ -43,5 +43,7 @@ public class OutpatientFinalModel implements Serializable {
|
||||
/**
|
||||
* 支付时间
|
||||
*/
|
||||
// @NotEmpty(message = "支付时间不可为空!")
|
||||
private String paytime;
|
||||
|
||||
}
|
||||
|
||||
@@ -69,21 +69,21 @@ public class AliScanFaceServiceImpl implements IAliScanFaceService {
|
||||
String json = params.toJSONString();
|
||||
String service_code = AliFaceConstants.SMILEVERIFYNIN_V1; //调用的组件编码:初始化
|
||||
Result<Object> startServiceIniResult = this.startServiceIni(json, service_code);
|
||||
log.info("[AliScanFaceServiceImpl][aliFacePay][72][调用ABCP调用刷脸的结果] :{}", startServiceIniResult.toString());
|
||||
log.info("[AliScanFaceServiceImpl][aliFacePay][72][1、获取刷脸去初始化服务的结果] :{}", startServiceIniResult.toString());
|
||||
if (startServiceIniResult.isSuccess()) {
|
||||
Map<String, String> res = (Map<String, String>) startServiceIniResult.getResult();
|
||||
String ftoken = res.get("ftoken");
|
||||
log.info("[AliScanFaceServiceImpl][aliFacePay][76][调用ABCP调用刷脸的结果的ftoken] :{}", ftoken.toString());
|
||||
log.info("[AliScanFaceServiceImpl][aliFacePay][76][[1、获取刷脸去初始化服务的结果-ftoken值] :{}", ftoken);
|
||||
|
||||
/**
|
||||
* 2、调用后端的支付宝统一收单交易支付接口、存入hisPay
|
||||
*/
|
||||
aliOrderVo.setAuthCode(ftoken);//Demo值:"fp128d26333fa66e66e7f34c493d30cdh76"
|
||||
JSONObject serverParams = (JSONObject) JSON.toJSON(aliOrderVo);
|
||||
log.info("[AliScanFaceServiceImpl][aliFacePay][83][调用后端的支付宝统一收单交易支付接口参数] :{}", serverParams.toString());
|
||||
|
||||
String url = serverUrl + "openapi/aliPayOrderApi/createOrder";
|
||||
log.info("[AliScanFaceServiceImpl][aliFacePay][85][调用后端的支付宝统一收单交易支付接口路径] :{}", serverUrl);
|
||||
log.info("[AliScanFaceServiceImpl][aliFacePay][85][调用后端的支付宝统一收单交易支付接口参数] :{}", serverParams.toJSONString());
|
||||
log.info("[AliScanFaceServiceImpl][aliFacePay][86][调用后端的支付宝统一收单交易支付接口路径] :{}", url);
|
||||
String req = HttpRequest.post(url)
|
||||
.header(Header.CONTENT_TYPE, ContentType.JSON.toString(CharsetUtil.CHARSET_UTF_8))
|
||||
.body(serverParams.toJSONString())
|
||||
@@ -191,7 +191,7 @@ public class AliScanFaceServiceImpl implements IAliScanFaceService {
|
||||
AbcpInvoke.CallbackRsp callbackRsp = new AbcpInvoke.CallbackRsp() {
|
||||
@Override
|
||||
public void OnProcess(int code, String subCode, String subMsg, String result) {
|
||||
log.info("[AliScanFaceServiceImpl][OnProcess][189][service_code:{}][code:{}][subCode:{}][subMsg:{}][result:{}]", service_code, code, subCode, subMsg, result);
|
||||
log.info("[AliScanFaceServiceImpl][OnProcess][123][service_code:{}][code:{}][subCode:{}][subMsg:{}][result:{}]", service_code, code, subCode, subMsg, result);
|
||||
try {
|
||||
processCode.set(code);
|
||||
processResult.set(result);
|
||||
@@ -202,7 +202,7 @@ public class AliScanFaceServiceImpl implements IAliScanFaceService {
|
||||
|
||||
@Override
|
||||
public void OnFinish(int code, String subCode, String subMsg, String result) {
|
||||
log.info("[AliScanFaceServiceImpl][OnFinish][200][ABCP服务调用 刷脸初始化服务,获取ftoken:][service_code:{}][code:{}][subCode:{}][subMsg:{}][result:{}]", service_code, code, subCode, subMsg, result);
|
||||
log.info("[AliScanFaceServiceImpl][OnFinish][128][service_code:{}][code:{}][subCode:{}][subMsg:{}][result:{}]", service_code, code, subCode, subMsg, result);
|
||||
|
||||
/**Demo示例记录
|
||||
* [service_code:BPaaSSmileVerifyNonInitV1][code:1000][subCode:E00000][subMsg:SUCCESS][result:{"code":1000,"subCode":"OK_SUCCESS","subMessage":"SUCCESS","barCode":"281215320962898068","ftoken":"fp1efd3d4c0230a28f5261efe7c5050eh28","alipayUid":"2088812449506047","accountList":"[\"104***@qq.com\"]","authToken":"44686f7195c77ee2e09c09bcdc657dd5h28i","result":{"accountList":["104***@qq.com"],"alipayUid":"2088812449506047","allowRetry":false,"authToken":"44686f7195c77ee2e09c09bcdc657dd5h28i","barCode":"281215320962898068","certName":"您好,*雪","ftoken":"fp1efd3d4c0230a28f5261efe7c5050eh28","type":"selectUid"},"easterEgg":false,"zolozConfig":{"installAngle":90},"serviceId":"pay","traceId":"2444-44-1745802328","callStartTimeMs":1745802328114,"localTime":"2025-04-28-09-05-41-791"}]
|
||||
@@ -223,12 +223,13 @@ public class AliScanFaceServiceImpl implements IAliScanFaceService {
|
||||
// 等待process回调完成(设置超时避免死锁)
|
||||
boolean awaitSuccess = latch.await(10, TimeUnit.SECONDS);
|
||||
if (!awaitSuccess) {
|
||||
log.info("[AliScanFaceServiceImpl][startServiceIni][221][service_code:{}][ABCP调用刷脸:等待process回调超时]", service_code);
|
||||
log.info("[AliScanFaceServiceImpl][startServiceIni][226][10秒-等待process回调超时]");
|
||||
return Result.error("等待process回调超时");
|
||||
} else {
|
||||
log.info("[AliScanFaceServiceImpl][startServiceIni][229][ABCP调用刷脸初始化服务-process回调结果-processCode] :{}", processCode);
|
||||
if (processCode.get() == 0) {
|
||||
JSONObject jsonObject = JSONObject.parseObject(processResult.get());
|
||||
log.info("[AliScanFaceServiceImpl][startServiceIni][225][service_code:{}][ABCP调用刷脸-等待process回调完成结果] :{}", service_code, jsonObject.toString());
|
||||
log.info("[AliScanFaceServiceImpl][startServiceIni][232][ABCP调用刷脸初始化服务-process回调结果] :{}", jsonObject.toString());
|
||||
if (jsonObject.containsKey("traceId")) {
|
||||
res.put("traceId", jsonObject.getString("traceId"));
|
||||
} else {
|
||||
@@ -242,11 +243,13 @@ public class AliScanFaceServiceImpl implements IAliScanFaceService {
|
||||
// 等待finish回调完成(设置超时避免死锁)
|
||||
boolean awaitFinishSuccess = latchFinish.await(120, TimeUnit.SECONDS);
|
||||
if (!awaitFinishSuccess) {
|
||||
log.info("[AliScanFaceServiceImpl][startServiceIni][246][120秒-等待finish回调超时]");
|
||||
return Result.error("等待finish回调超时");
|
||||
} else {
|
||||
log.info("[AliScanFaceServiceImpl][startServiceIni][249][ABCP调用刷脸初始化服务-finish回调结果-finishCode] :{}", finishCode);
|
||||
if (finishCode.get() == 1000) {
|
||||
JSONObject jsonObject = JSONObject.parseObject(finishResult.get());
|
||||
log.info("[AliScanFaceServiceImpl][startServiceIni][244][service_code:{}] [ABCP调用刷脸-等待finish回调完成结果]:{}", service_code, jsonObject.toString());
|
||||
log.info("[AliScanFaceServiceImpl][startServiceIni][252][ABCP调用刷脸初始化服务-finish回调结果] :{}", jsonObject.toString());
|
||||
if (jsonObject.containsKey("ftoken")) {
|
||||
res.put("ftoken", jsonObject.getString("ftoken"));//ftoken参数的有效期为2分钟
|
||||
res.put("barCode", jsonObject.getString("barCode"));
|
||||
@@ -260,10 +263,10 @@ public class AliScanFaceServiceImpl implements IAliScanFaceService {
|
||||
}
|
||||
|
||||
//结果返回
|
||||
log.info("[AliScanFaceServiceImpl][startServiceIni][266][][ABCP调用刷脸初始化服务成功返回结果:] :{}", finishResultRef.get());
|
||||
return finishResultRef.get();
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
log.info("[AliScanFaceServiceImpl][startServiceIni][261][ABCP调用刷脸初始化服务失败] :{}", e.getMessage());
|
||||
return Result.error("ABCP调用刷脸初始化服务失败:" + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -37,7 +37,7 @@ public class AliOrderVo implements Serializable {
|
||||
private String outTradeNo;
|
||||
|
||||
/**
|
||||
* 用户支付金额
|
||||
* 用户支付金额 单位元
|
||||
*/
|
||||
//@ApiModelProperty(value = "用户支付金额")
|
||||
private String totalAmount;
|
||||
|
||||
@@ -34,6 +34,7 @@ import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.Callable;
|
||||
@@ -79,6 +80,10 @@ public class WxFacePayController {
|
||||
public Result<String> doFacePay(@RequestBody WxFaceOrderVo wxFaceOrderVo) throws Exception {
|
||||
Result<String> result = new Result<>();
|
||||
try {
|
||||
//元转分
|
||||
int money = new BigDecimal(wxFaceOrderVo.getTotalAmount()).multiply(new BigDecimal(100)).intValue();
|
||||
wxFaceOrderVo.setTotalAmount(String.valueOf(money));
|
||||
|
||||
//1 初始化
|
||||
this.initWxpayface();
|
||||
|
||||
@@ -95,6 +100,7 @@ public class WxFacePayController {
|
||||
WxPayMicropayResult micropayResult = new WxPayMicropayResult();
|
||||
if (StringUtil.isNotBlank(authinfoResp.getFace_code())) {
|
||||
//5、调用后台人脸支付API发起支付
|
||||
System.out.println("---------调用后台人脸支付API发起支付");
|
||||
wxFaceOrderVo.setOutTradeNo(getOutTradeNo());
|
||||
micropayResult = this.toCreateWxOrder(authinfoResp, wxFaceOrderVo, wxFacePayResp0);
|
||||
|
||||
@@ -184,6 +190,7 @@ public class WxFacePayController {
|
||||
public WxFacePayAuthinfoResp getWxpayfaceCode(@RequestBody WxFaceOrderVo wxFaceOrderVo, WxFacePayAuthinfoResp wxFacePayResp0) throws Exception {
|
||||
//4、进行人脸识别getWxpayfaceCode(获取支付凭证)
|
||||
String outTradeNo = getOutTradeNo();//获取流水号
|
||||
|
||||
// 构建请求参数的JSON字符串
|
||||
WxFacePayReq wxFacePayReq = new WxFacePayReq("getWxpayfaceCode", "1", System.currentTimeMillis() / 1000);
|
||||
wxFacePayReq.setAuthinfo(wxFacePayResp0.getAuthinfo())
|
||||
|
||||
@@ -56,7 +56,6 @@ public class CallWxpayFaceServiceImpl implements CallWxpayFaceService {
|
||||
// 调用本地方法
|
||||
WxpayFaceSDKDll.Dll dll = WxpayFaceSDKDll.instance();
|
||||
int result = dll.wxpayCallFaceService(reqPointer.getString(0), reqSize, pRespBuf, respSize);
|
||||
//使用C:\Windows\System32目录下 int result = WxpayFaceSDK.INSTANCE.wxpayCallFaceService(reqPointer.getString(0), reqSize, pRespBuf, respSize);
|
||||
|
||||
if (result == 0) {
|
||||
Pointer pointer = new Pointer(pRespBuf[0]);
|
||||
|
||||
@@ -36,8 +36,10 @@ public class WxFaceOrderVo {
|
||||
private String outTradeNo;
|
||||
|
||||
/**
|
||||
* 用户支付金额 分
|
||||
* 用户支付金额 单位元
|
||||
* 调用微信时需要转为分
|
||||
*/
|
||||
private String totalAmount;
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -1,5 +1,29 @@
|
||||
server:
|
||||
port: 5948
|
||||
servlet:
|
||||
context-path: /api
|
||||
tomcat:
|
||||
max-swallow-size: -1
|
||||
error:
|
||||
include-exception: true
|
||||
include-stacktrace: ALWAYS
|
||||
include-message: ALWAYS
|
||||
compression:
|
||||
enabled: true
|
||||
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:
|
||||
max-file-size: 10MB
|
||||
max-request-size: 10MB
|
||||
resource:
|
||||
static-locations: classpath:/static/,classpath:/public/
|
||||
|
||||
dpkj:
|
||||
#后端项目访问地址 #https://yinyitong.yzqingyan.cn/ http://172.16.11.13:15946/ ttps://yinyitong.yzqingyan.cn
|
||||
|
||||
@@ -1,10 +1,34 @@
|
||||
server:
|
||||
port: 5946
|
||||
servlet:
|
||||
context-path: /api
|
||||
tomcat:
|
||||
max-swallow-size: -1
|
||||
error:
|
||||
include-exception: true
|
||||
include-stacktrace: ALWAYS
|
||||
include-message: ALWAYS
|
||||
compression:
|
||||
enabled: true
|
||||
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:
|
||||
max-file-size: 10MB
|
||||
max-request-size: 10MB
|
||||
resource:
|
||||
static-locations: classpath:/static/,classpath:/public/
|
||||
|
||||
dpkj:
|
||||
#后端项目访问地址
|
||||
#TODO 改为正式的地址 http://www.lczyyy.com/api http://127.0.0.1:15946/api
|
||||
serverurl: http://www.lczyyy.com/api
|
||||
# 改为正式的地址 http://www.lczyyy.com/api/ http://127.0.0.1:5946/api/ http://www.lczyyy.com/apitest/
|
||||
serverurl: http://www.lczyyy.com/apitest/
|
||||
# 医保配置
|
||||
chs:
|
||||
# 医保机构编码
|
||||
@@ -45,27 +69,27 @@ dpkj:
|
||||
service-id: pay
|
||||
#微信模块
|
||||
wx:
|
||||
configs: # 清研家
|
||||
- app-id: wxc12fa4977f66974d #wxc12fa4977f66974d #wx024903d1d2e1a55a
|
||||
configs: #中医院
|
||||
- app-id: wxc12fa4977f66974d
|
||||
# 公众号的appsecret
|
||||
secret: a51dbcac25a73d7e4812a43cf550c5fc #f83420d79cc6ecd1d7fe9684ac9cdfe4
|
||||
# 接口配置里的Token值 DPKJ-YINYITONG #DPKJ-YINYITONG#dpkjylwjvote
|
||||
token: DPKJ-YINYITONG
|
||||
secret: a51dbcac25a73d7e4812a43cf550c5fc
|
||||
# 接口配置里的Token值
|
||||
token: DPKJYINYITONG
|
||||
# 接口配置里的EncodingAESKey值
|
||||
aes-key: yIBgBrHwRGjO2L3CLIE9hmnlf1FrXQQ7qJZVIg4r6Dx
|
||||
mch-config: #商户信息 驿路万家-扬州清研软件科技
|
||||
mch-config: #商户信息 中医院
|
||||
app-id: wxc12fa4977f66974d
|
||||
secret: f83420d79cc6ecd1d7fe9684ac9cdfe4
|
||||
secret: a51dbcac25a73d7e4812a43cf550c5fc
|
||||
#调用接口所需service_id
|
||||
service-id: service_id
|
||||
#商户号
|
||||
mch-id: 1557642321
|
||||
mch-id: 1603658732
|
||||
#商户秘钥
|
||||
mch-key: yndpkj15288216506YndpkjKsjytZx12
|
||||
mch-key: lczyywxc12fa4977f66974dyytzz1234
|
||||
#报文解密 APIv3密钥
|
||||
v3-key: yndpkj15288216506YndpkjKsjytZx12
|
||||
v3-key: lczyywxc12fa4977f66974dyytzz1234
|
||||
#微信: 商户APIv2密钥
|
||||
key-api: yndpkj15288216506YndpkjKsjytZx12
|
||||
key-api: lczyywxc12fa4977f66974dyytzz1234
|
||||
#p12证书的位置,可以指定绝对路径,也可以指定类路径(以classpath;开头)
|
||||
key-path: classpath:test\apiclient_cert.p12
|
||||
private-key-path: classpath:test\apiclient_key.pem
|
||||
|
||||
@@ -1,29 +1,5 @@
|
||||
server:
|
||||
servlet:
|
||||
context-path: /api
|
||||
tomcat:
|
||||
max-swallow-size: -1
|
||||
error:
|
||||
include-exception: true
|
||||
include-stacktrace: ALWAYS
|
||||
include-message: ALWAYS
|
||||
compression:
|
||||
enabled: true
|
||||
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:
|
||||
max-file-size: 10MB
|
||||
max-request-size: 10MB
|
||||
resource:
|
||||
static-locations: classpath:/static/,classpath:/public/
|
||||
application:
|
||||
name: ems-express-bridge
|
||||
name: yinyitong-zhongyuyuan-dll-stand
|
||||
profiles:
|
||||
active: dev
|
||||
active: '@profile.name@'
|
||||
|
||||
@@ -32,18 +32,20 @@
|
||||
<div style="margin-top: 10px;" th:if="${department}">就诊科室:<span th:text="${department}"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div style="text-align: center; font-size: 32px;">
|
||||
-----------------------------------------------------------------------------
|
||||
</div>
|
||||
<div style="border-bottom: 1px dashed #000;margin: 3px 0;"></div>
|
||||
<div style="font-size: 35px; margin: 10px 20px">
|
||||
<div style="word-break: break-all;">
|
||||
<span style="margin-right: 25px;">费用总额:<span th:text="${totalFee}"></span></span>
|
||||
<span>个人支付:<span th:text="${personalPayment}"></span></span>
|
||||
<div style="margin-top: 10px;word-break: break-all;">费用总额:<span th:text="${totalFee}"></span>元</div>
|
||||
<div style="margin-top: 10px;word-break: break-all;">个人自费:<span th:text="${personalPayment}"></span>元</div>
|
||||
<div th:if="${chs==1}">
|
||||
<div style="margin-top: 10px;word-break: break-all;">医保统筹基金:<span th:text="${ybtcjj}"></span>元</div>
|
||||
<div style="margin-top: 10px;word-break: break-all;">个人医保账户:<span th:text="${ybgrzh}"></span>元</div>
|
||||
<div style="margin-top: 10px;word-break: break-all;">医院优惠金额:<span th:text="${yyyh}"></span>元</div>
|
||||
<div style="margin-top: 10px;word-break: break-all;">医院账户支付:<span th:text="${yyzh}"></span>元</div>
|
||||
</div>
|
||||
<div style="margin-top: 10px;word-break: break-all;">
|
||||
<span>实收金额:</span><span
|
||||
th:text="${actualReceiptAmount}"></span></div>
|
||||
<div style="margin-top: 10px;"><span>实收金额:</span><span th:text="${actualReceiptAmountChinese}"></span></div>
|
||||
<div style="margin-top: 10px;word-break: break-all;">实收金额:<span th:text="${actualReceiptAmount}"></span>元
|
||||
</div>
|
||||
<div style="margin-top: 10px;word-break: break-all;">实收金额:<span
|
||||
th:text="${actualReceiptAmountChinese}"></span></div>
|
||||
</div>
|
||||
<div style="border-bottom: 1px dashed #000;margin: 3px 0;"></div>
|
||||
<div style="margin: 10px 20px">
|
||||
@@ -63,9 +65,11 @@
|
||||
</table>
|
||||
</div>
|
||||
<div style="border-bottom: 1px dashed #000;margin-bottom: 3px;"></div>
|
||||
<div style="margin-left: 35px;font-size: 36px;">终端编号:<span th:text="${terminalNumber}"></span></div>
|
||||
<div style="margin-left: 35px;font-size: 36px;">打印时间:<span th:text="${printTime}"></span></div>
|
||||
<div style="margin-left: 35px;font-size: 36px;margin-top: 10px;">
|
||||
<div style="margin-left: 20px;font-size: 36px;word-break: break-all;">终端编号:<span
|
||||
th:text="${terminalNumber}"></span></div>
|
||||
<div style="margin-left: 20px;font-size: 36px;word-break: break-all;">打印时间:<span th:text="${printTime}"></span>
|
||||
</div>
|
||||
<div style="margin-left: 20px;font-size: 36px;word-break: break-all;">
|
||||
<span>温馨提示:请取走缴费凭证,并妥善保管。如果对缴费存在疑问,请到人工窗口咨询!</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<!DOCTYPE html>
|
||||
<html xmlns:th="http://www.thymeleaf.org">
|
||||
<head>
|
||||
<title>挂号单</title>
|
||||
<title>住院押金预缴</title>
|
||||
</head>
|
||||
<body>
|
||||
<div style="font-size: 32px;font-weight: bold;">
|
||||
@@ -16,21 +16,21 @@
|
||||
<div style="border-bottom: 1px dashed #000;margin: 3px 0;"></div>
|
||||
</div>
|
||||
<div style=" font-size: 37px;">
|
||||
<div style="margin-left: 35px;">姓  名:<span th:text="${name}"></span></div>
|
||||
<div style="margin-left: 35px;">性  别:<span th:text="${gender}"></span></div>
|
||||
<div style="margin-left: 35px;">年  龄:<span th:text="${age}"></span></div>
|
||||
<div style="margin-left: 35px;">出生日期:<span th:text="${birthDate}"></span></div>
|
||||
<div style="margin-left: 35px;">门 诊 号:<span th:text="${outpatientNumber}"></span></div>
|
||||
<div style="margin-left: 35px;">入院科室:<span th:text="${department}"></span></div>
|
||||
<div style="margin-left: 35px;">总 费 用:<span th:text="${totalFee}"></span> 元</div>
|
||||
<div style="margin-left: 35px;">支付方式:<span th:text="${paymentMethod}"></span></div>
|
||||
<div style="margin-left: 35px;">交易流水:<span style="font-size: 35px;" th:text="${transactionNumber}"></span>
|
||||
<div style="margin-left: 20px;">姓  名:<span th:text="${name}"></span></div>
|
||||
<div style="margin-left: 20px;">性  别:<span th:text="${gender}"></span></div>
|
||||
<div style="margin-left: 20px;">年  龄:<span th:text="${age}"></span></div>
|
||||
<div style="margin-left: 20px;">出生日期:<span th:text="${birthDate}"></span></div>
|
||||
<div style="margin-left: 20px;">门 诊 号:<span th:text="${outpatientNumber}"></span></div>
|
||||
<div style="margin-left: 20px;">入院科室:<span th:text="${department}"></span></div>
|
||||
<div style="margin-left: 20px;">总 费 用:<span th:text="${totalFee}"></span> 元</div>
|
||||
<div style="margin-left: 20px;">支付方式:<span th:text="${paymentMethod}"></span></div>
|
||||
<div style="margin-left: 20px;">交易流水:<span style="font-size: 35px;" th:text="${transactionNumber}"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div style="border-bottom: 1px dashed #000;margin-bottom: 3px;"></div>
|
||||
<div style="margin-left: 35px;font-size: 36px;">终端编号:<span th:text="${terminalNumber}"></span></div>
|
||||
<div style="margin-left: 35px;font-size: 36px;">打印时间:<span th:text="${printTime}"></span></div>
|
||||
<div style="margin-left: 35px;font-size: 36px;margin-top: 10px;">
|
||||
<div style="margin-left: 20px;font-size: 36px;">终端编号:<span th:text="${terminalNumber}"></span></div>
|
||||
<div style="margin-left: 20px;font-size: 36px;">打印时间:<span th:text="${printTime}"></span></div>
|
||||
<div style="margin-left: 20px;font-size: 36px;">
|
||||
<span>温馨提示:请取走缴费凭证,并妥善保管。如果对缴费存在疑问,请到人工窗口咨询!</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -26,9 +26,9 @@
|
||||
</div>
|
||||
</div>
|
||||
<div style="border-bottom: 1px dashed #000;margin-bottom: 3px;"></div>
|
||||
<div style="margin-left: 35px;font-size: 36px;">终端编号:<span th:text="${terminalNumber}"></span></div>
|
||||
<div style="margin-left: 35px;font-size: 36px;">打印时间:<span th:text="${printTime}"></span></div>
|
||||
<div style="margin-left: 35px;font-size: 36px;margin-top: 10px;">
|
||||
<div style="margin-left: 20px;font-size: 36px;">终端编号:<span th:text="${terminalNumber}"></span></div>
|
||||
<div style="margin-left: 20px;font-size: 36px;">打印时间:<span th:text="${printTime}"></span></div>
|
||||
<div style="margin-left: 20px;font-size: 36px;">
|
||||
<span>温馨提示:请取走缴费凭证,并妥善保管。如果对缴费存在疑问,请到人工窗口咨询!</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -16,19 +16,19 @@
|
||||
<div style="border-bottom: 1px dashed #000;margin: 3px 0;"></div>
|
||||
</div>
|
||||
<div style=" font-size: 37px;">
|
||||
<div style="margin-left: 35px;">姓  名:<span th:text="${name}"></span></div>
|
||||
<div style="margin-left: 35px;">性  别:<span th:text="${gender}"></span></div>
|
||||
<div style="margin-left: 35px;">年  龄:<span th:text="${age}"></span></div>
|
||||
<div style="margin-left: 35px;">出生日期:<span th:text="${birthDate}"></span></div>
|
||||
<div style="margin-left: 35px;">门 诊 号:<span th:text="${outpatientNumber}"></span></div>
|
||||
<div style="margin-left: 35px;">就诊科室:<span th:text="${department}"></span></div>
|
||||
<div style="margin-left: 35px;">出诊级别:<span th:text="${visitLevel}"></span></div>
|
||||
<div style="margin-left: 35px;">就诊医生:<span th:text="${doctor}"></span></div>
|
||||
<div style="margin-left: 35px;">号  序:<span th:text="${sequence}"></span></div>
|
||||
<div style="margin-left: 35px;">挂号日期:<span th:text="${registerDate}"></span></div>
|
||||
<div style="margin-left: 35px;">总 费 用:<span th:text="${totalFee}"></span> 元</div>
|
||||
<div style="margin-left: 35px;">支付方式:<span th:text="${paymentMethod}"></span></div>
|
||||
<div style="margin-left: 35px;">交易流水:<span style="font-size: 35px;"
|
||||
<div style="margin-left: 20px;">姓  名:<span th:text="${name}"></span></div>
|
||||
<div style="margin-left: 20px;">性  别:<span th:text="${gender}"></span></div>
|
||||
<div style="margin-left: 20px;">年  龄:<span th:text="${age}"></span></div>
|
||||
<div style="margin-left: 20px;">出生日期:<span th:text="${birthDate}"></span></div>
|
||||
<div style="margin-left: 20px;">门 诊 号:<span th:text="${outpatientNumber}"></span></div>
|
||||
<div style="margin-left: 20px;">就诊科室:<span th:text="${department}"></span></div>
|
||||
<div style="margin-left: 20px;">出诊级别:<span th:text="${visitLevel}"></span></div>
|
||||
<div style="margin-left: 20px;">就诊医生:<span th:text="${doctor}"></span></div>
|
||||
<div style="margin-left: 20px;">号  序:<span th:text="${sequence}"></span></div>
|
||||
<div style="margin-left: 20px;">挂号日期:<span th:text="${registerDate}"></span></div>
|
||||
<div style="margin-left: 20px;">总 费 用:<span th:text="${totalFee}"></span> 元</div>
|
||||
<div style="margin-left: 20px;">支付方式:<span th:text="${paymentMethod}"></span></div>
|
||||
<div style="margin-left: 20px;">交易流水:<span style="font-size: 35px;"
|
||||
th:text="${transactionNumber}"></span></div>
|
||||
<div style="width:100%;text-align: center;">
|
||||
<img th:src="${qrCodeBase64}"
|
||||
@@ -36,9 +36,9 @@
|
||||
</div>
|
||||
</div>
|
||||
<div style="border-bottom: 1px dashed #000;margin-bottom: 3px;"></div>
|
||||
<div style="margin-left: 35px;font-size: 36px;">终端编号:<span th:text="${terminalNumber}"></span></div>
|
||||
<div style="margin-left: 35px;font-size: 36px;">打印时间:<span th:text="${printTime}"></span></div>
|
||||
<div style="margin-left: 35px;font-size: 36px;margin-top: 10px;">
|
||||
<div style="margin-left: 20px;font-size: 36px;">终端编号:<span th:text="${terminalNumber}"></span></div>
|
||||
<div style="margin-left: 20px;font-size: 36px;">打印时间:<span th:text="${printTime}"></span></div>
|
||||
<div style="margin-left: 20px;font-size: 36px;">
|
||||
<span>温馨提示:请取走挂号凭证,并妥善保管。如果对缴费存在疑问,请到人工窗口咨询!</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
Binary file not shown.
BIN
src/main/resources/win32-x86/PayClient.dll
Normal file
BIN
src/main/resources/win32-x86/PayClient.dll
Normal file
Binary file not shown.
Reference in New Issue
Block a user