Commit 910d50a1 zshaohui

1.入库优化 2.单据修改

1 个父辈 7662f28c
正在显示 19 个修改的文件 包含 300 行增加53 行删除
...@@ -195,17 +195,28 @@ public class DataInitManager { ...@@ -195,17 +195,28 @@ public class DataInitManager {
//储位转移 //储位转移
addNewFunctionMenu(4, raw, "storageTransfer", "储位转移", "storageTransfer", "storageTransfer/index", "transfer", functionMenuMap); addNewFunctionMenu(4, raw, "storageTransfer", "储位转移", "storageTransfer", "storageTransfer/index", "transfer", functionMenuMap);
//手动入库
addNewFunctionMenu(8, raw, "manualWarehous", "手动入库", "manualWarehous", "manualWarehous/index", "manualWa", functionMenuMap);
Menu doc = Menu.CreatePMenu("单据操作", 9, "doc", 1, "docOp", raw);
//931单据领料 //931单据领料
addNewFunctionMenu(5, raw, "docMaterialRe", "单据领料", "docMaterialRe", "receipt/docMaterialRe/index", "docMaterial", functionMenuMap); addNewFunctionMenu(1, doc, "docMaterialRe", "单据领料", "docMaterialRe", "receipt/docMaterialRe/index", "docMaterial", functionMenuMap);
//单据转库 //单据转库
addNewFunctionMenu(6, raw, "docTransferWarehous", "单据转库", "docTransferWarehous", "receipt/docTransferWarehous/index", "docTransfer", functionMenuMap); addNewFunctionMenu(2, doc, "docTransferWarehous", "单据转库", "docTransferWarehous", "receipt/docTransferWarehous/index", "docTransfer", functionMenuMap);
//单据退料 //单据退料
addNewFunctionMenu(7, raw, "docReturn", "单据退料", "docReturn", "receipt/docReturn/index", "docRe", functionMenuMap); addNewFunctionMenu(3, doc, "docReturn", "单据退料", "docReturn", "receipt/docReturn/index", "docRe", functionMenuMap);
//手动出库
addNewFunctionMenu(4, doc,"outVir","手动出库","outVir","outVir/index","docOut",functionMenuMap);
//addNewFunctionMenu(132,null,"outPage","线外入库","outPage","outers/outPage/index","index",functionMenuMap);
//手动入库
addNewFunctionMenu(8, raw, "manualWarehous", "手动入库", "manualWarehous", "manualWarehous/index", "manualWa", functionMenuMap);
Menu wip = Menu.CreatePMenu("半成品仓", 3, "wip", 2, "wip", null); Menu wip = Menu.CreatePMenu("半成品仓", 3, "wip", 2, "wip", null);
...@@ -341,12 +352,6 @@ public class DataInitManager { ...@@ -341,12 +352,6 @@ public class DataInitManager {
addNewFunctionMenu(131, s5, "outOperation/s5", "出库作业","outOperation/s5", "outers/outOperation/index","index",functionMenuMap); addNewFunctionMenu(131, s5, "outOperation/s5", "出库作业","outOperation/s5", "outers/outOperation/index","index",functionMenuMap);
addNewFunctionMenu(132, s5, "staWorkSurface/s5", "盘点作业","staWorkSurface/s5", "outers/staWorkSurface/index","index",functionMenuMap); addNewFunctionMenu(132, s5, "staWorkSurface/s5", "盘点作业","staWorkSurface/s5", "outers/staWorkSurface/index","index",functionMenuMap);
//线外入库
//Menu outPage = Menu.CreatePMenu("线外入库", 17, "", 1, "index", null);
addNewFunctionMenu(132,null,"outPage","线外入库","outPage","outers/outPage/index","index",functionMenuMap);
addNewFunctionMenu(133,null,"outVir","虚拟仓出库","outVir","outers/outVir/index","index",functionMenuMap);
//内仓线外入库 //内仓线外入库
addNewFunctionMenu(134,null,"bcVirWarehous","虚拟仓","bcVirWarehous","virWarehous/virWarehous/index","feeding",functionMenuMap); addNewFunctionMenu(134,null,"bcVirWarehous","虚拟仓","bcVirWarehous","virWarehous/virWarehous/index","feeding",functionMenuMap);
......
...@@ -419,7 +419,7 @@ public class StoragePosManagerImpl implements IStoragePosManager { ...@@ -419,7 +419,7 @@ public class StoragePosManagerImpl implements IStoragePosManager {
c.and("barcode.subCodeList.isOut").is(isOut); c.and("barcode.subCodeList.isOut").is(isOut);
} }
//Sort sort = getSortByCheckOutType(checkOutType); //Sort sort = getSortByCheckOutType(checkOutType);
Sort sort = Sort.by(Sort.Direction.ASC, "barcode.subCodeList.createDate","barcode.subCodeList.amount"/*,"canCheckOutTime", "barcode.usedCount"*/); Sort sort = Sort.by(Sort.Direction.ASC, "barcode.subCodeList.produceDate","barcode.subCodeList.createDate","barcode.subCodeList.amount"/*,"canCheckOutTime", "barcode.usedCount"*/);
Query q = new Query(c); Query q = new Query(c);
q.with(sort); q.with(sort);
StoragePos pos = storagePosDao.findOne(q); StoragePos pos = storagePosDao.findOne(q);
......
...@@ -373,6 +373,13 @@ public class DataLog extends BasePo implements Serializable { ...@@ -373,6 +373,13 @@ public class DataLog extends BasePo implements Serializable {
//任务是否正常 //任务是否正常
private boolean normal = true; private boolean normal = true;
private String currentLoc = "";
private boolean callEmptyBox = false;
public String getBarcode() { public String getBarcode() {
if(barcode == null){ if(barcode == null){
return ""; return "";
......
...@@ -479,7 +479,7 @@ public class OuterReportController { ...@@ -479,7 +479,7 @@ public class OuterReportController {
} }
if (queryCondition != null) { if (queryCondition != null) {
query = QueryHelp.getQuery(queryCondition); query = QueryHelp.getQuery(queryCondition);
query.addCriteria(Criteria.where("posName").exists(true).ne("").and("partNumber").nin(Arrays.asList("CS", "CM", "CB"))); query.addCriteria(Criteria.where("posName").exists(true).ne("").and("partNumber").nin(Arrays.asList("C07", "C13", "C15")));
} }
PageData<InventoryDto> resultData = new PageData<>(); PageData<InventoryDto> resultData = new PageData<>();
PageData<Barcode> data = barcodeManager.findByPage(query, pageable); PageData<Barcode> data = barcodeManager.findByPage(query, pageable);
......
...@@ -41,9 +41,9 @@ public class LuxsanApi extends DefaultSmfApiListener { ...@@ -41,9 +41,9 @@ public class LuxsanApi extends DefaultSmfApiListener {
*/ */
public static List<QueryBinResult> queryBin(QueryBinRequest request) { public static List<QueryBinResult> queryBin(QueryBinRequest request) {
try { try {
log.info("queryBin接口请求参数为:" + JSONObject.toJSONString(request)); //log.info("queryBin接口请求参数为:" + JSONObject.toJSONString(request));
String resultStr = HttpHelper.postJson(queryBinUrl, request); String resultStr = HttpHelper.postJson(queryBinUrl, request);
log.info("queryBin接口返回结果为:" + resultStr); //log.info("queryBin接口返回结果为:" + resultStr);
LuxsanApiResult apiResult = JSONObject.parseObject(resultStr, LuxsanApiResult.class); LuxsanApiResult apiResult = JSONObject.parseObject(resultStr, LuxsanApiResult.class);
if (LuxsanApiEnum.ERROR.equals(apiResult.getMSGTY())) { if (LuxsanApiEnum.ERROR.equals(apiResult.getMSGTY())) {
......
package com.neotel.smfcore.custom.luxsan.factory_c.rawstor.bean;
import lombok.Data;
import java.util.Map;
@Data
public class CtuStatus {
//ctu Id
private String ctuId;
//key为抽屉号, value为
private Map<String,String> usageMap;
}
package com.neotel.smfcore.custom.luxsan.factory_c.rawstor.bean.dto;
import lombok.AllArgsConstructor;
import lombok.Data;
import java.util.List;
@Data
@AllArgsConstructor
public class ValidBin {
private String boxCode;
private String boxLoc;
private String stackerLoc;
private List<String> validBinList;
}
package com.neotel.smfcore.custom.luxsan.factory_c.rawstor.controller; package com.neotel.smfcore.custom.luxsan.factory_c.rawstor.controller;
import com.alibaba.fastjson.JSON;
import com.neotel.smfcore.common.bean.ResultBean; import com.neotel.smfcore.common.bean.ResultBean;
import com.neotel.smfcore.common.utils.ReelLockPosUtil;
import com.neotel.smfcore.common.utils.StringUtils;
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;
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.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.service.po.DataLog;
import com.neotel.smfcore.core.system.util.TaskService; import com.neotel.smfcore.core.system.util.TaskService;
import com.neotel.smfcore.custom.luxsan.factory_c.rawstor.bean.CtuStatus;
import com.neotel.smfcore.custom.luxsan.factory_c.rawstor.bean.dto.CtuTask; import com.neotel.smfcore.custom.luxsan.factory_c.rawstor.bean.dto.CtuTask;
import com.neotel.smfcore.custom.luxsan.factory_c.rawstor.enums.TaskCurrentLoc;
import com.neotel.smfcore.custom.luxsan.factory_c.rawstor.util.BoxHandleUtil;
import com.neotel.smfcore.custom.luxsan.factory_c.util.CacheNameUtil; import com.neotel.smfcore.custom.luxsan.factory_c.util.CacheNameUtil;
import com.neotel.smfcore.security.annotation.AnonymousAccess; import com.neotel.smfcore.security.annotation.AnonymousAccess;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.logging.log4j.util.Strings; import org.apache.logging.log4j.util.Strings;
import org.ehcache.impl.internal.concurrent.ConcurrentHashMap;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList; import java.util.ArrayList;
...@@ -36,6 +46,9 @@ public class CtuDeviceController { ...@@ -36,6 +46,9 @@ public class CtuDeviceController {
@Autowired @Autowired
private DataCache dataCache; private DataCache dataCache;
@Autowired
private CodeResolve codeResolve;
@ApiOperation("原材料CTU获取线体到架子的入库任务(入满箱或出库后回库)") @ApiOperation("原材料CTU获取线体到架子的入库任务(入满箱或出库后回库)")
@RequestMapping("/lineToShelfTasks") @RequestMapping("/lineToShelfTasks")
...@@ -93,4 +106,130 @@ public class CtuDeviceController { ...@@ -93,4 +106,130 @@ public class CtuDeviceController {
} }
return ResultBean.newOkResult(shelfToLineTaskList); return ResultBean.newOkResult(shelfToLineTaskList);
} }
@ApiOperation("修改任务状态")
@RequestMapping("/updateTaskStatus")
@AnonymousAccess
public ResultBean updateTaskStatus(@RequestBody Map<String, String> paramMap) {
String boxStr = paramMap.get("boxStr");
String statusStr = paramMap.get("statusStr");
//1.判断任务是否存在
DataLog task = null;
List<DataLog> allTasks = taskService.getAllTasks();
for (DataLog dataLog : allTasks) {
if (boxStr.startsWith(dataLog.getBarcode())) {
if (!dataLog.isCancel() && !dataLog.isFinished()) {
task = dataLog;
break;
}
}
}
if (task == null) {
return ResultBean.newErrorResult(-1, "smfcore.task.notExist", "任务不存在");
}
statusStr = statusStr.toUpperCase();
String taskType = "入库";
if (task.isCheckOutTask()) {
taskType = "出库";
}
log.info("更新料箱[" + boxStr + "]的" + taskType + "任务[" + task.getId() + "]状态为:" + statusStr);
//2.判断更新状态和当前状态任务是否相同
if (task.getStatus().equals(statusStr)) {
return ResultBean.newErrorResult(-1, "smfcore.taskStatusHasUpdate", "任务{0}已经修改状态", new String[]{task.getBarcode()});
}
task.setStatus(statusStr);
//3.判断是出库,还是入库任务
if (task.isPutInTask()) {
if (OP_STATUS.FINISHED.name().equals(statusStr)) {
BoxHandleUtil.intoPos(task);
ReelLockPosUtil.removeReelLockPosInfo(task.getBarcode());
} else {
taskService.updateQueueTask(task);
}
} else {
//4.如果是出库任务
if (OP_STATUS.EXECUTING.name().equals(statusStr)) {
taskService.updateQueueTask(task);
}
//出库任务不让完成,等待入库的时候,再完成
else if (!OP_STATUS.FINISHED.name().equals(statusStr)) {
if (!task.isOutFromPos()) {
BoxHandleUtil.outFromPos(task);
task.setOutFromPos(true);
}
taskService.updateFinishedTask(task);
}
}
return ResultBean.newOkResult("");
}
@ApiOperation("根据料箱获取目的地")
@RequestMapping("/getOutTargetByBox")
@AnonymousAccess
public ResultBean getTargetByBox(String boxStr) {
if (StringUtils.isEmpty(boxStr)) {
return ResultBean.newErrorResult(-1, "smfcore.valueCanotNull", "{0}不能为空", new String[]{"料箱信息"});
}
List<DataLog> allTasks = taskService.getAllTasks();
for (DataLog dataLog : allTasks) {
if (dataLog.isCheckOutTask() && !dataLog.isFinished() && !dataLog.isCancel()) {
if (boxStr.startsWith(dataLog.getBarcode())) {
return ResultBean.newOkResult(dataLog.getPosName());
}
}
}
return ResultBean.newErrorResult(-1, "", "未找到" + boxStr + "的入库库位");
}
@ApiOperation("更新入料机构缓存")
@RequestMapping("/updateBoxLoc")
@AnonymousAccess
public ResultBean updateMaterPutInCache(@RequestParam("boxStr") String boxStr,
@RequestParam("loc") String loc) {
DataLog dataLog = null;
List<DataLog> allTasks = taskService.getAllTasks();
for (DataLog task : allTasks) {
if (task.isCheckOutTask()) {
if (boxStr.startsWith(task.getBarcode())) {
dataLog = task;
break;
}
}
}
if (dataLog != null) {
dataLog.setCurrentLoc(loc);
if (TaskCurrentLoc.In1_FeedingInlet.equals(loc) || TaskCurrentLoc.In2_FeedingInlet.equals(loc)) {
dataLog.setStatus(loc);
}
if (dataLog.isExecuting() || dataLog.isWait()){
taskService.updateQueueTask(dataLog);
} else {
taskService.updateFinishedTask(dataLog);
}
} else {
Barcode barcode = codeResolve.resolveOneValideBarcode(boxStr);
StoragePos storagePos = BoxHandleUtil.locOnePos(barcode);
if (storagePos != null) {
Storage storage = dataCache.getStorageById(storagePos.getStorageId());
DataLog task = new DataLog(storage, storagePos.getBarcode(), storagePos);
task.setCallEmptyBox(true);
//task.setLoc(loc);
task.setCurrentLoc(loc);
task.setType(OP.CHECKOUT);
task.setStatus(loc);
taskService.updateFinishedTask(task);
}
}
return ResultBean.newOkResult("");
}
} }
...@@ -18,6 +18,8 @@ import com.neotel.smfcore.custom.luxsan.api.enums.QueryGrStatusEnum; ...@@ -18,6 +18,8 @@ import com.neotel.smfcore.custom.luxsan.api.enums.QueryGrStatusEnum;
import com.neotel.smfcore.custom.luxsan.factory_c.rawstor.bean.BindGrInfo; import com.neotel.smfcore.custom.luxsan.factory_c.rawstor.bean.BindGrInfo;
import com.neotel.smfcore.custom.luxsan.factory_c.rawstor.bean.dto.QueryGrDto; import com.neotel.smfcore.custom.luxsan.factory_c.rawstor.bean.dto.QueryGrDto;
import com.neotel.smfcore.custom.luxsan.factory_c.rawstor.bean.dto.QueryGrStatusDto; import com.neotel.smfcore.custom.luxsan.factory_c.rawstor.bean.dto.QueryGrStatusDto;
import com.neotel.smfcore.custom.luxsan.factory_c.rawstor.util.BinCacheUtil;
import com.neotel.smfcore.custom.luxsan.factory_c.rawstor.util.BoxHandleUtil;
import com.neotel.smfcore.custom.luxsan.factory_c.util.CacheNameUtil; import com.neotel.smfcore.custom.luxsan.factory_c.util.CacheNameUtil;
import com.neotel.smfcore.custom.luxsan.factory_c.util.CommonUtil; import com.neotel.smfcore.custom.luxsan.factory_c.util.CommonUtil;
import com.neotel.smfcore.security.annotation.AnonymousAccess; import com.neotel.smfcore.security.annotation.AnonymousAccess;
......
...@@ -17,6 +17,7 @@ import com.neotel.smfcore.custom.luxsan.api.bean.request.FetchMoveTicketRequest; ...@@ -17,6 +17,7 @@ import com.neotel.smfcore.custom.luxsan.api.bean.request.FetchMoveTicketRequest;
import com.neotel.smfcore.custom.luxsan.api.bean.result.FetchMoveTicketResult; import com.neotel.smfcore.custom.luxsan.api.bean.result.FetchMoveTicketResult;
import com.neotel.smfcore.custom.luxsan.factory_c.rawstor.bean.TicketReturn; import com.neotel.smfcore.custom.luxsan.factory_c.rawstor.bean.TicketReturn;
import com.neotel.smfcore.custom.luxsan.factory_c.rawstor.bean.dto.FetchMoveTicketDto; import com.neotel.smfcore.custom.luxsan.factory_c.rawstor.bean.dto.FetchMoveTicketDto;
import com.neotel.smfcore.custom.luxsan.factory_c.rawstor.enums.LiteorderCheckType;
import com.neotel.smfcore.custom.luxsan.factory_c.util.CacheNameUtil; import com.neotel.smfcore.custom.luxsan.factory_c.util.CacheNameUtil;
import com.neotel.smfcore.custom.luxsan.factory_c.util.CommonUtil; import com.neotel.smfcore.custom.luxsan.factory_c.util.CommonUtil;
import com.neotel.smfcore.security.annotation.AnonymousAccess; import com.neotel.smfcore.security.annotation.AnonymousAccess;
...@@ -51,6 +52,11 @@ public class TicketController { ...@@ -51,6 +52,11 @@ public class TicketController {
@RequestMapping("/fetchTicket") @RequestMapping("/fetchTicket")
@AnonymousAccess @AnonymousAccess
public ResultBean fetchTicket(String ticket) { public ResultBean fetchTicket(String ticket) {
if (StringUtils.isEmpty(ticket)) {
return ResultBean.newErrorResult(-1, "smfcore.valueCanotNull", "{0}不能为空", new String[]{"单据号"});
}
List<FetchMoveTicketResult> ticketList = LuxsanApi.fetchMoveTicket(new FetchMoveTicketRequest(CommonUtil.plantCode, ticket)); List<FetchMoveTicketResult> ticketList = LuxsanApi.fetchMoveTicket(new FetchMoveTicketRequest(CommonUtil.plantCode, ticket));
return ResultBean.newOkResult(FetchMoveTicketDto.convertFetchMoveTicketDto(ticketList)); return ResultBean.newOkResult(FetchMoveTicketDto.convertFetchMoveTicketDto(ticketList));
} }
...@@ -64,7 +70,7 @@ public class TicketController { ...@@ -64,7 +70,7 @@ public class TicketController {
String resultStr = liteOrderCache.hasExecutingOrder(); String resultStr = liteOrderCache.hasExecutingOrder();
if (StringUtils.isNotEmpty(resultStr)) { if (StringUtils.isNotEmpty(resultStr)) {
//throw new ValidateException("","有正在执行的工单,不允许恢复"); //throw new ValidateException("","有正在执行的工单,不允许恢复");
return ResultBean.newErrorResult(-1, "", "有正在执行的工单"+resultStr+",不允许出库"); return ResultBean.newErrorResult(-1, "", "有正在执行的工单" + resultStr + ",不允许出库");
} }
if (StringUtils.isEmpty(ticket)) { if (StringUtils.isEmpty(ticket)) {
...@@ -95,12 +101,13 @@ public class TicketController { ...@@ -95,12 +101,13 @@ public class TicketController {
} }
liteOrder.setOrderItems(itemList); liteOrder.setOrderItems(itemList);
liteOrder.setCheckType(LiteorderCheckType.TICKET_CHECKOUT);
liteOrder = liteOrderManager.createWithItems(liteOrder); liteOrder = liteOrderManager.createWithItems(liteOrder);
liteOrderCache.addOrderToMap(liteOrder); liteOrderCache.addOrderToMap(liteOrder);
} }
String result = liteOrderCache.checkOutLiteOrderOut(ticket, false, null); String result = liteOrderCache.rawTicketCheckOut(ticket, false, null);
if (StringUtils.isNotEmpty(result)){ if (StringUtils.isNotEmpty(result)) {
return ResultBean.newErrorResult(-1,"", MessageUtils.getText(result,new Locale(SecurityUtils.getCurrentUserLanguage()),result)); return ResultBean.newErrorResult(-1, "", MessageUtils.getText(result, new Locale(SecurityUtils.getCurrentUserLanguage()), result));
} }
return ResultBean.newOkResult(""); return ResultBean.newOkResult("");
} }
......
...@@ -3,4 +3,6 @@ package com.neotel.smfcore.custom.luxsan.factory_c.rawstor.enums; ...@@ -3,4 +3,6 @@ package com.neotel.smfcore.custom.luxsan.factory_c.rawstor.enums;
public class LiteorderCheckType { public class LiteorderCheckType {
public static final int PICKING_CHECKOUT = 1; public static final int PICKING_CHECKOUT = 1;
public static final int TICKET_CHECKOUT = 2;
} }
package com.neotel.smfcore.custom.luxsan.factory_c.rawstor.enums;
import lombok.Data;
@Data
public class TaskCurrentLoc {
public static final String In1_FeedingInlet = "In1_FeedingInlet";
public static final String In2_FeedingInlet = "In2_FeedingInlet";
public static final String In_FeedingInlet = "In_FeedingInlet";
public static final String Out1_FeedingInlet = "Out1_FeedingInlet";
public static final String Out2_FeedingInlet = "Out2_FeedingInlet";
public static final String Out_FeedingInlet = "Out_FeedingInlet";
public static final String In1_DischargeHole = "In1_DischargeHole";
public static final String In2_DischargeHole = "In2_DischargeHole";
public static final String Out1_DischargeHole = "Out1_DischargeHole";
public static final String Out2_DischargeHole = "Out2_DischargeHole";
//人工工位入料口
public static final String Manual_FeedingInlet = "Manual_FeedingInlet";
//人工工位出料口
public static final String Manual_DischargeHole = "Manual_DischargeHole";
}
package com.neotel.smfcore.custom.luxsan.factory_c.rawstor.util; package com.neotel.smfcore.custom.luxsan.factory_c.rawstor.util;
import com.neotel.smfcore.common.bean.ReelLockPosInfo;
import com.neotel.smfcore.common.utils.QueryHelp; import com.neotel.smfcore.common.utils.QueryHelp;
import com.neotel.smfcore.common.utils.ReelLockPosUtil;
import com.neotel.smfcore.common.utils.SecurityUtils; import com.neotel.smfcore.common.utils.SecurityUtils;
import com.neotel.smfcore.common.utils.StringUtils; import com.neotel.smfcore.common.utils.StringUtils;
import com.neotel.smfcore.core.barcode.enums.BARCODE_STATUS; import com.neotel.smfcore.core.barcode.enums.BARCODE_STATUS;
...@@ -22,10 +24,7 @@ import org.springframework.data.mongodb.core.query.Criteria; ...@@ -22,10 +24,7 @@ import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query; import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.Collection; import java.util.*;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import java.util.stream.Collectors; import java.util.stream.Collectors;
...@@ -134,12 +133,12 @@ public class BoxHandleUtil { ...@@ -134,12 +133,12 @@ public class BoxHandleUtil {
//storagePos.setUsed(false); //storagePos.setUsed(false);
storagePosManager.save(storagePos); storagePosManager.save(storagePos);
log.info("出库完成,清空仓位: " + storagePos.getId() + "[" + storagePos.getPosName() + "]"); log.info(opTask.getBarcode() + "出库完成,清空仓位: " + storagePos.getId() + "[" + storagePos.getPosName() + "]");
taskService.moveTaskToFinished(opTask); taskService.moveTaskToFinished(opTask);
} }
public static String callEmptyBox(String size,String outLet) { public static StoragePos callEmptyBox(String size,String outLet,String wareHouseCode) {
String box = ""; String box = "";
if ("7".equals(size)) { if ("7".equals(size)) {
box = "C07"; box = "C07";
...@@ -149,6 +148,14 @@ public class BoxHandleUtil { ...@@ -149,6 +148,14 @@ public class BoxHandleUtil {
box = "C15"; box = "C15";
} }
//判断有没有可用的料箱
List<String> boxList = BinCacheUtil.getBoxList(wareHouseCode);
if (boxList == null || boxList.isEmpty()){
log.info(wareHouseCode+"未找到可用料箱");
return null;
}
//排除掉正在使用的仓位 //排除掉正在使用的仓位
Criteria c = Criteria.where("barcode").exists(true).and("enabled").is(true);//可用 Criteria c = Criteria.where("barcode").exists(true).and("enabled").is(true);//可用
Collection<String> excludePosIds = taskService.excludePosIds(); Collection<String> excludePosIds = taskService.excludePosIds();
...@@ -157,6 +164,7 @@ public class BoxHandleUtil { ...@@ -157,6 +164,7 @@ public class BoxHandleUtil {
} }
c.and("barcode.partNumber").regex(Pattern.compile(QueryHelp.escapeExprSpecialWord(box), Pattern.CASE_INSENSITIVE)); c.and("barcode.partNumber").regex(Pattern.compile(QueryHelp.escapeExprSpecialWord(box), Pattern.CASE_INSENSITIVE));
c.and("barcode.status").is(BARCODE_STATUS.IN_STORE); c.and("barcode.status").is(BARCODE_STATUS.IN_STORE);
c.and("barcode.barcode").in(boxList);
List<StoragePos> storagePosList = storagePosManager.findByQuery(new Query(c).with(Sort.by(Sort.Direction.ASC, "barcode.amount"))); List<StoragePos> storagePosList = storagePosManager.findByQuery(new Query(c).with(Sort.by(Sort.Direction.ASC, "barcode.amount")));
StoragePos storagePos = null; StoragePos storagePos = null;
...@@ -212,10 +220,10 @@ public class BoxHandleUtil { ...@@ -212,10 +220,10 @@ public class BoxHandleUtil {
} }
} }
generateTask(storage, storagePos.getBarcode(), storagePos, OP.CHECKOUT, OP_STATUS.WAIT.name(), toLoc, ExtendType.STORAGE_CHECKOUT); generateTask(storage, storagePos.getBarcode(), storagePos, OP.CHECKOUT, OP_STATUS.WAIT.name(), toLoc, ExtendType.STORAGE_CHECKOUT);
return storagePos.getPosName(); return storagePos;
} }
return ""; return null;
} }
...@@ -228,6 +236,7 @@ public class BoxHandleUtil { ...@@ -228,6 +236,7 @@ public class BoxHandleUtil {
task.setOperator(SecurityUtils.getLoginUsername()); task.setOperator(SecurityUtils.getLoginUsername());
task.setBoxPosName(pos.getPosName()); task.setBoxPosName(pos.getPosName());
task.setExtendType(extendType); task.setExtendType(extendType);
task.setCallEmptyBox(true);
if (barcode.getPutInTime() != -1) { if (barcode.getPutInTime() != -1) {
task.setFristPutInDate(new Date(barcode.getPutInTime())); task.setFristPutInDate(new Date(barcode.getPutInTime()));
} else { } else {
...@@ -239,15 +248,19 @@ public class BoxHandleUtil { ...@@ -239,15 +248,19 @@ public class BoxHandleUtil {
} }
public static String getBoxStr(String code) { public static String getBoxStr(String code,boolean suffix) {
if (code.endsWith("A") || code.endsWith("B")) { if (code.endsWith("A") || code.endsWith("B")) {
code = code.substring(0, code.length() - 1); code = code.substring(0, code.length() - 1);
if (suffix) {
code = code + "A"; code = code + "A";
} }
}
if (code.contains("-")) { if (code.contains("-")) {
code = code.substring(0, code.indexOf("-")); code = code.substring(0, code.indexOf("-"));
if (suffix) {
code = code + "A"; code = code + "A";
} }
}
return code; return code;
} }
...@@ -272,4 +285,45 @@ public class BoxHandleUtil { ...@@ -272,4 +285,45 @@ public class BoxHandleUtil {
} }
return seq; return seq;
} }
public static StoragePos locOnePos(Barcode boxBarcode){
//判断信息是否在已经在库位中(出入库只改变料箱位置状态,不从StoragePos表中清除)
StoragePos pos = storagePosManager.getByBarcode(boxBarcode.getBarcode());
if (pos != null){
return pos;
}
List<String> cidList = new ArrayList<>();
List<Storage> storageList = new ArrayList<>();
for (Storage storage : dataCache.getAllStorage().values()) {
storageList.add(storage);
cidList.add(storage.getCid());
}
pos = taskService.findEmptyPosForPutIn(storageList, boxBarcode, "", "");
if (pos == null) {
log.info(boxBarcode.getBarcode() + "未找到可用库位");
return null;
}else{
log.info("料箱["+boxBarcode.getBarcode()+"]信息加入库位["+pos.getPosName()+"]中");
pos.setBarcode(boxBarcode);
pos.setUsed(true);
storagePosManager.save(pos);
//3.锁定库位
Storage storage = dataCache.getStorageById(pos.getStorageId());
ReelLockPosInfo reelLocInfo = new ReelLockPosInfo();
reelLocInfo.setBarcode(boxBarcode.getBarcode());
reelLocInfo.setCid(storage.getCid());
reelLocInfo.setLockPosName(pos.getPosName());
reelLocInfo.setLockPosId(pos.getId());
reelLocInfo = ReelLockPosUtil.addReelLockPosInfo(reelLocInfo, cidList);
if (reelLocInfo == null) {
log.info("[" + boxBarcode.getBarcode() + "]库位锁定失败,暂停入库");
return null;
}
}
return pos;
}
} }
...@@ -128,4 +128,14 @@ public class MaterialUtil { ...@@ -128,4 +128,14 @@ public class MaterialUtil {
} }
return null; return null;
} }
public static String getMaterialSize(String materialStr) {
String size = "7";
if (materialStr.startsWith("B13")) {
size = "13";
} else if (materialStr.startsWith("B15")) {
size = "15";
}
return size;
}
} }
...@@ -16,15 +16,7 @@ public class CacheNameUtil { ...@@ -16,15 +16,7 @@ public class CacheNameUtil {
public static final String CHCHE_MANUALWORK_PUTIN = "CHCHE_MANUALWORK_PUTIN"; public static final String CHCHE_MANUALWORK_PUTIN = "CHCHE_MANUALWORK_PUTIN";
public static final String CHCHE_EXECUTINGPUTIN_BOX = "CHCHE_EXECUTINGPUTIN_BOX";
public static final String CHCHE_SHIPCANCELUPSHELF = "CHCHE_SHIPCANCELUPSHELF"; public static final String CHCHE_SHIPCANCELUPSHELF = "CHCHE_SHIPCANCELUPSHELF";
public static final String CHCHE_RESTOREREPLACE = "CHCHE_RESTOREREPLACE"; public static final String CHCHE_RESTOREREPLACE = "CHCHE_RESTOREREPLACE";
//CTU使用信息
public static final String CHCHE_CTUUSEINFO = "CHCHE_CTUUSEINFO";
//入料机构缓存
public static final String CHCHE_MATERIAL_PUTIN_CACHE = "CHCHE_MATERIAL_PUTIN_CACHE";
} }
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!