@RestController
@RequestMapping(path="/sign",produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
@Api(value = "签约控制器接口",tags="签约控制器接口-SignApiController",description = "签约控制器接口",produces="application/json")
public class SignApiController extends BaseApiController {@Autowiredprivate UnsignService unSignService;@Autowiredprivate SignService signService;@RequestMapping("unsign")@ApiOperation(value = "解约请求接口",httpMethod = "POST")PayCoreResult unsign(@RequestBody UnsignRequest request) {return unSignService.unsign(request);}@RequestMapping("query")@ApiOperation(value = "条件查询签约信息",httpMethod = "POST")PayCoreResult query(@RequestBody QuerySignRequest request) {return signService.query(request);}@RequestMapping("sign")@MethodRequired@ApiOperation(value = "协议签约接口",httpMethod = "POST")public PayCoreResult sign(@RequestBody SignRequest request){return signService.sign(request);}@RequestMapping("signConfirm")@ApiOperation(value = "协议签约确认接口",httpMethod = "POST")PayCoreResult signConfirm(@RequestBody SignConfirmRequest request){return signService.signConfirm(request);}@RequestMapping("checkSign")@ApiOperation(value = "校验是否需要签约",httpMethod = "POST")PayCoreResult checkSign(@RequestBody SignCheckRequest request){return signService.signCheck(request);}
}
public interface UnsignService {PayCoreResult<BaseResultVo> unsign(UnsignRequest request);boolean unsignAck(CoreBaseResponseBody responseBody);boolean unsignRecvGw(MessageEntity<BaseResponseBody> messageEntity) throws PayCoreException;}
@Service
public class UnsignServiceImpl extends ServiceBase implements UnsignService {private Logger logger = LoggerFactory.getLogger(UnsignServiceImpl.class);@Autowiredprivate MonitorService monitorService;@Autowiredprivate UnsignDomainFactory unsignDomainFactory;@Autowiredprivate UnsignCardCommandChain unsignCardCommandChain;@Autowiredprivate UnsignWapCommandChain unsignWapCommandChain;@Autowiredprivate UnsignCardCommand unsignCardCommand;@Autowiredprivate UnsignWapCommand unsignWapCommand;@Autowiredprivate UnsignDetailRepository unsignDetailRepository;@Autowiredprivate UnsignOrderRepository unsignOrderRepository;@Autowiredprivate UnsignNotifyBizCommand unsignNotifyBizCommand;@Autowiredprivate WapSignDetailRepository wapSignDetailRepository;@Autowiredprivate WapSignOrderRepository wapSignOrderRepository;@Autowiredprivate UnsignDomainRepository unsignDomainRepository;@Autowiredprivate WapSignNotifyBizCommand wapSignNotifyBizCommand;@Overridepublic PayCoreResult<BaseResultVo> unsign(UnsignRequest request) {return serviceTemplate.execute(new ServiceCallback<Domain, PayCoreResult>() {@Overridepublic Domain beforeProcess() throws PayCoreException {AssertUtils.isNotNull(request, SystemErrorCode.BIZ_PARAM_NULL);request.check();return unsignDomainFactory.createDomain(request);}@Overridepublic void execute(Domain domain) throws PayCoreException {UnsignDomain unsignDomain = (UnsignDomain) domain;if (StringUtils.equals(unsignDomain.getUnsignOrder().getSignType(), SignTypeEnum.CARD.code())) {unsignCardCommandChain.execute(domain);} else {unsignWapCommandChain.execute(domain);}}@Overridepublic PayCoreResult resultProcess(Domain domain) {UnsignDomain unsignDomain = (UnsignDomain) domain;return new PayCoreResult(new BaseResultVo(unsignDomain.getUnsignOrder().getBizStatus(),unsignDomain.getUnsignOrder().getRespCode(), unsignDomain.getUnsignOrder().getRespMsg()));}});}@Overridepublic boolean unsignAck(CoreBaseResponseBody responseBody) {UnsignDomain domain = new UnsignDomain();UnsignDetail detail = unsignDetailRepository.findByPayOrderNo(responseBody.getPayOrderNo());if (detail != null) {logger.info("解约订单已经存在,不需要继续发起解约,订单号payOrderNo:{}", responseBody.getPayOrderNo());return true;}UnsignOrder unsignOrder = unsignOrderRepository.findByPayOrderNo(responseBody.getPayOrderNo());if (unsignOrder == null|| StringUtils.equals(BizStatus.FAILED.code(), unsignOrder.getBizStatus())|| StringUtils.equals(BizStatus.SUCCESS.code(), unsignOrder.getBizStatus())) {return true;}domain.setUnsignOrder(unsignOrder);if (StringUtils.equals(unsignOrder.getSignType(), SignTypeEnum.CARD.code())) {unsignCardCommand.execute(domain);} else {unsignDomainRepository.findSignInfo(domain, unsignOrder.getAcctNo());unsignWapCommand.execute(domain);}return true;}@Overridepublic boolean unsignRecvGw(MessageEntity<BaseResponseBody> messageEntity) throws PayCoreException {Header header = messageEntity.getHeader();BaseResponseBody responseBody = messageEntity.getBody();String paySerialNo = header.getChannelTransNo();if (ProcessStatus.GW_DOING.getGwStatus().equals(responseBody.getTransStatus())) {return true;}UnsignDomain domain = new UnsignDomain();UnsignDetail detail = unsignDetailRepository.findByPaySerialNo(paySerialNo);if (detail == null) {logger.info("paySerialNo={}解约数据不存在,查找网关签约数据", paySerialNo);WapSignDetail wapSignDetail = wapSignDetailRepository.findByPaySerialNo(paySerialNo);AssertUtils.isNotNull(wapSignDetail, SystemErrorCode.DATA_NOT_EXIST, "签约明细不存在paySerialNo:" + paySerialNo);WapSignOrder wapSignOrder = wapSignOrderRepository.findByPayOrderNo(wapSignDetail.getPayOrderNo());AssertUtils.isNotNull(wapSignOrder, SystemErrorCode.DATA_NOT_EXIST, "签约订单不存在");domain.setWapSignDetail(wapSignDetail);domain.setWapSignOrder(wapSignOrder);domain.setExistUnsign(false);domain.setSignType(SignTypeEnum.WAP.code());} else {UnsignOrder unsignOrder = unsignOrderRepository.findByPayOrderNo(detail.getPayOrderNo());if (unsignOrder == null) {LoggerUtil.info(logger, "payOrderNo={}解约订单不存在", detail.getPayOrderNo());return true;}if (BizStatus.SUCCESS.getCode().equals(unsignOrder.getBizStatus())|| BizStatus.FAILED.getCode().equals(unsignOrder.getBizStatus())) {LoggerUtil.info(logger, "payOrderNo={}解约订单状态已经终态", detail.getPayOrderNo());return true;}domain.setUnsignOrder(unsignOrder);domain.setUnsignDetail(detail);domain.setExistUnsign(true);domain.setSignType(unsignOrder.getSignType());}try {domain = findAndSave(responseBody, domain);} catch (PayCoreException payCoreException) {if (StringUtils.equals(payCoreException.getErrorCode().getCode(),SystemErrorCode.ORDER_STATUS_ERR.code())) {LoggerUtil.error(logger, "订单已是终态,不需要重新处理");return true;}LoggerUtil.error(logger, "解约异步回执事务更新异常", payCoreException);return false;} catch (Exception e) {LoggerUtil.error(logger, "解约UnsignDetail回执事务更新异常,参数paySerialNo:{}", paySerialNo, e);return false;}unsignNotifyBizCommand.execute(domain);return true;}private UnsignDomain findAndSave(final BaseResponseBody responseBody, UnsignDomain domain) throws PayCoreException{return transactionTemplate.execute((TransactionStatus status)->{if (domain.isExistUnsign()) {UnsignOrder unsignOrder = domain.getUnsignOrder();UnsignDetail unsignDetail = domain.getUnsignDetail();UnsignDetail localUnsignDetail = unsignDetailRepository.getDetailByIdForUpdate(unsignDetail.getId());if (ProcessStatus.GW_SUCCESS.getCode().equals(localUnsignDetail.getProcessStatus())|| ProcessStatus.GW_FAILED.getCode().equals(localUnsignDetail.getProcessStatus())) {throw new PayCoreException(SystemErrorCode.ORDER_STATUS_ERR);}localUnsignDetail.setProcessStatus(responseBody.getTransStatus());localUnsignDetail.setGwTransNo(responseBody.getTransNo());localUnsignDetail.setGwTransDate(responseBody.getTransDateTime());localUnsignDetail.setGwRespCode(responseBody.getRespCode());localUnsignDetail.setGwRespMsg(responseBody.getRespMsg());localUnsignDetail.setUpdateTime(DateUtil.getCurrentDate());unsignOrder.setRespCode(localUnsignDetail.getGwRespCode());unsignOrder.setRespMsg(localUnsignDetail.getGwRespMsg());unsignOrder.setBizStatus(BizStatus.getByGwCode(responseBody.getTransStatus()).code());unsignOrder.setUpdateTime(DateUtil.getCurrentDate());domain.setUnsignOrder(unsignOrderRepository.save(unsignOrder));domain.setUnsignDetail(unsignDetailRepository.save(localUnsignDetail));unsignDomainRepository.storeUnsignInfo(domain);}return domain;});}}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!