master:系统功能完善;

pull/1121/head
liujiang 2025-07-14 23:48:20 +08:00
parent 0733e51628
commit 6b443fb998
11 changed files with 108 additions and 23 deletions

View File

@ -69,7 +69,7 @@ public class NoticeController extends BaseController {
}
@PreAuthorize("@ss.hasAnyRoles('admin,general_admin,store')||@ss.hasSupplierSubRole()")
@ApiOperation(value = "档口首页获取公告列表", httpMethod = "GET", response = R.class)
@ApiOperation(value = "档口首页、电商卖家首页获取公告列表", httpMethod = "GET", response = R.class)
@GetMapping("/list")
public R<List<NoticeLatest10ResVO>> latest10() {
return R.ok(BeanUtil.copyToList(noticeService.latest10(), NoticeLatest10ResVO.class));

View File

@ -38,7 +38,7 @@ public class QuickFunctionController extends XktBaseController {
private static final String MENU_TYPE_C = "C";
@PreAuthorize("@ss.hasAnyRoles('admin,general_admin,seller,store')")
@ApiOperation(value = "档口首页 档口或电商卖家选择的快捷功能", httpMethod = "GET", response = R.class)
@ApiOperation(value = "档口或电商卖家选择的快捷功能", httpMethod = "GET", response = R.class)
@GetMapping("/selected/{roleId}/{bizId}")
public R<List<StoreQuickFuncVO>> getSelectedList(@PathVariable("roleId") Long roleId, @PathVariable("bizId") Long bizId) {
// 找到当前所有的快捷菜单
@ -47,7 +47,7 @@ public class QuickFunctionController extends XktBaseController {
}
@PreAuthorize("@ss.hasAnyRoles('admin,general_admin,seller,store')")
@ApiOperation(value = "档口常用功能 点击 设置", httpMethod = "GET", response = R.class)
@ApiOperation(value = "常用功能 点击 设置", httpMethod = "GET", response = R.class)
@GetMapping("/menus/{roleId}/{bizId}")
public R<QuickFuncVO> getMenuList(@PathVariable("roleId") Long roleId, @PathVariable("bizId") Long bizId) {
// 找到当前所有的快捷菜单

View File

@ -6,10 +6,8 @@ import com.ruoyi.common.core.controller.XktBaseController;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.page.Page;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.web.controller.xkt.vo.userFavorite.UserFavBatchAddToShopCartVO;
import com.ruoyi.web.controller.xkt.vo.userFavorite.UserFavBatchDeleteVO;
import com.ruoyi.web.controller.xkt.vo.userFavorite.UserFavoritePageVO;
import com.ruoyi.web.controller.xkt.vo.userFavorite.UserFavoriteVO;
import com.ruoyi.web.controller.xkt.vo.storeProd.StoreProdStatusCountResVO;
import com.ruoyi.web.controller.xkt.vo.userFavorite.*;
import com.ruoyi.xkt.dto.userFavorite.*;
import com.ruoyi.xkt.service.IUserFavoritesService;
import io.swagger.annotations.Api;
@ -33,6 +31,12 @@ public class UserFavoritesController extends XktBaseController {
final IUserFavoritesService userFavService;
@ApiOperation(value = "获取商品各个状态数量", httpMethod = "GET", response = R.class)
@GetMapping(value = "/status/num")
public R<UserFavStatusCountResVO> getStatusNum() {
return R.ok(BeanUtil.toBean(userFavService.getStatusNum(), UserFavStatusCountResVO.class));
}
@PreAuthorize("@ss.hasAnyRoles('seller')")
@ApiOperation(value = "用户收藏商品", httpMethod = "POST", response = R.class)
@Log(title = "用户收藏商品", businessType = BusinessType.INSERT)

View File

@ -0,0 +1,22 @@
package com.ruoyi.web.controller.xkt.vo.userFavorite;
import com.fasterxml.jackson.annotation.JsonInclude;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @author liujiang
* @version v1.0
* @date 2025/3/27 15:12
*/
@Data
@ApiModel
public class UserFavStatusCountResVO {
@ApiModelProperty(value = "在售数量")
private Integer onSaleNum;
@ApiModelProperty(value = "已失效数量")
private Integer expiredNum;
}

View File

@ -0,0 +1,22 @@
package com.ruoyi.xkt.dto.userFavorite;
import com.fasterxml.jackson.annotation.JsonInclude;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @author liujiang
* @version v1.0
* @date 2025/3/27 15:12
*/
@Data
@ApiModel
public class UserFavStatusCountResDTO {
@ApiModelProperty(value = "在售数量")
private Integer onSaleNum;
@ApiModelProperty(value = "已失效数量")
private Integer expiredNum;
}

View File

@ -3,6 +3,7 @@ package com.ruoyi.xkt.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.xkt.domain.UserFavorites;
import com.ruoyi.xkt.dto.dailyStoreTag.DailyStoreTagDTO;
import com.ruoyi.xkt.dto.userFavorite.UserFavStatusCountResDTO;
import com.ruoyi.xkt.dto.userFavorite.UserFavoritePageDTO;
import com.ruoyi.xkt.dto.userFavorite.UserFavoritePageResDTO;
import org.apache.ibatis.annotations.Param;
@ -35,4 +36,11 @@ public interface UserFavoritesMapper extends BaseMapper<UserFavorites> {
*/
List<DailyStoreTagDTO> searchTop10Prod(@Param("oneMonthAgo") Date oneMonthAgo, @Param("yesterday") Date yesterday);
/**
*
*
* @param userId ID
* @return
*/
UserFavStatusCountResDTO getStatusNum(@Param("userId") Long userId);
}

View File

@ -42,4 +42,10 @@ public interface IUserFavoritesService {
*/
Integer batchDelete(UserFavBatchDeleteDTO batchDTO);
/**
*
*
* @return UserFavStatusCountResDTO
*/
UserFavStatusCountResDTO getStatusNum();
}

View File

@ -13,7 +13,6 @@ import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.xkt.domain.*;
import com.ruoyi.xkt.dto.storeProductFile.StoreProdMainPicDTO;
import com.ruoyi.xkt.dto.userShoppingCart.*;
import com.ruoyi.xkt.enums.EProductStatus;
import com.ruoyi.xkt.enums.FileType;
import com.ruoyi.xkt.enums.ProductSizeStatus;
import com.ruoyi.xkt.mapper.*;
@ -162,6 +161,8 @@ public class ShoppingCartServiceImpl implements IShoppingCartService {
List<StoreProductColorSize> standardSizeList = this.prodColorSizeMapper.selectList(new LambdaQueryWrapper<StoreProductColorSize>()
.eq(StoreProductColorSize::getStoreProdId, shoppingCart.getStoreProdId()).eq(StoreProductColorSize::getDelFlag, Constants.UNDELETED)
.eq(StoreProductColorSize::getStandard, ProductSizeStatus.STANDARD.getValue()));
// 标准尺码
List<Integer> standardList = standardSizeList.stream().map(StoreProductColorSize::getSize).distinct().collect(Collectors.toList());
Map<String, List<StoreProductColorSize>> colorSizeMap = standardSizeList.stream().collect(Collectors
.groupingBy(x -> x.getStoreProdId().toString() + x.getStoreColorId().toString()));
// 获取商品颜色列表
@ -191,10 +192,7 @@ public class ShoppingCartServiceImpl implements IShoppingCartService {
.collect(Collectors.toList());
return new ShopCartDetailResDTO() {{
setProdArtNum(shoppingCart.getProdArtNum()).setStoreProdId(shoppingCart.getStoreProdId())
.setStandardSizeList(standardSizeList.stream().map(StoreProductColorSize::getSize)
.sorted(Comparator.comparing(Function.identity()))
.collect(Collectors.toList()))
.setColorList(colorSizeStockList)
.setStandardSizeList(standardList).setColorList(colorSizeStockList)
.setDetailList(BeanUtil.copyToList(detailList, ShopCartDetailResDTO.SCDDetailDTO.class));
}};
}

View File

@ -219,11 +219,13 @@ public class UserFavoritesServiceImpl implements IUserFavoritesService {
@Override
@Transactional
public Integer batchDelete(UserFavBatchDeleteDTO batchDTO) {
Long userId = SecurityUtils.getUserIdSafe();
if (ObjectUtils.isEmpty(userId)) {
throw new ServiceException("用户未登录,请先登录!", HttpStatus.ERROR);
}
// 获取当前登录用户
LoginUser loginUser = SecurityUtils.getLoginUser();
List<UserFavorites> favoriteList = this.userFavMapper.selectList(new LambdaQueryWrapper<UserFavorites>()
.eq(UserFavorites::getUserId, loginUser.getUserId())
.in(UserFavorites::getStoreProdId, batchDTO.getStoreProdIdList())
.eq(UserFavorites::getUserId, userId).in(UserFavorites::getStoreProdId, batchDTO.getStoreProdIdList())
.eq(UserFavorites::getDelFlag, Constants.UNDELETED));
if (CollectionUtils.isEmpty(favoriteList)) {
return 0;
@ -251,5 +253,20 @@ public class UserFavoritesServiceImpl implements IUserFavoritesService {
return count;
}
/**
*
*
* @return UserFavStatusCountResDTO
*/
@Override
@Transactional(readOnly = true)
public UserFavStatusCountResDTO getStatusNum() {
Long userId = SecurityUtils.getUserIdSafe();
if (ObjectUtils.isEmpty(userId)) {
throw new ServiceException("用户未登录,请先登录!", HttpStatus.ERROR);
}
return this.userFavMapper.getStatusNum(userId);
}
}

View File

@ -68,18 +68,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<select id="getStatusNum">
SELECT
sc.id,
IFNULL( SUM( CASE WHEN sp.prod_status IN ( 2, 3 ) THEN 1 ELSE 0 END ), 0 ) AS onSaleNum,
IFNULL( SUM( CASE WHEN sp.prod_status IN ( 2 ) THEN 1 ELSE 0 END ), 0 ) AS onSaleNum,
IFNULL( SUM( CASE WHEN sp.prod_status IN ( 4, 5 ) THEN 1 ELSE 0 END ), 0 ) AS expiredNum
FROM
shopping_cart sc
LEFT JOIN store_product sp ON sc.store_prod_id = sp.id
WHERE
sc.del_flag = 0
AND sp.prod_status IN ( 2, 3, 4, 5 )
AND sc.user_id = #{userId}
GROUP BY
sc.id
</select>

View File

@ -29,10 +29,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
sp.prod_status
FROM
user_favorites uf
LEFT JOIN store_product sp ON uf.store_prod_id = sp.id
LEFT JOIN store s ON uf.store_id = s.id
JOIN store_product sp ON uf.store_prod_id = sp.id
JOIN store s ON uf.store_id = s.id
WHERE
uf.del_flag = 0 AND uf.user_id = #{userId}
<if test="storeName != null and storeName != ''"> AND s.store_name = #{storeName}</if>
<if test="prodArtNum != null and prodArtNum != ''"> AND sp.prod_art_num like concat('%', #{prodArtNum}, '%')</if>
</select>
<select id="searchTop10Prod" resultType="com.ruoyi.xkt.dto.dailyStoreTag.DailyStoreTagDTO">
@ -52,7 +54,17 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
LIMIT 10
</select>
<select id="getStatusNum">
SELECT
COUNT( CASE WHEN sp.prod_status IN (2) THEN 1 ELSE 0 END ) AS on_sale_num,
COUNT( CASE WHEN sp.prod_status IN (4,5) THEN 1 ELSE 0 END ) AS expired_num
FROM
user_favorites uf
JOIN store_product sp ON uf.store_prod_id = sp.id
WHERE
uf.del_flag = 0
AND uf.user_id = #{userId}
</select>
</mapper>