|
|
|
@ -154,6 +154,17 @@ public class DistributionDeliveryListServiceImpl extends BaseServiceImpl<Distrib
|
|
|
|
|
private final IDistributionParcelNumberService distributionParcelNumberService; |
|
|
|
|
private final IWarehouseTrayGoodsClient warehouseTrayGoodsClient; |
|
|
|
|
|
|
|
|
|
// 自提mapper
|
|
|
|
|
private final DistrilbutionBillLadingMapper distrilbutionBillLadingMapper; |
|
|
|
|
|
|
|
|
|
// 自提关联订单
|
|
|
|
|
private final DistrilbutionBillStockMapper distrilbutionBillStockMapper; |
|
|
|
|
|
|
|
|
|
// 自提关联包件
|
|
|
|
|
private final DistrilbutionBillPackageMapper distrilbutionBillPackageMapper; |
|
|
|
|
|
|
|
|
|
private final DistributionParcelListMapper distributionParcelListMapper; |
|
|
|
|
|
|
|
|
|
// private final IWarehouseRetentionScanClient warehouseRetentionScanClient;
|
|
|
|
|
|
|
|
|
|
// @Lazy
|
|
|
|
@ -4540,6 +4551,12 @@ public class DistributionDeliveryListServiceImpl extends BaseServiceImpl<Distrib
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* @param ids 预览Id |
|
|
|
|
* @param type 1 市配 2 商配 3 自提 |
|
|
|
|
* @return |
|
|
|
|
* @throws Exception |
|
|
|
|
*/ |
|
|
|
|
@Override |
|
|
|
|
public List<PrintPreviewVO> printBatch(String ids, Integer type) throws Exception { |
|
|
|
|
|
|
|
|
@ -4556,18 +4573,240 @@ public class DistributionDeliveryListServiceImpl extends BaseServiceImpl<Distrib
|
|
|
|
|
throw new ServiceException("参数错误"); |
|
|
|
|
} |
|
|
|
|
if (2 == type) { |
|
|
|
|
|
|
|
|
|
return handleShiPeiData(template, idArray, html); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} else if (1 == type) { |
|
|
|
|
return handleShangPeiData(template.getId(), idArray, html); |
|
|
|
|
} else if (3 == type) { |
|
|
|
|
// 自提
|
|
|
|
|
return handleZiTiData(template, idArray, html); |
|
|
|
|
} else { |
|
|
|
|
log.warn("###########printBatch: 未知的打印类型"); |
|
|
|
|
throw new CustomerException(403, "未知的打印类型"); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 自提配送单 |
|
|
|
|
* |
|
|
|
|
* @param template |
|
|
|
|
* @param idArray |
|
|
|
|
* @param html |
|
|
|
|
* @return |
|
|
|
|
*/ |
|
|
|
|
private List<PrintPreviewVO> handleZiTiData(BasicPrintTemplateEntity template, String[] idArray, String html) throws Exception { |
|
|
|
|
|
|
|
|
|
List<PrintPreviewVO> result = new ArrayList<>(); |
|
|
|
|
for (String id : idArray) { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//查询自提预约单
|
|
|
|
|
DistrilbutionBillLadingEntity distrilbutionBillLadingEntity = distrilbutionBillLadingMapper.selectById(Long.parseLong(id)); |
|
|
|
|
// 查询自提预约单下面的订单
|
|
|
|
|
|
|
|
|
|
LambdaQueryWrapper<DistrilbutionBillStockEntity> queryWrapper = new LambdaQueryWrapper<>(); |
|
|
|
|
queryWrapper.eq(DistrilbutionBillStockEntity::getBillLadingId, distrilbutionBillLadingEntity.getId()); |
|
|
|
|
List<DistrilbutionBillStockEntity> distrilbutionBillStockEntities = distrilbutionBillStockMapper.selectList(queryWrapper); |
|
|
|
|
// 查找自提预约单下面包件 排除取消的
|
|
|
|
|
|
|
|
|
|
LambdaQueryWrapper<DistrilbutionBillPackageEntity> distrilbutionBillStockEntityLambdaQueryWrapper = new LambdaQueryWrapper<>(); |
|
|
|
|
distrilbutionBillStockEntityLambdaQueryWrapper.eq(DistrilbutionBillPackageEntity::getBillLadingId, distrilbutionBillLadingEntity.getId()); |
|
|
|
|
distrilbutionBillStockEntityLambdaQueryWrapper.ne(DistrilbutionBillPackageEntity::getPacketBarStatus, 2); |
|
|
|
|
List<DistrilbutionBillPackageEntity> distrilbutionBillPackageEntities = distrilbutionBillPackageMapper.selectList(distrilbutionBillStockEntityLambdaQueryWrapper); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Set<Long> ids = new HashSet<Long>(); |
|
|
|
|
for (DistrilbutionBillPackageEntity distrilbutionBillPackageEntity : distrilbutionBillPackageEntities) { |
|
|
|
|
ids.add(distrilbutionBillPackageEntity.getParceListId()); |
|
|
|
|
} |
|
|
|
|
// 得到所以的订单列表
|
|
|
|
|
List<DistributionParcelListEntity> distributionParcelListEntities = distributionParcelListMapper.selectBatchIds(ids); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Map<String, Object> map = new HashMap<>(); |
|
|
|
|
map.put("自提单号", distrilbutionBillLadingEntity.getPickupBatch()); |
|
|
|
|
String fileTypeName = QRCodeUtil.createCodeToFile(map.get("自提单号").toString()); |
|
|
|
|
map.put("自提单二维码", QRCodeUtil.getEmpAutograph(fileTypeName)); |
|
|
|
|
// map.put("收货单单位", reservationEntity.getReceivingUnit());//收货单单位
|
|
|
|
|
// map.put("商场名称", reservationEntity.getStoreName());//商场名称
|
|
|
|
|
// 构建map集合中收货单和商场名称
|
|
|
|
|
buildMapByDistrilbutionBillLadingEntity(map, distrilbutionBillStockEntities, distributionParcelListEntities,distrilbutionBillLadingEntity); |
|
|
|
|
map.put("提货人", distrilbutionBillLadingEntity.getConsignee());//提货人
|
|
|
|
|
map.put("联系电话", distrilbutionBillLadingEntity.getConsigneePhone());//收货人电话
|
|
|
|
|
BasicdataWarehouseEntity entityWarehouseId = warehouseClient.getEntityWarehouseId(distrilbutionBillLadingEntity.getWarehouseId()); |
|
|
|
|
|
|
|
|
|
map.put("自提仓库", entityWarehouseId!=null?entityWarehouseId.getName():""); |
|
|
|
|
map.put("自提时间", DateUtil.formatDateTime(distrilbutionBillLadingEntity.getPickUpTime())); |
|
|
|
|
map.put("提货车牌号", distrilbutionBillLadingEntity.getPickUpPlate()); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
String popHtml = TemplateUtil.popTemplate("自提配送单", map, html); |
|
|
|
|
PrintPreviewVO printPreviewVO = new PrintPreviewVO(); |
|
|
|
|
printPreviewVO.setTemplateId(template.getId()); |
|
|
|
|
printPreviewVO.setTemplateHtml(popHtml); |
|
|
|
|
result.add(printPreviewVO); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
return result; |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void buildMapByDistrilbutionBillLadingEntity(Map<String, Object> map, List<DistrilbutionBillStockEntity> distrilbutionBillStockEntities, List<DistributionParcelListEntity> distributionParcelListEntities,DistrilbutionBillLadingEntity distrilbutionBillLadingEntity) { |
|
|
|
|
|
|
|
|
|
// 查询订单集合
|
|
|
|
|
Set<Long> ids = new HashSet<Long>(); |
|
|
|
|
for (DistrilbutionBillStockEntity distrilbutionBillStockEntity : distrilbutionBillStockEntities) { |
|
|
|
|
ids.add(distrilbutionBillStockEntity.getStockArticleId()); |
|
|
|
|
} |
|
|
|
|
// 得到所以的订单列表
|
|
|
|
|
List<DistributionStockArticleEntity> distributionStockArticleEntities = distributionStockArticleMapper.selectBatchIds(ids); |
|
|
|
|
// 获取订单中的商城和收货单位
|
|
|
|
|
StringBuilder consigneeUnit = new StringBuilder(); |
|
|
|
|
StringBuilder mailNames = new StringBuilder(); |
|
|
|
|
List<Map<String, Object>> ls = new ArrayList<>(); |
|
|
|
|
|
|
|
|
|
int a = 1; |
|
|
|
|
|
|
|
|
|
// 构建产品明细的表头 -- 这里目前只处理了定制品和有数据的库存品,对于零担 还没有处理
|
|
|
|
|
List<Map<String, Object>> listMapTemp = new ArrayList<>(); |
|
|
|
|
Map<String, Object> m = new HashMap<>(); |
|
|
|
|
for (DistributionParcelListEntity distributionParcelListEntity : distributionParcelListEntities) { |
|
|
|
|
if (m.containsKey(distributionParcelListEntity.getThirdProduct())) { |
|
|
|
|
int o = (int) m.get(distributionParcelListEntity.getThirdProduct()); |
|
|
|
|
o = o + 1; |
|
|
|
|
m.put(distributionParcelListEntity.getThirdProduct(), o); |
|
|
|
|
} else { |
|
|
|
|
m.put(distributionParcelListEntity.getThirdProduct(), 1); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
// 加入到集合中的去 目的是为了获取分类头部
|
|
|
|
|
listMapTemp.add(m); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for (DistributionStockArticleEntity distributionStockArticleEntity : distributionStockArticleEntities) { |
|
|
|
|
|
|
|
|
|
// 需要从所有的包件的
|
|
|
|
|
List<DistributionParcelListEntity> ts = new ArrayList<>(); |
|
|
|
|
for (DistributionParcelListEntity distributionParcelListEntity : distributionParcelListEntities) { |
|
|
|
|
if (distributionParcelListEntity.getStockArticleId().equals(distributionStockArticleEntity.getId())){ |
|
|
|
|
ts.add(distributionParcelListEntity); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (!mailNames.toString().contains(distributionStockArticleEntity.getMallName())) { |
|
|
|
|
if (!mailNames.toString().equals("")) { |
|
|
|
|
mailNames.append(","); |
|
|
|
|
} |
|
|
|
|
mailNames.append(distributionStockArticleEntity.getMallName()); |
|
|
|
|
} |
|
|
|
|
if (!consigneeUnit.toString().contains(distributionStockArticleEntity.getConsigneeUnit())) { |
|
|
|
|
if (!consigneeUnit.toString().equals("")) { |
|
|
|
|
consigneeUnit.append(","); |
|
|
|
|
} |
|
|
|
|
consigneeUnit.append(distributionStockArticleEntity.getConsigneeUnit()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
Map<String, Object> tempMap = new HashMap<>(); |
|
|
|
|
|
|
|
|
|
tempMap.put("序号", a); |
|
|
|
|
tempMap.put("运单号", distributionStockArticleEntity.getWaybillNumber()); |
|
|
|
|
tempMap.put("合同号", distributionStockArticleEntity.getOrderCode()); |
|
|
|
|
String materialNameStr = buildMaterialNameStr(distributionParcelListEntities); |
|
|
|
|
tempMap.put("物料名称", materialNameStr); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 构建产品明细 --对于每一个订单
|
|
|
|
|
buildProductDetail(tempMap, m, ts); |
|
|
|
|
// 查询货物货位
|
|
|
|
|
|
|
|
|
|
//通过订单id和预约id查询对应包件的库位信息
|
|
|
|
|
List<String> orderPackageCodes = ts.stream() |
|
|
|
|
.map(DistributionParcelListEntity::getOrderPackageCode) // 获取每个对象的orderPackageCode
|
|
|
|
|
.collect(Collectors.toList()); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
List<Long> orderPackageIds = ts.stream() |
|
|
|
|
.map(DistributionParcelListEntity::getId) // 获取每个对象的包件ID
|
|
|
|
|
.collect(Collectors.toList()); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
List<String> allocationStrList = distributionParcelListMapper.selectAllocationInforByOrderPackageCode(orderPackageCodes, distrilbutionBillLadingEntity.getWarehouseId()); |
|
|
|
|
String allocationStr = StringUtils.join(allocationStrList, ","); |
|
|
|
|
tempMap.put("货位", allocationStr); |
|
|
|
|
//通过订单id和预约id查询对应包件的备货区信息
|
|
|
|
|
LambdaQueryWrapper<DistributionStockEntity> lambdaQueryWrapper = new LambdaQueryWrapper<>(); |
|
|
|
|
lambdaQueryWrapper.eq(DistributionStockEntity::getBillLadingId,distrilbutionBillLadingEntity.getId()).in(DistributionStockEntity::getParcelListId,orderPackageIds); |
|
|
|
|
List<DistributionStockEntity> distributionStockEntities = distributionStockMapper.selectList(lambdaQueryWrapper); |
|
|
|
|
|
|
|
|
|
Set<String> stockupAreaStrList=distributionStockEntities.stream().map(DistributionStockEntity::getStockupArea).collect(Collectors.toSet()); |
|
|
|
|
|
|
|
|
|
String stockupAreaStr = StringUtils.join(stockupAreaStrList, ","); |
|
|
|
|
tempMap.put("备货区", stockupAreaStr); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ls.add(tempMap); |
|
|
|
|
a++; |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
map.put("收货单单位", consigneeUnit.toString()); |
|
|
|
|
map.put("商场名称", mailNames.toString()); |
|
|
|
|
|
|
|
|
|
map.put("明细", ls); |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 构建分类明细 |
|
|
|
|
* @param tempMap |
|
|
|
|
* @param m |
|
|
|
|
* @param distributionParcelListEntities |
|
|
|
|
*/ |
|
|
|
|
private void buildProductDetail(Map<String, Object> tempMap, Map<String, Object> m, List<DistributionParcelListEntity> distributionParcelListEntities) { |
|
|
|
|
|
|
|
|
|
Set<String> strings = m.keySet(); |
|
|
|
|
|
|
|
|
|
for (String string : strings) { |
|
|
|
|
int count = buildCountNum(string, distributionParcelListEntities); |
|
|
|
|
tempMap.put(string, count); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 统计分类对于件的数量 |
|
|
|
|
* |
|
|
|
|
* @param string |
|
|
|
|
* @param distributionParcelListEntities |
|
|
|
|
* @return |
|
|
|
|
*/ |
|
|
|
|
private int buildCountNum(String string, List<DistributionParcelListEntity> distributionParcelListEntities) { |
|
|
|
|
|
|
|
|
|
int num = 0; |
|
|
|
|
for (DistributionParcelListEntity distributionParcelListEntity : distributionParcelListEntities) { |
|
|
|
|
|
|
|
|
|
if (distributionParcelListEntity.getThirdProduct().equals(string)) { |
|
|
|
|
num++; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
return num; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private String buildMaterialNameStr(List<DistributionParcelListEntity> distributionParcelListEntitie) { |
|
|
|
|
StringBuffer sb = new StringBuffer(); |
|
|
|
|
for (DistributionParcelListEntity distributionParcelListEntity : distributionParcelListEntitie) { |
|
|
|
|
|
|
|
|
|
if(ObjectUtils.isNotNull(distributionParcelListEntity.getMallName())){ |
|
|
|
|
if (!sb.toString().equals("")) { |
|
|
|
|
sb.append(","); |
|
|
|
|
} |
|
|
|
|
sb.append(distributionParcelListEntity.getMaterialName()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
return sb.toString(); |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public void testData(String s) throws Exception { |
|
|
|
|
String[] split = s.split(","); |
|
|
|
@ -5182,27 +5421,27 @@ public class DistributionDeliveryListServiceImpl extends BaseServiceImpl<Distrib
|
|
|
|
|
//如果均不存在则就该判断该货物是否属于当前的配送任务,如果属于则是未装车,如果不属于则此码无效
|
|
|
|
|
List<DistributionParcelListEntity> distributionParcelListEntities = baseMapper.selectPackageListByDeliveryListId(deliveryListEntity.getId()); |
|
|
|
|
boolean flag = false; |
|
|
|
|
if (Func.isNotEmpty(distributionParcelListEntities)){ |
|
|
|
|
if (Func.isNotEmpty(distributionParcelListEntities)) { |
|
|
|
|
List<DistributionParcelListEntity> isHave = distributionParcelListEntities.stream().filter(p -> p.getOrderPackageCode().equals(distrilbutionloadingscanDTO.getBarcode())).collect(Collectors.toList()); |
|
|
|
|
if (Func.isNotEmpty(isHave)){ |
|
|
|
|
if (Func.isNotEmpty(isHave)) { |
|
|
|
|
flag = isHave.size() == 1; |
|
|
|
|
} |
|
|
|
|
}else { |
|
|
|
|
} else { |
|
|
|
|
List<DisStockListDetailEntity> disStockListDetailEntities = baseMapper.selectInventoryListByDeliveryListId(distrilbutionloadingscanDTO.getDeliveryId()); |
|
|
|
|
if (Func.isNotEmpty(disStockListDetailEntities)){ |
|
|
|
|
if (Func.isNotEmpty(disStockListDetailEntities)) { |
|
|
|
|
List<DisStockListDetailEntity> isHaveinven = disStockListDetailEntities.stream().filter(inven -> Func.isNotEmpty(inven.getStockPackageCode()) && inven.getStockPackageCode().equals(distrilbutionloadingscanDTO.getBarcode())).collect(Collectors.toList()); |
|
|
|
|
if (Func.isNotEmpty(isHaveinven)){ |
|
|
|
|
if (Func.isNotEmpty(isHaveinven)) { |
|
|
|
|
flag = isHaveinven.size() == 1; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (flag){ |
|
|
|
|
if (flag) { |
|
|
|
|
//存在该订制品或者库存品包件信息但是未进行装车操作
|
|
|
|
|
return Resp.scanFail("包件未装车","包件未装车"); |
|
|
|
|
}else { |
|
|
|
|
return Resp.scanFail("包件未装车", "包件未装车"); |
|
|
|
|
} else { |
|
|
|
|
//该配送任务查询无该包件信息
|
|
|
|
|
return Resp.scanFail("此配送无该包件","此配送无该包件信息"); |
|
|
|
|
return Resp.scanFail("此配送无该包件", "此配送无该包件信息"); |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
@ -5429,10 +5668,10 @@ public class DistributionDeliveryListServiceImpl extends BaseServiceImpl<Distrib
|
|
|
|
|
if (Func.isNotEmpty(zeroLoadscanEntity)) { |
|
|
|
|
//存在装车数据
|
|
|
|
|
int num = zeroLoadscanEntity.getLoadedNub() - retentionQuantity; |
|
|
|
|
if (num < 0){ |
|
|
|
|
if (num < 0) { |
|
|
|
|
zeroLoadscanEntity.setLoadedNub(0); |
|
|
|
|
zeroLoadscanEntity.setPackageNub(0); |
|
|
|
|
}else { |
|
|
|
|
} else { |
|
|
|
|
zeroLoadscanEntity.setLoadedNub(num); |
|
|
|
|
zeroLoadscanEntity.setLoadedNub(num); |
|
|
|
|
} |
|
|
|
@ -5440,7 +5679,7 @@ public class DistributionDeliveryListServiceImpl extends BaseServiceImpl<Distrib
|
|
|
|
|
//扣减装车数量
|
|
|
|
|
int a = distributionSignforMapper.deductionLoadingPacjageNum(zeroLoadscanEntity.getReservationId(), zeroLoadscanEntity.getDeliveryId(), retentionQuantity); |
|
|
|
|
} |
|
|
|
|
distributionAsyncService.checkRetentionZeroPackageReservationAndDeliveryInfo(reservationId, deliveryId, orderPackageId,orderId); |
|
|
|
|
distributionAsyncService.checkRetentionZeroPackageReservationAndDeliveryInfo(reservationId, deliveryId, orderPackageId, orderId); |
|
|
|
|
return true; |
|
|
|
|
} else { |
|
|
|
|
return false; |
|
|
|
@ -5449,8 +5688,8 @@ public class DistributionDeliveryListServiceImpl extends BaseServiceImpl<Distrib
|
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
}else { |
|
|
|
|
log.error("#############查询出多条零担包件信息:{}",row); |
|
|
|
|
} else { |
|
|
|
|
log.error("#############查询出多条零担包件信息:{}", row); |
|
|
|
|
return false; |
|
|
|
|
|
|
|
|
|
} |
|
|
|
@ -5768,6 +6007,8 @@ public class DistributionDeliveryListServiceImpl extends BaseServiceImpl<Distrib
|
|
|
|
|
template = basicPrintTemplateClient.getPrintTemplate(PrintTemplateStatusConstant.daiqueren_1.getValue()); |
|
|
|
|
} else if (1 == type) { |
|
|
|
|
template = basicPrintTemplateClient.getPrintTemplate(PrintTemplateStatusConstant.daiqueren_12.getValue()); |
|
|
|
|
} else if (3 == type) { |
|
|
|
|
template = basicPrintTemplateClient.getPrintTemplate(PrintTemplateStatusConstant.peisongtask_ziti.getValue()); |
|
|
|
|
} |
|
|
|
|
if (ObjectUtil.isEmpty(template)) { |
|
|
|
|
throw new ServiceException("模板内容未找到"); |
|
|
|
|