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 | 286 +++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 267 insertions(+), 19 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 cccae6c..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 @@ -7,26 +7,37 @@ 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.system.api.domain.vo.MerGoodsPriceListVo; +import com.ruoyi.system.api.domain.vo.MgtSelectGoodsPageVo; import com.ruoyi.system.api.service.RemoteConfigService; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.math.BigDecimal; +import java.nio.charset.StandardCharsets; import java.util.*; import java.util.stream.Collectors; @@ -59,6 +70,12 @@ @Resource private GoodsTotalService goodsTotalService; + @Resource + private ActivityService activityService; + + @Resource + private ActivityRecordService activityRecordService; + /** * @description 获取推荐商品列表 * @param page shopId @@ -70,6 +87,27 @@ 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; } /** @@ -104,19 +142,24 @@ */ @Override public List<AppSimpleActivityGoodsVo> pageSearchActivityGoods(Page page, AppSearchGoodsPageDto appSearchGoodsPageDto){ - List<AppSimpleActivityGoodsVo> appSimpleGoodsVoList = goodsMapper.pageSearchActivityGoods(page,appSearchGoodsPageDto); - int activityNumber; - int salesNumber; - BigDecimal salesPercent; - for(AppSimpleActivityGoodsVo appSimpleActivityGoodsVo : appSimpleGoodsVoList){ - activityNumber = appSimpleActivityGoodsVo.getActivityNumber(); - salesNumber = appSimpleActivityGoodsVo.getSalesNumber(); - salesPercent = BigDecimal.ZERO; - if(activityNumber != 0){ - salesPercent = BigDecimal.valueOf(salesNumber).multiply(BigDecimal.valueOf(100)).divide(BigDecimal.valueOf(activityNumber), 2, BigDecimal.ROUND_HALF_UP); + 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; } @@ -137,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(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()); @@ -149,13 +195,28 @@ 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); } @@ -164,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()); @@ -189,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; + + } /** * 修改商户商品 @@ -259,7 +335,11 @@ */ @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; } /** @@ -275,14 +355,35 @@ 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 (goodsId != null) { + 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){ @@ -292,9 +393,11 @@ 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()); @@ -313,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; @@ -333,6 +441,8 @@ goodsTotal.setBuyMoneyTotal(new BigDecimal("0.00")); goodsTotalService.saveOrUpdate(goodsTotal); } + //更新商品分类统计 + remoteConfigService.changeClassNum(mgtClassNumDto); } /** @@ -411,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); + } } /** @@ -424,4 +540,136 @@ 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; + } } -- Gitblit v1.7.1