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.
		
		
		
		
			
				
					118 lines
				
				5.0 KiB
			
		
		
			
		
	
	
					118 lines
				
				5.0 KiB
			| 
											2 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.common.DateHelper;
 | ||
|  | import com.ynxbd.common.helper.common.JsonHelper;
 | ||
|  | import com.ynxbd.common.helper.http.OkHttpHelper;
 | ||
|  | import com.ynxbd.common.helper.xbd.XBDEnum;
 | ||
|  | import com.ynxbd.common.helper.xbd.XBDHttpHelper;
 | ||
|  | 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;
 | ||
|  | import java.util.Date;
 | ||
|  | 
 | ||
|  | @Slf4j
 | ||
|  | public class CasebookService {
 | ||
|  | 
 | ||
|  |     public Result placeOrder(MerchantEnum merchantEnum, String ip, String openid, String patientId, String treatNum, String totalFee,String applyId) {
 | ||
|  |         if (openid == null || patientId == null || totalFee == null) {
 | ||
|  |             return Result.error(ResultEnum.PARAM_IS_DEFECT);
 | ||
|  |         }
 | ||
|  | 
 | ||
|  |         if (BigDecimal.valueOf(Integer.parseInt(totalFee)).compareTo(BigDecimal.ZERO) == 0) {
 | ||
|  |             return Result.error(ResultEnum.PAY_MONEY_IS_ZERO);
 | ||
|  |         }
 | ||
|  | 
 | ||
|  |         if (!isSaveCasebookInfo(patientId,treatNum,applyId)) {
 | ||
|  |             log.info("{} [病例]下单信息存储失败 applyId-{}, patientId={},treatNum-{}", merchantEnum.NAME, applyId,patientId,treatNum);
 | ||
|  |             return Result.error(ResultEnum.SPECIFIED_QUESTIONED_USER_NOT_EXIST);
 | ||
|  |         }
 | ||
|  | 
 | ||
|  |         String outTradeNo = CodeHelper.getOutTradeNo(merchantEnum);
 | ||
|  | 
 | ||
|  |         String body = "病历复印缴费 住院号="+treatNum;
 | ||
|  | 
 | ||
|  |         JSONObject respJson = PayService.createOrder(merchantEnum, openid, patientId, totalFee, outTradeNo, PQREnum.CASEBOOK.CODE, ip, body);
 | ||
|  |         if (respJson == null) {
 | ||
|  |             return Result.error(ResultEnum.PAY_ERROR); // 支付异常
 | ||
|  |         }
 | ||
|  |         return Result.success(respJson);
 | ||
|  |     }
 | ||
|  | 
 | ||
|  | 
 | ||
|  |     /**
 | ||
|  |      * @param patientId 患者id
 | ||
|  |      * @param treatNum 住院号
 | ||
|  |      * @return 是否成功
 | ||
|  |      */
 | ||
|  |     public boolean isSaveCasebookInfo(String patientId,String treatNum,String applyId) {
 | ||
|  |         if (patientId == null||treatNum == null) {
 | ||
|  |             log.info("[病历复印]唤起支付 存入 applyId失败,patientId-{},treatNum-{}",patientId,treatNum);
 | ||
|  |             return false;
 | ||
|  |         }
 | ||
|  |         return new CasebookDao().updatePayStatePre(patientId,treatNum,applyId);
 | ||
|  |     }
 | ||
|  | 
 | ||
|  |     /**
 | ||
|  |      * 新增预约记录首次存入
 | ||
|  |      * @param casebook 病例订单信息
 | ||
|  |      * @return 是否成功
 | ||
|  |      */
 | ||
|  |     public boolean addApply(PayCasebook casebook,String openId,String patientId){
 | ||
|  |         if (casebook == null) {
 | ||
|  |             log.info("casebook is null");
 | ||
|  |             return false;
 | ||
|  |         }
 | ||
|  |         return new CasebookDao().insert(casebook,openId,patientId);
 | ||
|  |     }
 | ||
|  | 
 | ||
|  |     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.getApplyId();
 | ||
|  |         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);
 | ||
|  |         }
 | ||
|  | 
 | ||
|  |         String jsonString = XBDHttpHelper.ExecMethodGet(XBDEnum.BLSM_Appointment_GetHistoryAppointment.Name, params->{
 | ||
|  |             params.put("borrowNo",casebookId);
 | ||
|  |             params.put("payDateTime", DateHelper.getCurTime());
 | ||
|  |         });
 | ||
|  | 
 | ||
|  |         log.info("[病例]回调返回 resp={}", jsonString);
 | ||
|  |         String code = JsonHelper.parseObject(jsonString).getString("Code");
 | ||
|  |         if (code==null) {
 | ||
|  |             if (!casebookDao.updateNotifyOk(outTradeNo)) {
 | ||
|  |                 log.info("[病例]更新订单信息失败 outTradeNo={}, bankTransNo={}, casebookId={}", outTradeNo, bankTransNo, casebookId);
 | ||
|  |             }
 | ||
|  |             return;
 | ||
|  |         }
 | ||
|  | 
 | ||
|  |         String message = JsonHelper.parseObject(jsonString).getString("Msg");
 | ||
|  |         log.info("[病例]回调失败 code={}, message={}", code, message);
 | ||
|  |         if (!casebookDao.updateNotifyErr(outTradeNo, message)) {
 | ||
|  |             log.info("[病例]更新订单错误信息失败 outTradeNo={}, code={}, message={}", outTradeNo, code, message);
 | ||
|  |         }
 | ||
|  |     }
 | ||
|  | }
 |