add - 添加产品相关接口的实现

This commit is contained in:
wangli 2023-09-07 19:07:20 +08:00
parent 5473f434d6
commit e099e97f3f
5 changed files with 89 additions and 1 deletions

View File

@ -4,6 +4,7 @@ import cn.axzo.framework.domain.web.result.ApiPageResult;
import cn.axzo.framework.domain.web.result.ApiResult; import cn.axzo.framework.domain.web.result.ApiResult;
import cn.axzo.tyr.client.model.product.ProductAddReq; import cn.axzo.tyr.client.model.product.ProductAddReq;
import cn.axzo.tyr.client.model.product.ProductFeatureRelationSearchReq; import cn.axzo.tyr.client.model.product.ProductFeatureRelationSearchReq;
import cn.axzo.tyr.client.model.product.ProductFeatureRelationUpdateReq;
import cn.axzo.tyr.client.model.product.ProductFeatureRelationVO; import cn.axzo.tyr.client.model.product.ProductFeatureRelationVO;
import cn.axzo.tyr.client.model.product.ProductSearchListReq; import cn.axzo.tyr.client.model.product.ProductSearchListReq;
import cn.axzo.tyr.client.model.product.ProductSearchPageReq; import cn.axzo.tyr.client.model.product.ProductSearchPageReq;
@ -18,7 +19,6 @@ import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
import java.util.List; import java.util.List;
import java.util.Map;
/** /**
* 产品相关 API * 产品相关 API
@ -92,4 +92,11 @@ public interface ProductApi {
@PostMapping("api/auth/product/feature/relation/list") @PostMapping("api/auth/product/feature/relation/list")
ApiResult<List<ProductFeatureRelationVO>> featureList(@Validated @RequestBody ProductFeatureRelationSearchReq req); ApiResult<List<ProductFeatureRelationVO>> featureList(@Validated @RequestBody ProductFeatureRelationSearchReq req);
/**
* 更新产品与权限点的关联关系
*
* @param req {@link ProductFeatureRelationUpdateReq}
* @return
*/
ApiResult<Boolean> updateFeatureRelation(List<ProductFeatureRelationUpdateReq> req);
} }

View File

@ -0,0 +1,40 @@
package cn.axzo.tyr.client.model.product;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.validation.constraints.NotNull;
import java.util.ArrayList;
import java.util.List;
/**
* 产品与权限点关系修改入参模型
*
* @author wangli
* @since 2023/9/7 18:53
*/
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class ProductFeatureRelationUpdateReq {
/**
* 产品 ID
*/
@NotNull(message = "产品 ID 不能为空")
private Long productModuleId;
/**
* 字典第三级 Code ID(OuType)
*/
@NotNull(message = "字典 ouType ID 不能为空")
private Long dictCodeId;
/**
* 权限点 ID
*/
private List<Long> featureIds = new ArrayList<>();
}

View File

@ -5,6 +5,7 @@ import cn.axzo.framework.domain.web.result.ApiResult;
import cn.axzo.tyr.client.feign.ProductApi; import cn.axzo.tyr.client.feign.ProductApi;
import cn.axzo.tyr.client.model.product.ProductAddReq; import cn.axzo.tyr.client.model.product.ProductAddReq;
import cn.axzo.tyr.client.model.product.ProductFeatureRelationSearchReq; import cn.axzo.tyr.client.model.product.ProductFeatureRelationSearchReq;
import cn.axzo.tyr.client.model.product.ProductFeatureRelationUpdateReq;
import cn.axzo.tyr.client.model.product.ProductFeatureRelationVO; import cn.axzo.tyr.client.model.product.ProductFeatureRelationVO;
import cn.axzo.tyr.client.model.product.ProductSearchListReq; import cn.axzo.tyr.client.model.product.ProductSearchListReq;
import cn.axzo.tyr.client.model.product.ProductSearchPageReq; import cn.axzo.tyr.client.model.product.ProductSearchPageReq;
@ -14,6 +15,7 @@ import cn.axzo.tyr.server.service.ProductFeatureRelationService;
import cn.axzo.tyr.server.service.ProductService; import cn.axzo.tyr.server.service.ProductService;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import java.util.List; import java.util.List;
@ -107,4 +109,18 @@ public class ProductController implements ProductApi {
public ApiResult<List<ProductFeatureRelationVO>> featureList(ProductFeatureRelationSearchReq req) { public ApiResult<List<ProductFeatureRelationVO>> featureList(ProductFeatureRelationSearchReq req) {
return productFeatureRelationService.featureList(req); return productFeatureRelationService.featureList(req);
} }
/**
* 更新产品与权限点的关联关系
*
* @param req {@link ProductFeatureRelationUpdateReq}
* @return
*/
@Override
public ApiResult<Boolean> updateFeatureRelation(List<ProductFeatureRelationUpdateReq> req) {
if(CollectionUtils.isEmpty(req)) {
return ApiResult.ok(false);
}
return productFeatureRelationService.updateFeatureRelation(req);
}
} }

