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

update app增加运单列表吨量统计

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

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

@@ -2,10 +2,13 @@ package com.sckw.transport.controller.enterpriseApp;
 
 import com.sckw.core.web.constant.HttpStatus;
 import com.sckw.core.web.response.HttpResult;
+import com.sckw.transport.model.dto.WaybillListAppDTO;
+import com.sckw.transport.model.dto.WaybillOrderDTO;
 import com.sckw.transport.service.WaybillManagementService;
 import jakarta.validation.Valid;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
 /**
@@ -39,22 +42,32 @@ public class AppWayBillController {
 
     /**
      * APP 运单列表 - [运输中|已完成]
-     * @param keyword 搜索关键字
-     * @param status 分类状态
+     * @param waybillOrderDTO
      * @return
      */
     @Valid
-    @RequestMapping(name = "APP运单列表", value = "/waybillData", method = RequestMethod.GET)
-    public HttpResult waybillData(
-            @RequestParam("keyword") String keyword,
-            @RequestParam("status") String status,
-            @RequestParam("page") Integer page,
-            @RequestParam("pageSize") Integer pageSize
-            ) {
+    @RequestMapping(name = "APP运单列表", value = "/waybillData", method = RequestMethod.POST)
+    public HttpResult waybillData(@Validated @RequestBody WaybillListAppDTO waybillOrderDTO) {
         try {
-            return waybillManagementService.waybillDataApp(status, page, pageSize, keyword);
+            return waybillManagementService.waybillDataApp(waybillOrderDTO);
         } catch (Exception e) {
-            log.error("APP运单列表:订单id {},error {} ", keyword, e.getMessage(), e);
+            log.error("APP运单列表:订单id {},error {} ", waybillOrderDTO, e.getMessage(), e);
+            return HttpResult.error(HttpStatus.GLOBAL_EXCEPTION_CODE, e.getMessage());
+        }
+    }
+
+    /**
+     * APP 运单列表吨量统计 - [运输中|已完成]
+     * @param waybillOrderDTO
+     * @return
+     */
+    @Valid
+    @RequestMapping(name = "APP运单吨量统计", value = "/waybillAmountStatistic", method = RequestMethod.POST)
+    public HttpResult waybillAmountStatistic(@Validated @RequestBody WaybillListAppDTO waybillOrderDTO) {
+        try {
+            return waybillManagementService.waybillAmountStatistic(waybillOrderDTO);
+        } catch (Exception e) {
+            log.error("APP运单列表:订单id {},error {} ", waybillOrderDTO, e.getMessage(), e);
             return HttpResult.error(HttpStatus.GLOBAL_EXCEPTION_CODE, e.getMessage());
         }
     }

+ 14 - 1
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/dao/KwtWaybillOrderMapper.java

@@ -130,8 +130,21 @@ public interface KwtWaybillOrderMapper extends BaseMapper<KwtWaybillOrder> {
      * @param statuses 查询状态
      * @return
      */
-    Long selectWaybillOrderCountByStatus(@Param("entId") Long entId, @Param("statuses") List<Integer> statuses, @Param("keyword") String keyword);
+    Long selectWaybillOrderCountByStatus(@Param("entId") Long entId, @Param("statuses") List<Long> statuses, @Param("keyword") String keyword);
 
     Map<String,Object> selectOrderByOrderId(@Param("orderId") Long orderId, @Param("type") Integer type, @Param("statusList") List<Long> statusList);
 
+    /**
+     * 按装卸量统计运单
+     * @param entId 企业ID
+     * @param statuses 查询状态
+     * @return
+     */
+    Map<String,Object> selectWaybillOrderAmountByStatus(
+            @Param("entId") Long entId,
+            @Param("statuses") List<Long> statuses,
+            @Param("keyword") String keyword,
+            @Param("startDate") String startDate,
+            @Param("endDate") String endDate
+    );
 }

+ 57 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/WaybillListAppDTO.java

@@ -0,0 +1,57 @@
+package com.sckw.transport.model.dto;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.sckw.core.model.page.PageRequest;
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+import lombok.experimental.Accessors;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * @author lfdc
+ * @description 车辆运单
+ * @date 2023-06-27 11:06:08
+ */
+@Data
+@Accessors(chain = true)
+public class WaybillListAppDTO {
+
+    /**
+     * 搜索关键字
+     */
+    private String keyword;
+
+    /**
+     * 当前页码
+     */
+    private int page;
+
+    /**
+     * 每页数量
+     */
+    private int pageSize;
+
+    /**
+     * 状态
+     */
+    @NotNull(message = "分类状态不能为空")
+    private String status;
+
+    /**
+     * 查询开始时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private Date startDate;
+
+    /**
+     * 查询结束时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private Date endDate;
+
+}

+ 0 - 157
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/CarWaybillAppVo.java

@@ -1,157 +0,0 @@
-package com.sckw.transport.model.vo;
-
-import com.fasterxml.jackson.annotation.JsonFormat;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import lombok.Data;
-import lombok.experimental.Accessors;
-
-import java.io.Serial;
-import java.io.Serializable;
-import java.util.Date;
-
-/**
- * @author lfdc
- * @description 车辆运单
- * @date 2023-06-27 11:06:08
- */
-@Data
-@Accessors(chain = true)
-public class CarWaybillAppVo implements Serializable {
-
-    @Serial
-    private static final long serialVersionUID = 4526063761808958350L;
-    /**
-     * 物流订单id
-     */
-    @JsonProperty(value="wOrderId")
-    private String wOrderId;
-
-    /**
-     * 物流订单号
-     */
-    @JsonProperty(value="wOrderNo")
-    private String wOrderNo;
-
-    /**
-     * 车辆牌照
-     */
-    private String truckNo;
-
-    /**
-     * 司机
-     */
-    private String driverName;
-
-    /**
-     * 运单类型数字
-     */
-    private String type;
-
-    /**
-     * 运单类型字符
-     */
-    private String typeLabel;
-
-    /**
-     * 运单状态
-     */
-    private String  status;
-    /**
-     * 运单状态字符
-     */
-    private String  statusLabel;
-
-    /**
-     * 承运车队
-     */
-    private String firmName;
-
-
-    /**
-     * 派车时间
-     */
-    private String sendCarTime;
-
-    /**
-     * 计划开始时间
-     */
-    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
-    private Date startTime;
-
-    /**
-     * 计划结束时间
-     */
-    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
-    private Date endTime;
-
-    /**
-     * 派单量/吨
-     */
-    private String entrustAmount;
-
-    /**
-     * 装货地点名称
-     */
-    private String loadName;
-
-    /**
-     * 装货地点
-     */
-    private String loadAddress;
-
-    /**
-     * 卸货地点点名称
-     */
-    private String unloadName;
-
-    /**
-     * 卸货地点
-     */
-    private String unloadAddress;
-
-    /**
-     * 实装量/吨
-     */
-    private String loadAmount;
-
-    /**
-     * 实卸量/吨
-     */
-    private String unloadAmount;
-
-    /**
-     * 装货时间
-     */
-    private String loadDateTime;
-
-    /**
-     * 卸货时间
-     */
-    private String unloadDateTime;
-
-    /**
-     * 亏吨重量
-     */
-    private String deficitAmount;
-
-    /**
-     * 扣亏损值(合理损耗-(实装-实卸))-单位
-     */
-    private String goodsPriceUnit;
-
-    /**
-     * 扣亏量(合理损耗-(实装-实卸))-单位
-     */
-    private String deficitRealAmount;
-
-    /**
-     * 创建时间
-     */
-    private String createTime;
-
-    /**
-     * 更新时间
-     */
-    private String updateTime;
-
-}

+ 41 - 21
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/WaybillManagementService.java

@@ -22,6 +22,7 @@ import com.sckw.transport.dao.*;
 import com.sckw.transport.model.KwtLogisticsOrder;
 import com.sckw.transport.model.KwtWaybillOrderTrack;
 import com.sckw.transport.model.dto.WayBillDetailDTO;
+import com.sckw.transport.model.dto.WaybillListAppDTO;
 import com.sckw.transport.model.dto.WaybillOrderDTO;
 import com.sckw.transport.model.vo.*;
 import lombok.extern.slf4j.Slf4j;
@@ -518,7 +519,7 @@ public class WaybillManagementService {
         _onway.put("name", "运输中");
         _onway.put("value", "onway");
         _onway.put("total", "0");
-        List<Integer> onWayStates = getWallBillStatues("onway");
+        List<Long> onWayStates = getWallBillStatues("onway");
         Long onWayCount = kwtWaybillOrderMapper.selectWaybillOrderCountByStatus(entId, onWayStates, keyword);
         _onway.put("total", onWayCount.toString());
         // 已完成
@@ -526,7 +527,7 @@ public class WaybillManagementService {
         _finish.put("name", "已完成");
         _finish.put("value", "finish");
         _finish.put("total", "0");
-        List<Integer> finishStates = getWallBillStatues("finish");
+        List<Long> finishStates = getWallBillStatues("finish");
         Long finishCount = kwtWaybillOrderMapper.selectWaybillOrderCountByStatus(entId, finishStates, keyword);
         _onway.put("total", finishCount.toString());
         List<Map<String, String>> _list = new ArrayList<>();
@@ -536,19 +537,20 @@ public class WaybillManagementService {
     }
 
     /**
-     * app 运单分类统计数据 [运输中|已完成]
-     * @param keyword
+     * app 运单列表 [运输中|已完成]
+     * @param query
      * @return
      */
-    public HttpResult waybillDataApp(String status, Integer page, Integer pageSize, String keyword){
-        List<Integer> _statuses = getWallBillStatues(status);
+    public HttpResult waybillDataApp(WaybillListAppDTO query){
+        List<Integer> processStatuses = initWaybillIndexStatus();
+        List<Long> _statuses = getWallBillStatues(query.getStatus());
         Criteria criteria = new Criteria();
         criteria.and("entId").is(LoginUserHolder.getEntId());
         criteria.and("delFlag").is(NumberConstant.ZERO);
         // 多条件模糊查询
         List<Criteria> orCriteria = new ArrayList<>();
-        if (StringUtils.isNotBlank(keyword)) {
-            Pattern pattern = Pattern.compile("^.*" + keyword + ".*$", Pattern.CASE_INSENSITIVE);
+        if (StringUtils.isNotBlank(query.getKeyword())) {
+            Pattern pattern = Pattern.compile("^.*" + query.getKeyword() + ".*$", Pattern.CASE_INSENSITIVE);
             orCriteria.add(Criteria.where("wOrderNo").regex(pattern));
             orCriteria.add(Criteria.where("truckNo").regex(pattern));
             orCriteria.add(Criteria.where("driverName").regex(pattern));
@@ -562,14 +564,14 @@ public class WaybillManagementService {
         }
         // 总记录数
         long total = mongoTemplate.count(queryFormat, SckwWaybillOrder.class);
-        queryFormat.with(PageRequest.of(page - 1, pageSize,
+        queryFormat.with(PageRequest.of(query.getPage() - 1, query.getPageSize(),
                 Sort.by(Sort.Order.desc("createTime"))));
         // 执行查询
         List<SckwWaybillOrder> list = mongoTemplate.find(queryFormat, SckwWaybillOrder.class);
         List<WaybillBoardListVO> returnList = new ArrayList<>();
         if (CollectionUtils.isNotEmpty(list)) {
             List<WaybillStatusVO> statusVOS = new ArrayList();
-            _statuses.forEach(e -> {
+            processStatuses.forEach(e -> {
                 WaybillStatusVO waybillStatusVO = new WaybillStatusVO();
                 waybillStatusVO.setStatus(false);
                 waybillStatusVO.setCode(e);
@@ -578,28 +580,46 @@ public class WaybillManagementService {
             });
             packageWaybillIndexResult(list, statusVOS, returnList);
         }
-        PageResult build = PageResult.build(page, pageSize, total, returnList);
+        PageResult build = PageResult.build(query.getPage(), query.getPageSize(), total, returnList);
         return HttpResult.ok(build);
     }
 
+
+    /**
+     * app 运单分类吨量统计数据 [运输中|已完成]
+     * @param query
+     * @return
+     */
+    public HttpResult waybillAmountStatistic(WaybillListAppDTO query){
+        List<Long> _statuses = getWallBillStatues(query.getStatus());
+        Map<String,Object> amount = kwtWaybillOrderMapper.selectWaybillOrderAmountByStatus(
+                LoginUserHolder.getEntId(),
+                _statuses,
+                query.getKeyword(),
+                query.getStartDate() == null ? null : query.getStartDate().toString().concat(" 00:00:00"),
+                query.getEndDate() == null ? null : query.getEndDate().toString().concat(" 23:59:59")
+        );
+        return HttpResult.ok(amount);
+    }
+
     /**
      * 获取 [运输中|已完成] 状态列表
      * @param status
      * @return
      */
-    public List<Integer> getWallBillStatues(String status) {
-        List<Integer> _list = new ArrayList<>();
+    public List<Long> getWallBillStatues(String status) {
+        List<Long> _list = new ArrayList<>();
         if(status.equals("onway")) {
-            _list.add(CarWaybillEnum.PENDING_ORDER.getCode());
-            _list.add(CarWaybillEnum.PENDING_VEHICLE.getCode());
-            _list.add(CarWaybillEnum.EXIT_COMPLETED.getCode());
-            _list.add(CarWaybillEnum.WAIT_LOADING.getCode());
-            _list.add(CarWaybillEnum.COMPLETION_LOADING.getCode());
-            _list.add(CarWaybillEnum.WAIT_UNLOADING.getCode());
+            _list.add(CarWaybillEnum.PENDING_ORDER.getCode().longValue());
+            _list.add(CarWaybillEnum.PENDING_VEHICLE.getCode().longValue());
+            _list.add(CarWaybillEnum.EXIT_COMPLETED.getCode().longValue());
+            _list.add(CarWaybillEnum.WAIT_LOADING.getCode().longValue());
+            _list.add(CarWaybillEnum.COMPLETION_LOADING.getCode().longValue());
+            _list.add(CarWaybillEnum.WAIT_UNLOADING.getCode().longValue());
         }
         if(status.equals("finish")) {
-            _list.add(CarWaybillEnum.COMPLETION_UNLOADING.getCode());
-            _list.add(CarWaybillEnum.APPROVAL_PASS.getCode());
+            _list.add(CarWaybillEnum.COMPLETION_UNLOADING.getCode().longValue());
+            _list.add(CarWaybillEnum.APPROVAL_PASS.getCode().longValue());
         }
         return _list;
     }

+ 34 - 5
sckw-modules/sckw-transport/src/main/resources/mapper/KwtWaybillOrderMapper.xml

@@ -431,14 +431,14 @@
         AND del_flag = 0
         <if test="keyword != null and keyword != ''">
             AND (
-                `w_order_no` LIKE concat('%',#{keyword},'%')
-                OR `truck_no` LIKE concat('%',#{keyword},'%')
-                OR `driver_name` LIKE concat('%',#{keyword},'%')
-                OR `driver_phone` LIKE concat('%',#{keyword},'%')
+                w_order_no LIKE concat('%',#{keyword},'%')
+                OR truck_no LIKE concat('%',#{keyword},'%')
+                OR driver_name LIKE concat('%',#{keyword},'%')
+                OR driver_phone LIKE concat('%',#{keyword},'%')
             )
         </if>
         <if test="statuses != null and statuses.size() > 0">
-            AND `status` IN
+            AND status IN
             <foreach collection="statuses" item="item" open="(" close=")" separator=",">
                 #{item}
             </foreach>
@@ -459,4 +459,33 @@
             </foreach>
         </if>
     </select>
+    <select id="selectWaybillOrderAmountByStatus" resultType="java.util.Map">
+        SELECT
+        COUNT(id) total,
+        SUM(load_amount) loadAmount,
+        SUM(unload_amount) unloadAmount,
+        SUM(load_amount - unload_amount) lossAmount,
+        SUM( IF(load_amount - unload_amount - deficit_amount > 0, load_amount - unload_amount - deficit_amount , 0) ) deficitRealAmount
+        FROM
+        kwt_waybill_order
+        WHERE ent_id = #{entId}
+        AND del_flag = 0
+        <if test="startDate != null and startDate != '' and endDate != null and endDate != ''">
+            AND create_time BETWEEN #{startDate} AND #{endDate}
+        </if>
+        <if test="keyword != null and keyword != ''">
+            AND (
+            w_order_no LIKE concat('%',#{keyword},'%')
+            OR truck_no LIKE concat('%',#{keyword},'%')
+            OR driver_name LIKE concat('%',#{keyword},'%')
+            OR driver_phone LIKE concat('%',#{keyword},'%')
+            )
+        </if>
+        <if test="statuses != null and statuses.size() > 0">
+            AND status IN
+            <foreach collection="statuses" item="item" open="(" close=")" separator=",">
+                #{item}
+            </foreach>
+        </if>
+    </select>
 </mapper>