From 08e9a67dd679f311e79a27b04cd0c53a30b4bccf Mon Sep 17 00:00:00 2001
From: doum <doum>
Date: 星期四, 04 六月 2026 18:33:22 +0800
Subject: [PATCH] aaa

---
 server/service/src/main/java/com/doumee/service/business/impl/GoodsServiceImpl.java |  752 +++++++++++++++++++++++++++++++++++++--------------------
 1 files changed, 486 insertions(+), 266 deletions(-)

diff --git a/server/service/src/main/java/com/doumee/service/business/impl/GoodsServiceImpl.java b/server/service/src/main/java/com/doumee/service/business/impl/GoodsServiceImpl.java
index 4312e70..c1e1d93 100644
--- a/server/service/src/main/java/com/doumee/service/business/impl/GoodsServiceImpl.java
+++ b/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;
@@ -17,18 +18,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.BatchDisableDTO;
-import com.doumee.dao.business.model.dto.GoodCreatePlatRequest;
-import com.doumee.dao.business.model.dto.GoodsRequest;
-import com.doumee.dao.business.model.dto.PlatGoodsParam;
+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;
@@ -43,6 +48,8 @@
 import java.net.URLEncoder;
 import java.nio.charset.Charset;
 import java.util.*;
+import java.util.concurrent.TimeUnit;
+import java.util.stream.Collectors;
 
 /**
  * 鍟嗗搧淇℃伅琛⊿ervice瀹炵幇
@@ -55,11 +62,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
@@ -76,10 +88,13 @@
 
     @Autowired
     private GoodsJoinMapper goodsJoinMapper;
+
+    @Lazy
     @Autowired
-    private CateParamSelectMapper cateParamSelectMapper;
+    private CateParamSelectService cateParamSelectService;
 
-
+    @Autowired
+    private RedisTemplate redisTemplate;
 
 
     @Override
@@ -127,7 +142,10 @@
 
         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())){
@@ -149,6 +167,11 @@
         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);
@@ -171,24 +194,40 @@
             //  濡傛灉閫夋嫨骞冲彴鍟嗗搧鍜屾煡璇㈢粨鏋滃涓嶄笂锛屾彁绀洪敊璇�
             throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝璇锋纭�夋嫨骞冲彴鍟嗗搧锛�");
         }
-        for(BaseGoods model : goodsList){
-            //閬嶅巻骞冲彴鍟嗗搧淇℃伅锛岃繘琛屽晢鍝佷俊鎭悓姝�
-            Goods goods = initGoodsPlatParam(user,model,param);
-            if(goods == null){
-                continue;
+        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);
             }
-            goodsMapper.insert(goods);
-           //寮�濮嬪鐞嗛檮浠�
-            dealPlatMultifule(goods.getId(),user,model);
-            //寮�濮嬪鐞嗗弬鏁伴厤缃�
-            dealPlatGoodsParam(model,goods,user);
+            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) {
+    private void dealPlatGoodsParam(BaseGoods model, Goods goods, LoginUserInfo user,List<GoodsParam> paramList) {
         BaseGoodsParam baseGoodsParam = new BaseGoodsParam();
         baseGoodsParam.setGoodsId(model.getId());
         baseGoodsParam.setIsdeleted(Constants.ZERO);
@@ -196,6 +235,16 @@
         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());
@@ -205,7 +254,9 @@
                 goodsParam.setGoodsId(goods.getId());
                 goodsParam.setVal(bgParam.getVal());
                 goodsParam.setName(bgParam.getName());
-                goodsParamMapper.insert(goodsParam);
+                goodsParam.setPramaId(Objects.isNull(cateParam)?null:cateParam.getId());
+                paramList.add(goodsParam);
+//                goodsParamMapper.insert(goodsParam);
             }
         }
     }
@@ -214,6 +265,7 @@
         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;
@@ -241,10 +293,12 @@
     /**
      *  寮�濮嬪鐞嗗钩鍙板晢鍝佸叧鑱旈檮浠讹紝澶嶅埗涓�濂楀埌浼佷笟鍟嗗搧涓�
      */
