From 8dbd3536d51198e25b915a11dccb50a0a186e6a0 Mon Sep 17 00:00:00 2001 From: aike <17730485278@139.com> Date: Thu, 6 Nov 2025 17:35:25 +0800 Subject: [PATCH] =?UTF-8?q?demand:=20=20=20=20TMS=E7=B3=BB=E7=BB=9F=20-=20?= =?UTF-8?q?=E5=AE=A2=E6=88=B7=E8=B4=A6=E5=8D=95=E7=AE=A1=E7=90=86=20-=20?= =?UTF-8?q?=E8=B4=A2=E5=8A=A1=E5=BC=80=E7=A5=A8=E5=A4=84=E7=90=86=20-=20?= =?UTF-8?q?=E5=BC=80=E7=A5=A8=E7=94=B3=E8=AF=B7=E8=AE=B0=E5=BD=95/?= =?UTF-8?q?=E5=B7=B2=E5=BC=80=E7=A5=A8=E7=95=8C=E9=9D=A2-=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=E6=94=AF=E6=8C=81=E6=8C=89=E7=85=A7=E2=80=9D=E5=BC=80?= =?UTF-8?q?=E7=A5=A8=E4=B8=BB=E4=BD=93=E2=80=9C=20=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=EF=BC=9B=20TMS=E7=B3=BB=E7=BB=9F=20-=20=E5=AE=A2=E6=88=B7?= =?UTF-8?q?=E8=B4=A6=E5=8D=95=E7=AE=A1=E7=90=86=20-=20=E8=B4=A2=E5=8A=A1?= =?UTF-8?q?=E5=BC=80=E7=A5=A8=E5=A4=84=E7=90=86=20-=20=E5=BC=80=E7=A5=A8?= =?UTF-8?q?=E7=94=B3=E8=AF=B7=E8=AE=B0=E5=BD=95-=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E2=80=9D=20=E6=89=B9=E9=87=8F=E5=8F=91=E7=A5=A8?= =?UTF-8?q?=E5=BB=B6=E6=9C=9F=E2=80=9C=E6=8E=A5=E5=8F=A3=EF=BC=9B=20TMS?= =?UTF-8?q?=E7=B3=BB=E7=BB=9F=20-=20=E5=AE=A2=E6=88=B7=E8=B4=A6=E5=8D=95?= =?UTF-8?q?=E7=AE=A1=E7=90=86=20-=20=E8=B4=A2=E5=8A=A1=E5=BC=80=E7=A5=A8?= =?UTF-8?q?=E5=A4=84=E7=90=86=20-=20=E5=BC=80=E7=A5=A8=E7=94=B3=E8=AF=B7?= =?UTF-8?q?=E8=AE=B0=E5=BD=95-=E6=96=B0=E5=A2=9E=E5=8A=A0=E2=80=9D?= =?UTF-8?q?=E6=89=B9=E9=87=8F=E5=8F=96=E6=B6=88=E5=8F=91=E7=A5=A8=E5=BB=B6?= =?UTF-8?q?=E6=9C=9F=E2=80=9C=E6=8E=A5=E5=8F=A3=EF=BC=9BTMS=E7=B3=BB?= =?UTF-8?q?=E7=BB=9F=20-=20=E5=AE=A2=E6=88=B7=E8=B4=A6=E5=8D=95=E7=AE=A1?= =?UTF-8?q?=E7=90=86=20-=20=E8=B4=A2=E5=8A=A1=E5=BC=80=E7=A5=A8=E5=A4=84?= =?UTF-8?q?=E7=90=86=20-=20=E5=BC=80=E7=A5=A8=E7=94=B3=E8=AF=B7=E8=AE=B0?= =?UTF-8?q?=E5=BD=95=20-=20=E6=96=B0=E5=A2=9E=E5=8A=A0=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E6=9D=A1=E4=BB=B6=EF=BC=9A=E5=8F=91=E7=A5=A8=E5=BB=B6=E6=9C=9F?= =?UTF-8?q?=EF=BC=9B=E6=98=AF/=E5=90=A6=20=E4=B8=A4=E4=B8=AA=E7=8A=B6?= =?UTF-8?q?=E6=80=81=EF=BC=8C=E9=BB=98=E8=AE=A4=E4=B8=BA=E7=A9=BA=EF=BC=9B?= =?UTF-8?q?=20TMS=E7=B3=BB=E7=BB=9F=20-=20=E5=AE=A2=E6=88=B7=E8=B4=A6?= =?UTF-8?q?=E5=8D=95=E7=AE=A1=E7=90=86=20-=20=E8=B4=A2=E5=8A=A1=E5=BC=80?= =?UTF-8?q?=E7=A5=A8=E5=A4=84=E7=90=86=20-=20=E5=BC=80=E7=A5=A8=E7=94=B3?= =?UTF-8?q?=E8=AF=B7=E8=AE=B0=E5=BD=95=20-=20=E6=95=B0=E6=8D=AE=E6=98=BE?= =?UTF-8?q?=E7=A4=BA=E6=A0=8F=E6=96=B0=E5=A2=9E=E5=8A=A0=E5=AD=97=E6=AE=B5?= =?UTF-8?q?=E2=80=9D=E5=8F=91=E7=A5=A8=E5=BB=B6=E6=9C=9F=E3=80=81=E3=80=81?= =?UTF-8?q?=E5=8F=91=E7=A5=A8=E5=BB=B6=E6=9C=9F=E6=93=8D=E4=BD=9C=E4=BA=BA?= =?UTF-8?q?=E3=80=81=E5=8F=91=E7=A5=A8=E5=BB=B6=E6=9C=9F=E6=93=8D=E4=BD=9C?= =?UTF-8?q?=E6=97=B6=E9=97=B4=E3=80=81=E5=BC=80=E7=A5=A8=E4=B8=BB=E4=BD=93?= =?UTF-8?q?=E2=80=9C=20=E4=BD=8D=E7=BD=AE=E6=94=BE=E5=9C=A8=E2=80=9D?= =?UTF-8?q?=E6=94=B6=E6=AC=BE=E7=8A=B6=E6=80=81=E2=80=9C=E6=8C=89=E9=A1=BA?= =?UTF-8?q?=E5=BA=8F=E5=85=88=E5=90=8E=E6=8E=92=E5=88=97=EF=BC=9B=20commit?= =?UTF-8?q?ter:=20heyu?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../EmisSettleInvoiceRecordController.java | 40 ++++++++++++ .../emis/domain/EmisSettleInvoiceRecord.java | 10 ++- .../mapper/EmisSettleInvoiceRecordMapper.java | 17 +++++ .../IEmisSettleInvoiceRecordService.java | 18 ++++++ .../EmisSettleInvoiceRecordServiceImpl.java | 63 +++++++++++++++++++ .../mapper/EmisSettleInvoiceRecordMapper.xml | 59 ++++++++++++++--- 6 files changed, 199 insertions(+), 8 deletions(-) diff --git a/emis-biz-web/src/main/java/com/xdadan/erp/web/emis/EmisSettleInvoiceRecordController.java b/emis-biz-web/src/main/java/com/xdadan/erp/web/emis/EmisSettleInvoiceRecordController.java index 3e53a250d..318ab3cbc 100644 --- a/emis-biz-web/src/main/java/com/xdadan/erp/web/emis/EmisSettleInvoiceRecordController.java +++ b/emis-biz-web/src/main/java/com/xdadan/erp/web/emis/EmisSettleInvoiceRecordController.java @@ -290,4 +290,44 @@ public class EmisSettleInvoiceRecordController extends BaseController { } return AjaxResult.success("操作成功"); } + + /** + * 批量发票延期 + */ + @PreAuthorize("@ss.hasPermi('emis:emisSettleInvoiceRecord:delay')") + @Log(title = "批量发票延期", businessType = BusinessType.UPDATE) + @PostMapping("/batchDelayInvoice/{ids}") + public AjaxResult batchDelayInvoice(@PathVariable Long[] ids) { + try { + return toAjax(emisSettleInvoiceRecordService.batchDelayInvoice(ids)); + } catch (Exception ex) { + ex.printStackTrace(); + // 返回子定义异常 + if (ex instanceof EmisBizError) { + return AjaxResult.error(ex.getMessage(), ((EmisBizError) ex).getErrorCode()); + } + + return AjaxResult.error("延期操作异常,联系客服"); + } + } + + /** + * 批量取消发票延期 + */ + @PreAuthorize("@ss.hasPermi('emis:emisSettleInvoiceRecord:cancelDelay')") + @Log(title = "批量取消发票延期", businessType = BusinessType.UPDATE) + @PostMapping("/batchCancelDelayInvoice/{ids}") + public AjaxResult batchCancelDelayInvoice(@PathVariable Long[] ids) { + try { + return toAjax(emisSettleInvoiceRecordService.batchCancelDelayInvoice(ids)); + } catch (Exception ex) { + ex.printStackTrace(); + // 返回子定义异常 + if (ex instanceof EmisBizError) { + return AjaxResult.error(ex.getMessage(), ((EmisBizError) ex).getErrorCode()); + } + + return AjaxResult.error("取消延期操作异常,联系客服"); + } + } } diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/domain/EmisSettleInvoiceRecord.java b/emis-biz/src/main/java/com/xdadan/erp/emis/domain/EmisSettleInvoiceRecord.java index 63e5c6878..4d1ded287 100644 --- a/emis-biz/src/main/java/com/xdadan/erp/emis/domain/EmisSettleInvoiceRecord.java +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/domain/EmisSettleInvoiceRecord.java @@ -134,6 +134,13 @@ public class EmisSettleInvoiceRecord extends BaseEntity private String openChStatusDesc; /* 使用的开票企业代码 */ private String openComCode; + /* 是否延期 0-不延期 1-延期 */ + private String blDelay; + /* 发票延期操作人 */ + private String delayOpManCode; + /* 发票延期操作时间 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date delayOpDate; // 扩展信息 /* 申请 */ @@ -146,7 +153,8 @@ public class EmisSettleInvoiceRecord extends BaseEntity private String opManName; private String opSiteName; - + /* 开票主体 */ + private String salerCompanyName; List invoiceRelList; diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/mapper/EmisSettleInvoiceRecordMapper.java b/emis-biz/src/main/java/com/xdadan/erp/emis/mapper/EmisSettleInvoiceRecordMapper.java index 74d47e9c8..79e0b81ab 100644 --- a/emis-biz/src/main/java/com/xdadan/erp/emis/mapper/EmisSettleInvoiceRecordMapper.java +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/mapper/EmisSettleInvoiceRecordMapper.java @@ -120,4 +120,21 @@ public interface EmisSettleInvoiceRecordMapper extends BaseMapper selectSimpleInvoiceRecordList( EmisSettleInvoiceRecord emisSettleInvoiceRecord); + /** + * 批量发票延期 + * + * @param ids 发票记录ID数组 + * @param delayOpManCode 延期操作人 + * @return 结果 + */ + public int batchDelayInvoice(@Param("ids") Long[] ids, @Param("delayOpManCode") String delayOpManCode); + + /** + * 批量取消发票延期 + * + * @param ids 发票记录ID数组 + * @return 结果 + */ + public int batchCancelDelayInvoice(@Param("ids") Long[] ids); + } diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/service/IEmisSettleInvoiceRecordService.java b/emis-biz/src/main/java/com/xdadan/erp/emis/service/IEmisSettleInvoiceRecordService.java index dca5e7162..d0f3ab5df 100644 --- a/emis-biz/src/main/java/com/xdadan/erp/emis/service/IEmisSettleInvoiceRecordService.java +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/service/IEmisSettleInvoiceRecordService.java @@ -106,4 +106,22 @@ public interface IEmisSettleInvoiceRecordService { public List selectCustomExportList( EmisSettleInvoiceRecord emisSettleInvoiceRecord); + /** + * 批量发票延期 + * + * @param ids 发票记录ID数组 + * @return 结果 + * @throws EmisBizError + */ + public int batchDelayInvoice(Long[] ids) throws EmisBizError; + + /** + * 批量取消发票延期 + * + * @param ids 发票记录ID数组 + * @return 结果 + * @throws EmisBizError + */ + public int batchCancelDelayInvoice(Long[] ids) throws EmisBizError; + } diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisSettleInvoiceRecordServiceImpl.java b/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisSettleInvoiceRecordServiceImpl.java index 899a8b4bf..f59fc85d3 100644 --- a/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisSettleInvoiceRecordServiceImpl.java +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisSettleInvoiceRecordServiceImpl.java @@ -782,4 +782,67 @@ public class EmisSettleInvoiceRecordServiceImpl extends EmisBaseService implemen BigDecimal totalMoney; } + /** + * 批量发票延期 + * + * @param ids 发票记录ID数组 + * @return 结果 + * @throws EmisBizError + */ + @Override + @Transactional + public int batchDelayInvoice(Long[] ids) throws EmisBizError { + if (ids == null || ids.length == 0) { + throw new EmisBizError(EmisBizErrorType.FAIL, "请选择要延期的发票记录"); + } + + // 验证所有记录是否都是未开票状态 + for (Long id : ids) { + EmisSettleInvoiceRecord record = emisSettleInvoiceRecordMapper.selectEmisSettleInvoiceRecordById(id); + if (record == null) { + throw new EmisBizError(EmisBizErrorType.FAIL, "发票记录不存在,ID: " + id); + } + if (!"0".equals(record.getInvoiceStatus())) { + throw new EmisBizError(EmisBizErrorType.FAIL, + "只能对未开票状态的发票进行延期操作,申请序号: " + record.getApplySeqNo()); + } + } + + // 获取当前操作人 + String delayOpManCode = getCurrentUser().getEmpCode(); + + // 执行批量延期 + return emisSettleInvoiceRecordMapper.batchDelayInvoice(ids, delayOpManCode); + } + + /** + * 批量取消发票延期 + * + * @param ids 发票记录ID数组 + * @return 结果 + * @throws EmisBizError + */ + @Override + @Transactional + public int batchCancelDelayInvoice(Long[] ids) throws EmisBizError { + if (ids == null || ids.length == 0) { + throw new EmisBizError(EmisBizErrorType.FAIL, "请选择要取消延期的发票记录"); + } + + // 验证所有记录是否都是已延期状态 + for (Long id : ids) { + EmisSettleInvoiceRecord record = emisSettleInvoiceRecordMapper.selectEmisSettleInvoiceRecordById(id); + if (record == null) { + throw new EmisBizError(EmisBizErrorType.FAIL, "发票记录不存在,ID: " + id); + } + if (!"1".equals(record.getBlDelay())) { + throw new EmisBizError(EmisBizErrorType.FAIL, + "只能对已延期的发票进行取消延期操作,申请序号: " + record.getApplySeqNo()); + } + } + + // 执行批量取消延期 + return emisSettleInvoiceRecordMapper.batchCancelDelayInvoice(ids); + } + } diff --git a/emis-biz/src/main/resources/mapper/EmisSettleInvoiceRecordMapper.xml b/emis-biz/src/main/resources/mapper/EmisSettleInvoiceRecordMapper.xml index 633392810..f727292ed 100644 --- a/emis-biz/src/main/resources/mapper/EmisSettleInvoiceRecordMapper.xml +++ b/emis-biz/src/main/resources/mapper/EmisSettleInvoiceRecordMapper.xml @@ -52,6 +52,10 @@ + + + + @@ -88,12 +92,12 @@ - select id, apply_seq_no, apply_date, apply_man_code, apply_site_code, customer_code, customer_name, settle_bill_no, settle_bill_name, apply_money, invoice_type, openbill_scope, company_name, company_tax_no, company_tel, company_address, invioce_remark, bank_name, bank_acc_no, contact, phone, real_tax_type, orig_open_money, add_tax_rate, add_open_money, open_money_max, open_money, invoice_no, reced_money, payment_status, invoice_status, invoice_status_desc, recieve_address, email, file_path, remark, bl_audit, audit_date, audit_man_code, audit_site_code, audit_note, op_man_code, op_date, op_site_code, open_ch_id, open_ch_status, open_ch_status_desc, open_com_code, del_flag, create_by, create_time, update_by, update_time, create_site, update_site from emis_settle_invoice_record + select id, apply_seq_no, apply_date, apply_man_code, apply_site_code, customer_code, customer_name, settle_bill_no, settle_bill_name, apply_money, invoice_type, openbill_scope, company_name, company_tax_no, company_tel, company_address, invioce_remark, bank_name, bank_acc_no, contact, phone, real_tax_type, orig_open_money, add_tax_rate, add_open_money, open_money_max, open_money, invoice_no, reced_money, payment_status, invoice_status, invoice_status_desc, recieve_address, email, file_path, remark, bl_audit, audit_date, audit_man_code, audit_site_code, audit_note, op_man_code, op_date, op_site_code, open_ch_id, open_ch_status, open_ch_status_desc, open_com_code, bl_delay, delay_op_man_code, delay_op_date, del_flag, create_by, create_time, update_by, update_time, create_site, update_site from emis_settle_invoice_record @@ -512,6 +521,9 @@ open_ch_status, open_ch_status_desc, open_com_code, + bl_delay, + delay_op_man_code, + delay_op_date, del_flag, create_by, create_time, @@ -568,6 +580,9 @@ #{openChStatus}, #{openChStatusDesc}, #{openComCode}, + #{blDelay}, + #{delayOpManCode}, + #{delayOpDate}, #{delFlag}, #{createBy}, #{createTime}, @@ -637,6 +652,9 @@ open_ch_status = #{openChStatus}, open_ch_status_desc = #{openChStatusDesc}, open_com_code = #{openComCode}, + bl_delay = #{blDelay}, + delay_op_man_code = #{delayOpManCode}, + delay_op_date = #{delayOpDate}, del_flag = #{delFlag}, create_by = #{createBy}, create_time = #{createTime}, @@ -686,4 +704,31 @@ #{id} + + + + update emis_settle_invoice_record + set bl_delay = '1', + delay_op_man_code = #{delayOpManCode}, + delay_op_date = now() + where id in + + #{id} + + and invoice_status = '0' + and (bl_delay is null or bl_delay = '0') + + + + + update emis_settle_invoice_record + set bl_delay = '0', + delay_op_man_code = null, + delay_op_date = null + where id in + + #{id} + + and bl_delay = '1' +