上班的时候静不下心来,回到家想了一下,梳理了一下思路,差不多是这样,应该没啥问题
SQL表结构
SQL语句
/*
对外结算单、明细、金额新增
*/
UPDATE detail_t AS A,amount_t AS B
SET A.del_flage = "N" ,B.del_flage ="N"
WHERE A.detail_id = B.detail_id
AND A.detail_id = 2;
/*
更新流程
1.获取当前数据库中涉及到的数据--->通过结算单号获得 第1次sql
2.对比前端传入的明细数据
2.1构造追加删除数据信息(向前端传入的数据中追加由明细ID和删除标志组成的数据 其他数据也要传入,防止误删)
2.1.1 使用 REPLACE INTO 进行更细插入
2.2将前端传入的缺少明细ID的数据认为是需要新增数据,单独抽取(在最后进行插入操作),并在List中移除
3.更新明细数据 第2次sql
4.通过2.2抽取的明细数据走新增操作 第3次sql
*/
UPDATE detail_t AS A,amount_t AS B
SET
/*foreach 1st START*/
A.del_flage = CASE A.detail_id
WHEN 1 THEN "N"
WHEN 2 THEN "Y"
END,
A.apply_id = CASE A.detail_id
WHEN 1 THEN 20211023
/*此处需要包含已经删除的数据内容,要不会清掉其他的*/
WHEN 2 THEN 20211022
END,
/*foreach 2nd START*/
/*若ID数据外为空的话就不加载语句 mybatis if语句控制*/
B.amount = CASE
WHEN B.detail_id=1 AND B.amount_type="other" THEN 333
WHEN B.detail_id=1 AND B.amount_type="food" THEN 888
/*此处需要包含已经删除的数据内容,要不会清掉其他的数据金额*/
END,
B.del_flage = CASE B.detail_id
WHEN 2 THEN "Y"
WHEN 1 THEN "N"
END
/*foreach 2nd END*/
/*foreach 1st END*/
/*这地方忘了怎么想的了,先这样吧,貌似不影响*/
WHERE A.detail_id = B.detail_id
AND B.detail_id IN (1,2)
Comments | NOTHING