From 31936567d1da2956655233f271336b934d9eeda5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E8=BF=9B=E6=89=8D?= Date: Fri, 7 Feb 2025 17:14:03 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9C=80=E8=BF=91=E4=B8=80=E4=BA=9B=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=E8=B7=9F=E5=8A=9F=E8=83=BD=E6=9B=B4=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ynxbd/common/action/InHospAction.java | 2 + .../common/action/MeTechnologyReAction.java | 35 ++- .../com/ynxbd/common/action/PushAction.java | 2 +- .../ynxbd/common/action/RegisterAction.java | 84 ++++++++ .../com/ynxbd/common/action/SmsAction.java | 44 ++++ .../common/action/pay/MedicalAction.java | 18 +- .../ynxbd/common/action/pay/PayAction.java | 2 +- .../ynxbd/common/bean/wxMessage/WaitReg.java | 35 +++ .../com/ynxbd/common/dao/InHospPayDao.java | 2 +- .../com/ynxbd/common/dao/RegisterDao.java | 16 ++ .../ynxbd/common/dao/his/HisRegisterDao.java | 60 +++++- .../common/helper/common/JsonHelper.java | 11 + .../ynxbd/common/helper/common/SmsHelper.java | 46 +++- .../com/ynxbd/common/helper/common/Test.java | 200 +++++++++++++++++- .../com/ynxbd/common/helper/his/HisEnum.java | 7 + .../ynxbd/common/helper/his/HisHelper.java | 11 +- .../com/ynxbd/common/result/JsonResult.java | 13 +- .../com/ynxbd/common/result/ResultEnum.java | 1 + .../ynxbd/common/service/MedicalService.java | 2 +- .../ynxbd/common/service/RecipeService.java | 4 + .../com/ynxbd/common/service/RegService.java | 35 +-- .../ynxbd/wx/config/MeTechnologyReConfig.java | 58 +++-- .../ynxbd/wx/config/MiddleOfficeConfig.java | 56 ++++- .../java/com/ynxbd/wx/servlet/QServlet.java | 5 + .../com/ynxbd/wx/utils/DesEncryptHelper.java | 2 +- .../ynxbd/wx/wxfactory/ReqParamHelper.java | 4 +- .../ynxbd/wx/wxfactory/WxMedicalHelper.java | 3 +- .../ynxbd/wx/wxfactory/medical/Client.java | 2 + .../ynxbd/wx/wxfactory/medical/MdConfig.java | 1 + .../wxfactory/utils/WxPassiveReplyHelper.java | 63 +++--- src/main/resources/middle-office.properties | 5 +- src/main/resources/xbd.properties | 13 +- 32 files changed, 740 insertions(+), 102 deletions(-) create mode 100644 src/main/java/com/ynxbd/common/bean/wxMessage/WaitReg.java diff --git a/src/main/java/com/ynxbd/common/action/InHospAction.java b/src/main/java/com/ynxbd/common/action/InHospAction.java index 4cf7614..1126eac 100644 --- a/src/main/java/com/ynxbd/common/action/InHospAction.java +++ b/src/main/java/com/ynxbd/common/action/InHospAction.java @@ -41,6 +41,7 @@ public class InHospAction extends BaseAction { if (patientId == null || begDate == null || endDate == null) { return Result.error(ResultEnum.PARAM_IS_DEFECT); } + patientId = getDecodeString(patientId); JsonResult resp = new HisInHospDao().getPreMoneyList(patientId); @@ -220,6 +221,7 @@ public class InHospAction extends BaseAction { log.info("[住院]通过患者ID查询患者所有住院记录, patientId-{}",patientId); if(patientId==null) return Result.error(ResultEnum.PARAM_IS_DEFECT); + patientId = getDecodeString(patientId); JsonResult resp = new HisInHospDao().getAllHospList(patientId); List inHospitalList = resp.getDataMapList(InHospitalList.class, "Items","Item"); return Result.success(inHospitalList); diff --git a/src/main/java/com/ynxbd/common/action/MeTechnologyReAction.java b/src/main/java/com/ynxbd/common/action/MeTechnologyReAction.java index a338144..ec433b9 100644 --- a/src/main/java/com/ynxbd/common/action/MeTechnologyReAction.java +++ b/src/main/java/com/ynxbd/common/action/MeTechnologyReAction.java @@ -2,9 +2,12 @@ package com.ynxbd.common.action; import com.ynxbd.common.action.base.BaseAction; import com.ynxbd.common.result.Result; +import com.ynxbd.common.result.ResultEnum; import com.ynxbd.wx.config.MeTechnologyReConfig; import org.apache.struts2.convention.annotation.Action; import org.apache.struts2.convention.annotation.Namespace; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * @author 李进才 @@ -16,6 +19,8 @@ import org.apache.struts2.convention.annotation.Namespace; @Namespace("/meTechnologyRe") public class MeTechnologyReAction extends BaseAction { + private static final Logger log = LoggerFactory.getLogger(MeTechnologyReAction.class); + /** * 获取可预约的订单 * @@ -26,8 +31,12 @@ public class MeTechnologyReAction extends BaseAction { */ @Action("getCanBookOrders") public Result getCanBookOrders(String patientId, String startDate, String endDate) { + log.info("[天助预约平台接口参数]获取可预约的订单 patientId={},startDate={},endDate={}", patientId, startDate, endDate); + if (startDate == null || endDate == null||patientId==null) { + return Result.error(ResultEnum.PARAM_IS_DEFECT); + } patientId = getDecodeString(patientId); - return Result.success(MeTechnologyReConfig.getCanBookOrders(patientId, startDate, endDate)); + return MeTechnologyReConfig.getCanBookOrders(patientId, startDate, endDate); } /** @@ -42,8 +51,12 @@ public class MeTechnologyReAction extends BaseAction { */ @Action("getNumberSourceStatistics") public Result getNumberSourceStatistics(String patientId, String startDate, String endDate, String docDetailedNo, String intervalTimeType) { + log.info("[天助预约平台接口参数]获取号源统计信息 patientId={},startDate={},endDate={},docDetailedNo={},intervalTimeType={}", patientId, startDate, endDate, docDetailedNo, intervalTimeType); + if(patientId==null||startDate==null||endDate==null||docDetailedNo==null||intervalTimeType==null) { + return Result.error(ResultEnum.PARAM_IS_DEFECT); + } patientId = getDecodeString(patientId); - return Result.success(MeTechnologyReConfig.getNumberSourceStatistics(patientId, startDate, endDate, docDetailedNo, intervalTimeType)); + return MeTechnologyReConfig.getNumberSourceStatistics(patientId, startDate, endDate, docDetailedNo, intervalTimeType); } /** @@ -57,7 +70,11 @@ public class MeTechnologyReAction extends BaseAction { */ @Action("getNumberSourceDetails") public Result getNumberSourceDetails(String examRoomOrQueue, String startDate, String endDate, String appFromID) { - return Result.success(MeTechnologyReConfig.getNumberSourceDetails(examRoomOrQueue, startDate, endDate, appFromID)); + log.info("[天助预约平台接口参数]获取号源详细信息 examRoomOrQueue={},startDate={},endDate={},appFromID={}", examRoomOrQueue, startDate, endDate,appFromID); + if(examRoomOrQueue==null||startDate==null||endDate==null||appFromID==null) { + return Result.error(ResultEnum.PARAM_IS_DEFECT); + } + return MeTechnologyReConfig.getNumberSourceDetails(examRoomOrQueue, startDate, endDate, appFromID); } /** @@ -72,12 +89,16 @@ public class MeTechnologyReAction extends BaseAction { */ @Action("lockedBookNo") public Result lockedBookNo(String appFormID, String examRoomOrQueue, String beginDateTime, String endDateTime, Boolean lockStatus) { + log.info("[天助预约平台接口参数]锁定预约号 appFormID={},examRoomOrQueue={},beginDateTime={},endDateTime={},lockStatus={}", appFormID, examRoomOrQueue, beginDateTime, endDateTime, lockStatus); + if(appFormID==null || examRoomOrQueue == null || beginDateTime == null || endDateTime == null||lockStatus == null) { + return Result.error(ResultEnum.PARAM_IS_DEFECT); + } Boolean result = MeTechnologyReConfig.lockedBookNo(appFormID, examRoomOrQueue, beginDateTime, endDateTime, lockStatus); return result?Result.success():Result.error(); } /** - * 获取预约信息 + * 确定改约 * * @param appFormID 申请表ID * @param examRoomOrQueue 检查队列 @@ -89,8 +110,12 @@ public class MeTechnologyReAction extends BaseAction { */ @Action("getBookedDateTime") public Result getBookedDateTime(String appFormID, String examRoomOrQueue, String beginDateTime, String endDateTime, String patientId, String patientName) { + log.info("[天助预约平台接口参数]确定改约 appFormId={},examRoomOrQueue={},beginDateTime={},endDateTime={},patientId={},patientName={}", appFormID, examRoomOrQueue, beginDateTime, endDateTime, patientId, patientName); + if(appFormID==null||examRoomOrQueue==null||beginDateTime==null||endDateTime==null||patientId==null||patientName==null) { + return Result.error(ResultEnum.PARAM_IS_DEFECT); + } patientId = getDecodeString(patientId); - return Result.success(MeTechnologyReConfig.getBookedDateTime(appFormID, examRoomOrQueue, beginDateTime, endDateTime, patientId, patientName)); + return MeTechnologyReConfig.getBookedDateTime(appFormID, examRoomOrQueue, beginDateTime, endDateTime, patientId, patientName); } } diff --git a/src/main/java/com/ynxbd/common/action/PushAction.java b/src/main/java/com/ynxbd/common/action/PushAction.java index 34c81b4..ad0c119 100644 --- a/src/main/java/com/ynxbd/common/action/PushAction.java +++ b/src/main/java/com/ynxbd/common/action/PushAction.java @@ -27,7 +27,7 @@ public class PushAction extends BaseAction { RequestBody requestBody = new FormBody.Builder() .add("name",name) .build(); - String url = MessagePushConfig.HOST_URL+"api/getRedis"; + String url = "http://127.0.0.1:8123/MessagePlatform/api/getRedis"; String requestResult = OkHttpHelper.post(url,requestBody); log.info("[获取推送缓存]requestResult-{},url-{}",requestResult,url); return Result.success(JsonHelper.parseObject(requestResult)); diff --git a/src/main/java/com/ynxbd/common/action/RegisterAction.java b/src/main/java/com/ynxbd/common/action/RegisterAction.java index 69237e8..ac93c35 100644 --- a/src/main/java/com/ynxbd/common/action/RegisterAction.java +++ b/src/main/java/com/ynxbd/common/action/RegisterAction.java @@ -1,5 +1,7 @@ package com.ynxbd.common.action; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import com.ynxbd.ali.helper.AliUploadHelper; import com.ynxbd.common.action.base.BaseAction; import com.ynxbd.common.bean.Dept; @@ -20,6 +22,7 @@ import org.apache.struts2.convention.annotation.Action; import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.stream.Collectors; /** @@ -292,6 +295,87 @@ public class RegisterAction extends BaseAction { return Result.success(new HisRegisterDao().getDoctorSchedule(begDate, endDate, doctCode)); } + /** + * 查询待预约记录 + * @param begDate 开始时间 + * @param endDate 结束时间 + * @return 待预约记录 + */ + @Action("getReSignInRecord") + public Result getReSignInRecord(String begDate, String endDate) { + log.info("[查询预约待签到记录] begDate={}, endDate={}", begDate, endDate); + if (begDate == null || endDate == null) { + return Result.error(ResultEnum.PARAM_IS_DEFECT); + } + return Result.success(new HisRegisterDao().getReSignInRecord(begDate, endDate)); + } + + /** + * 执行预约签到 + * @param transNo 预约时的交易流水号 + * @return 预约签到结果 + */ + @Action("handleSignIn") + public Result handleSignIn(String transNo) { + log.info("[执行预约签到] transNo={}", transNo); + if (transNo == null || transNo.isEmpty()) { + return Result.error(ResultEnum.PARAM_IS_DEFECT); + } + return Result.success(new HisRegisterDao().handleSignIn(transNo)); + } + + /** + * 查询待预约记录 + * @param begDate 开始时间 + * @param endDate 结束时间 + * @return 待预约记录 + */ + @Action("getReLineSignInRecord") + public Result getReLineSignInRecord(String patientId,String begDate, String endDate) { + log.info("[查询预约待签到记录(包含今日挂号)]patientId-{} begDate={}, endDate={}",patientId, begDate, endDate); + if (patientId ==null||begDate == null || endDate == null) { + return Result.error(ResultEnum.PARAM_IS_DEFECT); + } + if(getDecodeString(patientId)==null){ + return Result.error(ResultEnum.PARAM_IS_DEFECT); + } + JSONArray reLineSignInRecord= new HisRegisterDao().getReLineSignInRecord(begDate, endDate); + if(reLineSignInRecord == null){ + return Result.success(); + } + return Result.success(reLineSignInRecord.stream().filter(iter -> Objects.equals(((JSONObject) iter).getString("PatientId"), getDecodeString(patientId))).collect(Collectors.toList ())); + } + + /** + * 执行预约签到 + * @param treatNum 门诊号 + * @return 预约签到结果 + */ + @Action("handleLineSignIn") + public Result handleLineSignIn(String treatNum) { + log.info("[执行预约签到(只进行分诊叫号)] treatNum={}", treatNum); + if (treatNum == null || treatNum.isEmpty()) { + return Result.error(ResultEnum.PARAM_IS_DEFECT); + } + return Result.success(new HisRegisterDao().handleLineSignIn(treatNum)); + } + + /** + * 查询预约今天号源的患者信息,用以推送候诊信息 + * @param startTime 开始时间范围 + * @param endTime 结束时间范围 + * @return 候诊人群 + */ + @Action("getTodayRegRecord") + public Result getTodayRegRecord(String startTime, String endTime) { + log.info("[候诊推送信息] begTime={}, endTime={}", startTime, endTime); + if (startTime == null || endTime == null) { + return Result.error(ResultEnum.PARAM_IS_DEFECT); + } + return Result.success(new RegisterDao().selectTodayRegRecord(startTime, endTime)); + } + + // /** // * [预约挂号]获取指定科室医生信息 diff --git a/src/main/java/com/ynxbd/common/action/SmsAction.java b/src/main/java/com/ynxbd/common/action/SmsAction.java index b2bc47c..df88528 100644 --- a/src/main/java/com/ynxbd/common/action/SmsAction.java +++ b/src/main/java/com/ynxbd/common/action/SmsAction.java @@ -3,6 +3,8 @@ package com.ynxbd.common.action; import com.alibaba.fastjson.JSONObject; import com.ynxbd.common.action.base.BaseAction; import com.ynxbd.common.bean.sms.SmsTemplate; +import com.ynxbd.common.bean.wxMessage.WaitReg; +import com.ynxbd.common.dao.RegisterDao; import com.ynxbd.common.helper.common.CodeHelper; import com.ynxbd.common.helper.common.SmsHelper; import com.ynxbd.common.result.Result; @@ -13,6 +15,8 @@ import org.apache.struts2.convention.annotation.Namespace; import java.sql.Array; import java.util.Arrays; +import java.util.HashMap; +import java.util.List; import java.util.Map; /** @@ -165,4 +169,44 @@ public class SmsAction extends BaseAction { } return Result.change(isFlag); } + + + /** + * 德宏州中医院每日候诊推送 + * @param startTime 检索推送开始时间 + * @param endTime 检索推送结束时间 + * @return 推送结果 + */ + @Action("todayRegSmS") + public Result TodayRegSms(String startTime, String endTime) { + log.info("[候诊推送短信] begTime={}, endTime={}", startTime, endTime); + List waitRegs = new RegisterDao().selectTodayRegRecord(startTime, endTime); + for (WaitReg waitReg : waitRegs) { + Map sms = new HashMap<>(); + sms.put("time",waitReg.getRegDate()+" "+waitReg.getBegTime()+"-"+waitReg.getEndTime()); + sms.put("deptName",waitReg.getDeptName()); + sms.put("doctorName",waitReg.getDoctName()); + sms.put("address",waitReg.getAddress()); + sms.put("minute","15"); + sms.put("signView","个人中心"); + sms.put("hospTel","0692-2991794"); + log.info("[候诊推送短信]sendResult-{},tel-{},sms-{}",SmsHelper.send("SMS_475780750",waitReg.getTel(),sms),waitReg.getTel(),sms); + } + return Result.success(); + } + + /** + * 天助平台短信推送 + * @param tel 电话号码 + * @param content 内容 + * @return 返回发送结果 + */ + @Action("danMiSms") + public Result DanMiSms(String tel, String content) { + log.info("[天助平台短信]url-{},content={}", tel, content); + if (tel == null || content == null) { + return Result.error(ResultEnum.PARAM_IS_INVALID); + } + return Result.success(SmsHelper.sendDanMi("1000000002608", tel, content)); + } } 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 6444f52..efa7d86 100644 --- a/src/main/java/com/ynxbd/common/action/pay/MedicalAction.java +++ b/src/main/java/com/ynxbd/common/action/pay/MedicalAction.java @@ -17,11 +17,9 @@ import com.ynxbd.common.result.Result; import com.ynxbd.common.result.ResultEnum; import com.ynxbd.common.result.ServiceException; import com.ynxbd.common.service.MedicalService; +import com.ynxbd.common.service.PatientService; import com.ynxbd.common.service.params.RegParams; -import com.ynxbd.wx.wxfactory.ReqParamHelper; -import com.ynxbd.wx.wxfactory.WxCacheHelper; -import com.ynxbd.wx.wxfactory.WxMedicalHelper; -import com.ynxbd.wx.wxfactory.WxPayHelper; +import com.ynxbd.wx.wxfactory.*; import com.ynxbd.wx.wxfactory.bean.*; import com.ynxbd.wx.wxfactory.medical.MdConfig; import com.ynxbd.wx.wxfactory.utils.MdRespHelper; @@ -112,6 +110,15 @@ public class MedicalAction extends BaseAction { return Result.success(respJson); } + + @Action("medicalAuth") + public Result medicalAuth(String openid,String qrCode) { + log.info("[医保建档] openid-{},qrCode={}", openid, qrCode); + MedicalUserInfo info = WxFactory.Medical.Common().getUserInfo(MdConfig.PARTNER_URL, openid, qrCode); + log.info("[医保建档获取用户信息] resp-{}",info); + return Result.success(info); + } + @Action("getMedicalAuthUrl") public Result getMedicalAuthUrl(String url) { JSONObject respJson = WxMedicalHelper.getMdAuthUrl(url, null); @@ -328,7 +335,8 @@ public class MedicalAction extends BaseAction { String notifyType = notifyInfo.getAttach(); - log.info("【医保】[{}] 收到通知 outTradeNo={}, bankTransNo={}, notifyType={}", notifyType, outTradeNo, bankTransNo, notifyType); + log.info("【医保】[{}] 收到通知" + + " outTradeNo={}, bankTransNo={}, notifyType={}", notifyType, outTradeNo, bankTransNo, notifyType); switch (PEnum.toEnum(notifyType)) { case RECIPE: diff --git a/src/main/java/com/ynxbd/common/action/pay/PayAction.java b/src/main/java/com/ynxbd/common/action/pay/PayAction.java index 4b09e0d..b3296ee 100644 --- a/src/main/java/com/ynxbd/common/action/pay/PayAction.java +++ b/src/main/java/com/ynxbd/common/action/pay/PayAction.java @@ -943,7 +943,7 @@ public class PayAction extends BaseAction { // casebook.setApplyName(applyName); // casebook.setApplyTime(applyTime); // -// casebook.setDeptCode(deptCode); +// casebook.setDeptCode(deptCode);r // casebook.setDeptName(deptName); // casebook.setAddress(address); // casebook.setDx(dx); diff --git a/src/main/java/com/ynxbd/common/bean/wxMessage/WaitReg.java b/src/main/java/com/ynxbd/common/bean/wxMessage/WaitReg.java new file mode 100644 index 0000000..e7d3e98 --- /dev/null +++ b/src/main/java/com/ynxbd/common/bean/wxMessage/WaitReg.java @@ -0,0 +1,35 @@ +package com.ynxbd.common.bean.wxMessage; + + +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; + +import java.io.Serializable; + +@Setter +@Getter +@ToString +@NoArgsConstructor +public class WaitReg implements Serializable { + private static final long serialVersionUID = 1L; + // openId + public String openId; + // 患者姓名 + public String name; + // 医生姓名 + private String doctName; + //电弧号码 + private String tel; + //科室名称 + private String deptName; + //挂号日期 + private String regDate; + //开始时间 + private String begTime; + //结束时间 + private String endTime; + //就诊地址 + private String address; +} diff --git a/src/main/java/com/ynxbd/common/dao/InHospPayDao.java b/src/main/java/com/ynxbd/common/dao/InHospPayDao.java index 2682bb3..67a51d5 100644 --- a/src/main/java/com/ynxbd/common/dao/InHospPayDao.java +++ b/src/main/java/com/ynxbd/common/dao/InHospPayDao.java @@ -144,7 +144,7 @@ public class InHospPayDao { * @param invoiceTransNo HIS交易流水号 */ public PayInHosp selectRefundByInvoiceTransNo(String invoiceTransNo, String patientId) { - String sql = "select * from pay_in_hosp where invoiceTransNo= ? and patientId= ? and hisStatus= 0 and payStatus= 0 and authCode is not null and tradeNo is null and (refundResult is null or refundResult != 'OK')"; + String sql = "select * from pay_in_hosp where invoiceTransNo= ? and patientId= ? and hisStatus= 0 and payStatus= 0 and authCode is not null and (refundResult is null or refundResult != 'OK')"; List resultList = DataBase.select(sql, PayInHosp.class, ps -> { ps.setString(1, invoiceTransNo); ps.setString(2, patientId); diff --git a/src/main/java/com/ynxbd/common/dao/RegisterDao.java b/src/main/java/com/ynxbd/common/dao/RegisterDao.java index d85f7c7..e798da8 100644 --- a/src/main/java/com/ynxbd/common/dao/RegisterDao.java +++ b/src/main/java/com/ynxbd/common/dao/RegisterDao.java @@ -4,6 +4,7 @@ import com.ynxbd.common.bean.Dept; import com.ynxbd.common.bean.Doctor; import com.ynxbd.common.bean.pay.Order; import com.ynxbd.common.bean.pay.Register; +import com.ynxbd.common.bean.wxMessage.WaitReg; import com.ynxbd.common.config.db.DataBase; import com.ynxbd.common.dao.his.HisRegisterDao; import com.ynxbd.common.helper.common.DateHelper; @@ -682,6 +683,7 @@ public class RegisterDao { } + /** * 退费列表 */ @@ -701,4 +703,18 @@ public class RegisterDao { ps.setString(3, outTradeNo); }) > 0; } + + /** + * 查询当天挂号的人用来推送候诊提醒 + * @param startDate 开始时间 + * @param endDate 结束时间 + * @return 候诊人群 + */ + public List selectTodayRegRecord(String startDate, String endDate) { + String sql = "select a.*,b.`Name` from register a left join patientBase b on a.patientId = b.patientId and a.openId = b.openId where regDate = CURDATE() and begTime >= ? and endTime <= ? and refundResult is null and payStatus = 0 and hisStatus = 0"; + return DataBase.select(sql, WaitReg.class, ps -> { + ps.setString(1, startDate); + ps.setString(2, endDate); + }); + } } 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 1c2c82c..3e4d784 100644 --- a/src/main/java/com/ynxbd/common/dao/his/HisRegisterDao.java +++ b/src/main/java/com/ynxbd/common/dao/his/HisRegisterDao.java @@ -1,12 +1,10 @@ package com.ynxbd.common.dao.his; -import cn.hutool.core.date.DateTime; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.ynxbd.common.bean.Dept; import com.ynxbd.common.bean.Doctor; import com.ynxbd.common.bean.enums.MerchantEnum; -import com.ynxbd.common.bean.his.HisTreat; import com.ynxbd.common.bean.pay.Register; import com.ynxbd.common.dao.RegisterDao; import com.ynxbd.common.helper.common.*; @@ -971,4 +969,62 @@ public class HisRegisterDao { return null; } + + /** + * 查询预约待签到记录(不包含今日挂号的) + * @param begDate 开始时间 + * @param endDate 结束时间 + * @return 待签到记录 + */ + public JSONArray getReSignInRecord(String begDate, String endDate){ + JsonResult jsonResult = HisHelper.getJsonResult(HisEnum.AP_Query_SignIn, params -> { + params.put("BegDate", begDate); + params.put("EndDate", endDate); + }); + if(jsonResult.success()){ + return jsonResult.getJsonArray("Items"); + } + return null; + } + + /** + * 执行预约签到(即执行转入号源,又执行分时段) + * @param transNo 预约时的交易流水号 + * @return 预约签到结果 + */ + public JsonResult handleSignIn(String transNo){ + Map params = new HashMap<>(); + params.put("TransNo", transNo); + return HisHelper.getJsonResult(HisEnum.AP_SignIN, params); + } + + /** + * 查询预约待签到记录(包含今日挂号的) + * @param begDate 开始时间 + * @param endDate 结束时间 + * @return 待签到记录 + */ + public JSONArray getReLineSignInRecord(String begDate, String endDate){ + JsonResult jsonResult = HisHelper.getJsonResult(HisEnum.AP_Query_Line_SignIn, params -> { + params.put("BegDate", begDate); + params.put("EndDate", endDate); + }); + if(jsonResult.success()){ + return jsonResult.getJsonArray("Items","Item"); + } + return null; + } + + /** + * 执行预约签到(只执行分时段) + * @param treatNum 门诊号 + * @return 预约签到结果1 + */ + public JsonResult handleLineSignIn(String treatNum){ + Map params = new HashMap<>(); + params.put("MZNum", treatNum); + return HisHelper.getJsonResult(HisEnum.AP_Line_SignIN, params); + } + + } diff --git a/src/main/java/com/ynxbd/common/helper/common/JsonHelper.java b/src/main/java/com/ynxbd/common/helper/common/JsonHelper.java index 666dece..d2b16be 100644 --- a/src/main/java/com/ynxbd/common/helper/common/JsonHelper.java +++ b/src/main/java/com/ynxbd/common/helper/common/JsonHelper.java @@ -5,6 +5,8 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.TypeReference; +import com.alibaba.fastjson.serializer.PascalNameFilter; +import com.alibaba.fastjson.serializer.SerializerFeature; import com.ynxbd.common.bean.xbd.MRHistory; import java.util.List; @@ -18,6 +20,15 @@ public class JsonHelper { return JSON.toJSONString(data); } + /** + * 支持返回大写json + * @param data 需要转换实体 + * @return string + */ + public static String toProJsonString(Object data){ + return JSONObject.toJSONString(data, new PascalNameFilter(), SerializerFeature.WriteMapNullValue); + } + public static JSONObject parseObject(String data) { return JSON.parseObject(data); } diff --git a/src/main/java/com/ynxbd/common/helper/common/SmsHelper.java b/src/main/java/com/ynxbd/common/helper/common/SmsHelper.java index fa66434..ed0a9c1 100644 --- a/src/main/java/com/ynxbd/common/helper/common/SmsHelper.java +++ b/src/main/java/com/ynxbd/common/helper/common/SmsHelper.java @@ -11,9 +11,13 @@ import com.ynxbd.common.bean.sms.SmsRegTem; import com.ynxbd.common.bean.sms.SmsTemplate; import com.ynxbd.common.config.EhCacheConfig; import com.ynxbd.common.helper.ProperHelper; +import com.ynxbd.common.helper.http.OkHttpHelper; import com.ynxbd.common.result.ResultEnum; import com.ynxbd.wx.config.WeChatConfig; import lombok.extern.slf4j.Slf4j; +import okhttp3.FormBody; +import okhttp3.RequestBody; +import org.apache.commons.codec.digest.DigestUtils; import org.apache.commons.lang3.StringUtils; import org.ehcache.Cache; @@ -188,6 +192,26 @@ public class SmsHelper { } + public static String sendDanMi(String templateId, String tel, String content) { + String accountSid = "301d69a6ea6ed34b0827a4dec3ca1ff8"; + String authToken = "94f37caeddeb36a8400ad0ecc9b04ece"; + String timestamp = String.valueOf(new Date().getTime()); + RequestBody requestBody = new FormBody.Builder() + .add("accountSid",accountSid) + .add("templateid",templateId) + .add("to",tel) + .add("timestamp",timestamp) + .add("param",content) + .add("sig", DigestUtils.md5Hex(accountSid+authToken+timestamp)) + .build(); + String result = OkHttpHelper.post("https://openapi.danmi.com/textSMS/sendSMS/V1",requestBody, headers -> { + headers.add("content-type","application/x-www-form-urlencoded"); + }); + log.info("[天助平台] 短信发送 result-{},tel-{},templateId-{},content-{}",result,tel,templateId,content); + return result; + } + + /** * 是否重复发送 * @@ -269,10 +293,24 @@ public class SmsHelper { // send("SMS_462460638","18206787486",sms); - Map sms = new HashMap<>(); - sms.put("name","李进才"); - sms.put("item_name","胃镜"); - send("SMS_462460638","18206787486",sms); +// Map sms = new HashMap<>(); +// sms.put("name","李进才"); +// sms.put("item_name","胃镜"); +// send("SMS_462460638","18206787486",sms); + + + +// Map sms = new HashMap<>(); +// sms.put("address", "四号楼2楼6号诊室骨伤科(脊柱)"); +// sms.put("deptName", "骨伤科-骨伤科专家门诊"); +// sms.put("doctorName", "陈应东"); +// sms.put("hosp_tel", "0692-2991794"); +// sms.put("hosp_tip", "提前15分钟到医院门诊各导医服务台签到后排队候诊"); +// sms.put("seq", "41"); +// sms.put("time", "2024-12-05 10:00:00-10:03:00"); +// send("SMS_475980406","18206787486",sms); + + sendDanMi("1000000002608","13608818101","影像报告已经出,请及时到医院自助机进行报告打印或点击链接 https://wx.hhzyy.com/smsPacs?token=A88A6D089&inHosNum=1579733"); diff --git a/src/main/java/com/ynxbd/common/helper/common/Test.java b/src/main/java/com/ynxbd/common/helper/common/Test.java index 13c09f9..d8d3ee9 100644 --- a/src/main/java/com/ynxbd/common/helper/common/Test.java +++ b/src/main/java/com/ynxbd/common/helper/common/Test.java @@ -5,14 +5,208 @@ package com.ynxbd.common.helper.common; //import com.mascloud.sdkclient.Client; //import com.mascloud.util.JsonUtil; +import com.ynxbd.common.bean.HisRecipe; +import com.ynxbd.common.result.JsonResult; +import com.ynxbd.common.result.JsonResultEnum; import org.apache.commons.codec.digest.DigestUtils; +import java.util.List; + public class Test { public static void main(String[] args) { - String piMd5 = "9444144" + "T2005" + "xbd"; - piMd5 = DigestUtils.md5Hex(piMd5).toUpperCase(); - System.out.println(piMd5); +// String piMd5 = "9444144" + "T2005" + "xbd"; +// piMd5 = DigestUtils.md5Hex(piMd5).toUpperCase(); +// System.out.println(piMd5); + JsonResult jsonResult = JsonResult.xmlToBean("\n" + + " 4001\n" + + " 0\n" + + " 成功\n" + + " \n" + + " \n" + + " 85735\n" + + " 体检费用\n" + + " 3001\n" + + " 医学检验科\n" + + " 0141\n" + + " 健康管理中心/治未病\n" + + " 0513\n" + + " 赵翠回\n" + + " 2024-07-03 07:15:29\n" + + " \n" + + " 81365\n" + + " 308.7\n" + + "
\n" + + " \n" + + " \n" + + " \n" + + " \n" + + " 0135\n" + + " 空腹血糖\n" + + " 检验\n" + + " \n" + + " \n" + + " 4\n" + + " 1\n" + + " \n" + + " \n" + + " 0139\n" + + " 肝功Ⅰ号\n" + + " 检验\n" + + " \n" + + " \n" + + " 27\n" + + " 1\n" + + " \n" + + " \n" + + " 0166\n" + + " 尿常规(门诊专用)\n" + + " 检验\n" + + " \n" + + " \n" + + " 10\n" + + " 1\n" + + " \n" + + " \n" + + " 0167\n" + + " 血常规\n" + + " 检验\n" + + " \n" + + " \n" + + " 19\n" + + " 1\n" + + " \n" + + " \n" + + " 0305\n" + + " 胸部后前位片(体检)\n" + + " 检查\n" + + " \n" + + " \n" + + " 27\n" + + " 1\n" + + " \n" + + " \n" + + " 0624\n" + + " 腹部全套(女 含:肝.胆.胰.脾.肾.膀胱.输尿管.子宫.附件)\n" + + " 检查\n" + + " \n" + + " \n" + + " 118.8\n" + + " 1\n" + + " \n" + + " \n" + + " 110500001A\n" + + " 体检费(一般体检)\n" + + " 普通\n" + + " \n" + + " 人次\n" + + " 14\n" + + " 1\n" + + " \n" + + " \n" + + " 120400002C\n" + + " 静脉采血器采血\n" + + " 普通\n" + + " \n" + + " \n" + + " 4\n" + + " 1\n" + + " \n" + + " \n" + + " 1552\n" + + " 肾功两项(体检专用)\n" + + " 检验\n" + + " \n" + + " \n" + + " 13\n" + + " 1\n" + + " \n" + + " \n" + + " 1635\n" + + " 梅毒螺旋体抗体(体检专用TPHA)\n" + + " 检验\n" + + " \n" + + " \n" + + " 10\n" + + " 1\n" + + " \n" + + " \n" + + " 250403019B\n" + + " 人免疫缺陷病毒抗体测定\n" + + " 检验\n" + + " \n" + + " \n" + + " 30\n" + + " 1\n" + + " \n" + + " \n" + + " 310701001C\n" + + " 十二通道心电图检查\n" + + " 普通\n" + + " \n" + + " \n" + + " 25\n" + + " 1\n" + + " \n" + + " \n" + + " Z1055\n" + + " 一次性定量真空采血管(普通)3根\n" + + " 普通\n" + + " \n" + + " \n" + + " 6\n" + + " 1\n" + + " \n" + + " \n" + + " Z1056\n" + + " 一次性定量真空采血管(抗凝)1根\n" + + " 普通\n" + + " \n" + + " \n" + + " 0.9\n" + + " 1\n" + + " \n" + + " \n" + + " Z1061\n" + + " 内科检查\n" + + " 普通\n" + + " \n" + + " \n" + + " 0\n" + + " 1\n" + + " \n" + + " \n" + + " Z1062\n" + + " 外科检查\n" + + " 普通\n" + + " \n" + + " \n" + + " 0\n" + + " 1\n" + + " \n" + + " \n" + + " Z1063\n" + + " 五官科检查\n" + + " 普通\n" + + " \n" + + " \n" + + " 0\n" + + " 1\n" + + " \n" + + " \n" + + " Z1064\n" + + " 口腔科检查\n" + + " 普通\n" + + " \n" + + " \n" + + " 0\n" + + " 1\n" + + " \n" + + " \n" + + "", JsonResultEnum.SYS_HIS); + List recipes = jsonResult.getDataMapList(HisRecipe.class, "Recipe"); + System.out.println(recipes); + } // public static void main( String[] args ) { // Client client = Client.getInstance( ); 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 7b6ad7a..98ebfab 100644 --- a/src/main/java/com/ynxbd/common/helper/his/HisEnum.java +++ b/src/main/java/com/ynxbd/common/helper/his/HisEnum.java @@ -100,6 +100,13 @@ public enum HisEnum { XK_QUERY_RE_REGISTER("[互联网医院]查询复诊挂号费","13008","UniversalInterface",true), + // 在线签到 + AP_Query_SignIn("[在线签到]查询预约待签到记录","7007","AP_Query_SignIn",true), + AP_SignIN("[在线签到]执行预约签到","7008","AP_SignIn",true), + AP_Query_Line_SignIn("[在线签到]查询已挂号未签到记录","7009","AP_Query_LineSignIn",true), + AP_Line_SignIN("[在线签到]执行挂号患者签到","7010","AP_LineSignIn",true), + + ; diff --git a/src/main/java/com/ynxbd/common/helper/his/HisHelper.java b/src/main/java/com/ynxbd/common/helper/his/HisHelper.java index be99dea..722bed8 100644 --- a/src/main/java/com/ynxbd/common/helper/his/HisHelper.java +++ b/src/main/java/com/ynxbd/common/helper/his/HisHelper.java @@ -1,6 +1,7 @@ package com.ynxbd.common.helper.his; import com.ynxbd.common.action.pay.PEnum; +import com.ynxbd.common.bean.enums.HospEnum; import com.ynxbd.common.bean.enums.MerchantEnum; import com.ynxbd.common.bean.pay.Order; import com.ynxbd.common.helper.ProperHelper; @@ -20,6 +21,7 @@ import org.dom4j.Node; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Objects; @Slf4j public class HisHelper { @@ -253,8 +255,13 @@ public class HisHelper { } } - if(MiddleOfficeConfig.MIDDLE_OFFICE_URL!=null){ //平台数据上传 - MiddleOfficeConfig.run(soapUrl,"" + SoapHelper.requestParams("HIS", params) + "",HIS_SOAP_MD_URL,transactionCode,result); + if(HospEnum.isHosp(HospEnum.红河州人民医院)){ + if(MiddleOfficeConfig.MIDDLE_OFFICE_URL!=null){ //平台数据上传 + MiddleOfficeConfig.run(soapUrl,"" + SoapHelper.requestParams("HIS", params) + "",HIS_SOAP_MD_URL,transactionCode,result); + if("7004".equals(transactionCode)&&JsonResult.xmlToBean(result, JsonResultEnum.SYS_HIS)!=null){ + MiddleOfficeConfig.uploadTreatNum("JH0104", Objects.requireNonNull(JsonResult.xmlToBean(result, JsonResultEnum.SYS_HIS)).getDataMapString("MZNum")); + } + } } } catch (DocumentException e) { diff --git a/src/main/java/com/ynxbd/common/result/JsonResult.java b/src/main/java/com/ynxbd/common/result/JsonResult.java index 0220b00..8e95a5d 100644 --- a/src/main/java/com/ynxbd/common/result/JsonResult.java +++ b/src/main/java/com/ynxbd/common/result/JsonResult.java @@ -16,10 +16,8 @@ import org.dom4j.DocumentHelper; import org.dom4j.Element; import java.math.BigDecimal; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; +import java.util.*; +import java.util.stream.Collectors; @Slf4j @Getter @@ -465,4 +463,11 @@ public class JsonResult { return JsonHelper.parseObject(result); } + +// public static void main(String[] args) { +// String test = "70090成功3605059297520余艳聪0312心病科0721李曰富2024-12-1014:42:0014:45:002024-12-10 12:36:203605213411671杨丽麟2101精神科(神志病科)0970付丽娜2024-12-1015:57:0016:00:002024-12-10 14:55:113605216821300段贵成1201口腔科任意医师2024-12-1014:51:0014:58:002024-12-10 14:56:293605336679882段李情1201口腔科1599唐德芝2024-12-1015:42:0015:45:002024-12-10 15:42:313605339509469李进才0403骨伤科1272沈自启2024-12-1017:27:0017:30:002024-12-10 15:44:003605381372552思安翠0403骨伤科1272沈自启2024-12-1016:03:0016:06:002024-12-10 16:00:413605454811419胡铭城1102眼耳鼻喉科1254安兴有2024-12-1016:33:2616:36:002024-12-10 16:35:04"; +// JsonResult jsonResult = JsonResult.xmlToBean(test,JsonResultEnum.SYS_HIS); +// JSONArray jsonArray = jsonResult.getJsonArray("Items","Item"); +// System.out.println(jsonArray.stream().filter(iter -> Objects.equals(((JSONObject) iter).getString("PatientId"), "509469")).collect(Collectors.toList ())); +// } } diff --git a/src/main/java/com/ynxbd/common/result/ResultEnum.java b/src/main/java/com/ynxbd/common/result/ResultEnum.java index 313e062..15aa06f 100644 --- a/src/main/java/com/ynxbd/common/result/ResultEnum.java +++ b/src/main/java/com/ynxbd/common/result/ResultEnum.java @@ -94,6 +94,7 @@ public enum ResultEnum { // 挂号 REG_TODAY_HAS(38100, "[挂号]同一天,同一科室,已挂过号"), REG_OCCUPY_SOURCE(38101, "[挂号]号源已被占用"), + REG_NOT_FIND(38102,"[退号]未查询到挂号支付信息;若是医保支付则不允许线上退号,请到窗口进行退费"), SELF_HELP_EXCEED_MAX(38190, "[自助申请单]今日检测数量已达最大限制"), // 处方 RECIPE_REPEAT_BILL(38200, "[处方]重复开单"), // 核酸重复开单提示-不要动 diff --git a/src/main/java/com/ynxbd/common/service/MedicalService.java b/src/main/java/com/ynxbd/common/service/MedicalService.java index 62de8a3..4b50168 100644 --- a/src/main/java/com/ynxbd/common/service/MedicalService.java +++ b/src/main/java/com/ynxbd/common/service/MedicalService.java @@ -406,7 +406,7 @@ public class MedicalService { } if (recipeDao.updateMerPaidByTradeNo(tradeNo, bankTransNo)) { - log.info("{} [处方]更新商户信息失败 outTradeNo={}, bankTransNo={}", merchantEnum.NAME, outTradeNo, bankTransNo); + log.info("{} [处方]更新商户信息成功 outTradeNo={}, bankTransNo={}", merchantEnum.NAME, outTradeNo, bankTransNo); } JsonResult jsonResult = HisMedicalDao.mdPay(mdUserId, payDate, payTime, tradeNo, bankTransNo, cashFee); diff --git a/src/main/java/com/ynxbd/common/service/RecipeService.java b/src/main/java/com/ynxbd/common/service/RecipeService.java index 0153429..868bb9d 100644 --- a/src/main/java/com/ynxbd/common/service/RecipeService.java +++ b/src/main/java/com/ynxbd/common/service/RecipeService.java @@ -322,6 +322,10 @@ public class RecipeService { // 体检缴费失败的所有费用进行退回 if (recipeInfo.isRefund()) { failedList = recipeList; + for (Recipe failed : failedList){ + failed.setErrorCode(recipeInfo.getErrorCode()); + failed.setErrorMsg(recipeInfo.getErrorMsg()); + } } break; } diff --git a/src/main/java/com/ynxbd/common/service/RegService.java b/src/main/java/com/ynxbd/common/service/RegService.java index 5c0bc98..1cc1208 100644 --- a/src/main/java/com/ynxbd/common/service/RegService.java +++ b/src/main/java/com/ynxbd/common/service/RegService.java @@ -20,11 +20,9 @@ import com.ynxbd.common.helper.common.DateHelper; import com.ynxbd.common.helper.common.JsonHelper; import com.ynxbd.common.helper.common.SmsHelper; import com.ynxbd.common.helper.his.HisHelper; -import com.ynxbd.common.result.JsonResult; -import com.ynxbd.common.result.Result; -import com.ynxbd.common.result.ResultEnum; -import com.ynxbd.common.result.ServiceException; +import com.ynxbd.common.result.*; import com.ynxbd.wx.config.MessagePushConfig; +import com.ynxbd.wx.config.MiddleOfficeConfig; import com.ynxbd.wx.config.WeChatConfig; import com.ynxbd.wx.utils.DateGenerate; import com.ynxbd.wx.wxfactory.WxMedicalHelper; @@ -37,6 +35,7 @@ import java.math.BigDecimal; import java.util.Date; import java.util.HashMap; import java.util.Map; +import java.util.Objects; /** * 挂号业务层 @@ -175,6 +174,7 @@ public class RegService { jsonResult = new HisRegisterDao().handleTimeReg(reg, merchantEnum); if (jsonResult.success()) { hisTransNo = jsonResult.getDataMapString("HISTransNo"); + treatNum = jsonResult.getDataMapString("MZNum"); // 门诊号 hisQueueNo = jsonResult.getDataMapString("QueueNo"); // 排队号 invoiceTransNo = jsonResult.getDataMapString("InvoiceTransNo"); // 发票流水号 @@ -361,20 +361,21 @@ public class RegService { log.info("[挂号]短信通知:openid为空"); } - SmsRegTem sms = new SmsRegTem(); - sms.setTime(date + " " + begTime + "-" + endTime); - sms.setAddress(reg.getAddress()); - sms.setDeptName(reg.getDeptName()); - sms.setDoctorName(reg.getDoctName()); - sms.setSeq(reg.getQueueNum()); + boolean isResult = false; if (HospEnum.isHosp(HospEnum.德宏州中医医院)) { + SmsRegTem sms = new SmsRegTem(); sms.setHosp_tel("0692-2991794"); + sms.setTime(date + " " + begTime + "-" + endTime); + sms.setAddress(reg.getAddress()==null?"":reg.getAddress().replace(" ","").replace("(","(").replace(")",")")); + sms.setDeptName(reg.getDeptName()); + sms.setDoctorName(reg.getDoctName()); + sms.setSeq(reg.getQueueNum()); sms.setHosp_tip("提前15分钟到医院门诊各导医服务台签到后排队候诊"); log.info("[挂号]发送预约短信通知 sms={}, appId={}, tel-{}", JsonHelper.toJsonString(sms), WeChatConfig.APP_ID, tel); - isResult = SmsHelper.send("SMS_262510249", tel, sms); + isResult = SmsHelper.send("SMS_475980406", tel, sms); } return isResult; } @@ -472,9 +473,11 @@ public class RegService { Register reg = new RegisterDao().selectRegByHisTransNo(hisTransNo); if (reg == null) { - log.info("[今日挂号][取消预约]失败, 未查询到挂号支付信息;若是医保支付不允许线上退费,请到窗口进行退费"); - return Result.error(ResultEnum.DATA_NOT_FOUND); + log.info("[今日挂号][取消预约]失败, 未查询到挂号支付信息;若是医保支付则不允许线上退号,请到窗口进行退费"); + return Result.error(ResultEnum.REG_NOT_FIND); } + + String tradeNo = reg.getTradeNo(); String outTradeNo = reg.getOutTradeNo(); MerchantEnum merchantEnum = MerchantEnum.getMerchantEnumByOutTradeNo(outTradeNo); @@ -501,6 +504,12 @@ public class RegService { return Result.error("支付方式未匹配 outTradeNo=" + outTradeNo); } + if(HospEnum.isHosp(HospEnum.红河州人民医院)) { + if (MiddleOfficeConfig.MIDDLE_OFFICE_URL != null) { + MiddleOfficeConfig.uploadTreatNum("JH0105", reg.getTreatNum()); + } + } + log.info("{}[今日挂号][取消预约]开始退款:outTradeNo={}, dbTradeNo={}, payMoney={}", merchantEnum.NAME, outTradeNo, dbTradeNo, payMoney); String pushInfo = "取消预约 科室:" + reg.getDeptName(); diff --git a/src/main/java/com/ynxbd/wx/config/MeTechnologyReConfig.java b/src/main/java/com/ynxbd/wx/config/MeTechnologyReConfig.java index e12a9e2..db9c318 100644 --- a/src/main/java/com/ynxbd/wx/config/MeTechnologyReConfig.java +++ b/src/main/java/com/ynxbd/wx/config/MeTechnologyReConfig.java @@ -10,10 +10,12 @@ import com.ynxbd.common.helper.common.JsonHelper; import com.ynxbd.common.helper.http.OkHttpHelper; import com.ynxbd.common.result.JsonResult; import com.ynxbd.common.result.JsonResultEnum; +import com.ynxbd.common.result.Result; import lombok.extern.slf4j.Slf4j; import okhttp3.MediaType; import okhttp3.RequestBody; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -36,12 +38,19 @@ public class MeTechnologyReConfig { public static final MediaType JSON = MediaType.parse("application/json; charset=utf-8"); static { - ProperHelper config = new ProperHelper().read("medical-technology-reserve.properties"); - MEDICAL_TECHNOLOGY_RESERVE_WEBSERVICE_URL = config.getString("medical_technology_reserve_webservice_url"); - MEDICAL_TECHNOLOGY_RESERVE_TERMINAL_NO = config.getString("medical_technology_reserve_terminal_no"); - MEDICAL_TECHNOLOGY_RESERVE_TEST_PATIENT_ID = config.getString("medical_technology_reserve_test_patientId"); - MEDICAL_TECHNOLOGY_RESERVE_JSON_URL = config.getString("medical_technology_reserve_json_url"); + if (config ==null){ + MEDICAL_TECHNOLOGY_RESERVE_WEBSERVICE_URL = null; + MEDICAL_TECHNOLOGY_RESERVE_TERMINAL_NO = null; + MEDICAL_TECHNOLOGY_RESERVE_TEST_PATIENT_ID = null; + MEDICAL_TECHNOLOGY_RESERVE_JSON_URL = null; + } + else { + MEDICAL_TECHNOLOGY_RESERVE_WEBSERVICE_URL = config.getString("medical_technology_reserve_webservice_url"); + MEDICAL_TECHNOLOGY_RESERVE_TERMINAL_NO = config.getString("medical_technology_reserve_terminal_no"); + MEDICAL_TECHNOLOGY_RESERVE_TEST_PATIENT_ID = config.getString("medical_technology_reserve_test_patientId"); + MEDICAL_TECHNOLOGY_RESERVE_JSON_URL = config.getString("medical_technology_reserve_json_url"); + } } public static void reserveRun(String patientId){ @@ -93,7 +102,7 @@ public class MeTechnologyReConfig { * 预约平台提供,终端调用,主要用来获取患者申请单列表,用于预约改约 * @return 根据患者身份获得开立检查单情况 */ - public static List getCanBookOrders(String patientId,String startDate,String endDate){ + public static Result getCanBookOrders(String patientId,String startDate,String endDate){ Map params = new HashMap<>(); params.put("PatientId", patientId); params.put("StartDate", startDate); @@ -108,13 +117,13 @@ public class MeTechnologyReConfig { JSONObject jsonObject = JsonHelper.parseObject(result); if(jsonObject==null){ log.info("[天助预约平台] patientId-{},startDate-{},endDate-{} 获取患者申请信息失败,result-{}",patientId,startDate,endDate,result); - return null; + return Result.error(); } if(!"0".equals(jsonObject.getString("ResultCode"))){ log.info("[天助预约平台] 获取患者申请信息失败,失败原因-{}",jsonObject.getString("ResultContent")); - return null; + return Result.error(jsonObject.getString("ResultCode")); } - return jsonObject.getJSONArray("OrderLists").toJavaList(BookOrder.class); + return Result.success(jsonObject.getJSONArray("OrderLists").toJavaList(BookOrder.class)); } /** @@ -126,7 +135,7 @@ public class MeTechnologyReConfig { * @param intervalTimeType 上午或者下午 * @return 日期范围获得可使用资源概况 */ - public static List getNumberSourceStatistics(String patientId, String startDate, String endDate, String docDetailedNo, String intervalTimeType){ + public static Result getNumberSourceStatistics(String patientId, String startDate, String endDate, String docDetailedNo, String intervalTimeType){ Map params = new HashMap<>(); params.put("PatientId", patientId); params.put("StartDate", startDate); @@ -142,13 +151,13 @@ public class MeTechnologyReConfig { JSONObject jsonObject = JsonHelper.parseObject(result); if(jsonObject==null){ log.info("[天助预约平台] patientId-{},startDate-{},endDate-{},docDetailedNo-{},intervalTimeType-{} 根据日期范围获得可使用资源概况失败,result-{}",patientId,startDate,endDate,docDetailedNo,intervalTimeType,result); - return null; + return Result.error(); } if(!"0".equals(jsonObject.getString("resultCode"))){ log.info("[天助预约平台] 根据日期范围获得可使用资源概况失败,失败原因-{}",jsonObject.getString("resultContent")); - return null; + return Result.error(jsonObject.getString("resultCode")); } - return jsonObject.getJSONArray("numberSourceStatisticsApplyDTO").toJavaList(NumberSourceStatistics.class); + return Result.success(jsonObject.getJSONArray("numberSourceStatisticsApplyDTO").toJavaList(NumberSourceStatistics.class)); } /** @@ -159,7 +168,7 @@ public class MeTechnologyReConfig { * @param appFromID 医嘱申请单号 * @return 号池明细信息 */ - public static List getNumberSourceDetails(String examRoomOrQueue, String startDate, String endDate, String appFromID){ + public static Result getNumberSourceDetails(String examRoomOrQueue, String startDate, String endDate, String appFromID){ JSONObject jsonParams = new JSONObject(); jsonParams.put("examRoomOrQueue",examRoomOrQueue); @@ -174,13 +183,13 @@ public class MeTechnologyReConfig { JSONObject jsonObject = JsonHelper.parseObject(result); if(jsonObject==null){ log.info("[天助预约平台] examRoomOrQueue-{},startDate-{},endDate-{},appFromID-{}, 获取号池明细失败,result-{}",examRoomOrQueue,startDate,endDate,appFromID,result); - return null; + return Result.error(); } if(!"0".equals(jsonObject.getString("resultCode"))){ log.info("[天助预约平台] 获取号池明细失败,失败原因-{}",jsonObject.getString("resultContent")); - return null; + return Result.error(jsonObject.getString("resultCode")); } - return jsonObject.getJSONArray("numPoolDetailsDTOList").toJavaList(NumberSourceDetails.class); + return Result.success(jsonObject.getJSONArray("numPoolDetailsDTOList").toJavaList(NumberSourceDetails.class)); } /** @@ -215,30 +224,33 @@ public class MeTechnologyReConfig { return true; } - public static BookedInfo getBookedDateTime(String appFormID,String examRoomOrQueue,String beginDateTime,String endDateTime,String patientId,String patientName){ + public static Result getBookedDateTime(String appFormID, String examRoomOrQueue, String beginDateTime, String endDateTime, String patientId, String patientName){ Map param = new HashMap<>(); param.put("AppFormID",appFormID); param.put("ExamRoomOrQueue",examRoomOrQueue); param.put("BeginDateTime",beginDateTime); param.put("EndDateTime",endDateTime); + List> paramList = new ArrayList<>(); + paramList.add(param); Map params = new HashMap<>(); - params.put("BookedDateTimeDTOList",param); + params.put("BookedDateTimeDTOList",paramList); params.put("ScheduleUserId",patientId); params.put("ScheduleUser",patientName); - RequestBody requestBody = RequestBody.create(JSON, JsonHelper.toJsonString(params)); + log.info("[天助预约平台] 确定预约json={}",JsonHelper.toProJsonString(params)); + RequestBody requestBody = RequestBody.create(JSON, JsonHelper.toProJsonString(params)); String result = OkHttpHelper.post(MEDICAL_TECHNOLOGY_RESERVE_JSON_URL+"/BookDetails/BookDetails/GetBookedDateTime",requestBody,headers -> { headers.add("token",getToken()); }); JSONObject jsonObject = JsonHelper.parseObject(result); if(jsonObject==null){ log.info("[天助预约平台] examRoomOrQueue-{},startDate-{},endDate-{},appFromID-{}, patientId-{},patientName-{}, 提交预约具体时间失败,result-{}",examRoomOrQueue,beginDateTime,endDateTime,appFormID,patientId,patientName,result); - return null; + return Result.error(); } if(!"0".equals(jsonObject.getString("resultCode"))){ log.info("[天助预约平台] 提交预约具体时间失败,失败原因-{}",jsonObject.getString("resultContent")); - return null; + return Result.error(jsonObject.getString("resultCode")); } - return jsonObject.getJSONArray("bookedInfos").toJavaList(BookedInfo.class).get(0); + return Result.success(jsonObject.getJSONArray("bookedInfos").toJavaList(BookedInfo.class).get(0)); } diff --git a/src/main/java/com/ynxbd/wx/config/MiddleOfficeConfig.java b/src/main/java/com/ynxbd/wx/config/MiddleOfficeConfig.java index 490d2e5..8af0e24 100644 --- a/src/main/java/com/ynxbd/wx/config/MiddleOfficeConfig.java +++ b/src/main/java/com/ynxbd/wx/config/MiddleOfficeConfig.java @@ -24,6 +24,7 @@ public class MiddleOfficeConfig { } // 佳禾美康数据上传链接 public static final String MIDDLE_OFFICE_URL; + public static final String MIDDLE_OFFICE_URL_ESB; public static final String MIDDLE_OFFICE_HOSPITAL; public static final String MIDDLE_OFFICE_ITEM_NAME; @@ -33,6 +34,7 @@ public class MiddleOfficeConfig { ProperHelper config = new ProperHelper().read("middle-office.properties"); MIDDLE_OFFICE_URL = config.getString("middle_office_url"); MIDDLE_OFFICE_HOSPITAL = config.getString("middle_office_hospital"); + MIDDLE_OFFICE_URL_ESB = config.getString("middle_office_url_esb"); MIDDLE_OFFICE_ITEM_NAME = config.getString("middle_office_item_name"); } @@ -68,7 +70,6 @@ public class MiddleOfficeConfig { interfaceName=isMD?"JH1420R":"JH1409R"; break; case "3006": - case "4007": interfaceName = "JH1410R"; break; case "10": @@ -88,7 +89,7 @@ public class MiddleOfficeConfig { public static void upload(String interfaceName,String jsonData){ try { - log.info("[平台数据上传]开始,interfaceName:{},jsonData:{}",interfaceName,jsonData); +// log.info("[平台数据上传]开始,interfaceName:{},jsonData:{}",interfaceName,jsonData); if("".equals(interfaceName)||"".equals(jsonData)||interfaceName==null||jsonData==null){ return; } @@ -127,7 +128,7 @@ public class MiddleOfficeConfig { @Override public void onResponse(Call call, Response response) { //不在ui线程 - log.info("[平台数据上传]成功 状态码:{},interfaceName:{},jsonData:{}",response.code(),interfaceName,jsonData); +// log.info("[平台数据上传]成功 状态码:{},interfaceName:{},jsonData:{}",response.code(),interfaceName,jsonData); } }); } @@ -136,4 +137,53 @@ public class MiddleOfficeConfig { } } + public static void uploadTreatNum(String interfaceName,String treatNum){ + try { + log.info("[平台数据上传]开始,interfaceName:{},treatNum:{}",interfaceName,treatNum); + if("".equals(interfaceName)||"".equals(treatNum)||interfaceName==null||treatNum==null){ + return; + } + + + JSONObject json = new JSONObject(); + JSONObject head = new JSONObject(); + JSONObject body = new JSONObject(); + + head.put("hospital",MIDDLE_OFFICE_HOSPITAL); + head.put("itemName","微信"); + head.put("interface",interfaceName); + body.put("opc_id",treatNum); + json.put("head",head); + json.put("body",body); + + RequestBody requestBody = RequestBody.create(MediaType.parse("application/json;charset=utf-8"), String.valueOf(json)); + + Headers headers = new Headers.Builder() + .add("Content-Type", "application/json") + .build(); + + Request request = new Request.Builder() + .url(MIDDLE_OFFICE_URL_ESB) + .post(requestBody) + .headers(headers) + .build(); + + OkHttpClient okHttpClient = new OkHttpClient(); + Call call = okHttpClient.newCall(request); + call.enqueue(new Callback() { + @Override + public void onFailure(Call call, IOException e) { + log.error("[平台数据上传]上传失败,head:{},body:{},url:{}",head,body,MIDDLE_OFFICE_URL_ESB); + } + + @Override + public void onResponse(Call call, Response response) { //不在ui线程 + log.info("[平台数据上传]成功 状态码:{},head:{},body:{},url:{}",response.code(),head,body,MIDDLE_OFFICE_URL_ESB); + } + }); + } + catch (Exception e){ + log.error("[平台数据上传]执行失败,interfaceName:{},treatNum:{},error:{}",interfaceName,treatNum,e.toString()); + } + } } diff --git a/src/main/java/com/ynxbd/wx/servlet/QServlet.java b/src/main/java/com/ynxbd/wx/servlet/QServlet.java index 2a6f28a..63db59d 100644 --- a/src/main/java/com/ynxbd/wx/servlet/QServlet.java +++ b/src/main/java/com/ynxbd/wx/servlet/QServlet.java @@ -63,6 +63,11 @@ public class QServlet extends HttpServlet { patientId = "0"; //patientId 赋值0 } + if (patientId.contains(".") || patientId.contains("/") || patientId.contains("http")) { + log.info("[支付] 多张扫码请求 参数无效"); + return; + } + if (MerchantEnum.WX.equals(merchantEnum)) { response.sendRedirect(WeChatConfig.getWebUrl() + "pay-qr-recipe.html?p=" + patientId + "&enp=" + ReqParamHelper.encode(patientId)+ "&ent=" + request.getParameter("t")); } diff --git a/src/main/java/com/ynxbd/wx/utils/DesEncryptHelper.java b/src/main/java/com/ynxbd/wx/utils/DesEncryptHelper.java index 9237064..cf65837 100644 --- a/src/main/java/com/ynxbd/wx/utils/DesEncryptHelper.java +++ b/src/main/java/com/ynxbd/wx/utils/DesEncryptHelper.java @@ -20,7 +20,7 @@ public class DesEncryptHelper { public static void main(String[] args) { String s = enCode("oeso-t62kkoRwLVVkSkwmmjPfUXk"); - String a= deCode("0F458085FBA567B4D3DD765FBE368DF9C2CD2F13C9166A2584728882EE9C8121DC394566C048C31C08411BEBFF000B4D58BCCD6B36FB6089ED5313608851AF7CD0D296DD7C67F6517668E1E6217B5F26DD44D9B0A548C6160D457F507F7443C15C33D6AA8241FEE9B32C081570BFB6DE1B94F00DA5DDB0B3BB9F1BB619CB1952180BA3FAA56BE470"); + String a= deCode("2235AE2E1563DF971CBF4C3F2D4DC06F1D0AA3BF5EA65B865C5DF0E0694DF3FFBA5360D9607A60F80CC71F9C7D7E8F241E00310C63D5C5B414D5FEB43A0B2E7A2AA335CD601DB3727BAF0DFEDB48388CFEA7A8301CDEAA42817F7316E6CBF0B7AC2671148FCA0E2DA337CF664C0C4FD85F7D799D496125D2186D82889E6B81D25107616591DDC46D"); System.out.println(a); } diff --git a/src/main/java/com/ynxbd/wx/wxfactory/ReqParamHelper.java b/src/main/java/com/ynxbd/wx/wxfactory/ReqParamHelper.java index 4ec6a5f..e7079e6 100644 --- a/src/main/java/com/ynxbd/wx/wxfactory/ReqParamHelper.java +++ b/src/main/java/com/ynxbd/wx/wxfactory/ReqParamHelper.java @@ -21,7 +21,7 @@ public class ReqParamHelper { } public static void main(String[] args) { - System.out.println(encode("472760")); - System.out.println(decode("0F458085FBA567B4D3DD765FBE368DF9C2CD2F13C9166A2584728882EE9C8121DC394566C048C31C08411BEBFF000B4D58BCCD6B36FB6089ED5313608851AF7CD0D296DD7C67F6517668E1E6217B5F26DD44D9B0A548C6160D457F507F7443C15C33D6AA8241FEE9B32C081570BFB6DE1B94F00DA5DDB0B3BB9F1BB619CB1952180BA3FAA56BE470")); + System.out.println(encode("164649")); + System.out.println(decode("1D9BD9BA3A6DC0A9B40BE40234497596")); } } diff --git a/src/main/java/com/ynxbd/wx/wxfactory/WxMedicalHelper.java b/src/main/java/com/ynxbd/wx/wxfactory/WxMedicalHelper.java index fdf8e38..fdb2e09 100644 --- a/src/main/java/com/ynxbd/wx/wxfactory/WxMedicalHelper.java +++ b/src/main/java/com/ynxbd/wx/wxfactory/WxMedicalHelper.java @@ -42,7 +42,7 @@ public class WxMedicalHelper { if (cardNo != null) { String meCardNo = info.getCardNo(); - if (meCardNo != null && !cardNo.equals(meCardNo)) { + if (meCardNo != null && !cardNo.equalsIgnoreCase(meCardNo)) { String tip = null; if (realName != null) { String userName = info.getUserName(); @@ -236,6 +236,7 @@ public class WxMedicalHelper { } + /** * [医保]获取授权链接 */ 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 fd03c42..6256651 100644 --- a/src/main/java/com/ynxbd/wx/wxfactory/medical/Client.java +++ b/src/main/java/com/ynxbd/wx/wxfactory/medical/Client.java @@ -35,6 +35,8 @@ public class Client { return MdConfig.getConfigUrl(url); } + + /** * 微信医保下单 * diff --git a/src/main/java/com/ynxbd/wx/wxfactory/medical/MdConfig.java b/src/main/java/com/ynxbd/wx/wxfactory/medical/MdConfig.java index af094a4..72ea543 100644 --- a/src/main/java/com/ynxbd/wx/wxfactory/medical/MdConfig.java +++ b/src/main/java/com/ynxbd/wx/wxfactory/medical/MdConfig.java @@ -85,6 +85,7 @@ public class MdConfig { } + private static String bytesToHex(byte[] bytes) { char[] hexChars = new char[bytes.length * 2]; for (int j = 0; j < bytes.length; j++) { diff --git a/src/main/java/com/ynxbd/wx/wxfactory/utils/WxPassiveReplyHelper.java b/src/main/java/com/ynxbd/wx/wxfactory/utils/WxPassiveReplyHelper.java index 0c4fafa..a120dae 100644 --- a/src/main/java/com/ynxbd/wx/wxfactory/utils/WxPassiveReplyHelper.java +++ b/src/main/java/com/ynxbd/wx/wxfactory/utils/WxPassiveReplyHelper.java @@ -345,33 +345,42 @@ public class WxPassiveReplyHelper { respInfo = "您好,您可以拨打投诉电话:0888-5112778或行政值班电话:0888-5115602进行投诉"; } else if (content.contains("电话")) { - respInfo = "玉龙县人民医院行政值班电话:0888-5115602\n" + - "外一科(泌尿外科):0888-5156546\n" + - "外二科(普通外科、乳腺外科):0888-5172791\n" + - "外三科(骨科、神经外科):0888-5129570\n" + - "外四科(胸心血管外科):0888-5172632\n" + - "内一科(神经内分泌科):0888-5123615\n" + - "内二科(心血管内科):0888-5163257\n" + - "内三科(消化内科):0888-5179785\n" + - "内四科(感染性疾病科):0888-5102655\n" + - "内五科(呼吸与危重症医学科):0888-5390632\n" + - "中医科:0888-5110125\n" + - "妇产科:0888-5180763\n" + - "儿科:0888-5110667\n" + - "麻醉手术科:0888-5186925\n" + - "重症医学科:0888-5108252\n" + - "康复科:0888-5169002\n" + - "老年医学科:0888-5169002\n" + - "眼耳鼻喉科:0888-5186747\n" + - "急诊科:0888-5186934\n" + - "口腔科:0888-5179715\n" + - "体检科:0888-5182024\n" + - "医学检验科:0888-5180762\n" + - "超声医学科:0888-5116254\n" + - "医学影像科:0888-5187393\n" + - "药学部:0888-5122672\n" + - "内镜中心:0888-5304137\n" + - "临床营养科:0888-5135525\n"; + respInfo = + "玉龙县人民医院行政值班电话:0888-5115602\n" + + "神经内科、内分泌科、血液内科、风湿免疫科(内一科):0888-5123615\n" + + "心血管内科、心电图室(内二科):0888-5163257\n" + + "消化内科、肿瘤科(内三科):0888-5179785\n" + + "感染性疾病科(内四科):0888-5102655\n" + + "呼吸与危重症医学科(内五科):0888-5390632\n" + + "泌尿外科(外一科):0888-5156546\n" + + "普通外科(外二科):0888-5172791\n" + + "骨科、神经外科(外三科):0888-5129570\n" + + "胸外科、心脏大血管外科、乳腺外科(外四科):0888-5172632\n" + + "急诊医学科:0888-5186934\n" + + "麻醉科、手术室(手术麻醉科):0888-5186925\n" + + "妇产科:0888-5180763\n" + + "儿科:0888-5110667\n" + + "眼科、耳鼻咽喉科:0888-5186747\n" + + "口腔科(门诊):0888-5179715\n" + + "健康体检管理中心咨询电话:0888-5182024\n" + + "中医科:0888-5110125\n" + + "康复医学科(高压氧治疗室):0888-5169002\n" + + "重症医学科:0888-5108252\n" + + "老年医学科、肾内科:0888-5169002\n" + + "医学检验科:0888-5180762\n" + + "临床营养科:0888-5135525\n" + + "病理科:0888-5127597\n" + + "医学影像科:0888-5187393\n" + + "超声医学科:0888-5116254\n" + + "内镜中心:0888-5304137\n" + + "药剂科:0888-5122672\n" + + "党委办公室:0888-5110767\n" + + "行政办公室:0888-5112778\n" + + "医疗事务部:0888-5109120\n" + + "护理部:0888-5122871\n" + + "感染管理部:0888-5115466\n" + + "采购管理部:0888-5307952\n" + + "后勤保障部:0888-5107111"; } else if (content.contains("体检")) { respInfo = "您好,您可以拨打体检科电话:0888-5182024进行详细咨询"; diff --git a/src/main/resources/middle-office.properties b/src/main/resources/middle-office.properties index bd94665..a57e0d4 100644 --- a/src/main/resources/middle-office.properties +++ b/src/main/resources/middle-office.properties @@ -1,3 +1,4 @@ middle_office_url= http://10.255.248.20:9095/proxy/ -middle_office_hospital = 红河州第一人民医院 -middle_office_item_name = 嘉和美康 +middle_office_url_esb= http://10.255.248.20:8082/api/esb/ +middle_office_hospital = \u7ea2\u6cb3\u5dde\u7b2c\u4e00\u4eba\u6c11\u533b\u9662 +middle_office_item_name = \u5609\u548c\u7f8e\u5eb7 diff --git a/src/main/resources/xbd.properties b/src/main/resources/xbd.properties index ac91206..39d2266 100644 --- a/src/main/resources/xbd.properties +++ b/src/main/resources/xbd.properties @@ -1,3 +1,14 @@ xbd.out_team_cloud_film_link= http://192.168.10.43:3307/wx3307 xbd.medical_record_remake_url = http://192.168.12.66:8081 -xbd.peis = http://192.168.12.102:3000/peisReserve \ No newline at end of file +xbd.peis = http://192.168.12.102:3000/peisReserve + + + +#location /wx3303{ +#proxy_pass http://10.20.11.60:3303; +#proxy_set_header X-Real-IP $remote_addr; +#proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; +#proxy_set_header Host $host; +#proxy_set_header Upgrade-Insecure-Requests 1; +#proxy_set_header X-Forwarded-Proto https; +#} \ No newline at end of file