Преглед изворни кода

经销商订单运费计算

cup пре 3 година
родитељ
комит
704fed1b0b

+ 39 - 2
mp-admin/src/main/java/com/qs/mp/web/controller/api/channel/mall/ChannelOrderController.java

@@ -1,9 +1,11 @@
 package com.qs.mp.web.controller.api.channel.mall;
 
 import cn.hutool.core.date.LocalDateTimeUtil;
+import cn.hutool.core.util.NumberUtil;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.qs.mp.admin.domain.TicketBox;
+import com.qs.mp.admin.domain.vo.ShippingTemplateCalculateVO;
 import com.qs.mp.admin.service.ITicketBoxService;
 import com.qs.mp.channel.domain.Channel;
 import com.qs.mp.channel.domain.ChannelOrderDetail;
@@ -13,6 +15,7 @@ import com.qs.mp.channel.service.IChannelOrderDetailService;
 import com.qs.mp.common.domain.DeliveryCompany;
 import com.qs.mp.common.enums.*;
 import com.qs.mp.common.service.IDeliveryCompanyService;
+import com.qs.mp.common.service.IShippingTemplateRuleService;
 import com.qs.mp.common.utils.StringUtils;
 import com.qs.mp.system.domain.SysUser;
 import com.qs.mp.system.service.ISysUserService;
@@ -25,6 +28,7 @@ import com.qs.mp.channel.domain.param.OrderPayParam;
 import com.qs.mp.channel.domain.vo.ChannelCartVO;
 import com.qs.mp.channel.domain.vo.ChannelOrderSettleVO;
 import com.qs.mp.channel.domain.vo.ChannelOrderVO;
+import com.qs.mp.user.domain.UserPrizeStorage;
 import com.qs.mp.user.service.IUserAddrService;
 import com.qs.mp.channel.service.IChannelCartService;
 import com.qs.mp.channel.service.IChannelOrderItemService;
@@ -53,6 +57,7 @@ import javax.validation.Valid;
 import lombok.AllArgsConstructor;
 import ma.glasnost.orika.MapperFacade;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.util.CollectionUtils;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
@@ -103,6 +108,12 @@ public class ChannelOrderController extends BaseApiController {
   @Autowired
   private RedisCache redisCache;
 
+  @Autowired
+  private IShippingTemplateRuleService shippingTemplateRuleService;
+
+  @Value("${shipping.channel}")
+  public Long shippingTemplateId;
+
 
 
   /**
@@ -198,6 +209,29 @@ public class ChannelOrderController extends BaseApiController {
       }
     }
 
+    // 运费计算
+    Integer freightAmt = 0;
+    // 计算运费
+    UserAddr userAddr = orderSettleVO.getAddr();
+    // TODO: 4L上线需要调整,后期放开就是取的商品里配的运费模板id
+    ShippingTemplateCalculateVO shippingTemplateCalculateVO = shippingTemplateRuleService.getShippingTemplateRuleByTemplateIdAndAreaInfo(shippingTemplateId, userAddr.getProvinceId(), userAddr.getCityId());
+    // 无法查到运费模板则默认为0
+    if (Objects.nonNull(shippingTemplateCalculateVO)) {
+
+      orderSettleVO.setFreightRemark(shippingTemplateCalculateVO.getRemark());
+      orderSettleVO.setFreightType(shippingTemplateCalculateVO.getType());
+
+      if (ShippingTemplateRuleTypeEnum.SHIP.getValue().equals(shippingTemplateCalculateVO.getType())) {
+        int orderNum = param.getOrderNum();
+        freightAmt = shippingTemplateCalculateVO.getDefaultPrice();
+        if (orderNum - shippingTemplateCalculateVO.getDefaultNumber() >= shippingTemplateCalculateVO.getCreateNumber()) {
+          // 运费:首件价格 + ((商品数量 - 首件数量) / 续件数量)向上取整 * 续件价格
+          int createNumber = shippingTemplateCalculateVO.getCreateNumber();
+          freightAmt += ((int) Math.ceil(NumberUtil.div(orderNum - shippingTemplateCalculateVO.getDefaultNumber(), createNumber))) * shippingTemplateCalculateVO.getCreatePrice();
+        }
+      }
+    }
+
     // 订单金额计算
     Integer orderAmt = 0;
     Integer pkgNum = 0;
@@ -221,9 +255,12 @@ public class ChannelOrderController extends BaseApiController {
       orderSettleVO.getItems().add(cartVO);
       pkgNum += param.getOrderNum();
     }
+    // 设置运费
+    orderSettleVO.setFreightAmt(freightAmt);
+
     orderSettleVO.setOrderAmt(orderAmt);
-    // 当前没有运费和优惠,实付金额=订单金额
-    orderSettleVO.setPayAmt(orderAmt);
+    // 当前没有运费和优惠,实付金额=订单金额 + 运费金额
+    orderSettleVO.setPayAmt(orderAmt + freightAmt);
     orderSettleVO.setPkgNum(pkgNum);
 
     // 缓存订单结算对象

+ 6 - 0
mp-service/src/main/java/com/qs/mp/channel/domain/vo/ChannelOrderSettleVO.java

@@ -37,6 +37,12 @@ public class ChannelOrderSettleVO {
   @ApiModelProperty("运费金额")
   private Integer freightAmt = 0;
 
+  @ApiModelProperty("运费模板类型 1发货,2不发货")
+  private Integer freightType;
+
+  @ApiModelProperty("运费备注")
+  private String freightRemark;
+
   /**
    * 实付金额
    */