1.昆船链接

2.基础修改
3.左右不调换
泸州-视觉+扫码-昆船
LAPTOP-S9HJSOEB\昊天 2 years ago
parent ae11f93ae1
commit 569af10f66

@ -7,7 +7,6 @@ import com.zhehekeji.web.entity.Street;
import com.zhehekeji.web.mapper.StreetMapper;
import com.zhehekeji.web.service.*;
import com.zhehekeji.web.service.ksec.KsecNettyClient;
import com.zhehekeji.web.service.putian.PuTianNettyClient;
import com.zhehekeji.web.service.robotic.NettyClient;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@ -32,8 +31,6 @@ public class PLCController {
private ConfigProperties configProperties;
@Resource
private KsecNettyClient ksecNettyClient;
@Resource
private PuTianNettyClient puTianNettyClient;
@GetMapping("/tcp")
@ -41,7 +38,7 @@ public class PLCController {
public Result tcp(@RequestParam Integer id){
if(configProperties.getServerMode() == 1){
try {
puTianNettyClient.createClient(configProperties.getKsec());
ksecNettyClient.createClient(configProperties.getKsec());
}catch (Exception e){
Assert.isTrue(false,"连接失败ip"+configProperties.getKsec().getIp()+",port:"+configProperties.getKsec().getPort());
}
@ -78,8 +75,8 @@ public class PLCController {
@GetMapping("/orderAction")
@ApiOperation(value = "执行的工单情况")
public Result<Map> orderAction(){
return Result.success(GoodsActionTimes.get());
public Result<Integer> orderAction(){
return Result.success();
}
}

@ -13,6 +13,9 @@ import java.time.LocalDateTime;
public class CheckLog {
private Integer streetId;
@TableField(exist = false)
private String streetName;
private Integer direction;

@ -9,7 +9,6 @@ import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.time.LocalDateTime;
import java.util.List;
@Data
@TableName("`order`")
@ -23,8 +22,12 @@ public class Order {
@ApiModelProperty("订单号")
private String orderNum;
// @ApiModelProperty("0:正常 1告警")
// private Integer status;
@ApiModelProperty("wms任务号")
@TableField(value = "`task_wms_id`")
private String taskWMSId;
@ApiModelProperty("0:正常 1告警")
private Integer status;
/**
* 1 2
@ -46,35 +49,25 @@ public class Order {
*/
private Integer row1;
private String intoStockPic;
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")
private LocalDateTime intoStockTime;
/**
* 1 2
*/
private Integer inOut2;
private String intoStockOverPic;
/**
* 1 2
*/
private Integer leftRight2;
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")
private LocalDateTime intoStockOverTime;
/**
*
*/
private Integer column2;
// /**
// * 后两个命令 库内?库口? 1库内 2库口
// */
// private Integer inOut2;
//
// /**
// * 后两个命令 左?右? 1左 2
// */
// private Integer leftRight2;
//
// /**
// * 后两个 列号
// */
// private Integer column2;
//
// /**
// * 后两个 行号
// */
// private Integer row2;
/**
*
*/
private Integer row2;
// private String shelveId;
//
@ -87,29 +80,26 @@ public class Order {
// @ApiModelProperty("仓位号")
// private String positionNum;
// @ApiModelProperty("视频图片地址")
// @TableField("`video_path_1`")
// private String videoPath1;
//
// @ApiModelProperty("视频图片地址")
// @TableField("`video_path_2`")
// private String videoPath2;
//
// @ApiModelProperty("图片地址,分隔")
// private String picPaths;
@ApiModelProperty("视频图片地址")
@TableField("`video_path_1`")
private String videoPath1;
// @ApiModelProperty("入库照片")
// private String putPath;
//
// @ApiModelProperty("出库照片")
// private String outputPath;
//
// @ApiModelProperty("货位照片")
// private String goodsPath;
@ApiModelProperty("视频图片地址")
@TableField("`video_path_2`")
private String videoPath2;
// @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")
// private LocalDateTime startTime;
//
// @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")
// private LocalDateTime endTime;
@ApiModelProperty("图片地址,分隔")
private String picPaths;
private String wmsTrayCode;
private String wmsCode;
private String subtag;
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")
private LocalDateTime startTime;
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")
private LocalDateTime endTime;
}

@ -53,6 +53,8 @@ public class Stock {
@ApiModelProperty("扫描出的托盘码")
private String trayCode;
@TableField(exist = false)
private String streetName;
private Integer streetId;
@ -77,8 +79,6 @@ public class Stock {
@ApiModelProperty("操作后的图片")
private String overoperationPic;
@ApiModelProperty("0:没检测 1空货物有托盘 2有货物 3空托盘")
private Integer emptyStatus;
@ApiModelProperty("盘点图片")
private String checkPic;

@ -137,4 +137,5 @@ public interface CameraControlModule {
void toPtzSlow(Integer cameraId, Integer x);
boolean setCameraTime(Integer id);
}

@ -22,6 +22,7 @@ import java.util.List;
import java.util.Timer;
import static com.zhehekeji.web.lib.hik.HCNetSDK.NET_DVR_GET_PTZPOS;
import static com.zhehekeji.web.lib.hik.HCNetSDK.NET_DVR_SET_TIMECFG;
/**
*
@ -463,4 +464,15 @@ public class HikCameraControlModuleImpl implements CameraControlModule {
}
}
public boolean setCameraTime(Integer cameraId) {
int lUserId = CameraConnMap.getConnId(cameraId).intValue();
HCNetSDK.NET_DVR_TIME time = new HCNetSDK.NET_DVR_TIME();
LocalDateTime localDateTime = LocalDateTime.now();
time.setTime(localDateTime.getYear(),localDateTime.getMonthValue(),localDateTime.getDayOfMonth(),localDateTime.getHour(),localDateTime.getMinute(),localDateTime.getSecond());
time.write();
return HikLoginModuleImpl.hcNetsdk.NET_DVR_SetDVRConfig(lUserId, NET_DVR_SET_TIMECFG, 0,time.getPointer(), time.size());
}
}

@ -338,6 +338,10 @@ public class JoywareCameraControlModuleImpl implements CameraControlModule {
}
}
public boolean setCameraTime(Integer cameraId) {
return false;
}
/**
*
*

@ -11,7 +11,7 @@ import java.util.List;
public interface OrderMapper extends BaseMapper<Order> {
@Select("select * from `order` where order_num = #{orderNum} order by into_stock_time desc limit 1")
@Select("select * from `order` where order_num = #{orderNum} order by start_time desc limit 1")
Order getOneByOrderNum(String orderNum);
List<OrderVO> list(@Param("req")OrderSearch orderSearch);

@ -9,6 +9,9 @@ import java.time.LocalDateTime;
@Data
public class OrderSearch {
private String streetId;
@NotEmpty(message = "订单号不能为空")
private String orderNum;

@ -14,6 +14,7 @@ public class StockCheck {
// private String shelveId;
private Integer streetId;
private String streetPlc;
private Integer direction;
@ -27,4 +28,6 @@ public class StockCheck {
@ApiModelProperty("列")
private Integer column;
private Integer ok;
}

@ -330,4 +330,32 @@ public class CameraService {
}
public void cameraTimeUpdate() {
log.info(" cameraTimeUpdate");
long timeStamp = System.currentTimeMillis();
List<Camera> cameras = cameraMapper.selectList(new QueryWrapper<>());
for (Camera camera : cameras){
cameraTimeUpdate( camera);
}
}
public void cameraTimeUpdate(Camera camera) {
Boolean ok = false;
if (CameraConnMap.getConnId(camera.getId() )!=null) {
if (configProperties.getCameraConfig().getCameraType() == ConfigProperties.HIK_CAMERA) {
ok = HikLoginModuleImpl.connectStatus(CameraConnMap.getConnId(camera.getId()).intValue());
} else {
ok = JoywareLoginModuleImpl.connectStatus(CameraConnMap.getConnId(camera.getId()));
}
}
if(ok){
cameraControlModule.setCameraTime(camera.getId());
}else {
CameraConnMap.disConn(camera.getId());
camera.setStatus("未连接");
log.error("camera "+camera.getIp() +"未连接");
cameraLogin(camera);
}
}
}

@ -6,20 +6,29 @@ import com.github.pagehelper.PageInfo;
import com.zhehekeji.web.entity.CheckLog;
import com.zhehekeji.web.mapper.CheckLogMapper;
import com.zhehekeji.web.pojo.stock.CheckLogSearch;
import com.zhehekeji.web.pojo.street.StreetVO;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import javax.annotation.Resource;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Service
public class CheckLogService {
@Resource
private CheckLogMapper checkLogMapper;
@Resource
private StreetService streetService;
public PageInfo<CheckLog> list(CheckLogSearch search){
List<StreetVO> list = streetService.list();
Map<Integer,String> map = new HashMap<>();
list.forEach(l->{
map.put(l.getId(),l.getName());
});
PageHelper.startPage(search.getPageNum(),search.getPageSize());
QueryWrapper<CheckLog> wrapper = new QueryWrapper<>();
if(!StringUtils.isEmpty(search.getLotnum())){
@ -28,20 +37,26 @@ public class CheckLogService {
if(search.getStartTimestamp() != null && search.getEndTimestamp() != null){
wrapper.ge("create_time",search.getStartTimestamp()).le("create_time",search.getEndTimestamp());
}
if(search.getLeftRight() != null && search.getLeftRight() > 0){
if(search.getLeftRight() != null && (search.getLeftRight() != 0 && search.getLeftRight() !=-1)){
wrapper.eq("`direction`",search.getLeftRight());
}
if(search.getSide() != null && search.getSide() > 0){
if(search.getSide() != null &&(search.getSide() != 0 && search.getSide() !=-1)){
wrapper.eq("`side`",search.getSide());
}
if(search.getRow() != null && search.getRow() > 0){
if(search.getRow() != null && search.getRow() != 0){
wrapper.eq("`row`",search.getRow());
}
if(search.getColumn() != null && search.getColumn() > 0){
if(search.getColumn() != null && search.getColumn() != 0){
wrapper.eq("`column`",search.getColumn());
}
if(search.getStreetId() != null && search.getStreetId() != 0){
wrapper.eq("`street_id`",search.getStreetId());
}
wrapper.orderByDesc("create_Time");
List<CheckLog>stockChecks = checkLogMapper.selectList(wrapper);
stockChecks.forEach(l->{
l.setStreetName(map.get(l.getStreetId()));
});
return new PageInfo<>(stockChecks);
}
}

@ -2,7 +2,13 @@ package com.zhehekeji.web.service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.zhehekeji.web.config.ConfigProperties;
import com.zhehekeji.web.entity.Camera;
import com.zhehekeji.web.entity.LightSource;
import com.zhehekeji.web.lib.CameraConnMap;
import com.zhehekeji.web.lib.CameraControlModule;
import com.zhehekeji.web.lib.hik.HikLoginModuleImpl;
import com.zhehekeji.web.lib.joyware.JoywareLoginModuleImpl;
import com.zhehekeji.web.mapper.CameraMapper;
import com.zhehekeji.web.mapper.LightSourceMapper;
import com.zhehekeji.web.service.damLightSource.JYDAMEquip;
import com.zhehekeji.web.service.damLightSource.JYDamHelper;
@ -69,6 +75,20 @@ public class CronTab {
lightTimeMap.put(streetId,System.currentTimeMillis());
}
@Resource
private CameraMapper cameraMapper;
@Resource
private CameraService cameraService;
@Resource
private CameraControlModule cameraControlModule;
@Scheduled(cron = "0 0/1 * * * ?")
public void cameraTimeUpdate() {
cameraService.cameraTimeUpdate();
}
@Scheduled(cron = "0 0/1 * * * ?")
public void lightStatus() {
log.debug(" lightStatus");

@ -82,18 +82,18 @@ public class EmptyCheckService {
*
*/
Integer goodsCount = 0;
for(Stock stock: stockList){
if(stock.getEmptyStatus() == 3){
//没托盘
emptyCount++;
}else if(stock.getEmptyStatus() == 2){
//有货物
goodsCount++;
}else if(stock.getEmptyStatus() == 1){
//有托盘 没货物
emptyGoodsCount++;
}
}
// for(Stock stock: stockList){
// if(stock.getEmptyStatus() == 3){
// //没托盘
// emptyCount++;
// }else if(stock.getEmptyStatus() == 2){
// //有货物
// goodsCount++;
// }else if(stock.getEmptyStatus() == 1){
// //有托盘 没货物
// emptyGoodsCount++;
// }
// }
//更新盘点统计
List<CheckStreetSummary> checkStreetSummaries = checkStreetSummaryMapper.selectList(new QueryWrapper<CheckStreetSummary>().eq("street_id",street.getId()).eq("lotnum",taskId));
if(checkStreetSummaries.size() > 0){

@ -43,6 +43,8 @@ public class InitService implements ApplicationRunner {
private StreetMapper streetMapper;
@Resource
private PuTianNettyClient puTianNettyClient;
@Resource
private KsecNettyClient ksecNettyClient;
@Resource
private ConfigProperties configProperties;
@ -99,15 +101,17 @@ public class InitService implements ApplicationRunner {
if(ksec != null){
StreetConn.init(1,"ksec");
try {
puTianNettyClient.createClient(ksec);
ksecNettyClient.createClient(ksec);
}catch (Exception e){
log.error("kesc connect error,url:{},port:{}",ksec.getIp(),ksec.getPort());
ksecNettyClient.reconnect(0);
}
}else {
log.error("ksec no config");
}
//TaskDelayExecutor.runMp4DownloadExecutor();
TaskDelayExecutor.runMp4DownloadExecutor();
}
class LoginThread extends Thread{
@ -121,6 +125,7 @@ public class InitService implements ApplicationRunner {
@Override
public void run() {
cameraService.cameraLogin(camera);
cameraService.cameraTimeUpdate(camera);
}
}

@ -1,5 +1,6 @@
package com.zhehekeji.web.service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.zhehekeji.web.config.ConfigProperties;
@ -46,29 +47,13 @@ public class OrderService {
}
//计算订单的时间
// if (orderVO.getEndTime() != null && orderVO.getStartTime() != null) {
// Duration duration = Duration.between(orderVO.getStartTime(), orderVO.getEndTime());
// Long seconds = duration.getSeconds();
// int minutes = seconds.intValue() / 60;
// int remainingSeconds = seconds.intValue() % 60;
// String timeLength = String.format("%02d:%02d", minutes,remainingSeconds);
// orderVO.setTimeLength(timeLength);
// }
// if (!StringUtils.isEmpty(orderVO.getPicPaths())) {
// String[] pics = orderVO.getPicPaths().split(",");
// orderVO.setPics(pics);
// }
// if(configProperties.getCameraConfig().getCameraType() == 1 && !StringUtils.isEmpty(orderVO.getVideoPath1())){
// orderVO.setCmd1(" VSPlayer "+ orderVO.getVideoPath1());
// }
// if(configProperties.getCameraConfig().getCameraType() == 1 && !StringUtils.isEmpty(orderVO.getVideoPath2())){
// orderVO.setCmd1(" VSPlayer "+ orderVO.getVideoPath2());
// }
orderVO.setGoodsLocation(location(orderVO,streetMap.get(orderVO.getStreetId())));
if(orderVO.getIntoStockPic() != null ) {
orderVO.setIntoStockPics(orderVO.getIntoStockPic().split(";"));
if (orderVO.getPicPaths() != null && orderVO.getPicPaths().split(",").length > 0){
orderVO.setPics(orderVO.getPicPaths().split(","));
}
// if(orderVO.getIntoStockPic() != null ) {
// orderVO.setIntoStockPics(orderVO.getIntoStockPic().split(";"));
// }
});
return new PageInfo<>(orders);
}
@ -83,12 +68,20 @@ public class OrderService {
}
public String location(OrderVO orderVO,Street street){
String location = "";
if(orderVO.getLeftRight1() != null){
String leftRightS = orderVO.getLeftRight1() == 1 ? "左" : "右";
location = leftRightS;
}
if(orderVO.getInOut1() != null){
String side = orderVO.getInOut1() == 1?"浅":"深";
location = location + "-" + side +"-";
}
//里外 现在无法判断 这个项目全是 里
String location = "%s-%s-%s层%s列";
return String.format(location, leftRightS, side, orderVO.getRow1(),orderVO.getColumn1());
return location +orderVO.getRow1()+"层"+orderVO.getColumn1()+"列";
}

@ -69,6 +69,11 @@ public class PlcCmdInfo {
private Integer times;
private String lotnum;
private Integer streetId;
private String wmsCode;
private String wmsTrayCode;
private String trayCode;
public PlcCmdInfo(String plcId, String taskId, Integer side1, Integer leftRight1, Integer column1, Integer row1, Integer separation1, Integer side2, Integer leftRight2, Integer column2, Integer row2, Integer separation2,String lotnum) {
this.taskId = taskId;
@ -107,4 +112,5 @@ public class PlcCmdInfo {
return "";
}
}
}

@ -24,6 +24,8 @@ import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
import javax.annotation.Resource;
import java.net.SocketTimeoutException;
import java.time.Duration;
import java.time.LocalDateTime;
import java.util.*;
import java.util.concurrent.ArrayBlockingQueue;
@ -100,7 +102,38 @@ public class PlcService {
* @param plcCmdInfo
*/
public void orderStart(PlcCmdInfo plcCmdInfo) {
Street street = streetService.getStreetByPlcId(plcCmdInfo.getPlcId());
if (street != null) {
if (plcCmdInfo.getLeftRight1() == 1) {
if (plcCmdInfo.getRow1() > street.getLeftRow() && plcCmdInfo.getColumn1() > street.getLeftColumn()) {
log.error("row:{},column:{},error in streetId:{} left", plcCmdInfo.getRow1(), plcCmdInfo.getColumn1(), street.getId());
return;
}
} else {
if (plcCmdInfo.getRow1() > street.getRightRow() && plcCmdInfo.getColumn1() > street.getRightColumn()) {
log.error("row:{},column:{},error in streetId:{} right", plcCmdInfo.getRow1(), plcCmdInfo.getColumn1(), street.getId());
return;
}
}
plcCmdInfo.setStreetId(street.getId());
Order order = new Order();
order.setOrderNum(plcCmdInfo.getOrderNum());
order.setStatus(0);
order.setStartTime(LocalDateTime.now());
order.setStreetId(street.getId());
order.setInOut1(plcCmdInfo.getSide1());
order.setLeftRight1(plcCmdInfo.getLeftRight1());
order.setColumn1(plcCmdInfo.getColumn1());
order.setRow1(plcCmdInfo.getRow1());
order.setWmsTrayCode(plcCmdInfo.getWmsTrayCode());
order.setWmsCode(plcCmdInfo.getWmsCode());
//todo 昆船的项目 ,取货 放货是独立的
//取货是是不知道放货的位置的所以订单开始的时候只写1位置
//订单结束写2位置
orderMapper.insert(order);
OrderRealtime.startOrder(street.getId(), plcCmdInfo.getOrderNum());
}
}
/**
@ -111,6 +144,40 @@ public class PlcService {
* @param plcCmdInfo
*/
public void orderStop(PlcCmdInfo plcCmdInfo) {
LocalDateTime endTime = LocalDateTime.now();
Street street = streetMapper.getStreetByPlcId(plcCmdInfo.getPlcId());
if (street == null) {
return;
}
Order order = orderMapper.getOneByOrderNum(plcCmdInfo.getOrderNum());
if (order == null) {
log.error("订单结束信号订单不存在orderNum:{}", plcCmdInfo.getOrderNum());
return;
}
plcCmdInfo.setStreetId(street.getId());
OrderRealtime.stopOrder(street.getId());
Order update = new Order();
update.setId(order.getId());
update.setEndTime(endTime);
update.setInOut2(plcCmdInfo.getSide2());
update.setLeftRight2(plcCmdInfo.getLeftRight2());
update.setColumn2(plcCmdInfo.getColumn2());
update.setRow2(plcCmdInfo.getRow2());
LocalDateTime endDownLoadTime = endTime.plusSeconds(10);
Duration duration = Duration.between(order.getStartTime(), endDownLoadTime);
if (duration.toMinutes() > 50) {
endDownLoadTime = order.getStartTime().plusMinutes(50);
}
if (street.getCamera1Id() != null) {
String path = cameraVideo(street.getCamera1Id(), order.getStartTime(), endDownLoadTime);
update.setVideoPath1(path);
}
if (street.getCamera2Id() != null) {
String path = cameraVideo(street.getCamera2Id(), order.getStartTime(), endDownLoadTime);
update.setVideoPath2(path);
}
orderMapper.updateById(update);
}
@ -263,21 +330,24 @@ public class PlcService {
CronTab.putTime(street.getId());
List<LightSource> lightSources = lightSourceMapper.selectList(new QueryWrapper<LightSource>().eq("street_id",street.getId()));
lightSources.forEach(lightSource -> {
try {
HikControlSocket.openLight(lightSource.getIp(),lightSource.getPort(),configProperties.getLightSource().getIndex(),1);
}catch (Exception e){
log.error("open light"+lightSource.getIp()+" error",e);
}
});
Integer cameraId = getCameraByPlcCmd(plcCmdInfo,plcCmdInfo.getLeftRight1());
//蜜雪冰城拍摄货物顶部时用同侧相机
Integer leftRightTop = plcCmdInfo.getLeftRight1() == 1 ? 2 : 1;
Integer cameraIdTop = getCameraByPlcCmd(plcCmdInfo, leftRightTop);
if(plcCmdInfo.getSeparation1() == 1 && configProperties.getScanCodeMode().getTray() == 2){
//内测
String c = cmdCode + "-" + plcCmdInfo.getLeftRightStr(1) + "-IN";
log.info("camera ptz"+c);
gyrateCameraByCode(cameraIdTop, c);
gyrateCameraByCode(cameraId, c);
}else {
log.info("camera ptz"+cmdCode);
gyrateCameraByCode(cameraIdTop, cmdCode);
String c = cmdCode + "-" + plcCmdInfo.getLeftRightStr(1);
log.info("camera ptz"+c);
gyrateCameraByCode(cameraId, c);
try {
Thread.sleep(configProperties.getCameraConfig().getDelayCaptureTime());
} catch (InterruptedException e) {
@ -383,13 +453,16 @@ public class PlcService {
log.warn("sick ocr error:{}", trayCode);
}
} else {
if (StringUtils.isEmpty(trayCode) || trayCode.equals("NoRead")) {
if ((StringUtils.isEmpty(trayCode) || trayCode.equals("NoRead")) ){
trayCode = "扫码枪识别异常";
trayGoodCheck = Boolean.FALSE;
log.warn("sick ocr error:{}", trayCode);
} else {
//扫到就认为正常
} else if(trayCode.equals(wmsTrayCode)){
//扫到
trayGoodCheck = Boolean.TRUE;
}else {
trayGoodCheck = Boolean.FALSE;
}
}
}
@ -465,7 +538,6 @@ public class PlcService {
// StockCheckRunnable stockCheckRunnable = new StockCheckRunnable(street,plcCmdInfo,cmdCode,stockMapper,path,checkLogMapper,configProperties.getScanCodeMode().getGoods(),wmsCode,wmsTrayCode,trayCode,trayCheck,configProperties,sensorGun);
// threadPoolExecutor.execute(stockCheckRunnable);
//还原相机
gyrateCameraByCode(cameraId, "C5");
long end = System.currentTimeMillis();
long s = end - startTime;
log.info("time:{}millisecond", s);
@ -644,7 +716,57 @@ public class PlcService {
* @param path
*/
public void captureUpdateOrderAndStock(OrderInfo orderInfo, String path) {
synchronized (orderInfo.getOrderNum().intern()) {
Order order = orderMapper.getOneByOrderNum(orderInfo.getOrderNum());
if (order != null) {
//update picPath in stock if code is C2/C4
if (orderInfo.getCode().startsWith("C2") || orderInfo.getCode().startsWith("C4")) {
StockLog stockLog = new StockLog();
stockLog.setStreetId(orderInfo.getStreetId());
stockLog.setDirection(orderInfo.getLeftRight());
stockLog.setSide(orderInfo.getSeparation());
stockLog.setRow(orderInfo.getRow());
stockLog.setColumn(orderInfo.getColumn());
stockLog.setPic(path);
String type = orderInfo.getCode().substring(1, 2);
stockLog.setType(Integer.valueOf(type));
stockLog.setOrderNum(orderInfo.getOrderNum());
stockLog.setCreateTime(LocalDateTime.now());
stockLogMapper.insert(stockLog);
// 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 {
// //take the previous picture path to the lasted over picture path
// //take the lasted picture path to the new one
// stock.setPreoperationPic(stock.getOveroperationPic());
// stock.setOveroperationPic(path);
// stock.setOrderNum(order.getOrderNum());
// //stock.setStatus(0);
// 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);
}
}
}
public Integer getCameraByPlcCmd(PlcCmdInfo plcCmdInfo,Integer leftRight){
@ -871,7 +993,7 @@ public class PlcService {
order.setOrderNum(taskId);
order.setLeftRight1(leftRight);
order.setInOut1(inout);
order.setIntoStockTime(LocalDateTime.now());
order.setEndTime(LocalDateTime.now());
order.setRow1(row);
order.setColumn1(column);
// if (oldOrder != null){
@ -894,7 +1016,7 @@ public class PlcService {
String[] pics = picName.split(";");
String picNameDataBase = ip+pics[0]+";"+ ip+pics[1];
Order oldOrder = orderMapper.getOneByOrderNum(taskId);
oldOrder.setIntoStockPic(picNameDataBase);
oldOrder.setPicPaths(picNameDataBase);
orderMapper.updateById(oldOrder);
return ip+pics[0]+"*"+ ip+pics[1];
}
@ -991,8 +1113,8 @@ public class PlcService {
if(order != null){
Order upd = new Order();
upd.setId(order.getId());
upd.setIntoStockOverPic(path);
upd.setIntoStockOverTime(LocalDateTime.now());
upd.setPicPaths(path);
upd.setEndTime(LocalDateTime.now());
orderMapper.updateById(upd);
}
cameraCapture(cameraId,false,0l,path);

@ -3,6 +3,7 @@ package com.zhehekeji.web.service;
import com.alibaba.excel.EasyExcel;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.zhehekeji.core.util.Assert;
@ -318,8 +319,16 @@ public class StockService {
* @return
*/
public Stock stockInfo(StockCheck stockCheck) {
Street street = streetService.streetById(stockCheck.getStreetId());
Stock stock = stockMapper.getByStreetAndDirectionAndSideAndRowColumn(stockCheck.getStreetId(),stockCheck.getDirection(),stockCheck.getSide(), stockCheck.getRow(), stockCheck.getColumn());
Street street = streetMapper.selectOne(new QueryWrapper<Street>()
//.eq(stockCheck.getStreetPlc()!=null&& !"".equals(stockCheck.getStreetPlc()),"plc_Id", stockCheck.getStreetPlc())
.eq(stockCheck.getStreetId()!=null,"id", stockCheck.getStreetId()));
Stock stock = stockMapper.selectOne(new QueryWrapper<Stock>().eq("`row`", stockCheck.getRow())
.eq("`column`", stockCheck.getColumn())
.eq("`direction`", stockCheck.getDirection())
.eq("`side`", stockCheck.getSide())
.eq(street.getId()!=null,"`street_id`", street.getId()));
if (stock == null) {
stock = new Stock();
stock.setColumn(stockCheck.getColumn());
@ -327,7 +336,10 @@ public class StockService {
//stock.setShelveId(stockCheck.getShelveId());
stock.setStatus(0);
}
stock.setStreetName(street.getName());
} else {
stock.setStreetName(street.getName());
List<StockLog> stockLogs = stockLogMapper.selectList(new QueryWrapper<StockLog>().eq("`row`", stockCheck.getRow()).eq("`column`", stockCheck.getColumn()).eq("street_id", stockCheck.getStreetId()).eq("direction", stockCheck.getDirection()).eq("side", stockCheck.getSide()).orderByDesc("create_time").last(" limit 2"));
if (stockLogs.size() == 1) {
stock.setOveroperationPic(stockLogs.get(0).getPic());
@ -335,13 +347,7 @@ public class StockService {
stock.setOveroperationPic(stockLogs.get(0).getPic());
stock.setPreoperationPic(stockLogs.get(1).getPic());
}
String ip ="http://"+ street.getPlcIp()+":9009/pic/"+stock.getCode()+"/"+stock.getCheckNum()+"/";
stock.setSidePic1(String.format("%s1.png",ip));
stock.setSidePic2(String.format("%s2.png",ip));
stock.setSidePic3(String.format("%s3.png",ip));
stock.setSidePic4(String.format("%s4.png",ip));
stock.setTopPic1(String.format("%s5.png",ip));
stock.setTopPic2(String.format("%s6.png",ip));
}
return stock;
}
@ -372,10 +378,14 @@ public class StockService {
Stock stock = stockInfo(stockCheck);
Assert.isTrue(stock != null && stock.getId() != null, "该货位暂时没有记录");
Integer oldStatus = stock.getStatus();
Assert.isTrue(StockStatus.ERROR.getStatus().equals(oldStatus), "无需核对");
//Assert.isTrue(StockStatus.ERROR.getStatus().equals(oldStatus), "无需核对");
log.info("check stock correct, street_id:{},direction:{},side:{},row:{},column:{}", stockCheck.getStreetId(), stockCheck.getDirection(), stockCheck.getSide(), stockCheck.getRow(), stockCheck.getColumn());
if (stockCheck.getOk() == 1) {
stock.setStatus(StockStatus.MANUAL.getStatus());
} else {
stock.setStatus(StockStatus.ERROR.getStatus());
}
stockMapper.updateById(stock);
checkLog(stock);
return stock;
@ -394,7 +404,12 @@ public class StockService {
checkLog.setStatus(stock.getStatus());
checkLog.setCode(stock.getCode());
checkLog.setCreateTime(LocalDateTime.now());
checkLogMapper.insert(checkLog);
checkLogMapper.update(checkLog, new UpdateWrapper<CheckLog>()
.eq("check_num", stock.getCheckNum())
.eq("`column`", stock.getColumn())
.eq("`row`", stock.getRow())
.eq("direction", stock.getDirection())
.eq("side", stock.getSide()));
}
/**

@ -33,7 +33,7 @@ public class KsecDecoder extends DelimiterBasedFrameDecoder {
private static String lastLotnum;
//private static ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(7,21,30, TimeUnit.MILLISECONDS,new ArrayBlockingQueue<>(20000));
private static ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(7,21,30, TimeUnit.MILLISECONDS,new ArrayBlockingQueue<>(20000));
private PlcService plcService;
@ -49,8 +49,8 @@ public class KsecDecoder extends DelimiterBasedFrameDecoder {
log.debug("no data");
return null;
}
//KescRunnable kescRunnable = new KescRunnable(in,ctx,plcService);
//threadPoolExecutor.execute(kescRunnable);
KescRunnable kescRunnable = new KescRunnable(in,ctx,plcService);
threadPoolExecutor.execute(kescRunnable);
return null;
}
@ -86,17 +86,17 @@ public class KsecDecoder extends DelimiterBasedFrameDecoder {
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);
}
//左右不调
// 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();

@ -54,6 +54,10 @@ public class KsecNettyClient {
* @param upId
*/
public void reconnect(Integer upId) {
if (channel != null) {
channel.disconnect();
channel.close();
}
Boolean isConnected = false;
int num = 0;
ConfigProperties.KSEC ksec = configProperties.getKsec();
@ -76,7 +80,6 @@ public class KsecNettyClient {
try {
createClient(ksec);
} catch (Exception e) {
channel.close();
//没连上 继续
log.error("reconnect error num:{}", num);
//关闭当前链接

@ -61,6 +61,8 @@ serverMode: 1
ksec:
ip: 127.0.0.1
port: 3000
platformIp: 127.0.0.1
platformPort: 3000
#断点重连的次数:-1->不断重连
# reconnectNum: -1
# #断点重连的时间间隔(单位ms)
@ -86,7 +88,7 @@ lightSource:
# 扫码模式 0:此处不盘点 1球机扫码 2sick扫码枪 3:南北达RFID
scanCodeMode:
tray: 0
goods: 0
goods: 2
goodsCodeTypes:
- 14
trayCodeTypes:

@ -12,6 +12,9 @@
<if test="req.startTimestamp != null and req.endTimestamp != null">
and t.into_stock_time >= #{req.startTimestamp} and t.into_stock_time &lt;= #{req.endTimestamp}
</if>
<if test="req.streetId != null and req.streetId != ''">
and t.street_id = #{req.streetId}
</if>
</where>
order by t.id desc
</select>

Loading…
Cancel
Save