盘点管理

nanjing-yancao-wuliuzhongxin
yiming 3 years ago
parent a377b6a227
commit 123f410e80

@ -115,13 +115,13 @@ public class ClientTestController {
return Result.success(); return Result.success();
} }
@ApiOperation("模拟普天 货物入库 【货位入库】") @ApiOperation("模拟普天 货物入库,顶部拍照 【货位入库】")
@GetMapping("/intoStock/picOver") @GetMapping("/intoStock/picOver")
public Result<String> picOver(@ApiParam("巷道标识") @RequestParam String SRMNumber,@ApiParam("盘点批次ID") @RequestParam String taskId, public Result<String> picOver(@ApiParam("巷道标识") @RequestParam String SRMNumber,@ApiParam("盘点批次ID") @RequestParam String taskId,
@ApiParam("货位号,如L0100010002 ,R/L表示左右,01是浅货位02深,0001是X,0002是Y") @RequestParam String goodsLocation){ @ApiParam("货位号,如L0100010002 ,R/L表示左右,01是浅货位02深,0001是X,0002是Y") @RequestParam String goodsLocation){
String picPath = plcService.IntoStock(SRMNumber,"C1",taskId,goodsLocation); String picPath = plcService.IntoStock(SRMNumber,taskId,goodsLocation);
//返回普天 //返回普天
PTData ptData = PTData.IntoStock(SRMNumber,taskId,goodsLocation,picPath); PTData ptData = PTData.IntoStock(SRMNumber,taskId,goodsLocation,picPath);
PuTianNettyClient.write(ptData); PuTianNettyClient.write(ptData);
@ -134,7 +134,7 @@ public class ClientTestController {
@ApiParam("货位号,如L0100010002 ,R/L表示左右,01是浅货位02深,0001是X,0002是Y") @RequestParam String goodsLocation){ @ApiParam("货位号,如L0100010002 ,R/L表示左右,01是浅货位02深,0001是X,0002是Y") @RequestParam String goodsLocation){
//拍入库完成后的照片 //拍入库完成后的照片
String picPath = plcService.IntoStockOver(SRMNumber,"C2",taskId,goodsLocation); String picPath = plcService.IntoStockOver(SRMNumber,taskId,goodsLocation);
//向客户端发送读码指令,等待客户端返回条码 //向客户端发送读码指令,等待客户端返回条码
ISTransmission isTransmission = new ISTransmission(SRMNumber,taskId,goodsLocation); ISTransmission isTransmission = new ISTransmission(SRMNumber,taskId,goodsLocation);
//为防万一先清除code //为防万一先清除code

@ -8,4 +8,6 @@ public class StreetSearch {
private Integer pageSize; private Integer pageSize;
private Integer pageNum; private Integer pageNum;
private Integer searchType;
} }

@ -109,16 +109,19 @@ public class CameraService {
PageHelper.startPage(streetSearch.getPageNum(), streetSearch.getPageSize()); PageHelper.startPage(streetSearch.getPageNum(), streetSearch.getPageSize());
List<Camera> cameras = cameraMapper.selectByMap(new HashMap<>(0)); List<Camera> cameras = cameraMapper.selectByMap(new HashMap<>(0));
if(cameras.size() > 0){ if(cameras.size() > 0){
CountDownLatch latch = new CountDownLatch(cameras.size()); if(streetSearch.getSearchType() == null || streetSearch.getSearchType() == 0){
cameras.forEach(camera -> { CountDownLatch latch = new CountDownLatch(cameras.size());
StatusThread statusThread = new StatusThread(camera,latch); cameras.forEach(camera -> {
statusThread.start(); StatusThread statusThread = new StatusThread(camera,latch);
}); statusThread.start();
try { });
latch.await(); try {
} catch (InterruptedException e) { latch.await();
e.printStackTrace(); } catch (InterruptedException e) {
e.printStackTrace();
}
} }
} }
return new PageInfo<>(cameras); return new PageInfo<>(cameras);

@ -448,7 +448,6 @@ public class PlcService {
public Stock checkStart(TMTransmission tmTransmission){ public Stock checkStart(TMTransmission tmTransmission){
log.info("【开始盘点货位】save stock info ,taskId:{},SRMNumber:{}goodsLocation:{}",tmTransmission.getTaskNo(),tmTransmission.getSRMNumber(),tmTransmission.getGoodsLocation()); log.info("【开始盘点货位】save stock info ,taskId:{},SRMNumber:{}goodsLocation:{}",tmTransmission.getTaskNo(),tmTransmission.getSRMNumber(),tmTransmission.getGoodsLocation());
Street street = streetService.getStreetByPlcId(tmTransmission.getSRMNumber()); Street street = streetService.getStreetByPlcId(tmTransmission.getSRMNumber());
Integer row = Integer.valueOf(tmTransmission.getGoodsLocation().substring(3,7)); Integer row = Integer.valueOf(tmTransmission.getGoodsLocation().substring(3,7));
Integer column = Integer.valueOf(tmTransmission.getGoodsLocation().substring(7)); Integer column = Integer.valueOf(tmTransmission.getGoodsLocation().substring(7));
Integer leftRight = tmTransmission.getGoodsLocation().substring(0,1).equals("L")?1:2; Integer leftRight = tmTransmission.getGoodsLocation().substring(0,1).equals("L")?1:2;
@ -557,26 +556,28 @@ public class PlcService {
/** /**
* *
* C1
* @param SRMNumber * @param SRMNumber
* @param PTZCode
* @return * @return
*/ */
public String IntoStock(String SRMNumber,String PTZCode,String taskId,String goodsLocation){ public String IntoStock(String SRMNumber,String taskId,String goodsLocation){
Street street = streetService.getStreetByPlcId(SRMNumber); Street street = streetService.getStreetByPlcId(SRMNumber);
//南京烟草物流只有一个相机 //南京烟草物流只有一个相机
Integer cameraId = street.getCamera1Id() == null ? street.getCamera2Id():street.getCamera1Id(); Integer cameraId = street.getCamera1Id() == null ? street.getCamera2Id():street.getCamera1Id();
Integer row = Integer.valueOf(goodsLocation.substring(3,7));
Integer column = Integer.valueOf(goodsLocation.substring(7));
Integer leftRight = goodsLocation.substring(0,1).equals("L")?1:2;
Integer inout = Integer.valueOf(goodsLocation.substring(1,3));
//转动拍照 //转动拍照
gyrateCameraByCode(cameraId,PTZCode); gyrateCameraByCode(cameraId,"C1");
//等待2s再拍照 //等待2s再拍照
try { try {
Thread.sleep(2000l); Thread.sleep(2000l);
} catch (InterruptedException e) { } catch (InterruptedException e) {
e.printStackTrace(); e.printStackTrace();
} }
Integer row = Integer.valueOf(goodsLocation.substring(3,7));
Integer column = Integer.valueOf(goodsLocation.substring(7));
Integer leftRight = goodsLocation.substring(0,1).equals("L")?1:2;
Integer inout = Integer.valueOf(goodsLocation.substring(1,3));
String path = PathUtil.createFileNameByRowColumn("jpg",cameraId,row,column); String path = PathUtil.createFileNameByRowColumn("jpg",cameraId,row,column);
Order order = new Order(); Order order = new Order();
order.setStreetId(street.getId()); order.setStreetId(street.getId());
@ -585,6 +586,8 @@ public class PlcService {
order.setInOut1(inout); order.setInOut1(inout);
order.setIntoStockPic(path); order.setIntoStockPic(path);
order.setIntoStockTime(LocalDateTime.now()); order.setIntoStockTime(LocalDateTime.now());
order.setRow1(row);
order.setColumn1(column);
orderMapper.insert(order); orderMapper.insert(order);
cameraCapture(cameraId,false,0l,path); cameraCapture(cameraId,false,0l,path);
return configProperties.getIP()+":9007/"+path; return configProperties.getIP()+":9007/"+path;
@ -593,14 +596,20 @@ public class PlcService {
/** /**
* *
* @param SRMNumber * @param SRMNumber
* @param PTZCode
* @return * @return
*/ */
public String IntoStockOver(String SRMNumber,String PTZCode,String taskId,String goodsLocation){ public String IntoStockOver(String SRMNumber,String taskId,String goodsLocation){
Street street = streetService.getStreetByPlcId(SRMNumber); Street street = streetService.getStreetByPlcId(SRMNumber);
//南京烟草物流只有一个相机 //南京烟草物流只有一个相机
Integer cameraId = street.getCamera1Id() == null ? street.getCamera2Id():street.getCamera1Id(); Integer cameraId = street.getCamera1Id() == null ? street.getCamera2Id():street.getCamera1Id();
Integer row = Integer.valueOf(goodsLocation.substring(3,7));
Integer column = Integer.valueOf(goodsLocation.substring(7));
Integer leftRight = goodsLocation.substring(0,1).equals("L")?1:2;
Integer inout = Integer.valueOf(goodsLocation.substring(1,3));
String inoutString = inout == 1 ? "IN" : "OUT";
String leftRightString = leftRight == 1 ? "L":"R";
//转动拍照 //转动拍照
String PTZCode = String.format("C2-%s-%s", inoutString,leftRightString);
gyrateCameraByCode(cameraId,PTZCode); gyrateCameraByCode(cameraId,PTZCode);
//等待2s再拍照 //等待2s再拍照
try { try {
@ -608,10 +617,7 @@ public class PlcService {
} catch (InterruptedException e) { } catch (InterruptedException e) {
e.printStackTrace(); e.printStackTrace();
} }
Integer row = Integer.valueOf(goodsLocation.substring(3,7));
Integer column = Integer.valueOf(goodsLocation.substring(7));
Integer leftRight = goodsLocation.substring(0,1).equals("L")?1:2;
Integer inout = Integer.valueOf(goodsLocation.substring(1,3));
String path = PathUtil.createFileNameByRowColumn("jpg",cameraId,row,column); String path = PathUtil.createFileNameByRowColumn("jpg",cameraId,row,column);
Order order = orderMapper.getOneByOrderNum(taskId); Order order = orderMapper.getOneByOrderNum(taskId);
if(order != null){ if(order != null){

@ -89,37 +89,9 @@ public class StreetService {
if(!StringUtils.isEmpty(street.getPlcIp())){ if(!StringUtils.isEmpty(street.getPlcIp())){
ClientChanel.putIp(street.getPlcIp(),street.getPlcId()); ClientChanel.putIp(street.getPlcIp(),street.getPlcId());
} }
if(configProperties.getServerMode().equals(0)){
StreetConn.init(street.getId(), street.getPlcId());
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
//连接
try {
nettyClient.createClient(street);
} catch (InterruptedException e) {
log.error("新增巷道,连接异常");
}
}
});
thread.start();
}
if(!StringUtils.isEmpty(streetVO.getLightSourceIp()) && streetVO.getLightSourcePort() != null && streetVO.getLightSourcePort() != 0){
LightSource lightSource = new LightSource();
lightSource.setStreetId(street.getId());
lightSource.setIp(streetVO.getLightSourceIp());
lightSource.setPort(streetVO.getLightSourcePort());
lightSourceMapper.insert(lightSource);
}
if(!StringUtils.isEmpty(streetVO.getRFIDIp()) && streetVO.getRFIDPort() != null && streetVO.getRFIDPort() != 0){
RFID rfid = new RFID();
rfid.setStreetId(street.getId());
rfid.setIp(streetVO.getRFIDIp());
rfid.setPort(streetVO.getRFIDPort());
rfidMapper.insert(rfid);
}
streetVO.setId(street.getId()); streetVO.setId(street.getId());
sensorGunConfig(streetVO,street.getId()); //sensorGunConfig(streetVO,street.getId());
return street; return street;
} }

@ -27,18 +27,32 @@ public class ClientChanel {
* key :IP * key :IP
* value: * value:
*/ */
private static Map<String,String> IPMap = new HashMap<>(); private static Map<String,String> IP_SRMNumberMap = new HashMap<>();
/**
* key :
* value: IP
*/
private static Map<String,String> SRMNumber_IPMap = new HashMap<>();
public static void putIp(String ip,String ID){ public static void putIp(String ip,String ID){
IPMap.put(ip,ID); IP_SRMNumberMap.put(ip,ID);
}
public static void putSRMNUmber_Ip(String ID,String ip){
SRMNumber_IPMap.put(ip,ID);
}
public static String getIpFromId(String ID){
return SRMNumber_IPMap.get(ID);
} }
public static void deleteIp(String ip){ public static void deleteIp(String ip){
IPMap.remove(ip); IP_SRMNumberMap.remove(ip);
} }
public static String getIDFromIp(String ip){ public static String getIDFromIp(String ip){
return IPMap.get(ip); return IP_SRMNumberMap.get(ip);
} }
public static void connect(String key, Channel channel){ public static void connect(String key, Channel channel){

@ -64,14 +64,17 @@ public class Decoder extends DelimiterBasedFrameDecoder {
//回复客户端,建立连接完成 //回复客户端,建立连接完成
ctx.channel().writeAndFlush(ceTransmission.toString()); ctx.channel().writeAndFlush(ceTransmission.toString());
ClientChanel.connect(ceTransmission.getSRMNumber(), ctx.channel()); ClientChanel.connect(ceTransmission.getSRMNumber(), ctx.channel());
tcpLogger.info("client:{} connect", ceTransmission.getSRMNumber()); tcpLogger.info("client:{} connect", ceTransmission.getSRMNumber());
in.release(); in.release();
}else if(body.startsWith(ECTransmission.getHEADER())){ }else if(body.startsWith(ECTransmission.getHEADER())){
//空货位盘点 //空货位盘点
ECTransmission ecTransmission = new ECTransmission(body); ECTransmission ecTransmission = new ECTransmission(body);
//保存空货位条码
EmptyCheckCodeInfo.addCode(ecTransmission.getSRMNumber(),ecTransmission.getRow(),ecTransmission.getStartColumn(), ecTransmission.getEndColumn(), ecTransmission.getOriginCode());
//保存空货位信息 //保存空货位信息
emptyCheckService.emptyCheckLog(ecTransmission); emptyCheckService.emptyCheckLog(ecTransmission);
in.release();
}else if(body.startsWith("DC")){ }else if(body.startsWith("DC")){
//客户端断开连接 //客户端断开连接
String [] strings = body.split(","); String [] strings = body.split(",");
@ -79,6 +82,7 @@ public class Decoder extends DelimiterBasedFrameDecoder {
tcpLogger.info("client:{} disConnect", strings[1]); tcpLogger.info("client:{} disConnect", strings[1]);
ClientChanel.disConnect(strings[1]); ClientChanel.disConnect(strings[1]);
} }
in.release();
} }
return null; return null;
} }

@ -0,0 +1,41 @@
package com.zhehekeji.web.service.client;
import lombok.Data;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
/**
*
*/
@Data
public class EmptyCheckCodeInfo {
private static Map<String, Set<String>> allCode = new HashMap<>();
public static void start(String SRMNumber,Integer row,Integer startColumn,Integer endColumn){
String key = String.format("{}-{}-{}-{}",SRMNumber,row,startColumn,endColumn);
allCode.remove(key);
}
public static void addCode(String SRMNumber,Integer row,Integer startColumn,Integer endColumn,String code){
String key = String.format("{}-{}-{}-{}",SRMNumber,row,startColumn,endColumn);
Set<String> codes = allCode.get(key);
if(codes == null){
codes = new HashSet<>();
}
codes.add(code);
}
public static Set<String> getAllCode(String SRMNumber,Integer row,Integer startColumn,Integer endColumn){
String key = String.format("{}-{}-{}-{}",SRMNumber,row,startColumn,endColumn);
return allCode.get(key);
}
public static void stop(String SRMNumber,Integer row,Integer startColumn,Integer endColumn){
String key = String.format("{}-{}-{}-{}",SRMNumber,row,startColumn,endColumn);
allCode.remove(key);
}
}

@ -1,7 +1,9 @@
package com.zhehekeji.web.service.client; package com.zhehekeji.web.service.client;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data; import lombok.Data;
import java.time.LocalDateTime;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
@ -11,6 +13,10 @@ public class RealtimeCheckMap {
private static Map<String,CheckInfo> map = new HashMap<>(); private static Map<String,CheckInfo> map = new HashMap<>();
public static void put(String SRMNumber,CheckInfo checkInfo){ public static void put(String SRMNumber,CheckInfo checkInfo){
checkInfo.setTime(LocalDateTime.now());
String ip = ClientChanel.getIpFromId(SRMNumber);
ip = ip +":9008/pic";
checkInfo.setIP(ip);
map.put(SRMNumber,checkInfo); map.put(SRMNumber,checkInfo);
} }
@ -41,6 +47,8 @@ public class RealtimeCheckMap {
private Integer checkCount; private Integer checkCount;
private Integer status;
private String topPic1; private String topPic1;
private String topPic2; private String topPic2;
@ -53,5 +61,20 @@ public class RealtimeCheckMap {
private String sidePic4; private String sidePic4;
private String IP;
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")
private LocalDateTime time;
public Integer getStatus(){
if(WMSCode.equals(checkCount) && checkCount.equals(WMSCount)){
return 1;
}
return 0;
}
} }
} }

@ -3,6 +3,7 @@ package com.zhehekeji.web.service.putian;
import com.zhehekeji.web.service.EmptyCheckService; import com.zhehekeji.web.service.EmptyCheckService;
import com.zhehekeji.web.service.client.ClientChanel; import com.zhehekeji.web.service.client.ClientChanel;
import com.zhehekeji.web.service.client.ECTransmission; import com.zhehekeji.web.service.client.ECTransmission;
import com.zhehekeji.web.service.client.EmptyCheckCodeInfo;
import com.zhehekeji.web.service.ksec.KsecDecoder; import com.zhehekeji.web.service.ksec.KsecDecoder;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelHandlerContext;
@ -12,6 +13,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import java.nio.charset.Charset; import java.nio.charset.Charset;
import java.util.Set;
@Slf4j @Slf4j
public class PTDecoder extends LineBasedFrameDecoder { public class PTDecoder extends LineBasedFrameDecoder {
@ -51,6 +53,7 @@ public class PTDecoder extends LineBasedFrameDecoder {
String startEmptyCheckStr = ECTransmission.toEmptyCheckStartString(checkContent.getSRMNUmber(),checkContent.getTaskNo(),checkContent.getRow(),checkContent.getStartColumn(),checkContent.getEndColumn()); String startEmptyCheckStr = ECTransmission.toEmptyCheckStartString(checkContent.getSRMNUmber(),checkContent.getTaskNo(),checkContent.getRow(),checkContent.getStartColumn(),checkContent.getEndColumn());
//通知客户端开始检测 //通知客户端开始检测
ClientChanel.write(startEmptyCheckStr,checkContent.getSRMNUmber()); ClientChanel.write(startEmptyCheckStr,checkContent.getSRMNUmber());
EmptyCheckCodeInfo.start(checkContent.getSRMNUmber(),checkContent.getRow(),checkContent.getStartColumn(),checkContent.getEndColumn());
}else if(ptData.getType().equals(PTData.EMPTY_CHECK_02)){ }else if(ptData.getType().equals(PTData.EMPTY_CHECK_02)){
log.info("空货位检测结束"); log.info("空货位检测结束");
PTEmptyCheckContent checkContent = PTEmptyCheckContent.EmptyCheck(ptData.getContent()); PTEmptyCheckContent checkContent = PTEmptyCheckContent.EmptyCheck(ptData.getContent());
@ -59,7 +62,14 @@ public class PTDecoder extends LineBasedFrameDecoder {
ClientChanel.write(endEmptyCheckStr,checkContent.getSRMNUmber()); ClientChanel.write(endEmptyCheckStr,checkContent.getSRMNUmber());
//等待3s把空货位盘点的结果发给普天 //等待3s把空货位盘点的结果发给普天
//todo //todo
emptyCheckService.getEmptyStatus(checkContent.getSRMNUmber(),checkContent.getTaskNo(),1,1,checkContent.getRow(),checkContent.getStartColumn(),checkContent.getEndColumn()); emptyCheckService.getEmptyStatus(checkContent.getSRMNUmber(),checkContent.getTaskNo(),1,1,checkContent.getRow(),checkContent.getStartColumn(),checkContent.getEndColumn());
//打印空货位的所有条码
Set<String> codes = EmptyCheckCodeInfo.getAllCode(checkContent.getSRMNUmber(),checkContent.getRow(),checkContent.getStartColumn(),checkContent.getEndColumn());
log.info("【空货位扫描到的所有条码】,SRMNumber:{},row:{},startColumn:{},endColumn:{},taskId:{},\ncodes:{}",checkContent.getSRMNUmber(),checkContent.getRow(),checkContent.getStartColumn(),checkContent.getEndColumn(),checkContent.getTaskNo(),codes);
//清空所有的条码
EmptyCheckCodeInfo.stop(checkContent.getSRMNUmber(),checkContent.getRow(),checkContent.getStartColumn(),checkContent.getEndColumn());
}else if(ptData.getType().equals(PTData.STOCK_CHECK_01)){ }else if(ptData.getType().equals(PTData.STOCK_CHECK_01)){
log.info("盘点具体货位"); log.info("盘点具体货位");
@ -67,8 +77,13 @@ public class PTDecoder extends LineBasedFrameDecoder {
}else if(ptData.getType().equals(PTData.STOCK_CHECK_02)){ }else if(ptData.getType().equals(PTData.STOCK_CHECK_02)){
log.info("盘点具体货位 ,货物已取到载货台"); log.info("盘点具体货位 ,货物已取到载货台");
}else { }else if(ptData.getType().equals(PTData.Into_Stock_01)){
log.info("未知的盘点指令:{}",ptData.getType()); log.info("入库顶部拍照");
}else if(ptData.getType().equals(PTData.Into_Stock_02)){
log.info("入库完成拍照");
} }
} }
return null; return null;

Loading…
Cancel
Save