From dce1e83ec27a066ebc6c17a4ac6d03c9ad6ff703 Mon Sep 17 00:00:00 2001
From: doum <doum>
Date: 星期五, 12 十二月 2025 14:21:39 +0800
Subject: [PATCH] 经销商管理

---
 server/dmmall_service/src/main/java/com/doumee/service/business/impl/GoodsServiceImpl.java |  318 ++++++++++++++++++++++++++++++++++++++++++----------
 1 files changed, 256 insertions(+), 62 deletions(-)

diff --git a/server/dmmall_service/src/main/java/com/doumee/service/business/impl/GoodsServiceImpl.java b/server/dmmall_service/src/main/java/com/doumee/service/business/impl/GoodsServiceImpl.java
index e3eee49..3559a14 100644
--- a/server/dmmall_service/src/main/java/com/doumee/service/business/impl/GoodsServiceImpl.java
+++ b/server/dmmall_service/src/main/java/com/doumee/service/business/impl/GoodsServiceImpl.java
@@ -101,61 +101,191 @@
     private UploadFileService uploadFileService;
 
     @Override
+    @Transactional(rollbackFor = {Exception.class,BusinessException.class})
     public Integer create(Goods goods) {
         LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
         isCreateParamValid(goods, user);
-
+        Date date =new Date();
         goods.setIsdeleted(Constants.ZERO);
-        goods.setCreateDate(new Date());
+        goods.setCreateDate(date);
         goods.setCreator(user.getId());
+        goods.setEditDate(date);
+        goods.setEditor(user.getId());
         goods.setStatus(Constants.ONE);
         goods.setIsrec(Constants.ZERO);
         if(StringUtils.isNotBlank(goods.getLabels())){
             goods.setLabels(  StringUtils.removeEnd( goods.getLabels().replace("锛�",","),","));
         }
         goodsMapper.insert(goods);
-        dealBatchMultiFiles(goods, goods.getFileList(), user);
+        dealDefaultGoodsSku(goods);
+        dealBatchMultiFiles(goods, goods.getFileList(), user,false);
         return goods.getId();
     }
