Commit 40e7c30e25ba578b20fc94e19d01e49739909955

Authored by 陶汉栋
1 parent 5a926884
Exists in master

增加负载均衡客户端服务

Showing 35 changed files with 982 additions and 55 deletions   Show diff stats
cloud/RibbonConsume/pom.xml 0 → 100644
... ... @@ -0,0 +1,40 @@
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<project xmlns="http://maven.apache.org/POM/4.0.0"
  3 + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4 + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5 + <parent>
  6 + <artifactId>cloud</artifactId>
  7 + <groupId>com.sincere</groupId>
  8 + <version>1.0.0</version>
  9 + </parent>
  10 + <modelVersion>4.0.0</modelVersion>
  11 +
  12 + <artifactId>RibbonConsume</artifactId>
  13 +
  14 + <properties>
  15 + <ribbon>2.1.3.RELEASE</ribbon>
  16 + </properties>
  17 +
  18 + <dependencies>
  19 +
  20 + <dependency>
  21 + <groupId>org.springframework.cloud</groupId>
  22 + <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
  23 + <version>${ribbon}</version>
  24 + </dependency>
  25 +
  26 + <dependency>
  27 + <groupId>org.springframework.boot</groupId>
  28 + <artifactId>spring-boot-starter-web</artifactId>
  29 + </dependency>
  30 +
  31 + </dependencies>
  32 +
  33 + <build>
  34 +
  35 +
  36 + <finalName>RibbonConsume</finalName>
  37 +
  38 + </build>
  39 +
  40 +</project>
0 41 \ No newline at end of file
... ...
cloud/RibbonConsume/src/main/java/com/sincere/ribbon/RibbonApplication.java 0 → 100644
... ... @@ -0,0 +1,27 @@
  1 +package com.sincere.ribbon;
  2 +
  3 +import org.springframework.boot.SpringApplication;
  4 +import org.springframework.boot.autoconfigure.SpringBootApplication;
  5 +import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
  6 +import org.springframework.cloud.client.loadbalancer.LoadBalanced;
  7 +import org.springframework.context.annotation.Bean;
  8 +import org.springframework.web.client.RestTemplate;
  9 +
  10 +@SpringBootApplication
  11 +@EnableDiscoveryClient
  12 +public class RibbonApplication {
  13 +
  14 +
  15 + @Bean
  16 + @LoadBalanced
  17 + RestTemplate restTemplate(){
  18 + return new RestTemplate();
  19 + }
  20 +
  21 + public static void main(String[] args) {
  22 + SpringApplication.run(RibbonApplication.class,args);
  23 + }
  24 +
  25 +
  26 +
  27 +}
... ...
cloud/RibbonConsume/src/main/java/com/sincere/ribbon/control/FileRibbonControl.java 0 → 100644
... ... @@ -0,0 +1,53 @@
  1 +package com.sincere.ribbon.control;
  2 +
  3 +import org.slf4j.Logger;
  4 +import org.slf4j.LoggerFactory;
  5 +import org.springframework.beans.factory.annotation.Autowired;
  6 +import org.springframework.http.HttpEntity;
  7 +import org.springframework.http.HttpHeaders;
  8 +import org.springframework.http.HttpMethod;
  9 +import org.springframework.http.ResponseEntity;
  10 +import org.springframework.web.bind.annotation.*;
  11 +import org.springframework.web.client.RestTemplate;
  12 +
  13 +import javax.servlet.http.HttpServletRequest;
  14 +import java.util.Enumeration;
  15 +import java.util.HashMap;
  16 +import java.util.Map;
  17 +
  18 +@RestController
  19 +@RequestMapping("/file/*")
  20 +public class FileRibbonControl {
  21 +
  22 + Logger logger = LoggerFactory.getLogger(FileRibbonControl.class);
  23 +
  24 + @Autowired
  25 + RestTemplate restTemplate;
  26 +
  27 + @RequestMapping(value = "deleteFile/{fileName}", method = RequestMethod.GET)
  28 + public boolean deleteFile(@PathVariable String fileName, HttpServletRequest req) {
  29 +
  30 + HttpServletRequest request = req;
  31 + //获取header信息
  32 + HttpHeaders requestHeaders = new HttpHeaders();
  33 +// Enumeration<String> headerNames = request.getHeaderNames();
  34 +// while (headerNames.hasMoreElements()) {
  35 +// String key = (String) headerNames.nextElement();
  36 +// String value = request.getHeader(key);
  37 +// requestHeaders.add(key, value);
  38 +// }
  39 + requestHeaders.add("ossPath","ceshi");
  40 + Map<String, String[]> params = new HashMap<>();
  41 + //获取parameter信息
  42 + if (params == null) {
  43 + params = request.getParameterMap();
  44 + }
  45 +
  46 + HttpEntity<String> requestEntity = new HttpEntity<String>(null, requestHeaders);
  47 + ResponseEntity<String> rss = restTemplate.exchange("http://file-center/file/deleteFile/"+fileName, HttpMethod.DELETE, requestEntity, String.class, params);
  48 + logger.error("删除文件:" + rss.getStatusCodeValue());
  49 + return true;
  50 +
  51 + }
  52 +
  53 +}
... ...
cloud/RibbonConsume/src/main/java/com/sincere/ribbon/control/RibbonConsumeControl.java 0 → 100644
... ... @@ -0,0 +1,60 @@
  1 +package com.sincere.ribbon.control;
  2 +
  3 +import com.sincere.ribbon.model.Login;
  4 +import org.slf4j.Logger;
  5 +import org.slf4j.LoggerFactory;
  6 +import org.springframework.beans.factory.annotation.Autowired;
  7 +import org.springframework.cloud.client.ServiceInstance;
  8 +import org.springframework.cloud.client.discovery.DiscoveryClient;
  9 +import org.springframework.http.HttpEntity;
  10 +import org.springframework.http.HttpHeaders;
  11 +import org.springframework.http.MediaType;
  12 +import org.springframework.util.LinkedMultiValueMap;
  13 +import org.springframework.util.MultiValueMap;
  14 +import org.springframework.web.bind.annotation.*;
  15 +import org.springframework.web.client.RestTemplate;
  16 +
  17 +import java.util.HashMap;
  18 +import java.util.List;
  19 +import java.util.Map;
  20 +
  21 +@RestController
  22 +@RequestMapping(value = "/ribbon/*")
  23 +public class RibbonConsumeControl {
  24 + private static final Logger LOG = LoggerFactory.getLogger(RibbonConsumeControl.class);
  25 +
  26 + @Autowired
  27 + RestTemplate restTemplate;
  28 +
  29 + @Autowired
  30 + private DiscoveryClient discoveryClient;
  31 +
  32 + @RequestMapping(value = "login",method = RequestMethod.GET )
  33 + public String login(@RequestParam("account")String account,@RequestParam("password")String password,@RequestParam("userType")String userType){
  34 + LOG.error("登录中:"+account+password+userType);
  35 + HttpHeaders headers = new HttpHeaders();
  36 +
  37 + Login login = new Login();
  38 + login.setAccount(account);
  39 + login.setPassword(password);
  40 + login.setUserType(userType);
  41 +
  42 + String result = restTemplate.postForEntity("http://authserver/login",login,String.class).getBody();
  43 + LOG.error("登录结果:"+result);
  44 + return result;
  45 +
  46 + }
  47 +
  48 + @GetMapping("serviceurl")
  49 + public Map<String, List<ServiceInstance>> serviceUrl() {
  50 + Map<String, List<ServiceInstance>> msl = new HashMap<>();
  51 + List<String> services = discoveryClient.getServices();
  52 + for (String service : services) {
  53 + List<ServiceInstance> sis = discoveryClient.getInstances(service);
  54 + msl.put(service, sis);
  55 + }
  56 + return msl;
  57 + }
  58 +
  59 +
  60 +}
