diff --git a/src/main/java/com/ynxbd/common/TestA.java b/src/main/java/com/ynxbd/common/TestA.java index 62457ad..5d266ce 100644 --- a/src/main/java/com/ynxbd/common/TestA.java +++ b/src/main/java/com/ynxbd/common/TestA.java @@ -1,21 +1,94 @@ package com.ynxbd.common; -import cn.hutool.crypto.asymmetric.AsymmetricAlgorithm; -import cn.hutool.crypto.asymmetric.RSA; -import com.ynxbd.common.bean.pay.Order; -import com.ynxbd.common.bean.pay.Recipe; +import com.alibaba.fastjson.JSONObject; import com.ynxbd.common.helper.common.JsonHelper; -import com.ynxbd.wx.wxfactory.AesWxHelper; +import com.ynxbd.common.helper.http.OkHttpHelper; +import com.ynxbd.common.result.JsonResult; +import com.ynxbd.common.result.JsonResultEnum; +import com.ynxbd.wx.config.MessagePushConfig; +import com.ynxbd.wx.utils.DesEncryptHelper; +import com.ynxbd.wx.wxfactory.medical.models.MedicalInfo; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.ObjectUtils; import java.math.BigDecimal; +@Slf4j public class TestA { - public static void main(String[] args) throws Exception{ + public static void main(String[] args) throws Exception { +// System.out.println(AesWxHelper.encode("om5HqvlWTys3Bqls6YV-o4iA3Zqg")); +// System.out.println(AesWxHelper.encode("192970")); +// System.out.println(AesWxHelper.encode("533103200008164016")); + System.out.println(DesEncryptHelper.enCode("oeso-t62kkoRwLVVkSkwmmjPfUXk")); + + System.out.println(MessagePushConfig.REG_NAVIGATE_API); +// OkHttpHelper.getAsync(REG_NAVIGATE_API, params -> { +// params.put("patientName", "小王"); +// params.put("content", "就诊时间:2026-08-13 12:12:12"); +// params.put("deptName", "科室"); +// params.put("deptCode", "0001"); +// params.put("openId", "32EBE22EF6C9437575AB7A043E456D25704583EFA5E6BE1B5CB899A6F3B7075A"); +// }); + test(); } + public static void test() { +// String xml = "40090成功0.00ORD530100202608121122576630746TSN5301002026081211225734038313119968898754003081656516118908900{\"setlinfo\":{\"psnCashPay\":0,\"inscpScpAmt\":81,\"medinsSetlId\":\"H53310300023202608121122583668\",\"medType\":\"21\",\"age\":25,\"acctPay\":89,\"psnType\":\"11\",\"psnName\":\"王晨宇\",\"mdtrtCertNo\":\"530000ocvpvqk10ujb26a3720a00009bfc99ea\",\"insuAdmdvs\":\"533199\",\"hifobPay\":0,\"psnCertType\":\"01\",\"mdtrtCertType\":\"01\",\"actPayDedc\":81,\"psnPay\":89,\"psnInsuRltsId\":\"53000000300121343792\",\"overlmtSelfpay\":5,\"ownpayHospPart\":0,\"medfeeSumamt\":89,\"mdtrtId\":\"311996889875\",\"hifmiPay\":0,\"certno\":\"533103200008164016\",\"crtDedc\":81,\"hifpPay\":0,\"poolPropSelfpay\":0,\"clrType\":\"21\",\"mafPay\":0,\"cvlservPay\":0,\"setlTime\":\"2026-08-12 11:22:59\",\"hospPartAmt\":0,\"expContent\":\"{\\\"unif_pay_std\\\":0,\\\"unif_pay_blnc\\\":0,\\\"bkst_safeg_amt\\\":0,\\\"fin_subs\\\":null,\\\"care_subs\\\":null,\\\"insu_cmpy_name\\\":\\\"\\\",\\\"comp_sum_amt\\\":null,\\\"comp_dscr\\\":\\\"\\\",\\\"comp_fail_rea\\\":\\\"\\\",\\\"bas_sec_pool_lmt\\\":0,\\\"mihisec_pool_lmt\\\":0,\\\"cvlserv_acct_pay\\\":0,\\\"oth_subs\\\":null,\\\"bas_sev_inpool_amt\\\":0,\\\"mihisec_inpool_amt\\\":0,\\\"third_pay_list\\\":[],\\\"sp_psn_type\\\":\\\"95341\\\",\\\"cvlserv_lmt_rm\\\":0,\\\"wlt_acct_pay\\\":0,\\\"hosp_payf_amt\\\":0,\\\"cla_trt_flag\\\":\\\"1\\\"}\",\"othPay\":0,\"dedcStd\":600,\"othfundPay\":0,\"preselfpayAmt\":3,\"cashPayamt\":0,\"fulamtOwnpayAmt\":0,\"fundPaySumamt\":0,\"cvlservFlag\":\"0\",\"insutype\":\"310\",\"acctMulaidPay\":0,\"psnPartAmt\":89,\"enddate\":1785838099000,\"hifesPay\":0,\"naty\":\"01\",\"gend\":\"1\",\"brdy\":\"2000-08-16\",\"balc\":242.38,\"inscpAmt\":81,\"hifdmPay\":0,\"begndate\":1785813000000,\"psnNo\":\"DH5310062846\"},\"SETLINFO\":{\"psn_part_amt\":89,\"hifob_pay\":0,\"age\":25,\"psn_pay\":89,\"preselfpay_amt\":3,\"oth_pay\":0,\"hifp_pay\":0,\"overlmt_selfpay\":5,\"hifes_pay\":0,\"psn_cash_pay\":0,\"maf_pay\":0,\"dedc_std\":600,\"act_pay_dedc\":81,\"inscp_amt\":81,\"mdtrt_id\":\"311996889875\",\"hifmi_pay\":0,\"crt_dedc\":81,\"psn_no\":\"DH5310062846\",\"medins_setl_id\":\"H53310300023202608121122583668\",\"certno\":\"533103200008164016\",\"psn_cert_type\":\"01\",\"exp_content\":\"{\\\"unif_pay_std\\\":0,\\\"unif_pay_blnc\\\":0,\\\"bkst_safeg_amt\\\":0,\\\"fin_subs\\\":null,\\\"care_subs\\\":null,\\\"insu_cmpy_name\\\":\\\"\\\",\\\"comp_sum_amt\\\":null,\\\"comp_dscr\\\":\\\"\\\",\\\"comp_fail_rea\\\":\\\"\\\",\\\"bas_sec_pool_lmt\\\":0,\\\"mihisec_pool_lmt\\\":0,\\\"cvlserv_acct_pay\\\":0,\\\"oth_subs\\\":null,\\\"bas_sev_inpool_amt\\\":0,\\\"mihisec_inpool_amt\\\":0,\\\"third_pay_list\\\":[],\\\"sp_psn_type\\\":\\\"95341\\\",\\\"cvlserv_lmt_rm\\\":0,\\\"wlt_acct_pay\\\":0,\\\"hosp_payf_amt\\\":0,\\\"cla_trt_flag\\\":\\\"1\\\"}\",\"setl_time\":\"2026-08-12 11:22:59\",\"acct_mulaid_pay\":0,\"psn_type\":\"11\",\"psn_name\":\"王晨宇\",\"clr_type\":\"21\",\"fulamt_ownpay_amt\":0,\"med_type\":\"21\",\"cashPayamt\":0,\"mdtrt_cert_no\":\"530000ocvpvqk10ujb26a3720a00009bfc99ea\",\"cvlserv_flag\":\"0\",\"cvlserv_pay\":0,\"insutype\":\"310\",\"enddate\":1785838099000,\"ownpay_hosp_part\":0,\"hosp_part_amt\":0,\"mdtrt_cert_type\":\"01\",\"pool_prop_selfpay\":0,\"naty\":\"01\",\"gend\":\"1\",\"brdy\":\"2000-08-16\",\"balc\":242.38,\"hifdm_pay\":0,\"medfee_sumamt\":89,\"othfund_pay\":0,\"psn_insu_rlts_id\":\"53000000300121343792\",\"insu_admdvs\":\"533199\",\"acct_pay\":89,\"inscp_scp_amt\":81,\"begndate\":1785813000000,\"fund_pay_sumamt\":0},\"originalResult\":{\"respondTime\":\"20260812112259839\",\"infRefmsgid\":\"530000202608121122598204425853\",\"output\":{\"setlinfo\":{\"psn_part_amt\":89,\"hifob_pay\":0,\"age\":25,\"psn_pay\":89,\"preselfpay_amt\":3,\"oth_pay\":0,\"hifp_pay\":0,\"overlmt_selfpay\":5,\"hifes_pay\":0,\"psn_cash_pay\":0,\"maf_pay\":0,\"dedc_std\":600,\"act_pay_dedc\":81,\"inscp_amt\":81,\"mdtrt_id\":\"311996889875\",\"hifmi_pay\":0,\"crt_dedc\":81,\"psn_no\":\"DH5310062846\",\"medins_setl_id\":\"H53310300023202608121122583668\",\"certno\":\"533103200008164016\",\"psn_cert_type\":\"01\",\"exp_content\":\"{\\\"unif_pay_std\\\":0,\\\"unif_pay_blnc\\\":0,\\\"bkst_safeg_amt\\\":0,\\\"fin_subs\\\":null,\\\"care_subs\\\":null,\\\"insu_cmpy_name\\\":\\\"\\\",\\\"comp_sum_amt\\\":null,\\\"comp_dscr\\\":\\\"\\\",\\\"comp_fail_rea\\\":\\\"\\\",\\\"bas_sec_pool_lmt\\\":0,\\\"mihisec_pool_lmt\\\":0,\\\"cvlserv_acct_pay\\\":0,\\\"oth_subs\\\":null,\\\"bas_sev_inpool_amt\\\":0,\\\"mihisec_inpool_amt\\\":0,\\\"third_pay_list\\\":[],\\\"sp_psn_type\\\":\\\"95341\\\",\\\"cvlserv_lmt_rm\\\":0,\\\"wlt_acct_pay\\\":0,\\\"hosp_payf_amt\\\":0,\\\"cla_trt_flag\\\":\\\"1\\\"}\",\"setl_time\":\"2026-08-12 11:22:59\",\"acct_mulaid_pay\":0,\"psn_type\":\"11\",\"psn_name\":\"王晨宇\",\"clr_type\":\"21\",\"fulamt_ownpay_amt\":0,\"med_type\":\"21\",\"cashPayamt\":0,\"mdtrt_cert_no\":\"530000ocvpvqk10ujb26a3720a00009bfc99ea\",\"cvlserv_flag\":\"0\",\"cvlserv_pay\":0,\"insutype\":\"310\",\"enddate\":1785838099000,\"ownpay_hosp_part\":0,\"hosp_part_amt\":0,\"mdtrt_cert_type\":\"01\",\"pool_prop_selfpay\":0,\"naty\":\"01\",\"gend\":\"1\",\"brdy\":\"2000-08-16\",\"balc\":242.38,\"hifdm_pay\":0,\"medfee_sumamt\":89,\"othfund_pay\":0,\"psn_insu_rlts_id\":\"53000000300121343792\",\"insu_admdvs\":\"533199\",\"acct_pay\":89,\"inscp_scp_amt\":81,\"begndate\":1785813000000,\"fund_pay_sumamt\":0},\"setldetail\":[{\"fund_pay_type_name\":\"城镇职工基本医疗保险统筹基金(住院)\",\"crt_payb_lmt_amt\":0,\"fund_pay_type\":\"310100\",\"inscp_scp_amt\":0,\"fund_payamt\":0},{\"fund_pay_type_name\":\"职工大病保险基金\",\"crt_payb_lmt_amt\":0,\"fund_pay_type\":\"99999702\",\"inscp_scp_amt\":0,\"fund_payamt\":0},{\"fund_pay_type_name\":\"城镇职工基本医疗保险个人账户基金\",\"crt_payb_lmt_amt\":89,\"fund_pay_type\":\"310200\",\"inscp_scp_amt\":89,\"fund_payamt\":89}]},\"refmsgTime\":\"20260812112258087\",\"infcode\":0},\"setldetail\":[{\"fund_pay_type_name\":\"城镇职工基本医疗保险统筹基金(住院)\",\"crt_payb_lmt_amt\":0,\"fund_pay_type\":\"310100\",\"inscp_scp_amt\":0,\"fund_payamt\":0},{\"fund_pay_type_name\":\"职工大病保险基金\",\"crt_payb_lmt_amt\":0,\"fund_pay_type\":\"99999702\",\"inscp_scp_amt\":0,\"fund_payamt\":0},{\"fund_pay_type_name\":\"城镇职工基本医疗保险个人账户基金\",\"crt_payb_lmt_amt\":89,\"fund_pay_type\":\"310200\",\"inscp_scp_amt\":89,\"fund_payamt\":89}]}"; +// JsonResult result = JsonResult.xmlToBean(xml, JsonResultEnum.SYS_HIS); +// +// String payOrdId = result.getDataMapString("PayOrdId"); +// String payToken = result.getDataMapString("PayToken"); +// String mdTrtId = result.getDataMapString("MdtrtId"); // 医保就诊ID +// String chrgBchno = result.getDataMapString("ChrgBchno"); // 医疗机构订单号、收费批次号 +// String mdUserId = result.getDataMapString("UserID_YBZF"); // 医保用户ID +// // 住院========= +// String payOrRefundMoney = result.getDataMapString("PayOrRefundMoney"); // 缴退金额[大于0时需要微信收取费用,小于0时需要微信退费] +// String prePayOrderId = result.getDataMapString("PrePayOrderId"); // 预交金缴费单号[需要退费时,his返回预交金时候的单号给微信退费。可能存在退多比微信预交金费用,字段具体内容后续协商后敲定] +// String ordStas = result.getDataMapString("OrdStas"); // +// BigDecimal deposit = result.getDataMapBigDecimal("Deposit"); // 住院押金(医保6202返回) +// String payAuthNo = "1"; +// +// log.info("[医保-住院结算]HIS费用上传明细接口返回-授权信息 payAuthNo={}, payOrdId={}, payToken={}, mdtrtId={}, chrgBchno={}, userIdYBZF={}", payAuthNo, payOrdId, payToken, mdTrtId, chrgBchno, mdUserId); +// if (payOrdId == null || payToken == null || mdTrtId == null || chrgBchno == null) { +// } +// +// MedicalInfo medicalInfo = new MedicalInfo(); +// medicalInfo.setPayAuthNo("1"); +// medicalInfo.setPayToken(payToken); +// medicalInfo.setPayOrdId(payOrdId); +// medicalInfo.setMdTrtId(mdTrtId); +// medicalInfo.setChrgBchno(chrgBchno); +// medicalInfo.setMdUserId(mdUserId); +// +// BigDecimal totalFee = result.getDataMapBigDecimal("FeeSumamt"); // 订单总金额医保返回 +// BigDecimal cashFee = result.getDataMapBigDecimal("OwnPayAmt"); // 现金支付(医保6202返回) +// BigDecimal hifpFee = result.getDataMapBigDecimal("FundPay"); // 统筹金额[基金金额] +// BigDecimal acctPay = result.getDataMapBigDecimal("PsnAcctPay"); // 个人账户支出(医保6202返回) +// log.info("[医保-住院结算]HIS费用上传明细接口返回-费用明细 payOrdId={}, totalFee={}, cashFee={}, hifpFee={}, acctPay={}", +// payOrdId, totalFee, cashFee, hifpFee, acctPay); +// +// String extData = result.getDataMapString("ExtData"); +// +// if (totalFee == null) { +// } +// if (ObjectUtils.isEmpty(extData)) { +// } +// JSONObject extDataJson = JsonHelper.parseObject(extData); +// JSONObject setLInfo = extDataJson.getJSONObject("SETLINFO"); +// +// medicalInfo.setMedFeeSumAmt(new BigDecimal(setLInfo.getString("medfee_sumamt"))); // 医保金额 +// +// medicalInfo.setTotalFee(totalFee); // 医保订单总金额 +// medicalInfo.setCashFee(cashFee); // 现金部分 +// medicalInfo.setHifpFee(hifpFee); // 统筹支付金额 +// medicalInfo.setAcctFee(acctPay); // 个人账户支付 +// +// medicalInfo.setInsuranceFee(acctPay.add(hifpFee)); // 医保支付(个账 + 统筹) +// System.out.println(medicalInfo.getMedFeeSumAmt()); + } // public static void main(String[] args) throws Exception { // String content = "533103198212184014"; diff --git a/src/main/java/com/ynxbd/common/action/pay/MedicalAction.java b/src/main/java/com/ynxbd/common/action/pay/MedicalAction.java index 1df222c..67d6aae 100644 --- a/src/main/java/com/ynxbd/common/action/pay/MedicalAction.java +++ b/src/main/java/com/ynxbd/common/action/pay/MedicalAction.java @@ -42,6 +42,24 @@ import java.util.Map; @Namespace("/medical") public class MedicalAction extends BaseAction { + /** + * 用户信息获取 | 医保上传 | 医保支付下单 + */ + @Action("logFeeDetails") + public Result logFeeDetails(String callNo, String payCode, String qrCode, @AesDecode String openid, @AesDecode String patientId, @AesDecode String hisPatientId, @AesDecode String cardNo, String realName, String treatNum, BigDecimal totalFee) { + log.warn("[医保]上传明细数据调试 callNo={}, payCode={}, openid={}, qrCode={}, treatNum={}, patientId={}, hisPatientId={}, cardNo={}, realName={}, totalFee={}", + callNo, payCode, openid, qrCode, treatNum, patientId, hisPatientId, ParamHelper.hideIdCardNo(cardNo), realName, totalFee); + if (callNo == null || payCode == null || openid == null || qrCode == null || patientId == null || cardNo == null || totalFee == null) { + return Result.error(ResultEnum.PARAM_IS_DEFECT); + } + + MerchantEnum merchantEnum = MerchantEnum.findEnumByCode(payCode); + if (merchantEnum == null) { // 支付方式异常 + return Result.error(ResultEnum.PAY_TYPE_ERROR); + } + return Result.success(); + } + /** * 用户信息获取 | 医保上传 | 医保支付下单 */ @@ -100,7 +118,7 @@ public class MedicalAction extends BaseAction { } return Result.success(medicalInfo); - } catch (ServiceException e) { + } catch (Exception e) { return Result.error(e); } } @@ -271,7 +289,7 @@ public class MedicalAction extends BaseAction { /** - * HIS医保退费(线上) + * 医保退费(线上) */ @Action("refundMed") public Result refundMed(String payCode, String callNo, String openid, String qrCode, String outTradeNo, @AesDecode String tradeNo) { @@ -467,4 +485,11 @@ public class MedicalAction extends BaseAction { } } + +// @Action("outHospTest") +// public Result outHospTest() { +// System.out.println("住院测试..."); +// new MedicalService().outHospPaidNoticeHis(MerchantEnum.WX_MEDICAL, "WX0c8f4caa38bc4a558ab4ea4a69b5", "M26081237393763727", "2026-08-12", "12:00:52", "om5HqvlWTys3Bqls6YV-o4iA3Zqg", null); +// return Result.success(); +// } } diff --git a/src/main/java/com/ynxbd/common/action/pay/PayAction.java b/src/main/java/com/ynxbd/common/action/pay/PayAction.java index da05000..54ff054 100644 --- a/src/main/java/com/ynxbd/common/action/pay/PayAction.java +++ b/src/main/java/com/ynxbd/common/action/pay/PayAction.java @@ -278,7 +278,7 @@ public class PayAction extends BaseAction { /** - * [医保]微信现金退费 + * [医保]微信现金退费(线下) * * @param callNo 调用码 { recipe:处方;register:挂号;in_hosp:住院预交金 } * @param payOrdId 医保订单号 @@ -308,6 +308,9 @@ public class PayAction extends BaseAction { case IN_HOSP: // 住院预交金 break; + case OUT_HOSP: // 住院结算 + return new InHospService().mdCashRefund(payOrdId, refundDesc); + default: return Result.error("callNo不符合规则"); } diff --git a/src/main/java/com/ynxbd/common/action/test/TestAction.java b/src/main/java/com/ynxbd/common/action/test/TestAction.java index f968b34..8b94b36 100644 --- a/src/main/java/com/ynxbd/common/action/test/TestAction.java +++ b/src/main/java/com/ynxbd/common/action/test/TestAction.java @@ -140,6 +140,12 @@ public class TestAction extends BaseAction { return Result.success(); } + @Action("his_config_test") + public Result his_config_test() { + System.out.println("开关:" + HisConfig.IS_RX_PREPAY); + return Result.success(); + } + // @Action("lock") // public String lock() { diff --git a/src/main/java/com/ynxbd/common/bean/pay/Order.java b/src/main/java/com/ynxbd/common/bean/pay/Order.java index 2221683..5f62076 100644 --- a/src/main/java/com/ynxbd/common/bean/pay/Order.java +++ b/src/main/java/com/ynxbd/common/bean/pay/Order.java @@ -34,6 +34,10 @@ public class Order implements Serializable { private String enId; // 修改时间 private Date updateTime; + // 支付日期 + private String payDate; + // 支付时间 + private String payTime; // openid private String openid; // 用于支付的openId diff --git a/src/main/java/com/ynxbd/common/dao/InHospPayDao.java b/src/main/java/com/ynxbd/common/dao/InHospPayDao.java index 23558c3..897ccbe 100644 --- a/src/main/java/com/ynxbd/common/dao/InHospPayDao.java +++ b/src/main/java/com/ynxbd/common/dao/InHospPayDao.java @@ -2,6 +2,7 @@ package com.ynxbd.common.dao; import com.ynxbd.common.bean.pay.Order; import com.ynxbd.common.bean.pay.PayInHosp; +import com.ynxbd.common.bean.pay.Register; import com.ynxbd.common.config.db.DataBase; import lombok.extern.slf4j.Slf4j; @@ -253,4 +254,48 @@ public class InHospPayDao { } return dataList.get(0); } + + /** + * 根据发订单号和处方号修改退费信息 + * + * @param tradeNo His流水号 + * @param refundResult 退款结果 + * @param refundReason 退款原因 + * @return 是否成功 + */ + public boolean updateRefundByTradeNo(String tradeNo, String refundResult, String refundReason) { + String sql = "update pay_in_hosp set refundResult=?, refundReason=?, refundTime=now() where tradeNo=? and (refundResult is null or refundResult != 'OK')"; + return DataBase.update(sql, ps -> { + ps.setString(1, refundResult); + ps.setString(2, refundReason); + ps.setString(3, tradeNo); + }) > 0; + } + + /** + * 根据发订单号和处方号修改退费信息 + * + * @param tradeNo His流水号 + * @param refundResult 退款结果 + * @return 是否成功 + */ + public boolean updateRefundByTradeNo(String tradeNo, String refundResult) { + return updateRefundByTradeNo(tradeNo, refundResult, null); + } + + public PayInHosp selectPaidByTradeNo(String tradeNo) { + String sql = "select * from pay_in_hosp where tradeNo=? and payStatus=0"; + List dataList = DataBase.select(sql, PayInHosp.class, ps -> { + ps.setString(1, tradeNo); + }); + + if (dataList.size() == 1) { + return dataList.get(0); + } + if (dataList.size() > 1) { + log.warn("[住院缴费]数据库存在多条相同的支付记录"); + return null; + } + return null; + } } diff --git a/src/main/java/com/ynxbd/common/dao/RegisterDao.java b/src/main/java/com/ynxbd/common/dao/RegisterDao.java index 12ebee0..c5c7cd4 100644 --- a/src/main/java/com/ynxbd/common/dao/RegisterDao.java +++ b/src/main/java/com/ynxbd/common/dao/RegisterDao.java @@ -689,7 +689,7 @@ public class RegisterDao { return resultList.get(0); } if (resultList.size() > 1) { - log.info("[挂号]数据库存在多条相同的支付记录"); + log.warn("[挂号]数据库存在多条相同的支付记录"); return null; } return null; diff --git a/src/main/java/com/ynxbd/common/dao/his/HisMedDao.java b/src/main/java/com/ynxbd/common/dao/his/HisMedDao.java index 0fd99b9..7aea250 100644 --- a/src/main/java/com/ynxbd/common/dao/his/HisMedDao.java +++ b/src/main/java/com/ynxbd/common/dao/his/HisMedDao.java @@ -155,8 +155,8 @@ public class HisMedDao { * @param transNo HIS交易流水号 * @param bankTransNo HIS流水号 */ - public static JsonResult inHospMedPay(MerchantEnum merchantEnum, String mdUserId, String payDate, String payTime, String transNo, String bankTransNo, BigDecimal cashFee, String openId) { - return HisFactory.HisMed(merchantEnum).getJsonResult(HisEnum.YDZF_SaveToHIS_ZY, params -> { + public static JsonResult outHospMedPay(MerchantEnum merchantEnum, String mdUserId, String payDate, String payTime, String transNo, String bankTransNo, BigDecimal cashFee, String openId) { + return HisFactory.HisMed(merchantEnum, true).getJsonResult(HisEnum.YDZF_SaveToHIS_ZY, params -> { params.put("PayDeviceID", "mobile"); params.put("UserID_YBZF", mdUserId); params.put("PayMoney", cashFee); diff --git a/src/main/java/com/ynxbd/common/helper/common/CodeHelper.java b/src/main/java/com/ynxbd/common/helper/common/CodeHelper.java index 2cd8ccf..3bd407d 100644 --- a/src/main/java/com/ynxbd/common/helper/common/CodeHelper.java +++ b/src/main/java/com/ynxbd/common/helper/common/CodeHelper.java @@ -140,6 +140,7 @@ public class CodeHelper { return idd[0] + idd[1] + idd[2] + idd[3] + idd[4]; } + /** * 生成时间戳 */ diff --git a/src/main/java/com/ynxbd/common/result/JsonResult.java b/src/main/java/com/ynxbd/common/result/JsonResult.java index 716eb4a..6944b0e 100644 --- a/src/main/java/com/ynxbd/common/result/JsonResult.java +++ b/src/main/java/com/ynxbd/common/result/JsonResult.java @@ -329,8 +329,16 @@ public class JsonResult { * @return json数组 */ public JSONArray getJsonArray(String rooNode, String... nodes) { + if (this.dataMap == null) { + return new JSONArray(); + } + Object rootObj = this.dataMap.get(rooNode); - String result = rootObj == null ? JsonHelper.toJsonString(new JSONArray()) : rootObj.toString(); + if (rootObj == null) { + return new JSONArray(); + } + + String result = rootObj.toString(); try { JSONArray jsonArray; JSONObject jsonObject; @@ -347,7 +355,7 @@ public class JsonResult { } } } catch (Exception e) { - log.error("JSON数据转换失败"); + log.error("[JsonResult]数据转JSON数组失败"); ErrorHelper.println(e); } return JSONArray.parseArray(result); @@ -522,7 +530,7 @@ public class JsonResult { result = jsonObject.getJSONObject(node).toJSONString(); } } catch (Exception e) { - log.error("JSON数据转换失败"); + log.error("[JsonResult]JSON数据转换失败"); ErrorHelper.println(e); } return JsonHelper.parseObject(result); diff --git a/src/main/java/com/ynxbd/common/service/CasebookService.java b/src/main/java/com/ynxbd/common/service/CasebookService.java index a91b6e6..3150248 100644 --- a/src/main/java/com/ynxbd/common/service/CasebookService.java +++ b/src/main/java/com/ynxbd/common/service/CasebookService.java @@ -168,7 +168,7 @@ public class CasebookService { } - // 支付回调通知 + // 支付通知 public void paidNotify(MerchantEnum merchantEnum, String openid, BigDecimal totalFee, String outTradeNo, String bankTransNo, String payInfo) { PayCasebook order = queryOrderByOutTradeNo(outTradeNo); if (order == null) { diff --git a/src/main/java/com/ynxbd/common/service/InHospService.java b/src/main/java/com/ynxbd/common/service/InHospService.java index 71b5c7f..d692f79 100644 --- a/src/main/java/com/ynxbd/common/service/InHospService.java +++ b/src/main/java/com/ynxbd/common/service/InHospService.java @@ -8,16 +8,21 @@ import com.ynxbd.common.bean.pay.PayInHosp; import com.ynxbd.common.dao.InHospPayDao; import com.ynxbd.common.dao.RefundDao; import com.ynxbd.common.dao.his.HisInHospDao; +import com.ynxbd.common.helper.common.DateHelper; +import com.ynxbd.common.helper.common.JsonHelper; import com.ynxbd.common.his.HisFactory; import com.ynxbd.common.result.JsonResult; +import com.ynxbd.common.result.Result; import com.ynxbd.common.result.ResultEnum; import com.ynxbd.common.result.ServiceException; +import com.ynxbd.wx.wxfactory.WxMedHelper; +import com.ynxbd.wx.wxfactory.WxPayHelper; +import com.ynxbd.wx.wxfactory.medical.models.WxMedOrder; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.ObjectUtils; import java.math.BigDecimal; -import java.util.ArrayList; -import java.util.List; +import java.util.*; /** * 住院 @@ -207,4 +212,75 @@ public class InHospService { public PayInHosp queryByOutTradeNo(String outTradeNo) { return new InHospPayDao().selectByOutTradeNo(outTradeNo); } + + /** + * [住院结算]His系统线下退费 + * + * @param reason 退费原因 + * @return 是否成功 + */ + public Result mdCashRefund(String payOrdId, String reason) { + InHospPayDao inHospPayDao = new InHospPayDao(); + PayInHosp dbOrder = inHospPayDao.selectPaidByTradeNo(payOrdId); + if (dbOrder == null) { + return Result.error(ResultEnum.DATA_NOT_FOUND); + } + Date updateTime = dbOrder.getUpdateTime(); + if (updateTime == null) { + return null; + } + + if (!dbOrder.hasPayStatusPaid()) { + log.info("[医保][住院结算]订单未支付 payOrdId={}, payStatus={}", payOrdId, dbOrder.getPayStatus()); + return Result.error(ResultEnum.PAY_ORDER_PARAMS_IS_DEFECT); + } + + if (dbOrder.hasRefundByRefundResult()) { + return Result.error(ResultEnum.REFUND_IS_REPEAT); // 退费重复申请 + } + + Boolean hasDateRange = DateHelper.inDateRangeByDay(-30, DateHelper.dateToStr(dbOrder.getUpdateTime(), DateHelper.DateEnum.yyyy_MM_dd_HH_mm_ss)); + if (hasDateRange == null || !hasDateRange) { + return Result.error("订单支付日期已经超过30天,请从商户平台退费"); + } + + String outTradeNo = dbOrder.getOutTradeNo(); + BigDecimal cashFee = dbOrder.getPayMoney(); + if (cashFee == null) { + return Result.error(ResultEnum.REFUND_CASH_IS_NULL); + } + + if (cashFee.compareTo(BigDecimal.ZERO) == 0) { + if (!inHospPayDao.updateRefundByTradeNo(payOrdId, WxPayHelper.OK)) { + log.error("[医保][住院结算]现金0修改数据库状态失败 payOrderId={}", payOrdId); + return Result.error(ResultEnum.DATA_UPDATE_ERROR); + } + Map map = new HashMap<>(); + map.put("transNo", dbOrder.getTradeNo()); + map.put("payWay", dbOrder.getPayWay()); + map.put("bankTransNo", dbOrder.getBankTransNo()); + map.put("payMoney", cashFee); + return Result.success(map); + } + + WxMedOrder order = WxMedHelper.refundCash(outTradeNo, ("R" + payOrdId), payOrdId, cashFee, reason); + log.info("[医保][住院结算]现金退费 order={}", JsonHelper.toJsonString(order)); + String refundReason = "线下HIS医保现金部分退费"; + if (!ObjectUtils.isEmpty(reason)) { + refundReason = ":" + reason; + } + String refundResult = order.isOk() ? WxPayHelper.OK : order.getMessage(); + if (!inHospPayDao.updateRefundByTradeNo(payOrdId, refundResult, refundReason)) { + log.error("[医保][住院结算]现金退费修改数据库状态失败 payOrderId={}, refundResult={}", payOrdId, refundResult); + } + if (order.isOk()) { + Map map = new HashMap<>(); + map.put("transNo", dbOrder.getTradeNo()); + map.put("payWay", dbOrder.getPayWay()); + map.put("bankTransNo", dbOrder.getBankTransNo()); + map.put("payMoney", cashFee); + return Result.success(map); + } + return Result.error(refundResult); + } } diff --git a/src/main/java/com/ynxbd/common/service/MedicalService.java b/src/main/java/com/ynxbd/common/service/MedicalService.java index 3ef90b8..a133dfb 100644 --- a/src/main/java/com/ynxbd/common/service/MedicalService.java +++ b/src/main/java/com/ynxbd/common/service/MedicalService.java @@ -45,15 +45,15 @@ public class MedicalService { public void commonNotify(MerchantEnum merchantEnum, String notifyType, String outTradeNo, BigDecimal totalFee, String bankTransNo, String payDate, String payTime, String openid, String payInfo) { switch (PEnum.toEnum(notifyType)) { case RECIPE: - rxPaidNotify(merchantEnum, outTradeNo, bankTransNo, payDate, payTime, openid, payInfo); + rxPaidNoticeHis(merchantEnum, outTradeNo, bankTransNo, payDate, payTime, openid, payInfo); break; case REG: // 挂号 - regPaidNotify(merchantEnum, outTradeNo, bankTransNo, payDate, payTime, openid, payInfo); + regPaidNoticeHis(merchantEnum, outTradeNo, bankTransNo, payDate, payTime, openid, payInfo); break; case OUT_HOSP: // 住院结算 - outHospPaidNotify(merchantEnum, outTradeNo, bankTransNo, payDate, payTime, openid, payInfo); + outHospPaidNoticeHis(merchantEnum, outTradeNo, bankTransNo, payDate, payTime, openid, payInfo); break; default: @@ -196,9 +196,9 @@ public class MedicalService { throw new ServiceException("[上传明细失败]响应参数ExtData缺失"); } JSONObject extDataJson = JsonHelper.parseObject(extData); - JSONObject preSetl = extDataJson.getJSONObject("preSetl"); + JSONObject setLInfo = extDataJson.getJSONObject("SETLINFO"); - medicalInfo.setMedFeeSumAmt(new BigDecimal(preSetl.getString("medfee_sumamt"))); // 医保金额 + medicalInfo.setMedFeeSumAmt(new BigDecimal(setLInfo.getString("medfee_sumamt"))); // 医保金额 medicalInfo.setTotalFee(totalFee); // 医保订单总金额 medicalInfo.setCashFee(cashFee); // 现金部分 @@ -578,7 +578,7 @@ public class MedicalService { * @param openid openid * @param payInfo 支付信息 */ - public boolean regPaidNotify(MerchantEnum merchantEnum, String outTradeNo, String bankTransNo, String payDate, String payTime, String openid, String payInfo) { + public boolean regPaidNoticeHis(MerchantEnum merchantEnum, String outTradeNo, String bankTransNo, String payDate, String payTime, String openid, String payInfo) { if (outTradeNo == null || bankTransNo == null || payDate == null || payTime == null) { log.info("[医保][挂号]HIS结算参数缺失 outTradeNo={}, bankTransNo={}, payDate={}, payTime={}", outTradeNo, bankTransNo, payDate, payTime); return false; @@ -595,7 +595,7 @@ public class MedicalService { } if (!regDao.updateMerPaidByOutTradeNo(outTradeNo, payDate, payTime, bankTransNo)) { - log.info("[医保][挂号]修改订单支付状态 outTradeNo={}, bankTransNo={}", outTradeNo, bankTransNo); + log.info("[医保][挂号]修改订单支付状态-失败 outTradeNo={}, bankTransNo={}", outTradeNo, bankTransNo); return false; } @@ -647,7 +647,7 @@ public class MedicalService { } // 医保自动退费 - ApiResult apiResult = new MedicalService().autoRefund(merchantEnum, outTradeNo, tradeNo, cashFee, "系统繁忙缴费失败,自动退费"); + ApiResult apiResult = new MedicalService().autoRefund(merchantEnum, outTradeNo, tradeNo, cashFee, respMessage); boolean isOk = apiResult.isOk(); String refundResult = apiResult.getMessage(); @@ -680,7 +680,7 @@ public class MedicalService { * @param openid openid * @param payInfo 支付信息 */ - public boolean outHospPaidNotify(MerchantEnum merchantEnum, String outTradeNo, String bankTransNo, String payDate, String payTime, String openid, String payInfo) { + public boolean outHospPaidNoticeHis(MerchantEnum merchantEnum, String outTradeNo, String bankTransNo, String payDate, String payTime, String openid, String payInfo) { if (outTradeNo == null || bankTransNo == null || payDate == null || payTime == null) { log.info("[医保][住院结算]HIS结算参数缺失 outTradeNo={}, bankTransNo={}, payDate={}, payTime={}", outTradeNo, bankTransNo, payDate, payTime); return false; @@ -697,12 +697,12 @@ public class MedicalService { InHospPayDao inHospPayDao = new InHospPayDao(); if (!new InHospPayDao().updateMerPaidByOutTradeNo(outTradeNo, payDate, payTime, bankTransNo)) { - log.info("[医保][住院结算]修改订单支付状态 outTradeNo={}, bankTransNo={}", outTradeNo, bankTransNo); + log.info("[医保][住院结算]修改订单支付状态-失败 outTradeNo={}, bankTransNo={}", outTradeNo, bankTransNo); return false; } -// order.setPayDate(payDate); -// order.setPayTime(payTime); + order.setPayDate(payDate); + order.setPayTime(payTime); order.setBankTransNo(bankTransNo); String mdUserId = order.getMdUserId(); @@ -715,7 +715,7 @@ public class MedicalService { return false; } // - JsonResult jsonResult = HisMedDao.inHospMedPay(merchantEnum, mdUserId, payDate, payTime, tradeNo, bankTransNo, cashFee, openid); + JsonResult jsonResult = HisMedDao.outHospMedPay(merchantEnum, mdUserId, payDate, payTime, tradeNo, bankTransNo, cashFee, openid); if (!jsonResult.success()) { String respCode = jsonResult.getCode(); String respMessage = jsonResult.getMessage(); @@ -736,17 +736,27 @@ public class MedicalService { } if (cashFee.compareTo(BigDecimal.ZERO) == 0) { // 现金部分为0 -// log.info("[医保][住院结算]现金为0不执行退费-修改退费状态 outTradeNo={}, bankTransNo={}, tradeNo={}", outTradeNo, bankTransNo, tradeNo); -// if (!inHospPayDao.updateRefundByTradeNo(tradeNo, "OK")) { -// log.info("[医保][住院结算] 修改数据库退费状态失败 tradeNo={}", tradeNo); -// } + log.info("[医保][住院结算]现金为0不执行退费-修改退费状态 outTradeNo={}, bankTransNo={}, tradeNo={}", outTradeNo, bankTransNo, tradeNo); + if (!inHospPayDao.updateRefundByTradeNo(tradeNo, "OK")) { + log.info("[医保][住院结算]修改数据库退费状态-失败 tradeNo={}", tradeNo); + } return false; } -// if (!WxMedConfig.IS_AUTO_REFUND) { -// log.info("[医保][住院结算]现金自动退费功能未开启 outTradeNo={}, bankTransNo={}, tradeNo={}", outTradeNo, bankTransNo, tradeNo); -// return false; -// } + if (!WxMedConfig.IS_AUTO_REFUND) { + log.info("[医保][住院结算]现金自动退费功能未开启 outTradeNo={}, bankTransNo={}, tradeNo={}", outTradeNo, bankTransNo, tradeNo); + return false; + } + + // 医保自动退费 + ApiResult apiResult = new MedicalService().autoRefund(merchantEnum, outTradeNo, tradeNo, cashFee, respMessage); + boolean isOk = apiResult.isOk(); + String refundResult = apiResult.getMessage(); + + log.info("{}[住院结算]现金自动退费 outTradeNo={}, bankTransNo={}, tradeNo={} [{}]:{}", merchantEnum.NAME, outTradeNo, bankTransNo, tradeNo, (isOk ? "成功" : "失败"), refundResult); + if (!inHospPayDao.updateRefundByTradeNo(tradeNo, refundResult)) { + log.info("{}[住院结算]现金自动退费-修改数据库状态失败 tradeNo={}, refundResult={}", merchantEnum.NAME, tradeNo, refundResult); + } return false; } @@ -784,7 +794,7 @@ public class MedicalService { * @param openid openid * @param payInfo 支付信息 */ - public boolean rxPaidNotify(MerchantEnum merchantEnum, String outTradeNo, String bankTransNo, String payDate, String payTime, String openid, String payInfo) { + public boolean rxPaidNoticeHis(MerchantEnum merchantEnum, String outTradeNo, String bankTransNo, String payDate, String payTime, String openid, String payInfo) { if (outTradeNo == null || bankTransNo == null || payDate == null || payTime == null) { log.info("[医保][处方]HIS结算参数缺失 outTradeNo={}, bankTransNo={}, payDate={}, payTime={}", outTradeNo, bankTransNo, payDate, payTime); return false; @@ -861,7 +871,7 @@ public class MedicalService { return false; } - ApiResult apiResult = new MedicalService().autoRefund(merchantEnum, outTradeNo, tradeNo, cashFee, "系统繁忙缴费失败,自动退费"); + ApiResult apiResult = new MedicalService().autoRefund(merchantEnum, outTradeNo, tradeNo, cashFee, respMessage); boolean isOk = apiResult.isOk(); String refundResult = apiResult.getMessage(); diff --git a/src/main/java/com/ynxbd/common/service/RegService.java b/src/main/java/com/ynxbd/common/service/RegService.java index dfa095e..c500f4a 100644 --- a/src/main/java/com/ynxbd/common/service/RegService.java +++ b/src/main/java/com/ynxbd/common/service/RegService.java @@ -16,6 +16,7 @@ import com.ynxbd.common.dao.RegisterDao; import com.ynxbd.common.dao.his.HisAccountDao; import com.ynxbd.common.dao.his.HisRegisterDao; import com.ynxbd.common.helper.common.DateHelper; +import com.ynxbd.common.helper.common.JsonHelper; import com.ynxbd.common.his.HisFactory; import com.ynxbd.common.result.JsonResult; import com.ynxbd.common.result.Result; @@ -244,70 +245,70 @@ public class RegService { /** - * His系统处方手动退费 + * [挂号]His系统线下退费 * * @param reason 退费原因 * @return 是否成功 */ public Result mdCashRefund(String payOrdId, String reason) { RegisterDao regDao = new RegisterDao(); - Register regInfo = regDao.selectStatusErrOrder(payOrdId); - if (regInfo == null) { + Register dbOrder = regDao.selectStatusErrOrder(payOrdId); + if (dbOrder == null) { return Result.error(ResultEnum.DATA_NOT_FOUND); } - Date updateTime = regInfo.getUpdateTime(); + Date updateTime = dbOrder.getUpdateTime(); if (updateTime == null) { return null; } - if (!regInfo.hasPayStatusPaid()) { - log.info("[医保]订单未支付 payOrdId={}, payStatus={}", payOrdId, regInfo.getPayStatus()); + if (!dbOrder.hasPayStatusPaid()) { + log.info("[医保][挂号]订单未支付 payOrdId={}, payStatus={}", payOrdId, dbOrder.getPayStatus()); return Result.error(ResultEnum.PAY_ORDER_PARAMS_IS_DEFECT); } - if (regInfo.hasRefundByRefundResult()) { + if (dbOrder.hasRefundByRefundResult()) { return Result.error(ResultEnum.REFUND_IS_REPEAT); // 退费重复申请 } - Boolean hasDateRange = DateHelper.inDateRangeByDay(-30, DateHelper.dateToStr(regInfo.getUpdateTime(), DateHelper.DateEnum.yyyy_MM_dd_HH_mm_ss)); + Boolean hasDateRange = DateHelper.inDateRangeByDay(-30, DateHelper.dateToStr(dbOrder.getUpdateTime(), DateHelper.DateEnum.yyyy_MM_dd_HH_mm_ss)); if (hasDateRange == null || !hasDateRange) { return Result.error("订单支付日期已经超过30天,请从商户平台退费"); } - String outTradeNo = regInfo.getOutTradeNo(); - BigDecimal cashFee = regInfo.getPayMoney(); + String outTradeNo = dbOrder.getOutTradeNo(); + BigDecimal cashFee = dbOrder.getPayMoney(); if (cashFee == null) { return Result.error(ResultEnum.REFUND_CASH_IS_NULL); } if (cashFee.compareTo(BigDecimal.ZERO) == 0) { if (!regDao.updateRefundByTradeNo(payOrdId, WxPayHelper.OK)) { - log.error("[医保]挂号现金0修改数据库状态失败 payOrderId={}", payOrdId); + log.error("[医保][挂号]现金0修改数据库状态失败 payOrderId={}", payOrdId); return Result.error(ResultEnum.DATA_UPDATE_ERROR); } Map map = new HashMap<>(); - map.put("transNo", regInfo.getTradeNo()); - map.put("payWay", regInfo.getPayWay()); - map.put("bankTransNo", regInfo.getBankTransNo()); + map.put("transNo", dbOrder.getTradeNo()); + map.put("payWay", dbOrder.getPayWay()); + map.put("bankTransNo", dbOrder.getBankTransNo()); map.put("payMoney", cashFee); return Result.success(map); } WxMedOrder order = WxMedHelper.refundCash(outTradeNo, ("R" + payOrdId), payOrdId, cashFee, reason); - log.info("[医保]挂号现金退费order={}", order); + log.info("[医保][挂号]现金退费 order={}", JsonHelper.toJsonString(order)); String refundReason = "线下HIS医保现金部分退费"; if (!ObjectUtils.isEmpty(reason)) { refundReason = ":" + reason; } String refundResult = order.isOk() ? WxPayHelper.OK : order.getMessage(); if (!regDao.updateRefundByTradeNo(payOrdId, refundResult, refundReason)) { - log.error("[医保]挂号现金退费修改数据库状态失败 payOrderId={}, refundResult={}", payOrdId, refundResult); + log.error("[医保][挂号]现金退费修改数据库状态失败 payOrderId={}, refundResult={}", payOrdId, refundResult); } if (order.isOk()) { Map map = new HashMap<>(); - map.put("transNo", regInfo.getTradeNo()); - map.put("payWay", regInfo.getPayWay()); - map.put("bankTransNo", regInfo.getBankTransNo()); + map.put("transNo", dbOrder.getTradeNo()); + map.put("payWay", dbOrder.getPayWay()); + map.put("bankTransNo", dbOrder.getBankTransNo()); map.put("payMoney", cashFee); return Result.success(map); } diff --git a/src/main/java/com/ynxbd/wx/config/MessagePushConfig.java b/src/main/java/com/ynxbd/wx/config/MessagePushConfig.java index 72cae33..6b892e0 100644 --- a/src/main/java/com/ynxbd/wx/config/MessagePushConfig.java +++ b/src/main/java/com/ynxbd/wx/config/MessagePushConfig.java @@ -5,6 +5,7 @@ import com.ynxbd.common.bean.enums.MerchantEnum; import com.ynxbd.common.bean.pay.Recipe; import com.ynxbd.common.bean.pay.Register; import com.ynxbd.common.dao.PatientDao; +import com.ynxbd.common.helper.common.JsonHelper; import com.ynxbd.common.helper.common.XmlConfigHelper; import com.ynxbd.common.helper.http.OkHttpHelper; import com.ynxbd.wx.pwe.PWEHelper; @@ -173,7 +174,6 @@ public class MessagePushConfig { String time = (ObjectUtils.isEmpty(begTime) || ObjectUtils.isEmpty(endTime)) ? "" : (" " + begTime + "-" + endTime); - OkHttpHelper.getAsync(REG_PAID_API, params -> { params.put("openId", DesEncryptHelper.enCode(openid)); params.put("patientName", patient.getName() + " ID:" + patientId); @@ -368,7 +368,7 @@ public class MessagePushConfig { /** * 缴费成功推送 */ - public static void recipePush(List recipeList, String treatNum, String patientId, String openid, String tip) { + public static void rxPush(List recipeList, String treatNum, String patientId, String openid, String tip) { try { if (!RX_PAID_IS_ENABLE || ObjectUtils.isEmpty(RX_PAID_API)) { return; diff --git a/src/main/java/com/ynxbd/wx/wxfactory/medical/Client.java b/src/main/java/com/ynxbd/wx/wxfactory/medical/Client.java index ae007d3..84790a0 100644 --- a/src/main/java/com/ynxbd/wx/wxfactory/medical/Client.java +++ b/src/main/java/com/ynxbd/wx/wxfactory/medical/Client.java @@ -130,7 +130,7 @@ public class Client { // 使用医保支付时必填 params.put("is_dept", "4"); // 医保标识 params.put("org_no", orgNo); // 医疗机构编码(医保局分配给机构) - params.put("nonce_str", UUID.randomUUID().toString().replaceAll("-", "")); + params.put("nonce_str", UUID.randomUUID().toString().replace("-", "")); params.put("gmt_out_create", DateHelper.dateToStr(new Date(), DateHelper.DateEnum.yyyyMMddHHmmss)); // 医院下单时间 Map requestContent = new HashMap<>(); @@ -165,7 +165,7 @@ public class Client { // 二选一 params.put("hosp_out_trade_no", outTradeNo); // 第三方服务商订单号 outTradeNo // params.put("med_trans_id", medTransId); // 微信生成的医疗订单号 - params.put("nonce_str", UUID.randomUUID().toString().replaceAll("-", "")); + params.put("nonce_str", UUID.randomUUID().toString().replace("-", "")); params.put("sign", WxSignHelper.generateSign(params, WxSignHelper.SIGN_TYPE_MD5, mdPayKey)); log.info("[医保][查询订单] req={}", JsonHelper.toJsonString(params)); @@ -218,7 +218,7 @@ public class Client { // params.put("med_trans_id", medTransId); // 微信生成的医疗订单号 params.put("hosp_out_refund_no", outRefundNo); // 退费订单号 - params.put("nonce_str", UUID.randomUUID().toString().replaceAll("-", "")); + params.put("nonce_str", UUID.randomUUID().toString().replace("-", "")); JSONObject requestContent = new JSONObject(); requestContent.put("ref_reason", finalReason); @@ -275,7 +275,7 @@ public class Client { if (!ObjectUtils.isEmpty(medTransId)) { params.put("med_trans_id", medTransId); // 微信生成的医疗订单号 } - params.put("nonce_str", UUID.randomUUID().toString().replaceAll("-", "")); + params.put("nonce_str", UUID.randomUUID().toString().replace("-", "")); params.put("sign", WxSignHelper.generateSign(params, WxSignHelper.SIGN_TYPE_MD5, mdPayKey)); @@ -307,7 +307,7 @@ public class Client { params.put("bill_date", billDate); params.put("bill_type", billType); - params.put("nonce_str", UUID.randomUUID().toString().replaceAll("-", "")); + params.put("nonce_str", UUID.randomUUID().toString().replace("-", "")); params.put("sign", WxSignHelper.generateSign(params, WxSignHelper.SIGN_TYPE_MD5, mdPayKey)); log.info("[医保][账单下载] req={}", JsonHelper.toJsonString(params)); }); @@ -349,7 +349,7 @@ public class Client { // headers.set("god-portal-timestamp", timestamp); headers.set("god-portal-signature", signature); - headers.set("god-portal-request-id", UUID.randomUUID().toString().replaceAll("-", "")); + headers.set("god-portal-request-id", UUID.randomUUID().toString().replace("-", "")); }); if (respJson == null) { info.setMessage("请求用户信息失败"); diff --git a/src/main/resources/webservice-copy.xml b/src/main/resources/webservice-copy.xml index c24bbac..3d54676 100644 --- a/src/main/resources/webservice-copy.xml +++ b/src/main/resources/webservice-copy.xml @@ -1 +1 @@ - false false false 127.0.0.1:8888 127.0.0.1:8888 200.200.200.60:7777 200.200.200.60:7777 \ No newline at end of file + false false false 127.0.0.1:8888 127.0.0.1:8888 200.200.200.60:7777 200.200.200.60:7777 \ No newline at end of file diff --git a/src/main/resources/wx-msg-push.xml b/src/main/resources/wx-msg-push.xml index 76ad265..5b70193 100644 --- a/src/main/resources/wx-msg-push.xml +++ b/src/main/resources/wx-msg-push.xml @@ -4,29 +4,29 @@ false - daoyixun + DaoYiXun - false - appointmentsuccess + true + AppointmentSuccess - false - appointmentcancel + true + AppointmentCancel + + false + PaymentSuccess + + false business/universal - - false - paymentsuccess - - false business/universal