From ea6bf9042d9ad4faaf328bdc68a41ef36b47f13d Mon Sep 17 00:00:00 2001
From: luodangjia <luodangjia>
Date: 星期二, 14 一月 2025 20:09:55 +0800
Subject: [PATCH] 12.18
---
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/GoodsServiceImpl.java | 156 +++++++++++++++++++++++++++++++++++++++++++++++----
1 files changed, 143 insertions(+), 13 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 387c300..3344af0 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
@@ -1,5 +1,6 @@
package com.ruoyi.other.service.impl;
+import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
@@ -16,6 +17,7 @@
import com.ruoyi.common.core.web.page.PageInfo;
import com.ruoyi.common.security.service.TokenService;
import com.ruoyi.common.security.utils.SecurityUtils;
+import com.ruoyi.order.feignClient.OrderClient;
import com.ruoyi.order.feignClient.RemoteOrderGoodsClient;
import com.ruoyi.order.vo.Price;
import com.ruoyi.other.api.domain.*;
@@ -27,6 +29,7 @@
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.GoodsVO;
import com.ruoyi.system.api.model.LoginUser;
import org.jetbrains.annotations.NotNull;
@@ -82,16 +85,19 @@
private GoodsBargainPriceService goodsBargainPriceService;
@Resource
private GoodsBargainPriceDetailService goodsBargainPriceDetailService;
+ @Resource
+ private OrderClient orderClient;
+ @Resource
+ private GoodsEvaluateService goodsEvaluateService;
@Override
public PageInfo<GoodsVO> goodsList(Goods search) {
- PageInfo<GoodsVO> pageInfo = new PageInfo(search.getPageCurr(), search.getPageSize());
Integer vipId = 0;
- String provinceCode = null;
- String cityCode = null;
- String districtCode = null;
+ String provinceCode = "0";
+ String cityCode = "0";
+ String districtCode = "0";
String token = SecurityUtils.getToken(ServletUtils.getRequest());
if(StringUtils.isNotEmpty(token)){
Long userid = tokenService.getLoginUserApplet().getUserid();
@@ -101,19 +107,83 @@
cityCode = appUser.getCityCode();
districtCode = appUser.getDistrictCode();
}
- List<GoodsVO> list = this.baseMapper.goodsList(pageInfo, search.getGoodsCategoryId(), search.getName(), vipId);
+ List<GoodsVO> list = this.baseMapper.goodsList(search.getGoodsCategoryId(), search.getName(), vipId);
for (GoodsVO goods : list) {
- Price price = getPrice(vipId, goods.getGoodsId(), 1, null, provinceCode, cityCode, districtCode);
+ Price price = getPrice(vipId, goods.getGoodsId(), null, 1, provinceCode, cityCode, districtCode);
if(null != price){
+ goods.setCashPayment(price.getCashPayment() ? 1 : 0);
+ goods.setPointPayment(price.getPointPayment() ? 1 : 0);
goods.setSellingPrice(price.getCash());
goods.setIntegral(price.getPoint());
}
+ Integer data = orderClient.getGoodsSaleNum(goods.getGoodsId(), 1).getData();
+ goods.setSaleNum(data);
+ }
+
+ //手动排序
+ if(StringUtils.isNotEmpty(search.getOrderByColumn())){
+ if("selling_price".equals(search.getOrderByColumn())){
+ list.sort(new Comparator<GoodsVO>() {
+ @Override
+ public int compare(GoodsVO o1, GoodsVO o2) {
+ if(null != o1.getSellingPrice() && null != o2.getSellingPrice()){
+ return o1.getSellingPrice().compareTo(o2.getSellingPrice()) * (StringUtils.isNotEmpty(search.getIsAsc()) ? -1 : 1);
+ }
+ if(null == o1.getSellingPrice() && null != o2.getSellingPrice()){
+ return BigDecimal.ZERO.compareTo(o2.getSellingPrice()) * (StringUtils.isNotEmpty(search.getIsAsc()) ? -1 : 1);
+ }
+ if(null != o1.getSellingPrice() && null == o2.getSellingPrice()){
+ return o1.getSellingPrice().compareTo(BigDecimal.ZERO) * (StringUtils.isNotEmpty(search.getIsAsc()) ? -1 : 1);
+ }
+ return 0;
+ }
+ });
+ }
+ if("integral".equals(search.getOrderByColumn())){
+ list.sort(new Comparator<GoodsVO>() {
+ @Override
+ public int compare(GoodsVO o1, GoodsVO o2) {
+ if(null != o1.getIntegral() && null != o2.getIntegral()){
+ return o1.getIntegral().compareTo(o2.getIntegral()) * (StringUtils.isNotEmpty(search.getIsAsc()) ? -1 : 1);
+ }
+ if(null == o1.getIntegral() && null != o2.getIntegral()){
+ return Integer.valueOf(0).compareTo(o2.getIntegral()) * (StringUtils.isNotEmpty(search.getIsAsc()) ? -1 : 1);
+ }
+ if(null != o1.getIntegral() && null == o2.getIntegral()){
+ return o1.getIntegral().compareTo(Integer.valueOf(0)) * (StringUtils.isNotEmpty(search.getIsAsc()) ? -1 : 1);
+ }
+ return 0;
+ }
+ });
+ }
+ if("sale_num".equals(search.getOrderByColumn())){
+ list.sort(new Comparator<GoodsVO>() {
+ @Override
+ public int compare(GoodsVO o1, GoodsVO o2) {
+ return o1.getSaleNum().compareTo(o2.getSaleNum()) * (StringUtils.isNotEmpty(search.getIsAsc()) ? -1 : 1);
+ }
+ });
+ }
+ }
+ //手动处理分页
+ PageInfo<GoodsVO> pageInfo = new PageInfo<>();
+ pageInfo.setSize(search.getPageSize());
+ pageInfo.setTotal(list.size());
+ Integer pageSize = search.getPageSize();
+ Integer pageNum = (search.getPageCurr() - 1) * pageSize;
+
+ if(list.size() >= (pageNum + 1) * pageSize){
+ list = list.subList(pageNum, pageNum + pageSize);
+ }else if(pageNum < list.size() && list.size() < (pageNum + 1) * pageSize){
+ list = list.subList(pageNum, list.size());
+ }else{
+ list = new ArrayList<>();
}
return pageInfo.setRecords(list);
}
@Override
- public GoodsVO goodsDetail(Long goodsId) {
+ public GoodsVO goodsDetail(Long goodsId, Integer shopId, String longitude, String latitude) {
if (goodsId == null || goodsId <= 0) {
throw new NullPointerException("商品ID不能为空");
}
@@ -133,12 +203,23 @@
}
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(), 1, null, provinceCode, cityCode, districtCode);
+ Price price = getPrice(vipId, goods.getId(), shopId, 1, provinceCode, cityCode, districtCode);
if(null != price){
+ goodsVO.setPointPayment(price.getPointPayment() ? 1 : 0);
+ goodsVO.setCashPayment(price.getCashPayment() ? 1 : 0);
goodsVO.setSellingPrice(price.getCash());
goodsVO.setIntegral(price.getPoint());
}
@@ -163,6 +244,34 @@
.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);
+ }
+ Integer integer = orderClient.getGoodsSaleNum(goods.getId(), 1).getData();
+ goodsVO.setSaleNum(integer);
+ GoodsEvaluate goodsEvaluate = goodsEvaluateService.lambdaQuery().eq(GoodsEvaluate::getGoodsId, goodsId).ne(GoodsEvaluate::getComment, "")
+ .orderByDesc(GoodsEvaluate::getGrade).eq(GoodsEvaluate::getStatus, 2).isNotNull(GoodsEvaluate::getComment)
+ .eq(GoodsEvaluate::getDelFlag, 0).last(" limit 0, 1").one();
+ if (null != goodsEvaluate) {
+ AppUser appUserById = appUserClient.getAppUserById(goodsEvaluate.getAppUserId());
+ if(null != appUserById){
+ goodsEvaluate.setUserName(appUserById.getName());
+ goodsEvaluate.setAvatar(appUserById.getAvatar());
+ goodsEvaluate.setIdStr(String.valueOf(goodsEvaluate.getId()));
+ }
+ }
+ goodsVO.setGoodsEvaluate(goodsEvaluate);
return goodsVO;
}
@@ -184,18 +293,27 @@
}
List<Goods> goods = goodsMapper.selectListByShopId(pageInfo, shopId, vipId);
for (Goods good : goods) {
- Price price = getPrice(vipId, good.getId(), 1, shopId, provinceCode, cityCode, districtCode);
+ Price price = getPrice(vipId, good.getId(), shopId, 1, provinceCode, cityCode, districtCode);
if(null != price){
+ good.setCashPayment(price.getCashPayment() ? 1 : 0);
+ good.setPointPayment(price.getPointPayment() ? 1 : 0);
good.setSellingPrice(price.getCash());
good.setIntegral(price.getPoint());
}
+ Integer data = orderClient.getGoodsSaleNum(good.getId(), 1).getData();
+ good.setSaleNum(data);
}
return goods;
}
@Override
public IPage<Goods> getManageGoodsList(Page<Goods> page, Goods goods) {
- return goodsMapper.selectManageGoodsList(page, 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;
}
@Override
@@ -235,7 +353,10 @@
@Override
public void updateManageGoods(Goods goods) {
- goodsMapper.updateById(goods);
+ this.updateById(goods);
+ //修改个别字段
+ 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());
@@ -253,12 +374,17 @@
saveGoodsAreaList(goodsAreaList, goods.getId());
}
+
+
+
+
private void saveGoodsAreaList(List<GoodsArea> goodsAreaList, Integer id) {
goodsAreaService.remove(new LambdaQueryWrapper<GoodsArea>()
.eq(GoodsArea::getGoodsId, id));
if (!CollectionUtils.isEmpty(goodsAreaList)){
for (GoodsArea goodsArea : goodsAreaList) {
List<GoodsArea> goodsAreaList1 = goodsArea.getGoodsAreaList();
+ List<GoodsArea> goodsAreaList2 = new ArrayList<>();
for (GoodsArea area : goodsAreaList1) {
area.setId(null);
area.setGoodsId(id);
@@ -268,8 +394,11 @@
area.setProvinceCode(goodsArea.getProvinceCode());
area.setCityCode(goodsArea.getCityCode());
area.setDistrictsCode(goodsArea.getDistrictsCode());
+ if(null != area.getSellingPrice() || null != area.getIntegral()){
+ goodsAreaList2.add(area);
+ }
}
- goodsAreaService.saveBatch(goodsAreaList1);
+ goodsAreaService.saveBatch(goodsAreaList2);
}
}
}
@@ -289,7 +418,7 @@
.eq(GoodsAppUser::getGoodsId, id));
if (!CollectionUtils.isEmpty(goodsAppUserList)){
for (GoodsAppUser goodsAppUser : goodsAppUserList) {
- goodsAppUser.setId(null );
+ goodsAppUser.setId(null);
goodsAppUser.setGoodsId(id);
}
}
@@ -336,6 +465,7 @@
List<AppUser> appUsers = appUserClient.listByIds(userIds);
for (GoodsAppUser goodsAppUser : goodsAppUserList) {
appUsers.stream().filter(u -> u.getId().equals(goodsAppUser.getAppUserId())).findFirst().ifPresent( u -> {
+ goodsAppUser.setAppUserIdStr(goodsAppUser.getAppUserId().toString());
goodsAppUser.setUserName(u.getName());
goodsAppUser.setPhone(u.getPhone());
VipSetting vipSetting = vipSettingService.getById(u.getVipId());
--
Gitblit v1.7.1