diff --git a/ghy-admin/src/main/java/com/ghy/web/controller/order/OrderDetailController.java b/ghy-admin/src/main/java/com/ghy/web/controller/order/OrderDetailController.java index d1ac215e..3b9e3ab1 100644 --- a/ghy-admin/src/main/java/com/ghy/web/controller/order/OrderDetailController.java +++ b/ghy-admin/src/main/java/com/ghy/web/controller/order/OrderDetailController.java @@ -646,6 +646,9 @@ public class OrderDetailController extends BaseController { // 判断工单状态是否为服务中以及是否已支付 OrderDetail orderDetail = orderDetailService.selectById(request.getOrderDetailId()); OrderMaster orderMaster = orderMasterService.selectById(orderDetail.getOrderMasterId()); + if(orderDetail.getOrderStatus() != OrderStatus.FINISH_CHECK.code()){ + return AjaxResult.success("发起成功"); + } if (orderDetail.getOrderStatus() != OrderStatus.SERVER.code() || !orderMaster.getPayStatus().equals(PayStatus.PAID.getCode())) { return AjaxResult.error("未支付订单或非服务中订单,发起完单失败"); diff --git a/ghy-order/src/main/java/com/ghy/order/service/impl/OrderDetailServiceImpl.java b/ghy-order/src/main/java/com/ghy/order/service/impl/OrderDetailServiceImpl.java index b2c832f9..ff0fefad 100644 --- a/ghy-order/src/main/java/com/ghy/order/service/impl/OrderDetailServiceImpl.java +++ b/ghy-order/src/main/java/com/ghy/order/service/impl/OrderDetailServiceImpl.java @@ -317,6 +317,39 @@ public class OrderDetailServiceImpl implements OrderDetailService { } // 更新订单状态 orderDetailMapper.updateStatus(orderDetailId, OrderStatus.FINISH.code()); + // 找到所有的加价记录 + List financialChangeRecords = financialChangeRecordService.selectByDetailIds(String.valueOf(orderDetailId)); + if(!CollectionUtils.isEmpty(financialChangeRecords)){ + ArrayList divMembers = new ArrayList<>(); + financialChangeRecords.forEach(financialChangeRecord -> { + // 递增解决分账 + financialDetail.forEach(detail->{ + BigDecimal money; + // 剩余金额足够本次分账 + if(financialChangeRecord.getLeftMoney().compareTo(detail.getPayMoney()) > 0){ + money = detail.getPayMoney(); + detail.setPayMoney(BigDecimal.ZERO); + }else { + // 剩余金额不够分账 + money = financialChangeRecord.getLeftMoney(); + detail.setPayMoney(detail.getPayMoney().subtract(money)); + } + String memberId = AdapayUtils.getWorkerMemberId(detail.getPayeeId(), detail.getDeptId()); + DivMember divMember = new DivMember(memberId, AdapayUtils.bigDecimalToString(money), false); + divMembers.add(divMember); + }); + //调用分账 + logger.info("子订单[code={}]分账信息: {}", orderDetail.getCode(), JSON.toJSONString(divMembers)); + JSONObject response; + try { + response = adapayService.paymentConfirm(financialDetail.get(0).getDeptId(), financialChangeRecord.getRemark(), payment.getOrderNo() + "_" + System.currentTimeMillis(), + String.valueOf(financialChangeRecord.getLeftMoney()), divMembers, null, null); + logger.info("子订单[code={}]分账结果: {}", orderDetail.getCode(), response.toJSONString()); + } catch (BaseAdaPayException e) { + throw new RuntimeException(e); + } + }); + } // 分账账户信息 Map divMemberMap = new HashMap<>(); ArrayList divMembers = new ArrayList<>(); diff --git a/ghy-payment/src/main/java/com/ghy/payment/domain/FinancialChangeRecord.java b/ghy-payment/src/main/java/com/ghy/payment/domain/FinancialChangeRecord.java index adc987a2..21df4ad7 100644 --- a/ghy-payment/src/main/java/com/ghy/payment/domain/FinancialChangeRecord.java +++ b/ghy-payment/src/main/java/com/ghy/payment/domain/FinancialChangeRecord.java @@ -39,6 +39,17 @@ public class FinancialChangeRecord extends BaseEntity @Excel(name = "1.本单报价 2.加单报价") private Integer type; + @Excel(name = "剩余分账金额") + private BigDecimal leftMoney; + + public BigDecimal getLeftMoney() { + return leftMoney; + } + + public void setLeftMoney(BigDecimal leftMoney) { + this.leftMoney = leftMoney; + } + public void setId(String id) { this.id = id; @@ -102,6 +113,7 @@ public class FinancialChangeRecord extends BaseEntity .append("status", getStatus()) .append("payStatus", getPayStatus()) .append("type", getType()) + .append("leftMoney", getLeftMoney()) .toString(); } } diff --git a/ghy-payment/src/main/java/com/ghy/payment/service/impl/FinancialChangeRecordServiceImpl.java b/ghy-payment/src/main/java/com/ghy/payment/service/impl/FinancialChangeRecordServiceImpl.java index fcbeb39a..afb76d13 100644 --- a/ghy-payment/src/main/java/com/ghy/payment/service/impl/FinancialChangeRecordServiceImpl.java +++ b/ghy-payment/src/main/java/com/ghy/payment/service/impl/FinancialChangeRecordServiceImpl.java @@ -66,6 +66,7 @@ public class FinancialChangeRecordServiceImpl implements FinancialChangeRecordSe @Override public int insertFinancialChangeRecord(FinancialChangeRecord financialChangeRecord) { + financialChangeRecord.setLeftMoney(financialChangeRecord.getChangeMoney()); return financialChangeRecordMapper.insertFinancialChangeRecord(financialChangeRecord); } diff --git a/ghy-payment/src/main/java/com/ghy/payment/service/impl/FinancialMasterServiceImpl.java b/ghy-payment/src/main/java/com/ghy/payment/service/impl/FinancialMasterServiceImpl.java index 3337e9d7..f3b1e74d 100644 --- a/ghy-payment/src/main/java/com/ghy/payment/service/impl/FinancialMasterServiceImpl.java +++ b/ghy-payment/src/main/java/com/ghy/payment/service/impl/FinancialMasterServiceImpl.java @@ -10,6 +10,7 @@ import com.ghy.payment.mapper.FinancialMasterMapper; import com.ghy.payment.mapper.PaymentMapper; import com.ghy.payment.service.FinancialDetailService; import com.ghy.payment.service.FinancialMasterService; +import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; @@ -106,7 +107,9 @@ public class FinancialMasterServiceImpl implements FinancialMasterService { List result = financialMasterMapper.selectFinancialMasterList(param); if(!CollectionUtils.isEmpty(result)){ financialMasterMapper.updateOrderStatus(result.get(0).getOrderMasterCode(), PayStatus.PAID.getCode()); - financialMasterMapper.paySucceeded(paymentId, result.get(0).getId(), payType); + if(StringUtils.isEmpty(result.get(0).getPaymentId())){ + financialMasterMapper.paySucceeded(paymentId, result.get(0).getId(), payType); + } FinancialDetail request = new FinancialDetail(); request.setFinancialMasterId(result.get(0).getId()); request.setPayStatus(PayStatus.PAID.getCode()); diff --git a/ghy-payment/src/main/java/com/ghy/payment/service/impl/PayCallbackService.java b/ghy-payment/src/main/java/com/ghy/payment/service/impl/PayCallbackService.java index 397c0535..23f687ec 100644 --- a/ghy-payment/src/main/java/com/ghy/payment/service/impl/PayCallbackService.java +++ b/ghy-payment/src/main/java/com/ghy/payment/service/impl/PayCallbackService.java @@ -72,6 +72,8 @@ public class PayCallbackService implements CallBackService { FinancialChangeRecord financialChangeRecord = new FinancialChangeRecord(); financialChangeRecord.setId(financialChangeRecordId); financialChangeRecord.setPayStatus(1); + // 加价的支付paymentId回填到remark + financialChangeRecord.setRemark(payment.getId()); financialChangeRecordService.updateFinancialChangeRecord(financialChangeRecord); // 修改子订单的payMoney diff --git a/ghy-payment/src/main/resources/mapper/financial/FinancialChangeRecordMapper.xml b/ghy-payment/src/main/resources/mapper/financial/FinancialChangeRecordMapper.xml index f13142b8..f71edb0e 100644 --- a/ghy-payment/src/main/resources/mapper/financial/FinancialChangeRecordMapper.xml +++ b/ghy-payment/src/main/resources/mapper/financial/FinancialChangeRecordMapper.xml @@ -10,10 +10,11 @@ + - select id, order_detail_id, change_money, status, pay_status, type, remark from financial_change_record + select id, order_detail_id, change_money, status, pay_status, type, left_money, remark from financial_change_record