bug修复

This commit is contained in:
guo 2024-03-27 14:59:35 +08:00
parent e3569117df
commit 981db8a873
24 changed files with 395 additions and 91 deletions

View File

@ -1,11 +1,14 @@
package com.zhgd.xmgl.config; package com.zhgd.xmgl.config;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.text.CharSequenceUtil; import cn.hutool.core.text.CharSequenceUtil;
import com.alibaba.fastjson.JSON; 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.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.zhgd.jeecg.common.util.SpringContextUtils; import com.zhgd.jeecg.common.util.SpringContextUtils;
import com.zhgd.xmgl.modules.project.entity.Project;
import com.zhgd.xmgl.modules.project.mapper.ProjectMapper;
import com.zhgd.xmgl.modules.safetyhat.entity.SafetyHatAlarm; import com.zhgd.xmgl.modules.safetyhat.entity.SafetyHatAlarm;
import com.zhgd.xmgl.modules.safetyhat.entity.SafetyHatData; import com.zhgd.xmgl.modules.safetyhat.entity.SafetyHatData;
import com.zhgd.xmgl.modules.safetyhat.entity.SafetyHatDev; import com.zhgd.xmgl.modules.safetyhat.entity.SafetyHatDev;
@ -18,7 +21,9 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import javax.websocket.*; import javax.websocket.*;
import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.List;
import java.util.Objects; import java.util.Objects;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
@ -65,12 +70,14 @@ public class SafetyHatWSClient {
Boolean status = jo.getBoolean("status"); Boolean status = jo.getBoolean("status");
if (status != null && status) { if (status != null && status) {
JSONArray jaData = jo.getJSONArray("data"); JSONArray jaData = jo.getJSONArray("data");
List<String> devsns = new ArrayList<>();
if (jaData.size() != 0) { if (jaData.size() != 0) {
for (int i = 0; i < jaData.size(); i++) { for (int i = 0; i < jaData.size(); i++) {
JSONObject joData = jaData.getJSONObject(i); JSONObject joData = jaData.getJSONObject(i);
JSONObject joUserInfo = joData.getJSONObject("user_info"); JSONObject joUserInfo = joData.getJSONObject("user_info");
if (joUserInfo != null) { if (joUserInfo != null) {
String deviceId = joUserInfo.getString("device_id"); String deviceId = joUserInfo.getString("device_id");
devsns.add(deviceId);
log.info("SafetyHatWSClient获取实时数据的deviceId:{}", deviceId); log.info("SafetyHatWSClient获取实时数据的deviceId:{}", deviceId);
SafetyHatDev dev = SpringContextUtils.getBean(SafetyHatDevMapper.class).selectOne(new LambdaQueryWrapper<SafetyHatDev>() SafetyHatDev dev = SpringContextUtils.getBean(SafetyHatDevMapper.class).selectOne(new LambdaQueryWrapper<SafetyHatDev>()
.eq(SafetyHatDev::getDevSn, deviceId)); .eq(SafetyHatDev::getDevSn, deviceId));
@ -94,10 +101,42 @@ public class SafetyHatWSClient {
e.printStackTrace(); e.printStackTrace();
} }
} }
dev.setOnline(1);
SpringContextUtils.getBean(ISafetyHatDataService.class).updateStatus(dev);
} }
} }
} }
} }
//不在data里面的全部设置离线
Project project = SpringContextUtils.getBean(ProjectMapper.class).selectOne(new LambdaQueryWrapper<Project>().eq(Project::getHelmetUser, id));
if (project != null) {
List<SafetyHatDev> devList = SpringContextUtils.getBean(SafetyHatDevMapper.class).selectList(new LambdaQueryWrapper<SafetyHatDev>()
.eq(SafetyHatDev::getProjectSn, project.getProjectSn())
.notIn(SafetyHatDev::getDevSn, devsns)
);
if (CollUtil.isNotEmpty(devList)) {
for (SafetyHatDev dev : devList) {
dev.setOnline(0);
SpringContextUtils.getBean(ISafetyHatDataService.class).updateStatus(dev);
}
}
}
} else if (status != null && !status) {
//暂时没有活跃的设备全部设置离线
try {
Project project = SpringContextUtils.getBean(ProjectMapper.class).selectOne(new LambdaQueryWrapper<Project>().eq(Project::getHelmetUser, id));
if (project != null) {
List<SafetyHatDev> devList = SpringContextUtils.getBean(SafetyHatDevMapper.class).selectList(new LambdaQueryWrapper<SafetyHatDev>().eq(SafetyHatDev::getProjectSn, project.getProjectSn()));
if (CollUtil.isNotEmpty(devList)) {
for (SafetyHatDev dev : devList) {
dev.setOnline(0);
SpringContextUtils.getBean(ISafetyHatDataService.class).updateStatus(dev);
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
} }
} else if (Objects.equals(cmd, "server_push_sos")) { } else if (Objects.equals(cmd, "server_push_sos")) {
log.info("SafetyHatWSClient接收报警数据"); log.info("SafetyHatWSClient接收报警数据");

View File

@ -28,10 +28,7 @@ public class Notice implements Serializable {
@TableId(type = IdType.ASSIGN_ID) @TableId(type = IdType.ASSIGN_ID)
@ApiModelProperty(value = "消息通知") @ApiModelProperty(value = "消息通知")
private java.lang.Long id; private java.lang.Long id;
/** @ApiModelProperty(value = "类型1考勤提醒2人员报警,3车辆4混凝土监测5卸料平台6配电箱7扬尘,8视频9标养室,10安全检查,11质量检查,12塔吊,13升降机,14电表,15水表,16访客,17,防疫人员通知18访客通知,19巡检点,20人员的资质证书即将到期,21人员的合同信息即将到期22人员的保险信息即将到期")
* 类型1考勤提醒2人员报警,3车辆4混凝土监测5卸料平台6配电箱7扬尘,8视频9标养室,10安全检查,11质量检查,12塔吊,13升降机,14电表,15水表,16访客,17,防疫人员通知18访客通知,19巡检点,20人员的资质证书即将到期
*/
@ApiModelProperty(value = "类型1考勤提醒2人员报警,3车辆4混凝土监测5卸料平台6配电箱7扬尘,8视频9标养室,10安全检查,11质量检查,12塔吊,13升降机,14电表,15水表,16访客,17,防疫人员通知18访客通知,19巡检点,20人员的资质证书即将到期")
private java.lang.String type; private java.lang.String type;
/** /**
* 消息内容 * 消息内容

View File

@ -90,7 +90,7 @@ public class SystemUser implements Serializable {
@Excel(name = "企业或项目sn", width = 15) @Excel(name = "企业或项目sn", width = 15)
@ApiModelProperty(value = "企业或项目sn") @ApiModelProperty(value = "企业或项目sn")
private java.lang.String sn; private java.lang.String sn;
@ApiModelProperty(value = "账号类型1系统管理员jxjadmin2企业管理员账号175120098943企业区账号4企业市账号5项目账号thhy只能看一个项目6项目子账号aq比一个项目更小7企业子账号qyyszh只能看到很多项目的账号,8参建单位9政务10租户") @ApiModelProperty(value = "账号类型1系统管理员jxjadmin2企业管理员账号175120098943企业区账号4企业市账号5项目账号thhy只能看一个项目6项目子账号aq比一个项目更小7企业子账号qyyszh只能看到很多项目的账号,8参建单位9政务10租户新用户11供应商")
private java.lang.Integer accountType; private java.lang.Integer accountType;
@ApiModelProperty(value = "项目子账号绑定的劳务人员") @ApiModelProperty(value = "项目子账号绑定的劳务人员")

View File

@ -2,7 +2,6 @@ package com.zhgd.xmgl.modules.basicdata.service;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.zhgd.jeecg.common.api.vo.Result; import com.zhgd.jeecg.common.api.vo.Result;
import com.zhgd.jeecg.common.mybatis.EntityMap;
import com.zhgd.xmgl.entity.sj.JwtPayloadUserInfo; import com.zhgd.xmgl.entity.sj.JwtPayloadUserInfo;
import com.zhgd.xmgl.modules.basicdata.entity.dto.LoginInfoByTokenDto; import com.zhgd.xmgl.modules.basicdata.entity.dto.LoginInfoByTokenDto;
import com.zhgd.xmgl.modules.basicdata.entity.SystemUser; import com.zhgd.xmgl.modules.basicdata.entity.SystemUser;
@ -29,7 +28,7 @@ public interface ISystemUserService extends IService<SystemUser> {
List<SystemUser> getSystemUserBySn(Map<String, Object> map); List<SystemUser> getSystemUserBySn(Map<String, Object> map);
void saveSystemUser(SystemUser systemUser); Long saveSystemUser(SystemUser systemUser);
void editSystemUser(SystemUser systemUser); void editSystemUser(SystemUser systemUser);

View File

@ -629,12 +629,12 @@ public class CompanyServiceImpl extends ServiceImpl<CompanyMapper, Company> impl
@Override @Override
public void updateTenantOrg(HashMap<String, Object> paramMap) { public void updateTenantOrg(HashMap<String, Object> paramMap) {
String userId = MapUtils.getString(paramMap, "userId"); Long userId = MapUtils.getLong(paramMap, "userId");
String projectSns = MapUtils.getString(paramMap, "projectSns"); String projectSns = MapUtils.getString(paramMap, "projectSns");
String companySns = MapUtils.getString(paramMap, "companySns"); String companySns = MapUtils.getString(paramMap, "companySns");
xzSystemUserToCompanyProjectMapper.delete(new LambdaQueryWrapper<XzSystemUserToCompanyProject>().eq(XzSystemUserToCompanyProject::getUserId, userId)); xzSystemUserToCompanyProjectMapper.delete(new LambdaQueryWrapper<XzSystemUserToCompanyProject>().eq(XzSystemUserToCompanyProject::getUserId, userId));
insertTenantOrg(companySns, 1); insertTenantOrg(companySns, 1, userId);
insertTenantOrg(projectSns, 2); insertTenantOrg(projectSns, 2, userId);
} }
@Override @Override
@ -642,13 +642,13 @@ public class CompanyServiceImpl extends ServiceImpl<CompanyMapper, Company> impl
return systemUserMapper.getOrgSnListByUserId(paramMap); return systemUserMapper.getOrgSnListByUserId(paramMap);
} }
private void insertTenantOrg(String sns, int type) { private void insertTenantOrg(String sns, int type, Long userId) {
if (StringUtils.isNotBlank(sns)) { if (StringUtils.isNotBlank(sns)) {
String[] snArr = StringUtils.split(sns, ","); String[] snArr = StringUtils.split(sns, ",");
for (int i = 0; i < snArr.length; i++) { for (int i = 0; i < snArr.length; i++) {
String sn = snArr[i]; String sn = snArr[i];
XzSystemUserToCompanyProject to = new XzSystemUserToCompanyProject(); XzSystemUserToCompanyProject to = new XzSystemUserToCompanyProject();
to.setUserId(Long.valueOf(sn)); to.setUserId(userId);
to.setSn(sn); to.setSn(sn);
to.setType(type); to.setType(type);
xzSystemUserToCompanyProjectMapper.insert(to); xzSystemUserToCompanyProjectMapper.insert(to);

View File

@ -623,7 +623,7 @@ public class SystemUserServiceImpl extends ServiceImpl<SystemUserMapper, SystemU
} }
@Override @Override
public void saveSystemUser(SystemUser systemUser) { public Long saveSystemUser(SystemUser systemUser) {
QueryWrapper<SystemUser> queryWrapper = new QueryWrapper<>(); QueryWrapper<SystemUser> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(SystemUser::getAccount, systemUser.getAccount()); queryWrapper.lambda().eq(SystemUser::getAccount, systemUser.getAccount());
int count = systemUserMapper.selectCount(queryWrapper); int count = systemUserMapper.selectCount(queryWrapper);
@ -647,6 +647,7 @@ public class SystemUserServiceImpl extends ServiceImpl<SystemUserMapper, SystemU
systemUser.setShowPassword(password); systemUser.setShowPassword(password);
systemUser.setPassword(passwordEncoder.encode(password)); systemUser.setPassword(passwordEncoder.encode(password));
systemUserMapper.insert(systemUser); systemUserMapper.insert(systemUser);
return systemUser.getUserId();
} }
@Override @Override

View File

@ -99,7 +99,11 @@ public class FrontierProtectionNoNetDev implements Serializable {
@ApiModelProperty(value = "上传时间") @ApiModelProperty(value = "上传时间")
private java.util.Date uploadDate; private java.util.Date uploadDate;
@ApiModelProperty(value = "设备在线状态 0离线1在线")
private Integer onLine;
@TableField(exist = false) @TableField(exist = false)
@ApiModelProperty(value = "责任班组名称") @ApiModelProperty(value = "责任班组名称")
private java.lang.String dutyTeamInfoName; private java.lang.String dutyTeamInfoName;
} }

View File

@ -1,31 +1,31 @@
package com.zhgd.xmgl.modules.frontierprotectionnonet.service.impl; package com.zhgd.xmgl.modules.frontierprotectionnonet.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.zhgd.jeecg.common.system.query.QueryGenerator;
import com.zhgd.xmgl.modules.frontierprotectionnonet.entity.FrontierProtectionNoNetData; import com.zhgd.xmgl.modules.frontierprotectionnonet.entity.FrontierProtectionNoNetData;
import com.zhgd.xmgl.modules.frontierprotectionnonet.entity.dto.FrontierProtectionNoNetDataDto;
import com.zhgd.xmgl.modules.frontierprotectionnonet.entity.FrontierProtectionNoNetDev; import com.zhgd.xmgl.modules.frontierprotectionnonet.entity.FrontierProtectionNoNetDev;
import com.zhgd.xmgl.modules.frontierprotectionnonet.entity.dto.FrontierProtectionNoNetDataDto;
import com.zhgd.xmgl.modules.frontierprotectionnonet.mapper.FrontierProtectionNoNetDataMapper; import com.zhgd.xmgl.modules.frontierprotectionnonet.mapper.FrontierProtectionNoNetDataMapper;
import com.zhgd.xmgl.modules.frontierprotectionnonet.mapper.FrontierProtectionNoNetDevMapper; import com.zhgd.xmgl.modules.frontierprotectionnonet.mapper.FrontierProtectionNoNetDevMapper;
import com.zhgd.xmgl.modules.frontierprotectionnonet.service.IFrontierProtectionNoNetDataService; import com.zhgd.xmgl.modules.frontierprotectionnonet.service.IFrontierProtectionNoNetDataService;
import com.zhgd.xmgl.security.entity.UserInfo; import com.zhgd.xmgl.security.entity.UserInfo;
import com.zhgd.xmgl.security.util.SecurityUtils; import com.zhgd.xmgl.security.util.SecurityUtils;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zhgd.jeecg.common.system.query.QueryGenerator;
import com.zhgd.xmgl.util.PageUtil; import com.zhgd.xmgl.util.PageUtil;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.zhgd.xmgl.util.RefUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Date; import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
import com.zhgd.xmgl.util.RefUtil;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.beans.factory.annotation.Autowired;
/** /**
* @Description: 临边防护(无网)-数据 * @Description: 临边防护(无网)-数据
* @author pds * @author pds
@ -91,6 +91,24 @@ public class FrontierProtectionNoNetDataServiceImpl extends ServiceImpl<Frontier
//throw new OpenAlertException("设备编号不正确"); //throw new OpenAlertException("设备编号不正确");
return 1; return 1;
} }
/*
只有设备状态变化在线/离线时才会推送数据推送失败不会重试
布防在线alarm=0state=布防
离线alarm=0,state=故障
*/
if (Objects.equals(dto.getAlarm(), "0") && Objects.equals(dto.getState(), "布防")) {
//在线
frontierProtectionNoNetDevMapper.update(null, new LambdaUpdateWrapper<FrontierProtectionNoNetDev>()
.eq(FrontierProtectionNoNetDev::getDevSn, deviceid)
.set(FrontierProtectionNoNetDev::getOnLine, 1)
);
} else if (Objects.equals(dto.getAlarm(), "0") && Objects.equals(dto.getState(), "故障")) {
//故障
frontierProtectionNoNetDevMapper.update(null, new LambdaUpdateWrapper<FrontierProtectionNoNetDev>()
.eq(FrontierProtectionNoNetDev::getDevSn, deviceid)
.set(FrontierProtectionNoNetDev::getOnLine, 0)
);
}
FrontierProtectionNoNetData data = new FrontierProtectionNoNetData(); FrontierProtectionNoNetData data = new FrontierProtectionNoNetData();
data.setDevSn(deviceid); data.setDevSn(deviceid);
data.setMonitorObject(null); data.setMonitorObject(null);

View File

@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.gexin.fastjson.JSON; import com.gexin.fastjson.JSON;
import com.zhgd.jeecg.common.api.vo.Result; import com.zhgd.jeecg.common.api.vo.Result;
import com.zhgd.xmgl.modules.safetyhat.entity.SafetyHatData; import com.zhgd.xmgl.modules.safetyhat.entity.SafetyHatData;
import com.zhgd.xmgl.modules.safetyhat.entity.SafetyHatDev;
import com.zhgd.xmgl.modules.safetyhat.service.ISafetyHatDataService; import com.zhgd.xmgl.modules.safetyhat.service.ISafetyHatDataService;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParam;
@ -76,6 +77,14 @@ public class SafetyHatDataController {
return Result.ok(); return Result.ok();
} }
@ApiOperation(value = "更新智能安全帽在线离线状态", notes = "更新智能安全帽在线离线状态", httpMethod = "POST")
@PostMapping(value = "/updateStatus")
public Result<SafetyHatData> updateStatus(@RequestBody @Validate SafetyHatDev safetyHatDev) {
log.info("更新智能安全帽在线离线状态:{}", JSON.toJSONString(safetyHatDev));
safetyHatDataService.updateStatus(safetyHatDev);
return Result.ok();
}
/** /**
* 编辑 * 编辑
* *

View File

@ -74,6 +74,8 @@ public class SafetyHatDev implements Serializable {
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value = "心跳时间") @ApiModelProperty(value = "心跳时间")
private java.util.Date heartbeatTime; private java.util.Date heartbeatTime;
@ApiModelProperty(value = "在线状态0.离线 1.在线)")
private java.lang.Integer online;
/** /**
* 人员名称 * 人员名称
*/ */
@ -81,7 +83,5 @@ public class SafetyHatDev implements Serializable {
@ApiModelProperty(value = "人员名称") @ApiModelProperty(value = "人员名称")
@TableField(exist = false) @TableField(exist = false)
private java.lang.String workerName; private java.lang.String workerName;
@TableField(exist = false)
@ApiModelProperty(value = "在线状态0.离线 1.在线)")
private java.lang.Integer online;
} }

View File

@ -2,10 +2,7 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zhgd.xmgl.modules.safetyhat.mapper.SafetyHatDevMapper"> <mapper namespace="com.zhgd.xmgl.modules.safetyhat.mapper.SafetyHatDevMapper">
<select id="queryList" resultType="com.zhgd.xmgl.modules.safetyhat.entity.SafetyHatDev"> <select id="queryList" resultType="com.zhgd.xmgl.modules.safetyhat.entity.SafetyHatDev">
select shd.*,wi.worker_name,IFNULL(((case select shd.*,wi.worker_name
when round((UNIX_TIMESTAMP(now()) - UNIX_TIMESTAMP(heartbeat_time)) / 60) &lt;= 30
then 1
else 0 end)),0) online
from safety_hat_dev shd from safety_hat_dev shd
left join worker_info wi on wi.id = shd.worker_info_id left join worker_info wi on wi.id = shd.worker_info_id
${ew.customSqlSegment} ${ew.customSqlSegment}
@ -15,10 +12,7 @@
resultType="com.zhgd.xmgl.modules.vehicleposition.entity.vo.CountVehiclePositionDevVo"> resultType="com.zhgd.xmgl.modules.vehicleposition.entity.vo.CountVehiclePositionDevVo">
select t.*,t.count - t.onlineCount as offlineCount from ( select t.*,t.count - t.onlineCount as offlineCount from (
select count(*) count, select count(*) count,
IFNULL(sum(IFNULL(((case IFNULL(sum(online),0) onlineCount
when round((UNIX_TIMESTAMP(now()) - UNIX_TIMESTAMP(heartbeat_time)) / 60) &lt;= 30
then 1
else 0 end)), 0)),0) onlineCount
from safety_hat_dev from safety_hat_dev
where 1 = 1 where 1 = 1
<if test="devSn != null and devSn != ''"> <if test="devSn != null and devSn != ''">

View File

@ -3,6 +3,7 @@ package com.zhgd.xmgl.modules.safetyhat.service;
import com.zhgd.xmgl.modules.safetyhat.entity.SafetyHatData; import com.zhgd.xmgl.modules.safetyhat.entity.SafetyHatData;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.zhgd.xmgl.modules.safetyhat.entity.SafetyHatDev;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
@ -26,4 +27,6 @@ public interface ISafetyHatDataService extends IService<SafetyHatData> {
void delete(String id); void delete(String id);
List<SafetyHatData> getNewestList(HashMap<String, Object> paramMap); List<SafetyHatData> getNewestList(HashMap<String, Object> paramMap);
void updateStatus(SafetyHatDev safetyHatDev);
} }

View File

@ -93,11 +93,6 @@ public class SafetyHatDataServiceImpl extends ServiceImpl<SafetyHatDataMapper, S
if (dev == null) { if (dev == null) {
throw new OpenAlertException("设备编号不正确"); throw new OpenAlertException("设备编号不正确");
} }
SafetyHatData lastData = safetyHatDataMapper.selectOne(new LambdaQueryWrapper<SafetyHatData>()
.eq(SafetyHatData::getDevSn, safetyHatData.getDevSn())
.orderByDesc(SafetyHatData::getUploadTime)
.last("limit 1")
);
dev.setHeartbeatTime(new Date()); dev.setHeartbeatTime(new Date());
safetyHatDevMapper.update(dev, new LambdaQueryWrapper<SafetyHatDev>() safetyHatDevMapper.update(dev, new LambdaQueryWrapper<SafetyHatDev>()
.eq(SafetyHatDev::getDevSn, safetyHatData.getDevSn())); .eq(SafetyHatDev::getDevSn, safetyHatData.getDevSn()));
@ -170,5 +165,16 @@ public class SafetyHatDataServiceImpl extends ServiceImpl<SafetyHatDataMapper, S
return baseMapper.getNewestList(paramMap); return baseMapper.getNewestList(paramMap);
} }
@Override
public void updateStatus(SafetyHatDev safetyHatDev) {
SafetyHatDev dev = safetyHatDevMapper.selectOne(new LambdaQueryWrapper<SafetyHatDev>()
.eq(SafetyHatDev::getDevSn, safetyHatDev.getDevSn()));
if (dev == null) {
throw new OpenAlertException("设备编号不正确");
}
dev.setOnline(safetyHatDev.getOnline());
safetyHatDevMapper.updateById(dev);
}
} }

