|
@@ -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);
|
|
|
|
|
|
// 缓存订单结算对象
|