Commit 189745dd zshaohui

1.uid出库 只增加线体选择,后台自己匹配机种

2.uid出库, 在选择线体时,增加 异常出库 选项
1 个父辈 311ee050
...@@ -553,6 +553,7 @@ public class LiteOrderCache { ...@@ -553,6 +553,7 @@ public class LiteOrderCache {
while (assignReelCount < remainReelCount) { while (assignReelCount < remainReelCount) {
String partNumber = orderItem.getPn(); String partNumber = orderItem.getPn();
String[] partNumberSpl = partNumber.split(",");
StoragePos pos = null; StoragePos pos = null;
if (cacheOrder.getType() == 2) { if (cacheOrder.getType() == 2) {
...@@ -567,7 +568,12 @@ public class LiteOrderCache { ...@@ -567,7 +568,12 @@ public class LiteOrderCache {
} else { } else {
//PN //PN
do { do {
pos = storagePosManager.findPartNumberInStorages(storageIdList, partNumber, excludePosIds, checkoutType, orderItem.getBrand()); for (String pn : partNumberSpl) {
pos = storagePosManager.findPartNumberInStorages(storageIdList, pn, excludePosIds, checkoutType, orderItem.getBrand());
if (pos != null){
break;
}
}
if (pos == null) { if (pos == null) {
break; break;
} }
...@@ -618,6 +624,7 @@ public class LiteOrderCache { ...@@ -618,6 +624,7 @@ public class LiteOrderCache {
task.setPickingId(orderItem.getPickingId()); task.setPickingId(orderItem.getPickingId());
task.setItemNo(orderItem.getItemNo()); task.setItemNo(orderItem.getItemNo());
task.setModel(orderItem.getModel()); task.setModel(orderItem.getModel());
task.setMo(orderItem.getMo());
//先调用tower发料 //先调用tower发料
String result = lizhenApi.towerCheck(task); String result = lizhenApi.towerCheck(task);
...@@ -1254,16 +1261,22 @@ public class LiteOrderCache { ...@@ -1254,16 +1261,22 @@ public class LiteOrderCache {
continue; continue;
} }
} }
String pn = orderItem.getPn();
String[] split = pn.split(",");
if (orderItem.getOutReelCount() < orderItem.getNeedReelCount()) { if (orderItem.getOutReelCount() < orderItem.getNeedReelCount()) {
InventoryItem inventoryItem = inventoryMap.get(orderItem.getPn()); boolean lack = true;
if (inventoryItem != null) { for (String partNumber : split) {
InventoryItem inventoryItem = inventoryMap.get(partNumber);
if (inventoryItem != null){
if (inventoryItem.getStockReel() /*- inventoryItem.getLockReel()*/ - inventoryItem.getBindReel() > 0) { if (inventoryItem.getStockReel() /*- inventoryItem.getLockReel()*/ - inventoryItem.getBindReel() > 0) {
inventoryItem.setBindReel(inventoryItem.getBindReel() + 1); inventoryItem.setBindReel(inventoryItem.getBindReel() + 1);
} else {
lackItems.add(orderItem);
}
inventoryMap.put(orderItem.getPn(), inventoryItem); inventoryMap.put(orderItem.getPn(), inventoryItem);
} else { lack = false;
break;
}
}
}
if (lack){
lackItems.add(orderItem); lackItems.add(orderItem);
} }
} }
......
...@@ -4,6 +4,7 @@ package com.neotel.smfcore.core.order.rest; ...@@ -4,6 +4,7 @@ package com.neotel.smfcore.core.order.rest;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
import com.neotel.smfcore.common.base.IExcelDownLoad;
import com.neotel.smfcore.common.bean.PageData; import com.neotel.smfcore.common.bean.PageData;
import com.neotel.smfcore.common.bean.ResultBean; import com.neotel.smfcore.common.bean.ResultBean;
import com.neotel.smfcore.common.exception.ValidateException; import com.neotel.smfcore.common.exception.ValidateException;
...@@ -18,6 +19,7 @@ import com.neotel.smfcore.core.barcode.utils.CodeResolve; ...@@ -18,6 +19,7 @@ import com.neotel.smfcore.core.barcode.utils.CodeResolve;
import com.neotel.smfcore.core.device.enums.OP; import com.neotel.smfcore.core.device.enums.OP;
import com.neotel.smfcore.core.device.enums.OP_STATUS; import com.neotel.smfcore.core.device.enums.OP_STATUS;
import com.neotel.smfcore.core.device.util.DataCache; import com.neotel.smfcore.core.device.util.DataCache;
import com.neotel.smfcore.core.language.util.MessageUtils;
import com.neotel.smfcore.core.order.LiteOrderCache; import com.neotel.smfcore.core.order.LiteOrderCache;
import com.neotel.smfcore.core.order.enums.LITEORDER_SOURCE; import com.neotel.smfcore.core.order.enums.LITEORDER_SOURCE;
import com.neotel.smfcore.core.order.enums.LITEORDER_STATUS; import com.neotel.smfcore.core.order.enums.LITEORDER_STATUS;
...@@ -31,6 +33,7 @@ import com.neotel.smfcore.core.order.service.po.LiteOrder; ...@@ -31,6 +33,7 @@ import com.neotel.smfcore.core.order.service.po.LiteOrder;
import com.neotel.smfcore.core.order.service.po.LiteOrderItem; import com.neotel.smfcore.core.order.service.po.LiteOrderItem;
import com.neotel.smfcore.core.order.util.OrderFileWatch; import com.neotel.smfcore.core.order.util.OrderFileWatch;
import com.neotel.smfcore.core.system.bean.MSDAppendInfo; import com.neotel.smfcore.core.system.bean.MSDAppendInfo;
import com.neotel.smfcore.core.system.bean.OrderSetting;
import com.neotel.smfcore.core.system.service.po.DataLog; import com.neotel.smfcore.core.system.service.po.DataLog;
import com.neotel.smfcore.core.system.util.TaskService; import com.neotel.smfcore.core.system.util.TaskService;
import com.neotel.smfcore.custom.lizhen.third.maicheng.util.MaiZhengUtil; import com.neotel.smfcore.custom.lizhen.third.maicheng.util.MaiZhengUtil;
...@@ -285,8 +288,9 @@ public class OrderController { ...@@ -285,8 +288,9 @@ public class OrderController {
criteria.setExcludeSourceList(excludeSources); criteria.setExcludeSourceList(excludeSources);
} }
} }
if (StringUtils.isBlank(criteria.getWarningItemId())) {
Query query = QueryHelp.getQuery(criteria); Query query = QueryHelp.getQuery(criteria);
if (StringUtils.isBlank(criteria.getWarningItemId())) {
if (criteria.getStatus() != null) { if (criteria.getStatus() != null) {
if (criteria.getStatus() == 1) { if (criteria.getStatus() == 1) {
query.addCriteria(Criteria.where("status").is(LITEORDER_STATUS.CLOSED)); query.addCriteria(Criteria.where("status").is(LITEORDER_STATUS.CLOSED));
...@@ -298,7 +302,6 @@ public class OrderController { ...@@ -298,7 +302,6 @@ public class OrderController {
PageData<OrderDto> resultList = orderMapper.toDto(orderList); PageData<OrderDto> resultList = orderMapper.toDto(orderList);
return resultList; return resultList;
} else { } else {
Query query = QueryHelp.getQuery(criteria);
PageData<OrderDto> resultList = new PageData<>(); PageData<OrderDto> resultList = new PageData<>();
resultList.setContent(new ArrayList<>()); resultList.setContent(new ArrayList<>());
resultList.setTotalElements(0); resultList.setTotalElements(0);
...@@ -315,6 +318,104 @@ public class OrderController { ...@@ -315,6 +318,104 @@ public class OrderController {
} }
} }
@ApiOperation("工单导出")
@GetMapping("/download")
//@PreAuthorize("@el.check('workOrder')")
public void orderDownload(OrderQueryCondition criteria, Pageable pageable,HttpServletResponse response) throws IOException {
Query query = QueryHelp.getQuery(criteria);
if (StringUtils.isBlank(criteria.getWarningItemId())) {
if (criteria.getStatus() != null) {
if (criteria.getStatus() == 1) {
query.addCriteria(Criteria.where("status").is(LITEORDER_STATUS.CLOSED));
} else if (criteria.getStatus() == 2) {
query.addCriteria(Criteria.where("status").ne(LITEORDER_STATUS.CLOSED));
}
}
FileUtil.downloadExcel(query, pageable, response, new IExcelDownLoad() {
@Override
public List<List<String>> getHeader() {
List<List<String>> headerList = new ArrayList<>();
headerList.add(Arrays.asList("需求单号"));
headerList.add(Arrays.asList("当前任务盘数"));
headerList.add(Arrays.asList("总任务盘数"));
headerList.add(Arrays.asList("工单状态"));
headerList.add(Arrays.asList("线别"));
headerList.add(Arrays.asList("创建时间"));
headerList.add(Arrays.asList("出口"));
return headerList;
}
@Override
public List<List<Object>> getPageData(Query query, Pageable pageable) {
List<List<Object>> resultList = new ArrayList<>();
PageData<LiteOrder> pageData = liteOrderManager.findByPage(query, pageable);
List<LiteOrder> content = pageData.getContent();
if (content != null && !content.isEmpty()) {
for (LiteOrder order : content) {
List<Object> data = new ArrayList<>();
data.add(order.getOrderNo());
data.add(order.getFinishedReelCount() + "/" + order.getTaskReelCount());
data.add(order.getTotalFinishedReelCount() + "/" + order.getTotalTaskReelCount());
if (order.getStatus() == LITEORDER_STATUS.NEW) {
data.add("新建");
} else if (order.getStatus() == LITEORDER_STATUS.TAILS) {
data.add("正在出库");
} else if (order.getStatus() == LITEORDER_STATUS.TAILS_FINISHED) {
data.add("尾料已完成");
} else if (order.getStatus() == LITEORDER_STATUS.CLOSED) {
data.add("关闭");
} else {
data.add("");
}
data.add(order.getLine());
data.add(order.getCreateDate());
data.add(order.getExport());
resultList.add(data);
}
}
return resultList;
}
});
} else {
LiteOrderItem item = liteOrderItemManager.findOne(query);
if (item != null) {
String orderId = item.getOrderId();
LiteOrder liteOrder = liteOrderManager.get(orderId);
if (liteOrder != null) {
List<List<String>> headerList = new ArrayList<>();
headerList.add(Arrays.asList("需求单号"));
headerList.add(Arrays.asList("当前任务盘数"));
headerList.add(Arrays.asList("总任务盘数"));
headerList.add(Arrays.asList("工单状态"));
headerList.add(Arrays.asList("线别"));
headerList.add(Arrays.asList("创建时间"));
headerList.add(Arrays.asList("出口"));
List<List<Object>> datas = new ArrayList<>();
List<Object> data = new ArrayList<>();
data.add(liteOrder.getOrderNo());
data.add(liteOrder.getFinishedReelCount() + "/" + liteOrder.getTaskReelCount());
data.add(liteOrder.getTotalFinishedReelCount() + "/" + liteOrder.getTotalTaskReelCount());
if (liteOrder.getStatus() == LITEORDER_STATUS.NEW) {
data.add("新建");
} else if (liteOrder.getStatus() == LITEORDER_STATUS.TAILS) {
data.add("正在出库");
} else if (liteOrder.getStatus() == LITEORDER_STATUS.TAILS_FINISHED) {
data.add("尾料已完成");
} else if (liteOrder.getStatus() == LITEORDER_STATUS.CLOSED) {
data.add("关闭");
} else {
data.add("");
}
data.add(liteOrder.getLine());
data.add(liteOrder.getCreateDate());
data.add(liteOrder.getExport());
datas.add(data);
FileUtil.downloadExcel(headerList, datas, response);
}
}
}
}
// //
...@@ -398,6 +499,124 @@ public class OrderController { ...@@ -398,6 +499,124 @@ public class OrderController {
throw new ValidateException("smfcore.valueCanotNull", "{0}不能为空", new String[]{"orderNo"}); throw new ValidateException("smfcore.valueCanotNull", "{0}不能为空", new String[]{"orderNo"});
} }
@ApiOperation("下载工单详情")
@RequestMapping("/detial/download")
public void detialDownload(String orderNo,HttpServletResponse response) throws IOException {
LiteOrder liteOrder = liteOrderManager.findByOrderNo(orderNo);
List<List<String>> headerList = new ArrayList<>();
headerList.add(Arrays.asList("缺料预警ID"));
headerList.add(Arrays.asList("厂商"));
headerList.add(Arrays.asList("PN"));
headerList.add(Arrays.asList("面别"));
headerList.add(Arrays.asList("机器名称"));
headerList.add(Arrays.asList("机器"));
headerList.add(Arrays.asList("Mo"));
headerList.add(Arrays.asList("Slot"));
headerList.add(Arrays.asList("SubSlot"));
headerList.add(Arrays.asList("需求盘数"));
headerList.add(Arrays.asList("已出盘数"));
List<List<Object>> dataList = new ArrayList<>();
for (LiteOrderItem orderItem : liteOrder.getOrderItems()) {
List<Object> data = new ArrayList<>();
data.add(orderItem.getWarningItemId());
data.add(orderItem.getBrand());
data.add(orderItem.getPn());
data.add(orderItem.getSide());
data.add(orderItem.getMachineName());
data.add(orderItem.getTableNo());
data.add(orderItem.getMo());
data.add(orderItem.getSlot());
data.add(orderItem.getSubSlot());
data.add(orderItem.getNeedReelCount());
data.add(orderItem.getOutReelCount());
dataList.add(data);
}
FileUtil.downloadExcel(headerList,dataList,response);
}
/* @ApiOperation("下载工单详情")
@RequestMapping("/detial/download")
@PreAuthorize("@el.check('workOrder:detial')")
@AnonymousAccess
public void detialDownload(@RequestParam(required = false) String id, @RequestParam(required = false) String orderNo, HttpServletResponse response, HttpServletRequest request) throws IOException {
LiteOrder liteOrder = null;
if (!ObjectUtils.isEmpty(id)) {
liteOrder = liteOrderManager.get(id);
} else if (!ObjectUtils.isEmpty(orderNo)) {
liteOrder = liteOrderManager.findByOrderNo(orderNo);
}
if (liteOrder != null) {
List<List<String>> header = new ArrayList<>();
Locale locale = request.getLocale();
header.add(Lists.newArrayList(MessageUtils.getText("smfcore.storagePos.lockName",locale,"工单号")));
header.add(Lists.newArrayList(MessageUtils.getText("smfcore.order.ri",locale,"RI")));
header.add(Lists.newArrayList(MessageUtils.getText("smfcore.order.pn",locale,"PN")));
header.add(Lists.newArrayList(MessageUtils.getText("smfcore.order.MPN",locale,"MPN")));
header.add(Lists.newArrayList(MessageUtils.getText("smfcore.order.side",locale,"面别")));
header.add(Lists.newArrayList(MessageUtils.getText("smfcore.order.tableNo",locale,"台车号")));
header.add(Lists.newArrayList(MessageUtils.getText("smfcore.order.feederInfo",locale,"站位信息")));
header.add(Lists.newArrayList(MessageUtils.getText("smfcore.order.needReelCount",locale,"需求盘数")));
header.add(Lists.newArrayList(MessageUtils.getText("smfcore.order.outReelCount",locale,"已出盘数")));
header.add(Lists.newArrayList(MessageUtils.getText("smfcore.order.needNum",locale,"需求数量")));
header.add(Lists.newArrayList(MessageUtils.getText("smfcore.order.outNum",locale,"已出数量")));
header.add(Lists.newArrayList(MessageUtils.getText("smfcore.order.out.barcode",locale,"出库物料详情")));
//附加字段
OrderSetting orderSetting=dataCache.getOrderSetting();
if(orderSetting.getAppendData()!=null&&orderSetting.getAppendData().size()>0){
for (String key :
orderSetting.getAppendData().keySet()) {
String title=orderSetting.getAppendData().get(key);
header.add(Lists.newArrayList(title));
}
}
header.add(Lists.newArrayList(MessageUtils.getText("smfcore.order.exception",locale,"异常")));
List<List<Object>> dataList = new ArrayList<>();
for (LiteOrderItem orderItem : liteOrder.getOrderItems()) {
List<Object> data = new ArrayList<>();
data.add(orderNo);
data.add(orderItem.getRi());
data.add(orderItem.getPn());
data.add(orderItem.getMpn());
data.add(orderItem.getSide());
data.add(orderItem.getTableNo());
data.add(orderItem.getFeederInfo());
data.add(orderItem.getNeedReelCount());
data.add(orderItem.getOutReelCount());
data.add(orderItem.getNeedNum());
data.add(orderItem.getOutNum());
data.add(orderItem.getBarcodeStr());
//附加字段
if(orderSetting.getAppendData()!=null&&orderSetting.getAppendData().size()>0){
for (String key :
orderSetting.getAppendData().keySet()) {
String title=orderSetting.getAppendData().get(key);
String v=orderItem.getAppendData().getOrDefault(key,"");
data.add(v);
}
}
boolean exc=false;
if(orderItem.getOutNum()<orderItem.getNeedNum()){
exc=true;
}
if(orderItem.getOutReelCount()<orderItem.getOutReelCount()){
exc=true;
}
String exception=exc?MessageUtils.getText("smfcore.order.yes",locale,"是"):"";
data.add(exception);
dataList.add(data);
}
FileUtil.downloadExcelByConfig(liteOrder.getOrderNo(), header,dataList,response);
}
}*/
private boolean isLack(List<LiteOrderItem> lackItemList, LiteOrderItem item) { private boolean isLack(List<LiteOrderItem> lackItemList, LiteOrderItem item) {
if (lackItemList != null && !lackItemList.isEmpty()) { if (lackItemList != null && !lackItemList.isEmpty()) {
for (LiteOrderItem orderItem : lackItemList) { for (LiteOrderItem orderItem : lackItemList) {
......
...@@ -4,6 +4,7 @@ package com.neotel.smfcore.core.order.rest.bean.query; ...@@ -4,6 +4,7 @@ package com.neotel.smfcore.core.order.rest.bean.query;
import com.neotel.smfcore.common.annotation.QueryCondition; import com.neotel.smfcore.common.annotation.QueryCondition;
import com.neotel.smfcore.common.bean.BetweenData; import com.neotel.smfcore.common.bean.BetweenData;
import lombok.Data; import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
...@@ -14,7 +15,8 @@ public class OrderQueryCondition { ...@@ -14,7 +15,8 @@ public class OrderQueryCondition {
@QueryCondition(blurry = "orderNo,export") @QueryCondition(blurry = "orderNo,export")
private String blurry; private String blurry;
@QueryCondition(type = QueryCondition.Type.BETWEEN) @QueryCondition(type = QueryCondition.Type.BETWEEN,propName = "createDate")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private BetweenData<Date> createDate; private BetweenData<Date> createDate;
@QueryCondition(type = QueryCondition.Type.IN, propName = "source") @QueryCondition(type = QueryCondition.Type.IN, propName = "source")
...@@ -28,6 +30,11 @@ public class OrderQueryCondition { ...@@ -28,6 +30,11 @@ public class OrderQueryCondition {
//缺料预警id //缺料预警id
@QueryCondition(blurry = "warningItemId,reel") @QueryCondition(blurry = "warningItemId,reel")
private String warningItemId; private String warningItemId;
@QueryCondition(type = QueryCondition.Type.BETWEEN,propName = "updateDate")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private BetweenData<Date> updateDate;
// //
// @QueryCondition(type=QueryCondition.Type.IN,propName = "status") // @QueryCondition(type=QueryCondition.Type.IN,propName = "status")
// private List<Integer> statusList ; // private List<Integer> statusList ;
......
...@@ -732,14 +732,20 @@ public class StoragePosController { ...@@ -732,14 +732,20 @@ public class StoragePosController {
throw new ValidateException("smfcore.valueCanotNull", "{0}不能为空", new String[]{"ID"}); throw new ValidateException("smfcore.valueCanotNull", "{0}不能为空", new String[]{"ID"});
} }
String line = checkOutDto.getLine();
if (StringUtils.isEmpty(line)){
throw new ValidateException("smfcore.valueCanotNull", "{0}不能为空", new String[]{"线体"});
}
String model = checkOutDto.getModel(); String model = checkOutDto.getModel();
if (StringUtils.isEmpty(model)){ if (StringUtils.isEmpty(model)){
if (!"异常出库".equals(line)){
throw new ValidateException("smfcore.valueCanotNull", "{0}不能为空", new String[]{"机种"}); throw new ValidateException("smfcore.valueCanotNull", "{0}不能为空", new String[]{"机种"});
} }
}
String line = checkOutDto.getLine(); if ("异常出库".equals(line)){
if (StringUtils.isEmpty(line)){ checkOutDto.setForceOut(true);
throw new ValidateException("smfcore.valueCanotNull", "{0}不能为空", new String[]{"线体"});
} }
if (checkOutDto.getSingleOut() == null) { if (checkOutDto.getSingleOut() == null) {
......
...@@ -113,6 +113,7 @@ public class TaskController { ...@@ -113,6 +113,7 @@ public class TaskController {
headerList.add(Lists.newArrayList("料仓名称")); headerList.add(Lists.newArrayList("料仓名称"));
headerList.add(Lists.newArrayList("数量")); headerList.add(Lists.newArrayList("数量"));
headerList.add(Lists.newArrayList("类型")); headerList.add(Lists.newArrayList("类型"));
headerList.add(Lists.newArrayList("MO"));
headerList.add(Lists.newArrayList("来源")); headerList.add(Lists.newArrayList("来源"));
headerList.add(Lists.newArrayList("线体")); headerList.add(Lists.newArrayList("线体"));
headerList.add(Lists.newArrayList("机台名")); headerList.add(Lists.newArrayList("机台名"));
...@@ -139,6 +140,7 @@ public class TaskController { ...@@ -139,6 +140,7 @@ public class TaskController {
result.add(dataLog.getPosName()+" "+dataLog.getStorageName()); result.add(dataLog.getPosName()+" "+dataLog.getStorageName());
result.add(dataLog.getNum()); result.add(dataLog.getNum());
result.add(dataLog.getType() == 1 ? "入库" : "出库"); result.add(dataLog.getType() == 1 ? "入库" : "出库");
result.add(dataLog.getMo());
result.add(dataLog.getSourceName()); result.add(dataLog.getSourceName());
result.add(dataLog.getLine()); result.add(dataLog.getLine());
result.add(dataLog.getMachineName()); result.add(dataLog.getMachineName());
......
...@@ -154,7 +154,7 @@ public class TaskDto implements Serializable { ...@@ -154,7 +154,7 @@ public class TaskDto implements Serializable {
private String subSlot = ""; private String subSlot = "";
private String side = ""; private String side = "";
private String mo = "";
public String getTaskColor() { public String getTaskColor() {
if (ObjectUtil.isNotEmpty(lightColor)) { if (ObjectUtil.isNotEmpty(lightColor)) {
......
...@@ -43,4 +43,7 @@ public class PreWarningItem extends BasePo { ...@@ -43,4 +43,7 @@ public class PreWarningItem extends BasePo {
private Date receiveDate = new Date(); private Date receiveDate = new Date();
private String pickingId; private String pickingId;
//工单号
private String mo;
} }
...@@ -83,7 +83,7 @@ public class InnerBoxRestController { ...@@ -83,7 +83,7 @@ public class InnerBoxRestController {
private LizhenApi lizhenApi; private LizhenApi lizhenApi;
//料架缓存id //料架缓存id
private static Map<String,String> labelOrderItemMap = new ConcurrentHashMap<>(); private static Map<String, String> labelOrderItemMap = new ConcurrentHashMap<>();
//人工发料id //人工发料id
private static List<String> manualOrderItemIdList = new CopyOnWriteArrayList<>(); private static List<String> manualOrderItemIdList = new CopyOnWriteArrayList<>();
...@@ -101,11 +101,11 @@ public class InnerBoxRestController { ...@@ -101,11 +101,11 @@ public class InnerBoxRestController {
String boxSide = request.getParameter("boxSide"); //料箱隔口 String boxSide = request.getParameter("boxSide"); //料箱隔口
String x = request.getParameter("x"); String x = request.getParameter("x");
String y = request.getParameter("y"); String y = request.getParameter("y");
log.info("IA 出库更新任务状态--barcode:{},status:{},loc:{},hSerial:{},outlet:{},boxSide:{},cid:{},outlet:{},x:{},y:{}", code, status, loc, hSerial, outlet, boxSide,cid,outlet,x,y); log.info("IA 出库更新任务状态--barcode:{},status:{},loc:{},hSerial:{},outlet:{},boxSide:{},cid:{},outlet:{},x:{},y:{}", code, status, loc, hSerial, outlet, boxSide, cid, outlet, x, y);
CodeBean codeBean = codeResolve.resolveSingleCode(code); CodeBean codeBean = codeResolve.resolveSingleCode(code);
Barcode barcode = codeBean.getBarcode(); Barcode barcode = codeBean.getBarcode();
if (barcode != null){ if (barcode != null) {
code = barcode.getBarcode(); code = barcode.getBarcode();
} }
...@@ -131,15 +131,15 @@ public class InnerBoxRestController { ...@@ -131,15 +131,15 @@ public class InnerBoxRestController {
//log.info("更新任务状态:{}-->{}", opTask.getStatus(), status); //log.info("更新任务状态:{}-->{}", opTask.getStatus(), status);
//调用此接口的肯定是料盘已出仓位的 //调用此接口的肯定是料盘已出仓位的
if(opTask.isExecuting()){ if (opTask.isExecuting()) {
//正在执行的任务,清理库存 //正在执行的任务,清理库存
outFromPos(opTask); outFromPos(opTask);
} }
opTask.setStatus(status); opTask.setStatus(status);
if (StringUtils.isNotEmpty(x)){ if (StringUtils.isNotEmpty(x)) {
opTask.setX(x); opTask.setX(x);
} }
if (StringUtils.isNotEmpty(y)){ if (StringUtils.isNotEmpty(y)) {
opTask.setY(y); opTask.setY(y);
} }
opTask.setFullCode(barcode.getFullCode()); opTask.setFullCode(barcode.getFullCode());
...@@ -148,102 +148,37 @@ public class InnerBoxRestController { ...@@ -148,102 +148,37 @@ public class InnerBoxRestController {
//清理锁定库位 //清理锁定库位
ReelLockPosUtil.removeReelLockPosInfo(code); ReelLockPosUtil.removeReelLockPosInfo(code);
taskService.updateFinishedTask(opTask); taskService.updateFinishedTask(opTask);
if(opTask.isFinished()){ if (opTask.isFinished()) {
//已完成,从完成缓存中清除 //已完成,从完成缓存中清除
taskService.removeFinishedTask(opTask); taskService.removeFinishedTask(opTask);
//设置绑定库位 //设置绑定库位
StorageExport storageExport = StorageExportUtil.getExport(outlet); StorageExport storageExport = StorageExportUtil.getExport(outlet);
LiteOrder liteOrder = liteOrderManager.get(opTask.getSourceId()); LiteOrder liteOrder = liteOrderManager.get(opTask.getSourceId());
if (liteOrder != null){ if (liteOrder != null) {
storageExport.setLine(liteOrder.getLine()); storageExport.setLine(liteOrder.getLine());
storageExport.setHSerial(liteOrder.getOrderNo()); storageExport.setHSerial(liteOrder.getOrderNo());
int remainTaskCount = 0; int remainTaskCount = 0;
List<DataLog> dataLogList = taskService.getAllTasks(); List<DataLog> dataLogList = taskService.getAllTasks();
for (DataLog dataLog : dataLogList) { for (DataLog dataLog : dataLogList) {
if(StringUtils.isNotBlank(dataLog.getSourceId())){ if (StringUtils.isNotBlank(dataLog.getSourceId())) {
if (outlet.equals(dataLog.getExport()) && !dataLog.getBarcode().equals(opTask.getBarcode())){ if (outlet.equals(dataLog.getExport()) && !dataLog.getBarcode().equals(opTask.getBarcode())) {
if (!dataLog.isFinished() && !dataLog.isCancel()){ if (!dataLog.isFinished() && !dataLog.isCancel()) {
remainTaskCount ++; remainTaskCount++;
} }
} }
} }
} }
storageExport.setRemainTaskCount(remainTaskCount); storageExport.setRemainTaskCount(remainTaskCount);
storageExport.setCacheID(liteOrder.getCacheID()); storageExport.setCacheID(liteOrder.getCacheID());
log.info(opTask.getBarcode()+"任务完成,更新出料口信息:"+ JSON.toJSONString(storageExport)); log.info(opTask.getBarcode() + "任务完成,更新出料口信息:" + JSON.toJSONString(storageExport));
StorageExportUtil.updateExport(outlet,storageExport); StorageExportUtil.updateExport(outlet, storageExport);
} }
} }
return ResultBean.newOkResult(StorageExportUtil.getExport(outlet)); return ResultBean.newOkResult(StorageExportUtil.getExport(outlet));
} }
/*@ApiOperation("IB 获取料箱状态信息")
@RequestMapping("/getBoxStatusInfo")
@AnonymousAccess
public ResultBean getBoxStatusInfo(HttpServletRequest request) {
String rfid = request.getParameter("rfid"); //料箱RFID
String cid = request.getParameter("cid");
//得到当前料箱状态
Map<String, Object> resultMap = new HashMap<>();
try {
rfid = rfid.replaceAll("A", "").replaceAll("B", "");
resultMap = getBoxStatusByBoxNumber(rfid, cid);
} catch (Exception e) {
log.error(rfid + "异常");
e.printStackTrace();
}
return ResultBean.newOkResult(resultMap);
}*/
/*@ApiOperation("IC 获取料架标签打印信息 或者 补打印信息")
@RequestMapping("/rack/getPrintInfo")
@AnonymousAccess
public ResultBean rackPrintLabel(HttpServletRequest request) {
String cid = request.getParameter("cid");
String labelOrderItemId = "";
if (StringUtils.isBlank(cid)) {
String cidKey = "";
for (Map.Entry<String, String> entry : labelOrderItemMap.entrySet()) {
cidKey = entry.getKey();
labelOrderItemId = entry.getValue();
break;
}
if (StringUtils.isNotBlank(cidKey)) {
labelOrderItemMap.remove(cidKey);
}
} else {
if ("0000".equals(cid)) {
if (manualOrderItemIdList != null && !manualOrderItemIdList.isEmpty()) {
labelOrderItemId = manualOrderItemIdList.get(0);
manualOrderItemIdList.remove(0);
}
} else {
labelOrderItemId = labelOrderItemMap.get(cid);
}
}
Map<String, String> resultMap = getPrintLabel(labelOrderItemId);
if (resultMap == null || resultMap.isEmpty()) {
labelOrderItemMap.remove(cid);
return ResultBean.newErrorResult(-1, "", "未找到需要打印的标签信息", null, false);
}
return ResultBean.newOkResult(resultMap);
}*/
/*@ApiOperation("ID 料架标签打印完成通知 或 补打印完成通知")
@RequestMapping("/rack/finishPrint")
@AnonymousAccess
public ResultBean finishPrintLabel(HttpServletRequest request) {
String cid = request.getParameter("cid");
log.info("移除打印标签");
if(StringUtils.isNotBlank(cid)) {
labelOrderItemMap.remove(cid);
}
return ResultBean.newOkResult("");
}*/
@ApiOperation("IE 贴标前获取站位信息") @ApiOperation("IE 贴标前获取站位信息")
@RequestMapping("/getFeederInfo") @RequestMapping("/getFeederInfo")
@AnonymousAccess @AnonymousAccess
...@@ -278,146 +213,6 @@ public class InnerBoxRestController { ...@@ -278,146 +213,6 @@ public class InnerBoxRestController {
return ResultBean.newOkResult(resultMap); return ResultBean.newOkResult(resultMap);
} }
/*@ApiOperation("周转箱取走")
@RequestMapping("/boxTakeAway")
@AnonymousAccess
public ResultBean boxTakeAway(HttpServletRequest request) {
String rfid = request.getParameter("rfid");
rfid = rfid.replaceAll("A", "").replaceAll("B", "");
log.info(rfid + "小车已经拉走");
Pattern pattern = Pattern.compile(QueryHelp.escapeExprSpecialWord(rfid), Pattern.CASE_INSENSITIVE);
List<LiteOrder> liteOrders = liteOrderManager.findByQuery(new Query(Criteria.where("boxNumber").regex(pattern)));
if (liteOrders != null && !liteOrders.isEmpty()) {
for (LiteOrder liteOrder : liteOrders) {
liteOrder.setBoxNumber("");
liteOrderManager.save(liteOrder);
liteOrderCache.addOrderToMap(liteOrder);
}
}
//同时清除物料与料箱的信息
List<Barcode> barcodes = barcodeManager.findByQuery(new Query(Criteria.where("posName").regex(pattern)));
if (barcodes != null && !barcodes.isEmpty()) {
for (Barcode barcode : barcodes) {
barcode.setPosName(null);
barcodeManager.save(barcode);
}
}
return ResultBean.newOkResult("");
}*/
/*@ApiOperation("获取当前执行的工单,是否全部都是料架信息")
@RequestMapping("/getNlOutInfo")
@AnonymousAccess
public ResultBean getNlOutInfo() {
//获取到当前正在执行的工单
Collection<DataLog> queueTasks = taskService.getQueueTasks();
boolean isAllNlOut = false;
DataLog dataLog = null;
Map<String, Object> resultMap = new HashMap<>();
for (DataLog task : queueTasks) {
String orderId = task.getSubSourceId();
if (!task.isCancel() && !task.isFinished() && task.isCheckOutTask() && StringUtils.isNotBlank(orderId)) {
String cid = task.getCid();
Storage storage = dataCache.getStorage(cid);
if (storage.isType(new DeviceType[]{DeviceType.SMD_XLR})) {
isAllNlOut = true;
break;
} else {
dataLog = task;
}
}
}
if (dataLog == null) {
return ResultBean.newErrorResult(-1, "", "没有要出的料架任务");
}
if (!isAllNlOut && dataLog != null) {
String orderId = dataLog.getSourceId();
LiteOrder liteOrder = liteOrderManager.get(orderId);
resultMap.put("line", liteOrder.getLine());
}
//如果没有产线,则返回错误
if (resultMap.get("line") == null) {
return ResultBean.newErrorResult(-1, "", "料仓与料架都有出库任务");
}
return ResultBean.newOkResult(resultMap);
}*/
/*@ApiOperation("根据料仓编号获取料仓两个出料口料箱信息")
@RequestMapping("/getOutStateInfo")
@AnonymousAccess
public ResultBean getOutStateInfo(HttpServletRequest request) {
String cid = request.getParameter("cid");
if (StringUtils.isBlank(cid)) {
return ResultBean.newErrorResult(-1, "smfcore.valueCanotNull", "{0}不能为空", new String[]{"cid"});
}
List<OutLotInfo> outLotInfos = OutLotInfoCache.getOutLotInfoByCid(cid);
log.info(cid + "--出料口信息为:" + JsonUtil.toJsonStr(outLotInfos));
return ResultBean.newOkResult(outLotInfos);
}*/
//料箱送上AGV后,调用此接口,服务器将料口状态信息另存, 把当前料口状态置空
/*@ApiOperation("料箱送上AGV")
@RequestMapping("/boxToAgv")
@AnonymousAccess
public ResultBean boxToAgv(HttpServletRequest request) {
String outlet = request.getParameter("outlet");
String rfid = request.getParameter("rfid");
String AGVName = request.getParameter("AGVName");
log.info("料箱送上AGV---出口位置为:" + outlet + ",rfid为:" + rfid + ",AGV为:" + AGVName);
OutLotInfoCache.outLotInfoMapToOutInfos(outlet, rfid);
return ResultBean.newOkResult("");
}*/
/*@ApiOperation("获取AGV目的地")
@RequestMapping("/getAgvLineInfo")
@AnonymousAccess
public ResultBean getAgvLineInfo(HttpServletRequest request) {
String rfid = request.getParameter("rfid");
OutLotInfo outLotInfo = OutLotInfoCache.getOutLotInfoByRfid(rfid);
log.info("获取AGV目的地---rfid为:" + rfid + ",outLotInfo为:" + JsonUtil.toJsonStr(outLotInfo));
int rackTaskCount = 0;
List<DataLog> allTasks = taskService.getAllTasks();
for (DataLog dataLog : allTasks) {
Storage storage = dataCache.getStorage(dataLog.getCid());
if (storage != null && storage.isNLShelf()) {
if (StringUtils.isNotBlank(dataLog.getSourceName())) {
if (dataLog.getSourceName().equals(outLotInfo.getHSerial())) {
rackTaskCount++;
}
}
}
}
outLotInfo.setRackTaskCount(rackTaskCount);
log.info(rfid + "--AGV目的信息为:" + JsonUtil.toJsonStr(outLotInfo));
return ResultBean.newOkResult(outLotInfo);
}*/
/*@ApiOperation("博众agv获取小车目的地")
@RequestMapping("/getBoZhongAgvLineInfo")
@AnonymousAccess
public ResultBean getBoZhongAgvLineInfo(HttpServletRequest request) {
String rfid = request.getParameter("rfid");
OutLotInfo outLotInfo = OutLotInfoCache.getOutLotInfoByRfidMap(rfid);
log.info("获取博众AGV目的地---rfid为:" + rfid + ",outLotInfo为:" + JsonUtil.toJsonStr(outLotInfo));
return ResultBean.newOkResult(outLotInfo.getLine());
}*/
/* @ApiOperation("清理料箱信息")
@RequestMapping("/clearRfidInfo")
@AnonymousAccess
public ResultBean clearRfidInfo(HttpServletRequest request) {
String rfid = request.getParameter("rfid");
String source = request.getParameter("source");
log.info("清理料箱信息---rfid为:" + rfid + ",source为:" + source);
OutLotInfoCache.clearRfidInfo(rfid);
return ResultBean.newOkResult("");
}*/
@ApiOperation("补打印标签信息") @ApiOperation("补打印标签信息")
@PostMapping("/fillPrint") @PostMapping("/fillPrint")
...@@ -438,10 +233,10 @@ public class InnerBoxRestController { ...@@ -438,10 +233,10 @@ public class InnerBoxRestController {
Sort sort = Sort.by(Sort.Direction.DESC, "createDate");//按创建时间排序 Sort sort = Sort.by(Sort.Direction.DESC, "createDate");//按创建时间排序
List<DataLog> dataLogs = dataLogManager.findByQuery(query.addCriteria(criteria).with(sort).limit(1)); List<DataLog> dataLogs = dataLogManager.findByQuery(query.addCriteria(criteria).with(sort).limit(1));
if (dataLogs == null || dataLogs.isEmpty()) { if (dataLogs == null || dataLogs.isEmpty()) {
return ResultBean.newErrorResult(-1, "smfcore.valueNotFind", "未找到{0}{1}", new String[]{reelId,"补打印信息,请核实是否已经有出库任务"}); return ResultBean.newErrorResult(-1, "smfcore.valueNotFind", "未找到{0}{1}", new String[]{reelId, "补打印信息,请核实是否已经有出库任务"});
} }
for (DataLog dataLog : dataLogs) { for (DataLog dataLog : dataLogs) {
setLabelOrderItemId(dataLog.getCid(),dataLog.getSubSourceId()); setLabelOrderItemId(dataLog.getCid(), dataLog.getSubSourceId());
break; break;
} }
return ResultBean.newOkResult(""); return ResultBean.newOkResult("");
...@@ -451,7 +246,7 @@ public class InnerBoxRestController { ...@@ -451,7 +246,7 @@ public class InnerBoxRestController {
@ApiOperation("根据条码获取目的地信息") @ApiOperation("根据条码获取目的地信息")
@RequestMapping("/getLine") @RequestMapping("/getLine")
@AnonymousAccess @AnonymousAccess
public Map<String, Object> getLineByBarcode(@RequestBody Map<String,String> paramMap) { public Map<String, Object> getLineByBarcode(@RequestBody Map<String, String> paramMap) {
Map<String, Object> resultMap = new HashMap<>(); Map<String, Object> resultMap = new HashMap<>();
String barcode = paramMap.get("barcode"); String barcode = paramMap.get("barcode");
log.info(barcode + "获取目的地信息"); log.info(barcode + "获取目的地信息");
...@@ -460,7 +255,7 @@ public class InnerBoxRestController { ...@@ -460,7 +255,7 @@ public class InnerBoxRestController {
List<DataLog> allTasks = taskService.getAllTasks(); List<DataLog> allTasks = taskService.getAllTasks();
for (DataLog dataLog : allTasks) { for (DataLog dataLog : allTasks) {
if (dataLog.isCheckOutTask() && dataLog.getBarcode().equals(codeBean.getBarcode().getBarcode())) { if (dataLog.isCheckOutTask() && dataLog.getBarcode().equals(codeBean.getBarcode().getBarcode())) {
resultMap.put("cid",dataLog.getCid()); resultMap.put("cid", dataLog.getCid());
resultMap.put("export", ""); resultMap.put("export", "");
//如果sourceName和subSourceId都不为空时,则返回目标位置 //如果sourceName和subSourceId都不为空时,则返回目标位置
String sourceName = dataLog.getSourceName(); String sourceName = dataLog.getSourceName();
...@@ -480,7 +275,7 @@ public class InnerBoxRestController { ...@@ -480,7 +275,7 @@ public class InnerBoxRestController {
} }
} }
} else { } else {
String export = StorageExportUtil.getExportByOrderNo("",false,false); String export = StorageExportUtil.getExportByOrderNo("", false, false);
log.info(dataLog.getBarcode() + "手动出库获取出料口信息为:" + export); log.info(dataLog.getBarcode() + "手动出库获取出料口信息为:" + export);
resultMap.put("export", export); resultMap.put("export", export);
} }
...@@ -530,7 +325,7 @@ public class InnerBoxRestController { ...@@ -530,7 +325,7 @@ public class InnerBoxRestController {
} }
storageExport.setRemainTaskCount(remainTaskCount); storageExport.setRemainTaskCount(remainTaskCount);
LiteOrder orderNo = liteOrderManager.findByOrderNo(storageExport.getHSerial()); LiteOrder orderNo = liteOrderManager.findByOrderNo(storageExport.getHSerial());
if (orderNo != null){ if (orderNo != null) {
storageExport.setCacheID(orderNo.getCacheID()); storageExport.setCacheID(orderNo.getCacheID());
} }
StorageExportUtil.updateExport(export, storageExport); StorageExportUtil.updateExport(export, storageExport);
...@@ -545,7 +340,7 @@ public class InnerBoxRestController { ...@@ -545,7 +340,7 @@ public class InnerBoxRestController {
public ResultBean getAgvLine(String export) { public ResultBean getAgvLine(String export) {
StorageExport storageExport = new StorageExport(); StorageExport storageExport = new StorageExport();
LiteOrder liteOrder = liteOrderManager.findByOrderNo(export); LiteOrder liteOrder = liteOrderManager.findByOrderNo(export);
if (liteOrder != null){ if (liteOrder != null) {
storageExport.setLine(liteOrder.getLine()); storageExport.setLine(liteOrder.getLine());
storageExport.setHSerial(export); storageExport.setHSerial(export);
storageExport.setCacheID(liteOrder.getCacheID()); storageExport.setCacheID(liteOrder.getCacheID());
...@@ -558,16 +353,16 @@ public class InnerBoxRestController { ...@@ -558,16 +353,16 @@ public class InnerBoxRestController {
@ApiOperation("料箱离开工位") @ApiOperation("料箱离开工位")
@RequestMapping("/boxOutStation") @RequestMapping("/boxOutStation")
@AnonymousAccess @AnonymousAccess
public ResultBean boxOutStation(String export,String material) { public ResultBean boxOutStation(String export, String material,String orderNo) {
StorageExport storageExport = StorageExportUtil.getExport(export); StorageExport storageExport = StorageExportUtil.getExport(export);
String hSerial = storageExport.getHSerial();
StorageExport outStationExport = new StorageExport(); //如果工单号不为空,返回出料口的工单号是否相同,如果不同,直接返回,不清空
outStationExport.setDisable(storageExport.isDisable()); /*if (StringUtils.isNotEmpty(orderNo) && StringUtils.isNotEmpty(storageExport.getHSerial())){
outStationExport.setLine(storageExport.getLine()); if (!orderNo.equals(storageExport.getHSerial())){
outStationExport.setHSerial(hSerial); return ResultBean.newErrorResult(-1,"","当前传入的工单号:"+orderNo+"与工位上正在执行的工单号:"+storageExport.getHSerial()+"不一致");
//outStationExport.setRemainTaskCount(storageExport.getRemainTaskCount()); }
outStationExport.setMaterial(material); }*/
//1.获取当前出料口的剩余数量 //1.获取当前出料口的剩余数量
int remainTaskCount = 0; int remainTaskCount = 0;
...@@ -579,6 +374,20 @@ public class InnerBoxRestController { ...@@ -579,6 +374,20 @@ public class InnerBoxRestController {
} }
} }
} }
if (remainTaskCount > 0){
if (StringUtils.isNotEmpty(orderNo)) {
return ResultBean.newErrorResult(-1, "", export + "当前任务数大于0,不清空");
}
}
String hSerial = storageExport.getHSerial();
StorageExport outStationExport = new StorageExport();
outStationExport.setDisable(storageExport.isDisable());
outStationExport.setLine(storageExport.getLine());
outStationExport.setHSerial(hSerial);
//outStationExport.setRemainTaskCount(storageExport.getRemainTaskCount());
outStationExport.setMaterial(material);
//2.如果当前出料口的数量不等于0 //2.如果当前出料口的数量不等于0
if (remainTaskCount > 0 && !export.equals(StorageExportUtil.getMaizhengExport())) { if (remainTaskCount > 0 && !export.equals(StorageExportUtil.getMaizhengExport())) {
...@@ -589,14 +398,15 @@ public class InnerBoxRestController { ...@@ -589,14 +398,15 @@ public class InnerBoxRestController {
} }
if (ordrRemainingQty != -1) { if (ordrRemainingQty != -1) {
if (remainTaskCount <= ordrRemainingQty) { if (remainTaskCount <= ordrRemainingQty) {
log.info(export+"剩余数量:"+remainTaskCount+"小于:"+ordrRemainingQty+",需要生成新的工单"); log.info(export + "剩余数量:" + remainTaskCount + "小于:" + ordrRemainingQty + ",需要生成新的工单");
Collection<LiteOrder> liteOrders = liteOrderCache.getAllLiteOrder(); Collection<LiteOrder> liteOrders = liteOrderCache.getAllLiteOrder();
liteOrders = liteOrders.stream().sorted(Comparator.comparing(LiteOrder :: getCreateDate)).collect(Collectors.toList());
for (LiteOrder liteOrder : liteOrders) { for (LiteOrder liteOrder : liteOrders) {
if (!liteOrder.isMaiZheng()) { if (!liteOrder.isMaiZheng()) {
if (liteOrder.isNew() || liteOrder.isTaskFinished()) { if (liteOrder.isNew() || liteOrder.isTaskFinished()) {
if (storageExport.getLine().equals(liteOrder.getLine())) { if (storageExport.getLine().equals(liteOrder.getLine())) {
String result = liteOrderCache.checkOutLiteOrder(liteOrder.getOrderNo(), false, export); String result = liteOrderCache.checkOutLiteOrder(liteOrder.getOrderNo(), false, export);
log.info(export+"新的工单为:"+liteOrder.getOrderNo()+"结果为:"+result); log.info(export + "新的工单为:" + liteOrder.getOrderNo() + "结果为:" + result);
if (StringUtils.isBlank(result)) { if (StringUtils.isBlank(result)) {
break; break;
} }
...@@ -644,221 +454,75 @@ public class InnerBoxRestController { ...@@ -644,221 +454,75 @@ public class InnerBoxRestController {
} }
/*@ApiOperation("手动发料") @ApiOperation("根据工单号,获取未完成/未取消的任务")
@PostMapping("/manualFeeding")
@AnonymousAccess @AnonymousAccess
public ResultBean manualFeeding(@RequestBody Map<String, String> paramMap) { @RequestMapping("/getRemainNumByOrderNo")
public ResultBean getRemainNumByOrderNo(String orderNo) {
*//*if (StringUtils.isNotBlank(getManualOrderItemId())) { Map<String, Object> resultMap = new HashMap<>();
return ResultBean.newErrorResult(-1,"","上一个物料标签请打印完成后再进行手动发料操作"); int remainNum = 0;
}*//* String export = "";
String line = "";
String barcodestr = paramMap.get("barcodestr");
String orderItemId = paramMap.get("orderItemId");
log.info("人工发料--ItemId:" + orderItemId + ",barcodestr:" + barcodestr);
if (StringUtils.isBlank(orderItemId)) {
return ResultBean.newErrorResult(-1, "smfcore.valueCanotNull", "{0}不能为空", new String[]{"itemId"});
}
CodeBean codeBean = codeResolve.resolveSingleCode(barcodestr);
Barcode barcode = codeBean.getBarcode();
if (barcode == null) {
return ResultBean.newErrorResult(-1, "smfcore.error.barcode.invalid", "{0}不是有效的条码", new String[]{barcodestr});
}
//不在仓中,不允许出库
StoragePos storagePos = storagePosManager.getByBarcode(barcode.getBarcode());
if (storagePos == null){
return ResultBean.newErrorResult(-1, "", barcode.getBarcode()+"不在储位中,不允许进行出库");
}
//判断当前是否已经有出库任务
List<DataLog> allTasks = taskService.getAllTasks(); List<DataLog> allTasks = taskService.getAllTasks();
for (DataLog dataLog : allTasks) { for (DataLog dataLog : allTasks) {
if (orderItemId.equals(dataLog.getSubSourceId())) { if (dataLog.isCheckOutTask()){
if (dataLog.isCheckOutTask() && !dataLog.isCancel() && !dataLog.isFinished()) { if (!dataLog.isFinished() && !dataLog.isCancel()){
return ResultBean.newErrorResult(-1, "smfcore.valueAlreadyExist", "{0}[{1}]已存在", new String[]{"出库任务", orderItemId}); if (orderNo.equals(dataLog.getSourceName())){
} remainNum ++;
} if (StringUtils.isEmpty(export)){
export = dataLog.getExport();
} }
if (StringUtils.isEmpty(line)){
LiteOrderItem orderItem = liteOrderItemManager.get(orderItemId); line = dataLog.getLine();
if (orderItem == null) {
return ResultBean.newErrorResult(-1, "smfcore.valueNotExist", "{0}[{1}]不存在", new String[]{"工单信息", orderItemId});
} }
//判断是否已经补过料
if (orderItem.getOutNum() > 0) {
return ResultBean.newErrorResult(-1, "smfcore.task.hasEnd", "任务已完成");
} }
//判断料号是否一致
String partNumber = codeBean.getBarcode().getPartNumber();
if (!orderItem.getPn().equals(partNumber)) {
return ResultBean.newErrorResult(-1, "", "请核实手动补料的料号:" + partNumber + "与工单需求料号:" + orderItem.getPn() + "是否一致");
} }
//判断供应商是否相同
String provider = codeBean.getBarcode().getProvider();
if (StringUtils.isNotBlank(orderItem.getBrand())) {
if (!orderItem.getBrand().equals(provider)) {
return ResultBean.newErrorResult(-1, "", "请核实手动补料的供应商:" + provider + "与工单需求供应商:" + orderItem.getBrand() + "是否一致");
} }
} }
resultMap.put("remainNum",remainNum);
LiteOrder liteOrder = liteOrderManager.get(orderItem.getOrderId()); resultMap.put("export",export);
if (liteOrder == null) { resultMap.put("orderNo",orderNo);
return ResultBean.newErrorResult(-1, "smfcore.valueNotExist", "{0}[{1}]不存在", new String[]{"工单信息", orderItemId}); resultMap.put("line",line);
return ResultBean.newOkResult(resultMap);
} }
//生成一条出库任务
DataLog dataLog = new DataLog();
dataLog.setStatus(OP_STATUS.FINISHED.name());
dataLog.setBarcode(barcode.getBarcode());
dataLog.setSourceName(liteOrder.getOrderNo());
dataLog.setSourceId(liteOrder.getId());
dataLog.setSubSourceId(orderItemId);
dataLog.setPartNumber(barcode.getPartNumber());
dataLog.setProviderNumber(barcode.getProviderNumber());
dataLog.setNum(barcode.getAmount());
dataLog.setType(OP.CHECKOUT);
dataLog.setExtendType(ExtendType.MANUAL_FEEDING); //手动喂料
//dataLog.setPosName("人工");
//判断虚拟仓有没有,如果有,则删除库位 @ApiOperation("出料口执行工单")
if (storagePos != null) { @RequestMapping("/executeOrder")
dataLog.setPosName(storagePos.getPosName());
Storage storage = dataCache.getStorageById(storagePos.getStorageId());
dataLog.setCid(storage.getCid());
//if (storage.isVirtual()) {
dataLog.setCid(storage.getCid());
storagePos.setBarcode(null);
//dataCache.updateInventory(storagePos, barcode);
//进行库位更改
storagePos.setBarcode(null);
storagePos.setUsed(false);
storagePosManager.save(storagePos);
barcodeManager.delete(barcode);
dataCache.updateInventory(storagePos, barcode);
//}
}
taskService.updateFinishedTask(dataLog);
taskService.removeFinishedTask(dataLog);
setManualOrderItemIdList(orderItemId);
return ResultBean.newOkResult("");
}
@ApiOperation("手动补料打印信息")
@RequestMapping("/manual/getPrintInfo")
@AnonymousAccess @AnonymousAccess
public ResultBean manualPrintLabel(HttpServletRequest request) { public synchronized ResultBean executeOrder(String export) {
String manualOrderItemId = ""; log.info("出料口:"+export+"有空料箱,开始执行工单出库");
if (manualOrderItemIdList != null && !manualOrderItemIdList.isEmpty()) { Collection<LiteOrder> liteOrders = liteOrderCache.getAllLiteOrder();
manualOrderItemId = manualOrderItemIdList.get(0); liteOrders = liteOrders.stream().sorted(Comparator.comparing(LiteOrder :: getCreateDate)).collect(Collectors.toList());
manualOrderItemIdList.remove(0);
} int count = 0;
Map<String, String> resultMap = new HashMap<>(); for (LiteOrder liteOrder : liteOrders) {
if (StringUtils.isNotBlank(manualOrderItemId)) { if (liteOrder.isOutTails()){
resultMap = getPrintLabel(manualOrderItemId); if (export.equals(liteOrder.getExport())){
count ++;
} }
if (resultMap.isEmpty()) {
return ResultBean.newErrorResult(-1, "", "未找到需要打印的标签信息", null, false);
} }
return ResultBean.newOkResult(resultMap);
} }
if (count >= 2){
@ApiOperation("手动发料打印完成通知") return ResultBean.newErrorResult(-1,"",export+"有正在执行的工单,超过2个,暂不出库");
@RequestMapping("/manual/finishPrint")
@AnonymousAccess
public ResultBean finishManualPrintLabel(HttpServletRequest request) {
log.info("移除打印标签");
//setManualOrderItemId(null);
return ResultBean.newOkResult("");
} }
@ApiOperation("扫描物料信息直接喂料") for (LiteOrder liteOrder : liteOrders) {
@RequestMapping("/manualFeedingByBarcode") if (!liteOrder.isMaiZheng()) {
@AnonymousAccess if (liteOrder.isNew() || liteOrder.isTaskFinished()) {
public ResultBean manualFeedingByBarcode(@RequestBody Map<String, String> paramMap) { String result = liteOrderCache.checkOutLiteOrder(liteOrder.getOrderNo(), false, export);
String orderNo = paramMap.get("orderNo"); log.info("出料口:"+export+"有空料箱," + "新的工单为:" + liteOrder.getOrderNo() + "结果为:" + result);
String barcodeStr = paramMap.get("barcode"); if (StringUtils.isBlank(result)) {
//解析条码
CodeBean codeBean = codeResolve.resolveSingleCode(barcodeStr);
Barcode barcode = codeBean.getBarcode();
if (barcode == null) {
return ResultBean.newErrorResult(-1, "smfcore.error.barcode.invalid", "{0}不是有效的条码", new String[]{barcodeStr});
}
//不在仓中,不允许出库
StoragePos storagePos = storagePosManager.getByBarcode(barcode.getBarcode());
if (storagePos == null){
return ResultBean.newErrorResult(-1, "", barcode.getBarcode()+"不在储位中,不允许进行出库");
}
LiteOrder order = liteOrderCache.getOrderSortItems(orderNo);
if (order == null) {
return ResultBean.newErrorResult(-1, "smfcore.order.out.notFound", "工单未找到");
}
boolean hasItem = false;
for (LiteOrderItem orderItem : order.getOrderItems()) {
if (barcode.getPartNumber().equals(orderItem.getPn())) {
//判断供应商是否相同
if (StringUtils.isNotBlank(orderItem.getBrand())) {
if (!barcode.getProvider().equals(orderItem.getBrand())) {
continue;
}
}
if (orderItem.getOutNum() > 0){
continue;
}
//判断有没有已经生成任务
int count = dataLogManager.countByQuery(new Query(Criteria.where("subSourceId").is(orderItem.getId())));
if (count > 0){
continue;
}
hasItem = true;
DataLog dataLog = new DataLog();
dataLog.setStatus(OP_STATUS.FINISHED.name());
dataLog.setBarcode(barcode.getBarcode());
dataLog.setSourceName(order.getOrderNo());
dataLog.setSourceId(order.getId());
dataLog.setSubSourceId(orderItem.getId());
dataLog.setPartNumber(barcode.getPartNumber());
dataLog.setProviderNumber(barcode.getProviderNumber());
dataLog.setNum(barcode.getAmount());
dataLog.setType(OP.CHECKOUT);
dataLog.setExtendType(ExtendType.MANUAL_FEEDING); //手动喂料
//dataLog.setPosName("人工");
//判断虚拟仓有没有,如果有,则删除库位
//StoragePos storagePos = storagePosManager.getByBarcode(barcode.getBarcode());
if (storagePos != null) {
dataLog.setPosName(storagePos.getPosName());
Storage storage = dataCache.getStorageById(storagePos.getStorageId());
dataLog.setCid(storage.getCid());
//if (storage.isVirtual()) {
dataLog.setCid(storage.getCid());
storagePos.setBarcode(null);
//dataCache.updateInventory(storagePos, barcode);
//进行库位更改
storagePos.setUsed(false);
storagePosManager.save(storagePos);
barcodeManager.delete(barcode);
dataCache.updateInventory(storagePos, barcode);
//}
}
taskService.updateFinishedTask(dataLog);
taskService.removeFinishedTask(dataLog);
setManualOrderItemIdList(orderItem.getId());
break; break;
} }
} }
if (!hasItem) { }
return ResultBean.newErrorResult(-1, "smfcore.order.supplementOutFail", "未找到可以出库的补料");
} }
return ResultBean.newOkResult(""); return ResultBean.newOkResult("");
}*/ }
public void setLabelOrderItemId(String cid,String orderItemId) { public void setLabelOrderItemId(String cid, String orderItemId) {
labelOrderItemMap.put(cid,orderItemId); labelOrderItemMap.put(cid, orderItemId);
} }
/** /**
...@@ -894,8 +558,8 @@ public class InnerBoxRestController { ...@@ -894,8 +558,8 @@ public class InnerBoxRestController {
//调用tower发料 //调用tower发料
String resultStr = lizhenApi.towerIssue(opTask); String resultStr = lizhenApi.towerIssue(opTask);
if (StringUtils.isEmpty(resultStr)){ if (StringUtils.isEmpty(resultStr)) {
if (barcode != null){ if (barcode != null) {
//barcode.setAskPutIn(false); //barcode.setAskPutIn(false);
barcodeManager.save(barcode); barcodeManager.save(barcode);
} }
...@@ -906,136 +570,4 @@ public class InnerBoxRestController { ...@@ -906,136 +570,4 @@ public class InnerBoxRestController {
//更新缓存中的库存信息 //更新缓存中的库存信息
dataCache.updateInventory(storagePos, barcode); dataCache.updateInventory(storagePos, barcode);
} }
/*private OutLotInfo getOutLotInfoByRfid(String rfid, String cid) {
if (rfid.endsWith("A") || rfid.endsWith("B")) {
rfid = rfid.substring(0, rfid.length() - 1);
}
OutLotInfo outLotInfo = null;
List<OutLotInfo> outLotInfos = OutLotInfoCache.getOutLotInfoByCid(cid);
for (OutLotInfo lotInfo : outLotInfos) {
if (lotInfo.getRfid().contains(rfid)) {
outLotInfo = lotInfo;
break;
}
}
int remainTaskCount = 0;
int rackTaskCount = 0;
if (outLotInfo != null) {
String hSerial = outLotInfo.getHSerial();
List<DataLog> allTasks = taskService.getAllTasks();
for (DataLog dataLog : allTasks) {
Storage storage = dataCache.getStorage(dataLog.getCid());
if (!dataLog.isFinished() && !dataLog.isCancel() && hSerial.equals(dataLog.getSourceName()) && cid.equals(dataLog.getCid()) && !storage.isNLShelf()) {
remainTaskCount++;
} else if (storage != null && storage.isNLShelf()) {
rackTaskCount++;
}
}
outLotInfo.setRemainTaskCount(remainTaskCount);
outLotInfo.setRackTaskCount(rackTaskCount);
}
return outLotInfo;
}*/
private Map<String, Object> getBoxStatusByBoxNumber(String boxNumber, String cid) {
/*if (boxNumber.indexOf("-") != -1) {
boxNumber = boxNumber.substring(0, boxNumber.indexOf("-"));
}*/
//boxNumber = boxNumber.replaceAll("A", "").replaceAll("B", "");
Map<String, Object> resultMap = new HashMap<>();
int remainTaskCount = 0; //所属需求单剩余当前料仓未完成任务数
int rackTaskCount = 0; //所属需求单剩余料架任务数
//当前料箱的隔口数量
resultMap.put("inCount", 0);
resultMap.put("outCount", 0);
Pattern pattern = Pattern.compile(QueryHelp.escapeExprSpecialWord(boxNumber), Pattern.CASE_INSENSITIVE);
List<Barcode> barcodes = barcodeManager.findByQuery(new Query(Criteria.where("posName").regex(pattern)));
if (barcodes != null && !barcodes.isEmpty()) {
Map<String, Long> posCountMap = barcodes.stream().collect(Collectors.groupingBy(Barcode::getPosName, Collectors.counting()));
for (Map.Entry<String, Long> posCount : posCountMap.entrySet()) {
if (posCount.getKey().contains("A")) {
resultMap.put("inCount", posCount.getValue());
} else {
resultMap.put("outCount", posCount.getValue());
}
}
resultMap.putAll(posCountMap);
}
//获取当前工单数据
LiteOrder liteOrder = null;
Criteria c = Criteria.where("boxNumber").is(boxNumber);
Query query = new Query(c);
List<LiteOrder> liteOrders = liteOrderManager.findByQuery(query);
if (liteOrders != null && !liteOrders.isEmpty()) {
liteOrder = liteOrders.get(0);
}
resultMap.put("hSerial", "");
resultMap.put("line", "");
if (liteOrder != null) {
String line = liteOrder.getLine();
String orderNo = liteOrder.getOrderNo();
resultMap.put("hSerial", orderNo);
resultMap.put("line", line);
List<LiteOrderItem> orderItems = liteOrderItemManager.findOrderItems(liteOrder.getId());
if (orderItems != null && !orderItems.isEmpty()) {
for (LiteOrderItem orderItem : orderItems) {
Collection<DataLog> dataLogs = taskService.getAllTasks();
for (DataLog dataLog : dataLogs) {
if (dataLog.isFinished() || dataLog.isCancel()) {
continue;
}
if (orderItem.getId().equals(dataLog.getSubSourceId())) {
if (dataLog.getCid().equals(cid)) {
remainTaskCount++;
} else {
String storageId = dataLog.getStorageId();
Storage storage = dataCache.getStorageById(storageId);
if (storage.isNLShelf()) {
rackTaskCount++;
}
}
}
}
}
}
}
resultMap.put("remainTaskCount", remainTaskCount);
resultMap.put("rackTaskCount", rackTaskCount);
return resultMap;
}
/*public static void setManualOrderItemIdList(String orderItemId) {
manualOrderItemIdList.add(orderItemId);
}
public Map<String,String> getPrintLabel(String orderItemId){
if (StringUtils.isBlank(orderItemId)){
return null;
}
Map<String, String> resultMap = new HashMap<>();
LiteOrderItem liteOrderItem = liteOrderItemManager.get(orderItemId);
if (liteOrderItem != null) {
String orderId = liteOrderItem.getOrderId();
LiteOrder liteOrder = liteOrderManager.get(orderId);
if (liteOrder != null) {
//resultMap.put("barcode", dataLog.getBarcode());
resultMap.put("pn", liteOrderItem.getPn());
resultMap.put("station", liteOrderItem.getTableNo());
resultMap.put("side", liteOrderItem.getSide());
resultMap.put("hSerial", liteOrder.getOrderNo());
resultMap.put("line", liteOrder.getLine());
resultMap.put("slot", liteOrderItem.getSlot());
resultMap.put("subSlot", liteOrderItem.getSubSlot());
}
}
return resultMap;
}
public String getLabelOrderItemId() {
if (!labelOrderItemMap.values().isEmpty()) {
return "false";
}
return "";
}*/
} }
...@@ -89,7 +89,7 @@ public class PreWarningItemCache { ...@@ -89,7 +89,7 @@ public class PreWarningItemCache {
int minute = dataCache.getLineConfigMinute(line); int minute = dataCache.getLineConfigMinute(line);
if (minute == 0) { if (minute == 0) {
minute = 20; minute = 1;
} }
PreWarningItem firstItem = itemList.get(0); PreWarningItem firstItem = itemList.get(0);
...@@ -185,6 +185,7 @@ public class PreWarningItemCache { ...@@ -185,6 +185,7 @@ public class PreWarningItemCache {
orderItem.setReceiveDate(item.getReceiveDate()); orderItem.setReceiveDate(item.getReceiveDate());
orderItem.setPickingId(item.getPickingId()); orderItem.setPickingId(item.getPickingId());
orderItem.setItemNo(item.getItemNo()); orderItem.setItemNo(item.getItemNo());
orderItem.setMo(item.getMo());
orderItems.add(orderItem); orderItems.add(orderItem);
} }
} }
......
...@@ -27,6 +27,7 @@ public class LineController { ...@@ -27,6 +27,7 @@ public class LineController {
List<String> lineList = Arrays.asList(split); List<String> lineList = Arrays.asList(split);
lineList = lineList.stream().distinct().collect(Collectors.toList()); lineList = lineList.stream().distinct().collect(Collectors.toList());
Collections.sort(lineList); Collections.sort(lineList);
lineList.add(0,"异常出库");
return ResultBean.newOkResult(lineList); return ResultBean.newOkResult(lineList);
} }
......
...@@ -42,6 +42,13 @@ import org.springframework.web.bind.annotation.RequestMapping; ...@@ -42,6 +42,13 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import javax.annotation.PostConstruct; import javax.annotation.PostConstruct;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.*; import java.util.*;
import java.util.concurrent.Executors; import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledExecutorService;
...@@ -205,6 +212,8 @@ public class LizhenController { ...@@ -205,6 +212,8 @@ public class LizhenController {
item.setLine(data.get("LINE")); item.setLine(data.get("LINE"));
item.setItemId(data.get("ID")); item.setItemId(data.get("ID"));
item.setPickingId(data.get("PICKING_ID")); item.setPickingId(data.get("PICKING_ID"));
String mo = data.get("MO");
item.setMo(mo);
try { try {
item.setItemNo(Integer.valueOf(data.get("ITEM_NO"))); item.setItemNo(Integer.valueOf(data.get("ITEM_NO")));
item.setPriority(Integer.valueOf(data.get("PRIORITY"))); item.setPriority(Integer.valueOf(data.get("PRIORITY")));
...@@ -250,6 +259,7 @@ public class LizhenController { ...@@ -250,6 +259,7 @@ public class LizhenController {
item.setLine(data.get("LINE")); item.setLine(data.get("LINE"));
item.setItemId(data.get("ID")); item.setItemId(data.get("ID"));
item.setPickingId(data.get("PICKING_ID")); item.setPickingId(data.get("PICKING_ID"));
item.setMo(data.get("WORKORDERNO"));
try { try {
item.setItemNo(Integer.valueOf(data.get("ITEM_NO"))); item.setItemNo(Integer.valueOf(data.get("ITEM_NO")));
item.setPriority(Integer.valueOf(data.get("PRIORITY"))); item.setPriority(Integer.valueOf(data.get("PRIORITY")));
...@@ -499,4 +509,24 @@ public class LizhenController { ...@@ -499,4 +509,24 @@ public class LizhenController {
} }
return url; return url;
} }
public static void main(String[] args) {
// 请将 "yourfile.txt" 替换为你的实际文件路径
String filePath = "D:\\Desktop\\2024-10-26.mes.txt";
// 方法2:使用BufferedReader和InputStreamReader读取文件
try (BufferedReader br = new BufferedReader(new InputStreamReader(Files.newInputStream(Paths.get(filePath)), "GBK"))) {
String line;
while ((line = br.readLine()) != null) {
if (/*line.startsWith("2024-10-26 09") ||*/ line.startsWith("2024-10-26 10")/* || line.startsWith("2024-10-26 11")*/) {
if (line.contains("\"SIDE\":\"B\"")){
System.out.println(line);
}
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
} }
3f: 3f:
line: C03-3FSMT-13,C02-3FSMT-12,C02-3FSMT-18,C02-3FSMT-19,C03-1FSMT-12,C02-3FSMT-11,C03-1FSMT-11,C02-3FSMT-17,C02-3FSMT-14,C03-1FSMT-12,C02-3FSMT-13,C02-3FSMT-16,C02-3FSMT-15,C02-3FSMT-19
\ No newline at end of file \ No newline at end of file
line: C02-3FSMT-18,C02-3FSMT-19,C02-3FSMT-17,C02-3FSMT-14,C02-3FSMT-13,C02-3FSMT-16,C02-3FSMT-15,C02-3FSMT-19
\ No newline at end of file \ No newline at end of file
3f: 3f:
line: C03-1FSMT-01,C02-3FSMT-02,C03-3FSMT-03,C02-3FSMT-09,C02-3FSMT-01,C03-1FSMT-02,C02-3FSMT-08,C02-3FSMT-06,C02-3FSMT-07,C02-3FSMT-04,C02-3FSMT-05,C02-3FSMT-03,C03-1FSMT-02
\ No newline at end of file \ No newline at end of file
line: C02-3FSMT-09,C02-3FSMT-08,C02-3FSMT-06,C02-3FSMT-07,C02-3FSMT-04,C02-3FSMT-05,C02-3FSMT-03
\ No newline at end of file \ No newline at end of file
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!