-    private void dealPlatMultifule(Integer id, LoginUserInfo user, BaseGoods model) {
+    private void dealPlatMultifule(Integer id, LoginUserInfo user, BaseGoods model,List<Multifile> fileList ) {
         Multifile f = new Multifile();
         f.setObjId(model.getId());
+        f.setObjType(Constants.ONE);
         f.setIsdeleted(Constants.ZERO);
+        f.setObjType(Constants.ONE);
         List<Multifile> multifileList =multifileMapper.selectList(new QueryWrapper<>(f));
         if(!Objects.isNull(multifileList)&&multifileList.size()>Constants.ZERO){
             for (int i = 0; i < multifileList.size(); i++) {
@@ -260,7 +314,8 @@
                 multifile.setName(multifile.getName());
                 multifile.setSortnum(multifile.getSortnum());
                 multifile.setCompanyId(user.getCompanyId());
-                multifileMapper.insert(multifile);
+                fileList.add(multifile);
+//                multifileMapper.insert(multifile);
             }
         }
     }
@@ -269,16 +324,17 @@
         if(Constants.equalsInteger(Constants.ONE, param.getType())){
             for(PlatGoodsParam p: param.getGoodsParamList()){
                 if(Constants.equalsInteger(model.getId(),p.getGoodsId())){
-                    return p.getPrice();
+                    return p.getPrice().setScale(0,BigDecimal.ROUND_CEILING);
                 }
             }
+            throw new BusinessException(ResponseStatus.DATA_ERRO.getCode(),"鏁版嵁寮傚父璇峰埛鏂伴噸璇�");
         }
         //濡傛灉娌℃湁閰嶇疆鍏ユ墜浠凤紝瀹夎鍔犱环绯绘暟鏉ヨ绠�
         if(model.getCateRatePrice()==null){
             model.setCateRatePrice(systemDictDataBiz.getGoodsPriceRate());
         }
-        //杩斿洖
-        return Constants.formatBigdecimal(model.getPrice()).multiply(model.getCateRatePrice()).multiply(param.getRate());
+        //杩斿洖 .multiply(model.getCateRatePrice())
+        return (Constants.formatBigdecimal(model.getPrice()).multiply(model.getCateRatePrice()).multiply(param.getRate())).setScale(0,BigDecimal.ROUND_CEILING);
 
     }
 
@@ -298,15 +354,18 @@
         goods.setCreateDate(new Date());
         goods.setCreator(user.getId());
         goods.setIsdeleted(Constants.ZERO);
-        //澶勭悊鎷奸煶闂
         goods.setPinyin(PinYinUtil.getFullSpell(goods.getName()));
         goods.setShortPinyin(PinYinUtil.getFirstSpell(goods.getName()));
+        this.validateSubCategory(goods);
         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);
+                if(StringUtils.isBlank(multifile.getFileurl())){
+                    continue;
+                }
                 multifile.setCreator(user.getId());
                 multifile.setCreateDate(new Date());
                 multifile.setIsdeleted(Constants.ZERO);
@@ -314,6 +373,7 @@
                 multifile.setObjId(goods.getId());
                 multifile.setType(Constants.ZERO);
                 multifile.setObjType(Constants.ZERO);
+                multifile.setCompanyId(goods.getCompanyId());
                 multifileMapper.insert(multifile);
             }
         }
@@ -321,6 +381,7 @@
         if(!Objects.isNull(goodsParamList)&&goodsParamList.size()>0){
             for (int i = 0; i < goodsParamList.size(); i++) {
                 GoodsParam goodsParam = goodsParamList.get(i);
+                goodsParam.setId(null);
                 goodsParam.setCreator(user.getId());
                 goodsParam.setCreateDate(new Date());
                 goodsParam.setIsdeleted(Constants.ZERO);
@@ -328,20 +389,6 @@
                 goodsParam.setSortnum(i+Constants.ONE);
                 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);
-                };
             }
         }
         return goods.getId();
@@ -368,7 +415,10 @@
         if (CollectionUtils.isEmpty(ids)) {
             return;
         }
-        goodsMapper.deleteBatchIds(ids);
+        for(Integer id : ids){
+            deleteById(id);
+        }
+//        goodsMapper.deleteBatchIds(ids);
     }
 
     @Override
@@ -426,19 +476,21 @@
         }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){
+        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()));
+        this.validateSubCategory(goods);
         goodsMapper.updateById(goods);
 
-        multifileMapper.delete(new QueryWrapper<Multifile>().eq("OBJ_ID",goods.getId()));
+        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++) {
@@ -449,6 +501,7 @@
                 multifile.setSortnum(i+Constants.ONE);
                 multifile.setObjId(goods.getId());
                 multifile.setType(Constants.ZERO);
+                multifile.setCompanyId(goods.getCompanyId());
                 multifile.setObjType(Constants.ZERO);
                 multifileMapper.insert(multifile);
             }
