Browse Source

Merge remote-tracking branch 'origin/pre-production'

master
zhenghaoyu 5 months ago
parent
commit
5a4ec338a4
  1. 5
      blade-service-api/logpm-aftersales-api/src/main/java/com/logpm/aftersales/entity/AftersalesAbnormalPackageEntity.java
  2. 18
      blade-service-api/logpm-aftersales-api/src/main/java/com/logpm/aftersales/entity/AftersalesWorkOrderEntity.java
  3. 72
      blade-service-api/logpm-aftersales-api/src/main/java/com/logpm/aftersales/vo/AftersalesNewWorkOrderVO.java
  4. 4
      blade-service-api/logpm-basicdata-api/src/main/java/com/logpm/basicdata/feign/IBasicdataWarehouseClient.java
  5. 1
      blade-service-api/logpm-trunkline-api/src/main/java/com/logpm/trunkline/vo/CarsStartNumVO.java
  6. 10
      blade-service/logpm-aftersales/src/main/java/com/logpm/aftersales/controller/AftersalesWorkOrderController.java
  7. 2
      blade-service/logpm-aftersales/src/main/java/com/logpm/aftersales/mapper/AftersalesWorkOrderMapper.java
  8. 6
      blade-service/logpm-aftersales/src/main/java/com/logpm/aftersales/mapper/AftersalesWorkOrderMapper.xml
  9. 5
      blade-service/logpm-aftersales/src/main/java/com/logpm/aftersales/service/impl/AftersalesWorkOrderServiceImpl.java
  10. 10
      blade-service/logpm-basicdata/src/main/java/com/logpm/basicdata/feign/BasicdataWarehouseClient.java
  11. 2
      blade-service/logpm-basicdata/src/main/java/com/logpm/basicdata/service/IBasicdataWarehouseService.java
  12. 14
      blade-service/logpm-basicdata/src/main/java/com/logpm/basicdata/service/impl/BasicdataWarehouseServiceImpl.java
  13. 61
      blade-service/logpm-statisticsdata/src/main/java/com/logpm/statistics/listener/mq/WaybillCheckListener.java
  14. 2
      blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/controller/CarsLoadController.java
  15. 7
      blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/controller/OpenOrderController.java
  16. 3
      blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/mapper/TrunklineCarsOrderMapper.xml
  17. 6
      blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/service/ITrunklineCarsLoadingLogService.java
  18. 8
      blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/service/impl/OpenOrderServiceImpl.java
  19. 286
      blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/service/impl/TrunklineCarsLoadServiceImpl.java
  20. 34
      blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/service/impl/TrunklineCarsLoadingLogServiceImpl.java

5
blade-service-api/logpm-aftersales-api/src/main/java/com/logpm/aftersales/entity/AftersalesAbnormalPackageEntity.java

