Browse Source

修复无考勤人员,无corpwx_userid的情况下,导入的考勤工作时长无法显示姓名的问题
修复获取时间段的时长时,重叠校验bug

seyason 2 years ago
parent
commit
12df6bc02d

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

@@ -128,7 +128,7 @@ public class ReportController {
             WorktimeItem worktimeItem = worktimeItemList.get(i);
             WorktimeItem worktimeItem = worktimeItemList.get(i);
             for (int j = i + 1; j < worktimeItemList.size(); j++) {
             for (int j = i + 1; j < worktimeItemList.size(); j++) {
                 WorktimeItem worktimeItem1 = worktimeItemList.get(j);
                 WorktimeItem worktimeItem1 = worktimeItemList.get(j);
-                if (!(worktimeItem1.getEndTime().compareTo(worktimeItem.getStartTime()) < 0 || worktimeItem1.getStartTime().compareTo(worktimeItem.getEndTime()) > 0)) {
+                if (!(worktimeItem1.getEndTime().compareTo(worktimeItem.getStartTime()) <= 0 || worktimeItem1.getStartTime().compareTo(worktimeItem.getEndTime()) >= 0)) {
                     msg.setError("时间段有交叉:"+worktimeItem1.getStartTime()+"-"+worktimeItem1.getEndTime()+"和"+worktimeItem.getStartTime()+"-"+worktimeItem.getEndTime());
                     msg.setError("时间段有交叉:"+worktimeItem1.getStartTime()+"-"+worktimeItem1.getEndTime()+"和"+worktimeItem.getStartTime()+"-"+worktimeItem.getEndTime());
                     return msg;
                     return msg;
                 }
                 }
@@ -153,7 +153,7 @@ public class ReportController {
             int excludeTime = 0;
             int excludeTime = 0;
             if (excludeTimeList.size() > 0) {
             if (excludeTimeList.size() > 0) {
                 for (TimeAutoExclude exclude : excludeTimeList) {
                 for (TimeAutoExclude exclude : excludeTimeList) {
-                    if (!(exclude.getEndTime().compareTo(startTime) < 0 || exclude.getStartTime().compareTo(endTime) > 0)) {
+                    if (!(exclude.getEndTime().compareTo(startTime) <= 0 || exclude.getStartTime().compareTo(endTime) >= 0)) {
                         //有交叉的情况,结束时间取较早的,开始时间取较晚的
                         //有交叉的情况,结束时间取较早的,开始时间取较晚的
                         String mEndTime = exclude.getEndTime().compareTo(endTime) <0 ? exclude.getEndTime() : endTime;
                         String mEndTime = exclude.getEndTime().compareTo(endTime) <0 ? exclude.getEndTime() : endTime;
                         String mStartTime = exclude.getStartTime().compareTo(startTime) > 0 ? exclude.getStartTime() : startTime;
                         String mStartTime = exclude.getStartTime().compareTo(startTime) > 0 ? exclude.getStartTime() : startTime;
@@ -1352,7 +1352,7 @@ public class ReportController {
                     int excludeTime = 0;
                     int excludeTime = 0;
                     if (excludeTimeList.size() > 0) {
                     if (excludeTimeList.size() > 0) {
                         for (TimeAutoExclude exclude : excludeTimeList) {
                         for (TimeAutoExclude exclude : excludeTimeList) {
-                            if (!(exclude.getEndTime().compareTo(startTime) < 0 || exclude.getStartTime().compareTo(endTime) > 0)) {
+                            if (!(exclude.getEndTime().compareTo(startTime) <= 0 || exclude.getStartTime().compareTo(endTime) >= 0)) {
                                 //有交叉的情况,结束时间取较早的,开始时间取较晚的
                                 //有交叉的情况,结束时间取较早的,开始时间取较晚的
                                 String mEndTime = exclude.getEndTime().compareTo(endTime) <0 ? exclude.getEndTime() : endTime;
                                 String mEndTime = exclude.getEndTime().compareTo(endTime) <0 ? exclude.getEndTime() : endTime;
                                 String mStartTime = exclude.getStartTime().compareTo(startTime) > 0 ? exclude.getStartTime() : startTime;
                                 String mStartTime = exclude.getStartTime().compareTo(startTime) > 0 ? exclude.getStartTime() : startTime;

+ 15 - 3
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/UserCorpwxTimeController.java

@@ -560,12 +560,24 @@ public class UserCorpwxTimeController {
                 }
                 }
             }
             }
             if (userCorpwxTimeList.size() > 0) {
             if (userCorpwxTimeList.size() > 0) {
+                long l1 = System.currentTimeMillis();
+
                 userCorpwxTimeList.forEach(u->{
                 userCorpwxTimeList.forEach(u->{
-                    userCorpwxTimeMapper.delete(new QueryWrapper<UserCorpwxTime>().eq("corpwx_userid", u.getCorpwxUserid())
-                            .eq("create_date", u.getCreateDate())
-                            .eq("wx_corpid", wxCorpInfo.getCorpid()));
+                    if (u.getCorpwxUserid() == null) {
+                        userCorpwxTimeMapper.delete(new QueryWrapper<UserCorpwxTime>().isNull("corpwx_userid").eq("name", u.getName())
+                                .eq("create_date", u.getCreateDate())
+                                .eq("wx_corpid", wxCorpInfo.getCorpid()));
+                    } else {
+                        userCorpwxTimeMapper.delete(new QueryWrapper<UserCorpwxTime>().eq("corpwx_userid", u.getCorpwxUserid())
+                                .eq("create_date", u.getCreateDate())
+                                .eq("wx_corpid", wxCorpInfo.getCorpid()));
+                    }
                 });
                 });
+                long l2 = System.currentTimeMillis();
+                System.out.println("删除耗时="+(l2-l1));
                 userCorpwxTimeService.saveBatch(userCorpwxTimeList);
                 userCorpwxTimeService.saveBatch(userCorpwxTimeList);
+                long l3 = System.currentTimeMillis();
+                System.out.println("插入耗时="+(l3-l2));
             }
             }
         } catch (IOException e) {
         } catch (IOException e) {
             e.printStackTrace();
             e.printStackTrace();

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

@@ -28,7 +28,7 @@
 
 
     <select id="getUserDataList" resultType="java.util.HashMap" >
     <select id="getUserDataList" resultType="java.util.HashMap" >
         SELECT user.id as userId, DATE_FORMAT(a.create_date, '%Y/%m/%d') as createDate,a.start_time as startTime, a.end_time as endTime, a.work_hours as workHours, user.name as username,user.corpwx_userid as corpwxUserid,a.week_day as weekDay,
         SELECT user.id as userId, DATE_FORMAT(a.create_date, '%Y/%m/%d') as createDate,a.start_time as startTime, a.end_time as endTime, a.work_hours as workHours, user.name as username,user.corpwx_userid as corpwxUserid,a.week_day as weekDay,
-        week_day_txt as weekDayTxt,card_time as cardTime, outdoor_time as outdoorTime, ask_leave_time as askLeaveTime FROM user_corpwx_time a LEFT JOIN user ON user.`corpwx_userid` = a.corpwx_userid
+        week_day_txt as weekDayTxt,card_time as cardTime, outdoor_time as outdoorTime, ask_leave_time as askLeaveTime FROM user_corpwx_time a LEFT JOIN user ON (user.`corpwx_userid` = a.corpwx_userid or (user.corpwx_userid is null and user.name = a.name))
         WHERE a.create_date BETWEEN #{startDate} AND #{endDate}
         WHERE a.create_date BETWEEN #{startDate} AND #{endDate}
         AND a.company_id = #{companyId}
         AND a.company_id = #{companyId}
         <if test="deptId != null">
         <if test="deptId != null">
@@ -40,9 +40,9 @@
     <select id="getUserDataRatioList" resultType="java.util.HashMap" >
     <select id="getUserDataRatioList" resultType="java.util.HashMap" >
         SELECT user.id AS userId, user.`name` as username, user.`corpwx_userid` as corpwxUserid, IFNULL(card_time.workHours, 0) as workHours, IFNULL(report_time.projectTime, 0)  AS projectTime FROM
         SELECT user.id AS userId, user.`name` as username, user.`corpwx_userid` as corpwxUserid, IFNULL(card_time.workHours, 0) as workHours, IFNULL(report_time.projectTime, 0)  AS projectTime FROM
         user LEFT JOIN
         user LEFT JOIN
-        (SELECT a.corpwx_userid, SUM(a.work_hours) AS workHours FROM user_corpwx_time a WHERE a.company_id = #{companyId} AND  DATE_FORMAT(a.create_date, '%Y%m') = #{ymonth} GROUP BY a.`corpwx_userid` ) card_time
-        ON user.`corpwx_userid` = card_time.corpwx_userid
-        LEFT JOIN (SELECT r.creator_id, SUM(r.working_time) AS projectTime FROM report r WHERE r.state = 1 and r.company_id = #{companyId} AND  DATE_FORMAT(r.create_date, '%Y%m') = #{ymonth} GROUP BY r.`creator_id` ) report_time
+        (SELECT a.corpwx_userid,a.name, SUM(a.work_hours) AS workHours FROM user_corpwx_time a WHERE a.company_id = #{companyId} AND  DATE_FORMAT(a.create_date, '%Y%m') = #{ymonth} GROUP BY a.`corpwx_userid`,a.name ) card_time
+        ON (user.`corpwx_userid` = card_time.corpwx_userid or (user.corpwx_userid is null and user.name = card_time.name))
+        LEFT JOIN (SELECT r.creator_id, SUM(r.working_time) AS projectTime FROM report r WHERE r.company_id = #{companyId} AND  DATE_FORMAT(r.create_date, '%Y%m') = #{ymonth} GROUP BY r.`creator_id` ) report_time
         ON report_time.creator_id = user.id
         ON report_time.creator_id = user.id
         WHERE user.company_id=#{companyId}
         WHERE user.company_id=#{companyId}
         and  (user.`is_active` = 1 OR (user.`is_active` = 0 AND DATE_FORMAT(user.`inactive_date`, '%Y%m') > #{ymonth}))
         and  (user.`is_active` = 1 OR (user.`is_active` = 0 AND DATE_FORMAT(user.`inactive_date`, '%Y%m') > #{ymonth}))