jiangping
2023-09-22 691cbf9350a6e98bfeb3cc2274906da75466bf1d
server/service/src/main/java/com/doumee/service/business/impl/GoodsServiceImpl.java
@@ -17,15 +17,22 @@
import com.doumee.dao.business.*;
import com.doumee.dao.business.join.GoodsJoinMapper;
import com.doumee.dao.business.model.*;
import com.doumee.dao.business.model.dto.GoodsRequest;
import com.doumee.dao.business.model.dto.*;
import com.doumee.dao.system.model.SystemDepartment;
import com.doumee.service.CateParamSelectService;
import com.doumee.service.business.BaseDataService;
import com.doumee.service.business.GoodsService;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import io.swagger.v3.oas.annotations.callbacks.Callback;
import lombok.extern.java.Log;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.shiro.SecurityUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
@@ -36,14 +43,11 @@
import java.io.File;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.math.BigDecimal;
import java.net.URLEncoder;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import java.util.*;
import java.util.stream.Collectors;
/**
 * 商品信息表Service实现
@@ -56,7 +60,16 @@
    @Autowired
    private GoodsMapper goodsMapper;
    @Autowired
    @Lazy
    private BaseDataService baseDataService;
    @Autowired
    private BaseGoodsMapper baseGoodsMapper;
    @Autowired
    private BaseGoodsParamMapper baseGoodsParamMapper;
    @Autowired
    private CategoryMapper categoryMapper;
    @Autowired
    private BaseCategoryMapper baseCategoryMapper;
    @Autowired
    private CateAttrMapper cateAttrMapper;
    @Autowired
@@ -73,6 +86,13 @@
    @Autowired
    private GoodsJoinMapper goodsJoinMapper;
    @Lazy
    @Autowired
    private CateParamSelectService cateParamSelectService;
    @Autowired
    private RedisTemplate redisTemplate;
    @Override
@@ -121,6 +141,251 @@
        return goods.getId();
    }
    @Async
    @Override
    @Transactional( rollbackFor = {Exception.class, BusinessException.class})
    public  Integer createPlat(GoodCreatePlatRequest param){
        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
        if(!Constants.equalsInteger(user.getType(), Constants.UserType.COMPANY.getKey())){
            //非企业用户不能操作
            throw new BusinessException(ResponseStatus.NOT_ALLOWED);
        }
        if(param.getCategoryId() == null
                || param.getType() == null
                || param.getRate() == null
                || (Constants.equalsInteger(param.getType(), Constants.ONE)
                && (param.getGoodsParamList() == null
                || param.getGoodsParamList().size()==0))){
            throw  new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        Category category = categoryMapper.selectById(param.getCategoryId());
        if(category ==null ||Constants.equalsInteger(category.getIsdeleted(), Constants.ONE) ||!Constants.equalsInteger(category.getCompanyId(), user.getCompanyId())){
            throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,类别信息不正确,请刷新重试!");
        }
        if(category.getPlatCateId() == null){
            throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,请前往【类别管理】先关联平台类别!");
        }
        BaseCategory baseCategory = baseCategoryMapper.selectById(category.getPlatCateId());
        if(baseCategory == null){
            throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,请前往【类别管理】先关联平台类别!");
        }
        BaseGoods bp = new BaseGoods();
        bp.setCategoryId(category.getPlatCateId());
        bp.setIsdeleted(Constants.ZERO);
        List<BaseGoods> goodsList = new ArrayList<>();
        List<Integer> ids = null;
        if(Constants.equalsInteger(Constants.ONE, param.getType())){
            //如果选择部分商品
            for(PlatGoodsParam p : param.getGoodsParamList()){
                if(p.getGoodsId() == null || p.getPrice() == null){
                    throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,请正确选择平台商品并配置入手价!");
                }
                if(ids == null){
                    ids = new ArrayList<>();
                }
                ids.add(p.getGoodsId());
            }
        }
        goodsList = baseGoodsMapper.selectList(new QueryWrapper<>(bp).lambda().in((ids!=null && ids.size()>0),BaseGoods::getId,ids));
        if(Constants.equalsInteger(Constants.ONE, param.getType()) &&( goodsList==null || ids.size()!=goodsList.size())){
            //  如果选择平台商品和查询结果对不上,提示错误
            throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,请正确选择平台商品!");
        }
        List<Multifile> multifileList = new ArrayList<>();
        List<GoodsParam> goodsParamList = new ArrayList<>();
        try{
            for(BaseGoods model : goodsList){
                //遍历平台商品信息,进行商品信息同步
                //分类加价系数
                model.setCateRatePrice(baseCategory.getPriceRate());
                Goods goods = initGoodsPlatParam(user,model,param);
                if(goods == null){
                    continue;
                }
                goodsMapper.insert(goods);
                //开始处理附件
                dealPlatMultifule(goods.getId(),user,model,multifileList);
                //开始处理参数配置
                dealPlatGoodsParam(model,goods,user,goodsParamList);
            }
            if(multifileList.size()>0){
                multifileMapper.insertBatch(multifileList);
            }
            if(goodsParamList.size()>0){
                goodsParamMapper.insertBatch(goodsParamList);
            }
            cateParamSelectService.dealCateParamSelect();
        }catch (Exception e){
           e.printStackTrace();
        }finally {
            redisTemplate.opsForValue().set(user.getCompanyId()+Constants.OPEN_SYNC_SWITCH,false);
        }
        return 1;
    }
    private void dealPlatGoodsParam(BaseGoods model, Goods goods, LoginUserInfo user,List<GoodsParam> paramList) {
        BaseGoodsParam baseGoodsParam = new BaseGoodsParam();
        baseGoodsParam.setGoodsId(model.getId());
        baseGoodsParam.setIsdeleted(Constants.ZERO);
        List<BaseGoodsParam> goodsParamList = baseGoodsParamMapper.selectList(new QueryWrapper<>(baseGoodsParam));
        if(!Objects.isNull(goodsParamList)&&goodsParamList.size()>0){
            for (int i = 0; i < goodsParamList.size(); i++) {
                BaseGoodsParam bgParam = goodsParamList.get(i);
                //根据平台商品配置的平台参数信息查询企业绑定的参数信息 进行存储到 企业商品参数内
                CateParam cateParam = cateParamMapper.selectOne(new QueryWrapper<CateParam>()
                        .eq("CATEGORY_ID",goods.getCategoryId())
                        .eq("BASE_CATE_PARAM_ID",bgParam.getPramaId())
                        .eq("ISDELETED",Constants.ZERO)
                        .eq("STATUS",Constants.ZERO)
                        .last(" limit 1 "));
//                if(Objects.isNull(cateParam)){
//                    throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"企业分类数据同步异常请联系管理员");
//                }
                GoodsParam goodsParam = new GoodsParam();
                goodsParam.setCreator(user.getId());
                goodsParam.setCreateDate(new Date());
                goodsParam.setIsdeleted(Constants.ZERO);
                goodsParam.setSortnum(i+Constants.ONE);
                goodsParam.setStatus(Constants.ZERO);
                goodsParam.setGoodsId(goods.getId());
                goodsParam.setVal(bgParam.getVal());
                goodsParam.setName(bgParam.getName());
                goodsParam.setPramaId(Objects.isNull(cateParam)?null:cateParam.getId());
                paramList.add(goodsParam);
//                goodsParamMapper.insert(goodsParam);
            }
        }
    }
    private Goods initGoodsPlatParam(LoginUserInfo user, BaseGoods model, GoodCreatePlatRequest param) {
        Goods goods = new Goods();
        goods.setIsdeleted(Constants.ZERO);
        goods.setGoodsId(model.getId());
        goods.setCompanyId(user.getCompanyId());
        if(goodsMapper.selectCount(new QueryWrapper<>(goods))>0){
            //如果已经同步过,跳过此次同步
            return  null;
        }
        goods.setType(Constants.ONE);
        goods.setStatus(Constants.ZERO);
        goods.setCreateDate(new Date());
        goods.setCreator(user.getId());
        goods.setCompanyId(user.getCompanyId());
        goods.setIsdeleted(Constants.ZERO);
        //处理拼音问题
        goods.setPinyin(PinYinUtil.getFullSpell(goods.getName()));
        goods.setShortPinyin(PinYinUtil.getFirstSpell(goods.getName()));
        goods.setName(model.getName());
        goods.setCategoryId(param.getCategoryId());
        //获取入手价格
        goods.setPrice(getPriceFromParam(model,param));
        goods.setZdPrice(model.getZdPrice());
        goods.setRemark(model.getRemark());
        goods.setImgurl(model.getImgurl());
        goods.setBrandId(model.getBrandId());
        return goods;
    }
    /**
     *  开始处理平台商品关联附件,复制一套到企业商品上
     */
    private void dealPlatMultifule(Integer id, LoginUserInfo user, BaseGoods model,List<Multifile> fileList ) {
        Multifile f = new Multifile();
        f.setObjId(model.getId());
        f.setIsdeleted(Constants.ZERO);
        List<Multifile> multifileList =multifileMapper.selectList(new QueryWrapper<>(f));
        if(!Objects.isNull(multifileList)&&multifileList.size()>Constants.ZERO){
            for (int i = 0; i < multifileList.size(); i++) {
                Multifile multifile = multifileList.get(i);
                multifile.setCreator(user.getId());
                multifile.setCreateDate(new Date());
                multifile.setIsdeleted(Constants.ZERO);
                multifile.setSortnum(i+Constants.ONE);
                multifile.setObjId(id);
                multifile.setType(Constants.ZERO);
                multifile.setObjType(Constants.ZERO);
                multifile.setFileurl(multifile.getFileurl());
                multifile.setName(multifile.getName());
                multifile.setSortnum(multifile.getSortnum());
                multifile.setCompanyId(user.getCompanyId());
                fileList.add(multifile);
//                multifileMapper.insert(multifile);
            }
        }
    }
    private BigDecimal getPriceFromParam(BaseGoods model, GoodCreatePlatRequest param) {
        if(Constants.equalsInteger(Constants.ONE, param.getType())){
            for(PlatGoodsParam p: param.getGoodsParamList()){
                if(Constants.equalsInteger(model.getId(),p.getGoodsId())){
                    return p.getPrice().setScale(0,BigDecimal.ROUND_CEILING);
                }
            }
            throw new BusinessException(ResponseStatus.DATA_ERRO.getCode(),"数据异常请刷新重试");
        }
        //如果没有配置入手价,安装加价系数来计算
        if(model.getCateRatePrice()==null){
            model.setCateRatePrice(systemDictDataBiz.getGoodsPriceRate());
        }
        //返回 .multiply(model.getCateRatePrice())
        return (Constants.formatBigdecimal(model.getPrice()).multiply(model.getCateRatePrice()).multiply(param.getRate())).setScale(0,BigDecimal.ROUND_CEILING);
    }
    @Override
    public Integer companyCreate(Goods goods) {
        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
        if(user.getType()==1){
            goods.setCompanyId(user.getCompanyId());
        }else{
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"当前登录用户类别错误,无法进行该操作");
        }
        if(goodsMapper.selectCount(new QueryWrapper<Goods>().eq("COMPANY_ID",user.getCompanyId()).eq("ISDELETED",Constants.ZERO).eq("name",goods.getName()))>0){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"【"+goods.getName()+"】已存在");
        }
        goods.setStatus(Constants.ZERO);
        goods.setCreateDate(new Date());
        goods.setCreator(user.getId());
        goods.setIsdeleted(Constants.ZERO);
        //处理拼音问题
        goods.setPinyin(PinYinUtil.getFullSpell(goods.getName()));
        goods.setShortPinyin(PinYinUtil.getFirstSpell(goods.getName()));
        goodsMapper.insert(goods);
        List<Multifile> multifileList = goods.getMultifileList();
        if(!Objects.isNull(multifileList)&&multifileList.size()>Constants.ZERO){
            for (int i = 0; i < multifileList.size(); i++) {
                Multifile multifile = multifileList.get(i);
                multifile.setCreator(user.getId());
                multifile.setCreateDate(new Date());
                multifile.setIsdeleted(Constants.ZERO);
                multifile.setSortnum(i+Constants.ONE);
                multifile.setObjId(goods.getId());
                multifile.setType(Constants.ZERO);
                multifile.setObjType(Constants.ZERO);
                multifile.setCompanyId(goods.getCompanyId());
                multifileMapper.insert(multifile);
            }
        }
        List<GoodsParam> goodsParamList = goods.getGoodsParamList();
        if(!Objects.isNull(goodsParamList)&&goodsParamList.size()>0){
            for (int i = 0; i < goodsParamList.size(); i++) {
                GoodsParam goodsParam = goodsParamList.get(i);
                goodsParam.setCreator(user.getId());
                goodsParam.setCreateDate(new Date());
                goodsParam.setIsdeleted(Constants.ZERO);
                goodsParam.setStatus(Constants.ZERO);
                goodsParam.setSortnum(i+Constants.ONE);
                goodsParam.setGoodsId(goods.getId());
                goodsParamMapper.insert(goodsParam);
            }
        }
        return goods.getId();
    }
    @Override
    public void deleteById(Integer id) {
        Goods goods = goodsMapper.selectById(id);
@@ -142,7 +407,10 @@
        if (CollectionUtils.isEmpty(ids)) {
            return;
        }
        goodsMapper.deleteBatchIds(ids);
        for(Integer id : ids){
            deleteById(id);
        }
//        goodsMapper.deleteBatchIds(ids);
    }
    @Override
