|
@@ -58,6 +58,7 @@ import java.time.LocalDateTime;
|
|
|
import java.time.ZoneId;
|
|
import java.time.ZoneId;
|
|
|
import java.util.*;
|
|
import java.util.*;
|
|
|
import java.util.stream.Collectors;
|
|
import java.util.stream.Collectors;
|
|
|
|
|
+import java.util.stream.Stream;
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
* @author zk
|
|
* @author zk
|
|
@@ -714,6 +715,7 @@ public class KwtWaybillOrderV1Service {
|
|
|
KwtWaybillOrderTicket ticket = waybillOrderTicketDao.findWaybillOrderTicketV2(address.getId(), subtask.getUnit());
|
|
KwtWaybillOrderTicket ticket = waybillOrderTicketDao.findWaybillOrderTicketV2(address.getId(), subtask.getUnit());
|
|
|
//数据组装
|
|
//数据组装
|
|
|
JSONObject addressJson = new JSONObject();
|
|
JSONObject addressJson = new JSONObject();
|
|
|
|
|
+ addressJson.put("wAddressId", address.getId());
|
|
|
addressJson.put("addressType", address.getAddressType());
|
|
addressJson.put("addressType", address.getAddressType());
|
|
|
addressJson.put("addressName", address.getName());
|
|
addressJson.put("addressName", address.getName());
|
|
|
addressJson.put("addressCityName", address.getCityName());
|
|
addressJson.put("addressCityName", address.getCityName());
|
|
@@ -1828,6 +1830,113 @@ public class KwtWaybillOrderV1Service {
|
|
|
return HttpResult.ok();
|
|
return HttpResult.ok();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
|
+ * @param params {}
|
|
|
|
|
+ * @desc 修改单证-多个修改
|
|
|
|
|
+ * @author zk
|
|
|
|
|
+ * @date 2024/3/7
|
|
|
|
|
+ **/
|
|
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
|
|
+ public HttpResult editTicketV2(List<WaybillOrderEditTicketDto> params) {
|
|
|
|
|
+ /*1、校验*/
|
|
|
|
|
+ for (WaybillOrderEditTicketDto ticketDto:params) {
|
|
|
|
|
+ Long wTicketId = ticketDto.getWTicketId();
|
|
|
|
|
+ KwtWaybillOrderTicket ticket = waybillOrderTicketDao.selectById(wTicketId);
|
|
|
|
|
+ //榜单信息
|
|
|
|
|
+ if (ticket == null) {
|
|
|
|
|
+ return HttpResult.error("榜单信息不存在,请确认!");
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ //数据处理
|
|
|
|
|
+ for (WaybillOrderEditTicketDto ticketDto:params) {
|
|
|
|
|
+ Long wTicketId = ticketDto.getWTicketId();
|
|
|
|
|
+ KwtWaybillOrderTicket ticket = waybillOrderTicketDao.selectById(wTicketId);
|
|
|
|
|
+ Long wOrderId = ticket.getWOrderId();
|
|
|
|
|
+ //运单信息
|
|
|
|
|
+ KwtWaybillOrderV1 waybillOrder = waybillOrderV1Dao.selectById(wOrderId);
|
|
|
|
|
+ if (waybillOrder == null) {
|
|
|
|
|
+ return HttpResult.error("运单" + wOrderId + "不存在,请确认!");
|
|
|
|
|
+ }
|
|
|
|
|
+ //已出车、到达装货地、已装货、到达卸货地、已卸货的车辆运单才能卸货
|
|
|
|
|
+ if (!CarWaybillEnum.editTicket(waybillOrder.getStatus())) {
|
|
|
|
|
+ return HttpResult.error("运单" + waybillOrder.getWOrderNo() + "当前状态已不能修改榜单!");
|
|
|
|
|
+ }
|
|
|
|
|
+ //地址信息
|
|
|
|
|
+ KwtWaybillOrderAddress address = waybillOrderAddressDao.selectById(ticket.getWAddressId());
|
|
|
|
|
+ if (address == null) {
|
|
|
|
|
+ return HttpResult.error("运单该地址已不存在!");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /*2、更新装卸货榜单信息*/
|
|
|
|
|
+ //榜单信息
|
|
|
|
|
+ List<WaybillOrderTicketLoadingDto> loading = ticketDto.getLoading();
|
|
|
|
|
+ waybillOrderTicketService.editTicketV1(loading, ticket.getWAddressId(), ticketDto.getUrls(), ticketDto.getOperateTime());
|
|
|
|
|
+
|
|
|
|
|
+ /*3、更新车辆运单-子单*/
|
|
|
|
|
+ //运单子单信息
|
|
|
|
|
+ KwtWaybillOrderSubtask orderSubtask = waybillOrderSubtaskDao.selectById(ticket.getWSubtaskId());
|
|
|
|
|
+ //物流运单信息
|
|
|
|
|
+ KwtLogisticsOrder logisticsOrder = logisticsOrderDao.selectById(orderSubtask.getLOrderId());
|
|
|
|
|
+ //运单-子单装货榜单信息
|
|
|
|
|
+ List<KwtWaybillOrderTicket> loadTickets = waybillOrderTicketDao.findWaybillOrderTicketV1(wOrderId, ticket.getWSubtaskId(), AddressDefaultTypeEnum.SHIPMENT.getCode(), orderSubtask.getUnit());
|
|
|
|
|
+ //运单-子单卸货榜单信息
|
|
|
|
|
+ List<KwtWaybillOrderTicket> unloadTickets = waybillOrderTicketDao.findWaybillOrderTicketV1(wOrderId, ticket.getWSubtaskId(), AddressDefaultTypeEnum.TAKE.getCode(), orderSubtask.getUnit());
|
|
|
|
|
+ //装货-总量
|
|
|
|
|
+ BigDecimal loadAmount = loadTickets.stream().map(KwtWaybillOrderTicket::getAmount ).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
|
|
+ //卸货-总量
|
|
|
|
|
+ BigDecimal unloadAmount = unloadTickets.stream().map(KwtWaybillOrderTicket::getAmount ).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
|
|
+ orderSubtask.setLoadAmount(loadAmount);
|
|
|
|
|
+ orderSubtask.setUnloadAmount(unloadAmount);
|
|
|
|
|
+ orderSubtask.setDeficitAmount(orderSubtask.getLoadAmount().subtract(orderSubtask.getUnloadAmount()));
|
|
|
|
|
+ BigDecimal deficitPrice = deficitPrice(orderSubtask.getLoadAmount(), orderSubtask.getDeficitAmount(),
|
|
|
|
|
+ logisticsOrder.getLoss(), logisticsOrder.getLossUnit(), logisticsOrder.getGoodsPrice());
|
|
|
|
|
+ orderSubtask.setDeficitPrice(deficitPrice);
|
|
|
|
|
+ waybillOrderSubtaskDao.updateById(orderSubtask);
|
|
|
|
|
+
|
|
|
|
|
+ /*4、更新车辆运单子单状态*/
|
|
|
|
|
+ //运单子单信息
|
|
|
|
|
+ List<KwtWaybillOrderSubtask> subtasks = waybillOrderSubtaskDao.findByWOrderId(orderSubtask.getWOrderId());
|
|
|
|
|
+ for (KwtWaybillOrderSubtask subtask:subtasks) {
|
|
|
|
|
+ //运单子单状态不为驳回状态则不更新运单状态
|
|
|
|
|
+ if (!subtask.getStatus().equals(CarWaybillEnum.APPROVAL_NO_PASS.getCode())) {
|
|
|
|
|
+ return HttpResult.ok();
|
|
|
|
|
+ }
|
|
|
|
|
+ //榜单存在审核失败状态则不更新运单状态
|
|
|
|
|
+ List<KwtWaybillOrderTicket> tickets = waybillOrderTicketDao.findWaybillOrderTicket(null, subtask.getId(), null);
|
|
|
|
|
+ for (KwtWaybillOrderTicket ticket1:tickets) {
|
|
|
|
|
+ if (ticket1.getStatus() == Global.NUMERICAL_ONE) {
|
|
|
|
|
+ return HttpResult.ok();
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ //运单-子弹当前为驳回则状态更新为单证更新审核中
|
|
|
|
|
+ int status = orderSubtask.getStatus().equals(CarWaybillEnum.APPROVAL_NO_PASS.getCode()) ? CarWaybillEnum.APPROVAL_IN.getCode() : orderSubtask.getStatus();
|
|
|
|
|
+ subtask.setStatus(status);
|
|
|
|
|
+ waybillOrderSubtaskDao.updateById(subtask);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /*5、更新车辆运单-状态*/
|
|
|
|
|
+ //运单状态不为驳回状态则不更新运单状态
|
|
|
|
|
+ if (!waybillOrder.getStatus().equals(CarWaybillEnum.APPROVAL_NO_PASS.getCode())) {
|
|
|
|
|
+ return HttpResult.ok();
|
|
|
|
|
+ }
|
|
|
|
|
+ //运单子单存在非待审核和审核中则不更新
|
|
|
|
|
+ subtasks = waybillOrderSubtaskDao.findByWOrderId(orderSubtask.getWOrderId());
|
|
|
|
|
+ for (KwtWaybillOrderSubtask subtask:subtasks) {
|
|
|
|
|
+ if (!subtask.getStatus().equals(CarWaybillEnum.APPROVAL_IN.getCode())
|
|
|
|
|
+ && !subtask.getStatus().equals(CarWaybillEnum.APPROVAL_TREAT.getCode())) {
|
|
|
|
|
+ return HttpResult.ok();
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ waybillOrder.setStatus(CarWaybillEnum.APPROVAL_IN.getCode());
|
|
|
|
|
+ waybillOrderV1Dao.updateById(waybillOrder);
|
|
|
|
|
+
|
|
|
|
|
+ /*4.2、新增运单状态记录*/
|
|
|
|
|
+ setWaybillOrderTrack(waybillOrder.getId(), null, null, null, waybillOrder.getStatus(), null);
|
|
|
|
|
+ }
|
|
|
|
|
+ return HttpResult.ok();
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
/**
|
|
/**
|
|
|
* @param params {}
|
|
* @param params {}
|
|
|
* @desc 单证审核-驳回
|
|
* @desc 单证审核-驳回
|
|
@@ -2167,7 +2276,7 @@ public class KwtWaybillOrderV1Service {
|
|
|
|
|
|
|
|
//操作人
|
|
//操作人
|
|
|
List<KwtWaybillOrderTicket> tickets = waybillOrderTicketDao.findWaybillOrderTicket(wOrderId, null, null);
|
|
List<KwtWaybillOrderTicket> tickets = waybillOrderTicketDao.findWaybillOrderTicket(wOrderId, null, null);
|
|
|
- List<Long> userIds = tickets.stream().map(KwtWaybillOrderTicket::getCreateBy).toList();
|
|
|
|
|
|
|
+ List<Long> userIds = tickets.stream().flatMap(item -> Stream.of(item.getCreateBy(), item.getUpdateBy())).toList();
|
|
|
List<UserCacheResDto> users = remoteSystemService.queryUserCacheByIds(userIds);
|
|
List<UserCacheResDto> users = remoteSystemService.queryUserCacheByIds(userIds);
|
|
|
Map<Long, UserCacheResDto> usersMap = new HashMap<>(Global.NUMERICAL_SIXTEEN);
|
|
Map<Long, UserCacheResDto> usersMap = new HashMap<>(Global.NUMERICAL_SIXTEEN);
|
|
|
users.forEach(e -> usersMap.put(e.getId(), e));
|
|
users.forEach(e -> usersMap.put(e.getId(), e));
|
|
@@ -2175,6 +2284,9 @@ public class KwtWaybillOrderV1Service {
|
|
|
Map<String, Map<String, String>> dict = remoteSystemService.queryDictByType(List.of(DictTypeEnum.UNIT_TYPE.getType()));
|
|
Map<String, Map<String, String>> dict = remoteSystemService.queryDictByType(List.of(DictTypeEnum.UNIT_TYPE.getType()));
|
|
|
Map<String, String> unitMap = CollectionUtils.isNotEmpty(dict) ? dict.get(DictTypeEnum.UNIT_TYPE.getType()) : new HashMap<>(NumberConstant.SIXTEEN);
|
|
Map<String, String> unitMap = CollectionUtils.isNotEmpty(dict) ? dict.get(DictTypeEnum.UNIT_TYPE.getType()) : new HashMap<>(NumberConstant.SIXTEEN);
|
|
|
|
|
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
/*数据处理*/
|
|
/*数据处理*/
|
|
|
List<Map<String, Object>> addressList = new ArrayList<>();
|
|
List<Map<String, Object>> addressList = new ArrayList<>();
|
|
|
List<Integer> typeList = new ArrayList<>(){{add(AddressDefaultTypeEnum.SHIPMENT.getCode()); add(AddressDefaultTypeEnum.TAKE.getCode());}};
|
|
List<Integer> typeList = new ArrayList<>(){{add(AddressDefaultTypeEnum.SHIPMENT.getCode()); add(AddressDefaultTypeEnum.TAKE.getCode());}};
|
|
@@ -2201,6 +2313,10 @@ public class KwtWaybillOrderV1Service {
|
|
|
trackData.put("operateTime", ticket != null ? DateUtil.dateTimeFormatter(ticket.getOperateTime()) : null);
|
|
trackData.put("operateTime", ticket != null ? DateUtil.dateTimeFormatter(ticket.getOperateTime()) : null);
|
|
|
trackData.put("createTime", ticket != null ? DateUtil.dateTimeFormatter(ticket.getCreateTime()) : null);
|
|
trackData.put("createTime", ticket != null ? DateUtil.dateTimeFormatter(ticket.getCreateTime()) : null);
|
|
|
trackData.put("approvalStatus", ticket != null ? ticket.getStatus() : null);
|
|
trackData.put("approvalStatus", ticket != null ? ticket.getStatus() : null);
|
|
|
|
|
+ trackData.put("approvalStatusName", ticket != null ? ApproveStatusEnum.getName(ticket.getStatus()) : null);
|
|
|
|
|
+ trackData.put("approvalByName", ticket != null && ticket.getStatus() != Global.NUMERICAL_ZERO ? usersMap.get(ticket.getUpdateBy()) != null ? usersMap.get(ticket.getUpdateBy()).getName() : null : null);
|
|
|
|
|
+ trackData.put("approvalContent", ticket != null && ticket.getStatus() != Global.NUMERICAL_ZERO ? ticket.getRemark() : null);
|
|
|
|
|
+ trackData.put("approvalTime", ticket != null && ticket.getStatus() != Global.NUMERICAL_ZERO ? ticket.getUpdateTime() : null);
|
|
|
trackData.put("createByName", ticket != null ? usersMap.get(ticket.getCreateBy()) == null ? waybillOrder.getDriverName() : usersMap.get(ticket.getCreateBy()).getName() : null);
|
|
trackData.put("createByName", ticket != null ? usersMap.get(ticket.getCreateBy()) == null ? waybillOrder.getDriverName() : usersMap.get(ticket.getCreateBy()).getName() : null);
|
|
|
trackData.put("addressName", address.getName());
|
|
trackData.put("addressName", address.getName());
|
|
|
trackData.put("addressCityName", address.getCityName());
|
|
trackData.put("addressCityName", address.getCityName());
|