Commit bd25c3f1 zshaohui

1.工单出库 休眠10毫秒

2.入库的时候 直接保存到数据库
1 个父辈 2ef9a125
......@@ -1028,6 +1028,12 @@ public class LiteOrderCache {
//9.开始挑料
while (outReelCount < orderItem.getNeedReelCount() || outNumCount < orderItem.getNeedNum()) {
try {
log.info("让当前线程休眠10毫秒");
Thread.sleep(10l);
} catch (InterruptedException e) {
e.printStackTrace();
}
//根据查询条件,查找新的库位
boolean hasOutReel = false;
String warehouseCode = orderItem.getWarehouseCode(); //厂别
......
......@@ -26,6 +26,7 @@ import com.neotel.smfcore.core.order.service.po.LiteOrderItem;
import com.neotel.smfcore.core.storage.service.manager.IStoragePosManager;
import com.neotel.smfcore.core.storage.service.po.Storage;
import com.neotel.smfcore.core.storage.service.po.StoragePos;
import com.neotel.smfcore.core.system.service.manager.IDataLogManager;
import com.neotel.smfcore.core.system.service.po.DataLog;
import com.neotel.smfcore.core.system.util.DevicesStatusUtil;
import com.neotel.smfcore.core.system.util.TaskService;
......@@ -61,6 +62,7 @@ import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.stream.Collectors;
......@@ -106,6 +108,9 @@ public class CDeviceController {
@Autowired
private IMessageManager messageManager;
@Autowired
private IDataLogManager dataLogManager;
@ApiOperation("获取料盘尺寸信息")
@RequestMapping("/partNumberComponent")
......@@ -152,17 +157,18 @@ public class CDeviceController {
return ResultBean.newOkResult(resultMap);
}
Map<String,Object> lockMap = new ConcurrentHashMap<>();
@ApiOperation("物料放入料格")
@RequestMapping("/putInMaterialBin")
@AnonymousAccess
public synchronized ResultBean putInMaterialBin(@RequestBody Map<String, String> paramMap) {
public ResultBean putInMaterialBin(@RequestBody Map<String, String> paramMap) {
String binCodeStr = paramMap.get("binCode"); //料格
String codeStr = paramMap.get("codeStr"); //物料条码
String materialStr = paramMap.get("materialStr"); //料串信息
String currentLoc = paramMap.get("currentLoc"); //当前位置
log.info("物料放入料格,料格为:"+binCodeStr+",物料条码为:"+codeStr+",料串信息为:"+materialStr);
log.info("物料放入料格,料格为:" + binCodeStr + ",物料条码为:" + codeStr + ",料串信息为:" + materialStr);
//判断入参是否为空
if (StringUtils.isEmpty(binCodeStr)) {
......@@ -179,154 +185,166 @@ public class CDeviceController {
return ResultBean.newErrorResult(-1, "smfcore.valueCanotNull", "{0}不能为空", new String[]{"料串信息"});
}
//判断条码是否正常
Barcode barcode = null;
try{
barcode = codeResolve.resolveOneValideBarcode(codeStr);
}catch (ValidateException ve){
return ResultBean.newErrorResult(-1, ve.getMsgKey(), ve.getDefaultMsg());
//对每一个料箱进行加锁
String lockBoxStr = BoxHandleUtil.getBoxStr(binCodeStr, true);
Object lockBoxObj = lockMap.get(lockBoxStr);
if (lockBoxObj == null) {
lockMap.put(lockBoxStr, new Object());
}
Object lockObj = lockMap.get(lockBoxStr);
synchronized (lockObj) {
//判断条码是否正常
Barcode barcode = null;
try {
barcode = codeResolve.resolveOneValideBarcode(codeStr);
} catch (ValidateException ve) {
return ResultBean.newErrorResult(-1, ve.getMsgKey(), ve.getDefaultMsg());
}
log.info("料串["+materialStr+"]上的物料["+barcode.getBarcode()+"] 准备放入料格["+binCodeStr+"]");
//判断是否存在料箱中
if (StringUtils.isNotEmpty(barcode.getPosName())) {
log.info(barcode.getBarcode() + "已经存在料格" + barcode.getPosName());
ResultBean resultBean = ResultBean.newErrorResult(101, "", barcode.getBarcode() + "已经存在料格" + barcode.getPosName());
resultBean.setData(barcode.getPosName());
return resultBean;
}
//判断是否绑定其他料串
if (!MaterialUtil.bindInfo(materialStr)) {
return ResultBean.newErrorResult(-1, "", materialStr + "没有任何绑定信息");
}
//调用禁用料信息
//barcode = smfApi.canPutInAfterResolve(barcode);
log.info("料串[" + materialStr + "]上的物料[" + barcode.getBarcode() + "] 准备放入料格[" + binCodeStr + "]");
//判断是否存在料箱中
if (StringUtils.isNotEmpty(barcode.getPosName())) {
log.info(barcode.getBarcode() + "已经存在料格" + barcode.getPosName());
ResultBean resultBean = ResultBean.newErrorResult(101, "", barcode.getBarcode() + "已经存在料格" + barcode.getPosName());
resultBean.setData(barcode.getPosName());
return resultBean;
}
//获取库别
String warhouseCode = MaterialUtil.getWarhouseCode(materialStr);
barcode.setWarehouseCode(warhouseCode);
//判断是否绑定其他料串
if (!MaterialUtil.bindInfo(materialStr)) {
return ResultBean.newErrorResult(-1, "", materialStr + "没有任何绑定信息");
}
String soucre = "";
if (MaterialUtil.bindGr(materialStr)) {
soucre = MaterialUtil.getBindGrInfo(materialStr).getGrCode();
}
//调用禁用料信息
//barcode = smfApi.canPutInAfterResolve(barcode);
//获取库别
String warhouseCode = MaterialUtil.getWarhouseCode(materialStr);
barcode.setWarehouseCode(warhouseCode);
//判断料格是否正常
Barcode boxBarcode = null;
StoragePos inPos = null;
try{
String boxStr = BoxHandleUtil.getBoxStr(binCodeStr,true);
boxBarcode = codeResolve.resolveOneValideBarcode(boxStr);
inPos = storagePosManager.getByBarcode(boxBarcode.getBarcode());
if(inPos != null){
boxBarcode = inPos.getBarcode();
//log.error("流程异常:料箱["+boxStr+"]在库位["+inPos.getPosName()+"],但物料["+barcode.getBarcode()+"]放入了料格中");
String soucre = "";
if (MaterialUtil.bindGr(materialStr)) {
soucre = MaterialUtil.getBindGrInfo(materialStr).getGrCode();
}
}catch (ValidateException ve){
return ResultBean.newErrorResult(-1, ve.getMsgKey(), "料格条码不正确:" + binCodeStr);
}
if(boxBarcode != null){
//判断隔口是否可以放入
if (BinCacheUtil.canPutInBinCode(binCodeStr, warhouseCode)) {
//绑定gr
if (MaterialUtil.bindGr(materialStr)) {
log.info(materialStr+"绑定Gr入库,barcode为:"+barcode.getBarcode());
BindGrInfo bindGrInfo = MaterialUtil.getBindGrInfo(materialStr);
NewLabelToCellResult cell = LuxsanApi.newLabelToCell(new NewLabelToCellRequest(
CommonUtil.plantCode,
Arrays.asList(bindGrInfo.getUdCode()),
barcode.getAmount(),
binCodeStr, Arrays.asList(barcode.getFullCode())
));
//将GR日期设置为生产日期
Date grDate = DateUtil.getNoTimeDate(bindGrInfo.getGrDate());
barcode.setProduceDate(grDate);
barcode.setLabelId(cell.getLABEL_ID());
//判断料格是否正常
Barcode boxBarcode = null;
StoragePos inPos = null;
try {
String boxStr = BoxHandleUtil.getBoxStr(binCodeStr, true);
boxBarcode = codeResolve.resolveOneValideBarcode(boxStr);
inPos = storagePosManager.getByBarcode(boxBarcode.getBarcode());
if (inPos != null) {
boxBarcode = inPos.getBarcode();
//log.error("流程异常:料箱["+boxStr+"]在库位["+inPos.getPosName()+"],但物料["+barcode.getBarcode()+"]放入了料格中");
}
} catch (ValidateException ve) {
return ResultBean.newErrorResult(-1, ve.getMsgKey(), "料格条码不正确:" + binCodeStr);
}
//储位移转
else if (MaterialUtil.storTransfer(materialStr)){
log.info(materialStr+"绑定储位移转,barcode为:"+barcode.getBarcode());
BinMoveResult binMoveResult = LuxsanApi.binMove(new BinMoveRequest(CommonUtil.plantCode, binCodeStr, Arrays.asList(barcode.getBarcode()), barcode.getAmount(),barcode.getLabelId()));
if (StringUtils.isNotEmpty(binMoveResult.getGR_DATE())){
Date grDate = DateUtil.getNoTimeDate(binMoveResult.getGR_DATE());
if (boxBarcode != null) {
//判断隔口是否可以放入
if (BinCacheUtil.canPutInBinCode(binCodeStr, warhouseCode)) {
//绑定gr
if (MaterialUtil.bindGr(materialStr)) {
log.info(materialStr + "绑定Gr入库,barcode为:" + barcode.getBarcode());
BindGrInfo bindGrInfo = MaterialUtil.getBindGrInfo(materialStr);
NewLabelToCellResult cell = LuxsanApi.newLabelToCell(new NewLabelToCellRequest(
CommonUtil.plantCode,
Arrays.asList(bindGrInfo.getUdCode()),
barcode.getAmount(),
binCodeStr, Arrays.asList(barcode.getFullCode())
));
//将GR日期设置为生产日期
Date grDate = DateUtil.getNoTimeDate(bindGrInfo.getGrDate());
barcode.setProduceDate(grDate);
barcode.setLabelId(cell.getLABEL_ID());
}
barcode.setLabelId(binMoveResult.getLABEL_ID());
}
//311单据转库
else if (MaterialUtil.ticketTransfer(materialStr)) {
log.info(materialStr+"绑定单据转库,barcode为:"+barcode.getBarcode());
TicketTransfer transfer = MaterialUtil.getTicketTransferInfo(materialStr);
TicketPickRequest request = new TicketPickRequest();
request.setPLANT_CODE(CommonUtil.plantCode);
request.setTICKET_CODE(transfer.getTicket());
request.setTICKET_ITEM(transfer.getTicketItem());
request.setQTY(barcode.getAmount());
request.setBIN_CODE(binCodeStr);
List<TicketPickLabelList> labelList = new ArrayList<>();
TicketPickLabelList tickPick = new TicketPickLabelList();
tickPick.setREEL_LIST(Arrays.asList(barcode.getBarcode()));
tickPick.setLABEL_ID(barcode.getLabelId());
labelList.add(tickPick);
request.setLABEL_LIST(labelList);
LuxsanApi.ticketPick(request);
//LuxsanApi.ticketPost(new TicketPostRequest(CommonUtil.plantCode,transfer.getTicket()));
}
//储位移转
else if (MaterialUtil.storTransfer(materialStr)) {
log.info(materialStr + "绑定储位移转,barcode为:" + barcode.getBarcode());
BinMoveResult binMoveResult = LuxsanApi.binMove(new BinMoveRequest(CommonUtil.plantCode, binCodeStr, Arrays.asList(barcode.getBarcode()), barcode.getAmount(), barcode.getLabelId()));
if (StringUtils.isNotEmpty(binMoveResult.getGR_DATE())) {
Date grDate = DateUtil.getNoTimeDate(binMoveResult.getGR_DATE());
barcode.setProduceDate(grDate);
}
barcode.setLabelId(binMoveResult.getLABEL_ID());
}
//单据退库上架
else if (MaterialUtil.ticketReturn(materialStr)){
log.info(materialStr+"绑定单据退库上架,barcode为:"+barcode.getBarcode());
TicketReturn ticketReturn = MaterialUtil.getTicketReturnInfo(materialStr);
TicketUpResult ticketUp = LuxsanApi.ticketUp(new TicketUpRequest(CommonUtil.plantCode, ticketReturn.getTicket(), ticketReturn.getTicketItem(), binCodeStr, Arrays.asList(barcode.getFullCode()),barcode.getAmount()));
barcode.setLabelId(ticketUp.getLABEL_ID());
}
//311单据转库
else if (MaterialUtil.ticketTransfer(materialStr)) {
log.info(materialStr + "绑定单据转库,barcode为:" + barcode.getBarcode());
TicketTransfer transfer = MaterialUtil.getTicketTransferInfo(materialStr);
TicketPickRequest request = new TicketPickRequest();
request.setPLANT_CODE(CommonUtil.plantCode);
request.setTICKET_CODE(transfer.getTicket());
request.setTICKET_ITEM(transfer.getTicketItem());
request.setQTY(barcode.getAmount());
request.setBIN_CODE(binCodeStr);
List<TicketPickLabelList> labelList = new ArrayList<>();
TicketPickLabelList tickPick = new TicketPickLabelList();
tickPick.setREEL_LIST(Arrays.asList(barcode.getBarcode()));
tickPick.setLABEL_ID(barcode.getLabelId());
labelList.add(tickPick);
request.setLABEL_LIST(labelList);
LuxsanApi.ticketPick(request);
//LuxsanApi.ticketPost(new TicketPostRequest(CommonUtil.plantCode,transfer.getTicket()));
}
//退库上架
else if (MaterialUtil.returnTower(materialStr)){
log.info(materialStr+"绑定退库上架,barcode为:"+barcode.getBarcode());
BackToWarehouseRequest request = new BackToWarehouseRequest();
request.setBIN_CODE(binCodeStr);
request.setPLANT_CODE(CommonUtil.plantCode);
request.setRETURN_TYPE("return");
request.setREEL_LIST(Arrays.asList(barcode.getBarcode()));
BackToWarehouseResult result = LuxsanApi.backToWarehouse(request);
barcode.setLabelId(result.getLABEL_ID());
}
//单据退库上架
else if (MaterialUtil.ticketReturn(materialStr)) {
log.info(materialStr + "绑定单据退库上架,barcode为:" + barcode.getBarcode());
TicketReturn ticketReturn = MaterialUtil.getTicketReturnInfo(materialStr);
TicketUpResult ticketUp = LuxsanApi.ticketUp(new TicketUpRequest(CommonUtil.plantCode, ticketReturn.getTicket(), ticketReturn.getTicketItem(), binCodeStr, Arrays.asList(barcode.getFullCode()), barcode.getAmount()));
barcode.setLabelId(ticketUp.getLABEL_ID());
}
barcode.setPosName(binCodeStr);
barcode.setWarehouseCode(warhouseCode);
barcode.setBarSource(soucre);
barcode.setSeq(BoxHandleUtil.getSeq(boxBarcode,binCodeStr)+1);
barcode.setPutInTime(System.currentTimeMillis());
barcode = barcodeManager.save(barcode);
generatePutInTask(barcode, boxBarcode,OP_STATUS.FINISHED.name(),currentLoc);
boxBarcode.updateSubCodes(barcode);
boxBarcode.setAmount(boxBarcode.getAmount()+barcode.getAmount());
barcodeManager.save(boxBarcode);
if(inPos != null){
//流程异常时,为保证数据一致性, pos中的box barcode也需要更新
inPos.setBarcode(boxBarcode);
storagePosManager.save(inPos);
}
//退库上架
else if (MaterialUtil.returnTower(materialStr)) {
log.info(materialStr + "绑定退库上架,barcode为:" + barcode.getBarcode());
BackToWarehouseRequest request = new BackToWarehouseRequest();
request.setBIN_CODE(binCodeStr);
request.setPLANT_CODE(CommonUtil.plantCode);
request.setRETURN_TYPE("return");
request.setREEL_LIST(Arrays.asList(barcode.getBarcode()));
BackToWarehouseResult result = LuxsanApi.backToWarehouse(request);
barcode.setLabelId(result.getLABEL_ID());
}
kafkaService.sendMachineParameterStackerAndBox(materialStr,currentLoc,barcode.getAmount(),boxBarcode.getBarcode(),0,1);
barcode.setPosName(binCodeStr);
barcode.setWarehouseCode(warhouseCode);
barcode.setBarSource(soucre);
barcode.setSeq(BoxHandleUtil.getSeq(boxBarcode, binCodeStr) + 1);
barcode.setPutInTime(System.currentTimeMillis());
log.info("料格:"+binCodeStr+"barcode:"+barcode.getBarcode()+"开始保存数据库");
barcode = barcodeManager.save(barcode);
log.info("料格:"+binCodeStr+"barcode:"+barcode.getBarcode()+"结束保存数据库");
log.info("料格:"+binCodeStr+"barcode:"+barcode.getBarcode()+"开始生成任务");
generatePutInTask(barcode, boxBarcode, OP_STATUS.FINISHED.name(), currentLoc);
boxBarcode.updateSubCodes(barcode);
boxBarcode.setAmount(boxBarcode.getAmount() + barcode.getAmount());
barcodeManager.save(boxBarcode);
if (inPos != null) {
//流程异常时,为保证数据一致性, pos中的box barcode也需要更新
inPos.setBarcode(boxBarcode);
storagePosManager.save(inPos);
}
log.info("料格:"+binCodeStr+"barcode:"+barcode.getBarcode()+"结束生成任务");
return ResultBean.newOkResult("");
kafkaService.sendMachineParameterStackerAndBox(materialStr, currentLoc, barcode.getAmount(), boxBarcode.getBarcode(), 0, 1);
log.info("料格:"+binCodeStr+"barcode:"+barcode.getBarcode()+"返回成功");
return ResultBean.newOkResult("");
}
}
return ResultBean.newErrorResult(-1, "", barcode.getBarcode() + "不可以放到料格:" + binCodeStr);
}
return ResultBean.newErrorResult(-1, "", barcode.getBarcode() + "不可以放到料格:" + binCodeStr);
}
......@@ -1422,7 +1440,7 @@ public class CDeviceController {
if (StringUtils.isNotEmpty(currentLoc)){
dataLog.setCurrentLoc(currentLoc);
}
taskService.updateQueueTask(dataLog);
dataLogManager.save(dataLog);
}
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!