版本提交

debug
李进才 1 year ago
parent fe10e472cf
commit eab86a8d7c
  1. 14
      src/main/java/com/ynxbd/common/action/ApiAction.java
  2. 51
      src/main/java/com/ynxbd/common/action/RecipeAction.java
  3. 4
      src/main/java/com/ynxbd/common/action/RegisterAction.java
  4. 4
      src/main/java/com/ynxbd/common/action/TreatAction.java
  5. 3
      src/main/java/com/ynxbd/common/action/XBDAction.java
  6. 14
      src/main/java/com/ynxbd/common/action/pay/MedicalAction.java
  7. 2
      src/main/java/com/ynxbd/common/action/pay/PEnum.java
  8. 1
      src/main/java/com/ynxbd/common/bean/Dept.java
  9. 4
      src/main/java/com/ynxbd/common/bean/enums/HospEnum.java
  10. 14
      src/main/java/com/ynxbd/common/dao/his/HisRegisterDao.java
  11. 4
      src/main/java/com/ynxbd/common/dao/his/HisTreatDao.java
  12. 7
      src/main/java/com/ynxbd/common/dao/peis/PeisDao.java
  13. 2
      src/main/java/com/ynxbd/common/service/AIGuidanceService.java
  14. 9
      src/main/java/com/ynxbd/common/service/PeisService.java
  15. 5
      src/main/java/com/ynxbd/common/service/RegService.java
  16. 32
      src/main/java/com/ynxbd/wx/config/MessagePushConfig.java
  17. 20
      src/main/java/com/ynxbd/wx/servlet/test/OrderTest.java
  18. 2
      src/main/java/com/ynxbd/wx/utils/DesEncryptHelper.java
  19. 4
      src/main/java/com/ynxbd/wx/wxfactory/ReqParamHelper.java
  20. 13
      src/main/resources/message-push.properties

