|
@@ -1,18 +1,21 @@
|
|
|
package com.qs.mp.web.controller.api.user;
|
|
|
|
|
|
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.vo.ShippingTemplateCalculateVO;
|
|
|
import com.qs.mp.channel.domain.ChannelOrder;
|
|
|
import com.qs.mp.channel.domain.param.OrderPayParam;
|
|
|
import com.qs.mp.common.core.domain.AjaxResult;
|
|
|
import com.qs.mp.common.core.page.TableDataInfo;
|
|
|
import com.qs.mp.common.core.redis.RedisCache;
|
|
|
-import com.qs.mp.common.enums.BizTypeEnum;
|
|
|
-import com.qs.mp.common.enums.DeliverOrderStatusEnum;
|
|
|
-import com.qs.mp.common.enums.ErrorCodeEnum;
|
|
|
-import com.qs.mp.common.enums.PrizeStorageStatusEnum;
|
|
|
+import com.qs.mp.common.domain.ShippingTemplate;
|
|
|
+import com.qs.mp.common.domain.ShippingTemplateRule;
|
|
|
+import com.qs.mp.common.enums.*;
|
|
|
import com.qs.mp.common.exception.ServiceException;
|
|
|
+import com.qs.mp.common.service.IShippingTemplateRuleService;
|
|
|
+import com.qs.mp.common.service.IShippingTemplateService;
|
|
|
import com.qs.mp.common.utils.LogUtil;
|
|
|
import com.qs.mp.common.utils.StringUtils;
|
|
|
import com.qs.mp.framework.redis.RedisKey;
|
|
@@ -32,11 +35,15 @@ import com.qs.mp.web.controller.common.BaseApiController;
|
|
|
import io.swagger.annotations.Api;
|
|
|
import io.swagger.annotations.ApiOperation;
|
|
|
|
|
|
+import java.math.BigDecimal;
|
|
|
import java.time.Duration;
|
|
|
import java.time.LocalDateTime;
|
|
|
import java.util.*;
|
|
|
import java.util.concurrent.TimeUnit;
|
|
|
import javax.validation.Valid;
|
|
|
+
|
|
|
+import io.swagger.annotations.ApiResponse;
|
|
|
+import io.swagger.annotations.ApiResponses;
|
|
|
import lombok.AllArgsConstructor;
|
|
|
import ma.glasnost.orika.MapperFacade;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
@@ -77,6 +84,9 @@ public class UserDeliverOrderController extends BaseApiController {
|
|
|
@Autowired
|
|
|
private RedisCache redisCache;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private IShippingTemplateRuleService shippingTemplateRuleService;
|
|
|
+
|
|
|
/**
|
|
|
* 订单列表
|
|
|
*/
|
|
@@ -138,6 +148,9 @@ public class UserDeliverOrderController extends BaseApiController {
|
|
|
*/
|
|
|
@PostMapping("/order/settle")
|
|
|
@ApiOperation(value = "订单结算" , notes = "奖品库里点提货")
|
|
|
+ @ApiResponses(
|
|
|
+ @ApiResponse(code = 200, message = "success", response = DeliverOrderSettleVO.class)
|
|
|
+ )
|
|
|
public AjaxResult settle(@Valid @RequestBody DeliverOrderParam param) {
|
|
|
Long userId = SecurityUtils.getLoginUser().getUserId();
|
|
|
|
|
@@ -161,6 +174,29 @@ public class UserDeliverOrderController extends BaseApiController {
|
|
|
.in(UserPrizeStorage::getStorageId, param.getIds()));
|
|
|
|
|
|
|
|
|
+ // 计算运费
|
|
|
+ UserAddr userAddr = orderSettleVO.getAddr();
|
|
|
+ // TODO: 4L上线需要调整,后期放开就是取的商品里配的运费模板id
|
|
|
+ ShippingTemplateCalculateVO shippingTemplateCalculateVO = shippingTemplateRuleService.getShippingTemplateRuleByTemplateIdAndAreaInfo(4L, 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 goodsNum = prizeStorageList.stream().mapToInt(UserPrizeStorage::getGoodsNum).sum();
|
|
|
+ freightAmt = shippingTemplateCalculateVO.getDefaultNumber();
|
|
|
+ if (goodsNum - shippingTemplateCalculateVO.getDefaultNumber() >= shippingTemplateCalculateVO.getCreateNumber()) {
|
|
|
+
|
|
|
+ // 运费:首件价格 + ((商品数量 - 首件数量) / 续件数量)向上取整 * 续件价格
|
|
|
+ int createNumber = shippingTemplateCalculateVO.getCreateNumber();
|
|
|
+ freightAmt += ((int) Math.ceil(NumberUtil.div(goodsNum - shippingTemplateCalculateVO.getDefaultNumber(), createNumber))) * shippingTemplateCalculateVO.getCreatePrice();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
orderSettleVO.setOrderAmt(orderAmt);
|
|
|
orderSettleVO.setFreightAmt(freightAmt);
|
|
|
orderSettleVO.setPayAmt(orderAmt + freightAmt);
|