9.17考勤记录保存

dev_xd
lj7788@126.com 2025-09-17 15:44:26 +08:00
parent a864d3aec3
commit e0660ca428
14 changed files with 320 additions and 157 deletions

View File

@ -53,6 +53,120 @@ public class ProMobileAttendanceData extends BaseEntity
private String basePath; 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() { public String getBasePath() {
return basePath; return basePath;
} }

View File

@ -21,31 +21,52 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="createTime" column="create_time" /> <result property="createTime" column="create_time" />
<result property="updateBy" column="update_by" /> <result property="updateBy" column="update_by" />
<result property="updateTime" column="update_time" /> <result property="updateTime" column="update_time" />
<result property="userName" column="user_name" />
<result property="userPhone" column="user_phone" />
<result property="subDeptName" column="sub_dept_name" />
<result property="subDeptGroupName" column="sub_dept_group_name" />
<result property="craftTypeName" column="craft_type_name" />
<result property="craftPostName" column="craft_post_name" />
<result property="userPost" column="user_post" />
<result property="userSex" column="user_sex" />
</resultMap> </resultMap>
<sql id="selectProMobileAttendanceDataVo"> <sql id="selectProMobileAttendanceDataVo">
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'
</sql> </sql>
<select id="selectProMobileAttendanceDataList" parameterType="ProMobileAttendanceData" resultMap="ProMobileAttendanceDataResult"> <select id="selectProMobileAttendanceDataList" parameterType="ProMobileAttendanceData" resultMap="ProMobileAttendanceDataResult">
<include refid="selectProMobileAttendanceDataVo"/> <include refid="selectProMobileAttendanceDataVo"/>
<where> <where>
<if test="userId != null "> and user_id = #{userId}</if> <if test="userId != null "> and pma.user_id = #{userId}</if>
<if test="projectId != null "> and project_id = #{projectId}</if> <if test="projectId != null "> and pma.project_id = #{projectId}</if>
<if test="cfgId != null "> and cfg_id = #{cfgId}</if> <if test="cfgId != null "> and pma.cfg_id = #{cfgId}</if>
<if test="inOut != null and inOut != ''"> and in_out = #{inOut}</if> <if test="inOut != null and inOut != ''"> and pma.in_out = #{inOut}</if>
<if test="longitude != null "> and longitude = #{longitude}</if> <if test="longitude != null "> and pma.longitude = #{longitude}</if>
<if test="latitude != null "> and latitude = #{latitude}</if> <if test="latitude != null "> and pma.latitude = #{latitude}</if>
<if test="attDate != null "> and att_date = #{attDate}</if> <if test="attDate != null "> and pma.att_date = #{attDate}</if>
<if test="attImg != null and attImg != ''"> and att_img = #{attImg}</if> <if test="attImg != null and attImg != ''"> and pma.att_img = #{attImg}</if>
<if test="isDel != null "> and is_del = #{isDel}</if> <if test="isDel != null "> and pma.is_del = #{isDel}</if>
<if test="state != null "> and state = #{state}</if> <if test="state != null "> and pma.state = #{state}</if>
<if test="userName!=null and userName!=''"> and psu.user_name like concat('%', #{userName}, '%')</if>
<if test="userPhone!=null and userPhone!=''"> and psu.user_phone like concat('%', #{userPhone}, '%')</if>
<if test="startDate!=null"> and date(pma.att_date) &gt;= date(#{startDate})</if>
<if test="endDate!=null"> and date(pma.att_date) &lt;= date(#{endDate})</if>
</where> </where>
</select> </select>
<select id="selectProMobileAttendanceDataById" parameterType="Long" resultMap="ProMobileAttendanceDataResult"> <select id="selectProMobileAttendanceDataById" parameterType="Long" resultMap="ProMobileAttendanceDataResult">
<include refid="selectProMobileAttendanceDataVo"/> <include refid="selectProMobileAttendanceDataVo"/>
where id = #{id} where pma.id = #{id}
</select> </select>
<insert id="insertProMobileAttendanceData" parameterType="ProMobileAttendanceData" useGeneratedKeys="true" keyProperty="id"> <insert id="insertProMobileAttendanceData" parameterType="ProMobileAttendanceData" useGeneratedKeys="true" keyProperty="id">

View File

@ -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; private Long projectId;
@Excel(name = "项目名称") @Excel(name = "项目名称")
private String projectName; private String projectName;

View File

@ -6,6 +6,7 @@ import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONArray; import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject; import com.alibaba.fastjson2.JSONObject;
import com.yanzhu.common.core.constant.SecurityConstants; 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.domain.R;
import com.yanzhu.common.core.enums.*; import com.yanzhu.common.core.enums.*;
import com.yanzhu.common.core.text.Convert; 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.common.security.utils.SecurityUtils;
import com.yanzhu.job.domain.*; import com.yanzhu.job.domain.*;
import com.yanzhu.job.service.*; 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.RemoteFileService;
import com.yanzhu.system.api.RemoteUserService; import com.yanzhu.system.api.RemoteUserService;
import com.yanzhu.system.api.domain.SysFile; import com.yanzhu.system.api.domain.SysFile;
@ -70,6 +73,9 @@ public class AttendanceJgwTask {
@Autowired @Autowired
private IQuartzProAttendanceDataService quartzProAttendanceDataService; private IQuartzProAttendanceDataService quartzProAttendanceDataService;
@Autowired
private ProMobileAttendanceDataMapper proMobileAttendanceDataMapper;
private final String code = "jgw"; private final String code = "jgw";
private static final String JGW_HOST = "http://api.gongyoumishu.com:80/gomeetapi/"; private static final String JGW_HOST = "http://api.gongyoumishu.com:80/gomeetapi/";
@ -1017,6 +1023,12 @@ public class AttendanceJgwTask {
quartzProAttendanceDataQuery.setSubDeptId(quartzProSubdeptsUsers.getSubDeptId()); quartzProAttendanceDataQuery.setSubDeptId(quartzProSubdeptsUsers.getSubDeptId());
quartzProAttendanceDataQuery.setUserId(quartzProSubdeptsUsers.getUserId()); quartzProAttendanceDataQuery.setUserId(quartzProSubdeptsUsers.getUserId());
quartzProAttendanceDataQuery.setSearchValue(json.getString("signDate")); quartzProAttendanceDataQuery.setSearchValue(json.getString("signDate"));
ProMobileAttendanceData mobileAttendanceData = new ProMobileAttendanceData();
mobileAttendanceData.setProjectId(quartzProAttendanceDataQuery.getProjectId());
mobileAttendanceData.setUserId(quartzProAttendanceDataQuery.getUserId());
mobileAttendanceData.setCfgId(it.getId());
List<QuartzProAttendanceData> attendanceDataList = quartzProAttendanceDataService.selectProAttendanceDataList(quartzProAttendanceDataQuery); List<QuartzProAttendanceData> attendanceDataList = quartzProAttendanceDataService.selectProAttendanceDataList(quartzProAttendanceDataQuery);
if(attendanceDataList!=null && attendanceDataList.size()>0){ if(attendanceDataList!=null && attendanceDataList.size()>0){
QuartzProAttendanceData quartzProAttendanceData = attendanceDataList.get(0); QuartzProAttendanceData quartzProAttendanceData = attendanceDataList.get(0);
@ -1026,22 +1038,34 @@ public class AttendanceJgwTask {
quartzProAttendanceData.setInTime(DateUtils.parseDate(json.getString("checkinTime"))); quartzProAttendanceData.setInTime(DateUtils.parseDate(json.getString("checkinTime")));
String checkPhoto = getPhoto(appId, token, it.getProjectPackage(), datePath, json.getString("signimg")); String checkPhoto = getPhoto(appId, token, it.getProjectPackage(), datePath, json.getString("signimg"));
quartzProAttendanceData.setInPhoto(checkPhoto); quartzProAttendanceData.setInPhoto(checkPhoto);
mobileAttendanceData.setInOut("in");
mobileAttendanceData.setAttImg(checkPhoto);
mobileAttendanceData.setAttDate(quartzProAttendanceData.getInTime());
} }
}else if(machineType.equals("3")){ }else if(machineType.equals("3")){
//签出 //签出
quartzProAttendanceData.setOutTime(DateUtils.parseDate(json.getString("checkinTime"))); quartzProAttendanceData.setOutTime(DateUtils.parseDate(json.getString("checkinTime")));
String checkPhoto = getPhoto(appId, token, it.getProjectPackage(), datePath, json.getString("signimg")); String checkPhoto = getPhoto(appId, token, it.getProjectPackage(), datePath, json.getString("signimg"));
quartzProAttendanceData.setOutPhoto(checkPhoto); quartzProAttendanceData.setOutPhoto(checkPhoto);
mobileAttendanceData.setInOut("in");
mobileAttendanceData.setAttImg(checkPhoto);
mobileAttendanceData.setAttDate(quartzProAttendanceData.getOutTime());
}else{ }else{
//默认 //默认
if(quartzProAttendanceData.getInData()==null){ if(quartzProAttendanceData.getInData()==null){
quartzProAttendanceData.setInTime(DateUtils.parseDate(json.getString("checkinTime"))); quartzProAttendanceData.setInTime(DateUtils.parseDate(json.getString("checkinTime")));
String checkPhoto = getPhoto(appId, token, it.getProjectPackage(), datePath, json.getString("signimg")); String checkPhoto = getPhoto(appId, token, it.getProjectPackage(), datePath, json.getString("signimg"));
quartzProAttendanceData.setInPhoto(checkPhoto); quartzProAttendanceData.setInPhoto(checkPhoto);
mobileAttendanceData.setInOut("in");
mobileAttendanceData.setAttImg(checkPhoto);
mobileAttendanceData.setAttDate(quartzProAttendanceData.getInTime());
}else{ }else{
quartzProAttendanceData.setOutTime(DateUtils.parseDate(json.getString("checkinTime"))); quartzProAttendanceData.setOutTime(DateUtils.parseDate(json.getString("checkinTime")));
String checkPhoto = getPhoto(appId, token, it.getProjectPackage(), datePath, json.getString("signimg")); String checkPhoto = getPhoto(appId, token, it.getProjectPackage(), datePath, json.getString("signimg"));
quartzProAttendanceData.setOutPhoto(checkPhoto); quartzProAttendanceData.setOutPhoto(checkPhoto);
mobileAttendanceData.setInOut("out");
mobileAttendanceData.setAttImg(checkPhoto);
mobileAttendanceData.setAttDate(quartzProAttendanceData.getOutTime());
} }
} }
quartzProAttendanceData.setUpdateBy("JGW-TASK"); quartzProAttendanceData.setUpdateBy("JGW-TASK");
@ -1067,16 +1091,25 @@ public class AttendanceJgwTask {
quartzProAttendanceData.setInTime(checkinTime); quartzProAttendanceData.setInTime(checkinTime);
String checkPhoto = getPhoto(appId, token, it.getProjectPackage(), datePath, json.getString("signimg")); String checkPhoto = getPhoto(appId, token, it.getProjectPackage(), datePath, json.getString("signimg"));
quartzProAttendanceData.setInPhoto(checkPhoto); quartzProAttendanceData.setInPhoto(checkPhoto);
mobileAttendanceData.setInOut("in");
mobileAttendanceData.setAttImg(checkPhoto);
mobileAttendanceData.setAttDate(quartzProAttendanceData.getInTime());
}else if(machineType.equals("3")){ }else if(machineType.equals("3")){
//签出 //签出
quartzProAttendanceData.setOutTime(checkinTime); quartzProAttendanceData.setOutTime(checkinTime);
String checkPhoto = getPhoto(appId, token, it.getProjectPackage(), datePath, json.getString("signimg")); String checkPhoto = getPhoto(appId, token, it.getProjectPackage(), datePath, json.getString("signimg"));
quartzProAttendanceData.setOutPhoto(checkPhoto); quartzProAttendanceData.setOutPhoto(checkPhoto);
mobileAttendanceData.setInOut("out");
mobileAttendanceData.setAttImg(checkPhoto);
mobileAttendanceData.setAttDate(quartzProAttendanceData.getOutTime());
}else{ }else{
//默认 //默认
quartzProAttendanceData.setInTime(checkinTime); quartzProAttendanceData.setInTime(checkinTime);
String checkPhoto = getPhoto(appId, token, it.getProjectPackage(), datePath, json.getString("signimg")); String checkPhoto = getPhoto(appId, token, it.getProjectPackage(), datePath, json.getString("signimg"));
quartzProAttendanceData.setInPhoto(checkPhoto); quartzProAttendanceData.setInPhoto(checkPhoto);
mobileAttendanceData.setInOut("in");
mobileAttendanceData.setAttImg(checkPhoto);
mobileAttendanceData.setAttDate(quartzProAttendanceData.getInTime());
} }
quartzProAttendanceData.setDeviceNo(json.getString("deviceSerialNo")); quartzProAttendanceData.setDeviceNo(json.getString("deviceSerialNo"));
quartzProAttendanceData.setCreateBy("JGW-TASK"); quartzProAttendanceData.setCreateBy("JGW-TASK");
@ -1084,6 +1117,12 @@ public class AttendanceJgwTask {
quartzProAttendanceData.setSource(quartzProSubdeptsUsers.getSource()); quartzProAttendanceData.setSource(quartzProSubdeptsUsers.getSource());
quartzProAttendanceDataService.insertProAttendanceData(quartzProAttendanceData); quartzProAttendanceDataService.insertProAttendanceData(quartzProAttendanceData);
} }
if(StringUtils.isNotEmpty(mobileAttendanceData.getAttImg())){
mobileAttendanceData.setCreateTime(new Date());
mobileAttendanceData.setCreateBy(SecurityContextHolder.getUserName());
proMobileAttendanceDataMapper.insertProMobileAttendanceData(mobileAttendanceData);
}
} }
} }
doSyncAttendanceData(jo, endId, it); doSyncAttendanceData(jo, endId, it);

