Browse Source

改单导入邮件里有改动的就红色字体显示,ReadyDate、ShippingMode、Destination也能通过改单导入修改

java8
han\hanst 3 months ago
parent
commit
5da3be211f
  1. 171
      src/main/java/com/xujie/sys/modules/ecss/service/impl/CoDelServiceImpl.java

171
src/main/java/com/xujie/sys/modules/ecss/service/impl/CoDelServiceImpl.java

@ -743,8 +743,24 @@ public class CoDelServiceImpl implements CoDelService {
} else { } else {
headerData = notifyHeader.get(0); headerData = notifyHeader.get(0);
} }
// 保存原始头表数据用于比较
EcssCoDelNotifyHeaderData originalHeaderData = new EcssCoDelNotifyHeaderData();
originalHeaderData.setReadyDate(headerData.getReadyDate());
originalHeaderData.setShippingMode(headerData.getShippingMode());
originalHeaderData.setDestination(headerData.getDestination());
List<EcssCoDelNotifyDetailData> dbinData =coDelMapper.searchEcssCoDelNotifyDetail(headerData); List<EcssCoDelNotifyDetailData> dbinData =coDelMapper.searchEcssCoDelNotifyDetail(headerData);
List<EcssCoDelNotifyDetailData> dbData = new ArrayList<>(dbinData); List<EcssCoDelNotifyDetailData> dbData = new ArrayList<>(dbinData);
// 更新头表字段ReadyDateShippingModeDestination
if (!excelList.isEmpty()) {
EcssCoDelNotifyData firstExcelData = excelList.get(0);
headerData.setReadyDate(firstExcelData.getReadyDate());
headerData.setShippingMode(firstExcelData.getShippingMode());
headerData.setDestination(firstExcelData.getDestination());
}
// 先删除全部明细再新建明细 // 先删除全部明细再新建明细
coDelMapper.deleteAllEcssDelDetail(headerData); coDelMapper.deleteAllEcssDelDetail(headerData);
for (int i = 0; i < excelList.size(); i++) { for (int i = 0; i < excelList.size(); i++) {
@ -753,51 +769,142 @@ public class CoDelServiceImpl implements CoDelService {
} }
coDelMapper.batchSaveEcssCoDelNotifyDetail(excelList); coDelMapper.batchSaveEcssCoDelNotifyDetail(excelList);
headerData.setModifyFlag(true); headerData.setModifyFlag(true);
coDelMapper.updateEcssDelHeaderForModify(headerData);
// 更新头表字段包括ReadyDateShippingModeDestination
coDelMapper.updateEcssDelHeader(headerData);
List<EcssCoDelNotifyDetailData> newData =coDelMapper.searchEcssCoDelNotifyDetail(headerData); List<EcssCoDelNotifyDetailData> newData =coDelMapper.searchEcssCoDelNotifyDetail(headerData);
// 构建邮件内容包含头表字段变更和明细变更
StringBuilder emailContent = generateModifyEmailContent(originalHeaderData, headerData, dbData, newData);
String textHead = headerData.getDelNo()+"【发票:"+ headerData.getCmcInvoice()+"】改单";
String[] mailAddress = coDelMapper.queryUsersByRoleName("关务仓库",headerData.getSite()).stream().map(SysUserEntity::getEmail).toArray(String[]::new);
String[] mailAddress2 = new String[]{coDelMapper.queryByUserName(headerData.getCreateBy()).getEmail()};
String[] mailAddressAll = ArrayUtils.addAll(mailAddress, mailAddress2);
if (mailAddressAll.length>0) {
sendMailUtil(textHead, emailContent.toString(), mailAddressAll, headerData);
}
}
/**
* 生成改单邮件内容包含头表字段变更和明细变更
*/
private StringBuilder generateModifyEmailContent(EcssCoDelNotifyHeaderData originalHeaderData,
EcssCoDelNotifyHeaderData newHeaderData,
List<EcssCoDelNotifyDetailData> dbData,
List<EcssCoDelNotifyDetailData> newData) {
StringBuilder emailContent = new StringBuilder();
emailContent.append("<!DOCTYPE><div>发货通知单").append(newHeaderData.getDelNo())
.append("【发票:").append(newHeaderData.getCmcInvoice()).append("】改单</div>");
// 检查头表字段变更
StringBuilder headerChanges = new StringBuilder();
boolean hasHeaderChanges = false;
// 检查ReadyDate变更
if (!Objects.equals(originalHeaderData.getReadyDate(), newHeaderData.getReadyDate())) {
hasHeaderChanges = true;
String originalDate = originalHeaderData.getReadyDate() != null ?
DateUtils.format(originalHeaderData.getReadyDate(), "yyyy-MM-dd") : "无";
String newDate = newHeaderData.getReadyDate() != null ?
DateUtils.format(newHeaderData.getReadyDate(), "yyyy-MM-dd") : "无";
headerChanges.append("<li style='margin-top: 10px'>Ready Date: ")
.append(originalDate).append(" → <span style='color:red'>").append(newDate).append("</span></li>");
}
// 检查ShippingMode变更
if (!Objects.equals(originalHeaderData.getShippingMode(), newHeaderData.getShippingMode())) {
hasHeaderChanges = true;
String originalMode = originalHeaderData.getShippingMode() != null ? originalHeaderData.getShippingMode() : "无";
String newMode = newHeaderData.getShippingMode() != null ? newHeaderData.getShippingMode() : "无";
headerChanges.append("<li style='margin-top: 10px'>Shipping Mode: ")
.append(originalMode).append(" → <span style='color:red'>").append(newMode).append("</span></li>");
}
// 检查Destination变更
if (!Objects.equals(originalHeaderData.getDestination(), newHeaderData.getDestination())) {
hasHeaderChanges = true;
String originalDest = originalHeaderData.getDestination() != null ? originalHeaderData.getDestination() : "无";
String newDest = newHeaderData.getDestination() != null ? newHeaderData.getDestination() : "无";
headerChanges.append("<li style='margin-top: 10px'>Destination: ")
.append(originalDest).append(" → <span style='color:red'>").append(newDest).append("</span></li>");
}
// 如果有头表字段变更添加到邮件内容
if (hasHeaderChanges) {
emailContent.append("<div><span style='color:blue'>头表字段变更</span></div>")
.append("<div><ol>").append(headerChanges).append("</ol></div>");
}
// 处理明细变更
Map<String, List<EcssCoDelNotifyDetailData>> dbMap = dbData.stream().collect(Collectors.groupingBy(EcssCoDelNotifyDetail::getPn)); Map<String, List<EcssCoDelNotifyDetailData>> dbMap = dbData.stream().collect(Collectors.groupingBy(EcssCoDelNotifyDetail::getPn));
Map<String, List<EcssCoDelNotifyDetailData>> newMap = newData.stream().collect(Collectors.groupingBy(EcssCoDelNotifyDetail::getPn)); Map<String, List<EcssCoDelNotifyDetailData>> newMap = newData.stream().collect(Collectors.groupingBy(EcssCoDelNotifyDetail::getPn));
StringBuilder s = new StringBuilder();
s.append("<ol>");
// 构建原数据明细
StringBuilder originalDetails = new StringBuilder();
originalDetails.append("<ol>");
for (EcssCoDelNotifyDetailData detail : dbData) { for (EcssCoDelNotifyDetailData detail : dbData) {
if (!newMap.containsKey(detail.getPn())) { if (!newMap.containsKey(detail.getPn())) {
s.append("<li style='margin-top: 10px;color:red'>").append("PN:").append(detail.getPn()).append(" 数量:").
append(detail.getQty().setScale(0, RoundingMode.HALF_UP)).append("</li>");
// 删除的项目用红色显示
originalDetails.append("<li style='margin-top: 10px;color:red'>")
.append("PN:").append(detail.getPn()).append(" 数量:")
.append(detail.getQty().setScale(0, RoundingMode.HALF_UP))
.append(" [已删除]</li>");
} else { } else {
s.append("<li style='margin-top: 10px'>").append("PN:").append(detail.getPn()).append(" 数量:").
append(detail.getQty().setScale(0, RoundingMode.HALF_UP)).append("</li>");
// 检查数量是否有变更
EcssCoDelNotifyDetailData newDetail = newMap.get(detail.getPn()).get(0);
if (!detail.getQty().equals(newDetail.getQty())) {
// 数量有变更用红色显示
originalDetails.append("<li style='margin-top: 10px'>")
.append("PN:").append(detail.getPn()).append(" 数量:<span style='color:red'>")
.append(detail.getQty().setScale(0, RoundingMode.HALF_UP))
.append("</span></li>");
} else {
// 无变更
originalDetails.append("<li style='margin-top: 10px'>")
.append("PN:").append(detail.getPn()).append(" 数量:")
.append(detail.getQty().setScale(0, RoundingMode.HALF_UP))
.append("</li>");
}
} }
} }
s.append("</ol>");
// 改单 通知仓库和单证人员
//设置邮件内容
StringBuilder sNew = new StringBuilder();
sNew.append("<ol>");
originalDetails.append("</ol>");
// 构建新数据明细
StringBuilder newDetails = new StringBuilder();
newDetails.append("<ol>");
for (EcssCoDelNotifyDetailData detail : newData) { for (EcssCoDelNotifyDetailData detail : newData) {
if (!dbMap.containsKey(detail.getPn())) { if (!dbMap.containsKey(detail.getPn())) {
sNew.append("<li style='margin-top: 10px;color:red'>").append("PN:").append(detail.getPn()).append(" 数量:").
append(detail.getQty().setScale(0, RoundingMode.HALF_UP)).append("</li>");
// 新增的项目用红色显示
newDetails.append("<li style='margin-top: 10px;color:red'>")
.append("PN:").append(detail.getPn()).append(" 数量:")
.append(detail.getQty().setScale(0, RoundingMode.HALF_UP))
.append(" [新增]</li>");
} else { } else {
sNew.append("<li style='margin-top: 10px'>").append("PN:").append(detail.getPn()).append(" 数量:").
append(detail.getQty().setScale(0, RoundingMode.HALF_UP)).append("</li>");
// 检查数量是否有变更
EcssCoDelNotifyDetailData originalDetail = dbMap.get(detail.getPn()).get(0);
if (!detail.getQty().equals(originalDetail.getQty())) {
// 数量有变更用红色显示
newDetails.append("<li style='margin-top: 10px'>")
.append("PN:").append(detail.getPn()).append(" 数量:<span style='color:red'>")
.append(detail.getQty().setScale(0, RoundingMode.HALF_UP))
.append("</span></li>");
} else {
// 无变更
newDetails.append("<li style='margin-top: 10px'>")
.append("PN:").append(detail.getPn()).append(" 数量:")
.append(detail.getQty().setScale(0, RoundingMode.HALF_UP))
.append("</li>");
}
} }
} }
sNew.append("</ol>");
//设置邮件内容
String oldText = "<!DOCTYPE>" + "<div>" + "<span style='color:blue'>原数据</span>"
+ "</div>" + "<div>" + s + "</div>";
String newText = "<!DOCTYPE>" + "<div>" + "<span style='color:blue'>新数据</span>"
+ "</div>" + "<div>" + sNew + "</div>";
String text = "<!DOCTYPE>" + "<div>发货通知单" +headerData.getDelNo()+
"【发票:"+ headerData.getCmcInvoice()+"】改单"
+ "</div>"+ oldText+newText;
String textHead = headerData.getDelNo()+"【发票:"+ headerData.getCmcInvoice()+"】改单";
String[] mailAddress = coDelMapper.queryUsersByRoleName("关务仓库",headerData.getSite()).stream().map(SysUserEntity::getEmail).toArray(String[]::new);
String[] mailAddress2 = new String[]{coDelMapper.queryByUserName(headerData.getCreateBy()).getEmail()};
String[] mailAddressAll = ArrayUtils.addAll(mailAddress, mailAddress2);
if (mailAddressAll.length>0) {
sendMailUtil(textHead, text,mailAddressAll, headerData);
}
newDetails.append("</ol>");
// 添加明细变更到邮件内容
String oldText = "<div><span style='color:blue'>原数据</span></div><div>" + originalDetails + "</div>";
String newText = "<div><span style='color:blue'>新数据</span></div><div>" + newDetails + "</div>";
emailContent.append(oldText).append(newText);
return emailContent;
} }
@Override @Override

Loading…
Cancel
Save