蜜雪冰城简单修改

墙修改,代码修改,数据库修改,增加E2
增加返回给上位机的逻辑
焦作-mxbc-北起
LAPTOP-S9HJSOEB\昊天 2 years ago
parent 4228cb1c7b
commit 40b5232811

@ -25,7 +25,7 @@ public class Encryptor {
public static void main(String[] args) public static void main(String[] args)
{ {
String noEncrypt = "BFEBFBFF000A0671AK7211183"; String noEncrypt = "BFEBFBFF000B06710025_38BC_21C3_A29D.";
String encrypt = Encryptor.encryptStr(noEncrypt); String encrypt = Encryptor.encryptStr(noEncrypt);
System.out.println(encrypt); System.out.println(encrypt);
} }

@ -37,6 +37,8 @@ public class ConfigProperties {
private ScanCodeMode scanCodeMode; private ScanCodeMode scanCodeMode;
private String uploadResultsApiUrl;
@Data @Data
public static class CameraConfig{ public static class CameraConfig{

@ -139,6 +139,8 @@ public class StockController {
return Result.success(stockService.checkCorrect(stockCheck)); return Result.success(stockService.checkCorrect(stockCheck));
} }
@ApiOperation(value = "人工复核") @ApiOperation(value = "人工复核")
@RequestMapping(value = "/checkByMan", method = RequestMethod.POST) @RequestMapping(value = "/checkByMan", method = RequestMethod.POST)
public Result<Stock> checkByMan(@RequestBody CheckByMan checkByMan) { public Result<Stock> checkByMan(@RequestBody CheckByMan checkByMan) {

@ -45,6 +45,7 @@ public class CheckLog {
private String trayCode; private String trayCode;
private Integer status; private Integer status;
private String subtag;;
private String pic; private String pic;

@ -22,6 +22,10 @@ public class Order {
@ApiModelProperty("订单号") @ApiModelProperty("订单号")
private String orderNum; private String orderNum;
@ApiModelProperty("wms任务号")
@TableField(value = "`task_wms_id`")
private String taskWMSId;
@ApiModelProperty("0:正常 1告警") @ApiModelProperty("0:正常 1告警")
private Integer status; private Integer status;
@ -87,14 +91,11 @@ public class Order {
@ApiModelProperty("图片地址,分隔") @ApiModelProperty("图片地址,分隔")
private String picPaths; private String picPaths;
// @ApiModelProperty("入库照片")
// private String putPath; private String wmsTrayCode;
//
// @ApiModelProperty("出库照片") private String wmsCode;
// private String outputPath; private String subtag;
//
// @ApiModelProperty("货位照片")
// private String goodsPath;
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss") @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")
private LocalDateTime startTime; private LocalDateTime startTime;

@ -29,6 +29,13 @@ public class Stock {
@ApiModelProperty("盘点任务号") @ApiModelProperty("盘点任务号")
private String checkNum; private String checkNum;
@ApiModelProperty("wms任务号")
@TableField(value = "`task_wms_id`")
private String taskWMSId;
@ApiModelProperty("位置")
private String addre;
@ApiModelProperty("盘点批次号") @ApiModelProperty("盘点批次号")
private String lotnum; private String lotnum;
@ -58,8 +65,10 @@ public class Stock {
private Integer streetId; private Integer streetId;
private Integer direction; private Integer direction;
private Integer reply;
private Integer side; private Integer side;
private String subtag;
@TableField(value = "`row`") @TableField(value = "`row`")
@ApiModelProperty("行号") @ApiModelProperty("行号")

@ -0,0 +1,12 @@
package com.zhehekeji.web.entity;
import lombok.Data;
@Data
public class UploadCheckResults {
private String wcsTaskId;
private String wmsTaskId;
private String palno;
private String addre;
private Integer flag;
}

@ -444,7 +444,13 @@ public class HikCameraControlModuleImpl implements CameraControlModule {
public void toPtz(Integer ptzId, Integer cameraId) public void toPtz(Integer ptzId, Integer cameraId)
{ {
int dwPTZCommand = HCNetSDK.GOTO_PRESET; int dwPTZCommand = HCNetSDK.GOTO_PRESET;
Boolean ok = HikLoginModuleImpl.hcNetsdk.NET_DVR_PTZPreset_Other(CameraConnMap.getConnId(cameraId).intValue(), 1, dwPTZCommand, ptzId); Boolean ok = false;
try {
ok = HikLoginModuleImpl.hcNetsdk.NET_DVR_PTZPreset_Other(CameraConnMap.getConnId(cameraId).intValue(), 1, dwPTZCommand, ptzId);
}catch (NullPointerException e){
log.error("toPtz is not hive:{},cameraId:{}", HikLoginModuleImpl.hcNetsdk.NET_DVR_GetLastError(),cameraId);
}
if(!ok){ if(!ok){
log.error("toPtz error:{},cameraId:{}", HikLoginModuleImpl.hcNetsdk.NET_DVR_GetLastError(),cameraId); log.error("toPtz error:{},cameraId:{}", HikLoginModuleImpl.hcNetsdk.NET_DVR_GetLastError(),cameraId);
} }

@ -12,8 +12,9 @@ public class HikExceptionCallBack implements HCNetSDK.FExceptionCallBack {
public void invoke(int dwType, int lUserID, int lHandle, Pointer pUser) { public void invoke(int dwType, int lUserID, int lHandle, Pointer pUser) {
Integer cameraId =CameraConnMap.getCameraIdByLoginId(new NetSDKLib.LLong(lUserID)); Integer cameraId =CameraConnMap.getCameraIdByLoginId(new NetSDKLib.LLong(lUserID));
if(dwType == 32768){ if(dwType == 32768){
if(cameraId != null) {
log.error("hik disconnect,cameraId:{}", cameraId); log.error("hik disconnect,cameraId:{}", cameraId);
}
}else if(dwType == 32791){ }else if(dwType == 32791){
log.info("hik reconnect,cameraId:{}", CameraConnMap.getCameraIdByLoginId(new NetSDKLib.LLong(lUserID))); log.info("hik reconnect,cameraId:{}", CameraConnMap.getCameraIdByLoginId(new NetSDKLib.LLong(lUserID)));

@ -24,6 +24,7 @@ public enum Cmd {
D2, D2,
E, E,
E1, E1,
E2,
; ;
public static Boolean isBaseAction(String code){ public static Boolean isBaseAction(String code){

@ -13,6 +13,9 @@ public class OrderSearch {
private String orderNum; private String orderNum;
private Long streetId; private Long streetId;
private String subtag;
private String taskId;
private String trayCode;
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss") @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")
private LocalDateTime startTimestamp; private LocalDateTime startTimestamp;

@ -172,21 +172,21 @@ public class CameraService {
* @return * @return
*/ */
public List<Camera> allCameras1(){ public List<Camera> allCameras1(){
Integer num = configProperties.getVideoStyleConfig().getVideoStyleRow() *configProperties.getVideoStyleConfig().getVideoStyleColumn(); //Integer num = configProperties.getVideoStyleConfig().getVideoStyleRow() *configProperties.getVideoStyleConfig().getVideoStyleColumn();
Integer count = cameraMapper.selectCount(new QueryWrapper<Camera>()); Integer count = cameraMapper.selectCount(new QueryWrapper<Camera>());
List<Camera> cameras = cameraMapper.selectList(new QueryWrapper<Camera>().last("limit "+num)); List<Camera> cameras = cameraMapper.selectList(new QueryWrapper<Camera>().last("limit "+8));
return cameras; return cameras;
} }
public List<Camera> allCameras2(){ public List<Camera> allCameras2(){
Integer num = configProperties.getVideoStyleConfig().getVideoStyleRow() *configProperties.getVideoStyleConfig().getVideoStyleColumn(); Integer num = configProperties.getVideoStyleConfig().getVideoStyleRow() *configProperties.getVideoStyleConfig().getVideoStyleColumn();
List<Camera> cameras = cameraMapper.selectList(new QueryWrapper<Camera>().last("limit "+num +","+num)); List<Camera> cameras = cameraMapper.selectList(new QueryWrapper<Camera>().last("limit 0,4"));
return cameras; return cameras;
} }
public List<Camera> allCameras3(){ public List<Camera> allCameras3(){
Integer num = configProperties.getVideoStyleConfig().getVideoStyleRow() *configProperties.getVideoStyleConfig().getVideoStyleColumn(); Integer num = configProperties.getVideoStyleConfig().getVideoStyleRow() *configProperties.getVideoStyleConfig().getVideoStyleColumn();
List<Camera> cameras = cameraMapper.selectList(new QueryWrapper<Camera>().last("limit "+num*2+","+num)); List<Camera> cameras = cameraMapper.selectList(new QueryWrapper<Camera>().last("limit 2,4"));
return cameras; return cameras;
} }

@ -15,6 +15,13 @@ public class PlcCmdInfo {
*/ */
private String taskId; private String taskId;
private String subtag;
private String addre;
private String taskWMSId;
private String wmsTrayCode;
private String trayCode;
/** /**
* 1 2 * 1 2
*/ */
@ -55,6 +62,7 @@ public class PlcCmdInfo {
* *
*/ */
private Integer column2; private Integer column2;
private Integer reply = 1;
/** /**
* *

@ -130,6 +130,11 @@ public class PlcService {
order.setLeftRight1(plcCmdInfo.getLeftRight1()); order.setLeftRight1(plcCmdInfo.getLeftRight1());
order.setColumn1(plcCmdInfo.getColumn1()); order.setColumn1(plcCmdInfo.getColumn1());
order.setRow1(plcCmdInfo.getRow1()); order.setRow1(plcCmdInfo.getRow1());
order.setSubtag(plcCmdInfo.getSubtag());
order.setWmsTrayCode(plcCmdInfo.getWmsTrayCode());
order.setTaskWMSId(plcCmdInfo.getTaskWMSId());
order.setWmsCode(plcCmdInfo.getTaskWMSId());
order.setRow1(plcCmdInfo.getRow1());
//todo 昆船的项目 ,取货 放货是独立的 //todo 昆船的项目 ,取货 放货是独立的
//取货是是不知道放货的位置的所以订单开始的时候只写1位置 //取货是是不知道放货的位置的所以订单开始的时候只写1位置
//订单结束写2位置 //订单结束写2位置
@ -654,10 +659,11 @@ public class PlcService {
Integer cameraIdTop = getCameraByPlcCmd(plcCmdInfo, leftRightTop); Integer cameraIdTop = getCameraByPlcCmd(plcCmdInfo, leftRightTop);
if(plcCmdInfo.getSeparation1() == 1 && configProperties.getScanCodeMode().getTray() == 2){ if(plcCmdInfo.getSeparation1() == 1 && configProperties.getScanCodeMode().getTray() == 2){
//内测 //内测
String c = cmdCode + "-" + plcCmdInfo.getLeftRightStr(1) + "-IN"; String c = cmdCode + "-" + plcCmdInfo.getLeftRightStr(1) ;
log.info("camera ptz"+c); log.info("camera ptz"+c);
gyrateCameraByCode(cameraIdTop, c); gyrateCameraByCode(cameraIdTop, c);
}else { }else {
String c = cmdCode + "-" + plcCmdInfo.getLeftRightStr(1) ;
log.info("camera ptz"+cmdCode); log.info("camera ptz"+cmdCode);
gyrateCameraByCode(cameraIdTop, cmdCode); gyrateCameraByCode(cameraIdTop, cmdCode);
try { try {
@ -675,17 +681,30 @@ public class PlcService {
} catch (InterruptedException e) { } catch (InterruptedException e) {
e.printStackTrace(); e.printStackTrace();
} }
cameraCapture(cameraIdTop,false,null,path);
//成都蜜雪冰城 只拍照人工核对
String e2 = "E2-" + plcCmdInfo.getLeftRightStr(1) + "-IN";
log.info("camera ptz"+e2);
gyrateCameraByCode(cameraId, e2);
try { try {
Thread.sleep(configProperties.getCameraConfig().getEDelayCaptureTime()); cameraCapture(cameraIdTop, false, null, path);
} catch (InterruptedException e) {
e.printStackTrace(); //成都蜜雪冰城 只拍照人工核对
String e2 = "E2-" + plcCmdInfo.getLeftRightStr(1) + "-TOP";
log.info("camera ptz"+e2);
gyrateCameraByCode(cameraId, e2);
try {
Thread.sleep(configProperties.getCameraConfig().getEDelayCaptureTime());
} catch (InterruptedException e) {
e.printStackTrace();
}
cameraCapture(cameraId,false,null,path+".jpg");
try {
Thread.sleep(configProperties.getCameraConfig().getEDelayCaptureTime());
} catch (InterruptedException e) {
e.printStackTrace();
}
}catch (Exception e){
log.error("camera capture error:{}",e.getMessage());
} }
cameraCapture(cameraId,false,null,path+".jpg");
OrderInfo orderInfo = new OrderInfo(street,plcCmdInfo,1,cmdCode); OrderInfo orderInfo = new OrderInfo(street,plcCmdInfo,1,cmdCode);
Stock stock = stockMapper.getByStreetAndDirectionAndSideAndRowColumn(orderInfo.getStreetId(),orderInfo.getLeftRight(),orderInfo.getSeparation(),orderInfo.getRow(),orderInfo.getColumn()); Stock stock = stockMapper.getByStreetAndDirectionAndSideAndRowColumn(orderInfo.getStreetId(),orderInfo.getLeftRight(),orderInfo.getSeparation(),orderInfo.getRow(),orderInfo.getColumn());
//核对异常 //核对异常
@ -700,9 +719,12 @@ public class PlcService {
.checkNum(plcCmdInfo.getOrderNum()) .checkNum(plcCmdInfo.getOrderNum())
.lotnum(plcCmdInfo.getLotnum()) .lotnum(plcCmdInfo.getLotnum())
.code("") .code("")
.addre(plcCmdInfo.getAddre())
.wmsCode(wmsCode) .wmsCode(wmsCode)
.subtag(plcCmdInfo.getSubtag())
.wmsCategory(wmsCatagary) .wmsCategory(wmsCatagary)
.wmsTrayCode(wmsTrayCode) .wmsTrayCode(wmsTrayCode)
.taskWMSId(plcCmdInfo.getTaskWMSId())
.trayCode("") .trayCode("")
.streetId(orderInfo.getStreetId()) .streetId(orderInfo.getStreetId())
.direction(orderInfo.getLeftRight()) .direction(orderInfo.getLeftRight())
@ -712,6 +734,7 @@ public class PlcService {
.status(0) .status(0)
.checkPic(path) .checkPic(path)
.exportTime(LocalDateTime.now()) .exportTime(LocalDateTime.now())
.reply(plcCmdInfo.getReply())
.build(); .build();
stockMapper.insert(stock); stockMapper.insert(stock);
log.info("stockmapper insert new stock info."); log.info("stockmapper insert new stock info.");
@ -720,12 +743,17 @@ public class PlcService {
stock.setLotnum(plcCmdInfo.getLotnum()); stock.setLotnum(plcCmdInfo.getLotnum());
stock.setExportTime(LocalDateTime.now()); stock.setExportTime(LocalDateTime.now());
stock.setCheckPic(path); stock.setCheckPic(path);
stock.setAddre(plcCmdInfo.getAddre());
stock.setCheckNum(plcCmdInfo.getOrderNum()); stock.setCheckNum(plcCmdInfo.getOrderNum());
stock.setTaskWMSId(plcCmdInfo.getTaskWMSId());
stock.setSubtag(plcCmdInfo.getSubtag());
//stock.setTrayCode(trayCode); //stock.setTrayCode(trayCode);
stock.setWmsTrayCode(wmsTrayCode); stock.setWmsTrayCode(wmsTrayCode);
stock.setWmsCategory(wmsCatagary); stock.setWmsCategory(wmsCatagary);
stock.setCategory(wmsCatagary); stock.setCategory(wmsCatagary);
stock.setCode(wmsTrayCode); stock.setCode(wmsTrayCode);
stock.setReply(plcCmdInfo.getReply());
//stock.setCode(scanCode); //stock.setCode(scanCode);
stock.setWmsCode(wmsCode); stock.setWmsCode(wmsCode);
stockMapper.updateById(stock); stockMapper.updateById(stock);
@ -746,6 +774,7 @@ public class PlcService {
checkLog.setStreetId(stock.getStreetId()); checkLog.setStreetId(stock.getStreetId());
checkLog.setDirection(stock.getDirection()); checkLog.setDirection(stock.getDirection());
checkLog.setSide(stock.getSide()); checkLog.setSide(stock.getSide());
checkLog.setSubtag(stock.getSubtag());
checkLog.setCode(stock.getCode()); checkLog.setCode(stock.getCode());
checkLog.setWmsCode(stock.getWmsCode()); checkLog.setWmsCode(stock.getWmsCode());
checkLog.setStatus(stock.getStatus()); checkLog.setStatus(stock.getStatus());

@ -7,10 +7,8 @@ import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo; import com.github.pagehelper.PageInfo;
import com.zhehekeji.core.util.Assert; import com.zhehekeji.core.util.Assert;
import com.zhehekeji.web.entity.Stock; import com.zhehekeji.web.config.ConfigProperties;
import com.zhehekeji.web.entity.CheckLog; import com.zhehekeji.web.entity.*;
import com.zhehekeji.web.entity.StockLog;
import com.zhehekeji.web.entity.Street;
import com.zhehekeji.web.mapper.CheckLogMapper; import com.zhehekeji.web.mapper.CheckLogMapper;
import com.zhehekeji.web.mapper.StockLogMapper; import com.zhehekeji.web.mapper.StockLogMapper;
import com.zhehekeji.web.mapper.StockMapper; import com.zhehekeji.web.mapper.StockMapper;
@ -20,9 +18,14 @@ import com.zhehekeji.web.pojo.stock.*;
import io.swagger.models.auth.In; import io.swagger.models.auth.In;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
import org.springframework.web.client.ResourceAccessException;
import org.springframework.web.client.RestClientException;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource; import javax.annotation.Resource;
@ -45,6 +48,9 @@ public class StockService {
@Resource @Resource
private StreetMapper streetMapper; private StreetMapper streetMapper;
@Resource
ConfigProperties configProperties;
public void importExcel(MultipartFile file) { public void importExcel(MultipartFile file) {
log.info("import excel stock"); log.info("import excel stock");
// try { // try {
@ -74,6 +80,7 @@ public class StockService {
List<Stock> stocks = stockMapper.selectList(new QueryWrapper<Stock>().eq("street_id", streetId).orderByAsc("`direction`", "`side`", "`row`", "`column`")); List<Stock> stocks = stockMapper.selectList(new QueryWrapper<Stock>().eq("street_id", streetId).orderByAsc("`direction`", "`side`", "`row`", "`column`"));
return stocks; return stocks;
} }
public List<Stock> list() { public List<Stock> list() {
//List<String> shelves = streetService.check(street); //List<String> shelves = streetService.check(street);
@ -112,11 +119,15 @@ public class StockService {
columnTabStatus.put(column, 0); columnTabStatus.put(column, 0);
} }
//获取全部盘点内容 //获取全部盘点内容
List<Stock> stocks = stockMapper.selectList(new QueryWrapper<Stock>().select("status", "`row`", "`column`") List<Stock> stocks = stockMapper.selectList(new QueryWrapper<Stock>()
.select("status", "`row`", "`column`", "export_Time")
.eq("`street_id`", rowColumnStatus.getStreetId()) .eq("`street_id`", rowColumnStatus.getStreetId())
.eq("direction", rowColumnStatus.getDirection()) .eq("direction", rowColumnStatus.getDirection())
.eq("side", rowColumnStatus.getSide())); .eq("side", rowColumnStatus.getSide())
.orderByDesc("export_Time"));
Set<String> seen = new HashSet<>();
Map<Integer, Map<Integer, Stock>> stocksMap = stocks.stream() Map<Integer, Map<Integer, Stock>> stocksMap = stocks.stream()
.filter(f -> seen.add(f.getRow() + "-" + f.getColumn()))
//修改盘点范围值 //修改盘点范围值
.peek(stock -> { .peek(stock -> {
@ -124,11 +135,11 @@ public class StockService {
String[] strings = entry.getKey().split(" - "); String[] strings = entry.getKey().split(" - ");
if (stock.getRow() >= Integer.parseInt(strings[0]) && stock.getRow() <= Integer.parseInt(strings[1])) { if (stock.getRow() >= Integer.parseInt(strings[0]) && stock.getRow() <= Integer.parseInt(strings[1])) {
//若存在则先绿3 //若存在则先绿3
if(entry.getValue() == 0) entry.setValue(3); if (entry.getValue() == 0) entry.setValue(3);
//存在异常爆红2 //存在异常爆红2
if (stock.getStatus() == 1 ) { if (stock.getStatus() == 1) {
entry.setValue(2); entry.setValue(2);
}else if(entry.getValue() != 2 && stock.getStatus() == 0 ){//存在不爆红且未盘点 } else if (entry.getValue() != 2 && stock.getStatus() == 0) {//存在不爆红且未盘点
entry.setValue(1); entry.setValue(1);
} }
} }
@ -137,11 +148,11 @@ public class StockService {
String[] strings = entry.getKey().split(" - "); String[] strings = entry.getKey().split(" - ");
if (stock.getColumn() >= Integer.parseInt(strings[0]) && stock.getColumn() <= Integer.parseInt(strings[1])) { if (stock.getColumn() >= Integer.parseInt(strings[0]) && stock.getColumn() <= Integer.parseInt(strings[1])) {
//若存在则先绿3 //若存在则先绿3
if(entry.getValue() == 0) entry.setValue(3); if (entry.getValue() == 0) entry.setValue(3);
//存在异常爆红2 //存在异常爆红2
if (stock.getStatus() == 1 ) { if (stock.getStatus() == 1) {
entry.setValue(2); entry.setValue(2);
}else if(entry.getValue() != 2 && stock.getStatus() == 0 ){//存在不爆红且未盘点黄色1 } else if (entry.getValue() != 2 && stock.getStatus() == 0) {//存在不爆红且未盘点黄色1
entry.setValue(1); entry.setValue(1);
} }
} }
@ -149,9 +160,9 @@ public class StockService {
}) })
//若未盘点修改为-1 //若未盘点修改为-1
.peek(stock -> { .peek(stock -> {
if (stock.getStatus() == 0){ if (stock.getStatus() == 0) {
stock.setViewStatus(-1); stock.setViewStatus(-1);
}else stock.setViewStatus(stock.getStatus()); } else stock.setViewStatus(stock.getStatus());
}) })
.collect(Collectors.groupingBy(Stock::getColumn, Collectors.toMap(Stock::getRow, v -> v))); .collect(Collectors.groupingBy(Stock::getColumn, Collectors.toMap(Stock::getRow, v -> v)));
//赋值 //赋值
@ -165,7 +176,7 @@ public class StockService {
stock.setViewStatus(0); stock.setViewStatus(0);
//stock.setShelveId(shelveId); //stock.setShelveId(shelveId);
stockList.add(stock); stockList.add(stock);
}else stockList.add(stocksMap.get(j).get(i)); } else stockList.add(stocksMap.get(j).get(i));
} }
} }
@ -174,6 +185,7 @@ public class StockService {
checkStatus.setStocks(stockList); checkStatus.setStocks(stockList);
return checkStatus; return checkStatus;
} }
public CheckStatus statusByRowColumn(RowColumnStatus rowColumnStatus) { public CheckStatus statusByRowColumn(RowColumnStatus rowColumnStatus) {
CheckStatus checkStatus = new CheckStatus(); CheckStatus checkStatus = new CheckStatus();
checkStatus.setColumnStart(rowColumnStatus.getColumnStart()); checkStatus.setColumnStart(rowColumnStatus.getColumnStart());
@ -473,12 +485,44 @@ public class StockService {
} else { } else {
stock.setStatus(StockStatus.ERROR.getStatus()); stock.setStatus(StockStatus.ERROR.getStatus());
} }
if (stock.getReply() == 1) {
uploadResultsWMS(stock, stockCheck.getOk());
}
stockMapper.updateById(stock); stockMapper.updateById(stock);
checkLog(stock); checkLog(stock);
return stock; return stock;
} }
public void uploadResultsWMS(Stock stock, Integer stockStatus) {
ResponseEntity<String> body = null;
RestTemplate restTemplate = new RestTemplate();
String url = configProperties.getUploadResultsApiUrl();
UploadCheckResults uploadCheckResults = new UploadCheckResults();
//String url = "http://127.0.0.1:8083"+"/visionCompute";
uploadCheckResults.setWcsTaskId(stock.getCheckNum().split("_")[1]);
uploadCheckResults.setWmsTaskId(stock.getTaskWMSId());
uploadCheckResults.setPalno(stock.getWmsCode());
uploadCheckResults.setFlag(stockStatus == 1 ? 1 : 0);
uploadCheckResults.setAddre(stock.getAddre());
try {
// String jsonString = gson.toJson(algorithmPojo);
body = restTemplate.postForEntity(url, uploadCheckResults, String.class);
JSONObject.parseObject(body.getBody(), UploadCheckResults.class);
System.out.println(body);
} catch (RestClientException e) {
log.error("上传结果失败", e);
}
}
@Resource @Resource
private CheckLogMapper checkLogMapper; private CheckLogMapper checkLogMapper;
@ -497,12 +541,12 @@ public class StockService {
checkLog.setCode(stock.getCode()); checkLog.setCode(stock.getCode());
checkLog.setCreateTime(LocalDateTime.now()); checkLog.setCreateTime(LocalDateTime.now());
checkLog.setExportTime(stock.getExportTime()); checkLog.setExportTime(stock.getExportTime());
checkLogMapper.update(checkLog,new UpdateWrapper<CheckLog>() checkLogMapper.update(checkLog, new UpdateWrapper<CheckLog>()
.eq("check_num",stock.getCheckNum()) .eq("check_num", stock.getCheckNum())
.eq("`column`",stock.getColumn()) .eq("`column`", stock.getColumn())
.eq("`row`",stock.getRow()) .eq("`row`", stock.getRow())
.eq("direction",stock.getDirection()) .eq("direction", stock.getDirection())
.eq("side",stock.getSide())); .eq("side", stock.getSide()));
} }
/** /**
@ -532,7 +576,7 @@ public class StockService {
stock.setStatus(3); stock.setStatus(3);
List<Stock> stockList = stockMapper.selectList(new QueryWrapper<Stock>().eq("status", "0")); List<Stock> stockList = stockMapper.selectList(new QueryWrapper<Stock>().eq("status", "0"));
stockMapper.update(stock, new QueryWrapper<Stock>().eq("status", "0")); stockMapper.update(stock, new QueryWrapper<Stock>().eq("status", "0"));
for (Stock s:stockList){ for (Stock s : stockList) {
StockCheck stockCheck = new StockCheck(); StockCheck stockCheck = new StockCheck();
stockCheck.setColumn(s.getColumn()); stockCheck.setColumn(s.getColumn());
stockCheck.setStreetId(s.getStreetId()); stockCheck.setStreetId(s.getStreetId());

@ -10,6 +10,7 @@ public class KsecDataInfo {
private String cmdName; private String cmdName;
private String taskId; private String taskId;
private String taskWMSId;
private Integer fromColumn; private Integer fromColumn;
@ -39,6 +40,9 @@ public class KsecDataInfo {
private String trayCode; private String trayCode;
private String subtag;
private String addre;
/** /**
* *
*/ */

@ -28,13 +28,13 @@ public class KsecDecoder extends DelimiterBasedFrameDecoder {
private static final Logger tcpLogger = LoggerFactory.getLogger("tcp"); private static final Logger tcpLogger = LoggerFactory.getLogger("tcp");
public static void setLastLotnum(String lotnum){ public static void setLastLotnum(String lotnum) {
lastLotnum = lotnum; lastLotnum = lotnum;
} }
private static String lastLotnum; 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; private PlcService plcService;
@ -46,16 +46,16 @@ public class KsecDecoder extends DelimiterBasedFrameDecoder {
@Override @Override
protected Object decode(ChannelHandlerContext ctx, ByteBuf in) throws Exception { protected Object decode(ChannelHandlerContext ctx, ByteBuf in) throws Exception {
in = (ByteBuf) super.decode(ctx, in); in = (ByteBuf) super.decode(ctx, in);
if(in == null){ if (in == null) {
log.debug("no data"); log.debug("no data");
return null; return null;
} }
KescRunnable kescRunnable = new KescRunnable(in,ctx,plcService); KescRunnable kescRunnable = new KescRunnable(in, ctx, plcService);
threadPoolExecutor.execute(kescRunnable); threadPoolExecutor.execute(kescRunnable);
return null; return null;
} }
public static class KescRunnable implements Runnable{ public static class KescRunnable implements Runnable {
private ByteBuf in; private ByteBuf in;
@ -63,7 +63,7 @@ public class KsecDecoder extends DelimiterBasedFrameDecoder {
private PlcService plcService; private PlcService plcService;
public KescRunnable(ByteBuf body,ChannelHandlerContext ctx,PlcService plcService){ public KescRunnable(ByteBuf body, ChannelHandlerContext ctx, PlcService plcService) {
this.in = body; this.in = body;
this.ctx = ctx; this.ctx = ctx;
this.plcService = plcService; this.plcService = plcService;
@ -72,15 +72,15 @@ public class KsecDecoder extends DelimiterBasedFrameDecoder {
@Override @Override
public void run() { public void run() {
String body = in.toString(StandardCharsets.UTF_8); String body = in.toString(StandardCharsets.UTF_8);
tcpLogger.info("接收数据:"+body); tcpLogger.info("接收数据:" + body);
log.info("接收数据:"+body); log.info("接收数据:" + body);
if (body.startsWith("<")){ if (body.startsWith("<")) {
// 去掉首尾标识符 // 去掉首尾标识符
body = body.substring(1, body.length()); body = body.substring(1, body.length());
KsecInfo ksecInfo = JSONObject.parseObject(body, KsecInfo.class); KsecInfo ksecInfo = JSONObject.parseObject(body, KsecInfo.class);
if (Cmd.A.name().equals(ksecInfo.getType())) { if (Cmd.A.name().equals(ksecInfo.getType())) {
in.release(); in.release();
return ; return;
} }
KsecDataInfo dataInfo = ksecInfo.getData(); KsecDataInfo dataInfo = ksecInfo.getData();
LotnumConvert lotnumConvert = new LotnumConvert(dataInfo.getLotnum()); LotnumConvert lotnumConvert = new LotnumConvert(dataInfo.getLotnum());
@ -88,13 +88,20 @@ public class KsecDecoder extends DelimiterBasedFrameDecoder {
dataInfo.setLotnum(lotnum); dataInfo.setLotnum(lotnum);
ksecInfo.setData(dataInfo); ksecInfo.setData(dataInfo);
String ksecInfoStr = "<" + JSONObject.toJSONString(ksecInfo) + ">"; String ksecInfoStr = "<" + JSONObject.toJSONString(ksecInfo) + ">";
tcpLogger.info("转换后数据: "+ksecInfoStr); tcpLogger.info("转换后数据: " + ksecInfoStr);
PlcCmdInfo plcCmdInfo = null; PlcCmdInfo plcCmdInfo = null;
String srmNumber = null; String srmNumber = null;
String cmdName = null; String cmdName = null;
if(dataInfo != 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.setSubtag(dataInfo.getSubtag());
plcCmdInfo.setAddre(dataInfo.getAddre());
plcCmdInfo.setTaskWMSId(dataInfo.getTaskWMSId());
plcCmdInfo.setAddre(dataInfo.getAddre());
plcCmdInfo.setWmsTrayCode(dataInfo.getTrayCode());
plcCmdInfo.setTrayCode(dataInfo.getCode());
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(); srmNumber = dataInfo.getSRMNumber();
cmdName = dataInfo.getCmdName(); cmdName = dataInfo.getCmdName();
@ -108,12 +115,12 @@ public class KsecDecoder extends DelimiterBasedFrameDecoder {
if (Cmd.B1.name().equals(cmdName)) { if (Cmd.B1.name().equals(cmdName)) {
//昆船盘点模式下也会发B1 ,但是不会发送B2 //昆船盘点模式下也会发B1 ,但是不会发送B2
//这里判断下,是否存在盘点批次号 若存在既是盘点的B1,无需处理若不存在lotnum则是随行的B1 //这里判断下,是否存在盘点批次号 若存在既是盘点的B1,无需处理若不存在lotnum则是随行的B1
if(StringUtils.isEmpty(dataInfo.getLotnum())){ if (StringUtils.isEmpty(dataInfo.getLotnum())) {
//任务开始 旋转到原点位 //任务开始 旋转到原点位
plcService.gyrateCamera(plcCmdInfo,Cmd.C5.name()); plcService.gyrateCamera(plcCmdInfo, Cmd.C5.name());
plcService.orderStart(plcCmdInfo); plcService.orderStart(plcCmdInfo);
plcService.openStreetLightSource(plcCmdInfo.getStreetId()); plcService.openStreetLightSource(plcCmdInfo.getStreetId());
}else { } else {
log.info("check move"); log.info("check move");
} }
@ -121,14 +128,14 @@ public class KsecDecoder extends DelimiterBasedFrameDecoder {
//B2 C4 一起发的需要停止等B2 //B2 C4 一起发的需要停止等B2
//这里判断是不是双伸 //这里判断是不是双伸
if(plcCmdInfo.getSeparation2() == 2){ if (plcCmdInfo.getSeparation2() == 2) {
//深测货架延迟 //深测货架延迟
try { try {
Thread.sleep(plcService.getConfigProperties().getCameraConfig().getB2OutDelayTime()); Thread.sleep(plcService.getConfigProperties().getCameraConfig().getB2OutDelayTime());
} catch (InterruptedException e) { } catch (InterruptedException e) {
e.printStackTrace(); e.printStackTrace();
} }
}else { } else {
//浅侧延迟 //浅侧延迟
try { try {
Thread.sleep(plcService.getConfigProperties().getCameraConfig().getB2DelayTime()); Thread.sleep(plcService.getConfigProperties().getCameraConfig().getB2DelayTime());
@ -136,11 +143,12 @@ public class KsecDecoder extends DelimiterBasedFrameDecoder {
e.printStackTrace(); e.printStackTrace();
} }
} }
plcService.gyrateCamera(plcCmdInfo,Cmd.C5.name());
plcService.orderStop(plcCmdInfo); plcService.orderStop(plcCmdInfo);
plcService.closeStreetLightSource(plcCmdInfo.getStreetId()); plcService.closeStreetLightSource(plcCmdInfo.getStreetId());
//重置相机水平方向 //重置相机水平方向
plcService.verticalAdjustmentByStreet( dataInfo.getSRMNumber()); plcService.verticalAdjustmentByStreet(dataInfo.getSRMNumber());
plcService.gyrateCamera(plcCmdInfo, Cmd.C5.name());
} }
} else if (Cmd.C.name().equals(ksecInfo.getType())) { } else if (Cmd.C.name().equals(ksecInfo.getType())) {
@ -159,8 +167,8 @@ public class KsecDecoder extends DelimiterBasedFrameDecoder {
} catch (InterruptedException e) { } catch (InterruptedException e) {
e.printStackTrace(); e.printStackTrace();
} }
}else { } else {
log.info("other C code :{}",code); log.info("other C code :{}", code);
} }
} else if (Cmd.D.name().equals(ksecInfo.getType())) { } else if (Cmd.D.name().equals(ksecInfo.getType())) {
@ -191,18 +199,23 @@ public class KsecDecoder extends DelimiterBasedFrameDecoder {
// lastLotnum = lotnum; // lastLotnum = lotnum;
// } // }
//盘点 //盘点
//转球机到盘点位 然后拍照 //转球机到盘点位 然后拍照
if (Cmd.E2.name().equals(cmdName)) {
plcCmdInfo.setReply(0);
}
plcCmdInfo.setTimes(1); plcCmdInfo.setTimes(1);
//成都蜜雪冰城 将lotnum当成托盘条码描述 //成都蜜雪冰城 将lotnum当成托盘条码描述
Boolean ok = plcService.check(plcCmdInfo,ksecInfo.getData().getCmdName(), dataInfo.getCode(), dataInfo.getTrayCode(), dataInfo.getLotnum()); Boolean ok = plcService.check(plcCmdInfo, ksecInfo.getData().getCmdName(), dataInfo.getCode(), dataInfo.getTrayCode(), dataInfo.getLotnum());
// Boolean ok = true; // Boolean ok = true;
if(ok){ if (ok) {
ksecInfo.getData().setAckStatus(1); ksecInfo.getData().setAckStatus(1);
}else { } else {
ksecInfo.getData().setAckStatus(0); ksecInfo.getData().setAckStatus(0);
} }
ctx.channel().writeAndFlush(ksecInfo); ctx.channel().writeAndFlush(ksecInfo);
log.info("盘点结束:"+ksecInfo.getData().toString()); log.info("盘点结束:" + ksecInfo.getData().toString());
} }
//找到该货位的最后一张照片与现在的照片比照 //找到该货位的最后一张照片与现在的照片比照
//plcService.recordStock(plcCmdInfo, dataInfo.getCode(), 0, 0); //plcService.recordStock(plcCmdInfo, dataInfo.getCode(), 0, 0);

@ -70,6 +70,7 @@ public class KsecNettyClient {
catch (Exception e) { catch (Exception e) {
//关闭当前链接 //关闭当前链接
if(channel!=null) { if(channel!=null) {
channel.disconnect();
channel.close(); channel.close();
} }
log.error("reconnect error num:{}", num); log.error("reconnect error num:{}", num);

@ -14,7 +14,7 @@ spring:
testWhileIdle: false testWhileIdle: false
timeBetweenEvictionRunsMillis: 60000 timeBetweenEvictionRunsMillis: 60000
type: com.alibaba.druid.pool.DruidDataSource type: com.alibaba.druid.pool.DruidDataSource
url: jdbc:mysql://127.0.0.1:3306/lia_duoji?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8 url: jdbc:mysql://127.0.0.1:3306/lia_duoji_jiazuomx?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8
username: root username: root
validationQuery: SELECT 1 FROM DUAL validationQuery: SELECT 1 FROM DUAL
# --------本服务端口号 # --------本服务端口号
@ -64,7 +64,7 @@ savePath:
# ------------服务端类型 0TCP(罗伯泰克) 1:KSEC(JSON)(昆船) # ------------服务端类型 0TCP(罗伯泰克) 1:KSEC(JSON)(昆船)
serverMode: 1 serverMode: 1
ksec: ksec:
ip: 192.168.168.11 ip: 127.0.0.1
port: 8001 port: 8001
#断点重连的次数:-1->不断重连 #断点重连的次数:-1->不断重连
reconnectNum: -1 reconnectNum: -1
@ -94,3 +94,5 @@ scanCodeMode:
- 14 - 14
# 照片 視頻保存多久 # 照片 視頻保存多久
deleteFileDays: 365 deleteFileDays: 365
uploadResultsApiUrl: http://127.0.0.1:9002/InventoryResult/Ir

@ -7,12 +7,21 @@
from `order` t from `order` t
<where> <where>
<if test="req.orderNum != null and req.orderNum != ''"> <if test="req.orderNum != null and req.orderNum != ''">
and t.order_num = #{req.orderNum} and t.order_num like concat('%', #{req.orderNum},'%')
</if>
<if test="req.taskId != null and req.taskId != ''">
and t.task_WMS_Id like concat('%', #{req.taskId},'%')
</if>
<if test="req.subtag != null and req.subtag != ''">
and t.subtag like concat('%', #{req.subtag},'%')
</if>
<if test="req.trayCode != null and req.trayCode != ''">
and t.wms_Code like concat('%', #{req.trayCode},'%')
</if> </if>
<if test="req.startTimestamp != null and req.endTimestamp != null"> <if test="req.startTimestamp != null and req.endTimestamp != null">
and t.start_time >= #{req.startTimestamp} and t.start_time &lt;= #{req.endTimestamp} and t.start_time >= #{req.startTimestamp} and t.start_time &lt;= #{req.endTimestamp}
</if> </if>
<if test="req.streetId != null and req.streetId != ''"> <if test="req.streetId != null and req.streetId != '' and req.streetId != 0">
and t.street_id = #{req.streetId} and t.street_id = #{req.streetId}
</if> </if>
</where> </where>

Loading…
Cancel
Save