优化考勤服务

This commit is contained in:
haozq 2025-08-18 18:11:11 +08:00
parent aa1b4b5126
commit 0148c2f5a3
4 changed files with 0 additions and 624 deletions

View File

@ -1,99 +0,0 @@
package com.bonus.urk.controller;
import com.bonus.system.api.domain.SystemParamsVo;
import com.bonus.urk.service.SendUserService;
import io.swagger.annotations.Api;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author 黑子
*/
@Api(tags = "考勤机业务员指令接口-人员下发及删除")
@RestController
@RequestMapping("/sedTask")
@Slf4j
public class SendUserController {
@Autowired
private SendUserService service;
/**
* 人员下发 及人员修改时触发
* @param userId
* @param proId
* @param update
*/
@PostMapping("sendUserToDevice")
public void sendUserToDevice(int userId,int proId,String update) {
try {
service.sendUserToDevice(userId,proId, update);
}
catch (Exception e) {
log.error(e.toString(),e);
}
}
/**
* 新增考勤机 时触发
* @param deviceCode
*/
@PostMapping("getUserSendToDev")
public void sendUserToDevice(String deviceCode,int proId) {
try {
service.getUserSendToDev(deviceCode,proId);
}
catch (Exception e) {
log.error(e.toString(),e);
}
}
/**
* 删除当前考勤机的全部人员
* @param deviceCode
* @param proId
*/
@PostMapping("delDevByProId")
public void delDevByProId(String deviceCode,int proId) {
try {
service.delDevByProId(deviceCode,proId);
}
catch (Exception e) {
log.error(e.toString(),e);
}
}
/**
* 人员出场时触发
*/
@PostMapping("delUserByDevice")
public void delUserByDevice(int userId ,int proId ) {
try {
service.delUserByDevice(userId,proId);
}
catch (Exception e) {
log.error(e.toString(),e);
}
}
@PostMapping("delUserByDeviceList")
public void delUserByDeviceList(@RequestBody SystemParamsVo vo) {
try {
service.delUserByDeviceList(vo.getUserId(),vo.getProId());
}
catch (Exception e) {
log.error(e.toString(),e);
}
}
}

View File

@ -1,101 +0,0 @@
package com.bonus.urk.mapper;
import com.bonus.urk.vo.DeviceVo;
import com.bonus.urk.vo.KqCmdTaskVo;
import com.bonus.urk.vo.KqDevUserIdVo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* @author 黑子
*/
@Mapper
public interface SendUserMapper {
/**
* 新增任务-及任务记录
* @param taskVo
*/
void insertCmdTask(KqCmdTaskVo taskVo);
/**
* 新增任务-及任务记录
* @param taskVo
*/
void insertCmdTaskHistory(KqCmdTaskVo taskVo);
/**
* 查询当前工程全部在场人员
* @param proId
* @return
*/
List<String> getOnSiteUser(@Param("proId") int proId);
/**
* 批量插入 任务人员管理表
* @param list
* @param taskVo
*/
void insertCmdTaskUser(@Param("list") List<String> list,@Param("param") KqCmdTaskVo taskVo);
void insertCmdTaskUserByInteger(@Param("list") List<Integer> list,@Param("param") KqCmdTaskVo taskVo);
/**
* 批量插入 设备任务记录
* @param list
*/
void insertCmdTaskByDevice(@Param("list")List<KqCmdTaskVo> list);
/**
* 批量插入任务数据
* @param list
*/
void insertCmdTaskByDeviceHistory(@Param("list")List<KqCmdTaskVo> list);
/**
* 任务下发的用户信息
* @param list
* @param userId
*/
void insertTaskUser(@Param("list")List<KqCmdTaskVo> list,@Param("userId") int userId);
/**
* 分页查询工程数据
* @param proId
* @return
*/
List<DeviceVo> getDeviceVoByProId(@Param("proId") int proId);
/**
* 查询工程是否史上海工程
* @param proId
* @return
*/
Integer getProType(@Param("proId") int proId);
/**
* 查询全部上海工程的考勤机
* @return
*/
List<DeviceVo> getDeviceVoByProBySh();
/**
* 查询上海工程的全部人员
* @return
*/
List<String> getOnSiteUserBySh();
/**
* 获取设备列表数据
* @param deviceCode
* @return
*/
List<String> getDevUserId(@Param("deviceCode") String deviceCode);
}

View File

