叶君翔 3 rokov pred
rodič
commit
28ab692eb1

+ 10 - 0
lb-app/src/main/java/com/ydd/app/dto/OrderValuationReq.java

@@ -57,6 +57,11 @@ public class OrderValuationReq extends BaseDto implements Serializable {
     private String receiverCityName;
 
     /**
+     * 收件城市编码
+     */
+    private String receiverCityCode;
+
+    /**
      * 收件人所在区
      */
     @Size(max = 40, message = "收件人所在区最长不能超过40个字符")
@@ -123,6 +128,11 @@ public class OrderValuationReq extends BaseDto implements Serializable {
     private String sendCityName;
 
     /**
+     * 发件城市编码
+     */
+    private String sendCityCode;
+
+    /**
      * 发件人所在区,当传入shopCode门店编号时,不必填,根据门店信息发单
      */
     @Size(max = 30, message = "发件人所在区最长不能超过30个字符")

+ 5 - 0
lb-app/src/main/java/com/ydd/app/dto/ValuationRes.java

@@ -51,6 +51,11 @@ public class ValuationRes implements Serializable, Comparable<ValuationRes> {
     private String desc;
 
     /**
+     * 配送距离, 单位: 米
+     */
+    private String distance;
+
+    /**
      * 预估配送费
      */
     @ApiModelProperty(value = "预估配送费")

+ 289 - 16
lb-app/src/main/java/com/ydd/app/service/impl/OpenApiOrderValuationServiceImpl.java

@@ -1,23 +1,38 @@
 package com.ydd.app.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.ydd.app.dto.OrderValuationDto;
-import com.ydd.app.dto.OrderValuationReq;
-import com.ydd.app.dto.ValuationRes;
+import com.ydd.api.DeliveryService;
+import com.ydd.app.OrderEntityUtils;
+import com.ydd.app.QueryAmountEntityUtils;
+import com.ydd.app.dto.*;
 import com.ydd.app.response.OrderValuationResponse;
 import com.ydd.app.service.OpenApiOrderValuationService;
 import com.ydd.app.vo.OrderValuationVo;
 import com.ydd.common.constant.BillingConstant;
+import com.ydd.common.constant.RedisKeyConstant;
 import com.ydd.common.core.domain.ResponseResult;
+import com.ydd.common.core.redis.RedisCache;
 import com.ydd.common.enums.DeliveryTypeEnums;
 import com.ydd.common.enums.ResponseResultCodeEnum;
+import com.ydd.common.utils.DateUtils;
 import com.ydd.common.utils.SnCodeUtils;
 import com.ydd.common.utils.StringUtils;
+import com.ydd.ecloud.core.enums.DeletedEnum;
 import com.ydd.ecloud.core.utils.BigDecimalUtils;
+import com.ydd.module.constants.AppConstant;
 import com.ydd.module.domain.*;
 import com.ydd.module.dto.*;
 import com.ydd.module.enums.*;
 import com.ydd.module.service.*;
+import com.ydd.module.utils.CommonUtils;
+import com.ydd.system.domain.SysConfig;
+import com.ydd.system.service.ISysConfigService;
+import com.ydd.third.common.config.DeliveryConfig;
+import com.ydd.third.common.vo.ResObject;
+import com.ydd.third.common.vo.shop.AmountResultVo;
+import com.ydd.third.common.vo.shop.QueryAmount;
+import com.ydd.third.common.vo.vo.order.OrderResultVo;
+import com.ydd.third.common.vo.vo.order.OrderVo;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.CollectionUtils;
@@ -28,6 +43,7 @@ import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
 import java.util.*;
+import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
 /**
@@ -66,6 +82,17 @@ public class OpenApiOrderValuationServiceImpl implements OpenApiOrderValuationSe
 
     private final IMemberConfigService iMemberConfigService;
 
+    private final DeliveryConfig deliveryConfig;
+
+    private final ISysConfigService iSysConfigService;
+
+    private final DeliveryService client;
+
+    private final IShopDeliveryBindService iShopDeliveryBindService;
+
+    private final RedisCache redisCache;
+
+
     @Override
     public ResponseResult valuation(OrderValuationReq valuationReq) {
         OrderValuationDto valuationDto = new OrderValuationDto();
@@ -95,7 +122,7 @@ public class OpenApiOrderValuationServiceImpl implements OpenApiOrderValuationSe
                 types = deliveryDetailDtoList.stream().map(PackageDeliveryDetailDto::getDeliveryType).collect(Collectors.toList());
             }
         }
-        // 获取门店屏蔽运力
+        // 获取门店屏蔽运力(开放平台门店)
         List<Integer> disableDeliveryTypes = iShopDeliveryDisableService.list(new QueryWrapper<ShopDeliveryDisable>()
                 .eq("shop_id", valuationDto.getShopId()).eq("deleted", 0))
                 .stream().map(ShopDeliveryDisable::getDeliveryType).collect(Collectors.toList());
@@ -137,7 +164,8 @@ public class OpenApiOrderValuationServiceImpl implements OpenApiOrderValuationSe
         if (packageDeliveryDto != null) {
             billList = this.setBillingDuration(packageDeliveryDto, billList);
         }
-        // todo: 计价结果缓存到redis, 10分钟有效
+        // 计价结果缓存到redis, 10分钟有效, 到时需重新计价
+        redisCache.setCacheObject(RedisKeyConstant.VALUATION_RESULT + valuationDto.getOutOrderSn(), billList, AppConstant.VALUATION_RESULT_EFFECTIVE_MINUTES, TimeUnit.MINUTES);
         // 数据转换
         List<OrderValuationVo> valuationVos = this.convertResult(billList);
         OrderValuationResponse response = OrderValuationResponse.builder().valuationList(valuationVos).outOrderSn(valuationReq.getOutOrderSn()).build();
@@ -145,8 +173,21 @@ public class OpenApiOrderValuationServiceImpl implements OpenApiOrderValuationSe
     }
 
     private List<OrderValuationVo> convertResult(List<ValuationRes> billList) {
-        // todo: 数据转换
-        return null;
+        List<OrderValuationVo> valuationVos = Lists.newArrayList();
+        for (ValuationRes valuationRes : billList) {
+            OrderValuationVo valuationVo = new OrderValuationVo();
+            valuationVo.setDeliveryId(valuationRes.getDeliveryType());
+            valuationVo.setDeliveryName(valuationRes.getName());
+            valuationVo.setDistance(valuationRes.getDesc());
+            if (valuationRes.getDeliveryAmount() != null) {
+                valuationVo.setDeliveryAmount(valuationRes.getDeliveryAmount().setScale(2, BigDecimal.ROUND_HALF_UP));
+                // 暂时第三方
+                valuationVo.setDiscountAmount(BigDecimal.ZERO);
+                valuationVo.setNeedPayAmount(valuationVo.getDeliveryAmount().subtract(valuationVo.getDiscountAmount()));
+            }
+            valuationVos.add(valuationVo);
+        }
+        return valuationVos;
     }
 
     private List<ValuationRes> handleBillList(Long memberId, List<ValuationRes> list) {
@@ -184,13 +225,14 @@ public class OpenApiOrderValuationServiceImpl implements OpenApiOrderValuationSe
 
     private List<ValuationRes> getValuationResList(Member member, OrderValuationDto valuationDto, List<DeliveryInfo> deliveryInfos, PackageDeliveryDto packageDeliveryDto, Map<Integer, List<PackageDiscountDetailDto>> packageDiscountMap, Map<Integer, List<PackageCommissionDetailDto>> packageCommissionMap) {
         List<ValuationRes> valuationResList = Lists.newArrayList();
-        for (DeliveryInfo info : deliveryInfos) {
+        for (DeliveryInfo deliveryInfo : deliveryInfos) {
+            OrderReq orderReq = this.convertToOrderReq(valuationDto);
             // 计价
-            ValuationRes valuationRes = this.doValuation(valuationDto, info, valuationDto.getMerchantId(), valuationDto.getShopId());
-            if (valuationRes == null) {
+            ValuationRes valuationRes = this.doValuation(orderReq, deliveryInfo, valuationDto.getMerchantId(), valuationDto.getShopId());
+            if (Objects.isNull(valuationRes)) {
                 continue;
             }
-            valuationRes.setPreferredDelivery(info.getPreferredDelivery());
+            valuationRes.setPreferredDelivery(deliveryInfo.getPreferredDelivery());
             valuationRes.setOriginalMoney(valuationRes.getDeliveryAmount());
             // 设置排序
             if (packageDeliveryDto != null && PackageDeliveryTypeEnum.CUSTOM.type.equals(packageDeliveryDto.getType())) {
@@ -198,13 +240,13 @@ public class OpenApiOrderValuationServiceImpl implements OpenApiOrderValuationSe
             }
             // 设置优惠
             if (packageDiscountMap.size() > 0) {
-                this.setDiscountInfo(packageDiscountMap.get(info.getType()), valuationRes);
+                this.setDiscountInfo(packageDiscountMap.get(deliveryInfo.getType()), valuationRes);
             }
             // 设置佣金
             if (packageCommissionMap.size() > 0) {
-                this.setCommissionInfo(packageCommissionMap.get(info.getType()), valuationRes);
+                this.setCommissionInfo(packageCommissionMap.get(deliveryInfo.getType()), valuationRes);
             }
-            valuationRes.setIsMerchant(info.getIsMerchant());
+            valuationRes.setIsMerchant(deliveryInfo.getIsMerchant());
             if (valuationRes.getIsMine() == 0) {
                 // 校验余额是否充足
                 if (member.getAmount().compareTo(valuationRes.getDeliveryAmount()) >= 0) {
@@ -216,11 +258,242 @@ public class OpenApiOrderValuationServiceImpl implements OpenApiOrderValuationSe
         return valuationResList;
     }
 
-    private ValuationRes doValuation(OrderValuationDto valuationDto, DeliveryInfo info, Long merchantId, Long shopId) {
-        // todo: 计价主逻辑
+    private OrderReq convertToOrderReq(OrderValuationDto valuationDto) {
+        OrderReq orderReq = new OrderReq();
+        BeanUtils.copyProperties(valuationDto, orderReq);
+
+        AddressReq sendAddress = new AddressReq();
+        sendAddress.setContact(valuationDto.getSendName());
+        sendAddress.setPhone(valuationDto.getSendPhone());
+        sendAddress.setProvinceName(valuationDto.getSendProvinceName());
+        sendAddress.setCityName(valuationDto.getSendCityName());
+        sendAddress.setDistrictName(valuationDto.getSendDistrictName());
+        sendAddress.setAddress(valuationDto.getSendAddress());
+        sendAddress.setStreet(valuationDto.getSendHouseNumber());
+        sendAddress.setLng(valuationDto.getSendLng());
+        sendAddress.setLat(valuationDto.getSendLat());
+        sendAddress.setCityCode(valuationDto.getSendCityCode());
+        orderReq.setSendAddress(sendAddress);
+
+        AddressReq receiptAddress = new AddressReq();
+        receiptAddress.setContact(valuationDto.getReceiverName());
+        receiptAddress.setPhone(valuationDto.getReceiverPhone());
+        receiptAddress.setProvinceName(valuationDto.getReceiverProvinceName());
+        receiptAddress.setCityName(valuationDto.getReceiverCityName());
+        receiptAddress.setDistrictName(valuationDto.getReceiverDistrictName());
+        receiptAddress.setAddress(valuationDto.getReceiverAddress());
+        receiptAddress.setStreet(valuationDto.getReceiverHouseNumber());
+        receiptAddress.setLng(valuationDto.getReceiverLng());
+        receiptAddress.setLat(valuationDto.getReceiverLat());
+        receiptAddress.setCityCode(valuationDto.getReceiverCityCode());
+        orderReq.setReceiptAddress(receiptAddress);
+
+        orderReq.setDaySeq(valuationDto.getDaySeq());
+        orderReq.setProduct(valuationDto.getProduct());
+        orderReq.setProductId(valuationDto.getCategoryId());
+        orderReq.setWeight(valuationDto.getWeight());
+
+        if (StringUtils.isNotBlank(valuationDto.getShopCode())) {
+            orderReq.setShopId(valuationDto.getShopId());
+            orderReq.setShopName(valuationDto.getShopName());
+        }
+        orderReq.setIsMine(0);
+        orderReq.setPlatformType(0);
+        orderReq.setTransport(0);
+        // 对接开放接口的均为余额支付
+        orderReq.setPaymentType(PaymentTypeEnum.BALANCE.type);
+        orderReq.setTakeRemark(valuationDto.getRemark());
+        // 对接开放接口均为自选运力
+        orderReq.setDeliveryType(2);
+        // 对接开放接口均为立即取件,取件时间为当前
+        orderReq.setTakeType(0);
+        orderReq.setTakeTime(DateUtils.format(new Date(), DateUtils.YYYY_MM_DD_HH_MM_SS));
+
+        return orderReq;
+    }
+
+    private ValuationRes doValuation(OrderReq orderReq, DeliveryInfo delivery, Long merchantId, Long shopId) {
+        orderReq.setOrderSn(SnCodeUtils.createSn());
+        orderReq.setAmount(orderReq.getProductAmount());
+        OrderVo orderVo = OrderEntityUtils.createOrderVo(orderReq, delivery, deliveryConfig.isTest());
+        // 获取用户配置
+        MemberConfig memberConfig = iMemberConfigService.getShopMemberConfig(shopId, null);
+        if (memberConfig != null && memberConfig.getSyncGoodsDetailToDelivery().equals(DeletedEnum.YES.getValue())) {
+            // 是否同步订单商品给骑手
+            orderVo.setMtGoods(Lists.newArrayList());
+        }
+        orderVo.setIsMine(delivery.getIsMine());
+        if (DeliveryTypeEnums.FENG_NIAO.getType().equals(delivery.getType()) || DeliveryTypeEnums.MEI_TUAN.getType().equals(delivery.getType())
+                || DeliveryTypeEnums.FENG_NIAO_PT.getType().equals(delivery.getType())) {
+            ShopDelivery shopDelivery = iShopDeliveryService.findOne(shopId, delivery.getId());
+            if (shopDelivery == null || !BindStatusEnum.BIND.status.equals(shopDelivery.getBindStatus())) {
+                return null;
+            }
+        }
+
+//        if ((DeliveryTypeEnums.FENG_NIAO.getType().equals(delivery.getType())
+//                || DeliveryTypeEnums.MEI_TUAN.getType().equals(delivery.getType())
+//                ||DeliveryTypeEnums.FENG_NIAO_PT.getType().equals(delivery.getType()))
+//                && DefaultShopEnum.SHOW.status.equals(defaultShop)) {
+//            return null;
+//        }
+
+        if ((DeliveryTypeEnums.FENG_NIAO.getType().equals(delivery.getType())||DeliveryTypeEnums.FENG_NIAO_PT.getType().equals(delivery.getType())) && shopId == null) {
+            return null;
+        }
+        // 美团跑腿未绑定不参与计价
+        if ((DeliveryTypeEnums.MEI_TUAN_ZB.getType().equals(delivery.getType()) ||DeliveryTypeEnums.MEI_TUAN_SG_ZB.getType().equals(delivery.getType())) && delivery.getIsMine() == 0){
+            return null;
+        }
+        if ((DeliveryTypeEnums.MEI_TUAN_ZB.getType().equals(delivery.getType()) || DeliveryTypeEnums.MEI_TUAN_SG_ZB.getType().equals(delivery.getType()))){
+            SysConfig sysConfig = iSysConfigService.selectSysConfigByKey("MT_PT");
+            if (sysConfig.getConfigValue().equals("yes") && shopId != 1626){
+                return null;
+            }
+        }
+        ResObject<OrderResultVo> resObject = client.queryOrderDeliverFee(orderVo);
+        if (resObject.getCode() == 0) {
+            ValuationRes res = new ValuationRes();
+            transResObject(res, delivery, resObject, orderReq, orderVo);
+            // 判断是否是自己平台,查询金额是否充足  (对接开放平台暂时无自运力逻辑, 此处保留防止需求变更)
+            if (delivery.getIsMine() == 1 && !delivery.getType().equals(DeliveryTypeEnums.KUAI_FU.getType())
+                    && !delivery.getType().equals(DeliveryTypeEnums.MEI_TUAN_ZB.getType())
+                    && !DeliveryTypeEnums.MEI_TUAN_ZB.getType().equals(delivery.getType())) {
+                QueryAmount queryAmount = QueryAmountEntityUtils.queryAmount(delivery, merchantId, delivery.getIsMine());
+                ResObject<AmountResultVo> amountRes = client.queryAmount(queryAmount);
+                if (amountRes.getCode() == 0) {
+                    // 更新余额
+                    AmountResultVo vo = amountRes.getData();
+                    this.updateAmount(delivery, merchantId, shopId, vo.getBalanceAmount());
+                    if (vo.getBalanceAmount().compareTo(res.getDeliveryAmount()) >= 0) {
+                        res.setIsEnough(StatusEnum.SHOW.status);
+                        res.setIsMine(1);
+                    } else {
+                        //uupt需重新计价
+                        res.setIsMine(0);
+                        orderVo.setIsMine(0);
+                        if (DeliveryTypeEnums.UUPT.getName().equals(orderVo.getLbClient())||DeliveryTypeEnums.SHAN_SONG.getName().equals(orderVo.getLbClient())) {
+                            orderVo.setOpenId("");
+                            resObject = client.queryOrderDeliverFee(orderVo);
+                            if (resObject.getCode() == 0) {
+                                transResObject(res, delivery, resObject, orderReq, orderVo);
+                            } else {
+                                res = null;
+                            }
+                        }
+                        if (DeliveryTypeEnums.DADA.getType().equals(delivery.getType()) || DeliveryTypeEnums.DADA_YZ.getType().equals(delivery.getType())){
+                            // 达达/优质余额不足,重新计价
+                            log.info("余额不足----" + DeliveryTypeEnums.getNameByType(delivery.getType()) + "余额不足,重新计价");
+                            ShopDelivery sd = iShopDeliveryService.getOne(new QueryWrapper<ShopDelivery>().eq("merchant_id", merchantId).eq("delivery_id", delivery.getId())
+                                    .eq("deleted", IsDeleteEnum.NORMAL.status).eq("shop_id", shopId).eq("bind_status",1));
+                            if (sd != null && sd.getThirdShopId() != null) {
+                                orderVo.setShopNo(sd.getThirdShopId());
+                                delivery.setShopId(sd.getThirdShopId());
+                            } else {
+                                // 如果默认店铺被删了,则取列表第一个
+                                List<ShopDelivery> deliveries = iShopDeliveryService.list(new QueryWrapper<ShopDelivery>().eq("merchant_id", merchantId).eq("delivery_id", delivery.getId())
+                                        .eq("deleted", IsDeleteEnum.NORMAL.status).isNotNull("third_shop_id"));
+                                if (CollectionUtils.isNotEmpty(deliveries)){
+                                    orderVo.setShopNo(deliveries.get(0).getThirdShopId());
+                                    delivery.setShopId(deliveries.get(0).getThirdShopId());
+                                }
+                            }
+                            orderVo.setMerchantId(null);
+                            resObject = client.queryOrderDeliverFee(orderVo);
+                            if (resObject.getCode() == 0) {
+                                transResObject(res, delivery, resObject, orderReq, orderVo);
+                            }else{
+                                res = null;
+                            }
+                        }
+                        // 顺丰自运力余额不足,转猎豹平台重写计价
+                        if (DeliveryTypeEnums.SHUN_FENG.getName().equals(orderVo.getLbClient())) {
+                            delivery.setIsMine(0);
+                            delivery.setThirdShopId(null);
+                            OrderVo reOrderVo = OrderEntityUtils.createOrderVo(orderReq, delivery, deliveryConfig.isTest());
+                            reOrderVo.setIsMine(delivery.getIsMine());
+                            resObject = client.queryOrderDeliverFee(reOrderVo);
+                            if (resObject.getCode() == 0) {
+                                transResObject(res, delivery, resObject, orderReq, orderVo);
+                            }else{
+                                res = null;
+                            }
+                        }
+
+                    }
+                }
+            } else if (delivery.getIsMine() == 1 && delivery.getType().equals(DeliveryTypeEnums.KUAI_FU.getType())) {
+                if (!resObject.getData().getFeStatus().equals("1")) {
+
+                    res.setIsMine(0);
+                    orderVo.setIsMine(0);
+                    orderVo.setAccessToken(null);
+                    orderVo.setOpenId(null);
+                    resObject = client.queryOrderDeliverFee(orderVo);
+                    if (resObject.getCode() == 0) {
+                        transResObject(res, delivery, resObject, orderReq, orderVo);
+                    }else{
+                        res = null;
+                    }
+                }
+            }
+            return res;
+        }
         return null;
     }
 
+    private void updateAmount(DeliveryInfo delivery, Long merchantId, Long shopId, BigDecimal balanceAmount) {
+        if (DeliveryTypeEnums.DADA.getType().equals(delivery.getType())
+                || DeliveryTypeEnums.DADA_YZ.getType().equals(delivery.getType())
+                || DeliveryTypeEnums.FENG_NIAO.getType().equals(delivery.getType())
+                || DeliveryTypeEnums.SHUN_FENG.getType().equals(delivery.getType())
+                || DeliveryTypeEnums.MEI_TUAN_ZB.getType().equals(delivery.getType())) {
+            ShopDeliveryBind shopDeliveryBind = iShopDeliveryBindService.getOne(new QueryWrapper<ShopDeliveryBind>()
+                    .eq("merchant_id", merchantId).eq("shop_id", shopId).eq("delivery_id", delivery.getId())
+                    .eq("deleted", IsDeleteEnum.NORMAL.status).eq("bind_status", 1));
+            // 门店模式变更余额
+            if (shopDeliveryBind != null) {
+                iShopDeliveryBindService.updateShopAmount(shopDeliveryBind.getMerchantId(), shopDeliveryBind.getDeliveryId(), shopDeliveryBind.getThirdShopId(), balanceAmount);
+            }
+        } else {
+            ShopDeliveryBind shopDeliveryBind = iShopDeliveryBindService.getOne(new QueryWrapper<ShopDeliveryBind>()
+                    .eq("merchant_id", merchantId).eq("delivery_id", delivery.getId())
+                    .eq("deleted", IsDeleteEnum.NORMAL.status).isNull("shop_id")
+                    .eq("bind_status", 1));
+            // 商户模式变更余额
+            if (shopDeliveryBind != null) {
+                iShopDeliveryBindService.updateMerchantAmount(shopDeliveryBind.getId(), balanceAmount);
+            }
+        }
+    }
+
+    private void transResObject(ValuationRes res, DeliveryInfo delivery, ResObject<OrderResultVo> resObject, OrderReq orderReq, OrderVo orderVo) {
+        res.setDeliveryId(delivery.getId());
+        res.setName(delivery.getName());
+        res.setLogo(delivery.getLogo());
+        res.setDesc(CommonUtils.change2Km((int) resObject.getData().getDistance()));
+        res.setDistance(String.valueOf(resObject.getData().getDistance()));
+        res.setDeliveryAmount(resObject.getData().getDeliverFee());
+        res.setIsEnough(StatusEnum.STOP.status);
+        res.setTotalMoney(resObject.getData().getTotalMoney());
+        res.setNeedPaymoney(resObject.getData().getNeedPaymoney());
+        res.setPriceToken(resObject.getData().getPriceToken());
+        // res.setDeliveryInfo(delivery);
+        res.setOrderSn(orderReq.getOrderSn());
+        res.setIsMine(orderVo.getIsMine());
+        res.setOrderNo(orderReq.getOrderNo());
+        res.setCityId(resObject.getData().getCityId());
+        res.setCityInfoRevision(resObject.getData().getCityInfoRevision());
+        res.setOrderVehicleId(resObject.getData().getOrderVehicleId());
+        res.setTotalPriceFen(resObject.getData().getHllAmount());
+        res.setOrderNumber(resObject.getData().getDeliveryOrderNo());//闪送订单号
+        res.setShopId(delivery.getShopId());
+        res.setThirdShopId(delivery.getThirdShopId());
+        res.setAuthToken(delivery.getAuthToken());
+        res.setPhone(delivery.getPhone());
+        res.setDeliveryType(delivery.getType());
+    }
+
     private void setBillingSort(PackageDeliveryDto packageDeliveryDto, ValuationRes valuationRes) {
         List<PackageDeliveryDetailDto> deliveryDetailDtoList = packageDeliveryDto.getPackageDeliveryDetailDtoList();
         if (CollectionUtils.isNotEmpty(deliveryDetailDtoList)) {

+ 5 - 3
lb-app/src/main/java/com/ydd/app/vo/OrderValuationVo.java

@@ -2,6 +2,8 @@ package com.ydd.app.vo;
 
 import lombok.Data;
 
+import java.math.BigDecimal;
+
 /**
  * 运力计价结果
  * @author 叶君翔
@@ -28,16 +30,16 @@ public class OrderValuationVo {
     /**
      * 预估运费金额,单位: 元
      */
-    private String deliveryAmount;
+    private BigDecimal deliveryAmount;
 
     /**
      * 优惠金额,单位: 元
      */
-    private String discountAmount;
+    private BigDecimal discountAmount;
 
     /**
      * 最终需支付金额,单位: 元
      */
-    private String needPayAmount;
+    private BigDecimal needPayAmount;
 
 }

+ 5 - 0
lb-common/src/main/java/com/ydd/common/constant/RedisKeyConstant.java

@@ -37,4 +37,9 @@ public interface RedisKeyConstant {
      */
     String MEMBER_DAY_SEQ = "member_day_seq:date:";
 
+    /**
+     * 计价结果缓存key
+     */
+    String VALUATION_RESULT = "valuation_result:";
+
 }

+ 5 - 0
lb-module/src/main/java/com/ydd/module/constants/AppConstant.java

@@ -20,4 +20,9 @@ public interface AppConstant {
 
     String PRIVATE_NUMBER_INVALID_TIME_KEY = "PRIVATE_NUMBER_INVALID_TIME";
 
+    /**
+     * 计价结果有效时长, 单位: 分钟
+     */
+    int VALUATION_RESULT_EFFECTIVE_MINUTES = 10;
+
 }

+ 15 - 0
lb-module/src/main/java/com/ydd/module/domain/MemberConfig.java

@@ -133,6 +133,21 @@ private static final long serialVersionUID=1L;
     /** 预约单自动下单时长: 单位秒 */
     private Integer bookingAutodeliveryOrderTime;
 
+    /**
+     * 同步订单商品给骑手
+     */
+    private Integer syncGoodsDetailToDelivery;
+
+    /**
+     * 同步打印客户联商品明细
+     */
+    private Integer customerLinkPrintGoodsDetail;
+
+    /**
+     * 同步打印客户联商品价格
+     */
+    private Integer customerLinkPrintGoodsPrice;
+
     /** 创建时间 */
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @Excel(name = "创建时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")