package com.ynxbd.common.service; import com.alibaba.fastjson.JSONObject; import com.ynxbd.common.action.pay.PQREnum; import com.ynxbd.common.bean.enums.MerchantEnum; import com.ynxbd.common.bean.pay.PayCasebook; import com.ynxbd.common.dao.CasebookDao; import com.ynxbd.common.helper.common.CodeHelper; import com.ynxbd.common.helper.http.OkHttpHelper; import com.ynxbd.common.result.Result; import com.ynxbd.common.result.ResultEnum; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.ObjectUtils; import java.math.BigDecimal; @Slf4j public class CasebookService { public Result placeOrder(MerchantEnum merchantEnum, String ip, PayCasebook casebook) { String openid = casebook.getOpenid(); String patientId = casebook.getPatientId(); BigDecimal totalFee = casebook.getTotalFee(); if (openid == null || patientId == null || totalFee == null) { return Result.error(ResultEnum.PARAM_IS_DEFECT); } if (totalFee.compareTo(BigDecimal.ZERO) == 0) { return Result.error(ResultEnum.PAY_MONEY_IS_ZERO); } if (!isSaveCasebookInfo(casebook)) { log.info("{} [病例]下单信息存储失败 patientId={}", merchantEnum.NAME, patientId); return Result.error(ResultEnum.SPECIFIED_QUESTIONED_USER_NOT_EXIST); } String outTradeNo = CodeHelper.getOutTradeNo(merchantEnum); String body = "病院预约缴费"; JSONObject respJson = PayService.createOrder(merchantEnum, openid, patientId, totalFee.toString(), outTradeNo, PQREnum.CASEBOOK.CODE, ip, body); if (respJson == null) { return Result.error(ResultEnum.PAY_ERROR); // 支付异常 } return Result.success(respJson); } /** * @param casebook 病例订单信息 * @return 是否成功 */ public boolean isSaveCasebookInfo(PayCasebook casebook) { if (casebook == null) { log.info("casebook is null"); return false; } casebook.setPayState(-1); casebook.setNoticeState(-1); return new CasebookDao().insert(casebook); } public void payNotify(MerchantEnum merchantEnum, String openid, BigDecimal totalFee, String outTradeNo, String bankTransNo, String payInfo) { CasebookDao casebookDao = new CasebookDao(); PayCasebook order = casebookDao.selectByOutTradeNo(outTradeNo); String casebookId = order.getCasebookId(); if (ObjectUtils.isEmpty(casebookId)) { log.error("[病例]病例申请ID缺失 outTradeNo={}, bankTransNo={}, casebookId={}", outTradeNo, bankTransNo, casebookId); return; } Integer payState = order.getPayState(); Integer noticeState = order.getNoticeState(); if ((payState == null || payState == 0) || (noticeState == null || noticeState == 0)) { log.error("[病例]订单已支付 outTradeNo={}, bankTransNo={}, casebookId={}", outTradeNo, bankTransNo, casebookId); return; } if (!casebookDao.updatePayStateOk(outTradeNo, bankTransNo)) { log.info("[病例]修改支付状态失败 outTradeNo={}, bankTransNo={}, casebookId={}", outTradeNo, bankTransNo, casebookId); } JSONObject respJson = OkHttpHelper.postForm("http://127.0.0.1:80/api/Appointment/PaySuccess", params -> { params.put("Id", casebookId); params.put("BankTransNo", bankTransNo); params.put("Openid", openid); }, null); log.info("[病例]回调返回 resp={}", respJson); String code = respJson.getString("Code"); if ("200".equals(code)) { if (!casebookDao.updateNotifyOk(outTradeNo)) { log.info("[病例]更新订单信息失败 outTradeNo={}, bankTransNo={}, casebookId={}", outTradeNo, bankTransNo, casebookId); } return; } String message = respJson.getString("Msg"); log.info("[病例]回调失败 code={}, message={}", code, message); if (!casebookDao.updateNotifyErr(outTradeNo, message)) { log.info("[病例]更新订单错误信息失败 outTradeNo={}, code={}, message={}", outTradeNo, code, message); } } }