From eb9f81699c055e20743d1e074a11f1b7bca74df8 Mon Sep 17 00:00:00 2001
From: jiangxiaoming <7548901@qq.com>
Date: Wed, 18 Sep 2024 16:54:17 +0800
Subject: [PATCH] =?UTF-8?q?=E8=87=AA=E5=8A=A8=E5=8C=B9=E9=85=8D=E9=A2=84?=
 =?UTF-8?q?=E5=BC=80=E7=A5=A8=E5=8A=9F=E8=83=BD+=E6=9A=82=E5=AD=98?=
 =?UTF-8?q?=E5=85=A5=E8=B4=A6=E6=89=B9=E9=87=8F=E5=8A=9F=E8=83=BD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../command/dto/PreIncomeConfirmCmd.java        |  3 ++-
 .../controller/api/EntryBillController.java     |  8 ++++++++
 .../command/EntryCommandServiceImpl.java        |  2 +-
 .../command/IncomeCommandServiceImpl.java       | 13 +++++++++++--
 .../command/InvoiceCommandServieceImpl.java     | 13 +++++++++++++
 .../command/api/EntryCommandService.java        |  1 +
 .../command/api/InvoiceCommandServiece.java     |  4 +++-
 .../aggregate/invoice/InvoiceRepository.java    |  4 ++++
 .../mapper/api/InvoiceMapper.java               | 11 +++++++++++
 .../repository/InvoiceRepositoryImpl.java       |  8 ++++++++
 .../controller/EntryBillControllerImpl.java     | 17 +++++++++++++++++
 11 files changed, 79 insertions(+), 5 deletions(-)

diff --git a/ServiceSite/facade/src/main/java/com/seasky/ledgerincome/application/command/dto/PreIncomeConfirmCmd.java b/ServiceSite/facade/src/main/java/com/seasky/ledgerincome/application/command/dto/PreIncomeConfirmCmd.java
index ba928039..ef23e332 100644
--- a/ServiceSite/facade/src/main/java/com/seasky/ledgerincome/application/command/dto/PreIncomeConfirmCmd.java
+++ b/ServiceSite/facade/src/main/java/com/seasky/ledgerincome/application/command/dto/PreIncomeConfirmCmd.java
@@ -10,5 +10,6 @@ import java.util.List;
 public class PreIncomeConfirmCmd {
     @ApiModelProperty(value = "鏀舵id")
     public List<Long> incomeId;
-
+    @ApiModelProperty(value = "鑷姩鍖归厤棰勫紑绁ㄥ姛鑳� true寮€鍚�")
+    private Boolean autoInvoice = false;
 }
diff --git a/ServiceSite/facade/src/main/java/com/seasky/ledgerincome/interfaces/controller/api/EntryBillController.java b/ServiceSite/facade/src/main/java/com/seasky/ledgerincome/interfaces/controller/api/EntryBillController.java
index ea6528e1..99d396db 100644
--- a/ServiceSite/facade/src/main/java/com/seasky/ledgerincome/interfaces/controller/api/EntryBillController.java
+++ b/ServiceSite/facade/src/main/java/com/seasky/ledgerincome/interfaces/controller/api/EntryBillController.java
@@ -12,6 +12,7 @@ import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.*;
 
 import java.io.IOException;
