|
|
|
@ -134,7 +134,14 @@ import org.springblade.common.constant.reservation.ReservationPackageStatusConst
|
|
|
|
|
import org.springblade.common.constant.stockup.StockAssignStatusConstant; |
|
|
|
|
import org.springblade.common.constant.stockup.StockupStatusConstant; |
|
|
|
|
import org.springblade.common.constant.stockup.StockupTypeConstant; |
|
|
|
|
import org.springblade.common.enums.BizOperationEnums; |
|
|
|
|
import org.springblade.common.enums.PackageTypeEnums; |
|
|
|
|
import org.springblade.common.exception.CustomerException; |
|
|
|
|
import org.springblade.common.model.NodeFanoutMsg; |
|
|
|
|
import org.springblade.common.model.PackageData; |
|
|
|
|
import org.springblade.common.model.workNode.DeliveryOfPickupPlanFeiVO; |
|
|
|
|
import org.springblade.common.model.workNode.DeliveryOfPickupPlanVO; |
|
|
|
|
import org.springblade.common.model.workNode.PickUpByScanVO; |
|
|
|
|
import org.springblade.common.utils.CommonUtil; |
|
|
|
|
import org.springblade.core.log.exception.ServiceException; |
|
|
|
|
import org.springblade.core.mp.base.BaseServiceImpl; |
|
|
|
@ -159,18 +166,7 @@ import javax.annotation.Resource;
|
|
|
|
|
import java.io.Serializable; |
|
|
|
|
import java.math.BigDecimal; |
|
|
|
|
import java.text.SimpleDateFormat; |
|
|
|
|
import java.util.ArrayList; |
|
|
|
|
import java.util.Arrays; |
|
|
|
|
import java.util.Date; |
|
|
|
|
import java.util.HashMap; |
|
|
|
|
import java.util.HashSet; |
|
|
|
|
import java.util.Iterator; |
|
|
|
|
import java.util.List; |
|
|
|
|
import java.util.ListIterator; |
|
|
|
|
import java.util.Map; |
|
|
|
|
import java.util.Objects; |
|
|
|
|
import java.util.Optional; |
|
|
|
|
import java.util.Set; |
|
|
|
|
import java.util.*; |
|
|
|
|
import java.util.concurrent.atomic.AtomicBoolean; |
|
|
|
|
import java.util.concurrent.atomic.AtomicReference; |
|
|
|
|
import java.util.stream.Collectors; |
|
|
|
@ -396,6 +392,17 @@ public class DistrilbutionBillLadingServiceImpl extends BaseServiceImpl<Distrilb
|
|
|
|
|
Boolean las = false; |
|
|
|
|
List<JSONObject> logs = new ArrayList<>(); |
|
|
|
|
BasicdataWarehouseEntity myCurrentWarehouse = basicdataWarehouseClient.getMyCurrentWarehouse(); |
|
|
|
|
// 包条
|
|
|
|
|
List<DistrilbutionBillPackageEntity> packageEntityList = new ArrayList<>(); |
|
|
|
|
//库存品
|
|
|
|
|
List<DistributionDeliveryDetailsEntity> detailsEntities = new ArrayList<>(); |
|
|
|
|
|
|
|
|
|
// 零担
|
|
|
|
|
List<DistributionReservationZeroPackageEntity> zeroPackageEntityList = new ArrayList<>(); |
|
|
|
|
|
|
|
|
|
// 费用
|
|
|
|
|
List<DistributionDeliveryChargeEntity> listEntity = new ArrayList<>(); |
|
|
|
|
|
|
|
|
|
if (Func.isEmpty(myCurrentWarehouse)) { |
|
|
|
|
log.error("自提操作未进行仓库选择"); |
|
|
|
|
return false; |
|
|
|
@ -651,6 +658,7 @@ public class DistrilbutionBillLadingServiceImpl extends BaseServiceImpl<Distrilb
|
|
|
|
|
//新增
|
|
|
|
|
// distrilbutionBillLading.setConditions("1");
|
|
|
|
|
distrilbutionBillLading.setStockupCode(distributionReservationService.bianMa()); |
|
|
|
|
|
|
|
|
|
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss"); |
|
|
|
|
String format = dateFormat.format(new Date()); |
|
|
|
|
distrilbutionBillLading.setPickupBatch("ZT" + format);//批次号
|
|
|
|
@ -661,8 +669,8 @@ public class DistrilbutionBillLadingServiceImpl extends BaseServiceImpl<Distrilb
|
|
|
|
|
// List<DistributionParcelListDTO> parcelLisList = distrilbutionBillLading.getParcelLisList();
|
|
|
|
|
Map<Long, List<DistributionParcelListEntity>> packageMap = null; |
|
|
|
|
if (Func.isNotEmpty(distrilbutionBillLading.getBillPackageEntityList())) { |
|
|
|
|
List<DistrilbutionBillPackageEntity> packageEntityList = distrilbutionBillLading.getBillPackageEntityList(); |
|
|
|
|
List<Long> packageisd = packageEntityList.stream().map(DistrilbutionBillPackageEntity::getParceListId).collect(Collectors.toList()); |
|
|
|
|
List<DistrilbutionBillPackageEntity> packageEntityLists = distrilbutionBillLading.getBillPackageEntityList(); |
|
|
|
|
List<Long> packageisd = packageEntityLists.stream().map(DistrilbutionBillPackageEntity::getParceListId).collect(Collectors.toList()); |
|
|
|
|
List<DistributionParcelListEntity> distributionParcelListEntities = distributionParcelListService.listByIds(packageisd); |
|
|
|
|
if (Func.isNotEmpty(distributionParcelListEntities)) { |
|
|
|
|
packageMap = distributionParcelListEntities.stream().collect(Collectors.groupingBy(DistributionParcelListEntity::getStockArticleId)); |
|
|
|
@ -674,7 +682,6 @@ public class DistrilbutionBillLadingServiceImpl extends BaseServiceImpl<Distrilb
|
|
|
|
|
zeroPackageMap = zeroPackageList.stream().collect(Collectors.groupingBy(DistributionParcelListDTO::getStockArticleId)); |
|
|
|
|
} |
|
|
|
|
this.saveDistrilbutionBillLading(distrilbutionBillLading); |
|
|
|
|
List<DistrilbutionBillPackageEntity> packageEntityList = new ArrayList<>(); |
|
|
|
|
if (StringUtils.isNotBlank(distrilbutionBillLading.getStockArticleId())) { |
|
|
|
|
String[] split = distrilbutionBillLading.getStockArticleId().split(","); |
|
|
|
|
for (String s : split) { |
|
|
|
@ -781,6 +788,7 @@ public class DistrilbutionBillLadingServiceImpl extends BaseServiceImpl<Distrilb
|
|
|
|
|
distributionReservationZeroPackageEntity.setRealityQuantity(0); |
|
|
|
|
distributionReservationZeroPackageEntity.setZeroPackageStatus("1"); |
|
|
|
|
distributionZeroPackageService.save(distributionReservationZeroPackageEntity); |
|
|
|
|
zeroPackageEntityList.add(distributionReservationZeroPackageEntity); |
|
|
|
|
zeroPackageIds.add(distributionReservationZeroPackageEntity.getParcelListId()); |
|
|
|
|
//维护对应零担包件的配送数量
|
|
|
|
|
DistributionParcelNumberEntity distributionParcelNumberEntity = distributionParcelNumberService.getOne(Wrappers.<DistributionParcelNumberEntity>query().lambda() |
|
|
|
@ -873,8 +881,7 @@ public class DistrilbutionBillLadingServiceImpl extends BaseServiceImpl<Distrilb
|
|
|
|
|
log.info("自提添加库存品未填写数量>>>未填写库存品批次号:{}", collect); |
|
|
|
|
throw new CustomerException("请填写正确的库存品数量"); |
|
|
|
|
} |
|
|
|
|
//没有
|
|
|
|
|
List<DistributionDeliveryDetailsEntity> detailsEntities = new ArrayList<>(); |
|
|
|
|
|
|
|
|
|
Boolean finalLas = las; |
|
|
|
|
distrilbutionBillLading.getStockDTOList().forEach(i -> { |
|
|
|
|
DistributionDeliveryDetailsEntity details = new DistributionDeliveryDetailsEntity(); |
|
|
|
@ -918,7 +925,7 @@ public class DistrilbutionBillLadingServiceImpl extends BaseServiceImpl<Distrilb
|
|
|
|
|
.eq(DistributionDeliveryChargeEntity::getBillLading, distrilbutionBillLading.getId()) |
|
|
|
|
.set(DistributionDeliveryChargeEntity::getIsDeleted, 1) |
|
|
|
|
); |
|
|
|
|
List<DistributionDeliveryChargeEntity> listEntity = new ArrayList<>(); |
|
|
|
|
|
|
|
|
|
distrilbutionBillLading.getFei().forEach((k, v) -> { |
|
|
|
|
DistributionDeliveryChargeEntity distributionDeliveryCharge = new DistributionDeliveryChargeEntity(); |
|
|
|
|
distributionDeliveryCharge.setBillLading(distrilbutionBillLading.getId()); |
|
|
|
@ -932,9 +939,137 @@ public class DistrilbutionBillLadingServiceImpl extends BaseServiceImpl<Distrilb
|
|
|
|
|
if (!logs.isEmpty()) { |
|
|
|
|
trunklinePackageTrackLogClient.addPackageTrackLog(logs); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 作业节点推送
|
|
|
|
|
NodeFanoutMsg<DeliveryOfPickupPlanVO> nodeFanoutMsg = buildNodeFanoutMsgForBill(distrilbutionBillLading, packageEntityList, detailsEntities, zeroPackageEntityList, listEntity); |
|
|
|
|
iDistributionNodeWorkService.planOfBill(nodeFanoutMsg, AuthUtil.getUser()); |
|
|
|
|
|
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private NodeFanoutMsg<DeliveryOfPickupPlanVO> buildNodeFanoutMsgForBill(DistrilbutionBillLadingDTO distrilbutionBillLading, List<DistrilbutionBillPackageEntity> packageEntityList, List<DistributionDeliveryDetailsEntity> detailsEntities, List<DistributionReservationZeroPackageEntity> zeroPackageEntityList, List<DistributionDeliveryChargeEntity> listEntity) { |
|
|
|
|
|
|
|
|
|
if (distrilbutionBillLading.getId() == null) { |
|
|
|
|
// 增加
|
|
|
|
|
return buildNodeFanoutMsgForBillByOption(distrilbutionBillLading, packageEntityList, detailsEntities, zeroPackageEntityList, listEntity, BizOperationEnums.ADD); |
|
|
|
|
} else { |
|
|
|
|
// 修改
|
|
|
|
|
return buildNodeFanoutMsgForBillByOption(distrilbutionBillLading, packageEntityList, detailsEntities, zeroPackageEntityList, listEntity, BizOperationEnums.MODIFY); |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private NodeFanoutMsg<DeliveryOfPickupPlanVO> buildNodeFanoutMsgForBillByOption(DistrilbutionBillLadingDTO distrilbutionBillLading, List<DistrilbutionBillPackageEntity> packageEntityList, List<DistributionDeliveryDetailsEntity> detailsEntities, List<DistributionReservationZeroPackageEntity> zeroPackageEntityList, List<DistributionDeliveryChargeEntity> listEntity, BizOperationEnums bizOperation) { |
|
|
|
|
|
|
|
|
|
NodeFanoutMsg<org.springblade.common.model.workNode.DeliveryOfPickupPlanVO> nodeFanoutMsg = new NodeFanoutMsg(); |
|
|
|
|
nodeFanoutMsg.setBizOperation(bizOperation); |
|
|
|
|
nodeFanoutMsg.setNode(WorkNodeEnums.PLAN_BILLOFLADING); |
|
|
|
|
nodeFanoutMsg.setWarehouse(distrilbutionBillLading.getWarehouse()); |
|
|
|
|
nodeFanoutMsg.setWarehouseId(distrilbutionBillLading.getWarehouseId()); |
|
|
|
|
nodeFanoutMsg.setOperator(AuthUtil.getNickName()); |
|
|
|
|
nodeFanoutMsg.setOperatorTime(new Date()); |
|
|
|
|
|
|
|
|
|
DeliveryOfPickupPlanVO deliveryOfPickupPlanVO = new DeliveryOfPickupPlanVO(); |
|
|
|
|
deliveryOfPickupPlanVO.setPickUpTime(distrilbutionBillLading.getPickUpTime()); |
|
|
|
|
deliveryOfPickupPlanVO.setConsignee(distrilbutionBillLading.getConsignee()); |
|
|
|
|
deliveryOfPickupPlanVO.setConsigneeUnit(distrilbutionBillLading.getConsigneeUnit()); |
|
|
|
|
deliveryOfPickupPlanVO.setConsigneePhone(distrilbutionBillLading.getConsigneePhone()); |
|
|
|
|
deliveryOfPickupPlanVO.setDeliveryDocument(distrilbutionBillLading.getDeliveryDocument()); |
|
|
|
|
deliveryOfPickupPlanVO.setPickUpPlate(distrilbutionBillLading.getPickUpPlate()); |
|
|
|
|
deliveryOfPickupPlanVO.setCertificateType(distrilbutionBillLading.getCertificateType()); |
|
|
|
|
deliveryOfPickupPlanVO.setRemark(distrilbutionBillLading.getRemark()); |
|
|
|
|
deliveryOfPickupPlanVO.setPickupBatch(deliveryOfPickupPlanVO.getPickupBatch()); |
|
|
|
|
|
|
|
|
|
List<PackageData> packageDataList = new ArrayList<>(); |
|
|
|
|
|
|
|
|
|
buildPackageByBillPackageExtracted(packageEntityList, packageDataList); |
|
|
|
|
|
|
|
|
|
buildPackageDataByStockExtracted(detailsEntities, packageDataList); |
|
|
|
|
|
|
|
|
|
builkPackageDataByZero(zeroPackageEntityList, packageDataList); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
deliveryOfPickupPlanVO.setPackageDataList(packageDataList); |
|
|
|
|
|
|
|
|
|
List<DeliveryOfPickupPlanFeiVO> deliveryOfPickupPlanFeiVOList = new ArrayList<>(); |
|
|
|
|
|
|
|
|
|
listEntity.forEach(t -> { |
|
|
|
|
DeliveryOfPickupPlanFeiVO deliveryOfPickupPlanFeiVO = new DeliveryOfPickupPlanFeiVO(); |
|
|
|
|
deliveryOfPickupPlanFeiVO.setCost(t.getCost()); |
|
|
|
|
String deliveryType = DictBizCache.getValue("deliveryType", deliveryOfPickupPlanFeiVO.getCost()); |
|
|
|
|
deliveryOfPickupPlanFeiVO.setCostName(deliveryType); |
|
|
|
|
deliveryOfPickupPlanFeiVO.setMoney(t.getMoney()); |
|
|
|
|
deliveryOfPickupPlanFeiVOList.add(deliveryOfPickupPlanFeiVO); |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
deliveryOfPickupPlanVO.setDeliveryOfPickupPlanFeiVOList(deliveryOfPickupPlanFeiVOList); |
|
|
|
|
|
|
|
|
|
nodeFanoutMsg.setMain(deliveryOfPickupPlanVO); |
|
|
|
|
return nodeFanoutMsg; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void builkPackageDataByZero(List<DistributionReservationZeroPackageEntity> zeroPackageEntityList, List<PackageData> packageDataList) { |
|
|
|
|
zeroPackageEntityList.forEach(t -> { |
|
|
|
|
|
|
|
|
|
PackageData packageData = new PackageData(); |
|
|
|
|
packageData.setPackageType(PackageTypeEnums.LTL); |
|
|
|
|
packageData.setNumber(t.getQuantity()); |
|
|
|
|
DistributionParcelListEntity byId = distributionParcelListService.getById(t.getParcelListId()); |
|
|
|
|
if (Func.isNotEmpty(byId)) { |
|
|
|
|
packageData.setOrderCode(byId.getOrderCode()); |
|
|
|
|
if (Func.isEmpty(byId.getBrandName())) { |
|
|
|
|
DistributionStockArticleEntity stockArticleEntity = distributionStockArticleService.getById(byId.getStockArticleId()); |
|
|
|
|
if (ObjectUtils.isNotNull(stockArticleEntity)) { |
|
|
|
|
packageData.setBrand(stockArticleEntity.getBrand()); |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
packageData.setBrand(byId.getBrandName()); |
|
|
|
|
} |
|
|
|
|
packageData.setWaybillNumber(byId.getWaybillNumber()); |
|
|
|
|
} |
|
|
|
|
packageData.setProductName(t.getCategoryName()); |
|
|
|
|
packageDataList.add(packageData); |
|
|
|
|
|
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void buildPackageDataByStockExtracted(List<DistributionDeliveryDetailsEntity> detailsEntities, List<PackageData> packageDataList) { |
|
|
|
|
detailsEntities.forEach(t -> { |
|
|
|
|
|
|
|
|
|
PackageData packageData = new PackageData(); |
|
|
|
|
Long stockListId = t.getStockListId(); |
|
|
|
|
DistributionStockListEntity byId = distributionStockListService.getById(stockListId); |
|
|
|
|
if (byId != null) { |
|
|
|
|
packageData.setPickupBatch(byId.getIncomingBatch()); |
|
|
|
|
packageData.setBrand(byId.getBrandName()); |
|
|
|
|
packageData.setMaterialName(byId.getDescriptionGoods()); |
|
|
|
|
packageData.setMallName(byId.getMallName()); |
|
|
|
|
packageData.setMaterialCode(byId.getCargoNumber()); |
|
|
|
|
packageData.setNumber(t.getQuantity()); |
|
|
|
|
packageData.setPackageType(PackageTypeEnums.INV); |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
packageDataList.add(packageData); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void buildPackageByBillPackageExtracted(List<DistrilbutionBillPackageEntity> packageEntityList, List<PackageData> packageDataList) { |
|
|
|
|
packageEntityList.forEach(t -> { |
|
|
|
|
PackageData packageData = new PackageData(); |
|
|
|
|
packageData.setPackageCode(t.getPacketBarCode()); |
|
|
|
|
packageData.setNumber(1); |
|
|
|
|
packageData.setPackageType(PackageTypeEnums.CMP); |
|
|
|
|
packageDataList.add(packageData); |
|
|
|
|
|
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private void sendFactoryPlan(List<DistributionParcelListEntity> parcelListEntities, BasicdataWarehouseEntity myCurrentWarehouse, DistrilbutionBillLadingDTO distrilbutionBillLading) { |
|
|
|
|
// 包件按品牌分组
|
|
|
|
|
try { |
|
|
|
@ -1184,7 +1319,7 @@ public class DistrilbutionBillLadingServiceImpl extends BaseServiceImpl<Distrilb
|
|
|
|
|
List<String> orderPackageCodeList = ladingScanEntities.stream().map(DistributionBillLadingScanEntity::getPacketBarCode).collect(Collectors.toList()); |
|
|
|
|
for (String orderPackageCode : orderPackageCodeList) { |
|
|
|
|
builder.append(orderPackageCode).append(","); |
|
|
|
|
String content = "包件在" + myCurrentWarehouse.getName() + "由" + AuthUtil.getNickName() + "后台签收,自提任务号:" + billLadingEntity.getPickupBatch() ; |
|
|
|
|
String content = "包件在" + myCurrentWarehouse.getName() + "由" + AuthUtil.getNickName() + "后台签收,自提任务号:" + billLadingEntity.getPickupBatch(); |
|
|
|
|
JSONObject aaa = handleLogJSONObject(myCurrentWarehouse, AuthUtil.getUser(), orderPackageCode, content, WorkNodeEnums.SIGN_BILLOFLADING.getCode()); |
|
|
|
|
logList.add(aaa); |
|
|
|
|
// orderPackageCodes.add(orderPackageCode);
|
|
|
|
@ -1198,10 +1333,10 @@ public class DistrilbutionBillLadingServiceImpl extends BaseServiceImpl<Distrilb
|
|
|
|
|
// warehouseUpdownTypeClient.downPackageAndDelTrayAndIsUpdate(collect, myCurrentWarehouse.getId(), "后台PC自提签收下架", false);
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
if (Func.isNotEmpty(builder)){ |
|
|
|
|
if (Func.isNotEmpty(builder)) { |
|
|
|
|
String string = builder.deleteCharAt(builder.length() - 1).toString(); |
|
|
|
|
|
|
|
|
|
if(StringUtils.isNotBlank(string)){ |
|
|
|
|
if (StringUtils.isNotBlank(string)) { |
|
|
|
|
warehouseUpdownTypeClient.downPackageOrDelTray(string, myCurrentWarehouse.getId(), "签收下架解托"); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
@ -1277,7 +1412,7 @@ public class DistrilbutionBillLadingServiceImpl extends BaseServiceImpl<Distrilb
|
|
|
|
|
// 转换仓库ID
|
|
|
|
|
// modifyWarehouseId(delivery);
|
|
|
|
|
|
|
|
|
|
Map<String,Object> map = oldSystemDataPushClient.pushOldSystemSignInfo(delivery); |
|
|
|
|
Map<String, Object> map = oldSystemDataPushClient.pushOldSystemSignInfo(delivery); |
|
|
|
|
Boolean flag = (Boolean) map.get("result"); |
|
|
|
|
return flag; |
|
|
|
|
} catch (Exception e) { |
|
|
|
@ -1468,7 +1603,8 @@ public class DistrilbutionBillLadingServiceImpl extends BaseServiceImpl<Distrilb
|
|
|
|
|
// ---------------------------------2023-09-09 包件签收调整---------------------------------------------------------------
|
|
|
|
|
String singleTime = simpleDateFormat.format(new Date()); |
|
|
|
|
// 推送自提作业节点数据
|
|
|
|
|
sendNodeWorkDataBroadcast(parcelListEntity, id, singleTime, myCurrentWarehouse); |
|
|
|
|
billLog(parcelListEntity, id, singleTime, myCurrentWarehouse.getName()); |
|
|
|
|
|
|
|
|
|
packageLockIds.add(parcelListEntity.getId()); |
|
|
|
|
} |
|
|
|
|
break; |
|
|
|
@ -2417,7 +2553,7 @@ public class DistrilbutionBillLadingServiceImpl extends BaseServiceImpl<Distrilb
|
|
|
|
|
records.forEach(i -> { |
|
|
|
|
if (groupedEntities != null) { |
|
|
|
|
List<DistributionDeliveryChargeEntity> list = groupedEntities.get(i.getId()); |
|
|
|
|
if (!Func.isEmpty(groupedEntities.get(i.getId()))){ |
|
|
|
|
if (!Func.isEmpty(groupedEntities.get(i.getId()))) { |
|
|
|
|
list.forEach(ii -> ii.setCostName(DictBizCache.getValue(DictBizConstant.DELIVERY_COST, ii.getCost()))); |
|
|
|
|
i.setList(list); |
|
|
|
|
} |
|
|
|
@ -3146,7 +3282,6 @@ public class DistrilbutionBillLadingServiceImpl extends BaseServiceImpl<Distrilb
|
|
|
|
|
distributionBillLadingScan.setScanUser(AuthUtil.getUser().getNickName()); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return processScan(type, distributionBillLadingScan.getBillLadingId(), coding, distributionBillLadingScan, myCurrentWarehouse, billLadingEntity1.getPickupBatch()); |
|
|
|
|
|
|
|
|
|
// return Resp.scanSuccess("签收成功", "签收成功");
|
|
|
|
@ -3191,6 +3326,12 @@ public class DistrilbutionBillLadingServiceImpl extends BaseServiceImpl<Distrilb
|
|
|
|
|
List<DistrilbutionBillLadingInventoryAppVO> inventoryAppVO = distributionDeliveryDetailsService.listCode(String.valueOf(billLadingId)); |
|
|
|
|
List<JSONObject> aaa = new ArrayList<>(); |
|
|
|
|
|
|
|
|
|
BasicdataWarehouseEntity myCurrentWarehouse = basicdataWarehouseClient.getMyCurrentWarehouse(); |
|
|
|
|
if (ObjectUtils.isNull(myCurrentWarehouse)) { |
|
|
|
|
return Resp.scanFail("请选择仓库!", "请选择仓库!"); |
|
|
|
|
} |
|
|
|
|
DistrilbutionBillLadingEntity billLadingEntity = this.getById((Serializable) billLadingId); |
|
|
|
|
|
|
|
|
|
if (inventoryAppVO == null) { |
|
|
|
|
return Resp.scanFail("包件信息不存在", "包件信息不存在"); |
|
|
|
|
} |
|
|
|
@ -3224,6 +3365,7 @@ public class DistrilbutionBillLadingServiceImpl extends BaseServiceImpl<Distrilb
|
|
|
|
|
if (matchedPackage == null) { |
|
|
|
|
return Resp.scanFail("系统无此编码!", "系统无此编码"); |
|
|
|
|
} |
|
|
|
|
List<DistributionBillLadingScanEntity> billLadingScanEntities = new ArrayList<>(); |
|
|
|
|
|
|
|
|
|
distributionBillLadingScan.setPacketBarCode(coding); |
|
|
|
|
distributionBillLadingScan.setStockListId(matchedPackage.getStockListId()); |
|
|
|
@ -3234,6 +3376,7 @@ public class DistrilbutionBillLadingServiceImpl extends BaseServiceImpl<Distrilb
|
|
|
|
|
trunklinePackageTrackLogClient.addPackageTrackLog(aaa); |
|
|
|
|
|
|
|
|
|
distributionBillLadingScanService.save(distributionBillLadingScan); |
|
|
|
|
billLadingScanEntities.add(distributionBillLadingScan); |
|
|
|
|
distributionStockListMapper.deductionQuantityStock(matchedPackage.getStockListId(), matchedPackage.getNum()); |
|
|
|
|
|
|
|
|
|
Map<Long, List<DistrilbutionBillLadingInventoryAppVO>> stockListMap = inventoryAppVO.stream().collect(Collectors.groupingBy(DistrilbutionBillLadingInventoryAppVO::getStockListId)); |
|
|
|
@ -3257,6 +3400,11 @@ public class DistrilbutionBillLadingServiceImpl extends BaseServiceImpl<Distrilb
|
|
|
|
|
distributionAsyncService.getInventorySelfPickup(distrilbutionBillLadingInventoryAppVO.getStockArticleId()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
BladeUser user = AuthUtil.getUser(); |
|
|
|
|
// 推送作业节点
|
|
|
|
|
NodeFanoutMsg<PickUpByScanVO> nodeFanoutMsg = buildNodeFanoutMsgBySign(billLadingEntity, billLadingScanEntities, user, myCurrentWarehouse); |
|
|
|
|
iDistributionNodeWorkService.signByBill(nodeFanoutMsg, user); |
|
|
|
|
|
|
|
|
|
// 其他逻辑...
|
|
|
|
|
return Resp.scanSuccess("签收成功", "签收成功"); |
|
|
|
|
} |
|
|
|
@ -3264,6 +3412,9 @@ public class DistrilbutionBillLadingServiceImpl extends BaseServiceImpl<Distrilb
|
|
|
|
|
|
|
|
|
|
private Resp handleInventoryProduct(String type, Long billLadingId, String coding, DistributionBillLadingScanEntity distributionBillLadingScan) { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
List<DistributionBillLadingScanEntity> billLadingScanEntities = new ArrayList<>(); |
|
|
|
|
|
|
|
|
|
BasicdataWarehouseEntity myCurrentWarehouse = basicdataWarehouseClient.getMyCurrentWarehouse(); |
|
|
|
|
if (ObjectUtils.isNull(myCurrentWarehouse)) { |
|
|
|
|
return Resp.scanFail("请选择仓库!", "请选择仓库!"); |
|
|
|
@ -3360,7 +3511,7 @@ public class DistrilbutionBillLadingServiceImpl extends BaseServiceImpl<Distrilb
|
|
|
|
|
//查询订单包件数量签收的信息
|
|
|
|
|
DistributionStockArticleEntity one = distributionStockArticleEntityList.stream().filter(s -> s.getId().equals(so.getStockArticleId())).findFirst().orElse(null); |
|
|
|
|
|
|
|
|
|
DistributionStockArticleEntity upObj =new DistributionStockArticleEntity(); |
|
|
|
|
DistributionStockArticleEntity upObj = new DistributionStockArticleEntity(); |
|
|
|
|
upObj.setId(so.getStockArticleId()); |
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -3413,22 +3564,8 @@ public class DistrilbutionBillLadingServiceImpl extends BaseServiceImpl<Distrilb
|
|
|
|
|
packageLockIds.add(distributionParcelListEntity.getId()); |
|
|
|
|
String signTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.sss").format(new Date()); |
|
|
|
|
|
|
|
|
|
sendNodeWorkDataBroadcast(distributionParcelListEntity, billLadingId, signTime, myCurrentWarehouse); |
|
|
|
|
billLog(distributionParcelListEntity, billLadingId, signTime, myCurrentWarehouse.getName()); |
|
|
|
|
|
|
|
|
|
//推送梦天
|
|
|
|
|
// if (distributionParcelListEntity.getBrandName().equals("梦天")){
|
|
|
|
|
// Map<String, Object> pushMap = new HashMap<>();
|
|
|
|
|
// pushMap.put("orderPackageCode", coding);
|
|
|
|
|
// pushMap.put("operationTime", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
|
|
|
|
|
// pushMap.put("distributionContactId", billLadingId);
|
|
|
|
|
// pushMap.put("destinationWarehouse", myCurrentWarehouse.getName());
|
|
|
|
|
//
|
|
|
|
|
// rabbitTemplate.convertAndSend(RabbitConstant.MT_BUSINESS_DATA_2_FACTORY_EXCHANGE, RabbitConstant.MT_BUSINESS_DATA_2_FACTORY_ROUTING, pushMap, message -> {
|
|
|
|
|
// message.getMessageProperties()
|
|
|
|
|
// .setHeader("x-delay", 3000);
|
|
|
|
|
// return message;
|
|
|
|
|
// });
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -3437,16 +3574,15 @@ public class DistrilbutionBillLadingServiceImpl extends BaseServiceImpl<Distrilb
|
|
|
|
|
if (n.get()) { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
distributionBillLadingScanService.save(distributionBillLadingScan); |
|
|
|
|
billLadingScanEntities.add(distributionBillLadingScan); |
|
|
|
|
//进行下架解托
|
|
|
|
|
if(StringUtils.isNotBlank(distributionBillLadingScan.getPacketBarCode())){ |
|
|
|
|
warehouseUpdownTypeClient.downPackageOrDelTray(distributionBillLadingScan.getPacketBarCode(),myCurrentWarehouse.getId(),"自提下架解托"); |
|
|
|
|
if (StringUtils.isNotBlank(distributionBillLadingScan.getPacketBarCode())) { |
|
|
|
|
warehouseUpdownTypeClient.downPackageOrDelTray(distributionBillLadingScan.getPacketBarCode(), myCurrentWarehouse.getId(), "自提下架解托"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
String content = "包件在" + myCurrentWarehouse.getName() + "由" + AuthUtil.getNickName() + "扫描签收,自提任务号:" + billLadingEntity.getPickupBatch() ; |
|
|
|
|
String content = "包件在" + myCurrentWarehouse.getName() + "由" + AuthUtil.getNickName() + "扫描签收,自提任务号:" + billLadingEntity.getPickupBatch(); |
|
|
|
|
//日志记录
|
|
|
|
|
List<JSONObject> logList = new ArrayList<>(); |
|
|
|
|
JSONObject aaa = handleLogJSONObject(myCurrentWarehouse, AuthUtil.getUser(), distributionBillLadingScan.getPacketBarCode(), content, WorkNodeEnums.SIGN_BILLOFLADING.getCode()); |
|
|
|
@ -3481,24 +3617,108 @@ public class DistrilbutionBillLadingServiceImpl extends BaseServiceImpl<Distrilb
|
|
|
|
|
redis.setEx("warehouseId:" + myCurrentWarehouse.getId() + "pickupBatch:" + billLadingEntity.getPickupBatch() + "orderPackageCode:", packageLockIds, 60L); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
BladeUser user = AuthUtil.getUser(); |
|
|
|
|
// 推送作业节点
|
|
|
|
|
NodeFanoutMsg<PickUpByScanVO> nodeFanoutMsg = buildNodeFanoutMsgBySign(billLadingEntity, billLadingScanEntities, user, myCurrentWarehouse); |
|
|
|
|
iDistributionNodeWorkService.signByBill(nodeFanoutMsg, user); |
|
|
|
|
|
|
|
|
|
return Resp.scanSuccess("签收成功", "签收成功"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 自提签收节点作业推送 |
|
|
|
|
* |
|
|
|
|
* @param parcelListEntity |
|
|
|
|
* @param billLadingId |
|
|
|
|
* @param singleTime |
|
|
|
|
* @param myCurrentWarehouse |
|
|
|
|
*/ |
|
|
|
|
private void sendNodeWorkDataBroadcast(DistributionParcelListEntity parcelListEntity, Long billLadingId, String singleTime, BasicdataWarehouseEntity myCurrentWarehouse) { |
|
|
|
|
private NodeFanoutMsg<PickUpByScanVO> buildNodeFanoutMsgBySign(DistrilbutionBillLadingEntity billLadingEntity, List<DistributionBillLadingScanEntity> billLadingScanEntities, BladeUser user, BasicdataWarehouseEntity myCurrentWarehouse) { |
|
|
|
|
NodeFanoutMsg<org.springblade.common.model.workNode.PickUpByScanVO> nodeFanoutMsg = new NodeFanoutMsg(); |
|
|
|
|
nodeFanoutMsg.setBizOperation(BizOperationEnums.ADD); |
|
|
|
|
nodeFanoutMsg.setNode(WorkNodeEnums.SIGN_BILLOFLADING); |
|
|
|
|
nodeFanoutMsg.setWarehouse(myCurrentWarehouse.getName()); |
|
|
|
|
nodeFanoutMsg.setWarehouseId(myCurrentWarehouse.getId()); |
|
|
|
|
nodeFanoutMsg.setOperator(AuthUtil.getNickName()); |
|
|
|
|
nodeFanoutMsg.setOperatorTime(new Date()); |
|
|
|
|
nodeFanoutMsg.setTenantId(myCurrentWarehouse.getTenantId()); |
|
|
|
|
PickUpByScanVO pickUpByScanVO = new PickUpByScanVO(); |
|
|
|
|
pickUpByScanVO.setPickupBatch(billLadingEntity.getPickupBatch()); |
|
|
|
|
|
|
|
|
|
List<PackageData> packageDataList = new ArrayList<>(); |
|
|
|
|
pickUpByScanVO.setPackageDataList(packageDataList); |
|
|
|
|
billLadingScanEntities.forEach(t -> { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
PackageData packageData = new PackageData(); |
|
|
|
|
|
|
|
|
|
if ("1".equals(t.getMaterialType())) { |
|
|
|
|
// 库存
|
|
|
|
|
Long stockListId = t.getStockListId(); |
|
|
|
|
DistributionStockListEntity byId = distributionStockListService.getById(stockListId); |
|
|
|
|
if (byId != null) { |
|
|
|
|
packageData.setPickupBatch(byId.getIncomingBatch()); |
|
|
|
|
packageData.setBrand(byId.getBrandName()); |
|
|
|
|
packageData.setMaterialName(byId.getDescriptionGoods()); |
|
|
|
|
packageData.setMallName(byId.getMallName()); |
|
|
|
|
packageData.setMaterialCode(byId.getCargoNumber()); |
|
|
|
|
packageData.setNumber(t.getQuantity()); |
|
|
|
|
packageData.setPackageType(PackageTypeEnums.INV); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} else if ("2".equals(t.getMaterialType())) { |
|
|
|
|
//定制品
|
|
|
|
|
packageData.setPackageCode(t.getPacketBarCode()); |
|
|
|
|
packageData.setNumber(1); |
|
|
|
|
packageData.setPackageType(PackageTypeEnums.CMP); |
|
|
|
|
} else { |
|
|
|
|
// 零担
|
|
|
|
|
packageData.setPackageType(PackageTypeEnums.LTL); |
|
|
|
|
packageData.setNumber(t.getQuantity()); |
|
|
|
|
DistributionParcelListEntity byId = distributionParcelListService.getById(t.getParcelListId()); |
|
|
|
|
if (Func.isNotEmpty(byId)) { |
|
|
|
|
packageData.setOrderCode(byId.getOrderCode()); |
|
|
|
|
if (Func.isEmpty(byId.getBrandName())) { |
|
|
|
|
DistributionStockArticleEntity stockArticleEntity = distributionStockArticleService.getById(byId.getStockArticleId()); |
|
|
|
|
if (ObjectUtils.isNotNull(stockArticleEntity)) { |
|
|
|
|
packageData.setBrand(stockArticleEntity.getBrand()); |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
packageData.setBrand(byId.getBrandName()); |
|
|
|
|
} |
|
|
|
|
packageData.setWaybillNumber(byId.getWaybillNumber()); |
|
|
|
|
packageData.setProductName(byId.getFirsts()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
packageDataList.add(packageData); |
|
|
|
|
}); |
|
|
|
|
nodeFanoutMsg.setMain(pickUpByScanVO); |
|
|
|
|
return nodeFanoutMsg; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private void billLog(DistributionParcelListEntity parcelListEntity, Long taskId, String operationTime, String destinationWarehouse) { |
|
|
|
|
try { |
|
|
|
|
iDistributionNodeWorkService.billofladingSignfor(parcelListEntity, billLadingId, singleTime, myCurrentWarehouse.getName()); |
|
|
|
|
cn.hutool.json.JSONObject main = new cn.hutool.json.JSONObject(); |
|
|
|
|
main.set("boId", taskId.toString()); |
|
|
|
|
NodePushMsg nodePushMsg = NodePushMsg.builder() |
|
|
|
|
.operator(AuthUtil.getNickName()) |
|
|
|
|
.operatorTime(new Date()) |
|
|
|
|
.warehouse(parcelListEntity.getWarehouse()) |
|
|
|
|
.startWarehouse(parcelListEntity.getSendWarehouseName()) |
|
|
|
|
.endWarehouse(parcelListEntity.getAcceptWarehouseName()) |
|
|
|
|
.address("在【" + parcelListEntity.getWarehouse() + "】签收") |
|
|
|
|
.brand(BrandEnums.getByValue(parcelListEntity.getBrandName())) |
|
|
|
|
.node(WorkNodeEnums.SIGN_BILLOFLADING) |
|
|
|
|
.main(JSONUtil.toJsonStr(main)) |
|
|
|
|
.content(Collections.singletonList(PushData.builder() |
|
|
|
|
.packageCode(parcelListEntity.getOrderPackageCode()) |
|
|
|
|
.warehouseName(parcelListEntity.getWarehouse()) |
|
|
|
|
.waybillNumber(parcelListEntity.getWaybillNumber()) |
|
|
|
|
.orderCode(parcelListEntity.getOrderCode()) |
|
|
|
|
.build())) |
|
|
|
|
.build(); |
|
|
|
|
factoryDataMessageSender.sendNodeDataByBrand(nodePushMsg); |
|
|
|
|
} catch (Exception e) { |
|
|
|
|
// throw new RuntimeException(e);
|
|
|
|
|
log.error(">>>> 自提签收作业节点广播报错", e); |
|
|
|
|
log.error("自提扫码广播:", e); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
@ -3573,137 +3793,137 @@ public class DistrilbutionBillLadingServiceImpl extends BaseServiceImpl<Distrilb
|
|
|
|
|
String[] split = ids.split(","); |
|
|
|
|
BasicdataWarehouseEntity myCurrentWarehouse = basicdataWarehouseClient.getMyCurrentWarehouse(); |
|
|
|
|
if (Func.isEmpty(myCurrentWarehouse)) { |
|
|
|
|
return R.fail(403,"未授权!!!"); |
|
|
|
|
return R.fail(403, "未授权!!!"); |
|
|
|
|
} |
|
|
|
|
Set<Long> parcelListIds = new HashSet<>(); |
|
|
|
|
for (int i = 0; i < split.length; i++) { |
|
|
|
|
String s = split[i]; |
|
|
|
|
//查询是不是上传图片
|
|
|
|
|
List<DistributionPrintEntity> list1 = distributionPrintService.list(Wrappers.<DistributionPrintEntity>query().lambda() |
|
|
|
|
.eq(DistributionPrintEntity::getBillLadingId, s) |
|
|
|
|
); |
|
|
|
|
if (list1.isEmpty()) { |
|
|
|
|
return R.fail("请上传签收图片!!"); |
|
|
|
|
} |
|
|
|
|
int count = (int) list1.stream().filter(ii -> "1".equals(ii.getGenre().toString())).count(); |
|
|
|
|
int count1 = (int) list1.stream().filter(ii -> "2".equals(ii.getGenre().toString())).count(); |
|
|
|
|
int count2 = (int) list1.stream().filter(ii -> "3".equals(ii.getGenre().toString())).count(); |
|
|
|
|
if (count1 < 1 || count < 1 || count2 < 1) { |
|
|
|
|
return R.fail("请上传完整签收图片!!"); |
|
|
|
|
} |
|
|
|
|
List<DistributionBillLadingScanEntity> ladingScanEntities = distributionBillLadingScanService.list(Wrappers.<DistributionBillLadingScanEntity>query().lambda() |
|
|
|
|
.eq(DistributionBillLadingScanEntity::getBillLadingId, Long.parseLong(s)) |
|
|
|
|
); |
|
|
|
|
if (ladingScanEntities.isEmpty()){ |
|
|
|
|
return R.fail("无签收数据!!"); |
|
|
|
|
} |
|
|
|
|
for (int i = 0; i < split.length; i++) { |
|
|
|
|
String s = split[i]; |
|
|
|
|
//查询是不是上传图片
|
|
|
|
|
List<DistributionPrintEntity> list1 = distributionPrintService.list(Wrappers.<DistributionPrintEntity>query().lambda() |
|
|
|
|
.eq(DistributionPrintEntity::getBillLadingId, s) |
|
|
|
|
); |
|
|
|
|
if (list1.isEmpty()) { |
|
|
|
|
return R.fail("请上传签收图片!!"); |
|
|
|
|
} |
|
|
|
|
int count = (int) list1.stream().filter(ii -> "1".equals(ii.getGenre().toString())).count(); |
|
|
|
|
int count1 = (int) list1.stream().filter(ii -> "2".equals(ii.getGenre().toString())).count(); |
|
|
|
|
int count2 = (int) list1.stream().filter(ii -> "3".equals(ii.getGenre().toString())).count(); |
|
|
|
|
if (count1 < 1 || count < 1 || count2 < 1) { |
|
|
|
|
return R.fail("请上传完整签收图片!!"); |
|
|
|
|
} |
|
|
|
|
List<DistributionBillLadingScanEntity> ladingScanEntities = distributionBillLadingScanService.list(Wrappers.<DistributionBillLadingScanEntity>query().lambda() |
|
|
|
|
.eq(DistributionBillLadingScanEntity::getBillLadingId, Long.parseLong(s)) |
|
|
|
|
); |
|
|
|
|
if (ladingScanEntities.isEmpty()) { |
|
|
|
|
return R.fail("无签收数据!!"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
//修改提货状态
|
|
|
|
|
DistrilbutionBillLadingEntity billLadingEntity = new DistrilbutionBillLadingEntity(); |
|
|
|
|
billLadingEntity.setConditions(BillLadingStatusConstant.yiqianshou.getValue()); |
|
|
|
|
billLadingEntity.setId(Long.parseLong(s)); |
|
|
|
|
billLadingEntity.setExamineUserName(AuthUtil.getNickName()); |
|
|
|
|
billLadingEntity.setExamineUserId(AuthUtil.getUserId()); |
|
|
|
|
this.updateById(billLadingEntity); |
|
|
|
|
DistrilbutionBillLadingEntity distrilbutionBillLadingEntity = baseMapper.selectById(billLadingEntity.getId()); |
|
|
|
|
//完成备货状态
|
|
|
|
|
distributionStockupInfoService.maintenanceStockUp(Long.parseLong(s), 2); |
|
|
|
|
//查询自提单是否完成扫描
|
|
|
|
|
Integer integer = this.selectBillLadingPlanNum(Long.parseLong(s)); |
|
|
|
|
if (Func.isNotEmpty(ladingScanEntities)) { |
|
|
|
|
int sum = ladingScanEntities.stream().filter(f->f.getMaterialType().equals("2")).mapToInt(DistributionBillLadingScanEntity::getQuantity).sum(); |
|
|
|
|
//修改提货状态
|
|
|
|
|
DistrilbutionBillLadingEntity billLadingEntity = new DistrilbutionBillLadingEntity(); |
|
|
|
|
billLadingEntity.setConditions(BillLadingStatusConstant.yiqianshou.getValue()); |
|
|
|
|
billLadingEntity.setId(Long.parseLong(s)); |
|
|
|
|
billLadingEntity.setExamineUserName(AuthUtil.getNickName()); |
|
|
|
|
billLadingEntity.setExamineUserId(AuthUtil.getUserId()); |
|
|
|
|
this.updateById(billLadingEntity); |
|
|
|
|
DistrilbutionBillLadingEntity distrilbutionBillLadingEntity = baseMapper.selectById(billLadingEntity.getId()); |
|
|
|
|
//完成备货状态
|
|
|
|
|
distributionStockupInfoService.maintenanceStockUp(Long.parseLong(s), 2); |
|
|
|
|
//查询自提单是否完成扫描
|
|
|
|
|
Integer integer = this.selectBillLadingPlanNum(Long.parseLong(s)); |
|
|
|
|
if (Func.isNotEmpty(ladingScanEntities)) { |
|
|
|
|
int sum = ladingScanEntities.stream().filter(f -> f.getMaterialType().equals("2")).mapToInt(DistributionBillLadingScanEntity::getQuantity).sum(); |
|
|
|
|
// if (sum == 0){
|
|
|
|
|
// //未进行任何签收扫描的操作这里需要进行拦截
|
|
|
|
|
// throw new ServiceException("无签收数据");
|
|
|
|
|
//
|
|
|
|
|
// }
|
|
|
|
|
if (integer != sum) { |
|
|
|
|
//存在资源释放操作
|
|
|
|
|
releaseBillLadingResource(Long.parseLong(s), myCurrentWarehouse,distrilbutionBillLadingEntity.getPickupBatch()); |
|
|
|
|
} |
|
|
|
|
try { |
|
|
|
|
if (sum > 0){ |
|
|
|
|
parcelListIds.addAll(ladingScanEntities.stream().map(DistributionBillLadingScanEntity::getParcelListId).collect(Collectors.toSet())); |
|
|
|
|
List<DistributionParcelListEntity> listByOrderPackageCode = distributionParcelListService.findListByOrderPackageCode(ladingScanEntities.stream().map(DistributionBillLadingScanEntity::getPacketBarCode).collect(Collectors.toList()), myCurrentWarehouse.getId()); |
|
|
|
|
// 根据品牌分组
|
|
|
|
|
Map<String, List<DistributionParcelListEntity>> collect = listByOrderPackageCode.stream().collect(Collectors.groupingBy(DistributionParcelListEntity::getBrandName)); |
|
|
|
|
for (Map.Entry<String, List<DistributionParcelListEntity>> entry : collect.entrySet()) { |
|
|
|
|
String brand = entry.getKey(); |
|
|
|
|
List<DistributionParcelListEntity> list = entry.getValue(); |
|
|
|
|
// 按订单分组
|
|
|
|
|
Map<String, List<DistributionParcelListEntity>> collect1 = list.stream().collect(Collectors.groupingBy(DistributionParcelListEntity::getOrderCode)); |
|
|
|
|
for (Map.Entry<String, List<DistributionParcelListEntity>> stringListEntry : collect1.entrySet()) { |
|
|
|
|
String orderCode = stringListEntry.getKey(); |
|
|
|
|
List<DistributionParcelListEntity> list2 = stringListEntry.getValue(); |
|
|
|
|
JSONObject js = new JSONObject(); |
|
|
|
|
js.put("boId", billLadingEntity.getId()); |
|
|
|
|
js.put("consignee", distrilbutionBillLadingEntity.getConsignee()); |
|
|
|
|
js.put("images", list1.stream().map(m -> m.getSite()).collect(Collectors.toList())); |
|
|
|
|
NodePushMsg msg = new NodePushMsg(); |
|
|
|
|
msg.setNode(WorkNodeEnums.CLERK_REVIEW); |
|
|
|
|
msg.setBrand(BrandEnums.getByValue(brand)); |
|
|
|
|
msg.setWarehouse(myCurrentWarehouse.getName()); |
|
|
|
|
msg.setOperator(AuthUtil.getNickName()); |
|
|
|
|
msg.setOperatorTime(new Date()); |
|
|
|
|
msg.setContent(list2.stream().map(pushData->{ |
|
|
|
|
return PushData.builder() |
|
|
|
|
.packageCode(pushData.getOrderPackageCode()) |
|
|
|
|
.warehouseName(myCurrentWarehouse.getName()) |
|
|
|
|
.waybillNumber(pushData.getWaybillNumber()) |
|
|
|
|
.orderCode(pushData.getOrderCode()) |
|
|
|
|
.build(); |
|
|
|
|
}).collect(Collectors.toList())); |
|
|
|
|
msg.setMain(JSONUtil.toJsonStr(js)); |
|
|
|
|
log.info("推送工厂数据:{}", JSONUtil.toJsonStr(msg)); |
|
|
|
|
factoryDataMessageSender.sendNodeDataByBrand(msg); |
|
|
|
|
} |
|
|
|
|
if (integer != sum) { |
|
|
|
|
//存在资源释放操作
|
|
|
|
|
releaseBillLadingResource(Long.parseLong(s), myCurrentWarehouse, distrilbutionBillLadingEntity.getPickupBatch()); |
|
|
|
|
} |
|
|
|
|
try { |
|
|
|
|
if (sum > 0) { |
|
|
|
|
parcelListIds.addAll(ladingScanEntities.stream().map(DistributionBillLadingScanEntity::getParcelListId).collect(Collectors.toSet())); |
|
|
|
|
List<DistributionParcelListEntity> listByOrderPackageCode = distributionParcelListService.findListByOrderPackageCode(ladingScanEntities.stream().map(DistributionBillLadingScanEntity::getPacketBarCode).collect(Collectors.toList()), myCurrentWarehouse.getId()); |
|
|
|
|
// 根据品牌分组
|
|
|
|
|
Map<String, List<DistributionParcelListEntity>> collect = listByOrderPackageCode.stream().collect(Collectors.groupingBy(DistributionParcelListEntity::getBrandName)); |
|
|
|
|
for (Map.Entry<String, List<DistributionParcelListEntity>> entry : collect.entrySet()) { |
|
|
|
|
String brand = entry.getKey(); |
|
|
|
|
List<DistributionParcelListEntity> list = entry.getValue(); |
|
|
|
|
// 按订单分组
|
|
|
|
|
Map<String, List<DistributionParcelListEntity>> collect1 = list.stream().collect(Collectors.groupingBy(DistributionParcelListEntity::getOrderCode)); |
|
|
|
|
for (Map.Entry<String, List<DistributionParcelListEntity>> stringListEntry : collect1.entrySet()) { |
|
|
|
|
String orderCode = stringListEntry.getKey(); |
|
|
|
|
List<DistributionParcelListEntity> list2 = stringListEntry.getValue(); |
|
|
|
|
JSONObject js = new JSONObject(); |
|
|
|
|
js.put("boId", billLadingEntity.getId()); |
|
|
|
|
js.put("consignee", distrilbutionBillLadingEntity.getConsignee()); |
|
|
|
|
js.put("images", list1.stream().map(m -> m.getSite()).collect(Collectors.toList())); |
|
|
|
|
NodePushMsg msg = new NodePushMsg(); |
|
|
|
|
msg.setNode(WorkNodeEnums.CLERK_REVIEW); |
|
|
|
|
msg.setBrand(BrandEnums.getByValue(brand)); |
|
|
|
|
msg.setWarehouse(myCurrentWarehouse.getName()); |
|
|
|
|
msg.setOperator(AuthUtil.getNickName()); |
|
|
|
|
msg.setOperatorTime(new Date()); |
|
|
|
|
msg.setContent(list2.stream().map(pushData -> { |
|
|
|
|
return PushData.builder() |
|
|
|
|
.packageCode(pushData.getOrderPackageCode()) |
|
|
|
|
.warehouseName(myCurrentWarehouse.getName()) |
|
|
|
|
.waybillNumber(pushData.getWaybillNumber()) |
|
|
|
|
.orderCode(pushData.getOrderCode()) |
|
|
|
|
.build(); |
|
|
|
|
}).collect(Collectors.toList())); |
|
|
|
|
msg.setMain(JSONUtil.toJsonStr(js)); |
|
|
|
|
log.info("推送工厂数据:{}", JSONUtil.toJsonStr(msg)); |
|
|
|
|
factoryDataMessageSender.sendNodeDataByBrand(msg); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
}catch (Exception e){ |
|
|
|
|
log.error("推送失败:{}", e); |
|
|
|
|
} |
|
|
|
|
for (DistributionBillLadingScanEntity ladingScanEntity : ladingScanEntities) { |
|
|
|
|
// 签收发送消息到工厂
|
|
|
|
|
pushFactoryOrderData(myCurrentWarehouse.getId(), ladingScanEntity.getParcelListId().toString(), ladingScanEntity.getOrderSelfNumbering()); |
|
|
|
|
} |
|
|
|
|
} catch (Exception e) { |
|
|
|
|
log.error("推送失败:{}", e); |
|
|
|
|
} |
|
|
|
|
//修改订单状态
|
|
|
|
|
List<DistrilbutionBillStockEntity> list = distrilbutionBillStockService.list(Wrappers.<DistrilbutionBillStockEntity>query().lambda() |
|
|
|
|
.eq(DistrilbutionBillStockEntity::getBillLadingId, s) |
|
|
|
|
.apply("order_status in ( '1' , '3')") |
|
|
|
|
// .or(ew -> ew.eq(DistrilbutionBillStockEntity::getBillLadingId, s).apply(DistrilbutionBillStockEntity::getOrderStatus, "2"))
|
|
|
|
|
); |
|
|
|
|
if (!list.isEmpty()) { |
|
|
|
|
|
|
|
|
|
list.forEach(li -> { |
|
|
|
|
DistributionStockArticleEntity stockArticleEntity = new DistributionStockArticleEntity(); |
|
|
|
|
stockArticleEntity.setId(li.getStockArticleId()); |
|
|
|
|
List<DistributionParcelListEntity> list2 = distributionParcelListService.list(Wrappers.<DistributionParcelListEntity>query().lambda() |
|
|
|
|
.eq(DistributionParcelListEntity::getStockArticleId, li.getStockArticleId()) |
|
|
|
|
.apply("order_package_status != 70 ") |
|
|
|
|
); |
|
|
|
|
if (list2.isEmpty()) { |
|
|
|
|
stockArticleEntity.setOrderStatus(OrderStatusConstant.qianshou.getValue()); |
|
|
|
|
} else { |
|
|
|
|
stockArticleEntity.setOrderStatus(OrderStatusConstant.bufenqianshou.getValue()); |
|
|
|
|
} |
|
|
|
|
//回退包件数据
|
|
|
|
|
Integer i1 = updatePack(li.getStockArticleId(), Long.valueOf(s)); |
|
|
|
|
if (i1 > 0) { |
|
|
|
|
stockArticleEntity.setOrderStatus(OrderStatusConstant.bufenqianshou.getValue()); |
|
|
|
|
} |
|
|
|
|
distributionStockArticleService.updateById(stockArticleEntity); |
|
|
|
|
}); |
|
|
|
|
distributionAsyncService.sendFactorySignforInfo(s, myCurrentWarehouse, AuthUtil.getUser()); |
|
|
|
|
for (DistributionBillLadingScanEntity ladingScanEntity : ladingScanEntities) { |
|
|
|
|
// 签收发送消息到工厂
|
|
|
|
|
pushFactoryOrderData(myCurrentWarehouse.getId(), ladingScanEntity.getParcelListId().toString(), ladingScanEntity.getOrderSelfNumbering()); |
|
|
|
|
} |
|
|
|
|
//处理库存品签收数据
|
|
|
|
|
updateStock(s); |
|
|
|
|
} |
|
|
|
|
//修改订单状态
|
|
|
|
|
List<DistrilbutionBillStockEntity> list = distrilbutionBillStockService.list(Wrappers.<DistrilbutionBillStockEntity>query().lambda() |
|
|
|
|
.eq(DistrilbutionBillStockEntity::getBillLadingId, s) |
|
|
|
|
.apply("order_status in ( '1' , '3')") |
|
|
|
|
// .or(ew -> ew.eq(DistrilbutionBillStockEntity::getBillLadingId, s).apply(DistrilbutionBillStockEntity::getOrderStatus, "2"))
|
|
|
|
|
); |
|
|
|
|
if (!list.isEmpty()) { |
|
|
|
|
|
|
|
|
|
// 回传老系统自提数据
|
|
|
|
|
sendOldSystem(Long.parseLong(s)); |
|
|
|
|
//整理运单信息
|
|
|
|
|
handletrunklineWaybillSignLog(billLadingEntity.getId()); |
|
|
|
|
list.forEach(li -> { |
|
|
|
|
DistributionStockArticleEntity stockArticleEntity = new DistributionStockArticleEntity(); |
|
|
|
|
stockArticleEntity.setId(li.getStockArticleId()); |
|
|
|
|
List<DistributionParcelListEntity> list2 = distributionParcelListService.list(Wrappers.<DistributionParcelListEntity>query().lambda() |
|
|
|
|
.eq(DistributionParcelListEntity::getStockArticleId, li.getStockArticleId()) |
|
|
|
|
.apply("order_package_status != 70 ") |
|
|
|
|
); |
|
|
|
|
if (list2.isEmpty()) { |
|
|
|
|
stockArticleEntity.setOrderStatus(OrderStatusConstant.qianshou.getValue()); |
|
|
|
|
} else { |
|
|
|
|
stockArticleEntity.setOrderStatus(OrderStatusConstant.bufenqianshou.getValue()); |
|
|
|
|
} |
|
|
|
|
//回退包件数据
|
|
|
|
|
Integer i1 = updatePack(li.getStockArticleId(), Long.valueOf(s)); |
|
|
|
|
if (i1 > 0) { |
|
|
|
|
stockArticleEntity.setOrderStatus(OrderStatusConstant.bufenqianshou.getValue()); |
|
|
|
|
} |
|
|
|
|
distributionStockArticleService.updateById(stockArticleEntity); |
|
|
|
|
}); |
|
|
|
|
distributionAsyncService.sendFactorySignforInfo(s, myCurrentWarehouse, AuthUtil.getUser()); |
|
|
|
|
} |
|
|
|
|
//处理库存品签收数据
|
|
|
|
|
updateStock(s); |
|
|
|
|
|
|
|
|
|
// 回传老系统自提数据
|
|
|
|
|
sendOldSystem(Long.parseLong(s)); |
|
|
|
|
//整理运单信息
|
|
|
|
|
handletrunklineWaybillSignLog(billLadingEntity.getId()); |
|
|
|
|
} |
|
|
|
|
// 回传工厂数据
|
|
|
|
|
sendFactory(myCurrentWarehouse, parcelListIds); |
|
|
|
|
|
|
|
|
@ -3743,7 +3963,7 @@ public class DistrilbutionBillLadingServiceImpl extends BaseServiceImpl<Distrilb
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public void releaseBillLadingResource(Long l, BasicdataWarehouseEntity warehouse,String pickupBatch) { |
|
|
|
|
public void releaseBillLadingResource(Long l, BasicdataWarehouseEntity warehouse, String pickupBatch) { |
|
|
|
|
List<DistrilbutionBillPackageEntity> list = distrilbutionBillPackageService.list(Wrappers.<DistrilbutionBillPackageEntity>query().lambda() |
|
|
|
|
.eq(DistrilbutionBillPackageEntity::getBillLadingId, l) |
|
|
|
|
.ne(DistrilbutionBillPackageEntity::getPacketBarStatus, 2) |
|
|
|
@ -4158,24 +4378,9 @@ public class DistrilbutionBillLadingServiceImpl extends BaseServiceImpl<Distrilb
|
|
|
|
|
.eq(DistributionReservationZeroPackageEntity::getIsDeleted, 0) |
|
|
|
|
.in(DistributionReservationZeroPackageEntity::getZeroPackageStatus, "1", "3") |
|
|
|
|
); |
|
|
|
|
BasicdataWarehouseEntity myCurrentWarehouse = basicdataWarehouseClient.getMyCurrentWarehouse(); |
|
|
|
|
//添加自提签收数据
|
|
|
|
|
List<DistributionBillLadingScanEntity> billLadingScanList = new ArrayList<>(); |
|
|
|
|
// billLadingAppDTO.getList().forEach(i ->{
|
|
|
|
|
// //判断是否大于总件数的数量
|
|
|
|
|
// DistributionParcelListEntity byId = distributionParcelListService.getById(i.getId());
|
|
|
|
|
// if(i.getQuantity() > byId.getQuantity()){
|
|
|
|
|
// throw new ServiceException("签收数量大于订单数量!!");
|
|
|
|
|
// }
|
|
|
|
|
// DistributionBillLadingScanEntity billLadingScan = new DistributionBillLadingScanEntity();
|
|
|
|
|
// billLadingScan.setScanType(2);
|
|
|
|
|
// billLadingScan.setParcelListId(i.getId());
|
|
|
|
|
// billLadingScan.setOrderSelfNumbering(i.getOrderCode());
|
|
|
|
|
// billLadingScan.setStockArticleId(i.getStockArticleId());
|
|
|
|
|
// billLadingScan.setBillLadingId(billLadingAppDTO.getBillLadingId());
|
|
|
|
|
// billLadingScan.setMaterialType("3");
|
|
|
|
|
// billLadingScan.setQuantity(i.getQuantity());
|
|
|
|
|
// billLadingScanList.add(billLadingScan);
|
|
|
|
|
// });
|
|
|
|
|
//查询
|
|
|
|
|
//修改签收状态
|
|
|
|
|
billLadingAppDTO.getList().stream().collect(Collectors.groupingBy(DistrilbutionAppBillLadingZeroVO::getStockArticleId)) |
|
|
|
@ -4223,6 +4428,13 @@ public class DistrilbutionBillLadingServiceImpl extends BaseServiceImpl<Distrilb
|
|
|
|
|
if (!billLadingScanList.isEmpty()) { |
|
|
|
|
distributionBillLadingScanService.saveBatch(billLadingScanList); |
|
|
|
|
distributionAsyncService.getStockUPstate(billLadingAppDTO.getBillLadingId()); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
BladeUser user = AuthUtil.getUser(); |
|
|
|
|
// 推送作业节点
|
|
|
|
|
NodeFanoutMsg<PickUpByScanVO> nodeFanoutMsg = buildNodeFanoutMsgBySign(billLadingEntity, billLadingScanList, user, myCurrentWarehouse); |
|
|
|
|
iDistributionNodeWorkService.signByBill(nodeFanoutMsg, user); |
|
|
|
|
|
|
|
|
|
return Resp.scanSuccess("签收成功!", "签收成功!"); |
|
|
|
|
} |
|
|
|
|
billLadingEntity.setConditions(BillLadingStatusConstant.yitihuo.getValue()); |
|
|
|
@ -4296,6 +4508,8 @@ public class DistrilbutionBillLadingServiceImpl extends BaseServiceImpl<Distrilb
|
|
|
|
|
public R zeroBillPack(BillLadingAppDTO billLadingAppDTO) { |
|
|
|
|
DistrilbutionAppBillLadingZeroVO i = billLadingAppDTO.getBillLadingZeroVO(); |
|
|
|
|
|
|
|
|
|
BasicdataWarehouseEntity myCurrentWarehouse = basicdataWarehouseClient.getMyCurrentWarehouse(); |
|
|
|
|
List<DistributionBillLadingScanEntity> billLadingScanEntities = new ArrayList<>(); |
|
|
|
|
String lockKey = "lock:" + i.getStockArticleId() + i.getId(); |
|
|
|
|
log.info("#################zeroBillPack:获取redisson对象开始"); |
|
|
|
|
// RLock lock = redisson.getLock(lockKey);
|
|
|
|
@ -4370,8 +4584,17 @@ public class DistrilbutionBillLadingServiceImpl extends BaseServiceImpl<Distrilb
|
|
|
|
|
|
|
|
|
|
//添加签收记录
|
|
|
|
|
distributionBillLadingScanService.save(billLadingScan); |
|
|
|
|
billLadingScanEntities.add(billLadingScan); |
|
|
|
|
//修改提货状态
|
|
|
|
|
distributionAsyncService.getStockUPstate(billLadingAppDTO.getBillLadingId()); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
DistrilbutionBillLadingEntity billLadingEntity = this.getById(billLadingAppDTO.getBillLadingId()); |
|
|
|
|
|
|
|
|
|
BladeUser user = AuthUtil.getUser(); |
|
|
|
|
// 推送作业节点
|
|
|
|
|
NodeFanoutMsg<PickUpByScanVO> nodeFanoutMsg = buildNodeFanoutMsgBySign(billLadingEntity, billLadingScanEntities, user, myCurrentWarehouse); |
|
|
|
|
iDistributionNodeWorkService.signByBill(nodeFanoutMsg, user); |
|
|
|
|
return Resp.scanSuccess("签收成功!", "签收成功!"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|