From b5c78ec3d4df6573a3e6e58b68d78db9619dc425 Mon Sep 17 00:00:00 2001 From: zjf <1799650030@qq.com> Date: Fri, 5 Sep 2025 19:30:05 +0800 Subject: [PATCH] =?UTF-8?q?=E5=85=B1=E5=AF=8C=E5=95=86=E5=9F=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entity/MallCategoryEntity.java | 2 +- .../supermarket/constant/MallConstants.java | 231 +++++------------- .../controller/MallAppController.java | 142 ++++------- .../MallMerchantUserController.java | 66 ++++- .../supermarket/dto/MallProductCreateDTO.java | 8 +- .../dto/MallProductSkuCreateDTO.java | 2 +- .../supermarket/dto/MerchantUserBindDTO.java | 3 +- .../dto/MerchantUserSingleBindDTO.java | 1 + .../entity/MallMerchantEntity.java | 2 +- .../entity/MallMerchantUserEntity.java | 3 +- .../supermarket/entity/MallProductEntity.java | 2 +- .../entity/MallProductSkuEntity.java | 2 +- .../mapper/MallMerchantUserMapper.java | 1 + .../service/MallMerchantUserService.java | 6 +- .../service/SelectOptionService.java | 5 +- .../impl/MallMerchantUserServiceImpl.java | 12 +- .../supermarket/vo/MallMerchantUserVo.java | 85 +++++++ .../vo/app/MallProductDetailAppVo.java | 1 + .../vo/app/MallProductListAppVo.java | 1 + .../vo/app/MallProductSkuAppVo.java | 1 + 20 files changed, 278 insertions(+), 298 deletions(-) create mode 100644 pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/vo/MallMerchantUserVo.java diff --git a/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/entity/MallCategoryEntity.java b/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/entity/MallCategoryEntity.java index e1dc650a6..07bd86854 100644 --- a/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/entity/MallCategoryEntity.java +++ b/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/entity/MallCategoryEntity.java @@ -58,7 +58,7 @@ public class MallCategoryEntity extends Model { * 状态(0正常,1下架) */ @Schema(description="状态(0正常,1下架)") - private Integer status; + private String status; /** * 分类图片 diff --git a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/constant/MallConstants.java b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/constant/MallConstants.java index 9dfda84fd..46d0ddb22 100644 --- a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/constant/MallConstants.java +++ b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/constant/MallConstants.java @@ -3,198 +3,95 @@ package com.bsd.pjcloud.supermarket.constant; /** * 商城相关常量 * - * @author zjf + * @author pjcloud * @date 2025-01-27 */ -public class MallConstants { +public interface MallConstants { /** - * 角色编码常量 + * 状态相关常量 */ - public static class RoleCode { - /** 商户用户角色 */ - public static final String MERCHANT_USER = "MALL_MCH"; - - /** 商城用户角色 */ -// public static final String MALL_USER = "Mall_USER"; - /** 商城管理员角色 */ -// public static final String MALL_ADMIN = "Mall_ADMIN"; + interface Status { + /** + * 启用状态 + */ + String ENABLED = "0"; + + /** + * 禁用状态 + */ + String DISABLED = "1"; + + /** + * 上架状态 + */ + String ON_SALE = "1"; + + /** + * 下架状态 + */ + String OFF_SALE = "0"; } /** - * 商户用户角色类型 + * 角色相关常量 */ - public static class MerchantUserRoleType { - /** 管理员 */ - public static final Integer ADMIN = 1; - /** 普通用户 */ - public static final Integer USER = 2; - } - - /** - * 状态常量 - */ - public static class Status { - /** 启用 */ - public static final Integer ENABLED = 1; - /** 禁用 */ - public static final Integer DISABLED = 0; + interface RoleCode { + /** + * 商户用户角色 + */ + String MERCHANT_USER = "MALL_MCH"; + + /** + * 超市管理员角色 + */ + String SUPERMARKET_ADMIN = "SUPERMARKET_ADMIN"; } /** * 商品相关常量 */ - public static class Product { - /** 商品状态 - 上架 */ - public static final Integer STATUS_ON_SALE = 1; - /** 商品状态 - 下架 */ - public static final Integer STATUS_OFF_SALE = 0; - /** 商品状态 - 草稿 */ - public static final Integer STATUS_DRAFT = 2; + interface Product { + /** + * 定价方式 - 多SKU + */ + Integer PRICE_TYPE_MULTI_SKU = 1; - /** 价格类型 - 统一价格 */ - public static final Integer PRICE_TYPE_UNIFIED = 1; - /** 价格类型 - SKU价格 */ - public static final Integer PRICE_TYPE_SKU = 2; - } - - /** - * 分类相关常量 - */ - public static class Category { - /** 分类状态 - 启用 */ - public static final Integer STATUS_ENABLED = 0; - /** 分类状态 - 禁用 */ - public static final Integer STATUS_DISABLED = 1; + /** + * 定价方式 - 单价SPU + */ + Integer PRICE_TYPE_SINGLE_SPU = 2; } /** * 商户相关常量 */ - public static class Merchant { - /** 商户状态 - 正常 */ - public static final Integer STATUS_NORMAL = 1; - /** 商户状态 - 停用 */ - public static final Integer STATUS_DISABLED = 0; - /** 商户状态 - 审核中 */ - public static final Integer STATUS_PENDING = 2; - } - - /** - * 库存相关常量 - */ - public static class Stock { - /** 库存操作 - 增加 */ - public static final String OPERATION_ADD = "ADD"; - /** 库存操作 - 减少 */ - public static final String OPERATION_REDUCE = "REDUCE"; - /** 库存操作 - 设置 */ - public static final String OPERATION_SET = "SET"; - } - - /** - * 订单相关常量 - */ - public static class Order { - /** 订单状态 - 待支付 */ - public static final Integer STATUS_PENDING_PAYMENT = 1; - /** 订单状态 - 已支付 */ - public static final Integer STATUS_PAID = 2; - /** 订单状态 - 已发货 */ - public static final Integer STATUS_SHIPPED = 3; - /** 订单状态 - 已完成 */ - public static final Integer STATUS_COMPLETED = 4; - /** 订单状态 - 已取消 */ - public static final Integer STATUS_CANCELLED = 5; - /** 订单状态 - 已退款 */ - public static final Integer STATUS_REFUNDED = 6; - } - - /** - * 权限相关常量 - */ - public static class Permission { - /** 商品管理权限前缀 */ - public static final String PRODUCT_PREFIX = "supermarket_mallProduct_"; - /** 商户管理权限前缀 */ - public static final String MERCHANT_PREFIX = "supermarket_mallMerchant_"; - /** 分类管理权限前缀 */ - public static final String CATEGORY_PREFIX = "supermarket_mallCategory_"; - /** 商户用户绑定权限前缀 */ - public static final String MERCHANT_USER_PREFIX = "supermarket_mallMerchantUser_"; + interface Merchant { + /** + * 商户状态 - 正常 + */ + String STATUS_NORMAL = "1"; - /** 查看权限 */ - public static final String VIEW = "view"; - /** 新增权限 */ - public static final String ADD = "add"; - /** 编辑权限 */ - public static final String EDIT = "edit"; - /** 删除权限 */ - public static final String DEL = "del"; - /** 导出权限 */ - public static final String EXPORT = "export"; + /** + * 商户状态 - 停用 + */ + String STATUS_DISABLED = "0"; } /** - * 缓存相关常量 + * 删除标记 */ - public static class Cache { - /** 商品缓存前缀 */ - public static final String PRODUCT_PREFIX = "mall:product:"; - /** 商户缓存前缀 */ - public static final String MERCHANT_PREFIX = "mall:merchant:"; - /** 分类缓存前缀 */ - public static final String CATEGORY_PREFIX = "mall:category:"; - /** 用户商户绑定缓存前缀 */ - public static final String MERCHANT_USER_PREFIX = "mall:merchant_user:"; + interface DelFlag { + /** + * 正常 + */ + String NORMAL = "0"; - /** 缓存过期时间 - 1小时 */ - public static final long EXPIRE_1_HOUR = 3600; - /** 缓存过期时间 - 1天 */ - public static final long EXPIRE_1_DAY = 86400; - /** 缓存过期时间 - 1周 */ - public static final long EXPIRE_1_WEEK = 604800; - } - - /** - * 分页相关常量 - */ - public static class Page { - /** 默认页码 */ - public static final Integer DEFAULT_PAGE_NUM = 1; - /** 默认页大小 */ - public static final Integer DEFAULT_PAGE_SIZE = 10; - /** 最大页大小 */ - public static final Integer MAX_PAGE_SIZE = 100; - } - - /** - * 文件上传相关常量 - */ - public static class File { - /** 图片文件类型 */ - public static final String[] IMAGE_TYPES = {"jpg", "jpeg", "png", "gif", "bmp", "webp"}; - /** 最大文件大小 - 5MB */ - public static final long MAX_FILE_SIZE = 5 * 1024 * 1024; - /** 商品图片路径 */ - public static final String PRODUCT_IMAGE_PATH = "/mall/product/"; - /** 商户图片路径 */ - public static final String MERCHANT_IMAGE_PATH = "/mall/merchant/"; - } - - /** - * 业务异常相关常量 - */ - public static class ErrorCode { - /** 用户未绑定商户 */ - public static final String USER_NOT_BOUND_MERCHANT = "USER_NOT_BOUND_MERCHANT"; - /** 商户不存在 */ - public static final String MERCHANT_NOT_EXISTS = "MERCHANT_NOT_EXISTS"; - /** 商品不存在 */ - public static final String PRODUCT_NOT_EXISTS = "PRODUCT_NOT_EXISTS"; - /** 库存不足 */ - public static final String INSUFFICIENT_STOCK = "INSUFFICIENT_STOCK"; - /** 权限不足 */ - public static final String INSUFFICIENT_PERMISSION = "INSUFFICIENT_PERMISSION"; + /** + * 删除 + */ + String DELETED = "1"; } } + + diff --git a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/controller/MallAppController.java b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/controller/MallAppController.java index 1c8f577f3..c336912e4 100644 --- a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/controller/MallAppController.java +++ b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/controller/MallAppController.java @@ -242,20 +242,11 @@ public class MallAppController { @Operation(summary = "商户创建商品", description = "移动端商户创建商品,支持包含SKU") public R createProduct(@RequestBody MallProductCreateDTO productCreateDTO) { try { - // 获取当前用户绑定的商户ID - Long currentUserId = SecurityUtils.getUser().getId(); - Long userMerchantId = mallMerchantUserService.getMerchantIdByUserId(currentUserId); - - if (userMerchantId == null) { - return R.failed("用户未绑定商户"); - } - + Long userMerchantId = validateMerchant(); + // 自动设置商户ID productCreateDTO.setMerchantId(userMerchantId); - // 验证商户权限和状态 - validateMerchant(userMerchantId); - // 创建商品 boolean success = mallProductService.createProductWithSkus(productCreateDTO); if (success) { @@ -275,37 +266,17 @@ public class MallAppController { @Operation(summary = "商户更新商品", description = "移动端商户更新商品,支持包含SKU") public R updateProduct(@RequestBody MallProductCreateDTO productCreateDTO) { try { - // 获取当前用户绑定的商户ID - Long currentUserId = SecurityUtils.getUser().getId(); - - Long userMerchantId = mallMerchantUserService.getMerchantIdByUserId(currentUserId); - - if (userMerchantId == null) { - return R.failed("用户未绑定商户"); - } + + //验证商户 + Long merchantId = validateMerchant(); + //验证商品数据 + validateProductPermission(productCreateDTO.getId(),merchantId); + // 验证商品ID if (productCreateDTO.getId() == null) { return R.failed("商品ID不能为空"); } - - // 验证商品是否存在 - MallProductEntity existingProduct = mallProductService.getById(productCreateDTO.getId()); - if (existingProduct == null) { - return R.failed("商品不存在"); - } - - // 验证商户权限(只能更新自己的商品) - if (!userMerchantId.equals(existingProduct.getMerchantId())) { - return R.failed("无权限更新此商品"); - } - - // 自动设置商户ID - productCreateDTO.setMerchantId(userMerchantId); - - // 验证商户权限和状态 - validateMerchant(userMerchantId); - // 更新商品 boolean success = mallProductService.updateProductWithSkus(productCreateDTO); if (success) { @@ -318,13 +289,18 @@ public class MallAppController { } } - private void validateMerchant(Long merchantId) { + /** + * 验证商户权限和状态 + * @return 商户id + */ + private Long validateMerchant() { // 获取当前用户ID Long currentUserId = SecurityUtils.getUser().getId(); if (currentUserId == null) { throw new BusinessException("用户未登录"); } + Long merchantIdByUserId=null; // 验证用户是否有商户角色 List roleIds = SecurityUtils.getRoleIds(); R> mallMchUserLists = remoteRoleService.findRolesByCodes(Arrays.asList(MallConstants.RoleCode.MERCHANT_USER)); @@ -333,35 +309,34 @@ public class MallAppController { if (CollectionUtils.isEmpty(list) || CollUtil.isEmpty(roleIds) || !roleIds.contains(list.get(0).getRoleId())) { throw new BusinessException("请分配商户角色"); } + //有商户角色,然后查询自己绑定的商户信息 + merchantIdByUserId = mallMerchantUserService.getMerchantIdByUserId(currentUserId); + if (merchantIdByUserId == null){ + throw new BusinessException("当前用户未绑定商户"); + } + } else { throw new BusinessException("基础用户服务异常"); } - // 验证用户是否绑定到指定商户 - if (merchantId != null) { - boolean hasPermission = mallMerchantUserService.hasPermission(currentUserId, merchantId); - if (!hasPermission) { - throw new BusinessException("无权限操作此商户的商品"); - } - } else { - // 如果没有指定商户ID,获取用户绑定的商户ID - Long userMerchantId = mallMerchantUserService.getMerchantIdByUserId(currentUserId); - if (userMerchantId == null) { - throw new BusinessException("用户未绑定商户"); - } - } + return merchantIdByUserId; + } - // 验证商户是否存在和状态 - if (merchantId != null) { - MallMerchantEntity merchant = mallMerchantService.getById(merchantId); - if (merchant == null) { - throw new BusinessException("商户不存在"); - } - if (!MallConstants.Status.ENABLED.equals(merchant.getStatus())) { - throw new BusinessException("商户状态异常,无法操作商品"); - } + + /** + * 验证是否有处理该条商品数据的权限 + */ + private void validateProductPermission(Long productId, Long merchantId) { + + MallProductEntity mallProduct = mallProductService.getById(productId); + if (mallProduct == null) { + throw new BusinessException("商品不存在"); + } + if (!merchantId.equals(mallProduct.getMerchantId())) { + throw new BusinessException("无权限处理此商品"); } } + /** * 商户获取自己的商品列表 */ @@ -375,28 +350,9 @@ public class MallAppController { @RequestParam(required = false) Integer status ) { try { - // 获取当前用户绑定的商户ID - Long currentUserId = SecurityUtils.getUser().getId(); - Long userMerchantId = mallMerchantUserService.getMerchantIdByUserId(currentUserId); - - if (userMerchantId == null) { - return R.failed("用户未绑定商户"); - } - - // 如果指定了商户ID,验证权限 - if (merchantId != null && !merchantId.equals(userMerchantId)) { - return R.failed("无权限查看其他商户的商品"); - } - - // 使用用户绑定的商户ID - Long targetMerchantId = merchantId != null ? merchantId : userMerchantId; - - // 验证商户是否存在 - MallMerchantEntity merchant = mallMerchantService.getById(targetMerchantId); - if (merchant == null) { - return R.failed("商户不存在"); - } - + + Long targetMerchantId = validateMerchant(); + LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(); wrapper.eq(MallProductEntity::getMerchantId, targetMerchantId); wrapper.eq(categoryId != null, MallProductEntity::getCategoryId, categoryId); @@ -456,25 +412,9 @@ public class MallAppController { @Operation(summary = "商户删除商品", description = "移动端商户删除自己的商品") public R deleteProduct(@PathVariable("id") Long id) { try { - // 获取当前用户绑定的商户ID - Long currentUserId = SecurityUtils.getUser().getId(); - Long userMerchantId = mallMerchantUserService.getMerchantIdByUserId(currentUserId); - - if (userMerchantId == null) { - return R.failed("用户未绑定商户"); - } - - // 验证商品是否存在 - MallProductEntity product = mallProductService.getById(id); - if (product == null) { - return R.failed("商品不存在"); - } - - // 验证商户权限 - if (!userMerchantId.equals(product.getMerchantId())) { - return R.failed("无权限删除此商品"); - } - + + Long l = validateMerchant(); + validateProductPermission(id, l); // 删除商品(逻辑删除) boolean success = mallProductService.removeById(id); if (success) { diff --git a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/controller/MallMerchantUserController.java b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/controller/MallMerchantUserController.java index cab064c28..297e78766 100644 --- a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/controller/MallMerchantUserController.java +++ b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/controller/MallMerchantUserController.java @@ -12,6 +12,7 @@ import com.bsd.pjcloud.supermarket.dto.MerchantUserSingleBindDTO; import com.bsd.pjcloud.supermarket.entity.MallMerchantUserEntity; import com.bsd.pjcloud.supermarket.service.MallMerchantUserService; import com.bsd.pjcloud.supermarket.constant.MallConstants; +import com.bsd.pjcloud.supermarket.vo.MallMerchantUserVo; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.security.SecurityRequirement; import io.swagger.v3.oas.annotations.tags.Tag; @@ -71,9 +72,24 @@ public class MallMerchantUserController { @Operation(summary = "获取商户用户列表", description = "根据商户ID获取绑定的用户列表") @GetMapping("/merchant/{merchantId}/users") @PreAuthorize("@pms.hasPermission('supermarket_mallMerchant_view')" ) - public R> getMerchantUsers(@PathVariable("merchantId") Long merchantId) { + public R> getMerchantUsers(@PathVariable("merchantId") Long merchantId) { List users = mallMerchantUserService.getMerchantUsers(merchantId); - return R.ok(users); + + // 转换为VO对象 + List userVos = users.stream().map(entity -> { + MallMerchantUserVo vo = new MallMerchantUserVo(); + vo.setId(entity.getId()); + vo.setMerchantId(entity.getMerchantId()); + vo.setUserId(entity.getUserId()); + vo.setName(entity.getUserName()); + vo.setPhone(entity.getUserPhone()); + vo.setStatus(entity.getStatus()); + vo.setStatusDesc("1".equals(entity.getStatus()) ? "启用" : "0".equals(entity.getStatus()) ? "禁用" : "未知"); + + return vo; + }).toList(); + + return R.ok(userVos); } /** @@ -122,10 +138,20 @@ public class MallMerchantUserController { @PreAuthorize("@pms.hasPermission('supermarket_mallMerchant_add')" ) @SysLog("批量商户用户绑定") public R batchBindUsers(@Valid @RequestBody MerchantUserBindDTO bindDTO) { + // 添加调试日志 + System.out.println("接收到的数据: " + bindDTO); + System.out.println("merchantId: " + bindDTO.getMerchantId()); + System.out.println("userIds: " + bindDTO.getUserIds()); + System.out.println("roleType: " + bindDTO.getRoleType()); try { + // 将String类型的userIds转换为Long类型 + List userIds = bindDTO.getUserIds().stream() + .map(Long::valueOf) + .collect(java.util.stream.Collectors.toList()); + int successCount = mallMerchantUserService.batchBindUsersToMerchant( bindDTO.getMerchantId(), - bindDTO.getUserIds(), + userIds, bindDTO.getRoleType() ); @@ -146,12 +172,18 @@ public class MallMerchantUserController { * 解绑单个用户 */ @Operation(summary = "解绑用户", description = "解绑单个用户") - @DeleteMapping("/unbind/{userId}") + @DeleteMapping("/unbind") @PreAuthorize("@pms.hasPermission('supermarket_mallMerchant_add')" ) @SysLog("商户用户解绑") - public R unbindUser(@PathVariable("userId") Long userId) { + public R unbindUser(@RequestBody MerchantUserBindDTO bindDTO) { try { - boolean success = mallMerchantUserService.unbindUserFromMerchant(userId); + // 从userIds中取第一个用户ID + if (bindDTO.getUserIds() == null || bindDTO.getUserIds().isEmpty()) { + return R.failed("用户ID不能为空"); + } + + Long userId = Long.valueOf(bindDTO.getUserIds().get(0)); + boolean success = mallMerchantUserService.unbindUserFromMerchant(bindDTO.getMerchantId(), userId); if (success) { return R.ok("用户解绑成功"); } else { @@ -169,9 +201,14 @@ public class MallMerchantUserController { @DeleteMapping("/batchUnbind") @PreAuthorize("@pms.hasPermission('supermarket_mallMerchant_add')" ) @SysLog("批量商户用户解绑") - public R batchUnbindUsers(@RequestBody List userIds) { + public R batchUnbindUsers(@RequestBody MerchantUserBindDTO bindDTO) { try { - int successCount = mallMerchantUserService.batchUnbindUsersFromMerchant(userIds); + // 将String类型的userIds转换为Long类型 + List userIds = bindDTO.getUserIds().stream() + .map(Long::valueOf) + .collect(java.util.stream.Collectors.toList()); + + int successCount = mallMerchantUserService.batchUnbindUsersFromMerchant(bindDTO.getMerchantId(), userIds); if (successCount > 0) { return R.ok(String.format("成功解绑%d个用户", successCount)); } else { @@ -220,14 +257,14 @@ public class MallMerchantUserController { @SysLog("更新商户用户状态") public R updateUserStatus( @RequestParam Long userId, - @RequestParam Integer status + @RequestParam String status ) { try { MallMerchantUserEntity merchantUser = mallMerchantUserService.getByUserId(userId); if (merchantUser == null) { return R.failed("用户绑定关系不存在"); } - + merchantUser.setStatus(status); boolean success = mallMerchantUserService.updateById(merchantUser); if (success) { @@ -258,4 +295,13 @@ public class MallMerchantUserController { return R.ok(data); } + /** + * 测试JSON反序列化 + */ + @Operation(summary = "测试JSON反序列化", description = "测试JSON反序列化") + @PostMapping("/testJson") + public R testJson(@RequestBody MerchantUserBindDTO bindDTO) { + return R.ok("JSON反序列化成功: " + bindDTO); + } + } diff --git a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/dto/MallProductCreateDTO.java b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/dto/MallProductCreateDTO.java index 3452392eb..f7e2be73f 100644 --- a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/dto/MallProductCreateDTO.java +++ b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/dto/MallProductCreateDTO.java @@ -30,9 +30,9 @@ public class MallProductCreateDTO { /** * 商户ID */ - @NotNull(message = "商户ID不能为空") - @Schema(description = "商户ID") - private Long merchantId; +// @NotNull(message = "商户ID不能为空") +// @Schema(description = "商户ID") +// private Long merchantId; /** * 类目ID @@ -101,7 +101,7 @@ public class MallProductCreateDTO { * 状态(1上架 0下架) */ @Schema(description = "状态(1上架 0下架)") - private Integer status; + private String status; /** * 开售时间 diff --git a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/dto/MallProductSkuCreateDTO.java b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/dto/MallProductSkuCreateDTO.java index 41fcfe397..45a10ffde 100644 --- a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/dto/MallProductSkuCreateDTO.java +++ b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/dto/MallProductSkuCreateDTO.java @@ -73,7 +73,7 @@ public class MallProductSkuCreateDTO { * 状态(1启用 0停用) */ @Schema(description = "状态(1启用 0停用)") - private Integer status; + private String status; } diff --git a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/dto/MerchantUserBindDTO.java b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/dto/MerchantUserBindDTO.java index 70c30fdab..24ff2ab78 100644 --- a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/dto/MerchantUserBindDTO.java +++ b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/dto/MerchantUserBindDTO.java @@ -22,8 +22,9 @@ public class MerchantUserBindDTO { @NotNull(message = "用户ID列表不能为空") @Schema(description = "用户ID列表") - private List userIds; + private List userIds; @Schema(description = "角色类型(1:管理员 2:普通用户)", example = "1") private Integer roleType = 1; } + diff --git a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/dto/MerchantUserSingleBindDTO.java b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/dto/MerchantUserSingleBindDTO.java index 5baea32ca..aef6b1b2a 100644 --- a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/dto/MerchantUserSingleBindDTO.java +++ b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/dto/MerchantUserSingleBindDTO.java @@ -32,3 +32,4 @@ public class MerchantUserSingleBindDTO { @Schema(description = "角色类型(1:管理员 2:普通用户)", example = "1") private Integer roleType = 1; } + diff --git a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/entity/MallMerchantEntity.java b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/entity/MallMerchantEntity.java index f0a301b98..d4267aafd 100644 --- a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/entity/MallMerchantEntity.java +++ b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/entity/MallMerchantEntity.java @@ -63,7 +63,7 @@ public class MallMerchantEntity extends Model { * 状态(1启用 0停用) */ @Schema(description="状态(1启用 0停用)") - private Integer status; + private String status; /** * 营业执照号 diff --git a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/entity/MallMerchantUserEntity.java b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/entity/MallMerchantUserEntity.java index c4a7db4c4..aee72b7c8 100644 --- a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/entity/MallMerchantUserEntity.java +++ b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/entity/MallMerchantUserEntity.java @@ -62,7 +62,7 @@ public class MallMerchantUserEntity extends Model { * 状态(1:启用 0:禁用) */ @Schema(description = "状态(1:启用 0:禁用)") - private Integer status; + private String status; /** * 创建者 @@ -106,3 +106,4 @@ public class MallMerchantUserEntity extends Model { @Schema(description = "租户编号") private Long tenantId; } + diff --git a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/entity/MallProductEntity.java b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/entity/MallProductEntity.java index 4e29f7c68..7ff265f53 100644 --- a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/entity/MallProductEntity.java +++ b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/entity/MallProductEntity.java @@ -106,7 +106,7 @@ public class MallProductEntity extends Model { * 状态(1上架 0下架) */ @Schema(description="状态(1上架 0下架)") - private Integer status; + private String status; /** * 开售时间 diff --git a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/entity/MallProductSkuEntity.java b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/entity/MallProductSkuEntity.java index 616fa5fd9..48243a29f 100644 --- a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/entity/MallProductSkuEntity.java +++ b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/entity/MallProductSkuEntity.java @@ -88,7 +88,7 @@ public class MallProductSkuEntity extends Model { * 状态(1启用 0停用) */ @Schema(description="状态(1启用 0停用)") - private Integer status; + private String status; /** * 部门ID diff --git a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/mapper/MallMerchantUserMapper.java b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/mapper/MallMerchantUserMapper.java index 7ec015c88..b5dcbfcb4 100644 --- a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/mapper/MallMerchantUserMapper.java +++ b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/mapper/MallMerchantUserMapper.java @@ -8,3 +8,4 @@ import org.apache.ibatis.annotations.Mapper; public interface MallMerchantUserMapper extends PjcloudBaseMapper { } + diff --git a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/MallMerchantUserService.java b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/MallMerchantUserService.java index 159b71622..273223a33 100644 --- a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/MallMerchantUserService.java +++ b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/MallMerchantUserService.java @@ -41,10 +41,11 @@ public interface MallMerchantUserService extends IService userIds); + int batchUnbindUsersFromMerchant(Long merchantId, List userIds); /** * 根据商户ID获取绑定的用户列表(包含用户信息) diff --git a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/SelectOptionService.java b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/SelectOptionService.java index 949cf8a65..10f5cbf98 100644 --- a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/SelectOptionService.java +++ b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/SelectOptionService.java @@ -2,6 +2,7 @@ package com.bsd.pjcloud.supermarket.service; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.bsd.pjcloud.supermarket.constant.MallConstants; import com.bsd.pjcloud.supermarket.dto.SelectOptionDTO; import com.bsd.pjcloud.supermarket.entity.MallCategoryEntity; import com.bsd.pjcloud.supermarket.entity.MallMerchantEntity; @@ -61,7 +62,7 @@ public class SelectOptionService { public List getCategorySelectList() { return mallCategoryService.listScope() .stream() - .filter(category -> category.getStatus() == 1) // 只返回启用状态的分类 + .filter(category -> category.getStatus() == MallConstants.Status.ENABLED) // 只返回启用状态的分类 .map(category -> new SelectOptionDTO( category.getId(), category.getName(), @@ -89,7 +90,7 @@ public class SelectOptionService { */ private List buildCategorySelectTree(List allCategories, Long parentId, String prefix) { return allCategories.stream() - .filter(category -> category.getStatus() == 1 && + .filter(category -> category.getStatus() == MallConstants.Status.ENABLED && (parentId == null ? category.getParentId() == null : parentId.equals(category.getParentId()))) .map(category -> { String label = prefix + category.getName(); diff --git a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/impl/MallMerchantUserServiceImpl.java b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/impl/MallMerchantUserServiceImpl.java index 021d9c451..b930544c0 100644 --- a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/impl/MallMerchantUserServiceImpl.java +++ b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/impl/MallMerchantUserServiceImpl.java @@ -72,9 +72,10 @@ public class MallMerchantUserServiceImpl extends ServiceImpl wrapper = Wrappers.lambdaQuery(); - wrapper.eq(MallMerchantUserEntity::getUserId, userId); + wrapper.eq(MallMerchantUserEntity::getMerchantId, merchantId) + .eq(MallMerchantUserEntity::getUserId, userId); return this.remove(wrapper); } @@ -126,13 +127,14 @@ public class MallMerchantUserServiceImpl extends ServiceImpl userIds) { - if (userIds == null || userIds.isEmpty()) { + public int batchUnbindUsersFromMerchant(Long merchantId, List userIds) { + if (merchantId == null || userIds == null || userIds.isEmpty()) { return 0; } LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(); - wrapper.in(MallMerchantUserEntity::getUserId, userIds); + wrapper.eq(MallMerchantUserEntity::getMerchantId, merchantId) + .in(MallMerchantUserEntity::getUserId, userIds); return this.remove(wrapper) ? userIds.size() : 0; } diff --git a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/vo/MallMerchantUserVo.java b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/vo/MallMerchantUserVo.java new file mode 100644 index 000000000..c95fe7513 --- /dev/null +++ b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/vo/MallMerchantUserVo.java @@ -0,0 +1,85 @@ +package com.bsd.pjcloud.supermarket.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; + +/** + * 商户用户绑定信息VO + * + * @author pjcloud + * @date 2025-01-27 + */ +@Data +@Schema(description = "商户用户绑定信息") +public class MallMerchantUserVo { + + /** + * 主键ID + */ + @Schema(description = "主键ID") + private Long id; + + /** + * 商户ID + */ + @Schema(description = "商户ID") + private Long merchantId; + + /** + * 用户ID + */ + @Schema(description = "用户ID") + private Long userId; + + /** + * 用户名称 + */ + @Schema(description = "用户名称") + private String name; + + /** + * 用户手机号 + */ + @Schema(description = "用户手机号") + private String phone; + + /** + * 角色类型(1:管理员 2:普通用户) + */ + @Schema(description = "角色类型(1:管理员 2:普通用户)") + private Integer roleType; + + /** + * 角色类型描述 + */ + @Schema(description = "角色类型描述") + private String roleTypeDesc; + + /** + * 状态(1:启用 0:禁用) + */ + @Schema(description = "状态(1:启用 0:禁用)") + private String status; + + /** + * 状态描述 + */ + @Schema(description = "状态描述") + private String statusDesc; + + /** + * 创建时间 + */ + @Schema(description = "创建时间") + private LocalDateTime createTime; + + /** + * 更新时间 + */ + @Schema(description = "更新时间") + private LocalDateTime updateTime; +} + + diff --git a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/vo/app/MallProductDetailAppVo.java b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/vo/app/MallProductDetailAppVo.java index 5fd0590ba..6b8a45fde 100644 --- a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/vo/app/MallProductDetailAppVo.java +++ b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/vo/app/MallProductDetailAppVo.java @@ -125,3 +125,4 @@ public class MallProductDetailAppVo { @Schema(description = "SKU列表") private List skuList; } + diff --git a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/vo/app/MallProductListAppVo.java b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/vo/app/MallProductListAppVo.java index 2b95cbfb9..44b489230 100644 --- a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/vo/app/MallProductListAppVo.java +++ b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/vo/app/MallProductListAppVo.java @@ -105,3 +105,4 @@ public class MallProductListAppVo { @Schema(description = "最低价格") private BigDecimal minPrice; } + diff --git a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/vo/app/MallProductSkuAppVo.java b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/vo/app/MallProductSkuAppVo.java index 26d6adafa..16b68fff9 100644 --- a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/vo/app/MallProductSkuAppVo.java +++ b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/vo/app/MallProductSkuAppVo.java @@ -81,3 +81,4 @@ public class MallProductSkuAppVo { @Schema(description = "状态") private Integer status; } +