@@ -191,6 +459,76 @@
        }
    }
    @Override
    public void companyUpdateById(Goods goods) {
        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
        if(user.getType()==1){
            goods.setCompanyId(user.getCompanyId());
        }else{
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"当前登录用户类别错误,无法进行该操作");
        }
        if(goodsMapper.selectCount(new QueryWrapper<Goods>().eq("COMPANY_ID",user.getCompanyId())
                .eq("ISDELETED",Constants.ZERO).ne("id",goods.getId()).eq("name",goods.getName()))>0){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"【"+goods.getName()+"】已存在");
        };
        goods.setStatus(Constants.ZERO);
        goods.setEditDate(new Date());
        goods.setEditor(user.getId());
        goods.setIsdeleted(Constants.ZERO);
        //处理拼音问题
        goods.setPinyin(PinYinUtil.getFullSpell(goods.getName()));
        goods.setShortPinyin(PinYinUtil.getFirstSpell(goods.getName()));
        goodsMapper.updateById(goods);
        multifileMapper.delete(new QueryWrapper<Multifile>().eq("OBJ_ID",goods.getId())
                .eq("OBJ_TYPE",0).eq("COMPANY_ID",user.getCompanyId()));
        List<Multifile> multifileList = goods.getMultifileList();
        if(!Objects.isNull(multifileList)&&multifileList.size()>Constants.ZERO){
            for (int i = 0; i < multifileList.size(); i++) {
                Multifile multifile = multifileList.get(i);
                multifile.setCreator(user.getId());
                multifile.setCreateDate(new Date());
                multifile.setIsdeleted(Constants.ZERO);
                multifile.setSortnum(i+Constants.ONE);
                multifile.setObjId(goods.getId());
                multifile.setType(Constants.ZERO);
                multifile.setCompanyId(goods.getCompanyId());
                multifile.setObjType(Constants.ZERO);
                multifileMapper.insert(multifile);
            }
        }
        goodsParamMapper.delete(new QueryWrapper<GoodsParam>().eq("GOODS_ID",goods.getId()));
        List<GoodsParam> goodsParamList = goods.getGoodsParamList();
        if(!Objects.isNull(goodsParamList)&&goodsParamList.size()>0){
            for (int i = 0; i < goodsParamList.size(); i++) {
                GoodsParam goodsParam = goodsParamList.get(i);
                goodsParam.setCreator(user.getId());
                goodsParam.setCreateDate(new Date());
                goodsParam.setIsdeleted(Constants.ZERO);
                goodsParam.setSortnum(i+Constants.ONE);
                goodsParam.setStatus(Constants.ZERO);
                goodsParam.setGoodsId(goods.getId());
                goodsParamMapper.insert(goodsParam);
                //存储 cate_param_select 查询是否已存在
//                if(cateParamSelectMapper.selectCount(new QueryWrapper<CateParamSelect>()
//                        .eq("PARAM_ID",goodsParam.getPramaId()).eq("NAME",goodsParam.getName()))<=Constants.ZERO){
//                    CateParamSelect cateParamSelect = new CateParamSelect();
//                    cateParamSelect.setCreator(user.getId());
//                    cateParamSelect.setCreateDate(new Date());
//                    cateParamSelect.setName(goodsParam.getVal());
//                    cateParamSelect.setIsdeleted(Constants.ZERO);
//                    cateParamSelect.setStatus(Constants.ZERO);
//                    cateParamSelect.setParamId(goodsParam.getPramaId());
//                    cateParamSelect.setCategoryId(goods.getCategoryId());
//                    cateParamSelect.setStatus(Constants.ZERO);
//                    cateParamSelectMapper.insert(cateParamSelect);
//                };
            }
        }
    }
    @Override
    public void updateByIdInBatch(List<Goods> goodss) {
        if (CollectionUtils.isEmpty(goodss)) {
@@ -205,16 +543,73 @@
    @Override
    public void updateDisableById(Goods goods) {
        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
        Goods dbGoods = goodsMapper.selectById(goods.getId());
        if(Objects.isNull(dbGoods)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY);
        }
        //拉式商品 且 上架时,需要限制 平台商品是否已下架
        if(dbGoods.getType().equals(Constants.goodsType.PULL.getValue())&&goods.getStatus().equals(Constants.ZERO)){
            BaseGoods baseGoods = baseGoodsMapper.selectById(dbGoods.getGoodsId());
            if(Objects.isNull(baseGoods)){
                throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未查询到平台商品信息");
            }
            if(!baseGoods.getStatus().equals(Constants.ZERO)){
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"平台商品已下架,无法上架");
            }
        }
        goods.setEditDate(new Date());
        goods.setEditor(user.getId());
        goodsMapper.updateById(goods);
    }
    /**
     * 批量上下架
     * @param batchDisableDTO
     * @return
     */
    @Override
    public String batchUpdateDisableById(BatchDisableDTO batchDisableDTO) {
        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
        if(StringUtils.isBlank(batchDisableDTO.getIds())){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"请选择对应的商品进行该操作");
        }
        if(!(batchDisableDTO.getStatus().equals(Constants.ZERO)||batchDisableDTO.getStatus().equals(Constants.ONE))){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"操作类型错误");
        }
        Integer okNum = 0;
        Integer errNum = 0;
        List<String> goodsList  = Arrays.asList(batchDisableDTO.getIds().split(","));
        for (String goodsId:goodsList) {
            Goods dbGoods = goodsMapper.selectById(goodsId);
            if(Objects.isNull(dbGoods)){
                errNum++;
                continue;
            }
            //拉式商品 且 上架时,需要限制 平台商品是否已下架
            if(dbGoods.getType().equals(Constants.goodsType.PULL.getValue())&&batchDisableDTO.getStatus().equals(Constants.ZERO)){
                BaseGoods baseGoods = baseGoodsMapper.selectById(dbGoods.getGoodsId());
                if(Objects.isNull(baseGoods)||!baseGoods.getStatus().equals(Constants.ZERO)){
                    errNum++;
                    continue;
                }
            }
            dbGoods.setEditDate(new Date());
            dbGoods.setEditor(user.getId());
            dbGoods.setStatus(batchDisableDTO.getStatus());
            goodsMapper.updateById(dbGoods);
            okNum++;
        }
        return "更新成功数量("+okNum+");更新失败数量("+errNum+")";
    }
    @Override
    public Goods findById(Integer id) {
        Goods goods = goodsMapper.selectById(id);
        String prefixUrl = systemDictDataBiz.queryByCode(Constants.SYSTEM, Constants.FILE_DIR).getCode()
                + systemDictDataBiz.queryByCode(Constants.SYSTEM, Constants.PROJECTS).getCode();
        String prefixUrl = systemDictDataBiz.queryByCode(Constants.OSS, Constants.RESOURCE_PATH).getCode()
                + systemDictDataBiz.queryByCode(Constants.OSS, Constants.GOODS_IMG).getCode();
        goods.setPrefixUrl(prefixUrl);
        Brand brand = brandMapper.selectById(goods.getBrandId());
        if(!Objects.isNull(brand)){
@@ -257,13 +652,7 @@
                Goods::getPrice,goods.getSPrice(),goods.getEPrice());
        queryWrapper.orderByDesc(Goods::getId);
        List<Goods> goodsList = goodsJoinMapper.selectJoinList(Goods.class,queryWrapper);
        String prefixUrl = systemDictDataBiz.queryByCode(Constants.SYSTEM, Constants.FILE_DIR).getCode()
                + systemDictDataBiz.queryByCode(Constants.SYSTEM, Constants.PROJECTS).getCode();
        goodsList.forEach(i->{
            i.setPrefixUrl(prefixUrl);
            i.setMultifileList(multifileMapper.selectList(new QueryWrapper<Multifile>().eq("OBJ_ID",i.getId()).orderByAsc(" SORTNUM ")));
            i.setGoodsParamList(goodsParamMapper.selectList(new QueryWrapper<GoodsParam>().eq("GOODS_ID",i.getId()).orderByAsc(" SORTNUM ")));
        });
        this.dealGoodsMsg(goodsList);
        return goodsList;
    }
