Przeglądaj źródła

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

ggooalice 2 lat temu
rodzic
commit
52451fcf2e
15 zmienionych plików z 553 dodań i 243 usunięć
  1. 8 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/DingDingController.java
  2. 4 4
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ProjectController.java
  3. 28 43
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/WeiXinCorpController.java
  4. 5 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/ProjectMapper.java
  5. 3 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/ProjectService.java
  6. 124 51
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectServiceImpl.java
  7. 1 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java
  8. 4 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/WxCorpInfoServiceImpl.java
  9. 19 3
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/task/TimingTask.java
  10. 69 0
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ProjectMapper.xml
  11. 1 1
      fhKeeper/formulahousekeeper/timesheet/src/components/cascader.vue
  12. 6 3
      fhKeeper/formulahousekeeper/timesheet/src/components/select.vue
  13. 44 3
      fhKeeper/formulahousekeeper/timesheet/src/views/project/cost.vue
  14. 180 129
      fhKeeper/formulahousekeeper/timesheet/src/views/project/custom_data.vue
  15. 57 3
      fhKeeper/formulahousekeeper/timesheet/src/views/workReport/daily.vue

+ 8 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/DingDingController.java

@@ -12,6 +12,7 @@ import com.management.platform.mapper.TimeTypeMapper;
 import com.management.platform.mapper.UserMapper;
 import com.management.platform.service.CompanyDingdingService;
 import com.management.platform.service.DingDingService;
+import com.management.platform.task.TimingTask;
 import com.management.platform.util.*;
 import com.taobao.api.ApiException;
 import org.slf4j.Logger;
