金筑工实名制同步数据

This commit is contained in:
guo 2023-09-28 17:14:39 +08:00
parent 2a5561927d
commit ee0f0377ce
3 changed files with 137 additions and 13 deletions

View File

@ -83,4 +83,6 @@ public interface WorkerAttendanceMapper extends BaseMapper<WorkerAttendance> {
Page<WorkerAttendanceBo> getPassRecord(@Param("q") GetPassRecordDto dto, Page<WorkerAttendanceBo> page); Page<WorkerAttendanceBo> getPassRecord(@Param("q") GetPassRecordDto dto, Page<WorkerAttendanceBo> page);
List<NumberTimeTableVo> queryAttendanceTrend(Map<String, Object> map); List<NumberTimeTableVo> queryAttendanceTrend(Map<String, Object> map);
List<WorkerAttendance> queryPresenceList(Map<String, Object> map);
} }

View File

@ -793,4 +793,17 @@
) t1 ) t1
GROUP BY t1.daytime GROUP BY t1.daytime
</select> </select>
<select id="queryPresenceList" resultType="com.zhgd.xmgl.modules.worker.entity.WorkerAttendance">
SELECT a.* FROM worker_attendance a WHERE a.id in (
SELECT
max( id )
FROM
`worker_attendance`
WHERE
project_sn = #{projectSn}
AND create_time > DATE_SUB(CURRENT_DATE,INTERVAL 1 day)
GROUP BY
person_sn ) AND a.pass_type = 1
</select>
</mapper> </mapper>

View File

