Compare commits

..

10 Commits

Author SHA1 Message Date
237c9f4196 加log 2025-11-13 15:28:57 +08:00
f73c42c994 his医保 2025-09-25 20:48:27 +08:00
283a0a1696 微信刷脸摄像头角度修改为-90度 2025-09-17 15:38:31 +08:00
9a8be43091 微信刷脸:复制自助机模块 2025-08-18 18:37:29 +08:00
9ca5424a28 移动医保 2025-08-13 21:49:36 +08:00
4647d557fe 小票优化 2025-07-01 10:03:51 +08:00
f3381c73df 更改启动类 2025-06-30 20:57:27 +08:00
4af387d834 正式地址更改 2025-06-30 17:49:47 +08:00
835531ef68 小票模板优化 2025-06-27 16:14:23 +08:00
afc631cc91 小票模板优化 2025-06-20 17:54:10 +08:00
32 changed files with 133 additions and 312 deletions

View File

@@ -1,5 +1,7 @@
@echo off
:: 医保程序地址
set WINEXE_CHSPATH=D:/Project/yinyitong-win/yinyitong.exe
:: 医保程序地址
set CHSPATH=D:/Project/CHS
:: jar名称
@@ -7,16 +9,19 @@ set NAME=yinyitong-dll-hang
:: 端口号
set PROT=5946
echo 关闭%PROT%端口进程
echo 1、关闭端口进程%PROT%
for /f "tokens=1-5" %%i in ('netstat -ano^|findstr ":%PROT%"') do taskkill /pid %%m -t -f
echo 启动%NAME%
echo 2、启动本地程序
cd /d %CHSPATH%/
start javaw.exe -Dfile.encoding=utf-8 -Djava.library.path="%CHSPATH%;%CHSPATH%/CHSInterfaceYn" -Dlog.path=%~dp0 -jar %~dp0\%NAME%.jar --server.port=%PROT%
cd %CHSPATH%
:: 延迟5秒
timeout /NOBREAK /T 5 >nul
start javaw.exe -Dfile.encoding=UTF-8 -Djava.library.path=%CHSPATH% -Dlog.path=%~dp0 -jar %~dp0\%NAME%.jar --server.port=%PROT%
echo 启动完成
echo 3、启动银医通
start %WINEXE_CHSPATH%
exit
::pause

View File

@@ -210,7 +210,7 @@
<!--jar包名字是否包含唯一版本标识-->
<useUniqueVersions>false</useUniqueVersions>
<!--指定含main方法的主类入口-->
<mainClass>com.dpkj.StandDllApplication</mainClass>
<mainClass>com.dpkj.HangDllApplication</mainClass>
</manifest>
<manifestEntries>
<!--MANIFEST.MF 中 Class-Path 加入资源文件目录用命令java -jar时就不用-Dloader.path指定外部资源路径了 -->

View File