+import java.util.List;
 
 /**
  * @Author jxm
@@ -29,6 +30,13 @@ public interface EntryBillController {
     @PostMapping("/storageTemp")
     Result<Object> storageTemp(@RequestParam("incomeId") Long incomeId);
 
+    @ApiImplicitParams({
+            @ApiImplicitParam(name="incomeId",value="鍥炲崟ID",required=true)
+    })
+    @ApiOperation("鏀舵鏆傚瓨锛堟壒閲忥級")
+    @PostMapping("/storageTempBatch")
+    Result<Object> storageTempBatch(@RequestBody Long[] incomeIds);
+
     @ApiImplicitParams({
             @ApiImplicitParam(name="incomeId",value="鍥炲崟ID",required=true)
     })
diff --git a/ServiceSite/src/main/java/com/seasky/ledgerincome/application/command/EntryCommandServiceImpl.java b/ServiceSite/src/main/java/com/seasky/ledgerincome/application/command/EntryCommandServiceImpl.java
index c3d72eb4..cc96c7ee 100644
--- a/ServiceSite/src/main/java/com/seasky/ledgerincome/application/command/EntryCommandServiceImpl.java
+++ b/ServiceSite/src/main/java/com/seasky/ledgerincome/application/command/EntryCommandServiceImpl.java
@@ -75,7 +75,7 @@ public class EntryCommandServiceImpl extends BaseControllerImpl implements Entry
         // 1鏌ヨ鍥炲崟
         IncomeAggregate incomeAggregate = incomeRepository.findById(incomeId);
         if(incomeAggregate.getNeedInQuire()!=null && !incomeAggregate.getNeedInQuire()){
-            throw ExceptionUtil.getException(null,"闈炲緟璁ら鐨勫洖鍗曚笉鍏佽鏆傚瓨鍏ヨ处");
+            throw ExceptionUtil.getException(null,"闈炲緟璁ら鐨勫洖鍗曚笉鍏佽鏆傚瓨鍏ヨ处:"+incomeAggregate.getIncomeId());
         }
         // 2 鍏ヨ处瑙勫垯鐢熸垚鍑瘉
         VoucherAggregate voucherAggregate = voucherUtil.generateVoucher(incomeAggregate, "鍚�", VoucherStateApplyEnum.鐢宠涓�.getValue());
diff --git a/ServiceSite/src/main/java/com/seasky/ledgerincome/application/command/IncomeCommandServiceImpl.java b/ServiceSite/src/main/java/com/seasky/ledgerincome/application/command/IncomeCommandServiceImpl.java
index 6d4b094c..e5eceaae 100644
--- a/ServiceSite/src/main/java/com/seasky/ledgerincome/application/command/IncomeCommandServiceImpl.java
+++ b/ServiceSite/src/main/java/com/seasky/ledgerincome/application/command/IncomeCommandServiceImpl.java
@@ -11,6 +11,7 @@ import com.seasky.core.ddd.base.api.BaseCommandAbstractService;
 import com.seasky.core.util.ExceptionUtil;
 import com.seasky.ledgerincome.application.command.api.EntryCommandService;
 import com.seasky.ledgerincome.application.command.api.IncomeCommandService;
+import com.seasky.ledgerincome.application.command.api.InvoiceCommandServiece;
 import com.seasky.ledgerincome.application.command.assembler.IncomeAssembler;
 import com.seasky.ledgerincome.application.command.assembler.InvoiceAssembler;
 import com.seasky.ledgerincome.application.command.assembler.VchDetailAssembler;
@@ -91,6 +92,8 @@ public class IncomeCommandServiceImpl  extends BaseCommandAbstractService<Income
     BankAccountNumberQueryService bankAccountNumberQueryService;
     @Autowired
     IncomeSpecialRepository incomeSpecialRepository;
+    @Autowired
+    InvoiceCommandServiece invoiceCommandServiece;
     @Override
     public void automaticIncomeType(List<ReceiptBillCmd> receiptBillCmdList) {
         if(receiptBillCmdList == null || receiptBillCmdList.isEmpty()){
@@ -147,10 +150,16 @@ public class IncomeCommandServiceImpl  extends BaseCommandAbstractService<Income
 
     @Override
     public void preIncomeConfirm(PreIncomeConfirmCmd cmd) {
+        if(cmd.getIncomeId().size()>10){
+            throw ExceptionUtil.getException(null,"鏈€澶氭壒閲�10鏉″洖鍗�");
+        }
         for (Long item :cmd.getIncomeId()) {
             IncomeAggregate incomeAggregate = findById(item);
             incomeAggregate.changePreIncomeConfirm();
             save(incomeAggregate);
+            if(cmd.getAutoInvoice()){
+                invoiceCommandServiece.autoInvoiceIncome(incomeAggregate);
+            }
         }
     }
 
@@ -248,7 +257,7 @@ public class IncomeCommandServiceImpl  extends BaseCommandAbstractService<Income
 #2锛氬伐璧勮ˉ宸紝瀛樺湪灏嗘€婚噾棰濇媶鍒嗕负鍏昏€侀噾銆佸尰鐤椾繚闄┿€佸け涓氫繚闄┿€佸伐浼氫細璐圭殑鎯呭喌锛岄渶瑕佸仛鐗规畩澶勭悊
 #3锛氬畾鏈熷瓨娆撅紝瀛樺湪灏嗘€婚噾棰濇媶鍒嗘湰閲戝拰鍒╂伅鐨勬儏鍐碉紝闇€瑕佸仛鐗规畩澶勭悊
 **/
