Browse Source

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

ggooalice 2 years ago
parent
commit
38e05a792e

+ 108 - 4
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/WeiXinCorpController.java

@@ -36,6 +36,7 @@ public class WeiXinCorpController {
     public static final String TRANSMIT_SERVER_GET_DEPTDETAIL = "http://47.101.180.183:10010/wxcorp/getCorpDeptDetail?accessToken=ACCESS_TOKEN&deptId=DEPTID";
     public static final String TRANSMIT_SERVER_GET_DEPTMEMBDETAIL = "http://47.101.180.183:10010/wxcorp/getDeptUserDetail?accessToken=ACCESS_TOKEN&deptId=DEPTID";
     public static final String TRANSMIT_SERVER_GET_CONTACT_TOKEN = "http://47.101.180.183:10010/wxcorp/getCorpConcactAccessToken?corpid=CORPID&contactSecret=CONTACT_SECRET";
+    public static final String TRANSMIT_SERVER_GET_USERDETAIL = "http://47.101.180.183:10010/wxcorp/getUserInfoFromTranServer?accessToken=ACCESS_TOKEN&userId=USERID";
 
     public static final String POST_CONVERT_USERID = "https://qyapi.weixin.qq.com/cgi-bin/batch/userid_to_openuserid?access_token=ACCESS_TOKEN";
 
@@ -345,7 +346,7 @@ public class WeiXinCorpController {
                     param.setIndate(LocalDateTime.now());
                     sysConfigMapper.updateById(param);
                 }
-            } else if (jsonObject.has("ChangeType")) {
+            } else if ("change_contact".equals(jsonObject.get("InfoType")) && jsonObject.has("ChangeType")) {
                 //{"xml":{"ChangeType":"delete_user","UserID":"ShanShuiGongZhangTianYiSe",
                 // "SuiteId":"ww4e237fd6abb635af","InfoType":"change_contact","AuthCorpId":"wwf11426cf618e1703",
                 // "TimeStamp":1655908762,"OpenUserID":"woy9TkCAAApdqSxsfJbmK4cBJhbzI5Ug"}}
@@ -356,11 +357,94 @@ public class WeiXinCorpController {
                     String corpWxUserId = jsonObject.getString("UserID");
                     Integer companyId = wxCorpInfoMapper.selectById(corpId).getCompanyId();
                     User user = userMapper.selectOne(new QueryWrapper<User>().eq("corpwx_userid", corpWxUserId).eq("company_id", companyId));
-                    if (user.getIsActive() == 1) {
+                    if (user != null && user.getIsActive() == 1) {
                         user.setIsActive(0);
                         user.setInactiveDate(LocalDate.now());
                         userMapper.updateById(user);
                     }
+                } else if ("create_user".equals(changeType)) {
+                    //新增员工
+                    String corpId = jsonObject.getString("AuthCorpId");
+                    String corpWxUserId = jsonObject.getString("UserID");
+                    WxCorpInfo wxCorpInfo = wxCorpInfoMapper.selectById(corpId);
+                    if (!StringUtils.isEmpty(wxCorpInfo.getContactSecret())) {
+                        Integer companyId = wxCorpInfo.getCompanyId();
+                        SysRole defaultRole = sysRoleMapper.selectOne(new QueryWrapper<SysRole>().eq("company_id", companyId).eq("is_default", 1));
+                        //通过通讯录secret获取到员工姓名
+                        String remoteCorpConcactAccessToken = getRemoteCorpConcactAccessToken(wxCorpInfo);
+                        JSONObject userObj = remoteGetUserDetail(remoteCorpConcactAccessToken, corpWxUserId);
+                        if (userObj.getInteger("errcode") == 0) {
+                            //成功获取到通讯录的个人详情
+                            Long id = SnowFlake.nextId();
+                            JSONArray department = userObj.getJSONArray("department");
+                            Integer curUserWXDeptid = department.getInteger(department.size() - 1);
+                            Department sysDept = departmentMapper.selectOne(new QueryWrapper<Department>().eq("company_id", companyId).eq("corpwx_deptid", curUserWXDeptid));
+
+                            User user = new User()
+                                    .setId(id.toString())
+                                    .setRoleId(defaultRole.getId())
+                                    .setRoleName(defaultRole.getRolename())
+                                    .setName(userObj.getString("name"))
+                                    .setPassword(MD5Util.getPassword("000000"))
+                                    .setCorpwxUserid(corpWxUserId)
+                                    .setColor(ColorUtil.randomColor())
+                                    .setCompanyId(companyId);
+                            if (sysDept != null) {
+                                user.setDepartmentId(sysDept.getDepartmentId());
+                            }
+                            if (userObj.containsKey("direct_leader") && userObj.getJSONArray("direct_leader").size() > 0) {
+                                String directLeader = userObj.getJSONArray("direct_leader").getString(0);
+                                User leader = userMapper.selectOne(new QueryWrapper<User>().eq("company_id", companyId).eq("corpwx_userid", directLeader));
+                                if (leader != null) {
+                                    user.setSuperiorId(leader.getId());
+                                }
+                            }
+                            userMapper.insert(user);
+                        }
+                    }
+                } else if ("update_user".equals(changeType)) {
+                    String corpId = jsonObject.getString("AuthCorpId");
+                    String corpWxUserId = jsonObject.getString("UserID");
+                    WxCorpInfo wxCorpInfo = wxCorpInfoMapper.selectById(corpId);
+                    Integer companyId = wxCorpInfo.getCompanyId();
+                    //只有授权通讯录同步的,才有机会更新部门或者上级
+                    if (!StringUtils.isEmpty(wxCorpInfo.getContactSecret())) {
+                        String remoteCorpConcactAccessToken = getRemoteCorpConcactAccessToken(wxCorpInfo);
+                        JSONObject userObj = remoteGetUserDetail(remoteCorpConcactAccessToken, corpWxUserId);
+                        if (userObj.getInteger("errcode") == 0) {
+                            //成功获取到通讯录的个人详情
+                            JSONArray department = userObj.getJSONArray("department");
+                            Integer curUserWXDeptid = department.getInteger(department.size() - 1);
+                            Department sysDept = departmentMapper.selectOne(new QueryWrapper<Department>().eq("company_id", companyId).eq("corpwx_deptid", curUserWXDeptid));
+
+                            User user = userMapper.selectOne(new QueryWrapper<User>().eq("company_id", companyId).eq("corpwx_userid", corpWxUserId));
+                            User changeUser = new User();
+                            changeUser.setId(user.getId());
+
+                            boolean change = false;
+                            //姓名变化
+                            if (!user.getName().equals(userObj.getString("name"))) {
+                                changeUser.setName(userObj.getString("name"));
+                                change = true;
+                            }
+                            if (sysDept != null && !user.getDepartmentId().equals(sysDept.getDepartmentId())) {
+                                changeUser.setDepartmentId(sysDept.getDepartmentId());
+                                change = true;
+                            }
+                            if (userObj.containsKey("direct_leader") && userObj.getJSONArray("direct_leader").size() > 0) {
+                                String directLeader = userObj.getJSONArray("direct_leader").getString(0);
+                                User leader = userMapper.selectOne(new QueryWrapper<User>().eq("company_id", companyId).eq("corpwx_userid", directLeader));
+                                if (leader != null && !leader.equals(user.getSuperiorId())) {
+                                    changeUser.setSuperiorId(leader.getId());
+                                    change = true;
+                                }
+                            }
+                            if (change) {
+                                userMapper.updateById(changeUser);
+                            }
+                        }
+                    }
+
                 }
             }
         } catch (Exception e) {
@@ -1214,7 +1298,7 @@ public class WeiXinCorpController {
             User oldUser = userMapper.selectOne(new QueryWrapper<User>().select("id, name").eq("corpwx_userid", curUserid).eq("company_id", companyId));
             if (oldUser == null) {
                 //先检查姓名+手机号是否存在,如果存在,则更新corpwxId
-                User sameNameUser = userMapper.selectOne(new QueryWrapper<User>().eq("name", user.getName()).eq("mobile", user.getPhone()).eq("company_id", companyId).isNull("corpwx_userid").last("limit 1"));
+                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());
@@ -1346,7 +1430,7 @@ public class WeiXinCorpController {
                 User oldUser = userMapper.selectOne(new QueryWrapper<User>().eq("corpwx_userid", curUserid).eq("company_id", companyId));
                 if (oldUser == null) {
                     //先检查姓名是否存在,如果存在,则更新corpwxId
-                    User sameNameUser = userMapper.selectOne(new QueryWrapper<User>().eq("name", user.getName()).eq("mobile", user.getPhone()).eq("company_id", companyId).isNull("corpwx_userid").last("limit 1"));
+                    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());
@@ -1657,6 +1741,15 @@ public class WeiXinCorpController {
         return obj;
     }
 
+    private JSONObject remoteGetUserDetail(String accessToken, String userId) {
+        String url = TRANSMIT_SERVER_GET_USERDETAIL.replace("ACCESS_TOKEN", accessToken).replace("USERID", userId);
+        System.out.println("请求URL="+url);
+        String result = restTemplate.getForObject(url, String.class);
+        System.out.println("远程人员详情:"+result);
+        JSONObject obj = JSONObject.parseObject(JSONObject.parseObject(result).getString("data"));
+        return obj;
+    }
+
     //通过中转服务器,调用通讯录的accessToken
     private String getRemoteCorpConcactAccessToken(WxCorpInfo corpInfo) throws Exception {
         String url = TRANSMIT_SERVER_GET_CONTACT_TOKEN.replace("CORPID", corpInfo.getCorpid()).replace("CONTACT_SECRET", corpInfo.getContactSecret());
@@ -1726,6 +1819,17 @@ public class WeiXinCorpController {
         msg.data = userList.toString();
         return msg;
     }
+    //用于从中转服务器获取企业通讯录的单个人员详情
+    @RequestMapping("/getUserInfoFromTranServer")
+    public HttpRespMsg getUserInfoFromTranServer(String accessToken, String userId) {
+        String url = GET_USER_INFO_URL.replace("ACCESS_TOKEN", accessToken).replace("USERID", userId);
+        String result = restTemplate.getForObject(url, String.class);
+        JSONObject obj = JSONObject.parseObject(result);
+        HttpRespMsg msg = new HttpRespMsg();
+        msg.data = obj.toString();
+        return msg;
+    }
+
 
     private boolean judgeIsLeader(String userId) {
         int cnt = projectAuditorMapper.selectCount(new QueryWrapper<ProjectAuditor>().eq("auditor_id", userId));

+ 9 - 4
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/UserCorpwxTime.java

@@ -1,14 +1,17 @@
 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 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;
 
 /**
  * <p>
@@ -29,6 +32,8 @@ public class UserCorpwxTime extends Model<UserCorpwxTime> {
     private Integer id;
 
     @TableField("create_date")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @JsonFormat(pattern = "yyyy-MM-dd")
     private LocalDate createDate;
 
     /**

+ 22 - 2
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectServiceImpl.java

@@ -41,6 +41,8 @@ import java.text.SimpleDateFormat;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.LocalTime;
+import java.time.Period;
+import java.time.chrono.ChronoLocalDate;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
 import java.util.stream.Collectors;
@@ -1346,13 +1348,14 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
         String[] statusNames = {"进行中","已完成","已撤销"};
         String[] typeList = {"任务","里程碑","风险"};
         List<List<String>> exportList = new ArrayList<>();
-        String[] titles = {"项目编号", "项目名称", "任务名称", "计划工时(h)", "实际工时(h)","状态", "类型", "截止日期"};
+        String[] titles = {"项目编号", "项目名称", "任务名称", "执行人","计划工时(h)", "实际工时(h)","状态", "类型", "截止日期"};
         exportList.add(Lists.list(titles));
         for (Map task : projectList) {
             List<String> data = new ArrayList<>();
             data.add(task.get("project_code") == null?"":task.get("project_code").toString());
             data.add(task.get("project_name") == null?"":task.get("project_name").toString());
             data.add(task.get("name") != null?task.get("name").toString():"");
+            data.add(task.get("executor_name") != null?task.get("executor_name").toString():"");
             data.add(task.get("plan_hours") != null?task.get("plan_hours").toString():"");
             data.add(task.get("real_hours").toString());
             data.add(task.get("task_status")==null?"":statusNames[Integer.parseInt(task.get("task_status").toString())]);
@@ -3434,8 +3437,22 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
             userList = userMapper.selectList(queryWrapper);
         }
         Map<Object, List<Map<String, Object>>> listMap = reportList.stream().collect(Collectors.groupingBy(rp -> rp.get("userName")));
+        //获取请假数据
+        List<LeaveSheet> leaveSheetList = leaveSheetMapper.selectList(new QueryWrapper<LeaveSheet>().eq("company_id", targetUser.getCompanyId()));
         List<TimelinessRateVO> resultList=new ArrayList<>();
         for (User user : userList){
+            //请假的不参与及时率统计
+            List<LeaveSheet> leaveSheets = leaveSheetList.stream().filter(ls -> ls.getOwnerId().equals(user.getId())
+                    &&(ls.getStartDate().isAfter(ChronoLocalDate.from(sDate))||ls.getStartDate().isEqual(ChronoLocalDate.from(sDate)))
+                    &&(ls.getEndDate().isBefore(ChronoLocalDate.from(eDate))||ls.getEndDate().isEqual(ChronoLocalDate.from(eDate)))).collect(Collectors.toList());
+            for (LeaveSheet leaveSheet : leaveSheets) {
+                Period next = Period.between(leaveSheet.getStartDate(),leaveSheet.getEndDate());
+                if(next.getDays()<1){
+                    days-=1;
+                }else {
+                    days-=next.getDays();
+                }
+            }
             TimelinessRateVO timelinessRateVO=new TimelinessRateVO();
             timelinessRateVO.setUserName(user.getName());
             timelinessRateVO.setTimelinessRate(String.valueOf(dft.format(0)));
@@ -3469,6 +3486,9 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                      divide = bigDecimal.divide(BigDecimal.valueOf(days), 2, BigDecimal.ROUND_HALF_UP);
                 }else if(days==0&&num!=0){
                     divide=new BigDecimal(1);
+                    //查看当天有请假直接算100%
+                }else if (days==0&&num!=0&&leaveSheetList.size()>0){
+                    divide=new BigDecimal(1);
                 }else{
                     divide=new BigDecimal(0);
                 }
@@ -3598,9 +3618,9 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
         List<LocalDateTime> result = new ArrayList();
         while (start.isBefore(end)) {
             result.add(start);
-            result.add(start.plusDays(1));
             start=start.plusDays(1);
         }
+        result.add(start);
         return result;
     }
 

+ 33 - 3
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java

@@ -34,6 +34,7 @@ import javax.servlet.http.HttpServletRequest;
 import java.io.*;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
+import java.text.DateFormat;
 import java.text.DecimalFormat;
 import java.text.SimpleDateFormat;
 import java.time.Duration;
@@ -2264,7 +2265,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                 List<Integer> collect = subDepts.stream().map(Department::getDepartmentId).collect(Collectors.toList());
                 list = reportMapper.getUserDailyWorkTime(companyId, startDate, endDate, collect, null);
                 //部门负责人看自己部门相关的
-                allRangeUserList = userMapper.selectList(new QueryWrapper<User>().in("department_id", collect));
+                allRangeUserList = userMapper.selectList(new QueryWrapper<User>().in("department_id", collect).orderByDesc("department_id"));
             } else {
                 //看自己的所负责的项目相关人员的
                 list = reportMapper.getUserDailyWorkTime(companyId, startDate, endDate, null, user.getId());
@@ -2275,14 +2276,14 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                     List<Participation> participationList = participationMapper.selectList(new QueryWrapper<Participation>().in("project_id", collect));
                     List<String> collect1 = participationList.stream().map(Participation::getUserId).collect(Collectors.toList());
                     if (collect1.size() > 0) {
-                        allRangeUserList = userMapper.selectList(new QueryWrapper<User>().in("id", collect1));
+                        allRangeUserList = userMapper.selectList(new QueryWrapper<User>().in("id", collect1).orderByDesc("department_id"));
                     }
                 }
             }
         } else {
             list = reportMapper.getUserDailyWorkTime(companyId, startDate, endDate, null, null);
             //管理员看全公司所有人
-            allRangeUserList = userMapper.selectList(new QueryWrapper<User>().eq("company_id", companyId));
+            allRangeUserList = userMapper.selectList(new QueryWrapper<User>().eq("company_id", companyId).orderByDesc("department_id"));
         }
         List<User> needRangeUserList=new ArrayList<>();
         for (User u : allRangeUserList) {
@@ -2772,6 +2773,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
     @Override
     public HttpRespMsg exportReport(@RequestParam String startDate, @RequestParam String endDate, Integer projectId,Integer stateKey,Integer departmentId, HttpServletRequest request) {
         HttpRespMsg httpRespMsg = new HttpRespMsg();
+        DateFormat timeDf = new SimpleDateFormat("yyyy-MM-dd");
         try {
             String userId = request.getHeader("Token");
             User user = userMapper.selectById(userId);
@@ -2825,6 +2827,9 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
             if(stateKey==1){
                 titles.add("审核状态");
             }
+            if(timeType.getSyncCorpwxTime()==1){
+                titles.add("考勤时长");
+            }
             //创建表头
             HSSFRow headRow = sheet.createRow(0);
             //设置列宽 setColumnWidth的第二个参数要乘以256 这个参数的单位是1/256个字符宽度
@@ -2917,6 +2922,8 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                 //看公司所有人的
                 allReportByDate = reportMapper.getAllReportByDate(startDate, user.getCompanyId(), null, endDate, projectId,stateKey,departmentId);
             }
+            //获取企业微信考勤数据
+            List<UserCorpwxTime> userCorpwxTimeList = userCorpwxTimeMapper.selectList(new QueryWrapper<UserCorpwxTime>().eq("company_id", user.getCompanyId()).between("create_date", startDate, endDate));
             if (timeType.getMultiWorktime() == 1) {
                 java.text.DecimalFormat df = new java.text.DecimalFormat("#0.00");
                 //重新处理一下数据,把工作时间和工作事项移出来
@@ -3043,6 +3050,16 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                         case 1:row.createCell(index).setCellValue("已通过");
                             break;
                     }
+                    index++;
+                }
+                if(timeType.getSyncCorpwxTime()==1){
+                    for (UserCorpwxTime userCorpwxTime : userCorpwxTimeList) {
+                        String s = DateTimeFormatter.ofPattern("yyyy-MM-dd").format(userCorpwxTime.getCreateDate());
+                        String s1 = timeDf.format(map.get("createDate"));
+                        if(map.get("corpwxUserId").equals(userCorpwxTime.getCorpwxUserid())&&s.equals(s1)){
+                            row.createCell(index).setCellValue(userCorpwxTime.getStartTime()+"-"+userCorpwxTime.getEndTime()+",工作时长"+userCorpwxTime.getWorkHours());
+                        }
+                    }
                 }
                 rowNum++;
             }
@@ -3299,6 +3316,8 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
 
         long cnt = localStart.until(localEnd, ChronoUnit.DAYS);
         List<String> cpwxIds = new ArrayList<>();
+        //获取请假数据
+        List<LeaveSheet> leaveSheetList = leaveSheetMapper.selectList(new QueryWrapper<LeaveSheet>().eq("company_id", user.getCompanyId()));
         //按人员过滤
         for (User curUser: allRangeUserList){
                 for (int i=0;i<=cnt; i++) {
@@ -3338,7 +3357,18 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                             noRecord.department = "无";
                         }
                         noRecord.name = curUser.getName();
+                        //请假的
+                        List<LeaveSheet> leaveSheets = leaveSheetList.stream().filter(ls -> ls.getOwnerId().equals(curUser.getId())
+                                &&(ls.getStartDate().isAfter(LocalDate.parse(startDate))||ls.getStartDate().isEqual(LocalDate.parse(startDate)))
+                                &&(ls.getEndDate().isBefore(LocalDate.parse(endDate))||ls.getEndDate().isEqual(LocalDate.parse(endDate)))).collect(Collectors.toList());
+                        System.out.println(date);
+                        System.out.println(leaveSheets);
                         noReportDataList.add(noRecord);
+                        for (LeaveSheet leaveSheet : leaveSheets) {
+                            if(!(date.isBefore(leaveSheet.getStartDate())||date.isAfter(leaveSheet.getEndDate()))){
+                                noReportDataList.remove(noRecord);
+                            }
+                        }
                     }
                 }
         }

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

@@ -54,7 +54,7 @@
 
     <!--根据日期获取全部报告信息-->
     <select id="getAllReportByDate" resultType="java.util.Map">
-        SELECT a.id, c.name, 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,
+        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,
         a.department_audit_state as departmentAuditState, a.stage, a.pic_str as picStr, multi_worktime as multiWorktime
@@ -121,7 +121,7 @@
     </select>
 
     <select id="getProjectMembReportByDate" resultType="java.util.Map">
-        SELECT a.id, c.name, b.project_name AS project, b.category_name as categoryName,a.working_time AS duration,
+        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
@@ -166,7 +166,7 @@
     </select>
 
     <select id="getDeptMembReportByDate" resultType="java.util.Map">
-        SELECT a.id, c.name, b.project_name AS project, a.working_time AS duration, a.content, a.create_time AS time, a.create_date as createDate,
+        SELECT a.id, c.name,c.corpwx_userid as corpwxUserId, b.project_name AS project, 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,
         a.department_audit_state as departmentAuditState,a.stage, a.pic_str as picStr, multi_worktime as multiWorktime
@@ -634,6 +634,6 @@
         left join `user` on `user`.id=report.creator_id
         where report.company_id=#{companyId}
         and report.create_date between #{startDate} and #{endDate}
-        group by `user`.id,report.create_date
+        group by user.id,report.create_date
     </select>
 </mapper>

+ 1 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/TaskMapper.xml

@@ -157,7 +157,7 @@
     </select>
 
     <select id="getProjectTask" resultType="java.util.Map">
-        SELECT task.id, task.`name`, DATE_FORMAT(task.`end_date`, '%Y-%m-%d') as end_date, task.`plan_hours`,
+        SELECT task.id, task.`name`,task.executor_name,DATE_FORMAT(task.`end_date`, '%Y-%m-%d') as end_date, task.`plan_hours`,
         (SELECT IFNULL(SUM(working_time),0) FROM report WHERE report.`task_id` = task.id AND report.`state` = 1) AS real_hours,
         task.`task_status`, task.`task_type`,
         project.`project_code`, project.`project_name` FROM task LEFT JOIN project ON project.id = task.`project_id`

+ 1 - 0
fhKeeper/formulahousekeeper/timesheet/src/views/corpreport/list.vue

@@ -151,6 +151,7 @@
                     {{scope.row.name}}
                   </template>
                 </el-table-column>
+                <el-table-column prop="executor_name" label="执行人"  width="200"></el-table-column>
                 <el-table-column prop="plan_hours" label="计划工时(h)"  width="150">
                   <template slot-scope="scope">
                         {{scope.row.plan_hours == null? 0:scope.row.plan_hours.toFixed(1)}}

+ 2 - 1
fhKeeper/formulahousekeeper/timesheet/src/views/project/cost.vue

@@ -769,7 +769,7 @@
                     return;
                 } else if (this.radio == this.namess) {
                     url = '/project/getDegreeCost'
-                }
+                } 
                 this.http.post(url, param,
                 res => {
                     if (res.code == "ok") {
@@ -1021,6 +1021,7 @@
                     });
                 });
             },
+
             // 左右滚动
             scrollFunction () {
                 this.domObj = document.getElementById('clearfix') // 通过id获取要设置的div