From 5a7486e9893a706ed464e3197c9711286b077896 Mon Sep 17 00:00:00 2001 From: huliguo <2023611923@qq.com> Date: 星期四, 26 六月 2025 11:12:28 +0800 Subject: [PATCH] 文件导入 --- ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/GoodsServiceImpl.java | 231 +++++++++++++++++++++++++++------------------------------ 1 files changed, 111 insertions(+), 120 deletions(-) diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/GoodsServiceImpl.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/GoodsServiceImpl.java index 6ecba98..d8b5290 100644 --- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/GoodsServiceImpl.java +++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/GoodsServiceImpl.java @@ -18,23 +18,30 @@ import com.ruoyi.order.feignClient.RemoteOrderGoodsClient; import com.ruoyi.order.vo.Price; import com.ruoyi.other.api.domain.*; +import com.ruoyi.other.dto.AddGoodsDTO; import com.ruoyi.other.enums.GoodsStatus; +import com.ruoyi.other.mapper.GoodsEvaluateMapper; import com.ruoyi.other.mapper.GoodsMapper; import com.ruoyi.other.mapper.GoodsShopMapper; import com.ruoyi.other.mapper.ShopMapper; import com.ruoyi.other.service.*; import com.ruoyi.other.util.GeodesyUtil; +import com.ruoyi.other.vo.GoodsEvaluateVO; import com.ruoyi.other.vo.GoodsVO; import com.ruoyi.other.vo.NearbyShopVO; import com.ruoyi.system.api.domain.SysConfig; import com.ruoyi.system.api.feignClient.SysConfigClient; +import com.ruoyi.system.api.model.LoginUser; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import javax.annotation.Resource; import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.time.ZoneId; import java.util.*; +import java.util.function.Function; import java.util.stream.Collectors; /** @@ -72,6 +79,8 @@ @Resource private ShopService shopService; + @Resource + private GoodsEvaluateMapper goodsEvaluateMapper; /** * 热门商品列表 @@ -83,30 +92,36 @@ public PageInfo<GoodsVO> goodsList(Goods search) { List<Long> shopIds=null; if (null!=search.getLongitude()&&null!=search.getLatitude()){ + //获取最近十家店的id List<NearbyShopVO> nearbyShopVOS = shopService.nearbyShopList(search.getLongitude(), search.getLatitude(), new Shop()); - shopIds = nearbyShopVOS.subList(0, 10).stream().map(NearbyShopVO::getId).collect(Collectors.toList()); + int endIndex = Math.min(10, nearbyShopVOS.size()); + shopIds = nearbyShopVOS.subList(0, endIndex).stream().map(NearbyShopVO::getId).collect(Collectors.toList()); } - - List<GoodsVO> list = this.baseMapper.goodsList(search.getGoodsCategoryId(), search.getName(),shopIds);//查找所有商品 + //查找满足条件的商品 分类、名称、附近十家店 + List<GoodsVO> list = this.baseMapper.goodsList(search.getGoodsCategoryId(), search.getName(),shopIds); + //去重 + Map<Integer, GoodsVO> uniqueGoodsMap = new LinkedHashMap<>(); for (GoodsVO goods : list) { - System.out.println(goods.getSellingPrice()); + uniqueGoodsMap.putIfAbsent(goods.getGoodsId(), goods); + } + list = new ArrayList<>(uniqueGoodsMap.values()); + for (GoodsVO goods : list) { + //计算所需价格和积分 - Price price = getPrice( goods.getGoodsId(), 1); + Price price = getPrice( goods.getGoodsId()); if(null != price){ //秒杀活动 goods.setSellingPrice(price.getCash()); goods.setIntegral(price.getPoint()); goods.setStartTime(price.getStartTime()); goods.setEndTime(price.getEndTime()); + goods.setPurchaseLimit(price.getPurchaseLimit()); } - //已售 - Integer data = orderClient.getGoodsSaleNum(goods.getGoodsId(), 1).getData(); - goods.setSaleNum(data); } //手动排序 if(StringUtils.isNotEmpty(search.getOrderByColumn())){ - if("tgs.selling_price".equals(search.getOrderByColumn())){ + if("tgs.selling_price".equals(search.getOrderByColumn())){//价格排序 list.sort(new Comparator<GoodsVO>() { @Override public int compare(GoodsVO o1, GoodsVO o2) { @@ -123,7 +138,7 @@ } }); } - /*if("integral".equals(search.getOrderByColumn())){ + if("integral".equals(search.getOrderByColumn())){//积分排序 list.sort(new Comparator<GoodsVO>() { @Override public int compare(GoodsVO o1, GoodsVO o2) { @@ -139,8 +154,8 @@ return 0; } }); - }*/ - if("sale_num".equals(search.getOrderByColumn())){ + } + if("sale_num".equals(search.getOrderByColumn())){//销量 list.sort(new Comparator<GoodsVO>() { @Override public int compare(GoodsVO o1, GoodsVO o2) { @@ -179,85 +194,59 @@ } @Override - public GoodsVO goodsDetail(Long goodsId, Integer shopId, String longitude, String latitude) { - /*if (goodsId == null || goodsId <= 0) { + public GoodsVO goodsDetail(Long goodsId) { + if (goodsId == null || goodsId <= 0) { throw new NullPointerException("商品ID不能为空"); } - Integer vipId = 0; - String provinceCode = null; - String cityCode = null; - String districtCode = null; - String token = SecurityUtils.getToken(ServletUtils.getRequest()); - if(StringUtils.isNotEmpty(token)){ - Long userid = tokenService.getLoginUserApplet().getUserid(); - AppUser appUser = appUserClient.getAppUserById(userid); - vipId = appUser.getVipId(); - provinceCode = appUser.getProvinceCode(); - cityCode = appUser.getCityCode(); - districtCode = appUser.getDistrictCode(); - } - Goods goods = this.getById(goodsId); + if(null == goods || goods.getDelFlag() == 1){ throw new RuntimeException("商品不存在"); } if(goods.getStatus() == 1){ throw new RuntimeException("商品已被下架"); } - if(!goods.getCommodityAuthority().contains("-1") && !goods.getCommodityAuthority().contains(vipId.toString())){ - throw new RuntimeException("权限不足"); - } + GoodsVO goodsVO = new GoodsVO(); BeanUtils.copyBeanProp(goodsVO, goods); goodsVO.setGoodsId(goods.getId()); goodsVO.setGoodsName(goods.getName()); - Price price = getPrice(vipId, goods.getId(), shopId, 1, provinceCode, cityCode, districtCode); + + //计算所需价格和积分 + Price price = getPrice( goods.getId()); if(null != price){ - goodsVO.setPointPayment(price.getPointPayment() ? 1 : 0); - goodsVO.setCashPayment(price.getCashPayment() ? 1 : 0); + //秒杀活动 goodsVO.setSellingPrice(price.getCash()); goodsVO.setIntegral(price.getPoint()); + goodsVO.setStartTime(price.getStartTime()); + goodsVO.setEndTime(price.getEndTime()); + goodsVO.setPurchaseLimit(price.getPurchaseLimit()); } + //已售数量 + Integer data = orderClient.getGoodsSaleNum(goods.getId(), 1).getData(); + goodsVO.setSaleNum(data); + //一个商品对应一个门店 + //查找门店 + GoodsShop goodsShop = goodsShopMapper.selectOne(new LambdaQueryWrapper<GoodsShop>() + .eq(GoodsShop::getGoodsId, goodsId)); + Shop shop1 = shopMapper.selectById(goodsShop.getShopId()); - if(goods.getType() == 1){ - if(goods.getAppointStore() == 2){ - List<Shop> shopList = shopMapper.selectList(new LambdaQueryWrapper<Shop>() - .in(Shop::getDelFlag, 0)); - goodsVO.setShopList(shopList); - }else{ - List<GoodsShop> goodsShopList = goodsShopMapper.selectList(new LambdaQueryWrapper<GoodsShop>() - .eq(GoodsShop::getGoodsId, goodsId)); - if (!CollectionUtils.isEmpty(goodsShopList)){ - List<Integer> shopIds = goodsShopList.stream().map(GoodsShop::getShopId).collect(Collectors.toList()); - List<Shop> shopList = shopMapper.selectList(new LambdaQueryWrapper<Shop>() - .in(Shop::getId, shopIds)); - goodsVO.setShopList(shopList); - } - } - }else{ - List<Shop> shopList = shopMapper.selectList(new LambdaQueryWrapper<Shop>() - .in(Shop::getDelFlag, 0)); - goodsVO.setShopList(shopList); - } - if(StringUtils.isNotEmpty(longitude) && StringUtils.isNotEmpty(latitude)){ - List<Shop> shopList = goodsVO.getShopList(); - for (Shop shop : shopList) { - Double wgs84 = GeodesyUtil.getDistance(longitude + "," + latitude, shop.getLongitude() + "," + shop.getLatitude()).get("WGS84"); - shop.setDistance(wgs84); - } - shopList.sort(new Comparator<Shop>() { - @Override - public int compare(Shop o1, Shop o2) { - return o1.getDistance().compareTo(o2.getDistance()); - } - }); - goodsVO.setShopList(shopList); - } + goodsVO.setShop(shop1); + //已售数量 Integer integer = orderClient.getGoodsSaleNum(goods.getId(), 1).getData(); goodsVO.setSaleNum(integer); - return goodsVO;*/ - return null; + + //商品评价 + GoodsEvaluate goodsEvaluate=goodsEvaluateMapper.getGoodsEvaluateOne(goods.getId()); + if (null != goodsEvaluate){ + AppUser appUserById = appUserClient.getAppUserById(goodsEvaluate.getAppUserId()); + goodsEvaluate.setAvatar(appUserById.getAvatar()); + goodsEvaluate.setUserName(appUserById.getName()); + goodsVO.setGoodsEvaluate(goodsEvaluate); + } + return goodsVO; + } @@ -265,13 +254,17 @@ public List<GoodsVO> getGoodsListByShopId(PageInfo<GoodsVO> pageInfo, Integer shopId) { //查询该门店商品 List<GoodsVO> goods = goodsMapper.selectListByShopId(pageInfo, shopId); + if (goods == null) { + return null; + } for (GoodsVO good : goods) { //价格 - Price price = getPrice( good.getGoodsId(), 1); + Price price = getPrice( good.getGoodsId()); if(null != price){ //秒杀活动 good.setSellingPrice(price.getCash()); good.setIntegral(price.getPoint()); + good.setPurchaseLimit(price.getPurchaseLimit()); good.setStartTime(price.getStartTime()); good.setEndTime(price.getEndTime()); } @@ -282,31 +275,33 @@ } @Override - public IPage<Goods> getManageGoodsList(Page<Goods> page, Goods goods) { - IPage<Goods> goodsIPage = goodsMapper.selectManageGoodsList(page, goods); - goodsIPage.getRecords().forEach(goods1 -> { - Integer data = orderClient.getGoodsSaleNum(goods1.getId(), 1).getData(); - goods1.setSaleNum(data); - }); - return goodsIPage; + public R getManageGoodsList(Integer pageNum,Integer pageSize, Goods goods) { + PageInfo<Goods> pageInfo = new PageInfo<>(pageNum,pageSize); + List<Goods> list = goodsMapper.selectManageGoodsList(pageInfo, goods); + pageInfo.setRecords(list); + return R.ok(pageInfo); } @Override @Transactional(rollbackFor = Exception.class) public void addGoods(Goods goods) { - goods.setSaleNum(0); - goods.setStatus(GoodsStatus.DOWN.getCode()); + goodsMapper.insert(goods); - // 指定门店 - Integer appointStore = goods.getAppointStore(); - if (null != appointStore && appointStore == 1){ - List<GoodsShop> goodsShopList = goods.getGoodsShopList(); - if (CollectionUtils.isEmpty(goodsShopList)){ - throw new NullPointerException("请选择指定门店"); - } - saveGoodsShopList(goodsShopList, goods.getId()); - } + //保存商品门店关系 + GoodsShop goodsShop = new GoodsShop(); + goodsShop.setGoodsId(goods.getId()); + goodsShop.setShopId(goods.getShopId()); + Shop shop = shopMapper.selectById(goods.getShopId()); + goodsShop.setShopName(shop.getName()); + goodsShop.setOwnerName(shop.getShopManager()); + goodsShop.setPhone(shop.getPhone()); + goodsShop.setAddress(shop.getAddress()); + goodsShopService.save(goodsShop); + + //判断是否参加秒杀活动 + + } @Override @@ -315,9 +310,8 @@ //修改个别字段 this.update(new LambdaUpdateWrapper<Goods>().eq(Goods::getId, goods.getId()).set(Goods::getSellingPrice, goods.getSellingPrice()) .set(Goods::getIntegral, goods.getIntegral())); - // 指定门店 - List<GoodsShop> goodsShopList = goods.getGoodsShopList(); - saveGoodsShopList(goodsShopList, goods.getId()); + // 保存门店 + saveGoodsShop(goods.getShopId(),goods.getId()); } @@ -327,16 +321,16 @@ - private void saveGoodsShopList(List<GoodsShop> goodsShopList, Integer goodsId) { + private void saveGoodsShop(Integer shopId, Integer goodsId) { goodsShopService.remove(new LambdaQueryWrapper<GoodsShop>() .eq(GoodsShop::getGoodsId, goodsId)); - if (!CollectionUtils.isEmpty(goodsShopList)){ - for (GoodsShop goodsShop : goodsShopList) { - goodsShop.setGoodsId(goodsId); - goodsShop.setId(null); - } - } - goodsShopService.saveBatch(goodsShopList); + + GoodsShop goodsShop = new GoodsShop(); + goodsShop.setGoodsId(goodsId); + goodsShop.setShopId(shopId); + goodsShop.setId(null); + + goodsShopService.save(goodsShop); } @Override @@ -345,33 +339,29 @@ if (goods == null){ return null; } - // 指定门店 - List<GoodsShop> goodsShops = goodsShopService.list(new LambdaQueryWrapper<GoodsShop>() + // 获取指定门店 + GoodsShop goodsShop = goodsShopService.getOne(new LambdaQueryWrapper<GoodsShop>() .eq(GoodsShop::getGoodsId, goodsId)); - - for (GoodsShop goodsShop : goodsShops) { - Shop shop = shopMapper.selectById(goodsShop.getShopId()); - if(null != shop){ - goodsShop.setShopName(shop.getName()); - goodsShop.setOwnerName(shop.getShopManager()); - goodsShop.setPhone(shop.getPhone()); - goodsShop.setAddress(shop.getAddress()); - } + goods.setShopId(goodsShop.getShopId()); + Shop shop = shopService.getById(goodsShop.getShopId()); + if(null != shop){ + goodsShop.setShopName(shop.getName()); + goodsShop.setPhone(shop.getPhone()); + goodsShop.setAddress(shop.getAddress()); + goodsShop.setOwnerName(shop.getShopManager()); } - goods.setGoodsShopList(goodsShops); + goods.setGoodsShop(goodsShop); return goods; } + /** - * 根据商品的价格配置体系获取商品当前的价格 - * @param goodsId - * @param type 1普通商品,2秒杀商品 - * @return + * 获取商品当前的价格,就是判断是否在秒杀活动中 */ - public Price getPrice( Integer goodsId, Integer type){ - //判断是否有秒杀活动 + public Price getPrice( Integer goodsId ){ + //判断是否有在秒杀活动时间中 Price price = new Price(); SeckillActivityInfo one = seckillActivityInfoService.getOne(new LambdaQueryWrapper<SeckillActivityInfo>().eq(SeckillActivityInfo::getGoodId, goodsId) .eq(SeckillActivityInfo::getIsShelves, 1).eq(SeckillActivityInfo::getDelFlag, 0) @@ -382,7 +372,7 @@ goodsSeckill = goodsSeckillService.getOne(new LambdaQueryWrapper<GoodsSeckill>().eq(GoodsSeckill::getSeckillActivityInfoId, one.getId())); } //没有秒杀活动或者添加的普通商品则使用秒杀活动价格 - if(null == goodsSeckill || type == 1){ + if(null == goodsSeckill ){ return null; } //秒杀活动价格 @@ -391,6 +381,7 @@ price.setPoint(getPoint(price.getCash())); price.setStartTime(one.getStartTime()); price.setEndTime(one.getEndTime()); + price.setPurchaseLimit(one.getMaxNum()); return price; } @@ -402,7 +393,7 @@ throw new IllegalArgumentException("金额不能为null或负数"); } // 获取积分兑换比例配置 - R<SysConfig> info = sysConfigClient.getInfo("6"); + R<SysConfig> info = sysConfigClient.getInfo(6L); if (info == null || info.getData() == null) { throw new RuntimeException("获取积分兑换比例配置失败"); } -- Gitblit v1.7.1