【华夏OA项目实战】3-20 后端实现修改用户信息RESTful接口

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

教学视频

上节课我们成功添加了新用户,倘若想要修改用户信息,首先要把用户信息加载到前端页面的弹窗中。我们在VUE页面中修改好用户信息之后,OA系统要把用户信息更新到数据库中。因此这节课我们要写的后端代码分为两部分,其一是查询用户信息,其二是更新用户信息。

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

一、编写hxoa-oms子系统

1. 编写持久层

UserMapper.xml文件中,声明SQL语句查询和更改用户信息。

<select id="searchById" parameterType="long" resultType="HashMap">
    SELECT username,
           name,
           gender,
           tel,
           email,
           roles,
           dept_id AS deptId,
           job_id  AS jobId,
           status
    FROM tb_user
    WHERE id = #{id}
</select>
<update id="update" parameterType="Map">
    UPDATE tb_user
    SET username = #{username},
        name = #{name},
        gender = #{gender},
        tel = #{tel},
        email = #{email},
        roles = #{roles},
        dept_id = #{deptId},
        job_id = #{jobId},
        status = #{status}
    WHERE id = #{id}
</update>

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

public interface UserMapper {
    ……
    public HashMap searchById(long id);
    public int update(Map param);
}

2. 编写Dubbo层

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

public interface UserApi {
    ……
    public R searchById(long id);
    public R update(Map param);
}

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

@DubboService
@Slf4j
public class UserApiHandler implements UserApi {
    ……
    @Override
    @SentinelResource("UserApiHandler.searchById")
    public R searchById(long id) {
        Map map = userMapper.searchById(id);
        JSONArray roles = JSONUtil.parseArray(MapUtil.getStr(map, "roles"));
        map.put("roles", roles);
        return R.ok().setAttributeAll(new HashMap() {{
            put("status", "SUCCESS");
            put("user", map);
        }});
    }

    @Override
    @Transactional
    @SentinelResource("UserApiHandler.update")
    public R update(Map param) {
        String roles = JSONUtil.toJsonStr(MapUtil.getStr(param, "roles"));
        param.replace("roles", roles);
        int rows = userMapper.update(param);
        if (rows == 1) {
            return R.ok().setAttribute("status", "SUCCESS");
        }
        else {
            log.error("更新tb_user表的记录数量不为1");
            throw new HxoaException("更新用户失败");
        }
    }
}

二、编写hxoa-mis子系统

1. 编写Dubbo层

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

public interface UserApi {
    ……
    public R searchById(long id);
    public R update(Map param);
}

2. 编写业务层

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

public interface UserService {
    ……
    public Map searchById(long id);
    public Map update(Map param);
}

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

@Service
public class UserServiceImpl implements UserService {
    ……
    @Override
    public Map searchById(long id) {
        R r = userApi.searchById(id);
        Map result = r.getAttributeAll();
        return result;
    }

    @Override
    @GlobalTransactional
    public Map update(Map param) {
        R r = userApi.update(param);
        Map result = r.getAttributeAll();
        return result;
    }
}

3. 编写Web层

com.example.hxoa.cloud.mis.controller.form包中,创建SearchUserByIdForm.java类。

@Data
public class SearchUserByIdForm {
    @NotNull(message = "id不能为空")
    @Min(value = 1, message = "id必须大于0")
    private Long id;
}

com.example.hxoa.cloud.mis.controller.form包中,创建UpdateUserForm.java类。

@Data
public class UpdateUserForm {
    @NotNull(message = "用户ID不能为空")
    @Min(value = 1, message = "用户ID必须大于0")
    private Long id;

    @NotBlank(message = "用户名不能为空")
    @Pattern(regexp = "^[a-zA-Z0-9]{5,50}$", message = "用户名格式不正确")
    private String username;

    @NotBlank(message = "姓名不能为空")
    @Pattern(regexp = "^[\\u4e00-\\u9fa5]{2,20}$", message = "姓名格式不正确")
    private String name;

    @NotBlank(message = "性别不能为空")
    @Pattern(regexp = "^男$|^女$", message = "性别不正确")
    private String gender;

    @NotBlank(message = "手机号码不能为空")
    @Pattern(regexp = "^1[34578]\\d{9}$", message = "手机号码格式不正确")
    private String tel;

    @NotBlank(message = "邮箱不能为空")
    @Email(message = "邮箱格式不正确")
    private String email;

    @NotEmpty(message = "角色不能为空")
    @ArrayElementsGreaterThanZero(message = "roles数组中元素必须大于0")
    private Long[] roles;

    @NotNull(message = "部门ID不能为空")
    @Min(value = 1, message = "部门ID必须大于0")
    private Long deptId;

    @NotNull(message = "职务ID不能为空")
    @Min(value = 1, message = "职务ID必须大于0")
    private Long jobId;

    @NotNull(message = "状态不能为空")
    @Range(min = 1, max = 3, message = "状态必须为1~3之间的整数")
    private Byte status;
}

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

@RestController
@RequestMapping("/user")
public class UserController {
    ……
    @PostMapping("/search-by-id")
    @SaCheckPermission(value = {"ROOT", "USER:SELECT"}, mode = SaMode.OR)
    @SentinelResource("UserController.searchById")
    public R searchById(@RequestBody @Valid SearchUserByIdForm form) {
        Map result = userService.searchById(form.getId());
        return R.ok().setAttributeAll(result);
    }

    @PostMapping("/update")
    @SaCheckPermission(value = {"ROOT", "USER:UPDATE"}, mode = SaMode.OR)
    @SentinelResource("UserController.update")
    public R update(@RequestBody @Valid UpdateUserForm form) {
        Map param = BeanUtil.beanToMap(form);
        Map result = userService.update(param);
        if ("SUCCESS".equals(MapUtil.getStr(result, "status"))) {
            //该账户所有设备的token失效
            StpUtil.logout(form.getId());
        }
        return R.ok().setAttributeAll(result);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值