mirror of https://github.com/longtai-cn/hippo4j
parent
0e713a370e
commit
4f3d59b187
@ -0,0 +1,90 @@
|
||||
package io.dynamic.threadpool.common.toolkit;
|
||||
|
||||
import org.springframework.util.CollectionUtils;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 断言工具类
|
||||
*
|
||||
* @author chen.ma
|
||||
* @date 2021/6/29 09:36
|
||||
*/
|
||||
public class Assert {
|
||||
|
||||
public static void isTrue(boolean expression, String message) {
|
||||
if (!expression) {
|
||||
throw new IllegalArgumentException(message);
|
||||
}
|
||||
}
|
||||
|
||||
public static void isTrue(boolean expression) {
|
||||
isTrue(expression, "[Assertion failed] - this expression must be true");
|
||||
}
|
||||
|
||||
public static void isNull(Object object, String message) {
|
||||
if (object != null) {
|
||||
throw new IllegalArgumentException(message);
|
||||
}
|
||||
}
|
||||
|
||||
public static void isNull(Object object) {
|
||||
isNull(object, "[Assertion failed] - the object argument must be null");
|
||||
}
|
||||
|
||||
public static void notNull(Object object, String message) {
|
||||
if (object == null) {
|
||||
throw new IllegalArgumentException(message);
|
||||
}
|
||||
}
|
||||
|
||||
public static void notNull(Object object) {
|
||||
notNull(object, "[Assertion failed] - this argument is required; it must not be null");
|
||||
}
|
||||
|
||||
public static void notEmpty(Collection<?> collection, String message) {
|
||||
if (CollectionUtils.isEmpty(collection)) {
|
||||
throw new IllegalArgumentException(message);
|
||||
}
|
||||
}
|
||||
|
||||
public static void notEmpty(Collection<?> collection) {
|
||||
notEmpty(collection,
|
||||
"[Assertion failed] - this collection must not be empty: it must contain at least 1 element");
|
||||
}
|
||||
|
||||
public static void notEmpty(Map<?, ?> map, String message) {
|
||||
if (CollectionUtils.isEmpty(map)) {
|
||||
throw new IllegalArgumentException(message);
|
||||
}
|
||||
}
|
||||
|
||||
public static void notEmpty(Map<?, ?> map) {
|
||||
notEmpty(map, "[Assertion failed] - this map must not be empty; it must contain at least one entry");
|
||||
}
|
||||
|
||||
public static void notEmpty(String str, String message) {
|
||||
if (StringUtils.isEmpty(str)) {
|
||||
throw new IllegalArgumentException(message);
|
||||
}
|
||||
}
|
||||
|
||||
public static void notEmpty(String str) {
|
||||
if (StringUtils.isEmpty(str)) {
|
||||
notEmpty(str, "[Assertion failed] - this string must not be empty");
|
||||
}
|
||||
}
|
||||
|
||||
public static void hasText(String text, String message) {
|
||||
if (!StringUtils.hasText(text)) {
|
||||
throw new IllegalArgumentException(message);
|
||||
}
|
||||
}
|
||||
|
||||
public static void hasText(String text) {
|
||||
hasText(text,
|
||||
"[Assertion failed] - this String argument must have text; it must not be null, empty, or blank");
|
||||
}
|
||||
}
|
@ -0,0 +1,25 @@
|
||||
package io.dynamic.threadpool.server.config;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.DbType;
|
||||
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
|
||||
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
||||
/**
|
||||
* Mybatis Plus Config.
|
||||
*
|
||||
* @author chen.ma
|
||||
* @date 2021/6/29 20:22
|
||||
*/
|
||||
@Configuration
|
||||
public class MybatisPlusConfig {
|
||||
|
||||
@Bean
|
||||
public MybatisPlusInterceptor mybatisPlusInterceptor() {
|
||||
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
|
||||
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.H2));
|
||||
return interceptor;
|
||||
}
|
||||
|
||||
}
|
@ -1,17 +0,0 @@
|
||||
package io.dynamic.threadpool.server.controller;
|
||||
|
||||
import io.dynamic.threadpool.common.constant.Constants;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
/**
|
||||
* 业务控制器
|
||||
*
|
||||
* @author chen.ma
|
||||
* @date 2021/6/25 18:31
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping(Constants.BASE_PATH)
|
||||
public class BizController {
|
||||
|
||||
}
|
@ -0,0 +1,54 @@
|
||||
package io.dynamic.threadpool.server.controller;
|
||||
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import io.dynamic.threadpool.common.constant.Constants;
|
||||
import io.dynamic.threadpool.common.web.base.Result;
|
||||
import io.dynamic.threadpool.common.web.base.Results;
|
||||
import io.dynamic.threadpool.server.model.biz.item.ItemQueryReqDTO;
|
||||
import io.dynamic.threadpool.server.model.biz.item.ItemRespDTO;
|
||||
import io.dynamic.threadpool.server.model.biz.item.ItemSaveReqDTO;
|
||||
import io.dynamic.threadpool.server.service.ItemService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
/**
|
||||
* Item Controller.
|
||||
*
|
||||
* @author chen.ma
|
||||
* @date 2021/6/29 21:42
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping(Constants.BASE_PATH)
|
||||
public class ItemController {
|
||||
|
||||
@Autowired
|
||||
private ItemService itemService;
|
||||
|
||||
@PostMapping("/item/query/page")
|
||||
public Result<IPage<ItemRespDTO>> queryItemPage(@RequestBody ItemQueryReqDTO reqDTO) {
|
||||
return Results.success(itemService.queryItemPage(reqDTO));
|
||||
}
|
||||
|
||||
@GetMapping("/item/query/{itemId}")
|
||||
public Result queryItemById(@PathVariable("itemId") String itemId) {
|
||||
return Results.success(itemService.queryItemById(itemId));
|
||||
}
|
||||
|
||||
@PostMapping("/item/save")
|
||||
public Result saveItem(@RequestBody ItemSaveReqDTO reqDTO) {
|
||||
itemService.saveItem(reqDTO);
|
||||
return Results.success();
|
||||
}
|
||||
|
||||
@PostMapping("/item/update")
|
||||
public Result updateItem() {
|
||||
|
||||
return Results.success();
|
||||
}
|
||||
|
||||
@DeleteMapping("/item/delete/{itemId}")
|
||||
public Result deleteItem(@PathVariable("itemId") String itemId) {
|
||||
|
||||
return Results.success();
|
||||
}
|
||||
}
|
@ -0,0 +1,55 @@
|
||||
package io.dynamic.threadpool.server.controller;
|
||||
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import io.dynamic.threadpool.common.constant.Constants;
|
||||
import io.dynamic.threadpool.common.web.base.Result;
|
||||
import io.dynamic.threadpool.common.web.base.Results;
|
||||
import io.dynamic.threadpool.server.model.biz.tenant.TenantQueryReqDTO;
|
||||
import io.dynamic.threadpool.server.model.biz.tenant.TenantRespDTO;
|
||||
import io.dynamic.threadpool.server.model.biz.tenant.TenantSaveReqDTO;
|
||||
import io.dynamic.threadpool.server.model.biz.tenant.TenantUpdateReqDTO;
|
||||
import io.dynamic.threadpool.server.service.TenantService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
/**
|
||||
* 业务控制器
|
||||
*
|
||||
* @author chen.ma
|
||||
* @date 2021/6/25 18:31
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping(Constants.BASE_PATH)
|
||||
public class TenantController {
|
||||
|
||||
@Autowired
|
||||
private TenantService tenantService;
|
||||
|
||||
@PostMapping("/namespace/query/page")
|
||||
public Result<IPage<TenantRespDTO>> queryNameSpacePage(@RequestBody TenantQueryReqDTO reqDTO) {
|
||||
return Results.success(tenantService.queryNameSpacePage(reqDTO));
|
||||
}
|
||||
|
||||
@GetMapping("/namespace/query/{namespaceId}")
|
||||
public Result<TenantRespDTO> queryNameSpace(@PathVariable("namespaceId") String namespaceId) {
|
||||
return Results.success(tenantService.getNameSpaceById(namespaceId));
|
||||
}
|
||||
|
||||
@PostMapping("/namespace/save")
|
||||
public Result saveNameSpace(@RequestBody TenantSaveReqDTO reqDTO) {
|
||||
tenantService.saveNameSpace(reqDTO);
|
||||
return Results.success();
|
||||
}
|
||||
|
||||
@PostMapping("/namespace/update")
|
||||
public Result updateNameSpace(@RequestBody TenantUpdateReqDTO reqDTO) {
|
||||
tenantService.updateNameSpace(reqDTO);
|
||||
return Results.success();
|
||||
}
|
||||
|
||||
@DeleteMapping("/item/delete/{namespaceId}")
|
||||
public Result deleteNameSpace(@PathVariable("namespaceId") String namespaceId) {
|
||||
tenantService.deleteNameSpaceById(namespaceId);
|
||||
return Results.success();
|
||||
}
|
||||
}
|
@ -0,0 +1,40 @@
|
||||
package io.dynamic.threadpool.server.enums;
|
||||
|
||||
/**
|
||||
* 状态枚举
|
||||
*
|
||||
* @author chen.ma
|
||||
* @date 2021/3/26 18:45
|
||||
*/
|
||||
public enum DelEnum {
|
||||
|
||||
/**
|
||||
* 正常状态
|
||||
*/
|
||||
NORMAL("0"),
|
||||
|
||||
/**
|
||||
* 删除状态
|
||||
*/
|
||||
DELETE("1");
|
||||
|
||||
private final String statusCode;
|
||||
|
||||
DelEnum(String statusCode) {
|
||||
this.statusCode = statusCode;
|
||||
}
|
||||
|
||||
public String getCode() {
|
||||
return this.statusCode;
|
||||
}
|
||||
|
||||
public Integer getIntCode() {
|
||||
return Integer.parseInt(this.statusCode);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return statusCode;
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,15 @@
|
||||
package io.dynamic.threadpool.server.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import io.dynamic.threadpool.server.model.ConfigAllInfo;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
/**
|
||||
* Config Info Mapper.
|
||||
*
|
||||
* @author chen.ma
|
||||
* @date 2021/6/29 22:44
|
||||
*/
|
||||
@Mapper
|
||||
public interface ConfigInfoMapper extends BaseMapper<ConfigAllInfo> {
|
||||
}
|
@ -0,0 +1,15 @@
|
||||
package io.dynamic.threadpool.server.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import io.dynamic.threadpool.server.model.ItemInfo;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
/**
|
||||
* Item Info Mapper.
|
||||
*
|
||||
* @author chen.ma
|
||||
* @date 2021/6/29 21:53
|
||||
*/
|
||||
@Mapper
|
||||
public interface ItemInfoMapper extends BaseMapper<ItemInfo> {
|
||||
}
|
@ -1,43 +0,0 @@
|
||||
package io.dynamic.threadpool.server.mapper;
|
||||
|
||||
import io.dynamic.threadpool.server.model.ConfigAllInfo;
|
||||
import org.springframework.jdbc.core.RowMapper;
|
||||
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
|
||||
/**
|
||||
* ConfigAllInfoRowMapper
|
||||
*
|
||||
* @author chen.ma
|
||||
* @date 2021/6/20 15:57
|
||||
*/
|
||||
public final class RowMapperManager {
|
||||
|
||||
public static final ConfigAllInfoRowMapper CONFIG_ALL_INFO_ROW_MAPPER = new ConfigAllInfoRowMapper();
|
||||
|
||||
public static class ConfigAllInfoRowMapper implements RowMapper<ConfigAllInfo> {
|
||||
@Override
|
||||
public ConfigAllInfo mapRow(ResultSet rs, int rowNum) throws SQLException {
|
||||
ConfigAllInfo configAllInfo = new ConfigAllInfo();
|
||||
configAllInfo.setTpId(rs.getString("tp_id"));
|
||||
configAllInfo.setItemId(rs.getString("item_id"));
|
||||
configAllInfo.setNamespace(rs.getString("tenant_id"));
|
||||
configAllInfo.setContent(rs.getString("content"));
|
||||
configAllInfo.setCoreSize(rs.getInt("core_size"));
|
||||
configAllInfo.setMaxSize(rs.getInt("max_size"));
|
||||
configAllInfo.setQueueType(rs.getInt("queue_type"));
|
||||
configAllInfo.setCapacity(rs.getInt("capacity"));
|
||||
configAllInfo.setKeepAliveTime(rs.getInt("keep_alive_time"));
|
||||
configAllInfo.setIsAlarm(rs.getInt("is_alarm"));
|
||||
configAllInfo.setCapacityAlarm(rs.getInt("capacity_alarm"));
|
||||
configAllInfo.setLivenessAlarm(rs.getInt("liveness_alarm"));
|
||||
configAllInfo.setMd5(rs.getString("md5"));
|
||||
configAllInfo.setCreateTime(rs.getTimestamp("gmt_modified").getTime());
|
||||
configAllInfo.setModifyTime(rs.getTimestamp("gmt_modified").getTime());
|
||||
return configAllInfo;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,15 @@
|
||||
package io.dynamic.threadpool.server.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import io.dynamic.threadpool.server.model.TenantInfo;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
/**
|
||||
* Tenant Info Mapper.
|
||||
*
|
||||
* @author chen.ma
|
||||
* @date 2021/6/29 22:44
|
||||
*/
|
||||
@Mapper
|
||||
public interface TenantInfoMapper extends BaseMapper<TenantInfo> {
|
||||
}
|
@ -0,0 +1,33 @@
|
||||
package io.dynamic.threadpool.server.model;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* Item Info.
|
||||
*
|
||||
* @author chen.ma
|
||||
* @date 2021/6/29 21:53
|
||||
*/
|
||||
@Data
|
||||
@TableName("item_info")
|
||||
public class ItemInfo {
|
||||
|
||||
private Integer id;
|
||||
|
||||
private String tenantId;
|
||||
|
||||
private String itemId;
|
||||
|
||||
private String itemName;
|
||||
|
||||
private String itemDesc;
|
||||
|
||||
private String owner;
|
||||
|
||||
private Date gmtCreate;
|
||||
|
||||
private Date gmtModified;
|
||||
}
|
@ -0,0 +1,60 @@
|
||||
package io.dynamic.threadpool.server.model;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableLogic;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 业务线实体信息
|
||||
*
|
||||
* @author chen.ma
|
||||
* @date 2021/6/29 22:04
|
||||
*/
|
||||
@Data
|
||||
@TableName("tenant_info")
|
||||
public class TenantInfo {
|
||||
|
||||
/**
|
||||
* ID
|
||||
*/
|
||||
private Integer id;
|
||||
|
||||
/**
|
||||
* 租户ID
|
||||
*/
|
||||
private String tenantId;
|
||||
|
||||
/**
|
||||
* 租户名称
|
||||
*/
|
||||
private String tenantName;
|
||||
|
||||
/**
|
||||
* 租户简介
|
||||
*/
|
||||
private String tenantDesc;
|
||||
|
||||
/**
|
||||
* 负责人
|
||||
*/
|
||||
private String owner;
|
||||
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
private Date gmtCreate;
|
||||
|
||||
/**
|
||||
* 修改时间
|
||||
*/
|
||||
private Date gmtModified;
|
||||
|
||||
/**
|
||||
* 是否删除
|
||||
*/
|
||||
@TableLogic
|
||||
private Integer delFlag;
|
||||
|
||||
}
|
@ -0,0 +1,22 @@
|
||||
package io.dynamic.threadpool.server.model.biz.item;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* Item Query Req DTO.
|
||||
*
|
||||
* @author chen.ma
|
||||
* @date 2021/6/29 22:28
|
||||
*/
|
||||
@Data
|
||||
public class ItemQueryReqDTO extends Page {
|
||||
|
||||
private String tenantId;
|
||||
|
||||
private String itemId;
|
||||
|
||||
private String itemName;
|
||||
|
||||
private String owner;
|
||||
}
|
@ -0,0 +1,13 @@
|
||||
package io.dynamic.threadpool.server.model.biz.item;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* 项目出参
|
||||
*
|
||||
* @author chen.ma
|
||||
* @date 2021/6/29 21:15
|
||||
*/
|
||||
@Data
|
||||
public class ItemRespDTO {
|
||||
}
|
@ -0,0 +1,24 @@
|
||||
package io.dynamic.threadpool.server.model.biz.item;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* Item Save Req DTO.
|
||||
*
|
||||
* @author chen.ma
|
||||
* @date 2021/6/29 22:05
|
||||
*/
|
||||
@Data
|
||||
public class ItemSaveReqDTO {
|
||||
|
||||
private String tenantId;
|
||||
|
||||
private String itemId;
|
||||
|
||||
private String itemName;
|
||||
|
||||
private String itemDesc;
|
||||
|
||||
private String owner;
|
||||
|
||||
}
|
@ -0,0 +1,22 @@
|
||||
package io.dynamic.threadpool.server.model.biz.item;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* Item Update Req DTO.
|
||||
*
|
||||
* @author chen.ma
|
||||
* @date 2021/6/29 22:05
|
||||
*/
|
||||
@Data
|
||||
public class ItemUpdateReqDTO {
|
||||
|
||||
private String itemId;
|
||||
|
||||
private String itemName;
|
||||
|
||||
private String itemDesc;
|
||||
|
||||
private String owner;
|
||||
|
||||
}
|
@ -0,0 +1,20 @@
|
||||
package io.dynamic.threadpool.server.model.biz.tenant;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* Tenant Query Req DTO.
|
||||
*
|
||||
* @author chen.ma
|
||||
* @date 2021/6/29 22:28
|
||||
*/
|
||||
@Data
|
||||
public class TenantQueryReqDTO extends Page {
|
||||
|
||||
private String tenantId;
|
||||
|
||||
private String tenantName;
|
||||
|
||||
private String owner;
|
||||
}
|
@ -0,0 +1,50 @@
|
||||
package io.dynamic.threadpool.server.model.biz.tenant;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 业务线出参
|
||||
*
|
||||
* @author chen.ma
|
||||
* @date 2021/6/29 21:16
|
||||
*/
|
||||
@Data
|
||||
public class TenantRespDTO {
|
||||
|
||||
/**
|
||||
* ID
|
||||
*/
|
||||
private Integer id;
|
||||
|
||||
/**
|
||||
* 租户ID
|
||||
*/
|
||||
private String tenantId;
|
||||
|
||||
/**
|
||||
* 租户名称
|
||||
*/
|
||||
private String tenantName;
|
||||
|
||||
/**
|
||||
* 租户简介
|
||||
*/
|
||||
private String tenantDesc;
|
||||
|
||||
/**
|
||||
* 负责人
|
||||
*/
|
||||
private String owner;
|
||||
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
private Date gmtCreate;
|
||||
|
||||
/**
|
||||
* 修改时间
|
||||
*/
|
||||
private Date gmtModified;
|
||||
}
|
@ -0,0 +1,34 @@
|
||||
package io.dynamic.threadpool.server.model.biz.tenant;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* Tenant Save Req DTO.
|
||||
*
|
||||
* @author chen.ma
|
||||
* @date 2021/6/29 20:40
|
||||
*/
|
||||
@Data
|
||||
public class TenantSaveReqDTO {
|
||||
|
||||
/**
|
||||
* 租户ID
|
||||
*/
|
||||
private String tenantId;
|
||||
|
||||
/**
|
||||
* 租户名称
|
||||
*/
|
||||
private String tenantName;
|
||||
|
||||
/**
|
||||
* 租户简介
|
||||
*/
|
||||
private String tenantDesc;
|
||||
|
||||
/**
|
||||
* 负责人
|
||||
*/
|
||||
private String owner;
|
||||
|
||||
}
|
@ -0,0 +1,34 @@
|
||||
package io.dynamic.threadpool.server.model.biz.tenant;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* Tenant Save Req DTO.
|
||||
*
|
||||
* @author chen.ma
|
||||
* @date 2021/6/29 20:40
|
||||
*/
|
||||
@Data
|
||||
public class TenantUpdateReqDTO {
|
||||
|
||||
/**
|
||||
* 租户 ID
|
||||
*/
|
||||
private String namespaceId;
|
||||
|
||||
/**
|
||||
* 租户名称
|
||||
*/
|
||||
private String tenantName;
|
||||
|
||||
/**
|
||||
* 租户简介
|
||||
*/
|
||||
private String tenantDesc;
|
||||
|
||||
/**
|
||||
* 负责人
|
||||
*/
|
||||
private String owner;
|
||||
|
||||
}
|
@ -0,0 +1,57 @@
|
||||
package io.dynamic.threadpool.server.service;
|
||||
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import io.dynamic.threadpool.server.model.biz.item.ItemQueryReqDTO;
|
||||
import io.dynamic.threadpool.server.model.biz.item.ItemRespDTO;
|
||||
import io.dynamic.threadpool.server.model.biz.item.ItemSaveReqDTO;
|
||||
import io.dynamic.threadpool.server.model.biz.item.ItemUpdateReqDTO;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Item Service.
|
||||
*
|
||||
* @author chen.ma
|
||||
* @date 2021/6/29 21:57
|
||||
*/
|
||||
public interface ItemService {
|
||||
|
||||
/**
|
||||
* 分页查询
|
||||
*
|
||||
* @param reqDTO
|
||||
* @return
|
||||
*/
|
||||
IPage<ItemRespDTO> queryItemPage(ItemQueryReqDTO reqDTO);
|
||||
|
||||
/**
|
||||
* 根据 Id 获取项目
|
||||
*
|
||||
* @param itemId
|
||||
* @return
|
||||
*/
|
||||
ItemRespDTO queryItemById(String itemId);
|
||||
|
||||
/**
|
||||
* 查询项目
|
||||
*
|
||||
* @param reqDTO
|
||||
* @return
|
||||
*/
|
||||
List<ItemRespDTO> queryItem(ItemQueryReqDTO reqDTO);
|
||||
|
||||
/**
|
||||
* 新增项目
|
||||
*
|
||||
* @param reqDTO
|
||||
*/
|
||||
void saveItem(ItemSaveReqDTO reqDTO);
|
||||
|
||||
/**
|
||||
* 新增项目
|
||||
*
|
||||
* @param reqDTO
|
||||
*/
|
||||
void updateItem(ItemUpdateReqDTO reqDTO);
|
||||
|
||||
}
|
@ -0,0 +1,54 @@
|
||||
package io.dynamic.threadpool.server.service;
|
||||
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import io.dynamic.threadpool.server.model.biz.tenant.TenantQueryReqDTO;
|
||||
import io.dynamic.threadpool.server.model.biz.tenant.TenantRespDTO;
|
||||
import io.dynamic.threadpool.server.model.biz.tenant.TenantSaveReqDTO;
|
||||
import io.dynamic.threadpool.server.model.biz.tenant.TenantUpdateReqDTO;
|
||||
|
||||
/**
|
||||
* 业务接口
|
||||
*
|
||||
* @author chen.ma
|
||||
* @date 2021/6/29 21:59
|
||||
*/
|
||||
public interface TenantService {
|
||||
|
||||
/**
|
||||
* 根据 Id 获取业务线
|
||||
*
|
||||
* @param namespaceId
|
||||
* @return
|
||||
*/
|
||||
TenantRespDTO getNameSpaceById(String namespaceId);
|
||||
|
||||
/**
|
||||
* 分页查询业务线
|
||||
*
|
||||
* @param reqDTO
|
||||
* @return
|
||||
*/
|
||||
IPage<TenantRespDTO> queryNameSpacePage(TenantQueryReqDTO reqDTO);
|
||||
|
||||
/**
|
||||
* 新增业务线
|
||||
*
|
||||
* @param reqDTO
|
||||
*/
|
||||
void saveNameSpace(TenantSaveReqDTO reqDTO);
|
||||
|
||||
/**
|
||||
* 修改业务线
|
||||
*
|
||||
* @param reqDTO
|
||||
*/
|
||||
void updateNameSpace(TenantUpdateReqDTO reqDTO);
|
||||
|
||||
/**
|
||||
* 根据 Id 删除业务线
|
||||
*
|
||||
* @param namespaceId
|
||||
*/
|
||||
void deleteNameSpaceById(String namespaceId);
|
||||
|
||||
}
|
@ -0,0 +1,88 @@
|
||||
package io.dynamic.threadpool.server.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.toolkit.SqlHelper;
|
||||
import io.dynamic.threadpool.server.mapper.ItemInfoMapper;
|
||||
import io.dynamic.threadpool.server.model.ItemInfo;
|
||||
import io.dynamic.threadpool.server.model.biz.item.ItemQueryReqDTO;
|
||||
import io.dynamic.threadpool.server.model.biz.item.ItemRespDTO;
|
||||
import io.dynamic.threadpool.server.model.biz.item.ItemSaveReqDTO;
|
||||
import io.dynamic.threadpool.server.model.biz.item.ItemUpdateReqDTO;
|
||||
import io.dynamic.threadpool.server.service.ItemService;
|
||||
import io.dynamic.threadpool.server.toolkit.BeanUtil;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Item Service Impl.
|
||||
*
|
||||
* @author chen.ma
|
||||
* @date 2021/6/29 21:58
|
||||
*/
|
||||
@Service
|
||||
public class ItemServiceImpl implements ItemService {
|
||||
|
||||
@Resource
|
||||
private ItemInfoMapper itemInfoMapper;
|
||||
|
||||
@Override
|
||||
public IPage<ItemRespDTO> queryItemPage(ItemQueryReqDTO reqDTO) {
|
||||
LambdaQueryWrapper<ItemInfo> wrapper = Wrappers.lambdaQuery(ItemInfo.class)
|
||||
.eq(!StringUtils.isEmpty(reqDTO.getItemId()), ItemInfo::getItemId, reqDTO.getItemId())
|
||||
.eq(!StringUtils.isEmpty(reqDTO.getItemName()), ItemInfo::getItemName, reqDTO.getItemName())
|
||||
.eq(!StringUtils.isEmpty(reqDTO.getTenantId()), ItemInfo::getTenantId, reqDTO.getTenantId())
|
||||
.eq(!StringUtils.isEmpty(reqDTO.getOwner()), ItemInfo::getOwner, reqDTO.getOwner());
|
||||
Page resultPage = itemInfoMapper.selectPage(reqDTO, wrapper);
|
||||
|
||||
return resultPage.convert(each -> BeanUtil.convert(each, ItemRespDTO.class));
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemRespDTO queryItemById(String itemId) {
|
||||
LambdaQueryWrapper<ItemInfo> queryWrapper = Wrappers
|
||||
.lambdaQuery(ItemInfo.class).eq(ItemInfo::getItemId, itemId);
|
||||
ItemInfo itemInfo = itemInfoMapper.selectOne(queryWrapper);
|
||||
|
||||
ItemRespDTO result = BeanUtil.convert(itemInfo, ItemRespDTO.class);
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ItemRespDTO> queryItem(ItemQueryReqDTO reqDTO) {
|
||||
LambdaQueryWrapper<ItemInfo> wrapper = Wrappers.lambdaQuery(ItemInfo.class)
|
||||
.eq(!StringUtils.isEmpty(reqDTO.getItemId()), ItemInfo::getItemId, reqDTO.getItemId())
|
||||
.eq(!StringUtils.isEmpty(reqDTO.getTenantId()), ItemInfo::getTenantId, reqDTO.getTenantId());
|
||||
|
||||
List<ItemInfo> itemInfos = itemInfoMapper.selectList(wrapper);
|
||||
return BeanUtil.convert(itemInfos, ItemRespDTO.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void saveItem(ItemSaveReqDTO reqDTO) {
|
||||
ItemInfo itemInfo = BeanUtil.convert(reqDTO, ItemInfo.class);
|
||||
int insertResult = itemInfoMapper.insert(itemInfo);
|
||||
|
||||
boolean retBool = SqlHelper.retBool(insertResult);
|
||||
if (!retBool) {
|
||||
throw new RuntimeException("插入失败.");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateItem(ItemUpdateReqDTO reqDTO) {
|
||||
ItemInfo itemInfo = BeanUtil.convert(reqDTO, ItemInfo.class);
|
||||
int updateResult = itemInfoMapper.update(itemInfo, Wrappers
|
||||
.lambdaUpdate(ItemInfo.class).eq(ItemInfo::getItemId, reqDTO.getItemId()));
|
||||
boolean retBool = SqlHelper.retBool(updateResult);
|
||||
if (!retBool) {
|
||||
throw new RuntimeException("修改失败.");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,104 @@
|
||||
package io.dynamic.threadpool.server.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.toolkit.SqlHelper;
|
||||
import io.dynamic.threadpool.server.enums.DelEnum;
|
||||
import io.dynamic.threadpool.server.mapper.TenantInfoMapper;
|
||||
import io.dynamic.threadpool.server.model.TenantInfo;
|
||||
import io.dynamic.threadpool.server.model.biz.item.ItemQueryReqDTO;
|
||||
import io.dynamic.threadpool.server.model.biz.item.ItemRespDTO;
|
||||
import io.dynamic.threadpool.server.model.biz.tenant.TenantQueryReqDTO;
|
||||
import io.dynamic.threadpool.server.model.biz.tenant.TenantRespDTO;
|
||||
import io.dynamic.threadpool.server.model.biz.tenant.TenantSaveReqDTO;
|
||||
import io.dynamic.threadpool.server.model.biz.tenant.TenantUpdateReqDTO;
|
||||
import io.dynamic.threadpool.server.service.ItemService;
|
||||
import io.dynamic.threadpool.server.service.TenantService;
|
||||
import io.dynamic.threadpool.server.toolkit.BeanUtil;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 业务接口
|
||||
*
|
||||
* @author chen.ma
|
||||
* @date 2021/6/29 21:12
|
||||
*/
|
||||
@Service
|
||||
public class TenantServiceImpl implements TenantService {
|
||||
|
||||
@Autowired
|
||||
private ItemService itemService;
|
||||
|
||||
@Resource
|
||||
private TenantInfoMapper tenantInfoMapper;
|
||||
|
||||
@Override
|
||||
public TenantRespDTO getNameSpaceById(String namespaceId) {
|
||||
LambdaQueryWrapper<TenantInfo> queryWrapper = Wrappers
|
||||
.lambdaQuery(TenantInfo.class).eq(TenantInfo::getTenantId, namespaceId);
|
||||
TenantInfo tenantInfo = tenantInfoMapper.selectOne(queryWrapper);
|
||||
|
||||
TenantRespDTO result = BeanUtil.convert(tenantInfo, TenantRespDTO.class);
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IPage<TenantRespDTO> queryNameSpacePage(TenantQueryReqDTO reqDTO) {
|
||||
LambdaQueryWrapper<TenantInfo> wrapper = Wrappers.lambdaQuery(TenantInfo.class)
|
||||
.eq(!StringUtils.isEmpty(reqDTO.getTenantId()), TenantInfo::getTenantId, reqDTO.getTenantId())
|
||||
.eq(!StringUtils.isEmpty(reqDTO.getTenantName()), TenantInfo::getTenantName, reqDTO.getTenantName())
|
||||
.eq(!StringUtils.isEmpty(reqDTO.getOwner()), TenantInfo::getOwner, reqDTO.getOwner());
|
||||
Page resultPage = tenantInfoMapper.selectPage(reqDTO, wrapper);
|
||||
|
||||
return resultPage.convert(each -> BeanUtil.convert(each, TenantRespDTO.class));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void saveNameSpace(TenantSaveReqDTO reqDTO) {
|
||||
TenantInfo tenantInfo = BeanUtil.convert(reqDTO, TenantInfo.class);
|
||||
int insertResult = tenantInfoMapper.insert(tenantInfo);
|
||||
|
||||
boolean retBool = SqlHelper.retBool(insertResult);
|
||||
if (!retBool) {
|
||||
throw new RuntimeException("插入失败.");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateNameSpace(TenantUpdateReqDTO reqDTO) {
|
||||
TenantInfo tenantInfo = BeanUtil.convert(reqDTO, TenantInfo.class);
|
||||
int updateResult = tenantInfoMapper.update(tenantInfo, Wrappers
|
||||
.lambdaUpdate(TenantInfo.class).eq(TenantInfo::getTenantId, reqDTO.getNamespaceId()));
|
||||
boolean retBool = SqlHelper.retBool(updateResult);
|
||||
if (!retBool) {
|
||||
throw new RuntimeException("修改失败.");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteNameSpaceById(String namespaceId) {
|
||||
TenantInfo tenantInfo = new TenantInfo();
|
||||
tenantInfo.setDelFlag(DelEnum.DELETE.getIntCode());
|
||||
|
||||
ItemQueryReqDTO reqDTO = new ItemQueryReqDTO();
|
||||
reqDTO.setTenantId(namespaceId);
|
||||
List<ItemRespDTO> itemList = itemService.queryItem(reqDTO);
|
||||
if (CollectionUtils.isNotEmpty(itemList)) {
|
||||
throw new RuntimeException("业务线包含项目引用, 删除失败.");
|
||||
}
|
||||
int updateResult = tenantInfoMapper.update(tenantInfo,
|
||||
Wrappers.lambdaUpdate(TenantInfo.class).eq(TenantInfo::getTenantId, namespaceId));
|
||||
boolean retBool = SqlHelper.retBool(updateResult);
|
||||
if (!retBool) {
|
||||
throw new RuntimeException("删除失败.");
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,142 @@
|
||||
package io.dynamic.threadpool.server.toolkit;
|
||||
|
||||
import com.github.dozermapper.core.DozerBeanMapperBuilder;
|
||||
import com.github.dozermapper.core.Mapper;
|
||||
import com.github.dozermapper.core.loader.api.BeanMappingBuilder;
|
||||
|
||||
import java.lang.reflect.Array;
|
||||
import java.util.*;
|
||||
|
||||
import static com.github.dozermapper.core.loader.api.TypeMappingOptions.mapEmptyString;
|
||||
import static com.github.dozermapper.core.loader.api.TypeMappingOptions.mapNull;
|
||||
|
||||
/**
|
||||
* 对象复制工具类
|
||||
*
|
||||
* @author chen.ma
|
||||
* @date 2021/3/19 15:40
|
||||
*/
|
||||
public class BeanUtil {
|
||||
|
||||
private BeanUtil() {
|
||||
|
||||
}
|
||||
|
||||
protected static Mapper BEAN_MAPPER_BUILDER;
|
||||
|
||||
static {
|
||||
BEAN_MAPPER_BUILDER = DozerBeanMapperBuilder.buildDefault();
|
||||
}
|
||||
|
||||
/**
|
||||
* 复制单个对象
|
||||
*
|
||||
* @param source 数据对象
|
||||
* @param clazz 复制目标类型
|
||||
* @param <T>
|
||||
* @param <S>
|
||||
* @return 转换后对象
|
||||
*/
|
||||
public static <T, S> T convert(S source, Class<T> clazz) {
|
||||
return Optional.ofNullable(source)
|
||||
.map(each -> BEAN_MAPPER_BUILDER.map(each, clazz))
|
||||
.orElse(null);
|
||||
}
|
||||
|
||||
/**
|
||||
* 复制多个对象
|
||||
*
|
||||
* @param sources 数据对象
|
||||
* @param clazz 复制目标类型
|
||||
* @param <T>
|
||||
* @param <S>
|
||||
* @return 转换后对象集合
|
||||
*/
|
||||
public static <T, S> List<T> convert(List<S> sources, Class<T> clazz) {
|
||||
return Optional.ofNullable(sources)
|
||||
.map(each -> {
|
||||
List<T> targetList = new ArrayList<T>(each.size());
|
||||
each.parallelStream()
|
||||
.forEach(item -> targetList.add(BEAN_MAPPER_BUILDER.map(item, clazz)));
|
||||
return targetList;
|
||||
})
|
||||
.orElse(null);
|
||||
}
|
||||
|
||||
/**
|
||||
* 复制多个对象
|
||||
*
|
||||
* @param sources 数据对象
|
||||
* @param clazz 复制目标类型
|
||||
* @param <T>
|
||||
* @param <S>
|
||||
* @return 转换后对象集合
|
||||
*/
|
||||
public static <T, S> Set<T> convert(Set<S> sources, Class<T> clazz) {
|
||||
return Optional.ofNullable(sources)
|
||||
.map(each -> {
|
||||
Set<T> targetSize = new HashSet<T>(each.size());
|
||||
each.parallelStream()
|
||||
.forEach(item -> targetSize.add(BEAN_MAPPER_BUILDER.map(item, clazz)));
|
||||
return targetSize;
|
||||
})
|
||||
.orElse(null);
|
||||
}
|
||||
|
||||
/**
|
||||
* 复制多个对象
|
||||
*
|
||||
* @param sources 数据对象
|
||||
* @param clazz 复制目标类型
|
||||
* @param <T>
|
||||
* @param <S>
|
||||
* @return 转换后对象集合
|
||||
*/
|
||||
public static <T, S> T[] convert(S[] sources, Class<T> clazz) {
|
||||
return Optional.ofNullable(sources)
|
||||
.map(each -> {
|
||||
@SuppressWarnings("unchecked")
|
||||
T[] targetArray = (T[]) Array.newInstance(clazz, sources.length);
|
||||
for (int i = 0; i < targetArray.length; i++) {
|
||||
targetArray[i] = BEAN_MAPPER_BUILDER.map(sources[i], clazz);
|
||||
}
|
||||
return targetArray;
|
||||
})
|
||||
.orElse(null);
|
||||
}
|
||||
|
||||
/**
|
||||
* 拷贝非空且非空串属性
|
||||
*
|
||||
* @param source 数据源
|
||||
* @param target 指向源
|
||||
*/
|
||||
public static void convertIgnoreNullAndBlank(Object source, Object target) {
|
||||
DozerBeanMapperBuilder dozerBeanMapperBuilder = DozerBeanMapperBuilder.create();
|
||||
Mapper mapper = dozerBeanMapperBuilder.withMappingBuilders(new BeanMappingBuilder() {
|
||||
@Override
|
||||
protected void configure() {
|
||||
mapping(source.getClass(), target.getClass(), mapNull(false), mapEmptyString(false));
|
||||
}
|
||||
}).build();
|
||||
mapper.map(source, target);
|
||||
}
|
||||
|
||||
/**
|
||||
* 拷贝非空属性
|
||||
*
|
||||
* @param source 数据源
|
||||
* @param target 指向源
|
||||
*/
|
||||
public static void convertIgnoreNull(Object source, Object target) {
|
||||
DozerBeanMapperBuilder dozerBeanMapperBuilder = DozerBeanMapperBuilder.create();
|
||||
Mapper mapper = dozerBeanMapperBuilder.withMappingBuilders(new BeanMappingBuilder() {
|
||||
@Override
|
||||
protected void configure() {
|
||||
mapping(source.getClass(), target.getClass(), mapNull(false));
|
||||
}
|
||||
}).build();
|
||||
mapper.map(source, target);
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in new issue