Commit fd3c0b52daff100988817de4054ab2bd8e592e40

Authored by chenhang4442024
1 parent 9cbf19cf

feat:1.新增最终状态设置。

fix:1.修复自动发送邮件时,添加财务人员。
src/main/java/com/order/erp/common/utils/EmailSendUtils.java
... ... @@ -9,11 +9,13 @@ import com.order.erp.domain.EmailTemplateEnum;
9 9 import com.order.erp.domain.FinanceOverEnum;
10 10 import com.order.erp.domain.dto.BaseDO;
11 11 import com.order.erp.domain.dto.admin.AdminUserDO;
  12 +import com.order.erp.domain.dto.admin.AdminUserRoleDO;
12 13 import com.order.erp.domain.dto.order.InvoiceBillOrderDO;
13 14 import com.order.erp.domain.dto.order.ProducePaymentCheckBillOrderDO;
14 15 import com.order.erp.domain.vo.order.FinanceEventJobVO;
15 16 import com.order.erp.domain.vo.order.InvoiceAndCheckBillSendEmailVO;
16 17 import com.order.erp.domain.vo.order.OrderEventJobVO;
  18 +import com.order.erp.service.admin.AdminUserRoleService;
17 19 import com.order.erp.service.admin.AdminUserService;
18 20 import freemarker.template.Template;
19 21 import freemarker.template.TemplateException;
... ... @@ -30,6 +32,7 @@ import java.io.File;
30 32 import java.io.IOException;
31 33 import java.io.StringWriter;
32 34 import java.util.*;
  35 +import java.util.stream.Collectors;
