Forráskód Böngészése

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

ggooalice 2 éve
szülő
commit
4d648d5e40
56 módosított fájl, 682 hozzáadás és 336 törlés
  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;
     width: 100%;
     overflow: hidden;
+    position: relative;
+}
+.userEvaluationzuobian {
+    width: 33rem;
+    height: 100%;
+    background: #4a65ac;
+    position: absolute;
+    z-index: 2;
+    top: 0%;
+    left: 0%;
 }
 .inBlock {
     display: inline-block;
@@ -312,6 +322,8 @@ html {font-size: 10px; -webkit-text-size-adjust:none; -webkit-tap-highlight-colo
 .userEvaluationLeft {
     margin-right: 10.625rem;
     float: left;
+    position: relative;
+    z-index: 3;
 }
 .userEvaluationLeft h2 {
     font-size: 3.125rem;
@@ -362,7 +374,13 @@ html {font-size: 10px; -webkit-text-size-adjust:none; -webkit-tap-highlight-colo
     position: absolute;
     top: -3.75rem;
     left: 2.1875rem;
-    background: red;
+    /* background: red; */
+    overflow: hidden;
+    display: flex;
+    justify-content: center;
+    align-items: center;
+    background: #fff;
+    border: 1px solid #bdbdbd;
 }
 .userEvaluationRightConTex {
 
@@ -370,11 +388,11 @@ html {font-size: 10px; -webkit-text-size-adjust:none; -webkit-tap-highlight-colo
 .userEvaluationRightConTex p{
     font-size: 1.75rem;
     color: #333;
-    margin-top: 5rem;
+    margin-top: 3.75rem;
     margin-bottom: 1.125rem;
 }
 .userEvaluationRightConTex span {
-    font-size: 1rem;
+    font-size: .875rem;
     color: #666666;
     line-height: 1.5625rem;
 }
@@ -382,6 +400,33 @@ html {font-size: 10px; -webkit-text-size-adjust:none; -webkit-tap-highlight-colo
     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 {
     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/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>
 
 <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 () {
     // 当前滚动的高度
     let currentTop = $(window).scrollTop()
-    if(currentTop < 2) {
+    if(currentTop < 2) { 
         $('#all').removeClass('hanAll')
         $('#abc').addClass('abc')
         $("#loGo").attr("src", './image/logo.png')
@@ -170,33 +170,32 @@ $('#consulting').hover(function () {
 })
 
 let nums = 0
+let mobiledistance = 0
 // 客户点击
 $(function() {
     kehuFlg()
     $('#kehuLeft').click(function() {
-        if(nums > 0 ) {
+        if(nums > 0 && nums <= 5) {
             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() {
         if(nums < 5) {
             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() {
     if(nums == 0) {
         $('#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 () {
     fls = true
     $("#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="description" content="工时管家是专业的工时管理和项目管理软件。提供工时填报,审核和工时统计功能。引进现代工时管理和项目管理的理念,核算项目投入成本准确便捷,企业IPO项目成本分摊好帮手"/>
     <title>工时管理|工时记录表|项目成本管理-工时管家是强大易用的项目工时管理系统。工时填报|工时统计|手机移动填报|核算项目成本|企业IPO利器!</title>
+    <link rel="icon" href="image/favicon.png">
     <link rel="stylesheet" href="css/tongyong.css">
     <link rel="stylesheet" href="css/reset.css">
     <link rel="stylesheet" href="css/projectt.css">
@@ -229,6 +230,7 @@
 
     <!-- 用户评价 -->
     <div class="userEvaluation">
+        <div class="userEvaluationzuobian"></div>
         <div class="contentes">
             <div class="inBlock userEvaluationLeft">
                 <h2>用户评价</h2>
@@ -236,39 +238,65 @@
                 <div>Read more</div>
             </div>
             <div class="inBlock userKongz">
-                <div class="userEvaluationRight">
+                <div class="userEvaluationRight" style="left: 0px;">
                     <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">
-                            <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 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">
-                            <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 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">
-                            <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="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>
     

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

@@ -1,13 +1,17 @@
 package com.management.platform.controller;
 
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.management.platform.entity.BusinessTrip;
+import com.management.platform.entity.Department;
 import com.management.platform.entity.LeaveSheet;
 import com.management.platform.entity.User;
 import com.management.platform.entity.vo.SysRichFunction;
+import com.management.platform.mapper.DepartmentMapper;
 import com.management.platform.mapper.SysFunctionMapper;
 import com.management.platform.mapper.UserMapper;
 import com.management.platform.service.BusinessTripService;
+import com.management.platform.service.DepartmentService;
 import com.management.platform.service.LeaveSheetService;
 import com.management.platform.util.HttpRespMsg;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -17,7 +21,9 @@ import org.springframework.web.bind.annotation.RestController;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
+import java.util.ArrayList;
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -37,8 +43,8 @@ public class BusinessTripController {
     BusinessTripService businessTripService;
     @Resource
     private HttpServletRequest request;
-    @Resource
-    SysFunctionMapper sysFunctionMapper;
+
+
 
     @RequestMapping("/add")
     public HttpRespMsg add(BusinessTrip sheet) {
@@ -59,14 +65,6 @@ public class BusinessTripController {
 
     @RequestMapping("/list")
     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);
     }
 

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

@@ -211,8 +211,8 @@ public class ProjectController {
      * 导出查询者所在公司每个项目的工时成本
      */
     @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);
     }
 
+    /*提供第三方接口获取日报数据*/
     @PostMapping("/getReportListByToken")
     public HttpRespMsg getReportListByToken(@RequestParam String token, @RequestParam String startDate, @RequestParam String 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());
         if (info.getId() == null) {
             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){
                 msg.setError(timeType.getCustomDegreeName()+"名称重复");
                 return msg;
@@ -75,40 +75,40 @@ public class ReportExtraDegreeController {
             info.setCompanyId(user.getCompanyId());
             reportExtraDegreeMapper.insert(info);
         } 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){
                 msg.setError(timeType.getCustomDegreeName()+"名称重复");
                 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;
     }

+ 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()));
             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");
 
         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);
         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,
                                   Integer departmentId, Integer salaryType, String costApplyDate,
                                     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,
-                    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())
                                     .setRoleName(defaultRole.getRolename())
                                     .setName(userObj.getString("name"))
+                                    .setPhone(userObj.getString("mobile"))
                                     .setPassword(MD5Util.getPassword("000000"))
                                     .setCorpwxUserid(corpWxUserId)
+                                    .setJobNumber(userObj.getString("userid"))
                                     .setColor(ColorUtil.randomColor())
                                     .setCompanyId(companyId);
                             if (sysDept != null) {
@@ -1472,12 +1474,12 @@ public class WeiXinCorpController {
             if (unAssignedUserList.size() > 0) {
                 remoteUnAUserList = remoteGetDeptUserDetail(wxCorpInfo, corpContactAccessToken, companyRootDeptId);
                 //做id转化
-                List<String> userIds = new ArrayList<>();
+                List<String> corpUserIds = new ArrayList<>();
                 for (int i=0;i<remoteUnAUserList.size(); i++) {
-                    userIds.add(remoteUnAUserList.getJSONObject(i).getString("userid"));
+                    corpUserIds.add(remoteUnAUserList.getJSONObject(i).getString("userid"));
                 }
                 try {
-                    JSONArray array = convertUserIdToOpenUserId(curCorpAccessToken, userIds);
+                    JSONArray array = convertUserIdToOpenUserId(curCorpAccessToken, corpUserIds);
                     for (int i=0;i<array.size(); i++) {
                         JSONObject jsonObject = array.getJSONObject(i);
                         String userid = jsonObject.getString("userid");
@@ -1486,7 +1488,7 @@ public class WeiXinCorpController {
                         for (int m=0;m<remoteUnAUserList.size(); m++) {
                             JSONObject remoteUser = remoteUnAUserList.getJSONObject(m);
                             if (remoteUser.getString("userid").equals(userid)) {
-                                remoteUser.put("userid", openUserid);
+                                remoteUser.put("openUserid", openUserid);
                                 break;
                             }
                         }
@@ -1498,7 +1500,7 @@ public class WeiXinCorpController {
                 }
             }
 
-
+            List<User> updateUserList = new ArrayList<>();
             for (int m=0;m<unAssignedUserList.size(); m++) {
                 JSONObject userJson = unAssignedUserList.getJSONObject(m);
                 String curUserid = userJson.getString("userid");
@@ -1523,36 +1525,44 @@ public class WeiXinCorpController {
                 if (remoteUnAUserList != null) {
                     for (int i=0;i<remoteUnAUserList.size(); i++) {
                         JSONObject remoteUserJson = remoteUnAUserList.getJSONObject(i);
-                        if (remoteUserJson.getString("userid").equals(curUserid)) {
+                        if (remoteUserJson.getString("openUserid").equals(curUserid)) {
                             user.setName(remoteUserJson.getString("name"));
+                            user.setJobNumber(remoteUserJson.getString("userid"));
+                            user.setPhone(remoteUserJson.getString("mobile"));
                             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) {
-                    //先检查姓名+手机号是否存在,如果存在,则更新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 {
-                    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) {
                     //忽略根,根是公司名称
                     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 {
                 //比较是否有更新
@@ -1619,7 +1620,6 @@ public class WeiXinCorpController {
                 department = oldDept;
             }
 
-//            sysDeptList.add(department);
             deptObjJSONArray.getJSONObject(i).put("sys_dept_id", department.getDepartmentId());
             Integer departmentId = department.getDepartmentId();
             if (syncMembs == 1) {
@@ -1628,12 +1628,12 @@ public class WeiXinCorpController {
                 if (userList.size() > 0) {
                     remoteDeptUserList = remoteGetDeptUserDetail(wxCorpInfo, corpContactAccessToken, deptId);
                     //做id转化
-                    List<String> userIds = new ArrayList<>();
+                    List<String> corpUserIds = new ArrayList<>();
                     for (int p=0;p<remoteDeptUserList.size(); p++) {
-                        userIds.add(remoteDeptUserList.getJSONObject(p).getString("userid"));
+                        corpUserIds.add(remoteDeptUserList.getJSONObject(p).getString("userid"));
                     }
                     try {
-                        JSONArray array = convertUserIdToOpenUserId(curCorpAccessToken, userIds);
+                        JSONArray array = convertUserIdToOpenUserId(curCorpAccessToken, corpUserIds);
                         for (int w=0;w<array.size(); w++) {
                             JSONObject jsonObject = array.getJSONObject(w);
                             String userid = jsonObject.getString("userid");
@@ -1642,7 +1642,7 @@ public class WeiXinCorpController {
                             for (int m=0;m<remoteDeptUserList.size(); m++) {
                                 JSONObject remoteUser = remoteDeptUserList.getJSONObject(m);
                                 if (remoteUser.getString("userid").equals(userid)) {
-                                    remoteUser.put("userid", openUserid);
+                                    remoteUser.put("openUserid", openUserid);
                                     break;
                                 }
                             }
@@ -1653,7 +1653,7 @@ public class WeiXinCorpController {
                         return msg;
                     }
                 }
-
+                List<User> updateUserList = new ArrayList<>();
                 for (int m=0;m<userList.size(); m++) {
                     JSONObject userJson = userList.getJSONObject(m);
                     String curUserid = userJson.getString("userid");
@@ -1678,47 +1678,46 @@ public class WeiXinCorpController {
                     if (remoteDeptUserList != null) {
                         for (int t=0;t<remoteDeptUserList.size(); t++) {
                             JSONObject remoteUserJson = remoteDeptUserList.getJSONObject(t);
-                            if (remoteUserJson.getString("userid").equals(curUserid)) {
+                            if (remoteUserJson.getString("openUserid").equals(curUserid)) {
                                 //匹配到了。设置姓名
                                 System.out.println("远程的用户匹配到了:"+remoteUserJson.getString("name"));
                                 user.setName(remoteUserJson.getString("name"));
+                                user.setJobNumber(remoteUserJson.getString("userid"));
+                                user.setPhone(remoteUserJson.getString("mobile"));
                                 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) {
-                        //先检查姓名是否存在,如果存在,则更新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 {
-                        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;
 
 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 java.io.Serializable;
-
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.experimental.Accessors;
 import org.springframework.format.annotation.DateTimeFormat;
 
+import java.io.Serializable;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
 /**
  * <p>
  * 
@@ -42,6 +42,8 @@ public class ReportLog extends Model<ReportLog> {
      * 日报所属日期
      */
     @TableField("create_date")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @JsonFormat(pattern = "yyyy-MM-dd")
     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;
 
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableId;
+import java.math.BigDecimal;
 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 lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.experimental.Accessors;
 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>
  *
  * @author Seyason
- * @since 2022-06-14
+ * @since 2022-08-09
  */
 @Data
 @EqualsAndHashCode(callSuper = false)
@@ -220,6 +220,12 @@ public class User extends Model<User> {
     @TableField(exist = false)
     private double totalHours;
 
+    /**
+     * 员工工号,公司内唯一
+     */
+    @TableField("job_number")
+    private String jobNumber;
+
     @TableField(exist = false)
     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>> 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,
                                           @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>> 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 javax.servlet.http.HttpServletRequest;
+import java.util.List;
 
 /**
  * <p>
@@ -40,4 +41,6 @@ public interface DepartmentService extends IService<Department> {
     HttpRespMsg exportDeptStatistic(String startDate, String endDate, 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 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);
 

+ 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,
                            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);
 

+ 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.extension.plugins.pagination.Page;
 import com.management.platform.entity.*;
+import com.management.platform.entity.vo.SysRichFunction;
 import com.management.platform.mapper.*;
 import com.management.platform.service.BusinessTripService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.management.platform.service.DepartmentService;
 import com.management.platform.util.HttpRespMsg;
 import org.springframework.stereotype.Service;
 import org.springframework.util.StringUtils;
 
 import javax.annotation.Resource;
 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;
 
 /**
@@ -41,7 +40,12 @@ public class BusinessTripServiceImpl extends ServiceImpl<BusinessTripMapper, Bus
     private HttpServletRequest request;
     @Resource
     private ProjectMapper projectMapper;
-
+    @Resource
+    SysFunctionMapper sysFunctionMapper;
+    @Resource
+    DepartmentMapper departmentMapper;
+    @Resource
+    DepartmentService departmentService;
 
     @Override
     public HttpRespMsg modifyProject(BusinessTrip sheet) {
@@ -90,8 +94,39 @@ public class BusinessTripServiceImpl extends ServiceImpl<BusinessTripMapper, Bus
 
     @Override
     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>();
         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");
 
         //增加状态

+ 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.management.platform.entity.CompanyDingding;
 import com.management.platform.entity.SysConfig;
+import com.management.platform.entity.TimeType;
 import com.management.platform.mapper.CompanyDingdingMapper;
 import com.management.platform.mapper.SysConfigMapper;
+import com.management.platform.mapper.TimeTypeMapper;
 import com.management.platform.service.CompanyDingdingService;
 import com.taobao.api.ApiException;
 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_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";
     //新任务
@@ -68,6 +71,8 @@ public class CompanyDingdingServiceImpl extends ServiceImpl<CompanyDingdingMappe
     private SysConfigMapper sysConfigMapper;
     @Resource
     private CompanyDingdingMapper companyDingdingMapper;
+    @Resource
+    private TimeTypeMapper timeTypeMapper;
     @Value("${dingding.appId}")
     private long appId;//钉钉第三方应用的appId
     @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) {
         if (isDev) return;
         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");
         if (isPrivateDeploy) {
             List<OapiMessageCorpconversationAsyncsendV2Request.Form> form=new ArrayList<>();
@@ -245,19 +251,25 @@ public class CompanyDingdingServiceImpl extends ServiceImpl<CompanyDingdingMappe
             item1.setKey("审核人:");
             item1.setValue(auditorName);
             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);
         } else {
             DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/message/corpconversation/sendbytemplate");
+            JSONObject json = new JSONObject();
             OapiMessageCorpconversationSendbytemplateRequest req = new OapiMessageCorpconversationSendbytemplateRequest();
             req.setAgentId(agentId);
             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("evaluate",evaluate);
             json.put("date", "" + df.format(date));
             json.put("APPID", "" + appId);
             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;
     }
 
+    @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) {
         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()){
                     projectVO.setDepartmentName(optional.get().getDepartmentName());
                 }
+                /**/
                 projectVO.setParticipator(participationMapper.getParticipator(projectVO.getId()));
                 Optional<User> first = userList.stream().filter(u -> u.getId().equals(project.getInchargerId())).findFirst();
                 if (first.isPresent()) {
@@ -978,7 +979,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                 httpRespMsg.data = resultMap;
 
             } 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);
                 for (Map<String, Object> map : list) {
                     if (!map.containsKey("cost")) {
@@ -1017,7 +1018,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
 
     //导出查询者所在公司每个项目的工时成本,包括项目人员明细统计
     @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();
         try {
             User targetUser = userMapper.selectById(request.getHeader("Token"));
@@ -1026,12 +1027,17 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
             //当前用户管理部门
             List<Integer> deptIds=null;
             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<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> filterDeptIds=null;
+            if(deptId!=null){
+                filterDeptIds= getBranchDepartment(deptId, allDepartmentList);
+            }
             if(functionAllList.size()==0){
                 deptIds=new ArrayList<>();
                 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> otherCollect = departmentOtherManagerList.stream().distinct().map(dom -> dom.getDepartmentId()).collect(Collectors.toList());
                         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);
             List<List<String>> allList=null ;
             List<String> sumRow = null;
@@ -1091,7 +1113,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                     }
                     //统计每个项目中的人员时间成本投入
                     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);
                     for (Map<String, Object> membMap : membList) {
                         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) {
         HttpRespMsg httpRespMsg = new HttpRespMsg();
         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)) {
                 httpRespMsg.setError("无权查看其他公司的项目详情");
@@ -1368,7 +1419,8 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                 TimeType timeType = timeTypeMapper.selectById(companyId);
                 if (timeType.getFixMonthcost() == 0) {
                     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);
                     for (Map<String, Object> map : list) {
                         if (!map.containsKey("costMoney")) {
@@ -1385,7 +1437,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                     endDate = 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));
@@ -2197,7 +2249,8 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                 String start_date = sdf.format((Date) map.get("start_date"));
                 String end_date = sdf.format((Date) map.get("end_date"));
                 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");
 
                 GanttDataItem curItem = new GanttDataItem();;
@@ -4212,6 +4265,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
             Map<String, Object> resultMap = new HashMap<>();
             //当前用户管理部门
             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<DepartmentOtherManager> departmentOtherManagerList = departmentOtherManagerMapper.selectList(new QueryWrapper<DepartmentOtherManager>().eq("other_manager_id", targetUser.getId()));
             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> otherCollect = departmentOtherManagerList.stream().distinct().map(dom -> dom.getDepartmentId()).collect(Collectors.toList());
                         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);
                 //需要看可见部门(部门主要负责人和其他负责人以及查看本部门工时权限)所有人员的日报
                 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) {
                         List<String> userIds = new ArrayList<>();
                         nameList.forEach(n->{
@@ -1393,10 +1407,14 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                             JSONArray dataJson=new JSONArray();
                             JSONObject item=new JSONObject();
                             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());
                             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("content_item",dataJson);
                             wxCorpInfoService.sendWXCorpTemplateMsg(wxCorpInfoList.get(0),u.getCorpwxUserid(),json);
@@ -3300,6 +3318,12 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                 }
                 allReportByDate = dealDataList;
             }
+            //HSSFRow条数范围限制0..65535
+            if (allReportByDate.size() > 60000) {
+                HttpRespMsg msg = new HttpRespMsg();
+                msg.setError("数据量过大,请分时间段导出");
+                return msg;
+            }
             DecimalFormat df = new DecimalFormat("#0.0");
             for (Map<String, Object> map : allReportByDate) {
                 HSSFRow row = sheet.createRow(rowNum);
@@ -3910,15 +3934,26 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
         if(thirdPartyInterfaceList.size()==0){
             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;
     }

+ 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
     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,
-                                  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();
         DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd");
         try {
             User creator = userMapper.selectById(request.getHeader("Token"));
             if (name != null) name = name.trim();
             if (phone != null) phone = phone.trim();
+            if (jobNumber != null) jobNumber = jobNumber.trim();
             //处理时薪
             BigDecimal costValue = cost == null ? BigDecimal.valueOf(0) : BigDecimal.valueOf(cost);
             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())) {
                         httpRespMsg.setError("公司人员已达上限");
                     } 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();
                         User user = new User()
                                 .setId(id.toString())
@@ -720,7 +726,8 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
                                 .setPlate2(plate2)
                                 .setPlate3(plate3)
                                 .setPlate4(plate4)
-                                .setPlate5(plate5);
+                                .setPlate5(plate5)
+                                .setJobNumber(jobNumber);
                         if(inductionDate!=null&&inductionDate!=""){
                             user.setInductionDate(LocalDate.parse(inductionDate,dtf));
                         }
@@ -747,7 +754,11 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
                     httpRespMsg.setError("该电话号码已存在");
                     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);
                 boolean salaryChange = false;
 
@@ -784,7 +795,8 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
                         .setPlate2(plate2)
                         .setPlate3(plate3)
                         .setPlate4(plate4)
-                        .setPlate5(plate5));
+                        .setPlate5(plate5)
+                        .setJobNumber(jobNumber));
                 if (salaryChange) {
                     UserSalary userSalary = UserSalary.copyFromUser(oldUser);
                     userSalaryMapper.insert(userSalary);
@@ -1769,7 +1781,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
         HttpRespMsg msg = new HttpRespMsg();
         String token = request.getHeader("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;
         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">
             AND b.create_date between #{startDate} and #{endDate}
         </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
         ORDER BY a.id ASC
     </select>
@@ -280,6 +290,22 @@
         <if test="userId != null">
             AND a.creator_id = #{userId}
         </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
         ORDER BY b.id ASC, a.dept_id ASC
     </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 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
-        , 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
         JOIN project AS b ON a.project_id=b.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="plate4" property="plate4" />
         <result column="plate5" property="plate5" />
+        <result column="is_ops" property="isOps" />
+        <result column="job_number" property="jobNumber" />
     </resultMap>
     <resultMap id="BaseResultMap2" type="com.management.platform.entity.User">
         <id column="id" property="id" />
@@ -46,13 +48,14 @@
     </resultMap>
     <!-- 通用查询结果列 -->
     <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>
     <!--单独分页获取人员-->
     <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,
         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
         LEFT JOIN department AS b ON a.department_id = b.department_id
         WHERE a.company_id = #{companyId}
@@ -74,7 +77,8 @@
     <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,
         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
         LEFT JOIN department AS b ON a.department_id = b.department_id
         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})
     </select>
     <select id="getSimpleNameList" resultType="java.util.HashMap">
-        select id, name from user
+        select id, name, job_number as jobNumber from user
         ${ew.customSqlSegment}
     </select>
 

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


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 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>
  *
  * @author Seyason
- * @since 2022-08-07
+ * @since 2022-08-08
  */
 @Data
 @EqualsAndHashCode(callSuper = false)
@@ -301,7 +301,7 @@ public class TimeType extends Model<TimeType> {
     private Integer needEvaluate;
 
     /**
-     * 0-未开启 1-开启
+     * 产值  0-未开启 1-开启
      */
     @TableField("output_value_status")
     private Integer outputValueStatus;
@@ -318,6 +318,12 @@ public class TimeType extends Model<TimeType> {
     @TableField("include_weekends")
     private Integer includeWeekends;
 
+    /**
+     * 从相册选择图片 0-未开启 1-开启
+     */
+    @TableField("chose_from_album")
+    private Integer choseFromAlbum;
+
 
     @Override
     protected Serializable pkVal() {

A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 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>
                         <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 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>
         <!-- 出差列表 -->
@@ -249,8 +249,8 @@
                                 <el-button icon="el-icon-close" circle size="mini"  @click="deny(scope.row)"></el-button>
                             </div>
                             <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>
                         </template>
                     </el-table-column>
@@ -650,8 +650,6 @@ export default {
             displayTable: false,
             formloading: false,
             apk: 0,
-            // userdata: JSON.parse(sessionStorage.getItem("user")),
-
             permissions: JSON.parse(sessionStorage.getItem("permissions")),
             userComLis: JSON.parse(sessionStorage.getItem("user")),
             addform: {
@@ -813,7 +811,6 @@ export default {
                 let transmissionObj = {}
                 transmissionObj.userId = this.ownerIdsId
                 transmissionObj.companyId = this.userComLis.companyId
-                console.log(this.createDateList, '俺看')
                 if(this.createDateList != 'null' && this.createDateList != null) {
                     if(this.createDateList.length > 0) {
                         transmissionObj.startDate = this.createDateList[0]

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

@@ -76,6 +76,12 @@
                     </el-select>
                 </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-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">
@@ -131,6 +137,7 @@
                 <el-form-item v-if="(radio == '项目' || radio == '部门' || radio == '项目分类') && exportParam.type == '0'">
                     <el-checkbox v-model="exportParam.projectSum" >含单个项目数据汇总</el-checkbox>
                 </el-form-item>
+
             </el-form>
             <div slot="footer" class="dialog-footer">
                 <el-button type="primary" @click="exportProjectData" style="width:100%;" >导出</el-button>
@@ -174,7 +181,8 @@
                 theCustomListPlant: '',
                 customId: '',
                 customName: '',
-                customList: []
+                customList: [],
+                departmentList: []
             };
         },
         methods: {
@@ -242,6 +250,9 @@
                 if (this.radio == '人员') {
                     // this.exportParam.userIds = [];
                 }
+                if (this.radio == '项目') {
+                    this.exportParam.deptId = []
+                }
             },
             //获取我的项目列表
             getMyProjectList() {
@@ -259,7 +270,7 @@
                 },
                 error => {
                     this.$message({
-                        message: error,
+                        message: error, 
                         type: "error"
                     });
                 });
@@ -321,6 +332,11 @@
                     param.customId = this.theCustomListId
                     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,
                     res => {
                         this.listLoading = false;
@@ -1163,7 +1179,44 @@
                         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() {
             this.myChart = null
@@ -1217,6 +1270,7 @@
             if(this.user.timeType.userCustomStatic) {
                 this.getZDY()
             }
+            this.getDepartmentList()
         },
         beforeDestroy () {
             var myChart = echarts.init(document.getElementById("container"));

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

@@ -129,8 +129,8 @@
                     </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>
@@ -141,7 +141,7 @@
                         </el-col>
                     </el-row>
                     
-                </div>
+                </div> -->
 
                 <div class="box" style="margin-top:10px;">
                     <label>项目统计</label>
@@ -518,9 +518,8 @@
         </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">
                 <el-scrollbar style="height:100%">
                 <el-tree :data="deptMembData" show-checkbox :props="defaultProps" node-key="id"
@@ -533,7 +532,7 @@
                 <el-button  @click="chooseLeaderVisible = false" >取消</el-button>
                 <el-button type="primary" @click="chooseLeader()" >确定</el-button>
             </div>
-        </el-dialog>
+        </el-dialog> -->
     </div>
 </template>
 <style scoped>

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

@@ -327,8 +327,12 @@
             </template>
             <template v-if="user.company.packageProject && (showColumnWidth != '0' || permissions.projectManagement)">
                 <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="batchDelete()">批量删除项目</el-button> -->
             </template>
+            
             <el-pagination
                 @size-change="handleSizeChange"
                 @current-change="handleCurrentChange"
@@ -576,11 +580,11 @@
                            </el-table>
                        </div>
                     </el-tab-pane>
-                    <el-tab-pane label="相关领导" name="leaders" >
+                    <!-- <el-tab-pane label="相关领导" name="leaders" >
                        <div style="padding-top:10px;">
                            <el-input @focus="showChooseLeaderTree" v-model="addForm.notifyUserNames" placeholder="请选择需要接收审核通知的相关领导"></el-input>
                        </div>
-                    </el-tab-pane>
+                    </el-tab-pane> -->
                     </el-tabs>
                 </div>
             
@@ -859,9 +863,8 @@
             </div>
         </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">
                 <el-scrollbar style="height:100%">
                 <el-tree :data="deptMembData" show-checkbox :props="defaultProps" node-key="id"
@@ -874,7 +877,7 @@
                 <el-button  @click="chooseLeaderVisible = false" >取消</el-button>
                 <el-button type="primary" @click="chooseLeader()" >确定</el-button>
             </div>
-        </el-dialog>
+        </el-dialog> -->
 
         <!-- 项目专业人员的设置 -->
         <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() {
@@ -3144,7 +3147,7 @@ a {
                         
                     }
                     //获取项目的相关领导
-                    this.getProjectNotifyUserList(item.id);
+                    // this.getProjectNotifyUserList(item.id);
                     this.getProjectAutorList(item.id);
                 }
                 this.addFormVisible = true;

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

@@ -145,6 +145,7 @@
                     </template>
                 </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="departmentName" label="部门" ></el-table-column>
                 <el-table-column label="角色" width="100">
@@ -270,12 +271,15 @@
         <!-- 新增/编辑人员的Dialog -->
         <el-dialog :title="title" :visible.sync="dialogVisible" width="550px" >
             <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-form-item>
                 <el-form-item label="电话" prop="phone">
                     <el-input v-model="insertForm.phone" placeholder="请输入电话号码" clearable></el-input>
                 </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-radio-group v-model="insertForm.salaryType" @change="onSalaryTypeChange">
                     <el-radio  :label="0" >固定月成本</el-radio>
@@ -354,12 +358,16 @@
         <!-- 编辑超级管理员的Dialog -->
         <el-dialog title="编辑人员" :visible.sync="dialogVisible1" width="550px" >
             <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-form-item>
                 <el-form-item label="电话" prop="phone">
                     <el-input v-model="insertForm.phone" placeholder="请输入电话号码" clearable></el-input>
                 </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-radio-group v-model="insertForm.salaryType" @change="onSalaryTypeChange">
                     <el-radio  :label="0" >固定月成本</el-radio>
@@ -2017,6 +2025,7 @@ export default {
                 plate3: res.data.plate3,
                 plate4: res.data.plate4,
                 plate5: res.data.plate5,
+                jobNumber: res.data.jobNumber
               };
               this.$set(this.insertForm, 'inductionDate', res.data.inductionDate)
               this.getUserCustomConfig(1);
@@ -2058,6 +2067,7 @@ export default {
           plate3: null,
           plate4: null,
           plate5: null,
+          jobNumber:null,
         };
         this.title = "新增人员";
         this.getUserCustomConfig();
@@ -2116,6 +2126,7 @@ export default {
             plate3: this.insertForm.plate3,
             plate4: this.insertForm.plate4,
             plate5: this.insertForm.plate5,
+            jobNumber: this.insertForm.jobNumber,
           };
 
           // for(let i=0;i<5;i++) {
@@ -2291,6 +2302,7 @@ export default {
               certJson: res.data.certList,
               plateMap: {},
               superiorId: res.data.superiorId,
+              jobNumber: res.data.jobNumber,
             };
           } else {
             this.$message({
@@ -2339,6 +2351,7 @@ export default {
             position: this.insertForm.position,
             certJson: this.insertForm.certJson,
             inductionDate: this.insertForm.inductionDate,
+            jobNumber: this.insertForm.jobNumber,
           };
           if (this.insertForm.departmentId != null) {
             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();
 
 // 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 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 = {
     // 关闭eslint检查