Browse Source

feat(all): 修改志邦工厂数据推送

pull/8/head
zhaoqiaobo 11 months ago
parent
commit
eec0dba54b
  1. 1
      blade-service-api/logpm-factory-data-api/src/main/java/com/logpm/factorydata/enums/NodeEnums.java
  2. 9
      blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/controller/OrderController.java
  3. 79
      blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/entity/ZbFactoryNodePushEntity.java
  4. 3
      blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/entity/ZbReceiptEntity.java
  5. 8
      blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/enums/ZbomNodeMappingEnums.java
  6. 32
      blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/mapper/FactoryNodePushMapper.java
  7. 5
      blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/mapper/FactoryNodePushMapper.xml
  8. 5
      blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/mapper/OrderPackageMapper.java
  9. 39
      blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/mapper/OrderPackageMapper.xml
  10. 24
      blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/mq/ZbomFactoryOrderListener.java
  11. 103
      blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/mq/ZbomNodeDataPushListener.java
  12. 30
      blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/service/IFactoryNodePushService.java
  13. 4
      blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/service/IOrderPackageService.java
  14. 38
      blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/service/impl/FactoryNodePushServiceImpl.java
  15. 11
      blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/service/impl/OrderPackageServiceImpl.java
  16. 28
      blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/vo/NoSignNumberDTO.java

1
blade-service-api/logpm-factory-data-api/src/main/java/com/logpm/factorydata/enums/NodeEnums.java