33 36  
34 37 /**
35 38 * @Author:ch
... ... @@ -45,6 +48,8 @@ public class EmailSendUtils {
45 48 private FreeMarkerConfigurer freeMarkerConfigurer;
46 49 @Resource
47 50 private AdminUserService adminUserService;
  51 + @Resource
  52 + private AdminUserRoleService adminUserRoleService;
48 53  
49 54 /**
50 55 * @Description: 发送邮件 发送尾期验货报告,中期验货报告,邮件提醒事件。
... ... @@ -283,7 +288,7 @@ public class EmailSendUtils {
283 288 * @throws IOException
284 289 */
285 290 @Async
286   - public void sendInvoiceAndCheckEmail(FinanceOverEnum emailTemplateEnum, InvoiceAndCheckBillSendEmailVO invoiceAndCheckBillSendEmailVO) {
  291 + public void sendInvoiceAndCheckEmail(FinanceOverEnum emailTemplateEnum, InvoiceAndCheckBillSendEmailVO invoiceAndCheckBillSendEmailVO,boolean isTrue) {
287 292 if(emailTemplateEnum ==null && ObjectUtils.isNull(invoiceAndCheckBillSendEmailVO)){
288 293 throw new BusinessException(ServerResultCode.PARAM_ERROR);
289 294 }
... ... @@ -293,26 +298,38 @@ public class EmailSendUtils {
293 298 String invoiceNoOrCheckNo;
294 299 if(invoiceAndCheckBillSendEmailVO.getInvoiceBillOrderDO()!=null){
295 300 InvoiceBillOrderDO invoiceBillOrderDO=invoiceAndCheckBillSendEmailVO.getInvoiceBillOrderDO();
296   - //得到提交人
297   - AdminUserDO adminUserDO = adminUserService.getOne(new LambdaQueryWrapper<AdminUserDO>()
  301 + //得到财务提交人以及业务员和跟单员。
  302 + List<AdminUserDO> adminUserDOList = adminUserService.list(new LambdaQueryWrapper<AdminUserDO>()
298 303 .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN)
299   - .eq(AdminUserDO::getUserName, invoiceBillOrderDO.getFinancePerson())
300   - .last("limit 1"));
301   -
302   - if(Objects.nonNull(adminUserDO)){
303   - String emails=adminUserDO.getEmail();
304   - if(StringUtils.isNotBlank(emails)){
305   - email = emails.split("[,,]+");
306   - }
  304 + .in(AdminUserDO::getUserName, Arrays.asList(invoiceBillOrderDO.getTrackerUser(),invoiceBillOrderDO.getBusinesPerson(),invoiceBillOrderDO.getFinancePerson())));
  305 + if(CollectionUtils.isNotEmpty(adminUserDOList)){
  306 + email = adminUserDOList.stream()
  307 + .map(AdminUserDO::getEmail) // 提取 email
  308 + .filter(Objects::nonNull) // 过滤掉 null 的 email
  309 + .flatMap(emails -> Arrays.stream(emails.split("[,,]+"))) // 按逗号或中文逗号分割 email
  310 + .map(String::trim) // 去除空格
  311 + .filter(s -> !s.isEmpty()) // 过滤掉空字符串
  312 + .toArray(String[]::new); // 转换为 String[] 数组
307 313 }
308 314 invoiceNoOrCheckNo = invoiceBillOrderDO.getInvoiceNo();
309 315 }else{
310 316 ProducePaymentCheckBillOrderDO checkBillOrderDO = invoiceAndCheckBillSendEmailVO.getCheckBillOrderDO();
311   - //得到跟单员和业务员。
312   - List<AdminUserDO> adminUserDOList = adminUserService.list(new LambdaQueryWrapper<AdminUserDO>()
  317 + Set<Long> userIds = null;
  318 + //得到跟单员和业务员和财务。
  319 + if(isTrue){
  320 + List<AdminUserRoleDO> list = adminUserRoleService.list(new LambdaQueryWrapper<AdminUserRoleDO>()
  321 + .eq(AdminUserRoleDO::getRoleId, Constant.SEVEN));
  322 + userIds= list.stream().map(AdminUserRoleDO::getUserId).collect(Collectors.toSet());
  323 + }
  324 + LambdaQueryWrapper<AdminUserDO> queryWrapper = new LambdaQueryWrapper<AdminUserDO>()
313 325 .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN)
314   - .in(AdminUserDO::getUserName, Arrays.asList(checkBillOrderDO.getTrackerUser(), checkBillOrderDO.getBusinesPerson())));
315   - email = adminUserDOList.stream().filter(Objects::nonNull).map(AdminUserDO::getEmail).flatMap(emails -> Arrays.asList(emails.split("[,,]+"))
  326 + .and(wrapper -> wrapper
  327 + .in(AdminUserDO::getUserName, Arrays.asList(checkBillOrderDO.getTrackerUser(), checkBillOrderDO.getBusinesPerson())));
  328 + if(CollectionUtils.isNotEmpty(userIds)){
  329 + queryWrapper.or().in(AdminUserDO::getId,userIds);
  330 + }
  331 + List<AdminUserDO> adminUserDOList = adminUserService.list(queryWrapper);
  332 + email = adminUserDOList.stream().map(AdminUserDO::getEmail).filter(Objects::nonNull).flatMap(emails -> Arrays.asList(emails.split("[,,]+"))
316 333 .stream()).map(String::trim).filter(s -> !s.isEmpty()).toArray(String[]::new);
317 334 invoiceNoOrCheckNo=checkBillOrderDO.getCheckNo();
318 335 }
... ...
src/main/java/com/order/erp/controller/InvoiceBillOrderController.java
... ... @@ -204,5 +204,15 @@ public class InvoiceBillOrderController {
204 204 public ServerResult deleteDeductUrlById(@RequestBody InvoiceBillDeductInfoVO deleteVo) {
205 205 return invoiceBillOrderService.deleteDeductUrlById(deleteVo);
206 206 }
  207 +
  208 + /**
  209 + *最后一步,确认是否已经完成最终收款,即使审核通过之后,invoice的状态为已收款,这里的作用是在已收款状态的基础上,最后手动确认是否完成收款。人工校验。
  210 + * @param invoiceBillDeductInfoVO id
  211 + * @return
  212 + */
  213 + @PostMapping("/setFinishStatus")
  214 + public ServerResult isFinishStatus(@RequestBody InvoiceBillDeductInfoVO invoiceBillDeductInfoVO) {
  215 + return invoiceBillOrderService.isFinishStatus(invoiceBillDeductInfoVO);
  216 + }
207 217 }
208 218  
... ...
src/main/java/com/order/erp/controller/ProducePaymentCheckBillOrderController.java
... ... @@ -216,6 +216,16 @@ public class ProducePaymentCheckBillOrderController {
216 216 public ServerResult deleteDeductUrlById( @RequestBody ProducePaymentCheckBillDeductInfoVO deleteVo){
217 217 return producePaymentCheckBillOrderService.deleteDeductUrlById(deleteVo);
218 218 }
  219 +
  220 + /**
  221 + *最后一步,确认是否已经完成最终收款,即使审核通过之后,invoice的状态为已收款,这里的作用是在已收款状态的基础上,最后手动确认是否完成收款。人工校验。
  222 + * @param producePaymentCheckBillInvoiceInfoVO id
  223 + * @return
  224 + */
  225 + @PostMapping("/setFinishStatus")
  226 + public ServerResult isFinishStatus(@RequestBody ProducePaymentCheckBillInvoiceInfoVO producePaymentCheckBillInvoiceInfoVO) {
  227 + return producePaymentCheckBillOrderService.isFinishStatus(producePaymentCheckBillInvoiceInfoVO);
  228 + }
219 229 }
220 230  
221 231  
... ...
src/main/java/com/order/erp/domain/dto/order/InvoiceBillOrderDO.java
... ... @@ -108,4 +108,9 @@ public class InvoiceBillOrderDO extends BaseDO implements Serializable {
108 108 * 备注信息
109 109 * */
110 110 private String notes;
  111 +
  112 + /**
  113 + * 最终完成状态,需要手动确认 状态 0:未完成,10:已完成
  114 + * */
  115 + private Integer finishStatus;
111 116 }
... ...
src/main/java/com/order/erp/domain/dto/order/ProducePaymentCheckBillOrderDO.java
... ... @@ -117,5 +117,10 @@ public class ProducePaymentCheckBillOrderDO extends BaseDO implements Serializab
117 117 * 备注。
118 118 * */
119 119 private String notes;
  120 + /**
  121 + * 最终完成状态,需要手动确认 状态 0:未完成,10:已完成
  122 + * */
  123 + private Integer finishStatus;
  124 +
120 125  
121 126 }
... ...
src/main/java/com/order/erp/domain/vo/order/FinanceOrderResultVO.java
... ... @@ -114,6 +114,10 @@ public class FinanceOrderResultVO extends OrderBaseInfoVO {
114 114 * 备注信息
115 115 * */
116 116 private String invoiceNotes;
  117 + /**
  118 + * 最终确认,0:未完成 10:已完成
  119 + * */
  120 + private Integer invoiceFinishStatus;
117 121  
118 122 //应付款信息
119 123 // private ProducePaymentCheckBillOrderDO producePaymentCheckBillOrderDO;
... ... @@ -166,7 +170,7 @@ public class FinanceOrderResultVO extends OrderBaseInfoVO {
166 170 */
167 171 private BigDecimal checkActualPayedAmount3;
168 172 /**
169   - * 总经理审核状态 0:待审核、1:审核通过,2:审核驳回
  173 + * 总经理审核状态 -1:未创建、0:未收款,10:已付款
170 174 */
171 175 private Integer checkPayStatus;
172 176 //需要在表中添加三个字段。
... ... @@ -178,6 +182,10 @@ public class FinanceOrderResultVO extends OrderBaseInfoVO {
178 182 * 备注。
179 183 * */
180 184 private String checkNotes;
  185 + /**
  186 + * 最终确认状态。0:未完成 10:已完成
  187 + * */
  188 + private Integer checkFinishStatus;
181 189  
182 190  
183 191 //利润信息
... ...
src/main/java/com/order/erp/domain/vo/order/InvoiceBillOrderQueryVO.java
... ... @@ -120,5 +120,15 @@ public class InvoiceBillOrderQueryVO extends BasePageVO implements Serializable
120 120 * 业务员 用来判断业务员只能看到业务员的数据
121 121 */
122 122 private String businessUserName;
  123 +
  124 + /**
  125 + * 最终确认状态 0:未完成,10:已完成
  126 + */
  127 + private Integer invoiceFinishStatus;
  128 + /**
  129 + * 最终确认状态 0:未完成,10:已完成
  130 + */
  131 + private Integer checkFinishStatus;
  132 +
123 133 }
124 134  
... ...
src/main/java/com/order/erp/service/order/InvoiceBillOrderService.java
... ... @@ -120,5 +120,6 @@ public interface InvoiceBillOrderService extends IService&lt;InvoiceBillOrderDO&gt; {
120 120 ServerResult byIdAddNotes(InvoiceBillCreateVO createVO);
121 121  
122 122 ServerResult deleteDeductUrlById(InvoiceBillDeductInfoVO deleteVo);
  123 + ServerResult isFinishStatus(InvoiceBillDeductInfoVO invoiceBillDeductInfoVO);
123 124  
124 125 }
... ...
src/main/java/com/order/erp/service/order/ProducePaymentCheckBillOrderService.java
... ... @@ -111,4 +111,5 @@ public interface ProducePaymentCheckBillOrderService extends IService&lt;ProducePay
111 111 ServerResult setPayedDate(ProducePaymentCheckBillCreateVO createVO);
112 112 ServerResult byIdAddNotes(ProducePaymentCheckBillCreateVO createVO);
113 113 ServerResult deleteDeductUrlById(ProducePaymentCheckBillDeductInfoVO deleteVo);
  114 + ServerResult isFinishStatus(ProducePaymentCheckBillInvoiceInfoVO producePaymentCheckBillInvoiceInfoVO);
114 115 }
... ...
src/main/java/com/order/erp/service/order/impl/InvoiceBillOrderServiceImpl.java
... ... @@ -980,6 +980,7 @@ public class InvoiceBillOrderServiceImpl extends ServiceImpl&lt;InvoiceBillOrderMap
980 980 .bgUrl(createVO.getBgUrl())
981 981 .backRefundDate(createVO.getBackRefundDate())
982 982 .status(FinanceEnum.UNPAID_PAYMENTS.getStatus())
  983 + .finishStatus(FinanceEnum.UNPAID_PAYMENTS.getStatus())
983 984 .businesPerson(x.getBusinessPerson())
984 985 .trackerUser(x.getCreateBy())
985 986 .build();
... ... @@ -1207,7 +1208,7 @@ public class InvoiceBillOrderServiceImpl extends ServiceImpl&lt;InvoiceBillOrderMap
1207 1208 //发送邮箱通知财务。 这里这个邮箱通知财务,只能提示invoice号,因为一个invoice申请对应多个invoice号,所以会有多个内部编号和项目号等。
1208 1209 InvoiceAndCheckBillSendEmailVO invoiceAndCheckBillSendEmailVO = new InvoiceAndCheckBillSendEmailVO();
1209 1210 invoiceAndCheckBillSendEmailVO.setInvoiceBillOrderDO(invoiceBillOrderDO.get(0));
1210   - emailSendUtils.sendInvoiceAndCheckEmail(FinanceOverEnum.INVOICE_PASS,invoiceAndCheckBillSendEmailVO);
  1211 + emailSendUtils.sendInvoiceAndCheckEmail(FinanceOverEnum.INVOICE_PASS,invoiceAndCheckBillSendEmailVO,true);
1211 1212 }else{
1212 1213 applyDO = initOrderFieldLockApplyDO(invoiceFieldVO, userId,false);
1213 1214 }
... ... @@ -1542,6 +1543,27 @@ public class InvoiceBillOrderServiceImpl extends ServiceImpl&lt;InvoiceBillOrderMap
1542 1543 return ServerResult.success();
1543 1544 }
1544 1545  
  1546 + @Override
  1547 + public ServerResult isFinishStatus(InvoiceBillDeductInfoVO invoiceBillDeductInfoVO) {
  1548 + InvoiceBillOrderDO invoiceBillOrderDO = getById(invoiceBillDeductInfoVO.getId());
  1549 + if(Objects.nonNull(invoiceBillOrderDO)){
  1550 + if(!FinanceEnum.RECEIVED_PAYMENT.getStatus().equals(invoiceBillOrderDO.getStatus())){
  1551 + throw new BusinessException("该订单还没有完成最终收款,你无法设置最终状态为已完成!");
  1552 + }
  1553 + List<InvoiceBillOrderDO> invoiceBillOrderDOList = list(new LambdaQueryWrapper<InvoiceBillOrderDO>().eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN)
  1554 + .eq(InvoiceBillOrderDO::getInvoiceNo, invoiceBillOrderDO.getInvoiceNo())
  1555 + .eq(InvoiceBillOrderDO::getStatus, FinanceEnum.RECEIVED_PAYMENT.getStatus()));
  1556 + if(CollectionUtils.isNotEmpty(invoiceBillOrderDOList)){
  1557 + List<InvoiceBillOrderDO> finishSatusList = invoiceBillOrderDOList.stream().map(x -> {
  1558 + x.setFinishStatus(FinanceEnum.RECEIVED_PAYMENT.getStatus());
  1559 + return x;
  1560 + }).collect(Collectors.toList());
  1561 + updateBatchById(finishSatusList);
  1562 + }
  1563 + }
  1564 + return ServerResult.success();
  1565 + }
  1566 +