@@ -458,6 +511,7 @@
         if(!Objects.isNull(goodsParamList)&&goodsParamList.size()>0){
             for (int i = 0; i < goodsParamList.size(); i++) {
                 GoodsParam goodsParam = goodsParamList.get(i);
+                goodsParam.setId(null);
                 goodsParam.setCreator(user.getId());
                 goodsParam.setCreateDate(new Date());
                 goodsParam.setIsdeleted(Constants.ZERO);
@@ -466,19 +520,19 @@
                 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);
-                };
+//                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);
+//                };
             }
         }
     }
@@ -503,7 +557,7 @@
             throw new BusinessException(ResponseStatus.DATA_EMPTY);
         }
         //鎷夊紡鍟嗗搧 涓� 涓婃灦鏃讹紝闇�瑕侀檺鍒� 骞冲彴鍟嗗搧鏄惁宸蹭笅鏋�
-        if(dbGoods.getType().equals(Constants.goodsType.PULL)&&goods.getStatus().equals(Constants.ZERO)){
+        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(),"鏈煡璇㈠埌骞冲彴鍟嗗搧淇℃伅");
@@ -541,7 +595,7 @@
                 continue;
             }
             //鎷夊紡鍟嗗搧 涓� 涓婃灦鏃讹紝闇�瑕侀檺鍒� 骞冲彴鍟嗗搧鏄惁宸蹭笅鏋�
-            if(dbGoods.getType().equals(Constants.goodsType.PULL)&&batchDisableDTO.getStatus().equals(Constants.ZERO)){
+            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++;
@@ -563,8 +617,8 @@
     @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)){
@@ -574,7 +628,7 @@
         if(!Objects.isNull(category)){
             goods.setCategoryName(category.getName());
         }
-        goods.setMultifileList(multifileMapper.selectList(new QueryWrapper<Multifile>().eq("OBJ_ID",id)));
+        goods.setMultifileList(multifileMapper.selectList(new QueryWrapper<Multifile>().eq("OBJ_TYPE",Constants.ZERO).eq("OBJ_ID",id)));
         return goods;
     }
 
@@ -596,6 +650,7 @@
         queryWrapper.leftJoin(Category.class, Category::getId, Goods::getCategoryId);
         queryWrapper.leftJoin(Brand.class, Brand::getId, Goods::getBrandId);
         queryWrapper.eq(Goods::getStatus,Constants.ZERO);
+        queryWrapper.eq(Goods::getCompanyId, goods.getCompanyId());
         queryWrapper.eq(Goods::getIsdeleted,Constants.ZERO);
         queryWrapper.like(StringUtils.isNotBlank(goods.getAttrFirstIds()),Goods::getAttrFirstIds,goods.getAttrFirstIds());
         queryWrapper.like(StringUtils.isNotBlank(goods.getAttrFirstNames()),Goods::getAttrFirstNames,goods.getAttrFirstNames());
@@ -606,14 +661,11 @@
         queryWrapper.between(!Objects.isNull(goods.getSPrice())&&!Objects.isNull(goods.getEPrice()),
                 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 ")));
-        });
+        List<Goods> goodsList =  this.goodsMapper.selectListByCollection(goods);
+      //  List<Goods> goodsList = goodsJoinMapper.selectJoinList(Goods.class,queryWrapper);
+        if(!Objects.isNull(goodsList)&&goodsList.size()>Constants.ZERO){
+            this.dealGoodsMsg(goodsList);
+        }
         return goodsList;
     }
 
@@ -625,11 +677,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) {
@@ -641,7 +698,9 @@
         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());
         }
@@ -653,10 +712,13 @@
         }
         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);
+            if(i.getType().equals(Constants.ONE)){
+                i.setBasePrice(Constants.formatBigdecimal(i.getBasePrice()).multiply(Constants.formatBigdecimal(i.getBasePriceRate())).setScale(0,BigDecimal.ROUND_CEILING));
+            }
         });
         return PageData.from(goodsIPage);
     }
@@ -679,6 +741,265 @@
     @Override
     public Integer importBatch(MultipartFile file){
         LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+        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(),"瀵逛笉璧凤紝褰曞叆鏁版嵁涓虹┖锛�");