@ -20,6 +20,7 @@ public enum NodeEnums implements Serializable {
TRANSFER_WAREHOUSE_UNLOADING(50, "中转仓卸车确认"), TRANSFER_WAREHOUSE_UNLOADING(50, "中转仓卸车确认"),
TRANSFER_WAREHOUSE_DEPART(60, "中转仓发车"), TRANSFER_WAREHOUSE_DEPART(60, "中转仓发车"),
END_WAREHOUSE_UNLOADING(70, "末端仓卸车确认"), END_WAREHOUSE_UNLOADING(70, "末端仓卸车确认"),
TRIPARTITE_TRANSFER_DEPART(75, "三方中转发车"),
SORTING_TRAYS(80, "分拣打托"), SORTING_TRAYS(80, "分拣打托"),
PUTAWAY(90, "上架"), PUTAWAY(90, "上架"),
STOCKING_OPERATION(100, "备货作业"), STOCKING_OPERATION(100, "备货作业"),

9
blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/controller/OrderController.java

@ -1,13 +1,17 @@
package com.logpm.factorydata.zbom.controller; package com.logpm.factorydata.zbom.controller;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import com.logpm.factorydata.feign.IFactoryDataClient; import com.logpm.factorydata.feign.IFactoryDataClient;
import com.logpm.factorydata.vo.SendMsg; import com.logpm.factorydata.vo.SendMsg;
import com.logpm.factorydata.zbom.constants.ZbomConstants; import com.logpm.factorydata.zbom.constants.ZbomConstants;
import com.logpm.factorydata.zbom.entity.ZbFactoryOrderLogEntity; import com.logpm.factorydata.zbom.entity.ZbFactoryOrderLogEntity;
import com.logpm.factorydata.zbom.entity.ZbReceiptEntity;
import com.logpm.factorydata.zbom.service.IFactoryOrderLogService; import com.logpm.factorydata.zbom.service.IFactoryOrderLogService;
import com.logpm.factorydata.zbom.service.IReceiptService;
import com.logpm.factorydata.zbom.vo.ZBReceiptDTO; import com.logpm.factorydata.zbom.vo.ZBReceiptDTO;
import com.logpm.factorydata.zbom.vo.ZbResp; import com.logpm.factorydata.zbom.vo.ZbResp;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
@ -38,6 +42,7 @@ public class OrderController {
private final IFactoryDataClient factoryDataClient; private final IFactoryDataClient factoryDataClient;
private final IFactoryOrderLogService orderLogService; private final IFactoryOrderLogService orderLogService;
private final IReceiptService receiptService;
@ResponseBody @ResponseBody
@ -53,6 +58,10 @@ public class OrderController {
} }
String corpId = request.getHeader("corpId"); String corpId = request.getHeader("corpId");
zbReceiptDTO.setCorpId(corpId); zbReceiptDTO.setCorpId(corpId);
// 已经推送过的数据不再接收
if (CollUtil.isNotEmpty(receiptService.list(Wrappers.<ZbReceiptEntity>lambdaQuery().eq(ZbReceiptEntity::getTaskCode, zbReceiptDTO.getTaskCode())))) {
return ZbResp.fail("该入库单号已推送过,无需重复推送");
}
// 记录日志 // 记录日志
ZbFactoryOrderLogEntity logEntity = ZbFactoryOrderLogEntity.builder().content(JSONUtil.toJsonStr(zbReceiptDTO)).build(); ZbFactoryOrderLogEntity logEntity = ZbFactoryOrderLogEntity.builder().content(JSONUtil.toJsonStr(zbReceiptDTO)).build();
orderLogService.save(logEntity); orderLogService.save(logEntity);

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

@ -0,0 +1,79 @@
package com.logpm.factorydata.zbom.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("zb_factory_node_push")
@ApiModel(value = "节点数据推送志邦成功数据", description = "节点数据推送志邦成功数据")
@EqualsAndHashCode(callSuper = true)
@NoArgsConstructor
@AllArgsConstructor
public class ZbFactoryNodePushEntity extends BaseEntity {
/**
* 预留1
*/
@ApiModelProperty(name = "预留1", notes = "")
private String reserve1;
/**
* 预留2
*/
@ApiModelProperty(name = "预留2", notes = "")
private String reserve2;
/**
* 预留3
*/
@ApiModelProperty(name = "预留3", notes = "")
private String reserve3;
/**
* 预留4
*/
@ApiModelProperty(name = "预留4", notes = "")
private String reserve4;
/**
* 预留5
*/
@ApiModelProperty(name = "预留5", notes = "")
private String reserve5;
/**
* 发车单号
*/
@ApiModelProperty(name = "发车单号", notes = "")
private String departCode;
/**
* 加盟商单号
*/
@ApiModelProperty(name = "加盟商单号", notes = "")
private String platformOrderCode;
/**
* 节点
*/
@ApiModelProperty(name = "节点", notes = "")
private String node;
/**
* 内容
*/
@ApiModelProperty(name = "内容", notes = "")
private String content;
/**
* 返回值
*/
@ApiModelProperty(name = "返回值", notes = "")
private String resultContent;
}

3
blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/entity/ZbReceiptEntity.java

@ -8,6 +8,8 @@ import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import org.springblade.core.mp.base.BaseEntity; import org.springblade.core.mp.base.BaseEntity;
import javax.validation.constraints.NotEmpty;
/** /**
* 志邦入库单; * 志邦入库单;
@ -28,6 +30,7 @@ public class ZbReceiptEntity extends BaseEntity {
/** /**
* 入库单号 * 入库单号
*/ */
@NotEmpty(message = "入库单号不能为空")
@ApiModelProperty(name = "入库单号", notes = "") @ApiModelProperty(name = "入库单号", notes = "")
private String taskCode; private String taskCode;
/** /**

8
blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/enums/ZbomNodeMappingEnums.java

@ -27,9 +27,13 @@ public enum ZbomNodeMappingEnums {
*/ */
INTRANSIT(ZbomNodeEnums.INTRANSIT, NodeEnums.TRANSFER_WAREHOUSE_DEPART, 1), INTRANSIT(ZbomNodeEnums.INTRANSIT, NodeEnums.TRANSFER_WAREHOUSE_DEPART, 1),
/** /**
* 送货抵达 -- 末端仓卸货确认 * 在途 -- 末端仓卸货确认
*/ */
DELIVERY_ARRIVAL(ZbomNodeEnums.DELIVERY_ARRIVAL, NodeEnums.END_WAREHOUSE_UNLOADING, 1), DELIVERY_ARRIVAL(ZbomNodeEnums.INTRANSIT, NodeEnums.END_WAREHOUSE_UNLOADING, 1),
/**
* 在途 -- 三方中转发车
*/
INTRANSIT_TRIPARTITE_TRANSFER_DEPART(ZbomNodeEnums.INTRANSIT, NodeEnums.TRIPARTITE_TRANSFER_DEPART, 1),
/** /**
* 全部签收 -- 文员复核 * 全部签收 -- 文员复核
*/ */

32
blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/mapper/FactoryNodePushMapper.java

@ -0,0 +1,32 @@
/*
* Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* Neither the name of the dreamlu.net developer nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
* Author: Chill 庄骞 (smallchill@163.com)
*/
package com.logpm.factorydata.zbom.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.logpm.factorydata.zbom.entity.ZbFactoryNodePushEntity;
import org.apache.ibatis.annotations.Mapper;
/**
* 节点数据推送成功 Mapper
*
* @author zqb
* @since 2024-03-26
*/
@Mapper
public interface FactoryNodePushMapper extends BaseMapper<ZbFactoryNodePushEntity> {
}

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

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!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.FactoryNodePushMapper">
</mapper>

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

@ -18,6 +18,7 @@ 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.ZbOrderPackageEntity; import com.logpm.factorydata.zbom.entity.ZbOrderPackageEntity;
import com.logpm.factorydata.zbom.vo.NoSignNumberDTO;
import com.logpm.factorydata.zbom.vo.NodeConfirmParamDTO; import com.logpm.factorydata.zbom.vo.NodeConfirmParamDTO;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
@ -34,4 +35,8 @@ import java.util.List;
public interface OrderPackageMapper extends BaseMapper<ZbOrderPackageEntity> { public interface OrderPackageMapper extends BaseMapper<ZbOrderPackageEntity> {
List<NodeConfirmParamDTO> findOrderCodebypackageCodes(@Param("packageList") List<String> packageCodeList); List<NodeConfirmParamDTO> findOrderCodebypackageCodes(@Param("packageList") List<String> packageCodeList);
void updateSignForStatus(@Param("packageCodeList") List<String> packageCodeList);
List<NoSignNumberDTO> findNoSignNumber(@Param("packageCodeList") List<String> packageCodeList);
} }

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

@ -1,6 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!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.OrderPackageMapper"> <mapper namespace="com.logpm.factorydata.zbom.mapper.OrderPackageMapper">
<update id="updateSignForStatus">
update zb_order_package t set t.sign_status = 1 where exists(
select 1 from (
<foreach collection="packageCodeList" index="ind" item="item">
<if test="ind == 0">
select #{item} pid
</if>
<if test="ind != 0">
union all
select #{item} pid
</if>
</foreach>
) packageCodeIds where packageCodeIds.pid = t.package_code)
</update>
<select id="findOrderCodebypackageCodes" resultType="com.logpm.factorydata.zbom.vo.NodeConfirmParamDTO"> <select id="findOrderCodebypackageCodes" resultType="com.logpm.factorydata.zbom.vo.NodeConfirmParamDTO">
select re.depart_code, select re.depart_code,
@ -22,5 +36,30 @@
) packageCodeIds where packageCodeIds.pid = t.package_code) ) packageCodeIds where packageCodeIds.pid = t.package_code)
group by re.depart_code, t.platform_order_code group by re.depart_code, t.platform_order_code
</select> </select>
<select id="findNoSignNumber" resultType="com.logpm.factorydata.zbom.vo.NoSignNumberDTO">
select re.depart_code departCode,
t.platform_order_code platformOrderCode,
count(*) num
from zb_order_package t
left join zb_receipt re on re.id = t.receipt_id
where t.platform_order_code in (
select tt.platform_order_code
from zb_order_package tt
where exists(
select 1 from (
<foreach collection="packageList" index="ind" item="item">
<if test="ind == 0">
select #{item} pid
</if>
<if test="ind != 0">
union all
select #{item} pid
</if>
</foreach>
) packageCodeIds where packageCodeIds.pid = tt.package_code)
)
and t.sign_status = 0
group by re.depart_code, t.platform_order_code
</select>
</mapper> </mapper>

