From fee685fd37a4243e93f6a889ad34f39917623e5a Mon Sep 17 00:00:00 2001 From: aike <17730485278@139.com> Date: Sat, 7 Feb 2026 17:26:48 +0800 Subject: [PATCH] =?UTF-8?q?demand:=20=20=20TMS-=E8=B4=A2=E5=8A=A1=E4=B8=AD?= =?UTF-8?q?=E5=BF=83=E9=94=80=E8=B4=A6=E5=AE=A1=E6=A0=B8=EF=BC=9A=E5=88=97?= =?UTF-8?q?=E8=A1=A8=E6=95=B0=E6=8D=AE=E5=B1=95=E7=A4=BA=E5=A2=9E=E6=B7=BB?= =?UTF-8?q?=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../web/emis/EmisWriteoffApplyController.java | 127 +++++++++++++++++- .../erp/emis/domain/EmisWriteoffApply.java | 3 + .../emis/domain/EmisWriteoffApplyDetail.java | 2 + .../mapper/EmisWriteoffApplyMapper.xml | 77 ++++++++++- 4 files changed, 204 insertions(+), 5 deletions(-) diff --git a/emis-biz-web/src/main/java/com/xdadan/erp/web/emis/EmisWriteoffApplyController.java b/emis-biz-web/src/main/java/com/xdadan/erp/web/emis/EmisWriteoffApplyController.java index 9919088de..7651146a8 100644 --- a/emis-biz-web/src/main/java/com/xdadan/erp/web/emis/EmisWriteoffApplyController.java +++ b/emis-biz-web/src/main/java/com/xdadan/erp/web/emis/EmisWriteoffApplyController.java @@ -19,6 +19,7 @@ import com.xdadan.erp.emis.domain.EmisWriteoffApplyDetail; import com.xdadan.erp.emis.domain.EmisSalesmenRel; import com.xdadan.erp.emis.domain.exception.EmisBizError; import com.xdadan.erp.emis.service.IEmisWriteoffApplyService; +import com.xdadan.erp.emis.service.IEmisSettleInvoiceRecordService; import com.xdadan.erp.emis.service.IEmisSalesmenRelService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -47,6 +48,9 @@ public class EmisWriteoffApplyController extends EmisBaseController { @Autowired private IEmisSalesmenRelService emisSalesmenRelService; + @Autowired + private IEmisSettleInvoiceRecordService emisSettleInvoiceRecordService; + /** * 查询销账申请列表 */ @@ -59,6 +63,12 @@ public class EmisWriteoffApplyController extends EmisBaseController { setPrivParams(emisWriteoffApply); + // 支持按发票号查询:将多行发票号格式化为逗号分隔 + if (emisWriteoffApply.getInvoiceNo() != null && !emisWriteoffApply.getInvoiceNo().trim().isEmpty()) { + emisWriteoffApply.setInvoiceNo( + com.xdadan.erp.emis.utils.WaybillHelper.formatQueryValue(emisWriteoffApply.getInvoiceNo())); + } + // 处理params参数,支持运单号、账单号多选查询 if (emisWriteoffApply.getParams() != null && emisWriteoffApply.getParams().containsKey("queryParams")) { String queryParams = (String) emisWriteoffApply.getParams().get("queryParams"); @@ -86,6 +96,49 @@ public class EmisWriteoffApplyController extends EmisBaseController { // 计算并设置申请账单相关字段 if (list != null) { + // 收集所有运单号,用于一次性查询对应的发票号 + java.util.Set allBillCodes = new java.util.HashSet<>(); + + for (EmisWriteoffApply apply : list) { + if (apply != null && apply.getDetailList() != null && !apply.getDetailList().isEmpty()) { + for (EmisWriteoffApplyDetail detail : apply.getDetailList()) { + if (detail != null && detail.getBillCode() != null && !detail.getBillCode().trim().isEmpty()) { + allBillCodes.add(detail.getBillCode().trim()); + } + } + } + } + + // 查询所有相关运单号对应的发票记录,并构造 billCode -> 发票号列表 映射 + java.util.Map> billInvoiceMap = new java.util.HashMap<>(); + if (!allBillCodes.isEmpty()) { + java.util.List billCodeList = new java.util.ArrayList<>(allBillCodes); + java.util.List invoiceRecords = + emisSettleInvoiceRecordService.selectInvoiceRecordListByBillCodes(billCodeList); + if (invoiceRecords != null) { + for (com.xdadan.erp.emis.domain.EmisSettleInvoiceRecord record : invoiceRecords) { + if (record == null || record.getInvoiceNo() == null + || record.getInvoiceNo().trim().isEmpty() + || record.getBillCodes() == null + || record.getBillCodes().trim().isEmpty()) { + continue; + } + String[] codes = record.getBillCodes().split(","); + for (String code : codes) { + if (code == null) { + continue; + } + String billCode = code.trim(); + if (billCode.isEmpty()) { + continue; + } + billInvoiceMap.computeIfAbsent(billCode, k -> new java.util.ArrayList<>()) + .add(record.getInvoiceNo().trim()); + } + } + } + } + for (EmisWriteoffApply apply : list) { if (apply != null && apply.getDetailList() != null && !apply.getDetailList().isEmpty()) { // 提取账单名称列表(去重) @@ -124,6 +177,23 @@ public class EmisWriteoffApplyController extends EmisBaseController { }) .reduce(BigDecimal.ZERO, BigDecimal::add); apply.setApplyRecMoney(totalAmount); + + // 计算并设置发票号列表(去重后用逗号拼接) + java.util.Set invoiceNos = new java.util.LinkedHashSet<>(); + for (EmisWriteoffApplyDetail detail : apply.getDetailList()) { + if (detail == null || detail.getBillCode() == null) { + continue; + } + java.util.List invList = billInvoiceMap.get(detail.getBillCode().trim()); + if (invList != null) { + for (String inv : invList) { + if (inv != null && !inv.trim().isEmpty()) { + invoiceNos.add(inv.trim()); + } + } + } + } + apply.setInvoiceNo(invoiceNos.isEmpty() ? "" : String.join(",", invoiceNos)); } } } @@ -142,6 +212,12 @@ public class EmisWriteoffApplyController extends EmisBaseController { emisWriteoffApply = new EmisWriteoffApply(); } + // 支持按发票号查询:将多行发票号格式化为逗号分隔 + if (emisWriteoffApply.getInvoiceNo() != null && !emisWriteoffApply.getInvoiceNo().trim().isEmpty()) { + emisWriteoffApply.setInvoiceNo( + com.xdadan.erp.emis.utils.WaybillHelper.formatQueryValue(emisWriteoffApply.getInvoiceNo())); + } + // 处理params参数,支持运单号、账单号多选查询 if (emisWriteoffApply.getParams() != null && emisWriteoffApply.getParams().containsKey("queryParams")) { String queryParams = (String) emisWriteoffApply.getParams().get("queryParams"); @@ -508,8 +584,57 @@ public class EmisWriteoffApplyController extends EmisBaseController { // 获取当前登录用户信息 String currentEmpName = getLoginUser().getUser().getEmpName(); - // 验证权限和账单状态 + // 先为返回的明细填充发票号信息(每个运单可能存在多张发票,逗号分隔) + java.util.Set allBillCodes = list.stream() + .filter(d -> d != null && d.getBillCode() != null && !d.getBillCode().trim().isEmpty()) + .map(d -> d.getBillCode().trim()) + .collect(java.util.stream.Collectors.toSet()); + + java.util.Map billInvoiceStrMap = new java.util.HashMap<>(); + if (!allBillCodes.isEmpty()) { + java.util.List billCodeListAll = new java.util.ArrayList<>(allBillCodes); + java.util.List invoiceRecords = + emisSettleInvoiceRecordService.selectInvoiceRecordListByBillCodes(billCodeListAll); + if (invoiceRecords != null) { + java.util.Map> billInvoiceSetMap = new java.util.HashMap<>(); + for (com.xdadan.erp.emis.domain.EmisSettleInvoiceRecord record : invoiceRecords) { + if (record == null || record.getInvoiceNo() == null + || record.getInvoiceNo().trim().isEmpty() + || record.getBillCodes() == null + || record.getBillCodes().trim().isEmpty()) { + continue; + } + String invoiceNo = record.getInvoiceNo().trim(); + String[] codes = record.getBillCodes().split(","); + for (String code : codes) { + if (code == null) { + continue; + } + String billCode = code.trim(); + if (billCode.isEmpty()) { + continue; + } + billInvoiceSetMap.computeIfAbsent(billCode, k -> new java.util.LinkedHashSet<>()) + .add(invoiceNo); + } + } + // 转换为逗号分隔的字符串 + for (java.util.Map.Entry> entry : billInvoiceSetMap.entrySet()) { + billInvoiceStrMap.put(entry.getKey(), + String.join(",", entry.getValue())); + } + } + } + + // 验证权限和账单状态,并设置每条明细的发票号 for (EmisWriteoffApplyDetail detail : list) { + if (detail != null && detail.getBillCode() != null) { + String invoiceStr = billInvoiceStrMap.get(detail.getBillCode().trim()); + if (invoiceStr != null) { + detail.setInvoiceNo(invoiceStr); + } + } + // 1. 验证用户权限:检查是否是运单的销售联系人/回款联系人/销售联系人关联的助理 if (!hasPermissionToViewBill(detail, currentEmpName)) { return error("您没有权限查看运单 " + detail.getBillCode() + " 的信息"); diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/domain/EmisWriteoffApply.java b/emis-biz/src/main/java/com/xdadan/erp/emis/domain/EmisWriteoffApply.java index 24de92fff..d56d2ac21 100644 --- a/emis-biz/src/main/java/com/xdadan/erp/emis/domain/EmisWriteoffApply.java +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/domain/EmisWriteoffApply.java @@ -80,6 +80,9 @@ public class EmisWriteoffApply extends BaseEntity { /* 收款来源 1-微信支付2支付宝 3-对公 */ private String payType; + /* 发票号 */ + private String invoiceNo; + /* 交易时间 */ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date tradeDate; diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/domain/EmisWriteoffApplyDetail.java b/emis-biz/src/main/java/com/xdadan/erp/emis/domain/EmisWriteoffApplyDetail.java index d53b14da0..e1fff8d69 100644 --- a/emis-biz/src/main/java/com/xdadan/erp/emis/domain/EmisWriteoffApplyDetail.java +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/domain/EmisWriteoffApplyDetail.java @@ -72,4 +72,6 @@ public class EmisWriteoffApplyDetail extends BaseEntity { @Excel(name = "快件类型") private String expressType; + /* 发票号(只作查询) */ + private String invoiceNo; } diff --git a/emis-biz/src/main/resources/mapper/EmisWriteoffApplyMapper.xml b/emis-biz/src/main/resources/mapper/EmisWriteoffApplyMapper.xml index 10bf15792..5caa58c85 100644 --- a/emis-biz/src/main/resources/mapper/EmisWriteoffApplyMapper.xml +++ b/emis-biz/src/main/resources/mapper/EmisWriteoffApplyMapper.xml @@ -45,19 +45,65 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - select id, apply_no, apply_man_code, apply_man_name, apply_site_code, apply_site_name, apply_date, writeoff_amount, pay_type, trade_date, recipient, apply_memo, pay_id, bl_center_confirmed, center_confirm_man_code, center_confirm_man_name, center_confirm_date, center_confirm_note, center_reject_reason, bl_headquarters_confirmed, headquarters_confirm_man_code, headquarters_confirm_man_name, headquarters_confirm_date, headquarters_confirm_note, headquarters_reject_reason, revoke_date, revoke_man_code, revoke_man_name, revoke_reason, del_flag, create_by, create_time, update_by, update_time, remark from emis_writeoff_apply + select id, + apply_no, + apply_man_code, + apply_man_name, + apply_site_code, + apply_site_name, + apply_date, + writeoff_amount, + pay_type, + trade_date, + recipient, + apply_memo, + pay_id, + bl_center_confirmed, + center_confirm_man_code, + center_confirm_man_name, + center_confirm_date, + center_confirm_note, + center_reject_reason, + bl_headquarters_confirmed, + headquarters_confirm_man_code, + headquarters_confirm_man_name, + headquarters_confirm_date, + headquarters_confirm_note, + headquarters_reject_reason, + revoke_date, + revoke_man_code, + revoke_man_name, + revoke_reason, + del_flag, + create_by, + create_time, + update_by, + update_time, + remark + from emis_writeoff_apply