+    private void dealDefaultGoodsSku(Goods goods) {
+        Date date = goods.getEditDate();
+        Integer userId = goods.getEditor();
+        Sku sku = new Sku();
+        sku.setIsdeleted(Constants.ZERO);
+        sku.setCreateDate(date);
+        sku.setCreator(userId);
+        sku.setEditDate(date);
+        sku.setEditor(userId);
+        sku.setGoodsId(goods.getId());
+        sku.setName("榛樿");
+        sku.setSortnum(0);
+        skuMapper.insert(sku);
 
-    public void dealBatchMultiFiles(Goods goods, List<Multifile> fileList, LoginUserInfo user) {
+        SkuAttr skuAttr = new SkuAttr();
+        skuAttr.setIsdeleted(Constants.ZERO);
+        skuAttr.setCreateDate(date);
+        skuAttr.setCreator(userId);
+        skuAttr.setEditDate(date);
+        skuAttr.setEditor(userId);
+        skuAttr.setSkuId(sku.getId());
+        skuAttr.setName("榛樿");
+        skuAttr.setSortnum(0);
+        skuAttrMapper.insert(skuAttr);
+
+        GoodsSku goodsSku = new GoodsSku();
+        goodsSku.setIsdeleted(Constants.ZERO);
+        goodsSku.setCreateDate(date);
+        goodsSku.setCreator(userId);
+        goodsSku.setEditDate(date);
+        goodsSku.setEditor(userId);
+        goodsSku.setSkuId(sku.getId());
+        goodsSku.setGoodsId(goods.getId());
+        goodsSku.setName(goods.getName());
+        goodsSku.setPrice(goods.getSkuPrice());
+        goodsSku.setShowPrice(goods.getPrice());
+        goodsSku.setStock(goods.getStockNum());
+        goodsSku.setIntegralRate(goods.getDeductRata());
+        goodsSku.setUnitName(goods.getUnitName());
+        goodsSku.setWeight(goods.getWeight());
+        goodsSku.setImgurl(goods.getImgurl());
+        goodsSku.setStatus(goods.getStatus());
+        goodsSkuMapper.insert(goodsSku);
+
+        GoodsSkuAttr goodsSkuAttr = new GoodsSkuAttr();
+        goodsSkuAttr.setIsdeleted(Constants.ZERO);
+        goodsSkuAttr.setCreateDate(date);
+        goodsSkuAttr.setCreator(userId);
+        goodsSkuAttr.setEditDate(date);
+        goodsSkuAttr.setEditor(userId);
+        goodsSkuAttr.setSkuId(sku.getId());
+        goodsSkuAttr.setGoodsSkuId(goodsSku.getId());
+        goodsSkuAttr.setSkuAttrId(skuAttr.getId());
+        goodsSkuAttrMapper.insert(goodsSkuAttr);
+    }
+
+    public void dealBatchMultiFiles(Goods goods, List<Multifile> fileList, LoginUserInfo user,boolean update) {
         Date today = new Date();
-        Multifile del = new Multifile();
-        del.setObjId(goods.getId());
-        multifileMapper.delete(new QueryWrapper<>(del));
-        fileList.stream().forEach(s -> {
-            s.setIsdeleted(Constants.ZERO);
-            s.setCreator(user.getId());
-            s.setCreateDate(today);
-            s.setObjId(goods.getId());
-            s.setType(Constants.ZERO);
-            s.setObjType(Constants.MultiFile.PLATFORM_GOOD_ROTATION.getKey());
-            multifileMapper.insert(s);
-         /*   if(Constants.equalsInteger(goods.getType(),Constants.ZERO)){
-                //骞冲彴鍟嗗煄
+        //娓呯┖鍘熸湁鐨�
+        if(update){
+            multifileMapper.delete(new UpdateWrapper<Multifile>().lambda()
+                    .eq(Multifile::getIsdeleted,Constants.ZERO)
+                    .eq(Multifile::getObjId,goods.getId()));
+        }
+        if(fileList!=null && fileList.size()>0){
+            List<Multifile> multifileList = new ArrayList<>();
+            fileList.stream().forEach(s -> {
+                if(StringUtils.isNotBlank(s.getFileurl())){
+                    s.setIsdeleted(Constants.ZERO);
+                    s.setCreator(user.getId());
+                    s.setCreateDate(today);
+                    s.setObjId(goods.getId());
+                    s.setType(Constants.ZERO);
+                    s.setObjType(Constants.MultiFile.PLATFORM_GOOD_ROTATION.getKey());
+                    multifileList.add(s);
+                }
+            });
+            if(multifileList.size()>0){
+                multifileMapper.insert(multifileList);
             }
-            if(Constants.equalsInteger(goods.getType(),Constants.ONE)){
-                //鍜栬眴鍟嗗煄
-            }
-
-            if(Constants.equalsInteger(goods.getType(),Constants.TWO)){
-                //鍜栧暋璁″垝鍟嗗搧
-            }*/
-        });
-
+        }
     }
 
     public void isCreateParamValid(Goods goods, LoginUserInfo user) {
             //骞冲彴鍟嗗煄
             if (StringUtils.isBlank(goods.getName())
                     || goods.getCategoryId() == null
+                    || goods.getBrandList() == null
+                    || goods.getBrandList().size() == 0
+                    || goods.getWeight() == null
+                    || goods.getPrice() == null
+                    || goods.getSkuPrice() == null
                     || StringUtils.isBlank(goods.getImgurl())
-                    || org.apache.commons.collections.CollectionUtils.isEmpty(goods.getFileList())
-            ) {
+                    || org.apache.commons.collections.CollectionUtils.isEmpty(goods.getFileList())) {
                 throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), ResponseStatus.BAD_REQUEST.getMessage());
             }
 
