seyason hace 3 años
padre
commit
629087bd07

+ 1 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/aop/AopLogConfiguration.java

@@ -41,7 +41,7 @@ public class AopLogConfiguration {
 
         String methodName = joinPoint.getSignature().getName();
         if (!"loginAdmin".equals(methodName)) {
-            log.info("请求方法:"+methodName+", 参数: "+Arrays.toString(joinPoint.getArgs()));
+            log.info("请求方法:"+request.getRequestURL().toString()+", 参数: "+Arrays.toString(joinPoint.getArgs()));
         }
     }
 

+ 2 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/AuthRedirectController.java

@@ -65,6 +65,7 @@ public class AuthRedirectController {
         } else {
             state = 1;
         }
+        System.out.println("code="+code);
         String url = WeiXinCorpController.GET_CORP_USERINFO_URL.replace("SUITE_ACCESS_TOKEN", getSuiteAccessToken()).replace("CODE", code);
         String forObject = this.restTemplate.getForObject(url, String.class);
         JSONObject obj = JSONObject.parseObject(forObject);
@@ -140,6 +141,7 @@ public class AuthRedirectController {
                     HttpMethod.POST, requestEntity, String.class);
             if (responseEntity.getStatusCode() == HttpStatus.OK) {
                 String resp = responseEntity.getBody();
+                System.out.println("获取企业微信suitAccessToken返回"+resp);
                 JSONObject obj = JSONObject.parseObject(resp);
                 if (obj.getIntValue("errcode") == 0) {
                     WeiXinCorpController.SUITE_ACCESS_TOKEN = obj.getString("suite_access_token");

+ 7 - 3
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ReportController.java

@@ -434,7 +434,6 @@ public class ReportController {
                                 fillReportHours(report, hourCost, workingTime==null?null:workingTime[i], timeType==null?null:timeType[i], null, null, sdf);
                             }
 
-
                             //项目专业的进展
                             fillReportProgress(report, professionProgress[i]);
                             reportList.add(report);
@@ -633,9 +632,9 @@ public class ReportController {
         }
         //校验工作时长
         for (Report report : reportList) {
-            if (report.getWorkingTime() <= 0.0) {
+            if (report.getWorkingTime() == null || report.getWorkingTime() <= 0.0) {
                 HttpRespMsg httpRespMsg = new HttpRespMsg();
-                httpRespMsg.setError("工作时长必须大于零");
+                httpRespMsg.setError("请填写工作时长");
                 return httpRespMsg;
             }
         }
@@ -806,6 +805,11 @@ public class ReportController {
         return reportService.getUserDailyWorkTime(request, month);
     }
 
+    @RequestMapping("/getNoReportUserList")
+    public HttpRespMsg getNoReportUserList(HttpServletRequest request, String startDate, String endDate) {
+        return reportService.getNoReportUserList(request, startDate, endDate);
+    }
+
     @RequestMapping("/exportUserDailyWorkTime")
     public HttpRespMsg exportUserDailyWorkTime(HttpServletRequest request, String month) {
         return reportService.exportUserDailyWorkTime(request, month);

+ 8 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/vo/UserDailyWorkItem.java

@@ -0,0 +1,8 @@
+package com.management.platform.entity.vo;
+
+public class UserDailyWorkItem {
+    String userId;
+    String createDate;
+    String department;
+    String name;
+}

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

@@ -75,4 +75,6 @@ public interface ReportService extends IService<Report> {
                                       Integer deprarmtentId, HttpServletRequest request);
 
     HttpRespMsg getlastWeekFillTime(String userId);
+
+    HttpRespMsg getNoReportUserList(HttpServletRequest request, String startDate, String endDate);
 }

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

@@ -152,7 +152,6 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                 } else if (searchField == 2){
                     queryWrapper.like("project_code", keyword);
                 }
-
             }
             if (status != null && status != 0) {
                 queryWrapper.eq("status", status);
@@ -163,7 +162,6 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
             List<User> userList = userMapper.selectList(new QueryWrapper<User>().eq("company_id", companyId));
             List<ProjectVO> list = new ArrayList<>();
             for (Project project : projectList) {
-                System.out.println(project.getTaskGpIncharge());
                 ProjectVO projectVO = new ProjectVO();
                 BeanUtils.copyProperties(project, projectVO);
                 projectVO.setParticipator(participationMapper.getParticipator(projectVO.getId()));
@@ -173,9 +171,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                     projectVO.setInchargerName(incharger.getName());
                     projectVO.setInchargerPhone(incharger.getPhone());
                 }
-
                 list.add(projectVO);
-                System.out.println(projectVO.getTaskGpIncharge());
             }
             Long total = projectIPage.getTotal();
             Map<String, Object> map = new HashMap<>();

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

@@ -2,11 +2,13 @@ package com.management.platform.service.impl;
 
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.management.platform.controller.WeiXinCorpController;
 import com.management.platform.entity.*;
 import com.management.platform.entity.vo.DepartmentVO;
+import com.management.platform.entity.vo.UserDailyWorkItem;
 import com.management.platform.entity.vo.UserMonthWork;
 import com.management.platform.entity.vo.WorktimeItem;
 import com.management.platform.mapper.*;
@@ -19,6 +21,7 @@ import me.chanjar.weixin.mp.api.WxMpService;
 import me.chanjar.weixin.mp.api.impl.WxMpServiceImpl;
 import me.chanjar.weixin.mp.bean.template.WxMpTemplateData;
 import me.chanjar.weixin.mp.bean.template.WxMpTemplateMessage;
+import org.apache.commons.io.FileUtils;
 import org.apache.poi.hssf.usermodel.*;
 import org.apache.poi.ss.usermodel.*;
 import org.apache.poi.xssf.usermodel.XSSFCell;
@@ -100,6 +103,8 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
     @Resource
     private ReportMapper reportMapper;
     @Resource
+    private ParticipationMapper participationMapper;
+    @Resource
     private UserMapper userMapper;
     @Resource
     private TimeCalculationMapper timeCalculationMapper;
@@ -1908,6 +1913,10 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
             Sheet sheet = workbook.getSheetAt(0);
             //由于第一行需要指明列对应的标题
             int rowNum = sheet.getLastRowNum();
+            if (rowNum == 0) {
+                msg.setError("请填写工时数据");
+                return msg;
+            }
             List<String> projectList = new ArrayList<>();
             List<String> subProjectList = new ArrayList<>();
             List<Project> allProjectList = projectMapper.selectList(new QueryWrapper<Project>().eq("company_id", companyId));
@@ -1991,14 +2000,17 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                     List<SimpleProjectime> timeCostList = new ArrayList<SimpleProjectime>();
                     double totalTime = 0;
                     for (int i=projectNameStartIndex; i < projectNameStartIndex + projectList.size(); i++) {
-                        String stringCellValue = row.getCell(i)==null?"0":row.getCell(i).getStringCellValue();
+                        if (row.getCell(i) == null) {
+                            continue;
+                        }
+                        String stringCellValue = row.getCell(i).getStringCellValue();
                         double time = 0;
-                        String pName = projectList.get(i-projectNameStartIndex);
-                        Project project = allProjectList.stream().filter(p -> p.getProjectName().equals(pName)).findFirst().get();
-                        String subPName = subProjectList.get(i-projectNameStartIndex);
                         if (!StringUtils.isEmpty(stringCellValue)) {
                             time = Double.parseDouble(stringCellValue);
                             if (time > 0) {
+                                String pName = projectList.get(i-projectNameStartIndex);
+                                Project project = allProjectList.stream().filter(p -> p.getProjectName().equals(pName)).findFirst().get();
+                                String subPName = subProjectList.get(i-projectNameStartIndex);
                                 totalTime += time;
                                 Report report = new Report();
                                 report.setCompanyId(companyId);
@@ -2030,24 +2042,55 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                                 return msg;
                             }
                         }
-                        //检查个人总工时不能为0
-//                        if (totalTime == 0) {
-//                            msg.setError(username + "的工时为0,请检查修改");
-//                            return msg;
-//                        }
                     }
                 }
             }
