diff --git a/server/src/main/java/io/wdd/server/beans/mapper/ProjectInfoDTOMapper.java b/server/src/main/java/io/wdd/server/beans/mapper/ProjectInfoDTOMapper.java new file mode 100644 index 0000000..6108500 --- /dev/null +++ b/server/src/main/java/io/wdd/server/beans/mapper/ProjectInfoDTOMapper.java @@ -0,0 +1,16 @@ +package io.wdd.server.beans.mapper; + +import io.wdd.server.beans.po.ProjectInfoPO; +import io.wdd.server.beans.vo.ProjectInfoVO; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +@Mapper +public interface ProjectInfoDTOMapper { + + ProjectInfoDTOMapper INSTANCE = Mappers.getMapper(ProjectInfoDTOMapper.class); + + ProjectInfoPO voToPo(ProjectInfoVO projectInfoVO); + + ProjectInfoVO poToVo(ProjectInfoPO projectInfoPO); +} diff --git a/server/src/main/java/io/wdd/server/beans/po/ProjectInfoPO.java b/server/src/main/java/io/wdd/server/beans/po/ProjectInfoPO.java new file mode 100644 index 0000000..7bb4901 --- /dev/null +++ b/server/src/main/java/io/wdd/server/beans/po/ProjectInfoPO.java @@ -0,0 +1,89 @@ +package io.wdd.server.beans.po; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + * @TableName project_info + */ +@TableName(value = "project_info") +@Data +public class ProjectInfoPO implements Serializable { + @TableField(exist = false) + private static final long serialVersionUID = 1L; + /** + * + */ + @TableId(value = "project_id") + private Long projectId; + /** + * + */ + @TableField(value = "project_name") + private String projectName; + /** + * 省份 + */ + @TableField(value = "project_province") + private String projectProvince; + /** + * + */ + @TableField(value = "project_version") + private String projectVersion; + /** + * + */ + @TableField(value = "project_namespace") + private String projectNamespace; + /** + * 网络类型 0 完全访问公网 1 一台访问公网 2 完全无法访问公网 + */ + @TableField(value = "deploy_net_env") + private Integer deployNetEnv; + /** + * 部署环境,阿里云,移动云、自建云等 + */ + @TableField(value = "deploy_hardware_env") + private String deployHardwareEnv; + /** + * 部署时间 + */ + @TableField(value = "create_time") + private LocalDateTime createTime; + /** + * 升级时间 + */ + @TableField(value = "update_time") + private LocalDateTime updateTime; + /** + * 有效期 + */ + @TableField(value = "expired_time") + private LocalDateTime expiredTime; + /** + * 行业组项目负责人 + */ + @TableField(value = "trade_person_name") + private String tradePersonName; + /** + * 售前负责人 + */ + @TableField(value = "pre_sale_person_name") + private String preSalePersonName; + /** + * 是否使用离线地图 + */ + @TableField(value = "is_offline_map") + private Integer isOfflineMap; + /** + * 是否部署AI功能 + */ + @TableField(value = "is_ai_deploy") + private Integer isAiDeploy; +} \ No newline at end of file diff --git a/server/src/main/java/io/wdd/server/beans/vo/ProjectInfoVO.java b/server/src/main/java/io/wdd/server/beans/vo/ProjectInfoVO.java new file mode 100644 index 0000000..39a9244 --- /dev/null +++ b/server/src/main/java/io/wdd/server/beans/vo/ProjectInfoVO.java @@ -0,0 +1,100 @@ +package io.wdd.server.beans.vo; + +import com.baomidou.mybatisplus.annotation.TableField; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; + +import java.time.LocalDateTime; + +/** + * @TableName project_info + */ + +@Data +@AllArgsConstructor +@NoArgsConstructor +@SuperBuilder(toBuilder = true) +public class ProjectInfoVO { + + + /** + * + */ + @TableField(value = "project_name") + private String projectName; + + /** + * 省份 + */ + @TableField(value = "project_province") + private String projectProvince; + + /** + * + */ + @TableField(value = "project_version") + private String projectVersion; + + /** + * + */ + @TableField(value = "project_namespace") + private String projectNamespace; + + /** + * 网络类型 0 完全访问公网 1 一台访问公网 2 完全无法访问公网 + */ + @TableField(value = "deploy_net_env") + private Integer deployNetEnv; + + /** + * 部署环境,阿里云,移动云、自建云等 + */ + @TableField(value = "deploy_hardware_env") + private String deployHardwareEnv; + + /** + * 部署时间 + */ + @TableField(value = "create_time") + private LocalDateTime createTime; + + /** + * 升级时间 + */ + @TableField(value = "update_time") + private LocalDateTime updateTime; + + /** + * 有效期 + */ + @TableField(value = "expired_time") + private LocalDateTime expiredTime; + + /** + * 行业组项目负责人 + */ + @TableField(value = "trade_person_name") + private String tradePersonName; + + /** + * 售前负责人 + */ + @TableField(value = "pre_sale_person_name") + private String preSalePersonName; + + /** + * 是否使用离线地图 + */ + @TableField(value = "is_offline_map") + private Integer isOfflineMap; + + /** + * 是否部署AI功能 + */ + @TableField(value = "is_ai_deploy") + private Integer isAiDeploy; + +} \ No newline at end of file diff --git a/server/src/main/java/io/wdd/server/controller/ProjectController.java b/server/src/main/java/io/wdd/server/controller/ProjectController.java new file mode 100644 index 0000000..b2dfbef --- /dev/null +++ b/server/src/main/java/io/wdd/server/controller/ProjectController.java @@ -0,0 +1,70 @@ +package io.wdd.server.controller; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import io.wdd.common.response.R; +import io.wdd.server.beans.po.ProjectInfoPO; +import io.wdd.server.beans.vo.ProjectInfoVO; +import io.wdd.server.coreService.CoreProjectService; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +@RestController +@Api("Octopus Server - 项目信息") +@RequestMapping("/project") +public class ProjectController { + + @Resource + CoreProjectService projectService; + + @GetMapping("/all") + @ApiOperation("项目-获取全部项目信息") + public R> projectGetAll( + ) { + return R.ok(projectService.projectGetAll()); + } + + @PostMapping("/create") + @ApiOperation("项目-创建一个项目") + public R projectCreate( + @RequestBody ProjectInfoVO projectInfoVO + ) { + + String result = "创建项目成功!"; + if (!projectService.projectCreate(projectInfoVO)) { + result = "创建项目失败!"; + } + return R.ok(result); + } + + @PostMapping("/update") + @ApiOperation("项目-更新一个项目") + public R projectUpdate( + @RequestBody ProjectInfoPO projectInfoPO + ) { + + String result = "更新项目成功!"; + if (!projectService.projectUpdate(projectInfoPO)) { + result = "更新项目失败!"; + } + return R.ok(result); + } + + @PostMapping("/delete") + @ApiOperation("项目-删除一个项目") + public R projectDelete( + @RequestParam(value = "projectId", name = "项目的Id") @ApiParam(value = "项目的Id") Long projectId + ) { + + String result = "删除项目成功!"; + if (!projectService.projectDelete(projectId)) { + result = "删除项目失败!"; + } + return R.ok(result); + } + + +} diff --git a/server/src/main/java/io/wdd/server/coreService/CoreProjectService.java b/server/src/main/java/io/wdd/server/coreService/CoreProjectService.java new file mode 100644 index 0000000..3025509 --- /dev/null +++ b/server/src/main/java/io/wdd/server/coreService/CoreProjectService.java @@ -0,0 +1,19 @@ +package io.wdd.server.coreService; + +import io.wdd.server.beans.po.ProjectInfoPO; +import io.wdd.server.beans.vo.ProjectInfoVO; + +import java.util.List; + +public interface CoreProjectService { + + // 获取所有的角色 + List projectGetAll(); + + boolean projectCreate(ProjectInfoVO projectInfoVO); + + boolean projectUpdate(ProjectInfoPO projectInfoPO); + + boolean projectDelete(Long projectId); + +} diff --git a/server/src/main/java/io/wdd/server/coreService/impl/CoreProjectServiceImpl.java b/server/src/main/java/io/wdd/server/coreService/impl/CoreProjectServiceImpl.java new file mode 100644 index 0000000..81dec26 --- /dev/null +++ b/server/src/main/java/io/wdd/server/coreService/impl/CoreProjectServiceImpl.java @@ -0,0 +1,64 @@ +package io.wdd.server.coreService.impl; + +import io.wdd.server.beans.mapper.ProjectInfoDTOMapper; +import io.wdd.server.beans.po.ProjectInfoPO; +import io.wdd.server.beans.vo.ProjectInfoVO; +import io.wdd.server.coreService.CoreProjectService; +import io.wdd.server.service.ProjectInfoService; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.List; + +@Service +@Slf4j +public class CoreProjectServiceImpl implements CoreProjectService { + + @Resource + ProjectInfoService projectInfoService; + + @Override + public List projectGetAll() { + + return projectInfoService.list(); + } + + @Override + public boolean projectCreate(ProjectInfoVO projectInfoVO) { + + if (!checkDataValid(projectInfoVO)) { + return false; + } + + ProjectInfoPO projectInfoPO = ProjectInfoDTOMapper.INSTANCE.voToPo(projectInfoVO); + + return projectInfoService.save(projectInfoPO); + + } + + private boolean checkDataValid(ProjectInfoVO projectInfoVO) { + + if (StringUtils.isBlank(projectInfoVO.getProjectName())) { + return false; + } + + return !StringUtils.isBlank(projectInfoVO.getProjectNamespace()); + } + + @Override + public boolean projectUpdate(ProjectInfoPO projectInfoPO) { + + if (!checkDataValid(ProjectInfoDTOMapper.INSTANCE.poToVo(projectInfoPO))) { + return false; + } + + return projectInfoService.saveOrUpdate(projectInfoPO); + } + + @Override + public boolean projectDelete(Long projectId) { + return projectInfoService.removeById(projectId); + } +} diff --git a/server/src/main/java/io/wdd/server/coreService/impl/CoreRoleServiceImpl.java b/server/src/main/java/io/wdd/server/coreService/impl/CoreRoleServiceImpl.java index 9dd76b9..8958342 100644 --- a/server/src/main/java/io/wdd/server/coreService/impl/CoreRoleServiceImpl.java +++ b/server/src/main/java/io/wdd/server/coreService/impl/CoreRoleServiceImpl.java @@ -32,10 +32,12 @@ public class CoreRoleServiceImpl implements CoreRoleService { } ServerRolePO serverRolePO = ServerRoleDTOMapper.INSTANCE.voToPo(serverRoleVO); + return serverRoleService.save(serverRolePO); } private boolean checkDataValid(ServerRoleVO serverRoleVO) { + if (StringUtils.isBlank(serverRoleVO.getRoleName())) { return false; } diff --git a/server/src/main/java/io/wdd/server/mapper/ProjectInfoMapper.java b/server/src/main/java/io/wdd/server/mapper/ProjectInfoMapper.java new file mode 100644 index 0000000..5ec13cf --- /dev/null +++ b/server/src/main/java/io/wdd/server/mapper/ProjectInfoMapper.java @@ -0,0 +1,18 @@ +package io.wdd.server.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import io.wdd.server.beans.po.ProjectInfoPO; + +/** + * @author wdd + * @description 针对表【project_info】的数据库操作Mapper + * @createDate 2023-10-09 11:12:02 + * @Entity io.wdd.server.beans.po.ProjectInfoPO + */ +public interface ProjectInfoMapper extends BaseMapper { + +} + + + + diff --git a/server/src/main/java/io/wdd/server/service/ProjectInfoService.java b/server/src/main/java/io/wdd/server/service/ProjectInfoService.java new file mode 100644 index 0000000..00c4c60 --- /dev/null +++ b/server/src/main/java/io/wdd/server/service/ProjectInfoService.java @@ -0,0 +1,13 @@ +package io.wdd.server.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import io.wdd.server.beans.po.ProjectInfoPO; + +/** + * @author wdd + * @description 针对表【project_info】的数据库操作Service + * @createDate 2023-10-09 11:12:02 + */ +public interface ProjectInfoService extends IService { + +} diff --git a/server/src/main/java/io/wdd/server/service/impl/ProjectInfoServiceImpl.java b/server/src/main/java/io/wdd/server/service/impl/ProjectInfoServiceImpl.java new file mode 100644 index 0000000..f8b6c60 --- /dev/null +++ b/server/src/main/java/io/wdd/server/service/impl/ProjectInfoServiceImpl.java @@ -0,0 +1,22 @@ +package io.wdd.server.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import io.wdd.server.beans.po.ProjectInfoPO; +import io.wdd.server.mapper.ProjectInfoMapper; +import io.wdd.server.service.ProjectInfoService; +import org.springframework.stereotype.Service; + +/** + * @author wdd + * @description 针对表【project_info】的数据库操作Service实现 + * @createDate 2023-10-09 11:12:02 + */ +@Service +public class ProjectInfoServiceImpl extends ServiceImpl + implements ProjectInfoService { + +} + + + + diff --git a/server/src/main/resources/mapper/ProjectInfoMapper.xml b/server/src/main/resources/mapper/ProjectInfoMapper.xml new file mode 100644 index 0000000..bf6a4ca --- /dev/null +++ b/server/src/main/resources/mapper/ProjectInfoMapper.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + project_id + ,project_name,project_province, + project_version,project_namespace,deploy_net_env, + deploy_hardware_env,create_time,update_time, + expired_time,trade_person_name,pre_sale_person_name, + is_offline_map,is_ai_deploy + + diff --git a/server/src/main/resources/mapper/ServerInfoMapper.xml b/server/src/main/resources/mapper/ServerInfoMapper.xml index 10f04b6..bb00fdd 100644 --- a/server/src/main/resources/mapper/ServerInfoMapper.xml +++ b/server/src/main/resources/mapper/ServerInfoMapper.xml @@ -18,21 +18,21 @@ - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + diff --git a/server/src/test/java/io/wdd/server/controller/ProjectInfoTest.java b/server/src/test/java/io/wdd/server/controller/ProjectInfoTest.java new file mode 100644 index 0000000..d75d789 --- /dev/null +++ b/server/src/test/java/io/wdd/server/controller/ProjectInfoTest.java @@ -0,0 +1,105 @@ +package io.wdd.server.controller; + +import io.wdd.common.response.R; +import io.wdd.server.beans.po.ProjectInfoPO; +import io.wdd.server.beans.vo.ProjectInfoVO; +import net.datafaker.Faker; +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +import javax.annotation.Resource; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; + +@SpringBootTest +public class ProjectInfoTest { + + @Resource + ProjectController projectController; + + @Resource + Faker fakeInstance; + + @Test + public void test_projectGetAll_returnsNonNullObject() { + R> result = projectController.projectGetAll(); + assertNotNull(result); + } + + @Test + public void test_projectCreate_returnsNonNullObjectWithExpectedMessage() { + ProjectInfoVO projectInfoVO = new ProjectInfoVO(); + // Set projectInfoVO properties + R result = projectController.projectCreate(projectInfoVO); + assertNotNull(result); + assertEquals( + "创建项目失败!", + result.getData() + ); + } + + @Test + public void test_projectCreate_createWithFakeData() { + ProjectInfoVO projectInfoVO = new ProjectInfoVO(); + + projectInfoVO.setProjectName(fakeInstance + .funnyName() + .name()); + projectInfoVO.setProjectNamespace(fakeInstance.examplify("dasdd")); + projectInfoVO.setDeployNetEnv(fakeInstance + .random() + .nextInt(3)); + projectInfoVO.setDeployHardwareEnv(fakeInstance + .animal() + .name()); + // Set projectInfoVO properties + R result = projectController.projectCreate(projectInfoVO); + assertNotNull(result); + assertEquals( + "创建项目成功!", + result.getData() + ); + } + + @Test + public void test_projectUpdate_returnsNonNullObjectWithExpectedMessage() { + ProjectInfoPO projectInfoPO = new ProjectInfoPO(); + // Set projectInfoPO properties + R result = projectController.projectUpdate(projectInfoPO); + assertNotNull(result); + assertEquals( + "更新项目失败!", + result.getData() + ); + } + + @Test + public void test_projectDelete_returnsNonNullObjectWithExpectedMessage() { + + List infoPOList = projectController + .projectGetAll() + .getData(); + + int size = infoPOList.size(); + ProjectInfoPO infoPO = infoPOList + .stream() + .skip(fakeInstance + .random() + .nextInt(size)) + .findFirst() + .get(); + + System.out.println("infoPO to delete is = " + infoPO); + + R result = projectController.projectDelete(infoPO.getProjectId()); + assertNotNull(result); + assertEquals( + "删除项目成功!", + result.getData() + ); + } + + +}