mitao
2025-01-17 afa0dbb4f54e7244835dd67ec33c3e545f122f71
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/goods/GoodsServiceImpl.java
@@ -3,31 +3,43 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.ruoyi.common.core.exception.ServiceException;
import com.ruoyi.common.core.utils.DateUtils;
import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.common.core.utils.bean.BeanUtils;
import com.ruoyi.common.core.utils.uuid.IdUtils;
import com.ruoyi.common.security.utils.CodeFactoryUtil;
import com.ruoyi.goods.domain.dto.*;
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;
import com.ruoyi.goods.service.activity.ActivityGoodsService;
import com.ruoyi.goods.service.activity.ActivityRecordService;
import com.ruoyi.goods.service.activity.ActivityService;
import com.ruoyi.goods.service.goods.GoodsFileService;
import com.ruoyi.goods.service.goods.GoodsService;
import com.ruoyi.goods.service.goods.GoodsTotalService;
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;
import com.ruoyi.system.api.domain.poji.goods.GoodsFile;
import com.ruoyi.system.api.domain.poji.goods.ShopGoods;
import com.ruoyi.goods.mapper.goods.GoodsMapper;
import com.ruoyi.goods.service.activity.ActivityGoodsService;
import com.ruoyi.goods.service.goods.GoodsFileService;
import com.ruoyi.goods.service.goods.GoodsService;
import com.ruoyi.goods.service.goods.ShopGoodsService;
import com.ruoyi.system.api.constant.AppErrorConstant;
import com.ruoyi.system.api.domain.poji.activity.ActivityGoods;
import com.ruoyi.system.api.domain.vo.MerGoodsPriceListVo;
import com.ruoyi.system.api.domain.vo.MgtSelectGoodsPageVo;
import com.ruoyi.system.api.service.RemoteConfigService;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.StringJoiner;
import java.nio.charset.StandardCharsets;
import java.util.*;
import java.util.stream.Collectors;
/**
 * <p>
@@ -55,15 +67,47 @@
    @Resource
    private RemoteConfigService remoteConfigService;
    @Resource
    private GoodsTotalService goodsTotalService;
    @Resource
    private ActivityService activityService;
    @Resource
    private ActivityRecordService activityRecordService;
    /**
     * 获取推荐商品列表
     * @param page
     * @return
     */
    * @description 获取推荐商品列表
    * @param page shopId
    * @return List<AppSimpleGoodsVo>
    * @author jqs34
    * @date 2023/6/4 16:27
    */
    @Override
    public List<AppSimpleGoodsVo> pageRecommendGoods(Page page, Long shopId){
        List<AppSimpleGoodsVo> appSimpleGoodsVoList = goodsMapper.pageRecommendGoods(page,shopId);
        return appSimpleGoodsVoList;
    }
    /**
     * @description  获取活动精选
     * @author  jqs
     * @date    2023/7/4 18:06
     * @param shopId
     * @return  List<AppSimpleGoodsVo>
     */
    @Override
    public AppHomeActivityVo pageActivityGoods(Long shopId){
        AppHomeActivityVo appHomeActivityVo = new AppHomeActivityVo();
        Activity activity = activityService.getRecommendActivity(shopId);
        List<AppSimpleGoodsVo> simpleGoodsVoList = new ArrayList<>();
        if(activity!=null){
            appHomeActivityVo.setEndTime(activity.getActivityEndTime());
            appHomeActivityVo.setTimestamp(activity.getActivityEndTime().getTime());
            simpleGoodsVoList = goodsMapper.pageActivityGoods(activity.getActivityId(),shopId);
            appHomeActivityVo.setGoodsVoList(simpleGoodsVoList);
        }
        return appHomeActivityVo;
    }
    /**
@@ -98,20 +142,24 @@
     */
    @Override
    public List<AppSimpleActivityGoodsVo> pageSearchActivityGoods(Page page, AppSearchGoodsPageDto appSearchGoodsPageDto){
        List<AppSimpleActivityGoodsVo> appSimpleGoodsVoList = goodsMapper.pageSearchActivityGoods(page,appSearchGoodsPageDto);
        Integer activityNumber;
        BigDecimal activityNumberBig;
        Integer salesNumber;
        BigDecimal salesNumberBig;
        BigDecimal salesPercent;
        for(AppSimpleActivityGoodsVo appSimpleActivityGoodsVo : appSimpleGoodsVoList){
            activityNumber = appSimpleActivityGoodsVo.getActivityNumber();
            salesNumber = appSimpleActivityGoodsVo.getSalesNumber();
            activityNumberBig = BigDecimal.valueOf(activityNumber);
            salesNumberBig = BigDecimal.valueOf(salesNumber);
            salesPercent = salesNumberBig.divide(activityNumberBig,2,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100.00"));
        List<String> activityIdList = activityService.listActivityIdByShopId(appSearchGoodsPageDto.getShopId());
        appSearchGoodsPageDto.setActivityIdList(activityIdList);
        // 获取搜索结果的商品列表
        List<AppSimpleActivityGoodsVo> appSimpleGoodsVoList = goodsMapper.pageSearchActivityGoods(page, appSearchGoodsPageDto);
        // 计算销售百分比和设置时间戳
        for (AppSimpleActivityGoodsVo appSimpleActivityGoodsVo : appSimpleGoodsVoList) {
            int activityNumber = appSimpleActivityGoodsVo.getActivityNumber();
            int salesNumber = appSimpleActivityGoodsVo.getSalesNumber();
            BigDecimal salesPercent = BigDecimal.ZERO;
            // 计算销售百分比
            if (activityNumber != 0) {
                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());
        }
        // 返回结果
        return appSimpleGoodsVoList;
    }
@@ -124,16 +172,22 @@
    public AppGoodsInfoVo getGoodsInfo(AppGoodsInfoGetDto appGoodsInfoGetDto){
        AppGoodsInfoVo appGoodsInfoVo = new AppGoodsInfoVo();
        Goods goods = this.getById(appGoodsInfoGetDto.getId());
        if(goods.getGoodsStatus()==-1){
            throw new ServiceException(AppErrorConstant.GOODS_DELETED);
        }
        BeanUtils.copyProperties(goods, appGoodsInfoVo);
        //商户定制价格
        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(goods.getGoodsId());
            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());
@@ -141,29 +195,46 @@
            appGoodsInfoVo.setActivityFlag(1);
            appGoodsInfoVo.setActivityPrice(activityGoods.getActivityPrice());
            appGoodsInfoVo.setSalesNum(activityGoods.getSalesNumber());
            appGoodsInfoVo.setActivityDeadline(activityGoods.getActivityDeadline());
            appGoodsInfoVo.setActivityStartTime(activity.getActivityStartTime());
            appGoodsInfoVo.setActivityDeadline(activity.getActivityEndTime());
            appGoodsInfoVo.setTimestamp(activity.getActivityEndTime().getTime());
            Integer availableBuyNum = 0;
            //售罄判断
            if(activityGoods.getActivityNumber().equals(activityGoods.getSalesNumber())){
                appGoodsInfoVo.setSellOutFlag(1);
            }else{
                availableBuyNum = activityGoods.getActivityNumber() - activityGoods.getSalesNumber();
                appGoodsInfoVo.setSellOutFlag(0);
            }
            appGoodsInfoVo.setActivityId(appGoodsInfoGetDto.getActivityId());
            //限购判断
            appGoodsInfoVo.setPurchaseLimitationFlag(activityGoods.getPurchaseLimitationFlag());
            if(activityGoods.getPurchaseLimitationFlag()==1){
                Integer buyNum = activityRecordService.getUserActivityGoodsNum(goods.getGoodsId(),activityGoods.getActivityId(),appGoodsInfoGetDto.getUserId());
                Integer limitBuyNum = activityGoods.getLimitNumber() - buyNum;
                if(limitBuyNum<availableBuyNum){
                    availableBuyNum = limitBuyNum;
                }
            }
            appGoodsInfoVo.setAvailableBuyNum(availableBuyNum);
        }else{
            appGoodsInfoVo.setActivityFlag(0);
        }
        //商品图片
        List<GoodsFile> goodsFileList = goodsFileService.listByGoodsId(goods.getGoodsId());
        StringJoiner bannerSJ = new StringJoiner(",");
        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){
                    bannerSJ.add(goodsFile.getFileUrl());
                    bannerList.add(goodsFile.getFileUrl());
                }
            }
            if(bannerSJ!=null&&bannerSJ.length()>0){
                appGoodsInfoVo.setGoodsBanners(bannerSJ.toString());
            if(!bannerList.isEmpty()){
                appGoodsInfoVo.setGoodsBanners(String.join(",", bannerList));
            }
        }
        return appGoodsInfoVo;
