1、struts2框架安全性升级,移除废弃api

2、新增医保现金自动退费,和控制开关
debug
wangsq 6 months ago
parent 2acefd34b3
commit 4783c455ad
  1. 8
      pom.xml
  2. 37
      src/main/java/com/ynxbd/common/action/RegisterAction.java
  3. 12
      src/main/java/com/ynxbd/common/action/TestAction.java
  4. 11
      src/main/java/com/ynxbd/common/action/WxMenuAction.java
  5. 17
      src/main/java/com/ynxbd/common/action/XBDAction.java
  6. 2
      src/main/java/com/ynxbd/common/bean/enums/ReportEnum.java
  7. 35
      src/main/java/com/ynxbd/common/bean/pay/Order.java
  8. 4
      src/main/java/com/ynxbd/common/bean/pay/Register.java
  9. 18
      src/main/java/com/ynxbd/common/dao/RegisterDao.java
  10. 8
      src/main/java/com/ynxbd/common/dao/his/HisMedicalDao.java
  11. 66
      src/main/java/com/ynxbd/common/dao/his/HisRegisterDao.java
  12. 6
      src/main/java/com/ynxbd/common/dao/xbd/OutTeamDao.java
  13. 1
      src/main/java/com/ynxbd/common/helper/xbd/XBDHelper.java
  14. 1
      src/main/java/com/ynxbd/common/result/JsonResult.java
  15. 44
      src/main/java/com/ynxbd/common/service/MedicalService.java
  16. 2
      src/main/java/com/ynxbd/common/service/MicroService.java
  17. 18
      src/main/java/com/ynxbd/common/service/RegService.java
  18. 45
      src/main/java/com/ynxbd/wx/wxfactory/medical/Client.java
  19. 4
      src/main/java/com/ynxbd/wx/wxfactory/medical/MdConfig.java
  20. 10
      src/main/java/com/ynxbd/wx/wxfactory/menu/WxService.java
  21. 1
      src/main/java/com/ynxbd/wx/wxfactory/menu/bean/WxMenu.java
  22. 2
      src/main/java/wx_menu/CreateMenu.java
  23. 4
      src/main/resources/xbd.properties

@ -6,7 +6,7 @@
<groupId>com.ynxbd</groupId>
<artifactId>wx</artifactId>
<version>5.2.0</version>
<version>5.3.0</version>
<packaging>war</packaging>
<name>wx Maven Webapp</name>
@ -59,11 +59,11 @@
<scope>compile</scope>
</dependency>
<!-- logback含sl4j -->
<!-- logback含sl4j 1.2.x系支持jdk1.8 -->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.5.16</version>
<version>1.2.13</version>
<exclusions>
<exclusion>
<artifactId>slf4j-api</artifactId>
@ -295,7 +295,7 @@
<dependency>
<groupId>com.alipay.sdk</groupId>
<artifactId>alipay-easysdk</artifactId>
<version>2.2.2</version>
<version>2.2.3</version>
<exclusions>
<exclusion>
<artifactId>slf4j-api</artifactId>