@ -11,6 +11,7 @@ import com.ynxbd.common.result.ServiceException;
import com.ynxbd.common.service.ReportService;
import com.ynxbd.wx.config.WeChatConfig;
import com.ynxbd.wx.utils.DesEncryptHelper;
import com.ynxbd.wx.wxfactory.ReqParamHelper;
import com.ynxbd.wx.wxfactory.WxAuthHelper;
import com.ynxbd.wx.wxfactory.WxCacheHelper;
import com.ynxbd.wx.wxfactory.bean.AccessToken;
@ -19,6 +20,7 @@ import org.apache.commons.lang3.ObjectUtils;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Namespace;
import java.util.Base64;
import java.util.HashMap;
import java.util.Map;
@ -165,6 +167,18 @@ public class ApiAction extends BaseAction {
return Result.success(base);
}
@Action("getEnPatientId")
public Result getEnPatientId(String patientId){
if(patientId==null){
return Result.error(ResultEnum.PARAM_IS_DEFECT);
}
patientId = ReqParamHelper.encode(patientId);
for (int i = 0; i< 3;i++){
patientId = Base64.getEncoder().encodeToString(patientId.getBytes());
}
return Result.success(patientId);
}
/**
* 清除患者缓存
*

@ -4,20 +4,30 @@ import com.ynxbd.common.action.base.BaseAction;
import com.ynxbd.common.bean.HisRecipe;
import com.ynxbd.common.bean.NatRecord;
import com.ynxbd.common.bean.Patient;
import com.ynxbd.common.bean.enums.MerchantEnum;
import com.ynxbd.common.bean.pay.Recipe;
import com.ynxbd.common.bean.xk.medicalRecipe;
import com.ynxbd.common.dao.NatRecordDao;
import com.ynxbd.common.dao.PatientDao;
import com.ynxbd.common.dao.his.HisRecipeDao;
import com.ynxbd.common.dao.peis.PeisDao;
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 com.ynxbd.common.result.Result;
import com.ynxbd.common.result.ResultEnum;
import com.ynxbd.common.service.PeisService;
import com.ynxbd.common.service.RecipeService;
import com.ynxbd.wx.config.WeChatConfig;
import lombok.extern.slf4j.Slf4j;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Namespace;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 处方
@ -129,6 +139,47 @@ public class RecipeAction extends BaseAction {
// }
/**
* 预约体检his缴费
* @param treatNum 体检号
* @param payMoney 缴费金额
* @param payDate 缴费日期
* @param payTime 缴费时间
* @param bankTransNo bankTransNo
* @param outTranNo outTranNo
*/
@Action("peisHisPay")
public Result peisHisPay(String treatNum,String payMoney,String payDate,String payTime,String bankTransNo,String outTranNo){
log.info("[体检预约请求his计费]treatNum-{},payMoney-{},payDate-{},payTime-{},bankTransNo-{},outTranNo-{}",treatNum,payMoney,payDate,payTime,bankTransNo,outTranNo);
if("".equals(treatNum)||"".equals(outTranNo)){
return Result.error(ResultEnum.PARAM_IS_DEFECT);
}
Recipe recipe = new PeisDao().selectByOutTradeNo(outTranNo);
if(recipe==null){
return Result.error(ResultEnum.DATA_NOT_FOUND);
}
if(!recipe.getBankTransNo().equals(bankTransNo)){
log.info("[体检预约请求his计费]体检系统跟微信支付系统两笔订单不一致,体检系统:bankTransNo-{},微信系统:bankTransNo-{}",bankTransNo,recipe.getBankTransNo());
return Result.error(ResultEnum.DATA_IS_WRONG);
}
Map<String,Object> params = new HashMap<>();
params.put("MZNum", "0");
params.put("PatientID", "0");
params.put("TJBH",treatNum);
params.put("GroupFlag","1");
params.put("PayMoney", payMoney);
params.put("PayDate", payDate);
params.put("PayTime", payTime);
params.put("TransNo", recipe.getTradeNo());
params.put("PayDeviceID", "app");
params.put("PayWay", MerchantEnum.WX.HIS_PAY_WAY);
params.put("BankTransNo", bankTransNo); // 商户订单号
params.put("OpenId", recipe.getOpenid());
params.put("Token", WeChatConfig.TOKEN);
JsonResult result = HisHelper.getJsonResult(HisEnum.AP_Pay_Invoice, params, MerchantEnum.WX);
return result.success()?Result.success(result):Result.error(result.getMessage());
}
/**
* 标准物价查询
*

@ -70,13 +70,13 @@ public class RegisterAction extends BaseAction {
* @return 科室列表
*/
@Action("getTimeDeptList")
public Result getTimeDeptList(String merCode, String begDate, String endDate) {
public Result getTimeDeptList(String merCode, String begDate, String endDate,String deptCode) {
log.info("[分时段挂号]查询科室列表 begDate={}, endDate={}", begDate, endDate);
if (begDate == null || endDate == null) {
return Result.error(ResultEnum.PARAM_IS_DEFECT);
}
List<Dept> deptList = new HisRegisterDao().getTimeDeptList(begDate, endDate);
List<Dept> deptList = new HisRegisterDao().getTimeDeptList(begDate, endDate,deptCode);
MerchantEnum merchantEnum = MerchantEnum.getMerchantEnumByCode(merCode);
if (MerchantEnum.ALI.equals(merchantEnum)) {

@ -34,14 +34,14 @@ public class TreatAction extends BaseAction {
@Action("createTreatRecord")
public Result createTreatRecord(String treatNum) {
public Result createTreatRecord(String treatNum,String deptCode,String doctCode) {
log.info("[就诊记录]创建 treatNum={}", treatNum);
try {
if (treatNum == null) {
return Result.error(ResultEnum.PARAM_IS_DEFECT);
}
HisTreat treat = new HisTreatDao().createTreat(treatNum);
HisTreat treat = new HisTreatDao().createTreat(treatNum,deptCode,doctCode);
return Result.success(treat);
} catch (ServiceException e) {
return Result.error(e);

@ -50,8 +50,9 @@ public class XBDAction extends BaseAction {
*/
@Action("getMedicalRecordList")
public Result getMedicalRecordList(String patientId,Integer flagSh){
String realPatientId =getDecodeString(patientId);
String jsonString = XBDHttpHelper.ExecMethodGet(XBDEnum.BLSM_Appointment_GetBA.Name,params->{
params.put("patientID",patientId);
params.put("patientID",realPatientId);
params.put("flagFP",0);
params.put("flagSH",flagSh);
});

@ -25,6 +25,7 @@ import com.ynxbd.wx.wxfactory.bean.*;
import com.ynxbd.wx.wxfactory.medical.MdConfig;
import com.ynxbd.wx.wxfactory.utils.MdRespHelper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Namespace;
@ -93,6 +94,19 @@ public class MedicalAction extends BaseAction {
JSONObject respJson = WxMedicalHelper.getMdAuthUrl("wx-medical-refund.html", null);
return Result.success(respJson);
}
/**
* [处方流转]获取授权链接
*/
@Action("getAuthUrl")
public Result getAuthUrl(String url, String callNo) {
if (ObjectUtils.isEmpty(url) || ObjectUtils.isEmpty(callNo)) {
return Result.error(ResultEnum.PARAM_IS_INVALID);
}
JSONObject respJson = WxMedicalHelper.getMdAuthUrl(url, callNo);
return Result.success(respJson);
}
@Action("getMedicalAuthUrl")
public Result getMedicalAuthUrl(String url) {
JSONObject respJson = WxMedicalHelper.getMdAuthUrl(url, null);

@ -14,7 +14,7 @@ public enum PEnum {
REG("挂号", "register", "G"),
RECIPE("处方", "recipe", "C"),
PEIS_RESERVE("体检预约","PEIS_reserve", "T"),
PEIS_RESERVE("体检预约","PEIS_reserve", "P"),
IN_HOSP("住院", "in_hosp", "Z"),

@ -41,6 +41,7 @@ public class Dept implements Serializable {
private String deptTypeName;
// 科室描述
private String description;
private String sourceInfo;
// 科室拼音码
private String pym;
// 备注

@ -9,7 +9,9 @@ import com.ynxbd.wx.config.WeChatConfig;
*/
public enum HospEnum {
德宏州中医医院("wxadc09f1c9d0bccee", "");
德宏州中医医院("wxadc09f1c9d0bccee", ""),
红河州人民医院("wxd503671f502bd89d","");
public final String APP_ID;

@ -645,11 +645,11 @@ public class HisRegisterDao {
* @param endDate 结束时间
* @return 科室列表
*/
public List<Dept> getTimeDeptList(String begDate, String endDate) {
public List<Dept> getTimeDeptList(String begDate, String endDate,String deptCode) {
List<Dept> deptList = new ArrayList<>();
Map<String, Object> params = new HashMap<>();
params.put("DeptCode", "");// 空为所有
params.put("DeptCode", deptCode);// 空为所有
params.put("RegistBegDate", begDate);
params.put("RegistEndDate", endDate);
params.put("CanRegistFlag", "1"); // 1:返回有号源的科室
@ -664,25 +664,25 @@ public class HisRegisterDao {
Dept dept;
JSONObject nodeItem;
String address, deptCode, deptName, hospitalAreaName;
String address, returnDeptCode, deptName, hospitalAreaName;
RegisterDao registerDao = new RegisterDao();
List<Dept> wxDeptList = registerDao.selectDeptList();
String subDeptJson;
List<Dept> subDeptList;
String subDeptName, subDeptCode, subDeptNote;
String subDeptName, subDeptCode, subDeptNote, subDeptSourceInfo;
JSONObject subDeptItem;
Dept subDept;
for (int i = 0; i < jsonArray.size(); i++) {
nodeItem = jsonArray.getJSONObject(i);
deptCode = nodeItem.getString("Code");
returnDeptCode = nodeItem.getString("Code");
deptName = nodeItem.getString("Name");
address = nodeItem.getString("Address");
hospitalAreaName = nodeItem.getString("HospitalAreaName");
// 科室过滤
dept = registerDao.deptFilter(wxDeptList, deptCode, deptName, address, hospitalAreaName);
dept = registerDao.deptFilter(wxDeptList, returnDeptCode, deptName, address, hospitalAreaName);
if (dept != null) {
// 亚专科
subDeptJson = nodeItem.getString("Code_YZKStr");
@ -696,10 +696,12 @@ public class HisRegisterDao {
subDeptName = subDeptItem.getString("Name");
subDeptCode = subDeptItem.getString("Code");
subDeptNote = subDeptItem.getString("Note");
subDeptSourceInfo = subDeptItem.getString("SourceInfo");
subDept = new Dept();
subDept.setDeptName(subDeptName);
subDept.setDeptCode(subDeptCode);
subDept.setNote(subDeptNote);
subDept.setSourceInfo(subDeptSourceInfo);
subDeptList.add(subDept);
}
dept.setChildren(subDeptList);

@ -41,9 +41,11 @@ public class HisTreatDao {
*
* @param treatNum 门诊号
*/
public HisTreat createTreat(String treatNum) throws ServiceException {
public HisTreat createTreat(String treatNum,String deptCode,String doctCode) throws ServiceException {
JsonResult jsonResult = HisHelper.getJsonResult(HisEnum.XK_CREATE_TREAT, params -> {
params.put("MZNum", treatNum);
params.put("DeptCode",deptCode);
params.put("DoctCode",doctCode);
});
if (jsonResult.success()) {

@ -97,11 +97,12 @@ public class PeisDao {
}) > 0;
}
public boolean updatePayStateOk(String outTradeNo, String bankTransNo) {
String sql = "update peis_reserve set payStatus=0, bankTransNo=? where outTradeNo=? and bankTransNo is null";
public boolean updatePayStateOk(String outTradeNo, String bankTransNo,String tradeNo) {
String sql = "update peis_reserve set payStatus=0, bankTransNo=?, TradeNo=? where outTradeNo=? and bankTransNo is null";
return DataBase.update(sql, ps -> {
ps.setString(1, bankTransNo);
ps.setString(2, outTradeNo);
ps.setString(2, tradeNo);
ps.setString(3, outTradeNo);
}) > 0;
}

@ -81,7 +81,7 @@ public class AIGuidanceService {
}
String curDate = DateHelper.getCurDate();
List<Dept> deptList = new HisRegisterDao().getTimeDeptList(curDate, DateHelper.getMoveDate(curDate, 7));
List<Dept> deptList = new HisRegisterDao().getTimeDeptList(curDate, DateHelper.getMoveDate(curDate, 7),"");
String webUrl = WeChatConfig.getWebUrl();
int index = webUrl.indexOf("http://");
if (index == 0) {

@ -2,11 +2,13 @@ package com.ynxbd.common.service;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.ynxbd.common.action.pay.PEnum;
import com.ynxbd.common.bean.enums.MerchantEnum;
import com.ynxbd.common.bean.pay.Order;
import com.ynxbd.common.bean.pay.Recipe;
import com.ynxbd.common.dao.peis.PeisDao;
import com.ynxbd.common.helper.common.JsonHelper;
import com.ynxbd.common.helper.his.HisHelper;
import com.ynxbd.common.helper.http.OkHttpHelper;
import com.ynxbd.common.helper.xbd.HttpHelper;
import com.ynxbd.common.helper.xbd.XBDHelper;
@ -53,14 +55,15 @@ public class PeisService {
public void payNotify(MerchantEnum merchantEnum, String openid, BigDecimal totalFee, String outTradeNo, String bankTransNo, String payInfo,Date tradeDate){
PeisDao peisDao = new PeisDao();
Recipe recipe = peisDao.selectByOutTradeNo(outTradeNo);
String tradeNo = HisHelper.getHisTradeNo(bankTransNo, PEnum.PEIS_RESERVE);
String recipeId = recipe.getRecipeId();
Integer payStates = recipe.getPayStatus();
if (payStates == 0) {
log.error("[体检预约] 拒绝支付-订单已支付 outTradeNo={}, bankTransNo={}, recipeId={}", outTradeNo, bankTransNo, recipeId);
return;
}
if (!peisDao.updatePayStateOk(outTradeNo, bankTransNo)) {
log.info("[体检预约]修改支付状态失败 outTradeNo={}, bankTransNo={}", outTradeNo, bankTransNo);
if (!peisDao.updatePayStateOk(outTradeNo, bankTransNo,tradeNo)) {
log.info("[体检预约]修改支付状态失败 outTradeNo={}, bankTransNo={},tradeNo-{}", outTradeNo, bankTransNo,tradeNo);
RequestBody formBody = new FormBody.Builder().
add("orderNo", recipeId)
.add("payStatus","FAIL")
@ -145,7 +148,7 @@ public class PeisService {
// }
if(isCost){
log.info("{} [体检预约][退费错误,his显示已计费,不允许退费] outTradeNo={}, recipeId={}, totalFee={}", merchantEnum.NAME, outTradeNo, recipeId, totalFee);
return Result.error("退费错误,his显示已计费,不允许退费");
return Result.error("退费错误,体检系统his显示已计费,不允许退费");
}
String refundResult;
Order orderRefund = PayService.refund(merchantEnum, outTradeNo, recipeId, totalFee, totalFee, pushInfo, tradeDate, openid, null, pushInfo);

@ -206,6 +206,11 @@ public class RegService {
log.info("{} [挂号]更新HIS挂号信息成功 patientId={}", merchantEnum.NAME, patientId);
}
if(HospEnum.isHosp(HospEnum.红河州人民医院)&&"0503".equals(reg.getDeptCode())){
MessagePushConfig.regObsDocument(merchantEnum,reg);
}
// 短信通知
smsNotice(reg);

@ -9,6 +9,8 @@ import com.ynxbd.common.helper.ProperHelper;
import com.ynxbd.common.helper.http.OkHttpHelper;
import com.ynxbd.wx.utils.DesEncryptHelper;
import lombok.extern.slf4j.Slf4j;
import okhttp3.FormBody;
import okhttp3.RequestBody;
import org.apache.commons.lang3.ObjectUtils;
import java.util.List;
@ -33,6 +35,8 @@ public class MessagePushConfig {
// 消息推送链接
public static final String REG_CANCEL_URL;
public static final String OBS_DOCUMENT;
// 是否开启功能============================================
public static final boolean RECIPE_IS_ENABLE;
@ -52,6 +56,7 @@ public class MessagePushConfig {
//
REG_IS_ENABLE = config.getBoolean("msg.reg.is_enable", false);
REG_URL = config.getString("msg.reg.url");
OBS_DOCUMENT = config.getString("msg.obs.document");
//
REG_CANCEL_IS_ENABLE = config.getBoolean("msg.reg.cancel.is_enable", false);
REG_CANCEL_URL = config.getString("msg.reg.cancel.url");
@ -162,6 +167,33 @@ public class MessagePushConfig {
}
}
public static void regObsDocument(MerchantEnum merchantEnum, Register reg){
try {
if (!merchantEnum.equals(MerchantEnum.WX)
|| reg == null || ObjectUtils.isEmpty(OBS_DOCUMENT)) {
return;
}
log.info("[推送]产科建档推送通知...");
String patientId = reg.getPatientId();
if ( patientId == null) {
log.warn("[推送]产科建档推送通知失败,参数缺失~ patientId= null");
return;
}
RequestBody requestBody = new FormBody.Builder()
.add("patientId",patientId)
.add("content","[孕产建档提示]尊敬的孕妈妈您好!为了向您提供更好的服务,请点击下方链接完成孕产建档,若您已建档请忽略!")
.add("url","https://zhck.hhzyy.com:10082/wxapp/")
.add("organizeName","4B80803106B38A5F")
.add("buttonName","进入产科建档系统")
.build();
OkHttpHelper.post(OBS_DOCUMENT, requestBody);
} catch (Exception e) {
log.warn("[推送]产科建档推送通知错误-{}", e.getMessage());
}
}
/**
* 取消预约推送

@ -1,6 +1,8 @@
package com.ynxbd.wx.servlet.test;
import com.ynxbd.common.bean.pay.Order;
import com.ynxbd.common.bean.pay.Recipe;
import com.ynxbd.common.dao.RecipeDao;
import com.ynxbd.wx.config.WeChatConfig;
import com.ynxbd.common.helper.common.CodeHelper;
import com.ynxbd.common.helper.common.ErrorHelper;
@ -75,9 +77,21 @@ public class OrderTest {
}
public static void main(String[] args){
String piMd5 = "9444144" + "T2001" + "xbd";
piMd5 = DigestUtils.md5Hex(piMd5).toUpperCase();
System.out.println(piMd5);
// String piMd5 = "9444144" + "T2001" + "xbd";
// piMd5 = DigestUtils.md5Hex(piMd5).toUpperCase();
// System.out.println(piMd5);
Recipe recipe = new Recipe();
recipe.setOpenid("test");
recipe.setPatientId("test");
recipe.setOutTradeNo("test");
recipe.setRecipeFee(new BigDecimal(10));
recipe.setTotalFee(new BigDecimal(10));
recipe.setTreatNum("test");
recipe.setPayWay("1");
recipe.setRecipeId("1");
recipe.setHisStatus(-1);
recipe.setPayStatus(-1);
new RecipeDao().insert(recipe);
}
}

@ -20,7 +20,7 @@ public class DesEncryptHelper {
public static void main(String[] args) {
String s = enCode("oeso-t62kkoRwLVVkSkwmmjPfUXk");
String a= deCode("63E55CC1CC18DA5DF786FA985D60BCF5E7CD1F925928AB92E75F00E16C14D180C3EEC068D96124953A20B27E5F673E9417F5E3B8B29B116B29B10E1B611BDCBC37D5916AA86830CCF1E9BEDBD4CB1642E174481814738DECC875FA26781DC6546AAA205CE74F3B6A284E738AC3D0D2B60DCB8B29E78277798B0639BE9CC546A9479819B0095698BB");
String a= deCode("6A5F4D90B08AB69D76F965A215291AE702580102285E2794B179D9EBB0158FE407013F53E8B604E3DF8D47514CA9F0CA8085EDFDC3866014497AB6D0A8EE0B6C0BC104B63A47019C276711A08CD9599C566CEA56DCBA9C354F91153DC87EA039065FBF59FD5AB9BD438BA9CBF6BBD985AB4D6CB588CC4E421327D82D4AECA922A7D3424C389862EF");
System.out.println(a);
}

@ -21,7 +21,7 @@ public class ReqParamHelper {
}
public static void main(String[] args) {
System.out.println(encode("11269420"));
System.out.println(decode("5AE40D74FFF8C3F14A0491F8824C61EE"));
System.out.println(encode("498732"));
System.out.println(decode("082227421D7D4FDA6F73999AC7D4BF69"));
}
}

@ -1,14 +1,17 @@
# 消息推送
# 挂号-导航推送
msg.host.url = http://127.0.0.1:8123/messageplatform/
msg.host.url = http://127.0.0.1:8123/MessagePlatform/
msg.reg.navigate.is_enable=false
msg.reg.navigate.url=http://127.0.0.1:8123/messageplatform/daoyixun
msg.reg.navigate.url=http://127.0.0.1:8123/MessagePlatform/daoyixun
# 挂号-文字提示推送
msg.reg.is_enable=false
msg.reg.url=http://127.0.0.1:8123/messageplatform/appointmentsuccess
msg.reg.url=http://127.0.0.1:8123/MessagePlatform/appointmentsuccess
# 挂号-取消预约推送
msg.reg.cancel.is_enable=false
msg.reg.cancel.url=http://127.0.0.1:8123/messageplatform/appointmentcancel
msg.reg.cancel.url=http://127.0.0.1:8123/MessagePlatform/appointmentcancel
# 缴费
msg.recipe.is_enable=false
msg.recipe.url=http://127.0.0.1:8123/messageplatform/paymentsuccess
msg.recipe.url=http://127.0.0.1:8123/MessagePlatform/paymentsuccess
# 产科建档
msg.obs.document = http://127.0.0.1:8123/MessagePlatform/business/universal

Loading…
Cancel
Save