全部开发者教程

企业级在线办公系统

上个小节我们已经可以手动添加罚款记录了,如果填写错误,我们还可以对罚款记录加以修改。唯一的前提是这个罚款记录是未缴纳的。如果罚款已经缴纳了,那么任何人都无法修改罚款记录。

图片描述
从页面上来看,修改罚款记录用的还是添加罚款的弹窗,这个我们非常熟悉。

图片描述

一、编写持久层代码

TbAmectDao.xml文件中,声明SQL语句。

<select id="searchById" parameterType="int" resultType="HashMap">
    SELECT uuid,
           user_id AS userId,
           amount,
           type_id AS typeId,
           reason
    FROM tb_amect
    WHERE id = #{id}
</select>

<update id="update" parameterType="HashMap">
    UPDATE tb_amect
    SET amount = #{amount},
        type_id = #{typeId},
        reason = #{reason}
    WHERE id = #{id} AND status != 2
</update>

TbAmectDao.java接口中,定义DAO方法。

public interface TbAmectDao {
    ……
    public HashMap searchById(int id);
    public int update(HashMap param);
}

二、编写业务层代码

AmectService.java接口中,定义抽象方法。

public interface AmectService {
    ……
    public HashMap searchById(int id);
    public int update(HashMap param);
}

AmectServiceImpl.java类中,实现抽象方法。

public class AmectServiceImpl implements AmectService {
    ……
    @Override
    public HashMap searchById(int id) {
        HashMap map = amectDao.searchById(id);
        return map;
    }

    @Override
    public int update(HashMap param) {
        int rows = amectDao.update(param);
        return rows;
    }
}

三、编写Web层代码

创建SearchAmectByIdForm.java类,用来封装Ajax提交的数据。

@Data
@Schema(description = "根据ID查询罚款记录表单")
public class SearchAmectByIdForm {
    @NotNull(message = "id不能为空")
    @Min(value = 1, message = "id不能小于1")
    @Schema(description = "罚款记录ID")
    private Integer id;
}

创建UpdateAmectForm.java类,用来封装Ajax提交的数据。

@Data
@Schema(description = "更新罚款记录表单")
public class UpdateAmectForm {

    @NotNull(message = "id不能为空")
    @Min(value = 1, message = "id不能小于1")
    @Schema(description = "罚款记录ID")
    private Integer id;

    @NotBlank(message = "amount不能为空")
    @Pattern(regexp = "(^[1-9]([0-9]+)?(\\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\\.[0-9]([0-9])?$)", message = "amount内容不正确")
    @Schema(description = "罚款金额")
    private String amount;
    
    @NotNull(message = "typeId不能为空")
    @Min(value = 1, message = "typeId不能小于1")
    @Schema(description = "罚款类型编号")
    private Byte typeId;

    @NotBlank(message = "reason不能为空")
    @Length(max = 200, message = "reason不能超过200个字符")
    @Schema(description = "罚款原因")
    private String reason;

}

AmectController.java类中,定义Web方法,然后用Swagger测试这两个方法。

public class AmectController {
    ……
    @PostMapping("/searchById")
    @Operation(summary = "根据ID查找罚款记录")
    @SaCheckPermission(value = {"ROOT", "AMECT:SELECT"}, mode = SaMode.OR)
    public R searchById(@Valid @RequestBody SearchAmectByIdForm form) {
        HashMap map = amectService.searchById(form.getId());
        return R.ok(map);
    }

    @PostMapping("/update")
    @Operation(summary = "更新罚款记录")
    @SaCheckPermission(value = {"ROOT", "AMECT:UPDATE"}, mode = SaMode.OR)
    public R update(@Valid @RequestBody UpdateAmectForm form) {
        HashMap param = JSONUtil.parse(form).toBean(HashMap.class);
        int rows = amectService.update(param);
        return R.ok().put("rows", rows);
    }
}