master:系统功能调优;

pull/1121/head
liujiang 2025-08-03 12:22:32 +08:00
parent 4118903d16
commit a026a39366
6 changed files with 52 additions and 53 deletions

View File

@ -31,14 +31,6 @@ public class StoreHomepageController extends XktBaseController {
final IStoreHomepageService storeHomeService;
@PreAuthorize("@ss.hasAnyRoles('admin,general_admin,store')||@ss.hasSupplierSubRole()")
@ApiOperation(value = "新增档口装修数据", httpMethod = "POST", response = R.class)
@Log(title = "新增档口装修数据", businessType = BusinessType.INSERT)
@PostMapping("/decoration")
public R<Integer> addDecoration(@Validated @RequestBody StoreHomeDecorationVO decorationVO) {
return R.ok(storeHomeService.insert(BeanUtil.toBean(decorationVO, StoreHomeDecorationDTO.class)));
}
@PreAuthorize("@ss.hasAnyRoles('admin,general_admin,store')||@ss.hasSupplierSubRole()")
@ApiOperation(value = "查询档口装修数据", httpMethod = "GET", response = R.class)
@GetMapping(value = "/decoration/{storeId}")

View File

@ -40,11 +40,54 @@ public class AdValidator {
return matchedWords;
}
// 使用 HashSet 存储违禁词(全局唯一,避免重复初始化
// 全局违禁词 HashSet自动去重O(1) 查询
private static final Set<String> PROHIBITED_WORDS_SET = new HashSet<>(Arrays.asList(
"最", "最佳", "最优", "最好", "最大", "最高", "最便宜", "最时尚", "最舒适", "最流行",
"最先进", "最顶级", "首选", "唯一", "独家", "全网第一", "行业领先", "销量冠军",
"100%", "绝对", "无敌", "完美", "终极", "极致", "巅峰", "史无前例", "遥遥领先",
// === 极限用词 ===
"国家级", "世界级", "最高级", "第一", "唯一", "首个", "首选", "顶级", "国家级产品", "独家", "首家", "最新", "最先进",
"第一品牌", "金牌", "名牌", "优秀", "顶级", "独家", "全网销量第一", "全球首发", "全国首家", "全网首发", "世界领先",
"顶级工艺", "王牌", "销量冠军", "第一", "NO1", "Top1", "极致", "永久", "王牌", "鞋王", "掌门人", "领袖品牌",
"独一无二", "绝无仅有", "史无前例", "万能", "最高", "最低", "最", "最具", "最便宜", "最新", "最先进", "最大程度",
"最新技术", "最舒适", "最柔软", "最时尚", "最受欢迎", "最先", "绝对", "大牌", "精确", "超赚", "领导品牌", "领先上市",
"巨星", "著名", "奢侈", "世界级", "高档", "正品", "100%舒适", "零磨脚", "绝对合脚", "彻底柔软", "永不变形",
"万能搭配", "立显腿长", "瞬间增高", "一穿就美", "市场占有率第一", "行业第一品牌", "全网独家", "全球销量冠军",
"全网唯一正品", "行业领导者", "史上最强女鞋", "巅峰之作", "终极舒适", "巅峰品质", "至尊享受", "至臻奢华",
"绝版限量", "无可替代", "空前绝后", "史上最美", "一夜变美", "三天合脚", "永久耐穿", "一穿就瘦", "立显气质",
"秒杀一切竞品", "超越所有品牌", "无可匹敌", "史上最软", "舒适碾压", "终极保障", "全球最佳女鞋", "行业标杆",
"无懈可击", "完美无缺", "史上最优惠", "绝对领先", "无可争议的第一", "全球公认最佳", "史上最划算女鞋",
// === 时限用词 ===
"随时结束", "仅此一次", "随时涨价", "马上降价", "最后一波", "再不抢就没了", "不会更便宜了", "错过就没机会了",
"限时特惠", "最后3小时", "倒计时抢购", "即将售罄", "库存告急", "最后XX双", "员工内购价", "老板跑路价",
"赔本甩卖", "史上最低价", "今日特价", "明天涨价", "错过今天后悔一年", "紧急降价", "最后机会", "逾期不候",
"错过再无", "限时秒杀", "最后清仓", "工厂直降", "年度最低", "清货特卖", "亏本处理", "最后疯抢", "限时折扣",
"最后优惠", "限时特价", "最后一天", "最后机会", "限量发售", "售完即止", "抢完为止", "手慢无", "即将涨价",
"最后降价", "错过等一年", "限时福利", "最后促销", "限时优惠", "最后特价", "限时抢购", "最后大促", "限时活动",
"最后让利", "限时放价", "最后甩卖", "限时清仓", "最后特惠", "限时特卖", "最后折扣", "限时秒杀价", "最后疯抢价",
"限时钜惠", "最后清货", "限时让利", "最后特供", "限时专享", "最后放送", "限时特供", "最后特卖", "限时专供",
"最后放价", "限时专享价", "最后放量",
// === 权威用词 ===
"国家领导人推荐", "明星同款", "网红爆款", "央视推荐", "时尚教主力荐", "国际设计师专属", "米兰时装周指定",
"巴黎秀场专用", "超模必备", "皇室御用", "贵族专属", "奥斯卡颁奖同款", "格莱美红毯款", "维密天使同款",
"一线女星私服", "顶流带货", "时尚博主强推", "穿搭达人必备", "国际大牌代工", "奢侈品牌同源", "欧洲皇室御用品牌",
"好莱坞明星首选", "国际超模私藏", "时尚杂志封面款", "四大时装周发布款", "国际设计师联名", "全球买手精选",
"奢侈品牌平替", "国际一线同款", "奢侈品牌原单", "国际大牌代工厂直供", "奢侈品牌供应商", "国际知名品牌同款",
"奢侈品牌授权", "国际认证品质", "欧盟标准认证", "国际质检认证", "全球顶级皮料", "意大利进口真皮", "法国小牛皮",
"西班牙进口皮革", "德国工艺制造", "英国皇室认证", "日本匠心工艺", "韩国潮流设计", "美国明星同款", "澳洲进口羊皮",
"国际权威检测", "全球顶级舒适认证", "国际足踝健康认证", "欧洲舒适标准认证", "国际红点设计奖", "IF设计大奖",
"国际时尚大奖", "全球鞋履设计金奖", "国际女鞋排行榜TOP1", "全球热销冠军", "国际电商平台销量第一",
"海外代购爆款", "全球断货王", "国际网红带货王",
// === 免检用词 ===
"质量免检", "无需国家质量检测", "无需质检", "免检认证", "100%合格", "绝对无瑕疵", "出厂即完美", "零次品保证",
"无需验货", "直接放心穿", "质检全优", "超越国家标准", "超行业标准", "免检工艺", "免检材质", "免检皮料",
"免检舒适度", "免检耐磨度", "免检透气性", "免检防滑性", "免检柔软度", "免检弹性", "免检支撑性", "免检贴合度",
"免检缓震性", "免检耐折性", "免检抗变形", "免检环保性", "免检无异味", "免检无甲醛", "免检无重金属",
"免检无致癌物", "免检亲肤性", "免检防臭性", "免检抗菌性", "免检防霉性", "免检防水性", "免检色牢度",
"免检不掉色", "免检不脱胶", "免检不开线", "免检不断底", "免检不磨脚", "免检不变形", "免检不褪色",
"免检不起球", "免检不勾丝", "免检不脱皮", "免检不裂面", "免检不爆漆", "免检五金件", "免检鞋跟", "免检鞋底",
"免检内里", "免检鞋垫", "免检鞋带", "免检装饰件", "免检缝线", "免检胶水", "免检定型", "免检包装",
"微信", "QQ", "加V", "私聊", "联系客服", "电话", "下单", "购买",
"小红书", "抖音", "微博", "官网", "网址", "二维码"
));

View File

@ -12,14 +12,6 @@ import java.util.List;
*/
public interface IStoreHomepageService {
/**
*
*
* @param homepageDTO
* @return Integer
*/
Integer insert(StoreHomeDecorationDTO homepageDTO);
/**
*
*

View File

@ -53,36 +53,6 @@ public class StoreHomepageServiceImpl implements IStoreHomepageService {
final StoreProductCategoryAttributeMapper prodCateAttrMapper;
final StoreCertificateMapper storeCertMapper;
/**
*
*
* @param homepageDTO
* @return Integer
*/
@Override
@Transactional
public Integer insert(StoreHomeDecorationDTO homepageDTO) {
// 用户是否为档口管理者或子账户
if (!SecurityUtils.isAdmin() && !SecurityUtils.isStoreManagerOrSub(homepageDTO.getStoreId())) {
throw new ServiceException("当前用户非档口管理者或子账号,无权限操作!", HttpStatus.ERROR);
}
List<StoreHomepage> homepageList = this.insertToHomepage(homepageDTO);
if (CollectionUtils.isEmpty(homepageList)) {
return 0;
}
// 当前档口首页各部分总的文件大小
BigDecimal totalSize = homepageDTO.getBigBannerList().stream().map(x -> ObjectUtils.defaultIfNull(x.getFileSize(), BigDecimal.ZERO)).reduce(BigDecimal.ZERO, BigDecimal::add);
Store store = Optional.ofNullable(this.storeMapper.selectOne(new LambdaQueryWrapper<Store>()
.eq(Store::getId, homepageDTO.getStoreId()).eq(Store::getDelFlag, Constants.UNDELETED)))
.orElseThrow(() -> new ServiceException("档口不存在!", HttpStatus.ERROR));
store.setTemplateNum(homepageDTO.getTemplateNum());
// 更新档口首页使用的总的文件容量
store.setStorageUsage(ObjectUtils.defaultIfNull(store.getStorageUsage(), BigDecimal.ZERO).add(totalSize));
this.storeMapper.updateById(store);
return homepageList.size();
}
/**
*
*

View File

@ -227,8 +227,7 @@ public class StoreProductColorSizeServiceImpl implements IStoreProductColorSizeS
List<StorePrintSnDTO.SPSizeVO> sizeQuantityList = colorSizeVO.getSizeQuantityList();
// storeProductColorId 下 所有的条码
List<StorePrintSnResDTO.SPSizeSnDTO> sizeSnList = new ArrayList<>();
for (int j = 0; j < sizeQuantityList.size(); j++) {
final StorePrintSnDTO.SPSizeVO quantityVO = sizeQuantityList.get(j);
for (final StorePrintSnDTO.SPSizeVO quantityVO : sizeQuantityList) {
// 获取系统条码对应信息
final String key = colorSizeVO.getStoreProdId() + ":" + colorSizeVO.getStoreColorId() + ":" + quantityVO.getSize();
StoreProductColorSize colorSize = colorSizeMap.get(key);
@ -246,7 +245,7 @@ public class StoreProductColorSizeServiceImpl implements IStoreProductColorSizeS
snList.add(colorSize.getSnPrefix() + String.format("%08d", nextSn));
}
// 更新下一个待打印条码开始值
updateList.add( colorSize.setNextSn(nextSn));
updateList.add(colorSize.setNextSn(nextSn));
sizeSnList.add(new StorePrintSnResDTO.SPSizeSnDTO().setSize(quantityVO.getSize()).setSnList(snList));
}
printSnList.add(new StorePrintSnResDTO().setStoreProdColorId(colorSizeVO.getStoreProdColorId()).setSizeSnList(sizeSnList));

View File

@ -66,6 +66,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
#{storeProdId}
</foreach>
</if>
ORDER BY
spf.store_prod_id DESC,
spf.order_num
</select>