Browse Source

feat(all): 增加索菲亚回推工厂逻辑

dist.1.3.0
zhaoqiaobo 9 months ago
parent
commit
e745feef06
  1. 2
      blade-biz-common/src/main/java/org/springblade/common/constant/factorydata/FactoryDataConstants.java
  2. 1
      blade-service-api/logpm-factory-data-api/src/main/java/com/logpm/factorydata/util/FactoryDataUtil.java
  3. 5
      blade-service-api/logpm-factory-data-api/src/main/java/com/logpm/factorydata/vo/NodePushMsg.java
  4. 6
      blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/IDistributionAsyncService.java
  5. 70
      blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistributionAsyncServiceImpl.java
  6. 53
      blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistributionDeliveryListServiceImpl.java
  7. 3
      blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistributionReservationServiceImpl.java
  8. 34
      blade-service/logpm-factory-data/logpm-factory-data-suofeiya/src/main/java/com/logpm/factorydata/suofeiya/enums/FactoryNodeEnums.java
  9. 79
      blade-service/logpm-factory-data/logpm-factory-data-suofeiya/src/main/java/com/logpm/factorydata/suofeiya/enums/NodeMappingEnums.java
  10. 38
      blade-service/logpm-factory-data/logpm-factory-data-suofeiya/src/main/java/com/logpm/factorydata/suofeiya/enums/NodeNeedEnums.java
  11. 155
      blade-service/logpm-factory-data/logpm-factory-data-suofeiya/src/main/java/com/logpm/factorydata/suofeiya/mq/NodeDataPushListener.java
  12. 25
      blade-service/logpm-factory-data/logpm-factory-data-suofeiya/src/main/java/com/logpm/factorydata/suofeiya/pros/OldProperties.java
  13. 64
      blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/service/impl/TrunklineCarsLoadServiceImpl.java

2
blade-biz-common/src/main/java/org/springblade/common/constant/factorydata/FactoryDataConstants.java