@@ -275,11 +664,16 @@
        queryWrapper.selectAll(Goods.class);
        queryWrapper.selectAs(Category::getName, Goods::getCategoryName);
        queryWrapper.selectAs(BaseGoods::getZdPrice, Goods::getBaseZdPrice);
        queryWrapper.selectAs(BaseGoods::getPrice, Goods::getBasePrice);
        queryWrapper.selectAs(Brand::getName, Goods::getBrandName);
        queryWrapper.selectAs(Category::getAttrFirst, Goods::getAttrFirst);
        queryWrapper.selectAs(Category::getAttrSecond, Goods::getAttrSecond);
        queryWrapper.selectAs(BaseCategory::getPriceRate,Goods::getBasePriceRate);
        queryWrapper.leftJoin(Category.class, Category::getId, Goods::getCategoryId);
        queryWrapper.leftJoin(Brand.class, Brand::getId, Goods::getBrandId);
        queryWrapper.leftJoin(BaseGoods.class,BaseGoods::getId,Goods::getGoodsId);
        queryWrapper.leftJoin(BaseCategory.class,BaseCategory::getId,BaseGoods::getCategoryId);
        queryWrapper.eq(Goods::getIsdeleted, Constants.ZERO);
        if (pageWrap.getModel().getId() != null) {
@@ -291,21 +685,25 @@
        if (pageWrap.getModel().getStatus() != null) {
            queryWrapper.eq(Goods::getStatus, pageWrap.getModel().getStatus());
        }
        if (pageWrap.getModel().getType() != null) {
            queryWrapper.eq(Goods::getType, pageWrap.getModel().getType());
        }
        if (pageWrap.getModel().getCategoryId() != null) {
            queryWrapper.eq(Goods::getCategoryId, pageWrap.getModel().getCategoryId());
        }
        if (pageWrap.getModel().getBrandId() != null) {
            queryWrapper.eq(Goods::getBrandId, pageWrap.getModel().getBrandId());
        }
        if (pageWrap.getModel().getCompanyId() != null) {
            queryWrapper.eq(Goods::getCompanyId, pageWrap.getModel().getCompanyId());
        }
        queryWrapper.orderByDesc(Goods::getId);
        IPage<Goods> goodsIPage =  goodsJoinMapper.selectJoinPage(page, Goods.class, queryWrapper);
        String prefixUrl = systemDictDataBiz.queryByCode(Constants.SYSTEM, Constants.FILE_DIR).getCode()
                + systemDictDataBiz.queryByCode(Constants.SYSTEM, Constants.PROJECTS).getCode();
        String prefixUrl = systemDictDataBiz.queryByCode(Constants.OSS, Constants.RESOURCE_PATH).getCode()
                + systemDictDataBiz.queryByCode(Constants.OSS, Constants.GOODS_IMG).getCode();
        goodsIPage.getRecords().forEach(i->{
            i.setPrefixUrl(prefixUrl);
            i.setBasePrice(Constants.formatBigdecimal(i.getBasePrice()).multiply(Constants.formatBigdecimal(i.getBasePriceRate())));
        });
        return PageData.from(goodsIPage);
    }