-        if(cmd.getIncomeTypeName().equals("搴旂即璐㈡斂涓撴埛娆�" ) || cmd.getIncomeTypeName().equals("宸ヨ祫閫€鍥�")
+        if(cmd.getIncomeTypeName().equals("搴斾氦璐㈡斂涓撴埛娆�" ) || cmd.getIncomeTypeName().equals("宸ヨ祫閫€鍥�")
                 || cmd.getIncomeTypeName().equals("瀹氭湡瀛樻"))
         {
             IncomeSpecialAggregate incomeSpecialAggregate=(Objects.isNull(cmd.getIncomeSpecialId()))
@@ -257,7 +266,7 @@ public class IncomeCommandServiceImpl  extends BaseCommandAbstractService<Income
                     cmd.getUnemploymentInsurance(),cmd.getUnionDues(),cmd.getPrincipal(),
                     cmd.getInterest(),cmd.getEducationFee(),cmd.getPositionSalary(),
                     cmd.getSalaryScale(),cmd.getTransportationSubsidy(),cmd.getSalaryCompensation()):incomeSpecialRepository.findById(cmd.getIncomeSpecialId());
-            if(cmd.getIncomeTypeName().equals("搴旂即璐㈡斂涓撴埛娆�"))
+            if(cmd.getIncomeTypeName().equals("搴斾氦璐㈡斂涓撴埛娆�"))
             {
                 incomeSpecialAggregate.changeInfo(cmd.getHotelExpense(),cmd.getTuition(),cmd.getEducationFee());
             }
diff --git a/ServiceSite/src/main/java/com/seasky/ledgerincome/application/command/InvoiceCommandServieceImpl.java b/ServiceSite/src/main/java/com/seasky/ledgerincome/application/command/InvoiceCommandServieceImpl.java
index 51da046a..7f0e199b 100644
--- a/ServiceSite/src/main/java/com/seasky/ledgerincome/application/command/InvoiceCommandServieceImpl.java
+++ b/ServiceSite/src/main/java/com/seasky/ledgerincome/application/command/InvoiceCommandServieceImpl.java
@@ -590,6 +590,19 @@ public class InvoiceCommandServieceImpl extends BaseCommandAbstractService<Invoi
             ThreadLocalUtil.remove("person");
         }
     }