1545 1567  
1546 1568 public void createMergedCell(Sheet sheet, Workbook workbook, int rowIndex, int colIndex, int startRow, int endRow, int startCol, int endCol, String value) {
1547 1569 // 创建或获取当前行
... ...
src/main/java/com/order/erp/service/order/impl/OrderFieldLockApplyServiceImpl.java
... ... @@ -570,7 +570,7 @@ public class OrderFieldLockApplyServiceImpl extends ServiceImpl&lt;OrderFieldLockAp
570 570 InvoiceAndCheckBillSendEmailVO invoiceAndCheckBillSendEmailVO = new InvoiceAndCheckBillSendEmailVO();
571 571 invoiceAndCheckBillSendEmailVO.setInvoiceBillOrderDO(invoiceBillOrderDOS.get(0));
572 572 invoiceAndCheckBillSendEmailVO.setRefuseRemark(refuseRemark);
573   - emailSendUtils.sendInvoiceAndCheckEmail(FinanceOverEnum.INVOICE_FAIL,invoiceAndCheckBillSendEmailVO);
  573 + emailSendUtils.sendInvoiceAndCheckEmail(FinanceOverEnum.INVOICE_FAIL,invoiceAndCheckBillSendEmailVO,true);
574 574 }
575 575 } else if (ApplyTypeEnum.CHECK_BILL_APPLY.getType().equals(applyDO.getType())) {
576 576 OrderLockFieldVO lockFieldVO = JSONObject.parseObject(applyDO.getFields(), OrderLockFieldVO.class);
... ... @@ -610,7 +610,7 @@ public class OrderFieldLockApplyServiceImpl extends ServiceImpl&lt;OrderFieldLockAp
610 610 InvoiceAndCheckBillSendEmailVO invoiceAndCheckBillSendEmailVO = new InvoiceAndCheckBillSendEmailVO();
611 611 invoiceAndCheckBillSendEmailVO.setCheckBillOrderDO(producePaymentCheckBillOrderDOS.get(0));
612 612 invoiceAndCheckBillSendEmailVO.setRefuseRemark(refuseRemark);
613   - emailSendUtils.sendInvoiceAndCheckEmail(FinanceOverEnum.CHECK_FAIL,invoiceAndCheckBillSendEmailVO);
  613 + emailSendUtils.sendInvoiceAndCheckEmail(FinanceOverEnum.CHECK_FAIL,invoiceAndCheckBillSendEmailVO,false);
614 614 }
615 615  
616 616 } else if(ApplyTypeEnum.DEPARTMENT_INVOICE_APPLY.getType().equals(applyDO.getType())){
... ... @@ -641,7 +641,7 @@ public class OrderFieldLockApplyServiceImpl extends ServiceImpl&lt;OrderFieldLockAp
641 641 InvoiceAndCheckBillSendEmailVO invoiceAndCheckBillSendEmailVO = new InvoiceAndCheckBillSendEmailVO();
642 642 invoiceAndCheckBillSendEmailVO.setCheckBillOrderDO(invoiceInfoDO);
643 643 invoiceAndCheckBillSendEmailVO.setRefuseRemark(refuseRemark);
644   - emailSendUtils.sendInvoiceAndCheckEmail(FinanceOverEnum.CHECK_INVOICEURL_FAIL,invoiceAndCheckBillSendEmailVO);
  644 + emailSendUtils.sendInvoiceAndCheckEmail(FinanceOverEnum.CHECK_INVOICEURL_FAIL,invoiceAndCheckBillSendEmailVO,false);
645 645 }
646 646  
647 647 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&lt;OrderFieldLockAp
793 793 //发送邮箱通知财务。 这里这个邮箱通知财务,只能提示invoice号,因为一个invoice申请对应多个invoice号,所以会有多个内部编号和项目号等。
794 794 InvoiceAndCheckBillSendEmailVO invoiceAndCheckBillSendEmailVO = new InvoiceAndCheckBillSendEmailVO();
795 795 invoiceAndCheckBillSendEmailVO.setInvoiceBillOrderDO(invoiceeBillOrderDOs.get(0));
796   - emailSendUtils.sendInvoiceAndCheckEmail(FinanceOverEnum.INVOICE_PASS,invoiceAndCheckBillSendEmailVO);
  796 + emailSendUtils.sendInvoiceAndCheckEmail(FinanceOverEnum.INVOICE_PASS,invoiceAndCheckBillSendEmailVO,true);
