瀏覽代碼

修改创建项目接口,增加自动生成业务编号工具

Diors.Po 6 年之前
父節點
當前提交
1f495e5cce

+ 8 - 3
site/pom.xml

@@ -68,9 +68,14 @@
 			<artifactId>junit</artifactId>
 			<version>4.12</version>
 		</dependency>
-
-
-		
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-starter-data-redis</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.commons</groupId>
+			<artifactId>commons-pool2</artifactId>
+		</dependency>
 		<dependency>
 			<groupId>org.hibernate.javax.persistence</groupId>
 			<artifactId>hibernate-jpa-2.1-api</artifactId>

+ 28 - 17
site/src/main/java/com/mooctest/crowd/site/command/ProjectDetailsCommand.java

@@ -9,6 +9,8 @@ import org.springframework.beans.BeanUtils;
 import javax.validation.constraints.NotNull;
 import javax.validation.constraints.Pattern;
 import java.sql.Date;
+import java.sql.Timestamp;
+import java.util.Map;
 
 /**
  * @author: Diors.Po
@@ -24,18 +26,17 @@ public class ProjectDetailsCommand {
     private String name;
 
     @NotNull(message = "项目服务类型不可为空")
-    private Integer type;
+    private String type;
 
-    @NotNull(message = "项目平台不可为空")
-    private Integer platform;
+    private String platform;
 
     @NotNull(message = "项目描述不可为空")
-    private String descrition;
+    private String desc;
 
     @NotNull(message = "可见性选择不可为空")
-    private Long visibility;
+    private Long resource;
 
-    private String location;
+    private Map<String, String> location;
 
     private Long institution;
 
@@ -53,29 +54,39 @@ public class ProjectDetailsCommand {
     private String file;
 
     @NotNull(message = "请填写预算价格")
-    private Double quotedPrice;
+    private Double budget;
 
-    @NotNull(message = "请填写截止日期")
-    private Date datetime;
+    private Timestamp datetime;
 
     private String usage;
 
-    private Double fixedPrice;
+    private Double price;
 
     public CrowdTestProject toCrowdProject(){
         CrowdTestProject crowdTestProject = CrowdTestProjectFactory.createCrowdTestProject();
-        BeanUtils.copyProperties(this, crowdTestProject);
-        crowdTestProject.setProjectFile(file);
-        crowdTestProject.setRequirementFile(file);
-        crowdTestProject.setRegionalManagerId(this.institution);
-        crowdTestProject.setProjectDistributionTypeId(this.visibility);
+        crowdTestProject.setUserId(this.userId);
+        crowdTestProject.setName(this.name);
+        crowdTestProject.setLinkMan(this.contactName);
+        crowdTestProject.setLinkManMobile(this.contactPhone);
+        crowdTestProject.setType(this.type);
+        crowdTestProject.setPlatform(this.platform);
+        crowdTestProject.setDescription(this.desc);
+        crowdTestProject.setRequirementFile(this.doc);
+        crowdTestProject.setProjectFile(this.file);
+        crowdTestProject.setProjectDistributionTypeId(this.resource);
+        crowdTestProject.setDistributionProvince(this.location.get("provinceCode"));
+        crowdTestProject.setDistributionCity(this.location.get("cityCode"));
+        crowdTestProject.setRegionalManagerId(this.getInstitution());
+        crowdTestProject.setDeadTime(this.datetime);
+        crowdTestProject.setQuotedPrice(this.budget);
+        crowdTestProject.setFixedPrice(this.price);
         return crowdTestProject;
     }
 
     public boolean isLegal(){
-        if (this.visibility == 1 && this.location == null)
+        if (this.resource == 1 && this.location == null)
             return false;
-        else if (this.visibility == 0 && this.institution == null)
+        else if (this.resource == 0 && this.institution == null)
             return false;
         return true;
     }

+ 32 - 0
site/src/main/java/com/mooctest/crowd/site/configuration/RedisConfiguration.java

@@ -0,0 +1,32 @@
+package com.mooctest.crowd.site.configuration;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.data.redis.connection.RedisConnectionFactory;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
+import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
+import org.springframework.data.redis.serializer.RedisSerializer;
+import org.springframework.data.redis.serializer.StringRedisSerializer;
+
+/**
+ * @author: Diors.Po
+ * @Email: 171256175@qq.com
+ * @date 2019-07-29 20:47
+ */
+public class RedisConfiguration {
+//
+//    @Bean
+//    public RedisTemplate redisTemplate(RedisConnectionFactory factory){
+//        RedisTemplate redisTemplate = new RedisTemplate();
+//        redisTemplate.setKeySerializer(new StringRedisSerializer());
+//        redisTemplate.setHashKeySerializer(new StringRedisSerializer());
+//        redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
+//        redisTemplate.setValueSerializer(new Jackson2JsonRedisSerializer(Object.class));
+//        // 开启事务
+//        redisTemplate.setEnableTransactionSupport(true);
+//        redisTemplate.setConnectionFactory(factory);
+//        return redisTemplate;
+//    }
+
+}

