Jelajahi Sumber

微信请假

cs 2 tahun lalu
induk
melakukan
e679df03a4

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

@@ -72,13 +72,14 @@ public class UserController {
     public HttpRespMsg getEmployeeList(@RequestParam Integer departmentId, String keyword,
                                        Integer status, Integer roleId,
                                        Integer onlyDirect,
+                                       String cursor,
                                        @RequestParam Integer pageIndex, @RequestParam Integer pageSize) {
-        return userService.getEmployeeList(departmentId, keyword, status, roleId, onlyDirect, pageIndex, pageSize, request);
+        return userService.getEmployeeList(departmentId, keyword, status, roleId, onlyDirect, cursor,pageIndex, pageSize, request);
     }
 
     @RequestMapping("/getSimpleActiveUserList")
-    public HttpRespMsg getSimpleActiveUserList(Integer departmentId,String keyword) {
-        return userService.getSimpleActiveUserList(departmentId,request,keyword);
+    public HttpRespMsg getSimpleActiveUserList(Integer departmentId,String keyword,String cursor) {
+        return userService.getSimpleActiveUserList(departmentId,request,keyword,cursor);
     }
 
     @RequestMapping("/getUserListByRole")

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

@@ -2,7 +2,9 @@ package com.management.platform.mapper;
 
 import com.management.platform.entity.LeaveSheet;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.tomcat.jni.Local;
 
+import java.time.LocalDate;
 import java.util.List;
 
 /**
@@ -18,4 +20,6 @@ public interface LeaveSheetMapper extends BaseMapper<LeaveSheet> {
      List<LeaveSheet> summaryData(String keyword, String startDate, String endDate, Integer companyId);
 
     List<LeaveSheet> selectApprovalList();
+
+    List<LeaveSheet> selectLeave(String userId, String startDate, String endDate);
 }

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

@@ -23,7 +23,7 @@ public interface UserService extends IService<User> {
 
     HttpRespMsg getUserInfo(String id);
 
-    HttpRespMsg getEmployeeList(Integer departmentId, String keyword, Integer status, Integer roleId, Integer onlyDirect, Integer pageIndex, Integer pageSize, HttpServletRequest request);
+    HttpRespMsg getEmployeeList(Integer departmentId, String keyword, Integer status, Integer roleId, Integer onlyDirect, String cursor, Integer pageIndex, Integer pageSize, HttpServletRequest request);
 
     HttpRespMsg deleteUser(String userId, HttpServletRequest request);
 
@@ -68,7 +68,7 @@ public interface UserService extends IService<User> {
 
     HttpRespMsg batchUpdateRole(String userIds, Integer roleId, HttpServletRequest request);
 
-    HttpRespMsg getSimpleActiveUserList(Integer departmentId, HttpServletRequest request,String keyword);
+    HttpRespMsg getSimpleActiveUserList(Integer departmentId, HttpServletRequest request,String keyword,String cursor);
 
     HttpRespMsg getUserListByRole(HttpServletRequest request);
 

+ 34 - 3
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectServiceImpl.java

@@ -7262,12 +7262,44 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
             total=projectMapper.findCountWithEmpMonthHours(targetUser.getCompanyId(),startDate,endDate,null,null,userId,branchDepartment,deptIds);
         }
         if(resultList.size()!=0){
-            System.out.println(resultList.toString());
+            DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
             float standardHours = Float.parseFloat(resultList.get(0).get("allday").toString())*days;
+            LocalDate localStartDate = LocalDate.parse(startDate, dateTimeFormatter);
+            LocalDate localEndDate = LocalDate.parse(endDate, dateTimeFormatter);
             for (Map<String, Object> map : resultList) {
+                //计算算请假时间
                 map.put("standardHours",standardHours);
                 map.put("workingTime",map.get("workingTime")==null?0:map.get("workingTime"));
-                map.put("leaveTime",map.get("leaveTime")==null?0:map.get("leaveTime"));
+                float leaveTime = 0;
+                List<LeaveSheet> leaveSheets = leaveSheetMapper.selectLeave(map.get("userId").toString(),startDate,endDate);
+                for (LeaveSheet leaveSheet : leaveSheets) {
+                    //当请假时间在当前月内的
+                    if ((leaveSheet.getStartDate().isEqual(localStartDate) || leaveSheet.getStartDate().isAfter(localStartDate)) && (leaveSheet.getEndDate().isEqual(localEndDate) || leaveSheet.getEndDate().isBefore(localEndDate))){
+                        leaveTime+=leaveSheet.getTimeHours();
+                    }else{
+                        float LeaveDay = leaveSheet.getStartDate().toEpochDay() - leaveSheet.getStartDate().toEpochDay();
+                        Float timeHours = leaveSheet.getTimeHours();
+                        //请假时间首尾跨月
+                        if(leaveSheet.getStartDate().isBefore(localStartDate) && leaveSheet.getEndDate().isAfter(localEndDate)){
+                            float sDifDay = leaveSheet.getStartDate().toEpochDay() - localStartDate.toEpochDay();
+                            float eDifDay = localEndDate.toEpochDay() - leaveSheet.getEndDate().toEpochDay();
+                            leaveTime+= standardHours + timeHours*(sDifDay/LeaveDay) + timeHours*(eDifDay/LeaveDay);
+                        }else {
+                            //当请假时间开始时间跨月
+                            if (leaveSheet.getStartDate().isBefore(localStartDate)){
+                                //平均计算
+                                float DifDay = leaveSheet.getStartDate().toEpochDay() - localStartDate.toEpochDay();
+                                leaveTime+= timeHours*(DifDay/LeaveDay);
+                            }else {
+                                //当请假时间结束时间跨月
+                                float DifDay = localEndDate.toEpochDay() - leaveSheet.getEndDate().toEpochDay();
+                                leaveTime+= timeHours*(DifDay/LeaveDay);
+                            }
+                        }
+                    }
+                }
+                map.put("leaveTime",leaveTime);
+                //是否满足工时
                 if (Float.parseFloat(map.get("workingTime").toString()) < standardHours){
                     map.put("whether",0);
                 }else{
@@ -7275,7 +7307,6 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                 }
             }
         }
-        System.err.println(resultList.toString());
         Map<String,Object> map=new HashMap<>();
         map.put("result",resultList);
         map.put("total",total);

+ 29 - 10
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/UserServiceImpl.java

@@ -469,8 +469,12 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
 
     //根据关键词查询微信通讯录人员的openid
     //keyword不可为空格或空字符串,否则请求参数错误
-    private Object[] getOpenId(String corpId,String keyword) {
+    private HashMap<String, Object> getOpenId(String corpId,String keyword,String cursor) {
+        HashMap<String, Object> result = new HashMap<>();
         Object[] user = null;
+        String nextCursor = "";
+        result.put("user",user);
+        result.put("nextCursor",nextCursor);
         String url = "https://qyapi.weixin.qq.com/cgi-bin/service/contact/search?provider_access_token=ACCESS_TOKEN";
         HttpHeaders headers = new HttpHeaders();
         RestTemplate restTemplate = new RestTemplate();
@@ -486,8 +490,8 @@ 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", 200);
-            //requestMap.put("cursor", pageSize);
+            requestMap.put("limit", 20);
+            requestMap.put("cursor", cursor);
             HttpEntity<JSONObject> entity = new HttpEntity<>(requestMap, headers);
             ResponseEntity<String> ResponseEntity = restTemplate.postForEntity(url, entity, String.class);
             if (ResponseEntity.getStatusCode() == HttpStatus.OK) {
@@ -504,6 +508,12 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
                     }else{
                         System.err.println("==================通讯录查询请求无userid列表===================");
                     }
+                    JSONObject isLast = respJson.getJSONObject("is_last");
+                    if (isLast!=null){
+                        if (!respJson.getBoolean("is_last")){
+                            nextCursor = respJson.getString("next_cursor");
+                        }
+                    }
                 }else {
                     System.err.println("===================通讯录查询请求失败=================");
                 }
@@ -511,12 +521,12 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
         }else {
             System.out.println("=============token查询失败=================");
         }
-        return user;
+        return result;
     }
 
     //获取员工的列表
     @Override
-    public HttpRespMsg getEmployeeList(Integer departmentId, String keyword, Integer status, Integer roleId, Integer onlyDirect, Integer pageIndex, Integer pageSize, HttpServletRequest request) {
+    public HttpRespMsg getEmployeeList(Integer departmentId, String keyword, Integer status, Integer roleId, Integer onlyDirect, String cursor, Integer pageIndex, Integer pageSize, HttpServletRequest request) {
         HttpRespMsg httpRespMsg = new HttpRespMsg();
         Integer WXCompanyId = userMapper.selectById(request.getHeader("Token")).getCompanyId();
         WxCorpInfo wxCorpInfo = wxCorpInfoMapper.selectOne(new QueryWrapper<WxCorpInfo>().eq("company_id", WXCompanyId));
@@ -526,17 +536,19 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
         //当企业开启了微信通讯录的情况下
         if (org.apache.commons.lang3.StringUtils.isNotBlank(keyword) && wxCorpInfo!=null && wxCorpInfo.getSaasSyncContact()==1 && departmentId == -1){
             System.out.println("====================开始查询通讯录名单======================");
-            Object[] users = getOpenId(wxCorpInfo.getCorpid(), keyword);
+            HashMap<String, Object> result = getOpenId(wxCorpInfo.getCorpid(), keyword, cursor);
+            Object users = result.get("user");
             if (users!=null){
-                System.err.println("=========================查询到的users列表为:"+users[0]);
                 List<User> realUser = userMapper.selectList(new QueryWrapper<User>().in("corpwx_userid", users));
                 data.put("records",realUser);
+                data.put("nextCursor",result.get("nextCursor"));
                 return httpRespMsg;
             }else {
                 System.err.println("======================user列表没有查询到数据===========================");
                 System.err.println("======================httpRespMsg返回空集合===========================");
                 ArrayList<Object> records = new ArrayList<>();
                 data.put("records",records);
+                data.put("nextCursor","");
                 return httpRespMsg;
             }
         }else {
@@ -619,6 +631,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
                 }
                 resultMap.put("records", list);
                 resultMap.put("total", total);
+                resultMap.put("nextCursor", "");
                 httpRespMsg.data = resultMap;
             } catch (NullPointerException e) {
                 //httpRespMsg.setError("验证失败");
@@ -2127,10 +2140,11 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
     }
 
     @Override
-    public HttpRespMsg getSimpleActiveUserList(Integer departmentId, HttpServletRequest request,String keyword) {
+    public HttpRespMsg getSimpleActiveUserList(Integer departmentId, HttpServletRequest request,String keyword,String cursor) {
         HttpRespMsg msg = new HttpRespMsg();
         String token = request.getHeader("TOKEN");
         User user = userMapper.selectById(token);
+        String nextCursor = "";
         QueryWrapper<User> wrapper = new QueryWrapper<User>().select("id, name, phone, job_number, department_id").eq("company_id", user.getCompanyId()).eq("is_active", 1);
         if (departmentId != null) {
             //获取全部子部门
@@ -2144,9 +2158,14 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
         WxCorpInfo wxCorpInfo = wxCorpInfoMapper.selectOne(new QueryWrapper<WxCorpInfo>().eq("company_id", WXCompanyId));
         //当企业开启了微信通讯录的情况下
         if (org.apache.commons.lang3.StringUtils.isNotBlank(keyword) && wxCorpInfo!=null && wxCorpInfo.getSaasSyncContact()==1){
-            Object[] users = getOpenId(wxCorpInfo.getCorpid(), keyword);
+            HashMap<String, Object> result = getOpenId(wxCorpInfo.getCorpid(), keyword, cursor);
+            HashMap<String, Object> msgResult = new HashMap<>();
             List<User> retUser = new ArrayList<>();
-            msg.data = retUser;
+            nextCursor = result.get("nextCursor").toString();
+            Object users = result.get("user");
+            msgResult.put("retUser",retUser);
+            msgResult.put("nextCursor",nextCursor);
+            msg.data = result;
             if (users!=null){
                 List<User> realUser = userMapper.selectList(new QueryWrapper<User>().in("corpwx_userid", users));
                 for (User item : userList) {

+ 7 - 2
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/task/TimingTask.java

@@ -261,9 +261,14 @@ public class TimingTask {
                leaveSheet.setOwnerName(user.getName());
                leaveSheet.setStartDate(LocalDate.parse(String.valueOf(map.get("startDate")),dtf));
                leaveSheet.setEndDate(LocalDate.parse(String.valueOf(map.get("endDate")),dtf));
-               leaveSheet.setTimeType(Integer.parseInt(String.valueOf(map.get("timeType"))));
+                int timeType = Integer.parseInt(String.valueOf(map.get("timeType")));
+                leaveSheet.setTimeType(timeType);
+               if (timeType == 0){
+                   leaveSheet.setTimeHours((Float) map.get("timeDays")*8);
+               }else {
+                   leaveSheet.setTimeHours((Float) map.get("timeHours"));
+               }
                leaveSheet.setTimeDays((Float) map.get("timeDays"));
-               leaveSheet.setTimeHours((Float) map.get("timeHours"));
                leaveSheet.setLeaveType(Integer.parseInt(String.valueOf(map.get("leaveType"))));
                leaveSheet.setProcinstId(String.valueOf(map.get("procinstId")));
                leaveSheet.setGmtFinished(String.valueOf(map.get("gmtFinished")));

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

@@ -47,4 +47,12 @@
        select * from leave_sheet
        where procinst_id is not NULL AND procinst_id != '' and status = 1 and DATEDIFF(NOW(),indate) &lt; 30
    </select>
+
+    <!-- 查询某段时间内的请假列表 -->
+    <select id="selectLeave" resultType="com.management.platform.entity.LeaveSheet">
+        select * from leave_sheet
+        where owner_id = #{userId} and leave_sheet.status=0 and
+        (leave_sheet.start_date &gt;=#{endDate} and leave_sheet.start_date &lt;=#{startDate}) or
+        (leave_sheet.end_date &gt;=#{startDate} and leave_sheet.end_date &lt;=#{endDate}))
+    </select>
 </mapper>

+ 4 - 10
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ProjectMapper.xml

@@ -1216,18 +1216,13 @@
     </select>
 
     <select id="getEmpMonthHours" resultType="java.util.Map">
-        select us.name,us.corpwx_userid as corpwxUserId,us.job_number as jobNumber,dp.department_name as departmentName,dp.corpwx_deptid as corpwxDeptId,
+        select us.id as userId,us.name,us.corpwx_userid as corpwxUserId,us.job_number as jobNumber,dp.department_name as departmentName,dp.corpwx_deptid as corpwxDeptId,
         (select allday from time_type te
         where te.company_id=#{companyId}) as allday,
         (select SUM(report.working_time) from report
         where report.creator_id=us.id and report.state=1
         and report.create_date &gt;=#{startDate} and report.create_date &lt;=#{endDate})
-        as workingTime,
-        (select SUM(leave_sheet.time_hours) from leave_sheet
-        where leave_sheet.owner_id=us.id and leave_sheet.status=0
-        and leave_sheet.start_date &gt;=#{startDate}
-        and leave_sheet.end_date &lt;=#{endDate})
-        as leaveTime
+        as workingTime
         from user us
         left join department dp on dp.department_id=us.department_id
         where us.company_id=#{companyId}
@@ -1257,9 +1252,8 @@
         select count(1)
         from(select us.name,dp.department_name  as departmentName,
         (select SUM(report.working_time) from report
-        left join task on task.id=report.task_id
-        where report.creator_id=us.id and task_id is not null
-        and task.create_date &gt;=#{startDate} and task.create_date &lt;=#{endDate})
+        where report.creator_id=us.id
+        and report.create_date &gt;=#{startDate} and report.create_date &lt;=#{endDate})
         as workingTime
         from user us
         left join  department dp on dp.department_id=us.department_id