diff --git a/src/main/java/com/ynxbd/common/action/InHospAction.java b/src/main/java/com/ynxbd/common/action/InHospAction.java index 8c8aa13..48bb7a1 100644 --- a/src/main/java/com/ynxbd/common/action/InHospAction.java +++ b/src/main/java/com/ynxbd/common/action/InHospAction.java @@ -8,6 +8,7 @@ import com.ynxbd.common.helper.common.DateHelper; import com.ynxbd.common.result.JsonResult; import com.ynxbd.common.result.Result; import com.ynxbd.common.result.ResultEnum; +import com.ynxbd.common.service.InHospService; import com.ynxbd.wx.wxfactory.AesWxHelper; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.ObjectUtils; @@ -184,39 +185,38 @@ public class InHospAction extends BaseAction { */ @Action("getOutHospRecords") public Result getOutHospRecords(@AesDecode String patientId, String begDate, String endDate) { - log.info("[住院]通过患者ID查询住院记录(出院后) patientId={}, begDate={}, endDate={}", patientId, begDate, endDate); - if (patientId == null) { - return Result.error(ResultEnum.PARAM_IS_DEFECT); - } - - JsonResult resp = new HisInHospDao().getAllHospList(patientId); - if (!resp.success()) { - return Result.error(resp.getMessage()); - } - - List dataList = resp.getDataMapList(InHospitalList.class, "Items", "Item"); - - boolean hasDateRange = (!ObjectUtils.isEmpty(begDate) && !ObjectUtils.isEmpty(endDate)); + try{ + log.info("[住院]通过患者ID查询住院记录(出院后) patientId={}, begDate={}, endDate={}", patientId, begDate, endDate); + if (patientId == null) { + return Result.error(ResultEnum.PARAM_IS_DEFECT); + } - List records = new ArrayList<>(); - String inHospitalDate, outHospitalDate; - for (InHospitalList item : dataList) { - if (hasDateRange) { // 有日期范围 - inHospitalDate = item.getInHospitalDate(); - outHospitalDate = item.getOutHospitalDate(); - if ((!ObjectUtils.isEmpty(inHospitalDate) && DateHelper.inDateRange(begDate, endDate, inHospitalDate, DateHelper.DateEnum.yyyy_MM_dd)) || - (!ObjectUtils.isEmpty(outHospitalDate) && DateHelper.inDateRange(begDate, endDate, outHospitalDate, DateHelper.DateEnum.yyyy_MM_dd))) { + List dataList = new InHospService().queryHisOutPatientRecords(patientId); + boolean hasDateRange = (!ObjectUtils.isEmpty(begDate) && !ObjectUtils.isEmpty(endDate)); + + List records = new ArrayList<>(); + String inHospitalDate, outHospitalDate; + for (InHospitalList item : dataList) { + if (hasDateRange) { // 有日期范围 + inHospitalDate = item.getInHospitalDate(); + outHospitalDate = item.getOutHospitalDate(); + if ((!ObjectUtils.isEmpty(inHospitalDate) && DateHelper.inDateRange(begDate, endDate, inHospitalDate, DateHelper.DateEnum.yyyy_MM_dd)) || + (!ObjectUtils.isEmpty(outHospitalDate) && DateHelper.inDateRange(begDate, endDate, outHospitalDate, DateHelper.DateEnum.yyyy_MM_dd))) { + item.setEnTreatNum(AesWxHelper.encode(item.getZyNum())); + records.add(item); + } + } else { item.setEnTreatNum(AesWxHelper.encode(item.getZyNum())); records.add(item); } - } else { - item.setEnTreatNum(AesWxHelper.encode(item.getZyNum())); - records.add(item); } + + records = records.stream().sorted(Comparator.comparing(InHospitalList::getInHospitalDate, Comparator.reverseOrder())).collect(Collectors.toList()); + return Result.success(records); + }catch (Exception e){ + return Result.error(e); } - records = records.stream().sorted(Comparator.comparing(InHospitalList::getInHospitalDate, Comparator.reverseOrder())).collect(Collectors.toList()); - return Result.success(records); } /** diff --git a/src/main/java/com/ynxbd/common/action/RegisterAction.java b/src/main/java/com/ynxbd/common/action/RegisterAction.java index 837ddb9..172f438 100644 --- a/src/main/java/com/ynxbd/common/action/RegisterAction.java +++ b/src/main/java/com/ynxbd/common/action/RegisterAction.java @@ -90,7 +90,7 @@ public class RegisterAction extends BaseAction { return Result.error(ResultEnum.PARAM_IS_DEFECT); } - List deptList = new HisRegisterDao().getTimeDeptList(begDate, endDate, deptCode); + List deptList = new HisRegisterDao().getTimeDeptList(begDate, endDate, deptCode, "1"); MerchantEnum merchantEnum = MerchantEnum.findEnumByCode(merCode); if (MerchantEnum.ALI.equals(merchantEnum)) { diff --git a/src/main/java/com/ynxbd/common/action/healthcard/AIGuidanceAction.java b/src/main/java/com/ynxbd/common/action/healthcard/AIGuidanceAction.java index 861882f..110bdd1 100644 --- a/src/main/java/com/ynxbd/common/action/healthcard/AIGuidanceAction.java +++ b/src/main/java/com/ynxbd/common/action/healthcard/AIGuidanceAction.java @@ -52,8 +52,10 @@ public class AIGuidanceAction extends BaseAction { @Action("getHospDetail") public Result getHospDetail(String hosId) { JSONObject body = getBody(); - if (ObjectUtils.isEmpty(hosId)) { - hosId = body.getString("hosId"); + if (body != null) { + if (ObjectUtils.isEmpty(hosId)) { + hosId = body.getString("hosId"); + } } if (!HCAIGuidanceConfig.IS_DEBUG && !HCAIGuidanceConfig.isVerifySign(request)) { return Result.error(ResultEnum.SIGN_ERROR); // 签名异常 @@ -67,11 +69,13 @@ public class AIGuidanceAction extends BaseAction { @Action("getDeptList") public Result getDeptList(String hosId, String branchId) { JSONObject body = getBody(); - if (ObjectUtils.isEmpty(hosId)) { - hosId = body.getString("hosId"); - } - if (ObjectUtils.isEmpty(branchId)) { - branchId = body.getString("branchId"); + if (body != null) { + if (ObjectUtils.isEmpty(hosId)) { + hosId = body.getString("hosId"); + } + if (ObjectUtils.isEmpty(branchId)) { + branchId = body.getString("branchId"); + } } if (!HCAIGuidanceConfig.IS_DEBUG && !HCAIGuidanceConfig.isVerifySign(request)) { return Result.error(ResultEnum.SIGN_ERROR); // 签名异常 @@ -85,15 +89,18 @@ public class AIGuidanceAction extends BaseAction { @Action("getDoctorList") public Result getDoctorList(String hosId, String branchId, String deptId) { JSONObject body = getBody(); - if (ObjectUtils.isEmpty(hosId)) { - hosId = body.getString("hosId"); - } - if (ObjectUtils.isEmpty(branchId)) { - branchId = body.getString("branchId"); - } - if (ObjectUtils.isEmpty(deptId)) { - deptId = body.getString("deptId"); + if (body != null) { + if (ObjectUtils.isEmpty(hosId)) { + hosId = body.getString("hosId"); + } + if (ObjectUtils.isEmpty(branchId)) { + branchId = body.getString("branchId"); + } + if (ObjectUtils.isEmpty(deptId)) { + deptId = body.getString("deptId"); + } } + if (!HCAIGuidanceConfig.IS_DEBUG && !HCAIGuidanceConfig.isVerifySign(request)) { return Result.error(ResultEnum.SIGN_ERROR); // 签名异常 } @@ -105,21 +112,23 @@ public class AIGuidanceAction extends BaseAction { * 4.1.5 查询就诊人列表(必选) */ @Action("getPatientCardList") - public Result getPatientCardList(String hosId, String branchId, String deptId) { + public Result getPatientCardList(String hosId, String branchId, String patientId) { JSONObject body = getBody(); - if (ObjectUtils.isEmpty(hosId)) { - hosId = body.getString("hosId"); - } - if (ObjectUtils.isEmpty(branchId)) { - branchId = body.getString("branchId"); - } - if (ObjectUtils.isEmpty(deptId)) { - deptId = body.getString("deptId"); + if (body != null) { + if (ObjectUtils.isEmpty(hosId)) { + hosId = body.getString("hosId"); + } + if (ObjectUtils.isEmpty(branchId)) { + branchId = body.getString("branchId"); + } + if (ObjectUtils.isEmpty(patientId)) { + patientId = body.getString("patientId"); + } } if (!HCAIGuidanceConfig.IS_DEBUG && !HCAIGuidanceConfig.isVerifySign(request)) { return Result.error(ResultEnum.SIGN_ERROR); // 签名异常 } - return new AIGuidanceService().getPatientCardList(hosId, branchId, deptId); + return new AIGuidanceService().getPatientCardList(hosId, branchId, patientId); } 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 93a28d5..129949b 100644 --- a/src/main/java/com/ynxbd/common/action/pay/MedicalAction.java +++ b/src/main/java/com/ynxbd/common/action/pay/MedicalAction.java @@ -47,9 +47,10 @@ public class MedicalAction extends BaseAction { * 用户信息获取 | 医保上传 | 医保支付下单 */ @Action("getFeeDetails") - public Result getFeeDetails(String callNo, String payCode, String qrCode, @AesDecode String openid, @AesDecode String patientId, @AesDecode String cardNo, @AesDecode String hisPatientId, String realName, BigDecimal totalFee, Boolean isSplitTime, String ybAttrib, String ybBZCode, String ybBZName) { + public Result getFeeDetails(String callNo, String payCode, String qrCode, @AesDecode String openid, @AesDecode String patientId, @AesDecode String hisPatientId, @AesDecode String cardNo, String realName, String treatNum, BigDecimal totalFee) { try { - log.info("[医保]上传明细下单 callNo={}, payCode={}, openid={}, qrCode={}, patientId={}, cardNo={}, realName={}, hisPatientId={}, totalFee={}, ybAttrib={}, ybBZCode={}, ybBZName={}", callNo, payCode, openid, qrCode, patientId, ParamHelper.hideIdCardNo(cardNo), realName, hisPatientId, totalFee, ybAttrib, ybBZCode, ybBZName); + log.info("[医保]上传明细下单 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); } @@ -62,6 +63,8 @@ public class MedicalAction extends BaseAction { MedicalInfo medicalInfo; switch (PEnum.toEnum(callNo)) { case REG: + Boolean isSplitTime = getBoolean("isSplitTime"); + Register reg = new Register().getRegParams(new RequestParams(request), true); if ("*".equals(reg.getRegCode())) { return Result.error("任意医师的号源不能进行医保支付"); @@ -70,17 +73,27 @@ public class MedicalAction extends BaseAction { if (!DateHelper.isToday(reg.getRegDate())) { return Result.error("医保支付仅支持今日挂号"); } - medicalInfo = new MedicalService().hisRegMedUploadDetails(merchantEnum, qrCode, openid, patientId, cardNo, realName, hisPatientId, reg, isSplitTime); + medicalInfo = new MedicalService().hisRegMedUploadDetails(merchantEnum, qrCode, openid, treatNum, patientId, hisPatientId, cardNo, realName, reg, isSplitTime); break; case RECIPE: - String treatNum = getString("treatNum"); + String ybAttrib = getString("ybAttrib"); + String ybBZCode = getString("ybBZCode"); + String ybBZName = getString("ybBZName"); String recipeJson = getString("recipeJson"); // 处方JSON集 [{ recipeId: item.id, recipeFee: item.amount }] - log.info("[医保-处方]上传明细下单 treatNum={}, recipeJson={}", treatNum, recipeJson); + log.info("[医保-处方]上传明细下单 treatNum={}, ybAttrib={}, ybBZCode={}, ybBZName={}, recipeJson={}", treatNum, ybAttrib, ybBZCode, ybBZName, recipeJson); if (treatNum == null || recipeJson == null) { return Result.error(ResultEnum.PARAM_IS_DEFECT); } - medicalInfo = new MedicalService().hisRxUploadDetails(merchantEnum, qrCode, openid, patientId, cardNo, realName, treatNum, recipeJson, totalFee, ybAttrib, ybBZCode, ybBZName); + medicalInfo = new MedicalService().hisRxUploadDetails(merchantEnum, qrCode, openid, treatNum, patientId, hisPatientId, cardNo, realName, totalFee, ybAttrib, ybBZCode, ybBZName, recipeJson); + break; + + case IN_HOSP: + log.info("[医保-住院结算]上传明细下单 treatNum={}", treatNum); + if (treatNum == null) { + return Result.error(ResultEnum.PARAM_IS_DEFECT); + } + medicalInfo = new MedicalService().hisInHospUploadDetails(merchantEnum, qrCode, openid, treatNum, patientId, hisPatientId, cardNo, realName); break; default: 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 adf37e1..c3a2212 100644 --- a/src/main/java/com/ynxbd/common/action/test/TestAction.java +++ b/src/main/java/com/ynxbd/common/action/test/TestAction.java @@ -8,6 +8,7 @@ import com.ynxbd.common.helper.common.SmsHelper; import com.ynxbd.common.result.Result; import com.ynxbd.common.result.ResultEnum; import com.ynxbd.common.result.ServiceException; +import com.ynxbd.wx.config.TZReserveConfig; import com.ynxbd.wx.config.WeChatConfig; import com.ynxbd.wx.wxfactory.WxMedHelper; import com.ynxbd.wx.wxfactory.WxPayHelper; @@ -54,8 +55,6 @@ public class TestAction extends BaseAction { } - - // @Action("a") // public String a() { // String sql = "select * from a limit 0, 100"; diff --git a/src/main/java/com/ynxbd/common/bean/Dept.java b/src/main/java/com/ynxbd/common/bean/Dept.java index 586b778..99dae5e 100644 --- a/src/main/java/com/ynxbd/common/bean/Dept.java +++ b/src/main/java/com/ynxbd/common/bean/Dept.java @@ -73,6 +73,10 @@ public class Dept implements Serializable { // 亚专科 private List children; + // 有号源 + public boolean hasSource() { + return sourceInfo != null && !sourceInfo.contains("无号"); + } } diff --git a/src/main/java/com/ynxbd/common/bean/Doctor.java b/src/main/java/com/ynxbd/common/bean/Doctor.java index 50823bb..efa5f02 100644 --- a/src/main/java/com/ynxbd/common/bean/Doctor.java +++ b/src/main/java/com/ynxbd/common/bean/Doctor.java @@ -21,6 +21,8 @@ public class Doctor implements Serializable { private Long id; // 科室代码 private String deptCode; + // 亚专科 + private String subDeptCode; // 科室名称 private String deptName; // 医师代码 diff --git a/src/main/java/com/ynxbd/common/bean/ai/AIDoctorSchedule.java b/src/main/java/com/ynxbd/common/bean/ai/AIDoctorSchedule.java index 8f5a059..404b768 100644 --- a/src/main/java/com/ynxbd/common/bean/ai/AIDoctorSchedule.java +++ b/src/main/java/com/ynxbd/common/bean/ai/AIDoctorSchedule.java @@ -27,6 +27,8 @@ public class AIDoctorSchedule { // 医生科室id,不允许为空 private String departmentId; + // 亚专科 + private String subDeptCode; // 科室名,不允许为空 private String deptName; diff --git a/src/main/java/com/ynxbd/common/bean/in_hosp/InHospitalList.java b/src/main/java/com/ynxbd/common/bean/in_hosp/InHospitalList.java index 1f78a2b..279b248 100644 --- a/src/main/java/com/ynxbd/common/bean/in_hosp/InHospitalList.java +++ b/src/main/java/com/ynxbd/common/bean/in_hosp/InHospitalList.java @@ -32,4 +32,11 @@ public class InHospitalList { private String inHospitalDate; private String outHospitalDate; private String hospitalDays; + // 医保============================= + private String perPay; // 预交金合计 + + private String sumFee; // 住院总费用 + + // 为1允许医保支付 + private Integer ybFlag; } diff --git a/src/main/java/com/ynxbd/common/bean/pay/MedInHosp.java b/src/main/java/com/ynxbd/common/bean/pay/MedInHosp.java new file mode 100644 index 0000000..bee82b3 --- /dev/null +++ b/src/main/java/com/ynxbd/common/bean/pay/MedInHosp.java @@ -0,0 +1,35 @@ +package com.ynxbd.common.bean.pay; + +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; + +@Setter +@Getter +@ToString +@NoArgsConstructor +public class MedInHosp { + private String userIDYBZF; + // 注意:大于0时需要微信收取费用,小于0时需要微信退费 + private String payOrRefundMoney; + // 预交金缴费单号 + private String prePayOrderId; + // PayOrdId + private String payOrdId; + // ordStas(医保6202返回) + private String ordStas; + // 费用总额(医保6202返回) + private String feeSumamt; + // 现金支付(医保6202返回) + private String ownPayAmt; + // 个人账户支出(医保6202返回) + private String psnAcctPay; + // 保基金支付(医保6202返回) + private String fundPay; + // 住院押金(医保6202返回) + private String deposit; + // 医保扩展数据(医保6202返回) + private String extData; + +} diff --git a/src/main/java/com/ynxbd/common/config/healthcard/HCAIGuidanceConfig.java b/src/main/java/com/ynxbd/common/config/healthcard/HCAIGuidanceConfig.java index 901f2ae..7bc61fe 100644 --- a/src/main/java/com/ynxbd/common/config/healthcard/HCAIGuidanceConfig.java +++ b/src/main/java/com/ynxbd/common/config/healthcard/HCAIGuidanceConfig.java @@ -43,6 +43,8 @@ public class HCAIGuidanceConfig { public final static String HOSP_TEL; + public final static String BRANCH_ID; + static { XmlConfigHelper config = new XmlConfigHelper().read("hc-config.xml", "ai_guidance"); IS_ENABLE = config.getBoolean("is_enable", false); @@ -53,8 +55,10 @@ public class HCAIGuidanceConfig { IS_SPLIT_TIME_REG = config.getBoolean("is_split_time_reg", true); PARTNER_SECRET = config.getString(IS_DEV ? "dev_partner_secret" : "partner_secret"); - PARTNER_ID = config.getString("partner_id"); + + BRANCH_ID = config.getString("branch_id"); + HOSP_ID = config.getString("hosp_id"); HOSP_NAME = config.getString("hosp_name"); HOSP_ADDRESS = config.getString("hosp_address", ""); @@ -63,7 +67,7 @@ public class HCAIGuidanceConfig { HOSP_TEL = config.getString("hosp_tel", ""); if (PARTNER_ID == null) { - log.error("[智能导诊]读取配置文件失败|功能未开启"); + log.error("[智能导诊]读取配置文件失败 | 功能未开启"); } } diff --git a/src/main/java/com/ynxbd/common/dao/InHospPayDao.java b/src/main/java/com/ynxbd/common/dao/InHospPayDao.java index 479c93f..a612f36 100644 --- a/src/main/java/com/ynxbd/common/dao/InHospPayDao.java +++ b/src/main/java/com/ynxbd/common/dao/InHospPayDao.java @@ -121,9 +121,9 @@ public class InHospPayDao { */ public boolean hasPayed(String outTradeNo) { String sql = "select * from pay_in_hosp where hisStatus= 0 and outTradeNo= ?"; - return DataBase.select(sql, PayInHosp.class, ps -> { + return !DataBase.select(sql, PayInHosp.class, ps -> { ps.setString(1, outTradeNo); - }).size() > 0; + }).isEmpty(); } /** @@ -132,7 +132,7 @@ public class InHospPayDao { * @param outTradeNo 订单号 * @return 是否已经发起支付 */ - public PayInHosp selectByTradeNo(String outTradeNo) { + public PayInHosp selectByOutTradeNo(String outTradeNo) { String sql = "select * from pay_in_hosp where hisStatus= -1 and outTradeNo= ?"; List list = DataBase.select(sql, PayInHosp.class, ps -> { ps.setString(1, outTradeNo); @@ -188,4 +188,56 @@ public class InHospPayDao { ps.setString(3, outTradeNo); }) > 0; } + + /** + * 更新挂号支付信息 + * + * @param outTradeNo 订单号 + * @param payDate 支付日期 + * @param payTime 支付时间 + * @param bankTransNo 交易流水号 + * @return 信息 + */ + public boolean updateMerPaidByOutTradeNo(String outTradeNo, String payDate, String payTime, String bankTransNo) { + String sql = "update pay_in_hosp set payStatus=?, payDate=?, payTime=? where outTradeNo=? and bankTransNo = ?"; + + return DataBase.update(sql, ps -> { + ps.setInt(1, 0); + ps.setString(2, payDate); + ps.setString(3, payTime); + ps.setString(4, outTradeNo); + ps.setString(5, bankTransNo); + }) > 0; + } + + /** + * [住院结算失败]更新HIS返回的错误信息 + * + * @param outTradeNo 订单号 + * @param hisStatus HIS调用失败code + * @param hisResult HIS失败原因 + * @return 是否记录成功 + */ + public boolean updateHisPaidFailByOutTradeNo(String outTradeNo, String hisStatus, String hisResult) { + String sql = "update pay_in_hosp set hisStatus=?, hisResult=? where outTradeNo=?"; + return DataBase.update(sql, ps -> { + ps.setString(1, hisStatus); + ps.setString(2, hisResult); + ps.setString(3, outTradeNo); + }) > 0; + } + + /** + * [住院结算成功] 更新信息 + * + * @param outTradeNo 订单号 + * @return 是否成功 + */ + public boolean updateHisPaidByOutTradeNo(String outTradeNo, String invoiceTransNo) { + String sql = "update pay_in_hosp set payStatus=0, hisStatus=0, invoiceTransNo=? where outTradeNo=? and hisStatus= -1"; + return DataBase.update(sql, ps -> { + ps.setString(1, invoiceTransNo); + ps.setString(2, outTradeNo); + }) > 0; + } } diff --git a/src/main/java/com/ynxbd/common/dao/his/HisInHospDao.java b/src/main/java/com/ynxbd/common/dao/his/HisInHospDao.java index aea7803..8143f23 100644 --- a/src/main/java/com/ynxbd/common/dao/his/HisInHospDao.java +++ b/src/main/java/com/ynxbd/common/dao/his/HisInHospDao.java @@ -5,6 +5,7 @@ import com.ynxbd.common.helper.common.DateHelper; import com.ynxbd.common.helper.his.HisEnum; import com.ynxbd.common.helper.his.HisHelper; import com.ynxbd.common.result.JsonResult; +import org.apache.commons.lang3.ObjectUtils; import java.math.BigDecimal; import java.util.HashMap; @@ -83,10 +84,11 @@ public class HisInHospDao { * @param patientId 患者id * @return 住院记录 */ - public JsonResult getAllHospList(String patientId) { - return HisHelper.getJsonResult(HisEnum.Query_InHospRecords, params -> { + public JsonResult queryOutPatientRecords(String patientId, String hisYBZF) { + return HisHelper.getJsonResult(HisEnum.Query_OutPatientRecords, params -> { params.put("PatientID", patientId); params.put("CallNo", HisHelper.WECHAT_CALL_NO); + params.put("YDZF", ObjectUtils.isEmpty(hisYBZF) ? "" : hisYBZF); // 1查询医保 }); } 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 1d7f988..2faaab9 100644 --- a/src/main/java/com/ynxbd/common/dao/his/HisMedDao.java +++ b/src/main/java/com/ynxbd/common/dao/his/HisMedDao.java @@ -134,7 +134,45 @@ public class HisMedDao { /** - * HIS医保结算 + * 住院结算 + */ + public static JsonResult inHospMedUploadDetails(MerchantEnum merchantEnum, String payAuthNo, String cardNo, String treatNum) { + return HisMedHelper.getJsonResult(merchantEnum, HisEnum.YDZF_UploadFeesInfo_ZY, params -> { + params.put("ZYNum", treatNum); + params.put("PayAuthNo", payAuthNo); + }); + } + + /** + * [住院]HIS医保结算 + * + * @param mdUserId 医保用户ID + * @param cashFee 现金 + * @param payDate 支付日期 + * @param payTime 支付实际 + * @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 HisMedHelper.getJsonResult(merchantEnum, HisEnum.YDZF_SaveToHIS_ZY, params -> { + params.put("PayDeviceID", "mobile"); + params.put("UserID_YBZF", mdUserId); + params.put("PayMoney", cashFee); + + params.put("PayDate", payDate); + params.put("PayTime", payTime); + params.put("TransNo", transNo); + params.put("BankTransNo", bankTransNo); + + params.put("PayWay", "4"); + params.put("Token", ""); + params.put("OpenId", openId); + }); + } + + + /** + * [挂号]HIS医保结算 * * @param mdUserId 医保用户ID * @param cashFee 现金 diff --git a/src/main/java/com/ynxbd/common/dao/his/HisRegisterDao.java b/src/main/java/com/ynxbd/common/dao/his/HisRegisterDao.java index 68f5668..82e3cb8 100644 --- a/src/main/java/com/ynxbd/common/dao/his/HisRegisterDao.java +++ b/src/main/java/com/ynxbd/common/dao/his/HisRegisterDao.java @@ -735,22 +735,23 @@ public class HisRegisterDao { /** * [分时段挂号]查询科室 * - * @param begDate 开始时间 - * @param endDate 结束时间 - * @return 科室列表 + * @param begDate 开始时间 + * @param endDate 结束时间 + * @param deptCode 科室编码-空为所有 + * @param canRegFlag [空或0为所有科室; 1:返回有号源的科室] */ - public List getTimeDeptList(String begDate, String endDate, String deptCode) { + public List getTimeDeptList(String begDate, String endDate, String deptCode, String canRegFlag) { List deptList = new ArrayList<>(); Map params = new HashMap<>(); params.put("DeptCode", deptCode);// 空为所有 params.put("RegistBegDate", begDate); params.put("RegistEndDate", endDate); - params.put("CanRegistFlag", "1"); // 1:返回有号源的科室 + params.put("CanRegistFlag", canRegFlag); // [空或0为所有科室; 1:返回有号源的科室] JsonResult JsonResult = HisHelper.getJsonResult(HisEnum.AP_Query_Dept_New, params); if (!JsonResult.success()) { - log.info("[科室-分时段]{}", JsonResult.getMessage()); + log.info("[分时段挂号]查询科室列表 {}", JsonResult.getMessage()); return deptList; } @@ -850,6 +851,7 @@ public class HisRegisterDao { doctorJson = doctorJsonList.getJSONObject(k); doctorItem = new Doctor(); doctorItem.setDeptCode(deptCode); + doctorItem.setSubDeptCode(subDeptCode); doctorItem.setDeptName(deptName); doctorItem.setDoctCode(ParamHelper.spaceFormat(doctorJson.getString("DoctCode"))); doctorItem.setDoctName(ParamHelper.spaceFormat(doctorJson.getString("DoctName"))); diff --git a/src/main/java/com/ynxbd/common/helper/common/XmlConfigHelper.java b/src/main/java/com/ynxbd/common/helper/common/XmlConfigHelper.java index 51e6139..ad4217b 100644 --- a/src/main/java/com/ynxbd/common/helper/common/XmlConfigHelper.java +++ b/src/main/java/com/ynxbd/common/helper/common/XmlConfigHelper.java @@ -1,6 +1,7 @@ package com.ynxbd.common.helper.common; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.ObjectUtils; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.io.SAXReader; @@ -62,7 +63,7 @@ public class XmlConfigHelper { } String val = root.elementTextTrim(rootNode); - return val == null ? defaultVal : Boolean.parseBoolean(val); + return ObjectUtils.isEmpty(val) ? defaultVal : Boolean.parseBoolean(val); } catch (Exception e) { e.printStackTrace(); return defaultVal; @@ -97,7 +98,7 @@ public class XmlConfigHelper { } String val = root.elementTextTrim(rootNode); - return val == null ? defaultVal : val; + return ObjectUtils.isEmpty(val) ? defaultVal : val; } catch (Exception e) { e.printStackTrace(); return null; @@ -114,7 +115,7 @@ public class XmlConfigHelper { public Integer getInteger(String rootNode) { try { String val = getString(rootNode, null); - return val == null ? null : Integer.parseInt(val.trim()); + return ObjectUtils.isEmpty(val)? null : Integer.parseInt(val.trim()); } catch (Exception e) { e.printStackTrace(); return null; diff --git a/src/main/java/com/ynxbd/common/helper/his/HisEnum.java b/src/main/java/com/ynxbd/common/helper/his/HisEnum.java index e930dc0..5de0c88 100644 --- a/src/main/java/com/ynxbd/common/helper/his/HisEnum.java +++ b/src/main/java/com/ynxbd/common/helper/his/HisEnum.java @@ -77,11 +77,14 @@ public enum HisEnum { Medical_QueryOrderStatus("[医保]查询医保结算信息", "40025", "YDZF_QueryOrderStatus", true), // 住院------------------------- + YDZF_UploadFeesInfo_ZY("[住院预交金][医保]6201上传费用明细 + 6202 支付下单", "4009", "YDZF_UploadFeesInfo_ZY", true), + YDZF_SaveToHIS_ZY("[住院预交金][医保]HIS结算(住院) 6301", "4010", "YDZF_SaveToHIS_ZY", true), + AP_Query_Prepay("[住院]查询预交金缴费记录(出院后)", "5003", "AP_Query_Prepay", true), AP_Query_InpatientFee("[住院]查询住院费用清单(住院中)", "5004", "AP_Query_InpatientFee", true), AP_Query_InpatientSummaryFee("[住院]查询住院日费用汇总(住院中)", "5006", "AP_Query_InpatientSummaryFee", true), - Query_InHospRecords("[住院]通过患者ID查询住院记录(出院后)", "1011", "UniversalInterface", true), + Query_OutPatientRecords("[住院]通过患者ID查询住院记录(出院后)", "1011", "UniversalInterface", true), Query_OutHospTreatFee("[住院]通过住院号查询费用明细(出院后)", "1012", "UniversalInterface", true), diff --git a/src/main/java/com/ynxbd/common/result/Result.java b/src/main/java/com/ynxbd/common/result/Result.java index c575e57..db61bef 100644 --- a/src/main/java/com/ynxbd/common/result/Result.java +++ b/src/main/java/com/ynxbd/common/result/Result.java @@ -171,6 +171,8 @@ public class Result extends BaseResult { if (serviceException.getResultEnum() != null) { status = serviceException.getResultEnum().status; } + } else { + log.error("[异常]", e); } return new Result(status, message); } diff --git a/src/main/java/com/ynxbd/common/service/AIGuidanceService.java b/src/main/java/com/ynxbd/common/service/AIGuidanceService.java index 564ca43..bbb8e78 100644 --- a/src/main/java/com/ynxbd/common/service/AIGuidanceService.java +++ b/src/main/java/com/ynxbd/common/service/AIGuidanceService.java @@ -19,14 +19,13 @@ import com.ynxbd.wx.config.WeChatConfig; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.ObjectUtils; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; @Slf4j public class AIGuidanceService { + private final String DEFAULT_IMAGE_PATH = "/wx/web/images/doctor/doctor_header_round.svg"; + /** * 查询医院详细信息 * @@ -45,8 +44,8 @@ public class AIGuidanceService { } Map map = new HashMap<>(); map.put("hosId", HCAIGuidanceConfig.HOSP_ID); - map.put("branchId", ""); // 如果有分院,则填写分院Id, 主院的分院Id为hosId本身 - map.put("hosName", HCAIGuidanceConfig.HOSP_NAME); // 如果是分院,则填写分院名称,否则填写主院名称 + map.put("branchId", HCAIGuidanceConfig.BRANCH_ID); // 如果有分院,则填写分院Id, 主院的分院Id为hosId本身 + map.put("hosName", HCAIGuidanceConfig.HOSP_NAME); // 如果是分院,则填写分院名称,否则填写主院名称 map.put("hosIntro", HCAIGuidanceConfig.HOSP_INTRO); map.put("hosLevel", HCAIGuidanceConfig.HOSP_LEVEL); map.put("hosAddress", HCAIGuidanceConfig.HOSP_ADDRESS); @@ -86,7 +85,7 @@ public class AIGuidanceService { List deptList; if (HCAIGuidanceConfig.IS_SPLIT_TIME_REG) { // 分时段 String curDate = DateHelper.getCurDate(); - deptList = new HisRegisterDao().getTimeDeptList(curDate, DateHelper.getMoveDate(curDate, 7), ""); + deptList = new HisRegisterDao().getTimeDeptList(curDate, DateHelper.getMoveDate(curDate, 7), "", "0"); } else { deptList = new RegService().queryHisRegDeptList(); } @@ -100,10 +99,10 @@ public class AIGuidanceService { if (addItem == null) { continue; } - dataList.add(addItem); children = dept.getChildren(); - if (children != null && !children.isEmpty()) { + boolean hasChildren = children != null && !children.isEmpty(); + if (hasChildren) { for (Dept childDept : children) { childDept.setSubDeptCode(childDept.getDeptCode()); childDept.setDeptCode(dept.getDeptCode()); @@ -113,6 +112,8 @@ public class AIGuidanceService { } dataList.add(addItem); } + } else { + dataList.add(addItem); } } return Result.success(ResultEnum.AI_SUCCESS, dataList); @@ -128,10 +129,10 @@ public class AIGuidanceService { if (!ObjectUtils.isEmpty(dept.getDeptAlias())) { deptName = dept.getDeptAlias(); } - item.setDeptId(dept.getDeptCode()); + item.setDeptId(dept.getDeptCode() + (isSubDept ? ("_" + dept.getSubDeptCode()) : "")); item.setDeptName(deptName); - item.setDeptIntro(dept.getDescription() == null ? "" : dept.getDescription()); // 科室简介 - item.setDeptAddr(dept.getAddress() == null ? "" : dept.getAddress()); // 科室地址 + item.setDeptIntro(dept.getDescription() == null ? "暂无内容" : dept.getDescription()); // 科室简介 + item.setDeptAddr(dept.getAddress() == null ? "暂无内容" : dept.getAddress()); // 科室地址 item.setLevel(2); item.setParentDeptId(isSubDept ? dept.getDeptCode() : ""); item.setFeatureFlag(0); // 是否特色科室 @@ -168,6 +169,15 @@ public class AIGuidanceService { return Result.error(ResultEnum.PARAM_IS_DEFECT); } + String subDeptCode = null; + if (deptId.contains("_")) { + String[] deptInfo = deptId.split("_"); + if (deptInfo.length == 2) { + deptId = deptInfo[0]; + subDeptCode = deptInfo[1]; + } + } + if (!HCAIGuidanceConfig.HOSP_ID.equals(hosId)) { // 医院id校验 log.warn("[智能导诊]医生列表查询-hosId不匹配"); return Result.success(ResultEnum.AI_SUCCESS, new ArrayList<>()); @@ -178,10 +188,10 @@ public class AIGuidanceService { List doctorList; if (HCAIGuidanceConfig.IS_SPLIT_TIME_REG) { // 分时段 String curDate = DateHelper.getCurDate(); - doctorList = hisRegisterDao.queryHisTimeRegDoctorList(deptId, branchId, curDate, DateHelper.getMoveDate(curDate, 7)); + doctorList = hisRegisterDao.queryHisTimeRegDoctorList(deptId, subDeptCode, curDate, DateHelper.getMoveDate(curDate, 7)); } else { // 注意:需先查询今日挂号 - doctorList = hisRegisterDao.queryHisRegTodayDoctorList(deptId, null); // 今日挂号 + doctorList = hisRegisterDao.queryHisRegTodayDoctorList(deptId, subDeptCode); // 今日挂号 List resDoctorList = hisRegisterDao.queryHisResRegDoctorList(deptId, null); // 预约挂号 for (Doctor doctor : resDoctorList) { Doctor findItem = doctorList.stream().filter(o -> o.getDoctCode().equals(doctor.getDoctCode())).findFirst().orElse(null); @@ -241,6 +251,11 @@ public class AIGuidanceService { item.setDoctorImage(domain + headImg); // 头像 } } + + if (ObjectUtils.isEmpty(doctor.getHeadImg())) { + item.setDoctorImage(domain + DEFAULT_IMAGE_PATH); + } + item.setExtraData("{}"); // 额外信息 item.setIsHTML(true); item.setDoctorMiniWxUrl(""); @@ -255,18 +270,18 @@ public class AIGuidanceService { try { //reg-doct-source?date=2026-03-02&deptCode=0501&doctCode=1477&subDeptCode=0001&deptName=%25E5%25A6%2587%25E7%25A7%2591-%25E5%25A6%2587%25E7%25A7%2591%25E6%2599%25AE%25E9%2580%259A%25E9%2597%25A8%25E8%25AF%258A&doctName=%25E6%2598%258E%25E6%25BB%25A1%25E6%25B1%259F&hospitalArea= - Map map = new HashMap<>(); - map.put("date", DateHelper.getCurDate()); - map.put("deptCode", deptCode); - map.put("deptName", URLHelper.encodeURL(deptName)); - map.put("doctName", URLHelper.encodeURL(doctor.getDoctName())); - map.put("doctCode", doctor.getDoctCode()); - map.put("subDeptCode", ""); - map.put("hospitalArea", ""); + Map urlMap = new HashMap<>(); + urlMap.put("date", DateHelper.getCurDate()); + urlMap.put("deptCode", deptCode); + urlMap.put("deptName", URLHelper.encodeURL(deptName)); + urlMap.put("doctName", URLHelper.encodeURL(doctor.getDoctName())); + urlMap.put("doctCode", doctor.getDoctCode()); + urlMap.put("subDeptCode", ""); + urlMap.put("hospitalArea", ""); if (HCAIGuidanceConfig.IS_SPLIT_TIME_REG) { - item.setDoctorUrl(webReqURL + "reg-reserve.html#/reg-doct-source" + URLHelper.mapParamsToUrl(map, true)); + item.setDoctorUrl(webReqURL + "reg-reserve.html#/reg-doct-source" + URLHelper.mapParamsToUrl(urlMap, true)); } else { - item.setDoctorUrl(webReqURL + "reg-reserve.html#/reg-doctor" + URLHelper.mapParamsToUrl(map, true)); + item.setDoctorUrl(webReqURL + "reg-reserve.html#/reg-doctor" + URLHelper.mapParamsToUrl(urlMap, true)); } } catch (Exception e) { log.error("[智能导诊]医生链接异常:{}", e.getMessage()); @@ -283,7 +298,7 @@ public class AIGuidanceService { * @param patientId 患者id * @return map */ - public Result getPatientCardList(String patientId, String hosId, String branchId) { + public Result getPatientCardList(String hosId, String branchId, String patientId) { List cardList = new ArrayList<>(); Map resp = new HashMap<>(); resp.put("hospitalId", HCAIGuidanceConfig.HOSP_ID); @@ -313,6 +328,12 @@ public class AIGuidanceService { item.setGender("女".equals(patient.getSex()) ? "女" : "男"); // 防空->默认男 item.setEcardNo(patientId); item.setBirthday(birthday); + + Date date = DateHelper.strToDate(patient.getBindDate(), DateHelper.DateEnum.yyyy_MM_dd_HH_mm_ss); + String bindTime = DateHelper.dateToStr(date, DateHelper.DateEnum.yyyy_MM_dd_HH_mm_ss); + + item.setLastBindTime(bindTime == null ? DateHelper.getCurDateTime() : bindTime); + item.setRelation(ObjectUtils.isEmpty(patient.getIdCardNo()) ? "2" : "6"); // 2子女; 6其他 cardList.add(item); resp.put("cardList", cardList); @@ -325,6 +346,7 @@ public class AIGuidanceService { */ public Result getDoctorSchedule(String hosId, String branchId, String doctorsJson) { Map map = new HashMap<>(); + map.put("status", "OK"); if (!HCAIGuidanceConfig.HOSP_ID.equals(hosId)) { // 医院id校验 log.warn("[智能导诊]获取医生号源排班信息-hosId不匹配"); return Result.success(ResultEnum.AI_SUCCESS, map); @@ -337,13 +359,29 @@ public class AIGuidanceService { } List deptList = new ArrayList<>(); + for (AIDoctorSchedule item : doctorScheduleList) { String docId = item.getDocId(); String departmentId = item.getDepartmentId(); - AIDoctorSchedule findDept = deptList.stream().filter(o -> o.getDepartmentId().equals(departmentId)).findFirst().orElse(null); + String subDeptCode = null; + if (departmentId.contains("_")) { + String[] deptInfo = departmentId.split("_"); + if (deptInfo.length == 2) { + departmentId = deptInfo[0]; + subDeptCode = deptInfo[1]; + } + } + + + String finalDepartmentId = departmentId; + AIDoctorSchedule findDept = deptList.stream().filter(o -> o.getDepartmentId().equals(finalDepartmentId)).findFirst().orElse(null); + if ("0".equals(docId)) { + docId = "*"; // 任意医生 + } if (findDept == null) { AIDoctorSchedule dept = new AIDoctorSchedule(); dept.setDepartmentId(departmentId); + dept.setSubDeptCode(subDeptCode); Map doctorIds = new HashMap<>(); doctorIds.put(docId, docId); dept.setDoctorIds(doctorIds); @@ -365,6 +403,7 @@ public class AIGuidanceService { HisRegisterDao hisRegisterDao = new HisRegisterDao(); for (AIDoctorSchedule deptItem : deptList) { String departmentId = deptItem.getDepartmentId(); + String subDeptCode = deptItem.getSubDeptCode(); if (ObjectUtils.isEmpty(departmentId)) { continue; } @@ -373,10 +412,9 @@ public class AIGuidanceService { continue; } - if (HCAIGuidanceConfig.IS_SPLIT_TIME_REG) { // 分时段 String curDate = DateHelper.getCurDate(); - hisDoctorList = hisRegisterDao.queryHisTimeRegDoctorList(departmentId, branchId, curDate, DateHelper.getMoveDate(curDate, 7)); + hisDoctorList = hisRegisterDao.queryHisTimeRegDoctorList(departmentId, subDeptCode, curDate, DateHelper.getMoveDate(curDate, 7)); } else { hisDoctorList = hisRegisterDao.queryHisRegTodayDoctorList(departmentId, null); List resDoctorList = hisRegisterDao.queryHisResRegDoctorList(departmentId, null); @@ -391,7 +429,7 @@ public class AIGuidanceService { for (Map.Entry item : doctorIds.entrySet()) { String docId = item.getKey(); Doctor findRegDoctorItem = regDoctorList.stream().filter(o -> o.getDoctCode().equals(docId)).findFirst().orElse(null); - if (findRegDoctorItem != null) { + if (findRegDoctorItem != null) { // 已存在 continue; } Doctor findHisDoctorItem = hisDoctorList.stream().filter(o -> o.getDoctCode().equals(docId)).findFirst().orElse(null); @@ -410,6 +448,7 @@ public class AIGuidanceService { AIDoctorSchedule item; String headImg; for (Doctor doctor : regDoctorList) { + String subDeptCode = doctor.getSubDeptCode(); String deptCode = doctor.getDeptCode(); String deptName = doctor.getDeptName(); String doctCode = doctor.getDoctCode(); @@ -419,7 +458,7 @@ public class AIGuidanceService { item.setHosId(HCAIGuidanceConfig.HOSP_ID); item.setBranchId(branchId); // - item.setDocId(doctCode); + item.setDocId("*".equals(doctCode) ? "0" : doctCode); item.setName(doctName); item.setDepartmentId(deptCode); item.setDeptName(deptName); @@ -433,24 +472,30 @@ public class AIGuidanceService { } } + if (ObjectUtils.isEmpty(doctor.getHeadImg())) { + item.setIconURL(domain + DEFAULT_IMAGE_PATH); + } - map.put("date", curDate); - map.put("deptCode", deptCode); - map.put("deptName", URLHelper.encodeURL(deptName)); - map.put("doctName", URLHelper.encodeURL(doctName)); - map.put("doctCode", doctCode); - map.put("subDeptCode", ""); - map.put("hospitalArea", ""); + Map urlMap = new HashMap<>(); + urlMap.put("date", curDate); + urlMap.put("deptCode", deptCode); + urlMap.put("deptName", URLHelper.encodeURL(deptName)); + urlMap.put("doctName", URLHelper.encodeURL(doctName)); + urlMap.put("doctCode", doctCode); + urlMap.put("subDeptCode", ObjectUtils.isEmpty(subDeptCode) ? "" : subDeptCode); + urlMap.put("hospitalArea", ""); if (HCAIGuidanceConfig.IS_SPLIT_TIME_REG) { - item.setUrl(webReqURL + "reg-reserve.html#/reg-doct-source" + URLHelper.mapParamsToUrl(map, true)); + item.setUrl(webReqURL + "reg-reserve.html#/reg-doct-source" + URLHelper.mapParamsToUrl(urlMap, true)); } else { - item.setUrl(webReqURL + "reg-reserve.html#/reg-doctor" + URLHelper.mapParamsToUrl(map, true)); + item.setUrl(webReqURL + "reg-reserve.html#/reg-doctor" + URLHelper.mapParamsToUrl(urlMap, true)); } item.setSchedule(queryDoctorSchedule(deptCode, null, doctCode)); doctors.add(item); } - return Result.success(ResultEnum.AI_SUCCESS, doctors); + + map.put("doctors", doctors); + return Result.respJson(map); } public List queryDoctorSchedule(String deptCode, String subDeptCode, String doctCode) { @@ -465,9 +510,11 @@ public class AIGuidanceService { AISchedule addItem = new AISchedule(); addItem.setDate(regDate); addItem.setAvailable(1); + addItem.setTotal(1); addItem.setType("普通"); schedules.add(addItem); } else { + findItem.setTotal(findItem.getAvailable() + 1); findItem.setAvailable(findItem.getAvailable() + 1); } } @@ -484,39 +531,47 @@ public class AIGuidanceService { List dataList = new ArrayList<>(); String webReqURL = WeChatConfig.getWebReqURL(true); - dataList.add(new HCHospitalHome(){{ + dataList.add(new HCHospitalHome() {{ setScene("门诊"); setServiceName("预约挂号"); setH5Url(webReqURL + "reg-reserve.html"); setRemark("线上挂号,线下就诊"); setWxAppId(""); + setWxAppPath(""); + setWxAppOriginalId(""); }}); - dataList.add(new HCHospitalHome(){{ + dataList.add(new HCHospitalHome() {{ setScene("通用"); setServiceName("微官网"); setH5Url(webReqURL + "app.html"); setRemark("医院官网,功能分类展示"); setWxAppId(""); + setWxAppPath(""); + setWxAppOriginalId(""); }}); - dataList.add(new HCHospitalHome(){{ + dataList.add(new HCHospitalHome() {{ setScene("门诊"); setServiceName("诊间支付"); setH5Url(webReqURL + "pay-info.html"); setRemark("处方和申请单线上缴费"); setWxAppId(""); + setWxAppPath(""); + setWxAppOriginalId(""); }}); - dataList.add(new HCHospitalHome(){{ + dataList.add(new HCHospitalHome() {{ setScene("报告"); setServiceName("报告查询"); setH5Url(webReqURL + "all-result.html"); setRemark("检验、检查报告查询"); setWxAppId(""); + setWxAppPath(""); + setWxAppOriginalId(""); }}); map.put("dataList", dataList); - return Result.success(map); + return Result.success(ResultEnum.AI_SUCCESS, map); } } diff --git a/src/main/java/com/ynxbd/common/service/InHospService.java b/src/main/java/com/ynxbd/common/service/InHospService.java index 4ef99a9..0f562c7 100644 --- a/src/main/java/com/ynxbd/common/service/InHospService.java +++ b/src/main/java/com/ynxbd/common/service/InHospService.java @@ -2,6 +2,7 @@ package com.ynxbd.common.service; import com.ynxbd.common.action.pay.PEnum; import com.ynxbd.common.bean.enums.MerchantEnum; +import com.ynxbd.common.bean.in_hosp.InHospitalList; import com.ynxbd.common.bean.pay.Order; import com.ynxbd.common.bean.pay.PayInHosp; import com.ynxbd.common.dao.InHospPayDao; @@ -15,6 +16,8 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.ObjectUtils; import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; /** * 住院 @@ -61,7 +64,7 @@ public class InHospService { log.error("{} [住院预交金]更改订单状态失败 outTradeNo={}, bankTransNo={}", merchantEnum.NAME, outTradeNo, bankTransNo); } - PayInHosp inHosp = inHospPayDao.selectByTradeNo(outTradeNo); + PayInHosp inHosp = inHospPayDao.selectByOutTradeNo(outTradeNo); if (inHosp == null) { log.info("{} [住院]没有查询到订单:outTradeNo={}, bankTransNo={}", merchantEnum.NAME, outTradeNo, bankTransNo); return false; @@ -162,4 +165,37 @@ public class InHospService { public boolean updateMicroOrderState(String outTradeNo, String bankTransNo, String openid) { return new InHospPayDao().updateMicroOrderState(outTradeNo, bankTransNo, openid); } + + // 查询HIS出院记录 + public List queryHisOutPatientRecords(String patientId) throws ServiceException { + JsonResult resp = new HisInHospDao().queryOutPatientRecords(patientId, null); // 非医保 + if (!resp.success()) { + throw new ServiceException(resp.getMessage()); + } + List inHospList = resp.getDataMapList(InHospitalList.class, "Items", "Item"); + + JsonResult medResp = new HisInHospDao().queryOutPatientRecords(patientId, "1"); // 医保 + if (!medResp.success()) { + throw new ServiceException(medResp.getMessage()); + } + List medInHospList = medResp.getDataMapList(InHospitalList.class, "Items", "Item"); + + List dataList = new ArrayList<>(); + for (InHospitalList item : medInHospList) { + item.setYbFlag(1); + dataList.add(item); + } + + for (InHospitalList item : inHospList) { + InHospitalList findItem = dataList.stream().filter(o -> o.getZyNum().equals(item.getZyNum())).findFirst().orElse(null); + if (findItem == null) { + dataList.add(item); + } + } + return dataList; + } + + public PayInHosp queryByOutTradeNo(String outTradeNo) { + return new InHospPayDao().selectByOutTradeNo(outTradeNo); + } } diff --git a/src/main/java/com/ynxbd/common/service/MedicalService.java b/src/main/java/com/ynxbd/common/service/MedicalService.java index f428778..38f7ac0 100644 --- a/src/main/java/com/ynxbd/common/service/MedicalService.java +++ b/src/main/java/com/ynxbd/common/service/MedicalService.java @@ -7,10 +7,12 @@ import com.ynxbd.ali.helper.AliMedHelper; import com.ynxbd.common.action.pay.PEnum; import com.ynxbd.common.bean.enums.MerchantEnum; import com.ynxbd.common.bean.pay.*; +import com.ynxbd.common.dao.InHospPayDao; import com.ynxbd.common.dao.RecipeDao; import com.ynxbd.common.dao.RegisterDao; import com.ynxbd.common.dao.his.HisMedDao; import com.ynxbd.common.helper.common.JsonHelper; +import com.ynxbd.common.helper.common.ParamHelper; import com.ynxbd.common.result.JsonResult; import com.ynxbd.common.result.Result; import com.ynxbd.common.result.ResultEnum; @@ -51,6 +53,7 @@ public class MedicalService { break; case IN_HOSP: + inHospPaidNotify(merchantEnum, outTradeNo, bankTransNo, payDate, payTime, openid, payInfo); break; default: @@ -74,18 +77,21 @@ public class MedicalService { return payAuthNo; } - /** - * [医保]挂号上报 + * [HIS医保上传明细]挂号上报 * - * @param qrCode 授权码 - * @param openid openid - * @param patientId 患者id - * @param cardNo 卡号 - * @param realName 真实姓名 - * @param reg 挂号信息 + * @param merchantEnum 支付类型 + * @param qrCode 授权码 + * @param openid openid + * @param treatNum 门诊号 + * @param patientId 患者id | 医共体id + * @param hisPatientId HIS患者id + * @param cardNo 证件号 + * @param realName 真实姓名 + * @param reg 挂号信息 + * @param isSplitTime 是否为分时段 */ - public MedicalInfo hisRegMedUploadDetails(MerchantEnum merchantEnum, String qrCode, String openid, String patientId, String cardNo, String realName, String hisPatientId, Register reg, Boolean isSplitTime) throws ServiceException { + public MedicalInfo hisRegMedUploadDetails(MerchantEnum merchantEnum, String qrCode, String openid, String treatNum, String patientId, String hisPatientId, String cardNo, String realName, Register reg, Boolean isSplitTime) throws ServiceException { // 以传递的数据为主 reg.setOpenid(openid); reg.setPatientId(patientId); @@ -93,24 +99,31 @@ public class MedicalService { reg.setIdCardNo(cardNo); String payAuthNo = getPayAuthNo(merchantEnum, openid, qrCode, cardNo, realName); - log.info("[医保]上传明细:patientId={}, cardNo={}, realName={}, reg={}", patientId, cardNo, realName, reg); + log.info("{}[HIS医保上传明细][挂号]patientId={}, cardNo={}, realName={}, reg={}", merchantEnum.NAME, patientId, ParamHelper.hideIdCardNo(cardNo), realName, reg); JsonResult result = HisMedDao.regMedUploadDetails(merchantEnum, reg, payAuthNo, cardNo, isSplitTime); return hisMedPlaceOrder(merchantEnum, payAuthNo, result); } + + /** - * [医保]处方上报 + * [HIS医保上传明细]处方上报 * - * @param qrCode 授权码 - * @param openid openid - * @param patientId 患者id - * @param cardNo 卡号 - * @param realName 真实姓名 - * @param treatNum 门诊号 - * @param recipeJson 处方json - * @param totalFee 订单金额 + * @param merchantEnum 支付类型 + * @param qrCode 授权码 + * @param openid openid + * @param treatNum 门诊号 + * @param patientId 患者id | 医共体id + * @param hisPatientId HIS患者id + * @param cardNo 证件号 + * @param realName 真实姓名 + * @param totalFee 订单金额 + * @param ybAttrib 医保类型 + * @param ybBZCode 病种编码 + * @param ybBZName 病种名称 + * @param recipeJson 处方json */ - public MedicalInfo hisRxUploadDetails(MerchantEnum merchantEnum, String qrCode, String openid, String patientId, String cardNo, String realName, String treatNum, String recipeJson, BigDecimal totalFee, String ybAttrib, String ybBZCode, String ybBZName) throws ServiceException { + public MedicalInfo hisRxUploadDetails(MerchantEnum merchantEnum, String qrCode, String openid, String treatNum, String patientId, String hisPatientId, String cardNo, String realName, BigDecimal totalFee, String ybAttrib, String ybBZCode, String ybBZName, String recipeJson) throws ServiceException { String payAuthNo; if (merchantEnum == MerchantEnum.ALI_MEDICAL) { // 支付宝 payAuthNo = qrCode; @@ -120,12 +133,27 @@ public class MedicalService { } // [验收]测试报告内容[2] - log.info("{}[HIS医保上传明细] req={patientId:\"{}\", treatNum:\"{}\", totalFee:\"{}\", cardNo:\"{}\", recipeJson:\"{}\"}", merchantEnum.NAME, patientId, treatNum, totalFee, cardNo, recipeJson); + log.info("{}[HIS医保上传明细][处方] req={patientId:\"{}\", treatNum:\"{}\", totalFee:\"{}\", cardNo:\"{}\", recipeJson:\"{}\"}", merchantEnum.NAME, patientId, treatNum, totalFee, cardNo, recipeJson); JsonResult result = HisMedDao.rxMedUploadDetails(merchantEnum, payAuthNo, cardNo, openid, patientId, treatNum, recipeJson, totalFee, ybAttrib, ybBZCode, ybBZName); return hisMedPlaceOrder(merchantEnum, payAuthNo, result); } + public MedicalInfo hisInHospUploadDetails(MerchantEnum merchantEnum, String qrCode, String openid, String treatNum, String patientId, String hisPatientId, String cardNo, String realName) throws ServiceException { + String payAuthNo; + if (merchantEnum == MerchantEnum.ALI_MEDICAL) { // 支付宝 + payAuthNo = qrCode; + } else { + MedicalUserInfo userInfo = WxMedHelper.getUserInfo(openid, qrCode, cardNo, realName); + payAuthNo = userInfo.getPayAuthNo(); + } + + log.info("{}[HIS医保上传明细][住院结算] treatNum={}, patientId={}, cardNo={}, realName={}", merchantEnum.NAME, treatNum, patientId, ParamHelper.hideIdCardNo(cardNo), realName); + JsonResult result = HisMedDao.inHospMedUploadDetails(merchantEnum, payAuthNo, cardNo, treatNum); + return hisMedPlaceOrder(merchantEnum, payAuthNo, result); + } + + /** * [医保]his下单 * @@ -467,9 +495,7 @@ public class MedicalService { log.info("{} [挂号]数据库中未找到订单 outTradeNo={}, bankTransNo={}", merchantEnum.NAME, outTradeNo, bankTransNo); return true; } - Integer hisStatus = reg.getHisStatus(); - Integer payStatus = reg.getPayStatus(); - if (payStatus == null || hisStatus == null || payStatus == 0 || hisStatus == 0) { // 状态不明确 + if (reg.hasPayStatusPaid() || reg.hasNoticeStatusPaid()) { // 订单已支付 || HIS已收到通知 log.info("{}[医保][挂号]订单已支付 outTradeNo={}, bankTransNo={}", merchantEnum.NAME, outTradeNo, bankTransNo); return true; } @@ -543,7 +569,98 @@ public class MedicalService { log.info("[医保][挂号]HIS结算成功 outTradeNo={}, bankTransNo={}, invoiceTransNo={}", outTradeNo, bankTransNo, invoiceTransNo); // 成功处理 if (!regDao.updateHisPaidByOutTradeNo(outTradeNo, invoiceTransNo)) { - log.error("[医保][挂号]修改成功数据失败"); + log.error("[医保][挂号]HIS结算成功-DB修改数据库状态失败"); + } + return true; + } + + + /** + * [医保]住院结算回调通知 + * + * @param merchantEnum 类型 + * @param outTradeNo 订单号 + * @param bankTransNo 交易流水(医保) + * @param payDate 支付日期 + * @param payTime 支付时间 + * @param openid openid + * @param payInfo 支付信息 + */ + public boolean inHospPaidNotify(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; + } + PayInHosp order = new InHospService().queryByOutTradeNo(outTradeNo); + if (order == null) { + log.info("{} [医保][住院结算]数据库中未找到订单 outTradeNo={}, bankTransNo={}", merchantEnum.NAME, outTradeNo, bankTransNo); + return true; + } + if (order.hasPayStatusPaid() || order.hasNoticeStatusPaid()) { // 订单已支付 || HIS已收到通知 + log.info("{}[医保][住院结算]订单已支付 outTradeNo={}, bankTransNo={}", merchantEnum.NAME, outTradeNo, bankTransNo); + return true; + } + + InHospPayDao inHospPayDao = new InHospPayDao(); + if (!new InHospPayDao().updateMerPaidByOutTradeNo(outTradeNo, payDate, payTime, bankTransNo)) { + log.info("[医保][住院结算]修改订单支付状态 outTradeNo={}, bankTransNo={}", outTradeNo, bankTransNo); + return false; + } + +// order.setPayDate(payDate); +// order.setPayTime(payTime); + order.setBankTransNo(bankTransNo); + + String mdUserId = order.getMdUserId(); + String tradeNo = order.getTradeNo(); // 医保订单号 + String chrgBchno = order.getChrgBchno(); + BigDecimal cashFee = order.getPayMoney(); // 现金 + BigDecimal acctFee = order.getAcctFee(); // 个账 + if (mdUserId == null || tradeNo == null || chrgBchno == null || cashFee == null || acctFee == null) { + log.info("[医保][住院结算]HIS结算参数缺失 outTradeNo={}, bankTransNo={}, tradeNo={}, mdUserId={}, chrgBchno={}", outTradeNo, bankTransNo, tradeNo, mdUserId, chrgBchno); + return false; + } +// + JsonResult jsonResult = HisMedDao.inHospMedPay(merchantEnum, mdUserId, payDate, payTime, tradeNo, bankTransNo, cashFee, openid); + if (!jsonResult.success()) { + String respCode = jsonResult.getCode(); + String respMessage = jsonResult.getMessage(); + log.info("[医保][住院结算]HIS结算失败 outTradeNo={}, bankTransNo={}, respCode={}, respMessage={}", outTradeNo, bankTransNo, respCode, respMessage); + + if (!inHospPayDao.updateHisPaidFailByOutTradeNo(outTradeNo, respCode, respMessage)) { + log.info("[医保][住院结算]更新HIS缴费失败信息异常 outTradeNo={}, code={}, message={}", outTradeNo, respCode, respMessage); + } + + if (jsonResult.isTimeout()) { // 调用超时-不退费 + log.info("[医保][住院结算]HIS结算调用超时 outTradeNo={}, bankTransNo={}, tradeNo={}, mdUserId={}", outTradeNo, bankTransNo, tradeNo, mdUserId); + return false; + } + + if (respMessage == null || !respMessage.contains("(医保结算部分已回退)")) { + log.info("[医保][住院结算]HIS医保部分未退费成功,禁止现金部分退费 outTradeNo={}, bankTransNo={}, tradeNo={}", outTradeNo, bankTransNo, tradeNo); + return false; + } + + 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); +// } + return false; + } + + if (!WxMedConfig.IS_AUTO_REFUND) { + log.info("[医保][住院结算]现金自动退费功能未开启 outTradeNo={}, bankTransNo={}, tradeNo={}", outTradeNo, bankTransNo, tradeNo); + return false; + } + return false; + } + + String invoiceTransNo = jsonResult.getDataMapString("InvoiceTransNo"); + + log.info("[医保][住院结算]HIS结算成功 outTradeNo={}, bankTransNo={}, invoiceTransNo={}", outTradeNo, bankTransNo, invoiceTransNo); + if (!inHospPayDao.updateHisPaidByOutTradeNo(outTradeNo, invoiceTransNo)) { + log.error("[医保][住院结算]HIS结算成功-DB修改数据库状态失败"); } return true; } @@ -832,4 +949,6 @@ public class MedicalService { public MedicalInfo test() throws ServiceException { throw new ServiceException("[医保授权]失败:" + "测试", false); } + + } diff --git a/src/main/java/com/ynxbd/common/service/RegService.java b/src/main/java/com/ynxbd/common/service/RegService.java index b91952c..7a3e08d 100644 --- a/src/main/java/com/ynxbd/common/service/RegService.java +++ b/src/main/java/com/ynxbd/common/service/RegService.java @@ -441,11 +441,16 @@ public class RegService { return result; } + /** + * 今日挂号[取消预约] + * + * @param hisTransNo HIS流水号 + */ public Result refundRegister(String hisTransNo) { log.info("[今日挂号][取消预约]hisTransNo={}", hisTransNo); if (hisTransNo == null) { - log.info("[今日挂号][取消预约]参数缺失 hisTransNo=null"); + log.info("[今日挂号][取消预约]hisTransNo为空"); return Result.error(ResultEnum.PARAM_IS_DEFECT); } diff --git a/src/main/resources/hc-config.xml b/src/main/resources/hc-config.xml index 1425b1c..b32b842 100644 --- a/src/main/resources/hc-config.xml +++ b/src/main/resources/hc-config.xml @@ -20,18 +20,20 @@ true - e4a05c13301f2f6a8b07b3de872dfe2d + 34edf7cd14e646ae9c1bbca791b7b685 - e5322dfd9bfab939851319812c30f9f1 + b26188e6142d43b88f01453853d52a0a - e5322dfd9bfab939851319812c30f9f1 + b26188e6142d43b88f01453853d52a0a - 800002580 + 800002723 + + 31737 红河州第一人民医院 - - - - + 云南省滇南中心医院(红河州第一人民医院)由创建于1950年的红河州第一人民医院和始建于1911年的原红河州第四人民医院于2019年整合而成,是一所集医疗、教学、科研、预防、保健、急救、培训、健康教育为一体的三级甲等综合医院。 + 三级甲等 + 云南省红河州个旧市大屯街道锡缘路1号 + 0873-3720200 diff --git a/src/main/resources/webservice.properties b/src/main/resources/webservice.properties index d20bfa9..a602f4a 100644 --- a/src/main/resources/webservice.properties +++ b/src/main/resources/webservice.properties @@ -1 +1 @@ -# \u5F00\u542F\u5904\u65B9\u9884\u7ED3\u7B97\uFF08\u7B2C2\u5F00\u5173\uFF09\uFF08\u6CE8\u610F\u8BE5\u914D\u7F6E\u9700\u8054\u7CFBhis\u5F00\u53D1\u8005\u786E\u8BA4\u652F\u6301\u624D\u80FD\u5F00\u542F\uFF0C\u5426\u5219\u5B58\u5728\u98CE\u9669\uFF01\uFF09 his.is_recipe_prepay=false # \u672C\u5730 #his.url=127.0.0.1:8888 # HIS\u662F\u5426\u5F00\u542F\u652F\u4ED8\u5B9D\u5206\u5F00\u5BF9\u8D26 his.is_ali_mer=false # \u662F\u5426\u5F3A\u5236\u6253\u5370webservice\u7684xml\u8FD4\u56DE\u6570\u636E his.is_log_resp=false # \u5DDE\u50A3\u533B\u4F7F\u7528 his.is_req_cdata=false # \u662F\u5426\u4F20\u9012openid\u7ED9his\u63A8\u9001\u6D88\u606F his.is_push_msg=false #------------------------------- # \u6D4B\u8BD5\u73AF\u5883 his.dev_url=200.200.200.105:8888 # \u533B\u4FDD=========================== # \u65E7\u914D\u7F6E his.md_url=127.0.0.1:7777 # \u5FAE\u4FE1\u533B\u4FDD his.wx_med_url=10.20.10.7:7885 # \u652F\u4ED8\u5B9D\u533B\u4FDD his.ali_med_url=10.20.10.7:7885 # \u6D4B\u8BD5============================================================ # \u516C\u53F8\u6D4B\u8BD5 #his.url=192.168.12.10:8888 # \u77F3\u6797\u53BF\u533B\u9662 his.url=200.200.200.105:8888 # \u5FB7\u5B8F\u4E2D\u533B #his.url=200.200.200.60:9999 # \u7EA2\u6CB3\u5DDE\u533B\u9662 #his.url=10.20.10.6:8888 # \u8292\u5E02\u5987\u5E7C #his.url=192.168.11.7:8888 # \u5B81\u8497\u5987\u5E7C #his.url=172.19.3.15:8888 # \u5B81\u8497\u53BF\u533B\u9662 #his.url=192.168.10.8:8888 # \u516C\u53F8\u6D4B\u8BD5 #his.url=192.168.12.39:8888 #\u666F\u6D2A\u4E2D\u50A3\u533B #his.url=192.168.197.217:8888 # \u516C\u53F8\u6D4B\u8BD5 #his.url=192.168.12.10:8888 # \u7EA2\u6CB3 #his.url=10.20.10.6:8888 # \u7EA2\u6CB3\u533B\u4FDD #his.url=10.20.10.6:8888 #his.url=192.168.12.10:8888 #his.md_url=192.168.1.128:7885 #his.dev_url=10.20.10.6:9988 # \u6C38\u80DC #his.url=200.200.200.20:8888 # \u5FB7\u5B8F\u4E2D\u533B #his.url=200.200.200.60:8888 # \u534E\u576A #his.url=192.168.1.115:8888 # \u8499\u81EA\u4E2D\u533B #his.url=192.168.0.228:8888 # \u7389\u9F99 #his.url=192.168.0.17:8888 # #his.url=172.16.10.15:8888 # \u7984\u529D\u949F\u7231 #his.url=200.200.200.5:8888 # \u8499\u81EA\u5E02\u4EBA\u6C11\u533B\u9662 #his.url=200.200.200.174:8080 # \u5143\u8C0B #his.url=200.200.200.29:8888 # \u5143\u8C0B\u533B\u4FDD #his.dev_url=200.200.200.36:9999 # \u8292\u5E02 #his.url=192.168.100.8:8888 # \u7EA2\u6CB3\u5987\u5E7C\u4FDD\u5065\u9662 #his.url=192.168.1.204:8888 # \u8292\u5E02\u5987\u5E7C #his.url=192.168.11.7:8888 # #his.url=10.10.11.23:8888 # \u77F3\u6797 #his.url=192.168.10.10:8888 # \u5BCC\u6C11 #his.url=200.200.201.27:8888 # \u897F\u53CC\u7248\u7EB3 #his.url=10.10.11.23:8888 #wx.password=ynxbd@6910 \ No newline at end of file +# \u5F00\u542F\u5904\u65B9\u9884\u7ED3\u7B97\uFF08\u7B2C2\u5F00\u5173\uFF09\uFF08\u6CE8\u610F\u8BE5\u914D\u7F6E\u9700\u8054\u7CFBhis\u5F00\u53D1\u8005\u786E\u8BA4\u652F\u6301\u624D\u80FD\u5F00\u542F\uFF0C\u5426\u5219\u5B58\u5728\u98CE\u9669\uFF01\uFF09 his.is_recipe_prepay=false # \u672C\u5730 #his.url=127.0.0.1:8888 # HIS\u662F\u5426\u5F00\u542F\u652F\u4ED8\u5B9D\u5206\u5F00\u5BF9\u8D26 his.is_ali_mer=false # \u662F\u5426\u5F3A\u5236\u6253\u5370webservice\u7684xml\u8FD4\u56DE\u6570\u636E his.is_log_resp=true # \u5DDE\u50A3\u533B\u4F7F\u7528 his.is_req_cdata=false # \u662F\u5426\u4F20\u9012openid\u7ED9his\u63A8\u9001\u6D88\u606F his.is_push_msg=false #------------------------------- # \u6D4B\u8BD5\u73AF\u5883 his.dev_url=200.200.200.105:8888 # \u533B\u4FDD=========================== # \u65E7\u914D\u7F6E his.md_url=127.0.0.1:7777 # \u5FAE\u4FE1\u533B\u4FDD his.wx_med_url=10.20.10.7:7885 # \u652F\u4ED8\u5B9D\u533B\u4FDD his.ali_med_url=10.20.10.7:7885 # \u6D4B\u8BD5============================================================ # \u516C\u53F8\u6D4B\u8BD5 #his.url=192.168.12.10:8888 # \u77F3\u6797\u53BF\u533B\u9662 #his.url=200.200.200.105:8888 # \u5FB7\u5B8F\u4E2D\u533B #his.url=200.200.200.60:9999 # \u7EA2\u6CB3\u5DDE\u533B\u9662 his.url=10.20.10.6:8888 # \u8292\u5E02\u5987\u5E7C #his.url=192.168.11.7:8888 # \u5B81\u8497\u5987\u5E7C #his.url=172.19.3.15:8888 # \u5B81\u8497\u53BF\u533B\u9662 #his.url=192.168.10.8:8888 # \u516C\u53F8\u6D4B\u8BD5 #his.url=192.168.12.39:8888 #\u666F\u6D2A\u4E2D\u50A3\u533B #his.url=192.168.197.217:8888 # \u516C\u53F8\u6D4B\u8BD5 #his.url=192.168.12.10:8888 # \u7EA2\u6CB3 #his.url=10.20.10.6:8888 # \u7EA2\u6CB3\u533B\u4FDD #his.url=10.20.10.6:8888 #his.url=192.168.12.10:8888 #his.md_url=192.168.1.128:7885 #his.dev_url=10.20.10.6:9988 # \u6C38\u80DC #his.url=200.200.200.20:8888 # \u5FB7\u5B8F\u4E2D\u533B #his.url=200.200.200.60:8888 # \u534E\u576A #his.url=192.168.1.115:8888 # \u8499\u81EA\u4E2D\u533B #his.url=192.168.0.228:8888 # \u7389\u9F99 #his.url=192.168.0.17:8888 # #his.url=172.16.10.15:8888 # \u7984\u529D\u949F\u7231 #his.url=200.200.200.5:8888 # \u8499\u81EA\u5E02\u4EBA\u6C11\u533B\u9662 #his.url=200.200.200.174:8080 # \u5143\u8C0B #his.url=200.200.200.29:8888 # \u5143\u8C0B\u533B\u4FDD #his.dev_url=200.200.200.36:9999 # \u8292\u5E02 #his.url=192.168.100.8:8888 # \u7EA2\u6CB3\u5987\u5E7C\u4FDD\u5065\u9662 #his.url=192.168.1.204:8888 # \u8292\u5E02\u5987\u5E7C #his.url=192.168.11.7:8888 # #his.url=10.10.11.23:8888 # \u77F3\u6797 #his.url=192.168.10.10:8888 # \u5BCC\u6C11 #his.url=200.200.201.27:8888 # \u897F\u53CC\u7248\u7EB3 #his.url=10.10.11.23:8888 #wx.password=ynxbd@6910 \ No newline at end of file