... ...
cloud/RibbonConsume/src/main/java/com/sincere/ribbon/model/Login.java 0 → 100644
... ... @@ -0,0 +1,44 @@
  1 +package com.sincere.ribbon.model;
  2 +
  3 +public class Login {
  4 +
  5 + private String account;
  6 +
  7 + private String password;
  8 +
  9 + private String userType;
  10 +
  11 + public String getAccount() {
  12 + return account;
  13 + }
  14 +
  15 + public void setAccount(String account) {
  16 + this.account = account;
  17 + }
  18 +
  19 + public String getPassword() {
  20 + return password;
  21 + }
  22 +
  23 + public void setPassword(String password) {
  24 + this.password = password;
  25 + }
  26 +
  27 + public String getUserType() {
  28 + return userType;
  29 + }
  30 +
  31 + public void setUserType(String userType) {
  32 + this.userType = userType;
  33 + }
  34 +
  35 + @Override
  36 + public String toString() {
  37 + return "Login{" +
  38 + "account='" + account + '\'' +
  39 + ", password='" + password + '\'' +
  40 + ", userType='" + userType + '\'' +
  41 + '}';
  42 + }
  43 +}
  44 +
... ...
cloud/RibbonConsume/src/main/resources/application.yml 0 → 100644
cloud/RibbonConsume/src/main/resources/bootstrap.yml 0 → 100644
... ... @@ -0,0 +1,30 @@
  1 +#端口
  2 +server:
  3 + port: 8091 #固定端口
  4 +# port: ${randomServerPort.value[5000,5005]} #随机端口
  5 +
  6 +#服务名称
  7 +spring:
  8 + application:
  9 + name: ribbon-consume
  10 +
  11 +#eureka client配置
  12 +eureka:
  13 + client:
  14 + serviceUrl:
  15 +# defaultZone: http://localhost:8761/eureka/,http://localhost:8762/eureka/
  16 + defaultZone: http://121.40.109.21:8761/eureka/,http://121.40.109.21:8762/eureka/
  17 + #http://134.224.249.33:1111/eureka/ 正式库
  18 + #http://134.224.249.33:1111/eureka/ 测试库
  19 + #http://127.0.0.1:8761/eureka,http://127.0.0.1:8762/eureka
  20 + registry-fetch-interval-seconds: 5
  21 + instance-info-replication-interval-seconds: 10
  22 + instance:
  23 +# prefer-ip-address: true
  24 + instance-id: ${spring.application.name}
  25 +# instance-id: ${spring.application.name}:${spring.cloud.client.ip-address}:${spring.application.instance_id:${server.port}} #固定端口
  26 +# instance-id: ${spring.application.name}:${spring.cloud.client.ip-address}:${spring.application.instance_id:${randomServerPort.value[5000,5005]}} #随机端口
  27 + lease-renewal-interval-in-seconds: 10 #每隔几秒告诉eureka服务器我还存活,用于心跳检测
  28 + lease-expiration-duration-in-seconds: 10 #如果心跳检测一直没有发送,10秒后会从eureka服务器中将此服务剔除
  29 + status-page-url: http://${spring.cloud.client.ip-address}:${server.port}/doc.html # ${server.port}为该服务的端口号
  30 +# status-page-url: http://${spring.cloud.client.ip-address}:${randomServerPort.value[5000,5005]}/document.html # ${server.port}为该服务的端口号
