Kaynağa Gözat

Merge branch 'feature-V2.0' into 'Dev'

Feature v2.0

See merge request crowd-2019/crowd-test-service-backend!71
郭超 5 yıl önce
ebeveyn
işleme
034bcc4425
92 değiştirilmiş dosya ile 1775 ekleme ve 204 silme
  1. 21 0
      core/pom.xml
  2. 218 0
      core/src/main/java/com/mooctest/crowd/domain/IpAddress/AddressUtils.java
  3. 24 0
      core/src/main/java/com/mooctest/crowd/domain/IpAddress/Area.java
  4. 2 6
      core/src/main/java/com/mooctest/crowd/domain/controller/CrowdTestProjectController.java
  5. 11 1
      core/src/main/java/com/mooctest/crowd/domain/dao/ApplicationTypeDao.java
  6. 1 0
      core/src/main/java/com/mooctest/crowd/domain/dao/CompetitionDao.java
  7. 18 0
      core/src/main/java/com/mooctest/crowd/domain/dao/CompetitionsDao.java
  8. 16 4
      core/src/main/java/com/mooctest/crowd/domain/dao/CrowdTestProjectDao.java
  9. 17 0
      core/src/main/java/com/mooctest/crowd/domain/dao/CrowdTestTaskDao.java
  10. 2 0
      core/src/main/java/com/mooctest/crowd/domain/dao/FieldDao.java
  11. 12 1
      core/src/main/java/com/mooctest/crowd/domain/dao/ResourceDao.java
  12. 13 0
      core/src/main/java/com/mooctest/crowd/domain/dao/ResourceTypeDao.java
  13. 1 1
      core/src/main/java/com/mooctest/crowd/domain/dao/TechnicalArticlesDao.java
  14. 2 0
      core/src/main/java/com/mooctest/crowd/domain/dao/TestTypeDao.java
  15. 1 0
      core/src/main/java/com/mooctest/crowd/domain/domainobject/ApplicationType.java
  16. 1 0
      core/src/main/java/com/mooctest/crowd/domain/domainobject/Competition.java
  17. 3 2
      core/src/main/java/com/mooctest/crowd/domain/domainobject/CrowdTestProject.java
  18. 28 9
      core/src/main/java/com/mooctest/crowd/domain/domainobject/EvaluationAgency.java
  19. 3 2
      core/src/main/java/com/mooctest/crowd/domain/domainobject/PersonalAuthentication.java
  20. 14 0
      core/src/main/java/com/mooctest/crowd/domain/domainobject/Resource.java
  21. 9 0
      core/src/main/java/com/mooctest/crowd/domain/domainobject/ResourceStatus.java
  22. 16 0
      core/src/main/java/com/mooctest/crowd/domain/domainobject/User.java
  23. 18 4
      core/src/main/java/com/mooctest/crowd/domain/factory/CrowdTestProjectFactory.java
  24. 3 0
      core/src/main/java/com/mooctest/crowd/domain/model/ApplicationTypePO.java
  25. 3 0
      core/src/main/java/com/mooctest/crowd/domain/model/CompetitionPO.java
  26. 7 2
      core/src/main/java/com/mooctest/crowd/domain/model/CrowdTestProjectPO.java
  27. 13 0
      core/src/main/java/com/mooctest/crowd/domain/model/PersonalAuthenticationPO.java
  28. 37 0
      core/src/main/java/com/mooctest/crowd/domain/model/ResourcePO.java
  29. 24 0
      core/src/main/java/com/mooctest/crowd/domain/model/ResourceTypePO.java
  30. 0 3
      core/src/main/java/com/mooctest/crowd/domain/model/UserPO.java
  31. 49 0
      core/src/main/java/com/mooctest/crowd/domain/repository/ApplicationTypeRepo.java
  32. 43 0
      core/src/main/java/com/mooctest/crowd/domain/repository/CommonRepo.java
  33. 18 0
      core/src/main/java/com/mooctest/crowd/domain/repository/CrowdTestProjectRepo.java
  34. 12 0
      core/src/main/java/com/mooctest/crowd/domain/repository/IApplicationTypeRepo.java
  35. 2 0
      core/src/main/java/com/mooctest/crowd/domain/repository/ICrowdTestProjectRepo.java
  36. 2 2
      core/src/test/java/com/mooctest/crowd/domain/domainobject/CrowdTestProjectTest.java
  37. 1 1
      core/src/test/java/com/mooctest/crowd/domain/domainobject/CrowdTestReportTest.java
  38. 1 1
      core/src/test/java/com/mooctest/crowd/domain/domainobject/CrowdTestTaskTest.java
  39. 1 1
      core/src/test/java/com/mooctest/crowd/domain/repository/CrowdTestProjectRepoTest.java
  40. 4 0
      site/pom.xml
  41. 2 0
      site/src/main/java/com/mooctest/crowd/site/SiteApplication.java
  42. 1 2
      site/src/main/java/com/mooctest/crowd/site/command/ApplyAgencyAuthCommand.java
  43. 3 3
      site/src/main/java/com/mooctest/crowd/site/command/ApplyEnterpriseAuthCommand.java
  44. 3 5
      site/src/main/java/com/mooctest/crowd/site/command/ApplyPersonalAuthCommand.java
  45. 8 3
      site/src/main/java/com/mooctest/crowd/site/command/CrowdTestProjectCommand.java
  46. 2 2
      site/src/main/java/com/mooctest/crowd/site/command/GenerateProjectCommand.java
  47. 2 1
      site/src/main/java/com/mooctest/crowd/site/configuration/WebMvcConfiguration.java
  48. 53 10
      site/src/main/java/com/mooctest/crowd/site/controller/AgencyController.java
  49. 0 0
      site/src/main/java/com/mooctest/crowd/site/controller/CommonController.java
  50. 32 37
      site/src/main/java/com/mooctest/crowd/site/controller/CrowTestSquareController.java
  51. 4 0
      site/src/main/java/com/mooctest/crowd/site/controller/CrowdProjectController.java
  52. 1 0
      site/src/main/java/com/mooctest/crowd/site/controller/EnumsController.java
  53. 15 0
      site/src/main/java/com/mooctest/crowd/site/controller/TechnicalArticlesController.java
  54. 23 3
      site/src/main/java/com/mooctest/crowd/site/controller/UserController.java
  55. 3 2
      site/src/main/java/com/mooctest/crowd/site/controller/advice/ExceptionAdvice.java
  56. 8 7
      site/src/main/java/com/mooctest/crowd/site/data/dto/CrowdTestSquareIndexDTO.java
  57. 3 4
      site/src/main/java/com/mooctest/crowd/site/data/dto/IndexPageDTO.java
  58. 1 0
      site/src/main/java/com/mooctest/crowd/site/data/vo/ApplicationTypeVO.java
  59. 2 0
      site/src/main/java/com/mooctest/crowd/site/data/vo/CompetitionVO.java
  60. 15 4
      site/src/main/java/com/mooctest/crowd/site/data/vo/CrowdProjectVO.java
  61. 9 9
      site/src/main/java/com/mooctest/crowd/site/data/vo/CrowdTaskVO.java
  62. 10 10
      site/src/main/java/com/mooctest/crowd/site/data/vo/CrowdTestProjectVO.java
  63. 17 4
      site/src/main/java/com/mooctest/crowd/site/data/vo/EvolutionAgencyVO.java
  64. 1 2
      site/src/main/java/com/mooctest/crowd/site/data/vo/PersonalAuthVO.java
  65. 12 0
      site/src/main/java/com/mooctest/crowd/site/data/vo/ResidentAgencyVO.java
  66. 16 0
      site/src/main/java/com/mooctest/crowd/site/data/vo/ResourceTypeVO.java
  67. 25 0
      site/src/main/java/com/mooctest/crowd/site/data/vo/ResourceVO.java
  68. 8 1
      site/src/main/java/com/mooctest/crowd/site/data/vo/UserVO.java
  69. 17 0
      site/src/main/java/com/mooctest/crowd/site/mediator/ViewMediator.java
  70. 5 0
      site/src/main/java/com/mooctest/crowd/site/mediator/impl/OperationMediatorImpl.java
  71. 188 9
      site/src/main/java/com/mooctest/crowd/site/mediator/impl/WebMediatorImpl.java
  72. 5 0
      site/src/main/java/com/mooctest/crowd/site/service/AgencyService.java
  73. 20 2
      site/src/main/java/com/mooctest/crowd/site/service/CommonService.java
  74. 5 0
      site/src/main/java/com/mooctest/crowd/site/service/CrowdProjectService.java
  75. 1 0
      site/src/main/java/com/mooctest/crowd/site/service/CrowdTaskService.java
  76. 10 0
      site/src/main/java/com/mooctest/crowd/site/service/CrowdTestSquareService.java
  77. 18 0
      site/src/main/java/com/mooctest/crowd/site/service/EnumsService.java
  78. 16 0
      site/src/main/java/com/mooctest/crowd/site/service/ResidentAgencyService.java
  79. 1 0
      site/src/main/java/com/mooctest/crowd/site/service/UploadService.java
  80. 0 0
      site/src/main/java/com/mooctest/crowd/site/service/UserService.java
  81. 68 4
      site/src/main/java/com/mooctest/crowd/site/service/impl/AgencyServiceImpl.java
  82. 68 4
      site/src/main/java/com/mooctest/crowd/site/service/impl/CommonServiceImpl.java
  83. 116 32
      site/src/main/java/com/mooctest/crowd/site/service/impl/CrowdProjectServiceImpl.java
  84. 7 0
      site/src/main/java/com/mooctest/crowd/site/service/impl/CrowdTaskServiceImpl.java
  85. 94 0
      site/src/main/java/com/mooctest/crowd/site/service/impl/CrowdTestSquareServiceImpl.java
  86. 47 0
      site/src/main/java/com/mooctest/crowd/site/service/impl/EnumsServiceImpl.java
  87. 2 0
      site/src/main/java/com/mooctest/crowd/site/service/impl/OSSUploadServiceImpl.java
  88. 68 0
      site/src/main/java/com/mooctest/crowd/site/service/impl/ResidentServiceImpl.java
  89. 0 0
      site/src/main/java/com/mooctest/crowd/site/service/impl/UserServiceImpl.java
  90. 45 0
      site/src/main/java/com/mooctest/crowd/site/util/DataUtils.java
  91. 11 1
      site/src/main/resources/application.yml
  92. 13 3
      site/src/test/java/com/mooctest/crowd/site/SiteApplicationTests.java

+ 21 - 0
core/pom.xml

@@ -34,6 +34,18 @@
             <artifactId>powermock-api-mockito</artifactId>
             <version>1.6.4</version>
         </dependency>
+        <!--定位-->
+        <dependency>
+            <groupId>com.maxmind.geoip</groupId>
+            <artifactId>geoip-api</artifactId>
+            <version>1.3.1</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.jsoup</groupId>
+            <artifactId>jsoup</artifactId>
+            <version>1.7.3</version>
+        </dependency>
 
         <dependency>
             <groupId>org.projectlombok</groupId>
@@ -136,6 +148,15 @@
             <artifactId>commons-fileupload</artifactId>
             <version>1.4</version>
         </dependency>
+
+      <dependency>
+        <groupId>com.alibaba</groupId>
+        <artifactId>fastjson</artifactId>
+        <version>1.2.58</version>
+    </dependency>
+
+
+
     </dependencies>
     <build>
         <plugins>

+ 218 - 0
core/src/main/java/com/mooctest/crowd/domain/IpAddress/AddressUtils.java

@@ -0,0 +1,218 @@
+package com.mooctest.crowd.domain.IpAddress;
+
+import com.alibaba.fastjson.JSONObject;
+import lombok.extern.slf4j.Slf4j;
+import org.jsoup.Connection;
+import org.jsoup.Jsoup;
+
+
+import java.io.*;
+import java.net.HttpURLConnection;
+import java.net.URL;
+
+/**
+ *  根据IP地址获取本地定位 
+ */
+@Slf4j
+/**
+  * @author: xuxuan
+  * @date: 2020/7/10
+  * @description:
+  */
+public class AddressUtils {
+
+    /**
+     * 得到本机的外网ip,出现异常时返回空串"" 
+     * @return
+     */
+    public static String getPublicIP() {
+        String ip = "";
+
+        org.jsoup.nodes.Document doc = null;
+        Connection con = null;
+
+        con = Jsoup.connect("http://www.ip138.com/ip2city.asp").timeout(10000);
+
+        try {
+            doc = con.get();
+
+            // 获得包含本机ip的文本串:您的IP是:[xxx.xxx.xxx.xxx] 
+            org.jsoup.select.Elements els = doc.body().select("center");
+            for (org.jsoup.nodes.Element el : els) {
+                ip = el.text();
+            }
+
+            // 从文本串过滤出ip,用正则表达式将非数字和.替换成空串""  
+            ip = ip.replaceAll("[^0-9.]", "");
+        } catch (IOException e) {
+            e.printStackTrace();
+            return ip;
+        }
+        return ip;
+    }
+
+    /**
+     * @param urlStr
+     *            请求的地址
+     * @param content
+     *            请求的参数 格式为:name=xxx&pwd=xxx
+     * @param encoding
+     *            服务器端请求编码。如GBK,UTF-8等
+     * @return
+     */
+    private String getResult(String urlStr, String content, String encoding) {
+        URL url = null;
+        HttpURLConnection connection = null;
+        try {
+            url = new URL(urlStr);
+            connection = (HttpURLConnection) url.openConnection();// 新建连接实例
+            connection.setConnectTimeout(2000);// 设置连接超时时间,单位毫秒,如果运行时出现超时,可自行增大超时时间,如加到10000
+            connection.setReadTimeout(2000);// 设置读取数据超时时间,单位毫秒
+            connection.setDoOutput(true);// 是否打开输出流 true|false
+            connection.setDoInput(true);// 是否打开输入流true|false
+            connection.setRequestMethod("POST");// 提交方法POST|GET
+            connection.setUseCaches(false);// 是否缓存true|false
+            connection.connect();// 打开连接端口
+            DataOutputStream out = new DataOutputStream(connection
+                    .getOutputStream());// 打开输出流往对端服务器写数据
+            out.writeBytes(content);// 写数据
+            out.flush();// 刷新
+            out.close();// 关闭输出流
+            BufferedReader reader = new BufferedReader(new InputStreamReader(
+                    connection.getInputStream(), encoding));// 往对端写完数据对端服务器返回数据
+            // ,以BufferedReader流来读取
+            StringBuffer buffer = new StringBuffer();
+            String line = "";
+            while ((line = reader.readLine()) != null) {
+                buffer.append(line);
+            }
+            reader.close();
+            return buffer.toString();
+        } catch (IOException e) {
+            e.printStackTrace();
+        } finally {
+            if (connection != null) {
+                connection.disconnect();// 关闭连接
+            }
+        }
+        return null;
+    }
+
+    /**
+     * unicode 转换成 中文     *
+     * @param theString
+     * @return
+     */
+    public static String decodeUnicode(String theString) {
+        char aChar;
+        int len = theString.length();
+        StringBuffer outBuffer = new StringBuffer(len);
+        for (int x = 0; x < len;) {
+            aChar = theString.charAt(x++);
+            if (aChar == '\\') {
+                aChar = theString.charAt(x++);
+                if (aChar == 'u') {
+                    int value = 0;
+                    for (int i = 0; i < 4; i++) {
+                        aChar = theString.charAt(x++);
+                        switch (aChar) {
+                            case '0':
+                            case '1':
+                            case '2':
+                            case '3':
+                            case '4':
+                            case '5':
+                            case '6':
+                            case '7':
+                            case '8':
+                            case '9':
+                                value = (value << 4) + aChar - '0';
+                                break;
+                            case 'a':
+                            case 'b':
+                            case 'c':
+                            case 'd':
+                            case 'e':
+                            case 'f':
+                                value = (value << 4) + 10 + aChar - 'a';
+                                break;
+                            case 'A':
+                            case 'B':
+                            case 'C':
+                            case 'D':
+                            case 'E':
+                            case 'F':
+                                value = (value << 4) + 10 + aChar - 'A';
+                                break;
+                            default:
+                                throw new IllegalArgumentException(
+                                        "Malformed      encoding.");
+                        }
+                    }
+                    outBuffer.append((char) value);
+                } else {
+                    if (aChar == 't') {
+                        aChar = '\t';
+                    } else if (aChar == 'r') {
+                        aChar = '\r';
+                    } else if (aChar == 'n') {
+                        aChar = '\n';
+                    } else if (aChar == 'f') {
+                        aChar = '\f';
+                    }
+                    outBuffer.append(aChar);
+                }
+            } else {
+                outBuffer.append(aChar);
+            }
+        }
+        return outBuffer.toString();
+    }
+
+    /**
+     *
+     * @param content
+     *            请求的参数 格式为:name=xxx&pwd=xxx
+     * @param encodingString
+     *            服务器端请求编码。如GBK,UTF-8等
+     * @return
+     * @throws UnsupportedEncodingException
+     */
+    public Area getAddresses(String content, String encodingString)
+            throws UnsupportedEncodingException {
+        // 这里调用PC-Online的接口
+        String urlStr = "http://whois.pconline.com.cn/ipJson.jsp?ip="+content+"&json=true";
+        log.info("urlStr=========="+urlStr);
+        // 从http://whois.pconline.com.cn取得IP所在的省市区信息
+        String returnStr = this.getResult(urlStr, content, encodingString);
+        log.info("返回数据================="+returnStr);
+        JSONObject jsonObject = JSONObject.parseObject(returnStr);
+        String  address=jsonObject.getString("addr");
+        Area  area=new Area(jsonObject.getString("pro"),jsonObject.getString("city"));
+        return  area;
+
+
+
+
+
+    }
+
+    // 这里我们举的例子是获取所在地省份名称,也可以改变上边getAddress的返回值,获取具体的市县名
+    public static Area getProvinceName(String ip){
+        AddressUtils addressUtils = new AddressUtils();
+
+        Area area = null;
+        try {
+            area = addressUtils.getAddresses("ip="+ip, "GBK");
+        } catch (UnsupportedEncodingException e) {
+            e.printStackTrace();
+        }
+        return area;
+    }
+
+    //Main,输出省名
+    public static void main(String[] args) throws Exception {
+        Area address= getProvinceName("");
+        System.out.println(address);
+    }
+}

+ 24 - 0
core/src/main/java/com/mooctest/crowd/domain/IpAddress/Area.java

@@ -0,0 +1,24 @@
+package com.mooctest.crowd.domain.IpAddress;
+
+import lombok.Data;
+
+/**
+ * @author:xx
+ * @date:2020/7/10
+ * @description:
+ */
+
+@Data
+public class Area {
+
+    private  String pro;//省
+    private  String city;
+
+
+
+    public  Area(String pro,String city){
+        this.pro=pro;
+        this.city=city;
+    }
+
+}

+ 2 - 6
core/src/main/java/com/mooctest/crowd/domain/controller/CrowdTestProjectController.java

