|
@@ -6,6 +6,7 @@ import com.google.common.collect.Lists;
|
|
import com.ym.mec.common.dto.SchoolDto;
|
|
import com.ym.mec.common.dto.SchoolDto;
|
|
import com.ym.mec.common.entity.GoodsSubStockModel;
|
|
import com.ym.mec.common.entity.GoodsSubStockModel;
|
|
import com.ym.mec.common.entity.HttpResponseResult;
|
|
import com.ym.mec.common.entity.HttpResponseResult;
|
|
|
|
+import com.ym.mec.common.entity.OrderSkuSync;
|
|
import com.ym.mec.common.exception.BizException;
|
|
import com.ym.mec.common.exception.BizException;
|
|
import com.ym.mec.util.date.DateUtil;
|
|
import com.ym.mec.util.date.DateUtil;
|
|
import com.ym.mec.web.WebFeignService;
|
|
import com.ym.mec.web.WebFeignService;
|
|
@@ -141,16 +142,7 @@ public class OmsOrderServiceImpl implements OmsOrderService {
|
|
// 查询出所有订单关联的skuId
|
|
// 查询出所有订单关联的skuId
|
|
// 订单ID集合
|
|
// 订单ID集合
|
|
List<Long> orderIds = deliveryParamList.stream().map(OmsOrderDeliveryParam::getOrderId).collect(Collectors.toList());
|
|
List<Long> orderIds = deliveryParamList.stream().map(OmsOrderDeliveryParam::getOrderId).collect(Collectors.toList());
|
|
- // 查询订单详情
|
|
|
|
- OmsOrderItemExample example = new OmsOrderItemExample();
|
|
|
|
- example.createCriteria().andOrderIdIn(orderIds);
|
|
|
|
- List<OmsOrderItem> omsOrderItems = omsOrderItemMapper.selectByExample(example);
|
|
|
|
- // skuId 数量 map
|
|
|
|
- Map<Long, Integer> skuIdMap = omsOrderItems.stream().collect(Collectors.groupingBy(OmsOrderItem::getProductSkuId,Collectors.summingInt(OmsOrderItem::getProductQuantity)));
|
|
|
|
-
|
|
|
|
- // skuid 集合
|
|
|
|
- List<Long> skuIds = new ArrayList<>(skuIdMap.keySet());
|
|
|
|
- updateSkuStock( skuIdMap, orderIds);
|
|
|
|
|
|
+ updateSkuStock( orderIds);
|
|
|
|
|
|
|
|
|
|
//添加操作记录
|
|
//添加操作记录
|
|
@@ -174,10 +166,20 @@ public class OmsOrderServiceImpl implements OmsOrderService {
|
|
*/
|
|
*/
|
|
// @Override
|
|
// @Override
|
|
@Transactional(rollbackFor = Exception.class)
|
|
@Transactional(rollbackFor = Exception.class)
|
|
- public void updateSkuStock(Map<Long, Integer> skuIdMap, List<Long> orderIds) {
|
|
|
|
|
|
+ public void updateSkuStock(List<Long> orderIds) {
|
|
|
|
+
|
|
|
|
+ // 查询订单详情
|
|
|
|
+ OmsOrderItemExample example = new OmsOrderItemExample();
|
|
|
|
+ example.createCriteria().andOrderIdIn(orderIds);
|
|
|
|
+ List<OmsOrderItem> omsOrderItems = omsOrderItemMapper.selectByExample(example);
|
|
|
|
+ if (CollectionUtils.isEmpty(omsOrderItems)) {
|
|
|
|
+ throw new BizException("订单详情不存在");
|
|
|
|
+ }
|
|
|
|
+ // skuID集合
|
|
|
|
+ List<Long> skuIds = omsOrderItems.stream().map(OmsOrderItem::getProductSkuId).distinct().collect(Collectors.toList());
|
|
// 查询库存
|
|
// 查询库存
|
|
PmsProductSkuStockRecordExample stockRecordExample = new PmsProductSkuStockRecordExample();
|
|
PmsProductSkuStockRecordExample stockRecordExample = new PmsProductSkuStockRecordExample();
|
|
- stockRecordExample.createCriteria().andProductSkuIdIn(new ArrayList<>(skuIdMap.keySet()));
|
|
|
|
|
|
+ stockRecordExample.createCriteria().andProductSkuIdIn(skuIds);
|
|
List<PmsProductSkuStockRecord> productSkuStockRecords = pmsProductSkuStockRecordMapper.selectByExample(stockRecordExample);
|
|
List<PmsProductSkuStockRecord> productSkuStockRecords = pmsProductSkuStockRecordMapper.selectByExample(stockRecordExample);
|
|
if (CollectionUtils.isEmpty(productSkuStockRecords)) {
|
|
if (CollectionUtils.isEmpty(productSkuStockRecords)) {
|
|
throw new BizException("库存不足");
|
|
throw new BizException("库存不足");
|
|
@@ -193,59 +195,85 @@ public class OmsOrderServiceImpl implements OmsOrderService {
|
|
// 扣减库存
|
|
// 扣减库存
|
|
|
|
|
|
List<PmsProductSkuStockRecord> updateList = new ArrayList<>();
|
|
List<PmsProductSkuStockRecord> updateList = new ArrayList<>();
|
|
- skuIdMap.forEach((skuId, num) -> {
|
|
|
|
- List<PmsProductSkuStockRecord> skuStockRecords = skuStockRecordMap.get(skuId);
|
|
|
|
- if (CollectionUtils.isEmpty(skuStockRecords)) {
|
|
|
|
- throw new BizException("库存不足");
|
|
|
|
- }
|
|
|
|
- int count1 = num;
|
|
|
|
- // 扣减内部库存
|
|
|
|
- for (PmsProductSkuStockRecord skuStockRecord : skuStockRecords) {
|
|
|
|
- if (count1 <= 0) {
|
|
|
|
- break;
|
|
|
|
|
|
+ Map<String, List<OmsOrderItem>> map = omsOrderItems.stream().collect(Collectors.groupingBy(o -> o.getOrderSn()));
|
|
|
|
+ List<OrderSkuSync> skuSyncList = new ArrayList<>();
|
|
|
|
+ map.forEach((sn,v) -> {
|
|
|
|
+ OrderSkuSync skuSync = new OrderSkuSync();
|
|
|
|
+ skuSync.setOrderNo(sn);
|
|
|
|
+ List<OrderSkuSync.SkuSync> skuSyncs = new ArrayList<>();
|
|
|
|
+ skuSync.setSkuSyncList(skuSyncs);
|
|
|
|
+ v.stream().forEach(o -> {
|
|
|
|
+ List<PmsProductSkuStockRecord> skuStockRecords = skuStockRecordMap.get(o.getProductSkuId());
|
|
|
|
+ if (CollectionUtils.isEmpty(skuStockRecords)) {
|
|
|
|
+ throw new BizException("库存不足");
|
|
}
|
|
}
|
|
- if (skuStockRecord.getInternalStock() > 0) {
|
|
|
|
-
|
|
|
|
- int stock = skuStockRecord.getInternalStock() - skuStockRecord.getInternalSaleStock();
|
|
|
|
- if (stock > 0) {
|
|
|
|
- PmsProductSkuStockRecord record = new PmsProductSkuStockRecord();
|
|
|
|
- record.setId(skuStockRecord.getId());
|
|
|
|
-
|
|
|
|
- if (stock >= count1) {
|
|
|
|
- record.setInternalSaleStock(skuStockRecord.getInternalSaleStock() + count1);
|
|
|
|
- count1 = 0;
|
|
|
|
- } else {
|
|
|
|
- count1 = count1 - stock;
|
|
|
|
- record.setInternalSaleStock(skuStockRecord.getInternalStock());
|
|
|
|
|
|
+ int count1 = o.getProductQuantity();
|
|
|
|
+ // 扣减内部库存
|
|
|
|
+ for (PmsProductSkuStockRecord skuStockRecord : skuStockRecords) {
|
|
|
|
+ if (count1 <= 0) {
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ if (skuStockRecord.getInternalStock() > 0) {
|
|
|
|
+ OrderSkuSync.SkuSync sync = new OrderSkuSync.SkuSync();
|
|
|
|
+ sync.setSku(skuStockRecord.getProductSkuId());
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ int stock = skuStockRecord.getInternalStock() - skuStockRecord.getInternalSaleStock();
|
|
|
|
+ if (stock > 0) {
|
|
|
|
+ PmsProductSkuStockRecord record = new PmsProductSkuStockRecord();
|
|
|
|
+ record.setId(skuStockRecord.getId());
|
|
|
|
+ sync.setPrice(skuStockRecord.getPrice());
|
|
|
|
+ sync.setRecordId(skuStockRecord.getId());
|
|
|
|
+
|
|
|
|
+ if (stock >= count1) {
|
|
|
|
+ record.setInternalSaleStock(skuStockRecord.getInternalSaleStock() + count1);
|
|
|
|
+ sync.setCount(count1);
|
|
|
|
+ count1 = 0;
|
|
|
|
+ } else {
|
|
|
|
+ count1 = count1 - stock;
|
|
|
|
+ record.setInternalSaleStock(skuStockRecord.getInternalStock());
|
|
|
|
+ sync.setCount(stock);
|
|
|
|
+ }
|
|
|
|
+ updateList.add(record);
|
|
|
|
+ skuSyncs.add(sync);
|
|
}
|
|
}
|
|
- updateList.add(record);
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- }
|
|
|
|
- // 扣减税务库存
|
|
|
|
- for (PmsProductSkuStockRecord skuStockRecord : skuStockRecords) {
|
|
|
|
- if (count1 <= 0) {
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
- if (skuStockRecord.getTaxStock() > 0) {
|
|
|
|
- int stock = skuStockRecord.getTaxStock() - skuStockRecord.getTaxSaleStock();
|
|
|
|
- if (stock > 0) {
|
|
|
|
- PmsProductSkuStockRecord record = new PmsProductSkuStockRecord();
|
|
|
|
- record.setId(skuStockRecord.getId());
|
|
|
|
- if (stock >= count1) {
|
|
|
|
- record.setTaxSaleStock(skuStockRecord.getTaxSaleStock() + count1);
|
|
|
|
- count1 = 0;
|
|
|
|
- } else {
|
|
|
|
- count1 = count1 - stock;
|
|
|
|
- record.setTaxSaleStock(skuStockRecord.getTaxStock());
|
|
|
|
|
|
+ // 扣减税务库存
|
|
|
|
+ for (PmsProductSkuStockRecord skuStockRecord : skuStockRecords) {
|
|
|
|
+ if (count1 <= 0) {
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ if (skuStockRecord.getTaxStock() > 0) {
|
|
|
|
+
|
|
|
|
+ OrderSkuSync.SkuSync sync = new OrderSkuSync.SkuSync();
|
|
|
|
+ sync.setSku(skuStockRecord.getProductSkuId());
|
|
|
|
+ sync.setPrice(skuStockRecord.getPrice());
|
|
|
|
+ sync.setRecordId(skuStockRecord.getId());
|
|
|
|
+
|
|
|
|
+ int stock = skuStockRecord.getTaxStock() - skuStockRecord.getTaxSaleStock();
|
|
|
|
+ if (stock > 0) {
|
|
|
|
+ PmsProductSkuStockRecord record = new PmsProductSkuStockRecord();
|
|
|
|
+ record.setId(skuStockRecord.getId());
|
|
|
|
+ if (stock >= count1) {
|
|
|
|
+ record.setTaxSaleStock(skuStockRecord.getTaxSaleStock() + count1);
|
|
|
|
+ sync.setCount(count1);
|
|
|
|
+ count1 = 0;
|
|
|
|
+ } else {
|
|
|
|
+ count1 = count1 - stock;
|
|
|
|
+ record.setTaxSaleStock(skuStockRecord.getTaxStock());
|
|
|
|
+ sync.setCount(stock);
|
|
|
|
+ }
|
|
|
|
+ updateList.add(record);
|
|
|
|
+ skuSyncs.add(sync);
|
|
}
|
|
}
|
|
- updateList.add(record);
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- }
|
|
|
|
- if (count1 > 0) {
|
|
|
|
- throw new BizException("库存不足");
|
|
|
|
- }
|
|
|
|
|
|
+ if (count1 > 0) {
|
|
|
|
+ throw new BizException("库存不足");
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+ skuSyncList.add(skuSync);
|
|
});
|
|
});
|
|
for (PmsProductSkuStockRecord pmsProductSkuStockRecord : updateList) {
|
|
for (PmsProductSkuStockRecord pmsProductSkuStockRecord : updateList) {
|
|
pmsProductSkuStockRecordMapper.updateByPrimaryKeySelective(pmsProductSkuStockRecord);
|
|
pmsProductSkuStockRecordMapper.updateByPrimaryKeySelective(pmsProductSkuStockRecord);
|
|
@@ -255,10 +283,8 @@ public class OmsOrderServiceImpl implements OmsOrderService {
|
|
OmsOrderExample orderExample = new OmsOrderExample();
|
|
OmsOrderExample orderExample = new OmsOrderExample();
|
|
orderExample.createCriteria().andIdIn(orderIds);
|
|
orderExample.createCriteria().andIdIn(orderIds);
|
|
List<OmsOrder> omsOrders = orderMapper.selectByExample(orderExample);
|
|
List<OmsOrder> omsOrders = orderMapper.selectByExample(orderExample);
|
|
- // 订单号
|
|
|
|
- List<String> orderSnList = omsOrders.stream().map(OmsOrder::getOrderSn).collect(Collectors.toList());
|
|
|
|
try {
|
|
try {
|
|
- HttpResponseResult httpResponseResult = webFeignService.updateShippedStatus(orderSnList);
|
|
|
|
|
|
+ HttpResponseResult httpResponseResult = webFeignService.updateShippedStatus(skuSyncList);
|
|
if (httpResponseResult.getCode() != 200 && !httpResponseResult.getStatus()) {
|
|
if (httpResponseResult.getCode() != 200 && !httpResponseResult.getStatus()) {
|
|
throw new BizException("发货通知失败");
|
|
throw new BizException("发货通知失败");
|
|
}
|
|
}
|
|
@@ -267,7 +293,7 @@ public class OmsOrderServiceImpl implements OmsOrderService {
|
|
}
|
|
}
|
|
|
|
|
|
// 调用三方库存更新接口
|
|
// 调用三方库存更新接口
|
|
- syncSkuStock(new ArrayList<>(skuIdMap.keySet()));
|
|
|
|
|
|
+ syncSkuStock(skuIds);
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
@Override
|
|
@@ -332,6 +358,12 @@ public class OmsOrderServiceImpl implements OmsOrderService {
|
|
public OmsOrderDetail detail(Long id) {
|
|
public OmsOrderDetail detail(Long id) {
|
|
OmsOrderDetail detail = orderDao.getDetail(id);
|
|
OmsOrderDetail detail = orderDao.getDetail(id);
|
|
|
|
|
|
|
|
+ // 获取订单详情
|
|
|
|
+ OmsOrderItemExample example = new OmsOrderItemExample();
|
|
|
|
+ example.createCriteria().andOrderIdEqualTo(id);
|
|
|
|
+ List<OmsOrderItem> omsOrderItems = omsOrderItemMapper.selectByExample(example);
|
|
|
|
+ detail.setOrderItemList(omsOrderItems);
|
|
|
|
+
|
|
// 学校订单查询学校信息
|
|
// 学校订单查询学校信息
|
|
try {
|
|
try {
|
|
if (detail.getSourceType() == 2) {
|
|
if (detail.getSourceType() == 2) {
|
|
@@ -733,10 +765,7 @@ public class OmsOrderServiceImpl implements OmsOrderService {
|
|
// 如果订单状态是已发货,扣减库存
|
|
// 如果订单状态是已发货,扣减库存
|
|
if (order.getStatus() ==2 || order.getStatus() == 3) {
|
|
if (order.getStatus() ==2 || order.getStatus() == 3) {
|
|
|
|
|
|
- // skuId 数量 map
|
|
|
|
- Map<Long, Integer> skuIdMap = orderItemList.stream().collect(Collectors.groupingBy(OmsOrderItem::getProductSkuId,Collectors.summingInt(OmsOrderItem::getProductQuantity)));
|
|
|
|
-
|
|
|
|
- updateSkuStock(skuIdMap, Lists.newArrayList(detail.getId()));
|
|
|
|
|
|
+ updateSkuStock(Lists.newArrayList(detail.getId()));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|