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' +