Browse Source

Merge branch 'master' of http://47.100.37.243:10080/wutt/manHourHousekeeper

ggooalice 2 years ago
parent
commit
4d648d5e40
56 changed files with 682 additions and 336 deletions
  1. 48 3
      fhKeeper/formulahousekeeper/inva_4_tivo/css/projectt.css
  2. BIN
      fhKeeper/formulahousekeeper/inva_4_tivo/image/ions/jingyi.png
  3. 2 2
      fhKeeper/formulahousekeeper/inva_4_tivo/index.html
  4. 13 14
      fhKeeper/formulahousekeeper/inva_4_tivo/js/index.js
  5. 47 1
      fhKeeper/formulahousekeeper/inva_4_tivo/js/project.js
  6. 47 19
      fhKeeper/formulahousekeeper/inva_4_tivo/project.html
  7. 8 10
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/BusinessTripController.java
  8. 2 2
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ProjectController.java
  9. 1 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ReportController.java
  10. 26 26
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ReportExtraDegreeController.java
  11. 9 7
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/TaskController.java
  12. 2 2
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/UserController.java
  13. 64 65
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/WeiXinCorpController.java
  14. 8 6
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/ReportLog.java
  15. 15 9
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/User.java
  16. 2 2
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/ProjectMapper.java
  17. 3 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/DepartmentService.java
  18. 1 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/ProjectService.java
  19. 2 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/UserService.java
  20. 40 5
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/BusinessTripServiceImpl.java
  21. 20 8
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/CompanyDingdingServiceImpl.java
  22. 13 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/DepartmentServiceImpl.java
  23. 67 10
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectServiceImpl.java
  24. 48 13
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java
  25. 17 5
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/UserServiceImpl.java
  26. 33 7
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ProjectMapper.xml
  27. 5 5
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ReportMapper.xml
  28. 8 4
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/UserMapper.xml
  29. BIN
      fhKeeper/formulahousekeeper/management-platform/人员导入模板.xlsx
  30. 0 52
      fhKeeper/formulahousekeeper/management-platform/南京火石闪信网络科技有限公司_财务人员成本模板 (2).xls
  31. BIN
      fhKeeper/formulahousekeeper/management-platform/员工项目分摊比例导入模板.xlsx
  32. BIN
      fhKeeper/formulahousekeeper/management-platform/导入成本2020.8.xlsx
  33. BIN
      fhKeeper/formulahousekeeper/management-platform/导入成本3月份.xlsx
  34. BIN
      fhKeeper/formulahousekeeper/management-platform/导入成本6月份(1).xlsx
  35. BIN
      fhKeeper/formulahousekeeper/management-platform/工时统计表示例.xlsx
  36. BIN
      fhKeeper/formulahousekeeper/management-platform/成都项目导入模板 (1).xlsx
  37. BIN
      fhKeeper/formulahousekeeper/management-platform/新增客户导入模板.xlsx
  38. BIN
      fhKeeper/formulahousekeeper/management-platform/新版任务模板.xlsx
  39. BIN
      fhKeeper/formulahousekeeper/management-platform/研究中心导入模板.xlsx
  40. BIN
      fhKeeper/formulahousekeeper/management-platform/财务人员成本模板 (1)(1).xlsx
  41. BIN
      fhKeeper/formulahousekeeper/management-platform/财务人员成本模板 (1).xlsx
  42. BIN
      fhKeeper/formulahousekeeper/management-platform/财务人员成本模板.xlsx
  43. BIN
      fhKeeper/formulahousekeeper/management-platform/财务人员成本模板2.xlsx
  44. BIN
      fhKeeper/formulahousekeeper/management-platform/财务人员成本模板_已填写.xlsx
  45. BIN
      fhKeeper/formulahousekeeper/management-platform/财务人员成本模板_测试.xlsx
  46. BIN
      fhKeeper/formulahousekeeper/management-platform/项目任务导入模板.xlsx
  47. BIN
      fhKeeper/formulahousekeeper/management-platform/项目导入模板.xlsx
  48. BIN
      fhKeeper/formulahousekeeper/management-platform/项目工时统计表.xlsx
  49. 8 2
      fhKeeper/formulahousekeeper/ops-platform/src/main/java/com/management/platform/entity/TimeType.java
  50. 2 1
      fhKeeper/formulahousekeeper/ops-platform/src/main/resources/mapper/TimeTypeMapper.xml
  51. 5 8
      fhKeeper/formulahousekeeper/timesheet/src/views/awayOffice/awayOffice.vue
  52. 57 3
      fhKeeper/formulahousekeeper/timesheet/src/views/project/cost.vue
  53. 6 7
      fhKeeper/formulahousekeeper/timesheet/src/views/project/info.vue
  54. 27 24
      fhKeeper/formulahousekeeper/timesheet/src/views/project/list.vue
  55. 15 2
      fhKeeper/formulahousekeeper/timesheet/src/views/team/index.vue
  56. 11 10
      fhKeeper/formulahousekeeper/timesheet_h5/vue.config.js

+ 48 - 3
fhKeeper/formulahousekeeper/inva_4_tivo/css/projectt.css