+            if (reportList.size() == 0) {
+                msg.setError("缺少工时数据");
+                return msg;
+            }
+            
             //先删除老数据, 修改为批处理
+            long t1 = System.currentTimeMillis();
+
+            DateTimeFormatter standFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+            HashMap<String, Object> dataMap = new HashMap<>();
             for (Report r : reportList) {
-                reportMapper.delete(new QueryWrapper<Report>()
-                        .eq("company_id", companyId)
-                        .eq("creator_id", r.getCreatorId())
-                        .eq("create_date", r.getCreateDate()));
+                //组合一下人员
+                String date = standFormat.format(r.getCreateDate());
+                if (dataMap.containsKey(date)) {
+                    List<String> userList = (List)dataMap.get(date);
+                    userList.add(r.getCreatorId());
+                } else {
+                    List<String> newList = new ArrayList<>();
+                    newList.add(r.getCreatorId());
+                    dataMap.put(date, newList);
+                }
+            }
+            LambdaQueryWrapper<Report> queryWrapper = new QueryWrapper<Report>().lambda();
+            Iterator<String> it = dataMap.keySet().iterator();
+            
+            while (it.hasNext()) {
+                String key = it.next();
+                List<String> userList = (List)dataMap.get(key);
+                queryWrapper.or(wrapper->wrapper.eq(Report::getCompanyId, companyId).eq(Report::getCreateDate, key).in(Report::getCreatorId, userList));
+            }
+            System.out.println(queryWrapper.getSqlSegment()+", "+queryWrapper.getSqlSelect()+", " + queryWrapper.getCustomSqlSegment());
+            if (queryWrapper.getSqlSegment() != null) {
+                reportMapper.delete(queryWrapper);
+                long t2 = System.currentTimeMillis();
+                System.out.println("删除耗时:" + (t2-t1));
+                //存储
+                reportService.saveBatch(reportList);
+                long t3 = System.currentTimeMillis();
+                System.out.println("插入耗时:"+ (t3-t2));
+                msg.data = dataCount;
+            } else {
+                msg.setError("工时数据不能为空");
             }
