diff --git a/blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/entity/ZbFactoryNodeOrderEntity.java b/blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/entity/ZbFactoryNodeOrderEntity.java index 9ea26460b..004c7f978 100644 --- a/blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/entity/ZbFactoryNodeOrderEntity.java +++ b/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; /** * 已推送过的节点 */ diff --git a/blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/entity/ZbFactoryNodePushEntity.java b/blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/entity/ZbFactoryNodePushEntity.java index 316c0000a..a34dc0924 100644 --- a/blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/entity/ZbFactoryNodePushEntity.java +++ b/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; /** * 内容 */ diff --git a/blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/enums/ZbomNodeEnums.java b/blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/enums/ZbomNodeEnums.java index 15e1228c2..946c4bda6 100644 --- a/blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/enums/ZbomNodeEnums.java +++ b/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; } diff --git a/blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/mapper/FactoryNodeOrderMapper.java b/blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/mapper/FactoryNodeOrderMapper.java index 4fb724fbd..c1edf3c50 100644 --- a/blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/mapper/FactoryNodeOrderMapper.java +++ b/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 { + List findHistoryNodeOrder(@Param("orders") List orders); + } diff --git a/blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/mapper/FactoryNodeOrderMapper.xml b/blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/mapper/FactoryNodeOrderMapper.xml index ae2853be0..6290b2cba 100644 --- a/blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/mapper/FactoryNodeOrderMapper.xml +++ b/blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/mapper/FactoryNodeOrderMapper.xml @@ -2,4 +2,19 @@ + diff --git a/blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/mapper/OrderPackageMapper.java b/blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/mapper/OrderPackageMapper.java index ce8ee4e53..0c41af4c6 100644 --- a/blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/mapper/OrderPackageMapper.java +++ b/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 { - List findOrderCodebypackageCodes(@Param("packageList") List packageCodeList); + List findOrderCodebypackageCodes(@Param("packageList") List packageCodeList); void updateSignForStatus(@Param("packageCodeList") List packageCodeList); diff --git a/blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/mapper/OrderPackageMapper.xml b/blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/mapper/OrderPackageMapper.xml index 0a1bf8f63..62bf11649 100644 --- a/blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/mapper/OrderPackageMapper.xml +++ b/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) - select re.depart_code, t.platform_order_code, group_concat(t.package_code) packageCode, diff --git a/blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/mq/ZbomNodeDataPushListener.java b/blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/mq/ZbomNodeDataPushListener.java index 66cc4efeb..1deed9c08 100644 --- a/blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/mq/ZbomNodeDataPushListener.java +++ b/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 content = entries.getBeanList("content", JSONObject.class); - List 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 packageCodeList = getBizData(entries); if (CollUtil.isNotEmpty(packageCodeList)) { // 根据运单号和自编码分组查询出对应的数量 - List orders = orderPackageService.findOrderCodebypackageCodes(packageCodeList); - // 根据运单号和自编码分组查询出未签收的数量 - List noSignNumberDTOS = orderPackageService.findNoSignNumber(packageCodeList); - log.info("未签收数据:{}", JSONUtil.toJsonStr(noSignNumberDTOS)); - Map noSignNumberMap = new HashMap<>(); - if (CollUtil.isNotEmpty(noSignNumberDTOS)) { - for (NoSignNumberDTO noSignNumberDTO : noSignNumberDTOS) { - noSignNumberMap.put(noSignNumberDTO.getDepartCode() + noSignNumberDTO.getPlatformOrderCode(), noSignNumberDTO.getNum()); + List orders = orderPackageService.findOrderCodebypackageCodes(packageCodeList); + Map 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.lambdaQuery() - .eq(ZbFactoryNodeOrderEntity::getPlatformOrderCode, paramDTO.getPlatformOrderCode()) - .eq(ZbFactoryNodeOrderEntity::getDepartCode, paramDTO.getDepartCode()) - ); - if (ObjectUtil.isNotEmpty(nodeOrder)) { - flag = Boolean.FALSE; + // 签收节点获取组装未签收数据 + Map noSignNumberMap = null; + if (EnumUtil.equals(NodeEnums.CLERK_REVIEW, node)) { + noSignNumberMap = getNoSignNumber(packageCodeList); + } + // 获取历史发送的节点数据 + List nodeOrderEntities = nodeOrderService.findHistoryNodeOrder(orders); + Map 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 nodeConfirmLsit = new ArrayList<>(); + Map 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 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 orders, + Map noSignNumberMap, Map nodeOrderMap, + List nodeConfirmLsit, Map 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 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 nodeConfirmParams = initParam(msgEntries, packageCodeList); - + private boolean buildNodeOrder(ZbFactoryNodeOrderEntity nodeOrderEntity, ZbomNodeEnums zbNode, String departCode, String platformOrderCode, Integer index, Map 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 getNoSignNumber(List packageCodeList) { + // 根据运单号和自编码分组查询出未签收的数量 + List noSignNumberDTOS = orderPackageService.findNoSignNumber(packageCodeList); + log.info("未签收数据:{}", JSONUtil.toJsonStr(noSignNumberDTOS)); + Map 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 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 packages = CollUtil.newArrayList(nodeConfirmParam.getPackageCode().split(",")); - orderPackageService.updateSignForStatus(packages); - } else { - List 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 getBizData(JSONObject entries) { + List content = entries.getBeanList("content", JSONObject.class); + List 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 initParam(JSONObject entries, List packageCodeList) { -// // 处理节点信息 -// String node = entries.getStr("node"); -// NodeEnums nodeEnums = EnumUtil.fromString(NodeEnums.class, node); -// if (CollUtil.isNotEmpty(packageCodeList)) { -// // 根据运单号和自编码分组查询出对应的数量 -// List orders = orderPackageService.findOrderCodebypackageCodes(packageCodeList); -// // 根据运单号和自编码分组查询出未签收的数量 -// List noSignNumberDTOS = orderPackageService.findNoSignNumber(packageCodeList); -// log.info("未签收数据:{}", JSONUtil.toJsonStr(noSignNumberDTOS)); -// Map 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.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 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 content = entries.getBeanList("content", JSONObject.class); + if (CollUtil.isEmpty(content)) { + return true; } - return Boolean.TRUE; + return false; } } diff --git a/blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/service/IFactoryNodeOrderService.java b/blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/service/IFactoryNodeOrderService.java index 460a9a7f0..6424c203c 100644 --- a/blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/service/IFactoryNodeOrderService.java +++ b/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 { - void updateNodeOrder(OrderPackageSignDTO nodeConfirmParam); + void updateNodeOrder(ZbFactoryNodeOrderEntity nodeConfirmParam); + List findHistoryNodeOrder(List orders); } diff --git a/blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/service/IOrderPackageService.java b/blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/service/IOrderPackageService.java index a1d45cc6b..ca4e7cf9c 100644 --- a/blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/service/IOrderPackageService.java +++ b/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 { - List findOrderCodebypackageCodes(List packageCodeList); + List findOrderCodebypackageCodes(List packageCodeList); void updateSignForStatus(List packageCodeList); diff --git a/blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/vo/OrderPackageSignDTO.java b/blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/vo/NodeDataDTO.java similarity index 69% rename from blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/vo/OrderPackageSignDTO.java rename to blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/vo/NodeDataDTO.java index 88be32b09..30c477024 100644 --- a/blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/vo/OrderPackageSignDTO.java +++ b/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; }