From de77aef206ed488bc4a5348695e2d6442364a362 Mon Sep 17 00:00:00 2001
From: jiangxiaoming <jiangxiaoming@seaskysh.com>
Date: Mon, 30 Dec 2024 15:02:27 +0800
Subject: [PATCH] =?UTF-8?q?=E8=AE=A4=E9=A2=86=E7=9B=B8=E5=85=B3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../template/enums/ApprovalStateEnum.java     |  1 +
 .../enums/BoardAndLodgingTypeEnum.java        |  5 +-
 .../seasky/template/enums/ClaimTypeEnum.java  | 31 ++++++++++
 .../template/enums/InvoiceTypeEnum.java       | 32 ++++++++++
 .../api/IOutSideApplyInvoiceController.java   |  4 ++
 .../dto/request/ClaimArrivalInvoiceSave.java  | 38 ++++++++++++
 .../dto/request/ClaimArrivalProjectSave.java  | 32 ++++++++++
 .../dto/request/ClaimArrivalSaveRequest.java  | 29 +++++++++
 .../dto/result/ClaimUponArrivalResult.java    |  9 +++
 .../template/business/api/ClaimService.java   |  3 +
 .../dao/mapper/IncomeClaimMapper.java         | 11 ++++
 .../business/dao/mapper/InvoiceMapper.java    |  2 +
 .../business/dao/xml/IncomeMapper.xml         | 59 ++++++++-----------
 .../business/dao/xml/InvoiceMapper.xml        |  8 +++
 .../template/business/entity/IncomeClaim.java | 34 +++++++++++
 .../business/entity/IncomeInvoice.java        | 21 +++++++
 .../business/service/ClaimServiceImpl.java    | 56 ++++++++++++++++++
 .../business/service/IncomeServiceImpl.java   | 57 ++++++++++++++----
 .../OutSideApplyInvoiceController.java        | 11 ++--
 19 files changed, 392 insertions(+), 51 deletions(-)
 create mode 100644 ServiceSiteCommon/facade/src/main/java/com/seasky/template/enums/ClaimTypeEnum.java
 create mode 100644 ServiceSiteCommon/facade/src/main/java/com/seasky/template/enums/InvoiceTypeEnum.java
 create mode 100644 ServiceSiteCommon/facade/src/main/java/com/seasky/template/web/dto/request/ClaimArrivalInvoiceSave.java
 create mode 100644 ServiceSiteCommon/facade/src/main/java/com/seasky/template/web/dto/request/ClaimArrivalProjectSave.java
 create mode 100644 ServiceSiteCommon/facade/src/main/java/com/seasky/template/web/dto/request/ClaimArrivalSaveRequest.java
 create mode 100644 ServiceSiteCommon/src/main/java/com/seasky/template/business/dao/mapper/IncomeClaimMapper.java
 create mode 100644 ServiceSiteCommon/src/main/java/com/seasky/template/business/entity/IncomeClaim.java

diff --git a/ServiceSiteCommon/facade/src/main/java/com/seasky/template/enums/ApprovalStateEnum.java b/ServiceSiteCommon/facade/src/main/java/com/seasky/template/enums/ApprovalStateEnum.java
index a828366..d6a0344 100644
--- a/ServiceSiteCommon/facade/src/main/java/com/seasky/template/enums/ApprovalStateEnum.java
+++ b/ServiceSiteCommon/facade/src/main/java/com/seasky/template/enums/ApprovalStateEnum.java
@@ -4,6 +4,7 @@ import java.util.Arrays;
 import java.util.List;
 import java.util.stream.Collectors;
 
