Kaynağa Gözat

设备请求http接口

qzyReal 2 yıl önce
ebeveyn
işleme
8e7d33516e
21 değiştirilmiş dosya ile 440 ekleme ve 181 silme
  1. 32 0
      business-system/epidemic-prevention/src/main/java/com/pj/TacticsController.java
  2. 1 1
      business-system/monitor-system/src/main/java/com/pj/MonitorController.java
  3. 24 0
      business-system/venues-system/src/main/java/com/pj/api/TerminalApi.java
  4. 1 0
      sp-core/src/main/java/com/pj/current/config/MyConfig.java
  5. 1 0
      sp-core/src/main/java/com/pj/current/netty/command/constants/CommandType.java
  6. 39 37
      sp-core/src/main/java/com/pj/current/netty/command/handler/impl/HealthlogHandler.java
  7. 24 16
      sp-core/src/main/java/com/pj/current/netty/command/handler/impl/UploadUserHandler.java
  8. 1 1
      sp-core/src/main/java/com/pj/current/netty/heart/HeartBeatHandler.java
  9. 9 2
      sp-core/src/main/java/com/pj/project/tb_gate_terminal/TbGateTerminalService.java
  10. 12 5
      sp-core/src/main/java/com/pj/project/tb_person_black/TbPersonBlackService.java
  11. 2 1
      sp-core/src/main/java/com/pj/project/tb_terminal/TbTerminal.java
  12. 1 0
      sp-core/src/main/java/com/pj/project/tb_terminal/TbTerminalMapper.java
  13. 1 1
      sp-core/src/main/java/com/pj/project/tb_terminal/TbTerminalMapper.xml
  14. 79 13
      sp-core/src/main/java/com/pj/project/tb_terminal/TbTerminalService.java
  15. 16 0
      sp-core/src/main/java/com/pj/project/tb_terminal/bo/CheckBO.java
  16. 26 0
      sp-core/src/main/java/com/pj/project/tb_terminal/bo/CheckDataDTO.java
  17. 1 1
      sp-core/src/main/java/com/pj/project/tb_terminal/bo/MonitorDTO.java
  18. 5 0
      sp-core/src/main/java/com/pj/project/tb_venues/TbVenues.java
  19. 18 4
      sp-core/src/main/java/com/pj/project/tb_venues/TbVenuesService.java
  20. 144 97
      sp-core/src/main/java/com/pj/project4sp/spcfg/SpCfgUtil.java
  21. 3 2
      sp-start/src/main/resources/application-dev.yml

+ 32 - 0
business-system/epidemic-prevention/src/main/java/com/pj/TacticsController.java

@@ -0,0 +1,32 @@
+package com.pj;
+
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import com.pj.project.tb_venues.TbVenues;
+import com.pj.project.tb_venues.TbVenuesService;
+import com.pj.utils.sg.AjaxJson;
+import com.pj.utils.so.SoMap;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+
+@RestController
+@RequestMapping("tactics")
+public class TacticsController {
+
+    @Resource
+    private TbVenuesService tbVenuesService;
+
+    /**
+     * 防疫策略设置
+     * @return
+     */
+    @RequestMapping("setting")
+    @SaCheckPermission(TbVenues.TB_TACTICS_SETTING)
+    public AjaxJson setting() {
+        SoMap soMap = SoMap.getRequestSoMap();
+        tbVenuesService.setting(soMap.getLong("id"), soMap.getInt("status"));
+        return AjaxJson.getSuccess();
+    }
+}

+ 1 - 1
business-system/monitor-system/src/main/java/com/pj/MonitorController.java

@@ -1,7 +1,7 @@
 package com.pj;
 
 import com.pj.project.tb_person_visit_record.TbPersonVisitRecordService;
-import com.pj.project.tb_terminal.MonitorDTO;
+import com.pj.project.tb_terminal.bo.MonitorDTO;
 import com.pj.project.tb_terminal.TbTerminalService;
 import com.pj.utils.sg.AjaxJson;
 import org.springframework.web.bind.annotation.RequestMapping;

+ 24 - 0
business-system/venues-system/src/main/java/com/pj/api/TerminalApi.java

@@ -0,0 +1,24 @@
+package com.pj.api;
+
+import com.pj.project.tb_terminal.bo.CheckBO;
+import com.pj.project.tb_terminal.TbTerminalService;
+import com.pj.utils.sg.AjaxJson;
+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;
+
+import javax.annotation.Resource;
+
+@RequestMapping("api/terminal")
+@RestController
+public class TerminalApi {
+
+    @Resource
+    private TbTerminalService tbTerminalService;
+
+    @PostMapping(value = "check")
+    public AjaxJson check(@RequestBody CheckBO checkBO){
+        return tbTerminalService.check(checkBO);
+    }
+}

+ 1 - 0
sp-core/src/main/java/com/pj/current/config/MyConfig.java

