From afa0dbb4f54e7244835dd67ec33c3e545f122f71 Mon Sep 17 00:00:00 2001
From: mitao <2763622819@qq.com>
Date: 星期五, 17 一月 2025 16:40:43 +0800
Subject: [PATCH] bug修改

---
 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/goods/GoodsServiceImpl.java |  137 +++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 124 insertions(+), 13 deletions(-)

diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/goods/GoodsServiceImpl.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/goods/GoodsServiceImpl.java
index ff358d3..e66d55a 100644
--- a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/goods/GoodsServiceImpl.java
+++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/goods/GoodsServiceImpl.java
@@ -9,7 +9,7 @@
 import com.ruoyi.common.core.utils.uuid.IdUtils;
 import com.ruoyi.common.security.utils.CodeFactoryUtil;
 import com.ruoyi.goods.domain.dto.*;
-import com.ruoyi.goods.domain.pojo.activity.Activity;
+import com.ruoyi.system.api.domain.poji.activity.Activity;
 import com.ruoyi.goods.domain.pojo.goods.GoodsTotal;
 import com.ruoyi.goods.domain.vo.*;
 import com.ruoyi.goods.mapper.goods.GoodsMapper;
@@ -22,6 +22,9 @@
 import com.ruoyi.goods.service.goods.ShopGoodsService;
 import com.ruoyi.system.api.constant.AppErrorConstant;
 import com.ruoyi.system.api.domain.dto.AppActivityGoodsPageDto;
+import com.ruoyi.system.api.domain.dto.MerGoodsPriceListDto;
+import com.ruoyi.system.api.domain.dto.MgtBaseGetDto;
+import com.ruoyi.system.api.domain.dto.MgtClassNumDto;
 import com.ruoyi.system.api.domain.poji.activity.ActivityGoods;
 import com.ruoyi.system.api.domain.poji.config.SysClassification;
 import com.ruoyi.system.api.domain.poji.goods.Goods;
@@ -34,6 +37,7 @@
 
 import javax.annotation.Resource;
 import java.math.BigDecimal;
+import java.nio.charset.StandardCharsets;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -149,7 +153,7 @@
             BigDecimal salesPercent = BigDecimal.ZERO;
             // 计算销售百分比
             if (activityNumber != 0) {
-                salesPercent = BigDecimal.valueOf(salesNumber).multiply(BigDecimal.valueOf(100)).divide(BigDecimal.valueOf(activityNumber), 2, BigDecimal.ROUND_HALF_UP);
+                salesPercent = BigDecimal.valueOf(salesNumber).multiply(BigDecimal.valueOf(100)).divide(BigDecimal.valueOf(activityNumber),2, BigDecimal.ROUND_HALF_UP);
             }
             // 设置销售百分比和时间戳
             appSimpleActivityGoodsVo.setSalesPercent(salesPercent);
@@ -176,11 +180,14 @@
         ShopGoods shopGoods = shopGoodsService.getByShopIdAndGoodsId(appGoodsInfoGetDto.getShopId(),goods.getGoodsId());
         if(shopGoods!=null){
             appGoodsInfoVo.setSalesPrice(shopGoods.getSalesPrice());
-            appGoodsInfoVo.setSalesNum(shopGoods.getServiceNum());
+            appGoodsInfoVo.setServiceNum(shopGoods.getServiceNum());
         }
