@ -10,21 +10,19 @@ import com.zhehekeji.web.pojo.OrderVO;
import com.zhehekeji.web.pojo.stock.StockStatus ;
import lombok.extern.slf4j.Slf4j ;
import org.springframework.beans.BeanUtils ;
import org.springframework.beans.factory.annotation.Value ;
import org.springframework.stereotype.Service ;
import org.springframework.util.StringUtils ;
import javax.annotation.Resource ;
import java.time.LocalDateTime ;
import java.util.ArrayList ;
import java.util.HashMap ;
import java.util.List ;
/ * *
* @Description plc 信 号 指 令 处 理 类
* 对 plcId 做 同 步 处 理 , 防 止 内 存 中 保 存 的 正 在 运 行 的 订 单 信 息 错 乱
* 对 plcId 做 同 步 处 理 , 防 止 内 存 中 保 存 的 正 在 运 行 的 订 单 信 息 错 乱
* @Author qiushui
* @Date 2021 / 1 / 19 13 : 45
* @Date 2021 / 1 / 19 13 : 45
* * /
@Service
@Slf4j
@ -50,13 +48,15 @@ public class PlcService {
private CameraIOMapper ioMapper ;
@Resource
private StockService stockService ;
@Resource
private CameraService cameraService ;
/ * *
* 原 点 位
* /
private static String originalPoint = "C6" ;
public Integer plcStatus ( ) {
public Integer plcStatus ( ) {
List < Street > streets = streetMapper . selectByMap ( new HashMap < > ( 0 ) ) ;
List < Integer > connIds = StreetConn . connList ( ) ;
return ( streets . size ( ) - connIds . size ( ) ) ;
@ -64,171 +64,238 @@ public class PlcService {
/ * *
* 开 始 工 单 robotic plcId 是 plcId , 昆 船 的 plcId 是 来 自 包 体 , 即 srmNumber
* @param plcOrderInfo
* @param plc Id
*
* @param plc CmdInfo
* /
public void orderStart ( PlcOrderInfo plcOrderInfo , String plcId ) {
Order order = new Order ( ) ;
order . setOrderNum ( plcOrderInfo . getOrderNum ( ) ) ;
order . setStatus ( 0 ) ;
order . setStartTime ( LocalDateTime . now ( ) ) ;
Street street = streetService . getStreetByPlcId ( plcId ) ;
if ( street ! = null ) {
OrderRealtime . startOrder ( street . getId ( ) , plcOrderInfo . getOrderNum ( ) ) ;
public void orderStart ( PlcCmdInfo plcCmdInfo ) {
Street street = streetService . getStreetByPlcId ( plcCmdInfo . getPlcId ( ) ) ;
if ( street ! = null ) {
Order order = new Order ( ) ;
order . setOrderNum ( plcCmdInfo . getOrderNum ( ) ) ;
order . setStatus ( 0 ) ;
order . setStartTime ( LocalDateTime . now ( ) ) ;
order . setStreetId ( street . getId ( ) ) ;
order . setInOut1 ( plcOrderInfo . getInOut1 ( ) ) ;
order . setLeftRight1 ( plcOrderInfo . getLeftRight1 ( ) ) ;
order . setColumn1 ( plcOrderInfo . getColumn1 ( ) ) ;
order . setRow1 ( plcOrderInfo . getRow1 ( ) ) ;
order . setInOut2 ( plcOrderInfo . getInOut2 ( ) ) ;
order . setLeftRight2 ( plcOrderInfo . getLeftRight2 ( ) ) ;
order . setColumn2 ( plcOrderInfo . getColumn2 ( ) ) ;
order . setRow2 ( plcOrderInfo . getRow2 ( ) ) ;
order . setInOut1 ( plcCmdInfo . getInOut1 ( ) ) ;
order . setLeftRight1 ( plcCmdInfo . getLeftRight1 ( ) ) ;
order . setColumn1 ( plcCmdInfo . getColumn1 ( ) ) ;
order . setRow1 ( plcCmdInfo . getRow1 ( ) ) ;
//todo 昆船的项目 ,取货 放货是独立的
//取货是是不知道放货的位置的, 所以订单开始的时候只写1位置
//订单结束写2位置
orderMapper . insert ( order ) ;
//orderMapper.update(order, new UpdateWrapper<Order>().eq("order_num", orderNum));
OrderRealtime . startOrder ( street . getId ( ) , plcCmdInfo . getOrderNum ( ) ) ;
}
}
/ * *
* //times == 1 ,做动作
* //times == 2 ,拍照
* //times == 3 ,做动作
* //times == 4 ,拍照
* @param plcOrderInfo
* @param plcId
* @param times
* 工 单 结 束 信 息
* 判 断 有 没 有 告 警 , 有 告 警 的 不 做 处 理
* 没 有 告 警 , 且 存 在 未 结 束 工 单 , 修 改 保 存 工 单 信 息
*
* @param plcCmdInfo
* /
public void action ( PlcOrderInfo plcOrderInfo , String plcId , Integer times , String code ) {
Street street = streetService . getStreetByPlcId ( plcId ) ;
if ( street = = null ) {
public void orderStop ( PlcCmdInfo plcCmdInfo ) {
LocalDateTime endTime = LocalDateTime . now ( ) ;
Street street = streetMapper . getStreetByPlcId ( plcCmdInfo . getPlcId ( ) ) ;
if ( street = = null ) {
return ;
}
//拍照,转动 需要知道是哪个货架
//1 判断是左右货架 1:左货架 2: 右货架
//判断左右 行列号
Integer leftRight = 0 ;
Integer row = 0 ;
Integer column = 0 ;
Boolean isPre = true ;
if ( times % 2 = = 0 ) {
isPre = false ;
}
if ( times = = 2 | | times = = 1 ) {
leftRight = plcOrderInfo . getLeftRight1 ( ) ;
row = plcOrderInfo . getRow1 ( ) ;
column = plcOrderInfo . getColumn1 ( ) ;
} else if ( times = = 4 | | times = = 3 ) {
leftRight = plcOrderInfo . getLeftRight2 ( ) ;
row = plcOrderInfo . getRow2 ( ) ;
column = plcOrderInfo . getColumn2 ( ) ;
} else {
log . error ( "异常的任务次数, orderInfo:{},plcId:{},time:{}" , plcOrderInfo . toString ( ) , plcId , times ) ;
Order order = orderMapper . getOneByOrderNum ( plcCmdInfo . getOrderNum ( ) ) ;
if ( order = = null ) {
log . error ( "订单结束信号, 订单不存在, orderNum:{}" , plcCmdInfo . getOrderNum ( ) ) ;
return ;
}
//找到球机IO配置的预置点
if ( ! originalPoint . equals ( code ) ) {
if ( leftRight = = 1 ) {
code = code + "-L" ;
} else if ( leftRight = = 2 ) {
code = code + "-R" ;
}
OrderRealtime . stopOrder ( street . getId ( ) ) ;
Order update = new Order ( ) ;
update . setId ( order . getId ( ) ) ;
update . setEndTime ( endTime ) ;
if ( street . getCamera1Id ( ) ! = null ) {
String path = cameraVideo ( street . getCamera1Id ( ) , order . getStartTime ( ) , endTime ) ;
order . setVideoPath1 ( path ) ;
}
log . info ( "预置点:{}" , code ) ;
//2 得到相应的货架号(目前订单 只支持单伸货架)
//todo 后面可能会有双伸, 这里要改, plc那里也要改
String shelveId ;
if ( leftRight = = 1 ) {
shelveId = street . getLeftShelveId ( ) ;
} else {
shelveId = street . getRightShelveId ( ) ;
if ( street . getCamera2Id ( ) ! = null ) {
String path = cameraVideo ( street . getCamera2Id ( ) , order . getStartTime ( ) , endTime ) ;
order . setVideoPath2 ( path ) ;
}
if ( StringUtils . isEmpty ( shelveId ) | | row = = 0 | | column = = 0 ) {
log . error ( "异常的任务号, 找不到对应的货架或行列号。orderInfo:{},plcId:{},time:{}" , plcOrderInfo . toString ( ) , plcId , times ) ;
orderMapper . updateById ( update ) ;
}
public void orderStopByWarn ( String orderNum ) {
Order order = orderMapper . getOneByOrderNum ( orderNum ) ;
if ( order = = null ) {
return ;
}
OrderInfo orderInfo = new OrderInfo ( 0 L , plcOrderInfo . getOrderNum ( ) , shelveId , row , column , code , isPre ) ;
// CameraCaptureMap.put(street.getCamera1Id(),orderInfo);
// CameraCaptureMap.put(street.getCamera2Id(),orderInfo);
move ( street . getCamera1Id ( ) , street . getCamera2Id ( ) , code ) ;
Stock stock = stockMapper . getByShelveIdAndRowColumn ( shelveId , row , column ) ;
if ( stock ! = null ) {
stock . setStatus ( StockStatus . PENDING . getStatus ( ) ) ;
stockMapper . updateById ( stock ) ;
Order upd = new Order ( ) ;
upd . setId ( order . getId ( ) ) ;
upd . setEndTime ( LocalDateTime . now ( ) ) ;
//warn flag
//default 0 : normal
upd . setStatus ( 1 ) ;
orderMapper . updateById ( upd ) ;
}
public String cameraVideo ( Integer cameraId , LocalDateTime startTime , LocalDateTime endTime ) {
String path = PathUtil . createFileName ( "mp4" ) ;
String realPath = configProperties . getSavePath ( ) . getMp4Path ( ) + path ;
if ( configProperties . getCameraConfig ( ) . getCameraType ( ) = = ConfigProperties . HIK_CAMERA ) {
HikPtzControlModule . downloadMp4 ( cameraId , realPath , startTime , endTime ) ;
} else if ( configProperties . getCameraConfig ( ) . getCameraType ( ) = = ConfigProperties . JOYWARE_CAMERA ) {
JoywarePtzControlModule . downloadMp4 ( cameraId , realPath , startTime , endTime ) ;
}
if ( ! code . equals ( originalPoint ) ) {
JoywarePtzControlModule . pic ( street . getCamera1Id ( ) , 0 , orderInfo ) ;
JoywarePtzControlModule . pic ( street . getCamera2Id ( ) , 0 , orderInfo ) ;
return path ;
}
/ * *
* //times == 1 ,做动作
* //times == 2 ,拍照
* //times == 3 ,做动作
* //times == 4 ,拍照
*
* @param plcCmdInfo
* @param times
* /
public void action ( PlcCmdInfo plcCmdInfo , Integer times , String code ) {
Street street = streetService . getStreetByPlcId ( plcCmdInfo . getPlcId ( ) ) ;
if ( street = = null ) {
log . error ( "street not found ,plcId :{}" , plcCmdInfo . getPlcId ( ) ) ;
return ;
}
OrderInfo orderInfo = new OrderInfo ( street , plcCmdInfo , times ) ;
String path = null ;
/ * *
* 拍 照 是 C2 C4 拍 照 ( 取 货 完 成 、 放 货 完 成 )
* /
Boolean needCapture = doNeedCaptureByCode ( code ) ;
/ * * *
* 判 断 该 巷 道 有 几 个 相 机
* 如 果 有 一 个 相 机 , 就 一 个 相 机 转
* 如 果 有 两 个 相 机 , 则 左 侧 转 camera1
* 右 侧 转 camera2
* 没 有 就 不 管 了
* /
if ( street . getCamera1Id ( ) ! = null & & street . getCamera2Id ( ) ! = null & & street . getCamera1Id ( ) ! = 0 & & street . getCamera2Id ( ) ! = 0 ) {
if ( orderInfo . getLeftRight ( ) = = 1 ) {
gyrateCameraByCode ( street . getCamera1Id ( ) , code ) ;
if ( needCapture ) {
path = cameraCapture ( street . getCamera1Id ( ) ) ;
}
} else {
gyrateCameraByCode ( street . getCamera2Id ( ) , code ) ;
if ( needCapture ) {
path = cameraCapture ( street . getCamera2Id ( ) ) ;
}
}
} else {
Integer cameraId = street . getCamera1Id ( ) ! = null & & street . getCamera1Id ( ) ! = 0 ? street . getCamera1Id ( ) : street . getCamera2Id ( ) ;
if ( cameraId ! = null & & cameraId ! = 0 ) {
gyrateCameraByCode ( cameraId , code ) ;
if ( needCapture ) {
path = cameraCapture ( cameraId ) ;
}
}
}
//update order info after capture
if ( path ! = null & & needCapture ) {
captureUpdateOrderAndStock ( orderInfo , path ) ;
}
}
/ * *
* 根 据 plc 指 令 转 动 摄 像 头 到 预 置 点
* @param cameraId1
* @param cameraId2
* need take a photo ? ?
*
* @param code
* @return
* /
public void move ( Integer cameraId1 , Integer cameraId2 , String code ) {
List < Integer > cameraIds = new ArrayList < > ( ) ;
if ( cameraId1 ! = null ) {
cameraIds . add ( cameraId1 ) ;
public Boolean doNeedCaptureByCode ( String code ) {
String picCmd = code . substring ( 0 , 2 ) ;
if ( picCmd . equals ( "C2" ) | | picCmd . equals ( "C4" ) ) {
return true ;
}
if ( cameraId2 ! = null ) {
cameraIds . add ( cameraId1 ) ;
}
if ( cameraIds . size ( ) = = 0 ) {
return ;
return false ;
}
/ * *
* capture picture by camera
*
* @Return pic address
* /
public String cameraCapture ( Integer cameraId ) {
String path = PathUtil . createFileName ( "jpg" ) ;
String realPath = configProperties . getSavePath ( ) . getMediaPath ( ) + path ;
if ( configProperties . getCameraConfig ( ) . getCameraType ( ) = = ConfigProperties . JOYWARE_CAMERA ) {
JoywarePtzControlModule . pic ( cameraId , 0 , realPath ) ;
} else if ( configProperties . getCameraConfig ( ) . getCameraType ( ) = = ConfigProperties . HIK_CAMERA ) {
HikPtzControlModule . pic ( cameraId , 0 , realPath ) ;
}
List < CameraIO > ioConfigs = ioMapper . selectList ( new QueryWrapper < CameraIO > ( ) . eq ( "code" , code ) . in ( "camera_id" , cameraIds ) ) ;
ioConfigs . forEach ( ioConfig - > {
if ( ioConfig . getPtzId ( ) ! = null & & ioConfig . getPtzId ( ) > 0 ) {
log . info ( "tp ptz , code:{},cameraId:{}" , code , cameraId1 ) ;
JoywarePtzControlModule . toPtz ( ioConfig . getPtzId ( ) , ioConfig . getCameraId ( ) ) ;
return path ;
}
/ * *
* gyrate camera to target
*
* @param cameraId
* @param code
* /
public void gyrateCameraByCode ( Integer cameraId , String code ) {
Integer ptzId = cameraService . getPtzIdByCodeAndCameraId ( code , cameraId ) ;
if ( ptzId ! = null & & ptzId > = 0 ) {
log . info ( "gyrate camera by code, code: {},cameraId:{},ptId:{}" , code , cameraId , ptzId ) ;
if ( configProperties . getCameraConfig ( ) . getCameraType ( ) = = ConfigProperties . HIK_CAMERA ) {
HikPtzControlModule . toPtz ( ptzId , cameraId ) ;
} else if ( configProperties . getCameraConfig ( ) . getCameraType ( ) = = ConfigProperties . JOYWARE_CAMERA ) {
JoywarePtzControlModule . toPtz ( ptzId , cameraId ) ;
}
} ) ;
} else {
log . error ( "ptz not found ,code: {},cameraId:{}" , code , cameraId ) ;
}
}
/ * *
* 收 到 告 警 异 常 信 号
* 1. 判 断 是 否 有 正 在 进 行 订 单 , 有 的 话 , 不 做 处 理
* 2. 没 有 订 单 , 新 增 告 警 记 录
*
* @param plcId
* /
public void warnStart ( String plcId , String signal ) {
public void warnStart ( String plcId , String signal ) {
Street street = streetService . getStreetByPlcId ( plcId ) ;
if ( street = = null ) {
if ( street = = null ) {
return ;
}
synchronized ( plcId . intern ( ) ) {
synchronized ( plcId . intern ( ) ) {
//新增 告警
if ( OrderRealtime . getWarnId ( street . getId ( ) ) = = null ) {
//不存在正在执行的告警记录,就新增
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.... no order" , plcId ) ;
} else {
//不为空的话,填写工单的位置
Order order = orderMapper . getOneByOrderNum ( orderNum ) ;
if ( order ! = null ) {
OrderVO orderVO = new OrderVO ( ) ;
BeanUtils . copyProperties ( order , orderVO ) ;
String location = orderService . location ( orderVO , street ) ;
warn . setLocation ( location ) ;
log . debug ( "{}:warn.... exist order" , plcId ) ;
}
if ( OrderRealtime . getWarnId ( street . getId ( ) ) ! = null ) {
log . debug ( "{}:exist warn" , plcId ) ;
return ;
}
//不存在正在执行的告警记录,就新增
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 ) ;
warnMapper . insert ( warn ) ;
OrderRealtime . startWarn ( street . getId ( ) , warn . getId ( ) ) ;
} else {
log . debug ( "{}:exist warn" , plcId ) ;
}
//没有正在执行的工单 不需要填写location
warn . setSignal ( signal ) ;
warnMapper . insert ( warn ) ;
OrderRealtime . startWarn ( street . getId ( ) , warn . getId ( ) ) ;
}
}
@ -236,143 +303,163 @@ public class PlcService {
* 告 警 结 束 信 号
* 是 否 存 在 订 单 , 存 在 - 》 保 存 该 订 单 的 视 频
* 如 果 没 有 订 单 - 》 是 否 存 在 告 警 记 录 - 》 有 告 警 记 录 的 话 , 保 存 视 频
*
* @param plcId
* /
public void warnStop ( String plcId ) {
public void warnStop ( String plcId ) {
Street street = streetMapper . getStreetByPlcId ( plcId ) ;
if ( street = = null ) {
if ( street = = null ) {
return ;
}
synchronized ( plcId . intern ( ) ) {
//是否存在未结束的订单
String orderNum = OrderRealtime . getOrderByStreetId ( street . getId ( ) ) ;
if ( ! StringUtils . isEmpty ( orderNum ) ) {
//存在未结束的订单
//清了订单缓存,结束订单
OrderRealtime . stopOrder ( street . getId ( ) ) ;
orderService . orderStop ( orderNum , street , Boolean . TRUE ) ;
} else {
//没有未结束的订单
//是否有告警
Long warnId = OrderRealtime . getWarnId ( street . getId ( ) ) ;
if ( warnId ! = null ) {
//存在告警
//先内存中清除该告警
OrderRealtime . cleanWarn ( street . getId ( ) ) ;
Warn warn = warnMapper . selectById ( warnId ) ;
if ( warn ! = null ) {
//结束该告警,并录像
warn . setEndTime ( LocalDateTime . now ( ) ) ;
if ( street . getCamera1Id ( ) ! = null ) {
String path = PathUtil . createFileName ( "mp4" ) ;
JoywarePtzControlModule . downloadMp4 ( street . getCamera1Id ( ) , configProperties . getSavePath ( ) . getMp4Path ( ) + path , warnId . toString ( ) , warn . getStartTime ( ) , warn . getEndTime ( ) ) ;
warn . setVideoPath1 ( path ) ;
}
if ( street . getCamera2Id ( ) ! = null ) {
String path = PathUtil . createFileName ( "mp4" ) ;
JoywarePtzControlModule . downloadMp4 ( street . getCamera2Id ( ) , configProperties . getSavePath ( ) . getMp4Path ( ) + path , warnId . toString ( ) , warn . getStartTime ( ) , warn . getEndTime ( ) ) ;
warn . setVideoPath2 ( path ) ;
}
warnMapper . updateById ( warn ) ;
synchronized ( plcId . intern ( ) ) {
Long warnId = OrderRealtime . getWarnId ( street . getId ( ) ) ;
if ( warnId ! = null ) {
//存在告警
//先内存中清除该告警
OrderRealtime . cleanWarn ( street . getId ( ) ) ;
Warn warn = warnMapper . selectById ( warnId ) ;
if ( warn ! = null ) {
//结束该告警,并录像
warn . setEndTime ( LocalDateTime . now ( ) ) ;
if ( street . getCamera1Id ( ) ! = null ) {
String path = cameraVideo ( street . getCamera1Id ( ) , warn . getStartTime ( ) , LocalDateTime . now ( ) ) ;
warn . setVideoPath1 ( path ) ;
}
if ( street . getCamera2Id ( ) ! = null ) {
String path = cameraVideo ( street . getCamera1Id ( ) , warn . getStartTime ( ) , LocalDateTime . now ( ) ) ;
warn . setVideoPath2 ( path ) ;
}
warnMapper . updateById ( warn ) ;
}
}
}
}
/ * *
* 工 单 结 束 信 息
* 判 断 有 没 有 告 警 , 有 告 警 的 不 做 处 理
* 没 有 告 警 , 且 存 在 未 结 束 工 单 , 修 改 保 存 工 单 信 息
* @param plcId
* @param orderNum
* capture , and update the picture path in order and stock
*
* @param orderInfo
* @param path
* /
public void orderStop ( String plcId , String orderNum ) {
Street street = streetMapper . getStreetByPlcId ( plcId ) ;
if ( street = = null ) {
return ;
}
synchronized ( plcId . intern ( ) ) {
orderService . orderStop ( orderNum , street , Boolean . FALSE ) ;
OrderRealtime . stopOrder ( street . getId ( ) ) ;
public void captureUpdateOrderAndStock ( OrderInfo orderInfo , String path ) {
synchronized ( orderInfo . getOrderNum ( ) . intern ( ) ) {
Order order = orderMapper . getOneByOrderNum ( orderInfo . getOrderNum ( ) ) ;
if ( order ! = null ) {
//update picPath in stock
Stock stock = stockMapper . getByShelveIdAndRowColumn ( orderInfo . getShelveId ( ) , orderInfo . getRow ( ) , orderInfo . getColumn ( ) ) ;
if ( stock = = null ) {
stock = new Stock ( ) ;
stock . setShelveId ( orderInfo . getShelveId ( ) ) ;
stock . setColumn ( orderInfo . getColumn ( ) ) ;
stock . setRow ( orderInfo . getRow ( ) ) ;
stock . setStatus ( 0 ) ;
//if the stock is null,take over path only
stock . setOveroperationPic ( path ) ;
stock . setOrderNum ( order . getOrderNum ( ) ) ;
stockMapper . insert ( stock ) ;
} else {
if ( orderInfo . getIsPre ( ) ) {
stock . setPreoperationPic ( path ) ;
} else {
stock . setOveroperationPic ( path ) ;
}
//take the previous picture path the lasted over picture path
//take the lasted picture path the new one
stock . setPreoperationPic ( stock . getPreoperationPic ( ) ) ;
stock . setOveroperationPic ( path ) ;
stock . setOrderNum ( order . getOrderNum ( ) ) ;
stockMapper . updateById ( stock ) ;
}
String pics = order . getPicPaths ( ) ;
if ( StringUtils . isEmpty ( pics ) ) {
order . setPicPaths ( path ) ;
} else {
order . setPicPaths ( pics + "," + path ) ;
}
Order update = new Order ( ) ;
update . setId ( order . getId ( ) ) ;
update . setPicPaths ( order . getPicPaths ( ) ) ;
log . debug ( " update order set pics:{},orderNum:{}" , update . getPicPaths ( ) , orderInfo . getOrderNum ( ) ) ;
orderMapper . updateById ( update ) ;
// 盘点历史纪录
}
}
}
/ * *
* 执 行 动 作 旋 转 360 , 然 后 执 行 C8 动 作
*
* @Param ptzId 旋 转 360 之 后 , 再 转 到 这 个 预 置 点
* @param plcId
* @Param ptzId 旋 转 360 之 后 , 再 转 到 这 个 预 置 点
* /
public void turn360AndC8 ( String plcId ) {
public void turn360AndC8 ( String plcId ) {
Street street = streetMapper . getStreetByPlcId ( plcId ) ;
if ( street = = null ) {
if ( street = = null ) {
return ;
}
if ( street . getCamera1Id ( ) ! = null ) {
List < CameraIO > ioConfigs = ioMapper . selectList ( new QueryWrapper < CameraIO > ( ) . eq ( "code" , "C8" ) . eq ( "camera_id" , street . getCamera1Id ( ) ) ) ;
if ( street . getCamera1Id ( ) ! = null ) {
List < CameraIO > ioConfigs = ioMapper . selectList ( new QueryWrapper < CameraIO > ( ) . eq ( "code" , "C8" ) . eq ( "camera_id" , street . getCamera1Id ( ) ) ) ;
Integer ptzId = null ;
if ( ioConfigs . size ( ) > 0 ) {
if ( ioConfigs . size ( ) > 0 ) {
ptzId = ioConfigs . get ( 0 ) . getPtzId ( ) ;
}
JoywarePtzControlModule . turn360C8 ( street . getCamera1Id ( ) , ptzId ) ;
JoywarePtzControlModule . turn360C8 ( street . getCamera1Id ( ) , ptzId ) ;
}
if ( street . getCamera2Id ( ) ! = null ) {
List < CameraIO > ioConfigs = ioMapper . selectList ( new QueryWrapper < CameraIO > ( ) . eq ( "code" , "C8" ) . eq ( "camera_id" , street . getCamera2Id ( ) ) ) ;
if ( street . getCamera2Id ( ) ! = null ) {
List < CameraIO > ioConfigs = ioMapper . selectList ( new QueryWrapper < CameraIO > ( ) . eq ( "code" , "C8" ) . eq ( "camera_id" , street . getCamera2Id ( ) ) ) ;
Integer ptzId = null ;
if ( ioConfigs . size ( ) > 0 ) {
if ( ioConfigs . size ( ) > 0 ) {
ptzId = ioConfigs . get ( 0 ) . getPtzId ( ) ;
}
JoywarePtzControlModule . turn360C8 ( street . getCamera2Id ( ) , ptzId ) ;
JoywarePtzControlModule . turn360C8 ( street . getCamera2Id ( ) , ptzId ) ;
}
}
/ * *
* 从 货 架 行 列 找 到 前 后 前 后 两 个 照 片
* @param plcOrderInfo
*
* @param plcCmdInfo
* @param plcId
* @param barCodeSys
* @param boxNumSys
* @param boxNumAlgo
* /
public void recordStock ( PlcOrderInfo plcOrderInfo , String plcId , String barCodeSys , int boxNumSys , int boxNumAlgo )
{
public void recordStock ( PlcCmdInfo plcCmdInfo , String plcId , String barCodeSys , int boxNumSys , int boxNumAlgo ) {
Street street = streetService . getStreetByPlcId ( plcId ) ;
if ( street = = null ) {
if ( street = = null ) {
return ;
}
//判断左右 行列号
Integer leftRight = plc Order Info. getLeftRight2 ( ) ;
Integer leftRight = plc Cmd Info. getLeftRight2 ( ) ;
String shelveId ;
if ( leftRight = = 1 ) {
if ( leftRight = = 1 ) {
shelveId = street . getLeftShelveId ( ) ;
} else {
} else {
shelveId = street . getRightShelveId ( ) ;
}
Stock stock = stockMapper . getByShelveIdAndRowColumn ( shelveId , plcOrderInfo . getRow2 ( ) , plcOrder Info. getColumn2 ( ) ) ;
if ( stock ! = null ) {
Stock stock = stockMapper . getByShelveIdAndRowColumn ( shelveId , plcCmdInfo . getRow2 ( ) , plcCmd Info. getColumn2 ( ) ) ;
if ( stock ! = null ) {
stock . setCategory ( barCodeSys ) ;
stock . setCount ( boxNumSys ) ;
String prevFile = configProperties . getSavePath ( ) . getMediaPath ( ) + stock . getPreoperationPic ( ) ;
String overFile = configProperties . getSavePath ( ) . getMediaPath ( ) + stock . getOveroperationPic ( ) ;
String prevFile = configProperties . getSavePath ( ) . getMediaPath ( ) + stock . getPreoperationPic ( ) ;
String overFile = configProperties . getSavePath ( ) . getMediaPath ( ) + stock . getOveroperationPic ( ) ;
String code = BarCodeScan . detectBestBarCode ( overFile ) ;
if ( boxNumSys = = boxNumAlgo & & code . equals ( barCodeSys ) ) {
if ( boxNumSys = = boxNumAlgo & & code . equals ( barCodeSys ) ) {
stock . setStatus ( StockStatus . SUCCESS . getStatus ( ) ) ;
log . info ( "核对正确" ) ;
stockMapper . updateById ( stock ) ;
} else {
} else {
log . info ( "核对失败" ) ;
stock . setStatus ( StockStatus . ERROR . getStatus ( ) ) ;
stockMapper . updateById ( stock ) ;
}
//核对记录
//核对记录 todo
// StockLog stockLog = new StockLog();
// stockLog.set
}
}