From a51a2c230a261ae2882d313609f93b1927f43a8d Mon Sep 17 00:00:00 2001 From: zhaoqiaobo <583671871@qq.com> Date: Thu, 7 Nov 2024 17:58:06 +0800 Subject: [PATCH] =?UTF-8?q?feat(all):=20=E6=88=91=E4=B9=90=E5=B7=A5?= =?UTF-8?q?=E5=8E=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1 修改我乐工厂回传逻辑 2 增加我乐工厂回传日志记录 --- .../olo/entity/FactoryNodeAllPushEntity.java | 121 ++++++++++++++++ .../olo/entity/FactoryNodePushEntity.java | 60 +++++--- .../olo/mapper/FactoryNodeAllPushMapper.java | 16 +++ .../olo/mapper/FactoryNodeAllPushMapper.xml | 5 + .../olo/mq/NodeDataPushListener.java | 132 +++++++++++++----- .../service/FactoryNodeAllPushService.java | 14 ++ .../impl/FactoryNodeAllPushServiceImpl.java | 22 +++ 7 files changed, 314 insertions(+), 56 deletions(-) create mode 100644 blade-service/logpm-factory-data/logpm-factory-data-olo/src/main/java/com/logpm/factorydata/olo/entity/FactoryNodeAllPushEntity.java create mode 100644 blade-service/logpm-factory-data/logpm-factory-data-olo/src/main/java/com/logpm/factorydata/olo/mapper/FactoryNodeAllPushMapper.java create mode 100644 blade-service/logpm-factory-data/logpm-factory-data-olo/src/main/java/com/logpm/factorydata/olo/mapper/FactoryNodeAllPushMapper.xml create mode 100644 blade-service/logpm-factory-data/logpm-factory-data-olo/src/main/java/com/logpm/factorydata/olo/service/FactoryNodeAllPushService.java create mode 100644 blade-service/logpm-factory-data/logpm-factory-data-olo/src/main/java/com/logpm/factorydata/olo/service/impl/FactoryNodeAllPushServiceImpl.java diff --git a/blade-service/logpm-factory-data/logpm-factory-data-olo/src/main/java/com/logpm/factorydata/olo/entity/FactoryNodeAllPushEntity.java b/blade-service/logpm-factory-data/logpm-factory-data-olo/src/main/java/com/logpm/factorydata/olo/entity/FactoryNodeAllPushEntity.java new file mode 100644 index 000000000..8b3cc855b --- /dev/null +++ b/blade-service/logpm-factory-data/logpm-factory-data-olo/src/main/java/com/logpm/factorydata/olo/entity/FactoryNodeAllPushEntity.java @@ -0,0 +1,121 @@ +package com.logpm.factorydata.olo.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import org.springblade.core.mp.base.BaseEntity; + +/** + * 所有推送信息 + * + * @Author zqb + * @Date 2024/3/26 + **/ +@Builder +@Data +@TableName("olo_factory_node_all_push") +@ApiModel(value = "所有推送信息", description = "所有推送信息") +@EqualsAndHashCode(callSuper = true) +@NoArgsConstructor +@AllArgsConstructor +public class FactoryNodeAllPushEntity extends BaseEntity { + + /** + * 预留1 + */ + @ApiModelProperty(value = "预留1") + private String reserve1; + /** + * 预留2 + */ + @ApiModelProperty(value = "预留2") + private String reserve2; + /** + * 预留3 + */ + @ApiModelProperty(value = "预留3") + private String reserve3; + /** + * 预留4 + */ + @ApiModelProperty(value = "预留4") + private String reserve4; + /** + * 预留5 + */ + @ApiModelProperty(value = "预留5") + private String reserve5; + + /** + * 作业批次号 + */ + @ApiModelProperty(value = "作业批次号") + private String workBatch; + + /** + * 作业仓库 + */ + @ApiModelProperty(value = "作业仓库") + private String warehouse; + /** + * 订单号 + */ + @ApiModelProperty(value = "订单号") + private String orderCode; + /** + * 包条码 + */ + @ApiModelProperty(value = "包条码") + private String packageCode; + /** + * 运单号 + */ + @ApiModelProperty(value = "运单号") + private String waybillCode; + /** + * 发货单号 + */ + @ApiModelProperty(value = "发货单号") + private String shipmentCode; + /** + * 发货分单号 + */ + @ApiModelProperty(value = "发货分单号") + private String shipmentSpitCode; + /** + * 类型 + */ + @ApiModelProperty(value = "类型(包件到达,包件到货,包件发运,包件配送, 包件签收)") + private String type; + /** + * 类型码 + */ + @ApiModelProperty(value = "类型码(包件到达 1,包件到货 2,包件发运 3,包件配送 4, 包件签收 5)") + private Integer typeCode; + /** + * 发送状态 + */ + @ApiModelProperty(value = "发送状态(0:成功,-1:失败,1:取消)") + private String sendStatus; + /** + * url + */ + @ApiModelProperty(value = "url") + private String sendUrl; + /** + * 内容 + */ + @ApiModelProperty(value = "内容") + private String content; + /** + * 返回值 + */ + @ApiModelProperty(value = "返回值") + private String resultContent; + +} diff --git a/blade-service/logpm-factory-data/logpm-factory-data-olo/src/main/java/com/logpm/factorydata/olo/entity/FactoryNodePushEntity.java b/blade-service/logpm-factory-data/logpm-factory-data-olo/src/main/java/com/logpm/factorydata/olo/entity/FactoryNodePushEntity.java index a71463c4a..11b05d506 100644 --- a/blade-service/logpm-factory-data/logpm-factory-data-olo/src/main/java/com/logpm/factorydata/olo/entity/FactoryNodePushEntity.java +++ b/blade-service/logpm-factory-data/logpm-factory-data-olo/src/main/java/com/logpm/factorydata/olo/entity/FactoryNodePushEntity.java @@ -51,6 +51,24 @@ public class FactoryNodePushEntity extends BaseEntity { @ApiModelProperty(value = "预留5") private String reserve5; + /** + * 操作时间 + */ + @ApiModelProperty(value = "操作时间") + private String opTime; + + /** + * 发送状态 + */ + @ApiModelProperty(value = "发送状态") + private String statusName; + + /** + * 发送描述 + */ + @ApiModelProperty(value = "发送描述") + private String content; + /** * 作业仓库 */ @@ -66,6 +84,26 @@ public class FactoryNodePushEntity extends BaseEntity { */ @ApiModelProperty(value = "运单号") private String waybillCode; + /** + * receipts + */ + @ApiModelProperty(value = "receipts") + private Integer receipts; + /** + * 级别 + */ + @ApiModelProperty(value = "级别") + private Integer siteLevel; + /** + * receivable + */ + @ApiModelProperty(value = "receivable") + private Integer receivable; + /** + * 收货/发货 + */ + @ApiModelProperty(value = "收货/发货") + private Integer receiveOrSend; /** * 发货分单号 */ @@ -76,11 +114,6 @@ public class FactoryNodePushEntity extends BaseEntity { */ @ApiModelProperty(value = "发货单号") private String shipmentCode; - /** - * 包条码 - */ - @ApiModelProperty(value = "包条码") - private String packageCode; /** * 类型 */ @@ -96,22 +129,5 @@ public class FactoryNodePushEntity extends BaseEntity { */ @ApiModelProperty(value = "发送状态(0:成功,-1:失败,1:取消)") private String sendStatus; - /** - * url - */ - @ApiModelProperty(value = "url") - private String sendUrl; - /** - * 内容 - */ - @ApiModelProperty(value = "内容") - private String content; - /** - * 返回值 - */ - @ApiModelProperty(value = "返回值") - private String resultContent; - - } diff --git a/blade-service/logpm-factory-data/logpm-factory-data-olo/src/main/java/com/logpm/factorydata/olo/mapper/FactoryNodeAllPushMapper.java b/blade-service/logpm-factory-data/logpm-factory-data-olo/src/main/java/com/logpm/factorydata/olo/mapper/FactoryNodeAllPushMapper.java new file mode 100644 index 000000000..b4d260348 --- /dev/null +++ b/blade-service/logpm-factory-data/logpm-factory-data-olo/src/main/java/com/logpm/factorydata/olo/mapper/FactoryNodeAllPushMapper.java @@ -0,0 +1,16 @@ +package com.logpm.factorydata.olo.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.logpm.factorydata.olo.entity.FactoryNodeAllPushEntity; +import org.apache.ibatis.annotations.Mapper; + +/** + * 工厂订单日志 mapper + * + * @author zqb + * @since 2024-03-26 + */ +@Mapper +public interface FactoryNodeAllPushMapper extends BaseMapper { + +} diff --git a/blade-service/logpm-factory-data/logpm-factory-data-olo/src/main/java/com/logpm/factorydata/olo/mapper/FactoryNodeAllPushMapper.xml b/blade-service/logpm-factory-data/logpm-factory-data-olo/src/main/java/com/logpm/factorydata/olo/mapper/FactoryNodeAllPushMapper.xml new file mode 100644 index 000000000..2380ff654 --- /dev/null +++ b/blade-service/logpm-factory-data/logpm-factory-data-olo/src/main/java/com/logpm/factorydata/olo/mapper/FactoryNodeAllPushMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/blade-service/logpm-factory-data/logpm-factory-data-olo/src/main/java/com/logpm/factorydata/olo/mq/NodeDataPushListener.java b/blade-service/logpm-factory-data/logpm-factory-data-olo/src/main/java/com/logpm/factorydata/olo/mq/NodeDataPushListener.java index d82fcda05..5f87b8b19 100644 --- a/blade-service/logpm-factory-data/logpm-factory-data-olo/src/main/java/com/logpm/factorydata/olo/mq/NodeDataPushListener.java +++ b/blade-service/logpm-factory-data/logpm-factory-data-olo/src/main/java/com/logpm/factorydata/olo/mq/NodeDataPushListener.java @@ -1,8 +1,11 @@ package com.logpm.factorydata.olo.mq; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.convert.Convert; import cn.hutool.core.util.EnumUtil; +import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.RandomUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.http.HttpUtil; import cn.hutool.json.JSONArray; @@ -10,12 +13,14 @@ import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.logpm.factorydata.olo.entity.DeliveryNoteEntity; +import com.logpm.factorydata.olo.entity.FactoryNodeAllPushEntity; import com.logpm.factorydata.olo.entity.FactoryNodePushEntity; import com.logpm.factorydata.olo.enums.FactoryNodeEnums; import com.logpm.factorydata.olo.enums.NodeMappingEnums; import com.logpm.factorydata.olo.enums.NodeNeedEnums; import com.logpm.factorydata.olo.pros.OldProperties; import com.logpm.factorydata.olo.service.DeliveryNoteService; +import com.logpm.factorydata.olo.service.FactoryNodeAllPushService; import com.logpm.factorydata.olo.service.FactoryNodePushService; import com.logpm.factorydata.vo.PushData; import lombok.AllArgsConstructor; @@ -51,6 +56,7 @@ public class NodeDataPushListener { private final OldProperties oldProperties; private final FactoryNodePushService factoryNodePushService; private final DeliveryNoteService deliveryNoteService; + private final FactoryNodeAllPushService nodeAllPushService; @RabbitListener(bindings = @QueueBinding( value = @Queue(name = FactoryDataConstants.Mq.Queues.OLO_NODE_DATA_PUSH, durable = "true"), @@ -87,29 +93,30 @@ public class NodeDataPushListener { Set packageSet = content.stream().map(PushData::getPackageCode).collect(Collectors.toSet()); Set orderSet = content.stream().map(PushData::getOrderCode).collect(Collectors.toSet()); List factoryList = deliveryNoteService.list(Wrappers.lambdaQuery() - .select(DeliveryNoteEntity::getSn, DeliveryNoteEntity::getCrmSo, DeliveryNoteEntity::getShipmentSplitNo, DeliveryNoteEntity::getShipmentNo, DeliveryNoteEntity::getReserve1) + .select(DeliveryNoteEntity::getSn, DeliveryNoteEntity::getCrmSo, DeliveryNoteEntity::getShipmentSplitNo, DeliveryNoteEntity::getShipmentNo, DeliveryNoteEntity::getQty) .in(DeliveryNoteEntity::getSn, packageSet) .in(DeliveryNoteEntity::getCrmSo, orderSet) ); // 查询出已推的到达 - JSONArray jsons = new JSONArray(); List pushEntities = new ArrayList<>(); + List pushAllEntities = new ArrayList<>(); if (CollUtil.isNotEmpty(factoryList)) { // 按 包件+订单 分组 Map> collect = factoryList.stream().collect(Collectors.groupingBy(data -> data.getSn() + data.getCrmSo())); - // 按 订单+运单+发货分单号 分组 作为发送的 key + // 按 订单+发货分单号 分组 作为发送的 key Map> collect1 = content.stream() - .filter(data -> StrUtil.isNotEmpty(data.getWaybillNumber())) - .collect(Collectors.groupingBy(data -> data.getOrderCode() + data.getWaybillNumber() + collect.get(data.getPackageCode() + data.getOrderCode()).get(0).getShipmentSplitNo())); + .collect(Collectors.groupingBy(data -> data.getOrderCode() + collect.get(data.getPackageCode() + data.getOrderCode()).get(0).getShipmentSplitNo())); + // 生成一个9位数的随机数 + String workBatch = Convert.toStr(RandomUtil.randomLong(100000000000000000L, 999999999999999999L)); for (Map.Entry> entry : collect1.entrySet()) { + JSONArray jsons = new JSONArray(); List value = entry.getValue(); PushData sendData = value.get(0); String orderCode = sendData.getOrderCode(); - String waybillNumber = sendData.getWaybillNumber(); + String waybillNumber = StrUtil.isNotEmpty(sendData.getWaybillNumber()) ? sendData.getWaybillNumber() : orderCode; String shipmentSplitNo = collect.get(sendData.getPackageCode() + sendData.getOrderCode()).get(0).getShipmentSplitNo(); List list = factoryNodePushService.list(Wrappers.lambdaQuery() .eq(FactoryNodePushEntity::getOrderCode, orderCode) - .eq(FactoryNodePushEntity::getWaybillCode, waybillNumber) .eq(FactoryNodePushEntity::getShipmentSpitCode, shipmentSplitNo) .eq(FactoryNodePushEntity::getTypeCode, FactoryNodeEnums.ARRIVAL.getCode()) ); @@ -138,15 +145,6 @@ public class NodeDataPushListener { isArrival = Boolean.TRUE; break; } - if(isArrival){ - FactoryNodePushEntity entity = new FactoryNodePushEntity(); - entity.setOrderCode(orderCode); - entity.setWaybillCode(waybillNumber); - entity.setShipmentSpitCode(shipmentSplitNo); - entity.setType(needSendNode.getValue()); - entity.setTypeCode(needSendNode.getCode()); - pushEntities.add(entity); - } needSendNode = NodeMappingEnums.getFactoryByNodeAndStatus(workNodeEnums); JSONObject js = new JSONObject(); js.set("status", needSendNode.getStatus()); @@ -163,14 +161,46 @@ public class NodeDataPushListener { js.set("shipmentNo", collect.get(sendData.getPackageCode() + sendData.getOrderCode()).get(0).getShipmentNo()); JSONArray snArray = new JSONArray(); Map snMap = new HashMap<>(); + FactoryNodeAllPushEntity factoryNodeAllPushEntity = FactoryNodeAllPushEntity.builder() + .warehouse(sendData.getWarehouseName()) + .workBatch(workBatch) + .orderCode(orderCode) + .waybillCode(waybillNumber) + .shipmentCode(collect.get(sendData.getPackageCode() + sendData.getOrderCode()).get(0).getShipmentNo()) + .shipmentSpitCode(shipmentSplitNo) + .type(needSendNode.getValue()) + .typeCode(needSendNode.getCode()) + .build(); // value 按包件分组 包含则数量+1 - for (PushData data : value) { - if (snMap.containsKey(data.getPackageCode())) { - snMap.put(data.getPackageCode(), snMap.get(data.getPackageCode()) + 1); - } else { - snMap.put(data.getPackageCode(), 1); + // 分拨中心回传所有包件,其他节点回传当前操作的包件 + if (isArrival) { + List collect2 = factoryList.stream() + .filter(data -> data.getCrmSo().equals(orderCode)) + .filter(data -> data.getShipmentSplitNo().equals(shipmentSplitNo)) + .collect(Collectors.toList()); + snMap = collect2.stream().collect(Collectors.toMap(DeliveryNoteEntity::getSn, s -> Convert.toInt(s.getQty()))); + FactoryNodePushEntity entity1 = FactoryNodePushEntity.builder() + .orderCode(orderCode).statusName(needSendNode.getStatus()).opTime(entries.getStr("operatorTime")).content(needSendNode.getValue()) + .waybillCode(waybillNumber).siteLevel(needSendNode.getSiteLecel(isArrival)).warehouse(sendData.getWarehouseName()) + .receiveOrSend(needSendNode.getReceiveOrSend()) + .shipmentSpitCode(shipmentSplitNo).shipmentCode(collect.get(sendData.getPackageCode() + sendData.getOrderCode()).get(0).getShipmentNo()) + .receivable(0).receipts(0) + .type(needSendNode.getValue()) + .typeCode(needSendNode.getCode()) + .build(); + pushEntities.add(entity1); + factoryNodeAllPushEntity.setPackageCode(collect2.stream().map(DeliveryNoteEntity::getSn).collect(Collectors.joining(","))); + } else { + for (PushData data : value) { + if (snMap.containsKey(data.getPackageCode())) { + snMap.put(data.getPackageCode(), snMap.get(data.getPackageCode()) + 1); + } else { + snMap.put(data.getPackageCode(), 1); + } } + factoryNodeAllPushEntity.setPackageCode(value.stream().map(PushData::getPackageCode).collect(Collectors.joining(","))); } + pushAllEntities.add(factoryNodeAllPushEntity); for (Map.Entry stringIntegerEntry : snMap.entrySet()) { JSONObject jsonObject = new JSONObject(); jsonObject.set("sn", stringIntegerEntry.getKey()); @@ -180,23 +210,57 @@ public class NodeDataPushListener { } js.set("snList", snArray); jsons.add(js); - } - } - if (oldProperties.getEnable()) { - try { - if (CollUtil.isNotEmpty(jsons)) { - log.info("推送节点数据:{}", JSONUtil.toJsonStr(jsons)); - String post = HttpUtil.post(oldProperties.getPushNodeUrl(), JSONUtil.toJsonStr(jsons)); - log.info("推送结果:{}", post); - if (CollUtil.isNotEmpty(pushEntities)) { - factoryNodePushService.saveBatch(pushEntities); + + if (oldProperties.getEnable()) { + try { + if (CollUtil.isNotEmpty(jsons)) { + log.info("推送节点数据:{}", JSONUtil.toJsonStr(jsons)); + String post = HttpUtil.post(oldProperties.getPushNodeUrl(), JSONUtil.toJsonStr(jsons)); + log.info("推送结果:{}", post); + try { + JSONObject entries1 = JSONUtil.parseObj(post); + Integer code = entries1.getInt("code"); + String data = entries1.getStr("data"); + // 成功 + Integer successCode = code; + String message = data; + if (NumberUtil.equals(code, 200)) { + if (StrUtil.isNotEmpty(data)) { + JSONObject jsonObject = JSONUtil.parseObj(data); + Integer code1 = jsonObject.getInt("code"); + successCode = code1; + } + } + if (CollUtil.isNotEmpty(pushEntities)) { + for (FactoryNodePushEntity pushEntity : pushEntities) { + pushEntity.setSendStatus(successCode + ""); + } + } + if (CollUtil.isNotEmpty(pushAllEntities)) { + for (FactoryNodeAllPushEntity pushAllEntity : pushAllEntities) { + pushAllEntity.setSendStatus(successCode + ""); + pushAllEntity.setContent(JSONUtil.toJsonStr(js)); + pushAllEntity.setResultContent(message); + pushAllEntity.setSendUrl(oldProperties.getPushNodeUrl()); + } + } + } catch (Exception e) { + log.error("解析返回值失败"); + } + } + } catch (Exception e) { + e.printStackTrace(); + log.error("推送节点数据错误:{}", e); } } - } catch (Exception e) { - e.printStackTrace(); - log.error("推送节点数据错误:{}", e); } } + if (CollUtil.isNotEmpty(pushEntities)) { + factoryNodePushService.saveBatch(pushEntities); + } + if (CollUtil.isNotEmpty(pushAllEntities)) { + nodeAllPushService.saveBatch(pushAllEntities); + } } } diff --git a/blade-service/logpm-factory-data/logpm-factory-data-olo/src/main/java/com/logpm/factorydata/olo/service/FactoryNodeAllPushService.java b/blade-service/logpm-factory-data/logpm-factory-data-olo/src/main/java/com/logpm/factorydata/olo/service/FactoryNodeAllPushService.java new file mode 100644 index 000000000..960bba781 --- /dev/null +++ b/blade-service/logpm-factory-data/logpm-factory-data-olo/src/main/java/com/logpm/factorydata/olo/service/FactoryNodeAllPushService.java @@ -0,0 +1,14 @@ +package com.logpm.factorydata.olo.service; + +import com.logpm.factorydata.olo.entity.FactoryNodeAllPushEntity; +import org.springblade.core.mp.base.BaseService; + +/** + * 回推记录 服务类 + * + * @Author zqb + * @Date 2024/4/26 + **/ +public interface FactoryNodeAllPushService extends BaseService { + +} diff --git a/blade-service/logpm-factory-data/logpm-factory-data-olo/src/main/java/com/logpm/factorydata/olo/service/impl/FactoryNodeAllPushServiceImpl.java b/blade-service/logpm-factory-data/logpm-factory-data-olo/src/main/java/com/logpm/factorydata/olo/service/impl/FactoryNodeAllPushServiceImpl.java new file mode 100644 index 000000000..d6f91f383 --- /dev/null +++ b/blade-service/logpm-factory-data/logpm-factory-data-olo/src/main/java/com/logpm/factorydata/olo/service/impl/FactoryNodeAllPushServiceImpl.java @@ -0,0 +1,22 @@ +package com.logpm.factorydata.olo.service.impl; + +import com.logpm.factorydata.olo.entity.FactoryNodeAllPushEntity; +import com.logpm.factorydata.olo.mapper.FactoryNodeAllPushMapper; +import com.logpm.factorydata.olo.service.FactoryNodeAllPushService; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springblade.core.mp.base.BaseServiceImpl; +import org.springframework.stereotype.Service; + +/** + * 工厂订单日志 业务实现类 + * + * @Author zqb + * @Date 2024/4/26 + **/ +@Slf4j +@Service +@AllArgsConstructor +public class FactoryNodeAllPushServiceImpl extends BaseServiceImpl implements FactoryNodeAllPushService { + +}