上节课我们写好了异步线程任务类,这节课我们继续的写后端代码。先把报销申请保存到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);
}
}