add - 添加产品相关接口的实现
This commit is contained in:
parent
182c815d9d
commit
5473f434d6
@ -10,6 +10,7 @@ import cn.axzo.tyr.client.model.product.ProductSearchPageReq;
|
||||
import cn.axzo.tyr.client.model.product.ProductUpdateReq;
|
||||
import cn.axzo.tyr.client.model.product.ProductVO;
|
||||
import org.springframework.cloud.openfeign.FeignClient;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.DeleteMapping;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
@ -28,26 +29,67 @@ import java.util.Map;
|
||||
@FeignClient(name = "tyr", url = "${axzo.service.tyr:http://tyr:8080}")
|
||||
public interface ProductApi {
|
||||
|
||||
/**
|
||||
* 获取产品基础信息的列表
|
||||
*
|
||||
* @param req {@link ProductSearchListReq}
|
||||
* @return 如果没有查询到, 返回空集合, 集合内类型: {@link ProductVO}
|
||||
*/
|
||||
@PostMapping("api/auth/product/list")
|
||||
ApiResult<List<ProductVO>> list(@RequestBody ProductSearchListReq req);
|
||||
|
||||
/**
|
||||
* 获取产品基础信息的分页列表
|
||||
*
|
||||
* @param req {@link ProductSearchPageReq}
|
||||
* @return 如果没有查询, 返回 ApiPageResult.empty(), 携带分页信息,集合内类型: {@link ProductVO}
|
||||
*/
|
||||
@PostMapping("api/auth/product/page")
|
||||
ApiPageResult<ProductVO> page(@RequestBody ProductSearchPageReq req);
|
||||
|
||||
/**
|
||||
* 获取指定 ID 的产品基础信息
|
||||
*
|
||||
* @param id 产品 ID
|
||||
* @return {@link ProductVO}
|
||||
*/
|
||||
@GetMapping("api/auth/product/get/id")
|
||||
ApiResult<ProductVO> getById(Long id);
|
||||
|
||||
/**
|
||||
* 新增产品基础信息
|
||||
*
|
||||
* @param req {@link ProductAddReq}
|
||||
* @return 返回当前新增产品基础信息
|
||||
*/
|
||||
@PostMapping("api/auth/product/add")
|
||||
ApiResult<ProductVO> add(@RequestBody ProductAddReq req);
|
||||
ApiResult<ProductVO> add(@Validated @RequestBody ProductAddReq req);
|
||||
|
||||
/**
|
||||
* 修改产品基础信息
|
||||
*
|
||||
* @param req {@link ProductUpdateReq}
|
||||
* @return 返回修改后的产品基础信息
|
||||
*/
|
||||
@PutMapping("api/auth/product/update")
|
||||
ApiResult<ProductVO> update(@RequestBody ProductUpdateReq req);
|
||||
ApiResult<ProductVO> update(@Validated @RequestBody ProductUpdateReq req);
|
||||
|
||||
/**
|
||||
* 删除指定 ID 的产品
|
||||
*
|
||||
* @param id 产品 ID
|
||||
* @return 返回被删除的产品信息
|
||||
*/
|
||||
@DeleteMapping("api/auth/product/delete/id")
|
||||
ApiResult<ProductVO> delete(Long id);
|
||||
|
||||
/**
|
||||
* 返回指定产品和单位类型下所有已有权限点集合
|
||||
*
|
||||
* @param req {@link ProductFeatureRelationSearchReq}
|
||||
* @return 如果没有查询到, 返回空集合, 集合内类型: {@link ProductFeatureRelationVO}
|
||||
*/
|
||||
@PostMapping("api/auth/product/feature/relation/list")
|
||||
ApiResult<List<ProductFeatureRelationVO>> featureList(@RequestBody ProductFeatureRelationSearchReq req);
|
||||
ApiResult<List<ProductFeatureRelationVO>> featureList(@Validated @RequestBody ProductFeatureRelationSearchReq req);
|
||||
|
||||
@PostMapping("api/auth/products/feature/relation/map")
|
||||
ApiResult<Map<String, List<ProductFeatureRelationVO>>> featureMap(@RequestBody List<ProductFeatureRelationVO> req);
|
||||
}
|
||||
|
||||
@ -5,6 +5,8 @@ import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import javax.validation.constraints.NotNull;
|
||||
|
||||
/**
|
||||
* 产品与权限点搜索入参模型
|
||||
*
|
||||
@ -20,6 +22,7 @@ public class ProductFeatureRelationSearchReq {
|
||||
/**
|
||||
* 产品 ID
|
||||
*/
|
||||
@NotNull(message = "产品 ID 不能为空")
|
||||
private Long productModuleId;
|
||||
|
||||
/**
|
||||
|
||||
@ -4,7 +4,9 @@ import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import org.hibernate.validator.constraints.Length;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import javax.validation.constraints.NotNull;
|
||||
|
||||
/**
|
||||
|
||||
@ -38,6 +38,11 @@ public class ProductVO {
|
||||
* 产品所属工作台类型
|
||||
*/
|
||||
private Long dictWorkspaceTypeId;
|
||||
|
||||
/**
|
||||
* 产品所属工作类型名称
|
||||
*/
|
||||
private String dictWorkspaceTypeDesc;
|
||||
|
||||
/**
|
||||
* 上下架状态 1:上架, 0:下架
|
||||
|
||||
@ -0,0 +1,110 @@
|
||||
package cn.axzo.tyr.server.controller.product;
|
||||
|
||||
import cn.axzo.framework.domain.web.result.ApiPageResult;
|
||||
import cn.axzo.framework.domain.web.result.ApiResult;
|
||||
import cn.axzo.tyr.client.feign.ProductApi;
|
||||
import cn.axzo.tyr.client.model.product.ProductAddReq;
|
||||
import cn.axzo.tyr.client.model.product.ProductFeatureRelationSearchReq;
|
||||
import cn.axzo.tyr.client.model.product.ProductFeatureRelationVO;
|
||||
import cn.axzo.tyr.client.model.product.ProductSearchListReq;
|
||||
import cn.axzo.tyr.client.model.product.ProductSearchPageReq;
|
||||
import cn.axzo.tyr.client.model.product.ProductUpdateReq;
|
||||
import cn.axzo.tyr.client.model.product.ProductVO;
|
||||
import cn.axzo.tyr.server.service.ProductFeatureRelationService;
|
||||
import cn.axzo.tyr.server.service.ProductService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 产品相关 API 实现
|
||||
*
|
||||
* @author wangli
|
||||
* @since 2023/9/7 14:05
|
||||
*/
|
||||
@Slf4j
|
||||
@RestController
|
||||
@RequiredArgsConstructor
|
||||
public class ProductController implements ProductApi {
|
||||
|
||||
private final ProductService productService;
|
||||
private final ProductFeatureRelationService productFeatureRelationService;
|
||||
/**
|
||||
* 获取产品基础信息的列表
|
||||
*
|
||||
* @param req {@link ProductSearchListReq}
|
||||
* @return 如果没有查询到, 返回空集合, 集合内类型: {@link ProductVO}
|
||||
*/
|
||||
@Override
|
||||
public ApiResult<List<ProductVO>> list(ProductSearchListReq req) {
|
||||
return productService.list(req);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取产品基础信息的分页列表
|
||||
*
|
||||
* @param req {@link ProductSearchPageReq}
|
||||
* @return 如果没有查询, 返回 ApiPageResult.empty(), 携带分页信息,集合内类型: {@link ProductVO}
|
||||
*/
|
||||
@Override
|
||||
public ApiPageResult<ProductVO> page(ProductSearchPageReq req) {
|
||||
return productService.page(req);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取指定 ID 的产品基础信息
|
||||
*
|
||||
* @param id 产品 ID
|
||||
* @return {@link ProductVO}
|
||||
*/
|
||||
@Override
|
||||
public ApiResult<ProductVO> getById(Long id) {
|
||||
return productService.getById(id);
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增产品基础信息
|
||||
*
|
||||
* @param req {@link ProductAddReq}
|
||||
* @return 返回当前新增产品基础信息
|
||||
*/
|
||||
@Override
|
||||
public ApiResult<ProductVO> add(ProductAddReq req) {
|
||||
return productService.add(req);
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改产品基础信息
|
||||
*
|
||||
* @param req {@link ProductUpdateReq}
|
||||
* @return 返回修改后的产品基础信息
|
||||
*/
|
||||
@Override
|
||||
public ApiResult<ProductVO> update(ProductUpdateReq req) {
|
||||
return productService.update(req);
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除指定 ID 的产品
|
||||
*
|
||||
* @param id 产品 ID
|
||||
* @return 返回被删除的产品信息
|
||||
*/
|
||||
@Override
|
||||
public ApiResult<ProductVO> delete(Long id) {
|
||||
return productService.delete(id);
|
||||
}
|
||||
|
||||
/**
|
||||
* 返回指定产品和单位类型下所有已有权限点集合
|
||||
*
|
||||
* @param req {@link ProductFeatureRelationSearchReq}
|
||||
* @return 如果没有查询到, 返回空集合, 集合内类型: {@link ProductFeatureRelationVO}
|
||||
*/
|
||||
@Override
|
||||
public ApiResult<List<ProductFeatureRelationVO>> featureList(ProductFeatureRelationSearchReq req) {
|
||||
return productFeatureRelationService.featureList(req);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,17 @@
|
||||
package cn.axzo.tyr.server.service;
|
||||
|
||||
import cn.axzo.framework.domain.web.result.ApiResult;
|
||||
import cn.axzo.tyr.client.model.product.ProductFeatureRelationSearchReq;
|
||||
import cn.axzo.tyr.client.model.product.ProductFeatureRelationVO;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 产品与权限点的 Service 接口定义
|
||||
*
|
||||
* @author wangli
|
||||
* @since 2023/9/7 14:26
|
||||
*/
|
||||
public interface ProductFeatureRelationService {
|
||||
ApiResult<List<ProductFeatureRelationVO>> featureList(ProductFeatureRelationSearchReq req);
|
||||
}
|
||||
@ -0,0 +1,32 @@
|
||||
package cn.axzo.tyr.server.service;
|
||||
|
||||
import cn.axzo.framework.domain.web.result.ApiPageResult;
|
||||
import cn.axzo.framework.domain.web.result.ApiResult;
|
||||
import cn.axzo.tyr.client.model.product.ProductAddReq;
|
||||
import cn.axzo.tyr.client.model.product.ProductSearchListReq;
|
||||
import cn.axzo.tyr.client.model.product.ProductSearchPageReq;
|
||||
import cn.axzo.tyr.client.model.product.ProductUpdateReq;
|
||||
import cn.axzo.tyr.client.model.product.ProductVO;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 产品相关 Service 接口定义
|
||||
*
|
||||
* @author wangli
|
||||
* @since 2023/9/7 14:21
|
||||
*/
|
||||
public interface ProductService {
|
||||
ApiResult<List<ProductVO>> list(ProductSearchListReq req);
|
||||
|
||||
|
||||
ApiPageResult<ProductVO> page(ProductSearchPageReq req);
|
||||
|
||||
ApiResult<ProductVO> getById(Long id);
|
||||
|
||||
ApiResult<ProductVO> add(ProductAddReq req);
|
||||
|
||||
ApiResult<ProductVO> update(ProductUpdateReq req);
|
||||
|
||||
ApiResult<ProductVO> delete(Long id);
|
||||
}
|
||||
@ -0,0 +1,37 @@
|
||||
package cn.axzo.tyr.server.service.impl;
|
||||
|
||||
import cn.axzo.basics.common.BeanMapper;
|
||||
import cn.axzo.framework.domain.web.result.ApiResult;
|
||||
import cn.axzo.tyr.client.model.product.ProductFeatureRelationSearchReq;
|
||||
import cn.axzo.tyr.client.model.product.ProductFeatureRelationVO;
|
||||
import cn.axzo.tyr.server.repository.entity.SaasProductModuleFeatureRelation;
|
||||
import cn.axzo.tyr.server.repository.service.SaasProductModuleFeatureRelationDao;
|
||||
import cn.axzo.tyr.server.service.ProductFeatureRelationService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* 产品与权限点的 Service 接口实现
|
||||
*
|
||||
* @author wangli
|
||||
* @since 2023/9/7 14:27
|
||||
*/
|
||||
@Slf4j
|
||||
@RequiredArgsConstructor
|
||||
@Service
|
||||
public class ProductFeatureRelationServiceImpl implements ProductFeatureRelationService {
|
||||
private final SaasProductModuleFeatureRelationDao saasProductModuleFeatureRelationDao;
|
||||
|
||||
@Override
|
||||
public ApiResult<List<ProductFeatureRelationVO>> featureList(ProductFeatureRelationSearchReq req) {
|
||||
List<SaasProductModuleFeatureRelation> list = saasProductModuleFeatureRelationDao.lambdaQuery()
|
||||
.eq(SaasProductModuleFeatureRelation::getProductModuleId, req.getProductModuleId())
|
||||
.eq(Objects.nonNull(req.getDictCodeId()), SaasProductModuleFeatureRelation::getDictCodeId, req.getDictCodeId())
|
||||
.list();
|
||||
return ApiResult.ok(BeanMapper.copyList(list, ProductFeatureRelationVO.class));
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,88 @@
|
||||
package cn.axzo.tyr.server.service.impl;
|
||||
|
||||
import cn.axzo.basics.common.BeanMapper;
|
||||
import cn.axzo.basics.common.util.AssertUtil;
|
||||
import cn.axzo.framework.domain.page.PageResp;
|
||||
import cn.axzo.framework.domain.web.result.ApiPageResult;
|
||||
import cn.axzo.framework.domain.web.result.ApiResult;
|
||||
import cn.axzo.tyr.client.model.product.ProductAddReq;
|
||||
import cn.axzo.tyr.client.model.product.ProductSearchListReq;
|
||||
import cn.axzo.tyr.client.model.product.ProductSearchPageReq;
|
||||
import cn.axzo.tyr.client.model.product.ProductUpdateReq;
|
||||
import cn.axzo.tyr.client.model.product.ProductVO;
|
||||
import cn.axzo.tyr.server.repository.entity.ProductModule;
|
||||
import cn.axzo.tyr.server.repository.service.ProductModuleDao;
|
||||
import cn.axzo.tyr.server.service.ProductService;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.beanutils.BeanMap;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* 产品相关 Service 接口实现
|
||||
*
|
||||
* @author wangli
|
||||
* @since 2023/9/7 14:22
|
||||
*/
|
||||
@Slf4j
|
||||
@RequiredArgsConstructor
|
||||
@Service
|
||||
public class ProductServiceImpl implements ProductService {
|
||||
private final ProductModuleDao productModuleDao;
|
||||
|
||||
@Override
|
||||
public ApiResult<List<ProductVO>> list(ProductSearchListReq req) {
|
||||
List<ProductModule> list = productModuleDao.lambdaQuery()
|
||||
.like(StringUtils.hasLength(req.getName()), ProductModule::getProductName, req.getName())
|
||||
.eq(Objects.nonNull(req.getDictWorkspaceTypeId()), ProductModule::getDictWorkspaceTypeId, req.getDictWorkspaceTypeId())
|
||||
.eq(Objects.nonNull(req.getStatus()), ProductModule::getStatus, req.getStatus())
|
||||
.list();
|
||||
return ApiResult.ok(BeanMapper.copyList(list, ProductVO.class));
|
||||
}
|
||||
|
||||
@Override
|
||||
public ApiPageResult<ProductVO> page(ProductSearchPageReq req) {
|
||||
IPage<ProductModule> page = productModuleDao.lambdaQuery()
|
||||
.like(StringUtils.hasLength(req.getName()), ProductModule::getProductName, req.getName())
|
||||
.eq(Objects.nonNull(req.getDictWorkspaceTypeId()), ProductModule::getDictWorkspaceTypeId, req.getDictWorkspaceTypeId())
|
||||
.eq(Objects.nonNull(req.getStatus()), ProductModule::getStatus, req.getStatus())
|
||||
.page(req.toPage());
|
||||
List<ProductVO> list = BeanMapper.copyList(page.getRecords(), ProductVO.class);
|
||||
PageResp<ProductVO> data = PageResp.list(page.getCurrent(), page.getSize(), page.getTotal(), list);
|
||||
return ApiPageResult.ok(data);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ApiResult<ProductVO> getById(Long id) {
|
||||
return ApiResult.ok(BeanMapper.copyBean(productModuleDao.getById(id), ProductVO.class));
|
||||
}
|
||||
|
||||
@Override
|
||||
public ApiResult<ProductVO> add(ProductAddReq req) {
|
||||
ProductModule productModule = BeanMapper.copyBean(req, ProductModule.class);
|
||||
productModuleDao.save(productModule);
|
||||
return ApiResult.ok(BeanMapper.copyBean(productModule, ProductVO.class));
|
||||
}
|
||||
|
||||
@Override
|
||||
public ApiResult<ProductVO> update(ProductUpdateReq req) {
|
||||
ProductModule productModule = productModuleDao.getById(req.getId());
|
||||
BeanMapper.copyBeanIgnoreNull(req, ()-> productModule);
|
||||
productModuleDao.updateById(productModule);
|
||||
return ApiResult.ok();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ApiResult<ProductVO> delete(Long id) {
|
||||
ProductModule productModule = productModuleDao.getById(id);
|
||||
AssertUtil.isTrue(Objects.nonNull(productModule), "产品不存在");
|
||||
productModule.setIsDelete(id);
|
||||
productModuleDao.updateById(productModule);
|
||||
return ApiResult.ok(BeanMapper.copyBean(productModule, ProductVO.class));
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user