@@ -57,6 +58,8 @@ public class DingDingController {
     private CompanyDingdingMapper companyDingdingMapper;
     @Resource
     private TimeTypeMapper timeTypeMapper;
+    @Resource
+    private TimingTask timingTask;
 
 
     @RequestMapping("/callback")
@@ -457,4 +460,9 @@ public class DingDingController {
     public HttpRespMsg initSuperManager(String corpid, String name) {
         return dingDingService.initSuperManager(corpid, name);
     }
+
+    @RequestMapping("/wxLeaveTest")
+    public void wxLeaveTest() throws Exception {
+        timingTask.synWxLeave();
+    }
 }

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

@@ -429,14 +429,14 @@ public class ProjectController {
 
     //分页查询员工月度工时表
     @RequestMapping("/getEmpMonthHours")
-    public HttpRespMsg getEmpMonthHours(@RequestParam Integer pageIndex, @RequestParam Integer pageSize, LocalDate Month,Integer departmentId,String userId) {
-        return projectService.getEmpMonthHours(pageIndex, pageSize, Month,departmentId,userId, request);
+    public HttpRespMsg getEmpMonthHours(@RequestParam Integer pageIndex, @RequestParam Integer pageSize, String month,Integer departmentId,String userId) {
+        return projectService.getEmpMonthHours(pageIndex, pageSize, month,departmentId,userId, request);
     }
 
     //导出员工月度工时表
     @RequestMapping("/exportEmpMonthHours")
-    public HttpRespMsg exportEmpMonthHours() {
-        return projectService.exportAllProjectCost(request);
+    public HttpRespMsg exportEmpMonthHours(String month,String userId,Integer departmentId) {
+        return projectService.exportEmpMonthHours(month,request,userId,departmentId);
     }
 
     //分页查询项目收支平衡表

+ 28 - 43
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/WeiXinCorpController.java

@@ -146,7 +146,8 @@ public class WeiXinCorpController {
         public LocalDateTime expireTime = null;
     }
     public static Map<String, AgentItem> agentCorpTicketMap = new HashMap<String,AgentItem>();
-
+    @Value("${configEnv.isDev}")
+    boolean isDev;
     @Resource
     SysConfigMapper sysConfigMapper;
     @Resource
@@ -1700,7 +1701,7 @@ public class WeiXinCorpController {
                 }
                 if (!userItem.getName().equals(oldUser.getName())) {
                     changeUser.setId(oldUser.getId());
-                    changeUser.setName(oldUser.getName());
+                    changeUser.setName(userItem.getName());
                 }
                 if (!userItem.getCorpwxDeptid().equals(oldUser.getCorpwxDeptid())) {
                     changeUser.setId(oldUser.getId());
@@ -1721,6 +1722,8 @@ public class WeiXinCorpController {
                     //有变动
                     finalUpdateUserList.add(changeUser);
                 }
+            } else {
+                System.out.println("没找到用户:"+userItem.getName()+", "+userItem.getCorpwxUserid());
             }
         }
 
@@ -1770,10 +1773,10 @@ public class WeiXinCorpController {
 
         int companyRootDeptId = 1;
         if (syncMembs == 1) {
-            JSONArray allCorpWxUserJsonArray = getDeptUserInfo(curCorpAccessToken, companyRootDeptId);
+            JSONArray rootCorpUserJsonArray = getDeptUserInfo(curCorpAccessToken, companyRootDeptId);
             //获取远程的带姓名的详情,通过企业通讯录的token获取
             JSONArray remoteUnAUserList = null;
-            if (allCorpWxUserJsonArray.size() > 0) {
+            if (rootCorpUserJsonArray.size() > 0) {
                 remoteUnAUserList = remoteGetDeptUserDetail(wxCorpInfo, corpContactAccessToken, companyRootDeptId);
                 //做id转化
                 List<String> corpUserIds = new ArrayList<>();
@@ -1805,15 +1808,12 @@ public class WeiXinCorpController {
 
             List<User> updateUserList = new ArrayList<>();
 
-            for (int m=0;m<allCorpWxUserJsonArray.size(); m++) {
-                JSONObject userJson = allCorpWxUserJsonArray.getJSONObject(m);
+            for (int m=0;m<rootCorpUserJsonArray.size(); m++) {
+                JSONObject userJson = rootCorpUserJsonArray.getJSONObject(m);
                 String curUserid = userJson.getString("userid");
                 //跳过非激活状态的员工
                 if (userJson.getInteger("status") != 1) continue;
                 System.out.println("userid="+curUserid+", name=" + userJson.getString("name")+", department="+userJson.getJSONArray("department"));
-//                if (userJson.getJSONArray("direct_leader").size() > 0) {
-//                    hasDirectLdMembs.add(userJson);
-//                }
                 //不存在的人员, 进行插入
                 User user = new User();
 
@@ -2053,39 +2053,6 @@ public class WeiXinCorpController {
         if (needUpdateDepts.size() > 0) {
             departmentService.updateBatchById(needUpdateDepts);
         }
-        //更新人员的直属上级
-//        if (hasDirectLdMembs.size() > 0) {
-//            List<String> corpwxUids = new ArrayList<>();
-//            for (JSONObject userJson : hasDirectLdMembs) {
-//                String curUserid = userJson.getString("userid");
-//                //取第一个leaderId
-//                JSONArray directLeader = userJson.getJSONArray("direct_leader");
-//                String string = directLeader.getString(0);
-//                corpwxUids.add(curUserid);
-//                if (!corpwxUids.contains(string)) {
-//                    corpwxUids.add(string);
-//                }
-//            }
-//            List<User> userList = userMapper.selectList(new QueryWrapper<User>().select("id, corpwx_userid, superior_id").in("corpwx_userid", corpwxUids));
-//            List<User> updateUserList = new ArrayList<>();
-//            for (JSONObject userJson : hasDirectLdMembs) {
-//                String curUserid = userJson.getString("userid");
-//                User user = userList.stream().filter(u -> u.getCorpwxUserid().equals(curUserid)).findFirst().get();
-//                JSONArray directLeader = userJson.getJSONArray("direct_leader");
-//                String leaderCorpWxuid = directLeader.getString(0);
-//                //查找leader
-//                User leader = userList.stream().filter(u -> u.getCorpwxUserid().equals(leaderCorpWxuid)).findFirst().get();
-//                if (!leader.getId().equals(user.getSuperiorId())) {
-//                    user.setSuperiorId(leader.getId());
-//                    updateUserList.add(user);
-//                }
-//            }
-//            if (updateUserList.size() > 0) {
-//                //批量更新上级领导
-//                userService.updateBatchById(updateUserList);
-//            }
-//        }
-
         //更新人员的deptcascade
         updateUserDeptCascade(companyId);
 
@@ -2143,7 +2110,7 @@ public class WeiXinCorpController {
             return msg;
         }
         int companyId = company.getId();
-        //获取公司根部门人员,也就是没有分配部门的人员
+        //获取公司根部门人员,属于公司这个组织下面的人员
         int companyRootDeptId = 1;
         JSONArray unAssignedUserList = getDeptUserInfo(curCorpAccessToken, companyRootDeptId);
         SysRole defaultRole = sysRoleMapper.selectOne(
@@ -2514,6 +2481,24 @@ public class WeiXinCorpController {
         return msg;
     }
 
+    @RequestMapping("/updateSuiteTicket")
+    public HttpRespMsg updateSuiteTicket(String suiteTicket) {
+        HttpRespMsg msg = new HttpRespMsg();
+        String remoteHost = request.getRemoteHost();
+        System.out.println("请求来自:"+remoteHost);
+        if ("47.100.37.243".equals(remoteHost) && isDev) {
+            SysConfig config = sysConfigMapper.selectOne(new QueryWrapper<SysConfig>().eq("param_key", "wx_suite_ticket"));
+            if (config != null) {
+                config.setParamValue(suiteTicket);
+                config.setIndate(LocalDateTime.now());
+                sysConfigMapper.updateById(config);
+            }
+        }
+        return msg;
+    }
+
+
+
     //将部门id转换为部门层级
     private String convertDepartmentIdToCascade(Integer id, List<Department> allDeptList) {
         StringBuilder cascade = new StringBuilder();

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

@@ -7,6 +7,7 @@ import com.management.platform.entity.vo.ProjectWithStage;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Update;
 
+import java.time.LocalDate;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -127,4 +128,8 @@ public interface ProjectMapper extends BaseMapper<Project> {
     long selectCountWithGroupProject(Integer companyId, String startDate, String endDate, Integer startIndex, Integer endIndex, Integer projectId, List<Integer> inchagerIds, Integer groupId);
 
     List<Map<String, Object>> getCostByUserCustom(String startDate, String endDate, Integer companyId, List<Integer> deptIds, Integer customId, String subCustomName,String fieldName);
+
+    List<Map<String, Object>> getEmpMonthHours(Integer companyId, String startDate, String endDate, Integer start, Integer size, String userId, List<Integer> branchDepartment, List<Integer> deptIds);
+
+    long findCountWithEmpMonthHours(Integer companyId, String startDate, String endDate, Integer start, Integer size, String userId, List<Integer> branchDepartment, List<Integer> deptIds);
 }

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

@@ -201,5 +201,7 @@ public interface ProjectService extends IService<Project> {
 
     HttpRespMsg testAdd(String jobId);
 
-    HttpRespMsg getEmpMonthHours(Integer pageIndex, Integer pageSize, LocalDate Month,Integer departmentId,String userId, HttpServletRequest request);
+    HttpRespMsg getEmpMonthHours(Integer pageIndex, Integer pageSize, String month,Integer departmentId,String userId, HttpServletRequest request);
+
+    HttpRespMsg exportEmpMonthHours(String month, HttpServletRequest request, String userId, Integer departmentId);
 }

+ 124 - 51
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectServiceImpl.java

@@ -60,9 +60,12 @@ import java.time.LocalDateTime;
 import java.time.LocalTime;
 import java.time.chrono.ChronoLocalDate;
 import java.time.format.DateTimeFormatter;
+import java.time.temporal.TemporalAdjusters;
 import java.util.*;
 import java.util.stream.Collectors;
 
+import static java.time.format.DateTimeFormatter.ISO_DATE;
+
 
 /**
  * <p>
@@ -7177,59 +7180,129 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
 
     //分页查询员工月度工时表
     @Override
-    public HttpRespMsg getEmpMonthHours(Integer pageIndex, Integer pageSize, LocalDate Month,Integer departmentId,String userId, HttpServletRequest request) {
+    public HttpRespMsg getEmpMonthHours(Integer pageIndex, Integer pageSize, String month,Integer departmentId,String userId, HttpServletRequest request) {
         HttpRespMsg httpRespMsg =new HttpRespMsg();
-//        User targetUser = userMapper.selectById(request.getHeader("token"));
-//        List<SysRichFunction> functionAllList = sysFunctionMapper.getRoleFunctions(targetUser.getRoleId(), "全部人员月度工时表");
-//        List<SysRichFunction> functionDeptList = sysFunctionMapper.getRoleFunctions(targetUser.getRoleId(), "负责部门月度工时表");
-//        List<Integer> deptIds=null;
-//        List<Department> allDepartmentList=departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id",targetUser.getCompanyId()));
-//        List<Department> userDepartmentList = departmentMapper.selectList(new QueryWrapper<Department>().eq("manager_id", targetUser.getId()).eq("company_id",targetUser.getCompanyId()));
-//        List<DepartmentOtherManager> departmentOtherManagerList = departmentOtherManagerMapper.selectList(new QueryWrapper<DepartmentOtherManager>().eq("other_manager_id", targetUser.getId()));
-//        //判断查看权限
-//        if(functionAllList.size()==0){
-//            deptIds=new ArrayList<>();
-//            deptIds.add(-1);
-//            if(functionDeptList.size()>0){
-//                List<Integer> collect = userDepartmentList.stream().distinct().map(dm -> dm.getDepartmentId()).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);
-//                }
-//            }
-//        }
-//        long total;
-//        List<Map<String,Object>> resultList;
-//        List<Integer> branchDepartment =null;
-//        if(departmentId!=null){
-//            branchDepartment = getBranchDepartment(departmentId, allDepartmentList);
-//        }
-//        if(pageIndex!=null&&pageSize!=null){
-//            Integer size=pageSize;
-//            Integer start=(pageIndex-1)*size;
-//            resultList=projectMapper.getUserWorkingTimeStatic(targetUser.getCompanyId(),startDate,endDate,start,size,userId,branchDepartment,deptIds);
-//            total=projectMapper.findCountWithUserWorkingTime(targetUser.getCompanyId(),startDate,endDate,start,size,userId,branchDepartment,deptIds);
-//        }else{
-//            resultList=projectMapper.getUserWorkingTimeStatic(targetUser.getCompanyId(),startDate,endDate,null,null,userId,branchDepartment,deptIds);
-//            total=projectMapper.findCountWithUserWorkingTime(targetUser.getCompanyId(),startDate,endDate,null,null,userId,branchDepartment,deptIds);
-//        }
-//        for (Map<String, Object> map : resultList) {
-//            BigDecimal phBigDecimal =new BigDecimal(String.valueOf(map.get("planHours")==null?0:map.get("planHours")));
-//            BigDecimal wtBigDecimal =new BigDecimal(String.valueOf(map.get("workingTime")==null?0:map.get("workingTime")));
-//            if(phBigDecimal.compareTo(BigDecimal.ZERO)==0||wtBigDecimal.compareTo(BigDecimal.ZERO)==0){
-//                map.put("proportion",dft.format(0));
-//            }else{
-//                BigDecimal divide = wtBigDecimal.divide(phBigDecimal, 2, BigDecimal.ROUND_HALF_UP);
-//                map.put("proportion",dft.format(divide));
-//            }
-//        }
-//        Map<String,Object> map=new HashMap<>();
-//        map.put("result",resultList);
-//        map.put("total",total);
-//        httpRespMsg.data=map;
+        User targetUser = userMapper.selectById(request.getHeader("token"));
+        List<SysRichFunction> functionAllList = sysFunctionMapper.getRoleFunctions(targetUser.getRoleId(), "全部人员月度工时表");
+        List<SysRichFunction> functionDeptList = sysFunctionMapper.getRoleFunctions(targetUser.getRoleId(), "负责部门月度工时表");
+        List<Integer> deptIds=null;
+        List<Department> allDepartmentList=departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id",targetUser.getCompanyId()));
+        List<Department> userDepartmentList = departmentMapper.selectList(new QueryWrapper<Department>().eq("manager_id", targetUser.getId()).eq("company_id",targetUser.getCompanyId()));
+        List<DepartmentOtherManager> departmentOtherManagerList = departmentOtherManagerMapper.selectList(new QueryWrapper<DepartmentOtherManager>().eq("other_manager_id", targetUser.getId()));
+        //判断查看权限
+        if(functionAllList.size()==0){
+            deptIds=new ArrayList<>();
+            deptIds.add(-1);
+            if(functionDeptList.size()>0){
+                List<Integer> collect = userDepartmentList.stream().distinct().map(dm -> dm.getDepartmentId()).collect(Collectors.toList());
+                List<Integer> otherCollect = departmentOtherManagerList.stream().distinct().map(dom -> dom.getDepartmentId()).collect(Collectors.toList());
+                collect.addAll(otherCollect);
+                //将该用户管理的所有部门以及部门的子部门id添加到deptIds集合中
+                for (Integer integer : collect) {
+                    List<Integer> branchDepartment = getBranchDepartment(integer, allDepartmentList);
+                    deptIds.addAll(branchDepartment);
+                }
+            }
+        }
+        long total;
+        List<Map<String,Object>> resultList;
+        List<Integer> branchDepartment =null;
+        //若用户传入departmentId参数,则查询该部门所有子部门,添加到branchDepartment集合中
+        if(departmentId!=null){
+            branchDepartment = getBranchDepartment(departmentId, allDepartmentList);
+        }
+        String startDate = null;
+        String endDate = null;
+        LocalDate time = LocalDate.parse(month, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
+        startDate = time.with(TemporalAdjusters.firstDayOfMonth()).toString();
+        endDate = time.with(TemporalAdjusters.lastDayOfMonth()).toString();
+        int days = WorkDayCalculateUtils.getWorkDaysListInRange(startDate, endDate, 0).size();
+        //分页查询用户计划工时和实际工时
+        if(pageIndex!=null&&pageSize!=null){
+            Integer size=pageSize;
+            Integer start=(pageIndex-1)*size;
+            resultList=projectMapper.getEmpMonthHours(targetUser.getCompanyId(),startDate,endDate,start,size,userId,branchDepartment,deptIds);
+            total=projectMapper.findCountWithEmpMonthHours(targetUser.getCompanyId(),startDate,endDate,start,size,userId,branchDepartment,deptIds);
+        }else{
+            resultList=projectMapper.getEmpMonthHours(targetUser.getCompanyId(),startDate,endDate,null,null,userId,branchDepartment,deptIds);
+            total=projectMapper.findCountWithEmpMonthHours(targetUser.getCompanyId(),startDate,endDate,null,null,userId,branchDepartment,deptIds);
+        }
+        if(resultList.size()!=0){
+            System.out.println(resultList.toString());
+            float standardHours = Float.parseFloat(resultList.get(0).get("allday").toString())*days;
+            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"));
+                if (Float.parseFloat(map.get("workingTime").toString()) != standardHours){
+                    map.put("whether",0);
+                }else{
+                    map.put("whether",1);
+                }
+            }
+        }
+        System.err.println(resultList.toString());
+        Map<String,Object> map=new HashMap<>();
+        map.put("result",resultList);
+        map.put("total",total);
+        httpRespMsg.data=map;
         return httpRespMsg;
     }
 
+    //导出员工月度工时表
+    @Override
+    public HttpRespMsg exportEmpMonthHours(String month, HttpServletRequest request, String userId, Integer departmentId){
+        HttpRespMsg msg=new HttpRespMsg();
+        Integer companyId = userMapper.selectById(request.getHeader("token")).getCompanyId();
+        String startDate = null;
+        String endDate = null;
+        LocalDate time = LocalDate.parse(month, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
+        startDate = time.with(TemporalAdjusters.firstDayOfMonth()).toString();
+        endDate = time.with(TemporalAdjusters.lastDayOfMonth()).toString();
+        WxCorpInfo wxCorpInfo = wxCorpInfoMapper.selectOne(new QueryWrapper<WxCorpInfo>().eq("company_id", companyId));
+        HttpRespMsg httpRespMsg = getEmpMonthHours(null, null,month,departmentId,userId,request);
+        Map<String,Object> data = (Map<String, Object>) httpRespMsg.data;
+        List<Map<String,Object>> resultList= (List<Map<String, Object>>) data.get("result");
+        List<List<String>> dataList=new ArrayList<>();
+        List<String> titleList=new ArrayList<>();
+        titleList.add("姓名");
+        titleList.add("工号");
+        titleList.add("标准工时");
+        titleList.add("实际工时");
+        titleList.add("请假工时");
+        titleList.add("是否满足工时");
+        dataList.add(titleList);
+        for (Map<String, Object> map : resultList) {
+            List<String> item=new ArrayList<>();
+            if(wxCorpInfo!=null&&wxCorpInfo.getSaasSyncContact()==1){
+                item.add("$userName="+(map.get("corwxUserId")==null?"":map.get("corwxUserId"))+"$");
+                item.add(String.valueOf(StringUtils.isEmpty(map.get("jobNumber"))?"":map.get("jobNumber")));
+                //item.add("$deprtmentName="+(map.get("corpwxDeptId")==null?"":map.get("corpwxDeptId"))+"$");
+            }else {
+                item.add((String) map.get("name"));
+                item.add(String.valueOf(StringUtils.isEmpty(map.get("jobNumber"))?"":map.get("jobNumber")));
+                //item.add((String) map.get("departmentName")==null?"":(String) map.get("departmentName"));
+            }
+            item.add(String.valueOf(map.get("standardHours")).equals("null")?"":String.valueOf(map.get("standardHours")));
+            item.add(String.valueOf(map.get("workingTime")).equals("null")?"":String.valueOf(map.get("workingTime")));
+            item.add(String.valueOf(map.get("leaveTime")).equals("null")?"":String.valueOf(map.get("leaveTime")));
+            if (map.get("whether").toString().equals("1")){
+                item.add("是");
+            }else{
+                item.add("否");
+            }
+            dataList.add(item);
+        }
+        //生成excel文件导出
+        String fileName = "员工"+time.getMonthValue()+"月工时表"+System.currentTimeMillis();
+        try {
+            return excelExportService.exportGeneralExcelByTitleAndList(wxCorpInfo,fileName , dataList, path);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+//        String resp = ExcelUtil.exportGeneralExcelByTitleAndList(fileName , dataList, path);
+//        msg.data = resp;
+        return msg;
+    }
+
 }

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

@@ -2987,7 +2987,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
             String name = (String)data.get("name");
             String departmentName = (String) data.get("departmentName");
             String corpwxUserId = (String) data.get("corpwxUserId");
-            String corpwxDeptId = (String) data.get("corpwxDeptId");
+            Integer corpwxDeptId = (Integer) data.get("corpwxDeptId");
             Map<String, Object> map = new HashMap<>();
             String date = new SimpleDateFormat("yyyy-MM-dd").format((Date)data.get("createDate"));
             String corpwxUserid = (String) data.get("corpwxUserId");

+ 4 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/WxCorpInfoServiceImpl.java

@@ -905,6 +905,7 @@ public class WxCorpInfoServiceImpl extends ServiceImpl<WxCorpInfoMapper, WxCorpI
             String accessToken = getCorpAccessToken(wxCorpInfo);
             url = url.replace("ACCESS_TOKEN", accessToken);
             //查询并更新审核中的审批单
+            System.out.println("+++++++++++++++++++开始查询并更新审核中的审批单+++++++++++++++++++");
             if (approvalLeave.size()!=0){
                 for (LeaveSheet corpInfo : approvalLeave) {
                     if (corpInfo.getCompanyId().equals(wxCorpInfo.getCompanyId())&& StringUtils.isNotEmpty(corpInfo.getProcinstId())){
@@ -971,6 +972,7 @@ public class WxCorpInfoServiceImpl extends ServiceImpl<WxCorpInfoMapper, WxCorpI
                     }
                 }
             }
+            System.out.println("+++++++++++++++++++++开始同步昨天请假信息+++++++++++++++++++++");
             //批量获取审批单号
             ArrayList<HashMap> list = new ArrayList<>();
             HashMap<String, String> record_type = new HashMap<>();
@@ -1130,12 +1132,13 @@ public class WxCorpInfoServiceImpl extends ServiceImpl<WxCorpInfoMapper, WxCorpI
                         //请假说明
                         leaveSheet.setRemark(remark==null?"":remark);
                         //请假时长和天数
-                        float time = Integer.parseInt(timeHours);
+                        float time = Float.parseFloat(timeHours);
                         if("hour".equals(leaveType)){
                             leaveSheet.setTimeType(1);
                             leaveSheet.setTimeHours(time/3600);
                         }else{
                             leaveSheet.setTimeType(0);
+                            leaveSheet.setTimeHours(time/3600);
                             leaveSheet.setTimeDays(time/3600/24);
                         }
                         result.add(leaveSheet);

+ 19 - 3
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/task/TimingTask.java

@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.injector.methods.SelectById;
+import com.management.platform.controller.WeiXinCorpController;
 import com.management.platform.entity.*;
 import com.management.platform.mapper.*;
 import com.management.platform.service.*;
@@ -65,7 +66,8 @@ public class TimingTask {
     public String appSecret;
     @Autowired
     private RedisUtil redisUtil;
-
+    @Autowired
+    RestTemplate restTemplate;
     @Resource
     private CompanyMapper companyMapper;
     @Resource
@@ -309,8 +311,9 @@ public class TimingTask {
 
     //每天1:00 同步昨天的微信请假信息
     @Scheduled(cron = "0 0 1 ? * *")
-    private void synWxLeave() throws Exception {
+    public void synWxLeave() throws Exception {
         if (isDev) return;
+        System.out.println("+++++++++++++++++++微信请假同步开始+++++++++++++++++++");
         String startTime = Long.toString(System.currentTimeMillis()/1000L-86400);
         String endTime = Long.toString(System.currentTimeMillis()/1000L);
         //查询更新审批中的请假单
@@ -536,7 +539,20 @@ public class TimingTask {
         }
 
     }
-
+    //推送到开发环境,每10分钟一次
+    @Scheduled(fixedRate = 600 * 1000)
+    private void genRandomCode() {
+        if (isDev) {
+            return;
+        }
+        String url = "http://47.101.180.183:10010/wxcorp/updateSuiteTicket?suiteTicket="
+                +sysConfigMapper.selectOne(new QueryWrapper<SysConfig>().eq("param_key", "wx_suite_ticket")).getParamValue();
+        String forObject = this.restTemplate.getForObject(url, String.class);
+        JSONObject json = JSONObject.parseObject(forObject);
+        if (json.getString("code").equals("error")) {
+            System.out.println("推送失败:"+json.getString("msg"));
+        }
+    }
     //每分钟校验是否有需要提醒的填报
     @Scheduled(fixedRate = 60 * 1000)
     private void process() {

+ 69 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ProjectMapper.xml

@@ -1214,4 +1214,73 @@
         </if>
         GROUP BY suc.name
     </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 allday from time_type te
+        where te.company_id=#{companyId}) as allday,
+        (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 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
+        from user us
+        left join department dp on dp.department_id=us.department_id
+        where us.company_id=#{companyId}
+        <if test="userId!=null and userId!=''">
+            and us.id=#{userId}
+        </if>
+        <if test="branchDepartment!=null and branchDepartment.size()>0">
+            and us.department_id in
+            <foreach collection="branchDepartment" open="(" close=")" separator="," item="item">
+                #{item}
+            </foreach>
+        </if>
+        <if test="deptIds!=null and deptIds.size()>0">
+            and us.department_id in
+            <foreach collection="deptIds" open="(" item="item" close=")" separator=",">
+                #{item}
+            </foreach>
+        </if>
+        group by us.id
+        order  by us.department_id
+        <if test="start!=null and size!=null">
+            limit #{start},#{size}
+        </if>
+    </select>
+
+    <select id="findCountWithEmpMonthHours" resultType="java.lang.Long">
+        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})
+        as workingTime
+        from user us
+        left join  department dp on dp.department_id=us.department_id
+        where us.company_id=#{companyId}
+        <if test="userId!=null and userId!=''">
+            and us.id=#{userId}
+        </if>
+        <if test="branchDepartment!=null and branchDepartment.size()>0">
+            and us.department_id in
+            <foreach collection="branchDepartment" open="(" close=")" separator="," item="item">
+                #{item}
+            </foreach>
+        </if>
+        <if test="deptIds!=null and deptIds.size()>0">
+            and us.department_id in
+            <foreach collection="deptIds" open="(" item="item" close=")" separator=",">
+                #{item}
+            </foreach>
+        </if>
+        group by us.id
+        order  by us.department_id)as total
+    </select>
 </mapper>

+ 1 - 1
fhKeeper/formulahousekeeper/timesheet/src/components/cascader.vue

@@ -2,7 +2,7 @@
   <div tabindex="0" @blur="selectClihide()" style="display: inline-block;position: relative;">  
     <div :class="disabled ? 'disabledTrue' : 'disabledFalse'" @mouseenter="moveIonDiv" @mouseleave="outIonDiv">
         <div :style="`width:${selectWidth}px;height:${selectHeight}px`" :class="classDiv ? 'select selectDiv' : 'select'" @click.stop="selectCli" :ref="disabled ? '' : 'selectDiv'">
-            <div :style="'line-height: '+selectHeight+'px;font-size: '+selectFontSize+'px;'" :class="(selectName == $t('defaultText.pleaseChoose') || selectName == $t('qing-xuan-ze-bu-men')) ? 'selecttex selecttexXuan' : 'selecttex'">
+            <div :style="'line-height: '+selectHeight+'px;font-size: '+selectFontSize+'px;'" :class="(selectName == $t('defaultText.pleaseChoose') || selectName == $t('qing-xuan-ze-bu-men') || selectName == $t('other.allDepartments')) ? 'selecttex selecttexXuan' : 'selecttex'">
                 <ww-open-data type='departmentName' :openid='selectName'></ww-open-data>
                 <!-- {{selectName}} -->
             </div>

+ 6 - 3
fhKeeper/formulahousekeeper/timesheet/src/components/select.vue

@@ -274,7 +274,8 @@ export default {
                         distinction: this.distinction,
                         index: this.index, // 选中的索引
                         other: this.other,
-                        arrUserList: this.multiSelectList
+                        arrUserList: this.multiSelectList,
+                        name: this.selectName
                     }
                     this.$emit("selectCal", obj)
                 }
@@ -298,7 +299,8 @@ export default {
                         id: nameId,
                         distinction: this.distinction,
                         index: this.index, // 选中的索引
-                        other: this.other
+                        other: this.other,
+                        name: this.selectName
                     }
                     this.$emit("selectCal", obj)
                 }
@@ -379,7 +381,8 @@ export default {
                 distinction: this.distinction,
                 index: this.index, // 选中的索引
                 other: this.other,
-                arrUserList: this.multiSelectList
+                arrUserList: this.multiSelectList,
+                name: this.selectName
             }
             this.$emit("selectCal", obj)
         }

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

@@ -42,12 +42,16 @@
                 <el-option v-for="item in customList" :key="item.id" :label="item.name" :value="item.name"></el-option>
             </el-select> -->
 
-            <el-select v-model="personnelValue" filterable clearable :placeholder="$t('pleaseselectpersonnel')"  size="small" style="margin-top: 10px;width: 350px" v-if="radio == $t('ren-yuan')" @change="personnel()">
+            <el-select v-model="personnelValue" filterable clearable :placeholder="$t('pleaseselectpersonnel')"  size="small" style="margin-top: 10px;width: 350px" v-if="radio == $t('ren-yuan') && user.userNameNeedTranslate != '1'" @change="personnel()">
                 <el-option v-for="item in hasReportUserList" :key="item.id" :label="item.name" :value="item.name">
                     <span style="float: left">{{ item.name }}</span>
                     <span style="float: right; color: #8492a6; font-size: 13px;margin-left: 20px" v-if="item.jobNumber">{{ item.jobNumber }}</span>
                 </el-option>
             </el-select>
+            <span style="text-align: left">
+            <selectCat v-if="radio == $t('ren-yuan') && user.userNameNeedTranslate == '1'" :size="'small'" :widthStr="'350'" :distinction="'2'" :subject="hasReportUserList" :clearable="true" @selectCal="selectCal"></selectCat>
+            </span>
+
         </el-col>
         <el-col :span="4">
             <el-button @click="exportProjectData" v-if="theCustomListFlg"  size="small">{{ $t('reporderived') }}</el-button>
@@ -88,12 +92,15 @@
                             <span style="float: right;font-size: 13px;">{{ item.projectName }}</span>
                         </el-option>
                     </el-select>
+
                 </el-form-item>
 
                 <el-form-item :label="$t('departmentchoice')" v-if="radio == $t('other.project')">
-                    <el-cascader v-model="exportParam.deptId" :options="departmentList" :placeholder="$t('defaultText.pleaseChoose')"
+                    <el-cascader v-if="user.userNameNeedTranslate != 1" v-model="exportParam.deptId" :options="departmentList" :placeholder="$t('defaultText.pleaseChoose')"
                         :props="{ checkStrictly: true, expandTrigger: 'hover' }" clearable filterable style="width:350px;"
                     ></el-cascader>
+
+                    <vueCascader :size="'medium'" :widthStr="'350'" :clearable="true" :subject="departmentList" :radios="true" :distinction="'1'" @vueCasader="vueCasader" v-if="user.userNameNeedTranslate == 1"></vueCascader>
                 </el-form-item>
 
                 <el-form-item prop="projectCategoryId" :label="$t('projectclassification')" v-if="radio == $t('projectclassification')">
@@ -103,9 +110,11 @@
                     </el-select>
                 </el-form-item>
                 <el-form-item prop="userIds" :label="$t('screening.selectPeople')" v-if="radio == $t('ren-yuan')">
-                    <el-select v-model="exportParam.userIds" :placeholder="$t('lable.allStaff')" multiple="true"  clearable style="width:350px;" filterable="true">
+                    <el-select v-if="user.userNameNeedTranslate != '1'" v-model="exportParam.userIds" :placeholder="$t('lable.allStaff')" multiple="true"  clearable style="width:350px;" filterable="true">
                         <el-option v-for="item in hasReportUserList"  :key="item.id" :label="item.name" :value="item.id"></el-option>
                     </el-select>
+
+                    <selectCat v-if="user.userNameNeedTranslate == '1'" :size="'medium'" :widthStr="'350'" :subject="hasReportUserList" :clearable="true" :multiSelect="true" @selectCal="selectCal"></selectCat>
                 </el-form-item>
                 <el-form-item prop="projectId" :label="user.timeType.fixMonthcost==0?$t('time.dateRange'):$t('Selectmonth')">
                     <el-date-picker v-show="user.timeType.fixMonthcost==0"
@@ -161,8 +170,17 @@
 </template>
 
 <script>
+// 引入自定义组件
+    import selectCat from "@/components/select.vue"
+    //引入自定义级联组件
+    import vueCascader from "@/components/cascader.vue"
+
     import util from "../../common/js/util";
     export default {
+        components: {
+            selectCat,
+            vueCascader
+        },
         data() {
             return {
                 allListData: [],
@@ -1210,6 +1228,29 @@
                 }
                 return arr;
             },
+            // 自定义事件
+            selectCal(obj) {
+                console.log(obj)
+                if(obj.distinction == 1) {
+                    let arr = []
+                    for(var i in obj.arrUserList) {
+                        arr.push(obj.arrUserList[i].id) 
+                    }
+                    this.exportParam.userIds = arr
+                } else if(obj.distinction == 2) {
+                    console.log(obj)
+                    this.personnelValue = obj.name
+                    this.personnel()
+                }
+            },
+            vueCasader(obj) {
+                if(obj.distinction == 1) {
+                    console.log(obj, '数据')
+                    let arr = []
+                    arr.push(obj.id)
+                    this.exportParam.deptId = arr
+                }
+            }
         },
         created() {
             this.myChart = null

+ 180 - 129
fhKeeper/formulahousekeeper/timesheet/src/views/project/custom_data.vue

@@ -248,137 +248,22 @@
                     var _this = this;
                     this.hasReportUserList = [];
                     if (res.code == "ok") {
-                        //工时总成本
-                        this.hasReportUserList = this.radio == '人员' ? res.data.userList : res.data.department;
-                        var xList = [] , yList = [] , list = res.data.list, array = [] , series = [];
-                        
-                        var totalHours = 0.0;
-                        if (list.length > 0) {
-                            var num = list.length==0?0:list[0].project.length;
-                            for(var i in list) {
-                                xList.push(list[i].name);
-                                var pro = list[i].project;
-                                for(var j in pro) {
-                                    if(array.indexOf(pro[j].project) == -1) {
-                                        array.push(pro[j].project)
-                                    }
-                                }
-                            }
-
-                            for(var i in array) {
-                                yList.push(array[i]);
-                                var dataList = [];
-                                for(var j in list) {
-                                    var project = list[j].project , num = 0;
-                                    if(project.length != 0) {
-                                        for(var k in project) {
-                                            if(project[k].project == array[i]) {
-                                                dataList.push({
-                                                    "value": project[k].cost,
-                                                    "cost": project[k].cost
-                                                })
-                                                totalHours += parseFloat(project[k].cost);
-                                            } else {
-                                                num++;
-                                            }
-                                            if(k == project.length-1 && num != project.length-1) {
-                                                dataList.push({
-                                                    "value": 0,
-                                                    "cost": 0
-                                                })
-                                            }
-                                        }
-                                    } else {
-                                        dataList.push({
-                                            "value": 0,
-                                            "cost": 0,
-                                        })
-                                    }
+                        if(this.user.userNameNeedTranslate == 1 && (this.radio == '人员' || this.radio == '部门')) {
+                            let arr = []
+                            for(var i in res.data.list) {
+                                let obj = {}
+                                if(this.radio == '人员') {
+                                    obj.type = 'userName'
+                                } else {
+                                    obj.type = 'departmentName'
                                 }
-                                series.push({
-                                    name: array[i],
-                                    type: 'bar',
-                                    stack:'1',
-                                    barMaxWidth: 30,
-                                    data: dataList,
-                                })
+                                obj.id = res.data.list[i].name
+                                arr.push(obj)
                             }
-                        } 
-                            
-                            
-                            var myChart = echarts.init(document.getElementById("container"));
-                            totalHours = totalHours.toFixed(1);
-                            _this.myChart = myChart;
-                            var option = {
-                                //总成本
-                                title: {
-                                    text: _this.user.timeType.customDataName + '总计' + totalHours,
-                                    left:'left',
-                                },
-                                
-                                // 工具箱
-                                legend: {
-                                    x: 80,
-                                    y: 10,
-                                    data: yList,
-                                    show: true,
-                               top:"5%",//与上方的距离 可百分比% 可像素px
-                                },
-                                grid : {
-                                    top : 80,    //距离容器上边界40像素
-                                    bottom: 35   //距离容器下边界30像素
-                                },
-                                toolbox: {
-                                    show: true,
-                                    feature:{
-                                        saveAsImage:{
-                                            show:true
-                                        },
-                                        restore:{
-                                            show:true
-                                        },
-                                        // dataView:{
-                                        //     show:true
-                                        // },
-                                        // dataZoom:{
-                                        //     show:true
-                                        // },
-                                        magicType:{
-                                            type:['line','bar']
-                                        }
-                                    }
-                                },
-                                tooltip:{
-                                    trigger:'axis',
-                                    formatter: function (params,ticket,callback) {
-                                        var totalTime = 0;
-                                        var res = "";
-                                        for(var i in params) {
-                                            if (params[i].data.value > 0) {
-                                                res += "<div style='margin-top:3px;font-size:12px;'><font color='#ddd'>项目名称:" + params[i].seriesName 
-                                                    + "</font><br/>"+_this.user.timeType.customDataName+" : " + params[i].data.cost+"</div>";
-                                                totalTime += Number(params[i].data.cost);
-                                            }
-                                        }
-                                        res = res +'<br/>'+ params[0].name+ '<br/>总计: ' + totalTime.toFixed(1);
-                                        return res;
-                                    }
-                                },
-                                xAxis: {
-                                    data: xList,
-                                    axisLabel: {
-                                        interval:0,rotate:20
-                                    }
-                                },
-                                yAxis: [{
-                                    type : 'value',
-                                    axisLabel: {
-                                        formatter:'{value}'
-                                    }
-                                }],
-                                series: series,
-                            };
-                            myChart.setOption(option,{notMerge:true});
+                            this.dealWithTranslationPlone(arr, res)
+                        } else {
+                            this.choli(res)
+                        }
                     } else {
                         this.$message({
                         message: res.msg,
@@ -394,6 +279,172 @@
                     });
                 });
             },
+            dealWithTranslationPlone(items, dataList) {
+                console.log(items, '处理的值')
+                    if (WWOpenData.initCanvas) {
+                        WWOpenData.initCanvas()
+                    }
+                    const myFunOne = async () => {
+                        const result = await new Promise((resolve, reject) => {
+                            if(WWOpenData.prefetch) {
+                                 WWOpenData.prefetch({ items }, (err, data) => {
+                                    if (err) { return reject(err) }
+                                    resolve(data)
+                                })
+                            }
+                        })
+                        for(var i in dataList.data.list) {
+                            dataList.data.list[i].name = result.items[i].data
+                        }
+                        this.choli(dataList)
+                    }
+                    myFunOne()
+            },
+            choli(data) {
+                console.log('过来的值', data)
+                var _this = this;
+                //工时总成本
+                    // this.hasReportUserList = this.radio == '人员' ? res.data.userList : res.data.department;
+                    // var xList = [] , yList = [] , list = res.data.list, array = [] , series = [];
+
+                    this.hasReportUserList = this.radio == '人员' ? data.data.userList : data.data.department;
+                    var xList = [] , yList = [] , list = data.data.list, array = [] , series = [];
+
+                    var totalHours = 0.0;
+                    if (list.length > 0) {
+                        var num = list.length==0?0:list[0].project.length;
+                        for(var i in list) {
+                            xList.push(list[i].name);
+                            var pro = list[i].project;
+                            for(var j in pro) {
+                                if(array.indexOf(pro[j].project) == -1) {
+                                    array.push(pro[j].project)
+                                }
+                            }
+                        }
+                        for(var i in array) {
+                            yList.push(array[i]);
+                            var dataList = [];
+                            for(var j in list) {
+                                var project = list[j].project , num = 0;
+                                if(project.length != 0) {
+                                    for(var k in project) {
+                                        if(project[k].project == array[i]) {
+                                            dataList.push({
+                                                "value": project[k].cost,
+                                                "cost": project[k].cost
+                                            })
+                                            totalHours += parseFloat(project[k].cost);
+                                        } else {
+                                            num++;
+                                        }
+                                        if(k == project.length-1 && num != project.length-1) {
+                                            dataList.push({
+                                                "value": 0,
+                                                "cost": 0
+                                            })
+                                        }
+                                    }
+                                } else {
+                                    dataList.push({
+                                        "value": 0,
+                                        "cost": 0,
+                                    })
+                                }
+                            }
+                            series.push({
+                                name: array[i],
+                                type: 'bar',
+                                stack:'1',
+                                barMaxWidth: 30,
+                                data: dataList,
+                            })
+                        }
+                    } 
+                        
+                        
+                    var myChart = echarts.init(document.getElementById("container"));
+                    totalHours = totalHours.toFixed(1);
+                    _this.myChart = myChart;
+                    var option = {
+                        //总成本
+                        title: {
+                            text: _this.user.timeType.customDataName + '总计' + totalHours,
+                            left:'left',
+                        },
+                        
+                        // 工具箱
+                        legend: {
+                            x: 80,
+                            y: 10,
+                            data: yList,
+                            show: true,
+                          top:"5%",//与上方的距离 可百分比% 可像素px
+                        },
+                        grid : {
+                            top : 80,    //距离容器上边界40像素
+                            bottom: 35   //距离容器下边界30像素
+                        },
+                        toolbox: {
+                            show: true,
+                            feature:{
+                                saveAsImage:{
+                                    show:true
+                                },
+                                restore:{
+                                    show:true
+                                },
+                                // dataView:{
+                                //     show:true
+                                // },
+                                // dataZoom:{
+                                //     show:true
+                                // },
+                                magicType:{
+                                    type:['line','bar']
+                                }
+                            }
+                        },
+                        tooltip:{
+                            trigger:'axis',
+                            formatter: function (params,ticket,callback) {
+                                var totalTime = 0;
+                                var res = "";
+                                for(var i in params) {
+                                    if (params[i].data.value > 0) {
+                                        res += "<div style='margin-top:3px;font-size:12px;'><font color='#ddd'>项目名称:" + params[i].seriesName 
+                                            + "</font><br/>"+_this.user.timeType.customDataName+" : " + params[i].data.cost+"</div>";
+                                        totalTime += Number(params[i].data.cost);
+                                    }
+                                }
+                                if(_this.user.userNameNeedTranslate != 1) {
+                                    res = res +'<br/>'+ params[0].name+ '<br/>总计: ' + totalTime.toFixed(1);
+                                } else {
+                                    if(_this.radio == '人员' || _this.radio == '部门') {
+                                        res = res +'<br/>'+ '' + '<br/>总计: ' + totalTime.toFixed(1);
+                                    } else {
+                                        res = res +'<br/>'+ params[0].name+ '<br/>总计: ' + totalTime.toFixed(1);
+                                    }
+                                }
+                                return res;
+                            }
+                        },
+                        xAxis: {
+                            data: xList,
+                            axisLabel: {
+                                interval:0,rotate:20
+                            }
+                        },
+                        yAxis: [{
+                            type : 'value',
+                            axisLabel: {
+                                formatter:'{value}'
+                            }
+                        }],
+                        series: series,
+                    };
+                    myChart.setOption(option,{notMerge:true});
+            },
             yanjiu() {
                 // console.log('触发')
             },

+ 57 - 3
fhKeeper/formulahousekeeper/timesheet/src/views/workReport/daily.vue

@@ -319,8 +319,19 @@
         <el-dialog :title="editTitle[isBatch]" :visible.sync="dialogVisible" width="60%" style="height:95%" :close-on-click-modal="false" @closed="guanbi()" custom-class="editReportDialog" ref="editReportDialog">
             <el-form ref="workForm" :model="workForm" :rules="workRules" label-width="120px">
                 <el-form-item :label="$t('screening.selectPeople')" v-if="isSubstitude">
-                    <el-input @focus="showChooseMembTree" v-model="workForm.userNames"
+                    <el-input v-if="user.userNameNeedTranslate != 1" @focus="showChooseMembTree" v-model="workForm.userNames"
                     :placeholder="$t('defaultText.pleaseSelectAsubstitute')" ></el-input>
+                    <div class="daitianrbao"  @click="showChooseMembTree" v-if="user.userNameNeedTranslate == 1">
+                        <span class="spnn" v-if="workForm.userNames">
+                            <span v-for="(item, index) in workForm.userNames" :key="index">
+                                <span><ww-open-data type='userName' :openid='item'></ww-open-data></span>
+                                <span v-if="index < workForm.userNames.length - 1">,</span>
+                            </span>
+                        </span>
+                        <span class="spnn hover" v-else>
+                            {{$t('defaultText.pleaseSelectAsubstitute')}}
+                        </span>
+                    </div>
                 </el-form-item>
                 <el-form-item :label="$t('screening.workingDate')" prop="createDate">
                     <el-date-picker v-model="workForm.createDate" :editable="false" format="yyyy-MM-dd" value-format="yyyy-MM-dd" 
@@ -955,7 +966,11 @@
                     </el-select>
                 </el-form-item>
                 <el-form-item prop="departmentId" :label="$t('other.selectdepartment')" v-if="permissions.reportsCompany">
-                    <el-cascader v-model="exportParam.departmentId" :placeholder="$t('other.allDepartments')" :options="departmentList" :props="{ checkStrictly: true, value: 'id' }" clearable style="width: 350px;"></el-cascader>
+
+                    <el-cascader v-if="user.userNameNeedTranslate != 1" v-model="exportParam.departmentId" :placeholder="$t('other.allDepartments')" :options="departmentList" :props="{ checkStrictly: true, value: 'id' }" clearable style="width: 350px;"></el-cascader>
+
+                    <vueCascader :size="'medium'" :widthStr="'350'" :clearable="true" :subject="departmentList" :radios="true" :distinction="'1'" @vueCasader="vueCasader" v-if="user.userNameNeedTranslate == 1" :selectNameChuan="$t('other.allDepartments')"></vueCascader>
+
                 </el-form-item>
                 <el-form-item prop="projectId" :label="$t('time.dateRange')">
                     <el-date-picker
@@ -1544,12 +1559,16 @@
 
     // 自定义select组件
     import selectCat from "@/components/select.vue"
+
+     // 引入自定义级联组件
+    import vueCascader from "@/components/cascader.vue"
     
     let _that = this
     export default {
         mixins: [dragMixin],
         components: {
-            selectCat
+            selectCat,
+            vueCascader
         },
         data() {
             return {
@@ -2831,6 +2850,12 @@
                 if (this.workForm.userNames.length > 0) {
                     this.workForm.userNames = this.workForm.userNames.substring(0, this.workForm.userNames.length-1);
                 }
+
+                if(this.user.userNameNeedTranslate == 1) {
+                    if(this.workForm.userNames) {
+                        this.workForm.userNames = this.workForm.userNames.split(',')
+                    }
+                }
                 
             },
 
@@ -5940,6 +5965,14 @@
                 // obj.id 是 选中人员的id, obj.idx 是 当前的索引
                 this.workForm.domains[obj.idx].projectAuditorId = obj.id
             },
+            vueCasader(obj) {
+                console.log(obj, '看看值')
+                if(obj.distinction == 1) {
+                    let arr = []
+                    arr.push(obj.item.id)
+                    this.exportParam.departmentId = arr
+                }
+            },
             //分页
             handleCurrentChange(val) {
                 this.toViewForm.pageIndex = val;
@@ -6290,4 +6323,25 @@
         font-size: 14px;
         padding-right: 8px;
     }
+    .daitianrbao {
+        width: 100%;
+        box-sizing: border-box;
+        height: 40px;
+        border-radius: 4px;
+        border: 1px solid #DCDFE6;
+        overflow: hidden;
+        text-overflow: ellipsis;
+        display: flex;
+        // align-items: center;
+    }
+    .daitianrbao .spnn {
+        display: inline-block;
+        box-sizing: border-box;
+        padding: 0 15px;
+        overflow: hidden;
+        text-overflow: ellipsis;
+    }
+    .daitianrbao .hover {
+        color: #DCDFE6 !important;
+    }
 </style>