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 @echo off
:: 医保程序地址
set WINEXE_CHSPATH=D:/Project/yinyitong-win/yinyitong.exe
:: 医保程序地址 :: 医保程序地址
set CHSPATH=D:/Project/CHS set CHSPATH=D:/Project/CHS
:: jar名称 :: jar名称
@@ -7,16 +9,19 @@ set NAME=yinyitong-dll-hang
:: 端口号 :: 端口号
set PROT=5946 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 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 3、启动银医通
start %WINEXE_CHSPATH%
echo 启动完成
exit exit
::pause ::pause

View File

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

View File

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

View File

@@ -50,9 +50,9 @@ public class ReceiptPrintRequest implements Serializable {
private Integer width = 690; 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.HashMap;
import java.util.Map; 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 cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.dpkj.common.vo.Result; import com.dpkj.common.vo.Result;
import com.dpkj.common.vo.ResultData; import com.dpkj.common.vo.ResultData;
import com.dpkj.modules.chs.constant.ChsPayStateConst; import com.dpkj.modules.chs.hischs.constant.ChsPayStateConst;
import com.dpkj.modules.chs.service.IHispayService; import com.dpkj.modules.chs.hischs.service.IHispayService;
import com.dpkj.modules.chs.vo.OutpatientBeginModel; import com.dpkj.modules.chs.hischs.vo.OutpatientBeginModel;
import com.dpkj.modules.chs.vo.OutpatientFinalModel; import com.dpkj.modules.chs.hischs.vo.OutpatientFinalModel;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated; 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.alibaba.fastjson.JSONObject;
import com.dpkj.common.vo.ResultData; import com.dpkj.common.vo.ResultData;
import com.dpkj.modules.chs.vo.OutpatientBeginModel; import com.dpkj.modules.chs.hischs.vo.OutpatientBeginModel;
import com.dpkj.modules.chs.vo.OutpatientFinalModel; import com.dpkj.modules.chs.hischs.vo.OutpatientFinalModel;
public interface IHispayService { 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.date.DateUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import cn.hutool.core.util.XmlUtil; import cn.hutool.core.util.XmlUtil;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.dpkj.common.config.ChsConfig;
import com.dpkj.common.config.HisConfig; import com.dpkj.common.config.HisConfig;
import com.dpkj.common.vo.ResultData; import com.dpkj.common.vo.ResultData;
import com.dpkj.modules.chs.constant.ChsPayStateConst; import com.dpkj.modules.chs.hischs.constant.ChsPayStateConst;
import com.dpkj.modules.chs.service.IHispayService; import com.dpkj.modules.chs.hischs.service.IHispayService;
import com.dpkj.modules.chs.vo.OutpatientBeginModel; import com.dpkj.modules.chs.hischs.vo.OutpatientBeginModel;
import com.dpkj.modules.chs.vo.OutpatientFinalModel; import com.dpkj.modules.chs.hischs.vo.OutpatientFinalModel;
import com.jacob.activeX.ActiveXComponent; import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.Dispatch; import com.jacob.com.Dispatch;
import com.jacob.com.Variant; import com.jacob.com.Variant;
@@ -34,11 +33,6 @@ import java.util.Map;
// @AllArgsConstructor // @AllArgsConstructor
public class HispayServiceImpl implements IHispayService { public class HispayServiceImpl implements IHispayService {
@Autowired
private HisConfig hisConfig;
@Autowired
private ChsConfig chsConfig;
// COM对象 // COM对象
private static ActiveXComponent dispatch; private static ActiveXComponent dispatch;
@@ -61,7 +55,7 @@ public class HispayServiceImpl implements IHispayService {
log.info("[HispayServiceImpl][instanceActive][HIS医保COM库] 加载成功"); log.info("[HispayServiceImpl][instanceActive][HIS医保COM库] 加载成功");
return activeXComponent; return activeXComponent;
} catch (UnsatisfiedLinkError e) { } 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); throw new RuntimeException("HIS医保COM库加载失败" + e.getMessage(), e);
} }
} }
@@ -137,14 +131,14 @@ public class HispayServiceImpl implements IHispayService {
.fluentPut("hzxm", "") // 患者姓名 .fluentPut("hzxm", "") // 患者姓名
.fluentPut("phone", ""); // 患者电话号码 .fluentPut("phone", ""); // 患者电话号码
String params = processParameters(val, null); String params = processParameters(val, null);
log.info("[HispayServiceImpl][readCode][医保读卡-电子凭证] 接口入参:{}", params); log.debug("[HispayServiceImpl][readCode][医保读卡-电子凭证] 接口入参:{}", params);
/** 2、调用COM函数 */ /** 2、调用COM函数 */
Variant vres = new Variant("", true); Variant vres = new Variant("", true);
Variant call = Dispatch.call(dispatch, "fRun", "BMZXX010", params, vres); Variant call = Dispatch.call(dispatch, "fRun", "BMZXX010", params, vres);
String resStr = vres.getStringRef(); String resStr = vres.getStringRef();
log.info("[HispayServiceImpl][readCode][医保读卡-电子凭证] call返回值{} 结果:{}", call, resStr); log.debug("[HispayServiceImpl][readCode][医保读卡-电子凭证] call返回值{} 结果:{}", call, resStr);
/** 3、处理读卡结果 */ /** 3、处理读卡结果 */
@@ -167,14 +161,14 @@ public class HispayServiceImpl implements IHispayService {
.fluentPut("hzxm", "") // 患者姓名 .fluentPut("hzxm", "") // 患者姓名
.fluentPut("phone", ""); // 患者电话号码 .fluentPut("phone", ""); // 患者电话号码
String params = processParameters(val, password); String params = processParameters(val, password);
log.info("[HispayServiceImpl][readCard][医保读卡-医保卡] 接口入参:{}", params); log.debug("[HispayServiceImpl][readCard][医保读卡-医保卡] 接口入参:{}", params);
/** 2、调用COM函数 */ /** 2、调用COM函数 */
Variant vres = new Variant("", true); Variant vres = new Variant("", true);
Variant call = Dispatch.call(dispatch, "fRun", "BMZXX010", params, vres); Variant call = Dispatch.call(dispatch, "fRun", "BMZXX010", params, vres);
String resStr = vres.getStringRef(); String resStr = vres.getStringRef();
log.info("[HispayServiceImpl][readCard][医保读卡-医保卡] call返回值{} 结果:{}", call, resStr); log.debug("[HispayServiceImpl][readCard][医保读卡-医保卡] call返回值{} 结果:{}", call, resStr);
/** 3、处理读卡结果 */ /** 3、处理读卡结果 */
JSONObject result = verifyResult(resStr); JSONObject result = verifyResult(resStr);
@@ -196,7 +190,7 @@ public class HispayServiceImpl implements IHispayService {
.fluentPut("zfjsbz", "0") // 是否自费结算0根据医保代码缴费1自费结算默认自费结算 .fluentPut("zfjsbz", "0") // 是否自费结算0根据医保代码缴费1自费结算默认自费结算
.fluentPut("ybrc", ""); // 医保入参xml节点 .fluentPut("ybrc", ""); // 医保入参xml节点
String params = processParameters(val, data.getPassword()); String params = processParameters(val, data.getPassword());
log.info("[HispayServiceImpl][outpatientBudget][门诊缴费-预算] 接口入参:{}", params); log.debug("[HispayServiceImpl][outpatientBudget][门诊缴费-预算] 接口入参:{}", params);
String requestTime = DateUtil.now(); String requestTime = DateUtil.now();
@@ -206,7 +200,7 @@ public class HispayServiceImpl implements IHispayService {
String responseTime = DateUtil.now(); String responseTime = DateUtil.now();
String resStr = resVariant.getStringRef(); String resStr = resVariant.getStringRef();
log.info("[HispayServiceImpl][outpatientBudget][门诊缴费-预算] call返回值{} 结果:{}", call, resStr); log.debug("[HispayServiceImpl][outpatientBudget][门诊缴费-预算] call返回值{} 结果:{}", call, resStr);
/** 3、处理结果 */ /** 3、处理结果 */
@@ -249,7 +243,7 @@ public class HispayServiceImpl implements IHispayService {
.fluentPut("ptlsh", "") .fluentPut("ptlsh", "")
.fluentPut("jysm", ""); .fluentPut("jysm", "");
String params = processParameters(val, null); String params = processParameters(val, null);
log.info("[HispayServiceImpl][chsCodeAsOutpatientFinal][门诊缴费-结算] 接口入参:{}", params); log.debug("[HispayServiceImpl][chsCodeAsOutpatientFinal][门诊缴费-结算] 接口入参:{}", params);
/** 2、调用COM函数 */ /** 2、调用COM函数 */
Variant resVariant = new Variant("", true); Variant resVariant = new Variant("", true);
@@ -257,7 +251,7 @@ public class HispayServiceImpl implements IHispayService {
String responseTime = DateUtil.now(); String responseTime = DateUtil.now();
String resStr = resVariant.getStringRef(); String resStr = resVariant.getStringRef();
log.info("[HispayServiceImpl][chsCodeAsOutpatientFinal][门诊缴费-结算] call返回值{} 结果:{}", call, resStr); log.debug("[HispayServiceImpl][chsCodeAsOutpatientFinal][门诊缴费-结算] call返回值{} 结果:{}", call, resStr);
/** 3、处理结果 */ /** 3、处理结果 */
JSONObject result = verifyResult(resStr); 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.Data;
import lombok.experimental.Accessors; 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.Data;
import lombok.experimental.Accessors; 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.WxFacePayReq;
import com.dpkj.modules.scanface.wx.vo.WxFacePayResp; import com.dpkj.modules.scanface.wx.vo.WxFacePayResp;
import com.fasterxml.jackson.core.JsonProcessingException; 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.request.WxPayOrderReverseRequest;
import com.github.binarywang.wxpay.bean.result.WxPayMicropayResult; import com.github.binarywang.wxpay.bean.result.WxPayMicropayResult;
import com.github.binarywang.wxpay.bean.result.WxPayOrderQueryResult; import com.github.binarywang.wxpay.bean.result.WxPayOrderQueryResult;
@@ -34,16 +33,9 @@ import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.io.UnsupportedEncodingException; import java.io.UnsupportedEncodingException;
import java.util.HashMap; import java.math.BigDecimal;
import java.util.Map; 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.TimeUnit;
import java.util.concurrent.TimeoutException;
/** /**
* @description: 微信刷脸支付 * @description: 微信刷脸支付
@@ -79,6 +71,10 @@ public class WxFacePayController {
public Result<String> doFacePay(@RequestBody WxFaceOrderVo wxFaceOrderVo) throws Exception { public Result<String> doFacePay(@RequestBody WxFaceOrderVo wxFaceOrderVo) throws Exception {
Result<String> result = new Result<>(); Result<String> result = new Result<>();
try { try {
//元转分
int money = new BigDecimal(wxFaceOrderVo.getTotalAmount()).multiply(new BigDecimal(100)).intValue();
wxFaceOrderVo.setTotalAmount(String.valueOf(money));
//1 初始化 //1 初始化
this.initWxpayface(); this.initWxpayface();
@@ -95,6 +91,7 @@ public class WxFacePayController {
WxPayMicropayResult micropayResult = new WxPayMicropayResult(); WxPayMicropayResult micropayResult = new WxPayMicropayResult();
if (StringUtil.isNotBlank(authinfoResp.getFace_code())) { if (StringUtil.isNotBlank(authinfoResp.getFace_code())) {
//5、调用后台人脸支付API发起支付 //5、调用后台人脸支付API发起支付
System.out.println("---------调用后台人脸支付API发起支付");
wxFaceOrderVo.setOutTradeNo(getOutTradeNo()); wxFaceOrderVo.setOutTradeNo(getOutTradeNo());
micropayResult = this.toCreateWxOrder(authinfoResp, wxFaceOrderVo, wxFacePayResp0); micropayResult = this.toCreateWxOrder(authinfoResp, wxFaceOrderVo, wxFacePayResp0);
@@ -139,7 +136,7 @@ public class WxFacePayController {
@RequestMapping(value = "/initWxpayface", method = RequestMethod.POST) @RequestMapping(value = "/initWxpayface", method = RequestMethod.POST)
public WxFacePayResp initWxpayface() throws JsonProcessingException, UnsupportedEncodingException, WxpayFaceSDKDll.DllRegistrationException { public WxFacePayResp initWxpayface() throws JsonProcessingException, UnsupportedEncodingException, WxpayFaceSDKDll.DllRegistrationException {
// 构建请求参数的JSON字符串 // 构建请求参数的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); WxFacePayResp wxFacePayResp = weChatPayFaceService.doWxPayIniMethod(wxFacePayReq);
log.info("[WxFacePayController][initWxpayface][132] [1、程序启动时初始化]{}", wxFacePayResp.toString()); log.info("[WxFacePayController][initWxpayface][132] [1、程序启动时初始化]{}", wxFacePayResp.toString());
return wxFacePayResp; return wxFacePayResp;
@@ -184,6 +181,7 @@ public class WxFacePayController {
public WxFacePayAuthinfoResp getWxpayfaceCode(@RequestBody WxFaceOrderVo wxFaceOrderVo, WxFacePayAuthinfoResp wxFacePayResp0) throws Exception { public WxFacePayAuthinfoResp getWxpayfaceCode(@RequestBody WxFaceOrderVo wxFaceOrderVo, WxFacePayAuthinfoResp wxFacePayResp0) throws Exception {
//4、进行人脸识别getWxpayfaceCode获取支付凭证 //4、进行人脸识别getWxpayfaceCode获取支付凭证
String outTradeNo = getOutTradeNo();//获取流水号 String outTradeNo = getOutTradeNo();//获取流水号
// 构建请求参数的JSON字符串 // 构建请求参数的JSON字符串
WxFacePayReq wxFacePayReq = new WxFacePayReq("getWxpayfaceCode", "1", System.currentTimeMillis() / 1000); WxFacePayReq wxFacePayReq = new WxFacePayReq("getWxpayfaceCode", "1", System.currentTimeMillis() / 1000);
wxFacePayReq.setAuthinfo(wxFacePayResp0.getAuthinfo()) 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.dll.WxpayFaceSDKDll;
import com.dpkj.modules.scanface.wx.service.CallWxpayFaceService; import com.dpkj.modules.scanface.wx.service.CallWxpayFaceService;
import com.dpkj.modules.scanface.wx.service.WeChatPayFaceService; 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.WxFacePayAuthinfoResp;
import com.dpkj.modules.scanface.wx.vo.WxFacePayReq; import com.dpkj.modules.scanface.wx.vo.WxFacePayReq;
import com.dpkj.modules.scanface.wx.vo.WxFacePayResp; 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.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import org.thymeleaf.util.StringUtils;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.io.UnsupportedEncodingException; import java.io.UnsupportedEncodingException;
import java.nio.charset.StandardCharsets;
import java.security.Provider; import java.security.Provider;
import java.security.Security; import java.security.Security;
import java.util.HashMap;
import java.util.Map;
import java.util.TreeSet; 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 com.fasterxml.jackson.core.JsonProcessingException;
import java.io.UnsupportedEncodingException; import java.io.UnsupportedEncodingException;
import java.util.Map;
/** /**
* @description: 调用微信刷脸方法 * @description: 调用微信刷脸方法

View File

@@ -45,7 +45,7 @@ public class CallWxpayFaceServiceImpl implements CallWxpayFaceService {
reqPointer.setString(0, reqJson); reqPointer.setString(0, reqJson);
//请求数据长度 //请求数据长度
int reqSize = reqPointer.getString(0).length(); 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]; long[] pRespBuf = new long[1];
@@ -56,21 +56,20 @@ public class CallWxpayFaceServiceImpl implements CallWxpayFaceService {
// 调用本地方法 // 调用本地方法
WxpayFaceSDKDll.Dll dll = WxpayFaceSDKDll.instance(); WxpayFaceSDKDll.Dll dll = WxpayFaceSDKDll.instance();
int result = dll.wxpayCallFaceService(reqPointer.getString(0), reqSize, pRespBuf, respSize); 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) { if (result == 0) {
Pointer pointer = new Pointer(pRespBuf[0]); Pointer pointer = new Pointer(pRespBuf[0]);
byte[] byteArray = pointer.getByteArray(0, respSize[0]); byte[] byteArray = pointer.getByteArray(0, respSize[0]);
resStr = new String(byteArray, StandardCharsets.UTF_8); resStr = new String(byteArray, StandardCharsets.UTF_8);
System.out.println("-----------调用微信刷脸DLL请求结果: " + resStr); log.info("000-----------调用微信刷脸DLL请求结果: " , resStr);
dll.wxpayReleaseResponse(new String[2]); dll.wxpayReleaseResponse(new String[2]);
//释放 C:\Windows\System32目录下 WxpayFaceSDK.INSTANCE.wxpayReleaseResponse(new String[2]); //释放 C:\Windows\System32目录下 WxpayFaceSDK.INSTANCE.wxpayReleaseResponse(new String[2]);
} else { } else {
Pointer pointer = new Pointer(pRespBuf[0]); Pointer pointer = new Pointer(pRespBuf[0]);
byte[] byteArray = pointer.getByteArray(0, respSize[0]); byte[] byteArray = pointer.getByteArray(0, respSize[0]);
resStr = new String(byteArray, StandardCharsets.UTF_8); resStr = new String(byteArray, StandardCharsets.UTF_8);
System.err.println("-----------调用人脸服务失败: " +resStr); log.error("000-----------调用人脸DLL服务失败: " ,resStr);
} }
return 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.WxRandomUtils;
import com.dpkj.modules.scanface.wx.util.XmlParserUtil; import com.dpkj.modules.scanface.wx.util.XmlParserUtil;
import com.dpkj.modules.scanface.wx.util.XmlUtils; import com.dpkj.modules.scanface.wx.util.XmlUtils;
import com.dpkj.modules.scanface.wx.vo.WxFacePayAuthinfoResp; import com.dpkj.modules.scanface.wx.vo.*;
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.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import com.github.binarywang.wxpay.constant.WxPayConstants;
import com.sun.jna.Memory; import com.sun.jna.Memory;
import com.sun.jna.Pointer; import com.sun.jna.Pointer;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@@ -27,16 +24,10 @@ import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate; import org.springframework.web.client.RestTemplate;
import com.github.binarywang.wxpay.constant.WxPayConstants;
import java.io.UnsupportedEncodingException; import java.io.UnsupportedEncodingException;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.util.ArrayList; import java.util.*;
import java.util.Base64;
import java.util.List;
import java.util.Map;
import java.util.SortedMap;
import java.util.TreeMap;
/** /**
* @description: 调用微信刷脸方法 * @description: 调用微信刷脸方法

View File

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

View File

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

View File

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

View File

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

View File

@@ -1,6 +1,27 @@
spring: spring:
servlet:
multipart:
max-file-size: 10MB
max-request-size: 10MB
resource:
static-locations: classpath:/static/,classpath:/public/
application: application:
name: yinyitong-zhongyuyuan-dll-hang name: ems-express-bridge
profiles: 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> </appender>
<!-- 生成 error html格式日志开始 --> <!-- 生成 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"> <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<!--设置日志级别,过滤掉info日志,只输入error日志--> &lt;!&ndash;设置日志级别,过滤掉info日志,只输入error日志&ndash;&gt;
<level>ERROR</level> <level>ERROR</level>
</filter> </filter>
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder"> <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
@@ -40,15 +40,15 @@
</layout> </layout>
</encoder> </encoder>
<file>${LOG_HOME}/error-log.html</file> <file>${LOG_HOME}/error-log.html</file>
</appender> </appender>-->
<!-- 生成 error html格式日志结束 --> <!-- 生成 error html格式日志结束 -->
<!-- 每天生成一个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"> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!--日志文件输出的文件名 --> &lt;!&ndash;日志文件输出的文件名 &ndash;&gt;
<FileNamePattern>${LOG_HOME}/%d{yyyy-MM-dd}.%i.html</FileNamePattern> <FileNamePattern>${LOG_HOME}/%d{yyyy-MM-dd}.%i.html</FileNamePattern>
<!--日志文件保留天数 --> &lt;!&ndash;日志文件保留天数 &ndash;&gt;
<MaxHistory>30</MaxHistory> <MaxHistory>30</MaxHistory>
<MaxFileSize>10MB</MaxFileSize> <MaxFileSize>10MB</MaxFileSize>
</rollingPolicy> </rollingPolicy>
@@ -57,7 +57,7 @@
<pattern>%p%d%msg%M%F{32}%L</pattern> <pattern>%p%d%msg%M%F{32}%L</pattern>
</layout> </layout>
</encoder> </encoder>
</appender> </appender>-->
<!-- 每天生成一个html格式的日志结束 --> <!-- 每天生成一个html格式的日志结束 -->
<!--myibatis log configure --> <!--myibatis log configure -->
@@ -70,8 +70,8 @@
<root level="INFO"> <root level="INFO">
<appender-ref ref="STDOUT"/> <appender-ref ref="STDOUT"/>
<appender-ref ref="FILE"/> <appender-ref ref="FILE"/>
<appender-ref ref="HTML"/> <!-- <appender-ref ref="HTML"/>-->
<appender-ref ref="FILE_HTML"/> <!-- <appender-ref ref="FILE_HTML"/>-->
</root> </root>
</configuration> </configuration>

View File

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

View File

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

View File

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