View File

@ -5,6 +5,7 @@ import cn.hutool.core.util.NumberUtil;
import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONArray; import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject; import com.alibaba.fastjson2.JSONObject;
import com.yanzhu.common.core.context.SecurityContextHolder;
import com.yanzhu.common.core.enums.*; import com.yanzhu.common.core.enums.*;
import com.yanzhu.common.core.text.Convert; import com.yanzhu.common.core.text.Convert;
import com.yanzhu.common.core.utils.DateUtils; 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.common.redis.service.RedisService;
import com.yanzhu.job.domain.*; import com.yanzhu.job.domain.*;
import com.yanzhu.job.service.*; 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.RemoteFileService;
import com.yanzhu.system.api.RemoteUserService; import com.yanzhu.system.api.RemoteUserService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -58,6 +61,8 @@ public class AttendanceSzjTask {
@Autowired @Autowired
private IQuartzProjectAttendanceDataService attendanceDataService; private IQuartzProjectAttendanceDataService attendanceDataService;
@Autowired
private ProMobileAttendanceDataMapper proMobileAttendanceDataMapper;
private final String code = "szj"; private final String code = "szj";
private static final String SZJ_HOST = "https://sc.uni-ubi.com/sc/api/"; private static final String SZJ_HOST = "https://sc.uni-ubi.com/sc/api/";
@ -139,9 +144,11 @@ public class AttendanceSzjTask {
QuartzProjectAttendanceData attendance = new QuartzProjectAttendanceData(); QuartzProjectAttendanceData attendance = new QuartzProjectAttendanceData();
attendance.setServerid(jo.getString("id")); attendance.setServerid(jo.getString("id"));
if(1==jo.getInteger("doorType")){ if(1==jo.getInteger("doorType")){
attendance.setInOut("in");
attendance.setAttendanceTime(jo.getString("showTime")); attendance.setAttendanceTime(jo.getString("showTime"));
}else{ }else{
attendance.setAttendanceOutTime(jo.getString("showTime")); attendance.setAttendanceOutTime(jo.getString("showTime"));
attendance.setInOut("out");
} }
attendance.setIdentification(jo.getString("idCardNo")); attendance.setIdentification(jo.getString("idCardNo"));
attendance.setWorkerName(jo.getString("personName")); attendance.setWorkerName(jo.getString("personName"));
@ -625,6 +632,25 @@ public class AttendanceSzjTask {
att.setId(attList.get(0).getId()); att.setId(attList.get(0).getId());
attendanceDataService.updateSurProjectAttendanceData(att); 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){ if(atts.size()==100){
doSyncAttendance(token,cfg,offset,startTime,endTime); doSyncAttendance(token,cfg,offset,startTime,endTime);

View File

@ -19,10 +19,7 @@ import com.yanzhu.common.redis.service.RedisService;
import com.yanzhu.common.security.service.TokenService; import com.yanzhu.common.security.service.TokenService;
import com.yanzhu.common.security.utils.SecurityUtils; import com.yanzhu.common.security.utils.SecurityUtils;
import com.yanzhu.manage.api.vo.*; import com.yanzhu.manage.api.vo.*;
import com.yanzhu.manage.domain.SurProjectAttendanceData; import com.yanzhu.manage.domain.*;
import com.yanzhu.manage.domain.SurProjectAttendanceGroup;
import com.yanzhu.manage.domain.SurProjectAttendanceUser;
import com.yanzhu.manage.domain.SysApplyConfig;
import com.yanzhu.manage.enums.HttpStatusEnum; import com.yanzhu.manage.enums.HttpStatusEnum;
import com.yanzhu.manage.service.ISurProjectAttendanceDataService; import com.yanzhu.manage.service.ISurProjectAttendanceDataService;
import com.yanzhu.manage.service.ISurProjectAttendanceGroupService; import com.yanzhu.manage.service.ISurProjectAttendanceGroupService;
@ -306,7 +303,11 @@ public class LabourApiController extends BaseController {
findData.setAppId(sysApplyConfig.getAppId()); findData.setAppId(sysApplyConfig.getAppId());
findData.setWorkerId(req.getWorkerId()); findData.setWorkerId(req.getWorkerId());
findData.setAttendanceTime(req.getAttendanceTime()); findData.setAttendanceTime(req.getAttendanceTime());
//TODO 保存考勤日志未完成(第三方)
SurProjectAttendanceData surProjectAttendanceData = surProjectAttendanceDataService.findCurrentAttendanceData(findData); SurProjectAttendanceData surProjectAttendanceData = surProjectAttendanceDataService.findCurrentAttendanceData(findData);
ProMobileAttendanceData proMobileAttendanceData = new ProMobileAttendanceData();
proMobileAttendanceData.setCfgId(sysApplyConfig.getCfgId());
if (surProjectAttendanceData != null) { if (surProjectAttendanceData != null) {
//这里不能修改出勤时间 //这里不能修改出勤时间
if (Objects.equals("L", req.getAttendanceType())) { if (Objects.equals("L", req.getAttendanceType())) {

View File

@ -6,11 +6,9 @@ import com.yanzhu.common.core.utils.StringUtils;
import com.yanzhu.common.core.web.domain.AjaxResult; import com.yanzhu.common.core.web.domain.AjaxResult;
import com.yanzhu.manage.domain.AttendanceUbiData; import com.yanzhu.manage.domain.AttendanceUbiData;
import com.yanzhu.manage.domain.AttendanceUbiDevice; import com.yanzhu.manage.domain.AttendanceUbiDevice;
import com.yanzhu.manage.domain.ProMobileAttendanceData;
import com.yanzhu.manage.domain.ProProjectInfoSubdeptsUsers; import com.yanzhu.manage.domain.ProProjectInfoSubdeptsUsers;
import com.yanzhu.manage.service.IAttendanceUbiDataService; import com.yanzhu.manage.service.*;
import com.yanzhu.manage.service.IAttendanceUbiDeviceService;
import com.yanzhu.manage.service.IProProjectInfoDeptsService;
import com.yanzhu.manage.service.IProProjectInfoSubdeptsUsersService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
@ -35,6 +33,9 @@ public class UniCallBackController {
@Autowired @Autowired
private IAttendanceUbiDeviceService attendanceUbiDeviceService; private IAttendanceUbiDeviceService attendanceUbiDeviceService;
@Autowired
private IProMobileAttendanceDataService proMobileAttendanceDataService;
/** /**
* *
* @return * @return
@ -122,6 +123,7 @@ public class UniCallBackController {
if(device==null){ if(device==null){
return AjaxResult.error("没有查询到设备No"); return AjaxResult.error("没有查询到设备No");
} }
ProMobileAttendanceData attendanceData=new ProMobileAttendanceData();
if(list.size()==0){ if(list.size()==0){
//增加操作 //增加操作
ProProjectInfoSubdeptsUsers userWhere=new ProProjectInfoSubdeptsUsers(); ProProjectInfoSubdeptsUsers userWhere=new ProProjectInfoSubdeptsUsers();
@ -145,14 +147,22 @@ public class UniCallBackController {
addData.setSubDeptGroupName(proUser.getSubDeptGroupName()); addData.setSubDeptGroupName(proUser.getSubDeptGroupName());
addData.setCraftPost(proUser.getCraftPost()); addData.setCraftPost(proUser.getCraftPost());
addData.setCraftType(proUser.getCraftType()); addData.setCraftType(proUser.getCraftType());
attendanceData.setUserId(proUser.getUserId());
attendanceData.setProjectId(projectId);
attendanceData.setAttDate(showTime);
attendanceData.setAttImg(filePath);
if(device.getDirection()==0) { if(device.getDirection()==0) {
addData.setInTime(showTime); addData.setInTime(showTime);
addData.setInData(data); addData.setInData(data);
addData.setInPhoto(filePath); addData.setInPhoto(filePath);
attendanceData.setInOut("in");
proMobileAttendanceDataService.addAttendanceData(attendanceData);
}else{ }else{
addData.setOutPhoto(filePath); addData.setOutPhoto(filePath);
addData.setOutData(data); addData.setOutData(data);
addData.setOutTime(showTime); addData.setOutTime(showTime);
attendanceData.setInOut("out");
proMobileAttendanceDataService.addAttendanceData(attendanceData);
} }
addData.setDeviceNo(deviceNo); addData.setDeviceNo(deviceNo);
attendanceUbiDataService.insertAttendanceUbiData(addData); attendanceUbiDataService.insertAttendanceUbiData(addData);
@ -166,12 +176,18 @@ public class UniCallBackController {
} }
Date dt1=upData.getInTime(); Date dt1=upData.getInTime();
Date dt2=upData.getOutTime(); Date dt2=upData.getOutTime();
attendanceData.setUserId(upData.getUserId());
attendanceData.setProjectId(projectId);
attendanceData.setAttDate(showTime);
attendanceData.setAttImg(filePath);
if(device.getDirection()==0){ if(device.getDirection()==0){
//入 //入
if(dt1==null || showTime.getTime()<dt1.getTime()){ if(dt1==null || showTime.getTime()<dt1.getTime()){
upData.setInPhoto(filePath); upData.setInPhoto(filePath);
upData.setInData(data); upData.setInData(data);
upData.setInTime(showTime); upData.setInTime(showTime);
attendanceData.setInOut("in");
proMobileAttendanceDataService.addAttendanceData(attendanceData);
}else{ }else{
return AjaxResult.success(); return AjaxResult.success();
} }
@ -181,6 +197,8 @@ public class UniCallBackController {
upData.setOutData(data); upData.setOutData(data);
upData.setOutPhoto(filePath); upData.setOutPhoto(filePath);
upData.setOutTime(showTime); upData.setOutTime(showTime);
attendanceData.setInOut("out");
proMobileAttendanceDataService.addAttendanceData(attendanceData);
}else { }else {
return AjaxResult.success(); return AjaxResult.success();
} }

View File

@ -58,4 +58,9 @@ public interface IProMobileAttendanceDataService
* @return * @return
*/ */
public int deleteProMobileAttendanceDataById(Long id); public int deleteProMobileAttendanceDataById(Long id);
/**
*
*/
public int addAttendanceData(ProMobileAttendanceData attendanceData);
} }

View File

@ -1,7 +1,9 @@
package com.yanzhu.manage.service; package com.yanzhu.manage.service;
import com.yanzhu.device.domain.ProjectPitMonitCfg; import com.yanzhu.device.domain.ProjectPitMonitCfg;
import com.yanzhu.manage.domain.ProMobileAttendanceData;
import java.util.Date;
import java.util.List; import java.util.List;
/** /**
@ -74,4 +76,6 @@ public interface IProjectPitMonitCfgService
* @return * @return
*/ */
public int deleteSurProjectPitMonitCfgById(Long id); public int deleteSurProjectPitMonitCfgById(Long id);
} }

View File

@ -97,4 +97,13 @@ public class ProMobileAttendanceDataServiceImpl implements IProMobileAttendanceD
{ {
return proMobileAttendanceDataMapper.deleteProMobileAttendanceDataById(id); return proMobileAttendanceDataMapper.deleteProMobileAttendanceDataById(id);
} }
@Override
public int addAttendanceData(ProMobileAttendanceData attendanceData) {
attendanceData.setIsDel(0L);
attendanceData.setRemark("");
attendanceData.setCfgId(0L);
attendanceData.setState(0L);
return insertProMobileAttendanceData(attendanceData);
}
} }

View File

@ -102,7 +102,7 @@ public class ProUserInoutRecordServiceImpl implements IProUserInoutRecordService
@Override @Override
public int addRecord(ProProjectInfoSubdeptsUsers user) { public int addRecord(ProProjectInfoSubdeptsUsers user) {
ProUserInoutRecord record = new ProUserInoutRecord(); ProUserInoutRecord record = new ProUserInoutRecord();
record.setUserId(user.getId()); record.setUserId(user.getUserId());
record.setUseStatus(user.getUseStatus()); record.setUseStatus(user.getUseStatus());
record.setUserName(user.getUserName()); record.setUserName(user.getUserName());
record.setUserPhone(user.getUserPhone()); record.setUserPhone(user.getUserPhone());

View File

@ -4,10 +4,12 @@ import com.yanzhu.common.core.utils.DateUtils;
import com.yanzhu.common.security.utils.SecurityUtils; import com.yanzhu.common.security.utils.SecurityUtils;
import com.yanzhu.device.domain.ProjectPitMonitCfg; import com.yanzhu.device.domain.ProjectPitMonitCfg;
import com.yanzhu.device.mapper.ProjectPitMonitCfgMapper; import com.yanzhu.device.mapper.ProjectPitMonitCfgMapper;
import com.yanzhu.manage.domain.ProMobileAttendanceData;
import com.yanzhu.manage.service.IProjectPitMonitCfgService; import com.yanzhu.manage.service.IProjectPitMonitCfgService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.List; import java.util.List;
/** /**
@ -112,4 +114,5 @@ public class ProjectPitMonitCfgServiceImpl implements IProjectPitMonitCfgService
{ {
return projectPitMonitCfgMapper.deleteSurProjectPitMonitCfgById(id); return projectPitMonitCfgMapper.deleteSurProjectPitMonitCfgById(id);
} }
} }

View File

@ -1,77 +1,15 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px"> <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="用户ID" prop="userId"> <el-form-item label="用户名" prop="userName">
<el-input <el-input v-model="queryParams.userName" placeholder="请输入用户名" clearable @keyup.enter="handleQuery" />
v-model="queryParams.userId"
placeholder="请输入用户ID"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item> </el-form-item>
<el-form-item label="项目ID" prop="projectId"> <el-form-item label="用户手机" prop="userPhone">
<el-input <el-input v-model="queryParams.userPhone" placeholder="请输入用户手机" clearable @keyup.enter="handleQuery" />
v-model="queryParams.projectId"
placeholder="请输入项目ID"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item> </el-form-item>
<el-form-item label="配置ID" prop="cfgId"> <el-form-item label="考勤日期" style="width: 308px">
<el-input <el-date-picker v-model="dateRange" value-format="YYYY-MM-DD" type="daterange" range-separator="-"
v-model="queryParams.cfgId" start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>
placeholder="请输入配置ID"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="进还是出" prop="inOut">
<el-input
v-model="queryParams.inOut"
placeholder="请输入进还是出"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="经度" prop="longitude">
<el-input
v-model="queryParams.longitude"
placeholder="请输入经度"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="纬度" prop="latitude">
<el-input
v-model="queryParams.latitude"
placeholder="请输入纬度"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="考勤时间" prop="attDate">
<el-date-picker clearable
v-model="queryParams.attDate"
type="date"
value-format="YYYY-MM-DD"
placeholder="请选择考勤时间">
</el-date-picker>
</el-form-item>
<el-form-item label="${comment}" prop="isDel">
<el-input
v-model="queryParams.isDel"
placeholder="请输入${comment}"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="${comment}" prop="state">
<el-input
v-model="queryParams.state"
placeholder="请输入${comment}"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery"></el-button> <el-button type="primary" icon="Search" @click="handleQuery"></el-button>
@ -79,81 +17,54 @@
</el-form-item> </el-form-item>
</el-form> </el-form>
<el-row :gutter="10" class="mb8"> <!-- <el-row :gutter="10" class="mb8">
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button type="primary" plain icon="Plus" @click="handleAdd"
type="primary" v-hasPermi="['manage:mobileAttendanceData:add']">新增</el-button>
plain
icon="Plus"
@click="handleAdd"
v-hasPermi="['manage:mobileAttendanceData:add']"
>新增</el-button>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate"
type="success" v-hasPermi="['manage:mobileAttendanceData:edit']">修改</el-button>
plain
icon="Edit"
:disabled="single"
@click="handleUpdate"
v-hasPermi="['manage:mobileAttendanceData:edit']"
>修改</el-button>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete"
type="danger" v-hasPermi="['manage:mobileAttendanceData:remove']">删除</el-button>
plain
icon="Delete"
:disabled="multiple"
@click="handleDelete"
v-hasPermi="['manage:mobileAttendanceData:remove']"
>删除</el-button>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button type="warning" plain icon="Download" @click="handleExport"
type="warning" v-hasPermi="['manage:mobileAttendanceData:export']">导出</el-button>
plain
icon="Download"
@click="handleExport"
v-hasPermi="['manage:mobileAttendanceData:export']"
>导出</el-button>
</el-col> </el-col>
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar> <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
</el-row> </el-row> -->
<el-table v-loading="loading" :data="mobileAttendanceDataList" @selection-change="handleSelectionChange"> <el-table v-loading="loading" :data="mobileAttendanceDataList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="${comment}" align="center" prop="id" /> <el-table-column label="用户名" align="center" prop="userName" />
<el-table-column label="用户ID" align="center" prop="userId" /> <el-table-column label="用户手机" align="center" prop="userPhone" />
<el-table-column label="项目ID" align="center" prop="projectId" /> <el-table-column label="所属单位" align="center" prop="subDeptName" />
<el-table-column label="配置ID" align="center" prop="cfgId" /> <el-table-column label="班组" align="center" prop="subDeptGroupName" />
<el-table-column label="进还是出" align="center" prop="inOut" /> <el-table-column label="进出标识" align="center" prop="inOut">
<el-table-column label="经度" align="center" prop="longitude" /> <template #default="scope">
<el-table-column label="纬度" align="center" prop="latitude" /> <el-tag v-if="scope.row.inOut === 'in'" type="success"></el-tag>
<el-tag v-else type="danger"></el-tag>
</template>
</el-table-column>
<el-table-column label="考勤时间" align="center" prop="attDate" width="180"> <el-table-column label="考勤时间" align="center" prop="attDate" width="180">
<template #default="scope"> <template #default="scope">
<span>{{ parseTime(scope.row.attDate, '{y}-{m}-{d}') }}</span> <span>{{ parseTime(scope.row.attDate, '{y}-{m}-{d}') }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="考勤照片" align="center" prop="attImg" /> <el-table-column label="考勤照片" align="center" prop="attImg">
<el-table-column label="${comment}" align="center" prop="isDel" /> <template #default="scope">
<el-table-column label="${comment}" align="center" prop="remark" /> <el-image v-if="scope.row.attImg" :src="scope.row.attImg" style="height:60px;" :preview-teleported="true" :preview-src-list="[scope.row.attImg]"></el-image>
<el-table-column label="${comment}" align="center" prop="state" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template #default="scope">
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['manage:mobileAttendanceData:edit']"></el-button>
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['manage:mobileAttendanceData:remove']"></el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<pagination <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize"
v-show="total>0" @pagination="getList" />
:total="total"
v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize"
@pagination="getList"
/>
<!-- 添加或修改人员考勤记录对话框 --> <!-- 添加或修改人员考勤记录对话框 -->
<el-dialog :title="title" v-model="open" width="500px" append-to-body> <el-dialog :title="title" v-model="open" width="500px" append-to-body>
@ -177,11 +88,7 @@
<el-input v-model="form.latitude" placeholder="请输入纬度" /> <el-input v-model="form.latitude" placeholder="请输入纬度" />
</el-form-item> </el-form-item>
<el-form-item label="考勤时间" prop="attDate"> <el-form-item label="考勤时间" prop="attDate">
<el-date-picker clearable <el-date-picker clearable v-model="form.attDate" type="date" value-format="YYYY-MM-DD" placeholder="请选择考勤时间">
v-model="form.attDate"
type="date"
value-format="YYYY-MM-DD"
placeholder="请选择考勤时间">
</el-date-picker> </el-date-picker>
</el-form-item> </el-form-item>
<el-form-item label="考勤照片" prop="attImg"> <el-form-item label="考勤照片" prop="attImg">
@ -221,7 +128,7 @@ const single = ref(true);
const multiple = ref(true); const multiple = ref(true);
const total = ref(0); const total = ref(0);
const title = ref(""); const title = ref("");
const dateRange = ref([]);
const data = reactive({ const data = reactive({
form: {}, form: {},
queryParams: { queryParams: {
@ -247,7 +154,14 @@ const { queryParams, form, rules } = toRefs(data);
/** 查询人员考勤记录列表 */ /** 查询人员考勤记录列表 */
function getList() { function getList() {
loading.value = true; loading.value = true;
listMobileAttendanceData(queryParams.value).then(response => { let postData={
...queryParams.value
};
if(dateRange.value && dateRange.value.length>0){
postData.startDate=dateRange.value[0];
postData.endDate=dateRange.value[1];
}
listMobileAttendanceData(postData).then(response => {
mobileAttendanceDataList.value = response.rows; mobileAttendanceDataList.value = response.rows;
total.value = response.total; total.value = response.total;
loading.value = false; loading.value = false;
@ -344,12 +258,12 @@ function submitForm() {
/** 删除按钮操作 */ /** 删除按钮操作 */
function handleDelete(row) { function handleDelete(row) {
const _ids = row.id || ids.value; const _ids = row.id || ids.value;
proxy.$modal.confirm('是否确认删除人员考勤记录编号为"' + _ids + '"的数据项?').then(function() { proxy.$modal.confirm('是否确认删除人员考勤记录编号为"' + _ids + '"的数据项?').then(function () {
return delMobileAttendanceData(_ids); return delMobileAttendanceData(_ids);
}).then(() => { }).then(() => {
getList(); getList();
proxy.$modal.msgSuccess("删除成功"); proxy.$modal.msgSuccess("删除成功");
}).catch(() => {}); }).catch(() => { });
} }
/** 导出按钮操作 */ /** 导出按钮操作 */

View File

@ -216,11 +216,10 @@ const { queryParams, form, rules } = toRefs(data);
/** 查询员工出入场记录列表 */ /** 查询员工出入场记录列表 */
function getList() { function getList() {
loading.value = true; loading.value = true;
console.log(dateRange)
let postData={ let postData={
...queryParams.value ...queryParams.value
}; };
if(dateRange.value.length>0){ if(dateRange.value && dateRange.value.length>0){
postData.startDate=dateRange.value[0]; postData.startDate=dateRange.value[0];
postData.endDate=dateRange.value[1]; postData.endDate=dateRange.value[1];
} }