Ver código fonte

运单详情新增字段

donglang 1 mês atrás
pai
commit
ae0877b2e2

+ 3 - 0
sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/enums/LogisticsOrderV1Enum.java

@@ -51,6 +51,9 @@ public enum LogisticsOrderV1Enum {
 
 
     public static String getDesc(int code) {
+        if (code == 0) {
+            return null;
+        }
         for (LogisticsOrderV1Enum logisticsOrderV1Enum : EnumSet.allOf(LogisticsOrderV1Enum.class)) {
             if (logisticsOrderV1Enum.code.equals(code)) {
                 return logisticsOrderV1Enum.destination;

+ 1 - 1
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/enterpriseApp/AppWayBillController.java

@@ -212,7 +212,7 @@ public class AppWayBillController {
 
 
     /**
-     * 查询司机关联车辆的物流订单
+     * 分页查询物流订单
      *
      * @param param
      * @return

+ 2 - 2
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/param/WaybillOrderQueryParam.java

@@ -34,9 +34,9 @@ public class WaybillOrderQueryParam extends PageReq implements Serializable {
     private String truckNo;
 
     /**
-     * 状态
+     * 状态 (1-进行中、2-单证审核、3-已完成)
      */
-    @Schema(description = "状态")
+    @Schema(description = "状态 (1-进行中、2-单证审核、3-已完成)")
     @NotNull(message = "状态不能为空!")
     private Integer status;
 

+ 38 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/WaybillOrderDetailResp.java

@@ -5,6 +5,7 @@ import lombok.Data;
 
 import java.io.Serial;
 import java.io.Serializable;
+import java.math.BigDecimal;
 import java.util.List;
 
 /**
@@ -123,6 +124,43 @@ public class WaybillOrderDetailResp implements Serializable {
      */
     @Schema(description = "货损率")
     private String lossRate;
+
+    /**
+     * 皮重
+     */
+    @Schema(description = "皮重")
+    private BigDecimal tareAmount;
+
+    /**
+     * 毛重
+     */
+    @Schema(description = "毛重")
+    private BigDecimal grossAmount;
+
+    /**
+     * 状态
+     */
+    @Schema(description = "状态")
+    private Integer status;
+
+    /**
+     * 状态描述
+     */
+    @Schema(description = "状态描述")
+    private String statusDesc;
+
+    /**
+     * 法定载重
+     */
+    @Schema(description = "法定载重")
+    private BigDecimal legalLoad;
+
+    /**
+     * 装卸货之间距离
+     */
+    @Schema(description = "装卸货之间距离")
+    private double distanceKm;
+
     /**
      * 过磅记录
      */

+ 38 - 8
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtWaybillOrderV1Service.java

@@ -11,7 +11,9 @@ import com.google.common.collect.Maps;
 import com.google.common.collect.Sets;
 import com.sckw.core.common.enums.enums.DictEnum;
 import com.sckw.core.common.enums.enums.DictTypeEnum;
+import com.sckw.core.common.enums.enums.ErrorCodeEnum;
 import com.sckw.core.exception.BusinessException;
+import com.sckw.core.exception.BusinessPlatfromException;
 import com.sckw.core.model.constant.Global;
 import com.sckw.core.model.constant.NumberConstant;
 import com.sckw.core.model.constant.UrlConstants;
@@ -52,6 +54,7 @@ import com.sckw.transport.model.param.WaybillOrderReq;
 import com.sckw.transport.model.param.WaybillOrderResp;
 import com.sckw.transport.model.vo.*;
 import com.sckw.transport.repository.*;
+import com.sckw.transport.utils.DistanceUtils;
 import jakarta.annotation.Resource;
 import jakarta.servlet.http.HttpServletRequest;
 import jakarta.validation.Valid;
@@ -129,7 +132,6 @@ public class KwtWaybillOrderV1Service {
     private final KwtLogisticsOrderRepository kwtLogisticsOrderRepository;
     private final KwtWaybillOrderTicketRepository  kwtWaybillOrderTicketRepository;
     private final KwtWaybillOrderNodeRepository kwtWaybillOrderNodeRepository;
-    private final KwtWaybillOrderNodeRepository waybillOrderNodeRepository;
     @Resource
     private StreamBridge streamBridge;
     @DubboReference(version = "1.0.0", group = "design", check = false)
@@ -3329,7 +3331,7 @@ public class KwtWaybillOrderV1Service {
         }
 
         //查询轨迹
-        List<KwtWaybillOrderNode> kwtWaybillOrderNodes = waybillOrderNodeRepository.queryNodesByOrderId(billOrder.getId(), subtask.getId());
+        List<KwtWaybillOrderNode> kwtWaybillOrderNodes = kwtWaybillOrderNodeRepository.queryNodesByOrderId(billOrder.getId(), subtask.getId());
         List<KwtWaybillOrderNode> nodeList = Lists.newArrayList() ;
         if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(kwtWaybillOrderNodes)){
             nodeList = kwtWaybillOrderNodes.stream()
@@ -3352,8 +3354,17 @@ public class KwtWaybillOrderV1Service {
             };
         }
 
+        //装卸货信息
+        List<KwtWaybillOrderTicket> orderTicketList = kwtWaybillOrderTicketRepository.queryByWOrderId(req.getOrderId());
+        if (CollectionUtils.isEmpty(orderTicketList)) {
+            throw new BusinessPlatfromException(ErrorCodeEnum.WAYBILL_ORDER_NOT_TICKET, "当前车辆无物流运单装卸货信息");
+        }
+        Map<String, KwtWaybillOrderTicket> ticketMap = orderTicketList.stream().collect(
+                Collectors.toMap(ticket -> ticket.getWOrderId() + "-" + ticket.getType(),
+                        Function.identity(), (x, y) -> x));
+
         return getWaybillOrderDetailResp( subtask,billOrder, logOrder, truck, fleet, goods,
-                keyAndAddressMap,kwpGoods,logisticsOrderUnitMap,nodeList,userCacheResDto,billOrders);
+                keyAndAddressMap,kwpGoods,logisticsOrderUnitMap,nodeList,userCacheResDto,billOrders,ticketMap);
     }
 
     @NotNull
@@ -3367,7 +3378,8 @@ public class KwtWaybillOrderV1Service {
                                                                      Map<String, KwtLogisticsOrderUnit> logisticsOrderUnitMap,
                                                                      List<KwtWaybillOrderNode> nodeList,
                                                                      UserCacheResDto userCacheResDto,
-                                                                     List<KwtWaybillOrder> billOrders) {
+                                                                     List<KwtWaybillOrder> billOrders,
+                                                                     Map<String, KwtWaybillOrderTicket> ticketMap) {
         WaybillOrderDetailResp waybillOrderDetailResp = new WaybillOrderDetailResp();
         waybillOrderDetailResp.setWaybillOrderId(String.valueOf(billOrder.getId()));
         waybillOrderDetailResp.setWaybillOrderNo(billOrder.getWOrderNo());
@@ -3385,10 +3397,17 @@ public class KwtWaybillOrderV1Service {
         }
         KwtWaybillOrderAddress loadAdd = keyAndAddressMap.getOrDefault(billOrder.getId() + "-" + AddressTypeEnum.SHIPMENT.getCode(), new KwtWaybillOrderAddress());
         waybillOrderDetailResp.setLoadAddress(loadAdd.getDetailAddress());
-        KwtWaybillOrderAddress unLoadAdd =
-                keyAndAddressMap.getOrDefault(billOrder.getId() + "-" + AddressTypeEnum.TAKE.getCode(),
-                        new KwtWaybillOrderAddress());
+        KwtWaybillOrderAddress unLoadAdd = keyAndAddressMap.getOrDefault(billOrder.getId() + "-" + AddressTypeEnum.TAKE.getCode(), new KwtWaybillOrderAddress());
         waybillOrderDetailResp.setUnloadAddress(unLoadAdd.getDetailAddress());
+
+        //预计里程
+        double distanceKm = DistanceUtils.calculateDistance(
+                Optional.ofNullable(loadAdd.getLat()).map(Double::valueOf).orElse(null),
+                Optional.ofNullable(loadAdd.getLng()).map(Double::valueOf).orElse(null),
+                Optional.ofNullable(unLoadAdd.getLat()).map(Double::valueOf).orElse(null),
+                Optional.ofNullable(unLoadAdd.getLng()).map(Double::valueOf).orElse(null));
+        waybillOrderDetailResp.setDistanceKm(distanceKm);
+
         waybillOrderDetailResp.setTaskVolume(Objects.nonNull(subtask.getEntrustAmount()) ?
                 subtask.getEntrustAmount().setScale(2, RoundingMode.HALF_UP).toPlainString() : "");
         waybillOrderDetailResp.setLoadAmount(Objects.nonNull(subtask.getLoadAmount()) ?
@@ -3400,6 +3419,17 @@ public class KwtWaybillOrderV1Service {
         KwtLogisticsOrderUnit carrierEnt = logisticsOrderUnitMap.getOrDefault(logOrder.getId() + "-" + UnitTypeEnum.CARRIAGE.getCode(), new KwtLogisticsOrderUnit());
         waybillOrderDetailResp.setTransEntName(transEnt.getFirmName());
         waybillOrderDetailResp.setCarrierEntName(carrierEnt.getFirmName());
+
+        //皮重
+        KwtWaybillOrderTicket tareAmountTicket = ticketMap.getOrDefault(subtask.getWOrderId() + "-" + AddressTypeEnum.SHIPMENT.getCode(), new KwtWaybillOrderTicket());
+        waybillOrderDetailResp.setTareAmount(tareAmountTicket.getTareAmount());
+        //毛重
+        KwtWaybillOrderTicket grossAmountTicket = ticketMap.getOrDefault(subtask.getWOrderId() + "-" + AddressTypeEnum.TAKE.getCode(), new KwtWaybillOrderTicket());
+        waybillOrderDetailResp.setGrossAmount(grossAmountTicket.getTareAmount());
+
+        waybillOrderDetailResp.setStatus(subtask.getStatus());
+        waybillOrderDetailResp.setStatusDesc(CarWaybillV1Enum.geDesc(subtask.getStatus()));
+        waybillOrderDetailResp.setLegalLoad(truck.getActualWeight());
         
         // 计算装货完成率 = (装货量 / 任务量) × 100%
         String loadCompleteRate = "0.00%";
@@ -3591,7 +3621,7 @@ public class KwtWaybillOrderV1Service {
         kwtWaybillOrderNode.setRemark(remark);
         kwtWaybillOrderNode.setCreateBy(LoginUserHolder.getUserId());
         kwtWaybillOrderNode.setTruckId(billOrder.getTruckId());
-        waybillOrderNodeRepository.save(kwtWaybillOrderNode);
+        kwtWaybillOrderNodeRepository.save(kwtWaybillOrderNode);
     }
 
     @NotNull

+ 10 - 3
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/app/WaybillOrderService.java

@@ -279,7 +279,7 @@ public class WaybillOrderService {
             throw new BusinessPlatfromException(ErrorCodeEnum.LOGISTICS_ORDER_NOT_ADDRESS, "物流订单无装卸货地址信息");
         }
         return logOrderAddressList.stream().collect(Collectors
-                .toMap(address -> address.getLOrderId() + "-" + address.getType(),
+                .toMap(address -> address.getLOrderId() + "-" + address.getAddressType(),
                         Function.identity(), (x, y) -> x));
     }
 
@@ -301,6 +301,7 @@ public class WaybillOrderService {
                                                      Map<String, KwtLogisticsOrderAddress> logOrderIdAndAddressMap,
                                                      Map<Long, KwtLogisticsOrderCirculate> logOrderIdAndCirculateMap) {
         LogisticsOrderResp orderResp = new LogisticsOrderResp();
+        orderResp.setLogisticsOrderId(Optional.ofNullable(order.getId()).map(String::valueOf).orElse(null));
         orderResp.setLogisticsOrderNo(order.getLOrderNo());
         //商品
         KwtLogisticsOrderGoods orderGoods = logOrderIdAndGoodsMap.getOrDefault(order.getId(), new KwtLogisticsOrderGoods());
@@ -345,6 +346,8 @@ public class WaybillOrderService {
         UserCacheResDto userCacheResDto = remoteSystemService.queryUserCacheById(orderCirculate.getCreateBy());
         orderResp.setSendOperator(Optional.ofNullable(userCacheResDto).map(UserCacheResDto::getName).orElse(null));
         orderResp.setSendPhone(Optional.ofNullable(userCacheResDto).map(UserCacheResDto::getPhone).orElse(null));
+        orderResp.setStatus(Optional.ofNullable(order.getStatus()).map(String::valueOf).orElse(null));
+        orderResp.setStatusDesc(LogisticsOrderV1Enum.getDesc(order.getStatus()));
 
         return orderResp;
     }
@@ -547,6 +550,7 @@ public class WaybillOrderService {
     }
 
     public StatisticsWaybillResp statisticsWaybillOrder() {
+        StatisticsWaybillResp waybillResp = new StatisticsWaybillResp();
         log.info("运单状态统计");
         StatisticsWaybillResp statisticsWaybillResp = waybillOrderV1Service.statisticsWaybillOrder();
         if (statisticsWaybillResp == null || CollectionUtils.isEmpty(statisticsWaybillResp.getOrderStatusStatistics())) {
@@ -555,7 +559,7 @@ public class WaybillOrderService {
         // 定义状态码聚合规则
         Map<List<String>, String[]> aggregateRules = Map.of(
                 Arrays.asList("1", "5", "10", "15"), new String[]{"1", "进行中"},
-                Arrays.asList("20", "30"), new String[]{"2", "审核"},
+                Arrays.asList("20", "30"), new String[]{"2", "单证审核"},
                 Arrays.asList("25", "99"), new String[]{"3", "已完成"}
         );
         List<StatisticsWaybillResp.OrderBillStatusStatistics> orderStatusStatistics = statisticsWaybillResp.getOrderStatusStatistics();
@@ -576,7 +580,10 @@ public class WaybillOrderService {
             aggregateStat.setOrderNum(String.valueOf(totalNum)); // 汇总数量
             return aggregateStat;
         }).collect(Collectors.toList());
-        return new StatisticsWaybillResp();
+        aggregatedList.sort(Comparator.comparing(StatisticsWaybillResp.OrderBillStatusStatistics::getOrderStatus));
+
+        waybillResp.setOrderStatusStatistics(aggregatedList);
+        return waybillResp;
     }
 
     /**

+ 3 - 3
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/utils/DistanceUtils.java

@@ -69,12 +69,12 @@ public class DistanceUtils {
     public static double calculateDistance(Double lon1, Double lat1, Double lon2, Double lat2, Unit unit) {
         // 1. 校验参数是否为null
         if (lon1 == null || lat1 == null || lon2 == null || lat2 == null) {
-            return Double.NaN;
+            return 0.0;
         }
 
         // 2. 校验经纬度合法性
-        validateCoordinates(lon1, lat1);
-        validateCoordinates(lon2, lat2);
+//        validateCoordinates(lon1, lat1);
+//        validateCoordinates(lon2, lat2);
 
         // 3. 角度转弧度
         double radLon1 = Math.toRadians(lon1);