@@ -181,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;
    }
    /**
     * 修改商户商品
@@ -197,7 +281,7 @@
        if(shopGoods!=null){
            shopGoods.setSalesPrice(merShopGoodsEditDto.getSalePrice());
            shopGoods.setServiceNum(merShopGoodsEditDto.getServiceNum());
            shopGoods.setUpdateTime(DateUtils.getNowDate());
            shopGoods.setUpdateTime(new Date());
            shopGoods.setUpdateUserId(merShopGoodsEditDto.getUserId());
        }else{
            shopGoods = new ShopGoods();
@@ -206,7 +290,7 @@
            shopGoods.setGoodsId(merShopGoodsEditDto.getGoodsId());
            shopGoods.setSalesPrice(merShopGoodsEditDto.getSalePrice());
            shopGoods.setServiceNum(merShopGoodsEditDto.getServiceNum());
            shopGoods.setUpdateTime(DateUtils.getNowDate());
            shopGoods.setUpdateTime(new Date());
            shopGoods.setUpdateUserId(merShopGoodsEditDto.getUserId());
        }
        shopGoodsService.saveOrUpdate(shopGoods);
@@ -219,15 +303,29 @@
     * @return
     */
    @Override
    public List<MgtGoodsPageVo> pageMgtGoods(Page page, MgtGoodsPageDto mgtGoodsPageDto){
    public List<MgtGoodsPageVo> pageMgtGoods(Page page, MgtGoodsPageDto mgtGoodsPageDto) {
        // 调用goodsMapper的方法获取MgtGoodsPageVo列表
        List<MgtGoodsPageVo> mgtGoodsPageVoList = goodsMapper.pageMgtGoods(page, mgtGoodsPageDto);
        if(mgtGoodsPageVoList!=null && !mgtGoodsPageVoList.isEmpty()){
            mgtGoodsPageVoList.stream()
                    .forEach(mgtGoodsPageVo -> {
                        SysClassification sysClassification = remoteConfigService.getSysClassification(Long.valueOf(mgtGoodsPageVo.getGoodsClass())).getData();
                        mgtGoodsPageVo.setGoodsClass(sysClassification.getClassName());
                    });
        // 如果列表不为空
        if (mgtGoodsPageVoList != null && !mgtGoodsPageVoList.isEmpty()) {
            // 获取所有商品分类的ID
            List<Long> goodsClassIds = mgtGoodsPageVoList.stream()
                    .map(MgtGoodsPageVo::getGoodsClass)
                    .map(Long::valueOf)
                    .collect(Collectors.toList());
            // 通过远程服务获取商品分类
            Map<Long, SysClassification> sysClassificationMap = remoteConfigService.getSysClassificationList(goodsClassIds).getData();
            // 遍历所有商品
            mgtGoodsPageVoList.forEach(mgtGoodsPageVo -> {
                // 获取商品分类
                SysClassification sysClassification = sysClassificationMap.get(Long.valueOf(mgtGoodsPageVo.getGoodsClass()));
                // 如果商品分类不为空,则设置商品分类名称
                if (sysClassification != null) {
                    mgtGoodsPageVo.setGoodsClass(sysClassification.getClassName());
                }
            });
        }
        // 返回处理后的商品列表
        return mgtGoodsPageVoList;
    }
@@ -237,6 +335,341 @@
     */
    @Override
    public MgtGoodsTotalVo getMgtGoodsTotal(){
        return goodsMapper.getMgtGoodsTotal();
        MgtGoodsTotalVo goodsTotalVo = goodsMapper.getMgtGoodsTotal();
        LambdaQueryWrapper<Goods> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(Goods::getDelFlag,0);
        goodsTotalVo.setGoodsTotal(this.count(queryWrapper));
        return goodsTotalVo;
    }
    /**
    * @description: editMgtGoods
    * @param: mgtGoodsEditDto
    * @return: void
    * @author jqs34
    * @date: 2023/6/4 15:37
    */
    @Override
    public void editMgtGoods(MgtGoodsEditDto mgtGoodsEditDto) {
        Goods goods;
        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)){
                throw new ServiceException(AppErrorConstant.GOODS_DOUBLE);
            }
            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){
                throw new ServiceException(AppErrorConstant.GOODS_DOUBLE);
            }
            goods = new Goods();
            goodsId = IdUtils.simpleUUID();
            goods.setGoodsId(goodsId);
            goods.setDelFlag(0);
            goods.setGoodsNo(CodeFactoryUtil.getGoodsNo());
            goods.setCreateTime(new Date());
            goods.setCreateUserId(mgtGoodsEditDto.getUserId());
            newGoods = true;
            mgtClassNumDto.setAddClassId(mgtGoodsEditDto.getGoodsClassId());
        }
        goods.setUpdateTime(new Date());
        goods.setUpdateUserId(mgtGoodsEditDto.getUserId());
        goods.setGoodsStatus(mgtGoodsEditDto.getGoodsStatus());
        goods.setGoodsType(mgtGoodsEditDto.getGoodsType());
        goods.setGoodsClassId(mgtGoodsEditDto.getGoodsClassId());
        goods.setGoodsName(mgtGoodsEditDto.getGoodsName());
        goods.setCycleNumFlag(mgtGoodsEditDto.getCycleNumFlag());
        goods.setServiceNum(mgtGoodsEditDto.getServiceNum());
        goods.setGoodsIntroduction(mgtGoodsEditDto.getGoodsIntroduction());
        goods.setSalesPrice(mgtGoodsEditDto.getSalesPrice());
        goods.setMininumPrice(mgtGoodsEditDto.getMininumPrice());
        if (mgtGoodsEditDto.getSubscription() != null && mgtGoodsEditDto.getSubscription().compareTo(BigDecimal.valueOf(0)) > 0) {
            goods.setSubscriptionFlag(1);
        } else {
            goods.setSubscriptionFlag(0);
        }
        goods.setSubscription(mgtGoodsEditDto.getSubscription());
        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.getGoodsTags());
        this.saveOrUpdate(goods);
        //商品图片视频处理
        final String goodsIdFinal = goodsId;
        saveGoodsFiles(goodsIdFinal, mgtGoodsEditDto.getGoodsPicture(), 1);
        saveGoodsFiles(goodsIdFinal, mgtGoodsEditDto.getGoodsVideo(), 2);
        saveGoodsFiles(goodsIdFinal, mgtGoodsEditDto.getGoodsBanners(), 3);
        //如果是新建商品创建商品统计
        if (newGoods) {
            GoodsTotal goodsTotal = new GoodsTotal();
            goodsTotal.setGoodsId(goodsId);
            goodsTotal.setBuyCount(0);
            goodsTotal.setBuyNumCount(0);
            goodsTotal.setBuyUserCount(0);
            goodsTotal.setBuyMoneyTotal(new BigDecimal("0.00"));
            goodsTotalService.saveOrUpdate(goodsTotal);
        }
        //更新商品分类统计
        remoteConfigService.changeClassNum(mgtClassNumDto);
    }
    /**
    * @description: 处理商品文件
    * @param: goodsId fileUrls fileType
    * @return: void
    * @author jqs34
    * @date: 2023/6/4 16:25
    */
     private void saveGoodsFiles(String goodsId, String fileUrls, int fileType) {
         if (StringUtils.isNotEmpty(fileUrls)) {
             List<GoodsFile> files = Arrays.stream(fileUrls.split(","))
                     .map(str -> {
                         GoodsFile goodsFile = new GoodsFile();
                         goodsFile.setDelFlag(0);
                         goodsFile.setGoodsId(goodsId);
                         goodsFile.setFileType(fileType);
                         goodsFile.setFileUrl(str);
                         return goodsFile;
                     })
                     .collect(Collectors.toList());
             // 保存文件列表
             goodsFileService.saveBatch(files);
         }
     }
    /**
     * @description: 上下架
     * @author jqs
     * @date   2023/6/5 17:21
     * @version 1.0
     */
    @Override
    public void upDownMgtGoods(MgtGoodsUpDownDto mgtGoodsUpDownDto){
        Goods goods = this.getById(mgtGoodsUpDownDto.getGoodsId());
        if(goods.getGoodsStatus()==-1){
            throw new ServiceException(AppErrorConstant.GOODS_DELETED);
        }
        goods.setGoodsStatus(mgtGoodsUpDownDto.getGoodsStatus());
        goods.setUpdateTime(new Date());
        goods.setUpdateUserId(mgtGoodsUpDownDto.getUserId());
        this.saveOrUpdate(goods);
    }
    /**
     * @description  推荐商品
     * @author  jqs
     * @date    2023/6/5 17:32
     * @param mgtGoodsRecommendDto
     * @return  void
     */
    @Override
    public void recommendMgtGoods(MgtGoodsRecommendDto mgtGoodsRecommendDto){
        Goods goods = this.getById(mgtGoodsRecommendDto.getGoodsId());
        if(goods.getGoodsStatus()==-1){
            throw new ServiceException(AppErrorConstant.GOODS_DELETED);
        }
        goods.setRecommendFlag(mgtGoodsRecommendDto.getRecommendFlag());
        goods.setUpdateTime(new Date());
        goods.setUpdateUserId(mgtGoodsRecommendDto.getUserId());
        this.saveOrUpdate(goods);
    }
    /**
     * @description  删除商品
     * @author  jqs
     * @date    2023/6/5 17:36
     * @param goodsId
     * @return  void
     */
    @Override
    public void deleteMgtGoods(String goodsId,Long userId){
        Goods goods = this.getById(goodsId);
        goods.setDelFlag(1);
        goods.setGoodsStatus(-1);
        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);
        }
    }
    /**
     * @description  删除商品分类
     * @author  jqs
     * @date    2023/6/8 10:31
     * @param classId
     * @return  void
     */
    @Override
    public void deleteGoodsClass(Long classId){
        goodsMapper.deleteGoodsClass(classId);
    }
    /**
     * @description  删除商品标签
     * @author  jqs
     * @date    2023/6/8 17:02
     * @param goodsTag
     * @return  void
     */
    @Override
    public void deleteGoodsTag(String goodsTag){
        goodsMapper.deleteGoodsTag(goodsTag);
    }
    /**
     * @description  通过id获取商品列表
     * @author  jqs
     * @date    2023/6/13 15:55
     * @param goodsIds
     * @return  List<Goods>
     */
    @Override
    public List<Goods> listGoodsByGoodsId(String goodsIds){
        return goodsMapper.listGoodsByGoodsId(goodsIds);
    }
    /**
     * @description  分页获取商品选择列表
     * @author  jqs
     * @date    2023/6/13 16:33
     * @param page
     * @param mgtSelectGoodsPageDto
     * @return  List<MgtSelectGoodsPageVo>
     */
    @Override
    public List<MgtSelectGoodsPageVo> pageMgtSelectGoods(Page page, MgtSelectGoodsPageDto mgtSelectGoodsPageDto){
        return goodsMapper.pageMgtSelectGoods(page, mgtSelectGoodsPageDto);
    }
    /**
     * @description  通过id获取商品列表
     * @author  jqs
     * @date    2023/7/3 9:58
     * @param merGoodsPriceListDto
     * @return  List<MerGoodsPriceListVo>
     */
    @Override
    public List<MerGoodsPriceListVo> listGoodsPriceByGoodsId(MerGoodsPriceListDto merGoodsPriceListDto){
        return goodsMapper.listGoodsPriceByGoodsId(merGoodsPriceListDto.getShopId(),merGoodsPriceListDto.getGoodsIds());
    }
    /**
     * @description  分页获取活动商品
     * @author  jqs
     * @date    2023/7/6 9:40
     * @param page
     * @param appActivityGoodsPageDto
     * @return  List<AppSimpleActivityGoodsVo>
     */
    @Override
    public List<AppSimpleActivityGoodsVo> pageAppActivityGoods(Page page, AppActivityGoodsPageDto appActivityGoodsPageDto){
        // 获取搜索结果的商品列表
        List<AppSimpleActivityGoodsVo> appSimpleGoodsVoList = goodsMapper.pageAppActivityGoods(page, appActivityGoodsPageDto);
        // 计算销售百分比和设置时间戳
        for (AppSimpleActivityGoodsVo appSimpleActivityGoodsVo : appSimpleGoodsVoList) {
            int activityNumber = appSimpleActivityGoodsVo.getActivityNumber();
            int salesNumber = appSimpleActivityGoodsVo.getSalesNumber();
            BigDecimal salesPercent = BigDecimal.ZERO;
            // 计算销售百分比
            if (activityNumber != 0) {
                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;
    }
}