24
blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/mq/ZbomFactoryOrderListener.java

@ -10,6 +10,7 @@ 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.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.logpm.factorydata.base.feign.IFactoryDataBaseClient; import com.logpm.factorydata.base.feign.IFactoryDataBaseClient;
import com.logpm.factorydata.base.vo.FactoryWarehouseBindVO; import com.logpm.factorydata.base.vo.FactoryWarehouseBindVO;
import com.logpm.factorydata.feign.IFactoryDataClient; import com.logpm.factorydata.feign.IFactoryDataClient;
@ -34,7 +35,6 @@ import lombok.extern.slf4j.Slf4j;
import org.springblade.common.constant.HttpConstants; import org.springblade.common.constant.HttpConstants;
import org.springblade.common.constant.TenantNum; import org.springblade.common.constant.TenantNum;
import org.springblade.common.constant.factorydata.FactoryDataConstants; import org.springblade.common.constant.factorydata.FactoryDataConstants;
import org.springblade.core.log.exception.ServiceException;
import org.springblade.core.redis.cache.BladeRedis; import org.springblade.core.redis.cache.BladeRedis;
import org.springblade.core.tool.api.R; import org.springblade.core.tool.api.R;
import org.springblade.core.tool.utils.StringUtil; import org.springblade.core.tool.utils.StringUtil;
@ -83,18 +83,24 @@ public class ZbomFactoryOrderListener {
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void factoryOrder(String msg) { public void factoryOrder(String msg) {
if (StrUtil.isEmpty(msg)) { if (StrUtil.isEmpty(msg)) {
throw new ServiceException("消息不能为空"); log.error("消息内容为空");
return;
} }
ZBReceiptDTO zbReceiptDTO = JSONUtil.toBean(msg, ZBReceiptDTO.class); ZBReceiptDTO zbReceiptDTO = JSONUtil.toBean(msg, ZBReceiptDTO.class);
if (ObjectUtil.isEmpty(zbReceiptDTO)) { if (ObjectUtil.isEmpty(zbReceiptDTO)) {
throw new ServiceException("消息内容不能为空"); log.error("消息内容为空");
return;
} }
// 幂等控制,同一个入库单号只能入一次 // 幂等控制,同一个入库单号只能入一次
// String taskCode = zbReceiptDTO.getTaskCode(); String taskCode = zbReceiptDTO.getTaskCode();
// ZbReceiptEntity one = receiptService.getOne(Wrappers.<ZbReceiptEntity>lambdaQuery().eq(ZbReceiptEntity::getTaskCode, taskCode)); if (StrUtil.isEmpty(taskCode)) {
// if (ObjectUtil.isEmpty(one)) { log.error("入库单号为空");
// throw new ServiceException("入库单号在系统中已存在,请检查。"); return;
// } }
if (CollUtil.isNotEmpty(receiptService.list(Wrappers.<ZbReceiptEntity>lambdaQuery().eq(ZbReceiptEntity::getTaskCode, taskCode)))) {
log.error("入库单号已推送过了");
return;
}
ZbReceiptEntity zbReceiptEntity = new ZbReceiptEntity(); ZbReceiptEntity zbReceiptEntity = new ZbReceiptEntity();
BeanUtil.copyProperties(zbReceiptDTO, zbReceiptEntity); BeanUtil.copyProperties(zbReceiptDTO, zbReceiptEntity);
// 保存订单数据 // 保存订单数据
@ -219,7 +225,7 @@ public class ZbomFactoryOrderListener {
// advanceDetailEntity.setIncomingWarehouseName(""); // advanceDetailEntity.setIncomingWarehouseName("");
// 根据志邦的一流单标识赋值 // 根据志邦的一流单标识赋值
advanceEntity.setLegacyStatus("0"); advanceEntity.setLegacyStatus("0");
if(ObjectUtil.equal(orderPackageDTO.getLegacyFlag(),"Y")){ if (ObjectUtil.equal(orderPackageDTO.getLegacyFlag(), "Y")) {
advanceEntity.setLegacyStatus("1"); advanceEntity.setLegacyStatus("1");
} }

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

@ -1,21 +1,24 @@
package com.logpm.factorydata.zbom.mq; package com.logpm.factorydata.zbom.mq;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.util.EnumUtil; import cn.hutool.core.util.EnumUtil;
import cn.hutool.core.util.ObjectUtil; 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.logpm.factorydata.enums.NodeEnums; import com.logpm.factorydata.enums.NodeEnums;
import com.logpm.factorydata.enums.SignForStatusEnums;
import com.logpm.factorydata.zbom.constants.ZbomConstants; import com.logpm.factorydata.zbom.constants.ZbomConstants;
import com.logpm.factorydata.zbom.entity.ZbFactoryNodePushEntity;
import com.logpm.factorydata.zbom.entity.ZbFactoryNodePushFailEntity; import com.logpm.factorydata.zbom.entity.ZbFactoryNodePushFailEntity;
import com.logpm.factorydata.zbom.enums.NodeNeedEnums; import com.logpm.factorydata.zbom.enums.NodeNeedEnums;
import com.logpm.factorydata.zbom.enums.ZbomNodeMappingEnums; import com.logpm.factorydata.zbom.enums.ZbomNodeMappingEnums;
import com.logpm.factorydata.zbom.pros.ZbFactoryProperties; import com.logpm.factorydata.zbom.pros.ZbFactoryProperties;
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.IOrderPackageService; import com.logpm.factorydata.zbom.service.IOrderPackageService;
import com.logpm.factorydata.zbom.util.ZbomUtil; 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.NodeConfirmParamDTO;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -28,7 +31,9 @@ import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
/** /**
* 监听业务系统推送给志邦的节点数据 * 监听业务系统推送给志邦的节点数据
@ -44,6 +49,7 @@ public class ZbomNodeDataPushListener {
private final ZbFactoryProperties zbProperties; private final ZbFactoryProperties zbProperties;
private final IOrderPackageService orderPackageService; private final IOrderPackageService orderPackageService;
private final IFactoryNodePushFailService nodePushFailService; private final IFactoryNodePushFailService nodePushFailService;
private final IFactoryNodePushService nodePushService;
@RabbitListener(bindings = @QueueBinding( @RabbitListener(bindings = @QueueBinding(
value = @Queue(name = FactoryDataConstants.Mq.Queues.ZBOM_NODE_DATA_PUSH), value = @Queue(name = FactoryDataConstants.Mq.Queues.ZBOM_NODE_DATA_PUSH),
@ -57,8 +63,22 @@ public class ZbomNodeDataPushListener {
if (!checkMsg(msg)) { if (!checkMsg(msg)) {
return; return;
} }
JSONObject msgEntries = JSONUtil.parseObj(msg);
// 业务数据
List<JSONObject> content = msgEntries.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);
}
}
}
// 构建参数对象 // 构建参数对象
List<NodeConfirmParamDTO> nodeConfirmParams = initParam(msg); List<NodeConfirmParamDTO> nodeConfirmParams = initParam(msgEntries, packageCodeList);
try { try {
// 推送给志邦 // 推送给志邦
if (CollUtil.isNotEmpty(nodeConfirmParams)) { if (CollUtil.isNotEmpty(nodeConfirmParams)) {
@ -78,10 +98,23 @@ public class ZbomNodeDataPushListener {
// 推送失败 // 推送失败
nodePushFailService.save(build); 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);
// 修改订单包件表的签收状态
orderPackageService.updateSignForStatus(packageCodeList);
}
} }
} }
} }
} }
} catch (Exception e) { } catch (Exception e) {
// 处理推送不成功的异常情况 // 处理推送不成功的异常情况
log.error("zb节点推送数据异常:{}", e); log.error("zb节点推送数据异常:{}", e);
@ -90,51 +123,47 @@ public class ZbomNodeDataPushListener {
} }
private List<NodeConfirmParamDTO> initParam(String msg) { private List<NodeConfirmParamDTO> initParam(JSONObject entries, List<String> packageCodeList) {
JSONObject entries = JSONUtil.parseObj(msg);
// 处理节点信息 // 处理节点信息
String node = entries.getStr("node"); String node = entries.getStr("node");
NodeEnums nodeEnums = EnumUtil.fromString(NodeEnums.class, node); NodeEnums nodeEnums = EnumUtil.fromString(NodeEnums.class, node);
// 业务数据 if (CollUtil.isNotEmpty(packageCodeList)) {
List<JSONObject> content = entries.getBeanList("content", JSONObject.class); // 根据运单号和自编码分组查询出对应的数量
if (CollUtil.isNotEmpty(content)) { List<NodeConfirmParamDTO> orders = orderPackageService.findOrderCodebypackageCodes(packageCodeList);
// 查询这次操作的所有包件和运单号 // 根据运单号和自编码分组查询出未签收的数量
List<String> packageCodeList = new ArrayList<>(); List<NoSignNumberDTO> noSignNumberDTOS = orderPackageService.findNoSignNumber(packageCodeList);
for (JSONObject obj : content) { Map<String, Integer> noSignNumberMap = new HashMap<>();
String packageCode = obj.getStr("packageCode"); if (CollUtil.isNotEmpty(noSignNumberDTOS)) {
if (StrUtil.isNotBlank(packageCode)) { for (NoSignNumberDTO noSignNumberDTO : noSignNumberDTOS) {
packageCodeList.add(packageCode); noSignNumberMap.put(noSignNumberDTO.getDepartCode() + noSignNumberDTO.getPlatformOrderCode(), noSignNumberDTO.getNum());
} }
} }
if (CollUtil.isNotEmpty(packageCodeList)) { if (CollUtil.isNotEmpty(orders)) {
// 根据运单号和自编码分组查询出对应的数量 for (NodeConfirmParamDTO order : orders) {
List<NodeConfirmParamDTO> orders = orderPackageService.findOrderCodebypackageCodes(packageCodeList); order.setOperator(entries.getStr("operator"));
if (CollUtil.isNotEmpty(orders)) { order.setOperatorTime(entries.getStr("operatorTime"));
for (NodeConfirmParamDTO order : orders) { order.setAddress(entries.getStr("address"));
order.setOperator(entries.getStr("operator")); // 如果是签收节点,需要判断是否为全部签收和部分签收
order.setOperatorTime(entries.getStr("operatorTime")); if (EnumUtil.equals(NodeEnums.CLERK_REVIEW, node)) {
order.setAddress(entries.getStr("address")); Integer signNumber = Convert.toInt(order.getRejectQty());
String signForStatus = entries.getStr("signForStatus"); // 查询当前未签收的数量与当前签收数量比较,如果未签收数较大,则是部分签收
// 如果是签收节点,需要判断是否为全部签收和部分签收 String key = order.getDepartCode() + order.getPlatformOrderCode();
if (EnumUtil.equals(NodeEnums.CLERK_REVIEW, node)) { // 部分签收
// 部分签收 order.setNode(ZbomNodeMappingEnums.getZbomByNodeAndStatus(nodeEnums, ZbomConstants.Status.SIGN_FOR_SECTION_STATUS).getCode());
order.setNode(ZbomNodeMappingEnums.getZbomByNodeAndStatus(nodeEnums, ZbomConstants.Status.SIGN_FOR_SECTION_STATUS).getCode()); if (noSignNumberMap.containsKey(key)) {
// 判断是否全部签收完成 Integer noSignNum = noSignNumberMap.get(key);
if (StrUtil.isNotBlank(signForStatus)) { if (noSignNum <= signNumber) {
SignForStatusEnums signFornEnum = EnumUtil.fromString(SignForStatusEnums.class, signForStatus); // 全部签收
if (EnumUtil.equals(SignForStatusEnums.SIGN_FOR_ALL, EnumUtil.toString(signFornEnum))) { order.setNode(ZbomNodeMappingEnums.getZbomByNodeAndStatus(nodeEnums, ZbomConstants.Status.SIGN_FOR_ALL_STATUS).getCode());
// 全部签收
order.setNode(ZbomNodeMappingEnums.getZbomByNodeAndStatus(nodeEnums, ZbomConstants.Status.SIGN_FOR_ALL_STATUS).getCode());
}
} }
} else {
order.setRejectQty("");
order.setNode(ZbomNodeMappingEnums.getZbomByNodeAndStatus(nodeEnums).getCode());
} }
} else {
order.setRejectQty("");
order.setNode(ZbomNodeMappingEnums.getZbomByNodeAndStatus(nodeEnums).getCode());
} }
} }
return orders;
} }
return orders;
} }
return null; return null;
} }

30
blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/service/IFactoryNodePushService.java

@ -0,0 +1,30 @@
/*
* Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* Neither the name of the dreamlu.net developer nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
* Author: Chill 庄骞 (smallchill@163.com)
*/
package com.logpm.factorydata.zbom.service;
import com.logpm.factorydata.zbom.entity.ZbFactoryNodePushEntity;
import org.springblade.core.mp.base.BaseService;
/**
* 节点数据推送成功数据 服务类
*
* @author pref
* @since 2023-08-21
*/
public interface IFactoryNodePushService extends BaseService<ZbFactoryNodePushEntity> {
}

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

@ -17,6 +17,7 @@
package com.logpm.factorydata.zbom.service; 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.NodeConfirmParamDTO; import com.logpm.factorydata.zbom.vo.NodeConfirmParamDTO;
import org.springblade.core.mp.base.BaseService; import org.springblade.core.mp.base.BaseService;
@ -32,4 +33,7 @@ public interface IOrderPackageService extends BaseService<ZbOrderPackageEntity>
List<NodeConfirmParamDTO> findOrderCodebypackageCodes(List<String> packageCodeList); List<NodeConfirmParamDTO> findOrderCodebypackageCodes(List<String> packageCodeList);
void updateSignForStatus(List<String> packageCodeList);
List<NoSignNumberDTO> findNoSignNumber(List<String> packageCodeList);
} }

38
blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/service/impl/FactoryNodePushServiceImpl.java

@ -0,0 +1,38 @@
/*
* Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* Neither the name of the dreamlu.net developer nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
* Author: Chill 庄骞 (smallchill@163.com)
*/
package com.logpm.factorydata.zbom.service.impl;
import com.logpm.factorydata.zbom.entity.ZbFactoryNodePushEntity;
import com.logpm.factorydata.zbom.mapper.FactoryNodePushMapper;
import com.logpm.factorydata.zbom.service.IFactoryNodePushService;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springframework.stereotype.Service;
/**
* 节点数据推送成功 服务实现类
*
* @author pref
* @since 2023-08-21
*/
@Slf4j
@Service
@AllArgsConstructor
public class FactoryNodePushServiceImpl extends BaseServiceImpl<FactoryNodePushMapper, ZbFactoryNodePushEntity> implements IFactoryNodePushService {
}

11
blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/service/impl/OrderPackageServiceImpl.java

@ -19,6 +19,7 @@ package com.logpm.factorydata.zbom.service.impl;
import com.logpm.factorydata.zbom.entity.ZbOrderPackageEntity; import com.logpm.factorydata.zbom.entity.ZbOrderPackageEntity;
import com.logpm.factorydata.zbom.mapper.OrderPackageMapper; import com.logpm.factorydata.zbom.mapper.OrderPackageMapper;
import com.logpm.factorydata.zbom.service.IOrderPackageService; import com.logpm.factorydata.zbom.service.IOrderPackageService;
import com.logpm.factorydata.zbom.vo.NoSignNumberDTO;
import com.logpm.factorydata.zbom.vo.NodeConfirmParamDTO; import com.logpm.factorydata.zbom.vo.NodeConfirmParamDTO;
import org.springblade.core.mp.base.BaseServiceImpl; import org.springblade.core.mp.base.BaseServiceImpl;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -39,4 +40,14 @@ public class OrderPackageServiceImpl extends BaseServiceImpl<OrderPackageMapper,
List<NodeConfirmParamDTO> orders = this.baseMapper.findOrderCodebypackageCodes(packageCodeList); List<NodeConfirmParamDTO> orders = this.baseMapper.findOrderCodebypackageCodes(packageCodeList);
return orders; return orders;
} }
@Override
public void updateSignForStatus(List<String> packageCodeList) {
this.baseMapper.updateSignForStatus(packageCodeList);
}
@Override
public List<NoSignNumberDTO> findNoSignNumber(List<String> packageCodeList) {
return this.baseMapper.findNoSignNumber(packageCodeList);
}
} }

28
blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/vo/NoSignNumberDTO.java

@ -0,0 +1,28 @@
package com.logpm.factorydata.zbom.vo;
import lombok.Data;
import java.io.Serializable;
/**
* 未签收数量dto
*
* @author zhaoqiaobo
* @create 2024-03-21 15:04
*/
@Data
public class NoSignNumberDTO implements Serializable {
/**
* 发运单号
*/
private String departCode;
/**
* 加盟商单号
*/
private String platformOrderCode;
/**
* 数量
*/
private Integer num;
}
Loading…
Cancel
Save