@ -68,6 +68,7 @@ public abstract class FactoryDataConstants {
/**
* 索菲亚工厂订单
*/
String SFY_NODE_DATA_PUSH = "factory.data.queue.sfy.nodeDataPush" + DEVAUTH;
String SFY_FACTORY_ORDER = "factory.data.queue.sfy.factoryOrder" + DEVAUTH;
/**
* 我乐工厂订单
@ -117,6 +118,7 @@ public abstract class FactoryDataConstants {
/**
* 索菲亚工厂订单
*/
String SFY_NODE_DATA_PUSH = "sfy.nodeDataPush" + DEVAUTH;
String SFY_FACTORY_ORDER = "sfy.factoryOrder" + DEVAUTH;
/**
* 我乐工厂订单

1
blade-service-api/logpm-factory-data-api/src/main/java/com/logpm/factorydata/util/FactoryDataUtil.java

@ -25,6 +25,7 @@ public class FactoryDataUtil {
factorys.put(BrandEnums.ZB.getValue(), FactoryDataConstants.Mq.RoutingKeys.ZBOM_NODE_DATA_PUSH);
factorys.put(BrandEnums.LINSY.getValue(), FactoryDataConstants.Mq.RoutingKeys.LINSY_NODE_DATA_PUSH);
factorys.put(BrandEnums.OLO.getValue(), FactoryDataConstants.Mq.RoutingKeys.OLO_NODE_DATA_PUSH);
factorys.put(BrandEnums.SFY.getValue(), FactoryDataConstants.Mq.RoutingKeys.SFY_NODE_DATA_PUSH);
}

5
blade-service-api/logpm-factory-data-api/src/main/java/com/logpm/factorydata/vo/NodePushMsg.java

@ -55,6 +55,11 @@ public class NodePushMsg implements Serializable {
*/
private SignForStatusEnums signForStatusEnums;
/**
* 主单数据
*/
private Object main;
/**
* 内容
*/

6
blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/IDistributionAsyncService.java

@ -8,8 +8,10 @@ import com.logpm.distribution.dto.app.DistrilbutionloadingscanDTO;
import com.logpm.distribution.dto.app.StockupDTO;
import com.logpm.distribution.dto.app.StockupZeroDTO;
import com.logpm.distribution.entity.DisStockListDetailEntity;
import com.logpm.distribution.entity.DistributionDeliveryListEntity;
import com.logpm.distribution.entity.DistributionParcelListEntity;
import com.logpm.distribution.entity.DistributionParcelNumberEntity;
import com.logpm.distribution.entity.DistributionReservationEntity;
import com.logpm.distribution.entity.DistributionStockArticleEntity;
import com.logpm.trunkline.entity.TrunklineAdvanceEntity;
import com.logpm.trunkline.entity.TrunklineWaybillOrderEntity;
@ -340,9 +342,9 @@ public interface IDistributionAsyncService {
/**
* 推送预约下包件转配送日志
* @param reservationIds
* @param
*/
void recordsReservationDeliveryLog(String reservationIds,BasicdataWarehouseEntity warehouse,BladeUser user,String trainNumber,Integer node,String content);
void recordsReservationDeliveryLog(List<DistributionReservationEntity> reservationEntityList, BasicdataWarehouseEntity warehouse, BladeUser user, DistributionDeliveryListEntity deliveryListEntity, Integer node, String content);
/**
* 自提推送工厂

70
blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistributionAsyncServiceImpl.java

@ -54,6 +54,7 @@ import com.logpm.factorydata.enums.BrandEnums;
import com.logpm.factorydata.util.FactoryDataMessageSender;
import com.logpm.factorydata.vo.NodePushMsg;
import com.logpm.factorydata.vo.PushData;
import com.logpm.factorydata.vo.SendMsg;
import com.logpm.trunkline.dto.AddWaybillTrackDTO;
import com.logpm.trunkline.feign.*;
import com.logpm.warehouse.entity.WarehouseWaybillEntity;
@ -1611,9 +1612,12 @@ public class DistributionAsyncServiceImpl implements IDistributionAsyncService {
List<Object> contents = new ArrayList<>();
if (CollUtil.isNotEmpty(zb)) {
for (MtReceiveContentDTO mtReceiveContentDTO : zb) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("packageCode", mtReceiveContentDTO.getUnitNo());
contents.add(jsonObject);
PushData pushData = PushData.builder()
.packageCode(mtReceiveContentDTO.getUnitNo())
.orderCode(mtReceiveContentDTO.getOrderCode())
.warehouseName(warehouseName)
.waybillNumber(mtReceiveContentDTO.getWaybillNumber()).build();
contents.add(pushData);
}
}
NodePushMsg msg = new NodePushMsg();
@ -2962,16 +2966,33 @@ public class DistributionAsyncServiceImpl implements IDistributionAsyncService {
@Override
@LogpmAsync("asyncExecutor")
public void recordsReservationDeliveryLog(String reservationIds,BasicdataWarehouseEntity warehouse,BladeUser user,String trainNumber,Integer node,String content) {
List<Long> list = Func.toLongList(reservationIds);
public void recordsReservationDeliveryLog(List<DistributionReservationEntity> reservationList,BasicdataWarehouseEntity warehouse,BladeUser user,DistributionDeliveryListEntity deliveryListEntity,Integer node,String content) {
List<Long> list = reservationList.stream().map(DistributionReservationEntity::getId).collect(Collectors.toList());
if (!list.isEmpty()) {
List<DistributionReservationPackageEntity> distributionReservationPackageEntities = distributionReservationPackageMapper.selectList(Wrappers.<DistributionReservationPackageEntity>query().lambda()
.in(DistributionReservationPackageEntity::getReservationId, list)
.ne(DistributionReservationPackageEntity::getPacketBarStatus, ReservationPackageStatusConstant.quxiao.getValue())
);
// reservationList根据id分组封装成map
Map<Long, List<DistributionReservationEntity>> map = reservationList.stream().collect(Collectors.groupingBy(DistributionReservationEntity::getId));
List<JSONObject> aaa = new ArrayList<>();
List<JSONObject> pushDatas = new ArrayList<>();
if (!distributionReservationPackageEntities.isEmpty()) {
// 通过订单id获取订单,然后根据品牌分组
Map<Long,DistributionStockArticleEntity> stockArticleEntityMap = new HashMap<>();
List<Long> collect = distributionReservationPackageEntities.stream().map(DistributionReservationPackageEntity::getStockArticleId).collect(Collectors.toList());
if(CollUtil.isNotEmpty(collect)){
List<DistributionStockArticleEntity> stockArticleEntities = distributionStockArticleService.list(Wrappers.<DistributionStockArticleEntity>query().lambda()
.in(DistributionStockArticleEntity::getId, collect)
);
if(CollUtil.isNotEmpty(stockArticleEntities)){
stockArticleEntities.forEach(s->{
stockArticleEntityMap.put(s.getId(),s);
});
}
}
distributionReservationPackageEntities.forEach(rp->{
DistributionReservationEntity r = map.get(rp.getReservationId()).get(0);
JSONObject trunklinePackageTrackLog= new JSONObject();
trunklinePackageTrackLog.put("tenantId",AuthUtil.getTenantId());
trunklinePackageTrackLog.put("createTime",new Date());
@ -2988,8 +3009,47 @@ public class DistributionAsyncServiceImpl implements IDistributionAsyncService {
trunklinePackageTrackLog.put("content",content);
trunklinePackageTrackLog.put("operator",AuthUtil.getUser().getNickName());
aaa.add(trunklinePackageTrackLog);
JSONObject jsonObject = new JSONObject();
jsonObject.put("trainNumber", deliveryListEntity.getTrainNumber());
jsonObject.put("brand", stockArticleEntityMap.get(rp.getStockArticleId()).getBrand());
jsonObject.put("receiver", r.getConsignee());
jsonObject.put("receiveAddr", r.getDeliveryAddress());
jsonObject.put("receiveTel", r.getDeliveryPhone());
jsonObject.put("planDeliveryDate", deliveryListEntity.getTaskTime());
jsonObject.put("packageCode", rp.getPacketBarCode());
pushDatas.add(jsonObject);
});
}
try {
if(CollUtil.isNotEmpty(pushDatas)){
// 以trainNumber和receiver 分组 将包件封装成list
Map<String, List<JSONObject>> collect = pushDatas.stream().collect(Collectors.groupingBy(jsonObject -> jsonObject.getString("trainNumber") + jsonObject.getString("receiver") + jsonObject.getString("brand")));
if(CollUtil.isNotEmpty(collect)){
for (Map.Entry<String, List<JSONObject>> entry : collect.entrySet()) {
List<JSONObject> value = entry.getValue();
if(CollUtil.isNotEmpty(value)){
JSONObject object = value.get(0);
NodePushMsg msg = new NodePushMsg();
msg.setNode(WorkNodeEnums.PLAN_DISTRIBUTION);
msg.setBrand(BrandEnums.getByValue(value.get(0).getString("brand")));
msg.setOperator(AuthUtil.getNickName());
msg.setOperatorTime(new Date());
msg.setMain(object);
msg.setContent(value.stream().map(jsonObject -> {
PushData pushData = new PushData();
pushData.setPackageCode(jsonObject.getString("packageCode"));
return pushData;
}).collect(Collectors.toList()));
log.info("推送工厂数据:{}", JSONUtil.toJsonStr(msg));
factoryDataMessageSender.sendNodeDataByBrand(msg);
}
}
}
}
}catch (Exception e){
log.error("推送工程数据失败:{}", e);
}
if (!aaa.isEmpty()) {
trunklinePackageTrackLogClient.addPackageTrackLog(aaa);
}

53
blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistributionDeliveryListServiceImpl.java

@ -2674,6 +2674,7 @@ public class DistributionDeliveryListServiceImpl extends BaseServiceImpl<Distrib
}
}
List<JSONObject> logs = new ArrayList<>();
List<JSONObject> pushDatas = new ArrayList<>();
//查询出原来配送信息的备货任务
DistributionStockupVO deliveryStockupInfo = distributionStockupMapper.getDeliveryStockupInfo(deliveryListEntity.getId());
//这里查询出该备货任务的执行情况,如果该任务处于已完成的状态需要创建新的备货任务,其他的备货状态则是进行备货任务的修改
@ -2869,6 +2870,14 @@ public class DistributionDeliveryListServiceImpl extends BaseServiceImpl<Distrib
packageLockIds.add(dp.getId());
String content = "包件在" + myCurrentWarehouse.getName() + "由" + AuthUtil.getUser().getNickName() + "商配计划配车,操作方式:新增订单无包件操作,构建新的预约计划,预约任务号:" + reservationEntity.getReservationCode();
JSONObject js = handleLogJSONObject(myCurrentWarehouse, AuthUtil.getUser(), dp.getOrderPackageCode(), content, WorkNodeEnums.PLAN_DISTRIBUTION.getCode());
JSONObject jsonObject = new JSONObject();
jsonObject.put("trainNumber", deliveryListEntity.getTrainNumber());
jsonObject.put("receiver", reservationEntity.getConsignee());
jsonObject.put("receiveAddr", reservationEntity.getDeliveryAddress());
jsonObject.put("receiveTel", reservationEntity.getDeliveryPhone());
jsonObject.put("planDeliveryDate", deliveryListEntity.getTaskTime());
jsonObject.put("packageCode", dp.getOrderPackageCode());
pushDatas.add(jsonObject);
logs.add(js);
}
}
@ -2889,6 +2898,14 @@ public class DistributionDeliveryListServiceImpl extends BaseServiceImpl<Distrib
//这里根据包件进行订单状态的改变
String content = "包件在" + myCurrentWarehouse.getName() + "由" + AuthUtil.getUser().getNickName() + "商配计划配车,操作方式:新增订单勾选包件,构建新的预约计划,预约任务号:" + reservationEntity.getReservationCode();
JSONObject js = handleLogJSONObject(myCurrentWarehouse, AuthUtil.getUser(), p.getOrderPackageCode(), content, WorkNodeEnums.PLAN_DISTRIBUTION.getCode());
JSONObject jsonObject = new JSONObject();
jsonObject.put("trainNumber", deliveryListEntity.getTrainNumber());
jsonObject.put("receiver", reservationEntity.getConsignee());
jsonObject.put("receiveAddr", reservationEntity.getDeliveryAddress());
jsonObject.put("receiveTel", reservationEntity.getDeliveryPhone());
jsonObject.put("planDeliveryDate", deliveryListEntity.getTaskTime());
jsonObject.put("packageCode", p.getOrderPackageCode());
pushDatas.add(jsonObject);
logs.add(js);
});
}
@ -3087,6 +3104,14 @@ public class DistributionDeliveryListServiceImpl extends BaseServiceImpl<Distrib
//这里根据包件进行订单状态的改变
String content = "包件在" + myCurrentWarehouse.getName() + "由" + AuthUtil.getUser().getNickName() + "商配计划配车,操作方式:勾选订单包件,预约任务号:" + reservationEntity.getReservationCode();
JSONObject js = handleLogJSONObject(myCurrentWarehouse, AuthUtil.getUser(), p.getOrderPackageCode(), content, WorkNodeEnums.PLAN_DISTRIBUTION.getCode());
JSONObject jsonObject = new JSONObject();
jsonObject.put("trainNumber", deliveryListEntity.getTrainNumber());
jsonObject.put("receiver", reservationEntity.getConsignee());
jsonObject.put("receiveAddr", reservationEntity.getDeliveryAddress());
jsonObject.put("receiveTel", reservationEntity.getDeliveryPhone());
jsonObject.put("planDeliveryDate", deliveryListEntity.getTaskTime());
jsonObject.put("packageCode", p.getOrderPackageCode());
pushDatas.add(jsonObject);
logs.add(js);
});
} else {
@ -3126,6 +3151,14 @@ public class DistributionDeliveryListServiceImpl extends BaseServiceImpl<Distrib
packageLockIds.add(dp.getId());
String content = "包件在" + myCurrentWarehouse.getName() + "由" + AuthUtil.getUser().getNickName() + "商配计划配车,操作方式:无勾选包件操作,预约任务号:" + reservationEntity.getReservationCode();
JSONObject js = handleLogJSONObject(myCurrentWarehouse, AuthUtil.getUser(), dp.getOrderPackageCode(), content, WorkNodeEnums.PLAN_DISTRIBUTION.getCode());
JSONObject jsonObject = new JSONObject();
jsonObject.put("trainNumber", deliveryListEntity.getTrainNumber());
jsonObject.put("receiver", reservationEntity.getConsignee());
jsonObject.put("receiveAddr", reservationEntity.getDeliveryAddress());
jsonObject.put("receiveTel", reservationEntity.getDeliveryPhone());
jsonObject.put("planDeliveryDate", deliveryListEntity.getTaskTime());
jsonObject.put("packageCode", dp.getOrderPackageCode());
pushDatas.add(jsonObject);
logs.add(js);
}
@ -3236,6 +3269,14 @@ public class DistributionDeliveryListServiceImpl extends BaseServiceImpl<Distrib
packageLockIds.add(p.getId());
String content = "包件在" + myCurrentWarehouse.getName() + "由" + AuthUtil.getUser().getNickName() + "商配计划配车,操作方式:对已有计划订单进行包件勾选新增操作,预约任务号:" + reservationEntity.getReservationCode();
JSONObject js = handleLogJSONObject(myCurrentWarehouse, AuthUtil.getUser(), reservationPackageEntity.getPacketBarCode(), content, WorkNodeEnums.PLAN_DISTRIBUTION.getCode());
JSONObject jsonObject = new JSONObject();
jsonObject.put("trainNumber", deliveryListEntity.getTrainNumber());
jsonObject.put("receiver", reservationEntity.getConsignee());
jsonObject.put("receiveAddr", reservationEntity.getDeliveryAddress());
jsonObject.put("receiveTel", reservationEntity.getDeliveryPhone());
jsonObject.put("planDeliveryDate", deliveryListEntity.getTaskTime());
jsonObject.put("packageCode", reservationPackageEntity.getPacketBarCode());
pushDatas.add(jsonObject);
logs.add(js);
} else {
//依然存在包件,
@ -3853,6 +3894,7 @@ public class DistributionDeliveryListServiceImpl extends BaseServiceImpl<Distrib
AtomicInteger clientTotal = new AtomicInteger();
List<Long> newIds = new ArrayList<>();
List<Long> oldIds = new ArrayList<>();
List<DistributionReservationEntity> newReservationEntities = new ArrayList<>();
newReservation.forEach((k, v) -> {
clientTotal.getAndIncrement();
//统计配送包件总数量
@ -3868,7 +3910,7 @@ public class DistributionDeliveryListServiceImpl extends BaseServiceImpl<Distrib
//新增
DistributionReservationEntity distributionReservationEntity = v.get(0);
newIds.add(distributionReservationEntity.getId());
newReservationEntities.add(distributionReservationEntity);
DistributionSignforEntity distributionSignforEntity = new DistributionSignforEntity();
// String trainNumberMa = trainNumberMa();
distributionSignforEntity.setTrainNumber(deliveryListEntity.getTrainNumber());
@ -3886,10 +3928,10 @@ public class DistributionDeliveryListServiceImpl extends BaseServiceImpl<Distrib
.set(DistributionReservationEntity::getReservationStatus, ReservationStatusConstant.daipeisong.getValue())
);
String content = "包件在" + myCurrentWarehouse.getName() + "由" + AuthUtil.getUser().getNickName() + "转车次任务,操作方式:车次添加预约计划,车次号:" + deliveryListEntity.getTrainNumber();
String ids = oldIds.stream().map(String::valueOf).collect(Collectors.joining(","));
distributionAsyncService.recordsReservationDeliveryLog(ids, myCurrentWarehouse, AuthUtil.getUser(), deliveryListEntity.getTrainNumber(), WorkNodeEnums.PLAN_DISTRIBUTION.getCode(), content);
String ids = newIds.stream().map(String::valueOf).collect(Collectors.joining(","));
distributionAsyncService.recordsReservationDeliveryLog(newReservationEntities, myCurrentWarehouse, AuthUtil.getUser(), deliveryListEntity, WorkNodeEnums.PLAN_DISTRIBUTION.getCode(), content);
}
List<DistributionReservationEntity> oldReservationEntities = new ArrayList<>();
oldReservation.forEach((m, n) -> {
//这里就是取消的预约单,进行状态回退
DistributionReservationEntity reservationEntity = n.get(0);
@ -3905,12 +3947,13 @@ public class DistributionDeliveryListServiceImpl extends BaseServiceImpl<Distrib
.eq(DistributionStockupInfoEntity::getReservationId, reservationEntity.getId())
.set(DistributionStockupInfoEntity::getStockStatus, "4")
);
oldReservationEntities.add(reservationEntity);
oldIds.add(reservationEntity.getId());
});
if (!oldIds.isEmpty()) {
String content = "包件在" + myCurrentWarehouse.getName() + "由" + AuthUtil.getUser().getNickName() + "取消配车计划,操作方式:车次移除预约计划,车次号:" + deliveryListEntity.getTrainNumber();
String ids = oldIds.stream().map(String::valueOf).collect(Collectors.joining(","));
distributionAsyncService.recordsReservationDeliveryLog(ids, myCurrentWarehouse, AuthUtil.getUser(), deliveryListEntity.getTrainNumber(), WorkNodeEnums.CANCEL_DISTRIBUTION.getCode(), content);
distributionAsyncService.recordsReservationDeliveryLog(oldReservationEntities, myCurrentWarehouse, AuthUtil.getUser(), deliveryListEntity, WorkNodeEnums.CANCEL_DISTRIBUTION.getCode(), content);
}
//修改备货信息

3
blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistributionReservationServiceImpl.java

@ -1380,8 +1380,7 @@ public class DistributionReservationServiceImpl extends BaseServiceImpl<Distribu
distributionDeliveryListEntity.setInventoryNub(inventoryNum.get());
distributionDeliveryListService.updateById(distributionDeliveryListEntity);
String content = "包件在"+myCurrentWarehouse.getName()+"由"+ AuthUtil.getUser().getNickName()+"转车次任务,操作方式:批量预约任务转配送,车次号:"+distributionDeliveryListEntity.getTrainNumber();
distributionAsyncService.recordsReservationDeliveryLog(reservationIds,myCurrentWarehouse,user,distributionDeliveryListEntity.getTrainNumber(),WorkNodeEnums.PLAN_DISTRIBUTION.getCode(),content);
distributionAsyncService.recordsReservationDeliveryLog(reservationEntityList,myCurrentWarehouse,user,distributionDeliveryListEntity,WorkNodeEnums.PLAN_DISTRIBUTION.getCode(),content);
return R.status(true);
}

34
blade-service/logpm-factory-data/logpm-factory-data-suofeiya/src/main/java/com/logpm/factorydata/suofeiya/enums/FactoryNodeEnums.java

@ -0,0 +1,34 @@
package com.logpm.factorydata.suofeiya.enums;
import lombok.Getter;
import org.springblade.common.model.IDict;
/**
* 工厂节点枚举
*
* @author zhaoqiaobo
* @create 2024-03-20 15:19
*/
@Getter
public enum FactoryNodeEnums implements IDict<Integer> {
INITIAL_WAREHOUSE_ENTRY(101020, "入库"),
UNLOAD_INCOMING_WAREHOUSE(105010,"入库"),
INITIAL_WAREHOUSE_LOADING(103020, "出库"),
PLAN_DISTRIBUTION(301060, "计划配车"),
/**
* 配送装车
*/
DISTRIBUTION_LOADING(302010, "配送"),
/**
* 文员复核
*/
CLERK_REVIEW(303010, "签收"),
;
FactoryNodeEnums(Integer code, String text) {
init(code, text);
}
}

79
blade-service/logpm-factory-data/logpm-factory-data-suofeiya/src/main/java/com/logpm/factorydata/suofeiya/enums/NodeMappingEnums.java

@ -0,0 +1,79 @@
package com.logpm.factorydata.suofeiya.enums;
import cn.hutool.core.util.ObjectUtil;
import lombok.Getter;
import org.springblade.common.constant.WorkNodeEnums;
/**
* 系统和工厂节点映射枚举
*
* @author zhaoqiaobo
* @create 2024-03-20 15:19
*/
@Getter
public enum NodeMappingEnums {
/**
* 始发仓入库
*/
INITIAL_WAREHOUSE_ENTRY(FactoryNodeEnums.INITIAL_WAREHOUSE_ENTRY, WorkNodeEnums.INITIAL_WAREHOUSE_ENTRY, 1),
/**
* 卸车入库
*/
UNLOAD_INCOMING_WAREHOUSE(FactoryNodeEnums.UNLOAD_INCOMING_WAREHOUSE, WorkNodeEnums.UNLOAD_INCOMING_WAREHOUSE, 1),
/**
* 装车
*/
INITIAL_WAREHOUSE_LOADING(FactoryNodeEnums.INITIAL_WAREHOUSE_LOADING, WorkNodeEnums.INITIAL_WAREHOUSE_LOADING, 1),
/**
* 计划配车
*/
PLAN_DISTRIBUTION(FactoryNodeEnums.PLAN_DISTRIBUTION, WorkNodeEnums.PLAN_DISTRIBUTION, 1),
/**
* 已交接
*/
DISTRIBUTION_LOADING(FactoryNodeEnums.DISTRIBUTION_LOADING, WorkNodeEnums.DISTRIBUTION_LOADING, 1),
/**
* 收货完成
*/
CLERK_REVIEW(FactoryNodeEnums.CLERK_REVIEW, WorkNodeEnums.CLERK_REVIEW, 1);
/**
* 系统作业节点
*/
private WorkNodeEnums workNodeEnums;
/**
* 工厂作业节点
*/
private FactoryNodeEnums factoryNodeEnums;
/**
* 状态码
* 存在我们系统同一个作业节点对应工厂多个节点的情况通过状态码区分
*/
private Integer status;
NodeMappingEnums(FactoryNodeEnums factoryNodeEnums, WorkNodeEnums workNodeEnums, Integer status) {
this.workNodeEnums = workNodeEnums;
this.factoryNodeEnums = factoryNodeEnums;
this.status = status;
}
public static FactoryNodeEnums getFactoryByNodeAndStatus(WorkNodeEnums workNodeEnums) {
return getFactoryByNodeAndStatus(workNodeEnums, 1);
}
public static FactoryNodeEnums getFactoryByNodeAndStatus(WorkNodeEnums workNodeEnums, Integer status) {
NodeMappingEnums[] values = values();
for (NodeMappingEnums value : values) {
WorkNodeEnums workNodeEnums1 = value.getWorkNodeEnums();
Integer status1 = value.getStatus();
FactoryNodeEnums factoryNodeEnums = value.getFactoryNodeEnums();
if (ObjectUtil.equal(workNodeEnums1, workNodeEnums) && ObjectUtil.equal(status1, status)) {
return factoryNodeEnums;
}
}
return null;
}
}

38
blade-service/logpm-factory-data/logpm-factory-data-suofeiya/src/main/java/com/logpm/factorydata/suofeiya/enums/NodeNeedEnums.java

@ -0,0 +1,38 @@
package com.logpm.factorydata.suofeiya.enums;
import lombok.Getter;
import java.io.Serializable;
/**
* 作业节点枚举
*
* @author zhaoqiaobo
* @create 2024-03-20 15:19
*/
@Getter
public enum NodeNeedEnums implements Serializable {
INITIAL_WAREHOUSE_ENTRY(101020, "始发仓入库"),
UNLOAD_INCOMING_WAREHOUSE(105010,"卸车入库"),
INITIAL_WAREHOUSE_LOADING(103020, "装车"),
PLAN_DISTRIBUTION(301060, "计划配车"),
/**
* 配送装车
*/
DISTRIBUTION_LOADING(302010, "配送装车"),
/**
* 文员复核
*/
CLERK_REVIEW(303010, "文员复核"),
;
private Integer code;
private String value;
NodeNeedEnums(Integer code, String value) {
this.code = code;
this.value = value;
}
}

155
blade-service/logpm-factory-data/logpm-factory-data-suofeiya/src/main/java/com/logpm/factorydata/suofeiya/mq/NodeDataPushListener.java

@ -0,0 +1,155 @@
package com.logpm.factorydata.suofeiya.mq;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.EnumUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.logpm.factorydata.feign.IFactoryDataClient;
import com.logpm.factorydata.suofeiya.enums.FactoryNodeEnums;
import com.logpm.factorydata.suofeiya.enums.NodeMappingEnums;
import com.logpm.factorydata.suofeiya.enums.NodeNeedEnums;
import com.logpm.factorydata.suofeiya.pros.OldProperties;
import com.logpm.factorydata.vo.PushData;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springblade.common.constant.WorkNodeEnums;
import org.springblade.common.constant.factorydata.FactoryDataConstants;
import org.springframework.amqp.core.ExchangeTypes;
import org.springframework.amqp.rabbit.annotation.Exchange;
import org.springframework.amqp.rabbit.annotation.Queue;
import org.springframework.amqp.rabbit.annotation.QueueBinding;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List;
/**
* 监听业务系统推送给节点数据
*
* @author zhaoqiaobo
* @create 2024-03-18 0:02
*/
@Slf4j
@Component
@AllArgsConstructor
public class NodeDataPushListener {
private final IFactoryDataClient factoryDataClient;
private final OldProperties oldProperties;
@RabbitListener(bindings = @QueueBinding(
value = @Queue(name = FactoryDataConstants.Mq.Queues.OLO_NODE_DATA_PUSH, durable = "true"),
exchange = @Exchange(name = FactoryDataConstants.Mq.Exchanges.NODE_DATA_PUSH, type = ExchangeTypes.TOPIC),
key = FactoryDataConstants.Mq.RoutingKeys.OLO_NODE_DATA_PUSH
))
@Transactional(rollbackFor = Exception.class)
public void nodeDataPush(String msg) {
log.info("接收到节点数据推送:{}", msg);
if (checkData(msg)) {
return;
}
JSONObject entries = JSONUtil.parseObj(msg);
// 节点
String node = entries.getStr("node");
String main = entries.getStr("main");
WorkNodeEnums workNodeEnums = EnumUtil.fromString(WorkNodeEnums.class, node);
FactoryNodeEnums factoryNode = NodeMappingEnums.getFactoryByNodeAndStatus(workNodeEnums);
// 2 获取业务数据
List<PushData> content = entries.getBeanList("content", PushData.class);
if (!ObjectUtil.equal(workNodeEnums.getCode(), NodeNeedEnums.PLAN_DISTRIBUTION.getCode())) {
// 推送入库出库数据
// 按订单号和运单号进行分组
if (CollUtil.isNotEmpty(content)) {
JSONObject jsons = new JSONObject();
List<JSONObject> packages = new ArrayList<>();
for (PushData pushData : content) {
JSONObject js = new JSONObject();
js.set("paNo", pushData.getPackageCode());
js.set("subinventoryCode", "");
js.set("locatorCode", "");
js.set("updateDate", DateUtil.now());
js.set("paStausNo", "正常");
js.set("logisticsStatus", factoryNode.getText());
packages.add(js);
}
jsons.set("packageInfo", JSONUtil.toJsonStr(packages));
if (StrUtil.isNotEmpty(oldProperties.getPushNodeUrl())) {
try {
log.info("推送节点数据:{}", JSONUtil.toJsonStr(jsons));
String post = HttpUtil.post(oldProperties.getPushNodeUrl(), JSONUtil.toJsonStr(jsons));
log.info("推送结果:{}", post);
} catch (Exception e) {
e.printStackTrace();
log.error("推送节点数据错误:{}", e);
}
}
}
} else {
// 推送配送单计划
if (CollUtil.isNotEmpty(content)) {
JSONObject jsons = new JSONObject();
List<String> packages = new ArrayList<>();
for (PushData pushData : content) {
packages.add(pushData.getPackageCode());
}
if(StrUtil.isNotEmpty(main)){
JSONObject jsonObject = JSONUtil.parseObj(main);
jsons.set("shipPlanNo", jsonObject.getStr("trainNumber"));
jsons.set("receiver", jsonObject.getStr("receiver"));
jsons.set("receiveAddr", jsonObject.getStr("receiveAddr"));
jsons.set("receiveTel", jsonObject.getStr("receiveTel"));
jsons.set("planDeliveryDate", jsonObject.getStr("planDeliveryDate"));
}
jsons.set("paNo", JSONUtil.toJsonStr(packages));
jsons.set("remark", "");
jsons.set("orderExtendFields", new JSONArray());
if (StrUtil.isNotEmpty(oldProperties.getPushNodePlanUrl())) {
try {
log.info("推送节点数据:{}", JSONUtil.toJsonStr(jsons));
String post = HttpUtil.post(oldProperties.getPushNodePlanUrl(), JSONUtil.toJsonStr(jsons));
log.info("推送结果:{}", post);
} catch (Exception e) {
e.printStackTrace();
log.error("推送节点数据错误:{}", e);
}
}
}
}
}
private boolean checkData(String msg) {
if (StrUtil.isEmpty(msg)) {
return true;
}
if (!msg.contains("brand") || !msg.contains("content") || !msg.contains("node")) {
return true;
}
JSONObject entries = JSONUtil.parseObj(msg);
String node = entries.getStr("node");
if (StrUtil.isEmpty(node)) {
return true;
}
// 不是志邦需要的节点数据直接不处理
if (!EnumUtil.contains(NodeNeedEnums.class, node)) {
return true;
}
WorkNodeEnums workNodeEnums = EnumUtil.fromString(WorkNodeEnums.class, node);
if (ObjectUtil.isEmpty(workNodeEnums)) {
return true;
}
List<JSONObject> content = entries.getBeanList("content", JSONObject.class);
if (CollUtil.isEmpty(content)) {
return true;
}
return false;
}
}

25
blade-service/logpm-factory-data/logpm-factory-data-suofeiya/src/main/java/com/logpm/factorydata/suofeiya/pros/OldProperties.java

@ -0,0 +1,25 @@
package com.logpm.factorydata.suofeiya.pros;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
/**
* 老系统配置
* @author zhaoqiaobo
* @Date 2024/5/29
**/
@Data
@Component
@ConfigurationProperties(prefix = "old")
public class OldProperties {
/**
* 推送节点数据到来系统的 url
*/
private String pushNodeUrl;
/**
* 推送配送计划URL
*/
private String pushNodePlanUrl;
}

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

@ -2133,6 +2133,7 @@ public class TrunklineCarsLoadServiceImpl extends BaseServiceImpl<TrunklineCarsL
Long waybillId = null;
String waybillNo = null;
String orderCode = null;
String brandName = null;
Integer isData = 1;
Integer isAbnormal = 0;
Long trayId = null;
@ -2219,6 +2220,7 @@ public class TrunklineCarsLoadServiceImpl extends BaseServiceImpl<TrunklineCarsL
String waybillNumber = otherParcelListEntity.getWaybillNumber();
fromWarehouseId = otherParcelListEntity.getWarehouseId();
orderCode = otherParcelListEntity.getOrderCode();
brandName = otherParcelListEntity.getBrandName();
BasicdataWarehouseEntity fromWarehouseEntity = basicdataWarehouseClient.getEntityWarehouseId(fromWarehouseId);
if (!Objects.isNull(fromWarehouseEntity)) {
fromWarehouseName = fromWarehouseEntity.getName();
@ -2261,6 +2263,7 @@ public class TrunklineCarsLoadServiceImpl extends BaseServiceImpl<TrunklineCarsL
Long packageId = parcelListEntity.getId();
waybillNo = parcelListEntity.getWaybillNumber();
orderCode = parcelListEntity.getOrderCode();
brandName = parcelListEntity.getBrandName();
waybillId = parcelListEntity.getWaybillId();
fromWarehouseId = parcelListEntity.getWarehouseId();
BasicdataWarehouseEntity fromWarehouseEntity = basicdataWarehouseClient.getEntityWarehouseId(fromWarehouseId);
@ -2333,6 +2336,23 @@ public class TrunklineCarsLoadServiceImpl extends BaseServiceImpl<TrunklineCarsL
updateNumByLoadId(loadId);
// 推送包件装车数据到工厂
pushFactoryOrderData(warehouseId, orderPackageCode, orderCode);
try {
NodePushMsg nodePushMsg = NodePushMsg.builder()
.operator(AuthUtil.getNickName())
.operatorTime(new Date())
.address("在【" + warehouseName + "】出库")
.brand(BrandEnums.getByValue(brandName))
.node(WorkNodeEnums.INITIAL_WAREHOUSE_LOADING)
.content(Arrays.asList(PushData.builder()
.packageCode(orderPackageCode)
.orderCode(orderCode)
.warehouseName(warehouseName)
.build()))
.build();
factoryDataMessageSender.sendNodeDataByBrand(nodePushMsg);
}catch (Exception e){
log.error("推送数据失败",e);
}
return R.success("装车成功");
}
@ -3861,6 +3881,19 @@ public class TrunklineCarsLoadServiceImpl extends BaseServiceImpl<TrunklineCarsL
Map<String, Object> map = new HashMap<>();
map.put("messageData", JSONUtil.toJsonStr(orderStatusDTO));
rabbitTemplate.convertAndSend(RabbitConstant.HWY_ORDER_STATUS_EXCHANGE, RabbitConstant.HWY_ORDER_STATUS_ROUTING, map);
NodePushMsg nodePushMsg = NodePushMsg.builder()
.operator(AuthUtil.getNickName())
.operatorTime(new Date())
.address("在【" + warehouseName + "】入库")
.brand(BrandEnums.getByValue(entity.getBrandName()))
.node(WorkNodeEnums.UNLOAD_INCOMING_WAREHOUSE)
.content(Arrays.asList(PushData.builder()
.packageCode(entity.getOrderPackageCode())
.warehouseName(warehouseName)
.orderCode(entity.getOrderCode())
.build()))
.build();
factoryDataMessageSender.sendNodeDataByBrand(nodePushMsg);
} catch (Exception e) {
log.error("推送卸车失败{}", e);
}
@ -4565,6 +4598,23 @@ public class TrunklineCarsLoadServiceImpl extends BaseServiceImpl<TrunklineCarsL
orderPackageCodes.add(orderPackageCode);
// 推送包件装车信息到工厂
pushFactoryOrderData(warehouseId, orderPackageCode, orderCode);
try {
NodePushMsg nodePushMsg = NodePushMsg.builder()
.operator(AuthUtil.getNickName())
.operatorTime(new Date())
.address("在【" + warehouseName + "】出库")
.brand(BrandEnums.getByValue(parcelListEntity.getBrandName()))
.node(WorkNodeEnums.INITIAL_WAREHOUSE_LOADING)
.content(Arrays.asList(PushData.builder()
.packageCode(orderPackageCode)
.orderCode(orderCode)
.warehouseName(warehouseName)
.build()))
.build();
factoryDataMessageSender.sendNodeDataByBrand(nodePushMsg);
}catch (Exception e1){
log.error("推送数据失败",e1);
}
}
}
});
@ -5904,6 +5954,20 @@ public class TrunklineCarsLoadServiceImpl extends BaseServiceImpl<TrunklineCarsL
Map<String, Object> map = new HashMap<>();
map.put("messageData", JSONUtil.toJsonStr(orderStatusDTO));
rabbitTemplate.convertAndSend(RabbitConstant.HWY_ORDER_STATUS_EXCHANGE, RabbitConstant.HWY_ORDER_STATUS_ROUTING, map);
NodePushMsg nodePushMsg = NodePushMsg.builder()
.operator(AuthUtil.getNickName())
.operatorTime(new Date())
.address("在【" + warehouseName + "】入库")
.brand(BrandEnums.getByValue(distributionParcelListEntity.getBrandName()))
.node(WorkNodeEnums.UNLOAD_INCOMING_WAREHOUSE)
.content(Arrays.asList(PushData.builder()
.packageCode(orderPackageCode)
.warehouseName(warehouseName)
.orderCode(orderCode)
.build()))
.build();
factoryDataMessageSender.sendNodeDataByBrand(nodePushMsg);
}
} catch (Exception e) {
log.error("入库推送失败:{}", e);

Loading…
Cancel
Save