添加人员考勤记录获取

This commit is contained in:
haozq 2025-12-30 17:57:14 +08:00
parent 17618cc0ad
commit b9ee5aef43
8 changed files with 195 additions and 48 deletions

View File

@ -50,7 +50,7 @@ public class TbProConfigServiceImpl implements TbProConfigService {
} }
int num=mapper.getProConfig(params); int num=mapper.getProConfig(params);
if(num>0){ if(num>0){
return AjaxResult.error("当前分包商配置已存在,请去修改"); return AjaxResult.error("当前分公司配置已存在,请去修改");
} }
List<String> proTypeList= Arrays.asList(proType.split(",")); List<String> proTypeList= Arrays.asList(proType.split(","));
List<String> proAreaList= Arrays.asList(proArea.split(",")); List<String> proAreaList= Arrays.asList(proArea.split(","));
@ -84,7 +84,7 @@ public class TbProConfigServiceImpl implements TbProConfigService {
} }
int num=mapper.getProConfig(params); int num=mapper.getProConfig(params);
if(num>0){ if(num>0){
return AjaxResult.error("当前分包商配置已存在,请去修改"); return AjaxResult.error("当前分公司配置已存在,请去修改");
} }
List<String> proTypeList= Arrays.asList(proType.split(",")); List<String> proTypeList= Arrays.asList(proType.split(","));
List<String> proAreaList= Arrays.asList(proArea.split(",")); List<String> proAreaList= Arrays.asList(proArea.split(","));

View File