797 797 }
798 798 } else if (ApplyTypeEnum.CHECK_BILL_APPLY.getType().equals(applyDO.getType())) {
799 799 applyDO.setAuditUserId(auditUserId);
... ... @@ -834,7 +834,7 @@ public class OrderFieldLockApplyServiceImpl extends ServiceImpl&lt;OrderFieldLockAp
834 834 //发送邮箱通知财务。 这里这个邮箱通知财务,只能提示invoice号,因为一个invoice申请对应多个invoice号,所以会有多个内部编号和项目号等。
835 835 InvoiceAndCheckBillSendEmailVO invoiceAndCheckBillSendEmailVO = new InvoiceAndCheckBillSendEmailVO();
836 836 invoiceAndCheckBillSendEmailVO.setCheckBillOrderDO(producePaymentCheckBillOrderDOS.get(0));
837   - emailSendUtils.sendInvoiceAndCheckEmail(FinanceOverEnum.CHECK_PASS,invoiceAndCheckBillSendEmailVO);
  837 + emailSendUtils.sendInvoiceAndCheckEmail(FinanceOverEnum.CHECK_PASS,invoiceAndCheckBillSendEmailVO,true);
838 838  
839 839 }
840 840 } else if (ApplyTypeEnum.DEPARTMENT_INVOICE_APPLY.getType().equals(applyDO.getType())) {
... ... @@ -865,7 +865,7 @@ public class OrderFieldLockApplyServiceImpl extends ServiceImpl&lt;OrderFieldLockAp
865 865 //发送邮件通知跟单员和业务员。
866 866 InvoiceAndCheckBillSendEmailVO invoiceAndCheckBillSendEmailVO = new InvoiceAndCheckBillSendEmailVO();
867 867 invoiceAndCheckBillSendEmailVO.setCheckBillOrderDO(invoiceInfoDO);
868   - emailSendUtils.sendInvoiceAndCheckEmail(FinanceOverEnum.CHECK_INVOICEURL_PASS,invoiceAndCheckBillSendEmailVO);
  868 + emailSendUtils.sendInvoiceAndCheckEmail(FinanceOverEnum.CHECK_INVOICEURL_PASS,invoiceAndCheckBillSendEmailVO,true);
869 869 }
870 870  
871 871 OrderAuditLogDO auditLogDO = OrderAuditLogDO.builder().applyId(applyDO.getId()).orderId(applyDO.getOrderId()).optType(ApplyStatusEnum.AUDIT_PASS.getDesc()).build();
... ...
src/main/java/com/order/erp/service/order/impl/ProducePaymentCheckBillOrderServiceImpl.java
... ... @@ -818,6 +818,7 @@ public class ProducePaymentCheckBillOrderServiceImpl extends ServiceImpl&lt;Produce
818 818 .orderId(x.getId())
819 819 .payedDate(createVO.getPayedDate())
820 820 .status(FinanceEnum.UNPAID_PAYMENTS.getStatus())
  821 + .finishStatus(FinanceEnum.UNPAID_PAYMENTS.getStatus())