@@ -15,11 +15,7 @@ import org.springframework.web.bind.annotation.RestController;
 @RequestMapping("/project/")
 public class CrowdTestProjectController {
 
-    @Autowired
-    private CrowdTestProjectRepo crowdTestProjectRepo;
 
-    @Autowired
-    private UserRepo userRepo;
 
 //    @RequestMapping(value = "findById/{crowdTestProjectId}", method = RequestMethod.GET)
 //    public String getCrowdTestProjectById(@PathVariable("crowdTestProjectId") Long crowdTestProjectId){
@@ -201,7 +197,7 @@ public class CrowdTestProjectController {
 //        crowdTestProject.setName(projectName);
 //        crowdTestProject.setProjectDistributionTypeId(1L);
 //        crowdTestProject.setLinkMan("郭超");
-//        crowdTestProject.setPlatform("IOS");
+//        crowdTestProject.setApplicationType("IOS");
 //        crowdTestProject.setType("安卓测试");
 //        crowdTestProject.setDescription("测试内容");
 //        crowdTestProject.setLinkManMobile("13657094936");
@@ -550,7 +546,7 @@ public class CrowdTestProjectController {
 //    /**
 //     * 匹配平台类型 0,1,2 任意  ^[0-2](([,][0-2])?([,][0-2])?)$
 //     */
-//    private boolean isPlatform(String str)throws PatternSyntaxException {
+//    private boolean isApplicationType(String str)throws PatternSyntaxException {
 //        String regExp = "^[0-2](([,][0-2])?([,][0-2])?)$";
 //        Pattern p = Pattern.compile(regExp);
 //        Matcher m = p.matcher(str);

+ 11 - 1
core/src/main/java/com/mooctest/crowd/domain/dao/ApplicationTypeDao.java

@@ -1,18 +1,28 @@
 package com.mooctest.crowd.domain.dao;
 
 import com.mooctest.crowd.domain.model.ApplicationTypePO;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.jpa.domain.Specification;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 import org.springframework.data.repository.CrudRepository;
+import org.springframework.data.repository.PagingAndSortingRepository;
 
 import javax.transaction.Transactional;
 import java.util.List;
 import java.util.Optional;
 
 @Transactional
-public interface ApplicationTypeDao extends CrudRepository<ApplicationTypePO, Long>{
+public interface ApplicationTypeDao extends CrudRepository<ApplicationTypePO, Long>,PagingAndSortingRepository<ApplicationTypePO, Long>, JpaRepository<ApplicationTypePO, Long>,JpaSpecificationExecutor<ApplicationTypePO> {
 
     Optional<ApplicationTypePO> findByCode(String code);
 
+    Optional<ApplicationTypePO> findByName(String name);
+
     Optional<ApplicationTypePO> findById(Long id);
 
     List<ApplicationTypePO> findAll();
+
+    Page<ApplicationTypePO> findAll(Specification<ApplicationTypePO> spec , Pageable pageable);
 }

+ 1 - 0
core/src/main/java/com/mooctest/crowd/domain/dao/CompetitionDao.java

@@ -17,6 +17,7 @@ public interface CompetitionDao extends CrudRepository<CompetitionPO, Long>{
 
     List<CompetitionPO> findAll(Pageable pageable);
 
+
 //    @Query(value = "SELECT new com.mooctest.crowd.domain.domainobject.Competition(c.id,c.name,c.linkUrl,c.startTime,c.isDeleted) FROM CompetitionPO c where c.isDeleted=0 ORDER BY c.startTime DESC")
 //    List<Competition> findTop3(Pageable pageable);
 }

+ 18 - 0
core/src/main/java/com/mooctest/crowd/domain/dao/CompetitionsDao.java

@@ -0,0 +1,18 @@
+package com.mooctest.crowd.domain.dao;
+
+import com.mooctest.crowd.domain.model.CompetitionPO;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.jpa.domain.Specification;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.data.repository.CrudRepository;
+import org.springframework.data.repository.PagingAndSortingRepository;
+
+import javax.transaction.Transactional;
+
+@Transactional
+public interface CompetitionsDao extends CrudRepository<CompetitionPO, Long>,PagingAndSortingRepository<CompetitionPO, Long>, JpaRepository<CompetitionPO, Long>,JpaSpecificationExecutor<CompetitionPO> {
+
+    Page<CompetitionPO> findAll(Specification<CompetitionPO> spec , Pageable pageable);
+}

+ 16 - 4
core/src/main/java/com/mooctest/crowd/domain/dao/CrowdTestProjectDao.java

@@ -1,8 +1,8 @@
 package com.mooctest.crowd.domain.dao;
 
 import com.mooctest.crowd.domain.model.CrowdTestProjectPO;
-import com.mooctest.crowd.domain.model.RankInfos;
 import com.mooctest.crowd.domain.model.RankInfo;
+import com.mooctest.crowd.domain.model.RankInfos;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
 import org.springframework.data.jpa.domain.Specification;
@@ -21,15 +21,26 @@ import java.util.List;
  */
 
 @Transactional
-public interface CrowdTestProjectDao extends CrudRepository<CrowdTestProjectPO, Long>, JpaRepository<CrowdTestProjectPO,Long>, PagingAndSortingRepository<CrowdTestProjectPO,Long>, JpaSpecificationExecutor<CrowdTestProjectPO> {
+public interface CrowdTestProjectDao extends CrudRepository<CrowdTestProjectPO, Long>, JpaRepository<CrowdTestProjectPO, Long>, PagingAndSortingRepository<CrowdTestProjectPO, Long>, JpaSpecificationExecutor<CrowdTestProjectPO> {
     //    @Override
 //    Optional<CrowdTestProjectPO> findById(Long id);
 
     List<CrowdTestProjectPO> findByNameLike(String name);
 
+    @Query(value = "SELECT CTP_ID,CTP_CODE,CTP_NAME," +
+            "CTP_U_ID,CTP_RM_ID,CTP_PDT_ID,CTP_FIELD_TYPE,CTP_PLATFORM,CTP_TYPE,CTP_LINK_MAN," +
+            "CTP_Link_MAN_MOBILE,CTP_TYPE,CTP_DESCRIPTION,CTP_PROJECT_FILE,CTP_REQUIREMENT_FILE,CTP_DISTRIBUTION_TYPE,CTP_DISTRIBUTION_PROVINCE,CTP_DISTRIBUTION_CITY," +
+            "CTP_QUOTED_PRICE,CTP_REST_PRICE,CTP_FIXED_PRICE,CTP_STATUS,CTP_DEAD_LINE,CTP_END_TIME,CTP_IS_DELETED,CTP_JOIN_COUNT,CTP_CREATE_TIME FROM crowd_test_project ORDER BY CTP_CREATE_TIME DESC", nativeQuery = true)
+    List<CrowdTestProjectPO> findMoreHotProjects();
+
+
+    @Query(value = "SELECT CTP_ID,CTP_CODE,CTP_NAME," +
+            "CTP_U_ID,CTP_RM_ID,CTP_PDT_ID,CTP_FIELD_TYPE,CTP_PLATFORM,CTP_TYPE,CTP_LINK_MAN," +
+            "CTP_Link_MAN_MOBILE,CTP_TYPE,CTP_DESCRIPTION,CTP_PROJECT_FILE,CTP_REQUIREMENT_FILE,CTP_DISTRIBUTION_TYPE,CTP_DISTRIBUTION_PROVINCE,CTP_DISTRIBUTION_CITY," +
+            "CTP_QUOTED_PRICE,CTP_REST_PRICE,CTP_FIXED_PRICE,CTP_STATUS,CTP_DEAD_LINE,CTP_END_TIME,CTP_IS_DELETED,CTP_JOIN_COUNT,CTP_CREATE_TIME FROM crowd_test_project p WHERE CTP_STATUS !=4 ORDER BY CTP_CREATE_TIME DESC", nativeQuery = true)
     List<CrowdTestProjectPO> findAll();
 
-    Page<CrowdTestProjectPO> findAll(Specification<CrowdTestProjectPO> spec,Pageable pageable);
+    Page<CrowdTestProjectPO> findAll(Specification<CrowdTestProjectPO> spec, Pageable pageable);
 
     CrowdTestProjectPO findByIdAndIsDeleted(Long id, int isDeleted);
 
@@ -52,7 +63,7 @@ public interface CrowdTestProjectDao extends CrudRepository<CrowdTestProjectPO,
     List<RankInfos> findTotalCountOfField(Pageable pageable);
 
 
-    @Query(value = "SELECT new com.mooctest.crowd.domain.model.RankInfos(COUNT(p.platform),0L ,p.platform) FROM CrowdTestProjectPO p where p.status>1 GROUP BY p.platform ORDER BY COUNT(p.platform) DESC")
+    @Query(value = "SELECT new com.mooctest.crowd.domain.model.RankInfos(COUNT(p.applicationType),0L ,p.applicationType) FROM CrowdTestProjectPO p where p.status>1 GROUP BY p.applicationType ORDER BY COUNT(p.applicationType) DESC")
     List<RankInfos> findTotalCountOfApplicationType(Pageable pageable);
 
     @Override
@@ -63,4 +74,5 @@ public interface CrowdTestProjectDao extends CrudRepository<CrowdTestProjectPO,
 
     @Override
     <S extends CrowdTestProjectPO> S save(S s);
+
 }

+ 17 - 0
core/src/main/java/com/mooctest/crowd/domain/dao/CrowdTestTaskDao.java

@@ -19,6 +19,23 @@ import java.util.List;
 @Transactional
 public interface CrowdTestTaskDao extends CrudRepository<CrowdTestTaskPO, Long>, JpaRepository<CrowdTestTaskPO, Long>, PagingAndSortingRepository<CrowdTestTaskPO, Long> {
 
+
+ @Query(value = "select CTT_ID,CTT_CODE,CTT_NAME,CTT_CTP_CODE,CTT_EA_ID," +
+         "CTT_TYPE,CTT_DISTRIBUTION_TYPE,CTT_DISTRIBUTION_PROVINCE,CTT_DISTRIBUTION_CITY," +
+         "CTT_REQUIREMENT_FILE,CTT_DESCRIPTION,CTT_QUOTED_PRICE,CTT_FIXED_PRICE," +
+         "CTT_STATUS,CTT_FULL_STATUS,CTT_DEAD_LINE,CTT_IS_DELETED,CTT_PARTICIPANT_COUNT,CTT_ACCEPTED_COUNT,CTT_PARTICIPANT_HAS_COMMITTED_COUNT,CTT_CREATE_TIME,CTT_END_TIME FROM  crowd_test_task t where CTT_STATUS=1 or CTT_STATUS=2 ORDER BY CTT_CREATE_TIME DESC",nativeQuery = true)
+  List<CrowdTestTaskPO> findAll();
+
+
+
+
+
+ @Query(value = "select CTT_ID,CTT_CODE,CTT_NAME,CTT_CTP_CODE,CTT_EA_ID," +
+         "CTT_TYPE,CTT_DISTRIBUTION_TYPE,CTT_DISTRIBUTION_PROVINCE,CTT_DISTRIBUTION_CITY," +
+         "CTT_REQUIREMENT_FILE,CTT_DESCRIPTION,CTT_QUOTED_PRICE,CTT_FIXED_PRICE," +
+         "CTT_STATUS,CTT_FULL_STATUS,CTT_DEAD_LINE,CTT_IS_DELETED,CTT_PARTICIPANT_COUNT,CTT_ACCEPTED_COUNT,CTT_PARTICIPANT_HAS_COMMITTED_COUNT,CTT_CREATE_TIME,CTT_END_TIME FROM  crowd_test_task t ORDER BY CTT_CREATE_TIME DESC",nativeQuery = true)
+   List<CrowdTestTaskPO> findMoreHotTasks();
+
    List<CrowdTestTaskPO>  findByNameLike(String name);
 
     Page<CrowdTestTaskPO> findAll(Specification specification, Pageable pageable);

+ 2 - 0
core/src/main/java/com/mooctest/crowd/domain/dao/FieldDao.java

@@ -12,6 +12,8 @@ public interface FieldDao extends CrudRepository<FieldPO, Long>{
 
     Optional<FieldPO> findByCode(String code);
 
+    Optional<FieldPO> findByName(String name);
+
     Optional<FieldPO> findById(Long id);
 
     List<FieldPO> findAll();

+ 12 - 1
core/src/main/java/com/mooctest/crowd/domain/dao/ResourceDao.java

@@ -1,19 +1,30 @@
 package com.mooctest.crowd.domain.dao;
 
+import com.mooctest.crowd.domain.model.CompetitionPO;
 import com.mooctest.crowd.domain.model.ResourcePO;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.jpa.domain.Specification;
+import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.data.jpa.repository.Query;
 import org.springframework.data.repository.CrudRepository;
+import org.springframework.data.repository.PagingAndSortingRepository;
 
 import javax.transaction.Transactional;
 import java.util.List;
 import java.util.Optional;
 
 @Transactional
-public interface ResourceDao extends CrudRepository<ResourcePO, Long>, JpaSpecificationExecutor<ResourcePO> {
+public interface ResourceDao extends CrudRepository<ResourcePO, Long>, JpaSpecificationExecutor<ResourcePO>,PagingAndSortingRepository<ResourcePO, Long>,JpaRepository<ResourcePO, Long> {
 
     Optional<ResourcePO> findByCode(String code);
 
     Optional<ResourcePO> findById(Long id);
 
     List<ResourcePO> findAll();
+
+    Page<ResourcePO> findAll(Specification<ResourcePO> spec , Pageable pageable);
+
+    List<ResourcePO> findByNameLike(String name);
 }

+ 13 - 0
core/src/main/java/com/mooctest/crowd/domain/dao/ResourceTypeDao.java

@@ -0,0 +1,13 @@
+package com.mooctest.crowd.domain.dao;
+
+import com.mooctest.crowd.domain.model.ResourceTypePO;
+import org.springframework.data.repository.CrudRepository;
+
+
+import javax.transaction.Transactional;
+import java.util.Optional;
+
+@Transactional
+public interface ResourceTypeDao extends CrudRepository<ResourceTypePO, Long>{
+    Optional<ResourceTypePO> findByCode(String code);
+}

+ 1 - 1
core/src/main/java/com/mooctest/crowd/domain/dao/TechnicalArticlesDao.java

@@ -28,4 +28,4 @@ public interface TechnicalArticlesDao extends PagingAndSortingRepository<Technic
     @Modifying
     @Query(nativeQuery = true,value="update  technical_articles set TA_READING=TA_READING+1 where TA_ID=?")
     int updateReading(@Param("id") long id);
-}
+}

+ 2 - 0
core/src/main/java/com/mooctest/crowd/domain/dao/TestTypeDao.java

@@ -12,6 +12,8 @@ public interface TestTypeDao extends CrudRepository<TestTypePO, Long>{
 
     Optional<TestTypePO> findByCode(String code);
 
+    Optional<TestTypePO> findByName(String name);
+    
     Optional<TestTypePO> findById(Long id);
 
     List<TestTypePO> findAll();

+ 1 - 0
core/src/main/java/com/mooctest/crowd/domain/domainobject/ApplicationType.java

@@ -15,4 +15,5 @@ public class ApplicationType {
     private String name;
     private String image;
     private List<TestType> testTypeList;
+    private Long count;
 }

+ 1 - 0
core/src/main/java/com/mooctest/crowd/domain/domainobject/Competition.java

@@ -18,6 +18,7 @@ public class Competition {
     private String name;
     private String linkUrl;
     private Timestamp startTime;
+    private String unit;
     private String image;
     private int isDeleted;
 }

+ 3 - 2
core/src/main/java/com/mooctest/crowd/domain/domainobject/CrowdTestProject.java

@@ -15,7 +15,6 @@ import java.util.Optional;
  */
 @Data
 public class CrowdTestProject {
-
     private Long id;
     private String name;
     private String code;
@@ -23,7 +22,7 @@ public class CrowdTestProject {
     private Long regionalManagerId;
     private Long projectDistributionTypeId;
     private String fieldType;
-    private String platform;
+    private String applicationType;
     private String type;
     private String linkMan;
     private String linkManMobile;
@@ -32,9 +31,11 @@ public class CrowdTestProject {
     private String requirementFile;
     private String distributionProvince;
     private String distributionCity;
+    private String valuationStandard;
     private Double quotedPrice;
     private Double fixedPrice;
     private Double restPrice;
+    private String entrustUnit;
     private int status;
     private Timestamp deadTime;
     private Timestamp endTime;

+ 28 - 9
core/src/main/java/com/mooctest/crowd/domain/domainobject/EvaluationAgency.java

@@ -1,6 +1,7 @@
 package com.mooctest.crowd.domain.domainobject;
 
 import com.mooctest.crowd.domain.exception.BaseException;
+import com.mooctest.crowd.domain.model.EvaluationAgencyPO;
 import lombok.Data;
 import org.springframework.beans.BeanUtils;
 
@@ -50,6 +51,24 @@ public class EvaluationAgency {
                 '}';
     }
 
+    public EvaluationAgency() {
+
+    }
+
+
+    public EvaluationAgency(EvaluationAgencyPO evaluationAgencyPO) {
+        BeanUtils.copyProperties(evaluationAgencyPO, this);
+
+
+    }
+
+
+    public EvaluationAgency EvaluationAgency(EvaluationAgencyPO evaluationAgencyPO) {
+        BeanUtils.copyProperties(evaluationAgencyPO, this);
+        return this;
+    }
+
+
     public EvaluationAgency applyAuthentication(Long userId) {
         this.setUserId(userId);
         this.setIsAuthentication(AuthenticationStatus.isAuthenIng);
@@ -61,11 +80,11 @@ public class EvaluationAgency {
     }
 
     public EvaluationAgency passAuthentication() {
-        if(this.getIsAuthentication() == AuthenticationStatus.isNotAuthenticated){
+        if (this.getIsAuthentication() == AuthenticationStatus.isNotAuthenticated) {
             throw new BaseException("当前是未通过认证状态,不可通过认证,需对认证信息进行修改后再提交认证申请");
-        }else if(this.getIsAuthentication() == AuthenticationStatus.isAuthenticated){
+        } else if (this.getIsAuthentication() == AuthenticationStatus.isAuthenticated) {
             throw new BaseException("当前已通过认证,不可再次进行认证");
-        }else{
+        } else {
             this.setIsAuthentication(AuthenticationStatus.isAuthenticated);
             this.setCheckTime(new Timestamp(System.currentTimeMillis()));
             this.setExplain("");
@@ -75,14 +94,14 @@ public class EvaluationAgency {
     }
 
     public EvaluationAgency rejectAuthentication(String explain) {
-        if(this.getIsDeleted() == DeletedStatus.isDeleted){
+        if (this.getIsDeleted() == DeletedStatus.isDeleted) {
             throw new BaseException("当前认证信息已被删除,不可做认证状态改变操作");
-        }else {
-            if(this.getIsAuthentication() == AuthenticationStatus.isNotAuthenticated){
+        } else {
+            if (this.getIsAuthentication() == AuthenticationStatus.isNotAuthenticated) {
                 throw new BaseException("当前已是未通过认证状态,不可再次拒绝认证");
-            }else if(this.getIsAuthentication() == AuthenticationStatus.isAuthenticated){
+            } else if (this.getIsAuthentication() == AuthenticationStatus.isAuthenticated) {
                 throw new BaseException("当前已通过认证,不可拒绝认证");
-            }else {
+            } else {
                 this.setIsAuthentication(AuthenticationStatus.isNotAuthenticated);
                 this.setExplain(explain);
                 this.setCheckTime(new Timestamp(System.currentTimeMillis()));
@@ -94,7 +113,7 @@ public class EvaluationAgency {
     public EvaluationAgency updateAuthInfo(EvaluationAgency modifyAuth) {
         modifyAuth.userId = this.userId;
         modifyAuth.id = this.id;
-        BeanUtils.copyProperties(modifyAuth,this);
+        BeanUtils.copyProperties(modifyAuth, this);
         this.setIsAuthentication(AuthenticationStatus.isAuthenIng);
         this.setIsDeleted(DeletedStatus.isNotDeleted);
         this.setIsAuthentication(AuthenticationStatus.isAuthenIng);

+ 3 - 2
core/src/main/java/com/mooctest/crowd/domain/domainobject/PersonalAuthentication.java

@@ -18,7 +18,7 @@ public class PersonalAuthentication{
     private Long userId;
     private String realName;
     private String IDCard;
-    private String IDCardPostivePhoto;//身份证正面照片
+    private String IDCardPositivePhoto;//身份证正面照片
     private String IDCardBackPhoto;//身份证反面照片
     private String sex;
     private String bankAccount;
@@ -28,6 +28,7 @@ public class PersonalAuthentication{
     private String explain;
     private Timestamp applyTime;
     private Timestamp checkTime;
+    private Timestamp IDCardDeadTime;//身份证过期时间
 
     /**
      * 转换类型
@@ -47,7 +48,7 @@ public class PersonalAuthentication{
 
 
 
-    public PersonalAuthentication applyAuthentication(Long userId) {
+    public PersonalAuthentication applyAuthentication(Long userId){
         this.setUserId(userId);
         this.setIsAuthentication(AuthenticationStatus.isAuthenIng);
         this.setIsDeleted(DeletedStatus.isNotDeleted);

+ 14 - 0
core/src/main/java/com/mooctest/crowd/domain/domainobject/Resource.java

@@ -2,6 +2,8 @@ package com.mooctest.crowd.domain.domainobject;
 
 import lombok.Data;
 
+import java.sql.Timestamp;
+
 /**
  * @author guochao
  * @date 2019/7/6 17:54
@@ -11,4 +13,16 @@ public class Resource {
     private Long id;
     private String code;
     private String name;
+    private String type;
+    private int quantity;
+    private String photoUrl;
+    private String description;
+    private String scene;
+    private String unitWork;
+    private String standard;
+    private String unit;
+    private int state;
+    private Timestamp startTime;
+    private String personnel;
+    private String remarks;
 }

+ 9 - 0
core/src/main/java/com/mooctest/crowd/domain/domainobject/ResourceStatus.java

@@ -0,0 +1,9 @@
+package com.mooctest.crowd.domain.domainobject;
+
+
+public class ResourceStatus {
+    public static final int R_FREE = 0;  //空闲
+    public static final int R_OCCUPY = 1; //占用
+    public static final int R_USABLE = 2; //可用
+    public static final int R_FAULT = 4; //故障
+}

+ 16 - 0
core/src/main/java/com/mooctest/crowd/domain/domainobject/User.java

@@ -2,7 +2,11 @@ package com.mooctest.crowd.domain.domainobject;
 
 import com.mooctest.crowd.domain.exception.BaseException;
 import com.mooctest.crowd.domain.exception.SystemAdministratorException;
+import com.mooctest.crowd.domain.model.UserPO;
+import lombok.AllArgsConstructor;
 import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.springframework.beans.BeanUtils;
 
 import java.sql.Timestamp;
 import java.util.List;
@@ -12,6 +16,7 @@ import java.util.List;
  * @date 2019/7/6 18:17
  */
 @Data
+
 public class User {
     private Long id;
     private String name;
@@ -34,6 +39,10 @@ public class User {
     private SystemAdministratorToUser systemAdministratorToUser;
     private List<Role> roleList;
 
+
+    public User() {
+    }
+
     @Override
     public String toString() {
         return "User{" +
@@ -59,6 +68,13 @@ public class User {
                 '}';
     }
 
+
+    public   User(UserPO userPO){
+        BeanUtils.copyProperties(userPO,this);
+    }
+
+
+
     /**
      * 机构认证——申请
      * @param evaluationAgency

+ 18 - 4
core/src/main/java/com/mooctest/crowd/domain/factory/CrowdTestProjectFactory.java

@@ -1,6 +1,7 @@
 package com.mooctest.crowd.domain.factory;
 
 import com.mooctest.crowd.domain.domainobject.*;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Component;
 
 import java.sql.Date;
@@ -13,17 +14,23 @@ import java.sql.Timestamp;
 @Component
 public class CrowdTestProjectFactory {
 
+    @Value("${green.manager.id}")
+    private static String regionalManagerId;
+
+    @Value("${green.agency.id}")
+    private static String agencyId;
+
     public static CrowdTestProject createCrowdTestProject() {
         return new CrowdTestProject();
     }
 
-    public static CrowdTestProject defaulstCrowdTestProject() {
+    public static CrowdTestProject defaultCrowdTestProject() {
         CrowdTestProject project = new CrowdTestProject();
         project.setStatus(CrowdTestProjectStatus.HAS_FINISHED);
         project.setIsDeleted(0);
         project.setProjectDistributionTypeId(1L);
-        project.setDistributionProvince("江苏");
-        project.setDistributionCity("南京");
+        project.setDistributionProvince("江苏");
+        project.setDistributionCity("南京");
         project.setRegionalManagerId(99222L);
         project.setUserId(1L);
         project.setProjectFile("");
@@ -38,7 +45,7 @@ public class CrowdTestProjectFactory {
     public static CrowdTestTask defaultFinishedCrowdTask() {
         CrowdTestTask task = new CrowdTestTask();
         task.setStatus(CrowdTestTaskStatus.HAS_FINISHED);
-        task.setEvaluationAgencyId(1l);
+        task.setEvaluationAgencyId(20471L);
         task.setDistributionType(0l);
         return task;
     }
@@ -50,6 +57,13 @@ public class CrowdTestProjectFactory {
         return report;
     }
 
+    public static CrowdTestReport defaultTaskReport() {
+        CrowdTestReport report = new CrowdTestReport();
+        report.setScope(1);
+        report.setIsDeleted(0);
+        return report;
+    }
+
     public static CrowdTestTask defaultTask() {
         CrowdTestTask task = new CrowdTestTask();
         return task;

+ 3 - 0
core/src/main/java/com/mooctest/crowd/domain/model/ApplicationTypePO.java

@@ -24,4 +24,7 @@ public class ApplicationTypePO {
 
     @Column(name = "AT_IMAGE")
     private String image;
+
+    @Column(name="AT_COUNT")
+    private Long count;
 }

+ 3 - 0
core/src/main/java/com/mooctest/crowd/domain/model/CompetitionPO.java

@@ -26,6 +26,9 @@ public class CompetitionPO {
     @Column(name = "C_START_TIME")
     private Timestamp startTime;
 
+    @Column(name="C_UNIT")
+    private String unit;
+
     @Column(name = "C_IMAGE")
     private String image;
 

+ 7 - 2
core/src/main/java/com/mooctest/crowd/domain/model/CrowdTestProjectPO.java

@@ -4,7 +4,6 @@ import lombok.Data;
 
 import javax.persistence.*;
 import java.io.Serializable;
-import java.sql.Date;
 import java.sql.Timestamp;
 
 /**
@@ -40,7 +39,7 @@ public class CrowdTestProjectPO implements Serializable {
     private String fieldType;
 
     @Column(name = "CTP_PLATFORM")
-    private String platform;
+    private String applicationType;
 
     @Column(name = "CTP_TYPE")
     private String type;
@@ -66,6 +65,9 @@ public class CrowdTestProjectPO implements Serializable {
     @Column(name = "CTP_REQUIREMENT_FILE")
     private String requirementFile;
 
+    @Column(name = "CTP_VALUATION_STANDARD")
+    private String valuationStandard;
+
     @Column(name = "CTP_QUOTED_PRICE")
     private Double quotedPrice;
 
@@ -76,6 +78,9 @@ public class CrowdTestProjectPO implements Serializable {
     @Column(name = "CTP_REST_PRICE")
     private Double restPrice;
 
+    @Column(name = "CTP_ENTRUST_UNIT")
+    private String entrustUnit;
+
     @Column(name = "CTP_STATUS")
     private int status;
 

+ 13 - 0
core/src/main/java/com/mooctest/crowd/domain/model/PersonalAuthenticationPO.java

@@ -52,4 +52,17 @@ public class PersonalAuthenticationPO {
     @Column(name = "PA_CHECK_TIME")
     private Timestamp checkTime;
 
+    @Column(name = "PA_ID_CARD_POS_PHOTO")
+    private String  idCardPositivePhoto;//身份证正面照片
+
+
+    @Column(name = "PA_ID_CARD_BACK_PHOTO")
+    private String  idCardBackPhoto;//身份证正面照片
+
+
+    @Column(name = "PA_EXPIRE_TIME")
+    private Timestamp  IDCardDeadTime;
+
+
+
 }

+ 37 - 0
core/src/main/java/com/mooctest/crowd/domain/model/ResourcePO.java

@@ -3,6 +3,7 @@ package com.mooctest.crowd.domain.model;
 import lombok.Data;
 
 import javax.persistence.*;
+import java.sql.Timestamp;
 
 /**
  * @author guochao
@@ -21,4 +22,40 @@ public class ResourcePO {
 
     @Column(name = "R_NAME")
     private String name;
+
+    @Column(name = "R_RT_CODE")
+    private String type;
+
+    @Column(name = "R_QUANTITY")
+    private int quantity;
+
+    @Column(name = "R_PHOTO_URL")
+    private String photoUrl;
+
+    @Column(name = "R_DESCRIPTION")
+    private String description;
+
+    @Column(name = "R_SCENE")
+    private String scene;
+
+    @Column(name = "R_UNIT_WORK")
+    private String unitWork;
+
+    @Column(name = "R_STANDARD")
+    private String standard;
+
+    @Column(name = "R_UNIT")
+    private String unit;
+
+    @Column(name = "R_STATE")
+    private int state;
+
+    @Column(name = "R_DATE")
+    private Timestamp startTime;
+
+    @Column(name = "R_PERSONNEL")
+    private String personnel;
+
+    @Column(name = "R_REMARKS")
+    private String remarks;
 }

+ 24 - 0
core/src/main/java/com/mooctest/crowd/domain/model/ResourceTypePO.java

@@ -0,0 +1,24 @@
+package com.mooctest.crowd.domain.model;
+
+import lombok.Data;
+
+import javax.persistence.*;
+
+/**
+ * @author hanyuwei
+ * @date 2020/7/7
+ */
+@Data
+@Entity(name = "resource_type")
+public class ResourceTypePO {
+    @Id
+    @Column(name = "RT_ID")
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Long id;
+
+    @Column(name = "RT_CODE")
+    private String code;
+
+    @Column(name = "RT_NAME")
+    private String name;
+}

+ 0 - 3
core/src/main/java/com/mooctest/crowd/domain/model/UserPO.java

@@ -59,9 +59,6 @@ public class UserPO {
     @Column(name="U_BIRTHDAY")
     private Date birthday;
 
-    @Column(name="U_DETAILED_ADDRESS")
-    private String  detailedAddress;
-
     @Column(name="U_PERSONAL_COMPETENCE")
     private String personalCompetence;
 

+ 49 - 0
core/src/main/java/com/mooctest/crowd/domain/repository/ApplicationTypeRepo.java

@@ -0,0 +1,49 @@
+package com.mooctest.crowd.domain.repository;
+
+import com.mooctest.crowd.domain.dao.ApplicationTypeDao;
+import com.mooctest.crowd.domain.domainobject.ApplicationType;
+import com.mooctest.crowd.domain.model.ApplicationTypePO;
+import com.mooctest.crowd.domain.util.Converter;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.jpa.domain.Specification;
+import org.springframework.data.jpa.domain.Specifications;
+import org.springframework.stereotype.Component;
+
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
+
+
+@Slf4j
+@Component
+public class ApplicationTypeRepo implements IApplicationTypeRepo{
+
+
+    @Autowired
+    private ApplicationTypeDao applicationTypeDao;
+
+    @Override
+    public Page<ApplicationType> getHotTesting(Pageable pageable,String keyword) {
+        Specifications<ApplicationTypePO> where =  Specifications.where(getArticlesByIsNotDeleted(keyword));
+        return applicationTypeDao.findAll(where,pageable).map(ApplicationTypePO->Converter.convert(ApplicationType.class, ApplicationTypePO));
+    }
+    private Specification<ApplicationTypePO> getArticlesByIsNotDeleted(String keyword) {
+        return new Specification<ApplicationTypePO>() {
+            @Override
+            public Predicate toPredicate(Root<ApplicationTypePO> a, CriteriaQuery<?> q, CriteriaBuilder cb) {
+                Predicate predicate = cb.conjunction();
+                if(keyword != null) {
+                    predicate.getExpressions().add(
+                            cb.like(a.<String>get("name"), "%" + StringUtils.trim(keyword) + "%")
+                    );
+                }
+                return predicate;
+            }
+        };
+    }
+}

+ 43 - 0
core/src/main/java/com/mooctest/crowd/domain/repository/CommonRepo.java

@@ -56,6 +56,12 @@ public class CommonRepo {
     @Autowired
     private ExpertDao expertDao;
 
+    @Autowired
+    private  CompetitionsDao competitionsDao;
+
+    @Autowired
+    private CrowdTestProjectDao crowdTestProjectDao;
+
     public List<TestType> getAllTestType(){
         return testTypeDao.findAll().stream().map(testTypePO -> Converter.convert(TestType.class, testTypePO)).collect(Collectors.toList());
     }
@@ -78,6 +84,24 @@ public class CommonRepo {
                 .filter(competition -> competition.getIsDeleted() == DeletedStatus.isNotDeleted).collect(Collectors.toList());
     }
 
+    public Page<Competition> findAllCompetition(Pageable pageable,String keyword) {
+        Specifications<CompetitionPO> where =  Specifications.where(getArticlesByIsNotDeleted(keyword));
+        return  competitionsDao.findAll(where,pageable).map(CompetitionPO -> Converter.convert(Competition.class, CompetitionPO));
+    }
+    private Specification<CompetitionPO> getArticlesByIsNotDeleted(String keyword) {
+        return new Specification<CompetitionPO>() {
+            @Override
+            public Predicate toPredicate(Root<CompetitionPO> a, CriteriaQuery<?> q, CriteriaBuilder cb) {
+                Predicate predicate = cb.conjunction();
+                if(keyword != null) {
+                    predicate.getExpressions().add(
+                            cb.like(a.<String>get("name"), "%" + StringUtils.trim(keyword) + "%")
+                    );
+                }
+                return predicate;
+            }
+        };
+    }
     public List<Competition> getAllCompetitionTop3(Pageable pageable){
         List<CompetitionPO> competitionPOS = competitionDao.findAll(pageable);
         return competitionPOS.stream().map(competitionPO -> Converter.convert(Competition.class, competitionPO))
@@ -172,4 +196,23 @@ public class CommonRepo {
             }
         };
     }
+
+    public Page<CrowdTestProject> getProjectList(Pageable pageable, String code){
+        Specifications<CrowdTestProjectPO> where =  Specifications.where(getCode(code));
+        return crowdTestProjectDao.findAll(where, pageable).map(crowdTestProjectPO -> Converter.convert(CrowdTestProject.class, crowdTestProjectPO));
+    }
+    private Specification<CrowdTestProjectPO> getCode(String code) {
+        return new Specification<CrowdTestProjectPO>() {
+            @Override
+            public Predicate toPredicate(Root<CrowdTestProjectPO> a, CriteriaQuery<?> q, CriteriaBuilder cb) {
+                Predicate predicate = cb.conjunction();
+                if(code != null) {
+                    predicate.getExpressions().add(
+                            cb.equal(a.get("applicationType"), code)
+                    );
+                }
+                return predicate;
+            }
+        };
+    }
 }

+ 18 - 0
core/src/main/java/com/mooctest/crowd/domain/repository/CrowdTestProjectRepo.java

@@ -47,6 +47,9 @@ public class CrowdTestProjectRepo implements ICrowdTestProjectRepo {
     @Autowired
     private UserDao userDao;
 
+    @Autowired
+    private ApplicationTypeDao applicationTypeDao;
+
     @Override
     public Page<CrowdTestProjectPO> findAll(Specification specification, Pageable pageable) {
         return crowdTestProjectDao.findAll(specification, pageable);
@@ -160,6 +163,21 @@ public class CrowdTestProjectRepo implements ICrowdTestProjectRepo {
         }
     }
 
+    @Override
+    public List<CrowdTestProject> getByProject() {
+        List<CrowdTestProject> crowdTestProjectList=new ArrayList<>();
+        List<CrowdTestProjectPO>  crowdTestProjectPO=crowdTestProjectDao.findAllByIsDeleted(DeletedStatus.isNotDeleted);
+        for(int i=0;i<crowdTestProjectPO.size();i++){
+            if (crowdTestProjectPO == null) {
+                throw new CrowdTestProjectNotExistException();
+            } else {
+                CrowdTestProject crowdTestProjectResult = getCrowdTestProjectAndTaskAndReportByCrowdTestProjectPO(crowdTestProjectPO.get(i));
+                crowdTestProjectList.add(crowdTestProjectResult);
+            }
+        }
+        return crowdTestProjectList;
+    }
+
 //    @Override
 //    public void removeCrowdTestProject(String crowdTestProjectCode){
 //        CrowdTestProject crowdTestProject = getByProjectCode(crowdTestProjectCode);

+ 12 - 0
core/src/main/java/com/mooctest/crowd/domain/repository/IApplicationTypeRepo.java

@@ -0,0 +1,12 @@
+package com.mooctest.crowd.domain.repository;
+
+import com.mooctest.crowd.domain.domainobject.ApplicationType;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+
+
+public interface IApplicationTypeRepo {
+
+    Page<ApplicationType> getHotTesting(Pageable pageable,String keyword);
+
+}

+ 2 - 0
core/src/main/java/com/mooctest/crowd/domain/repository/ICrowdTestProjectRepo.java

@@ -33,6 +33,8 @@ public interface ICrowdTestProjectRepo {
 
     void saveCrowdTestProject(CrowdTestProject crowdTestProject);
 
+    List<CrowdTestProject> getByProject();
+
 //    void removeCrowdTestProject(String crowdTestProjectCode) throws CrowdTestProjectNotExistException;
 
 //    CrowdTestProject saveCreateCrowdTestProject(CrowdTestProject crowdTestProject);

+ 2 - 2
core/src/test/java/com/mooctest/crowd/domain/domainobject/CrowdTestProjectTest.java

@@ -46,7 +46,7 @@
 //        crowdTestProject.setRegionalManagerId(1L);
 //        crowdTestProject.setProjectDistributionTypeId(1L);
 //        crowdTestProject.setType("性能测试");
-//        crowdTestProject.setPlatform("IOS");
+//        crowdTestProject.setApplicationType("IOS");
 //        crowdTestProject.setLinkMan("郭超");
 //        crowdTestProject.setLinkManMobile("1233343443");
 //        crowdTestProject.setDescription("测试IOS应用");
@@ -330,7 +330,7 @@
 //        crowdTestProject.getRegionalManagerId();
 //        crowdTestProject.getUserId();
 //        crowdTestProject.getId();
-//        crowdTestProject.getPlatform();
+//        crowdTestProject.getApplicationType();
 //        crowdTestProject.getProjectDistributionTypeId();
 //        crowdTestProject.toString();
 //

+ 1 - 1
core/src/test/java/com/mooctest/crowd/domain/domainobject/CrowdTestReportTest.java

@@ -31,7 +31,7 @@
 //        crowdTestProject.setRegionalManagerId(1L);
 //        crowdTestProject.setProjectDistributionTypeId(1L);
 //        crowdTestProject.setType("性能测试");
-//        crowdTestProject.setPlatform("IOS");
+//        crowdTestProject.setApplicationType("IOS");
 //        crowdTestProject.setLinkMan("郭超");
 //        crowdTestProject.setLinkManMobile("1233343443");
 //        crowdTestProject.setDescription("测试IOS应用");

+ 1 - 1
core/src/test/java/com/mooctest/crowd/domain/domainobject/CrowdTestTaskTest.java

@@ -31,7 +31,7 @@ public class CrowdTestTaskTest {
         crowdTestProject.setRegionalManagerId(1L);
         crowdTestProject.setProjectDistributionTypeId(1L);
         crowdTestProject.setType("性能测试");
-        crowdTestProject.setPlatform("IOS");
+        crowdTestProject.setApplicationType("IOS");
         crowdTestProject.setLinkMan("郭超");
         crowdTestProject.setLinkManMobile("1233343443");
         crowdTestProject.setDescription("测试IOS应用");

+ 1 - 1
core/src/test/java/com/mooctest/crowd/domain/repository/CrowdTestProjectRepoTest.java

@@ -78,7 +78,7 @@ public class CrowdTestProjectRepoTest {
         crowdTestProjectPO.setCode("PROR-IOS");
         crowdTestProjectPO.setUserId(user.getId());
         crowdTestProjectPO.setType("性能测试");
-        crowdTestProjectPO.setPlatform("IOS");
+        crowdTestProjectPO.setApplicationType("IOS");
         crowdTestProjectPO.setLinkMan("郭超");
         crowdTestProjectPO.setLinkManMobile("1233343443");
         crowdTestProjectPO.setDescription("测试IOS应用");

+ 4 - 0
site/pom.xml

@@ -138,6 +138,10 @@
 <!--			<artifactId>spring-boot-starter-cache</artifactId>-->
 <!--			<version>2.1.3.RELEASE</version>-->
 <!--		</dependency>-->
+		<dependency>
+			<groupId>org.yaml</groupId>
+			<artifactId>snakeyaml</artifactId>
+		</dependency>
 	</dependencies>
 
 	<build>

+ 2 - 0
site/src/main/java/com/mooctest/crowd/site/SiteApplication.java

@@ -3,6 +3,8 @@ package com.mooctest.crowd.site;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.cache.annotation.EnableCaching;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
 
 @SpringBootApplication(scanBasePackages = "com.mooctest.crowd")
 @EnableCaching

+ 1 - 2
site/src/main/java/com/mooctest/crowd/site/command/ApplyAgencyAuthCommand.java

@@ -7,7 +7,6 @@ import lombok.Data;
 import org.springframework.beans.BeanUtils;
 
 import javax.validation.constraints.NotNull;
-import javax.validation.constraints.Pattern;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -20,7 +19,7 @@ import java.util.stream.Collectors;
 public class ApplyAgencyAuthCommand {
     @NotNull(message = "机构名称不可为空")
     private String evaluationAgencyName;
-    @NotNull(message = "银行卡号不可为空")
+//    @NotNull(message = "银行卡号不可为空")
     private String bankAccount;
     @NotNull(message = "机构地址不可为空")
     private String address;

+ 3 - 3
site/src/main/java/com/mooctest/crowd/site/command/ApplyEnterpriseAuthCommand.java

@@ -25,11 +25,11 @@ public class ApplyEnterpriseAuthCommand {
     private String address;
     @NotNull(message = "请选择性别")
     private String sex;//2.0新加性别
-    @NotNull(message = "请上传身份证正面照")
+//    @NotNull(message = "请上传身份证正面照")
     private String IDCardPositivePhoto;//身份证正面照
-    @NotNull(message = "请上传身份证反面照")
+//    @NotNull(message = "请上传身份证反面照")
     private String IDCardBackPhoto;//身份证反面照
-    @NotNull(message = "请正确填写身份证过期时间")
+//    @NotNull(message = "请正确填写身份证过期时间")
     private Timestamp IDCardDeadTime;
 
 

+ 3 - 5
site/src/main/java/com/mooctest/crowd/site/command/ApplyPersonalAuthCommand.java

@@ -22,7 +22,7 @@ public class ApplyPersonalAuthCommand {
     @NotNull(message = "请填写真实姓名")
     private String realName;
 
-    @NotNull(message = "请选择性别")
+//    @NotNull(message = "请选择性别")
     private String sex;
 
     @JsonProperty(value = "IDCard")
@@ -35,15 +35,13 @@ public class ApplyPersonalAuthCommand {
     private String IDCardPositivePhoto;
 
     @JsonProperty(value = "IDCardBackPhoto")
-    @NotNull(message = "请上传身份证反面图片")
+//    @NotNull(message = "请上传身份证反面图片")
     private String IDCardBackPhoto;
 
     @JsonProperty(value = "IDCardDeadTime")
-    @NotNull(message = "请正确填写过期时间")
+//    @NotNull(message = "请正确填写身份证过期时间")
     private Timestamp IDCardDeadTime;
 
-
-
     @NotNull(message = "请填写单位或者家庭地址")
     private String address;
 

+ 8 - 3
site/src/main/java/com/mooctest/crowd/site/command/CrowdTestProjectCommand.java

@@ -26,7 +26,7 @@ public class CrowdTestProjectCommand {
     private String name;
 
     @NotNull(message = "项目领域类型不可为空")
-    private String fieldType;
+    private String field;
 
     @NotNull(message = "项目应用类型不可为空")
     private String platform;
@@ -34,6 +34,9 @@ public class CrowdTestProjectCommand {
     @NotNull(message = "项目服务类型不可为空")
     private ArrayList<String> type;
 
+//    @NotNull(message = "项目描述不可为空")
+    private String valuationStandard;
+
     @NotNull(message = "项目描述不可为空")
     private String desc;
 
@@ -72,10 +75,11 @@ public class CrowdTestProjectCommand {
         crowdTestProject.setName(this.name);
         crowdTestProject.setLinkMan(this.contactName);
         crowdTestProject.setLinkManMobile(this.contactPhone);
-        crowdTestProject.setFieldType(this.fieldType);
+        crowdTestProject.setFieldType(this.field);
         crowdTestProject.setType(JSONObject.toJSONString(this.type));
-        crowdTestProject.setPlatform(this.platform);
+        crowdTestProject.setApplicationType(this.platform);
         crowdTestProject.setDescription(this.desc);
+        crowdTestProject.setValuationStandard(this.valuationStandard);
         crowdTestProject.setRequirementFile(this.doc);
         crowdTestProject.setProjectFile(this.file);
         crowdTestProject.setProjectDistributionTypeId(this.resource);
@@ -88,6 +92,7 @@ public class CrowdTestProjectCommand {
         crowdTestProject.setQuotedPrice(this.budget);
         crowdTestProject.setRestPrice(this.budget);
         crowdTestProject.setFixedPrice(this.price);
+//        crowdTestProject.setCreateTime(new Timestamp(System.currentTimeMillis()));
         return crowdTestProject;
     }
 

+ 2 - 2
site/src/main/java/com/mooctest/crowd/site/command/GenerateProjectCommand.java

@@ -29,7 +29,7 @@ public class GenerateProjectCommand {
     @NotNull(message = "项目服务类型不可为空")
     private ArrayList<String> type;
 
-    private ArrayList<String> platform;
+    private ArrayList<String> applicationType;
 
     @NotNull(message = "项目描述不可为空")
     private String description;
@@ -71,7 +71,7 @@ public class GenerateProjectCommand {
         crowdTestProject.setLinkManMobile(this.contactPhone);
         crowdTestProject.setStatus(CrowdTestProjectStatus.HAS_FINISHED);
         crowdTestProject.setType(JSONObject.toJSONString(this.type));
-        crowdTestProject.setPlatform(JSONObject.toJSONString(this.platform));
+        crowdTestProject.setApplicationType(JSONObject.toJSONString(this.applicationType));
         crowdTestProject.setDescription(this.description);
         crowdTestProject.setRequirementFile(this.doc);
         crowdTestProject.setProjectFile(this.file);

+ 2 - 1
site/src/main/java/com/mooctest/crowd/site/configuration/WebMvcConfiguration.java

@@ -35,4 +35,5 @@ public class WebMvcConfiguration implements WebMvcConfigurer {
 //        registry.addInterceptor(sysAdminCheckInterceptor)
 //                .addPathPatterns("/api/user/**");
     }
-}
+    }
+

+ 53 - 10
site/src/main/java/com/mooctest/crowd/site/controller/AgencyController.java

@@ -9,11 +9,18 @@ import com.mooctest.crowd.site.command.ApplyAgencyAuthCommand;
 import com.mooctest.crowd.site.command.AuthRejectCommand;
 import com.mooctest.crowd.site.command.GenerateAgencyCommand;
 import com.mooctest.crowd.site.data.dto.UserDTO;
+import com.mooctest.crowd.site.data.response.ResponseVO;
+import com.mooctest.crowd.site.data.response.ServerCode;
 import com.mooctest.crowd.site.data.vo.AgencyVO;
 import com.mooctest.crowd.site.data.vo.EvolutionAgencyVO;
+import com.mooctest.crowd.site.data.vo.SearchConditionVO;
 import com.mooctest.crowd.site.service.AgencyService;
+import com.mooctest.crowd.site.service.ResidentAgencyService;
+import com.mooctest.crowd.site.util.DataUtils;
 import lombok.extern.java.Log;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
 import org.springframework.validation.BindingResult;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
@@ -29,18 +36,21 @@ import java.util.List;
  */
 @RestController
 @RequestMapping("/api")
-public class AgencyController {
+public class AgencyController extends BaseSearchController {
 
     @Autowired
     private AgencyService agencyService;
+    @Autowired
+    private ResidentAgencyService residentAgencyService;
 
     /**
      * 绿色通道:未登录情况直接录入认证信息,生成用户和评测机构信息
+     *
      * @param command
      * @return
      */
     @RequestMapping(value = "/greenChannel/agency", method = RequestMethod.POST)
-    public UserDTO generateAgency(@RequestBody @Validated GenerateAgencyCommand command, BindingResult result){
+    public UserDTO generateAgency(@RequestBody @Validated GenerateAgencyCommand command, BindingResult result) {
         if (result.hasErrors())
             throw new BaseException(result.getFieldError().getDefaultMessage());
         return agencyService.generateAgency(command);
@@ -48,6 +58,7 @@ public class AgencyController {
 
     /**
      * 申请机构认证
+     *
      * @param userId
      * @param command
      * @param result
@@ -55,7 +66,7 @@ public class AgencyController {
      */
     @LoginRequired
     @RequestMapping(value = "/user/{userId}/agency", method = RequestMethod.POST)
-    public UserDTO applyAgencyAuth(@PathVariable("userId") Long userId, @RequestBody @Validated ApplyAgencyAuthCommand command, BindingResult result){
+    public UserDTO applyAgencyAuth(@PathVariable("userId") Long userId, @RequestBody @Validated ApplyAgencyAuthCommand command, BindingResult result) {
         if (result.hasErrors())
             throw new BaseException(result.getFieldError().getDefaultMessage());
         return agencyService.applyAgency(userId, command);
@@ -63,6 +74,7 @@ public class AgencyController {
 
     /**
      * 更新机构认证信息
+     *
      * @param userId
      * @param command
      * @param result
@@ -70,7 +82,7 @@ public class AgencyController {
      */
     @LoginRequired
     @RequestMapping(value = "/user/{userId}/agency", method = RequestMethod.PUT)
-    public AgencyVO updateAgencyInfo(@PathVariable("userId") Long userId, @RequestBody @Validated ApplyAgencyAuthCommand command, BindingResult result){
+    public AgencyVO updateAgencyInfo(@PathVariable("userId") Long userId, @RequestBody @Validated ApplyAgencyAuthCommand command, BindingResult result) {
         if (result.hasErrors())
             throw new BaseException(result.getFieldError().getDefaultMessage());
         return agencyService.updateAgencyInfo(userId, command);
@@ -78,13 +90,14 @@ public class AgencyController {
 
     /**
      * 审核认证请求(修改认证申请的状态)
+     *
      * @param userId
      * @param status
      * @return
      */
     @LoginRequired
     @RequestMapping(value = "/user/{userId}/agency/status/", method = RequestMethod.PUT)
-    public UserDTO checkAuth(@PathVariable("userId") Long userId, @PathVariable("status") Integer status){
+    public UserDTO checkAuth(@PathVariable("userId") Long userId, @PathVariable("status") Integer status) {
         if (status > 1 || status < -1)
             throw new BaseException("错误的状态信息,无法更新认证状态为所选状态");
         return agencyService.updateAgencyStatus(userId, status);
@@ -93,26 +106,27 @@ public class AgencyController {
     @LoginRequired
     @SysAdminRequired
     @RequestMapping(value = "/user/{userId}/agency/status/accept", method = RequestMethod.PUT)
-    public AgencyVO passAuth(@PathVariable("userId") Long userId){
+    public AgencyVO passAuth(@PathVariable("userId") Long userId) {
         return agencyService.passAuth(userId);
     }
 
     @LoginRequired
     @SysAdminRequired
     @RequestMapping(value = "/user/{userId}/agency/status/reject", method = RequestMethod.PUT)
-    public AgencyVO rejectAuth(@PathVariable("userId") Long userId, @RequestBody @Validated AuthRejectCommand command){
+    public AgencyVO rejectAuth(@PathVariable("userId") Long userId, @RequestBody @Validated AuthRejectCommand command) {
         return agencyService.rejectAuth(userId, command.getExplain());
     }
 
     /**
      * 测评机构修改能力和资源信息
+     *
      * @param userId
      * @param command
      * @return
      */
     @LoginRequired
     @RequestMapping(value = "/user/{userId}/agency/resource", method = RequestMethod.POST)
-    public AgencyVO updateAgencyResourceAndAbility(@PathVariable("userId") Long userId, @RequestBody @Validated AgencyResourceAbilityUpdateCommand command, BindingResult result){
+    public AgencyVO updateAgencyResourceAndAbility(@PathVariable("userId") Long userId, @RequestBody @Validated AgencyResourceAbilityUpdateCommand command, BindingResult result) {
         if (result.hasErrors())
             throw new BaseException(result.getFieldError().getDefaultMessage());
         return agencyService.upadteResourceAndAbility(userId, command);
@@ -120,17 +134,46 @@ public class AgencyController {
 
     /**
      * 获取机构认证信息
+     *
      * @param userId
      * @return
      */
     @LoginRequired
     @RequestMapping(value = "/user/{userId}/agency", method = RequestMethod.GET)
-    public AgencyVO getAgencyInfo(@PathVariable("userId") Long userId){
+    public AgencyVO getAgencyInfo(@PathVariable("userId") Long userId) {
         return agencyService.getAgencyDetails(userId);
     }
 
     @RequestMapping(value = "/agency/list", method = RequestMethod.GET)
-    public List<EvolutionAgencyVO> getAgencyList(){
+    public List<EvolutionAgencyVO> getAgencyList() {
         return agencyService.getAgencyList();
     }
+
+
+    @RequestMapping(value = "/agency/list/more", method = RequestMethod.GET)
+    public ResponseVO getMoreAgencyList(@RequestBody SearchConditionVO searchConditionVO) {
+        Pageable pageable = this.getPageable(searchConditionVO);
+        List<EvolutionAgencyVO> list = agencyService.findMoreAgencyVO();
+        Page<EvolutionAgencyVO> page = DataUtils.listToPage(list, pageable);
+        return new ResponseVO(ServerCode.SUCCESS, page);
+    }
+
+
+    @RequestMapping(value = "resident/agency/more", method = RequestMethod.GET)
+    public ResponseVO getMoreResidentList(@RequestBody SearchConditionVO searchConditionVO) {
+        Pageable pageable = this.getPageable(searchConditionVO);
+        return new ResponseVO(ServerCode.SUCCESS, residentAgencyService.findAll(pageable));
+    }
+
+    @RequestMapping(value = "agency/{agencyId}", method = RequestMethod.GET)
+    public ResponseVO getAgencyDetails(@PathVariable("agencyId") long agencyId) {
+
+        EvolutionAgencyVO agencyVO = agencyService.getDetailById(agencyId);
+        return new ResponseVO(ServerCode.SUCCESS, agencyVO);
+    }
+
+    @Override
+    public Page<?> search(String searchCondition) {
+        return null;
+    }
 }

Dosya farkı çok büyük olduğundan ihmal edildi
+ 0 - 0
site/src/main/java/com/mooctest/crowd/site/controller/CommonController.java


+ 32 - 37
site/src/main/java/com/mooctest/crowd/site/controller/CrowTestSquareController.java

@@ -10,6 +10,7 @@ import com.mooctest.crowd.site.data.vo.SearchConditionVO;
 import com.mooctest.crowd.site.service.CommonService;
 import com.mooctest.crowd.site.service.CrowdProjectService;
 import com.mooctest.crowd.site.service.CrowdTaskService;
+import com.mooctest.crowd.site.service.CrowdTestSquareService;
 import com.mooctest.crowd.site.util.DataUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
@@ -20,6 +21,7 @@ import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.concurrent.atomic.AtomicInteger;
 
 
 /**
@@ -38,10 +40,12 @@ public class CrowTestSquareController extends BaseSearchController {
     private CrowdTaskService crowdTaskService;
     @Autowired
     private CommonService commonService;
+    @Autowired
+    private CrowdTestSquareService crowdTestSquareService;
 
 
     /**
-     * 获取众测广场首页所有的数据,包装到CrowdTestSquareIndexDTO里面
+     * 获取众测广场首页所有的数据,包装到CrowdTestSquareIndexDTO里面     *
      *
      * @return
      */
@@ -56,56 +60,47 @@ public class CrowTestSquareController extends BaseSearchController {
         return new ResponseVO(ServerCode.SUCCESS, crowdTestSquareIndexDTO);
     }
 
+
     /**
-     * 众测项目分页查询接口
+     * 搜索框模糊分页查询接口
      */
-    @PostMapping("/project/list")
-    public ResponseVO findAllprojectByPage(@RequestBody SearchConditionVO searchConditionVO) {
-        Pageable pageable = this.getPageable(searchConditionVO);
-        List<CrowdTestProjectVO> list = crowdProjectService.findAll(pageable);
-        Page<CrowdTestProjectVO> page = DataUtils.listToPage(list, pageable);
-        return new ResponseVO<>(ServerCode.SUCCESS, page);
+    @PostMapping("search/list")
+    public ResponseVO findByNameLike(@RequestBody SearchConditionVO searchConditionVO) {
+        return crowdTestSquareService.findByNameLike(searchConditionVO);
     }
 
     /**
-     * 众测任务分页查询接口
+     * 获取更多热门项目
+     *
+     * @param searchConditionVO
+     * @return
      */
-    @PostMapping("/task/list")
-    public ResponseVO<Page<CrowdTaskVO>> getAllTaskByPage(@RequestBody SearchConditionVO searchConditionVO) {
+
+    @GetMapping("hotProject/list/more")
+    public ResponseVO findMoreHotProjects(@RequestBody SearchConditionVO searchConditionVO) {
         Pageable pageable = this.getPageable(searchConditionVO);
-        Page<CrowdTaskVO> page = commonService.getTaskinfo(pageable, null, 0);
-        return new ResponseVO<>(ServerCode.SUCCESS, page);
+        List<CrowdTestProjectVO> crowdTestProjectVOList = crowdProjectService.findAllMoreHotProjects();
+        Page<CrowdTestProjectVO> projectVOPage = DataUtils.listToPage(crowdTestProjectVOList, pageable);
+        return new ResponseVO(ServerCode.SUCCESS, projectVOPage);
     }
 
     /**
-     * 搜索框模糊查询接口
+     * 获取更多热门任务
+     *
+     * @param searchConditionVO
+     * @return
      */
-    @PostMapping("search/list")
-    public ResponseVO findByNameLike(@RequestBody SearchConditionVO searchConditionVO) {
-        Map<String, String> extraCondition = searchConditionVO.getColumnFilters() == null ? new HashMap<>() : super.getExtraCondition(searchConditionVO);
-        LOG.info("想要查询的是" + searchConditionVO.getColumnFilters().get(0).getType());
+
+    @GetMapping("hotTasks/list/more")
+    public ResponseVO findMoreHotTasks(@RequestBody SearchConditionVO searchConditionVO) {
         Pageable pageable = this.getPageable(searchConditionVO);
-        String keyword = searchConditionVO.getKeyword();
-        ProjectAndTaskDTO projectAndTaskDTO = new ProjectAndTaskDTO();
-        List<CrowdTestProjectVO> list = crowdProjectService.findByNameLike(keyword);
-        List<CrowdTaskVO> taskVOList = crowdTaskService.findByNameLike(keyword);
-
-        projectAndTaskDTO.setCrowdTaskVOList(taskVOList);
-        projectAndTaskDTO.setProjectVOList(list);
-        List projectAndTaskDTOList = new ArrayList<>();
-        projectAndTaskDTOList.addAll(list);
-        projectAndTaskDTOList.addAll(taskVOList);
-        Page<ProjectAndTaskDTO> projectAndTaskDTOPage = DataUtils.listToPage(projectAndTaskDTOList, pageable);
-        Page<CrowdTestProjectVO> projectVOPage = DataUtils.listToPage(list, pageable);
-        Page<CrowdTaskVO> crowdTaskVOPage = DataUtils.listToPage(taskVOList, pageable);
-        if (searchConditionVO.getColumnFilters().get(0).getType().equals("project")){
-            return new ResponseVO<>(ServerCode.SUCCESS, projectVOPage);
-        } else if (searchConditionVO.getColumnFilters().get(0).getType().equals("task")) {
-            return new ResponseVO(ServerCode.SUCCESS, crowdTaskVOPage);
-        }
-        return new ResponseVO<>(ServerCode.SUCCESS, projectAndTaskDTOPage);
+        List<CrowdTaskVO> crowdTestProjectVOList = crowdTaskService.findMoreHotTasks();
+        Page<CrowdTaskVO> taskVOPage = DataUtils.listToPage(crowdTestProjectVOList, pageable);
+        return new ResponseVO(ServerCode.SUCCESS, taskVOPage);
+
     }
 
+
     @Override
     public Page<?> search(String searchCondition) {
         return null;

+ 4 - 0
site/src/main/java/com/mooctest/crowd/site/controller/CrowdProjectController.java

@@ -198,4 +198,8 @@ public class CrowdProjectController {
         return projectService.modifyAllData();
     }
 
+    @RequestMapping(value = "/api/allproject", method = RequestMethod.GET)
+    public  List<CrowdTestProject>  getByProject(){
+        return projectService.getByProject();
+    }
 }

+ 1 - 0
site/src/main/java/com/mooctest/crowd/site/controller/EnumsController.java

@@ -0,0 +1 @@
+
package com.mooctest.crowd.site.controller;

import com.mooctest.crowd.site.data.vo.ApplicationTypeVO;
import com.mooctest.crowd.site.data.vo.FieldVO;
import com.mooctest.crowd.site.data.vo.TestTypeVO;
import com.mooctest.crowd.site.service.EnumsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;
import java.util.List;

/**
 * @Author: guochao
 * @Date: 2020.7.9 22:33
 */
@RestController
@RequestMapping("/api")
public class EnumsController {

    @Autowired
    private EnumsService enumsService;

    /**
     * 获取所有领域类型
     * @return
     */
    @RequestMapping(value = "/list/filed", method = RequestMethod.GET)
    public List<FieldVO> getAllField(HttpServletRequest request) {
        return enumsService.getAllField();
    }

    /**
     * 获取所有应用类型
     * @return
     */
    @RequestMapping(value = "/list/application", method = RequestMethod.GET)
    public List<ApplicationTypeVO> getAllApplicationType(HttpServletRequest request) {
        return enumsService.getAllApplicationType();
    }

    /**
     * 获取所有服务类型
     * @return
     */
    @RequestMapping(value = "/list/type", method = RequestMethod.GET)
    public List<TestTypeVO> getAllType(HttpServletRequest request) {
        return enumsService.getAllType();
    }
}

+ 15 - 0
site/src/main/java/com/mooctest/crowd/site/controller/TechnicalArticlesController.java

@@ -52,6 +52,13 @@ public class TechnicalArticlesController extends BaseSearchController{
         return  new PageRequest(0,10,sort);
     }
 
+    Pageable getMore(SearchConditionVO searchConditionVO){
+        int activePage = searchConditionVO.getActivePage() == 0?1:searchConditionVO.getActivePage();
+        Sort sort = new Sort(Sort.Direction.DESC,"reading");
+        return new PageRequest(activePage-1, CommonConstant.TECHNOLOGY_ROWS_ON_PAGE, sort);
+    }
+
+
     @RequestMapping(value = "/ranking", method = RequestMethod.GET)
     public ResponseVO<TechnicalArticlesDTO> ranking(){
         Pageable pageable = this.getRanking();
@@ -62,4 +69,12 @@ public class TechnicalArticlesController extends BaseSearchController{
     public  TechnicalArticlesDTO updateRanking(@PathVariable("id") long id){
         return  technical.updateRanking(id);
     }
+
+    @RequestMapping(value = "/morearticles", method = RequestMethod.POST)
+    public ResponseVO<TechnicalArticlesDTO> moreArticles(@RequestBody SearchConditionVO searchConditionVO){
+        Map<String, String> extraCondition = searchConditionVO.getColumnFilters()==null? new HashMap<>() :super.getExtraCondition(searchConditionVO);
+        Pageable pageable = this.getMore(searchConditionVO);
+        String keyword = searchConditionVO.getKeyword();
+        return new ResponseVO<>(ServerCode.SUCCESS, technical.getArticles(pageable, keyword,extraCondition));
+    }
 }

+ 23 - 3
site/src/main/java/com/mooctest/crowd/site/controller/UserController.java

@@ -1,5 +1,7 @@
 package com.mooctest.crowd.site.controller;
 
+import com.mooctest.crowd.domain.IpAddress.AddressUtils;
+import com.mooctest.crowd.domain.IpAddress.Area;
 import com.mooctest.crowd.domain.exception.*;
 import com.mooctest.crowd.site.annotation.LoginRequired;
 import com.mooctest.crowd.site.annotation.SysAdminRequired;
@@ -13,6 +15,7 @@ import com.mooctest.crowd.site.data.vo.PersonalAuthVO;
 import com.mooctest.crowd.site.service.EnterpriseAuthService;
 import com.mooctest.crowd.site.service.PersonalAuthService;
 import com.mooctest.crowd.site.service.UserService;
+import com.mooctest.crowd.site.util.DataUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.BindingResult;
 import org.springframework.validation.annotation.Validated;
@@ -20,8 +23,10 @@ import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpSession;
+import java.io.UnsupportedEncodingException;
 import java.lang.reflect.InvocationTargetException;
 import java.util.List;
+import java.util.Map;
 
 /**
  * @author: Diors.Po
@@ -136,7 +141,6 @@ public class UserController extends BaseController {
     public PersonalAuthVO applyPersonalAuthentication(@PathVariable("userId") Long userId,
                                                       @Validated @RequestBody ApplyPersonalAuthCommand command,
                                                       BindingResult result, HttpSession session) {
-
 //        if (!userId.equals(Long.parseLong((String) session.getAttribute("userId"))))
 //            throw new UnauthorizedException("没有权限对他人账号进行操作!");
         LOG.info("当前用户申请的认证信息为" + command);
@@ -145,6 +149,8 @@ public class UserController extends BaseController {
         return userService.applyPersonalAuth(userId, command);
     }
 
+
+
     /**
      * 修改个人认证信息
      *
@@ -193,8 +199,6 @@ public class UserController extends BaseController {
     }
 
 
-
-
     /**
      * 查看个人认证信息
      *
@@ -297,4 +301,20 @@ public class UserController extends BaseController {
         return userService.getAuthedList();
     }
 
+    /**
+     * 用户所在地
+     * @param request
+     * @return
+     */
+    @RequestMapping(value = "index/address",method = RequestMethod.GET)
+    public Area getAddressByIp(HttpServletRequest request) throws UnsupportedEncodingException {
+
+         String ip=DataUtils.getClientIp(request);
+         LOG.info("ip地址是========"+ip);
+          Area   area= AddressUtils.getProvinceName(ip);
+         return  area;
+
+
+    }
+
 }

+ 3 - 2
site/src/main/java/com/mooctest/crowd/site/controller/advice/ExceptionAdvice.java

@@ -70,13 +70,14 @@ public class ExceptionAdvice {
     @ResponseBody
     public String handleSystemException(Exception e){
         log.error("System Error: "+e.getMessage(), e);
-        return "系统异常 " + e.getMessage();
+//        return "系统异常 " + e.getMessage();
+        return e.getMessage();
     }
 
     @ExceptionHandler(Excel2ProjectException.class)
     @ResponseStatus(HttpStatus.BAD_REQUEST)
     public String handleExcel2ProjectException(Excel2ProjectException e){
         log.error("Excel表中存在错误:"+e.getErrorLogs());
-        return e.getErrorLogs();
+        return "Excel表中存在错误:"+ e.getErrorLogs();
     }
 }

+ 8 - 7
site/src/main/java/com/mooctest/crowd/site/data/dto/CrowdTestSquareIndexDTO.java

@@ -1,5 +1,6 @@
 package com.mooctest.crowd.site.data.dto;
 
+import com.mooctest.crowd.domain.domainobject.CrowdTestProjectStatus;
 import com.mooctest.crowd.domain.domainobject.CrowdTestTaskStatus;
 import com.mooctest.crowd.domain.model.CrowdTestProjectPO;
 import com.mooctest.crowd.domain.model.CrowdTestTaskPO;
@@ -32,17 +33,17 @@ public class CrowdTestSquareIndexDTO {
      * 初始化热门任务 ,热门项目
      */
     public void initHotTaskAndProject(){
-        List<CrowdTestProjectVO> projectVOS = this.crowdTestProjectVOs.stream().sorted(Comparator.comparing(CrowdTestProjectVO::getCreateTime).reversed()).collect(Collectors.toList());
-        this.crowdTestProjectVOs = projectVOS.subList(0,6);
+        List<CrowdTestProjectVO> projectVOS = this.crowdTestProjectVOs;
+
+        this.crowdTestProjectVOs = projectVOS.subList(0, 6);
+
         //根据参与人数和创建时间进行排序
         List<CrowdTestProjectVO> list1 = projectVOS.stream().sorted(Comparator.comparing(CrowdTestProjectVO::getJoinCount).reversed()).collect(Collectors.toList());
         //截取前七条
         this.hotCrowdTestProjectVOs = list1.subList(0, 7);
-        List<CrowdTaskVO> tasklist1 = crowdTestTaskVOS.stream().sorted(Comparator.comparing(CrowdTaskVO::getCreateTime).reversed()).collect(Collectors.toList());
-        this.crowdTestTaskVOS=tasklist1.subList(0,6);
-        List<CrowdTaskVO> tasklist2 = tasklist1.stream().sorted(Comparator.comparing(CrowdTaskVO::getAcceptedCount).reversed()).collect(Collectors.toList());
-        //过滤掉已完成的
-        tasklist2.stream().filter(ct -> ct.getStatus() != CrowdTestTaskStatus.HAS_FINISHED);
+        List<CrowdTaskVO> tasklist1 = crowdTestTaskVOS.subList(0, 6);
+        List<CrowdTaskVO> tasklist2 = crowdTestTaskVOS.stream().sorted(Comparator.comparing(CrowdTaskVO::getAcceptedCount).reversed()).collect(Collectors.toList());
         this.hotCrowdTaskVOs = tasklist2.subList(0, 7);
+        this.crowdTestTaskVOS = tasklist1;
     }
 }

+ 3 - 4
site/src/main/java/com/mooctest/crowd/site/data/dto/IndexPageDTO.java

@@ -1,9 +1,6 @@
 package com.mooctest.crowd.site.data.dto;
 
-import com.mooctest.crowd.site.data.vo.AgencyVO;
-import com.mooctest.crowd.site.data.vo.CrowdProjectVO;
-import com.mooctest.crowd.site.data.vo.ExpertVO;
-import com.mooctest.crowd.site.data.vo.ResourceVO;
+import com.mooctest.crowd.site.data.vo.*;
 import lombok.Data;
 import org.springframework.data.domain.Page;
 
@@ -13,4 +10,6 @@ public class IndexPageDTO {
     Page<AgencyVO> agencyPage;
     Page<ResourceVO> resourcePage;
     Page<ExpertVO> expertPage;
+    Page<CompetitionVO> competitionPage;
+    Page<ApplicationTypeVO> applicationTypePage;
 }

+ 1 - 0
site/src/main/java/com/mooctest/crowd/site/data/vo/ApplicationTypeVO.java

@@ -26,5 +26,6 @@ public class ApplicationTypeVO implements Serializable {
         code = applicationType.getCode();
         name = applicationType.getName();
         image = applicationType.getImage();
+        count=applicationType.getCount();
     }
 }

+ 2 - 0
site/src/main/java/com/mooctest/crowd/site/data/vo/CompetitionVO.java

@@ -20,6 +20,7 @@ public class CompetitionVO implements Serializable {
     private String name;
     private String linkUrl;
     private Timestamp startTime;
+    private String unit;
     private String image;
     private int isDeleted;
 
@@ -28,6 +29,7 @@ public class CompetitionVO implements Serializable {
         name = competition.getName();
         linkUrl = competition.getLinkUrl();
         startTime = competition.getStartTime();
+        unit=competition.getUnit();
         image = competition.getImage();
         isDeleted = competition.getIsDeleted();
     }

+ 15 - 4
site/src/main/java/com/mooctest/crowd/site/data/vo/CrowdProjectVO.java

@@ -2,6 +2,7 @@ package com.mooctest.crowd.site.data.vo;
 
 
 import com.alibaba.fastjson.JSONArray;
+import com.google.common.collect.Lists;
 import com.mooctest.crowd.domain.domainobject.CrowdTestProject;
 import com.mooctest.crowd.domain.domainobject.CrowdTestProjectStatus;
 import lombok.Data;
@@ -26,7 +27,7 @@ public class CrowdProjectVO implements Serializable {
     private String contactName;
     private String contactPhone;
     private String platform;
-    private String fieldType;
+    private String field;
     private List<String> type;
     private String desc;
     private String doc;
@@ -36,24 +37,31 @@ public class CrowdProjectVO implements Serializable {
     private Map<String, String> location;
     private String institution;
     private Timestamp datetime;
+    private String valuationStandard;
     private Double price;
     private Double budget;
     private Double restPrice;
+    private String entrustUnit;
     private String usage;
     private Integer status;
     private int joinCount;
     private Long regionManagerId;
     private StatusVO statusVO;
     private Boolean needHandle = false; //该项目需要处理
+    private Timestamp createTime;
 
     public CrowdProjectVO(CrowdTestProject project){
         this.id = project.getCode();
         this.name = project.getName();
         this.contactName = project.getLinkMan();
         this.contactPhone = project.getLinkManMobile();
-        this.type = (List<String>)JSONArray.parse(project.getType());
-        this.platform = project.getPlatform();
-        this.fieldType = project.getFieldType();
+        if(project.getType().contains("[")){
+            this.type = (List<String>)JSONArray.parse(project.getType());
+        }else{
+            this.type = Lists.newArrayList(project.getType());
+        }
+        this.platform = project.getApplicationType();
+        this.field = project.getFieldType();
         this.desc = project.getDescription();
         this.doc = project.getRequirementFile();
         this.file = project.getProjectFile();
@@ -64,13 +72,16 @@ public class CrowdProjectVO implements Serializable {
         this.location.put("cityCode", project.getDistributionCity());
         this.datetime = project.getDeadTime();
         this.budget = project.getQuotedPrice();
+        this.valuationStandard = project.getValuationStandard();
         this.price = project.getFixedPrice();
         this.restPrice = project.getRestPrice();
+        this.entrustUnit = project.getEntrustUnit();
         this.usage = null;
         this.status = project.getStatus();
         this.joinCount = project.getJoinCount();
         this.regionManagerId = project.getRegionalManagerId();
         this.renderStatus();
+        this.createTime=project.getCreateTime();
     }
 
     private void renderStatus(){

+ 9 - 9
site/src/main/java/com/mooctest/crowd/site/data/vo/CrowdTaskVO.java

@@ -3,15 +3,15 @@ package com.mooctest.crowd.site.data.vo;
 import com.mooctest.crowd.domain.domainobject.CrowdTestTask;
 import com.mooctest.crowd.domain.domainobject.CrowdTestTaskAcceptStatus;
 import com.mooctest.crowd.domain.domainobject.CrowdTestTaskStatus;
+import lombok.AllArgsConstructor;
 import lombok.Data;
-
+import lombok.NoArgsConstructor;
 import java.io.Serializable;
 import java.sql.Timestamp;
 import java.text.DateFormat;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.*;
-
 import static com.mooctest.crowd.site.data.vo.CrowdTestProjectVO.getDistanceTimes;
 
 /**
@@ -19,9 +19,11 @@ import static com.mooctest.crowd.site.data.vo.CrowdTestProjectVO.getDistanceTime
  * @Date: 2019.7.15 20:36
  */
 @Data
-public class CrowdTaskVO implements Serializable {
-
-    private long id;
+@NoArgsConstructor
+@AllArgsConstructor
+public class CrowdTaskVO implements Serializable{
+    private String id;
+    private String code;
     private String projectId;
     private String title;
     private String description;
@@ -47,11 +49,9 @@ public class CrowdTaskVO implements Serializable {
     private List<TaskToUserVO> taskToUserVOS = new ArrayList<>();
     private String time_interval;
 
-
-
-
     public CrowdTaskVO(CrowdTestTask task){
-        id = task.getId();
+        id = task.getCode();
+        code = task.getCode();
         projectId = task.getCrowdTestProjectCode();
         title = task.getName();
         description = task.getDescription();

+ 10 - 10
site/src/main/java/com/mooctest/crowd/site/data/vo/CrowdTestProjectVO.java

@@ -1,19 +1,14 @@
 package com.mooctest.crowd.site.data.vo;
 
 import com.mooctest.crowd.domain.domainobject.CrowdTestProject;
-import com.mooctest.crowd.domain.domainobject.CrowdTestReport;
-import com.mooctest.crowd.domain.domainobject.CrowdTestTask;
-import com.mooctest.crowd.domain.model.CrowdTestProjectPO;
-import com.mooctest.crowd.domain.model.TechnicalArticlesPO;
+import lombok.AllArgsConstructor;
 import lombok.Data;
+import lombok.NoArgsConstructor;
 
-import javax.persistence.Column;
 import java.sql.Timestamp;
 import java.text.DateFormat;
-import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.Date;
-import java.util.List;
 
 /**
  * @author:xx
@@ -22,14 +17,16 @@ import java.util.List;
  */
 
 @Data
-public class CrowdTestProjectVO {
+@NoArgsConstructor
+@AllArgsConstructor
+public class CrowdTestProjectVO   {
     private Long id;
     private String code;
     private String name;
     private Long userId;
     private Long regionalManagerId;
     private Long projectDistributionTypeId;
-    private String platform;
+    private String applicationType;
     private String linkMan;
     private String linkManMobile;
     private String type;
@@ -50,6 +47,9 @@ public class CrowdTestProjectVO {
     private Timestamp createTime;
     private String time_interval;
 
+
+
+
     public CrowdTestProjectVO(CrowdTestProject crowdTestProject) {
         id = crowdTestProject.getId();
         code = crowdTestProject.getCode();
@@ -57,7 +57,7 @@ public class CrowdTestProjectVO {
         userId = crowdTestProject.getUserId();
         regionalManagerId = crowdTestProject.getRegionalManagerId();
         projectDistributionTypeId = crowdTestProject.getProjectDistributionTypeId();
-        platform = crowdTestProject.getPlatform();
+        applicationType = crowdTestProject.getApplicationType();
         linkMan = crowdTestProject.getLinkMan();
         linkManMobile = crowdTestProject.getLinkManMobile();
         type = crowdTestProject.getType();

+ 17 - 4
site/src/main/java/com/mooctest/crowd/site/data/vo/EvolutionAgencyVO.java

@@ -6,6 +6,7 @@ import lombok.Data;
 import lombok.NoArgsConstructor;
 
 import java.io.Serializable;
+import java.sql.Timestamp;
 
 /**
  * @Author: xuexb
@@ -15,17 +16,29 @@ import java.io.Serializable;
 @NoArgsConstructor
 @AllArgsConstructor
 public class EvolutionAgencyVO implements Serializable {
+
     private Long id;
     private Long userId;
-    private String logo;
-    private String name;
+    private String agencyPhoto;
+    private String evaluationAgencyName;
     private Double allTaskPrice;
     private Long taskCount;
+    private String address;
+    private Timestamp updateTime;
+    private Timestamp expireTime;
+    private Timestamp checkTime;
+    private Timestamp applyTime;
+
+
 
     public EvolutionAgencyVO(EvaluationAgency evaluationAgency){
         id = evaluationAgency.getId();
-        logo = evaluationAgency.getAgencyPhoto();
-        name = evaluationAgency.getEvaluationAgencyName();
+        agencyPhoto = evaluationAgency.getAgencyPhoto();
+        evaluationAgencyName = evaluationAgency.getEvaluationAgencyName();
         userId = evaluationAgency.getUserId();
+        updateTime=evaluationAgency.getUpdateTime();
+        expireTime=evaluationAgency.getExpireTime();
+        checkTime=evaluationAgency.getCheckTime();
+        applyTime=evaluationAgency.getApplyTime();
     }
 }

+ 1 - 2
site/src/main/java/com/mooctest/crowd/site/data/vo/PersonalAuthVO.java

@@ -1,6 +1,5 @@
 package com.mooctest.crowd.site.data.vo;
 
-import com.mooctest.crowd.domain.domainobject.AuthenticationStatus;
 import com.mooctest.crowd.domain.domainobject.PersonalAuthentication;
 import lombok.Data;
 import lombok.NoArgsConstructor;
@@ -28,7 +27,7 @@ public class PersonalAuthVO {
     private Timestamp applyTime;
     private Timestamp checkTime;
     private StatusVO authStatus;
-    private String IDCardPostivePhoto;//身份证正面照片
+    private String IDCardPositivePhoto;//身份证正面照片
     private String IDCardBackPhoto;//身份证反面照片
     private  String sex;
 

+ 12 - 0
site/src/main/java/com/mooctest/crowd/site/data/vo/ResidentAgencyVO.java

@@ -12,10 +12,22 @@ public class ResidentAgencyVO {
     private Long id;
     private Long agencyId;
     private Long userId;
+    private long   taskCount;
+    private String address;
+    private  String name;//机构名称
+
+
+
 
     public ResidentAgencyVO(ResidentAgency residentAgency){
         id = residentAgency.getId();
         agencyId = residentAgency.getAgencyId();
         userId = residentAgency.getUserId();
+
+    }
+
+
+    public  ResidentAgencyVO(){
+
     }
 }

+ 16 - 0
site/src/main/java/com/mooctest/crowd/site/data/vo/ResourceTypeVO.java

@@ -0,0 +1,16 @@
+package com.mooctest.crowd.site.data.vo;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class ResourceTypeVO implements Serializable {
+    private Long id;
+    private String code;
+    private String name;
+}

+ 25 - 0
site/src/main/java/com/mooctest/crowd/site/data/vo/ResourceVO.java

@@ -6,6 +6,7 @@ import lombok.Data;
 import lombok.NoArgsConstructor;
 
 import java.io.Serializable;
+import java.sql.Timestamp;
 
 /**
  * @author guochao
@@ -17,9 +18,33 @@ import java.io.Serializable;
 public class ResourceVO implements Serializable {
     private String code;
     private String name;
+    private String type;
+    private int quantity;
+    private String photoUrl;
+    private String description;
+    private String scene;
+    private String unitWork;
+    private String standard;
+    private String unit;
+    private int state;
+    private Timestamp startTime;
+    private String personnel;
+    private String remarks;
 
     public ResourceVO(Resource resource){
         code = resource.getCode();
         name = resource.getName();
+        type=  resource.getType();
+        quantity=resource.getQuantity();
+        photoUrl=resource.getPhotoUrl();
+        description=resource.getDescription();
+        scene=resource.getScene();
+        unitWork=resource.getUnitWork();
+        standard=resource.getStandard();
+        unit=resource.getUnit();
+        state=resource.getState();
+        startTime=resource.getStartTime();
+        personnel=resource.getPersonnel();
+        remarks=resource.getRemarks();
     }
 }

+ 8 - 1
site/src/main/java/com/mooctest/crowd/site/data/vo/UserVO.java

@@ -1,5 +1,7 @@
 package com.mooctest.crowd.site.data.vo;
 
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonProperty;
 import com.mooctest.crowd.domain.domainobject.Account;
 import com.mooctest.crowd.domain.domainobject.User;
 import com.mooctest.crowd.domain.model.UserPO;
@@ -26,20 +28,25 @@ public class UserVO implements Serializable {
     private String email;
     private String mobile;
     private String password;
+    @JsonIgnore
     private String province;
+    @JsonIgnore
     private String city;
     private String photoUrl;
     private Double allProjectPrice;
     private String authType;
     private Long taskCount;
     private Date birthday;
-    private String detailedAddress;
     private String personalCompetence;
     private String unit;
     private String county;
+    private String address;
+
+
 
     public UserVO(User user) {
         BeanUtils.copyProperties(user, this);
+        this.address=this.province+this.city;
         this.password = "********";
         if (user.getEvaluationAgency() != null) {
             this.authType = "agency";

+ 17 - 0
site/src/main/java/com/mooctest/crowd/site/mediator/ViewMediator.java

@@ -5,9 +5,11 @@ import com.mooctest.crowd.domain.domainobject.User;
 import com.mooctest.crowd.domain.exception.AccountNotExistException;
 import com.mooctest.crowd.domain.exception.BadRequestException;
 import com.mooctest.crowd.domain.exception.PasswordErrorException;
+import com.mooctest.crowd.domain.model.EvaluationAgencyPO;
 import com.mooctest.crowd.domain.model.PersonalAuthenticationPO;
 import com.mooctest.crowd.site.data.vo.*;
 import org.codehaus.jettison.json.JSONException;
+import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
 import com.mooctest.crowd.site.command.LoginCommand;
 import com.mooctest.crowd.site.command.RegisterCommand;
@@ -18,12 +20,21 @@ import com.mooctest.crowd.site.data.vo.RegionalManagerVO;
 
 
 import java.util.List;
+import java.util.Optional;
 
 /**
  * @Author: xuexb
  * @Date: 2019.7.16 20:25
  */
 public interface ViewMediator {
+
+    List<UserVO> renderMoreUser(Pageable pageable);
+
+
+
+    List<CrowdTaskVO> findMoreHotTasks();
+    List<CrowdTestProjectVO> findMoreHotProjects();
+
     EnterpriseAuthVO getEnterpriseAuthByUserId(Long userId);
     PersonalAuthVO getByUserId(Long userId);
 
@@ -88,4 +99,10 @@ public interface ViewMediator {
     BankCardDTO deleteBankCard(long id,long userId);
 
     TechnicalArticlesDTO  updateRanking(long id);
+
+    List<ResourceVO>  getResource();
+
+    ResourceVO getResourceDetailed(String code);
+
+    List<ResourceVO>  getSearchResource(String name);
 }

+ 5 - 0
site/src/main/java/com/mooctest/crowd/site/mediator/impl/OperationMediatorImpl.java

@@ -9,6 +9,8 @@ import com.mooctest.crowd.site.mediator.OperationMediator;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
+import java.sql.Timestamp;
+
 /**
  * @author: Diors.Po
  * @Email: 171256175@qq.com
@@ -35,6 +37,9 @@ public class OperationMediatorImpl implements OperationMediator {
         updateProject.setId(project.getId());
         updateProject.setCode(project.getCode());
         updateProject.setStatus(project.getStatus());
+        if(updateProject.getCreateTime() == null){
+            updateProject.setCreateTime(new Timestamp(System.currentTimeMillis()));
+        }
         return updateProject;
     }
 }

+ 188 - 9
site/src/main/java/com/mooctest/crowd/site/mediator/impl/WebMediatorImpl.java

@@ -51,9 +51,9 @@ public class WebMediatorImpl implements ViewMediator {
     @Autowired
     private EvaluationAgencyRepo evaluationAgencyRepo;
 
-
     @Autowired
     private CommonRepo commonRepo;
+
     @Autowired
     private CrowdTestTaskDao taskDao;
 
@@ -96,10 +96,65 @@ public class WebMediatorImpl implements ViewMediator {
     @Autowired
     private BankLogoDao bankLogoDao;
 
+    @Autowired
+    private ApplicationTypeDao applicationTypeDao;
+
+    @Autowired
+    private  ResourceDao resourceDao;
+
+    @Autowired
+    private ResourceTypeDao resourceTypeDao;
+
+    @Autowired
+    private FieldDao fieldDao;
+
     @Value("${agency}")
     private String agencyId;
 
     @Override
+    public List<UserVO> renderMoreUser(Pageable pageable) {
+        List<UserVO> userVOS=new ArrayList<>();
+        List<RankCountInfo> rankCountInfos=taskToUserDao.findTotalCountOfUser();
+        long []ids=new long[rankCountInfos.size()];
+        for(int i=0;i<rankCountInfos.size();i++){
+            if(userDao.findById(rankCountInfos.get(i).getEntityId()).isPresent()){
+                ids[i]=rankCountInfos.get(i).getEntityId();
+                Optional<UserPO> userPO=userDao.findById(ids[i]);
+                User  user=new User(userPO.get());
+                UserVO userVO=new UserVO(user);
+                userVO.setTaskCount(rankCountInfos.get(i).getCount());
+                userVOS.add(userVO);
+            }
+
+        }
+        return userVOS;
+    }
+
+    @Override
+    public List<CrowdTaskVO> findMoreHotTasks() {
+        List<CrowdTestTaskPO> list=taskDao.findMoreHotTasks();//已经根据创建时间排序好了。
+        List<CrowdTaskVO> hotMoreTestprojects = taskDao.findMoreHotTasks().stream().map(crowdTestTaskPO -> {
+            CrowdTestTask task = new CrowdTestTask();
+            BeanUtils.copyProperties(crowdTestTaskPO, task);
+            return new CrowdTaskVO(task);
+        }).collect(Collectors.toList());
+        return hotMoreTestprojects;
+    }
+
+    @Override
+    public List<CrowdTestProjectVO> findMoreHotProjects() {
+       List<CrowdTestProjectPO> list=projectDao.findMoreHotProjects();//已经根据创建时间排序好了。
+       //根据 参加人数倒序排序
+        List<CrowdTestProjectVO> hotMoreTestprojects = projectDao.findMoreHotProjects().stream().map(crowdTestProjectPO -> {
+            CrowdTestProject project = new CrowdTestProject();
+            BeanUtils.copyProperties(crowdTestProjectPO, project);
+            return new CrowdTestProjectVO(project);
+        }).collect(Collectors.toList());
+        return hotMoreTestprojects;
+    }
+
+
+    @Override
     public EnterpriseAuthVO getEnterpriseAuthByUserId(Long userId) {
         EnterpriseAuthentication enterpriseAuthentication = new EnterpriseAuthentication();
         EnterpriseAuthenticationPO enterpriseAuthenticationPO = enterpriseAuthenticationDao.findByUserId(userId);
@@ -163,8 +218,8 @@ public class WebMediatorImpl implements ViewMediator {
             EvaluationAgencyPO agency = agencyDao.findByUserId(rankInfo.getEntityId());
             if (agency != null && !agency.getEvaluationAgencyName().equals(agencyName)) {
                 EvolutionAgencyVO agencyVO = new EvolutionAgencyVO();
-                agencyVO.setName(agency.getEvaluationAgencyName());
-                agencyVO.setLogo(agency.getAgencyPhoto());
+                agencyVO.setEvaluationAgencyName(agency.getEvaluationAgencyName());
+                agencyVO.setAgencyPhoto(agency.getAgencyPhoto());
                 agencyVO.setTaskCount(rankInfo.getCount());
                 agencyVO.setId(agency.getId());
                 agencyVO.setUserId(agency.getUserId());
@@ -300,8 +355,8 @@ public class WebMediatorImpl implements ViewMediator {
             EvaluationAgencyPO agency = agencyDao.findByUserId(rankInfo.getEntityId());
             if (agency != null) {
                 EvolutionAgencyVO agencyVO = new EvolutionAgencyVO();
-                agencyVO.setName(agency.getEvaluationAgencyName());
-                agencyVO.setLogo(agency.getAgencyPhoto());
+                agencyVO.setEvaluationAgencyName(agency.getEvaluationAgencyName());
+                agencyVO.setAgencyPhoto(agency.getAgencyPhoto());
                 agencyVO.setAllTaskPrice(rankInfo.getTotalPrice());
                 return agencyVO;
             }
@@ -434,6 +489,12 @@ public class WebMediatorImpl implements ViewMediator {
         List<CrowdTaskVO> taskVOList = taskDao.findAllByIsDeleted(0).stream().map(crowdTestTaskPO -> {
             CrowdTestTask task = CrowdTestProjectFactory.defaultTask();
             BeanUtils.copyProperties(crowdTestTaskPO, task);
+            // 测试类型的转换
+            Optional<TestTypePO> testTypePO = testTypeDao.findByCode(task.getType());
+            if (!testTypePO.isPresent()) {
+                throw new HttpBadRequestException("请选择测试类型");
+            }
+            task.setType(testTypePO.get().getName());
             return task;
         }).collect(Collectors.toList()).stream().filter(crowdTestTask -> crowdTestTask.getStatus() == CrowdTestTaskStatus.HAS_RELEASED ||
                 (crowdTestTask.getStatus() == CrowdTestTaskStatus.HAS_RECEIVED && crowdTestTask.getFullStatus() == CrowdTestTaskAcceptStatus.NOT_FULL))
@@ -468,6 +529,10 @@ public class WebMediatorImpl implements ViewMediator {
                 EvaluationAgencyPO agencyPO = agencyDao.findByUserId(crowdTestTask.getEvaluationAgencyId());
                 crowdTaskVO.setInstitution(agencyPO == null ? "该机构已注销" : agencyPO.getEvaluationAgencyName());
             }
+
+            // 测试类型的转换
+            Optional<TestTypePO> testTypePO = testTypeDao.findByCode(crowdTaskVO.getServiceType());
+            crowdTaskVO.setServiceType(testTypePO.get().getName());
             taskVOList.add(crowdTaskVO);
         }
 
@@ -486,6 +551,34 @@ public class WebMediatorImpl implements ViewMediator {
                 .stream().filter(task -> task.getStatus() == CrowdTestTaskStatus.HAS_FINISHED).count()));
         progress.add(new PieChartDataVO("进行中", crowdTestTaskList
                 .stream().filter(task -> task.getStatus() > CrowdTestTaskStatus.HAS_CREATED && task.getStatus() < CrowdTestTaskStatus.HAS_FINISHED).count()));
+
+        // 应用类型值的转换
+        Optional<ApplicationTypePO> applicationTypePO = applicationTypeDao.findByCode(projectVO.getPlatform());
+        if(applicationTypePO.isPresent()){
+            projectVO.setPlatform(applicationTypePO.get().getName());
+        }else{
+            throw new HttpBadRequestException("请选择应用类型");
+        }
+
+        // 领域类型值的转换
+        Optional<FieldPO> fieldPO = fieldDao.findByCode(projectVO.getField());
+        if(fieldPO.isPresent()){
+            projectVO.setField(fieldPO.get().getName());
+        }else{
+            throw new HttpBadRequestException("请选择领域类型");
+        }
+
+        // 测试类型的转换
+        List<String> testStringList = projectVO.getType().stream().map(testType -> {
+            Optional<TestTypePO> testTypePO = testTypeDao.findByCode(testType);
+            if (testTypePO.isPresent()) {
+                return testTypePO.get().getName();
+            } else {
+                throw new HttpBadRequestException("请选择测试类型");
+            }
+        }).collect(Collectors.toList());
+        projectVO.setType(testStringList);
+
         projectDetailsDTO.setProjectDetails(projectVO);
         projectDetailsDTO.setTaskList(taskVOList);
         projectDetailsDTO.setReportList(reportVOList);
@@ -566,6 +659,13 @@ public class WebMediatorImpl implements ViewMediator {
         }
 
         CrowdTaskVO taskVO = new CrowdTaskVO(task.get());
+        // 测试类型的转换
+        Optional<TestTypePO> testTypePO = testTypeDao.findByCode(taskVO.getServiceType());
+        if (!testTypePO.isPresent()) {
+            throw new HttpBadRequestException("请选择测试类型");
+        }
+        taskVO.setServiceType(testTypePO.get().getName());
+
         System.out.println("renderTaskDetails userId:" + userId);
         if (userId == null) {
             taskDetailsDTO.setTaskOperationControl(this.initTaskPermission(project, task.get(), null));
@@ -663,10 +763,10 @@ public class WebMediatorImpl implements ViewMediator {
         agencyDao.findAll().forEach(evaluationAgencyPO -> {
             EvolutionAgencyVO agencyVO = new EvolutionAgencyVO();
             agencyVO.setId(evaluationAgencyPO.getUserId());
-            agencyVO.setName(evaluationAgencyPO.getEvaluationAgencyName());
+            agencyVO.setEvaluationAgencyName(evaluationAgencyPO.getEvaluationAgencyName());
             agencyList.add(agencyVO);
         });
-        return agencyList.stream().filter(agency -> !agency.getName().equals(agencyTemplate.getEvaluationAgencyName())).collect(Collectors.toList());
+        return agencyList.stream().filter(agency -> !agency.getEvaluationAgencyName().equals(agencyTemplate.getEvaluationAgencyName())).collect(Collectors.toList());
     }
 
     @Override
@@ -782,7 +882,6 @@ public class WebMediatorImpl implements ViewMediator {
             userVO.setProvince(userPO.get().getProvince());
             userVO.setCity(userPO.get().getCity());
             userVO.setCounty(userPO.get().getCounty());
-            userVO.setDetailedAddress(userPO.get().getDetailedAddress());
             userVO.setPersonalCompetence(userPO.get().getPersonalCompetence());
             userDTO.setUserVO(userVO);
             return userDTO;
@@ -793,13 +892,15 @@ public class WebMediatorImpl implements ViewMediator {
     @Override
     public UserDTO updateInformation(long userId, UserVO userVO) {
         Optional<UserPO> userPO = userDao.findById(userId);
+        if(userVO.getUnit()==null||userVO.getUnit().length()<=0){
+            throw new HttpBadRequestException("请输入企业简称");
+        }
         userPO.get().setUnit(userVO.getUnit());
         userPO.get().setGender(userVO.getGender());
         userPO.get().setBirthday(userVO.getBirthday());
         userPO.get().setProvince(userVO.getProvince());
         userPO.get().setCity(userVO.getCity());
         userPO.get().setCounty(userVO.getCounty());
-        userPO.get().setDetailedAddress(userVO.getDetailedAddress());
         userPO.get().setPersonalCompetence(userVO.getPersonalCompetence());
         userDao.save(userPO.get());
         return this.getInformation(userId);
@@ -884,6 +985,10 @@ public class WebMediatorImpl implements ViewMediator {
         RestTemplate restTemplate = new RestTemplate();
         String result = restTemplate.getForObject(url, String.class);
         JSONObject json = new JSONObject(result);
+        String validated = String.valueOf(json.get("validated"));
+        if("false".equals(validated)){
+            throw new HttpBadRequestException("请输入正确的卡号");
+        }
         String bank = String.valueOf(json.get("bank"));
         bankCardPO.setUser(bankCardVO.getUser());
         bankCardPO.setNumber(bankCardVO.getNumber());
@@ -909,6 +1014,80 @@ public class WebMediatorImpl implements ViewMediator {
         return technicalArticlesDTO;
     }
 
+    @Override
+    public List<ResourceVO> getResource() {
+        List<ResourceVO> resourceVOList = new ArrayList<>();
+        resourceDao.findAll().forEach(resourcePO -> {
+            ResourceVO resourceVO = new ResourceVO();
+            resourceVO.setCode(resourcePO.getCode());
+            resourceVO.setName(resourcePO.getName());
+            Optional<ResourceTypePO> type = resourceTypeDao.findByCode(resourcePO.getType());
+            resourceVO.setType(type.get().getName());
+            resourceVO.setQuantity(resourcePO.getQuantity());
+            resourceVO.setPhotoUrl(resourcePO.getPhotoUrl());
+            resourceVO.setDescription(resourcePO.getDescription());
+            resourceVO.setScene(resourcePO.getScene());
+            resourceVO.setUnitWork(resourcePO.getUnitWork());
+            resourceVO.setStandard(resourcePO.getStandard());
+            resourceVO.setUnit(resourcePO.getUnit());
+            resourceVO.setState(resourcePO.getState());
+            resourceVO.setStartTime(resourcePO.getStartTime());
+            resourceVO.setPersonnel(resourcePO.getPersonnel());
+            resourceVO.setRemarks(resourcePO.getRemarks());
+            resourceVOList.add(resourceVO);
+        });
+        List<ResourceVO> results=resourceVOList.stream().sorted(Comparator.comparing(ResourceVO::getStartTime).reversed()).collect(Collectors.toList());
+        return results;
+    }
+
+    @Override
+    public ResourceVO getResourceDetailed(String code) {
+        Optional<ResourcePO> resourcePO=resourceDao.findByCode(code);
+        ResourceVO resourceVO = new ResourceVO();
+        resourceVO.setCode(resourcePO.get().getCode());
+        resourceVO.setName(resourcePO.get().getName());
+        Optional<ResourceTypePO> type = resourceTypeDao.findByCode(resourcePO.get().getType());
+        resourceVO.setType(type.get().getName());
+        resourceVO.setQuantity(resourcePO.get().getQuantity());
+        resourceVO.setPhotoUrl(resourcePO.get().getPhotoUrl());
+        resourceVO.setDescription(resourcePO.get().getDescription());
+        resourceVO.setScene(resourcePO.get().getScene());
+        resourceVO.setUnitWork(resourcePO.get().getUnitWork());
+        resourceVO.setStandard(resourcePO.get().getStandard());
+        resourceVO.setUnit(resourcePO.get().getUnit());
+        resourceVO.setState(resourcePO.get().getState());
+        resourceVO.setStartTime(resourcePO.get().getStartTime());
+        resourceVO.setPersonnel(resourcePO.get().getPersonnel());
+        resourceVO.setRemarks(resourcePO.get().getRemarks());
+        return resourceVO;
+    }
+
+    @Override
+    public List<ResourceVO> getSearchResource(String name) {
+        List<ResourceVO> resourceVOList = new ArrayList<>();
+        resourceDao.findByNameLike("%" + name + "%").forEach(resourcePO -> {
+            ResourceVO resourceVO = new ResourceVO();
+            resourceVO.setCode(resourcePO.getCode());
+            resourceVO.setName(resourcePO.getName());
+            Optional<ResourceTypePO> type = resourceTypeDao.findByCode(resourcePO.getType());
+            resourceVO.setType(type.get().getName());
+            resourceVO.setQuantity(resourcePO.getQuantity());
+            resourceVO.setPhotoUrl(resourcePO.getPhotoUrl());
+            resourceVO.setDescription(resourcePO.getDescription());
+            resourceVO.setScene(resourcePO.getScene());
+            resourceVO.setUnitWork(resourcePO.getUnitWork());
+            resourceVO.setStandard(resourcePO.getStandard());
+            resourceVO.setUnit(resourcePO.getUnit());
+            resourceVO.setState(resourcePO.getState());
+            resourceVO.setStartTime(resourcePO.getStartTime());
+            resourceVO.setPersonnel(resourcePO.getPersonnel());
+            resourceVO.setRemarks(resourcePO.getRemarks());
+            resourceVOList.add(resourceVO);
+        });
+        List<ResourceVO> results=resourceVOList.stream().sorted(Comparator.comparing(ResourceVO::getStartTime).reversed()).collect(Collectors.toList());
+        return results;
+    }
+
     private ProjectOperationControl initProjectPermission(CrowdTestProject project, User user) {
         ProjectOperationControl operationControl = new ProjectOperationControl();
         if (user == null)

+ 5 - 0
site/src/main/java/com/mooctest/crowd/site/service/AgencyService.java

@@ -15,6 +15,11 @@ import java.util.List;
  * @date 2019-08-12 01:18
  */
 public interface AgencyService {
+
+    EvolutionAgencyVO   getDetailById(long agencyId);
+
+    List<EvolutionAgencyVO> findMoreAgencyVO();
+
     UserDTO applyAgency(Long userId, ApplyAgencyAuthCommand command);
 
     UserDTO generateAgency(GenerateAgencyCommand command);

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

@@ -4,16 +4,21 @@ import com.mooctest.crowd.site.data.dto.IndexDTO;
 import com.mooctest.crowd.site.data.dto.IndexInfoDTO;
 import com.mooctest.crowd.site.data.dto.IndexPageDTO;
 import com.mooctest.crowd.site.data.dto.MyCrowdDTO;
-import com.mooctest.crowd.site.data.vo.CrowdProjectVO;
-import com.mooctest.crowd.site.data.vo.CrowdTaskVO;
+import com.mooctest.crowd.site.data.response.ResponseVO;
+import com.mooctest.crowd.site.data.vo.*;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
 import org.springframework.stereotype.Service;
+import java.util.List;
 
 import java.util.Map;
 
 @Service
 public interface CommonService {
+
+
+    List<UserVO> getMoreUser(Pageable pageable);
+
     IndexDTO getIndexInfo();
 
     MyCrowdDTO getPersonCrowd(Long userId);
@@ -25,4 +30,17 @@ public interface CommonService {
     Page<CrowdProjectVO> getProjectInfo(Pageable pageable, String keyword, int deletedStatus);
 
     Page<CrowdTaskVO> getTaskinfo(Pageable pageable, String keyword, int deletedStatus);
+
+    Page<ApplicationTypeVO> getHotTesting(Pageable pageable,String keyword);
+
+    Page<CompetitionVO> getCompetition(Pageable pageable,String keyword);
+
+    Page<CrowdProjectVO> getProjectList(Pageable pageable,String code);
+
+    List<ResourceVO>  getResource();
+
+    ResourceVO getResourceDetailed(String code);
+
+    ResponseVO findByNameLike(SearchConditionVO searchConditionVO);
+
 }

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

@@ -17,6 +17,9 @@ import java.util.List;
  * @date 2019-07-29 10:49
  */
 public interface CrowdProjectService {
+
+    List<CrowdTestProjectVO>  findAllMoreHotProjects();
+
     List<CrowdTestProjectVO> findByNameLike(String name);
 
     List<CrowdTestProjectVO> findAll(Pageable pageable);
@@ -50,4 +53,6 @@ public interface CrowdProjectService {
     boolean modifyData(String projectCode);
 
     boolean modifyAllData();
+
+    List<CrowdTestProject> getByProject();
 }

+ 1 - 0
site/src/main/java/com/mooctest/crowd/site/service/CrowdTaskService.java

@@ -16,6 +16,7 @@ import java.util.List;
  * @date 2019-07-29 18:47
  */
 public interface CrowdTaskService {
+    List<CrowdTaskVO> findMoreHotTasks();
 
      List<CrowdTaskVO> findAll();
 

+ 10 - 0
site/src/main/java/com/mooctest/crowd/site/service/CrowdTestSquareService.java

@@ -0,0 +1,10 @@
+package com.mooctest.crowd.site.service;
+
+import com.mooctest.crowd.site.data.response.ResponseVO;
+import com.mooctest.crowd.site.data.vo.SearchConditionVO;
+
+public interface CrowdTestSquareService {
+
+    ResponseVO  findByNameLike(SearchConditionVO searchConditionVO);
+
+}

+ 18 - 0
site/src/main/java/com/mooctest/crowd/site/service/EnumsService.java

@@ -0,0 +1,18 @@
+package com.mooctest.crowd.site.service;
+
+import com.mooctest.crowd.site.data.vo.ApplicationTypeVO;
+import com.mooctest.crowd.site.data.vo.FieldVO;
+import com.mooctest.crowd.site.data.vo.TestTypeVO;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+public interface EnumsService {
+
+    List<FieldVO> getAllField();
+
+    List<ApplicationTypeVO> getAllApplicationType();
+
+    List<TestTypeVO> getAllType();
+}

+ 16 - 0
site/src/main/java/com/mooctest/crowd/site/service/ResidentAgencyService.java

@@ -0,0 +1,16 @@
+package com.mooctest.crowd.site.service;
+
+
+import com.mooctest.crowd.domain.model.ResidentAgencyPO;
+import com.mooctest.crowd.site.data.vo.ResidentAgencyVO;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+
+import java.awt.*;
+
+public interface ResidentAgencyService {
+
+    Page<ResidentAgencyVO> findAll(Pageable pageable);
+
+
+}

+ 1 - 0
site/src/main/java/com/mooctest/crowd/site/service/UploadService.java

@@ -2,6 +2,7 @@ package com.mooctest.crowd.site.service;
 
 import org.springframework.web.multipart.MultipartFile;
 
+import java.awt.*;
 import java.io.IOException;
 
 /**

Dosya farkı çok büyük olduğundan ihmal edildi
+ 0 - 0
site/src/main/java/com/mooctest/crowd/site/service/UserService.java


+ 68 - 4
site/src/main/java/com/mooctest/crowd/site/service/impl/AgencyServiceImpl.java

@@ -1,9 +1,17 @@
 package com.mooctest.crowd.site.service.impl;
 
+import com.mooctest.crowd.domain.dao.EvaluationAgencyDao;
+import com.mooctest.crowd.domain.dao.TaskToUserDao;
+import com.mooctest.crowd.domain.dao.UserDao;
 import com.mooctest.crowd.domain.domainobject.*;
 import com.mooctest.crowd.domain.exception.BaseException;
 import com.mooctest.crowd.domain.exception.EvaluationAgencyNotExistException;
 import com.mooctest.crowd.domain.exception.UserNotExistException;
+
+import com.mooctest.crowd.domain.model.EvaluationAgencyPO;
+import com.mooctest.crowd.domain.model.RankCountInfo;
+import com.mooctest.crowd.domain.model.RankInfo;
+import com.mooctest.crowd.domain.model.UserPO;
 import com.mooctest.crowd.domain.repository.EvaluationAgencyRepo;
 import com.mooctest.crowd.domain.repository.UserRepo;
 import com.mooctest.crowd.site.anticorruption.UserAntiCorruption;
@@ -15,11 +23,17 @@ import com.mooctest.crowd.site.data.vo.UserVO;
 import com.mooctest.crowd.site.mediator.ViewMediator;
 import com.mooctest.crowd.site.service.AgencyService;
 import lombok.extern.slf4j.Slf4j;
+
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.data.domain.Pageable;
 import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
+import java.util.Comparator;
 import java.util.List;
+import java.util.Optional;
 import java.util.stream.Collectors;
 
 /**
@@ -31,9 +45,11 @@ import java.util.stream.Collectors;
 @Service
 public class AgencyServiceImpl implements AgencyService {
 
+
     @Autowired
     private UserAntiCorruption userAnti;
-
+    @Autowired
+    private UserDao userDao;
     @Autowired
     private UserRepo userRepo;
 
@@ -42,6 +58,54 @@ public class AgencyServiceImpl implements AgencyService {
 
     @Autowired
     private EvaluationAgencyRepo evaluationAgencyRepo;
+    @Autowired
+    private TaskToUserDao taskToUserDao;
+    @Autowired
+    private EvaluationAgencyDao agencyDao;
+
+    @Override
+    public EvolutionAgencyVO getDetailById(long agencyId) {
+        /*
+        先根据机构id查询出机构信息,再从task-to-user表里面找到这个机构的接的任务的数量。
+         */
+        EvaluationAgencyPO agencyPO = agencyDao.findByUserId(agencyId);
+        log.info("机构popopopo===========" + agencyPO);
+        EvolutionAgencyVO agencyVO = new EvolutionAgencyVO();
+        List<RankCountInfo> rankCountInfoList = taskToUserDao.findTotalCountOfUser();
+        long ids[] = new long[rankCountInfoList.size()];
+        for (int i = 0; i < ids.length; i++) {
+            ids[i] = rankCountInfoList.get(i).getEntityId();
+            if (ids[i] == agencyId) {
+                agencyVO.setTaskCount(rankCountInfoList.get(i).getCount());
+            }
+        }
+        BeanUtils.copyProperties(agencyPO, agencyVO);
+
+        return agencyVO;
+    }
+
+    @Override
+    public List<EvolutionAgencyVO> findMoreAgencyVO() {
+        List<EvolutionAgencyVO> list = new ArrayList<EvolutionAgencyVO>();//机构列表
+        List<RankCountInfo> rankInfos = taskToUserDao.findTotalCountOfUser();//用户接包信息
+        long[] ids = new long[rankInfos.size()];//用户id数组ru
+        for (int i = 0; i < rankInfos.size(); i++) {
+            ids[i] = rankInfos.get(i).getEntityId();
+            Optional<UserPO> user = userDao.findById(ids[i]);
+            EvaluationAgencyPO evaluationAgencyPO = agencyDao.findByUserId(ids[i]);
+            ids[i] = rankInfos.get(i).getEntityId();
+            //
+            if (evaluationAgencyPO != null) {
+                EvaluationAgency evaluationAgency = new EvaluationAgency(evaluationAgencyPO);
+                EvolutionAgencyVO evolutionAgencyVO = new EvolutionAgencyVO(evaluationAgency);
+                evolutionAgencyVO.setTaskCount(rankInfos.get(i).getCount());
+                evolutionAgencyVO.setAddress(user.get().getProvince() + user.get().getCity());
+                list.add(evolutionAgencyVO);
+            }
+        }
+        return list.stream().sorted(Comparator.comparing(EvolutionAgencyVO::getTaskCount).reversed()).collect(Collectors.toList());
+    }
+
 
     @Override
     public UserDTO applyAgency(Long userId, ApplyAgencyAuthCommand command) {
@@ -57,12 +121,12 @@ public class AgencyServiceImpl implements AgencyService {
         try {
             userRepo.getByMobileNum(command.getMobile());
             mobileExists = true;
-        }catch (UserNotExistException u){
+        } catch (UserNotExistException u) {
             log.info("电话号码不存在,可以生成新用户");
         }
         if (mobileExists)
             throw new BaseException("手机号码已经存在,请直接登录");
-        User user = userAnti.register(command.getEvaluationAgencyName(),command.getEmail(), command.getMobile(), command.getMobile());
+        User user = userAnti.register(command.getEvaluationAgencyName(), command.getEmail(), command.getMobile(), command.getMobile());
         EvaluationAgency agency = command.toAgency();
         List<Role> roles = new ArrayList<>();
         roles.add(userRepo.getRole("evaluationAgency"));
@@ -83,7 +147,7 @@ public class AgencyServiceImpl implements AgencyService {
     @Override
     public UserDTO updateAgencyStatus(Long userId, Integer status) {
         User user = userRepo.getByID(userId);
-        if (user.getEvaluationAgency()==null)
+        if (user.getEvaluationAgency() == null)
             throw new BaseException("该用户未申请认证机构");
         user.getEvaluationAgency().setIsAuthentication(status);
         return mediator.renderUser(userRepo.saveUser(user));

+ 68 - 4
site/src/main/java/com/mooctest/crowd/site/service/impl/CommonServiceImpl.java

@@ -1,23 +1,31 @@
 package com.mooctest.crowd.site.service.impl;
 
-import com.mooctest.crowd.domain.repository.CommonRepo;
-import com.mooctest.crowd.domain.repository.CrowdTestProjectRepo;
-import com.mooctest.crowd.domain.repository.CrowdTestTaskRepo;
-import com.mooctest.crowd.domain.repository.EvaluationAgencyRepo;
+import com.mooctest.crowd.domain.repository.*;
+import com.mooctest.crowd.site.constants.CommonConstant;
+import com.mooctest.crowd.site.data.ColumnFilter;
 import com.mooctest.crowd.site.data.dto.IndexDTO;
 import com.mooctest.crowd.site.data.dto.IndexInfoDTO;
 import com.mooctest.crowd.site.data.dto.IndexPageDTO;
 import com.mooctest.crowd.site.data.dto.MyCrowdDTO;
+import com.mooctest.crowd.site.data.enums.ColumnFilterType;
+import com.mooctest.crowd.site.data.response.ResponseVO;
+import com.mooctest.crowd.site.data.response.ServerCode;
 import com.mooctest.crowd.site.data.vo.*;
 import com.mooctest.crowd.site.mediator.ViewMediator;
 import com.mooctest.crowd.site.service.CommonService;
+import com.mooctest.crowd.site.util.DataUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.cache.annotation.Cacheable;
 import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageRequest;
 import org.springframework.data.domain.Pageable;
+import org.springframework.data.domain.Sort;
 import org.springframework.stereotype.Service;
 
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 @Service
@@ -38,10 +46,19 @@ public class CommonServiceImpl implements CommonService {
     @Autowired
     private CommonRepo commonRepo;
 
+    @Autowired
+    private ApplicationTypeRepo applicationTypeRepo;
+
 //    @Autowired
 //    private CacheUtil cacheUtil;
 
     @Override
+    public List<UserVO> getMoreUser(Pageable pageable) {
+
+        return  viewMediator.renderMoreUser(pageable);
+    }
+
+    @Override
     public IndexDTO getIndexInfo() {
         return viewMediator.renderIndex();
     }
@@ -86,4 +103,51 @@ public class CommonServiceImpl implements CommonService {
         return   taskRepo.findAllByPage(pageable,keyword,deletedStatus).map(crowdTestTask -> new CrowdTaskVO(crowdTestTask));
     }
 
+    @Override
+    public Page<ApplicationTypeVO> getHotTesting(Pageable pageable,String keyword) {
+        return applicationTypeRepo.getHotTesting(pageable,keyword).map(applicationType -> new ApplicationTypeVO(applicationType));
+    }
+
+    @Override
+    public Page<CompetitionVO> getCompetition(Pageable pageable,String keyword) {
+        return commonRepo.findAllCompetition(pageable,keyword).map(competition -> new CompetitionVO(competition));
+    }
+
+    @Override
+    public Page<CrowdProjectVO> getProjectList(Pageable pageable, String code) {
+        return commonRepo.getProjectList(pageable,code).map(project->new CrowdProjectVO(project));
+    }
+
+    @Override
+    public List<ResourceVO> getResource() {
+        return viewMediator.getResource();
+    }
+
+    @Override
+    public ResourceVO getResourceDetailed(String code) {
+        return viewMediator.getResourceDetailed(code);
+    }
+
+    @Override
+    public ResponseVO findByNameLike(SearchConditionVO searchConditionVO) {
+        Pageable pageable = this.getPageable(searchConditionVO);
+        String keyword = searchConditionVO.getKeyword();
+        List<ResourceVO> resourceList=viewMediator.getSearchResource(keyword);
+        Page<ResourceVO> resourcePage = DataUtils.listToPage(resourceList, pageable);
+        return new ResponseVO<>(ServerCode.SUCCESS, resourcePage);
+    }
+
+    Pageable getPageable(SearchConditionVO searchConditionVO) {
+        int activePage = searchConditionVO.getActivePage() == 0 ? 1 : searchConditionVO.getActivePage();
+        Sort sort = new Sort(Sort.Direction.DESC, "id");
+        if (searchConditionVO.getColumnFilters() != null) {
+            for (ColumnFilter columnFilter : searchConditionVO.getColumnFilters()) {
+                if (ColumnFilterType.SORT.getName().equals(columnFilter.getType()) && columnFilter.getValue() != null) {
+                    sort = new Sort(Sort.Direction.fromString(columnFilter.getValue()), columnFilter.getField());
+                    break;
+                }
+            }
+        }
+        return new PageRequest(activePage - 1, CommonConstant.SQUARE_ROWS_ON_PAGE, sort);
+    }
 }

+ 116 - 32
site/src/main/java/com/mooctest/crowd/site/service/impl/CrowdProjectServiceImpl.java

@@ -1,7 +1,9 @@
 package com.mooctest.crowd.site.service.impl;
 
-import com.alibaba.fastjson.JSONArray;
-import com.alibaba.fastjson.JSONObject;
+import com.google.common.collect.Lists;
+import com.mooctest.crowd.domain.dao.ApplicationTypeDao;
+import com.mooctest.crowd.domain.dao.FieldDao;
+import com.mooctest.crowd.domain.dao.TestTypeDao;
 import com.mooctest.crowd.domain.domainobject.*;
 import com.mooctest.crowd.domain.exception.BadRequestException;
 import com.mooctest.crowd.domain.exception.BaseException;
@@ -30,6 +32,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.io.IOException;
+import java.sql.Timestamp;
 import java.util.ArrayList;
 import java.util.Comparator;
 import java.util.List;
@@ -59,6 +62,23 @@ public class CrowdProjectServiceImpl implements CrowdProjectService {
     @Autowired
     private OperationMediator operationMediator;
 
+    @Autowired
+    private TestTypeDao testTypeDao;
+
+    @Autowired
+    private ApplicationTypeDao applicationTypeDao;
+
+    @Autowired
+    private FieldDao fieldDao;
+
+
+    @Override
+    public List<CrowdTestProjectVO> findAllMoreHotProjects() {
+        List<CrowdTestProjectVO> list=viewMediator.findMoreHotProjects();//根据创建时间已经倒叙排序好
+        //根据参与人数倒叙排序
+        List<CrowdTestProjectVO>  moreHotProjects=list.stream().sorted(Comparator.comparing(CrowdTestProjectVO::getJoinCount).reversed()).collect(Collectors.toList());
+        return   moreHotProjects;
+    }
 
     @Override
     public List<CrowdTestProjectVO> findByNameLike(String name) {
@@ -106,6 +126,10 @@ public class CrowdProjectServiceImpl implements CrowdProjectService {
         log.info("\n" + project.toString() + "\n");
         String projectCode = GenerateFlowCodeUtil.generateFlowCode("PROJ");
         project.setCode(projectCode);
+
+        if(project.getCreateTime() == null){
+            project.setCreateTime(new Timestamp(System.currentTimeMillis()));
+        }
         ProjectDetailsDTO projectDetailsDTO = new ProjectDetailsDTO();
         projectRepo.saveCrowdTestProject(project);
         projectDetailsDTO.setProjectDetails(new CrowdProjectVO(project));
@@ -120,6 +144,9 @@ public class CrowdProjectServiceImpl implements CrowdProjectService {
         if (!project.getUserId().equals(crowdTestProjectCommand.getUserId()))
             throw new BaseException("UserId不一致, newUserId: " + crowdTestProjectCommand.getUserId() + ", oldUserId: " + project.getUserId());
         //todo 后面需要加入是否有权限进行更新
+        if(project.getCreateTime() == null){
+            project.setCreateTime(new Timestamp(System.currentTimeMillis()));
+        }
         projectRepo.saveCrowdTestProject(operationMediator.updateProject(project, crowdTestProjectCommand));
         return getProjectDetails(projectCode, crowdTestProjectCommand.getUserId());
     }
@@ -165,6 +192,9 @@ public class CrowdProjectServiceImpl implements CrowdProjectService {
     public List<ProjectDetailsDTO> importMultiProjectsByExcel(List<CrowdTestProject> projects) {
         List<ProjectDetailsDTO> dtos = new ArrayList<>();
         projects.forEach(project -> {
+            project.setFieldType(fieldDao.findByName(project.getFieldType()).get().getCode());
+            project.setApplicationType(applicationTypeDao.findByName(project.getApplicationType()).get().getCode());
+            project.setType(testTypeDao.findByName(project.getType()).get().getCode());
             projectRepo.saveCrowdTestProject(project);
             dtos.add(getProjectDetails(project.getCode(), project.getUserId()));
         });
@@ -178,23 +208,62 @@ public class CrowdProjectServiceImpl implements CrowdProjectService {
         projects.forEach(project -> {
             project.setCode(GenerateFlowCodeUtil.generateProjCode());
             project.setUserId(userId);
+            project.setJoinCount(1);
+            project.setRestPrice(0.0);
+            project.setCreateTime(new Timestamp(System.currentTimeMillis() - 1000));
+//            project.setProjectDistributionTypeId(0L);
+//            project.setRegionalManagerId();
             List<CrowdTestTask> tasks = new ArrayList<>();
             CrowdTestTask task = CrowdTestProjectFactory.defaultFinishedCrowdTask();
-            task.setType(((List<String>) JSONArray.parse(project.getType())).get(0));
-            task.setCode(GenerateFlowCodeUtil.generateTaskCode(ProjectType.getCode(task.getType())));
+
+            // 构造任务
+            task.setType(testTypeDao.findByName(project.getType()).get().getCode());
+            task.setCode(GenerateFlowCodeUtil.generateTaskCode(task.getType()));
             task.setCrowdTestProjectCode(project.getCode());
-            task.setEndTime(project.getEndTime());
             task.setDeadTime(project.getDeadTime());
             task.setRequirementFile(project.getRequirementFile());
             task.setName(project.getName() + "-" + task.getType());
             task.setQuotedPrice(project.getQuotedPrice());
             task.setFixedPrice(project.getFixedPrice());
             task.setDescription(project.getDescription());
-            if (user.getEvaluationAgency() == null)
-                task.setEvaluationAgencyId(1L);
-            else
-                task.setEvaluationAgencyId(user.getEvaluationAgency().getId());
+            task.setFixedPrice(project.getFixedPrice());
+            task.setQuotedPrice(project.getQuotedPrice());
+            task.setParticipantCount(1);
+            task.setAcceptedCount(1);
+            task.setParticipantHasCommittedCount(1);
+            task.setCreateTime(project.getCreateTime());
+            task.setEndTime(project.getEndTime());
+//            if (user.getEvaluationAgency() == null)
+//                task.setEvaluationAgencyId(1L);
+//            else
+//                task.setEvaluationAgencyId(user.getEvaluationAgency().getId());
+
+            // 构造taskToUser
+            TaskToUser taskToUser = new TaskToUser();
+            taskToUser.setTaskCode(task.getCode());
+            taskToUser.setUserId(userId);
+            taskToUser.setHasReport(1);
+            taskToUser.setDistributionType(1L);
+            taskToUser.setIsAccepted(1);
+            taskToUser.setAcceptTime(task.getCreateTime());
+            taskToUser.setIsCommitted(1);
+            taskToUser.setCommitTaskTime(task.getDeadTime());
+            taskToUser.setCommitReportTime(task.getDeadTime());
+
+            // 构造任务报告
+            CrowdTestReport crowdTestReport = CrowdTestProjectFactory.defaultTaskReport();
+            crowdTestReport.setCode(GenerateFlowCodeUtil.generateReportCode());
+            crowdTestReport.setUserId(userId);
+            crowdTestReport.setDependencyCode(task.getCode());
+            crowdTestReport.setType("测试报告");
+            crowdTestReport.setName(task.getName() + "测试报告");
+            crowdTestReport.setContent(project.getCrowdTestReportForProject().getContent());
+            crowdTestReport.setConclusion(project.getCrowdTestReportForProject().getConclusion());
+            taskToUser.setCrowdTestReportList(Lists.newArrayList(crowdTestReport));
+            task.setAcceptedUserList(Lists.newArrayList(taskToUser));
             tasks.add(task);
+
+            // 构造项目报告
             project.setCrowdTestTaskList(tasks);
             project.getCrowdTestReportForProject().setCode(GenerateFlowCodeUtil.generateReportCode());
             project.getCrowdTestReportForProject().setDependencyCode(project.getCode());
@@ -288,6 +357,11 @@ public class CrowdProjectServiceImpl implements CrowdProjectService {
         return true;
     }
 
+    @Override
+    public List<CrowdTestProject> getByProject() {
+        return projectRepo.getByProject();
+    }
+
     private List<CrowdTestProject> transferExcel2Projects(MultipartFile file) {
         List<String> logList = new ArrayList<>();
         List<CrowdTestProject> projects = new ArrayList<>();
@@ -313,7 +387,7 @@ public class CrowdProjectServiceImpl implements CrowdProjectService {
         log.info("CellCount: " + cellCount);
         log.info("Rows: " + sheet.getPhysicalNumberOfRows());
         for (int i = 1; i < sheet.getPhysicalNumberOfRows(); i++) {
-            CrowdTestProject project = CrowdTestProjectFactory.defaulstCrowdTestProject();
+            CrowdTestProject project = CrowdTestProjectFactory.defaultCrowdTestProject();
             CrowdTestReport report = CrowdTestProjectFactory.defaultProjectReport();
             Row row = sheet.getRow(i);
             if (row == null) {
@@ -338,49 +412,59 @@ public class CrowdProjectServiceImpl implements CrowdProjectService {
                         project.setName(cell.getStringCellValue().trim());
                         break;
                     case 1:
-                        if (!(cell.getStringCellValue().trim().equals("IOS") || cell.getStringCellValue().trim().equals("WEB") || cell.getStringCellValue().trim().equals("ANDROID"))) {
-                            logList.add("错误 - 行: " + (i + 1) + "; 列: " + (j + 1) + "; 原因: " + "测试平台数据不合法:" + cell.getStringCellValue());
+                        if(fieldDao.findAll().stream().noneMatch(fieldPO -> fieldPO.getName().equals(cell.getStringCellValue().trim()))){
+                            logList.add("错误 - 行: " + (i + 1) + "; 列: " + (j + 1) + "; 原因: " + "领域类型数据不合法:" + cell.getStringCellValue());
                             break;
                         }
-                        List<String> platforms = new ArrayList<>();
-                        platforms.add(cell.getStringCellValue().trim());
-                        project.setPlatform(JSONObject.toJSONString(platforms));
+                        project.setFieldType(cell.getStringCellValue().trim());
+//                        project.setFieldType(fieldDao.findByName(cell.getStringCellValue().trim()).get().getCode());
                         break;
                     case 2:
-                        project.setLinkMan(cell.getStringCellValue().trim());
-                        break;
-                    case 3:
-                        if (!isRightPhone(cell.getStringCellValue().trim())) {
-                            logList.add("错误 - 行: " + (i + 1) + "; 列: " + (j + 1) + "; 原因: " + "不合法的手机号码:" + cell.getStringCellValue());
+                        if(applicationTypeDao.findAll().stream().noneMatch(applicationTypePO -> applicationTypePO.getName().equals(cell.getStringCellValue().trim()))){
+                            logList.add("错误 - 行: " + (i + 1) + "; 列: " + (j + 1) + "; 原因: " + "应用类型数据不合法:" + cell.getStringCellValue());
                             break;
                         }
-                        project.setLinkManMobile(cell.getStringCellValue().trim());
+                        project.setApplicationType(cell.getStringCellValue().trim());
+//                        project.setApplicationType(applicationTypeDao.findByName(cell.getStringCellValue().trim()).get().getCode());
                         break;
-                    case 4:
-                        if (ProjectType.getCode(cell.getStringCellValue().trim()) == null) {
-                            logList.add("错误 - 行: " + (i + 1) + "; 列: " + (j + 1) + "; 原因: " + "错误的测试服务类型:" + cell.getStringCellValue());
+                    case 3:
+                        if(testTypeDao.findAll().stream().noneMatch(testTypePO -> testTypePO.getName().equals(cell.getStringCellValue().trim()))){
+                            logList.add("错误 - 行: " + (i + 1) + "; 列: " + (j + 1) + "; 原因: " + "测试类型数据不合法:" + cell.getStringCellValue());
                             break;
                         }
-                        List<String> types = new ArrayList<>();
-                        types.add(cell.getStringCellValue().trim());
-                        project.setType(JSONObject.toJSONString(types));
+                        project.setType(cell.getStringCellValue().trim());
+//                        project.setType(testTypeDao.findByName(cell.getStringCellValue().trim()).get().getCode());
                         break;
+                    case 4:
+                        project.setEntrustUnit(cell.getStringCellValue().trim());
                     case 5:
-                        project.setDescription(cell.getStringCellValue().trim());
+                        project.setLinkMan(cell.getStringCellValue().trim());
                         break;
                     case 6:
-                        project.setFixedPrice(Double.parseDouble(cell.getStringCellValue().trim()));
+                        if(!cell.getStringCellValue().trim().contains("*")){
+                            if (!isRightPhone(cell.getStringCellValue().trim())) {
+                                logList.add("错误 - 行: " + (i + 1) + "; 列: " + (j + 1) + "; 原因: " + "不合法的手机号码:" + cell.getStringCellValue());
+                                break;
+                            }
+                        }
+                        project.setLinkManMobile(cell.getStringCellValue().trim());
                         break;
                     case 7:
-                        report.setContent(cell.getStringCellValue().trim());
+                        project.setDescription(cell.getStringCellValue().trim());
                         break;
                     case 8:
+                        project.setValuationStandard(cell.getStringCellValue().trim());
+                        break;
+                    case 9:
+                        report.setContent(cell.getStringCellValue().trim());
+                        break;
+                    case 10:
                         report.setConclusion(cell.getStringCellValue().trim());
                         break;
                 }
             }
             project.setCrowdTestReportForProject(report);
-            project.setQuotedPrice(project.getFixedPrice());
+//            project.setQuotedPrice(project.getFixedPrice());
             projects.add(project);
         }
         projects.forEach(project -> {
@@ -394,7 +478,7 @@ public class CrowdProjectServiceImpl implements CrowdProjectService {
     /**
      * 匹配平台类型 0,1,2 任意  ^[0-2](([,][0-2])?([,][0-2])?)$
      */
-    private boolean isPlatform(String str) throws PatternSyntaxException {
+    private boolean isApplicationType(String str) throws PatternSyntaxException {
         String regExp = "^[0-2](([,][0-2])?([,][0-2])?)$";
         Pattern p = Pattern.compile(regExp);
         Matcher m = p.matcher(str);

+ 7 - 0
site/src/main/java/com/mooctest/crowd/site/service/impl/CrowdTaskServiceImpl.java

@@ -57,6 +57,13 @@ public class CrowdTaskServiceImpl implements CrowdTaskService {
     @Autowired
     private EvaluationAgencyDao agencyDao;
 
+    @Override
+    public List<CrowdTaskVO> findMoreHotTasks(){
+        List<CrowdTaskVO> list=viewMediator.findMoreHotTasks();//根据创建时间已经倒叙排序好
+        //根据参与人数倒叙排序
+        List<CrowdTaskVO>  morehotTasks=list.stream().sorted(Comparator.comparing(CrowdTaskVO::getAcceptedCount).reversed()).collect(Collectors.toList());
+        return   morehotTasks;
+    }
 
     @Override
     public List<CrowdTaskVO> findAll() {

+ 94 - 0
site/src/main/java/com/mooctest/crowd/site/service/impl/CrowdTestSquareServiceImpl.java

@@ -0,0 +1,94 @@
+package com.mooctest.crowd.site.service.impl;
+
+import com.mooctest.crowd.site.constants.CommonConstant;
+import com.mooctest.crowd.site.data.ColumnFilter;
+import com.mooctest.crowd.site.data.dto.ProjectAndTaskDTO;
+import com.mooctest.crowd.site.data.enums.ColumnFilterType;
+import com.mooctest.crowd.site.data.response.ResponseVO;
+import com.mooctest.crowd.site.data.response.ServerCode;
+import com.mooctest.crowd.site.data.vo.CrowdTaskVO;
+import com.mooctest.crowd.site.data.vo.CrowdTestProjectVO;
+import com.mooctest.crowd.site.data.vo.SearchConditionVO;
+import com.mooctest.crowd.site.service.CrowdProjectService;
+import com.mooctest.crowd.site.service.CrowdTaskService;
+import com.mooctest.crowd.site.service.CrowdTestSquareService;
+import com.mooctest.crowd.site.util.DataUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.domain.Sort;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author:xx
+ * @date:2020/7/6
+ * @description:众测广场服务
+ */
+
+@Service
+public class CrowdTestSquareServiceImpl implements CrowdTestSquareService {
+    @Autowired
+    private CrowdProjectService crowdProjectService;
+    @Autowired
+    private CrowdTaskService crowdTaskService;
+
+    @Override
+    public ResponseVO findByNameLike(SearchConditionVO searchConditionVO) {
+        Map<String, String> extraCondition = searchConditionVO.getColumnFilters() == null ? new HashMap<>() : this.getExtraCondition(searchConditionVO);
+        Pageable pageable = this.getPageable(searchConditionVO);
+        String keyword = searchConditionVO.getKeyword();
+        ProjectAndTaskDTO projectAndTaskDTO = new ProjectAndTaskDTO();
+        List<CrowdTestProjectVO> list = crowdProjectService.findByNameLike(keyword);
+        List<CrowdTaskVO> taskVOList = crowdTaskService.findByNameLike(keyword);
+        projectAndTaskDTO.setCrowdTaskVOList(taskVOList);
+        projectAndTaskDTO.setProjectVOList(list);
+        List projectAndTaskDTOList = new ArrayList<>();
+        projectAndTaskDTOList.addAll(list);
+        projectAndTaskDTOList.addAll(taskVOList);
+        Page<ProjectAndTaskDTO> projectAndTaskDTOPage = DataUtils.listToPage(projectAndTaskDTOList, pageable);
+        Page<CrowdTestProjectVO> projectVOPage = DataUtils.listToPage(list, pageable);
+        Page<CrowdTaskVO> crowdTaskVOPage = DataUtils.listToPage(taskVOList, pageable);
+        if (searchConditionVO.getColumnFilters().get(0).getType().equals("project")) {
+            return new ResponseVO<>(ServerCode.SUCCESS, projectVOPage);
+        } else if (searchConditionVO.getColumnFilters().get(0).getType().equals("task")) {
+            return new ResponseVO(ServerCode.SUCCESS, crowdTaskVOPage);
+        }
+        return new ResponseVO<>(ServerCode.SUCCESS, projectAndTaskDTOPage);
+    }
+
+
+    Pageable getPageable(SearchConditionVO searchConditionVO) {
+        int activePage = searchConditionVO.getActivePage() == 0 ? 1 : searchConditionVO.getActivePage();
+        Sort sort = new Sort(Sort.Direction.DESC, "id");
+        if (searchConditionVO.getColumnFilters() != null) {
+            for (ColumnFilter columnFilter : searchConditionVO.getColumnFilters()) {
+                if (ColumnFilterType.SORT.getName().equals(columnFilter.getType()) && columnFilter.getValue() != null) {
+                    sort = new Sort(Sort.Direction.fromString(columnFilter.getValue()), columnFilter.getField());
+                    break;
+                }
+            }
+        }
+        return new PageRequest(activePage - 1, CommonConstant.SQUARE_ROWS_ON_PAGE, sort);
+    }
+
+    Map<String, String> getExtraCondition(SearchConditionVO searchConditionVO) {
+        Map<String, String> result = searchConditionVO.getExtraCondition();
+        if (result == null) {
+            result = new HashMap<>();
+        }
+        for (ColumnFilter columnFilter : searchConditionVO.getColumnFilters()) {
+            if (ColumnFilterType.ENUM.getName().equals(columnFilter.getType())
+                    && columnFilter.getValue() != null && !columnFilter.getValue().equals("all")) {
+                result.put(columnFilter.getField(), columnFilter.getValue());
+            }
+        }
+        return result;
+    }
+}
+

+ 47 - 0
site/src/main/java/com/mooctest/crowd/site/service/impl/EnumsServiceImpl.java

@@ -0,0 +1,47 @@
+package com.mooctest.crowd.site.service.impl;
+
+import com.mooctest.crowd.domain.dao.ApplicationTypeDao;
+import com.mooctest.crowd.domain.dao.FieldDao;
+import com.mooctest.crowd.domain.dao.TestTypeDao;
+import com.mooctest.crowd.domain.util.Converter;
+import com.mooctest.crowd.site.data.vo.ApplicationTypeVO;
+import com.mooctest.crowd.site.data.vo.FieldVO;
+import com.mooctest.crowd.site.data.vo.TestTypeVO;
+import com.mooctest.crowd.site.service.EnumsService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * @author guochao
+ * @date 2020-07-09 22:34
+ */
+@Service
+public class EnumsServiceImpl implements EnumsService {
+
+    @Autowired
+    private FieldDao fieldDao;
+
+    @Autowired
+    private ApplicationTypeDao applicationTypeDao;
+
+    @Autowired
+    private TestTypeDao testTypeDao;
+
+    @Override
+    public List<FieldVO> getAllField() {
+        return fieldDao.findAll().stream().map(fieldPO -> Converter.convert(FieldVO.class, fieldPO)).collect(Collectors.toList());
+    }
+
+    @Override
+    public List<ApplicationTypeVO> getAllApplicationType() {
+        return applicationTypeDao.findAll().stream().map(applicationTypePO -> Converter.convert(ApplicationTypeVO.class, applicationTypePO)).collect(Collectors.toList());
+    }
+
+    @Override
+    public List<TestTypeVO> getAllType() {
+        return testTypeDao.findAll().stream().map(testTypePO -> Converter.convert(TestTypeVO.class, testTypePO)).collect(Collectors.toList());
+    }
+}

+ 2 - 0
site/src/main/java/com/mooctest/crowd/site/service/impl/OSSUploadServiceImpl.java

@@ -11,6 +11,8 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.web.multipart.MultipartFile;
 
+import java.awt.*;
+
 /**
  * @author: Diors.Po
  * @Email: 171256175@qq.com

+ 68 - 0
site/src/main/java/com/mooctest/crowd/site/service/impl/ResidentServiceImpl.java

@@ -0,0 +1,68 @@
+package com.mooctest.crowd.site.service.impl;
+
+import com.mooctest.crowd.domain.dao.EvaluationAgencyDao;
+import com.mooctest.crowd.domain.dao.ResidentAgencyDao;
+import com.mooctest.crowd.domain.dao.TaskToUserDao;
+import com.mooctest.crowd.domain.dao.UserDao;
+import com.mooctest.crowd.domain.model.EvaluationAgencyPO;
+import com.mooctest.crowd.domain.model.RankCountInfo;
+import com.mooctest.crowd.domain.model.ResidentAgencyPO;
+import com.mooctest.crowd.domain.model.UserPO;
+import com.mooctest.crowd.site.data.vo.ResidentAgencyVO;
+import com.mooctest.crowd.site.service.ResidentAgencyService;
+import com.mooctest.crowd.site.util.DataUtils;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Optional;
+
+/**
+ * @author:xx
+ * @date:2020/7/8
+ * @description:
+ */
+@Slf4j
+@Service
+public class ResidentServiceImpl implements ResidentAgencyService {
+    @Autowired
+    private TaskToUserDao taskToUserDao;
+    @Autowired
+    private ResidentAgencyDao residentAgencyDao;
+    @Autowired
+    private EvaluationAgencyDao agencyDao;
+    @Autowired
+    private UserDao userDao;
+
+
+    @Override
+    public Page<ResidentAgencyVO> findAll(Pageable pageable) {
+        List<ResidentAgencyVO> list = new ArrayList<>();
+        List<RankCountInfo> totalCountOfUser = taskToUserDao.findTotalCountOfUser();
+        long ids[] = new long[totalCountOfUser.size()];
+        List<ResidentAgencyPO> residentAgencyPOS = residentAgencyDao.findAll();
+        //获取品牌机构的用户id
+        long resagency[] = new long[residentAgencyPOS.size()];
+        for (int i = 0; i < residentAgencyPOS.size(); i++) {
+            ResidentAgencyVO residentAgencyVO = new ResidentAgencyVO();
+            Optional<UserPO> userPO = userDao.findById(residentAgencyPOS.get(i).getUserId());
+            resagency[i] = residentAgencyPOS.get(i).getUserId();
+            EvaluationAgencyPO evaluationAgencyPO = agencyDao.findByUserId(resagency[i]);
+            residentAgencyVO.setName(evaluationAgencyPO.getEvaluationAgencyName());
+            residentAgencyVO.setTaskCount(totalCountOfUser.get(i).getCount());
+            residentAgencyVO.setAddress(evaluationAgencyPO.getAddress());
+            residentAgencyVO.setAgencyId(residentAgencyPOS.get(i).getAgencyId());
+            residentAgencyVO.setId(residentAgencyPOS.get(i).getId());
+            residentAgencyVO.setUserId(residentAgencyPOS.get(i).getUserId());
+            list.add(residentAgencyVO);
+        }
+
+
+        Page<ResidentAgencyVO> page = DataUtils.listToPage(list, pageable);
+        return page;
+    }
+}

Dosya farkı çok büyük olduğundan ihmal edildi
+ 0 - 0
site/src/main/java/com/mooctest/crowd/site/service/impl/UserServiceImpl.java


+ 45 - 0
site/src/main/java/com/mooctest/crowd/site/util/DataUtils.java

@@ -4,6 +4,10 @@ import org.springframework.data.domain.Page;
 import org.springframework.data.domain.PageImpl;
 import org.springframework.data.domain.PageRequest;
 import org.springframework.data.domain.Pageable;
+
+import javax.servlet.http.HttpServletRequest;
+import java.net.InetAddress;
+import java.net.UnknownHostException;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Optional;
@@ -64,7 +68,48 @@ public class DataUtils {
     private static <T> PageImpl<T> getEmptySubList(List<T> list, Pageable pageable) {
         return new PageImpl<>(new ArrayList(), pageable, list.size());
     }
+
+    public static String getClientIp(HttpServletRequest request) {
+        String ipAddress = null;
+        try {
+            ipAddress = request.getHeader("x-forwarded-for");
+            if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
+                ipAddress = request.getHeader("Proxy-Client-IP");
+            }
+            if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
+                ipAddress = request.getHeader("WL-Proxy-Client-IP");
+            }
+            if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
+                ipAddress = request.getRemoteAddr();
+                if (ipAddress.equals("127.0.0.1")) {
+                    // 根据网卡取本机配置的IP
+                    InetAddress inet = null;
+                    try {
+                        inet = InetAddress.getLocalHost();
+                    } catch (UnknownHostException e) {
+                        e.printStackTrace();
+                    }
+                    ipAddress = inet.getHostAddress();
+                }
+            }
+            // 对于通过多个代理的情况,第一个IP为客户端真实IP,多个IP按照','分割
+            if (ipAddress != null && ipAddress.length() > 15) { // "***.***.***.***".length()
+                // = 15
+                if (ipAddress.indexOf(",") > 0) {
+                    ipAddress = ipAddress.substring(0, ipAddress.indexOf(","));
+                }
+            }
+        } catch (Exception e) {
+            ipAddress="";
+        }
+        // ipAddress = this.getRequest().getRemoteAddr();
+
+        return ipAddress;
+    }
 }
 
 
 
+
+
+

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

@@ -60,6 +60,11 @@ cache:
 
 agency: 7
 
+green:
+  manager:
+    id: 99222
+  agency:
+    id: 99231
 ---
 spring:
   profiles: dev
@@ -106,7 +111,8 @@ spring:
     database: 6
 user:
   service:
-    baseUrl: http://127.0.0.1:8081
+#    baseUrl: http://127.0.0.1:8081
+    baseUrl: http://59.42.10.53:8081
 
 website:
   domain: mooctest.net
@@ -185,3 +191,7 @@ user:
     baseUrl: http://user.cofortest.com
 website:
   domain: cofortest.com
+
+green:
+  agency:
+    id: 50565

+ 13 - 3
site/src/test/java/com/mooctest/crowd/site/SiteApplicationTests.java

@@ -1,16 +1,26 @@
 package com.mooctest.crowd.site;
 
+import com.mooctest.crowd.domain.dao.*;
+import com.mooctest.crowd.domain.domainobject.EvaluationAgency;
+import com.mooctest.crowd.domain.model.*;
+import com.mooctest.crowd.site.data.vo.EvolutionAgencyVO;
+import com.mooctest.crowd.site.service.AgencyService;
 import org.junit.Test;
 import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.junit4.SpringRunner;
 
+import java.awt.*;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Optional;
+
 @RunWith(SpringRunner.class)
 @SpringBootTest
 public class SiteApplicationTests {
+@Autowired
+private AgencyService agencyService;
 
-	@Test
-	public void contextLoads() {
-	}
 
 }

Bu fark içinde çok fazla dosya değişikliği olduğu için bazı dosyalar gösterilmiyor