|
@@ -2205,11 +2205,58 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public void updateShippedStatus(List<OrderSkuSync> orderSkuSyncs) {
|
|
|
+ if (CollectionUtils.isEmpty(orderSkuSyncs)) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ List<String> orderNos = orderSkuSyncs.stream().map(e -> e.getOrderNo()).collect(Collectors.toList());
|
|
|
+ List<SellOrder> sellOrders = sellOrderDao.queryByOrganNos(orderNos);
|
|
|
+ if (CollectionUtils.isEmpty(sellOrders)) {
|
|
|
+ throw new BizException("订单不存在");
|
|
|
+ }
|
|
|
+ sellOrders = sellOrders.stream().filter(e -> e.getDeliveryTime() == null).collect(Collectors.toList());
|
|
|
+ if(CollectionUtils.isEmpty(sellOrders)){
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ Map<String,List<SellOrder>> sellOrderMap = sellOrders.stream().collect(Collectors.groupingBy(SellOrder::getOrderNo));
|
|
|
+ Map<String,Map<Long,BigDecimal>> skuCostMap = new HashMap<>(orderSkuSyncs.size());
|
|
|
for (OrderSkuSync orderSkuSync : orderSkuSyncs) {
|
|
|
- for (int i = 0; i < orderSkuSync.getSkuSyncList().size(); i++) {
|
|
|
- sellOrderDao.updateOrganGoodsCost(orderSkuSync.getSkuSyncList().get(i), orderSkuSync.getOrderNo());
|
|
|
+ List<SellOrder> dtos = sellOrderMap.get(orderSkuSync.getOrderNo());
|
|
|
+ if(CollectionUtils.isEmpty(dtos)){
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ //获取sku平均成本价
|
|
|
+ Map<Long,List<OrderSkuSync.SkuSync>> skuMap = orderSkuSync.getSkuSyncList().stream().collect(Collectors.groupingBy(OrderSkuSync.SkuSync::getSku));
|
|
|
+ for (Long skuId : skuMap.keySet()) {
|
|
|
+ List<OrderSkuSync.SkuSync> skuSyncs = skuMap.get(skuId);
|
|
|
+ //汇总成本价
|
|
|
+ BigDecimal costPrice = skuSyncs.stream().map(e -> e.getPrice().multiply(new BigDecimal(e.getCount()))).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ //获取总数
|
|
|
+ int count = skuSyncs.stream().mapToInt(e -> e.getCount()).sum();
|
|
|
+ BigDecimal avgCostPrice = costPrice;
|
|
|
+ if (count > 1) {
|
|
|
+ avgCostPrice = costPrice.divide(new BigDecimal(count), 2, BigDecimal.ROUND_HALF_UP);
|
|
|
+ }
|
|
|
+ Map<Long,BigDecimal> costMap = new HashMap<>(1);
|
|
|
+ costMap.put(skuId,avgCostPrice);
|
|
|
+ skuCostMap.put(orderSkuSync.getOrderNo(),costMap);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ Date now = new Date();
|
|
|
+ String format = DateUtil.format(now, DateUtil.ISO_EXPANDED_DATE_FORMAT);
|
|
|
+ for (String orderNo : sellOrderMap.keySet()) {
|
|
|
+ List<SellOrder> sellOrderList = sellOrderMap.get(orderNo);
|
|
|
+ Map<Long,BigDecimal> costMap = skuCostMap.get(orderNo);
|
|
|
+ for (SellOrder sellOrder : sellOrderList) {
|
|
|
+ BigDecimal costPrice = costMap.get(sellOrder.getGoodsSkuId().longValue());
|
|
|
+ if(costPrice == null){
|
|
|
+ throw new BizException("商品[{}]成本价不存在",sellOrder.getGoodsSkuId());
|
|
|
+ }
|
|
|
+ sellOrder.setSellCost(costPrice);
|
|
|
+ sellOrder.setDeliveryTime(format);
|
|
|
}
|
|
|
}
|
|
|
+ sellOrderDao.batchUpdate(sellOrders);
|
|
|
+
|
|
|
}
|
|
|
|
|
|
public BigDecimal getActualAmount(BigDecimal price, StudentPaymentOrderExportDto row) {
|