空货位盘点增加新表

nanjing-yancao-wuliuzhongxin
yiming 3 years ago
parent 41710dcc44
commit 09bd20bfe1

@ -37,7 +37,7 @@ public class ClientTestController {
@GetMapping("/emptyCheck/start")
public Result<String> startEmptyCheck(@ApiParam("巷道标识")@RequestParam String SRMNumber,@ApiParam("盘点批次ID") @RequestParam String taskId, @ApiParam("检测第几行")@RequestParam Integer row,
@ApiParam("开始列")@RequestParam Integer startColumn,@ApiParam("结束列")@RequestParam Integer endColumn){
emptyCheckService.emptyCheckStart(SRMNumber,taskId,row);
emptyCheckService.emptyCheckStart(SRMNumber,taskId,row,startColumn,endColumn);
String msg = ECTransmission.toEmptyCheckStartString(SRMNumber);
ClientChanel.write(msg,SRMNumber);
return Result.success(msg);
@ -57,33 +57,33 @@ public class ClientTestController {
String shevel = null;
if(street.getLeftType() == 0){
//单伸
String SingleLeft = emptyCheckService.getEmptyStatus(SRMNumber,taskId,1,1,row);
String SingleLeft = emptyCheckService.getEmptyStatus(SRMNumber,taskId,1,1,row,startColumn,endColumn);
shevel = "L01";
ptEmptyCheckContent = PTEmptyCheckContent.emptyCheckResponse(SRMNumber,taskId,row,startColumn,endColumn,shevel,SingleLeft);
ptData = PTData.EmptyStatusResponse(ptEmptyCheckContent);
PuTianNettyClient.write(ptData);
String SingleRight = emptyCheckService.getEmptyStatus(SRMNumber,taskId,1,2,row);
String SingleRight = emptyCheckService.getEmptyStatus(SRMNumber,taskId,1,2,row,startColumn,endColumn);
shevel = "R01";
ptEmptyCheckContent = PTEmptyCheckContent.emptyCheckResponse(SRMNumber,taskId,row,startColumn,endColumn,shevel,SingleRight);
ptData = PTData.EmptyStatusResponse(ptEmptyCheckContent);
PuTianNettyClient.write(ptData);
}else {
String SingleInLeft = emptyCheckService.getEmptyStatus(SRMNumber,taskId,1,1,row);
String SingleInLeft = emptyCheckService.getEmptyStatus(SRMNumber,taskId,1,1,row,startColumn,endColumn);
shevel = "L01";
ptEmptyCheckContent = PTEmptyCheckContent.emptyCheckResponse(SRMNumber,taskId,row,startColumn,endColumn,shevel,SingleInLeft);
ptData = PTData.EmptyStatusResponse(ptEmptyCheckContent);
PuTianNettyClient.write(ptData);
String SingleInRight = emptyCheckService.getEmptyStatus(SRMNumber,taskId,1,2,row);
String SingleInRight = emptyCheckService.getEmptyStatus(SRMNumber,taskId,1,2,row,startColumn,endColumn);
shevel = "R01";
ptEmptyCheckContent = PTEmptyCheckContent.emptyCheckResponse(SRMNumber,taskId,row,startColumn,endColumn,shevel,SingleInRight);
ptData = PTData.EmptyStatusResponse(ptEmptyCheckContent);
PuTianNettyClient.write(ptData);
String SingleOutLeft = emptyCheckService.getEmptyStatus(SRMNumber,taskId,2,1,row);
String SingleOutLeft = emptyCheckService.getEmptyStatus(SRMNumber,taskId,2,1,row,startColumn,endColumn);
shevel = "L02";
ptEmptyCheckContent = PTEmptyCheckContent.emptyCheckResponse(SRMNumber,taskId,row,startColumn,endColumn,shevel,SingleOutLeft);
ptData = PTData.EmptyStatusResponse(ptEmptyCheckContent);
PuTianNettyClient.write(ptData);
String SingleOutRight = emptyCheckService.getEmptyStatus(SRMNumber,taskId,2,2,row);
String SingleOutRight = emptyCheckService.getEmptyStatus(SRMNumber,taskId,2,2,row,startColumn,endColumn);
shevel = "R02";
ptEmptyCheckContent = PTEmptyCheckContent.emptyCheckResponse(SRMNumber,taskId,row,startColumn,endColumn,shevel,SingleOutRight);
ptData = PTData.EmptyStatusResponse(ptEmptyCheckContent);
@ -99,6 +99,7 @@ public class ClientTestController {
@ApiParam("是否是虚拟检测 Y:是 N:不是") @RequestParam String V){
TMTransmission tmTransmission = new TMTransmission(SRMNumber,taskId,goodsLocation,code,count,V);
plcService.checkStart(tmTransmission);
String msg = tmTransmission.toString();
ClientChanel.write(msg,SRMNumber);
return Result.success();
@ -143,7 +144,6 @@ public class ClientTestController {
//若1分钟内仍为收到 则放弃
Long start = System.currentTimeMillis();
while (ClientCodeMap.getCode(SRMNumber) == null && (System.currentTimeMillis()-start)<60000){
try {
Thread.sleep(300l);
} catch (InterruptedException e) {
@ -157,4 +157,10 @@ public class ClientTestController {
}
@ApiOperation("获取正在盘点的数据,包括条码、图片等信息")
@GetMapping("/realtimeCheck")
public Result<RealtimeCheckMap.CheckInfo> realtimeCheck(@ApiParam("巷道标识") @RequestParam String SRMNumber){
return Result.success(RealtimeCheckMap.getRealtimeCheck(SRMNumber));
}
}

@ -0,0 +1,34 @@
package com.zhehekeji.web.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
import java.time.LocalDateTime;
@Data
public class EmptyCheck {
@TableId
private Integer id;
private String orderNum;
private Integer streetId;
private Integer direction;
private Integer side;
@TableField("`row`")
private Integer row;
@TableField("`column`")
private Integer column;
private Integer emptyStatus;
private LocalDateTime createTime;
}

@ -1,9 +1,6 @@
package com.zhehekeji.web.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
@ -31,12 +28,14 @@ public class Stock {
private String lotnum;
@ApiModelProperty("扫描出的条码")
@TableField(strategy= FieldStrategy.IGNORED)
private String code;
@ApiModelProperty("品规名称")
@TableField(strategy= FieldStrategy.IGNORED)
private String category;
@TableField(value = "`count`")
@TableField(value = "`count`", strategy= FieldStrategy.IGNORED)
@ApiModelProperty("数量")
private Integer count;

@ -0,0 +1,7 @@
package com.zhehekeji.web.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.zhehekeji.web.entity.EmptyCheck;
public interface EmptyCheckMapper extends BaseMapper<EmptyCheck> {
}

@ -1,14 +1,13 @@
package com.zhehekeji.web.service;
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.web.entity.CheckStreetSummary;
import com.zhehekeji.web.entity.CheckSummary;
import com.zhehekeji.web.entity.Stock;
import com.zhehekeji.web.entity.Street;
import com.zhehekeji.web.entity.*;
import com.zhehekeji.web.mapper.CheckStreetSummaryMapper;
import com.zhehekeji.web.mapper.CheckSummaryMapper;
import com.zhehekeji.web.mapper.EmptyCheckMapper;
import com.zhehekeji.web.mapper.StockMapper;
import com.zhehekeji.web.pojo.empty.EmptyCheckSearch;
import com.zhehekeji.web.service.client.ECTransmission;
@ -35,6 +34,8 @@ public class EmptyCheckService {
private CheckSummaryMapper checkSummaryMapper;
@Resource
private CheckStreetSummaryMapper checkStreetSummaryMapper;
@Resource
private EmptyCheckMapper emptyCheckMapper;
public PageInfo<CheckSummary> checkSummaryPageInfo(EmptyCheckSearch emptyCheckSearch){
PageHelper.startPage(emptyCheckSearch.getPageNum(),emptyCheckSearch.getPageSize());
@ -110,19 +111,19 @@ public class EmptyCheckService {
*
* @param
*/
public void emptyCheckStart(String SRMNUmber,String taskId,Integer row){
log.info("空托盘检测 按行开始SRMNUmber:{},taskNo:{},row:{}",SRMNUmber,taskId,row);
public void emptyCheckStart(String SRMNUmber,String taskId,Integer row,Integer startColumn,Integer endColumn){
log.info("空托盘检测 按行开始SRMNUmber:{},taskNo:{},row:{},startColumn:{},endColumn:{}",SRMNUmber,taskId,row,startColumn,endColumn);
Street street = streetService.getStreetByPlcId(SRMNUmber);
if(street == null){
log.error(" no SRMNumer:{}",SRMNUmber);
return;
}
Map<String,Object> map = new HashMap<>();
map.put("street_id",street.getId());
// map.put("direction",leftRight);
// map.put("side",side);
map.put("row",row);
stockMapper.deleteByMap(map);
//将这些位置的旧数据清空
UpdateWrapper<EmptyCheck> wrapper = new UpdateWrapper<>();
wrapper.eq("street_id",street.getId()).eq("`row`",row).ge("`column`",startColumn).le("`column`",endColumn);
emptyCheckMapper.delete(wrapper);
//新增空的盘点统计
List<CheckStreetSummary> checkStreetSummaries = checkStreetSummaryMapper.selectList(new QueryWrapper<CheckStreetSummary>().eq("street_id",street.getId()).eq("task_id",taskId));
if(checkStreetSummaries.size() == 0){
@ -136,26 +137,28 @@ public class EmptyCheckService {
}
public String getEmptyStatus(String SRMNUmber,String taskId,Integer side,Integer leftRight,Integer row){
public String getEmptyStatus(String SRMNUmber,String taskId,Integer side,Integer leftRight,Integer row,Integer startColumn,Integer endColumn){
Street street = streetService.getStreetByPlcId(SRMNUmber);
if(street == null){
log.error(" no SRMNumer:{}",SRMNUmber);
return null;
}
List<Stock> stockList = stockMapper.selectList(new QueryWrapper<Stock>().eq("`row`",row).eq("street_id",street.getId()).eq("direction",leftRight).eq("side",side));
Map<Integer,Stock> stockMap = new HashMap<>(stockList.size()*2);
stockList.forEach(stock -> {
List<EmptyCheck> emptyChecks = emptyCheckMapper.selectList(new QueryWrapper<EmptyCheck>().eq("`row`",row).eq("street_id",street.getId()).eq("direction",leftRight).eq("side",side).ge("`column`",startColumn).le("`column`",endColumn));
//List<Stock> stockList = stockMapper.selectList(new QueryWrapper<Stock>().eq("`row`",row).eq("street_id",street.getId()).eq("direction",leftRight).eq("side",side));
Map<Integer,EmptyCheck> stockMap = new HashMap<>(emptyChecks.size()*2);
emptyChecks.forEach(stock -> {
stockMap.put(stock.getColumn(),stock);
});
int columns = side == 1?street.getLeftColumn():street.getRightColumn();
//int columns = side == 1?street.getLeftColumn():street.getRightColumn();
StringBuffer sb = new StringBuffer();
for(int i = 1;i<=columns;i++){
for(int i = startColumn;i<=endColumn;i++){
if(stockMap.get(i) != null && stockMap.get(i).getEmptyStatus() == 1){
sb.append(1);
}else {
sb.append(0);
}
}
log.info("【空货位盘点结果】SRMNumber:{},row:{},startColumn:{},endColumn:{},emptyStatus:{}",SRMNUmber,row,startColumn,endColumn,sb);
return sb.toString();
}
@ -166,18 +169,18 @@ public class EmptyCheckService {
log.error(" no SRMNumer:{}",ecTransmission.getSRMNumber());
return;
}
Stock stock = new Stock();
stock.setStreetId(street.getId());
stock.setSide(ecTransmission.getSide());
stock.setDirection(ecTransmission.getDirection());
EmptyCheck emptyCheck = new EmptyCheck();
emptyCheck.setStreetId(street.getId());
emptyCheck.setSide(ecTransmission.getSide());
emptyCheck.setDirection(ecTransmission.getDirection());
if(ecTransmission.getIsEmpty().equals("N")){
stock.setEmptyStatus(3);
emptyCheck.setEmptyStatus(3);
}else {
stock.setEmptyStatus(1);
emptyCheck.setEmptyStatus(1);
}
stock.setRow(ecTransmission.getRow());
stock.setColumn(ecTransmission.getColumn());
stockMapper.insert(stock);
emptyCheck.setRow(ecTransmission.getRow());
emptyCheck.setColumn(ecTransmission.getColumn());
emptyCheckMapper.insert(emptyCheck);
}

@ -9,6 +9,7 @@ import com.zhehekeji.web.mapper.*;
import com.zhehekeji.web.pojo.OrderVO;
import com.zhehekeji.web.service.RFID.RFIDMap;
import com.zhehekeji.web.service.RFID.RFIDSocket;
import com.zhehekeji.web.service.client.TMTransmission;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
@ -439,7 +440,62 @@ public class PlcService {
return true;
}
/**
*
* @param tmTransmission
* @return
*/
public Stock checkStart(TMTransmission tmTransmission){
log.info("【开始盘点货位】save stock info ,taskId:{},SRMNumber:{}goodsLocation:{}",tmTransmission.getTaskNo(),tmTransmission.getSRMNumber(),tmTransmission.getGoodsLocation());
Street street = streetService.getStreetByPlcId(tmTransmission.getSRMNumber());
Integer row = Integer.valueOf(tmTransmission.getGoodsLocation().substring(3,7));
Integer column = Integer.valueOf(tmTransmission.getGoodsLocation().substring(7));
Integer leftRight = tmTransmission.getGoodsLocation().substring(0,1).equals("L")?1:2;
Integer inout = Integer.valueOf(tmTransmission.getGoodsLocation().substring(1,3));
Stock old = stockMapper.getByStreetAndDirectionAndSideAndRowColumn(street.getId(),leftRight,inout,row,column);
if(old != null){
stockMapper.deleteById(old.getId());
}
Stock stock = new Stock();
stock.setCount(null);
stock.setCode(null);
stock.setCategory(null);
stock.setCheckNum(tmTransmission.getTaskNo());
stock.setRow(row);
stock.setColumn(column);
stock.setDirection(leftRight);
stock.setSide(inout);
stock.setWmsCode(tmTransmission.getCode());
stock.setWmsCount(tmTransmission.getCount());
stock.setStreetId(street.getId());
stockMapper.insert(stock);
return stock;
}
/**
*
* @param tmTransmission
* @return
*/
public Stock checkEnd(TMTransmission tmTransmission){
log.info("【盘点货位结果返回】update stock info ,taskId:{},SRMNumber:{},goodsLocation:{}",tmTransmission.getTaskNo(),tmTransmission.getSRMNumber(),tmTransmission.getGoodsLocation());
Street street = streetService.getStreetByPlcId(tmTransmission.getSRMNumber());
Integer row = Integer.valueOf(tmTransmission.getGoodsLocation().substring(3,7));
Integer column = Integer.valueOf(tmTransmission.getGoodsLocation().substring(7));
Integer leftRight = tmTransmission.getGoodsLocation().substring(0,1).equals("L")?1:2;
Integer inout = Integer.valueOf(tmTransmission.getGoodsLocation().substring(1,3));
Stock stock = stockMapper.getByStreetAndDirectionAndSideAndRowColumn(street.getId(),leftRight,inout,row,column);
if(stock != null){
stock.setCount(tmTransmission.getCount());
stock.setCode(tmTransmission.getCode());
stockMapper.updateById(stock);
log.info("update check info,taskId:{},SRMNumber:{},count:{},code:{}",stock.getCheckNum(),tmTransmission.getSRMNumber(),tmTransmission.getCount(),tmTransmission.getCode());
}else {
log.info("check end,but no stock info ,taskId:{},SRMNumber:{},goodsLocation:{}",tmTransmission.getTaskNo(),tmTransmission.getSRMNumber(),tmTransmission.getGoodsLocation());
}
return stock;
}
public void checkLog(Stock stock){

@ -47,7 +47,15 @@ public class Decoder extends DelimiterBasedFrameDecoder {
} else if(body.startsWith(TMTransmission.getHeader())){
//盘点指令
TMTransmission tmTransmission = new TMTransmission(body);
if(tmTransmission.isCollectOver()){
//todo 给普天发送指令
}else {
//收到盘点结果
//添加到实时信息里
RealtimeCheckMap.put(tmTransmission.getSRMNumber(),tmTransmission.checkInfo());
//todo 保存到stock表
plcService.checkStart(tmTransmission);
}
in.release();
}else if(body.startsWith(CETransmission.getHEADER())){
//客户端建立连接

@ -0,0 +1,57 @@
package com.zhehekeji.web.service.client;
import lombok.Data;
import java.util.HashMap;
import java.util.Map;
@Data
public class RealtimeCheckMap {
private static Map<String,CheckInfo> map = new HashMap<>();
public static void put(String SRMNumber,CheckInfo checkInfo){
map.put(SRMNumber,checkInfo);
}
public static CheckInfo getRealtimeCheck(String SRMNumber){
return map.get(SRMNumber);
}
@Data
public static class CheckInfo{
private Integer row;
private Integer column;
private Integer side;
private Integer direction;
private String WMSCode;
private String WMSCategory;
private Integer WMSCount;
private String checkCode;
private String checkCategory;
private Integer checkCount;
private String topPic1;
private String topPic2;
private String sidePic1;
private String sidePic2;
private String sidePic3;
private String sidePic4;
}
}

@ -52,6 +52,8 @@ public class TMTransmission {
private static String Split = ",";
private boolean collectOver;
public String toString(){
StringBuffer sb = new StringBuffer(header);
sb.append(Split).append(SRMNumber).append(Split).append(taskNo).append(Split)
@ -83,11 +85,18 @@ public class TMTransmission {
direction = goodsLocation.substring(0).equals("L") ? 1:2;
side = Integer.valueOf(goodsLocation.substring(2,3));
//checkType = strings[7];
collectOver = false;
if("Y".equals(isDisConnect)){
//需要拆分之前的
}
}
}else {
//是盘点数据采集完成的信号
collectOver = true;
SRMNumber = strings[1];
taskNo = strings[2];
goodsLocation = strings[3];
}
}
@ -104,4 +113,24 @@ public class TMTransmission {
this.SRMNumber = SRMNumber;
this.taskNo = taskId;
}
public RealtimeCheckMap.CheckInfo checkInfo(){
RealtimeCheckMap.CheckInfo checkInfo = new RealtimeCheckMap.CheckInfo();
checkInfo.setCheckCategory(code);
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));
checkInfo.setDirection(leftRight);
checkInfo.setColumn(column);
checkInfo.setRow(row);
checkInfo.setSide(inout);
//checkInfo.setWMSCategory();
//checkInfo.setWMSCount();
//checkInfo.setWMSCode();
checkInfo.setCheckCode(code);
checkInfo.setCheckCount(count);
//checkInfo.setCheckCategory();
return checkInfo;
}
}

@ -90,7 +90,7 @@ public class PTData {
}
public static PTData EmptyStatusResponse(PTEmptyCheckContent ptEmptyCheckContent){
return new PTData(ptEmptyCheckContent.toString(),FLOW_NO_NEED_RES,EMPTY_CHECK_03);
return new PTData(ptEmptyCheckContent.toResponseString(),FLOW_NO_NEED_RES,EMPTY_CHECK_03);
}
public String toString(){

@ -47,7 +47,7 @@ public class PTDecoder extends LineBasedFrameDecoder {
log.info("空货位检测开始");
PTEmptyCheckContent checkContent = PTEmptyCheckContent.EmptyCheck(ptData.getContent());
emptyCheckService.emptyCheckStart(checkContent.getSRMNUmber(), checkContent.getTaskNo(), checkContent.getRow());
emptyCheckService.emptyCheckStart(checkContent.getSRMNUmber(), checkContent.getTaskNo(), checkContent.getRow(),checkContent.getStartColumn(),checkContent.getEndColumn());
String startEmptyCheckStr = ECTransmission.toEmptyCheckStartString(checkContent.getSRMNUmber());
//通知客户端开始检测
ClientChanel.write(startEmptyCheckStr,checkContent.getSRMNUmber());
@ -59,7 +59,7 @@ public class PTDecoder extends LineBasedFrameDecoder {
ClientChanel.write(endEmptyCheckStr,checkContent.getSRMNUmber());
//等待3s把空货位盘点的结果发给普天
//todo
emptyCheckService.getEmptyStatus(checkContent.getSRMNUmber(),checkContent.getTaskNo(),1,1,checkContent.getRow());
emptyCheckService.getEmptyStatus(checkContent.getSRMNUmber(),checkContent.getTaskNo(),1,1,checkContent.getRow(),checkContent.getStartColumn(),checkContent.getEndColumn());
}else if(ptData.getType().equals(PTData.STOCK_CHECK_01)){
log.info("盘点具体货位");

@ -57,6 +57,13 @@ public class PTEmptyCheckContent {
return ptContent;
}
public String toResponseString(){
StringBuffer sb = new StringBuffer();
sb.append(SRMNUmber).append(",").append(taskNo).append(",").append(row).append(",")
.append(startColumn).append(",").append(endColumn).append(",").append(emptyStatus);
return sb.toString();
}
public static PTEmptyCheckContent emptyCheckResponse(String SRMNUmber,String taskId,int row,int startColumn,int endColumn,String shelve,String emptyStatus){
PTEmptyCheckContent ptContent = new PTEmptyCheckContent();
ptContent.setSRMNUmber(SRMNUmber);

Loading…
Cancel
Save