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 5e4e0a4..4b09e0d 100644 --- a/src/main/java/com/ynxbd/common/action/pay/PayAction.java +++ b/src/main/java/com/ynxbd/common/action/pay/PayAction.java @@ -21,6 +21,7 @@ import com.ynxbd.common.result.ServiceException; import com.ynxbd.common.service.*; import com.ynxbd.common.service.params.RegParams; import com.ynxbd.wx.config.WeChatConfig; +import com.ynxbd.wx.wxfactory.ReqParamHelper; import com.ynxbd.wx.wxfactory.WxPayHelper; import lombok.extern.slf4j.Slf4j; import org.apache.commons.codec.digest.DigestUtils; @@ -131,19 +132,19 @@ public class PayAction extends BaseAction { /** - * @param openid openid - * @param patientId 患者id - * @param treatNum 体检号 - * @param totalFee 总金额 - * @param recipeId 处方号 - * @param payCode 支付方式 + * @param openid openid + * @param patientId 患者id + * @param treatNum 体检号 + * @param totalFee 总金额 + * @param recipeId 处方号 + * @param payCode 支付方式 */ @Action("PeisPay") - public Result PeisPay(String openid, String patientId, String treatNum, String totalFee, String recipeId,String payCode){ - if(openid==null||patientId==null||treatNum==null||totalFee==null||recipeId==null){ + public Result PeisPay(String openid, String patientId, String treatNum, String totalFee, String recipeId, String payCode) { + if (openid == null || patientId == null || treatNum == null || totalFee == null || recipeId == null) { return Result.error(ResultEnum.PARAM_IS_DEFECT); } - if(new BigDecimal(totalFee).compareTo(BigDecimal.ZERO)==0){ + if (new BigDecimal(totalFee).compareTo(BigDecimal.ZERO) == 0) { return Result.error(ResultEnum.PAY_MONEY_IS_ZERO); } MerchantEnum merchantEnum = MerchantEnum.getMerchantEnumByCode(payCode); @@ -152,13 +153,13 @@ public class PayAction extends BaseAction { } String outTradeNo = CodeHelper.getOutTradeNo(merchantEnum); PeisService peisService = new PeisService(); - if(!peisService.Reserve(openid,patientId,treatNum,outTradeNo,totalFee,recipeId)){ - log.info("{} [体检预约]体检预约信息保存失败 patientId={},recipeId-{}", merchantEnum.NAME, patientId,recipeId); + if (!peisService.Reserve(openid, patientId, treatNum, outTradeNo, totalFee, recipeId)) { + log.info("{} [体检预约]体检预约信息保存失败 patientId={},recipeId-{}", merchantEnum.NAME, patientId, recipeId); return Result.error(ResultEnum.SPECIFIED_QUESTIONED_USER_NOT_EXIST); } String ip = request.getRemoteAddr(); - String body = "体检预约 患者:" + patientId + "\n体检号:" + treatNum + "\n订单号:" + recipeId; + String body = "体检预约 患者:" + patientId + "\n体检号:" + treatNum + "\n订单号:" + recipeId; JSONObject respJson = PayService.createOrder(merchantEnum, openid, patientId, totalFee, outTradeNo, PEnum.PEIS_RESERVE.CODE, ip, body); // 支付异常 if (respJson == null) { @@ -170,29 +171,29 @@ public class PayAction extends BaseAction { /** * 体检退费 - * @param recipeId 订单号 - * @param payCode 支付方式 - * @param totalFee 订单金额 + * + * @param recipeId 订单号 + * @param payCode 支付方式 + * @param totalFee 订单金额 * @param outTradeNo outTradeNo - * @param openid openid + * @param openid openid */ @Action("peisRefund") - public Result peisRefund(String recipeId, String payCode, String outTradeNo, String totalFee,String openid){ - log.info("[体检预约]取消预约退费,recipeId-{}.payCode-{},outTradeNo-{},totalFee-{},openid-{}",recipeId,payCode,outTradeNo,totalFee,openid); + public Result peisRefund(String recipeId, String payCode, String outTradeNo, String totalFee, String openid) { + log.info("[体检预约]取消预约退费,recipeId-{}.payCode-{},outTradeNo-{},totalFee-{},openid-{}", recipeId, payCode, outTradeNo, totalFee, openid); PeisService peisService = new PeisService(); MerchantEnum merchantEnum = MerchantEnum.getMerchantEnumByCode(payCode); PeisDao peisDao = new PeisDao(); Recipe recipe = peisDao.selectByOutTradeNo(outTradeNo); - if(new BigDecimal(totalFee).compareTo(recipe.getTotalFee())!=0){ + if (new BigDecimal(totalFee).compareTo(recipe.getTotalFee()) != 0) { 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()); + 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; } @@ -504,7 +505,7 @@ public class PayAction extends BaseAction { } @Action("refundRegister") - public Result refundRegister(String hisTransNo){ + public Result refundRegister(String hisTransNo) { return new RegService().refundRegister(hisTransNo); } @@ -807,16 +808,26 @@ public class PayAction extends BaseAction { * [在线问诊]支付 */ @Action("createOLOrder") - public Result createOLOrder(String payCode, String openid, String patientId, BigDecimal totalFee, String deptCode, String deptName, String doctName, String doctCode) { - if ( totalFee == null || ObjectUtils.isEmpty(openid) || ObjectUtils.isEmpty(patientId) || ObjectUtils.isEmpty(deptName) || ObjectUtils.isEmpty(doctName)) { + public Result createOLOrder(String payCode, String outTradeNo, String enOutTradeNo, String openid, String patientId, BigDecimal totalFee, String deptCode, String deptName, String doctName, String doctCode) { + log.info("[问诊]订单创建 payCode={}, outTradeNo={}, enOutTradeNo={}, deptCode={}, doctCode={}, totalFee={}", payCode, outTradeNo, enOutTradeNo, deptCode, doctCode, totalFee); + if (totalFee == null || ObjectUtils.isEmpty(openid) || ObjectUtils.isEmpty(patientId) || ObjectUtils.isEmpty(deptName) || ObjectUtils.isEmpty(doctName)) { return Result.error(ResultEnum.PARAM_IS_DEFECT); } if (totalFee.compareTo(BigDecimal.ZERO) == 0) { // 0 元处理 return Result.error(ResultEnum.PAY_MONEY_IS_ZERO); } + if (ObjectUtils.isEmpty(outTradeNo)) { + outTradeNo = CodeHelper.getOutTradeNo(MerchantEnum.WX); + } else { + if (outTradeNo.length() > 32) { + return Result.error(ResultEnum.PARAM_IS_INVALID); + } + + if (!outTradeNo.equals(ReqParamHelper.decode(enOutTradeNo))) { + return Result.error(ResultEnum.PARAM_IS_INVALID); + } + } MerchantEnum merchantEnum = MerchantEnum.getMerchantEnumByCode(payCode); - String outTradeNo = CodeHelper.getOutTradeNo(merchantEnum); - if (merchantEnum == null) { return Result.error(ResultEnum.PAY_TYPE_NOT_SUPPORT); } @@ -827,7 +838,7 @@ public class PayAction extends BaseAction { if (respJson == null) { return Result.error(ResultEnum.PAY_ERROR); // 支付异常 } - respJson.put("outTradeNo",outTradeNo); + respJson.put("outTradeNo", outTradeNo); return Result.success(respJson); }