From 861176525712a9cf30fa97e902b14b3d27a6d0d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E8=BF=9B=E6=89=8D?= Date: Mon, 11 Dec 2023 13:19:17 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E4=BD=93=E6=A3=80=E8=AE=A2?= =?UTF-8?q?=E5=8D=95=E6=94=AF=E4=BB=98=EF=BC=8C=E4=BD=93=E6=A3=80=E9=A2=84?= =?UTF-8?q?=E7=BA=A6=E6=94=AF=E4=BB=98=EF=BC=8C=E4=BA=92=E8=81=94=E7=BD=91?= =?UTF-8?q?=E5=8C=BB=E9=99=A2=E7=9B=B8=E5=85=B3=E6=8E=A5=E5=8F=A3=E7=9A=84?= =?UTF-8?q?=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ynxbd/common/action/RecipeAction.java | 41 ++++++ .../com/ynxbd/common/action/SmsAction.java | 5 + .../ynxbd/common/action/pay/PayAction.java | 30 ++++ .../ynxbd/common/action/pay/WxPayAction.java | 2 +- .../java/com/ynxbd/common/bean/HisRecipe.java | 10 ++ .../com/ynxbd/common/bean/HisRecipeItem.java | 1 + .../ynxbd/common/bean/xk/medicalRecipe.java | 25 ++++ .../ynxbd/common/dao/his/HisRecipeDao.java | 23 +++ .../com/ynxbd/common/dao/peis/PeisDao.java | 37 +++++ .../com/ynxbd/common/helper/his/HisEnum.java | 2 + .../ynxbd/common/helper/xbd/XBDHelper.java | 2 + .../ynxbd/common/result/JsonResultEnum.java | 1 + .../com/ynxbd/common/service/PeisService.java | 138 +++++++++++++++++- .../ynxbd/wx/wxfactory/ReqParamHelper.java | 2 +- .../ynxbd/wx/wxfactory/medical/Client.java | 4 + src/main/resources/webservice.properties | 6 +- src/main/resources/xbd.properties | 1 + 17 files changed, 323 insertions(+), 7 deletions(-) create mode 100644 src/main/java/com/ynxbd/common/bean/xk/medicalRecipe.java diff --git a/src/main/java/com/ynxbd/common/action/RecipeAction.java b/src/main/java/com/ynxbd/common/action/RecipeAction.java index 15223ac..dea307b 100644 --- a/src/main/java/com/ynxbd/common/action/RecipeAction.java +++ b/src/main/java/com/ynxbd/common/action/RecipeAction.java @@ -4,6 +4,7 @@ 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.xk.medicalRecipe; import com.ynxbd.common.dao.NatRecordDao; import com.ynxbd.common.dao.PatientDao; import com.ynxbd.common.dao.his.HisRecipeDao; @@ -57,6 +58,30 @@ public class RecipeAction extends BaseAction { int days = DateHelper.intervalDays(begDate, endDate, true); List hisRecipes = new HisRecipeDao().getUnPayRecipe(patientId, personNo, days); + List resultList = new ArrayList<>(); + for (HisRecipe hisRecipe : hisRecipes) { + if (hisRecipe.getDate() != null && DateHelper.inDateRange(begDate, endDate, hisRecipe.getDate(), DateHelper.DateEnum.yyyy_MM_dd) && !"1".equals(hisRecipe.getSTDFlag()) && (!"1".equals(hisRecipe.getInternetHospFlag()) || "1".equals(hisRecipe.getYJSAuditFlag()))) { + resultList.add(hisRecipe); + } + } + return Result.success(resultList); + } + + /** + * 获取所以未缴费订单 包括互联网医院未审核,医保双通道订单 + * @param patientId patientId + * @param begDate 开始时间 + * @param endDate 结束时间 + */ + @Action("getMedicalRecipe") + public Result getMedicalRecipe(String patientId, String begDate, String endDate ) { + log.info("[处方]未缴费项目查询 patientId={}", patientId); + if (patientId == null) { + return Result.error(ResultEnum.PARAM_IS_DEFECT); + } + patientId = getDecodeString(patientId); + int days = DateHelper.intervalDays(begDate, endDate, true); + List hisRecipes = new HisRecipeDao().getUnPayRecipe(patientId,"",days); List resultList = new ArrayList<>(); for (HisRecipe hisRecipe : hisRecipes) { if (hisRecipe.getDate() != null && DateHelper.inDateRange(begDate, endDate, hisRecipe.getDate(), DateHelper.DateEnum.yyyy_MM_dd)) { @@ -66,6 +91,22 @@ public class RecipeAction extends BaseAction { return Result.success(resultList); } + /** + * 将订单上传到医保双通道 + * @param treatNum 门诊号 + * @param personID 身份证 + * @param recipes 处方号合集,中间用英文逗号隔开 + */ + @Action("uploadMedicalRecipe") + public Result uploadMedicalRecipe(String treatNum, String personID, String recipes){ + log.info("[互联网医院]处方医保双通道流转 treatNum={},personNo-{}, recipes={}", treatNum, personID, recipes); + if(treatNum==null||personID==null||recipes==null){ + return Result.error(ResultEnum.PARAM_IS_DEFECT); + } + List medicalRecipe = new HisRecipeDao().uploadMedicalRecipe(treatNum,personID,recipes); + return Result.success(medicalRecipe); + } + // /** // * 获取未缴费项目 // */ diff --git a/src/main/java/com/ynxbd/common/action/SmsAction.java b/src/main/java/com/ynxbd/common/action/SmsAction.java index 03a2a49..b2bc47c 100644 --- a/src/main/java/com/ynxbd/common/action/SmsAction.java +++ b/src/main/java/com/ynxbd/common/action/SmsAction.java @@ -113,6 +113,11 @@ public class SmsAction extends BaseAction { template = "SMS_173475681"; resultFlag = SmsHelper.sendCode(template, tel, code); break; + case "xbd_code_001": + template = "SMS_257021489"; + resultFlag = SmsHelper.sendCode(template, tel, code); + break; + default: log.info("调用码无效"); 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 ad76828..3297622 100644 --- a/src/main/java/com/ynxbd/common/action/pay/PayAction.java +++ b/src/main/java/com/ynxbd/common/action/pay/PayAction.java @@ -9,6 +9,7 @@ import com.ynxbd.common.bean.enums.MerchantEnum; import com.ynxbd.common.bean.pay.*; import com.ynxbd.common.dao.SelfHelpDao; import com.ynxbd.common.dao.his.HisRecipeDao; +import com.ynxbd.common.dao.peis.PeisDao; import com.ynxbd.common.dao.sys.SysUserDao; import com.ynxbd.common.helper.common.*; import com.ynxbd.common.helper.his.HisHelper; @@ -166,6 +167,35 @@ public class PayAction extends BaseAction { } + /** + * 体检退费 + * @param recipeId 订单号 + * @param payCode 支付方式 + * @param totalFee 订单金额 + * @param outTradeNo outTradeNo + * @param openid openid + */ + @Action("peisRefund") + public Result peisRefund(String recipeId, String payCode, String outTradeNo, String totalFee,String openid){ + PeisService peisService = new PeisService(); + MerchantEnum merchantEnum = MerchantEnum.getMerchantEnumByCode(payCode); + PeisDao peisDao = new PeisDao(); + Recipe recipe = peisDao.selectByOutTradeNo(outTradeNo); + if(!new BigDecimal(totalFee).equals(new BigDecimal(String.valueOf(recipe.getTotalFee())))){ + return Result.error(ResultEnum.REFUND_MONEY_ERROR); + } + String pushMessage = "已申请退款,原因:患者主动取消退费,订单号:" + outTradeNo +"orderNo:"+ recipeId; + Result result = peisService.peisAutoRefund(recipeId,merchantEnum,outTradeNo,new BigDecimal(totalFee),pushMessage,new Date(),openid); + if(result.isSuccess()){ + peisService.peisRefund(recipeId,"OK",""); + } + else { + peisService.peisRefund(recipeId,"FAIL",result.getMessage()); + } + return result; + } + + /** * [住院]预交金创建订单 * * diff --git a/src/main/java/com/ynxbd/common/action/pay/WxPayAction.java b/src/main/java/com/ynxbd/common/action/pay/WxPayAction.java index c4d50fd..e80ca50 100644 --- a/src/main/java/com/ynxbd/common/action/pay/WxPayAction.java +++ b/src/main/java/com/ynxbd/common/action/pay/WxPayAction.java @@ -72,7 +72,7 @@ public class WxPayAction extends BaseAction { new MicroService().InternetHospNotice(outTradeNo, bankTransNo, openid, totalFee, payDate, payTime); break; case PEIS_RESERVE: - new PeisService().payNotify(outTradeNo,bankTransNo); + new PeisService().payNotify(MerchantEnum.WX,openid,totalFee,outTradeNo,bankTransNo,payInfo,new Date()); break; diff --git a/src/main/java/com/ynxbd/common/bean/HisRecipe.java b/src/main/java/com/ynxbd/common/bean/HisRecipe.java index fded108..b875270 100644 --- a/src/main/java/com/ynxbd/common/bean/HisRecipe.java +++ b/src/main/java/com/ynxbd/common/bean/HisRecipe.java @@ -59,6 +59,16 @@ public class HisRecipe { // 院区名称 private String hospitalAreaName; + //互联网医院 + + private String internetHospFlag; + + private String sTDFlag; + + private String sTDUploadDate; + + private String yJSAuditFlag; + private String ybAttrib; //医保属性,值域:4为慢性病,5为特殊病 diff --git a/src/main/java/com/ynxbd/common/bean/HisRecipeItem.java b/src/main/java/com/ynxbd/common/bean/HisRecipeItem.java index fe796af..ecc0aa6 100644 --- a/src/main/java/com/ynxbd/common/bean/HisRecipeItem.java +++ b/src/main/java/com/ynxbd/common/bean/HisRecipeItem.java @@ -29,6 +29,7 @@ public class HisRecipeItem { private String fjjfApplyNum; // 子处方处方号标识(附加缴费)(处方号带有该字符串的就是这个处方的附加缴费处方) + // 趣医专用---------------------------------------- private String count_qy; // 付数(趣医专用) private String quantity_qy; // 数量(趣医专用) diff --git a/src/main/java/com/ynxbd/common/bean/xk/medicalRecipe.java b/src/main/java/com/ynxbd/common/bean/xk/medicalRecipe.java new file mode 100644 index 0000000..5fb0a82 --- /dev/null +++ b/src/main/java/com/ynxbd/common/bean/xk/medicalRecipe.java @@ -0,0 +1,25 @@ +package com.ynxbd.common.bean.xk; + +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; + +import java.io.Serializable; + +/** + * @author 李进才 + * @ClassName medicalRecipe + * @Description TODO + * @date 2023/12/04 09:51:00 + */ + +@Setter +@Getter +@ToString +@NoArgsConstructor +public class medicalRecipe implements Serializable { + private String cfNum; + private Integer flag; + private String msg; +} diff --git a/src/main/java/com/ynxbd/common/dao/his/HisRecipeDao.java b/src/main/java/com/ynxbd/common/dao/his/HisRecipeDao.java index f6e91b9..b86c1c9 100644 --- a/src/main/java/com/ynxbd/common/dao/his/HisRecipeDao.java +++ b/src/main/java/com/ynxbd/common/dao/his/HisRecipeDao.java @@ -2,6 +2,7 @@ package com.ynxbd.common.dao.his; import com.ynxbd.common.bean.HisRecipe; import com.ynxbd.common.bean.enums.MerchantEnum; +import com.ynxbd.common.bean.xk.medicalRecipe; import com.ynxbd.common.helper.his.HisEnum; import com.ynxbd.common.helper.his.HisHelper; import com.ynxbd.common.result.JsonResult; @@ -94,6 +95,28 @@ public class HisRecipeDao { return resultList; } + public List uploadMedicalRecipe(String treatNum, String personID, String recipes) { + List resultList = new ArrayList<>(); + + JsonResult jsonResult = HisHelper.getJsonResult(HisEnum.XK_MEDICAL_RECIPE, params -> { + params.put("PersonID",personID); + params.put("MZNum", treatNum); + params.put("CallNo",HisHelper.CALL_NO); + params.put("CFNums",recipes); + }); + + if (!jsonResult.success()) { // 失败 + return resultList; + } + + List medicalRecipe = jsonResult.getDataMapList(medicalRecipe.class, "CFNums"); + if (medicalRecipe != null) { + resultList = medicalRecipe; + } + return resultList; + } + + /** * HIS申请单预缴费 diff --git a/src/main/java/com/ynxbd/common/dao/peis/PeisDao.java b/src/main/java/com/ynxbd/common/dao/peis/PeisDao.java index 83166a7..065316c 100644 --- a/src/main/java/com/ynxbd/common/dao/peis/PeisDao.java +++ b/src/main/java/com/ynxbd/common/dao/peis/PeisDao.java @@ -61,6 +61,35 @@ public class PeisDao { return null; } + public Recipe selectByRecipeId(String recipeId) { + String sql = "select * from peis_reserve where recipeId=? and peisStatus = 0 and payStatus=0 order by updateTime desc"; + List list = DataBase.select(sql, Recipe.class, ps -> { + ps.setString(1, recipeId); + }); + if (list.size() > 0) { + return list.get(0); + } + return null; + } + + /** + * 修改退款描述 + * + * @param outTradeNo 订单号 + * @param recipeId 体检订单号 + * @param refundMsg 退款描述 + * @return 是否成功 + */ + public boolean updateRefundResult(String outTradeNo, String recipeId, String refundMsg) { + // 退款成功 + String sql = "update peis_reserve set refundResult=?, refundTime=now() where recipeId=? and outTradeNo=?"; + return DataBase.update(sql, ps -> { + ps.setString(1, refundMsg); + ps.setString(2, recipeId); + ps.setString(3, outTradeNo); + }) > 0; + } + public boolean updatePayStateOk(String outTradeNo, String bankTransNo) { String sql = "update peis_reserve set payStatus=0, bankTransNo=? where outTradeNo=? and bankTransNo is null"; return DataBase.update(sql, ps -> { @@ -68,4 +97,12 @@ public class PeisDao { ps.setString(2, outTradeNo); }) > 0; } + + public boolean updatePeisStateOk(String outTradeNo, String bankTransNo) { + String sql = "update peis_reserve set peisStatus=0, bankTransNo=? where outTradeNo=? and bankTransNo is null"; + return DataBase.update(sql, ps -> { + ps.setString(1, bankTransNo); + ps.setString(2, outTradeNo); + }) > 0; + } } 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 66c763f..aaccb77 100644 --- a/src/main/java/com/ynxbd/common/helper/his/HisEnum.java +++ b/src/main/java/com/ynxbd/common/helper/his/HisEnum.java @@ -91,6 +91,8 @@ public enum HisEnum { XK_CREATE_INQUIRY("[互联网医院]创建问诊记录","13006","UniversalInterface",true), + XK_MEDICAL_RECIPE("[互联网医院]处方医保双通道流转","13007","UniversalInterface",true), + ; diff --git a/src/main/java/com/ynxbd/common/helper/xbd/XBDHelper.java b/src/main/java/com/ynxbd/common/helper/xbd/XBDHelper.java index 5e12d63..a4949f7 100644 --- a/src/main/java/com/ynxbd/common/helper/xbd/XBDHelper.java +++ b/src/main/java/com/ynxbd/common/helper/xbd/XBDHelper.java @@ -14,12 +14,14 @@ import lombok.extern.slf4j.Slf4j; public class XBDHelper { private static final String OUT_TEAM_CLOUD_FILM; public static final String MEDICAL_RECORD_REMAKE_URL; + public static final String XBD_PEIS; public static OutTeamDao outTeamDao; 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"); if(OUT_TEAM_CLOUD_FILM ==null){ log.error("新八达内部团队配置文件读取失败"); } diff --git a/src/main/java/com/ynxbd/common/result/JsonResultEnum.java b/src/main/java/com/ynxbd/common/result/JsonResultEnum.java index 73cf6dc..8938a8a 100644 --- a/src/main/java/com/ynxbd/common/result/JsonResultEnum.java +++ b/src/main/java/com/ynxbd/common/result/JsonResultEnum.java @@ -23,6 +23,7 @@ public enum JsonResultEnum { SYS_RM_LIS("[瑞美LIS]", "ResultCode", "ResultMessage", "1", "0", String.valueOf(HttpStatus.SC_REQUEST_TIMEOUT)); + // 调用系统标识 public final String SYS; // 响应编码节点名 diff --git a/src/main/java/com/ynxbd/common/service/PeisService.java b/src/main/java/com/ynxbd/common/service/PeisService.java index 9057dbf..d990c92 100644 --- a/src/main/java/com/ynxbd/common/service/PeisService.java +++ b/src/main/java/com/ynxbd/common/service/PeisService.java @@ -1,11 +1,27 @@ package com.ynxbd.common.service; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +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.http.OkHttpHelper; +import com.ynxbd.common.helper.xbd.HttpHelper; +import com.ynxbd.common.helper.xbd.XBDHelper; +import com.ynxbd.common.result.JsonResult; +import com.ynxbd.common.result.JsonResultEnum; import com.ynxbd.common.result.Result; +import com.ynxbd.common.result.ServiceException; import lombok.extern.slf4j.Slf4j; +import okhttp3.FormBody; +import okhttp3.RequestBody; import java.math.BigDecimal; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; /** * @author 李进才 @@ -34,17 +50,135 @@ public class PeisService { } return new PeisDao().insert(recipe); } - public void payNotify(String outTradeNo, String bankTransNo){ + 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 recipeId = recipe.getRecipeId(); Integer payStates = recipe.getPayStatus(); if (payStates == 0) { - log.error("[体检预约]订单已支付 outTradeNo={}, bankTransNo={}, recipeId={}", outTradeNo, bankTransNo, recipeId); + log.error("[体检预约] 拒绝支付-订单已支付 outTradeNo={}, bankTransNo={}, recipeId={}", outTradeNo, bankTransNo, recipeId); return; } if (!peisDao.updatePayStateOk(outTradeNo, bankTransNo)) { log.info("[体检预约]修改支付状态失败 outTradeNo={}, bankTransNo={}", outTradeNo, bankTransNo); + RequestBody formBody = new FormBody.Builder(). + add("orderNo", recipeId) + .add("payStatus","FAIL") + .add("payFailReason","修改支付状态失败") + .add("bankTransNo",bankTransNo) + .add("outTradeNo",outTradeNo) + .build(); + String result = OkHttpHelper.post(XBDHelper.XBD_PEIS+"/wxUse/wxPay",formBody); + JSONObject jsonResult = JsonHelper.parseObject(result); + log.info("[体检预约]缴费失败回调体检系统计费 recipeId={}, bankTransNo-{}, 计费状态-{}, 计费信息-{}",recipeId,bankTransNo,jsonResult.get("code"),jsonResult.get("message")); + String pushMessage = "体检预约失败已申请退款,原因:修改支付状态失败,订单号:" + outTradeNo+"orderNo:"+ recipeId;; + peisAutoRefund(recipeId,merchantEnum,outTradeNo,totalFee,pushMessage,tradeDate,openid); } + else { + RequestBody formBody = new FormBody.Builder(). + add("orderNo", recipeId) + .add("payStatus", "OK") + .add("payFailReason", "") + .add("bankTransNo", bankTransNo) + .add("outTradeNo",outTradeNo) + .build(); + String result = OkHttpHelper.post(XBDHelper.XBD_PEIS + "/wxUse/wxPay", formBody); + JSONObject jsonResult = JsonHelper.parseObject(result); + log.info("[体检预约]缴费成功回调体检系统计费 recipeId={}, bankTransNo-{}, 计费状态-{}, 计费信息-{}", recipeId, bankTransNo, jsonResult.get("code"), jsonResult.get("message")); + if(result==null){ + String pushMessage = "体检预约失败已申请退款,原因:体检系统计费失败,订单号:" + outTradeNo+"orderNo:"+ recipeId; + peisAutoRefund(recipeId,merchantEnum,outTradeNo,totalFee,pushMessage,tradeDate,openid); + } + if("200".equals(jsonResult.get("code"))){ + if(!peisDao.updatePeisStateOk(outTradeNo, bankTransNo)){ + log.info("[体检预约]修改体检系统支付状态失败 outTradeNo={}, bankTransNo={}", outTradeNo, bankTransNo); + } + } + } + } + + /** + * 体检退费接口 + * @param recipeId 订单号 + * @param merchantEnum 支付方式 + * @param outTradeNo outTradeNo + * @param totalFee 总金额 + * @param pushInfo 提示信息 + * @param tradeDate 退费时间 + * @param openid openid + */ + public Result peisAutoRefund(String recipeId, MerchantEnum merchantEnum, String outTradeNo, BigDecimal totalFee, String pushInfo, Date tradeDate, String openid){ + PeisDao peisDao = new PeisDao(); + String result = OkHttpHelper.get(XBDHelper.XBD_PEIS+"/wxUse/GetOrder",params -> { + params.put("orderNo",recipeId); + }); + JSONObject jsonResult = JsonHelper.parseObject(result); + if(result==null){ + log.info("{} [体检预约][退费错误,计费信息查询失败] recipeId-{}, outTradeNo={}, recipeId={}, totalFee={}",recipeId, merchantEnum.NAME, outTradeNo, recipeId, totalFee); + return Result.error("退费错误,计费信息查询失败"); + } + String fee = jsonResult.getJSONObject("data").get("fee").toString(); + boolean isWxPay = Boolean.parseBoolean(jsonResult.getJSONObject("data").get("isWxPay").toString()); + boolean isCost = Boolean.parseBoolean(jsonResult.getJSONObject("data").get("isCost").toString()); + if(totalFee.compareTo(BigDecimal.ZERO)==0||"0".equals(fee)){ + log.info("{} [体检预约][退费错误,退费金额为0] recipeId-{}, outTradeNo={}, recipeId={}, totalFee={}",recipeId, merchantEnum.NAME, outTradeNo, recipeId, totalFee); + return Result.error("退费错误,退费金额为0"); + } + if(totalFee.equals(new BigDecimal(String.valueOf(fee)))){ + log.info("{} [体检预约][退费错误,退费金额跟订单金额不符] recipeId-{}, outTradeNo={}, recipeId={}, totalFee={}",recipeId, merchantEnum.NAME, outTradeNo, recipeId, totalFee); + return Result.error("退费错误,退费金额跟订单金额不符"); + } + if(isWxPay){ + log.info("{} [体检预约][退费错误,体检显示已计费,不允许退费] recipeId-{}, outTradeNo={}, recipeId={}, totalFee={}", recipeId, merchantEnum.NAME, outTradeNo, recipeId, totalFee); + return Result.error("退费错误,体检显示已计费,不允许退费"); + } + if(isCost){ + log.info("{} [体检预约][退费错误,his显示已计费,不允许退费] recipeId-{}, outTradeNo={}, recipeId={}, totalFee={}", recipeId, merchantEnum.NAME, outTradeNo, recipeId, totalFee); + return Result.error("退费错误,his显示已计费,不允许退费"); + } + String refundResult; + Order orderRefund = PayService.refund(merchantEnum, outTradeNo, recipeId, totalFee, totalFee, pushInfo, tradeDate, openid, null, pushInfo); + if (!orderRefund.isSuccess()) { + log.info("{} [体检预约][退费错误] outTradeNo={}, recipeId={}, totalFee={},recipeId-{}", merchantEnum.NAME, outTradeNo, recipeId, totalFee,recipeId); + refundResult = orderRefund.getRefundResult(); + } + else { + refundResult = "OK"; + } + boolean isUpdate = peisDao.updateRefundResult(outTradeNo, recipeId, refundResult); + if (!isUpdate) { + log.info("{} [体检预约][退费错误]退费信息更新失败 recipeId={}", merchantEnum.NAME, recipeId); + } + return Result.success(); + + } + + public boolean peisRefund(String recipeId, String refundStatus, String refundFailReason){ + RequestBody formBody = new FormBody.Builder(). + add("orderNo", recipeId) + .add("refundStatus",refundStatus) + .add("refundFailReason",refundFailReason) + .build(); + String result = OkHttpHelper.post(XBDHelper.XBD_PEIS+"/wxUse/wxRefund",formBody); + JSONObject jsonResult = JsonHelper.parseObject(result); + return "200".equals(jsonResult.get("code")); + } + + public static void main(String[] args) { + RequestBody formBody = new FormBody.Builder(). + add("orderNo", "Fee2023112900000001") + .add("payStatus","OK") + .add("payFailReason","") + .add("bankTransNo","4200001809202305012522296970") + .build(); + String result = OkHttpHelper.post(XBDHelper.XBD_PEIS+"/wxUse/wxPay",formBody); + System.out.println(result); +// String result = OkHttpHelper.get(XBDHelper.XBD_PEIS+"/wxUse/GetOrder",params -> { +// params.put("orderNo","Fee2023112900000001"); +// }); +// JSONObject jsonResult = JsonHelper.parseObject(result); +// System.out.println(result); + } + } diff --git a/src/main/java/com/ynxbd/wx/wxfactory/ReqParamHelper.java b/src/main/java/com/ynxbd/wx/wxfactory/ReqParamHelper.java index b6f1f0b..55ba92e 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("0")); + System.out.println(encode("30124039")); System.out.println(decode("5AE40D74FFF8C3F14A0491F8824C61EE")); } } 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 b490258..fd03c42 100644 --- a/src/main/java/com/ynxbd/wx/wxfactory/medical/Client.java +++ b/src/main/java/com/ynxbd/wx/wxfactory/medical/Client.java @@ -116,6 +116,10 @@ public class Client { //========================================================== params.put("hospital_name", hospitalName); // + if(MdConfig.IS_DEV){ + params.put("use_sandbox",1); + } + //========================================================= params.put("allow_fee_change", 1); // 是否允许预结算费用发生变化 {0:不允许 1:允许 当医保局返回的预结算金额与医院上传的金额不一致时,此字段为0则直接报错,为1则以医保局金额为准} diff --git a/src/main/resources/webservice.properties b/src/main/resources/webservice.properties index c1a7a48..686e77f 100644 --- a/src/main/resources/webservice.properties +++ b/src/main/resources/webservice.properties @@ -13,9 +13,9 @@ his.is_log_resp=true his.is_push_msg=false #------------------------------------------------------------- #本地 -his.md_url=192.168.12.10:8888 -his.dev_url=192.168.12.10:8888 -his.url=192.168.12.10:8888 +his.md_url=192.168.1.131:8888 +his.dev_url=192.168.1.131:8888 +his.url=192.168.1.131:8888 ali_code = 675448357 # 公司测试 diff --git a/src/main/resources/xbd.properties b/src/main/resources/xbd.properties index 12474a1..ac91206 100644 --- a/src/main/resources/xbd.properties +++ b/src/main/resources/xbd.properties @@ -1,2 +1,3 @@ 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