From 9b3dbdc74b2a508249b1d1e489db8a2134a3a7de Mon Sep 17 00:00:00 2001
From: 安瑾然 <107107765@qq.com>
Date: 星期一, 18 七月 2022 15:36:31 +0800
Subject: [PATCH] 权限模块
---
src/test/java/com/example/jz/dao/UserDaoTest.java | 30 +
src/main/java/com/example/jz/auth/DefaultPwdEncoder.java | 34 +
src/main/resources/mapper/ReportDao.xml | 63 +++
src/main/java/com/example/jz/dao/ReportDao.java | 11
src/main/java/com/example/jz/utils/MD5Utils.java | 131 ++++++
src/main/java/com/example/jz/controller/ReportController.java | 15
src/main/java/com/example/jz/service/impl/CauseServiceImpl.java | 37 +
pom.xml | 11
src/main/java/com/example/jz/service/ReportService.java | 11
src/main/java/com/example/jz/auth/MyUnAuthEntryPoint.java | 35 +
src/main/java/com/example/jz/auth/MyAccessDeniedHandler.java | 40 ++
src/main/java/com/example/jz/modle/dto/ReportParamDto.java | 43 ++
src/main/java/com/example/jz/controller/AnnouncementController.java | 1
src/main/java/com/example/jz/service/impl/ReportServiceImpl.java | 26 +
src/main/java/com/example/jz/auth/UserDetailService.java | 50 ++
src/main/java/com/example/jz/auth/TokenAuthFilter.java | 66 +++
src/main/java/com/example/jz/modle/dto/AddReportDto.java | 31 +
src/main/java/com/example/jz/modle/entity/Report.java | 5
src/main/java/com/example/jz/modle/entity/User.java | 129 -----
src/main/java/com/example/jz/auth/TokenLoginFilter.java | 72 +++
src/main/java/com/example/jz/controller/CauseController.java | 54 ++
src/main/java/com/example/jz/modle/vo/ReportListVo.java | 13
src/main/java/com/example/jz/modle/entity/SecurityUser.java | 73 +++
src/main/java/com/example/jz/auth/MyTokenSecurityConfig.java | 103 +++++
src/main/java/com/example/jz/dao/UserDao.java | 3
src/main/java/com/example/jz/auth/MyLogoutHandler.java | 51 ++
src/main/java/com/example/jz/auth/TokenJwtManager.java | 47 ++
src/main/java/com/example/jz/service/CauseService.java | 3
28 files changed, 1,052 insertions(+), 136 deletions(-)
diff --git a/pom.xml b/pom.xml
index 2b8c206..9b62808 100644
--- a/pom.xml
+++ b/pom.xml
@@ -88,6 +88,17 @@
<artifactId>hutool-all</artifactId>
<version>5.8.3</version>
</dependency>
+ <!-- 鏉冮檺楠岃瘉 -->
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter-security</artifactId>
+ </dependency>
+ <!-- JWT -->
+ <dependency>
+ <groupId>com.auth0</groupId>
+ <artifactId>java-jwt</artifactId>
+ <version>3.19.2</version>
+ </dependency>
</dependencies>
<build>
diff --git a/src/main/java/com/example/jz/auth/DefaultPwdEncoder.java b/src/main/java/com/example/jz/auth/DefaultPwdEncoder.java
new file mode 100644
index 0000000..17f4434
--- /dev/null
+++ b/src/main/java/com/example/jz/auth/DefaultPwdEncoder.java
@@ -0,0 +1,34 @@
+package com.example.jz.auth;
+
+import com.example.jz.utils.Md5Utils;
+import org.springframework.security.crypto.password.PasswordEncoder;
+import org.springframework.stereotype.Component;
+
+/**
+ * @author 瀹夌懢鐒�
+ * @data 2022/7/18 - 10:52 AM
+ * @description 瀵嗙爜鍔犲瘑绠楁硶
+ */
+@Component
+public class DefaultPwdEncoder implements PasswordEncoder {
+ /**
+ * 鍔犲瘑
+ * @param charSequence
+ * @return
+ */
+ @Override
+ public String encode(CharSequence charSequence) {
+ return Md5Utils.md5(charSequence.toString());
+ }
+
+ /**
+ * 杩涜瀵嗙爜姣斿
+ * @param charSequence 涓嶅姞瀵�
+ * @param encodePwd 鍔犲瘑
+ * @return
+ */
+ @Override
+ public boolean matches(CharSequence charSequence, String encodePwd) {
+ return encodePwd.equalsIgnoreCase(Md5Utils.md5(charSequence.toString()));
+ }
+}
diff --git a/src/main/java/com/example/jz/auth/MyAccessDeniedHandler.java b/src/main/java/com/example/jz/auth/MyAccessDeniedHandler.java
new file mode 100644
index 0000000..0ad7404
--- /dev/null
+++ b/src/main/java/com/example/jz/auth/MyAccessDeniedHandler.java
@@ -0,0 +1,40 @@
+package com.example.jz.auth;
+
+
+import cn.hutool.json.JSONUtil;
+import com.example.jz.modle.R;
+import org.springframework.security.access.AccessDeniedException;
+import org.springframework.security.web.access.AccessDeniedHandler;
+import org.springframework.stereotype.Component;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.PrintWriter;
+
+/**
+ * @author 瀹夌懢鐒�
+ * @data 2022/7/18 - 10:35 AM
+ * @description 鏃犳潈璁块棶閰嶇疆
+ */
+@Component
+public class MyAccessDeniedHandler implements AccessDeniedHandler {
+
+ @Override
+ public void handle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, AccessDeniedException e) throws IOException, ServletException {
+ R<String> r = new R<>();
+ r.setCode(403);
+ r.setMsg("鏃犳潈璁块棶");
+ r.setData(null);
+ // 璁剧疆杩斿洖娑堟伅绫诲瀷
+ httpServletResponse.setHeader("Content-type", "text/html;charset=UTF-8");
+ httpServletResponse.setCharacterEncoding("utf-8");
+ httpServletResponse.setContentType("application/json;charset=UTF-8");
+ // 杩斿洖缁欒姹傜
+ PrintWriter writer = httpServletResponse.getWriter();
+ writer.write(JSONUtil.toJsonStr(r));
+ writer.flush();
+ writer.close();
+ }
+}
diff --git a/src/main/java/com/example/jz/auth/MyLogoutHandler.java b/src/main/java/com/example/jz/auth/MyLogoutHandler.java
new file mode 100644
index 0000000..6f1e8d7
--- /dev/null
+++ b/src/main/java/com/example/jz/auth/MyLogoutHandler.java
@@ -0,0 +1,51 @@
+package com.example.jz.auth;
+
+import cn.hutool.json.JSONUtil;
+import com.example.jz.modle.R;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.core.Authentication;
+import org.springframework.security.web.authentication.logout.LogoutHandler;
+import org.springframework.stereotype.Component;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.PrintWriter;
+
+/**
+ * @author 瀹夌懢鐒�
+ * @data 2022/7/18 - 10:45 AM
+ * @description 鐧诲嚭
+ */
+@Component
+public class MyLogoutHandler implements LogoutHandler {
+
+ private TokenJwtManager tokenJwtManager;
+
+ @Autowired
+ public void setTokenJwtManager(TokenJwtManager tokenJwtManager) {
+ this.tokenJwtManager = tokenJwtManager;
+ }
+
+ @Override
+ public void logout(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Authentication authentication) {
+ // 浠巋eader涓幏鍙杢oken
+ String token = httpServletRequest.getHeader("token");
+ String username = tokenJwtManager.getUserName(token);
+ // 璁剧疆杩斿洖娑堟伅绫诲瀷
+ httpServletResponse.setHeader("Content-type", "text/html;charset=UTF-8");
+ httpServletResponse.setCharacterEncoding("utf-8");
+ httpServletResponse.setContentType("application/json;charset=UTF-8");
+ // 杩斿洖缁欒姹傜
+ PrintWriter writer = null;
+ try {
+ writer = httpServletResponse.getWriter();
+ writer.write(JSONUtil.toJsonStr(R.ok(null, username + "鐧诲嚭鎴愬姛")));
+ writer.flush();
+ writer.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+
+ }
+}
diff --git a/src/main/java/com/example/jz/auth/MyTokenSecurityConfig.java b/src/main/java/com/example/jz/auth/MyTokenSecurityConfig.java
new file mode 100644
index 0000000..1e9aea1
--- /dev/null
+++ b/src/main/java/com/example/jz/auth/MyTokenSecurityConfig.java
@@ -0,0 +1,103 @@
+package com.example.jz.auth;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.http.HttpMethod;
+import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
+import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
+import org.springframework.security.config.annotation.web.builders.HttpSecurity;
+import org.springframework.security.config.annotation.web.builders.WebSecurity;
+import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
+import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
+
+/**
+ * @author 瀹夌懢鐒�
+ * @data 2022/7/18 - 11:23 AM
+ * @description
+ */
+@Configuration
+@EnableGlobalMethodSecurity(prePostEnabled = true) // 鏂规硶澧炲姞鏉冮檺
+public class MyTokenSecurityConfig extends WebSecurityConfigurerAdapter {
+
+ // 灏� UserDetailService 娉ㄥ叆锛屼娇鍏跺幓鏌ヨ鏁版嵁搴�
+ @Autowired
+ private UserDetailService userDetailsService;
+
+ // token 鐢熸垚鍣�
+ @Autowired
+ private TokenJwtManager tokenManager;
+
+ // 鑷畾涔夊瘑鐮佸姞瀵嗚В瀵�
+ @Autowired
+ private DefaultPwdEncoder defaultPwdEncoder;
+
+ // 鏈櫥褰昲andler
+ @Autowired
+ private MyUnAuthEntryPoint myUnAuthEntryPoint;
+
+ // 鏃犳潈闄�
+ @Autowired
+ private MyAccessDeniedHandler myAccessDeniedHandler;
+
+ // 鐧诲嚭handler澶勭悊
+ @Autowired
+ private MyLogoutHandler myLogoutHandler;
+
+
+ /**
+ * 鐧诲綍鏃讹紝浠庢暟鎹簱鑾峰彇鍩烘湰淇℃伅鍜屾潈闄愪俊鎭�
+ *
+ * @param auth
+ * @throws Exception
+ */
+ @Override
+ protected void configure(AuthenticationManagerBuilder auth) throws Exception {
+ // 璁剧疆 userDetailsService 鍜� 瀵嗙爜瑙f瀽
+ auth.userDetailsService(userDetailsService).passwordEncoder(defaultPwdEncoder);
+ }
+
+ /**
+ * 閰嶇疆璁块棶杩囨护
+ *
+ * @param http
+ * @throws Exception
+ */
+ @Override
+ protected void configure(HttpSecurity http) throws Exception {
+ http
+ .exceptionHandling()
+ .authenticationEntryPoint(myUnAuthEntryPoint) // 鏈櫥褰� handler
+ .accessDeniedHandler(myAccessDeniedHandler) // 鏃犳潈闄�
+ .and().csrf().disable() // 鍏抽棴 csrf 璺ㄥ煙璇锋眰
+ .formLogin()
+ .loginProcessingUrl("/login") // 璁惧畾鐧诲綍璇锋眰鎺ュ彛
+ .usernameParameter("username")
+ .passwordParameter("password")
+ .permitAll()
+ .and()
+ .authorizeRequests() // 璇锋眰璁剧疆
+ .antMatchers("/user/register", "/webjars/**", "/swagger/**", "/v2/api-docs", "/doc.html", "/swagger-ui.html", "/swagger-resources/**" ).permitAll() // 閰嶇疆涓嶉渶瑕佽璇佺殑鎺ュ彛
+ .antMatchers("/api/**").permitAll() // 寮�鏀惧皬绋嬪簭鐨勬帴鍙�
+ .anyRequest().authenticated() // 浠讳綍璇锋眰閮介渶瑕佽璇�
+ .and()
+ .logout() // logout璁惧畾
+ .logoutUrl("/logout") //閫�鍑鸿姹� /logout 鏈畾涔夛紝浜ょ粰鑷畾涔塰andler瀹炵幇鍔熻兘
+ .addLogoutHandler(myLogoutHandler) // 鐧诲嚭 myLogoutHandler 澶勭悊
+ .and()
+ .addFilter(new TokenLoginFilter(tokenManager, authenticationManager())) // 璁よ瘉浜ょ粰 鑷畾涔� TokenLoginFilter 瀹炵幇
+ .addFilter(new TokenAuthFilter(authenticationManager(), tokenManager))
+ .httpBasic();
+ }
+
+ /**
+ * 閰嶇疆涓嶉渶瑕侀獙璇佺殑璁块棶璺緞
+ *
+ * @param web
+ * @throws Exception
+ */
+ @Override
+ public void configure(WebSecurity web) throws Exception {
+// web.ignoring().antMatchers("/test", "/user/login");
+ web.ignoring().antMatchers(HttpMethod.OPTIONS, "/**");
+ }
+}
diff --git a/src/main/java/com/example/jz/auth/MyUnAuthEntryPoint.java b/src/main/java/com/example/jz/auth/MyUnAuthEntryPoint.java
new file mode 100644
index 0000000..9cd8e29
--- /dev/null
+++ b/src/main/java/com/example/jz/auth/MyUnAuthEntryPoint.java
@@ -0,0 +1,35 @@
+package com.example.jz.auth;
+
+import cn.hutool.json.JSONUtil;
+import com.example.jz.modle.R;
+import org.springframework.security.core.AuthenticationException;
+import org.springframework.security.web.AuthenticationEntryPoint;
+import org.springframework.stereotype.Component;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.PrintWriter;
+
+/**
+ * @author 瀹夌懢鐒�
+ * @data 2022/7/18 - 10:55 AM
+ * @description 鏈櫥褰曞鐞�
+ */
+@Component
+public class MyUnAuthEntryPoint implements AuthenticationEntryPoint {
+ @Override
+ public void commence(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, AuthenticationException e) throws IOException, ServletException {
+ // 璁剧疆杩斿洖娑堟伅绫诲瀷
+ httpServletResponse.setHeader("Content-type", "text/html;charset=UTF-8");
+ httpServletResponse.setCharacterEncoding("utf-8");
+ httpServletResponse.setContentType("application/json;charset=UTF-8");
+ // 杩斿洖缁欒姹傜
+ PrintWriter writer = httpServletResponse.getWriter();
+ writer.write(JSONUtil.toJsonStr(R.failed("褰撳墠璐︽埛鏈櫥褰�")));
+ writer.close();
+ }
+}
+
+
diff --git a/src/main/java/com/example/jz/auth/TokenAuthFilter.java b/src/main/java/com/example/jz/auth/TokenAuthFilter.java
new file mode 100644
index 0000000..b599189
--- /dev/null
+++ b/src/main/java/com/example/jz/auth/TokenAuthFilter.java
@@ -0,0 +1,66 @@
+package com.example.jz.auth;
+
+import org.springframework.security.authentication.AuthenticationManager;
+import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
+import org.springframework.security.core.GrantedAuthority;
+import org.springframework.security.core.authority.SimpleGrantedAuthority;
+import org.springframework.security.core.context.SecurityContextHolder;
+import org.springframework.security.web.authentication.www.BasicAuthenticationFilter;
+
+import javax.servlet.FilterChain;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * @author 瀹夌懢鐒�
+ * @data 2022/7/18 - 10:56 AM
+ * @description
+ */
+public class TokenAuthFilter extends BasicAuthenticationFilter {
+
+ private TokenJwtManager tokenJwtManager;
+
+ public TokenAuthFilter(AuthenticationManager authenticationManager, TokenJwtManager tokenJwtManager) {
+ super(authenticationManager);
+ this.tokenJwtManager = tokenJwtManager;
+ }
+
+ @Override
+ protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException, ServletException {
+ //鑾峰彇褰撳墠璁よ瘉鎴愬姛鐢ㄦ埛鏉冮檺淇℃伅
+ UsernamePasswordAuthenticationToken authRequest = getAuthentication(request);
+ if(authRequest != null){
+ // 鏈夋潈闄愶紝鍒欐斁鍏ユ潈闄愪笂涓嬫枃涓�
+ SecurityContextHolder.getContext().setAuthentication(authRequest);
+ }
+ // 鎵ц涓嬩竴涓� filter 杩囨护鍣ㄩ摼
+ chain.doFilter(request,response);
+ }
+
+ private UsernamePasswordAuthenticationToken getAuthentication(HttpServletRequest request) {
+ //浠巋eader鑾峰彇token
+ String token = request.getHeader("token");
+ if(token != null) {
+ //浠巘oken鑾峰彇鐢ㄦ埛鍚�
+ String username = tokenJwtManager.getUserName(token);
+ // 鐧诲綍鎴愬姛鏃讹紝浼氬皢鏉冮檺鏁版嵁瀛樺叆redis
+ // 杩欓噷鏄獙璇佽幏鍙栨潈闄愪俊鎭�
+ // 1銆佷粠redis涓幏鍙栧搴旇鐢ㄦ埛鐨勬潈闄愪俊鎭�
+ // 2銆佹垨浠庢暟鎹簱涓啀娆℃煡璇�
+ List<String> permissionValueList = Arrays.asList("admin","select");
+ Collection<GrantedAuthority> authority = new ArrayList<>();
+ for(String permissionValue : permissionValueList) {
+ SimpleGrantedAuthority auth = new SimpleGrantedAuthority(permissionValue);
+ authority.add(auth);
+ }
+ return new UsernamePasswordAuthenticationToken(username,token,authority);
+ }
+ return null;
+ }
+}
diff --git a/src/main/java/com/example/jz/auth/TokenJwtManager.java b/src/main/java/com/example/jz/auth/TokenJwtManager.java
new file mode 100644
index 0000000..abf9544
--- /dev/null
+++ b/src/main/java/com/example/jz/auth/TokenJwtManager.java
@@ -0,0 +1,47 @@
+package com.example.jz.auth;
+
+import com.auth0.jwt.JWT;
+import com.auth0.jwt.JWTVerifier;
+import com.auth0.jwt.algorithms.Algorithm;
+import com.auth0.jwt.interfaces.Claim;
+import com.auth0.jwt.interfaces.DecodedJWT;
+import org.springframework.stereotype.Component;
+
+import java.util.Calendar;
+import java.util.HashMap;
+
+/**
+ * @author 瀹夌懢鐒�
+ * @data 2022/7/18 - 10:46 AM
+ * @description token宸ュ叿绫�
+ */
+@Component
+public class TokenJwtManager {
+
+ // 璁剧疆token鏃堕棿
+ private int tokenEcpiration = 24 * 60 * 60 * 1000; // 1澶�
+
+ // 缂栫爜瀵嗛挜
+ private String tokenSignKey = "6^wy=$}E";
+
+ // 1銆佹牴鎹敤鎴峰悕鐢熸垚token
+ public String createToken(String username) {
+ Calendar calendar = Calendar.getInstance();
+ calendar.add(Calendar.SECOND, tokenEcpiration);
+
+ return JWT.create()
+ .withHeader(new HashMap<>())
+ .withClaim("username", username)
+ .withExpiresAt(calendar.getTime())
+ .sign(Algorithm.HMAC256(tokenSignKey));
+ }
+
+ // 2銆佹牴鎹畉oken寰楀埌鐢ㄦ埛鍚嶄俊鎭�
+ public String getUserName(String token) {
+ JWTVerifier build = JWT.require(Algorithm.HMAC256(tokenSignKey)).build();
+ DecodedJWT verify = build.verify(token);
+ Claim username = verify.getClaim("username");
+ return username.asString();
+ }
+}
+
diff --git a/src/main/java/com/example/jz/auth/TokenLoginFilter.java b/src/main/java/com/example/jz/auth/TokenLoginFilter.java
new file mode 100644
index 0000000..a181e93
--- /dev/null
+++ b/src/main/java/com/example/jz/auth/TokenLoginFilter.java
@@ -0,0 +1,72 @@
+package com.example.jz.auth;
+
+import cn.hutool.json.JSONUtil;
+import com.example.jz.modle.R;
+import com.example.jz.modle.entity.SecurityUser;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.authentication.AuthenticationManager;
+import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
+import org.springframework.security.core.Authentication;
+import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
+import org.springframework.security.web.util.matcher.AntPathRequestMatcher;
+
+import javax.servlet.FilterChain;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.ArrayList;
+
+/**
+ * @author 瀹夌懢鐒�
+ * @data 2022/7/18 - 10:57 AM
+ * @description
+ */
+public class TokenLoginFilter extends UsernamePasswordAuthenticationFilter {
+
+ private TokenJwtManager tokenJwtManager;
+ private AuthenticationManager authenticationManager;
+
+ public TokenLoginFilter(TokenJwtManager tokenJwtManager, AuthenticationManager authenticationManager) {
+ this.tokenJwtManager = tokenJwtManager;
+ this.authenticationManager = authenticationManager;
+ this.setPostOnly(false); // 鍏抽棴鐧诲綍鍙厑璁� post
+ // 璁剧疆鐧婚檰璺緞锛屽苟涓攑ost璇锋眰
+ this.setRequiresAuthenticationRequestMatcher(new AntPathRequestMatcher("/login", "POST"));
+ }
+
+ // 1銆佽幏鍙栫櫥褰曢〉浼犻�掓潵鐨勮处鎴峰拰瀵嗙爜淇℃伅
+ @Override
+ public Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response) {
+ String username = request.getParameter("username");
+ String password = request.getParameter("password");
+
+ // 鐧诲綍鎺ュ彛 /login 璋冪敤璇锋眰鏃惰Е鍙�
+ // UsernamePasswordAuthenticationToken 灏佽鐧诲綍鏃朵紶閫掓潵鐨勬暟鎹俊鎭�
+ // 浜ょ粰 AuthenticationManager 杩涜鐧诲綍璁よ瘉鏍¢獙
+ return authenticationManager.authenticate(new UsernamePasswordAuthenticationToken(username,
+ password, new ArrayList<>()));
+ }
+
+ // 2銆佽璇佹垚鍔熻皟鐢�
+ @Autowired
+ protected void successfulAuthentication(HttpServletRequest request, HttpServletResponse response, FilterChain chain, Authentication authResult)
+ throws IOException, ServletException {
+ // 璁よ瘉鎴愬姛涔嬪悗锛岃幏鍙栬璇佸悗鐨勭敤鎴峰熀鏈俊鎭�
+ SecurityUser securityUser = (SecurityUser) authResult.getPrincipal();
+ // 鏍规嵁鐢ㄦ埛鍚嶇敓鎴愬搴旂殑token
+ String token = tokenJwtManager.createToken(securityUser.getUsername());
+ // token淇℃伅瀛樹簬redis銆佹暟鎹簱銆佺紦瀛樼瓑
+
+ // 璁剧疆杩斿洖娑堟伅绫诲瀷
+ response.setHeader("Content-type", "text/html;charset=UTF-8");
+ response.setCharacterEncoding("utf-8");
+ response.setContentType("application/json;charset=UTF-8");
+ // 杩斿洖缁欒姹傜
+ PrintWriter writer = response.getWriter();
+ writer.write(JSONUtil.toJsonStr(R.ok(token, "鐧诲綍鎴愬姛")));
+ writer.flush();
+ writer.close();
+ }
+}
diff --git a/src/main/java/com/example/jz/auth/UserDetailService.java b/src/main/java/com/example/jz/auth/UserDetailService.java
new file mode 100644
index 0000000..1ee9d8f
--- /dev/null
+++ b/src/main/java/com/example/jz/auth/UserDetailService.java
@@ -0,0 +1,50 @@
+package com.example.jz.auth;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.example.jz.dao.UserDao;
+import com.example.jz.modle.entity.SecurityUser;
+import com.example.jz.modle.entity.User;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.core.userdetails.UserDetails;
+import org.springframework.security.core.userdetails.UserDetailsService;
+import org.springframework.security.core.userdetails.UsernameNotFoundException;
+import org.springframework.stereotype.Service;
+
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * @author 瀹夌懢鐒�
+ * @data 2022/7/18 - 10:34 AM
+ * @description 鐢ㄦ埛璇︽儏鏈嶅姟
+ */
+@Service("userDetailsService")
+public class UserDetailService implements UserDetailsService {
+ // 娉ㄥ叆Usermapper
+ @Autowired
+ private UserDao userDao;
+
+
+ @Override
+ public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
+ // 閫氳繃username鏌ヨ鏁版嵁搴撹幏鍙栫敤鎴蜂俊鎭�
+ User user = userDao.selectOne(new LambdaQueryWrapper<>(User.class).eq(User::getLoginUsername, username));
+ // 鍒ゆ柇鐢ㄦ埛鏄惁瀛樺湪
+ if (user == null) {
+ throw new UsernameNotFoundException("璐︽埛淇℃伅涓嶅瓨鍦紒");
+ }
+ // 瀛樺湪瀵瑰簲鐨勭敤鎴蜂俊鎭紝鍒欏皢鍏跺皝瑁咃紝涓㈢粰security鑷繁鍘昏В鏋�
+
+ // 鐧诲綍鏃讹紝浼氳蛋杩欎釜鎺ュ彛
+ // 鏉冮檺鏆傛椂涓嶆煡鏁版嵁搴�
+ List<String> roles = Arrays.asList("ROLE_admin,admin");
+
+ // 灏嗘暟鎹皝瑁呯粰 SecurityUser 锛屽洜涓� SecurityUser 鏄� UserDetails 鐨勫瓙绫�
+ SecurityUser securityUser = new SecurityUser();
+ securityUser.setPermissionValueList(roles);
+ securityUser.setUsername(user.getLoginUsername());
+ securityUser.setPassword(user.getLoginPassword());
+
+ return securityUser;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/example/jz/controller/AnnouncementController.java b/src/main/java/com/example/jz/controller/AnnouncementController.java
index 1a91dbb..d537234 100644
--- a/src/main/java/com/example/jz/controller/AnnouncementController.java
+++ b/src/main/java/com/example/jz/controller/AnnouncementController.java
@@ -6,6 +6,7 @@
import com.example.jz.modle.entity.Announcement;
import com.example.jz.modle.R;
import com.example.jz.service.AnnouncementService;
+import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
diff --git a/src/main/java/com/example/jz/controller/CauseController.java b/src/main/java/com/example/jz/controller/CauseController.java
index 2609aba..fbe2d62 100644
--- a/src/main/java/com/example/jz/controller/CauseController.java
+++ b/src/main/java/com/example/jz/controller/CauseController.java
@@ -1,16 +1,23 @@
package com.example.jz.controller;
+import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.api.ApiController;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.jz.modle.R;
+import com.example.jz.modle.dto.AddReportDto;
import com.example.jz.modle.dto.CauseDto;
+import com.example.jz.modle.dto.ReportParamDto;
+import com.example.jz.modle.entity.Report;
+import com.example.jz.modle.vo.ReportListVo;
import com.example.jz.service.CauseService;
+import com.example.jz.service.ReportService;
+import com.example.jz.service.UserService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiResponse;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
-
-import javax.annotation.Resource;
/**
* 妗堜欢琛�(Cause)琛ㄦ帶鍒跺眰
@@ -20,13 +27,24 @@
*/
@RestController
@RequestMapping("cause")
-@Api(tags = "妗堜欢鍖�-妗堜欢褰曞叆")
+@Api(tags = "妗堜欢鍖�")
public class CauseController extends ApiController {
/**
* 鏈嶅姟瀵硅薄
*/
- @Resource
private CauseService causeService;
+ private ReportService reportService;
+
+ @Autowired
+ public void setReportService(ReportService reportService) {
+ this.reportService = reportService;
+ }
+
+ @Autowired
+ public void setCauseService(CauseService causeService) {
+ this.causeService = causeService;
+ }
+
@ApiOperation(httpMethod = "POST", value = "娣诲姞妗堜欢")
@PostMapping("/addCause")
@@ -39,8 +57,8 @@
@ApiOperation(httpMethod = "PUT", value = "淇敼妗堜欢")
@PutMapping("/updateCause")
@ApiResponse(message = "鎵ц鎴愬姛", code = 200)
- public R updateCause(@RequestBody CauseDto causeDto,Integer id) {
- return R.ok(causeService.updateCause(causeDto,id));
+ public R updateCause(@RequestBody CauseDto causeDto, Integer id) {
+ return R.ok(causeService.updateCause(causeDto, id));
}
@@ -79,6 +97,28 @@
causeService.deleteCause(id);
return R.ok();
}
- // TODO: 2022/7/15 瀵煎叆
+
+ @ApiOperation(httpMethod = "GET", value = "鏍规嵁缇ょ粍id鏌ヨ妗堜欢鍒嗛〉")
+ @GetMapping("/getAllReportList")
+ @ApiResponse(message = "鎵ц鎴愬姛", code = 200)
+ public R<IPage<ReportListVo>> get(Page<ReportListVo> page, ReportParamDto reportParamDto, Integer groupId) {
+ return R.ok(reportService.getPageByGroupId(page, reportParamDto, groupId));
+ }
+
+ @ApiOperation(httpMethod = "POST", value = "娣诲姞浜哄憳")
+ @PostMapping("/addReporter")
+ @ApiResponse(message = "鎵ц鎴愬姛", code = 200)
+ public R<Boolean> get(AddReportDto addReportDto) {
+ if (addReportDto.getReporterName() == null || addReportDto.getReporterName().equals("")) {
+ return R.failed("鎶ユ浜哄憳涓嶈兘涓虹┖");
+ }
+ if (addReportDto.getMobile() == null || addReportDto.getMobile().equals("")) {
+ return R.failed("鎶ユ浜哄憳鐢佃瘽涓嶈兘涓虹┖");
+ }
+ if (addReportDto.getIdcard() == null || addReportDto.getIdcard().equals("")) {
+ return R.failed("鎶ユ浜哄憳韬唤璇佷笉鑳戒负绌�");
+ }
+ return R.ok(causeService.addReportPeople(addReportDto));
+ }
}
diff --git a/src/main/java/com/example/jz/controller/ReportController.java b/src/main/java/com/example/jz/controller/ReportController.java
index a0c9c82..f2cc3f0 100644
--- a/src/main/java/com/example/jz/controller/ReportController.java
+++ b/src/main/java/com/example/jz/controller/ReportController.java
@@ -1,12 +1,10 @@
package com.example.jz.controller;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.api.ApiController;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.example.jz.enums.BusinessHttpStatus;
-import com.example.jz.exception.BusinessException;
import com.example.jz.modle.R;
+import com.example.jz.modle.dto.ReportParamDto;
import com.example.jz.modle.entity.Report;
import com.example.jz.modle.vo.ReportListVo;
import com.example.jz.service.ReportService;
@@ -18,7 +16,6 @@
import javax.annotation.Resource;
import java.io.Serializable;
import java.util.Date;
-import java.util.List;
/**
* 鎶ユ琛�(Report)琛ㄦ帶鍒跺眰
@@ -40,13 +37,13 @@
* 鍒嗛〉鏌ヨ鎵�鏈夋暟鎹�
*
* @param page 鍒嗛〉瀵硅薄
- * @param report 鏌ヨ瀹炰綋
+ * @param reportParamDto 鏌ヨ瀹炰綋
* @return 鎵�鏈夋暟鎹�
*/
@GetMapping
@ApiOperation(value = "鍒嗛〉鏌ヨ鎵�鏈夋暟鎹�")
- public R<IPage<Report>> selectAll(Page<Report> page, Report report) {
- return R.ok(reportService.page(page, new QueryWrapper<>(report)));
+ public R<IPage<ReportListVo>> selectAll(Page<ReportListVo> page, ReportParamDto reportParamDto) {
+ return R.ok(reportService.getPage(page, reportParamDto));
}
/**
@@ -57,8 +54,8 @@
*/
@GetMapping("{id}")
@ApiOperation(value = "閫氳繃涓婚敭鏌ヨ鍗曟潯鏁版嵁")
- public R<Report> selectOne(@PathVariable Serializable id) {
- return R.ok(reportService.getById(id));
+ public R<ReportListVo> selectOne(@PathVariable Serializable id) {
+ return R.ok(reportService.getReportListVoById(id));
}
/**
diff --git a/src/main/java/com/example/jz/dao/ReportDao.java b/src/main/java/com/example/jz/dao/ReportDao.java
index 34690be..53fd686 100644
--- a/src/main/java/com/example/jz/dao/ReportDao.java
+++ b/src/main/java/com/example/jz/dao/ReportDao.java
@@ -1,8 +1,14 @@
package com.example.jz.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.example.jz.modle.dto.ReportParamDto;
import com.example.jz.modle.entity.Report;
+import com.example.jz.modle.vo.ReportListVo;
import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.io.Serializable;
/**
* 鎶ユ琛�(Report)琛ㄦ暟鎹簱璁块棶灞�
@@ -13,5 +19,10 @@
@Mapper
public interface ReportDao extends BaseMapper<Report> {
+ Page<ReportListVo> getPage(Page<ReportListVo> page,@Param("reportDto") ReportParamDto reportParamDto);
+
+ ReportListVo getReportListVoById(Serializable id);
+
+ Page<ReportListVo> getPageByGroupId(Page<ReportListVo> page, ReportParamDto reportParamDto, Integer groupId);
}
diff --git a/src/main/java/com/example/jz/dao/UserDao.java b/src/main/java/com/example/jz/dao/UserDao.java
index 59e9595..8d45888 100644
--- a/src/main/java/com/example/jz/dao/UserDao.java
+++ b/src/main/java/com/example/jz/dao/UserDao.java
@@ -2,6 +2,7 @@
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.jz.modle.entity.User;
+import org.apache.ibatis.annotations.Mapper;
/**
* 鐢ㄦ埛琛�(User)琛ㄦ暟鎹簱璁块棶灞�
@@ -9,6 +10,6 @@
* @author makejava
* @since 2022-07-11 16:35:57
*/
+@Mapper
public interface UserDao extends BaseMapper<User> {
-
}
diff --git a/src/main/java/com/example/jz/modle/dto/AddReportDto.java b/src/main/java/com/example/jz/modle/dto/AddReportDto.java
new file mode 100644
index 0000000..9c68dc1
--- /dev/null
+++ b/src/main/java/com/example/jz/modle/dto/AddReportDto.java
@@ -0,0 +1,31 @@
+package com.example.jz.modle.dto;
+
+import com.example.jz.modle.entity.Report;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author 瀹夌懢鐒�
+ * @data 2022/7/18 - 2:12 PM
+ * @description
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class AddReportDto extends Report {
+ @ApiModelProperty(value = "鎶ユ浜�",dataType = "String")
+ private String reporterName;
+
+ @ApiModelProperty(value = "鎶ユ浜烘墜鏈哄彿",dataType = "String")
+ //鎶ユ浜烘墜鏈哄彿
+ private String mobile;
+
+ @ApiModelProperty(value = "鎶ユ浜鸿韩浠借瘉鍙�",dataType = "String")
+ //鎶ユ浜鸿韩浠借瘉鍙�
+ private String idcard;
+
+ @ApiModelProperty(value = "缇ょ粍id",dataType = "Integer")
+ private Integer groupId;
+}
diff --git a/src/main/java/com/example/jz/modle/dto/ReportParamDto.java b/src/main/java/com/example/jz/modle/dto/ReportParamDto.java
new file mode 100644
index 0000000..7708269
--- /dev/null
+++ b/src/main/java/com/example/jz/modle/dto/ReportParamDto.java
@@ -0,0 +1,43 @@
+package com.example.jz.modle.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+
+/**
+ * @author 瀹夌懢鐒�
+ * @data 2022/7/15 - 11:54 AM
+ * @description
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@ApiModel("淇濆畨鏌ヨ鏉′欢")
+public class ReportParamDto {
+ /**
+ * 鏌ヨ鏉′欢 鍙互鏄鍚嶄篃鍙互鏄韩浠借瘉鍙�
+ */
+ @ApiModelProperty(value = "鏌ヨ鏉′欢 鍙互鏄鍚嶄篃鍙互鏄韩浠借瘉鍙�")
+ private String people;
+ /**
+ * 鐢佃瘽鍙风爜
+ */
+ @ApiModelProperty(value = "鐢佃瘽鍙风爜")
+ private String phoneNumber;
+ /**
+ * 鏄惁杩涚兢
+ */
+ @ApiModelProperty(value = "鏄惁杩涚兢 0鏄� 1鍚�")
+ private String isInGroup;
+ /**
+ * 鏄惁鏈夋潗鏂�
+ */
+ @ApiModelProperty(value = "鏄惁鏈夋潗鏂� 0鏄� 1鍚�")
+ private String havaMaterial;
+}
diff --git a/src/main/java/com/example/jz/modle/entity/Report.java b/src/main/java/com/example/jz/modle/entity/Report.java
index 0a8b23f..260ef99 100644
--- a/src/main/java/com/example/jz/modle/entity/Report.java
+++ b/src/main/java/com/example/jz/modle/entity/Report.java
@@ -4,11 +4,13 @@
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.activerecord.Model;
+import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
+import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
@@ -38,6 +40,7 @@
//鎶ユ鏉愭枡鍥剧墖鍦板潃 澶氫釜鐢�,鍒嗛殧
private String reportMaterials;
//鎶ユ鏃堕棿
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date reportTime;
//鎶ユ鏂瑰紡
private String reportMethod;
@@ -46,8 +49,10 @@
//鐘舵�侊紝1涓洪�氳繃 0涓烘湭瀹℃牳
private Integer status;
//鍒涘缓鏃堕棿
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date ctime;
//琚獥鏃堕棿
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date cheatTime;
//琛ュ厖淇℃伅
private String information;
diff --git a/src/main/java/com/example/jz/modle/entity/SecurityUser.java b/src/main/java/com/example/jz/modle/entity/SecurityUser.java
new file mode 100644
index 0000000..75f26e0
--- /dev/null
+++ b/src/main/java/com/example/jz/modle/entity/SecurityUser.java
@@ -0,0 +1,73 @@
+package com.example.jz.modle.entity;
+
+import com.example.jz.auth.UserDetailService;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+import org.springframework.security.core.GrantedAuthority;
+import org.springframework.security.core.authority.SimpleGrantedAuthority;
+import org.springframework.security.core.userdetails.UserDetails;
+import org.springframework.util.StringUtils;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * @author 瀹夌懢鐒�
+ * @data 2022/7/18 - 11:00 AM
+ * @description
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Accessors(chain = true)
+public class SecurityUser implements UserDetails {
+
+ private String username;
+ private String password;
+ private List<String> permissionValueList;
+
+ @Override
+ public Collection<? extends GrantedAuthority> getAuthorities() {
+ Collection<GrantedAuthority> authorities = new ArrayList<>();
+ permissionValueList.forEach(permission -> {
+ if (!StringUtils.isEmpty(permission)) {
+ SimpleGrantedAuthority authority = new SimpleGrantedAuthority(permission);
+ authorities.add(authority);
+ }
+ });
+ return authorities;
+ }
+
+ @Override
+ public String getPassword() {
+ return this.password;
+ }
+
+ @Override
+ public String getUsername() {
+ return this.username;
+ }
+
+ @Override
+ public boolean isAccountNonExpired() {
+ return true;
+ }
+
+ @Override
+ public boolean isAccountNonLocked() {
+ return true;
+ }
+
+ @Override
+ public boolean isCredentialsNonExpired() {
+ return true;
+ }
+
+ @Override
+ public boolean isEnabled() {
+ return true;
+ }
+}
diff --git a/src/main/java/com/example/jz/modle/entity/User.java b/src/main/java/com/example/jz/modle/entity/User.java
index 20968c7..65b195b 100644
--- a/src/main/java/com/example/jz/modle/entity/User.java
+++ b/src/main/java/com/example/jz/modle/entity/User.java
@@ -1,5 +1,10 @@
package com.example.jz.modle.entity;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+
import java.io.Serializable;
import java.util.Date;
@@ -9,8 +14,14 @@
* @author makejava
* @since 2022-07-12 16:50:59
*/
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Accessors(chain = true)
public class User implements Serializable {
+
private static final long serialVersionUID = 853192857312832170L;
+
/**
* 鐢ㄦ埛鏄电О
*/
@@ -19,6 +30,10 @@
* 鐪熷疄濮撳悕
*/
private String realName;
+ /**
+ * 鐧诲綍璐﹀彿
+ */
+ private String loginUsername;
/**
* 鐧诲綍瀵嗙爜
*/
@@ -68,118 +83,6 @@
*/
private Integer id;
-
- public String getNickName() {
- return nickName;
- }
-
- public void setNickName(String nickName) {
- this.nickName = nickName;
- }
-
- public String getRealName() {
- return realName;
- }
-
- public void setRealName(String realName) {
- this.realName = realName;
- }
-
- public String getLoginPassword() {
- return loginPassword;
- }
-
- public void setLoginPassword(String loginPassword) {
- this.loginPassword = loginPassword;
- }
-
- public String getUserMobile() {
- return userMobile;
- }
-
- public void setUserMobile(String userMobile) {
- this.userMobile = userMobile;
- }
-
- public String getUserIdcard() {
- return userIdcard;
- }
-
- public void setUserIdcard(String userIdcard) {
- this.userIdcard = userIdcard;
- }
-
- public Date getModifyTime() {
- return modifyTime;
- }
-
- public void setModifyTime(Date modifyTime) {
- this.modifyTime = modifyTime;
- }
-
- public Date getUserRegtime() {
- return userRegtime;
- }
-
- public void setUserRegtime(Date userRegtime) {
- this.userRegtime = userRegtime;
- }
-
- public String getUserRegip() {
- return userRegip;
- }
-
- public void setUserRegip(String userRegip) {
- this.userRegip = userRegip;
- }
-
- public Date getUserLasttime() {
- return userLasttime;
- }
-
- public void setUserLasttime(Date userLasttime) {
- this.userLasttime = userLasttime;
- }
-
- public String getUserLastip() {
- return userLastip;
- }
-
- public void setUserLastip(String userLastip) {
- this.userLastip = userLastip;
- }
-
- public String getUserMemo() {
- return userMemo;
- }
-
- public void setUserMemo(String userMemo) {
- this.userMemo = userMemo;
- }
-
- public String getPic() {
- return pic;
- }
-
- public void setPic(String pic) {
- this.pic = pic;
- }
-
- public Integer getStatus() {
- return status;
- }
-
- public void setStatus(Integer status) {
- this.status = status;
- }
-
-
- public Integer getId() {
- return id;
- }
-
- public void setId(Integer id) {
- this.id = id;
- }
+ private Integer role;
}
diff --git a/src/main/java/com/example/jz/modle/vo/ReportListVo.java b/src/main/java/com/example/jz/modle/vo/ReportListVo.java
index f008f83..c87ddf0 100644
--- a/src/main/java/com/example/jz/modle/vo/ReportListVo.java
+++ b/src/main/java/com/example/jz/modle/vo/ReportListVo.java
@@ -2,6 +2,7 @@
import com.example.jz.modle.entity.Report;
import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@@ -12,4 +13,16 @@
//缇d
private Integer groupId;
+
+ //鎶ユ浜�
+ @ApiModelProperty(value = "鎶ユ浜�",dataType = "String")
+ private String reporterName;
+
+ @ApiModelProperty(value = "鎶ユ浜烘墜鏈哄彿",dataType = "String")
+ //鎶ユ浜烘墜鏈哄彿
+ private String mobile;
+
+ @ApiModelProperty(value = "鎶ユ浜鸿韩浠借瘉鍙�",dataType = "String")
+ //鎶ユ浜鸿韩浠借瘉鍙�
+ private String idcard;
}
diff --git a/src/main/java/com/example/jz/service/CauseService.java b/src/main/java/com/example/jz/service/CauseService.java
index 0d4adcb..20f6c79 100644
--- a/src/main/java/com/example/jz/service/CauseService.java
+++ b/src/main/java/com/example/jz/service/CauseService.java
@@ -2,6 +2,7 @@
import com.baomidou.mybatisplus.extension.service.IService;
import com.example.jz.modle.PageParam;
+import com.example.jz.modle.dto.AddReportDto;
import com.example.jz.modle.dto.CauseDto;
import com.example.jz.modle.entity.Cause;
import com.example.jz.modle.vo.AnnouncementVo;
@@ -67,5 +68,7 @@
* @return void
**/
void deleteCause(Integer id);
+
+ Boolean addReportPeople(AddReportDto addReportDto);
}
diff --git a/src/main/java/com/example/jz/service/ReportService.java b/src/main/java/com/example/jz/service/ReportService.java
index 89fa38b..95cfc6c 100644
--- a/src/main/java/com/example/jz/service/ReportService.java
+++ b/src/main/java/com/example/jz/service/ReportService.java
@@ -1,7 +1,12 @@
package com.example.jz.service;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
+import com.example.jz.modle.dto.ReportParamDto;
import com.example.jz.modle.entity.Report;
+import com.example.jz.modle.vo.ReportListVo;
+
+import java.io.Serializable;
/**
* 鎶ユ琛�(Report)琛ㄦ湇鍔℃帴鍙�
@@ -14,5 +19,11 @@
Boolean audit(Report report);
void leaveGroup(Integer id, Integer groupId);
+
+ Page<ReportListVo> getPage(Page<ReportListVo> page, ReportParamDto reportParamDto);
+
+ ReportListVo getReportListVoById(Serializable id);
+
+ Page<ReportListVo> getPageByGroupId(Page<ReportListVo> page, ReportParamDto reportParamDto, Integer groupId);
}
diff --git a/src/main/java/com/example/jz/service/impl/CauseServiceImpl.java b/src/main/java/com/example/jz/service/impl/CauseServiceImpl.java
index a7d54ad..bcc2ce5 100644
--- a/src/main/java/com/example/jz/service/impl/CauseServiceImpl.java
+++ b/src/main/java/com/example/jz/service/impl/CauseServiceImpl.java
@@ -1,10 +1,12 @@
package com.example.jz.service.impl;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.example.jz.dao.*;
import com.example.jz.modle.PageParam;
+import com.example.jz.modle.dto.AddReportDto;
import com.example.jz.modle.dto.CauseDto;
import com.example.jz.modle.entity.*;
import com.example.jz.modle.vo.AnnouncementVo;
@@ -22,7 +24,7 @@
import java.util.stream.Collectors;
/**
- * 案件表(Cause)表服务实现类
+ * 锟斤拷锟斤拷锟斤拷(Cause)锟斤拷锟斤拷锟绞碉拷锟斤拷锟�
*
* @author makejava
* @since 2022-07-13 11:52:58
@@ -40,6 +42,8 @@
CauseService causeService;
@Resource
GroupDao groupDao;
+ @Resource
+ GroupUserDao groupUserDao;
@Resource
AnnouncementDao announcementDao;
@@ -47,12 +51,12 @@
@Override
@Transactional(rollbackFor = Exception.class)
public Integer addCause(CauseDto causeDto) {
- //创建案件
+ //锟斤拷锟斤拷锟斤拷锟斤拷
Cause cause = new Cause();
BeanUtils.copyProperties(causeDto, cause);
cause.setCtime(new Date());
causeService.save(cause);
- //创建群组
+ //锟斤拷锟斤拷群锟斤拷
Group group = new Group();
group.setCtime(new Date());
group.setGroupName(causeDto.getName());
@@ -145,6 +149,31 @@
@Override
public void deleteCause(Integer id) {
- causeDao.deleteById(id);
+ causeDao.deleteById(id);
+ }
+
+ @Override
+ @Transactional
+ public Boolean addReportPeople(AddReportDto addReportDto) {
+ User user = userDao.selectOne(new LambdaQueryWrapper<User>(User.class).eq(User::getUserIdcard, addReportDto.getIdcard()));
+ if (user == null) {
+ // 濡傛灉鐢ㄦ埛涓嶅瓨鍦� 鍒欐坊鍔犵敤鎴�
+ user = new User().setUserIdcard(addReportDto.getIdcard()).setUserMobile(addReportDto.getMobile()).setRealName(addReportDto.getReporterName())
+ .setModifyTime(new Date()).setUserRegtime(new Date()).setPic(addReportDto.getPic());
+ userDao.insert(user);
+ }
+ // 娣诲姞浜哄憳杩涚兢缁�
+ groupUserDao.insert(new GroupUser().setGroupId(addReportDto.getGroupId()).setUserId(user.getId()).setCtime(new Date()).setBanSpeech(0));
+ // 娣诲姞鎶ユ淇℃伅
+ Report report = new Report();
+ BeanUtils.copyProperties(addReportDto, report);
+ report
+ .setUserId(user.getId())
+ .setCtime(new Date())
+ .setStatus(0)
+ .setReportMethod("鐜板満褰曞叆")
+ .setIsCommission("0").setReportTime(new Date())
+ .setCauseId(groupDao.selectOne(new QueryWrapper<Group>().eq("id", addReportDto.getGroupId())).getCauseId());
+ return reportDao.insert(report) > 0;
}
}
\ No newline at end of file
diff --git a/src/main/java/com/example/jz/service/impl/ReportServiceImpl.java b/src/main/java/com/example/jz/service/impl/ReportServiceImpl.java
index c56e2c2..e3ff882 100644
--- a/src/main/java/com/example/jz/service/impl/ReportServiceImpl.java
+++ b/src/main/java/com/example/jz/service/impl/ReportServiceImpl.java
@@ -2,19 +2,22 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.example.jz.dao.CauseDao;
import com.example.jz.dao.GroupDao;
import com.example.jz.dao.GroupUserDao;
import com.example.jz.dao.ReportDao;
+import com.example.jz.modle.dto.ReportParamDto;
import com.example.jz.modle.entity.Group;
import com.example.jz.modle.entity.GroupUser;
import com.example.jz.modle.entity.Report;
+import com.example.jz.modle.vo.ReportListVo;
import com.example.jz.service.ReportService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
+import java.io.Serializable;
import java.util.Date;
/**
@@ -55,7 +58,26 @@
@Override
public void leaveGroup(Integer id, Integer groupId) {
- groupUserDao.delete(new QueryWrapper<GroupUser>().eq("user_id",id).eq("group_id",groupId));
+ groupUserDao.delete(new QueryWrapper<GroupUser>().eq("user_id", id).eq("group_id", groupId));
+ }
+
+ @Override
+ public Page<ReportListVo> getPage(Page<ReportListVo> page, ReportParamDto reportParamDto) {
+ Page<ReportListVo> aaa = reportDao.getPage(page, reportParamDto);
+ aaa.getRecords().stream().forEach(x -> x.setIdcard(x.getIdcard().replaceAll("(?<=[\\d]{3})\\d(?=[\\d]{4})", "*")));
+ return aaa;
+ }
+
+ @Override
+ public ReportListVo getReportListVoById(Serializable id) {
+ return reportDao.getReportListVoById(id);
+ }
+
+ @Override
+ public Page<ReportListVo> getPageByGroupId(Page<ReportListVo> page, ReportParamDto reportParamDto, Integer groupId) {
+ Page<ReportListVo> aaa = reportDao.getPageByGroupId(page, reportParamDto,groupId);
+ aaa.getRecords().stream().forEach(x -> x.setIdcard(x.getIdcard().replaceAll("(?<=[\\d]{3})\\d(?=[\\d]{4})", "*")));
+ return aaa;
}
}
diff --git a/src/main/java/com/example/jz/utils/MD5Utils.java b/src/main/java/com/example/jz/utils/MD5Utils.java
new file mode 100644
index 0000000..4112d5e
--- /dev/null
+++ b/src/main/java/com/example/jz/utils/MD5Utils.java
@@ -0,0 +1,131 @@
+package com.example.jz.utils;
+
+import java.io.UnsupportedEncodingException;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+import java.util.Base64;
+
+/**
+ * @author 瀹夌懢鐒�
+ * @data 2022/7/18 - 10:52 AM
+ * @description 鍔犲瘑宸ュ叿绫�
+ */
+public class Md5Utils {
+
+ public static String md5(String str) {
+ try {
+ MessageDigest md = MessageDigest.getInstance("MD5");
+ md.update(str.getBytes());
+ byte b[] = md.digest();
+
+ str = byteToStr(b);
+ } catch (Exception e) {
+ e.printStackTrace();
+
+ }
+ return str;
+ }
+
+ public static String byteToStr(byte[] b){
+ int i;
+ StringBuffer buf = new StringBuffer("");
+ for (int offset = 0; offset < b.length; offset++) {
+ i = b[offset];
+ //System.out.println(i);
+ if (i < 0)
+ i += 256;
+ if (i < 16)
+ buf.append("0");
+ buf.append(Integer.toHexString(i));
+ }
+ return buf.toString();
+ }
+
+ /**
+ * 浼犲叆鏂囨湰鍐呭锛岃繑鍥� SHA-256 涓�
+ *
+ * @param strText
+ * @return
+ */
+ public static String SHA256(final String strText)
+ {
+ return SHA(strText, "SHA-256");
+ }
+
+ public static String SHA1(final String strText)
+ {
+ return SHA(strText, "SHA-1");
+ }
+
+ /**
+ * 浼犲叆鏂囨湰鍐呭锛岃繑鍥� SHA-512 涓�
+ *
+ * @param strText
+ * @return
+ */
+ public static String SHA512(final String strText)
+ {
+ return SHA(strText, "SHA-512");
+ }
+
+ /**
+ * 瀛楃涓� SHA 鍔犲瘑
+ *
+ * @param strText
+ * @return
+ */
+ private static String SHA(final String strText, final String strType)
+ {
+ // 杩斿洖鍊�
+ String strResult = null;
+
+ // 鏄惁鏄湁鏁堝瓧绗︿覆
+ if (strText != null && strText.length() > 0)
+ {
+ try
+ {
+ // SHA 鍔犲瘑寮�濮�
+ MessageDigest messageDigest = MessageDigest.getInstance(strType);
+ // 浼犲叆瑕佸姞瀵嗙殑瀛楃涓�
+ messageDigest.update(strText.getBytes("utf-8"));
+ // 寰楀埌 byte 绫诲瀷鐨勭粨鏋�
+ byte byteBuffer[] = messageDigest.digest();
+ strResult = byteToStr(byteBuffer);
+ }
+ catch (NoSuchAlgorithmException e)
+ {
+ e.printStackTrace();
+ }catch (UnsupportedEncodingException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+
+ }
+
+ return strResult;
+ }
+
+ public static String base64(String str){
+ String baseStr = null;
+ Base64.Encoder encoder = Base64.getEncoder();
+ byte[] textByte;
+ try {
+ textByte = str.getBytes("UTF-8");
+ baseStr = encoder.encodeToString(textByte);
+ } catch (UnsupportedEncodingException e) {
+ e.printStackTrace();
+ }
+
+ return baseStr;
+
+ }
+
+ public static void main(String[] args) {
+ String password = "bunana1";
+ System.out.println(md5(password));
+ //String base64 = base64(sha512);
+ //System.out.println(base64);
+ //String pwd1 = md5(base64);
+ //System.out.println(pwd1);
+ }
+}
diff --git a/src/main/resources/mapper/ReportDao.xml b/src/main/resources/mapper/ReportDao.xml
new file mode 100644
index 0000000..9242398
--- /dev/null
+++ b/src/main/resources/mapper/ReportDao.xml
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.example.jz.dao.ReportDao">
+
+ <select id="getPage" resultType="com.example.jz.modle.vo.ReportListVo">
+ select u.user_mobile mobile,u.user_idcard idcard,u.real_name reporterName,r.*
+ from report r
+ join user u on r.user_id = u.id
+ <where>
+ 1=1
+ <if test="reportParamDto.people != ''">
+ and (u.real_name like '%${reportParamDto.people}%' or u.user_idcard like '%${reportParamDto.people}%')
+ </if>
+ <if test="reportParamDto.phoneNumber != ''">
+ and u.user_mobile = ${reportParamDto.phoneNumber}
+ </if>
+ <if test="reportParamDto.havaMaterial != ''">
+ <if test="reportParamDto.havaMaterial == 1">
+ and r.report_materials is not null
+ </if>
+ <if test="reportParamDto.havaMaterial == 0">
+ and r.report_materials is null
+ </if>
+ </if>
+ <if test="reportParamDto.isInGroup != ''">
+ and r.status = ${reportParamDto.isInGroup}
+ </if>
+ </where>
+ </select>
+ <select id="getReportListVoById" resultType="com.example.jz.modle.vo.ReportListVo">
+ select u.user_mobile mobile, u.user_idcard idcard, u.real_name reporterName, r.*
+ from report r
+ join user u on r.user_id = u.id
+ where r.id = #{id}
+ </select>
+ <select id="getPageByGroupId" resultType="com.example.jz.modle.vo.ReportListVo">
+ select u.user_mobile mobile,u.user_idcard idcard,u.real_name reporterName,r.*
+ from report r
+ join user u on r.user_id = u.id
+ join group_user gu on gu.user_id = u.id
+ <where>
+ 1=1
+ <if test="reportParamDto.people != ''">
+ and (u.real_name like '%${reportParamDto.people}%' or u.user_idcard like '%${reportParamDto.people}%')
+ </if>
+ <if test="reportParamDto.phoneNumber != ''">
+ and u.user_mobile = ${reportParamDto.phoneNumber}
+ </if>
+ <if test="reportParamDto.havaMaterial != ''">
+ <if test="reportParamDto.havaMaterial == 1">
+ and r.report_materials is not null
+ </if>
+ <if test="reportParamDto.havaMaterial == 0">
+ and r.report_materials is null
+ </if>
+ </if>
+ <if test="reportParamDto.isInGroup != ''">
+ and r.status = ${reportParamDto.isInGroup}
+ </if>
+ </where>
+ and gu.group_id = #{groupId}
+ </select>
+</mapper>
diff --git a/src/test/java/com/example/jz/dao/UserDaoTest.java b/src/test/java/com/example/jz/dao/UserDaoTest.java
new file mode 100644
index 0000000..84eab22
--- /dev/null
+++ b/src/test/java/com/example/jz/dao/UserDaoTest.java
@@ -0,0 +1,30 @@
+package com.example.jz.dao;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.example.jz.modle.entity.User;
+import com.example.jz.utils.Md5Utils;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+/**
+ * @author 瀹夌懢鐒�
+ * @data 2022/7/18 - 11:49 AM
+ * @description
+ */
+@SpringBootTest
+class UserDaoTest {
+
+ @Autowired
+ private UserDao userDao;
+
+ void updateUser() {
+ User user = userDao.selectOne(new LambdaQueryWrapper<>(User.class).eq(User::getId, 1));
+ System.out.println(user);
+ user.setLoginUsername("admin");
+ user.setLoginPassword(Md5Utils.md5("admin"));
+ userDao.updateById(user);
+ }
+}
\ No newline at end of file
--
Gitblit v1.8.0