Min 1 year ago
parent
commit
702d55b1b0

+ 6 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ReportController.java

@@ -2332,5 +2332,11 @@ public class ReportController {
         return reportService.geProjectTimeCostByThird(json);
     }
 
+    //todo: 提供接口 (威派格) 获取人员工时数据
+    @RequestMapping("/getUserTimeCostByThird")
+    public HttpRespMsg getUserTimeCostByThird(@RequestBody String json){
+        return reportService.getUserTimeCostByThird(json);
+    }
+
 }
 

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

@@ -137,4 +137,6 @@ public interface ReportService extends IService<Report> {
     HttpRespMsg getReportById(Integer reportId, HttpServletRequest request);
 
     HttpRespMsg geProjectTimeCostByThird(String json);
+
+    HttpRespMsg getUserTimeCostByThird(String json);
 }

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

@@ -7589,4 +7589,304 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
         msg.setData(responseData);
         return msg;
     }
+
+    @Override
+    public HttpRespMsg getUserTimeCostByThird(String json) {
+        HttpRespMsg httpRespMsg=new HttpRespMsg();
+        DateFormat timeDf = new SimpleDateFormat("yyyy-MM-dd");
+        JSONObject requestData = JSONObject.parseObject(json);
+        if(requestData.get("header")==null){
+            httpRespMsg.setError("Request Parameter Parsing Error,Unable to find 'header'");
+            return httpRespMsg;
+        }
+        JSONObject requestHeader = JSONObject.parseObject(String.valueOf(requestData.get("header")));
+        if(requestData.get("memberQuery")==null){
+            httpRespMsg.setError("Request Parameter Parsing Error,Unable to find 'memberQuery'");
+            return httpRespMsg;
+        }
+        JSONObject memberQueryQuery = JSONObject.parseObject(String.valueOf(requestData.get("memberQuery")));
+        if(requestHeader.get("token")==null){
+            httpRespMsg.setError("Request Parameter Parsing Error,Unable to find 'token'");
+            return httpRespMsg;
+        }
+        String requestToken = String.valueOf(requestHeader.get("token"));
+        List<ThirdPartyInterface> thirdPartyInterfaces = thirdPartyInterfaceMapper.selectList(new QueryWrapper<ThirdPartyInterface>().eq("token", requestToken));
+        if(thirdPartyInterfaces.size()<=0){
+            httpRespMsg.setError("Validation failed,'token' is Error");
+            return httpRespMsg;
+        }
+        Integer companyId = thirdPartyInterfaces.get(0).getCompanyId();
+        Company company = companyMapper.selectById(companyId);
+        if(LocalDateTime.now().isAfter(thirdPartyInterfaces.get(0).getExpireTime())){
+            httpRespMsg.setError("'token' is Expire");
+            return httpRespMsg;
+        }
+        if(memberQueryQuery.get("personnelId")==null&&memberQueryQuery.get("organizationId")==null){
+            httpRespMsg.setError("Request Parameter Parsing Error,Unable to find 'personnelId' or 'organizationId',There must be a non empty parameter");
+            return httpRespMsg;
+        }
+        if(memberQueryQuery.get("startDate")==null||memberQueryQuery.get("endDate")==null){
+            httpRespMsg.setError("The date range cannot be empty");
+            return httpRespMsg;
+        }
+        String startDate = String.valueOf(memberQueryQuery.get("startDate"));
+        String endDate = String.valueOf(memberQueryQuery.get("endDate"));
+        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+        LocalDate start = LocalDate.parse(startDate, dateTimeFormatter);
+        LocalDate end = LocalDate.parse(endDate, dateTimeFormatter);
+        if (start.until(end, ChronoUnit.DAYS) > 365) {
+            httpRespMsg.setError("The time interval shall not exceed one year");
+            return httpRespMsg;
+        }
+        String userId =null;
+        String departmentId =null;
+        Integer stateKey =0;
+        if(memberQueryQuery.get("personnelId")!=null){
+            userId = String.valueOf(memberQueryQuery.get("personnelId"));
+            User user = userMapper.selectOne(new LambdaQueryWrapper<User>().eq(User::getJobNumber, userId));
+            if(user!=null){
+                userId=user.getId();
+            }
+        }
+        if(memberQueryQuery.get("organizationId")!=null){
+            departmentId = String.valueOf(memberQueryQuery.get("organizationId"));
+            Department department = departmentMapper.selectOne(new LambdaQueryWrapper<Department>().eq(Department::getCorpwxDeptid, departmentId).or().eq(Department::getDepartmentId, departmentId));
+            if(department!=null){
+                departmentId = String.valueOf(department.getDepartmentId());
+            }
+
+        }
+        if(memberQueryQuery.get("stateKey")!=null){
+            stateKey = Integer.valueOf(String.valueOf(memberQueryQuery.get("stateKey")));
+        }
+        Map<String,Object> responseData=new HashMap<>();
+        //检查模式,是否是一个项目多个工作事项的情况
+        TimeType timeType = timeTypeMapper.selectOne(new QueryWrapper<TimeType>().eq("company_id",companyId));
+        WxCorpInfo wxCorpInfo = wxCorpInfoMapper.selectOne(new QueryWrapper<WxCorpInfo>().eq("company_id", companyId));
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
+        List<Map<String,Object>> dataList=new ArrayList<>();
+
+        List<HashMap<String, Object>> allReportByDate = null;
+
+        //获取部门的所有子部门
+        List<Department> departments = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id",companyId));
+        List<Integer> branchDepartment = null;
+        if(departmentId != null){
+            branchDepartment = departmentService.getBranchDepartment(Integer.valueOf(departmentId),departments);
+        }
+        //看公司所有人的
+        if (timeType.getShowFillauditTime() == 1) {
+            allReportByDate = reportMapper.getAllReportByDateWithReportLog(startDate, companyId, userId, endDate, null,stateKey,branchDepartment);
+        } else {
+            allReportByDate = reportMapper.getAllReportByDate(startDate,companyId, userId, endDate, null,stateKey,branchDepartment);
+        }
+        if (timeType.getMultiWorktime() == 1) {
+            java.text.DecimalFormat df = new java.text.DecimalFormat("#0.00");
+            //重新处理一下数据,把工作时间和工作事项移出来
+            List<HashMap<String, Object>> dealDataList = new ArrayList<HashMap<String, Object>>();
+            for (HashMap<String, Object> map : allReportByDate) {
+                if ((Integer)map.get("multiWorktime") == 1) {
+                    String data = (String)map.get("content");
+                    Integer isOvertime = (Integer) map.get("isOvertime");
+                    JSONArray array = JSONArray.parseArray(data);
+                    if (array != null) {
+                        for (int i=0;i<array.size(); i++) {
+                            JSONObject obj = array.getJSONObject(i);
+                            WorktimeItem worktimeItem = JSONObject.toJavaObject(obj, WorktimeItem.class);
+                            HashMap<String, Object> newMap = new HashMap<>();
+                            newMap.putAll(map);
+                            newMap.put("startTime", worktimeItem.getStartTime());
+                            newMap.put("endTime", worktimeItem.getEndTime());
+                            newMap.put("content", worktimeItem.getContent());
+                            newMap.put("duration", df.format(worktimeItem.getTime()));
+                            //第一条填充加班
+                            if (isOvertime == 1 && i == 0) {
+                                newMap.put("isOvertime", 1);
+                                newMap.put("overtimeHours", map.get("overtimeHours"));
+                            } else {
+                                newMap.put("isOvertime", 0);
+                            }
+                            dealDataList.add(newMap);
+                        }
+                    } else {
+                        HashMap<String, Object> newMap = new HashMap<>();
+                        newMap.putAll(map);
+                        newMap.put("startTime", "");
+                        newMap.put("endTime", "");
+                        newMap.put("content", "");
+                        dealDataList.add(newMap);
+                    }
+                } else {
+                    dealDataList.add(map);
+                }
+            }
+            allReportByDate = dealDataList;
+        }
+        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+        DecimalFormat df = new DecimalFormat("#0.0");
+        int offsetSeconds = 0;
+        if (company.getIsInternational() == 1) {
+            //国际化版本
+            LocaleInformation locale = localeInformationMapper.selectById(companyId);
+            TimeZone curZone = TimeZone.getTimeZone(locale.getTimezone());
+            offsetSeconds = (curZone.getRawOffset() - TimeZone.getTimeZone("GMT+8").getRawOffset())/1000;
+            //时区转换,默认数据库存的是GMT+8
+            for (Map<String, Object> map : allReportByDate) {
+                String createTime = sdf.format((Date)map.get("time"));
+                LocalDateTime time = LocalDateTime.parse(createTime, dtf);
+                time = time.plusSeconds(offsetSeconds);
+                map.put("time", DateTimeUtil.localDateTimeToDate(time));
+
+                //审核时间
+                if(map.get("projectAuditTime") != null){
+                    String projectAuditTime = sdf.format((Date)map.get("projectAuditTime"));
+                    LocalDateTime auditTime = LocalDateTime.parse(projectAuditTime, dtf);
+                    auditTime = auditTime.plusSeconds(offsetSeconds);
+                    map.put("projectAuditTime", DateTimeUtil.localDateTimeToDate(auditTime));
+                }else  map.put("projectAuditTime","");
+
+            }
+        }
+        List<User> userList = userMapper.selectList(new QueryWrapper<User>().eq("company_id", companyId));
+        long t1 = System.currentTimeMillis();
+        DateTimeFormatter dft = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+        for (Map<String, Object> map : allReportByDate) {
+            Map<String,Object> item=new HashMap<>();
+            item.put("jobNumber",(String) map.get("jobNumber"));
+            Department dept = null;
+            for (Department department : departments) {
+                if (map.containsKey("departmentId") && department.getDepartmentId().toString().equals(map.get("departmentId").toString())){
+                    dept = department;
+                    break;
+                }
+            }
+            item.put("userName",(String) map.get("name"));
+            item.put("departmentName",departmentService.getSupDepartment(dept,departments));
+            item.put("departmentId",dept.getCorpwxDeptid());
+            item.put("projectCode",(String) map.get("projectCode"));
+            item.put("projectName",(String) map.get("project"));
+            item.put("categoryName",(String) map.get("categoryName"));
+            if(timeType.getMainProjectState()==1){
+                item.put("projectMainName",(String) map.get("projectMainName"));
+            }else {
+                item.put("subProjectName",(String) map.get("subProjectName"));
+                item.put("subProjectCode",(String) map.get("subProjectCode"));
+            }
+            if (company.getPackageProject() == 1) {
+                item.put("taskName",(String) map.get("taskName"));
+            }
+            item.put("createDate",new SimpleDateFormat("yyyy-MM-dd")
+                    .format((java.sql.Date) map.get("createDate")));
+            item.put("duration",map.get("duration").toString());
+            if (timeType.getMultiWorktime() == 1) {
+                if ((Integer)map.get("multiWorktime") == 1) {
+                    item.put("multiWorktime",map.get("startTime").toString()+"-"+map.get("endTime").toString());
+                } else {
+                    item.put("multiWorktime","");
+                }
+                //加班情况
+                int isOverTime = (Integer) map.get("isOvertime");
+                item.put("overtimeHours",isOverTime==1?(df.format((double)map.get("overtimeHours"))):"-");
+            }
+            if (timeType.getMultiWorktime() == 0) {
+                int isOverTime = (Integer) map.get("isOvertime");
+                item.put("overtimeHours",isOverTime==1?(df.format((double)map.get("overtimeHours"))):"-");
+            }
+            //项目管理专业版,需要显示任务分组和投入阶段
+            if (company.getPackageProject() == 1) {
+                item.put("groupName",map.get("groupName") != null? map.get("groupName").toString():"");
+                item.put("stage",map.get("stage") != null?map.get("stage").toString():"");
+            }
+            if (timeType.getShowFillauditTime() == 1) {
+                item.put("time",sdf.format((Date)map.get("time")));
+                item.put("projectAuditorName",(String)map.get("projectAuditorName"));
+                //分组审核通过或者项目审核通过都显示
+                if (map.get("projectAuditTime") != null && ((Integer)map.get("projectAuditState") == 1 || (Integer)map.get("groupAuditState") == 1)) {
+                    item.put("projectAuditTime",sdf.format((Date)map.get("projectAuditTime")));
+                } else {
+                    item.put("projectAuditTime","");
+                }
+                StringBuilder sb = new StringBuilder();
+                boolean isFirst = true;
+                String logMsg = (String)map.get("logMsg");
+                if (logMsg != null) {
+                    String[] logMsgs = logMsg.split("❤");
+                    for (String msgItem : logMsgs) {
+                        String[] splitItems = msgItem.split("@");
+                        //operator_id@operate_date@msg
+                        String operateDateStr = splitItems[1];
+                        LocalDateTime operateDate = LocalDateTime.parse(operateDateStr, dtf);
+                        ReportLogDetail audit = new ReportLogDetail();
+                        audit.setOperatorId(splitItems[0]);
+                        audit.setOperateDate(operateDate);
+                        audit.setMsg(splitItems[2]);
+
+                        if (company.getIsInternational() == 1) {
+                            operateDate = operateDate.plusSeconds(offsetSeconds);
+                        }
+                        String time = dtf.format(operateDate);
+                        String msg= "";
+                        msg = time+" " + audit.getMsg();
+                        if (!isFirst) {
+                            sb.append("->");
+                        } else {
+                            isFirst = false;
+                        }
+                        sb.append(msg);
+                    }
+                }
+                item.put("reviewProcess",sb.toString());
+            }
+            item.put("content",(String) map.get("content"));
+            if(stateKey==1){
+                Integer state = (Integer) map.get("state");
+                switch (state){
+                    //case 0:row.createCell(index).setCellValue("待审核");
+                    case 0:item.put("state",MessageUtils.message("stages.reviewed"));
+                        break;
+                    //case 1:row.createCell(index).setCellValue("已通过");
+                    case 1:item.put("state",MessageUtils.message("stages.passed"));
+                        break;
+                }
+            }
+            //审核流程状态
+            Integer packageEngineering = company.getPackageEngineering();
+            if (packageEngineering.equals(0)){
+                if(String.valueOf(map.get("state")).equals("1")){
+                    item.put("reviewProcessState","——");
+                }else if (String.valueOf(map.get("state")).equals("-1")){
+                    item.put("reviewProcessState","导入待审核");
+                } else {
+                    //部门审核
+                    if(String.valueOf(map.get("isDeptAudit")).equals("1")){
+                        String deptAuditorId = map.get("deptAuditorName")+"";
+                        String departmentName = map.get("departmentName") + "";
+                        for (User userItem : userList) {
+                            if (userItem.getId().equals(deptAuditorId)){
+                                if(timeType.getReportAuditType()==4){
+                                    departmentName = map.get("buDepartmentName") + "";
+                                    item.put("reviewProcessState","待项目所属BU[" + departmentName + "](" + userItem.getName() + ")审核");
+                                }else {
+                                    item.put("reviewProcessState","待" + departmentName + "(" + userItem.getName() + ")审核");
+                                }
+                                break;
+                            }
+
+                        }
+                    }else {
+                        //项目审核或分组审核
+                        if (String.valueOf(map.get("projectAuditState")).equals("0") || String.valueOf(map.get("groupAuditState")).equals("0")){
+                            String projectAuditorName = map.get("projectAuditorName")+"";
+                            String projectAuditorId = map.get("projectAuditorId")+"";
+                            item.put("reviewProcessState","待项目审核人" + "(" + projectAuditorName + ")审核");
+                        }
+                    }
+                }
+            }
+            dataList.add(item);
+        }
+        responseData.put("userTimeCostArray",dataList);
+        httpRespMsg.setData(responseData);
+        return httpRespMsg;
+    }
 }