From 6f8bcebfc8457e93f8ecd998a865b6ba9ef387ea Mon Sep 17 00:00:00 2001
From: kangxiaoshan <kangxiaoshan@reyun.com>
Date: Fri, 29 May 2020 18:05:07 +0800
Subject: [PATCH] 分摊收入报表权限

---
 src/main/java/common/controller/ContractController.java    |  4 ++--
 src/main/java/common/model/Contract.java                   |  2 +-
 src/main/java/common/repository/ContractRepository.java    |  8 +++++++-
 src/main/java/common/service/impl/ContractServiceImpl.java | 50 ++++++++++++++++++++++++++++++++++++++------------
 src/main/java/dic/AuthMenuEnmm.java                        |  5 +++++
 5 files changed, 53 insertions(+), 16 deletions(-)

diff --git a/src/main/java/common/controller/ContractController.java b/src/main/java/common/controller/ContractController.java
index 06d82dd..6992468 100644
--- a/src/main/java/common/controller/ContractController.java
+++ b/src/main/java/common/controller/ContractController.java
@@ -426,7 +426,7 @@ public class ContractController {
      */
     @RequestMapping(value = "/shareincome/list", method = RequestMethod.GET)
     @ResponseBody
-    @AuthKey(AuthMenuEnmm.CONTRACTMNG_V)
+    @AuthKey(AuthMenuEnmm.SHARED_INCOME_V)
     public ResultModel shareIncome(@CurrentAccount User loginAccount, @PathVariable String platform,
                                    @RequestParam String startDate, @RequestParam String endDate,
                                    String bodyCode, String serchName) {
@@ -437,7 +437,7 @@ public class ContractController {
 
     @RequestMapping(value = "/shareincome/export", method = RequestMethod.GET, produces = MediaType.APPLICATION_OCTET_STREAM_VALUE)
     @ResponseBody
-    @AuthKey(AuthMenuEnmm.CONTRACTMNG_V)
+    @AuthKey(AuthMenuEnmm.SHARED_INCOME_E)
     public ResponseEntity<byte[]> shareIncomeExport(@CurrentAccount User loginAccount, @PathVariable String platform,
                                                     @RequestParam String startDate, @RequestParam String endDate,
                                                     String bodyCode, String serchName, HttpServletResponse response, HttpServletRequest request) {
diff --git a/src/main/java/common/model/Contract.java b/src/main/java/common/model/Contract.java
index 75e9219..c426935 100644
--- a/src/main/java/common/model/Contract.java
+++ b/src/main/java/common/model/Contract.java
@@ -55,7 +55,7 @@ public class Contract {
 
     private Long firstBackId;//先回款记录的id
 
-    private Long adjustmentFund;// 分摊收入调整金额
+    private Long adjustmentFund;// 分摊收入调整金额 (*100的结果)
     private Integer intervalUseDays;//区间使用天数
     private Long incomeExcludingTax; //不含税收入 (*100的结果)
     private Long intervaIncomeShare;//区间分摊收入(*100的结果)
diff --git a/src/main/java/common/repository/ContractRepository.java b/src/main/java/common/repository/ContractRepository.java
index 261727c..2adcc22 100644
--- a/src/main/java/common/repository/ContractRepository.java
+++ b/src/main/java/common/repository/ContractRepository.java
@@ -104,9 +104,15 @@ public interface ContractRepository extends JpaRepository<Contract, Long> {
     @Query(value="select * from contract where start_date >= ?1 and start_date <=?2 and end_date >= ?1 and create_time >= ?1 and platform=?3   and my_body_code = ?4",nativeQuery = true)
     List<Contract> findShareContranctByDate(String startDate, String endDate, String platform, String bodyCode);
 
-    @Query(value="select * from contract where start_date >= ?1 and start_date <=?2 and end_date >= ?1 and create_time >= ?1 and platform=?3 and (my_body_name like %?5% or customer_body like %?5% or contract_code like %?5%)",nativeQuery = true)
+    @Query(value="select * from contract where start_date >= ?1 and start_date <=?2 and end_date >= ?1 and create_time >= ?1 and platform=?3 and (my_body_name like %?4% or customer_body like %?4% or contract_code like %?4%)",nativeQuery = true)
     List<Contract> findShareContranctByDateSerche(String startDate, String endDate, String platform, String serchName);
 
     @Query(value="select * from contract where start_date >= ?1 and start_date <=?2 and end_date >= ?1 and create_time >= ?1 and platform=?3   and my_body_code = ?4  and (my_body_name like %?5% or customer_body like %?5% or contract_code like %?5%)",nativeQuery = true)
     List<Contract> findShareContranctByDate(String startDate, String endDate, String platform, String bodyCode, String serchName);
+
+    @Query(value="select * from contract where start_date >= ?1 and start_date <=?2 and end_date >= ?1 and create_time >= ?1 and platform=?3 and (my_body_name like %?4% or customer_body like %?4% or contract_code like %?5%) and my_body_code in ?5",nativeQuery = true)
+    List<Contract> findShareContranctByDateSercheFinace(String startDate, String endDate, String platform, String serchName, List<String> financeBodies);
+
+    @Query(value="select * from contract where start_date >= ?1 and start_date <=?2 and end_date >= ?1 and create_time >= ?1 and platform=?3 and my_body_code in ?4",nativeQuery = true)
+    List<Contract> findShareContranctByDateFinace(String startDate, String endDate, String platform, List<String> financeBodies);
 }
diff --git a/src/main/java/common/service/impl/ContractServiceImpl.java b/src/main/java/common/service/impl/ContractServiceImpl.java
index e429451..2f9bd0f 100644
--- a/src/main/java/common/service/impl/ContractServiceImpl.java
+++ b/src/main/java/common/service/impl/ContractServiceImpl.java
@@ -514,7 +514,6 @@ public class ContractServiceImpl implements ContractService {
 //        }
 
 
-
         this.calculateShareIncome(resource);
 
         resource = contractRepository.save(resource);
@@ -524,7 +523,7 @@ public class ContractServiceImpl implements ContractService {
         return resource;
     }
 
-    public void calculateShareIncome(Contract resource){
+    public void calculateShareIncome(Contract resource) {
         DateTime formStart = new DateTime(resource.getStartDate());
         DateTime contractStart = new DateTime(resource.getStartDate());
         DateTime contractEnd = new DateTime(resource.getEndDate());
@@ -534,7 +533,7 @@ public class ContractServiceImpl implements ContractService {
             //分摊收入调整金 =  合同金额 * 6% / 合同总天数  *[录入日期前一月最后一日(含) - 合同开始日期]
             int day1 = Days.daysBetween(contractStart, contractEnd).getDays();
             int day2 = Days.daysBetween(contractStart, new DateTime().plusMonths(-1).dayOfMonth().withMaximumValue()).getDays();
-            resource.setAdjustmentFund(resource.getMoney() * 6 / day1 * day2 ); // 此处为 *100的结果
+            resource.setAdjustmentFund(resource.getMoney() * 6 / day1 * day2); // 此处为 *100的结果
         }
     }
 
@@ -1198,11 +1197,8 @@ public class ContractServiceImpl implements ContractService {
 
         if (RoleEnum.FINANCE.getKey().equals(loginAccount.getRole())) {
             //财务  按签约主体查看
-//            List bodyids =  Arrays.asList(loginAccount.getAuthExtend().split(","));
             List bodyids = JSONArray.fromObject(auth.getAuthExtend());
 
-//            List<String> bodycodes = contractBodyRepository.findByIds(bodyids);
-
             if (!StringUtils.isEmpty(contractId)) {
 
                 if (ids != null && ids.size() > 0) {
@@ -2358,14 +2354,41 @@ public class ContractServiceImpl implements ContractService {
     public List<Contract> shareIncomeList(User loginAccount, String startDate, String endDate, String platform, String bodyCode, String serchName) {
 
         List<Contract> contracts = new ArrayList<>();
+
+        List<String> financeBodies = null;
+        if (RoleEnum.FINANCE.getKey().equals(loginAccount.getRole())) {
+            Auth auth = authRepository.findByUser(loginAccount.getId());
+            financeBodies = JSONArray.fromObject(auth.getAuthExtend());
+        }
+
         if (!StringUtils.isEmpty(bodyCode) && !StringUtils.isEmpty(serchName)) {
-            contracts = contractRepository.findShareContranctByDate(startDate, endDate, platform, bodyCode, serchName);
+
+            if (financeBodies != null && !financeBodies.contains(bodyCode)) {
+                //沒有权限查看
+                return contracts;
+            } else {
+                contracts = contractRepository.findShareContranctByDate(startDate, endDate, platform, bodyCode, serchName);
+            }
+
         } else if (!StringUtils.isEmpty(bodyCode)) {
-            contracts = contractRepository.findShareContranctByDate(startDate, endDate, platform, bodyCode);
+            if (financeBodies != null && !financeBodies.contains(bodyCode)) {
+                //沒有权限查看
+                return contracts;
+            } else {
+                contracts = contractRepository.findShareContranctByDate(startDate, endDate, platform, bodyCode);
+            }
         } else if (!StringUtils.isEmpty(serchName)) {
-            contracts = contractRepository.findShareContranctByDateSerche(startDate, endDate, platform, serchName);
+            if (financeBodies != null) {
+                contracts = contractRepository.findShareContranctByDateSercheFinace(startDate, endDate, platform, serchName, financeBodies);
+            } else {
+                contracts = contractRepository.findShareContranctByDateSerche(startDate, endDate, platform, serchName);
+            }
         } else {
-            contracts = contractRepository.findShareContranctByDate(startDate, endDate, platform);
+            if (financeBodies != null) {
+                contracts = contractRepository.findShareContranctByDateFinace(startDate, endDate, platform, financeBodies);
+            } else {
+                contracts = contractRepository.findShareContranctByDate(startDate, endDate, platform);
+            }
         }
 
         List<ContractBody> bodies = contractBodyRepository.findAll();
@@ -2377,8 +2400,9 @@ public class ContractServiceImpl implements ContractService {
 
             v.setMyBodyName(bodiesNameMap.get(v.getMyBodyCode()));
 
-            //以下结果统一 *100
+
             //不含稅收入
+            //以下结果统一 *100
 //            Long excludTax = v.getMoney() * 6 / 100;
             Long excludTax = (long) (v.getMoney() * 100 * 0.06);
 
@@ -2405,13 +2429,15 @@ public class ContractServiceImpl implements ContractService {
             int contractFormRange = Days.daysBetween(usedStart, usedEnd).getDays() + 1;
 
             //区间分摊收入
+            //以下结果统一 *100
             Long intervalIncome = 0L;
             if (containEnd) {
                 //时间范围合同结束时间时 分两部分计算
                 //第一部分
                 intervalIncome = (v.getMoney() * 100) / contracAllDays * (contractFormRange - 1);
                 //第二部分
-                Long intervalIncomePart2 = v.getMoney() * 100 - (v.getMoney() * 100 / contracAllDays * (contracAllDays - 1));
+                Long intervalIncomePart2 = (long) (v.getMoney() -
+                        (v.getMoney() * 100 / contracAllDays * (contracAllDays - 1)) * 1.0 / 100) * 100;
 
                 intervalIncome += intervalIncomePart2;
                 v.setIntervaIncomeShare(intervalIncome);
diff --git a/src/main/java/dic/AuthMenuEnmm.java b/src/main/java/dic/AuthMenuEnmm.java
index 2826067..69235df 100644
--- a/src/main/java/dic/AuthMenuEnmm.java
+++ b/src/main/java/dic/AuthMenuEnmm.java
@@ -37,6 +37,11 @@ public enum  AuthMenuEnmm {
     USERLOGS_V("32","system","查看"),
     USERLOGS_RE("32","system","恢复"),
 
+    FINANCE_REPORT("financereport","0","财务报表"),
+    SHARED_INCOME("40","financereport","分摊收入报表"),
+    SHARED_INCOME_V("41","financereport","查看"),
+    SHARED_INCOME_E("412","financereport","导出"),
+
     OTHER("0","0","0");
 
 
--
libgit2 0.27.1