+            }
+            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())
+                        &&StringUtils.isBlank(m.getZdPrice())
+                        &&StringUtils.isBlank(m.getPrice())
+                        &&StringUtils.isBlank(m.getId())
+                        &&StringUtils.isBlank(m.getBrand())){
+                   // 鍏ㄩ儴绌鸿锛岃烦杩囧鐞�;
+                    num++;
+                    continue;
+                }
+                if(StringUtils.isBlank(m.getName())
+                        ||StringUtils.isBlank(m.getCategory())
+                        ||StringUtils.isBlank(m.getZdPrice())
+                        ||StringUtils.isBlank(m.getPrice())
+                        ||StringUtils.isBlank(m.getId())
+                        ||StringUtils.isBlank(m.getBrand())){
+                    throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝绗��"+(num)+"銆戣鏁版嵁鏃犳晥锛岃妫�鏌ヨ緭鍏ワ紒");
+                }
+                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){
+                    throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝绗��"+(num)+"銆戣鍟嗗搧鍥剧墖鏂囦欢澶归噸澶嶏紝璇锋鏌ヨ緭鍏ワ紒");
+                }
+                Category cate = getCategroyByNameFromList(m.getCategory(),categoryList);
+                if(cate == null){
+                    throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝绗��"+(num)+"銆戣鍟嗗搧绫诲埆鏃犳晥锛岃妫�鏌ヨ緭鍏ワ紒");
+                }
+                Brand brand = getImportBrandByNameFromList(m.getBrand(),brandList);
+                if(brand == null){
+                    throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝绗��"+(num)+"銆戣鍟嗗搧鍝佺墝鏃犳晥锛岃妫�鏌ヨ緭鍏ワ紒");
+                }
+                if(findGoodsByNameFromList(m.getName(),goodsList) !=null){
+                        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);
+                try {
+                    newModel.setZdPrice(BigDecimal.valueOf(Double.parseDouble(m.getZdPrice())));
+                    newModel.setPrice(BigDecimal.valueOf(Double.parseDouble(m.getPrice())));
+                }catch (Exception e){
+
+                }
+                if(newModel.getZdPrice() == null){
+                    throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝绗��"+(num)+"銆戣鎸囧浠锋棤鏁堬紝璇锋鏌ヨ緭鍏ワ紒");
+                }
+                if(newModel.getPrice() == null){
+                    throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝绗��"+(num)+"銆戣鍏ユ墜浠锋棤鏁堬紝璇锋鏌ヨ緭鍏ワ紒");
+                }
+                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);
+
+                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;
+        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();
+                if(files!=null && files.length>0){
+                    for(File f:files){
+                        if(StringUtils.isBlank(newModel.getImgurl()) && isImgFile(f)){
+                            //鍙栫涓�寮犲浘鐗囦綔涓哄垪琛ㄥ浘
+                            newModel.setImgurl(baseDataService.getOssImgurl(ossModel,ossModel.getGoodsFolder(),f));
+                        }
+                        if((mulFiles ==null || mulFiles.size() == 0) && f.isDirectory()){
+                            //濡傛灉鏄枃浠跺す
+                            File[] fs = f.listFiles();
+                            if(fs!=null && fs.length>0){
+                                for(File mf : fs){
+                                    if(isImgFile(mf)){
+                                        if(mulFiles==null){
+                                            mulFiles = new ArrayList<>();
+                                        }
+                                        mulFiles.add(baseDataService.getOssImgurl(ossModel,ossModel.getGoodsFolder(),mf));
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        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 =getCateParamByCateid(cate.getId(),allParamsList);
+        if(params.length > 0){
+            for(String s : params){
+                if(StringUtils.isBlank(s)){
+                    continue;
+                }
+                s = s.replace("锛�",":");
+                String[] ts = s.split(":");
+                if(ts.length == 0){
+                    continue;
+                }
+                //鏌ヨ灞炴�ц鏍煎璞�
+                CateParam ta = getCateParamByName(ts[0], allParams);
+                if(ta == null){
+                    throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝绗��"+(num)+"銆戣浜у搧鍙傛暟涓��"+s+"銆戞棤鏁堬紝璇锋鏌ヨ緭鍏ワ紒");
+                }
+                GoodsParam gp = new GoodsParam();
+                gp.setIsdeleted(Constants.ZERO);
+                gp.setCreator(newModel.getCreator());
+                gp.setCreateDate(newModel.getCreateDate());
+                gp.setGoodsId(newModel.getId());
+                gp.setName(ta.getName());
+                gp.setPramaId(ta.getId());
+                gp.setStatus(Constants.ZERO);
+                gp.setVal(ts.length>1?ts[1]:null);
+                gp.setSortnum(ta.getSortnum());
+                //鎻掑叆浜у搧鍙傛暟鍏宠仈琛�
+                paramList.add(gp);
+//                        goodsParamMapper.insert(gp);
+            }
+        }
+        if(paramList.size() >0){
+            goodsParamMapper.insert(paramList);
+        }
+
+    }
+
+    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){
+        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
         ExcelImporter ie = null;
         List<GoodsImport> dataList =null;
         try {
@@ -693,134 +1014,32 @@
 
         int num =1;
         for(GoodsImport m: dataList){
-            if(StringUtils.isBlank(m.getName())
-                    &&StringUtils.isBlank(m.getCategory())
-                    &&StringUtils.isBlank(m.getZdPrice())
-                    &&StringUtils.isBlank(m.getPrice())
-                    &&StringUtils.isBlank(m.getId())
-                    &&StringUtils.isBlank(m.getBrand())){
+            if(  StringUtils.isBlank(m.getId()) ){
                 continue;
-            }
-            if(StringUtils.isBlank(m.getName())
-                    ||StringUtils.isBlank(m.getCategory())
-                    ||StringUtils.isBlank(m.getZdPrice())
-                    ||StringUtils.isBlank(m.getPrice())
-                    ||StringUtils.isBlank(m.getId())
-                    ||StringUtils.isBlank(m.getBrand())){
-                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝绗��"+(num)+"銆戣鏁版嵁鏃犳晥锛岃妫�鏌ヨ緭鍏ワ紒");
             }
             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){
-                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝绗��"+(num)+"銆戣鍟嗗搧鍥剧墖鏂囦欢澶归噸澶嶏紝璇锋鏌ヨ緭鍏ワ紒");
+            if(g == null){
+                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝绗��"+(num)+"銆戣鍟嗗搧涓嶅瓨鍦紝璇锋鏌ヨ緭鍏ワ紒");
             }
-            Category cate = new Category();
-            cate.setIsdeleted(Constants.ZERO);
-            cate.setName(m.getCategory());
-            //鍝佺被鏁版嵁
-            cate = categoryMapper.selectOne(new QueryWrapper<>(cate).last(" limit 1"));
-            if(cate == null){
-                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝绗��"+(num)+"銆戣鍟嗗搧绫诲埆鏃犳晥锛岃妫�鏌ヨ緭鍏ワ紒");
-            }
-            Brand brand = new Brand();
-            brand.setIsdeleted(Constants.ZERO);
-            brand.setName(m.getBrand());
-            //鍝佺被鏁版嵁
-            brand = brandMapper.selectOne(new QueryWrapper<>(brand).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()+"銆戝凡瀛樺湪");
-            };
+
             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.setCreateDate(new Date());
-            newModel.setName(m.getName());
-            newModel.setStatus(Constants.ZERO);
-            try {
-                newModel.setZdPrice(BigDecimal.valueOf(Double.parseDouble(m.getZdPrice())));
-                newModel.setPrice(BigDecimal.valueOf(Double.parseDouble(m.getPrice())));
-            }catch (Exception e){
+            newModel.setId(g.getId());
+            newModel.setEditor(user.getId());
+            newModel.setEditDate(new Date());
 
-            }
-            if(newModel.getZdPrice() == null){
-                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝绗��"+(num)+"銆戣鎸囧浠锋棤鏁堬紝璇锋鏌ヨ緭鍏ワ紒");
-            }
-            if(newModel.getPrice() == null){
-                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝绗��"+(num)+"銆戣鍏ユ墜浠锋棤鏁堬紝璇锋鏌ヨ緭鍏ワ紒");
-            }
-            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();
@@ -828,16 +1047,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();
@@ -847,12 +1058,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));
                                         }
                                     }
                                 }
@@ -862,56 +1068,13 @@
                 }
             }
             //鏌ヨ鍟嗗搧淇℃伅
