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