mitao
2025-01-17 afa0dbb4f54e7244835dd67ec33c3e545f122f71
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,7 +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;
@@ -151,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);
@@ -178,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());
@@ -190,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())){
@@ -219,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());
@@ -244,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;
    }
    /**
     * 修改商户商品
@@ -334,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)){
@@ -345,6 +375,16 @@
            }
            //删除历史数据
            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){
                throw new ServiceException(AppErrorConstant.GOODS_DOUBLE);
@@ -357,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());
@@ -381,9 +422,9 @@
            goodsDetail = new String(decodedBytes, StandardCharsets.UTF_8);
            goods.setGoodsDetail(goodsDetail);
        }
        goods.setRecommendFlag(mgtGoodsEditDto.getRecommendFlag());
        goods.setRecommendFlag(0);
        goods.setGoodsNurses(mgtGoodsEditDto.getGoodsNurses());
        goods.setGoodsTags(mgtGoodsEditDto.getGoodsNurses());
        goods.setGoodsTags(mgtGoodsEditDto.getGoodsTags());
        this.saveOrUpdate(goods);
        //商品图片视频处理
        final String goodsIdFinal = goodsId;
@@ -400,6 +441,8 @@
            goodsTotal.setBuyMoneyTotal(new BigDecimal("0.00"));
            goodsTotalService.saveOrUpdate(goodsTotal);
        }
        //更新商品分类统计
        remoteConfigService.changeClassNum(mgtClassNumDto);
    }
    /**
@@ -478,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);
        }
    }
    /**
@@ -533,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());
    }
@@ -561,11 +610,17 @@
            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;
@@ -583,6 +638,9 @@
        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(",");
@@ -591,7 +649,7 @@
                    mgtGoodsEditInfoVo.setGoodsPicture(goodsFile.getFileUrl());
                }else if(goodsFile.getFileType()==2){
                    mgtGoodsEditInfoVo.setGoodsVideo(goodsFile.getFileUrl());
                }else if(goodsFile.getFileType()==2){
                }else if(goodsFile.getFileType()==3){
                    goodsBannersSj.add(goodsFile.getFileUrl());
                }
            }
@@ -601,4 +659,17 @@
        }
        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;
    }
}