@ -14,10 +14,10 @@ import com.ynxbd.common.helper.common.DateHelper;
import com.ynxbd.common.result.Result;
import com.ynxbd.common.result.ResultEnum;
import com.ynxbd.common.service.DoctorService;
import com.ynxbd.wx.utils.DesEncryptHelper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Namespace;
import java.util.ArrayList;
import java.util.List;
@ -31,11 +31,13 @@ import java.util.stream.Collectors;
* @Copyright @ 2020 云南新八达科技有限公司 All rights reserve
*/
@Slf4j
@Namespace("/register")
public class RegisterAction extends BaseAction {
/**
* [推送] 获取预约今日的所有患者openId
*
* @return openId列表
*/
@Action("getTodayRegOpenId")
@ -192,7 +194,7 @@ public class RegisterAction extends BaseAction {
/**
* [现场挂号]查询挂号记录
* [今日挂号]查询挂号记录
*/
@Action("getSiteHistory")
public Result getSiteHistory(String begDate, String endDate, String patientId) {
@ -202,7 +204,7 @@ public class RegisterAction extends BaseAction {
}
patientId = getDecodeString(patientId);
List<Register> hisList = new HisRegisterDao().getRegSiteHistory(patientId, null);
List<Register> hisList = new HisRegisterDao().getRegTodayHistory(patientId, null);
List<Register> resultList = new ArrayList<>();
String regDate;
@ -219,6 +221,27 @@ public class RegisterAction extends BaseAction {
}
/**
* [挂号]查询挂号记录
*/
@Action("getRegList")
public Result getRegList(String begDate, String endDate, String openid) {
try {
log.info("[挂号]查询挂号记录 begDate={}, endDate={}, openid={}", begDate, endDate, openid);
if (begDate == null || endDate == null || openid == null) {
return Result.error(ResultEnum.PARAM_IS_DEFECT);
}
List<Register> regList = new RegisterDao().selectListByRegDate(begDate, endDate, openid);
for (Register item : regList) {
item.filterInfo(); // 数据过滤
}
return Result.success(regList);
} catch (Exception e) {
return Result.error(e);
}
}
/**
* [预约挂号]获取预约记录
*/
@ -282,7 +305,7 @@ public class RegisterAction extends BaseAction {
return Result.error(ResultEnum.PARAM_IS_DEFECT);
}
List<Map<Object, Object>> dataList = new HisRegisterDao().getTimeSource(deptCode, subDeptCode, doctCode, begDate, endDate);
List<Map<Object, Object>> dataList = new HisRegisterDao().getRegTimeSource(deptCode, subDeptCode, doctCode, begDate, endDate);
return Result.success(dataList);
}
@ -297,6 +320,7 @@ public class RegisterAction extends BaseAction {
/**
* 查询待预约记录
*
* @param begDate 开始时间
* @param endDate 结束时间
* @return 待预约记录
@ -312,6 +336,7 @@ public class RegisterAction extends BaseAction {
/**
* 执行预约签到
*
* @param transNo 预约时的交易流水号
* @return 预约签到结果
*/
@ -326,6 +351,7 @@ public class RegisterAction extends BaseAction {
/**
* 查询待预约记录
*
* @param begDate 开始时间
* @param endDate 结束时间
* @return 待预约记录
@ -348,6 +374,7 @@ public class RegisterAction extends BaseAction {
/**
* 执行预约签到
*
* @param treatNum 门诊号
* @return 预约签到结果
*/
@ -362,6 +389,7 @@ public class RegisterAction extends BaseAction {
/**
* 查询预约今天号源的患者信息用以推送候诊信息
*
* @param startTime 开始时间范围
* @param endTime 结束时间范围
* @return 候诊人群
@ -376,7 +404,6 @@ public class RegisterAction extends BaseAction {
}
// /**
// * [预约挂号]获取指定科室医生信息
// */

@ -6,7 +6,11 @@ import com.ynxbd.common.helper.common.DateHelper;
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.OutCollectService;
import com.ynxbd.wx.wxfactory.WxMedicalHelper;
import com.ynxbd.wx.wxfactory.bean.MedicalOrder;
import com.ynxbd.wx.wxfactory.medical.MdConfig;
import lombok.extern.slf4j.Slf4j;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Namespace;
@ -71,6 +75,14 @@ public class TestAction extends BaseAction {
@Action("test03")
public Result test03() throws ServiceException {
System.out.println("开关" + MdConfig.IS_AUTO_REFUND);
log.info("日志测试");
return Result.success();
}
@Action("md_refund_test")
public Result md_refund_test() throws ServiceException {
// WxMedicalHelper.refundCash("", "", new BigDecimal("0.440"), "系统繁忙缴费失败,自动退费");
return Result.success();
}

@ -0,0 +1,11 @@
package com.ynxbd.common.action;
import lombok.extern.slf4j.Slf4j;
import org.apache.struts2.convention.annotation.Namespace;
@Slf4j
@Namespace("/wx_menu")
public class WxMenuAction {
}

@ -1,23 +1,17 @@
package com.ynxbd.common.action;
import com.alibaba.fastjson.JSONObject;
import com.ynxbd.common.action.base.BaseAction;
import com.ynxbd.common.action.pay.PEnum;
import com.ynxbd.common.bean.enums.MerchantEnum;
import com.ynxbd.common.bean.pay.PayCasebook;
import com.ynxbd.common.bean.xbd.MRHistory;
import com.ynxbd.common.bean.xbd.MedicalRecord;
import com.ynxbd.common.dao.CasebookDao;
import com.ynxbd.common.helper.common.CodeHelper;
import com.ynxbd.common.helper.common.ImageHelper;
import com.ynxbd.common.helper.common.JsonHelper;
import com.ynxbd.common.helper.xbd.XBDHttpHelper;
import com.ynxbd.common.helper.xbd.XBDEnum;
import com.ynxbd.common.helper.xbd.XBDHelper;
import com.ynxbd.common.helper.xbd.XBDHttpHelper;
import com.ynxbd.common.result.Result;
import com.ynxbd.common.result.ResultEnum;
import com.ynxbd.common.service.CasebookService;
import com.ynxbd.common.service.PayService;
import lombok.extern.slf4j.Slf4j;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Namespace;
@ -35,6 +29,7 @@ public class XBDAction extends BaseAction {
/**
* 获取智能云胶片的地址
*
* @param info patientId
* @return 路径
*/
@ -45,6 +40,7 @@ public class XBDAction extends BaseAction {
/**
* 获取该病人已归档可以翻拍的病历
*
* @param patientId 病人id
* @return 可以翻拍的病历列表
*/
@ -61,6 +57,7 @@ public class XBDAction extends BaseAction {
/**
* 获取该病人需要翻拍病历干啥的列表(用途)->直接绑定翻拍的病历类型
*
* @return 用途列表
*/
@Action("getMRTemplateList")
@ -71,6 +68,7 @@ public class XBDAction extends BaseAction {
/**
* 新增预约
*
* @param openId openId
* @param patientId patientId
* @param zyNum 住院号
@ -125,8 +123,7 @@ public class XBDAction extends BaseAction {
params.put("ApplicationImg", applicationImg);
});
return Result.success(JsonHelper.parseObject(jsonString));
}
catch (Exception e) {
} catch (Exception e) {
log.error("[病历复印申请]预约失败,error-{}", e.toString());
return Result.error(ResultEnum.ERROR);
}
@ -134,6 +131,7 @@ public class XBDAction extends BaseAction {
/**
* 获取该病人的病历翻拍历史
*
* @param patientId 病人Id
* @return 历史记录
*/
@ -148,6 +146,7 @@ public class XBDAction extends BaseAction {
/**
* 病案复印唤起支付
*
* @param payCode wx微信
* @param openid 患者openId
* @param patientId 患者patientId

@ -1,7 +1,5 @@
package com.ynxbd.common.bean.enums;
import com.ynxbd.wx.config.WeChatConfig;
/**
* @author 李进才
* @ClassName ReportEnum

@ -1,9 +1,12 @@
package com.ynxbd.common.bean.pay;
import com.ynxbd.common.helper.common.ParamHelper;
import com.ynxbd.wx.wxfactory.ReqParamHelper;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
import org.apache.commons.lang3.ObjectUtils;
import java.io.Serializable;
import java.math.BigDecimal;
@ -30,11 +33,21 @@ public class Order implements Serializable {
private String openid;
// 患者id
private String patientId;
// 加密的patientId
private String enPatientId;
// 患者姓名
private String patientName;
// 患者信息
// 证件号码
private String idCardNo;
private String enCardNo;
private String showCardNo;
private String tel;
private String enTel;
private String showTel;
// 性别
private String sex;
private String birthday;
// 订单号
private String outTradeNo;
@ -126,4 +139,24 @@ public class Order implements Serializable {
// PEIS返回提示
private String peisResult;
public void filterInfo() {
String _cardNo = this.idCardNo;
if (!ObjectUtils.isEmpty(_cardNo)) {
this.idCardNo = null;
this.enCardNo = ReqParamHelper.encode(_cardNo);
this.showCardNo = ParamHelper.idCardNoFilter(_cardNo);
}
String _tel = this.tel;
if (!ObjectUtils.isEmpty(_tel)) {
this.tel = null;
this.enTel = ReqParamHelper.encode(_tel);
this.showTel = ParamHelper.telFilter(_tel);
}
if (!ObjectUtils.isEmpty(this.patientId)) {
this.enPatientId = ReqParamHelper.encode(this.patientId);
}
}
}

@ -18,10 +18,6 @@ import java.math.BigDecimal;
@NoArgsConstructor
public class Register extends Order {
private Long id;
// 患者身份证
private String idCardNo;
// 电话号码
private String tel;
private String deptCode;
private String subDeptCode;

@ -8,6 +8,7 @@ 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;
import com.ynxbd.common.result.ServiceException;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
@ -27,6 +28,7 @@ public class RegisterDao {
/**
* 获取今日挂号的所有患者的openId用作到诊推送
*
* @return 所有openId
*/
public List<Register> selectTodayRegisterOpenId() {
@ -683,7 +685,6 @@ public class RegisterDao {
}
/**
* 退费列表
*/
@ -706,6 +707,7 @@ public class RegisterDao {
/**
* 查询当天挂号的人用来推送候诊提醒
*
* @param startDate 开始时间
* @param endDate 结束时间
* @return 候诊人群
@ -717,4 +719,18 @@ public class RegisterDao {
ps.setString(2, endDate);
});
}
public List<Register> selectListByRegDate(String begDate, String endDate, String openid) throws ServiceException {
String finalEndDate = DateHelper.getMoveDate(endDate, 1);
if (finalEndDate == null) {
throw new ServiceException("endDate错误");
}
System.out.println(finalEndDate);
String sql = "select * from register where openid = ? and regDate between ? and ? and payStatus = 0 and hisStatus = 0 order by regDate desc, updateTime desc";
return DataBase.select(sql, Register.class, ps -> {
ps.setString(1, openid);
ps.setString(2, begDate);
ps.setString(3, finalEndDate);
});
}
}

@ -1,7 +1,6 @@
package com.ynxbd.common.dao.his;
import com.alibaba.fastjson.JSONArray;
import com.ynxbd.common.bean.HisRecipe;
import com.ynxbd.common.bean.enums.MerchantEnum;
import com.ynxbd.common.bean.pay.Recipe;
import com.ynxbd.common.bean.pay.Register;
@ -17,7 +16,6 @@ import com.ynxbd.wx.wxfactory.bean.MedicalInfo;
import org.apache.commons.lang3.ObjectUtils;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@ -36,7 +34,7 @@ public class HisMedicalDao {
*/
public static JsonResult recipeMdUploadFeeDetails(String payAuthNo, String cardNo, String openid, String patientId, String treatNum, String recipeJson, BigDecimal totalFee, String ybAttrib, String ybBZCode, String ybBZName) {
List<Recipe> recipeList = JsonHelper.parseArray(recipeJson, Recipe.class);
if (recipeList == null || recipeList.size() == 0) {
if (recipeList == null || recipeList.isEmpty()) {
return HisHelper.createErrorResult("处方数量为 0 或 数据转换失败");
}
@ -67,6 +65,7 @@ public class HisMedicalDao {
/**
* [医保]获取该病人的慢病列表
*
* @param idCardNo 身份证号
*/
public static JsonResult getChronicList(String idCardNo) {
@ -120,7 +119,6 @@ public class HisMedicalDao {
params.put("TID", reg.getTid());
params.put("RegFee", reg.getRegFee());
params.put("ClinicFee", reg.getClinicFee());
params.put("PayMoney", reg.getPayMoney());
params.put("PayDate", DateHelper.getCurDate());
params.put("PayTime", DateHelper.getCurTime());
params.put("TransNo", CodeHelper.get32UUID());
@ -213,7 +211,7 @@ public class HisMedicalDao {
* @param transNo HIS交易流水号
* @param bankTransNo HIS流水号
*/
public static JsonResult mdPay(String mdUserId, String payDate, String payTime, String transNo, String bankTransNo, BigDecimal cashFee) {
public static JsonResult mdRecipePay(String mdUserId, String payDate, String payTime, String transNo, String bankTransNo, BigDecimal cashFee) {
return HisHelper.getMdJsonResult(HisEnum.Medical_PAY, params -> {
params.put("UserID_YBZF", mdUserId);
params.put("PayMoney", cashFee);

@ -450,12 +450,12 @@ public class HisRegisterDao {
/**
* [现场挂号]根据患者id获取挂号记录
* [今日挂号]根据患者id获取挂号记录
*
* @param patientId 患者id
* @return 挂号记录
*/
public List<Register> getRegSiteHistory(String patientId, String regDate) {
public List<Register> getRegTodayHistory(String patientId, String regDate) {
List<Register> resultList = new ArrayList<>();
Map<String, Object> params = new HashMap<>();
params.put("PatientID", patientId);
@ -603,6 +603,7 @@ public class HisRegisterDao {
/**
* 今日挂号-取消挂号
*
* @return
*/
public JsonResult refundRegister(String tradeNo, MerchantEnum merchantEnum) {
@ -620,7 +621,7 @@ public class HisRegisterDao {
* @return boolean
*/
public List<Register> hasRegSite(String patientId, String regDate) {
return getRegSiteHistory(patientId, regDate);
return getRegTodayHistory(patientId, regDate);
}
/**
@ -780,7 +781,7 @@ public class HisRegisterDao {
* @param endDate 结束日期(yyyy-MM-dd)
* @return 号源集合
*/
public List<Map<Object, Object>> getTimeSource(String deptCode, String subDeptCode, String doctCode, String
public List<Map<Object, Object>> getRegTimeSource(String deptCode, String subDeptCode, String doctCode, String
begDate, String endDate) {
if (DateHelper.isToday(begDate)) {
begDate = begDate + " " + DateHelper.getCurTime();
@ -796,18 +797,18 @@ public class HisRegisterDao {
params.put("DeptCode_YZKCode", subDeptCode); // 亚专科code
}
JsonResult JsonResult = HisHelper.getJsonResult(HisEnum.AP_Query_Register_Source_New, params);
List<Map<Object, Object>> resultList = new ArrayList<>();
if (!JsonResult.success()) {
log.info("[号源-分时段查询]{}", JsonResult.getMessage());
return resultList;
JsonResult jsonResult = HisHelper.getJsonResult(HisEnum.AP_Query_Register_Source_New, params);
List<Map<Object, Object>> dataList = new ArrayList<>();
if (!jsonResult.success()) {
log.info("[号源-分时段查询]{}", jsonResult.getMessage());
return dataList;
}
try {
JSONArray jsonArray = JsonResult.getJsonArray("Dept", "Doct", "TimeInterval");
JSONArray jsonArray = jsonResult.getJsonArray("Dept", "Doct", "TimeInterval");
JSONObject timeNode, sourceNode;
Map<Object, Object> map;
Register reg;
Register sourceItem;
JSONArray sourceArr;
BigDecimal regMoney;
List<Register> list;
@ -834,35 +835,37 @@ public class HisRegisterDao {
map.put("payMoney", regMoney);
}
reg = new Register();
reg.setTid(tid);
reg.setTName(tName);
reg.setRegFee(regMoney);
sourceItem = new Register();
sourceItem.setTid(tid);
sourceItem.setTName(tName);
sourceItem.setRegFee(regMoney);
// -----------------------
reg.setSourceId(sourceNode.getString("SourceId"));
reg.setQueueNum(sourceNode.getString("QueueNumber"));
reg.setBegTime(sourceNode.getString("BegTime"));
reg.setEndTime(sourceNode.getString("EndTime"));
reg.setRegCode(sourceNode.getString("RegistCode"));
reg.setRegName(sourceNode.getString("RegistName"));
reg.setRegDate(sourceNode.getString("RegistDate"));
reg.setAddress(sourceNode.getString("ClinicAddress"));
reg.setAllowReg(sourceNode.getInteger("AllowOnline"));
reg.setIsUsed(sourceNode.getInteger("IsUsed"));
list.add(reg);
sourceItem.setSourceId(sourceNode.getString("SourceId"));
sourceItem.setQueueNum(sourceNode.getString("QueueNumber"));
sourceItem.setBegTime(sourceNode.getString("BegTime"));
sourceItem.setEndTime(sourceNode.getString("EndTime"));
sourceItem.setRegCode(sourceNode.getString("RegistCode"));
sourceItem.setRegName(sourceNode.getString("RegistName"));
sourceItem.setRegDate(sourceNode.getString("RegistDate"));
sourceItem.setAddress(sourceNode.getString("ClinicAddress"));
sourceItem.setAllowReg(sourceNode.getInteger("AllowOnline"));
sourceItem.setIsUsed(sourceNode.getInteger("IsUsed"));
list.add(sourceItem);
}
map.put("sourceList", list);
resultList.add(map);
dataList.add(map);
}
} catch (Exception e) {
e.printStackTrace();
ErrorHelper.println(e);
}
return resultList;
return dataList;
}
/**
* 执行分时段挂号
*
@ -950,6 +953,7 @@ public class HisRegisterDao {
/**
* 获取某个医生排班表
*
* @param begDate 开始时间
* @param endDate 结束时间
* @param doctCode 医生编码
@ -972,6 +976,7 @@ public class HisRegisterDao {
/**
* 查询预约待签到记录不包含今日挂号的
*
* @param begDate 开始时间
* @param endDate 结束时间
* @return 待签到记录
@ -989,6 +994,7 @@ public class HisRegisterDao {
/**
* 执行预约签到(即执行转入号源又执行分时段)
*
* @param transNo 预约时的交易流水号
* @return 预约签到结果
*/
@ -1000,6 +1006,7 @@ public class HisRegisterDao {
/**
* 查询预约待签到记录包含今日挂号的
*
* @param begDate 开始时间
* @param endDate 结束时间
* @return 待签到记录
@ -1017,6 +1024,7 @@ public class HisRegisterDao {
/**
* 执行预约签到(只执行分时段)
*
* @param treatNum 门诊号
* @return 预约签到结果1
*/

@ -1,11 +1,9 @@
package com.ynxbd.common.dao.xbd;
import com.aliyun.tea.okhttp.OkRequestBody;
import com.ynxbd.common.helper.http.OkHttpHelper;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import okhttp3.FormBody;
import okhttp3.MediaType;
import okhttp3.RequestBody;
/**
@ -18,16 +16,20 @@ import okhttp3.RequestBody;
@Slf4j
@AllArgsConstructor
public class OutTeamDao {
private final String cloudFilmLink;
public String getCloudFilmPath(String info) {
RequestBody requestBody = new FormBody.Builder()
.add("info", info)
.build();
String enInfo = OkHttpHelper.post(cloudFilmLink + "/tickets/Encrypt", requestBody);
log.info("[内部团队接口请求]enInfo-{}", enInfo);
RequestBody enRequestBody = new FormBody.Builder()
.add("enc_info", enInfo)
.build();
String token = OkHttpHelper.post(cloudFilmLink + "/tickets/GetKey", enRequestBody);
log.info("[内部团队接口请求]token-{}", token);
return token;

@ -19,6 +19,7 @@ public class XBDHelper {
static {
ProperHelper config = new ProperHelper().read("xbd.properties");
OUT_TEAM_CLOUD_FILM = config.getString("xbd.out_team_cloud_film_link");
MEDICAL_RECORD_REMAKE_URL = config.getString("xbd.medical_record_remake_url");
XBD_PEIS = config.getString("xbd.peis");

@ -17,7 +17,6 @@ import org.dom4j.Element;
import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
@Slf4j
@Getter

@ -22,7 +22,6 @@ import com.ynxbd.wx.wxfactory.bean.MedicalOrder;
import com.ynxbd.wx.wxfactory.bean.MedicalUserInfo;
import com.ynxbd.wx.wxfactory.bean.OrderTypeEnum;
import com.ynxbd.wx.wxfactory.medical.MdConfig;
import com.ynxbd.wx.wxfactory.medical.enums.MdRefundTypeEnum;
import lombok.extern.slf4j.Slf4j;
import java.math.BigDecimal;
@ -346,23 +345,31 @@ public class MedicalService {
log.info("[医保][挂号]HIS结算调用超时 outTradeNo={}, bankTransNo={}, tradeNo={}, mdUserId={}", outTradeNo, bankTransNo, tradeNo, mdUserId);
return false;
}
if (MdConfig.IS_AUTO_REFUND) {
if (!MdConfig.IS_AUTO_REFUND) {
log.info("[医保][挂号]现金自动退费功能未开启 outTradeNo={}, bankTransNo={}, tradeNo={}", outTradeNo, bankTransNo, tradeNo);
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);
return false;
}
// 微信医保自动退费
MedicalOrder order = WxMedicalHelper.refundCash(outTradeNo, ("R" + tradeNo), tradeNo, cashFee, "系统繁忙缴费失败,自动退费");
MedicalOrder order = WxMedicalHelper.refundCash(outTradeNo, tradeNo, cashFee, "系统繁忙缴费失败,自动退费");
boolean isOk = order.isOk();
log.info("【微信】[医保][挂号]现金自动退费{} outTradeNo={}, bankTransNo={}, tradeNo={}", (isOk ? "成功" : "失败"), outTradeNo, bankTransNo, tradeNo);
if (isOk) {
String refundResult = order.isOk() ? WxPayHelper.OK : order.getMessage();
log.info("【微信】[医保][挂号]现金自动退费 outTradeNo={}, bankTransNo={}, tradeNo={} [{}]:{}", outTradeNo, bankTransNo, tradeNo, (isOk ? "成功" : "失败"), order.getMessage());
if (!regDao.updateRefundByTradeNo(tradeNo, refundResult)) {
log.info("【微信】[医保][挂号]现金自动退费 修改数据库状态失败 tradeNo={}, refundResult={}", tradeNo, refundResult);
}
} else {
log.info("【微信】[医保][挂号]现金自动退费 失败:{}", order.getMessage());
}
return false;
}
@ -429,7 +436,7 @@ public class MedicalService {
log.info("{} [医保][处方]更新商户信息成功 outTradeNo={}, bankTransNo={}", merchantEnum.NAME, outTradeNo, bankTransNo);
}
JsonResult jsonResult = HisMedicalDao.mdPay(mdUserId, payDate, payTime, tradeNo, bankTransNo, cashFee);
JsonResult jsonResult = HisMedicalDao.mdRecipePay(mdUserId, payDate, payTime, tradeNo, bankTransNo, cashFee);
if (!jsonResult.success()) {
String respCode = jsonResult.getCode();
@ -445,23 +452,28 @@ public class MedicalService {
return false;
}
if (MdConfig.IS_AUTO_REFUND) {
if (!MdConfig.IS_AUTO_REFUND) {
log.info("[医保][处方][现金自动退费]功能未开启 outTradeNo={}, bankTransNo={}, tradeNo={}", outTradeNo, bankTransNo, tradeNo);
return false;
}
if (respMessage != null && !respMessage.contains("(医保结算部分已回退)")) {
log.info("[医保][处方]HIS医保部分未退费成功,禁止现金部分退费 outTradeNo={}, bankTransNo={}, tradeNo={}", outTradeNo, bankTransNo, tradeNo);
return false;
}
// 微信医保自动退费
MedicalOrder order = WxMedicalHelper.refundCash(outTradeNo, ("R" + tradeNo), tradeNo, cashFee, "系统繁忙缴费失败,自动退费");
if (cashFee.compareTo(BigDecimal.ZERO) == 0) { // 现金部分为0
log.info("[医保][处方]现金为0不执行退费 outTradeNo={}, bankTransNo={}, tradeNo={}", outTradeNo, bankTransNo, tradeNo);
return false;
}
MedicalOrder order = WxMedicalHelper.refundCash(outTradeNo, tradeNo, cashFee, "系统繁忙缴费失败,自动退费");
boolean isOk = order.isOk();
log.info("【微信】[医保][处方]现金自动退费 {} outTradeNo={}, bankTransNo={}, tradeNo={}", (isOk ? "成功" : "失败"), outTradeNo, bankTransNo, tradeNo);
if (isOk) {
String refundResult = order.isOk() ? WxPayHelper.OK : order.getMessage();
log.info("【微信】[医保][处方]现金自动退费 outTradeNo={}, bankTransNo={}, tradeNo={} [{}]:{}", outTradeNo, bankTransNo, tradeNo, (isOk ? "成功" : "失败"), order.getMessage());
if (!recipeDao.updateRefundByTradeNo(tradeNo, refundResult)) {
log.info("[医保][处方]现金自动退费 修改数据库状态失败 tradeNo={}, refundResult={}", tradeNo, refundResult);
}
} else {
log.info("【微信】[医保][处方]现金自动退费 失败:{}", order.getMessage());
}
return false;
}

@ -17,6 +17,7 @@ import java.math.BigDecimal;
*/
@Slf4j
public class MicroService {
public void InternetHospNotice(String outTradeNo, String bankTransNo, String openid, BigDecimal totalFee, String payDate, String payTime) {
RequestBody body = new FormBody.Builder().
add("callNo", "ol_register").
@ -29,6 +30,5 @@ public class MicroService {
build();
log.info("[互联网医院在线问诊支付回调] outTradeNo-{}, bankTransNo-{}, openid-{}, totalFee-{}, payDate-{}, payTime-{}", outTradeNo, bankTransNo, openid, totalFee, payDate, payTime);
OkHttpHelper.post("http://127.0.0.1/micro/pay/payNotice", body);
log.info("[互联网医院在线问诊支付回调]回调成功");
}
}

@ -1,16 +1,15 @@
package com.ynxbd.common.service;
import com.alibaba.fastjson.JSONObject;
import com.ynxbd.ali.enums.AliEnergyEnum;
import com.ynxbd.ali.enums.AliMsgEnum;
import com.ynxbd.ali.helper.*;
import com.ynxbd.ali.helper.AliHelper;
import com.ynxbd.ali.helper.AliMessageHelper;
import com.ynxbd.common.action.pay.PEnum;
import com.ynxbd.common.bean.sms.SmsRegTem;
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.bean.pay.Register;
import com.ynxbd.common.bean.sms.SmsTemplate;
import com.ynxbd.common.bean.sms.SmsRegTem;
import com.ynxbd.common.dao.RefundDao;
import com.ynxbd.common.dao.RegisterDao;
import com.ynxbd.common.dao.his.HisAccountDao;
@ -20,7 +19,10 @@ 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.*;
import com.ynxbd.common.result.JsonResult;
import com.ynxbd.common.result.Result;
import com.ynxbd.common.result.ResultEnum;
import com.ynxbd.common.result.ServiceException;
import com.ynxbd.wx.config.MessagePushConfig;
import com.ynxbd.wx.config.MiddleOfficeConfig;
import com.ynxbd.wx.config.WeChatConfig;
@ -35,7 +37,6 @@ import java.math.BigDecimal;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
/**
* 挂号业务层
@ -147,6 +148,7 @@ public class RegService {
log.info("{} 开始调用HIS挂号:patientId={}, bankTransNo={}", merchantEnum.NAME, patientId, bankTransNo);
String hisTransNo = null, treatNum = null, hisQueueNo, callNum = null, invoiceTransNo = null;
// 挂号类型:1:预约挂号,2:现场挂号;3:分时段预约挂号,4:分时段现场挂号
JsonResult jsonResult;
@ -214,7 +216,6 @@ public class RegService {
// 短信通知
smsNotice(reg);
if (MerchantEnum.WX.equals(merchantEnum)) {
MessagePushConfig.regPush(merchantEnum, reg);
@ -224,7 +225,6 @@ public class RegService {
MessagePushConfig.regNavigatePush(merchantEnum, reg);
// 电子健康卡上报数据
HCodeService.regPayReportHISData(openid, patientId, reg.getDeptName(), reg.getRegDate());
}
@ -234,7 +234,6 @@ public class RegService {
String title = "挂号 " + reg.getDeptName();
AliMessageHelper.hospitalOrder(openid, title, AliMsgEnum.MERCHANT_PREORDER_SUCCESS, reg.getUpdateTime(), true, totalFee, outTradeNo, reg.getRegDate(), reg.getBegTime(), reg.getDeptCode(), reg.getDeptName(), reg.getDoctName(),
AliHelper.getLink(link, null));
}
@ -362,7 +361,6 @@ public class RegService {
}
boolean isResult = false;
if (HospEnum.isHosp(HospEnum.德宏州中医医院)) {

@ -40,28 +40,28 @@ public class Client {
/**
* 微信医保下单
*
* @param orderTypeEnum
* @param accessToken
* @param appId
* @param mchId
* @param mdPayKey
* @param cityCode
* @param hospitalName
* @param orgNo
* @param channel
* @param openid
* @param payAuthNo
* @param payOrdId
* @param outTradeNo
* @param serialNo
* @param totalFee
* @param insuranceFee
* @param cardNo
* @param realName
* @param notifyUrl
* @param callbackUrl
* @param body
* @return
* @param orderTypeEnum 订单类型
* @param accessToken accessToken
* @param appId appId
* @param mchId mchId
* @param mdPayKey mdPayKey
* @param cityCode 城市编码
* @param hospitalName 医院名称
* @param orgNo orgNo
* @param channel channel
* @param openid openid
* @param payAuthNo 医保授权码
* @param payOrdId 医保订单id
* @param outTradeNo 商户订单号
* @param serialNo serialNo
* @param totalFee totalFee
* @param insuranceFee insuranceFee
* @param cardNo 证件号码
* @param realName 真实姓名
* @param notifyUrl 通知地址
* @param callbackUrl 回调地址
* @param body body
* @return MedicalPayOrder
*/
public MedicalPayOrder createOrder(OrderTypeEnum orderTypeEnum, String accessToken,
String appId, String mchId, String mdPayKey,
@ -367,7 +367,6 @@ public class Client {
info.setCardNo(cardNo);
respJson.remove("user_card_no");
}
log.error("[医保授权]返回 resp={}", respJson);
info.setUserName(userName);

@ -33,8 +33,8 @@ public class MdConfig {
public static final String MD_APP_ID;
public static final String MD_APP_SECRET;
public static boolean IS_DEV = true;
public static boolean IS_AUTO_REFUND = true;
public static boolean IS_DEV;
public static boolean IS_AUTO_REFUND;
static {
ProperHelper config = new ProperHelper().read("medical.properties");

@ -13,20 +13,22 @@ import java.util.Map;
import static com.ynxbd.common.helper.http.OkHttpHelper.TYPE_JSON;
@Slf4j
public class WxService {
public void createMenu(WxMenu menu) throws Exception {
createMenu(menu, false);
}
public void createMenu(WxMenu menu, boolean condition) throws Exception {
String url = (condition
public void createMenu(WxMenu menu, boolean isCondition) throws Exception {
String url = (isCondition
? "https://api.weixin.qq.com/cgi-bin/menu/addconditional?access_token="
: "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=")
+ WxCacheHelper.getAccessToken();
try {
String result = this.post(url, new ObjectMapper().writeValueAsString(menu));
System.out.println("[wx-tools]Create Menu result:" + result);
log.info("[wx-tools]Create Menu result={}", result);
} catch (Exception e) {
throw new Exception("[wx-tools]createMenu failure.");
}
@ -49,7 +51,6 @@ public class WxService {
public WxMenuResult getMenu() throws Exception {
String url = "https://api.weixin.qq.com/cgi-bin/menu/get?access_token=" + WxCacheHelper.getAccessToken();
try {
return WxMenuResult.fromJson(get(url, null));
} catch (Exception e) {
@ -66,5 +67,4 @@ public class WxService {
return OkHttpHelper.post(url, RequestBody.create(TYPE_JSON, params), null);
}
}

@ -15,5 +15,4 @@ public class WxMenu {
private List<WxMenuButton> button ;
private WxMenuRule matchrule;
private String menuid;
}

@ -1,14 +1,12 @@
package wx_menu;
import com.ynxbd.common.result.Result;
import com.ynxbd.wx.config.WeChatConfig;
import com.ynxbd.wx.wxfactory.menu.WxService;
import com.ynxbd.wx.wxfactory.menu.bean.WxMenu;
import com.ynxbd.wx.wxfactory.menu.bean.WxMenuButton;
import com.ynxbd.wx.wxfactory.menu.bean.WxMsgConst;
import com.ynxbd.wx.wxfactory.utils.WxEventHelper;
import com.ynxbd.wx.wxfactory.utils.WxPassiveReplyHelper;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;

@ -1,9 +1,11 @@
# \u4E91\u80F6\u7247\u5730\u5740
xbd.out_team_cloud_film_link= http://192.168.10.43:3307/wx3307
# \u75C5\u5386\u590D\u5370
xbd.medical_record_remake_url = http://192.168.12.66:8081
# \u4F53\u68C0
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;

Loading…
Cancel
Save