Browse Source

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

ggooalice 2 years ago
parent
commit
2d8c1dad18

+ 4 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/LeaveSheetMapper.java

@@ -2,10 +2,12 @@ package com.management.platform.mapper;
 
 import com.management.platform.entity.LeaveSheet;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.management.platform.entity.User;
 import org.apache.tomcat.jni.Local;
 
 import java.time.LocalDate;
 import java.util.List;
+import java.util.Map;
 
 /**
  * <p>
@@ -22,4 +24,6 @@ public interface LeaveSheetMapper extends BaseMapper<LeaveSheet> {
     List<LeaveSheet> selectApprovalList();
 
     List<LeaveSheet> selectLeave(Integer companyId, String startDate, String endDate);
+
+    List<Map<String,Object>> selectLeaveAll(Integer companyId, String startDate, String endDate);
 }

+ 113 - 4
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectServiceImpl.java

@@ -12,6 +12,7 @@ import com.management.platform.entity.vo.*;
 import com.management.platform.mapper.*;
 import com.management.platform.service.*;
 import com.management.platform.util.*;
+import com.sun.star.bridge.oleautomation.Decimal;
 import org.apache.http.client.entity.UrlEncodedFormEntity;
 import org.apache.http.client.methods.CloseableHttpResponse;
 import org.apache.http.client.methods.HttpPost;
@@ -5843,8 +5844,8 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
         if(departmentId!=null){
             branchDepartment = getBranchDepartment(departmentId, allDepartmentList);
         }
-        List<Map<String, Object>> list = projectMapper.getUserWorkingTimeList(userId, user.getCompanyId(), startDate, endDate, projectId,start,size,branchDepartment,deptIds);
-        long total=projectMapper.findCountWithUser(userId, user.getCompanyId(), startDate, endDate, projectId,null,null,departmentId,deptIds);
+        List<Map<String, Object>> list = projectMapper.getUserWorkingTimeList(userId, user.getCompanyId(), startDate, endDate, projectId,null,null,branchDepartment,deptIds);
+        //long total=projectMapper.findCountWithUser(userId, user.getCompanyId(), startDate, endDate, projectId,null,null,departmentId,deptIds);
         Integer companyId = user.getCompanyId();
         WxCorpInfo wxCorpInfo = wxCorpInfoMapper.selectOne(new QueryWrapper<WxCorpInfo>().eq("company_id", companyId));
         List<LeaveSheet> leaveSheet = leaveSheetMapper.selectLeave(companyId,startDate,endDate);
@@ -5862,7 +5863,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                     }else {
                         map.put("deptName",getSupDepartment(department));
                     }
-                    continue;
+                    break;
                 }
             }
             if (!map.containsKey("deptName")){
@@ -5906,9 +5907,117 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
             NumberFormat nf = NumberFormat.getPercentInstance();
             li.put("proportion",nf.format(divide));
         });
+        //全月请假人员
+        List<Map<String, Object>> maps = leaveSheetMapper.selectLeaveAll(companyId, startDate, endDate);
+        TimeType timetype = timeTypeMapper.selectOne(new QueryWrapper<TimeType>().eq("company_id", user.getCompanyId()));
+        List<Map<String, Object>> leaveStaff = new ArrayList<>();
+        //去重
+        List<Map<String, Object>> collectMap = maps.stream().filter(m -> {
+            Boolean flag = true;
+            for (Map<String, Object> map : list) {
+                if (m.get("id").toString().equals(map.get("userId").toString())) {
+                    flag = false;
+                    break;
+                }
+            }
+            return flag;
+        }).collect(Collectors.toList());
+        for (Map<String, Object> map : collectMap) {
+            HashMap<String, Object> stringObjectHashMap = new HashMap<>();
+            stringObjectHashMap.put("deptId",map.get("departmentId"));
+            for (Department department : deptName) {
+                if (map.get("departmentId").toString().equals(department.getDepartmentId().toString())){
+                    if (wxCorpInfo!=null && wxCorpInfo.getSaasSyncContact()==1){
+                        stringObjectHashMap.put("deptName",getWxDepartment(department));
+                    }else {
+                        stringObjectHashMap.put("deptName",getSupDepartment(department));
+                    }
+                    break;
+                }
+            }
+            if (!stringObjectHashMap.containsKey("deptName")){
+                stringObjectHashMap.put("deptName","未分配");
+            }
+            stringObjectHashMap.put("isPublic",0);
+            stringObjectHashMap.put("jobNumber",map.get("jobNumber"));
+            Double leaveHours = 0.0;
+            int days = WorkDayCalculateUtils.getWorkDaysListInRange(map.get("startDate").toString(),map.get("endDate").toString(), 0).size();
+            for (Map<String, Object> stringObjectMap : collectMap) {
+                if (map.get("id").toString().equals(stringObjectMap.get("id"))){
+                    LocalDate leaveStart = LocalDate.parse(map.get("startDate").toString(), dateTimeFormatter);
+                    LocalDate leaveEnd = LocalDate.parse(map.get("endDate").toString(), dateTimeFormatter);
+                    //当请假时间在当前时间段内的
+                    if ((leaveStart.isEqual(localStartDate) || leaveStart.isAfter(localStartDate)) && (leaveEnd.isEqual(localEndDate) || leaveEnd.isBefore(localEndDate))){
+                        leaveHours += Double.parseDouble(map.get("hours").toString());
+                    }else{
+                        float LeaveDay = leaveEnd.toEpochDay() - leaveStart.toEpochDay() + 1;
+                        Float timeHours = Float.parseFloat(map.get("hours").toString());
+                        //请假时间首尾跨时间段
+                        if(leaveStart.isBefore(localStartDate) && leaveEnd.isAfter(localEndDate)){
+                            int day = WorkDayCalculateUtils.getWorkDaysListInRange(localStartDate.toString(), localEndDate.toString(), 0).size();
+                            leaveHours+= day * timetype.getAllday();
+                        }else {
+                            //当请假时间开始时间跨时间段
+                            if (leaveStart.isBefore(localStartDate)){
+                                //平均计算
+                                float DifDay = localStartDate.toEpochDay() - leaveStart.toEpochDay();
+                                leaveHours+= timeHours*(1 - DifDay/LeaveDay);
+                            }else {
+                                //当请假时间结束时间跨时间段
+                                float DifDay = leaveEnd.toEpochDay() - localEndDate.toEpochDay();
+                                leaveHours+= timeHours*(1 - DifDay/LeaveDay);
+                            }
+                        }
+                    }
+                }
+            }
+            leaveHours = new BigDecimal(leaveHours).setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue();
+            stringObjectHashMap.put("leaveSum",leaveHours+"h");
+            stringObjectHashMap.put("proportion","0%");
+            stringObjectHashMap.put("unPublic",0);
+            stringObjectHashMap.put("userId",map.get("id"));
+            if (wxCorpInfo!=null && wxCorpInfo.getSaasSyncContact()==1){
+                stringObjectHashMap.put("username",map.get("wxOpenId"));
+            }else {
+                stringObjectHashMap.put("username",map.get("name"));
+            }
+            stringObjectHashMap.put("workingTime",leaveHours);
+            leaveStaff.add(stringObjectHashMap);
+            //去重
+            int flag = 0;
+            for (Map<String, Object> stringObjectMap : leaveStaff) {
+                if(stringObjectMap.get("userId").toString().equals(stringObjectHashMap.get("userId").toString())){
+                    flag ++;
+                }
+            }
+            if (flag >= 2){
+                leaveStaff.remove(stringObjectHashMap);
+            }
+            int idFlag = 0;
+            //筛选人员
+            if (userId != null){
+                for (Map<String, Object> stringObjectMap : leaveStaff) {
+                    if(!stringObjectMap.get("userId").toString().equals(userId)){
+                        idFlag ++;
+                    }
+                }
+            }
+            if (idFlag >= 1){
+                leaveStaff.remove(stringObjectHashMap);
+            }
+        }
+        list.addAll(leaveStaff);
+        //计算总页数
+        long total = list.size();
+        List<Map<String, Object>> resultList = null;
+        if (pageIndex!=null && pageSize!=null){
+             resultList = list.stream().skip((pageIndex - 1) * pageSize).limit(pageSize).collect(Collectors.toList());
+        }else {
+            resultList = list;
+        }
         HashMap map=new HashMap();
         map.put("total",total);
-        map.put("result",list);
+        map.put("result",resultList);
         msg.data = map;
         return msg;
     }

+ 4 - 2
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/UserServiceImpl.java

@@ -646,7 +646,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
             requestMap.put("query_word", keyword);
             requestMap.put("query_type", 1);
             requestMap.put("query_range", 1);
-            requestMap.put("limit", 20);
+            requestMap.put("limit", 200);
             requestMap.put("cursor", cursor);
             HttpEntity<JSONObject> entity = new HttpEntity<>(requestMap, headers);
             ResponseEntity<String> ResponseEntity = restTemplate.postForEntity(url, entity, String.class);
@@ -692,7 +692,6 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
         WxCorpInfo wxCorpInfo = wxCorpInfoMapper.selectOne(new QueryWrapper<WxCorpInfo>().eq("company_id", WXCompanyId));
         HashMap<String, Object> data = new HashMap<>();
         httpRespMsg.data=data;
-        data.put("total",0);
         //当企业开启了微信通讯录的情况下
         if (org.apache.commons.lang3.StringUtils.isNotBlank(keyword) && wxCorpInfo!=null && wxCorpInfo.getSaasSyncContact()==1 && departmentId == -1){
             System.out.println("====================开始查询通讯录名单======================");
@@ -700,8 +699,10 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
             List users = result.get("user");
             if (users.size()!=0){
                 List<User> realUser = userMapper.selectList(new QueryWrapper<User>().in("corpwx_userid", users));
+                long total = realUser.size();
                 data.put("records",realUser);
                 data.put("nextCursor",result.get("nextCursor").get(0));
+                data.put("total",total);
                 return httpRespMsg;
             }else {
                 System.err.println("======================user列表没有查询到数据===========================");
@@ -709,6 +710,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
                 ArrayList<Object> records = new ArrayList<>();
                 data.put("records",records);
                 data.put("nextCursor","");
+                data.put("total",0);
                 return httpRespMsg;
             }
         }else {

+ 10 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/LeaveSheetMapper.xml

@@ -54,4 +54,14 @@
         where company_id = #{companyId} and leave_sheet.status=0
         and leave_sheet.start_date &lt;=#{endDate} and leave_sheet.end_date &gt;=#{startDate}
     </select>
+
+    <!-- 查询某段时间内全部请假的人员信息 -->
+    <select id="selectLeaveAll" resultType="map">
+        select leave_sheet.start_date as startDate,leave_sheet.end_date as endDate,leave_sheet.time_hours as hours,user.id as id,user.department_id as departmentId,user.wx_openid as wxOpenId,user.job_number as jobNumber,user.name as name
+        from leave_sheet
+        left join user
+        on user.id = leave_sheet.owner_id
+        where user.company_id = #{companyId} and leave_sheet.status=0
+        and leave_sheet.start_date &lt;=#{endDate} and leave_sheet.end_date &gt;=#{startDate}
+    </select>
 </mapper>

+ 4 - 1
fhKeeper/formulahousekeeper/timesheet/src/i18n/en.json

@@ -1457,5 +1457,8 @@
   "ren-wu-jie-zhi-shi-jian-bu-neng-xiao-yu-kai-shi-shi-jian": "The task expiration time cannot be later than the start time",
   "ren-wu-lie-biao-ming-cheng-bu-neng-wei-kong": "The task list name cannot be empty",
   "xin-zeng-ren-wu-lie-biao": "Adding a Task List",
-  "zan-wu-ren-wu": "No job at the moment"
+  "zan-wu-ren-wu": "No job at the moment",
+  "xiu-gai-xiang-mu-dang-qian-jie-duan": "Modifying the current phase",
+  "zheng-shi-xiang-mu": "Formal Project",
+  "fei-xiang-mu": "Non item"
 }

+ 4 - 1
fhKeeper/formulahousekeeper/timesheet/src/i18n/zh.json

@@ -1457,5 +1457,8 @@
   "xin-zeng-ren-wu-lie-biao": "新增任务列表",
   "mo-ban-ming-cheng-bu-neng-wei-kong": "模板名称不能为空",
   "ren-wu-lie-biao-ming-cheng-bu-neng-wei-kong": "任务列表名称不能为空",
-  "ren-wu-jie-zhi-shi-jian-bu-neng-xiao-yu-kai-shi-shi-jian": "任务截止时间不能小于开始时间"
+  "ren-wu-jie-zhi-shi-jian-bu-neng-xiao-yu-kai-shi-shi-jian": "任务截止时间不能小于开始时间",
+  "xiu-gai-xiang-mu-dang-qian-jie-duan": "修改项目当前阶段",
+  "zheng-shi-xiang-mu": "正式项目",
+  "fei-xiang-mu": "非项目"
 }

+ 6 - 4
fhKeeper/formulahousekeeper/timesheet/src/views/project/list.vue

@@ -441,8 +441,10 @@
                     <el-form-item :label="$t('projecttype')" :class="title == $t('newproject') && user.companyId == 936 ? 'wpgCssClass' : ''" prop="isPublic">
                         <!-- <el-select v-model="addForm.isPublic" style="width:32%;" @change="selectPublic" :disabled="!permissions.projectManagement && addForm.creatorId != user.id"> -->
                         <el-select v-model="addForm.isPublic" style="width:32%;" @change="selectPublic">
-                            <el-option :value="0" :label="$t('commonproject')"></el-option>
-                            <el-option :value="1" :label="$t('publicprojects')"></el-option>
+                            <!-- <el-option :value="0" :label="$t('commonproject')"></el-option>
+                            <el-option :value="1" :label="$t('publicprojects')"></el-option> -->
+                            <el-option :value="0" :label="$t('zheng-shi-xiang-mu')"></el-option>
+                            <el-option :value="1" :label="$t('fei-xiang-mu')"></el-option>
                         </el-select>
                         <el-tooltip effect="dark" :content="$t('ordinaryprojectsareopen')" placement="top-start">
                         <i class="el-icon-question"></i>
@@ -1226,12 +1228,12 @@
             </div>
         </el-dialog>
 
-        <el-dialog title="修改项目当前阶段" v-if="changeStageDialogVisible" :visible.sync="changeStageDialogVisible" width="300px">
+        <el-dialog :title="$t('xiu-gai-xiang-mu-dang-qian-jie-duan')" v-if="changeStageDialogVisible" :visible.sync="changeStageDialogVisible" width="300px">
             <el-select v-model="curChangeProject.curStageId" filterable :placeholder="$t('pleaseselecttheprojectphase')" style="margin: 0 auto;">
                 <el-option v-for="(item, index) in phaseList" :key="index" :label="item.projectStageName" :value="item.id"> </el-option>
             </el-select>
             <div slot="footer" class="dialog-footer" style="text-algin:center;">
-                <el-button type="primary" @click="confirmChangeStage">确定</el-button>
+                <el-button type="primary" @click="confirmChangeStage">{{ $t('btn.determine') }}</el-button>
             </div>
         </el-dialog>