From e0660ca428c980bd6afd66b26b02b2c5cb5ee5d5 Mon Sep 17 00:00:00 2001 From: "lj7788@126.com" Date: Wed, 17 Sep 2025 15:44:26 +0800 Subject: [PATCH] =?UTF-8?q?9.17=E8=80=83=E5=8B=A4=E8=AE=B0=E5=BD=95?= =?UTF-8?q?=E4=BF=9D=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/ProMobileAttendanceData.java | 114 +++++++++++ .../manage/ProMobileAttendanceDataMapper.xml | 45 +++-- .../domain/QuartzProjectAttendanceData.java | 10 + .../yanzhu/job/task/AttendanceJgwTask.java | 39 ++++ .../yanzhu/job/task/AttendanceSzjTask.java | 26 +++ .../manage/api/LabourApiController.java | 9 +- .../controller/UniCallBackController.java | 26 ++- .../IProMobileAttendanceDataService.java | 5 + .../service/IProjectPitMonitCfgService.java | 4 + .../ProMobileAttendanceDataServiceImpl.java | 9 + .../impl/ProUserInoutRecordServiceImpl.java | 2 +- .../impl/ProjectPitMonitCfgServiceImpl.java | 3 + .../manage/mobileAttendanceData/index.vue | 182 +++++------------- .../views/manage/userInOutRecord/index.vue | 3 +- 14 files changed, 320 insertions(+), 157 deletions(-) diff --git a/yanzhu-common/yanzhu-common-mapper/src/main/java/com/yanzhu/manage/domain/ProMobileAttendanceData.java b/yanzhu-common/yanzhu-common-mapper/src/main/java/com/yanzhu/manage/domain/ProMobileAttendanceData.java index a47d95cc..eedc089d 100644 --- a/yanzhu-common/yanzhu-common-mapper/src/main/java/com/yanzhu/manage/domain/ProMobileAttendanceData.java +++ b/yanzhu-common/yanzhu-common-mapper/src/main/java/com/yanzhu/manage/domain/ProMobileAttendanceData.java @@ -53,6 +53,120 @@ public class ProMobileAttendanceData extends BaseEntity private String basePath; + /** 用户名 */ + @Excel(name = "用户名") + private String userName; + + /** 用户手机号 */ + @Excel(name = "用户手机号") + private String userPhone; + + /** 子部门名称 */ + @Excel(name = "子部门名称") + private String subDeptName; + + /** 子部门组别名称 */ + @Excel(name = "子部门组别名称") + private String subDeptGroupName; + + /** 工种名称 */ + @Excel(name = "工种名称") + private String craftTypeName; + + /** 岗位名称 */ + @Excel(name = "岗位名称") + private String craftPostName; + + /** 岗位名称 */ + @Excel(name = "岗位名称") + private String userPost; + + private Date startDate; + private Date endDate; + /** 用户性别 */ + @Excel(name = "用户性别") + private String userSex; + + public String getUserSex() { + return userSex; + } + + public void setUserSex(String userSex) { + this.userSex = userSex; + } + + public Date getStartDate() { + return startDate; + } + + public void setStartDate(Date startDate) { + this.startDate = startDate; + } + + public Date getEndDate() { + return endDate; + } + + public void setEndDate(Date endDate) { + this.endDate = endDate; + } + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public String getUserPhone() { + return userPhone; + } + + public void setUserPhone(String userPhone) { + this.userPhone = userPhone; + } + + public String getSubDeptName() { + return subDeptName; + } + + public void setSubDeptName(String subDeptName) { + this.subDeptName = subDeptName; + } + + public String getSubDeptGroupName() { + return subDeptGroupName; + } + + public void setSubDeptGroupName(String subDeptGroupName) { + this.subDeptGroupName = subDeptGroupName; + } + + public String getCraftTypeName() { + return craftTypeName; + } + + public void setCraftTypeName(String craftTypeName) { + this.craftTypeName = craftTypeName; + } + + public String getCraftPostName() { + return craftPostName; + } + + public void setCraftPostName(String craftPostName) { + this.craftPostName = craftPostName; + } + + public String getUserPost() { + return userPost; + } + + public void setUserPost(String userPost) { + this.userPost = userPost; + } + public String getBasePath() { return basePath; } diff --git a/yanzhu-common/yanzhu-common-mapper/src/main/resources/mapper/manage/ProMobileAttendanceDataMapper.xml b/yanzhu-common/yanzhu-common-mapper/src/main/resources/mapper/manage/ProMobileAttendanceDataMapper.xml index bc10dd24..c642e55b 100644 --- a/yanzhu-common/yanzhu-common-mapper/src/main/resources/mapper/manage/ProMobileAttendanceDataMapper.xml +++ b/yanzhu-common/yanzhu-common-mapper/src/main/resources/mapper/manage/ProMobileAttendanceDataMapper.xml @@ -21,31 +21,52 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + + + + + + + - select id, user_id, project_id, cfg_id, in_out, longitude, latitude, att_date, att_img, is_del, remark, state, create_by, create_time, update_by, update_time from pro_mobile_attendance_data + + select pma.id, pma.user_id, pma.project_id, pma.cfg_id, pma.in_out, pma.longitude, pma.latitude, pma.att_date, pma.att_img, pma.is_del, + pma.remark, pma.state, pma.create_by, pma.create_time, pma.update_by, pma.update_time, + dic1.dict_label as craft_type_name,dic2.dict_label as craft_post_name, + psu.user_name, psu.user_phone,psu.sub_dept_name,psu.sub_dept_group_name,psu.user_post,psu.user_sex + from pro_mobile_attendance_data pma + left join pro_project_info_subdepts_users psu on pma.user_id=psu.user_id + left join sys_dict_data dic1 on psu.`craft_type`=dic1.`dict_value` and dic1.`dict_type`='pro_craft_type' + left join sys_dict_data dic2 on psu.`craft_post`=dic2.`dict_value` and dic2.`dict_type`='pro_craft_post' + diff --git a/yanzhu-modules/yanzhu-job/src/main/java/com/yanzhu/job/domain/QuartzProjectAttendanceData.java b/yanzhu-modules/yanzhu-job/src/main/java/com/yanzhu/job/domain/QuartzProjectAttendanceData.java index 0342c87a..c3912b5f 100644 --- a/yanzhu-modules/yanzhu-job/src/main/java/com/yanzhu/job/domain/QuartzProjectAttendanceData.java +++ b/yanzhu-modules/yanzhu-job/src/main/java/com/yanzhu/job/domain/QuartzProjectAttendanceData.java @@ -144,6 +144,16 @@ public class QuartzProjectAttendanceData extends BaseEntity } + private String inOut; + + public String getInOut() { + return inOut; + } + + public void setInOut(String inOut) { + this.inOut = inOut; + } + private Long projectId; @Excel(name = "项目名称") private String projectName; diff --git a/yanzhu-modules/yanzhu-job/src/main/java/com/yanzhu/job/task/AttendanceJgwTask.java b/yanzhu-modules/yanzhu-job/src/main/java/com/yanzhu/job/task/AttendanceJgwTask.java index 85df89e9..72896760 100644 --- a/yanzhu-modules/yanzhu-job/src/main/java/com/yanzhu/job/task/AttendanceJgwTask.java +++ b/yanzhu-modules/yanzhu-job/src/main/java/com/yanzhu/job/task/AttendanceJgwTask.java @@ -6,6 +6,7 @@ import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONArray; import com.alibaba.fastjson2.JSONObject; import com.yanzhu.common.core.constant.SecurityConstants; +import com.yanzhu.common.core.context.SecurityContextHolder; import com.yanzhu.common.core.domain.R; import com.yanzhu.common.core.enums.*; import com.yanzhu.common.core.text.Convert; @@ -17,6 +18,8 @@ import com.yanzhu.common.redis.service.RedisService; import com.yanzhu.common.security.utils.SecurityUtils; import com.yanzhu.job.domain.*; import com.yanzhu.job.service.*; +import com.yanzhu.manage.domain.ProMobileAttendanceData; +import com.yanzhu.manage.mapper.ProMobileAttendanceDataMapper; import com.yanzhu.system.api.RemoteFileService; import com.yanzhu.system.api.RemoteUserService; import com.yanzhu.system.api.domain.SysFile; @@ -70,6 +73,9 @@ public class AttendanceJgwTask { @Autowired private IQuartzProAttendanceDataService quartzProAttendanceDataService; + @Autowired + private ProMobileAttendanceDataMapper proMobileAttendanceDataMapper; + private final String code = "jgw"; private static final String JGW_HOST = "http://api.gongyoumishu.com:80/gomeetapi/"; @@ -1017,6 +1023,12 @@ public class AttendanceJgwTask { quartzProAttendanceDataQuery.setSubDeptId(quartzProSubdeptsUsers.getSubDeptId()); quartzProAttendanceDataQuery.setUserId(quartzProSubdeptsUsers.getUserId()); quartzProAttendanceDataQuery.setSearchValue(json.getString("signDate")); + + ProMobileAttendanceData mobileAttendanceData = new ProMobileAttendanceData(); + mobileAttendanceData.setProjectId(quartzProAttendanceDataQuery.getProjectId()); + mobileAttendanceData.setUserId(quartzProAttendanceDataQuery.getUserId()); + mobileAttendanceData.setCfgId(it.getId()); + List attendanceDataList = quartzProAttendanceDataService.selectProAttendanceDataList(quartzProAttendanceDataQuery); if(attendanceDataList!=null && attendanceDataList.size()>0){ QuartzProAttendanceData quartzProAttendanceData = attendanceDataList.get(0); @@ -1026,22 +1038,34 @@ public class AttendanceJgwTask { quartzProAttendanceData.setInTime(DateUtils.parseDate(json.getString("checkinTime"))); String checkPhoto = getPhoto(appId, token, it.getProjectPackage(), datePath, json.getString("signimg")); quartzProAttendanceData.setInPhoto(checkPhoto); + mobileAttendanceData.setInOut("in"); + mobileAttendanceData.setAttImg(checkPhoto); + mobileAttendanceData.setAttDate(quartzProAttendanceData.getInTime()); } }else if(machineType.equals("3")){ //签出 quartzProAttendanceData.setOutTime(DateUtils.parseDate(json.getString("checkinTime"))); String checkPhoto = getPhoto(appId, token, it.getProjectPackage(), datePath, json.getString("signimg")); quartzProAttendanceData.setOutPhoto(checkPhoto); + mobileAttendanceData.setInOut("in"); + mobileAttendanceData.setAttImg(checkPhoto); + mobileAttendanceData.setAttDate(quartzProAttendanceData.getOutTime()); }else{ //默认 if(quartzProAttendanceData.getInData()==null){ quartzProAttendanceData.setInTime(DateUtils.parseDate(json.getString("checkinTime"))); String checkPhoto = getPhoto(appId, token, it.getProjectPackage(), datePath, json.getString("signimg")); quartzProAttendanceData.setInPhoto(checkPhoto); + mobileAttendanceData.setInOut("in"); + mobileAttendanceData.setAttImg(checkPhoto); + mobileAttendanceData.setAttDate(quartzProAttendanceData.getInTime()); }else{ quartzProAttendanceData.setOutTime(DateUtils.parseDate(json.getString("checkinTime"))); String checkPhoto = getPhoto(appId, token, it.getProjectPackage(), datePath, json.getString("signimg")); quartzProAttendanceData.setOutPhoto(checkPhoto); + mobileAttendanceData.setInOut("out"); + mobileAttendanceData.setAttImg(checkPhoto); + mobileAttendanceData.setAttDate(quartzProAttendanceData.getOutTime()); } } quartzProAttendanceData.setUpdateBy("JGW-TASK"); @@ -1067,16 +1091,25 @@ public class AttendanceJgwTask { quartzProAttendanceData.setInTime(checkinTime); String checkPhoto = getPhoto(appId, token, it.getProjectPackage(), datePath, json.getString("signimg")); quartzProAttendanceData.setInPhoto(checkPhoto); + mobileAttendanceData.setInOut("in"); + mobileAttendanceData.setAttImg(checkPhoto); + mobileAttendanceData.setAttDate(quartzProAttendanceData.getInTime()); }else if(machineType.equals("3")){ //签出 quartzProAttendanceData.setOutTime(checkinTime); String checkPhoto = getPhoto(appId, token, it.getProjectPackage(), datePath, json.getString("signimg")); quartzProAttendanceData.setOutPhoto(checkPhoto); + mobileAttendanceData.setInOut("out"); + mobileAttendanceData.setAttImg(checkPhoto); + mobileAttendanceData.setAttDate(quartzProAttendanceData.getOutTime()); }else{ //默认 quartzProAttendanceData.setInTime(checkinTime); String checkPhoto = getPhoto(appId, token, it.getProjectPackage(), datePath, json.getString("signimg")); quartzProAttendanceData.setInPhoto(checkPhoto); + mobileAttendanceData.setInOut("in"); + mobileAttendanceData.setAttImg(checkPhoto); + mobileAttendanceData.setAttDate(quartzProAttendanceData.getInTime()); } quartzProAttendanceData.setDeviceNo(json.getString("deviceSerialNo")); quartzProAttendanceData.setCreateBy("JGW-TASK"); @@ -1084,6 +1117,12 @@ public class AttendanceJgwTask { quartzProAttendanceData.setSource(quartzProSubdeptsUsers.getSource()); quartzProAttendanceDataService.insertProAttendanceData(quartzProAttendanceData); } + + if(StringUtils.isNotEmpty(mobileAttendanceData.getAttImg())){ + mobileAttendanceData.setCreateTime(new Date()); + mobileAttendanceData.setCreateBy(SecurityContextHolder.getUserName()); + proMobileAttendanceDataMapper.insertProMobileAttendanceData(mobileAttendanceData); + } } } doSyncAttendanceData(jo, endId, it); diff --git a/yanzhu-modules/yanzhu-job/src/main/java/com/yanzhu/job/task/AttendanceSzjTask.java b/yanzhu-modules/yanzhu-job/src/main/java/com/yanzhu/job/task/AttendanceSzjTask.java index ce6f90e2..277e7ea0 100644 --- a/yanzhu-modules/yanzhu-job/src/main/java/com/yanzhu/job/task/AttendanceSzjTask.java +++ b/yanzhu-modules/yanzhu-job/src/main/java/com/yanzhu/job/task/AttendanceSzjTask.java @@ -5,6 +5,7 @@ import cn.hutool.core.util.NumberUtil; import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONArray; import com.alibaba.fastjson2.JSONObject; +import com.yanzhu.common.core.context.SecurityContextHolder; import com.yanzhu.common.core.enums.*; import com.yanzhu.common.core.text.Convert; import com.yanzhu.common.core.utils.DateUtils; @@ -13,6 +14,8 @@ import com.yanzhu.common.core.utils.http.HttpUtils; import com.yanzhu.common.redis.service.RedisService; import com.yanzhu.job.domain.*; import com.yanzhu.job.service.*; +import com.yanzhu.manage.domain.ProMobileAttendanceData; +import com.yanzhu.manage.mapper.ProMobileAttendanceDataMapper; import com.yanzhu.system.api.RemoteFileService; import com.yanzhu.system.api.RemoteUserService; import lombok.extern.slf4j.Slf4j; @@ -58,6 +61,8 @@ public class AttendanceSzjTask { @Autowired private IQuartzProjectAttendanceDataService attendanceDataService; + @Autowired + private ProMobileAttendanceDataMapper proMobileAttendanceDataMapper; private final String code = "szj"; private static final String SZJ_HOST = "https://sc.uni-ubi.com/sc/api/"; @@ -139,9 +144,11 @@ public class AttendanceSzjTask { QuartzProjectAttendanceData attendance = new QuartzProjectAttendanceData(); attendance.setServerid(jo.getString("id")); if(1==jo.getInteger("doorType")){ + attendance.setInOut("in"); attendance.setAttendanceTime(jo.getString("showTime")); }else{ attendance.setAttendanceOutTime(jo.getString("showTime")); + attendance.setInOut("out"); } attendance.setIdentification(jo.getString("idCardNo")); attendance.setWorkerName(jo.getString("personName")); @@ -625,6 +632,25 @@ public class AttendanceSzjTask { att.setId(attList.get(0).getId()); attendanceDataService.updateSurProjectAttendanceData(att); } + + ProMobileAttendanceData proMobileAttendanceData=new ProMobileAttendanceData(); + proMobileAttendanceData.setCfgId(cfg.getId()); + proMobileAttendanceData.setUserId(user.getId()); + proMobileAttendanceData.setProjectId(user.getProjectId()); + proMobileAttendanceData.setInOut(att.getInOut()); + if("in".equals(att.getInOut())){ + proMobileAttendanceData.setAttDate(DateUtil.parseDate(att.getAttendanceTime())); + }else{ + proMobileAttendanceData.setAttDate(DateUtil.parseDate(att.getAttendanceOutTime())); + } + proMobileAttendanceData.setAttImg(att.getScanPhoto()); + proMobileAttendanceData.setCreateTime(new Date()); + proMobileAttendanceData.setCreateBy(SecurityContextHolder.getUserName()); + proMobileAttendanceData.setIsDel(0L); + proMobileAttendanceData.setRemark(""); + proMobileAttendanceData.setState(0L); + + //TODO 保存考勤日志未完成(第三方) } if(atts.size()==100){ doSyncAttendance(token,cfg,offset,startTime,endTime); diff --git a/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/api/LabourApiController.java b/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/api/LabourApiController.java index d08f6b9d..9bd95f68 100644 --- a/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/api/LabourApiController.java +++ b/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/api/LabourApiController.java @@ -19,10 +19,7 @@ import com.yanzhu.common.redis.service.RedisService; import com.yanzhu.common.security.service.TokenService; import com.yanzhu.common.security.utils.SecurityUtils; import com.yanzhu.manage.api.vo.*; -import com.yanzhu.manage.domain.SurProjectAttendanceData; -import com.yanzhu.manage.domain.SurProjectAttendanceGroup; -import com.yanzhu.manage.domain.SurProjectAttendanceUser; -import com.yanzhu.manage.domain.SysApplyConfig; +import com.yanzhu.manage.domain.*; import com.yanzhu.manage.enums.HttpStatusEnum; import com.yanzhu.manage.service.ISurProjectAttendanceDataService; import com.yanzhu.manage.service.ISurProjectAttendanceGroupService; @@ -306,7 +303,11 @@ public class LabourApiController extends BaseController { findData.setAppId(sysApplyConfig.getAppId()); findData.setWorkerId(req.getWorkerId()); findData.setAttendanceTime(req.getAttendanceTime()); + //TODO 保存考勤日志未完成(第三方) SurProjectAttendanceData surProjectAttendanceData = surProjectAttendanceDataService.findCurrentAttendanceData(findData); + ProMobileAttendanceData proMobileAttendanceData = new ProMobileAttendanceData(); + proMobileAttendanceData.setCfgId(sysApplyConfig.getCfgId()); + if (surProjectAttendanceData != null) { //这里不能修改出勤时间 if (Objects.equals("L", req.getAttendanceType())) { diff --git a/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/controller/UniCallBackController.java b/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/controller/UniCallBackController.java index 8b6f483b..7499c993 100644 --- a/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/controller/UniCallBackController.java +++ b/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/controller/UniCallBackController.java @@ -6,11 +6,9 @@ import com.yanzhu.common.core.utils.StringUtils; import com.yanzhu.common.core.web.domain.AjaxResult; import com.yanzhu.manage.domain.AttendanceUbiData; import com.yanzhu.manage.domain.AttendanceUbiDevice; +import com.yanzhu.manage.domain.ProMobileAttendanceData; import com.yanzhu.manage.domain.ProProjectInfoSubdeptsUsers; -import com.yanzhu.manage.service.IAttendanceUbiDataService; -import com.yanzhu.manage.service.IAttendanceUbiDeviceService; -import com.yanzhu.manage.service.IProProjectInfoDeptsService; -import com.yanzhu.manage.service.IProProjectInfoSubdeptsUsersService; +import com.yanzhu.manage.service.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -35,6 +33,9 @@ public class UniCallBackController { @Autowired private IAttendanceUbiDeviceService attendanceUbiDeviceService; + @Autowired + private IProMobileAttendanceDataService proMobileAttendanceDataService; + /** * 识别回调 * @return @@ -122,6 +123,7 @@ public class UniCallBackController { if(device==null){ return AjaxResult.error("没有查询到设备No"); } + ProMobileAttendanceData attendanceData=new ProMobileAttendanceData(); if(list.size()==0){ //增加操作 ProProjectInfoSubdeptsUsers userWhere=new ProProjectInfoSubdeptsUsers(); @@ -145,14 +147,22 @@ public class UniCallBackController { addData.setSubDeptGroupName(proUser.getSubDeptGroupName()); addData.setCraftPost(proUser.getCraftPost()); addData.setCraftType(proUser.getCraftType()); + attendanceData.setUserId(proUser.getUserId()); + attendanceData.setProjectId(projectId); + attendanceData.setAttDate(showTime); + attendanceData.setAttImg(filePath); if(device.getDirection()==0) { addData.setInTime(showTime); addData.setInData(data); addData.setInPhoto(filePath); + attendanceData.setInOut("in"); + proMobileAttendanceDataService.addAttendanceData(attendanceData); }else{ addData.setOutPhoto(filePath); addData.setOutData(data); addData.setOutTime(showTime); + attendanceData.setInOut("out"); + proMobileAttendanceDataService.addAttendanceData(attendanceData); } addData.setDeviceNo(deviceNo); attendanceUbiDataService.insertAttendanceUbiData(addData); @@ -166,12 +176,18 @@ public class UniCallBackController { } Date dt1=upData.getInTime(); Date dt2=upData.getOutTime(); + attendanceData.setUserId(upData.getUserId()); + attendanceData.setProjectId(projectId); + attendanceData.setAttDate(showTime); + attendanceData.setAttImg(filePath); if(device.getDirection()==0){ //入 if(dt1==null || showTime.getTime()
- - + + - - + + - - - - - - - - - - - - - - - - - - - - - + + 搜索 @@ -79,81 +17,54 @@ - + - - - - - - - - + + + + + + + + + - - - - - -