+
+    @Override
+    public void autoInvoiceIncome(IncomeAggregate aggregate) {
+        // 鏍规嵁璐拱鏂瑰拰閲戦鍖归厤
+        BigDecimal incomeAmount = aggregate.getIncomeAmount();
+        String accountName = aggregate.getInComeAccount().getAccountName();
+        IncomeInvoiceAggregate incomeInvoiceAggregate = invoiceRepository.findInvoice(incomeAmount,accountName);
+        if(incomeInvoiceAggregate!=null){
+            incomeInvoiceAggregate.setIncomeId(aggregate.getIncomeId());
+            incomeInvoiceRepository.save(incomeInvoiceAggregate);
+        }
+    }
+
     private  Map<Integer, String> checkImport(List<InvoiceTemplate> list){
         Map<Integer, String> resMap = new HashMap<>();
         List<String> stringList = list.stream().map(t -> {
diff --git a/ServiceSite/src/main/java/com/seasky/ledgerincome/application/command/api/EntryCommandService.java b/ServiceSite/src/main/java/com/seasky/ledgerincome/application/command/api/EntryCommandService.java
index 20131d75..bc3e0a50 100644
--- a/ServiceSite/src/main/java/com/seasky/ledgerincome/application/command/api/EntryCommandService.java
+++ b/ServiceSite/src/main/java/com/seasky/ledgerincome/application/command/api/EntryCommandService.java
@@ -33,4 +33,5 @@ public interface EntryCommandService {
     void complete(CompleteIncomeCmd cmd);
 
     void downloadVoucherPDF(Long incomeId) throws IOException, DocumentException;
+
 }
diff --git a/ServiceSite/src/main/java/com/seasky/ledgerincome/application/command/api/InvoiceCommandServiece.java b/ServiceSite/src/main/java/com/seasky/ledgerincome/application/command/api/InvoiceCommandServiece.java
index 19e7a192..3aa3f363 100644
--- a/ServiceSite/src/main/java/com/seasky/ledgerincome/application/command/api/InvoiceCommandServiece.java
+++ b/ServiceSite/src/main/java/com/seasky/ledgerincome/application/command/api/InvoiceCommandServiece.java
@@ -2,6 +2,7 @@ package com.seasky.ledgerincome.application.command.api;
 
 import com.seasky.core.common.Result;
 import com.seasky.ledgerincome.application.command.dto.*;
+import com.seasky.ledgerincome.domain.aggregate.income.IncomeAggregate;
 import com.seasky.ledgerincome.interfaces.controller.excel.InvoiceTemplate;
 
 import javax.validation.Valid;
@@ -24,5 +25,6 @@ public interface InvoiceCommandServiece {
 
     void suppInvoice(SuppInvoiceCmd cmd);
 
-
+    // 棰勫垎閰嶇‘璁ゅ姛鑳戒腑锛屽鍔犱竴涓嚜鍔ㄥ尮閰嶉寮€绁ㄥ姛鑳斤紝鑰佸笀鐐逛竴涓嬩箣鍚庯紝鍙互鏍规嵁瀵规柟璐﹀彿锛岄噾棰濊嚜鍔ㄥ叧鑱斿埌鏀舵鍥炲崟涓�
+    void autoInvoiceIncome(IncomeAggregate aggregate);
 }
diff --git a/ServiceSite/src/main/java/com/seasky/ledgerincome/domain/aggregate/invoice/InvoiceRepository.java b/ServiceSite/src/main/java/com/seasky/ledgerincome/domain/aggregate/invoice/InvoiceRepository.java
index ca324e4c..f3104ab9 100644
--- a/ServiceSite/src/main/java/com/seasky/ledgerincome/domain/aggregate/invoice/InvoiceRepository.java
+++ b/ServiceSite/src/main/java/com/seasky/ledgerincome/domain/aggregate/invoice/InvoiceRepository.java
@@ -2,9 +2,11 @@ package com.seasky.ledgerincome.domain.aggregate.invoice;
 
 import com.seasky.core.ddd.base.api.BaseRepository;
 import com.seasky.ledgerincome.domain.aggregate.example.ExampleAggregate;
+import com.seasky.ledgerincome.domain.aggregate.incomeinvoice.IncomeInvoiceAggregate;
 import com.seasky.ledgerincome.infrastructure.po.InvoiceDetailPo;
 import com.seasky.ledgerincome.infrastructure.po.InvoicePo;
 
+import java.math.BigDecimal;
 import java.util.List;
 
 public interface InvoiceRepository extends BaseRepository<InvoiceAggergate> {
@@ -15,4 +17,6 @@ public interface InvoiceRepository extends BaseRepository<InvoiceAggergate> {
     void removeListByInvoiceIds(List<Long> invoiceIds);
 
     List<String> checkInvoice(List<String> stringList);
+
+    IncomeInvoiceAggregate findInvoice(BigDecimal incomeAmount, String accountName);
 }
diff --git a/ServiceSite/src/main/java/com/seasky/ledgerincome/infrastructure/mapper/api/InvoiceMapper.java b/ServiceSite/src/main/java/com/seasky/ledgerincome/infrastructure/mapper/api/InvoiceMapper.java
index 1559b5a7..d877d86f 100644
--- a/ServiceSite/src/main/java/com/seasky/ledgerincome/infrastructure/mapper/api/InvoiceMapper.java
+++ b/ServiceSite/src/main/java/com/seasky/ledgerincome/infrastructure/mapper/api/InvoiceMapper.java
@@ -5,6 +5,7 @@ import com.seasky.core.base.BaseMapper;
 import com.seasky.ledgerincome.application.query.dto.InvoiceDownQry;
 import com.seasky.ledgerincome.application.query.dto.InvoicePreQry;
 import com.seasky.ledgerincome.application.query.dto.InvoiceQry;
+import com.seasky.ledgerincome.domain.aggregate.incomeinvoice.IncomeInvoiceAggregate;
 import com.seasky.ledgerincome.infrastructure.po.InvoiceDetailPo;
 import com.seasky.ledgerincome.infrastructure.po.InvoicePo;
 import com.seasky.ledgerincome.infrastructure.po.InvoiceSpecificsPo;
@@ -12,6 +13,7 @@ import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
 import org.mapstruct.Mapper;
 
+import java.math.BigDecimal;
 import java.util.List;
 
 @Mapper
@@ -39,4 +41,13 @@ public interface InvoiceMapper extends BaseMapper<InvoicePo> {
    String  selectInvoiceRemark(@Param("incomeId") Long incomeId, @Param("value")String value);
 
    String selectInvoiceNo(@Param("incomeId") Long incomeId);
+
+   @Select("SELECT a.invoice_type as invoiceType, a.id as invoiceId " +
+           "FROM t_invoice a " +
+           "LEFT JOIN t_invoice_detail b ON a.id = b.invoice_id " +
+           "WHERE a.buyer_name = #{buyerName} " +
+           "GROUP BY a.id " +
+           "HAVING SUM(b.amount) = #{incomeAmount} " +
+           "AND NOT EXISTS (SELECT 1 FROM t_income_invoice c WHERE c.invoice_id = a.id and c.available = 'YES')")
+    IncomeInvoiceAggregate findInvoice(@Param("incomeAmount")BigDecimal incomeAmount, @Param("buyerName") String buyerName);
 }
diff --git a/ServiceSite/src/main/java/com/seasky/ledgerincome/infrastructure/repository/InvoiceRepositoryImpl.java b/ServiceSite/src/main/java/com/seasky/ledgerincome/infrastructure/repository/InvoiceRepositoryImpl.java
index f0282dba..c04e956d 100644
--- a/ServiceSite/src/main/java/com/seasky/ledgerincome/infrastructure/repository/InvoiceRepositoryImpl.java
+++ b/ServiceSite/src/main/java/com/seasky/ledgerincome/infrastructure/repository/InvoiceRepositoryImpl.java
@@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.seasky.ledgerincome.application.command.assembler.InvoiceAssembler;
 import com.seasky.ledgerincome.domain.aggregate.example.ExampleAggregate;
+import com.seasky.ledgerincome.domain.aggregate.incomeinvoice.IncomeInvoiceAggregate;
 import com.seasky.ledgerincome.domain.aggregate.invoice.InvoiceAggergate;
 import com.seasky.ledgerincome.domain.aggregate.invoice.InvoiceRepository;
 import com.seasky.ledgerincome.infrastructure.mapper.api.InvoiceDetailMapper;
@@ -22,6 +23,7 @@ import org.springframework.stereotype.Repository;
 import javax.annotation.Resource;
 import javax.validation.Valid;
 import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Objects;
@@ -183,4 +185,10 @@ public class InvoiceRepositoryImpl  implements InvoiceRepository {
         List<String> list = invoiceMapper.selectInvoiceExsitList(stringList);
         return list ;
     }
+
+    @Override
+    public IncomeInvoiceAggregate findInvoice(BigDecimal incomeAmount, String accountName) {
+        IncomeInvoiceAggregate agg = invoiceMapper.findInvoice(incomeAmount,accountName);
+        return agg;
+    }
 }
diff --git a/ServiceSite/src/main/java/com/seasky/ledgerincome/interfaces/controller/EntryBillControllerImpl.java b/ServiceSite/src/main/java/com/seasky/ledgerincome/interfaces/controller/EntryBillControllerImpl.java
index 2f0b27be..6c8be34d 100644
--- a/ServiceSite/src/main/java/com/seasky/ledgerincome/interfaces/controller/EntryBillControllerImpl.java
+++ b/ServiceSite/src/main/java/com/seasky/ledgerincome/interfaces/controller/EntryBillControllerImpl.java
@@ -3,6 +3,7 @@ package com.seasky.ledgerincome.interfaces.controller;
 import com.itextpdf.text.DocumentException;
 import com.seasky.core.common.Response;
 import com.seasky.core.common.Result;
+import com.seasky.core.util.ExceptionUtil;
 import com.seasky.ledgerincome.annotation.LogOperation;
 import com.seasky.ledgerincome.application.command.api.EntryCommandService;
 import com.seasky.ledgerincome.application.command.dto.EntryTempCmd;
@@ -10,9 +11,12 @@ import com.seasky.ledgerincome.application.command.dto.SuppInvoiceCmd;
 import com.seasky.ledgerincome.application.query.api.FileQueryService;
 import com.seasky.ledgerincome.interfaces.controller.api.EntryBillController;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.RestController;
 
 import java.io.IOException;
+import java.util.Arrays;
+import java.util.List;
 
 /**
  * @Author jxm
@@ -32,6 +36,19 @@ public class EntryBillControllerImpl implements EntryBillController {
         entryCommandService.storageTemp(incomeId);
         return Response.success();    }
 
+    @Transactional
+    @Override
+    public Result<Object> storageTempBatch(Long[] incomeIds) {
+        if(incomeIds == null){
+            throw ExceptionUtil.getException(null,"鏆傚瓨鎵归噺鍏ヨ处鍙傛暟涓虹┖");
+        }
+        List<Long> list = Arrays.asList(incomeIds);
+        list.forEach(id->{
+            entryCommandService.storageTemp(id);
+        });
+        return Response.success();
+    }
+
     @LogOperation("鍏ヨ处鐢宠-鏆傚瓨杞敹鍏�")
     @Override
     public Result<Object> entryTemp(EntryTempCmd cmd) {
-- 
GitLab