You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
			
				
					106 lines
				
				4.3 KiB
			
		
		
			
		
	
	
					106 lines
				
				4.3 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								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);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 |