|
@@ -5,6 +5,7 @@ import cn.hutool.core.util.RandomUtil;
|
|
|
import cn.hutool.core.util.StrUtil;
|
|
|
import cn.hutool.json.JSONObject;
|
|
|
import cn.hutool.json.JSONUtil;
|
|
|
+import com.pj.current.config.WxConfig;
|
|
|
import com.pj.current.netty.command.constants.CommandType;
|
|
|
import com.pj.current.netty.command.handler.IHandler;
|
|
|
import com.pj.current.netty.command.handler.dto.ChecklogDTO;
|
|
@@ -12,8 +13,13 @@ import com.pj.current.netty.command.handler.dto.HealthlogDTO;
|
|
|
import com.pj.current.netty.dto.OKMsg;
|
|
|
import com.pj.current.netty.dto.RequestPackageDTO;
|
|
|
import com.pj.current.task.TaskService;
|
|
|
+import com.pj.project.tb_car_visit_record.TbCarVisitRecordService;
|
|
|
import com.pj.project.tb_dept.TbDept;
|
|
|
import com.pj.project.tb_dept.TbDeptService;
|
|
|
+import com.pj.project.tb_gate_terminal.TbGateTerminal;
|
|
|
+import com.pj.project.tb_gate_terminal.TbGateTerminalService;
|
|
|
+import com.pj.project.tb_manager.TbManager;
|
|
|
+import com.pj.project.tb_manager.TbManagerService;
|
|
|
import com.pj.project.tb_person_filing.TbPersonFiling;
|
|
|
import com.pj.project.tb_person_filing.TbPersonFilingService;
|
|
|
import com.pj.project.tb_person_visit_record.TbPersonVisitRecord;
|
|
@@ -21,6 +27,11 @@ import com.pj.project.tb_person_visit_record.TbPersonVisitRecordService;
|
|
|
import com.pj.project.tb_person_visit_record.task.ConvertBase64ToImage;
|
|
|
import com.pj.project.tb_terminal.TbTerminal;
|
|
|
import com.pj.project.tb_terminal.TbTerminalService;
|
|
|
+import com.pj.project.tb_venues.TbVenues;
|
|
|
+import com.pj.project.tb_venues.TbVenuesService;
|
|
|
+import com.pj.project.wx.WxService;
|
|
|
+import com.pj.project.wx.bo.MsgDataBO;
|
|
|
+import com.pj.project4sp.spcfg.SpCfgUtil;
|
|
|
import com.pj.utils.cache.RedisUtil;
|
|
|
import io.netty.channel.ChannelHandlerContext;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
@@ -31,6 +42,8 @@ import java.time.LocalDateTime;
|
|
|
import java.time.ZoneId;
|
|
|
import java.time.format.DateTimeFormatter;
|
|
|
import java.util.Date;
|
|
|
+import java.util.List;
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
|
* 健康核查记录上传
|
|
@@ -49,6 +62,19 @@ public class HealthlogHandler implements IHandler {
|
|
|
@Resource
|
|
|
private TaskService taskService;
|
|
|
|
|
|
+ @Resource
|
|
|
+ private TbManagerService tbManagerService;
|
|
|
+ @Resource
|
|
|
+ private TbVenuesService tbVenuesService;
|
|
|
+ @Resource
|
|
|
+ private TbGateTerminalService tbGateTerminalService;
|
|
|
+ @Resource
|
|
|
+ private WxConfig wxConfig;
|
|
|
+ @Resource
|
|
|
+ private WxService wxService;
|
|
|
+ @Resource
|
|
|
+ private TbCarVisitRecordService tbCarVisitRecordService;
|
|
|
+
|
|
|
@Override
|
|
|
public CommandType commandType() {
|
|
|
return CommandType.UPLOAD_HEALTH_LOG;
|
|
@@ -56,7 +82,7 @@ public class HealthlogHandler implements IHandler {
|
|
|
|
|
|
@Override
|
|
|
public void handler(ChannelHandlerContext ctx, RequestPackageDTO packageDTO) {
|
|
|
- log.info("========健康核查记录上传===========");
|
|
|
+ log.info("========健康核查记录上传===========:{}", JSONUtil.toJsonStr(packageDTO));
|
|
|
JSONObject params = JSONUtil.parseObj(packageDTO.getPayload().getParams());
|
|
|
String str = params.getStr("log");
|
|
|
HealthlogDTO dto = JSONUtil.toBean(str, HealthlogDTO.class);
|
|
@@ -64,28 +90,45 @@ public class HealthlogHandler implements IHandler {
|
|
|
TbTerminal tbTerminal = tbTerminalService.findBySN(sn);
|
|
|
String idCard = dto.getIdentity_number();
|
|
|
TbPersonFiling tbPersonFiling = tbPersonFilingService.findByIdCard(idCard);
|
|
|
- Long deptId=tbPersonFiling.getDeptId();
|
|
|
+ if (tbPersonFiling == null && !dto.isAllow_through()) {
|
|
|
+ log.error("异常核验记录");
|
|
|
+ ctx.write(OKMsg.ok());
|
|
|
+ ctx.flush();
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if (tbPersonFiling == null) {
|
|
|
+ //todo 增加人员信息
|
|
|
+ TbDept tbDept = tbDeptService.findOneByPassType(TbDept.PassTypeEnum.BLOW.getType());
|
|
|
+ tbPersonFiling = new TbPersonFiling();
|
|
|
+ Date now = new Date();
|
|
|
+ String pin = RandomUtil.randomNumbers(9);
|
|
|
+ tbPersonFiling.setPin(pin).setIdCard(dto.getIdentity_number())
|
|
|
+ .setName(dto.getName()).setCreateBy("设备上传").setCreateTime(now).setUpdateTime(now)
|
|
|
+ .setDeptId(tbDept.getId()).setJudgeState(1).setJudgeBy("设备上传").setJudgeTime(now);
|
|
|
+ tbPersonFilingService.save(tbPersonFiling);
|
|
|
+ }
|
|
|
+ Long deptId = tbPersonFiling.getDeptId();
|
|
|
TbDept tbDept = tbDeptService.getById(deptId);
|
|
|
- //车辆道闸判断结果 0 不通行 1 可放行
|
|
|
- String carJudgeResult = RedisUtil.get("result:" + tbTerminal.getVenuesId());
|
|
|
- //可放行
|
|
|
- if (dto.isAllow_through()){
|
|
|
- if (TbDept.PassTypeEnum.ONE.getType().equals(tbDept.getPassType())
|
|
|
- ||(StrUtil.equals(carJudgeResult, "1"))){
|
|
|
- try {
|
|
|
- tbTerminalService.open(tbTerminal.getId());
|
|
|
- } catch (Exception e) {
|
|
|
- log.error("开闸失败:{}", e.getMessage());
|
|
|
+ //车辆道闸判断结果 存在则放行 terminaiId
|
|
|
+ Long venuesId = tbTerminal.getChannelId();
|
|
|
+ TbVenues tbVenues = tbVenuesService.getById(venuesId);
|
|
|
+ if (TbVenues.TypeEnum.CAR_CHANNEL.getType().equals(tbVenues.getType())) {
|
|
|
+ String gateTerminalId = RedisUtil.get("result:" + venuesId);
|
|
|
+ RedisUtil.del("result:" + venuesId);
|
|
|
+ if (dto.isAllow_through()) {
|
|
|
+ if (TbDept.PassTypeEnum.ONE.getType().equals(tbDept.getPassType())) {
|
|
|
+ List<TbGateTerminal> gateTerminals = tbGateTerminalService.findByVenuesId(venuesId);
|
|
|
+ // 找到入口的设备,开闸
|
|
|
+ gateTerminals.stream().filter(tbGateTerminal -> tbGateTerminal.getDirection() == 1)
|
|
|
+ .forEach(tbGateTerminal -> openGate(tbGateTerminal.getId(), venuesId));
|
|
|
+ } else if (StrUtil.isNotEmpty(gateTerminalId)) {
|
|
|
+ openGate(Long.valueOf(gateTerminalId), venuesId);
|
|
|
}
|
|
|
+
|
|
|
}
|
|
|
}
|
|
|
- Date date = dto.getDate();
|
|
|
- LocalDateTime dayTime = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
|
|
|
- Integer direction = dto.getDirection();
|
|
|
- TbPersonVisitRecord record = tbPersonVisitRecordService.findTheNearRecord(idCard, deptId, direction, dayTime.minusSeconds(8));
|
|
|
- if (record == null) {
|
|
|
- record = new TbPersonVisitRecord();
|
|
|
- }
|
|
|
+
|
|
|
+ TbPersonVisitRecord record = new TbPersonVisitRecord();
|
|
|
record.setDeptId(deptId).setType(TbPersonVisitRecord.TypeEnum.UPLOAD.getType())
|
|
|
.setVenues(tbTerminal.getVenuesName()).setChannel(tbTerminal.getChannelName())
|
|
|
.setTerminalName(tbTerminal.getName()).setVisitDate(dto.getDate()).setCreateTime(new Date())
|
|
@@ -93,9 +136,54 @@ public class HealthlogHandler implements IHandler {
|
|
|
.setDirection(dto.getDirection()).setTemperature(dto.getTemperature()).setDeptName(tbDept.getName())
|
|
|
.setName(tbPersonFiling.getName()).setPhone(tbPersonFiling.getPhone()).setIdCard(tbPersonFiling.getIdCard());
|
|
|
tbPersonVisitRecordService.saveOrUpdate(record);
|
|
|
+ tbTerminal.setLastOnLine(DateUtil.now());
|
|
|
+ tbTerminalService.updateById(tbTerminal);
|
|
|
+ log.info("回复健康记录上传:{}", OKMsg.ok());
|
|
|
ctx.write(OKMsg.ok());
|
|
|
ctx.flush();
|
|
|
+
|
|
|
+
|
|
|
taskService.addTask(new ConvertBase64ToImage(RandomUtil.randomNumbers(8), 2000, record.getId(), dto.getPicture()));
|
|
|
+ String alarm = SpCfgUtil.getAlarmConfig();
|
|
|
+ if (Integer.parseInt(alarm) == 0) {
|
|
|
+ log.error("========系统未设置预警==========");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ //预警人员
|
|
|
+ List<TbManager> managers = tbManagerService.findAlarmPersonByVenuesId(tbVenues.getPId());
|
|
|
+ managers = managers.stream().filter(tbManager -> StrUtil.isNotEmpty(tbManager.getOpenid())).collect(Collectors.toList());
|
|
|
+ String minTemperature = SpCfgUtil.getMinTemperature();
|
|
|
+ String healthStatus = dto.getHealth_status();
|
|
|
+ String now = DateUtil.now();
|
|
|
+ if (Double.valueOf(minTemperature) < Double.valueOf(dto.getTemperature())) {
|
|
|
+ log.info("发送体温异常提醒============");
|
|
|
+ MsgDataBO msgDataBO = new MsgDataBO("您收到一条人员体温异常提醒", dto.getName(), dto.getTemperature(), now, "请及时处理");
|
|
|
+ //todo 触发体温预警
|
|
|
+ managers.forEach(tbManager -> {
|
|
|
+ String detailUrl = wxConfig.getReportDetail() + "?=" + record.getId() + "&openid=" + tbManager.getOpenid();
|
|
|
+ wxService.sendTemplateMsg(wxConfig.getTemperatureErrorTemplate(), tbManager.getOpenid(), msgDataBO, detailUrl);
|
|
|
+ });
|
|
|
+ }
|
|
|
+ if (!healthStatus.equals(TbPersonVisitRecord.HealthEnum.GREEN.getStatus())) {
|
|
|
+ log.info("发送健康码异常提醒============");
|
|
|
+ // todo 黄码,红码预警
|
|
|
+ MsgDataBO msgDataBO = new MsgDataBO("您收到一条人员健康码异常提醒", dto.getName(), now, tbTerminal.getName(), healthStatus, tbVenues.getName(), "请及时处理");
|
|
|
+ //todo 触发体温预警
|
|
|
+ managers.forEach(tbManager -> {
|
|
|
+ String detailUrl = wxConfig.getReportDetail() + "?=" + record.getId() + "&openid=" + tbManager.getOpenid();
|
|
|
+ wxService.sendTemplateMsg(wxConfig.getTemperatureErrorTemplate(), tbManager.getOpenid(), msgDataBO, detailUrl);
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
+ private void openGate(Long gateTerminalId, Long venuesId) {
|
|
|
+ try {
|
|
|
+ tbGateTerminalService.open(gateTerminalId);
|
|
|
+ String recordId = RedisUtil.get("record:" + venuesId);
|
|
|
+ RedisUtil.del("record:" + venuesId);
|
|
|
+ tbCarVisitRecordService.updatePass(Long.valueOf(recordId));
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("开闸失败:{}", e.getMessage());
|
|
|
+ }
|
|
|
}
|
|
|
}
|