1、日志调整

2、挂号历史记录新增与HIS交互的订单号返回,医保挂号支付后,存储发票号。
debug
王绍全 18 hours ago
parent 6e64a4eade
commit bc10372a7d
  1. 2
      doc/bocom-api-sdk_v1_条码/example/com/bocom/api/example/pmssMpng/MPNG210003V1Test.java
  2. 2
      doc/bocom-api-sdk_v1_条码/example/com/bocom/api/example/pmssMpng/PmmsMpngNotify.java
  3. 2
      doc/bocom-api-sdk_v1_条码/example/com/bocom/api/example/pmssMpng/RefundMoney_MPNG020701V1Test.java
  4. 4
      src/main/java/com/ynxbd/bcm/config/BCMConfig.java
  5. 2
      src/main/java/com/ynxbd/common/action/RegisterAction.java
  6. 2
      src/main/java/com/ynxbd/common/action/pay/BcmPayAction.java
  7. 4
      src/main/java/com/ynxbd/common/action/pay/MedicalAction.java
  8. 2
      src/main/java/com/ynxbd/common/action/pay/MedicalTestAction.java
  9. 2
      src/main/java/com/ynxbd/common/bean/pay/Register.java
  10. 2
      src/main/java/com/ynxbd/common/dao/AccountsDao.java
  11. 7
      src/main/java/com/ynxbd/common/dao/RegisterDao.java
  12. 15
      src/main/java/com/ynxbd/common/dao/his/HisRegisterDao.java
  13. 10
      src/main/java/com/ynxbd/common/helper/his/HisEnum.java
  14. 7
      src/main/java/com/ynxbd/common/service/MedicalService.java
  15. 12
      src/main/java/com/ynxbd/common/service/RegService.java
  16. 6
      src/main/java/com/ynxbd/wx/remove/dao/WSDao.java
  17. 2
      src/main/java/com/ynxbd/wx/wxfactory/WxMedHelper.java
  18. 10
      src/main/java/com/ynxbd/wx/wxfactory/WxPayHelper.java
  19. 16
      src/main/java/com/ynxbd/wx/wxfactory/medical/Client.java
  20. 2
      src/main/java/com/ynxbd/wx/wxfactory/message/MdClient.java
  21. 2
      src/main/java/com/ynxbd/wx/wxfactory/utils/WxRespHelper.java