@@ -361,6 +759,7 @@
            Goods g = new Goods();
            g.setIsdeleted(Constants.ZERO);
            g.setRemark(m.getId());
            g.setCompanyId(user.getCompanyId());
            //品类数据
            g = goodsMapper.selectOne(new QueryWrapper<>(g).last(" limit 1"));
            if(g != null){
@@ -369,6 +768,7 @@
            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"));
            if(cate == null){
@@ -378,19 +778,22 @@
            brand.setIsdeleted(Constants.ZERO);
            brand.setName(m.getBrand());
            //品类数据
            brand = brandMapper.selectOne(new QueryWrapper<>(brand).last(" limit 1"));
            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"));
            if(brand == null){
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,第【"+(num)+"】行商品品牌无效,请检查输入!");
            }
            if(goodsMapper.selectCount(new QueryWrapper<Goods>().eq("ISDELETED",Constants.ZERO).eq("name",m.getName()))>0){
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"【"+m.getName()+"】已存在");
            };
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"第【"+(num)+"】行【"+m.getName()+"】已存在");
            }
            Goods newModel = new Goods();
            newModel.setRemark(m.getId());
            newModel.setCategoryId(cate.getId());
            newModel.setBrandId(brand.getId());
            newModel.setIsdeleted(Constants.ZERO);
            newModel.setCreator(user.getId());
            newModel.setCompanyId(user.getCompanyId());
            newModel.setCreateDate(new Date());
            newModel.setName(m.getName());
            newModel.setStatus(Constants.ZERO);
