aaa
doum
2026-06-03 7d83e5cd4c804539b66eb090e99b0569a128e365
server/service/src/main/java/com/doumee/service/business/impl/GoodsServiceImpl.java
@@ -1,5 +1,6 @@
package com.doumee.service.business.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -47,6 +48,7 @@
import java.net.URLEncoder;
import java.nio.charset.Charset;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
/**
@@ -739,19 +741,31 @@
    @Override
    public Integer importBatch(MultipartFile file){
        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
        ExcelImporter ie = null;
        List<GoodsImport> dataList =null;
        try {
            ie = new ExcelImporter(file,0,0);
            dataList = ie.getDataList(GoodsImport.class,null);
        }  catch (Exception e) {
            e.printStackTrace();
        Boolean  isGrouping = (Boolean)redisTemplate.opsForValue().get(user.getCompanyId()+Constants.COMPANY_IMPORT_GOODS);
        if(isGrouping!=null && isGrouping ){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"当前已存在产品导入操作,此次操作无效,请稍后重试!");
        }
        redisTemplate.opsForValue().set(user.getCompanyId()+Constants.COMPANY_IMPORT_GOODS,true,30, TimeUnit.MINUTES);
        int num =1,index =1;
        try {
            ExcelImporter ie =  new ExcelImporter(file,0,0);;
            List<GoodsImport> dataList =ie.getDataList(GoodsImport.class,null);
        if(dataList == null || dataList.size() ==0){
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,录入数据为空!");
        }
        int num =1;
            String proDir =systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.PROJECTS).getCode();
            String path = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.GOODS_IMG_DIR).getCode() + proDir + File.separator + user.getCompanyId();
            //品类数据
            List<Brand> brandList = brandMapper.selectList(new LambdaQueryWrapper<Brand>() .eq(Brand::getIsdeleted,Constants.ZERO)
                    .and(wapper-> wapper.eq(Brand::getCompanyId ,user.getCompanyId()).or().eq(Brand::getType,Constants.ONE)));
            //企业产品数据
            List<Goods> goodsList = goodsMapper.selectList(new LambdaQueryWrapper<Goods>() .eq(Goods::getIsdeleted,Constants.ZERO)
                    .eq(Goods::getCompanyId,user.getCompanyId()));
            //品类数据
            List<Category> categoryList = categoryMapper.selectList(new LambdaQueryWrapper<Category>() .eq(Category::getIsdeleted,Constants.ZERO)
                            .eq(Category::getCompanyId,user.getCompanyId()));
            //查询全部产品参数配置
            List<CateParam> allParamsList = cateParamMapper.selectList(new LambdaQueryWrapper<CateParam>().eq(CateParam::getIsdeleted,Constants.ZERO));
        for(GoodsImport m: dataList){
            if(StringUtils.isBlank(m.getName())
                    &&StringUtils.isBlank(m.getCategory())
@@ -759,6 +773,8 @@
                    &&StringUtils.isBlank(m.getPrice())
                    &&StringUtils.isBlank(m.getId())
                    &&StringUtils.isBlank(m.getBrand())){
                   // 全部空行,跳过处理;
                    num++;
                continue;
            }
            if(StringUtils.isBlank(m.getName())
@@ -778,27 +794,16 @@
            if(g != null){
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,第【"+(num)+"】行商品图片文件夹重复,请检查输入!");
            }
            Category cate = new Category();
            cate.setIsdeleted(Constants.ZERO);
            cate.setName(m.getCategory());
            cate.setCompanyId(user.getCompanyId());
            //品类数据
            cate = categoryMapper.selectOne(new QueryWrapper<>(cate).last(" limit 1"));
                Category cate = getCategroyByNameFromList(m.getCategory(),categoryList);
            if(cate == null){
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,第【"+(num)+"】行商品类别无效,请检查输入!");
            }
            Brand brand = new Brand();
            brand.setIsdeleted(Constants.ZERO);
            brand.setName(m.getBrand());
            //品类数据
            QueryWrapper<Brand> qwrapper = new QueryWrapper<>(brand);
            qwrapper.lambda().and(wapper-> wapper.eq(Brand::getCompanyId ,user.getCompanyId()).or().eq(Brand::getType,Constants.ONE));
            brand = brandMapper.selectOne(qwrapper.last(" limit 1"));
                Brand brand = getImportBrandByNameFromList(m.getBrand(),brandList);
            if(brand == null){
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,第【"+(num)+"】行商品品牌无效,请检查输入!");
            }
            if(goodsMapper.selectCount(new QueryWrapper<Goods>().eq("COMPANY_ID",user.getCompanyId()).eq("ISDELETED",Constants.ZERO).eq("name",m.getName()))>0){
                    throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"第【"+(num)+"】行【"+m.getName()+"】已存在");
                if(findGoodsByNameFromList(m.getName(),goodsList) !=null){
                        throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"第【"+(num)+"】行产品名称【"+m.getName()+"】已存在");
            }
            Goods newModel = new Goods();
            newModel.setRemark(m.getId());
@@ -824,13 +829,52 @@
            }
            newModel.setPinyin(PinYinUtil.getFullSpell(m.getName()));
            newModel.setShortPinyin(PinYinUtil.getFirstSpell(m.getName()));
                List<String> mulFiles =getGoodsImageFileList(newModel,path);
                //查询商品信息
                goodsMapper.insert(newModel);
                //加入到已经存在的产品集合中,用于下一个信息去重处理
                goodsList.add(newModel);
                //处理产品属性业务
                dealGoodsParamBiz(cate,newModel,m,allParamsList,num);
                //处理产品图片资源业务
                dealGoodsImagesBiz(mulFiles,newModel);
            String[] params =  StringUtils.defaultString(m.getParamStr(),"").split("\n");
                index++;//记录导入产品成功+1
            }
        }catch (BusinessException e){
            throw e;
        }catch (Exception e){
            throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"导入产品数据发生异常,请稍后重试!");
        }finally {
            redisTemplate.opsForValue().set(user.getCompanyId()+Constants.COMPANY_IMPORT_GOODS,false);
        }
        return  index;
    }
    private void dealGoodsImagesBiz(List<String> mulFiles, Goods newModel) {
        if(mulFiles !=null && mulFiles.size()>0){
            List<Multifile> multifileList = new ArrayList<>();
            for(int i=0;i<mulFiles.size();i++){
                String s = mulFiles.get(i);
                Multifile f = new Multifile();
                f.setObjType(Constants.ZERO);
                f.setName(s);
                f.setType(Constants.ZERO);
                f.setObjId(newModel.getId());
                f.setCreateDate(newModel.getCreateDate());
                f.setCreator(newModel.getCreator());
                f.setIsdeleted(Constants.ZERO);
                f.setSortnum(i);
                f.setCompanyId(newModel.getCompanyId());
                f.setFileurl(s);
                multifileList.add(f);
            }
            multifileMapper.insert(multifileList);
        }
    }
    private List<String> getGoodsImageFileList(Goods newModel, String path) {
            List<String> mulFiles = null;
            String proDir =systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.PROJECTS).getCode();
            String path = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.GOODS_IMG_DIR).getCode()
                    + proDir + File.separator + user.getCompanyId();
            if(StringUtils.isNotBlank(path)){
                OssModel ossModel = baseDataService.initOssModel();
                File dir =new File(path+File.separator+newModel.getRemark()+File.separator);
@@ -860,13 +904,14 @@
                    }
                }
            }
            //查询商品信息
            goodsMapper.insert(newModel);
            CateParam cp = new CateParam();
            cp.setIsdeleted(Constants.ZERO);
            cp.setCategoryId(cate.getId());
        return mulFiles;
    }
    private void dealGoodsParamBiz(Category cate, Goods newModel, GoodsImport m, List<CateParam> allParamsList,int num) {
        List<GoodsParam> paramList = new ArrayList<>();
        String[] params =  StringUtils.defaultString(m.getParamStr(),"").split("\n");
            //查询全部产品参数配置
            List<CateParam> allParams = cateParamMapper.selectList(new QueryWrapper<>(cp));
        List<CateParam> allParams =getCateParamByCateid(cate.getId(),allParamsList);
            if(params.length > 0){
                for(String s : params){
                    if(StringUtils.isBlank(s)){
@@ -884,7 +929,7 @@
                    }
                    GoodsParam gp = new GoodsParam();
                    gp.setIsdeleted(Constants.ZERO);
                    gp.setCreator(user.getId());
                gp.setCreator(newModel.getCreator());
                    gp.setCreateDate(newModel.getCreateDate());
                    gp.setGoodsId(newModel.getId());
                    gp.setName(ta.getName());
@@ -893,45 +938,64 @@
                    gp.setVal(ts.length>1?ts[1]:null);
                    gp.setSortnum(ta.getSortnum());
                    //插入产品参数关联表
                    goodsParamMapper.insert(gp);
                    //存储 cate_param_select 查询是否已存在
//                    if(cateParamSelectMapper.selectCount(new QueryWrapper<CateParamSelect>()
//                            .eq("PARAM_ID",gp.getPramaId()).eq("NAME",gp.getName()))<=Constants.ZERO){
//                        CateParamSelect cateParamSelect = new CateParamSelect();
//                        cateParamSelect.setCreator(user.getId());
//                        cateParamSelect.setCreateDate(new Date());
//                        cateParamSelect.setName(gp.getVal());
//                        cateParamSelect.setIsdeleted(Constants.ZERO);
//                        cateParamSelect.setStatus(Constants.ZERO);
//                        cateParamSelect.setParamId(gp.getPramaId());
//                        cateParamSelect.setCategoryId(newModel.getCategoryId());
//                        cateParamSelect.setStatus(Constants.ZERO);
//                        cateParamSelectMapper.insert(cateParamSelect);
//                    };
                paramList.add(gp);
//                        goodsParamMapper.insert(gp);
                }
            }
            if(mulFiles !=null && mulFiles.size()>0){
                for(int i=0;i<mulFiles.size();i++){
                    String s = mulFiles.get(i);
                    Multifile f = new Multifile();
                    f.setObjType(Constants.ZERO);
                    f.setName(s);
                    f.setType(Constants.ZERO);
                    f.setObjId(newModel.getId());
                    f.setCreateDate(newModel.getCreateDate());
                    f.setCreator(newModel.getCreator());
                    f.setIsdeleted(Constants.ZERO);
                    f.setSortnum(i);
                    f.setCompanyId(user.getCompanyId());
                    f.setFileurl(s);
                    multifileMapper.insert(f);
        if(paramList.size() >0){
            goodsParamMapper.insert(paramList);
                }
            }
            num++;
        }
        return  num;
    }
    private Goods findGoodsByNameFromList(String name, List<Goods> goodsList) {
        if(goodsList!=null){
            for(Goods brand :goodsList){
                if(StringUtils.equals(name.trim(),brand.getName())){
                    return brand;
                }
            }
        }
        return null;
    }
    private List<CateParam> getCateParamByCateid(Integer cateid, List<CateParam> allParamsList) {
        List<CateParam> list = null;
        if(allParamsList!=null){
            for(CateParam brand :allParamsList){
                if(Constants.equalsInteger(cateid,brand.getCategoryId())){
                   if(list == null){
                       list = new ArrayList<>();
                   }
                   list.add(brand);
                }
            }
        }
        return list;
    }
    private Category getCategroyByNameFromList(String name, List<Category> categoryList) {
        if(categoryList!=null){
            for(Category brand :categoryList){
                if(StringUtils.equals(name.trim(),brand.getName())){
                    return brand;
                }
            }
        }
        return null;
    }
    private Brand getImportBrandByNameFromList(String name, List<Brand> brandList) {
        if(brandList!=null){
            for(Brand brand :brandList){
                if(StringUtils.equals(name.trim(),brand.getName())){
                    return brand;
                }
            }
        }
        return null;
    }
    @Transactional(rollbackFor = {Exception.class, BusinessException.class})
    @Override
    public Integer importBatchImg(MultipartFile file){