View File

@ -63,16 +63,6 @@ public class SafetyHatDevServiceImpl extends ServiceImpl<SafetyHatDevMapper, Saf
String alias = "shd."; String alias = "shd.";
QueryWrapper<SafetyHatDev> queryWrapper = QueryGenerator.initPageQueryWrapper(SafetyHatDev.class, paramMap, alias); QueryWrapper<SafetyHatDev> queryWrapper = QueryGenerator.initPageQueryWrapper(SafetyHatDev.class, paramMap, alias);
queryWrapper.orderByDesc(alias + RefUtil.fieldNameUlc(SafetyHatDev::getId)); queryWrapper.orderByDesc(alias + RefUtil.fieldNameUlc(SafetyHatDev::getId));
Integer online = MapUtils.getInteger(paramMap, "online");
if (online != null) {
String dateTime = DateUtil.formatDateTime(DateUtil.offsetMinute(new Date(), -30));
if (online == 1) {
queryWrapper.ge(alias + RefUtil.fieldNameUlc(SafetyHatDev::getHeartbeatTime), dateTime);
} else {
queryWrapper.and(qw -> qw.lt(alias + RefUtil.fieldNameUlc(SafetyHatDev::getHeartbeatTime), dateTime).or()
.isNull(alias + RefUtil.fieldNameUlc(SafetyHatDev::getHeartbeatTime)));
}
}
return queryWrapper; return queryWrapper;
} }

