|
@@ -18,6 +18,7 @@ import com.fs.company.service.ICompanyService;
|
|
|
import com.fs.company.service.ICompanyUserService;
|
|
import com.fs.company.service.ICompanyUserService;
|
|
|
import com.fs.common.core.domain.R;
|
|
import com.fs.common.core.domain.R;
|
|
|
import com.fs.core.utils.OrderCodeUtils;
|
|
import com.fs.core.utils.OrderCodeUtils;
|
|
|
|
|
+import com.fs.erp.constant.ErpQueryOrderStatusEnum;
|
|
|
import com.fs.erp.domain.ErpDeliverys;
|
|
import com.fs.erp.domain.ErpDeliverys;
|
|
|
import com.fs.erp.domain.ErpOrder;
|
|
import com.fs.erp.domain.ErpOrder;
|
|
|
import com.fs.erp.domain.ErpOrderItem;
|
|
import com.fs.erp.domain.ErpOrderItem;
|
|
@@ -701,16 +702,28 @@ public class FsExternalOrderServiceImpl implements IFsExternalOrderService {
|
|
|
continue;
|
|
continue;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ // 按聚水潭订单状态回写本地:Sent=已发货(3),Delivering=发货中(5)
|
|
|
for (ErpOrderQuery orderQuery : response.getOrders()) {
|
|
for (ErpOrderQuery orderQuery : response.getOrders()) {
|
|
|
- log.info("同步外部订单 {} 发货信息: deliverys={}",
|
|
|
|
|
|
|
+ log.info("同步外部订单 {} 聚水潭状态: {}, deliverys={}",
|
|
|
order.getOrderCode(),
|
|
order.getOrderCode(),
|
|
|
|
|
+ orderQuery.getStatus(),
|
|
|
JSON.toJSONString(orderQuery.getDeliverys()));
|
|
JSON.toJSONString(orderQuery.getDeliverys()));
|
|
|
- if (orderQuery.getDeliverys() != null && !orderQuery.getDeliverys().isEmpty()) {
|
|
|
|
|
|
|
+ // 已发货:有快递单号才更新为 status=3,并订阅物流
|
|
|
|
|
+ if (ErpQueryOrderStatusEnum.SENT.getCode().equals(orderQuery.getStatus())) {
|
|
|
|
|
+ ErpDeliverys shipped = firstDelivery(orderQuery);
|
|
|
|
|
+ if (shipped != null && StringUtils.isNotEmpty(shipped.getMail_no())) {
|
|
|
|
|
+ updateOrderDelivery(order, shipped);
|
|
|
|
|
+ }
|
|
|
|
|
+ // 发货中:更新为 status=5,不订阅物流、不置为已发货
|
|
|
|
|
+ } else if (ErpQueryOrderStatusEnum.DELIVERING.getCode().equals(orderQuery.getStatus())) {
|
|
|
|
|
+ updateOrderDelivering(order, firstDelivery(orderQuery));
|
|
|
|
|
+ // 状态未识别时:若发货明细已标记发出且有单号,仍按已发货处理
|
|
|
|
|
+ } else if (orderQuery.getDeliverys() != null && !orderQuery.getDeliverys().isEmpty()) {
|
|
|
for (ErpDeliverys delivery : orderQuery.getDeliverys()) {
|
|
for (ErpDeliverys delivery : orderQuery.getDeliverys()) {
|
|
|
log.info("发货明细: delivery={}, mail_no={}, express_code={}, express_name={}",
|
|
log.info("发货明细: delivery={}, mail_no={}, express_code={}, express_name={}",
|
|
|
delivery.getDelivery(), delivery.getMail_no(),
|
|
delivery.getDelivery(), delivery.getMail_no(),
|
|
|
delivery.getExpress_code(), delivery.getExpress_name());
|
|
delivery.getExpress_code(), delivery.getExpress_name());
|
|
|
- if (delivery.getDelivery() && StringUtils.isNotEmpty(delivery.getMail_no())) {
|
|
|
|
|
|
|
+ if (Boolean.TRUE.equals(delivery.getDelivery()) && StringUtils.isNotEmpty(delivery.getMail_no())) {
|
|
|
updateOrderDelivery(order, delivery);
|
|
updateOrderDelivery(order, delivery);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
@@ -774,10 +787,11 @@ public class FsExternalOrderServiceImpl implements IFsExternalOrderService {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
String mailNo = delivery.getMail_no();
|
|
String mailNo = delivery.getMail_no();
|
|
|
- boolean hasSubscribed = currentOrder.getStatus() != null
|
|
|
|
|
- && currentOrder.getStatus() != 2
|
|
|
|
|
|
|
+ Integer currentStatus = currentOrder.getStatus();
|
|
|
|
|
+ boolean alreadyShipped = currentStatus != null
|
|
|
|
|
+ && (currentStatus == 3 || currentStatus == 4)
|
|
|
&& StringUtils.equals(currentOrder.getDeliverySn(), mailNo);
|
|
&& StringUtils.equals(currentOrder.getDeliverySn(), mailNo);
|
|
|
- if (hasSubscribed) {
|
|
|
|
|
|
|
+ if (alreadyShipped) {
|
|
|
return;
|
|
return;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -815,6 +829,70 @@ public class FsExternalOrderServiceImpl implements IFsExternalOrderService {
|
|
|
log.info("外部订单已发货: {}, 快递: {}, 单号: {}", localOrder.getOrderCode(), deliveryCode, mailNo);
|
|
log.info("外部订单已发货: {}, 快递: {}, 单号: {}", localOrder.getOrderCode(), deliveryCode, mailNo);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ private ErpDeliverys firstDelivery(ErpOrderQuery orderQuery) {
|
|
|
|
|
+ if (orderQuery == null || CollectionUtils.isEmpty(orderQuery.getDeliverys())) {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+ return orderQuery.getDeliverys().get(0);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 聚水潭「发货中」同步为本地 status=5,不订阅物流、不置为已发货
|
|
|
|
|
+ */
|
|
|
|
|
+ private void updateOrderDelivering(FsExternalOrder localOrder, ErpDeliverys delivery) {
|
|
|
|
|
+ FsExternalOrder currentOrder = fsExternalOrderMapper.selectFsExternalOrderByOrderId(localOrder.getOrderId());
|
|
|
|
|
+ if (currentOrder == null) {
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+ Integer currentStatus = currentOrder.getStatus();
|
|
|
|
|
+ if (currentStatus != null && (currentStatus == 3 || currentStatus == 4 || currentStatus == -3 || currentStatus == -4)) {
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ FsExternalOrder updateOrder = new FsExternalOrder();
|
|
|
|
|
+ updateOrder.setOrderId(localOrder.getOrderId());
|
|
|
|
|
+ updateOrder.setStatus(5);
|
|
|
|
|
+ fillDeliveryCompany(updateOrder, delivery);
|
|
|
|
|
+ if (delivery != null && StringUtils.isNotBlank(delivery.getMail_no())) {
|
|
|
|
|
+ updateOrder.setDeliverySn(delivery.getMail_no());
|
|
|
|
|
+ }
|
|
|
|
|
+ fsExternalOrderMapper.updateFsExternalOrder(updateOrder);
|
|
|
|
|
+ log.info("外部订单发货中: {}, 快递: {}, 单号: {}",
|
|
|
|
|
+ localOrder.getOrderCode(),
|
|
|
|
|
+ updateOrder.getDeliveryCode(),
|
|
|
|
|
+ updateOrder.getDeliverySn());
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ private void fillDeliveryCompany(FsExternalOrder updateOrder, ErpDeliverys delivery) {
|
|
|
|
|
+ if (delivery == null) {
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+ String deliveryCode = delivery.getExpress_code();
|
|
|
|
|
+ String deliveryName = delivery.getExpress_name();
|
|
|
|
|
+ if (StringUtils.isBlank(deliveryCode)) {
|
|
|
|
|
+ if (StringUtils.isNotBlank(deliveryName)) {
|
|
|
|
|
+ updateOrder.setDeliveryName(deliveryName);
|
|
|
|
|
+ }
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+ FsExpress express = expressService.selectFsExpressByOmsCode(deliveryCode);
|
|
|
|
|
+ if (express == null) {
|
|
|
|
|
+ express = expressService.selectFsExpressByCode(deliveryCode);
|
|
|
|
|
+ }
|
|
|
|
|
+ if (express == null && StringUtils.isNotBlank(deliveryName)) {
|
|
|
|
|
+ express = expressService.selectFsExpressByName(deliveryName);
|
|
|
|
|
+ }
|
|
|
|
|
+ if (express != null) {
|
|
|
|
|
+ updateOrder.setDeliveryName(express.getName());
|
|
|
|
|
+ updateOrder.setDeliveryCode(express.getCode());
|
|
|
|
|
+ } else {
|
|
|
|
|
+ updateOrder.setDeliveryCode(deliveryCode);
|
|
|
|
|
+ if (StringUtils.isNotBlank(deliveryName)) {
|
|
|
|
|
+ updateOrder.setDeliveryName(deliveryName);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
private void subscribeExternalOrderExpress(FsExternalOrder order, String deliveryCode, String deliverySn) {
|
|
private void subscribeExternalOrderExpress(FsExternalOrder order, String deliveryCode, String deliverySn) {
|
|
|
if (order == null || StringUtils.isBlank(deliveryCode) || StringUtils.isBlank(deliverySn)) {
|
|
if (order == null || StringUtils.isBlank(deliveryCode) || StringUtils.isBlank(deliverySn)) {
|
|
|
return;
|
|
return;
|