diff --git a/web/src/main/java/com/zhehekeji/web/controller/CameraControlController.java b/web/src/main/java/com/zhehekeji/web/controller/CameraControlController.java index 766b3f2..e928fbc 100644 --- a/web/src/main/java/com/zhehekeji/web/controller/CameraControlController.java +++ b/web/src/main/java/com/zhehekeji/web/controller/CameraControlController.java @@ -1,14 +1,18 @@ package com.zhehekeji.web.controller; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.zhehekeji.common.util.PathUtil; import com.zhehekeji.core.pojo.Result; import com.zhehekeji.core.util.Assert; import com.zhehekeji.web.config.ConfigProperties; import com.zhehekeji.web.entity.Camera; +import com.zhehekeji.web.entity.CameraRecord; import com.zhehekeji.web.lib.*; import com.zhehekeji.web.lib.hik.HCNetSDK; import com.zhehekeji.web.lib.joyware.NetSDKLib; import com.zhehekeji.web.mapper.CameraMapper; +import com.zhehekeji.web.mapper.CameraRecordMapper; import com.zhehekeji.web.service.CameraService; import com.zhehekeji.web.service.PlcService; import io.swagger.annotations.Api; @@ -19,6 +23,7 @@ import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; +import java.util.List; @Api(value = "CameraControl",tags = "球机控制管理") @RestController @@ -33,6 +38,8 @@ public class CameraControlController { private CameraControlModule cameraControlModule; @Resource private CameraControlLoginModule loginControlModule; + @Resource + private CameraRecordMapper cameraRecordMapper; @PostMapping("/{id}") @ApiOperation(value = "球机登录") @@ -328,6 +335,29 @@ public class CameraControlController { return Result.success(); } + + @PostMapping("/mp4/record") + @ApiOperation(value = "录像") + public Result record(@RequestBody CameraRecord cameraRecord) { + checkLogin(cameraRecord.getCameraId()); + String url ="work\\"+cameraRecord.getStartTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))+".mp4"; + cameraRecordMapper.insert(cameraRecord); + cameraControlModule.downloadMp4(cameraRecord.getCameraId(),"D:\\"+url, cameraRecord.getStartTime(),cameraRecord.getEndTime()); + return Result.success("api\\"+url); + } + + @PostMapping("/mp4/recordList") + @ApiOperation(value = "录像列表") + public Result> recordList(@RequestBody CameraRecord cameraRecord) { + List cameraRecordList = cameraRecordMapper.selectList(new QueryWrapper() + .eq("camera_id", cameraRecord.getCameraId()) + .eq(cameraRecord.getType() != null,"type", cameraRecord.getType()) + .le(cameraRecord.getEndTime() != null, "end_Time",cameraRecord.getEndTime()) + .ge(cameraRecord.getStartTime() != null,"start_time" ,cameraRecord.getStartTime()) + ); + return Result.success(cameraRecordList); + } + @Resource private CameraService cameraService; diff --git a/web/src/main/java/com/zhehekeji/web/controller/KsecController.java b/web/src/main/java/com/zhehekeji/web/controller/KsecController.java new file mode 100644 index 0000000..8981f1d --- /dev/null +++ b/web/src/main/java/com/zhehekeji/web/controller/KsecController.java @@ -0,0 +1,167 @@ +package com.zhehekeji.web.controller; + +import com.alibaba.fastjson.JSONObject; +import com.github.pagehelper.PageInfo; +import com.zhehekeji.core.pojo.Result; +import com.zhehekeji.web.entity.CheckLog; +import com.zhehekeji.web.pojo.Cmd; +import com.zhehekeji.web.pojo.stock.CheckLogSearch; +import com.zhehekeji.web.service.GoodsActionTimes; +import com.zhehekeji.web.service.PlcCmdInfo; +import com.zhehekeji.web.service.PlcService; +import com.zhehekeji.web.service.ksec.KsecDataInfo; +import com.zhehekeji.web.service.ksec.KsecInfo; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.util.StringUtils; +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; + +@Api(tags = "盘点历史") +@RequestMapping("/Ksec") +@RestController +@Slf4j +public class KsecController { + + @Resource + private PlcService plcService; + @ApiOperation("盘点历史") + @PostMapping("") + public Result list(@RequestBody KsecInfo ksecInfo){ + if (Cmd.A.name().equals(ksecInfo.getType())) { + return Result.success("SUCCESS"); + } + KsecDataInfo dataInfo = ksecInfo.getData(); + String lotnum = dataInfo.getLotnum(); + PlcCmdInfo plcCmdInfo = null; + String srmNumber = null; + String cmdName = null; + if(dataInfo != null){ + 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); + plcCmdInfo.setFromDirection(dataInfo.getFromDirection()); + plcCmdInfo.setToDirection(dataInfo.getToDirection()); + plcCmdInfo.setToColumn(dataInfo.getToColumn()); + plcCmdInfo.setToRow(dataInfo.getToRow()); + plcCmdInfo.setFromRow(dataInfo.getFromRow()); + plcCmdInfo.setFromColumn(dataInfo.getFromColumn()); + plcCmdInfo.setFromSide(dataInfo.getFromSide()); + plcCmdInfo.setFromSeparation(dataInfo.getFromSeparation()); + plcCmdInfo.setToSeparation(dataInfo.getToSeparation()); + plcCmdInfo.setToSide(dataInfo.getToSide()); + //左右不换过来 + if(dataInfo.getFromDirection() == 1){ + //dataInfo.setFromDirection(2); + plcCmdInfo.setLeftRight1(dataInfo.getFromDirection()); + }else { + //dataInfo.setFromDirection(1); + plcCmdInfo.setLeftRight1(dataInfo.getFromDirection()); + } + if(dataInfo.getToDirection() != null && dataInfo.getToDirection() == 1){ + //dataInfo.setToDirection(2); + plcCmdInfo.setLeftRight2(dataInfo.getToDirection()); + }else { + //dataInfo.setToDirection(1); + plcCmdInfo.setLeftRight2(dataInfo.getToDirection()); + } + 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())){ + //任务开始 旋转到原点位 + plcService.gyrateCamera(plcCmdInfo,Cmd.C5.name()); + plcService.orderStart(plcCmdInfo); + }else { + log.info("check move"); + } + + } else if (Cmd.B2.name().equals(cmdName)) { + //B2 C4 一起发的,需要停止等B2 + + //这里判断是不是双伸 + if(plcCmdInfo.getSeparation2() == 2){ + //深测货架延迟 + try { + Thread.sleep(plcService.getConfigProperties().getCameraConfig().getB2OutDelayTime()); + } catch (InterruptedException e) { + e.printStackTrace(); + } + }else { + //浅侧延迟 + try { + Thread.sleep(plcService.getConfigProperties().getCameraConfig().getB2DelayTime()); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + plcService.gyrateCamera(plcCmdInfo,Cmd.C5.name()); + plcService.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 { + plcService.action(plcCmdInfo, times, code); + } catch (InterruptedException e) { + e.printStackTrace(); + } + }else { + log.info("other C code :{}",code); + } + } else if (Cmd.D.name().equals(ksecInfo.getType())) { + + //柳州去掉告警 +// String code = dataInfo.getCmdName(); +// if(code.equals(Cmd.D1.name())){ +// log.info("plcId:{},warn start",plcCmdInfo.getPlcId()); +// //根据告警code转动camera +// String warnCode = dataInfo.getWarnCode(); +// if(!StringUtils.isEmpty(warnCode)){ +// String warnCode0 = Cmd.D1.name()+"-"+warnCode.split(",")[0]; +// plcService.warnAction(plcCmdInfo,warnCode0); +// } +// plcService.warnStart(plcCmdInfo.getPlcId(),dataInfo.getWarnCode()); +// }else if(code.equals(Cmd.D2.name())){ +// log.info("plcId:{},warn stop",plcCmdInfo.getPlcId()); +// plcService.warnStop(plcCmdInfo.getPlcId()); +// }else { +// log.info("other D code :{}",code); +// } + } else if (Cmd.E.name().equals(ksecInfo.getType()) ) { + //rfid的逻辑 + String code = dataInfo.getCmdName(); + log.info("盘点指令:{}", ksecInfo); + plcService.check(plcCmdInfo,ksecInfo.getType(),dataInfo.getCode(),dataInfo.getTrayCode()); + ksecInfo.getData().setAckStatus(1); + + log.info("盘点完成"); + } + //找到该货位的最后一张照片与现在的照片比照 + //plcService.recordStock(plcCmdInfo, dataInfo.getCode(), 0, 0); + return Result.success("SUCCESS"); + } +} diff --git a/web/src/main/java/com/zhehekeji/web/entity/CameraRecord.java b/web/src/main/java/com/zhehekeji/web/entity/CameraRecord.java new file mode 100644 index 0000000..4d8717f --- /dev/null +++ b/web/src/main/java/com/zhehekeji/web/entity/CameraRecord.java @@ -0,0 +1,26 @@ +package com.zhehekeji.web.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.mysql.cj.xdevapi.JsonString; +import lombok.Data; + +import java.time.LocalDateTime; + +@Data +@TableName("camera_record") +public class CameraRecord { + @TableId(type = IdType.AUTO) + private Integer id; + private Integer cameraId; + private Integer type; + + @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss") + private LocalDateTime startTime; + @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss") + private LocalDateTime endTime; + private String path; + +} diff --git a/web/src/main/java/com/zhehekeji/web/mapper/CameraRecordMapper.java b/web/src/main/java/com/zhehekeji/web/mapper/CameraRecordMapper.java new file mode 100644 index 0000000..84eb94d --- /dev/null +++ b/web/src/main/java/com/zhehekeji/web/mapper/CameraRecordMapper.java @@ -0,0 +1,7 @@ +package com.zhehekeji.web.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.zhehekeji.web.entity.CameraRecord; + +public interface CameraRecordMapper extends BaseMapper { +}