Browse Source

优化日报事务,getReportList接口性能

seyason 11 months ago
parent
commit
931dc0d8a1

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

@@ -95,10 +95,10 @@ public interface ReportMapper extends BaseMapper<Report> {
                                                          @Param("userId") String userId,
                                                          @Param("companyId") Integer companyId, String viewUserId, Integer pageStart, Integer pageSize);
 
-    Integer getReportNameByDateAndDeptCount(@Param("date") String date,
-                                                         @Param("deptIds") List<Integer> deptIds,
-                                                         @Param("userId") String userId,
-                                                         @Param("companyId") Integer companyId, String viewUserId);
+//    Integer getReportNameByDateAndDeptCount(@Param("date") String date,
+//                                                         @Param("deptIds") List<Integer> deptIds,
+//                                                         @Param("userId") String userId,
+//                                                         @Param("companyId") Integer companyId, String viewUserId);
     List<Map<String, Object>> getDetailByStateInMyProfession(@Param("state") Integer state,
                                                @Param("companyId") Integer companyId,
                                                @Param("leaderId") String leaderId);

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

@@ -71,7 +71,6 @@ import java.util.stream.Collectors;
  * @since 2019-12-31
  */
 @Service
-@Transactional
 public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> implements ReportService {
 //    @Resource
 //    AsyncTaskExecutor asyncTaskExecutor;//注入线程池对象
@@ -249,7 +248,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
             TimeType timeType = timeTypeMapper.selectById(companyId);
             List<Map<String, Object>> nameList = new ArrayList<>();
             List<SysRichFunction> functionList = sysFunctionMapper.getRoleFunctions(user.getRoleId(), "查看全公司工时");
-            Integer totalMembCount = 0;
+//            Integer totalMembCount = 0;
             if (functionList.size() == 0) {
                 List<Map<String, Object>> list = new ArrayList<>();
                 List<Integer> allVisibleDeptIdList = null;
@@ -271,10 +270,15 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                 } else {
                     allVisibleDeptIdList = getAllVisibleDeptIdList(user, null);
                 }
+                long start = System.currentTimeMillis();
                 //需要看可见部门(部门主要负责人和其他负责人以及查看本部门工时权限)所有人员的日报
                 nameList = reportMapper.getReportNameByDateAndDept(date,
                         allVisibleDeptIdList.size() > 0?allVisibleDeptIdList:null, targetUid, companyId, (deptId == null?viewUserId:null), pageStart, pageSize);
-                totalMembCount = reportMapper.getReportNameByDateAndDeptCount(date, allVisibleDeptIdList.size() > 0?allVisibleDeptIdList:null, targetUid, companyId, (deptId == null?viewUserId:null));
+                long middle = System.currentTimeMillis();
+                System.out.println("中间获取getReportNameByDateAndDept 耗时:" + (middle - start) + "ms");
+//                totalMembCount = reportMapper.getReportNameByDateAndDeptCount(date, allVisibleDeptIdList.size() > 0?allVisibleDeptIdList:null, targetUid, companyId, (deptId == null?viewUserId:null));
+                long end = System.currentTimeMillis();
+                System.out.println("获取totalMembCount 耗时:" + (end - middle) + "ms");
             } else {
                 //查看全公司的数据
                 List<Integer> ids = null;
@@ -296,9 +300,14 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                         }
                     }
                 }
+                long start = System.currentTimeMillis();
                 nameList = reportMapper.getReportNameByDateAndDept(date,
                         ids, targetUid, companyId, null, pageStart, pageSize);
