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