From fd3c0b52daff100988817de4054ab2bd8e592e40 Mon Sep 17 00:00:00 2001
From: chenhang <3165269033@qq.com>
Date: Wed, 5 Mar 2025 11:54:13 +0800
Subject: [PATCH] feat:1.新增最终状态设置。 fix:1.修复自动发送邮件时,添加财务人员。

---
 src/main/java/com/order/erp/common/utils/EmailSendUtils.java                                | 47 ++++++++++++++++++++++++++++++++---------------
 src/main/java/com/order/erp/controller/InvoiceBillOrderController.java                      | 10 ++++++++++
 src/main/java/com/order/erp/controller/ProducePaymentCheckBillOrderController.java          | 10 ++++++++++
 src/main/java/com/order/erp/domain/dto/order/InvoiceBillOrderDO.java                        |  5 +++++
 src/main/java/com/order/erp/domain/dto/order/ProducePaymentCheckBillOrderDO.java            |  5 +++++
 src/main/java/com/order/erp/domain/vo/order/FinanceOrderResultVO.java                       | 10 +++++++++-
 src/main/java/com/order/erp/domain/vo/order/InvoiceBillOrderQueryVO.java                    | 10 ++++++++++
 src/main/java/com/order/erp/service/order/InvoiceBillOrderService.java                      |  1 +
 src/main/java/com/order/erp/service/order/ProducePaymentCheckBillOrderService.java          |  1 +
 src/main/java/com/order/erp/service/order/impl/InvoiceBillOrderServiceImpl.java             | 24 +++++++++++++++++++++++-
 src/main/java/com/order/erp/service/order/impl/OrderFieldLockApplyServiceImpl.java          | 12 ++++++------
 src/main/java/com/order/erp/service/order/impl/ProducePaymentCheckBillOrderServiceImpl.java | 24 +++++++++++++++++++++++-
 src/main/resources/mapper/InvoiceBillOrderMapper.xml                                        | 16 +++++++++++++++-
 13 files changed, 150 insertions(+), 25 deletions(-)

diff --git a/src/main/java/com/order/erp/common/utils/EmailSendUtils.java b/src/main/java/com/order/erp/common/utils/EmailSendUtils.java
index 142d3c7..00b0d6c 100644
--- a/src/main/java/com/order/erp/common/utils/EmailSendUtils.java
+++ b/src/main/java/com/order/erp/common/utils/EmailSendUtils.java
@@ -9,11 +9,13 @@ import com.order.erp.domain.EmailTemplateEnum;
 import com.order.erp.domain.FinanceOverEnum;
 import com.order.erp.domain.dto.BaseDO;
 import com.order.erp.domain.dto.admin.AdminUserDO;
+import com.order.erp.domain.dto.admin.AdminUserRoleDO;
 import com.order.erp.domain.dto.order.InvoiceBillOrderDO;
 import com.order.erp.domain.dto.order.ProducePaymentCheckBillOrderDO;
 import com.order.erp.domain.vo.order.FinanceEventJobVO;
 import com.order.erp.domain.vo.order.InvoiceAndCheckBillSendEmailVO;
 import com.order.erp.domain.vo.order.OrderEventJobVO;
+import com.order.erp.service.admin.AdminUserRoleService;
 import com.order.erp.service.admin.AdminUserService;
 import freemarker.template.Template;
 import freemarker.template.TemplateException;
@@ -30,6 +32,7 @@ import java.io.File;
 import java.io.IOException;
 import java.io.StringWriter;
 import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * @Author:ch