-            goodsMapper.insert(newModel);
-            CateParam cp = new CateParam();
-            cp.setIsdeleted(Constants.ZERO);
-            cp.setCategoryId(cate.getId());
-            //鏌ヨ鍏ㄩ儴浜у搧鍙傛暟閰嶇疆
-            List<CateParam> allParams = cateParamMapper.selectList(new QueryWrapper<>(cp));
-            if(params.length > 0){
-                for(String s : params){
-                    if(StringUtils.isBlank(s)){
-                        continue;
-                    }
-                    s = s.replace("锛�",":");
-                    String[] ts = s.split(":");
-                    if(ts.length == 0){
-                        continue;
-                    }
-                    //鏌ヨ灞炴�ц鏍煎璞�
-                    CateParam ta = getCateParamByName(ts[0], allParams);
-                    if(ta == null){
-                        throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝绗��"+(num)+"銆戣浜у搧鍙傛暟涓��"+s+"銆戞棤鏁堬紝璇锋鏌ヨ緭鍏ワ紒");
-                    }
-                    GoodsParam gp = new GoodsParam();
-                    gp.setIsdeleted(Constants.ZERO);
-                    gp.setCreator(user.getId());
-                    gp.setCreateDate(newModel.getCreateDate());
-                    gp.setGoodsId(newModel.getId());
-                    gp.setName(ta.getName());
-                    gp.setPramaId(ta.getId());
-                    gp.setStatus(Constants.ZERO);
-                    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);
-                    };
-                }
-            }
+            goodsMapper.updateById(newModel);
             if(mulFiles !=null && mulFiles.size()>0){
+                multifileMapper.update(null,new UpdateWrapper<Multifile>().lambda()
+                        .set(Multifile::getIsdeleted,Constants.ONE)
+                        .eq(Multifile::getIsdeleted,Constants.ZERO)
+                        .eq(Multifile::getObjId,g.getId())
+                        .eq(Multifile::getType,Constants.ZERO));
                 for(int i=0;i<mulFiles.size();i++){
                     String s = mulFiles.get(i);
                     Multifile f = new Multifile();
@@ -923,6 +1086,7 @@
                     f.setCreator(newModel.getCreator());
                     f.setIsdeleted(Constants.ZERO);
                     f.setSortnum(i);
+                    f.setCompanyId(user.getCompanyId());
                     f.setFileurl(s);
                     multifileMapper.insert(f);
                 }
@@ -932,6 +1096,9 @@
         return  num;
 
     }
