金筑工实名制同步数据

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);
List<NumberTimeTableVo> queryAttendanceTrend(Map<String, Object> map);
List<WorkerAttendance> queryPresenceList(Map<String, Object> map);
}

View File

@ -793,4 +793,17 @@
) t1
GROUP BY t1.daytime
</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>

View File

@ -4,7 +4,6 @@ import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.RandomUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.core.util.URLUtil;
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpUtil;
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.ProjectMapper;
import com.zhgd.xmgl.modules.project.service.IProjectEnterpriseService;
import com.zhgd.xmgl.modules.worker.entity.EnterpriseInfo;
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.entity.*;
import com.zhgd.xmgl.modules.worker.mapper.*;
import com.zhgd.xmgl.modules.worker.service.*;
import com.zhgd.xmgl.task.jzg.*;
import com.zhgd.xmgl.util.IdCardUtils;
import com.zhgd.xmgl.util.MessageUtil;
import lombok.extern.slf4j.Slf4j;
import net.javacrumbs.shedlock.core.SchedulerLock;
@ -73,6 +70,8 @@ public class JzgTask {
@Autowired
private TeamInfoMapper teamInfoMapper;
@Autowired
private WorkerTypeMapper workerTypeMapper;
@Autowired
private DepartmentInfoMapper departmentInfoMapper;
@Autowired
private IDepartmentInfoService departmentInfoService;
@ -87,6 +86,8 @@ public class JzgTask {
@Autowired
private WorkerAttendanceMapper workerAttendanceMapper;
@Autowired
private WorkerAttendancePresenceMapper workerAttendancePresenceMapper;
@Autowired
private RedisRepository redisRepository;
/**
* prefix+projectSntime
@ -117,7 +118,7 @@ public class JzgTask {
if (StrUtil.isNotBlank(appKey) && StrUtil.isNotBlank(appSecret) && StrUtil.isNotBlank(projectCode) && StrUtil.isNotBlank(jzgHost)) {
log.info("realNameSystem实名制同步开始projectSn{}", projectSn);
syncEnterpriseInfo(appKey, appSecret, projectCode, projectSn, jzgHost);
syncTeamInfo(appKey, appSecret, projectCode, projectSn, jzgHost);
syncTeamInfoAndWorkType(appKey, appSecret, projectCode, projectSn, jzgHost);
syncManagerInfo(appKey, appSecret, projectCode, projectSn, jzgHost);
syncWorker(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);
String key = JZG_WORKER_ATTENDANCE_LAST_TIME_PREFIX + projectSn;
Long time = (Long) redisRepository.get(key);
workerAttendancePresenceMapper.delete(new LambdaQueryWrapper<WorkerAttendancePresence>().eq(WorkerAttendancePresence::getProjectSn, projectSn));
for (JzgWorkerAttendance attendance : jzgList) {
try {
if (time == null || attendance.getCheckDate() > time) {
saveWorkerInfo(attendance, projectSn);
saveWorkerAttendance(attendance, projectSn);
}
} catch (Exception e) {
log.error("err:", e);
@ -143,9 +145,25 @@ public class JzgTask {
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();
WorkerInfo wi = workerInfoMapper.selectOne(new LambdaQueryWrapper<WorkerInfo>()
.eq(WorkerInfo::getJzgUserId, jzg.getUserId()));
@ -282,6 +300,7 @@ public class JzgTask {
wi.setExitDate(DateUtil.formatDate(new Date(jzg.getExitTime())));
}
wi.setJzgUserId(jzg.getUserId());
wi.setBirthday(MapUtils.getString(IdCardUtils.getBirthdayAgeSex(jzg.getIdCardNumber()), "birthday"));
return wi;
}
@ -310,12 +329,89 @@ public class JzgTask {
//wi.setTeamId();
//wi.setDepartmentId();
wi.setJobName(getJobName(jzg.getJobType()));
wi.setJobType(getJobType(jzg.getJobType()));
if (jzg.getExitTime() != null) {
wi.setExitDate(DateUtil.formatDate(new Date(jzg.getExitTime())));
}
wi.setBirthday(MapUtils.getString(IdCardUtils.getBirthdayAgeSex(jzg.getIdCardNumber()), "birthday"));
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) {
if (StrUtil.isBlank(nation)) {
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);
HashMap<String, Object> eMap = new HashMap<>();
eMap.put("projectSn", projectSn);
@ -574,9 +670,9 @@ public class JzgTask {
String teamSysNo = teamInfo.getTeamSysNo();
TeamInfo info = recordMap.get(teamSysNo);
if (info == null) {
saveTeamInfo(getTeamInfo(teamInfo, null, projectSn));
saveTeamInfoAndWorkType(getTeamInfo(teamInfo, null, projectSn));
} else {
editTeamInfo(getTeamInfo(teamInfo, info, projectSn));
editTeamInfoAndWorkType(getTeamInfo(teamInfo, info, projectSn));
}
} catch (Exception e) {
log.error("err:", e);
@ -587,6 +683,7 @@ public class JzgTask {
JzgTeamInfo jzgTeamInfo = jzgEnterpriseInfoMap.get(teamInfo.getJzgTeamSn());
if (jzgTeamInfo == null) {
teamInfoMapper.deleteById(teamInfo.getId());
workerTypeMapper.deleteById(teamInfo.getWorkerTypeId());
}
} catch (Exception e) {
log.error("err:", e);
@ -619,7 +716,13 @@ public class JzgTask {
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.lambda().eq(TeamInfo::getProjectSn, teamInfo.getProjectSn())
.eq(TeamInfo::getTeamName, teamInfo.getTeamName())
@ -632,7 +735,13 @@ public class JzgTask {
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.lambda().eq(TeamInfo::getProjectSn, teamInfo.getProjectSn())
.eq(TeamInfo::getEnterpriseId, teamInfo.getEnterpriseId())