+        GoodsTotal goodsTotal = goodsTotalService.getById(goods.getGoodsId());
+        appGoodsInfoVo.setSalesNum(goodsTotal.getBuyNumCount());
         //活动商品判断
         if(appGoodsInfoGetDto.getActivityFlag()==1){
             ActivityGoods activityGoods = activityGoodsService.getByGoodsId(appGoodsInfoGetDto.getActivityId(),goods.getGoodsId());
+            Activity activity = activityService.getById(appGoodsInfoGetDto.getActivityId());
             //原价取较大值
             if(shopGoods!=null&&goods.getSalesPrice().compareTo(shopGoods.getSalesPrice())>0){
                 appGoodsInfoVo.setSalesPrice(goods.getSalesPrice());
@@ -188,8 +195,9 @@
             appGoodsInfoVo.setActivityFlag(1);
             appGoodsInfoVo.setActivityPrice(activityGoods.getActivityPrice());
             appGoodsInfoVo.setSalesNum(activityGoods.getSalesNumber());
-            appGoodsInfoVo.setActivityDeadline(activityGoods.getActivityDeadline());
-            appGoodsInfoVo.setTimestamp(activityGoods.getActivityDeadline().getTime());
+            appGoodsInfoVo.setActivityStartTime(activity.getActivityStartTime());
+            appGoodsInfoVo.setActivityDeadline(activity.getActivityEndTime());
+            appGoodsInfoVo.setTimestamp(activity.getActivityEndTime().getTime());
             Integer availableBuyNum = 0;
             //售罄判断
             if(activityGoods.getActivityNumber().equals(activityGoods.getSalesNumber())){
@@ -217,7 +225,9 @@
         List<String> bannerList = new ArrayList<>();
         if(goodsFileList!=null&&!goodsFileList.isEmpty()){
             for(GoodsFile goodsFile : goodsFileList){
-                if(goodsFile.getFileType()==2){
+                if(goodsFile.getFileType()==1){
+                    appGoodsInfoVo.setGoodsPicture(goodsFile.getFileUrl());
+                }else if(goodsFile.getFileType()==2){
                     appGoodsInfoVo.setGoodsVideo(goodsFile.getFileUrl());
                 }else if(goodsFile.getFileType()==3){
                     bannerList.add(goodsFile.getFileUrl());
@@ -242,6 +252,19 @@
 
     }
 
+    /**
+     * @description  获取确认次数周期商品
+     * @author  jqs
+     * @date    2023/7/31 16:49
+     * @param shopId
+     * @return  List<MerGoodsPageVo>
+     */
+    @Override
+    public List<MerGoodsPageVo> listMerCycleGoods (Long shopId){
+        List<MerGoodsPageVo> merGoodsPageVoList = goodsMapper.listMerCycleGoods(shopId);
+        return merGoodsPageVoList;
+
+    }
 
     /**
      * 修改商户商品
@@ -332,6 +355,15 @@
         Boolean newGoods = false;
         String goodsId = mgtGoodsEditDto.getGoodsId();
         Goods goodsSame = this.getOne(new LambdaQueryWrapper<Goods>().eq(Goods::getDelFlag,0).eq(Goods::getGoodsName,mgtGoodsEditDto.getGoodsName()));
+        // 创建MgtClassNumDto对象
+        MgtClassNumDto mgtClassNumDto = new MgtClassNumDto();
+        if(mgtGoodsEditDto.getGoodsType()!=1){
+            mgtGoodsEditDto.setCycleNumFlag(1);
+        }else{
+            if(mgtGoodsEditDto.getCycleNumFlag()==null){
+                throw new ServiceException("周期商品需选择是否明确次数");
+            }
+        }
         // 判断是否有商品ID 没有则新建
         if (StringUtils.isNotBlank(goodsId)) {
             if(goodsSame!=null&&!Objects.equals(goodsSame.getGoodsId(), goodsId)){
@@ -340,6 +372,18 @@
             goods = this.getById(goodsId);
             if(goods.getGoodsStatus()==-1){
                 throw new ServiceException(AppErrorConstant.GOODS_DELETED);
+            }
+            //删除历史数据
+            goodsFileService.deleteByGoodsId(goodsId);
+            // 如果类别ID不为空并且文章的类别ID不为空并且类别ID不同,则设置子类别ID和新增类别ID
+            if (mgtGoodsEditDto.getGoodsClassId() != null && goods.getGoodsClassId() != null
+                    && !mgtGoodsEditDto.getGoodsClassId().equals(goods.getGoodsClassId())) {
+                mgtClassNumDto.setSubClassId(goods.getGoodsClassId());
+                mgtClassNumDto.setAddClassId(mgtGoodsEditDto.getGoodsClassId());
+            }
+            // 如果类别ID不为空并且文章的类别ID为空,则设置新增类别ID
+            else if (mgtGoodsEditDto.getGoodsClassId() != null && goods.getGoodsClassId() == null) {
+                mgtClassNumDto.setAddClassId(mgtGoodsEditDto.getGoodsClassId());
             }
         } else {
             if(goodsSame!=null){
@@ -353,6 +397,7 @@
             goods.setCreateTime(new Date());
             goods.setCreateUserId(mgtGoodsEditDto.getUserId());
             newGoods = true;
+            mgtClassNumDto.setAddClassId(mgtGoodsEditDto.getGoodsClassId());
         }
         goods.setUpdateTime(new Date());
         goods.setUpdateUserId(mgtGoodsEditDto.getUserId());
@@ -371,10 +416,15 @@
             goods.setSubscriptionFlag(0);
         }
         goods.setSubscription(mgtGoodsEditDto.getSubscription());
-        goods.setGoodsDetail(mgtGoodsEditDto.getGoodsDetail());
-        goods.setRecommendFlag(mgtGoodsEditDto.getRecommendFlag());
+        String goodsDetail = mgtGoodsEditDto.getGoodsDetail();
+        if(StringUtils.isNotBlank(goodsDetail)){
+            byte[] decodedBytes = Base64.getDecoder().decode(goodsDetail);
+            goodsDetail = new String(decodedBytes, StandardCharsets.UTF_8);
+            goods.setGoodsDetail(goodsDetail);
+        }
+        goods.setRecommendFlag(0);
         goods.setGoodsNurses(mgtGoodsEditDto.getGoodsNurses());
-        goods.setGoodsTags(mgtGoodsEditDto.getGoodsNurses());
+        goods.setGoodsTags(mgtGoodsEditDto.getGoodsTags());
         this.saveOrUpdate(goods);
         //商品图片视频处理
         final String goodsIdFinal = goodsId;
@@ -391,6 +441,8 @@
             goodsTotal.setBuyMoneyTotal(new BigDecimal("0.00"));
             goodsTotalService.saveOrUpdate(goodsTotal);
         }
+        //更新商品分类统计
+        remoteConfigService.changeClassNum(mgtClassNumDto);
     }
 
     /**
@@ -469,6 +521,12 @@
         goods.setUpdateTime(new Date());
         goods.setUpdateUserId(userId);
         this.saveOrUpdate(goods);
+        if(goods.getGoodsClassId()!=null){
+            MgtClassNumDto mgtClassNumDto = new MgtClassNumDto();
+            mgtClassNumDto.setSubClassId(goods.getGoodsClassId());
+            //更新商品分类统计
+            remoteConfigService.changeClassNum(mgtClassNumDto);
+        }
     }
 
     /**
@@ -524,12 +582,12 @@
      * @description  通过id获取商品列表
      * @author  jqs
      * @date    2023/7/3 9:58
-     * @param goodsIds
+     * @param merGoodsPriceListDto
      * @return  List<MerGoodsPriceListVo>
      */
     @Override
-    public List<MerGoodsPriceListVo> listGoodsPriceByGoodsId(String goodsIds){
-        return goodsMapper.listGoodsPriceByGoodsId(goodsIds);
+    public List<MerGoodsPriceListVo> listGoodsPriceByGoodsId(MerGoodsPriceListDto merGoodsPriceListDto){
+        return goodsMapper.listGoodsPriceByGoodsId(merGoodsPriceListDto.getShopId(),merGoodsPriceListDto.getGoodsIds());
     }
 
 
@@ -552,13 +610,66 @@
             BigDecimal salesPercent = BigDecimal.ZERO;
             // 计算销售百分比
             if (activityNumber != 0) {
-                salesPercent = BigDecimal.valueOf(salesNumber).multiply(BigDecimal.valueOf(100)).divide(BigDecimal.valueOf(activityNumber), 2, BigDecimal.ROUND_HALF_UP);
+                salesPercent = BigDecimal.valueOf(salesNumber).multiply(BigDecimal.valueOf(100)).divide(BigDecimal.valueOf(activityNumber),2, BigDecimal.ROUND_HALF_UP);
             }
             // 设置销售百分比和时间戳
             appSimpleActivityGoodsVo.setSalesPercent(salesPercent);
             appSimpleActivityGoodsVo.setTimestamp(appSimpleActivityGoodsVo.getEndTime().getTime());
+            //限购判断
+            if(appSimpleActivityGoodsVo.getPurchaseLimitationFlag()==1){
+                Integer buyNum = activityRecordService.getUserActivityGoodsNum(appSimpleActivityGoodsVo.getGoodsId(),appActivityGoodsPageDto.getActivityId(),appActivityGoodsPageDto.getUserId());
+                Integer limitBuyNum = appSimpleActivityGoodsVo.getLimitNumber() - buyNum;
+                appSimpleActivityGoodsVo.setAvailableBuyNum(limitBuyNum);
+            }
         }
         // 返回结果
         return appSimpleGoodsVoList;
     }
+
+    /**
+     * @description  获取商品编辑详情
+     * @author  jqs
+     * @date    2023/7/11 16:48
+     * @param mgtBaseGetDto
+     * @return  MgtGoodsEditInfoVo
+     */
+    @Override
+    public MgtGoodsEditInfoVo getMgtGoodsEditInfo(MgtBaseGetDto mgtBaseGetDto){
+        MgtGoodsEditInfoVo mgtGoodsEditInfoVo = new MgtGoodsEditInfoVo();
+        Goods goods = this.getById(mgtBaseGetDto.getId());
+        BeanUtils.copyProperties(goods,mgtGoodsEditInfoVo);
+        if(goods.getSubscriptionFlag()==0){
+            mgtGoodsEditInfoVo.setSubscription(null);
+        }
+        List<GoodsFile> goodsFileList = goodsFileService.listByGoodsId(goods.getGoodsId());
+        if(goodsFileList!=null&&!goodsFileList.isEmpty()){
+            StringJoiner goodsBannersSj = new StringJoiner(",");
+            for(GoodsFile goodsFile : goodsFileList){
+                if(goodsFile.getFileType()==1){
+                    mgtGoodsEditInfoVo.setGoodsPicture(goodsFile.getFileUrl());
+                }else if(goodsFile.getFileType()==2){
+                    mgtGoodsEditInfoVo.setGoodsVideo(goodsFile.getFileUrl());
+                }else if(goodsFile.getFileType()==3){
+                    goodsBannersSj.add(goodsFile.getFileUrl());
+                }
+            }
+            if(goodsBannersSj!=null){
+                mgtGoodsEditInfoVo.setGoodsBanners(goodsBannersSj.toString());
+            }
+        }
+        return mgtGoodsEditInfoVo;
+    }
+
+    /**
+     * @description  获取商品分类名
+     * @author  jqs
+     * @date    2023/8/12 18:33
+     * @param classId
+     * @return  List<String>
+     */
+    @Override
+    public List<String> listGoodsNameByGoodsClass(Long classId){
+        List<String> goodsNameList = goodsMapper.listGoodsNameByGoodsClass(classId);
+        return goodsNameList;
+    }
 }

--
Gitblit v1.7.1