@@ -75,7 +75,7 @@ public class ReceiptPrintController {
int dinyHeight = 0;
if (templateName.equals("department")) {
// 由于是使用的门诊小票-T2那么默认的高度为1100强行设置通过动态修改渲染的图片的高度
height = 900;//根据实际情况调整
height = 1000;//根据实际情况调整
// 单行最大长度为10
int singleLineMaxLength = 10;

View File

@@ -50,9 +50,9 @@ public class ReceiptPrintRequest implements Serializable {
private Integer width = 690;
/**
* 生成的模板的高度默认为1050
* 生成的模板的高度默认为1100
*/
private Integer height = 1050;
private Integer height = 1100;
}

View File

@@ -1,21 +0,0 @@
package com.dpkj.modules.chs.controller;
import com.dpkj.modules.chs.service.IAlipayService;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @Auther: 萧道子
* @Date: 2025/3/22 16:25
* @Description: 医保模块-阿里设备
*/
@Slf4j
@AllArgsConstructor
@RestController
@RequestMapping("/chs/alipay")
public class AlipayController {
private final IAlipayService alipayService;
}

View File

@@ -1,59 +0,0 @@
package com.dpkj.modules.chs.dll;
import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.Pointer;
import lombok.extern.slf4j.Slf4j;
/**
* @Auther: 萧道子
* @Date: 2025/3/22 17:48
* @Description:
*/
@Slf4j
public class AlipayDll {
/**
* 获取 AlipayDll 实例,同时注册 AlipayDll 控件。
*
* @return AlipayDll 实例
* @throws DllRegistrationException 如果注册控件失败,抛出此异常
*/
public static Dll instance() throws DllRegistrationException {
try {
return Native.load("AlipayChs", Dll.class);
} catch (UnsatisfiedLinkError e) {
log.info("[AlipayDll][getPrintSDK][医保动态库] SDK注册失败{}", e.getMessage());
throw new DllRegistrationException("Failed to load AlipayDll library: ", e);
}
}
/**
* 定义自定义异常类,用于表示注册控件时发生的错误
*/
public static class DllRegistrationException extends Exception {
public DllRegistrationException(String message) {
super(message);
}
public DllRegistrationException(String message, Throwable cause) {
super(message, cause);
}
}
/**
* 定义接口映射本地库中的函数。
*/
public interface Dll extends Library {
/**
* 设置打印端口和波特率。
*
* @return 返回操作结果代码
*/
String NationEcTrans(String strUrl, String InData, Pointer OutData);
}
}

View File

@@ -1,14 +0,0 @@
package com.dpkj.modules.chs.dll;
import lombok.extern.slf4j.Slf4j;
/**
* @Auther: 萧道子
* @Date: 2025/3/22 17:48
* @Description:
*/
@Slf4j
public class HispayDll {
}

View File

@@ -1,44 +0,0 @@
package com.dpkj.modules.chs.entity;
import com.alibaba.fastjson.JSONObject;
import lombok.Data;
import lombok.experimental.Accessors;
import java.io.Serializable;
/**
* @Auther: 萧道子
* @Date: 2025/3/23 11:56
* @Description: 医保请求
*/
@Data
@Accessors(chain = true)
public class AlipayEcRequestData implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 机构 ID 必填
*/
private String orgId;
/**
* 交易类型 必填
* ec.query: 电子凭证二维码解码接口
* cn.nhsa.qrcode.get: 终端医保电子凭证码解码接口
* cn.nhsa.auth.check刷脸授权获取医保身份接口
* cn.nhsa.ec.pwd 医保电子凭证密码核验接口
*/
private String transType;
/**
* 接口请求参数 JSON格式字符串 必填
*/
private JSONObject data;
/**
* 扩展参数 JSON格式字符串
*/
private JSONObject extra;
}

View File

@@ -1,4 +1,4 @@
package com.dpkj.modules.chs.constant;
package com.dpkj.modules.chs.hischs.constant;
import java.util.HashMap;
import java.util.Map;

View File

@@ -1,13 +1,13 @@
package com.dpkj.modules.chs.controller;
package com.dpkj.modules.chs.hischs.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.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.dpkj.modules.chs.hischs.constant.ChsPayStateConst;
import com.dpkj.modules.chs.hischs.service.IHispayService;
import com.dpkj.modules.chs.hischs.vo.OutpatientBeginModel;
import com.dpkj.modules.chs.hischs.vo.OutpatientFinalModel;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;

View File

@@ -1,9 +1,9 @@
package com.dpkj.modules.chs.service;
package com.dpkj.modules.chs.hischs.service;
import com.alibaba.fastjson.JSONObject;
import com.dpkj.common.vo.ResultData;
import com.dpkj.modules.chs.vo.OutpatientBeginModel;
import com.dpkj.modules.chs.vo.OutpatientFinalModel;
import com.dpkj.modules.chs.hischs.vo.OutpatientBeginModel;
import com.dpkj.modules.chs.hischs.vo.OutpatientFinalModel;
public interface IHispayService {

View File

@@ -1,17 +1,16 @@
package com.dpkj.modules.chs.service.impl;
package com.dpkj.modules.chs.hischs.service.impl;
import cn.hutool.core.date.DateUtil;
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.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.dpkj.modules.chs.hischs.constant.ChsPayStateConst;
import com.dpkj.modules.chs.hischs.service.IHispayService;
import com.dpkj.modules.chs.hischs.vo.OutpatientBeginModel;
import com.dpkj.modules.chs.hischs.vo.OutpatientFinalModel;
import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;
@@ -34,11 +33,6 @@ import java.util.Map;
// @AllArgsConstructor
public class HispayServiceImpl implements IHispayService {
@Autowired
private HisConfig hisConfig;
@Autowired
private ChsConfig chsConfig;
// COM对象
private static ActiveXComponent dispatch;
@@ -61,7 +55,7 @@ public class HispayServiceImpl implements IHispayService {
log.info("[HispayServiceImpl][instanceActive][HIS医保COM库] 加载成功");
return activeXComponent;
} catch (UnsatisfiedLinkError e) {
log.info("[HispayServiceImpl][instanceActive][HIS医保COM库] 加载失败:{}", e.getMessage());
log.error("[HispayServiceImpl][instanceActive][HIS医保COM库] 加载失败:{}", e.getMessage());
throw new RuntimeException("HIS医保COM库加载失败" + e.getMessage(), e);
}
}
@@ -137,14 +131,14 @@ public class HispayServiceImpl implements IHispayService {
.fluentPut("hzxm", "") // 患者姓名
.fluentPut("phone", ""); // 患者电话号码
String params = processParameters(val, null);
log.info("[HispayServiceImpl][readCode][医保读卡-电子凭证] 接口入参:{}", params);
log.debug("[HispayServiceImpl][readCode][医保读卡-电子凭证] 接口入参:{}", params);
/** 2、调用COM函数 */
Variant vres = new Variant("", true);
Variant call = Dispatch.call(dispatch, "fRun", "BMZXX010", params, vres);
String resStr = vres.getStringRef();
log.info("[HispayServiceImpl][readCode][医保读卡-电子凭证] call返回值{} 结果:{}", call, resStr);
log.debug("[HispayServiceImpl][readCode][医保读卡-电子凭证] call返回值{} 结果:{}", call, resStr);
/** 3、处理读卡结果 */
@@ -167,14 +161,14 @@ public class HispayServiceImpl implements IHispayService {
.fluentPut("hzxm", "") // 患者姓名
.fluentPut("phone", ""); // 患者电话号码
String params = processParameters(val, password);
log.info("[HispayServiceImpl][readCard][医保读卡-医保卡] 接口入参:{}", params);
log.debug("[HispayServiceImpl][readCard][医保读卡-医保卡] 接口入参:{}", params);
/** 2、调用COM函数 */
Variant vres = new Variant("", true);
Variant call = Dispatch.call(dispatch, "fRun", "BMZXX010", params, vres);
String resStr = vres.getStringRef();
log.info("[HispayServiceImpl][readCard][医保读卡-医保卡] call返回值{} 结果:{}", call, resStr);
log.debug("[HispayServiceImpl][readCard][医保读卡-医保卡] call返回值{} 结果:{}", call, resStr);
/** 3、处理读卡结果 */
JSONObject result = verifyResult(resStr);
@@ -196,7 +190,7 @@ public class HispayServiceImpl implements IHispayService {
.fluentPut("zfjsbz", "0") // 是否自费结算0根据医保代码缴费1自费结算默认自费结算
.fluentPut("ybrc", ""); // 医保入参xml节点
String params = processParameters(val, data.getPassword());
log.info("[HispayServiceImpl][outpatientBudget][门诊缴费-预算] 接口入参:{}", params);
log.debug("[HispayServiceImpl][outpatientBudget][门诊缴费-预算] 接口入参:{}", params);
String requestTime = DateUtil.now();
@@ -206,7 +200,7 @@ public class HispayServiceImpl implements IHispayService {
String responseTime = DateUtil.now();
String resStr = resVariant.getStringRef();
log.info("[HispayServiceImpl][outpatientBudget][门诊缴费-预算] call返回值{} 结果:{}", call, resStr);
log.debug("[HispayServiceImpl][outpatientBudget][门诊缴费-预算] call返回值{} 结果:{}", call, resStr);
/** 3、处理结果 */
@@ -249,7 +243,7 @@ public class HispayServiceImpl implements IHispayService {
.fluentPut("ptlsh", "")
.fluentPut("jysm", "");
String params = processParameters(val, null);
log.info("[HispayServiceImpl][chsCodeAsOutpatientFinal][门诊缴费-结算] 接口入参:{}", params);
log.debug("[HispayServiceImpl][chsCodeAsOutpatientFinal][门诊缴费-结算] 接口入参:{}", params);
/** 2、调用COM函数 */
Variant resVariant = new Variant("", true);
@@ -257,7 +251,7 @@ public class HispayServiceImpl implements IHispayService {
String responseTime = DateUtil.now();
String resStr = resVariant.getStringRef();
log.info("[HispayServiceImpl][chsCodeAsOutpatientFinal][门诊缴费-结算] call返回值{} 结果:{}", call, resStr);
log.debug("[HispayServiceImpl][chsCodeAsOutpatientFinal][门诊缴费-结算] call返回值{} 结果:{}", call, resStr);
/** 3、处理结果 */
JSONObject result = verifyResult(resStr);

View File

@@ -1,4 +1,4 @@
package com.dpkj.modules.chs.vo;
package com.dpkj.modules.chs.hischs.vo;
import lombok.Data;
import lombok.experimental.Accessors;

View File

@@ -1,4 +1,4 @@
package com.dpkj.modules.chs.vo;
package com.dpkj.modules.chs.hischs.vo;
import lombok.Data;
import lombok.experimental.Accessors;

View File

@@ -1,4 +0,0 @@
package com.dpkj.modules.chs.service;
public interface IAlipayService {
}

View File

@@ -1,37 +0,0 @@
package com.dpkj.modules.chs.service.impl;
import com.dpkj.modules.chs.dll.AlipayDll;
import com.dpkj.modules.chs.service.IAlipayService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct;
/**
* @Auther: 萧道子
* @Date: 2025/3/22 16:29
* @Description:
*/
@Slf4j
@Service
public class AlipayServiceImpl implements IAlipayService {
private AlipayDll.Dll dll;
@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() {
}
}

View File

@@ -18,7 +18,6 @@ import com.dpkj.modules.scanface.wx.vo.WxFacePayAuthinfoResp;
import com.dpkj.modules.scanface.wx.vo.WxFacePayReq;
import com.dpkj.modules.scanface.wx.vo.WxFacePayResp;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.github.binarywang.wxpay.bean.request.WxPayOrderReverseRequest;
import com.github.binarywang.wxpay.bean.result.WxPayMicropayResult;
import com.github.binarywang.wxpay.bean.result.WxPayOrderQueryResult;
@@ -34,16 +33,9 @@ import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.io.UnsupportedEncodingException;
import java.util.HashMap;
import java.math.BigDecimal;
import java.util.Map;
import java.util.concurrent.Callable;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
/**
* @description: 微信刷脸支付
@@ -79,6 +71,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 +91,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);
@@ -139,7 +136,7 @@ public class WxFacePayController {
@RequestMapping(value = "/initWxpayface", method = RequestMethod.POST)
public WxFacePayResp initWxpayface() throws JsonProcessingException, UnsupportedEncodingException, WxpayFaceSDKDll.DllRegistrationException {
// 构建请求参数的JSON字符串
WxFacePayReq wxFacePayReq = new WxFacePayReq("initWxpayface", "1", System.currentTimeMillis() / 1000, 1);
WxFacePayReq wxFacePayReq = new WxFacePayReq("initWxpayface", "1", System.currentTimeMillis() / 1000, 3);
WxFacePayResp wxFacePayResp = weChatPayFaceService.doWxPayIniMethod(wxFacePayReq);
log.info("[WxFacePayController][initWxpayface][132] [1、程序启动时初始化]{}", wxFacePayResp.toString());
return wxFacePayResp;
@@ -184,6 +181,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())

View File

@@ -4,8 +4,6 @@ import com.dpkj.common.vo.Result;
import com.dpkj.modules.scanface.wx.dll.WxpayFaceSDKDll;
import com.dpkj.modules.scanface.wx.service.CallWxpayFaceService;
import com.dpkj.modules.scanface.wx.service.WeChatPayFaceService;
import com.dpkj.modules.scanface.wx.service.impl.CallWxpayFaceServiceImpl;
import com.dpkj.modules.scanface.wx.service.impl.WeChatPayFaceServiceImpl;
import com.dpkj.modules.scanface.wx.vo.WxFacePayAuthinfoResp;
import com.dpkj.modules.scanface.wx.vo.WxFacePayReq;
import com.dpkj.modules.scanface.wx.vo.WxFacePayResp;
@@ -15,15 +13,11 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import org.thymeleaf.util.StringUtils;
import javax.annotation.Resource;
import java.io.UnsupportedEncodingException;
import java.nio.charset.StandardCharsets;
import java.security.Provider;
import java.security.Security;
import java.util.HashMap;
import java.util.Map;
import java.util.TreeSet;
/**

View File

@@ -7,7 +7,6 @@ import com.dpkj.modules.scanface.wx.vo.WxFacePayResp;
import com.fasterxml.jackson.core.JsonProcessingException;
import java.io.UnsupportedEncodingException;
import java.util.Map;
/**
* @description: 调用微信刷脸方法

View File

@@ -45,7 +45,7 @@ public class CallWxpayFaceServiceImpl implements CallWxpayFaceService {
reqPointer.setString(0, reqJson);
//请求数据长度
int reqSize = reqPointer.getString(0).length();
System.out.println("-----------调用微信刷脸DLL请求数据----------"+reqPointer.getString(0));
log.info("000-----------调用微信刷脸DLL请求数据----------",reqPointer.getString(0));
//接收响应
long[] pRespBuf = new long[1];
@@ -56,21 +56,20 @@ 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]);
byte[] byteArray = pointer.getByteArray(0, respSize[0]);
resStr = new String(byteArray, StandardCharsets.UTF_8);
System.out.println("-----------调用微信刷脸DLL请求结果: " + resStr);
log.info("000-----------调用微信刷脸DLL请求结果: " , resStr);
dll.wxpayReleaseResponse(new String[2]);
//释放 C:\Windows\System32目录下 WxpayFaceSDK.INSTANCE.wxpayReleaseResponse(new String[2]);
} else {
Pointer pointer = new Pointer(pRespBuf[0]);
byte[] byteArray = pointer.getByteArray(0, respSize[0]);
resStr = new String(byteArray, StandardCharsets.UTF_8);
System.err.println("-----------调用人脸服务失败: " +resStr);
log.error("000-----------调用人脸DLL服务失败: " ,resStr);
}
return resStr;
}

View File

@@ -10,13 +10,10 @@ import com.dpkj.modules.scanface.wx.util.WXPayUtil;
import com.dpkj.modules.scanface.wx.util.WxRandomUtils;
import com.dpkj.modules.scanface.wx.util.XmlParserUtil;
import com.dpkj.modules.scanface.wx.util.XmlUtils;
import com.dpkj.modules.scanface.wx.vo.WxFacePayAuthinfoResp;
import com.dpkj.modules.scanface.wx.vo.WxFacePayMicroPayResp;
import com.dpkj.modules.scanface.wx.vo.WxFacePayOrderResp;
import com.dpkj.modules.scanface.wx.vo.WxFacePayReq;
import com.dpkj.modules.scanface.wx.vo.WxFacePayResp;
import com.dpkj.modules.scanface.wx.vo.*;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.github.binarywang.wxpay.constant.WxPayConstants;
import com.sun.jna.Memory;
import com.sun.jna.Pointer;
import lombok.extern.slf4j.Slf4j;
@@ -27,16 +24,10 @@ import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
import com.github.binarywang.wxpay.constant.WxPayConstants;
import java.io.UnsupportedEncodingException;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Base64;
import java.util.List;
import java.util.Map;
import java.util.SortedMap;
import java.util.TreeMap;
import java.util.*;
/**
* @description: 调用微信刷脸方法

View File

@@ -3,19 +3,12 @@ package com.dpkj.modules.scanface.wx.util;
import org.jdom2.Content;
import org.jdom2.Document;
import org.jdom2.Element;
import javax.xml.bind.DatatypeConverter;
import java.io.StringReader;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.SortedMap;
import java.util.TreeMap;
import java.util.*;
/**
* @description: 生成签名

View File

@@ -1,6 +1,8 @@
package com.dpkj.modules.scanface.wx.util;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.xpath.XPath;

View File

@@ -36,8 +36,10 @@ public class WxFaceOrderVo {
private String outTradeNo;
/**
* 用户支付金额
* 用户支付金额 单位元
* 调用微信时需要转为分
*/
private String totalAmount;
}

View File

@@ -28,7 +28,7 @@ logging:
dpkj:
#后端项目访问地址 #https://yinyitong.yzqingyan.cn/ http://172.16.11.13:15946/ ttps://yinyitong.yzqingyan.cn
serverurl: http://www.lczyyy.com/api/
serverurl: http://10.121.1.44/api/
# 医保配置
chs:
# 医保机构编码
@@ -54,40 +54,40 @@ dpkj:
#dll文件路径
dll-path: C:/opt/ant-abcp/bpaas_api.dll
#IOT 应用管理-appid
app-id: 2021005138656502
app-id: 2021005151604729
#IOT应用版本
app-version: 1.0.0.0
#签约商家的 PID以 2088 开头,企业主体
merchant-id: 2088641941653700
merchant-id: 2088170977486823
#商家机具终端编号,每台设备保持唯一
device-num: P060003750
#服务商的 PID
partner-id: 2088641941653700
partner-id: 2088170977486823
# 核心入参 serviceId
service-id: pay
#微信模块
wx:
configs: #清研家
- app-id: wxe8334dd2140bb0e1
configs: #中医院
- app-id: wxc12fa4977f66974d
# 公众号的appsecret
secret: f83420d79cc6ecd1d7fe9684ac9cdfe4
secret: a51dbcac25a73d7e4812a43cf550c5fc
# 接口配置里的Token值
token: dpkjylwjvote
token: DPKJYINYITONG
# 接口配置里的EncodingAESKey值
aes-key: go2uM3ASe2rEyeoNsZHoPCiKGgpku0Bi49P5IypdQWT
mch-config: #商户信息 清研家关联的商户:驿路万家-扬州清研软件科技
app-id: wxe8334dd2140bb0e1
secret: f83420d79cc6ecd1d7fe9684ac9cdfe4
aes-key: yIBgBrHwRGjO2L3CLIE9hmnlf1FrXQQ7qJZVIg4r6Dx
mch-config: #商户信息 中医院
app-id: wxc12fa4977f66974d
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
@@ -105,9 +105,9 @@ dpkj:
url:
# 后端接口地址
# server: https://102760424tfyw.vicp.fun/api
server: ${dpkj.server-url}
server: ${dpkj.url.server-url}
# h5地址
h5: ${dpkj.h5-url}
h5: ${dpkj.url.h5-url}
# 身份证读取等待时间

View File

@@ -1,6 +1,27 @@
spring:
servlet:
multipart:
max-file-size: 10MB
max-request-size: 10MB
resource:
static-locations: classpath:/static/,classpath:/public/
application:
name: yinyitong-zhongyuyuan-dll-hang
name: ems-express-bridge
profiles:
active: '@profile.name@'
#active: '@profile.name@'
active: pro
server:
port: 5948 #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/*

View File

@@ -29,9 +29,9 @@
</appender>
<!-- 生成 error html格式日志开始 -->
<appender name="HTML" class="ch.qos.logback.core.FileAppender">
<!--<appender name="HTML" class="ch.qos.logback.core.FileAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<!--设置日志级别,过滤掉info日志,只输入error日志-->
&lt;!&ndash;设置日志级别,过滤掉info日志,只输入error日志&ndash;&gt;
<level>ERROR</level>
</filter>
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
@@ -40,15 +40,15 @@
</layout>
</encoder>
<file>${LOG_HOME}/error-log.html</file>
</appender>
</appender>-->
<!-- 生成 error html格式日志结束 -->
<!-- 每天生成一个html格式的日志开始 -->
<appender name="FILE_HTML" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- <appender name="FILE_HTML" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!--日志文件输出的文件名 -->
&lt;!&ndash;日志文件输出的文件名 &ndash;&gt;
<FileNamePattern>${LOG_HOME}/%d{yyyy-MM-dd}.%i.html</FileNamePattern>
<!--日志文件保留天数 -->
&lt;!&ndash;日志文件保留天数 &ndash;&gt;
<MaxHistory>30</MaxHistory>
<MaxFileSize>10MB</MaxFileSize>
</rollingPolicy>
@@ -57,7 +57,7 @@
<pattern>%p%d%msg%M%F{32}%L</pattern>
</layout>
</encoder>
</appender>
</appender>-->
<!-- 每天生成一个html格式的日志结束 -->
<!--myibatis log configure -->
@@ -70,8 +70,8 @@
<root level="INFO">
<appender-ref ref="STDOUT"/>
<appender-ref ref="FILE"/>
<appender-ref ref="HTML"/>
<appender-ref ref="FILE_HTML"/>
<!-- <appender-ref ref="HTML"/>-->
<!-- <appender-ref ref="FILE_HTML"/>-->
</root>
</configuration>

View File

@@ -70,10 +70,10 @@
</table>
</div>
<div style="border-bottom: 1px dashed #000;margin: 3px 0;"></div>
<div style="margin-left: 20px;font-size: 29px;">终端编号:<span th:text="${terminalNumber}"></span></div>
<div style="margin-left: 20px;font-size: 29px;">打印时间:<span th:text="${printTime}"></span></div>
<div style="margin-left: 20px;font-size: 27px;">
<span>温馨提示:请取走缴费凭证,并妥善保管。<br/>如果对缴费存在疑问,请到人工窗口咨询</span>
<div style="margin-left: 20px;font-size: 29px;word-break: break-all;">终端编号:<span th:text="${terminalNumber}"></span></div>
<div style="margin-left: 20px;font-size: 29px;word-break: break-all;">打印时间:<span th:text="${printTime}"></span></div>
<div style="margin-left: 20px;margin-right: 20px;font-size: 29px;word-break: break-all;">
<span>温馨提示:请妥善保管好您的缴费凭条,如果对缴费存在疑问,请到人工窗口咨询</span>
</div>
</div>
</body>

View File

@@ -29,10 +29,10 @@
</div>
</div>
<div style="border-bottom: 1px dashed #000;margin: 3px 0;"></div>
<div style="margin-left: 20px;font-size: 29px;">终端编号:<span th:text="${terminalNumber}"></span></div>
<div style="margin-left: 20px;font-size: 29px;">打印时间:<span th:text="${printTime}"></span></div>
<div style="margin-left: 20px;font-size: 27px;">
<span>温馨提示:请取走缴费凭证,并妥善保管。<br/>如果对缴费存在疑问,请到人工窗口咨询</span>
<div style="margin-left: 20px;font-size: 29px;word-break: break-all;">终端编号:<span th:text="${terminalNumber}"></span></div>
<div style="margin-left: 20px;font-size: 29px;word-break: break-all;">打印时间:<span th:text="${printTime}"></span></div>
<div style="margin-left: 20px;margin-right: 20px;font-size: 29px;word-break: break-all;">
<span>温馨提示:请妥善保管好您的缴费凭条,如果对缴费存在疑问,请到人工窗口咨询</span>
</div>
</div>
</body>

View File

@@ -27,10 +27,10 @@
</div>
</div>
<div style="border-bottom: 1px dashed #000;margin: 3px 0;"></div>
<div style="margin-left: 20px;font-size: 29px;">终端编号:<span th:text="${terminalNumber}"></span></div>
<div style="margin-left: 20px;font-size: 29px;">打印时间:<span th:text="${printTime}"></span></div>
<div style="margin-left: 20px;font-size: 27px;">
<span>温馨提示:请取走缴费凭证,并妥善保管。<br/>如果对缴费存在疑问,请到人工窗口咨询</span>
<div style="margin-left: 20px;font-size: 29px;word-break: break-all;">终端编号:<span th:text="${terminalNumber}"></span></div>
<div style="margin-left: 20px;font-size: 29px;word-break: break-all;">打印时间:<span th:text="${printTime}"></span></div>
<div style="margin-left: 20px;margin-right: 20px;font-size: 29px;word-break: break-all;">
<span>温馨提示:请妥善保管好您的缴费凭条,如果对缴费存在疑问,请到人工窗口咨询</span>
</div>
</div>
</body>

View File

@@ -25,22 +25,24 @@
<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="${treatTime}"></span></div>
<div style="margin-left: 20px;">&emsp;&emsp;序:<span th:text="${sequence}"></span></div>
<div style="margin-left: 20px;">挂号日期<span th:text="${registerDate}"></span></div>
<div style="margin-left: 20px;">&ensp;&ensp;<span th:text="${totalFee}"></span>&thinsp;</div>
<div style="margin-left: 20px;">&ensp;&ensp;<span th:text="${totalFee}"></span></div>
<div style="margin-left: 20px;">挂号时间<span th:text="${registerDate}"></span></div>
<div style="margin-left: 20px;">支付方式:<span th:text="${paymentMethod}"></span></div>
<div style="margin-left: 20px;">交易流水:<span style="font-size: 26px;"
th:text="${transactionNumber}"></span></div>
<div style="margin-left: 20px;">交易流水:<span th:text="${transactionNumber}"></span></div>
<div style="width:100%;text-align: center;">
<img th:src="${qrCodeBase64}"
alt="#"/>
</div>
</div>
<div style="border-bottom: 1px dashed #000;margin-bottom: 3px;"></div>
<div style="margin-left: 20px;font-size: 29px;">终端编号:<span th:text="${terminalNumber}"></span></div>
<div style="margin-left: 20px;font-size: 29px;">打印时间:<span th:text="${printTime}"></span></div>
<div style="margin-left: 20px;font-size: 27px;">
<span>温馨提示:请取走挂号凭证,并妥善保管。<br/>如果对缴费存在疑问,请到人工窗口咨询!</span>
<div style="margin-left: 20px;font-size: 29px;word-break: break-all;">终端编号:<span
th:text="${terminalNumber}"></span></div>
<div style="margin-left: 20px;font-size: 29px;word-break: break-all;">打印时间:<span th:text="${printTime}"></span>
</div>
<div style="margin-left: 20px;margin-right: 20px;font-size: 29px;word-break: break-all;">
<span>温馨提示:请妥善保管好您的缴费凭条,如果对缴费存在疑问,请到人工窗口咨询。</span>
</div>
</div>
</body>