+            //鏌ヨ鍒嗙被
+            Labels cate = labelsMapper.selectById(goods.getCategoryId());
+            if(cate == null || Constants.equalsInteger(cate.getIsdeleted(),Constants.ONE)
+                            ||! Constants.equalsInteger(cate.getType(),Constants.LabelsType.GOODSTYPE.getKey())){
+                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀵逛笉璧凤紝鍒嗙被淇℃伅涓嶅瓨鍦�");
+            }
+            if(goods.getBrandId()!=null){
+                Labels brand = labelsMapper.selectById(goods.getCategoryId());
+                if(brand == null || Constants.equalsInteger(brand.getIsdeleted(),Constants.ONE)
+                        ||! Constants.equalsInteger(brand.getType(),Constants.LabelsType.GOODSBRAND.getKey())){
+                    throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀵逛笉璧凤紝鍝佺墝淇℃伅涓嶅瓨鍦�");
+                }
+            }
+            List<Integer> bIds = new ArrayList<>();
+            for(Labels b : goods.getBrandList()){
+                bIds.add(b.getId());
+                if(b.getChildIdList() == null || b.getChildIdList().size() ==0){
+                    bIds.addAll(b.getChildIdList());
+                }
+            }
+            List<String> idsBrand = new ArrayList<>();
+            List<String> idsSerial = new ArrayList<>();
+            //鏌ヨ鍏ㄩ儴閫傜敤鍝佺墝鍜岀郴鍒楁暟鎹�
+            List<Labels> allBrands = labelsMapper.selectList(new QueryWrapper<Labels>().lambda()
+                    .in(Labels::getId,bIds)
+                    .eq(Labels::getIsdeleted,Constants.ZERO)
+            );
+            for(Labels b : goods.getBrandList()){
+                 Labels tb = findLabelFromListByid(allBrands,b.getId(),Constants.LabelsType.APPLICABLE_BRAND.getKey(),null);
+                 if(tb == null){
+                     throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀵逛笉璧凤紝璇烽�夋嫨姝g‘鐨勯�傜敤鍝佺墝");
+                 }
+                 idsBrand.add("["+b.getId()+"]");
+                if(b.getChildIdList() == null || b.getChildIdList().size() ==0){
+                   for(Integer c :b.getChildIdList()){
+                       Labels cb = findLabelFromListByid(allBrands,b.getId(),Constants.LabelsType.SERIES_BRAND.getKey(),b.getId());
+                       if(cb == null){
+                           throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀵逛笉璧凤紝鍝佺墝銆�"+tb.getName() +"銆戜笅鎵�灞炵郴鍒椾笉姝g‘");
+                       }
+                       idsSerial.add("["+c+"]");
+                   }
+                }
+            }
+            goods.setBrandIds(String.join(",",idsBrand));
+            if(idsSerial.size()>0){
+                goods.setSerialIds(String.join(",",idsSerial));
+            }
 
+    }
+
+    private Labels findLabelFromListByid(List<Labels> allBrands, Integer id, int type,Integer parentId) {
+        if(allBrands == null || allBrands.size() ==0){
+            return  null;
+        }
+        for(Labels labels:allBrands){
+            if(!Constants.equalsInteger(id,labels.getId())){
+                return null;
+            }
+            if(!Constants.equalsInteger(type,labels.getType())){
+                return null;
+            }
+            if(parentId !=null && !Constants.equalsInteger(parentId,labels.getParentId())){
+                return null;
+            }
+            return labels;
+        }
+
+        return  null;
     }
 
     @Override
@@ -216,6 +346,7 @@
 
 
     @Override
+    @Transactional(rollbackFor = {Exception.class,BusinessException.class})
     public void updateById(Goods goods) {
         LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
         Goods query=goodsMapper.selectById(goods.getId());
@@ -229,7 +360,17 @@
             goods.setLabels(  StringUtils.removeEnd( goods.getLabels().replace("锛�",","),","));
         }
         goodsMapper.updateById(goods);
-        dealBatchMultiFiles(goods, goods.getFileList(), user);
+        //娓呯┖鍘熸湁鐨剆ku鏁版嵁
+        skuMapper.update(null,new UpdateWrapper<Sku>().lambda()
+                .set(Sku::getIsdeleted,Constants.ONE)
+                .eq(Sku::getIsdeleted,Constants.ZERO)
+                .eq(Sku::getGoodsId,goods.getSkuId()));
+        goodsSkuMapper.update(null,new UpdateWrapper<GoodsSku>().lambda()
+                .set(GoodsSku::getIsdeleted,Constants.ONE)
+                .eq(GoodsSku::getIsdeleted,Constants.ZERO)
+                .eq(GoodsSku::getGoodsId,goods.getSkuId()));
+        dealDefaultGoodsSku(goods);//鏂板缓sku淇℃伅
+        dealBatchMultiFiles(goods, goods.getFileList(), user,true);
     }
 
 