@@ -409,67 +812,14 @@
            newModel.setPinyin(PinYinUtil.getFullSpell(m.getName()));
            newModel.setShortPinyin(PinYinUtil.getFirstSpell(m.getName()));
            CateAttr ca = new CateAttr();
            ca.setCategoryId(cate.getId());
            ca.setIsdeleted(Constants.ZERO);
            //查询全部属性1和属性2规格值
            List<CateAttr> allAttr = cateAttrMapper.selectList(new QueryWrapper<>(ca));
            //属性1集合
            String[] attrs = StringUtils.defaultString(m.getAttrFirstNames(),"").split("\n");
            //属性2集合
            String[] attrs2 = StringUtils.defaultString(m.getAttrSecodNames(),"").split("\n");
            //产品参数集合
            String[] params =  StringUtils.defaultString(m.getParamStr(),"").split("\n");
            if(attrs.length > 0){
                String attrids="" ,attrNames="";
                for(String s : attrs){
                    if(StringUtils.isBlank(s)){
                        continue;
                    }
                    //查询属性规格对象
                    CateAttr ta = getCateAttrByName(s,Constants.ZERO,allAttr);
                    if(ta == null){
                        throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,第【"+(num)+"】行属性1中【"+s+"】无效,请检查输入!");
                    }
                    if(StringUtils.isNotBlank(attrids)){
                        attrids += ",";
                        attrNames += ",";
                    }
                    attrids+= ta.getId();
                    attrNames+= ta.getName();
                }
                newModel.setAttrFirstIds(attrids);
                newModel.setAttrFirstNames(attrNames);
            }
            if(attrs2.length > 0){
                String attrids="" ,attrNames="";
                for(String s : attrs2){
                    if(StringUtils.isBlank(s)){
                        continue;
                    }
                    //查询属性规格对象
                    CateAttr ta = getCateAttrByName(s,Constants.ONE,allAttr);
                    if(ta == null){
                        throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,第【"+(num)+"】行属性1中【"+s+"】无效,请检查输入!");
                    }
                    if(StringUtils.isNotBlank(attrids)){
                        attrids += ",";
                        attrNames += ",";
                    }
                    attrids+= ta.getId();
                    attrNames+= ta.getName();
                }
                newModel.setAttrSecodIds(attrids);
                newModel.setAttrSecodNames(attrNames);
            }
            List<String> mulFiles = null;
            String proDir =systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.PROJECTS).getCode();
            String tf = proDir.substring(0,proDir.length()-1);
            String path = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.GOODS_IMG_DIR).getCode()
                    + proDir;
                    + proDir + File.separator + user.getCompanyId();
            if(StringUtils.isNotBlank(path)){
                OssModel ossModel = baseDataService.initOssModel();
                File dir =new File(path+File.separator+newModel.getRemark()+File.separator);
                if(dir!=null && dir.isDirectory()){
                    File[]  files = dir.listFiles();
@@ -477,16 +827,8 @@
                        for(File f:files){
                            if(StringUtils.isBlank(newModel.getImgurl()) && isImgFile(f)){
                                //取第一张图片作为列表图
                                String imgdir =f.getPath().substring(f.getPath().indexOf(tf)+tf.length()+1);
                                newModel.setImgurl(imgdir.replace(File.separator,"/"));
//                                 newModel.setImgurl(f.getPath().replace(path.replace(File.separator,"/"),""));
                                newModel.setImgurl(baseDataService.getOssImgurl(ossModel,ossModel.getGoodsFolder(),f));
                            }
//                             else{
//                                 if(mulFiles==null){
//                                     mulFiles = new ArrayList<>();
//                                 }
//                                 mulFiles.add(f.getPath().replace(path.replace("/",File.separator),""));
//                             }
                            if((mulFiles ==null || mulFiles.size() == 0) && f.isDirectory()){
                                //如果是文件夹
                                File[] fs = f.listFiles();
@@ -496,12 +838,7 @@
                                            if(mulFiles==null){
                                                mulFiles = new ArrayList<>();
                                            }
                                            String imgdir =mf.getPath().substring(mf.getPath().indexOf(tf)+tf.length()+1);
                                            mulFiles.add(imgdir.replace(File.separator,"/"));
//                                             newModel.setImgurl(imgdir);
////                                             mulFiles.add(mf.getName());
//                                             mulFiles.add(mf.getPath().replace(path.replace(File.separator,"/"),""));
                                            mulFiles.add(baseDataService.getOssImgurl(ossModel,ossModel.getGoodsFolder(),mf));
                                        }
                                    }
                                }
@@ -544,6 +881,20 @@
                    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);
