交通银行电子健康卡数据未上报,因缺少openid

debug
王绍全 12 hours ago
parent 33aaf52d1f
commit d974cb255c
  1. 29
      src/main/java/com/ynxbd/common/TestA.java
  2. 4
      src/main/java/com/ynxbd/common/action/pay/BcmPayAction.java
  3. 4
      src/main/java/com/ynxbd/common/dao/PayResultDao.java
  4. 13
      src/main/java/com/ynxbd/common/service/HealthUploadService.java
  5. 22
      src/main/java/com/ynxbd/common/service/RecipeService.java
  6. 19
      src/main/java/com/ynxbd/common/service/RegService.java
  7. 10
      src/main/java/com/ynxbd/wx/config/MessagePushConfig.java

@ -1,6 +1,7 @@
package com.ynxbd.common; package com.ynxbd.common;
import com.ynxbd.common.bean.Patient; import com.ynxbd.common.bean.Patient;
import com.ynxbd.common.bean.enums.MerchantEnum;
import com.ynxbd.common.helper.common.HMACHelper; import com.ynxbd.common.helper.common.HMACHelper;
import com.ynxbd.common.result.JsonResult; import com.ynxbd.common.result.JsonResult;
import com.ynxbd.common.result.JsonResultEnum; import com.ynxbd.common.result.JsonResultEnum;
@ -37,20 +38,20 @@ public class TestA {
public static void main(String[] args) { public static void main(String[] args) {
String respXML = "<Response>\n" + // String respXML = "<Response>\n" +
"\t<TransactionCode>1002</TransactionCode>\n" + // "\t<TransactionCode>1002</TransactionCode>\n" +
"\t<ResponseCode>0</ResponseCode>\n" + // "\t<ResponseCode>0</ResponseCode>\n" +
"\t<ResponseMessage>成功</ResponseMessage>\n" + // "\t<ResponseMessage>成功</ResponseMessage>\n" +
"\t<PatientID>932606</PatientID>\n" + // "\t<PatientID>932606</PatientID>\n" +
"\t<Empi_Id>300349719</Empi_Id>\n" + // "\t<Empi_Id>300349719</Empi_Id>\n" +
"\t<HISTrasNo>137087</HISTrasNo>\n" + // "\t<HISTrasNo>137087</HISTrasNo>\n" +
"</Response>"; // "</Response>";
JsonResult result = JsonResult.xmlToBean(respXML, JsonResultEnum.SYS_HIS); // JsonResult result = JsonResult.xmlToBean(respXML, JsonResultEnum.SYS_HIS);
if (result == null) { // if (result == null) {
return; // return;
} // }
Patient patient = result.dataMapToBean(Patient.class); // Patient patient = result.dataMapToBean(Patient.class);
System.out.println(patient); // System.out.println(patient);
} }

@ -6,6 +6,7 @@ import com.ynxbd.common.action.base.BaseAction;
import com.ynxbd.common.bean.enums.MerchantEnum; import com.ynxbd.common.bean.enums.MerchantEnum;
import com.ynxbd.common.bean.pay.PayResult; import com.ynxbd.common.bean.pay.PayResult;
import com.ynxbd.common.helper.common.DateHelper; import com.ynxbd.common.helper.common.DateHelper;
import com.ynxbd.common.helper.common.JsonHelper;
import com.ynxbd.common.result.Result; import com.ynxbd.common.result.Result;
import com.ynxbd.common.result.ServiceException; import com.ynxbd.common.result.ServiceException;
import com.ynxbd.common.service.RecipeService; import com.ynxbd.common.service.RecipeService;
@ -47,16 +48,17 @@ public class BcmPayAction extends BaseAction {
String payDate = DateHelper.getCurDate(); String payDate = DateHelper.getCurDate();
String payTime = DateHelper.getCurTime(); String payTime = DateHelper.getCurTime();
String bankMerchantNo = notifyInfo.getBankMerchantNo(); String bankMerchantNo = notifyInfo.getBankMerchantNo();
log.info("【交行】[{}] 收到通知 outTradeNo={}, bankTransNo={}, bankMerchantNo={}", notifyType, outTradeNo, bankTransNo, bankMerchantNo); log.info("【交行】[{}] 收到通知 outTradeNo={}, bankTransNo={}, bankMerchantNo={}", notifyType, outTradeNo, bankTransNo, bankMerchantNo);
switch (PEnum.toEnum(notifyType)) { switch (PEnum.toEnum(notifyType)) {
case RECIPE: case RECIPE:
openid = new RecipeService().queryOpenIdByOutTradeNo(outTradeNo);
new RecipeService().recipeListPay(MerchantEnum.BCM, totalFee.toString(), openid, outTradeNo, bankTransNo, bankMerchantNo, payDate, payTime, payInfo); new RecipeService().recipeListPay(MerchantEnum.BCM, totalFee.toString(), openid, outTradeNo, bankTransNo, bankMerchantNo, payDate, payTime, payInfo);
break; break;
case REG: // 挂号 case REG: // 挂号
try { try {
openid = new RegService().queryOpenIdByOutTradeNo(outTradeNo);
new RegService().regPaidNotify(MerchantEnum.BCM, totalFee, openid, bankTransNo, outTradeNo, bankMerchantNo, payDate, payTime, payInfo, new Date()); new RegService().regPaidNotify(MerchantEnum.BCM, totalFee, openid, bankTransNo, outTradeNo, bankMerchantNo, payDate, payTime, payInfo, new Date());
} catch (ServiceException e) { } catch (ServiceException e) {
log.info("【交行]挂号通知错误 outTradeNo={}, bankTransNo={}, message={}", outTradeNo, bankTransNo, e.getMessage()); log.info("【交行]挂号通知错误 outTradeNo={}, bankTransNo={}, message={}", outTradeNo, bankTransNo, e.getMessage());

@ -20,11 +20,11 @@ public class PayResultDao {
public boolean queryOrderByOutTradeNoAndOpenid(String outTradeNo, String openid) { public boolean queryOrderByOutTradeNoAndOpenid(String outTradeNo, String openid) {
String sql = "select id from pay_result where outTradeNo=? and openid=?"; String sql = "select id from pay_result where outTradeNo=? and openid=?";
return DataBase.select(sql, PayResult.class, ps -> { return !DataBase.select(sql, PayResult.class, ps -> {
ps.setString(1, outTradeNo); ps.setString(1, outTradeNo);
ps.setString(2, openid); ps.setString(2, openid);
}).size() > 0; }).isEmpty();
} }

@ -2,6 +2,7 @@ package com.ynxbd.common.service;
import com.ynxbd.common.bean.Patient; import com.ynxbd.common.bean.Patient;
import com.ynxbd.common.bean.enums.HealthCardEnum; import com.ynxbd.common.bean.enums.HealthCardEnum;
import com.ynxbd.common.bean.enums.MerchantEnum;
import com.ynxbd.common.config.HealthCardConfig; import com.ynxbd.common.config.HealthCardConfig;
import com.ynxbd.common.dao.PatientDao; import com.ynxbd.common.dao.PatientDao;
import com.ynxbd.common.helper.HealthCardHelper; import com.ynxbd.common.helper.HealthCardHelper;
@ -22,16 +23,19 @@ public class HealthUploadService {
* @param deptName 科室名 * @param deptName 科室名
* @param regDate 挂号日期 * @param regDate 挂号日期
*/ */
public void regPayReportHISData(String openid, String patientId, String deptName, String regDate) { public void regPayReportHISData(MerchantEnum merchantEnum, String openid, String patientId, String deptName, String regDate) {
try { try {
if (!HealthCardConfig.IS_UPLOAD_DATA) { // 禁止数据上传 if (!HealthCardConfig.IS_UPLOAD_DATA) { // 禁止数据上传
return; return;
} }
if (!HealthCardConfig.isEnable()) { // 判断是否禁用电子健康卡 if (!HealthCardConfig.isEnable()) { // 判断是否禁用电子健康卡
return; return;
} }
if (!MerchantEnum.WX.equals(merchantEnum) && !MerchantEnum.BCM.equals(merchantEnum)) {
return;
}
if (deptName == null || openid == null || patientId == null || regDate == null) { if (deptName == null || openid == null || patientId == null || regDate == null) {
return; return;
} }
@ -63,7 +67,7 @@ public class HealthUploadService {
* @param openid openid * @param openid openid
* @param patientId patientId * @param patientId patientId
*/ */
public void rxReportHISData(String openid, String patientId) { public void rxReportHISData(MerchantEnum merchantEnum, String openid, String patientId) {
try { try {
if (!HealthCardConfig.IS_UPLOAD_DATA) { // 禁止数据上传 if (!HealthCardConfig.IS_UPLOAD_DATA) { // 禁止数据上传
return; return;
@ -71,6 +75,9 @@ public class HealthUploadService {
if (!HealthCardConfig.isEnable()) { // 判断是否禁用电子健康卡 if (!HealthCardConfig.isEnable()) { // 判断是否禁用电子健康卡
return; return;
} }
if (!MerchantEnum.WX.equals(merchantEnum) && !MerchantEnum.BCM.equals(merchantEnum)) { // 商户类型判断
return;
}
if (ObjectUtils.isEmpty(openid) || ObjectUtils.isEmpty(patientId)) { if (ObjectUtils.isEmpty(openid) || ObjectUtils.isEmpty(patientId)) {
return; return;

@ -9,6 +9,7 @@ import com.ynxbd.common.bean.StandardPrice;
import com.ynxbd.common.bean.enums.MerchantEnum; import com.ynxbd.common.bean.enums.MerchantEnum;
import com.ynxbd.common.bean.pay.Order; import com.ynxbd.common.bean.pay.Order;
import com.ynxbd.common.bean.pay.Recipe; import com.ynxbd.common.bean.pay.Recipe;
import com.ynxbd.common.bean.pay.Register;
import com.ynxbd.common.dao.RecipeDao; import com.ynxbd.common.dao.RecipeDao;
import com.ynxbd.common.dao.RefundDao; import com.ynxbd.common.dao.RefundDao;
import com.ynxbd.common.dao.SelfHelpDao; import com.ynxbd.common.dao.SelfHelpDao;
@ -375,7 +376,7 @@ public class RecipeService {
TZReserveConfig.reserveRun(patientId); // 天助医技预约 TZReserveConfig.reserveRun(patientId); // 天助医技预约
new HealthUploadService().rxReportHISData(openid, patientId); new HealthUploadService().rxReportHISData(merchantEnum, openid, patientId);
return true; return true;
} }
@ -1058,6 +1059,7 @@ public class RecipeService {
return new RecipeDao().insert(recipe); return new RecipeDao().insert(recipe);
} }
// 查询唯一订单-不支持查询多张发票的处方
public Order queryRxByOrderNo(String outTradeNo, String tradeNo) { public Order queryRxByOrderNo(String outTradeNo, String tradeNo) {
if (!ObjectUtils.isEmpty(outTradeNo)) { if (!ObjectUtils.isEmpty(outTradeNo)) {
return new RecipeDao().selectOneByOutTradeNo(outTradeNo); return new RecipeDao().selectOneByOutTradeNo(outTradeNo);
@ -1067,4 +1069,22 @@ public class RecipeService {
} }
return new RecipeDao().selectByTradeNo(tradeNo); return new RecipeDao().selectByTradeNo(tradeNo);
} }
// 查询处方订单集
public List<Recipe> queryRxListByOrderNo(String outTradeNo) {
if (ObjectUtils.isEmpty(outTradeNo)) {
return new ArrayList<>();
}
return new RecipeDao().selectListByOutTradeNo(outTradeNo);
}
// 查询订单openid
public String queryOpenIdByOutTradeNo(String outTradeNo) {
List<Recipe> rxList = queryRxListByOrderNo(outTradeNo);
if (rxList.isEmpty()) {
return null;
}
Recipe order = rxList.get(0);
return order.getOpenid();
}
} }

@ -224,11 +224,7 @@ public class RegService {
MessagePushConfig.regAI(merchantEnum, reg); MessagePushConfig.regAI(merchantEnum, reg);
// 挂号导航推送 MessagePushConfig.regNavigatePush(merchantEnum, reg); // 挂号导航推送
MessagePushConfig.regNavigatePush(merchantEnum, reg);
// 电子健康卡上报数据
new HealthUploadService().regPayReportHISData(openid, patientId, reg.getDeptName(), reg.getRegDate());
} }
if (MerchantEnum.ALI.equals(merchantEnum)) { if (MerchantEnum.ALI.equals(merchantEnum)) {
@ -239,6 +235,10 @@ public class RegService {
AliMessageHelper.hospitalOrder(openid, title, AliMsgEnum.MERCHANT_PREORDER_SUCCESS, reg.getUpdateTime(), true, totalFee, outTradeNo, reg.getRegDate(), reg.getBegTime(), reg.getDeptCode(), reg.getDeptName(), reg.getDoctName(), AliMessageHelper.hospitalOrder(openid, title, AliMsgEnum.MERCHANT_PREORDER_SUCCESS, reg.getUpdateTime(), true, totalFee, outTradeNo, reg.getRegDate(), reg.getBegTime(), reg.getDeptCode(), reg.getDeptName(), reg.getDoctName(),
AliHelper.getLink(link, null)); AliHelper.getLink(link, null));
} }
// 电子健康卡上报数据
new HealthUploadService().regPayReportHISData(merchantEnum, openid, patientId, reg.getDeptName(), reg.getRegDate());
return true; return true;
} }
@ -1247,4 +1247,13 @@ public class RegService {
return new HisRegisterDao().queryHisRegSourceState(deptCode, subDeptCode, isTimeInterval, timeInterval); return new HisRegisterDao().queryHisRegSourceState(deptCode, subDeptCode, isTimeInterval, timeInterval);
} }
} }
// 查询订单openid
public String queryOpenIdByOutTradeNo(String outTradeNo) {
Order order = queryRegByOrderNo(outTradeNo, null);
if (order == null) {
return null;
}
return order.getOpenid();
}
} }

@ -89,8 +89,7 @@ public class MessagePushConfig {
*/ */
public static void regNavigatePush(MerchantEnum merchantEnum, Register reg) { public static void regNavigatePush(MerchantEnum merchantEnum, Register reg) {
try { try {
if (!merchantEnum.equals(MerchantEnum.WX) if (!merchantEnum.equals(MerchantEnum.WX) || !REG_NAVIGATE_IS_ENABLE || ObjectUtils.isEmpty(REG_NAVIGATE_URL)) {
|| !REG_NAVIGATE_IS_ENABLE || ObjectUtils.isEmpty(REG_NAVIGATE_URL)) {
return; return;
} }
@ -186,8 +185,7 @@ public class MessagePushConfig {
*/ */
public static void regAI(MerchantEnum merchantEnum, Register reg) { public static void regAI(MerchantEnum merchantEnum, Register reg) {
try { try {
if (!merchantEnum.equals(MerchantEnum.WX) if (!merchantEnum.equals(MerchantEnum.WX) || !REG_AI_IS_ENABLE || reg == null || ObjectUtils.isEmpty(REG_AI_URL)) {
|| !REG_AI_IS_ENABLE || reg == null || ObjectUtils.isEmpty(REG_AI_URL)) {
return; return;
} }
@ -199,8 +197,8 @@ public class MessagePushConfig {
} }
String url = PWEHelper.getH5PWEUrl(reg.getOutTradeNo(), reg.getOpenid()); String url = PWEHelper.getH5PWEUrl(reg.getOutTradeNo(), reg.getOpenid());
if (url == null || "".equals(url)) { if (ObjectUtils.isEmpty(url)) {
log.warn("[推送][推送]AI智能问诊推送通知失败,问诊获取参数为空 outTradeNo-{}", reg.getOutTradeNo()); log.warn("[推送][推送]AI智能问诊推送通知失败,问诊获取参数为空 outTradeNo={}", reg.getOutTradeNo());
return; return;
} }

Loading…
Cancel
Save