|
|
@@ -3,6 +3,7 @@ package com.fs.erp.service.impl;
|
|
|
import cn.hutool.core.date.DateUtil;
|
|
|
import cn.hutool.core.util.ObjectUtil;
|
|
|
import com.alibaba.fastjson.JSON;
|
|
|
+import com.alibaba.fastjson.JSONArray;
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
import com.alibaba.fastjson.TypeReference;
|
|
|
import com.fs.common.core.redis.RedisCache;
|
|
|
@@ -499,6 +500,193 @@ public class JSTErpOrderServiceImpl implements IErpOrderService {
|
|
|
return erpOrderResponse;
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public ErpOrderResponse batchAddOrder(List<ErpOrder> orders) throws InterruptedException {
|
|
|
+ List<ShopOrderDTO> normalOrders = new ArrayList<>(); // 普通订单
|
|
|
+ List<ShopOrderDTO> codOrders = new ArrayList<>(); // 货到付款订单
|
|
|
+
|
|
|
+ ErpOrderResponseDTO upload = new ErpOrderResponseDTO();
|
|
|
+
|
|
|
+ for (ErpOrder order : orders) {
|
|
|
+ FsStoreOrder fsStoreOrder = fsStoreOrderService.selectFsStoreOrderByOrderCode(order.getPlatform_code());
|
|
|
+ if (ObjectUtil.isNull(fsStoreOrder)) {
|
|
|
+ fsStoreOrder = fsStoreOrderService.selectFsStoreOrderByOrderCode(order.getParent_code());
|
|
|
+ }
|
|
|
+ log.info("ERP订单号: {}, 订单信息: {}",order.getPlatform_code(), JSON.toJSONString(fsStoreOrder));
|
|
|
+ if(!CollectionUtils.isEmpty(order.getPayments())){
|
|
|
+ ErpOrderPayment erpOrderPayment = order.getPayments().get(0);
|
|
|
+ }
|
|
|
+
|
|
|
+ ShopOrderDTO shopOrderDTO = new ShopOrderDTO();
|
|
|
+
|
|
|
+ shopOrderDTO.setShopId(Long.valueOf(order.getShop_code()));
|
|
|
+ shopOrderDTO.setSoId(order.getPlatform_code());
|
|
|
+ shopOrderDTO.setOrderDate(order.getDeal_datetime());
|
|
|
+ shopOrderDTO.setShopStatus(OrderStatusEnum.WAIT_SELLER_SEND_GOODS.name());
|
|
|
+ shopOrderDTO.setShopBuyerId(order.getBuyer_account());
|
|
|
+ shopOrderDTO.setReceiverState(order.getReceiver_province());
|
|
|
+ shopOrderDTO.setReceiverCity(order.getReceiver_city());
|
|
|
+ shopOrderDTO.setReceiverDistrict(order.getReceiver_district());
|
|
|
+ shopOrderDTO.setReceiverAddress(order.getReceiver_address());
|
|
|
+ shopOrderDTO.setReceiverName(order.getReceiver_name());
|
|
|
+ shopOrderDTO.setReceiverPhone(order.getReceiver_mobile());
|
|
|
+ shopOrderDTO.setPayAmount(fsStoreOrder.getPayPrice().doubleValue());
|
|
|
+ shopOrderDTO.setRemark(order.getRemark());
|
|
|
+ if (ObjectUtil.isNull(fsStoreOrder.getPayDelivery())) {
|
|
|
+ shopOrderDTO.setFreight(Double.valueOf("0.00"));
|
|
|
+ } else {
|
|
|
+ shopOrderDTO.setFreight(fsStoreOrder.getPayDelivery().doubleValue());
|
|
|
+ }
|
|
|
+ shopOrderDTO.setBuyerMessage(order.getBuyer_memo());
|
|
|
+
|
|
|
+ // 订单商品项列表
|
|
|
+ List<OrderItemDTO> itemDTOList = new ArrayList<>();
|
|
|
+ List<FsStoreOrderItem> fsStoreOrderItemVOS = new ArrayList<>();
|
|
|
+ if (StringUtils.isNotEmpty(fsStoreOrder.getExtendOrderId())&&fsStoreOrder.getExtendOrderId().equals("BATCH")){
|
|
|
+ fsStoreOrderItemVOS = fsStoreOrderItemService.selectFsStoreOrderItemListByOrderCode(order.getPlatform_code());
|
|
|
+ }else {
|
|
|
+ fsStoreOrderItemVOS = fsStoreOrderItemService.selectFsStoreOrderItemListByOrderId(fsStoreOrder.getOrderId());
|
|
|
+ }
|
|
|
+
|
|
|
+ for (FsStoreOrderItem item : fsStoreOrderItemVOS) {
|
|
|
+ OrderItemDTO orderItemDTO = new OrderItemDTO();
|
|
|
+ JSONObject jsonObject = JSON.parseObject(item.getJsonInfo());
|
|
|
+ String barCode = jsonObject.getString("barCode");
|
|
|
+ String productName = jsonObject.getString("productName");
|
|
|
+ String sku=jsonObject.getString("sku");
|
|
|
+
|
|
|
+ orderItemDTO.setSkuId(barCode);
|
|
|
+ orderItemDTO.setShopSkuId(barCode);
|
|
|
+ orderItemDTO.setName(productName);
|
|
|
+ orderItemDTO.setShopIId(orderItemDTO.getSkuId());
|
|
|
+ orderItemDTO.setPropertiesValue(sku);
|
|
|
+ FsStoreProduct fsStoreProduct = fsStoreProductService.selectFsStoreProductById(item.getProductId());
|
|
|
+ orderItemDTO.setAmount(fsStoreProduct.getPrice().multiply(new BigDecimal(item.getNum())));
|
|
|
+ orderItemDTO.setPic(fsStoreProduct.getImgUrl());
|
|
|
+ orderItemDTO.setPrice(fsStoreProduct.getPrice());
|
|
|
+ orderItemDTO.setQty(item.getNum().intValue());
|
|
|
+ orderItemDTO.setOuterOiId(String.format("%s%s",fsStoreOrder.getOrderCode(),item.getItemId()));
|
|
|
+ itemDTOList.add(orderItemDTO);
|
|
|
+ }
|
|
|
+ shopOrderDTO.setItems(itemDTOList);
|
|
|
+
|
|
|
+ // 实际支付金额
|
|
|
+ PaymentDTO paymentDTO = new PaymentDTO();
|
|
|
+ paymentDTO.setAmount(fsStoreOrder.getPayMoney().doubleValue());
|
|
|
+ paymentDTO.setOuterPayId(order.getPlatform_code());
|
|
|
+ paymentDTO.setPayDate(order.getDeal_datetime());
|
|
|
+ paymentDTO.setPayment("微信支付");
|
|
|
+ paymentDTO.setBuyerAccount(order.getBuyer_account());
|
|
|
+ paymentDTO.setSellerAccount("平台销售");
|
|
|
+ shopOrderDTO.setPay(paymentDTO);
|
|
|
+ if (order.getOrderNum()>1){
|
|
|
+ shopOrderDTO.setPayAmount(0.00);
|
|
|
+ shopOrderDTO.setPay(null);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 添加普通订单
|
|
|
+ normalOrders.add(shopOrderDTO);
|
|
|
+
|
|
|
+ // 如果是货到付款,创建第二个订单
|
|
|
+ if(fsStoreOrder.getPayType() == 2 || fsStoreOrder.getPayType() == 3){
|
|
|
+ ShopOrderDTO codOrderDTO = JSON.parseObject(JSON.toJSONString(shopOrderDTO), ShopOrderDTO.class);
|
|
|
+ codOrderDTO.setIsCod(true);
|
|
|
+ // 应付金额(货到付款= 订单总金额 - 已付金额)
|
|
|
+ codOrderDTO.setPayAmount(fsStoreOrder.getPayPrice().doubleValue());
|
|
|
+
|
|
|
+ // 货到付款支付信息
|
|
|
+ PaymentDTO paymentDTO2 = new PaymentDTO();
|
|
|
+ // 物流代收金额
|
|
|
+ paymentDTO2.setAmount(fsStoreOrder.getPayRemain().doubleValue());
|
|
|
+ paymentDTO2.setOuterPayId(String.format("%s%d",order.getPlatform_code(),1));
|
|
|
+ paymentDTO2.setPayDate(order.getDeal_datetime());
|
|
|
+ paymentDTO2.setPayment("货到付款");
|
|
|
+ paymentDTO2.setBuyerAccount(order.getBuyer_account());
|
|
|
+ paymentDTO2.setSellerAccount("平台销售");
|
|
|
+ codOrderDTO.setPay(paymentDTO2);
|
|
|
+
|
|
|
+ FsJstCodPush fsJstCodPush = new FsJstCodPush();
|
|
|
+ fsJstCodPush.setOrderId(fsStoreOrder.getOrderCode());
|
|
|
+ fsJstCodPush.setType("0");
|
|
|
+ fsJstCodPush.setParams(JSON.toJSONString(codOrderDTO));
|
|
|
+ fsJstCodPush.setRetryCount(0);
|
|
|
+ fsJstCodPush.setTaskStatus(TaskStatusEnum.PENDING.getCode());
|
|
|
+ fsJstCodPushMapper.insert(fsJstCodPush);
|
|
|
+
|
|
|
+ if (order.getOrderNum()>1){
|
|
|
+ codOrderDTO.setPayAmount(0.00);
|
|
|
+ codOrderDTO.setPay(null);
|
|
|
+ }
|
|
|
+ // 添加货到付款订单
|
|
|
+ codOrders.add(codOrderDTO);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ // 批量推送普通订单(每50条一批)
|
|
|
+ int batchSize = 50; // 修正为50
|
|
|
+ ErpOrderResponseDTO lastResponse = null;
|
|
|
+
|
|
|
+ // 推送普通订单
|
|
|
+ for (int i = 0; i < normalOrders.size(); i += batchSize) {
|
|
|
+ int endIndex = Math.min(i + batchSize, normalOrders.size());
|
|
|
+ List<ShopOrderDTO> batch = new ArrayList<>(normalOrders.subList(i, endIndex));
|
|
|
+ lastResponse = jstErpHttpService.batchUpload(batch);
|
|
|
+ List<ErpOrderResponseDTO.OrderData> datas = lastResponse.getDatas();
|
|
|
+ for (ErpOrderResponseDTO.OrderData data : datas) {
|
|
|
+ if (data!=null&&data.getIssuccess()) {
|
|
|
+ FsStoreOrder fsStoreOrder = fsStoreOrderService.selectFsStoreOrderByOrderCode(data.getSoId());
|
|
|
+ //普通订单
|
|
|
+ if (fsStoreOrder!=null&&StringUtils.isEmpty(fsStoreOrder.getExtendOrderId())){
|
|
|
+ //支付成功后 将订单号写入待发货的REDIS中
|
|
|
+ redisCache.setCacheObject("delivery" + ":" + data.getOId(), fsStoreOrder.getOrderCode());
|
|
|
+ //写入外部订单号
|
|
|
+ fsStoreOrder.setExtendOrderId(data.getOId().toString());
|
|
|
+ fsStoreOrderService.updateFsStoreOrder(fsStoreOrder);
|
|
|
+ }else if (fsStoreOrder!=null&&fsStoreOrder.getExtendOrderId().equals("BATCH")){
|
|
|
+ //分批订单
|
|
|
+ FsStoreOrderItem oneItem = fsStoreOrderItemMapper.selectFsStoreOrderItemByOrderCode(data.getSoId());
|
|
|
+ redisCache.setCacheObject("delivery" + ":" + data.getOId(), oneItem.getOrderCode());
|
|
|
+ //写入外部订单号
|
|
|
+ oneItem.setExtendOrderId(data.getOId().toString());
|
|
|
+ fsStoreOrderItemMapper.updateFsStoreOrderItemBatch(oneItem);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ log.info("批量推送普通订单,数量: {}", batch.size());
|
|
|
+ Thread.sleep(600);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 推送货到付款订单
|
|
|
+ for (int i = 0; i < codOrders.size(); i += batchSize) {
|
|
|
+ int endIndex = Math.min(i + batchSize, codOrders.size());
|
|
|
+ List<ShopOrderDTO> batch = new ArrayList<>(codOrders.subList(i, endIndex));
|
|
|
+ jstErpHttpService.batchUpload(batch);
|
|
|
+ log.info("批量推送货到付款订单,数量: {}", batch.size());
|
|
|
+ }
|
|
|
+
|
|
|
+ // 返回最后一次推送的结果
|
|
|
+ if (lastResponse != null && CollectionUtils.isEmpty(lastResponse.getDatas())) {
|
|
|
+ log.info("推送ERP返回结果: {}", lastResponse);
|
|
|
+ throw new IllegalArgumentException("推送ERP返回数不应该为0");
|
|
|
+ }
|
|
|
+
|
|
|
+ // 如果没有任何订单推送,创建一个默认响应
|
|
|
+ if (lastResponse == null) {
|
|
|
+ lastResponse = new ErpOrderResponseDTO();
|
|
|
+ ErpOrderResponseDTO.OrderData data = new ErpOrderResponseDTO.OrderData();
|
|
|
+ data.setOId(0);
|
|
|
+ lastResponse.setDatas(Collections.singletonList(data));
|
|
|
+ }
|
|
|
+
|
|
|
+ ErpOrderResponseDTO.OrderData orderData = lastResponse.getDatas().get(0);
|
|
|
+
|
|
|
+ ErpOrderResponse erpOrderResponse = new ErpOrderResponse();
|
|
|
+ erpOrderResponse.setSuccess(true);
|
|
|
+ erpOrderResponse.setCode(String.valueOf(orderData.getOId()));
|
|
|
+ return erpOrderResponse;
|
|
|
+ }
|
|
|
+
|
|
|
@Override
|
|
|
public ErpOrderResponse refundOrder(ErpRefundOrder order) {
|
|
|
return null;
|
|
|
@@ -1109,23 +1297,27 @@ public class JSTErpOrderServiceImpl implements IErpOrderService {
|
|
|
shopOrderDTO.setBuyerMessage(order.getBuyer_memo());
|
|
|
// 订单商品项列表
|
|
|
List<OrderItemDTO> itemDTOList = new ArrayList<>();
|
|
|
- OrderItemDTO orderItemDTO = new OrderItemDTO();
|
|
|
- JSONObject jsonObject = JSON.parseObject(fsIntegralOrder.getItemJson());
|
|
|
- String barCode = jsonObject.getString("barCode");
|
|
|
- String productName = jsonObject.getString("goodsName");
|
|
|
- //String sku = jsonObject.getString("sku");
|
|
|
- orderItemDTO.setSkuId(barCode);
|
|
|
- orderItemDTO.setShopSkuId(barCode);
|
|
|
- orderItemDTO.setName(productName);
|
|
|
- orderItemDTO.setShopIId(orderItemDTO.getSkuId());
|
|
|
- //orderItemDTO.setPropertiesValue(sku);
|
|
|
- FsIntegralGoods goodsId = fsIntegralGoodsMapper.selectFsIntegralGoodsByGoodsId(Long.parseLong(jsonObject.getString("goodsId")));
|
|
|
- orderItemDTO.setAmount(new BigDecimal(0));
|
|
|
- orderItemDTO.setPic(goodsId.getImgUrl());
|
|
|
- orderItemDTO.setPrice(new BigDecimal(0));
|
|
|
- orderItemDTO.setQty(1);
|
|
|
- orderItemDTO.setOuterOiId(String.format("%s", fsIntegralOrder.getOrderCode()));
|
|
|
- itemDTOList.add(orderItemDTO);
|
|
|
+ Object parsedJson = JSON.parse(fsIntegralOrder.getItemJson());
|
|
|
+ JSONArray jsonArray = (JSONArray) parsedJson;
|
|
|
+ for (int i = 0; i < jsonArray.size(); i++) {
|
|
|
+ OrderItemDTO orderItemDTO = new OrderItemDTO();
|
|
|
+ JSONObject jsonObject = jsonArray.getJSONObject(i);
|
|
|
+ String barCode = jsonObject.getString("barCode");
|
|
|
+ String productName = jsonObject.getString("goodsName");
|
|
|
+ //String sku = jsonObject.getString("sku");
|
|
|
+ orderItemDTO.setSkuId(barCode);
|
|
|
+ orderItemDTO.setShopSkuId(barCode);
|
|
|
+ orderItemDTO.setName(productName);
|
|
|
+ orderItemDTO.setShopIId(orderItemDTO.getSkuId());
|
|
|
+ //orderItemDTO.setPropertiesValue(sku);
|
|
|
+ FsIntegralGoods goodsId = fsIntegralGoodsMapper.selectFsIntegralGoodsByGoodsId(Long.parseLong(jsonObject.getString("goodsId")));
|
|
|
+ orderItemDTO.setAmount(new BigDecimal(0));
|
|
|
+ orderItemDTO.setPic(goodsId.getImgUrl());
|
|
|
+ orderItemDTO.setPrice(new BigDecimal(0));
|
|
|
+ orderItemDTO.setQty(1);
|
|
|
+ orderItemDTO.setOuterOiId(String.format("%s", fsIntegralOrder.getOrderCode()));
|
|
|
+ itemDTOList.add(orderItemDTO);
|
|
|
+ }
|
|
|
shopOrderDTO.setItems(itemDTOList);
|
|
|
// 实际支付金额
|
|
|
PaymentDTO paymentDTO = new PaymentDTO();
|