@@ -45,6 +48,8 @@ public class EmailSendUtils {
     private FreeMarkerConfigurer freeMarkerConfigurer;
     @Resource
     private AdminUserService adminUserService;
+    @Resource
+    private AdminUserRoleService adminUserRoleService;
 
     /**
      * @Description:    发送邮件  发送尾期验货报告,中期验货报告,邮件提醒事件。
@@ -283,7 +288,7 @@ public class EmailSendUtils {
      * @throws IOException
      */
     @Async
-    public  void sendInvoiceAndCheckEmail(FinanceOverEnum emailTemplateEnum, InvoiceAndCheckBillSendEmailVO invoiceAndCheckBillSendEmailVO)  {
+    public  void sendInvoiceAndCheckEmail(FinanceOverEnum emailTemplateEnum, InvoiceAndCheckBillSendEmailVO invoiceAndCheckBillSendEmailVO,boolean isTrue)  {
         if(emailTemplateEnum ==null && ObjectUtils.isNull(invoiceAndCheckBillSendEmailVO)){
             throw new BusinessException(ServerResultCode.PARAM_ERROR);
         }
@@ -293,26 +298,38 @@ public class EmailSendUtils {
         String invoiceNoOrCheckNo;
         if(invoiceAndCheckBillSendEmailVO.getInvoiceBillOrderDO()!=null){
             InvoiceBillOrderDO invoiceBillOrderDO=invoiceAndCheckBillSendEmailVO.getInvoiceBillOrderDO();
-            //得到提交人
-            AdminUserDO adminUserDO = adminUserService.getOne(new LambdaQueryWrapper<AdminUserDO>()
+            //得到财务提交人以及业务员和跟单员。
+            List<AdminUserDO> adminUserDOList = adminUserService.list(new LambdaQueryWrapper<AdminUserDO>()
                     .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN)
-                    .eq(AdminUserDO::getUserName, invoiceBillOrderDO.getFinancePerson())
-                    .last("limit 1"));
-
-            if(Objects.nonNull(adminUserDO)){
-                String emails=adminUserDO.getEmail();
-                if(StringUtils.isNotBlank(emails)){
-                    email = emails.split("[,,]+");
-                }
+                    .in(AdminUserDO::getUserName, Arrays.asList(invoiceBillOrderDO.getTrackerUser(),invoiceBillOrderDO.getBusinesPerson(),invoiceBillOrderDO.getFinancePerson())));
+            if(CollectionUtils.isNotEmpty(adminUserDOList)){
+                email = adminUserDOList.stream()
+                        .map(AdminUserDO::getEmail) // 提取 email
+                        .filter(Objects::nonNull) // 过滤掉 null 的 email
+                        .flatMap(emails -> Arrays.stream(emails.split("[,,]+"))) // 按逗号或中文逗号分割 email
+                        .map(String::trim) // 去除空格
+                        .filter(s -> !s.isEmpty()) // 过滤掉空字符串
+                        .toArray(String[]::new); // 转换为 String[] 数组
             }
             invoiceNoOrCheckNo = invoiceBillOrderDO.getInvoiceNo();
         }else{
             ProducePaymentCheckBillOrderDO checkBillOrderDO = invoiceAndCheckBillSendEmailVO.getCheckBillOrderDO();
-            //得到跟单员和业务员。
-            List<AdminUserDO> adminUserDOList = adminUserService.list(new LambdaQueryWrapper<AdminUserDO>()
+            Set<Long> userIds = null;
+            //得到跟单员和业务员和财务。
+            if(isTrue){
+                List<AdminUserRoleDO> list = adminUserRoleService.list(new LambdaQueryWrapper<AdminUserRoleDO>()
+                        .eq(AdminUserRoleDO::getRoleId, Constant.SEVEN));
+                 userIds= list.stream().map(AdminUserRoleDO::getUserId).collect(Collectors.toSet());
+            }
+            LambdaQueryWrapper<AdminUserDO> queryWrapper = new LambdaQueryWrapper<AdminUserDO>()
                     .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN)
-                    .in(AdminUserDO::getUserName, Arrays.asList(checkBillOrderDO.getTrackerUser(), checkBillOrderDO.getBusinesPerson())));
-            email = adminUserDOList.stream().filter(Objects::nonNull).map(AdminUserDO::getEmail).flatMap(emails -> Arrays.asList(emails.split("[,,]+"))
+                    .and(wrapper -> wrapper
+                            .in(AdminUserDO::getUserName, Arrays.asList(checkBillOrderDO.getTrackerUser(), checkBillOrderDO.getBusinesPerson())));
+            if(CollectionUtils.isNotEmpty(userIds)){
+                queryWrapper.or().in(AdminUserDO::getId,userIds);
+            }
+            List<AdminUserDO> adminUserDOList = adminUserService.list(queryWrapper);
+            email = adminUserDOList.stream().map(AdminUserDO::getEmail).filter(Objects::nonNull).flatMap(emails -> Arrays.asList(emails.split("[,,]+"))
                     .stream()).map(String::trim).filter(s -> !s.isEmpty()).toArray(String[]::new);
             invoiceNoOrCheckNo=checkBillOrderDO.getCheckNo();
         }
diff --git a/src/main/java/com/order/erp/controller/InvoiceBillOrderController.java b/src/main/java/com/order/erp/controller/InvoiceBillOrderController.java
index 944615e..81f9177 100644
--- a/src/main/java/com/order/erp/controller/InvoiceBillOrderController.java
+++ b/src/main/java/com/order/erp/controller/InvoiceBillOrderController.java
@@ -204,5 +204,15 @@ public class InvoiceBillOrderController {
     public ServerResult deleteDeductUrlById(@RequestBody InvoiceBillDeductInfoVO deleteVo) {
         return invoiceBillOrderService.deleteDeductUrlById(deleteVo);
     }
+
+    /**
+     *最后一步,确认是否已经完成最终收款,即使审核通过之后,invoice的状态为已收款,这里的作用是在已收款状态的基础上,最后手动确认是否完成收款。人工校验。
+     * @param invoiceBillDeductInfoVO id
+     * @return
+     */
+    @PostMapping("/setFinishStatus")
+    public ServerResult isFinishStatus(@RequestBody InvoiceBillDeductInfoVO invoiceBillDeductInfoVO) {
+        return invoiceBillOrderService.isFinishStatus(invoiceBillDeductInfoVO);
+    }
 }
 
diff --git a/src/main/java/com/order/erp/controller/ProducePaymentCheckBillOrderController.java b/src/main/java/com/order/erp/controller/ProducePaymentCheckBillOrderController.java
index d258cf5..efdcb06 100644
--- a/src/main/java/com/order/erp/controller/ProducePaymentCheckBillOrderController.java
+++ b/src/main/java/com/order/erp/controller/ProducePaymentCheckBillOrderController.java
@@ -216,6 +216,16 @@ public class ProducePaymentCheckBillOrderController {
     public ServerResult deleteDeductUrlById( @RequestBody ProducePaymentCheckBillDeductInfoVO deleteVo){
        return producePaymentCheckBillOrderService.deleteDeductUrlById(deleteVo);
     }
+
+    /**
+     *最后一步,确认是否已经完成最终收款,即使审核通过之后,invoice的状态为已收款,这里的作用是在已收款状态的基础上,最后手动确认是否完成收款。人工校验。
+     * @param producePaymentCheckBillInvoiceInfoVO id
+     * @return
+     */
+    @PostMapping("/setFinishStatus")
+    public ServerResult isFinishStatus(@RequestBody ProducePaymentCheckBillInvoiceInfoVO producePaymentCheckBillInvoiceInfoVO) {
+        return producePaymentCheckBillOrderService.isFinishStatus(producePaymentCheckBillInvoiceInfoVO);
+    }
 }
 
 
diff --git a/src/main/java/com/order/erp/domain/dto/order/InvoiceBillOrderDO.java b/src/main/java/com/order/erp/domain/dto/order/InvoiceBillOrderDO.java
index 2543472..165a16c 100644
--- a/src/main/java/com/order/erp/domain/dto/order/InvoiceBillOrderDO.java
+++ b/src/main/java/com/order/erp/domain/dto/order/InvoiceBillOrderDO.java
@@ -108,4 +108,9 @@ public class InvoiceBillOrderDO extends BaseDO implements Serializable {
      * 备注信息
      * */
     private String notes;
+
+    /**
+     * 最终完成状态,需要手动确认   状态 0:未完成,10:已完成
+     * */
+    private Integer finishStatus;
 }
diff --git a/src/main/java/com/order/erp/domain/dto/order/ProducePaymentCheckBillOrderDO.java b/src/main/java/com/order/erp/domain/dto/order/ProducePaymentCheckBillOrderDO.java
index b31931f..8819379 100644
--- a/src/main/java/com/order/erp/domain/dto/order/ProducePaymentCheckBillOrderDO.java
+++ b/src/main/java/com/order/erp/domain/dto/order/ProducePaymentCheckBillOrderDO.java
@@ -117,5 +117,10 @@ public class ProducePaymentCheckBillOrderDO extends BaseDO implements Serializab
      * 备注。
      * */
     private String notes;
+    /**
+     * 最终完成状态,需要手动确认   状态 0:未完成,10:已完成
+     * */
+    private Integer finishStatus;
+
 
 }
diff --git a/src/main/java/com/order/erp/domain/vo/order/FinanceOrderResultVO.java b/src/main/java/com/order/erp/domain/vo/order/FinanceOrderResultVO.java
index 39e5d63..555bb1a 100644
--- a/src/main/java/com/order/erp/domain/vo/order/FinanceOrderResultVO.java
+++ b/src/main/java/com/order/erp/domain/vo/order/FinanceOrderResultVO.java
@@ -114,6 +114,10 @@ public class FinanceOrderResultVO extends OrderBaseInfoVO {
      * 备注信息
      * */
     private String invoiceNotes;
+    /**
+     * 最终确认,0:未完成 10:已完成
+     * */
+    private Integer invoiceFinishStatus;
 
     //应付款信息
 //    private ProducePaymentCheckBillOrderDO producePaymentCheckBillOrderDO;
@@ -166,7 +170,7 @@ public class FinanceOrderResultVO extends OrderBaseInfoVO {
      */
     private BigDecimal checkActualPayedAmount3;
     /**
-     * 总经理审核状态 0:待审核、1:审核通过,2:审核驳回
+     * 总经理审核状态 -1:未创建、0:未收款,10:已付款
      */
     private Integer checkPayStatus;
     //需要在表中添加三个字段。
@@ -178,6 +182,10 @@ public class FinanceOrderResultVO extends OrderBaseInfoVO {
      * 备注。
      * */
     private String checkNotes;
+    /**
+     * 最终确认状态。0:未完成  10:已完成
+     * */
+    private Integer checkFinishStatus;
 
 
     //利润信息
diff --git a/src/main/java/com/order/erp/domain/vo/order/InvoiceBillOrderQueryVO.java b/src/main/java/com/order/erp/domain/vo/order/InvoiceBillOrderQueryVO.java
index 9dec3f0..2af2f8a 100644
--- a/src/main/java/com/order/erp/domain/vo/order/InvoiceBillOrderQueryVO.java
+++ b/src/main/java/com/order/erp/domain/vo/order/InvoiceBillOrderQueryVO.java
@@ -120,5 +120,15 @@ public class InvoiceBillOrderQueryVO extends BasePageVO implements Serializable 
      * 业务员 用来判断业务员只能看到业务员的数据
      */
     private String businessUserName;
+
+    /**
+     * 最终确认状态 0:未完成,10:已完成
+     */
+    private Integer invoiceFinishStatus;
+    /**
+     * 最终确认状态 0:未完成,10:已完成
+     */
+    private Integer checkFinishStatus;
+
 }
 
diff --git a/src/main/java/com/order/erp/service/order/InvoiceBillOrderService.java b/src/main/java/com/order/erp/service/order/InvoiceBillOrderService.java
index 46a0964..b8d076a 100644
--- a/src/main/java/com/order/erp/service/order/InvoiceBillOrderService.java
+++ b/src/main/java/com/order/erp/service/order/InvoiceBillOrderService.java
@@ -120,5 +120,6 @@ public interface InvoiceBillOrderService extends IService<InvoiceBillOrderDO> {
     ServerResult byIdAddNotes(InvoiceBillCreateVO createVO);
 
     ServerResult deleteDeductUrlById(InvoiceBillDeductInfoVO deleteVo);
+    ServerResult isFinishStatus(InvoiceBillDeductInfoVO invoiceBillDeductInfoVO);
 
 }
diff --git a/src/main/java/com/order/erp/service/order/ProducePaymentCheckBillOrderService.java b/src/main/java/com/order/erp/service/order/ProducePaymentCheckBillOrderService.java
index f443b1d..dc4ead6 100644
--- a/src/main/java/com/order/erp/service/order/ProducePaymentCheckBillOrderService.java
+++ b/src/main/java/com/order/erp/service/order/ProducePaymentCheckBillOrderService.java
@@ -111,4 +111,5 @@ public interface ProducePaymentCheckBillOrderService extends IService<ProducePay
     ServerResult setPayedDate(ProducePaymentCheckBillCreateVO createVO);
     ServerResult byIdAddNotes(ProducePaymentCheckBillCreateVO createVO);
     ServerResult deleteDeductUrlById(ProducePaymentCheckBillDeductInfoVO deleteVo);
+    ServerResult isFinishStatus(ProducePaymentCheckBillInvoiceInfoVO producePaymentCheckBillInvoiceInfoVO);
 }
diff --git a/src/main/java/com/order/erp/service/order/impl/InvoiceBillOrderServiceImpl.java b/src/main/java/com/order/erp/service/order/impl/InvoiceBillOrderServiceImpl.java
index ed8c808..52e7111 100644
--- a/src/main/java/com/order/erp/service/order/impl/InvoiceBillOrderServiceImpl.java
+++ b/src/main/java/com/order/erp/service/order/impl/InvoiceBillOrderServiceImpl.java
@@ -980,6 +980,7 @@ public class InvoiceBillOrderServiceImpl extends ServiceImpl<InvoiceBillOrderMap
                     .bgUrl(createVO.getBgUrl())
                     .backRefundDate(createVO.getBackRefundDate())
                     .status(FinanceEnum.UNPAID_PAYMENTS.getStatus())
+                    .finishStatus(FinanceEnum.UNPAID_PAYMENTS.getStatus())
                     .businesPerson(x.getBusinessPerson())
                     .trackerUser(x.getCreateBy())
                     .build();
@@ -1207,7 +1208,7 @@ public class InvoiceBillOrderServiceImpl extends ServiceImpl<InvoiceBillOrderMap
             //发送邮箱通知财务。    这里这个邮箱通知财务,只能提示invoice号,因为一个invoice申请对应多个invoice号,所以会有多个内部编号和项目号等。
             InvoiceAndCheckBillSendEmailVO invoiceAndCheckBillSendEmailVO = new InvoiceAndCheckBillSendEmailVO();
             invoiceAndCheckBillSendEmailVO.setInvoiceBillOrderDO(invoiceBillOrderDO.get(0));
-            emailSendUtils.sendInvoiceAndCheckEmail(FinanceOverEnum.INVOICE_PASS,invoiceAndCheckBillSendEmailVO);
+            emailSendUtils.sendInvoiceAndCheckEmail(FinanceOverEnum.INVOICE_PASS,invoiceAndCheckBillSendEmailVO,true);
         }else{
             applyDO = initOrderFieldLockApplyDO(invoiceFieldVO, userId,false);
         }
@@ -1542,6 +1543,27 @@ public class InvoiceBillOrderServiceImpl extends ServiceImpl<InvoiceBillOrderMap
         return ServerResult.success();
     }
 
+    @Override
+    public ServerResult isFinishStatus(InvoiceBillDeductInfoVO invoiceBillDeductInfoVO) {
+        InvoiceBillOrderDO invoiceBillOrderDO = getById(invoiceBillDeductInfoVO.getId());
+        if(Objects.nonNull(invoiceBillOrderDO)){
+            if(!FinanceEnum.RECEIVED_PAYMENT.getStatus().equals(invoiceBillOrderDO.getStatus())){
+                throw new BusinessException("该订单还没有完成最终收款,你无法设置最终状态为已完成!");
+            }
+            List<InvoiceBillOrderDO> invoiceBillOrderDOList = list(new LambdaQueryWrapper<InvoiceBillOrderDO>().eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN)
+                    .eq(InvoiceBillOrderDO::getInvoiceNo, invoiceBillOrderDO.getInvoiceNo())
+                    .eq(InvoiceBillOrderDO::getStatus, FinanceEnum.RECEIVED_PAYMENT.getStatus()));
+            if(CollectionUtils.isNotEmpty(invoiceBillOrderDOList)){
+                List<InvoiceBillOrderDO> finishSatusList = invoiceBillOrderDOList.stream().map(x -> {
+                    x.setFinishStatus(FinanceEnum.RECEIVED_PAYMENT.getStatus());
+                    return x;
+                }).collect(Collectors.toList());
+                updateBatchById(finishSatusList);
+            }
+        }
+        return ServerResult.success();
+    }
+
 
     public void createMergedCell(Sheet sheet, Workbook workbook, int rowIndex, int colIndex, int startRow, int endRow, int startCol, int endCol, String value) {
         // 创建或获取当前行
diff --git a/src/main/java/com/order/erp/service/order/impl/OrderFieldLockApplyServiceImpl.java b/src/main/java/com/order/erp/service/order/impl/OrderFieldLockApplyServiceImpl.java
index a2bb395..fa7a503 100644
--- a/src/main/java/com/order/erp/service/order/impl/OrderFieldLockApplyServiceImpl.java
+++ b/src/main/java/com/order/erp/service/order/impl/OrderFieldLockApplyServiceImpl.java
@@ -570,7 +570,7 @@ public class OrderFieldLockApplyServiceImpl extends ServiceImpl<OrderFieldLockAp
                 InvoiceAndCheckBillSendEmailVO invoiceAndCheckBillSendEmailVO = new InvoiceAndCheckBillSendEmailVO();
                 invoiceAndCheckBillSendEmailVO.setInvoiceBillOrderDO(invoiceBillOrderDOS.get(0));
                 invoiceAndCheckBillSendEmailVO.setRefuseRemark(refuseRemark);
-                emailSendUtils.sendInvoiceAndCheckEmail(FinanceOverEnum.INVOICE_FAIL,invoiceAndCheckBillSendEmailVO);
+                emailSendUtils.sendInvoiceAndCheckEmail(FinanceOverEnum.INVOICE_FAIL,invoiceAndCheckBillSendEmailVO,true);
             }
         } else if (ApplyTypeEnum.CHECK_BILL_APPLY.getType().equals(applyDO.getType())) {
             OrderLockFieldVO lockFieldVO = JSONObject.parseObject(applyDO.getFields(), OrderLockFieldVO.class);
@@ -610,7 +610,7 @@ public class OrderFieldLockApplyServiceImpl extends ServiceImpl<OrderFieldLockAp
                 InvoiceAndCheckBillSendEmailVO invoiceAndCheckBillSendEmailVO = new InvoiceAndCheckBillSendEmailVO();
                 invoiceAndCheckBillSendEmailVO.setCheckBillOrderDO(producePaymentCheckBillOrderDOS.get(0));
                 invoiceAndCheckBillSendEmailVO.setRefuseRemark(refuseRemark);
-                emailSendUtils.sendInvoiceAndCheckEmail(FinanceOverEnum.CHECK_FAIL,invoiceAndCheckBillSendEmailVO);
+                emailSendUtils.sendInvoiceAndCheckEmail(FinanceOverEnum.CHECK_FAIL,invoiceAndCheckBillSendEmailVO,false);
             }
 
         } else if(ApplyTypeEnum.DEPARTMENT_INVOICE_APPLY.getType().equals(applyDO.getType())){
@@ -641,7 +641,7 @@ public class OrderFieldLockApplyServiceImpl extends ServiceImpl<OrderFieldLockAp
             InvoiceAndCheckBillSendEmailVO invoiceAndCheckBillSendEmailVO = new InvoiceAndCheckBillSendEmailVO();
             invoiceAndCheckBillSendEmailVO.setCheckBillOrderDO(invoiceInfoDO);
             invoiceAndCheckBillSendEmailVO.setRefuseRemark(refuseRemark);
-            emailSendUtils.sendInvoiceAndCheckEmail(FinanceOverEnum.CHECK_INVOICEURL_FAIL,invoiceAndCheckBillSendEmailVO);
+            emailSendUtils.sendInvoiceAndCheckEmail(FinanceOverEnum.CHECK_INVOICEURL_FAIL,invoiceAndCheckBillSendEmailVO,false);
         }
 
         OrderAuditLogDO auditLogDO = OrderAuditLogDO.builder().applyId(applyDO.getId()).orderId(applyDO.getOrderId()).optType(ApplyStatusEnum.AUDIT_REFUSE.getDesc()).build();
