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}