diff --git a/mall-common/src/main/java/com/suisung/mall/common/modules/store/ShopStoreActivityBase.java b/mall-common/src/main/java/com/suisung/mall/common/modules/store/ShopStoreActivityBase.java index bce4bf92..078904ef 100644 --- a/mall-common/src/main/java/com/suisung/mall/common/modules/store/ShopStoreActivityBase.java +++ b/mall-common/src/main/java/com/suisung/mall/common/modules/store/ShopStoreActivityBase.java @@ -1,9 +1,6 @@ package com.suisung.mall.common.modules.store; -import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableField; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.annotation.*; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -82,9 +79,9 @@ public class ShopStoreActivityBase implements Serializable { @TableField(updateStrategy = NOT_EMPTY) private Integer activity_state; - @ApiModelProperty(value = "活动规则(json):不检索{rule_id:{}, rule_id:{}}") - @TableField(updateStrategy = NOT_EMPTY) - private String activity_rule; + @ApiModelProperty(value = "活动规则(json):不检索{rule_id:{}, rule_id:{}},统一解析规则{\"requirement\":{\"buy\":{\"item\":[1,2,3],\"subtotal\":\"通过计算修正满足的条件\"}},\"rule\":[{\"total\":100,\"max_num\":1,\"item\":{\"1\":1,\"1200\":3}},{\"total\":200,\"max_num\":1,\"item\":{\"1\":1,\"1200\":3}}]}") + @TableField(updateStrategy = NOT_EMPTY, fill = FieldFill.INSERT_UPDATE) + private String activity_rule = "{}"; @ApiModelProperty(value = "参与类型(ENUM):1-免费参与;2-积分参与;3-购买参与") @TableField(updateStrategy = NOT_EMPTY) @@ -139,7 +136,6 @@ public class ShopStoreActivityBase implements Serializable { @TableField(updateStrategy = NOT_EMPTY) private String lucky_turn; - @ApiModelProperty(value = "每人限购,0为不限购") private Integer person_limit; diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/store/service/impl/ShopStoreBaseServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/store/service/impl/ShopStoreBaseServiceImpl.java index 67e590e0..0892eb78 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/store/service/impl/ShopStoreBaseServiceImpl.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/store/service/impl/ShopStoreBaseServiceImpl.java @@ -1453,30 +1453,64 @@ public class ShopStoreBaseServiceImpl extends BaseServiceImpl rows) { + // 空值检查 + if (CollUtil.isEmpty(rows)) { + return; + } - if (CollUtil.isNotEmpty(rows)) { - List store_ids = rows.stream().map(s -> Convert.toInt(s.get("store_id"))).distinct().collect(Collectors.toList()); - List store_rows = gets(store_ids); + // 默认值常量 + final String DEFAULT_STORE_NAME = "(无)"; - for (Map row : rows) { - Integer store_id = Convert.toInt(row.get("store_id")); - Optional storeOpl = store_rows.stream().filter(s -> ObjectUtil.equal(store_id, Convert.toInt(s.get("store_id")))).findFirst(); + try { + // 提取所有唯一的 store_id + List storeIds = rows.stream() + .map(row -> Convert.toInt(row.get("store_id"))) + .filter(Objects::nonNull) + .distinct() + .collect(Collectors.toList()); - if (storeOpl.isPresent()) { - Map store = storeOpl.get(); - row.put("store_name", store.get("store_name")); - continue; - } - - row.put("store_name", "(无)"); + // 如果没有有效的 store_id,直接填充默认值 + if (storeIds.isEmpty()) { + rows.forEach(row -> row.put("store_name", DEFAULT_STORE_NAME)); + return; } + + // 批量获取店铺信息(异常处理) + List storeRows; + try { + storeRows = gets(storeIds); + } catch (Exception e) { + log.warn("获取店铺信息失败,使用默认值填充。storeIds: {}", storeIds, e); + storeRows = Collections.emptyList(); // 异常时返回空列表 + } + + // 构建 store_id 到 store_name 的映射 + Map storeNameMap = storeRows.stream() + .collect(Collectors.toMap( + row -> Convert.toInt(row.get("store_id")), + row -> Convert.toStr(row.get("store_name"), DEFAULT_STORE_NAME), + (existing, replacement) -> existing // 避免重复键冲突 + )); + + // 填充每行的店铺名称 + rows.forEach(row -> { + Integer storeId = Convert.toInt(row.get("store_id")); + String storeName = storeNameMap.getOrDefault(storeId, DEFAULT_STORE_NAME); + row.put("store_name", storeName); + }); + + } catch (Exception e) { + // 兜底处理:如果整个流程出现异常,统一填充默认值 + log.error("处理店铺信息时发生未知异常,统一填充默认值。", e); + rows.forEach(row -> row.put("store_name", DEFAULT_STORE_NAME)); } } + @Override public Map getBaseList(QueryWrapper queryWrapper, Integer pageNum, Integer pageSize) { diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/user/service/impl/ShopUserVoucherServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/user/service/impl/ShopUserVoucherServiceImpl.java index 19b0db7f..830fc1ee 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/user/service/impl/ShopUserVoucherServiceImpl.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/user/service/impl/ShopUserVoucherServiceImpl.java @@ -42,6 +42,7 @@ import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; import java.text.SimpleDateFormat; import java.util.*; +import java.util.function.Consumer; import java.util.stream.Collectors; import static com.suisung.mall.common.utils.ContextUtil.getCurrentUser; @@ -76,6 +77,13 @@ public class ShopUserVoucherServiceImpl extends BaseServiceImpl activity_ids, Integer user_id) { Map queryMap = new HashMap<>(); @@ -157,59 +165,70 @@ public class ShopUserVoucherServiceImpl extends BaseServiceImpl= 1 + Integer rows = Math.min(100, Math.max(1, getParameter("rows", 10))); // 限制每页最大记录数为100 + + // 构建查询条件 QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.eq("user_id", user_id); + queryWrapper.eq("user_id", userId); - Integer store_id = getParameter("store_id", Integer.class); - if (CheckUtil.isNotEmpty(store_id)) { - queryWrapper.eq("store_id", store_id); + // 店铺ID筛选 + Integer storeId = getParameter("store_id", Integer.class); + if (CheckUtil.isNotEmpty(storeId)) { + queryWrapper.eq("store_id", storeId); } - // 处理全部券1、线下券2、线上券3 + + // 券类型筛选(全部券1、线下券2、线上券3) String offisonParam = getParameter("offison"); if (StrUtil.isNotBlank(offisonParam)) { int offison = Convert.toInt(offisonParam); - switch (offison) { - case 2: - queryWrapper.ne("writeoff_code", ""); - break; - case 3: - queryWrapper.eq("writeoff_code", ""); - break; - } + + // 使用 Map 映射券类型对应的筛选条件 + Map>> filterMap = new HashMap<>(); + filterMap.put(2, wrapper -> wrapper.ne("writeoff_code", "")); // 线下券 + filterMap.put(3, wrapper -> wrapper.eq("writeoff_code", "")); // 线上券 + + // 根据券类型应用筛选条件 + filterMap.getOrDefault(offison, wrapper -> { + }).accept(queryWrapper); } - Integer voucher_state_id = getParameter("voucher_state_id", Integer.class); - if (CheckUtil.isNotEmpty(voucher_state_id)) { - queryWrapper.eq("voucher_state_id", voucher_state_id); + // 券状态筛选 + Integer voucherStateId = getParameter("voucher_state_id", Integer.class); + if (CheckUtil.isNotEmpty(voucherStateId)) { + queryWrapper.eq("voucher_state_id", voucherStateId); } + + // 排序 queryWrapper.orderByDesc("user_voucher_id"); + // 执行分页查询 Map data = getLists(queryWrapper, page, rows); List items = (List) data.get("items"); - shopStoreBaseService.fixStoreData(items); - for (Map item : items) { - item.put("id", item.get("user_voucher_id")); + // 数据后处理 + if (CollUtil.isNotEmpty(items)) { + // 嵌入店铺信息 + shopStoreBaseService.fixStoreData(items); + + // 添加统一ID字段 + items.forEach(item -> item.put("id", item.get("user_voucher_id"))); } return data; } + @Override public Map getVoucher(Integer activity_id, Integer user_voucher_id) { @@ -268,7 +287,6 @@ public class ShopUserVoucherServiceImpl extends BaseServiceImpl