wangtao 3 éve
szülő
commit
7568e023e5

+ 124 - 55
lb-app/src/main/java/com/ydd/app/service/impl/ApiDadaValuationServiceImpl.java

@@ -53,6 +53,7 @@ import static java.math.BigDecimal.ROUND_UP;
 
 /**
  * 达达配送商-计价serviceImpl
+ *
  * @author 叶君翔
  * @date 2021/12/31 15:20
  */
@@ -78,7 +79,7 @@ public class ApiDadaValuationServiceImpl implements ApiDadaValuationService {
     private final RedisCache redisCache;
 
     @Override
-    public ValuationResultData dadaValuation(Long shopId, Member loginMember, Member member, OrderReq orderReq, int valuationType,  Long dadaDspId) {
+    public ValuationResultData dadaValuation(Long shopId, Member loginMember, Member member, OrderReq orderReq, int valuationType, Long dadaDspId) {
         log.info("达达配送商计价: shopId: {}, orderReq: {}, valuationType: {}, dadaDspId: {}", shopId, JsonMapper.nonEmptyMapper().toJson(orderReq), valuationType, dadaDspId);
         ValuationResultData resultData = new ValuationResultData();
         ValuationRes res = new ValuationRes();
@@ -158,12 +159,12 @@ public class ApiDadaValuationServiceImpl implements ApiDadaValuationService {
             info.setAuthToken(shopDeliveryBind.getAuthToken());
             info.setThirdShopId(shopDeliveryBind.getThirdShopId());
             isMine = 1;
-            if (info.getType().equals(DeliveryTypeEnums.DADA.getType())){
+            if (info.getType().equals(DeliveryTypeEnums.DADA.getType())) {
                 info.setShopId(shopDeliveryBind.getDadaShopNo());
                 info.setDadaThirdShopId(shopDeliveryBind.getThirdShopId());
             }
         }
-        if (dspDelivery.getType().equals(DeliveryTypeEnums.DADA.getType()) && member.getMemberType().equals(MemberTypeEnum.PERSON.type)){
+        if (dspDelivery.getType().equals(DeliveryTypeEnums.DADA.getType()) && member.getMemberType().equals(MemberTypeEnum.PERSON.type)) {
             info.setIsMerchant(StatusEnum.SHOW.status);
         }
         info.setPreferredDelivery(StatusEnum.STOP.getStatus());
@@ -171,7 +172,8 @@ public class ApiDadaValuationServiceImpl implements ApiDadaValuationService {
         return info;
     }
 
-    private OrderFreightDto getDadaValuationPrice(Long shopId, Member member, OrderReq orderReq) {
+
+    public OrderFreightDto getDadaValuationPrice(Long shopId, Member member, OrderReq orderReq) {
         try {
             BigDecimal valuationPrice = BigDecimal.ZERO;
 
@@ -179,15 +181,17 @@ public class ApiDadaValuationServiceImpl implements ApiDadaValuationService {
             Long packageId = iPackageFreightService.getPackageId(shopId, member);
             PackageFreight packageFreight = iPackageFreightService.getById(packageId);
             if (packageFreight == null) {
-                log.warn("无合适运费包!");
+                log.warn("无合适运费包");
                 return null;
             }
             // 基础运费
             if (packageFreight.getAmount() != null) {
                 valuationPrice = valuationPrice.add(packageFreight.getAmount());
             }
+
             // 订单加价详情
             OrderFreightDto orderFreight = new OrderFreightDto();
+            orderFreight.setOrderId(orderReq.getOrderId());
             orderFreight.setFreightPackageId(packageFreight.getId());
             orderFreight.setAmount(packageFreight.getAmount());
             orderFreight.setMaxAmount(packageFreight.getMaxAmount());
@@ -200,83 +204,149 @@ public class ApiDadaValuationServiceImpl implements ApiDadaValuationService {
             // 获取距离加价配置
             List<PackageFreightDistance> distanceList = iPackageFreightDistanceService.getPackageById(packageId);
             if (CollectionUtils.isNotEmpty(distanceList)) {
-                BigDecimal orderDistance = new BigDecimal(String.valueOf(bicyclingInfo.getDistance())).divide(new BigDecimal(String.valueOf(1000)), 2, BigDecimal.ROUND_UP);
-                for (PackageFreightDistance item : distanceList) {
-                    boolean inRange = BigDecimalUtils.inRange(item.getStartDistance(), item.getEndDistance(), orderDistance);
-                    if (inRange && item.getDistance() != null && item.getPrice() != null) {
+                BigDecimal orderKm = new BigDecimal(String.valueOf(bicyclingInfo.getDistance())).divide(new BigDecimal(String.valueOf(1000)), 2, BigDecimal.ROUND_UP);
+                BigDecimal distanceAdd = new BigDecimal(BigInteger.ZERO);
+                for (PackageFreightDistance distance : distanceList) {
+                    // 起始 < orderKm <= 无穷大
+                    if (distance.getEndDistance() == null && orderKm.compareTo(distance.getStartDistance()) > 0) {
                         // 计算加价次数
-                        BigDecimal addNum = orderDistance.divide(item.getDistance(), 0, BigDecimal.ROUND_UP);
-                        valuationPrice = valuationPrice.add(item.getPrice().multiply(addNum));
-                        orderFreight.setDistanceAdd(item.getPrice().multiply(addNum));
-                        break;
+                        BigDecimal addNum = orderKm.subtract(distance.getStartDistance()).divide(distance.getDistance(), 0, ROUND_UP);
+                        valuationPrice = valuationPrice.add(distance.getPrice().multiply(addNum));
+                        distanceAdd = distanceAdd.add(distance.getPrice().multiply(addNum));
+                    }
+
+                    // 起始 < orderKm <= 结束值
+                    if (distance.getEndDistance() != null && orderKm.compareTo(distance.getEndDistance()) > 0) {
+                        // 计算加价次数
+                        BigDecimal addNum = distance.getEndDistance().subtract(distance.getStartDistance()).divide(distance.getDistance(), 0, ROUND_UP);
+                        valuationPrice = valuationPrice.add(distance.getPrice().multiply(addNum));
+                        distanceAdd = distanceAdd.add(distance.getPrice().multiply(addNum));
+                    }
+
+                    if (distance.getEndDistance() != null &&
+                            (orderKm.compareTo(distance.getStartDistance()) > 0 && orderKm.compareTo(distance.getEndDistance()) < 1)) {
+                        // 计算加价次数
+                        BigDecimal addNum = orderKm.subtract(distance.getStartDistance()).divide(distance.getDistance(), 0, ROUND_UP);
+                        valuationPrice = valuationPrice.add(distance.getPrice().multiply(addNum));
+                        distanceAdd = distanceAdd.add(distance.getPrice().multiply(addNum));
                     }
                 }
+                orderFreight.setDistanceAdd(distanceAdd);
             }
+
             // 获取重量加价配置
             List<PackageFreightWeight> weightList = iPackageFreightWeightService.getPackageById(packageId);
-            if(CollectionUtils.isNotEmpty(weightList)) {
-                BigDecimal orderWeight = new BigDecimal(String.valueOf(orderReq.getWeight()));
-                for (PackageFreightWeight item : weightList) {
-                    boolean inRange = BigDecimalUtils.inRange(item.getStartWeight(), item.getEndWeight(), orderWeight);
-                    if (inRange && item.getWeight() != null && item.getPrice() != null) {
+            if (CollectionUtils.isNotEmpty(weightList)) {
+                BigDecimal orderWeight = new BigDecimal(Integer.toString(orderReq.getWeight()));
+                BigDecimal weightAdd = new BigDecimal(BigInteger.ZERO);
+                for (PackageFreightWeight weight : weightList) {
+                    // 起始 < orderWeight <= 无穷大
+                    if (weight.getEndWeight() == null && orderWeight.compareTo(weight.getStartWeight()) > 0) {
                         // 计算加价次数
-                        BigDecimal addNum = orderWeight.divide(item.getWeight(), 0, BigDecimal.ROUND_UP);
-                        valuationPrice = valuationPrice.add(item.getPrice().multiply(addNum));
-                        orderFreight.setWeightAdd(item.getPrice().multiply(addNum));
-                        break;
+                        BigDecimal addNum = orderWeight.subtract(weight.getStartWeight()).divide(weight.getWeight(), 0, ROUND_UP);
+                        valuationPrice = valuationPrice.add(weight.getPrice().multiply(addNum));
+                        weightAdd = weightAdd.add(weight.getPrice().multiply(addNum));
+                    }
+
+                    // 起始 < orderWeight <= 结束值
+                    if (weight.getEndWeight() != null && orderWeight.compareTo(weight.getEndWeight()) > 0) {
+                        // 计算加价次数
+                        BigDecimal addNum = weight.getEndWeight().subtract(weight.getStartWeight()).divide(weight.getWeight(), 0, ROUND_UP);
+                        valuationPrice = valuationPrice.add(weight.getPrice().multiply(addNum));
+                        weightAdd = weightAdd.add(weight.getPrice().multiply(addNum));
+                    }
+
+                    if (weight.getEndWeight() != null &&
+                            (orderWeight.compareTo(weight.getStartWeight()) > 0 && orderWeight.compareTo(weight.getEndWeight()) < 1)) {
+                        // 计算加价次数
+                        BigDecimal addNum = orderWeight.subtract(weight.getStartWeight()).divide(weight.getWeight(), 0, ROUND_UP);
+                        valuationPrice = valuationPrice.add(weight.getPrice().multiply(addNum));
+                        weightAdd = weightAdd.add(weight.getPrice().multiply(addNum));
                     }
                 }
+                orderFreight.setWeightAdd(weightAdd);
             }
+
             // 获取商品金额加价配置
             List<PackageFreightMoney> moneyList = iPackageFreightMoneyService.getPackageById(packageId);
             if (CollectionUtils.isNotEmpty(moneyList)) {
                 BigDecimal orderAmount = orderReq.getWaimaiOrderId() == null ? orderReq.getProductAmount() : orderReq.getMtMoney();
-                for (PackageFreightMoney item : moneyList) {
-                    boolean inRange = BigDecimalUtils.inRange(item.getStartMoney(), item.getEndMoney(), orderAmount);
-                    if (inRange && item.getPrice() != null) {
-                        valuationPrice = valuationPrice.add(item.getPrice());
-                        orderFreight.setProductAmountAdd(item.getPrice());
-                        break;
+                BigDecimal moneyAdd = new BigDecimal(BigInteger.ZERO);
+                for (PackageFreightMoney money : moneyList) {
+                    // 起始 < orderAmount <= 结束值
+                    if (orderAmount.compareTo(money.getEndMoney()) > 0) {
+                        valuationPrice = valuationPrice.add(money.getPrice());
+                        moneyAdd = moneyAdd.add(money.getPrice());
+                    }
+
+                    if (orderAmount.compareTo(money.getStartMoney()) > 0 && orderAmount.compareTo(money.getEndMoney()) < 1) {
+                        valuationPrice = valuationPrice.add(money.getPrice());
+                        moneyAdd = moneyAdd.add(money.getPrice());
                     }
                 }
+                orderFreight.setProductAmountAdd(moneyAdd);
             }
+
             // 获取时间段加价配置
             List<PackageFreightTime> timeList = iPackageFreightTimeService.getPackageById(packageId);
             if (CollectionUtils.isNotEmpty(timeList)) {
-                for (PackageFreightTime item : timeList) {
-                    boolean inZone = DateUtils.HHmmInZone(item.getStartTime(), item.getEndTime());
-                    if (inZone && item.getPrice() != null) {
-                        valuationPrice = valuationPrice.add(item.getPrice());
-                        orderFreight.setTimeAdd(item.getPrice());
-                        break;
+                Date newDate = new Date();
+                SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
+                String now = sdf.format(newDate);
+                BigDecimal timeAdd = new BigDecimal(BigInteger.ZERO);
+                for (PackageFreightTime time : timeList) {
+                    // 起始时间段 < now <= 结束时间段
+                    if (now.compareTo(time.getEndTime()) > 0) {
+                        valuationPrice = valuationPrice.add(time.getPrice());
+                        timeAdd = timeAdd.add(time.getPrice());
+                    }
+
+                    if (now.compareTo(time.getStartTime()) > 0 && now.compareTo(time.getEndTime()) < 1) {
+                        valuationPrice = valuationPrice.add(time.getPrice());
+                        timeAdd = timeAdd.add(time.getPrice());
                     }
                 }
+                orderFreight.setTimeAdd(timeAdd);
             }
+
             // 获取日期加价配置
             List<PackageFreightDate> dateList = iPackageFreightDateService.getPackageById(packageId);
-            if (CollectionUtils.isNotEmpty(dateList)) {
-                for (PackageFreightDate item : dateList) {
-                    boolean inZone = DateUtils.YYYYMMddInZone(item.getStartDate(), item.getEndDate());
-                    if (inZone && item.getPrice() != null) {
-                        valuationPrice = valuationPrice.add(item.getPrice());
-                        orderFreight.setDateAdd(item.getPrice());
-                        break;
+            if (dateList != null && dateList.size() > 0) {
+                Date newDate = new Date();
+                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+                Date now = sdf.parse(sdf.format(newDate));
+                BigDecimal dateAdd = new BigDecimal(BigInteger.ZERO);
+                for (PackageFreightDate date : dateList) {
+                    // 起始日期 < now <= 结束日期
+                    if (now.compareTo(date.getEndDate()) > 0) {
+                        valuationPrice = valuationPrice.add(date.getPrice());
+                        dateAdd = dateAdd.add(date.getPrice());
+                    }
+
+                    if (now.compareTo(date.getStartDate()) > 0 && now.compareTo(date.getEndDate()) < 1) {
+                        valuationPrice = valuationPrice.add(date.getPrice());
+                        dateAdd = dateAdd.add(date.getPrice());
                     }
                 }
+                orderFreight.setDateAdd(dateAdd);
             }
+
             // 获取每周加价配置
             List<PackageFreightWeek> weekList = iPackageFreightWeekService.getPackageById(packageId);
-            if (CollectionUtils.isNotEmpty(weekList)) {
-                Integer todayWeek = Calendar.getInstance().get(Calendar.DAY_OF_WEEK);
-                for (PackageFreightWeek item : weekList) {
-                    if (todayWeek.equals(item.getWeek())) {
-                        valuationPrice = valuationPrice.add(item.getPrice());
-                        orderFreight.setWeekAdd(item.getPrice());
-                        break;
+            if (weekList != null && weekList.size() > 0) {
+                Calendar calendar = Calendar.getInstance();
+                Integer todayWeek = calendar.get(Calendar.DAY_OF_WEEK);
+                BigDecimal weekAdd = new BigDecimal(BigInteger.ZERO);
+                for (PackageFreightWeek week : weekList) {
+                    if (todayWeek.equals(week.getWeek())) {
+                        valuationPrice = valuationPrice.add(week.getPrice());
+                        weekAdd = weekAdd.add(week.getPrice());
                     }
                 }
+                orderFreight.setWeekAdd(weekAdd);
             }
-            // 计算运费金额
+
+            // 加价超过最高运费,返回最高运费
             if (packageFreight.getMaxAmount() != null && packageFreight.getMaxAmount().compareTo(valuationPrice) < 0) {
                 orderFreight.setDeliveryAmount(packageFreight.getMaxAmount());
             } else {
@@ -287,7 +357,6 @@ public class ApiDadaValuationServiceImpl implements ApiDadaValuationService {
             log.error("运费包计算异常", e);
             return null;
         }
-
     }
 
     public OrderFreightDto dadaValuation(Long shopId, Member member, OrderReq orderReq) {
@@ -298,12 +367,12 @@ public class ApiDadaValuationServiceImpl implements ApiDadaValuationService {
             Long packageId = iPackageFreightService.getPackageId(shopId, member);
             PackageFreight packageFreight = iPackageFreightService.getById(packageId);
             if (packageFreight == null) {
-              log.warn("无合适运费包!");
-              return null;
+                log.warn("无合适运费包!");
+                return null;
             }
             // 基础运费
             if (packageFreight.getAmount() != null) {
-              valuationPrice = valuationPrice.add(packageFreight.getAmount());
+                valuationPrice = valuationPrice.add(packageFreight.getAmount());
             }
 
             // 订单加价详情
@@ -353,7 +422,7 @@ public class ApiDadaValuationServiceImpl implements ApiDadaValuationService {
 
             // 获取重量加价配置
             List<PackageFreightWeight> weightList = iPackageFreightWeightService.getPackageById(packageId);
-            if(CollectionUtils.isNotEmpty(weightList)) {
+            if (CollectionUtils.isNotEmpty(weightList)) {
                 BigDecimal orderWeight = new BigDecimal(Integer.toString(orderReq.getWeight()));
                 BigDecimal weightAdd = new BigDecimal(BigInteger.ZERO);
                 for (PackageFreightWeight weight : weightList) {
@@ -470,7 +539,7 @@ public class ApiDadaValuationServiceImpl implements ApiDadaValuationService {
                 orderFreight.setDeliveryAmount(valuationPrice);
             }
             return orderFreight;
-        }catch (Exception e) {
+        } catch (Exception e) {
             log.error("运费包计算异常", e);
             return null;
         }

+ 1 - 0
lb-module/src/main/resources/mapper/module/FeedbackMapper.xml

@@ -59,6 +59,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         FROM lb_feedback
         WHERE member_id = #{loginId}
         AND deleted = 0
+        order by id desc
     </select>
 
 </mapper>

+ 25 - 2
lb-third/lb-third-delivery/src/main/java/com/ydd/third/delivery/uupt/service/UuptDeliveryService.java

@@ -131,7 +131,14 @@ public class UuptDeliveryService implements ClientHandler {
                 Map<String, String> map = (Map<String, String>) obj;
                 String name = map.get("Name");
                 String goodsWeightCode = map.get("GoodsWeightCode");
-                if (name.indexOf("公斤") > 0) {
+                int num = 0;
+                for(int i = 0;i<name.length();i++) {
+                    int t = name.indexOf("公斤", i);
+                    if (i == t) {
+                        num++;
+                    }
+                }
+                if(num ==1){
                     name = name.substring(0, name.indexOf("公斤"));
                     BigDecimal nameEnd = BigDecimal.ZERO;
                     if (name.indexOf("-") > 0) {
@@ -147,12 +154,28 @@ public class UuptDeliveryService implements ClientHandler {
                         break;
                     } else if (order.getWeight()!=null&&StringUtils.isNumeric(name)&&order.getWeight().compareTo(new BigDecimal(name)) >= 0 && order.getWeight().compareTo(nameEnd) <= 0) {
                         orderPriceRequest.setGoodsWeightcode(goodsWeightCode);
-                       break;
+                        break;
+                    }
+                }else if(num >1){
+                    name = name.replaceAll("公斤","");
+                    BigDecimal nameEnd = BigDecimal.ZERO;
+                    if (name.indexOf("-") > 0) {
+                        String[] array = name.split("-");
+                        name = array[0];
+                        nameEnd = new BigDecimal(array[1]);
+                    }
+                    if (order.getWeight()!=null&&StringUtils.isNumeric(name)&&order.getWeight().compareTo(new BigDecimal(name)) <= 0&&nameEnd.compareTo(BigDecimal.ZERO)==0) {
+                        orderPriceRequest.setGoodsWeightcode(goodsWeightCode);
+                        break;
+                    } else if (order.getWeight()!=null&&StringUtils.isNumeric(name)&&order.getWeight().compareTo(new BigDecimal(name)) >= 0 && order.getWeight().compareTo(nameEnd) <= 0) {
+                        orderPriceRequest.setGoodsWeightcode(goodsWeightCode);
+                        break;
                     }
                 }
             }
         }
 
+
         orderPriceRequest.setOriginId(order.getOrderNo());
 
         orderPriceRequest.setFromAddress(order.getFromAddress());