@@ -389,11 +530,14 @@
 
         queryWrapper.eq(Goods::getId,id);
         queryWrapper.selectAll(Goods.class);
-        queryWrapper.select("(select name from labels  where  id=t1.parent_id) as categoryName");
-        queryWrapper.selectAs(Labels::getName ,Goods::getBrandName);
+        queryWrapper.select("t1.name",Goods::getCategoryName);
+        queryWrapper.select("t2.name" ,Goods::getBrandName);
         queryWrapper.leftJoin(Labels.class,Labels::getId,Goods::getCategoryId);
+        queryWrapper.leftJoin(Labels.class,Labels::getId,Goods::getBrandId);
         Goods goods=goodsAdminJoinMapper.selectJoinOne(Goods.class,queryWrapper);
-
+        if(goods == null){
+            throw  new BusinessException(ResponseStatus.DATA_EMPTY);
+        }
         Multifile find = new Multifile();
         find.setObjId(id);
         find.setIsdeleted(Constants.ZERO);
@@ -406,7 +550,64 @@
         queryGoodsSku.setIsdeleted(Constants.ZERO);
         List<GoodsSku> goodsSkuList=goodsSkuMapper.selectList(new QueryWrapper<>(queryGoodsSku));
         goods.setGoodsSkuList(goodsSkuList);
+        if(goodsSkuList.size()>0){
+            //榛樿sku淇℃伅
+            GoodsSku goodsSku = goodsSkuList.get(0);
+            goods.setSkuPrice(goodsSku.getPrice());
+            goods.setWeight(goodsSku.getWeight());
+            goods.setStockNum(goodsSku.getStock());
+            goods.setUnitName(goodsSku.getUnitName());
+        }
+
+        initGoodsApplyBrandAndSerial(goods);
         return goods;
