報銷單是個通用場景,有通用邏輯,在此基礎上進行適度定制,省時省力,所以記錄下吧。
涉及的實體。
報銷單
發票(用來報銷)
總體是多對多關系,單次請求是一對多關系。
業務點
1、號碼列表不能重復。
業務點-對公對私
對私 一張發票只允許一張單據號占用。
對公 不進行對私校驗。
業務點-多系統標志
允許多業務系統占用。
特殊業務
對公對私 # 對公對私
跨系統標志 # 允許多系統使用
入參
入參報文
{"documentNumber": "Document202403040001","userAccount": "a-chushiyun","sourceSystem": "crm","invoiceList": [{"invoiceCode": "1111122222","invoiceNumber": "66668888","useAmount": "1","businessTypeLh": "1"}]
}
出參
出參報文
中間的邏輯
基于這種特殊的多對多關系,中間的邏輯就比較重要了。
單據號
代碼
號碼
特殊業務1標志
特殊業務1反饋消息
特殊業務2標志
特殊業務2提示信息
價稅合計 # 不變
已占用金額總和 # 求和
可用金額 # 直接查出
本次使用金額 # 入參傳
新可用金額 #
金額正確標志 # 校驗
金額正確提示信息 #
標志如果全部正確,該條記錄放到成功列表。
標志如果不全部正確,該條記錄放到失敗列表。
可以通過sql直接查出來嗎?
多對多關系
其他
應該是整體成功還是可以部分成功
從合理性來說,應該是部分成功更好,例如一個報銷單10張發票,9張成功,1張不符合,那么關聯9張即可,這樣避免事務回滾。
成功列表
代碼
號碼
失敗列表
代碼
號碼
提示信息
這種多對多關多關系有沒有優雅的判斷方式
單據 --1:N–> 發票列表 --1:N–> 每張發票關聯的記錄
全查出來再逐條判斷是不是太丑陋了,而且性能超低(目前就是這么做的,好處是實現起來方便些)。
特殊業務概念可以通過分組及開窗等直接算出來,化為一個個定制字段,這樣就比較簡單了。
連金額等也應該可以直接算出來。
注:統計后的數據也應該是基于發票的,也就是說是多條。