Эх сурвалжийг харах

Merge remote-tracking branch 'origin/dev' into dev

czh 2 жил өмнө
parent
commit
04a0088ab1

+ 2 - 1
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/vo/SettlementVo.java

@@ -1,6 +1,7 @@
 package com.sckw.payment.model.vo;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.sckw.payment.model.dto.SpliceUrl;
 import lombok.Getter;
 import lombok.Setter;
 
@@ -12,7 +13,7 @@ import java.util.Date;
  */
 @Getter
 @Setter
-public class SettlementVo {
+public class SettlementVo implements SpliceUrl {
 
     /**
      * 主键

+ 1 - 0
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/KwpSettlementTradeService.java

@@ -273,6 +273,7 @@ public class KwpSettlementTradeService {
                 settlementVoList = kwpSettlementWalletService.queryList(id, SettlementOrderTypeEnum.TRADE.getStatus(), payType);
             }
         }
+        settlementVoList.forEach(SpliceUrl::appendPrefix);
         return new SettlementDetailDto<>(settlementTradeDto, settlementVoList);
     }
 

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

@@ -24,12 +24,12 @@ public class AppWayBillController {
     WaybillManagementService waybillManagementService;
 
     /**
-     * APP 运单统计分类 - [运输中|已完成]
+     * APP 运单统计分类 - [运输中|已完成] - 数据库
      * @param keyword   查询关键字
      * @return  统计响应结果
      */
     @Valid
-    @RequestMapping(name = "APP运单统计分类", value = "/waybillStatistic", method = RequestMethod.GET)
+    @RequestMapping(name = "APP运单统计分类", value = "/waybillStatistica", method = RequestMethod.GET)
     public HttpResult waybillStatistic(@RequestParam("keyword") String keyword,
                                        @RequestParam("startDate") String startDate,
                                        @RequestParam("endDate") String endDate) {
@@ -41,6 +41,24 @@ public class AppWayBillController {
         }
     }
 
+    /**
+     * APP 运单统计分类 - [运输中|已完成] - mongo查询
+     * @param keyword   查询关键字
+     * @return  统计响应结果
+     */
+    @Valid
+    @RequestMapping(name = "APP运单统计分类", value = "/waybillStatistic", method = RequestMethod.GET)
+    public HttpResult waybillStatisticCount(@RequestParam("keyword") String keyword,
+                                       @RequestParam("startDate") String startDate,
+                                       @RequestParam("endDate") String endDate) {
+        try {
+            return waybillManagementService.waybillStatisticCountApp(keyword, startDate, endDate);
+        } catch (Exception e) {
+            log.error("APP运单统计分类:订单id {},error {} ", keyword, e.getMessage(), e);
+            return HttpResult.error(HttpStatus.GLOBAL_EXCEPTION_CODE, e.getMessage());
+        }
+    }
+
     /**
      * APP 运单列表 - [运输中|已完成]
      * @param waybillOrderDTO   运单查询请求dto
@@ -63,7 +81,7 @@ public class AppWayBillController {
      * @return  运单重量响应结果
      */
     @Valid
-    @RequestMapping(name = "APP运单吨量统计", value = "/waybillAmountStatistic", method = RequestMethod.POST)
+    @RequestMapping(name = "APP运单吨量统计", value = "/waybillAmountStatistic2", method = RequestMethod.POST)
     public HttpResult waybillAmountStatistic(@Validated @RequestBody WaybillListAppDTO waybillOrderDTO) {
         try {
             return waybillManagementService.waybillAmountStatistic(waybillOrderDTO);
@@ -73,6 +91,22 @@ public class AppWayBillController {
         }
     }
 
+    /**
+     * APP 运单列表吨量统计 - [运输中|已完成] - mongo
+     * @param waybillOrderDTO   统计运单数据查询
+     * @return  运单重量响应结果
+     */
+    @Valid
+    @RequestMapping(name = "APP运单吨量统计", value = "/waybillAmountStatistic", method = RequestMethod.POST)
+    public HttpResult waybillAmountStatisticCount(@Validated @RequestBody WaybillListAppDTO waybillOrderDTO) {
+        try {
+            return waybillManagementService.waybillAmountStatisticCount(waybillOrderDTO);
+        } catch (Exception e) {
+            log.error("APP运单列表:订单id {},error {} ", waybillOrderDTO, e.getMessage(), e);
+            return HttpResult.error(HttpStatus.GLOBAL_EXCEPTION_CODE, e.getMessage());
+        }
+    }
+
     /**
      * APP 物流订单-运单列表
      * @param waybillOrderDTO   物流订单查询

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

@@ -141,6 +141,14 @@ public interface KwtLogisticsOrderMapper extends BaseMapper<KwtLogisticsOrder> {
      */
     List<DriverListVo> selectDriverListById(@Param("driverParam") DriverParam driverParam);
 
+    /**
+     * 通过物流订单查看单据下运力司机数据【趟次】
+     *
+     * @param driverParam
+     * @return
+     */
+    List<DriverListVo> selectDriverCountById(@Param("driverParam") DriverParam driverParam);
+
     /**
      * @param ids
      * @return

+ 16 - 2
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/AcceptCarriageOrderService.java

@@ -1167,9 +1167,15 @@ public class AcceptCarriageOrderService {
                     truck = fleetService.findTruck(collect);
                 }
             }
+            //只展示待接单数据统计
+            List<DriverListVo> truckCount = logisticsOrderMapper.selectDriverCountById(driverParam);
+            Map<String, Integer> truckMap = new HashMap<>(Global.NUMERICAL_SIXTEEN);
+            truckCount.forEach(entity -> { truckMap.put(entity.getTruckNo(), entity.getCount());});
+
             Map<String, String> dictData = commonService.getDictData(DictTypeEnum.TRUCK_TYPE.getType());
             for (DriverListVo driverListVo : list) {
                 driverListVo.setStatusLabel(CarWaybillEnum.getName(driverListVo.getStatus()));
+                driverListVo.setCount(truckMap.get(driverListVo.getTruckNo()));
                 if (!ObjectUtils.isEmpty(truck)) {
                     if (truck.get(driverListVo.getTruckNo()) != null) {
                         driverListVo.setTransportStatus(truck.get(driverListVo.getTruckNo()) == null ? null : truck.get(driverListVo.getTruckNo()).getBusinessStatus());
@@ -1897,11 +1903,19 @@ public class AcceptCarriageOrderService {
         orderDetailVO.setLoadAddress(loadOrderAddress.getName());
         orderDetailVO.setLoadContacts(loadOrderAddress.getContacts());
         orderDetailVO.setLoadPhone(loadOrderAddress.getPhone());
-        orderDetailVO.setLoadAddressDetail(loadOrderAddress.getCityName() + loadOrderAddress.getDetailAddress());
+        if (loadOrderAddress.getDetailAddress().contains(loadOrderAddress.getCityName())) {
+            orderDetailVO.setLoadAddressDetail(loadOrderAddress.getDetailAddress());
+        } else {
+            orderDetailVO.setLoadAddressDetail(loadOrderAddress.getCityName() + loadOrderAddress.getDetailAddress());
+        }
         orderDetailVO.setUnloadAddress(unloadOrderAddress.getName());
         orderDetailVO.setUnloadContacts(unloadOrderAddress.getContacts());
         orderDetailVO.setUnloadPhone(unloadOrderAddress.getPhone());
-        orderDetailVO.setUnloadAddressDetail(unloadOrderAddress.getCityName() + unloadOrderAddress.getDetailAddress());
+        if (unloadOrderAddress.getDetailAddress().contains(unloadOrderAddress.getCityName())) {
+            orderDetailVO.setUnloadAddressDetail(unloadOrderAddress.getDetailAddress());
+        } else {
+            orderDetailVO.setUnloadAddressDetail(unloadOrderAddress.getCityName() + unloadOrderAddress.getDetailAddress());
+        }
         orderDetailVO.setSettlementCycle(logisticsOrder.getSettlementCycle() == null ? null : String.valueOf(logisticsOrder.getSettlementCycle()));
         orderDetailVO.setBillingMode(logisticsOrder.getBillingMode());
         orderDetailVO.setScheduleStartTime(logisticsOrder.getStartTime() == null ? null : logisticsOrder.getStartTime());

+ 17 - 3
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtWaybillOrderService.java

@@ -44,6 +44,7 @@ import jakarta.validation.Valid;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.dubbo.config.annotation.DubboReference;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.cloud.stream.function.StreamBridge;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -95,6 +96,10 @@ public class KwtWaybillOrderService {
     private RemoteFleetService remoteFleetService;
     @DubboReference(version = "1.0.0", group = "design", check = false)
     private TradeOrderInfoService tradeOrderInfoService;
+    @Value("${message.waybill.refuseSendCar.app}")
+    private String refuseSendCarAppUrl;
+    @Value("${message.waybill.refuseSendCar.pc}")
+    private String refuseSendCarPcUrl;
 
     /**
      * @param driverId 司机ID
@@ -1365,7 +1370,10 @@ public class KwtWaybillOrderService {
             msg.setRequestId(UUIDUtils.get32UUID());
             msg.setMessageEnum(MessageEnum.WAYBILL_REFUSE_SENDCAR_TRIP);
             msg.setParams(msgParams);
-            msg.setMsgUrl(null);
+            msg.setMsgUrls(new HashMap<>(Global.NUMERICAL_SIXTEEN) {{
+                put("app", refuseSendCarAppUrl);
+                put("pc", refuseSendCarPcUrl);
+            }});
             msg.setUserInfos(users);
             msg.setCreateBy(LoginUserHolder.getUserId());
             streamBridge.send("sckw-message", JSON.toJSONString(msg));
@@ -1408,7 +1416,10 @@ public class KwtWaybillOrderService {
             msg.setRequestId(UUIDUtils.get32UUID());
             msg.setMessageEnum(MessageEnum.WAYBILL_REFUSE_SENDCAR_CIRCULATE);
             msg.setParams(msgParams);
-            msg.setMsgUrl(null);
+            msg.setMsgUrls(new HashMap<>(Global.NUMERICAL_SIXTEEN) {{
+                put("app", refuseSendCarAppUrl);
+                put("pc", refuseSendCarPcUrl);
+            }});
             msg.setUserInfos(users);
             msg.setCreateBy(LoginUserHolder.getUserId());
             streamBridge.send("sckw-message", JSON.toJSONString(msg));
@@ -1531,7 +1542,10 @@ public class KwtWaybillOrderService {
         msg.setRequestId(UUIDUtils.get32UUID());
         msg.setMessageEnum(MessageEnum.WAYBIL_CONFIRM_DEPARTURE);
         msg.setParams(msgParams);
-        msg.setMsgUrl(null);
+        msg.setMsgUrls(new HashMap<>(Global.NUMERICAL_SIXTEEN) {{
+            put("app", refuseSendCarAppUrl);
+            put("pc", refuseSendCarPcUrl);
+        }});
         msg.setUserInfos(users);
         msg.setCreateBy(LoginUserHolder.getUserId());
         streamBridge.send("sckw-message", JSON.toJSONString(msg));

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

@@ -24,6 +24,7 @@ import com.sckw.transport.model.dto.*;
 import com.sckw.transport.model.vo.*;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.dubbo.config.annotation.DubboReference;
+import org.apache.poi.hpsf.Decimal;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.PageRequest;
 import org.springframework.data.domain.Sort;
@@ -317,9 +318,9 @@ public class WaybillManagementService {
                     if (statusVO.getCode().equals(kwtWaybillOrderTrack.getStatus())) {
                         statusVO.setStatus(true);
                         statusVO.setId(kwtWaybillOrderTrack.getId());
-                        statusVO.setCreateTime(DateUtil.getDateTime(kwtWaybillOrderTrack.getCreateTime()));
+                        statusVO.setCreateTime(DateUtil.getDateTime(kwtWaybillOrderTrack.getCreateTime()).substring(0, 15));
                         statusVO.setOperateTime(kwtWaybillOrderTrack.getOperateTime() == null
-                                ? null : DateUtil.getDateTime(kwtWaybillOrderTrack.getOperateTime()));
+                                ? null : DateUtil.getDateTime(kwtWaybillOrderTrack.getOperateTime()).substring(0, 15));
                         statusVO.setCreateByName(usersMap.get(kwtWaybillOrderTrack.getCreateBy()) == null
                                 ? null : usersMap.get(kwtWaybillOrderTrack.getCreateBy()).getName());
                         break;
@@ -769,6 +770,86 @@ public class WaybillManagementService {
         return HttpResult.ok(_list);
     }
 
+    /**
+     * app 运单分类统计数据 [运输中|已完成] - mongo查询
+     *
+     * @param keyword
+     * @return
+     */
+    public HttpResult waybillStatisticCountApp(String keyword, String startDate, String endDate) {
+        Long entId = LoginUserHolder.getEntId();
+        if (StringUtils.isNotBlank(startDate)) {
+            startDate = StringTimeUtil.fillStart(startDate);
+        }
+        if (StringUtils.isNotBlank(endDate)) {
+            endDate = StringTimeUtil.fillEnd(endDate);
+        }
+
+        Criteria criteria = new Criteria();
+        criteria.and("entId").is(entId);
+        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("driverPhone").regex(pattern));
+            orCriteria.add(Criteria.where("firmName").regex(pattern));
+            criteria.orOperator(orCriteria);
+        }
+        // in查询
+        List<Long> onWayStates = getWallBillStatues("onway");
+        List<Long> finishStates = getWallBillStatues("finish");
+        List<Long> statuses = new ArrayList<Long>();
+        statuses.addAll(onWayStates);
+        statuses.addAll(finishStates);
+        if (CollectionUtils.isNotEmpty(statuses)) {
+            criteria.and("status").in(statuses);
+        }
+        // 查询时间段
+        if (!StringUtils.isEmpty(startDate) && !StringUtils.isEmpty(endDate)) {
+            criteria.and("updateTime")
+                    .gte(DateUtil.strDateTimeToDateTime(startDate))
+                    .lte(DateUtil.strDateTimeToDateTime(endDate));
+        }
+        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, String> _onway = new HashMap<>(Global.NUMERICAL_SIXTEEN);
+        _onway.put("name", "运输中");
+        _onway.put("value", "onway");
+        _onway.put("total", "0");
+
+        Map<String, String> _finish = new HashMap<>(Global.NUMERICAL_SIXTEEN);
+        _finish.put("name", "已完成");
+        _finish.put("value", "finish");
+        _finish.put("total", "0");
+        long wayCount = 0L;
+        long finishCount = 0L;
+        if (CollectionUtils.isNotEmpty(results)) {
+            for (TableTops tableTops:results) {
+                if (onWayStates.contains(Long.parseLong(tableTops.getValue()))){
+                    wayCount += tableTops.getTotal().longValue();
+                }
+                if (finishStates.contains(Long.parseLong(tableTops.getValue()))){
+                    finishCount += tableTops.getTotal().longValue();
+                }
+            }
+        }
+        _onway.put("total", String.valueOf(wayCount));
+        _finish.put("total", String.valueOf(finishCount));
+        List<Map<String, String>> _list = new ArrayList<>();
+        _list.add(_onway);
+        _list.add(_finish);
+        return HttpResult.ok(_list);
+    }
+
     /**
      * app 运单列表 [运输中|已完成]
      *
@@ -929,6 +1010,75 @@ public class WaybillManagementService {
         return HttpResult.ok(amount);
     }
 
+    /**
+     * app 运单分类吨量统计数据 [运输中|已完成] - mongo
+     *
+     * @param query
+     * @return
+     */
+    public HttpResult waybillAmountStatisticCount(WaybillListAppDTO query) {
+        Long entId = LoginUserHolder.getEntId();
+        Criteria criteria = new Criteria();
+        criteria.and("entId").is(entId);
+        criteria.and("delFlag").is(NumberConstant.ZERO);
+        // 多条件模糊查询
+        List<Criteria> orCriteria = new ArrayList<>();
+        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));
+            orCriteria.add(Criteria.where("driverPhone").regex(pattern));
+            orCriteria.add(Criteria.where("firmName").regex(pattern));
+            criteria.orOperator(orCriteria);
+        }
+        // in查询
+        List<Long> finishStates = getWallBillStatues("finish");
+        if (CollectionUtils.isNotEmpty(finishStates)) {
+            criteria.and("status").in(finishStates);
+        }
+        // 查询时间段
+        if (!StringUtils.isEmpty(query.getStartDate()) && !StringUtils.isEmpty(query.getEndDate())) {
+            criteria.and("updateTime")
+                    .gte(DateUtil.strDateTimeToDateTime(StringTimeUtil.fillStart(query.getStartDate())))
+                    .lte(DateUtil.strDateTimeToDateTime(StringTimeUtil.fillStart(query.getEndDate())));
+        }
+        Query queryFormat = new Query(criteria);
+        List<SckwWaybillOrder> list = mongoTemplate.find(queryFormat, SckwWaybillOrder.class);
+        int total = 0;
+        BigDecimal loadAmount = new BigDecimal(Global.AMOUNT);
+        BigDecimal unloadAmount = new BigDecimal(Global.AMOUNT);
+        BigDecimal lossAmount = new BigDecimal(Global.AMOUNT);
+        BigDecimal deficitRealAmount = new BigDecimal(Global.AMOUNT);
+        if (CollectionUtils.isNotEmpty(list)) {
+            for (SckwWaybillOrder wOrder:list) {
+                total += 1;
+                loadAmount = loadAmount.add(wOrder.getLoadAmount() == null ? new BigDecimal(Global.AMOUNT) : wOrder.getLoadAmount());
+                unloadAmount = unloadAmount.add(wOrder.getUnloadAmount() == null ? new BigDecimal(Global.AMOUNT) : wOrder.getUnloadAmount());
+                lossAmount = lossAmount.add(wOrder.getDeficitAmount() == null ? new BigDecimal(Global.AMOUNT) : wOrder.getDeficitAmount());
+                BigDecimal _deficitRealAmount = commonService.deficitLossAmount(
+                        wOrder.getLoadAmount(),
+                        wOrder.getDeficitAmount(),
+                        wOrder.getLoss(),
+                        wOrder.getLossUnit()
+                );
+                deficitRealAmount.add(_deficitRealAmount);
+            }
+        }
+        Map<String, String> amount = new HashMap<>(Global.NUMERICAL_SIXTEEN);
+        // 总计条数
+        amount.put("total", String.valueOf(total));
+        // 总计装货量
+        amount.put("loadAmount",  String.valueOf(loadAmount));
+        // 总计卸货量
+        amount.put("unloadAmount",  String.valueOf(unloadAmount));
+        // 总计货损量
+        amount.put("lossAmount",  String.valueOf(lossAmount));
+        // 总计扣亏量
+        amount.put("deficitRealAmount",  String.valueOf(deficitRealAmount));
+        return HttpResult.ok(amount);
+    }
+
     /**
      * 获取 [运输中|已完成] 状态列表
      *

+ 32 - 1
sckw-modules/sckw-transport/src/main/resources/mapper/KwtLogisticsOrderMapper.xml

@@ -652,7 +652,8 @@
     </select>
 
     <select id="selectDriverListById" resultType="com.sckw.transport.model.vo.DriverListVo">
-        SELECT COUNT( b.truck_no ) AS count,
+        SELECT
+        count(IF(b.status in (7, 8, 13), 1, NULL)) AS count,
         a.id AS lOrderId,
         a.l_order_no AS lOrderNo,
         b.driver_id AS driverId,
@@ -708,6 +709,36 @@
         </where>
     </select>
 
+    <select id="selectDriverCountById" resultType="com.sckw.transport.model.vo.DriverListVo">
+        SELECT
+        count(1) AS count,
+        b.truck_no AS truckNo
+        FROM
+        kwt_waybill_order b
+        <where>
+            b.del_flag = 0
+            AND b.type = '1'
+            AND b.status in (7, 8, 13)
+            <if test="driverParam.lOrderId != null and driverParam.lOrderId != ''">
+                AND b.l_order_id =#{driverParam.lOrderId}
+            </if>
+            <if test="driverParam.driverName != null and driverParam.driverName != '' or ( driverParam.driverPhone != null and driverParam.driverPhone != '' ) or ( driverParam.truckNo != null and driverParam.truckNo != '' ) ">
+                <!--                and (-->
+                <if test="driverParam.driverName != null and driverParam.driverName != ''">
+                    and b.driver_name like concat('%',#{driverParam.driverName},'%')
+                </if>
+                <if test="driverParam.driverPhone != null and driverParam.driverPhone != ''">
+                    and b.driver_phone like concat('%',#{driverParam.driverPhone},'%')
+                </if>
+                <if test="driverParam.truckNo != null and driverParam.truckNo != ''">
+                    and b.truck_no like concat('%',#{driverParam.truckNo},'%')
+                </if>
+            </if>
+            GROUP BY
+            b.truck_no
+        </where>
+    </select>
+
     <select id="selectLogisticOrderList" resultType="com.sckw.transport.api.model.dto.LogisticsOrderDTO">
         SELECT
         DISTINCT a.id AS lOrderId,