|
|
@@ -582,6 +582,7 @@ public class OrderServiceImpl extends ServiceImpl<AppOrderMapper, AppOrder> impl
|
|
|
List<String> familyIds = Arrays.stream(createOrderForm.getFamilyIds().split(",")).collect(Collectors.toList());
|
|
|
AppOrderProInfo proInfo = appOrderProInfoMapper.selectOne(Wrappers.<AppOrderProInfo>lambdaQuery()
|
|
|
.eq(AppOrderProInfo::getProductId, productId)
|
|
|
+ .ne(AppOrderProInfo::getOrderStatus, 4)
|
|
|
.in(AppOrderProInfo::getFamilyUserId, familyIds)
|
|
|
.last("limit 1")
|
|
|
);
|
|
|
@@ -2556,6 +2557,7 @@ public class OrderServiceImpl extends ServiceImpl<AppOrderMapper, AppOrder> impl
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
public Boolean cancelSchoolOrder(String orderId) {
|
|
|
|
|
|
AppOrder appOrder = appOrderMapper.selectById(orderId);
|
|
|
@@ -2568,6 +2570,34 @@ public class OrderServiceImpl extends ServiceImpl<AppOrderMapper, AppOrder> impl
|
|
|
}
|
|
|
List<AppOrderProInfo> orderProInfoList = appOrderProInfoMapper.selectList(Wrappers.<AppOrderProInfo>lambdaQuery().eq(AppOrderProInfo::getOrderId, orderId));
|
|
|
if (CollUtil.isNotEmpty(orderProInfoList)) {
|
|
|
+ // 按productId分组统计需要恢复的库存数量(排除保险类型的子订单)
|
|
|
+ Map<String, Long> productStockMap = orderProInfoList.stream()
|
|
|
+ .filter(info -> !Objects.equals(info.getType(), CommonConstant.ORDER_PRO_INFO_TYPE_6))
|
|
|
+ .collect(Collectors.groupingBy(AppOrderProInfo::getProductId, Collectors.counting()));
|
|
|
+
|
|
|
+ // 恢复库存
|
|
|
+ for (Map.Entry<String, Long> entry : productStockMap.entrySet()) {
|
|
|
+ String productId = entry.getKey();
|
|
|
+ int restoreCount = entry.getValue().intValue();
|
|
|
+
|
|
|
+ // 恢复数据库库存
|
|
|
+ AppSitePriceRules priceRules = appSitePriceRulesMapper.selectById(productId);
|
|
|
+ if (ObjectUtil.isNotEmpty(priceRules)) {
|
|
|
+ int newTicketNum = (priceRules.getTicketNum() == null ? 0 : priceRules.getTicketNum()) + restoreCount;
|
|
|
+ appSitePriceRulesMapper.update(null, Wrappers.<AppSitePriceRules>lambdaUpdate()
|
|
|
+ .eq(AppSitePriceRules::getId, productId)
|
|
|
+ .set(AppSitePriceRules::getTicketNum, newTicketNum));
|
|
|
+ log.info("取消学校订单恢复库存,productId={},恢复数量={},恢复后库存={}", productId, restoreCount, newTicketNum);
|
|
|
+
|
|
|
+ // 恢复Redis缓存库存
|
|
|
+ String stockKey = "ORDER_TYPE_1_PRODUCT_STOCK_" + productId;
|
|
|
+ Integer cachedStock = (Integer) redisTemplate.opsForValue().get(stockKey);
|
|
|
+ if (cachedStock != null) {
|
|
|
+ redisTemplate.opsForValue().increment(stockKey, restoreCount);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
for (AppOrderProInfo appOrderProInfo : orderProInfoList) {
|
|
|
appOrderProInfo.setOrderStatus(CommonConstant.ORDER_STATUS_4);
|
|
|
appOrderProInfoMapper.updateById(appOrderProInfo);
|