Commit c4d438d7 zshaohui

功能优化提交

1 个父辈 ce7a51e3
正在显示 22 个修改的文件 包含 310 行增加23 行删除
......@@ -76,5 +76,10 @@ public enum OP_STATUS {
* 出库完成
*/
OUTBOX,
/**
* 线体扫码位置
*/
ON_LINE,
;
}
......@@ -220,13 +220,12 @@ public class XLRBoxHandler extends BaseDeviceHandler {
checkoutSize++;
if (checkoutSize >= 2) {
//log.error("cid["+cid + "]的BOX["+ boxId+"]的出库任务已经超过2个,不再分配!");
return null;
//return null;
}
}
}
}
//指定紧急单盘出库的优先出库,否则按批量出库处理
DataLog singleOutTask = null;
for (DataLog task : dataLogList) {//优先分配单盘任务和没有工单的任务
......@@ -268,14 +267,39 @@ public class XLRBoxHandler extends BaseDeviceHandler {
return outTask;
}
//是治具的优先出
DataLog boxTask = null;
for (DataLog task : dataLogList) {
if (cid.equals(task.getCid()) && task.isCheckOutTask() && task.isWait()) {
String posName = task.getPosName();
if (!Strings.isNullOrEmpty(posName)) {//有库位号
Boolean isBox = task.getAppendData("isBox");
if (isBox != null && isBox) {
//单盘优先出库
if (boxTask == null || task.getCreateDate().before(boxTask.getCreateDate())) {
boxTask = task;
}
}
}
}
}
if (boxTask != null){
log.info("分配优先治具的出库任务" + boxTask.getBarcode() + "[" + boxTask.getPosName() + "]到 " + cid);
return boxTask;
}
//分配出料口不为空的
DataLog orderTask = null;
//先提取出料口不为空的
List<DataLog> notEmptyExportList = new ArrayList<>();
for (DataLog dataLog : dataLogList) {
if (dataLog.isCheckOutTask() && !dataLog.isCancel() && !dataLog.isFinished()) {
if (dataLog.isCheckOutTask() && !dataLog.isCancel() && !dataLog.isFinished() && !dataLog.isOnLine() && !dataLog.isInLine()) {
String export = dataLog.getExport();
if (StringUtils.isNotEmpty(export)) {
Boolean isBox = dataLog.getAppendData("isBox");
if (isBox == null){
isBox = false;
}
if (StringUtils.isNotEmpty(export) && !isBox) {
notEmptyExportList.add(dataLog);
}
}
......
......@@ -44,6 +44,7 @@ import com.neotel.smfcore.core.storage.service.po.Storage;
import com.neotel.smfcore.security.service.manager.IGroupManager;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
......@@ -885,7 +886,7 @@ public class DeviceController {
if(loopCount>=10 ){
log.info(barcode.getBarcode()+"已循环查找10次 直接跳出循环");
}
pos = taskService.findEmptyPosForMoveIn(storageList, barcode, "", "");
pos = taskService.findEmptyPosForMoveIn(storageList, barcode, "", "",needMovePosName);
if (pos == null){
break;
}
......@@ -916,6 +917,27 @@ public class DeviceController {
AddLock(pos,getLockPosSKey(needMovePos.getStorageId()),cidList);
AddLock(storagePos,getLockPosKey(needMovePos.getStorageId()),cidList);
//如果外侧有任务,则改成新库位一样的
DataLog dataLog = null;
for (DataLog queueTask : taskService.getQueueTasks()) {
if (barcode.getBarcode().equals(queueTask)){
dataLog = queueTask;
break;
}
}
if (dataLog != null){
log.info("posName:[{}],barcode为[{}]有任务,需要重新设置任务库位:[{}]",dataLog.getPosName(),barcode.getBarcode(),pos.getPosName());
dataLog.setPosName(pos.getPosName());
dataLog.setPosId(pos.getId());
if (dataLog.isExecuting() || dataLog.isWait()){
dataLog.setStatus(OP_STATUS.WAIT.name());
taskService.updateQueueTask(dataLog);
} else {
taskService.updateFinishedTask(dataLog);
}
}
}
}
}else {
......@@ -923,6 +945,26 @@ public class DeviceController {
log.info("查找到外侧库位作为目标库位,锁定库位 :" + pos.getPosName() + "=" + getLockPosKey(needMovePos.getStorageId()));
AddLock(pos,getLockPosKey(needMovePos.getStorageId()),cidList);
//如果外侧有任务,则改成新库位一样的
DataLog dataLog = null;
for (DataLog queueTask : taskService.getQueueTasks()) {
if (barcode.getBarcode().equals(queueTask)){
dataLog = queueTask;
break;
}
}
if (dataLog != null){
log.info("posName:[{}],barcode为[{}]有任务,需要重新设置任务库位:[{}]",dataLog.getPosName(),barcode.getBarcode(),pos.getPosName());
dataLog.setPosName(pos.getPosName());
dataLog.setPosId(pos.getId());
if (dataLog.isExecuting() || dataLog.isWait()){
dataLog.setStatus(OP_STATUS.WAIT.name());
taskService.updateQueueTask(dataLog);
} else {
taskService.updateFinishedTask(dataLog);
}
}
}
}
}
......
......@@ -1039,7 +1039,8 @@ public class LiteOrderCache {
// task = dataLogDao.save(task);
taskService.addTaskToExecute(task);
if (!barcode.isBox()) {
StorageExportUtil.updateExportData(putInExport, barcode.getBarcode(), feederInfo, orderNo, task.getStatus());
log.info(barcode.getBarcode()+"为非料盒信息,需要更改出料口信息");
StorageExportUtil.updateExportData(putInExport, barcode.getBarcode(), feederInfo, orderNo, task.getStatus(),task.getPartNumber());
}
}
}
......
......@@ -29,6 +29,7 @@ import com.neotel.smfcore.core.storage.rest.query.StoragePosQueryCriteria;
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.po.DataLog;
import com.neotel.smfcore.core.system.util.DevicesStatusUtil;
import com.neotel.smfcore.core.system.util.TaskService;
import com.neotel.smfcore.custom.siemens.SiemensApi;
......@@ -483,6 +484,22 @@ public class StoragePosController {
}
}
Barcode barcode = pos.getBarcode();
if (barcode == null){
continue;
}
List<DataLog> allTasks = taskService.getAllTasks();
for (DataLog dataLog : allTasks) {
if (dataLog.isCheckOutTask()){
if (barcode.getBarcode().equals(dataLog.getBarcode())){
if (!dataLog.isFinished() && !dataLog.isCancel()){
throw new ValidateException("smfcore.error.barcode.inQueue", "二维码[{0}]已在操作队列中,操作失败", new String[]{barcode.getBarcode()});
}
}
}
}
// //西门子接口验证
// boolean result=SiemensApi.getMaterialLot(2, storage.getId(),storage.getName(),pos.getBarcode().getBarcode());
// if(!result) {
......
......@@ -49,6 +49,8 @@ public interface IStoragePosManager extends IBaseManager<StoragePos> {
StoragePos getEmptyPosByStorage(Storage storage, Barcode barcode, Collection<String> excludePosIds, String lastPosId) throws ValidateException;
StoragePos getEmptyPosByStorage(Storage storage, Barcode barcode, Collection<String> excludePosIds, String lastPosId,String needMovePosName) throws ValidateException;
StoragePos getEmptyPosByStorage(Storage storage, int size, int height, Collection<String> excludePosIds) throws ValidateException;
List<StoragePos> findNotEmpty();
......
......@@ -9,6 +9,7 @@ import com.neotel.smfcore.common.bean.PageData;
import com.neotel.smfcore.common.exception.ValidateException;
import com.neotel.smfcore.common.utils.DateUtil;
import com.neotel.smfcore.common.utils.PointUtil;
import com.neotel.smfcore.common.utils.StringUtils;
import com.neotel.smfcore.core.barcode.bean.PlateSizeBean;
import com.neotel.smfcore.core.barcode.service.po.Barcode;
import com.neotel.smfcore.core.storage.bean.InventoryItem;
......@@ -464,6 +465,11 @@ public class StoragePosManagerImpl implements IStoragePosManager {
@Override
public StoragePos getEmptyPosByStorage(Storage storage, Barcode barcode, Collection<String> excludePosIds,String lastPosId) throws ValidateException {
return getEmptyPosByStorage(storage,barcode,excludePosIds,lastPosId,"");
}
@Override
public StoragePos getEmptyPosByStorage(Storage storage, Barcode barcode, Collection<String> excludePosIds,String lastPosId,String needMovePosName) throws ValidateException {
Criteria c = Criteria.where("storageId").is(storage.getId());
......@@ -485,6 +491,11 @@ public class StoragePosManagerImpl implements IStoragePosManager {
if (excludePosIds != null && !excludePosIds.isEmpty()) {
c = c.and("id").nin(excludePosIds);
}
if (StringUtils.isNotEmpty(needMovePosName)){
c.and("posName").nin(needMovePosName);
}
Query query = new Query(c);
String msg = "";
......
......@@ -297,6 +297,10 @@ public class DataLog extends BasePo implements Serializable ,Comparable<DataLog>
return OP_STATUS.FINISHED.name().equals(status);
}
public boolean isOnLine(){
return OP_STATUS.ON_LINE.name().equals(status);
}
public boolean isWait(){
return OP_STATUS.WAIT.name().equals(status);
}
......
......@@ -170,8 +170,12 @@ public class TaskService {
try {
if (task.isCheckOutTask()) {
String export = task.getExport();
if (StringUtils.isNotEmpty(export)) {
StorageExportUtil.updateExportData(export, task.getBarcode(), task.getAppendData("feederInfo"), task.getSourceName(), task.getStatus());
Boolean isBox = task.getAppendData("isBox");
if (isBox == null){
isBox = false;
}
if (StringUtils.isNotEmpty(export) && !isBox) {
StorageExportUtil.updateExportData(export, task.getBarcode(), task.getAppendData("feederInfo"), task.getSourceName(), task.getStatus(),task.getPartNumber());
}
}
} catch (Exception e){
......@@ -818,7 +822,7 @@ public class TaskService {
* @param barcode
* @return
*/
public StoragePos findEmptyPosForMoveIn(List<Storage> storageList, Barcode barcode, String inRFID, String lastPosId) throws ValidateException {
public StoragePos findEmptyPosForMoveIn(List<Storage> storageList, Barcode barcode, String inRFID, String lastPosId,String needMovePosName) throws ValidateException {
Collection<DataLog> queueTasks = getQueueTasks();
List<DataLog> allTasksa = getFinishedTasks();
if (!queueTasks.isEmpty()) {
......@@ -851,11 +855,11 @@ public class TaskService {
//如果有正在执行的任务,把库位发过去
Collection<DataLog> allTasks = taskMap.values();
for (DataLog task : allTasks) {
if (barcode.getBarcode().equals(task.getBarcode())) {
/*if (barcode.getBarcode().equals(task.getBarcode())) {
String posId = task.getPosId();
log.info(barcode.getBarcode() + " 已有任务,返回任务中的库位:" + task.getPosName());
return storagePosManager.get(posId);
}
}*/
String storageId = task.getStorageId();
if (!Strings.isNullOrEmpty(storageId)) {
......@@ -924,10 +928,14 @@ public class TaskService {
}
});
return findEmptyPosInStorages(barcode, availbleStorageList, hasOutTaskStorageIds, lastPosId);
return findEmptyPosInStorages(barcode, availbleStorageList, hasOutTaskStorageIds, lastPosId,needMovePosName);
}
private synchronized StoragePos findEmptyPosInStorages(Barcode barcode, List<Storage> availbleStorageList, final Set<String> hasOutTaskStorageIds, String lastPosId){
return findEmptyPosInStorages(barcode,availbleStorageList,hasOutTaskStorageIds,lastPosId,"");
}
private synchronized StoragePos findEmptyPosInStorages(Barcode barcode, List<Storage> availbleStorageList, final Set<String> hasOutTaskStorageIds, String lastPosId) {
private synchronized StoragePos findEmptyPosInStorages(Barcode barcode, List<Storage> availbleStorageList, final Set<String> hasOutTaskStorageIds, String lastPosId,String needMovePosName) {
//第一遍查找,先不查找有出库任务的料仓
for (Storage storage : availbleStorageList) {
......@@ -939,7 +947,7 @@ public class TaskService {
try {
Collection<String> operatingPosIds = excludePosIds();
log.debug("尝试从[" + storage.getCid() + "]中为[" + barcode.getBarcode() + "]查找空位");
StoragePos pos = storagePosManager.getEmptyPosByStorage(storage, barcode, operatingPosIds, lastPosId);
StoragePos pos = storagePosManager.getEmptyPosByStorage(storage, barcode, operatingPosIds, lastPosId,needMovePosName);
if (pos != null) {
return pos;
}
......@@ -952,7 +960,7 @@ public class TaskService {
try {
Collection<String> operatingPosIds = excludePosIds();
log.debug("尝试从[" + storage.getCid() + "]中为[" + barcode.getBarcode() + "]查找空位");
StoragePos pos = storagePosManager.getEmptyPosByStorage(storage, barcode, operatingPosIds, lastPosId);
StoragePos pos = storagePosManager.getEmptyPosByStorage(storage, barcode, operatingPosIds, lastPosId,needMovePosName);
if (pos != null) {
return pos;
}
......
......@@ -7,6 +7,8 @@ public class StorageExportOutDetail {
private String barcode;
private String partNumber;
private String feederInfo;
private String status;
......
......@@ -33,6 +33,7 @@ import com.neotel.smfcore.core.system.service.po.DataLog;
import com.neotel.smfcore.core.system.util.TaskService;
import com.neotel.smfcore.custom.Jkem21481.bean.MJPartNumber;
import com.neotel.smfcore.custom.Jkem21481.bean.StorageExport;
import com.neotel.smfcore.custom.Jkem21481.bean.StorageExportOutDetail;
import com.neotel.smfcore.custom.Jkem21481.manager.IPartNumberManager;
import com.neotel.smfcore.custom.Jkem21481.util.StorageExportUtil;
import com.neotel.smfcore.security.annotation.AnonymousAccess;
......@@ -375,7 +376,9 @@ public class JkemController {
barcode = codeBean.getBarcode();
}
}
if (barcode == null){
barcode = codeResolve.resolveOneValideBarcode(barcodeStr);
}
if (barcode != null) {
log.info("解析到的条码信息为:"+barcode.getBarcode());
......@@ -443,7 +446,9 @@ public class JkemController {
barcode = codeBean.getBarcode();
}
}
if (barcode == null){
barcode = codeResolve.resolveOneValideBarcode(code);
}
if (barcode == null) {
return ResultBean.newErrorResult(-1,"smfcore.error.barcode.invalid","{0}不是有效的条码",new String[]{code});
......@@ -550,6 +555,93 @@ public class JkemController {
}
@ApiOperation("判断是否可以放到流水线上")
@RequestMapping("/jkem/canPutInLine")
@AnonymousAccess
public ResultBean canPutInLine(String barcodeStr) {
CodeBean codeBean = codeResolve.resolveSingleCode(barcodeStr);
Barcode barcode = codeBean.getBarcode();
if (barcode == null) {
return ResultBean.newErrorResult(-1, "smfcore.error.barcode.noValidCode", "无效的条码");
}
//判断有没有出库任务
DataLog task = null;
List<DataLog> allTasks = taskService.getAllTasks();
for (DataLog dataLog : allTasks) {
if (dataLog.isCheckOutTask() && !dataLog.isCancel() && !dataLog.isFinished()) {
if (dataLog.getBarcode().equals(barcode.getBarcode())) {
task = dataLog;
break;
}
}
}
if (task == null) {
log.info(barcodeStr + "对应的出库任务为空,直接返回ok");
return ResultBean.newOkResult("");
}
//判断出料口是否为空
String export = task.getExport();
log.info(barcodeStr + "对应的出料口为:" + export);
if (StringUtils.isEmpty(export)) {
return ResultBean.newOkResult("");
}
//找到所有出料口相同的任务
List<DataLog> sameExportDatalogList = new ArrayList<>();
for (DataLog dataLog : allTasks) {
if (dataLog.isCheckOutTask() && !dataLog.isFinished() && !dataLog.isCancel()) {
if (export.equals(dataLog.getExport())) {
sameExportDatalogList.add(dataLog);
}
}
}
//按出料口进行排序
Collections.sort(sameExportDatalogList, (o1, o2) -> {
String feederInfo1 = o1.getAppendData("feederInfo");
String feederInfo2 = o2.getAppendData("feederInfo");
return feederInfo1.compareTo(feederInfo2);
});
//找到第一盘
DataLog dataLog = sameExportDatalogList.get(0);
if (dataLog.getBarcode().equals(task.getBarcode())){
return ResultBean.newOkResult("");
}
//任务完成/取消/ONLIne的都可以出
String status = dataLog.getStatus();
Boolean isBox = dataLog.getAppendData("isBox");
if (isBox == null){
isBox = false;
}
if (dataLog.isOnLine() || dataLog.isFinished() || dataLog.isCancel() || isBox){
return ResultBean.newOkResult("");
}
return ResultBean.newErrorResult(-1,"smf.barcode.cannotPutInLine","上一盘的料盘为[{0}],状态为[{1}],对应的feeder为[{2}],不允许放到皮带线上",new String[]{dataLog.getBarcode(),status,dataLog.getAppendData("feederInfo")});
}
@ApiOperation("获取出料口剩余数量")
@RequestMapping("/jkem/outletRemainingQty")
@AnonymousAccess
public ResultBean outletRemainingQty(String outLet) {
//获取是否有详情
int count = 0;
List<StorageExport> exportList = StorageExportUtil.getSimpleExport(outLet);
for (StorageExport export : exportList) {
String feeder = export.getFeeder();
List<StorageExportOutDetail> detailList = export.getDetailList();
if (detailList != null && !detailList.isEmpty()) {
for (StorageExportOutDetail detail : detailList) {
String status = detail.getStatus();
if (!OP_STATUS.FINISHED.name().equals(status) && !OP_STATUS.CANCEL.name().equals(status)){
String feederInfo = detail.getFeederInfo();
if (feederInfo.startsWith(feeder)){
count ++;
}
}
}
}
}
return ResultBean.newOkResult(count);
}
/**
......
package com.neotel.smfcore.custom.Jkem21481.controller;
import com.neotel.smfcore.common.base.IExcelDownLoad;
import com.neotel.smfcore.common.bean.PageData;
import com.neotel.smfcore.common.bean.ResultBean;
import com.neotel.smfcore.common.excel.ExcelReader;
......@@ -25,11 +26,10 @@ import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.io.IOException;
import java.util.*;
@Slf4j
@RequiredArgsConstructor
......@@ -93,6 +93,41 @@ public class PartNumberController {
return partNumberManager.findByPage(query,pageable);
}
@ApiOperation("获取列表")
@RequestMapping("/list/download")
//@AnonymousAccess
public void listDownload(MjPartNumberQueryCondition queryCondition, Pageable pageable, HttpServletResponse response) throws IOException {
Query query = QueryHelp.getQuery(queryCondition);
FileUtil.downloadExcel(query, pageable, response, new IExcelDownLoad() {
@Override
public List<List<String>> getHeader() {
List<List<String>> headerList = new ArrayList<>();
headerList.add(Arrays.asList("Maker Part Number"));
headerList.add(Arrays.asList("JKEM Part Number"));
headerList.add(Arrays.asList("Pitch"));
headerList.add(Arrays.asList("MSD"));
return headerList;
}
@Override
public List<List<Object>> getPageData(Query query, Pageable pageable) {
List<List<Object>> resultList = new ArrayList<>();
List<MJPartNumber> list = partNumberManager.findByQuery(query, pageable);
if (list != null && !list.isEmpty()){
for (MJPartNumber mjPartNumber : list) {
List<Object> dataList = new ArrayList<>();
dataList.add(mjPartNumber.getMakerPartNumber());
dataList.add(mjPartNumber.getJkemPartNumber());
dataList.add(mjPartNumber.getPitch());
dataList.add(mjPartNumber.getMsd());
resultList.add(dataList);
}
}
return resultList;
}
});
}
@ApiOperation("获取所有给客户端使用")
@RequestMapping("/getALlMakerPnAndJkemPn")
......
......@@ -134,7 +134,7 @@ public class StorageExportController {
//更新信息
List<StorageExport> exportList = StorageExportUtil.getSimpleExport(export);
for (StorageExport storageExport : exportList) {
if ("-1".equals(needFeeder)) {
if ("-1".equals(needFeeder) || StringUtils.isEmpty(needFeeder)) {
StorageExportUtil.clearExport(storageExport.getExportName());
} else {
StorageExportUtil.updateExport(storageExport.getExportName(), needFeeder);
......
......@@ -4,13 +4,17 @@ import com.neotel.smfcore.common.bean.ResultBean;
import com.neotel.smfcore.common.utils.Constants;
import com.neotel.smfcore.core.barcode.service.po.Barcode;
import com.neotel.smfcore.core.barcode.utils.CodeResolve;
import com.neotel.smfcore.core.device.enums.OP_STATUS;
import com.neotel.smfcore.core.device.util.DataCache;
import com.neotel.smfcore.core.system.service.po.DataLog;
import com.neotel.smfcore.core.system.util.TaskService;
import com.neotel.smfcore.custom.Jkem21481.bean.StorageExportOutDetail;
import com.neotel.smfcore.custom.Jkem21481.bean.UmSettingMacAndIp;
import com.neotel.smfcore.custom.Jkem21481.util.StorageExportUtil;
import com.neotel.smfcore.custom.Jkem21481.util.UmSettingUtil;
import com.neotel.smfcore.security.annotation.AnonymousAccess;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
......@@ -21,6 +25,7 @@ import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
@Slf4j
@ApiOperation("出料口配置")
@RestController
@RequestMapping("/umExportSetting")
......@@ -32,6 +37,9 @@ public class UmExportSettingController {
@Autowired
private CodeResolve codeResolve;
@Autowired
private TaskService taskService;
@ApiOperation("获取平板上出料口设置")
@RequestMapping("/getUmSetting")
......@@ -90,6 +98,27 @@ public class UmExportSettingController {
}
//根据barcode获取
String barcodeStr = barcode.getBarcode();
//判断有没有 未完成的任务
DataLog dataLog = null;
List<DataLog> allTasks = taskService.getAllTasks();
for (DataLog task : allTasks) {
if (task.isCheckOutTask()){
if (!task.isFinished() && !task.isCancel()){
if (barcodeStr.equals(task.getBarcode())){
dataLog = task;
break;
}
}
}
}
if (dataLog != null){
log.info(barcodeStr+"对应的出库任务不为空,直接修改为完成");
dataLog.setStatus(OP_STATUS.FINISHED.name());
taskService.moveTaskToFinished(dataLog);
taskService.updateFinishedTask(dataLog);
}
StorageExportOutDetail detail = StorageExportUtil.getFeederByBarcode(barcodeStr);
if (detail != null){
return ResultBean.newOkResult(detail);
......
......@@ -2,6 +2,8 @@ package com.neotel.smfcore.custom.Jkem21481.manager;
import com.neotel.smfcore.common.base.IBaseManager;
import com.neotel.smfcore.custom.Jkem21481.bean.MJPartNumber;
import org.springframework.data.domain.Pageable;
import org.springframework.data.mongodb.core.query.Query;
import java.util.List;
......@@ -15,4 +17,6 @@ public interface IPartNumberManager extends IBaseManager<MJPartNumber> {
int getPitchByJkemPartNumber(String pn);
void batchDelete(List<String> idList);
List<MJPartNumber> findByQuery(Query query, Pageable pageable);
}
......@@ -84,4 +84,9 @@ public class PartNumberManagerImpl implements IPartNumberManager {
partNumberDao.removeOneById(id);
}
}
@Override
public List<MJPartNumber> findByQuery(Query query, Pageable pageable) {
return partNumberDao.findByQuery(query,pageable);
}
}
......@@ -232,7 +232,7 @@ public class StorageExportUtil {
return export;
}
public static synchronized void updateExportData(String export, String barcode, String feederInfo, String orderNo,String status) {
public static synchronized void updateExportData(String export, String barcode, String feederInfo, String orderNo,String status,String partNumber) {
log.info("修改出料口:"+export+"barcode为:"+barcode+",站位信息为:"+feederInfo+"工单号为:"+orderNo+",状态为:"+status);
......@@ -257,6 +257,7 @@ public class StorageExportUtil {
outDetail.setStatus(status);
outDetail.setFeederInfo(feederInfo);
outDetail.setBarcode(barcode);
outDetail.setPartNumber(partNumber);
detailList.removeIf(t->t.getBarcode().equals(barcode));
detailList.add(outDetail);
}
......
......@@ -398,3 +398,4 @@ smfcore.materialBox.differentPn.continue=\u6CBB\u5177\u5BF9\u5E94\u7684\u6599\u5
smfcore.barcode.checkAmount.error=\u70B9\u6599\u6570\u91CF[{0}]\u5927\u4E8E\u5B9E\u9645\u6CBB\u5177\u6570\u91CF[{1}]
smfcore.order.outLet=\u51FA\u6599\u53E3
smfcore.umConfig=\u51FA\u6599\u53E3\u914D\u7F6E
smf.barcode.cannotPutInLine=\u4E0A\u4E00\u76D8\u7684\u6599\u76D8\u4E3A[{0}],\u72B6\u6001\u4E3A[{1}],\u5BF9\u5E94\u7684feeder\u4E3A[{2}],\u4E0D\u5141\u8BB8\u653E\u5230\u76AE\u5E26\u7EBF\u4E0A
......@@ -389,3 +389,4 @@ smfcore.materialBox.differentPn.continue=The material number corresponding to th
smfcore.barcode.checkAmount.error=The counted material quantity [{0}] exceeds the actual fixture quantity [{1}]
smfcore.order.outLet=outLet
smfcore.umConfig=Outlet Configuration
smf.barcode.cannotPutInLine=smf.barcode.cannotPutInLine = The previous tray is [{0}], its status is [{1}], and the corresponding feeder is [{2}]. It is not allowed to be placed on the conveyor line.
\ No newline at end of file
......@@ -385,3 +385,4 @@ smfcore.materialBox.differentPn.continue=\u6CBB\u5177\u306B\u5BFE\u5FDC\u3059\u3
smfcore.barcode.checkAmount.error=\u30AB\u30A6\u30F3\u30C8\u3055\u308C\u305F\u6750\u6599\u6570[{0}]\u306F\u5B9F\u969B\u306E\u6CBB\u5177\u6570[{1}]\u3092\u8D85\u3048\u3066\u3044\u307E\u3059
smfcore.order.outLet=\u306F\u3044\u3057\u3085\u3064\u3053\u3046
smfcore.umConfig=\u6392\u51FA\u53E3\u306E\u914D\u7F6E
smf.barcode.cannotPutInLine=\u524D\u306E\u30C8\u30EC\u30A4\u306F[{0}]\u3067\u3001\u30B9\u30C6\u30FC\u30BF\u30B9\u306F[{1}]\u3067\u3001\u5BFE\u5FDC\u3059\u308B\u30D5\u30A3\u30FC\u30C0\u30FC\u306F[{2}]\u3067\u3059\u3002\u30B3\u30F3\u30D9\u30E4\u30FC\u30E9\u30A4\u30F3\u306B\u8A2D\u7F6E\u3059\u308B\u3053\u3068\u306F\u8A31\u53EF\u3055\u308C\u3066\u3044\u307E\u305B\u3093
\ No newline at end of file
......@@ -385,3 +385,4 @@ smfcore.materialBox.differentPn.continue=\u6CBB\u5177\u5BF9\u5E94\u7684\u6599\u5
smfcore.barcode.checkAmount.error=\u70B9\u6599\u6570\u91CF[{0}]\u5927\u4E8E\u5B9E\u9645\u6CBB\u5177\u6570\u91CF[{1}]
smfcore.order.outLet=\u51FA\u6599\u53E3
smfcore.umConfig=\u51FA\u6599\u53E3\u914D\u7F6E
smf.barcode.cannotPutInLine=\u4E0A\u4E00\u76D8\u7684\u6599\u76D8\u4E3A[{0}],\u72B6\u6001\u4E3A[{1}],\u5BF9\u5E94\u7684feeder\u4E3A[{2}],\u4E0D\u5141\u8BB8\u653E\u5230\u76AE\u5E26\u7EBF\u4E0A
\ No newline at end of file
......@@ -385,3 +385,4 @@ smfcore.materialBox.differentPn.continue=\u6CBB\u5177\u5C0D\u61C9\u7684\u6599\u8
smfcore.barcode.checkAmount.error=\u9EDE\u6599\u6578\u91CF[{0}]\u5927\u65BC\u5BE6\u969B\u6CBB\u5177\u6578\u91CF[{1}]
smfcore.order.outLet=\u51FA\u6599\u53E3
smfcore.umConfig=\u51FA\u6599\u53E3\u914D\u7F6E
smf.barcode.cannotPutInLine=\u4E0A\u4E00\u76E4\u7684\u6599\u76E4\u70BA[{0}]\uFF0C\u72C0\u614B\u70BA[{1}]\uFF0C\u5C0D\u61C9\u7684feeder\u70BA[{2}]\uFF0C\u4E0D\u5141\u8A31\u653E\u5230\u76AE\u5E36\u7DDA\u4E0A
\ No newline at end of file
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!