| | |
| | | import org.slf4j.LoggerFactory; |
| | | import org.springframework.beans.BeanUtils; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.beans.factory.annotation.Value; |
| | | import org.springframework.data.redis.core.RedisTemplate; |
| | | import org.springframework.scheduling.annotation.Scheduled; |
| | | import org.springframework.stereotype.Service; |
| | |
| | | private IcbcPaymentClient icbcPaymentClient; |
| | | @Resource |
| | | private TChargingOrderShareRecordMapper chargingOrderShareRecordMapper; |
| | | @Value("${icbc.share.online-enabled:false}") |
| | | private boolean icbcOnlineShareEnabled; |
| | | @Resource |
| | | private ChargingOrderSettlementExecutor chargingOrderSettlementExecutor; |
| | | @Resource |
| | |
| | | |
| | | @Override |
| | | public Map<String, Object> countAll(List<Integer> siteIds, Boolean partnerView) { |
| | | return this.baseMapper.countAll(siteIds, partnerView); |
| | | Map<String, Object> result = this.baseMapper.countAll(siteIds, partnerView); |
| | | if (!Boolean.TRUE.equals(partnerView) && result != null) { |
| | | result.put("commission_amount", this.baseMapper.sumSuccessfulShareAmount(siteIds)); |
| | | } |
| | | return result; |
| | | } |
| | | |
| | | /** |
| | |
| | | shoppingOrderRefund.setRefundContent("后台退款"); |
| | | shoppingOrderRefund.setRefundReason("后台退款"); |
| | | shoppingOrderRefund.setRefundRemark(payOrderQueryDto.getRemark()); |
| | | shoppingOrderRefund.setRefundTotalAmount(shoppingOrder.getRefundAmount().add(payOrderQueryDto.getRefundAmount())); |
| | | shoppingOrderRefund.setRefundTotalAmount(money(shoppingOrder.getRefundAmount()).add(payOrderQueryDto.getRefundAmount())); |
| | | shoppingOrderRefund.setPayAmount(shoppingOrder.getPaymentAmount()); |
| | | |
| | | if (1 == shoppingOrder.getPaymentType()) { |
| | |
| | | shoppingOrderRefundService.save(shoppingOrderRefund); |
| | | } |
| | | } |
| | | if (3 == shoppingOrder.getPaymentType()) { |
| | | IcbcRefundReq refundReq = new IcbcRefundReq(); |
| | | refundReq.setOutTradeNo(shoppingOrder.getCode()); |
| | | refundReq.setOrderId(shoppingOrder.getSerialNumber()); |
| | | refundReq.setOutRefundNo(shoppingOrderRefund.getRefundCode()); |
| | | refundReq.setRefundAmount(payOrderQueryDto.getRefundAmount()); |
| | | refundReq.setTotalAmount(shoppingOrder.getPaymentAmount()); |
| | | refundReq.setReason("后台商城订单退款"); |
| | | R<IcbcRefundResp> refundResult = icbcPaymentClient.refund(refundReq); |
| | | IcbcRefundResp refundResp = refundResult == null ? null : refundResult.getData(); |
| | | if (refundResult == null || refundResult.getCode() != 200 || refundResp == null || !"SUCCESS".equals(refundResp.getStatus())) { |
| | | return R.fail(refundResult == null ? "工行退款服务无响应" |
| | | : firstNotBlank(refundResp == null ? null : refundResp.getRawResponse(), refundResult.getMsg(), "工行退款失败")); |
| | | } |
| | | shoppingOrder.setRefundStatus(2); |
| | | shoppingOrder.setRefundAmount(money(shoppingOrder.getRefundAmount()).add(payOrderQueryDto.getRefundAmount())); |
| | | shoppingOrder.setRefundSerialNumber(refundResp.getRefundId()); |
| | | shoppingOrder.setRefundTime(LocalDateTime.now()); |
| | | shoppingOrderService.updateById(shoppingOrder); |
| | | shoppingOrderRefund.setRefundStatus(2); |
| | | shoppingOrderRefund.setRefundSerialNumber(refundResp.getRefundId()); |
| | | shoppingOrderRefundService.save(shoppingOrderRefund); |
| | | } |
| | | // if(3 == tChargingOrder.getPaymentType()){ |
| | | // RefundReq dto = new RefundReq(); |
| | | // dto.setOutTradeNo(tChargingOrder.getCode()); |
| | |
| | | vipOrderRefund.setRefundContent("后台退款"); |
| | | vipOrderRefund.setRefundReason("后台退款"); |
| | | vipOrderRefund.setRefundRemark(payOrderQueryDto.getRemark()); |
| | | vipOrderRefund.setRefundTotalAmount(vipOrder.getRefundAmount().add(payOrderQueryDto.getRefundAmount())); |
| | | vipOrderRefund.setRefundTotalAmount(money(vipOrder.getRefundAmount()).add(payOrderQueryDto.getRefundAmount())); |
| | | vipOrderRefund.setPayAmount(vipOrder.getPaymentAmount()); |
| | | |
| | | if (1 == vipOrder.getPaymentType()) { |
| | |
| | | vipOrderService.updateById(vipOrder); |
| | | vipOrderRefundService.save(vipOrderRefund); |
| | | } |
| | | } |
| | | if (3 == vipOrder.getPaymentType()) { |
| | | IcbcRefundReq refundReq = new IcbcRefundReq(); |
| | | refundReq.setOutTradeNo(vipOrder.getCode()); |
| | | refundReq.setOrderId(vipOrder.getSerialNumber()); |
| | | refundReq.setOutRefundNo(vipOrderRefund.getRefundCode()); |
| | | refundReq.setRefundAmount(payOrderQueryDto.getRefundAmount()); |
| | | refundReq.setTotalAmount(vipOrder.getPaymentAmount()); |
| | | refundReq.setReason("后台会员订单退款"); |
| | | R<IcbcRefundResp> refundResult = icbcPaymentClient.refund(refundReq); |
| | | IcbcRefundResp refundResp = refundResult == null ? null : refundResult.getData(); |
| | | if (refundResult == null || refundResult.getCode() != 200 || refundResp == null || !"SUCCESS".equals(refundResp.getStatus())) { |
| | | return R.fail(refundResult == null ? "工行退款服务无响应" |
| | | : firstNotBlank(refundResp == null ? null : refundResp.getRawResponse(), refundResult.getMsg(), "工行退款失败")); |
| | | } |
| | | vipOrder.setRefundStatus(2); |
| | | vipOrder.setRefundAmount(money(vipOrder.getRefundAmount()).add(payOrderQueryDto.getRefundAmount())); |
| | | vipOrderService.updateById(vipOrder); |
| | | vipOrderRefund.setRefundStatus(2); |
| | | vipOrderRefund.setRefundSerialNumber(refundResp.getRefundId()); |
| | | vipOrderRefundService.save(vipOrderRefund); |
| | | } |
| | | // if(3 == tChargingOrder.getPaymentType()){ |
| | | // RefundReq dto = new RefundReq(); |
| | |
| | | record.setSubMerId(partner.getIcbcSubMerId()); |
| | | record.setSubMerPrtclNo(partner.getIcbcSubMerPrtclNo()); |
| | | } |
| | | boolean needOnlineShare = shouldProcessIcbcOnlineShare(payChannel, record.getShareAmount(), partner); |
| | | boolean needOnlineShare = shouldProcessIcbcOnlineShare(icbcOnlineShareEnabled, payChannel, record.getShareAmount(), partner); |
| | | record.setNeedOnlineShare(needOnlineShare); |
| | | record.setOnlineShareStatus(needOnlineShare ? "INIT" : "RECORDED"); |
| | | if ("ICBC".equals(payChannel) && record.getShareAmount().compareTo(BigDecimal.ZERO) > 0 && !needOnlineShare) { |
| | | record.setFailReason("未配置完整工行二级商户参数,仅记录本地分账"); |
| | | record.setFailReason(icbcOnlineShareEnabled |
| | | ? "未配置完整工行二级商户参数,仅记录本地分账" |
| | | : "工行线上分账已关闭,仅记录本地分账"); |
| | | } |
| | | record.setRetryCount(0); |
| | | record.setDelFlag(false); |
| | |
| | | } |
| | | |
| | | static boolean shouldProcessIcbcOnlineShare(String payChannel, BigDecimal shareAmount, Partner partner) { |
| | | return "ICBC".equals(payChannel) |
| | | return shouldProcessIcbcOnlineShare(true, payChannel, shareAmount, partner); |
| | | } |
| | | |
| | | static boolean shouldProcessIcbcOnlineShare(boolean onlineShareEnabled, String payChannel, BigDecimal shareAmount, Partner partner) { |
| | | return onlineShareEnabled |
| | | && "ICBC".equals(payChannel) |
| | | && shareAmount != null |
| | | && shareAmount.compareTo(BigDecimal.ZERO) > 0 |
| | | && partner != null |