|
|
@@ -1,5 +1,7 @@
|
|
|
package com.sckw.transport.service;
|
|
|
|
|
|
+import com.alibaba.fastjson2.JSON;
|
|
|
+import com.alibaba.fastjson2.JSONObject;
|
|
|
import com.github.pagehelper.PageHelper;
|
|
|
import com.github.pagehelper.PageInfo;
|
|
|
import com.sckw.core.common.enums.enums.DictTypeEnum;
|
|
|
@@ -17,8 +19,10 @@ import com.sckw.excel.utils.DateUtil;
|
|
|
import com.sckw.fleet.api.RemoteFleetService;
|
|
|
import com.sckw.fleet.api.model.vo.RDriverVo;
|
|
|
import com.sckw.fleet.api.model.vo.RTruckVo;
|
|
|
+import com.sckw.mongo.model.SckwWaybillOrder;
|
|
|
import com.sckw.order.api.dubbo.TradeOrderInfoService;
|
|
|
import com.sckw.system.api.RemoteSystemService;
|
|
|
+import com.sckw.system.api.model.dto.res.EntCacheResDto;
|
|
|
import com.sckw.system.api.model.dto.res.SysDictResDto;
|
|
|
import com.sckw.system.api.model.dto.res.UserCacheResDto;
|
|
|
import com.sckw.transport.dao.*;
|
|
|
@@ -27,6 +31,8 @@ import com.sckw.transport.model.dto.*;
|
|
|
import com.sckw.transport.model.enuma.CarWaybillTableTopEnum;
|
|
|
import com.sckw.transport.model.vo.*;
|
|
|
import jakarta.annotation.Resource;
|
|
|
+import jakarta.servlet.http.HttpServletRequest;
|
|
|
+import jakarta.validation.Valid;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.apache.dubbo.config.annotation.DubboReference;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
@@ -34,6 +40,9 @@ 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;
|
|
|
+import org.springframework.web.bind.annotation.RequestBody;
|
|
|
+import org.springframework.web.bind.annotation.RequestParam;
|
|
|
+
|
|
|
import java.math.BigDecimal;
|
|
|
import java.math.RoundingMode;
|
|
|
import java.time.LocalDateTime;
|
|
|
@@ -102,6 +111,11 @@ public class KwtWaybillOrderV1Service {
|
|
|
|
|
|
//数据处理
|
|
|
List<TableTop> topList = new ArrayList<>();
|
|
|
+ TableTop top1 = new TableTop();
|
|
|
+ top1.setName("全部");
|
|
|
+ top1.setTotal(tableTops.stream().mapToInt(TableTop::getTotal).sum());
|
|
|
+ topList.add(top1);
|
|
|
+
|
|
|
for (CarWaybillTableTopEnum entity:CarWaybillTableTopEnum.values()) {
|
|
|
TableTop top = new TableTop();
|
|
|
top.setName(entity.getName());
|
|
|
@@ -157,8 +171,103 @@ public class KwtWaybillOrderV1Service {
|
|
|
return pageResult;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * @param driverId 司机ID
|
|
|
+ * @desc 统计司机任务数(待接单 / 出车 / 执行 / 完结)
|
|
|
+ * @author zk
|
|
|
+ * @date 2024/3/12
|
|
|
+ **/
|
|
|
+ public Map<String, Object> findStatisticsCountByDriver(Long driverId, HttpServletRequest request) {
|
|
|
+ //专场逻辑
|
|
|
+ String accessSpecial = request.getHeader("Access-Special");
|
|
|
+ List<Long> specialEntIds = remoteSystemService.queryEntIdsByCode(accessSpecial, EntTypeEnum.carrier());
|
|
|
+ return waybillOrderV1Dao.findStatisticsCountByDriver(driverId, specialEntIds);
|
|
|
+ }
|
|
|
|
|
|
+ /**
|
|
|
+ * @param params {driverId 司机ID, busStatus 1待接单/2出车/3执行/4完结, month月份}
|
|
|
+ * @desc 任务查询
|
|
|
+ * @author zk
|
|
|
+ * @date 2024/3/12
|
|
|
+ **/
|
|
|
+ public List<JSONObject> findWaybillOrderByDriver(Map<String, Object> params, HttpServletRequest request) {
|
|
|
+ /*参数处理*/
|
|
|
+ params.put("driverId", StringUtils.isBlank(params.get("driverId")) ? LoginUserHolder.getUserId() : params.get("driverId"));
|
|
|
+ //专场逻辑
|
|
|
+ String accessSpecial = request.getHeader("Access-Special");
|
|
|
+ List<Long> specialEntIds = remoteSystemService.queryEntIdsByCode(accessSpecial, EntTypeEnum.carrier());
|
|
|
+ params.put("specialEntIds", specialEntIds);
|
|
|
+ // 设置分页参数
|
|
|
+ PageHelper.startPage(PageResult.getPage(params), PageResult.getPageSize(params));
|
|
|
|
|
|
+ /*数据查询**/
|
|
|
+ List<KwtWaybillOrderV1> waybillOrders = waybillOrderV1Dao.findWaybillOrderByDriver(params);
|
|
|
+ //企业ID
|
|
|
+ List<Long> entIds = waybillOrders.stream().map(KwtWaybillOrderV1::getEntId).toList();
|
|
|
+ Map<Long, EntCacheResDto> ents = remoteSystemService.queryEntCacheMapByIds(entIds);
|
|
|
+
|
|
|
+ //数据处理
|
|
|
+ List<JSONObject> list = new ArrayList<>();
|
|
|
+ for (KwtWaybillOrderV1 waybillOrder:waybillOrders) {
|
|
|
+ //运单地址信息
|
|
|
+ List<KwtWaybillOrderAddress> addresses = waybillOrderAddressDao.findByAddresses(waybillOrder.getId(), null);
|
|
|
+ List<JSONObject> addressList = new ArrayList<>();
|
|
|
+ for (KwtWaybillOrderAddress address:addresses) {
|
|
|
+ //运单子单
|
|
|
+ KwtWaybillOrderSubtask subtask = waybillOrderSubtaskDao.selectById(address.getWSubtaskId());
|
|
|
+ //物流订单商品信息
|
|
|
+ KwtLogisticsOrderGoods goods = logisticsOrderGoodsDao.findByGoods(subtask != null ? subtask.getLOrderId() : null);
|
|
|
+ //榜单信息
|
|
|
+ KwtWaybillOrderTicket ticket = waybillOrderTicketDao.findWaybillOrderTicketV2(address.getId(), subtask.getUnit());
|
|
|
+ //数据组装
|
|
|
+ JSONObject addressJson = new JSONObject();
|
|
|
+ addressJson.put("addressName", address.getName());
|
|
|
+ addressJson.put("addressCityName", address.getCityName());
|
|
|
+ addressJson.put("addressDetail", address.getDetailAddress());
|
|
|
+ addressJson.put("planTime", DateUtils.format(address.getPlanTime(), DateUtils.FORMAT12));
|
|
|
+ addressJson.put("entrustAmount", address.getEntrustAmount());
|
|
|
+ addressJson.put("goodsName", goods != null ? goods.getGoodsName() : null);
|
|
|
+ addressJson.put("amount", ticket != null ? ticket.getAmount() : null);
|
|
|
+ addressJson.put("operateTime", ticket != null ? DateUtils.format(address.getPlanTime(), DateUtils.FORMAT11) : null);
|
|
|
+ addressJson.put("approvalStatus", ticket != null ? ticket.getStatus() : null);
|
|
|
+
|
|
|
+
|
|
|
+ addressList.add(addressJson);
|
|
|
+ }
|
|
|
+
|
|
|
+ JSONObject order = JSON.parseObject(JSON.toJSONString(waybillOrder));
|
|
|
+ order.put("statusName", CarWaybillEnum.getName(waybillOrder.getStatus()));
|
|
|
+ order.put("carrierFirmName", ents.get(waybillOrder.getEntId()) != null ? ents.get(waybillOrder.getEntId()).getFirmName() : null);
|
|
|
+ order.put("addressList", addressList);
|
|
|
+ list.add(order);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ /*数据配置
|
|
|
+ List<Long> entIds = new ArrayList<>();
|
|
|
+ List<String> dictKey = new ArrayList<>();
|
|
|
+ for (WaybillOrderDriverVo waybillOrder : waybillOrders) {
|
|
|
+ entIds.add(waybillOrder.getCarrierEntId());
|
|
|
+ dictKey.add(DictTypeEnum.UNIT_TYPE.getType() + Global.POUND + waybillOrder.getUnit());
|
|
|
+ }
|
|
|
+ //企业数据集
|
|
|
+ entIds = entIds.stream().distinct().collect(Collectors.toList());
|
|
|
+ Map<Long, EntCacheResDto> ents = remoteSystemService.queryEntCacheMapByIds(entIds);
|
|
|
+ //数据字典
|
|
|
+ Map<String, SysDictResDto> dicts = this.dict(dictKey);
|
|
|
+
|
|
|
+ //数据组装
|
|
|
+ for (WaybillOrderDriverVo waybillOrder : waybillOrders) {
|
|
|
+ EntCacheResDto ent = ents == null ? null : ents.get(waybillOrder.getCarrierEntId());
|
|
|
+ SysDictResDto unit = dicts == null ? null : dicts.get(DictTypeEnum.UNIT_TYPE.getType() + Global.POUND + waybillOrder.getUnit());
|
|
|
+ //String value = getDictValue(DictTypeEnum.UNIT_TYPE.getType(), waybillOrder.getUnit());
|
|
|
+ waybillOrder.setCarrierFirmName(ent != null ? ent.getFirmName() : null);
|
|
|
+ waybillOrder.setUnitName(unit != null ? unit.getLabel() : null);
|
|
|
+ }
|
|
|
+ */
|
|
|
+ return list;
|
|
|
+ }
|
|
|
|
|
|
|
|
|
|
|
|
@@ -1614,11 +1723,11 @@ public class KwtWaybillOrderV1Service {
|
|
|
trackData.put("wOrderId", track != null ? track.getWOrderId() : null);
|
|
|
trackData.put("wSubtaskId", track != null ? track.getWSubtaskId() : null);
|
|
|
trackData.put("wAddressId", track != null ? track.getWAddressId() : null);
|
|
|
- trackData.put("operateTime", track != null ? track.getOperateTime() : null);
|
|
|
+ trackData.put("operateTime", track != null ? DateUtils.format(track.getOperateTime(), DateUtils.FORMAT11) : null);
|
|
|
trackData.put("createTime", track != null ? track.getCreateTime() : null);
|
|
|
trackData.put("createByName", track != null ? usersMap.get(track.getCreateBy()) == null ? waybillOrder.getDriverName() : usersMap.get(track.getCreateBy()).getName() : null);
|
|
|
trackData.put("status", status);
|
|
|
- trackData.put("statusName", CarWaybillEnum.getName(status));
|
|
|
+ trackData.put("statusName", CarWaybillEnum.getAlias(status));
|
|
|
trackData.put("operateStatus", track != null);
|
|
|
trackList.add(trackData);
|
|
|
}
|
|
|
@@ -1643,7 +1752,7 @@ public class KwtWaybillOrderV1Service {
|
|
|
trackData.put("wOrderId", track != null ? track.getWOrderId() : null);
|
|
|
trackData.put("wSubtaskId", track != null ? track.getWSubtaskId() : null);
|
|
|
trackData.put("wAddressId", track != null ? track.getWAddressId() : null);
|
|
|
- trackData.put("operateTime", track != null ? track.getOperateTime() : null);
|
|
|
+ trackData.put("operateTime", track != null ? DateUtils.format(track.getOperateTime(), DateUtils.FORMAT11) : null);
|
|
|
trackData.put("createTime", track != null ? track.getCreateTime() : null);
|
|
|
trackData.put("createByName", track != null ? usersMap.get(track.getCreateBy()) == null ? waybillOrder.getDriverName() : usersMap.get(track.getCreateBy()).getName() : null);
|
|
|
trackData.put("status", status);
|
|
|
@@ -1652,6 +1761,9 @@ public class KwtWaybillOrderV1Service {
|
|
|
trackData.put("planTime", track != null ? address.getPlanTime() : null);
|
|
|
trackData.put("entrustAmount", track != null ? address.getEntrustAmount() : null);
|
|
|
trackData.put("goodsName", goods != null ? goods.getGoodsName() : null);
|
|
|
+ trackData.put("addressName", address.getName());
|
|
|
+ trackData.put("addressCityName", address.getCityName());
|
|
|
+ trackData.put("addressDetail", address.getDetailAddress());
|
|
|
trackList.add(trackData);
|
|
|
}
|
|
|
}
|
|
|
@@ -1667,11 +1779,11 @@ public class KwtWaybillOrderV1Service {
|
|
|
result.put("driverIdcard", waybillOrder.getDriverIdcard());
|
|
|
result.put("createTime", waybillOrder.getCreateTime());
|
|
|
result.put("trackList", trackList);
|
|
|
+ return HttpResult.ok(result);
|
|
|
+ }
|
|
|
|
|
|
|
|
|
|
|
|
- return HttpResult.ok(result);
|
|
|
- }
|
|
|
|
|
|
|
|
|
|
|
|
@@ -1679,9 +1791,105 @@ public class KwtWaybillOrderV1Service {
|
|
|
|
|
|
|
|
|
|
|
|
+ /**
|
|
|
+ * @param wOrderId 运单ID
|
|
|
+ * @desc 变更车辆/司机查询
|
|
|
+ * @author zk
|
|
|
+ * @date 2023/8/2
|
|
|
+ **/
|
|
|
+ public HttpResult changeWaybillOrder(@RequestParam("wOrderId") Long wOrderId) {
|
|
|
+ //车辆运单信息
|
|
|
+ KwtWaybillOrderV1 waybillOrder = waybillOrderV1Dao.selectById(wOrderId);
|
|
|
+ if (waybillOrder == null) {
|
|
|
+ return HttpResult.error("车辆运单不存在!");
|
|
|
+ }
|
|
|
+
|
|
|
+ Map<String, Object> result = new HashMap<>(NumberConstant.SIXTEEN);
|
|
|
+ result.put("id", wOrderId);
|
|
|
+ result.put("wOrderId", wOrderId);
|
|
|
+ result.put("wOrderNo", waybillOrder.getWOrderNo());
|
|
|
+ result.put("statusName", CarWaybillEnum.getName(waybillOrder.getStatus()));
|
|
|
+ result.put("truckNo", waybillOrder.getTruckNo());
|
|
|
+ result.put("truckId", waybillOrder.getTruckId());
|
|
|
+
|
|
|
+ result.put("driverId", waybillOrder.getDriverId());
|
|
|
+ result.put("driverPhone", waybillOrder.getDriverPhone());
|
|
|
+ result.put("driverIdcard", waybillOrder.getDriverIdcard());
|
|
|
+ result.put("driverName", waybillOrder.getDriverName());
|
|
|
+ RTruckVo truck = remoteFleetService.findTruck(waybillOrder.getTruckId());
|
|
|
+ result.put("trailerNo", truck != null ? truck.getTrailerNo() : null);
|
|
|
+ return HttpResult.ok(result);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @param params 参数
|
|
|
+ * @desc 变更司机
|
|
|
+ * @author zk
|
|
|
+ * @date 2023/8/2
|
|
|
+ **/
|
|
|
+ public HttpResult changeDriver(@RequestBody @Valid ChangeDriverDto params) {
|
|
|
+ /*数据校验*/
|
|
|
+ //车辆运单信息
|
|
|
+ KwtWaybillOrderV1 waybillOrder = waybillOrderV1Dao.selectById(params.getWOrderId());
|
|
|
+ if (waybillOrder == null) {
|
|
|
+ return HttpResult.error("车辆运单不存在!");
|
|
|
+ }
|
|
|
+ if (!CarWaybillEnum.changeDriver(waybillOrder.getStatus())) {
|
|
|
+ return HttpResult.error("车辆运单当前状态不能变更司机!");
|
|
|
+ }
|
|
|
|
|
|
+ /*更新车辆运单**/
|
|
|
+ changeWaybillOrder(params, null);
|
|
|
+ return HttpResult.ok("更换司机成功!");
|
|
|
+ }
|
|
|
|
|
|
+ /**
|
|
|
+ * @param params 参数
|
|
|
+ * @desc 变更车辆
|
|
|
+ * @author zk
|
|
|
+ * @date 2023/8/2
|
|
|
+ **/
|
|
|
+ public HttpResult changeTruck(@RequestBody @Valid ChangeTruckDto params) {
|
|
|
+ /*数据校验**/
|
|
|
+ SckwWaybillOrder wOrder = new SckwWaybillOrder();
|
|
|
+ //车辆运单信息
|
|
|
+ KwtWaybillOrderV1 waybillOrder = waybillOrderV1Dao.selectById(params.getWOrderId());
|
|
|
+ if (waybillOrder == null) {
|
|
|
+ return HttpResult.error("车辆运单不存在!");
|
|
|
+ }
|
|
|
+ if (!CarWaybillEnum.changeTruck(waybillOrder.getStatus())) {
|
|
|
+ return HttpResult.error("车辆运单当前状态不能变更车辆!");
|
|
|
+ }
|
|
|
|
|
|
+ /*更新车辆运单**/
|
|
|
+ changeWaybillOrder(null, params);
|
|
|
+ return HttpResult.ok("更换车辆成功!");
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @param driver 司机信息
|
|
|
+ * @param truck 车辆信息
|
|
|
+ * @desc 更新车辆运单信息
|
|
|
+ * @author zk
|
|
|
+ * @date 2023/8/2
|
|
|
+ **/
|
|
|
+ public void changeWaybillOrder(ChangeDriverDto driver, ChangeTruckDto truck) {
|
|
|
+ //车辆运单信息
|
|
|
+ KwtWaybillOrderV1 waybillOrder = new KwtWaybillOrderV1();
|
|
|
+ if (driver != null) {
|
|
|
+ waybillOrder.setId(driver.getWOrderId());
|
|
|
+ waybillOrder.setDriverId(driver.getDriverId());
|
|
|
+ waybillOrder.setDriverPhone(driver.getDriverPhone());
|
|
|
+ waybillOrder.setDriverName(driver.getDriverName());
|
|
|
+ waybillOrder.setDriverIdcard(driver.getDriverIdcard());
|
|
|
+ }
|
|
|
+ if (truck != null) {
|
|
|
+ waybillOrder.setId(truck.getWOrderId());
|
|
|
+ waybillOrder.setTruckId(truck.getTruckId());
|
|
|
+ waybillOrder.setTruckNo(truck.getTruckNo());
|
|
|
+ }
|
|
|
+ waybillOrderV1Dao.updateById(waybillOrder);
|
|
|
+ }
|
|
|
|
|
|
/**
|
|
|
* @param driverId 司机档案ID
|