@ -139,6 +139,11 @@ public class AftersalesAbnormalPackageEntity extends TenantEntity {
*/
@ApiModelProperty(value = "二级品")
private String secondary;
/**
* 三级品
*/
@ApiModelProperty(value = "三级品")
private String thirdProduct;
/**
* 入库批次号库存品)
*/

18
blade-service-api/logpm-aftersales-api/src/main/java/com/logpm/aftersales/entity/AftersalesWorkOrderEntity.java

@ -217,6 +217,12 @@ public class AftersalesWorkOrderEntity extends TenantEntity {
*/
@ApiModelProperty(value = "仓库ID")
private Long warehouseId;
/**
* 仓库名称
*/
@ApiModelProperty(value = "仓库名称")
private String warehouseName;
/**
* 责任人 库内作业环节
*/
@ -290,6 +296,18 @@ public class AftersalesWorkOrderEntity extends TenantEntity {
*/
@ApiModelProperty(value = "提交人 ")
private String ceator;
/**
* 仓库客服
*/
@ApiModelProperty(value = "仓库客服 ")
private String warehouseServiceName;
/**
* 职能客服
*/
@ApiModelProperty(value = "职能客服 ")
private String headquartersName;
/**
* 处理仓库ID
*/

72
blade-service-api/logpm-aftersales-api/src/main/java/com/logpm/aftersales/vo/AftersalesNewWorkOrderVO.java

@ -0,0 +1,72 @@
/*
* Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* Neither the name of the dreamlu.net developer nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
* Author: Chill 庄骞 (smallchill@163.com)
*/
package com.logpm.aftersales.vo;
import com.logpm.aftersales.entity.AftersaleSurveyRecordEntity;
import com.logpm.aftersales.entity.AftersalesCompletionRecipientEntity;
import com.logpm.aftersales.entity.AftersalesCompletionRecordEntity;
import com.logpm.aftersales.entity.AftersalesWorkOrderEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.util.List;
/**
* 客服异常工单 视图实体类
*
* @author BladeX
* @since 2023-11-17
*/
@Data
public class AftersalesNewWorkOrderVO implements Serializable {
private static final long serialVersionUID = 1L;
private Long id;
private Integer workOrderType;
private Integer discoveryNode;
private String warehouseName;
private Integer workOrderStatus;
private String workOrderNumber;
private String waybillNumber;
private String orderCode;
private String packageCode;
private String brandName;
private String waybillMall;
private String first;
private String processedBy;
private String businessNames;
private String createTime;
private String overTime;
private String updateTime;
private String resultTypes;
private String totalAmountNum;
private String ceator;
private String endTime;
private String warehouseServiceName;
private String headquartersName;
private String isAppeal;
private String processNumber;
private String appealResult;
}

4
blade-service-api/logpm-basicdata-api/src/main/java/com/logpm/basicdata/feign/IBasicdataWarehouseClient.java

@ -30,6 +30,7 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.List;
import java.util.Map;
/**
* 仓库 Feign接口类
@ -151,5 +152,8 @@ public interface IBasicdataWarehouseClient {
@GetMapping(API_PREFIX + "/findWarehousesByIds")
List<BasicdataWarehouseEntity> findWarehousesByIds(@RequestParam("ids") List<Long> ids);
@PostMapping(API_PREFIX + "/findNamesMapByIds")
Map<Long, String> findNamesMapByIds(@RequestBody List<Long> warehouseIds);
}

1
blade-service-api/logpm-trunkline-api/src/main/java/com/logpm/trunkline/vo/CarsStartNumVO.java

@ -11,6 +11,7 @@ public class CarsStartNumVO implements Serializable {
private String orderCode;
private String waybillNo;
private String startNum;
private Long loadId;
}

10
blade-service/logpm-aftersales/src/main/java/com/logpm/aftersales/controller/AftersalesWorkOrderController.java

@ -124,16 +124,6 @@ public class AftersalesWorkOrderController extends BladeController {
log.info("异常工单查询参数》》》{}",aftersalesWorkOrder);
try{
IPage<AftersalesWorkOrderVO> pages = aftersalesWorkOrderService.pageListOwn(aftersalesWorkOrder, Condition.getPage(query));
// R<IPage<AftersalesWorkOrderVO>> data = R.data(AftersalesWorkOrderWrapper.build().pageVO(pages));
// BasicdataWarehouseEntity myCurrentWarehouse = warehouseClient.getMyCurrentWarehouse();
// if (ObjectUtils.isNotNull(myCurrentWarehouse)){
// data.getData().getRecords().forEach(item -> {
// item.setTotalAmount(aftersalesCompletionRecordService.getTotalMoney(item,myCurrentWarehouse.getId()));
// });
// }else{
// log.info("查询人不属于某个仓库");
// }
return R.data(pages);
}catch (Exception e){
log.error("工单查询系统异常》》》{}",e.getMessage());

2
blade-service/logpm-aftersales/src/main/java/com/logpm/aftersales/mapper/AftersalesWorkOrderMapper.java

@ -116,5 +116,5 @@ public interface AftersalesWorkOrderMapper extends BaseMapper<AftersalesWorkOrde
* @param workOrderEntity
* @return
*/
List<AftersalesWorkOrderExcel> exportAllListOwn(@Param("param")AftersalesWorkOrderEntity workOrderEntity);
List<AftersalesWorkOrderExcel> exportAllListOwn(@Param("param")AftersalesWorkOrderEntity workOrderEntity,@Param("ids")List<Long> ids);
}

6
blade-service/logpm-aftersales/src/main/java/com/logpm/aftersales/mapper/AftersalesWorkOrderMapper.xml

@ -925,6 +925,12 @@
LEFT JOIN logpm_aftersales_person_responsible AS laprr ON laprr.word_order_id = lawo.id
<where>
lawo.is_deleted = 0
<if test="ids != null">
AND lawo.id IN
<foreach collection="ids" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</if>
<if test="param.workOrderStatusNameS != null and param.workOrderStatusNameS != '' ">and lawo.work_order_status = #{param.workOrderStatusNameS } </if>
<if test="param.id != null and param.id != '' ">and lawo.id = #{param.id } </if>
<if test="param.workOrderType != null and param.workOrderType != '' ">and lawo.work_order_type = #{param.workOrderType } </if>

5
blade-service/logpm-aftersales/src/main/java/com/logpm/aftersales/service/impl/AftersalesWorkOrderServiceImpl.java

@ -2580,8 +2580,9 @@ public class AftersalesWorkOrderServiceImpl extends BaseServiceImpl<AftersalesWo
@Override
public List<AftersalesWorkOrderExcel> exportWorkOrder(Map<String, Object> aftersalesWorkOrder) {
String o = (String) aftersalesWorkOrder.get("ids");
List<Long> ids = null;
if (!Objects.isNull(o)) {
aftersalesWorkOrder.put("ids", o);
ids = Func.toLongList((String) aftersalesWorkOrder.get("ids"));
}
//查询用户角色信息
BladeUser user = AuthUtil.getUser();
@ -2625,7 +2626,7 @@ public class AftersalesWorkOrderServiceImpl extends BaseServiceImpl<AftersalesWo
AftersalesWorkOrderEntity workOrderEntity = JSONObject.parseObject(JSONObject.toJSONString(aftersalesWorkOrder), AftersalesWorkOrderEntity.class);
List<AftersalesWorkOrderExcel> list = baseMapper.exportAllListOwn(workOrderEntity);
List<AftersalesWorkOrderExcel> list = baseMapper.exportAllListOwn(workOrderEntity,ids);
return list;

10
blade-service/logpm-basicdata/src/main/java/com/logpm/basicdata/feign/BasicdataWarehouseClient.java

@ -41,10 +41,7 @@ import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import springfox.documentation.annotations.ApiIgnore;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
import java.util.*;
import java.util.stream.Collectors;
/**
@ -295,5 +292,10 @@ public class BasicdataWarehouseClient implements IBasicdataWarehouseClient {
return Collections.emptyList();
}
@Override
public Map<Long, String> findNamesMapByIds(List<Long> warehouseIds) {
return warehouseWarehouseService.findNamesMapByIds(warehouseIds);
}
}

2
blade-service/logpm-basicdata/src/main/java/com/logpm/basicdata/service/IBasicdataWarehouseService.java

@ -28,6 +28,7 @@ import org.springblade.core.mp.base.BaseService;
import org.springblade.core.tool.api.R;
import java.util.List;
import java.util.Map;
/**
* 仓库 服务类
@ -133,4 +134,5 @@ public interface IBasicdataWarehouseService extends BaseService<BasicdataWarehou
BasicdataWarehouseVO getMyCurrentWarehouseAndConfig();
Map<Long, String> findNamesMapByIds(List<Long> warehouseIds);
}

14
blade-service/logpm-basicdata/src/main/java/com/logpm/basicdata/service/impl/BasicdataWarehouseServiceImpl.java

@ -16,6 +16,7 @@
*/
package com.logpm.basicdata.service.impl;
import cn.hutool.core.collection.CollUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@ -405,4 +406,17 @@ public class BasicdataWarehouseServiceImpl extends BaseServiceImpl<BasicdataWare
return warehouseVO;
}
@Override
public Map<Long, String> findNamesMapByIds(List<Long> warehouseIds) {
List<BasicdataWarehouseEntity> basicdataWarehouseEntities = warehouseMapper.selectBatchIds(warehouseIds);
if(CollUtil.isNotEmpty(basicdataWarehouseEntities)){
//把basicdataWarehouseEntities转化成以id为key的Map
Map<Long, String> basicdataWarehouseMap = basicdataWarehouseEntities.stream()
.collect(Collectors.toMap(BasicdataWarehouseEntity::getId, BasicdataWarehouseEntity::getName));
return basicdataWarehouseMap;
}else{
return new HashMap<>();
}
}
}

61
blade-service/logpm-statisticsdata/src/main/java/com/logpm/statistics/listener/mq/WaybillCheckListener.java

@ -1,6 +1,7 @@
package com.logpm.statistics.listener.mq;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
@ -203,6 +204,8 @@ public class WaybillCheckListener {
String departureWarehouseName = waybillEntity.getDepartureWarehouseName();
Long destinationWarehouseId = waybillEntity.getDestinationWarehouseId();
String destinationWarehouseName = waybillEntity.getDestinationWarehouseName();
Integer trunklineCompleteOrNot = waybillEntity.getTrunklineCompleteOrNot();
Integer pickupCompleteOrNot = waybillEntity.getPickupCompleteOrNot();
// BigDecimal pickupFee = Objects.isNull(waybillEntity.getPickupFee())?BigDecimal.ZERO:waybillEntity.getPickupFee();
BigDecimal warehouseManagementFee = Objects.isNull(waybillEntity.getWarehouseManagementFee()) ? BigDecimal.ZERO : waybillEntity.getWarehouseManagementFee();
@ -221,6 +224,25 @@ public class WaybillCheckListener {
BigDecimal otherPrice = otherFee.divide(new BigDecimal(totalCount), 2, BigDecimal.ROUND_HALF_UP);
BigDecimal thirdOperationPrice = thirdOperationFee.divide(new BigDecimal(totalCount), 2, BigDecimal.ROUND_HALF_UP);
BigDecimal trunklineComletPrice;
BigDecimal trunklinePickupPrice;
if(NumberUtil.equals(trunklineCompleteOrNot,1)){
BigDecimal totalFreight = waybillEntity.getTotalFreight();
trunklineComletPrice = totalFreight.divide(new BigDecimal(totalCount),2, BigDecimal.ROUND_HALF_UP);
} else {
trunklineComletPrice = BigDecimal.ZERO;
}
if(NumberUtil.equals(pickupCompleteOrNot,1)){
BigDecimal pickupFee = waybillEntity.getPickupFee();
trunklinePickupPrice = pickupFee.divide(new BigDecimal(totalCount),2, BigDecimal.ROUND_HALF_UP);
} else {
trunklinePickupPrice = BigDecimal.ZERO;
}
//查询运单明细
List<WarehouseWayBillDetail> wayBillDetailList = warehouseWaybillDetailClient.findByWaybillId(waybillId);
@ -335,6 +357,14 @@ public class WaybillCheckListener {
trunklinePackageEntity.setTotalRealFee(totalRealFee);
trunklinePackageEntity.setBrandId(brandId);
trunklinePackageEntity.setConsigneeId(consigneeId);
if(NumberUtil.equals(trunklineCompleteOrNot,1)){
trunklinePackageEntity.setFreightPrice(trunklineComletPrice.multiply(new BigDecimal(num)));
}
if(NumberUtil.equals(pickupCompleteOrNot,1)){
trunklinePackageEntity.setPickupPrice(trunklinePickupPrice.multiply(new BigDecimal(num)));
}
trunklinePackageEntities.add(trunklinePackageEntity);
//仓库收入
@ -453,6 +483,8 @@ public class WaybillCheckListener {
String departureWarehouseName = waybillEntity.getDepartureWarehouseName();
Long destinationWarehouseId = waybillEntity.getDestinationWarehouseId();
String destinationWarehouseName = waybillEntity.getDestinationWarehouseName();
Integer trunklineCompleteOrNot = waybillEntity.getTrunklineCompleteOrNot();
Integer pickupCompleteOrNot = waybillEntity.getPickupCompleteOrNot();
//单价计算
// BigDecimal pickupFee = Objects.isNull(waybillEntity.getPickupFee())?BigDecimal.ZERO:waybillEntity.getPickupFee();
@ -488,12 +520,22 @@ public class WaybillCheckListener {
.collect(Collectors.toMap(WarehouseWayBillDetail::getProductId, wayBillDetail -> wayBillDetail));
// wayBillDetailMapByProductId.keySet().forEach(productId -> {
// WarehouseWayBillDetail warehouseWayBillDetail = wayBillDetailMapByProductId.get(productId);
//
//
//
// });
BigDecimal trunklineComletPrice;
BigDecimal trunklinePickupPrice;
if(NumberUtil.equals(trunklineCompleteOrNot,1)){
BigDecimal totalFreight = waybillEntity.getTotalFreight();
trunklineComletPrice = totalFreight.divide(new BigDecimal(totalCount),2, BigDecimal.ROUND_HALF_UP);
} else {
trunklineComletPrice = BigDecimal.ZERO;
}
if(NumberUtil.equals(pickupCompleteOrNot,1)){
BigDecimal pickupFee = waybillEntity.getPickupFee();
trunklinePickupPrice = pickupFee.divide(new BigDecimal(totalCount),2, BigDecimal.ROUND_HALF_UP);
} else {
trunklinePickupPrice = BigDecimal.ZERO;
}
//保存订单信息
@ -660,6 +702,13 @@ public class WaybillCheckListener {
BigDecimal totalRealFee = freightPriceTotal.add(pickupPriceTotal).add(insurancePriceTotal).add(otherPriceTotal).add(thirdOperationPriceTotal);
trunklinePackageEntity.setTotalRealFee(totalRealFee);
if(NumberUtil.equals(trunklineCompleteOrNot,1)){
trunklinePackageEntity.setFreightPrice(trunklineComletPrice.multiply(BigDecimal.ONE));
}
if(NumberUtil.equals(pickupCompleteOrNot,1)){
trunklinePackageEntity.setPickupPrice(trunklinePickupPrice.multiply(BigDecimal.ONE));
}
trunklinePackageEntities.add(trunklinePackageEntity);
//仓库收入

2
blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/controller/CarsLoadController.java

@ -3004,7 +3004,7 @@ public class CarsLoadController {
Long warehouseId = myCurrentWarehouse.getId();
String warehouseName = myCurrentWarehouse.getName();
if(StringUtil.isNotBlank(orderCode)){
if(StringUtil.isBlank(orderCode)){
log.warn(method+"查询参数为空");
return R.fail(405,"查询参数为空");
}

7
blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/controller/OpenOrderController.java

@ -308,13 +308,6 @@ public class OpenOrderController {
try {
//当前登录人选择的仓库
BasicdataWarehouseEntity myCurrentWarehouse = warehouseClient.getMyCurrentWarehouse();
if (Objects.isNull(myCurrentWarehouse)) {
log.warn(method + "仓库信息为空 myCurrentWarehouse={}", myCurrentWarehouse);
return R.fail(403, "多仓权限无法操作,请选择仓库");
}
advanceDTO.setWarehouseId(myCurrentWarehouse.getId());
if (Objects.isNull(advanceId)) {
log.warn(method + "暂存单id为空 advanceId={}", advanceId);
return R.fail(403, "暂存单id为空");

3
blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/mapper/TrunklineCarsOrderMapper.xml

@ -423,7 +423,8 @@
select ltcl.cars_no carsNo,
ltco.order_code orderCode,
ltco.waybill_no waybillNo,
ltco.start_num startNum
ltco.start_num startNum,
ltco.load_id loadId
from logpm_trunkline_cars_order ltco
left join logpm_trunkline_cars_load ltcl on ltco.load_id = ltcl.id
where ltco.order_code = #{orderCode}

6
blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/service/ITrunklineCarsLoadingLogService.java

@ -1,10 +1,16 @@
package com.logpm.trunkline.service;
import com.logpm.trunkline.entity.TrunklineCarsLoadScanEntity;
import com.logpm.trunkline.entity.TrunklineCarsLoadingLogEntity;
import org.springblade.core.mp.base.BaseService;
import java.util.List;
public interface ITrunklineCarsLoadingLogService extends BaseService<TrunklineCarsLoadingLogEntity> {
void savaLoadingLog(Long warehouseId,String warehouseName,Long loadId,String loadCode,Long waybillId,String waybillNo,String orderCode,String scanCode,Integer num,Integer type,Integer isData,Integer isAbnormal,Long trayId,String trayCode,String trayName,Long fromWarehouseId,Long loadScanId,String remark);
void savaLoadingLogBatch(List<TrunklineCarsLoadScanEntity> trunklineCarsLoadScanEntities, String remark);
}

8
blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/service/impl/OpenOrderServiceImpl.java

@ -377,7 +377,7 @@ public class OpenOrderServiceImpl implements IOpenOrderService {
if (hasPackage == 0) {
//把list通过packName进行分组
Map<String, List<TrunklineAdvanceEntity>> groupedByPackName = list.stream()
Map<String, List<TrunklineAdvanceEntity>> groupedByPackName = list.stream().filter(t-> StringUtil.isNotBlank(t.getPackName()))
.collect(Collectors.groupingBy(TrunklineAdvanceEntity::getPackName));
AtomicReference<Integer> tn = new AtomicReference<>(0);
List<AdvanceDetailGoodsVO> addList = new ArrayList<>();
@ -2702,9 +2702,9 @@ public class OpenOrderServiceImpl implements IOpenOrderService {
log.warn("#############updateWaybill: 始发仓数据已发运 waybillId={}", waybillId);
return R.fail(405, "始发仓数据已发运");
}
} else {
Integer handQuantity = endStockArticleEntity.getHandQuantity();
if (!NumberUtil.equals(handQuantity, totalCount)) {
}else{
Integer incomingQuantity = endStockArticleEntity.getIncomingNum();
if(!NumberUtil.equals(incomingQuantity,totalCount)){
log.warn("#############updateWaybill: 目的仓数据还未完全到达 waybillId={}", waybillId);
return R.fail(405, "目的仓数据还未完全到达");
}

286
blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/service/impl/TrunklineCarsLoadServiceImpl.java

@ -1173,8 +1173,7 @@ public class TrunklineCarsLoadServiceImpl extends BaseServiceImpl<TrunklineCarsL
throw new CustomerException(400, "已经确认过卸车");
}
//修改已卸车数据为确认状态
trunklineCarsLoadScanService.updateUnloadCheckByLoadIdAndWarehouseId(loadId, warehouseId);
TrunklineCarsLoadLineEntity updateUnloadStatus = new TrunklineCarsLoadLineEntity();
WorkNodeEnums node = null;
@ -1252,7 +1251,10 @@ public class TrunklineCarsLoadServiceImpl extends BaseServiceImpl<TrunklineCarsL
.ne("scan_status", "1")
.isNull("unload_tray_code");
List<TrunklineCarsLoadScanEntity> carsLoadScanEntityList = trunklineCarsLoadScanService.list(queryWrapper);
List<TrunklineCarsLoadScanEntity> allList = trunklineCarsLoadScanService.list(queryWrapper);
//把carsLoadScanEntityList过滤掉scanStatus等于3的数据
List<TrunklineCarsLoadScanEntity> carsLoadScanEntityList = allList.stream().filter(e -> !"3".equals(e.getScanStatus())).collect(Collectors.toList());
if(CollUtil.isNotEmpty(carsLoadScanEntityList)){
//把carsLoadScanEntityList通过orderCode进行分组
Map<String, List<TrunklineCarsLoadScanEntity>> orderCodemap = carsLoadScanEntityList.stream().collect(Collectors.groupingBy(TrunklineCarsLoadScanEntity::getOrderCode));
@ -1456,6 +1458,9 @@ public class TrunklineCarsLoadServiceImpl extends BaseServiceImpl<TrunklineCarsL
}
//修改已卸车数据为确认状态
trunklineCarsLoadScanService.updateUnloadCheckByLoadIdAndWarehouseId(loadId, warehouseId);
//无装车记录异常日志记录
try {
@ -2519,6 +2524,14 @@ public class TrunklineCarsLoadServiceImpl extends BaseServiceImpl<TrunklineCarsL
log.warn("###############updateCarsLoadBasicData: 配载计划节点不存在 loadId={} nodeId={}", loadId, warehouseId);
return R.fail(405, "配载计划节点不存在");
}
String nodeStatus = currentLoadLineEntity.getNodeStatus();
if(!"10".equals(nodeStatus)){
log.warn("###############updateCarsLoadBasicData: 车次不在当前仓 loadId={} nodeStatus={}", loadId, nodeStatus);
return R.fail(405, "车次不在当前仓");
}
StringBuilder str = new StringBuilder();
if (oldCountTransportCost.compareTo(countTransportCost) != 0) {
str = new StringBuilder("运输费用: 由【" + oldCountTransportCost + "】改为" + countTransportCost + "。");
@ -9357,14 +9370,12 @@ public class TrunklineCarsLoadServiceImpl extends BaseServiceImpl<TrunklineCarsL
Integer pacakagNum = 0;
Integer zeroNum = 0;
for (LoadingPackageDTO loadingPackageDTO : packageList) {
String orderPackageCode = loadingPackageDTO.getOrderPackageCode();
R r = loadingScan(loadId, warehouseId, orderPackageCode, trayCode, "托盘正常装车");
if(r.getCode() != 200){
String msg = r.getMsg();
throw new CustomerException(r.getCode(),orderPackageCode+msg);
}
pacakagNum = pacakagNum + 1;
if(CollUtil.isNotEmpty(packageList)){
Integer loadingPackageNum = loadingTrayPackageList(loadId,warehouseId,packageList,trayCode,"托盘正常装车");
pacakagNum = loadingPackageNum;
}
for (LoadingZeroDTO loadingZeroDTO : zeroList) {
@ -9381,6 +9392,259 @@ public class TrunklineCarsLoadServiceImpl extends BaseServiceImpl<TrunklineCarsL
return Resp.scanSuccess("整托装车成功", "装车成功包件" + pacakagNum + "件,零担" + zeroNum + "件");
}
private Integer loadingTrayPackageList(Long loadId, Long warehouseId, List<LoadingPackageDTO> packageList, String trayCode, String remark) {
TrunklineCarsLoadEntity carsLoadEntity = baseMapper.selectById(loadId);
if (Objects.isNull(carsLoadEntity)) {
log.warn("##################loadingTrayPackageList: 配载or三方计划不存在 loadId={}", loadId);
throw new CustomerException(405, "计划不存在");
}
String carsNo = carsLoadEntity.getCarsNo();
TrunklineCarsLoadLineEntity carsLoadLineEntity = trunklineCarsLoadLineService.findEntityByLoadIdAndNodeId(loadId, warehouseId);
if (Objects.isNull(carsLoadLineEntity)) {
log.warn("##################loadingTrayPackageList: 节点信息不存在 loadId={} warehouseId={}", loadId, warehouseId);
throw new CustomerException(405, "节点信息不存在");
}
String nodeStatus = carsLoadLineEntity.getNodeStatus();
if (!"10".equals(nodeStatus)) {
log.warn("##################loadingTrayPackageList: 节点不是到车状态 nodeStatus={}", nodeStatus);
throw new CustomerException(405, "节点不是到车状态");
}
//限制装车之前上传图片
// Integer isLoadingPhoto = carsLoadLineEntity.getIsLoadingPhoto();
// if(NumberUtil.equals(isLoadingPhoto,0)){
// log.warn("##############loadingScan: 当前节点还未上传装车前照片 isLoadingPhoto={}", isLoadingPhoto);
// return R.fail(405, "当前节点还未上传装车前照片");
// }
BasicdataWarehouseEntity basicdataWarehouseEntity = basicdataWarehouseClient.getEntityWarehouseId(warehouseId);
if (Objects.isNull(basicdataWarehouseEntity)) {
log.warn("##################loadingTrayPackageList: 仓库信息不存在 warehouseId={}", warehouseId);
throw new CustomerException(405, "仓库信息不存在");
}
String warehouseName = basicdataWarehouseEntity.getName();
Long trayId;
String trayName;
if (!StringUtil.isBlank(trayCode)) {
BasicdataTrayEntity basicdataTrayEntity = basicdataTrayClient.getTrayByTrayCode(trayCode);
if (!Objects.isNull(basicdataTrayEntity)) {
trayId = basicdataTrayEntity.getId();
trayName = basicdataTrayEntity.getPalletName();
} else {
trayName = "";
trayId = null;
}
} else {
trayName = "";
trayId = null;
}
//把packageList中所有orderPackageCode放入一个List
List<String> orderPackageCodes = packageList.stream()
.map(LoadingPackageDTO::getOrderPackageCode)
.collect(Collectors.toList());
//查询包件有信息
FindParamterDTO findParamterDTO = new FindParamterDTO();
findParamterDTO.setOrderPackageCodeList(orderPackageCodes);
findParamterDTO.setWarehouseId(warehouseId);
List<DistributionParcelListEntity> parcelListEntityList = distributionParcelListClient.findListByOrderPackageCodeList(findParamterDTO);
if(CollUtil.isNotEmpty(parcelListEntityList)){
//把parcelListEntityList转化成以orderPackageCode为key的Map
Map<String, DistributionParcelListEntity> parcelMap = parcelListEntityList.stream()
.collect(Collectors.toMap(DistributionParcelListEntity::getOrderPackageCode, Function.identity()));
//把parcelListEntityList中所有orderCode放入一个Set
Set<String> orderCodeSet = parcelListEntityList.stream()
.map(DistributionParcelListEntity::getOrderCode)
.collect(Collectors.toSet());
findParamterDTO.setOrderCodeSet(orderCodeSet);
List<DistributionStockArticleEntity> stockArticleEntityList = distributionStockArticleClient.findListByOrderCodesAndWarehouseId(findParamterDTO);
//把stockArticleEntityList转化成以orderCode为key的Map
Map<String, DistributionStockArticleEntity> stockArticleMap = stockArticleEntityList.stream()
.collect(Collectors.toMap(DistributionStockArticleEntity::getOrderCode, Function.identity()));
QueryWrapper<TrunklineCarsOrderEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("load_id", loadId)
.eq("node_id", warehouseId);
List<TrunklineCarsOrderEntity> carsOrderList = trunklineCarsOrderService.list(queryWrapper);
//把carsOrderList通过orderCode和waybillNo拼接作为key的Map
Map<String, TrunklineCarsOrderEntity> carsOrderMap = carsOrderList.stream()
.collect(Collectors.toMap(orderCodeAndWaybillNo -> orderCodeAndWaybillNo.getOrderCode() +"&&"+ orderCodeAndWaybillNo.getWaybillNo(), Function.identity()));
//把carsOrderList的finlNodeId放入一个List
List<Long> warehouseIds = carsOrderList.stream()
.map(TrunklineCarsOrderEntity::getFinalNodeId)
.collect(Collectors.toList());
Map<Long,String> warehouseMap = basicdataWarehouseClient.findNamesMapByIds(warehouseIds);
//提出parcelListEntityList中状态不等于20的包件
List<DistributionParcelListEntity> noStockParcelListEntityList = parcelListEntityList.stream()
.filter(parcelListEntity -> !"20".equals(parcelListEntity.getStatus()))
.collect(Collectors.toList());
if(CollUtil.isNotEmpty(noStockParcelListEntityList)){
log.warn("##################loadingTrayPackageList: 存在不在库的包件 warehouseId={}", warehouseId);
throw new CustomerException(405, "存在不在库的包件");
}
List<String> noPlanPackageList = new ArrayList<>();
//判断是否有不在计划中的包件
for (DistributionParcelListEntity parcelList : parcelListEntityList) {
String orderCode = parcelList.getOrderCode();
String waybillNumber = parcelList.getWaybillNumber();
String orderPackageCode = parcelList.getOrderPackageCode();
for (TrunklineCarsOrderEntity carsOrderEntity : carsOrderList) {
String orderCode1 = carsOrderEntity.getOrderCode();
String waybillNo = carsOrderEntity.getWaybillNo();
Integer planNum = carsOrderEntity.getPlanNum();
Integer realNum = carsOrderEntity.getRealNum();
if(orderCode1.equals(orderCode) && waybillNo.equals(waybillNumber)){
int totalNum = realNum + 1;
if(totalNum > planNum){
noPlanPackageList.add(orderPackageCode);
carsOrderEntity.setRealNum(totalNum);
}
}
}
}
if(CollUtil.isNotEmpty(noPlanPackageList)){
log.warn("##################loadingTrayPackageList: 存在不在计划的包件 noPlanPackageList={}", noPlanPackageList);
throw new CustomerException(405, "存在不在计划的包件");
}
List<TrunklineCarsLoadScanEntity> saveScanList = new ArrayList<>();
parcelListEntityList.forEach(parcelListEntity -> {
String orderPackageCode = parcelListEntity.getOrderPackageCode();
Long waybillId = parcelListEntity.getWaybillId();
String waybillNo = parcelListEntity.getWaybillNumber();
String orderCode = parcelListEntity.getOrderCode();
TrunklineCarsOrderEntity carsOrderEntity = carsOrderMap.get(orderCode + "&&" + waybillNo);
Long finalNodeId = carsOrderEntity.getFinalNodeId();
DistributionStockArticleEntity stockArticle = stockArticleMap.get(orderCode);
TrunklineCarsLoadScanEntity carsLoadScanEntity = new TrunklineCarsLoadScanEntity();
carsLoadScanEntity.setWarehouseId(warehouseId);
carsLoadScanEntity.setWarehouseName(basicdataWarehouseEntity.getName());
carsLoadScanEntity.setLoadId(loadId);
carsLoadScanEntity.setLoadCode(carsNo);
carsLoadScanEntity.setScanCode(orderPackageCode);
carsLoadScanEntity.setScanStatus("1");
carsLoadScanEntity.setTrayId(trayId);
carsLoadScanEntity.setTrayName(trayName);
carsLoadScanEntity.setTrayCode(trayCode);
carsLoadScanEntity.setNum(1);
carsLoadScanEntity.setType(1);
carsLoadScanEntity.setIsSupple(0);
carsLoadScanEntity.setUnloadCheck(0);
carsLoadScanEntity.setUnloadNum(0);
carsLoadScanEntity.setIsData(1);
carsLoadScanEntity.setWaybillId(waybillId);
carsLoadScanEntity.setWaybillNo(waybillNo);
carsLoadScanEntity.setOrderCode(orderCode);
carsLoadScanEntity.setFromWarehouseId(warehouseId);
carsLoadScanEntity.setLoadingAbnormal(0);
String finalName = warehouseMap.get(finalNodeId);
carsLoadScanEntity.setFinalNodeId(finalNodeId);
carsLoadScanEntity.setFinalNodeName(finalName);
carsLoadScanEntity.setCustomerName(stockArticle.getCustomerName());
carsLoadScanEntity.setCustomerTelephone(stockArticle.getCustomerTelephone());
carsLoadScanEntity.setCustomerAddress(stockArticle.getCustomerAddress());
carsLoadScanEntity.setFirsts(parcelListEntity.getFirsts());
carsLoadScanEntity.setSenconds(parcelListEntity.getSecond());
carsLoadScanEntity.setThirds(parcelListEntity.getThirdProduct());
carsLoadScanEntity.setMaterialCode(parcelListEntity.getMaterialCode());
carsLoadScanEntity.setMaterialName(parcelListEntity.getMaterialName());
carsLoadScanEntity.setLoadingUserName(AuthUtil.getNickName());
saveScanList.add(carsLoadScanEntity);
});
trunklineCarsLoadScanService.saveBatch(saveScanList);
updateNumByLoadId(loadId);
//把saveScanList通过finalNodeId进行分组
Map<Long, List<TrunklineCarsLoadScanEntity>> finalNodeIdMap = saveScanList.stream()
.collect(Collectors.groupingBy(TrunklineCarsLoadScanEntity::getFinalNodeId));
finalNodeIdMap.keySet().forEach(finalNodeId -> {
List<TrunklineCarsLoadScanEntity> trunklineCarsLoadScanEntities = finalNodeIdMap.get(finalNodeId);
//把trunklineCarsLoadScanEntities的scanCode放入一个List
List<String> scanCodeList = trunklineCarsLoadScanEntities.stream()
.map(TrunklineCarsLoadScanEntity::getScanCode)
.collect(Collectors.toList());
String finalNodeName = warehouseMap.get(finalNodeId);
String loadType = carsLoadEntity.getLoadType();
String content = null;
if(!"4".equals(loadType)){
content = "包件在 " + warehouseName + " " + (StringUtil.isBlank(trayName) ? "扫码" : "托盘(" + trayName + ")") + " 装车, 车次号:"+carsNo+" ,配载计划目的仓 " + finalNodeName + ",数据来源仓库 " + warehouseName;
}else{
content = "包件在 " + warehouseName + " " + (StringUtil.isBlank(trayName) ? "扫码" : "托盘(" + trayName + ")") + " 装车, 车次号:"+carsNo+" ,数据来源仓库 " + warehouseName;
}
packageTrackLogAsyncService.addPackageTrackLog(AuthUtil.getTenantId(), AuthUtil.getUserId(), Func.firstLong(AuthUtil.getDeptId()), AuthUtil.getNickName(), scanCodeList, warehouseId, warehouseName, WorkNodeEnums.INITIAL_WAREHOUSE_LOADING.getCode(), content);
trunklineCarsLoadScanEntities.forEach(carsLoadScanEntity -> {
String scanCode = carsLoadScanEntity.getScanCode();
// 推送包件装车数据到工厂
pushFactoryOrderData(warehouseId, scanCode, carsLoadScanEntity.getOrderCode());
try {
DistributionParcelListEntity parcelList = parcelMap.get(scanCode);
JSONObject main = new JSONObject();
main.put("trainNumber",carsNo);
main.put("waybillNumber",carsLoadScanEntity.getWaybillNo());
NodePushMsg nodePushMsg = NodePushMsg.builder()
.operator(AuthUtil.getNickName())
.operatorTime(new Date())
.address("在【" + warehouseName + "】出库")
.brand(BrandEnums.getByValue(parcelList.getBrandName()))
.node(WorkNodeEnums.INITIAL_WAREHOUSE_LOADING)
.main(JSONUtil.toJsonStr(main))
.content(Collections.singletonList(PushData.builder()
.packageCode(carsLoadScanEntity.getScanCode())
.orderCode(carsLoadScanEntity.getOrderCode())
.warehouseName(warehouseName)
.destinationWarehouse(parcelList.getAcceptWarehouseName())
.build()))
.build();
factoryDataMessageSender.sendNodeDataByBrand(nodePushMsg);
}catch (Exception e){
log.error("推送数据失败",e);
}
});
trunklineCarsLoadingLogService.savaLoadingLogBatch(trunklineCarsLoadScanEntities, remark);
});
}
return parcelListEntityList.size();
}
@Override
public R findCarsLoadingDetail(Long loadId, Long warehouseId) {
log.info("################findCarsLoadingDetail: 查询配载计划装车详情");

34
blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/service/impl/TrunklineCarsLoadingLogServiceImpl.java

@ -1,5 +1,6 @@
package com.logpm.trunkline.service.impl;
import com.logpm.trunkline.entity.TrunklineCarsLoadScanEntity;
import com.logpm.trunkline.entity.TrunklineCarsLoadingLogEntity;
import com.logpm.trunkline.mapper.TrunklineCarsLoadingLogMapper;
import com.logpm.trunkline.service.ITrunklineCarsLoadingLogService;
@ -8,6 +9,9 @@ import lombok.extern.slf4j.Slf4j;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
@Service
@Slf4j
@AllArgsConstructor
@ -35,4 +39,34 @@ public class TrunklineCarsLoadingLogServiceImpl extends BaseServiceImpl<Trunklin
entity.setRemark(remark);
save(entity);
}
@Override
public void savaLoadingLogBatch(List<TrunklineCarsLoadScanEntity> trunklineCarsLoadScanEntities, String remark) {
List<TrunklineCarsLoadingLogEntity> saveList = new ArrayList<>();
trunklineCarsLoadScanEntities.forEach(carsLoadScanEntity -> {
TrunklineCarsLoadingLogEntity entity = new TrunklineCarsLoadingLogEntity();
entity.setWarehouseId(carsLoadScanEntity.getWarehouseId());
entity.setWarehouseName(carsLoadScanEntity.getWarehouseName());
entity.setLoadId(carsLoadScanEntity.getLoadId());
entity.setLoadCode(carsLoadScanEntity.getLoadCode());
entity.setWaybillId(carsLoadScanEntity.getWaybillId());
entity.setWaybillNo(carsLoadScanEntity.getWaybillNo());
entity.setOrderCode(carsLoadScanEntity.getOrderCode());
entity.setScanCode(carsLoadScanEntity.getScanCode());
entity.setNum(carsLoadScanEntity.getNum());
entity.setType(carsLoadScanEntity.getType());
entity.setIsData(carsLoadScanEntity.getIsData());
entity.setIsAbnormal(carsLoadScanEntity.getLoadingAbnormal());
entity.setTrayCode(carsLoadScanEntity.getTrayCode());
entity.setTrayId(carsLoadScanEntity.getTrayId());
entity.setTrayName(carsLoadScanEntity.getTrayName());
entity.setFromWarehouseId(carsLoadScanEntity.getFromWarehouseId());
entity.setLoadScanId(carsLoadScanEntity.getId());
entity.setRemark(remark);
saveList.add(entity);
});
saveBatch(saveList);
}
}

Loading…
Cancel
Save