From 63df648c9c19f72738693e673a7ddd24db9c55bb Mon Sep 17 00:00:00 2001 From: wangsq Date: Mon, 21 Sep 2026 16:09:02 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E9=A2=84=E9=97=AE=E8=AF=8A=E8=B0=83?= =?UTF-8?q?=E6=95=B4=E5=B9=B6=E5=AE=8C=E6=88=90=E4=B8=8A=E7=BA=BF=202?= =?UTF-8?q?=E3=80=81=E5=A4=84=E6=96=B9=E5=BC=80=E7=AB=8B=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E6=B5=8B=E8=AF=95=EF=BC=8C=E5=AD=97=E5=85=B8=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E8=BF=94=E5=9B=9E=E6=95=B0=E6=8D=AE=E5=92=8C?= =?UTF-8?q?=E7=9B=91=E7=AE=A1=E7=9A=84=E6=95=B0=E6=8D=AE=E8=BF=9B=E8=A1=8C?= =?UTF-8?q?=E5=8C=B9=E9=85=8D=EF=BC=8C=E8=B0=83=E6=95=B4=E8=BF=94=E5=9B=9E?= =?UTF-8?q?=E7=9A=84=E5=AD=97=E6=AE=B5=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/ynxbd/common/TestA.java | 11 +- .../com/ynxbd/common/action/TreatAction.java | 8 +- .../action/healthcard/HCPreConsultAction.java | 4 +- .../com/ynxbd/common/action/xk/XKAction.java | 113 +++++++++++------- .../common/action/xk/XK_WMFrequencyEnum.java | 44 +++++++ .../common/action/xk/XK_WMUseWayEnum.java | 89 ++++++++++++++ .../com/ynxbd/common/bean/his/HisTreat.java | 8 ++ .../com/ynxbd/common/bean/xk/HisRxDict.java | 5 + .../com/ynxbd/common/bean/xk/HisRxItem.java | 82 ------------- .../ynxbd/common/bean/xk/HisRxUseCount.java | 7 ++ .../ynxbd/common/bean/xk/HisTCMRxItem.java | 34 ++++++ .../com/ynxbd/common/bean/xk/HisWMRxItem.java | 56 +++++++++ .../common/config/interceptor/AesDecode.java | 9 +- .../config/interceptor/MethodInterceptor.java | 2 +- .../com/ynxbd/common/dao/his/HisTreatDao.java | 6 +- .../com/ynxbd/common/dao/his/HisXKDao.java | 112 ++++++++++++++--- .../common/healthcard/HCPreConsultHelper.java | 20 ++-- .../ynxbd/common/helper/common/AesHelper.java | 4 +- .../ynxbd/common/service/CasebookService.java | 10 +- .../ynxbd/wx/config/MessagePushConfig.java | 2 +- .../com/ynxbd/wx/wxfactory/AesWxHelper.java | 4 +- .../ynxbd/wx/wxfactory/medical/Client.java | 2 +- 22 files changed, 458 insertions(+), 174 deletions(-) create mode 100644 src/main/java/com/ynxbd/common/action/xk/XK_WMFrequencyEnum.java create mode 100644 src/main/java/com/ynxbd/common/action/xk/XK_WMUseWayEnum.java delete mode 100644 src/main/java/com/ynxbd/common/bean/xk/HisRxItem.java create mode 100644 src/main/java/com/ynxbd/common/bean/xk/HisTCMRxItem.java create mode 100644 src/main/java/com/ynxbd/common/bean/xk/HisWMRxItem.java diff --git a/src/main/java/com/ynxbd/common/TestA.java b/src/main/java/com/ynxbd/common/TestA.java index 6acbd6c..7c9f73a 100644 --- a/src/main/java/com/ynxbd/common/TestA.java +++ b/src/main/java/com/ynxbd/common/TestA.java @@ -1,6 +1,6 @@ package com.ynxbd.common; -import cn.hutool.core.util.IdcardUtil; +import com.ynxbd.wx.wxfactory.AesWxHelper; import lombok.extern.slf4j.Slf4j; @Slf4j @@ -23,7 +23,8 @@ public class TestA { /// / 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); @@ -125,5 +126,9 @@ public class TestA { // System.out.println(removeIds); // } - + public static void main(String[] args) { + System.out.println(AesWxHelper.encode("1")); + System.out.println(AesWxHelper.encode("100004220302")); + System.out.println(AesWxHelper.encode("100004219291")); + } } \ No newline at end of file diff --git a/src/main/java/com/ynxbd/common/action/TreatAction.java b/src/main/java/com/ynxbd/common/action/TreatAction.java index 8ef473e..d9a8d11 100644 --- a/src/main/java/com/ynxbd/common/action/TreatAction.java +++ b/src/main/java/com/ynxbd/common/action/TreatAction.java @@ -110,16 +110,12 @@ public class TreatAction extends BaseAction { } @Action("getInfoByTreatNum") - public Result getInfoByTreatNum(@AesDecode String treatNum) { + public Result getInfoByTreatNum(@AesDecode(AesClass = AesMicroHelper.class) String treatNum) { try { - if (treatNum == null) { - return Result.error(ResultEnum.PARAM_IS_BLANK); - } - treatNum = AesMicroHelper.decode(treatNum); + log.info("[就诊记录]查询信息 treatNum={}", treatNum); if (ObjectUtils.isEmpty(treatNum)) { return Result.error(ResultEnum.PARAM_IS_INVALID); } - log.info("[就诊记录]查询信息 treatNum={}", treatNum); List daatList = new HisTreatDao().getInfoByTreatNum(treatNum); return Result.success(daatList); } catch (ServiceException e) { diff --git a/src/main/java/com/ynxbd/common/action/healthcard/HCPreConsultAction.java b/src/main/java/com/ynxbd/common/action/healthcard/HCPreConsultAction.java index f92e231..6d69579 100644 --- a/src/main/java/com/ynxbd/common/action/healthcard/HCPreConsultAction.java +++ b/src/main/java/com/ynxbd/common/action/healthcard/HCPreConsultAction.java @@ -182,7 +182,7 @@ public class HCPreConsultAction extends BaseAction { item.setUpdateTime(register.getUpdateTime()); item.setRegDate(register.getRegDate()); item.setOutTradeNo(register.getOutTradeNo()); - item.setUrl(HCPreConsultHelper.getH5Online(register.getOutTradeNo())); + item.setUrl(HCPreConsultHelper.getH5Online(register.getOutTradeNo(), isHttpsWithProxy())); dataList.add(register); } @@ -198,7 +198,7 @@ public class HCPreConsultAction extends BaseAction { if (ObjectUtils.isEmpty(openId) || ObjectUtils.isEmpty(registerId)) { return Result.error(ResultEnum.PARAM_IS_DEFECT); } - String url = HCPreConsultHelper.getH5Online(registerId); + String url = HCPreConsultHelper.getH5Online(registerId, isHttpsWithProxy()); if (ObjectUtils.isEmpty(url)) { return Result.error(); } diff --git a/src/main/java/com/ynxbd/common/action/xk/XKAction.java b/src/main/java/com/ynxbd/common/action/xk/XKAction.java index 1bffd40..44af4ee 100644 --- a/src/main/java/com/ynxbd/common/action/xk/XKAction.java +++ b/src/main/java/com/ynxbd/common/action/xk/XKAction.java @@ -3,20 +3,21 @@ package com.ynxbd.common.action.xk; import com.alibaba.fastjson.JSONObject; import com.ynxbd.common.action.base.BaseAction; import com.ynxbd.common.bean.his.HisTreat; -import com.ynxbd.common.bean.xk.HisRxItem; import com.ynxbd.common.config.interceptor.AesDecode; import com.ynxbd.common.dao.his.HisTreatDao; import com.ynxbd.common.dao.his.HisXKDao; -import com.ynxbd.common.helper.common.JsonHelper; import com.ynxbd.common.result.JsonResult; import com.ynxbd.common.result.Result; import com.ynxbd.common.result.ResultEnum; +import com.ynxbd.wx.wxfactory.AesWxHelper; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.ObjectUtils; import org.apache.struts2.convention.annotation.Action; import org.apache.struts2.convention.annotation.Namespace; +import java.util.HashMap; import java.util.List; +import java.util.Map; @Slf4j @@ -24,74 +25,104 @@ import java.util.List; public class XKAction extends BaseAction { @Action("getRxDict") - public Result getRxDict(String callNo, String type) { + public Result getRxDict(String callNo, String type, String key, String yfCode) { if (!"xbd2026".equals(callNo)) { return Result.error(ResultEnum.PARAM_IS_INVALID); } - log.info("[开方]字典查询 type={}", type); + log.info("[开方]字典查询 type={}, yfCode={}", type, yfCode); if (type == null) { return Result.error(ResultEnum.PARAM_IS_DEFECT); } - List dataList = new HisXKDao().queryHisRxDict(type); + List dataList = new HisXKDao().queryHisRxDict(type, key, yfCode); return Result.success(dataList); } @Action("createHisRx") public Result createHisRx() { - JSONObject body = getBody(); - if (body == null) { - return Result.error(ResultEnum.PARAM_IS_DEFECT); - } - String doctCode = body.getString("doctCode"); - String treatNum = body.getString("treatNum"); - String rxType = body.getString("rxType"); - String diagnose = body.getString("diagnose"); - String weight = body.getString("weight"); - String note = body.getString("note"); - String ybAttrib = body.getString("ybAttrib"); - String bzCode = body.getString("bzCode"); - String bzName = body.getString("bzName"); - String rxJson = body.getString("rxJsonArr"); - - log.info("[开方]doctCode={}, treatNum={}, rxType={}", doctCode, treatNum, rxType); - if (ObjectUtils.isEmpty(doctCode) || ObjectUtils.isEmpty(treatNum) || ObjectUtils.isEmpty(rxType)) { - return Result.error(ResultEnum.PARAM_IS_DEFECT); - } - - List hisRxItems = JsonHelper.parseArray(rxJson, HisRxItem.class); - if (hisRxItems.isEmpty()) { - return Result.error(ResultEnum.PARAM_IS_DEFECT); - } + try { + JSONObject body = getBody(); + if (body == null) { + return Result.error(ResultEnum.PARAM_IS_DEFECT); + } + String doctCode = body.getString("doctCode"); + String treatNum = body.getString("treatNum"); + String rxDrugType = body.getString("rxDrugType"); // 处方药品类型 + String rxTypeCode = body.getString("rxTypeCode"); + String rxDiagnose = body.getString("rxDiagnose"); + String weight = body.getString("weight"); + String note = body.getString("note"); + String ybAttrib = body.getString("ybAttrib"); + String bzCode = body.getString("bzCode"); + String bzName = body.getString("bzName"); + String items = body.getString("items"); + // 中药============================================= + String tcmTtName = body.getString("tcmTtName"); + String tcmUseName = body.getString("tcmUseName"); + String tcmCFCount = body.getString("tcmCFCount"); + String tcmCFUseCount = body.getString("tcmCFUseCount"); + String tcmUseCountForDay = body.getString("tcmUseCountForDay"); + + log.info("[处方开立]doctCode={}, treatNum={}, rxDrugType={}, weight={}, items={}", doctCode, treatNum, rxDrugType, weight, items); + if (ObjectUtils.isEmpty(doctCode) || ObjectUtils.isEmpty(treatNum) || ObjectUtils.isEmpty(rxDrugType) || ObjectUtils.isEmpty(weight) || ObjectUtils.isEmpty(items)) { + return Result.error(ResultEnum.PARAM_IS_DEFECT); + } - JsonResult resp = new HisXKDao().createHisRx(doctCode, treatNum, rxType, diagnose, weight, note, ybAttrib, bzCode, bzName, hisRxItems); - if (!resp.success()) { - return Result.error(resp.getMessage()); + JsonResult resp = new HisXKDao().createHisRx(items, doctCode, treatNum, rxDrugType, rxTypeCode, rxDiagnose, weight, note, ybAttrib, bzCode, bzName, + tcmTtName, tcmUseName, tcmCFCount, tcmCFUseCount, tcmUseCountForDay); + if (!resp.success()) { + return Result.error(resp.getMessage()); + } + String rxCode = resp.getDataMapString("CFNum"); + String amount = resp.getDataMapString("Amount"); + if (ObjectUtils.isEmpty(rxCode) || ObjectUtils.isEmpty(amount)) { + return Result.error("处方开立未返回处方号或金额"); + } + Map data = new HashMap<>(); + data.put("rxCode", rxCode); + data.put("enRxCode", AesWxHelper.encode(rxCode)); + data.put("enAmount", AesWxHelper.encode(amount)); + return Result.success(data); + } catch (Exception e) { + return Result.error(e); } - return Result.success(); } @Action("updateHisTreat") public Result updateHisTreat(@AesDecode String openId, @AesDecode String treatNum, String symptom, String subjComplaint, String disDescription, String treatMeas, String tcmDdCode, String tcmDdName, String tcmSdCode, String tcmSdName, String mdDisCode, String mdDisName, - String pastHistory, String presentHistory, String alleHist, String disCode1, String disName1, String disCode2, String disName2) { + String pastHist, String presentHist, String alleHist, String disCode1, String disName1, String disCode2, String disName2) { try { - log.info("[HIS更新就诊记录] treatNum={}, symptom={}, subjComplaint={}, disDescription={}, treatMeas={}, tcmDdCode={}, tcmDdName={}, tcmSdCode={}, tcmSdName={}, mdDisCode={}, mdDisName={}", - treatNum, symptom, subjComplaint, disDescription, treatMeas, tcmDdCode, tcmDdName, tcmSdCode, tcmSdName, mdDisCode, mdDisName); + log.info("[HIS更新就诊记录] openId={}, treatNum={}, symptom={}, subjComplaint={}, disDescription={}, treatMeas={}, tcmDdCode={}, tcmDdName={}, tcmSdCode={}, tcmSdName={}, mdDisCode={}, mdDisName={}", + openId, treatNum, symptom, subjComplaint, disDescription, treatMeas, tcmDdCode, tcmDdName, tcmSdCode, tcmSdName, mdDisCode, mdDisName); if (ObjectUtils.isEmpty(openId) || ObjectUtils.isEmpty(treatNum)) { return Result.error(ResultEnum.PARAM_IS_INVALID); } - if (ObjectUtils.isEmpty(symptom) || ObjectUtils.isEmpty(subjComplaint) || ObjectUtils.isEmpty(disDescription) || ObjectUtils.isEmpty(treatMeas) - || ObjectUtils.isEmpty(tcmDdCode) || ObjectUtils.isEmpty(tcmDdName) || ObjectUtils.isEmpty(tcmSdCode) || ObjectUtils.isEmpty(tcmSdName) - || ObjectUtils.isEmpty(mdDisCode) || ObjectUtils.isEmpty(mdDisName) - ) { + if (ObjectUtils.isEmpty(subjComplaint) || ObjectUtils.isEmpty(disDescription) || ObjectUtils.isEmpty(treatMeas)) { return Result.error(ResultEnum.PARAM_IS_DEFECT); } + if (ObjectUtils.isEmpty(tcmDdCode) && ObjectUtils.isEmpty(mdDisCode)) { + return Result.error("请选择中医或西医诊断"); + } + + if (!ObjectUtils.isEmpty(tcmDdCode)) { + if (ObjectUtils.isEmpty(tcmSdName)) { + return Result.error("中医诊断名称[tcmSdName]缺失"); + } + + if (ObjectUtils.isEmpty(tcmSdCode) || ObjectUtils.isEmpty(tcmSdName)) { + return Result.error("中医证侯诊断[tcmSdCode]缺失"); + } + } + + if (!ObjectUtils.isEmpty(mdDisCode) && ObjectUtils.isEmpty(mdDisName)) { + return Result.error("西医诊断名称[mdDisName]缺失"); + } - HisTreat data = new HisTreatDao().updateHisTreat(treatNum, symptom, subjComplaint, disDescription, treatMeas, tcmDdCode, tcmDdName, tcmSdCode, tcmSdName, mdDisCode, mdDisName, pastHistory, presentHistory, alleHist, disCode1, disName1, disCode2, disName2); + HisTreat data = new HisTreatDao().updateHisTreat(treatNum, symptom, subjComplaint, disDescription, treatMeas, tcmDdCode, tcmDdName, tcmSdCode, tcmSdName, mdDisCode, mdDisName, pastHist, presentHist, alleHist, disCode1, disName1, disCode2, disName2); if (data == null) { return Result.error(); } diff --git a/src/main/java/com/ynxbd/common/action/xk/XK_WMFrequencyEnum.java b/src/main/java/com/ynxbd/common/action/xk/XK_WMFrequencyEnum.java new file mode 100644 index 0000000..e12c6d0 --- /dev/null +++ b/src/main/java/com/ynxbd/common/action/xk/XK_WMFrequencyEnum.java @@ -0,0 +1,44 @@ +package com.ynxbd.common.action.xk; + + +import org.apache.commons.lang3.ObjectUtils; + +public enum XK_WMFrequencyEnum { + CODE_BID(1, "bid", "2 次/天"), + CODE_BIW(2, "biw", "2 次/周"), + CODE_HS(3, "Hs", "睡前服用"), + CODE_Q12H(4, "q12h", "1 次/12h"), + CODE_Q1H(5, "q1h", "1 次/h"), + CODE_Q3H(6, "q3h", "1 次/3h"), + CODE_Q6H(7, "q6h", "1 次/6h"), + CODE_Q8H(8, "q8h", "1 次/8h"), + CODE_QD(9, "qd", "1 次/d"), + CODE_QID(10, "qid", "4 次/d"), + CODE_QOD(11, "qod", "隔天 1 次"), + CODE_QW(12, "qw", "1 次/周"), + CODE_ST(13, "st", "立即服用"), + CODE_OTH(14, "oth", "其他"); + + public final int SEQ; + public final String CODE; + public final String NAME; + + XK_WMFrequencyEnum(int SEQ, String CODE, String NAME) { + this.SEQ = SEQ; + this.CODE = CODE; + this.NAME = NAME; + } + + + public static XK_WMFrequencyEnum findEnum(String code) { + if (ObjectUtils.isEmpty(code)) { + return null; + } + for (XK_WMFrequencyEnum item : XK_WMFrequencyEnum.values()) { + if (item.CODE.equals(code)) { + return item; + } + } + return null; + } +} diff --git a/src/main/java/com/ynxbd/common/action/xk/XK_WMUseWayEnum.java b/src/main/java/com/ynxbd/common/action/xk/XK_WMUseWayEnum.java new file mode 100644 index 0000000..f4c5c25 --- /dev/null +++ b/src/main/java/com/ynxbd/common/action/xk/XK_WMUseWayEnum.java @@ -0,0 +1,89 @@ +package com.ynxbd.common.action.xk; + + +import org.apache.commons.lang3.ObjectUtils; + +import java.util.List; + +// 用药途径 +public enum XK_WMUseWayEnum { + _1("1", "口服", "经口吞服药物"), + _2("2", "直肠用药", "将药物经肛门塞入或注入直肠"), + _3("3", "舌下用药", "将药物置于舌下/颊部的给药方法"), + _4("4", "注射用药", "将药物经过表皮注入体内"), + _401("401", "皮下注射", "将药物注射入皮下组织"), + _402("402", "皮内注射", "将药物注射入皮内组织"), + _403("403", "肌肉注射", "将药物注射入肌肉组织内"), + _404("404", "静脉注射或静脉滴注", "将药物注入静脉血管内"), + _5("5", "吸入用药", "将药物化为气雾状而后由呼吸道吸入"), + _6("6", "局部用药", "主要发挥局部作用的给药方法"), + _601("601", "椎管内用药", "将药物注入椎管内"), + _602("602", "关节腔内用药", "将药物注入关节腔内"), + _603("603", "胸腔膜用药", "将药物注入胸膜腔内"), + _604("604", "腹腔用药", "将药物注入腹腔内"), + _605("605", "阴道用药", "将药物置于阴道中"), + _606("606", "气管内用药", "将药物注入气管内"), + _607("607", "滴眼", "将药物经眼滴入"), + _608("608", "滴鼻", "将药物经鼻滴入"), + _609("609", "喷喉", "将药物喷于喉部黏膜表面"), + _610("610", "含化", "将药物置于口腔内含化"), + _611("611", "敷伤口", "将药物直接敷于伤口表面"), + _612("612", "擦皮肤", "用药物擦拭皮肤"), + _699("699", "其他局部用药途径", "其他局部用药途径"), + _9("9", "其他用药途径", "其他用药途径"); + + + public final String CODE; + public final String NAME; + public final String REMARK; + + XK_WMUseWayEnum(String CODE, String NAME, String REMARK) { + this.CODE = CODE; + this.NAME = NAME; + this.REMARK = REMARK; + } + + /** + * 根据code匹配枚举 + * + * @param code 编码 + * @return enum + */ + public static XK_WMUseWayEnum findEnum(String code) { + if (ObjectUtils.isEmpty(code)) { + return null; + } + for (XK_WMUseWayEnum item : XK_WMUseWayEnum.values()) { + if (item.CODE.equals(code)) { + return item; + } + } + return null; + } + + /** + * 根据名称匹配枚举 + * + * @param name 名称 + * @return enum + */ + public static XK_WMUseWayEnum findEnumByName(String name) { + if (ObjectUtils.isEmpty(name)) { + return null; + } + for (XK_WMUseWayEnum item : XK_WMUseWayEnum.values()) { + if (item.NAME.equals(name)) { + return item; + } + } + for (XK_WMUseWayEnum item : XK_WMUseWayEnum.values()) { + if (item.NAME.contains(name)) { + return item; + } + if (name.contains(item.NAME)) { + return item; + } + } + return null; + } +} diff --git a/src/main/java/com/ynxbd/common/bean/his/HisTreat.java b/src/main/java/com/ynxbd/common/bean/his/HisTreat.java index 75bb4ac..e27b614 100644 --- a/src/main/java/com/ynxbd/common/bean/his/HisTreat.java +++ b/src/main/java/com/ynxbd/common/bean/his/HisTreat.java @@ -15,8 +15,16 @@ public class HisTreat { private String treatNum; private String registerDate; + private String patientId; private String patientName; + // 患者就诊卡证号码 + private String patientIdCardNo; + // 患者性别代码 + private String patientGenderCode; + // 患者出生日期 + private String patientBirthdate; + private String deptCode; private String deptName; // 挂号医生 diff --git a/src/main/java/com/ynxbd/common/bean/xk/HisRxDict.java b/src/main/java/com/ynxbd/common/bean/xk/HisRxDict.java index 2c86a38..d5ea0e5 100644 --- a/src/main/java/com/ynxbd/common/bean/xk/HisRxDict.java +++ b/src/main/java/com/ynxbd/common/bean/xk/HisRxDict.java @@ -18,4 +18,9 @@ public class HisRxDict { private String name; // PYM 拼音码 private String pym; + // 监管平台显示名称 + private String xkName; + private String xkCode; + private String xkSeq; + private String xkSeq2; } diff --git a/src/main/java/com/ynxbd/common/bean/xk/HisRxItem.java b/src/main/java/com/ynxbd/common/bean/xk/HisRxItem.java deleted file mode 100644 index 847ada0..0000000 --- a/src/main/java/com/ynxbd/common/bean/xk/HisRxItem.java +++ /dev/null @@ -1,82 +0,0 @@ -package com.ynxbd.common.bean.xk; - -import com.alibaba.fastjson.annotation.JSONField; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; -import lombok.ToString; - -import java.io.Serializable; - -@Setter -@Getter -@ToString -@NoArgsConstructor -public class HisRxItem implements Serializable { - private static final long serialVersionUID = 2026082712724000001L; - - // 项目编码 - @JSONField(ordinal = 1) - private String xmCode; - // 项目名称 - @JSONField(ordinal = 2) - private String xmName; - // 科目编码 - @JSONField(ordinal = 3) - private String kmCode; - // 科目名称 - @JSONField(ordinal = 4) - private String kmName; - // 项目单位 - @JSONField(ordinal = 5) - private String xmUnit; - // 项目单价 - @JSONField(ordinal = 6) - private String xmPrice; - // 项目数量 - @JSONField(ordinal = 7) - private String xmCount; - // 项目金额 - @JSONField(ordinal = 8) - private String xmMoney; - // 项目标识 - @JSONField(ordinal = 9) - private Integer xmFlag; - // 药品剂量 - @JSONField(ordinal = 10) - private String ypJl; - // 药品剂量单位 - @JSONField(ordinal = 11) - private String ypJlUnit; - // 用法频次 qd/bid等 - @JSONField(ordinal = 12) - private String yzUsedMethod; - // 每日次数 - @JSONField(ordinal = 13) - private String yzCountForDay; - // 每周次数 - @JSONField(ordinal = 14) - private String yzCountForWeek; - // 用药途径:口服 - @JSONField(ordinal = 15) - private String ypPath; - // 药房编码 - @JSONField(ordinal = 16) - private String yfCode; - // 药房名称 - @JSONField(ordinal = 17) - private String yfName; - // 医保类别编码 - @JSONField(ordinal = 18) - private String yblb; - // 医保类别名称 - @JSONField(ordinal = 19) - private String yblbName; - // 总数量 - @JSONField(ordinal = 20) - private String totCount; - // 备注 - @JSONField(ordinal = 21) - private String note; - -} diff --git a/src/main/java/com/ynxbd/common/bean/xk/HisRxUseCount.java b/src/main/java/com/ynxbd/common/bean/xk/HisRxUseCount.java index f7e2c2f..5b216a7 100644 --- a/src/main/java/com/ynxbd/common/bean/xk/HisRxUseCount.java +++ b/src/main/java/com/ynxbd/common/bean/xk/HisRxUseCount.java @@ -20,4 +20,11 @@ public class HisRxUseCount { private Integer countForWeek; // PYM 拼音码 private String pym; + // 监管显示的名称 + private String xkName; + + private String xkCode; + + private Integer xkSeq; + } diff --git a/src/main/java/com/ynxbd/common/bean/xk/HisTCMRxItem.java b/src/main/java/com/ynxbd/common/bean/xk/HisTCMRxItem.java new file mode 100644 index 0000000..4bf69b0 --- /dev/null +++ b/src/main/java/com/ynxbd/common/bean/xk/HisTCMRxItem.java @@ -0,0 +1,34 @@ +package com.ynxbd.common.bean.xk; + +import com.alibaba.fastjson.annotation.JSONField; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; + +import java.io.Serializable; + +@Setter +@Getter +@ToString +@NoArgsConstructor +public class HisTCMRxItem implements Serializable { + private static final long serialVersionUID = 2026082712724000001L; + + // 药品编码 + @JSONField(ordinal = 1, name = "GOODSNO") + private String goodsNo; + // 药品数量 + @JSONField(ordinal = 2, name = "YPCOUNT") + private String ypCount; + // 药房编码 + @JSONField(ordinal = 3, name = "YFCODE") + private String yfCode; + // 药房名称 + @JSONField(ordinal = 4, name = "YFNAME") + private String yfName; + // 备注 + @JSONField(ordinal = 5, name = "NOTE") + private String note; + +} diff --git a/src/main/java/com/ynxbd/common/bean/xk/HisWMRxItem.java b/src/main/java/com/ynxbd/common/bean/xk/HisWMRxItem.java new file mode 100644 index 0000000..44d3f23 --- /dev/null +++ b/src/main/java/com/ynxbd/common/bean/xk/HisWMRxItem.java @@ -0,0 +1,56 @@ +package com.ynxbd.common.bean.xk; + +import com.alibaba.fastjson.annotation.JSONField; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; + +import java.io.Serializable; + +@Setter +@Getter +@ToString +@NoArgsConstructor +public class HisWMRxItem implements Serializable { + private static final long serialVersionUID = 2026082712724000001L; + + // 项目编码 + @JSONField(ordinal = 1, name = "XMCODE") + private String xmCode; + // 项目数量 + @JSONField(ordinal = 2, name = "XMCOUNT") + private String xmCount; + // 项目标识 + @JSONField(ordinal = 3, name = "XMFLAG") + private Integer xmFlag; + // 药品剂量 + @JSONField(ordinal = 4, name = "YPJL") + private String ypJl; + + // 用法频次 qd/bid等 + @JSONField(ordinal = 5, name = "YZUSEDMETHOD") + private String yzUsedMethod; + // 每日次数 + @JSONField(ordinal = 6, name = "YZCOUNTFORDAY") + private String yzCountForDay; + // 每周次数 + @JSONField(ordinal = 7, name = "YZCOUNTFORWEEK") + private String yzCountForWeek; + // 用药途径:口服 + @JSONField(ordinal = 8, name = "YPPATH") + private String ypPath; + // 药房编码 + @JSONField(ordinal = 9, name = "YFCODE") + private String yfCode; + // 药房名称 + @JSONField(ordinal = 10, name = "YFNAME") + private String yfName; + // 总数量 + @JSONField(ordinal = 11, name = "TOTCOUNT") + private String totCount; + // 备注 + @JSONField(ordinal = 12, name = "NOTE") + private String note; + +} diff --git a/src/main/java/com/ynxbd/common/config/interceptor/AesDecode.java b/src/main/java/com/ynxbd/common/config/interceptor/AesDecode.java index e010616..02567ba 100644 --- a/src/main/java/com/ynxbd/common/config/interceptor/AesDecode.java +++ b/src/main/java/com/ynxbd/common/config/interceptor/AesDecode.java @@ -8,9 +8,12 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; -@Target({ElementType.PARAMETER}) +@Target({ + ElementType.PARAMETER, + ElementType.ANNOTATION_TYPE // 允许注解打在@interface上 +}) @Retention(RetentionPolicy.RUNTIME) public @interface AesDecode { - Class respAesClass() default AesWxHelper.class; -} + Class AesClass() default AesWxHelper.class; +} \ No newline at end of file diff --git a/src/main/java/com/ynxbd/common/config/interceptor/MethodInterceptor.java b/src/main/java/com/ynxbd/common/config/interceptor/MethodInterceptor.java index a0382e2..851e539 100644 --- a/src/main/java/com/ynxbd/common/config/interceptor/MethodInterceptor.java +++ b/src/main/java/com/ynxbd/common/config/interceptor/MethodInterceptor.java @@ -60,7 +60,7 @@ public class MethodInterceptor extends org.apache.struts2.interceptor.AbstractIn } try { - Class response = annoAesDecode.respAesClass(); + Class response = annoAesDecode.AesClass(); if (response == null) { value = null; } else { diff --git a/src/main/java/com/ynxbd/common/dao/his/HisTreatDao.java b/src/main/java/com/ynxbd/common/dao/his/HisTreatDao.java index 77bbeb7..626c8de 100644 --- a/src/main/java/com/ynxbd/common/dao/his/HisTreatDao.java +++ b/src/main/java/com/ynxbd/common/dao/his/HisTreatDao.java @@ -188,7 +188,7 @@ public class HisTreatDao { */ public HisTreat updateHisTreat(String treatNum, String symptom, String subjComplaint, String disDescription, String treatMeas, String tcmDdCode, String tcmDdName, String tcmSdCode, String tcmSdName, String mdDisCode, String mdDisName, - String pastHistory, String presentHistory, String alleHist, String disCode1, String disName1, String disCode2, String disName2) throws ServiceException { + String pastHist, String presentHist, String alleHist, String disCode1, String disName1, String disCode2, String disName2) throws ServiceException { JsonResult jsonResult = HisFactory.His().getJsonResult(HisEnum.XK_UPDATE_TREAT, params -> { params.put("MZNum", treatNum); // 门诊号 params.put("Symptom", symptom); // 症状和体征=[T:x℃] @@ -203,8 +203,8 @@ public class HisTreatDao { params.put("MdDisCode", mdDisCode); // 西医诊断疾病代码 params.put("MdDisName", mdDisName); // 西医诊断疾病名称 // - params.put("PastHistory", pastHistory); // 既往病史 - params.put("PresentHistory", presentHistory); // 现病史 + params.put("PastHistory", pastHist); // 既往病史 + params.put("PresentHistory", presentHist); // 现病史 params.put("AlleHist", alleHist); // 过敏史 // params.put("DisCode1", disCode1); // 其他诊断①疾病代码 diff --git a/src/main/java/com/ynxbd/common/dao/his/HisXKDao.java b/src/main/java/com/ynxbd/common/dao/his/HisXKDao.java index 5b866dc..26c66cc 100644 --- a/src/main/java/com/ynxbd/common/dao/his/HisXKDao.java +++ b/src/main/java/com/ynxbd/common/dao/his/HisXKDao.java @@ -1,28 +1,84 @@ package com.ynxbd.common.dao.his; +import com.ynxbd.common.action.xk.XK_WMFrequencyEnum; +import com.ynxbd.common.action.xk.XK_WMUseWayEnum; import com.ynxbd.common.bean.xk.*; import com.ynxbd.common.helper.common.JsonHelper; import com.ynxbd.common.his.HisEnum; 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 lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.ObjectUtils; import java.util.ArrayList; +import java.util.Comparator; import java.util.List; +import java.util.stream.Collectors; @Slf4j public class HisXKDao { - public List queryHisRxDict(String type) { + public List queryHisRxDict(String type, String key, String yfCode) { JsonResult jsonResult = HisFactory.His().getJsonResult(HisEnum.HIS_XK_RX_DICT, params -> { - params.put("Flag", type); // 1:用药频次字典; 2:给要途径字典; 3:药房字典; 4:药品 + params.put("Flag", type); // 1:用药频次字典; 2:给要途径字典; 3:药房字典; 4:药品 + params.put("YFCode", yfCode); // 药房编码 }); if ("1".equals(type)) { // 用药频次字典 - return jsonResult.getDataMapList(HisRxUseCount.class, "Items", "Item"); + List dictList = jsonResult.getDataMapList(HisRxUseCount.class, "Items", "Item"); + + for (HisRxUseCount item : dictList) { + if (ObjectUtils.isEmpty(item.getCode())) { + continue; + } + XK_WMFrequencyEnum findEnum = XK_WMFrequencyEnum.findEnum(item.getCode()); + if (findEnum != null) { + item.setXkCode(findEnum.CODE); + item.setXkName(findEnum.NAME); + item.setXkSeq(findEnum.SEQ); + } else { + item.setXkCode(XK_WMFrequencyEnum.CODE_OTH.CODE); + item.setXkName(XK_WMFrequencyEnum.CODE_OTH.NAME); + item.setXkSeq(XK_WMFrequencyEnum.CODE_OTH.SEQ); + } + } + + return dictList.stream().sorted(Comparator.comparingInt(HisRxUseCount::getXkSeq)).collect(Collectors.toList()); } if ("2".equals(type)) { // 给要途径字典 - return jsonResult.getDataMapList(HisRxDict.class, "Items", "Item"); + List dictList = jsonResult.getDataMapList(HisRxDict.class, "Items", "Item"); + + for (HisRxDict item : dictList) { + if (ObjectUtils.isEmpty(item.getCode())) { + continue; + } + XK_WMUseWayEnum findEnum = XK_WMUseWayEnum.findEnumByName(item.getName()); + if (findEnum != null) { + item.setXkCode(findEnum.CODE); + item.setXkName(findEnum.NAME); + item.setXkSeq(findEnum.CODE.substring(0, 1)); + item.setXkSeq2(findEnum.CODE.substring(0, 1)); + } else { + item.setXkCode(XK_WMUseWayEnum._9.CODE); + item.setXkName(XK_WMUseWayEnum._9.NAME); + item.setXkSeq(XK_WMUseWayEnum._9.CODE); + item.setXkSeq2("0"); + } + } + + dictList.sort((o1, o2) -> { + // 第一条件:seq升序,null放末尾 + int cmp = Comparator.nullsLast(String::compareTo).compare(o1.getXkSeq(), o2.getXkSeq()); + if (cmp != 0) { + return cmp; + } + // seq相同,按seq2字典序,null放前面 + return Comparator.nullsFirst(String::compareTo).compare(o1.getXkSeq2(), o2.getXkSeq2()); + }); + + return dictList; } if ("3".equals(type)) { // 药房字典 return jsonResult.getDataMapList(HisRxDict.class, "Items", "Item"); @@ -42,18 +98,46 @@ public class HisXKDao { return new ArrayList<>(); } - public JsonResult createHisRx(String doctCode, String treatNum, String rxType, String diagnose, String weight, String note, String ybAttrib, String bzCode, String bzName, List hisRxItems) { + public JsonResult createHisRx(String items, String doctCode, String treatNum, String rxDrugType, String rxTypeCode, String rxDiagnose, String weight, String note, String ybAttrib, String bzCode, String bzName, + String tcmTtName, String tcmUseName, String tcmCFCount, String tcmCFUseCount, String tcmUseCountForDay) throws ServiceException { + Object rxList; + if ("1".equals(rxDrugType)) { // 西药 + List hisWMRxItems = JsonHelper.parseArray(items, HisWMRxItem.class); + if (hisWMRxItems.isEmpty()) { + throw new ServiceException(ResultEnum.PARAM_IS_INVALID); + } + rxList = hisWMRxItems; + } else { + log.info("[中药-处方开立]tcmTtName={}, tcmUseName={}, tcmCFCount={}, tcmCFUseCount={}, tcmUseCountForDay={}", tcmTtName, tcmUseName, tcmCFCount, tcmCFUseCount, tcmUseCountForDay); + if (ObjectUtils.isEmpty(tcmTtName) || ObjectUtils.isEmpty(tcmUseName) || ObjectUtils.isEmpty(tcmCFCount) || ObjectUtils.isEmpty(tcmCFUseCount) || ObjectUtils.isEmpty(tcmUseCountForDay)) { + throw new ServiceException(ResultEnum.PARAM_IS_DEFECT); + } + + List hisTCMRxItems = JsonHelper.parseArray(items, HisTCMRxItem.class); + if (hisTCMRxItems.isEmpty()) { + throw new ServiceException(ResultEnum.PARAM_IS_INVALID); + } + rxList = hisTCMRxItems; + } + JsonResult jsonResult = HisFactory.His().getJsonResult(HisEnum.HIS_XK_RX_CREATE, params -> { - params.put("YSCode", doctCode); // 开单医生编码 - params.put("MZNum", treatNum); // 门诊号 - params.put("CFType", rxType); // 处方类型 [1:西药] - params.put("MZDiagnose", diagnose); // 处方诊断 - params.put("Weight", weight); // 体重 + params.put("MZNum", treatNum); // 门诊号 + params.put("CFFlag", rxDrugType); // 处方药品类别[1:西药处方;2:中药处方] + params.put("CFType", ObjectUtils.isEmpty(rxTypeCode) ? "0" : rxTypeCode); // 处方类型[0:普通处方 (默认值) 1:急诊处方 2:儿科处方....] + params.put("MZDiagnose", ObjectUtils.isEmpty(rxDiagnose) ? "无" : rxDiagnose); // 处方诊断 + params.put("Weight", weight); // 体重 params.put("Note", ObjectUtils.isEmpty(note) ? "" : note); // 备注 - params.put("YBAttrib", ybAttrib); // 医保类别 - params.put("BZCode", bzCode); // 病种编码 - params.put("BZName", bzName); // 病种名称 - params.put("Jarray", JsonHelper.toJsonStringEmpty(hisRxItems)); + params.put("YBAttrib", ybAttrib); // 医保类别 + params.put("BZCode", bzCode); // 病种编码 + params.put("BZName", bzName); // 病种名称 + params.put("YSCode", doctCode); // 开单医生编码 + // 中药=========================================================== + params.put("TT_Name", tcmTtName); // 汤头名称 + params.put("UsedName", tcmUseName); // 用法 + params.put("CFCount", tcmCFCount); // 处方付数 + params.put("CFUseCount", tcmCFUseCount); // 处方单付使用次数 + params.put("UseCountForDay", tcmUseCountForDay); // 每日使用次数 + params.put("Jarray", JsonHelper.toJsonStringEmpty(rxList)); }); log.info("[开方]返回 resp={}", JsonHelper.toJsonString(jsonResult.getDataMap())); return jsonResult; diff --git a/src/main/java/com/ynxbd/common/healthcard/HCPreConsultHelper.java b/src/main/java/com/ynxbd/common/healthcard/HCPreConsultHelper.java index 9497d7b..2179c89 100644 --- a/src/main/java/com/ynxbd/common/healthcard/HCPreConsultHelper.java +++ b/src/main/java/com/ynxbd/common/healthcard/HCPreConsultHelper.java @@ -8,6 +8,7 @@ import com.ynxbd.common.healthcard.config.HCPreConsultConfig; import com.ynxbd.common.healthcard.config.HCReportConfig; import com.ynxbd.common.helper.common.CodeHelper; import com.ynxbd.common.helper.common.JsonHelper; +import com.ynxbd.common.helper.common.URLHelper; import com.ynxbd.common.helper.http.OkHttpHelper; import com.ynxbd.common.result.ServiceException; import com.ynxbd.common.service.PatientService; @@ -60,7 +61,7 @@ public class HCPreConsultHelper { String deptCode = order.getDeptCode(); if (!ObjectUtils.isEmpty(HCPreConsultConfig.DEV_OPEN_IDS) && !HCPreConsultConfig.hasDevOpenId(openid)) { - System.out.println("[[预问诊]上传挂号数据-不是测试账号"); + System.out.println("[预问诊]上传挂号数据-不是测试账号"); return; } @@ -104,7 +105,7 @@ public class HCPreConsultHelper { sceneData.put("encounterDate", regDate + " " + begTime); // yyyy-MM-dd HH:mm:ss sceneData.put("partnerAppId", HCPreConsultConfig.APP_ID); // 开发者ID(AppID),在管理>开发商接入 下查询 sceneData.put("partnerId", HCPreConsultConfig.PARTNER_ID); - + String uuid = CodeHelper.get32UUID(); // partnerId:注意这里使用的是报告配置的-PARTNER_ID JSONObject respJson = post(url + HCReportConfig.PARTNER_ID, req -> { req.put("reqHead", reqHead); @@ -121,7 +122,7 @@ public class HCPreConsultHelper { req.put("department", deptCode); // 科室代码 req.put("scene", "0101015"); req.put("sceneData", JsonHelper.toJsonString(sceneData)); - log.info("[预问诊]req={}", JsonHelper.toJsonString(req)); + log.info("[预问诊][{}] req={}", uuid, JsonHelper.toJsonString(req)); }, headers -> { headers.add("Content-Type", "application/json"); headers.add("god-portal-signature", config.getSignature()); @@ -129,27 +130,28 @@ public class HCPreConsultHelper { headers.add("god-portal-request-id", requestId); }); - log.warn("[预问诊]上传挂号数据 resp={}", JsonHelper.toJsonString(respJson)); + log.warn("[预问诊][{}]上传挂号数据 resp={}", uuid, JsonHelper.toJsonString(respJson)); String code = respJson.getString("code"); String message = respJson.getString("msg"); if (!"0".equals(code)) { - log.error("[预问诊]上传挂号数据-失败:{}", message); + log.error("[预问诊][{}]上传挂号数据-失败:{}", uuid, message); } else { - log.info("[预问诊]上传挂号数据-成功"); + log.info("[预问诊][{}]上传挂号数据-成功", uuid); } } // 5.1.1 线上挂号场景(微信h5页面) - public static String getH5Online(String registerId) { + public static String getH5Online(String registerId, boolean isHttps) { try { if (ObjectUtils.isEmpty(registerId)) { return null; } String url = HCPreConsultConfig.IS_DEV - ? "https://dev-prediagnosis.wecity.qq.com/guide-h5-prediagnosis/pages/prediagnosis?partnerId=${partnerId}&hospitalId=${hospitalId}®isterId=${registerId}&subHospitalId=${subHospitalId}®isterIdSign={registerIdSign}" - : "https://miying.qq.com/guide-h5-prediagnosis/pages/prediagnosis?partnerId=${partnerId}&hospitalId=${hospitalId}®isterId=${registerId}&subHospitalId=${subHospitalId}®isterIdSign={registerIdSign}"; + ? "https://dev-prediagnosis.wecity.qq.com/guide-h5-prediagnosis/pages/prediagnosis?partnerId=${partnerId}&hospitalId=${hospitalId}®isterId=${registerId}&subHospitalId=${subHospitalId}®isterIdSign={registerIdSign}&redirectPath=" + : "https://miying.qq.com/guide-h5-prediagnosis/pages/prediagnosis?partnerId=${partnerId}&hospitalId=${hospitalId}®isterId=${registerId}&subHospitalId=${subHospitalId}®isterIdSign={registerIdSign}&redirectPath="; + url = url + URLHelper.encodeURL(WeChatConfig.getWebReqURL(isHttps) + "my-info.html"); String registerIdSign = HCPreConsultConfig.toHmacSha256Example(HCPreConsultConfig.SECRET_KEY, HCPreConsultConfig.HOSP_ID + registerId); return url.replace("${partnerId}", HCPreConsultConfig.PARTNER_ID) .replace("${hospitalId}", HCPreConsultConfig.HOSP_ID) diff --git a/src/main/java/com/ynxbd/common/helper/common/AesHelper.java b/src/main/java/com/ynxbd/common/helper/common/AesHelper.java index 352575b..192d8c4 100644 --- a/src/main/java/com/ynxbd/common/helper/common/AesHelper.java +++ b/src/main/java/com/ynxbd/common/helper/common/AesHelper.java @@ -31,7 +31,7 @@ public class AesHelper { return new String(cipher.doFinal(Hex.decodeHex(data.toCharArray()))); } catch (Exception e) { - log.warn(e.getMessage()); + log.warn("[AES-DE]{}", e.getMessage()); return null; } } @@ -54,7 +54,7 @@ public class AesHelper { byte[] encrypted = cipher.doFinal(data.getBytes()); return Hex.encodeHexString(encrypted).toUpperCase(); } catch (Exception e) { - log.warn(e.getMessage()); + log.warn("[AES-EN]{}", e.getMessage()); return null; } } diff --git a/src/main/java/com/ynxbd/common/service/CasebookService.java b/src/main/java/com/ynxbd/common/service/CasebookService.java index 3150248..40e1f7a 100644 --- a/src/main/java/com/ynxbd/common/service/CasebookService.java +++ b/src/main/java/com/ynxbd/common/service/CasebookService.java @@ -194,26 +194,26 @@ public class CasebookService { } try { - log.info("[病历复印]调用HIS接口开始... borrowNo-{}", applyId); + log.info("[病历复印]调用接口开始... borrowNo-{}", applyId); String respJson = XBDHttpHelper.ExecMethodPost(XBDEnum.BLSM_Appointment_SetISPay.NAME, params -> { params.put("borrowNo", applyId); params.put("payDateTime", DateHelper.getCurDateTime()); params.put("tradeNo", tradeNo); }); - log.info("[病历复印]HIS接口返回 resp={}", respJson); + log.info("[病历复印]接口返回 resp={}", respJson); String code = JsonHelper.parseObject(respJson).getString("Code"); if (code == null) { if (!casebookDao.updateNotifyOk(outTradeNo)) { - log.info("[病历复印]更新HIS订单信息失败 outTradeNo={}, bankTransNo={}, applyId={}", outTradeNo, bankTransNo, applyId); + log.info("[病历复印]更新订单信息失败 outTradeNo={}, bankTransNo={}, applyId={}", outTradeNo, bankTransNo, applyId); } return; } String message = JsonHelper.parseObject(respJson).getString("Msg"); - log.error("[病历复印]HIS接口调用失败 code={}, message={}, outTradeNo={}, applyId={}", code, message, outTradeNo, applyId); + log.error("[病历复印]接口调用失败 code={}, message={}, outTradeNo={}, applyId={}", code, message, outTradeNo, applyId); if (!casebookDao.updateNotifyErr(outTradeNo, message)) { - log.info("[病历复印]更新HIS订单错误信息失败 outTradeNo={}, code={}, message={}, outTradeNo={}, applyId={}", outTradeNo, code, message, outTradeNo, applyId); + log.info("[病历复印]更新订单错误信息失败 outTradeNo={}, code={}, message={}, outTradeNo={}, applyId={}", outTradeNo, code, message, outTradeNo, applyId); } } catch (Exception e) { log.error(e.getMessage()); diff --git a/src/main/java/com/ynxbd/wx/config/MessagePushConfig.java b/src/main/java/com/ynxbd/wx/config/MessagePushConfig.java index c57ae6c..9b4ddb2 100644 --- a/src/main/java/com/ynxbd/wx/config/MessagePushConfig.java +++ b/src/main/java/com/ynxbd/wx/config/MessagePushConfig.java @@ -245,7 +245,7 @@ public class MessagePushConfig { log.warn("[推送]预问诊完成通知-失败:参数缺失 openId={}, patientName={}, outTradeNo={}", openId, patientName, outTradeNo); return; } - String url = HCPreConsultHelper.getH5Online(outTradeNo); + String url = HCPreConsultHelper.getH5Online(outTradeNo, false); if (ObjectUtils.isEmpty(url)) { log.warn("[推送]预问诊完成通知-失败:链接为空[outTradeNo:{}]", outTradeNo); return; diff --git a/src/main/java/com/ynxbd/wx/wxfactory/AesWxHelper.java b/src/main/java/com/ynxbd/wx/wxfactory/AesWxHelper.java index fb2c7fb..7dfe10e 100644 --- a/src/main/java/com/ynxbd/wx/wxfactory/AesWxHelper.java +++ b/src/main/java/com/ynxbd/wx/wxfactory/AesWxHelper.java @@ -1,6 +1,7 @@ package com.ynxbd.wx.wxfactory; import com.ynxbd.common.helper.common.AesHelper; +import org.apache.commons.codec.digest.DigestUtils; import org.apache.commons.lang3.ObjectUtils; import java.math.BigDecimal; @@ -62,7 +63,8 @@ public class AesWxHelper extends AesHelper { } public static void main(String[] args) { - System.out.println(encode("162423")); +// System.out.println(encode("162423")); + System.out.println(DigestUtils.md5Hex("4500000488202609203820674636G001" + "xbd" + "0704" + "xbd" + "*").toUpperCase()); // System.out.println(decode("E6835E243069406F53EC8464898B37C0")); } } 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 99a9a84..ad0eddb 100644 --- a/src/main/java/com/ynxbd/wx/wxfactory/medical/Client.java +++ b/src/main/java/com/ynxbd/wx/wxfactory/medical/Client.java @@ -89,7 +89,7 @@ public class Client { log.error("[医保]金额转换异常: {}", e.getMessage()); return null; } - + try { BigDecimal finalCashFee = cashFee; JsonResult jsonResult = WxRequestHelper.postMdXml(("https://api.weixin.qq.com/payinsurance/unifiedorder?access_token=" + accessToken), params -> {