From dc1f5f73023c042b5c7711b7228d7972097dabf9 Mon Sep 17 00:00:00 2001 From: chenhao Date: Mon, 15 Dec 2025 17:12:08 +0800 Subject: [PATCH] =?UTF-8?q?feat(finance):=20=E9=87=8D=E6=9E=84=E6=94=B6?= =?UTF-8?q?=E7=A5=A8=E5=8D=95=E6=96=B0=E5=A2=9E=E5=8A=9F=E8=83=BD=E5=B9=B6?= =?UTF-8?q?=E5=AE=8C=E5=96=84=E7=9B=B8=E5=85=B3=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增收票计划选择器组件及交互逻辑 - 优化收票单表单结构,支持从应付单合并生成收票单 - 增加收票计划金额和比例计算功能 - 完善收票单提交校验逻辑,确保数据完整性 - 更新收票单详情展示字段,修正显示错误 - 调整收票单列表操作按钮权限控制 - 扩展后端服务接口,支持根据收票单编号查询明细 - 优化收票单审批状态管理及相关业务逻辑处理 --- .../finance/receipt/components/AddForm.vue | 436 ++++++++++++++---- .../receipt/components/DetailDrawer.vue | 6 +- .../src/views/finance/receipt/index.vue | 5 +- .../IOmsPayableTicketDetailService.java | 2 + .../OmsPayableTicketDetailServiceImpl.java | 7 + .../impl/OmsTicketBillServiceImpl.java | 25 +- 6 files changed, 382 insertions(+), 99 deletions(-) diff --git a/oms_web/oms_vue/src/views/finance/receipt/components/AddForm.vue b/oms_web/oms_vue/src/views/finance/receipt/components/AddForm.vue index 078561aa..09132a0f 100644 --- a/oms_web/oms_vue/src/views/finance/receipt/components/AddForm.vue +++ b/oms_web/oms_vue/src/views/finance/receipt/components/AddForm.vue @@ -1,94 +1,202 @@ + + diff --git a/oms_web/oms_vue/src/views/finance/receipt/components/DetailDrawer.vue b/oms_web/oms_vue/src/views/finance/receipt/components/DetailDrawer.vue index ae0eaa85..5c6d3738 100644 --- a/oms_web/oms_vue/src/views/finance/receipt/components/DetailDrawer.vue +++ b/oms_web/oms_vue/src/views/finance/receipt/components/DetailDrawer.vue @@ -38,16 +38,16 @@
税额: {{ detail.taxAmount }}
-
发票含税总价: {{ detail.actualReceiptTime || '-'}}
+
发票含税总价: {{ detail.ticketPriceWithTax || '-'}}
-
发票未税总价: {{ detail.actualReceiptTime || '-'}}
+
发票未税总价: {{ detail.ticketPriceWithoutTax || '-'}}
-
发票税额: {{ detail.taxAmount }}
+
发票税额: {{ detail.ticketAmount }}
收票状态: diff --git a/oms_web/oms_vue/src/views/finance/receipt/index.vue b/oms_web/oms_vue/src/views/finance/receipt/index.vue index 76606b33..a647fb39 100644 --- a/oms_web/oms_vue/src/views/finance/receipt/index.vue +++ b/oms_web/oms_vue/src/views/finance/receipt/index.vue @@ -176,11 +176,12 @@ type="text" icon="el-icon-document" @click="handleReceipt(scope.row)" - >收票附件 + >发票 退回 listByPayableBillIdList(List collect); List selectByTicketPlanIds(List ticketPlanIds); + + List listDetailByTicketCode(String ticketBillCode); } \ No newline at end of file diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OmsPayableTicketDetailServiceImpl.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OmsPayableTicketDetailServiceImpl.java index 88a5d0d4..75dafb18 100644 --- a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OmsPayableTicketDetailServiceImpl.java +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OmsPayableTicketDetailServiceImpl.java @@ -157,4 +157,11 @@ public class OmsPayableTicketDetailServiceImpl implements IOmsPayableTicketDetai public List selectByTicketPlanIds(List ticketPlanIds) { return omsPayableTicketDetailMapper.selectByTicketPlanIds(ticketPlanIds); } + + @Override + public List listDetailByTicketCode(String ticketBillCode) { + OmsPayableTicketDetail omsPayableTicketDetail = new OmsPayableTicketDetail(); + omsPayableTicketDetail.setTicketBillCode(ticketBillCode); + return omsPayableTicketDetailMapper.selectOmsPayableTicketDetailList(omsPayableTicketDetail); + } } \ No newline at end of file diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OmsTicketBillServiceImpl.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OmsTicketBillServiceImpl.java index 48eeb0bb..a0136fab 100644 --- a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OmsTicketBillServiceImpl.java +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OmsTicketBillServiceImpl.java @@ -2,23 +2,25 @@ package com.ruoyi.sip.service.impl; import java.util.Collections; import java.util.List; +import java.util.stream.Collectors; +import cn.hutool.core.collection.CollUtil; import com.ruoyi.common.config.RuoYiConfig; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.enums.ApproveStatusEnum; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.ShiroUtils; +import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.file.FileUploadUtils; -import com.ruoyi.sip.domain.OmsFinAttachment; -import com.ruoyi.sip.domain.OmsPaymentBill; +import com.ruoyi.sip.domain.*; import com.ruoyi.sip.domain.dto.PaymentBillPayableDetailDTO; import com.ruoyi.sip.service.IOmsFinAttachmentService; +import com.ruoyi.sip.service.IOmsPayableBillService; import com.ruoyi.sip.service.IOmsPayableTicketDetailService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.ruoyi.sip.mapper.OmsTicketBillMapper; -import com.ruoyi.sip.domain.OmsTicketBill; import com.ruoyi.sip.service.IOmsTicketBillService; import cn.hutool.core.date.DatePattern; import cn.hutool.core.date.DateUtil; @@ -41,6 +43,8 @@ public class OmsTicketBillServiceImpl implements IOmsTicketBillService private IOmsPayableTicketDetailService payableTicketDetailService; @Autowired private IOmsFinAttachmentService omsFinAttachmentService; + @Autowired + private IOmsPayableBillService payableBillService; /** * 查询采购收票单 @@ -78,6 +82,9 @@ public class OmsTicketBillServiceImpl implements IOmsTicketBillService @Override public int insertOmsTicketBill(OmsTicketBill omsTicketBill) { + if (StringUtils.isEmpty(omsTicketBill.getApproveStatus())){ + omsTicketBill.setApproveStatus(ApproveStatusEnum.WAIT_COMMIT.getCode()); + } omsTicketBill.setTicketBillCode(generateTicketBillCode()); omsTicketBill.setCreateTime(DateUtils.getNowDate()); return omsTicketBillMapper.insertOmsTicketBill(omsTicketBill); @@ -169,12 +176,13 @@ public class OmsTicketBillServiceImpl implements IOmsTicketBillService attachment.setCreateBy(loginUser.getUserId().toString()); omsFinAttachmentService.insertOmsFinAttachment(attachment); omsTicketBill.setActualTicketTime(DateUtils.getNowDate()); - omsTicketBill.setTicketStatus(OmsTicketBill.TicketStatusEnum.TICKET.getCode()); +// omsTicketBill.setTicketStatus(OmsTicketBill.TicketStatusEnum.TICKET.getCode()); + omsTicketBill.setApproveStatus(ApproveStatusEnum.WAIT_APPROVE.getCode()); omsTicketBill.setTicketPriceWithTax(bill.getTicketPriceWithTax()); omsTicketBill.setTicketPriceWithoutTax(bill.getTicketPriceWithoutTax()); omsTicketBill.setTicketType(bill.getTicketType()); updateOmsTicketBill(omsTicketBill); - +//todo 开启审批流程 return AjaxResult.success(attachment); } @@ -207,6 +215,7 @@ public class OmsTicketBillServiceImpl implements IOmsTicketBillService refundBill.setTicketType(originalBill.getTicketType()); // 设置新属性 refundBill.setTicketBillType(OmsTicketBill.TicketBillTypeEnum.RED_RUSH.getCode()); + refundBill.setTicketStatus(OmsTicketBill.TicketStatusEnum.TICKET.getCode()); refundBill.setRefundStatus(OmsTicketBill.RefundStatusEnum.REFUNDED.getCode()); refundBill.setApproveStatus(ApproveStatusEnum.WAIT_APPROVE.getCode()); refundBill.setOriginalBillId(originalBill.getId()); @@ -244,7 +253,7 @@ public class OmsTicketBillServiceImpl implements IOmsTicketBillService if (!OmsTicketBill.TicketBillTypeEnum.FROM_PAYABLE.getCode().equals(ticketBill.getTicketBillType())) { return AjaxResult.error("只有由应付单合并生成的收票单才能执行退回操作"); } - + List omsPayableTicketDetails = payableTicketDetailService.listDetailByTicketCode(ticketBill.getTicketBillCode()); // 3. 清楚关联 payableTicketDetailService.clearRelationPayable(ticketBill.getTicketBillCode()); @@ -254,7 +263,9 @@ public class OmsTicketBillServiceImpl implements IOmsTicketBillService if (result <= 0) { throw new RuntimeException("删除付款单失败"); } - + if (CollUtil.isNotEmpty(omsPayableTicketDetails)) { + payableBillService.updateTicketAmount(omsPayableTicketDetails.stream().map(OmsPayableTicketDetail::getPayableBillId).distinct().collect(Collectors.toList())); + } return AjaxResult.success("付款单退回成功!"); } catch (Exception e) {