+    }
+
+    private void initGoodsApplyBrandAndSerial(Goods goods) {
+        List<Integer> idbrandList = getNumIdByIdsString(goods.getBrandIds());
+        List<Integer> idSerailList = getNumIdByIdsString(goods.getSerialIds());
+        if(idbrandList.size()>0){
+            List<Labels> brandList = new ArrayList<>();
+            List<Integer> allIds = new ArrayList<>();
+            allIds.addAll(idbrandList);
+            if(idSerailList.size()>0){
+                allIds.addAll(idSerailList);
+            }
+            List<Labels> allBrands = labelsMapper.selectList(new QueryWrapper<Labels>().lambda()
+                    .in(Labels::getId,allIds)
+                    .eq(Labels::getIsdeleted,Constants.ZERO)
+            );
+            for(Integer b : idbrandList){
+                Labels tb = findLabelFromListByid(allBrands,b,Constants.LabelsType.APPLICABLE_BRAND.getKey(),null);
+                if(tb != null){
+                    brandList.add(tb);
+                    tb.setChildIdList(new ArrayList<>());
+                    tb.setChildList(new ArrayList<>());
+                    for(Integer c : idSerailList) {
+                        Labels cb = findLabelFromListByid(allBrands, c, Constants.LabelsType.SERIES_BRAND.getKey(), b);
+                        if (cb != null) {
+                            tb.getChildIdList().add(c);
+                            tb.getChildList().add(cb);
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    private List<Integer> getNumIdByIdsString(String brandIds) {
+        List<Integer> idbrandList  = new ArrayList<>();
+        if(StringUtils.isNotBlank(brandIds)){
+            String[] idsBrand = brandIds.replace("[","").replace("]", "").split(",");
+            try {
+                for(String s :idsBrand){
+                    idbrandList.add(Integer.parseInt(s));
+                }
+            }catch (Exception e){
+
+            }
+        }
+        return idbrandList;
     }
 
 
@@ -512,8 +713,13 @@
         Utils.MP.blankToNull(pageWrap.getModel());
 
         queryWrapper.selectAll(Goods.class);
-        queryWrapper.selectAs(Labels::getName, Goods::getCategoryName);
-        queryWrapper.select("ls.name as parentName ");
+
+        queryWrapper.select("t1.name",Goods::getCategoryName);
+        queryWrapper.select("t2.name" ,Goods::getBrandName);
+        queryWrapper.select("t3.name" ,Goods::getParentName);
+        queryWrapper.leftJoin(Labels.class,Labels::getId,Goods::getCategoryId);
+        queryWrapper.leftJoin(Labels.class,Labels::getId,Goods::getBrandId);
+        queryWrapper.leftJoin(Labels.class,Labels::getId,Goods::getParentCategoryId);
         //搴撳瓨閲�
          queryWrapper.select("(select sum(STOCK) from goods_sku where ISDELETED=0 and GOODS_ID=t.id) as stockNum ");
         //瀹為檯閿�閲�
@@ -522,16 +728,12 @@
                 "        INNER JOIN goodsorder go on go.id=gd.ORDER_ID and go.ISDELETED=0 and go.PAY_STATUS=1 " +
                 "  where  gs.GOODS_ID=t.id) as salesVolume ");
 
-        queryWrapper.leftJoin(Labels.class, Labels::getId, Goods::getCategoryId);
-        queryWrapper.leftJoin("labels ls on ls.id=t.PARENT_CATEGORY_ID");
-
         if (Constants.equalsInteger(pageWrap.getModel().getTabStatus(), Constants.TWO)) {
             //宸插敭缃�
             queryWrapper.exists("select gs.STOCK  from goods_sku gs " +
                     " INNER JOIN goods g on  g.id=gs.GOODS_ID " +
                     " where gs.STOCK<=0 and gs.ISDELETED=0 and g.id=t.id ");
         }
-
         queryWrapper.eq(!Constants.equalsInteger(pageWrap.getModel().getTabStatus(), 3), Goods::getIsdeleted, Constants.ZERO);
         queryWrapper.eq(Constants.equalsInteger(pageWrap.getModel().getTabStatus(), 3), Goods::getIsdeleted, Constants.ONE);
 
@@ -571,32 +773,24 @@
         if (list == null || list.size() == 0) {
             return;
         }
-        Multifile multifile=new Multifile();
-
         String path = systemDictDataBiz.queryByCode(Constants.OSS, Constants.RESOURCE_PATH).getCode() + systemDictDataBiz.queryByCode(Constants.OSS, Constants.GOODS_FILE).getCode();
-        for (Goods model : list) {
-            multifile.setIsdeleted(Constants.ZERO);
-            multifile.setObjId(model.getId());
-            List<Multifile> fileList=multifileMapper.selectList(new QueryWrapper<>(multifile));
-            for(Multifile file:fileList){
-                if(StringUtils.isNotBlank(file.getFileurl())){
-                    file.setFileFullUrl(path+file.getFileurl());
-                }
-            }
-            model.setFileList(fileList);
-            model.setResourcePath(path);
-
+        for (Goods goods : list) {
+            goods.setResourcePath(path);
             //鏌ヨsku
-            MPJLambdaWrapper<GoodsSku> queryWrapper = new MPJLambdaWrapper<>();
-            queryWrapper.eq(GoodsSku::getIsdeleted,Constants.ZERO);
-            queryWrapper.eq(GoodsSku::getGoodsId,model.getId());
-            List<GoodsSku> gsList=goodsSkuMapper.selectList(queryWrapper);
-           for(GoodsSku sd:gsList){
-               if(StringUtils.isNotBlank(sd.getImgurl())){
-                 sd.setImgurl(path+sd.getImgurl());
-               }
-           }
-            model.setGoodsSkuList(gsList);
+            MPJLambdaWrapper<GoodsSku> queryWrapper = new MPJLambdaWrapper<GoodsSku>()
+                     .eq(GoodsSku::getIsdeleted,Constants.ZERO)
+                    .last("limit 1")
+                     .eq(GoodsSku::getGoodsId,goods.getId());
+            GoodsSku goodsSku = goodsSkuMapper.selectOne(queryWrapper);
+            goods.setGoodsSkuList(new ArrayList<>());
+            if(goodsSku !=null){
+                goods.getGoodsSkuList().add(goodsSku);
+                //榛樿sku淇℃伅
+                goods.setSkuPrice(goodsSku.getPrice());
+                goods.setWeight(goodsSku.getWeight());
+                goods.setStockNum(goodsSku.getStock());
+                goods.setUnitName(goodsSku.getUnitName());
+            }
         }
     }
 

--
Gitblit v1.9.3