1.3.1、接口文档

YAPI接口地址:http://192.168.136.160:3000/project/19/interface/api/88
1.3.2、需求分析
数据库表
tb_user_info(用户基本资料表)

用户表和用户信息表是一对一的关系,两者采用主键关联的形式配置
主键关联:用户表主键和用户资料表主键要保持一致(如:用户表id=1,此用户的资料表id=1)
执行流程
手机端发送请求到消费者
消费者构造数据,调用提供者
消费者完成业务处理,操作数据库

1.3.3、代码实现
UserInfo实体类
- @Data
- @NoArgsConstructor
- @AllArgsConstructor
- public class UserInfo implements Serializable {
-
- /**
- * 由于userinfo表和user表之间是一对一关系
- * userInfo的id来源于user表的id
- */
- @TableId(type= IdType.INPUT)
- private Long id; //用户id
- private String nickname; //昵称
- private String avatar; //用户头像
- private String birthday; //生日
- private String gender; //性别
- private Integer age; //年龄
- private String city; //城市
- private String income; //收入
- private String education; //学历
- private String profession; //行业
- private Integer marriage; //婚姻状态
- private String tags; //用户标签:多个用逗号分隔
- private String coverPic; // 封面图片
- private Date created;
- private Date updated;
-
- //用户状态,1为正常,2为冻结
- @TableField(exist = false)
- private String userStatus = "1";
- }
UserController
- @RestController
- @RequestMapping("/user")
- public class UserController {
-
- @Autowired
- private UserInfoService userInfoService;
-
- /**
- * 保存用户信息
- * UserInfo
- * 请求头中携带token
- */
- @PostMapping("/loginReginfo")
- public ResponseEntity loginReginfo(@RequestBody UserInfo userInfo,
- @RequestHeader("Authorization") String token) {
- //1、解析token
- Claims claims = JwtUtils.getClaims(token);
- Integer id = (Integer) claims.get("id");
- //2、向userinfo中设置用户id
- userInfo.setId(Long.valueOf(id));
- //3、调用service
- userInfoService.save(userInfo);
- return ResponseEntity.ok(null);
- }
- }
UserInfoService
- @Service
- public class UserInfoService {
-
- @DubboReference
- private UserInfoApi userInfoApi;
-
- public void save(UserInfo userInfo) {
- userInfoApi.save(userInfo);
- }
- }
UserInfoApi
- public interface UserInfoApi {
- public void save(UserInfo userInfo);
- }
UserInfoApiImpl
- @DubboService
- public class UserInfoApiImpl implements UserInfoApi {
-
- @Autowired
- private UserInfoMapper userInfoMapper;
-
- @Override
- public void save(UserInfo userInfo) {
- userInfoMapper.insert(userInfo);
- }
- }
UserInfoMapper
- public interface UserInfoMapper extends BaseMapper<UserInfo> {
-
- }
1.4.1、需求分析
接口文档

YAPI地址:http://192.168.136.160:3000/project/19/interface/api/91
文件上传采用POST传递,mvc中经过文件解析器转化为MultipartFile对象处理
后续请求中,请求headr中都有Authorization参数。
执行流程

1.4.2、代码实现
UsersControler
- /**
- * 更新用户资料
- */
- @PutMapping
- public ResponseEntity updateUserInfo(@RequestBody UserInfo userInfo,@RequestHeader("Authorization") String token) {
- Claims claims = JwtUtils.getClaims(token);
- Integer id = (Integer) claims.get("id");
- userInfo.setId(Long.valueOf(id));
- userInfoService.update(userInfo);
- return ResponseEntity.ok(null);
- }
UserInfoService
- //更新用户头像
- public void updateHead(MultipartFile headPhoto, Long id) throws IOException {
- //1、将图片上传到阿里云oss
- String imageUrl = ossTemplate.upload(headPhoto.getOriginalFilename(), headPhoto.getInputStream());
- //2、调用百度云判断是否包含人脸
- boolean detect = aipFaceTemplate.detect(imageUrl);
- //2.1 如果不包含人脸,抛出异常
- if(!detect) {
- throw new RuntimeException();
- }else{
- //2.2 包含人脸,调用API更新
- UserInfo userInfo = new UserInfo();
- userInfo.setId(id);
- userInfo.setAvatar(imageUrl);
- userInfoApi.update(userInfo);
- }
- }
UserInfoApi
public void update(UserInfo userInfo);
UserInfoApiImpl
- @Override
- public void update(UserInfo userInfo) {
- userInfoMapper.updateById(userInfo);
- }
2.1.1、接口文档

YAPI地址:http://192.168.136.160:3000/project/19/interface/api/265
参数userID: 用户id,当不传递时,查询当前用户的资料信息
2.1.2、代码实现
UserInfoVo
- @Data
- @NoArgsConstructor
- @AllArgsConstructor
- public class UserInfoVo implements Serializable {
-
- private Long id; //用户id
- private String nickname; //昵称
- private String avatar; //用户头像
- private String birthday; //生日
- private String gender; //性别
- private String age; //年龄
- private String city; //城市
- private String income; //收入
- private String education; //学历
- private String profession; //行业
- private Integer marriage; //婚姻状态
- }
UsersController
- @RestController
- @RequestMapping("/users")
- public class UsersControler {
-
- @Autowired
- private UserInfoService userInfoService;
-
- /**
- * 查询用户资料
- */
- @GetMapping
- public ResponseEntity users(Long userID,@RequestHeader("Authorization") String token) {
- if(userID == null) {
- Claims claims = JwtUtils.getClaims(token);
- Integer id = (Integer) claims.get("id");
- userID = Long.valueOf(id);
- }
- UserInfoVo userInfo = userInfoService.findById(userID);
- return ResponseEntity.ok(userInfo);
- }
- }
UserInfoService
- //根据id查寻
- public UserInfoVo findById(Long id) {
- UserInfo userInfo = userInfoApi.findById(id);
-
- UserInfoVo vo = new UserInfoVo();
-
- BeanUtils.copyProperties(userInfo,vo); //copy同名同类型的属性
-
- if(userInfo.getAge() != null) {
- vo.setAge(userInfo.getAge().toString());
- }
-
- return vo;
- }
UserInfoApiImpl
- @Override
- public UserInfo findById(Long id) {
- return userInfoMapper.selectById(id);
- }
2.2.1、接口文档

YAPI地址:http://192.168.136.160:3000/project/19/interface/api/259
2.2.2、代码实现
UsersController
- /**
- * 更新用户资料
- */
- @PutMapping
- public ResponseEntity updateUserInfo(@RequestBody UserInfo userInfo,@RequestHeader("Authorization") String token) {
- Claims claims = JwtUtils.getClaims(token);
- Integer id = (Integer) claims.get("id");
- userID = Long.valueOf(id);
- userInfo.setId(UserHolder.getUserId());
- userInfoService.update(userInfo);
- return ResponseEntity.ok(null);
- }
UserInfoService
- //更新
- public void update(UserInfo userInfo) {
- userInfoApi.update(userInfo);
- }
UserInfoApiImpl
- @Override
- public void update(UserInfo userInfo) {
- userInfoMapper.updateById(userInfo);
- }