@@ -793,7 +793,7 @@ public class OrderFieldLockApplyServiceImpl extends ServiceImpl<OrderFieldLockAp
                 //发送邮箱通知财务。    这里这个邮箱通知财务,只能提示invoice号,因为一个invoice申请对应多个invoice号,所以会有多个内部编号和项目号等。
                 InvoiceAndCheckBillSendEmailVO invoiceAndCheckBillSendEmailVO = new InvoiceAndCheckBillSendEmailVO();
                 invoiceAndCheckBillSendEmailVO.setInvoiceBillOrderDO(invoiceeBillOrderDOs.get(0));
-                emailSendUtils.sendInvoiceAndCheckEmail(FinanceOverEnum.INVOICE_PASS,invoiceAndCheckBillSendEmailVO);
+                emailSendUtils.sendInvoiceAndCheckEmail(FinanceOverEnum.INVOICE_PASS,invoiceAndCheckBillSendEmailVO,true);
             }
         } else if (ApplyTypeEnum.CHECK_BILL_APPLY.getType().equals(applyDO.getType())) {
             applyDO.setAuditUserId(auditUserId);
@@ -834,7 +834,7 @@ public class OrderFieldLockApplyServiceImpl extends ServiceImpl<OrderFieldLockAp
                 //发送邮箱通知财务。    这里这个邮箱通知财务,只能提示invoice号,因为一个invoice申请对应多个invoice号,所以会有多个内部编号和项目号等。
                 InvoiceAndCheckBillSendEmailVO invoiceAndCheckBillSendEmailVO = new InvoiceAndCheckBillSendEmailVO();
                 invoiceAndCheckBillSendEmailVO.setCheckBillOrderDO(producePaymentCheckBillOrderDOS.get(0));
-                emailSendUtils.sendInvoiceAndCheckEmail(FinanceOverEnum.CHECK_PASS,invoiceAndCheckBillSendEmailVO);
+                emailSendUtils.sendInvoiceAndCheckEmail(FinanceOverEnum.CHECK_PASS,invoiceAndCheckBillSendEmailVO,true);
 
             }
         }  else if (ApplyTypeEnum.DEPARTMENT_INVOICE_APPLY.getType().equals(applyDO.getType())) {
@@ -865,7 +865,7 @@ public class OrderFieldLockApplyServiceImpl extends ServiceImpl<OrderFieldLockAp
             //发送邮件通知跟单员和业务员。
             InvoiceAndCheckBillSendEmailVO invoiceAndCheckBillSendEmailVO = new InvoiceAndCheckBillSendEmailVO();
             invoiceAndCheckBillSendEmailVO.setCheckBillOrderDO(invoiceInfoDO);
-            emailSendUtils.sendInvoiceAndCheckEmail(FinanceOverEnum.CHECK_INVOICEURL_PASS,invoiceAndCheckBillSendEmailVO);
+            emailSendUtils.sendInvoiceAndCheckEmail(FinanceOverEnum.CHECK_INVOICEURL_PASS,invoiceAndCheckBillSendEmailVO,true);
         }
 
         OrderAuditLogDO auditLogDO = OrderAuditLogDO.builder().applyId(applyDO.getId()).orderId(applyDO.getOrderId()).optType(ApplyStatusEnum.AUDIT_PASS.getDesc()).build();
