Browse Source

企业微信同步人员时,如果工号和openid一样则去掉工号;

seyason 2 years ago
parent
commit
7cde81cced

+ 22 - 20
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/WeiXinCorpController.java

@@ -549,7 +549,7 @@ public class WeiXinCorpController {
                         JSONArray department = userObj.getJSONArray("department");
                         Integer curUserWXDeptid = getMaxDeptIdFromArray(department);
                         Department sysDept = departmentMapper.selectOne(new QueryWrapper<Department>().eq("company_id", companyId).eq("corpwx_deptid", curUserWXDeptid));
-
+                        String userId = userObj.getString("userid");
                         User user = new User()
                                 .setId(id.toString())
                                 .setRoleId(defaultRole.getId())
@@ -559,7 +559,7 @@ public class WeiXinCorpController {
                                 .setPassword(MD5Util.getPassword("000000"))
                                 .setCorpwxUserid(openUserId)
                                 .setCorpwxRealUserid(corpWxUserId)
-                                .setJobNumber(userObj.getString("userid"))
+                                .setJobNumber(openUserId.equals(userId)?null:userId)
                                 .setColor(ColorUtil.randomColor())
                                 .setCompanyId(companyId);
                         if (sysDept != null) {
@@ -590,7 +590,7 @@ public class WeiXinCorpController {
                             JSONArray department = userObj.getJSONArray("department");
                             curUserWXDeptid = getMaxDeptIdFromArray(department);
                             Department sysDept = departmentMapper.selectOne(new QueryWrapper<Department>().eq("company_id", companyId).eq("corpwx_deptid", curUserWXDeptid));
-
+                            String userId = userObj.getString("userid");
                             User user = new User()
                                     .setId(id.toString())
                                     .setRoleId(defaultRole.getId())
@@ -600,7 +600,7 @@ public class WeiXinCorpController {
                                     .setPassword(MD5Util.getPassword("000000"))
                                     .setCorpwxUserid(openUserId)
                                     .setCorpwxRealUserid(corpWxUserId)
-                                    .setJobNumber(userObj.getString("userid"))
+                                    .setJobNumber(openUserId.equals(userId)?null:userId)
                                     .setColor(ColorUtil.randomColor())
                                     .setCorpwxDeptid(curUserWXDeptid)
                                     .setCompanyId(companyId);
@@ -688,14 +688,15 @@ public class WeiXinCorpController {
                                     changeUser.setDepartmentId(sysDept.getDepartmentId());
                                     change = true;
                                 }
-                                if (userObj.containsKey("direct_leader") && userObj.getJSONArray("direct_leader").size() > 0) {
-                                    String directLeader = userObj.getJSONArray("direct_leader").getString(0);
-                                    User leader = userMapper.selectOne(new QueryWrapper<User>().eq("company_id", companyId).eq("corpwx_userid", directLeader));
-                                    if (leader != null && !leader.equals(user.getSuperiorId())) {
-                                        changeUser.setSuperiorId(leader.getId());
-                                        change = true;
-                                    }
-                                }
+                                //暂不处理直属领导
+//                                if (userObj.containsKey("direct_leader") && userObj.getJSONArray("direct_leader").size() > 0) {
+//                                    String directLeader = userObj.getJSONArray("direct_leader").getString(0);
+//                                    User leader = userMapper.selectOne(new QueryWrapper<User>().eq("company_id", companyId).eq("corpwx_userid", directLeader));
+//                                    if (leader != null && !leader.equals(user.getSuperiorId())) {
+//                                        changeUser.setSuperiorId(leader.getId());
+//                                        change = true;
+//                                    }
+//                                }
                                 if (change) {
                                     userMapper.updateById(changeUser);
                                 }
@@ -911,7 +912,7 @@ public class WeiXinCorpController {
                     JSONObject authUserInfo = obj.getJSONObject("auth_user_info");
                     data.setAuthUsername(authUserInfo.getString("name"));
                     String userId = authUserInfo.getString("userid");//授权人的userid
-
+                    String openUserId = authUserInfo.getString("open_userid");
                     //检查公司名称是否存在,按照corpid比对
                     WxCorpInfo findCorp = wxCorpInfoMapper.selectById(corpId);
 
@@ -1035,10 +1036,10 @@ public class WeiXinCorpController {
                                 .setRoleName(managerRole.getRolename())
                                 .setName(name)
                                 .setPassword(MD5Util.getPassword("000000"))
-                                .setCorpwxUserid(userId)
+                                .setCorpwxUserid(openUserId)
                                 .setColor(ColorUtil.randomColor())
                                 .setCompanyId(company.getId())
-                                .setJobNumber(userId);
+                                .setJobNumber(openUserId.equals(userId)?null:userId);
                         userMapper.insert(user);
                         //todo: 生成初始测试项目及任务
                         Project project=new Project();
@@ -1128,6 +1129,7 @@ public class WeiXinCorpController {
                     JSONObject authUserInfo = obj.getJSONObject("auth_user_info");
                     data.setAuthUsername(authUserInfo.getString("name"));
                     String userId = authUserInfo.getString("userid");//授权人的userid
+                    String openUserId = authUserInfo.getString("open_userid");
                     //检查该授权人是否已经存在
                     if (userMapper.selectCount(new QueryWrapper<User>().eq("corpwx_userid", userId)) == 0) {
                         JSONObject userDetail = getUserInfo(curCorpAccessToken, userId);
@@ -1153,7 +1155,7 @@ public class WeiXinCorpController {
                                 .setCorpwxUserid(userId)
                                 .setColor(ColorUtil.randomColor())
                                 .setCompanyId(companyId)
-                                .setJobNumber(userId);//工号就是企业微信的用户ID
+                                .setJobNumber(openUserId.equals(userId)?null:userId);//工号就是企业微信的用户ID
                         userMapper.insert(user);
                     }
                 }
@@ -1673,7 +1675,7 @@ public class WeiXinCorpController {
                     .setCorpwxRealUserid(curUserid)
                     .setColor(ColorUtil.randomColor())
                     .setPassword(MD5Util.getPassword("000000"))
-                    .setJobNumber(curUserid)
+                    .setJobNumber(openUserid.equals(curUserid)?null:curUserid)
                     .setCorpwxDeptid(maxDeptId);
             allCorpWxUserList.add(user);
         }
@@ -1729,7 +1731,7 @@ public class WeiXinCorpController {
                                 .setCorpwxUserid(openUserid)
                                 .setCorpwxRealUserid(curUserid)
                                 .setColor(ColorUtil.randomColor())
-                                .setJobNumber(curUserid)
+                                .setJobNumber(openUserid.equals(curUserid)?null:curUserid)
                                 .setPassword(MD5Util.getPassword("000000"))
                                 .setCorpwxDeptid(curDept.getCorpwxDeptid());
                         allCorpWxUserList.add(user);
@@ -1761,7 +1763,7 @@ public class WeiXinCorpController {
             if (first.isPresent()) {
                 User oldUser = first.get();
                 User changeUser = new User();
-                if (!userItem.getJobNumber().equals(oldUser.getJobNumber())) {
+                if (userItem.getJobNumber() != null && !userItem.getJobNumber().equals(oldUser.getJobNumber())) {
                     changeUser.setId(oldUser.getId());
                     changeUser.setJobNumber(userItem.getJobNumber());
                 }
@@ -2081,7 +2083,7 @@ public class WeiXinCorpController {
             if (first.isPresent()) {
                 User oldUser = first.get();
                 User changeUser = new User();
-                if (!userItem.getJobNumber().equals(oldUser.getJobNumber())) {
+                if (userItem.getJobNumber() != null && !userItem.getJobNumber().equals(oldUser.getJobNumber())) {
                     changeUser.setId(oldUser.getId());
                     changeUser.setJobNumber(userItem.getJobNumber());
                 }

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

@@ -768,7 +768,7 @@ public class DingDingServiceImpl implements DingDingService {
             OapiV2DepartmentGetRequest req = new OapiV2DepartmentGetRequest();
             req.setDeptId(deptId);
             OapiV2DepartmentGetResponse rsp = client.execute(req, accessToken);
-//            System.out.println(rsp.getBody());
+//            System.out.println("获取部门返回="+rsp.getBody());
             JSONObject json = JSONObject.parseObject(rsp.getBody());
             if (json.getInteger("errcode") == 0) {
                 JSONObject dept = json.getJSONObject("result");
@@ -955,8 +955,6 @@ public class DingDingServiceImpl implements DingDingService {
                     .setJobNumber(userJson.getString("job_number"))
                     .setColor(ColorUtil.randomColor());
 
-
-
             if (departmentId != null) {
                 user.setDepartmentCascade(convertDepartmentIdToCascade(departmentId));
             }

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

@@ -793,6 +793,9 @@ public class WxCorpInfoServiceImpl extends ServiceImpl<WxCorpInfoMapper, WxCorpI
 
                     ct.setStartTime(DateTimeUtil.getTimeFromSeconds(sTime));
                     ct.setEndTime(DateTimeUtil.getTimeFromSeconds(eTime));
+                    //有一次有效打卡
+                    boolean hitOnce = (ct.getStartTime().equals(ct.getEndTime()) && !"00:00".equals(ct.getStartTime()));
+                    String originHitTime = ct.getStartTime();
                     //直接设置打卡时长,以企业微信的为准,不考虑漏打卡的情况
                     ct.setCardTime(DateTimeUtil.getHoursFromSeconds(regular_work_sec));
                     ct.setAskLeaveTime(0.0);
@@ -1098,18 +1101,21 @@ public class WxCorpInfoServiceImpl extends ServiceImpl<WxCorpInfoMapper, WxCorpI
 //                        } else {
 //                            ct.setWorkHours(DateTimeUtil.getHoursFromDouble(ct.getCardTime()));
 //                        }
-                        //仅有一次打卡,并且没有请假,外出的情况,需要补足下班的打卡时间
-                        if (ct.getStartTime().equals(ct.getEndTime()) && !"00:00".equals(ct.getStartTime())) {
+                        if (showLog) System.out.println("ct.getStartTime()==" + ct.getStartTime()+", ct.getEndTime()="+ct.getEndTime());
+                        //仅有一次打卡,需要补足下班的打卡时间;重新计算工作时长
+                        if (hitOnce) {
                             if (ct.getEndTime().compareTo(baseAfternoonEnd) < 0) {
+                                if (showLog) System.out.println("打卡一次,自动补足下班时间"+baseAfternoonEnd);
                                 ct.setEndTime(baseAfternoonEnd);
                                 //重新计算时长
                                 double workTime = DateTimeUtil.getHoursFromSeconds(DateTimeUtil.getSecondsFromTime(ct.getEndTime()) - DateTimeUtil.getSecondsFromTime(ct.getStartTime()));
-                                if (ct.getStartTime().compareTo(baseMorningEnd) >= 0) {
+                                if (ct.getStartTime().compareTo(baseMorningEnd) <= 0) {
                                     //重新计算打卡工时时,需要减去中间午休时间
                                     workTime -= restTime;
                                 }
                                 ct.setCardTime(workTime);
-                                ct.setWorkHours(DateTimeUtil.getHoursFromDouble(workTime));
+                                ct.setWorkHours(DateTimeUtil.getHoursFromDouble(workTime) - ct.getAskLeaveTime() + ct.getOutdoorTime());
+                                if (showLog) System.out.println("workTime="+workTime+", 二次校正后workHours="+ct.getWorkHours());
                             }
                         }
                     }