821 822 .productionName(x.getProductionDepartment())
822 823 .businesPerson(x.getBusinessPerson())
823 824 .trackerUser(x.getCreateBy())
... ... @@ -1094,7 +1095,7 @@ public class ProducePaymentCheckBillOrderServiceImpl extends ServiceImpl&lt;Produce
1094 1095 //发送邮箱通知财务。 这里这个邮箱通知财务,只能提示invoice号,因为一个invoice申请对应多个invoice号,所以会有多个内部编号和项目号等。
1095 1096 InvoiceAndCheckBillSendEmailVO invoiceAndCheckBillSendEmailVO = new InvoiceAndCheckBillSendEmailVO();
1096 1097 invoiceAndCheckBillSendEmailVO.setCheckBillOrderDO(producePaymentCheckBillOrderDOS.get(0));
1097   - emailSendUtils.sendInvoiceAndCheckEmail(FinanceOverEnum.CHECK_PASS,invoiceAndCheckBillSendEmailVO);
  1098 + emailSendUtils.sendInvoiceAndCheckEmail(FinanceOverEnum.CHECK_PASS,invoiceAndCheckBillSendEmailVO,true);
1098 1099 }else{
1099 1100 applyDO = initOrderFieldLockApplyDO(producePaymentCheckBillFieldVO, userId,false);
1100 1101 }
... ... @@ -1371,6 +1372,27 @@ public class ProducePaymentCheckBillOrderServiceImpl extends ServiceImpl&lt;Produce
1371 1372 }
1372 1373  
1373 1374 @Override
  1375 + public ServerResult isFinishStatus(ProducePaymentCheckBillInvoiceInfoVO producePaymentCheckBillInvoiceInfoVO) {
  1376 + ProducePaymentCheckBillOrderDO producePaymentCheckBillOrderDO = getById(producePaymentCheckBillInvoiceInfoVO.getId());
  1377 + if(Objects.nonNull(producePaymentCheckBillOrderDO)){
  1378 + if(!FinanceEnum.RECEIVED_PAYMENT.getStatus().equals(producePaymentCheckBillOrderDO.getStatus())){
  1379 + throw new BusinessException("该订单还没有完成最终付款,无法设置最终状态为已完成!");
  1380 + }
  1381 + List<ProducePaymentCheckBillOrderDO> producePaymentCheckBillOrderDOList = list(new LambdaQueryWrapper<ProducePaymentCheckBillOrderDO>().eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN)
  1382 + .eq(ProducePaymentCheckBillOrderDO::getStatus, FinanceEnum.RECEIVED_PAYMENT.getStatus())
  1383 + .eq(ProducePaymentCheckBillOrderDO::getCheckNo, producePaymentCheckBillOrderDO.getCheckNo()));
  1384 + if(CollectionUtils.isNotEmpty(producePaymentCheckBillOrderDOList)){
  1385 + List<ProducePaymentCheckBillOrderDO> producePaymentCheckBillOrderDOS = producePaymentCheckBillOrderDOList.stream().map(x -> {
  1386 + x.setFinishStatus(FinanceEnum.RECEIVED_PAYMENT.getStatus());
  1387 + return x;
  1388 + }).collect(Collectors.toList());
  1389 + updateBatchById(producePaymentCheckBillOrderDOS);
  1390 + }
  1391 + }
  1392 + return ServerResult.success();
  1393 + }
  1394 +
  1395 + @Override
