Commit ad6cd77e sunke

产线补料和补料料盘出库功能

1 个父辈 dd9699b8
......@@ -230,6 +230,11 @@
<artifactId>commons-httpclient</artifactId>
<version>3.1</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.1.1</version>
</dependency>
</dependencies>
......
......@@ -44,6 +44,11 @@ public class DataInitManager {
@Autowired
MainTimer mainTimer;
//@Value("${menu.show}")
private String[] menuShowList = new String[]{"productionLineReple","productionLineOut"};
//@Value("${menu.hide}")
private String[] menuHideList = new String[]{};
@Autowired
PermissionInitUtil annotationUtil;
......@@ -74,46 +79,24 @@ public class DataInitManager {
String userName = Constants.SUPER_USERNAME;
User admin = userManager.findByUserName(userName);
if (admin == null) {
log.info("开始创建默认菜单...");
Set<String> menuIdSet = MenuInitNew();
log.info("开始创建默认用户...");
Set<String> groupIds = new HashSet<>();
Role role = new Role(menuIdSet, Constants.ROLE_ADMIN, "管理员");
Role role = new Role(new HashSet<>(), "admin", "admin");
role = roleManager.save(role);
log.info("创建默认角色:" + role.toString());
Role operator = new Role(menuIdSet, Constants.ROLE_OPERATOR, "操作员");
Role operator = new Role(new HashSet<>(), "operator", "operator");
operator = roleManager.save(operator);
log.info("创建默认角色:" + operator.toString());
admin = new User(userName, "admin@qq.com", "zh-CN", role.getId(), "$2a$10$Egp1/gvFlt7zhlXVfEFw4OfWQCGPw0ClmMcc6FjTnvXNRVf9zdMRa", true, true, new Date(), groupIds, "","");
userManager.save(admin);
admin = new User(userName, "admin@qq.com", "zh-CN", role.getId(),"$2a$10$Egp1/gvFlt7zhlXVfEFw4OfWQCGPw0ClmMcc6FjTnvXNRVf9zdMRa", true, true, new Date(), groupIds, "","");
admin = userManager.save(admin);
log.info("创建默认用户:" + admin.toString());
log.info("创建默认菜单完成...");
} else {
log.info("初始化环境完成...");
}
List<Menu> helpMenus = menuManager.findByQuery(new Query(Criteria.where("title").is("帮助")));
if (helpMenus == null || helpMenus.size() <= 0) {
Menu helpAbout = Menu.CreatePMenu("帮助", 30, "help", 2, "help");
Menu instruMenu = new Menu(new ArrayList<Menu>(), 1, "instruction", "说明书", 1, "instruction", "system/instruction/index", "", 0, "aboutBook");
Menu aboutMenu = new Menu(new ArrayList<Menu>(), 1, "about", "关于", 1, "about", "system/about/index", "", 0, "message");
createMenus(helpAbout, instruMenu, aboutMenu);
}
List<Menu> menus = menuManager.findByQuery(new Query(Criteria.where("path").ne("")));
for (Menu me : menus
) {
if (me.getTitleKey() == null || me.getTitleKey() == "") {
me.setTitleKey(me.getPath());
menuManager.saveMenu(me);
}
}
updateMenu(menuShowList,menuHideList);
mainTimer.init();
......@@ -130,162 +113,89 @@ public class DataInitManager {
Message message=Message.newMsg(MessageType.INFO ,"server", "", "", "smfcore.messages.serverStart","服务器启动",null);
messageManager.save(message);
} catch (Exception exception) {
log.error("初始化环境出错..." + exception.toString());
log.error("初始化环境出错..." , exception);
}
}
private int sortValue=0;
private List<Menu> createMenus(Menu pMenu,Menu... subMenus) {
List<Menu> list = new ArrayList<Menu>();
try {
sortValue++;
pMenu.setSubCount(subMenus.length);
pMenu.setMenuSort(sortValue * 10);
if (pMenu.getPath().isEmpty()) {
pMenu.setPath("sys-" + sortValue * 10);
}
pMenu = menuManager.saveMenu(pMenu);
list.add(pMenu);
// list.addAll(createSubPerMenus(pMenu));
if (subMenus.length > 0) {
int i = 0;
for (Menu subm : subMenus
) {
List<Menu> childMenus = new ArrayList<>();
if (subm.getChildren() != null) {
childMenus = new ArrayList<>(subm.getChildren());
}
i++;
int subSort = sortValue * 10 + i;
subm.setMenuSort(subSort);
subm.setSubCount(childMenus.size());
subm.setPid(pMenu.getId());
subm.setChildren(new ArrayList<>());
subm = menuManager.saveMenu(subm);
list.add(subm);
// list.addAll(createSubPerMenus(subm));
for (Menu childMenu : childMenus) {
i++;
subSort = sortValue * 10 + i;
childMenu.setMenuSort(subSort);
childMenu.setSubCount(0);
childMenu.setPid(subm.getId());
childMenu.setChildren(new ArrayList<>());
childMenu = menuManager.saveMenu(childMenu);
list.add(childMenu);
}
}
}
} catch (Exception ex) {
log.error("创建菜单【" + pMenu.getTitle() + "】及其子菜单时出错:" + ex.toString());
}
return list;
private void addNewFunctionMenu(Menu parentMenu,final List<Menu> children,final Integer type, final String permission, final String title, final Integer menuSort, final String path, final String component, final String pid, final Integer subCount, final String icon, Map<String,Menu> functionMenuMap){
Menu menu = new Menu(children,type, permission, title, menuSort,path, component, pid, subCount, icon);
menu.setParentMenu(parentMenu);
functionMenuMap.put(menu.getPath(), menu);
}
private Set<String> MenuInitNew() {
private Map<String,Menu> getAllMenuMap() {
List<Menu> menus = new ArrayList<Menu>();
// //设备看板
// Menu menukanban = new Menu(new ArrayList<Menu>(), 1, "boxkanban", "设备看板", 1, "lockMaterial", "lockMaterial/material/index", "", 0, "kanban");
// menus.addAll(createMenus(menukanban));
Map<String,Menu> functionMenuMap = new HashMap<>();
//物料管理:工单出库,查找出库(UID出库,PN出库),物料标签,料盒操作,出库策略,工单设置
Menu poutOut = Menu.CreatePMenu("物料管理", 20, "order", 2, "workOrder");
// Menu menuOrder = new Menu(new ArrayList<Menu>(), 1, "workOrder", "工单出库", 1, "workOrder", "neolight/workOrder/index", "", 0, "orderOut");
// Menu menuOrder = new Menu(new ArrayList<Menu>(), 1, "billworkOrder", "工单", 1, "billworkOrder", "neolight/billworkOrder/index", "", 0, "orderOut");
Menu out = Menu.CreatePMenu("查找出库", 20, "searchOut", 2, "findOut");
Menu menuOut = new Menu(new ArrayList<Menu>(), 1, "checkOut", "UID出库", 1, "singleOuput", "neolight/singleOuput/index", "", 0, "export1");
Menu celueOut = new Menu(new ArrayList<Menu>(), 1, "tacticsOuput", "PN出库", 1, "tacticsOuput", "neolight/tacticsOuput/index", "", 0, "tacticsOuput");
Menu mslOut = new Menu(new ArrayList<Menu>(), 1, "mslOut", "湿敏管理", 1, "mslOut", "neolight/mslOut/index", "", 0, "tacticsOuput");
celueOut.setHidden(true);
out.setChildren(Arrays.asList((new Menu[]{menuOut,celueOut,mslOut})));
// Menu reelOut = new Menu(new ArrayList<Menu>(), 1, "reelOut", "料盘出库", 1, "reelOut", "system/reelOut/index", "", 0, "swagger");
Menu posOut = new Menu(new ArrayList<Menu>(), 1, "posOutput", "库位出库", 1, "posOutput", "system/posOutput/index", "", 0, "swagger");
Menu groupOut = new Menu(new ArrayList<Menu>(), 1, "labelOuput", "物料标签", 1, "labelOuput", "neolight/labelOuput/index", "", 0, "mgroup");
Menu materialBox = new Menu(new ArrayList<Menu>(), 1, "materialBox", "料盒操作", 1, "materialBox", "neolight/materialBox/index", "", 0, "mIbox");
Menu outSet = new Menu(new ArrayList<Menu>(), 1, "outSetting", "出库策略", 1, "outSetting", "system/outSetting/index", "", 0, "outSet");
Menu inOrderMenu= new Menu(new ArrayList<Menu>(), 1, "inList", "入库单", 1, "inList", "system/inList/index", "", 0, "headIcon");
Menu zhuanruMenu= new Menu(new ArrayList<Menu>(), 1, "dumpWarehousing", "转储入库", 1, "dumpWarehousing", "system/dumpWarehousing/index", "", 0, "dumpWarehousing");
Menu singleMenu= new Menu(new ArrayList<Menu>(), 1, "singleDiskWarehousing", "单盘入库", 1, "singleDiskWarehousing", "system/singleDiskWarehousing/index", "", 0, "singleDiskWarehousing");
Menu sluggishMaterials= new Menu(new ArrayList<Menu>(), 1, "sluggishMaterials", "呆滞物料", 1, "sluggishMaterials", "system/sluggishMaterials/index", "", 0, "sMaterial");
Menu safetyInventory= new Menu(new ArrayList<Menu>(), 1, "safetyInventory", "安全库存", 1, "safetyInventory", "system/safetyInventory/index", "", 0, "safeInventory");
Menu outListMenu= new Menu(new ArrayList<Menu>(), 1, "outList", "转储出库", 1, "outList", "system/outList/index", "", 0, "outList");
Menu orderSetMenu= new Menu(new ArrayList<Menu>(), 1, "orderSet", "齐套", 1, "orderSet", "system/orderSet/index", "", 0, "outS");
groupOut.setHidden(true);
materialBox.setHidden(true);
outSet.setHidden(true);
posOut.setHidden(true);
// menus.addAll(createMenus(poutOut, menuOrder, out,reelOut,posOut,groupOut,materialBox,outSet,inOrderMenu,zhuanruMenu,singleMenu,sluggishMaterials,safetyInventory,outListMenu,orderSetMenu));
menus.addAll(createMenus(poutOut, out,posOut,groupOut,materialBox,outSet,inOrderMenu,zhuanruMenu,singleMenu,sluggishMaterials,safetyInventory,outListMenu,orderSetMenu));
Menu orderM = Menu.CreatePMenu("工单管理", 20, "orderManager", 2, "orderManager");
Menu menuOrder = new Menu(new ArrayList<Menu>(), 1, "billworkOrder", "工单", 1, "billworkOrder", "neolight/billworkOrder/index", "", 0, "orderOut");
Menu reelOut = new Menu(new ArrayList<Menu>(), 1, "reelOut", "工单料盘出库", 1, "reelOut", "system/reelOut/index", "", 0, "swagger");
Menu orderSheetMenu = new Menu(new ArrayList<Menu>(), 1, "orderSheet", "工单合单", 1, "orderSheet", "system/orderSheet/index", "", 0, "orderSheet");
Menu orderShortageOutMenu = new Menu(new ArrayList<Menu>(), 1, "orderShortageOut", "工单欠料发料", 1, "orderShortageOut", "system/orderShortageOut/index", "", 0, "orderShortageOut");
Menu orderShortageSheetMenu = new Menu(new ArrayList<Menu>(), 1, "orderShortageSheet", "合单欠料", 1, "orderShortageSheet", "system/orderShortageSheet/index", "", 0, "orderShortageSheet");
// orderSheetMenu.setHidden(true);
// orderShortageOutMenu.setHidden(true);
// orderShortageSheetMenu.setHidden(true);
menus.addAll(createMenus(orderM,menuOrder,reelOut,orderSheetMenu,orderShortageOutMenu,orderShortageSheetMenu));
Menu poutOut = Menu.CreatePMenu("物料管理", 20, "order", 2, "workOrder", null);
Menu out = Menu.CreatePMenu("查找出库", 20, "searchOut", 2, "findOut",poutOut);
addNewFunctionMenu(out,new ArrayList<Menu>(), 1, "checkOut", "UID出库", 1, "singleOuput", "neolight/singleOuput/index", "", 0, "export1",functionMenuMap);
addNewFunctionMenu(out,new ArrayList<Menu>(), 1, "tacticsOuput", "PN出库", 1, "tacticsOuput", "neolight/tacticsOuput/index", "", 0, "tacticsOuput",functionMenuMap);
addNewFunctionMenu(out,new ArrayList<Menu>(), 1, "mslOut", "湿敏管理", 1, "mslOut", "neolight/mslOut/index", "", 0, "tacticsOuput",functionMenuMap);
addNewFunctionMenu(out,new ArrayList<Menu>(), 1, "posOutput", "库位出库", 1, "posOutput", "system/posOutput/index", "", 0, "swagger",functionMenuMap);
addNewFunctionMenu(out,new ArrayList<Menu>(), 1, "labelOuput", "物料标签", 1, "labelOuput", "neolight/labelOuput/index", "", 0, "mgroup",functionMenuMap);
addNewFunctionMenu(out,new ArrayList<Menu>(), 1, "materialBox", "料盒操作", 1, "materialBox", "neolight/materialBox/index", "", 0, "mIbox",functionMenuMap);
addNewFunctionMenu(out,new ArrayList<Menu>(), 1, "outSetting", "出库策略", 1, "outSetting", "system/outSetting/index", "", 0, "outSet",functionMenuMap);
addNewFunctionMenu(out,new ArrayList<Menu>(), 1, "inList", "入库单", 1, "inList", "system/inList/index", "", 0, "headIcon",functionMenuMap);
addNewFunctionMenu(out,new ArrayList<Menu>(), 1, "dumpWarehousing", "转储入库", 1, "dumpWarehousing", "system/dumpWarehousing/index", "", 0, "dumpWarehousing",functionMenuMap);
addNewFunctionMenu(out,new ArrayList<Menu>(), 1, "singleDiskWarehousing", "单盘入库", 1, "singleDiskWarehousing", "system/singleDiskWarehousing/index", "", 0, "singleDiskWarehousing",functionMenuMap);
addNewFunctionMenu(out,new ArrayList<Menu>(), 1, "sluggishMaterials", "呆滞物料", 1, "sluggishMaterials", "system/sluggishMaterials/index", "", 0, "sMaterial",functionMenuMap);
addNewFunctionMenu(out,new ArrayList<Menu>(), 1, "safetyInventory", "安全库存", 1, "safetyInventory", "system/safetyInventory/index", "", 0, "safeInventory",functionMenuMap);
addNewFunctionMenu(out,new ArrayList<Menu>(), 1, "outList", "转储出库", 1, "outList", "system/outList/index", "", 0, "outList",functionMenuMap);
addNewFunctionMenu(out,new ArrayList<Menu>(), 1, "orderSet", "齐套", 1, "orderSet", "system/orderSet/index", "", 0, "outS",functionMenuMap);
Menu orderM = Menu.CreatePMenu("工单管理", 20, "orderManager", 2, "orderManager", null);
addNewFunctionMenu(orderM,new ArrayList<Menu>(), 1, "billworkOrder", "工单", 1, "billworkOrder", "neolight/billworkOrder/index", "", 0, "orderOut",functionMenuMap);
addNewFunctionMenu(orderM,new ArrayList<Menu>(), 1, "reelOut", "工单料盘出库", 1, "reelOut", "system/reelOut/index", "", 0, "swagger",functionMenuMap);
addNewFunctionMenu(orderM,new ArrayList<Menu>(), 1, "orderSheet", "工单合单", 1, "orderSheet", "system/orderSheet/index", "", 0, "orderSheet",functionMenuMap);
addNewFunctionMenu(orderM,new ArrayList<Menu>(), 1, "orderShortageOut", "工单欠料发料", 1, "orderShortageOut", "system/orderShortageOut/index", "", 0, "orderShortageOut",functionMenuMap);
addNewFunctionMenu(orderM,new ArrayList<Menu>(), 1, "orderShortageSheet", "合单欠料", 1, "orderShortageSheet", "system/orderShortageSheet/index", "", 0, "orderShortageSheet",functionMenuMap);
//产线补料 :productionLineReple 产线补料出库:productionLineOut
addNewFunctionMenu(orderM,new ArrayList<Menu>(), 1, "productionLineReple", "产线补料", 1, "productionLineReple", "system/productionLineReple/index", "", 0, "orderShortageSheet",functionMenuMap);
addNewFunctionMenu(orderM,new ArrayList<Menu>(), 1, "productionLineOut", "补料料盘出库", 1, "productionLineOut", "system/productionLineOut/index", "", 0, "orderShortageSheet",functionMenuMap);
//MSD管理:MSD库存.MSD追溯性.MSD设置
Menu msd = Menu.CreatePMenu("MSD管理", 20, "msd", 2, "MSD");
Menu msdManage = new Menu(new ArrayList<Menu>(), 1, "msdManage", "MSD库存", 1, "msdManage", "neolight/msdManage/index", "", 0, "MSDManager");
Menu msdData = new Menu(new ArrayList<Menu>(), 1, "msdData", "MSD追溯性", 1, "msdData", "neolight/msdData/index", "", 0, "MSDData");
Menu msdSetting = new Menu(new ArrayList<Menu>(), 1, "msdSetting", "MSD设置", 1, "msdSetting", "neolight/msdSetting/index", "", 0, "MSDSet");
msd.setHidden(true);
menus.addAll(createMenus(msd,msdManage,msdData,msdSetting));
Menu msd = Menu.CreatePMenu("MSD管理", 20, "msd", 2, "MSD", null);
addNewFunctionMenu(msd, new ArrayList<Menu>(), 1, "msdManage", "MSD库存", 1, "msdManage", "neolight/msdManage/index", "", 0, "MSDManager",functionMenuMap);
addNewFunctionMenu(msd, new ArrayList<Menu>(), 1, "msdData", "MSD追溯性", 1, "msdData", "neolight/msdData/index", "", 0, "MSDData",functionMenuMap);
addNewFunctionMenu(msd, new ArrayList<Menu>(), 1, "msdSetting", "MSD设置", 1, "msdSetting", "neolight/msdSetting/index", "", 0, "MSDSet",functionMenuMap);
//锡膏管理:设备概览.库存.追溯性.设置
Menu solderPaste = Menu.CreatePMenu("锡膏管理", 20, "solderPaste", 2, "sMana");
Menu solderPasteKanban = new Menu(new ArrayList<Menu>(), 1, "solderPasteKanban", "设备概览", 1, "solderPasteKanban", "neolight/solderPasteKanban/index", "", 0, "sKanban");
Menu solderPasteManage = new Menu(new ArrayList<Menu>(), 1, "solderPasteManage", "库存", 1, "solderPasteManage", "neolight/solderPasteManage/index", "", 0, "solder");
Menu solderPasteData = new Menu(new ArrayList<Menu>(), 1, "solderPasteData", "追溯性", 1, "solderPasteData", "neolight/solderPasteData/index", "", 0, "sData");
Menu solderPasteSetting = new Menu(new ArrayList<Menu>(), 1, "solderPasteSetting", "设置", 1, "solderPasteSetting", "neolight/solderPasteSetting/index", "", 0, "system");
solderPaste.setHidden(true);
menus.addAll(createMenus(solderPaste,solderPasteKanban,solderPasteManage,solderPasteData,solderPasteSetting));
Menu solderPaste = Menu.CreatePMenu("锡膏管理", 20, "solderPaste", 2, "sMana",null);
addNewFunctionMenu(solderPaste, new ArrayList<Menu>(), 1, "solderPasteKanban", "设备概览", 1, "solderPasteKanban", "neolight/solderPasteKanban/index", "", 0, "sKanban",functionMenuMap);
addNewFunctionMenu(solderPaste, new ArrayList<Menu>(), 1, "solderPasteManage", "库存", 1, "solderPasteManage", "neolight/solderPasteManage/index", "", 0, "solder",functionMenuMap);
addNewFunctionMenu(solderPaste, new ArrayList<Menu>(), 1, "solderPasteData", "追溯性", 1, "solderPasteData", "neolight/solderPasteData/index", "", 0, "sData",functionMenuMap);
addNewFunctionMenu(solderPaste, new ArrayList<Menu>(), 1, "solderPasteSetting", "设置", 1, "solderPasteSetting", "neolight/solderPasteSetting/index", "", 0, "system",functionMenuMap);
//物料管理:元器件,条形码,条码设置
Menu pMenuWl = Menu.CreatePMenu("档案管理", 30, "materiel ", 2, "BOM");
Menu menucom = new Menu(new ArrayList<Menu>(), 1, "component:list", "元器件", 1, "componentParts", "parts/component/index", "", 0, "server");
Menu pMenuWl = Menu.CreatePMenu("档案管理", 30, "materiel ", 2, "BOM",null);
addNewFunctionMenu(pMenuWl, new ArrayList<Menu>(), 1, "component:list", "元器件", 1, "componentParts", "parts/component/index", "", 0, "server",functionMenuMap);
// Menu menubarcode = new Menu(new ArrayList<Menu>(), 1, "barcode:list", "条形码", 1, "barcode", "barcode/barcode/index", "", 0, "chart");
// Menu sysSetting = new Menu(new ArrayList<Menu>(), 1, "barcode", "条码设置", 1, "barcodeSetting", "system/barcodeSetting/index", "", 0, "barcode");
// menus.addAll(createMenus(pMenuWl, menucom, menubarcode,sysSetting));
menus.addAll(createMenus(pMenuWl, menucom));
Menu pMenuBarcode = Menu.CreatePMenu("条形码", 30, "barcodes ", 2, "barcodeMenu");
Menu menubarcode = new Menu(new ArrayList<Menu>(), 1, "barcode:list", "条码管理", 1, "barcode", "barcode/barcode/index", "", 0, "chart");
Menu sysSetting = new Menu(new ArrayList<Menu>(), 1, "barcode", "条码设置", 1, "barcodeSetting", "system/barcodeSetting/index", "", 0, "barcode");
menus.addAll(createMenus(pMenuBarcode, menubarcode,sysSetting));
Menu pMenuBarcode = Menu.CreatePMenu("条形码", 30, "barcodes ", 2, "barcodeMenu",null);
addNewFunctionMenu(pMenuBarcode, new ArrayList<Menu>(), 1, "barcode:list", "条码管理", 1, "barcode", "barcode/barcode/index", "", 0, "chart",functionMenuMap);
addNewFunctionMenu(pMenuBarcode,new ArrayList<Menu>(), 1, "barcode", "条码设置", 1, "barcodeSetting", "system/barcodeSetting/index", "", 0, "barcode",functionMenuMap);
//日志管理:物料日志
Menu pMenuLog = Menu.CreatePMenu("日志管理", 30, "log", 2, "log");
Menu menuLog = new Menu(new ArrayList<Menu>(), 1, "taskLog", "物料日志", 1, "taskLog", "neolight/taskLog/index", "", 0, "education");
Menu msgLog = new Menu(new ArrayList<Menu>(), 1, "message", "消息查询", 1, "message", "neolight/message/index", "", 0, "messagefind");
Menu exceptionLog = new Menu(new ArrayList<Menu>(), 1, "interfaceException", "接口异常", 1, "interfaceException", "neolight/interfaceException/index", "", 0, "interfaceException");
exceptionLog.setHidden(true);
menus.addAll(createMenus(pMenuLog, menuLog,msgLog,exceptionLog));
Menu pMenuLog = Menu.CreatePMenu("日志管理", 30, "log", 2, "log", null);
addNewFunctionMenu(pMenuLog, new ArrayList<Menu>(), 1, "taskLog", "物料日志", 1, "taskLog", "neolight/taskLog/index", "", 0, "education",functionMenuMap);
addNewFunctionMenu(pMenuLog,new ArrayList<Menu>(), 1, "message", "消息查询", 1, "message", "neolight/message/index", "", 0, "messagefind",functionMenuMap);
addNewFunctionMenu(pMenuLog,new ArrayList<Menu>(), 1, "interfaceException", "接口异常", 1, "interfaceException", "neolight/interfaceException/index", "", 0, "interfaceException",functionMenuMap);
// //报表:出入库、库存
// Menu pMenuReport = Menu.CreatePMenu("报表", 30, "report", 2, "inOutData");
......@@ -294,10 +204,9 @@ public class DataInitManager {
// menus.addAll(createMenus(pMenuReport, inOutMenu,inventoryMenu));
//可观测性:物料追踪
Menu guanceMenu = Menu.CreatePMenu("可观测性", 30, "observability", 2, "scanKey");
Menu zuizongMenu = new Menu(new ArrayList<Menu>(), 1, "materialChart", "物料追踪", 1, "materialChart", "neolight/materialChart/index", "", 0, "maChart");
guanceMenu.setHidden(true);
menus.addAll(createMenus(guanceMenu, zuizongMenu));
Menu guanceMenu = Menu.CreatePMenu("可观测性", 30, "observability", 2, "scanKey", null);
addNewFunctionMenu(guanceMenu,new ArrayList<Menu>(), 1, "materialChart", "物料追踪", 1, "materialChart", "neolight/materialChart/index", "", 0, "maChart",functionMenuMap);
// //物联网:共享文件夹
// Menu pMenuWulian = Menu.CreatePMenu("物联网", 30, "internet", 2, "interMenu");
......@@ -307,41 +216,137 @@ public class DataInitManager {
//设置:料仓管理,菜单管理
Menu poutSet = Menu.CreatePMenu("设置", 30, "system", 2, "system");
Menu menuStorage = new Menu(new ArrayList<Menu>(), 1, "storage:list", "设备管理", 1, "bunker", "storage/storage/index", "", 0, "database");
Menu menuStoragePos = new Menu(new ArrayList<Menu>(), 1, "storagePos:list", "库位管理", 1, "storagePos", "storagePos/storagePos/index", "", 0, "tree-table");
Menu menuMenu = new Menu(new ArrayList<Menu>(), 1, "menu:list", "菜单管理", 1, "menu", "system/menu/index", "", 0, "menu");
Menu poutSet = Menu.CreatePMenu("设置", 30, "system", 2, "system",null);
addNewFunctionMenu(poutSet,new ArrayList<Menu>(), 1, "storage:list", "设备管理", 1, "bunker", "storage/storage/index", "", 0, "database",functionMenuMap);
addNewFunctionMenu(poutSet,new ArrayList<Menu>(), 1, "storagePos:list", "库位管理", 1, "storagePos", "storagePos/storagePos/index", "", 0, "tree-table",functionMenuMap);
addNewFunctionMenu(poutSet,new ArrayList<Menu>(), 1, "menu:list", "菜单管理", 1, "menu", "system/menu/index", "", 0, "menu",functionMenuMap);
// Menu sysSet = new Menu(new ArrayList<Menu>(), 1, "sysSetting", "系统设置", 1, "sysSetting", "system/sysSetting/index", "", 0, "sysSet");
// Menu translationSet = new Menu(new ArrayList<Menu>(), 1, "translation", "资源翻译", 1, "translation", "system/translation/index", "", 0, "translation");
// Menu shelfMenu = new Menu(new ArrayList<Menu>(), 1, "shelfSetting", "料架设置", 1, "shelfSetting", "system/shelfSetting/index", "", 0, "translation");
// outSet.setHidden(true);
// orderSet.setHidden(true);
menuMenu.setHidden(true);
// translationSet.setHidden(true);
menus.addAll(createMenus(poutSet, menuStorage, menuStoragePos, menuMenu));
//用户管理:用户管理,角色管理
Menu pMenuUser = Menu.CreatePMenu("用户管理", 30, "userManager", 2, "Steve-Jobs");
Menu menuUser = new Menu(new ArrayList<Menu>(), 1, "user:list", "用户管理", 1, "peoples", "system/user/index", "", 0, "peoples");
Menu menuRole = new Menu(new ArrayList<Menu>(), 1, "role:list", "角色管理", 1, "role", "system/role/index", "", 0, "role");
Menu pMenuUser = Menu.CreatePMenu("用户管理", 30, "userManager", 2, "Steve-Jobs",null);
addNewFunctionMenu(pMenuUser, new ArrayList<Menu>(), 1, "user:list", "用户管理", 1, "peoples", "system/user/index", "", 0, "peoples",functionMenuMap);
addNewFunctionMenu(pMenuUser,new ArrayList<Menu>(), 1, "role:list", "角色管理", 1, "role", "system/role/index", "", 0, "role",functionMenuMap);
menus.addAll(createMenus(pMenuUser, menuUser, menuRole));
Menu helpAbout = Menu.CreatePMenu("帮助", 30, "help", 2, "help");
Menu instruMenu = new Menu(new ArrayList<Menu>(), 1, "instruction", "说明书", 1, "instruction", "system/instruction/index", "", 0, "aboutBook");
Menu aboutMenu = new Menu(new ArrayList<Menu>(), 1, "about", "关于", 1, "about", "system/about/index", "", 0, "message");
instruMenu.setHidden(true);
menus.addAll(createMenus(helpAbout,instruMenu,aboutMenu));
Menu helpAbout = Menu.CreatePMenu("帮助", 30, "help", 2, "help", null);
addNewFunctionMenu(helpAbout, new ArrayList<Menu>(), 1, "instruction", "说明书", 1, "instruction", "system/instruction/index", "", 0, "aboutBook",functionMenuMap);
addNewFunctionMenu(helpAbout, new ArrayList<Menu>(), 1, "about", "关于", 1, "about", "system/about/index", "", 0, "message",functionMenuMap);
Set<String> menuIdSet = new HashSet<String>() {};
for (Menu menu : menus) {
log.info("创建默认菜单:" + menu.toString());
menuIdSet.add(menu.getId());
return functionMenuMap;
}
private void updateMenu(String[] menuListToShow, String[] menuListToHide){
List<Menu> dbMenus = menuManager.findAll();
if(dbMenus.isEmpty()){
log.info("创建默认菜单...");
menuListToShow = new String[]{
"lockMaterial", //设备看板
"singleOuput",
"tacticsOuput",
"outSetting",
"componentParts",
"barcode",
"barcodeSetting",
"taskLog",
//"orderSetting",//工单设置
"inOutData", //报表->出入库
"inventory", //报表->库存
"bunker", //设备管理
"storagePos", //库位管理
//"sysSetting", //系统设置
"peoples", //用户管理
"role" //角色管理
};
}
Map<String, Menu> allMenus = getAllMenuMap();
Set<String> showIdSet = showMenu(allMenus,menuListToShow);
Set<String> hideIdSet = hideMenu(allMenus, menuListToHide);
if(!showIdSet.isEmpty() || !hideIdSet.isEmpty()){
List<Role> roles = roleManager.findByQuery(new Query(Criteria.where("name").is("admin")));
Role roleAdmin = roles.get(0);
Set<String> roleMenus = roleAdmin.getMenus();
roleMenus.addAll(showIdSet);
roleMenus.removeAll(hideIdSet);
roleManager.saveRole(roleAdmin);
}
return menuIdSet;
}
/**
* 展示菜单
*/
private Set<String> showMenu(Map<String, Menu> allMenu, String[] menuListToShow){
Set<String> showIdSet = new HashSet<>();
for (String showPath : menuListToShow) {
Menu showMenu = allMenu.get(showPath);
if(showMenu != null){
showMenu = createMenu(showMenu);
log.info("展示菜单:" + showMenu.getPath());
addToMenuIdSet(showIdSet,showMenu);
}else{
log.error("展示菜单:" + showPath + "不存在");
}
}
return showIdSet;
}
/**
* 循环添加菜单ID(父级菜单也会添加)
*/
private void addToMenuIdSet(Set<String> menuIdSet,Menu menu){
menuIdSet.add(menu.getId());
if(menu.getParentMenu() != null){
addToMenuIdSet(menuIdSet,menu.getParentMenu());
}
}
/**
* 隐藏菜单
*/
private Set<String> hideMenu(Map<String, Menu> allMenu, String[] menuListToHide){
Set<String> hideIdSet = new HashSet<>();
for (String showPath : menuListToHide) {
Menu hideMenu = allMenu.get(showPath);
if(hideMenu != null){
hideMenu = menuManager.findByPath(hideMenu.getPath());
if(hideMenu != null){
hideMenu.setHidden(true);
menuManager.saveMenu(hideMenu);
log.info("隐藏菜单:" + hideMenu.getPath());
addToMenuIdSet(hideIdSet,hideMenu);
}
}else{
log.error("菜单:" + showPath + "不存在");
}
}
return hideIdSet;
}
/**
* 循环创建父级菜单
*/
private Menu createMenu(Menu menu){
Menu dbMenu = menuManager.findByPath(menu.getPath());
if(dbMenu == null){
//数据库不存在,需要插入
Menu parentMenu = menu.getParentMenu();
if(parentMenu != null){
parentMenu = createMenu(parentMenu);
menu.setPid(parentMenu.getId());
menu.setParentMenu(parentMenu);
}
log.info("创建菜单:" + menu.toString());
dbMenu = menuManager.saveMenu(menu);
}
return dbMenu;
}
}
......@@ -18,7 +18,8 @@ import java.util.regex.Pattern;
@Slf4j
public class QueryHelp {
public static <C> Query getQuery(C c){
public static <C> List<Criteria> toCriteria(C c){
//Criteria criteria = new Criteria();
List<Criteria> allCriteria = Lists.newArrayList();
if(c != null){
......@@ -135,6 +136,10 @@ public class QueryHelp {
log.error(e.getMessage(), e);
}
}
return allCriteria;
}
public static <C> Query getQuery(C c){
List<Criteria> allCriteria = toCriteria(c);
if(allCriteria.isEmpty()){
return new Query();
}
......
......@@ -261,11 +261,6 @@ public class NLPShelfHandler extends BaseDeviceHandler{
return ResultBean.newErrorResult(-1,"smfcore.shelfNotExist", "{0}对应的料架不存在",new String[]{cid} );
}
String groupId = storage.getGroupId();
// String groupName = "";
// Group group = groupManager.get(groupId);
// if(group != null){
// groupName = group.getGroupName();
// }
if(groupId.equals("")){
groupId="-1";
}
......@@ -297,10 +292,9 @@ public class NLPShelfHandler extends BaseDeviceHandler{
// }
//数据库有信息,实际无料
if(noReelPosErrorList.length>0){
Query query=new Query(Criteria.where("posName").in(noReelPosErrorList ));
Query query=new Query(Criteria.where("posName").in(noReelPosErrorList));
List<StoragePos> posList= storagePosManager.findByQuery(query);
for (StoragePos pos:posList
) {
for (StoragePos pos:posList) {
if(!pos.isUsed()){
ngToOk.add(pos.getPosName());
log.info("sensorChange 客户端上传 noReelPosErrorList 库位["+pos.getPosName()+"]数据库无信息,放入ngToOk");
......@@ -319,12 +313,9 @@ public class NLPShelfHandler extends BaseDeviceHandler{
List<String> outNgList = new ArrayList<>();
if(hasReelPosList != null){
List<String> newList=new ArrayList<>();
for (String posName :
hasReelPosList) {
for (String posName : hasReelPosList) {
StoragePos pos = storagePosManager.getByPosName(posName);
if(pos==null) {
log.info("sensorChange 未找到库位 hasReelPosList [" + posName + "]");
continue;
......@@ -390,11 +381,11 @@ public class NLPShelfHandler extends BaseDeviceHandler{
try {
//判断是否是入库单入库
if (queueTask.getInType() == 5) {
InList inList = inListCache.getInList(queueTask.getSourceName());
Barcode barcode = barcodeManager.findByBarcode(queueTask.getBarcode());
InListItem item = inListCache.UpdateInList(queueTask.getSourceName(), pos, barcode);
if (item != null) {
InList inList = inListCache.getInList(queueTask.getSourceName());
//入库完成,调用 7.2转储单入库过账接口
TransferOrderInInfo inInfo = new TransferOrderInInfo(inList.getName(), inList.getDocType(), queueTask.getBarcode(), item.getBaseCode(), item.getInLgort(), queueTask.getNum());
boolean result = HikApi.transferOrderInApi(queueTask.getOperator(), inInfo);
......
......@@ -454,15 +454,15 @@ public class LiteOrderCache implements ITaskListener {
if(isShortageOut) {
log.info("工单[" + cacheOrder.getOrderNo() + "]缺料出库: 物料号[" + pn + "] ,需求数量[" + orderItem.getWemng() + "], 未找到元器件信息 ");
shortage = true;
//判断库存 使用最小库存盘数:当前盘数<=最小库存盘数时,需要截料
if(component.getMinStoreNum()>0&& reelNum<=component.getMinStoreNum()){
needJieliao=true;
}
}else {
log.info("工单[" + cacheOrder.getOrderNo() + "] 物料号[" + pn + "] ,需求数量[" + orderItem.getWemng() + "], 未找到元器件信息, 缺料 ");
return materialShortPro(userName, cacheOrder);
}
}
//判断库存 使用最小库存盘数:当前盘数<=最小库存盘数时,需要截料
if(component.getMinStoreNum()>0&& reelNum<=component.getMinStoreNum()){
needJieliao=true;
}
//判断库存数量是否小于需求数量,小于直接返回缺料
if(storageNum<orderItem.getQty()){
if(isShortageOut){
......
......@@ -145,6 +145,7 @@ public class OrderController {
query.addCriteria(Criteria.where("status").is(LITEORDER_STATUS.EXECUTING));
}
}
query.addCriteria(Criteria.where("replenishmentNo").isNull());
PageData<LiteOrder> orderList = liteOrderManager.findByPage(query, pageable);
PageData<OrderDto> resultList = orderMapper.toDto(orderList);
return resultList;
......@@ -320,7 +321,7 @@ public class OrderController {
User user = userManager.findByUserName(SecurityUtils.getCurrentUsername());
//查询正在执行的工单列表
Query query = new Query(Criteria.where("status").is(LITEORDER_STATUS.EXECUTING));
Query query = new Query(Criteria.where("status").is(LITEORDER_STATUS.EXECUTING).and("replenishmentNo").isNull());
//根据开始出库时间排序
Sort sort = Sort.by(Sort.Direction.ASC, "startOutTime");
query.with(sort);
......@@ -480,7 +481,7 @@ public class OrderController {
private List<LiteOrder> getExecuteOrders(User user) {
//查询正在执行的工单列表
Query query = new Query(Criteria.where("status").is(LITEORDER_STATUS.EXECUTING));
Query query = new Query(Criteria.where("status").is(LITEORDER_STATUS.EXECUTING).and("replenishmentNo").isNull());
//根据开始出库时间排序
Sort sort = Sort.by(Sort.Direction.ASC, "startOutTime");
query.with(sort);
......
package com.neotel.smfcore.core.order.rest;
import cn.hutool.core.util.ObjectUtil;
import com.google.common.collect.Lists;
import com.neotel.smfcore.common.bean.PageData;
import com.neotel.smfcore.common.bean.ResultBean;
import com.neotel.smfcore.common.exception.ValidateException;
import com.neotel.smfcore.common.utils.Constants;
import com.neotel.smfcore.common.utils.FileUtil;
import com.neotel.smfcore.common.utils.QueryHelp;
import com.neotel.smfcore.common.utils.SecurityUtils;
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.OrderPnCache;
import com.neotel.smfcore.core.order.bean.OrderBoxInfo;
import com.neotel.smfcore.core.order.bean.OrderPnInfo;
import com.neotel.smfcore.core.order.enums.LITEORDER_STATUS;
import com.neotel.smfcore.core.order.rest.bean.dto.OrderDto;
import com.neotel.smfcore.core.order.rest.bean.dto.OrderPnDto;
import com.neotel.smfcore.core.order.rest.bean.mapstruct.OrderItemMapper;
import com.neotel.smfcore.core.order.rest.bean.mapstruct.OrderMapper;
import com.neotel.smfcore.core.order.rest.bean.mapstruct.OrderPnMapper;
import com.neotel.smfcore.core.order.rest.bean.query.OrderQueryCondition;
import com.neotel.smfcore.core.order.service.manager.ILiteOrderManager;
import com.neotel.smfcore.core.order.service.po.LiteOrder;
import com.neotel.smfcore.core.order.service.po.LiteOrderItem;
import com.neotel.smfcore.core.order.util.OrderFileWatch;
import com.neotel.smfcore.core.system.rest.bean.dto.TaskDto;
import com.neotel.smfcore.core.system.rest.bean.mapstruct.TaskMapper;
import com.neotel.smfcore.core.system.service.po.DataLog;
import com.neotel.smfcore.core.system.util.TaskService;
import com.neotel.smfcore.hikvision.bean.HikOrderInfo;
import com.neotel.smfcore.security.annotation.AnonymousAccess;
import com.neotel.smfcore.security.bean.FileProperties;
import com.neotel.smfcore.security.service.manager.IGroupManager;
import com.neotel.smfcore.security.service.manager.IUserManager;
import com.neotel.smfcore.security.service.po.Group;
import com.neotel.smfcore.security.service.po.User;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.util.ObjectUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.util.*;
@Slf4j
@Api(tags = "产线补料工单管理")
@RestController
@RequestMapping("/api/productionLineReple")
@RequiredArgsConstructor
public class RepleOrderController {
@Autowired
private ILiteOrderManager liteOrderManager;
@Autowired
private IUserManager userManager;
@Autowired
private IGroupManager groupManager;
@Autowired
private final OrderMapper orderMapper;
@Autowired
private final OrderItemMapper orderItemMapper;
@Autowired
private LiteOrderCache liteOrderCache;
@Autowired
private final FileProperties properties;
@Autowired
private OrderFileWatch orderFileWatch;
@Autowired
private DataCache dataCache;
@Autowired
private TaskService taskService;
@Autowired
private TaskMapper taskMapper;
@Autowired
private OrderPnMapper orderPnMapper;
@Autowired
private OrderPnCache orderPnCache;
private String currOrderNo = "";
@ApiOperation("查询补料工单")
@GetMapping
@PreAuthorize("@el.check('productionLineReple')")
public PageData<OrderDto> query(OrderQueryCondition criteria, Pageable pageable) {
//Query query = QueryHelp.getQuery(criteria);
List<Criteria> criteriaList = QueryHelp.toCriteria(criteria);
if (criteria.getStatus() != null) {
if (criteria.getStatus() == 1) {
criteriaList.add(Criteria.where("status").is(LITEORDER_STATUS.CLOSED));
//query.addCriteria(Criteria.where("status").is(LITEORDER_STATUS.CLOSED));
} else if (criteria.getStatus() == 2) {
criteriaList.add(Criteria.where("status").ne(LITEORDER_STATUS.CLOSED));
//query.addCriteria(Criteria.where("status").ne(LITEORDER_STATUS.CLOSED));
}else if(criteria.getStatus() ==3){
criteriaList.add(Criteria.where("status").is(LITEORDER_STATUS.EXECUTING));
//query.addCriteria(Criteria.where("status").is(LITEORDER_STATUS.EXECUTING));
}
}
//query.addCriteria();criteriaList
criteriaList.add(Criteria.where("replenishmentNo").ne(null));
Query query = new Query();
if(!criteriaList.isEmpty()){
query = new Query(new Criteria().andOperator(criteriaList));
}
PageData<LiteOrder> orderList = liteOrderManager.findByPage(query, pageable);
PageData<OrderDto> resultList = orderMapper.toDto(orderList);
return resultList;
}
@ApiOperation("产线补料工单详情")
@GetMapping("/detial")
@PreAuthorize("@el.check('productionLineReple:detial')")
@AnonymousAccess
public OrderDto detial(@RequestParam(required = false) String id, @RequestParam(required = false) String orderNo) {
if (!ObjectUtils.isEmpty(id)) {
LiteOrder liteOrder = liteOrderManager.get(id);
if (liteOrder != null) {
OrderDto dto = orderMapper.toDto(liteOrder);
dto.setOrderItems(orderItemMapper.toDto(liteOrder.getOrderItems()));
return dto;
}
} else if (!ObjectUtils.isEmpty(orderNo)) {
LiteOrder liteOrder = liteOrderManager.findByOrderNo(orderNo);
if (liteOrder != null) {
OrderDto dto = orderMapper.toDto(liteOrder);
dto.setOrderItems(orderItemMapper.toDto(liteOrder.getOrderItems()));
return dto;
}
}
throw new ValidateException("smfcore.valueCanotNull", "{0}不能为空", new String[]{"orderNo"});
}
@ApiOperation("产线补料工单出库")
@PostMapping(value = "/out")
@PreAuthorize("@el.check('productionLineReple')")
public ResultBean checkOut(@RequestBody Map<String, Object> mapValues) {
String orderNo = mapValues.get("orderNo").toString();
boolean isShortageOut=false;
if(mapValues.containsKey("shortageOut")) {
String shortageOut = mapValues.get("shortageOut").toString();
if (ObjectUtil.isNotEmpty(shortageOut) && shortageOut.toString().equals("true")) {
isShortageOut = true;
}
}
if (orderNo == null) {
throw new ValidateException("smfcore.valueCanotNull", "{0}不能为空", new String[]{"orderNo"});
}
LiteOrder liteOrder = liteOrderManager.findByOrderNo(orderNo);
if (liteOrder == null) {
throw new ValidateException("smfcore.valueNotFind", "未找到{0}[{1}]", new String[]{"orderNo", orderNo});
}
String result = liteOrderCache.checkOutLiteOrder(SecurityUtils.getCurrentUsername(), liteOrder.getOrderNo(),isShortageOut,false);
if (ObjectUtil.isEmpty(result)) {
return ResultBean.newOkResult(result);
}
else if(result.equals("smfcore.order.out.short")){
return ResultBean.newErrorResult(99, result, result);
}
else {
return ResultBean.newErrorResult(-1, result, result);
}
}
@ApiOperation("关闭产线补料工单")
@PostMapping(value = "/closeOrder")
@PreAuthorize("@el.check('productionLineReple')")
public ResultBean closeOrder(@RequestBody Map<String, String> mapValues) {
String orderNo = mapValues.get("orderNo");
if (orderNo == null) {
throw new ValidateException("smfcore.valueCanotNull", "{0}不能为空", new String[]{"orderNo"});
}
String result = liteOrderCache.closeOrder(orderNo);
if (ObjectUtil.isEmpty(result)) {
return ResultBean.newOkResult(result, result, result);
} else {
return ResultBean.newErrorResult(-1, result, result);
}
}
@ApiOperation("料盘出库界面,获取执行的工单列表")
@GetMapping("/executeOrders")
@PreAuthorize("@el.check('reelOut')")
public List<OrderDto> queryExecuteOrder() {
//查询正在执行的工单列表
Query query = new Query(Criteria.where("status").is(LITEORDER_STATUS.EXECUTING).and("replenishmentNo").ne(null));
//根据开始出库时间排序
Sort sort = Sort.by(Sort.Direction.ASC, "startOutTime");
query.with(sort);
List<LiteOrder> orderList = liteOrderManager.findByQuery(query);
List<OrderDto> resultList =new ArrayList<>();
boolean findOrder = false;
//只返回当前有任务的工单
for (LiteOrder order : orderList) {
List<DataLog> tasks = getOrderTaskByUser(order, true);
if (tasks.size() > 0) {
OrderDto dto = orderMapper.toDto(order);
dto.setTaskCount(tasks.size());
if (ObjectUtil.isNotEmpty(currOrderNo)) {
if (order.getOrderNo().equals(currOrderNo))
findOrder = true;
dto.setInOperate(true);
}
resultList.add(dto);
}
}
if (ObjectUtil.isNotEmpty(currOrderNo)) {
if (!findOrder) {
log.info("当前产线补料工单 [" + currOrderNo + "] 已不在出库工单列表中,清理当前产线补料");
currOrderNo = "";
}
}
return resultList;
}
@ApiOperation("料盘出库界面,获取当前产线补料任务列表")
@GetMapping("/reelOutTasks")
@PreAuthorize("@el.check('reelOut')")
public List<TaskDto> queryReelOutTasks(@RequestParam Map<String, String> paramsMap) {
//查询正在执行的工单列表
String orderNo = currOrderNo;
if (ObjectUtil.isEmpty(orderNo)) {
return new ArrayList<>();
}
LiteOrder liteOrder = liteOrderManager.findByOrderNo(orderNo);
if (liteOrder == null) {
throw new ValidateException("smfcore.valueNotFind", "未找到{0}[{1}]", new String[]{"orderNo", orderNo});
}
if (liteOrder.isNew() || liteOrder.isClosed()) {
throw new ValidateException("smfcore.order.notExecute", "工单[{0}]不在出库中", new String[]{liteOrder.getOrderNo()});
}
List<DataLog> taskList = getOrderTaskByUser(liteOrder, false);
return taskMapper.toDto(taskList);
}
@ApiOperation("料盘出库界面,切换到下一个工单")
@PostMapping("/nextOrder")
@PreAuthorize("@el.check('reelOut')")
public ResultBean nextOrder(@RequestParam Map<String, String> paramsMap) {
if (ObjectUtil.isNotEmpty(currOrderNo)) {
//判断上个工单是否已完成
LiteOrder preOrder = liteOrderCache.findOrderByNo(currOrderNo);
List<DataLog> preTasks = getOrderTaskByUser(preOrder, true);
if (preTasks.size() > 0) {
return ResultBean.newErrorResult(-1, "smfcore.order.preNotEnd", "工单[" + preOrder.getOrderNo() + "]还有[" + preTasks.size() + "]个出库任务未结束",
new String[]{currOrderNo, preTasks.size() + ""});
}
}
List<LiteOrder> orderList = getExecuteOrders();
if (orderList.size() <= 0) {
return ResultBean.newErrorResult(-1, "smfcore.order.noOrder", "暂无可操作的工单");
}
LiteOrder liteOrder = orderList.get(0);
//设置此工单的任务可以发送给料架
List<DataLog> taskList = getOrderTaskByUser(liteOrder, true);
for (DataLog datalog : taskList) {
datalog.setInOperate(true);
taskService.updateQueueTask(datalog);
}
return ResultBean.newOkResult("smfcore.order.nextOk", "成功切换到下一个工单", "");
}
@ApiOperation("齐套页面,获取齐套数据")
@GetMapping("/orderSet")
@PreAuthorize("@el.check('workOrder')")
public List<OrderPnDto> orderSetData( ) {
List<OrderPnInfo> orderPnInfos=orderPnCache.getDataList();
List<OrderPnDto> dtos=orderPnMapper.toDto(orderPnInfos);
return dtos;
}
@ApiOperation("齐套页面,刷新齐套数据")
@PostMapping("/orderSet/update")
@PreAuthorize("@el.check('workOrder')")
public ResultBean updateOrderSet(HttpServletRequest request ) {
boolean result = orderPnCache.reloadData();
if (!result) {
return ResultBean.newErrorResult(-1, "smfcore.orderSet.reloadData.fail", "刷新数据失败,请稍后再试");
}
List<OrderPnInfo> orderPnInfos = orderPnCache.getDataList();
List<OrderPnDto> dtos = orderPnMapper.toDto(orderPnInfos);
return ResultBean.newOkResult(dtos);
}
@ApiOperation("导出齐套列表")
@GetMapping(value = "/orderSet/download")
@PreAuthorize("@el.check('workOrder')")
public void download(HttpServletResponse response, HttpServletRequest request) throws IOException {
List<OrderPnInfo> orderPnInfos=orderPnCache.getDataList();
download(orderPnInfos,response,request.getLocale());
}
public void download(List<OrderPnInfo> orderPnInfoList, HttpServletResponse response,Locale locale) throws IOException {
String pn = MessageUtils.getText("smfcore.orderSet.barcode", locale, "物料编号");
String lackNum = MessageUtils.getText("smfcore.orderSet.partNumber", locale, "缺料数");
String reelCount = MessageUtils.getText("smfcore.orderSet.proDate", locale, "缺料盘数");
List<Map<String, Object>> list = new ArrayList<>();
for (OrderPnInfo orderPnInfo : orderPnInfoList) {
Map<String, Object> map = new LinkedHashMap<>();
map.put(pn, orderPnInfo.getPartNumber());
map.put(lackNum, orderPnInfo.getLackNum());
map.put(reelCount, orderPnInfo.getReelCount());
list.add(map);
}
FileUtil.downloadExcel(list, response);
}
private List<LiteOrder> getExecuteOrders() {
//查询正在执行的工单列表
Query query = new Query(Criteria.where("status").is(LITEORDER_STATUS.EXECUTING).and("replenishmentNo").not());
//根据开始出库时间排序
Sort sort = Sort.by(Sort.Direction.ASC, "startOutTime");
query.with(sort);
List<LiteOrder> orderList = liteOrderManager.findByQuery(query);
List<LiteOrder> returnList = new ArrayList<>();
//只返回当前有任务的工单
for (LiteOrder order :orderList) {
List<DataLog> taskList = getOrderTaskByUser(order, true);
if (taskList.size() > 0) {
returnList.add(order);
}
}
return returnList;
}
private List<DataLog> getOrderTaskByUser(LiteOrder liteOrder, boolean onlyNotEndTask) {
if (liteOrder.isNew() || liteOrder.isClosed()) {
return new ArrayList<>();
}
//查询正在执行的工单列表
List<DataLog> returnTasks = new ArrayList<>();
List<DataLog> allTasks = taskService.getAllTasks();
for (DataLog datalog : allTasks) {
if(datalog.isAddOutbound()){
continue;
}
//是否需要判断任务是否已结束
if (onlyNotEndTask) {
if (datalog.isEnd() || datalog.isFinished() || datalog.isCancel()) {
continue;
}
}
if (datalog.isOrderTask() && datalog.getSourceId().equals(liteOrder.getId())) {
//判断是否再自己的权限范围内
returnTasks.add(datalog);
}
}
return returnTasks;
}
}
......@@ -12,7 +12,7 @@ import java.util.List;
@Data
public class OrderQueryCondition {
@QueryCondition(blurry = "orderNo,jobNo,replenishmentNo")
@QueryCondition(blurry = "orderNo,jobNo")
private String blurry;
@QueryCondition(type = QueryCondition.Type.BETWEEN)
......
......@@ -175,6 +175,16 @@ public class LiteOrder extends BasePo implements Serializable {
*/
private Boolean complete=false;
/**
* 包含的工单信息,存数据库
*/
private List<String> subWknumList;
/**
* 面别
*/
private String wktype;
public Integer getBoxNum(){
if(boxInfos!=null){
return boxInfos.size();
......@@ -298,6 +308,8 @@ public class LiteOrder extends BasePo implements Serializable {
this.setUpdateDate(new Date());
this.setEndDate(outInfo.getEndD());
this.setWemng(outInfo.getWemng());
this.setWktype(outInfo.getWktype());
this.setSubWknumList(outInfo.getSubWknumList());
if(orderItems==null){
orderItems=new ArrayList<>();
}
......
......@@ -227,8 +227,8 @@ public class OutListCache implements ITaskListener {
boolean shortage=false;
List<String> availableStorageIds = dataCache.getAvailableStorageIds();
Map<String, List<StoragePos>> needOutPosMap = new HashMap<>();//挑出的需要出库的料列表,key=pn,value=库位
Map<String, Integer> jieliaoPosMap = new HashMap<>();//需要截料的物料列表,key=PosName,value=此转储出库单使用数量
Map<String, List<StoragePos>> needOutPosMap = new HashMap<>();//挑出的需要出库的料列表,key=itemId,value=库位
List<String> itemPosNameList = new ArrayList<>();
//获取此转储出库单出库的所有物料
for (OutListItem outListItem : outList.getOutListItems()) {
String pn = outListItem.getMaterialNo();
......@@ -241,9 +241,9 @@ public class OutListCache implements ITaskListener {
//查找PN的所有库存,PN=pn,未锁定,qty 从大到小,入库时间正序
List<StoragePos> posList = storagePosManager.findOrderItemInStorage(availableStorageIds, pn, taskService.excludePosIds());
log.info("共找到"+posList.size()+"盘"+pn+"的物料");
int storageNum = 0;
for (StoragePos pos : posList
) {
for (StoragePos pos : posList) {
storageNum += pos.getBarcode().getAmount();
}
......@@ -271,59 +271,22 @@ public class OutListCache implements ITaskListener {
}
List<StoragePos> itemPosList = new ArrayList<>();
List<String> itemPosNameList = new ArrayList<>();
//此PN未完成
int targetNum = needNum;
for (int i=0;i<posList.size();i++
) {
List<StoragePos> forPosList = new ArrayList<>();
for (StoragePos pos :
posList) {
if (!needOutPosMap.containsKey(pos.getPosName())) {
forPosList.add(pos);
}
}
//循环剩余的库位,查找
int forIndex = -1;
for (StoragePos pos :
forPosList) {
forIndex++;
boolean isLast = (forIndex == (forPosList.size() - 1));
//不需要截料,也不按照整盘比,按照数量满足或最后一盘来出
if (pos.getBarcode().getAmount() >= targetNum || isLast) {
itemPosList.add(pos);
itemPosNameList.add(pos.getPosName());
targetNum -= pos.getBarcode().getAmount();
break;
}
//循环剩余的库位,查找
//int forIndex = -1;
for (StoragePos pos : posList) {
if(!itemPosNameList.contains(pos.getPosName())){
itemPosList.add(pos);
itemPosNameList.add(pos.getPosName());
targetNum -= pos.getBarcode().getAmount();
if (targetNum <= 0) {
break;
}
}
if (targetNum <= 0) {
break;
}
}
// StoragePos tempPos = null;
// for (StoragePos pos :
// posList) {
// //已经在出库列表
// if (itemPosNameList.contains(pos.getPosName())) {
// continue;
// }
// //不需要截料,也不按照整盘比,直接数量最大的发料
// itemPosList.add(pos);
// itemPosNameList.add(pos.getPosName());
// targetNum -= pos.getBarcode().getAmount();
//
// if (targetNum <= 0) {
// break;
// }
// }
//判断数量是否满足
if (targetNum > 0) {
int outNum = needNum - targetNum;
......@@ -337,7 +300,7 @@ public class OutListCache implements ITaskListener {
}
}
//可以出库
needOutPosMap.put(pn, itemPosList);
needOutPosMap.put(outListItem.getId(), itemPosList);
}
log.info("开始执行转储出库单[" + name + "] ");
......@@ -353,9 +316,8 @@ public class OutListCache implements ITaskListener {
for (OutListItem outListItem : outList.getOutListItems()) {
int itemReelCount = 0;
int itemOutCount = 0;
List<StoragePos> posList = needOutPosMap.get(outListItem.getMaterialNo());
for (StoragePos pos :
posList) {
List<StoragePos> posList = needOutPosMap.get(outListItem.getId());
for (StoragePos pos :posList) {
DataLog task = taskService.newTask(pos);
task.setSourceId(outList.getId());
......
......@@ -7,6 +7,8 @@ import com.neotel.smfcore.common.bean.PageData;
import com.neotel.smfcore.common.exception.ValidateException;
import com.neotel.smfcore.common.utils.QueryHelp;
import com.neotel.smfcore.common.utils.SecurityUtils;
import com.neotel.smfcore.core.barcode.bean.CodeBean;
import com.neotel.smfcore.core.barcode.utils.CodeResolve;
import com.neotel.smfcore.core.device.enums.OP_STATUS;
import com.neotel.smfcore.core.device.util.DataCache;
import com.neotel.smfcore.core.storage.service.po.Storage;
......@@ -22,6 +24,7 @@ import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.logging.log4j.util.Strings;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable;
import org.springframework.data.mongodb.core.query.Criteria;
......@@ -58,6 +61,9 @@ public class TaskController {
@Autowired
private IUserManager userManager;
@Autowired
protected CodeResolve codeResolve;
// @ApiOperation("导出用户数据")
// @GetMapping(value = "/download")
// @PreAuthorize("@el.check('user:list')")
......@@ -69,6 +75,12 @@ public class TaskController {
@GetMapping("/history")
@PreAuthorize("@el.check('taskLog')")
public PageData<TaskDto> query(TaskQueryCondition criteria, Pageable pageable) {
String barcode = criteria.getBarcode();
if(Strings.isNotBlank(barcode)){
CodeBean codebean = codeResolve.resolveSingleCode(criteria.getBarcode());
String reelId = codebean.getCodeStr();
criteria.setBarcode(reelId);
}
String un_End = "UN_END";
boolean unEnd = false;
boolean finished=false;
......
......@@ -84,4 +84,6 @@ public interface IMenuManager extends IBaseManager<Menu> {
void delete(Set<Menu> menuSet) throws ValidateException;
Menu saveMenu(Menu menu) throws ValidateException;
Menu findByPath(String path);
}
......@@ -341,4 +341,9 @@ public class MenuManagerImpl implements IMenuManager {
// redisUtils.delByKeys(CacheKey.ROLE_ID, roles.stream().map(Role::getId).collect(Collectors.toSet()));
// }
@Override
public Menu findByPath(String path){
return menuDao.findOneByCondition(new String[]{"path"}, new String[]{path});
}
}
......@@ -19,6 +19,7 @@ import cn.hutool.core.util.ObjectUtil;
import com.neotel.smfcore.common.base.BasePo;
import com.neotel.smfcore.core.language.util.MessageUtils;
import lombok.*;
import org.springframework.data.annotation.Transient;
import org.springframework.data.mongodb.core.mapping.Document;
import java.io.Serializable;
......@@ -98,6 +99,12 @@ public class Menu extends BasePo implements Serializable {
*/
private String titleKey;
/**
* 父级菜单,主要用于初始化菜单,不存数据库
*/
@Transient
private Menu parentMenu;
public Boolean getHasChildren() {
if(subCount==0){
return false;
......@@ -158,17 +165,17 @@ public class Menu extends BasePo implements Serializable {
/**
* 此方法用于构建权限菜单,type=2
*/
public static Menu CreatePerMenu( final String permission, final String title, final String pid ) {
Menu menu=new Menu(new ArrayList<Menu>(),2,permission,title,999,"","",pid,0,false,false,false,"","","");
return menu;
}
// public static Menu CreatePerMenu( final String permission, final String title, final String pid ) {
// Menu menu=new Menu(new ArrayList<Menu>(),2,permission,title,999,"","",pid,0,false,false,false,"","","");
// return menu;
// }
/**
* 此方法用户创建只用于显示的一级菜单,type=0
*/
public static Menu CreatePMenu( final String title, final Integer menuSort, final String path, final Integer subCount, final String icon ) {
public static Menu CreatePMenu( final String title, final Integer menuSort, final String path, final Integer subCount, final String icon, Menu parentMenu ) {
String titleKey=path;
Menu menu = new Menu(new ArrayList<Menu>(), 0, "", title, menuSort, path, "", "", subCount, false, false, false, title, icon,titleKey);
Menu menu = new Menu(new ArrayList<Menu>(), 0, "", title, menuSort, path, "", "", subCount, false, false, false, title, icon,titleKey, parentMenu);
return menu;
}
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!