Просмотр исходного кода

update 更新运单面板相关接口

chenlin 2 лет назад
Родитель
Сommit
4dfa60da35

+ 4 - 5
sckw-modules/sckw-report/src/main/java/com/sckw/report/controller/KwTransportController.java

@@ -164,8 +164,8 @@ public class KwTransportController {
      * @param query
      * @return
      */
-    @RequestMapping(value = "/getWaybillOrders", method = RequestMethod.POST)
-    public HttpResult getWayBillOrders(@Validated @RequestBody WaybillOrderQuery query){
+    @RequestMapping(value = "/getWaybillOrders", method = RequestMethod.GET)
+    public HttpResult getWayBillOrders(WaybillOrderQuery query){
         HttpResult httpResult = new HttpResult();
         try {
             httpResult = transportService.getWaybillOrders(query);
@@ -184,8 +184,8 @@ public class KwTransportController {
      * @author jc
      * @date 2023/07/21
      */
-    @RequestMapping(value = "/getWayBillStatistics", method = RequestMethod.POST)
-    public HttpResult wayBillStatistics(@Validated @RequestBody WaybillOrderQuery query) {
+    @RequestMapping(value = "/getWayBillStatistics", method = RequestMethod.GET)
+    public HttpResult wayBillStatistics(WaybillOrderQuery query) {
         try {
             return transportService.getWayBillStatistics(query);
         } catch (Exception e) {
@@ -231,5 +231,4 @@ public class KwTransportController {
             return HttpResult.error(HttpStatus.GLOBAL_EXCEPTION_CODE, e.getMessage());
         }
     }
-
 }

+ 8 - 1
sckw-modules/sckw-report/src/main/java/com/sckw/report/service/KwTransportService.java

@@ -238,6 +238,12 @@ public class KwTransportService {
         List<TableTops> results = outputTypeCount.getMappedResults();
         // 填充默认值
         List<TableTops> list = new ArrayList<>();
+        TableTops topTotal = new TableTops();
+        topTotal.setName("全部");
+        topTotal.setValue(null);
+        topTotal.setTotal(0);
+        list.add(topTotal);
+
         TableTops topExpired = new TableTops();
         topExpired.setName("已作废");
         topExpired.setValue(String.valueOf(NumberConstant.ONE_ZERO_ZERO));
@@ -246,7 +252,6 @@ public class KwTransportService {
         expiredStatuses.add(CarWaybillEnum.REJECT_ORDER.getCode().longValue());
         expiredStatuses.add(CarWaybillEnum.REFUSE_TRAFFIC.getCode().longValue());
         expiredStatuses.add(CarWaybillEnum.REVOKED.getCode().longValue());
-
         for (CarWaybillEnum status : CarWaybillEnum.values()) {
             boolean expiredFlag = expiredStatuses.contains(status.getCode().longValue());
             TableTops top = new TableTops();
@@ -271,6 +276,8 @@ public class KwTransportService {
             }
         }
         list.add(topExpired);
+        // 总计
+        topTotal.setTotal(list.parallelStream().mapToInt(item -> item.getTotal()).sum());
         // 查询结果
         return HttpResult.ok(list);
     }

+ 11 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/WaybillManagementController.java

@@ -8,6 +8,7 @@ import jakarta.validation.Valid;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.RequestParam;
@@ -48,4 +49,14 @@ public class WaybillManagementController {
             return HttpResult.error(HttpStatus.GLOBAL_EXCEPTION_CODE, e.getMessage());
         }
     }
+
+    @RequestMapping(name = "运单看板TOP", value = "/waybillIndexStatistics", method = RequestMethod.GET)
+    public HttpResult waybillIndexStatistics(WaybillOrderDTO waybillOrderDTO) {
+        try {
+            return waybillManagementService.waybillIndexStatistics(waybillOrderDTO);
+        } catch (Exception e) {
+            log.error("运单看板TOP:订单id {},error {} ", e.getMessage(), e);
+            return HttpResult.error(HttpStatus.GLOBAL_EXCEPTION_CODE, e.getMessage());
+        }
+    }
 }

+ 10 - 1
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/WaybillOrderDTO.java

@@ -58,9 +58,18 @@ public class WaybillOrderDTO extends PageRequest implements Serializable {
     /**
      * 关键字搜索
      */
-    @NotBlank(message = "关键字不能为空")
     private String keywords;
 
+    /**
+     * 装载城市
+     */
+    private String loadCityName;
+
+    /**
+     * 卸载城市
+     */
+    private String unloadCityName;
+
     /**
      * 运单状态
      */

+ 135 - 54
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/WaybillManagementService.java

@@ -13,6 +13,7 @@ import com.sckw.excel.utils.DateUtil;
 import com.sckw.fleet.api.RemoteFleetService;
 import com.sckw.fleet.api.model.vo.RTruckVo;
 import com.sckw.mongo.model.SckwWaybillOrder;
+import com.sckw.mongo.model.TableTops;
 import com.sckw.system.api.RemoteSystemService;
 import com.sckw.system.api.model.dto.res.UserCacheResDto;
 import com.sckw.transport.dao.KwtWaybillOrderAddressMapper;
@@ -32,9 +33,12 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.PageRequest;
 import org.springframework.data.domain.Sort;
 import org.springframework.data.mongodb.core.MongoTemplate;
+import org.springframework.data.mongodb.core.aggregation.Aggregation;
+import org.springframework.data.mongodb.core.aggregation.AggregationResults;
 import org.springframework.data.mongodb.core.query.Criteria;
 import org.springframework.data.mongodb.core.query.Query;
 import org.springframework.stereotype.Service;
+import org.springframework.util.ObjectUtils;
 
 import java.util.*;
 import java.util.regex.Pattern;
@@ -164,19 +168,14 @@ public class WaybillManagementService {
 
     /**
      * 运单看板列表
+     * @param query
      * @return
+     * @throws Exception
      */
-    public HttpResult waybillIndex(WaybillOrderDTO query) {
+    public HttpResult waybillIndex(WaybillOrderDTO query) throws Exception {
         // mongo查询列数据,不足的数据单独关联表查询
         // 状态查询 status [2-8]
-        List<Integer> statuses = new ArrayList<>();
-        statuses.add(CarWaybillEnum.PENDING_VEHICLE.getCode());
-        statuses.add(CarWaybillEnum.EXIT_COMPLETED.getCode());
-        statuses.add(CarWaybillEnum.WAIT_LOADING.getCode());
-        statuses.add(CarWaybillEnum.COMPLETION_LOADING.getCode());
-        statuses.add(CarWaybillEnum.WAIT_UNLOADING.getCode());
-        statuses.add(CarWaybillEnum.COMPLETION_UNLOADING.getCode());
-        statuses.add(CarWaybillEnum.APPROVAL_PASS.getCode());
+        List<Integer> statuses = initWaybillIndexStatus();
         // 初始化各状态
         List<WaybillStatusVO> statusVOS = new ArrayList<>();
         statuses.forEach(e -> {
@@ -195,51 +194,7 @@ public class WaybillManagementService {
             statusVOS.add(waybillStatusVO);
         });
 
-        Criteria criteria = new Criteria();
-        criteria.and("entId").is(LoginUserHolder.getEntId());
-        criteria.and("delFlag").is(NumberConstant.ZERO);
-
-        List<Long> wOrderIds = StringUtils.splitStrToList(query.getIds(), ",", Long.class);
-        if (CollectionUtils.isNotEmpty(wOrderIds)) {
-            Criteria.where("wOrderId").in(wOrderIds);
-        }
-
-        if (StringUtils.isNotBlank(query.getStatus())) {
-            criteria.and("status").is(query.getStatus());
-        } else {
-            criteria.and("status").in(statuses);
-        }
-        // 装载时间
-        if (StringUtils.isNotBlank(query.getStartLoadTime()) && StringUtils.isNotEmpty(query.getEndLoadTime())) {
-            criteria.andOperator(Criteria.where("loadTime").gte(query.getStartLoadTime()), Criteria.where("loadTime")
-                    .lte(query.getEndLoadTime()));
-        }
-        if (StringUtils.isNotBlank(query.getStartLoadTime()) && StringUtils.isNotEmpty(query.getEndLoadTime())) {
-            criteria.andOperator(Criteria.where("loadTime").gte(query.getStartLoadTime()), Criteria.where("loadTime")
-                    .lte(query.getEndLoadTime()));
-        }
-        // 派车时间
-        if (StringUtils.isNotBlank(query.getStartSendCarTime()) && StringUtils.isNotEmpty(query.getEndSendCarTime())) {
-            criteria.andOperator(Criteria.where("sendCarTime").gte(query.getStartSendCarTime()), Criteria.where("sendCarTime")
-                    .lte(query.getEndSendCarTime()));
-        }
-        // 卸货时间
-        if (StringUtils.isNotBlank(query.getStartUnloadTime()) && StringUtils.isNotEmpty(query.getEndUnloadTime())) {
-            criteria.andOperator(Criteria.where("unloadTime").gte(query.getStartUnloadTime()), Criteria.where("unloadTime")
-                    .lte(query.getEndUnloadTime()));
-        }
-        // 多条件模糊查询
-        List<Criteria> orCriteria = new ArrayList<>();
-        if (StringUtils.isNotBlank(query.getKeywords())) {
-            Pattern pattern = Pattern.compile("^.*" + query.getKeywords() + ".*$", Pattern.CASE_INSENSITIVE);
-            orCriteria.add(Criteria.where("wOrderNo").regex(pattern));
-            orCriteria.add(Criteria.where("truckNo").regex(pattern));
-            orCriteria.add(Criteria.where("driverName").regex(pattern));
-            orCriteria.add(Criteria.where("firmName").regex(pattern));
-            orCriteria.add(Criteria.where("loadAddress").regex(pattern));
-            orCriteria.add(Criteria.where("unloadAddress").regex(pattern));
-            criteria.orOperator(orCriteria);
-        }
+        Criteria criteria = buildWaybillIndexQuery(query, statuses);
         Query queryFormat = new Query(criteria);
         long total = mongoTemplate.count(queryFormat, SckwWaybillOrder.class);
         queryFormat.with(PageRequest.of(query.getPage() - 1, query.getPageSize(),
@@ -300,4 +255,130 @@ public class WaybillManagementService {
         PageResult build = PageResult.build(query.getPage(), query.getPageSize(), total, orders);
         return HttpResult.ok(build);
     }
+
+    /**
+     *
+     * @return
+     */
+    public  List<Integer> initWaybillIndexStatus() {
+        List<Integer> statuses = new ArrayList<>();
+        statuses.add(CarWaybillEnum.PENDING_VEHICLE.getCode());
+        statuses.add(CarWaybillEnum.EXIT_COMPLETED.getCode());
+        statuses.add(CarWaybillEnum.WAIT_LOADING.getCode());
+        statuses.add(CarWaybillEnum.COMPLETION_LOADING.getCode());
+        statuses.add(CarWaybillEnum.WAIT_UNLOADING.getCode());
+        statuses.add(CarWaybillEnum.COMPLETION_UNLOADING.getCode());
+        statuses.add(CarWaybillEnum.APPROVAL_PASS.getCode());
+        return statuses;
+    }
+
+    /**
+     * 运单看板 查询条件构造
+     * @param query
+     * @param statuses
+     * @return
+     */
+    public Criteria buildWaybillIndexQuery(WaybillOrderDTO query,List<Integer> statuses) {
+        Criteria criteria = new Criteria();
+        criteria.and("entId").is(LoginUserHolder.getEntId());
+        criteria.and("delFlag").is(NumberConstant.ZERO);
+
+        List<Long> wOrderIds = StringUtils.splitStrToList(query.getIds(), ",", Long.class);
+        if (CollectionUtils.isNotEmpty(wOrderIds)) {
+            Criteria.where("wOrderId").in(wOrderIds);
+        }
+
+        if (StringUtils.isNotBlank(query.getStatus())) {
+            criteria.and("status").is(query.getStatus());
+        } else {
+            criteria.and("status").in(statuses);
+        }
+
+        // 装货城市
+        if (StringUtils.isNotBlank(query.getLoadCityName()) && StringUtils.isNotEmpty(query.getLoadCityName())) {
+            criteria.and("loadCityName").is(query.getLoadCityName());
+        }
+        // 卸货城市
+        if (StringUtils.isNotBlank(query.getUnloadCityName()) && StringUtils.isNotEmpty(query.getUnloadCityName())) {
+            criteria.and("unloadCityName").is(query.getUnloadCityName());
+        }
+        // 装载时间
+        if (StringUtils.isNotBlank(query.getStartLoadTime()) && StringUtils.isNotEmpty(query.getEndLoadTime())) {
+            criteria.andOperator(Criteria.where("loadTime").gte(query.getStartLoadTime()), Criteria.where("loadTime")
+                    .lte(query.getEndLoadTime()));
+        }
+        if (StringUtils.isNotBlank(query.getStartLoadTime()) && StringUtils.isNotEmpty(query.getEndLoadTime())) {
+            criteria.andOperator(Criteria.where("loadTime").gte(query.getStartLoadTime()), Criteria.where("loadTime")
+                    .lte(query.getEndLoadTime()));
+        }
+        // 派车时间
+        if (StringUtils.isNotBlank(query.getStartSendCarTime()) && StringUtils.isNotEmpty(query.getEndSendCarTime())) {
+            criteria.andOperator(Criteria.where("sendCarTime").gte(query.getStartSendCarTime()), Criteria.where("sendCarTime")
+                    .lte(query.getEndSendCarTime()));
+        }
+        // 卸货时间
+        if (StringUtils.isNotBlank(query.getStartUnloadTime()) && StringUtils.isNotEmpty(query.getEndUnloadTime())) {
+            criteria.andOperator(Criteria.where("unloadTime").gte(query.getStartUnloadTime()), Criteria.where("unloadTime")
+                    .lte(query.getEndUnloadTime()));
+        }
+        // 多条件模糊查询
+        List<Criteria> orCriteria = new ArrayList<>();
+        if (StringUtils.isNotBlank(query.getKeywords())) {
+            Pattern pattern = Pattern.compile("^.*" + query.getKeywords() + ".*$", Pattern.CASE_INSENSITIVE);
+            orCriteria.add(Criteria.where("wOrderNo").regex(pattern));
+            orCriteria.add(Criteria.where("truckNo").regex(pattern));
+            orCriteria.add(Criteria.where("driverName").regex(pattern));
+            orCriteria.add(Criteria.where("firmName").regex(pattern));
+            orCriteria.add(Criteria.where("loadAddress").regex(pattern));
+            orCriteria.add(Criteria.where("unloadAddress").regex(pattern));
+            criteria.orOperator(orCriteria);
+        }
+        return criteria;
+    }
+
+    /**
+     *  运单看板TOP
+     * @param query
+     * @return
+     */
+    public HttpResult waybillIndexStatistics(WaybillOrderDTO query){
+        List<Integer> statuses = initWaybillIndexStatus();
+        Criteria criteria = buildWaybillIndexQuery(query, statuses);
+        Aggregation aggregation = Aggregation.newAggregation(
+                Aggregation.match(criteria),
+                Aggregation.group("status").count().as("total"),
+                Aggregation.project("total").and("value").previousOperation()
+        );
+        AggregationResults<TableTops> outputTypeCount = mongoTemplate.aggregate(aggregation, SckwWaybillOrder.class, TableTops.class);
+        List<TableTops> results = outputTypeCount.getMappedResults();
+
+        Map<String, TableTops> listMap = new HashMap<>();
+        TableTops topTotal = new TableTops();
+        topTotal.setName("全部");
+        topTotal.setValue("");
+        topTotal.setTotal(0);
+        listMap.put("", topTotal);
+        statuses.forEach(e -> {
+            TableTops top = new TableTops();
+            top.setValue(String.valueOf(e));
+            top.setTotal(0);
+            switch (e){
+                case 2 -> top.setName("司机接单");
+                case 3 -> top.setName("出车");
+                case 4 -> top.setName("到装货地");
+                case 5 -> top.setName("装货");
+                case 6 -> top.setName("到卸货地");
+                case 7 -> top.setName("卸货");
+                case 8 -> top.setName("核单");
+            }
+            listMap.put(String.valueOf(e), top);
+        });
+        if(CollectionUtils.isNotEmpty(results)) {
+            for(TableTops result: results) {
+                listMap.get(result.getValue()).setTotal(result.getTotal());
+            }
+        }
+        listMap.get("").setTotal(listMap.values().parallelStream().mapToInt(e -> e.getTotal()).sum());
+        return HttpResult.ok(listMap.values());
+    }
 }

+ 1 - 1
sckw-modules/sckw-transport/src/main/resources/bootstrap-dev.yml

@@ -14,7 +14,7 @@ spring:
         # 配置文件格式
         file-extension: yaml
         # 命名空间
-        namespace: sckw-service-platform-dev
+        namespace: sckw_jc
         # 共享配置
         group: sckw-service-platform
         #可以读多个配置文件  需要在同一个命名空间下面可以是不同的组

+ 1 - 1
sckw-modules/sckw-transport/src/main/resources/bootstrap.yml

@@ -5,7 +5,7 @@ spring:
   application:
     name: sckw-transport
   profiles:
-    active: @profiles.active@
+    active: ${DEPLOY_MODE:dev}
   main:
     allow-bean-definition-overriding: true
     allow-circular-references: true