@@ -53,6 +53,7 @@ public class MyConfig {
 
 
 	private String ip;
+	private String netIp;
 	private int heartPort;
 	private int commandPort;
 	private String commandPrefix;

+ 1 - 0
sp-core/src/main/java/com/pj/current/netty/command/constants/CommandType.java

@@ -32,6 +32,7 @@ public enum CommandType {
     ISSUED_FINISH_COMMAND("cmd.device.finish","后台命令下发结束"),
     ISSUED_NORMALOPEN_COMMAND("cmd.device.normalopen","远程开门"),
     SYNC_TIME_COMMAND("cmd.device.sync.time","同步时间"),
+    TRAFFIC_COMMAND("cmd.device.traffic","下发控制参数"),
 
     ;
 

+ 39 - 37
sp-core/src/main/java/com/pj/current/netty/command/handler/impl/HealthlogHandler.java

@@ -89,53 +89,55 @@ public class HealthlogHandler implements IHandler {
         JSONObject params = JSONUtil.parseObj(packageDTO.getPayload().getParams());
         String str = params.getStr("log");
         HealthlogDTO dto = JSONUtil.toBean(str, HealthlogDTO.class);
-        String sn = params.getStr("sn");
-        TbTerminal tbTerminal = tbTerminalService.findBySN(sn);
         String idCard = dto.getIdentity_number();
         TbPersonFiling tbPersonFiling = tbPersonFilingService.findByIdCard(idCard);
-        if (tbPersonFiling == null && !dto.isAllow_through()) {
-            log.error("异常核验记录");
-            ctx.write(OKMsg.ok());
-            ctx.flush();
-            return;
-        }
+        boolean needJudge = (SpCfgUtil.fillingNeedJudge());
         if (tbPersonFiling == null) {
-            //todo 增加人员信息
+            if (!SpCfgUtil.termianlFilling()) {
+                log.error("系统不允许设备端进行备案============>删除设备端自动备份的信息,:{}",idCard);
+                tbPersonFilingService.deleteTerminalWhilte(idCard);
+                ctx.write(OKMsg.ok());
+                ctx.flush();
+                return;
+            }
+            //增加人员信息
+            Date now = new Date();
             TbDept dept = tbDeptService.findTheDept(TbDept.AdminTypeEnum.TEMP_TYPE.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(dept.getId()).setJudgeState(1).setJudgeBy("设备上传").setJudgeTime(now);
+            tbPersonFiling.setPin(idCard).setIdCard(dto.getIdentity_number())
+                    .setName(dto.getName()).setCreateBy("设备上传")
+                    .setCreateTime(now).setUpdateTime(now)
+                    .setDeptId(dept.getId()).setJudgeState(needJudge ? 0 : 1)
+                    .setJudgeBy("设备上传").setJudgeTime(needJudge ? null : now);
             tbPersonFilingService.save(tbPersonFiling);
-            taskService.addTask(new Base64ToImage(RandomUtil.randomNumbers(10),50,tbPersonFiling.getId(),dto.getPicture()));
+            taskService.addTask(new Base64ToImage(RandomUtil.randomNumbers(10), 50, tbPersonFiling.getId(), dto.getPicture()));
+            return;
         }
         Long deptId = tbPersonFiling.getDeptId();
         TbDept tbDept = tbDeptService.getById(deptId);
+        String sn = params.getStr("sn");
+        TbTerminal tbTerminal = tbTerminalService.findBySN(sn);
         Long venuesId = tbTerminal.getChannelId();
         TbVenues tbVenues = tbVenuesService.getById(venuesId);
         //车辆道闸判断
-        if (tbVenues!=null&&TbVenues.TypeEnum.CAR_CHANNEL.getType().equals(tbVenues.getType())) {
-            String key="result:"+venuesId;
-            String resultStr=RedisUtil.get(key);
-            ResultDTO resultDTO=JSONUtil.toBean(resultStr,ResultDTO.class);
-            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));
-                    if (resultDTO.getResult()!=null&&resultDTO.getResult()==0){
-                        Long recordId=resultDTO.getRecordId();
-                     TbCarVisitRecord tbCarVisitRecord= tbCarVisitRecordService.getById(recordId);
-                     tbCarVisitRecord.setDriverIdCard(dto.getIdentity_number()).setDriverName(dto.getName())
-                             .setDriverContact(tbPersonFiling.getPhone()).setAllowPass(1);
-                     tbCarVisitRecordService.updateById(tbCarVisitRecord);
-                    }
-                } else if (resultDTO.getResult()!=null&&resultDTO.getResult()==1) {
-                    openGate(resultDTO.getGateTerminalId(), venuesId);
+        if (tbVenues != null && TbVenues.TypeEnum.CAR_CHANNEL.getType().equals(tbVenues.getType())) {
+            String key = "result:" + venuesId;
+            String resultStr = RedisUtil.get(key);
+            ResultDTO resultDTO = JSONUtil.toBean(resultStr, ResultDTO.class);
+            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));
+                if (resultDTO.getResult() != null && resultDTO.getResult() == 0) {
+                    Long recordId = resultDTO.getRecordId();
+                    TbCarVisitRecord tbCarVisitRecord = tbCarVisitRecordService.getById(recordId);
+                    tbCarVisitRecord.setDriverIdCard(dto.getIdentity_number()).setDriverName(dto.getName())
+                            .setDriverContact(tbPersonFiling.getPhone()).setAllowPass(1);
+                    tbCarVisitRecordService.updateById(tbCarVisitRecord);
                 }
+            } else if (resultDTO.getResult() != null && resultDTO.getResult() == 1) {
+                openGate(resultDTO.getGateTerminalId(), venuesId);
             }
         }
 
@@ -161,16 +163,16 @@ public class HealthlogHandler implements IHandler {
             return;
         }
         //预警人员