@ -68,6 +68,9 @@ public class ReceiveCmd {
case "CLEAR_LOG_DATA": case "CLEAR_LOG_DATA":
service.clearLogData(task, req, resp); service.clearLogData(task, req, resp);
break; break;
case "RESET_LOG_MARK":
service.resetLogMark(task, req, resp);
break;
case "GET_DEVICE_INFO": case "GET_DEVICE_INFO":
service.getDeviceInfo(task, req, resp); service.getDeviceInfo(task, req, resp);
break; break;

View File

@ -37,6 +37,7 @@ public class ResultHandle {
String isok = req.getHeader("cmd_return_code"); String isok = req.getHeader("cmd_return_code");
try{ try{
KqCmdTaskVo taskVo=service.getTaskVoById(asTransId); KqCmdTaskVo taskVo=service.getTaskVoById(asTransId);
taskVo.setDeviceName(deviceVo.getDeviceName());
//存在任务 //存在任务
if(taskVo!=null){ if(taskVo!=null){
//任务失败了 //任务失败了
@ -76,7 +77,7 @@ public class ResultHandle {
break; break;
case "GET_LOG_DATA": case "GET_LOG_DATA":
// 获取记录数据 // 获取记录数据
service.insertLogData(taskVo, req, resp); isClose= service.insertLogData(taskVo, req, resp);
break; break;
case "GET_DEVICE_INFO": case "GET_DEVICE_INFO":
// 获取设备基本信息 // 获取设备基本信息
@ -95,8 +96,18 @@ public class ResultHandle {
// 删除人员的反馈 // 删除人员的反馈
service.insertDeleteUser(taskVo, req, resp); service.insertDeleteUser(taskVo, req, resp);
break; break;
case "RESET_LOG_MARK":
resp.addHeader(Constant.DEVICE_HEADER_RESPONSE_CODE, Constant.OK);
resp.addHeader(Constant.DEVICE_HEADER_TRANS_ID, taskVo.getId());
resp.getWriter().write("");
// 获取设备基本信息
// deviceManage.insertDeviceInfo(task, req, resp);
break;
default: default:
taskVo.setMsg("未知命令"); taskVo.setMsg("未知命令");
resp.addHeader(Constant.DEVICE_HEADER_RESPONSE_CODE, Constant.OK);
resp.addHeader(Constant.DEVICE_HEADER_TRANS_ID, taskVo.getId());
resp.getWriter().write("");
break; break;
} }
if(isClose){ if(isClose){

View File

@ -84,7 +84,7 @@ public class UserFaceHandle {
//验证用户是否入场 //验证用户是否入场
BmWorkerEinUserVo vo=service.getOnUserInfo(userId,proId); BmWorkerEinUserVo vo=service.getOnUserInfo(userId,proId);
if(vo==null){ if(vo==null){
vo=createAttendanceVo(deviceVo,userId,devCode,time,bast64); vo=createAttendanceVo(deviceVo,userId,devCode,time,bast64);
vo.setAttDay(attDay); vo.setAttDay(attDay);
vo.setAttMonth(month); vo.setAttMonth(month);
service.addWrcUser(vo); service.addWrcUser(vo);
@ -110,6 +110,50 @@ public class UserFaceHandle {
} }
/**
* 新增人员考勤信息-只添加考勤打卡
* @param userId
* @param
*/
public void addUserInfo(String userId,String devCode,String time,String bast64,String deviceName) {
try{
DeviceVo deviceVo=new DeviceVo();
deviceVo.setDevCode(devCode);
deviceVo.setDeviceName(deviceName);
DateTime datetime= DateUtil.parse(time, DatePattern.PURE_DATETIME_FORMAT);
String attDay= YMD_SDF.format(datetime);
String month=MM_SDF.format(datetime);
//考情机是否绑定工程
String proId=service.getDevPorId(devCode);
if(StringUtils.isNotEmpty(proId)){
//验证用户是否入场
BmWorkerEinUserVo vo=service.getOnUserInfo(userId,proId);
if(vo==null){
// vo=createAttendanceVo(deviceVo,userId,devCode,time,bast64);
// vo.setAttDay(attDay);
// vo.setAttMonth(month);
// service.addWrcUser(vo);
}else {
vo.setAttDay(attDay);
vo.setAttMonth(month);
vo.setAttPhoto(bast64);
vo.setAttTime(time);
vo.setDevCode(devCode);
vo.setDevName(deviceVo.getDeviceName());
service.addAttendInfo(vo);
//数据返回
}
}else{
// BmWorkerEinUserVo vo=createAttendanceVo(deviceVo,userId,devCode,time,bast64);
// service.addWrcUser(vo);
}
}catch (Exception e){
log.error(e.toString(),e);
}
}
private BmWorkerEinUserVo createAttendanceVo(DeviceVo deviceVo, String userId, String devCode, private BmWorkerEinUserVo createAttendanceVo(DeviceVo deviceVo, String userId, String devCode,
String time, String base64Photo) { String time, String base64Photo) {
BmWorkerEinUserVo vo = new BmWorkerEinUserVo(); BmWorkerEinUserVo vo = new BmWorkerEinUserVo();

View File

@ -30,7 +30,10 @@ public class CmdLogService {
if(body.length()>4000){ if(body.length()>4000){
body=body.substring(0,4000); body=body.substring(0,4000);
} }
mapper.insertCmdLogs(taskVo,body); if(!"default".equals(taskVo.getId())){
mapper.insertCmdLogs(taskVo,body);
}
}catch (Exception e){ }catch (Exception e){
log.error(e.toString(),e); log.error(e.toString(),e);
} }

View File

@ -7,6 +7,7 @@ import com.bonus.common.core.utils.StringUtils;
import com.bonus.common.core.urk.CommonUtils; import com.bonus.common.core.urk.CommonUtils;
import com.bonus.common.core.urk.Constant; import com.bonus.common.core.urk.Constant;
import com.bonus.system.api.model.UploadFileVo; import com.bonus.system.api.model.UploadFileVo;
import com.bonus.urk.handle.UserFaceHandle;
import com.bonus.urk.mapper.ResultMapper; import com.bonus.urk.mapper.ResultMapper;
import com.bonus.urk.minio.UrkMinioService; import com.bonus.urk.minio.UrkMinioService;
import com.bonus.urk.vo.*; import com.bonus.urk.vo.*;
@ -36,6 +37,9 @@ public class ResultService {
@Resource @Resource
private UrkMinioService fileService; private UrkMinioService fileService;
@Resource
private UserFaceHandle userFaceHandle;
/** /**
* 查询任务 记录 * 查询任务 记录
* @param asTransId * @param asTransId
@ -99,20 +103,47 @@ public class ResultService {
* @param req * @param req
* @param resp * @param resp
*/ */
public void insertLogData(KqCmdTaskVo taskVo, HttpServletRequest req, HttpServletResponse resp) { public boolean insertLogData(KqCmdTaskVo taskVo, HttpServletRequest req, HttpServletResponse resp) {
String packageId="0";
try { try {
// 解析request输入流 // 解析request输入流
String jsonStr = getRequestBody(req); String jsonStr = getRequestBody(req);
log.info("设备记录数据:{}", jsonStr); log.info("设备记录数据:{}", jsonStr);
if(StringUtils.isNotBlank(jsonStr)) {
resp.addHeader(Constant.DEVICE_HEADER_RESPONSE_CODE, Constant.OK); //数据处理
resp.addHeader(Constant.DEVICE_HEADER_TRANS_ID, taskVo.getId()); JSONObject json=JSON.parseObject(jsonStr);
resp.getWriter().write(""); List<DevUserVo> list=new ArrayList<>();
JSONArray logs=json.getJSONArray("logs");
packageId=json.getString("packageId");
if(logs!=null && !logs.isEmpty()) {
//获取数据
for (int i = 0; i < logs.size(); i++) {
String deviceCode=taskVo.getDeviceCode();
//打卡人
String userId=logs.getJSONObject(i).getString("userId");
//打卡时间
String time=logs.getJSONObject(i).getString("time");
String photo=logs.getJSONObject(i).getString("logPhoto");
//添加人员考勤打卡数据
userFaceHandle.addUserInfo(userId,deviceCode,time,photo,taskVo.getDeviceName());
}
}
}
//考勤数据查询
if("0".equals(packageId)){
resp.addHeader(Constant.DEVICE_HEADER_RESPONSE_CODE, Constant.OK);
resp.addHeader(Constant.DEVICE_HEADER_TRANS_ID, taskVo.getId());
resp.getWriter().write("");
return true;
}else{
resp.addHeader(Constant.DEVICE_HEADER_RESPONSE_CODE, Constant.OK);
resp.getWriter().write("");
}
} catch (Exception e) { } catch (Exception e) {
log.error(e.toString(),e); log.error(e.toString(),e);
} }
return false;
} }
public void insertDeviceInfo(KqCmdTaskVo taskVo, HttpServletRequest req, HttpServletResponse resp) { public void insertDeviceInfo(KqCmdTaskVo taskVo, HttpServletRequest req, HttpServletResponse resp) {
@ -174,7 +205,7 @@ public class ResultService {
String packageId="0"; String packageId="0";
// 解析request输入流 // 解析request输入流
String jsonStr = getRequestBody(req); String jsonStr = getRequestBody(req);
log.info("获取设备用户信息:{}", jsonStr); // log.info("获取设备用户信息:{}", jsonStr);
if(StringUtils.isNotBlank(jsonStr)) { if(StringUtils.isNotBlank(jsonStr)) {
//数据处理 //数据处理
JSONObject json=JSON.parseObject(jsonStr); JSONObject json=JSON.parseObject(jsonStr);
@ -234,6 +265,9 @@ public class ResultService {
try{ try{
List<String> userIds=mapper.getTaskUser(taskVo.getId()); List<String> userIds=mapper.getTaskUser(taskVo.getId());
mapper.delKqDevUser(userIds,taskVo.getDeviceCode()); mapper.delKqDevUser(userIds,taskVo.getDeviceCode());
resp.addHeader(Constant.DEVICE_HEADER_RESPONSE_CODE, Constant.OK);
resp.addHeader(Constant.DEVICE_HEADER_TRANS_ID, taskVo.getId());
resp.getWriter().write("");
} catch (Exception e) { } catch (Exception e) {
log.error(e.getMessage(), e); log.error(e.getMessage(), e);
} }
@ -253,6 +287,9 @@ public class ResultService {
//将人员数据同步到考勤人员里面去 //将人员数据同步到考勤人员里面去
List<String> userIds=mapper.getTaskUser(taskVo.getId()); List<String> userIds=mapper.getTaskUser(taskVo.getId());
mapper.insertKqDevUserList(userIds,taskVo.getDeviceCode()); mapper.insertKqDevUserList(userIds,taskVo.getDeviceCode());
resp.addHeader(Constant.DEVICE_HEADER_RESPONSE_CODE, Constant.OK);
resp.addHeader(Constant.DEVICE_HEADER_TRANS_ID, taskVo.getId());
resp.getWriter().write("");
}catch (Exception e){ }catch (Exception e){
log.error(e.toString(),e); log.error(e.toString(),e);
} }

View File

@ -4,6 +4,7 @@ import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DatePattern; import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.bonus.common.core.utils.DateUtils; import com.bonus.common.core.utils.DateUtils;
@ -34,6 +35,7 @@ import java.io.InputStream;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Calendar; import java.util.Calendar;
import java.util.Date;
import java.util.List; import java.util.List;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
@ -199,44 +201,49 @@ public class TaskService {
* @param resp * @param resp
*/ */
public void getLogList(DeviceTaskVo task, HttpServletRequest req, HttpServletResponse resp) { public void getLogList(DeviceTaskVo task, HttpServletRequest req, HttpServletResponse resp) {
String body = ""; try{
//请求参数 // 1. 定义日期格式 JSON 中的 startTime/endTime 格式保持一致关键
String cmdParam=task.getCmdParam(); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
if(StringHelper.isNullOrEmptyString(cmdParam)){ String body = "";
String msg = "获取记录数据请求用户发送数据为空,不能处理"; //请求参数
log.error(msg); String cmdParam=task.getCmdParam();
task.setTransStatus(TaskStatusEnum.ERROR.ordinal()); if(StringHelper.isNullOrEmptyString(cmdParam)){
task.setMsg(msg); String msg = "获取记录数据请求用户发送数据为空,不能处理";
mapper.updateById(task); log.error(msg);
return; task.setTransStatus(TaskStatusEnum.ERROR.ordinal());
} task.setMsg(msg);
//转成json mapper.updateById(task);
JSONObject json=JSONObject.parseObject(cmdParam); return;
String startTime=json.getString("startTime"); }
String endTime=json.getString("endTime"); //转成json
String clearMark=json.getString("clearMark"); JSONObject json=JSONObject.parseObject(cmdParam);
SimpleDateFormat sdf=new SimpleDateFormat("yyyyMMdd"); Date startDate = dateFormat.parse(json.getString("startTime"));
Date endDate = dateFormat.parse(json.getString("endTime"));
JSONObject jsonObject = new JSONObject(); String clearMark=json.getString("clearMark");
jsonObject.put("beginTime", sdf.format(startTime)); JSONObject jsonObject = new JSONObject();
jsonObject.put("endTime", sdf.format(endTime)); jsonObject.put("beginTime", sdf.format(startDate));
if(!StringHelper.isNullOrEmptyString(clearMark)){ jsonObject.put("endTime", sdf.format(endDate));
jsonObject.put("clearMark", clearMark); if(!StringHelper.isNullOrEmptyString(clearMark)){
} jsonObject.put("clearMark", clearMark);
body = jsonObject.toString(); }
try { body = jsonObject.toString();
// body try {
resp.addHeader(Constant.DEVICE_HEADER_RESPONSE_CODE, Constant.OK); // body
resp.setCharacterEncoding(Constant.CHART_SET); resp.addHeader(Constant.DEVICE_HEADER_RESPONSE_CODE, Constant.OK);
resp.setContentType("application/octet-stream"); resp.setCharacterEncoding(Constant.CHART_SET);
resp.addHeader(Constant.DEVICE_HEADER_TRANS_ID, task.getId()); resp.setContentType("application/octet-stream");
resp.addHeader("cmd_code", task.getCmdCode()); resp.addHeader(Constant.DEVICE_HEADER_TRANS_ID, task.getId());
resp.getWriter().write(body); resp.addHeader("cmd_code", task.getCmdCode());
} catch (Exception e) { resp.getWriter().write(body);
} catch (Exception e) {
e.printStackTrace();
}
service.logServerResponseLog(task, resp, body);
log.info("设备:{}, 获取记录数据指令下达", task.getDeviceCode());
}catch (Exception e){
e.printStackTrace(); e.printStackTrace();
} }
service.logServerResponseLog(task, resp, body);
log.info("设备:{}, 获取记录数据指令下达", task.getDeviceCode());
} }
/** /**
@ -259,6 +266,46 @@ public class TaskService {
service.logServerResponseLog(task, resp, body); service.logServerResponseLog(task, resp, body);
log.info("设备:{}, 删除所有记录指令下达", task.getDeviceCode()); log.info("设备:{}, 删除所有记录指令下达", task.getDeviceCode());
}
/**
* 重置实时打卡数据标志
* @param task
* @param req
* @param resp
*/
public void resetLogMark(DeviceTaskVo task, HttpServletRequest req, HttpServletResponse resp) {
String body = "";
try {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
//请求参数
String cmdParam=task.getCmdParam();
if(StringHelper.isNullOrEmptyString(cmdParam)){
String msg = "重置参数为空不能处理,不能处理";
log.error(msg);
task.setTransStatus(TaskStatusEnum.ERROR.ordinal());
task.setMsg(msg);
mapper.updateById(task);
return;
}
//转成json
JSONObject json= JSON.parseObject(cmdParam);
Date startDate = dateFormat.parse(json.getString("startTime"));
Date endDate = dateFormat.parse(json.getString("endTime"));
JSONObject jsonObject = new JSONObject();
jsonObject.put("beginTime", sdf.format(startDate));
jsonObject.put("endTime", sdf.format(endDate));
body = jsonObject.toString();
resp.addHeader(Constant.DEVICE_HEADER_RESPONSE_CODE, Constant.OK);
resp.setCharacterEncoding(Constant.CHART_SET);
resp.addHeader(Constant.DEVICE_HEADER_TRANS_ID, task.getId());
resp.addHeader("cmd_code", task.getCmdCode());
resp.getWriter().write(body);
} catch (Exception e) {
e.printStackTrace();
}
service.logServerResponseLog(task, resp, body);
log.info("设备:{}, 重置实时打卡数据标志", task.getDeviceCode());
} }
/** /**

View File

@ -9,6 +9,8 @@ import lombok.Data;
public class KqCmdTaskVo { public class KqCmdTaskVo {
private String id; private String id;
private String deviceName;
/** /**
* 指令编码 * 指令编码
*/ */