提交 cf4f73fb 作者: xiaowang

确认结算

上级 03cba7cd
...@@ -114,4 +114,11 @@ public class LeaseOrderController extends BaseController { ...@@ -114,4 +114,11 @@ public class LeaseOrderController extends BaseController {
return leaseOrderService.removeLeaseOrder(id); return leaseOrderService.removeLeaseOrder(id);
} }
@ApiOperation(value = "小程序确认结算")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = ResultBody.class)})
@GetMapping("confirmSettlement")
public ResultBody confirmSettlement(@RequestParam Integer id, HttpServletRequest request) throws Exception {
return leaseOrderService.confirmSettlement(id, this.getCurrentAccount(request));
}
} }
...@@ -40,4 +40,6 @@ public interface LeaseOrderService { ...@@ -40,4 +40,6 @@ public interface LeaseOrderService {
ResultBody giveBack(LeaseOrderRefundVO leaseOrderRefundVO, BaseAccountDTO currentAccount); ResultBody giveBack(LeaseOrderRefundVO leaseOrderRefundVO, BaseAccountDTO currentAccount);
ResultBody pfConfirmOrderWare(BaseAccountDTO currentAccount, LeaseOrderRefundVO param); ResultBody pfConfirmOrderWare(BaseAccountDTO currentAccount, LeaseOrderRefundVO param);
ResultBody confirmSettlement(Integer id, BaseAccountDTO currentAccount);
} }
...@@ -614,7 +614,7 @@ public class LeaseOrderServiceImpl implements LeaseOrderService { ...@@ -614,7 +614,7 @@ public class LeaseOrderServiceImpl implements LeaseOrderService {
// 修改订单状态 // 修改订单状态
LeaseOrderDO leaseOrderDO = leaseOrderDao.detail(param.getUavOrderId()); LeaseOrderDO leaseOrderDO = leaseOrderDao.detail(param.getUavOrderId());
if (!leaseOrderDO.getStatusCode().toString().equals(LeaseOrderStatus.PAID.getCode().toString())) { if (!leaseOrderDO.getStatusCode().toString().equals(LeaseOrderStatus.PAID.getCode().toString())) {
return ResultBody.error("状态流程有误,请重试!"); return ResultBody.error("状态流程有误!");
} }
this.updateLeaseOrderStatus(param.getUavOrderId(), LeaseOrderStatus.SHIPPED); this.updateLeaseOrderStatus(param.getUavOrderId(), LeaseOrderStatus.SHIPPED);
// 修改收货信息 // 修改收货信息
...@@ -629,7 +629,7 @@ public class LeaseOrderServiceImpl implements LeaseOrderService { ...@@ -629,7 +629,7 @@ public class LeaseOrderServiceImpl implements LeaseOrderService {
// 修改订单状态 // 修改订单状态
LeaseOrderDO leaseOrderDO = leaseOrderDao.detail(leaseOrderRefundVO.getOrderId()); LeaseOrderDO leaseOrderDO = leaseOrderDao.detail(leaseOrderRefundVO.getOrderId());
if (!leaseOrderDO.getStatusCode().equals(LeaseOrderStatus.SHIPPED.getCode())) { if (!leaseOrderDO.getStatusCode().equals(LeaseOrderStatus.SHIPPED.getCode())) {
return ResultBody.error("状态流程有误,请重试!"); return ResultBody.error("状态流程有误!");
} }
if (StringUtils.isNotEmpty(leaseOrderRefundVO.getFile()) || StringUtils.isNotEmpty(leaseOrderRefundVO.getReason())) { if (StringUtils.isNotEmpty(leaseOrderRefundVO.getFile()) || StringUtils.isNotEmpty(leaseOrderRefundVO.getReason())) {
// 插入确认信息 // 插入确认信息
...@@ -672,7 +672,7 @@ public class LeaseOrderServiceImpl implements LeaseOrderService { ...@@ -672,7 +672,7 @@ public class LeaseOrderServiceImpl implements LeaseOrderService {
LeaseOrderDO leaseOrderDO = leaseOrderDao.detail(leaseOrderRefundVO.getOrderId()); LeaseOrderDO leaseOrderDO = leaseOrderDao.detail(leaseOrderRefundVO.getOrderId());
log.info("leaseOrderDO:{}", JSONObject.toJSONString(leaseOrderDO)); log.info("leaseOrderDO:{}", JSONObject.toJSONString(leaseOrderDO));
if (!leaseOrderDO.getStatusCode().equals(LeaseOrderStatus.TO_BE_RETURNED.getCode())) { if (!leaseOrderDO.getStatusCode().equals(LeaseOrderStatus.TO_BE_RETURNED.getCode())) {
return ResultBody.error("状态流程有误,请重试!"); return ResultBody.error("状态流程有误!");
} }
LeaseOrderExpressDO leaseOrderExpressDO = new LeaseOrderExpressDO(leaseOrderRefundVO); LeaseOrderExpressDO leaseOrderExpressDO = new LeaseOrderExpressDO(leaseOrderRefundVO);
leaseOrderDao.updateLeaseOrderExpress(leaseOrderExpressDO); leaseOrderDao.updateLeaseOrderExpress(leaseOrderExpressDO);
...@@ -698,11 +698,8 @@ public class LeaseOrderServiceImpl implements LeaseOrderService { ...@@ -698,11 +698,8 @@ public class LeaseOrderServiceImpl implements LeaseOrderService {
BigDecimal shareAmount = leaseOrderDO.getShareAmount(); BigDecimal shareAmount = leaseOrderDO.getShareAmount();
BigDecimal salaryAmount = leaseOrderDO.getSalaryAmount(); BigDecimal salaryAmount = leaseOrderDO.getSalaryAmount();
if (shareAmount.compareTo(BigDecimal.ZERO) > 0 || salaryAmount.compareTo(BigDecimal.ZERO) > 0) { if (shareAmount.compareTo(BigDecimal.ZERO) > 0 || salaryAmount.compareTo(BigDecimal.ZERO) > 0) {
PayUavWalletVO userPayUavWalletVO = new PayUavWalletVO(); // 金额解冻
userPayUavWalletVO.setRemark("租赁订单金额解冻"); PayUavWalletVO userPayUavWalletVO = amountUnfreezing(leaseOrderDO, shareAmount, salaryAmount);
userPayUavWalletVO.setCashAmount(shareAmount.add(leaseOrderDO.getShareCashPledge()));
userPayUavWalletVO.setSalaryAmount(salaryAmount.add(leaseOrderDO.getSalaryCashPledge()));
userPayUavWalletVO.setUserAccountId(leaseOrderDO.getUserAccountId());
userPayUavWalletVO.setOrderStatus(isWaitingMerchantConfirm ? 999 : 1400); userPayUavWalletVO.setOrderStatus(isWaitingMerchantConfirm ? 999 : 1400);
ResultBody resultBody = userAppApi.feignPayUavWallet(userPayUavWalletVO, currentAccount.getToken()); ResultBody resultBody = userAppApi.feignPayUavWallet(userPayUavWalletVO, currentAccount.getToken());
if (!resultBody.getCode().equals(ResultEnum.SUCCESS.getResultCode())) { if (!resultBody.getCode().equals(ResultEnum.SUCCESS.getResultCode())) {
...@@ -710,10 +707,7 @@ public class LeaseOrderServiceImpl implements LeaseOrderService { ...@@ -710,10 +707,7 @@ public class LeaseOrderServiceImpl implements LeaseOrderService {
} }
// 退回微信支付的押金部分 // 退回微信支付的押金部分
if (leaseOrderDO.getOtherPledge().compareTo(BigDecimal.ZERO) > 0) { if (leaseOrderDO.getOtherPledge().compareTo(BigDecimal.ZERO) > 0) {
ApplyRefundVO applyRefundVO = new ApplyRefundVO(); ApplyRefundVO applyRefundVO = wxRefund(leaseOrderDO);
applyRefundVO.setOutTradeNo(leaseOrderDO.getOrderNo());
applyRefundVO.setReason("租赁押金退款");
applyRefundVO.setRefund(leaseOrderDO.getOtherPledge().multiply(BigDecimal.valueOf(100)).longValue());
ResultBody refundOtherPledge = paymentAppApi.applyRefund(applyRefundVO, currentAccount.getToken()); ResultBody refundOtherPledge = paymentAppApi.applyRefund(applyRefundVO, currentAccount.getToken());
if (!refundOtherPledge.getCode().equals(ResultEnum.SUCCESS.getResultCode())) { if (!refundOtherPledge.getCode().equals(ResultEnum.SUCCESS.getResultCode())) {
return refundOtherPledge; return refundOtherPledge;
...@@ -728,38 +722,12 @@ public class LeaseOrderServiceImpl implements LeaseOrderService { ...@@ -728,38 +722,12 @@ public class LeaseOrderServiceImpl implements LeaseOrderService {
BigDecimal shareCashPledge = leaseOrderDO.getShareCashPledge(); BigDecimal shareCashPledge = leaseOrderDO.getShareCashPledge();
BigDecimal salaryCashPledge = leaseOrderDO.getSalaryCashPledge(); BigDecimal salaryCashPledge = leaseOrderDO.getSalaryCashPledge();
if ((shareCashPledge.compareTo(BigDecimal.ZERO) > 0 || salaryCashPledge.compareTo(BigDecimal.ZERO) > 0)) { if ((shareCashPledge.compareTo(BigDecimal.ZERO) > 0 || salaryCashPledge.compareTo(BigDecimal.ZERO) > 0)) {
userPayUavWalletVO.setRemark("租赁押金退回"); moneyRefund(shareCashPledge, salaryCashPledge, currentAccount, leaseOrderDO);
userPayUavWalletVO.setCashAmount(shareCashPledge);
userPayUavWalletVO.setSalaryAmount(salaryCashPledge);
userPayUavWalletVO.setUserAccountId(leaseOrderDO.getUserAccountId());
userPayUavWalletVO.setOrderStatus(1600);
ResultBody giveBackPledge = userAppApi.feignPayUavWallet(userPayUavWalletVO, currentAccount.getToken());
if (!resultBody.getCode().equals(ResultEnum.SUCCESS.getResultCode())) {
return giveBackPledge;
}
} }
} }
} }
if (isWaitingMerchantConfirm) { if (isWaitingMerchantConfirm) {
BigDecimal thirdAmount = leaseOrderDO.getOrderTotalAmount().multiply( return businessIncome(currentAccount, param.getOrderId(), leaseOrderDO);
BigDecimal.valueOf(100).subtract(UavOrderProportion.PROPORTION).divide(BigDecimal.valueOf(100)));
PayUavWalletVO payUavWalletVO = new PayUavWalletVO();
payUavWalletVO.setSalaryAmount(thirdAmount);
payUavWalletVO.setCashAmount(BigDecimal.ZERO);
payUavWalletVO.setRemark("租赁订单收入,订单编号" + leaseOrderDO.getOrderNo());
payUavWalletVO.setOrderStatus(1500);
// 拿到商家管理员的用户id
ResultBody managerRes = userAppApi.getManagerIdByBackUserId(leaseOrderDO.getThirdBackUserAccountId(), null);
if (!managerRes.getCode().equals(ResultEnum.SUCCESS.getResultCode())) {
return managerRes;
}
payUavWalletVO.setUserAccountId((Integer) managerRes.getResult());
ResultBody resultIncomeBody = userAppApi.feignPayUavWallet(payUavWalletVO, currentAccount.getToken());
if (!resultIncomeBody.getCode().equals(ResultEnum.SUCCESS.getResultCode())) {
return resultIncomeBody;
}
leaseOrderDao.updateLeaseOrderProportion(leaseOrderDO.getId(), UavOrderProportion.PROPORTION.intValue());
this.updateLeaseOrderStatus(param.getOrderId(), LeaseOrderStatus.REMAIN_TO_BE_EVALUATED);
} }
} else { } else {
// 有破损等待平台 // 有破损等待平台
...@@ -774,8 +742,132 @@ public class LeaseOrderServiceImpl implements LeaseOrderService { ...@@ -774,8 +742,132 @@ public class LeaseOrderServiceImpl implements LeaseOrderService {
this.updateLeaseOrderStatus(param.getOrderId(), LeaseOrderStatus.MODIFIED_DEPOSIT_TO_BE_CONFIRMED); this.updateLeaseOrderStatus(param.getOrderId(), LeaseOrderStatus.MODIFIED_DEPOSIT_TO_BE_CONFIRMED);
} }
} else { } else {
return ResultBody.error("状态流程有误,请重试"); return ResultBody.error("状态流程有误");
}
return ResultBody.success();
}
private ResultBody businessIncome(BaseAccountDTO currentAccount, Integer orderId, LeaseOrderDO leaseOrderDO) {
BigDecimal thirdAmount = leaseOrderDO.getOrderTotalAmount().multiply(
BigDecimal.valueOf(100).subtract(UavOrderProportion.PROPORTION).divide(BigDecimal.valueOf(100)));
PayUavWalletVO payUavWalletVO = new PayUavWalletVO();
payUavWalletVO.setSalaryAmount(thirdAmount);
payUavWalletVO.setCashAmount(BigDecimal.ZERO);
payUavWalletVO.setRemark("租赁订单收入,订单编号" + leaseOrderDO.getOrderNo());
payUavWalletVO.setOrderStatus(1500);
// 拿到商家管理员的用户id
ResultBody managerRes = userAppApi.getManagerIdByBackUserId(leaseOrderDO.getThirdBackUserAccountId(), null);
if (!managerRes.getCode().equals(ResultEnum.SUCCESS.getResultCode())) {
return managerRes;
}
payUavWalletVO.setUserAccountId((Integer) managerRes.getResult());
ResultBody resultIncomeBody = userAppApi.feignPayUavWallet(payUavWalletVO, currentAccount.getToken());
if (!resultIncomeBody.getCode().equals(ResultEnum.SUCCESS.getResultCode())) {
return resultIncomeBody;
}
leaseOrderDao.updateLeaseOrderProportion(leaseOrderDO.getId(), UavOrderProportion.PROPORTION.intValue());
this.updateLeaseOrderStatus(orderId, LeaseOrderStatus.REMAIN_TO_BE_EVALUATED);
return ResultBody.success();
}
private ResultBody moneyRefund(BigDecimal shareCashPledge, BigDecimal salaryCashPledge, BaseAccountDTO currentAccount, LeaseOrderDO leaseOrderDO) {
PayUavWalletVO refundUavWalletVO = new PayUavWalletVO();
refundUavWalletVO.setRemark("租赁押金退回");
refundUavWalletVO.setCashAmount(shareCashPledge);
refundUavWalletVO.setSalaryAmount(salaryCashPledge);
refundUavWalletVO.setUserAccountId(leaseOrderDO.getUserAccountId());
refundUavWalletVO.setOrderStatus(1600);
ResultBody giveBackPledge = userAppApi.feignPayUavWallet(refundUavWalletVO, currentAccount.getToken());
if (!giveBackPledge.getCode().equals(ResultEnum.SUCCESS.getResultCode())) {
return giveBackPledge;
} }
return ResultBody.success(); return ResultBody.success();
} }
private ApplyRefundVO wxRefund(LeaseOrderDO leaseOrderDO) {
ApplyRefundVO applyRefundVO = new ApplyRefundVO();
applyRefundVO.setOutTradeNo(leaseOrderDO.getOrderNo());
applyRefundVO.setReason("租赁押金退款");
applyRefundVO.setRefund(leaseOrderDO.getOtherPledge().multiply(BigDecimal.valueOf(100)).longValue());
return applyRefundVO;
}
private PayUavWalletVO amountUnfreezing(LeaseOrderDO leaseOrderDO, BigDecimal shareAmount, BigDecimal salaryAmount) {
PayUavWalletVO userPayUavWalletVO = new PayUavWalletVO();
userPayUavWalletVO.setRemark("租赁订单金额解冻");
userPayUavWalletVO.setCashAmount(shareAmount.add(leaseOrderDO.getShareCashPledge()));
userPayUavWalletVO.setSalaryAmount(salaryAmount.add(leaseOrderDO.getSalaryCashPledge()));
userPayUavWalletVO.setUserAccountId(leaseOrderDO.getUserAccountId());
return userPayUavWalletVO;
}
@Override
public ResultBody confirmSettlement(Integer id, BaseAccountDTO currentAccount) {
LeaseOrderDO leaseOrderDO = leaseOrderDao.detail(id);
log.info("平台确认归还操作,leaseOrderDO:{}", JSONObject.toJSONString(leaseOrderDO));
if (leaseOrderDO.getStatusCode().equals(LeaseOrderStatus.REMAIN_TO_BE_EVALUATED.getCode())) {
return ResultBody.error("请勿重复操作");
}
if (leaseOrderDO.getStatusCode().equals(LeaseOrderStatus.MODIFIED_DEPOSIT_TO_BE_CONFIRMED.getCode())) {
return ResultBody.error("状态流程有误");
}
// 根据订单id查询出修改后的押金
LeaseRefundOrderDO leaseRefundOrderDO = leaseOrderDao.selectGiveBackByOrderId(id, OrderType.PFREC.getCode());
BigDecimal operatingDeposit = BigDecimal.ZERO;
operatingDeposit = operatingDeposit.add(leaseRefundOrderDO.getModifiedDeposit());
// 判断用户之前的押金,然后进行操作:
// 1、分别获取用户之前抵扣掉的押金
BigDecimal shareCashPledge = leaseOrderDO.getShareCashPledge();
BigDecimal salaryCashPledge = leaseOrderDO.getSalaryCashPledge();
BigDecimal otherPledge = leaseOrderDO.getOtherPledge();
// 一一判断押金是否够扣减的
if (shareCashPledge.compareTo(BigDecimal.ZERO) > 0 || salaryCashPledge.compareTo(BigDecimal.ZERO) > 0) {
if (shareCashPledge.compareTo(operatingDeposit) >= 0) {
// 云享金押金足够抵扣
shareCashPledge = shareCashPledge.subtract(operatingDeposit);
} else {
operatingDeposit = operatingDeposit.subtract(shareCashPledge);
if (salaryCashPledge.compareTo(operatingDeposit) >= 0) {
// 云享金押金+余额押金足够抵扣
salaryCashPledge = salaryCashPledge.subtract(operatingDeposit);
// 进行后续操作
} else {
operatingDeposit = operatingDeposit.subtract(salaryCashPledge);
if (otherPledge.compareTo(operatingDeposit) >= 0) {
// 云享金押金+余额押金+其他押金足够抵扣
otherPledge = otherPledge.subtract(operatingDeposit);
// 进行后续操作
}
}
}
// 进行金额解冻
PayUavWalletVO userPayUavWalletVO = amountUnfreezing(leaseOrderDO, leaseOrderDO.getShareAmount(), leaseOrderDO.getSalaryAmount());
userPayUavWalletVO.setOrderStatus(999);
ResultBody resultBody = userAppApi.feignPayUavWallet(userPayUavWalletVO, currentAccount.getToken());
if (!resultBody.getCode().equals(ResultEnum.SUCCESS.getResultCode())) {
return resultBody;
}
// 进行多余的押金退回
if ((shareCashPledge.compareTo(BigDecimal.ZERO) > 0 || salaryCashPledge.compareTo(BigDecimal.ZERO) > 0)) {
moneyRefund(shareCashPledge, salaryCashPledge, currentAccount, leaseOrderDO);
}
} else {
if (otherPledge.compareTo(operatingDeposit) >= 0) {
// 云享金押金+余额押金+其他押金足够抵扣
otherPledge = otherPledge.subtract(operatingDeposit);
}
}
// 退回微信支付的押金部分
if (otherPledge.compareTo(BigDecimal.ZERO) > 0) {
ApplyRefundVO applyRefundVO = wxRefund(leaseOrderDO);
applyRefundVO.setRefund(otherPledge.multiply(BigDecimal.valueOf(100)).longValue());
ResultBody refundOtherPledge = paymentAppApi.applyRefund(applyRefundVO, currentAccount.getToken());
if (!refundOtherPledge.getCode().equals(ResultEnum.SUCCESS.getResultCode())) {
return refundOtherPledge;
}
}
// 进行平台打款
return businessIncome(currentAccount, id, leaseOrderDO);
}
} }
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论