Commit d7dfa33d zshaohui

1.增加物料追溯接口

2.半成品仓odn出库修改
1 个父辈 ae524b11
...@@ -223,13 +223,15 @@ public class DataInitManager { ...@@ -223,13 +223,15 @@ public class DataInitManager {
addNewFunctionMenu(1, wip, "manualWork", "人工作业", "manualWork", "SemiFinishProducts/manualWork/index", "manualWork", functionMenuMap); 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设置 //MSD管理:MSD库存.MSD追溯性.MSD设置
Menu msd = Menu.CreatePMenu("MSD管理", 2, "msd", 2, "MSD",null); Menu msd = Menu.CreatePMenu("MSD管理", 2, "msd", 2, "MSD",null);
...@@ -278,6 +280,8 @@ public class DataInitManager { ...@@ -278,6 +280,8 @@ public class DataInitManager {
addNewFunctionMenu(82,pMenuReport,"pkSearch","PK查询","pkSearch","neolight/pkSearch/index","findOut",functionMenuMap); addNewFunctionMenu(82,pMenuReport,"pkSearch","PK查询","pkSearch","neolight/pkSearch/index","findOut",functionMenuMap);
addNewFunctionMenu(83,pMenuReport,"sysInReport","盘点","sysInReport","neolight/sysInReport/index","mIDList",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); addNewFunctionMenu(84,pMenuReport,"feeding","喂料","feeding","neolight/feeding/index","feeding",functionMenuMap);
......
...@@ -853,7 +853,7 @@ public class LiteOrderCache { ...@@ -853,7 +853,7 @@ public class LiteOrderCache {
Collection<LiteOrder> liteOrders = getAllLiteOrder(); Collection<LiteOrder> liteOrders = getAllLiteOrder();
if (liteOrders != null && !liteOrders.isEmpty()) { if (liteOrders != null && !liteOrders.isEmpty()) {
for (LiteOrder liteOrder : liteOrders) { for (LiteOrder liteOrder : liteOrders) {
if (!liteOrder.isTaskFinished() && !liteOrder.isNew() && !liteOrder.isClosed()) { if (liteOrder.isOutTails()) {
return liteOrder.getOrderNo(); return liteOrder.getOrderNo();
} }
} }
...@@ -920,11 +920,11 @@ public class LiteOrderCache { ...@@ -920,11 +920,11 @@ public class LiteOrderCache {
Collection excludeIdList = excludeOutPosIds(); Collection excludeIdList = excludeOutPosIds();
//7.判断是否指定的itemId //7.判断是否指定的itemId
if (orderItemIds != null && !orderItemIds.isEmpty()) { /*if (orderItemIds != null && !orderItemIds.isEmpty()) {
if (!orderItemIds.contains(orderItem.getId())) { if (!orderItemIds.contains(orderItem.getId())) {
continue; continue;
} }
} }*/
//8.设置出库数量和出库盘数(超发和不超发) //8.设置出库数量和出库盘数(超发和不超发)
int outReelCount = 0; int outReelCount = 0;
...@@ -972,8 +972,10 @@ public class LiteOrderCache { ...@@ -972,8 +972,10 @@ public class LiteOrderCache {
//判断禁用料信息 //判断禁用料信息
for (Barcode subCode : subCodeList) { for (Barcode subCode : subCodeList) {
if (disablePosNameList.contains(subCode.getPosName())) { if (disablePosNameList != null && !disablePosNameList.isEmpty()) {
continue; if (disablePosNameList.contains(subCode.getPosName())) {
continue;
}
} }
try { try {
smfApi.canPutInAfterResolve(subCode); smfApi.canPutInAfterResolve(subCode);
...@@ -989,9 +991,11 @@ public class LiteOrderCache { ...@@ -989,9 +991,11 @@ public class LiteOrderCache {
List<String> subCodeIds = new ArrayList<>(); List<String> subCodeIds = new ArrayList<>();
for (Barcode subCode : subCodeList) { for (Barcode subCode : subCodeList) {
if (disablePosNameList.contains(subCode.getPosName())) { if (disablePosNameList != null && !disablePosNameList.isEmpty()){
continue; if (disablePosNameList.contains(subCode.getPosName())) {
} continue;
}
}
if (outReelCount >= orderItem.getNeedReelCount() && outNumCount >= orderItem.getNeedNum()) { if (outReelCount >= orderItem.getNeedReelCount() && outNumCount >= orderItem.getNeedNum()) {
break; break;
...@@ -1199,96 +1203,84 @@ public class LiteOrderCache { ...@@ -1199,96 +1203,84 @@ public class LiteOrderCache {
return lackItems; 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); LiteOrder cacheOrder = liteOrderMap.get(orderNo);
if (cacheOrder == null) { if (cacheOrder == null) {
cacheOrder = liteOrderManager.findByOrderNo(orderNo); cacheOrder = liteOrderManager.findByOrderNo(orderNo);
} }
if (cacheOrder == null) { if (cacheOrder == null) {
log.info("未找到工单:" + orderNo + "的信息");
throw new ValidateException("smfcore.order.out.notFound", "未找到工单"); 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()) { if (!cacheOrder.isTaskFinished() && !cacheOrder.isNew()) {
log.info("工单:" + orderNo + "正在执行中");
throw new ValidateException("smfcore.order.out.executing", "工单正在执行"); throw new ValidateException("smfcore.order.out.executing", "工单正在执行");
} }
//3.设置工单状态 log.info("开始执行工单:" + orderNo);
cacheOrder.setTaskReelCount(0); cacheOrder.setTaskReelCount(0);
cacheOrder.setFinishedReelCount(0); cacheOrder.setFinishedReelCount(0);
cacheOrder.setStatus(LITEORDER_STATUS.TAILS); cacheOrder.setStatus(LITEORDER_STATUS.TAILS);
//4.获取料仓id CHECKOUT_TYPE checkoutType = dataCache.getCheckOutType();
List<String> storageIdList = new ArrayList<>(); List<String> storageIdList = new ArrayList<>();
for (Storage storage : dataCache.getAllStorage().values()) { for (Storage storage : dataCache.getAllStorage().values()) {
storageIdList.add(storage.getId()); storageIdList.add(storage.getId());
} }
//查找用户所输入的料箱信息 int taskReelCount = 0;
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();
//4.开始循环处理
for (LiteOrderItem orderItem : cacheOrder.getOrderItems()) { for (LiteOrderItem orderItem : cacheOrder.getOrderItems()) {
//5.判断剩余数量
int remainNum = orderItem.getTotalOutNum() - orderItem.getOutNum();
int assignReelNum = 0;
String pn = orderItem.getPn(); String partNumber = orderItem.getPn();
String warehouseCode = orderItem.getWarehouseCode();
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) { while (taskNum < remainNum) {
Collection<String> excludePosIds = taskService.excludePosIds(); Collection<String> excludePosIds = excludeOutPosIds();
StoragePos storagePos = storagePosManager.findOdnPnInStorages(storageIdList,"" ,pn, excludePosIds, checkoutType); StoragePos pos = storagePosManager.findPartNumberInStorages(storageIdList, partNumber, excludePosIds, checkoutType, orderItem.getBrand());
if (storagePos == null) { if (pos == null) {
break; 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", "工单无可执行的任务");
}
cacheOrder.setTaskReelCount(taskReelCount);
liteOrderManager.save(cacheOrder);
liteOrderMap.put(cacheOrder.getOrderNo(), cacheOrder);
log.info("生成工单" + orderNo + "任务结束,数量为:" + taskReelCount);
} }
public synchronized void wipTicketOut(String orderNo) { public void odnCheckOut(String orderNo,List<StoragePos> storagePosList) {
LiteOrder cacheOrder = liteOrderMap.get(orderNo); LiteOrder cacheOrder = liteOrderMap.get(orderNo);
if (cacheOrder == null) { if (cacheOrder == null) {
cacheOrder = liteOrderManager.findByOrderNo(orderNo); cacheOrder = liteOrderManager.findByOrderNo(orderNo);
...@@ -1330,8 +1322,26 @@ public class LiteOrderCache { ...@@ -1330,8 +1322,26 @@ public class LiteOrderCache {
while (taskNum < remainNum) { while (taskNum < remainNum) {
Collection<String> excludePosIds = excludeOutPosIds(); 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) { if (pos == null) {
break; break;
} else { } else {
......
...@@ -37,6 +37,8 @@ public interface IStoragePosManager extends IBaseManager<StoragePos> { ...@@ -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 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); StoragePos findPartNumberInStorages(List<String> storageIdList, String pn, Collection<String> excludePosIds, CHECKOUT_TYPE checkOutType,String brand);
List<StoragePos> findByQuery(Query query, Pageable pageable); List<StoragePos> findByQuery(Query query, Pageable pageable);
......
...@@ -374,6 +374,10 @@ public class StoragePosManagerImpl implements IStoragePosManager { ...@@ -374,6 +374,10 @@ public class StoragePosManagerImpl implements IStoragePosManager {
@Override @Override
public StoragePos findPartNumberInStorages(List<String> storageIdList, String pn, Collection<String> excludePosIds, CHECKOUT_TYPE checkOutType, String brand) { 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) Criteria c = Criteria.where("barcode.partNumber").is(pn)
.and("id").nin(excludePosIds) .and("id").nin(excludePosIds)
.and("enabled").is(true)//可用 .and("enabled").is(true)//可用
...@@ -384,9 +388,12 @@ public class StoragePosManagerImpl implements IStoragePosManager { ...@@ -384,9 +388,12 @@ public class StoragePosManagerImpl implements IStoragePosManager {
if (StringUtils.isNotBlank(brand)) { if (StringUtils.isNotBlank(brand)) {
c.and("barcode.provider").is(brand); c.and("barcode.provider").is(brand);
} }
if (StringUtils.isNotBlank(wareHouseCode)){
c.and("barcode.warehouseCode").is(wareHouseCode);
}
Query q = new Query(c); Query q = new Query(c);
//Sort sort = getSortByCheckOutType(checkOutType); //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); q.with(sort);
StoragePos pos = storagePosDao.findOne(q); StoragePos pos = storagePosDao.findOne(q);
if (pos == null) { if (pos == null) {
......
...@@ -169,7 +169,7 @@ public class BinCacheUtil { ...@@ -169,7 +169,7 @@ public class BinCacheUtil {
List<String> emptyBoxList = new ArrayList<>(); List<String> emptyBoxList = new ArrayList<>();
List<DataLog> allTasks = taskService.getAllTasks(); List<DataLog> allTasks = taskService.getAllTasks();
for (DataLog dataLog : allTasks) { for (DataLog dataLog : allTasks) {
if (dataLog.isCheckOutTask() && !dataLog.isCancel()) { if (dataLog.isCheckOutTask() && !dataLog.isCancel() && !dataLog.isFinished()) {
if (source.equals(dataLog.getCurrentLoc())) { if (source.equals(dataLog.getCurrentLoc())) {
log.info("找到当前工位上的料箱为:" + dataLog.getBarcode() + ",位置为:" + dataLog.getCurrentLoc()); log.info("找到当前工位上的料箱为:" + dataLog.getBarcode() + ",位置为:" + dataLog.getCurrentLoc());
emptyBoxList.add(dataLog.getBarcode()); emptyBoxList.add(dataLog.getBarcode());
......
...@@ -171,7 +171,7 @@ public class BoxHandleUtil { ...@@ -171,7 +171,7 @@ public class BoxHandleUtil {
List<Criteria> criteriaList = new ArrayList<>(); List<Criteria> criteriaList = new ArrayList<>();
for (String needBinCodeStr : needBinCodeList) { 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); criteriaList.add(criteria);
} }
c.orOperator(criteriaList); c.orOperator(criteriaList);
......
...@@ -2,6 +2,8 @@ package com.neotel.smfcore.custom.luxsan.factory_c.third; ...@@ -2,6 +2,8 @@ package com.neotel.smfcore.custom.luxsan.factory_c.third;
import com.neotel.smfcore.common.bean.ResultBean; import com.neotel.smfcore.common.bean.ResultBean;
import com.neotel.smfcore.core.device.util.DataCache; 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 com.neotel.smfcore.security.annotation.AnonymousAccess;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.Data; import lombok.Data;
...@@ -18,28 +20,25 @@ import java.util.Map; ...@@ -18,28 +20,25 @@ import java.util.Map;
@RestController @RestController
@RequestMapping("/material/api") @RequestMapping("/material/api")
public class MaterialRestController { public class MaterialRestController {
public static final String CACHE_MATERIAL_LOC = "CACHE_MATERIAL_LOC";
@Autowired
private DataCache dataCache;
@ApiOperation("更新料串位置") @ApiOperation("更新料串位置")
@RequestMapping("/updateLoc") @RequestMapping("/updateLoc")
@AnonymousAccess @AnonymousAccess
public ResultBean updateLoc(@RequestBody Map<String,String> paramMap){ public ResultBean updateLoc(@RequestBody Map<String, String> paramMap) {
String materialStr = paramMap.get("materialStr"); String materialStr = paramMap.get("materialStr");
String loc = paramMap.get("loc"); 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); return ResultBean.newOkResult("");
if (cacheMap == null){ }
cacheMap = new HashMap<>();
}
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();
}
}
...@@ -151,7 +151,7 @@ api: ...@@ -151,7 +151,7 @@ api:
brandQtyUrl: http://10.68.30.22:8082/api/wcs/brandQty brandQtyUrl: http://10.68.30.22:8082/api/wcs/brandQty
#自动仓获取ODN单信息 #自动仓获取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 binMove: http://10.68.30.22:8082/api/mlb/BinMove
......
...@@ -151,7 +151,7 @@ api: ...@@ -151,7 +151,7 @@ api:
brandQtyUrl: http://10.42.220.171:8082/api/mlb/brandQty brandQtyUrl: http://10.42.220.171:8082/api/mlb/brandQty
#自动仓获取ODN单信息 #自动仓获取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 binMove: http://10.42.220.171:8082/api/mlb/BinMove
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!