Commit d7dfa33d zshaohui

1.增加物料追溯接口

2.半成品仓odn出库修改
1 个父辈 ae524b11
......@@ -223,13 +223,15 @@ public class DataInitManager {
addNewFunctionMenu(1, wip, "manualWork", "人工作业", "manualWork", "SemiFinishProducts/manualWork/index", "manualWork", functionMenuMap);
addNewFunctionMenu(2, wip, "requisition", "领用", "requisition", "SemiFinishProducts/requisition/index", "requisition", functionMenuMap);
addNewFunctionMenu(2, wip, "bindCarton", "人工绑定", "bindCarton", "SemiFinishProducts/bindCarton/index", "bCarton", functionMenuMap);
addNewFunctionMenu(3, wip, "Shipment", "出货", "Shipment", "SemiFinishProducts/Shipment/index", "Shipment", functionMenuMap);
addNewFunctionMenu(3, wip, "Shipment", "ODN出货", "Shipment", "SemiFinishProducts/Shipment/index", "Shipment", functionMenuMap);
addNewFunctionMenu(4, wip, "requisition", "261&931领用", "requisition", "SemiFinishProducts/requisition/index", "requisition", functionMenuMap);
addNewFunctionMenu(5, wip, "transferInventory", "311转库", "transferInventory", "SemiFinishProducts/transferInventory/index", "transferInventory", functionMenuMap);
addNewFunctionMenu(4, wip, "transferInventory", "转库", "transferInventory", "SemiFinishProducts/transferInventory/index", "transferInventory", functionMenuMap);
addNewFunctionMenu(5, wip, "bindCarton", "人工绑定", "bindCarton", "SemiFinishProducts/bindCarton/index", "bindCarton", functionMenuMap);
//MSD管理:MSD库存.MSD追溯性.MSD设置
Menu msd = Menu.CreatePMenu("MSD管理", 2, "msd", 2, "MSD",null);
......@@ -278,6 +280,8 @@ public class DataInitManager {
addNewFunctionMenu(82,pMenuReport,"pkSearch","PK查询","pkSearch","neolight/pkSearch/index","findOut",functionMenuMap);
addNewFunctionMenu(83,pMenuReport,"sysInReport","盘点","sysInReport","neolight/sysInReport/index","mIDList",functionMenuMap);
addNewFunctionMenu(84,pMenuReport,"materialTrack","物料追溯","materialTrack","report/materialTrack/index","mTrack",functionMenuMap);
//内仓
addNewFunctionMenu(84,pMenuReport,"feeding","喂料","feeding","neolight/feeding/index","feeding",functionMenuMap);
......
......@@ -853,7 +853,7 @@ public class LiteOrderCache {
Collection<LiteOrder> liteOrders = getAllLiteOrder();
if (liteOrders != null && !liteOrders.isEmpty()) {
for (LiteOrder liteOrder : liteOrders) {
if (!liteOrder.isTaskFinished() && !liteOrder.isNew() && !liteOrder.isClosed()) {
if (liteOrder.isOutTails()) {
return liteOrder.getOrderNo();
}
}
......@@ -920,11 +920,11 @@ public class LiteOrderCache {
Collection excludeIdList = excludeOutPosIds();
//7.判断是否指定的itemId
if (orderItemIds != null && !orderItemIds.isEmpty()) {
/*if (orderItemIds != null && !orderItemIds.isEmpty()) {
if (!orderItemIds.contains(orderItem.getId())) {
continue;
}
}
}*/
//8.设置出库数量和出库盘数(超发和不超发)
int outReelCount = 0;
......@@ -972,9 +972,11 @@ public class LiteOrderCache {
//判断禁用料信息
for (Barcode subCode : subCodeList) {
if (disablePosNameList != null && !disablePosNameList.isEmpty()) {
if (disablePosNameList.contains(subCode.getPosName())) {
continue;
}
}
try {
smfApi.canPutInAfterResolve(subCode);
} catch (ValidateException e) {
......@@ -989,9 +991,11 @@ public class LiteOrderCache {
List<String> subCodeIds = new ArrayList<>();
for (Barcode subCode : subCodeList) {
if (disablePosNameList != null && !disablePosNameList.isEmpty()){
if (disablePosNameList.contains(subCode.getPosName())) {
continue;
}
}
if (outReelCount >= orderItem.getNeedReelCount() && outNumCount >= orderItem.getNeedNum()) {
break;
......@@ -1199,96 +1203,84 @@ public class LiteOrderCache {
return lackItems;
}
public synchronized List<String> findNeedOutBox(String orderNo, List<String> boxList) {
List<String> resultList = new ArrayList<>();
//1.判断工单是否存在
public synchronized void wipTicketOut(String orderNo) {
LiteOrder cacheOrder = liteOrderMap.get(orderNo);
if (cacheOrder == null) {
cacheOrder = liteOrderManager.findByOrderNo(orderNo);
}
if (cacheOrder == null) {
log.info("未找到工单:" + orderNo + "的信息");
throw new ValidateException("smfcore.order.out.notFound", "未找到工单");
}
//2.判断工单任务是否结束
if (cacheOrder.isClosed()) {
log.info("工单:" + orderNo + "已经关闭");
throw new ValidateException("smfcore.order.hasClose", "工单已关闭");
}
if (!cacheOrder.isTaskFinished() && !cacheOrder.isNew()) {
log.info("工单:" + orderNo + "正在执行中");
throw new ValidateException("smfcore.order.out.executing", "工单正在执行");
}
//3.设置工单状态
log.info("开始执行工单:" + orderNo);
cacheOrder.setTaskReelCount(0);
cacheOrder.setFinishedReelCount(0);
cacheOrder.setStatus(LITEORDER_STATUS.TAILS);
//4.获取料仓id
CHECKOUT_TYPE checkoutType = dataCache.getCheckOutType();
List<String> storageIdList = new ArrayList<>();
for (Storage storage : dataCache.getAllStorage().values()) {
storageIdList.add(storage.getId());
}
//查找用户所输入的料箱信息
List<StoragePos> storagePosList = new ArrayList<>();
if (boxList != null && !boxList.isEmpty()) {
storagePosList = storagePosManager.findByQuery(new Query(Criteria.where("barcode.barcode").in(boxList)));
}
CHECKOUT_TYPE checkoutType = dataCache.getCheckOutType();
int taskReelCount = 0;
//4.开始循环处理
for (LiteOrderItem orderItem : cacheOrder.getOrderItems()) {
//5.判断剩余数量
int remainNum = orderItem.getTotalOutNum() - orderItem.getOutNum();
int assignReelNum = 0;
String pn = orderItem.getPn();
String warehouseCode = orderItem.getWarehouseCode();
String partNumber = orderItem.getPn();
int taskNum = 0;
int remainNum = orderItem.getNeedNum() - orderItem.getTotalOutNum();
while (assignReelNum <= remainNum) {
if (storagePosList != null && !storagePosList.isEmpty()) {
for (StoragePos storagePos : storagePosList) {
Barcode barcode = storagePos.getBarcode();
if (!storagePos.isLocked()) {
if (barcode.getPartNumber().equals(pn) && barcode.getWarehouseCode().equals(warehouseCode)) {
barcode.setOrderItemId(orderItem.getId());
barcode.setOrderId(cacheOrder.getId());
barcode.setLockId(cacheOrder.getId());
barcode.setLockName(cacheOrder.getOrderNo());
storagePos.setBarcode(barcode);
assignReelNum = assignReelNum + barcode.getAmount();
resultList.add(barcode.getPosName());
storagePosManager.save(storagePos);
barcodeManager.save(barcode);
}
}
}
}
break;
}
while (assignReelNum <= remainNum) {
Collection<String> excludePosIds = taskService.excludePosIds();
StoragePos storagePos = storagePosManager.findOdnPnInStorages(storageIdList,"" ,pn, excludePosIds, checkoutType);
if (storagePos == null) {
while (taskNum < remainNum) {
Collection<String> excludePosIds = excludeOutPosIds();
StoragePos pos = storagePosManager.findPartNumberInStorages(storageIdList, partNumber, excludePosIds, checkoutType, orderItem.getBrand());
if (pos == null) {
break;
} else {
Barcode barcode = pos.getBarcode();
log.info(barcode.getBarcode() + "需要生成出库任务,工单号为:" + orderNo);
taskNum = taskNum + barcode.getAmount();
taskReelCount = taskReelCount + 1;
DataLog task = newTask(pos);
task.setSourceId(cacheOrder.getId());
task.setSourceName(cacheOrder.getOrderNo());
task.setSubSourceId(orderItem.getId());
task.setSubSourceInfo(orderItem.getFeederInfo());
task.setType(OP.CHECKOUT);
task.setStatus(OP_STATUS.WAIT.name());
taskService.addTaskToExecute(task);
}
Barcode barcode = storagePos.getBarcode();
barcode.setOrderItemId(orderItem.getId());
barcode.setOrderId(cacheOrder.getId());
barcode.setLockId(cacheOrder.getId());
barcode.setLockName(cacheOrder.getOrderNo());
storagePos.setBarcode(barcode);
assignReelNum = assignReelNum + barcode.getAmount();
resultList.add(barcode.getPosName());
storagePosManager.save(storagePos);
barcodeManager.save(barcode);
}
}
return resultList;
if (taskReelCount <= 0) {
log.info("工单:" + orderNo + "没有找到对应的任务");
finishedOrderTasks(cacheOrder);
throw new ValidateException("smfcore.order.out.noTask", "工单无可执行的任务");
}
public synchronized void wipTicketOut(String orderNo) {
cacheOrder.setTaskReelCount(taskReelCount);
liteOrderManager.save(cacheOrder);
liteOrderMap.put(cacheOrder.getOrderNo(), cacheOrder);
log.info("生成工单" + orderNo + "任务结束,数量为:" + taskReelCount);
}
public void odnCheckOut(String orderNo,List<StoragePos> storagePosList) {
LiteOrder cacheOrder = liteOrderMap.get(orderNo);
if (cacheOrder == null) {
cacheOrder = liteOrderManager.findByOrderNo(orderNo);
......@@ -1330,8 +1322,26 @@ public class LiteOrderCache {
while (taskNum < remainNum) {
Collection<String> excludePosIds = excludeOutPosIds();
StoragePos pos = storagePosManager.findPartNumberInStorages(storageIdList, partNumber, excludePosIds, checkoutType, orderItem.getBrand());
//1.先从执行的料箱中出库
StoragePos pos = null;
if (storagePosList != null && !storageIdList.isEmpty()) {
for (StoragePos storagePos : storagePosList) {
if (excludePosIds.contains(storagePos.getId())) {
continue;
}
if (partNumber.equals(storagePos.getBarcode().getPartNumber())) {
pos = storagePos;
break;
}
}
}
if (pos == null) {
pos = storagePosManager.findPartNumberInStorages(storageIdList, partNumber, excludePosIds, checkoutType, orderItem.getBrand(),orderItem.getWarehouseCode());
}
if (pos == null) {
break;
} else {
......
......@@ -37,6 +37,8 @@ public interface IStoragePosManager extends IBaseManager<StoragePos> {
StoragePos findPartNumberInStorages(List<String> storageIdList,String labelId, String pn, Collection<String> excludePosIds, CHECKOUT_TYPE checkOutType);
StoragePos findPartNumberInStorages(List<String> storageIdList, String pn, Collection<String> excludePosIds, CHECKOUT_TYPE checkOutType,String brand,String wareHouseCode);
StoragePos findPartNumberInStorages(List<String> storageIdList, String pn, Collection<String> excludePosIds, CHECKOUT_TYPE checkOutType,String brand);
List<StoragePos> findByQuery(Query query, Pageable pageable);
......
......@@ -374,6 +374,10 @@ public class StoragePosManagerImpl implements IStoragePosManager {
@Override
public StoragePos findPartNumberInStorages(List<String> storageIdList, String pn, Collection<String> excludePosIds, CHECKOUT_TYPE checkOutType, String brand) {
return findPartNumberInStorages(storageIdList,pn,excludePosIds,checkOutType,brand,"");
}
public StoragePos findPartNumberInStorages(List<String> storageIdList, String pn, Collection<String> excludePosIds, CHECKOUT_TYPE checkOutType, String brand,String wareHouseCode){
Criteria c = Criteria.where("barcode.partNumber").is(pn)
.and("id").nin(excludePosIds)
.and("enabled").is(true)//可用
......@@ -384,9 +388,12 @@ public class StoragePosManagerImpl implements IStoragePosManager {
if (StringUtils.isNotBlank(brand)) {
c.and("barcode.provider").is(brand);
}
if (StringUtils.isNotBlank(wareHouseCode)){
c.and("barcode.warehouseCode").is(wareHouseCode);
}
Query q = new Query(c);
//Sort sort = getSortByCheckOutType(checkOutType);
Sort sort = Sort.by(Sort.Direction.ASC, "barcode.amount", "barcode.expireDate","barcode.createDate");
Sort sort = Sort.by(Sort.Direction.ASC, "barcode.amount", "barcode.expireDate", "barcode.createDate");
q.with(sort);
StoragePos pos = storagePosDao.findOne(q);
if (pos == null) {
......
......@@ -169,7 +169,7 @@ public class BinCacheUtil {
List<String> emptyBoxList = new ArrayList<>();
List<DataLog> allTasks = taskService.getAllTasks();
for (DataLog dataLog : allTasks) {
if (dataLog.isCheckOutTask() && !dataLog.isCancel()) {
if (dataLog.isCheckOutTask() && !dataLog.isCancel() && !dataLog.isFinished()) {
if (source.equals(dataLog.getCurrentLoc())) {
log.info("找到当前工位上的料箱为:" + dataLog.getBarcode() + ",位置为:" + dataLog.getCurrentLoc());
emptyBoxList.add(dataLog.getBarcode());
......
......@@ -171,7 +171,7 @@ public class BoxHandleUtil {
List<Criteria> criteriaList = new ArrayList<>();
for (String needBinCodeStr : needBinCodeList) {
Criteria criteria = Criteria.where("barcode.subCodeList.posName").regex(Pattern.compile(QueryHelp.escapeExprSpecialWord("-" + needBinCodeStr), Pattern.CASE_INSENSITIVE));
Criteria criteria = Criteria.where("barcode.subCodeList.posName").regex(Pattern.compile(QueryHelp.escapeExprSpecialWord("-0" + needBinCodeStr), Pattern.CASE_INSENSITIVE));
criteriaList.add(criteria);
}
c.orOperator(criteriaList);
......
......@@ -2,6 +2,8 @@ package com.neotel.smfcore.custom.luxsan.factory_c.third;
import com.neotel.smfcore.common.bean.ResultBean;
import com.neotel.smfcore.core.device.util.DataCache;
import com.neotel.smfcore.custom.luxsan.factory_c.third.bean.MaterialLoc;
import com.neotel.smfcore.custom.luxsan.factory_c.third.util.MaterialLocUtil;
import com.neotel.smfcore.security.annotation.AnonymousAccess;
import io.swagger.annotations.ApiOperation;
import lombok.Data;
......@@ -18,28 +20,25 @@ import java.util.Map;
@RestController
@RequestMapping("/material/api")
public class MaterialRestController {
public static final String CACHE_MATERIAL_LOC = "CACHE_MATERIAL_LOC";
@Autowired
private DataCache dataCache;
@ApiOperation("更新料串位置")
@RequestMapping("/updateLoc")
@AnonymousAccess
public ResultBean updateLoc(@RequestBody Map<String,String> paramMap){
public ResultBean updateLoc(@RequestBody Map<String, String> paramMap) {
String materialStr = paramMap.get("materialStr");
String loc = paramMap.get("loc");
//log.info("收到料串位置更新,料串为:"+materialStr+",位置为:"+loc);
log.info("收到料串位置更新,料串为:"+materialStr+",位置为:"+loc);
MaterialLocUtil.updateMaterialLoc(materialStr,loc,null);
Map<String,String> cacheMap = dataCache.getCache(CACHE_MATERIAL_LOC);
if (cacheMap == null){
cacheMap = new HashMap<>();
return ResultBean.newOkResult("");
}
cacheMap.put(materialStr,loc);
dataCache.updateCache(CACHE_MATERIAL_LOC,cacheMap);
return ResultBean.newOkResult("");
@ApiOperation("获取料串位置信息")
@RequestMapping("/getMaterialLoc")
@AnonymousAccess
public ResultBean getMaterialLoc() {
return ResultBean.newOkResult(MaterialLocUtil.getMaterialLoc());
}
}
package com.neotel.smfcore.custom.luxsan.factory_c.third.bean;
import com.neotel.smfcore.core.barcode.service.po.Barcode;
import lombok.Data;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@Data
public class MaterialLoc {
private String material;
private String loc;
private int amount = 0;
private List<Barcode> barcodeList = new ArrayList<>();
private Date createDate = new Date();
private Date updateDate = new Date();
}
package com.neotel.smfcore.custom.luxsan.factory_c.third.enums;
public enum MaterialLocEnum {
MATERIAL_STRING_STATION("料串工位", "1"),
DIVERSION_STATION("分流工位", "2"),
WAREHOUSE_IN_ROLLER_LINE_1("1号入库滚筒线", "3"),
WAREHOUSE_IN_ROLLER_LINE_2("2号入库滚筒线", "4"),
WAREHOUSE_OUT_ROLLER_LINE_1("1号出库滚筒线"," 5"),
WAREHOUSE_OUT_ROLLER_LINE_2("2号出库滚筒线", "6"),
W2_1F_CONFLUENCE_LINE("W2 1F汇流线", "7"),
W2_1F_LIFTING_WELL("W2 1F提升井", "8"),
W2_3F_CORRIDOR_ROLLER_LINE("W2 3F连廊滚筒线", "9"),
C2_3F_BG_ROLLER_LINE("C2 3F BG滚筒线", "10"),
C2_3F_CG_ROLLER_LINE("C2 3F CG滚筒线", "11"),
C2_3F_BG_FULL_MATERIAL_STRING_CACHE_LINE("C2 3F BG满料串缓存线", "12"),
C2_3F_CG_FULL_MATERIAL_STRING_CACHE_LINE("C2 3F CG满料串缓存线", "13");
private final String name;
private final String id;
// 私有构造方法,用于在枚举常量实例化时传入参数
MaterialLocEnum(String name, String id) {
this.name = name;
this.id = id;
}
// 获取工位名称
public String getName() {
return name;
}
// 获取工位ID
public String getId() {
return id;
}
// 提供一个根据ID查找枚举常量的静态方法
public static String findNameById(String id) {
for (MaterialLocEnum locEnum : MaterialLocEnum.values()) {
if (locEnum.getId().equals(id)) {
return locEnum.getName();
}
}
return "";
}
}
package com.neotel.smfcore.custom.luxsan.factory_c.third.util;
import com.neotel.smfcore.core.barcode.service.po.Barcode;
import com.neotel.smfcore.core.device.util.DataCache;
import com.neotel.smfcore.custom.luxsan.factory_c.third.bean.MaterialLoc;
import com.neotel.smfcore.custom.luxsan.factory_c.third.enums.MaterialLocEnum;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.*;
@Component
public class MaterialLocUtil {
public static final String CACHE_MATERIAL_LOC = "CACHE_MATERIAL_LOC";
private static DataCache dataCache;
@Autowired
public void setDataCache(DataCache cache) {
MaterialLocUtil.dataCache = cache;
}
public static void updateMaterialLoc(String materialStr, String loc, Barcode barcode) {
Map<String, MaterialLoc> cacheMap = dataCache.getCache(CACHE_MATERIAL_LOC);
if (cacheMap == null) {
cacheMap = new HashMap<>();
}
MaterialLoc materialLoc = cacheMap.get(materialStr);
if (materialLoc == null) {
materialLoc = new MaterialLoc();
}
String name = MaterialLocEnum.findNameById(loc);
materialLoc.setLoc(name);
materialLoc.setMaterial(materialStr);
materialLoc.setUpdateDate(new Date());
List<Barcode> barcodeList = materialLoc.getBarcodeList();
if (barcode != null) {
if (barcodeList != null && !barcodeList.isEmpty()) {
barcodeList.removeIf(t -> t.getBarcode().equals(barcode.getBarcode()));
}
barcode.setUpdateDate(new Date());
barcodeList.add(barcode);
}
int amount = barcodeList.stream().mapToInt(Barcode::getAmount).sum();
materialLoc.setAmount(amount);
materialLoc.setBarcodeList(barcodeList);
materialLoc.setUpdateDate(new Date());
cacheMap.put(materialStr, materialLoc);
dataCache.updateCache(CACHE_MATERIAL_LOC, cacheMap);
}
public static void removeMaterialLoc(String materialStr){
Map<String, MaterialLoc> cacheMap = dataCache.getCache(CACHE_MATERIAL_LOC);
if (cacheMap == null) {
cacheMap = new HashMap<>();
}
cacheMap.remove(materialStr);
dataCache.updateCache(CACHE_MATERIAL_LOC, cacheMap);
}
public static Collection<MaterialLoc> getMaterialLoc() {
Map<String, MaterialLoc> cacheMap = dataCache.getCache(CACHE_MATERIAL_LOC);
if (cacheMap == null) {
cacheMap = new HashMap<>();
}
return cacheMap.values();
}
}
package com.neotel.smfcore.custom.luxsan.factory_c.wipstor.controller;
import com.alibaba.fastjson.JSON;
import com.neotel.smfcore.common.bean.ResultBean;
import com.neotel.smfcore.common.exception.ValidateException;
import com.neotel.smfcore.common.utils.StringUtils;
......@@ -36,7 +37,9 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
@Api(tags = "半成品出库")
@Slf4j
......@@ -68,8 +71,11 @@ public class WipStorCheckOutController {
@ApiOperation("获取ODN详情")
@RequestMapping("/getOdnDetail")
@AnonymousAccess
//@AnonymousAccess
public ResultBean getOdnDetail(String odn) {
if (StringUtils.isBlank(odn)) {
return ResultBean.newErrorResult(-1, "smfcore.valueCanotNull", "{0}不能为空", new String[]{"odn"});
}
List<FetchShipmentInfoResult> resultList = LuxsanApi.fetchShipmentInfo(new FetchShipmentInfoRequest(CommonUtil.plantCode, odn));
return ResultBean.newOkResult(FetchShipmentInfoDto.convertFetchShipmentInfoDto(resultList));
}
......@@ -77,7 +83,7 @@ public class WipStorCheckOutController {
@ApiOperation("判断料箱是否在库")
@RequestMapping("boxInStor")
@AnonymousAccess
//@AnonymousAccess
public ResultBean boxInStor(String odn, String box) {
log.info("收到odn信息为:"+odn+",料箱信息为:"+box);
Barcode barcode = codeResolve.resolveOneValideBarcode(box);
......@@ -108,26 +114,31 @@ public class WipStorCheckOutController {
@ApiOperation("ODN出库")
@RequestMapping("/odnOut")
@AnonymousAccess
//@AnonymousAccess
public synchronized ResultBean odnOut(@RequestBody OdnOut odnOut) {
log.info("收到odn出库信息为:" + JSON.toJSONString(odnOut));
String odn = odnOut.getOdn();
if (StringUtils.isBlank(odn)) {
return ResultBean.newErrorResult(-1, "smfcore.valueCanotNull", "{0}不能为空", new String[]{"odn"});
}
List<String> boxList = odnOut.getBoxList();
//1.判断是否正在执行中
//判断是否存在odn信息
LiteOrder liteOrder = liteOrderCache.getLiteOrder(odn);
if (liteOrder == null) {
liteOrder = liteOrderManager.findByOrderNo(odn);
}
if (liteOrder != null) {
if (!liteOrder.isTaskFinished() && !liteOrder.isNew()) {
return ResultBean.newErrorResult(-1, "", odn + "任务未结束");
}
liteOrder.setOrderNo(odn + "_bak_" + System.currentTimeMillis());
liteOrderManager.createWithItems(liteOrder);
}
//2.生成工单任务
LiteOrder newOrder = new LiteOrder();
if (liteOrder == null) {
liteOrder = new LiteOrder();
liteOrder.setOrderNo(odn);
List<LiteOrderItem> itemList = new ArrayList<>();
List<FetchShipmentInfoResult> resultList = LuxsanApi.fetchShipmentInfo(new FetchShipmentInfoRequest(CommonUtil.plantCode, odn));
......@@ -149,76 +160,74 @@ public class WipStorCheckOutController {
orderItem.setImportMode(result.getIMPORT_MODE());
orderItem.setImportCode(result.getIMPORT_CODE());
orderItem.setShipTo(result.getSHIP_TO());
orderItem.setPn(result.getMATERIAL_CODE());
//orderItem.setPn(result.getMATERIAL_CODE());
orderItem.setNeedNum(result.getQTY());
itemList.add(orderItem);
}
liteOrder.setOrderItems(itemList);
liteOrder = liteOrderManager.createWithItems(liteOrder);
liteOrderCache.addOrderToMap(liteOrder);
}
newOrder.setOrderNo(odn);
newOrder.setOrderItems(itemList);
newOrder = liteOrderManager.createWithItems(newOrder);
liteOrderCache.addOrderToMap(newOrder);
List<String> needOutBoxList = liteOrderCache.findNeedOutBox(odn, boxList);
if (needOutBoxList == null || needOutBoxList.isEmpty()){
return ResultBean.newErrorResult(-1,"","未找到可以出库的物料");
}
List<LiteOrderItem> orderItems = liteOrder.getOrderItems();
//判断是否在库,有没有出库任务
List<StoragePos> storagePosList = new ArrayList<>();
return ResultBean.newOkResult(needOutBoxList);
if (boxList != null && !boxList.isEmpty()) {
for (String box : boxList) {
if (StringUtils.isBlank(box)){
return ResultBean.newErrorResult(-1, "", "请核实传入的料箱号是否为空");
}
Barcode barcode = codeResolve.resolveOneValideBarcode(box);
if (barcode == null) {
return ResultBean.newErrorResult(-1, "", box + "条码无效");
}
@ApiOperation("取消odn出库")
@RequestMapping("/cancelOdnOut")
@AnonymousAccess
public ResultBean cancelOdnOut(String odn) {
if (StringUtils.isEmpty(odn)) {
return ResultBean.newErrorResult(-1, "smfcore.valueCanotNull", "{0}不能为空", new String[]{"odn"});
List<DataLog> allTasks = taskService.getAllTasks();
for (DataLog dataLog : allTasks) {
if (box.startsWith(dataLog.getBarcode()) && !dataLog.isFinished() && !dataLog.isCancel()) {
return ResultBean.newErrorResult(-1, "", box + "有正在执行的任务,请核实");
}
}
List<StoragePos> posList = storagePosManager.findByQuery(new Query(Criteria.where("barcode.lockName").is(odn)));
if (posList != null && !posList.isEmpty()){
for (StoragePos storagePos : posList) {
Barcode barcode = storagePos.getBarcode();
barcode.setOrderId("");
barcode.setOrderItemId("");
barcode.setLockId("");
barcode.setLockName("");
barcodeManager.save(barcode);
storagePos.setBarcode(barcode);
storagePosManager.save(storagePos);
//判断当前工单的料号与出库的是否相同
boolean hasSame = false;
for (LiteOrderItem orderItem : orderItems) {
if (barcode.getPartNumber().equals(orderItem.getPn()) || barcode.getPn().equals(orderItem.getPn())) {
if (StringUtils.isNotBlank(barcode.getWarehouseCode())) {
if (barcode.getWarehouseCode().equals(orderItem.getWarehouseCode())) {
hasSame = true;
}
}
}
return ResultBean.newOkResult("");
}
if (!hasSame) {
return ResultBean.newErrorResult(-1, "", box + "不符合当前odn的料号与库别");
}
@ApiOperation("ODN确认出库")
@RequestMapping("/odnConfirmOut")
@AnonymousAccess
public synchronized ResultBean odnConfirmOut(String odn) {
//生成出库任务
List<StoragePos> posList = storagePosManager.findByQuery(new Query(Criteria.where("barcode.lockName").is(odn)));
for (StoragePos storagePos : posList) {
Storage storage = dataCache.getStorageById(storagePos.getStorageId());
Barcode barcode = storagePos.getBarcode();
DataLog dataLog = new DataLog(storage, barcode, storagePos);
dataLog.setSourceId(barcode.getLockId());
dataLog.setSourceName(barcode.getLockName());
dataLog.setSubSourceId(barcode.getOrderItemId());
dataLog.setType(OP.CHECKOUT);
dataLog.setStatus(OP_STATUS.WAIT.name());
taskService.updateQueueTask(dataLog);
StoragePos pos = storagePosManager.getByBarcode(barcode.getBarcode());
if (pos == null) {
return ResultBean.newErrorResult(-1, "", box + "不在库位中,请核实");
}
return ResultBean.newOkResult("");
storagePosList.add(pos);
}
}
liteOrderCache.odnCheckOut(odn,storagePosList);
return ResultBean.newOkResult(Arrays.asList("111","222"));
}
@ApiOperation("人员调用wms手动解绑")
@RequestMapping("/unBindPallet")
@AnonymousAccess
//@AnonymousAccess
public ResultBean unBindPallet() {
return ResultBean.newOkResult("");
......
......@@ -151,7 +151,7 @@ api:
brandQtyUrl: http://10.68.30.22:8082/api/wcs/brandQty
#自动仓获取ODN单信息
fetchShipmentInfo: http://10.68.30.22:8082/api/FetchShipment
fetchShipmentInfo: http://10.68.30.22:8082/api/mlb/FetchShipment
#储位转移
binMove: http://10.68.30.22:8082/api/mlb/BinMove
......
......@@ -151,7 +151,7 @@ api:
brandQtyUrl: http://10.42.220.171:8082/api/mlb/brandQty
#自动仓获取ODN单信息
fetchShipmentInfo: http://10.42.220.171:8082/api/FetchShipment
fetchShipmentInfo: http://10.42.220.171:8082/api/mlb/FetchShipment
#储位转移
binMove: http://10.42.220.171:8082/api/mlb/BinMove
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!