View File

@ -1,6 +1,7 @@
package com.zhgd.xmgl.modules.worker.entity; package com.zhgd.xmgl.modules.worker.entity;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
@ -81,6 +82,10 @@ public class WorkerBlacklist implements Serializable {
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value = "创建时间") @ApiModelProperty(value = "创建时间")
private java.util.Date createTime; private java.util.Date createTime;
@ApiModelProperty(value = "类型1证书过期") @ApiModelProperty(value = "类型1证书过期2合同过期3保险过期")
private java.lang.Integer type; private java.lang.Integer type;
@TableField(exist = false)
@ApiModelProperty(value = "考勤考号")
private java.lang.String attendanceNumber;
} }

View File

@ -27,7 +27,62 @@ public interface WorkerCertificateMapper extends BaseMapper<WorkerCertificate> {
* *
* @return * @return
*/ */
List<WorkerInfo> selectExpiredNotInBlackWorkerList(); List<WorkerInfo> selectExpiredCertificateNotInBlackWorkerList();
List<WorkerInfo> alarmWorkerBlack(); /**
* 查询有合同但是合同过期而且没有添加到黑名单的劳务人员
*
* @return
*/
List<WorkerInfo> selectExpiredContractNotInBlackWorkerList();
/**
* 查询有保险但是保险过期而且没有添加到黑名单的劳务人员
*
* @return
*/
List<WorkerInfo> selectExpiredInsuranceNotInBlackWorkerList();
/**
* 资格证书到期预警有总公司配置的
*
* @return
*/
List<WorkerInfo> getAlarmWorkerCertificateWithHeadquarter();
/**
* 资格证书到期预警无总公司配置的
*
* @return
*/
List<WorkerInfo> getAlarmWorkerCertificateNotHeadquarter();
/**
* 合同信息到期预警有总公司配置的
*
* @return
*/
List<WorkerInfo> getAlarmWorkerContractWithHeadquarter();
/**
* 合同信息到期预警无总公司配置的
*
* @return
*/
List<WorkerInfo> getAlarmWorkerContractNotHeadquarter();
/**
* 保险信息到期预警有总公司配置的
*
* @return
*/
List<WorkerInfo> getAlarmWorkerInsuranceWithHeadquarter();
/**
* 保险信息到期预警无总公司配置的
*
* @return
*/
List<WorkerInfo> getAlarmWorkerInsuranceNotHeadquarter();
} }