View File

@ -2,6 +2,7 @@ package cn.axzo.tyr.server.service;
import cn.axzo.framework.domain.web.result.ApiResult; import cn.axzo.framework.domain.web.result.ApiResult;
import cn.axzo.tyr.client.model.product.ProductFeatureRelationSearchReq; import cn.axzo.tyr.client.model.product.ProductFeatureRelationSearchReq;
import cn.axzo.tyr.client.model.product.ProductFeatureRelationUpdateReq;
import cn.axzo.tyr.client.model.product.ProductFeatureRelationVO; import cn.axzo.tyr.client.model.product.ProductFeatureRelationVO;
import java.util.List; import java.util.List;
@ -14,4 +15,6 @@ import java.util.List;
*/ */
public interface ProductFeatureRelationService { public interface ProductFeatureRelationService {
ApiResult<List<ProductFeatureRelationVO>> featureList(ProductFeatureRelationSearchReq req); ApiResult<List<ProductFeatureRelationVO>> featureList(ProductFeatureRelationSearchReq req);
ApiResult<Boolean> updateFeatureRelation(List<ProductFeatureRelationUpdateReq> req);
} }

View File

@ -3,6 +3,7 @@ package cn.axzo.tyr.server.service.impl;
import cn.axzo.basics.common.BeanMapper; import cn.axzo.basics.common.BeanMapper;
import cn.axzo.framework.domain.web.result.ApiResult; import cn.axzo.framework.domain.web.result.ApiResult;
import cn.axzo.tyr.client.model.product.ProductFeatureRelationSearchReq; import cn.axzo.tyr.client.model.product.ProductFeatureRelationSearchReq;
import cn.axzo.tyr.client.model.product.ProductFeatureRelationUpdateReq;
import cn.axzo.tyr.client.model.product.ProductFeatureRelationVO; import cn.axzo.tyr.client.model.product.ProductFeatureRelationVO;
import cn.axzo.tyr.server.repository.entity.SaasProductModuleFeatureRelation; import cn.axzo.tyr.server.repository.entity.SaasProductModuleFeatureRelation;
import cn.axzo.tyr.server.repository.service.SaasProductModuleFeatureRelationDao; import cn.axzo.tyr.server.repository.service.SaasProductModuleFeatureRelationDao;
@ -10,9 +11,13 @@ import cn.axzo.tyr.server.service.ProductFeatureRelationService;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
import java.util.stream.Collectors;
/** /**
* 产品与权限点的 Service 接口实现 * 产品与权限点的 Service 接口实现
@ -34,4 +39,21 @@ public class ProductFeatureRelationServiceImpl implements ProductFeatureRelation
.list(); .list();
return ApiResult.ok(BeanMapper.copyList(list, ProductFeatureRelationVO.class)); return ApiResult.ok(BeanMapper.copyList(list, ProductFeatureRelationVO.class));
} }
@Override
@Transactional(rollbackFor = Exception.class)
public ApiResult<Boolean> updateFeatureRelation(List<ProductFeatureRelationUpdateReq> req) {
List<Long> productIds = req.stream().map(ProductFeatureRelationUpdateReq::getProductModuleId).distinct().collect(Collectors.toList());
saasProductModuleFeatureRelationDao.removeByIds(productIds);
List<SaasProductModuleFeatureRelation> saveList = new ArrayList<>();
req.forEach(i -> i.getFeatureIds().forEach(featureId -> {
SaasProductModuleFeatureRelation relation = new SaasProductModuleFeatureRelation();
relation.setProductModuleId(i.getProductModuleId());
relation.setDictCodeId(i.getDictCodeId());
relation.setFeatureId(featureId);
saveList.add(relation);
}));
saasProductModuleFeatureRelationDao.saveBatch(saveList);
return ApiResult.ok(true);
}
} }