✨ 支持应收账单异步作废

This commit is contained in:
caojia
2026-11-12 17:33:21 +08:00
parent 0d0613e810
commit 1ba431540d
16 changed files with 400 additions and 62 deletions
@@ -24,6 +24,8 @@
<result property="writtenOffAmount" column="written_off_amount"/>
<result property="unwrittenAmount" column="unwritten_amount"/>
<result property="status" column="status"/>
<result property="voidTaskId" column="void_task_id"/>
<result property="voidTaskError" column="void_task_error"/>
<result property="generationStatus" column="generation_status"/>
<result property="billVersion" column="bill_version"/>
<result property="bankAccountName" column="bank_account_name"/>
@@ -111,7 +113,11 @@
</sql>
<select id="selectArBillList" resultMap="ArBillResult">
select b.* from ar_bill b
select b.*, (select vt.task_id from ar_bill_void_task vt
where vt.ar_bill_id = b.ar_bill_id and vt.status = 'WAITING' limit 1) as void_task_id,
(select case when vt.status = 'FAILED' then vt.error_message else null end
from ar_bill_void_task vt where vt.ar_bill_id = b.ar_bill_id order by vt.task_id desc limit 1) as void_task_error
from ar_bill b
<include refid="arBillListFilter"/>
order by create_time desc, ar_bill_id desc
</select>
@@ -246,6 +252,9 @@
confirmed_time = case when #{status} = 'CONFIRMED' then sysdate() else confirmed_time end
where ar_bill_id = #{arBillId}
and status = #{fromStatus}
and (#{status} = 'VOID' or not exists (
select 1 from ar_bill_void_task vt where vt.ar_bill_id = #{arBillId} and vt.status = 'WAITING'
))
</update>
<update id="updateArBillAmounts">
@@ -257,6 +266,9 @@
update_time = sysdate()
where ar_bill_id = #{arBillId}
and status = #{fromStatus}
and not exists (
select 1 from ar_bill_void_task vt where vt.ar_bill_id = #{arBillId} and vt.status = 'WAITING'
)
</update>
<update id="updateArBillProgress">
@@ -0,0 +1,34 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.bms.receivable.mapper.ArBillVoidTaskMapper">
<resultMap id="Task" type="com.bms.receivable.domain.ArBillVoidTask">
<id property="taskId" column="task_id"/>
<result property="arBillId" column="ar_bill_id"/>
<result property="fromStatus" column="from_status"/>
<result property="reason" column="reason"/>
<result property="status" column="status"/>
<result property="errorMessage" column="error_message"/>
<result property="requestId" column="request_id"/>
<result property="createBy" column="create_by"/>
<result property="createUserId" column="create_user_id"/>
<result property="createTime" column="create_time"/>
<result property="finishedAt" column="finished_at"/>
</resultMap>
<insert id="insert" useGeneratedKeys="true" keyProperty="taskId">
insert into ar_bill_void_task (ar_bill_id, from_status, reason, status, request_id, create_by, create_user_id, create_time)
values (#{arBillId}, #{fromStatus}, #{reason}, 'WAITING', #{requestId}, #{createBy}, #{createUserId}, sysdate())
</insert>
<select id="selectById" resultMap="Task">select * from ar_bill_void_task where task_id = #{taskId}</select>
<select id="selectByIdForUpdate" resultMap="Task">select * from ar_bill_void_task where task_id = #{taskId} for update</select>
<select id="selectActive" resultMap="Task">
select * from ar_bill_void_task where ar_bill_id = #{arBillId} and status = 'WAITING' limit 1
</select>
<select id="selectActiveForUpdate" resultMap="Task">
select * from ar_bill_void_task where ar_bill_id = #{arBillId} and status = 'WAITING' limit 1 for update
</select>
<select id="selectWaiting" resultMap="Task">
select * from ar_bill_void_task where status = 'WAITING' order by task_id limit #{limit}
</select>
<update id="markSuccess">update ar_bill_void_task set status = 'SUCCESS', finished_at = sysdate() where task_id = #{taskId} and status = 'WAITING'</update>
<update id="markFailed">update ar_bill_void_task set status = 'FAILED', error_message = #{errorMessage}, finished_at = sysdate() where task_id = #{taskId} and status = 'WAITING'</update>
</mapper>