+// 璁ら鐘舵€�&瀹℃壒鐘舵€�
 public enum ApprovalStateEnum {
     寰呮彁浜�("寰呮彁浜�","寰呮彁浜�"),
     宸叉彁浜�("宸叉彁浜�","宸叉彁浜�"),
diff --git a/ServiceSiteCommon/facade/src/main/java/com/seasky/template/enums/BoardAndLodgingTypeEnum.java b/ServiceSiteCommon/facade/src/main/java/com/seasky/template/enums/BoardAndLodgingTypeEnum.java
index 339c001..e6f41f8 100644
--- a/ServiceSiteCommon/facade/src/main/java/com/seasky/template/enums/BoardAndLodgingTypeEnum.java
+++ b/ServiceSiteCommon/facade/src/main/java/com/seasky/template/enums/BoardAndLodgingTypeEnum.java
@@ -4,10 +4,13 @@ import java.util.Arrays;
 import java.util.List;
 import java.util.stream.Collectors;
 
+//鍩硅绫诲瀷
 public enum BoardAndLodgingTypeEnum {
 
     浼欓("浼欓","浼欓"),
-    浣忓("浣忓","浣忓");
+    鏍″唴瀹胯垗("鏍″唴瀹胯垗","鏍″唴瀹胯垗"),
+    鏍″瀹胯垗("鏍″瀹胯垗","鏍″瀹胯垗")
+    ;
     private final String value;
     private final String code;
     BoardAndLodgingTypeEnum(String value,
diff --git a/ServiceSiteCommon/facade/src/main/java/com/seasky/template/enums/ClaimTypeEnum.java b/ServiceSiteCommon/facade/src/main/java/com/seasky/template/enums/ClaimTypeEnum.java
new file mode 100644
index 0000000..e31123e
--- /dev/null
+++ b/ServiceSiteCommon/facade/src/main/java/com/seasky/template/enums/ClaimTypeEnum.java
@@ -0,0 +1,31 @@
+package com.seasky.template.enums;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.stream.Collectors;
+
+//鍩硅绫诲瀷
+public enum ClaimTypeEnum {
+
+    鍒拌处璁ら("鍒拌处璁ら","鍒拌处璁ら"),
+    鍩硅璁ら("鍩硅璁ら","鍩硅璁ら")
+    ;
+    private final String value;
+    private final String code;
+    ClaimTypeEnum(String value,
+                  String code
+    ) {
+        this.value = value;
+        this.code = code;
+    }
+
+    public String getValue() {
+        return value;
+    }
+    public String getCode() {
+        return code;
+    }
+    public static List<String> getList() {
+        return Arrays.stream(ClaimTypeEnum.values()).map(t->{return t.getValue();}).collect(Collectors.toList());
+    }
+}
diff --git a/ServiceSiteCommon/facade/src/main/java/com/seasky/template/enums/InvoiceTypeEnum.java b/ServiceSiteCommon/facade/src/main/java/com/seasky/template/enums/InvoiceTypeEnum.java
new file mode 100644
index 0000000..27af001
--- /dev/null
+++ b/ServiceSiteCommon/facade/src/main/java/com/seasky/template/enums/InvoiceTypeEnum.java
@@ -0,0 +1,32 @@
+package com.seasky.template.enums;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.stream.Collectors;
+
+//寮€绁ㄧ被鍨�
+public enum InvoiceTypeEnum {
+
+    棰勫紑绁�("棰勫紑绁�","棰勫紑绁�"),
+    鐜板紑绁�("鐜板紑绁�","鐜板紑绁�"),
+    绾夸笅棰勫紑绁�("绾夸笅棰勫紑绁�","绾夸笅棰勫紑绁�"),
+    ;
+    private final String value;
+    private final String code;
+    InvoiceTypeEnum(String value,
+                    String code
+    ) {
+        this.value = value;
+        this.code = code;
+    }
+
+    public String getValue() {
+        return value;
+    }
+    public String getCode() {
+        return code;
+    }
+    public static List<String> getList() {
+        return Arrays.stream(InvoiceTypeEnum.values()).map(t->{return t.getValue();}).collect(Collectors.toList());
+    }
+}
diff --git a/ServiceSiteCommon/facade/src/main/java/com/seasky/template/web/api/IOutSideApplyInvoiceController.java b/ServiceSiteCommon/facade/src/main/java/com/seasky/template/web/api/IOutSideApplyInvoiceController.java
index 4e7fe99..d45a553 100644
--- a/ServiceSiteCommon/facade/src/main/java/com/seasky/template/web/api/IOutSideApplyInvoiceController.java
+++ b/ServiceSiteCommon/facade/src/main/java/com/seasky/template/web/api/IOutSideApplyInvoiceController.java
@@ -40,4 +40,8 @@ public interface IOutSideApplyInvoiceController {
     @PostMapping("/selectPreInvoiceList")
     Result<PreInvoiceInfoResult> selectPreInvoiceList();
 
+    @ApiOperation("鍒拌处璁ら鎿嶄綔锛堟柊澧炴垨淇敼锛�")
+    @PostMapping("/claimArrival")
+    Result<Object> claimArrival(@Validated @RequestBody ClaimArrivalSaveRequest request);
+
 }
diff --git a/ServiceSiteCommon/facade/src/main/java/com/seasky/template/web/dto/request/ClaimArrivalInvoiceSave.java b/ServiceSiteCommon/facade/src/main/java/com/seasky/template/web/dto/request/ClaimArrivalInvoiceSave.java
new file mode 100644
index 0000000..3bab09e
--- /dev/null
+++ b/ServiceSiteCommon/facade/src/main/java/com/seasky/template/web/dto/request/ClaimArrivalInvoiceSave.java
@@ -0,0 +1,38 @@
+package com.seasky.template.web.dto.request;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * @Author jxm
+ * @Date 2024/12/30 10:19
+ * @Version 1.0
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class ClaimArrivalInvoiceSave {
+    @ApiModelProperty(value = "鏍规嵁id鏂板鎴栦慨鏀�")
+    private Long id;
+    @ApiModelProperty(value = "鍙戠エ绫诲瀷锛氶寮€绁紝鐜板紑绁紝绾夸笅棰勫紑绁�")
+     private String invoiceType;
+    @ApiModelProperty(value = "鍙戠エ閲戦")
+     private BigDecimal invoiceAmount;
+    @ApiModelProperty(value = "鍙戠エ绋庨")
+     private BigDecimal invoiceTaxAmount;
+    @ApiModelProperty(value = "鍥炲崟鍙�")
+     private String billNo;
+    @ApiModelProperty(value = "璐拱鏂�")
+     private String buyerName;
+    @ApiModelProperty(value = "璐熻矗浜�")
+     private String projectCharge;
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @ApiModelProperty(value = "鍙戠エ鏃ユ湡")
+    private Date invoiceDate;
+}
diff --git a/ServiceSiteCommon/facade/src/main/java/com/seasky/template/web/dto/request/ClaimArrivalProjectSave.java b/ServiceSiteCommon/facade/src/main/java/com/seasky/template/web/dto/request/ClaimArrivalProjectSave.java
new file mode 100644
index 0000000..bce4a3c
--- /dev/null
+++ b/ServiceSiteCommon/facade/src/main/java/com/seasky/template/web/dto/request/ClaimArrivalProjectSave.java
@@ -0,0 +1,32 @@
+package com.seasky.template.web.dto.request;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.math.BigDecimal;
+
+/**
+ * @Author jxm
+ * @Date 2024/12/30 9:16
+ * @Version 1.0
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+//鍒拌处璁ら椤圭洰淇℃伅
+public class ClaimArrivalProjectSave {
+    @ApiModelProperty(value = "鏍规嵁id鏂板鎴栦慨鏀�")
+    private Long id;
+    @ApiModelProperty(value = "椤圭洰缂栧彿")
+    private String projectCode;
+    @ApiModelProperty(value = "椤圭洰鍚嶇О")
+    private String projectName;
+    @ApiModelProperty(value = "璁ら閲戦")
+    private BigDecimal claimAmount;
+    @ApiModelProperty(value = "璁ら绫诲瀷锛氬埌璐﹁棰�/鍩硅璁ら")
+    private String claimType;
+    @ApiModelProperty(value = "椤圭洰璐熻矗浜�")
+    private String projectCharge;
+}
diff --git a/ServiceSiteCommon/facade/src/main/java/com/seasky/template/web/dto/request/ClaimArrivalSaveRequest.java b/ServiceSiteCommon/facade/src/main/java/com/seasky/template/web/dto/request/ClaimArrivalSaveRequest.java
new file mode 100644
index 0000000..8e4fdc2
--- /dev/null
+++ b/ServiceSiteCommon/facade/src/main/java/com/seasky/template/web/dto/request/ClaimArrivalSaveRequest.java
@@ -0,0 +1,29 @@
+package com.seasky.template.web.dto.request;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+/**
+ * @Author jxm
+ * @Date 2024/12/26 15:12
+ * @Version 1.0
+ */
+//鍒拌处璁ら鎿嶄綔瀹炰綋
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class ClaimArrivalSaveRequest {
+    @ApiModelProperty(value = "鍥炲崟id")
+    private Long incomeId;
+    @ApiModelProperty(value = "椤圭洰淇℃伅")
+    private List<ClaimArrivalProjectSave> projectList;
+    @ApiModelProperty(value = "棰勫紑绁╥dList")
+    private List<Long> preInvoiceList;
+    @ApiModelProperty(value = "鍏宠仈琛ㄥ彂绁ㄤ俊鎭�")
+    private List<ClaimArrivalInvoiceSave> invoiceList;
+
+}
diff --git a/ServiceSiteCommon/facade/src/main/java/com/seasky/template/web/dto/result/ClaimUponArrivalResult.java b/ServiceSiteCommon/facade/src/main/java/com/seasky/template/web/dto/result/ClaimUponArrivalResult.java
index 524be77..6d2cd81 100644
--- a/ServiceSiteCommon/facade/src/main/java/com/seasky/template/web/dto/result/ClaimUponArrivalResult.java
+++ b/ServiceSiteCommon/facade/src/main/java/com/seasky/template/web/dto/result/ClaimUponArrivalResult.java
@@ -1,6 +1,8 @@
 package com.seasky.template.web.dto.result;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.seasky.template.web.dto.request.ClaimArrivalInvoiceSave;
+import com.seasky.template.web.dto.request.ClaimArrivalProjectSave;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;
 import lombok.Data;
@@ -8,6 +10,7 @@ import lombok.NoArgsConstructor;
 
 import java.math.BigDecimal;
 import java.util.Date;
+import java.util.List;
 
 /**
  * @Author jxm
@@ -31,4 +34,10 @@ public class ClaimUponArrivalResult {
     private String paymentName;
     @ApiModelProperty(value = "璇存槑")
     private String remark;
+    @ApiModelProperty(value = "椤圭洰淇℃伅")
+    private List<ClaimArrivalProjectSave> projectList;
+    @ApiModelProperty(value = "棰勫紑绁ㄤ俊鎭�")
+    private List<PreInvoiceInfoResult> preInvoiceList;
+    @ApiModelProperty(value = "鍏宠仈琛ㄥ彂绁ㄤ俊鎭紙绾夸笅棰勫紑绁級")
+    private List<ClaimArrivalInvoiceSave> invoiceList;
 }
diff --git a/ServiceSiteCommon/src/main/java/com/seasky/template/business/api/ClaimService.java b/ServiceSiteCommon/src/main/java/com/seasky/template/business/api/ClaimService.java
index 60c7248..a9d3bab 100644
--- a/ServiceSiteCommon/src/main/java/com/seasky/template/business/api/ClaimService.java
+++ b/ServiceSiteCommon/src/main/java/com/seasky/template/business/api/ClaimService.java
@@ -1,5 +1,6 @@
 package com.seasky.template.business.api;
 
+import com.seasky.template.web.dto.request.ClaimArrivalSaveRequest;
 import com.seasky.template.web.dto.request.ClaimMenuRequest;
 import com.seasky.template.web.dto.result.OutSideIncomeTypeResult;
 
@@ -12,4 +13,6 @@ import java.util.List;
  */
 public interface ClaimService {
     List<OutSideIncomeTypeResult> findIncomeType(ClaimMenuRequest request);
+
+    void saveOrUpdateClaim(ClaimArrivalSaveRequest request);
 }
diff --git a/ServiceSiteCommon/src/main/java/com/seasky/template/business/dao/mapper/IncomeClaimMapper.java b/ServiceSiteCommon/src/main/java/com/seasky/template/business/dao/mapper/IncomeClaimMapper.java
new file mode 100644
index 0000000..ae7aaf0
--- /dev/null
+++ b/ServiceSiteCommon/src/main/java/com/seasky/template/business/dao/mapper/IncomeClaimMapper.java
@@ -0,0 +1,11 @@
+package com.seasky.template.business.dao.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.seasky.template.business.entity.IncomeClaim;
+import com.seasky.template.business.entity.IncomeInvoice;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface IncomeClaimMapper extends BaseMapper<IncomeClaim> {
+
+}
diff --git a/ServiceSiteCommon/src/main/java/com/seasky/template/business/dao/mapper/InvoiceMapper.java b/ServiceSiteCommon/src/main/java/com/seasky/template/business/dao/mapper/InvoiceMapper.java
index c5cbe98..0151a8f 100644
--- a/ServiceSiteCommon/src/main/java/com/seasky/template/business/dao/mapper/InvoiceMapper.java
+++ b/ServiceSiteCommon/src/main/java/com/seasky/template/business/dao/mapper/InvoiceMapper.java
@@ -26,4 +26,6 @@ public interface InvoiceMapper extends BaseMapper<Invoice> {
     List<InvoicingQueryResult> applyInvoicePageList(Page page, @Param("qry") InvoicingQueryRequest qry);
 
     PreInvoiceInfoResult selectPreInvoiceList();
+
+    List<PreInvoiceInfoResult> selectPreInvoiceListWithIds(@Param("idList")List<Long> idList);
 }
diff --git a/ServiceSiteCommon/src/main/java/com/seasky/template/business/dao/xml/IncomeMapper.xml b/ServiceSiteCommon/src/main/java/com/seasky/template/business/dao/xml/IncomeMapper.xml
index 37beb6e..dd917d1 100644
--- a/ServiceSiteCommon/src/main/java/com/seasky/template/business/dao/xml/IncomeMapper.xml
+++ b/ServiceSiteCommon/src/main/java/com/seasky/template/business/dao/xml/IncomeMapper.xml
@@ -41,6 +41,8 @@
         <if test="cm.incomeAmountEnd!=null">
             and a.income_amount <![CDATA[<=]]> #{cm.incomeAmountEnd}
         </if>
+        GROUP BY
+        a.id, a.bill_no, a.payment_name, a.income_amount, a.income_date, d.entry_mode;
          order by a.income_date desc
     </select>
 
@@ -108,7 +110,7 @@
 
     <select id ="selectClaimUponArrivalListPage" resultType="com.seasky.template.web.dto.result.ClaimUponArrivalResult">
         SELECT
-            f.management_person,
+            GROUP_CONCAT(DISTINCT f.management_person ORDER BY f.management_person SEPARATOR ',') AS management_person,  -- 鍚堝苟绠$悊浜哄憳涓洪€楀彿鍒嗛殧鐨勫瓧绗︿覆
             d.entry_mode,
             a.id,
             a.bill_no,
@@ -155,40 +157,29 @@
 
     <select id="selectClaimUponArrivalByIncomeId" resultType="com.seasky.template.web.dto.result.ClaimUponArrivalResult">
         SELECT
-        f.management_person,
-        d.entry_mode,
-        a.id,
-        a.bill_no,
-        a.payment_name,
-        a.income_amount,
-        a.income_date
+            GROUP_CONCAT(DISTINCT f.management_person ORDER BY f.management_person SEPARATOR ',') AS management_person,  -- 鍚堝苟绠$悊浜哄憳涓洪€楀彿鍒嗛殧鐨勫瓧绗︿覆
+            d.entry_mode,
+            a.id,
+            a.bill_no,
+            a.payment_name,
+            a.income_amount,
+            a.income_date
         FROM
-        t_income a
-        INNER JOIN
-        t_voucher b ON a.bill_no = b.out_order_no
-        AND b.available = 'YES'
-        AND b.voucher_type = '鎸傝处'
-        LEFT JOIN
-        t_income_type_income c ON c.income_id = a.id
-        AND c.available = 'YES'
-        LEFT JOIN
-        t_income_type d ON d.id = c.income_type_id
-        AND d.available = 'YES'
-        LEFT JOIN
-        t_income_type_department e ON e.income_type_id = d.id
-        LEFT JOIN
-        t_department f ON f.id = e.department_id
-        LEFT JOIN
-        t_income_claim g ON g.income_id = a.id
+            t_income a
+                INNER JOIN t_voucher b ON a.bill_no = b.out_order_no
+                AND b.available = 'YES'
+                AND b.voucher_type = '鎸傝处'
+                LEFT JOIN t_income_type_income c ON c.income_id = a.id
+                AND c.available = 'YES'
+                LEFT JOIN t_income_type d ON d.id = c.income_type_id
+                AND d.available = 'YES'
+                LEFT JOIN t_income_type_department e ON e.income_type_id = d.id
+                LEFT JOIN t_department f ON f.id = e.department_id
+                LEFT JOIN t_income_claim g ON g.income_id = a.id
         WHERE
-        a.available = 'YES'   AND g.income_id IS NULL
-        AND (
-        (d.entry_mode == '璐熻矗浜鸿棰�')
-        OR (
-        d.entry_mode = '閮ㄩ棬璁ら'
-        AND f.management_person LIKE CONCAT('%', #{qry.userName}, '%')
-        )
-        )
-        and a.id = #{incomeId}
+            a.available = 'YES'
+          AND a.id = #{incomeId}
+        GROUP BY
+            a.id, a.bill_no, a.payment_name, a.income_amount, a.income_date, d.entry_mode
     </select>
 </mapper>
diff --git a/ServiceSiteCommon/src/main/java/com/seasky/template/business/dao/xml/InvoiceMapper.xml b/ServiceSiteCommon/src/main/java/com/seasky/template/business/dao/xml/InvoiceMapper.xml
index f76c9ea..ccf7855 100644
--- a/ServiceSiteCommon/src/main/java/com/seasky/template/business/dao/xml/InvoiceMapper.xml
+++ b/ServiceSiteCommon/src/main/java/com/seasky/template/business/dao/xml/InvoiceMapper.xml
@@ -249,4 +249,12 @@
         left join t_income_invoice c on a.id=c.invoice_id and c.available = 'YES'
         where  a.available = 'YES' and a.invoice_type = '棰勫紑绁�' and a.apply_state ='閫氳繃' and c.id is null
     </select>
+
+    <select id = "selectPreInvoiceListWithIds" resultMap="selectPreInvoiceListMap">
+        select a.id as invocieId,a.*,b.id as id ,b.* from t_invoice a left join t_invoice_detail b on a.id=b.invoice_id and b.available = 'YES'
+        where  a.available = 'YES' and a.id in
+        <foreach collection="idList" item="id" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </select>
 </mapper>
diff --git a/ServiceSiteCommon/src/main/java/com/seasky/template/business/entity/IncomeClaim.java b/ServiceSiteCommon/src/main/java/com/seasky/template/business/entity/IncomeClaim.java
new file mode 100644
index 0000000..912506e
--- /dev/null
+++ b/ServiceSiteCommon/src/main/java/com/seasky/template/business/entity/IncomeClaim.java
@@ -0,0 +1,34 @@
+package com.seasky.template.business.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.seasky.core.base.BaseModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.math.BigDecimal;
+
+/**
+ * @Author jxm
+ * @Date 2024/12/30 10:56
+ * @Version 1.0
+ */
+@TableName("t_income_claim")
+@AllArgsConstructor
+@NoArgsConstructor
+@Data
+public class IncomeClaim extends BaseModel {
+
+    private Long incomeId;
+    @ApiModelProperty(value = "椤圭洰缂栧彿")
+    private String projectCode;
+    @ApiModelProperty(value = "椤圭洰鍚嶇О")
+    private String projectName;
+    @ApiModelProperty(value = "璁ら閲戦")
+    private BigDecimal claim_amount;
+    @ApiModelProperty(value = "璁ら绫诲瀷锛氬埌璐﹁棰�/鍩硅璁ら")
+    private String claimType;
+    @ApiModelProperty(value = "椤圭洰璐熻矗浜�")
+    private String projectCharge;
+}
diff --git a/ServiceSiteCommon/src/main/java/com/seasky/template/business/entity/IncomeInvoice.java b/ServiceSiteCommon/src/main/java/com/seasky/template/business/entity/IncomeInvoice.java
index 85c2eac..cfed988 100644
--- a/ServiceSiteCommon/src/main/java/com/seasky/template/business/entity/IncomeInvoice.java
+++ b/ServiceSiteCommon/src/main/java/com/seasky/template/business/entity/IncomeInvoice.java
@@ -1,11 +1,16 @@
 package com.seasky.template.business.entity;
 
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
 import com.seasky.core.base.BaseModel;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
+import java.math.BigDecimal;
+import java.util.Date;
+
 /**
  * @Author jxm
  * @Date 2024/12/24 8:59
@@ -19,4 +24,20 @@ public class IncomeInvoice extends BaseModel {
 
     private Long incomeId;
     private Long invoiceId;
+
+    @ApiModelProperty(value = "鍙戠エ绫诲瀷锛氶寮€绁紝鐜板紑绁紝绾夸笅棰勫紑绁�")
+    private String invoiceType;
+    @ApiModelProperty(value = "鍙戠エ閲戦")
+    private BigDecimal invoiceAmount;
+    @ApiModelProperty(value = "鍙戠エ绋庨")
+    private BigDecimal invoiceTaxAmount;
+    @ApiModelProperty(value = "鍥炲崟鍙�")
+    private String billNo;
+    @ApiModelProperty(value = "璐拱鏂�")
+    private String buyerName;
+    @ApiModelProperty(value = "璐熻矗浜�")
+    private String projectCharge;
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @ApiModelProperty(value = "鍙戠エ鏃ユ湡")
+    private Date invoiceDate;
 }
diff --git a/ServiceSiteCommon/src/main/java/com/seasky/template/business/service/ClaimServiceImpl.java b/ServiceSiteCommon/src/main/java/com/seasky/template/business/service/ClaimServiceImpl.java
index 8ce0c76..e38cd77 100644
--- a/ServiceSiteCommon/src/main/java/com/seasky/template/business/service/ClaimServiceImpl.java
+++ b/ServiceSiteCommon/src/main/java/com/seasky/template/business/service/ClaimServiceImpl.java
@@ -1,7 +1,18 @@
 package com.seasky.template.business.service;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.seasky.core.ddd.utils.MapperUtils;
 import com.seasky.template.business.api.ClaimService;
+import com.seasky.template.business.dao.mapper.IncomeClaimMapper;
+import com.seasky.template.business.dao.mapper.IncomeInvoiceMapper;
 import com.seasky.template.business.dao.mapper.IncomeTypeMapper;
+import com.seasky.template.business.entity.IncomeClaim;
+import com.seasky.template.business.entity.IncomeInvoice;
+import com.seasky.template.enums.InvoiceEnum;
+import com.seasky.template.enums.InvoiceTypeEnum;
+import com.seasky.template.web.dto.request.ClaimArrivalInvoiceSave;
+import com.seasky.template.web.dto.request.ClaimArrivalProjectSave;
+import com.seasky.template.web.dto.request.ClaimArrivalSaveRequest;
 import com.seasky.template.web.dto.request.ClaimMenuRequest;
 import com.seasky.template.web.dto.result.OutSideIncomeTypeResult;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -19,6 +30,10 @@ public class ClaimServiceImpl implements ClaimService {
 
      @Autowired
      IncomeTypeMapper incomeTypeMapper;
+     @Autowired
+     IncomeInvoiceMapper incomeInvoiceMapper;
+     @Autowired
+     IncomeClaimMapper incomeClaimMapper;
     @Override
     public List<OutSideIncomeTypeResult> findIncomeType(ClaimMenuRequest request) {
         String param = "";
@@ -34,4 +49,45 @@ public class ClaimServiceImpl implements ClaimService {
         List<OutSideIncomeTypeResult> resultList = incomeTypeMapper.findIncomeType(param);
         return resultList;
     }
+
+    @Override
+    public void saveOrUpdateClaim(ClaimArrivalSaveRequest request) {
+        List<Long> preInvoiceList = request.getPreInvoiceList();
+        if(preInvoiceList!=null && preInvoiceList.size()>0){
+            //鍏堝垹闄ら寮€绁ㄥ叧鑱�
+            incomeInvoiceMapper.delete(new QueryWrapper<IncomeInvoice>().
+                    eq("income_id",request.getIncomeId()).eq("invoice_type", InvoiceTypeEnum.棰勫紑绁�.getValue()));
+            for (Long invoiceId : request.getPreInvoiceList()) {
+                 IncomeInvoice incomeInvoice = new IncomeInvoice();
+                 incomeInvoice.setInvoiceId(invoiceId);
+                 incomeInvoice.setIncomeId(request.getIncomeId());
+                 incomeInvoice.setInvoiceType(InvoiceTypeEnum.棰勫紑绁�.getValue());
+                 incomeInvoiceMapper.insert(incomeInvoice);
+            }
+        }
+        List<ClaimArrivalProjectSave> projectList = request.getProjectList();
+        if(projectList!=null && projectList.size()>0){
+            for (ClaimArrivalProjectSave projectSave : projectList) {
+                IncomeClaim incomeClaim = MapperUtils.INSTANCE.map(IncomeClaim.class, projectSave);
+                incomeClaim.setIncomeId(request.getIncomeId());
+                if(projectSave.getId() == null){
+                    incomeClaimMapper.insert(incomeClaim);
+                }else{
+                    incomeClaimMapper.updateById(incomeClaim);
+                }
+            }
+        }
+        List<ClaimArrivalInvoiceSave> invoiceList = request.getInvoiceList();
+        if(invoiceList!=null && invoiceList.size()>0){
+            for (ClaimArrivalInvoiceSave invoiceSave : invoiceList) {
+                IncomeInvoice incomeInvoice = MapperUtils.INSTANCE.map(IncomeInvoice.class, invoiceSave);
+                incomeInvoice.setIncomeId(request.getIncomeId());
+                if(invoiceSave.getId() == null){
+                    incomeInvoiceMapper.insert(incomeInvoice);
+                }else{
+                    incomeInvoiceMapper.updateById(incomeInvoice);
+                }
+            }
+        }
+    }
 }
diff --git a/ServiceSiteCommon/src/main/java/com/seasky/template/business/service/IncomeServiceImpl.java b/ServiceSiteCommon/src/main/java/com/seasky/template/business/service/IncomeServiceImpl.java
index c8c5d65..f4f3ccf 100644
--- a/ServiceSiteCommon/src/main/java/com/seasky/template/business/service/IncomeServiceImpl.java
+++ b/ServiceSiteCommon/src/main/java/com/seasky/template/business/service/IncomeServiceImpl.java
@@ -1,6 +1,7 @@
 package com.seasky.template.business.service;
 import com.alibaba.excel.annotation.ExcelProperty;
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.seasky.core.base.AbstractService;
 import com.seasky.core.common.Pagination;
@@ -9,22 +10,15 @@ import com.seasky.core.util.ExceptionUtil;
 import com.seasky.template.annotation.NullableField;
 import com.seasky.template.business.api.IncomeService;
 import com.seasky.template.business.api.VoucherService;
-import com.seasky.template.business.dao.mapper.IncomeMapper;
-import com.seasky.template.business.dao.mapper.IncomeTypeIncomeMapper;
-import com.seasky.template.business.dao.mapper.IncomeVoucherMapper;
-import com.seasky.template.business.dao.mapper.VoucherMapper;
-import com.seasky.template.business.entity.Income;
-import com.seasky.template.business.entity.IncomeTypeIncome;
-import com.seasky.template.business.entity.IncomeVoucher;
-import com.seasky.template.business.entity.Voucher;
+import com.seasky.template.business.dao.mapper.*;
+import com.seasky.template.business.entity.*;
+import com.seasky.template.enums.ClaimTypeEnum;
 import com.seasky.template.enums.IncomeStateEnum;
+import com.seasky.template.enums.InvoiceTypeEnum;
 import com.seasky.template.utils.UserInfoUtil;
 import com.seasky.template.utils.VoucherUtil;
 import com.seasky.template.web.dto.request.*;
-import com.seasky.template.web.dto.result.ClaimUponArrivalResult;
-import com.seasky.template.web.dto.result.DepartmentResult;
-import com.seasky.template.web.dto.result.IncomeBindTypeResult;
-import com.seasky.template.web.dto.result.UserInfoResult;
+import com.seasky.template.web.dto.result.*;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -61,6 +55,12 @@ public class IncomeServiceImpl extends AbstractService<Income, IncomeMapper> imp
     VoucherService voucherService;
     @Autowired
     UserInfoUtil userInfoUtil;
+    @Autowired
+    IncomeClaimMapper incomeClaimMapper;
+    @Autowired
+    IncomeInvoiceMapper incomeInvoiceMapper;
+    @Autowired
+    private InvoiceMapper invoiceMapper;
     @Override
     public void add(IncomeSaveRequest saveRequest) {
         String orderNo = incomeMapper.selectExistOrderNo(saveRequest.getBillNo());
@@ -219,6 +219,39 @@ public class IncomeServiceImpl extends AbstractService<Income, IncomeMapper> imp
     @Override
     public ClaimUponArrivalResult selectClaimUponArrivalByIncomeId(Long incomeId) {
         ClaimUponArrivalResult result = incomeMapper.selectClaimUponArrivalByIncomeId(incomeId);
+        if(result == null){
+            return result;
+        }
+        //1.鏌ヨ椤圭洰淇℃伅
+        QueryWrapper<IncomeClaim> wrapper = new QueryWrapper<>();
+        wrapper.eq("income_id",incomeId);
+        List<IncomeClaim> incomeClaimList = incomeClaimMapper.selectList(wrapper);
+        if(incomeClaimList!=null){
+            List<ClaimArrivalProjectSave> claimArrivalProjectSaves = MapperUtils.INSTANCE.mapAsList(ClaimArrivalProjectSave.class, incomeClaimList);
+            result.setProjectList(claimArrivalProjectSaves);
+        }
+        //2.鏌ヨ绾夸笅棰勫紑绁ㄤ俊鎭�
+        QueryWrapper<IncomeInvoice> wrapper2 = new QueryWrapper<>();
+        wrapper2.eq("income_id",incomeId);
+        wrapper2.eq("invoice_type", InvoiceTypeEnum.绾夸笅棰勫紑绁�.getValue());
+
+        List<IncomeInvoice> incomeInvoices = incomeInvoiceMapper.selectList(wrapper2);
+        if(incomeInvoices!=null){
+            List<ClaimArrivalInvoiceSave> invoiceList =  MapperUtils.INSTANCE.mapAsList(ClaimArrivalInvoiceSave.class, incomeInvoices);
+            result.setInvoiceList(invoiceList);
+        }
+        //3.鏌ヨ棰勫紑绁ㄤ俊鎭�
+        QueryWrapper<IncomeInvoice> wrapper3 = new QueryWrapper<>();
+        wrapper3.eq("income_id", incomeId);
+        wrapper3.eq("invoice_type", InvoiceTypeEnum.棰勫紑绁�.getValue());
+        List<IncomeInvoice> incomeInvoices2 = incomeInvoiceMapper.selectList(wrapper3);
+        if(incomeInvoices2!=null){
+            List<Long> objectList = incomeInvoices2.stream().map(t -> {
+                return t.getInvoiceId();
+            }).collect(Collectors.toList());
+            List<PreInvoiceInfoResult> preInvoiceInfoResultList = invoiceMapper.selectPreInvoiceListWithIds(objectList);
+            result.setPreInvoiceList(preInvoiceInfoResultList);
+        }
         return result;
     }
 }
diff --git a/ServiceSiteCommon/src/main/java/com/seasky/template/web/controller/OutSideApplyInvoiceController.java b/ServiceSiteCommon/src/main/java/com/seasky/template/web/controller/OutSideApplyInvoiceController.java
index d9b06f1..e69e3d8 100644
--- a/ServiceSiteCommon/src/main/java/com/seasky/template/web/controller/OutSideApplyInvoiceController.java
+++ b/ServiceSiteCommon/src/main/java/com/seasky/template/web/controller/OutSideApplyInvoiceController.java
@@ -9,10 +9,7 @@ import com.seasky.template.business.api.InvoiceService;
 import com.seasky.template.business.dao.mapper.IncomeMapper;
 import com.seasky.template.utils.UserInfoUtil;
 import com.seasky.template.web.api.IOutSideApplyInvoiceController;
-import com.seasky.template.web.dto.request.ClaimMenuRequest;
-import com.seasky.template.web.dto.request.ClaimUponArrivalRequest;
-import com.seasky.template.web.dto.request.InvoicingQueryRequest;
-import com.seasky.template.web.dto.request.InvoicingQueryResult;
+import com.seasky.template.web.dto.request.*;
 import com.seasky.template.web.dto.result.ClaimUponArrivalResult;
 import com.seasky.template.web.dto.result.OutSideIncomeTypeResult;
 import com.seasky.template.web.dto.result.PreInvoiceInfoResult;
@@ -71,4 +68,10 @@ public class OutSideApplyInvoiceController extends BaseControllerImpl implements
         PreInvoiceInfoResult result = invoiceService.selectPreInvoiceList();
         return ok(ResponseCode.SUCCESS,result);
     }
+
+    @Override
+    public Result<Object> claimArrival(ClaimArrivalSaveRequest request) {
+        claimService.saveOrUpdateClaim(request);
+        return ok(ResponseCode.SUCCESS);
+    }
 }
-- 
GitLab