diff --git a/ruoyi-admin/src/main/resources/application-dev.yml b/ruoyi-admin/src/main/resources/application-dev.yml
index c7bfbbca..ae51e932 100644
--- a/ruoyi-admin/src/main/resources/application-dev.yml
+++ b/ruoyi-admin/src/main/resources/application-dev.yml
@@ -68,4 +68,4 @@ unis:
# 执行单截止时间
endHour: 96
mail:
- enabled: false
\ No newline at end of file
+ enabled: true
\ No newline at end of file
diff --git a/ruoyi-admin/src/main/resources/mailTemplate/payableRefundedTemplate.html b/ruoyi-admin/src/main/resources/mailTemplate/payableRefundedTemplate.html
new file mode 100644
index 00000000..ffe68e63
--- /dev/null
+++ b/ruoyi-admin/src/main/resources/mailTemplate/payableRefundedTemplate.html
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
+
+
+
+
尊敬的[[${vendorName}]]:
+
因【[[${projectName}]]】计划变更,我司已将原划扣款项¥[[${paymentAmount}]]元,全额退回至贵司的预付款账户。
+
截至目前,预付款余额为¥[[${preResidueAmountAdd}]]元。
+
特此函告。
+
+ 紫光汇智信息技术有限公司
+
+
+ [[${currentDate}]]
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ruoyi-admin/src/main/resources/mailTemplate/payableTemplate.html b/ruoyi-admin/src/main/resources/mailTemplate/payableTemplate.html
new file mode 100644
index 00000000..30708d98
--- /dev/null
+++ b/ruoyi-admin/src/main/resources/mailTemplate/payableTemplate.html
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
+
+
+
+
尊敬的[[${vendorName}]]:
+
我司向贵公司发起的预付款(金额¥[[${preResidueAmount}]]元),因【[[${projectName}]]】结算,已按约扣除¥[[${paymentAmount}]]元。
+
截至目前,预付款余额为¥[[${preResidueAmountSub}]]元。
+
特此函告。
+
+ 紫光汇智信息技术有限公司
+
+
+ [[${currentDate}]]
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ruoyi-admin/src/main/resources/mailTemplate/receiptRefundedTemplate.html b/ruoyi-admin/src/main/resources/mailTemplate/receiptRefundedTemplate.html
new file mode 100644
index 00000000..39a8691a
--- /dev/null
+++ b/ruoyi-admin/src/main/resources/mailTemplate/receiptRefundedTemplate.html
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
+
+
+
+
尊敬的[[${vendorName}]]:
+
因【[[${projectName}]]】计划变更,我司已将原划扣款项¥[[${paymentAmount}]]元,全额退回至贵司的预收款账户。
+
截至目前,预收款余额为¥[[${preResidueAmountAdd}]]元。
+
特此函告。
+
+ 紫光汇智信息技术有限公司
+
+
+ [[${currentDate}]]
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ruoyi-admin/src/main/resources/mailTemplate/receiptTemplate.html b/ruoyi-admin/src/main/resources/mailTemplate/receiptTemplate.html
new file mode 100644
index 00000000..8048657a
--- /dev/null
+++ b/ruoyi-admin/src/main/resources/mailTemplate/receiptTemplate.html
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
+
+
+
+
尊敬的[[${partnerName}]]:
+
我司向贵公司发起的预收款(金额¥[[${preResidueAmount}]]元),因【[[${projectName}]]】结算,已按约扣除¥[[${paymentAmount}]]元。
+
截至目前,预收款余额为¥[[${preResidueAmountSub}]]元。
+
特此函告。
+
+ 紫光汇智信息技术有限公司
+
+
+ [[${currentDate}]]
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/mail/TemplateMailUtil.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/mail/TemplateMailUtil.java
index d1e4e4b7..16bf4afb 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/mail/TemplateMailUtil.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/mail/TemplateMailUtil.java
@@ -42,10 +42,18 @@ public class TemplateMailUtil {
* @Date 2025/07/29 09:55
*/
public static void sendTemplateMail(List toEmail, String title, MailTemplate path, Dict dict) {
- sendTemplateMail(toEmail, title, path, dict, null);
+ sendTemplateMail(toEmail, title, path, dict, null, true);
}
public static void sendTemplateMail(List toEmail, String title, MailTemplate path, Dict dict, List toCssEmail) {
+ sendTemplateMail(toEmail, title, path, dict, toCssEmail, true);
+ }
+
+ public static void sendTemplateMailNotImage(List toEmail, String title, MailTemplate path, Dict dict) {
+ sendTemplateMail(toEmail, title, path, dict, null, false);
+ }
+
+ public static void sendTemplateMail(List toEmail, String title, MailTemplate path, Dict dict, List toCssEmail, Boolean addImage) {
String enabled = SpringUtils.getProperty("unis.mail.enabled", "false");
if (!Boolean.parseBoolean(enabled)) {
log.warn("邮件发送开关未开启");
@@ -58,9 +66,7 @@ public class TemplateMailUtil {
String result = template.render(dict);
try{
- org.springframework.core.io.Resource resource = SpringUtils.getResource("classpath:static/img/companyLogo.png");
- // 使用 InputStreamResource 包装输入流
- InputStreamResource imageResource = new InputStreamResource(resource.getInputStream());
+
Mail mail = Mail.create()
.setTos(toEmail.toArray(new String[0]))
.setTitle(title)
@@ -69,7 +75,12 @@ public class TemplateMailUtil {
if (CollUtil.isNotEmpty(toCssEmail)) {
mail.setCcs(toCssEmail.toArray(new String[0]));
}
- mail.addImage("signature",imageResource.getStream());
+ if (addImage != null && addImage) {
+ org.springframework.core.io.Resource resource = SpringUtils.getResource("classpath:static/img/companyLogo.png");
+ // 使用 InputStreamResource 包装输入流
+ InputStreamResource imageResource = new InputStreamResource(resource.getInputStream());
+ mail.addImage("signature", imageResource.getStream());
+ }
mail.send();
} catch (Exception e) {
log.error("发送邮件失败,错误原因:{},错误详情:{}",e.getMessage(),e.getStackTrace());
@@ -86,6 +97,10 @@ public class TemplateMailUtil {
ORDER_PARTNER("mailPartnerTemplate.html","代理商商通知"),
PASSWORD_RESET("passwordTemplate.html", "密码重置"),
REJECT_EMAIL("rejectTemplate.html", "董事长驳回订单审批流程"),
+ PAYABLE_EMAIL("payableTemplate.html", "预付款变动通知"),
+ PAYABLE_REFUNDED_EMAIL("payableRefundedTemplate.html", "董事长驳回订单审批流程"),
+ RECEIPT_EMAIL("receiptTemplate.html", "董事长驳回订单审批流程"),
+ RECEIPT_REFUNDED_EMAIL("receiptRefundedTemplate.html", "董事长驳回订单审批流程"),
;
diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/VendorInfo.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/VendorInfo.java
index c8a58303..e77ad249 100644
--- a/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/VendorInfo.java
+++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/VendorInfo.java
@@ -32,6 +32,7 @@ public class VendorInfo extends BaseEntity
/** 制造商编码 */
@Excel(name = "制造商编码")
private String vendorCode;
+ private List vendorCodeList;
/** 制造商名称 */
@Excel(name = "制造商名称")
diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/dto/ProjectPaymentBillDto.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/dto/ProjectPaymentBillDto.java
new file mode 100644
index 00000000..d0572874
--- /dev/null
+++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/dto/ProjectPaymentBillDto.java
@@ -0,0 +1,24 @@
+package com.ruoyi.sip.domain.dto;
+
+
+import lombok.Data;
+
+/**
+ * @author : ch
+ * @version : 1.0
+ * @ClassName : ProjectPaymentBillDto
+ * @Description :
+ * @DATE : Created in 20:05 2026/1/5
+ * Copyright: Copyright(c) 2026
+ * Company : 紫光汇智信息技术有限公司
+ * Modification History:
+ * Date Author Version Discription
+ * --------------------------------------------------------------------------
+ * 2026/01/05 ch 1.0 Why & What is modified: <修改原因描述> *
+ */
+@Data
+public class ProjectPaymentBillDto {
+ private String projectCode;
+ private String projectName;
+ private String paymentBillCode;
+}
diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/OmsPayablePaymentDetailMapper.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/OmsPayablePaymentDetailMapper.java
index 1c6f7eec..9289f07b 100644
--- a/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/OmsPayablePaymentDetailMapper.java
+++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/OmsPayablePaymentDetailMapper.java
@@ -2,6 +2,7 @@ package com.ruoyi.sip.mapper;
import com.ruoyi.sip.domain.OmsPayablePaymentDetail;
import com.ruoyi.sip.domain.dto.PaymentBillPayableDetailDTO;
+import com.ruoyi.sip.domain.dto.ProjectPaymentBillDto;
import org.apache.ibatis.annotations.Param;
import java.util.Date;
diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IOmsPayablePaymentDetailService.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IOmsPayablePaymentDetailService.java
index 25e0ed3f..930461a1 100644
--- a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IOmsPayablePaymentDetailService.java
+++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IOmsPayablePaymentDetailService.java
@@ -2,6 +2,7 @@ package com.ruoyi.sip.service;
import com.ruoyi.sip.domain.OmsPayablePaymentDetail;
import com.ruoyi.sip.domain.dto.PaymentBillPayableDetailDTO;
+import com.ruoyi.sip.domain.dto.ProjectPaymentBillDto;
import java.util.Date;
import java.util.List;
diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OmsPayablePaymentDetailServiceImpl.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OmsPayablePaymentDetailServiceImpl.java
index 9796566d..737dc51c 100644
--- a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OmsPayablePaymentDetailServiceImpl.java
+++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OmsPayablePaymentDetailServiceImpl.java
@@ -6,6 +6,7 @@ import com.ruoyi.common.utils.ShiroUtils;
import com.ruoyi.sip.domain.OmsFinAttachment;
import com.ruoyi.sip.domain.OmsPayablePaymentDetail;
import com.ruoyi.sip.domain.dto.PaymentBillPayableDetailDTO;
+import com.ruoyi.sip.domain.dto.ProjectPaymentBillDto;
import com.ruoyi.sip.mapper.OmsPayablePaymentDetailMapper;
import com.ruoyi.sip.service.IOmsFinAttachmentService;
import com.ruoyi.sip.service.IOmsPayablePaymentDetailService;
diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OmsPayableWriteOffServiceImpl.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OmsPayableWriteOffServiceImpl.java
index 8ad9b772..bc759a36 100644
--- a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OmsPayableWriteOffServiceImpl.java
+++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OmsPayableWriteOffServiceImpl.java
@@ -3,21 +3,18 @@ package com.ruoyi.sip.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.lang.Dict;
+import cn.hutool.core.util.StrUtil;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.ShiroUtils;
-import com.ruoyi.sip.domain.OmsPayablePaymentDetail;
-import com.ruoyi.sip.domain.OmsPayableWriteOff;
-import com.ruoyi.sip.domain.OmsPayableWriteOffDetail;
-import com.ruoyi.sip.domain.OmsPaymentBill;
+import com.ruoyi.common.utils.mail.TemplateMailUtil;
+import com.ruoyi.sip.domain.*;
import com.ruoyi.sip.domain.dto.PaymentBillPayableDetailDTO;
import com.ruoyi.sip.dto.WriteOffDetailResultDto;
import com.ruoyi.sip.dto.WriteOffRequestDto;
import com.ruoyi.sip.mapper.OmsPayableWriteOffMapper;
-import com.ruoyi.sip.service.IOmsPayableBillService;
-import com.ruoyi.sip.service.IOmsPayablePaymentDetailService;
-import com.ruoyi.sip.service.IOmsPayableWriteOffService;
-import com.ruoyi.sip.service.IOmsPaymentBillService;
+import com.ruoyi.sip.service.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -46,6 +43,8 @@ public class OmsPayableWriteOffServiceImpl implements IOmsPayableWriteOffService
private IOmsPayablePaymentDetailService omsPayablePaymentDetailService;
@Autowired
private IOmsPayableBillService payableBillService;
+ @Autowired
+ private IVendorInfoService vendorInfoService;
/**
@@ -146,7 +145,24 @@ public class OmsPayableWriteOffServiceImpl implements IOmsPayableWriteOffService
omsPayablePaymentDetail.setWriteOffId(writeOff.getId());
}
omsPayablePaymentDetailService.insertBatch( writeOffRequestDto.getDetailList());
- payableBillService.updatePaymentAmount(writeOffRequestDto.getDetailList().stream().map(OmsPayablePaymentDetail::getPayableBillId).distinct().collect(Collectors.toList()));
+ List collect = writeOffRequestDto.getDetailList().stream().map(OmsPayablePaymentDetail::getPayableBillId).distinct().collect(Collectors.toList());
+ payableBillService.updatePaymentAmount(collect);
+ VendorInfo vendorInfo = vendorInfoService.selectVendorInfoByVendorCode(writeOffRequestDto.getVendorCode());
+ if (vendorInfo!=null && StrUtil.isNotEmpty(vendorInfo.getVendorEmail())){
+ OmsPayableBill queryBill = new OmsPayableBill();
+ queryBill.setIdList( collect);
+ List omsPayableBills = payableBillService.selectOmsPayableBillList(queryBill);
+ String title = "预付款变动通知";
+ Dict dict = Dict.create();
+ dict.put("vendorName", vendorInfo.getVendorName());
+ dict.put("preResidueAmount", paymentBill.getPreResidueAmount());
+ dict.put("preResidueAmountSub", decimal);
+ dict.put("projectName", omsPayableBills.stream().map(OmsPayableBill::getProjectName).filter(StrUtil::isNotEmpty).distinct().collect(Collectors.joining(",")));
+ dict.put("paymentAmount", totalAmount);
+ dict.put("currentDate", DateUtils.parseDateToStr(DatePattern.CHINESE_DATE_PATTERN,DateUtils.getNowDate()));
+ TemplateMailUtil.sendTemplateMailNotImage(Collections.singletonList(vendorInfo.getVendorEmail()), title,
+ TemplateMailUtil.MailTemplate.PAYABLE_EMAIL, dict);
+ }
return writeOff.getId();
}
diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OmsPaymentBillServiceImpl.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OmsPaymentBillServiceImpl.java
index 4e9cde26..1a13950a 100644
--- a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OmsPaymentBillServiceImpl.java
+++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OmsPaymentBillServiceImpl.java
@@ -2,11 +2,13 @@ package com.ruoyi.sip.service.impl;
import java.math.BigDecimal;
import java.util.*;
+import java.util.function.Function;
import java.util.stream.Collectors;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.lang.Dict;
import cn.hutool.core.util.StrUtil;
import com.ruoyi.common.config.RuoYiConfig;
import com.ruoyi.common.config.flow.ProcessConfig;
@@ -16,9 +18,11 @@ import com.ruoyi.common.enums.ApproveStatusEnum;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.ShiroUtils;
import com.ruoyi.common.utils.file.FileUploadUtils;
+import com.ruoyi.common.utils.mail.TemplateMailUtil;
import com.ruoyi.sip.domain.*;
import com.ruoyi.sip.domain.dto.PaymentBillDetailDTO;
import com.ruoyi.sip.domain.dto.PaymentBillPayableDetailDTO;
+import com.ruoyi.sip.domain.dto.ProjectPaymentBillDto;
import com.ruoyi.sip.dto.WriteOffRequestDto;
import com.ruoyi.sip.flowable.domain.Todo;
import com.ruoyi.sip.flowable.service.TodoCommonTemplate;
@@ -573,10 +577,14 @@ public class OmsPaymentBillServiceImpl implements IOmsPaymentBillService , TodoC
if (increaseAmount.compareTo(BigDecimal.ZERO) > 0) {
OmsPaymentBill updateBill = new OmsPaymentBill();
updateBill.setId(prePaymentBill.getId());
+ updateBill.setVendorCode(prePaymentBill.getVendorCode());
+ updateBill.setPaymentBillCode(prePaymentBill.getPaymentBillCode());
// 在原剩余额度基础上加回本次核销金额
BigDecimal newResidueAmount = prePaymentBill.getPreResidueAmount()
.add(increaseAmount);
updateBill.setPreResidueAmount(newResidueAmount);
+
+
return updateBill;
}
return null;
@@ -585,8 +593,39 @@ public class OmsPaymentBillServiceImpl implements IOmsPaymentBillService , TodoC
.collect(Collectors.toList());
if (CollUtil.isNotEmpty(updateBills)) {
+ VendorInfo queryVendor = new VendorInfo();
+ queryVendor.setVendorCodeList(updateBills.stream().map(OmsPaymentBill::getVendorCode).distinct().collect(Collectors.toList()));
+ List vendorInfos = vendorInfoService.selectVendorInfoList(queryVendor);
+ Map vendorInfoMap = vendorInfos.stream().collect(Collectors.toMap(VendorInfo::getVendorCode, Function.identity(), (v1, v2) -> v1));
+ List payableBillIdList = omsPayablePaymentDetails.stream().map(OmsPayablePaymentDetail::getPayableBillId).collect(Collectors.toList());
+ OmsPayableBill query = new OmsPayableBill();
+ query.setIdList(payableBillIdList);
+ List omsPayableBills = payableBillService.selectOmsPayableBillList(query);
+ Map projectNameMap = omsPayableBills.stream().collect(Collectors.toMap(OmsPayableBill::getId, OmsPayableBill::getProjectName));
+ Map> projectNamePaymentCodeMapSet = omsPayablePaymentDetails.stream().collect(Collectors.groupingBy(OmsPayablePaymentDetail::getPaymentBillCode,
+ Collectors.mapping(item -> {
+ return projectNameMap.get(item.getPayableBillId());
+ },
+ Collectors.toSet())));
+
for (OmsPaymentBill bill : updateBills) {
updateOmsPaymentBill(bill);
+ VendorInfo vendorInfo = vendorInfoMap.get(bill.getVendorCode());
+ if (vendorInfo != null && StrUtil.isNotEmpty(vendorInfo.getVendorEmail())) {
+ BigDecimal increaseAmount = paymentBillWriteOffAmountMap.getOrDefault(
+ bill.getPaymentBillCode(), BigDecimal.ZERO);
+ String title = "预付款恢复通知";
+ Dict dict = Dict.create();
+ dict.put("vendorName", vendorInfo.getVendorName());
+ dict.put("preResidueAmount", bill.getPreResidueAmount().subtract(increaseAmount));
+ dict.put("preResidueAmountAdd", bill.getPreResidueAmount());
+ dict.put("projectName", projectNamePaymentCodeMapSet.getOrDefault(bill.getPaymentBillCode(),Collections.emptySet()).stream().filter(StrUtil::isNotEmpty).collect(Collectors.joining(",")));
+ dict.put("paymentAmount", increaseAmount);
+ dict.put("currentDate", DateUtils.parseDateToStr(DatePattern.CHINESE_DATE_PATTERN, DateUtils.getNowDate()));
+ TemplateMailUtil.sendTemplateMailNotImage(Collections.singletonList(vendorInfo.getVendorEmail()), title,
+ TemplateMailUtil.MailTemplate.PAYABLE_REFUNDED_EMAIL, dict);
+ }
+
}
}
}
diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OmsReceiptBillServiceImpl.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OmsReceiptBillServiceImpl.java
index 097231aa..2e4fb984 100644
--- a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OmsReceiptBillServiceImpl.java
+++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OmsReceiptBillServiceImpl.java
@@ -3,6 +3,7 @@ package com.ruoyi.sip.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.lang.Dict;
import cn.hutool.core.util.StrUtil;
import com.ruoyi.common.config.RuoYiConfig;
import com.ruoyi.common.config.flow.ProcessConfig;
@@ -13,6 +14,7 @@ import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.ShiroUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.file.FileUploadUtils;
+import com.ruoyi.common.utils.mail.TemplateMailUtil;
import com.ruoyi.sip.domain.*;
import com.ruoyi.sip.domain.dto.ReceiptDetailDTO;
import com.ruoyi.sip.dto.WriteOffReceiptRequestDto;
@@ -32,6 +34,7 @@ import java.io.IOException;
import java.math.BigDecimal;
import java.rmi.ServerException;
import java.util.*;
+import java.util.function.Function;
import java.util.stream.Collectors;
/**
@@ -53,6 +56,8 @@ public class OmsReceiptBillServiceImpl implements IOmsReceiptBillService, TodoCo
@Autowired
private IOmsFinAttachmentService attachmentService;
+ @Autowired
+ private IPartnerInfoService partnerInfoService;
@Autowired
private IOmsReceivableWriteOffService omsReceivableWriteOffService;
@@ -385,6 +390,8 @@ public class OmsReceiptBillServiceImpl implements IOmsReceiptBillService, TodoCo
if (increaseAmount.compareTo(BigDecimal.ZERO) > 0) {
OmsReceiptBill updateBill = new OmsReceiptBill();
updateBill.setId(prePaymentBill.getId());
+ updateBill.setPartnerCode(prePaymentBill.getPartnerCode());
+ updateBill.setReceiptBillCode(prePaymentBill.getReceiptBillCode());
// 在原剩余额度基础上加回本次核销金额
BigDecimal newResidueAmount = prePaymentBill.getRemainingAmount()
.add(increaseAmount);
@@ -397,8 +404,35 @@ public class OmsReceiptBillServiceImpl implements IOmsReceiptBillService, TodoCo
.collect(Collectors.toList());
if (CollUtil.isNotEmpty(updateBills)) {
+
+ List partnerInfos = partnerInfoService.selectPartnerInfoByCode(updateBills.stream().map(OmsReceiptBill::getPartnerCode).collect(Collectors.toList()));
+ Map partnerInfoMap = partnerInfos.stream().collect(Collectors.toMap(PartnerInfo::getPartnerCode, Function.identity(), (v1, v2) -> v1));
+ OmsReceivableBill queryBill = new OmsReceivableBill();
+ queryBill.setIdList(omsReceivableReceiptDetails.stream().map(OmsReceivableReceiptDetail::getReceivableBillId).distinct().collect(Collectors.toList()));
+ List receivableBillList = receivableBillService.selectOmsReceivableBillList(queryBill);
+ Map projectNameMap = receivableBillList.stream().collect(Collectors.toMap(OmsReceivableBill::getId, OmsReceivableBill::getProjectName, (v1, v2) -> v1));
+ Map> projectNameBillCodeMap = omsReceivableReceiptDetails.stream().collect(Collectors.groupingBy(OmsReceivableReceiptDetail::getReceiptBillCode,
+ Collectors.mapping(item -> projectNameMap.get(item.getReceivableBillId()), Collectors.toSet())));
+
+
for (OmsReceiptBill bill : updateBills) {
update(bill);
+ PartnerInfo partnerInfo = partnerInfoMap.get(bill.getPartnerCode());
+ if (partnerInfo != null && StrUtil.isNotEmpty(partnerInfo.getContactEmail())) {
+ BigDecimal increaseAmount = paymentBillWriteOffAmountMap.getOrDefault(
+ bill.getReceiptBillCode(), BigDecimal.ZERO);
+ String title = "预付款恢复通知";
+ Dict dict = Dict.create();
+ dict.put("partnerName", partnerInfo.getPartnerName());
+ dict.put("preResidueAmount", bill.getRemainingAmount().subtract(increaseAmount));
+ dict.put("preResidueAmountAdd", bill.getRemainingAmount());
+ dict.put("projectName", projectNameBillCodeMap.getOrDefault(bill.getReceiptBillCode(),Collections.emptySet()).stream().filter(StrUtil::isNotEmpty).collect(Collectors.joining(",")));
+ dict.put("paymentAmount", increaseAmount);
+ dict.put("currentDate", DateUtils.parseDateToStr(DatePattern.CHINESE_DATE_PATTERN, DateUtils.getNowDate()));
+ TemplateMailUtil.sendTemplateMailNotImage(Collections.singletonList(partnerInfo.getContactEmail()), title,
+ TemplateMailUtil.MailTemplate.RECEIPT_REFUNDED_EMAIL, dict);
+ }
+
}
}
//预收单的detail直接删除
diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OmsReceivableWriteOffServiceImpl.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OmsReceivableWriteOffServiceImpl.java
index 61a269a0..6491b64c 100644
--- a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OmsReceivableWriteOffServiceImpl.java
+++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OmsReceivableWriteOffServiceImpl.java
@@ -3,22 +3,18 @@ package com.ruoyi.sip.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.lang.Dict;
import cn.hutool.core.util.StrUtil;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.ShiroUtils;
-import com.ruoyi.sip.domain.OmsPayablePaymentDetail;
-import com.ruoyi.sip.domain.OmsReceiptBill;
-import com.ruoyi.sip.domain.OmsReceivableReceiptDetail;
-import com.ruoyi.sip.domain.OmsReceivableWriteOff;
+import com.ruoyi.common.utils.mail.TemplateMailUtil;
+import com.ruoyi.sip.domain.*;
import com.ruoyi.sip.domain.dto.ReceiptDetailDTO;
import com.ruoyi.sip.dto.WriteOffDetailResultDto;
import com.ruoyi.sip.dto.WriteOffReceiptRequestDto;
import com.ruoyi.sip.mapper.OmsReceivableWriteOffMapper;
-import com.ruoyi.sip.service.IOmsReceiptBillService;
-import com.ruoyi.sip.service.IOmsReceivableBillService;
-import com.ruoyi.sip.service.IOmsReceivableReceiptDetailService;
-import com.ruoyi.sip.service.IOmsReceivableWriteOffService;
+import com.ruoyi.sip.service.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -47,6 +43,8 @@ public class OmsReceivableWriteOffServiceImpl implements IOmsReceivableWriteOffS
private IOmsReceivableReceiptDetailService omsReceivableReceiptDetailService;
@Autowired
private IOmsReceivableBillService receivableBillService;
+ @Autowired
+ private IPartnerInfoService partnerInfoService;
/**
* 查询应收单收款计划核销
@@ -153,6 +151,31 @@ public class OmsReceivableWriteOffServiceImpl implements IOmsReceivableWriteOffS
omsReceivableReceiptDetailService.insertOmsReceivableReceiptDetail(detail);
}
receivableBillService.updateReceiptAmount(writeOffRequestDto.getDetailList().stream().map(OmsReceivableReceiptDetail::getReceivableBillId).distinct().collect(Collectors.toList()));
+ String title = "预收款变动通知";
+ List partnerInfos = partnerInfoService.selectPartnerInfoByCode(Collections.singletonList(writeOffRequestDto.getPartnerCode()));
+ if (CollUtil.isNotEmpty(partnerInfos)){
+ PartnerInfo partnerInfo = partnerInfos.get(0);
+ if (partnerInfo!=null && StrUtil.isNotEmpty(partnerInfo.getContactEmail())){
+
+ OmsReceivableBill queryBill = new OmsReceivableBill();
+ queryBill.setIdList(writeOffRequestDto.getDetailList().stream().map(OmsReceivableReceiptDetail::getReceivableBillId).distinct().collect(Collectors.toList()));
+ List receivableBillList = receivableBillService.selectOmsReceivableBillList(queryBill);
+ Dict dict = Dict.create();
+ dict.put("partnerName", writeOffRequestDto.getPartnerName());
+ dict.put("preResidueAmount", receiptBill.getRemainingAmount());
+ dict.put("preResidueAmountSub", decimal);
+ dict.put("projectName", receivableBillList.stream().map(OmsReceivableBill::getProjectName).collect(Collectors.joining(", ")));
+ dict.put("paymentAmount", totalAmount);
+ dict.put("currentDate", DateUtils.parseDateToStr(DatePattern.CHINESE_DATE_PATTERN,DateUtils.getNowDate()));
+ TemplateMailUtil.sendTemplateMailNotImage(Collections.singletonList(partnerInfo.getContactEmail()), title,
+ TemplateMailUtil.MailTemplate.RECEIPT_EMAIL, dict);
+ }
+ }
+
+
+
+
+
return writeOff.getId();
}
diff --git a/ruoyi-sip/src/main/resources/mapper/finance/OmsPayablePaymentDetailMapper.xml b/ruoyi-sip/src/main/resources/mapper/finance/OmsPayablePaymentDetailMapper.xml
index 1d0e77f3..8679fbcf 100644
--- a/ruoyi-sip/src/main/resources/mapper/finance/OmsPayablePaymentDetailMapper.xml
+++ b/ruoyi-sip/src/main/resources/mapper/finance/OmsPayablePaymentDetailMapper.xml
@@ -181,7 +181,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
update oms_payable_payment_detail set write_off_id=null WHERE write_off_id IN
#{item}
-
+ ;
+ delete from oms_payable_payment_detail where write_off_id is null and payable_detail_type='2';
\ No newline at end of file
diff --git a/ruoyi-sip/src/main/resources/mapper/system/VendorInfoMapper.xml b/ruoyi-sip/src/main/resources/mapper/system/VendorInfoMapper.xml
index 0042f2dd..a29b9209 100644
--- a/ruoyi-sip/src/main/resources/mapper/system/VendorInfoMapper.xml
+++ b/ruoyi-sip/src/main/resources/mapper/system/VendorInfoMapper.xml
@@ -43,6 +43,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
and t1.vendor_code like concat('%', #{vendorCode}, '%')
+ and t1.vendor_code in
+
+ #{item}
+
+
and t1.vendor_name like concat('%', #{vendorName}, '%')
and t1.vendor_address like concat('%', #{vendorAddress}, '%')
and t1.vendor_user = #{vendorUser}