+ 7 - 8
site/src/main/java/com/mooctest/crowd/site/controller/CrowdProjectController.java

@@ -10,7 +10,6 @@ import org.springframework.validation.BindingResult;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
-import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpSession;
 import java.util.List;
 
@@ -35,10 +34,10 @@ public class CrowdProjectController {
         return projectService.createCrowdProject(projectDetailsCommand);
     }
 
-    @RequestMapping(value = "/api/project/{projectId}", method = RequestMethod.GET)
-    public ProjectDetailsDTO getProject(@PathVariable("projectId") Long projectId){
-        log.info("访问Project详情,projectId:"+projectId);
-        return projectService.getProjectDetails(projectId);
+    @RequestMapping(value = "/api/project/{projectCode}", method = RequestMethod.GET)
+    public ProjectDetailsDTO getProject(@PathVariable("projectCode") String projectCode){
+        log.info("访问Project详情,projectId:"+projectCode);
+        return projectService.getProjectDetails(projectCode);
     }
 
     @RequestMapping(value = "/api/project", method = RequestMethod.GET)
@@ -46,13 +45,13 @@ public class CrowdProjectController {
         return null;
     }
 
-    @RequestMapping(value = "/api/project/{projectId}}", method = RequestMethod.PUT)
-    public ProjectDetailsDTO updateProject(@Validated @RequestBody ProjectDetailsCommand projectDetailsCommand, @PathVariable("projectId") Long projectId, BindingResult result){
+    @RequestMapping(value = "/api/project/{projectCode}}", method = RequestMethod.PUT)
+    public ProjectDetailsDTO updateProject(@Validated @RequestBody ProjectDetailsCommand projectDetailsCommand, @PathVariable("projectCode") String projectCode, BindingResult result){
         if (result.hasErrors())
             throw new BaseException(result.getFieldErrors().toString());
         else if (!projectDetailsCommand.isLegal())
             throw new BaseException("信息不合法,项目可见性存在问题");
-        return projectService.updateProject(projectId, projectDetailsCommand);
+        return projectService.updateProject(projectCode, projectDetailsCommand);
     }
 
     @RequestMapping(value = "/api/project/{projectId}", method = RequestMethod.DELETE)

+ 8 - 7
site/src/main/java/com/mooctest/crowd/site/controller/TestController.java

@@ -1,6 +1,8 @@
 package com.mooctest.crowd.site.controller;
 
 import com.mooctest.crowd.domain.exception.BaseException;
+import com.mooctest.crowd.site.util.GenerateFlowCodeUtil;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
 /**
@@ -11,13 +13,12 @@ import org.springframework.web.bind.annotation.*;
 @RestController
 public class TestController {
 
-    @RequestMapping(value = "/exception/test/{type}", method = RequestMethod.GET)
-    public Object exceptionTest(@PathVariable("type") Integer type){
-        if (type == 1)
-            throw new BaseException();
-        else if (type == 2)
-            throw new RuntimeException();
-        return "Hello world!!!!";
+    @Autowired
+    private GenerateFlowCodeUtil codeUtil;
+
+    @RequestMapping(value = "/test/{prefix}", method = RequestMethod.GET)
+    public Object exceptionTest(@PathVariable("prefix") String prefix){
+        return codeUtil.generateFlowCode(prefix);
     }
 
 }

+ 69 - 0
site/src/main/java/com/mooctest/crowd/site/data/enums/ProjectType.java

@@ -0,0 +1,69 @@
+package com.mooctest.crowd.site.data.enums;
+
+/**
+ * @author: Diors.Po
+ * @Email: 171256175@qq.com
+ * @date 2019-07-30 00:33
+ */
+public enum ProjectType {
+    JKCS("PRO/JKCS", "接口测试",0),
+    LDSM("PRO/LDSM", "安全漏洞扫描", 1),
+    FXPG("PRO/FXPG","风险评估", 2),
+    YMAQSJ("PRO/YMAQSJ", "源代码安全审计", 3),
+    GNCS("PRO/GNCS", "功能测试", 4),
+    XNCS("PRO/XNCS", "性能测试", 5),
+    GNYYXCS("PRO/GNYYXCS", "功能和易用性测试", 6);
+
+    private String typeCode;
+    private String typeName;
+    private Integer typeNum;
+
+
+    ProjectType(String typeCode, String typeName, int typeNum){
+        this.typeCode = typeCode;
+        this.typeName = typeName;
+        this.typeNum = typeNum;
+    }
+
+    public static String getCode(int typeNum) {
+        for (ProjectType pt : ProjectType.values()) {
+            if (pt.getTypeNum() == typeNum) {
+                return pt.typeCode;
+            }
+        }
+        return null;
+    }
+
+    public static String getName(int typeNum) {
+        for (ProjectType pt : ProjectType.values()) {
+            if (pt.getTypeNum() == typeNum) {
+                return pt.typeName;
+            }
+        }
+        return null;
+    }
+
+    public String getTypeCode() {
+        return typeCode;
+    }
+
+    public void setTypeCode(String typeCode) {
+        this.typeCode = typeCode;
+    }
+
+    public String getTypeName() {
+        return typeName;
+    }
+
+    public void setTypeName(String typeName) {
+        this.typeName = typeName;
+    }
+
+    public Integer getTypeNum() {
+        return typeNum;
+    }
+
+    public void setTypeNum(Integer typeNum) {
+        this.typeNum = typeNum;
+    }
+}

+ 52 - 13
site/src/main/java/com/mooctest/crowd/site/data/vo/CrowdProjectVO.java

@@ -6,7 +6,10 @@ import lombok.Data;
 import lombok.NoArgsConstructor;
 import org.springframework.beans.BeanUtils;
 
+import java.sql.Date;
 import java.sql.Timestamp;
+import java.util.HashMap;
+import java.util.Map;
 
 /**
  * @Author: xuexb
@@ -15,26 +18,62 @@ import java.sql.Timestamp;
 @Data
 public class CrowdProjectVO {
 
-    private Long id;
+    private String id;
     private String name;
-    private Long userId;
-    private Long regionalManagerId;
-    private Long projectDistributionTypeId;
-    private String description;
-    private String projectFile;
-    private String requirementFile;
-    private Double quotedPrice;
-    private Double fixedPrice;
-    private String status;
-    private Timestamp createTime;
+    private String contactName;
+    private String contactPhone;
+    private String type;
+    private String platform;
+    private String desc;
+    private String doc;
+    private String file;
+    private Long resource;
+    private Map<String, String> location;
+    private Long institution;
+    private Timestamp datetime;
+    private Double price;
+    private Double budget;
+    private String usage;
 
     public CrowdProjectVO(CrowdTestProject project){
-        BeanUtils.copyProperties(project, this);
+        this.id = project.getCode();
+        this.name = project.getName();
+        this.contactName = project.getLinkMan();
+        this.contactPhone = project.getLinkManMobile();
+        this.type = project.getType();
+        this.platform = project.getPlatform();
+        this.desc = project.getDescription();
+        this.doc = project.getRequirementFile();
+        this.file = project.getProjectFile();
+        this.resource = project.getProjectDistributionTypeId();
+        this.location = new HashMap<>();
+        this.location.put("provinceCode", project.getDistributionProvince());
+        this.location.put("cityCode", project.getDistributionCity());
+        this.institution = project.getRegionalManagerId();
+        this.datetime = project.getDeadTime();
+        this.budget = project.getQuotedPrice();
+        this.price = project.getFixedPrice();
+        this.usage = null;
     }
 
     public CrowdTestProject toCrowdTestProject(){
         CrowdTestProject crowdTestProject = new CrowdTestProject();
-        BeanUtils.copyProperties(this, crowdTestProject);
+        crowdTestProject.setCode(this.id);
+        crowdTestProject.setName(this.name);
+        crowdTestProject.setLinkMan(this.contactName);
+        crowdTestProject.setLinkManMobile(this.contactPhone);
+        crowdTestProject.setType(this.type);
+        crowdTestProject.setPlatform(this.platform);
+        crowdTestProject.setDescription(this.desc);
+        crowdTestProject.setRequirementFile(this.doc);
+        crowdTestProject.setProjectFile(this.file);
+        crowdTestProject.setProjectDistributionTypeId(this.resource);
+        crowdTestProject.setDistributionProvince(this.location.get("provinceCode"));
+        crowdTestProject.setDistributionCity(this.location.get("cityCode"));
+        crowdTestProject.setRegionalManagerId(this.getInstitution());
+        crowdTestProject.setDeadTime(this.datetime);
+        crowdTestProject.setQuotedPrice(this.budget);
+        crowdTestProject.setFixedPrice(this.price);
         return crowdTestProject;
     }
 }

+ 2 - 2
site/src/main/java/com/mooctest/crowd/site/service/CrowdProjectService.java

@@ -9,11 +9,11 @@ import com.mooctest.crowd.site.data.dto.ProjectDetailsDTO;
  * @date 2019-07-29 10:49
  */
 public interface CrowdProjectService {
-    ProjectDetailsDTO getProjectDetails(Long projectId);
+    ProjectDetailsDTO getProjectDetails(String projectCode);
 
     ProjectDetailsDTO createCrowdProject(ProjectDetailsCommand command);
 
-    ProjectDetailsDTO updateProject(Long projectId, ProjectDetailsCommand projectDetailsCommand);
+    ProjectDetailsDTO updateProject(String projectCode, ProjectDetailsCommand projectDetailsCommand);
 
     void deleteProject(Long projectId, Long userId);
 }

+ 15 - 5
site/src/main/java/com/mooctest/crowd/site/service/impl/CrowdProjectServiceImpl.java

@@ -6,10 +6,13 @@ import com.mooctest.crowd.domain.exception.BaseException;
 import com.mooctest.crowd.domain.repository.CrowdTestProjectRepo;
 import com.mooctest.crowd.site.command.ProjectDetailsCommand;
 import com.mooctest.crowd.site.data.dto.ProjectDetailsDTO;
+import com.mooctest.crowd.site.data.enums.ProjectType;
 import com.mooctest.crowd.site.data.vo.CrowdProjectVO;
 import com.mooctest.crowd.site.mediator.OperationMediator;
 import com.mooctest.crowd.site.mediator.ViewMediator;
 import com.mooctest.crowd.site.service.CrowdProjectService;
+import com.mooctest.crowd.site.util.GenerateFlowCodeUtil;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -18,6 +21,7 @@ import org.springframework.stereotype.Service;
  * @Email: 171256175@qq.com
  * @date 2019-07-29 10:51
  */
+@Slf4j
 @Service
 public class CrowdProjectServiceImpl implements CrowdProjectService {
 
@@ -30,28 +34,34 @@ public class CrowdProjectServiceImpl implements CrowdProjectService {
     @Autowired
     private OperationMediator operationMediator;
 
+    @Autowired
+    private GenerateFlowCodeUtil codeUtil;
+
     @Override
-    public ProjectDetailsDTO getProjectDetails(Long projectId) {
-        return viewMediator.renderProjectDetails(projectRepo.getByID(projectId));
+    public ProjectDetailsDTO getProjectDetails(String projectCode) {
+        return viewMediator.renderProjectDetails(projectRepo.getByProjectCode(projectCode));
     }
 
     @Override
     public ProjectDetailsDTO createCrowdProject(ProjectDetailsCommand command) {
         CrowdTestProject project = command.toCrowdProject();
         project.setStatus(CrowdTestProjectStatus.CREATED);
+        log.info("\n"+project.toString()+"\n");
+        String projectCode = codeUtil.generateFlowCode(ProjectType.getCode(new Integer(command.getType())));
+        project.setCode(projectCode);
         ProjectDetailsDTO projectDetailsDTO = new ProjectDetailsDTO();
         projectDetailsDTO.setProjectDetails(new CrowdProjectVO(projectRepo.saveCreateCrowdTestProject(project)));
         return projectDetailsDTO;
     }
 
     @Override
-    public ProjectDetailsDTO updateProject(Long projectId, ProjectDetailsCommand projectDetailsCommand) {
-        CrowdTestProject project = projectRepo.getByID(projectId);
+    public ProjectDetailsDTO updateProject(String projectCode, ProjectDetailsCommand projectDetailsCommand) {
+        CrowdTestProject project = projectRepo.getByProjectCode(projectCode);
         if (project.getUserId() != projectDetailsCommand.getUserId())
             throw new BaseException("UserId不一致");
         //todo 后面需要加入是否有权限进行更新
         projectRepo.saveCreateCrowdTestProject(operationMediator.updateProject(project, projectDetailsCommand));
-        return getProjectDetails(projectId);
+        return getProjectDetails(projectCode);
     }
 
     @Override

+ 47 - 0
site/src/main/java/com/mooctest/crowd/site/util/GenerateFlowCodeUtil.java

@@ -0,0 +1,47 @@
+package com.mooctest.crowd.site.util;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.stereotype.Component;
+
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+/**
+ * @author: Diors.Po
+ * @Email: 171256175@qq.com
+ * @date 2019-07-29 23:10
+ */
+@Component
+public class GenerateFlowCodeUtil {
+
+    @Autowired
+    RedisTemplate redisTemplate;
+
+    public String generateFlowCode(String prefix){
+        int codeNum = 1;
+        if (redisTemplate.hasKey(prefix)){
+            codeNum = (int) redisTemplate.opsForValue().get(prefix);
+            redisTemplate.opsForValue().set(prefix, codeNum+1);
+        } else{
+            redisTemplate.opsForValue().set(prefix, 2);
+        }
+        Date date = new Date();
+        DateFormat dateFormat = new SimpleDateFormat("yyyyMMddHH");
+        String code  = prefix + "-" + dateFormat.format(date)+getSequence(codeNum, 3);
+        return code;
+    }
+
+    private String getSequence(int seq, int length){
+        String str = String.valueOf(seq);
+        if (str.length()>length)
+            return str;
+        StringBuilder sb = new StringBuilder();
+        for (int i = 0; i < length - str.length(); i++)
+            sb.append("0");
+        sb.append(str);
+        return sb.toString();
+    }
+}

+ 11 - 0
site/src/main/resources/application.yml

@@ -21,6 +21,17 @@ spring:
     naming-strategy: org.hibernate.cfg.ImprovedNamingStrategy
   # The SQL dialect makes Hibernate generate better SQL for the chosen database
   properties.hibernate.dialect: org.hibernate.dialect.MySQL5Dialect
+  redis:
+    host: 114.55.91.27
+    pool: 6379
+    password: '#03#05@ise@mooctest'
+    jedis:
+      pool:
+        max-active: 8
+        max-idle: 8
+        max-wait: -1
+        min-idle: 0
+    database: 3
 
 feature-switch:
   default: