diff --git a/njzscloud-svr/src/main/java/com/njzscloud/supervisory/order/contant/DiscountType.java b/njzscloud-svr/src/main/java/com/njzscloud/supervisory/order/contant/DiscountType.java new file mode 100644 index 0000000..7b18231 --- /dev/null +++ b/njzscloud-svr/src/main/java/com/njzscloud/supervisory/order/contant/DiscountType.java @@ -0,0 +1,19 @@ +package com.njzscloud.supervisory.order.contant; + +import com.njzscloud.common.core.ienum.DictStr; +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +/** + * 字典代码:discount_type + * 字典名称:优惠类型 + */ +@Getter +@RequiredArgsConstructor +public enum DiscountType implements DictStr { + DISCOUNT("discount", "优惠"), + RAISE("raise", "加价"), + ; + private final String val; + private final String txt; +} diff --git a/njzscloud-svr/src/main/java/com/njzscloud/supervisory/order/service/OrderInfoService.java b/njzscloud-svr/src/main/java/com/njzscloud/supervisory/order/service/OrderInfoService.java index ed16906..5c74ae4 100644 --- a/njzscloud-svr/src/main/java/com/njzscloud/supervisory/order/service/OrderInfoService.java +++ b/njzscloud-svr/src/main/java/com/njzscloud/supervisory/order/service/OrderInfoService.java @@ -32,6 +32,8 @@ import com.njzscloud.supervisory.biz.pojo.entity.*; import com.njzscloud.supervisory.biz.service.*; import com.njzscloud.supervisory.constant.Constant; import com.njzscloud.supervisory.device.pojo.entity.DeviceLocalizerEntity; +import com.njzscloud.supervisory.discount.pojo.DiscountManageEntity; +import com.njzscloud.supervisory.discount.service.DiscountManageService; import com.njzscloud.supervisory.expense.contant.BillingType; import com.njzscloud.supervisory.expense.contant.ExpenseItemCategory; import com.njzscloud.supervisory.expense.contant.GoodsScope; @@ -115,6 +117,7 @@ public class OrderInfoService extends ServiceImpl Exceptions.clierr("产品不存在")); if (MoneyWay.OUT.getVal().equals(entity.getMoneyWay())) { // 计算费用,出厂付费可能需要称重,需要更新付费项 - updateOrderItems(orderInfoEntity.getId(), settleWeight, Boolean.FALSE); + updateOrderItems(orderInfoEntity.getId(), orderInfoEntity.getTransCompanyId(), settleWeight, Boolean.FALSE); orderInfoEntity = this.getById(truckLeavingOrderParam.getOrderId()); } @@ -1265,23 +1268,62 @@ public class OrderInfoService extends ServiceImpl discountList = discountManageService.list(Wrappers.lambdaQuery(DiscountManageEntity.class) + .eq(DiscountManageEntity::getCompanyId, companyId) + .in(null != goodsId, DiscountManageEntity::getGoodsIds, goodsId) + .eq(null != itemId, DiscountManageEntity::getExpenseId, itemId) + .eq(DiscountManageEntity::getDeleted, Boolean.FALSE)); + if (null != discountList && discountList.size() > 0) { + for (DiscountManageEntity discount: discountList) { + if (DiscountType.DISCOUNT.getVal().equals(discount.getType())) { + discountMoney = discountMoney.subtract(discount.getMoney()); + } else if (DiscountType.RAISE.getVal().equals(discount.getType())) { + discountMoney = discountMoney.add(discount.getMoney()); + } + } + } + return discountMoney; + } + /** * 计算并设置付费项的金额(总金额、结算金额) * * @param item 付费项实体 */ - private void calculateAndSetItemMoney(OrderExpenseItemsEntity item, Boolean isChange) { + private void calculateAndSetItemMoney(OrderExpenseItemsEntity item, Long companyId, Boolean isChange) { // 计算总金额 BigDecimal totalMoney = calculateItemTotalMoney(item); + // 计算优惠金额(有正负) + BigDecimal discountMoney = calculateItemDiscountMoney(companyId, item); + // settle_money = total_money + discount_money + revise_money(discount、revise 可为正负) - BigDecimal discount = item.getDiscountMoney() == null ? BigDecimal.ZERO : item.getDiscountMoney(); + BigDecimal discount = discountMoney == null ? BigDecimal.ZERO : discountMoney; BigDecimal revise = item.getReviseMoney() == null ? BigDecimal.ZERO : item.getReviseMoney(); BigDecimal settle = totalMoney.add(discount).add(revise); if (isChange) { - item.setChangeMoney(settle); + item.setTotalMoney(totalMoney).setSettleMoney(settle).setDiscountMoney(discount).setChangeMoney(settle); } else { - item.setTotalMoney(totalMoney).setSettleMoney(settle); + item.setTotalMoney(totalMoney).setSettleMoney(settle).setDiscountMoney(discount); } } @@ -1333,10 +1375,10 @@ public class OrderInfoService extends ServiceImpl items) { + private void calculateItemsAndUpdateOrder(Long orderId, Long companyId, List items) { // 计算各付费项金额 for (OrderExpenseItemsEntity item : items) { - calculateAndSetItemMoney(item, Boolean.FALSE); + calculateAndSetItemMoney(item, companyId, Boolean.FALSE); } // 批量更新付费项(包含quantity和所有金额字段) @@ -1346,7 +1388,7 @@ public class OrderInfoService extends ServiceImpl extraItems = orderExpenseItemsService.list(Wrappers.lambdaQuery(OrderExpenseItemsEntity.class) .eq(OrderExpenseItemsEntity::getOrderId, orderId) .eq(OrderExpenseItemsEntity::getDeleted, Boolean.FALSE)); @@ -1355,7 +1397,7 @@ public class OrderInfoService extends ServiceImpl 0) { + if (newMoney.compareTo(oldSettleMoney) > 0) { // 改价后金额大于结算金额,需要付款(多付) - BigDecimal payAmount = changeMoney.subtract(settleMoney); + BigDecimal payAmount = newMoney.subtract(oldSettleMoney); // 处理公司支付 handleCompanyPay(newOrder, Boolean.TRUE, payAmount, Boolean.TRUE); // TODO: 微信支付暂不处理 // paymentService.pay(order, payAmount); - } else if (changeMoney.compareTo(settleMoney) < 0) { + } else if (newMoney.compareTo(oldSettleMoney) < 0) { // 改价后金额小于结算金额,需要退款(少补) - BigDecimal refundAmount = settleMoney.subtract(changeMoney); + BigDecimal refundAmount = oldSettleMoney.subtract(newMoney); // 调用退款接口 RefundRequestDto dto = new RefundRequestDto(); dto.setOrderId(order.getId());