0 31 \ No newline at end of file
... ...
cloud/autho/src/main/java/com/sincere/autho/control/LoginController.java
... ... @@ -21,6 +21,7 @@ public class LoginController {
21 21  
22 22 @RequestMapping(value = "/login" , method = RequestMethod.POST)
23 23 public BaseDto<String> login(@RequestBody LoginReqDto loginReqDto){
  24 + System.out.println("登录接口");
24 25 BaseDto<String> result = new BaseDto<>() ;
25 26 String userId = loginService.login(loginReqDto);
26 27 if(StringUtils.isNotBlank(userId)){
... ...
cloud/autho/src/main/resources/application.yaml
... ... @@ -25,4 +25,5 @@ eureka:
25 25 client:
26 26 service-url:
27 27 defaultZone: http://121.40.109.21:8761/eureka/,http://121.40.109.21:8762/eureka/
  28 +# defaultZone: http://localhost:8761/eureka/,http://localhost:8762/eureka/
28 29  
... ...
cloud/fIle-center/pom.xml
... ... @@ -58,6 +58,17 @@
58 58 </goals>
59 59 </execution>
60 60 </executions>
  61 + <configuration>
  62 + <includeSystemScope>true</includeSystemScope>
  63 + <layout>ZIP</layout>
  64 + <includes>
  65 + <include>
  66 + <!-- 排除所有Jar -->
  67 + <groupId>nothing</groupId>
  68 + <artifactId>nothing</artifactId>
  69 + </include>
  70 + </includes>
  71 + </configuration>
61 72 </plugin>
62 73  
63 74 </plugins>
... ...
cloud/fIle-center/src/main/java/com/sincere/file/control/FileControl.java
... ... @@ -37,6 +37,9 @@ public class FileControl {
37 37 public boolean deleteFile(@PathVariable String fileName,HttpServletRequest request){
38 38 String ossPath = request.getHeader("ossPath");//oss的二级目录
39 39 fileService.delete(fileName,ossPath);
  40 +
  41 + System.out.println("fileName:"+fileName+"----ossPath:"+ossPath);
  42 +
40 43 return true;
41 44 }
42 45 }
... ...
cloud/fIle-center/src/main/resources/bootstrap.yml
... ... @@ -33,11 +33,12 @@ eureka:
33 33 registry-fetch-interval-seconds: 5
34 34 instance-info-replication-interval-seconds: 10
35 35 instance:
36   - prefer-ip-address: true
  36 +# prefer-ip-address: false
37 37 instance-id: ${spring.application.name}
38 38 # instance-id: ${spring.application.name}:${spring.cloud.client.ip-address}:${spring.application.instance_id:${server.port}} #固定端口
39 39 # instance-id: ${spring.application.name}:${spring.cloud.client.ip-address}:${spring.application.instance_id:${randomServerPort.value[5000,5005]}} #随机端口
40 40 lease-renewal-interval-in-seconds: 10 #每隔几秒告诉eureka服务器我还存活,用于心跳检测
41 41 lease-expiration-duration-in-seconds: 10 #如果心跳检测一直没有发送,10秒后会从eureka服务器中将此服务剔除
42   - status-page-url: http://${spring.cloud.client.ip-address}:${server.port}/doc.html # ${server.port}为该服务的端口号
43   -# status-page-url: http://${spring.cloud.client.ip-address}:${randomServerPort.value[5000,5005]}/document.html # ${server.port}为该服务的端口号
44 42 \ No newline at end of file
  43 +# status-page-url: http://${spring.cloud.client.ip-address}:${server.port}/doc.html # ${server.port}为该服务的端口号
  44 + hostname: 121.40.30.78
  45 +# status-page-url: http://${spring.cloud.client.ip-address}:${randomServerPort.value[5000,5005]}/document.html # ${server.port}为该服务的端口号
45 46 \ No newline at end of file
... ...
cloud/getaway/pom.xml
... ... @@ -58,6 +58,17 @@
58 58 </goals>
59 59 </execution>
60 60 </executions>
  61 + <configuration>
  62 + <includeSystemScope>true</includeSystemScope>
  63 + <layout>ZIP</layout>
  64 + <includes>
  65 + <include>
  66 + <!-- 排除所有Jar -->
  67 + <groupId>nothing</groupId>
  68 + <artifactId>nothing</artifactId>
  69 + </include>
  70 + </includes>
  71 + </configuration>
61 72 </plugin>
62 73 </plugins>
63 74 <finalName>${project.artifactId}</finalName>
... ...
cloud/getaway/src/main/java/com/sincere/getaway/client/config/CorsConfig.java
... ... @@ -17,6 +17,7 @@
17 17 //import org.springframework.web.server.ServerWebExchange;
18 18 //import org.springframework.web.server.WebFilter;
19 19 //import org.springframework.web.server.WebFilterChain;
  20 +//
20 21 //import reactor.core.publisher.Mono;
21 22 //
22 23 ///**
... ... @@ -37,7 +38,7 @@
37 38 //
38 39 // @Bean
39 40 // public RouteDefinitionLocator discoveryClientRouteDefinitionLocator(DiscoveryClient discoveryClient,
40   -// DiscoveryLocatorProperties properties) {
  41 +// DiscoveryLocatorProperties properties) {
41 42 // return new DiscoveryClientRouteDefinitionLocator(discoveryClient, properties);
42 43 // }
43 44 //
... ...
cloud/getaway/src/main/resources/application.yml
... ... @@ -43,12 +43,19 @@ spring:
43 43 - StripPrefix=1
44 44 - id: authserver
45 45 uri: http://121.40.30.78:9005
  46 +# uri: lb://authserver
46 47 predicates:
47 48 - Path=/authserver/**
48 49 filters:
49 50 - StripPrefix=1
50   - default-filters:
51   - - DedupeResponseHeader=Access-Control-Allow-Origin, RETAIN_UNIQUE
  51 + - id: NewSmartCampus
  52 + uri: http://114.55.30.100:1111
  53 + predicates:
  54 + - Path=/NewSmartCampus/**
  55 + filters:
  56 + - StripPrefix=1
  57 +# default-filters:
  58 +# - DedupeResponseHeader=Access-Control-Allow-Origin, RETAIN_UNIQUE
52 59 # discovery:
53 60 # locator:
54 61 # lowerCaseServiceId: true
... ... @@ -70,4 +77,4 @@ ribbon:
70 77  
71 78  
72 79 url:
73   - ignored: /SmartCampusWebApi/**,/authserver/**
74 80 \ No newline at end of file
  81 + ignored: /SmartCampusWebApi/**,/authserver/**,/NewSmartCampus/**
75 82 \ No newline at end of file
... ...
cloud/haikangface/pom.xml
... ... @@ -97,11 +97,11 @@
97 97 <scope>compile</scope>
98 98 </dependency>
99 99  
100   - <!--<dependency>-->
101   - <!--<groupId>com.baidu.aip</groupId>-->
102   - <!--<artifactId>java-sdk</artifactId>-->
103   - <!--<version>4.10.0</version>-->
104   - <!--</dependency>-->
  100 + <dependency>
  101 + <groupId>com.baidu.aip</groupId>
  102 + <artifactId>java-sdk</artifactId>
  103 + <version>4.10.0</version>
  104 + </dependency>
105 105 <dependency>
106 106 <groupId>com.sun.image.jce</groupId>
107 107 <artifactId>jce</artifactId>
... ...
cloud/haikangface/src/main/java/com/sincere/haikangface/CMSServer.java
... ... @@ -326,7 +326,7 @@ public class CMSServer implements ApplicationRunner {
326 326 pFilePath.write(0, strFilePath.getBytes(), 0, strFilePath.getBytes().length);
327 327  
328 328 if (isZhuaPai) {
329   - MqtUtils.getInstance().sendMsg("http://campus.myjxt.com//face17e5/School16/Student/" + pFileName);
  329 +// MqtUtils.getInstance().sendMsg("http://campus.myjxt.com//face17e5/School16/Student/" + pFileName);
330 330 }
331 331  
332 332 return true;
... ... @@ -509,7 +509,7 @@ public class CMSServer implements ApplicationRunner {
509 509 int err = hCEhomeSS.NET_ESS_GetLastError();
510 510 System.out.println("NET_ESS_ClientDoUpload失败,错误号:" + err);
511 511 } else {
512   - url = "http://" + ip + ":" + 8081 + new String(szUrl).trim();
  512 + url = "http://120.26.116.253:" + 8081 + new String(szUrl).trim();
513 513 // System.err.println("NET_ESS_ClientDoUpload成功!:" + url);
514 514 }
515 515 hCEhomeSS.NET_ESS_DestroyClient(client);//释放资源
... ...
cloud/haikangface/src/main/java/com/sincere/haikangface/admindao/ZuoyeAdminDao.java
... ... @@ -11,13 +11,13 @@ import java.util.List;
11 11 public interface ZuoyeAdminDao {
12 12  
13 13  
14   - @Select("select Id from ZY_YYChapter where Name like #{chapter}")
  14 + @Select("select Top(1) Id from ZY_YYChapter where Name like #{chapter}")
15 15 String getChapterId(@Param("chapter") String chapter);
16 16  
17   - @Select("select Id from ZY_YYKnowledge where name like #{knowledge}")
  17 + @Select("select Top(1) Id from ZY_YYKnowledge where name like #{knowledge}")
18 18 String getKnowledgeId(@Param("knowledge") String knowledge);
19 19  
20   - @Select("select Id from ZY_YYGrade where name like #{gradeId}")
  20 + @Select("select Top(1) Id from ZY_YYGrade where name like #{gradeId}")
21 21 String getGradeId(@Param("gradeId") String gradeId);
22 22  
23 23 @Insert("insert into ZY_YYQuestion (Question, Qtype, Answer, CorrectAnswer, Analysis, State, Intime, StemId, ExamineFlag, SubjectId, SuggestionTime, DifficulteId, ChapterId, GradeId, SourceId, QuestionSource, AutomaticCorrection)" +
... ...
cloud/haikangface/src/main/java/com/sincere/haikangface/async/SendUserAsync.java
... ... @@ -39,7 +39,7 @@ public class SendUserAsync {
39 39  
40 40 // @Async("taskExecutor")
41 41 public void sendStuToHaiKang(String srcFile, String picUrl, String card, String startTime, String endTime, int validTimeEnabled, String name, String deviceId, String userType, int isPiliang) {
42   - System.out.println("下发时间设置:"+validTimeEnabled);
  42 +// System.out.println("下发时间设置:"+validTimeEnabled);
43 43 if (null == sendRecoderUtils) sendRecoderUtils = new SendRecoderUtils();
44 44 //1、检测图片是否合格
45 45 boolean check = true;
... ... @@ -68,7 +68,6 @@ public class SendUserAsync {
68 68  
69 69 }
70 70  
71   -
72 71 /**
73 72 * 调用传图片接口
74 73 * @param filePath
... ... @@ -80,13 +79,12 @@ public class SendUserAsync {
80 79 * @param validTimeEnabled
81 80 * @param userType
82 81 */
83   - @Async("taskExecutor")
  82 +// @Async("taskExecutor")
84 83 public void uploadImgs(String filePath,String card,String name,String deviceId,String startTime,String endTime,int validTimeEnabled,String userType){
85   -
86 84 HttpUtil.uploadImgs(filePath,card,name,deviceId,startTime,endTime,validTimeEnabled,userType);
87 85 }
88 86  
89   - @Async("taskExecutor")
  87 +// @Async("taskExecutor")
90 88 public void deleteCard(String deviceId, String card){
91 89 HttpUtil.deleteCard(deviceId,card);
92 90 }
... ...
cloud/haikangface/src/main/java/com/sincere/haikangface/bean/Answer.java 0 → 100644
... ... @@ -0,0 +1,37 @@
  1 +package com.sincere.haikangface.bean;
  2 +
  3 +import io.swagger.annotations.ApiModelProperty;
  4 +
  5 +public class Answer {
  6 +
  7 + @ApiModelProperty(value = "题目id")
  8 + private String queId;
  9 +
  10 + @ApiModelProperty(value = "答案图片链接")
  11 + private String ansUrl;
  12 +
  13 + public String getQueId() {
  14 + return queId;
  15 + }
  16 +
  17 + public void setQueId(String queId) {
  18 + this.queId = queId;
  19 + }
  20 +
  21 + public String getAnsUrl() {
  22 + return ansUrl;
  23 + }
  24 +
  25 + public void setAnsUrl(String ansUrl) {
  26 + this.ansUrl = ansUrl;
  27 + }
  28 +
  29 + @Override
  30 + public String toString() {
  31 + return "Answer{" +
  32 + "queId='" + queId + '\'' +
  33 + ", ansUrl='" + ansUrl + '\'' +
  34 + '}';
  35 + }
  36 +
  37 +}
... ...
cloud/haikangface/src/main/java/com/sincere/haikangface/bean/Images2Ddevices.java 0 → 100644
... ... @@ -0,0 +1,48 @@
  1 +package com.sincere.haikangface.bean;
  2 +
  3 +import io.swagger.annotations.ApiModelProperty;
  4 +
  5 +/**
  6 + * 下发图片到设备集合对象
  7 + */
  8 +public class Images2Ddevices {
  9 +
  10 + @ApiModelProperty("设备集合,用,隔开")
  11 + private String devices;
  12 + @ApiModelProperty("图片目录")
  13 + private String imgPath;
  14 + @ApiModelProperty("身份类型1:老师,2:学生")
  15 + private String userType;
  16 +
  17 + public String getUserType() {
  18 + return userType;
  19 + }
  20 +
  21 + public void setUserType(String userType) {
  22 + this.userType = userType;
  23 + }
  24 +
  25 + public String getDevices() {
  26 + return devices;
  27 + }
  28 +
  29 + public void setDevices(String devices) {
  30 + this.devices = devices;
  31 + }
  32 +
  33 + public String getImgPath() {
  34 + return imgPath;
  35 + }
  36 +
  37 + public void setImgPath(String imgPath) {
  38 + this.imgPath = imgPath;
  39 + }
  40 +
  41 + @Override
  42 + public String toString() {
  43 + return "Images2Ddevices{" +
  44 + "devices='" + devices + '\'' +
  45 + ", imgPath='" + imgPath + '\'' +
  46 + '}';
  47 + }
  48 +}
... ...
cloud/haikangface/src/main/java/com/sincere/haikangface/bean/ShijiBean.java 0 → 100644
... ... @@ -0,0 +1,79 @@
  1 +package com.sincere.haikangface.bean;
  2 +
  3 +import io.swagger.annotations.Api;
  4 +import io.swagger.annotations.ApiModelProperty;
  5 +
  6 +import java.util.List;
  7 +
  8 +public class ShijiBean {
  9 + @ApiModelProperty(value = "章节")
  10 + private String chapter;//章节
  11 + @ApiModelProperty(value = "请求链接")
  12 + private String requestUrl;//请求链接
  13 + @ApiModelProperty(value = "年级")
  14 + private String grade;//年级
  15 + @ApiModelProperty(value = "科目")
  16 + private String subject;//科目
  17 + @ApiModelProperty(value = "学校id")
  18 + private String schoolId;//科目
  19 + @ApiModelProperty(value = "答案")
  20 + private List<Answer> answer;
  21 +
  22 +
  23 + public String getSchoolId() {
  24 + return schoolId;
  25 + }
  26 +
  27 + public void setSchoolId(String schoolId) {
  28 + this.schoolId = schoolId;
  29 + }
  30 +
  31 + public String getSubject() {
  32 + return subject;
  33 + }
  34 +
  35 + public void setSubject(String subject) {
  36 + this.subject = subject;
  37 + }
  38 +
  39 + public String getChapter() {
  40 + return chapter;
  41 + }
  42 +
  43 + public void setChapter(String chapter) {
  44 + this.chapter = chapter;
  45 + }
  46 +
  47 + public String getRequestUrl() {
  48 + return requestUrl;
  49 + }
  50 +
  51 + public void setRequestUrl(String requestUrl) {
  52 + this.requestUrl = requestUrl;
  53 + }
  54 +
  55 + public List<Answer> getAnswer() {
  56 + return answer;
  57 + }
  58 +
  59 + public void setAnswer(List<Answer> answer) {
  60 + this.answer = answer;
  61 + }
  62 +
  63 + public String getGrade() {
  64 + return grade;
  65 + }
  66 +
  67 + public void setGrade(String grade) {
  68 + this.grade = grade;
  69 + }
  70 +
  71 + @Override
  72 + public String toString() {
  73 + return "ShijiBean{" +
  74 + "chapter='" + chapter + '\'' +
  75 + ", requestUrl='" + requestUrl + '\'' +
  76 + ", answer=" + answer +
  77 + '}';
  78 + }
  79 +}
... ...
cloud/haikangface/src/main/java/com/sincere/haikangface/bean/StudentBean.java
... ... @@ -276,11 +276,30 @@ public class StudentBean implements Serializable {
276 276 @Override
277 277 public String toString() {
278 278 return "StudentBean{" +
  279 + "teacher_id='" + teacher_id + '\'' +
  280 + ", parent_id='" + parent_id + '\'' +
  281 + ", ID=" + ID +
  282 + ", UserId='" + UserId + '\'' +
  283 + ", CustomerId='" + CustomerId + '\'' +
  284 + ", StudentType=" + StudentType +
  285 + ", UserType=" + UserType +
279 286 ", name='" + name + '\'' +
  287 + ", ClassId=" + ClassId +
280 288 ", ClassName='" + ClassName + '\'' +
  289 + ", OldCard='" + OldCard + '\'' +
281 290 ", Card='" + Card + '\'' +
282 291 ", SchoolId=" + SchoolId +
283 292 ", school_id=" + school_id +
  293 + ", IsNew=" + IsNew +
  294 + ", UpdateType=" + UpdateType +
  295 + ", AddTime=" + AddTime +
  296 + ", Sex=" + Sex +
  297 + ", Face='" + Face + '\'' +
  298 + ", studentcode='" + studentcode + '\'' +
  299 + ", student_num='" + student_num + '\'' +
  300 + ", student_id='" + student_id + '\'' +
  301 + ", user_id='" + user_id + '\'' +
  302 + ", photo='" + photo + '\'' +
284 303 ", teacher_num='" + teacher_num + '\'' +
285 304 ", num='" + num + '\'' +
286 305 '}';
... ...
cloud/haikangface/src/main/java/com/sincere/haikangface/bean/UploadBean.java 0 → 100644
... ... @@ -0,0 +1,124 @@
  1 +package com.sincere.haikangface.bean;
  2 +
  3 +/**
  4 + * 上传人脸的元素
  5 + */
  6 +public class UploadBean {
  7 +
  8 +
  9 + private String filePath;//源文件
  10 +
  11 + private String targetPath;//目标文件
  12 +
  13 + private String cardNUm;//十进制卡号
  14 +
  15 + private String startTime;//开始时间
  16 +
  17 + private String endTime;//结束时间
  18 +
  19 + private int validTimeEnabled;//1:增加,0:删除
  20 +
  21 + private String name;//姓名
  22 +
  23 + private String deviceId;//设备id
  24 +
  25 + private String userType;//用户身份
  26 +
  27 + private String isPiliang;//0:批量,1:单张
  28 +
  29 + public String getFilePath() {
  30 + return filePath;
  31 + }
  32 +
  33 + public void setFilePath(String filePath) {
  34 + this.filePath = filePath;
  35 + }
  36 +
  37 + public String getTargetPath() {
  38 + return targetPath;
  39 + }
  40 +
  41 + public void setTargetPath(String targetPath) {
  42 + this.targetPath = targetPath;
  43 + }
  44 +
  45 + public String getCardNUm() {
  46 + return cardNUm;
  47 + }
  48 +
  49 + public void setCardNUm(String cardNUm) {
  50 + this.cardNUm = cardNUm;
  51 + }
  52 +
  53 + public String getStartTime() {
  54 + return startTime;
  55 + }
  56 +
  57 + public void setStartTime(String startTime) {
  58 + this.startTime = startTime;
  59 + }
  60 +
  61 + public String getEndTime() {
  62 + return endTime;
  63 + }
  64 +
  65 + public void setEndTime(String endTime) {
  66 + this.endTime = endTime;
  67 + }
  68 +
  69 + public int getValidTimeEnabled() {
  70 + return validTimeEnabled;
  71 + }
  72 +
  73 + public void setValidTimeEnabled(int validTimeEnabled) {
  74 + this.validTimeEnabled = validTimeEnabled;
  75 + }
  76 +
  77 + public String getName() {
  78 + return name;
  79 + }
  80 +
  81 + public void setName(String name) {
  82 + this.name = name;
  83 + }
  84 +
  85 + public String getDeviceId() {
  86 + return deviceId;
  87 + }
  88 +
  89 + public void setDeviceId(String deviceId) {
  90 + this.deviceId = deviceId;
  91 + }
  92 +
  93 + public String getUserType() {
  94 + return userType;
  95 + }
  96 +
  97 + public void setUserType(String userType) {
  98 + this.userType = userType;
  99 + }
  100 +
  101 + public String getIsPiliang() {
  102 + return isPiliang;
  103 + }
  104 +
  105 + public void setIsPiliang(String isPiliang) {
  106 + this.isPiliang = isPiliang;
  107 + }
  108 +
  109 + @Override
  110 + public String toString() {
  111 + return "UploadBean{" +
  112 + "filePath='" + filePath + '\'' +
  113 + ", targetPath='" + targetPath + '\'' +
  114 + ", cardNUm='" + cardNUm + '\'' +
  115 + ", startTime='" + startTime + '\'' +
  116 + ", endTime='" + endTime + '\'' +
  117 + ", validTimeEnabled=" + validTimeEnabled +
  118 + ", name='" + name + '\'' +
  119 + ", deviceId='" + deviceId + '\'' +
  120 + ", userType='" + userType + '\'' +
  121 + ", isPiliang='" + isPiliang + '\'' +
  122 + '}';
  123 + }
  124 +}
... ...
cloud/haikangface/src/main/java/com/sincere/haikangface/control/FileControl.java
... ... @@ -2,19 +2,25 @@ package com.sincere.haikangface.control;
2 2  
3 3 import com.sincere.haikangface.CMSServer;
4 4 import com.sincere.haikangface.async.SendUserAsync;
5   -import com.sincere.haikangface.bean.face.SendFaceBean;
  5 +import com.sincere.haikangface.bean.Images2Ddevices;
  6 +import com.sincere.haikangface.bean.StudentBean;
  7 +import com.sincere.haikangface.bean.UploadBean;
6 8 import com.sincere.haikangface.dao.UserDao;
7 9 import com.sincere.haikangface.utils.FileUtils;
8 10 import com.sincere.haikangface.utils.SendRecoderUtils;
9 11 import com.sincere.haikangface.xiananDao.SendRecordDao;
10 12 import io.swagger.annotations.Api;
11 13 import io.swagger.annotations.ApiOperation;
  14 +import org.slf4j.Logger;
  15 +import org.slf4j.LoggerFactory;
12 16 import org.springframework.beans.factory.annotation.Autowired;
13 17 import org.springframework.web.bind.annotation.*;
14 18 import org.springframework.web.multipart.MultipartFile;
15 19  
16 20 import java.io.File;
17 21 import java.io.FileOutputStream;
  22 +import java.text.SimpleDateFormat;
  23 +import java.util.*;
18 24  
19 25 @RestController
20 26 @Api("文件管理器")
... ... @@ -35,14 +41,21 @@ public class FileControl {
35 41  
36 42 SendRecoderUtils sendRecoderUtils;
37 43  
  44 + Queue<UploadBean> uploadBeanQueue = new LinkedList<>();
  45 +
38 46 @RequestMapping(method = RequestMethod.POST, value = "uploadImg")
39 47 public String uploadImg(@RequestParam("file") MultipartFile file, @RequestParam("card") String card
40 48 , @RequestParam("name") String name, @RequestParam("deviceId") String deviceId, @RequestParam("startTime") String startTime,
41 49 @RequestParam("endTime") String endTime, @RequestParam("validTimeEnabled") int validTimeEnabled, @RequestParam("userType") String userType) {
42 50  
  51 +
43 52 try {
44   - String fileName = file.getOriginalFilename();//文件名
  53 + if (!cmsServer.getIsDeviceOnline(deviceId)){
  54 + FileUtils.getInstance().writeLogs("设备不在线:" +deviceId, FileUtils.devices);
  55 + return "0";
  56 + }
45 57  
  58 + String fileName = file.getOriginalFilename();//文件名
46 59 File outFile = new File(".//imgCom");
47 60 if (!outFile.exists()) outFile.mkdirs();
48 61 File dest = new File(outFile, fileName);
... ... @@ -54,7 +67,7 @@ public class FileControl {
54 67 long time = System.currentTimeMillis();
55 68 if (filePath.contains(".jpg")) filePath = filePath.replace(".jpg", ".png");
56 69 if (new File(filePath.trim()).exists()) {
57   - String targetPath = FileUtils.picPathComp + new File(filePath).getName();
  70 + String targetPath = FileUtils.picPathComp + new File(filePath).getName().replace(".png",".jpg");
58 71 try {
59 72 int isPiliang = 0;//0:批量,1:单张
60 73 if (filePath.contains("face17e50")) {//批量发送
... ...
cloud/haikangface/src/main/java/com/sincere/haikangface/control/QueControl21.java 0 → 100644
... ... @@ -0,0 +1,274 @@
  1 +package com.sincere.haikangface.control;
  2 +
  3 +import com.baidu.aip.util.Base64Util;
  4 +import com.sincere.common.util.AuthService;
  5 +import com.sincere.haikangface.admindao.ZuoyeAdminDao;
  6 +import com.sincere.haikangface.bean.Answer;
  7 +import com.sincere.haikangface.bean.ShijiBean;
  8 +import com.sincere.haikangface.bean.homework.QuestionBean;
  9 +import com.sincere.haikangface.dao.UserDao;
  10 +import com.sincere.haikangface.dao.ZuoYeDao;
  11 +import com.sincere.haikangface.utils.HttpUtil;
  12 +import io.swagger.annotations.Api;
  13 +import io.swagger.annotations.ApiOperation;
  14 +import org.json.JSONArray;
  15 +import org.json.JSONException;
  16 +import org.json.JSONObject;
  17 +import org.springframework.beans.factory.annotation.Autowired;
  18 +import org.springframework.http.HttpEntity;
  19 +import org.springframework.http.HttpHeaders;
  20 +import org.springframework.http.MediaType;
  21 +import org.springframework.http.ResponseEntity;
  22 +import org.springframework.util.LinkedMultiValueMap;
  23 +import org.springframework.util.MultiValueMap;
  24 +import org.springframework.util.StringUtils;
  25 +import org.springframework.web.bind.annotation.RequestBody;
  26 +import org.springframework.web.bind.annotation.RequestMapping;
  27 +import org.springframework.web.bind.annotation.RequestMethod;
  28 +import org.springframework.web.bind.annotation.RestController;
  29 +import org.springframework.web.client.RestTemplate;
  30 +
  31 +import java.io.*;
  32 +import java.net.URL;
  33 +import java.net.URLConnection;
  34 +import java.net.URLEncoder;
  35 +import java.text.SimpleDateFormat;
  36 +import java.util.ArrayList;
  37 +import java.util.Date;
  38 +import java.util.HashMap;
  39 +import java.util.List;
  40 +
  41 +@RestController
  42 +@RequestMapping("/shiji/*")
  43 +@Api("21世纪题目添加")
  44 +public class QueControl21 {
  45 + @Autowired
  46 + ZuoYeDao zuoYeDao;
  47 +
  48 + @Autowired
  49 + ZuoyeAdminDao zuoyeAdminDao;
  50 +
  51 + @RequestMapping(value = "addQuestion", method = RequestMethod.POST)
  52 + @ApiOperation(value = "添加题目")
  53 + public String addQuestion(@RequestBody ShijiBean shijiBean) {
  54 + List<String> errQuesList = new ArrayList<>();
  55 + try {
  56 +
  57 + RestTemplate restTemplate = new RestTemplate();
  58 +
  59 + String url = shijiBean.getRequestUrl();
  60 +
  61 + String content = restTemplate.getForObject(url, String.class, new HashMap<>());
  62 +
  63 + JSONObject jsonObject = new JSONObject(content);
  64 + JSONObject data = jsonObject.optJSONObject("data");
  65 + JSONArray questions = data.optJSONArray("questions");
  66 + for (int i = 0; i < questions.length(); i++) {
  67 + JSONObject question = questions.optJSONObject(i);
  68 + String question_text = question.optString("question_text");
  69 + String question_id = question.optString("question_id");
  70 + String explanation = question.optString("explanation");//解析
  71 + String difficult_index = question.optString("difficult_index");//难度系数
  72 + String channel_type_name = question.optString("channel_type_name");//题目类型
  73 + JSONArray t_knowledge = question.optJSONArray("t_knowledge");
  74 + String Knowledge = "";
  75 + if (t_knowledge != null && t_knowledge.length() > 0) {
  76 + JSONArray t_knowArr = t_knowledge.optJSONArray(0);
  77 + if (t_knowArr != null && t_knowArr.length() > 0)
  78 + Knowledge = t_knowArr.optJSONObject(0).optString("name");
  79 + }
  80 + String chapterId = zuoyeAdminDao.getChapterId(shijiBean.getChapter());
  81 + String KnowledgeId = zuoyeAdminDao.getKnowledgeId(Knowledge);
  82 + String gradeId = zuoyeAdminDao.getGradeId(shijiBean.getGrade());
  83 + explanation = "<p><img src=\"" + explanation + "\" title=\"image.png\" alt=\"image.png\"/></p>";
  84 + String answer = getAnswerUrl(question_id, shijiBean.getAnswer());//答案
  85 + System.out.println("answer:" + answer + "KnowledgeId:" + KnowledgeId + " chapterId:" + shijiBean.getChapter()+chapterId+" gradeId:"+gradeId+" Knowledge:"+Knowledge);
  86 +
  87 +
  88 + if (StringUtils.isEmpty(chapterId)){
  89 + return "章节不存在";
  90 + }
  91 +
  92 + if (StringUtils.isEmpty(KnowledgeId)){
  93 + return "知识点不存在";
  94 + }
  95 +
  96 + if (StringUtils.isEmpty(gradeId)){
  97 + return "年级不存在";
  98 + }
  99 +
  100 + if (StringUtils.isEmpty(answer)){
  101 + return "答案解析失败";
  102 + }
  103 +
  104 + if (!answer.equals("") && KnowledgeId != null && chapterId != null && gradeId != null) {
  105 + List<QuestionBean> questionBeans = zuoYeDao.getQuestions(question_text);//获取题目
  106 +// System.out.println("questionBeans:"+questionBeans);
  107 + if (questionBeans != null && questionBeans.size() > 0) {//更新题库
  108 + for (int j = 0; j < questionBeans.size(); j++) {
  109 + QuestionBean questionBean = questionBeans.get(j);
  110 + zuoYeDao.updateQuestion(questionBean.getID(), answer, explanation);
  111 + System.out.println("更新题库成功");
  112 + }
  113 + } else {//新增题库
  114 + String dateTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
  115 + String subjectId = getSubjectId(shijiBean.getSubject());
  116 + if (subjectId == null) return "科目输入错误";
  117 + String createrUserId = jsonObject.optString("createUserId");
  118 + String schoolId = shijiBean.getSchoolId();
  119 + zuoYeDao.addQuestionStem(channel_type_name, "1", dateTime);
  120 + int stemId = zuoYeDao.getStemId();
  121 + zuoYeDao.addQuestion(question_text, "1", "A,B,C,D", answer, explanation, "1", dateTime,
  122 + "1", createrUserId, createrUserId, subjectId, schoolId, difficult_index,
  123 + KnowledgeId, chapterId, gradeId, "1", "1", "1", stemId + "", "1", "0", "0");
  124 + System.out.println("添加题库成功");
  125 + }
  126 + } else {
  127 + System.out.println("导入题目失败");
  128 + errQuesList.add(question.toString());
  129 + }
  130 + Thread.sleep(1000);
  131 + }
  132 +
  133 + } catch (JSONException e) {
  134 + e.printStackTrace();
  135 + } catch (InterruptedException e) {
  136 + e.printStackTrace();
  137 + }
  138 + return "导入题目成功";
  139 + }
  140 +
  141 + private String getSubjectId(String subject) {
  142 +
  143 + switch (subject) {
  144 + case "数学":
  145 + return "1";
  146 + case "语文":
  147 + return "2";
  148 + case "化学":
  149 + return "3";
  150 + case "英语":
  151 + return "5";
  152 + case "科学":
  153 + return "9";
  154 + }
  155 +
  156 + return null;
  157 + }
  158 +
  159 +
  160 + private String getAnswerUrl(String quesId, List<Answer> answer) {
  161 +
  162 + for (Answer ans :
  163 + answer) {
  164 + System.out.println("ans:" + ans.getQueId() + "-------quesId:" + quesId);
  165 + if (quesId.equals(ans.getQueId())) {
  166 + return getAnswer(ans.getAnsUrl(), 2);
  167 + }
  168 +
  169 + }
  170 +
  171 +
  172 + return "";
  173 +
  174 + }
  175 +
  176 +
  177 + private String url = "https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic?access_token="+ AuthService.getAuth();
  178 +
  179 + private String getAnswer(String imgUrl, int type) {
  180 +
  181 + RestTemplate restTemplate = new RestTemplate();
  182 +
  183 + HttpHeaders headers = new HttpHeaders();
  184 + headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
  185 +
  186 + MultiValueMap<String, String> multiValueMap = new LinkedMultiValueMap<>();
  187 + if (type == 1) {
  188 + multiValueMap.add("url", imgUrl);
  189 + } else if (type == 2) {
  190 + multiValueMap.add("image", Base64Util.encode(download(imgUrl)));
  191 + }
  192 + HttpEntity<MultiValueMap> requestEntity = new HttpEntity<MultiValueMap>(multiValueMap,
  193 +
  194 + headers);
  195 +
  196 + ResponseEntity<String> result = restTemplate.postForEntity(url, requestEntity, String.class);
  197 +
  198 + JSONObject jsonObject = null;
  199 + try {
  200 + jsonObject = new JSONObject(result.getBody());
  201 + } catch (JSONException e) {
  202 + e.printStackTrace();
  203 + }
  204 +// System.out.println("result:"+result.getBody());
  205 + JSONArray words_result = jsonObject.optJSONArray("words_result");
  206 + System.out.println("words_result:"+words_result);
  207 + StringBuilder stringBuilder = new StringBuilder();
  208 + if (words_result != null) {
  209 + for (int i = 0; i < words_result.length(); i++) {
  210 + String words = words_result.optJSONObject(i).optString("words");
  211 + stringBuilder.append(words + " ");
  212 + }
  213 + System.out.println("result:" + stringBuilder.toString());
  214 + }
  215 + return stringBuilder.toString().equals("") ? "" : stringBuilder.toString();
  216 + }
  217 +
  218 + private byte[] download(String urlString) {
  219 + try {
  220 +System.out.println("urlString:"+urlString);
  221 + // 构造URL
  222 + URL url = new URL(urlString);
  223 + // 打开连接
  224 + URLConnection con = url.openConnection();
  225 + // 输入流
  226 + InputStream is = con.getInputStream();
  227 + // 1K的数据缓冲
  228 + byte[] bs = new byte[1024];
  229 + // 读取到的数据长度
  230 + int len;
  231 + // 输出的文件流
  232 + String filename = "./imgs/"; //下载路径及下载图片名称
  233 + File file = new File(filename);
  234 + if (!file.exists())file.mkdirs();
  235 +
  236 + String filePath = filename+File.separator+System.currentTimeMillis()+".png";
  237 + File outFile = new File(filePath);
  238 + if (!outFile.exists())outFile.createNewFile();
  239 + FileOutputStream os = new FileOutputStream(outFile, true);
  240 + // 开始读取
  241 + while ((len = is.read(bs)) != -1) {
  242 + os.write(bs,0,len);
  243 + }
  244 + // 完毕,关闭所有链接
  245 + is.close();
  246 + os.close();
  247 + return InputStream2ByteArray(outFile.getAbsolutePath());
  248 + } catch (Exception e) {
  249 + e.printStackTrace();
  250 + }
  251 + return null;
  252 + }
  253 +
  254 + private byte[] InputStream2ByteArray(String filePath) throws IOException {
  255 +
  256 + InputStream in = new FileInputStream(filePath);
  257 + byte[] data = toByteArray(in);
  258 + in.close();
  259 +
  260 + return data;
  261 + }
  262 +
  263 + private byte[] toByteArray(InputStream in) throws IOException {
  264 +
  265 + ByteArrayOutputStream out = new ByteArrayOutputStream();
  266 + byte[] buffer = new byte[1024 * 4];
  267 + int n = 0;
  268 + while ((n = in.read(buffer)) != -1) {
  269 + out.write(buffer, 0, n);
  270 + }
  271 + return out.toByteArray();
  272 + }
  273 +
  274 +}
... ...
cloud/haikangface/src/main/java/com/sincere/haikangface/control/UserControl.java
1 1 package com.sincere.haikangface.control;
2 2  
3 3 import com.sincere.common.dto.smartCampus.SZ_AttendanceDto;
  4 +import com.sincere.haikangface.bean.Images2Ddevices;
4 5 import com.sincere.haikangface.utils.BaiduApiUtiols;
5 6 import com.sincere.haikangface.CMSServer;
6 7 import com.sincere.haikangface.async.SendUserAsync;
... ... @@ -14,13 +15,12 @@ import io.swagger.annotations.Api;
14 15 import io.swagger.annotations.ApiImplicitParam;
15 16 import io.swagger.annotations.ApiImplicitParams;
16 17 import io.swagger.annotations.ApiOperation;
  18 +import org.slf4j.Logger;
  19 +import org.slf4j.LoggerFactory;
17 20 import org.springframework.beans.factory.annotation.Autowired;
18 21 import org.springframework.http.MediaType;
19 22 import org.springframework.util.StringUtils;
20   -import org.springframework.web.bind.annotation.RequestMapping;
21   -import org.springframework.web.bind.annotation.RequestMethod;
22   -import org.springframework.web.bind.annotation.RequestParam;
23   -import org.springframework.web.bind.annotation.RestController;
  23 +import org.springframework.web.bind.annotation.*;
24 24 import org.springframework.web.multipart.MultipartFile;
25 25  
26 26 import java.io.*;
... ... @@ -59,12 +59,9 @@ public class UserControl {
59 59 @RequestParam("endTime") String endTime, @RequestParam("validTimeEnabled") int validTimeEnabled, @RequestParam("userType") String userType) {
60 60  
61 61 try {
62   -
63 62 if (filePath.contains(".jpg")) filePath = filePath.replace(".jpg", ".png");
64 63 if (new File(filePath.trim()).exists()) {
65   -
66 64 return sendImg(filePath, deviceId, card, name, userType);
67   -
68 65 } else {
69 66 if (null == sendRecoderUtils) sendRecoderUtils = new SendRecoderUtils();
70 67 sendRecoderUtils.sendFail(sendRecordDao, Long.parseLong(getCard(card), 16) + "", filePath, deviceId, userDao, "文件不存在", userType);
... ... @@ -96,7 +93,7 @@ public class UserControl {
96 93 else {
97 94 sendUserAsync.uploadImgs(filePath, card, name, deviceId, startTime, endTime, 1, userType);
98 95 }
99   - System.out.println("time:" + (System.currentTimeMillis() - time) / 1000);
  96 +// System.out.println("time:" + (System.currentTimeMillis() - time) / 1000);
100 97 return true;
101 98 } catch (Exception e) {
102 99 e.printStackTrace();
... ... @@ -105,6 +102,47 @@ public class UserControl {
105 102  
106 103 }
107 104  
  105 + Logger logger = LoggerFactory.getLogger(FileControl.class);
  106 +
  107 + @RequestMapping(value = "sendImg2Devices", method = RequestMethod.POST)
  108 + @ApiOperation("本地下发人脸给设备")
  109 + public boolean sendImg2Devices(@RequestBody Images2Ddevices images2Ddevices) throws Exception {
  110 + String startTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:dd").format(new Date());
  111 + Calendar calendar = Calendar.getInstance();
  112 + calendar.add(Calendar.YEAR, 10);
  113 + String endTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:dd").format(calendar.getTime());
  114 + String devices = images2Ddevices.getDevices();
  115 +
  116 + String imgPath = images2Ddevices.getImgPath();
  117 +
  118 + String[] devStrs = devices.split(",");
  119 +
  120 + File[] imgStrs = new File(imgPath).listFiles();
  121 +
  122 + if (null != imgStrs) {
  123 + for (int i = 0; i < imgStrs.length; i++) {
  124 +
  125 + File filePath = imgStrs[i];//图片路径
  126 + if (filePath.exists()) {
  127 + String studentCode = filePath.getName().split("\\.")[0];
  128 + StudentBean studentBean = userDao.getStudent_NumWitdCode(studentCode);
  129 + if (null != studentBean) {
  130 + for (int j = 0; j < devStrs.length; j++) {
  131 + String devId = devStrs[j];
  132 + sendUserAsync.uploadImgs(filePath.getAbsolutePath(), studentBean.getStudent_num(), studentBean.getName(), devId, startTime, endTime, 1, images2Ddevices.getUserType());
  133 + }
  134 + } else {
  135 + logger.error("学生对象不存在");
  136 + }
  137 +
  138 + }
  139 +
  140 + }
  141 + }
  142 +
  143 + return true;
  144 + }
  145 +
108 146 @RequestMapping(value = "sendFaces", method = RequestMethod.GET)
109 147 @ApiOperation(value = "下发学校下所有人脸给指定设备", notes = "下发所有人脸给指定设备")
110 148 public void sendFaces(@RequestParam("deviceIds") String deviceIds, @RequestParam("schoolId") String schoolId, @RequestParam("userType") String userType) {
... ... @@ -131,13 +169,13 @@ public class UserControl {
131 169 StudentBean studentBean = null;
132 170 String card = "", name = "";
133 171 if (userType.equals("1")) {
134   - studentBean = userDao.getTeacherWithstudentcode(file.getName().split("\\.")[0],schoolId);
135   - if (null!=studentBean){
  172 + studentBean = userDao.getTeacherWithstudentcode(file.getName().split("\\.")[0], schoolId);
  173 + if (null != studentBean) {
136 174 card = studentBean.getTeacher_num();
137 175 name = studentBean.getName();
138 176 }
139 177 } else if (userType.equals("2")) {
140   - studentBean = userDao.getStudentWithstudentcode(file.getName().split("\\.")[0],schoolId);
  178 + studentBean = userDao.getStudentWithstudentcode(file.getName().split("\\.")[0], schoolId);
141 179 if (null != studentBean) {
142 180 card = studentBean.getStudent_num();
143 181 name = studentBean.getName();
... ... @@ -158,10 +196,10 @@ public class UserControl {
158 196  
159 197 @RequestMapping(value = "sendFaceToDevices", method = RequestMethod.GET)
160 198 @ApiOperation(value = "下发单个用户给指定设备", notes = "下发单个用户给指定设备")
161   - @ApiImplicitParams({@ApiImplicitParam(name = "deviceIds",value = "设备id用逗号,拼接"),
162   - @ApiImplicitParam(name = "file",value = "100服务器上图片绝对路径")})
163   - public void sendFaceToDevices(@RequestParam("deviceIds") String deviceIds, @RequestParam("userType") String userType,@RequestParam("file") String file,
164   - @RequestParam("card") String card,@RequestParam("name") String name) {
  199 + @ApiImplicitParams({@ApiImplicitParam(name = "deviceIds", value = "设备id用逗号,拼接"),
  200 + @ApiImplicitParam(name = "file", value = "100服务器上图片绝对路径")})
  201 + public void sendFaceToDevices(@RequestParam("deviceIds") String deviceIds, @RequestParam("userType") String userType, @RequestParam("file") String file,
  202 + @RequestParam("card") String card, @RequestParam("name") String name) {
165 203  
166 204 String[] deviceIdsStr = deviceIds.split(",");
167 205  
... ... @@ -173,8 +211,7 @@ public class UserControl {
173 211 }
174 212  
175 213  
176   -
177   - @RequestMapping(value = "DeleteCard", method = RequestMethod.GET)
  214 + @RequestMapping(value = "DeleteCard", method = RequestMethod.GET)
178 215 @ApiOperation("删除人脸")
179 216 public boolean deleteCard(@RequestParam("deviceId") String deviceId, @RequestParam("card") String card) {
180 217 if (cmsServer.getIsDeviceOnline(deviceId))
... ...
cloud/haikangface/src/main/java/com/sincere/haikangface/control/ZuoYeControl.java
... ... @@ -206,8 +206,11 @@ public class ZuoYeControl {
206 206 String channel_type_name = question.optString("channel_type_name");//题目类型
207 207 JSONArray t_knowledge = question.optJSONArray("t_knowledge");
208 208 String Knowledge = "";
209   - if (t_knowledge != null && t_knowledge.length() > 0)
210   - Knowledge = t_knowledge.optJSONObject(0).optString("name");
  209 + if (t_knowledge != null && t_knowledge.length() > 0){
  210 + JSONArray t_knowArr = t_knowledge.optJSONArray(0);
  211 + if (t_knowArr!=null&&t_knowArr.length()>0)
  212 + Knowledge = t_knowArr.optJSONObject(0).optString("name");
  213 + }
211 214  
212 215 String chapterId = zuoyeAdminDao.getChapterId(jsonObject.optString("chapter"));
213 216 String KnowledgeId = zuoyeAdminDao.getKnowledgeId(jsonObject.optString("chapter"));
... ...
cloud/haikangface/src/main/java/com/sincere/haikangface/dao/UserDao.java
... ... @@ -2,7 +2,6 @@ package com.sincere.haikangface.dao;
2 2  
3 3 import com.sincere.haikangface.bean.*;
4 4 import org.apache.ibatis.annotations.*;
5   -import org.springframework.security.core.parameters.P;
6 5 import org.springframework.stereotype.Repository;
7 6  
8 7 import java.util.List;
... ... @@ -186,7 +185,7 @@ public interface UserDao {
186 185 @Select("select class_id from SZ_V_School_Student where school_id = 479 and student_id = #{customerId} ")
187 186 String getClassName(@Param("customerId") String customerId);
188 187  
189   - @Select("select clint_id from SZ_AttendanceDto where school_id = #{schoolId} and clint_type=18")
  188 + @Select("select clint_id from SZ_Attendance where school_id = #{schoolId} and clint_type=18")
190 189 List<String> getDeviceIdsWidthSchoolId(@Param("schoolId") int schoolId);
191 190  
192 191  
... ... @@ -211,4 +210,7 @@ public interface UserDao {
211 210 "from SZ_V_School_Teacher\n" +
212 211 "where num = #{num} and school_id = #{schoolId}")
213 212 StudentBean getTeacherWithstudentcode(@Param("num") String num,@Param("schoolId")String schoolId);
  213 +
  214 + @Select("select Top(1) * from SZ_V_School_Student where studentcode = #{studentcode}")
  215 + StudentBean getStudent_NumWitdCode(@Param("studentcode") String studentcode);
214 216 }
... ...
cloud/haikangface/src/main/java/com/sincere/haikangface/utils/CompressPic.java
... ... @@ -16,7 +16,7 @@ import java.io.InputStream;
16 16 public class CompressPic {
17 17  
18 18 public static String CompressPic(String srcPath, String targetPath) throws Exception {
19   - double cutPercent = 0.4;
  19 + double cutPercent = 0.1;
20 20 File file = new File(srcPath.trim());
21 21 FileInputStream fileInputStreamSrc = new FileInputStream(file);
22 22 BufferedImage bufferedImage = ImageIO.read(fileInputStreamSrc);
... ... @@ -26,8 +26,9 @@ public class CompressPic {
26 26 System.out.println("fileLength:"+fileLength);
27 27 if ((fileLength / 1024) < 200) {
28 28 writeImgToFile(bufferedImage, width, height, targetPath);
29   - } else
  29 + } else{
30 30 while ((fileLength / 1024) >= 200) {
  31 + System.out.println("fileLength:"+fileLength);
31 32 width = (int) (width * (1 - cutPercent));
32 33 height = (int) (height * (1 - cutPercent));
33 34  
... ... @@ -41,6 +42,7 @@ public class CompressPic {
41 42 fileLength = file1.length();
42 43 fileInputStream.close();
43 44 }
  45 + }
44 46 // System.out.printf("图片大小:"+fileLength/1024);
45 47 fileInputStreamSrc.close();
46 48 return targetPath;
... ... @@ -64,10 +66,10 @@ public class CompressPic {
64 66 }
65 67  
66 68 }*/
67   - System.out.println("读写图片:" + write);
  69 +// System.out.println("读写图片:" + write);
68 70 deskImage.close();
69 71 } catch (Exception e) {
70   - System.out.println("读写图片:" + e.toString());
  72 +// System.out.println("读写图片:" + e.toString());
71 73 e.printStackTrace();
72 74 }
73 75 }
... ...
cloud/haikangface/src/main/java/com/sincere/haikangface/utils/SendRecoderUtils.java
... ... @@ -100,7 +100,7 @@ public class SendRecoderUtils {
100 100  
101 101 break;
102 102 }
103   - System.out.println("studentBean:" + studentBean);
  103 +// System.out.println("studentBean:" + studentBean);
104 104 if (null != studentBean) {
105 105 String time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
106 106 String schoolName = userDao.getSchoolName(studentBean.getSchool_id() + "");
... ...
cloud/haikangface/src/main/resources/application.yaml
... ... @@ -38,8 +38,8 @@ eureka:
38 38 lease-renewal-interval-in-seconds: 10
39 39 client:
40 40 service-url:
41   -# defaultZone: http://121.40.109.21:8761/eureka/,http://121.40.109.21:8762/eureka/
42   - defaultZone: http://localhost:8761/eureka/,http://localhost:8762/eureka/
  41 + defaultZone: http://121.40.109.21:8761/eureka/,http://121.40.109.21:8762/eureka/
  42 +# defaultZone: http://localhost:8761/eureka/,http://localhost:8762/eureka/
43 43  
44 44 mybatis:
45 45 campus:
... ...
cloud/pom.xml
... ... @@ -44,6 +44,7 @@
44 44 <!-- <module>zkAttendance</module>-->
45 45 <module>user_search</module>
46 46 <module>fIle-center</module>
  47 + <module>RibbonConsume</module>
47 48 </modules>
48 49  
49 50 <dependencies>
... ...
cloud/server1/src/main/resources/application.yaml
... ... @@ -4,7 +4,7 @@ eureka:
4 4 lease-renewal-interval-in-seconds: 10
5 5 lease-expiration-duration-in-seconds: 60
6 6 hostname: localhost
7   - prefer-ip-address: true
  7 + prefer-ip-address: false
8 8 server:
9 9 #是否开启保护模式
10 10 enable-self-preservation: false #关闭服务器自我保护,客户端心跳检测15分钟内错误达到80%服务会保护,导致别人还认为是好用的服务
... ...
cloud/server2/src/main/resources/application.yaml
... ... @@ -13,7 +13,7 @@ eureka:
13 13 lease-renewal-interval-in-seconds: 10
14 14 lease-expiration-duration-in-seconds: 60
15 15 hostname: localhost
16   - prefer-ip-address: true
  16 + prefer-ip-address: false
17 17 server:
18 18 #是否开启保护模式
19 19 enable-self-preservation: false #关闭服务器自我保护,客户端心跳检测15分钟内错误达到80%服务会保护,导致别人还认为是好用的服务
... ...