From 3ba0e7dfbe02f4fb72ac6690ce1f8b5fff685f36 Mon Sep 17 00:00:00 2001 From: "han\\hanst" Date: Wed, 22 Oct 2025 11:10:33 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A8=A1=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entity/EcssDeclarationHeaderData.java | 1 + .../ecss/service/impl/CoDelServiceImpl.java | 70 +++++++++---------- .../mapper/ecss/EcssCommonMapper.xml | 2 +- 3 files changed, 37 insertions(+), 36 deletions(-) diff --git a/src/main/java/com/xujie/sys/modules/ecss/entity/EcssDeclarationHeaderData.java b/src/main/java/com/xujie/sys/modules/ecss/entity/EcssDeclarationHeaderData.java index baaaa08c..5460f0ac 100644 --- a/src/main/java/com/xujie/sys/modules/ecss/entity/EcssDeclarationHeaderData.java +++ b/src/main/java/com/xujie/sys/modules/ecss/entity/EcssDeclarationHeaderData.java @@ -54,6 +54,7 @@ public class EcssDeclarationHeaderData extends EcssDeclarationHeader{ private Boolean goodsLabel;// 货物明细 RFID LABEL等 private Boolean boxChange;// 显示箱数零头 private Boolean hsCodeFlag;// 显示Hs Code + private String hsCodeDescTypeInvoice;// 发票品名中文还是英文 private String brand; private String customName; private String packageUnit; diff --git a/src/main/java/com/xujie/sys/modules/ecss/service/impl/CoDelServiceImpl.java b/src/main/java/com/xujie/sys/modules/ecss/service/impl/CoDelServiceImpl.java index e2caf314..f190876c 100644 --- a/src/main/java/com/xujie/sys/modules/ecss/service/impl/CoDelServiceImpl.java +++ b/src/main/java/com/xujie/sys/modules/ecss/service/impl/CoDelServiceImpl.java @@ -492,10 +492,10 @@ public class CoDelServiceImpl implements CoDelService { data.getCmcInvoice()+"】订单取消" + ""; String textHead = data.getCmcInvoice()+"【发票:"+ data.getCmcInvoice()+"】订单取消"; String[] mailAddress = coDelMapper.queryUsersByRoleName("关务仓库",data.getSite()).stream().map(SysUserEntity::getEmail).toArray(String[]::new); - + // 安全获取创建人邮箱,防止用户不存在或邮箱为空的空指针异常 SysUserEntity creator = coDelMapper.queryByUserName(data.getCreateBy()); - String[] mailAddress2 = (creator != null && creator.getEmail() != null) ? + String[] mailAddress2 = (creator != null && creator.getEmail() != null) ? new String[]{creator.getEmail()} : new String[]{}; String[] mailAddressAll = ArrayUtils.addAll(mailAddress, mailAddress2); if (mailAddressAll.length>0) { @@ -516,10 +516,10 @@ public class CoDelServiceImpl implements CoDelService { data.getCmcInvoice()+"】取消废弃,恢复正常" + ""; String textHead = data.getCmcInvoice()+"【发票:"+ data.getCmcInvoice()+"】取消废弃"; String[] mailAddress = coDelMapper.queryUsersByRoleName("关务仓库",data.getSite()).stream().map(SysUserEntity::getEmail).toArray(String[]::new); - + // 安全获取创建人邮箱,防止用户不存在或邮箱为空的空指针异常 SysUserEntity creator = coDelMapper.queryByUserName(data.getCreateBy()); - String[] mailAddress2 = (creator != null && creator.getEmail() != null) ? + String[] mailAddress2 = (creator != null && creator.getEmail() != null) ? new String[]{creator.getEmail()} : new String[]{}; String[] mailAddressAll = ArrayUtils.addAll(mailAddress, mailAddress2); if (mailAddressAll.length>0) { @@ -634,15 +634,15 @@ public class CoDelServiceImpl implements CoDelService { boolean qtyChanged = ecssCoDelNotifyDetail.get(0).getQty().compareTo(data.getQty()) != 0; // 判断PN是否变化 boolean pnChanged = !ecssCoDelNotifyDetail.get(0).getPn().equals(data.getPn()); - + if (qtyChanged || pnChanged) { data.setModifyFlag(true); - + // 只有数量变化时才设置 modifyQtyFlag=true if (qtyChanged) { data.setModifyQtyFlag(true); } - + // 取消订单 通知仓库和单证人员 //设置邮件内容 String text = "" + "
发货通知单" +data.getDelNo()+"【发票:"+ data.getCmcInvoice()+"】改单" + "
"+ @@ -651,10 +651,10 @@ public class CoDelServiceImpl implements CoDelService { +" 变更后数量:"+data.getQty()+""; String textHead = data.getDelNo()+"【发票:"+ data.getCmcInvoice()+"】改单[发货数量变更]"; String[] mailAddress = coDelMapper.queryUsersByRoleName("关务仓库",data.getSite()).stream().map(SysUserEntity::getEmail).toArray(String[]::new); - + // 安全获取创建人邮箱,防止用户不存在或邮箱为空的空指针异常 SysUserEntity creator = coDelMapper.queryByUserName(checkHeader.get(0).getCreateBy()); - String[] mailAddress2 = (creator != null && creator.getEmail() != null) ? + String[] mailAddress2 = (creator != null && creator.getEmail() != null) ? new String[]{creator.getEmail()} : new String[]{}; String[] mailAddressAll = ArrayUtils.addAll(mailAddress, mailAddress2); if (mailAddressAll.length>0) { @@ -678,10 +678,10 @@ public class CoDelServiceImpl implements CoDelService { " 新增发货"; String textHead = data.getDelNo()+"【发票:"+ data.getCmcInvoice()+"】改单[新增发货]"; String[] mailAddress = coDelMapper.queryUsersByRoleName("关务仓库",data.getSite()).stream().map(SysUserEntity::getEmail).toArray(String[]::new); - + // 安全获取创建人邮箱,防止用户不存在或邮箱为空的空指针异常 SysUserEntity creator = coDelMapper.queryByUserName(checkHeader.get(0).getCreateBy()); - String[] mailAddress2 = (creator != null && creator.getEmail() != null) ? + String[] mailAddress2 = (creator != null && creator.getEmail() != null) ? new String[]{creator.getEmail()} : new String[]{}; String[] mailAddressAll = ArrayUtils.addAll(mailAddress, mailAddress2); if (mailAddressAll.length>0) { @@ -719,10 +719,10 @@ public class CoDelServiceImpl implements CoDelService { " 取消发货"; String textHead = data.getDelNo()+"【发票:"+ data.getCmcInvoice()+"】改单[取消发货]"; String[] mailAddress = coDelMapper.queryUsersByRoleName("关务仓库",data.getSite()).stream().map(SysUserEntity::getEmail).toArray(String[]::new); - + // 安全获取创建人邮箱,防止用户不存在或邮箱为空的空指针异常 SysUserEntity creator = coDelMapper.queryByUserName(checkHeader.get(0).getCreateBy()); - String[] mailAddress2 = (creator != null && creator.getEmail() != null) ? + String[] mailAddress2 = (creator != null && creator.getEmail() != null) ? new String[]{creator.getEmail()} : new String[]{}; String[] mailAddressAll = ArrayUtils.addAll(mailAddress, mailAddress2); if (mailAddressAll.length>0) { @@ -745,7 +745,7 @@ public class CoDelServiceImpl implements CoDelService { //设置邮件内容 String text = "" + "
发货通知单" +data.getDelNo()+"【发票:"+ data.getCmcInvoice()+"】仓库已确认" + "
"; String textHead = "发货通知单"+data.getDelNo()+"【发票:"+ data.getCmcInvoice()+"】仓库已确认"; - + // 安全获取创建人邮箱,防止用户不存在或邮箱为空的空指针异常 SysUserEntity creator = coDelMapper.queryByUserName(checkHeader.get(0).getCreateBy()); if (creator != null && creator.getEmail() != null && !creator.getEmail().trim().isEmpty()) { @@ -808,23 +808,23 @@ public class CoDelServiceImpl implements CoDelService { // 先删除全部明细,再新建明细 coDelMapper.deleteAllEcssDelDetail(headerData); - + // 构建原数据Map,使用itemNo作为唯一标识 // 注意:不能用pn作为key,因为同一个pn可能有多行记录,每行都需要独立比较 Map originalDataMap = dbData.stream() .collect(Collectors.toMap(EcssCoDelNotifyDetail::getItemNo, detail -> detail, (v1, v2) -> v1)); - + for (int i = 0; i < excelList.size(); i++) { excelList.get(i).setDelNo(headerData.getDelNo()); excelList.get(i).setItemNo(i + 1); excelList.get(i).setModifyFlag(true); - + // 判断数量是否变化:按itemNo匹配原数据,比较同一行的数量是否变化 Integer itemNo = i + 1; EcssCoDelNotifyDetailData originalDetail = originalDataMap.get(itemNo); - + // 如果原数据中不存在该itemNo(新增行),或者pn不同(换料),或者数量不同,则标记modifyQtyFlag=true - if (originalDetail == null || + if (originalDetail == null || !originalDetail.getPn().equals(excelList.get(i).getPn()) || !originalDetail.getQty().equals(excelList.get(i).getQty())) { excelList.get(i).setModifyQtyFlag(true); @@ -841,12 +841,12 @@ public class CoDelServiceImpl implements CoDelService { String textHead = headerData.getDelNo()+"【发票:"+ headerData.getCmcInvoice()+"】改单"; String[] mailAddress = coDelMapper.queryUsersByRoleName("关务仓库",headerData.getSite()).stream().map(SysUserEntity::getEmail).toArray(String[]::new); - + // 安全获取创建人邮箱,防止用户不存在或邮箱为空的空指针异常 SysUserEntity creator = coDelMapper.queryByUserName(headerData.getCreateBy()); - String[] mailAddress2 = (creator != null && creator.getEmail() != null) ? + String[] mailAddress2 = (creator != null && creator.getEmail() != null) ? new String[]{creator.getEmail()} : new String[]{}; - + // 合并 + 去重 String[] mailAddressAll = Stream.concat(Arrays.stream(mailAddress), Arrays.stream(mailAddress2)) .filter(Objects::nonNull) // 防止 null @@ -869,7 +869,7 @@ public class CoDelServiceImpl implements CoDelService { List dbData, List newData) { StringBuilder emailContent = new StringBuilder(); - + // HTML头部和样式 emailContent.append(""); emailContent.append(""); @@ -887,7 +887,7 @@ public class CoDelServiceImpl implements CoDelService { emailContent.append(""); emailContent.append(""); emailContent.append(""); - + // 邮件标题 emailContent.append("

发货通知单改单通知

"); emailContent.append("

发货通知单号:").append(newHeaderData.getDelNo()).append("

"); @@ -936,13 +936,13 @@ public class CoDelServiceImpl implements CoDelService { // 处理明细变更 - 生成对比表格 emailContent.append("
明细数据对比
"); emailContent.append(generateDetailComparisonTable(dbData, newData)); - + emailContent.append(""); emailContent.append(""); return emailContent; } - + /** * 生成明细对比表格 * @param dbData 原数据 @@ -952,21 +952,21 @@ public class CoDelServiceImpl implements CoDelService { private String generateDetailComparisonTable(List dbData, List newData) { StringBuilder table = new StringBuilder(); - + // 注意:不能用pn作为key,因为同一个pn可能有多行记录 // 应该用itemNo进行一对一匹配,比较每一行的变化 Map dbMap = dbData.stream() .collect(Collectors.toMap(EcssCoDelNotifyDetail::getItemNo, detail -> detail, (v1, v2) -> v1)); Map newMap = newData.stream() .collect(Collectors.toMap(EcssCoDelNotifyDetail::getItemNo, detail -> detail, (v1, v2) -> v1)); - + // 获取所有itemNo Set allItemNos = new HashSet<>(); allItemNos.addAll(dbMap.keySet()); allItemNos.addAll(newMap.keySet()); List sortedItemNos = new ArrayList<>(allItemNos); sortedItemNos.sort(Integer::compareTo); - + table.append(""); table.append(""); table.append(""); @@ -975,14 +975,14 @@ public class CoDelServiceImpl implements CoDelService { table.append(""); table.append(""); table.append(""); - + for (Integer itemNo : sortedItemNos) { EcssCoDelNotifyDetailData oldDetail = dbMap.get(itemNo); EcssCoDelNotifyDetailData newDetail = newMap.get(itemNo); - + table.append(""); table.append(""); - + // 判断变更类型 if (oldDetail == null) { // 新增行 @@ -1015,10 +1015,10 @@ public class CoDelServiceImpl implements CoDelService { table.append(""); table.append(""); } - + table.append(""); } - + table.append("
项次数量(新)变更说明
").append(itemNo).append("").append(newDetail.getQty().setScale(0, RoundingMode.HALF_UP)).append("-
"); return table.toString(); } @@ -2380,7 +2380,7 @@ public class CoDelServiceImpl implements CoDelService { fscWeight(partNoAndItemNoMap,partNo, totalQty, nodifyData.getLossratio()); } String hsCodeDesc = data.getHsCodeDesc()!=null&& data.getHsCodeDesc()? - ("\n"+(data.getHsCodeDescType()!=null&& data.getHsCodeDescType().equals("N") + ("\n"+(data.getHsCodeDescTypeInvoice()!=null&& data.getHsCodeDescTypeInvoice().equals("N") ?eorder.get("hsCodeDescEn") :eorder.get("hsCodeDesc"))):""; eorder.put("designation", eorder.get("part_description") + "\n" + "PO:" + eorder.get("customerPO") + (data.getHsCodeFlag()!=null && data.getHsCodeFlag()?" HS Code:" + eorder.get("hsCode"):"")+hsCodeDesc+ lossratio); diff --git a/src/main/resources/mapper/ecss/EcssCommonMapper.xml b/src/main/resources/mapper/ecss/EcssCommonMapper.xml index c7cacfa7..ea372121 100644 --- a/src/main/resources/mapper/ecss/EcssCommonMapper.xml +++ b/src/main/resources/mapper/ecss/EcssCommonMapper.xml @@ -15,7 +15,7 @@ AND customName = #{customName} - AND shippingMode = #{shippingMode} + AND shippingMode like '%'+#{shippingMode}+'%' order by CreateDate desc