【华夏OA项目实战】3-22 后端实现更新用户头像RESTful接口

本课程开发软件与项目初始代码可以通过云盘下载,答疑服务可以关注视频片头的二维码获取。
https://www.123912.com/s/A75eVv-27mod,提取码:yton

教学视频

上节课我们实现了修改用户信息,其中并不包括用户头像的修改。想要修改用户头像,则需要先选择上传图片,然后对图片剪裁,最后上传给后端项目保存到Minio存储桶中,还要把图片的URL地址更新到数据表里面。这节课我们就来编写后端代码实现这个功能。

视频中有代码讲解,大家认真观看视频,不要快进。有些操作只在视频中演示,只对着手册操作并不能完成案例,切记!

一、编写hxoa-oms子系统

1. 编写持久层

UserMapper.xml文件中,定义SQL语句更新用户头像URL地址。

<update id="resetPhoto" parameterType="Map">
    UPDATE tb_user
    SET photo = #{photo}
    WHERE id = #{id}
</update>

com.example.hxoa.cloud.oms.db.daoUserMapper.java接口中,声明DAO方法。

public interface UserMapper {
    ……
    public int resetPhoto(Map param);
}

2. 编写Dubbo层

com.example.hxoa.cloud.dubboUserApi.java接口中,声明抽象方法。

public interface UserApi {
    ……
    public R resetPhoto(Map param);
}

com.example.hxoa.cloud.oms.apiUserApiHandler.java类中,实现抽象方法。

@DubboService
@Slf4j
public class UserApiHandler implements UserApi {
    ……
    @Override
    @Transactional
    @SentinelResource("UserApiHandler.resetPhoto")
    public R resetPhoto(Map param) {
        int rows = userMapper.resetPhoto(param);
        if (rows == 1) {
            return R.ok().setAttribute("status", "SUCCESS");
        }
        else {
            throw new HxoaException("头像修改失败");
        }
    }
}

二、编写hxoa-mis子系统

1. 编写Dubbo层

com.example.hxoa.cloud.dubboUserApi.java接口中,声明抽象方法。

public interface UserApi {
    ……
    public R resetPhoto(Map param);
}

2. 编写业务层

com.example.hxoa.cloud.mis.serviceUserService.java接口中,声明抽象方法。

public interface UserService {
    ……
    public Map resetPhoto(Map param);
}

com.example.hxoa.cloud.mis.service.implUserServiceImpl.java类中,实现抽象方法。

@Service
public class UserServiceImpl implements UserService {
    @Resource
    private MyMinioUtil myMinioUtil;
    
    ……
    @Override
    @GlobalTransactional
    public Map resetPhoto(Map param) {
        long userId = MapUtil.getLong(param, "userId");
        MultipartFile photo = MapUtil.get(param, "photo", MultipartFile.class);
        //上传图片到minio
        String path = "/mis/user/photo/" + userId + ".jpg";
        myMinioUtil.uploadImage(path, photo);
        // 调用dubbo接口, 更新用户照片
        R r = userApi.resetPhoto(new HashMap() {{
            put("id", userId);
            put("photo", path);
        }});
        Map result = r.getAttributeAll();
        return result;
    }
}

3. 编写Web层

com.example.hxoa.cloud.mis.controllerUserController.java类中,声明Web方法。

@RestController
@RequestMapping("/user")
public class UserController {
    ……
    @PostMapping("/reset-photo")
    @SaCheckLogin
    @SentinelResource("UserController.resetPhoto")
    public R resetPhoto(@RequestParam("photo") MultipartFile photo) {
        long userId = StpUtil.getLoginIdAsLong();
        Map param = new HashMap() {{
            put("userId", userId);
            put("photo", photo);
        }};
        Map result = userService.resetPhoto(param);
        return R.ok().setAttributeAll(result);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值