@ -113,7 +113,7 @@ public class MPNG210003V1Test {
MPNG210003ResponseV1.RspHead rspHead = response.getRspHead();
String responseStatus = rspHead.getResponseStatus();
System.out.println("[交行]二维码下单返回 resp={}" + JSON.toJSONString(response));
System.out.println("【交行】二维码下单返回 resp={}" + JSON.toJSONString(response));
if (response.isSuccess() && "S".equals(response.getBizState()) && "S".equals(responseStatus)) {
System.out.println("success");
MPNG210003ResponseV1.RspBody rspBody = response.getRspBody();

@ -49,7 +49,7 @@ public class PmmsMpngNotify {
// MPNG210003ResponseV1.RspHead rspHead = response.getRspHead();
// String responseStatus = rspHead.getResponseStatus();
//
// System.out.println("[交行]二维码下单返回 resp={}" + JSON.toJSONString(response));
// System.out.println("【交行】二维码下单返回 resp={}" + JSON.toJSONString(response));
// if (response.isSuccess() && "S".equals(response.getBizState()) && "S".equals(responseStatus)) {
// System.out.println("success");
// MPNG210003ResponseV1.RspBody rspBody = response.getRspBody();

@ -62,7 +62,7 @@ public class RefundMoney_MPNG020701V1Test {
request.setBizContent(bizContent);
MPNG020701ResponseV1 response = client.execute(request, UUID.randomUUID().toString().replace("-", ""));
System.out.println("[交行]退款 resp={}" + JSON.toJSONString(response));
System.out.println("【交行】退款 resp={}" + JSON.toJSONString(response));
if (response.isSuccess()) {
System.out.println("success");
} else {

@ -27,7 +27,7 @@ public class BCMConfig {
if (isEnable) {
IS_DEV = config.getBoolean("bcm.is_dev", false);
if (IS_DEV) {
log.info("[交行]配置文件当前为测试环境-----------------------");
log.info("【交行】配置文件当前为测试环境-----------------------");
config = new ProperHelper().read("bcm/bcm-dev.properties");
}
@ -47,7 +47,7 @@ public class BCMConfig {
}
if (APP_ID == null || MER_PTC_ID == null) {
log.error("[交行]读取配置文件bcm.properties失败");
log.error("【交行】读取配置文件bcm.properties失败");
}
}

@ -682,7 +682,7 @@ public class RegisterAction extends BaseAction {
// }
//
// /**
// * [现场挂号]获取指定科室医生信息
// * [今日挂号]获取指定科室医生信息
// */
// @Action("getSiteDoctorList")
// public String getSiteDoctorList() {

@ -23,7 +23,7 @@ import java.util.Date;
public class BcmPayAction extends BaseAction {
/**
* [交行]处方支付通知
* 交行处方支付通知
*
* @return 是否成功
*/

@ -382,7 +382,7 @@ public class MedicalAction extends BaseAction {
@Action("payNotify")
public Result payNotify() {
try {
log.info("[微信医保]回调通知...");
log.info("【微信-医保】回调通知...");
MedicalNotify notifyInfo = WxMedHelper.paidMedNotify(request);
// 成功返回
Result.respXml(MedRespHelper.respOk(WxMedConfig.PAY_KEY));
@ -397,7 +397,7 @@ public class MedicalAction extends BaseAction {
String notifyType = notifyInfo.getAttach();
log.info("[微信医保][{}] 收到通知 outTradeNo={}, bankTransNo={}, notifyType={}",
log.info("【微信-医保】[{}] 收到通知 outTradeNo={}, bankTransNo={}, notifyType={}",
notifyType, outTradeNo, bankTransNo, notifyType);
new MedicalService().commonNotify(MerchantEnum.WX_MEDICAL, notifyType, outTradeNo, totalFee, bankTransNo, payDate, payTime, openid, payInfo);

@ -137,7 +137,7 @@ public class MedicalTestAction extends BaseAction {
*/
@Action("queryWxOrder")
public Result queryWxOrder(String accessToken, String outTradeNo, String medTransId) {
log.info("[微信医保]订单查询 outTradeNo={}, medTransId={}", outTradeNo, medTransId);
log.info("【微信-医保】订单查询 outTradeNo={}, medTransId={}", outTradeNo, medTransId);
WxMedOrder order = WxMedHelper.queryOrder(accessToken, outTradeNo, medTransId);
if (order.isOk()) {
return Result.success(order);

@ -49,7 +49,7 @@ public class Register extends Order {
private String tid;
// 时段名
private String tName;
// 挂号类型(1:预约挂号,2:现场挂号,3:分时段预约挂号,4:分时段现场挂号)
// 挂号类型(1:预约挂号,2:今日挂号,3:分时段预约挂号,4:分时段今日挂号)
private String regType;
// 挂号日期
private String regDate;

@ -31,7 +31,7 @@ public class AccountsDao {
"group by date_format(updatetime,'%Y-%m-%d')\n" +
"union all\n" +
"select CONCAT(date_format(updatetime,'%Y%m%d'), '3') as no, date_format(updatetime,'%Y-%m-%d') as date, " +
"count(*) as 'count' , sum(paymoney) as 'sumMoney', '现场挂号' as description from register " +
"count(*) as 'count' , sum(paymoney) as 'sumMoney', '今日挂号' as description from register " +
"where paystatus = 0 and hisstatus = 0 and (RegType = 1 or updatetime >= regdate) and updatetime BETWEEN '" + begDate + "' and DATE_ADD('" + endDate + "',INTERVAL 1 DAY)\n" +
"group by date_format(updatetime,'%Y-%m-%d') \n" +
"union all\n" +

@ -518,10 +518,11 @@ public class RegisterDao {
* @param outTradeNo 订单号
* @return 是否成功
*/
public boolean updateHisPaidByOutTradeNo(String outTradeNo) {
String sql = "update register set payStatus=0, hisStatus=0 where outTradeNo=? and hisStatus= -1";
public boolean updateHisPaidByOutTradeNo(String outTradeNo, String invoiceTransNo) {
String sql = "update register set payStatus=0, hisStatus=0, invoiceTransNo=? where outTradeNo=? and hisStatus= -1";
return DataBase.update(sql, ps -> {
ps.setString(1, outTradeNo);
ps.setString(1, invoiceTransNo);
ps.setString(2, outTradeNo);
}) > 0;
}

@ -125,14 +125,14 @@ public class HisRegisterDao {
}
/**
* [现场挂号]获取现场挂号医生列表
* [今日挂号]获取今日挂号医生列表
*
* @param deptCode 科室代码
* @param timeInterval 挂号时段显示
* @return 医生列表
*/
public List<Doctor> getRegTodayDoctorList(String deptCode, String timeInterval) {
log.info("[现场挂号]查询HIS医生列表 deptCode={}", deptCode);
log.info("[今日挂号]查询HIS医生列表 deptCode={}", deptCode);
Map<String, Object> params = new HashMap<>();
params.put("DeptCode", deptCode);
@ -261,7 +261,7 @@ public class HisRegisterDao {
// 晚班
boolean isNight = night != null && nightBegTime != null && nightEndTime != null && DateHelper.inTimeRangeH_m_s(nightBegTime, nightEndTime);
log.info("【现场挂号】时段{{}}", key);
log.info("【今日挂号】时段{{}}", key);
Register register;
for (Doctor doctor : doctorList) {
@ -365,7 +365,7 @@ public class HisRegisterDao {
/**
* [现场挂号]获取科室列表
* [今日挂号]获取科室列表
*
* @param hasSourcesFlag 有号源标识 { 1:仅返回有号源科室; 0:有无号源科室都返回默认值}
* @return 科室列表
@ -379,7 +379,7 @@ public class HisRegisterDao {
hasSourcesFlag = "1";
}
log.info("[现场挂号]查询HIS科室列表");
log.info("[今日挂号]查询HIS科室列表");
List<Dept> resultList = new ArrayList<>();
Map<String, Object> params = new HashMap<>();
@ -490,6 +490,7 @@ public class HisRegisterDao {
reg.setBegTime(node.getString("BegTime"));
reg.setEndTime(node.getString("EndTime"));
reg.setRefundDate(node.getString("RefundDate"));
reg.setTradeNo(node.getString("TransNo"));
// 是否取号
reg.setIsTake(node.getInteger("IsTake"));
// 是否就诊
@ -562,8 +563,8 @@ public class HisRegisterDao {
reg.setRegDate(node.getString("ReservationDate")); // 日期
reg.setHisTransNo(node.getString("HISTransNo")); // HIS流水号
reg.setTradeNo(node.getString("ReservationTransNo")); // HIS交易流水号
reg.setHospitalArea(node.getString("HospitalAreaName")); // HIS交易流水号
reg.setTradeNo(node.getString("ReservationTransNo")); // HIS交易流水号
reg.setHospitalArea(node.getString("HospitalAreaName")); // 园区
reg.setBegTime(node.getString("BegTime"));
reg.setEndTime(node.getString("EndTime"));
// 金额

@ -26,8 +26,8 @@ public enum HisEnum {
AP_Query_InspectionApplication("[报告]检验(化验)申请单", "5002", "AP_Query_InspectionApplication", false),
// 挂号记录---------------
AP_Query_Regist("[现场挂号]查询现场挂号记录", "2004", "AP_Query_Regist", true),
AP_Query_Reservation("[预约挂号]查询预约挂号记录", "3004", "AP_Query_Reservation", true),
AP_Query_Regist("[挂号记录]查询历史挂号记录", "2004", "AP_Query_Regist", true),
AP_Query_Reservation("[预约挂号]查询预约记录", "3004", "AP_Query_Reservation", true),
// 分时段挂号---------
AP_Query_Dept_New("[分时段挂号]查询科室列表", "7001", "AP_Query_Dept_New", false),
@ -37,9 +37,9 @@ public enum HisEnum {
AP_Occupy_Source_New("[分时段挂号]占号", "7005", "AP_Occupy_Source_New", true),
// 普通挂号---------------
AP_Regist("[现场挂号]执行挂号", "2003", "AP_Regist", true),
AP_Query_Dept("[现场挂号]查询科室列表", "2001", "AP_Query_Dept", true),
AP_Query_Doct("[现场挂号]根据科室查询医生列表", "2002", "AP_Query_Doct", true),
AP_Regist("[今日挂号]执行挂号", "2003", "AP_Regist", true),
AP_Query_Dept("[今日挂号]查询科室列表", "2001", "AP_Query_Dept", true),
AP_Query_Doct("[今日挂号]根据科室查询医生列表", "2002", "AP_Query_Doct", true),
// ----------------------
AP_Query_Reservation_Dept("[预约挂号]查询科室列表", "3001", "AP_Query_Reservation_Dept", true),
AP_Query_Reservation_Doct("[预约挂号]根据科室查询医生列表", "3002", "AP_Query_Reservation_Doct", true),

@ -121,7 +121,6 @@ public class MedicalService {
}
/**
* [医保]his下单
*
@ -524,9 +523,11 @@ public class MedicalService {
return false;
}
log.info("[医保][挂号]HIS结算成功 outTradeNo={}, bankTransNo={}", outTradeNo, bankTransNo);
String invoiceTransNo = jsonResult.getDataMapString("InvoiceTransNo");
log.info("[医保][挂号]HIS结算成功 outTradeNo={}, bankTransNo={}, invoiceTransNo={}", outTradeNo, bankTransNo, invoiceTransNo);
// 成功处理
if (!regDao.updateHisPaidByOutTradeNo(outTradeNo)) {
if (!regDao.updateHisPaidByOutTradeNo(outTradeNo, invoiceTransNo)) {
log.error("[医保][挂号]修改成功数据失败");
}
return true;

@ -56,7 +56,7 @@ public class RegService {
return null;
}
// 挂号类型:1:预约挂号,2:现场挂号,3:分时段预约挂号,4:分时段现场挂号
// 挂号类型:1:预约挂号,2:今日挂号,3:分时段预约挂号,4:分时段今日挂号
if (isSplitTime) {
return DateHelper.isToday(regDate) ? "4" : "3"; // 判断是否是今天
}
@ -135,7 +135,7 @@ public class RegService {
reg.setBankTransNo(bankTransNo);
reg.setTradeNo(tradeNo);
// 挂号类型:1:预约挂号,2:现场挂号;3:分时段预约挂号,4:分时段现场挂号
// 挂号类型:1:预约挂号,2:今日挂号;3:分时段预约挂号,4:分时段今日挂号
regType = reg.getRegType();
patientId = reg.getPatientId();
if (ObjectUtils.isEmpty(patientId) || ObjectUtils.isEmpty(regType) || ObjectUtils.isEmpty(reg.getRegDate())) {
@ -155,7 +155,7 @@ public class RegService {
log.info("{} 开始调用HIS挂号:patientId={}, bankTransNo={}", merchantEnum.NAME, patientId, bankTransNo);
String hisTransNo = null, treatNum = null, hisQueueNo, callNum = null, invoiceTransNo = null;
// 挂号类型:1:预约挂号,2:现场挂号;3:分时段预约挂号,4:分时段现场挂号
// 挂号类型:1:预约挂号,2:今日挂号;3:分时段预约挂号,4:分时段今日挂号
JsonResult jsonResult;
if ("1".equals(regType) || "2".equals(regType)) { // 挂号
log.info("[挂号]开始执行");
@ -827,7 +827,7 @@ public class RegService {
*/
public Register queryRegByHisInfo(String patientId, String tradeNo, String hisTransNo) throws ServiceException {
Register register;
log.info("[挂号订单]根据信息查询订单 patientId={}, hisTransNo={} tradeNo={}", patientId, hisTransNo, tradeNo);
log.info("[挂号订单]根据信息查询订单 patientId={}, hisTransNo={}, tradeNo={}", patientId, hisTransNo, tradeNo);
if (ObjectUtils.isEmpty(patientId)) {
return null;
}
@ -966,13 +966,13 @@ public class RegService {
* @param openId openId
*/
public boolean completeRegTreatNum(String treatNum, String openId, String patientId, String tradeNo, String hisTransNo, String orderFromOwner) throws ServiceException {
if (!ObjectUtils.isEmpty(orderFromOwner) && !"蓝旗".equals(orderFromOwner)) {
if (!ObjectUtils.isEmpty(orderFromOwner) && !"蓝旗".equals(orderFromOwner)) { // 不是线上挂号
return true;
}
RegisterDao regDao = new RegisterDao();
Register findInfo = queryRegByHisInfo(patientId, tradeNo, hisTransNo);
if (findInfo == null) {
throw new ServiceException("未找到挂号信息");
throw new ServiceException("未找到线上挂号信息"); // 本地数据中未找到
}
Long id = findInfo.getId();
String curDate = DateHelper.getCurDate();

@ -66,9 +66,9 @@
// }
//
// /**
// * 获取现场挂号科室列表
// * 获取今日挂号科室列表
// *
// * @return 现场挂号科室列表
// * @return 今日挂号科室列表
// */
// public List<DeptBean> getRegDeptList() {
// List<DeptBean> list = new ArrayList<>();
@ -171,7 +171,7 @@
// }
//
// /**
// * 获取现场挂号医生列表
// * 获取今日挂号医生列表
// *
// * @param deptCode 科室代码
// * @return 医生列表

@ -153,7 +153,7 @@ public class WxMedHelper {
public static Map<String, Object> createOrder(OrderMIEnum OrderMIEnum, String openid, String outTradeNo, String serialNo, String cardNo, String realName, String ip, String payOrdId, String payAuthNo,
BigDecimal totalFee, BigDecimal insuranceFee, BigDecimal cashFee, String body, String callbackUrl, String notifyUrl, String attach, String familyType, String familyName, String familyCardNo) throws ServiceException {
Map<String, Object> map = new HashMap<>();
log.info("[微信医保]下单 outTradeNo={}, openid={}, cardNo={}, realName={}, payOrdId={}, payAuthNo={}, totalFee={}, insuranceFee={}, cashFee={}, familyType={}, familyName={}, familyCardNo={}"
log.info("【微信-医保】下单 outTradeNo={}, openid={}, cardNo={}, realName={}, payOrdId={}, payAuthNo={}, totalFee={}, insuranceFee={}, cashFee={}, familyType={}, familyName={}, familyCardNo={}"
, outTradeNo, openid, cardNo, realName, payOrdId, payAuthNo, totalFee, insuranceFee, cashFee, familyType, familyName, familyCardNo);
MedicalPayOrder order = WxFactory.Medical.Common().createOrder(OrderMIEnum, WxCacheHelper.getAccessToken(),

@ -82,23 +82,23 @@ public class WxPayHelper {
Map<String, Object> paramsMap = WxSignHelper.reqXmlParamsMap(request);
log.info("【微信回调】map={}", paramsMap);
if (paramsMap == null) {
throw new ServiceException("【微信回调通知下单信息返回错误");
throw new ServiceException("【微信回调通知下单信息返回错误");
}
// 签名验证
if (!WxSignHelper.validateSign(paramsMap, WeChatConfig.MCH_KEY)) { // 验证未通过,通知支付失败
throw new ServiceException("【微信回调通知签名验证未通过!");
throw new ServiceException("【微信回调通知签名验证未通过!");
}
String json = JsonHelper.toJsonString(paramsMap);
if (ObjectUtils.isEmpty(json)) {
throw new ServiceException("【微信回调通知下单信息为空");
throw new ServiceException("【微信回调通知下单信息为空");
}
WxPayNotify notifyInfo = JsonHelper.parseObject(json, WxPayNotify.class);
log.info("【微信回调】notifyInfo={}", notifyInfo);
if (notifyInfo == null) {
throw new ServiceException("【微信回调通知下单信息转换失败");
throw new ServiceException("【微信回调通知下单信息转换失败");
}
String openid = notifyInfo.getOpenid();
@ -1176,7 +1176,7 @@ public class WxPayHelper {
public static WxNativePayResult createNativeOrder(String notifyUrl, String title, BigDecimal totalFee, String outTradeNo, String notifyType, String ip) {
try {
if (ObjectUtils.isEmpty(outTradeNo) || ObjectUtils.isEmpty(notifyUrl) || totalFee == null || notifyType == null) {
log.info("【微信】Native下单参数缺失");
log.info("Native下单参数缺失");
return null;
}

@ -142,11 +142,11 @@ public class Client {
params.put("channel_no", channel); // 渠道号
//----------------------------------------------------------------
params.put("sign", WxSignHelper.generateSign(params, WxSignHelper.SIGN_TYPE_MD5, mdPayKey));
// [微信医保]测试报告内容[3]
log.info("[微信医保][下单] req={}", JsonHelper.toJsonString(params));
// 【微信-医保】测试报告内容[3]
log.info("【微信-医保】[下单] req={}", JsonHelper.toJsonString(params));
});
log.info("[微信医保][下单] resp={}", JsonHelper.toJsonString(jsonResult));
log.info("【微信-医保】[下单] resp={}", JsonHelper.toJsonString(jsonResult));
if (!jsonResult.success()) {
return new MedicalPayOrder().createResult(jsonResult);
}
@ -329,7 +329,7 @@ public class Client {
* @return 用户信息
*/
public MedicalUserInfo getUserInfo(String reqUrl, String openid, String qrcode) {
log.info("[微信医保][授权]请求地址-{}", reqUrl);
log.info("【微信-医保】[授权]请求地址-{}", reqUrl);
MedicalUserInfo info = new MedicalUserInfo();
String timestamp = Long.toString(System.currentTimeMillis());
@ -341,8 +341,8 @@ public class Client {
JSONObject respJson = OkHttpHelper.postForm(reqUrl, params -> {
params.put("qrcode", qrcode);
params.put("openid", openid);
// [微信医保]测试报告内容[1]
log.info("[微信医保][授权] req={}", JsonHelper.toJsonString(params));
// 【微信-医保】测试报告内容[1]
log.info("【微信-医保】[授权] req={}", JsonHelper.toJsonString(params));
}, headers -> {
headers.set("Accept", "application/json");
headers.set("Content-Type", "application/json");
@ -359,7 +359,7 @@ public class Client {
String message = respJson.getString("message");
log.info("respJson={}", JsonHelper.toJsonString(respJson));
if (!"0".equals(code)) {
log.error("[微信医保][授权]失败 resp={}", respJson);
log.error("【微信-医保】[授权]失败 resp={}", respJson);
info.setMessage(String.format("[%s] %s", code, message));
return info;
@ -381,7 +381,7 @@ public class Client {
info.setCardNo(cardNo);
respJson.remove("user_card_no");
}
log.error("[微信医保][授权]返回 resp={}", respJson);
log.error("【微信-医保】[授权]返回 resp={}", respJson);
info.setUserName(userName);
info.setPayAuthNo(payAuthNo);

@ -110,7 +110,7 @@ public class MdClient {
*
* @param hospitalName 医院名称含院区如果有
* @param url 链接
* @param status 1001-预约挂号成功通知1004-现场挂号成功通知1002-取消预约挂号通知
* @param status 1001-预约挂号成功通知1004-今日挂号成功通知1002-取消预约挂号通知
* @param patCardNo 用户证件号md5
* @param patHospitalId 用户就诊卡号
* @param patName 患者姓名李* *姓名需打码

@ -24,7 +24,7 @@ public class WxRespHelper {
* 成功响应
*/
public static String respOk() {
log.info("【微信回调通知成功");
log.info("【微信回调通知成功");
try {
Map<String, Object> map = new HashMap<>();
map.put("return_code", "SUCCESS");

Loading…
Cancel
Save