-            //存储
-            reportService.saveBatch(reportList);
-            msg.data = dataCount;
+
+//            msg.setError("接口维护中...");
+
         } catch (IOException e) {
             e.printStackTrace();
             msg.setError("文件处理出错");
@@ -2069,6 +2112,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
             } catch (IOException e) {
                 e.printStackTrace();
             }
+//            FileUtils.copyFileToDirectory(file, new File(path));
 //            file.deleteOnExit();//程序退出时删除临时文件
             System.out.println(file.delete());
         }
@@ -2443,4 +2487,55 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
         return msg;
     }
 
+    @Override
+    public HttpRespMsg getNoReportUserList(HttpServletRequest request, String startDate, String endDate) {
+        HttpRespMsg msg = new HttpRespMsg();
+        User user = userMapper.selectById(request.getHeader("TOKEN"));
+        List<User> allRangeUserList = new ArrayList<>();
+        Integer companyId = user.getCompanyId();
+        List<Map<String, Object>> list = null;
+        //分角色权限:管理员看全部的,部门负责人看自己部门的,个人只能看自己的。
+        if (user.getRole() == 0) {
+            //检查是不是部门负责人
+            if (user.getManageDeptId() != null && user.getManageDeptId() != 0) {
+                List<Department> allDepts = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id", companyId));
+                List<Department> myDeptList = allDepts.stream().filter(d->user.getId().equals(d.getManagerId())).collect(Collectors.toList());
+                List<Department> subDepts = new ArrayList<>();
+                for (Department dp : myDeptList) {
+                    subDepts.addAll(getSubDepts(dp, allDepts));
+                    subDepts.add(dp);
+                }
+                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));
+            } else {
+                //看自己的所负责的项目相关人员的
+                list = reportMapper.getUserDailyWorkTime(companyId, startDate, endDate, null, user.getId());
+                //项目相关的人员列表
+                List<Project> projectList = projectMapper.selectList(new QueryWrapper<Project>().eq("incharger_id", user.getId()));
+                List<Project> collect = projectList.stream().collect(Collectors.toList());
+                if (collect.size() > 0) {
+                    List<Participation> participationList = participationMapper.selectList(new QueryWrapper<Participation>().in("project_id", collect));
+                    List<String> collect1 = participationList.stream().map(Participation::getUserId).collect(Collectors.toList());
+                    allRangeUserList = userMapper.selectList(new QueryWrapper<User>().in("id", collect1));
+                }
+            }
+        } else {
+            list = reportMapper.getUserDailyWorkTime(companyId, startDate, endDate, null, null);
+            //管理员看全公司所有人
+            allRangeUserList = userMapper.selectList(new QueryWrapper<User>().eq("company_id", companyId));
+        }
+        List<UserDailyWorkItem> userMonthWorks = new ArrayList<UserDailyWorkItem>();
+
+        String lastUserId = null;
+        UserMonthWork lastUserData = null;
+        //按人员过滤
+        for (User curUser: allRangeUserList) {
+
+        }
+
+        return msg;
+    }
+
 }