@ -1,305 +0,0 @@
package com.bonus.urk.service;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.nacos.shaded.com.google.common.collect.Maps;
import com.bonus.common.core.utils.DateUtils;
import com.bonus.common.core.utils.StringUtils;
import com.bonus.common.core.urk.TaskStatusEnum;
import com.bonus.urk.mapper.SendUserMapper;
import com.bonus.urk.vo.DeviceVo;
import com.bonus.urk.vo.KqCmdTaskVo;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
* @author 黑子
*
*/
@Slf4j
@Service
public class SendUserService {
public final static int PAGE_SIZE=10;
@Resource
private SendUserMapper mapper;
public void getUserSendToDev(String deviceCode,int proId) {
try{
String createTime= DateUtils.getTime();
KqCmdTaskVo taskVo=new KqCmdTaskVo();
taskVo.setProId(String.valueOf(proId));
taskVo.setCreateTime(createTime);
taskVo.setCmdCode("SET_USER_INFO");
taskVo.setDeviceCode(deviceCode);
//等待执行
taskVo.setTransStatus(TaskStatusEnum.WAIT.ordinal());
//分页查询
getUserSendToDev(proId,1,taskVo);
}catch (Exception e){
log.error(e.toString(),e);
}
}
public void getUserSendToDev(int proId,int pageNum, KqCmdTaskVo taskVo){
try{
List<String> list;
Integer isSh=mapper.getProType(proId);
PageHelper.startPage(pageNum, PAGE_SIZE);
if(isSh!=null && isSh==1){
list=mapper.getOnSiteUserBySh();
}else{
list=mapper.getOnSiteUser(proId);
}
PageInfo<String> pageInfo =new PageInfo<String>(list);
//分页查询全部在场用户
if (!list.isEmpty()){
taskVo.setCmdParam(JSON.toJSONString(list));
//添加任务
mapper.insertCmdTask(taskVo);
//添加历史记录
mapper.insertCmdTaskHistory(taskVo);
//添加人员
mapper.insertCmdTaskUser(list,taskVo);
int pageSize=pageInfo.getPageNum();
int pageTotal=pageInfo.getPages();
if(pageSize<pageTotal){
pageNum++;
getUserSendToDev(proId,pageNum,taskVo);
}
}
}catch (Exception e){
log.error(e.toString(),e);
}
}
/**
* 下发用户给全部的考勤机相关工程的考勤机
* @param userId
* @param proId
*/
public void sendUserToDevice(int userId,int proId,String update) {
try{
String createTime= DateUtils.getTime();
KqCmdTaskVo taskVo=new KqCmdTaskVo();
//是否是修改的
if(ObjectUtil.isNotEmpty(update)){
taskVo.setUpdateStatus("1");
}
List<Integer> userList=new ArrayList<>();
userList.add(userId);
String json= JSON.toJSONString(userList);
taskVo.setProId(String.valueOf(proId));
taskVo.setCmdParam(json);
taskVo.setCreateTime(createTime);
taskVo.setCmdCode("SET_USER_INFO");
//等待执行
taskVo.setTransStatus(TaskStatusEnum.WAIT.ordinal());
//分页查询
sendUserToDevice(userId,proId,1,taskVo);
}catch (Exception e){
log.error(e.toString(),e);
}
}
/**
* 下发人员分页
* @param userId
* @param proId
* @param pageNum
* @param taskVo
*/
public void sendUserToDevice(int userId,int proId,int pageNum, KqCmdTaskVo taskVo){
Integer isSh=mapper.getProType(proId);
List<DeviceVo> list;
PageHelper.startPage(pageNum, PAGE_SIZE);
//是上海的工程
if(isSh!=null && isSh==1){
list=mapper.getDeviceVoByProBySh();
}else{
list=mapper.getDeviceVoByProId(proId);
}
PageInfo<DeviceVo> pageInfo =new PageInfo<DeviceVo>(list);
//分页查询+
if (!list.isEmpty()){
List<KqCmdTaskVo> taskVos=new ArrayList<>();
for (DeviceVo vo:list){
taskVo.setDeviceCode(vo.getDevCode());
taskVos.add(taskVo);
}
// 任务下发新增
mapper.insertCmdTaskByDevice(taskVos);
mapper.insertCmdTaskByDeviceHistory(taskVos);
// 任务人员关联
mapper.insertTaskUser(taskVos,userId);
int pageSize=pageInfo.getPageNum();
int pageTotal=pageInfo.getPages();
if(pageSize<pageTotal){
pageNum++;
sendUserToDevice(userId,proId,pageNum,taskVo);
}
}
}
/**
* 人员 出场 --删除人员
*
* * @param userId
* @param proId
*/
public void delUserByDevice(int userId, int proId) {
try{
List<Integer> userList=new ArrayList<>();
String createTime= DateUtils.getTime();
KqCmdTaskVo taskVo=new KqCmdTaskVo();
userList.add(userId);
String json= JSON.toJSONString(userList);
taskVo.setCmdParam(json);
taskVo.setProId(String.valueOf(proId));
taskVo.setCreateTime(createTime);
taskVo.setCmdCode("DELETE_USER");
//等待执行
taskVo.setTransStatus(TaskStatusEnum.WAIT.ordinal());
//分页查询
sendUserToDevice(userId,proId,1,taskVo);
}catch (Exception e){
log.error(e.toString(),e);
}
}
public void delUserByDeviceList(List<Integer> userId ,List<Integer> proId) {
try{
Map<Integer,List<Integer>> map=Maps.newHashMap();
//按照工程给人员分组
for (int i = 0; i < proId.size(); i++) {
List<Integer> list=map.get(proId.get(i));
if(StringUtils.isEmpty(list)){
list=new ArrayList<>();
list.add(userId.get(i));
map.put(proId.get(i),list);
}else{
list.add(userId.get(i));
map.replace(proId.get(i),list);
}
}
//循环
map.forEach((key, value) -> {
String createTime= DateUtils.getTime();
KqCmdTaskVo taskVo=new KqCmdTaskVo();
String json= JSON.toJSONString(value);
taskVo.setProId(String.valueOf(key));
taskVo.setCmdParam(json);
taskVo.setCreateTime(createTime);
taskVo.setCmdCode("DELETE_USER");
//等待执行
taskVo.setTransStatus(TaskStatusEnum.WAIT.ordinal());
//分页查询
sendUserToDeviceList(value,key,1,taskVo);
});
}catch (Exception e){
log.error(e.toString(),e);
}
}
public void sendUserToDeviceList(List<Integer> userId,int proId,int pageNum, KqCmdTaskVo taskVo){
Integer isSh=mapper.getProType(proId);
List<DeviceVo> list;
PageHelper.startPage(pageNum, PAGE_SIZE);
//是上海的工程
if(isSh!=null && isSh==1){
list=mapper.getDeviceVoByProBySh();
}else{
list=mapper.getDeviceVoByProId(proId);
}
PageInfo<DeviceVo> pageInfo =new PageInfo<DeviceVo>(list);
//分页查询+
if (!list.isEmpty()){
for (DeviceVo vo:list){
taskVo.setDeviceCode(vo.getDevCode());
String json= JSON.toJSONString(userId);
taskVo.setCmdParam(json);
// 下发
mapper.insertCmdTask(taskVo);
mapper.insertCmdTaskHistory(taskVo);
//添加人员
mapper.insertCmdTaskUserByInteger(userId,taskVo);
}
int pageSize=pageInfo.getPageNum();
int pageTotal=pageInfo.getPages();
if(pageSize<pageTotal){
pageNum++;
sendUserToDeviceList(userId,proId,pageNum,taskVo);
}
}
}
/**
* 考勤机解绑工程
* @param deviceCode
* @param proId
*/
public void delDevByProId(String deviceCode, int proId) {
try{
String createTime= DateUtils.getTime();
KqCmdTaskVo taskVo=new KqCmdTaskVo();
taskVo.setDeviceCode(deviceCode);
taskVo.setProId(String.valueOf(proId));
taskVo.setCreateTime(createTime);
taskVo.setCmdCode("DELETE_USER");
//等待执行
taskVo.setTransStatus(TaskStatusEnum.WAIT.ordinal());
//分页查询
delDevUserList(deviceCode,1,taskVo);
}catch (Exception e){
log.error(e.toString());
}
}
public void delDevUserList(String deviceCode,int pageNum,KqCmdTaskVo taskVo){
//要获取考勤机当前的全部用户数据
PageHelper.startPage(pageNum, PAGE_SIZE);
List<String> list=mapper.getDevUserId(deviceCode);
PageInfo<String> pageInfo =new PageInfo<String>(list);
//分页查询+
if (!list.isEmpty()){
String json= JSON.toJSONString(list);
taskVo.setCmdParam(json);
//添加任务
mapper.insertCmdTask(taskVo);
//添加历史记录
mapper.insertCmdTaskHistory(taskVo);
//添加人员
mapper.insertCmdTaskUser(list,taskVo);
int pageSize=pageInfo.getPageNum();
int pageTotal=pageInfo.getPages();
if(pageSize<pageTotal){
pageNum++;
delDevUserList(deviceCode,pageNum,taskVo);
}
}
}
}