//                    };
                }
            }
            if(mulFiles !=null && mulFiles.size()>0){
@@ -558,6 +909,7 @@
                    f.setCreator(newModel.getCreator());
                    f.setIsdeleted(Constants.ZERO);
                    f.setSortnum(i);
                    f.setCompanyId(user.getCompanyId());
                    f.setFileurl(s);
                    multifileMapper.insert(f);
                }
@@ -567,6 +919,9 @@
        return  num;
    }
    private boolean isImgFile(File f) {
        if(f!=null && f.isFile() ){
@@ -653,6 +1008,7 @@
    @Override
    public void export(HttpServletRequest request, HttpServletResponse response) throws Exception {
        try {
            LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
            String fileName = "产品导入表"+System.currentTimeMillis()+".xlsx";
            // 获取文件输入流
            InputStream inputStream =  this.getClass().getClassLoader().getResourceAsStream("static/file/goodsExcelTemp.xlsx");
@@ -666,7 +1022,10 @@
            // sheet.getPhysicalNumberOfRows()获取总的行数
            // 循环读取每一行
            Row row = sheet.createRow(1);
            List<Category> categoryList = categoryMapper.selectList(new QueryWrapper<Category>().eq("ISDELETED",0));
            List<Category> categoryList = categoryMapper.selectList(
                    new QueryWrapper<Category>().eq("ISDELETED",0)
                            .eq("COMPANY_ID",loginUserInfo.getCompanyId())
            );
            categoryList.forEach(i->{
                i.setParamList(cateParamMapper.selectList(new QueryWrapper<CateParam>().eq("ISDELETED",0).eq("CATEGORY_ID",i.getId())));
            });
@@ -725,25 +1084,50 @@
                                .or().like(Goods::getShortPinyin,pageWrap.getModel().getKeyword())
                                .or().like(Goods::getName,pageWrap.getModel().getKeyword())
                )
                .apply(!Objects.isNull(pageWrap.getModel()) && !Objects.isNull(pageWrap.getModel().getAttrFirst()), " find_in_set('"+pageWrap.getModel().getAttrFirst()+"',t.ATTR_FIRST_IDS) ")
                .apply(!Objects.isNull(pageWrap.getModel()) && !Objects.isNull(pageWrap.getModel().getAttrSecond()), " find_in_set('"+pageWrap.getModel().getAttrSecond()+"',t.ATTR_SECOD_IDS) ")
//                .apply(!Objects.isNull(pageWrap.getModel()) && !Objects.isNull(pageWrap.getModel().getAttrFirst()), " find_in_set('"+pageWrap.getModel().getAttrFirst()+"',t.ATTR_FIRST_IDS) ")
//                .apply(!Objects.isNull(pageWrap.getModel()) && !Objects.isNull(pageWrap.getModel().getAttrSecond()), " find_in_set('"+pageWrap.getModel().getAttrSecond()+"',t.ATTR_SECOD_IDS) ")
                .apply(!Objects.isNull(pageWrap.getModel()) && !Objects.isNull(pageWrap.getModel().getAttrFirst()), " t.id in ( SELECT  gp.GOODS_ID   FROM  cate_param_select cps  ,  goods_param gp where     gp.PRAMA_ID = cps.PARAM_ID     and gp.VAL = cps.`NAME`  " +
                        " and cps.ID = '"+pageWrap.getModel().getAttrFirst()+"' ) ")
                .apply(!Objects.isNull(pageWrap.getModel()) && !Objects.isNull(pageWrap.getModel().getAttrSecond()), " t.id in ( SELECT  gp.GOODS_ID   FROM  cate_param_select cps  ,  goods_param gp where     gp.PRAMA_ID = cps.PARAM_ID     and gp.VAL = cps.`NAME`  " +
                        " and cps.ID = '"+pageWrap.getModel().getAttrSecond()+"' ) ")
                .apply(!Objects.isNull(pageWrap.getModel()) && !Objects.isNull(pageWrap.getModel().getSPrice()), "  t.PRICE >=  "+pageWrap.getModel().getSPrice()+" ")
                .apply(!Objects.isNull(pageWrap.getModel()) && !Objects.isNull(pageWrap.getModel().getEPrice()), "  t.PRICE <=  "+pageWrap.getModel().getEPrice()+" ");
        queryWrapper.orderByDesc(Goods::getId);
        IPage<Goods> goodsIPage =  goodsJoinMapper.selectJoinPage(page, Goods.class, queryWrapper);
        String prefixUrl = systemDictDataBiz.queryByCode(Constants.SYSTEM, Constants.FILE_DIR).getCode()
                + systemDictDataBiz.queryByCode(Constants.SYSTEM, Constants.PROJECTS).getCode();
        goodsIPage.getRecords().forEach(i->{
            i.setPrefixUrl(prefixUrl);
            i.setMultifileList(multifileMapper.selectList(new QueryWrapper<Multifile>().eq("OBJ_ID",i.getId()).orderByAsc(" SORTNUM ")));
            i.setGoodsParamList(goodsParamMapper.selectList(new QueryWrapper<GoodsParam>().eq("GOODS_ID",i.getId()).orderByAsc(" SORTNUM ")));
        });
        if(!Objects.isNull(goodsIPage.getRecords())&&goodsIPage.getRecords().size()>Constants.ZERO){
            this.dealGoodsMsg(goodsIPage.getRecords());
        }
        return PageData.from(goodsIPage);
    }
    public void dealGoodsMsg(List<Goods> goodsList){
        String prefixUrl = systemDictDataBiz.queryByCode(Constants.OSS, Constants.RESOURCE_PATH).getCode()
                + systemDictDataBiz.queryByCode(Constants.OSS, Constants.GOODS_IMG).getCode();
        String prefixUrlCategory = systemDictDataBiz.queryByCode(Constants.OSS, Constants.RESOURCE_PATH).getCode()
                + systemDictDataBiz.queryByCode(Constants.OSS, Constants.CATEGORY_IMG).getCode();
        List<Integer> integerList = goodsList.stream().map(Goods::getId).collect(Collectors.toList());
        List<Multifile> mFileList = multifileMapper.selectList(new QueryWrapper<Multifile>()
                .in("OBJ_ID",integerList).eq("TYPE",Constants.ZERO));
        List<GoodsParam> goodsParamList = goodsParamMapper.selectList(new QueryWrapper<GoodsParam>()
                    .in("GOODS_ID",integerList)
                    .orderByAsc(" SORTNUM "));
        goodsList.forEach(i->{
            i.setCategoryImgurl(prefixUrlCategory + i.getCategoryImgurl());
            i.setPrefixUrl(prefixUrl);
            i.setMultifileList(mFileList.stream().filter(s -> s.getObjId().equals(i.getId())).collect(Collectors.toList()));
            i.setGoodsParamList(goodsParamList.stream().filter(s -> s.getGoodsId().equals(i.getId())).collect(Collectors.toList()));
        });
    }
    @Override
    public List<Goods> findListForH5(GoodsRequest goodsRequest) {
        LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
        if(!loginUserInfo.getType().equals(Constants.UserType.ZHUBO.getKey())){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"非主播用户无法使用");
        }
        MPJLambdaWrapper<Goods> queryWrapper = new MPJLambdaWrapper<>();
        queryWrapper.selectAll(Goods.class);
        queryWrapper.selectAs(Category::getName, Goods::getCategoryName);
@@ -755,6 +1139,7 @@
        queryWrapper.leftJoin(Brand.class, Brand::getId, Goods::getBrandId);
        queryWrapper.eq(Goods::getStatus,Constants.ZERO);
        queryWrapper.eq(Goods::getIsdeleted,Constants.ZERO);
        queryWrapper.eq(Goods::getCompanyId,loginUserInfo.getCompanyId());
        queryWrapper.eq(!Objects.isNull(goodsRequest) && !Objects.isNull(goodsRequest.getCategoryId()), Goods::getCategoryId, goodsRequest.getCategoryId())
                .eq(!Objects.isNull(goodsRequest) && !Objects.isNull(goodsRequest.getBrandId()), Goods::getBrandId, goodsRequest.getBrandId())
                .and(!Objects.isNull(goodsRequest) && StringUtils.isNotBlank(goodsRequest.getKeyword()),
@@ -768,15 +1153,21 @@
                .apply(!Objects.isNull(goodsRequest) && !Objects.isNull(goodsRequest.getEPrice()), "  t.PRICE <=  "+goodsRequest.getEPrice()+" ");
        queryWrapper.orderByDesc(Goods::getId);
        List<Goods> goodsList = goodsJoinMapper.selectJoinList(Goods.class,queryWrapper);
        String prefixUrl = systemDictDataBiz.queryByCode(Constants.SYSTEM, Constants.FILE_DIR).getCode()
                + systemDictDataBiz.queryByCode(Constants.SYSTEM, Constants.PROJECTS).getCode();
        goodsList.forEach(i->{
            i.setPrefixUrl(prefixUrl);
            i.setMultifileList(multifileMapper.selectList(new QueryWrapper<Multifile>().eq("OBJ_ID",i.getId()).orderByAsc(" SORTNUM ")));
            i.setGoodsParamList(goodsParamMapper.selectList(new QueryWrapper<GoodsParam>().eq("GOODS_ID",i.getId()).orderByAsc(" SORTNUM ")));
        });
        this.dealGoodsMsg(goodsList);
        return goodsList;
    }
    @Override
    @Transactional
    public  void openSyncSwitch() {
        LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
        Boolean  openSyncSwitch = (Boolean)redisTemplate.opsForValue().get(loginUserInfo.getCompanyId()+Constants.OPEN_SYNC_SWITCH);
        if(openSyncSwitch!=null && openSyncSwitch ){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"数据同步中,请稍后刷新重试");
        }
        redisTemplate.opsForValue().set(loginUserInfo.getCompanyId()+Constants.OPEN_SYNC_SWITCH,true);
    }
}