|
|
@@ -95,7 +95,7 @@ public class HxpStockServiceImpl implements IHxpStockService {
|
|
|
private HxpCabinetlockLogMapper hxpCabinetlockLogMapper;
|
|
|
@Resource
|
|
|
private RemoteNettyService remoteNettyService;
|
|
|
- @Autowired
|
|
|
+ @Resource
|
|
|
private SmsSydUtil smsSydUtil;
|
|
|
/**
|
|
|
* 查询库存管理
|
|
|
@@ -326,13 +326,18 @@ public class HxpStockServiceImpl implements IHxpStockService {
|
|
|
HxpUserecord hxpUserecord = hxpUserecordMapper.selectByStockId(hxpStock.getId());
|
|
|
if(hxpUserecord != null){
|
|
|
logger.info("RFID 化学品正常使用中: " + JSONUtil.toJsonStr(hxpUserecord));
|
|
|
+ return false;
|
|
|
}else {
|
|
|
logger.error("RFID 检测到违规触发报警: " + JSONUtil.toJsonStr(hxpStock));
|
|
|
//触发RFID警报
|
|
|
RemoteLabHardware hardware = tag.getRemoteLabHardware();
|
|
|
+ boolean isAlarm = false;
|
|
|
if (hardware!=null){
|
|
|
R<Boolean> alarm = remoteNettyService.alarm(hardware);//RFID设备报警
|
|
|
logger.info("==================>{},{}",alarm.getCode(),alarm.getMsg());
|
|
|
+ //isAlarm = true;
|
|
|
+ }else {
|
|
|
+ logger.info("==================> rfid 参数有误!"+ tag.toString());
|
|
|
}
|
|
|
// 如果非领用状态,做报警台账
|
|
|
// 0.检测实验室声光报警器是否使用- 使用则直接调用触发- 否则跳过
|
|
|
@@ -344,16 +349,32 @@ public class HxpStockServiceImpl implements IHxpStockService {
|
|
|
safeUserId = subInfo.get("safeUserId")==null?"":String.valueOf(subInfo.get("safeUserId"));
|
|
|
}
|
|
|
|
|
|
- HxpAlarmRecord hxpAlarmRecord;
|
|
|
- Integer dealTime = null;
|
|
|
+ String terminalNum = null;
|
|
|
+ Integer dealTime = 0;
|
|
|
List<Map<String, Object>> terminalList = hxpSmartTerminalMapper.selectTerminalBySubId(8, hxpStock.getSubId());
|
|
|
if(CollectionUtils.isEmpty(terminalList)){
|
|
|
logger.error("实验室【"+subName+"】ID" + hxpStock.getSubId() +"未设置或启用声光报警器!");
|
|
|
}else {
|
|
|
Map<String, Object> smartTerminal = terminalList.get(0);
|
|
|
+ terminalNum = String.valueOf(smartTerminal.get("hardwareNum"));
|
|
|
+ dealTime = (Integer) smartTerminal.get("dealTime");
|
|
|
// 执行声光报警器动作触发
|
|
|
remoteLaboratoryService.controlByInside(Long.parseLong(smartTerminal.get("id")+"") , "01");
|
|
|
+ isAlarm = true;
|
|
|
+ // 控制响铃时长
|
|
|
+ if(smartTerminal.get("ringTime") != null){
|
|
|
+ ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor();
|
|
|
+ executorService.schedule(new Runnable() {
|
|
|
+ @Override
|
|
|
+ public void run() {
|
|
|
+ remoteLaboratoryService.controlByInside(Long.parseLong(smartTerminal.get("id")+"") , "00");
|
|
|
+ }
|
|
|
+ }, Long.parseLong(smartTerminal.get("ringTime") + ""), TimeUnit.SECONDS);
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
+ HxpAlarmRecord hxpAlarmRecord;
|
|
|
+ if(isAlarm){
|
|
|
// 默认一个实验室只触发一个报警器
|
|
|
hxpAlarmRecord = new HxpAlarmRecord();
|
|
|
hxpAlarmRecord.setAlarmContent("未领用即携带化学品离开实验室【"+subName+"】," + "化学品("+hxpStock.getChemicalName()+"), 请尽快确认!");
|
|
|
@@ -362,26 +383,16 @@ public class HxpStockServiceImpl implements IHxpStockService {
|
|
|
hxpAlarmRecord.setAlarmMode(2);
|
|
|
hxpAlarmRecord.setAlarmTime(DateUtils.getNowDate());
|
|
|
hxpAlarmRecord.setSubId(hxpStock.getSubId());
|
|
|
- hxpAlarmRecord.setTerminalNum(smartTerminal.get("hardwareNum") + "");
|
|
|
+ hxpAlarmRecord.setTerminalNum(terminalNum == null ? tag.getSerialNumber() : terminalNum);
|
|
|
hxpAlarmRecord.setHandlingStatus(1);
|
|
|
|
|
|
- dealTime = (Integer) smartTerminal.get("dealTime");
|
|
|
hxpAlarmRecordMapper.insertHxpAlarmRecord(hxpAlarmRecord);
|
|
|
+ }
|
|
|
|
|
|
- // TODO 报警通知演示临时通知给实验室管理员 phones
|
|
|
- sendPhoneAlarm(hxpStock.getSubId(), subName, hxpStock.getChemicalName(), subInfo.get("phones") + "");
|
|
|
+ // 报警通知演示临时通知给实验室管理员 phones
|
|
|
+ sendPhoneAlarm(hxpStock.getSubId(), subName, hxpStock.getChemicalName(), subInfo.get("phones") + "");
|
|
|
|
|
|
- // 控制响铃时长
|
|
|
- if(smartTerminal.get("ringTime") != null){
|
|
|
- ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor();
|
|
|
- executorService.schedule(new Runnable() {
|
|
|
- @Override
|
|
|
- public void run() {
|
|
|
- remoteLaboratoryService.controlByInside(Long.parseLong(smartTerminal.get("id")+"") , "00");
|
|
|
- }
|
|
|
- }, Long.parseLong(smartTerminal.get("ringTime") + ""), TimeUnit.SECONDS);
|
|
|
- }
|
|
|
- }
|
|
|
+ cacheMap.put(rfidCode, DateUtils.getNowDate());
|
|
|
|
|
|
// 系统通知 未领用即携带化学品离开实验室-实验室安全责任人
|
|
|
Map<String, Object> msgData = new HashMap<>();
|
|
|
@@ -410,7 +421,6 @@ public class HxpStockServiceImpl implements IHxpStockService {
|
|
|
// 2.最多五个步骤分别执行
|
|
|
if(CollectionUtils.isNotEmpty(hxpAlarmConfigList)){
|
|
|
logger.error("实验室【"+subName+"】ID" + hxpStock.getSubId() +"执行用户短信通知!");
|
|
|
- cacheMap.put(rfidCode, DateUtils.getNowDate());
|
|
|
|
|
|
Date date = DateUtil.offsetMinute(DateUtils.getNowDate(), Optional.ofNullable(dealTime).orElse(1));
|
|
|
|
|
|
@@ -434,7 +444,6 @@ public class HxpStockServiceImpl implements IHxpStockService {
|
|
|
}
|
|
|
return true;
|
|
|
}
|
|
|
- return false;
|
|
|
}
|
|
|
|
|
|
private void sendPhoneAlarm(Long subId, String subName, String chemicalName, String phones) {
|
|
|
@@ -445,8 +454,12 @@ public class HxpStockServiceImpl implements IHxpStockService {
|
|
|
logger.error("RFID触发电话报警失败:实验室【"+subName+"】管理员未配置手机号!");
|
|
|
return;
|
|
|
}
|
|
|
+ to = Arrays.stream(to).distinct().toArray(String[]::new);
|
|
|
+
|
|
|
|
|
|
- for (String s : to) {
|
|
|
+ // 判断四医大还是其他学校短信方案
|
|
|
+ String content;
|
|
|
+ if(phoneMode == 0){
|
|
|
HxpAlarmRecord hxpAlarmRecord = new HxpAlarmRecord();
|
|
|
hxpAlarmRecord.setAlarmContent("未领用即携带化学品离开实验室【"+subName+"】," + "化学品("+chemicalName+"),请尽快确认!");
|
|
|
hxpAlarmRecord.setAlarmType(2);
|
|
|
@@ -455,20 +468,29 @@ public class HxpStockServiceImpl implements IHxpStockService {
|
|
|
hxpAlarmRecord.setAlarmTime(DateUtils.getNowDate());
|
|
|
hxpAlarmRecord.setSubId(subId);
|
|
|
hxpAlarmRecord.setHandlingStatus(1);
|
|
|
- hxpAlarmRecord.setLiableUserIds(s);
|
|
|
+ hxpAlarmRecord.setLiableUserIds(phones);
|
|
|
|
|
|
hxpAlarmRecordMapper.insertHxpAlarmRecord(hxpAlarmRecord);
|
|
|
- }
|
|
|
|
|
|
- // 判断四医大还是其他学校短信方案
|
|
|
- String content;
|
|
|
- if(phoneMode == 0){
|
|
|
content = "电话报警:" + subName + "的化学品" + chemicalName + "违规带离实验室,请尽快确认!";
|
|
|
AlarmEntrty alarmEntrty = new AlarmEntrty(Routes.NoticePush, to, content);
|
|
|
AjaxResult result = remoteAlarmService.send(alarmEntrty);
|
|
|
|
|
|
logger.error(JSONUtil.toJsonStr(result));
|
|
|
}else if(phoneMode == 1){
|
|
|
+ for (String s : to) {
|
|
|
+ HxpAlarmRecord hxpAlarmRecord = new HxpAlarmRecord();
|
|
|
+ hxpAlarmRecord.setAlarmContent("未领用即携带化学品离开实验室【"+subName+"】," + "化学品("+chemicalName+"),请尽快确认!");
|
|
|
+ hxpAlarmRecord.setAlarmType(2);
|
|
|
+ hxpAlarmRecord.setAlarmMode(3);
|
|
|
+ hxpAlarmRecord.setHasValid(1);
|
|
|
+ hxpAlarmRecord.setAlarmTime(DateUtils.getNowDate());
|
|
|
+ hxpAlarmRecord.setSubId(subId);
|
|
|
+ hxpAlarmRecord.setHandlingStatus(1);
|
|
|
+ hxpAlarmRecord.setLiableUserIds(s);
|
|
|
+
|
|
|
+ hxpAlarmRecordMapper.insertHxpAlarmRecord(hxpAlarmRecord);
|
|
|
+ }
|
|
|
|
|
|
content = "【实验室安全系统】" + subName + "-实验人员未领用即携带化学品离开房间,发生时间:"
|
|
|
+ DateUtil.format(DateUtil.date(), DateUtils.YYYY_MM_DD_HH_MM_SS)
|