diff --git a/src/main/java/com/order/erp/service/order/impl/ProducePaymentCheckBillOrderServiceImpl.java b/src/main/java/com/order/erp/service/order/impl/ProducePaymentCheckBillOrderServiceImpl.java
index c727f9b..cc6f91d 100644
--- a/src/main/java/com/order/erp/service/order/impl/ProducePaymentCheckBillOrderServiceImpl.java
+++ b/src/main/java/com/order/erp/service/order/impl/ProducePaymentCheckBillOrderServiceImpl.java
@@ -818,6 +818,7 @@ public class ProducePaymentCheckBillOrderServiceImpl extends ServiceImpl<Produce
                     .orderId(x.getId())
                     .payedDate(createVO.getPayedDate())
                     .status(FinanceEnum.UNPAID_PAYMENTS.getStatus())
+                    .finishStatus(FinanceEnum.UNPAID_PAYMENTS.getStatus())
                     .productionName(x.getProductionDepartment())
                     .businesPerson(x.getBusinessPerson())
                     .trackerUser(x.getCreateBy())
@@ -1094,7 +1095,7 @@ public class ProducePaymentCheckBillOrderServiceImpl extends ServiceImpl<Produce
             //发送邮箱通知财务。    这里这个邮箱通知财务,只能提示invoice号,因为一个invoice申请对应多个invoice号,所以会有多个内部编号和项目号等。
             InvoiceAndCheckBillSendEmailVO invoiceAndCheckBillSendEmailVO = new InvoiceAndCheckBillSendEmailVO();
             invoiceAndCheckBillSendEmailVO.setCheckBillOrderDO(producePaymentCheckBillOrderDOS.get(0));
