Commit 07e55839 LN

工单状态重定义

1 个父辈 89fad21a
......@@ -207,8 +207,8 @@ public class DataInitManager {
Menu inOrderMenu= new Menu(new ArrayList<Menu>(), 1, "inList", "入库单", 1, "inList", "system/inList/index", "", 0, "headIcon");
// Menu putinMenu= new Menu(new ArrayList<Menu>(), 1, "putIn", "物料入库", 1, "putIn", "system/putIn/index", "", 0, "headIcon");
Menu zhuanruMenu= new Menu(new ArrayList<Menu>(), 1, "dumpWarehousing", "转储入库", 1, "dumpWarehousing", "system/dumpWarehousing/index", "", 0, "headIcon");
Menu singleMenu= new Menu(new ArrayList<Menu>(), 1, "singleDiskWarehousing", "单盘入库", 1, "singleDiskWarehousing", "system/singleDiskWarehousing/index", "", 0, "headIcon");
Menu zhuanruMenu= new Menu(new ArrayList<Menu>(), 1, "dumpWarehousing", "转储入库", 1, "dumpWarehousing", "system/dumpWarehousing/index", "", 0, "dumpWarehousing");
Menu singleMenu= new Menu(new ArrayList<Menu>(), 1, "singleDiskWarehousing", "单盘入库", 1, "singleDiskWarehousing", "system/singleDiskWarehousing/index", "", 0, "singleDiskWarehousing");
Menu sluggishMaterials= new Menu(new ArrayList<Menu>(), 1, "sluggishMaterials", "呆滞物料", 1, "sluggishMaterials", "system/sluggishMaterials/index", "", 0, "sMaterial");
Menu safetyInventory= new Menu(new ArrayList<Menu>(), 1, "safetyInventory", "安全库存", 1, "safetyInventory", "system/safetyInventory/index", "", 0, "safeInventory");
......
......@@ -166,24 +166,27 @@ public class SingleInController {
Barcode barcode = resolveBarcode(code);
//唯一码校验接口
ResponseParam param= HikApi.riCheckApi(SecurityUtils.getCurrentUsername(),barcode.getBarcode(),"","");
if(ObjectUtil.isNotEmpty(param)) {
if (param.getCode().equals(HikApi.CODE_OK)) {
//唯一码验证成功
} else {
throw new ValidateException("smfcore.riCheckApi.error", "唯一码[" + barcode.getBarcode() + "]验证失败:" + param.getCode() + "=" + param.getMessage() + "", new String[]{param.getCode(), param.getMessage()});
}
}
//判断如果是退料入库,需要获取数量
if(inType.equals(4)) {
if (inType.equals(4)) {
int num = HikApi.returnMaterialApi(SecurityUtils.getCurrentUsername(), barcode.getBarcode());
if (num > 0) {
barcode.setAmount(num);
barcodeManager.saveBarcode(barcode);
log.info("退料入库,二维码 " + barcode.getBarcode() + " 从接口获得新数量:" + num + ",并更新");
} else {
throw new ValidateException("smfcore.returnMaterialApi.error", "退料入库:[" + barcode.getBarcode() + "]获取数量失败");
}
} else {
//唯一码校验接口
ResponseParam param = HikApi.riCheckApi(SecurityUtils.getCurrentUsername(), barcode.getBarcode(), "", "");
if (ObjectUtil.isNotEmpty(param)) {
if (param.getCode().equals(HikApi.CODE_OK)) {
//唯一码验证成功
} else {
throw new ValidateException("smfcore.riCheckApi.error", "唯一码[" + barcode.getBarcode() + "]验证失败:" + param.getCode() + "=" + param.getMessage() + ""
, new String[]{param.getCode(), param.getMessage()});
}
}
}
......@@ -194,8 +197,7 @@ public class SingleInController {
String msl = barcode.getMsl();
try {
//需要模拟一个库位
//创建入库任务,暂不指定库位
DataLog dataLog = new DataLog();
dataLog.setBarcode(reelId);
dataLog.setPartNumber(pn);
......@@ -218,7 +220,7 @@ public class SingleInController {
dataLog.setStorageName(storage.getName());
}
}
log.info("用户["+loginUser+"]创建料架["+storage.getName()+"]的入库任务:barcode["+barcode.getBarcode()+"],cid["+storage.getCid()+"],inType["+inType+"]");
log.info("用户[" + loginUser + "]创建料架[" + storage.getName() + "]的入库任务:barcode[" + barcode.getBarcode() + "],cid[" + storage.getCid() + "],inType[" + inType + "]");
try {
taskService.addTaskToExecute(dataLog);
} catch (Exception e) {
......@@ -233,9 +235,6 @@ public class SingleInController {
return ResultBean.newOkResult("");
}
private Barcode resolveBarcode(String code) {
Barcode barcode = codeResolve.resolveOneValideBarcode(code);
if (barcode == null) {
......
......@@ -56,8 +56,7 @@ public class LiteOrderCache implements ITaskListener {
@Autowired
private IStoragePosManager storagePosManager;
@Autowired
private IBarcodeManager barcodeManager;
/**
* 正在执行的liteOrderMap, key 为orderNo,value 为order
......@@ -163,58 +162,58 @@ public class LiteOrderCache implements ITaskListener {
}
}
public ResultBean checkOutOrder(LiteOrder liteOrder) throws ValidateException {
ORDER_COLOR nextColor = getNextColor();
if (nextColor == null) {
log.info("执行工单[" + liteOrder.getOrderNo() + "] 时,已达最大可执行工单数");
throw new ValidateException("order.out.maxOrder","已达最大可执行工单数");
}
//其他出库模式一次性全部生成任务
List<StoragePos> lockPosList = storagePosManager.findLockPos(liteOrder.getOrderNo());
if(lockPosList==null){
throw new ValidateException("smfcore.notFindPos","未找到锁定库位");
}
int taskReelCount = 0;
for (StoragePos lockPos : lockPosList) {
Storage storage = dataCache.getStorageById(lockPos.getStorageId());
Barcode barcode = lockPos.getBarcode();
DataLog task = new DataLog(storage,barcode,lockPos);
task.setSourceId(liteOrder.getId());
task.setSourceName(liteOrder.getOrderNo());
task.setSubSourceId(barcode.getLockName());
task.setSubSourceInfo(barcode.getLockName());
task.setType(OP.CHECKOUT);
task.setPutInDate(barcode.getPutInDate());
task.setLightColor(nextColor.getRgb());
task.setStatus(OP_STATUS.WAIT.name());
taskService.addTaskToExecute(task);
taskReelCount = taskReelCount + 1;
log.info("工单[" + liteOrder.getOrderNo() + "]出库位置仓位【" + task.getPosName() + "】RI=[" + task.getBarcode() + "] PN=[" + task.getPartNumber() + "] ");
}
liteOrder.setTaskReelCount(taskReelCount);
liteOrder.setTotalTaskReelCount(liteOrder.getTotalTaskReelCount()+taskReelCount);
liteOrder.setStatus(LITEORDER_STATUS.TAILS);
log.info("工单[" + liteOrder.getOrderNo() + "]任务分配结束,任务数[" + taskReelCount + "]");
if (taskReelCount <= 0) {
//没有任务,直接结束
liteOrder.finishedTasks();
}else{
//有需要出库的 ,更新状态
liteOrder.setStatus(LITEORDER_STATUS.TAILS);
}
liteOrder = liteOrderManager.save(liteOrder);
liteOrderMap.put(liteOrder.getOrderNo(),liteOrder);
if (taskReelCount <= 0) {
return ResultBean.newErrorResult(-1,"smfcore.notask","No task in this order");
}
return ResultBean.newOkResult("smfcore.taskCount", "total task is :{0}",new String[]{ taskReelCount+""},"");
}
//
// public ResultBean checkOutOrder(LiteOrder liteOrder) throws ValidateException {
//
// ORDER_COLOR nextColor = getNextColor();
// if (nextColor == null) {
// log.info("执行工单[" + liteOrder.getOrderNo() + "] 时,已达最大可执行工单数");
// throw new ValidateException("order.out.maxOrder","已达最大可执行工单数");
// }
// //其他出库模式一次性全部生成任务
// List<StoragePos> lockPosList = storagePosManager.findLockPos(liteOrder.getOrderNo());
// if(lockPosList==null){
// throw new ValidateException("smfcore.notFindPos","未找到锁定库位");
// }
// int taskReelCount = 0;
// for (StoragePos lockPos : lockPosList) {
// Storage storage = dataCache.getStorageById(lockPos.getStorageId());
// Barcode barcode = lockPos.getBarcode();
// DataLog task = new DataLog(storage,barcode,lockPos);
//
// task.setSourceId(liteOrder.getId());
// task.setSourceName(liteOrder.getOrderNo());
// task.setSubSourceId(barcode.getLockName());
// task.setSubSourceInfo(barcode.getLockName());
// task.setType(OP.CHECKOUT);
// task.setPutInDate(barcode.getPutInDate());
// task.setLightColor(nextColor.getRgb());
// task.setStatus(OP_STATUS.WAIT.name());
// taskService.addTaskToExecute(task);
//
// taskReelCount = taskReelCount + 1;
// log.info("工单[" + liteOrder.getOrderNo() + "]出库位置仓位【" + task.getPosName() + "】RI=[" + task.getBarcode() + "] PN=[" + task.getPartNumber() + "] ");
// }
//
// liteOrder.setTaskReelCount(taskReelCount);
// liteOrder.setTotalTaskReelCount(liteOrder.getTotalTaskReelCount()+taskReelCount);
// liteOrder.setStatus(LITEORDER_STATUS.EXECUTING);
// log.info("工单[" + liteOrder.getOrderNo() + "]任务分配结束,任务数[" + taskReelCount + "]");
//
// if (taskReelCount <= 0) {
// //没有任务,直接结束
// liteOrder.finishedTasks();
// }else{
// //有需要出库的 ,更新状态
// liteOrder.setStatus(LITEORDER_STATUS.EXECUTING);
// }
// liteOrder = liteOrderManager.save(liteOrder);
// liteOrderMap.put(liteOrder.getOrderNo(),liteOrder);
// if (taskReelCount <= 0) {
// return ResultBean.newErrorResult(-1,"smfcore.notask","No task in this order");
// }
// return ResultBean.newOkResult("smfcore.taskCount", "total task is :{0}",new String[]{ taskReelCount+""},"");
// }
/**
* 更新工单状态信息
......@@ -398,17 +397,13 @@ public class LiteOrderCache implements ITaskListener {
* 锁定物料
*/
public synchronized String checkOutLiteOrder(String userName, String orderNo) {
LiteOrder cacheOrder = liteOrderMap.get(orderNo);
if (cacheOrder == null) {
cacheOrder = liteOrderManager.findByOrderNo(orderNo);
}
LiteOrder cacheOrder = findOrderByNo(orderNo);
if (cacheOrder == null) {
return "smfcore.order.out.notFound";
}
if ( !cacheOrder.isTaskFinished() && !cacheOrder.isNew()) {
if ( cacheOrder.isExecuting()) {
log.info("工单[" + orderNo + "]正在执行");
return "smfcore.order.out.executing";
}
......@@ -430,11 +425,11 @@ public class LiteOrderCache implements ITaskListener {
return "smfcore.order.out.maxOrder";
}
//先查找是否已经锁定过库位,如果已经锁定过,出锁定的库位
List<StoragePos> lockPosList = storagePosManager.findLockPos(cacheOrder.getOrderNo());
if(lockPosList!=null&& lockPosList.size()>0){
return checkOutOrder(cacheOrder).getMsgKey();
}
// //先查找是否已经锁定过库位,如果已经锁定过,出锁定的库位
// List<StoragePos> lockPosList = storagePosManager.findLockPos(cacheOrder.getOrderNo());
// if(lockPosList!=null&& lockPosList.size()>0){
// return checkOutOrder(cacheOrder).getMsgKey();
// }
// 出库策略(系统判断逻辑由上到下依次满足):
//①湿敏超期物料所在仓位锁定,不允许备料;
......@@ -640,7 +635,7 @@ public class LiteOrderCache implements ITaskListener {
cacheOrder.setTaskReelCount(0);
cacheOrder.setTaskFinishedTime(-1);
cacheOrder.setFinishedReelCount(0);
cacheOrder.setStatus(LITEORDER_STATUS.TAILS);
cacheOrder.setStatus(LITEORDER_STATUS.EXECUTING);
//设置出库操作人
cacheOrder.setOperateUser(userName);
cacheOrder.setStartDate(new Date());
......@@ -694,9 +689,9 @@ public class LiteOrderCache implements ITaskListener {
liteOrderItemManager.save(orderItem);
}
cacheOrder.setTaskReelCount(taskReelCount);
cacheOrder.setTaskReelCount(taskReelCount);
cacheOrder.setTotalFinishedReelCount(0);
cacheOrder.setTotalTaskReelCount(cacheOrder.getTotalTaskReelCount()+taskReelCount);
log.info("工单[" + orderNo + "]任务分配结束,任务数[" + taskReelCount + "]");
//有需要出库的
......@@ -718,10 +713,10 @@ public class LiteOrderCache implements ITaskListener {
//挑料时缺料,直接 关闭工单
log.info("工单["+liteOrder.getOrderNo()+"]缺料,直接关闭工单");
log.info("工单["+liteOrder.getOrderNo()+"]缺料,更改工单为缺料状态");
liteOrder.setOperateUser(userName);
liteOrder.setStatus(LITEORDER_STATUS.CLOSED);
liteOrder.setClosed(true);
liteOrder.setStatus(LITEORDER_STATUS.SHORTAGE);
liteOrder.setClosed(false);
liteOrderManager.save(liteOrder);
liteOrderMap.put(liteOrder.getOrderNo(), liteOrder);
......
......@@ -6,23 +6,37 @@ package com.neotel.smfcore.core.order.enums;
public class LITEORDER_STATUS {
/**新建的工单*/
public static int NEW=0;
/**首套料正在执行*/
public static int BOM=1;
/**首盘料已结束,等待出尾料*/
public static int BOM_FINISHED=2;
/**正在出尾料*/
public static int TAILS=3;
/**尾料已完成*/
public static int TAILS_FINISHED=4;
/**工单缺料*/
public static int SHORTAGE=1;
/**正在补料*/
public static int ONE=5;
/**补料已完成*/
public static int ONE_FINISHED=6;
/**工单正在出库执行中*/
public static int EXECUTING=2;
// /**首套料正在执行*/
// public static int BOM=1;
//
// /**首盘料已结束,等待出尾料*/
// public static int BOM_FINISHED=2;
// /**正在出尾料*/
// public static int TAILS=3;
// /**尾料已完成*/
// public static int TAILS_FINISHED=4;
//
// /**正在补料*/
// public static int ONE=5;
// /**补料已完成*/
// public static int ONE_FINISHED=6;
/**工单已关闭*/
public static int CLOSED=7;
public static int CLOSED=3;
/**
* 工单状态
* 0=新建的工单
* 1=工单缺料
* 2=工单正在出库中
* 3=工单已关闭
*/
/**
* 工单状态
* 0=新建的工单
......
......@@ -295,7 +295,7 @@ public class OrderController {
User user = userManager.findByUserName(SecurityUtils.getCurrentUsername());
//查询正在执行的工单列表
Query query = new Query(Criteria.where("status").ne(LITEORDER_STATUS.CLOSED).ne(LITEORDER_STATUS.NEW));
Query query = new Query(Criteria.where("status").is(LITEORDER_STATUS.EXECUTING));
//根据开始出库时间排序
Sort sort = Sort.by(Sort.Direction.ASC, "startOutTime");
query.with(sort);
......@@ -375,7 +375,7 @@ public class OrderController {
List<LiteOrder> orderList = getExecuteOrders(user);
if (orderList.size() <= 0) {
return ResultBean.newErrorResult(-1, "smfcore.order.noOrder", "暂无可操作的工单");
return ResultBean.newErrorResult(-1, "smfcore.order.noOrder", "暂无可操作的工单");
}
LiteOrder liteOrder = orderList.get(0);
......@@ -396,7 +396,7 @@ public class OrderController {
private List<LiteOrder> getExecuteOrders(User user) {
//查询正在执行的工单列表
Query query = new Query(Criteria.where("status").ne(LITEORDER_STATUS.CLOSED).ne(LITEORDER_STATUS.NEW));
Query query = new Query(Criteria.where("status").is(LITEORDER_STATUS.EXECUTING));
//根据开始出库时间排序
Sort sort = Sort.by(Sort.Direction.ASC, "startOutTime");
query.with(sort);
......
......@@ -155,26 +155,30 @@ public class LiteOrder extends BasePo implements Serializable {
* 结束当前的任务
*/
public void finishedTasks(){
if(isOutOne()){
// setStatus(LITEORDER_STATUS.ONE_FINISHED);
setClosed(true);
}else if(isOutBom()){
setStatus(LITEORDER_STATUS.BOM_FINISHED);
}else if(isOutTails()){
// setStatus(LITEORDER_STATUS.TAILS_FINISHED);
// if(isOutOne()){
//// setStatus(LITEORDER_STATUS.ONE_FINISHED);
// setClosed(true);
// }else if(isOutBom()){
// setStatus(LITEORDER_STATUS.BOM_FINISHED);
// }else if(isOutTails()){
//// setStatus(LITEORDER_STATUS.TAILS_FINISHED);
// setClosed(true);
// }
if(isExecuting()){
setClosed(true);
}
setTaskFinishedTime(System.currentTimeMillis());
}
/**
* 是否正在出首套料
* @return
*/
public boolean isOutBom(){
return status == LITEORDER_STATUS.BOM;
}
//
// /**
// * 是否正在出首套料
// * @return
// */
// public boolean isOutBom(){
// return status == LITEORDER_STATUS.BOM;
// }
/**
* 是否是未执行过的工单
......@@ -183,31 +187,45 @@ public class LiteOrder extends BasePo implements Serializable {
return status == LITEORDER_STATUS.NEW;
}
public boolean isOutOne(){
return status == LITEORDER_STATUS.ONE;
}
/**
* 补料任务完成
* @return
* 是否是缺料工单
*/
public boolean isOutOneFinished(){
return status == LITEORDER_STATUS.ONE_FINISHED;
public boolean isShortage(){
return status == LITEORDER_STATUS.SHORTAGE;
}
/**
* 是否正在出尾料
* 是否是执行中的工单
*/
public boolean isOutTails(){
return status == LITEORDER_STATUS.TAILS;
public boolean isExecuting(){
return status == LITEORDER_STATUS.EXECUTING;
}
/**
* 任务料盘是否已出完
*/
public boolean isTaskFinished(){
return status == LITEORDER_STATUS.BOM_FINISHED || status == LITEORDER_STATUS.TAILS_FINISHED || status == LITEORDER_STATUS.ONE_FINISHED;
}
// public boolean isOutOne(){
// return status == LITEORDER_STATUS.ONE;
// }
//
// /**
// * 补料任务完成
// * @return
// */
// public boolean isOutOneFinished(){
// return status == LITEORDER_STATUS.ONE_FINISHED;
// }
//
// /**
// * 是否正在出尾料
// */
// public boolean isOutTails(){
// return status == LITEORDER_STATUS.TAILS;
// }
//
// /**
// * 任务料盘是否已出完
// */
// public boolean isTaskFinished(){
// return status == LITEORDER_STATUS.BOM_FINISHED || status == LITEORDER_STATUS.TAILS_FINISHED || status == LITEORDER_STATUS.ONE_FINISHED;
// }
public void setTaskReelCount(int taskReelCount) {
......@@ -227,7 +245,7 @@ public class LiteOrder extends BasePo implements Serializable {
* 是否需要展示(已完成的,过20 秒自动清除)
*/
public boolean needToShow(){
if(isTaskFinished()){
if(isClosed()){
if(taskFinishedTime != -1){
long now = System.currentTimeMillis();
return now - taskFinishedTime <= 20 * 1000;
......
......@@ -252,6 +252,7 @@ smfcore.safetyInventory.supplementReel=\u8865\u5145\u76D8\u6570
smfcore.safetyInventory.amount=\u6700\u5C0F\u5305\u88C5
smfcore.component.storeError=\u8BF7\u8F93\u5165\u6B63\u786E\u7684\u5E93\u5B58\uFF0C\u6700\u5C0F\u5E93\u5B58<=\u5B89\u5168\u5E93\u5B58<=\u6700\u5927\u5E93\u5B58
smfcore.user.group.error=\u7EC4[{0}]\u5DF2\u7ECF\u5206\u914D\u7ED9\u64CD\u4F5C\u5458[{1}]
#smfcore.order.out.short=\u5DE5\u5355\u51FA\u5E93\u5931\u8D25\uFF0C\u5DE5\u5355\u7F3A\u6599
#smfclient.nlp.onlyOneTray=\u4E0D\u53EF\u540C\u65F6\u653E\u5165\u591A\u76D8\u7269\u6599:{0}
#smfclient.nlp.cannotFindPos={0}\u672A\u627E\u5230\u5E93\u4F4D:{1}
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!