Commit e2822531b384da2952784a98991d144fa97938e0
1 parent
6f262f5b
Exists in
master
用户中心
Showing
21 changed files
with
856 additions
and
8 deletions
Show diff stats
cloud/common/src/main/java/com/sincere/common/exception/ResultException.java
0 → 100644
... | ... | @@ -0,0 +1,29 @@ |
1 | +package com.sincere.common.exception; | |
2 | + | |
3 | +public class ResultException extends Exception { | |
4 | + | |
5 | + private int code ; | |
6 | + private String message ; | |
7 | + | |
8 | + public int getCode() { | |
9 | + return code; | |
10 | + } | |
11 | + | |
12 | + public void setCode(int code) { | |
13 | + this.code = code; | |
14 | + } | |
15 | + | |
16 | + @Override | |
17 | + public String getMessage() { | |
18 | + return message; | |
19 | + } | |
20 | + | |
21 | + public void setMessage(String message) { | |
22 | + this.message = message; | |
23 | + } | |
24 | + | |
25 | + public ResultException(int code, String message) { | |
26 | + this.code = code; | |
27 | + this.message = message; | |
28 | + } | |
29 | +} | ... | ... |
cloud/common/src/main/java/com/sincere/common/util/TokenUtils.java
0 → 100644
... | ... | @@ -0,0 +1,95 @@ |
1 | +package com.sincere.common.util; | |
2 | + | |
3 | +import com.nimbusds.jose.*; | |
4 | +import com.nimbusds.jose.crypto.MACSigner; | |
5 | +import com.nimbusds.jose.crypto.MACVerifier; | |
6 | +import com.nimbusds.jwt.JWTClaimsSet; | |
7 | +import com.nimbusds.jwt.SignedJWT; | |
8 | +import com.sincere.common.exception.ResultException; | |
9 | + | |
10 | +import java.util.Date; | |
11 | +import java.util.Objects; | |
12 | + | |
13 | +public class TokenUtils { | |
14 | + | |
15 | + /** | |
16 | + * 创建秘钥 | |
17 | + */ | |
18 | + private static final byte[] SECRET = "6MNSobBRCHGIO0fS6MNSobBRCHGWO0fS".getBytes(); | |
19 | + | |
20 | + /** | |
21 | + * 过期时间5秒 | |
22 | + */ | |
23 | + private static final long EXPIRE_TIME = 1000 * 60 * 60 * 24; | |
24 | + | |
25 | + | |
26 | + /** | |
27 | + * 生成Token | |
28 | + * @param account | |
29 | + * @return | |
30 | + */ | |
31 | + public static String buildToken(String account) { | |
32 | + try { | |
33 | + /** | |
34 | + * 1.创建一个32-byte的密匙 | |
35 | + */ | |
36 | + MACSigner macSigner = new MACSigner(SECRET); | |
37 | + /** | |
38 | + * 2. 建立payload 载体 | |
39 | + */ | |
40 | + JWTClaimsSet claimsSet = new JWTClaimsSet.Builder() | |
41 | + .expirationTime(new Date(System.currentTimeMillis() + EXPIRE_TIME)) | |
42 | + .claim("ACCOUNT",account) | |
43 | + .build(); | |
44 | + | |
45 | + /** | |
46 | + * 3. 建立签名 | |
47 | + */ | |
48 | + SignedJWT signedJWT = new SignedJWT(new JWSHeader(JWSAlgorithm.HS256), claimsSet); | |
49 | + signedJWT.sign(macSigner); | |
50 | + | |
51 | + /** | |
52 | + * 4. 生成token | |
53 | + */ | |
54 | + String token = signedJWT.serialize(); | |
55 | + return token; | |
56 | + } catch (KeyLengthException e) { | |
57 | + e.printStackTrace(); | |
58 | + } catch (JOSEException e) { | |
59 | + e.printStackTrace(); | |
60 | + } | |
61 | + return null; | |
62 | + } | |
63 | + | |
64 | + /** | |
65 | + * 校验token | |
66 | + * @param token | |
67 | + * @return | |
68 | + */ | |
69 | + public static String validToken(String token) throws ResultException { | |
70 | + try { | |
71 | + SignedJWT jwt = SignedJWT.parse(token); | |
72 | + JWSVerifier verifier = new MACVerifier(SECRET); | |
73 | + //校验是否有效 | |
74 | + if (!jwt.verify(verifier)) { | |
75 | + throw new ResultException(-1, "Token 无效"); | |
76 | + } | |
77 | + | |
78 | + //校验超时 | |
79 | + Date expirationTime = jwt.getJWTClaimsSet().getExpirationTime(); | |
80 | + if (new Date().after(expirationTime)) { | |
81 | + throw new ResultException(-2, "Token 已过期"); | |
82 | + } | |
83 | + | |
84 | + //获取载体中的数据 | |
85 | + Object account = jwt.getJWTClaimsSet().getClaim("ACCOUNT"); | |
86 | + //是否有openUid | |
87 | + if (Objects.isNull(account)){ | |
88 | + throw new ResultException(-3, "账号为空"); | |
89 | + } | |
90 | + return account.toString(); | |
91 | + } catch (Exception e) { | |
92 | + throw new ResultException(-4, "系统繁忙"); | |
93 | + } | |
94 | + } | |
95 | +} | ... | ... |
cloud/search_smartCampus/src/main/resources/mapper/SyncMapper.xml
... | ... | @@ -68,35 +68,35 @@ |
68 | 68 | <result column="yxyUserId" property="yxyUserId" /> |
69 | 69 | </resultMap> |
70 | 70 | <select id="selectUser" parameterType="java.lang.Integer" resultMap="UserDtp"> |
71 | - select HS_StudentUpdateCard.ID , HS_StudentUpdateCard.UserType , HS_StudentUpdateCard.Name , HS_StudentUpdateCard.ClassId , HS_StudentUpdateCard.CustomerId , HS_StudentUpdateCard.Sex , HS_StudentUpdateCard.mobile , HS_StudentUpdateCard.UpdateType , YXY_UserRelation.yxyUserId from HS_StudentUpdateCard | |
72 | - left join YXY_UserRelation on HS_StudentUpdateCard.CustomerId = YXY_UserRelation.hxyCustomerId | |
71 | + select HS_StudentUpdateCard.ID , HS_StudentUpdateCard.UserType , HS_StudentUpdateCard.Name , HS_StudentUpdateCard.ClassId , HS_StudentUpdateCard.CustomerId , HS_StudentUpdateCard.Sex , HS_StudentUpdateCard.mobile , HS_StudentUpdateCard.UpdateType , YXT_UserRelation.yxyUserId from HS_StudentUpdateCard | |
72 | + left join YXT_UserRelation on HS_StudentUpdateCard.CustomerId = YXT_UserRelation.hxyCustomerId | |
73 | 73 | where SchoolId =#{schoolId} and Yxy_IsNew = 0 |
74 | 74 | </select> |
75 | 75 | |
76 | 76 | <insert id="insertDeptRelation" parameterType="com.sincere.common.dto.smartCampus.DeptRelationDto"> |
77 | - insert into YXY_DeptRelation (hxyDeptId,yxyDeptId,usertype,updateTime,createTime,state) | |
77 | + insert into YXT_DeptRelation (hxyDeptId,yxyDeptId,usertype,updateTime,createTime,state) | |
78 | 78 | values (#{hxyDeptId},#{yxyDeptId},#{userType},GETDATE(),GETDATE(),#{state}) |
79 | 79 | </insert> |
80 | 80 | |
81 | 81 | <update id="updateDeptRelation" parameterType="com.sincere.common.dto.smartCampus.DeptRelationDto"> |
82 | - update YXY_DeptRelation set updateTime = GETDATE() , state = #{state} where hxyDeptId = #{hxyDeptId} | |
82 | + update YXT_DeptRelation set updateTime = GETDATE() , state = #{state} where hxyDeptId = #{hxyDeptId} | |
83 | 83 | </update> |
84 | 84 | |
85 | 85 | <select id="selectYxyIdByHxyId" parameterType="java.lang.Integer" resultType="java.lang.String"> |
86 | - select yxyDeptId from YXY_DeptRelation where hxyDeptId = #{hxyDeptId} | |
86 | + select yxyDeptId from YXT_DeptRelation where hxyDeptId = #{hxyDeptId} | |
87 | 87 | </select> |
88 | 88 | |
89 | 89 | |
90 | 90 | <insert id="insertUserRelation" parameterType="com.sincere.common.dto.smartCampus.UserRelationDto"> |
91 | - insert into YXY_UserRelation (hxyCustomerId,yxyUserId,userType,updateTime,createTime,state) | |
91 | + insert into YXT_UserRelation (hxyCustomerId,yxyUserId,userType,updateTime,createTime,state) | |
92 | 92 | values (#{hxyCustomerId},#{yxyUserId},#{userType},GETDATE(),GETDATE(),#{state}) |
93 | 93 | </insert> |
94 | 94 | |
95 | 95 | <update id="updateUserRelation" parameterType="com.sincere.common.dto.smartCampus.DeptRelationDto"> |
96 | - update YXY_UserRelation set updateTime = GETDATE() , state = #{state} where hxyCustomerId = #{hxyCustomerId} | |
96 | + update YXT_UserRelation set updateTime = GETDATE() , state = #{state} where hxyCustomerId = #{hxyCustomerId} | |
97 | 97 | </update> |
98 | 98 | |
99 | 99 | <select id="selectUserYxyIdByHxyId" parameterType="java.lang.String" resultType="java.lang.String"> |
100 | - select yxyUserId from YXY_UserRelation where hxyCustomerId = #{hxyCustomerId} | |
100 | + select yxyUserId from YXT_UserRelation where hxyCustomerId = #{hxyCustomerId} | |
101 | 101 | </select> |
102 | 102 | </mapper> |
103 | 103 | \ No newline at end of file | ... | ... |
... | ... | @@ -0,0 +1,158 @@ |
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>user_search</artifactId> | |
13 | + | |
14 | + <dependencies> | |
15 | + <dependency> | |
16 | + <groupId>com.sincere</groupId> | |
17 | + <artifactId>common</artifactId> | |
18 | + <version>1.0.0</version> | |
19 | + </dependency> | |
20 | + <dependency> | |
21 | + <groupId>org.springframework.boot</groupId> | |
22 | + <artifactId>spring-boot-starter-test</artifactId> | |
23 | + <scope>test</scope> | |
24 | + </dependency> | |
25 | + <dependency> | |
26 | + <groupId>org.springframework.cloud</groupId> | |
27 | + <artifactId>spring-cloud-starter-feign</artifactId> | |
28 | + <version>1.3.6.RELEASE</version> | |
29 | + </dependency> | |
30 | + <dependency> | |
31 | + <groupId>org.springframework.cloud</groupId> | |
32 | + <artifactId>spring-cloud-openfeign-core</artifactId> | |
33 | + <version>2.1.2.RELEASE</version> | |
34 | + </dependency> | |
35 | + <dependency> | |
36 | + <groupId>org.apache.commons</groupId> | |
37 | + <artifactId>commons-lang3</artifactId> | |
38 | + <version>3.3.2</version> | |
39 | + </dependency> | |
40 | + <dependency> | |
41 | + <groupId>org.mybatis.spring.boot</groupId> | |
42 | + <artifactId>mybatis-spring-boot-starter</artifactId> | |
43 | + <version>1.3.0</version> | |
44 | + </dependency> | |
45 | + <dependency> | |
46 | + <groupId>com.microsoft.sqlserver</groupId> | |
47 | + <artifactId>mssql-jdbc</artifactId> | |
48 | + <version>6.4.0.jre8</version> | |
49 | + </dependency> | |
50 | + <dependency> | |
51 | + <groupId>io.springfox</groupId> | |
52 | + <artifactId>springfox-swagger2</artifactId> | |
53 | + <version>2.5.0</version> | |
54 | + </dependency> | |
55 | + <dependency> | |
56 | + <groupId>io.springfox</groupId> | |
57 | + <artifactId>springfox-swagger-ui</artifactId> | |
58 | + <version>2.5.0</version> | |
59 | + </dependency> | |
60 | + </dependencies> | |
61 | + | |
62 | + <dependencyManagement> | |
63 | + <dependencies> | |
64 | + <dependency> | |
65 | + <groupId>org.springframework.cloud</groupId> | |
66 | + <artifactId>spring-cloud-dependencies</artifactId> | |
67 | + <version>${spring-cloud.version}</version> | |
68 | + <type>pom</type> | |
69 | + <scope>import</scope> | |
70 | + </dependency> | |
71 | + </dependencies> | |
72 | + </dependencyManagement> | |
73 | + | |
74 | + <build> | |
75 | + <!--打包文件名--> | |
76 | + <finalName>quartz_server</finalName> | |
77 | + <!--打包方式--> | |
78 | + <plugins> | |
79 | + <!-- 设置编译版本 --> | |
80 | + <plugin> | |
81 | + <groupId>org.apache.maven.plugins</groupId> | |
82 | + <artifactId>maven-compiler-plugin</artifactId> | |
83 | + <version>3.1</version> | |
84 | + <configuration> | |
85 | + <source>1.8</source> | |
86 | + <target>1.8</target> | |
87 | + <encoding>UTF-8</encoding> | |
88 | + </configuration> | |
89 | + </plugin> | |
90 | + <!-- 打包jar文件时,配置manifest文件,加入lib包的jar依赖 --> | |
91 | + <!-- 本地启动需要注释--> | |
92 | + <plugin> | |
93 | + <groupId>org.apache.maven.plugins</groupId> | |
94 | + <artifactId>maven-jar-plugin</artifactId> | |
95 | + <configuration> | |
96 | + <archive> | |
97 | + <manifest> | |
98 | + <mainClass>com.sincere.quartz.QuartzApplication</mainClass> | |
99 | + <addClasspath>true</addClasspath> | |
100 | + <classpathPrefix>lib/</classpathPrefix> | |
101 | + </manifest> | |
102 | + <manifestEntries> | |
103 | + <Class-Path>./config/</Class-Path> | |
104 | + </manifestEntries> | |
105 | + </archive> | |
106 | + <excludes> | |
107 | + <exclude>config/**</exclude> | |
108 | + </excludes> | |
109 | + <classesDirectory></classesDirectory> | |
110 | + </configuration> | |
111 | + </plugin> | |
112 | + <!-- 拷贝依赖的jar包到lib目录 --> | |
113 | + <plugin> | |
114 | + <groupId>org.apache.maven.plugins</groupId> | |
115 | + <artifactId>maven-dependency-plugin</artifactId> | |
116 | + <executions> | |
117 | + <execution> | |
118 | + <id>copy</id> | |
119 | + <phase>package</phase> | |
120 | + <goals> | |
121 | + <goal>copy-dependencies</goal> | |
122 | + </goals> | |
123 | + <configuration> | |
124 | + <outputDirectory> | |
125 | + ${project.build.directory}/lib | |
126 | + </outputDirectory> | |
127 | + </configuration> | |
128 | + </execution> | |
129 | + </executions> | |
130 | + </plugin> | |
131 | + <!-- 解决资源文件的编码问题 --> | |
132 | + <plugin> | |
133 | + <groupId>org.apache.maven.plugins</groupId> | |
134 | + <artifactId>maven-resources-plugin</artifactId> | |
135 | + <version>2.5</version> | |
136 | + <configuration> | |
137 | + <encoding>UTF-8</encoding> | |
138 | + </configuration> | |
139 | + </plugin> | |
140 | + <!-- 打包source文件为jar文件 --> | |
141 | + <plugin> | |
142 | + <artifactId>maven-source-plugin</artifactId> | |
143 | + <version>2.2</version> | |
144 | + <configuration> | |
145 | + <attach>true</attach> | |
146 | + </configuration> | |
147 | + <executions> | |
148 | + <execution> | |
149 | + <phase>compile</phase> | |
150 | + <goals> | |
151 | + <goal>jar</goal> | |
152 | + </goals> | |
153 | + </execution> | |
154 | + </executions> | |
155 | + </plugin> | |
156 | + </plugins> | |
157 | + </build> | |
158 | +</project> | |
0 | 159 | \ No newline at end of file | ... | ... |
cloud/user_search/src/main/java/com/sincere/userSearch/Swagger2.java
0 → 100644
... | ... | @@ -0,0 +1,52 @@ |
1 | +package com.sincere.userSearch; | |
2 | + | |
3 | +import io.swagger.annotations.ApiOperation; | |
4 | +import org.springframework.context.annotation.Bean; | |
5 | +import org.springframework.context.annotation.Configuration; | |
6 | +import springfox.documentation.builders.ApiInfoBuilder; | |
7 | +import springfox.documentation.builders.ParameterBuilder; | |
8 | +import springfox.documentation.builders.PathSelectors; | |
9 | +import springfox.documentation.builders.RequestHandlerSelectors; | |
10 | +import springfox.documentation.schema.ModelRef; | |
11 | +import springfox.documentation.service.ApiInfo; | |
12 | +import springfox.documentation.service.Parameter; | |
13 | +import springfox.documentation.spi.DocumentationType; | |
14 | +import springfox.documentation.spring.web.plugins.Docket; | |
15 | +import springfox.documentation.swagger2.annotations.EnableSwagger2; | |
16 | + | |
17 | +import java.util.ArrayList; | |
18 | +import java.util.List; | |
19 | + | |
20 | +@EnableSwagger2 | |
21 | +@Configuration //让Spring来加载该类配置 | |
22 | +public class Swagger2 { | |
23 | + | |
24 | + @Bean | |
25 | + public Docket createRestApi() { | |
26 | + ParameterBuilder ticketPar = new ParameterBuilder(); | |
27 | + List<Parameter> pars = new ArrayList<Parameter>(); | |
28 | + ticketPar.name("X-Authorization").description("user token") | |
29 | + .modelRef(new ModelRef("string")).parameterType("header") | |
30 | + .required(false).build(); //header中的ticket参数非必填,传空也可以 | |
31 | + pars.add(ticketPar.build()); | |
32 | + | |
33 | + | |
34 | + return new Docket(DocumentationType.SWAGGER_2) | |
35 | + .apiInfo(apiInfo()) | |
36 | + .enableUrlTemplating(true) | |
37 | + .select() | |
38 | + // 扫描所有有注解的api,用这种方式更灵活 | |
39 | + .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class)) | |
40 | + .paths(PathSelectors.any()) | |
41 | + .build().globalOperationParameters(pars); | |
42 | + | |
43 | + } | |
44 | + private ApiInfo apiInfo() { | |
45 | + return new ApiInfoBuilder() | |
46 | + .title("Spring Boot中使用Swagger2构建RESTful APIs") | |
47 | + .description("接口文档") | |
48 | + .termsOfServiceUrl("") | |
49 | + .version("1.0") | |
50 | + .build(); | |
51 | + } | |
52 | +} | ... | ... |
cloud/user_search/src/main/java/com/sincere/userSearch/UserApplication.java
0 → 100644
... | ... | @@ -0,0 +1,18 @@ |
1 | +package com.sincere.userSearch; | |
2 | + | |
3 | +import org.mybatis.spring.annotation.MapperScan; | |
4 | +import org.springframework.boot.SpringApplication; | |
5 | +import org.springframework.boot.autoconfigure.SpringBootApplication; | |
6 | +import org.springframework.boot.web.servlet.ServletComponentScan; | |
7 | +import org.springframework.cloud.netflix.eureka.EnableEurekaClient; | |
8 | + | |
9 | +@ServletComponentScan | |
10 | +@EnableEurekaClient | |
11 | +@SpringBootApplication | |
12 | +@MapperScan("com.sincere.userSearch.mapper") | |
13 | +public class UserApplication { | |
14 | + | |
15 | + public static void main(String[] args) { | |
16 | + SpringApplication.run(UserApplication.class, args); | |
17 | + } | |
18 | +} | ... | ... |
cloud/user_search/src/main/java/com/sincere/userSearch/access/MemberFilter.java
0 → 100644
... | ... | @@ -0,0 +1,60 @@ |
1 | +package com.sincere.userSearch.access; | |
2 | + | |
3 | +import com.fasterxml.jackson.databind.ObjectMapper; | |
4 | +import com.sincere.common.exception.ResultException; | |
5 | +import com.sincere.common.util.TokenUtils; | |
6 | +import com.sincere.userSearch.vo.UserInfo; | |
7 | +import org.apache.commons.lang3.StringUtils; | |
8 | + | |
9 | +import javax.servlet.*; | |
10 | +import javax.servlet.annotation.WebFilter; | |
11 | +import javax.servlet.http.HttpServletRequest; | |
12 | +import java.io.IOException; | |
13 | +import java.util.HashMap; | |
14 | +import java.util.Map; | |
15 | + | |
16 | +@WebFilter(urlPatterns = "/user/*") | |
17 | +public class MemberFilter implements Filter { | |
18 | + | |
19 | + private static String token_string = "X-Authorization" ; | |
20 | + | |
21 | + @Override | |
22 | + public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { | |
23 | + | |
24 | + HttpServletRequest req = (HttpServletRequest) request; | |
25 | + | |
26 | + String token = req.getHeader(token_string); | |
27 | + if (StringUtils.isBlank(token)) { | |
28 | + respFail(response,-5,"token 没有"); | |
29 | + return; | |
30 | + } | |
31 | + | |
32 | +// MemberDetails memberDetails = memberService.getMemberDetailsByToken(tokenId); | |
33 | +// if (memberDetails == null) this.respFail(response); | |
34 | + String userId = "" ; | |
35 | + try{ | |
36 | + userId = TokenUtils.validToken(token); | |
37 | + }catch (ResultException e){ | |
38 | + respFail(response,e.getCode(),e.getMessage()); | |
39 | + return; | |
40 | + } | |
41 | + ParameterRequestWrapper requestWrapper = new ParameterRequestWrapper(req); | |
42 | + UserInfo userInfo = new UserInfo() ; | |
43 | + userInfo.setUserId(userId); | |
44 | + requestWrapper.addObject(userInfo); | |
45 | + chain.doFilter(requestWrapper, response); | |
46 | + } | |
47 | + | |
48 | + private void respFail(ServletResponse response , int code , String message) throws IOException { | |
49 | + Map<String, Object> map = new HashMap<>(); | |
50 | + map.put("status", code); | |
51 | + map.put("message", message); | |
52 | + map.put("data", null); | |
53 | + ObjectMapper objectMapper = new ObjectMapper(); | |
54 | + String s = objectMapper.writeValueAsString(map); | |
55 | + response.setCharacterEncoding("UTF-8"); | |
56 | + response.setContentType("application/json; charset=utf-8"); | |
57 | + response.getWriter().write(s); | |
58 | + } | |
59 | + | |
60 | +} | ... | ... |
cloud/user_search/src/main/java/com/sincere/userSearch/access/ParameterRequestWrapper.java
0 → 100644
... | ... | @@ -0,0 +1,130 @@ |
1 | +package com.sincere.userSearch.access; | |
2 | + | |
3 | +import org.apache.commons.lang.WordUtils; | |
4 | + | |
5 | +import javax.servlet.http.HttpServletRequest; | |
6 | +import javax.servlet.http.HttpServletRequestWrapper; | |
7 | +import java.lang.reflect.InvocationTargetException; | |
8 | +import java.lang.reflect.Method; | |
9 | +import java.util.*; | |
10 | + | |
11 | +/** | |
12 | + * 重写HttpServletRequestWrapper ,为把token 转化为userinfo 带入到request中 | |
13 | + */ | |
14 | +public class ParameterRequestWrapper extends HttpServletRequestWrapper { | |
15 | + | |
16 | + private Map<String , String[]> params = new HashMap<String, String[]>(); | |
17 | + | |
18 | + | |
19 | + @SuppressWarnings("unchecked") | |
20 | + public ParameterRequestWrapper(HttpServletRequest request) { | |
21 | + // 将request交给父类,以便于调用对应方法的时候,将其输出,其实父亲类的实现方式和第一种new的方式类似 | |
22 | + super(request); | |
23 | + //将参数表,赋予给当前的Map以便于持有request中的参数 | |
24 | + this.params.putAll(request.getParameterMap()); | |
25 | + } | |
26 | + //重载一个构造方法 | |
27 | + public ParameterRequestWrapper(HttpServletRequest request , Map<String , Object> extendParams) { | |
28 | + this(request); | |
29 | + addAllParameters(extendParams);//这里将扩展参数写入参数表 | |
30 | + } | |
31 | + | |
32 | + /** | |
33 | + * 复写获取key的方法 | |
34 | + */ | |
35 | + @Override | |
36 | + public Enumeration getParameterNames() { | |
37 | + Vector names = new Vector(params.keySet()); | |
38 | + return names.elements(); | |
39 | + } | |
40 | + | |
41 | + /** | |
42 | + * 复写获取值value的方法 | |
43 | + */ | |
44 | + @Override | |
45 | + public String getParameter(String name) { | |
46 | + Object v = params.get(name); | |
47 | + if (v == null) { | |
48 | + return null; | |
49 | + } else if (v instanceof String[]) { | |
50 | + String[] strArr = (String[]) v; | |
51 | + if (strArr.length > 0) { | |
52 | + return strArr[0]; | |
53 | + } else { | |
54 | + return null; | |
55 | + } | |
56 | + } else if (v instanceof String) { | |
57 | + return (String) v; | |
58 | + } else { | |
59 | + return v.toString(); | |
60 | + } | |
61 | + } | |
62 | + | |
63 | + @Override | |
64 | + public String[] getParameterValues(String name) { | |
65 | + Object v = params.get(name); | |
66 | + if (v == null) { | |
67 | + return null; | |
68 | + } else if (v instanceof String[]) { | |
69 | + return (String[]) v; | |
70 | + } else if (v instanceof String) { | |
71 | + return new String[] { (String) v }; | |
72 | + } else { | |
73 | + return new String[] { v.toString() }; | |
74 | + } | |
75 | + } | |
76 | + | |
77 | + public void addAllParameters(Map<String , Object>otherParams) {//增加多个参数 | |
78 | + for(Map.Entry<String , Object>entry : otherParams.entrySet()) { | |
79 | + addParameter(entry.getKey() , entry.getValue()); | |
80 | + } | |
81 | + } | |
82 | + | |
83 | + | |
84 | + public void addParameter(String name , Object value) {//增加参数 | |
85 | + if(value != null) { | |
86 | + if(value instanceof String[]) { | |
87 | + params.put(name , (String[])value); | |
88 | + }else if(value instanceof String) { | |
89 | + params.put(name , new String[] {(String)value}); | |
90 | + }else { | |
91 | + params.put(name , new String[] {String.valueOf(value)}); | |
92 | + } | |
93 | + } | |
94 | + } | |
95 | + | |
96 | + /** 简单封装,请根据需求改进 */ | |
97 | + public void addObject(Object obj) { | |
98 | + Class<?> clazz = obj.getClass(); | |
99 | + Method[] methods = clazz.getMethods(); | |
100 | + try { | |
101 | + for (Method method : methods) { | |
102 | + if (!method.getName().startsWith("get")) { | |
103 | + continue; | |
104 | + } | |
105 | + Object invoke = method.invoke(obj); | |
106 | + if (invoke == null || "".equals(invoke)) { | |
107 | + continue; | |
108 | + } | |
109 | + | |
110 | + String filedName = method.getName().replace("get", ""); | |
111 | + filedName = WordUtils.uncapitalize(filedName); | |
112 | + | |
113 | + if (invoke instanceof Collection) { | |
114 | + Collection collections = (Collection) invoke; | |
115 | + if (collections != null && collections.size() > 0) { | |
116 | + String[] strings = (String[]) collections.toArray(); | |
117 | + addParameter(filedName, strings); | |
118 | + return; | |
119 | + } | |
120 | + } | |
121 | + | |
122 | + addParameter(filedName, invoke); | |
123 | + } | |
124 | + } catch (IllegalAccessException e) { | |
125 | + e.printStackTrace(); | |
126 | + } catch (InvocationTargetException e) { | |
127 | + e.printStackTrace(); | |
128 | + } | |
129 | + } | |
130 | +} | ... | ... |
cloud/user_search/src/main/java/com/sincere/userSearch/controller/UserController.java
0 → 100644
... | ... | @@ -0,0 +1,51 @@ |
1 | +package com.sincere.userSearch.controller; | |
2 | + | |
3 | +import com.sincere.userSearch.service.UserService; | |
4 | +import com.sincere.userSearch.vo.BaseVo; | |
5 | +import com.sincere.userSearch.vo.UserInfo; | |
6 | +import com.sincere.userSearch.vo.rep.ZnxwRepVo; | |
7 | +import com.sincere.userSearch.vo.req.ZnxwReqVo; | |
8 | +import io.swagger.annotations.Api; | |
9 | +import io.swagger.annotations.ApiOperation; | |
10 | +import org.springframework.beans.factory.annotation.Autowired; | |
11 | +import org.springframework.web.bind.annotation.*; | |
12 | + | |
13 | +@RestController | |
14 | +@RequestMapping("/user") | |
15 | +@Api(value = "用户中心") | |
16 | +public class UserController { | |
17 | + | |
18 | + @Autowired | |
19 | + UserService userService ; | |
20 | + | |
21 | + /** | |
22 | + * 获取钉钉angenId的接口 EM_QYHApply | |
23 | + */ | |
24 | + @ApiOperation("获取智能校卫agentid") | |
25 | + @RequestMapping(value = "getZNXWWebApp" , method = RequestMethod.POST) | |
26 | + public BaseVo<ZnxwRepVo> getZNXWWebApp(@RequestBody ZnxwReqVo znxwReqVo , UserInfo userInfo){ | |
27 | + BaseVo<ZnxwRepVo> result = new BaseVo<>() ; | |
28 | + ZnxwRepVo data = userService.selectAgentId(znxwReqVo) ; | |
29 | + result.setData(data); | |
30 | + return result ; | |
31 | + } | |
32 | + | |
33 | + | |
34 | + public void getUserRole(){ | |
35 | + | |
36 | + } | |
37 | + | |
38 | + /** | |
39 | + * 用户类型 0-班主任; 1-任课老师; 2-学生; 3-家长; 10-学校管理员; | |
40 | + * @param userId | |
41 | + */ | |
42 | + @ApiOperation("根据userId 获取用户信息") | |
43 | + @RequestMapping(value = "getUserInfo" , method = RequestMethod.POST) | |
44 | + public void getUserInfo(UserInfo userId){ | |
45 | + | |
46 | + } | |
47 | + | |
48 | + public void getUserId(){ | |
49 | + | |
50 | + } | |
51 | +} | ... | ... |
cloud/user_search/src/main/java/com/sincere/userSearch/mapper/QyhApplyMapper.java
0 → 100644
cloud/user_search/src/main/java/com/sincere/userSearch/mapper/UserMapper.java
0 → 100644
cloud/user_search/src/main/java/com/sincere/userSearch/service/UserService.java
0 → 100644
cloud/user_search/src/main/java/com/sincere/userSearch/service/impl/UserServiceImpl.java
0 → 100644
... | ... | @@ -0,0 +1,20 @@ |
1 | +package com.sincere.userSearch.service.impl; | |
2 | + | |
3 | +import com.sincere.userSearch.mapper.QyhApplyMapper; | |
4 | +import com.sincere.userSearch.service.UserService; | |
5 | +import com.sincere.userSearch.vo.rep.ZnxwRepVo; | |
6 | +import com.sincere.userSearch.vo.req.ZnxwReqVo; | |
7 | +import org.springframework.beans.factory.annotation.Autowired; | |
8 | +import org.springframework.stereotype.Service; | |
9 | + | |
10 | +@Service | |
11 | +public class UserServiceImpl implements UserService { | |
12 | + | |
13 | + @Autowired | |
14 | + QyhApplyMapper qyhApplyMapper ; | |
15 | + | |
16 | + @Override | |
17 | + public ZnxwRepVo selectAgentId(ZnxwReqVo znxwReqVo) { | |
18 | + return qyhApplyMapper.selectAgentId(znxwReqVo); | |
19 | + } | |
20 | +} | ... | ... |
cloud/user_search/src/main/java/com/sincere/userSearch/vo/BaseVo.java
0 → 100644
... | ... | @@ -0,0 +1,36 @@ |
1 | +package com.sincere.userSearch.vo; | |
2 | + | |
3 | +public class BaseVo<T> { | |
4 | + | |
5 | + private String message ; | |
6 | + private boolean status ; | |
7 | + private T data ; | |
8 | + | |
9 | + public String getMessage() { | |
10 | + return message; | |
11 | + } | |
12 | + | |
13 | + public void setMessage(String message) { | |
14 | + this.message = message; | |
15 | + } | |
16 | + | |
17 | + public boolean isStatus() { | |
18 | + return status; | |
19 | + } | |
20 | + | |
21 | + public void setStatus(boolean status) { | |
22 | + this.status = status; | |
23 | + } | |
24 | + | |
25 | + public T getData() { | |
26 | + return data; | |
27 | + } | |
28 | + | |
29 | + public void setData(T data) { | |
30 | + this.data = data; | |
31 | + } | |
32 | + | |
33 | + public BaseVo() { | |
34 | + this.status = true ; | |
35 | + } | |
36 | +} | ... | ... |
cloud/user_search/src/main/java/com/sincere/userSearch/vo/UserInfo.java
0 → 100644
cloud/user_search/src/main/java/com/sincere/userSearch/vo/rep/ZnxwRepVo.java
0 → 100644
... | ... | @@ -0,0 +1,23 @@ |
1 | +package com.sincere.userSearch.vo.rep; | |
2 | + | |
3 | +public class ZnxwRepVo { | |
4 | + | |
5 | + private String agentId ; | |
6 | + private String schoolName ; | |
7 | + | |
8 | + public String getAgentId() { | |
9 | + return agentId; | |
10 | + } | |
11 | + | |
12 | + public void setAgentId(String agentId) { | |
13 | + this.agentId = agentId; | |
14 | + } | |
15 | + | |
16 | + public String getSchoolName() { | |
17 | + return schoolName; | |
18 | + } | |
19 | + | |
20 | + public void setSchoolName(String schoolName) { | |
21 | + this.schoolName = schoolName; | |
22 | + } | |
23 | +} | ... | ... |
cloud/user_search/src/main/java/com/sincere/userSearch/vo/req/ZnxwReqVo.java
0 → 100644
... | ... | @@ -0,0 +1,23 @@ |
1 | +package com.sincere.userSearch.vo.req; | |
2 | + | |
3 | +public class ZnxwReqVo { | |
4 | + | |
5 | + private int schoolId ; | |
6 | + private int type ; | |
7 | + | |
8 | + public int getSchoolId() { | |
9 | + return schoolId; | |
10 | + } | |
11 | + | |
12 | + public void setSchoolId(int schoolId) { | |
13 | + this.schoolId = schoolId; | |
14 | + } | |
15 | + | |
16 | + public int getType() { | |
17 | + return type; | |
18 | + } | |
19 | + | |
20 | + public void setType(int type) { | |
21 | + this.type = type; | |
22 | + } | |
23 | +} | ... | ... |
... | ... | @@ -0,0 +1,28 @@ |
1 | +server: | |
2 | + port: 9004 | |
3 | + | |
4 | +spring: | |
5 | + application: | |
6 | + name: user_search | |
7 | + datasource: | |
8 | + username: szjxtuser | |
9 | + password: RQminVCJota3H1u8bBYH | |
10 | + url: jdbc:sqlserver://116.62.155.137:33419;database=SmartCampus | |
11 | + driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver | |
12 | +##mybatis | |
13 | +mybatis: | |
14 | + mapper-locations: classpath:mapper/*.xml | |
15 | + type-aliases-package: com.sincere.quartz.mapper | |
16 | + check-config-location: true | |
17 | +ribbon: | |
18 | + ReadTimeout: 50000 | |
19 | + ConnectTimeout: 5000 | |
20 | +eureka: | |
21 | + instance: | |
22 | + hostname: localhost | |
23 | + lease-expiration-duration-in-seconds: 60 | |
24 | + lease-renewal-interval-in-seconds: 10 | |
25 | + client: | |
26 | + service-url: | |
27 | + defaultZone: http://localhost:8761/eureka/,http://localhost:8762/eureka/ | |
28 | + | ... | ... |
... | ... | @@ -0,0 +1,60 @@ |
1 | +<?xml version="1.0" encoding="UTF-8"?> | |
2 | +<configuration debug="true"> | |
3 | + <!-- 项目名称 --> | |
4 | + <property name="PROJECT_NAME" value="user_search" /> | |
5 | + | |
6 | + <!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径--> | |
7 | + <property name="LOG_HOME" value="C://log"/> | |
8 | + | |
9 | + <!-- 控制台输出 --> | |
10 | + <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> | |
11 | + <!--<withJansi>true</withJansi>--> | |
12 | + <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> | |
13 | + <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符--> | |
14 | + <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%thread] %highlight([%-5level] %logger{50} - %msg%n)</pattern> | |
15 | + <charset>UTF-8</charset> | |
16 | + </encoder> | |
17 | + </appender> | |
18 | + | |
19 | + <!-- 按照每天生成日志文件 --> | |
20 | + <appender name="SYSTEM_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> | |
21 | + <!-- 过滤器,只打印ERROR级别的日志 --> | |
22 | + <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> | |
23 | + <!--日志文件输出的文件名--> | |
24 | + <FileNamePattern>${LOG_HOME}/${PROJECT_NAME}/%d{yyyy-MM-dd}.%i.log</FileNamePattern> | |
25 | + <!--日志文件保留天数--> | |
26 | + <MaxHistory>30</MaxHistory> | |
27 | + <!--日志文件最大的大小--> | |
28 | + <MaxFileSize>100MB</MaxFileSize> | |
29 | + </rollingPolicy> | |
30 | + | |
31 | + <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> | |
32 | + <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符--> | |
33 | + <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%thread] [%-5level] %logger{50} - %msg%n</pattern> | |
34 | + <charset>UTF-8</charset> | |
35 | + </encoder> | |
36 | + </appender> | |
37 | + <logger name="system_error" additivity="true"> | |
38 | + <appender-ref ref="SYSTEM_FILE"/> | |
39 | + </logger> | |
40 | + | |
41 | + <!-- 设置Spring&Hibernate日志输出级别 --> | |
42 | + <logger name="org.springframework" level="WARN" /> | |
43 | + <logger name="org.mybatis" level="WARN" /> | |
44 | + <logger name="com.ibatis" level="DEBUG" /> | |
45 | + <logger name="com.ibatis.common.jdbc.SimpleDataSource" level="DEBUG" /> | |
46 | + <logger name="com.ibatis.common.jdbc.ScriptRunner" level="DEBUG" /> | |
47 | + <logger name="com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate" level="DEBUG" /> | |
48 | + | |
49 | + | |
50 | + <logger name="java.sql.Connection" level="DEBUG" /> | |
51 | + <logger name="java.sql.Statement" level="DEBUG" /> | |
52 | + <logger name="java.sql.PreparedStatement" level="DEBUG" /> | |
53 | + <logger name="com.sincere.smartSearch.mapper" level="DEBUG" /> | |
54 | + <!-- 开发环境下的日志配置 --> | |
55 | + <root level="INFO"> | |
56 | + <appender-ref ref="CONSOLE" /> | |
57 | + <appender-ref ref="SYSTEM_FILE" /> | |
58 | + </root> | |
59 | + | |
60 | +</configuration> | ... | ... |
cloud/user_search/src/main/resources/mapper/QyhApplyMapper.xml
0 → 100644
... | ... | @@ -0,0 +1,14 @@ |
1 | +<?xml version="1.0" encoding="UTF-8" ?> | |
2 | +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > | |
3 | +<mapper namespace="com.sincere.userSearch.mapper.QyhApplyMapper"> | |
4 | + | |
5 | + <resultMap id="ZnxwMap" type="com.sincere.userSearch.vo.rep.ZnxwRepVo"> | |
6 | + <result column="AgentId" property="agentId" /> | |
7 | + <result column="school_name" property="schoolName" /> | |
8 | + </resultMap> | |
9 | + <select id="selectAgentId" parameterType="com.sincere.userSearch.vo.req.ZnxwReqVo" resultMap="ZnxwMap"> | |
10 | + SELECT EM_QYHApply.AgentId , SZ_School.school_name FROM EM_QYHApply join SZ_School on EM_QYHApply.SchoolId = SZ_School.school_id | |
11 | + where EM_QYHApply.SchoolId = #{schoolId} and EM_QYHApply.Type = #{type} and EM_QYHApply.ApplyName = '智能校卫' | |
12 | + </select> | |
13 | + | |
14 | +</mapper> | ... | ... |
cloud/user_search/src/main/resources/mapper/UserMapper.xml
0 → 100644
... | ... | @@ -0,0 +1,14 @@ |
1 | +<?xml version="1.0" encoding="UTF-8" ?> | |
2 | +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > | |
3 | +<mapper namespace="com.sincere.userSearch.mapper.UserMapper"> | |
4 | + | |
5 | + <resultMap id="ZnxwMap" type="com.sincere.userSearch.vo.rep.ZnxwRepVo"> | |
6 | + <result column="AgentId" property="agentId" /> | |
7 | + <result column="school_name" property="schoolName" /> | |
8 | + </resultMap> | |
9 | + <select id="selectAgentId" parameterType="com.sincere.userSearch.vo.req.ZnxwReqVo" resultMap="ZnxwMap"> | |
10 | + SELECT EM_QYHApply.AgentId , SZ_School.school_name FROM EM_QYHApply join SZ_School on EM_QYHApply.SchoolId = SZ_School.school_id | |
11 | + where EM_QYHApply.SchoolId = #{schoolId} and EM_QYHApply.Type = #{type} and EM_QYHApply.ApplyName = '智能校卫' | |
12 | + </select> | |
13 | + | |
14 | +</mapper> | ... | ... |