no message

This commit is contained in:
cb 2025-04-27 22:02:09 +08:00
parent c832f2632e
commit 3ff590511d
1 changed files with 77 additions and 59 deletions

View File

@ -201,20 +201,20 @@ public class OrderDetailServiceImpl implements OrderDetailService {
public List<OrderDetail> selectOrderDetailList(OrderDetail orderDetail) {
List<OrderDetail> result = new ArrayList<>();
List<OrderDetail> orderDetails = orderDetailMapper.selectOrderDetailList(orderDetail);
orderDetails.forEach(model->{
if(StringUtils.isNotEmpty(orderDetail.getIsCall())){
orderDetails.forEach(model -> {
if (StringUtils.isNotEmpty(orderDetail.getIsCall())) {
OrderCallRecord param = new OrderCallRecord();
// param.setOrderType("02");
param.setOrderId(model.getId());
List<OrderCallRecord> list = orderCallRecordService.selectOrderCallRecordList(param);
// 用于判断是约 还是 排的问题
if("01".equals(orderDetail.getIsCall()) && CollectionUtils.isEmpty(list)){
if ("01".equals(orderDetail.getIsCall()) && CollectionUtils.isEmpty(list)) {
result.add(model);
}
if("02".equals(orderDetail.getIsCall()) && CollectionUtils.isNotEmpty(list)){
if ("02".equals(orderDetail.getIsCall()) && CollectionUtils.isNotEmpty(list)) {
result.add(model);
}
}else {
} else {
result.add(model);
}
});
@ -253,10 +253,10 @@ public class OrderDetailServiceImpl implements OrderDetailService {
param.setOrderMasterCode(orderMasterCode);
List<OrderDetail> details = orderDetailMapper.selectOrderDetailList(param);
int count = 0;
if(CollectionUtils.isNotEmpty(details)){
if (CollectionUtils.isNotEmpty(details)) {
count = details.size();
}
return orderMasterCode + "-" + (count+1);
return orderMasterCode + "-" + (count + 1);
}
@Override
@ -529,7 +529,7 @@ public class OrderDetailServiceImpl implements OrderDetailService {
// 平台抽成的子财务单
FinancialDetail platformFeeFD = details.get(0);
BigDecimal payMoney = platformFeeFD.getPayMoney();
logger.info("平台的抽成{}子单的实际金额{}", payMoney,financialDetail.getPayMoney());
logger.info("平台的抽成{}子单的实际金额{}", payMoney, financialDetail.getPayMoney());
FinancialDetail fdUpdate = new FinancialDetail();
fdUpdate.setId(platformFeeFD.getId());
@ -545,22 +545,22 @@ public class OrderDetailServiceImpl implements OrderDetailService {
// 一级分销追加扣点
BigDecimal saleRateOne = new BigDecimal(deptGoodsCategory.getOneRate());
saleRateOne = MoneyUtil.lt0(saleRateOne) ? BigDecimal.ZERO : saleRateOne;
logger.info("一级分销扣点{}",saleRateOne);
logger.info("一级分销扣点{}", saleRateOne);
// 二级分销追加扣点
BigDecimal saleRateTwo = new BigDecimal(deptGoodsCategory.getTwoRate());
saleRateTwo = MoneyUtil.lt0(saleRateTwo) ? BigDecimal.ZERO : saleRateTwo;
logger.info("二级分销扣点{}",saleRateTwo);
logger.info("二级分销扣点{}", saleRateTwo);
// 三级分销追加扣点
BigDecimal saleRateThree = new BigDecimal(deptGoodsCategory.getThreeRate());
saleRateThree = MoneyUtil.lt0(saleRateThree) ? BigDecimal.ZERO : saleRateThree;
logger.info("三级分销扣点{}",saleRateThree);
logger.info("三级分销扣点{}", saleRateThree);
Customer customer = customerService.selectByCustomerId(orderMaster.getCustomerId());
// 一级分销售
if(customer.getCustomerPlace() != null && customer.getParentCustomerPlace() == null){
if (customer.getCustomerPlace() != null && customer.getParentCustomerPlace() == null) {
placeId = AdapayUtils.getCustomerMemberId(customer.getCustomerPlace(), deptId);
saleRateThree = saleRateThree.add(saleRateTwo).add(saleRateOne);
saleRateTwo = BigDecimal.ZERO;
}else if(customer.getCustomerPlace() != null && customer.getParentCustomerPlace() != null){
} else if (customer.getCustomerPlace() != null && customer.getParentCustomerPlace() != null) {
placeId = AdapayUtils.getCustomerMemberId(customer.getCustomerPlace(), deptId);
parentPlaceId = AdapayUtils.getCustomerMemberId(customer.getParentCustomerPlace(), deptId);
saleRateTwo = saleRateTwo.add(saleRateOne);
@ -576,23 +576,23 @@ public class OrderDetailServiceImpl implements OrderDetailService {
BigDecimal deptRate = new BigDecimal(deptGoodsCategory.getDeptRate());
deptRate = MoneyUtil.lt0(deptRate) ? BigDecimal.ZERO : deptRate;
BigDecimal deptMoney = MoneyUtil.lt0(deptGoodsCategory.getDeptMoney()) ? BigDecimal.ZERO : deptGoodsCategory.getDeptMoney();
logger.info("平台加价抽成{},费率{}",deptMoney,deptRate);
logger.info("平台加价抽成{},费率{}", deptMoney, deptRate);
// 平台追加抽成
BigDecimal pcDeptRate = new BigDecimal(deptGoodsCategory.getPcDeptRate());
pcDeptRate = MoneyUtil.lt0(pcDeptRate) ? BigDecimal.ZERO : pcDeptRate;
BigDecimal pcDeptMoney = MoneyUtil.lt0(deptGoodsCategory.getPcDeptMoney()) ? BigDecimal.ZERO : deptGoodsCategory.getPcDeptMoney();
logger.info("平台追加抽成{},费率{}",pcDeptMoney,pcDeptRate);
logger.info("平台追加抽成{},费率{}", pcDeptMoney, pcDeptRate);
BigDecimal dtx = BigDecimal.ZERO;
// 追加金额分账
BigDecimal dtx1 = this.addPaymentConfirm(orderDetailId, deptId, memberId, masterMemberId, teamRete, teamMoney, pcDeptRate, pcDeptMoney, saleRateOne, placeId, saleRateTwo, parentPlaceId);
dtx = dtx.add(dtx1);
logger.info("追加金额分账{}",dtx);
logger.info("追加金额分账{}", dtx);
// 改价单分账
BigDecimal changeMoney = BigDecimal.ZERO;
// 查询子订单的加价记录
List<FinancialChangeRecord> financialChangeRecords = financialChangeRecordService.selectByDetailIds(String.valueOf(orderDetailId));
logger.info("子订单加价记录{}",dtx);
logger.info("子订单加价记录{}", dtx);
if (CollectionUtils.isNotEmpty(financialChangeRecords)) {
// 改价记录只会有一条 直接取出
FinancialChangeRecord fcRecord = financialChangeRecords.get(0);
@ -600,11 +600,11 @@ public class OrderDetailServiceImpl implements OrderDetailService {
boolean payedAdd = PayStatus.PAYED_ADD.getCode().equals(fcRecord.getPayStatus());
if (paid || payedAdd) {
changeMoney = fcRecord.getChangeMoney();
logger.info("子订单加价金额{}",changeMoney);
logger.info("子订单加价金额{}", changeMoney);
BigDecimal dtx2 = changePaymentConfirm(fcRecord, orderDetailId, orderDetail.getWorkerId(), deptId, memberId,
masterMemberId, teamRete, teamMoney, deptRate, deptMoney, saleRateThree, placeId, saleRateTwo, parentPlaceId);
dtx = dtx.add(dtx2);
logger.info("子订单加价记录{}加价完毕{}",dtx2,dtx);
logger.info("子订单加价记录{}加价完毕{}", dtx2, dtx);
}
}
@ -612,15 +612,15 @@ public class OrderDetailServiceImpl implements OrderDetailService {
OrderAttachmentRecord param = new OrderAttachmentRecord();
param.setOrderDetailId(orderDetailId);
List<OrderAttachmentRecord> orderAttachmentRecordList = orderAttachmentRecordService.selectOrderAttachmentRecordList(param);
logger.info("附件费分账金额{}",orderAttachmentRecordList);
if(CollectionUtils.isNotEmpty(orderAttachmentRecordList)){
logger.info("附件费分账金额{}", orderAttachmentRecordList);
if (CollectionUtils.isNotEmpty(orderAttachmentRecordList)) {
// 附件费分账.
attachPaymentConfirm(orderAttachmentRecordList.get(0), orderDetailId, orderDetail.getWorkerId(), deptId,memberId);
attachPaymentConfirm(orderAttachmentRecordList.get(0), orderDetailId, orderDetail.getWorkerId(), deptId, memberId);
}
// --------------------- 子财务单分账部分 start ---------------------
// 子单的实际金额
BigDecimal odMoney = financialDetail.getPayMoney().subtract(changeMoney);
logger.info("子单的实际金额{}",odMoney);
logger.info("子单的实际金额{}", odMoney);
if (MoneyUtil.lte0(odMoney)) {
logger.info("子财务单[{}] 应支付金额={} 不需要分账", financialDetail.getId(), odMoney);
} else {
@ -647,7 +647,7 @@ public class OrderDetailServiceImpl implements OrderDetailService {
ArrayList<DivMember> divMembers = new ArrayList<>();
// 是否有罚金
boolean haveFine = MoneyUtil.gt0(fineMoney);
logger.info("子单的罚金{},是否有罚金{}",fineMoney,haveFine);
logger.info("子单的罚金{},是否有罚金{}", fineMoney, haveFine);
if (haveFine) { // 有罚金 从罚金里扣除手续费
// 平台的分账信息 用来承担罚金
divMembers.add(new DivMember("0", MoneyUtil.toS(fineMoney), true));
@ -660,26 +660,44 @@ public class OrderDetailServiceImpl implements OrderDetailService {
// 没有罚金 自己承担手续费
divMembers.add(new DivMember(memberId, MoneyUtil.toS(odMoney), false));
// 平台金额部分抽出来部分承担手续费
BigDecimal payCommissionMoney= new BigDecimal(0.01);
payCommissionMoney=odMoney.multiply(payCommissionMoney).setScale(6,RoundingMode.HALF_UP);
payMoney=payMoney.setScale(6,RoundingMode.HALF_UP).subtract(payCommissionMoney);
// 1. 使用字符串构造精确的BigDecimal避免double精度问题
BigDecimal payCommissionRate = new BigDecimal("0.01");
// 2. 计算佣金时强制指定精度和舍入模式双重保障
BigDecimal commissionAmount = odMoney.multiply(payCommissionRate)
.setScale(6, RoundingMode.HALF_UP) // 第一次精度控制
.setScale(6, RoundingMode.DOWN); // 第二次强制截断关键修复点
// 3. 对齐payMoney的精度确保减法一致性
payMoney = payMoney.setScale(6, RoundingMode.DOWN); // 统一截断模式
// 4. 执行减法操作Z
payMoney = payMoney.subtract(commissionAmount);
// 5. 更新数据保持精度一致
fdUpdate.setPayMoney(payMoney);
divMembers.add(new DivMember("0", MoneyUtil.toS(payCommissionMoney.setScale(6)), true));
divMembers.add(new DivMember(
"0",
// 显式传递舍入模式给工具类
commissionAmount.toString(),
true
));
financialDetailService.updateFinancialDetail(fdUpdate);
odMoney=odMoney.add(payCommissionMoney);
odMoney = odMoney.add(payCommissionRate);
// 增加手续费财务子单
FinancialDetail financialDetail1=new FinancialDetail();
FinancialDetail financialDetail1 = new FinancialDetail();
financialDetail1.setOrderDetailId(orderDetailId);
financialDetail1.setFinancialDetailType(6);
financialDetail1.setPayMoney(payCommissionMoney);
financialDetail1.setPayMoney(payCommissionRate);
financialDetail1.setPayTime(new Date());
financialDetailService.insertFinancialDetail(financialDetail1);
logger.info("平台的抽成减去承担手续费后的金额{},平台手续费{},增加的财务子单{}", payMoney,payCommissionMoney,financialDetail1);
logger.info("平台的抽成减去承担手续费后的金额{},平台手续费{},增加的财务子单{}", payMoney, payCommissionRate, financialDetail1);
}
logger.info("子单的罚金处理后的总额{}",dtx);
logger.info("子单的罚金处理后的总额{}", dtx);
String orderNo = "OD_" + orderDetailId + "_" + System.currentTimeMillis();
logger.info("子订单[{}]发起分账: {} 分账人员{}", orderDetailId, JSON.toJSONString(divMembers),orderDetail.getWorkerName());
logger.info("子订单[{}]发起分账: {} 分账人员{}", orderDetailId, JSON.toJSONString(divMembers), orderDetail.getWorkerName());
JSONObject response = adapayService.paymentConfirm(deptId, orderPayment.getId(), orderNo, MoneyUtil.toS(odMoney), divMembers, null, null);
logger.info("子订单[{}]的分账结果: {}", orderDetailId, response.toString());
boolean status = AdapayStatusEnum.succeeded.code.equals(response.getString("status"));
@ -687,12 +705,12 @@ public class OrderDetailServiceImpl implements OrderDetailService {
Assert.isTrue(status, response.toString());
// 分账成功 把罚金状态改为已扣除
fineIds.forEach(fineRecordId -> orderFineRecordMapper.updateFineStatus(fineRecordId, 1));
logger.info("子单的实际金额{}",odMoney);
logger.info("子单的实际金额{}", odMoney);
if (!haveFine) {
String feeAmt = response.getString("fee_amt");
dtx = dtx.add(odMoney).subtract(new BigDecimal(feeAmt));
}
logger.info("子单的没有罚金的实际金额{}",dtx);
logger.info("子单的没有罚金的实际金额{}", dtx);
}
// --------------------- 子财务单分账部分 end ---------------------
@ -751,7 +769,7 @@ public class OrderDetailServiceImpl implements OrderDetailService {
}
logger.info("子订单改价分账1级{}2级{}",placeOneMoney,placeTwoMoney);
logger.info("子订单改价分账1级{}2级{}", placeOneMoney, placeTwoMoney);
// 上门师傅的报酬
BigDecimal workerFee = changeMoney;
BigDecimal fineMoney = BigDecimal.ZERO;
@ -794,25 +812,25 @@ public class OrderDetailServiceImpl implements OrderDetailService {
workerFee = workerFee.subtract(placeTwoMoney);
}
//子师傅的费用计算
BigDecimal detailFee=BigDecimal.ZERO;
BigDecimal detailFee = BigDecimal.ZERO;
logger.info("大师傅初始金额{}平台费用{}团队抽成金额{}",masterFee,platformFee,teamMoney);
logger.info("大师傅初始金额{}平台费用{}团队抽成金额{}", masterFee, platformFee, teamMoney);
// 如果是大师傅自己接单,则不需要抽成
if(AdapayUtils.getWorkerMemberId(workerId, deptId).equals(masterMemberId)){
if (AdapayUtils.getWorkerMemberId(workerId, deptId).equals(masterMemberId)) {
masterFee = BigDecimal.ZERO;
}else{
if (MoneyUtil.gt0(workerFee)){
detailFee=workerFee.multiply(BigDecimal.ONE.subtract(teamRete)).setScale(2, RoundingMode.DOWN);
} else {
if (MoneyUtil.gt0(workerFee)) {
detailFee = workerFee.multiply(BigDecimal.ONE.subtract(teamRete)).setScale(2, RoundingMode.DOWN);
divMembers.add(new DivMember(memberId, MoneyUtil.toS(detailFee), !feeFlag));
}
masterFee=workerFee.subtract(detailFee);
masterFee = workerFee.subtract(detailFee);
if (MoneyUtil.gt0(masterFee)) {
divMembers.add(new DivMember(masterMemberId, MoneyUtil.toS(masterFee), !feeFlag));
}
}
logger.info("子师傅的费用{}子师傅抽成比例{}",detailFee,BigDecimal.ONE.subtract(teamRete));
logger.info("大师傅的扣点{},最终的扣完之后的金额{}",masterFee,workerFee);
logger.info("改价单各个金额{}{}{}{}",placeOneMoney,placeTwoMoney,masterFee,workerFee);
logger.info("子师傅的费用{}子师傅抽成比例{}", detailFee, BigDecimal.ONE.subtract(teamRete));
logger.info("大师傅的扣点{},最终的扣完之后的金额{}", masterFee, workerFee);
logger.info("改价单各个金额{}{}{}{}", placeOneMoney, placeTwoMoney, masterFee, workerFee);
String orderNo = "FCR_" + fcRecord.getId() + "_" + System.currentTimeMillis();
//调用分账
logger.info("子订单[{}]的[改价单]发起分账", orderDetailId);
@ -823,8 +841,8 @@ public class OrderDetailServiceImpl implements OrderDetailService {
// 分账成功 把罚金状态改为已扣除
fineIds.forEach(fineRecordId -> orderFineRecordMapper.updateFineStatus(fineRecordId, 1));
//获取当前订单的 一级 二级分销
drawCash(orderDetailId,deptId,placeOne, AdapayUtils.bigDecimalToString(placeOneMoney));
drawCash(orderDetailId,deptId,placeTwo, AdapayUtils.bigDecimalToString(placeTwoMoney));
drawCash(orderDetailId, deptId, placeOne, AdapayUtils.bigDecimalToString(placeOneMoney));
drawCash(orderDetailId, deptId, placeTwo, AdapayUtils.bigDecimalToString(placeTwoMoney));
} else { // 分账失败
if (AdapayErrorCode.CONFIRM_AMT_OVER_LIMIT.equals(response.getString("error_code"))) {
// 当前确认金额 > 支付金额 - 已支付确认金额 - 已支付撤销金额
@ -841,7 +859,7 @@ public class OrderDetailServiceImpl implements OrderDetailService {
return workerFee;
}
private void attachPaymentConfirm(OrderAttachmentRecord orderAttachmentRecord, Long orderDetailId, Long workerId, Long deptId,String customerId) throws BaseAdaPayException {
private void attachPaymentConfirm(OrderAttachmentRecord orderAttachmentRecord, Long orderDetailId, Long workerId, Long deptId, String customerId) throws BaseAdaPayException {
BigDecimal attachMoney = orderAttachmentRecord.getAttachMoney();
// 扣除罚金后的上门师傅报酬
// workerFee = workerFee.subtract(fineMoney);
@ -868,8 +886,8 @@ public class OrderDetailServiceImpl implements OrderDetailService {
if (AdapayStatusEnum.succeeded.code.equals(response.getString("status"))) { // 分账成功
logger.info("子订单[{}]的[附件费]分账成功", orderDetailId);
logger.info("子订单[{}]的[附件费]提现金额", one);
if (feeFlag){
drawCash(orderDetailId,deptId,customerId,AdapayUtils.bigDecimalToString(one));
if (feeFlag) {
drawCash(orderDetailId, deptId, customerId, AdapayUtils.bigDecimalToString(one));
}
} else { // 分账失败
if (AdapayErrorCode.CONFIRM_AMT_OVER_LIMIT.equals(response.getString("error_code"))) {
@ -933,7 +951,7 @@ public class OrderDetailServiceImpl implements OrderDetailService {
}
logger.info("2级分销{}", placeTwoMoney);
// 如果是大师傅自己接单,则不需要抽成
if(memberId.equals(masterMemberId)){
if (memberId.equals(masterMemberId)) {
masterFee = BigDecimal.ZERO;
}
// 上门师傅的报酬
@ -956,17 +974,17 @@ public class OrderDetailServiceImpl implements OrderDetailService {
divMembers.add(new DivMember(memberId, MoneyUtil.toS(workerFee), !feeFlag));
dtx = dtx.add(workerFee);
}
logger.info("工费抽成后{}dtx{}", divMembers,dtx);
logger.info("工费抽成后{}dtx{}", divMembers, dtx);
if (StringUtils.isNotEmpty(placeOne)) {
divMembers.add(new DivMember(placeOne, MoneyUtil.toS(placeOneMoney), !feeFlag));
dtx = dtx.add(placeOneMoney);
}
logger.info("第一次分成{}dtx{}", divMembers,dtx);
logger.info("第一次分成{}dtx{}", divMembers, dtx);
if (StringUtils.isNotEmpty(placeTwo)) {
divMembers.add(new DivMember(placeTwo, MoneyUtil.toS(placeTwoMoney), !feeFlag));
dtx = dtx.add(placeTwoMoney);
}
logger.info("第二次分成{}dtx{}", divMembers,dtx);
logger.info("第二次分成{}dtx{}", divMembers, dtx);
String orderNo = "OAS_" + oas.getId() + "_" + System.currentTimeMillis();
//调用分账
logger.info("子订单[{}]的追加单[{}]发起分账: {}", orderDetailId, oas.getId(), JSON.toJSONString(divMembers));
@ -1086,11 +1104,11 @@ public class OrderDetailServiceImpl implements OrderDetailService {
/**
* <p>构建各分销所得金额</p>
* @param deptGoodsCategory 三级类目用来计算扣点
* @param financialChangeRecord 加价记录
*
* @param deptGoodsCategory 三级类目用来计算扣点
* @param financialChangeRecord 加价记录
*/
private void buildSettle(FinancialChangeRecord financialChangeRecord, DeptGoodsCategory deptGoodsCategory, Worker workerMaster){
private void buildSettle(FinancialChangeRecord financialChangeRecord, DeptGoodsCategory deptGoodsCategory, Worker workerMaster) {
// 一级分销追加扣点
BigDecimal saleRateOne = new BigDecimal(deptGoodsCategory.getOneRate());
saleRateOne = MoneyUtil.lt0(saleRateOne) ? BigDecimal.ZERO : saleRateOne;