+
+
+
 
     private boolean isImgFile(File f) {
         if(f!=null && f.isFile() ){
@@ -1018,6 +1185,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");
@@ -1031,7 +1199,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())));
             });
@@ -1084,31 +1255,70 @@
         queryWrapper.eq(Goods::getIsdeleted,Constants.ZERO);
 
         queryWrapper.eq(!Objects.isNull(pageWrap.getModel()) && !Objects.isNull(pageWrap.getModel().getCategoryId()), Goods::getCategoryId, pageWrap.getModel().getCategoryId())
+                .eq(!Objects.isNull(pageWrap.getModel()) && !Objects.isNull(pageWrap.getModel().getSubCategoryId()), Goods::getSubCategoryId, pageWrap.getModel().getSubCategoryId())
                 .eq(!Objects.isNull(pageWrap.getModel()) && !Objects.isNull(pageWrap.getModel().getBrandId()), Goods::getBrandId, pageWrap.getModel().getBrandId())
                 .and(!Objects.isNull(pageWrap.getModel()) && StringUtils.isNotBlank(pageWrap.getModel().getKeyword()),
                         i->i.like(Goods::getPinyin,pageWrap.getModel().getKeyword())
                                 .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);
     }
 
+    private void validateSubCategory(Goods goods) {
+        if (goods.getSubCategoryId() == null) {
+            return;
+        }
+        Category sub = categoryMapper.selectById(goods.getSubCategoryId());
+        if (sub == null || sub.getParentId() == null || !sub.getParentId().equals(goods.getCategoryId())) {
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "浜岀骇绫诲埆蹇呴』灞炰簬鎵�閫変竴绾у搧绫�");
+        }
+    }
+
+
+
+    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>()
+                .lambda().in(Multifile::getObjId,integerList)
+                .eq(Multifile::getType,Constants.ZERO)
+                .eq(Multifile::getIsdeleted,Constants.ZERO)
+                .eq(Multifile::getObjType,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);
@@ -1120,7 +1330,9 @@
         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.getSubCategoryId()), Goods::getSubCategoryId, goodsRequest.getSubCategoryId())
                 .eq(!Objects.isNull(goodsRequest) && !Objects.isNull(goodsRequest.getBrandId()), Goods::getBrandId, goodsRequest.getBrandId())
                 .and(!Objects.isNull(goodsRequest) && StringUtils.isNotBlank(goodsRequest.getKeyword()),
                         i->i.like(Goods::getPinyin,goodsRequest.getKeyword())
@@ -1133,15 +1345,23 @@
                 .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 ")));
-        });
+        if(!Objects.isNull(goodsList)&&goodsList.size()>Constants.ZERO){
+            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);
+    }
 }
 

--
Gitblit v1.9.3