-        if (tbVenues==null){
+        if (tbVenues == null) {
             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();
+        double minTemperature = SpCfgUtil.getMinTemperature();
         String healthStatus = dto.getHealth_status();
         String now = DateUtil.now();
-        if (Double.valueOf(minTemperature) < Double.valueOf(dto.getTemperature())) {
+        if (minTemperature < Double.valueOf(dto.getTemperature())) {
             log.info("发送体温异常提醒============");
             MsgDataBO msgDataBO = new MsgDataBO("您收到一条人员体温异常提醒", dto.getName(), dto.getTemperature(), now, "请及时处理");
             //todo 触发体温预警

+ 24 - 16
sp-core/src/main/java/com/pj/current/netty/command/handler/impl/UploadUserHandler.java

@@ -19,6 +19,7 @@ import com.pj.project.tb_person_filing.task.Base64ToImage;
 import com.pj.project.tb_person_filing.task.DelayIsuued;
 import com.pj.project.tb_terminal.TbTerminal;
 import com.pj.project.tb_terminal.TbTerminalService;
+import com.pj.project4sp.spcfg.SpCfgUtil;
 import io.netty.channel.ChannelHandlerContext;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
@@ -44,7 +45,6 @@ public class UploadUserHandler implements IHandler {
     private TbDeptService tbDeptService;
 
 
-
     @Override
     public CommandType commandType() {
         return CommandType.UPLOAD_USER;
@@ -52,11 +52,11 @@ public class UploadUserHandler implements IHandler {
 
     @Override
     public void handler(ChannelHandlerContext ctx, RequestPackageDTO packageDTO) {
-        log.info("设备上传人员信息:{}",JSONUtil.toJsonStr(packageDTO));
+        log.info("设备上传人员信息:{}", JSONUtil.toJsonStr(packageDTO));
         JSONObject params = JSONUtil.parseObj(packageDTO.getPayload().getParams());
         String sn = params.getStr("sn");
         TbTerminal tbTerminal = tbTerminalService.findBySN(sn);
-        if (tbTerminal == null ) {
+        if (tbTerminal == null) {
             log.error("========设备不存在=========:{}", sn);
             return;
         }
@@ -64,30 +64,38 @@ public class UploadUserHandler implements IHandler {
         tbTerminalService.updateById(tbTerminal);
         ctx.write(OKMsg.ok());
         ctx.flush();
+        boolean terminalFilling = SpCfgUtil.termianlFilling();
+        if (!terminalFilling) {
+            log.error("系统不允许设备端进行备案================");
+            return;
+        }
         WhitelistDTO uploadUserDTO = JSONUtil.toBean(params.getStr("users"), WhitelistDTO.class);
-        TbPersonFiling personFiling = tbPersonFilingService.findByIdCard(uploadUserDTO.getIdentity_number());
+        String idCarNo=uploadUserDTO.getIdentity_number();
+        TbPersonFiling personFiling = tbPersonFilingService.findByIdCard(idCarNo);
+        //是否允许设备端备案
         if (personFiling == null) {
-            TbPersonFiling   tbPersonFiling = new TbPersonFiling();
-           List<TbDept>deptList= tbDeptService.list();
-           deptList.stream().filter(tbDept -> tbDept.getPassType()==TbDept.PassTypeEnum.BLOW.getType()).findAny()
-                   .ifPresent(tbDept -> tbPersonFiling.setDeptId(tbDept.getId()));
+            TbPersonFiling tbPersonFiling = new TbPersonFiling();
+            TbDept dept = tbDeptService.findTheDept(TbDept.AdminTypeEnum.TEMP_TYPE.getType());
             Date now = new Date();
+            boolean needJudge = SpCfgUtil.fillingNeedJudge();
             tbPersonFiling.setCreateTime(now)
                     .setUpdateTime(now)
                     .setPin(uploadUserDTO.getPin())
-                    .setCreateBy("设备上传")
-                    .setIdCard(uploadUserDTO.getIdentity_number())
-                    .setJudgeState(1).setJudgeTime(now).setJudgeBy("终端备案上传")
+                    .setCreateBy("设备上传").setDeptId(dept.getId()).setDeptName(dept.getName())
+                    .setPin(idCarNo)
+                    .setIdCard(idCarNo)
+                    .setJudgeState(needJudge?0:1).setJudgeTime(needJudge?null:now).setJudgeBy(needJudge?"":"终端备案上传")
                     .setName(uploadUserDTO.getName());
             tbPersonFilingService.save(tbPersonFiling);
             //转换图片
-            taskService.addTask(new Base64ToImage(RandomUtil.randomNumbers(10),50,tbPersonFiling.getId(),uploadUserDTO.getPhoto()));
-            taskService.addTask(new DelayIsuued(RandomUtil.randomNumbers(11),4000,tbPersonFiling.getId(),sn));
-        }else {
-            if (!StrUtil.equals(personFiling.getPin(),uploadUserDTO.getPin())){
+            taskService.addTask(new Base64ToImage(RandomUtil.randomNumbers(10), 50, tbPersonFiling.getId(), uploadUserDTO.getPhoto()));
+            //分发人员信息到其他终端
+            taskService.addTask(new DelayIsuued(RandomUtil.randomNumbers(11), 4000, tbPersonFiling.getId(), sn));
+        } else {
+            if (!StrUtil.equals(personFiling.getPin(), uploadUserDTO.getPin())) {//更新pin
                 personFiling.setPin(uploadUserDTO.getPin());
                 tbPersonFilingService.updateById(personFiling);
-                taskService.addTask(new DelayIsuued(RandomUtil.randomNumbers(10),4000,personFiling.getId(),sn));
+                taskService.addTask(new DelayIsuued(RandomUtil.randomNumbers(10), 4000, personFiling.getId(), sn));
             }
         }
     }

+ 1 - 1
sp-core/src/main/java/com/pj/current/netty/heart/HeartBeatHandler.java

@@ -80,7 +80,7 @@ public class HeartBeatHandler extends ChannelInboundHandlerAdapter {
         tbTerminalService.initTerminal(sn, clientIp);
         ResponsePackageDTO responseDTO = new ResponsePackageDTO();
         ParamsDTO paramsDTO = new ParamsDTO();
-        paramsDTO.setIp(myConfig.getIp()).setPort(myConfig.getCommandPort());
+        paramsDTO.setIp(myConfig.getNetIp()).setPort(myConfig.getCommandPort());
         ResponsePackageDTO.PayloadBean payloadBean = new ResponsePackageDTO.PayloadBean();
         payloadBean.setParams(paramsDTO);
         responseDTO.setPayload(payloadBean);

+ 9 - 2
sp-core/src/main/java/com/pj/project/tb_gate_terminal/TbGateTerminalService.java

@@ -223,8 +223,8 @@ public class TbGateTerminalService extends ServiceImpl<TbGateTerminalMapper, TbG
         Long terminalId = tbGateTerminal.getId();
         String cacheCarNo = RECORD_CACHE.get(terminalId);
         if (StrUtil.isNotEmpty(cacheCarNo)) {
-            log.error("===========40秒内重复识别:{}============", carNo);
-            //return;
+            log.error("===========10秒内重复识别:{}============", carNo);
+            return;
         }
         if (tbGateTerminal.getDirection().equals(2)) {
             handlerOut(tbGateTerminal, bo);
@@ -305,6 +305,7 @@ public class TbGateTerminalService extends ServiceImpl<TbGateTerminalMapper, TbG
 
 
     private void cacheResult(String carNo, String now, Long venuesId, Long terminalId, Long recordId) {
+
         TbCarBlack tbCarBlack = tbCarBlackService.findByCarNo(carNo, now);
         String key = "result:" + venuesId;
         //是否在黑名单上
@@ -314,6 +315,12 @@ public class TbGateTerminalService extends ServiceImpl<TbGateTerminalMapper, TbG
             log.error("黑名单车辆:{}", carNo);
             return;
         }
+        TbVenues tbVenues=  tbVenuesService.getById(venuesId);
+        if (tbVenues.getStatus()==0){
+            RedisUtil.set(key, JSONUtil.toJsonStr(dto));
+            log.error("防疫策略不开放:{}", carNo);
+            return;
+        }
         TbCarFiling tbCarFiling = tbCarFilingService.findByCarNo(carNo);
         //是否备案
         if (tbCarFiling == null) {

+ 12 - 5
sp-core/src/main/java/com/pj/project/tb_person_black/TbPersonBlackService.java

@@ -57,7 +57,7 @@ public class TbPersonBlackService extends ServiceImpl<TbPersonBlackMapper, TbPer
         if (!IdcardUtil.isValidCard(t.getIdCard())) {
             throw new BusinessException("身份证不正确");
         }
-        TbPersonBlack db = findByIdCardAndDeptId(t.getIdCard(), t.getDeptId());
+        TbPersonBlack db = findByIdCard(t.getIdCard());
         if (db != null) {
             throw new BusinessException("人员已经存在");
         }
@@ -98,7 +98,7 @@ public class TbPersonBlackService extends ServiceImpl<TbPersonBlackMapper, TbPer
         if (!IdcardUtil.isValidCard(t.getIdCard())) {
             throw new BusinessException("身份证不正确");
         }
-        TbPersonBlack idCardDb = findByIdCardAndDeptId(t.getIdCard(), t.getDeptId());
+        TbPersonBlack idCardDb = findByIdCard(t.getIdCard());
         if (idCardDb != null && !idCardDb.getId().equals(t.getId())) {
             throw new BusinessException("人员已存在");
         }
@@ -171,7 +171,7 @@ public class TbPersonBlackService extends ServiceImpl<TbPersonBlackMapper, TbPer
         List<TbTerminal> terminals = tbTerminalService.list();
         JSONObject users = builderData(tbPersonBlack);
         terminals.forEach(tbTerminal -> {
-            log.error("下发黑名单,users:{},{}", tbTerminal.getSn(),JSONUtil.toJsonStr(users));
+            log.error("下发黑名单,users:{},{}", tbTerminal.getSn(), JSONUtil.toJsonStr(users));
             tbTerminalService.setCommand(CommandType.ISSUED_BLACKLIST_COMMAND.getFuncId(), users, tbTerminal);
             tbTerminalService.startHeartCommand(tbTerminal.getSn());
         });
@@ -203,9 +203,8 @@ public class TbPersonBlackService extends ServiceImpl<TbPersonBlackMapper, TbPer
         return list(ew);
     }
 
-    public TbPersonBlack findByIdCardAndDeptId(String idCard, Long deptId) {
+    public TbPersonBlack findByIdCard(String idCard) {
         QueryWrapper<TbPersonBlack> ew = new QueryWrapper<>();
-        ew.eq("dept_id", deptId);
         ew.eq("id_card", idCard);
         return getOne(ew);
     }
@@ -223,4 +222,12 @@ public class TbPersonBlackService extends ServiceImpl<TbPersonBlackMapper, TbPer
                 .le("date_format('end_time','%Y-%m-%d %h:%s')", eTime);
         return list(ew);
     }
+
+    public TbPersonBlack findByIdCardAndTime(String idCard, String now) {
+        QueryWrapper<TbPersonBlack> ew = new QueryWrapper<>();
+        ew.lambda().eq(TbPersonBlack::getIdCard, idCard);
+        ew.ge("date_format('end_time','%Y-%m-%d %h:%s:%i')", now)
+                .le("date_format('end_time','%Y-%m-%d %h:%s:%i')", now);
+        return getOne(ew);
+    }
 }

+ 2 - 1
sp-core/src/main/java/com/pj/project/tb_terminal/TbTerminal.java

@@ -76,7 +76,8 @@ public class TbTerminal extends Model<TbTerminal> implements Serializable {
 	/**
 	 * 场所ID 
 	 */
-	private Long venuesId;	
+	private Long venuesId;
+
 	private Integer direction;
 
 	/**

+ 1 - 0
sp-core/src/main/java/com/pj/project/tb_terminal/TbTerminalMapper.java

@@ -2,6 +2,7 @@ package com.pj.project.tb_terminal;
 
 import java.util.List;
 
+import com.pj.project.tb_terminal.bo.MonitorDTO;
 import org.apache.ibatis.annotations.Mapper;
 
 import com.pj.utils.so.*;

+ 1 - 1
sp-core/src/main/java/com/pj/project/tb_terminal/TbTerminalMapper.xml

@@ -74,7 +74,7 @@
 			<otherwise> id desc </otherwise>
 		</choose>
 	</select>
-    <select id="getMonitor" resultType="com.pj.project.tb_terminal.MonitorDTO">
+    <select id="getMonitor" resultType="com.pj.project.tb_terminal.bo.MonitorDTO">
 		SELECT
 			NAME,
 			ip_address AS ip,

+ 79 - 13
sp-core/src/main/java/com/pj/project/tb_terminal/TbTerminalService.java

@@ -2,34 +2,40 @@ package com.pj.project.tb_terminal;
 
 import java.util.Date;
 import java.util.List;
-import java.util.Set;
 
 import cn.dev33.satoken.stp.StpUtil;
+import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.RandomUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.json.JSONObject;
 import cn.hutool.json.JSONUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.update.Update;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.pj.current.config.MyConfig;
 import com.pj.current.global.BusinessException;
 import com.pj.current.netty.command.constants.CommandType;
-import com.pj.current.netty.dto.ParamsDTO;
 import com.pj.current.netty.dto.RequestPackageDTO;
-import com.pj.current.netty.dto.ResponsePackageDTO;
 import com.pj.current.netty.heart.HeartBeatHandler;
 import com.pj.current.satoken.StpUserUtil;
 import com.pj.project.tb_command_log.TbCommandLog;
 import com.pj.project.tb_command_log.TbCommandLogService;
+import com.pj.project.tb_dept.TbDept;
+import com.pj.project.tb_dept.TbDeptService;
+import com.pj.project.tb_person_black.TbPersonBlack;
 import com.pj.project.tb_person_black.TbPersonBlackService;
+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;
+import com.pj.project.tb_terminal.bo.CheckBO;
+import com.pj.project.tb_terminal.bo.CheckDataDTO;
+import com.pj.project.tb_terminal.bo.MonitorDTO;
 import com.pj.project.tb_venues.TbVenues;
 import com.pj.project.tb_venues.TbVenuesService;
+import com.pj.project4sp.spcfg.SpCfgUtil;
 import com.pj.utils.cache.RedisUtil;
-import io.netty.channel.ChannelHandlerContext;
+import com.pj.utils.sg.AjaxJson;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -67,6 +73,8 @@ public class TbTerminalService extends ServiceImpl<TbTerminalMapper, TbTerminal>
 
     @Resource
     private TbPersonBlackService tbPersonBlackService;
+    @Resource
+    private TbDeptService tbDeptService;
 
 
     /**
@@ -193,6 +201,7 @@ public class TbTerminalService extends ServiceImpl<TbTerminalMapper, TbTerminal>
 
     /**
      * 查看设备属性,不记录日志
+     *
      * @param funcId
      * @param sn
      */
@@ -226,7 +235,7 @@ public class TbTerminalService extends ServiceImpl<TbTerminalMapper, TbTerminal>
      */
     public void unbind(Long id) {
         TbTerminal tbTerminal = this.getById(id);
-        if (StrUtil.equals(tbTerminal.getState(),TbTerminal.StateType.OFFLINE.getState())){
+        if (StrUtil.equals(tbTerminal.getState(), TbTerminal.StateType.OFFLINE.getState())) {
             throw new BusinessException("设备已离线");
         }
         tbTerminalMapper.unbind(id);
@@ -239,7 +248,7 @@ public class TbTerminalService extends ServiceImpl<TbTerminalMapper, TbTerminal>
      */
     public void clearData(Long id) {
         TbTerminal tbTerminal = this.getById(id);
-        if (StrUtil.equals(tbTerminal.getState(),TbTerminal.StateType.OFFLINE.getState())){
+        if (StrUtil.equals(tbTerminal.getState(), TbTerminal.StateType.OFFLINE.getState())) {
             throw new BusinessException("设备已离线");
         }
         this.clearData(tbTerminal);
@@ -258,7 +267,6 @@ public class TbTerminalService extends ServiceImpl<TbTerminalMapper, TbTerminal>
     }
 
 
-
     /**
      * 清空所有数据
      *
@@ -271,12 +279,13 @@ public class TbTerminalService extends ServiceImpl<TbTerminalMapper, TbTerminal>
 
     /**
      * 远程开门
+     *
      * @param id
      */
     public void open(Long id) {
         log.info("==========远程开闸============");
         TbTerminal tbTerminal = this.getById(id);
-        if (StrUtil.equals(tbTerminal.getState(),TbTerminal.StateType.OFFLINE.getState())){
+        if (StrUtil.equals(tbTerminal.getState(), TbTerminal.StateType.OFFLINE.getState())) {
             throw new BusinessException("设备已离线");
         }
         setCommand(CommandType.ISSUED_NORMALOPEN_COMMAND.getFuncId(), null, tbTerminal);
@@ -285,15 +294,16 @@ public class TbTerminalService extends ServiceImpl<TbTerminalMapper, TbTerminal>
 
     /**
      * 同步时间
+     *
      * @param id
      */
-    public void asyncTime(Long id){
+    public void asyncTime(Long id) {
         TbTerminal tbTerminal = this.getById(id);
-        if (StrUtil.equals(tbTerminal.getState(),TbTerminal.StateType.OFFLINE.getState())){
+        if (StrUtil.equals(tbTerminal.getState(), TbTerminal.StateType.OFFLINE.getState())) {
             throw new BusinessException("设备已离线");
         }
-        JSONObject params=new JSONObject();
-        params.set("time",System.currentTimeMillis()/1000);
+        JSONObject params = new JSONObject();
+        params.set("time", System.currentTimeMillis() / 1000);
         setCommand(CommandType.SYNC_TIME_COMMAND.getFuncId(), params, tbTerminal);
         startHeartCommand(tbTerminal.getSn());
 
@@ -308,4 +318,60 @@ public class TbTerminalService extends ServiceImpl<TbTerminalMapper, TbTerminal>
     public List<MonitorDTO> getMonitor() {
         return tbTerminalMapper.getMonitor();
     }
+
+    /**
+     * 终端请求是否放行
+     *
+     * @param checkBO
+     * @return
+     */
+    public AjaxJson check(CheckBO checkBO) {
+        log.info("设备请求放行接口:{}", JSONUtil.toJsonStr(checkBO));
+        int acidLimit = SpCfgUtil.getAcidLimit();
+        int tourLimit = SpCfgUtil.getTourLimit();
+        String now = DateUtil.now();
+        String idCard = checkBO.getIdentity_number();
+        CheckDataDTO checkDataDTO = new CheckDataDTO();
+        checkDataDTO.setNucleic_restrict(acidLimit)
+                .setTrip_restrict(tourLimit).setIs_pass(0);
+        //是否备案、备案是否通过审核
+        TbPersonFiling tbPersonFiling = tbPersonFilingService.findByIdCard(idCard);
+        if (tbPersonFiling == null || tbPersonFiling.getJudgeState() == 0) {
+            log.info("返回信息:{},{}", "人员未备案", JSONUtil.toJsonStr(checkDataDTO));
+            return AjaxJson.getSuccess("人员未备案", checkDataDTO);
+        }
+        TbDept tbDept = tbDeptService.getById(tbPersonFiling.getDeptId());
+        String msg = tbDept.getName() + tbPersonFiling.getName();
+        //体温是否异常
+        double minTemperature = SpCfgUtil.getMinTemperature();
+        if (minTemperature < checkBO.getTemperature()) {
+            log.info("返回信息体温过高:{},{}", msg, JSONUtil.toJsonStr(checkDataDTO));
+            return AjaxJson.getSuccess(msg, checkDataDTO);
+        }
+        //健康码是否绿码
+        if (!StrUtil.equals(TbPersonVisitRecord.HealthEnum.GREEN.getStatus(), checkBO.getHealth_status())) {
+            log.info("返回信息健康码异常:{},{}", msg, JSONUtil.toJsonStr(checkDataDTO));
+            return AjaxJson.getSuccess(msg, checkDataDTO);
+        }
+        //黑名单用户
+        TbPersonBlack black = tbPersonBlackService.findByIdCardAndTime(idCard, now);
+        if (black != null) {
+            log.info("返回信息黑名单:{},{}", msg, JSONUtil.toJsonStr(checkDataDTO));
+            return AjaxJson.getSuccess(msg, checkDataDTO);
+        }
+        //通道是否开放
+        TbTerminal tbTerminal = this.findBySN(checkBO.getSn());
+        if (tbTerminal==null){
+            log.info("返回信息非法设备:{},{}", msg, JSONUtil.toJsonStr(checkDataDTO));
+            return AjaxJson.getSuccess("非法设备", checkDataDTO);
+        }
+        TbVenues tbVenues = tbVenuesService.getById(tbTerminal.getChannelId());
+        if (tbVenues.getStatus()==0){
+            log.info("返回信息通道关闭放行:{},{}", msg, JSONUtil.toJsonStr(checkDataDTO));
+            return AjaxJson.getSuccess(msg, checkDataDTO);
+        }
+        checkDataDTO.setIs_pass(1);
+        return AjaxJson.getSuccess(msg, checkDataDTO);
+    }
+
 }

+ 16 - 0
sp-core/src/main/java/com/pj/project/tb_terminal/bo/CheckBO.java

@@ -0,0 +1,16 @@
+package com.pj.project.tb_terminal.bo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+public class CheckBO implements Serializable {
+    private String identity_number;
+    private String name;
+    private String sn;
+    private String health_status;
+    private Double temperature;
+    private Date date;
+}

+ 26 - 0
sp-core/src/main/java/com/pj/project/tb_terminal/bo/CheckDataDTO.java

@@ -0,0 +1,26 @@
+package com.pj.project.tb_terminal.bo;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+@Data
+@Accessors(chain = true)
+@NoArgsConstructor
+@AllArgsConstructor
+public class CheckDataDTO implements Serializable {
+    /**
+     * 核酸限制
+     */
+    private int nucleic_restrict;
+    /**
+     * 行程卡限制
+     */
+    private int trip_restrict;
+    /**
+     * 是否通行
+     */
+    private int is_pass;
+}

+ 1 - 1
sp-core/src/main/java/com/pj/project/tb_terminal/MonitorDTO.java → sp-core/src/main/java/com/pj/project/tb_terminal/bo/MonitorDTO.java

@@ -1,4 +1,4 @@
-package com.pj.project.tb_terminal;
+package com.pj.project.tb_terminal.bo;
 
 import lombok.Data;
 import lombok.experimental.Accessors;

+ 5 - 0
sp-core/src/main/java/com/pj/project/tb_venues/TbVenues.java

@@ -39,6 +39,7 @@ public class TbVenues extends Model<TbVenues> implements Serializable {
     public static final String PERMISSION_CODE_ADD = "tb-venues-add";
     public static final String PERMISSION_CODE_EDIT = "tb-venues-edit";
     public static final String PERMISSION_CODE_DEL = "tb-venues-del";
+    public static final String TB_TACTICS_SETTING = "tb-tactics-setting";
 
 
     // ---------- 表中字段 ----------
@@ -65,6 +66,10 @@ public class TbVenues extends Model<TbVenues> implements Serializable {
      * 1人行 2 车行
      */
     private Integer type;
+    /**
+     * 状态 0 关闭 1开启
+     */
+    private Integer status=1;
 
     /**
      * 创建时间

+ 18 - 4
sp-core/src/main/java/com/pj/project/tb_venues/TbVenuesService.java

@@ -109,19 +109,33 @@ public class TbVenuesService extends ServiceImpl<TbVenuesMapper, TbVenues> imple
         List<TbTerminal> tbTerminalList = tbTerminalService.findByChannelId(id);
         tbTerminalList.forEach(tbTerminal -> tbTerminalService.open(tbTerminal.getId()));
         List<TbGateTerminal> tbGateTerminals = tbGateTerminalService.findByVenuesId(id);
-        boolean flag=!tbTerminalList.isEmpty()&&!tbGateTerminals.isEmpty();
-        if (!flag){
+        boolean flag = !tbTerminalList.isEmpty() && !tbGateTerminals.isEmpty();
+        if (!flag) {
             return AjaxJson.getError("该通道无设备");
         }
-        tbGateTerminals.stream().filter(tbGateTerminal -> tbGateTerminal.getDirection()==1)
+        tbGateTerminals.stream().filter(tbGateTerminal -> tbGateTerminal.getDirection() == 1)
                 .forEach(tbGateTerminal -> {
                     try {
                         tbGateTerminalService.open(tbGateTerminal.getId());
                     } catch (Exception e) {
-                       log.error("开道闸失败:{}",e.getMessage());
+                        log.error("开道闸失败:{}", e.getMessage());
                         throw new BusinessException("道闸通讯异常");
                     }
                 });
         return AjaxJson.getSuccess();
     }
+
+    public void setting(long id, int status) {
+        TbVenues tbVenues = this.getById(id);
+        tbVenues.setStatus(status).setUpdateTime(new Date());
+        List<TbVenues> list = findByPid(id);
+        list.forEach(v -> v.setStatus(status).setUpdateTime(new Date()));
+        if (tbVenues.getPId() != -1 && status == 1) {
+            TbVenues parent = this.getById(tbVenues.getPId());
+            parent.setStatus(status);
+            list.add(parent);
+        }
+        list.add(tbVenues);
+        this.updateBatchById(list);
+    }
 }

+ 144 - 97
sp-core/src/main/java/com/pj/project4sp/spcfg/SpCfgUtil.java

@@ -2,6 +2,7 @@ package com.pj.project4sp.spcfg;
 
 import java.util.Map;
 
+import cn.hutool.core.util.StrUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
@@ -10,106 +11,152 @@ import com.pj.utils.sg.NbUtil;
 
 /**
  * DB活动配置操作工具类
- * 
- * @author kong
  *
+ * @author kong
  */
 @Component
 public class SpCfgUtil {
 
-	private static SpCfgService sysCfgService;
-	@Autowired
-	public void setSysCfgService(SpCfgService sysCfgService) {
-		SpCfgUtil.sysCfgService = sysCfgService;
-	}
-
-	
-	// ====================== 快捷读取 DB 配置信息 ========================== 
-
-	/**
-	 * 获取指定【cfgName】的配置,指定key项,并转化为String值 , 取不到值时,给默认值【defaultValue】
-	 * @param cfgName
-	 * @param key
-	 * @param defaultValue
-	 * @return
-	 */
-	@SuppressWarnings({ "unchecked", "rawtypes" })
-	private static String getCfgBy(String cfgName, String key, String defaultValue) {
-		// 1、获取配置字符串 
-		String cfgJson = sysCfgService.getCfgValue(cfgName);
-		// 2、转换成Map
-		Map<String, Object> maps = (Map)JSON.parse(cfgJson);
-		// 3、取值
-		Object value = maps.get(key);
-		if (value == null) {
-			return defaultValue;
-		}
-		return value.toString();
-	}
-	
-	/**
-	 * 获取server端指定配置信息 
-	 * @param key
-	 * @param defaultValue
-	 * @return
-	 */
-	public static String getServerCfg(String key, String defaultValue) {
-		return SpCfgUtil.getCfgBy("server_cfg", key, defaultValue);
-	}
-	
-	/**
-	 * 获取App端指定配置信息 
-	 * @param key
-	 * @param defaultValue
-	 * @return
-	 */
-	public static String getAppCfg(String key, String defaultValue) {
-		return SpCfgUtil.getCfgBy("app_cfg", key, defaultValue);
-	}
-	// 获取配置信息:备案审核 1审核 2不审核
-	public static String getFillingJudge() {
-		return SpCfgUtil.getServerCfg("fillingJudge", "1");
-	}
-	// 获取配置信息:备案审核 1审核 2不审核
-	public static String getMinTemperature() {
-		return SpCfgUtil.getServerCfg("minTemperature", "37.5");
-	}
-	// 获取配置信息:备案审核 1审核 2不审核
-	public static String getAlarmConfig() {
-		return SpCfgUtil.getServerCfg("sendAlarm", "1");
-	}
-	
-	// ====================== 获取指定配置 ========================== 
-
-	/** 获取app端全部配置信息 */
-	public static String getAppCfg() {
-		return sysCfgService.getCfgValue("app_cfg");
-	}
-
-	// --- app  
-	/** 获取配置信息:系统名称  */
-	public static String appName() {
-		return SpCfgUtil.getAppCfg("appName", "");
-	}
-	/** 获取配置信息:版本号  */
-	public static String appVersionNo() {
-		return SpCfgUtil.getAppCfg("appVersionNo", "");
-	}
-
-	// --- server  
-	/** 预留信息  */
-	public static String reserveInfo() {
-		return SpCfgUtil.getServerCfg("reserveInfo", "");
-	}
-
-	/** 随机返回一个:新用户头像地址 */
-	public static String userDefaultAvatar() {
-		String[] avatarArray = SpCfgUtil.getServerCfg("userDefaultAvatar", "").split(",");
-		int index = NbUtil.getRandom(0, avatarArray.length - 1);
-		return avatarArray[index];
-	}
-	
-	
-	
-	
+    private static SpCfgService sysCfgService;
+
+    @Autowired
+    public void setSysCfgService(SpCfgService sysCfgService) {
+        SpCfgUtil.sysCfgService = sysCfgService;
+    }
+
+
+    // ====================== 快捷读取 DB 配置信息 ==========================
+
+    /**
+     * 获取指定【cfgName】的配置,指定key项,并转化为String值 , 取不到值时,给默认值【defaultValue】
+     *
+     * @param cfgName
+     * @param key
+     * @param defaultValue
+     * @return
+     */
+    @SuppressWarnings({"unchecked", "rawtypes"})
+    private static String getCfgBy(String cfgName, String key, String defaultValue) {
+        // 1、获取配置字符串
+        String cfgJson = sysCfgService.getCfgValue(cfgName);
+        // 2、转换成Map
+        Map<String, Object> maps = (Map) JSON.parse(cfgJson);
+        // 3、取值
+        Object value = maps.get(key);
+        if (value == null) {
+            return defaultValue;
+        }
+        return value.toString();
+    }
+
+    /**
+     * 获取server端指定配置信息
+     *
+     * @param key
+     * @param defaultValue
+     * @return
+     */
+    public static String getServerCfg(String key, String defaultValue) {
+        return SpCfgUtil.getCfgBy("server_cfg", key, defaultValue);
+    }
+
+    /**
+     * 获取App端指定配置信息
+     *
+     * @param key
+     * @param defaultValue
+     * @return
+     */
+    public static String getAppCfg(String key, String defaultValue) {
+        return SpCfgUtil.getCfgBy("app_cfg", key, defaultValue);
+    }
+
+    // 获取配置信息:备案审核 1审核 2不审核
+    public static String getFillingJudge() {
+        return SpCfgUtil.getServerCfg("fillingJudge", "1");
+    }
+
+    // 获取配置信息:行程卡限制
+    public static boolean tourLimit() {
+        return StrUtil.equals(SpCfgUtil.getServerCfg("tourLimit", "1"), "1");
+    }
+
+    // 获取配置信息:行程卡限制
+    public static int getTourLimit() {
+        return Integer.parseInt(SpCfgUtil.getServerCfg("tourLimit", "1"));
+    }
+
+    // 获取配置信息:设备端是否能备案
+    public static boolean termianlFilling() {
+        return StrUtil.equals(SpCfgUtil.getServerCfg("termianlFilling", "1"), "1");
+    }
+
+    // 获取配置信息:核酸限制0 24
+    public static int getAcidLimit() {
+        return Integer.valueOf(SpCfgUtil.getServerCfg("acidLimit", "24"));
+    }
+
+    /**
+     * 是否需要审核
+     *
+     * @return
+     */
+    public static boolean fillingNeedJudge() {
+        return StrUtil.equals(SpCfgUtil.getServerCfg("fillingJudge", "1"), "1");
+    }
+
+    // 获取配置信息:备案审核 1审核 2不审核
+    public static double getMinTemperature() {
+        return Double.valueOf(SpCfgUtil.getServerCfg("minTemperature", "36.5"));
+    }
+
+    // 获取配置信息:备案审核 1审核 2不审核
+    public static String getAlarmConfig() {
+        return SpCfgUtil.getServerCfg("sendAlarm", "1");
+    }
+
+    // ====================== 获取指定配置 ==========================
+
+    /**
+     * 获取app端全部配置信息
+     */
+    public static String getAppCfg() {
+        return sysCfgService.getCfgValue("app_cfg");
+    }
+
+    // --- app
+
+    /**
+     * 获取配置信息:系统名称
+     */
+    public static String appName() {
+        return SpCfgUtil.getAppCfg("appName", "");
+    }
+
+    /**
+     * 获取配置信息:版本号
+     */
+    public static String appVersionNo() {
+        return SpCfgUtil.getAppCfg("appVersionNo", "");
+    }
+
+    // --- server
+
+    /**
+     * 预留信息
+     */
+    public static String reserveInfo() {
+        return SpCfgUtil.getServerCfg("reserveInfo", "");
+    }
+
+    /**
+     * 随机返回一个:新用户头像地址
+     */
+    public static String userDefaultAvatar() {
+        String[] avatarArray = SpCfgUtil.getServerCfg("userDefaultAvatar", "").split(",");
+        int index = NbUtil.getRandom(0, avatarArray.length - 1);
+        return avatarArray[index];
+    }
+
+
 }

+ 3 - 2
sp-start/src/main/resources/application-dev.yml

@@ -46,8 +46,9 @@ spring:
     # 项目自定义配置
     myconfig:
         # 本项目部署到的服务器域名(文件上传等等模块  要用到)
-        domain: http://192.168.1.4:8099
-        ip: 192.168.1.4
+        domain: http://192.168.1.3:8099
+        ip: 192.168.3.27
+        net-ip: 192.168.3.22
         heart-port: 9999
         command-port: 8888
         command-prefix: "command:"