View File

@ -51,7 +51,7 @@
GROUP BY t1.id GROUP BY t1.id
</select> </select>
<select id="selectWorkerBlacklistPage" resultType="com.zhgd.xmgl.modules.worker.entity.WorkerBlacklist"> <select id="selectWorkerBlacklistPage" resultType="com.zhgd.xmgl.modules.worker.entity.WorkerBlacklist">
SELECT b.worker_name,a.* SELECT b.worker_name,b.attendance_number,a.*
from worker_blacklist a LEFT JOIN worker_info b ON a.worker_id=b.id from worker_blacklist a LEFT JOIN worker_info b ON a.worker_id=b.id
WHERE a.project_sn=#{param.projectSn} WHERE a.project_sn=#{param.projectSn}
<if test="param.workerName!=null and param.workerName!=''"> <if test="param.workerName!=null and param.workerName!=''">

View File

@ -22,23 +22,119 @@
order by num; order by num;
</select> </select>
<select id="selectExpiredNotInBlackWorkerList" resultType="com.zhgd.xmgl.modules.worker.entity.WorkerInfo"> <select id="selectExpiredCertificateNotInBlackWorkerList"
resultType="com.zhgd.xmgl.modules.worker.entity.WorkerInfo">
select distinct wi.* select distinct wi.*
from worker_info wi from worker_info wi
join worker_certificate wc on wi.id = wc.worker_id join worker_certificate wc on wi.id = wc.worker_id
left join worker_blacklist wb on wb.worker_id = wi.id
where wc.effect_time <![CDATA[<]]> current_date where wc.effect_time <![CDATA[<]]> current_date
AND (wb.type is null or wb.type != 1) AND not exists(SELECT * FROM worker_blacklist wb WHERE wb.worker_id = wi.id and wb.type = 1)
</select> </select>
<select id="alarmWorkerBlack" resultType="com.zhgd.xmgl.modules.worker.entity.WorkerInfo"> <select id="selectExpiredContractNotInBlackWorkerList" resultType="com.zhgd.xmgl.modules.worker.entity.WorkerInfo">
select distinct wi.*
from worker_info wi
join worker_contract wc on wi.id = wc.worker_id
where wc.contract_end_date <![CDATA[<]]> current_date
AND not exists(SELECT * FROM worker_blacklist wb WHERE wb.worker_id = wi.id and wb.type = 2)
</select>
<select id="selectExpiredInsuranceNotInBlackWorkerList" resultType="com.zhgd.xmgl.modules.worker.entity.WorkerInfo">
select distinct wi.*
from worker_info wi
join worker_insurance wc on wi.id = wc.worker_id
where wc.expire_time <![CDATA[<]]> current_date
AND not exists(SELECT * FROM worker_blacklist wb WHERE wb.worker_id = wi.id and wb.type = 3)
</select>
<select id="getAlarmWorkerCertificateWithHeadquarter" resultType="com.zhgd.xmgl.modules.worker.entity.WorkerInfo">
select distinct wi.*, b.dictionary_name certificate_type_name select distinct wi.*, b.dictionary_name certificate_type_name
from worker_info wi from worker_info wi
join worker_certificate wc on wi.id = wc.worker_id join worker_certificate wc on wi.id = wc.worker_id
LEFT JOIN LEFT JOIN
(select dictionary_name, id from dictionaries_record WHERE key_name = 'WORKER_CERT') b (select dictionary_name, id from dictionaries_record WHERE key_name = 'WORKER_CERT') b
ON wc.certificate_type = b.id ON wc.certificate_type = b.id
where wc.effect_time <![CDATA[>=]]> date_sub(current_date, interval 15 day) join project p on p.project_sn = wi.project_sn
and wc.effect_time <![CDATA[<]]> current_date join company c on c.company_sn = p.company_sn
join system_logo_config slc on slc.headquarters_sn = c.headquarters_sn
where current_date <![CDATA[>=]]>
date_format(date_sub(wc.effect_time, interval slc.certificate_expire_warn_ahead_day day), '%Y-%m-%d')
and current_date <![CDATA[<=]]> wc.effect_time
and slc.is_open_certificate_expire_warn = 1
</select>
<select id="getAlarmWorkerCertificateNotHeadquarter" resultType="com.zhgd.xmgl.modules.worker.entity.WorkerInfo">
select distinct wi.*, b.dictionary_name certificate_type_name
from worker_info wi
join worker_certificate wc on wi.id = wc.worker_id
LEFT JOIN
(select dictionary_name, id from dictionaries_record WHERE key_name = 'WORKER_CERT') b
ON wc.certificate_type = b.id
join project p on p.project_sn = wi.project_sn
join company c on c.company_sn = p.company_sn
where current_date <![CDATA[>=]]> date_format(date_sub(wc.effect_time, interval (select certificate_expire_warn_ahead_day
from system_logo_config
where headquarters_sn = '-1') day),
'%Y-%m-%d')
and current_date <![CDATA[<=]]> wc.effect_time
and not exists(select 1 from system_logo_config slc where slc.headquarters_sn = c.headquarters_sn)
and (select is_open_certificate_expire_warn from system_logo_config where headquarters_sn = '-1') = 1
</select>
<select id="getAlarmWorkerContractWithHeadquarter" resultType="com.zhgd.xmgl.modules.worker.entity.WorkerInfo">
select distinct wi.*
from worker_info wi
join worker_contract wc on wi.id = wc.worker_id
join project p on p.project_sn = wi.project_sn
join company c on c.company_sn = p.company_sn
join system_logo_config slc on slc.headquarters_sn = c.headquarters_sn
where current_date <![CDATA[>=]]>
date_format(date_sub(wc.contract_end_date, interval slc.certificate_expire_warn_ahead_day day),
'%Y-%m-%d')
and current_date <![CDATA[<=]]> wc.contract_end_date
and slc.is_open_certificate_expire_warn = 1
</select>
<select id="getAlarmWorkerContractNotHeadquarter" resultType="com.zhgd.xmgl.modules.worker.entity.WorkerInfo">
select distinct wi.*
from worker_info wi
join worker_contract wc on wi.id = wc.worker_id
join project p on p.project_sn = wi.project_sn
join company c on c.company_sn = p.company_sn
where current_date <![CDATA[>=]]> date_format(date_sub(wc.contract_end_date, interval
(select certificate_expire_warn_ahead_day
from system_logo_config
where headquarters_sn = '-1') day), '%Y-%m-%d')
and current_date <![CDATA[<=]]> wc.contract_end_date
and not exists(select 1 from system_logo_config slc where slc.headquarters_sn = c.headquarters_sn)
and (select is_open_certificate_expire_warn from system_logo_config where headquarters_sn = '-1') = 1
</select>
<select id="getAlarmWorkerInsuranceWithHeadquarter" resultType="com.zhgd.xmgl.modules.worker.entity.WorkerInfo">
select distinct wi.*
from worker_info wi
join worker_insurance wc on wi.id = wc.worker_id
join project p on p.project_sn = wi.project_sn
join company c on c.company_sn = p.company_sn
join system_logo_config slc on slc.headquarters_sn = c.headquarters_sn
where current_date <![CDATA[>=]]>
date_format(date_sub(wc.expire_time, interval slc.certificate_expire_warn_ahead_day day), '%Y-%m-%d')
and current_date <![CDATA[<=]]> wc.expire_time
and slc.is_open_certificate_expire_warn = 1
</select>
<select id="getAlarmWorkerInsuranceNotHeadquarter" resultType="com.zhgd.xmgl.modules.worker.entity.WorkerInfo">
select distinct wi.*
from worker_info wi
join worker_insurance wc on wi.id = wc.worker_id
join project p on p.project_sn = wi.project_sn
join company c on c.company_sn = p.company_sn
where current_date <![CDATA[>=]]> date_format(date_sub(wc.expire_time, interval (select certificate_expire_warn_ahead_day
from system_logo_config
where headquarters_sn = '-1') day),
'%Y-%m-%d')
and current_date <![CDATA[<=]]> wc.expire_time
and not exists(select 1 from system_logo_config slc where slc.headquarters_sn = c.headquarters_sn)
and (select is_open_certificate_expire_warn from system_logo_config where headquarters_sn = '-1') = 1
</select> </select>
</mapper> </mapper>