-            emailSendUtils.sendInvoiceAndCheckEmail(FinanceOverEnum.CHECK_PASS,invoiceAndCheckBillSendEmailVO);
+            emailSendUtils.sendInvoiceAndCheckEmail(FinanceOverEnum.CHECK_PASS,invoiceAndCheckBillSendEmailVO,true);
         }else{
             applyDO = initOrderFieldLockApplyDO(producePaymentCheckBillFieldVO, userId,false);
         }
@@ -1371,6 +1372,27 @@ public class ProducePaymentCheckBillOrderServiceImpl extends ServiceImpl<Produce
     }
 
     @Override
+    public ServerResult isFinishStatus(ProducePaymentCheckBillInvoiceInfoVO producePaymentCheckBillInvoiceInfoVO) {
+        ProducePaymentCheckBillOrderDO producePaymentCheckBillOrderDO = getById(producePaymentCheckBillInvoiceInfoVO.getId());
+        if(Objects.nonNull(producePaymentCheckBillOrderDO)){
+            if(!FinanceEnum.RECEIVED_PAYMENT.getStatus().equals(producePaymentCheckBillOrderDO.getStatus())){
+                throw new BusinessException("该订单还没有完成最终付款,无法设置最终状态为已完成!");
+            }
+            List<ProducePaymentCheckBillOrderDO> producePaymentCheckBillOrderDOList = list(new LambdaQueryWrapper<ProducePaymentCheckBillOrderDO>().eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN)
+                    .eq(ProducePaymentCheckBillOrderDO::getStatus, FinanceEnum.RECEIVED_PAYMENT.getStatus())
+                    .eq(ProducePaymentCheckBillOrderDO::getCheckNo, producePaymentCheckBillOrderDO.getCheckNo()));
+            if(CollectionUtils.isNotEmpty(producePaymentCheckBillOrderDOList)){
+                List<ProducePaymentCheckBillOrderDO> producePaymentCheckBillOrderDOS = producePaymentCheckBillOrderDOList.stream().map(x -> {
+                    x.setFinishStatus(FinanceEnum.RECEIVED_PAYMENT.getStatus());
+                    return x;
+                }).collect(Collectors.toList());
+                updateBatchById(producePaymentCheckBillOrderDOS);
+            }
+        }
+        return ServerResult.success();
+    }
+
+    @Override
     public ServerResult exportReceipt(HttpServletResponse response,CheckBillExportReceiptVO queryVO) throws IOException {
         XSSFWorkbook workbook = new XSSFWorkbook();
         Sheet sheet = workbook.createSheet("付款单");
diff --git a/src/main/resources/mapper/InvoiceBillOrderMapper.xml b/src/main/resources/mapper/InvoiceBillOrderMapper.xml
index 5c622f2..2e5e103 100644
--- a/src/main/resources/mapper/InvoiceBillOrderMapper.xml
+++ b/src/main/resources/mapper/InvoiceBillOrderMapper.xml
@@ -98,6 +98,7 @@
         i.status AS invoiceStatus,  -- invoice状态
         i.deduct_amount AS invoiceDeductAmount, -- 扣款金额
         i.notes AS invoiceNotes,   -- invoice备注
+        i.finish_status AS invoiceFinishStatus,
         -- 生产科付款信息
         p.id AS checkId,
         p.check_no AS checkNo,  -- checkNo编号
@@ -113,7 +114,8 @@
         p.payed_date AS checkPayedDate,    -- 必须付款日期
         p.deduct_url AS checkDeductUrl,    -- 扣款单
         p.notes AS checkNotes,             -- checkNo备注
-        p.invoice_url AS checkInvoiceUrl   -- 发票
+        p.invoice_url AS checkInvoiceUrl,   -- 发票
+        p.finish_status AS checkFinishStatus
         FROM order_base_info o
         LEFT JOIN invoice_bill_order AS i
         ON o.id = i.order_id AND i.enable_flag = 10
@@ -134,6 +136,12 @@
         <if test="queryVO.checkNoStatus != null">
             AND o.check_status = #{queryVO.checkNoStatus}
         </if>
+        <if test="queryVO.invoiceFinishStatus != null">
+            AND i.finish_status = #{queryVO.invoiceFinishStatus}
+        </if>
+        <if test="queryVO.checkFinishStatus != null">
+            AND p.finish_status = #{queryVO.checkFinishStatus}
+        </if>
         <if test="queryVO.customerCode != null and queryVO.customerCode.size > 0 ">
             AND o.customer_code IN
             <foreach collection="queryVO.customerCode" item="customerCode" open="(" separator="," close=")">
@@ -227,6 +235,12 @@
         <if test="queryVO.checkNoStatus != null">
             AND o.check_status = #{queryVO.checkNoStatus}
         </if>
+        <if test="queryVO.invoiceFinishStatus != null">
+            AND i.finish_status = #{queryVO.invoiceFinishStatus}
+        </if>
+        <if test="queryVO.checkFinishStatus != null">
+            AND p.finish_status = #{queryVO.checkFinishStatus}
+        </if>
         <if test="queryVO.customerCode != null and queryVO.customerCode.size > 0 ">
             AND o.customer_code IN
             <foreach collection="queryVO.customerCode" item="customerCode" open="(" separator="," close=")">
--
libgit2 0.23.3