feat(all): 优化志邦推送数据代码 #19

Merged
zhaoqiaobo merged 1 commits from dev into pre-production 11 months ago
  1. 5
      blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/entity/ZbFactoryNodeOrderEntity.java
  2. 5
      blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/entity/ZbFactoryNodePushEntity.java
  3. 18
      blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/enums/ZbomNodeEnums.java
  4. 6
      blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/mapper/FactoryNodeOrderMapper.java
  5. 15
      blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/mapper/FactoryNodeOrderMapper.xml
  6. 4
      blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/mapper/OrderPackageMapper.java
  7. 2
      blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/mapper/OrderPackageMapper.xml
  8. 463
      blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/mq/ZbomNodeDataPushListener.java
  9. 7
      blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/service/IFactoryNodeOrderService.java
  10. 4
      blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/service/IOrderPackageService.java
  11. 14
      blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/vo/NodeDataDTO.java

5
blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/entity/ZbFactoryNodeOrderEntity.java

@ -60,6 +60,11 @@ public class ZbFactoryNodeOrderEntity extends BaseEntity {
*/
@ApiModelProperty(name = "加盟商单号", notes = "")
private String platformOrderCode;
/**
* 当前节点
*/
@ApiModelProperty(name = "当前节点", notes = "")
private Integer currentNode;
/**
* 已推送过的节点
*/

5
blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/entity/ZbFactoryNodePushEntity.java

@ -65,6 +65,11 @@ public class ZbFactoryNodePushEntity extends BaseEntity {
*/
@ApiModelProperty(name = "节点", notes = "")
private String node;
/**
* 包条码
*/
@ApiModelProperty(name = "包条码", notes = "")
private String packageCode;
/**
* 内容
*/

18
blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/enums/ZbomNodeEnums.java

@ -11,18 +11,20 @@ import lombok.Getter;
@Getter
public enum ZbomNodeEnums {
STATION_REACH_VEHICLE("T20100", "场站到车"),
STATION_DEPART("T20200", "场站发车"),
INTRANSIT("T50000", "在途"),
DELIVERY_ARRIVAL("T80000", "送货抵达"),
SIGN_FOR("T90000", "签收"),
PARTIAL_RECEIPT("T90001", "部分签收"),
REJECT_ALL("T90002", "全部拒收");
STATION_REACH_VEHICLE(10, "T20100", "场站到车"),
STATION_DEPART(20, "T20200", "场站发车"),
INTRANSIT(30, "T50000", "在途"),
DELIVERY_ARRIVAL(40, "T80000", "送货抵达"),
PARTIAL_RECEIPT(50, "T90001", "部分签收"),
SIGN_FOR(60, "T90000", "签收"),
REJECT_ALL(70, "T90002", "全部拒收");
private Integer index;
private String code;
private String value;
ZbomNodeEnums(String code, String value) {
ZbomNodeEnums(Integer index, String code, String value) {
this.index = index;
this.code = code;
this.value = value;
}

6
blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/mapper/FactoryNodeOrderMapper.java

@ -18,7 +18,11 @@ package com.logpm.factorydata.zbom.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.logpm.factorydata.zbom.entity.ZbFactoryNodeOrderEntity;
import com.logpm.factorydata.zbom.vo.NodeDataDTO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* 发货单号的节点操作数据 Mapper
@ -29,4 +33,6 @@ import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface FactoryNodeOrderMapper extends BaseMapper<ZbFactoryNodeOrderEntity> {
List<ZbFactoryNodeOrderEntity> findHistoryNodeOrder(@Param("orders") List<NodeDataDTO> orders);
}

15
blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/mapper/FactoryNodeOrderMapper.xml

@ -2,4 +2,19 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.logpm.factorydata.zbom.mapper.FactoryNodeOrderMapper">
<select id="findHistoryNodeOrder" resultType="com.logpm.factorydata.zbom.entity.ZbFactoryNodeOrderEntity">
select t.id,t.depart_code,t.platform_order_code,t.push_node,t.current_node from zb_factory_node_order t
where exists(
select 1 from (
<foreach collection="orders" index="ind" item="item">
<if test="ind == 0">
select #{item.departCode} departCode,#{item.platformOrderCode} platformOrderCode
</if>
<if test="ind != 0">
union all
select #{item.departCode} departCode,#{item.platformOrderCode} platformOrderCode
</if>
</foreach>
) orders where orders.departCode = t.depart_code and orders.platformOrderCode = t.platform_order_code)
</select>
</mapper>

4
blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/mapper/OrderPackageMapper.java

@ -20,7 +20,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.logpm.factorydata.zbom.entity.ZbOrderPackageEntity;
import com.logpm.factorydata.zbom.vo.NoSignNumberDTO;
import com.logpm.factorydata.zbom.vo.OrderPackageDTO;
import com.logpm.factorydata.zbom.vo.OrderPackageSignDTO;
import com.logpm.factorydata.zbom.vo.NodeDataDTO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@ -35,7 +35,7 @@ import java.util.List;
@Mapper
public interface OrderPackageMapper extends BaseMapper<ZbOrderPackageEntity> {
List<OrderPackageSignDTO> findOrderCodebypackageCodes(@Param("packageList") List<String> packageCodeList);
List<NodeDataDTO> findOrderCodebypackageCodes(@Param("packageList") List<String> packageCodeList);
void updateSignForStatus(@Param("packageCodeList") List<String> packageCodeList);

2
blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/mapper/OrderPackageMapper.xml

@ -16,7 +16,7 @@
) packageCodeIds where packageCodeIds.pid = t.package_code)
</update>
<select id="findOrderCodebypackageCodes" resultType="com.logpm.factorydata.zbom.vo.OrderPackageSignDTO">
<select id="findOrderCodebypackageCodes" resultType="com.logpm.factorydata.zbom.vo.NodeDataDTO">
select re.depart_code,
t.platform_order_code,
group_concat(t.package_code) packageCode,

463
blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/mq/ZbomNodeDataPushListener.java

@ -8,7 +8,6 @@ import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.logpm.factorydata.enums.BrandEnums;
import com.logpm.factorydata.enums.NodeEnums;
import com.logpm.factorydata.feign.IFactoryDataClient;
@ -26,12 +25,13 @@ import com.logpm.factorydata.zbom.service.IFactoryNodeOrderService;
import com.logpm.factorydata.zbom.service.IFactoryNodePushFailService;
import com.logpm.factorydata.zbom.service.IFactoryNodePushService;
import com.logpm.factorydata.zbom.service.IOrderPackageService;
import com.logpm.factorydata.zbom.util.ZbomUtil;
import com.logpm.factorydata.zbom.vo.NoSignNumberDTO;
import com.logpm.factorydata.zbom.vo.NodeConfirmParamDTO;
import com.logpm.factorydata.zbom.vo.OrderPackageSignDTO;
import com.logpm.factorydata.zbom.vo.NodeDataDTO;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.springblade.common.constant.factorydata.FactoryDataConstants;
import org.springblade.common.utils.HutoolConfigUtil;
import org.springframework.amqp.core.ExchangeTypes;
@ -89,265 +89,286 @@ public class ZbomNodeDataPushListener {
))
public void nodeDataPush(String msg) {
// {"brand":"ZBOM","node":"TRANSFER_WAREHOUSE_DEPART","operator":"","operatorTime":"","content":[{"packageCode":"1423090693445"}]}
// 校验数据
log.info("zb接收到节点数据推送:{}", msg);
if (!checkMsg(msg)) {
// 1 校验数据
if (checkData(msg)) {
return;
}
JSONObject entries = JSONUtil.parseObj(msg);
// 业务数据
List<JSONObject> content = entries.getBeanList("content", JSONObject.class);
List<String> packageCodeList = null;
if (CollUtil.isNotEmpty(content)) {
// 查询这次操作的所有包件和运单号
packageCodeList = new ArrayList<>();
for (JSONObject obj : content) {
String packageCode = obj.getStr("packageCode");
if (StrUtil.isNotBlank(packageCode)) {
packageCodeList.add(packageCode);
}
}
}
// 处理节点信息
// 节点
String node = entries.getStr("node");
NodeEnums nodeEnums = EnumUtil.fromString(NodeEnums.class, node);
// 2 获取业务数据
List<String> packageCodeList = getBizData(entries);
if (CollUtil.isNotEmpty(packageCodeList)) {
// 根据运单号和自编码分组查询出对应的数量
List<OrderPackageSignDTO> orders = orderPackageService.findOrderCodebypackageCodes(packageCodeList);
// 根据运单号和自编码分组查询出未签收的数量
List<NoSignNumberDTO> noSignNumberDTOS = orderPackageService.findNoSignNumber(packageCodeList);
log.info("未签收数据:{}", JSONUtil.toJsonStr(noSignNumberDTOS));
Map<String, Integer> noSignNumberMap = new HashMap<>();
if (CollUtil.isNotEmpty(noSignNumberDTOS)) {
for (NoSignNumberDTO noSignNumberDTO : noSignNumberDTOS) {
noSignNumberMap.put(noSignNumberDTO.getDepartCode() + noSignNumberDTO.getPlatformOrderCode(), noSignNumberDTO.getNum());
List<NodeDataDTO> orders = orderPackageService.findOrderCodebypackageCodes(packageCodeList);
Map<String, NodeDataDTO> nodeDataMap = new HashMap<>();
if (CollUtil.isNotEmpty(orders)) {
for (NodeDataDTO order : orders) {
nodeDataMap.put(order.getDepartCode() + order.getPlatformOrderCode(), order);
}
}
if (CollUtil.isNotEmpty(orders)) {
for (OrderPackageSignDTO order : orders) {
Boolean flag = Boolean.TRUE;
NodeConfirmParamDTO paramDTO = new NodeConfirmParamDTO();
paramDTO.setDepartCode(order.getDepartCode());
paramDTO.setPlatformOrderCode(order.getPlatformOrderCode());
paramDTO.setSignQty(order.getSignQty());
order.setOperator(entries.getStr("operator"));
paramDTO.setOperator(entries.getStr("operator"));
order.setOperatorTime(entries.getStr("operatorTime"));
paramDTO.setOperatorTime(entries.getStr("operatorTime"));
order.setAddress(entries.getStr("address"));
paramDTO.setAddress(entries.getStr("address"));
// 如果是签收节点,需要判断是否为全部签收和部分签收
if (EnumUtil.equals(NodeEnums.CLERK_REVIEW, node)) {
ZbFactoryNodeOrderEntity nodeOrder = nodeOrderService.getOne(Wrappers.<ZbFactoryNodeOrderEntity>lambdaQuery()
.eq(ZbFactoryNodeOrderEntity::getPlatformOrderCode, paramDTO.getPlatformOrderCode())
.eq(ZbFactoryNodeOrderEntity::getDepartCode, paramDTO.getDepartCode())
);
if (ObjectUtil.isNotEmpty(nodeOrder)) {
flag = Boolean.FALSE;
// 签收节点获取组装未签收数据
Map<String, Integer> noSignNumberMap = null;
if (EnumUtil.equals(NodeEnums.CLERK_REVIEW, node)) {
noSignNumberMap = getNoSignNumber(packageCodeList);
}
// 获取历史发送的节点数据
List<ZbFactoryNodeOrderEntity> nodeOrderEntities = nodeOrderService.findHistoryNodeOrder(orders);
Map<String, ZbFactoryNodeOrderEntity> nodeOrderMap = new HashMap<>();
if (CollUtil.isNotEmpty(nodeOrderEntities)) {
// 将nodeOrderEntities的数据封装到nodeOrderMap,以departCode+platformOrderCode为key
nodeOrderEntities.forEach(nodeOrderEntity -> {
String key = nodeOrderEntity.getDepartCode() + nodeOrderEntity.getPlatformOrderCode();
nodeOrderMap.put(key, nodeOrderEntity);
});
}
List<NodeConfirmParamDTO> nodeConfirmLsit = new ArrayList<>();
Map<String, SendMsg> sendMsgMap = new HashMap<>();
// 构建提交参数
buildParam(entries, node, nodeEnums, orders, noSignNumberMap, nodeOrderMap, nodeConfirmLsit, sendMsgMap);
try {
// 推送给志邦
if (CollUtil.isNotEmpty(nodeConfirmLsit)) {
for (NodeConfirmParamDTO nodeConfirmParam : nodeConfirmLsit) {
String key = nodeConfirmParam.getDepartCode() + nodeConfirmParam.getPlatformOrderCode();
String body = JSONUtil.toJsonStr(nodeConfirmParam);
// String result = ZbomUtil.pushZbomSystem(zbProperties, body, ZbomConstants.Method.ROUTE_NODE_CONFIRM);
JSONObject jsonObject = new JSONObject();
jsonObject.set("code", "0");
String result = JSONUtil.toJsonStr(jsonObject);
log.info("zb节点推送数据:参数{},返回值{}。", body, result);
if (StrUtil.isNotBlank(result)) {
ZbFactoryNodePushFailEntity build = ZbFactoryNodePushFailEntity.builder().content(body).resultContent(result).build();
if (!StrUtil.contains(result, "code")) {
// 推送失败
nodePushFailService.save(build);
} else {
JSONObject resultJson = JSONUtil.parseObj(result);
String code = resultJson.getStr("code");
if (ObjectUtil.equal(code, "1")) {
// 推送失败
nodePushFailService.save(build);
}
NodeDataDTO nodeDataDTO = nodeDataMap.get(key);
String packageCode = nodeDataDTO.getPackageCode();
if (ObjectUtil.isEmpty(packageCode)) {
continue;
}
if (ObjectUtil.equal(code, "0")) {
ZbFactoryNodePushEntity pushEntity = ZbFactoryNodePushEntity.builder()
.departCode(nodeConfirmParam.getDepartCode())
.platformOrderCode(nodeConfirmParam.getPlatformOrderCode())
.node(nodeConfirmParam.getNode())
.packageCode(packageCode)
.content(body)
.resultContent(result)
.build();
// 推送成功
nodePushService.save(pushEntity);
//
if (ObjectUtil.equal(nodeConfirmParam.getNode(), ZbomNodeEnums.PARTIAL_RECEIPT.getCode())
|| ObjectUtil.equal(nodeConfirmParam.getNode(), ZbomNodeEnums.SIGN_FOR.getCode())) {
// 修改订单包件表的签收状态
List<String> packages = CollUtil.newArrayList(packageCode.split(","));
orderPackageService.updateSignForStatus(packages);
}
if (sendMsgMap.containsKey(key)) {
factoryDataClient.sendMessage(sendMsgMap.get(key));
}
// 修改加盟商单号+发货单号节点数据
nodeOrderService.updateNodeOrder(nodeOrderMap.get(key));
}
}
}
log.info("key:{},签收数量:{}", paramDTO.getDepartCode() + "_" + paramDTO.getPlatformOrderCode(), paramDTO.getSignQty());
Integer signNumber = Convert.toInt(paramDTO.getSignQty());
}
}
} catch (Exception e) {
// 处理推送不成功的异常情况
log.error("zb节点推送数据异常:{}", e);
// 保存日志
e.printStackTrace();
}
}
}
private void buildParam(JSONObject entries, String node, NodeEnums nodeEnums, List<NodeDataDTO> orders,
Map<String, Integer> noSignNumberMap, Map<String, ZbFactoryNodeOrderEntity> nodeOrderMap,
List<NodeConfirmParamDTO> nodeConfirmLsit, Map<String, SendMsg> sendMsgMap) {
if (CollUtil.isNotEmpty(orders)) {
for (NodeDataDTO nodeData : orders) {
ZbomNodeEnums zbNode = ZbomNodeMappingEnums.getZbomByNodeAndStatus(nodeEnums);
String departCode = nodeData.getDepartCode();
String platformOrderCode = nodeData.getPlatformOrderCode();
String key = departCode + platformOrderCode;
// 组装需要推送的数据
NodeConfirmParamDTO paramDTO = new NodeConfirmParamDTO();
paramDTO.setDepartCode(departCode);
paramDTO.setPlatformOrderCode(platformOrderCode);
paramDTO.setOperator(entries.getStr("operator"));
paramDTO.setOperatorTime(entries.getStr("operatorTime"));
paramDTO.setAddress(entries.getStr("address"));
paramDTO.setNode(zbNode.getCode());
ZbFactoryNodeOrderEntity nodeOrderEntity = nodeOrderMap.get(departCode + platformOrderCode);
ZbomNodeEnums currentNode = zbNode;
// 如果是签收节点,需要判断是否为全部签收和部分签收
if (EnumUtil.equals(NodeEnums.CLERK_REVIEW, node)) {
// 签收节点设置签收数量
Integer signNumber = Convert.toInt(nodeData.getSignQty());
log.info("key:{},签收数量:{}", departCode + "_" + platformOrderCode, signNumber);
// 签收环节上一个节点是在途,说明缺少一个送货抵达,需要补一个节点
if (ObjectUtil.isEmpty(nodeOrderEntity) || ObjectUtil.equal(nodeOrderEntity.getCurrentNode(), ZbomNodeEnums.INTRANSIT.getIndex())) {
if (ObjectUtil.isEmpty(nodeOrderEntity)) {
nodeOrderEntity = new ZbFactoryNodeOrderEntity();
}
// 第一次签收,节点改为送货抵达
paramDTO.setNode(ZbomNodeEnums.DELIVERY_ARRIVAL.getCode());
currentNode = ZbomNodeEnums.DELIVERY_ARRIVAL;
nodeConfirmLsit.add(paramDTO);
List<Object> js = new ArrayList<>();
for (String s : nodeData.getPackageCode().split(",")) {
JSONObject entries1 = new JSONObject();
entries1.set("packageCode", s);
js.add(entries1);
}
NodePushMsg nodePushMsg = NodePushMsg.builder()
.node(NodeEnums.CLERK_REVIEW)
.operator(paramDTO.getOperator())
.operatorTime(DateUtil.parseDateTime(paramDTO.getOperatorTime()))
.address(paramDTO.getAddress())
.brand(BrandEnums.ZB)
.content(js)
.build();
SendMsg message = SendMsg.builder()
.delay(30 * 60 * 1000)
.exchange(FactoryDataConstants.Mq.Exchanges.NODE_DATA_PUSH_DELAYED)
.routingKey(FactoryDataConstants.Mq.RoutingKeys.ZBOM_NODE_DATA_PUSH)
.message(JSONUtil.toJsonStr(nodePushMsg, HutoolConfigUtil.jsonConfigByDataTimeFormat()))
.build();
sendMsgMap.put(key, message);
} else {
// 查询当前未签收的数量与当前签收数量比较,如果未签收数较大,则是部分签收
String key = paramDTO.getDepartCode() + paramDTO.getPlatformOrderCode();
// 部分签收
paramDTO.setNode(ZbomNodeMappingEnums.getZbomByNodeAndStatus(nodeEnums, ZbomConstants.Status.SIGN_FOR_SECTION_STATUS).getCode());
currentNode = ZbomNodeMappingEnums.getZbomByNodeAndStatus(nodeEnums, ZbomConstants.Status.SIGN_FOR_SECTION_STATUS);
paramDTO.setSignQty(nodeData.getSignQty());
if (ObjectUtil.isNotEmpty(noSignNumberMap) && noSignNumberMap.containsKey(key)) {
Integer noSignNum = noSignNumberMap.get(key);
if (noSignNum <= signNumber) {
// 全部签收
paramDTO.setNode(ZbomNodeMappingEnums.getZbomByNodeAndStatus(nodeEnums, ZbomConstants.Status.SIGN_FOR_ALL_STATUS).getCode());
currentNode = ZbomNodeMappingEnums.getZbomByNodeAndStatus(nodeEnums, ZbomConstants.Status.SIGN_FOR_ALL_STATUS);
}
} else {
continue;
}
// 第一次签收,节点改为送货抵达
if (flag) {
paramDTO.setRejectQty("");
paramDTO.setSignQty("");
paramDTO.setNode(ZbomNodeEnums.DELIVERY_ARRIVAL.getCode());
}
} else {
paramDTO.setRejectQty("");
paramDTO.setSignQty("");
paramDTO.setNode(ZbomNodeMappingEnums.getZbomByNodeAndStatus(nodeEnums).getCode());
}
try {
// 推送给志邦
// if (CollUtil.isNotEmpty(nodeConfirmParams)) {
// for (NodeConfirmParamDTO nodeConfirmParam : nodeConfirmParams) {
String body = JSONUtil.toJsonStr(paramDTO);
String result = ZbomUtil.pushZbomSystem(zbProperties, body, ZbomConstants.Method.ROUTE_NODE_CONFIRM);
// JSONObject jsonObject = new JSONObject();
// jsonObject.set("code", "0");
// String result = JSONUtil.toJsonStr(jsonObject);
log.info("zb节点推送数据:参数{},返回值{}。", body, result);
saveResult(entries, packageCodeList, order, body, result, flag);
// }
// }
} catch (Exception e) {
// 处理推送不成功的异常情况
log.error("zb节点推送数据异常:{}", e);
// 保存日志
e.printStackTrace();
}
}
Integer index = currentNode.getIndex();
// 组装历史节点数据
if (buildNodeOrder(nodeOrderEntity, currentNode, departCode, platformOrderCode, index, nodeOrderMap)) {
continue;
}
nodeConfirmLsit.add(paramDTO);
}
}
}
// 构建参数对象
// List<NodeConfirmParamDTO> nodeConfirmParams = initParam(msgEntries, packageCodeList);
private boolean buildNodeOrder(ZbFactoryNodeOrderEntity nodeOrderEntity, ZbomNodeEnums zbNode, String departCode, String platformOrderCode, Integer index, Map<String, ZbFactoryNodeOrderEntity> nodeOrderEntityMap) {
if (ObjectUtil.isNotEmpty(nodeOrderEntity)) {
Integer currentNode = nodeOrderEntity.getCurrentNode();
String pushNode = nodeOrderEntity.getPushNode();
// 如果当前节点是场站发车,且已经发送过了,则跳过
if (ObjectUtil.isNotEmpty(pushNode) && ObjectUtil.equal(index, ZbomNodeEnums.STATION_DEPART.getIndex())
&& pushNode.contains(ZbomNodeEnums.STATION_DEPART.getIndex().toString())) {
return true;
}
// 送货抵达节点
if (ObjectUtil.isNotEmpty(pushNode) && ObjectUtil.equal(index, ZbomNodeEnums.DELIVERY_ARRIVAL.getIndex())
&& pushNode.contains(ZbomNodeEnums.DELIVERY_ARRIVAL.getIndex().toString())) {
return true;
}
// 签收节点
if (ObjectUtil.isNotEmpty(pushNode) && ObjectUtil.equal(index, ZbomNodeEnums.SIGN_FOR.getIndex())
&& pushNode.contains(ZbomNodeEnums.SIGN_FOR.getIndex().toString())) {
return true;
}
// 在途节点/部分签收节点
if (ObjectUtil.isNotEmpty(currentNode) && currentNode > index) {
return true;
}
// 已发送过的节点不包含当前节点则追加
if (StrUtil.isEmpty(pushNode)) {
nodeOrderEntity.setPushNode(StrUtil.toString(index));
} else if (!pushNode.contains(index.toString())) {
nodeOrderEntity.setPushNode(StrUtil.join(",", pushNode, index));
}
}
nodeOrderEntity.setDepartCode(departCode);
nodeOrderEntity.setPlatformOrderCode(platformOrderCode);
nodeOrderEntity.setCurrentNode(index);
nodeOrderEntityMap.put(departCode + platformOrderCode, nodeOrderEntity);
return false;
}
@NotNull
private Map<String, Integer> getNoSignNumber(List<String> packageCodeList) {
// 根据运单号和自编码分组查询出未签收的数量
List<NoSignNumberDTO> noSignNumberDTOS = orderPackageService.findNoSignNumber(packageCodeList);
log.info("未签收数据:{}", JSONUtil.toJsonStr(noSignNumberDTOS));
Map<String, Integer> noSignNumberMap = new HashMap<>();
if (CollUtil.isNotEmpty(noSignNumberDTOS)) {
for (NoSignNumberDTO noSignNumberDTO : noSignNumberDTOS) {
noSignNumberMap.put(noSignNumberDTO.getDepartCode() + noSignNumberDTO.getPlatformOrderCode(), noSignNumberDTO.getNum());
}
}
return noSignNumberMap;
}
private void saveResult(JSONObject msgEntries, List<String> packageCodeList, OrderPackageSignDTO
nodeConfirmParam, String body, String result, Boolean flag) {
if (StrUtil.isNotBlank(result)) {
ZbFactoryNodePushFailEntity build = ZbFactoryNodePushFailEntity.builder().content(body).resultContent(result).build();
if (!StrUtil.contains(result, "code")) {
// 推送失败
nodePushFailService.save(build);
} else {
JSONObject entries = JSONUtil.parseObj(result);
String code = entries.getStr("code");
if (ObjectUtil.equal(code, "1")) {
// 推送失败
nodePushFailService.save(build);
}
if (ObjectUtil.equal(code, "0")) {
ZbFactoryNodePushEntity pushEntity = ZbFactoryNodePushEntity.builder()
.departCode(nodeConfirmParam.getDepartCode())
.platformOrderCode(nodeConfirmParam.getPlatformOrderCode())
.content(body)
.resultContent(result)
.build();
// 推送成功
nodePushService.save(pushEntity);
String node = msgEntries.getStr("node");
NodeEnums nodeEnums = EnumUtil.fromString(NodeEnums.class, node);
if (ObjectUtil.equal(nodeEnums, NodeEnums.CLERK_REVIEW)) {
if (!flag) {
// 修改订单包件表的签收状态
List<String> packages = CollUtil.newArrayList(nodeConfirmParam.getPackageCode().split(","));
orderPackageService.updateSignForStatus(packages);
} else {
List<Object> js = new ArrayList<>();
String packageCode = nodeConfirmParam.getPackageCode();
for (String s : packageCode.split(",")) {
JSONObject entries1 = new JSONObject();
entries1.set("packageCode", s);
js.add(entries1);
}
NodePushMsg nodePushMsg = NodePushMsg.builder()
.node(NodeEnums.CLERK_REVIEW)
.operator(nodeConfirmParam.getOperator())
.operatorTime(DateUtil.parseDateTime(nodeConfirmParam.getOperatorTime()))
.address(nodeConfirmParam.getAddress())
.brand(BrandEnums.ZB)
.address(nodeConfirmParam.getAddress())
.content(js)
.build();
SendMsg message = SendMsg.builder()
.delay(30 * 60 * 1000)
.exchange(FactoryDataConstants.Mq.Exchanges.NODE_DATA_PUSH_DELAYED)
.routingKey(FactoryDataConstants.Mq.RoutingKeys.ZBOM_NODE_DATA_PUSH)
.message(JSONUtil.toJsonStr(nodePushMsg, HutoolConfigUtil.jsonConfigByDataTimeFormat()))
.build();
factoryDataClient.sendMessage(message);
}
// 修改加盟商单号+发货单号节点数据
nodeOrderService.updateNodeOrder(nodeConfirmParam);
}
@Nullable
private List<String> getBizData(JSONObject entries) {
List<JSONObject> content = entries.getBeanList("content", JSONObject.class);
List<String> packageCodeList = null;
if (CollUtil.isNotEmpty(content)) {
// 查询这次操作的所有包件和运单号
packageCodeList = new ArrayList<>();
for (JSONObject obj : content) {
String packageCode = obj.getStr("packageCode");
if (StrUtil.isNotBlank(packageCode)) {
packageCodeList.add(packageCode);
}
}
}
return packageCodeList;
}
// private List<NodeConfirmParamDTO> initParam(JSONObject entries, List<String> packageCodeList) {
// // 处理节点信息
// String node = entries.getStr("node");
// NodeEnums nodeEnums = EnumUtil.fromString(NodeEnums.class, node);
// if (CollUtil.isNotEmpty(packageCodeList)) {
// // 根据运单号和自编码分组查询出对应的数量
// List<NodeConfirmParamDTO> orders = orderPackageService.findOrderCodebypackageCodes(packageCodeList);
// // 根据运单号和自编码分组查询出未签收的数量
// List<NoSignNumberDTO> noSignNumberDTOS = orderPackageService.findNoSignNumber(packageCodeList);
// log.info("未签收数据:{}", JSONUtil.toJsonStr(noSignNumberDTOS));
// Map<String, Integer> noSignNumberMap = new HashMap<>();
// if (CollUtil.isNotEmpty(noSignNumberDTOS)) {
// for (NoSignNumberDTO noSignNumberDTO : noSignNumberDTOS) {
// noSignNumberMap.put(noSignNumberDTO.getDepartCode() + noSignNumberDTO.getPlatformOrderCode(), noSignNumberDTO.getNum());
// }
// }
// if (CollUtil.isNotEmpty(orders)) {
// for (NodeConfirmParamDTO order : orders) {
// order.setOperator(entries.getStr("operator"));
// order.setOperatorTime(entries.getStr("operatorTime"));
// order.setAddress(entries.getStr("address"));
// // 如果是签收节点,需要判断是否为全部签收和部分签收
// if (EnumUtil.equals(NodeEnums.CLERK_REVIEW, node)) {
// ZbFactoryNodeOrderEntity nodeOrder = nodeOrderService.getOne(Wrappers.<ZbFactoryNodeOrderEntity>lambdaQuery()
// .eq(ZbFactoryNodeOrderEntity::getPlatformOrderCode, order.getPlatformOrderCode())
// .eq(ZbFactoryNodeOrderEntity::getDepartCode, order.getDepartCode())
// );
// Boolean flag = Boolean.FALSE;
// if (ObjectUtil.isNotEmpty(nodeOrder)) {
// flag = Boolean.TRUE;
// }
// log.info("key:{},签收数量:{}", order.getDepartCode() + "_" + order.getPlatformOrderCode(), order.getSignQty());
// Integer signNumber = Convert.toInt(order.getSignQty());
// // 查询当前未签收的数量与当前签收数量比较,如果未签收数较大,则是部分签收
// String key = order.getDepartCode() + order.getPlatformOrderCode();
// // 部分签收
// order.setNode(ZbomNodeMappingEnums.getZbomByNodeAndStatus(nodeEnums, ZbomConstants.Status.SIGN_FOR_SECTION_STATUS).getCode());
// if (ObjectUtil.isNotEmpty(noSignNumberMap) && noSignNumberMap.containsKey(key)) {
// Integer noSignNum = noSignNumberMap.get(key);
// if (noSignNum <= signNumber) {
// // 全部签收
// order.setNode(ZbomNodeMappingEnums.getZbomByNodeAndStatus(nodeEnums, ZbomConstants.Status.SIGN_FOR_ALL_STATUS).getCode());
// }
// } else {
// continue;
// }
// // 第一次签收,节点改为送货抵达
// if (flag) {
// order.setRejectQty("");
// order.setSignQty("");
// order.setNode(ZbomNodeEnums.DELIVERY_ARRIVAL.getCode());
// }
// } else {
// order.setRejectQty("");
// order.setSignQty("");
// order.setNode(ZbomNodeMappingEnums.getZbomByNodeAndStatus(nodeEnums).getCode());
// }
// }
// }
// return orders;
// }
// return null;
// }
private boolean checkMsg(String msg) {
Boolean flag = Boolean.FALSE;
if (StrUtil.isBlank(msg)) {
return flag;
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");
List<JSONObject> content = entries.getBeanList("content", JSONObject.class);
if (CollUtil.isEmpty(content)) {
return flag;
if (StrUtil.isEmpty(node)) {
return true;
}
if (StrUtil.isBlank(node)) {
return flag;
}
// 不需要处理的节点直接放弃
// 不是志邦需要的节点数据直接不处理
if (!EnumUtil.contains(NodeNeedEnums.class, node)) {
return flag;
return true;
}
NodeEnums nodeEnums = EnumUtil.fromString(NodeEnums.class, node);
if (ObjectUtil.isEmpty(nodeEnums)) {
return true;
}
List<JSONObject> content = entries.getBeanList("content", JSONObject.class);
if (CollUtil.isEmpty(content)) {
return true;
}
return Boolean.TRUE;
return false;
}
}

7
blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/service/IFactoryNodeOrderService.java

@ -17,9 +17,11 @@
package com.logpm.factorydata.zbom.service;
import com.logpm.factorydata.zbom.entity.ZbFactoryNodeOrderEntity;
import com.logpm.factorydata.zbom.vo.OrderPackageSignDTO;
import com.logpm.factorydata.zbom.vo.NodeDataDTO;
import org.springblade.core.mp.base.BaseService;
import java.util.List;
/**
* 发货单号的节点操作数据 服务类
*
@ -28,6 +30,7 @@ import org.springblade.core.mp.base.BaseService;
*/
public interface IFactoryNodeOrderService extends BaseService<ZbFactoryNodeOrderEntity> {
void updateNodeOrder(OrderPackageSignDTO nodeConfirmParam);
void updateNodeOrder(ZbFactoryNodeOrderEntity nodeConfirmParam);
List<ZbFactoryNodeOrderEntity> findHistoryNodeOrder(List<NodeDataDTO> orders);
}

4
blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/service/IOrderPackageService.java

@ -19,7 +19,7 @@ package com.logpm.factorydata.zbom.service;
import com.logpm.factorydata.zbom.entity.ZbOrderPackageEntity;
import com.logpm.factorydata.zbom.vo.NoSignNumberDTO;
import com.logpm.factorydata.zbom.vo.OrderPackageDTO;
import com.logpm.factorydata.zbom.vo.OrderPackageSignDTO;
import com.logpm.factorydata.zbom.vo.NodeDataDTO;
import org.springblade.core.mp.base.BaseService;
import java.util.List;
@ -32,7 +32,7 @@ import java.util.List;
*/
public interface IOrderPackageService extends BaseService<ZbOrderPackageEntity> {
List<OrderPackageSignDTO> findOrderCodebypackageCodes(List<String> packageCodeList);
List<NodeDataDTO> findOrderCodebypackageCodes(List<String> packageCodeList);
void updateSignForStatus(List<String> packageCodeList);

14
blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/vo/OrderPackageSignDTO.java → blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/vo/NodeDataDTO.java

@ -17,7 +17,7 @@ import java.io.Serializable;
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class OrderPackageSignDTO implements Serializable {
public class NodeDataDTO implements Serializable {
/**
* 发运单号
@ -37,16 +37,8 @@ public class OrderPackageSignDTO implements Serializable {
private String signQty;
/**
* 地址 在途节点 需要提供详细的地址
* 志邦当前节点
*/
private String address;
/**
* 操作人 必填
*/
private String operator;
/**
* 操作时间 必填
*/
private String operatorTime;
private String currentNode;
}
Loading…
Cancel
Save