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 = "") @ApiModelProperty(name = "加盟商单号", notes = "")
private String platformOrderCode; 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 = "") @ApiModelProperty(name = "节点", notes = "")
private String node; 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 @Getter
public enum ZbomNodeEnums { public enum ZbomNodeEnums {
STATION_REACH_VEHICLE("T20100", "场站到车"), STATION_REACH_VEHICLE(10, "T20100", "场站到车"),
STATION_DEPART("T20200", "场站发车"), STATION_DEPART(20, "T20200", "场站发车"),
INTRANSIT("T50000", "在途"), INTRANSIT(30, "T50000", "在途"),
DELIVERY_ARRIVAL("T80000", "送货抵达"), DELIVERY_ARRIVAL(40, "T80000", "送货抵达"),
SIGN_FOR("T90000", "签收"), PARTIAL_RECEIPT(50, "T90001", "部分签收"),
PARTIAL_RECEIPT("T90001", "部分签收"), SIGN_FOR(60, "T90000", "签收"),
REJECT_ALL("T90002", "全部拒收"); REJECT_ALL(70, "T90002", "全部拒收");
private Integer index;
private String code; private String code;
private String value; private String value;
ZbomNodeEnums(String code, String value) { ZbomNodeEnums(Integer index, String code, String value) {
this.index = index;
this.code = code; this.code = code;
this.value = value; 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.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.logpm.factorydata.zbom.entity.ZbFactoryNodeOrderEntity; 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.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/** /**
* 发货单号的节点操作数据 Mapper * 发货单号的节点操作数据 Mapper
@ -29,4 +33,6 @@ import org.apache.ibatis.annotations.Mapper;
@Mapper @Mapper
public interface FactoryNodeOrderMapper extends BaseMapper<ZbFactoryNodeOrderEntity> { 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"> <!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"> <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> </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.entity.ZbOrderPackageEntity;
import com.logpm.factorydata.zbom.vo.NoSignNumberDTO; import com.logpm.factorydata.zbom.vo.NoSignNumberDTO;
import com.logpm.factorydata.zbom.vo.OrderPackageDTO; 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.Mapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
@ -35,7 +35,7 @@ import java.util.List;
@Mapper @Mapper
public interface OrderPackageMapper extends BaseMapper<ZbOrderPackageEntity> { 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); 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) ) packageCodeIds where packageCodeIds.pid = t.package_code)
</update> </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, select re.depart_code,
t.platform_order_code, t.platform_order_code,
group_concat(t.package_code) packageCode, 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.core.util.StrUtil;
import cn.hutool.json.JSONObject; import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.logpm.factorydata.enums.BrandEnums; import com.logpm.factorydata.enums.BrandEnums;
import com.logpm.factorydata.enums.NodeEnums; import com.logpm.factorydata.enums.NodeEnums;
import com.logpm.factorydata.feign.IFactoryDataClient; 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.IFactoryNodePushFailService;
import com.logpm.factorydata.zbom.service.IFactoryNodePushService; import com.logpm.factorydata.zbom.service.IFactoryNodePushService;
import com.logpm.factorydata.zbom.service.IOrderPackageService; 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.NoSignNumberDTO;
import com.logpm.factorydata.zbom.vo.NodeConfirmParamDTO; 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.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j; 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.constant.factorydata.FactoryDataConstants;
import org.springblade.common.utils.HutoolConfigUtil; import org.springblade.common.utils.HutoolConfigUtil;
import org.springframework.amqp.core.ExchangeTypes; import org.springframework.amqp.core.ExchangeTypes;
@ -89,265 +89,286 @@ public class ZbomNodeDataPushListener {
)) ))
public void nodeDataPush(String msg) { public void nodeDataPush(String msg) {
// {"brand":"ZBOM","node":"TRANSFER_WAREHOUSE_DEPART","operator":"","operatorTime":"","content":[{"packageCode":"1423090693445"}]} // {"brand":"ZBOM","node":"TRANSFER_WAREHOUSE_DEPART","operator":"","operatorTime":"","content":[{"packageCode":"1423090693445"}]}
// 校验数据
log.info("zb接收到节点数据推送:{}", msg); log.info("zb接收到节点数据推送:{}", msg);
if (!checkMsg(msg)) { // 1 校验数据
if (checkData(msg)) {
return; return;
} }
JSONObject entries = JSONUtil.parseObj(msg); 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"); String node = entries.getStr("node");
NodeEnums nodeEnums = EnumUtil.fromString(NodeEnums.class, node); NodeEnums nodeEnums = EnumUtil.fromString(NodeEnums.class, node);
// 2 获取业务数据
List<String> packageCodeList = getBizData(entries);
if (CollUtil.isNotEmpty(packageCodeList)) { if (CollUtil.isNotEmpty(packageCodeList)) {
// 根据运单号和自编码分组查询出对应的数量 // 根据运单号和自编码分组查询出对应的数量
List<OrderPackageSignDTO> orders = orderPackageService.findOrderCodebypackageCodes(packageCodeList); List<NodeDataDTO> orders = orderPackageService.findOrderCodebypackageCodes(packageCodeList);
// 根据运单号和自编码分组查询出未签收的数量 Map<String, NodeDataDTO> nodeDataMap = new HashMap<>();
List<NoSignNumberDTO> noSignNumberDTOS = orderPackageService.findNoSignNumber(packageCodeList); if (CollUtil.isNotEmpty(orders)) {
log.info("未签收数据:{}", JSONUtil.toJsonStr(noSignNumberDTOS)); for (NodeDataDTO order : orders) {
Map<String, Integer> noSignNumberMap = new HashMap<>(); nodeDataMap.put(order.getDepartCode() + order.getPlatformOrderCode(), order);
if (CollUtil.isNotEmpty(noSignNumberDTOS)) {
for (NoSignNumberDTO noSignNumberDTO : noSignNumberDTOS) {
noSignNumberMap.put(noSignNumberDTO.getDepartCode() + noSignNumberDTO.getPlatformOrderCode(), noSignNumberDTO.getNum());
} }
} }
if (CollUtil.isNotEmpty(orders)) { // 签收节点获取组装未签收数据
for (OrderPackageSignDTO order : orders) { Map<String, Integer> noSignNumberMap = null;
Boolean flag = Boolean.TRUE; if (EnumUtil.equals(NodeEnums.CLERK_REVIEW, node)) {
NodeConfirmParamDTO paramDTO = new NodeConfirmParamDTO(); noSignNumberMap = getNoSignNumber(packageCodeList);
paramDTO.setDepartCode(order.getDepartCode()); }
paramDTO.setPlatformOrderCode(order.getPlatformOrderCode()); // 获取历史发送的节点数据
paramDTO.setSignQty(order.getSignQty()); List<ZbFactoryNodeOrderEntity> nodeOrderEntities = nodeOrderService.findHistoryNodeOrder(orders);
order.setOperator(entries.getStr("operator")); Map<String, ZbFactoryNodeOrderEntity> nodeOrderMap = new HashMap<>();
paramDTO.setOperator(entries.getStr("operator")); if (CollUtil.isNotEmpty(nodeOrderEntities)) {
order.setOperatorTime(entries.getStr("operatorTime")); // 将nodeOrderEntities的数据封装到nodeOrderMap,以departCode+platformOrderCode为key
paramDTO.setOperatorTime(entries.getStr("operatorTime")); nodeOrderEntities.forEach(nodeOrderEntity -> {
order.setAddress(entries.getStr("address")); String key = nodeOrderEntity.getDepartCode() + nodeOrderEntity.getPlatformOrderCode();
paramDTO.setAddress(entries.getStr("address")); nodeOrderMap.put(key, nodeOrderEntity);
// 如果是签收节点,需要判断是否为全部签收和部分签收 });
if (EnumUtil.equals(NodeEnums.CLERK_REVIEW, node)) { }
ZbFactoryNodeOrderEntity nodeOrder = nodeOrderService.getOne(Wrappers.<ZbFactoryNodeOrderEntity>lambdaQuery() List<NodeConfirmParamDTO> nodeConfirmLsit = new ArrayList<>();
.eq(ZbFactoryNodeOrderEntity::getPlatformOrderCode, paramDTO.getPlatformOrderCode()) Map<String, SendMsg> sendMsgMap = new HashMap<>();
.eq(ZbFactoryNodeOrderEntity::getDepartCode, paramDTO.getDepartCode()) // 构建提交参数
); buildParam(entries, node, nodeEnums, orders, noSignNumberMap, nodeOrderMap, nodeConfirmLsit, sendMsgMap);
if (ObjectUtil.isNotEmpty(nodeOrder)) { try {
flag = Boolean.FALSE; // 推送给志邦
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()); 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)) { if (ObjectUtil.isNotEmpty(noSignNumberMap) && noSignNumberMap.containsKey(key)) {
Integer noSignNum = noSignNumberMap.get(key); Integer noSignNum = noSignNumberMap.get(key);
if (noSignNum <= signNumber) { if (noSignNum <= signNumber) {
// 全部签收 // 全部签收
paramDTO.setNode(ZbomNodeMappingEnums.getZbomByNodeAndStatus(nodeEnums, ZbomConstants.Status.SIGN_FOR_ALL_STATUS).getCode()); paramDTO.setNode(ZbomNodeMappingEnums.getZbomByNodeAndStatus(nodeEnums, ZbomConstants.Status.SIGN_FOR_ALL_STATUS).getCode());
currentNode = ZbomNodeMappingEnums.getZbomByNodeAndStatus(nodeEnums, ZbomConstants.Status.SIGN_FOR_ALL_STATUS);
} }
} else { } else {
continue; 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);
} }
}
}
// 构建参数对象 private boolean buildNodeOrder(ZbFactoryNodeOrderEntity nodeOrderEntity, ZbomNodeEnums zbNode, String departCode, String platformOrderCode, Integer index, Map<String, ZbFactoryNodeOrderEntity> nodeOrderEntityMap) {
// List<NodeConfirmParamDTO> nodeConfirmParams = initParam(msgEntries, packageCodeList); 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 @Nullable
nodeConfirmParam, String body, String result, Boolean flag) { private List<String> getBizData(JSONObject entries) {
if (StrUtil.isNotBlank(result)) { List<JSONObject> content = entries.getBeanList("content", JSONObject.class);
ZbFactoryNodePushFailEntity build = ZbFactoryNodePushFailEntity.builder().content(body).resultContent(result).build(); List<String> packageCodeList = null;
if (!StrUtil.contains(result, "code")) { if (CollUtil.isNotEmpty(content)) {
// 推送失败 // 查询这次操作的所有包件和运单号
nodePushFailService.save(build); packageCodeList = new ArrayList<>();
} else { for (JSONObject obj : content) {
JSONObject entries = JSONUtil.parseObj(result); String packageCode = obj.getStr("packageCode");
String code = entries.getStr("code"); if (StrUtil.isNotBlank(packageCode)) {
if (ObjectUtil.equal(code, "1")) { packageCodeList.add(packageCode);
// 推送失败
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);
}
} }
} }
} }
return packageCodeList;
} }
// private List<NodeConfirmParamDTO> initParam(JSONObject entries, List<String> packageCodeList) { private boolean checkData(String msg) {
// // 处理节点信息 if (StrUtil.isEmpty(msg)) {
// String node = entries.getStr("node"); return true;
// NodeEnums nodeEnums = EnumUtil.fromString(NodeEnums.class, node); }
// if (CollUtil.isNotEmpty(packageCodeList)) { if (!msg.contains("brand") || !msg.contains("content") || !msg.contains("node")) {
// // 根据运单号和自编码分组查询出对应的数量 return true;
// 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;
} }
JSONObject entries = JSONUtil.parseObj(msg); JSONObject entries = JSONUtil.parseObj(msg);
String node = entries.getStr("node"); String node = entries.getStr("node");
List<JSONObject> content = entries.getBeanList("content", JSONObject.class); if (StrUtil.isEmpty(node)) {
if (CollUtil.isEmpty(content)) { return true;
return flag;
} }
if (StrUtil.isBlank(node)) { // 不是志邦需要的节点数据直接不处理
return flag;
}
// 不需要处理的节点直接放弃
if (!EnumUtil.contains(NodeNeedEnums.class, node)) { 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; package com.logpm.factorydata.zbom.service;
import com.logpm.factorydata.zbom.entity.ZbFactoryNodeOrderEntity; 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 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> { 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.entity.ZbOrderPackageEntity;
import com.logpm.factorydata.zbom.vo.NoSignNumberDTO; import com.logpm.factorydata.zbom.vo.NoSignNumberDTO;
import com.logpm.factorydata.zbom.vo.OrderPackageDTO; 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 org.springblade.core.mp.base.BaseService;
import java.util.List; import java.util.List;
@ -32,7 +32,7 @@ import java.util.List;
*/ */
public interface IOrderPackageService extends BaseService<ZbOrderPackageEntity> { public interface IOrderPackageService extends BaseService<ZbOrderPackageEntity> {
List<OrderPackageSignDTO> findOrderCodebypackageCodes(List<String> packageCodeList); List<NodeDataDTO> findOrderCodebypackageCodes(List<String> packageCodeList);
void updateSignForStatus(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 @Builder
@AllArgsConstructor @AllArgsConstructor
@NoArgsConstructor @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 signQty;
/** /**
* 地址 在途节点 需要提供详细的地址 * 志邦当前节点
*/ */
private String address; private String currentNode;
/**
* 操作人 必填
*/
private String operator;
/**
* 操作时间 必填
*/
private String operatorTime;
} }
Loading…
Cancel
Save