Sfoglia il codice sorgente

update 增加app运单列表接口

chenlin 2 anni fa
parent
commit
9c5ee0e5fb

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

@@ -200,6 +200,7 @@ public class KwTransportService {
                 statuses.add(CarWaybillEnum.REJECT_ORDER.getCode().longValue());
                 statuses.add(CarWaybillEnum.REFUSE_TRAFFIC.getCode().longValue());
                 statuses.add(CarWaybillEnum.REVOKED.getCode().longValue());
+                statuses.add(CarWaybillEnum.APPROVAL_NO_PASS.getCode().longValue());
                 criteria.and("status").in(statuses);
             } else if (!query.getStatus().equals("all")) {
                 criteria.and("status").is(Integer.valueOf(query.getStatus()));

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

@@ -0,0 +1,61 @@
+package com.sckw.transport.controller.enterpriseApp;
+
+import com.sckw.core.web.constant.HttpStatus;
+import com.sckw.core.web.response.HttpResult;
+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.web.bind.annotation.*;
+
+/**
+ * @author jc
+ * @description 企业端app运单controller
+ * @date 2023-08-21 16:08:41
+ */
+@Slf4j
+@RestController
+@RequestMapping("/appKwtWayBill")
+public class AppWayBillController {
+
+    @Autowired
+    WaybillManagementService waybillManagementService;
+
+    /**
+     * APP 运单统计分类 - [运输中|已完成]
+     * @param keyword
+     * @return
+     */
+    @Valid
+    @RequestMapping(name = "APP运单统计分类", value = "/waybillStatistic", method = RequestMethod.GET)
+    public HttpResult waybillStatistic(@RequestParam("keyword") String keyword) {
+        try {
+            return waybillManagementService.waybillDataStatisticApp(keyword);
+        } catch (Exception e) {
+            log.error("APP运单统计分类:订单id {},error {} ", keyword, e.getMessage(), e);
+            return HttpResult.error(HttpStatus.GLOBAL_EXCEPTION_CODE, e.getMessage());
+        }
+    }
+
+    /**
+     * APP 运单列表 - [运输中|已完成]
+     * @param keyword 搜索关键字
+     * @param status 分类状态
+     * @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
+            ) {
+        try {
+            return waybillManagementService.waybillDataApp(status, page, pageSize, keyword);
+        } catch (Exception e) {
+            log.error("APP运单列表:订单id {},error {} ", keyword, e.getMessage(), e);
+            return HttpResult.error(HttpStatus.GLOBAL_EXCEPTION_CODE, e.getMessage());
+        }
+    }
+}

+ 8 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/dao/KwtWaybillOrderMapper.java

@@ -123,4 +123,12 @@ public interface KwtWaybillOrderMapper extends BaseMapper<KwtWaybillOrder> {
      * @return
      */
     List<OrderCarDTO> selectWaybillOrderCarListNotPage(@Param("id") String id);
+
+    /**
+     * 按状态统计运单
+     * @param entId 企业ID
+     * @param statuses 查询状态
+     * @return
+     */
+    Long selectWaybillOrderCountByStatus(@Param("entId") Long entId, @Param("statuses") List<Integer> statuses, @Param("keyword") String keyword);
 }

+ 7 - 2
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/WayBillDetailDTO.java

@@ -1,8 +1,11 @@
 package com.sckw.transport.model.dto;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import lombok.Data;
 
+import java.util.Date;
+
 /**
  * @author JC
  * @version 1.0
@@ -88,12 +91,14 @@ public class WayBillDetailDTO{
     /**
      * 计划开始时间
      */
-    private String startTime;
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private Date startTime;
 
     /**
      * 计划结束时间
      */
-    private String endTime;
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private Date endTime;
 
     /**
      * 创建人

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

@@ -0,0 +1,153 @@
+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 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;
+
+}

+ 5 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/WaybillTrackVO.java

@@ -24,6 +24,11 @@ public class WaybillTrackVO {
      * 状态
      */
     private String status;
+
+    /**
+     * 状态文本
+     */
+    private String statusLabel;
     /**
      * 操作员名
      */

+ 153 - 2
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/WaybillManagementService.java

@@ -37,6 +37,7 @@ import org.springframework.data.mongodb.core.query.Query;
 import org.springframework.stereotype.Service;
 import org.springframework.util.ObjectUtils;
 
+import java.math.BigDecimal;
 import java.util.*;
 import java.util.regex.Pattern;
 
@@ -107,8 +108,8 @@ public class WaybillManagementService {
             wayBillDetailDTO.setEntrustAmount(String.valueOf(info.getEntrustAmount()));
             wayBillDetailDTO.setType(String.valueOf(info.getType()));
             wayBillDetailDTO.setTypeLabel(info.getType().equals(NumberConstant.ONE) ? "趟次" : "循环");
-            wayBillDetailDTO.setStartTime(DateUtil.getDateTime(info.getStartTime()));
-            wayBillDetailDTO.setEndTime(DateUtil.getDateTime(info.getEndTime()));
+            wayBillDetailDTO.setStartTime(info.getStartTime());
+            wayBillDetailDTO.setEndTime(info.getEndTime());
             wayBillDetailDTO.setCreateBy(info.getCreateByName());
             wayBillDetailDTO.setGoodsName(info.getGoodsName());
             wayBillDetailDTO.setLoadDetailAddress(info.getLoadCityName().concat(info.getLoadDetailAddress()));
@@ -189,6 +190,7 @@ public class WaybillManagementService {
                 waybillTrackVO.setId(String.valueOf(kwtWaybillOrderTrack.getId()))
                         .setRemark(kwtWaybillOrderTrack.getRemark())
                         .setStatus(String.valueOf(kwtWaybillOrderTrack.getStatus()))
+                        .setStatusLabel(CarWaybillEnum.getName(kwtWaybillOrderTrack.getStatus()))
                         .setCreateBy(usersMap.get(kwtWaybillOrderTrack.getCreateBy()) == null
                                 ? null : usersMap.get(kwtWaybillOrderTrack.getCreateBy()).getName())
                         .setCreateByPhone(usersMap.get(kwtWaybillOrderTrack.getCreateBy()) == null
@@ -495,4 +497,153 @@ public class WaybillManagementService {
         listMap.get("all").setTotal(listMap.values().parallelStream().mapToInt(e -> e.getTotal()).sum());
         return HttpResult.ok(listMap.values());
     }
+
+    /**
+     * app 运单分类统计数据 [运输中|已完成]
+     * @param keyword
+     * @return
+     */
+    public HttpResult waybillDataStatisticApp(String keyword){
+        Long entId = LoginUserHolder.getEntId();
+        // 运输途中
+        List<Integer> onWayStates = getWallBillStatues("onway");
+        Long onWayCount = kwtWaybillOrderMapper.selectWaybillOrderCountByStatus(entId, onWayStates, keyword);
+        // 已完成
+        List<Integer> finishStates = getWallBillStatues("finish");
+        Long finishCount = kwtWaybillOrderMapper.selectWaybillOrderCountByStatus(entId, finishStates, keyword);
+        Map<String, Long> statistic = new HashMap<>();
+        statistic.put("onway", onWayCount);
+        statistic.put("finish", finishCount);
+        return HttpResult.ok(statistic);
+    }
+
+    /**
+     * app 运单分类统计数据 [运输中|已完成]
+     * @param keyword
+     * @return
+     */
+    public HttpResult waybillDataApp(String status, Integer page, Integer pageSize, String keyword){
+        List<Integer> _statuses = getWallBillStatues(status);
+        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);
+            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));
+            criteria.orOperator(orCriteria);
+        }
+        Query queryFormat = new Query(criteria);
+        // in查询
+        if (CollectionUtils.isNotEmpty(_statuses)) {
+            queryFormat.addCriteria(Criteria.where("status").in(_statuses));
+        }
+        // 总记录数
+        long total = mongoTemplate.count(queryFormat, SckwWaybillOrder.class);
+        queryFormat.with(PageRequest.of(page - 1, pageSize,
+                Sort.by(Sort.Order.desc("createTime"))));
+        // 执行查询
+        List<SckwWaybillOrder> list = mongoTemplate.find(queryFormat, SckwWaybillOrder.class);
+        List<CarWaybillAppVo> returnList = new ArrayList<>();
+        if (CollectionUtils.isNotEmpty(list)) {
+            packageWayBillReturnList(list, returnList);
+        }
+        PageResult build = PageResult.build(page, pageSize, total, returnList);
+        return HttpResult.ok(build);
+    }
+
+    /**
+     * 运单处理运单查询结果
+     *
+     * @param list
+     * @param returnList
+     */
+    private void packageWayBillReturnList(List<SckwWaybillOrder> list, List<CarWaybillAppVo> returnList) {
+        for (SckwWaybillOrder waybillOrder : list) {
+            CarWaybillAppVo vo = new CarWaybillAppVo();
+            vo.setWOrderNo(waybillOrder.getWOrderNo() == null ?
+                    null : String.valueOf(waybillOrder.getWOrderNo()));
+            vo.setWOrderId(waybillOrder.getWOrderId() == null ?
+                    String.valueOf(waybillOrder.get_id()) : String.valueOf(waybillOrder.getWOrderId()));
+            vo.setTruckNo(waybillOrder.getTruckNo());
+            vo.setDriverName(waybillOrder.getDriverName() == null ?
+                    null : String.valueOf(waybillOrder.getDriverName()));
+            vo.setType(String.valueOf(waybillOrder.getType()));
+            String typeString = "";
+            if (waybillOrder.getType().equals(NumberConstant.ONE)) {
+                typeString = "趟次";
+            }
+            if (waybillOrder.getType().equals(NumberConstant.TWO)) {
+                typeString = "循环";
+            }
+            vo.setTypeLabel(typeString);
+            vo.setStatus(waybillOrder.getStatus() == null ?
+                        null : String.valueOf(waybillOrder.getStatus()));
+            vo.setSendCarTime(waybillOrder.getCreateTime() == null ?
+                    null : DateUtil.getDateTime(waybillOrder.getCreateTime()));
+            vo.setStartTime(waybillOrder.getStartTime() == null ?
+                    null : waybillOrder.getStartTime());
+            vo.setEndTime(waybillOrder.getEndTime() == null ?
+                    null : waybillOrder.getEndTime());
+            vo.setEntrustAmount(String.valueOf(waybillOrder.getEntrustAmount()));
+            vo.setLoadName(waybillOrder.getLoadName() == null ?
+                    null : waybillOrder.getLoadName());
+            vo.setLoadAddress((waybillOrder.getLoadCityName() == null ? "" : waybillOrder.getLoadCityName())
+                    .concat(waybillOrder.getLoadDetailAddress() == null ? "" : waybillOrder.getLoadDetailAddress()));
+            vo.setUnloadName(waybillOrder.getUnloadName() == null ?
+                    null : waybillOrder.getUnloadName());
+            vo.setUnloadAddress((waybillOrder.getUnloadCityName() == null ? "" : waybillOrder.getUnloadCityName())
+                    .concat(waybillOrder.getUnloadDetailAddress() == null ? "" : waybillOrder.getUnloadDetailAddress()));
+            vo.setLoadAmount(waybillOrder.getLoadAmount() == null ?
+                    null : String.valueOf(waybillOrder.getLoadAmount()));
+            vo.setUnloadAmount(waybillOrder.getUnloadAmount() == null ?
+                    null : String.valueOf(waybillOrder.getUnloadAmount()));
+            vo.setLoadDateTime(waybillOrder.getLoadTime() == null ?
+                    null : DateUtil.getDateTime(waybillOrder.getLoadTime()));
+            vo.setUnloadDateTime(waybillOrder.getUnloadTime() == null ?
+                    null : DateUtil.getDateTime(waybillOrder.getUnloadTime()));
+            vo.setCreateTime(waybillOrder.getCreateTime() == null ?
+                    null : DateUtil.getDateTime(waybillOrder.getCreateTime()));
+            vo.setUpdateTime(waybillOrder.getUpdateTime() == null ?
+                    null : DateUtil.getDateTime(waybillOrder.getUpdateTime()));
+            vo.setDeficitAmount(waybillOrder.getDeficitAmount() == null ?
+                    null : String.valueOf(waybillOrder.getDeficitAmount()));
+            BigDecimal deficitLoss = waybillOrder.getLoss() == null ? BigDecimal.valueOf(0) : waybillOrder.getLoss();
+            BigDecimal deficitAmount = waybillOrder.getDeficitAmount() == null ? BigDecimal.valueOf(0) : waybillOrder.getDeficitAmount();
+            BigDecimal deficitRealAmount = BigDecimal.valueOf(0);
+            if(deficitAmount.compareTo(BigDecimal.valueOf(0)) > 0) {
+                deficitRealAmount = deficitLoss.subtract(deficitAmount);
+            }
+            vo.setDeficitRealAmount(deficitRealAmount.toString());
+            vo.setGoodsPriceUnit(waybillOrder.getGoodsPriceUnit() == null ?
+                    null : String.valueOf(waybillOrder.getGoodsPriceUnit()));
+            returnList.add(vo);
+        }
+    }
+
+    /**
+     * 获取 [运输中|已完成] 状态列表
+     * @param status
+     * @return
+     */
+    public List<Integer> getWallBillStatues(String status) {
+        List<Integer> _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());
+        }
+        if(status.equals("finish")) {
+            _list.add(CarWaybillEnum.COMPLETION_UNLOADING.getCode());
+            _list.add(CarWaybillEnum.APPROVAL_PASS.getCode());
+        }
+        return _list;
+    }
 }

+ 20 - 0
sckw-modules/sckw-transport/src/main/resources/mapper/KwtWaybillOrderMapper.xml

@@ -424,4 +424,24 @@
           and b.del_flag = '0'
           and b.t_order_id = #{id,jdbcType=VARCHAR}
     </select>
+    <select id="selectWaybillOrderCountByStatus">
+        SELECT COUNT(id)
+        FROM kwt_waybill_order
+        WHERE ent_id = #{entId}
+        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},'%')
+            )
+        </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>