@@ -305,6 +305,16 @@ html {font-size: 10px; -webkit-text-size-adjust:none; -webkit-tap-highlight-colo
     background: #4a65ac;
     background: #4a65ac;
     width: 100%;
     width: 100%;
     overflow: hidden;
     overflow: hidden;
+    position: relative;
+}
+.userEvaluationzuobian {
+    width: 33rem;
+    height: 100%;
+    background: #4a65ac;
+    position: absolute;
+    z-index: 2;
+    top: 0%;
+    left: 0%;
 }
 }
 .inBlock {
 .inBlock {
     display: inline-block;
     display: inline-block;
@@ -312,6 +322,8 @@ html {font-size: 10px; -webkit-text-size-adjust:none; -webkit-tap-highlight-colo
 .userEvaluationLeft {
 .userEvaluationLeft {
     margin-right: 10.625rem;
     margin-right: 10.625rem;
     float: left;
     float: left;
+    position: relative;
+    z-index: 3;
 }
 }
 .userEvaluationLeft h2 {
 .userEvaluationLeft h2 {
     font-size: 3.125rem;
     font-size: 3.125rem;
@@ -362,7 +374,13 @@ html {font-size: 10px; -webkit-text-size-adjust:none; -webkit-tap-highlight-colo
     position: absolute;
     position: absolute;
     top: -3.75rem;
     top: -3.75rem;
     left: 2.1875rem;
     left: 2.1875rem;
-    background: red;
+    /* background: red; */
+    overflow: hidden;
+    display: flex;
+    justify-content: center;
+    align-items: center;
+    background: #fff;
+    border: 1px solid #bdbdbd;
 }
 }
 .userEvaluationRightConTex {
 .userEvaluationRightConTex {
 
 
@@ -370,11 +388,11 @@ html {font-size: 10px; -webkit-text-size-adjust:none; -webkit-tap-highlight-colo
 .userEvaluationRightConTex p{
 .userEvaluationRightConTex p{
     font-size: 1.75rem;
     font-size: 1.75rem;
     color: #333;
     color: #333;
-    margin-top: 5rem;
+    margin-top: 3.75rem;
     margin-bottom: 1.125rem;
     margin-bottom: 1.125rem;
 }
 }
 .userEvaluationRightConTex span {
 .userEvaluationRightConTex span {
-    font-size: 1rem;
+    font-size: .875rem;
     color: #666666;
     color: #666666;
     line-height: 1.5625rem;
     line-height: 1.5625rem;
 }
 }
@@ -382,6 +400,33 @@ html {font-size: 10px; -webkit-text-size-adjust:none; -webkit-tap-highlight-colo
     width: 46.25rem;
     width: 46.25rem;
 }
 }
 
 
+.kehusab {
+    width: 10rem;
+    padding: -2.5rem 0 0 0;
+    display: flex;
+    justify-content: space-between;
+    margin-top: -60px;
+    margin-bottom: 40px;
+}
+.kehuLefts, .kehuRights {
+    width: 3.75rem;
+    height: 3.75rem;
+    border-radius: 50%;
+    background: #fff;
+    text-align: center;
+    line-height: 4.375rem;
+    display: inline-block;
+    position: relative;
+    cursor:pointer;
+}
+.kehusab img {
+    width: 1.25rem;
+    height: 1.25rem;
+}
+.kehusab .zhis {
+    cursor: not-allowed !important;
+}
+
 /* 产品定价 */
 /* 产品定价 */
 .pricings {
 .pricings {
     width: 100%;
     width: 100%;

BIN
fhKeeper/formulahousekeeper/inva_4_tivo/image/ions/jingyi.png


+ 2 - 2
fhKeeper/formulahousekeeper/inva_4_tivo/index.html

@@ -15,8 +15,8 @@
     <script src="js/jquery1.42.min.js"></script>
     <script src="js/jquery1.42.min.js"></script>
     <script src="js/jquery.SuperSlide.2.1.3.js"></script>
     <script src="js/jquery.SuperSlide.2.1.3.js"></script>
     <!-- 统计文件 -->
     <!-- 统计文件 -->
-    <!-- <script charset="UTF-8" id="LA_COLLECT" src="//sdk.51.la/js-sdk-pro.min.js"></script>
-    <script>LA.init({id: "Jk62Sh8gvUhl1xcU",ck: "Jk62Sh8gvUhl1xcU"})</script> -->
+    <script charset="UTF-8" id="LA_COLLECT" src="//sdk.51.la/js-sdk-pro.min.js"></script>
+    <script>LA.init({id: "Jk62Sh8gvUhl1xcU",ck: "Jk62Sh8gvUhl1xcU"})</script>
 </head>
 </head>
 
 
 <body data-spy="scroll" data-target=".fixed-top" id="body">
 <body data-spy="scroll" data-target=".fixed-top" id="body">

+ 13 - 14
fhKeeper/formulahousekeeper/inva_4_tivo/js/index.js

@@ -58,7 +58,7 @@ if(document.documentElement.clientWidth < 1900) {
 $(window).scroll(function () {
 $(window).scroll(function () {
     // 当前滚动的高度
     // 当前滚动的高度
     let currentTop = $(window).scrollTop()
     let currentTop = $(window).scrollTop()
-    if(currentTop < 2) {
+    if(currentTop < 2) { 
         $('#all').removeClass('hanAll')
         $('#all').removeClass('hanAll')
         $('#abc').addClass('abc')
         $('#abc').addClass('abc')
         $("#loGo").attr("src", './image/logo.png')
         $("#loGo").attr("src", './image/logo.png')
@@ -170,33 +170,32 @@ $('#consulting').hover(function () {
 })
 })
 
 
 let nums = 0
 let nums = 0
+let mobiledistance = 0
 // 客户点击
 // 客户点击
 $(function() {
 $(function() {
     kehuFlg()
     kehuFlg()
     $('#kehuLeft').click(function() {
     $('#kehuLeft').click(function() {
-        if(nums > 0 ) {
+        if(nums > 0 && nums <= 5) {
             nums--
             nums--
-            let conImgLeft = $('.conImg').css('left')
-            let num = conImgLeft.replace("px","");
-            $('.conImg').stop(true,false).animate({
-                'left': (+num + 510) + 'px'
-            }, 400)
-            kehuFlg()
+            zuoyouClick()
         }
         }
     })
     })
     $('#kehuRight').click(function() {
     $('#kehuRight').click(function() {
         if(nums < 5) {
         if(nums < 5) {
             nums++
             nums++
-            let conImgLeft = $('.conImg').css('left')
-            let num = conImgLeft.replace("px","");
-            $('.conImg').stop(true,false).animate({
-                'left': (+num - 510) + 'px'
-            }, 400)
-            kehuFlg()
+            zuoyouClick()
         }
         }
     })
     })
 })
 })
 
 
+function zuoyouClick() {
+    mobiledistance = '-' + (nums * 510) + 'px'
+    $('.conImg').stop(true,false).animate({
+        'left': mobiledistance
+    }, 400)
+    kehuFlg()
+}
+
 function kehuFlg() {
 function kehuFlg() {
     if(nums == 0) {
     if(nums == 0) {
         $('#kehuLeft').find('img').attr("src", './image/ions/zuos.png')
         $('#kehuLeft').find('img').attr("src", './image/ions/zuos.png')

+ 47 - 1
fhKeeper/formulahousekeeper/inva_4_tivo/js/project.js

@@ -81,4 +81,50 @@ $('#product').hover(function () {
 },function () {
 },function () {
     fls = true
     fls = true
     $("#product").hide()
     $("#product").hide()
-})
+})
+
+// 用户评价点击事件
+let numberClick = 0
+// 移动的距离
+let mobiledistance = 0
+$(function() {
+    kehuFlg()
+    $('#kehuRight').click(function() {
+        if(numberClick < 3) {
+            numberClick++
+            zuoyouClick()
+        }
+    })
+    $('#kehuLeft').click(function() {
+        if(numberClick > 0 && numberClick <= 3) {
+            numberClick--
+            zuoyouClick()
+        }
+    })
+})
+
+function zuoyouClick() {
+    console.log(numberClick)
+    mobiledistance = '-' + (numberClick * 396) + 'px'
+    $('.userEvaluationRight').stop(true,false).animate({
+        'left': mobiledistance
+    }, 400)
+    kehuFlg()
+}
+
+function kehuFlg() {
+    if(numberClick == 0) {
+        $('#kehuLeft').find('img').attr("src", './image/ions/zuos.png')
+        $('#kehuLeft').addClass("zhis")
+    } else {
+        $('#kehuLeft').find('img').attr("src", './image/ions/zuo.png')
+        $('#kehuLeft').removeClass("zhis")
+    }
+    if(numberClick >= 3) {
+        $('#kehuRight').find('img').attr("src", './image/ions/yous.png')
+        $('#kehuRight').addClass("zhis")
+    } else {
+        $('#kehuRight').find('img').attr("src", './image/ions/you.png')
+        $('#kehuRight').removeClass("zhis")
+    }
+} 

+ 47 - 19
fhKeeper/formulahousekeeper/inva_4_tivo/project.html

@@ -6,6 +6,7 @@
     <meta name="keywords" content="工时管理,项目工时管理,项目成本管理,工时统计,项目成本统计,工时记录表,工时统计表" />
     <meta name="keywords" content="工时管理,项目工时管理,项目成本管理,工时统计,项目成本统计,工时记录表,工时统计表" />
     <meta name="description" content="工时管家是专业的工时管理和项目管理软件。提供工时填报,审核和工时统计功能。引进现代工时管理和项目管理的理念,核算项目投入成本准确便捷,企业IPO项目成本分摊好帮手"/>
     <meta name="description" content="工时管家是专业的工时管理和项目管理软件。提供工时填报,审核和工时统计功能。引进现代工时管理和项目管理的理念,核算项目投入成本准确便捷,企业IPO项目成本分摊好帮手"/>
     <title>工时管理|工时记录表|项目成本管理-工时管家是强大易用的项目工时管理系统。工时填报|工时统计|手机移动填报|核算项目成本|企业IPO利器!</title>
     <title>工时管理|工时记录表|项目成本管理-工时管家是强大易用的项目工时管理系统。工时填报|工时统计|手机移动填报|核算项目成本|企业IPO利器!</title>
+    <link rel="icon" href="image/favicon.png">
     <link rel="stylesheet" href="css/tongyong.css">
     <link rel="stylesheet" href="css/tongyong.css">
     <link rel="stylesheet" href="css/reset.css">
     <link rel="stylesheet" href="css/reset.css">
     <link rel="stylesheet" href="css/projectt.css">
     <link rel="stylesheet" href="css/projectt.css">
@@ -229,6 +230,7 @@
 
 
     <!-- 用户评价 -->
     <!-- 用户评价 -->
     <div class="userEvaluation">
     <div class="userEvaluation">
+        <div class="userEvaluationzuobian"></div>
         <div class="contentes">
         <div class="contentes">
             <div class="inBlock userEvaluationLeft">
             <div class="inBlock userEvaluationLeft">
                 <h2>用户评价</h2>
                 <h2>用户评价</h2>
@@ -236,39 +238,65 @@
                 <div>Read more</div>
                 <div>Read more</div>
             </div>
             </div>
             <div class="inBlock userKongz">
             <div class="inBlock userKongz">
-                <div class="userEvaluationRight">
+                <div class="userEvaluationRight" style="left: 0px;">
                     <div class="userEvaluationRightCon">
                     <div class="userEvaluationRightCon">
-                        <div class="userEvaluationRightConIMg"></div>
+                        <div class="userEvaluationRightConIMg">
+                            <img src="./image/ions/xinchun.png" alt="" style="width: 50%;height: 50%">
+                        </div>
+                        <div class="userEvaluationRightConTex">
+                            <p>芯传汇</p>
+                            <span>在项目管理的软件上,我们做过多种尝试<br/>
+                                在经历「自研产品」之后,我们选择了项目管家<br/>
+                                其核心功能:项目管理、项目预算、费用报销、项目工时管理、满足公司的实际需求。<br/>
+                                操作简单、易用、且速度快</span>
+                        </div>
+                    </div>
+                    <div class="userEvaluationRightCon">
+                        <div class="userEvaluationRightConIMg">
+                            <img src="./image/ions/haotian.png" alt="" style="width: 50%;height: 50%">
+                        </div>
+                        <div class="userEvaluationRightConTex">
+                            <p>深环科技</p>
+                            <span>一个项目管理的好坏更多体现在项目经理的管理水平
+                                但是优秀的项目管理工具是提高项目经理管理效率的法宝
+                                项目帮助我们将时间和精力更多的放在任务本身
+                                能够熟练的使用项目管理工具能够极大的方便我们的工作</span>
+                        </div>
+                    </div>
+                    <div class="userEvaluationRightCon">
+                        <div class="userEvaluationRightConIMg">
+                            <img src="./image/ions/tanggu.png" alt="" style="width: 50%;height: 50%">
+                        </div>
                         <div class="userEvaluationRightConTex">
                         <div class="userEvaluationRightConTex">
-                            <p>Multi-casting</p>
-                            <span>Media, a company specializing in <br/>
-                                digital advertising business, expressed <br/>
-                                the desire to lead the paradigm shift <br/>
-                                of the advertisement market</span>
+                            <p>唐古信息科技</p>
+                            <span>项目管理平台软件可以同时处理许多个项目的信息并妥善进行管理,这让企业项目的运营不至于忙中出错,简洁明了的操作界面让学习的门槛大为降低,同时内置的记录、提醒、数据可视化等功能也能帮助管理者更好地推动项目的运作,对于保障企业项目运行会有很大的帮助。</span>
                         </div>
                         </div>
                     </div>
                     </div>
                     <div class="userEvaluationRightCon">
                     <div class="userEvaluationRightCon">
-                        <div class="userEvaluationRightConIMg"></div>
+                        <div class="userEvaluationRightConIMg">
+                            <img src="./image/ions/chengdu.png" alt="" style="width: 50%;height: 50%">
+                        </div>
                         <div class="userEvaluationRightConTex">
                         <div class="userEvaluationRightConTex">
-                            <p>Multi-casting</p>
-                            <span>Media, a company specializing in <br/>
-                                digital advertising business, expressed <br/>
-                                the desire to lead the paradigm shift <br/>
-                                of the advertisement market</span>
+                            <p>成都中为工程科技</p>
+                            <span>项目管理软件最方便的地方就在于可以电脑和手机端,这样在同步起来是非常的方便的,保证了血统的办公,同时在支持项目相关文件的上传,也可以防止文件的丢失。</span>
                         </div>
                         </div>
                     </div>
                     </div>
                     <div class="userEvaluationRightCon">
                     <div class="userEvaluationRightCon">
-                        <div class="userEvaluationRightConIMg"></div>
+                        <div class="userEvaluationRightConIMg">
+                            <img src="./image/ions/jingyi.png" alt="" style="width: 50%;height: 50%">
+                        </div>
                         <div class="userEvaluationRightConTex">
                         <div class="userEvaluationRightConTex">
-                            <p>Multi-casting</p>
-                            <span>Media, a company specializing in <br/>
-                                digital advertising business, expressed <br/>
-                                the desire to lead the paradigm shift <br/>
-                                of the advertisement market</span>
+                            <p>晶易医药科技</p>
+                            <span>项目管理软件可以展现强大的项目的管理的功能,其中团队的个人的任务的进展的具体的情况是可以同步的,可以不用一个一个的去工作的进度,还有目标的完成的具体的情况</span>
                         </div>
                         </div>
                     </div>
                     </div>
                 </div>
                 </div>
             </div>
             </div>
+            <!-- 左右箭头 -->
+            <div class="kehusab">
+                <div class="kehuLefts" id="kehuLeft"><img src="./image/ions/zuo.png" alt=""></div>
+                <div class="kehuRights" id="kehuRight"><img src="./image/ions/you.png" alt=""></div>
+            </div>
         </div>
         </div>
     </div>
     </div>
     
     

+ 8 - 10
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/BusinessTripController.java

@@ -1,13 +1,17 @@
 package com.management.platform.controller;
 package com.management.platform.controller;
 
 
 
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.management.platform.entity.BusinessTrip;
 import com.management.platform.entity.BusinessTrip;
+import com.management.platform.entity.Department;
 import com.management.platform.entity.LeaveSheet;
 import com.management.platform.entity.LeaveSheet;
 import com.management.platform.entity.User;
 import com.management.platform.entity.User;
 import com.management.platform.entity.vo.SysRichFunction;
 import com.management.platform.entity.vo.SysRichFunction;
+import com.management.platform.mapper.DepartmentMapper;
 import com.management.platform.mapper.SysFunctionMapper;
 import com.management.platform.mapper.SysFunctionMapper;
 import com.management.platform.mapper.UserMapper;
 import com.management.platform.mapper.UserMapper;
 import com.management.platform.service.BusinessTripService;
 import com.management.platform.service.BusinessTripService;
+import com.management.platform.service.DepartmentService;
 import com.management.platform.service.LeaveSheetService;
 import com.management.platform.service.LeaveSheetService;
 import com.management.platform.util.HttpRespMsg;
 import com.management.platform.util.HttpRespMsg;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -17,7 +21,9 @@ import org.springframework.web.bind.annotation.RestController;
 
 
 import javax.annotation.Resource;
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletRequest;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.List;
+import java.util.stream.Collectors;
 
 
 /**
 /**
  * <p>
  * <p>
@@ -37,8 +43,8 @@ public class BusinessTripController {
     BusinessTripService businessTripService;
     BusinessTripService businessTripService;
     @Resource
     @Resource
     private HttpServletRequest request;
     private HttpServletRequest request;
-    @Resource
-    SysFunctionMapper sysFunctionMapper;
+
+
 
 
     @RequestMapping("/add")
     @RequestMapping("/add")
     public HttpRespMsg add(BusinessTrip sheet) {
     public HttpRespMsg add(BusinessTrip sheet) {
@@ -59,14 +65,6 @@ public class BusinessTripController {
 
 
     @RequestMapping("/list")
     @RequestMapping("/list")
     public HttpRespMsg list(BusinessTrip sheet, @RequestParam Integer pageIndex, @RequestParam Integer pageSize) {
     public HttpRespMsg list(BusinessTrip sheet, @RequestParam Integer pageIndex, @RequestParam Integer pageSize) {
-        String token = request.getHeader("TOKEN");
-        User user = userMapper.selectById(token);
-        List<SysRichFunction> functionList = sysFunctionMapper.getRoleFunctions(user.getRoleId(), "查看全部出差");
-        if (functionList.size() == 0) {
-            //普通员工只能看自己的
-            sheet.setOwnerId(user.getId());
-        }
-        sheet.setCompanyId(user.getCompanyId());
         return businessTripService.queryList(sheet, pageIndex, pageSize);
         return businessTripService.queryList(sheet, pageIndex, pageSize);
     }
     }
 
 

+ 2 - 2
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ProjectController.java

@@ -211,8 +211,8 @@ public class ProjectController {
      * 导出查询者所在公司每个项目的工时成本
      * 导出查询者所在公司每个项目的工时成本
      */
      */
     @RequestMapping("/exportTimeCost")
     @RequestMapping("/exportTimeCost")
-    public HttpRespMsg exportTimeCost(String startDate, String endDate, Integer projectId, String userId, Boolean projectSum,Integer type) {
-        return projectService.exportTimeCost(startDate, endDate, projectId, userId, projectSum,type, request);
+    public HttpRespMsg exportTimeCost(String startDate, String endDate, Integer projectId, String userId, Boolean projectSum,Integer type,Integer deptId) {
+        return projectService.exportTimeCost(startDate, endDate, projectId, userId, projectSum,type,deptId, request);
     }
     }
 
 
     /**
     /**

+ 1 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ReportController.java

@@ -1240,6 +1240,7 @@ public class ReportController {
         return reportService.getlastWeekFillTime(userId);
         return reportService.getlastWeekFillTime(userId);
     }
     }
 
 
+    /*提供第三方接口获取日报数据*/
     @PostMapping("/getReportListByToken")
     @PostMapping("/getReportListByToken")
     public HttpRespMsg getReportListByToken(@RequestParam String token, @RequestParam String startDate, @RequestParam String endDate){
     public HttpRespMsg getReportListByToken(@RequestParam String token, @RequestParam String startDate, @RequestParam String endDate){
         return reportService.getReportListByToken(token,startDate,endDate);
         return reportService.getReportListByToken(token,startDate,endDate);

+ 26 - 26
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ReportExtraDegreeController.java

@@ -67,7 +67,7 @@ public class ReportExtraDegreeController {
         TimeType timeType = timeTypeMapper.selectById(user.getCompanyId());
         TimeType timeType = timeTypeMapper.selectById(user.getCompanyId());
         if (info.getId() == null) {
         if (info.getId() == null) {
             info.setCompanyId(user.getCompanyId());
             info.setCompanyId(user.getCompanyId());
-            int cut = reportExtraDegreeMapper.selectCount(new QueryWrapper<ReportExtraDegree>().eq("name",info.getName()));
+            int cut = reportExtraDegreeMapper.selectCount(new QueryWrapper<ReportExtraDegree>().eq("name",info.getName()).eq("company_id", user.getCompanyId()));
             if(cut>0){
             if(cut>0){
                 msg.setError(timeType.getCustomDegreeName()+"名称重复");
                 msg.setError(timeType.getCustomDegreeName()+"名称重复");
                 return msg;
                 return msg;
@@ -75,40 +75,40 @@ public class ReportExtraDegreeController {
             info.setCompanyId(user.getCompanyId());
             info.setCompanyId(user.getCompanyId());
             reportExtraDegreeMapper.insert(info);
             reportExtraDegreeMapper.insert(info);
         } else {
         } else {
-            int cut = reportExtraDegreeMapper.selectCount(new QueryWrapper<ReportExtraDegree>().eq("name",info.getName()).ne("id",info.getId()));
+            int cut = reportExtraDegreeMapper.selectCount(new QueryWrapper<ReportExtraDegree>().eq("name",info.getName()).ne("id",info.getId()).eq("company_id", user.getCompanyId()));
             if(cut>0){
             if(cut>0){
                 msg.setError(timeType.getCustomDegreeName()+"名称重复");
                 msg.setError(timeType.getCustomDegreeName()+"名称重复");
                 return msg;
                 return msg;
             }
             }
             //检查名字是否发生变化
             //检查名字是否发生变化
-                int id = info.getId();
-                List<Project> existsProjects = projectMapper.selectList(new QueryWrapper<Project>()
-                        .eq("company_id", user.getCompanyId())
-                        .and(wrapper->wrapper.eq("associate_degrees", id)
-                                .or().likeRight("associate_degrees", id+",")
-                                .or().like("associate_degrees", ","+id+",")
-                                .or().likeLeft("associate_degrees", ","+id)));
-                if (existsProjects.size() > 0) {
-                    List<Project> updateList = new ArrayList<>();
-                    for (Project p : existsProjects) {
-                        String associateDegrees = p.getAssociateDegrees();
-                        String[] split = associateDegrees.split("\\,");
-                        String[] names = p.getAssociateDegreeNames().split("\\,");
+            int id = info.getId();
+            List<Project> existsProjects = projectMapper.selectList(new QueryWrapper<Project>()
+                    .eq("company_id", user.getCompanyId())
+                    .and(wrapper->wrapper.eq("associate_degrees", id)
+                            .or().likeRight("associate_degrees", id+",")
+                            .or().like("associate_degrees", ","+id+",")
+                            .or().likeLeft("associate_degrees", ","+id)));
+            if (existsProjects.size() > 0) {
+                List<Project> updateList = new ArrayList<>();
+                for (Project p : existsProjects) {
+                    String associateDegrees = p.getAssociateDegrees();
+                    String[] split = associateDegrees.split("\\,");
+                    String[] names = p.getAssociateDegreeNames().split("\\,");
 
 
-                        for (int i=0;i<split.length; i++) {
-                            if (split[i].equals(id+"")) {
-                                names[i] = info.getName();//更换新名字
-                            }
+                    for (int i=0;i<split.length; i++) {
+                        if (split[i].equals(id+"")) {
+                            names[i] = info.getName();//更换新名字
                         }
                         }
-                        String replaceNames = StringUtil.join(names, ",");
-                        Project newP = new Project();
-                        newP.setId(p.getId());
-                        newP.setAssociateDegreeNames(replaceNames);
-                        updateList.add(newP);
                     }
                     }
-                    projectService.updateBatchById(updateList);
+                    String replaceNames = StringUtil.join(names, ",");
+                    Project newP = new Project();
+                    newP.setId(p.getId());
+                    newP.setAssociateDegreeNames(replaceNames);
+                    updateList.add(newP);
                 }
                 }
-                reportExtraDegreeMapper.updateById(info);
+                projectService.updateBatchById(updateList);
+            }
+            reportExtraDegreeMapper.updateById(info);
         }
         }
         return msg;
         return msg;
     }
     }

+ 9 - 7
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/TaskController.java

@@ -120,12 +120,14 @@ public class TaskController {
             //检查执行人是否在当前分组的参与人当中
             //检查执行人是否在当前分组的参与人当中
             List<GroupParticipator> groupParticipatorList = groupParticipatorMapper.selectList(new QueryWrapper<GroupParticipator>().eq("group_id", task.getGroupId()));
             List<GroupParticipator> groupParticipatorList = groupParticipatorMapper.selectList(new QueryWrapper<GroupParticipator>().eq("group_id", task.getGroupId()));
             for (TaskExecutor executor : executorList) {
             for (TaskExecutor executor : executorList) {
-                boolean b = groupParticipatorList.stream().anyMatch(gp -> gp.getUserId().equals(executor.getExecutorId()));
-                if(!b){
-                    GroupParticipator g=new GroupParticipator();
-                    g.setGroupId(task.getGroupId());
-                    g.setUserId(executor.getExecutorId());
-                    groupParticipatorMapper.insert(g);
+                if(executor.getExecutorId()!=null){
+                    boolean b = groupParticipatorList.stream().anyMatch(gp -> gp.getUserId().equals(executor.getExecutorId()));
+                    if(!b){
+                        GroupParticipator g=new GroupParticipator();
+                        g.setGroupId(task.getGroupId());
+                        g.setUserId(executor.getExecutorId());
+                        groupParticipatorMapper.insert(g);
+                    }
                 }
                 }
             }
             }
         }
         }
@@ -608,7 +610,7 @@ public class TaskController {
         String userId = request.getHeader("Token");
         String userId = request.getHeader("Token");
 
 
         QueryWrapper<Task> queryWrapper = new QueryWrapper<Task>().eq("project_id", projectId).eq("task_type", 1);
         QueryWrapper<Task> queryWrapper = new QueryWrapper<Task>().eq("project_id", projectId).eq("task_type", 1);
-        queryWrapper.orderByAsc("id");
+        queryWrapper.orderByAsc("end_date is null").orderByAsc("end_date");
         msg.data = taskService.list(queryWrapper);
         msg.data = taskService.list(queryWrapper);
         return msg;
         return msg;
     }
     }

+ 2 - 2
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/UserController.java

@@ -136,9 +136,9 @@ public class UserController {
                                   @RequestParam Integer roleId, Double monthCost, Double cost,
                                   @RequestParam Integer roleId, Double monthCost, Double cost,
                                   Integer departmentId, Integer salaryType, String costApplyDate,
                                   Integer departmentId, Integer salaryType, String costApplyDate,
                                     String position, String certJson,String inductionDate,String superiorId,
                                     String position, String certJson,String inductionDate,String superiorId,
-                                    String plate1,String plate2,String plate3,String plate4,String plate5) {
+                                    String plate1,String plate2,String plate3,String plate4,String plate5, String jobNumber) {
         return userService.insertUser(id, name, phone, roleId, monthCost, cost, departmentId, salaryType, costApplyDate,
         return userService.insertUser(id, name, phone, roleId, monthCost, cost, departmentId, salaryType, costApplyDate,
-                    position, certJson, request,inductionDate,superiorId,plate1, plate2, plate3,plate4,plate5);
+                    position, certJson, request,inductionDate,superiorId,plate1, plate2, plate3,plate4,plate5, jobNumber);
     }
     }
 
 
     /**
     /**

+ 64 - 65
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/WeiXinCorpController.java

@@ -391,8 +391,10 @@ public class WeiXinCorpController {
                                     .setRoleId(defaultRole.getId())
                                     .setRoleId(defaultRole.getId())
                                     .setRoleName(defaultRole.getRolename())
                                     .setRoleName(defaultRole.getRolename())
                                     .setName(userObj.getString("name"))
                                     .setName(userObj.getString("name"))
+                                    .setPhone(userObj.getString("mobile"))
                                     .setPassword(MD5Util.getPassword("000000"))
                                     .setPassword(MD5Util.getPassword("000000"))
                                     .setCorpwxUserid(corpWxUserId)
                                     .setCorpwxUserid(corpWxUserId)
+                                    .setJobNumber(userObj.getString("userid"))
                                     .setColor(ColorUtil.randomColor())
                                     .setColor(ColorUtil.randomColor())
                                     .setCompanyId(companyId);
                                     .setCompanyId(companyId);
                             if (sysDept != null) {
                             if (sysDept != null) {
@@ -1472,12 +1474,12 @@ public class WeiXinCorpController {
             if (unAssignedUserList.size() > 0) {
             if (unAssignedUserList.size() > 0) {
                 remoteUnAUserList = remoteGetDeptUserDetail(wxCorpInfo, corpContactAccessToken, companyRootDeptId);
                 remoteUnAUserList = remoteGetDeptUserDetail(wxCorpInfo, corpContactAccessToken, companyRootDeptId);
                 //做id转化
                 //做id转化
-                List<String> userIds = new ArrayList<>();
+                List<String> corpUserIds = new ArrayList<>();
                 for (int i=0;i<remoteUnAUserList.size(); i++) {
                 for (int i=0;i<remoteUnAUserList.size(); i++) {
-                    userIds.add(remoteUnAUserList.getJSONObject(i).getString("userid"));
+                    corpUserIds.add(remoteUnAUserList.getJSONObject(i).getString("userid"));
                 }
                 }
                 try {
                 try {
-                    JSONArray array = convertUserIdToOpenUserId(curCorpAccessToken, userIds);
+                    JSONArray array = convertUserIdToOpenUserId(curCorpAccessToken, corpUserIds);
                     for (int i=0;i<array.size(); i++) {
                     for (int i=0;i<array.size(); i++) {
                         JSONObject jsonObject = array.getJSONObject(i);
                         JSONObject jsonObject = array.getJSONObject(i);
                         String userid = jsonObject.getString("userid");
                         String userid = jsonObject.getString("userid");
@@ -1486,7 +1488,7 @@ public class WeiXinCorpController {
                         for (int m=0;m<remoteUnAUserList.size(); m++) {
                         for (int m=0;m<remoteUnAUserList.size(); m++) {
                             JSONObject remoteUser = remoteUnAUserList.getJSONObject(m);
                             JSONObject remoteUser = remoteUnAUserList.getJSONObject(m);
                             if (remoteUser.getString("userid").equals(userid)) {
                             if (remoteUser.getString("userid").equals(userid)) {
-                                remoteUser.put("userid", openUserid);
+                                remoteUser.put("openUserid", openUserid);
                                 break;
                                 break;
                             }
                             }
                         }
                         }
@@ -1498,7 +1500,7 @@ public class WeiXinCorpController {
                 }
                 }
             }
             }
 
 
-
+            List<User> updateUserList = new ArrayList<>();
             for (int m=0;m<unAssignedUserList.size(); m++) {
             for (int m=0;m<unAssignedUserList.size(); m++) {
                 JSONObject userJson = unAssignedUserList.getJSONObject(m);
                 JSONObject userJson = unAssignedUserList.getJSONObject(m);
                 String curUserid = userJson.getString("userid");
                 String curUserid = userJson.getString("userid");
@@ -1523,36 +1525,44 @@ public class WeiXinCorpController {
                 if (remoteUnAUserList != null) {
                 if (remoteUnAUserList != null) {
                     for (int i=0;i<remoteUnAUserList.size(); i++) {
                     for (int i=0;i<remoteUnAUserList.size(); i++) {
                         JSONObject remoteUserJson = remoteUnAUserList.getJSONObject(i);
                         JSONObject remoteUserJson = remoteUnAUserList.getJSONObject(i);
-                        if (remoteUserJson.getString("userid").equals(curUserid)) {
+                        if (remoteUserJson.getString("openUserid").equals(curUserid)) {
                             user.setName(remoteUserJson.getString("name"));
                             user.setName(remoteUserJson.getString("name"));
+                            user.setJobNumber(remoteUserJson.getString("userid"));
+                            user.setPhone(remoteUserJson.getString("mobile"));
                             break;
                             break;
                         }
                         }
                     }
                     }
                 }
                 }
                 //检查用户是否已经存在
                 //检查用户是否已经存在
-                User oldUser = userMapper.selectOne(new QueryWrapper<User>().select("id, name, role_name").eq("corpwx_userid", curUserid).eq("company_id", companyId));
-
+                User oldUser = userMapper.selectOne(new QueryWrapper<User>().select("id, name, job_number, phone").eq("corpwx_userid", curUserid).eq("company_id", companyId));
                 if (oldUser == null) {
                 if (oldUser == null) {
-                    //先检查姓名+手机号是否存在,如果存在,则更新corpwxId
-                    User sameNameUser = userMapper.selectOne(new QueryWrapper<User>().eq("name", user.getName()).eq("phone", user.getPhone()).eq("company_id", companyId).isNull("corpwx_userid").last("limit 1"));
-                    if (sameNameUser != null) {
-                        User upUser = new User();
-                        upUser.setId(sameNameUser.getId());
-                        upUser.setCorpwxUserid(user.getCorpwxUserid());
-                        userMapper.updateById(upUser);
-                    } else {
-                        userMapper.insert(user);
-                    }
+                    updateUserList.add(user);
                 } else {
                 } else {
-                    if (oldUser.getRoleName().equals("超级管理员") && !oldUser.getName().equals(user.getName())) {
-                        //姓名不一致,需要更新
-                        System.out.println("===更新超管姓名==="+user.getName());
-                        user.setId(oldUser.getId());
-                        oldUser.setName(user.getName());
-                        userMapper.updateById(oldUser);
+                    boolean hasChange = false;
+                    User updateUser = new User();
+                    updateUser.setId(oldUser.getId());
+                    //工号或者手机号更新了
+                    if (user.getJobNumber() != null && !user.getJobNumber().equals(oldUser.getJobNumber())) {
+                        hasChange = true;
+                        updateUser.setJobNumber(user.getJobNumber());
+                    }
+                    if (user.getPhone() != null && !user.getPhone().equals(oldUser.getPhone())) {
+                        hasChange = true;
+                        updateUser.setPhone(user.getPhone());
+                    }
+                    if (user.getName() != null && !user.getName().equals(oldUser.getName())) {
+                        hasChange = true;
+                        updateUser.setName(user.getName());
+                    }
+                    if (hasChange) {
+                        //需要更新
+                        updateUserList.add(updateUser);
                     }
                     }
                 }
                 }
             }
             }
+            if (updateUserList.size() > 0) {
+                userService.saveOrUpdateBatch(updateUserList);
+            }
         }
         }
 
 
         //获取公司全部部门,不需要递归
         //获取公司全部部门,不需要递归
@@ -1587,15 +1597,6 @@ public class WeiXinCorpController {
                 if (deptId != 1) {
                 if (deptId != 1) {
                     //忽略根,根是公司名称
                     //忽略根,根是公司名称
                     departmentMapper.insert(department);
                     departmentMapper.insert(department);
-                    //按名称比对
-//                    oldDept = departmentMapper.selectOne(new QueryWrapper<Department>().eq("company_id", companyId).eq("department_name", department.getDepartmentName()).last("limit 1"));
-//                    if (oldDept == null) {
-//                        departmentMapper.insert(department);
-//                    } else {
-//                        //按照企业微信部门id进行更新
-//                        oldDept.setCorpwxDeptid(department.getCorpwxDeptid());
-//                        departmentMapper.updateById(oldDept);
-//                    }
                 }
                 }
             } else {
             } else {
                 //比较是否有更新
                 //比较是否有更新
@@ -1619,7 +1620,6 @@ public class WeiXinCorpController {
                 department = oldDept;
                 department = oldDept;
             }
             }
 
 
-//            sysDeptList.add(department);
             deptObjJSONArray.getJSONObject(i).put("sys_dept_id", department.getDepartmentId());
             deptObjJSONArray.getJSONObject(i).put("sys_dept_id", department.getDepartmentId());
             Integer departmentId = department.getDepartmentId();
             Integer departmentId = department.getDepartmentId();
             if (syncMembs == 1) {
             if (syncMembs == 1) {
@@ -1628,12 +1628,12 @@ public class WeiXinCorpController {
                 if (userList.size() > 0) {
                 if (userList.size() > 0) {
                     remoteDeptUserList = remoteGetDeptUserDetail(wxCorpInfo, corpContactAccessToken, deptId);
                     remoteDeptUserList = remoteGetDeptUserDetail(wxCorpInfo, corpContactAccessToken, deptId);
                     //做id转化
                     //做id转化
-                    List<String> userIds = new ArrayList<>();
+                    List<String> corpUserIds = new ArrayList<>();
                     for (int p=0;p<remoteDeptUserList.size(); p++) {
                     for (int p=0;p<remoteDeptUserList.size(); p++) {
-                        userIds.add(remoteDeptUserList.getJSONObject(p).getString("userid"));
+                        corpUserIds.add(remoteDeptUserList.getJSONObject(p).getString("userid"));
                     }
                     }
                     try {
                     try {
-                        JSONArray array = convertUserIdToOpenUserId(curCorpAccessToken, userIds);
+                        JSONArray array = convertUserIdToOpenUserId(curCorpAccessToken, corpUserIds);
                         for (int w=0;w<array.size(); w++) {
                         for (int w=0;w<array.size(); w++) {
                             JSONObject jsonObject = array.getJSONObject(w);
                             JSONObject jsonObject = array.getJSONObject(w);
                             String userid = jsonObject.getString("userid");
                             String userid = jsonObject.getString("userid");
@@ -1642,7 +1642,7 @@ public class WeiXinCorpController {
                             for (int m=0;m<remoteDeptUserList.size(); m++) {
                             for (int m=0;m<remoteDeptUserList.size(); m++) {
                                 JSONObject remoteUser = remoteDeptUserList.getJSONObject(m);
                                 JSONObject remoteUser = remoteDeptUserList.getJSONObject(m);
                                 if (remoteUser.getString("userid").equals(userid)) {
                                 if (remoteUser.getString("userid").equals(userid)) {
-                                    remoteUser.put("userid", openUserid);
+                                    remoteUser.put("openUserid", openUserid);
                                     break;
                                     break;
                                 }
                                 }
                             }
                             }
@@ -1653,7 +1653,7 @@ public class WeiXinCorpController {
                         return msg;
                         return msg;
                     }
                     }
                 }
                 }
-
+                List<User> updateUserList = new ArrayList<>();
                 for (int m=0;m<userList.size(); m++) {
                 for (int m=0;m<userList.size(); m++) {
                     JSONObject userJson = userList.getJSONObject(m);
                     JSONObject userJson = userList.getJSONObject(m);
                     String curUserid = userJson.getString("userid");
                     String curUserid = userJson.getString("userid");
@@ -1678,47 +1678,46 @@ public class WeiXinCorpController {
                     if (remoteDeptUserList != null) {
                     if (remoteDeptUserList != null) {
                         for (int t=0;t<remoteDeptUserList.size(); t++) {
                         for (int t=0;t<remoteDeptUserList.size(); t++) {
                             JSONObject remoteUserJson = remoteDeptUserList.getJSONObject(t);
                             JSONObject remoteUserJson = remoteDeptUserList.getJSONObject(t);
-                            if (remoteUserJson.getString("userid").equals(curUserid)) {
+                            if (remoteUserJson.getString("openUserid").equals(curUserid)) {
                                 //匹配到了。设置姓名
                                 //匹配到了。设置姓名
                                 System.out.println("远程的用户匹配到了:"+remoteUserJson.getString("name"));
                                 System.out.println("远程的用户匹配到了:"+remoteUserJson.getString("name"));
                                 user.setName(remoteUserJson.getString("name"));
                                 user.setName(remoteUserJson.getString("name"));
+                                user.setJobNumber(remoteUserJson.getString("userid"));
+                                user.setPhone(remoteUserJson.getString("mobile"));
                                 break;
                                 break;
                             }
                             }
                         }
                         }
                     }
                     }
                     //检查用户是否已经存在
                     //检查用户是否已经存在
-                    User oldUser = userMapper.selectOne(new QueryWrapper<User>().eq("corpwx_userid", curUserid).eq("company_id", companyId));
+                    User oldUser = userMapper.selectOne(new QueryWrapper<User>().select("id, name, job_number, phone").eq("corpwx_userid", curUserid).eq("company_id", companyId));
                     if (oldUser == null) {
                     if (oldUser == null) {
-                        //先检查姓名是否存在,如果存在,则更新corpwxId
-                        User sameNameUser = userMapper.selectOne(new QueryWrapper<User>().eq("name", user.getName()).eq("phone", user.getPhone()).eq("company_id", companyId).isNull("corpwx_userid").last("limit 1"));
-                        if (sameNameUser != null) {
-                            User upUser = new User();
-                            upUser.setId(sameNameUser.getId());
-                            upUser.setCorpwxUserid(user.getCorpwxUserid());
-                            userMapper.updateById(upUser);
-                        } else {
-                            //姓名也不存在,则插入新记录
-                            userMapper.insert(user);
-                        }
+                        updateUserList.add(user);
                     } else {
                     } else {
-                        boolean shouldUpdate = false;
-                        if (oldUser.getRoleName().equals("超级管理员") && !oldUser.getName().equals(user.getName())) {
-                            //姓名不一致,需要更新
-                            System.out.println("===更新超管姓名==="+user.getName());
-                            user.setId(oldUser.getId());
-                            oldUser.setName(user.getName());
-                            shouldUpdate = true;
+                        boolean hasChange = false;
+                        User updateUser = new User();
+                        updateUser.setId(oldUser.getId());
+                        //工号或者手机号更新了
+                        if (user.getJobNumber() != null && !user.getJobNumber().equals(oldUser.getJobNumber())) {
+                            hasChange = true;
+                            updateUser.setJobNumber(user.getJobNumber());
                         }
                         }
-                        if (!oldUser.getDepartmentId().equals(user.getDepartmentId())) {
-                            oldUser.setDepartmentId(user.getDepartmentId());
-                            shouldUpdate = true;
+                        if (user.getPhone() != null && !user.getPhone().equals(oldUser.getPhone())) {
+                            hasChange = true;
+                            updateUser.setPhone(user.getPhone());
                         }
                         }
-                        if (shouldUpdate) {
-                            userMapper.updateById(oldUser);
+                        if (user.getName() != null && !user.getName().equals(oldUser.getName())) {
+                            hasChange = true;
+                            updateUser.setName(user.getName());
+                        }
+                        if (hasChange) {
+                            //需要更新
+                            updateUserList.add(updateUser);
                         }
                         }
-
                     }
                     }
                 }
                 }
+                if (updateUserList.size() > 0) {
+                    userService.saveOrUpdateBatch(updateUserList);
+                }
             }
             }
         }
         }
 
 

+ 8 - 6
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/ReportLog.java

@@ -1,19 +1,19 @@
 package com.management.platform.entity;
 package com.management.platform.entity;
 
 
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.extension.activerecord.Model;
-import java.time.LocalDate;
-import com.baomidou.mybatisplus.annotation.TableId;
-import java.time.LocalDateTime;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableField;
-import java.io.Serializable;
-
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.EqualsAndHashCode;
 import lombok.experimental.Accessors;
 import lombok.experimental.Accessors;
 import org.springframework.format.annotation.DateTimeFormat;
 import org.springframework.format.annotation.DateTimeFormat;
 
 
+import java.io.Serializable;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
 /**
 /**
  * <p>
  * <p>
  * 
  * 
@@ -42,6 +42,8 @@ public class ReportLog extends Model<ReportLog> {
      * 日报所属日期
      * 日报所属日期
      */
      */
     @TableField("create_date")
     @TableField("create_date")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @JsonFormat(pattern = "yyyy-MM-dd")
     private LocalDate createDate;
     private LocalDate createDate;
 
 
     /**
     /**

+ 15 - 9
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/User.java

@@ -1,27 +1,27 @@
 package com.management.platform.entity;
 package com.management.platform.entity;
 
 
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableId;
+import java.math.BigDecimal;
 import com.baomidou.mybatisplus.extension.activerecord.Model;
 import com.baomidou.mybatisplus.extension.activerecord.Model;
+import java.time.LocalDate;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.time.LocalDateTime;
+import com.baomidou.mybatisplus.annotation.TableField;
+import java.io.Serializable;
+import java.util.List;
+
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.EqualsAndHashCode;
 import lombok.experimental.Accessors;
 import lombok.experimental.Accessors;
 import org.springframework.format.annotation.DateTimeFormat;
 import org.springframework.format.annotation.DateTimeFormat;
 
 
-import java.io.Serializable;
-import java.math.BigDecimal;
-import java.time.LocalDate;
-import java.time.LocalDateTime;
-import java.util.List;
-
 /**
 /**
  * <p>
  * <p>
  * 
  * 
  * </p>
  * </p>
  *
  *
  * @author Seyason
  * @author Seyason
- * @since 2022-06-14
+ * @since 2022-08-09
  */
  */
 @Data
 @Data
 @EqualsAndHashCode(callSuper = false)
 @EqualsAndHashCode(callSuper = false)
@@ -220,6 +220,12 @@ public class User extends Model<User> {
     @TableField(exist = false)
     @TableField(exist = false)
     private double totalHours;
     private double totalHours;
 
 
+    /**
+     * 员工工号,公司内唯一
+     */
+    @TableField("job_number")
+    private String jobNumber;
+
     @TableField(exist = false)
     @TableField(exist = false)
     private List<UserCert> certList;
     private List<UserCert> certList;
 
 

+ 2 - 2
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/ProjectMapper.java

@@ -25,12 +25,12 @@ public interface ProjectMapper extends BaseMapper<Project> {
     List<Map<String, Object>> getOnlyJoinProjects(@Param("userId") String userId, @Param("companyId") Integer companyId);
     List<Map<String, Object>> getOnlyJoinProjects(@Param("userId") String userId, @Param("companyId") Integer companyId);
 
 
     List<Map<String, Object>> getTimeCost(@Param("companyId") Integer companyId, @Param("startDate") String startDate, @Param("endDate") String endDate,
     List<Map<String, Object>> getTimeCost(@Param("companyId") Integer companyId, @Param("startDate") String startDate, @Param("endDate") String endDate,
-        @Param("projectId") Integer projectId, @Param("userId") String userId,@Param("deptIds")List<Integer> deptIds);
+        @Param("projectId") Integer projectId, @Param("userId") String userId,@Param("deptIds")List<Integer> deptIds,@Param("filterDeptIds")List<Integer> filterDeptIds);
 
 
     List<Map<String, Object>> getCustomDataSum(@Param("companyId") Integer companyId, @Param("startDate") String startDate, @Param("endDate") String endDate,
     List<Map<String, Object>> getCustomDataSum(@Param("companyId") Integer companyId, @Param("startDate") String startDate, @Param("endDate") String endDate,
                                           @Param("projectId") Integer projectId, @Param("userId") String userId);
                                           @Param("projectId") Integer projectId, @Param("userId") String userId);
 
 
-    List<Map<String, Object>> getProjectCost(@Param("companyId")Integer companyId,@Param("startDate") String startDate, @Param("endDate") String endDate, @Param("projectId") Integer projectId, @Param("userId") String userId);
+    List<Map<String, Object>> getProjectCost(@Param("companyId")Integer companyId,@Param("startDate") String startDate, @Param("endDate") String endDate, @Param("projectId") Integer projectId, @Param("userId") String userId,@Param("deptIds")List<Integer> deptIds,@Param("filterDeptIds")List<Integer> filterDeptIds);
 
 
     List<Map<String, Object>> getProjectCusDataSumItem(@Param("companyId") Integer companyId, @Param("startDate") String startDate, @Param("endDate") String endDate, @Param("projectId") Integer projectId, @Param("userId") String userId);
     List<Map<String, Object>> getProjectCusDataSumItem(@Param("companyId") Integer companyId, @Param("startDate") String startDate, @Param("endDate") String endDate, @Param("projectId") Integer projectId, @Param("userId") String userId);
     List<Map<String, Object>> getProjectCusDataDetailItem(@Param("companyId") Integer companyId, @Param("startDate") String startDate, @Param("endDate") String endDate, @Param("projectId") Integer projectId, @Param("userId") String userId);
     List<Map<String, Object>> getProjectCusDataDetailItem(@Param("companyId") Integer companyId, @Param("startDate") String startDate, @Param("endDate") String endDate, @Param("projectId") Integer projectId, @Param("userId") String userId);

+ 3 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/DepartmentService.java

@@ -5,6 +5,7 @@ import com.management.platform.entity.Department;
 import com.management.platform.util.HttpRespMsg;
 import com.management.platform.util.HttpRespMsg;
 
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletRequest;
+import java.util.List;
 
 
 /**
 /**
  * <p>
  * <p>
@@ -40,4 +41,6 @@ public interface DepartmentService extends IService<Department> {
     HttpRespMsg exportDeptStatistic(String startDate, String endDate, HttpServletRequest request);
     HttpRespMsg exportDeptStatistic(String startDate, String endDate, HttpServletRequest request);
 
 
     HttpRespMsg getDeptCustomDataStatistic(String startDate, String endDate, Integer departmentId, HttpServletRequest request);
     HttpRespMsg getDeptCustomDataStatistic(String startDate, String endDate, Integer departmentId, HttpServletRequest request);
+
+    public List<Integer> getDeptIncludeSubDeptIds(Integer departmentId, List<Department> allDeptList);
 }
 }

+ 1 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/ProjectService.java

@@ -56,7 +56,7 @@ public interface ProjectService extends IService<Project> {
 
 
     HttpRespMsg getAllMembCost(String startDate, String endDate, Integer projectId, HttpServletRequest request);
     HttpRespMsg getAllMembCost(String startDate, String endDate, Integer projectId, HttpServletRequest request);
 
 
-    HttpRespMsg exportTimeCost(String startDate, String endDate, Integer projectId,String userId, Boolean projectSum,Integer type,HttpServletRequest request);
+    HttpRespMsg exportTimeCost(String startDate, String endDate, Integer projectId,String userId, Boolean projectSum,Integer type,Integer deptId,HttpServletRequest request);
 
 
     HttpRespMsg updateProgress(Integer id, Integer progress, HttpServletRequest request);
     HttpRespMsg updateProgress(Integer id, Integer progress, HttpServletRequest request);
 
 

+ 2 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/UserService.java

@@ -33,7 +33,8 @@ public interface UserService extends IService<User> {
 
 
     HttpRespMsg insertUser(String id, String name, String phone, Integer roleId, Double monthCost, Double cost, Integer departmentId,
     HttpRespMsg insertUser(String id, String name, String phone, Integer roleId, Double monthCost, Double cost, Integer departmentId,
                            Integer salaryType, String costApplyDate, String position, String certJson,
                            Integer salaryType, String costApplyDate, String position, String certJson,
-                           HttpServletRequest request,String inductionDate, String superiorId,String plate1,String plate2,String plate3,String plate4,String plate5);
+                           HttpServletRequest request,String inductionDate, String superiorId,String plate1,
+                           String plate2,String plate3,String plate4,String plate5, String jobNumber);
 
 
     HttpRespMsg importUser(MultipartFile multipartFile, HttpServletRequest request);
     HttpRespMsg importUser(MultipartFile multipartFile, HttpServletRequest request);
 
 

+ 40 - 5
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/BusinessTripServiceImpl.java

@@ -4,19 +4,18 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.management.platform.entity.*;
 import com.management.platform.entity.*;
+import com.management.platform.entity.vo.SysRichFunction;
 import com.management.platform.mapper.*;
 import com.management.platform.mapper.*;
 import com.management.platform.service.BusinessTripService;
 import com.management.platform.service.BusinessTripService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.management.platform.service.DepartmentService;
 import com.management.platform.util.HttpRespMsg;
 import com.management.platform.util.HttpRespMsg;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 import org.springframework.util.StringUtils;
 import org.springframework.util.StringUtils;
 
 
 import javax.annotation.Resource;
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletRequest;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Optional;
+import java.util.*;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
 
 
 /**
 /**
@@ -41,7 +40,12 @@ public class BusinessTripServiceImpl extends ServiceImpl<BusinessTripMapper, Bus
     private HttpServletRequest request;
     private HttpServletRequest request;
     @Resource
     @Resource
     private ProjectMapper projectMapper;
     private ProjectMapper projectMapper;
-
+    @Resource
+    SysFunctionMapper sysFunctionMapper;
+    @Resource
+    DepartmentMapper departmentMapper;
+    @Resource
+    DepartmentService departmentService;
 
 
     @Override
     @Override
     public HttpRespMsg modifyProject(BusinessTrip sheet) {
     public HttpRespMsg modifyProject(BusinessTrip sheet) {
@@ -90,8 +94,39 @@ public class BusinessTripServiceImpl extends ServiceImpl<BusinessTripMapper, Bus
 
 
     @Override
     @Override
     public HttpRespMsg queryList(BusinessTrip sheet, Integer pageIndex, Integer pageSize) {
     public HttpRespMsg queryList(BusinessTrip sheet, Integer pageIndex, Integer pageSize) {
+        String token = request.getHeader("TOKEN");
+        User user = userMapper.selectById(token);
         QueryWrapper<BusinessTrip> queryWrapper = new QueryWrapper<BusinessTrip>();
         QueryWrapper<BusinessTrip> queryWrapper = new QueryWrapper<BusinessTrip>();
         HttpRespMsg httpRespMsg = new HttpRespMsg();
         HttpRespMsg httpRespMsg = new HttpRespMsg();
+        List<SysRichFunction> functionList = sysFunctionMapper.getRoleFunctions(user.getRoleId(), "查看全部出差");
+        if (functionList.size() == 0) {
+            //部门主要负责人可以看这个部门的
+            List<Department> departmentList = departmentMapper.selectList(new QueryWrapper<Department>().eq("manager_id", user.getId()));
+            if (departmentList.size() > 0) {
+                //先是自己的
+                List<String> userIds = new ArrayList<>();
+                userIds.add(user.getId());
+                //负责的部门的人员
+                List<Department> allDeptList = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id", user.getCompanyId()));
+                List<Integer> allDeptIds = new ArrayList<>();
+                for (Department firstLevelDept : departmentList) {
+                    List<Integer> deptIncludeSubDeptIds = departmentService.getDeptIncludeSubDeptIds(firstLevelDept.getDepartmentId(), allDeptList);
+                    allDeptIds.addAll(deptIncludeSubDeptIds);
+                }
+                if (allDeptIds.size() > 0) {
+                    List<User> userList = userMapper.selectList(new QueryWrapper<User>().select("id").in("department_id", allDeptIds));
+                    List<String> collect = userList.stream().map(User::getId).collect(Collectors.toList());
+                    userIds.addAll(collect);
+                    System.out.println("可见用户size=="+userIds.size());
+                    queryWrapper.in("owner_id", userIds);
+                }
+            } else {
+                //普通员工只能看自己的
+                sheet.setOwnerId(user.getId());
+            }
+        }
+        sheet.setCompanyId(user.getCompanyId());
+
         queryWrapper.eq("company_id", sheet.getCompanyId()).orderByDesc("id");
         queryWrapper.eq("company_id", sheet.getCompanyId()).orderByDesc("id");
 
 
         //增加状态
         //增加状态

+ 20 - 8
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/CompanyDingdingServiceImpl.java

@@ -19,8 +19,10 @@ import com.dingtalk.api.response.OapiMessageCorpconversationSendbytemplateRespon
 import com.dingtalk.api.response.OapiServiceGetSuiteTokenResponse;
 import com.dingtalk.api.response.OapiServiceGetSuiteTokenResponse;
 import com.management.platform.entity.CompanyDingding;
 import com.management.platform.entity.CompanyDingding;
 import com.management.platform.entity.SysConfig;
 import com.management.platform.entity.SysConfig;
+import com.management.platform.entity.TimeType;
 import com.management.platform.mapper.CompanyDingdingMapper;
 import com.management.platform.mapper.CompanyDingdingMapper;
 import com.management.platform.mapper.SysConfigMapper;
 import com.management.platform.mapper.SysConfigMapper;
+import com.management.platform.mapper.TimeTypeMapper;
 import com.management.platform.service.CompanyDingdingService;
 import com.management.platform.service.CompanyDingdingService;
 import com.taobao.api.ApiException;
 import com.taobao.api.ApiException;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.beans.factory.annotation.Value;
@@ -55,8 +57,9 @@ public class CompanyDingdingServiceImpl extends ServiceImpl<CompanyDingdingMappe
     public static final String TEMPLATE_LEAVE_APPLY = "8e2f89e03f1a43b58b3e83dc7c9ac5ba";
     public static final String TEMPLATE_LEAVE_APPLY = "8e2f89e03f1a43b58b3e83dc7c9ac5ba";
     //日报待审批的数量通知
     //日报待审批的数量通知
     public static final String TEMPLATE_REPORT_WAITING_APPLY = "d871e80191d14ec8aeec3986aca3ce46";
     public static final String TEMPLATE_REPORT_WAITING_APPLY = "d871e80191d14ec8aeec3986aca3ce46";
-    //日报审批通过通知
-    public static final String TEMPLATE_REPORT_APPROVE_APPLY = "33ef248317f641c1ab23b152bd96eb79";
+    //日报审批通过通知带评价
+    public static final String TEMPLATE_REPORT_APPROVE_APPLY_EVALUATE = "33ef248317f641c1ab23b152bd96eb79";
+    public static final String TEMPLATE_REPORT_APPROVE_APPLY = "03bbfd4e67c8431aa37f5e61e08ddac4";
     //出差待关联
     //出差待关联
     public static final String TEMPLATE_BUSTRIP_SETTING = "68cc6f3a150f4d869449e83a2f249b65";
     public static final String TEMPLATE_BUSTRIP_SETTING = "68cc6f3a150f4d869449e83a2f249b65";
     //新任务
     //新任务
@@ -68,6 +71,8 @@ public class CompanyDingdingServiceImpl extends ServiceImpl<CompanyDingdingMappe
     private SysConfigMapper sysConfigMapper;
     private SysConfigMapper sysConfigMapper;
     @Resource
     @Resource
     private CompanyDingdingMapper companyDingdingMapper;
     private CompanyDingdingMapper companyDingdingMapper;
+    @Resource
+    private TimeTypeMapper timeTypeMapper;
     @Value("${dingding.appId}")
     @Value("${dingding.appId}")
     private long appId;//钉钉第三方应用的appId
     private long appId;//钉钉第三方应用的appId
     @Value("${configEnv.isPrivateDeploy}")
     @Value("${configEnv.isPrivateDeploy}")
@@ -237,6 +242,7 @@ public class CompanyDingdingServiceImpl extends ServiceImpl<CompanyDingdingMappe
     public void sendReportApproveMsg(Integer companyId, Long agentId, String auditorName, String evaluate, LocalDate date, String useridList) {
     public void sendReportApproveMsg(Integer companyId, Long agentId, String auditorName, String evaluate, LocalDate date, String useridList) {
         if (isDev) return;
         if (isDev) return;
         CompanyDingding dingding = getOne(new QueryWrapper<CompanyDingding>().eq("company_id", companyId));
         CompanyDingding dingding = getOne(new QueryWrapper<CompanyDingding>().eq("company_id", companyId));
+        TimeType timeType = timeTypeMapper.selectById(new QueryWrapper<TimeType>().eq("company_id", companyId));
         DateTimeFormatter df=DateTimeFormatter.ofPattern("yyyy-MM-dd");
         DateTimeFormatter df=DateTimeFormatter.ofPattern("yyyy-MM-dd");
         if (isPrivateDeploy) {
         if (isPrivateDeploy) {
             List<OapiMessageCorpconversationAsyncsendV2Request.Form> form=new ArrayList<>();
             List<OapiMessageCorpconversationAsyncsendV2Request.Form> form=new ArrayList<>();
@@ -245,19 +251,25 @@ public class CompanyDingdingServiceImpl extends ServiceImpl<CompanyDingdingMappe
             item1.setKey("审核人:");
             item1.setKey("审核人:");
             item1.setValue(auditorName);
             item1.setValue(auditorName);
             form.add(item1);
             form.add(item1);
-            item2.setKey("评价:");
-            item2.setValue(evaluate);
-            form.add(item2);
+            if(timeType.getNeedEvaluate()==1){
+                item2.setKey("评价:");
+                item2.setValue(evaluate);
+                form.add(item2);
+            }
             sendOAMsg(dingding,useridList,"日报审核通过","您"+df.format(date)+"提交的日报审核通过了",form,null);
             sendOAMsg(dingding,useridList,"日报审核通过","您"+df.format(date)+"提交的日报审核通过了",form,null);
         } else {
         } else {
             DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/message/corpconversation/sendbytemplate");
             DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/message/corpconversation/sendbytemplate");
+            JSONObject json = new JSONObject();
             OapiMessageCorpconversationSendbytemplateRequest req = new OapiMessageCorpconversationSendbytemplateRequest();
             OapiMessageCorpconversationSendbytemplateRequest req = new OapiMessageCorpconversationSendbytemplateRequest();
             req.setAgentId(agentId);
             req.setAgentId(agentId);
             req.setUseridList(useridList);
             req.setUseridList(useridList);
-            req.setTemplateId(TEMPLATE_REPORT_APPROVE_APPLY);
-            JSONObject json = new JSONObject();
+            if(timeType.getNeedEvaluate()==1){
+                req.setTemplateId(TEMPLATE_REPORT_APPROVE_APPLY_EVALUATE);
+                json.put("evaluate",evaluate);
+            }else {
+                req.setTemplateId(TEMPLATE_REPORT_APPROVE_APPLY);
+            }
             json.put("auditor",auditorName);
             json.put("auditor",auditorName);
-            json.put("evaluate",evaluate);
             json.put("date", "" + df.format(date));
             json.put("date", "" + df.format(date));
             json.put("APPID", "" + appId);
             json.put("APPID", "" + appId);
             json.put("CORPID", dingding.getCorpid());
             json.put("CORPID", dingding.getCorpid());

+ 13 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/DepartmentServiceImpl.java

@@ -952,6 +952,19 @@ public class DepartmentServiceImpl extends ServiceImpl<DepartmentMapper, Departm
         return httpRespMsg;
         return httpRespMsg;
     }
     }
 
 
+    @Override
+    public List<Integer> getDeptIncludeSubDeptIds(Integer departmentId, List<Department> allDeptList) {
+        List<Integer> list = new ArrayList<>();
+        list.add(departmentId);
+        //搜到子部门进行添加
+        for (Department department : allDeptList) {
+            if (departmentId.equals(department.getSuperiorId())) {
+                list.addAll(getBranchDepartment(department.getDepartmentId(), allDeptList));
+            }
+        }
+        return list;
+    }
+
 
 
     private void fillDeptUser(List<DepartmentVO> list, List<HashMap> userList) {
     private void fillDeptUser(List<DepartmentVO> list, List<HashMap> userList) {
         list.forEach(l->{
         list.forEach(l->{

+ 67 - 10
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectServiceImpl.java

@@ -305,6 +305,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                 if(optional.isPresent()){
                 if(optional.isPresent()){
                     projectVO.setDepartmentName(optional.get().getDepartmentName());
                     projectVO.setDepartmentName(optional.get().getDepartmentName());
                 }
                 }
+                /**/
                 projectVO.setParticipator(participationMapper.getParticipator(projectVO.getId()));
                 projectVO.setParticipator(participationMapper.getParticipator(projectVO.getId()));
                 Optional<User> first = userList.stream().filter(u -> u.getId().equals(project.getInchargerId())).findFirst();
                 Optional<User> first = userList.stream().filter(u -> u.getId().equals(project.getInchargerId())).findFirst();
                 if (first.isPresent()) {
                 if (first.isPresent()) {
@@ -978,7 +979,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                 httpRespMsg.data = resultMap;
                 httpRespMsg.data = resultMap;
 
 
             } else {
             } else {
-                List<Map<String, Object>> list = projectMapper.getTimeCost(companyId, startDate, endDate, null, userId,deptIds);
+                List<Map<String, Object>> list = projectMapper.getTimeCost(companyId, startDate, endDate, null, userId,deptIds,null);
                 BigDecimal totalMoneyCost = BigDecimal.valueOf(0);
                 BigDecimal totalMoneyCost = BigDecimal.valueOf(0);
                 for (Map<String, Object> map : list) {
                 for (Map<String, Object> map : list) {
                     if (!map.containsKey("cost")) {
                     if (!map.containsKey("cost")) {
@@ -1017,7 +1018,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
 
 
     //导出查询者所在公司每个项目的工时成本,包括项目人员明细统计
     //导出查询者所在公司每个项目的工时成本,包括项目人员明细统计
     @Override
     @Override
-    public HttpRespMsg exportTimeCost(String startDate, String endDate,Integer projectId, String userId, Boolean projectSum,Integer type, HttpServletRequest request) {
+    public HttpRespMsg exportTimeCost(String startDate, String endDate,Integer projectId, String userId, Boolean projectSum,Integer type,Integer deptId, HttpServletRequest request) {
         HttpRespMsg httpRespMsg = new HttpRespMsg();
         HttpRespMsg httpRespMsg = new HttpRespMsg();
         try {
         try {
             User targetUser = userMapper.selectById(request.getHeader("Token"));
             User targetUser = userMapper.selectById(request.getHeader("Token"));
@@ -1026,12 +1027,17 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
             //当前用户管理部门
             //当前用户管理部门
             List<Integer> deptIds=null;
             List<Integer> deptIds=null;
             List<Department> departmentList = departmentMapper.selectList(new QueryWrapper<Department>().eq("manager_id", targetUser.getId()).eq("company_id", companyId));
             List<Department> departmentList = departmentMapper.selectList(new QueryWrapper<Department>().eq("manager_id", targetUser.getId()).eq("company_id", companyId));
+            List<Department> allDepartmentList = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id", targetUser.getCompanyId()));
             List<DepartmentOtherManager> departmentOtherManagerList = departmentOtherManagerMapper.selectList(new QueryWrapper<DepartmentOtherManager>().eq("other_manager_id", targetUser.getId()));
             List<DepartmentOtherManager> departmentOtherManagerList = departmentOtherManagerMapper.selectList(new QueryWrapper<DepartmentOtherManager>().eq("other_manager_id", targetUser.getId()));
             List<SysRichFunction> functionAllList = sysFunctionMapper.getRoleFunctions(targetUser.getRoleId(), "查看全公司");
             List<SysRichFunction> functionAllList = sysFunctionMapper.getRoleFunctions(targetUser.getRoleId(), "查看全公司");
             List<SysRichFunction> functionDpartList = sysFunctionMapper.getRoleFunctions(targetUser.getRoleId(), "查看负责部门");
             List<SysRichFunction> functionDpartList = sysFunctionMapper.getRoleFunctions(targetUser.getRoleId(), "查看负责部门");
             List<SysRichFunction> functionTimeList = sysFunctionMapper.getRoleFunctions(targetUser.getRoleId(), "查看工时统计");
             List<SysRichFunction> functionTimeList = sysFunctionMapper.getRoleFunctions(targetUser.getRoleId(), "查看工时统计");
             List<SysRichFunction> functionCostList = sysFunctionMapper.getRoleFunctions(targetUser.getRoleId(), "查看成本统计");
             List<SysRichFunction> functionCostList = sysFunctionMapper.getRoleFunctions(targetUser.getRoleId(), "查看成本统计");
             //判断查看权限
             //判断查看权限
+            List<Integer> filterDeptIds=null;
+            if(deptId!=null){
+                filterDeptIds= getBranchDepartment(deptId, allDepartmentList);
+            }
             if(functionAllList.size()==0){
             if(functionAllList.size()==0){
                 deptIds=new ArrayList<>();
                 deptIds=new ArrayList<>();
                 deptIds.add(-1);
                 deptIds.add(-1);
@@ -1040,11 +1046,27 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                         List<Integer> collect = departmentList.stream().map(dp -> dp.getDepartmentId()).distinct().collect(Collectors.toList());
                         List<Integer> collect = departmentList.stream().map(dp -> dp.getDepartmentId()).distinct().collect(Collectors.toList());
                         List<Integer> otherCollect = departmentOtherManagerList.stream().distinct().map(dom -> dom.getDepartmentId()).collect(Collectors.toList());
                         List<Integer> otherCollect = departmentOtherManagerList.stream().distinct().map(dom -> dom.getDepartmentId()).collect(Collectors.toList());
                         collect.addAll(otherCollect);
                         collect.addAll(otherCollect);
-                        deptIds.addAll(otherCollect);
+                        for (Integer integer : collect) {
+                            List<Integer> branchDepartment = getBranchDepartment(integer, allDepartmentList);
+                            deptIds.addAll(branchDepartment);
+                        }
+                    }
+                }
+                //没有查看全公司的权限 只能先判断当前部门/父级别是否在负责部门才能获取数据
+                if(deptId!=null){
+                    Optional<Department> first = allDepartmentList.stream().filter(ad -> ad.getDepartmentId().equals(deptId)).findFirst();
+                    if(first.isPresent()){
+                        if(deptIds.contains(first.get().getSuperiorId())||deptIds.contains(deptId)){
+                            filterDeptIds= getBranchDepartment(deptId,allDepartmentList);
+                        }else {
+                            filterDeptIds=new ArrayList<>();
+                            filterDeptIds.add(-1);
+                        }
                     }
                     }
                 }
                 }
             }
             }
-            List<Map<String, Object>> list = projectMapper.getTimeCost(companyId, startDate, endDate, projectId, userId,deptIds);
+            System.out.println(filterDeptIds);
+            List<Map<String, Object>> list = projectMapper.getTimeCost(companyId, startDate, endDate, projectId, userId,deptIds,filterDeptIds);
             BigDecimal totalMoneyCost = BigDecimal.valueOf(0);
             BigDecimal totalMoneyCost = BigDecimal.valueOf(0);
             List<List<String>> allList=null ;
             List<List<String>> allList=null ;
             List<String> sumRow = null;
             List<String> sumRow = null;
@@ -1091,7 +1113,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                     }
                     }
                     //统计每个项目中的人员时间成本投入
                     //统计每个项目中的人员时间成本投入
                     int curProjectId = (Integer)map.get("id");
                     int curProjectId = (Integer)map.get("id");
-                    List<Map<String, Object>> membList = projectMapper.getProjectCost(companyId,startDate, endDate, curProjectId, userId);
+                    List<Map<String, Object>> membList = projectMapper.getProjectCost(companyId,startDate, endDate, curProjectId, userId,deptIds,filterDeptIds);
                     map.put("membList", membList);
                     map.put("membList", membList);
                     for (Map<String, Object> membMap : membList) {
                     for (Map<String, Object> membMap : membList) {
                         double pTotalTime = 0;
                         double pTotalTime = 0;
@@ -1360,7 +1382,36 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
     public HttpRespMsg getProjectCost(String startDate, String endDate, Integer projectId, HttpServletRequest request) {
     public HttpRespMsg getProjectCost(String startDate, String endDate, Integer projectId, HttpServletRequest request) {
         HttpRespMsg httpRespMsg = new HttpRespMsg();
         HttpRespMsg httpRespMsg = new HttpRespMsg();
         try {
         try {
-            Integer companyId = userMapper.selectById(request.getHeader("Token")).getCompanyId();
+            User targetUser = userMapper.selectById(request.getHeader("Token"));
+            Integer companyId = targetUser.getCompanyId();
+            List<Department> allDepartmentList = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id", companyId));
+            List<Department> departmentList = departmentMapper.selectList(new QueryWrapper<Department>().eq("manager_id", targetUser.getId()).eq("company_id", companyId));
+            List<DepartmentOtherManager> departmentOtherManagerList = departmentOtherManagerMapper.selectList(new QueryWrapper<DepartmentOtherManager>().eq("other_manager_id", targetUser.getId()));
+            List<SysRichFunction> functionAllList = sysFunctionMapper.getRoleFunctions(targetUser.getRoleId(), "查看全公司");
+            List<SysRichFunction> functionDpartList = sysFunctionMapper.getRoleFunctions(targetUser.getRoleId(), "查看负责部门");
+            List<SysRichFunction> functionTimeList = sysFunctionMapper.getRoleFunctions(targetUser.getRoleId(), "查看工时统计");
+            List<SysRichFunction> functionCostList = sysFunctionMapper.getRoleFunctions(targetUser.getRoleId(), "查看成本统计");
+            //判断查看权限
+            List<Integer> deptIds=null;
+            if(functionAllList.size()==0){
+                deptIds=new ArrayList<>();
+                deptIds.add(-1);
+                if(functionDpartList.size()>0){
+                    if(functionTimeList.size()>0||functionCostList.size()>0){
+                        for (Department department : departmentList) {
+                            List<Integer> branchDepartment = getBranchDepartment(department.getDepartmentId(), allDepartmentList);
+                            deptIds.addAll(branchDepartment);
+                        }
+                        List<Integer> collect = departmentList.stream().map(dp -> dp.getDepartmentId()).distinct().collect(Collectors.toList());
+                        List<Integer> otherCollect = departmentOtherManagerList.stream().distinct().map(dom -> dom.getDepartmentId()).collect(Collectors.toList());
+                        collect.addAll(otherCollect);
+                        for (Integer integer : collect) {
+                            List<Integer> branchDepartment = getBranchDepartment(integer, allDepartmentList);
+                            deptIds.addAll(branchDepartment);
+                        }
+                    }
+                }
+            }
             //首先查看有无浏览权限
             //首先查看有无浏览权限
             if (!projectMapper.selectById(projectId).getCompanyId().equals(companyId)) {
             if (!projectMapper.selectById(projectId).getCompanyId().equals(companyId)) {
                 httpRespMsg.setError("无权查看其他公司的项目详情");
                 httpRespMsg.setError("无权查看其他公司的项目详情");
@@ -1368,7 +1419,8 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                 TimeType timeType = timeTypeMapper.selectById(companyId);
                 TimeType timeType = timeTypeMapper.selectById(companyId);
                 if (timeType.getFixMonthcost() == 0) {
                 if (timeType.getFixMonthcost() == 0) {
                     Map<String, Object> resultMap = new HashMap<>();
                     Map<String, Object> resultMap = new HashMap<>();
-                    List<Map<String, Object>> list = projectMapper.getProjectCost(companyId,startDate, endDate, projectId, null);
+                    //数据下 非负责部门人员数据不展示
+                    List<Map<String, Object>> list = projectMapper.getProjectCost(companyId,startDate, endDate, projectId, null,deptIds,null);
                     BigDecimal totalMoneyCost = BigDecimal.valueOf(0);
                     BigDecimal totalMoneyCost = BigDecimal.valueOf(0);
                     for (Map<String, Object> map : list) {
                     for (Map<String, Object> map : list) {
                         if (!map.containsKey("costMoney")) {
                         if (!map.containsKey("costMoney")) {
@@ -1385,7 +1437,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                     endDate = endDate + "-31";
                     endDate = endDate + "-31";
                     List<Map<String, Object>> userMonthTimeCostList = projectMapper.getUserMonthTimeCost(companyId, startDate+"-01", endDate+"-31");
                     List<Map<String, Object>> userMonthTimeCostList = projectMapper.getUserMonthTimeCost(companyId, startDate+"-01", endDate+"-31");
 
 
-                    List<Map<String, Object>> list = projectMapper.getProjectCost(companyId,startDate, endDate, projectId, null);
+                    List<Map<String, Object>> list = projectMapper.getProjectCost(companyId,startDate, endDate, projectId, null,deptIds,null);
 
 
                     //检查财务表中是否已经导入成本
                     //检查财务表中是否已经导入成本
                     List<Finance> financeList = financeMapper.selectList(new QueryWrapper<Finance>().eq("ymonth", startDate).eq("company_id", companyId));
                     List<Finance> financeList = financeMapper.selectList(new QueryWrapper<Finance>().eq("ymonth", startDate).eq("company_id", companyId));
@@ -2197,7 +2249,8 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                 String start_date = sdf.format((Date) map.get("start_date"));
                 String start_date = sdf.format((Date) map.get("start_date"));
                 String end_date = sdf.format((Date) map.get("end_date"));
                 String end_date = sdf.format((Date) map.get("end_date"));
                 String projectId = ""+ (Integer) map.get("id");
                 String projectId = ""+ (Integer) map.get("id");
-                String exeId = "任务"+ (Integer) map.get("exe_id");
+                System.out.println(map);
+                String exeId = "任务_"+map.get("task_id") +"_"+ (type==0?(Integer) map.get("exe_id"):userId);
                 String taskId = ""+ (Integer) map.get("task_id");
                 String taskId = ""+ (Integer) map.get("task_id");
 
 
                 GanttDataItem curItem = new GanttDataItem();;
                 GanttDataItem curItem = new GanttDataItem();;
@@ -4212,6 +4265,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
             Map<String, Object> resultMap = new HashMap<>();
             Map<String, Object> resultMap = new HashMap<>();
             //当前用户管理部门
             //当前用户管理部门
             List<Integer> deptIds=null;
             List<Integer> deptIds=null;
+            List<Department> allDepartmentList = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id", companyId));
             List<Department> departmentList = departmentMapper.selectList(new QueryWrapper<Department>().eq("manager_id", targetUser.getId()).eq("company_id", companyId));
             List<Department> departmentList = departmentMapper.selectList(new QueryWrapper<Department>().eq("manager_id", targetUser.getId()).eq("company_id", companyId));
             List<DepartmentOtherManager> departmentOtherManagerList = departmentOtherManagerMapper.selectList(new QueryWrapper<DepartmentOtherManager>().eq("other_manager_id", targetUser.getId()));
             List<DepartmentOtherManager> departmentOtherManagerList = departmentOtherManagerMapper.selectList(new QueryWrapper<DepartmentOtherManager>().eq("other_manager_id", targetUser.getId()));
             List<SysRichFunction> functionAllList = sysFunctionMapper.getRoleFunctions(targetUser.getRoleId(), "查看全公司");
             List<SysRichFunction> functionAllList = sysFunctionMapper.getRoleFunctions(targetUser.getRoleId(), "查看全公司");
@@ -4227,7 +4281,10 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                         List<Integer> collect  = departmentList.stream().map(dp -> dp.getDepartmentId()).distinct().collect(Collectors.toList());
                         List<Integer> collect  = departmentList.stream().map(dp -> dp.getDepartmentId()).distinct().collect(Collectors.toList());
                         List<Integer> otherCollect = departmentOtherManagerList.stream().distinct().map(dom -> dom.getDepartmentId()).collect(Collectors.toList());
                         List<Integer> otherCollect = departmentOtherManagerList.stream().distinct().map(dom -> dom.getDepartmentId()).collect(Collectors.toList());
                         collect.addAll(otherCollect);
                         collect.addAll(otherCollect);
-                        deptIds.addAll(collect);
+                        for (Integer integer : collect) {
+                            List<Integer> branchDepartment = getBranchDepartment(integer, allDepartmentList);
+                            deptIds.addAll(branchDepartment);
+                        }
                     }
                     }
                 }
                 }
             }
             }

+ 48 - 13
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java

@@ -219,9 +219,23 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                 List<Integer> allVisibleDeptIdList = getAllVisibleDeptIdList(user, null);
                 List<Integer> allVisibleDeptIdList = getAllVisibleDeptIdList(user, null);
                 //需要看可见部门(部门主要负责人和其他负责人以及查看本部门工时权限)所有人员的日报
                 //需要看可见部门(部门主要负责人和其他负责人以及查看本部门工时权限)所有人员的日报
                 if (allVisibleDeptIdList.size() > 0) {
                 if (allVisibleDeptIdList.size() > 0) {
-                    nameList = reportMapper.getReportNameByDateAndDept(date,
-                            allVisibleDeptIdList, targetUid, null);
-
+                    for (Integer ids : allVisibleDeptIdList) {
+                        System.out.println(ids);
+                    }
+                    if (nameList.size() > 0) {
+                        //自己填写的日报
+                        List<Map<String, Object>> deptNameList = reportMapper.getReportNameByDateAndDept(date,
+                                allVisibleDeptIdList, targetUid, null);
+                        for (Map<String, Object> deptNameItem : deptNameList) {
+                            if (!deptNameItem.get("id").equals(user.getId())) {
+                                nameList.add(deptNameItem);
+                            }
+                        }
+                    } else {
+                        nameList = reportMapper.getReportNameByDateAndDept(date,
+                                allVisibleDeptIdList, targetUid, null);
+                    }
+                    System.out.println("有可见部门==="+nameList.size());
                     if (nameList.size() > 0) {
                     if (nameList.size() > 0) {
                         List<String> userIds = new ArrayList<>();
                         List<String> userIds = new ArrayList<>();
                         nameList.forEach(n->{
                         nameList.forEach(n->{
@@ -1393,10 +1407,14 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                             JSONArray dataJson=new JSONArray();
                             JSONArray dataJson=new JSONArray();
                             JSONObject item=new JSONObject();
                             JSONObject item=new JSONObject();
                             item.put("审核人",user.getName());
                             item.put("审核人",user.getName());
-                            item.put("评价",report.getEvaluate());
+                            if(timeType.getNeedEvaluate()==1){
+                                item.put("评价",report.getEvaluate());
+                                json.put("template_id","tty9TkCAAAWoUyhGnXRCZuhkgCqw_Uow");
+                            }else {
+                                json.put("template_id","tty9TkCAAANpvEtLrkPUGeOEd1-U7W2w");
+                            }
                             item.put("填报日期",report.getCreateDate());
                             item.put("填报日期",report.getCreateDate());
                             dataJson.add(item);
                             dataJson.add(item);
-                            json.put("template_id","tty9TkCAAAWoUyhGnXRCZuhkgCqw_Uow");
                             json.put("url","https://open.weixin.qq.com/connect/oauth2/authorize?appid=ww4e237fd6abb635af&redirect_uri=http://mobworktime.ttkuaiban.com/api/corpWXAuth&response_type=code&scope=snsapi_base&state=0#wechat_redirect");
                             json.put("url","https://open.weixin.qq.com/connect/oauth2/authorize?appid=ww4e237fd6abb635af&redirect_uri=http://mobworktime.ttkuaiban.com/api/corpWXAuth&response_type=code&scope=snsapi_base&state=0#wechat_redirect");
                             json.put("content_item",dataJson);
                             json.put("content_item",dataJson);
                             wxCorpInfoService.sendWXCorpTemplateMsg(wxCorpInfoList.get(0),u.getCorpwxUserid(),json);
                             wxCorpInfoService.sendWXCorpTemplateMsg(wxCorpInfoList.get(0),u.getCorpwxUserid(),json);
@@ -3300,6 +3318,12 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                 }
                 }
                 allReportByDate = dealDataList;
                 allReportByDate = dealDataList;
             }
             }
+            //HSSFRow条数范围限制0..65535
+            if (allReportByDate.size() > 60000) {
+                HttpRespMsg msg = new HttpRespMsg();
+                msg.setError("数据量过大,请分时间段导出");
+                return msg;
+            }
             DecimalFormat df = new DecimalFormat("#0.0");
             DecimalFormat df = new DecimalFormat("#0.0");
             for (Map<String, Object> map : allReportByDate) {
             for (Map<String, Object> map : allReportByDate) {
                 HSSFRow row = sheet.createRow(rowNum);
                 HSSFRow row = sheet.createRow(rowNum);
@@ -3910,15 +3934,26 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
         if(thirdPartyInterfaceList.size()==0){
         if(thirdPartyInterfaceList.size()==0){
             msg.setError("token错误");
             msg.setError("token错误");
         }
         }
-        for (ThirdPartyInterface thirdPartyInterface : thirdPartyInterfaceList){
-            if(LocalDateTime.now().isAfter(thirdPartyInterface.getExpireTime())){
-                msg.setError("token过期失效");
-                return msg;
-            }
-            if(token.equals(thirdPartyInterface.getToken())){
-                List<HashMap<String, Object>> allReportByDate = reportMapper.getAllReportByDate(startDate,thirdPartyInterface.getComapnyId(), null, endDate, null, null, null);
-                msg.data=allReportByDate;
+        ThirdPartyInterface thirdPartyInterface = thirdPartyInterfaceList.get(0);
+        List<ReportLog> reportLogList = reportLogMapper.selectList(new QueryWrapper<ReportLog>().eq("company_id", thirdPartyInterface.getComapnyId()).orderByAsc("operate_date"));
+        if(LocalDateTime.now().isAfter(thirdPartyInterface.getExpireTime())){
+            msg.setError("token过期失效");
+            return msg;
+        }
+        if(token.equals(thirdPartyInterface.getToken())){
+            List<HashMap<String, Object>> allReportByDate = reportMapper.getAllReportByDate(startDate,thirdPartyInterface.getComapnyId(), null, endDate, null, null, null);
+            for (HashMap<String, Object> map : allReportByDate) {
+                List<ReportLog> item=new ArrayList<>();
+                Integer reportId = (Integer) map.get("id");
+                for (ReportLog reportLog : reportLogList) {
+                    List<String> list = Arrays.asList(reportLog.getReportIds().split(","));
+                    if(list.contains(String.valueOf(reportId))&&!reportLog.getMsg().contains("提交")){
+                         item.add(reportLog);
+                    }
+                }
+                map.put("checkLog",item);
             }
             }
+            msg.data=allReportByDate;
         }
         }
         return msg;
         return msg;
     }
     }

+ 17 - 5
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/UserServiceImpl.java

@@ -674,13 +674,14 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
     @Override
     @Override
     public HttpRespMsg insertUser(String targetId, String name, String phone, Integer roleId, Double monthCost, Double cost,
     public HttpRespMsg insertUser(String targetId, String name, String phone, Integer roleId, Double monthCost, Double cost,
                                   Integer departmentId, Integer salaryType, String costApplyDate, String position, String certJson, HttpServletRequest request,String inductionDate,
                                   Integer departmentId, Integer salaryType, String costApplyDate, String position, String certJson, HttpServletRequest request,String inductionDate,
-                                  String superiorId,   String plate1,String plate2,String plate3,String plate4,String plate5) {
+                                  String superiorId,   String plate1,String plate2,String plate3,String plate4,String plate5, String jobNumber) {
         HttpRespMsg httpRespMsg = new HttpRespMsg();
         HttpRespMsg httpRespMsg = new HttpRespMsg();
         DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd");
         DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd");
         try {
         try {
             User creator = userMapper.selectById(request.getHeader("Token"));
             User creator = userMapper.selectById(request.getHeader("Token"));
             if (name != null) name = name.trim();
             if (name != null) name = name.trim();
             if (phone != null) phone = phone.trim();
             if (phone != null) phone = phone.trim();
+            if (jobNumber != null) jobNumber = jobNumber.trim();
             //处理时薪
             //处理时薪
             BigDecimal costValue = cost == null ? BigDecimal.valueOf(0) : BigDecimal.valueOf(cost);
             BigDecimal costValue = cost == null ? BigDecimal.valueOf(0) : BigDecimal.valueOf(cost);
             BigDecimal monthCostValue = (monthCost == null ? BigDecimal.valueOf(0) : BigDecimal.valueOf(monthCost));
             BigDecimal monthCostValue = (monthCost == null ? BigDecimal.valueOf(0) : BigDecimal.valueOf(monthCost));
@@ -696,6 +697,11 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
                             (companyMapper.selectById(creator.getCompanyId()).getStaffCountMax())) {
                             (companyMapper.selectById(creator.getCompanyId()).getStaffCountMax())) {
                         httpRespMsg.setError("公司人员已达上限");
                         httpRespMsg.setError("公司人员已达上限");
                     } else {
                     } else {
+                        //检查本公司内工号是否重复
+                        if (!StringUtils.isEmpty(jobNumber) && userMapper.selectList(new QueryWrapper<User>().eq("company_id", creator.getCompanyId()).eq("job_number", jobNumber)).size() > 0) {
+                            httpRespMsg.setError("该工号已存在");
+                            return httpRespMsg;
+                        }
                         Long id = SnowFlake.nextId();
                         Long id = SnowFlake.nextId();
                         User user = new User()
                         User user = new User()
                                 .setId(id.toString())
                                 .setId(id.toString())
@@ -720,7 +726,8 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
                                 .setPlate2(plate2)
                                 .setPlate2(plate2)
                                 .setPlate3(plate3)
                                 .setPlate3(plate3)
                                 .setPlate4(plate4)
                                 .setPlate4(plate4)
-                                .setPlate5(plate5);
+                                .setPlate5(plate5)
+                                .setJobNumber(jobNumber);
                         if(inductionDate!=null&&inductionDate!=""){
                         if(inductionDate!=null&&inductionDate!=""){
                             user.setInductionDate(LocalDate.parse(inductionDate,dtf));
                             user.setInductionDate(LocalDate.parse(inductionDate,dtf));
                         }
                         }
@@ -747,7 +754,11 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
                     httpRespMsg.setError("该电话号码已存在");
                     httpRespMsg.setError("该电话号码已存在");
                     return httpRespMsg;
                     return httpRespMsg;
                 }
                 }
-
+                //检查本公司内工号是否重复
+                if (!StringUtils.isEmpty(jobNumber) && userMapper.selectList(new QueryWrapper<User>().eq("company_id", creator.getCompanyId()).eq("job_number", jobNumber).ne("id", targetId)).size() > 0) {
+                    httpRespMsg.setError("该工号已存在");
+                    return httpRespMsg;
+                }
                 User oldUser = userMapper.selectById(targetId);
                 User oldUser = userMapper.selectById(targetId);
                 boolean salaryChange = false;
                 boolean salaryChange = false;
 
 
@@ -784,7 +795,8 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
                         .setPlate2(plate2)
                         .setPlate2(plate2)
                         .setPlate3(plate3)
                         .setPlate3(plate3)
                         .setPlate4(plate4)
                         .setPlate4(plate4)
-                        .setPlate5(plate5));
+                        .setPlate5(plate5)
+                        .setJobNumber(jobNumber));
                 if (salaryChange) {
                 if (salaryChange) {
                     UserSalary userSalary = UserSalary.copyFromUser(oldUser);
                     UserSalary userSalary = UserSalary.copyFromUser(oldUser);
                     userSalaryMapper.insert(userSalary);
                     userSalaryMapper.insert(userSalary);
@@ -1769,7 +1781,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
         HttpRespMsg msg = new HttpRespMsg();
         HttpRespMsg msg = new HttpRespMsg();
         String token = request.getHeader("TOKEN");
         String token = request.getHeader("TOKEN");
         User user = userMapper.selectById(token);
         User user = userMapper.selectById(token);
-        List<User> userList = userMapper.selectList(new QueryWrapper<User>().select("id, name, phone").eq("company_id", user.getCompanyId()).eq("is_active", 1));
+        List<User> userList = userMapper.selectList(new QueryWrapper<User>().select("id, name, phone, job_number").eq("company_id", user.getCompanyId()).eq("is_active", 1));
         msg.data = userList;
         msg.data = userList;
         return msg;
         return msg;
     }
     }

+ 33 - 7
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ProjectMapper.xml

@@ -136,13 +136,23 @@
         <if test="startDate != null and endDate != null">
         <if test="startDate != null and endDate != null">
             AND b.create_date between #{startDate} and #{endDate}
             AND b.create_date between #{startDate} and #{endDate}
         </if>
         </if>
-        <if test="deptIds!=null and deptIds.size()>0">
-            and b.dept_id in
-            <foreach collection="deptIds" open="(" item="item" separator="," close=")">
-                #{item}
-            </foreach>
-        </if>
-        AND b.state = 1
+        <choose>
+            <when test="filterDeptIds!=null and filterDeptIds.size()>0">
+                and b.dept_id in
+                <foreach collection="filterDeptIds" open="(" item="item" separator="," close=")">
+                    #{item}
+                </foreach>
+            </when>
+            <otherwise>
+                <if test="deptIds!=null and deptIds.size()>0">
+                    and b.dept_id in
+                    <foreach collection="deptIds" open="(" item="item" separator="," close=")">
+                        #{item}
+                    </foreach>
+                </if>
+            </otherwise>
+        </choose>
+        AND (b.state = 1 or b.state=0)
         GROUP BY a.id
         GROUP BY a.id
         ORDER BY a.id ASC
         ORDER BY a.id ASC
     </select>
     </select>
@@ -280,6 +290,22 @@
         <if test="userId != null">
         <if test="userId != null">
             AND a.creator_id = #{userId}
             AND a.creator_id = #{userId}
         </if>
         </if>
+        <choose>
+            <when test="filterDeptIds!=null and filterDeptIds.size()>0">
+                and a.dept_id in
+                <foreach collection="filterDeptIds" open="(" item="item" separator="," close=")">
+                    #{item}
+                </foreach>
+            </when>
+            <otherwise>
+                <if test="deptIds!=null and deptIds.size()>0">
+                    and a.dept_id in
+                    <foreach collection="deptIds" open="(" item="item" separator="," close=")">
+                        #{item}
+                    </foreach>
+                </if>
+            </otherwise>
+        </choose>
         GROUP BY b.id, a.dept_id
         GROUP BY b.id, a.dept_id
         ORDER BY b.id ASC, a.dept_id ASC
         ORDER BY b.id ASC, a.dept_id ASC
     </select>
     </select>

+ 5 - 5
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ReportMapper.xml

@@ -56,12 +56,12 @@
 
 
     <!--根据日期获取全部报告信息-->
     <!--根据日期获取全部报告信息-->
     <select id="getAllReportByDate" resultType="java.util.Map">
     <select id="getAllReportByDate" resultType="java.util.Map">
-        SELECT a.id, c.name,c.corpwx_userid as corpwxUserId, b.project_name AS project,b.category_name as categoryName, a.working_time AS duration, a.content, a.create_time AS time, a.create_date as createDate,
-        a.state, a.time_type as timeType, a.cost, a.report_time_type as reportTimeType, a.start_time as startTime,
-        a.end_time as endTime, d.name as subProjectName,a.task_id as taskId, task.name as taskName, a.is_overtime as isOvertime,a.progress as progress,
+        SELECT a.id, c.name,c.corpwx_userid as corpwxUserId, b.project_name AS project,b.category_name as categoryName, a.working_time AS duration, a.content, DATE_FORMAT(a.create_time,'%Y-%m-%d')   AS time,DATE_FORMAT(a.create_date,'%Y-%m-%d') as createDate,
+        a.state, a.time_type as timeType, a.cost, a.report_time_type as reportTimeType,DATE_FORMAT(a.start_time,'%Y-%m-%d')  as startTime,
+        DATE_FORMAT(a.end_time,'%Y-%m-%d')  as endTime, d.name as subProjectName,a.task_id as taskId, task.name as taskName, a.is_overtime as isOvertime,a.progress as progress,
         a.department_audit_state as departmentAuditState, a.stage, a.pic_str as picStr, multi_worktime as multiWorktime
         a.department_audit_state as departmentAuditState, a.stage, a.pic_str as picStr, multi_worktime as multiWorktime
-        , reject_reason as rejectReason, reject_username as rejectUsername, reject_userid as rejectUserid, degree_id as degree_id,report_extra_degree.name as degreeName,task_group.name as groupName,a.group_id as groupId, a.custom_data as customData
-        ,u.name as projectAuditorName, a.project_auditor_id as projectAuditorId, department.department_name as departmentName, a.overtime_hours as overtimeHours, a.custom_text as customText, a.project_audit_time as projectAuditTime,project_main.name as projectMainName
+        , reject_reason as rejectReason, reject_username as rejectUsername, reject_userid as rejectUserid, degree_id as degree_id,report_extra_degree.name as degreeName,task_group.name as groupName,a.group_id as groupId, DATE_FORMAT( a.custom_data,'%Y-%m-%d') as customData
+        ,u.name as projectAuditorName, a.project_auditor_id as projectAuditorId, department.department_name as departmentName, a.overtime_hours as overtimeHours, a.custom_text as customText,DATE_FORMAT( a.project_audit_time,'%Y-%m-%d')  as projectAuditTime,project_main.name as projectMainName
         FROM report AS a
         FROM report AS a
         JOIN project AS b ON a.project_id=b.id
         JOIN project AS b ON a.project_id=b.id
         LEFT JOIN user AS c ON a.creator_id=c.id
         LEFT JOIN user AS c ON a.creator_id=c.id

+ 8 - 4
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/UserMapper.xml

@@ -37,6 +37,8 @@
         <result column="plate3" property="plate3" />
         <result column="plate3" property="plate3" />
         <result column="plate4" property="plate4" />
         <result column="plate4" property="plate4" />
         <result column="plate5" property="plate5" />
         <result column="plate5" property="plate5" />
+        <result column="is_ops" property="isOps" />
+        <result column="job_number" property="jobNumber" />
     </resultMap>
     </resultMap>
     <resultMap id="BaseResultMap2" type="com.management.platform.entity.User">
     <resultMap id="BaseResultMap2" type="com.management.platform.entity.User">
         <id column="id" property="id" />
         <id column="id" property="id" />
@@ -46,13 +48,14 @@
     </resultMap>
     </resultMap>
     <!-- 通用查询结果列 -->
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
     <sql id="Base_Column_List">
-        id, name, phone, password, portrait_url, create_time, role, company_id, department_id, department_cascade, cost, month_cost, salary_type, manage_dept_id, color, is_active, wx_openid, role_id, role_name, cost_apply_date, dingding_userid, dingding_unionid, corpwx_userid, induction_date, inactive_date, position, report_status, superior_id, plate1, plate2, plate3, plate4, plate5
+        id, name, phone, password, portrait_url, create_time, role, company_id, department_id, department_cascade, cost, month_cost, salary_type, manage_dept_id, color, is_active, wx_openid, role_id, role_name, cost_apply_date, dingding_userid, dingding_unionid, corpwx_userid, induction_date, inactive_date, position, report_status, superior_id, plate1, plate2, plate3, plate4, plate5, is_ops, job_number
     </sql>
     </sql>
     <!--单独分页获取人员-->
     <!--单独分页获取人员-->
     <select id="getUserByDepartment" resultType="java.util.Map">
     <select id="getUserByDepartment" resultType="java.util.Map">
         SELECT a.id, a.role_id as roleId, a.role_name as roleName, a.name, a.phone, a.portrait_url AS portraitUrl, a.role, a.company_id AS companyId, a.cost,
         SELECT a.id, a.role_id as roleId, a.role_name as roleName, a.name, a.phone, a.portrait_url AS portraitUrl, a.role, a.company_id AS companyId, a.cost,
         a.department_id AS departmentId, b.department_name AS departmentName, a.department_cascade AS departmentCascade,
         a.department_id AS departmentId, b.department_name AS departmentName, a.department_cascade AS departmentCascade,
-        a.month_cost as monthCost, a.salary_type as salaryType, a.is_active as isActive,date_format(a.`inactive_date`, '%Y-%m-%d') AS inactiveDate, a.cost_apply_date as costApplyDate,a.plate1,a.plate2,a.plate3,a.plate4,a.plate5
+        a.month_cost as monthCost, a.salary_type as salaryType, a.is_active as isActive,date_format(a.`inactive_date`, '%Y-%m-%d') AS inactiveDate, a.cost_apply_date as costApplyDate,a.plate1,a.plate2,a.plate3,a.plate4,a.plate5,
+        a.job_number as jobNumber
         FROM user AS a
         FROM user AS a
         LEFT JOIN department AS b ON a.department_id = b.department_id
         LEFT JOIN department AS b ON a.department_id = b.department_id
         WHERE a.company_id = #{companyId}
         WHERE a.company_id = #{companyId}
@@ -74,7 +77,8 @@
     <select id="getUserByDepartmentList" resultType="java.util.Map">
     <select id="getUserByDepartmentList" resultType="java.util.Map">
         SELECT a.id,  a.role_id as roleId, a.role_name as roleName,  a.name, a.phone, a.portrait_url AS portraitUrl, a.role, a.company_id AS companyId, a.cost,
         SELECT a.id,  a.role_id as roleId, a.role_name as roleName,  a.name, a.phone, a.portrait_url AS portraitUrl, a.role, a.company_id AS companyId, a.cost,
         a.department_id AS departmentId, b.department_name AS departmentName, a.department_cascade AS departmentCascade,
         a.department_id AS departmentId, b.department_name AS departmentName, a.department_cascade AS departmentCascade,
-        a.month_cost as monthCost, a.salary_type as salaryType, a.is_active as isActive,date_format(a.`inactive_date`, '%Y-%m-%d') AS inactiveDate, a.cost_apply_date as costApplyDate,a.plate1,a.plate2,a.plate3,a.plate4,a.plate5
+        a.month_cost as monthCost, a.salary_type as salaryType, a.is_active as isActive,date_format(a.`inactive_date`, '%Y-%m-%d') AS inactiveDate, a.cost_apply_date as costApplyDate,a.plate1,a.plate2,a.plate3,a.plate4,a.plate5,
+        a.job_number as jobNumber
         FROM user AS a
         FROM user AS a
         LEFT JOIN department AS b ON a.department_id = b.department_id
         LEFT JOIN department AS b ON a.department_id = b.department_id
         WHERE a.company_id = #{companyId} AND a.department_id IN
         WHERE a.company_id = #{companyId} AND a.department_id IN
@@ -136,7 +140,7 @@
         AND a.id in (select user_id from participation where project_id = #{projectId})
         AND a.id in (select user_id from participation where project_id = #{projectId})
     </select>
     </select>
     <select id="getSimpleNameList" resultType="java.util.HashMap">
     <select id="getSimpleNameList" resultType="java.util.HashMap">
-        select id, name from user
+        select id, name, job_number as jobNumber from user
         ${ew.customSqlSegment}
         ${ew.customSqlSegment}
     </select>
     </select>
 
 

BIN
fhKeeper/formulahousekeeper/management-platform/人员导入模板.xlsx


File diff suppressed because it is too large
+ 0 - 52
fhKeeper/formulahousekeeper/management-platform/南京火石闪信网络科技有限公司_财务人员成本模板 (2).xls


BIN
fhKeeper/formulahousekeeper/management-platform/员工项目分摊比例导入模板.xlsx


BIN
fhKeeper/formulahousekeeper/management-platform/导入成本2020.8.xlsx


BIN
fhKeeper/formulahousekeeper/management-platform/导入成本3月份.xlsx


BIN
fhKeeper/formulahousekeeper/management-platform/导入成本6月份(1).xlsx


BIN
fhKeeper/formulahousekeeper/management-platform/工时统计表示例.xlsx


BIN
fhKeeper/formulahousekeeper/management-platform/成都项目导入模板 (1).xlsx


BIN
fhKeeper/formulahousekeeper/management-platform/新增客户导入模板.xlsx


BIN
fhKeeper/formulahousekeeper/management-platform/新版任务模板.xlsx


BIN
fhKeeper/formulahousekeeper/management-platform/研究中心导入模板.xlsx


BIN
fhKeeper/formulahousekeeper/management-platform/财务人员成本模板 (1)(1).xlsx


BIN
fhKeeper/formulahousekeeper/management-platform/财务人员成本模板 (1).xlsx


BIN
fhKeeper/formulahousekeeper/management-platform/财务人员成本模板.xlsx


BIN
fhKeeper/formulahousekeeper/management-platform/财务人员成本模板2.xlsx


BIN
fhKeeper/formulahousekeeper/management-platform/财务人员成本模板_已填写.xlsx


BIN
fhKeeper/formulahousekeeper/management-platform/财务人员成本模板_测试.xlsx


BIN
fhKeeper/formulahousekeeper/management-platform/项目任务导入模板.xlsx


BIN
fhKeeper/formulahousekeeper/management-platform/项目导入模板.xlsx


BIN
fhKeeper/formulahousekeeper/management-platform/项目工时统计表.xlsx


+ 8 - 2
fhKeeper/formulahousekeeper/ops-platform/src/main/java/com/management/platform/entity/TimeType.java

@@ -15,7 +15,7 @@ import lombok.experimental.Accessors;
  * </p>
  * </p>
  *
  *
  * @author Seyason
  * @author Seyason
- * @since 2022-08-07
+ * @since 2022-08-08
  */
  */
 @Data
 @Data
 @EqualsAndHashCode(callSuper = false)
 @EqualsAndHashCode(callSuper = false)
@@ -301,7 +301,7 @@ public class TimeType extends Model<TimeType> {
     private Integer needEvaluate;
     private Integer needEvaluate;
 
 
     /**
     /**
-     * 0-未开启 1-开启
+     * 产值  0-未开启 1-开启
      */
      */
     @TableField("output_value_status")
     @TableField("output_value_status")
     private Integer outputValueStatus;
     private Integer outputValueStatus;
@@ -318,6 +318,12 @@ public class TimeType extends Model<TimeType> {
     @TableField("include_weekends")
     @TableField("include_weekends")
     private Integer includeWeekends;
     private Integer includeWeekends;
 
 
+    /**
+     * 从相册选择图片 0-未开启 1-开启
+     */
+    @TableField("chose_from_album")
+    private Integer choseFromAlbum;
+
 
 
     @Override
     @Override
     protected Serializable pkVal() {
     protected Serializable pkVal() {

File diff suppressed because it is too large
+ 2 - 1
fhKeeper/formulahousekeeper/ops-platform/src/main/resources/mapper/TimeTypeMapper.xml


+ 5 - 8
fhKeeper/formulahousekeeper/timesheet/src/views/awayOffice/awayOffice.vue

@@ -186,9 +186,9 @@
                     <div><span style="color: #606266">时间段</span>
                     <div><span style="color: #606266">时间段</span>
                         <el-date-picker v-model="createDate" type="daterange" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期" @change="billss()" value-format="yyyy-MM-dd" placeholder="选择日期" size="small" clearable style="width:280px"></el-date-picker>
                         <el-date-picker v-model="createDate" type="daterange" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期" @change="billss()" value-format="yyyy-MM-dd" placeholder="选择日期" size="small" clearable style="width:280px"></el-date-picker>
                     </div>
                     </div>
-                    <!-- 从顶顶同步按钮 -->
-                    <div style="margin: 0 0 0 20px">
-                        <el-button size="small" type="primary" @click="dingdingClick()">从钉钉同步</el-button>
+                    <!-- 从钉钉同步按钮,只有钉钉的用户并且有查看全部权限的管理员才有同步按钮 -->
+                    <div style="margin: 0 0 0 20px" v-if="userComLis.dingdingUserid != null && permissions.awayOfficeAll">
+                        <el-button size="small" type="primary" @click="dingdingClick()" >从钉钉同步</el-button>
                     </div>
                     </div>
                 </div>
                 </div>
         <!-- 出差列表 -->
         <!-- 出差列表 -->
@@ -249,8 +249,8 @@
                                 <el-button icon="el-icon-close" circle size="mini"  @click="deny(scope.row)"></el-button>
                                 <el-button icon="el-icon-close" circle size="mini"  @click="deny(scope.row)"></el-button>
                             </div>
                             </div>
                             <div v-if="!isAuditList">
                             <div v-if="!isAuditList">
-                                <el-button v-if="!isAuditList && ((scope.row.status != 0 && scope.row.ownerId == user.id) || permissions.leaveAll)" icon="el-icon-delete" circle size="mini"  @click="deletes(scope.row)"></el-button>
-                                <el-button v-if="((scope.row.status != 0 && scope.row.ownerId == user.id) || permissions.leaveAll) || scope.row.status == 1" icon="el-icon-edit" circle size="mini" @click="editor(scope.row)"></el-button>
+                                <el-button v-if="!isAuditList && ((scope.row.status != 0 && scope.row.ownerId == user.id) || permissions.awayOfficeAll)" icon="el-icon-delete" circle size="mini"  @click="deletes(scope.row)"></el-button>
+                                <el-button v-if="((scope.row.status != 0 && scope.row.ownerId == user.id) || permissions.awayOfficeAll) || scope.row.status == 1" icon="el-icon-edit" circle size="mini" @click="editor(scope.row)"></el-button>
                             </div>
                             </div>
                         </template>
                         </template>
                     </el-table-column>
                     </el-table-column>
@@ -650,8 +650,6 @@ export default {
             displayTable: false,
             displayTable: false,
             formloading: false,
             formloading: false,
             apk: 0,
             apk: 0,
-            // userdata: JSON.parse(sessionStorage.getItem("user")),
-
             permissions: JSON.parse(sessionStorage.getItem("permissions")),
             permissions: JSON.parse(sessionStorage.getItem("permissions")),
             userComLis: JSON.parse(sessionStorage.getItem("user")),
             userComLis: JSON.parse(sessionStorage.getItem("user")),
             addform: {
             addform: {
@@ -813,7 +811,6 @@ export default {
                 let transmissionObj = {}
                 let transmissionObj = {}
                 transmissionObj.userId = this.ownerIdsId
                 transmissionObj.userId = this.ownerIdsId
                 transmissionObj.companyId = this.userComLis.companyId
                 transmissionObj.companyId = this.userComLis.companyId
-                console.log(this.createDateList, '俺看')
                 if(this.createDateList != 'null' && this.createDateList != null) {
                 if(this.createDateList != 'null' && this.createDateList != null) {
                     if(this.createDateList.length > 0) {
                     if(this.createDateList.length > 0) {
                         transmissionObj.startDate = this.createDateList[0]
                         transmissionObj.startDate = this.createDateList[0]

+ 57 - 3
fhKeeper/formulahousekeeper/timesheet/src/views/project/cost.vue

@@ -76,6 +76,12 @@
                     </el-select>
                     </el-select>
                 </el-form-item>
                 </el-form-item>
 
 
+                <el-form-item label="部门选择" v-if="radio == '项目'">
+                    <el-cascader v-model="exportParam.deptId" :options="departmentList" placeholder="请选择部门"
+                        :props="{ checkStrictly: true, expandTrigger: 'hover' }" clearable filterable style="width:350px;"
+                    ></el-cascader>
+                </el-form-item>
+
                 <el-form-item prop="projectCategoryId" label="项目分类" v-if="radio == '项目分类'">
                 <el-form-item prop="projectCategoryId" label="项目分类" v-if="radio == '项目分类'">
                     <el-select v-model="exportParam.projectCategoryId" placeholder="全部项目分类"  clearable style="width:350px;" filterable="true">
                     <el-select v-model="exportParam.projectCategoryId" placeholder="全部项目分类"  clearable style="width:350px;" filterable="true">
                         <el-option v-for="item in categoryList"  :key="item.id" :label="item.name" :value="item.id">
                         <el-option v-for="item in categoryList"  :key="item.id" :label="item.name" :value="item.id">
@@ -131,6 +137,7 @@
                 <el-form-item v-if="(radio == '项目' || radio == '部门' || radio == '项目分类') && exportParam.type == '0'">
                 <el-form-item v-if="(radio == '项目' || radio == '部门' || radio == '项目分类') && exportParam.type == '0'">
                     <el-checkbox v-model="exportParam.projectSum" >含单个项目数据汇总</el-checkbox>
                     <el-checkbox v-model="exportParam.projectSum" >含单个项目数据汇总</el-checkbox>
                 </el-form-item>
                 </el-form-item>
+
             </el-form>
             </el-form>
             <div slot="footer" class="dialog-footer">
             <div slot="footer" class="dialog-footer">
                 <el-button type="primary" @click="exportProjectData" style="width:100%;" >导出</el-button>
                 <el-button type="primary" @click="exportProjectData" style="width:100%;" >导出</el-button>
@@ -174,7 +181,8 @@
                 theCustomListPlant: '',
                 theCustomListPlant: '',
                 customId: '',
                 customId: '',
                 customName: '',
                 customName: '',
-                customList: []
+                customList: [],
+                departmentList: []
             };
             };
         },
         },
         methods: {
         methods: {
@@ -242,6 +250,9 @@
                 if (this.radio == '人员') {
                 if (this.radio == '人员') {
                     // this.exportParam.userIds = [];
                     // this.exportParam.userIds = [];
                 }
                 }
+                if (this.radio == '项目') {
+                    this.exportParam.deptId = []
+                }
             },
             },
             //获取我的项目列表
             //获取我的项目列表
             getMyProjectList() {
             getMyProjectList() {
@@ -259,7 +270,7 @@
                 },
                 },
                 error => {
                 error => {
                     this.$message({
                     this.$message({
-                        message: error,
+                        message: error, 
                         type: "error"
                         type: "error"
                     });
                     });
                 });
                 });
@@ -321,6 +332,11 @@
                     param.customId = this.theCustomListId
                     param.customId = this.theCustomListId
                     param.fieldName = this.theCustomListPlant
                     param.fieldName = this.theCustomListPlant
                 }
                 }
+                if(this.exportParam.deptId) {
+                    if(this.exportParam.deptId.length > 0) {
+                        param.deptId = this.exportParam.deptId[this.exportParam.deptId.length - 1]
+                    }
+                }
                 this.http.post(url, param,
                 this.http.post(url, param,
                     res => {
                     res => {
                         this.listLoading = false;
                         this.listLoading = false;
@@ -1163,7 +1179,44 @@
                         type: 'error'
                         type: 'error'
                     })
                     })
                 })
                 })
-            }
+            },
+            // 获取部门
+            getDepartmentList() {
+                this.http.post( this.port.manage.depList, {},
+                    res => {
+                    if (res.code == "ok") {
+                        let dptlist = JSON.parse(JSON.stringify(res.data));
+                        this.departmentList = this.changeArr(dptlist);
+                    } else {
+                        this.$message({
+                            message: res.msg,
+                            type: "error"
+                        });
+                    }
+                    },error => {
+                    this.$message({
+                        message: error,
+                        type: "error"
+                    });
+                });
+            },
+            changeArr(arr) {
+                for (var i = 0; i < arr.length; i++) {
+                    if(arr[i].id != -1 && arr[i].id != 0) {
+                        if (arr[i].children != null && arr[i].children.length>0) {
+                            arr[i].children = this.changeArr(arr[i].children);
+                        }
+                        arr[i].id && (arr[i].value = arr[i].id);
+                        delete arr[i].id;
+                    }
+                }
+                for(var i in arr) {
+                    if(arr[i].id == -1 || arr[i].id == 0) {
+                        arr.splice(i,1)
+                    }    
+                }
+                return arr;
+            },
         },
         },
         created() {
         created() {
             this.myChart = null
             this.myChart = null
@@ -1217,6 +1270,7 @@
             if(this.user.timeType.userCustomStatic) {
             if(this.user.timeType.userCustomStatic) {
                 this.getZDY()
                 this.getZDY()
             }
             }
+            this.getDepartmentList()
         },
         },
         beforeDestroy () {
         beforeDestroy () {
             var myChart = echarts.init(document.getElementById("container"));
             var myChart = echarts.init(document.getElementById("container"));

+ 6 - 7
fhKeeper/formulahousekeeper/timesheet/src/views/project/info.vue

@@ -129,8 +129,8 @@
                     </div>
                     </div>
                 </div>
                 </div>
 
 
-                <!--项目相关领导 -->
-                <div class="box info" style="margin-top:10px;" >
+                <!--项目相关领导,弃用 -->
+                <!-- <div class="box info" style="margin-top:10px;" >
                     <div><label>相关领导<el-link v-if="user.id == project.creatorId || user.id == project.inchargerId || permissions.projectManagement" @click="showChooseLeaderTree" style="float:right;"><i class="el-icon-edit"  ></i></el-link></label>
                     <div><label>相关领导<el-link v-if="user.id == project.creatorId || user.id == project.inchargerId || permissions.projectManagement" @click="showChooseLeaderTree" style="float:right;"><i class="el-icon-edit"  ></i></el-link></label>
                     
                     
                     </div>
                     </div>
@@ -141,7 +141,7 @@
                         </el-col>
                         </el-col>
                     </el-row>
                     </el-row>
                     
                     
-                </div>
+                </div> -->
 
 
                 <div class="box" style="margin-top:10px;">
                 <div class="box" style="margin-top:10px;">
                     <label>项目统计</label>
                     <label>项目统计</label>
@@ -518,9 +518,8 @@
         </el-dialog>
         </el-dialog>
 
 
         
         
-        <!-- 按部门选择相关领导 -->
-        <el-dialog title="选择相关领导"  v-if="chooseLeaderVisible" :visible.sync="chooseLeaderVisible" :close-on-click-modal="false" customClass="customWidth" width="500px">
-            <!-- <el-input style="width:100%" v-model="filterName" placeholder="请输入姓名搜索" @change="findUserInTree"></el-input> -->
+        <!-- 按部门选择相关领导,弃用 -->
+        <!-- <el-dialog title="选择相关领导"  v-if="chooseLeaderVisible" :visible.sync="chooseLeaderVisible" :close-on-click-modal="false" customClass="customWidth" width="500px">
             <div class="tree" style="height:400px">
             <div class="tree" style="height:400px">
                 <el-scrollbar style="height:100%">
                 <el-scrollbar style="height:100%">
                 <el-tree :data="deptMembData" show-checkbox :props="defaultProps" node-key="id"
                 <el-tree :data="deptMembData" show-checkbox :props="defaultProps" node-key="id"
@@ -533,7 +532,7 @@
                 <el-button  @click="chooseLeaderVisible = false" >取消</el-button>
                 <el-button  @click="chooseLeaderVisible = false" >取消</el-button>
                 <el-button type="primary" @click="chooseLeader()" >确定</el-button>
                 <el-button type="primary" @click="chooseLeader()" >确定</el-button>
             </div>
             </div>
-        </el-dialog>
+        </el-dialog> -->
     </div>
     </div>
 </template>
 </template>
 <style scoped>
 <style scoped>

+ 27 - 24
fhKeeper/formulahousekeeper/timesheet/src/views/project/list.vue

@@ -327,8 +327,12 @@
             </template>
             </template>
             <template v-if="user.company.packageProject && (showColumnWidth != '0' || permissions.projectManagement)">
             <template v-if="user.company.packageProject && (showColumnWidth != '0' || permissions.projectManagement)">
                 <el-button size="small" type="primary" @click="addGroupPerson()" :loading="addGroupPersonBtnLoading">批量添加分组参与人</el-button>
                 <el-button size="small" type="primary" @click="addGroupPerson()" :loading="addGroupPersonBtnLoading">批量添加分组参与人</el-button>
+            </template>
+            <template v-if="(showColumnWidth != '0' || permissions.projectManagement)">
                 <el-button size="small" type="primary" @click="addProPreson()">批量添加项目参与人</el-button>
                 <el-button size="small" type="primary" @click="addProPreson()">批量添加项目参与人</el-button>
+                <!-- <el-button size="small" type="primary" @click="batchDelete()">批量删除项目</el-button> -->
             </template>
             </template>
+            
             <el-pagination
             <el-pagination
                 @size-change="handleSizeChange"
                 @size-change="handleSizeChange"
                 @current-change="handleCurrentChange"
                 @current-change="handleCurrentChange"
@@ -576,11 +580,11 @@
                            </el-table>
                            </el-table>
                        </div>
                        </div>
                     </el-tab-pane>
                     </el-tab-pane>
-                    <el-tab-pane label="相关领导" name="leaders" >
+                    <!-- <el-tab-pane label="相关领导" name="leaders" >
                        <div style="padding-top:10px;">
                        <div style="padding-top:10px;">
                            <el-input @focus="showChooseLeaderTree" v-model="addForm.notifyUserNames" placeholder="请选择需要接收审核通知的相关领导"></el-input>
                            <el-input @focus="showChooseLeaderTree" v-model="addForm.notifyUserNames" placeholder="请选择需要接收审核通知的相关领导"></el-input>
                        </div>
                        </div>
-                    </el-tab-pane>
+                    </el-tab-pane> -->
                     </el-tabs>
                     </el-tabs>
                 </div>
                 </div>
             
             
@@ -859,9 +863,8 @@
             </div>
             </div>
         </el-dialog>
         </el-dialog>
 
 
-        <!-- 按部门选择相关领导 -->
-        <el-dialog title="选择相关领导"  v-if="chooseLeaderVisible" :visible.sync="chooseLeaderVisible" :close-on-click-modal="false" customClass="customWidth" width="500px">
-            <!-- <el-input style="width:100%" v-model="filterName" placeholder="请输入姓名搜索" @change="findUserInTree"></el-input> -->
+        <!-- 按部门选择相关领导,弃用 -->
+        <!-- <el-dialog title="选择相关领导"  v-if="chooseLeaderVisible" :visible.sync="chooseLeaderVisible" :close-on-click-modal="false" customClass="customWidth" width="500px">
             <div class="tree" style="height:400px">
             <div class="tree" style="height:400px">
                 <el-scrollbar style="height:100%">
                 <el-scrollbar style="height:100%">
                 <el-tree :data="deptMembData" show-checkbox :props="defaultProps" node-key="id"
                 <el-tree :data="deptMembData" show-checkbox :props="defaultProps" node-key="id"
@@ -874,7 +877,7 @@
                 <el-button  @click="chooseLeaderVisible = false" >取消</el-button>
                 <el-button  @click="chooseLeaderVisible = false" >取消</el-button>
                 <el-button type="primary" @click="chooseLeader()" >确定</el-button>
                 <el-button type="primary" @click="chooseLeader()" >确定</el-button>
             </div>
             </div>
-        </el-dialog>
+        </el-dialog> -->
 
 
         <!-- 项目专业人员的设置 -->
         <!-- 项目专业人员的设置 -->
         <el-dialog title="设置项目专业人员"  v-if="editPpMembDialog" :visible.sync="editPpMembDialog" :close-on-click-modal="false" customClass="customWidth" width="600px">
         <el-dialog title="设置项目专业人员"  v-if="editPpMembDialog" :visible.sync="editPpMembDialog" :close-on-click-modal="false" customClass="customWidth" width="600px">
@@ -2250,23 +2253,23 @@ a {
             },
             },
 
 
             //选中相关领导
             //选中相关领导
-            chooseLeader() {
-                this.chooseLeaderVisible = false;
-                var chosenList = this.$refs.chooseLeaderTree.getCheckedNodes();
-                var chosenMembList = chosenList.filter(item=>item.isUser == 1);
-                this.addForm.notifyUserNames = '';
-                this.addForm.notifyUserIds = [];
-                this.chosenLeaders = [];
-                for (var i=0;i<chosenMembList.length; i++) {
-                    this.addForm.notifyUserIds.push(chosenMembList[i].id);
-                    this.addForm.notifyUserNames += chosenMembList[i].label+',';
-                    var item = {userId:chosenMembList[i].id, userName:chosenMembList[i].label};
-                    this.chosenLeaders.push(item);
-                }
-                if (this.addForm.notifyUserNames.length > 0) {
-                    this.addForm.notifyUserNames = this.addForm.notifyUserNames.substring(0, this.addForm.notifyUserNames.length-1);
-                }
-            },
+            // chooseLeader() {
+            //     this.chooseLeaderVisible = false;
+            //     var chosenList = this.$refs.chooseLeaderTree.getCheckedNodes();
+            //     var chosenMembList = chosenList.filter(item=>item.isUser == 1);
+            //     this.addForm.notifyUserNames = '';
+            //     this.addForm.notifyUserIds = [];
+            //     this.chosenLeaders = [];
+            //     for (var i=0;i<chosenMembList.length; i++) {
+            //         this.addForm.notifyUserIds.push(chosenMembList[i].id);
+            //         this.addForm.notifyUserNames += chosenMembList[i].label+',';
+            //         var item = {userId:chosenMembList[i].id, userName:chosenMembList[i].label};
+            //         this.chosenLeaders.push(item);
+            //     }
+            //     if (this.addForm.notifyUserNames.length > 0) {
+            //         this.addForm.notifyUserNames = this.addForm.notifyUserNames.substring(0, this.addForm.notifyUserNames.length-1);
+            //     }
+            // },
 
 
             // 获取部门列表
             // 获取部门列表
             getDepartment() {
             getDepartment() {
@@ -3144,7 +3147,7 @@ a {
                         
                         
                     }
                     }
                     //获取项目的相关领导
                     //获取项目的相关领导
-                    this.getProjectNotifyUserList(item.id);
+                    // this.getProjectNotifyUserList(item.id);
                     this.getProjectAutorList(item.id);
                     this.getProjectAutorList(item.id);
                 }
                 }
                 this.addFormVisible = true;
                 this.addFormVisible = true;

+ 15 - 2
fhKeeper/formulahousekeeper/timesheet/src/views/team/index.vue

@@ -145,6 +145,7 @@
                     </template>
                     </template>
                 </el-table-column>
                 </el-table-column>
                 <el-table-column prop="name" label="姓名" ></el-table-column>
                 <el-table-column prop="name" label="姓名" ></el-table-column>
+                <el-table-column prop="jobNumber" label="工号" ></el-table-column>
                 <el-table-column prop="phone" label="手机" width="120"></el-table-column>
                 <el-table-column prop="phone" label="手机" width="120"></el-table-column>
                 <el-table-column prop="departmentName" label="部门" ></el-table-column>
                 <el-table-column prop="departmentName" label="部门" ></el-table-column>
                 <el-table-column label="角色" width="100">
                 <el-table-column label="角色" width="100">
@@ -270,12 +271,15 @@
         <!-- 新增/编辑人员的Dialog -->
         <!-- 新增/编辑人员的Dialog -->
         <el-dialog :title="title" :visible.sync="dialogVisible" width="550px" >
         <el-dialog :title="title" :visible.sync="dialogVisible" width="550px" >
             <el-form ref="form12" :model="insertForm" :rules="rules" label-width="80px">
             <el-form ref="form12" :model="insertForm" :rules="rules" label-width="80px">
-                <el-form-item label="名" prop="name">
+                <el-form-item label="名" prop="name">
                     <el-input v-model="insertForm.name" placeholder="请输入姓名" clearable></el-input>
                     <el-input v-model="insertForm.name" placeholder="请输入姓名" clearable></el-input>
                 </el-form-item>
                 </el-form-item>
                 <el-form-item label="电话" prop="phone">
                 <el-form-item label="电话" prop="phone">
                     <el-input v-model="insertForm.phone" placeholder="请输入电话号码" clearable></el-input>
                     <el-input v-model="insertForm.phone" placeholder="请输入电话号码" clearable></el-input>
                 </el-form-item>
                 </el-form-item>
+                <el-form-item label="工号" prop="jobNumber">
+                    <el-input v-model="insertForm.jobNumber" placeholder="请输入工号" clearable></el-input>
+                </el-form-item>
                 <el-form-item label="薪酬方式" prop="salaryType" v-if="permissions.structurePersonnel&&user.timeType.isSecretSalary==0">
                 <el-form-item label="薪酬方式" prop="salaryType" v-if="permissions.structurePersonnel&&user.timeType.isSecretSalary==0">
                     <el-radio-group v-model="insertForm.salaryType" @change="onSalaryTypeChange">
                     <el-radio-group v-model="insertForm.salaryType" @change="onSalaryTypeChange">
                     <el-radio  :label="0" >固定月成本</el-radio>
                     <el-radio  :label="0" >固定月成本</el-radio>
@@ -354,12 +358,16 @@
         <!-- 编辑超级管理员的Dialog -->
         <!-- 编辑超级管理员的Dialog -->
         <el-dialog title="编辑人员" :visible.sync="dialogVisible1" width="550px" >
         <el-dialog title="编辑人员" :visible.sync="dialogVisible1" width="550px" >
             <el-form ref="form1" :model="insertForm" :rules="rules" label-width="80px">
             <el-form ref="form1" :model="insertForm" :rules="rules" label-width="80px">
-                <el-form-item label="名字" prop="name">
+                
+                <el-form-item label="姓名" prop="name">
                     <el-input v-model="insertForm.name" placeholder="请输入姓名" clearable></el-input>
                     <el-input v-model="insertForm.name" placeholder="请输入姓名" clearable></el-input>
                 </el-form-item>
                 </el-form-item>
                 <el-form-item label="电话" prop="phone">
                 <el-form-item label="电话" prop="phone">
                     <el-input v-model="insertForm.phone" placeholder="请输入电话号码" clearable></el-input>
                     <el-input v-model="insertForm.phone" placeholder="请输入电话号码" clearable></el-input>
                 </el-form-item>
                 </el-form-item>
+                <el-form-item label="工号" prop="jobNumber">
+                    <el-input v-model="insertForm.jobNumber" placeholder="请输入工号" clearable></el-input>
+                </el-form-item>
                 <el-form-item label="薪酬方式" prop="salaryType" v-if="permissions.structurePersonnel">
                 <el-form-item label="薪酬方式" prop="salaryType" v-if="permissions.structurePersonnel">
                     <el-radio-group v-model="insertForm.salaryType" @change="onSalaryTypeChange">
                     <el-radio-group v-model="insertForm.salaryType" @change="onSalaryTypeChange">
                     <el-radio  :label="0" >固定月成本</el-radio>
                     <el-radio  :label="0" >固定月成本</el-radio>
@@ -2017,6 +2025,7 @@ export default {
                 plate3: res.data.plate3,
                 plate3: res.data.plate3,
                 plate4: res.data.plate4,
                 plate4: res.data.plate4,
                 plate5: res.data.plate5,
                 plate5: res.data.plate5,
+                jobNumber: res.data.jobNumber
               };
               };
               this.$set(this.insertForm, 'inductionDate', res.data.inductionDate)
               this.$set(this.insertForm, 'inductionDate', res.data.inductionDate)
               this.getUserCustomConfig(1);
               this.getUserCustomConfig(1);
@@ -2058,6 +2067,7 @@ export default {
           plate3: null,
           plate3: null,
           plate4: null,
           plate4: null,
           plate5: null,
           plate5: null,
+          jobNumber:null,
         };
         };
         this.title = "新增人员";
         this.title = "新增人员";
         this.getUserCustomConfig();
         this.getUserCustomConfig();
@@ -2116,6 +2126,7 @@ export default {
             plate3: this.insertForm.plate3,
             plate3: this.insertForm.plate3,
             plate4: this.insertForm.plate4,
             plate4: this.insertForm.plate4,
             plate5: this.insertForm.plate5,
             plate5: this.insertForm.plate5,
+            jobNumber: this.insertForm.jobNumber,
           };
           };
 
 
           // for(let i=0;i<5;i++) {
           // for(let i=0;i<5;i++) {
@@ -2291,6 +2302,7 @@ export default {
               certJson: res.data.certList,
               certJson: res.data.certList,
               plateMap: {},
               plateMap: {},
               superiorId: res.data.superiorId,
               superiorId: res.data.superiorId,
+              jobNumber: res.data.jobNumber,
             };
             };
           } else {
           } else {
             this.$message({
             this.$message({
@@ -2339,6 +2351,7 @@ export default {
             position: this.insertForm.position,
             position: this.insertForm.position,
             certJson: this.insertForm.certJson,
             certJson: this.insertForm.certJson,
             inductionDate: this.insertForm.inductionDate,
             inductionDate: this.insertForm.inductionDate,
+            jobNumber: this.insertForm.jobNumber,
           };
           };
           if (this.insertForm.departmentId != null) {
           if (this.insertForm.departmentId != null) {
             form.departmentId =
             form.departmentId =

+ 11 - 10
fhKeeper/formulahousekeeper/timesheet_h5/vue.config.js

@@ -5,17 +5,18 @@ const themePath = path.resolve(__dirname,'src/assets/style/theme.less');
 const Timestamp = new Date().getTime();
 const Timestamp = new Date().getTime();
 
 
 // var ip = '47.101.180.183'
 // var ip = '47.101.180.183'
-var ip = '192.168.2.7'
+// var ip = '192.168.2.7'
 // var ip = '127.0.0.1'
 // var ip = '127.0.0.1'
-// var os = require('os'), ip = '', ifaces = os.networkInterfaces() // 获取本机ip
-// for (var i in ifaces) {
-//     for (var j in ifaces[i]) {
-//         var val = ifaces[i][j]
-//         if (val.family === 'IPv4' && val.address !== '127.0.0.1') {
-//             ip = val.address
-//         }
-//     }
-// }
+
+var os = require('os'), ip = '', ifaces = os.networkInterfaces() // 获取本机ip
+for (var i in ifaces) {
+    for (var j in ifaces[i]) {
+        var val = ifaces[i][j]
+        if (val.family === 'IPv4' && val.address !== '127.0.0.1') {
+            ip = val.address
+        }
+    }
+}
 
 
 module.exports = {
 module.exports = {
     // 关闭eslint检查
     // 关闭eslint检查