From fb3f3c721e3c758bde2e2449b4a1eef1500bd4ee Mon Sep 17 00:00:00 2001 From: chenhao Date: Wed, 24 Dec 2025 14:48:30 +0800 Subject: [PATCH] =?UTF-8?q?feat(finance):=20=E6=B7=BB=E5=8A=A0=E6=94=B6?= =?UTF-8?q?=E6=AC=BE=E5=8D=95=E6=89=8B=E5=B7=A5=E6=A0=B8=E9=94=80=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 实现收款单手工匹配核销界面,支持应收单与收款单关联 - 新增应收单和收款单过滤查询功能,支持按进货商和单据编号筛选 - 添加核销金额计算逻辑,包含含税和未税金额转换 - 实现收款计划选择功能,支持批量核销操作 - 添加核销金额校验机制,确保应收与收款金额平衡 - 新增收款单核销状态管理和金额更新功能 - 实现核销详情批量处理和数据同步机制 --- .../src/api/finance/receivableWriteoff.js | 26 + oms_web/oms_vue/src/api/finance/receive.js | 21 + .../finance/receive/components/AddForm.vue | 5 - .../writeoff/receipt/WriteOffDetailDrawer.vue | 91 +++ .../views/finance/writeoff/receipt/index.vue | 558 ++++++++++++++++++ .../writeoff/receipt/writeoffRecord.vue | 226 +++++++ .../views/system/partner/selectPartner.vue | 3 + .../controller/OmsReceiptBillController.java | 9 +- .../OmsReceivableWriteOffController.java | 113 ++++ .../com/ruoyi/sip/domain/OmsReceiptBill.java | 7 + .../domain/OmsReceivableReceiptDetail.java | 7 +- .../sip/domain/OmsReceivableWriteOff.java | 102 ++++ .../domain/OmsReceivableWriteOffDetail.java | 75 +++ .../sip/dto/WriteOffDetailResultDto.java | 105 +--- .../sip/dto/WriteOffReceiptRequestDto.java | 44 ++ .../mapper/OmsPayablePaymentDetailMapper.java | 2 +- .../sip/mapper/OmsReceiptBillMapper.java | 4 + .../OmsReceivableReceiptDetailMapper.java | 6 + .../mapper/OmsReceivableWriteOffMapper.java | 66 +++ .../IOmsPayablePaymentDetailService.java | 3 +- .../sip/service/IOmsReceiptBillService.java | 7 + .../IOmsReceivableReceiptDetailService.java | 11 +- .../IOmsReceivableWriteOffService.java | 77 +++ .../OmsPayablePaymentDetailServiceImpl.java | 4 +- .../impl/OmsPayableWriteOffServiceImpl.java | 5 +- .../impl/OmsReceiptBillServiceImpl.java | 146 ++++- .../impl/OmsReceivableBillServiceImpl.java | 4 +- ...OmsReceivableReceiptDetailServiceImpl.java | 41 ++ .../OmsReceivableWriteOffServiceImpl.java | 314 ++++++++++ .../OmsReceiptBill/OmsReceiptBillMapper.xml | 32 + .../mapper/OmsReceivableWriteOffMapper.xml | 150 +++++ .../finance/OmsPayablePaymentDetailMapper.xml | 6 +- .../sip/OmsReceivableReceiptDetailMapper.xml | 61 +- 33 files changed, 2188 insertions(+), 143 deletions(-) create mode 100644 oms_web/oms_vue/src/api/finance/receivableWriteoff.js create mode 100644 oms_web/oms_vue/src/views/finance/writeoff/receipt/WriteOffDetailDrawer.vue create mode 100644 oms_web/oms_vue/src/views/finance/writeoff/receipt/index.vue create mode 100644 oms_web/oms_vue/src/views/finance/writeoff/receipt/writeoffRecord.vue create mode 100644 ruoyi-sip/src/main/java/com/ruoyi/sip/controller/OmsReceivableWriteOffController.java create mode 100644 ruoyi-sip/src/main/java/com/ruoyi/sip/domain/OmsReceivableWriteOff.java create mode 100644 ruoyi-sip/src/main/java/com/ruoyi/sip/domain/OmsReceivableWriteOffDetail.java create mode 100644 ruoyi-sip/src/main/java/com/ruoyi/sip/dto/WriteOffReceiptRequestDto.java create mode 100644 ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/OmsReceivableWriteOffMapper.java create mode 100644 ruoyi-sip/src/main/java/com/ruoyi/sip/service/IOmsReceivableWriteOffService.java create mode 100644 ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OmsReceivableWriteOffServiceImpl.java create mode 100644 ruoyi-sip/src/main/resources/mapper/OmsReceivableWriteOffMapper.xml diff --git a/oms_web/oms_vue/src/api/finance/receivableWriteoff.js b/oms_web/oms_vue/src/api/finance/receivableWriteoff.js new file mode 100644 index 00000000..ce2f84ff --- /dev/null +++ b/oms_web/oms_vue/src/api/finance/receivableWriteoff.js @@ -0,0 +1,26 @@ +import request from '@/utils/request' + +// 查询销售核销记录列表 +export function listReceivableWriteOff(query) { + return request({ + url: '/finance/receivable/writeoff/list', + method: 'get', + params: query + }) +} + +// 查询销售核销详情 +export function getReceivableWriteOff(id) { + return request({ + url: '/finance/receivable/writeoff/' + id, + method: 'get' + }) +} + +// 删除销售核销记录 +export function delReceivableWriteOff(ids) { + return request({ + url: '/finance/receivable/writeoff/' + ids, + method: 'delete' + }) +} diff --git a/oms_web/oms_vue/src/api/finance/receive.js b/oms_web/oms_vue/src/api/finance/receive.js index 6b1e2029..27dd224a 100644 --- a/oms_web/oms_vue/src/api/finance/receive.js +++ b/oms_web/oms_vue/src/api/finance/receive.js @@ -94,3 +94,24 @@ export function submitRefund(data) { needLoading: true }) } + +// 查询收款单列表 (核销专用) +export function listReceiptForWriteOff(query) { + return request({ + url: '/finance/receipt/write-off/list', + method: 'post', + headers: { + 'Content-Type': 'application/x-www-form-urlencoded' + }, + data: tansParams(query) + }) +} + +// 手工匹配核销 +export function manualReceiptWriteOff(data) { + return request({ + url: '/finance/receivable/writeoff', + method: 'post', + data: data + }) +} diff --git a/oms_web/oms_vue/src/views/finance/receive/components/AddForm.vue b/oms_web/oms_vue/src/views/finance/receive/components/AddForm.vue index 4b4f38f9..39c73fec 100644 --- a/oms_web/oms_vue/src/views/finance/receive/components/AddForm.vue +++ b/oms_web/oms_vue/src/views/finance/receive/components/AddForm.vue @@ -424,11 +424,6 @@ export default { this.$emit("submit", submitData); } else { - // Pre-receipt logic - if (this.selectedRows.length !== 1) { - this.$modal.msgWarning("请选择一笔订单"); - return; - } if ((this.form.totalPriceWithTax || 0) <= 0) { this.$message.warning("预收金额需要大于0"); return; diff --git a/oms_web/oms_vue/src/views/finance/writeoff/receipt/WriteOffDetailDrawer.vue b/oms_web/oms_vue/src/views/finance/writeoff/receipt/WriteOffDetailDrawer.vue new file mode 100644 index 00000000..560e9796 --- /dev/null +++ b/oms_web/oms_vue/src/views/finance/writeoff/receipt/WriteOffDetailDrawer.vue @@ -0,0 +1,91 @@ + + + + + diff --git a/oms_web/oms_vue/src/views/finance/writeoff/receipt/index.vue b/oms_web/oms_vue/src/views/finance/writeoff/receipt/index.vue new file mode 100644 index 00000000..9ed37a6b --- /dev/null +++ b/oms_web/oms_vue/src/views/finance/writeoff/receipt/index.vue @@ -0,0 +1,558 @@ + + + + + diff --git a/oms_web/oms_vue/src/views/finance/writeoff/receipt/writeoffRecord.vue b/oms_web/oms_vue/src/views/finance/writeoff/receipt/writeoffRecord.vue new file mode 100644 index 00000000..3a1f7f4d --- /dev/null +++ b/oms_web/oms_vue/src/views/finance/writeoff/receipt/writeoffRecord.vue @@ -0,0 +1,226 @@ + + + diff --git a/oms_web/oms_vue/src/views/system/partner/selectPartner.vue b/oms_web/oms_vue/src/views/system/partner/selectPartner.vue index a37f7156..271f927c 100644 --- a/oms_web/oms_vue/src/views/system/partner/selectPartner.vue +++ b/oms_web/oms_vue/src/views/system/partner/selectPartner.vue @@ -70,6 +70,9 @@ export default { } }, }, + created() { + this.getList(); + }, methods: { /** 查询进货商列表 */ getList() { diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/OmsReceiptBillController.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/OmsReceiptBillController.java index 2b16455a..3e3ed092 100644 --- a/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/OmsReceiptBillController.java +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/OmsReceiptBillController.java @@ -42,7 +42,14 @@ public class OmsReceiptBillController extends BaseController { List list = omsReceiptBillService.queryAll(omsReceiptBill); return getDataTable(list); } - + @PostMapping("/write-off/list") + @ResponseBody + public TableDataInfo listWriteOff(OmsReceiptBill omsReceiptBill) + { + startPage(); + List list = omsReceiptBillService.listWriteOff(omsReceiptBill); + return getDataTable(list); + } @GetMapping(value = "/{id}") public AjaxResult getInfo(@PathVariable("id") Long id) { diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/OmsReceivableWriteOffController.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/OmsReceivableWriteOffController.java new file mode 100644 index 00000000..99703ecd --- /dev/null +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/OmsReceivableWriteOffController.java @@ -0,0 +1,113 @@ +package com.ruoyi.sip.controller; + +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.sip.domain.OmsReceivableWriteOff; +import com.ruoyi.sip.dto.WriteOffDetailResultDto; +import com.ruoyi.sip.dto.WriteOffReceiptRequestDto; +import com.ruoyi.sip.dto.WriteOffRequestDto; +import com.ruoyi.sip.service.IOmsReceivableWriteOffService; +import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 销售应收核销单Controller + * + * @author zghz + * @date 2025-12-23 + */ +@RestController +@RequestMapping("/finance/receivable/writeoff") +public class OmsReceivableWriteOffController extends BaseController +{ + @Autowired + private IOmsReceivableWriteOffService omsReceivableWriteOffService; + + /** + * 查询销售应收核销单列表 + */ + @RequiresPermissions("sip:receivable:writeoff:list") + @GetMapping("/list") + public TableDataInfo list(OmsReceivableWriteOff writeOffQueryDto) + { + startPage(); + List list = omsReceivableWriteOffService.selectOmsReceivableWriteOffList(writeOffQueryDto); + return getDataTable(list); + } + + /** + * 导出销售应收核销单列表 + */ + @RequiresPermissions("sip:receivable:writeoff:export") + @Log(title = "销售应收核销单", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, OmsReceivableWriteOff writeOffQueryDto) + { + List list = omsReceivableWriteOffService.selectOmsReceivableWriteOffList(writeOffQueryDto); + ExcelUtil util = new ExcelUtil(OmsReceivableWriteOff.class); + util.exportExcel(response, list, "销售应收核销单数据"); + } + + /** + * 获取销售应收核销单详细信息 + */ + @RequiresPermissions("sip:receivable:writeoff:query") + @GetMapping(value = "/{id}") + public AjaxResult getInfo(@PathVariable("id") Long id) + { + return AjaxResult.success(omsReceivableWriteOffService.selectOmsReceivableWriteOffById(id)); + } + + /** + * 新增销售应收核销单 + */ + @RequiresPermissions("sip:receivable:writeoff:add") + @Log(title = "销售应收核销单", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody WriteOffReceiptRequestDto writeOffRequestDto) + { + Long writeOffId = omsReceivableWriteOffService.userWriteOff(writeOffRequestDto); + return AjaxResult.success(); + } + + /** + * 修改销售应收核销单 + */ + @RequiresPermissions("sip:receivable:writeoff:edit") + @Log(title = "销售应收核销单", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody OmsReceivableWriteOff omsReceivableWriteOff) + { + return toAjax(omsReceivableWriteOffService.updateOmsReceivableWriteOff(omsReceivableWriteOff)); + } + + /** + * 删除销售应收核销单 + */ + @RequiresPermissions("sip:receivable:writeoff:remove") + @Log(title = "销售应收核销单", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public AjaxResult remove(@PathVariable Long[] ids) + { + return toAjax(omsReceivableWriteOffService.deleteOmsReceivableWriteOffByIds(ids)); + } + + /** + * 根据核销单ID查询核销详情 + */ + @RequiresPermissions("sip:receivable:writeoff:query") + @GetMapping("/details/{writeOffId}") + public AjaxResult getWriteOffDetails(@PathVariable("writeOffId") Long writeOffId) + { + List details = omsReceivableWriteOffService.selectWriteOffDetailsByWriteOffId(writeOffId); + return AjaxResult.success(details); + } +} \ No newline at end of file diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/OmsReceiptBill.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/OmsReceiptBill.java index 3f6b35c8..31f97a21 100644 --- a/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/OmsReceiptBill.java +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/OmsReceiptBill.java @@ -29,6 +29,7 @@ public class OmsReceiptBill { */ private String receiptBillCode; + private List receiptBillCodeList; /** * 收款单类型 (FROM_RECEIVABLE, PRE_RECEIPT) */ @@ -163,6 +164,12 @@ public class OmsReceiptBill { private Long originalBillId; private OmsFinAttachment attachment; private List detailDTOList; + + + + private BigDecimal writeOffAmount; + private BigDecimal writeOffAmountWithoutTax; + private BigDecimal writeOffTaxAmount; @Getter public enum ReceiptBillTypeEnum { diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/OmsReceivableReceiptDetail.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/OmsReceivableReceiptDetail.java index 7aebe91c..5370dc33 100644 --- a/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/OmsReceivableReceiptDetail.java +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/OmsReceivableReceiptDetail.java @@ -30,6 +30,7 @@ public class OmsReceivableReceiptDetail extends BaseEntity /** 收款计划ID */ @Excel(name = "收款计划ID") private Long receiptPlanId; + private List receiptPlanIdList; /** 应收单ID */ @Excel(name = "应收单ID") @@ -65,8 +66,10 @@ public class OmsReceivableReceiptDetail extends BaseEntity private OmsFinAttachment finAttachment; private Date actualReceiptTime; private String receiptStatus; - private BigDecimal paymentAmountWithoutTax; - private BigDecimal paymentAmountTax; + private BigDecimal receiptAmountWithoutTax; + private BigDecimal receiptAmountTax; + private Long writeOffId; + private List writeOffIdList; @Getter public enum ReceivableDetailTypeEnum { diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/OmsReceivableWriteOff.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/OmsReceivableWriteOff.java new file mode 100644 index 00000000..bc84fc79 --- /dev/null +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/OmsReceivableWriteOff.java @@ -0,0 +1,102 @@ +package com.ruoyi.sip.domain; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; +import com.ruoyi.sip.domain.dto.ReceiptDetailDTO; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.Getter; + +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; + +/** + * 销售应收核销单对象 oms_receivable_write_off + * + * @author zghz + * @date 2025-12-23 + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class OmsReceivableWriteOff extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 主键ID */ + private Long id; + + /** 核销单编号 */ + @Excel(name = "核销单编号") + private String writeOffCode; + + /** 核销类型 AUTO:系统自动核销 USER:用户手动核销 */ + @Excel(name = "核销类型") + private String writeOffType; + + /** 收款单编号 */ + @Excel(name = "收款单编号") + private String receiptBillCode; + private List receiptBillCodeList; + private String receivableBillCode; + + /** 客户编码 */ + @Excel(name = "客户编码") + private String partnerCode; + private String partnerName; + + /** 本次核销总金额 */ + @Excel(name = "本次核销总金额") + private BigDecimal writeOffAmount ; + + /** 本次核销未税总金额 */ + @Excel(name = "本次核销未税总金额") + private BigDecimal writeOffAmountWithoutTax; + + /** 本次核销税额 */ + @Excel(name = "本次核销税额") + private BigDecimal writeOffTaxAmount; + + /** 核销时间 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @Excel(name = "核销时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") + private Date writeOffTime; + + /** 备注 */ + @Excel(name = "备注") + private String remark; + + /** 创建人 */ + private String createBy; + private String createByName; + + /** 创建时间 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date createTime; + + /** 更新人 */ + private String updateBy; + + /** 更新时间 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date updateTime; + private List detailList; + private OmsReceiptBill receiptBill; + + @Getter + public enum WriteOffTypeEnum { + + AUTO("AUTO", "自动核销"), + USER("USER", "手动核销"), + + ; + private final String code; + private final String desc; + WriteOffTypeEnum(String code, String desc) { + this.code = code; + this.desc = desc; + } + } + +} \ No newline at end of file diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/OmsReceivableWriteOffDetail.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/OmsReceivableWriteOffDetail.java new file mode 100644 index 00000000..5ca067f2 --- /dev/null +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/OmsReceivableWriteOffDetail.java @@ -0,0 +1,75 @@ +package com.ruoyi.sip.domain; + +import java.math.BigDecimal; +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 应收单收款计划核销明细对象 oms_receivable_write_off_detail + * + * @author zghz + * @date 2025-12-23 + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class OmsReceivableWriteOffDetail extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 主键ID */ + private Long id; + + /** 核销单ID */ + private Long writeOffId; + + /** 应收单ID */ + private Long receivableBillId; + + /** 应收单编号 */ + @Excel(name = "应收单编号") + private String receivableBillCode; + + /** 应收单收款计划ID */ + private Long receiptPlanId; + + /** 收款单ID */ + private Long receiptBillId; + + /** 收款单编号 */ + @Excel(name = "收款单编号") + private String receiptBillCode; + + /** 核销金额 */ + @Excel(name = "核销金额") + private BigDecimal writeOffAmount = BigDecimal.ZERO; + + /** 本次核销未税总金额 */ + @Excel(name = "本次核销未税总金额") + private BigDecimal writeOffAmountWithoutTax = BigDecimal.ZERO; + + /** 本次核销税额 */ + @Excel(name = "本次核销税额") + private BigDecimal writeOffTaxAmount = BigDecimal.ZERO; + + /** 备注 */ + @Excel(name = "备注") + private String remark; + + /** 创建人 */ + private String createBy; + + /** 创建时间 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date createTime; + + /** 更新人 */ + private String updateBy; + + /** 更新时间 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date updateTime; +} \ No newline at end of file diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/dto/WriteOffDetailResultDto.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/dto/WriteOffDetailResultDto.java index f02ebf99..27c6f482 100644 --- a/ruoyi-sip/src/main/java/com/ruoyi/sip/dto/WriteOffDetailResultDto.java +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/dto/WriteOffDetailResultDto.java @@ -3,6 +3,7 @@ package com.ruoyi.sip.dto; import java.math.BigDecimal; import java.util.Date; import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; /** * 应付单付款计划核销详情查询结果DTO @@ -10,6 +11,7 @@ import com.fasterxml.jackson.annotation.JsonFormat; * @author zghz * @date 2025-12-16 */ +@Data public class WriteOffDetailResultDto { /** 主键ID */ @@ -52,108 +54,5 @@ public class WriteOffDetailResultDto @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date createTime; - // Getters and Setters - public Long getId() { - return id; - } - public void setId(Long id) { - this.id = id; - } - - public Long getWriteOffId() { - return writeOffId; - } - - public void setWriteOffId(Long writeOffId) { - this.writeOffId = writeOffId; - } - - public String getWriteOffCode() { - return writeOffCode; - } - - public void setWriteOffCode(String writeOffCode) { - this.writeOffCode = writeOffCode; - } - - public Long getPayableBillId() { - return payableBillId; - } - - public void setPayableBillId(Long payableBillId) { - this.payableBillId = payableBillId; - } - - public String getPayableBillCode() { - return payableBillCode; - } - - public void setPayableBillCode(String payableBillCode) { - this.payableBillCode = payableBillCode; - } - - public Long getPaymentPlanId() { - return paymentPlanId; - } - - public void setPaymentPlanId(Long paymentPlanId) { - this.paymentPlanId = paymentPlanId; - } - - public Long getPaymentBillId() { - return paymentBillId; - } - - public void setPaymentBillId(Long paymentBillId) { - this.paymentBillId = paymentBillId; - } - - public String getPaymentBillCode() { - return paymentBillCode; - } - - public void setPaymentBillCode(String paymentBillCode) { - this.paymentBillCode = paymentBillCode; - } - - public BigDecimal getWriteOffAmount() { - return writeOffAmount; - } - - public void setWriteOffAmount(BigDecimal writeOffAmount) { - this.writeOffAmount = writeOffAmount; - } - - public BigDecimal getWriteOffAmountWithoutTax() { - return writeOffAmountWithoutTax; - } - - public void setWriteOffAmountWithoutTax(BigDecimal writeOffAmountWithoutTax) { - this.writeOffAmountWithoutTax = writeOffAmountWithoutTax; - } - - public BigDecimal getWriteOffTaxAmount() { - return writeOffTaxAmount; - } - - public void setWriteOffTaxAmount(BigDecimal writeOffTaxAmount) { - this.writeOffTaxAmount = writeOffTaxAmount; - } - - public String getRemark() { - return remark; - } - - public void setRemark(String remark) { - this.remark = remark; - } - - public Date getCreateTime() { - return createTime; - } - - public void setCreateTime(Date createTime) { - this.createTime = createTime; - } } \ No newline at end of file diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/dto/WriteOffReceiptRequestDto.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/dto/WriteOffReceiptRequestDto.java new file mode 100644 index 00000000..e0587ab5 --- /dev/null +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/dto/WriteOffReceiptRequestDto.java @@ -0,0 +1,44 @@ +package com.ruoyi.sip.dto; + +import com.ruoyi.sip.domain.OmsPayablePaymentDetail; +import com.ruoyi.sip.domain.OmsReceivableReceiptDetail; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * 采购应付核销单请求DTO + * + * @author zghz + * @date 2025-12-16 + */ +@Data +public class WriteOffReceiptRequestDto +{ + /** + * 付款单ID + */ + @NotNull(message = "收款单ID不能为空") + private Long receiptBillId; + + /** + * 核销项列表 + */ + private List detailList; + + /** + * 供应商代码 + */ + @NotBlank(message = "进货商代码不能为空") + private String partnerCode; + @NotBlank(message = "进货商名称不能为空") + private String partnerName; + + /** + * 备注 + */ + private String remark; + +} \ No newline at end of file diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/OmsPayablePaymentDetailMapper.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/OmsPayablePaymentDetailMapper.java index 27b67f9a..670c5434 100644 --- a/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/OmsPayablePaymentDetailMapper.java +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/OmsPayablePaymentDetailMapper.java @@ -17,7 +17,7 @@ public interface OmsPayablePaymentDetailMapper { List selectByPaymentPlanIds(@Param("paymentPlanIds") List paymentPlanIds); - int deleteByWriteOffIds(@Param("ids") Long[] ids); + int clearWriteOffByWriteOffId(@Param("ids") Long[] ids); List listPayableByWriteOffId(List writeOffIds); diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/OmsReceiptBillMapper.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/OmsReceiptBillMapper.java index ce1f932b..5999b37e 100644 --- a/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/OmsReceiptBillMapper.java +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/OmsReceiptBillMapper.java @@ -51,4 +51,8 @@ public interface OmsReceiptBillMapper { List listRemainingAmountByPartnerCodeList(List collect); void clearRelationReceivable(String receiptBillCode); + + OmsReceiptBill queryByCode(String code); + + void updateReturnWriteOffBatch(List updateBills); } diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/OmsReceivableReceiptDetailMapper.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/OmsReceivableReceiptDetailMapper.java index 15a10f61..41cdb986 100644 --- a/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/OmsReceivableReceiptDetailMapper.java +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/OmsReceivableReceiptDetailMapper.java @@ -67,4 +67,10 @@ public interface OmsReceivableReceiptDetailMapper List listReceivableByReceiptBillCode(List receiptBillCode); void insertBatch(List addList); + + List listReceivableByWriteOffId(List writeOffIds); + + void updateWriteOffIdBatch(List updateList); + + void clearWriteOffByWriteOffId(List ids); } \ No newline at end of file diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/OmsReceivableWriteOffMapper.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/OmsReceivableWriteOffMapper.java new file mode 100644 index 00000000..cf52628a --- /dev/null +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/OmsReceivableWriteOffMapper.java @@ -0,0 +1,66 @@ +package com.ruoyi.sip.mapper; + +import java.util.List; +import com.ruoyi.sip.domain.OmsReceivableWriteOff; + +/** + * 销售应收核销单Mapper接口 + * + * @author zghz + * @date 2025-12-23 + */ +public interface OmsReceivableWriteOffMapper +{ + /** + * 查询销售应收核销单 + * + * @param id 销售应收核销单ID + * @return 销售应收核销单 + */ + public OmsReceivableWriteOff selectOmsReceivableWriteOffById(Long id); + + /** + * 查询销售应收核销单列表 + * + * @param omsReceivableWriteOff 销售应收核销单 + * @return 销售应收核销单集合 + */ + public List selectOmsReceivableWriteOffList(OmsReceivableWriteOff omsReceivableWriteOff); + + /** + * 新增销售应收核销单 + * + * @param omsReceivableWriteOff 销售应收核销单 + * @return 结果 + */ + public int insertOmsReceivableWriteOff(OmsReceivableWriteOff omsReceivableWriteOff); + + /** + * 修改销售应收核销单 + * + * @param omsReceivableWriteOff 销售应收核销单 + * @return 结果 + */ + public int updateOmsReceivableWriteOff(OmsReceivableWriteOff omsReceivableWriteOff); + + /** + * 删除销售应收核销单 + * + * @param id 销售应收核销单ID + * @return 结果 + */ + public int deleteOmsReceivableWriteOffById(Long id); + + /** + * 批量删除销售应收核销单 + * + * @param ids 需要删除的数据ID + * @return 结果 + */ + public int deleteOmsReceivableWriteOffByIds(Long[] ids); + + int selectMaxCodeByPrefix(String codePrefix); + + List listByIds(Long[] ids); + +} \ No newline at end of file diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IOmsPayablePaymentDetailService.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IOmsPayablePaymentDetailService.java index 61da48af..e7e45deb 100644 --- a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IOmsPayablePaymentDetailService.java +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IOmsPayablePaymentDetailService.java @@ -1,7 +1,6 @@ package com.ruoyi.sip.service; import com.ruoyi.sip.domain.OmsPayablePaymentDetail; -import com.ruoyi.sip.domain.OmsPayableWriteOffDetail; import com.ruoyi.sip.domain.dto.PaymentBillPayableDetailDTO; import java.util.List; @@ -24,7 +23,7 @@ public interface IOmsPayablePaymentDetailService { void insertBatch(List detailList); - int deleteByWriteOffIds(Long[] ids); + int clearWriteOffByWriteOffId(Long[] ids); void updateBatch(List updateList); diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IOmsReceiptBillService.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IOmsReceiptBillService.java index 24966521..70451181 100644 --- a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IOmsReceiptBillService.java +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IOmsReceiptBillService.java @@ -2,7 +2,9 @@ package com.ruoyi.sip.service; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.sip.domain.OmsFinAttachment; +import com.ruoyi.sip.domain.OmsPaymentBill; import com.ruoyi.sip.domain.OmsReceiptBill; +import com.ruoyi.sip.domain.OmsReceivableReceiptDetail; import org.springframework.web.multipart.MultipartFile; import java.io.IOException; @@ -25,6 +27,7 @@ public interface IOmsReceiptBillService { * 根据ID查详情 */ OmsReceiptBill queryById(Long id); + OmsReceiptBill queryByCode(String code); /** * 新增数据 @@ -55,6 +58,10 @@ public interface IOmsReceiptBillService { AjaxResult applyRefund(OmsReceiptBill omsReceiptBill); AjaxResult uploadReceipt(OmsFinAttachment attachment, MultipartFile file) throws IOException; + + void returnWriteOff(List collect, List omsReceivableReceiptDetails); + + List listWriteOff(OmsReceiptBill omsReceiptBill); } diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IOmsReceivableReceiptDetailService.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IOmsReceivableReceiptDetailService.java index be71aab9..195e397d 100644 --- a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IOmsReceivableReceiptDetailService.java +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IOmsReceivableReceiptDetailService.java @@ -2,7 +2,6 @@ package com.ruoyi.sip.service; import java.util.List; -import com.ruoyi.sip.domain.OmsPayablePaymentDetail; import com.ruoyi.sip.domain.OmsReceivableReceiptDetail; import com.ruoyi.sip.domain.dto.ReceiptDetailDTO; @@ -73,4 +72,14 @@ public interface IOmsReceivableReceiptDetailService List listByReceiptBillCode(String receiptBillCode); void applyRefund(String originalReceiptBillCode, String targetReceiptBillCode); + + List listReceivableByWriteOffId(List longs); + + void updateWriteOffIdBatch(List updateList); + + List listByWriteOffIds(Long[] ids); + + void clearWriteOffByWriteOffId(List ids); + + List listByPlanIdList(List planIdList); } \ No newline at end of file diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IOmsReceivableWriteOffService.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IOmsReceivableWriteOffService.java new file mode 100644 index 00000000..94fd65cf --- /dev/null +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IOmsReceivableWriteOffService.java @@ -0,0 +1,77 @@ +package com.ruoyi.sip.service; + +import com.ruoyi.sip.domain.OmsReceivableWriteOff; +import com.ruoyi.sip.dto.WriteOffDetailResultDto; +import com.ruoyi.sip.dto.WriteOffReceiptRequestDto; +import com.ruoyi.sip.dto.WriteOffRequestDto; + +import java.util.List; + +/** + * 销售应收核销单Service接口 + * + * @author zghz + * @date 2025-12-23 + */ +public interface IOmsReceivableWriteOffService +{ + /** + * 查询销售应收核销单 + * + * @param id 销售应收核销单ID + * @return 销售应收核销单 + */ + public OmsReceivableWriteOff selectOmsReceivableWriteOffById(Long id); + + /** + * 查询销售应收核销单列表 + * + * @param writeOffQueryDto 核销查询条件 + * @return 销售应收核销单集合 + */ + public List selectOmsReceivableWriteOffList(OmsReceivableWriteOff writeOffQueryDto); + + /** + * 新增销售应收核销单 + * + * @param writeOffRequestDto 核销请求数据 + * @return 结果 + */ + public Long userWriteOff(WriteOffReceiptRequestDto writeOffRequestDto); + + /** + * 修改销售应收核销单 + * + * @param omsReceivableWriteOff 销售应收核销单 + * @return 结果 + */ + public int updateOmsReceivableWriteOff(OmsReceivableWriteOff omsReceivableWriteOff); + + /** + * 批量删除销售应收核销单 + * + * @param ids 需要删除的ID + * @return 结果 + */ + public int deleteOmsReceivableWriteOffByIds(Long[] ids); + + /** + * 删除销售应收核销单信息 + * + * @param id 销售应收核销单ID + * @return 结果 + */ + public int deleteOmsReceivableWriteOffById(Long id); + + /** + * 根据核销单ID查询核销详情 + * + * @param writeOffId 核销单ID + * @return 核销详情列表 + */ + public List selectWriteOffDetailsByWriteOffId(Long writeOffId); + + List listByReceiptBillCodeList(List collect); + + void autoWriteOff(WriteOffReceiptRequestDto writeOffRequestDto); +} \ No newline at end of file diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OmsPayablePaymentDetailServiceImpl.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OmsPayablePaymentDetailServiceImpl.java index 0f2e2176..883d4233 100644 --- a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OmsPayablePaymentDetailServiceImpl.java +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OmsPayablePaymentDetailServiceImpl.java @@ -142,11 +142,11 @@ public class OmsPayablePaymentDetailServiceImpl implements IOmsPayablePaymentDet } @Override - public int deleteByWriteOffIds(Long[] ids) { + public int clearWriteOffByWriteOffId(Long[] ids) { if (ids == null || ids.length == 0) { return 0; } - return omsPayablePaymentDetailMapper.deleteByWriteOffIds(ids); + return omsPayablePaymentDetailMapper.clearWriteOffByWriteOffId(ids); } @Override diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OmsPayableWriteOffServiceImpl.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OmsPayableWriteOffServiceImpl.java index 35f03836..8ad9b772 100644 --- a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OmsPayableWriteOffServiceImpl.java +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OmsPayableWriteOffServiceImpl.java @@ -14,7 +14,6 @@ import com.ruoyi.sip.domain.dto.PaymentBillPayableDetailDTO; import com.ruoyi.sip.dto.WriteOffDetailResultDto; import com.ruoyi.sip.dto.WriteOffRequestDto; import com.ruoyi.sip.mapper.OmsPayableWriteOffMapper; -import com.ruoyi.sip.mapper.OmsPaymentBillMapper; import com.ruoyi.sip.service.IOmsPayableBillService; import com.ruoyi.sip.service.IOmsPayablePaymentDetailService; import com.ruoyi.sip.service.IOmsPayableWriteOffService; @@ -138,6 +137,8 @@ public class OmsPayableWriteOffServiceImpl implements IOmsPayableWriteOffService // 保存核销主记录 omsPayableWriteOffMapper.insertOmsPayableWriteOff(writeOff); // 保存核销明细 + + //todo 检验只有一条数据 for (OmsPayablePaymentDetail omsPayablePaymentDetail : writeOffRequestDto.getDetailList()) { omsPayablePaymentDetail.setPayableDetailType(OmsPayablePaymentDetail.PayableDetailTypeEnum.PREPAY_WRITE_OFF.getCode()); omsPayablePaymentDetail.setPaymentTime(DateUtils.getNowDate()); @@ -200,7 +201,7 @@ public class OmsPayableWriteOffServiceImpl implements IOmsPayableWriteOffService // 批量删除对应的支付详情记录 if (ids != null && ids.length > 0) { // 使用专门的方法删除 - omsPayablePaymentDetailService.deleteByWriteOffIds(ids); + omsPayablePaymentDetailService.clearWriteOffByWriteOffId(ids); } // 获取涉及的应付单ID,用于后续更新应付单的支付金额 diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OmsReceiptBillServiceImpl.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OmsReceiptBillServiceImpl.java index 8d43c0a4..8391da2e 100644 --- a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OmsReceiptBillServiceImpl.java +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OmsReceiptBillServiceImpl.java @@ -15,20 +15,15 @@ import com.ruoyi.sip.domain.*; import com.ruoyi.sip.domain.dto.ReceiptDetailDTO; import com.ruoyi.sip.dto.WriteOffRequestDto; import com.ruoyi.sip.mapper.OmsReceiptBillMapper; -import com.ruoyi.sip.service.IOmsFinAttachmentService; -import com.ruoyi.sip.service.IOmsReceiptBillService; -import com.ruoyi.sip.service.IOmsReceivableBillService; -import com.ruoyi.sip.service.IOmsReceivableReceiptDetailService; +import com.ruoyi.sip.service.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import java.io.IOException; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Optional; +import java.math.BigDecimal; +import java.util.*; import java.util.stream.Collectors; /** @@ -49,6 +44,9 @@ public class OmsReceiptBillServiceImpl implements IOmsReceiptBillService { @Autowired private IOmsFinAttachmentService attachmentService; + @Autowired + private IOmsReceivableWriteOffService omsReceivableWriteOffService; + /** * 查询列表数据 * @@ -75,6 +73,11 @@ public class OmsReceiptBillServiceImpl implements IOmsReceiptBillService { return receiptBill; } + @Override + public OmsReceiptBill queryByCode(String code) { + return omsReceiptBillMapper.queryByCode(code); + } + @Override public int insert(OmsReceiptBill omsReceiptBill) { @@ -296,6 +299,133 @@ public class OmsReceiptBillServiceImpl implements IOmsReceiptBillService { } return AjaxResult.success(attachment); } + + @Override + public void returnWriteOff(List collect, List omsReceivableReceiptDetails) { + OmsReceiptBill receiptBill = new OmsReceiptBill(); + receiptBill.setReceiptBillCodeList(collect); + List billList = queryAll(receiptBill); + Map> listMap = billList.stream() + .collect(Collectors.groupingBy(OmsReceiptBill::getReceiptBillType)); + + // 处理预收 + List preBillList = listMap.remove(OmsReceiptBill.ReceiptBillTypeEnum.PRE_RECEIPT.getCode()); + + // 预收处理逻辑 + // 1:通过omsPayablePaymentDetailService查询对应的详情,然后根据paymentBillCode分组, + // 将含税金额总和计算出来,加在预付单的剩余额度上 + // 按付款单code分组核销详情 + Map> groupedDetails = + omsReceivableReceiptDetails.stream() + .filter(detail -> detail.getReceiptBillCode() != null) + .collect(Collectors.groupingBy(OmsReceivableReceiptDetail::getReceiptBillCode)); + if (CollUtil.isNotEmpty(preBillList)) { + + + // 计算每个付款单的核销金额合计 + Map paymentBillWriteOffAmountMap = groupedDetails.entrySet().stream() + .collect(Collectors.toMap( + Map.Entry::getKey, + entry -> entry.getValue().stream() + .map(OmsReceivableReceiptDetail::getReceiptAmount) + .reduce(BigDecimal.ZERO, BigDecimal::add) + )); + + // 更新预付单的剩余额度 - 批量操作 + StringJoiner detailIds = new StringJoiner(","); + List updateBills = preBillList.stream() + .map(prePaymentBill -> { + BigDecimal increaseAmount = paymentBillWriteOffAmountMap.getOrDefault( + prePaymentBill.getReceiptBillCode(), BigDecimal.ZERO); + List omsReceivableReceiptDetailList = groupedDetails.get(prePaymentBill.getReceiptBillCode()); + if (CollUtil.isNotEmpty(omsReceivableReceiptDetailList)) { + for (OmsReceivableReceiptDetail detail : omsReceivableReceiptDetailList) { + detailIds.add(detail.getId().toString()); + } + } + if (increaseAmount.compareTo(BigDecimal.ZERO) > 0) { + OmsReceiptBill updateBill = new OmsReceiptBill(); + updateBill.setId(prePaymentBill.getId()); + // 在原剩余额度基础上加回本次核销金额 + BigDecimal newResidueAmount = prePaymentBill.getRemainingAmount() + .add(increaseAmount); + updateBill.setRemainingAmount(newResidueAmount); + return updateBill; + } + return null; + }) + .filter(Objects::nonNull) + .collect(Collectors.toList()); + + if (CollUtil.isNotEmpty(updateBills)) { + for (OmsReceiptBill bill : updateBills) { + update(bill); + } + } + //预收单的detail直接删除 + if (detailIds.length() > 0) { + omsReceivableReceiptDetailService.deleteOmsReceivableReceiptDetailByIds(detailIds.toString()); + } + } + //处理其余数据 + if (CollUtil.isNotEmpty(listMap.values())) { + List updateBills = new ArrayList<>(); + List writeOffIdList = new ArrayList<>(); + for (List omsReceiptBillList : listMap.values()) { + for (OmsReceiptBill tempBill : omsReceiptBillList) { + + OmsReceiptBill updateBill = new OmsReceiptBill(); + updateBill.setId(tempBill.getId()); + updateBill.setReceiptStatus(OmsReceiptBill.ReceiptStatusEnum.WAIT_PAYMENT.getCode()); + updateBill.setActualReceiptTime(null); + updateBills.add(updateBill); + List omsReceivableReceiptDetailList = groupedDetails.get(tempBill.getReceiptBillCode()); + if (CollUtil.isNotEmpty(omsReceivableReceiptDetailList)) { + for (OmsReceivableReceiptDetail omsReceivableReceiptDetail : omsReceivableReceiptDetailList) { + if (omsReceivableReceiptDetail.getWriteOffId() != null) { + writeOffIdList.add(omsReceivableReceiptDetail.getWriteOffId()); + } + } + } + } + } + if (CollUtil.isNotEmpty(updateBills)) { + omsReceiptBillMapper.updateReturnWriteOffBatch(updateBills); + attachmentService.deleteOmsFinAttachmentByPayment(updateBills.stream().map(OmsReceiptBill::getId).collect(Collectors.toList()), OmsFinAttachment.RelatedBillTypeEnum.PAYMENT.getCode()); + } + omsReceivableReceiptDetailService.clearWriteOffByWriteOffId(writeOffIdList); + } + } + + @Override + public List listWriteOff(OmsReceiptBill omsReceiptBill) { + omsReceiptBill.setRemainingAmount(new BigDecimal("-1")); + List omsReceiptBills = omsReceiptBillMapper.queryAll(omsReceiptBill); + if (CollUtil.isEmpty(omsReceiptBills)) { + return omsReceiptBills; + } + //实时计算已核销金额 查询核销数据 + List omsReceivableWriteOffs = omsReceivableWriteOffService.listByReceiptBillCodeList(omsReceiptBills.stream().map(OmsReceiptBill::getReceiptBillCode).collect(Collectors.toList())); + Map> writeOffListMap = omsReceivableWriteOffs.stream().collect(Collectors.groupingBy(OmsReceivableWriteOff::getReceiptBillCode)); + for (OmsReceiptBill receiptBill : omsReceiptBills) { + List writeOffList = writeOffListMap.get(receiptBill.getReceiptBillCode()); + BigDecimal writeOffAmount = BigDecimal.ZERO; + BigDecimal writeOffAmountWithoutTax = BigDecimal.ZERO; + BigDecimal writeOffTaxAmount = BigDecimal.ZERO; + if (CollUtil.isNotEmpty(writeOffList)) { + for (OmsReceivableWriteOff omsReceivableWriteOff : writeOffList) { + writeOffAmount = writeOffAmount.add(omsReceivableWriteOff.getWriteOffAmount()); + writeOffAmountWithoutTax = writeOffAmountWithoutTax.add(omsReceivableWriteOff.getWriteOffAmountWithoutTax()); + writeOffTaxAmount = writeOffTaxAmount.add(omsReceivableWriteOff.getWriteOffTaxAmount()); + } + } + receiptBill.setWriteOffAmount(writeOffAmount); + receiptBill.setWriteOffAmountWithoutTax(writeOffAmountWithoutTax); + receiptBill.setWriteOffTaxAmount(writeOffTaxAmount); + } + + return omsReceiptBills; + } } diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OmsReceivableBillServiceImpl.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OmsReceivableBillServiceImpl.java index 4fe6351e..eb0a756e 100644 --- a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OmsReceivableBillServiceImpl.java +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OmsReceivableBillServiceImpl.java @@ -230,8 +230,8 @@ public class OmsReceivableBillServiceImpl implements IOmsReceivableBillService detail.setReceiptAmount(plan.getPlanAmount()); detail.setReceiptRate(plan.getPlanRate()); detail.setReceiptTime(plan.getPlanReceiptDate()); - detail.setPaymentAmountWithoutTax(plan.getPlanAmount().divide(BigDecimal.ONE.add(taxRate), 2, java.math.RoundingMode.HALF_UP)); - detail.setPaymentAmountTax(detail.getReceiptAmount().subtract(detail.getPaymentAmountWithoutTax())); + detail.setReceiptAmountWithoutTax(plan.getPlanAmount().divide(BigDecimal.ONE.add(taxRate), 2, java.math.RoundingMode.HALF_UP)); + detail.setReceiptAmountTax(detail.getReceiptAmount().subtract(detail.getReceiptAmountWithoutTax())); detail.setRemark(plan.getRemark()); detail.setCreateBy(ShiroUtils.getUserId().toString()); detail.setReceivableDetailType(OmsReceivableReceiptDetail.ReceivableDetailTypeEnum.NORMAL_RECEIPT.getCode()); diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OmsReceivableReceiptDetailServiceImpl.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OmsReceivableReceiptDetailServiceImpl.java index 89ff3b43..ee447351 100644 --- a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OmsReceivableReceiptDetailServiceImpl.java +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OmsReceivableReceiptDetailServiceImpl.java @@ -183,4 +183,45 @@ public class OmsReceivableReceiptDetailServiceImpl implements IOmsReceivableRece omsReceivableReceiptDetailMapper.insertBatch(addList); } } + + @Override + public List listReceivableByWriteOffId(List writeOffIds) { + if (CollUtil.isEmpty(writeOffIds)){ + return Collections.emptyList(); + } + List detailDTOList=omsReceivableReceiptDetailMapper.listReceivableByWriteOffId(writeOffIds); + + + return detailDTOList; + } + + @Override + public void updateWriteOffIdBatch(List updateList) { + omsReceivableReceiptDetailMapper.updateWriteOffIdBatch(updateList); + } + + @Override + public List listByWriteOffIds(Long[] ids) { + if (ids == null || ids.length == 0) { + return new ArrayList<>(); + } + OmsReceivableReceiptDetail query = new OmsReceivableReceiptDetail(); + query.setWriteOffIdList(java.util.Arrays.asList(ids)); + return omsReceivableReceiptDetailMapper.list(query); + } + + @Override + public void clearWriteOffByWriteOffId(List ids) { + if (CollUtil.isEmpty(ids)) { + return ; + } + omsReceivableReceiptDetailMapper.clearWriteOffByWriteOffId(ids); + } + + @Override + public List listByPlanIdList(List planIdList) { + OmsReceivableReceiptDetail omsReceivableReceiptDetail = new OmsReceivableReceiptDetail(); + omsReceivableReceiptDetail.setReceiptPlanIdList(planIdList); + return omsReceivableReceiptDetailMapper.list(omsReceivableReceiptDetail); + } } \ No newline at end of file diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OmsReceivableWriteOffServiceImpl.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OmsReceivableWriteOffServiceImpl.java new file mode 100644 index 00000000..61a269a0 --- /dev/null +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OmsReceivableWriteOffServiceImpl.java @@ -0,0 +1,314 @@ +package com.ruoyi.sip.service.impl; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.date.DatePattern; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.StrUtil; +import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.common.utils.ShiroUtils; +import com.ruoyi.sip.domain.OmsPayablePaymentDetail; +import com.ruoyi.sip.domain.OmsReceiptBill; +import com.ruoyi.sip.domain.OmsReceivableReceiptDetail; +import com.ruoyi.sip.domain.OmsReceivableWriteOff; +import com.ruoyi.sip.domain.dto.ReceiptDetailDTO; +import com.ruoyi.sip.dto.WriteOffDetailResultDto; +import com.ruoyi.sip.dto.WriteOffReceiptRequestDto; +import com.ruoyi.sip.mapper.OmsReceivableWriteOffMapper; +import com.ruoyi.sip.service.IOmsReceiptBillService; +import com.ruoyi.sip.service.IOmsReceivableBillService; +import com.ruoyi.sip.service.IOmsReceivableReceiptDetailService; +import com.ruoyi.sip.service.IOmsReceivableWriteOffService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.math.BigDecimal; +import java.util.Collections; +import java.util.Date; +import java.util.List; +import java.util.stream.Collectors; + +/** + * 销售应收核销单Service业务层处理 + * + * @author zghz + * @date 2025-12-23 + */ +@Service +public class OmsReceivableWriteOffServiceImpl implements IOmsReceivableWriteOffService +{ + @Autowired + private OmsReceivableWriteOffMapper omsReceivableWriteOffMapper; + + @Autowired + private IOmsReceiptBillService omsReceiptBillService; + @Autowired + private IOmsReceivableReceiptDetailService omsReceivableReceiptDetailService; + @Autowired + private IOmsReceivableBillService receivableBillService; + + /** + * 查询应收单收款计划核销 + * + * @param id 应收单收款计划核销ID + * @return 应收单收款计划核销 + */ + @Override + public OmsReceivableWriteOff selectOmsReceivableWriteOffById(Long id) + { + OmsReceivableWriteOff omsReceivableWriteOff = omsReceivableWriteOffMapper.selectOmsReceivableWriteOffById(id); + OmsReceiptBill omsReceiptBill = omsReceiptBillService.queryByCode(omsReceivableWriteOff.getReceiptBillCode()); + omsReceivableWriteOff.setReceiptBill(omsReceiptBill); + // 这里需要获取核销详情列表,但目前没有对应的detail service + List detailDTOList = omsReceivableReceiptDetailService.listReceivableByWriteOffId(Collections.singletonList(id)); + omsReceivableWriteOff.setDetailList(detailDTOList); + return omsReceivableWriteOff; + } + + /** + * 查询销售应收核销单列表 + * + * @param omsReceivableWriteOff 核销查询条件 + * @return 销售应收核销单集合 + */ + @Override + public List selectOmsReceivableWriteOffList(OmsReceivableWriteOff omsReceivableWriteOff) + { + return omsReceivableWriteOffMapper.selectOmsReceivableWriteOffList(omsReceivableWriteOff); + } + + /** + * 新增销售应收核销单 + * + * @param writeOffRequestDto 核销请求数据 + * @return 结果 + */ + @Override + @Transactional + public Long userWriteOff(WriteOffReceiptRequestDto writeOffRequestDto) + { + if (CollUtil.isEmpty(writeOffRequestDto.getDetailList())){ + throw new ServiceException("请选择核销明细"); + } + // 获取收款单信息 + OmsReceiptBill receiptBill = omsReceiptBillService.queryById(writeOffRequestDto.getReceiptBillId()); + if (receiptBill == null) { + throw new ServiceException("收款单不存在"); + } + + // 创建核销主记录 + OmsReceivableWriteOff writeOff = new OmsReceivableWriteOff(); + writeOff.setWriteOffCode(generateWriteOffCode()); + // 默认为用户手动核销 + writeOff.setWriteOffType(OmsReceivableWriteOff.WriteOffTypeEnum.USER.getCode()); + writeOff.setReceiptBillCode(receiptBill.getReceiptBillCode()); + writeOff.setPartnerCode(writeOffRequestDto.getPartnerCode()); + writeOff.setPartnerName(writeOffRequestDto.getPartnerName()); + writeOff.setWriteOffTime(new Date()); + writeOff.setRemark(writeOffRequestDto.getRemark()); + + // 计算总金额和相关税额 + BigDecimal totalAmount = BigDecimal.ZERO; + BigDecimal totalAmountWithoutTax = BigDecimal.ZERO; + BigDecimal totalTaxAmount = BigDecimal.ZERO; + + // 将传入的detailList转换为OmsReceivableReceiptDetail类型进行处理 + for (OmsReceivableReceiptDetail item : writeOffRequestDto.getDetailList()) { + totalAmount = totalAmount.add(item.getReceiptAmount()); + totalAmountWithoutTax = totalAmountWithoutTax.add(item.getReceiptAmountWithoutTax()); + totalTaxAmount = totalTaxAmount.add(item.getReceiptAmountTax()); + } + + writeOff.setWriteOffAmount(totalAmount); + writeOff.setWriteOffAmountWithoutTax(totalAmountWithoutTax); + writeOff.setWriteOffTaxAmount(totalTaxAmount); + + // 设置创建时间 + writeOff.setCreateTime(new Date()); + writeOff.setCreateBy(ShiroUtils.getUserId().toString()); + writeOff.setUpdateTime(new Date()); + // 保存核销主记录 + omsReceivableWriteOffMapper.insertOmsReceivableWriteOff(writeOff); + //预付额度减少 + OmsReceiptBill updateBill = new OmsReceiptBill(); + BigDecimal decimal = receiptBill.getRemainingAmount().subtract(totalAmount); + if (decimal.compareTo(BigDecimal.ZERO) < 0) { + throw new RuntimeException("核销金额不能大于预付剩余额度"); + } + updateBill.setRemainingAmount(decimal); + updateBill.setId(receiptBill.getId()); + omsReceiptBillService.update(updateBill); + List collect = writeOffRequestDto.getDetailList().stream().map(OmsReceivableReceiptDetail::getReceiptPlanId).distinct().collect(Collectors.toList()); + List omsReceivableReceiptDetailList = omsReceivableReceiptDetailService.listByPlanIdList(collect); + if (CollUtil.isNotEmpty(omsReceivableReceiptDetailList)){ + throw new ServiceException("应收单的付款计划已被处理,请刷新后重试"); + } + // 保存核销明细 + for (OmsReceivableReceiptDetail detail : writeOffRequestDto.getDetailList()) { + detail.setReceivableDetailType(OmsReceivableReceiptDetail.ReceivableDetailTypeEnum.PRE_RECEIVE_WRITE_OFF.getCode()); + detail.setReceiptTime(DateUtils.getNowDate()); + detail.setCreateBy(ShiroUtils.getUserId().toString()); + detail.setWriteOffId(writeOff.getId()); + omsReceivableReceiptDetailService.insertOmsReceivableReceiptDetail(detail); + } + receivableBillService.updateReceiptAmount(writeOffRequestDto.getDetailList().stream().map(OmsReceivableReceiptDetail::getReceivableBillId).distinct().collect(Collectors.toList())); + return writeOff.getId(); + } + + private String generateWriteOffCode() { + String prefix = "SKHX"; + // 查询当天已有的最大序列号 + String codePrefix = prefix + DateUtil.format(DateUtil.date(), DatePattern.PURE_DATE_PATTERN); + int maxSequence = omsReceivableWriteOffMapper.selectMaxCodeByPrefix(codePrefix); + // 生成新的序列号 + int newSequence = maxSequence + 1; + // 序列号补零到4位 + String sequenceStr = String.format("%04d", newSequence); + return codePrefix + sequenceStr; + } + + /** + * 修改销售应收核销单 + * + * @param omsReceivableWriteOff 销售应收核销单 + * @return 结果 + */ + @Override + public int updateOmsReceivableWriteOff(OmsReceivableWriteOff omsReceivableWriteOff) + { + return omsReceivableWriteOffMapper.updateOmsReceivableWriteOff(omsReceivableWriteOff); + } + + /** + * 批量删除销售应收核销单 + * + * @param ids 需要删除的ID + * @return 结果 + */ + @Override + @Transactional + public int deleteOmsReceivableWriteOffByIds(Long[] ids) + { + // 反核销逻辑 + List omsReceivableWriteOffs = omsReceivableWriteOffMapper.listByIds(ids); + if (CollUtil.isEmpty(omsReceivableWriteOffs)) { + return 0; + } + + // 通过writeOffId获取对应的收款详情记录 + List omsReceivableReceiptDetails = + omsReceivableReceiptDetailService.listByWriteOffIds(ids); + + // 处理收款单 + omsReceiptBillService.returnWriteOff(omsReceivableWriteOffs.stream() + .map(OmsReceivableWriteOff::getReceiptBillCode).collect(Collectors.toList()),omsReceivableReceiptDetails); + + + + // 获取涉及的应收单ID,用于后续更新应收单的收款金额 + List receivableBillIds = omsReceivableReceiptDetails.stream() + .map(OmsReceivableReceiptDetail::getReceivableBillId) + .distinct() + .collect(Collectors.toList()); + + // 根据对应的应收单id更新对应的数据 + if (CollUtil.isNotEmpty(receivableBillIds)) { + receivableBillService.updateReceiptAmount(receivableBillIds); + } + + // 最后删除主记录 + return omsReceivableWriteOffMapper.deleteOmsReceivableWriteOffByIds(ids); + } + + /** + * 删除销售应收核销单信息 + * + * @param id 销售应收核销单ID + * @return 结果 + */ + @Override + @Transactional + public int deleteOmsReceivableWriteOffById(Long id) + { + // 再删除主记录 + return deleteOmsReceivableWriteOffByIds(new Long[]{id}); + } + + /** + * 根据核销单ID查询核销详情 + * + * @param writeOffId 核销单ID + * @return 核销详情列表 + */ + @Override + public List selectWriteOffDetailsByWriteOffId(Long writeOffId) + { +// List details = omsReceivableWriteOffDetailMapper.selectOmsReceivableWriteOffDetailByWriteOffId(writeOffId); +// return details.stream().map(this::convertToWriteOffDetailResultDto).collect(Collectors.toList()); + return null; + } + + @Override + public List listByReceiptBillCodeList(List collect) { + OmsReceivableWriteOff omsReceivableWriteOff = new OmsReceivableWriteOff(); + omsReceivableWriteOff.setReceiptBillCodeList(collect); + return omsReceivableWriteOffMapper.selectOmsReceivableWriteOffList(omsReceivableWriteOff); + } + + @Override + public void autoWriteOff(WriteOffReceiptRequestDto writeOffRequestDto) { + if (CollUtil.isEmpty(writeOffRequestDto.getDetailList())){ + throw new ServiceException("请选择核销明细"); + } + // 获取收款单信息 + OmsReceiptBill receiptBill = omsReceiptBillService.queryById(writeOffRequestDto.getReceiptBillId()); + if (receiptBill == null) { + throw new ServiceException("收款单不存在"); + } + + // 创建核销主记录 + OmsReceivableWriteOff writeOff = new OmsReceivableWriteOff(); + writeOff.setWriteOffCode(generateWriteOffCode()); + // 默认为用户手动核销 + writeOff.setWriteOffType(OmsReceivableWriteOff.WriteOffTypeEnum.AUTO.getCode()); + writeOff.setReceiptBillCode(receiptBill.getReceiptBillCode()); + writeOff.setPartnerCode(writeOffRequestDto.getPartnerCode()); + writeOff.setPartnerName(writeOffRequestDto.getPartnerName()); + writeOff.setWriteOffTime(new Date()); + writeOff.setRemark(writeOffRequestDto.getRemark()); + + // 计算总金额和相关税额 + BigDecimal totalAmount = BigDecimal.ZERO; + BigDecimal totalAmountWithoutTax = BigDecimal.ZERO; + BigDecimal totalTaxAmount = BigDecimal.ZERO; + + // 将传入的detailList转换为OmsReceivableReceiptDetail类型进行处理 + for (OmsReceivableReceiptDetail item : writeOffRequestDto.getDetailList()) { + totalAmount = totalAmount.add(item.getReceiptAmount()); + totalAmountWithoutTax = totalAmountWithoutTax.add(item.getReceiptAmountWithoutTax()); + totalTaxAmount = totalTaxAmount.add(item.getReceiptAmountTax()); + } + + writeOff.setWriteOffAmount(totalAmount); + writeOff.setWriteOffAmountWithoutTax(totalAmountWithoutTax); + writeOff.setWriteOffTaxAmount(totalTaxAmount); + // 设置创建时间 + writeOff.setCreateTime(new Date()); + writeOff.setCreateBy(ShiroUtils.getUserId().toString()); + writeOff.setUpdateTime(new Date()); + // 保存核销主记录 + omsReceivableWriteOffMapper.insertOmsReceivableWriteOff(writeOff); + + List updateList = writeOffRequestDto.getDetailList().stream().map(item -> { + OmsReceivableReceiptDetail omsReceivableReceiptDetail = new OmsReceivableReceiptDetail(); + omsReceivableReceiptDetail.setId(item.getId()); + omsReceivableReceiptDetail.setWriteOffId(writeOff.getId()); + return omsReceivableReceiptDetail; + }).collect(Collectors.toList()); + + omsReceivableReceiptDetailService.updateWriteOffIdBatch(updateList); + receivableBillService.updateReceiptAmount(writeOffRequestDto.getDetailList().stream().map(OmsReceivableReceiptDetail::getReceivableBillId).distinct().collect(Collectors.toList())); + } + +} \ No newline at end of file diff --git a/ruoyi-sip/src/main/resources/mapper/OmsReceiptBill/OmsReceiptBillMapper.xml b/ruoyi-sip/src/main/resources/mapper/OmsReceiptBill/OmsReceiptBillMapper.xml index 2ab0f182..9776d34f 100644 --- a/ruoyi-sip/src/main/resources/mapper/OmsReceiptBill/OmsReceiptBillMapper.xml +++ b/ruoyi-sip/src/main/resources/mapper/OmsReceiptBill/OmsReceiptBillMapper.xml @@ -57,6 +57,23 @@ and t1.receipt_bill_code = #{receiptBillCode} + + and t1.receipt_bill_code in + + #{item} + + + + + + + and t1.remaining_amount != 0 + + + and t1.remaining_amount = #{remainingAmount} + + + and t1.receipt_bill_type = #{receiptBillType} @@ -191,6 +208,12 @@ GROUP BY partner_code + @@ -461,6 +484,15 @@ WHERE id = #{id} + + + update oms_receipt_bill + set actual_receipt_time=null, + receipt_status=#{item.receiptStatus}, + update_time=now() + where id = #{item.id} + + diff --git a/ruoyi-sip/src/main/resources/mapper/OmsReceivableWriteOffMapper.xml b/ruoyi-sip/src/main/resources/mapper/OmsReceivableWriteOffMapper.xml new file mode 100644 index 00000000..75ddcecb --- /dev/null +++ b/ruoyi-sip/src/main/resources/mapper/OmsReceivableWriteOffMapper.xml @@ -0,0 +1,150 @@ + + + + + + + + + + + + + + + + + + + + + + + select t1.id, t1.write_off_code, t1.write_off_type, t1.receipt_bill_code, t1.partner_code, + t1.write_off_amount, t1.write_off_amount_without_tax, t1.write_off_tax_amount, t1.write_off_time, + t1.remark, t1.create_by, t1.create_time, t1.update_by, t1.update_time, + t1.partner_name,t3.user_name as create_by_name + from oms_receivable_write_off t1 + left join sys_user t3 on t1.create_by=t3.user_id + + + + + + + + + + insert into oms_receivable_write_off + + write_off_code, + write_off_type, + receipt_bill_code, + partner_code, + partner_name, + write_off_amount, + write_off_amount_without_tax, + write_off_tax_amount, + write_off_time, + remark, + create_by, + create_time, + update_by, + update_time, + + + #{writeOffCode}, + #{writeOffType}, + #{receiptBillCode}, + #{partnerCode}, + #{partnerName}, + #{writeOffAmount}, + #{writeOffAmountWithoutTax}, + #{writeOffTaxAmount}, + #{writeOffTime}, + #{remark}, + #{createBy}, + #{createTime}, + #{updateBy}, + #{updateTime}, + + + + + update oms_receivable_write_off + + write_off_code = #{writeOffCode}, + write_off_type = #{writeOffType}, + receipt_bill_code = #{receiptBillCode}, + partner_code = #{partnerCode}, + write_off_amount = #{writeOffAmount}, + write_off_amount_without_tax = #{writeOffAmountWithoutTax}, + write_off_tax_amount = #{writeOffTaxAmount}, + write_off_time = #{writeOffTime}, + remark = #{remark}, + update_by = #{updateBy}, + update_time = #{updateTime}, + + where id = #{id} + + + + delete from oms_receivable_write_off where id = #{id} + + + + delete from oms_receivable_write_off where id in + + #{id} + + + \ No newline at end of file diff --git a/ruoyi-sip/src/main/resources/mapper/finance/OmsPayablePaymentDetailMapper.xml b/ruoyi-sip/src/main/resources/mapper/finance/OmsPayablePaymentDetailMapper.xml index 00196efc..16e41169 100644 --- a/ruoyi-sip/src/main/resources/mapper/finance/OmsPayablePaymentDetailMapper.xml +++ b/ruoyi-sip/src/main/resources/mapper/finance/OmsPayablePaymentDetailMapper.xml @@ -149,11 +149,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - - DELETE FROM oms_payable_payment_detail WHERE write_off_id IN + + update oms_payable_payment_detail set write_off_id=null WHERE write_off_id IN #{item} - + \ No newline at end of file diff --git a/ruoyi-sip/src/main/resources/mapper/sip/OmsReceivableReceiptDetailMapper.xml b/ruoyi-sip/src/main/resources/mapper/sip/OmsReceivableReceiptDetailMapper.xml index cb677604..5308222c 100644 --- a/ruoyi-sip/src/main/resources/mapper/sip/OmsReceivableReceiptDetailMapper.xml +++ b/ruoyi-sip/src/main/resources/mapper/sip/OmsReceivableReceiptDetailMapper.xml @@ -18,12 +18,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - - + + - select id, receipt_plan_id, receivable_bill_id, receipt_time, receipt_amount, receipt_rate, receipt_bill_code, remark, create_time, create_by, update_time, receivable_detail_type, payment_amount_without_tax, payment_amount_tax + select id, receipt_plan_id, receivable_bill_id, receipt_time, receipt_amount, receipt_rate, receipt_bill_code, remark, create_time, create_by, update_time, receivable_detail_type, receipt_amount_without_tax, receipt_amount_tax from oms_receivable_receipt_detail @@ -55,6 +55,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" LEFT JOIN oms_receipt_bill t2 ON t1.receipt_bill_code = t2.receipt_bill_code and t1.receipt_plan_id = #{receiptPlanId} + and t1.receipt_plan_id in + + #{item} + + + and t1.id in #{item} @@ -65,6 +71,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{item} + and t1.write_off_id in + + #{item} + + + insert into oms_receivable_receipt_detail @@ -111,8 +136,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" create_by, update_time, update_by, - payment_amount_without_tax, - payment_amount_tax, + receipt_amount_without_tax, + receipt_amount_tax, + write_off_id, #{receiptPlanId}, @@ -127,19 +153,20 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{createBy}, #{updateTime}, #{updateBy}, - #{paymentAmountWithoutTax}, - #{paymentAmountTax}, + #{receiptAmountWithoutTax}, + #{receiptAmountTax}, + #{writeOffId}, insert into oms_receivable_receipt_detail (receipt_plan_id,receivable_bill_id,receipt_time,receipt_amount,receipt_rate,receipt_bill_code,receivable_detail_type - ,remark,create_time,create_by,update_time,update_by,payment_amount_without_tax,payment_amount_tax) + ,remark,create_time,create_by,update_time,update_by,receipt_amount_without_tax,receipt_amount_tax) values (#{item.receiptPlanId},#{item.receivableBillId},#{item.receiptTime},#{item.receiptAmount},#{item.receiptRate},#{item.receiptBillCode},#{item.receivableDetailType} - ,#{item.remark},#{item.createTime},#{item.createBy},#{item.updateTime},#{item.updateBy},#{item.paymentAmountWithoutTax},#{item.paymentAmountTax}) + ,#{item.remark},#{item.createTime},#{item.createBy},#{item.updateTime},#{item.updateBy},#{item.receiptAmountWithoutTax},#{item.receiptAmountTax}) @@ -158,11 +185,23 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" remark = #{remark}, update_time = #{updateTime}, update_by = #{updateBy}, - payment_amount_without_tax = #{paymentAmountWithoutTax}, - payment_amount_tax = #{paymentAmountTax}, + receipt_amount_without_tax = #{receiptAmountWithoutTax}, + receipt_amount_tax = #{receiptAmountTax}, where id = #{id} + + + update oms_receivable_receipt_detail set write_off_id = #{item.writeOffId} where id = #{item.id} + + + + update oms_receivable_receipt_detail set write_off_id = null where write_off_id in + + #{item} + + + delete from oms_receivable_receipt_detail where id = #{id}