全部开发者教程

企业级在线办公系统

上节课我们写好了异步线程任务类,这节课我们继续的写后端代码。先把报销申请保存到tb_reim表,然后调用异步线程任务类,创建工作流实例。

图片描述
如果想要添加新的报销项目,可以点击“添加项目”按钮,然后原有报销项目下方就出现了新的报销项目。当报销项目超过两个的时候,任何报销项目都可以删除,只要点击右侧的垃圾桶图标即可。

图片描述

图片描述

一、编写持久层代码

TbReimDao.xml文件中,定义SQL语句。

<insert id="insert" parameterType="com.example.emos.api.db.pojo.TbReim" useGeneratedKeys="true" keyProperty="id">
    INSERT INTO tb_reim
    SET user_id = #{userId},
        content = #{content},
        amount = #{amount},
        anleihen = #{anleihen},
        balance = #{balance},
        type_id = #{typeId},
        status = #{status},
        create_time = NOW()
</insert>

TbReimDao.java接口中,声明DAO方法。

public interface TbReimDao {
    ……
    public int insert(TbReim reim);
}

二、编写业务层代码

ReimService.java接口中,声明抽象方法。

public interface ReimService {
    ……
    public int insert(TbReim reim);
}

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

public class ReimServiceImpl implements ReimService {
    @Autowired
    private ReimWorkflowTask reimWorkflowTask;
    
    ……
    @Override
    public int insert(TbReim reim) {
        int rows = reimDao.insert(reim);
        //开启工作流
        if (rows == 1) {
            reimWorkflowTask.startReimWorkflow(reim.getId(), reim.getUserId());
        } else {
            throw new EmosException("报销申请保存失败");
        }
        return rows;
    }
}

三、编写Web层代码

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

@Data
@Schema(description = "添加报销申请表单")
public class InsertReimForm {

    @NotBlank(message = "content不能为空")
    @Schema(description = "报销项目")
    private String content;

    @NotNull(message = "amount不能为空")
    @Schema(description = "报销总金额")
    private BigDecimal amount;

    @NotNull(message = "anleihen不能为空")
    @Schema(description = "借款金额")
    private BigDecimal anleihen;

    @NotNull(message = "balance不能为空")
    @Schema(description = "差额")
    private BigDecimal balance;

    @NotNull(message = "typeId不能为空")
    @Min(value = 1, message = "typeId不能小于1")
    @Schema(description = "类型ID")
    private Byte typeId;

}

ReimController.java类中,声明Web方法,然后用Swagger测试Web方法。

public class ReimController {
    ……
    @PostMapping("/insert")
    @Operation(summary = "添加报销申请")
    @SaCheckLogin
    public R insert(@Valid @RequestBody InsertReimForm form) {
        if (!JSONUtil.isJsonArray(form.getContent())) {
            return R.error("content不是JSON数组");
        }
        TbReim reim = JSONUtil.parse(form).toBean(TbReim.class);
        reim.setUserId(StpUtil.getLoginIdAsInt());
        reim.setStatus((byte) 1);
        int rows = reimService.insert(reim);
        return R.ok().put("rows", rows);
    }
}