diff --git a/yami-shop-admin/src/main/java/com/yami/shop/admin/controller/SpecController.java b/yami-shop-admin/src/main/java/com/yami/shop/admin/controller/SpecController.java index 181fe05..87796f6 100644 --- a/yami-shop-admin/src/main/java/com/yami/shop/admin/controller/SpecController.java +++ b/yami-shop-admin/src/main/java/com/yami/shop/admin/controller/SpecController.java @@ -31,95 +31,137 @@ import java.util.Objects; /** * 规格管理 - * + * 该类作为规格管理相关功能的控制器,提供了规格的分页查询、获取所有规格、根据规格id获取规格值、规格的保存、修改、删除以及获取规格值最大自增id等操作的接口 * @author lgh */ @RestController @RequestMapping("/prod/spec") public class SpecController { + // 通过Spring的自动注入机制,注入ProdPropService对象,用于调用业务层处理商品属性相关的业务逻辑 @Autowired private ProdPropService prodPropService; + // 通过Spring的自动注入机制,注入ProdPropValueService对象,用于调用业务层处理商品属性值相关的业务逻辑 @Autowired private ProdPropValueService prodPropValueService; /** - * 分页获取 + * 分页获取规格信息的方法 + * 根据传入的规格筛选条件以及分页参数,获取符合条件的规格分页数据,同时进行权限校验和必要的属性设置 + * @param prodProp 规格对象,用于传递筛选规格的条件等信息 + * @param page 分页对象,包含分页相关的参数,如页码、每页数量等 + * @return 返回一个ServerResponseEntity>类型的响应,成功时包含符合条件的规格分页数据 */ @GetMapping("/page") @PreAuthorize("@pms.hasPermission('prod:spec:page')") - public ServerResponseEntity> page(ProdProp prodProp,PageParam page) { + // 使用 @PreAuthorize 注解进行权限校验,只有拥有'prod:spec:page'权限的用户才能访问该接口 + public ServerResponseEntity> page(ProdProp prodProp, PageParam page) { + // 设置规格的规则为指定的规格类型(SPEC),这里通过枚举值来表示 prodProp.setRule(ProdPropRule.SPEC.value()); + // 设置规格所属店铺的id,从当前登录用户信息中获取 prodProp.setShopId(SecurityUtils.getSysUser().getShopId()); + // 调用业务层方法获取规格以及对应规格值的分页数据(具体逻辑由业务层的pagePropAndValue方法决定) IPage list = prodPropService.pagePropAndValue(prodProp, page); return ServerResponseEntity.success(list); } - /** - * 获取所有的规格 + * 获取所有规格信息的方法 + * 通过查询条件筛选出符合要求的所有规格信息,并返回给前端 + * @return 返回一个ServerResponseEntity>类型的响应,成功时包含所有符合条件的规格列表数据 */ @GetMapping("/list") public ServerResponseEntity> list() { - List list = prodPropService.list(new LambdaQueryWrapper().eq(ProdProp::getRule, ProdPropRule.SPEC.value()).eq(ProdProp::getShopId, SecurityUtils.getSysUser().getShopId())); + // 使用MyBatis Plus的LambdaQueryWrapper构建查询条件,筛选出规则为指定规格类型(SPEC)且属于当前登录用户店铺的规格信息 + List list = prodPropService.list(new LambdaQueryWrapper() + .eq(ProdProp::getRule, ProdPropRule.SPEC.value()) + .eq(ProdProp::getShopId, SecurityUtils.getSysUser().getShopId())); return ServerResponseEntity.success(list); } /** - * 根据规格id获取规格值 + * 根据规格id获取规格值信息的方法 + * 根据传入的规格id,查询并返回对应的规格值列表数据 + * @param specId 要查询规格值的规格的唯一标识(id) + * @return 返回一个ServerResponseEntity>类型的响应,成功时包含对应规格id的规格值列表数据 */ @GetMapping("/listSpecValue/{specId}") public ServerResponseEntity> listSpecValue(@PathVariable("specId") Long specId) { - List list = prodPropValueService.list(new LambdaQueryWrapper().eq(ProdPropValue::getPropId, specId)); + // 使用MyBatis Plus的LambdaQueryWrapper构建查询条件,筛选出属性id(即规格id)为传入specId的规格值信息 + List list = prodPropValueService.list(new LambdaQueryWrapper() + .eq(ProdPropValue::getPropId, specId)); return ServerResponseEntity.success(list); } /** - * 保存 + * 保存规格信息的方法 + * 接收前端传入的规格信息,进行必要的属性设置后,调用业务层方法保存规格及其相关的规格值信息,并进行权限校验 + * @param prodProp 规格对象,包含要保存的规格及其规格值等详细信息 + * @return 返回一个ServerResponseEntity类型的响应,成功时表示保存操作成功,无具体返回数据 */ @PostMapping @PreAuthorize("@pms.hasPermission('prod:spec:save')") + // 使用 @PreAuthorize 注解进行权限校验,只有拥有'prod:spec:save'权限的用户才能访问该接口 public ServerResponseEntity save(@Valid @RequestBody ProdProp prodProp) { + // 设置规格的规则为指定的规格类型(SPEC),这里通过枚举值来表示 prodProp.setRule(ProdPropRule.SPEC.value()); + // 设置规格所属店铺的id,从当前登录用户信息中获取 prodProp.setShopId(SecurityUtils.getSysUser().getShopId()); + // 调用业务层方法保存规格以及对应的规格值信息(具体逻辑由业务层的saveProdPropAndValues方法决定) prodPropService.saveProdPropAndValues(prodProp); return ServerResponseEntity.success(); } /** - * 修改 + * 修改规格信息的方法 + * 接收前端传入的要修改的规格信息,进行权限校验、必要的属性设置后,调用业务层方法更新规格及其相关的规格值信息 + * @param prodProp 规格对象,包含要修改的规格及其规格值等详细信息 + * @return 返回一个ServerResponseEntity类型的响应,成功时表示修改操作成功,无具体返回数据 */ @PutMapping @PreAuthorize("@pms.hasPermission('prod:spec:update')") + // 使用 @PreAuthorize 注解进行权限校验,只有拥有'prod:spec:update'权限的用户才能访问该接口 public ServerResponseEntity update(@Valid @RequestBody ProdProp prodProp) { + // 根据传入的规格id从数据库中获取对应的规格对象,用于后续权限校验等操作 ProdProp dbProdProp = prodPropService.getById(prodProp.getPropId()); if (!Objects.equals(dbProdProp.getShopId(), SecurityUtils.getSysUser().getShopId())) { + // 如果当前登录用户所属店铺id与要修改的规格所属店铺id不一致,则抛出异常,提示没有权限获取该商品规格信息 throw new YamiShopBindException("没有权限获取该商品规格信息"); } + // 设置规格的规则为指定的规格类型(SPEC),这里通过枚举值来表示 prodProp.setRule(ProdPropRule.SPEC.value()); + // 设置规格所属店铺的id,从当前登录用户信息中获取 prodProp.setShopId(SecurityUtils.getSysUser().getShopId()); + // 调用业务层方法更新规格以及对应的规格值信息(具体逻辑由业务层的updateProdPropAndValues方法决定) prodPropService.updateProdPropAndValues(prodProp); return ServerResponseEntity.success(); } /** - * 删除 + * 删除规格信息的方法 + * 根据传入的规格id,调用业务层方法删除对应的规格及其相关的规格值信息,并进行权限校验 + * @param id 要删除的规格的唯一标识(id) + * @return 返回一个ServerResponseEntity类型的响应,成功时表示删除操作成功,无具体返回数据 */ @DeleteMapping("/{id}") @PreAuthorize("@pms.hasPermission('prod:spec:delete')") + // 使用 @PreAuthorize 注解进行权限校验,只有拥有'prod:spec:delete'权限的用户才能访问该接口 public ServerResponseEntity delete(@PathVariable Long id) { + // 调用业务层方法删除规格以及对应的规格值信息,传入规格id、规格规则类型以及当前登录用户所属店铺id等参数(具体逻辑由业务层的deleteProdPropAndValues方法决定) prodPropService.deleteProdPropAndValues(id, ProdPropRule.SPEC.value(), SecurityUtils.getSysUser().getShopId()); return ServerResponseEntity.success(); } /** - * 根据获取规格值最大的自增id + * 根据获取规格值最大的自增id的方法 + * 通过查询条件获取规格值中最大的自增id,并返回给前端 + * @return 返回一个ServerResponseEntity类型的响应,成功时包含规格值最大的自增id,若不存在则返回0L */ @GetMapping("/listSpecMaxValueId") public ServerResponseEntity listSpecMaxValueId() { + // 使用MyBatis Plus的LambdaQueryWrapper构建查询条件,按照规格值的自增id降序排列,并通过last方法限制只取第一条记录,即获取最大的自增id对应的规格值对象 ProdPropValue propValue = prodPropValueService.getOne(new LambdaQueryWrapper() - .orderByDesc(ProdPropValue::getValueId).last("limit 1")); - return ServerResponseEntity.success(Objects.isNull(propValue) ? 0L : propValue.getValueId()); + .orderByDesc(ProdPropValue::getValueId).last("limit 1")); + return ServerResponseEntity.success(Objects.isNull(propValue)? 0L : propValue.getValueId()); } - -} +} \ No newline at end of file