@ -4,7 +4,6 @@ import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.RandomUtil; import cn.hutool.core.util.RandomUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import cn.hutool.core.util.URLUtil;
import cn.hutool.http.HttpRequest; import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpUtil; import cn.hutool.http.HttpUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@ -20,13 +19,11 @@ import com.zhgd.xmgl.modules.project.entity.ProjectEnterprise;
import com.zhgd.xmgl.modules.project.mapper.ProjectEnterpriseMapper; import com.zhgd.xmgl.modules.project.mapper.ProjectEnterpriseMapper;
import com.zhgd.xmgl.modules.project.mapper.ProjectMapper; import com.zhgd.xmgl.modules.project.mapper.ProjectMapper;
import com.zhgd.xmgl.modules.project.service.IProjectEnterpriseService; import com.zhgd.xmgl.modules.project.service.IProjectEnterpriseService;
import com.zhgd.xmgl.modules.worker.entity.EnterpriseInfo; import com.zhgd.xmgl.modules.worker.entity.*;
import com.zhgd.xmgl.modules.worker.entity.TeamInfo;
import com.zhgd.xmgl.modules.worker.entity.WorkerAttendance;
import com.zhgd.xmgl.modules.worker.entity.WorkerInfo;
import com.zhgd.xmgl.modules.worker.mapper.*; import com.zhgd.xmgl.modules.worker.mapper.*;
import com.zhgd.xmgl.modules.worker.service.*; import com.zhgd.xmgl.modules.worker.service.*;
import com.zhgd.xmgl.task.jzg.*; import com.zhgd.xmgl.task.jzg.*;
import com.zhgd.xmgl.util.IdCardUtils;
import com.zhgd.xmgl.util.MessageUtil; import com.zhgd.xmgl.util.MessageUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import net.javacrumbs.shedlock.core.SchedulerLock; import net.javacrumbs.shedlock.core.SchedulerLock;
@ -73,6 +70,8 @@ public class JzgTask {
@Autowired @Autowired
private TeamInfoMapper teamInfoMapper; private TeamInfoMapper teamInfoMapper;
@Autowired @Autowired
private WorkerTypeMapper workerTypeMapper;
@Autowired
private DepartmentInfoMapper departmentInfoMapper; private DepartmentInfoMapper departmentInfoMapper;
@Autowired @Autowired
private IDepartmentInfoService departmentInfoService; private IDepartmentInfoService departmentInfoService;
@ -87,6 +86,8 @@ public class JzgTask {
@Autowired @Autowired
private WorkerAttendanceMapper workerAttendanceMapper; private WorkerAttendanceMapper workerAttendanceMapper;
@Autowired @Autowired
private WorkerAttendancePresenceMapper workerAttendancePresenceMapper;
@Autowired
private RedisRepository redisRepository; private RedisRepository redisRepository;
/** /**
* prefix+projectSntime * prefix+projectSntime
@ -117,7 +118,7 @@ public class JzgTask {
if (StrUtil.isNotBlank(appKey) && StrUtil.isNotBlank(appSecret) && StrUtil.isNotBlank(projectCode) && StrUtil.isNotBlank(jzgHost)) { if (StrUtil.isNotBlank(appKey) && StrUtil.isNotBlank(appSecret) && StrUtil.isNotBlank(projectCode) && StrUtil.isNotBlank(jzgHost)) {
log.info("realNameSystem实名制同步开始projectSn{}", projectSn); log.info("realNameSystem实名制同步开始projectSn{}", projectSn);
syncEnterpriseInfo(appKey, appSecret, projectCode, projectSn, jzgHost); syncEnterpriseInfo(appKey, appSecret, projectCode, projectSn, jzgHost);
syncTeamInfo(appKey, appSecret, projectCode, projectSn, jzgHost); syncTeamInfoAndWorkType(appKey, appSecret, projectCode, projectSn, jzgHost);
syncManagerInfo(appKey, appSecret, projectCode, projectSn, jzgHost); syncManagerInfo(appKey, appSecret, projectCode, projectSn, jzgHost);
syncWorker(appKey, appSecret, projectCode, projectSn, jzgHost); syncWorker(appKey, appSecret, projectCode, projectSn, jzgHost);
syncWorkerAttendance(appKey, appSecret, projectCode, projectSn, jzgHost); syncWorkerAttendance(appKey, appSecret, projectCode, projectSn, jzgHost);
@ -128,10 +129,11 @@ public class JzgTask {
ArrayList<JzgWorkerAttendance> jzgList = getPostAllList(appKey, appSecret, projectCode, JzgWorkerAttendance.class, "/api/v1/getAttendanceInfo", host); ArrayList<JzgWorkerAttendance> jzgList = getPostAllList(appKey, appSecret, projectCode, JzgWorkerAttendance.class, "/api/v1/getAttendanceInfo", host);
String key = JZG_WORKER_ATTENDANCE_LAST_TIME_PREFIX + projectSn; String key = JZG_WORKER_ATTENDANCE_LAST_TIME_PREFIX + projectSn;
Long time = (Long) redisRepository.get(key); Long time = (Long) redisRepository.get(key);
workerAttendancePresenceMapper.delete(new LambdaQueryWrapper<WorkerAttendancePresence>().eq(WorkerAttendancePresence::getProjectSn, projectSn));
for (JzgWorkerAttendance attendance : jzgList) { for (JzgWorkerAttendance attendance : jzgList) {
try { try {
if (time == null || attendance.getCheckDate() > time) { if (time == null || attendance.getCheckDate() > time) {
saveWorkerInfo(attendance, projectSn); saveWorkerAttendance(attendance, projectSn);
} }
} catch (Exception e) { } catch (Exception e) {
log.error("err:", e); log.error("err:", e);
@ -143,9 +145,25 @@ public class JzgTask {
redisRepository.set(key, checkDate); redisRepository.set(key, checkDate);
} }
} }
setPresence(projectSn);
} }
private void saveWorkerInfo(JzgWorkerAttendance jzg, String projectSn) { private void setPresence(String projectSn) {
HashMap<String, Object> map = new HashMap<>();
map.put("projectSn", projectSn);
//计算在场
List<WorkerAttendance> presenceList = workerAttendanceMapper.queryPresenceList(map);
for (WorkerAttendance workerAttendance : presenceList) {
WorkerAttendancePresence p = new WorkerAttendancePresence();
p.setPersonSn(workerAttendance.getPersonSn());
p.setCreateTime(DateUtil.now());
p.setProjectSn(projectSn);
workerAttendancePresenceMapper.insert(p);
}
}
private void saveWorkerAttendance(JzgWorkerAttendance jzg, String projectSn) {
WorkerAttendance workerAttendance = new WorkerAttendance(); WorkerAttendance workerAttendance = new WorkerAttendance();
WorkerInfo wi = workerInfoMapper.selectOne(new LambdaQueryWrapper<WorkerInfo>() WorkerInfo wi = workerInfoMapper.selectOne(new LambdaQueryWrapper<WorkerInfo>()
.eq(WorkerInfo::getJzgUserId, jzg.getUserId())); .eq(WorkerInfo::getJzgUserId, jzg.getUserId()));
@ -282,6 +300,7 @@ public class JzgTask {
wi.setExitDate(DateUtil.formatDate(new Date(jzg.getExitTime()))); wi.setExitDate(DateUtil.formatDate(new Date(jzg.getExitTime())));
} }
wi.setJzgUserId(jzg.getUserId()); wi.setJzgUserId(jzg.getUserId());
wi.setBirthday(MapUtils.getString(IdCardUtils.getBirthdayAgeSex(jzg.getIdCardNumber()), "birthday"));
return wi; return wi;
} }
@ -310,12 +329,89 @@ public class JzgTask {
//wi.setTeamId(); //wi.setTeamId();
//wi.setDepartmentId(); //wi.setDepartmentId();
wi.setJobName(getJobName(jzg.getJobType())); wi.setJobName(getJobName(jzg.getJobType()));
wi.setJobType(getJobType(jzg.getJobType()));
if (jzg.getExitTime() != null) { if (jzg.getExitTime() != null) {
wi.setExitDate(DateUtil.formatDate(new Date(jzg.getExitTime()))); wi.setExitDate(DateUtil.formatDate(new Date(jzg.getExitTime())));
} }
wi.setBirthday(MapUtils.getString(IdCardUtils.getBirthdayAgeSex(jzg.getIdCardNumber()), "birthday"));
return wi; return wi;
} }
private String getJobType(String jobType) {
if (StrUtil.isBlank(jobType)) {
return null;
}
switch (jobType) {
case "1001":
return "19";
case "1002":
return "19";
case "1003":
return "19";
case "1004":
return "19";
case "1005":
return "19";
case "1006":
return "19";
case "1007":
return "19";
case "1008":
return "5";
case "1009":
return "5";
case "1010":
return "5";
case "1011":
return "5";
case "1012":
return "5";
case "1013":
return "5";
case "1014":
return "5";
case "1015":
return "5";
case "1016":
return "26";
case "1017":
return "26";
case "1018":
return "26";
case "1019":
return "26";
case "1020":
return "26";
case "1021":
return "26";
case "1022":
return "26";
case "1023":
return "26";
case "1024":
return "26";
case "1025":
return "26";
case "1026":
return "26";
case "1027":
return "26";
case "1028":
return "26";
case "1029":
return "26";
case "1030":
return "26";
case "1031":
return "26";
case "1032":
return "26";
case "1099":
return "26";
}
return null;
}
private String getNation(String nation) { private String getNation(String nation) {
if (StrUtil.isBlank(nation)) { if (StrUtil.isBlank(nation)) {
return null; return null;
@ -560,7 +656,7 @@ public class JzgTask {
} }
private void syncTeamInfo(String appKey, String appSecret, String projectCode, String projectSn, String host) { private void syncTeamInfoAndWorkType(String appKey, String appSecret, String projectCode, String projectSn, String host) {
ArrayList<JzgTeamInfo> jzgList = getPostAllList(appKey, appSecret, projectCode, JzgTeamInfo.class, "/api/v1/getTeamInfo", host); ArrayList<JzgTeamInfo> jzgList = getPostAllList(appKey, appSecret, projectCode, JzgTeamInfo.class, "/api/v1/getTeamInfo", host);
HashMap<String, Object> eMap = new HashMap<>(); HashMap<String, Object> eMap = new HashMap<>();
eMap.put("projectSn", projectSn); eMap.put("projectSn", projectSn);
@ -574,9 +670,9 @@ public class JzgTask {
String teamSysNo = teamInfo.getTeamSysNo(); String teamSysNo = teamInfo.getTeamSysNo();
TeamInfo info = recordMap.get(teamSysNo); TeamInfo info = recordMap.get(teamSysNo);
if (info == null) { if (info == null) {
saveTeamInfo(getTeamInfo(teamInfo, null, projectSn)); saveTeamInfoAndWorkType(getTeamInfo(teamInfo, null, projectSn));
} else { } else {
editTeamInfo(getTeamInfo(teamInfo, info, projectSn)); editTeamInfoAndWorkType(getTeamInfo(teamInfo, info, projectSn));
} }
} catch (Exception e) { } catch (Exception e) {
log.error("err:", e); log.error("err:", e);
@ -587,6 +683,7 @@ public class JzgTask {
JzgTeamInfo jzgTeamInfo = jzgEnterpriseInfoMap.get(teamInfo.getJzgTeamSn()); JzgTeamInfo jzgTeamInfo = jzgEnterpriseInfoMap.get(teamInfo.getJzgTeamSn());
if (jzgTeamInfo == null) { if (jzgTeamInfo == null) {
teamInfoMapper.deleteById(teamInfo.getId()); teamInfoMapper.deleteById(teamInfo.getId());
workerTypeMapper.deleteById(teamInfo.getWorkerTypeId());
} }
} catch (Exception e) { } catch (Exception e) {
log.error("err:", e); log.error("err:", e);
@ -619,7 +716,13 @@ public class JzgTask {
return jzgList; return jzgList;
} }
private void editTeamInfo(TeamInfo teamInfo) { private void editTeamInfoAndWorkType(TeamInfo teamInfo) {
WorkerType wt = new WorkerType();
wt.setId(teamInfo.getWorkerTypeId());
wt.setTypeName(teamInfo.getTeamName());
wt.setProjectSn(teamInfo.getProjectSn());
workerTypeMapper.updateById(wt);
QueryWrapper<TeamInfo> queryWrapper = new QueryWrapper<>(); QueryWrapper<TeamInfo> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(TeamInfo::getProjectSn, teamInfo.getProjectSn()) queryWrapper.lambda().eq(TeamInfo::getProjectSn, teamInfo.getProjectSn())
.eq(TeamInfo::getTeamName, teamInfo.getTeamName()) .eq(TeamInfo::getTeamName, teamInfo.getTeamName())
@ -632,7 +735,13 @@ public class JzgTask {
teamInfoMapper.updateById(teamInfo); teamInfoMapper.updateById(teamInfo);
} }
private void saveTeamInfo(TeamInfo teamInfo) { private void saveTeamInfoAndWorkType(TeamInfo teamInfo) {
WorkerType wt = new WorkerType();
wt.setTypeName(teamInfo.getTeamName());
wt.setProjectSn(teamInfo.getProjectSn());
workerTypeMapper.insert(wt);
teamInfo.setWorkerTypeId(wt.getId());
QueryWrapper<TeamInfo> queryWrapper = new QueryWrapper<>(); QueryWrapper<TeamInfo> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(TeamInfo::getProjectSn, teamInfo.getProjectSn()) queryWrapper.lambda().eq(TeamInfo::getProjectSn, teamInfo.getProjectSn())
.eq(TeamInfo::getEnterpriseId, teamInfo.getEnterpriseId()) .eq(TeamInfo::getEnterpriseId, teamInfo.getEnterpriseId())