1.软加密不再使用c的dll

2.报警情况记录
3.报警情况采用html
4.接口根据文档修改
dongguan-huaweiyun
LAPTOP-S9HJSOEB\昊天 2 years ago
parent 9c254c1cb5
commit ff7955c2e2

@ -1,28 +1,31 @@
package encryptor;
import java.lang.reflect.Field;
public class Encryptor {
public native static String encryptStr(String str);
static
{
try{
String path = System.getProperty("user.dir")+"\\libs\\encrypt";
System.setProperty("java.library.path", path);
Field fieldSysPath = ClassLoader.class.getDeclaredField("sys_paths");
fieldSysPath.setAccessible(true);
fieldSysPath.set(null, null);
import static com.alibaba.druid.filter.config.ConfigTools.encrypt;
System.loadLibrary("Encryptor");
}catch(Exception e)
{
System.out.println(e);
public class Encryptor {
public static String encryptStr(String str){
long ulMacTmp = 0;
for (int i = 0; i < str.length(); i++) {
ulMacTmp = ulMacTmp << 4;
char cStr = str.charAt(i);
if (cStr >= '0' && cStr <= '9') {
ulMacTmp += (long)(str.charAt(i) - '0');
} else if (cStr >= 'a' && cStr <= 'f') {
ulMacTmp += (long)(str.charAt(i) - 'a' + 10);
} else if (cStr >= 'A' && cStr <= 'F') {
ulMacTmp += (long)(str.charAt(i) - 'A' + 10);
} else {
ulMacTmp += 0;
}
}
str = String.valueOf(ulMacTmp);
return str;
}
public static void main(String[] args)
{
String noEncrypt = "12345";
String noEncrypt = "BFEBFBFF000B06710025_38BC_21C3_A29D.";
String encrypt = Encryptor.encryptStr(noEncrypt);
System.out.println(encrypt);
}

@ -50,7 +50,9 @@ public class ConfigProperties {
private Integer cameraPort;
private Long delayCaptureTime;
private String cameraUrl;
private String workUrl;
private Long runningDelayCaptureTime;
private Long C1DelayCaptureTime;

@ -330,9 +330,10 @@ public class CameraControlController {
public Result pic(@PathVariable Integer id) {
checkLogin(id);
ConfigProperties.SavePath savePath = configProperties.getSavePath();
String path = "D:\\work\\"+LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))+".jpeg";
TaskDelayExecutor.addPicDelayTask(id,path,2000L,savePath);
return Result.success();
String path = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))+".jpeg";
String filePath = "D:\\work\\"+path;
TaskDelayExecutor.addPicDelayTask(id,filePath,2000L,savePath);
return Result.success(configProperties.getCameraConfig().getWorkUrl()+path);
}
@Resource

@ -61,6 +61,14 @@ public class CameraController {
return new Result<>(cameraService.add(camera));
}
@PostMapping("/add")
@ApiOperation(value = "球机新增 ")
@LicenseHandler
public Result<Integer> addCamera(@RequestBody Camera camera) {
cameraService.add(camera);
return new Result<>(camera.getId());
}
@PostMapping("/config/import")
@ApiOperation(value = "球机IO导入 ")
public Result upload(MultipartFile file) throws IOException {

@ -17,6 +17,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@ -40,20 +41,26 @@ public class DeviceController {
@PostMapping("warn")
public Result<Map<String, List<String>>> warn(@RequestBody DeviceReq deviceReq) {
log.info("{}设备报警", deviceReq.getDeviceCode());
plcService.warnStart(deviceReq);
Map<String, List<String>> map =
return Result.success(checkLogService.list());
// 1:设备报警
deviceReq.setType("1");
List<String> list =plcService.warn(deviceReq);
Map<String, List<String>> map1 = new HashMap<>();
map1.put("url",list);
return Result.success(map1);
}
@ApiOperation("设备报警")
@PostMapping("巡检")
@PostMapping("inspection")
public Result<Map<String, List<String>>> inspection(@RequestBody DeviceReq deviceReq) {
return Result.success(checkLogService.list());
log.info("{}设备巡检", deviceReq.getDeviceCode());
// 1:设备巡检
deviceReq.setType("2");
List<String> list =plcService.warn(deviceReq);
Map<String, List<String>> map1 = new HashMap<>();
map1.put("url",list);
return Result.success(map1);
}
}

@ -2,6 +2,7 @@ package com.leaper.web.controller;
import com.github.pagehelper.PageInfo;
import com.leaper.common.util.ValidatorUtil;
import com.leaper.web.service.ksec.KsecInfo;
import com.zhehekeji.core.pojo.Result;
import com.leaper.web.pojo.OrderSaveReq;
import com.leaper.web.pojo.OrderSearch;
@ -62,6 +63,20 @@ public class OrderController {
return Result.success();
}
@ApiOperation("工单")
@PostMapping("/orderDecoder")
public Result orderDecoder(@RequestBody KsecInfo ksecInfo){
plcService.orderDecoder(ksecInfo);
return Result.success();
}
/*
@ApiOperation("发生告警")
@GetMapping("/error")
public Result orderError(@ApiParam("plc") @RequestParam String plcId){
@ -75,6 +90,7 @@ public class OrderController {
plcService.warnStop(plcId);
return Result.success();
}
*/
@PostMapping("/list")
@ApiOperation(value = "查询")

@ -41,6 +41,27 @@ public class RealTimeController {
return Result.success(cameraService.allCameras());
}
@GetMapping("/allCameras1")
@ApiOperation(value = "全部球机1")
//@SessionHandler
public Result<List<Camera>> allCameras1() {
return Result.success(cameraService.allCameras1());
}
@GetMapping("/allCameras2")
@ApiOperation(value = "全部球机2")
//@SessionHandler
public Result<List<Camera>> allCameras2() {
return Result.success(cameraService.allCameras2());
}
@GetMapping("/allCameras3")
@ApiOperation(value = "全部球机3")
//@SessionHandler
public Result<List<Camera>> allCameras3() {
return Result.success(cameraService.allCameras3());
}
@GetMapping("/allAreas")
@ApiOperation(value = "全部库区")
//@SessionHandler

@ -2,18 +2,44 @@ package com.leaper.web.entity;
import lombok.Data;
import java.time.LocalDateTime;
import java.util.List;
@Data
public class DeviceReq {
String deviceCode ;
String warmName ;
List<CameraList> cameraList ;
String deviceCode;
String warmName;
List<CameraList> cameraList;
private String type;
@Data
public static class CameraList {
String cameraCode ;
String cameraName ;
String cameraId ;
String warnCode ;
String cameraCode;
String cameraName;
Long cameraId;
String warnCode;
}
public Warn getWarn() {
Warn warn = new Warn();
warn.setDeviceCode(this.deviceCode);
warn.setWarnName(this.warmName);
warn.setType(this.type);
warn.setStartTime(LocalDateTime.now());
return warn;
}
public List<WarnUrl> getWarnUrlList(Warn warn) {
List<WarnUrl> warnUrlList = new java.util.ArrayList<>();
for (CameraList cameraList : this.cameraList) {
WarnUrl warnUrl = new WarnUrl();
warnUrl.setWarnId(warn.getId());
warnUrl.setType(warn.getType());
warnUrl.setCameraId(cameraList.getCameraId());
warnUrl.setCameraCode(cameraList.getCameraCode());
warnUrl.setType(this.type);
}
return warnUrlList;
}
}

@ -17,28 +17,24 @@ public class Warn {
@TableId(type = IdType.AUTO)
private Long id;
private Integer deviceCode;
private Integer streetId;
private String deviceCode;
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")
private LocalDateTime startTime;
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")
private LocalDateTime endTime;
@ApiModelProperty("视频图片地址")
@TableField("`video_path_1`")
private String videoPath1;
@ApiModelProperty("视频图片地址")
@TableField("`video_path_2`")
private String videoPath2;
private String location;
@TableField("`signal`")
private String signal;
@TableField("`warn_name`")
private String warnName;
@TableField("`type`")
private String type;
//发生告警时打断的工单
private Long orderId;
}

@ -0,0 +1,17 @@
package com.leaper.web.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
@Data
public class WarnUrl {
@TableId(type = IdType.AUTO)
private Long id;
private Long warnId;
private Long cameraId;
private String cameraCode;
private String url;
private String type;
}

@ -0,0 +1,7 @@
package com.leaper.web.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.leaper.web.entity.WarnUrl;
public interface WarnUrlMapper extends BaseMapper<WarnUrl> {
}

@ -36,6 +36,7 @@ import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.List;
import java.util.concurrent.CountDownLatch;
import java.util.stream.Collectors;
@Service
@Slf4j
@ -161,6 +162,40 @@ public class CameraService {
return cameraMapper.selectByMap(new HashMap<>());
}
/**
* HD01 - HD05
* @return
*/
public List<Camera> allCameras1(){
List<Camera> cameras = cameraMapper.selectByMap(new HashMap<>());
return cameras.stream().filter(camera -> {
int index = Integer.valueOf(camera.getName().substring(2, 4));
boolean b = index >= 1 && index <= 5;
return b;
}).collect(Collectors.toList());
}
public List<Camera> allCameras2(){
List<Camera> cameras = cameraMapper.selectByMap(new HashMap<>());
return cameras.stream().filter(camera -> {
int index = Integer.valueOf(camera.getName().substring(2, 4));
boolean b = index >= 6 && index <= 10;
return b;
}).collect(Collectors.toList());
}
public List<Camera> allCameras3(){
List<Camera> cameras = cameraMapper.selectByMap(new HashMap<>());
return cameras.stream().filter(camera -> {
int index = Integer.valueOf(camera.getName().substring(2, 4));
boolean b = index >= 11 && index <= 15;
return b;
}).collect(Collectors.toList());
}
public List<Camera> getCamerasByRtcServer(String rtcServer){
if(StringUtils.isEmpty(rtcServer)){
rtcServer = "127.0.0.1";

@ -168,10 +168,10 @@ public class CommandRunnable implements Runnable{
String warnCode0 = Cmd.D1.name()+"-"+warnCode.split(",")[0];
plcService.warnAction(plcCmdInfo,warnCode0);
}
plcService.warnStart(plcCmdInfo.getPlcId(),dataInfo.getWarnCode());
//plcService.warnStart(plcCmdInfo.getPlcId(),dataInfo.getWarnCode());
}else if(code.equals(Cmd.D2.name())){
log.info("plcId:{},warn stop",plcCmdInfo.getPlcId());
plcService.warnStop(plcCmdInfo.getPlcId());
//plcService.warnStop(plcCmdInfo.getPlcId());
}else {
log.info("other D code :{}",code);
}

@ -7,6 +7,7 @@ import com.leaper.web.lib.OrderInfo;
import com.leaper.web.lib.OrderRealtime;
import com.leaper.web.lib.TaskDelayExecutor;
import com.leaper.web.mapper.*;
import com.leaper.web.pojo.Cmd;
import com.leaper.web.service.RFID.RFIDSocket;
import com.leaper.common.util.PathUtil;
import com.leaper.web.config.ConfigProperties;
@ -16,6 +17,8 @@ import com.leaper.web.mapper.*;
import com.leaper.web.pojo.OrderVO;
import com.leaper.web.service.RFID.RFIDMap;
import com.leaper.web.service.hikLightSource.HikControlSocket;
import com.leaper.web.service.ksec.KsecDataInfo;
import com.leaper.web.service.ksec.KsecInfo;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.weaver.ast.Or;
import org.springframework.beans.BeanUtils;
@ -25,10 +28,7 @@ import org.springframework.util.StringUtils;
import javax.annotation.Resource;
import java.time.Duration;
import java.time.LocalDateTime;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;
import java.util.*;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
@ -80,6 +80,9 @@ public class PlcService {
@Resource
private CheckLogMapper checkLogMapper;
@Resource
WarnUrlMapper warnUrlMapper;
private static ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(1,8,200,TimeUnit.MINUTES,new ArrayBlockingQueue<>(100000));
public void setCameraControlModule(CameraControlModule cameraControlModule){
@ -468,15 +471,18 @@ public class PlcService {
log.error("ptz not found ,code{},cameraId:{}", code, cameraId);
}
}
/*
使
/**
*/
/**
*
* 1.
* 2.
*
* @param plcId
*/
*//*
public void warnStart(String plcId, String signal) {
Street street = streetService.getStreetByPlcId(plcId);
if (street == null) {
@ -516,6 +522,7 @@ public class PlcService {
}
}
*/
/**
*
@ -524,52 +531,33 @@ public class PlcService {
*
* @param deviceReq
*/
public void warn(DeviceReq deviceReq) {
Warn warn = new Warn();
warn.setStartTime(LocalDateTime.now());
warn.setStreetId(street.getId());
String orderNum = OrderRealtime.getOrderByStreetId(street.getId());
if (StringUtils.isEmpty(orderNum)) {
log.debug("{}:warn start...., but no order running", plcId);
} else {
//不为空的话,填写工单的位置
Order order = orderMapper.getOneByOrderNum(orderNum);
if (order != null) {
//stop the order
log.debug("plcId:{},warn start and stop the order",plcId);
orderStopByWarn(orderNum);
OrderVO orderVO = new OrderVO();
BeanUtils.copyProperties(order, orderVO);
String location = orderService.location(orderVO, street);
warn.setLocation(location);
warn.setOrderId(order.getId());
}
}
//没有正在执行的工单 不需要填写location
warn.setSignal(signal);
public List<String> warn(DeviceReq deviceReq) {
Warn warn = deviceReq.getWarn();
if (warn!= null) {
warnMapper.insert(warn);
OrderRealtime.startWarn(street.getId(), warn.getId());
Street street = streetService.getStreetByPlcId(plcId);
if (street == null) {
return;
}
synchronized (plcId.intern()) {
//新增 告警
if (OrderRealtime.getWarnId(street.getId()) != null) {
log.debug("{}:exist warn", plcId);
return;
}
//不存在正在执行的告警记录,就新增
List<String> result = new ArrayList<>();
for (WarnUrl warnUrl : deviceReq.getWarnUrlList(warn)) {
gyrateCameraByCode(Math.toIntExact(warnUrl.getCameraId()),warnUrl.getCameraCode());
String path = PathUtil.createFileNameByRowColumn("jpg",Math.toIntExact(warnUrl.getCameraId()),0,0);
cameraCapture(Math.toIntExact(warnUrl.getCameraId()),false,null,path);
log.info("warn拍照 cameraId:{}path{}",warnUrl.getUrl(),path);
warnUrl.setUrl(path);
warnUrlMapper.insert(warnUrl);
//获取告警视频地址
result.add(configProperties.getCameraConfig().getCameraUrl()+"/#/camera"+warnUrl.getCameraId());
}
return result;
}
/**
/*使
*//**
*
* -
* --
*
* @param plcId
*/
*//*
public void warnStop(String plcId) {
Street street = streetMapper.getStreetByPlcId(plcId);
if (street == null) {
@ -598,7 +586,7 @@ public class PlcService {
}
}
}
*/
/**
* capture ,and update the picture path in order and stock
*
@ -819,4 +807,102 @@ public class PlcService {
return configProperties;
}
public void orderDecoder(KsecInfo ksecInfo) {
if (Cmd.A.name().equals(ksecInfo.getType())) {
return ;
}
KsecDataInfo dataInfo = ksecInfo.getData();
String lotnum = dataInfo.getLotnum();
PlcCmdInfo plcCmdInfo = null;
String srmNumber = null;
String cmdName = null;
if(dataInfo != null){
//左右换过来
if(dataInfo.getFromDirection() == 1){
dataInfo.setFromDirection(2);
}else {
dataInfo.setFromDirection(1);
}
if(dataInfo.getToDirection() != null && dataInfo.getToDirection() == 1){
dataInfo.setToDirection(2);
}else {
dataInfo.setToDirection(1);
}
plcCmdInfo = new PlcCmdInfo(dataInfo.getSRMNumber(), dataInfo.getTaskId(), dataInfo.getFromSide(), dataInfo.getFromDirection(), dataInfo.getFromColumn(), dataInfo.getFromRow(), dataInfo.getFromSeparation(),dataInfo.getToSide(), dataInfo.getToDirection(), dataInfo.getToColumn(), dataInfo.getToRow(),dataInfo.getToSeparation(),lotnum);
srmNumber = dataInfo.getSRMNumber();
cmdName = dataInfo.getCmdName();
}
if (Cmd.A.name().equals(ksecInfo.getType())) {
//心跳
log.debug("receieve heart ");
} else if (Cmd.B.name().equals(ksecInfo.getType())) {
//任务
if (Cmd.B1.name().equals(cmdName)) {
//昆船盘点模式下也会发B1 ,但是不会发送B2
//这里判断下,是否存在盘点批次号 若存在既是盘点的B1,无需处理若不存在lotnum则是随行的B1
if(StringUtils.isEmpty(dataInfo.getLotnum())){
//任务开始 旋转到原点位
gyrateCamera(plcCmdInfo,Cmd.C5.name());
orderStart(plcCmdInfo);
}else {
log.info("check move");
}
} else if (Cmd.B2.name().equals(cmdName)) {
//B2 C4 一起发的需要停止等B2
//这里判断是不是双伸
if(plcCmdInfo.getSeparation2() == 2){
//深测货架延迟
try {
Thread.sleep(getConfigProperties().getCameraConfig().getB2OutDelayTime());
} catch (InterruptedException e) {
e.printStackTrace();
}
}else {
//浅侧延迟
try {
Thread.sleep(getConfigProperties().getCameraConfig().getB2DelayTime());
} catch (InterruptedException e) {
e.printStackTrace();
}
}
gyrateCamera(plcCmdInfo,Cmd.C5.name());
orderStop(plcCmdInfo);
}
} else if (Cmd.C.name().equals(ksecInfo.getType())) {
//动作
String code = dataInfo.getCmdName();
log.info("action code,{},orderInfo:{}", code, plcCmdInfo.toString());
if (Cmd.isBaseAction(code)) {
//执行动作,需要保存执行到第几步了
Integer times = GoodsActionTimes.put(plcCmdInfo.getOrderNum());
plcCmdInfo.setTimes(times);
code = code + "-" + plcCmdInfo.getLeftRightStr(times) + plcCmdInfo.getInOutStr(times);
//执行动作
try {
action(plcCmdInfo, times, code);
} catch (InterruptedException e) {
e.printStackTrace();
}
}else {
log.info("other C code :{}",code);
}
} else if (Cmd.D.name().equals(ksecInfo.getType())) {
} else if (Cmd.E.name().equals(ksecInfo.getType())) {
//rfid的逻辑
String code = dataInfo.getCmdName();
if("E1".equals(code)){
RFIDCheck(plcCmdInfo);
}else {
RFIDStop(plcCmdInfo);
}
}
}
}

@ -132,30 +132,30 @@ public class ProtocolDecoder extends FixedLengthFrameDecoder {
plcService.action(plcCmdInfo, times, code);
}
} else if (type.equals(WARN)) {
log.info(" warn code:{}", code);
if ("D0".equals(code)) {
log.info("warn start ,plcId:{},warnInfo:b1:{},b2:{},b3:{},b4:{},b5:{},b6:{},b7:{},b8:{}", plcId, b1, b2, b3, b4, b5, b6, b7, b8);
//解析具体的告警 具体规则见文档
int n = 1;
int warn = 0;
for (byte b : bytes) {
warn = warn(b, 8 * n);
if (warn > 0) {
break;
}
n++;
}
plcService.warnStart(plcId,"D" + warn);
if (warn > 0) {
//执行动作
//times = 1 只执行动作
//code 写作"D{warn}"
plcService.action(plcCmdInfo, 1, "D" + warn);
}
} else if ("D100".equals(code)) {
log.info("warn end ,plcId:{}", plcId);
plcService.warnStop(plcId);
}
// log.info(" warn code:{}", code);
// if ("D0".equals(code)) {
// log.info("warn start ,plcId:{},warnInfo:b1:{},b2:{},b3:{},b4:{},b5:{},b6:{},b7:{},b8:{}", plcId, b1, b2, b3, b4, b5, b6, b7, b8);
// //解析具体的告警 具体规则见文档
// int n = 1;
// int warn = 0;
// for (byte b : bytes) {
// warn = warn(b, 8 * n);
// if (warn > 0) {
// break;
// }
// n++;
// }
// plcService.warnStart(plcId,"D" + warn);
// if (warn > 0) {
// //执行动作
// //times = 1 只执行动作
// //code 写作"D{warn}"
// plcService.action(plcCmdInfo, 1, "D" + warn);
// }
// } else if ("D100".equals(code)) {
// log.info("warn end ,plcId:{}", plcId);
// plcService.warnStop(plcId);
// }
}
in.release();
return null;

@ -48,6 +48,8 @@ cameraConfig:
# 利珀延迟10s就可
# 单位毫秒
delayDownloadMp4: 10000
cameraUrl: http://127.0.0.1:9007/#/camera/
workUrl: 127.0.0.1:8083/work/
# ------------
# -----图片 mp4下载地址
savePath:

Loading…
Cancel
Save