View File

@ -1,119 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.bonus.urk.mapper.SendUserMapper">
<insert id="insertDeviceVo">
insert into pm_att_device(device_code,device_name,dev_model,on_line,is_active)values (
#{devCode},#{deviceName},#{devModel},#{onLine},1 )
</insert>
<insert id="insertCmdTask" useGeneratedKeys="true" keyProperty="id">
insert into kq_cmd_task (
cmd_code, cmd_param, device_code, trans_status,
create_time, update_state, msg, pro_id
)values (#{cmdCode},#{cmdParam},#{deviceCode},#{transStatus},#{createTime},#{updateStatus},#{msg},#{proId}
)
</insert>
<insert id="insertCmdTaskHistory">
insert into kq_cmd_task_history (id,
cmd_code, cmd_param, device_code, trans_status,
create_time, update_state, msg, pro_id
)values (#{id},#{cmdCode},#{cmdParam},#{deviceCode},#{transStatus},#{createTime},#{updateStatus},#{msg},#{proId}
)
</insert>
<insert id="insertTaskUser">
insert into kq_task_user_list(
task_id,user_id )values
<foreach collection="list" item="item" separator=",">(
#{item.id},#{userId}
)
</foreach>
</insert>
<!--新增考勤机 下发人员-->
<insert id="insertCmdTaskUser">
insert into kq_task_user_list(
task_id,user_id )values
<foreach collection="list" item="item" separator=",">(
#{param.id}, #{item}
)
</foreach>
</insert>
<insert id="insertCmdTaskUserByInteger">
insert into kq_task_user_list(
task_id,user_id )values
<foreach collection="list" item="item" separator=",">(
#{param.id}, #{item}
)
</foreach>
</insert>
<!--任务批量插入-->
<insert id="insertCmdTaskByDevice" keyProperty="id" useGeneratedKeys="true">
insert into kq_cmd_task (
cmd_code, cmd_param, device_code, trans_status, create_time, update_state, msg, pro_id
)values
<foreach collection="list" item="item" separator=",">
(#{item.cmdCode},#{item.cmdParam},#{item.deviceCode},#{item.transStatus},#{item.createTime},#{item.updateStatus},#{item.msg},#{item.proId}
)
</foreach>
</insert>
<!--任务 记录批量插入-->
<insert id="insertCmdTaskByDeviceHistory" >
insert into kq_cmd_task_history (
id,cmd_code, cmd_param, device_code, trans_status,create_time, update_state, msg, pro_id
)values
<foreach collection="list" item="item" separator=",">
(#{item.id},#{item.cmdCode},#{item.cmdParam},#{item.deviceCode},#{item.transStatus},#{item.createTime},#{item.updateStatus},#{item.msg},#{item.proId}
)
</foreach>
</insert>
<!--查询设备基础信息-->
<select id="getDeviceVoById" resultType="com.bonus.urk.vo.DeviceVo">
select device_code devCode,device_name deviceName, pro_id proId,
dev_model devModel,on_line onLine
from pm_att_device
where device_code=#{devId} and is_active=1
limit 1
</select>
<!--分页查询设备数据-->
<select id="getDeviceVoByProId" resultType="com.bonus.urk.vo.DeviceVo">
select device_code devCode,device_name deviceName, pro_id proId,
dev_model devModel,on_line onLine
from pm_att_device
where pro_id=#{proId} and is_active=1
</select>
<select id="getOnSiteUser" resultType="java.lang.String">
select worker_id
from bm_worker_ein_msg
where pro_id=#{proId}
</select>
<select id="getProType" resultType="java.lang.Integer">
select is_shanghai
FROM pm_project
WHERE id=#{proId}
</select>
<select id="getDeviceVoByProBySh" resultType="com.bonus.urk.vo.DeviceVo">
select td.device_code devCode, td.device_name deviceName, td.pro_id proId,
td.dev_model devModel, td.on_line onLine
from pm_att_device td
LEFT join pm_project pro on pro.id=td.pro_id
where pro.is_shanghai=1
</select>
<select id="getOnSiteUserBySh" resultType="java.lang.String">
select bwem.worker_id
from bm_worker_ein_msg bwem
left join pm_project pro on pro.id=bwem.pro_id
where pro.is_shanghai=1
</select>
<!--删除数据-->
<select id="getDevUserId" resultType="java.lang.String">
select user_id
from kq_dev_user_id
WHERE dev_code=#{deviceCode}
</select>
</mapper>