diff --git a/src/demo/src/main/java/com/example/demo/DemoApplication.java b/src/demo/src/main/java/com/example/demo/DemoApplication.java index faac4b1..ae4d683 100644 --- a/src/demo/src/main/java/com/example/demo/DemoApplication.java +++ b/src/demo/src/main/java/com/example/demo/DemoApplication.java @@ -7,7 +7,7 @@ import org.springframework.context.annotation.ComponentScan; @SpringBootApplication -@ComponentScan(basePackages = {"com.example.demo.controller" ,"com.example.demo.config"}) +@ComponentScan(basePackages = {"com.example.demo.controller", "com.example.demo.config", "com.example.demo.service.impl"}) @MapperScan("com.example.demo.mapper") public class DemoApplication { diff --git a/src/demo/src/main/java/com/example/demo/config/config/BaseEntityMetaObjectHandler.java b/src/demo/src/main/java/com/example/demo/config/config/BaseEntityMetaObjectHandler.java new file mode 100644 index 0000000..1bc6134 --- /dev/null +++ b/src/demo/src/main/java/com/example/demo/config/config/BaseEntityMetaObjectHandler.java @@ -0,0 +1,33 @@ +package com.example.demo.config.config; + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; +import com.example.demo.domain.Task; +import org.apache.ibatis.reflection.MetaObject; +import org.springframework.stereotype.Component; + +import java.time.LocalDateTime; + + +@Component +public class BaseEntityMetaObjectHandler implements MetaObjectHandler { + + + @Override + public void insertFill(MetaObject metaObject) { + // 创建时间自动填充 + if (metaObject.hasSetter(Task.CREATE_TIME) && ObjectUtil.isNull(getFieldValByName(Task.CREATE_TIME, metaObject))) { + this.strictInsertFill(metaObject, Task.CREATE_TIME, LocalDateTime.class, LocalDateTime.now()); + } + } + + @Override + public void updateFill(MetaObject metaObject) { + //修改时间自动填充 + if (metaObject.hasSetter(Task.MODIFIED_TIME) && ObjectUtil.isNull(getFieldValByName(Task.MODIFIED_TIME, metaObject))) { + this.strictUpdateFill(metaObject, Task.MODIFIED_TIME, LocalDateTime.class, LocalDateTime.now()); + } + + } + +} diff --git a/src/demo/src/main/java/com/example/demo/config/config/MybatisPlusConfig.java b/src/demo/src/main/java/com/example/demo/config/config/MybatisPlusConfig.java new file mode 100644 index 0000000..6e4d511 --- /dev/null +++ b/src/demo/src/main/java/com/example/demo/config/config/MybatisPlusConfig.java @@ -0,0 +1,27 @@ +package com.example.demo.config.config; + +import com.baomidou.mybatisplus.annotation.DbType; +import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; +import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * MybatisPlus 配置类 + * + * @author huang + * @since 2022-03-18 + */ + +@Configuration +public class MybatisPlusConfig { + /** + * 分页插件 + */ + @Bean + public MybatisPlusInterceptor mybatisPlusInterceptor() { + MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); + interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); + return interceptor; + } +} diff --git a/src/demo/src/main/java/com/example/demo/config/config/WebConfig.java b/src/demo/src/main/java/com/example/demo/config/config/WebConfig.java new file mode 100644 index 0000000..38b92f8 --- /dev/null +++ b/src/demo/src/main/java/com/example/demo/config/config/WebConfig.java @@ -0,0 +1,19 @@ +package com.example.demo.config.config; + +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.ViewControllerRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +/** + * Web 配置类 + * + * @author huang + * @since 2022-03-18 + */ +@Configuration +public class WebConfig implements WebMvcConfigurer { + @Override + public void addViewControllers(ViewControllerRegistry registry) { + registry.addViewController("/").setViewName("login/login"); + } +} diff --git a/src/demo/src/main/java/com/example/demo/controller/Demmo.java b/src/demo/src/main/java/com/example/demo/controller/Demmo.java deleted file mode 100644 index 9d5b48e..0000000 --- a/src/demo/src/main/java/com/example/demo/controller/Demmo.java +++ /dev/null @@ -1,132 +0,0 @@ -package com.example.demo.controller; - -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.example.demo.common.HttpGetUtil; -import com.example.demo.domain.Rcode; -import com.example.demo.domain.User; -import com.example.demo.mapper.RcodeMapper; -import com.example.demo.mapper.UserMapper; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.tags.Tag; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.*; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.io.UnsupportedEncodingException; -import java.util.*; - -@Tag(name = "真·用户接口",description = "用户登录,") -@RestController -public class Demmo { - @RequestMapping("/index") - public String first(){ - return "index"; - } - @Autowired - private UserMapper userMapper; - @GetMapping("atlogin") - @Operation(summary = "真·微信登录接口") - - public Map getOpenId( HttpServletRequest request, - HttpServletResponse response, - @RequestParam(value = "code", required = false) String code) throws UnsupportedEncodingException { - response.setContentType("text/html"); - request.setCharacterEncoding("UTF-8"); - response.setCharacterEncoding("UTF-8"); - Map params = new HashMap(); - params.put("appid", "wx954296403ec15396"); - params.put("secret", "3317b29d14270cebb8f4e3521506f285"); - params.put("js_code", code); - params.put("grant_type", "authorization_code"); - - System.out.println(params); - String result = HttpGetUtil.httpRequestToString( - "https://api.weixin.qq.com/sns/jscode2session", params, "GET"); - JSONObject jsonObject = JSONObject.parseObject(result); - - String openid = jsonObject.get("openid").toString(); - System.out.println("得到的openid为:"+openid); - String sessionKey=jsonObject.get("session_key").toString(); - User user = this.userMapper.selectById(openid); - // uuid生成唯一key,用于维护微信小程序用户与服务端的会话 - String skey = UUID.randomUUID().toString(); - if (user == null) { - // 用户信息入库 - user = new User(); - user.setOpenId(openid); - user.setSkey(skey); - user.setCreateTime(new Date()); - user.setLastVisitTime(new Date()); - user.setSessionKey(sessionKey); - - - this.userMapper.insert(user); - } else { - // 已存在,更新用户登录时间 - user.setLastVisitTime(new Date()); - // 重新设置会话skey - user.setSkey(skey); - this.userMapper.updateById(user); - } - User user2 = this.userMapper.selectById(openid); - Map skeymap = new HashMap(); - skeymap.put("skey", skey); - skeymap.put("power", user2.getPower()); - return skeymap; - } - - @RequestMapping("/atbind") - @Operation(summary = "用户绑定接口") - public void atbind(@RequestParam(value = "studentnumber", required = true) String studentnumber, - @RequestParam(value = "name", required = true) String name, - @RequestParam(value = "skey", required = true) String skey) { - QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.like("skey", skey); - User user = this.userMapper.selectOne(queryWrapper); - user.setStudentNumber(studentnumber); - user.setName(name); - this.userMapper.updateById(user); - System.out.println(user); - - } - - @Autowired - RcodeMapper rcodeMapper; - - @RequestMapping("/getrcode") - @Operation(summary = "获取验证码") - public String getrcode(@RequestParam(value = "skey", required = true) String skey) { - Rcode rcode = this.rcodeMapper.selectById(skey); - String code = ""; - if (rcode == null) { - rcode = new Rcode(); - rcode.setSkey(skey); - code = rcode.createCode(); - this.rcodeMapper.insert(rcode); - } else { - code = rcode.createCode(); - rcode.setCode(code); - this.rcodeMapper.updateById(rcode); - } - return code; - } - - /** - * 用户登录接口(现阶段使用) - * 采用微信小程序获取验证码登录 - * - * @auth:kirito - */ - @RequestMapping("/webblogin") - @Operation(summary = "登录") - public void weblogin(@RequestParam(value = "code") String code) { - QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.like("code", code); - Rcode authrcode = this.rcodeMapper.selectOne(queryWrapper); - String skey = authrcode.getSkey(); - System.out.println(skey); - } - -} diff --git a/src/demo/src/main/java/com/example/demo/controller/UserController.java b/src/demo/src/main/java/com/example/demo/controller/UserController.java index 23bf15b..5aba5b6 100644 --- a/src/demo/src/main/java/com/example/demo/controller/UserController.java +++ b/src/demo/src/main/java/com/example/demo/controller/UserController.java @@ -1,84 +1,77 @@ package com.example.demo.controller; - +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.example.demo.common.HttpGetUtil; +import com.example.demo.domain.Rcode; import com.example.demo.domain.User; -import com.example.demo.common.GlobalResult; +import com.example.demo.mapper.RcodeMapper; import com.example.demo.mapper.UserMapper; -import com.example.demo.common.WechatUtil; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; -import org.apache.commons.codec.digest.DigestUtils; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; -import java.util.Date; -import java.util.UUID; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.UnsupportedEncodingException; +import java.util.*; -/** - * - */ -@Tag(name = "用户接口",description = "用户登录,") -@Controller +@Tag(name = "真·用户接口", description = "用户登录,") +@RestController public class UserController { + @RequestMapping("/index") + public String first() { + return "index"; + } @Autowired private UserMapper userMapper; /** - * 微信用户登录详情 + * 微信小程序用户登录接口 + * + * @param request + * @param response + * @param code + * @return + * @throws UnsupportedEncodingException + * @auth:kirito */ - @PostMapping("wx/login") - @Operation(summary = "微信登录接口") - @ResponseBody - public GlobalResult user_login(@RequestParam(value = "code", required = false) String code, - @RequestParam(value = "rawData", required = false) String rawData, - @RequestParam(value = "signature", required = false) String signature, - @RequestParam(value = "encrypteData", required = false) String encrypteData, - @RequestParam(value = "iv", required = false) String iv) { - // 用户非敏感信息:rawData - // 签名:signature - JSONObject rawDataJson = JSON.parseObject(rawData); - // 1.接收小程序发送的code - // 2.开发者服务器 登录凭证校验接口 appi + appsecret + code - JSONObject SessionKeyOpenId = WechatUtil.getSessionKeyOrOpenId(code); - // 3.接收微信接口服务 获取返回的参数 - String openid = SessionKeyOpenId.getString("openid"); - String sessionKey = SessionKeyOpenId.getString("session_key"); + @GetMapping("atlogin") + @Operation(summary = "真·微信登录接口") + public Map getOpenId(HttpServletRequest request, + HttpServletResponse response, + @RequestParam(value = "code", required = false) String code) throws UnsupportedEncodingException { + response.setContentType("text/html"); + request.setCharacterEncoding("UTF-8"); + response.setCharacterEncoding("UTF-8"); + Map params = new HashMap(); + params.put("appid", "wx954296403ec15396"); + params.put("secret", "3317b29d14270cebb8f4e3521506f285"); + params.put("js_code", code); + params.put("grant_type", "authorization_code"); + + System.out.println(params); + String result = HttpGetUtil.httpRequestToString( + "https://api.weixin.qq.com/sns/jscode2session", params, "GET"); + JSONObject jsonObject = JSONObject.parseObject(result); - // 4.校验签名 小程序发送的签名signature与服务器端生成的签名signature2 = sha1(rawData + sessionKey) - String signature2 = DigestUtils.sha1Hex(rawData + sessionKey); -// if (!signature.equals(signature2)) { -// return GlobalResult.build(500, "签名校验失败", null); -// } - // 5.根据返回的User实体类,判断用户是否是新用户,是的话,将用户信息存到数据库;不是的话,更新最新登录时间 + String openid = jsonObject.get("openid").toString(); + System.out.println("得到的openid为:" + openid); + String sessionKey = jsonObject.get("session_key").toString(); User user = this.userMapper.selectById(openid); // uuid生成唯一key,用于维护微信小程序用户与服务端的会话 String skey = UUID.randomUUID().toString(); if (user == null) { // 用户信息入库 -// String nickName = rawDataJson.getString("nickName"); -// String avatarUrl = rawDataJson.getString("avatarUrl"); -// String gender = rawDataJson.getString("gender"); -// String city = rawDataJson.getString("city"); -// String country = rawDataJson.getString("country"); -// String province = rawDataJson.getString("province"); - user = new User(); user.setOpenId(openid); user.setSkey(skey); user.setCreateTime(new Date()); user.setLastVisitTime(new Date()); user.setSessionKey(sessionKey); -// user.setCity(city); -// user.setProvince(province); -// user.setCountry(country); -// user.setAvatarUrl(avatarUrl); -// user.setGender(Integer.parseInt(gender)); -// user.setNickName(nickName); + this.userMapper.insert(user); } else { @@ -88,11 +81,80 @@ public class UserController { user.setSkey(skey); this.userMapper.updateById(user); } - //encrypteData比rowData多了appid和openid - //JSONObject userInfo = WechatUtil.getUserInfo(encrypteData, sessionKey, iv); - //6. 把新的skey返回给小程序 - GlobalResult result = GlobalResult.build(200, null, skey); - return result; + User user2 = this.userMapper.selectById(openid); + Map skeymap = new HashMap(); + skeymap.put("skey", skey); + skeymap.put("power", user2.getPower()); + return skeymap; + } + + /** + * 用户绑定接口 + * + * @param studentnumber + * @param name + * @param skey + * @auth:kirito + * @date:2022/10/20 + */ + @RequestMapping("/atbind") + @Operation(summary = "用户绑定接口") + public void atbind(@RequestParam(value = "studentnumber", required = true) String studentnumber, + @RequestParam(value = "name", required = true) String name, + @RequestParam(value = "skey", required = true) String skey) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.like("skey", skey); + User user = this.userMapper.selectOne(queryWrapper); + user.setStudentNumber(studentnumber); + user.setName(name); + this.userMapper.updateById(user); + System.out.println(user); + + } + + @Autowired + RcodeMapper rcodeMapper; + + /** + * 获取验证码 + * + * @param skey + * @return code + * @auth:kirito + * @date:2022/11/12 + */ + @RequestMapping("/getrcode") + @Operation(summary = "获取验证码") + public String getrcode(@RequestParam(value = "skey", required = true) String skey) { + Rcode rcode = this.rcodeMapper.selectById(skey); + String code = ""; + if (rcode == null) { + rcode = new Rcode(); + rcode.setSkey(skey); + code = rcode.createCode(); + this.rcodeMapper.insert(rcode); + } else { + code = rcode.createCode(); + rcode.setCode(code); + this.rcodeMapper.updateById(rcode); + } + return code; + } + + /** + * 用户登录接口(现阶段使用) + * 采用微信小程序获取验证码登录 + * + * @auth:kirito + */ + @RequestMapping("/webblogin") + @Operation(summary = "登录") + public void weblogin(@RequestParam(value = "code") String code) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.like("code", code); + Rcode authrcode = this.rcodeMapper.selectOne(queryWrapper); + String skey = authrcode.getSkey(); + System.out.println(skey); } } diff --git a/src/demo/src/main/java/com/example/demo/controller/taskController.java b/src/demo/src/main/java/com/example/demo/controller/taskController.java index d5a570c..cc99be2 100644 --- a/src/demo/src/main/java/com/example/demo/controller/taskController.java +++ b/src/demo/src/main/java/com/example/demo/controller/taskController.java @@ -11,18 +11,20 @@ import org.springframework.web.bind.annotation.*; @RestController @Tag(name = "WXL") @RequestMapping("/task") + public class taskController { - @Autowired(required = false) - TaskServiceImpl taskService; + @Autowired + public TaskServiceImpl taskService; + @Operation(summary = "获取任务信息") @GetMapping("/taskList") - public ResponseResult queryAll(){ + public ResponseResult queryAll() { return FormatResponseUtil.formatResponse(taskService.queryAll()); } @PostMapping("/addTask") - public ResponseResult addTask(@RequestBody Task task){ + public ResponseResult addTask(@RequestBody Task task) { return FormatResponseUtil.formatResponse(taskService.save(task)); } diff --git a/src/demo/src/main/java/com/example/demo/mapper/TaskMapper.java b/src/demo/src/main/java/com/example/demo/mapper/TaskMapper.java index 77fb933..06a6d3b 100644 --- a/src/demo/src/main/java/com/example/demo/mapper/TaskMapper.java +++ b/src/demo/src/main/java/com/example/demo/mapper/TaskMapper.java @@ -2,6 +2,7 @@ package com.example.demo.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.example.demo.domain.Task; +import org.apache.ibatis.annotations.Mapper; /** *

@@ -11,6 +12,7 @@ import com.example.demo.domain.Task; * @author huang * @since 2022-03-27 */ +@Mapper public interface TaskMapper extends BaseMapper { } diff --git a/src/demo/src/main/java/com/example/demo/service/impl/TaskServiceImpl.java b/src/demo/src/main/java/com/example/demo/service/impl/TaskServiceImpl.java index 93abada..bef3e01 100644 --- a/src/demo/src/main/java/com/example/demo/service/impl/TaskServiceImpl.java +++ b/src/demo/src/main/java/com/example/demo/service/impl/TaskServiceImpl.java @@ -10,6 +10,7 @@ import com.example.demo.domain.Task; import com.example.demo.mapper.TaskMapper; import com.example.demo.service.ITaskService; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Repository; import org.springframework.stereotype.Service; import java.util.Date; @@ -22,6 +23,7 @@ import java.util.List; * */ @Service + public class TaskServiceImpl extends ServiceImpl implements ITaskService { @Autowired(required = false)