-                totalMembCount = reportMapper.getReportNameByDateAndDeptCount(date, ids, targetUid, companyId, null);
+                long middle = System.currentTimeMillis();
+                System.out.println("中间获取getReportNameByDateAndDept 耗时:" + (middle - start) + "ms");
+//                totalMembCount = reportMapper.getReportNameByDateAndDeptCount(date, ids, targetUid, companyId, null);
+//                long end = System.currentTimeMillis();
+//                System.out.println("获取totalMembCount 耗时:" + (end - middle) + "ms");
             }
             if (nameList.size() > 0) {
                 List<String> userIds = new ArrayList<>();
@@ -492,7 +501,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                 HashMap retMap = new HashMap();
                 retMap.put("data", nameList);
                 retMap.put("pageIndex", pageIndex);
-                retMap.put("hasMore", pageIndex * pageSize + pageSize < totalMembCount);
+                retMap.put("hasMore", nameList.size() > 0);
                 httpRespMsg.data = retMap;
             }
         } catch (NullPointerException e) {
@@ -1046,6 +1055,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
 
     //新增或编辑报告
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public HttpRespMsg editReport(List<Report> reportList, String date, List<User> userList, BigDecimal hourCost, Integer companyId, String summary) {
         HttpRespMsg httpRespMsg = new HttpRespMsg();
         TimeType timeType = timeTypeMapper.selectById(companyId);
@@ -1467,6 +1477,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
 
     //删除报告
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public HttpRespMsg deleteReport(String userId, String date) {
         HttpRespMsg httpRespMsg = new HttpRespMsg();
         String delUserId = request.getHeader("TOKEN");
@@ -1756,6 +1767,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
 
     //审核通过某天某人的某报告
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public HttpRespMsg approveReport(String reportIds, Integer isDepartment, HttpServletRequest request,String evaluate) {
         HttpRespMsg httpRespMsg = new HttpRespMsg();
         String token = request.getHeader("Token");
@@ -2672,6 +2684,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
 
     //审核未通过 以及 撤销审核某天某人
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public HttpRespMsg denyReport(String date, String reportIds, String reason, Integer isDepartment, HttpServletRequest request) {
         HttpRespMsg httpRespMsg = new HttpRespMsg();
         User user = userMapper.selectById(request.getHeader("Token"));
@@ -2984,22 +2997,25 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
         if (list.size() > 0) {
             //存在查看权限的部门
             //获取公司全部人员; 按照人员状态,如果是已经离职的,当前日期在离职日期以后的,不需要显示该人员
+
             QueryWrapper<User> queryWrapper = new QueryWrapper<User>().eq("company_id", companyId);
             queryWrapper.and(wrapper->wrapper.eq("is_active", 1).eq("report_status",0)
                     .or(wrapper2->wrapper2.eq("is_active", 0).gt("inactive_date", date)));
             List<User> userList = userMapper.selectList(queryWrapper);
+            long t3 = System.currentTimeMillis();
+            System.out.println("获取人员列表耗时:" + (t3 - t2) + "ms");
             List<LeaveSheet> leaveSheetList = leaveSheetMapper.selectList(
                     new QueryWrapper<LeaveSheet>().select("id, owner_id, start_date, end_date, leave_type, time_type, time_days, time_hours").eq("company_id", companyId));
-            long t3 = System.currentTimeMillis();
-            System.out.println("获取人员请假列表耗时:" + (t3 - t2) + "ms");
+            long t4 = System.currentTimeMillis();
+            System.out.println("获取人员请假列表耗时:" + (t4 - t3) + "ms");
             LocalDate localDate = LocalDate.parse(date, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
             List<HashMap> userMapList = new ArrayList<>();
             LocalDate curDate = LocalDate.parse(date, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
 
             //获取当日已填写的人员报告
             List<Map<String, Object>> reportNameByDate = reportMapper.getReportNameByDate(date, companyId, null);
-            long t4 = System.currentTimeMillis();
-            System.out.println("获取当日已填写的人员报告耗时:" + (t4 - t3) + "ms");
+            long t5 = System.currentTimeMillis();
+            System.out.println("获取当日已填写的人员报告耗时:" + (t5 - t4) + "ms");
             Company company = companyMapper.selectById(companyId);
             TimeType timeType = timeTypeMapper.selectById(companyId);
             //如果没有开通OA模块,有开通企业微信同步考勤,从user_corpwx_time表中获取请假时长
@@ -3082,6 +3098,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public HttpRespMsg batchApproveReport(String reportIds, Integer isDepartment, HttpServletRequest request,String evaluate) throws Exception {
         String token = request.getHeader("Token");
         User user = userMapper.selectById(token);
@@ -3871,6 +3888,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
 
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public HttpRespMsg batchDenyReport(String reportIds, Integer isDepartment, String reason, HttpServletRequest request) {
         User user = userMapper.selectById(request.getHeader("Token"));
         Company company = companyMapper.selectById(user.getCompanyId());
@@ -4013,6 +4031,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public HttpRespMsg cancelReport(String userId, String reportIds, HttpServletRequest request) {
         HttpRespMsg msg = new HttpRespMsg();
         User user = userMapper.selectById(userId);
@@ -6023,6 +6042,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public HttpRespMsg saveProjectTime(Integer companyId, List<Report> reportList, JSONArray userReportArray) {
         //如果当天该员工已有报告,要删除
         HttpRespMsg httpRespMsg = new HttpRespMsg();
@@ -6485,6 +6505,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public HttpRespMsg approveAllImport(HttpServletRequest request) {
         String token = request.getHeader("TOKEN");
         User user = userMapper.selectById(token);
@@ -6501,6 +6522,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public HttpRespMsg denyHisReport(Integer hisId, String reason, HttpServletRequest request) {
         HttpRespMsg httpRespMsg = new HttpRespMsg();
         try {
@@ -6675,6 +6697,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public HttpRespMsg fixIssue(Integer companyId, String startDate, String endDate) {
         HttpRespMsg msg = new HttpRespMsg();
         List<Map<String, Object>> reportList = reportMapper.selectErrorGroupData(companyId, startDate, endDate);
@@ -6928,6 +6951,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public HttpRespMsg uploadThirdReportData(String yearMonth,HttpServletRequest request) {
         HttpRespMsg httpRespMsg=new HttpRespMsg();
         Integer companyId = userMapper.selectById(request.getHeader("token")).getCompanyId();
@@ -7070,6 +7094,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public HttpRespMsg correctWorkingTime(String userIds, String startDate, String endDate) {
         HttpRespMsg msg=new HttpRespMsg();
         QueryWrapper<Report> queryWrapper=new QueryWrapper<>();
@@ -7208,7 +7233,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
         reportMapper.update(upR, new QueryWrapper<Report>().in("id", targetRids));
     }
 
-
+    @Transactional(rollbackFor = Exception.class)
     public HttpRespMsg approveDeptAuditReport(User user, String auditDeptId) {
         HttpRespMsg msg = new HttpRespMsg();
         Integer companyId = user.getCompanyId();
@@ -7261,6 +7286,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
      * @return
      */
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public void moveReport(User sourceUser,User targetUser) {
         //转移日报
         List<Report> reportList = reportMapper.selectList(new QueryWrapper<Report>().eq("creator_id", sourceUser.getId()));
@@ -7332,6 +7358,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public HttpRespMsg fillWorkingHours(String yearMonth, MonthWorkingTimeVO monthVO, HttpServletRequest request) {
         HttpRespMsg msg = new HttpRespMsg();
 
@@ -7859,6 +7886,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public HttpRespMsg batchDelete(String userIds, Integer deptId, String startDate, String endDate, HttpServletRequest request) {
         //限制只针对赛元微电子
         HttpRespMsg msg = new HttpRespMsg();
@@ -7896,6 +7924,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public HttpRespMsg batchApproveByDate(String startDate, String endDate, Integer departmentId, HttpServletRequest request) {
         HttpRespMsg msg = new HttpRespMsg();
         //限制只针对赛元微电子
@@ -8170,6 +8199,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public HttpRespMsg pushProjectReportToSap(String pushDate,Integer reportId) {
         HttpRespMsg httpRespMsg =new HttpRespMsg();
         LocalDateTime localDateTime=LocalDateTime.now();
@@ -9124,6 +9154,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public HttpRespMsg changeReminder(HttpServletRequest request,String createDate,String userId,String startDate,String endDate) throws Exception {
         HttpRespMsg msg=new HttpRespMsg();
         DateTimeFormatter df=DateTimeFormatter.ofPattern("yyyy-MM-dd");
@@ -9342,6 +9373,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public HttpRespMsg cancelReminder(HttpServletRequest request, String createDate, String userId) {
         HttpRespMsg msg=new HttpRespMsg();
         Integer companyId = userMapper.selectById(request.getHeader("token")).getCompanyId();

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

@@ -652,7 +652,7 @@
             AND a.create_date=#{date}
         </if>
         <if test="companyId != null and companyId != ''">
-            AND b.company_id=#{companyId}
+            AND a.company_id=#{companyId}
         </if>
         <if test="leaderId != null and leaderId != ''">
             AND (a.project_auditor_id = #{leaderId} or project.incharger_id = #{leaderId})
@@ -670,7 +670,7 @@
             AND a.create_date=#{date}
         </if>
         <if test="companyId != null and companyId != ''">
-            AND b.company_id=#{companyId}
+            AND a.company_id=#{companyId}
         </if>
         <if test="leaderId != null and leaderId != ''">
             AND project_ccuser.`user_id` = #{leaderId}
@@ -722,45 +722,45 @@
         </if>
     </select>
 
-    <select id="getReportNameByDateAndDeptCount" resultType="java.lang.Integer">
-        SELECT count(DISTINCT b.id) as count
-        FROM report AS a
-        JOIN user AS b ON a.creator_id=b.id
-        left join project on project.id = a.project_id
-        LEFT JOIN project_ccuser ON a.project_id = project_ccuser.project_id
-        WHERE 1=1
-        <if test="date != null and date != ''">
-            AND a.create_date=#{date}
-        </if>
-        <choose>
-            <when test="userId != null">
-                AND b.id=#{userId}
-            </when>
-            <otherwise>
-                <!--自己,担任项目经理,日报审核人,抄送人,或者自己部门的人填的日报 -->
-                <if test="viewUserId != null">
-                    and (a.creator_id = #{viewUserId} or a.project_auditor_id = #{viewUserId} or project.incharger_id = #{viewUserId}
-                    or project_ccuser.`user_id` = #{viewUserId}
-                    <if test="deptIds != null">
-                        or b.department_id in
-                        <foreach item="item" collection="deptIds" separator="," open="(" close=")" index="">
-                            #{item, jdbcType=INTEGER}
-                        </foreach>
-                    </if>
-                    )
-                </if>
-                <if test="viewUserId == null">
-                    <if test="deptIds != null">
-                        and b.department_id in
-                        <foreach item="item" collection="deptIds" separator="," open="(" close=")" index="">
-                            #{item, jdbcType=INTEGER}
-                        </foreach>
-                    </if>
-                </if>
-            </otherwise>
-        </choose>
-        AND b.company_id = #{companyId}
-    </select>
+<!--    <select id="getReportNameByDateAndDeptCount" resultType="java.lang.Integer">-->
+<!--        SELECT count(DISTINCT b.id) as count-->
+<!--        FROM report AS a-->
+<!--        JOIN user AS b ON a.creator_id=b.id-->
+<!--        left join project on project.id = a.project_id-->
+<!--        LEFT JOIN project_ccuser ON a.project_id = project_ccuser.project_id-->
+<!--        WHERE 1=1-->
+<!--        <if test="date != null and date != ''">-->
+<!--            AND a.create_date=#{date}-->
+<!--        </if>-->
+<!--        <choose>-->
+<!--            <when test="userId != null">-->
+<!--                AND b.id=#{userId}-->
+<!--            </when>-->
+<!--            <otherwise>-->
+<!--                &lt;!&ndash;自己,担任项目经理,日报审核人,抄送人,或者自己部门的人填的日报 &ndash;&gt;-->
+<!--                <if test="viewUserId != null">-->
+<!--                    and (a.creator_id = #{viewUserId} or a.project_auditor_id = #{viewUserId} or project.incharger_id = #{viewUserId}-->
+<!--                    or project_ccuser.`user_id` = #{viewUserId}-->
+<!--                    <if test="deptIds != null">-->
+<!--                        or b.department_id in-->
+<!--                        <foreach item="item" collection="deptIds" separator="," open="(" close=")" index="">-->
+<!--                            #{item, jdbcType=INTEGER}-->
+<!--                        </foreach>-->
+<!--                    </if>-->
+<!--                    )-->
+<!--                </if>-->
+<!--                <if test="viewUserId == null">-->
+<!--                    <if test="deptIds != null">-->
+<!--                        and b.department_id in-->
+<!--                        <foreach item="item" collection="deptIds" separator="," open="(" close=")" index="">-->
+<!--                            #{item, jdbcType=INTEGER}-->
+<!--                        </foreach>-->
+<!--                    </if>-->
+<!--                </if>-->
+<!--            </otherwise>-->
+<!--        </choose>-->
+<!--        AND b.company_id = #{companyId}-->
+<!--    </select>-->
 
     <!--专业待审核的报告列表-->
     <select id="getDetailByStateInMyProfession" resultType="java.util.Map">
@@ -785,7 +785,7 @@
         SELECT DISTINCT b.id, b.name, cast(b.department_id as SIGNED) as departmentId,a.create_date AS date
         FROM report AS a
         JOIN user AS b ON a.creator_id=b.id
-        WHERE a.department_audit_state = 0 and a.state = 0 AND b.company_id=#{companyId}
+        WHERE a.department_audit_state = 0 and a.state = 0 AND a.company_id=#{companyId}
         AND a.creator_id in (select id from user where department_id in
         <foreach collection="departmentIds" item="deptId" open="(" close=")" index="index" separator=",">
             #{deptId}

+ 9 - 1
fhKeeper/formulahousekeeper/timesheet/src/views/workReport/daily.vue

@@ -5689,7 +5689,15 @@
                     this.listLoading = false;
                     if (res.code == "ok") {
                         //扩增
-                        this.reportList = this.reportList.concat(res.data.data);
+                        if (res.data.data.length > 0) {
+                            this.reportList = this.reportList.concat(res.data.data);
+                        } else if (this.pageIndex > 1){
+                            this.$message({
+                            message: '没有更多数据了',
+                            type: "info"
+                        });
+                        }
+                        
                         this.hasMore = res.data.hasMore;//标记是否还有更多数据
                         if(document.querySelector("#day"+this.choseDay)){
                             document.querySelector("#day"+this.choseDay).scrollIntoView(true);