aaa
doum
2026-06-04 08e9a67dd679f311e79a27b04cd0c53a30b4bccf
server/service/src/main/java/com/doumee/service/business/impl/CategoryServiceImpl.java
@@ -52,6 +52,9 @@
    @Autowired
    private CateParamSelectMapper cateParamSelectMapper;
    @Autowired
    private com.doumee.dao.business.GoodsMapper goodsMapper;
    @Override
    public Integer create(Category category) {
        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
@@ -136,6 +139,7 @@
        category.setCreator(user.getId());
        category.setIsdeleted(Constants.ZERO);
        category.setCompanyId(user.getCompanyId());
        category.setParentId(null);
        //处理拼音问题
        category.setPinyin(PinYinUtil.getFullSpell(category.getName()));
        category.setShortPinyin(PinYinUtil.getFirstSpell(category.getName()));
@@ -227,8 +231,8 @@
            }
        }
        this.dealCateAttr(category.getAttrFirstList(),Constants.ZERO,category.getId(),user);
        this.dealCateAttr(category.getAttrSecondList(),Constants.ONE,category.getId(),user);
//        this.dealCateAttr(category.getAttrFirstList(),Constants.ZERO,category.getId(),user);
//        this.dealCateAttr(category.getAttrSecondList(),Constants.ONE,category.getId(),user);
//        cateAttrMapper.delete(new QueryWrapper<CateAttr>().eq("CATEGORY_ID",category.getId()));
//        List<CateAttr>  attrFirst = category.getAttrFirstList();
//        if(!Objects.isNull(attrFirst)&&attrFirst.size()> Constants.ZERO){
@@ -279,7 +283,8 @@
    @Override
    public void companyUpdateById(Category category) {
        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
        if(categoryMapper.selectCount(new QueryWrapper<Category>().eq("ISDELETED",Constants.ZERO).ne("id",category.getId()).eq("name",category.getName()))>0){
        if(categoryMapper.selectCount(new QueryWrapper<Category>().eq("ISDELETED",Constants.ZERO).eq("COMPANY_ID",user.getCompanyId())
                .ne("id",category.getId()).eq("name",category.getName()))>0){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"【"+category.getName()+"】已存在");
        };
        category.setStatus(Constants.ZERO);
@@ -291,20 +296,7 @@
        category.setShortPinyin(PinYinUtil.getFirstSpell(category.getName()));
        categoryMapper.updateById(category);
        //处理属性配置
        cateParamMapper.delete(new QueryWrapper<CateParam>().eq("CATEGORY_ID",category.getId()));
        List<CateParam> paramList = category.getParamList();
        if(!Objects.isNull(paramList)&&paramList.size()> Constants.ZERO){
            for (int i = 0; i < paramList.size(); i++) {
                CateParam cateParam = paramList.get(i);
                cateParam.setCreator(user.getId());
                cateParam.setCreateDate(new Date());
                cateParam.setIsdeleted(Constants.ZERO);
                cateParam.setSortnum(i+Constants.ONE);
                cateParam.setStatus(Constants.ZERO);
                cateParam.setCategoryId(category.getId());
                cateParamMapper.insert(cateParam);
            }
        }
        this.dealCateParam(category.getParamList(),category.getId(),user);
        cateBudgetMapper.delete(new QueryWrapper<CateBudget>().eq("CATEGORY_ID",category.getId()));
        List<CateBudget>  budgetList = category.getBudgetList();
        if(!Objects.isNull(budgetList)&&budgetList.size()> Constants.ZERO){
@@ -322,60 +314,54 @@
    }
    public void dealCateAttr(List<CateAttr> cateAttrList,Integer type,Integer categoryId,LoginUserInfo user){
        List<CateAttr> oldCateAttrList = cateAttrMapper.selectList(new QueryWrapper<CateAttr>().eq("ISDELETED",Constants.ZERO).eq("CATEGORY_ID",categoryId).eq("TYPE",type));
        List<CateAttr> addCateAttr = new ArrayList<>();
        List<CateAttr> updCateAttr = new ArrayList<>();
        List<CateAttr> delCateAttr = new ArrayList<>();
        for (CateAttr oldCateAttr:oldCateAttrList) {
    public void dealCateParam(List<CateParam> cateParamList,Integer categoryId,LoginUserInfo userInfo ){
        List<CateParam> oldCateParamList = cateParamMapper.selectList(new QueryWrapper<CateParam>()
                .eq("ISDELETED",Constants.ZERO).eq("CATEGORY_ID",categoryId));
        List<CateParam> updCateParam = new ArrayList<>();
        List<CateParam> delCateParam = new ArrayList<>();
        for (CateParam oldCateParam:oldCateParamList) {
            Boolean flag = false;
            for (CateAttr cateAttr:cateAttrList) {
                if(oldCateAttr.getName().equals(cateAttr.getName())){
                    updCateAttr.add(oldCateAttr);
            for (CateParam cateParam:cateParamList) {
                if(oldCateParam.getId().equals(cateParam.getId())){
                    updCateParam.add(cateParam);
                    flag = true;
                    break;
                }
            }
            if(!flag){
                delCateAttr.add(oldCateAttr);
                delCateParam.add(oldCateParam);
            }
        }
        CateAttr maxCateAttr = cateAttrMapper.selectOne(new QueryWrapper<CateAttr>().eq("ISDELETED",Constants.ZERO).eq("CATEGORY_ID",categoryId).eq("TYPE",type).orderByDesc(" SORTNUM ").last(" limit 1  "));
        CateParam maxCateParam = cateParamMapper.selectOne(new QueryWrapper<CateParam>().eq("ISDELETED",Constants.ZERO)
                .eq("CATEGORY_ID",categoryId).orderByDesc(" SORTNUM ").last(" limit 1  "));
        Integer nextSortNum = 0;
        if(!Objects.isNull(maxCateAttr)){
            nextSortNum = maxCateAttr.getSortnum();
        if(!Objects.isNull(maxCateParam)){
            nextSortNum = maxCateParam.getSortnum();
        }
        //处理新增数据
        for (CateAttr cateAttr:cateAttrList) {
            Boolean flag = false;
            for (CateAttr oldCateAttr:oldCateAttrList) {
                if(cateAttr.getName().equals(oldCateAttr.getName())){
                    flag = true;
                    break;
                }
            }
            if(!flag){
                nextSortNum = nextSortNum + 1;
                cateAttr.setCreator(user.getId());
                cateAttr.setCreateDate(new Date());
                cateAttr.setIsdeleted(Constants.ZERO);
                cateAttr.setSortnum(nextSortNum);
                cateAttr.setStatus(Constants.ZERO);
                cateAttr.setCategoryId(categoryId);
                cateAttr.setType(type);
                addCateAttr.add(cateAttr);
        for (CateParam cateParam:cateParamList) {
            if(Objects.isNull(cateParam.getId())){
                nextSortNum ++ ;
                cateParam.setCreator(userInfo.getId());
                cateParam.setCreateDate(new Date());
                cateParam.setIsdeleted(Constants.ZERO);
                cateParam.setSortnum(nextSortNum);
                cateParam.setStatus(Constants.ZERO);
                cateParam.setCategoryId(categoryId);
                cateParamMapper.insert(cateParam);
            }
        }
        addCateAttr.forEach(i->{
            cateAttrMapper.insert(i);
        delCateParam.forEach(i->{
            cateParamMapper.deleteById(i.getId());
        });
        delCateAttr.forEach(i->{
            i.setIsdeleted(Constants.ONE);
        updCateParam.forEach(i->{
            i.setEditDate(new Date());
            i.setEditor(user.getId());
            cateAttrMapper.updateById(i);
            i.setEditor(userInfo.getId());
            cateParamMapper.updateById(i);
        });
    }
    @Override
    public void updateDisableById(Category category) {
@@ -421,14 +407,14 @@
                .eq("COMPANY_ID",user.getCompanyId())
                .orderByAsc(" SORTNUM ");
        List<Category> list = categoryMapper.selectList(wrapper);
        String prefixUrl = systemDictDataBiz.queryByCode(Constants.OSS, Constants.FILE_DIR).getCode()
                + systemDictDataBiz.queryByCode(Constants.OSS, Constants.CATEGORY_IMG).getCode();
        for (Category c:list) {
            c.setPrefixUrl(prefixUrl);
            c.setAttrFirstList(cateAttrMapper.selectList(new QueryWrapper<CateAttr>().eq("TYPE",Constants.ZERO).eq("ISDELETED",Constants.ZERO).eq("CATEGORY_ID",c.getId()).orderByAsc(" SORTNUM ")));
            c.setAttrSecondList(cateAttrMapper.selectList(new QueryWrapper<CateAttr>().eq("TYPE",Constants.ONE).eq("ISDELETED",Constants.ZERO).eq("CATEGORY_ID",c.getId()).orderByAsc(" SORTNUM ")));
            c.setBudgetList(cateBudgetMapper.selectList(new QueryWrapper<CateBudget>().eq("CATEGORY_ID",c.getId()).orderByAsc(" SORTNUM ")));
        }
//        String prefixUrl = systemDictDataBiz.queryByCode(Constants.OSS, Constants.RESOURCE_PATH).getCode()
//                + systemDictDataBiz.queryByCode(Constants.OSS, Constants.CATEGORY_IMG).getCode();
//        for (Category c:list) {
//            c.setPrefixUrl(prefixUrl);
//            c.setAttrFirstList(cateAttrMapper.selectList(new QueryWrapper<CateAttr>().eq("TYPE",Constants.ZERO).eq("ISDELETED",Constants.ZERO).eq("CATEGORY_ID",c.getId()).orderByAsc(" SORTNUM ")));
//            c.setAttrSecondList(cateAttrMapper.selectList(new QueryWrapper<CateAttr>().eq("TYPE",Constants.ONE).eq("ISDELETED",Constants.ZERO).eq("CATEGORY_ID",c.getId()).orderByAsc(" SORTNUM ")));
//            c.setBudgetList(cateBudgetMapper.selectList(new QueryWrapper<CateBudget>().eq("CATEGORY_ID",c.getId()).orderByAsc(" SORTNUM ")));
//        }
        return list;
    }
@@ -444,16 +430,26 @@
                .eq("STATUS",Constants.ZERO)
                .eq("ISDELETED",Constants.ZERO)
                .eq("COMPANY_ID",user.getCompanyId())
                .isNull("PARENT_ID")
                .orderByAsc(" SORTNUM ");
        List<Category> list = categoryMapper.selectList(wrapper);
        String prefixUrl = systemDictDataBiz.queryByCode(Constants.OSS, Constants.FILE_DIR).getCode()
        String prefixUrl = systemDictDataBiz.queryByCode(Constants.OSS, Constants.RESOURCE_PATH).getCode()
                + systemDictDataBiz.queryByCode(Constants.OSS, Constants.CATEGORY_IMG).getCode();
        for (Category c:list) {
            c.setPrefixUrl(prefixUrl);
//            c.setAttrFirstList(cateAttrMapper.selectList(new QueryWrapper<CateAttr>().eq("TYPE",Constants.ZERO).eq("ISDELETED",Constants.ZERO).eq("CATEGORY_ID",c.getId()).orderByAsc(" SORTNUM ")));
//            c.setAttrSecondList(cateAttrMapper.selectList(new QueryWrapper<CateAttr>().eq("TYPE",Constants.ONE).eq("ISDELETED",Constants.ZERO).eq("CATEGORY_ID",c.getId()).orderByAsc(" SORTNUM ")));
            c.setBudgetList(cateBudgetMapper.selectList(new QueryWrapper<CateBudget>().eq("CATEGORY_ID",c.getId()).orderByAsc(" SORTNUM ")));
            c.setBudgetList(cateBudgetMapper.selectList(new QueryWrapper<CateBudget>().eq("CATEGORY_ID",c.getId())
                    .orderByAsc(" SORTNUM ")));
            this.getParamSelect(c);
            List<Category> children = categoryMapper.selectList(new QueryWrapper<Category>()
                    .eq("PARENT_ID", c.getId())
                    .eq("STATUS", Constants.ZERO)
                    .eq("ISDELETED", Constants.ZERO)
                    .orderByAsc("SORTNUM")
                    .last(" limit 5 "));
            for (Category child : children) {
                child.setPrefixUrl(prefixUrl);
            }
            c.setChildren(children);
        }
        return list;
    }
@@ -464,6 +460,7 @@
                .eq("CATEGORY_ID",category.getId())
                .eq("ISSELECT",Constants.ONE)
                .eq("ISDELETED",Constants.ZERO)
                .eq("ISSHOW",Constants.ONE)
                .orderByAsc(" SORTNUM ")
                .last(" limit 2 ")
        );
@@ -489,20 +486,26 @@
    @Override
    public List<Category> findListForGoods(Integer goodsId) {
        LoginUserInfo loginUserInfo = (LoginUserInfo)SecurityUtils.getSubject().getPrincipal();
        QueryWrapper<Category> wrapper = new QueryWrapper<Category>()
                .eq("STATUS",Constants.ZERO)
                .eq("ISDELETED",Constants.ZERO)
                .eq("COMPANY_ID",loginUserInfo.getCompanyId())
                .orderByAsc(" SORTNUM ");
        List<Category> list = categoryMapper.selectList(wrapper);
        String prefixUrl = systemDictDataBiz.queryByCode(Constants.OSS, Constants.FILE_DIR).getCode()
        String prefixUrl = systemDictDataBiz.queryByCode(Constants.OSS, Constants.RESOURCE_PATH).getCode()
                + systemDictDataBiz.queryByCode(Constants.OSS, Constants.CATEGORY_IMG).getCode();
        for (Category c:list) {
            c.setPrefixUrl(prefixUrl);
            c.setAttrFirstList(cateAttrMapper.selectList(new QueryWrapper<CateAttr>().eq("TYPE",Constants.ZERO).eq("ISDELETED",Constants.ZERO).eq("CATEGORY_ID",c.getId()).orderByAsc(" SORTNUM ")));
            c.setAttrSecondList(cateAttrMapper.selectList(new QueryWrapper<CateAttr>().eq("TYPE",Constants.ONE).eq("ISDELETED",Constants.ZERO).eq("CATEGORY_ID",c.getId()).orderByAsc(" SORTNUM ")));
            c.setParamList(cateParamMapper.selectList(new QueryWrapper<CateParam>()
                            .select(" * , ( select gp.VAL from goods_param gp where gp.GOODS_ID = "+goodsId+" and gp.PRAMA_ID = cate_param.id limit 1 )  as val ")
                    .eq("CATEGORY_ID",c.getId()).orderByAsc(" SORTNUM ")));
                        .select(" * , ( select gp.VAL from goods_param gp where gp.GOODS_ID = "+goodsId+" and gp.PRAMA_ID = cate_param.id limit 1 )  as val ")
                    .eq("CATEGORY_ID",c.getId())
                    .eq("ISSHOW",Constants.ONE)
                    .eq("STATUS",Constants.ZERO)
                    .eq("ISDELETED",Constants.ZERO)
                    .orderByAsc(" SORTNUM ")));
        }
        return list;
    }
@@ -520,6 +523,9 @@
        }
        if (pageWrap.getModel().getStatus() != null) {
            queryWrapper.lambda().eq(Category::getStatus, pageWrap.getModel().getStatus());
        }
        if (pageWrap.getModel().getType() != null) {
            queryWrapper.lambda().eq(Category::getType, pageWrap.getModel().getType());
        }
        if (pageWrap.getModel().getCompanyId() != null) {
            queryWrapper.lambda().eq(Category::getCompanyId, pageWrap.getModel().getCompanyId());
@@ -552,7 +558,7 @@
                .eq("ISDELETED",Constants.ZERO)
                .orderByAsc(" SORTNUM ");
        List<Category> list = categoryMapper.selectList(wrapper);
        String prefixUrl = systemDictDataBiz.queryByCode(Constants.OSS, Constants.FILE_DIR).getCode()
        String prefixUrl = systemDictDataBiz.queryByCode(Constants.OSS, Constants.RESOURCE_PATH).getCode()
                + systemDictDataBiz.queryByCode(Constants.OSS, Constants.CATEGORY_IMG).getCode();
        for (Category c:list) {
            c.setPrefixUrl(prefixUrl);
@@ -564,4 +570,114 @@
    @Override
    public List<Category> findTree(Category category) {
        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
        QueryWrapper<Category> wrapper = new QueryWrapper<>();
        wrapper.eq("STATUS", Constants.ZERO)
                .eq("ISDELETED", Constants.ZERO)
                .eq("COMPANY_ID", user.getCompanyId())
                .isNull("PARENT_ID")
                .orderByAsc("SORTNUM");
        if (category != null && org.apache.commons.lang3.StringUtils.isNotBlank(category.getName())) {
            wrapper.like("NAME", category.getName());
        }
        if (category != null && category.getType() != null) {
            wrapper.eq("TYPE", category.getType());
        }
        List<Category> parents = categoryMapper.selectList(wrapper);
        String prefixUrl = systemDictDataBiz.queryByCode(Constants.OSS, Constants.RESOURCE_PATH).getCode()
                + systemDictDataBiz.queryByCode(Constants.OSS, Constants.CATEGORY_IMG).getCode();
        for (Category parent : parents) {
            parent.setPrefixUrl(prefixUrl);
            parent.setBudgetList(cateBudgetMapper.selectList(new QueryWrapper<CateBudget>().eq("CATEGORY_ID", parent.getId()).orderByAsc(" SORTNUM ")));
            List<Category> children = categoryMapper.selectList(new QueryWrapper<Category>()
                    .eq("PARENT_ID", parent.getId())
                    .eq("ISDELETED", Constants.ZERO)
                    .orderByAsc("SORTNUM"));
            for (Category child : children) {
                child.setPrefixUrl(prefixUrl);
            }
            parent.setChildren(children);
        }
        return parents;
    }
    @Override
    public List<Category> findChildren(Integer parentId) {
        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
        Category parent = categoryMapper.selectById(parentId);
        if (parent == null || !user.getCompanyId().equals(parent.getCompanyId())) {
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "父级品类不存在");
        }
        String prefixUrl = systemDictDataBiz.queryByCode(Constants.OSS, Constants.RESOURCE_PATH).getCode()
                + systemDictDataBiz.queryByCode(Constants.OSS, Constants.CATEGORY_IMG).getCode();
        List<Category> children = categoryMapper.selectList(new QueryWrapper<Category>()
                .eq("PARENT_ID", parentId)
                .eq("ISDELETED", Constants.ZERO)
                .eq("STATUS", Constants.ZERO)
                .orderByAsc("SORTNUM"));
        children.forEach(c -> c.setPrefixUrl(prefixUrl));
        return children;
    }
    @Override
    public Integer createSubCategory(Category category) {
        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
        if (category.getParentId() == null) {
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "父级品类不能为空");
        }
        Category parent = categoryMapper.selectById(category.getParentId());
        if (parent == null || parent.getParentId() != null || !user.getCompanyId().equals(parent.getCompanyId())) {
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "只能在有效的一级品类下创建子类别");
        }
        if (categoryMapper.selectCount(new QueryWrapper<Category>().eq("ISDELETED", Constants.ZERO)
                .eq("COMPANY_ID", user.getCompanyId()).eq("name", category.getName())) > 0) {
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "【" + category.getName() + "】已存在");
        }
        category.setStatus(Constants.ZERO);
        category.setCreateDate(new Date());
        category.setCreator(user.getId());
        category.setIsdeleted(Constants.ZERO);
        category.setCompanyId(user.getCompanyId());
        category.setType(parent.getType());
        category.setPinyin(PinYinUtil.getFullSpell(category.getName()));
        category.setShortPinyin(PinYinUtil.getFirstSpell(category.getName()));
        categoryMapper.insert(category);
        return category.getId();
    }
    @Override
    public void updateSubCategory(Category category) {
        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
        Category db = categoryMapper.selectById(category.getId());
        if (db == null || db.getParentId() == null) {
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "子类别不存在");
        }
        if (categoryMapper.selectCount(new QueryWrapper<Category>().eq("ISDELETED", Constants.ZERO)
                .eq("COMPANY_ID", user.getCompanyId()).ne("id", category.getId()).eq("name", category.getName())) > 0) {
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "【" + category.getName() + "】已存在");
        }
        category.setEditDate(new Date());
        category.setEditor(user.getId());
        category.setPinyin(PinYinUtil.getFullSpell(category.getName()));
        category.setShortPinyin(PinYinUtil.getFirstSpell(category.getName()));
        categoryMapper.updateById(category);
    }
    @Override
    public void deleteSubCategory(Integer id) {
        Category category = categoryMapper.selectById(id);
        if (category == null || category.getParentId() == null) {
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "子类别不存在");
        }
        long goodsCount = goodsMapper.selectCount(new QueryWrapper<Goods>()
                .eq("ISDELETED", Constants.ZERO)
                .and(w -> w.eq("SUB_CATEGORY_ID", id).or().eq("CATEGORY_ID", id)));
        if (goodsCount > 0) {
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "该子类别下存在关联商品,无法删除");
        }
        category.setIsdeleted(Constants.ONE);
        categoryMapper.updateById(category);
    }
}