1374 1396 public ServerResult exportReceipt(HttpServletResponse response,CheckBillExportReceiptVO queryVO) throws IOException {
1375 1397 XSSFWorkbook workbook = new XSSFWorkbook();
1376 1398 Sheet sheet = workbook.createSheet("付款单");
... ...
src/main/resources/mapper/InvoiceBillOrderMapper.xml
... ... @@ -98,6 +98,7 @@
98 98 i.status AS invoiceStatus, -- invoice状态
99 99 i.deduct_amount AS invoiceDeductAmount, -- 扣款金额
100 100 i.notes AS invoiceNotes, -- invoice备注
  101 + i.finish_status AS invoiceFinishStatus,
101 102 -- 生产科付款信息
102 103 p.id AS checkId,
103 104 p.check_no AS checkNo, -- checkNo编号
... ... @@ -113,7 +114,8 @@
113 114 p.payed_date AS checkPayedDate, -- 必须付款日期
114 115 p.deduct_url AS checkDeductUrl, -- 扣款单
115 116 p.notes AS checkNotes, -- checkNo备注
116   - p.invoice_url AS checkInvoiceUrl -- 发票
  117 + p.invoice_url AS checkInvoiceUrl, -- 发票
  118 + p.finish_status AS checkFinishStatus
117 119 FROM order_base_info o
118 120 LEFT JOIN invoice_bill_order AS i
119 121 ON o.id = i.order_id AND i.enable_flag = 10
... ... @@ -134,6 +136,12 @@
134 136 <if test="queryVO.checkNoStatus != null">
135 137 AND o.check_status = #{queryVO.checkNoStatus}
136 138 </if>
  139 + <if test="queryVO.invoiceFinishStatus != null">
  140 + AND i.finish_status = #{queryVO.invoiceFinishStatus}
  141 + </if>
  142 + <if test="queryVO.checkFinishStatus != null">
  143 + AND p.finish_status = #{queryVO.checkFinishStatus}
  144 + </if>
137 145 <if test="queryVO.customerCode != null and queryVO.customerCode.size > 0 ">
138 146 AND o.customer_code IN
139 147 <foreach collection="queryVO.customerCode" item="customerCode" open="(" separator="," close=")">
... ... @@ -227,6 +235,12 @@
227 235 <if test="queryVO.checkNoStatus != null">
228 236 AND o.check_status = #{queryVO.checkNoStatus}
229 237 </if>
  238 + <if test="queryVO.invoiceFinishStatus != null">
  239 + AND i.finish_status = #{queryVO.invoiceFinishStatus}
  240 + </if>
  241 + <if test="queryVO.checkFinishStatus != null">
  242 + AND p.finish_status = #{queryVO.checkFinishStatus}
  243 + </if>
230 244 <if test="queryVO.customerCode != null and queryVO.customerCode.size > 0 ">
231 245 AND o.customer_code IN
232 246 <foreach collection="queryVO.customerCode" item="customerCode" open="(" separator="," close=")">
... ...