From 4cc2d3beb1d0d34de320ce8ae5edf13c66e9210d Mon Sep 17 00:00:00 2001 From: chenhao Date: Thu, 11 Dec 2025 20:06:23 +0800 Subject: [PATCH] =?UTF-8?q?feat(finance):=20=E6=96=B0=E5=A2=9E=E6=94=B6?= =?UTF-8?q?=E7=A5=A8=E5=8D=95=E7=AE=A1=E7=90=86=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增收票单新增、详情查看、附件上传、退回及红冲申请功能 - 实现收票单与应付单关联展示及合并收票逻辑 - 提供收票计划选择与金额计算功能 - 支持收票状态、审批状态等多维度查询过滤 - 集成字典标签展示收票类型、审批状态等相关字段 - 添加收票单据的增删改查接口支持 --- .../payable/components/MergeReceiptDialog.vue | 362 +++++++++++ .../components/ReceivingTicketPlan.vue | 293 +++++++++ .../finance/receipt/components/AddForm.vue | 142 +++++ .../receipt/components/DetailDrawer.vue | 141 +++++ .../receipt/components/ReceiptDialog.vue | 572 ++++++++++++++++++ .../src/views/finance/receipt/index.vue | 345 +++++++++++ .../OmsPayableTicketDetailController.java | 98 +++ .../OmsPayableTicketPlanController.java | 97 +++ .../controller/OmsPaymentBillController.java | 15 +- .../controller/OmsTicketBillController.java | 170 ++++++ .../ruoyi/sip/domain/OmsFinAttachment.java | 2 +- .../sip/domain/OmsPayableTicketDetail.java | 59 ++ .../sip/domain/OmsPayableTicketPlan.java | 36 ++ .../com/ruoyi/sip/domain/OmsTicketBill.java | 180 ++++++ .../sip/domain/dto/MergedReceiptDataDto.java | 15 + .../domain/dto/PayableOrderReceiptDto.java | 13 + .../sip/domain/dto/TicketBillDetailDTO.java | 97 +++ .../ruoyi/sip/domain/dto/TicketPlanDto.java | 63 ++ .../mapper/OmsPayableTicketDetailMapper.java | 73 +++ .../mapper/OmsPayableTicketPlanMapper.java | 61 ++ .../ruoyi/sip/mapper/OmsTicketBillMapper.java | 64 ++ .../IOmsPayableTicketDetailService.java | 71 +++ .../service/IOmsPayableTicketPlanService.java | 64 ++ .../sip/service/IOmsTicketBillService.java | 70 +++ .../OmsPayableTicketDetailServiceImpl.java | 155 +++++ .../impl/OmsPayableTicketPlanServiceImpl.java | 152 +++++ .../impl/OmsTicketBillServiceImpl.java | 264 ++++++++ .../sip/OmsPayableTicketDetailMapper.xml | 241 ++++++++ .../mapper/sip/OmsPayableTicketPlanMapper.xml | 157 +++++ .../mapper/sip/OmsTicketBillMapper.xml | 337 +++++++++++ 30 files changed, 4394 insertions(+), 15 deletions(-) create mode 100644 oms_web/oms_vue/src/views/finance/payable/components/MergeReceiptDialog.vue create mode 100644 oms_web/oms_vue/src/views/finance/payable/components/ReceivingTicketPlan.vue create mode 100644 oms_web/oms_vue/src/views/finance/receipt/components/AddForm.vue create mode 100644 oms_web/oms_vue/src/views/finance/receipt/components/DetailDrawer.vue create mode 100644 oms_web/oms_vue/src/views/finance/receipt/components/ReceiptDialog.vue create mode 100644 oms_web/oms_vue/src/views/finance/receipt/index.vue create mode 100644 ruoyi-sip/src/main/java/com/ruoyi/sip/controller/OmsPayableTicketDetailController.java create mode 100644 ruoyi-sip/src/main/java/com/ruoyi/sip/controller/OmsPayableTicketPlanController.java create mode 100644 ruoyi-sip/src/main/java/com/ruoyi/sip/controller/OmsTicketBillController.java create mode 100644 ruoyi-sip/src/main/java/com/ruoyi/sip/domain/OmsPayableTicketDetail.java create mode 100644 ruoyi-sip/src/main/java/com/ruoyi/sip/domain/OmsPayableTicketPlan.java create mode 100644 ruoyi-sip/src/main/java/com/ruoyi/sip/domain/OmsTicketBill.java create mode 100644 ruoyi-sip/src/main/java/com/ruoyi/sip/domain/dto/MergedReceiptDataDto.java create mode 100644 ruoyi-sip/src/main/java/com/ruoyi/sip/domain/dto/PayableOrderReceiptDto.java create mode 100644 ruoyi-sip/src/main/java/com/ruoyi/sip/domain/dto/TicketBillDetailDTO.java create mode 100644 ruoyi-sip/src/main/java/com/ruoyi/sip/domain/dto/TicketPlanDto.java create mode 100644 ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/OmsPayableTicketDetailMapper.java create mode 100644 ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/OmsPayableTicketPlanMapper.java create mode 100644 ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/OmsTicketBillMapper.java create mode 100644 ruoyi-sip/src/main/java/com/ruoyi/sip/service/IOmsPayableTicketDetailService.java create mode 100644 ruoyi-sip/src/main/java/com/ruoyi/sip/service/IOmsPayableTicketPlanService.java create mode 100644 ruoyi-sip/src/main/java/com/ruoyi/sip/service/IOmsTicketBillService.java create mode 100644 ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OmsPayableTicketDetailServiceImpl.java create mode 100644 ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OmsPayableTicketPlanServiceImpl.java create mode 100644 ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OmsTicketBillServiceImpl.java create mode 100644 ruoyi-sip/src/main/resources/mapper/sip/OmsPayableTicketDetailMapper.xml create mode 100644 ruoyi-sip/src/main/resources/mapper/sip/OmsPayableTicketPlanMapper.xml create mode 100644 ruoyi-sip/src/main/resources/mapper/sip/OmsTicketBillMapper.xml diff --git a/oms_web/oms_vue/src/views/finance/payable/components/MergeReceiptDialog.vue b/oms_web/oms_vue/src/views/finance/payable/components/MergeReceiptDialog.vue new file mode 100644 index 00000000..4a2bdd24 --- /dev/null +++ b/oms_web/oms_vue/src/views/finance/payable/components/MergeReceiptDialog.vue @@ -0,0 +1,362 @@ + + + + + diff --git a/oms_web/oms_vue/src/views/finance/payable/components/ReceivingTicketPlan.vue b/oms_web/oms_vue/src/views/finance/payable/components/ReceivingTicketPlan.vue new file mode 100644 index 00000000..02340248 --- /dev/null +++ b/oms_web/oms_vue/src/views/finance/payable/components/ReceivingTicketPlan.vue @@ -0,0 +1,293 @@ + + + + + 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 new file mode 100644 index 00000000..078561aa --- /dev/null +++ b/oms_web/oms_vue/src/views/finance/receipt/components/AddForm.vue @@ -0,0 +1,142 @@ + + + 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 new file mode 100644 index 00000000..ae0eaa85 --- /dev/null +++ b/oms_web/oms_vue/src/views/finance/receipt/components/DetailDrawer.vue @@ -0,0 +1,141 @@ + + + + + diff --git a/oms_web/oms_vue/src/views/finance/receipt/components/ReceiptDialog.vue b/oms_web/oms_vue/src/views/finance/receipt/components/ReceiptDialog.vue new file mode 100644 index 00000000..997d2ce8 --- /dev/null +++ b/oms_web/oms_vue/src/views/finance/receipt/components/ReceiptDialog.vue @@ -0,0 +1,572 @@ + + + + + diff --git a/oms_web/oms_vue/src/views/finance/receipt/index.vue b/oms_web/oms_vue/src/views/finance/receipt/index.vue new file mode 100644 index 00000000..76606b33 --- /dev/null +++ b/oms_web/oms_vue/src/views/finance/receipt/index.vue @@ -0,0 +1,345 @@ + + + diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/OmsPayableTicketDetailController.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/OmsPayableTicketDetailController.java new file mode 100644 index 00000000..0b59c820 --- /dev/null +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/OmsPayableTicketDetailController.java @@ -0,0 +1,98 @@ +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.OmsPayableTicketDetail; +import com.ruoyi.sip.service.IOmsPayableTicketDetailService; +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 ruoyi + * @date 2025-12-09 + */ +@RestController +@RequestMapping("/sip/ticketDetail") +public class OmsPayableTicketDetailController extends BaseController +{ + @Autowired + private IOmsPayableTicketDetailService omsPayableTicketDetailService; + + /** + * 查询应付单收票明细列表 + */ + @RequiresPermissions("sip:ticketDetail:list") + @GetMapping("/list") + public TableDataInfo list(OmsPayableTicketDetail omsPayableTicketDetail) + { + startPage(); + List list = omsPayableTicketDetailService.selectOmsPayableTicketDetailList(omsPayableTicketDetail); + return getDataTable(list); + } + + /** + * 导出应付单收票明细列表 + */ + @RequiresPermissions("sip:ticketDetail:export") + @Log(title = "应付单收票明细", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, OmsPayableTicketDetail omsPayableTicketDetail) + { + List list = omsPayableTicketDetailService.selectOmsPayableTicketDetailList(omsPayableTicketDetail); + ExcelUtil util = new ExcelUtil(OmsPayableTicketDetail.class); + util.exportExcel(response, list, "应付单收票明细数据"); + } + + /** + * 获取应付单收票明细详细信息 + */ + @RequiresPermissions("sip:ticketDetail:query") + @GetMapping(value = "/{id}") + public AjaxResult getInfo(@PathVariable("id") Long id) + { + return AjaxResult.success(omsPayableTicketDetailService.selectOmsPayableTicketDetailById(id)); + } + + /** + * 新增应付单收票明细 + */ + @RequiresPermissions("sip:ticketDetail:add") + @Log(title = "应付单收票明细", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody OmsPayableTicketDetail omsPayableTicketDetail) + { + return toAjax(omsPayableTicketDetailService.insertOmsPayableTicketDetail(omsPayableTicketDetail)); + } + + /** + * 修改应付单收票明细 + */ + @RequiresPermissions("sip:ticketDetail:edit") + @Log(title = "应付单收票明细", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody OmsPayableTicketDetail omsPayableTicketDetail) + { + return toAjax(omsPayableTicketDetailService.updateOmsPayableTicketDetail(omsPayableTicketDetail)); + } + + /** + * 删除应付单收票明细 + */ + @RequiresPermissions("sip:ticketDetail:remove") + @Log(title = "应付单收票明细", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public AjaxResult remove(@PathVariable Long[] ids) + { + return toAjax(omsPayableTicketDetailService.deleteOmsPayableTicketDetailByIds(ids)); + } +} \ No newline at end of file diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/OmsPayableTicketPlanController.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/OmsPayableTicketPlanController.java new file mode 100644 index 00000000..a5ae504c --- /dev/null +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/OmsPayableTicketPlanController.java @@ -0,0 +1,97 @@ +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.OmsPayablePaymentPlan; +import com.ruoyi.sip.domain.OmsPayableTicketPlan; +import com.ruoyi.sip.service.IOmsPayableTicketPlanService; +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 ruoyi + * @date 2025-12-09 + */ +@RestController +@RequestMapping("/finance/ticket/plan") +public class OmsPayableTicketPlanController extends BaseController +{ + @Autowired + private IOmsPayableTicketPlanService omsPayableTicketPlanService; + + /** + * 查询应付单收票计划列表 + */ + @RequiresPermissions("sip:ticketPlan:list") + @GetMapping("/list") + public TableDataInfo list(OmsPayableTicketPlan omsPayableTicketPlan) + { + startPage(); + List list = omsPayableTicketPlanService.selectOmsPayableTicketPlanList(omsPayableTicketPlan); + return getDataTable(list); + } + + /** + * 导出应付单收票计划列表 + */ + @RequiresPermissions("sip:ticketPlan:export") + @Log(title = "应付单收票计划", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, OmsPayableTicketPlan omsPayableTicketPlan) + { + List list = omsPayableTicketPlanService.selectOmsPayableTicketPlanList(omsPayableTicketPlan); + ExcelUtil util = new ExcelUtil(OmsPayableTicketPlan.class); + util.exportExcel(response, list, "应付单收票计划数据"); + } + + /** + * 获取应付单收票计划详细信息 + */ + @RequiresPermissions("sip:ticketPlan:query") + @GetMapping(value = "/{payableBillId}") + public AjaxResult getInfo(@PathVariable("payableBillId") Long payableBillId) + { + return AjaxResult.success(omsPayableTicketPlanService.listByPayableBillId(payableBillId)); + } + + /** + * 新增应付单收票计划 + */ + @RequiresPermissions("sip:ticketPlan:add") + @Log(title = "应付单收票计划", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody OmsPayableTicketPlan omsPayableTicketPlan) + { + return toAjax(omsPayableTicketPlanService.insertOmsPayableTicketPlan(omsPayableTicketPlan)); + } + + /** + * 修改应付单收票计划 + */ + @PostMapping("/{payableBillId}") + public AjaxResult updateTicketPlan(@PathVariable("payableBillId") Long payableBillId, @RequestBody List ticketPlanList) { + omsPayableTicketPlanService.updateTicketPlan(payableBillId, ticketPlanList); + return AjaxResult.success(); + } + + /** + * 删除应付单收票计划 + */ + @RequiresPermissions("sip:ticketPlan:remove") + @Log(title = "应付单收票计划", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public AjaxResult remove(@PathVariable Long[] ids) + { + return toAjax(omsPayableTicketPlanService.deleteOmsPayableTicketPlanByIds(ids)); + } +} \ No newline at end of file diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/OmsPaymentBillController.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/OmsPaymentBillController.java index d14d59be..20fe69a1 100644 --- a/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/OmsPaymentBillController.java +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/OmsPaymentBillController.java @@ -211,20 +211,7 @@ public class OmsPaymentBillController extends BaseController return AjaxResult.error("操作失败:" + e.getMessage()); } } -// -// /** -// * 上传退款图 -// */ -// @PostMapping("/uploadRefundProof") -// @ResponseBody -// public AjaxResult uploadRefundProof(@RequestParam("paymentBillId") Long paymentBillId, @RequestParam("file") MultipartFile file) { -// try { -// return omsPaymentBillService.uploadRefundProof(paymentBillId, file); -// } catch (Exception e) { -// logger.error("上传退款图失败", e); -// return AjaxResult.error("操作失败:" + e.getMessage()); -// } -// } + } diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/OmsTicketBillController.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/OmsTicketBillController.java new file mode 100644 index 00000000..b3741b95 --- /dev/null +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/OmsTicketBillController.java @@ -0,0 +1,170 @@ +package com.ruoyi.sip.controller; + +import java.util.Collections; +import java.util.List; +import javax.servlet.http.HttpServletResponse; + +import com.ruoyi.sip.domain.OmsFinAttachment; +import com.ruoyi.sip.service.IOmsFinAttachmentService; +import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.sip.domain.OmsTicketBill; +import com.ruoyi.sip.service.IOmsTicketBillService; +import com.ruoyi.common.core.page.TableDataInfo; +import org.springframework.web.multipart.MultipartFile; + +/** + * 采购收票单Controller + * + * @author ruoyi + * @date 2025-12-09 + */ +@RestController +@RequestMapping("/finance/ticket") +public class OmsTicketBillController extends BaseController +{ + @Autowired + private IOmsTicketBillService omsTicketBillService; +@Autowired +private IOmsFinAttachmentService omsFinAttachmentService; + /** + * 查询采购收票单列表 + */ + @RequiresPermissions("sip:ticketBill:list") + @GetMapping("/list") + public TableDataInfo list(OmsTicketBill omsTicketBill) + { + startPage(); + List list = omsTicketBillService.selectOmsTicketBillList(omsTicketBill); + return getDataTable(list); + } + + /** + * 导出采购收票单列表 + */ + @RequiresPermissions("sip:ticketBill:export") + @Log(title = "采购收票单", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, OmsTicketBill omsTicketBill) + { + List list = omsTicketBillService.selectOmsTicketBillList(omsTicketBill); + ExcelUtil util = new ExcelUtil(OmsTicketBill.class); + util.exportExcel(response, list, "采购收票单数据"); + } + + /** + * 获取采购收票单详细信息 + */ + @RequiresPermissions("sip:ticketBill:query") + @GetMapping(value = "/{id}") + public AjaxResult getInfo(@PathVariable("id") Long id) + { + return AjaxResult.success(omsTicketBillService.selectOmsTicketBillById(id)); + } + + /** + * 新增采购收票单 + */ + @RequiresPermissions("sip:ticketBill:add") + @Log(title = "采购收票单", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody OmsTicketBill omsTicketBill) + { + return toAjax(omsTicketBillService.insertOmsTicketBill(omsTicketBill)); + } + + /** + * 修改采购收票单 + */ + @RequiresPermissions("sip:ticketBill:edit") + @Log(title = "采购收票单", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody OmsTicketBill omsTicketBill) + { + return toAjax(omsTicketBillService.updateOmsTicketBill(omsTicketBill)); + } + + /** + * 删除采购收票单 + */ + @RequiresPermissions("sip:ticketBill:remove") + @Log(title = "采购收票单", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public AjaxResult remove(@PathVariable Long[] ids) + { + return toAjax(omsTicketBillService.deleteOmsTicketBillByIds(ids)); + } + /** + * 查看回执单页面 + */ + @GetMapping("/attachment/{id}") + @ResponseBody + public AjaxResult viewReceipt(@PathVariable("id") Long id, @RequestParam("type") String type) + { + + return AjaxResult.success( omsFinAttachmentService.list(Collections.singletonList(id),type)); + } +// + /** + * 上传回执单 + */ + + @Log(title = "上传回执单", businessType = BusinessType.UPDATE) + @PostMapping("/uploadReceipt") + @ResponseBody + public AjaxResult uploadReceipt(OmsTicketBill ticketBill, @RequestParam("file") MultipartFile file) + { + try + { + + return omsTicketBillService.uploadReceipt(ticketBill, file); + } + catch (Exception e) + { + logger.error("上传回执单失败", e); + return AjaxResult.error("操作失败:" + e.getMessage()); + } + } + + /** + * 申请红冲 + */ + @GetMapping("/applyRefund/{id}") + @ResponseBody + public AjaxResult applyRefund(@PathVariable("id") Long id) { + try { + return omsTicketBillService.applyRefund(id); + } catch (Exception e) { + logger.error("申请退款失败", e); + return AjaxResult.error("操作失败:" + e.getMessage()); + } + } + /** + * 退回付款单 + */ + @RequiresPermissions("finance:payment:return") + @Log(title = "退回付款单", businessType = BusinessType.UPDATE) + @DeleteMapping("/return/{id}") + @ResponseBody + public AjaxResult returnTicket(@PathVariable("id") Long id) + { + try { + // 验证付款单ID + if (id == null) { + return AjaxResult.error("收票ID不能为空"); + } + + // 调用服务层方法处理退回逻辑 + return omsTicketBillService.returnTicket(id); + } catch (Exception e) { + logger.error("退回付款单失败", e); + return AjaxResult.error("操作失败:" + e.getMessage()); + } + } +} \ No newline at end of file diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/OmsFinAttachment.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/OmsFinAttachment.java index 554c53a3..ba6e947d 100644 --- a/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/OmsFinAttachment.java +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/OmsFinAttachment.java @@ -56,7 +56,7 @@ public class OmsFinAttachment extends BaseEntity /** 付款单 */ PAYMENT("payment", "付款单"), - INVOICE("invoice", "收票单"), + INVOICE("ticket", "收票单"), diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/OmsPayableTicketDetail.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/OmsPayableTicketDetail.java new file mode 100644 index 00000000..dcc7fe16 --- /dev/null +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/OmsPayableTicketDetail.java @@ -0,0 +1,59 @@ +package com.ruoyi.sip.domain; + +import com.ruoyi.common.core.domain.BaseEntity; +import lombok.Data; +import lombok.Getter; + +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; + +/** + * 应付单收票明细对象 oms_payable_ticket_detail + * + * @author ruoyi + * @date 2025-12-09 + */ +@Data +public class OmsPayableTicketDetail extends BaseEntity { + private static final long serialVersionUID = 1L; + + private Long id; + private Long ticketPlanId; + private Long payableBillId; + private List payableBillIdList; + private String payableDetailType; + // 收票时间 + private Date paymentTime; + // 收票金额 + private BigDecimal paymentAmount; + // 收票比例 + private BigDecimal paymentRate; + // 收票单号 + private String ticketBillCode; + private Long ticketBillId; + // 实际收票时间 + private Date actualTicketTime; + // 收票状态 + private String ticketStatus; + + @Getter + public enum PayableDetailTypeEnum { + + TICKET("1", "收票"), + RED_RUSH("2", "红冲"), + + + + ; + private final String code; + private final String desc; + + PayableDetailTypeEnum(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/OmsPayableTicketPlan.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/OmsPayableTicketPlan.java new file mode 100644 index 00000000..49724c54 --- /dev/null +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/OmsPayableTicketPlan.java @@ -0,0 +1,36 @@ +package com.ruoyi.sip.domain; + +import com.ruoyi.common.core.domain.BaseEntity; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.Date; + +/** + * 应付单收票计划对象 oms_payable_ticket_plan + * + * @author ruoyi + * @date 2025-12-09 + */ +@Data +public class OmsPayableTicketPlan extends BaseEntity { + private static final long serialVersionUID = 1L; + + /** 主键 */ + private Long id; + + /** 应付单ID */ + private Long payableBillId; + + /** 计划收票时间 */ + private Date planTicketDate; + + /** 计划收票金额 */ + private BigDecimal planAmount; + + /** 计划收票比例 */ + private BigDecimal planRate; + + private Long detailId; + +} \ No newline at end of file diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/OmsTicketBill.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/OmsTicketBill.java new file mode 100644 index 00000000..3bcc753c --- /dev/null +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/OmsTicketBill.java @@ -0,0 +1,180 @@ +package com.ruoyi.sip.domain; + +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.sip.domain.dto.PaymentBillPayableDetailDTO; +import lombok.AccessLevel; +import lombok.Data; +import lombok.Getter; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * 采购收票单对象 oms_ticket_bill + * + * @author ruoyi + * @date 2025-12-09 + */ +@Data +public class OmsTicketBill extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 主键ID */ + private Long id; + + /** 收票单编号 */ + @Excel(name = "收票单编号") + private String ticketBillCode; + + /** 票据类型 */ + @Excel(name = "票据类型") + private String ticketType; + + /** 收票单类型 (FROM_PAYABLE, PRE_PAYMENT) */ + @Excel(name = "收票单类型 (FROM_PAYABLE, PRE_PAYMENT)") + private String ticketBillType; + + /** 制造商开票时间 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + @Excel(name = "制造商开票时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") + private Date vendorTicketTime; + + /** 预计收票时间 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + @Excel(name = "预计收票时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") + private Date ticketTime; + + /** 制造商编码 */ + @Excel(name = "制造商编码") + private String vendorCode; + private String vendorName; + + /** 含税总价 */ + @Excel(name = "含税总价") + private BigDecimal totalPriceWithTax; + private BigDecimal ticketPriceWithTax; + + /** 未税总价 */ + @Excel(name = "未税总价") + private BigDecimal totalPriceWithoutTax; + private BigDecimal ticketPriceWithoutTax; + + /** 税额 */ + @Excel(name = "税额") + @Getter(value= AccessLevel.NONE) + private BigDecimal taxAmount; + @Getter(value= AccessLevel.NONE) + private BigDecimal ticketAmount; + private BigDecimal taxRate; + + /** 删除标志(0代表存在 2代表删除) */ + private String delFlag; + + /** 实际收票时间 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + @Excel(name = "实际收票时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") + private Date actualTicketTime; + + /** 收票状态 */ + @Excel(name = "收票状态") + private String ticketStatus; + + /** 审批状态 */ + @Excel(name = "审批状态") + private String approveStatus; + + /** 审批节点 */ + @Excel(name = "审批节点") + private String approveNode; + + /** 审批时间 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + @Excel(name = "审批时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") + private Date approveTime; + + /** 退款状态 */ + private String refundStatus; + + /** 应付单编号(关联查询字段) */ + @Excel(name = "应付单编号") + private String payableBillCode; + + /** 关联的原始收票单ID */ + private Long originalBillId; + private List detailList; + + + public BigDecimal getTaxAmount() { + if (null != totalPriceWithTax && null != totalPriceWithoutTax){ + return totalPriceWithTax.subtract(totalPriceWithoutTax); + } + return BigDecimal.ZERO; + } + public BigDecimal getTicketAmount() { + if (null != ticketPriceWithTax && null != ticketPriceWithoutTax){ + return ticketPriceWithTax.subtract(ticketPriceWithoutTax); + } + return BigDecimal.ZERO; + } + + @Getter + public enum TicketBillTypeEnum { + + /** 应付单生成 */ + FROM_PAYABLE("FROM_PAYABLE", "应付单生成"), + /** 预付单 */ +// PRE_PAYMENT("PRE_PAYMENT", "预付单"), + /** 退款单 */ + RED_RUSH("RED_RUSH", "红冲单"), + + + + ; + private final String code; + private final String desc; + TicketBillTypeEnum(String code, String desc) { + this.code = code; + this.desc = desc; + } + } + @Getter + public enum TicketStatusEnum { + + /** 应付单生成 */ + RED_RUSH("-1", "已红冲"), + WAIT_TICKET("1", "未收票"), + /** 预付单 */ + TICKET("2", "已收票"), + + + + ; + private final String code; + private final String desc; + TicketStatusEnum(String code, String desc) { + this.code = code; + this.desc = desc; + } + } + @Getter + public enum RefundStatusEnum { + + /** 应付单生成 */ + REFUNDED("RED_RUSH_APPLIED", "已申请红冲"), + WAIT_REFUNDED("WAIT_RED_RUSH", "未红冲") + + ; + private final String code; + private final String desc; + RefundStatusEnum(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/dto/MergedReceiptDataDto.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/dto/MergedReceiptDataDto.java new file mode 100644 index 00000000..334a9e19 --- /dev/null +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/dto/MergedReceiptDataDto.java @@ -0,0 +1,15 @@ +package com.ruoyi.sip.domain.dto; + +import lombok.Data; + +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; + +@Data +public class MergedReceiptDataDto { + private String ticketBillType; + private Date ticketTime; + private List payableOrders; + private BigDecimal totalMergeTicketAmount; +} diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/dto/PayableOrderReceiptDto.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/dto/PayableOrderReceiptDto.java new file mode 100644 index 00000000..a95dbbc5 --- /dev/null +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/dto/PayableOrderReceiptDto.java @@ -0,0 +1,13 @@ +package com.ruoyi.sip.domain.dto; + +import com.ruoyi.sip.domain.OmsPayableTicketPlan; +import lombok.Data; + +import java.util.List; + +@Data +public class PayableOrderReceiptDto { + private Long id; + private String payableBillCode; + private List ticketPlans; +} diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/dto/TicketBillDetailDTO.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/dto/TicketBillDetailDTO.java new file mode 100644 index 00000000..730e9c86 --- /dev/null +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/dto/TicketBillDetailDTO.java @@ -0,0 +1,97 @@ +package com.ruoyi.sip.domain.dto; + +import com.ruoyi.sip.domain.OmsPayableTicketDetail; + +import java.math.BigDecimal; +import java.util.List; + +/** + * 收票单详情数据传输对象 + * + * @author ruoyi + * @date 2025-12-09 + */ +public class TicketBillDetailDTO { + + private String ticketBillCode; + private String ticketType; + private String ticketBillType; + private String vendorCode; + private String vendorName; + private BigDecimal totalPriceWithTax; + private BigDecimal totalPriceWithoutTax; + private BigDecimal taxAmount; + private List detailList; + + public String getTicketBillCode() { + return ticketBillCode; + } + + public void setTicketBillCode(String ticketBillCode) { + this.ticketBillCode = ticketBillCode; + } + + public String getTicketType() { + return ticketType; + } + + public void setTicketType(String ticketType) { + this.ticketType = ticketType; + } + + public String getTicketBillType() { + return ticketBillType; + } + + public void setTicketBillType(String ticketBillType) { + this.ticketBillType = ticketBillType; + } + + public String getVendorCode() { + return vendorCode; + } + + public void setVendorCode(String vendorCode) { + this.vendorCode = vendorCode; + } + + public String getVendorName() { + return vendorName; + } + + public void setVendorName(String vendorName) { + this.vendorName = vendorName; + } + + public BigDecimal getTotalPriceWithTax() { + return totalPriceWithTax; + } + + public void setTotalPriceWithTax(BigDecimal totalPriceWithTax) { + this.totalPriceWithTax = totalPriceWithTax; + } + + public BigDecimal getTotalPriceWithoutTax() { + return totalPriceWithoutTax; + } + + public void setTotalPriceWithoutTax(BigDecimal totalPriceWithoutTax) { + this.totalPriceWithoutTax = totalPriceWithoutTax; + } + + public BigDecimal getTaxAmount() { + return taxAmount; + } + + public void setTaxAmount(BigDecimal taxAmount) { + this.taxAmount = taxAmount; + } + + public List getDetailList() { + return detailList; + } + + public void setDetailList(List detailList) { + this.detailList = detailList; + } +} \ No newline at end of file diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/dto/TicketPlanDto.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/dto/TicketPlanDto.java new file mode 100644 index 00000000..b8ae33c2 --- /dev/null +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/dto/TicketPlanDto.java @@ -0,0 +1,63 @@ +package com.ruoyi.sip.domain.dto; + +import java.math.BigDecimal; +import java.util.Date; + +/** + * 收票计划数据传输对象 + * + * @author ruoyi + * @date 2025-12-09 + */ +public class TicketPlanDto { + + private Long id; + + private Long payableBillId; + + private Date planTicketDate; + + private BigDecimal planAmount; + + private BigDecimal planRate; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getPayableBillId() { + return payableBillId; + } + + public void setPayableBillId(Long payableBillId) { + this.payableBillId = payableBillId; + } + + public Date getPlanTicketDate() { + return planTicketDate; + } + + public void setPlanTicketDate(Date planTicketDate) { + this.planTicketDate = planTicketDate; + } + + public BigDecimal getPlanAmount() { + return planAmount; + } + + public void setPlanAmount(BigDecimal planAmount) { + this.planAmount = planAmount; + } + + public BigDecimal getPlanRate() { + return planRate; + } + + public void setPlanRate(BigDecimal planRate) { + this.planRate = planRate; + } +} \ No newline at end of file diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/OmsPayableTicketDetailMapper.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/OmsPayableTicketDetailMapper.java new file mode 100644 index 00000000..dd7635be --- /dev/null +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/OmsPayableTicketDetailMapper.java @@ -0,0 +1,73 @@ +package com.ruoyi.sip.mapper; + +import java.util.List; + +import com.ruoyi.sip.domain.OmsPayablePaymentDetail; +import com.ruoyi.sip.domain.OmsPayableTicketDetail; +import com.ruoyi.sip.domain.dto.PaymentBillPayableDetailDTO; + +/** + * 应付单收票明细Mapper接口 + * + * @author ruoyi + * @date 2025-12-09 + */ +public interface OmsPayableTicketDetailMapper +{ + /** + * 查询应付单收票明细 + * + * @param id 应付单收票明细主键 + * @return 应付单收票明细 + */ + public OmsPayableTicketDetail selectOmsPayableTicketDetailById(Long id); + + /** + * 查询应付单收票明细列表 + * + * @param omsPayableTicketDetail 应付单收票明细 + * @return 应付单收票明细集合 + */ + public List selectOmsPayableTicketDetailList(OmsPayableTicketDetail omsPayableTicketDetail); + + /** + * 新增应付单收票明细 + * + * @param omsPayableTicketDetail 应付单收票明细 + * @return 结果 + */ + public int insertOmsPayableTicketDetail(OmsPayableTicketDetail omsPayableTicketDetail); + + /** + * 修改应付单收票明细 + * + * @param omsPayableTicketDetail 应付单收票明细 + * @return 结果 + */ + public int updateOmsPayableTicketDetail(OmsPayableTicketDetail omsPayableTicketDetail); + + /** + * 删除应付单收票明细 + * + * @param id 应付单收票明细主键 + * @return 结果 + */ + public int deleteOmsPayableTicketDetailById(Long id); + + /** + * 批量删除应付单收票明细 + * + * @param ids 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteOmsPayableTicketDetailByIds(Long[] ids); + + List listByTickerCode(List codeList); + + void insertBatch(List addList); + + void clearRelationPayable(String ticketBillCode); + + List listByPayableBillIdList(List payableBillId); + +} \ No newline at end of file diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/OmsPayableTicketPlanMapper.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/OmsPayableTicketPlanMapper.java new file mode 100644 index 00000000..e7f471d7 --- /dev/null +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/OmsPayableTicketPlanMapper.java @@ -0,0 +1,61 @@ +package com.ruoyi.sip.mapper; + +import java.util.List; +import com.ruoyi.sip.domain.OmsPayableTicketPlan; + +/** + * 应付单收票计划Mapper接口 + * + * @author ruoyi + * @date 2025-12-09 + */ +public interface OmsPayableTicketPlanMapper +{ + /** + * 查询应付单收票计划 + * + * @param id 应付单收票计划主键 + * @return 应付单收票计划 + */ + public OmsPayableTicketPlan selectOmsPayableTicketPlanById(Long id); + + /** + * 查询应付单收票计划列表 + * + * @param omsPayableTicketPlan 应付单收票计划 + * @return 应付单收票计划集合 + */ + public List selectOmsPayableTicketPlanList(OmsPayableTicketPlan omsPayableTicketPlan); + + /** + * 新增应付单收票计划 + * + * @param omsPayableTicketPlan 应付单收票计划 + * @return 结果 + */ + public int insertOmsPayableTicketPlan(OmsPayableTicketPlan omsPayableTicketPlan); + + /** + * 修改应付单收票计划 + * + * @param omsPayableTicketPlan 应付单收票计划 + * @return 结果 + */ + public int updateOmsPayableTicketPlan(OmsPayableTicketPlan omsPayableTicketPlan); + + /** + * 删除应付单收票计划 + * + * @param id 应付单收票计划主键 + * @return 结果 + */ + public int deleteOmsPayableTicketPlanById(Long id); + + /** + * 批量删除应付单收票计划 + * + * @param ids 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteOmsPayableTicketPlanByIds(Long[] ids); +} \ No newline at end of file diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/OmsTicketBillMapper.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/OmsTicketBillMapper.java new file mode 100644 index 00000000..4973c57a --- /dev/null +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/OmsTicketBillMapper.java @@ -0,0 +1,64 @@ +package com.ruoyi.sip.mapper; + +import java.util.List; +import com.ruoyi.sip.domain.OmsTicketBill; + +/** + * 采购收票单Mapper接口 + * + * @author ruoyi + * @date 2025-12-09 + */ +public interface OmsTicketBillMapper +{ + /** + * 查询采购收票单 + * + * @param id 采购收票单主键 + * @return 采购收票单 + */ + public OmsTicketBill selectOmsTicketBillById(Long id); + + /** + * 查询采购收票单列表 + * + * @param omsTicketBill 采购收票单 + * @return 采购收票单集合 + */ + public List selectOmsTicketBillList(OmsTicketBill omsTicketBill); + + /** + * 新增采购收票单 + * + * @param omsTicketBill 采购收票单 + * @return 结果 + */ + public int insertOmsTicketBill(OmsTicketBill omsTicketBill); + + /** + * 修改采购收票单 + * + * @param omsTicketBill 采购收票单 + * @return 结果 + */ + public int updateOmsTicketBill(OmsTicketBill omsTicketBill); + + /** + * 删除采购收票单 + * + * @param id 采购收票单主键 + * @return 结果 + */ + public int deleteOmsTicketBillById(Long id); + + /** + * 批量删除采购收票单 + * + * @param ids 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteOmsTicketBillByIds(Long[] ids); + + public int selectMaxCodeByPrefix(String codePrefix); + +} \ No newline at end of file diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IOmsPayableTicketDetailService.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IOmsPayableTicketDetailService.java new file mode 100644 index 00000000..b8e15fe7 --- /dev/null +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IOmsPayableTicketDetailService.java @@ -0,0 +1,71 @@ +package com.ruoyi.sip.service; + +import java.util.List; + +import com.ruoyi.sip.domain.OmsPayablePaymentDetail; +import com.ruoyi.sip.domain.OmsPayableTicketDetail; +import com.ruoyi.sip.domain.dto.PaymentBillPayableDetailDTO; + +/** + * 应付单收票明细Service接口 + * + * @author ruoyi + * @date 2025-12-09 + */ +public interface IOmsPayableTicketDetailService +{ + /** + * 查询应付单收票明细 + * + * @param id 应付单收票明细主键 + * @return 应付单收票明细 + */ + public OmsPayableTicketDetail selectOmsPayableTicketDetailById(Long id); + + /** + * 查询应付单收票明细列表 + * + * @param omsPayableTicketDetail 应付单收票明细 + * @return 应付单收票明细集合 + */ + public List selectOmsPayableTicketDetailList(OmsPayableTicketDetail omsPayableTicketDetail); + + /** + * 新增应付单收票明细 + * + * @param omsPayableTicketDetail 应付单收票明细 + * @return 结果 + */ + public int insertOmsPayableTicketDetail(OmsPayableTicketDetail omsPayableTicketDetail); + + /** + * 修改应付单收票明细 + * + * @param omsPayableTicketDetail 应付单收票明细 + * @return 结果 + */ + public int updateOmsPayableTicketDetail(OmsPayableTicketDetail omsPayableTicketDetail); + + /** + * 批量删除应付单收票明细 + * + * @param ids 需要删除的主键集合 + * @return 结果 + */ + public int deleteOmsPayableTicketDetailByIds(Long[] ids); + + /** + * 删除应付单收票明细信息 + * + * @param id 应付单收票明细主键 + * @return 结果 + */ + public int deleteOmsPayableTicketDetailById(Long id); + List listByTickerCode(List code); + + void applyRefund(String originalId, String newCode); + + void clearRelationPayable(String ticketBillCode); + + List listByPayableBillIdList(List collect); +} \ No newline at end of file diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IOmsPayableTicketPlanService.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IOmsPayableTicketPlanService.java new file mode 100644 index 00000000..259fab4c --- /dev/null +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IOmsPayableTicketPlanService.java @@ -0,0 +1,64 @@ +package com.ruoyi.sip.service; + +import java.util.List; +import com.ruoyi.sip.domain.OmsPayableTicketPlan; + +/** + * 应付单收票计划Service接口 + * + * @author ruoyi + * @date 2025-12-09 + */ +public interface IOmsPayableTicketPlanService +{ + /** + * 查询应付单收票计划 + * + * @param id 应付单收票计划主键 + * @return 应付单收票计划 + */ + public List listByPayableBillId(Long id); + + /** + * 查询应付单收票计划列表 + * + * @param omsPayableTicketPlan 应付单收票计划 + * @return 应付单收票计划集合 + */ + public List selectOmsPayableTicketPlanList(OmsPayableTicketPlan omsPayableTicketPlan); + + /** + * 新增应付单收票计划 + * + * @param omsPayableTicketPlan 应付单收票计划 + * @return 结果 + */ + public int insertOmsPayableTicketPlan(OmsPayableTicketPlan omsPayableTicketPlan); + + /** + * 修改应付单收票计划 + * + * @param omsPayableTicketPlan 应付单收票计划 + * @return 结果 + */ + public int updateOmsPayableTicketPlan(OmsPayableTicketPlan omsPayableTicketPlan); + + /** + * 批量删除应付单收票计划 + * + * @param ids 需要删除的主键集合 + * @return 结果 + */ + public int deleteOmsPayableTicketPlanByIds(Long[] ids); + + /** + * 删除应付单收票计划信息 + * + * @param id 应付单收票计划主键 + * @return 结果 + */ + public int deleteOmsPayableTicketPlanById(Long id); + + void updateTicketPlan(Long payableBillId, List ticketPlanList); + +} \ No newline at end of file diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IOmsTicketBillService.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IOmsTicketBillService.java new file mode 100644 index 00000000..6d7f6a63 --- /dev/null +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IOmsTicketBillService.java @@ -0,0 +1,70 @@ +package com.ruoyi.sip.service; + +import java.util.List; + +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.sip.domain.OmsTicketBill; +import org.springframework.web.multipart.MultipartFile; + +/** + * 采购收票单Service接口 + * + * @author ruoyi + * @date 2025-12-09 + */ +public interface IOmsTicketBillService +{ + /** + * 查询采购收票单 + * + * @param id 采购收票单主键 + * @return 采购收票单 + */ + public OmsTicketBill selectOmsTicketBillById(Long id); + + /** + * 查询采购收票单列表 + * + * @param omsTicketBill 采购收票单 + * @return 采购收票单集合 + */ + public List selectOmsTicketBillList(OmsTicketBill omsTicketBill); + + /** + * 新增采购收票单 + * + * @param omsTicketBill 采购收票单 + * @return 结果 + */ + public int insertOmsTicketBill(OmsTicketBill omsTicketBill); + + /** + * 修改采购收票单 + * + * @param omsTicketBill 采购收票单 + * @return 结果 + */ + public int updateOmsTicketBill(OmsTicketBill omsTicketBill); + + /** + * 批量删除采购收票单 + * + * @param ids 需要删除的主键集合 + * @return 结果 + */ + public int deleteOmsTicketBillByIds(Long[] ids); + + /** + * 删除采购收票单信息 + * + * @param id 采购收票单主键 + * @return 结果 + */ + public int deleteOmsTicketBillById(Long id); + + AjaxResult uploadReceipt(OmsTicketBill attachment, MultipartFile file) throws Exception; + + AjaxResult applyRefund(Long id); + + AjaxResult returnTicket(Long id); +} \ 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 new file mode 100644 index 00000000..9bc2e877 --- /dev/null +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OmsPayableTicketDetailServiceImpl.java @@ -0,0 +1,155 @@ +package com.ruoyi.sip.service.impl; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollUtil; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.common.utils.ShiroUtils; +import com.ruoyi.sip.domain.OmsPayablePaymentDetail; +import com.ruoyi.sip.domain.dto.PaymentBillPayableDetailDTO; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.ruoyi.sip.mapper.OmsPayableTicketDetailMapper; +import com.ruoyi.sip.domain.OmsPayableTicketDetail; +import com.ruoyi.sip.service.IOmsPayableTicketDetailService; + +/** + * 应付单收票明细Service业务层处理 + * + * @author ruoyi + * @date 2025-12-09 + */ +@Service +public class OmsPayableTicketDetailServiceImpl implements IOmsPayableTicketDetailService +{ + @Autowired + private OmsPayableTicketDetailMapper omsPayableTicketDetailMapper; + + /** + * 查询应付单收票明细 + * + * @param id 应付单收票明细主键 + * @return 应付单收票明细 + */ + @Override + public OmsPayableTicketDetail selectOmsPayableTicketDetailById(Long id) + { + return omsPayableTicketDetailMapper.selectOmsPayableTicketDetailById(id); + } + + /** + * 查询应付单收票明细列表 + * + * @param omsPayableTicketDetail 应付单收票明细 + * @return 应付单收票明细 + */ + @Override + public List selectOmsPayableTicketDetailList(OmsPayableTicketDetail omsPayableTicketDetail) + { + return omsPayableTicketDetailMapper.selectOmsPayableTicketDetailList(omsPayableTicketDetail); + } + + /** + * 新增应付单收票明细 + * + * @param omsPayableTicketDetail 应付单收票明细 + * @return 结果 + */ + @Override + public int insertOmsPayableTicketDetail(OmsPayableTicketDetail omsPayableTicketDetail) + { + omsPayableTicketDetail.setCreateTime(DateUtils.getNowDate()); + return omsPayableTicketDetailMapper.insertOmsPayableTicketDetail(omsPayableTicketDetail); + } + + /** + * 修改应付单收票明细 + * + * @param omsPayableTicketDetail 应付单收票明细 + * @return 结果 + */ + @Override + public int updateOmsPayableTicketDetail(OmsPayableTicketDetail omsPayableTicketDetail) + { + omsPayableTicketDetail.setUpdateTime(DateUtils.getNowDate()); + return omsPayableTicketDetailMapper.updateOmsPayableTicketDetail(omsPayableTicketDetail); + } + + /** + * 批量删除应付单收票明细 + * + * @param ids 需要删除的主键集合 + * @return 结果 + */ + @Override + public int deleteOmsPayableTicketDetailByIds(Long[] ids) + { + return omsPayableTicketDetailMapper.deleteOmsPayableTicketDetailByIds(ids); + } + + /** + * 删除应付单收票明细信息 + * + * @param id 应付单收票明细主键 + * @return 结果 + */ + @Override + public int deleteOmsPayableTicketDetailById(Long id) + { + return omsPayableTicketDetailMapper.deleteOmsPayableTicketDetailById(id); + } + + @Override + public List listByTickerCode(List codeList) { + if (CollUtil.isEmpty(codeList)){ + return Collections.emptyList(); + } + List paymentBillPayableDetailDTOS = omsPayableTicketDetailMapper.listByTickerCode(codeList); + for (PaymentBillPayableDetailDTO paymentBillPayableDetailDTO : paymentBillPayableDetailDTOS) { + paymentBillPayableDetailDTO.setPaymentRate(paymentBillPayableDetailDTO.getPaymentAmount() + .divide(paymentBillPayableDetailDTO.getTotalPriceWithTax(),4,java.math.RoundingMode.HALF_UP) + .multiply(new BigDecimal("100"))); + } + return paymentBillPayableDetailDTOS; + + + } + + @Override + public void applyRefund(String originalCode, String newCode) { + OmsPayableTicketDetail query = new OmsPayableTicketDetail(); + query.setTicketBillCode(originalCode); + List list = omsPayableTicketDetailMapper.selectOmsPayableTicketDetailList(query); + if (CollUtil.isNotEmpty(list)){ + List addList=new ArrayList<>(); + for (OmsPayableTicketDetail detail : list) { + OmsPayableTicketDetail temp = new OmsPayableTicketDetail(); + BeanUtil.copyProperties(detail,temp); + temp.setId(null); + temp.setPayableDetailType(OmsPayableTicketDetail.PayableDetailTypeEnum.RED_RUSH.getCode()); + temp.setCreateBy(ShiroUtils.getUserId().toString()); + temp.setPaymentAmount(detail.getPaymentAmount().negate()); + temp.setPaymentRate(detail.getPaymentRate().negate()); + temp.setTicketBillCode(newCode); + temp.setRemark("退款"); + addList.add( temp); + } + omsPayableTicketDetailMapper.insertBatch(addList); + } + } + + @Override + public void clearRelationPayable(String ticketBillCode) { + omsPayableTicketDetailMapper.clearRelationPayable(ticketBillCode); + } + + @Override + public List listByPayableBillIdList(List payableBillId) { + return omsPayableTicketDetailMapper.listByPayableBillIdList(payableBillId); + } +} \ No newline at end of file diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OmsPayableTicketPlanServiceImpl.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OmsPayableTicketPlanServiceImpl.java new file mode 100644 index 00000000..030156a4 --- /dev/null +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OmsPayableTicketPlanServiceImpl.java @@ -0,0 +1,152 @@ +package com.ruoyi.sip.service.impl; + +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.function.Function; +import java.util.stream.Collectors; + +import cn.hutool.core.collection.CollUtil; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.common.utils.ShiroUtils; +import com.ruoyi.sip.domain.OmsPayablePaymentDetail; +import com.ruoyi.sip.domain.OmsPayablePaymentPlan; +import com.ruoyi.sip.domain.OmsPayableTicketDetail; +import com.ruoyi.sip.service.IOmsPayableTicketDetailService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.ruoyi.sip.mapper.OmsPayableTicketPlanMapper; +import com.ruoyi.sip.domain.OmsPayableTicketPlan; +import com.ruoyi.sip.service.IOmsPayableTicketPlanService; + +/** + * 应付单收票计划Service业务层处理 + * + * @author ruoyi + * @date 2025-12-09 + */ +@Service +public class OmsPayableTicketPlanServiceImpl implements IOmsPayableTicketPlanService { + @Autowired + private OmsPayableTicketPlanMapper omsPayableTicketPlanMapper; + @Autowired + private IOmsPayableTicketDetailService detailService; + + /** + * 查询应付单收票计划 + * + * @param id 应付单收票计划主键 + * @return 应付单收票计划 + */ + @Override + public List listByPayableBillId(Long payableBillId) { + OmsPayableTicketPlan omsPayableTicketPlan = new OmsPayableTicketPlan(); + omsPayableTicketPlan.setPayableBillId(payableBillId); + List omsPayableTicketPlans = omsPayableTicketPlanMapper.selectOmsPayableTicketPlanList(omsPayableTicketPlan); + if (CollUtil.isNotEmpty(omsPayableTicketPlans)) { + List omsPayablePaymentDetails = detailService.listByPayableBillIdList(omsPayableTicketPlans.stream().map(OmsPayableTicketPlan::getPayableBillId).collect(Collectors.toList())); + Map detailMap = omsPayablePaymentDetails.stream().collect(Collectors.toMap(OmsPayableTicketDetail::getTicketPlanId, Function.identity(), + (v1, v2) -> v1.getCreateTime().after(v2.getCreateTime()) ? v1 : v2)); + for (OmsPayableTicketPlan plan : omsPayableTicketPlans) { + //找到最新的一条数据 如果不是退款 那么不允许再次勾选 + OmsPayableTicketDetail detail = detailMap.get(plan.getId()); + if (detail != null && !OmsPayableTicketDetail.PayableDetailTypeEnum.RED_RUSH.getCode().equalsIgnoreCase(detail.getPayableDetailType())) { + + plan.setDetailId(detail.getId()); + } + } + } + + + return omsPayableTicketPlans; + } + + /** + * 查询应付单收票计划列表 + * + * @param omsPayableTicketPlan 应付单收票计划 + * @return 应付单收票计划 + */ + @Override + public List selectOmsPayableTicketPlanList(OmsPayableTicketPlan omsPayableTicketPlan) { + return omsPayableTicketPlanMapper.selectOmsPayableTicketPlanList(omsPayableTicketPlan); + } + + /** + * 新增应付单收票计划 + * + * @param omsPayableTicketPlan 应付单收票计划 + * @return 结果 + */ + @Override + public int insertOmsPayableTicketPlan(OmsPayableTicketPlan omsPayableTicketPlan) { + omsPayableTicketPlan.setCreateTime(DateUtils.getNowDate()); + return omsPayableTicketPlanMapper.insertOmsPayableTicketPlan(omsPayableTicketPlan); + } + + /** + * 修改应付单收票计划 + * + * @param omsPayableTicketPlan 应付单收票计划 + * @return 结果 + */ + @Override + public int updateOmsPayableTicketPlan(OmsPayableTicketPlan omsPayableTicketPlan) { + omsPayableTicketPlan.setUpdateTime(DateUtils.getNowDate()); + return omsPayableTicketPlanMapper.updateOmsPayableTicketPlan(omsPayableTicketPlan); + } + + /** + * 批量删除应付单收票计划 + * + * @param ids 需要删除的主键集合 + * @return 结果 + */ + @Override + public int deleteOmsPayableTicketPlanByIds(Long[] ids) { + return omsPayableTicketPlanMapper.deleteOmsPayableTicketPlanByIds(ids); + } + + /** + * 删除应付单收票计划信息 + * + * @param id 应付单收票计划主键 + * @return 结果 + */ + @Override + public int deleteOmsPayableTicketPlanById(Long id) { + return omsPayableTicketPlanMapper.deleteOmsPayableTicketPlanById(id); + } + + @Override + public void updateTicketPlan(Long payableBillId, List ticketPlanList) { + // 获取数据库中现有付款计划的ID + List omsPayableTicketPlans = listByPayableBillId(payableBillId); + Set existingPlanIdSet = omsPayableTicketPlans.stream().map(OmsPayableTicketPlan::getId).collect(Collectors.toSet()); + + // 用于存放前端传入的有效(非新增或已删除)的计划ID + Set incomingPlanIdSet = ticketPlanList.stream() + .filter(plan -> plan.getId() != null) + .map(OmsPayableTicketPlan::getId) + .collect(Collectors.toSet()); + + for (OmsPayableTicketPlan plan : ticketPlanList) { + plan.setPayableBillId(payableBillId); + if (plan.getId() == null) { + // 新增付款计划 + plan.setCreateBy(ShiroUtils.getLoginName()); + omsPayableTicketPlanMapper.insertOmsPayableTicketPlan(plan); + } else if (existingPlanIdSet.contains(plan.getId())) { + // 更新现有付款计划 + omsPayableTicketPlanMapper.updateOmsPayableTicketPlan(plan); + } + // 如果plan.getId()不为null但不在existingPlanIdSet中,说明是前端新添加但带有id的脏数据,或者是非法数据,这里不处理 + } + + // 删除数据库中存在但前端未提交的付款计划 + existingPlanIdSet.removeAll(incomingPlanIdSet); + for (Long idToDelete : existingPlanIdSet) { + omsPayableTicketPlanMapper.deleteOmsPayableTicketPlanById(idToDelete); + } + } +} \ 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 new file mode 100644 index 00000000..48eeb0bb --- /dev/null +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OmsTicketBillServiceImpl.java @@ -0,0 +1,264 @@ +package com.ruoyi.sip.service.impl; + +import java.util.Collections; +import java.util.List; + +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.file.FileUploadUtils; +import com.ruoyi.sip.domain.OmsFinAttachment; +import com.ruoyi.sip.domain.OmsPaymentBill; +import com.ruoyi.sip.domain.dto.PaymentBillPayableDetailDTO; +import com.ruoyi.sip.service.IOmsFinAttachmentService; +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; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.multipart.MultipartFile; + +/** + * 采购收票单Service业务层处理 + * + * @author ruoyi + * @date 2025-12-09 + */ +@Service +@Transactional +public class OmsTicketBillServiceImpl implements IOmsTicketBillService +{ + @Autowired + private OmsTicketBillMapper omsTicketBillMapper; + @Autowired + private IOmsPayableTicketDetailService payableTicketDetailService; + @Autowired + private IOmsFinAttachmentService omsFinAttachmentService; + + /** + * 查询采购收票单 + * + * @param id 采购收票单主键 + * @return 采购收票单 + */ + @Override + public OmsTicketBill selectOmsTicketBillById(Long id) + { + OmsTicketBill omsTicketBill = omsTicketBillMapper.selectOmsTicketBillById(id); + List paymentBillPayableDetailDTOS = payableTicketDetailService.listByTickerCode(Collections.singletonList(omsTicketBill.getTicketBillCode())); + omsTicketBill.setDetailList(paymentBillPayableDetailDTOS); + return omsTicketBill; + } + + /** + * 查询采购收票单列表 + * + * @param omsTicketBill 采购收票单 + * @return 采购收票单 + */ + @Override + public List selectOmsTicketBillList(OmsTicketBill omsTicketBill) + { + return omsTicketBillMapper.selectOmsTicketBillList(omsTicketBill); + } + + /** + * 新增采购收票单 + * + * @param omsTicketBill 采购收票单 + * @return 结果 + */ + @Override + public int insertOmsTicketBill(OmsTicketBill omsTicketBill) + { + omsTicketBill.setTicketBillCode(generateTicketBillCode()); + omsTicketBill.setCreateTime(DateUtils.getNowDate()); + return omsTicketBillMapper.insertOmsTicketBill(omsTicketBill); + } + + /** + * 生成收票单编号 CS+YYMMdd+当日序列号 + * @return 收票单编号 + */ + private String generateTicketBillCode() { + String prefix = "SP"; + // 查询当天已有的最大序列号 + String codePrefix = prefix + DateUtil.format(DateUtil.date(), DatePattern.PURE_DATE_PATTERN); + int maxSequence = omsTicketBillMapper.selectMaxCodeByPrefix(codePrefix); + // 生成新的序列号 + int newSequence = maxSequence + 1; + // 序列号补零到4位 + String sequenceStr = String.format("%04d", newSequence); + return codePrefix + sequenceStr; + } + + /** + * 修改采购收票单 + * + * @param omsTicketBill 采购收票单 + * @return 结果 + */ + @Override + public int updateOmsTicketBill(OmsTicketBill omsTicketBill) + { + omsTicketBill.setUpdateTime(DateUtils.getNowDate()); + return omsTicketBillMapper.updateOmsTicketBill(omsTicketBill); + } + + /** + * 批量删除采购收票单 + * + * @param ids 需要删除的主键集合 + * @return 结果 + */ + @Override + public int deleteOmsTicketBillByIds(Long[] ids) + { + return omsTicketBillMapper.deleteOmsTicketBillByIds(ids); + } + + /** + * 删除采购收票单信息 + * + * @param id 采购收票单主键 + * @return 结果 + */ + @Override + public int deleteOmsTicketBillById(Long id) + { + return omsTicketBillMapper.deleteOmsTicketBillById(id); + } + + @Override + public AjaxResult uploadReceipt(OmsTicketBill bill, MultipartFile file) throws Exception { + OmsFinAttachment attachment = new OmsFinAttachment(); + attachment.setRelatedBillType(OmsFinAttachment.RelatedBillTypeEnum.INVOICE.getCode()); + attachment.setRemark(bill.getRemark()); + attachment.setRelatedBillId(bill.getId()); + OmsTicketBill omsTicketBill = selectOmsTicketBillById(bill.getId()); + if (omsTicketBill == null) { + return AjaxResult.error("收票单不存在"); + } + if (omsTicketBill.getTotalPriceWithTax().compareTo(bill.getTicketPriceWithTax()) != 0){ + return AjaxResult.error("票据金额不一致"); + } + + if (file.isEmpty()) + { + return AjaxResult.error("上传文件不能为空"); + } + // 上传文件路径 + String filePath = RuoYiConfig.getUploadPath(); + // 上传并返回新文件名称 + String fileName = FileUploadUtils.upload(filePath, file); + + SysUser loginUser = ShiroUtils.getSysUser(); + + + attachment.setFileName(file.getOriginalFilename()); + attachment.setFilePath(fileName); + attachment.setFileSize(file.getSize()); + attachment.setFileType(file.getContentType()); + attachment.setCreateBy(loginUser.getUserId().toString()); + omsFinAttachmentService.insertOmsFinAttachment(attachment); + omsTicketBill.setActualTicketTime(DateUtils.getNowDate()); + omsTicketBill.setTicketStatus(OmsTicketBill.TicketStatusEnum.TICKET.getCode()); + omsTicketBill.setTicketPriceWithTax(bill.getTicketPriceWithTax()); + omsTicketBill.setTicketPriceWithoutTax(bill.getTicketPriceWithoutTax()); + omsTicketBill.setTicketType(bill.getTicketType()); + updateOmsTicketBill(omsTicketBill); + + return AjaxResult.success(attachment); + } + + @Override + public AjaxResult applyRefund(Long originalId) { + // 1. 验证原始付款单 + OmsTicketBill originalBill = selectOmsTicketBillById(originalId); + if (originalBill == null) { + return AjaxResult.error("原始付款单不存在"); + } + if (!OmsTicketBill.TicketStatusEnum.TICKET.getCode().equals(originalBill.getTicketStatus())) { + return AjaxResult.error("只有已收票的订单才能申请红冲"); + } + if (OmsTicketBill.RefundStatusEnum.REFUNDED.getCode().equals(originalBill.getRefundStatus())) { + return AjaxResult.error("该付款单已申请过红冲,请勿重复操作"); + } + + // 2. 创建新的退款单 + OmsTicketBill refundBill = new OmsTicketBill(); + + // 复制属性并取反金额 + refundBill.setTotalPriceWithTax(originalBill.getTotalPriceWithTax().negate()); + refundBill.setTotalPriceWithoutTax(originalBill.getTotalPriceWithoutTax().negate()); + refundBill.setTaxAmount(originalBill.getTaxAmount().negate()); + refundBill.setTicketTime(originalBill.getTicketTime()); + refundBill.setVendorTicketTime(originalBill.getVendorTicketTime()); + refundBill.setVendorCode(originalBill.getVendorCode()); + + refundBill.setTicketBillCode(generateTicketBillCode()); + refundBill.setTicketType(originalBill.getTicketType()); + // 设置新属性 + refundBill.setTicketBillType(OmsTicketBill.TicketBillTypeEnum.RED_RUSH.getCode()); + refundBill.setRefundStatus(OmsTicketBill.RefundStatusEnum.REFUNDED.getCode()); + refundBill.setApproveStatus(ApproveStatusEnum.WAIT_APPROVE.getCode()); + refundBill.setOriginalBillId(originalBill.getId()); + refundBill.setActualTicketTime(null); + refundBill.setApproveTime(null); + refundBill.setRemark("退款-关联原付款单:" + originalBill.getTicketBillCode()); + + insertOmsTicketBill(refundBill); + + // 3. 更新原始付款单状态 + originalBill.setRefundStatus(OmsTicketBill.RefundStatusEnum.REFUNDED.getCode()); + + updateOmsTicketBill(originalBill); + //4 创建付款明细 + payableTicketDetailService.applyRefund(originalBill.getTicketBillCode(),refundBill.getTicketBillCode()); + //5.todo 开始退款审批流程 + + + + + + return AjaxResult.success("退款申请已提交,新的退款单号为:" + refundBill.getTicketBillCode()); + } + + @Override + public AjaxResult returnTicket(Long id) { + try { + // 1. 验证付款单是否存在 + OmsTicketBill ticketBill = selectOmsTicketBillById(id); + if (ticketBill == null) { + return AjaxResult.error("付款单不存在"); + } + + // 2. 检查付款单类型,只有FROM_PAYABLE类型的付款单才能退回 + if (!OmsTicketBill.TicketBillTypeEnum.FROM_PAYABLE.getCode().equals(ticketBill.getTicketBillType())) { + return AjaxResult.error("只有由应付单合并生成的收票单才能执行退回操作"); + } + + // 3. 清楚关联 + payableTicketDetailService.clearRelationPayable(ticketBill.getTicketBillCode()); + + + // 6. 删除付款单记录 + int result = deleteOmsTicketBillById(id); + if (result <= 0) { + throw new RuntimeException("删除付款单失败"); + } + + return AjaxResult.success("付款单退回成功!"); + + } catch (Exception e) { + throw new RuntimeException("退回付款单操作失败:" + e.getMessage(), e); + } + } +} \ No newline at end of file diff --git a/ruoyi-sip/src/main/resources/mapper/sip/OmsPayableTicketDetailMapper.xml b/ruoyi-sip/src/main/resources/mapper/sip/OmsPayableTicketDetailMapper.xml new file mode 100644 index 00000000..75910901 --- /dev/null +++ b/ruoyi-sip/src/main/resources/mapper/sip/OmsPayableTicketDetailMapper.xml @@ -0,0 +1,241 @@ + + + + + + + + + + + + + + + + + + + + + + + select id, ticket_plan_id, payable_bill_id, payment_time, payment_amount, payment_rate, ticket_bill_code, + create_by, create_time, update_by, update_time, remark + from oms_payable_ticket_detail + + + + + + + + + + insert into oms_payable_ticket_detail + + + ticket_plan_id, + + + payable_bill_id, + + + payment_time, + + + payment_amount, + + + payment_rate, + + + ticket_bill_code, + + + create_by, + + + create_time, + + + update_by, + + + update_time, + + + remark, + + + + + #{ticketPlanId}, + + + #{payableBillId}, + + + #{paymentTime}, + + + #{paymentAmount}, + + + #{paymentRate}, + + + #{ticketBillCode}, + + + #{createBy}, + + + #{createTime}, + + + #{updateBy}, + + + #{updateTime}, + + + #{remark}, + + + + + insert into oms_payable_ticket_detail (payable_bill_id, ticket_plan_id, payment_time, payment_amount, payment_rate, + ticket_bill_code, create_by, create_time, update_by, update_time, remark) values + + (#{item.payableBillId}, #{item.ticketPlanId}, #{item.paymentTime}, #{item.paymentAmount}, #{item.paymentRate}, #{item.ticketBillCode}, + #{item.createBy}, #{item.createTime}, #{item.updateBy}, #{item.updateTime}, #{item.remark}) + + + + + update oms_payable_ticket_detail + + + ticket_plan_id = #{ticketPlanId}, + + + payable_bill_id = #{payableBillId}, + + + payment_time = #{paymentTime}, + + + payment_amount = #{paymentAmount}, + + + payment_rate = #{paymentRate}, + + + ticket_bill_code = #{ticketBillCode}, + + + create_by = #{createBy}, + + + create_time = #{createTime}, + + + update_by = #{updateBy}, + + + update_time = #{updateTime}, + + + remark = #{remark}, + + + + where id = #{id} + + + + delete from oms_payable_ticket_detail where id = #{id} + + + + delete from oms_payable_ticket_detail where id in + + #{id} + + + + delete from oms_payable_ticket_detail where ticket_bill_code = #{code} + + + \ No newline at end of file diff --git a/ruoyi-sip/src/main/resources/mapper/sip/OmsPayableTicketPlanMapper.xml b/ruoyi-sip/src/main/resources/mapper/sip/OmsPayableTicketPlanMapper.xml new file mode 100644 index 00000000..58b57802 --- /dev/null +++ b/ruoyi-sip/src/main/resources/mapper/sip/OmsPayableTicketPlanMapper.xml @@ -0,0 +1,157 @@ + + + + + + + + + + + + + + + + + + select id, payable_bill_id, plan_ticket_date, plan_amount, plan_rate, create_by, create_time, update_by, update_time + from oms_payable_ticket_plan + + + + + + + + insert into oms_payable_ticket_plan + + + payable_bill_id, + + + plan_ticket_date, + + + plan_amount, + + + plan_rate, + + + create_by, + + + create_time, + + + update_by, + + + update_time, + + + + + #{payableBillId}, + + + #{planTicketDate}, + + + #{planAmount}, + + + #{planRate}, + + + #{createBy}, + + + #{createTime}, + + + #{updateBy}, + + + #{updateTime}, + + + + + + update oms_payable_ticket_plan + + + payable_bill_id = #{payableBillId}, + + + plan_ticket_date = #{planTicketDate}, + + + plan_amount = #{planAmount}, + + + plan_rate = #{planRate}, + + + create_by = #{createBy}, + + + create_time = #{createTime}, + + + update_by = #{updateBy}, + + + update_time = #{updateTime}, + + + where id = #{id} + + + + delete from oms_payable_ticket_plan where id = #{id} + + + + delete from oms_payable_ticket_plan where id in + + #{id} + + + + \ No newline at end of file diff --git a/ruoyi-sip/src/main/resources/mapper/sip/OmsTicketBillMapper.xml b/ruoyi-sip/src/main/resources/mapper/sip/OmsTicketBillMapper.xml new file mode 100644 index 00000000..0baccf24 --- /dev/null +++ b/ruoyi-sip/src/main/resources/mapper/sip/OmsTicketBillMapper.xml @@ -0,0 +1,337 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select t1.id, t1.ticket_bill_code, t1.ticket_type, t1.ticket_bill_type, t1.vendor_ticket_time, t1.ticket_time, t1.vendor_code, + t1.total_price_with_tax, t1.total_price_without_tax, t1.ticket_price_with_tax, t1.ticket_price_without_tax, t1.tax_rate, t1.create_by, t1.create_time, t1.update_by, + t1.update_time, t1.remark, t1.del_flag, t1.actual_ticket_time, t1.ticket_status, t1.approve_status, t1.approve_node, t1.approve_time, t1.refund_status + ,t2.vendor_name + from oms_ticket_bill t1 + left join oms_vendor_info t2 on t1.vendor_code=t2.vendor_code + + + + + + + + insert into oms_ticket_bill + + + ticket_bill_code, + + + ticket_type, + + + ticket_bill_type, + + + vendor_ticket_time, + + + ticket_time, + + + vendor_code, + + + total_price_with_tax, + + + total_price_without_tax, + + + tax_rate, + + + create_by, + + + create_time, + + + update_by, + + + update_time, + + + remark, + + + del_flag, + + + actual_ticket_time, + + + ticket_status, + + + approve_status, + + + approve_node, + + + approve_time, + + + refund_status, + + + + + #{ticketBillCode}, + + + #{ticketType}, + + + #{ticketBillType}, + + + #{vendorTicketTime}, + + + #{ticketTime}, + + + #{vendorCode}, + + + #{totalPriceWithTax}, + + + #{totalPriceWithoutTax}, + + + #{taxRate}, + + + #{createBy}, + + + #{createTime}, + + + #{updateBy}, + + + #{updateTime}, + + + #{remark}, + + + #{delFlag}, + + + #{actualTicketTime}, + + + #{ticketStatus}, + + + #{approveStatus}, + + + #{approveNode}, + + + #{approveTime}, + + + #{refundStatus}, + + + + + + update oms_ticket_bill + + + ticket_bill_code = #{ticketBillCode}, + + + ticket_type = #{ticketType}, + + + ticket_bill_type = #{ticketBillType}, + + + vendor_ticket_time = #{vendorTicketTime}, + + + ticket_time = #{ticketTime}, + + + vendor_code = #{vendorCode}, + + + total_price_with_tax = #{totalPriceWithTax}, + + + ticket_price_with_tax = #{ticketPriceWithTax}, + + + total_price_without_tax = #{totalPriceWithoutTax}, + + + ticket_price_without_tax = #{ticketPriceWithoutTax}, + + + tax_rate = #{taxRate}, + + + create_by = #{createBy}, + + + create_time = #{createTime}, + + + update_by = #{updateBy}, + + + update_time = #{updateTime}, + + + remark = #{remark}, + + + del_flag = #{delFlag}, + + + actual_ticket_time = #{actualTicketTime}, + + + ticket_status = #{ticketStatus}, + + + approve_status = #{approveStatus}, + + + approve_node = #{approveNode}, + + + approve_time = #{approveTime}, + + + refund_status = #{refundStatus}, + + + where id = #{id} + + + + delete from oms_ticket_bill where id = #{id} + + + + delete from oms_ticket_bill where id in + + #{id} + + + + + + + \ No newline at end of file