+ 1 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/resources/application-prod.yml

@@ -15,7 +15,7 @@ spring:
     driver-class-name: com.mysql.cj.jdbc.Driver
     url: jdbc:mysql://47.100.37.243:7644/man_hour_manager?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&rewriteBatchedStatements=true
     username: root
-    password: Ziyu20141026!@
+    password: Ziyu20141026!@@
     hikari:
       maximum-pool-size: 10
       minimum-idle: 3

+ 1 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/resources/application.yml

@@ -16,7 +16,7 @@ spring:
     driver-class-name: com.mysql.cj.jdbc.Driver
     url: jdbc:mysql://47.100.37.243:7644/man_dev?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&rewriteBatchedStatements=true
     username: root
-    password: Ziyu20141026!@
+    password: Ziyu20141026!@@
     hikari:
       maximum-pool-size: 10
       minimum-idle: 3

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

@@ -449,11 +449,11 @@
         FROM user
         left join report on user.id = report.creator_id
         left join department on department.department_id = user.department_id
-        WHERE report.state = 1
+        WHERE (report.state = 0 or report.state = 1)
         and user.company_id = #{companyId}
         <if test="deptIds != null">
             AND user.department_id in <foreach collection="deptIds" separator="," index="index" item="item" close=")" open="(">
-            item
+            #{item}
         </foreach>
         </if>
         <if test="startDate != null">

+ 5 - 2
fhKeeper/formulahousekeeper/timesheet_h5/src/views/edit/index.vue

@@ -108,7 +108,9 @@
 
                     <!-- 时间段选择模式 -->
                     <van-field readonly v-if="reportTimeType.type == 2" clickable name="datetimePicker" :value="item.startTime" label="开始时间" placeholder="点击选择时间" 
-                        @click="canEdit?showStartTime = true:''" :disabled="!canEdit"  />
+                        @click="canEdit?showStartTime = true:''" :disabled="!canEdit"
+                        :rules="[{ required: true, message: '请选择开始时间' }]"
+                          />
                     <van-popup v-model="showStartTime" position="bottom">
                         <van-datetime-picker
                         v-model="startTime"
@@ -121,7 +123,8 @@
                         <!-- :filter="filter" 原本这个属性在里面 -->
                     </van-popup>
                     <van-field v-if="reportTimeType.type == 2" readonly clickable name="datetimePicker" :value="item.endTime" label="结束时间" placeholder="点击选择时间" 
-                        @click="canEdit?showEndTime = true:''" :disabled="!canEdit" />
+                        @click="canEdit?showEndTime = true:''" :disabled="!canEdit" 
+                        :rules="[{ required: true, message: '请选择结束时间' }]" />
                     <van-popup v-model="showEndTime" position="bottom" >
                         <van-datetime-picker
                         v-model="endTime"