View File

@ -83,7 +83,6 @@ public class UfaceDevServiceImpl extends ServiceImpl<UfaceDevMapper, UfaceDev> i
} }
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
ufaceDev.setCreateTime(sdf.format(new Date())); ufaceDev.setCreateTime(sdf.format(new Date()));
ufaceDev.setHeartBeatTime(new Date());
ufaceDevMapper.insert(ufaceDev); ufaceDevMapper.insert(ufaceDev);
projectUfaceConfigService.addUfaceDev(ufaceDev); projectUfaceConfigService.addUfaceDev(ufaceDev);
asyncWorker.saveUfaceDev(ufaceDev); asyncWorker.saveUfaceDev(ufaceDev);

View File

@ -1,17 +1,17 @@
package com.zhgd.xmgl.modules.xz.entity; package com.zhgd.xmgl.modules.xz.entity;
import java.io.Serializable;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.format.annotation.DateTimeFormat;
import org.jeecgframework.poi.excel.annotation.Excel;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
/** /**
* @Description: 星纵-用户和供应商注册 * @Description: 星纵-用户和供应商注册
@ -85,4 +85,14 @@ public class XzRegistry implements Serializable {
private java.lang.String projectSn; private java.lang.String projectSn;
@ApiModelProperty(value = "审核进程1未处理2审批通过3拒绝申请") @ApiModelProperty(value = "审核进程1未处理2审批通过3拒绝申请")
private java.lang.Integer approvalProcess; private java.lang.Integer approvalProcess;
@TableField(exist = false)
@ApiModelProperty(value = "绑定的项目sn多个以,分割)")
private java.lang.String projectSns;
@TableField(exist = false)
@ApiModelProperty(value = "绑定的企业sn多个以,分割)")
private java.lang.String companySns;
} }

View File

@ -9,12 +9,15 @@ import com.zhgd.jeecg.common.execption.OpenAlertException;
import com.zhgd.jeecg.common.system.query.QueryGenerator; import com.zhgd.jeecg.common.system.query.QueryGenerator;
import com.zhgd.xmgl.modules.basicdata.entity.SystemUser; import com.zhgd.xmgl.modules.basicdata.entity.SystemUser;
import com.zhgd.xmgl.modules.basicdata.mapper.SystemUserMapper; import com.zhgd.xmgl.modules.basicdata.mapper.SystemUserMapper;
import com.zhgd.xmgl.modules.basicdata.service.ICompanyService;
import com.zhgd.xmgl.modules.basicdata.service.ISystemUserService;
import com.zhgd.xmgl.modules.xz.entity.XzRegistry; import com.zhgd.xmgl.modules.xz.entity.XzRegistry;
import com.zhgd.xmgl.modules.xz.mapper.XzRegistryMapper; import com.zhgd.xmgl.modules.xz.mapper.XzRegistryMapper;
import com.zhgd.xmgl.modules.xz.service.IXzRegistryService; import com.zhgd.xmgl.modules.xz.service.IXzRegistryService;
import com.zhgd.xmgl.util.EmailUtils; import com.zhgd.xmgl.util.EmailUtils;
import com.zhgd.xmgl.util.PageUtil; import com.zhgd.xmgl.util.PageUtil;
import com.zhgd.xmgl.util.RefUtil; import com.zhgd.xmgl.util.RefUtil;
import org.apache.commons.lang3.StringUtils;
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 org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@ -37,6 +40,10 @@ public class XzRegistryServiceImpl extends ServiceImpl<XzRegistryMapper, XzRegis
@Autowired @Autowired
SystemUserMapper systemUserMapper; SystemUserMapper systemUserMapper;
@Autowired @Autowired
ISystemUserService systemUserService;
@Autowired
ICompanyService companyService;
@Autowired
EmailUtils emailUtils; EmailUtils emailUtils;
@Override @Override
@ -66,16 +73,24 @@ public class XzRegistryServiceImpl extends ServiceImpl<XzRegistryMapper, XzRegis
} }
@Override @Override
public void add(XzRegistry xzRegistry) { public void add(XzRegistry xz) {
SystemUser systemUser = systemUserMapper.selectOne(new LambdaQueryWrapper<SystemUser>() SystemUser systemUser = systemUserMapper.selectOne(new LambdaQueryWrapper<SystemUser>()
.eq(SystemUser::getAccount, xzRegistry.getAccount())); .eq(SystemUser::getAccount, xz.getAccount()));
if (systemUser != null) { if (systemUser != null) {
throw new OpenAlertException("账号已存在"); throw new OpenAlertException("账号已存在");
} }
//to do 不能重复申请 if (Objects.equals(xz.getAccountType(), 2)) {
//供应商不用审批
xzRegistry.setId(null); SystemUser su = new SystemUser();
baseMapper.insert(xzRegistry); su.setAccount(xz.getAccount());
su.setPassword(xz.getPw());
su.setRealName(xz.getAccount());
su.setAccountType(11);
systemUserService.saveSystemUser(su);
} else if (Objects.equals(xz.getAccountType(), 1)) {
xz.setId(null);
baseMapper.insert(xz);
}
} }
@Override @Override
@ -94,20 +109,37 @@ public class XzRegistryServiceImpl extends ServiceImpl<XzRegistryMapper, XzRegis
@Override @Override
public void approval(XzRegistry r) { public void approval(XzRegistry r) {
XzRegistry xzRegistry = baseMapper.selectById(r.getId()); XzRegistry xz = baseMapper.selectById(r.getId());
if (xzRegistry == null) { if (xz == null) {
throw new OpenAlertException("未找到对应实体"); throw new OpenAlertException("未找到对应实体");
} }
xzRegistry.setApprovalProcess(r.getApprovalProcess()); xz.setApprovalProcess(r.getApprovalProcess());
String email = xzRegistry.getEmail(); String email = xz.getEmail();
Integer approvalProcess = xzRegistry.getApprovalProcess(); Integer approvalProcess = xz.getApprovalProcess();
//2审批通过3拒绝申请 //2审批通过3拒绝申请
if (Objects.equals(approvalProcess, 2)) { if (Objects.equals(approvalProcess, 2)) {
emailUtils.sendSimpleMail(email, xzRegistry.getAccount() + "账号审批通过", "您在平台申请的账号已经审核通过,账号:" + xzRegistry.getAccount() + "密码:" + xzRegistry.getPw()); String projectSns = r.getProjectSns();
String companySns = r.getCompanySns();
if (StringUtils.isBlank(projectSns) && StringUtils.isBlank(companySns)) {
throw new OpenAlertException("审核通过的projectSns和companySns不能同时为空");
}
SystemUser systemUser = new SystemUser();
systemUser.setAccount(xz.getAccount());
systemUser.setPassword(xz.getPw());
systemUser.setRealName(xz.getAccount());
systemUser.setAccountType(10);
Long userId = systemUserService.saveSystemUser(systemUser);
//处理权限
HashMap<String, Object> map = new HashMap<>();
map.put("userId", userId);
map.put("projectSns", projectSns);
map.put("companySns", companySns);
companyService.updateTenantOrg(map);
emailUtils.sendSimpleMail(email, xz.getAccount() + "账号审批通过", "您在平台申请的账号已经审核通过,账号:" + xz.getAccount() + "密码:" + xz.getPw());
} else if (Objects.equals(approvalProcess, 3)) { } else if (Objects.equals(approvalProcess, 3)) {
emailUtils.sendSimpleMail(email, xzRegistry.getAccount() + "账号拒绝申请", "您在平台申请的账号拒绝申请,账号:" + xzRegistry.getAccount()); emailUtils.sendSimpleMail(email, xz.getAccount() + "账号拒绝申请", "您在平台申请的账号拒绝申请,账号:" + xz.getAccount());
} }
baseMapper.updateById(xzRegistry); baseMapper.updateById(xz);
} }

View File

@ -337,6 +337,7 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
.antMatchers("/xmgl/mechanicalEquipmentPositionAlarm/add").permitAll() .antMatchers("/xmgl/mechanicalEquipmentPositionAlarm/add").permitAll()
.antMatchers("/xmgl/mechanicalEquipmentPositionData/jxzhgAddData").permitAll() .antMatchers("/xmgl/mechanicalEquipmentPositionData/jxzhgAddData").permitAll()
.antMatchers("/xmgl/xzRegistry/add").permitAll() .antMatchers("/xmgl/xzRegistry/add").permitAll()
.antMatchers("/xmgl/safetyHatData/updateStatus").permitAll()
.antMatchers(HttpMethod.OPTIONS, "/**").anonymous() .antMatchers(HttpMethod.OPTIONS, "/**").anonymous()
.anyRequest().authenticated() // 剩下所有的验证都需要验证. .anyRequest().authenticated() // 剩下所有的验证都需要验证.
.and() .and()

View File

@ -3,7 +3,6 @@ package com.zhgd.xmgl.task;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.zhgd.xmgl.modules.basicdata.entity.SystemLogoConfig;
import com.zhgd.xmgl.modules.basicdata.entity.SystemUser; import com.zhgd.xmgl.modules.basicdata.entity.SystemUser;
import com.zhgd.xmgl.modules.basicdata.mapper.SystemLogoConfigMapper; import com.zhgd.xmgl.modules.basicdata.mapper.SystemLogoConfigMapper;
import com.zhgd.xmgl.modules.basicdata.mapper.SystemUserMapper; import com.zhgd.xmgl.modules.basicdata.mapper.SystemUserMapper;
@ -28,6 +27,7 @@ import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import java.util.Collection;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -160,24 +160,38 @@ public class WorkerTask {
} }
/** /**
* 劳务人员截止日期到期的话就自动填充原因就是证件到期到黑名单中 * 劳务人员截止日期到期的话包括人员的合同信息资格证书保险信息就自动填充原因就是证件到期到黑名单中
*/ */
@SchedulerLock(name = "addWorkerBlacklist", lockAtMostFor = 1000 * 60 * 60, lockAtLeastFor = 1000 * 60 * 5) @SchedulerLock(name = "addWorkerBlacklist", lockAtMostFor = 1000 * 60 * 60, lockAtLeastFor = 1000 * 60 * 5)
@Scheduled(cron = "0 0 1 * * ?") @Scheduled(cron = "0 0 1 * * ?")
@RequestMapping("/addWorkerBlacklist") @RequestMapping("/addWorkerBlacklist")
public void addWorkerBlacklist() { public void addWorkerBlacklist() {
List<WorkerInfo> list = workerCertificateMapper.selectExpiredNotInBlackWorkerList(); log.info("任务开始,劳务人员,截止日期到期的话(包括人员的合同信息、资格证书、保险信息),到黑名单");
//证书过期
List<WorkerInfo> list = workerCertificateMapper.selectExpiredCertificateNotInBlackWorkerList();
addWorkerBlacklist(list, "证件已到期", 1);
//合同过期
List<WorkerInfo> list1 = workerCertificateMapper.selectExpiredContractNotInBlackWorkerList();
addWorkerBlacklist(list1, "合同已到期", 2);
//保险过期
List<WorkerInfo> list2 = workerCertificateMapper.selectExpiredInsuranceNotInBlackWorkerList();
addWorkerBlacklist(list2, "保险已到期", 3);
}
private void addWorkerBlacklist(List<WorkerInfo> list, String addReason, int type) {
for (WorkerInfo workerInfo : list) { for (WorkerInfo workerInfo : list) {
WorkerBlacklist black = new WorkerBlacklist(); WorkerBlacklist black = new WorkerBlacklist();
black.setProjectSn(workerInfo.getProjectSn()); black.setProjectSn(workerInfo.getProjectSn());
black.setWorkerId(workerInfo.getId()); black.setWorkerId(workerInfo.getId());
black.setWorkerName(workerInfo.getWorkerName()); black.setWorkerName(workerInfo.getWorkerName());
black.setIdCard(workerInfo.getIdCard()); black.setIdCard(workerInfo.getIdCard());
black.setAddReason("证件已到期"); black.setAddReason(addReason);
black.setReason("证件已到期"); black.setReason(addReason);
black.setAddTime(DateUtil.now()); black.setAddTime(DateUtil.now());
black.setCreateTime(new Date()); black.setCreateTime(new Date());
black.setType(1); black.setType(type);
workerBlacklistMapper.insert(black); workerBlacklistMapper.insert(black);
} }
} }
@ -190,7 +204,32 @@ public class WorkerTask {
@Scheduled(cron = "0 0 1 * * ?") @Scheduled(cron = "0 0 1 * * ?")
@RequestMapping("/alarmWorkerBlack") @RequestMapping("/alarmWorkerBlack")
public void alarmWorkerBlack() { public void alarmWorkerBlack() {
List<WorkerInfo> list = workerCertificateMapper.alarmWorkerBlack(); log.info("任务开始,对人员的合同信息、资格证书、保险信息到期进行预警,预警后发送消息提示项目管理员账号");
//资格证书预警
List<WorkerInfo> list1 = workerCertificateMapper.getAlarmWorkerCertificateWithHeadquarter();
List<WorkerInfo> list2 = workerCertificateMapper.getAlarmWorkerCertificateNotHeadquarter();
addNotice(CollUtil.addAll(list1, list2), "人员的资质证书即将到期", null, "20");
//合同信息预警
List<WorkerInfo> list3 = workerCertificateMapper.getAlarmWorkerContractWithHeadquarter();
List<WorkerInfo> list4 = workerCertificateMapper.getAlarmWorkerContractNotHeadquarter();
addNotice(CollUtil.addAll(list3, list4), "人员的合同信息即将到期", "合同信息", "21");
//保险信息预警
List<WorkerInfo> list5 = workerCertificateMapper.getAlarmWorkerInsuranceWithHeadquarter();
List<WorkerInfo> list6 = workerCertificateMapper.getAlarmWorkerInsuranceNotHeadquarter();
addNotice(CollUtil.addAll(list5, list6), "人员的保险信息即将到期", "保险信息", "22");
}
/**
* 添加通知
*
* @param list
* @param title 标题
* @param book 具体的某项
* @param type
*/
private void addNotice(Collection<WorkerInfo> list, String title, String book, String type) {
Map<String, List<WorkerInfo>> projectMap = list.stream().collect(Collectors.groupingBy(WorkerInfo::getProjectSn)); Map<String, List<WorkerInfo>> projectMap = list.stream().collect(Collectors.groupingBy(WorkerInfo::getProjectSn));
if (CollUtil.isNotEmpty(projectMap)) { if (CollUtil.isNotEmpty(projectMap)) {
for (Map.Entry<String, List<WorkerInfo>> entry : projectMap.entrySet()) { for (Map.Entry<String, List<WorkerInfo>> entry : projectMap.entrySet()) {
@ -201,15 +240,19 @@ public class WorkerTask {
for (WorkerInfo workerInfo : workerInfoList) { for (WorkerInfo workerInfo : workerInfoList) {
if (CollUtil.isNotEmpty(systemUserList)) { if (CollUtil.isNotEmpty(systemUserList)) {
for (SystemUser systemUser : systemUserList) { for (SystemUser systemUser : systemUserList) {
noticeService.addUserNotice(systemUser.getUserId(), workerInfo.getWorkerName() + "" + workerInfo.getCertificateTypeName() + "即将到期,请尽快更新!", "人员的资质证书即将到期", "20"); String name = "";
if (StringUtils.isNotBlank(book)) {
name = book;
} else {
name = workerInfo.getCertificateTypeName();
}
noticeService.addUserNotice(systemUser.getUserId(), workerInfo.getWorkerName() + "" + name + "即将到期,请尽快更新!", title, type);
} }
} }
} }
} }
} }
} }
} }
} }

View File

@ -1,6 +1,7 @@
package com.zhgd.xmgl.util; package com.zhgd.xmgl.util;
import com.zhgd.xmgl.base.EmailService; import com.zhgd.xmgl.base.EmailService;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -23,6 +24,7 @@ import java.io.File;
*/ */
@Service @Service
@Slf4j
public class EmailUtils implements EmailService { public class EmailUtils implements EmailService {
private final Logger logger = LoggerFactory.getLogger(this.getClass()); private final Logger logger = LoggerFactory.getLogger(this.getClass());
@ -43,6 +45,7 @@ public class EmailUtils implements EmailService {
*/ */
@Override @Override
public void sendSimpleMail(String to, String subject, String content) { public void sendSimpleMail(String to, String subject, String content) {
log.info("发送邮件,收件人:{},主题:{},内容:{}", to, subject, content);
//创建SimpleMailMessage对象 //创建SimpleMailMessage对象
SimpleMailMessage message = new SimpleMailMessage(); SimpleMailMessage message = new SimpleMailMessage();
//邮件发送人 //邮件发送人