Commit e6e4df6f zshaohui

1.工单批量出库,批量执行

2.工单出库逻辑修改
1 个父辈 8926170a
...@@ -45,7 +45,7 @@ public class DataInitManager { ...@@ -45,7 +45,7 @@ public class DataInitManager {
MainTimer mainTimer; MainTimer mainTimer;
//@Value("${menu.show}") //@Value("${menu.show}")
private String[] menuShowList = new String[]{"commonIn","returnIn","cutIn","elecKanban"}; private String[] menuShowList = new String[]{"commonIn","returnIn","cutIn","elecKanban","orderSetting"};
//@Value("${menu.hide}") //@Value("${menu.hide}")
private String[] menuHideList = new String[]{"singleDiskWarehousing"}; private String[] menuHideList = new String[]{"singleDiskWarehousing"};
...@@ -167,6 +167,9 @@ public class DataInitManager { ...@@ -167,6 +167,9 @@ public class DataInitManager {
addNewFunctionMenu(orderM,new ArrayList<Menu>(), 1, "productionLineReple", "产线补料", 1, "productionLineReple", "system/productionLineReple/index", "", 0, "orderShortageSheet",functionMenuMap); 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); addNewFunctionMenu(orderM,new ArrayList<Menu>(), 1, "productionLineOut", "补料料盘出库", 1, "productionLineOut", "system/productionLineOut/index", "", 0, "orderShortageSheet",functionMenuMap);
//new Menu(new ArrayList<Menu>(), 1, "orderSetting", "工单设置", 1, "orderSetting", "system/orderSetting/index", "", 0, "sysSet");
addNewFunctionMenu(orderM,new ArrayList<Menu>(), 1, "orderSetting", "工单设置", 2, "orderSetting", "system/orderSetting/index", "", 0, "orderSetting",functionMenuMap);
//MSD管理:MSD库存.MSD追溯性.MSD设置 //MSD管理:MSD库存.MSD追溯性.MSD设置
Menu msd = Menu.CreatePMenu("MSD管理", 20, "msd", 2, "MSD", null); 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, "msdManage", "MSD库存", 1, "msdManage", "neolight/msdManage/index", "", 0, "MSDManager",functionMenuMap);
...@@ -215,7 +218,7 @@ public class DataInitManager { ...@@ -215,7 +218,7 @@ public class DataInitManager {
// //物联网:共享文件夹 // //物联网:共享文件夹
// Menu pMenuWulian = Menu.CreatePMenu("物联网", 30, "internet", 2, "interMenu"); // Menu pMenuWulian = Menu.CreatePMenu("物联网", 30, "internet", 2, "interMenu");
// Menu orderSet = new Menu(new ArrayList<Menu>(), 1, "orderSetting", "共享文件夹", 1, "orderSetting", "system/orderSetting/index", "", 0, "sysSet"); // Menu orderSet = new Menu(new ArrayList<Menu>(), 1, "orderSetting", "工单设置", 1, "orderSetting", "system/orderSetting/index", "", 0, "sysSet");
// orderSet.setHidden(true); // orderSet.setHidden(true);
// menus.addAll(createMenus(pMenuWulian, orderSet)); // menus.addAll(createMenus(pMenuWulian, orderSet));
...@@ -255,7 +258,7 @@ public class DataInitManager { ...@@ -255,7 +258,7 @@ public class DataInitManager {
"reelOut", "orderSheet", "orderShortageOut", "orderShortageSheet", "productionLineReple","productionLineOut", "reelOut", "orderSheet", "orderShortageOut", "orderShortageSheet", "productionLineReple","productionLineOut",
"componentParts","barcode","barcodeSetting","taskLog","message", "interfaceException", "componentParts","barcode","barcodeSetting","taskLog","message", "interfaceException",
"bunker","storagePos", "bunker","storagePos",
"peoples","role","about" "peoples","role","about","orderSetting"
}; };
} }
......
...@@ -26,8 +26,10 @@ import com.neotel.smfcore.core.order.service.po.LiteOrderItem; ...@@ -26,8 +26,10 @@ import com.neotel.smfcore.core.order.service.po.LiteOrderItem;
import com.neotel.smfcore.core.storage.rest.mapstruct.SafetyInventoryMapper; import com.neotel.smfcore.core.storage.rest.mapstruct.SafetyInventoryMapper;
import com.neotel.smfcore.core.storage.service.manager.IStoragePosManager; import com.neotel.smfcore.core.storage.service.manager.IStoragePosManager;
import com.neotel.smfcore.core.storage.service.po.StoragePos; import com.neotel.smfcore.core.storage.service.po.StoragePos;
import com.neotel.smfcore.core.system.bean.OrderSetting;
import com.neotel.smfcore.core.system.listener.ITaskListener; import com.neotel.smfcore.core.system.listener.ITaskListener;
import com.neotel.smfcore.core.system.service.po.DataLog; import com.neotel.smfcore.core.system.service.po.DataLog;
import com.neotel.smfcore.core.system.service.po.Settings;
import com.neotel.smfcore.core.system.util.TaskService; import com.neotel.smfcore.core.system.util.TaskService;
import com.neotel.smfcore.hikvision.HikApi; import com.neotel.smfcore.hikvision.HikApi;
import com.neotel.smfcore.hikvision.bean.HikOrderInfo; import com.neotel.smfcore.hikvision.bean.HikOrderInfo;
...@@ -441,6 +443,8 @@ public class LiteOrderCache implements ITaskListener { ...@@ -441,6 +443,8 @@ public class LiteOrderCache implements ITaskListener {
return "smfcore.order.out.maxOrder"; return "smfcore.order.out.maxOrder";
} }
OrderSetting orderSetting = dataCache.getOrderSetting();
// 出库策略(系统判断逻辑由上到下依次满足): // 出库策略(系统判断逻辑由上到下依次满足):
//①湿敏超期物料所在仓位锁定,不允许备料; //①湿敏超期物料所在仓位锁定,不允许备料;
//②贵重物料,不允许超发,按实际需求发料; //②贵重物料,不允许超发,按实际需求发料;
...@@ -522,13 +526,13 @@ public class LiteOrderCache implements ITaskListener { ...@@ -522,13 +526,13 @@ public class LiteOrderCache implements ITaskListener {
//产线补料出库,补料逻辑:单盘最大5000 需求补料1000,按照满足需求最少料盘补料,补料需求6000时首发最大盘第二盘发满足需求最小盘 //产线补料出库,补料逻辑:单盘最大5000 需求补料1000,按照满足需求最少料盘补料,补料需求6000时首发最大盘第二盘发满足需求最小盘
outPosList = pickRepleReels(outPosNameList, posList, targetNum); outPosList = pickRepleReels(outPosNameList, posList, targetNum);
} else { } else {
if (orderItem.getWemng() > 200) { if (orderItem.getWemng() > orderSetting.getOrderNum() || posList.size() > orderSetting.getInventoryNum()) {
// 2.1、订单数量>200; // 2.1、订单数量>200;
// 2.1.1 散盘:整盘=3:7(比例可调,物料数量) // 2.1.1 散盘:整盘=3:7(比例可调,物料数量)
// 2.1.2 整盘数量=需求数量*整盘占比/最小包装(四舍五入) // 2.1.2 整盘数量=需求数量*整盘占比/最小包装(四舍五入)
// 2.1.3 剩余发散盘,优先取散盘(由多到少发送), // 2.1.3 剩余发散盘,优先取散盘(由多到少发送),
// 散盘不满足情况下补充整盘 // 散盘不满足情况下补充整盘
outPosList = pickBigOrderReels(pn, outPosNameList, posList, targetNum); outPosList = pickBigOrderReels(pn, outPosNameList, posList, targetNum,orderSetting.getNotFullNum());
} else { } else {
//2.2、订单数量≤200;(料盘最少原则) //2.2、订单数量≤200;(料盘最少原则)
...@@ -790,7 +794,7 @@ public class LiteOrderCache implements ITaskListener { ...@@ -790,7 +794,7 @@ public class LiteOrderCache implements ITaskListener {
* @param targetNum * @param targetNum
* @return * @return
*/ */
private List<StoragePos> pickBigOrderReels(String pn, Set<String> outPosNameList, List<StoragePos> posList, int targetNum) { private List<StoragePos> pickBigOrderReels(String pn, Set<String> outPosNameList, List<StoragePos> posList, int targetNum,int notFullNum) {
List<String> excludePosNameList = new ArrayList<>(outPosNameList); List<String> excludePosNameList = new ArrayList<>(outPosNameList);
List<StoragePos> outPosList = new ArrayList<>(); List<StoragePos> outPosList = new ArrayList<>();
...@@ -827,26 +831,32 @@ public class LiteOrderCache implements ITaskListener { ...@@ -827,26 +831,32 @@ public class LiteOrderCache implements ITaskListener {
//挑选散盘 //挑选散盘
log.info("开始挑选散盘料,剩余需求" + targetNum); log.info("开始挑选散盘料,剩余需求" + targetNum);
//已挑选的散盘数量 //已挑选的散盘数量
int notWholeReelCount = 0;
while (true) { while (true) {
//取散盘 List<StoragePos> notWholePosList = findNotWholePosList(excludePosNameList, posList, targetNum, oneReelNum, pn,notFullNum);
StoragePos outPos = pickNotWholeReel(excludePosNameList, posList, targetNum, oneReelNum); if (notWholePosList == null || notWholePosList.size() <= 0) {
if (outPos == null) {
break; break;
} else { }
log.info("挑选到批次[" + outPos.getBarcode().getBatch() + "]的散盘物料:" + outPos.getBarcode().getBarcode() + " 数量:" + outPos.getBarcode().getAmount()); if (notWholePosList.size() >= notFullNum) {
outPosList.add(outPos); StoragePos outPos = pickWholeReel(excludePosNameList, posList, targetNum, oneReelNum);
excludePosNameList.add(outPos.getPosName()); if (outPos == null) {
targetNum = targetNum - outPos.getBarcode().getAmount();
if (targetNum <= 0) {
break; break;
} else {
log.info("挑选批次[" + outPos.getBarcode().getBatch() + "]的整盘物料:" + outPos.getBarcode().getBarcode() + " 数量:" + outPos.getBarcode().getAmount());
outPosList.add(outPos);
excludePosNameList.add(outPos.getPosName());
targetNum = targetNum - outPos.getBarcode().getAmount();
} }
notWholeReelCount = notWholeReelCount + 1; } else {
if (notWholeReelCount >= 5) { for (StoragePos outPos : notWholePosList) {
log.info(pn + "的散盘已挑选5盘,跳出"); log.info("挑选到批次[" + outPos.getBarcode().getBatch() + "]的散盘物料:" + outPos.getBarcode().getBarcode() + " 数量:" + outPos.getBarcode().getAmount());
break; outPosList.add(outPos);
excludePosNameList.add(outPos.getPosName());
targetNum = targetNum - outPos.getBarcode().getAmount();
} }
} }
if (targetNum <= 0) {
break;
}
} }
if (targetNum > 0) { if (targetNum > 0) {
log.info("剩余需求" + targetNum + "开始补充最合适的盘"); log.info("剩余需求" + targetNum + "开始补充最合适的盘");
...@@ -970,4 +980,33 @@ public class LiteOrderCache implements ITaskListener { ...@@ -970,4 +980,33 @@ public class LiteOrderCache implements ITaskListener {
} }
return outPos; return outPos;
} }
private List<StoragePos> findNotWholePosList(List<String> excludePosNameList, List<StoragePos> posList, int targetNum, int oneReelNum, String pn,int notFullNum) {
List<StoragePos> storagePosList = new ArrayList<>();
while (true) {
if (storagePosList != null && !storagePosList.isEmpty()) {
for (StoragePos pos : storagePosList) {
excludePosNameList.add(pos.getPosName());
}
}
//取散盘
StoragePos outPos = pickNotWholeReel(excludePosNameList, posList, targetNum, oneReelNum);
if (outPos == null) {
break;
} else {
log.info("挑选到批次[" + outPos.getBarcode().getBatch() + "]的散盘物料:" + outPos.getBarcode().getBarcode() + " 数量:" + outPos.getBarcode().getAmount());
storagePosList.add(outPos);
targetNum = targetNum - outPos.getBarcode().getAmount();
if (targetNum <= 0) {
break;
}
if (storagePosList != null && storagePosList.size() >= notFullNum) {
log.info(pn + "的散盘已挑选5盘,跳出");
break;
}
}
}
return storagePosList;
}
} }
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
package com.neotel.smfcore.core.order.rest; package com.neotel.smfcore.core.order.rest;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONObject;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.neotel.smfcore.common.bean.PageData; import com.neotel.smfcore.common.bean.PageData;
import com.neotel.smfcore.common.bean.ResultBean; import com.neotel.smfcore.common.bean.ResultBean;
...@@ -30,7 +31,9 @@ import com.neotel.smfcore.core.system.rest.bean.dto.TaskDto; ...@@ -30,7 +31,9 @@ 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.rest.bean.mapstruct.TaskMapper;
import com.neotel.smfcore.core.system.service.po.DataLog; import com.neotel.smfcore.core.system.service.po.DataLog;
import com.neotel.smfcore.core.system.util.TaskService; import com.neotel.smfcore.core.system.util.TaskService;
import com.neotel.smfcore.hikvision.HikApi;
import com.neotel.smfcore.hikvision.bean.HikOrderInfo; import com.neotel.smfcore.hikvision.bean.HikOrderInfo;
import com.neotel.smfcore.hikvision.bean.result.ApiResult;
import com.neotel.smfcore.security.annotation.AnonymousAccess; import com.neotel.smfcore.security.annotation.AnonymousAccess;
import com.neotel.smfcore.security.bean.FileProperties; import com.neotel.smfcore.security.bean.FileProperties;
import com.neotel.smfcore.security.service.manager.IGroupManager; import com.neotel.smfcore.security.service.manager.IGroupManager;
...@@ -376,13 +379,26 @@ public class OrderController { ...@@ -376,13 +379,26 @@ public class OrderController {
//查询正在执行的工单列表 //查询正在执行的工单列表
User user = userManager.findByUserName(SecurityUtils.getCurrentUsername()); User user = userManager.findByUserName(SecurityUtils.getCurrentUsername());
String orderNo = user.getCurrOrderNo(); List<LiteOrder> orderList = getExecuteOrders(user);
if (orderList == null || orderList.isEmpty()){
if (ObjectUtil.isEmpty(orderNo)) {
return new ArrayList<>(); return new ArrayList<>();
} }
List<DataLog> taskList = new ArrayList<>();
for (LiteOrder liteOrder : orderList) {
if (liteOrder.isNew() || liteOrder.isClosed()){
continue;
}
List<DataLog> orderTaskList = getOrderTaskByUser(user, liteOrder, false);
if (orderTaskList != null && !orderTaskList.isEmpty()){
taskList.addAll(orderTaskList);
}
}
LiteOrder liteOrder = liteOrderCache.findOrderByNo(orderNo); /*if (ObjectUtil.isEmpty(orderNo)) {
return new ArrayList<>();
}*/
/*LiteOrder liteOrder = liteOrderCache.findOrderByNo(orderNo);
if (liteOrder == null) { if (liteOrder == null) {
return new ArrayList<>(); return new ArrayList<>();
//throw new ValidateException("smfcore.valueNotFind", "未找到{0}[{1}]", new String[]{"orderNo", orderNo}); //throw new ValidateException("smfcore.valueNotFind", "未找到{0}[{1}]", new String[]{"orderNo", orderNo});
...@@ -391,7 +407,7 @@ public class OrderController { ...@@ -391,7 +407,7 @@ public class OrderController {
return new ArrayList<>(); return new ArrayList<>();
//throw new ValidateException("smfcore.order.notExecute", "工单[{0}]不在出库中", new String[]{liteOrder.getOrderNo()}); //throw new ValidateException("smfcore.order.notExecute", "工单[{0}]不在出库中", new String[]{liteOrder.getOrderNo()});
} }
List<DataLog> taskList = getOrderTaskByUser(user, liteOrder, false); List<DataLog> taskList = getOrderTaskByUser(user, liteOrder, false);*/
return taskMapper.toDto(taskList); return taskMapper.toDto(taskList);
} }
...@@ -399,9 +415,19 @@ public class OrderController { ...@@ -399,9 +415,19 @@ public class OrderController {
@ApiOperation("料盘出库界面,切换到下一个工单") @ApiOperation("料盘出库界面,切换到下一个工单")
@PostMapping("/nextOrder") @PostMapping("/nextOrder")
@PreAuthorize("@el.check('reelOut')") @PreAuthorize("@el.check('reelOut')")
public ResultBean nextOrder(@RequestParam Map<String, String> paramsMap) { public ResultBean nextOrder(@RequestBody Map<String, String> paramsMap) {
String idStr = paramsMap.get("id");
if (StringUtils.isEmpty(idStr)) {
return ResultBean.newErrorResult(-1, "smfcore.order.choose", "请选择工单");
}
List<String> idList = JSONObject.parseArray(idStr, String.class);
if (idList == null || idList.isEmpty()) {
return ResultBean.newErrorResult(-1, "smfcore.order.choose", "请选择工单");
}
User user = userManager.findByUserName(SecurityUtils.getCurrentUsername()); User user = userManager.findByUserName(SecurityUtils.getCurrentUsername());
if (ObjectUtil.isNotEmpty(user.getCurrOrderNo())) { /*if (ObjectUtil.isNotEmpty(user.getCurrOrderNo())) {
//判断上个工单是否已完成 //判断上个工单是否已完成
LiteOrder preOrder = liteOrderCache.findOrderByNo(user.getCurrOrderNo()); LiteOrder preOrder = liteOrderCache.findOrderByNo(user.getCurrOrderNo());
List<DataLog> preTasks = getOrderTaskByUser(user, preOrder, true); List<DataLog> preTasks = getOrderTaskByUser(user, preOrder, true);
...@@ -409,42 +435,68 @@ public class OrderController { ...@@ -409,42 +435,68 @@ public class OrderController {
return ResultBean.newErrorResult(-1, "smfcore.order.preNotEnd", "工单[" + preOrder.getOrderNo() + "]还有[" + preTasks.size() + "]个出库任务未结束", return ResultBean.newErrorResult(-1, "smfcore.order.preNotEnd", "工单[" + preOrder.getOrderNo() + "]还有[" + preTasks.size() + "]个出库任务未结束",
new String[]{user.getCurrOrderNo(), preTasks.size() + ""}); new String[]{user.getCurrOrderNo(), preTasks.size() + ""});
} }
} }*/
List<LiteOrder> orderList = getExecuteOrders(user); List<LiteOrder> orderList = getExecuteOrders(user);
if (orderList.size() <= 0) { if (orderList.size() <= 0) {
return ResultBean.newErrorResult(-1, "smfcore.order.noOrder", "暂无可操作的工单"); return ResultBean.newErrorResult(-1, "smfcore.order.noOrder", "暂无可操作的工单");
} }
LiteOrder liteOrder = orderList.get(0);
//判断是否绑定过箱子 //判断是否在列表中
boolean isbind=false; List<LiteOrder> newOrderList = new ArrayList<>();
if(liteOrder.getBoxInfos()!=null){ for (LiteOrder liteOrder : orderList) {
for (OrderBoxInfo boxInfo: /*List<DataLog> preTasks = getOrderTaskByUser(user, liteOrder, true);
liteOrder.getBoxInfos()) { if (preTasks.size() > 0) {
if(boxInfo.getOperater().equals(user.getUsername())){ continue;
isbind=true; }*/
for (String orderId : idList) {
if (liteOrder.getId().equals(orderId)) {
newOrderList.add(liteOrder);
break;
} }
} }
} }
if(!isbind){ if (newOrderList == null || newOrderList.isEmpty()) {
return ResultBean.newErrorResult(-1, "smfcore.order.noBind", "操作失败,请先为工单{0}绑定箱子",new String[]{liteOrder.getOrderNo()}); return ResultBean.newErrorResult(-1, "smfcore.order.noOrder", "暂无可操作的工单");
} }
//设置此工单的任务可以发送给料架 //判断工单有没有进行绑定
List<DataLog> taskList = getOrderTaskByUser(user, liteOrder, true); for (LiteOrder liteOrder : newOrderList) {
for (DataLog datalog : taskList) { //判断是否绑定过箱子
datalog.setInOperate(true); boolean isbind = false;
datalog.setOperator(user.getUsername()); if (liteOrder.getBoxInfos() != null) {
taskService.updateQueueTask(datalog); for (OrderBoxInfo boxInfo :
liteOrder.getBoxInfos()) {
if (boxInfo.getOperater().equals(user.getUsername())) {
isbind = true;
}
}
}
if (!isbind) {
return ResultBean.newErrorResult(-1, "smfcore.order.noBind", "操作失败,请先为工单{0}绑定箱子", new String[]{liteOrder.getOrderNo()});
}
} }
user.setCurrOrderNo(liteOrder.getOrderNo()); //开始生成任务
userManager.save(user); for (LiteOrder liteOrder : newOrderList) {
log.info("用户[" + user.getUsername() + "]切换到工单[" + liteOrder.getOrderNo() + "],共更新["+taskList.size()+"]个任务状态为操作中"); //设置此工单的任务可以发送给料架
List<DataLog> taskList = getOrderTaskByUser(user, liteOrder, true);
for (DataLog datalog : taskList) {
if (datalog.isInOperate()) {
continue;
}
datalog.setInOperate(true);
datalog.setOperator(user.getUsername());
taskService.updateQueueTask(datalog);
}
return ResultBean.newOkResult("smfcore.order.nextOk", "成功切换到下一个工单", ""); user.setCurrOrderNo(liteOrder.getOrderNo());
userManager.save(user);
log.info("用户[" + user.getUsername() + "]切换到工单[" + liteOrder.getOrderNo() + "],共更新[" + taskList.size() + "]个任务状态为操作中");
}
return ResultBean.newOkResult("");
} }
@ApiOperation("齐套页面,获取齐套数据") @ApiOperation("齐套页面,获取齐套数据")
@GetMapping("/orderSet") @GetMapping("/orderSet")
@PreAuthorize("@el.check('workOrder')") @PreAuthorize("@el.check('workOrder')")
...@@ -467,6 +519,68 @@ public class OrderController { ...@@ -467,6 +519,68 @@ public class OrderController {
return ResultBean.newOkResult(dtos); return ResultBean.newOkResult(dtos);
} }
@ApiOperation("更新开工时间")
@RequestMapping("/updateStartDate")
@AnonymousAccess
public ResultBean updateStartDate(OrderQueryCondition criteria) {
User user = userManager.findByUserName(SecurityUtils.getCurrentUsername());
if (user != null) {
//数据权限 查找没有权限的组列表
if (!user.getIsAdmin()) {
Set<String> groupIds = user.getGroups();
List<String> excludeSources = Lists.newArrayList();
List<Group> groups = groupManager.findAll();
for (Group group : groups) {
if (groupIds.contains(group.getId())) {
continue;
}
excludeSources.add(group.getGroupName());
}
criteria.setExcludeSourceList(excludeSources);
}
}
Query query = QueryHelp.getQuery(criteria);
if (criteria.getStatus() != null) {
if (criteria.getStatus() == 1) {
query.addCriteria(Criteria.where("status").is(LITEORDER_STATUS.CLOSED));
} else if (criteria.getStatus() == 2) {
query.addCriteria(Criteria.where("status").ne(LITEORDER_STATUS.CLOSED));
} else if (criteria.getStatus() == 3) {
query.addCriteria(Criteria.where("status").is(LITEORDER_STATUS.EXECUTING));
}
}
query.addCriteria(Criteria.where("replenishmentNo").isNull());
List<LiteOrder> orderList = liteOrderManager.findByQuery(query);
if (orderList != null && !orderList.isEmpty()) {
for (LiteOrder order : orderList) {
if (order.isClosed()) {
continue;
}
ApiResult apiResult = HikApi.updateOrderApi("system", order.getOrderNo());
if (apiResult == null) {
continue;
}
if (apiResult.getCode() == 33) {
continue;
}
List<HikOrderInfo> newItems = (ArrayList<HikOrderInfo>) apiResult.getData();
if (newItems == null || newItems.isEmpty()) {
continue;
}
HikOrderInfo hikOrderInfo = newItems.get(0);
Date startD = hikOrderInfo.getStartD();
order.setStartDate(startD);
order = liteOrderManager.save(order);
liteOrderCache.addOrderToMap(order);
}
} else {
return ResultBean.newErrorResult(-1,"smfcore.order.out.notFound","工单未找到");
}
return ResultBean.newOkResult("");
}
@ApiOperation("导出齐套列表") @ApiOperation("导出齐套列表")
@GetMapping(value = "/orderSet/download") @GetMapping(value = "/orderSet/download")
@PreAuthorize("@el.check('workOrder')") @PreAuthorize("@el.check('workOrder')")
......
...@@ -32,6 +32,9 @@ public class OrderQueryCondition { ...@@ -32,6 +32,9 @@ public class OrderQueryCondition {
//状态,0=所有,1=已关闭,2=未关闭,3=出库中 //状态,0=所有,1=已关闭,2=未关闭,3=出库中
private Integer status; private Integer status;
@QueryCondition(type = QueryCondition.Type.IN, propName = "orderNo")
private List<String> idList;
// //
// @QueryCondition(type=QueryCondition.Type.IN,propName = "status") // @QueryCondition(type=QueryCondition.Type.IN,propName = "status")
// private List<Integer> statusList ; // private List<Integer> statusList ;
......
...@@ -34,4 +34,10 @@ public class OrderSetting implements Serializable { ...@@ -34,4 +34,10 @@ public class OrderSetting implements Serializable {
*/ */
@ApiModelProperty("料架亮灯方式,0=全部亮灯,1=亮灯指引,默认0") @ApiModelProperty("料架亮灯方式,0=全部亮灯,1=亮灯指引,默认0")
public Integer shelfLightType=0; public Integer shelfLightType=0;
private Integer inventoryNum = 3;
private Integer orderNum = 200;
private Integer notFullNum = 5;
} }
...@@ -126,7 +126,7 @@ public class SettingsController { ...@@ -126,7 +126,7 @@ public class SettingsController {
public ResultBean updateOrderSetting( @RequestBody OrderSetting orderSetting) { public ResultBean updateOrderSetting( @RequestBody OrderSetting orderSetting) {
// String type=map.get("checkOutType"); // String type=map.get("checkOutType");
if(orderSetting.getPn()==null){ /*if(orderSetting.getPn()==null){
throw new ValidateException("smfcore.valueCanotNull", "{0}不能为空", new String[]{"PN"}); throw new ValidateException("smfcore.valueCanotNull", "{0}不能为空", new String[]{"PN"});
} }
if(orderSetting.getFeeder()==null){ if(orderSetting.getFeeder()==null){
...@@ -157,7 +157,7 @@ public class SettingsController { ...@@ -157,7 +157,7 @@ public class SettingsController {
throw new ValidateException("smfcore.enterCorrectFolder", "请输入正确的文件夹" ); throw new ValidateException("smfcore.enterCorrectFolder", "请输入正确的文件夹" );
} }
} }
} }*/
dataCache.updateCache(Constants.CACHE_OrderSetting, orderSetting); dataCache.updateCache(Constants.CACHE_OrderSetting, orderSetting);
log.info("更改工单设置:"+Constants.CACHE_OrderSetting+"=" + orderSetting.toString()); log.info("更改工单设置:"+Constants.CACHE_OrderSetting+"=" + orderSetting.toString());
......
...@@ -39,7 +39,7 @@ public class TaskQueryCondition { ...@@ -39,7 +39,7 @@ public class TaskQueryCondition {
private String operator; private String operator;
@QueryCondition(type = QueryCondition.Type.BETWEEN, propName = "updateDate") @QueryCondition(type = QueryCondition.Type.BETWEEN, propName = "updateDate")
@DateTimeFormat(pattern = "yyyy-MM-dd") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private BetweenData<Date> updateDate; private BetweenData<Date> updateDate;
@QueryCondition @QueryCondition
......
...@@ -146,7 +146,7 @@ smfcore.solderPasteKanban=\u8BBE\u5907\u6982\u89C8 ...@@ -146,7 +146,7 @@ smfcore.solderPasteKanban=\u8BBE\u5907\u6982\u89C8
smfcore.solderPasteManage=\u5E93\u5B58 smfcore.solderPasteManage=\u5E93\u5B58
smfcore.solderPasteData=\u8FFD\u6EAF\u6027 smfcore.solderPasteData=\u8FFD\u6EAF\u6027
smfcore.solderPasteSetting=\u8BBE\u7F6E smfcore.solderPasteSetting=\u8BBE\u7F6E
smfcore.orderSetting=\u5171\u4EAB\u6587\u4EF6\u5939 smfcore.orderSetting=\u5DE5\u5355\u8BBE\u7F6E
smfcore.enterCorrectFolder=\u8BF7\u8F93\u5165\u6B63\u786E\u7684\u6587\u4EF6\u5939 smfcore.enterCorrectFolder=\u8BF7\u8F93\u5165\u6B63\u786E\u7684\u6587\u4EF6\u5939
smfcore.taskHasEnd=\u4EFB\u52A1{0}\u5DF2\u53D6\u6D88\u6216\u5DF2\u7ED3\u675F smfcore.taskHasEnd=\u4EFB\u52A1{0}\u5DF2\u53D6\u6D88\u6216\u5DF2\u7ED3\u675F
smfcore.virtual.notFound=\u672A\u627E\u5230\u865A\u62DF\u4ED3 smfcore.virtual.notFound=\u672A\u627E\u5230\u865A\u62DF\u4ED3
...@@ -262,6 +262,7 @@ smfcore.orderShortage.statusError=\u64CD\u4F5C\u5931\u8D25\uFF0C{0}\u975E\u5DE5\ ...@@ -262,6 +262,7 @@ smfcore.orderShortage.statusError=\u64CD\u4F5C\u5931\u8D25\uFF0C{0}\u975E\u5DE5\
smfcore.orderSheet.taskNotEnd=\u64CD\u4F5C\u5931\u8D25\uFF0C\u5DE5\u5355\u51FA\u5E93\u4EFB\u52A1[{0}][{1}}]\u8FD8\u672A\u7ED3\u675F smfcore.orderSheet.taskNotEnd=\u64CD\u4F5C\u5931\u8D25\uFF0C\u5DE5\u5355\u51FA\u5E93\u4EFB\u52A1[{0}][{1}}]\u8FD8\u672A\u7ED3\u675F
smfcore.orderSheet.end.error=\u64CD\u4F5C\u5931\u8D25\uFF0C\u5DE5\u5355{0}\u8FD8\u672A\u51FA\u5E93\u5B8C\u6210 smfcore.orderSheet.end.error=\u64CD\u4F5C\u5931\u8D25\uFF0C\u5DE5\u5355{0}\u8FD8\u672A\u51FA\u5E93\u5B8C\u6210
smfcore.order.noBind=\u64CD\u4F5C\u5931\u8D25\uFF0C\u8BF7\u5148\u4E3A\u5DE5\u5355{0}\u7ED1\u5B9A\u7BB1\u5B50 smfcore.order.noBind=\u64CD\u4F5C\u5931\u8D25\uFF0C\u8BF7\u5148\u4E3A\u5DE5\u5355{0}\u7ED1\u5B9A\u7BB1\u5B50
smfcore.order.choose=\u8BF7\u9009\u62E9\u5DE5\u5355
#smfcore.order.out.short=\u5DE5\u5355\u51FA\u5E93\u5931\u8D25\uFF0C\u5DE5\u5355\u7F3A\u6599 #smfcore.order.out.short=\u5DE5\u5355\u51FA\u5E93\u5931\u8D25\uFF0C\u5DE5\u5355\u7F3A\u6599
......
...@@ -149,7 +149,7 @@ smfcore.solderPasteKanban=Equipment Overview ...@@ -149,7 +149,7 @@ smfcore.solderPasteKanban=Equipment Overview
smfcore.solderPasteManage=Inventory smfcore.solderPasteManage=Inventory
smfcore.solderPasteData=Traceability smfcore.solderPasteData=Traceability
smfcore.solderPasteSetting=Setting smfcore.solderPasteSetting=Setting
smfcore.orderSetting=Shared Folder smfcore.orderSetting=Work Order Settings
smfcore.enterCorrectFolder=Please enter the correct folder smfcore.enterCorrectFolder=Please enter the correct folder
smfcore.taskHasEnd=Task {0} has been cancelled or has ended smfcore.taskHasEnd=Task {0} has been cancelled or has ended
smfcore.virtual.notFound=No virtual warehouse found smfcore.virtual.notFound=No virtual warehouse found
...@@ -253,4 +253,4 @@ smfcore.safetyInventory.supplementReel=Number of additional plates ...@@ -253,4 +253,4 @@ smfcore.safetyInventory.supplementReel=Number of additional plates
smfcore.safetyInventory.amount=Amount smfcore.safetyInventory.amount=Amount
smfcore.component.storeError=Please enter the correct stock, minimum stock <= safety stock <= maximum stock smfcore.component.storeError=Please enter the correct stock, minimum stock <= safety stock <= maximum stock
smfcore.user.group.error=Group [{0}] has been assigned to operator [{1}] smfcore.user.group.error=Group [{0}] has been assigned to operator [{1}]
smfcore.order.choose=Please select a ticket
...@@ -148,7 +148,7 @@ smfcore.solderPasteKanban=\u6A5F\u5668\u6982\u8981 ...@@ -148,7 +148,7 @@ smfcore.solderPasteKanban=\u6A5F\u5668\u6982\u8981
smfcore.solderPasteManage=\u30A4\u30F3\u30D9\u30F3\u30C8\u30EA\u30FC smfcore.solderPasteManage=\u30A4\u30F3\u30D9\u30F3\u30C8\u30EA\u30FC
smfcore.solderPasteData=\u9061\u53CA smfcore.solderPasteData=\u9061\u53CA
smfcore.solderPasteSetting=\u8A2D\u5B9A smfcore.solderPasteSetting=\u8A2D\u5B9A
smfcore.orderSetting=\u5171\u6709\u30D5\u30A9\u30EB\u30C0\u30FC smfcore.orderSetting=\u4F5C\u696D\u6307\u793A\u66F8\u8A2D\u5B9A
smfcore.enterCorrectFolder=\u6B63\u3057\u3044\u30D5\u30A9\u30EB\u30C0\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044 smfcore.enterCorrectFolder=\u6B63\u3057\u3044\u30D5\u30A9\u30EB\u30C0\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044
smfcore.taskHasEnd=\u30BF\u30B9\u30AF{0}\u304C\u30AD\u30E3\u30F3\u30BB\u30EB\u3055\u308C\u305F\u304B\u7D42\u4E86\u3057\u305F smfcore.taskHasEnd=\u30BF\u30B9\u30AF{0}\u304C\u30AD\u30E3\u30F3\u30BB\u30EB\u3055\u308C\u305F\u304B\u7D42\u4E86\u3057\u305F
smfcore.virtual.notFound=\u30D0\u30FC\u30C1\u30E3\u30EB\u30A6\u30A8\u30A2\u30CF\u30A6\u30B9\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093 smfcore.virtual.notFound=\u30D0\u30FC\u30C1\u30E3\u30EB\u30A6\u30A8\u30A2\u30CF\u30A6\u30B9\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093
...@@ -252,4 +252,4 @@ smfcore.safetyInventory.supplementReel=\u8FFD\u52A0\u30D7\u30EC\u30FC\u30C8\u679 ...@@ -252,4 +252,4 @@ smfcore.safetyInventory.supplementReel=\u8FFD\u52A0\u30D7\u30EC\u30FC\u30C8\u679
smfcore.safetyInventory.amount=\u6578\u91CF smfcore.safetyInventory.amount=\u6578\u91CF
smfcore.component.storeError=\u6B63\u3057\u3044\u5728\u5EAB\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u3001\u6700\u5C0F\u5728\u5EAB\u2266\u5B89\u5168\u5728\u5EAB\u2266\u6700\u5927\u5728\u5EAB smfcore.component.storeError=\u6B63\u3057\u3044\u5728\u5EAB\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u3001\u6700\u5C0F\u5728\u5EAB\u2266\u5B89\u5168\u5728\u5EAB\u2266\u6700\u5927\u5728\u5EAB
smfcore.user.group.error=\u30B0\u30EB\u30FC\u30D7[{0}]\u304C\u30AA\u30DA\u30EC\u30FC\u30BF[{1}]\u306B\u5272\u308A\u5F53\u3066\u3089\u308C\u307E\u3057\u305F\u3002 smfcore.user.group.error=\u30B0\u30EB\u30FC\u30D7[{0}]\u304C\u30AA\u30DA\u30EC\u30FC\u30BF[{1}]\u306B\u5272\u308A\u5F53\u3066\u3089\u308C\u307E\u3057\u305F\u3002
smfcore.order.choose=\u30C1\u30B1\u30C3\u30C8\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044
...@@ -148,7 +148,7 @@ smfcore.solderPasteKanban=\u8BBE\u5907\u6982\u89C8 ...@@ -148,7 +148,7 @@ smfcore.solderPasteKanban=\u8BBE\u5907\u6982\u89C8
smfcore.solderPasteManage=\u5E93\u5B58 smfcore.solderPasteManage=\u5E93\u5B58
smfcore.solderPasteData=\u8FFD\u6EAF\u6027 smfcore.solderPasteData=\u8FFD\u6EAF\u6027
smfcore.solderPasteSetting=\u8BBE\u7F6E smfcore.solderPasteSetting=\u8BBE\u7F6E
smfcore.orderSetting=\u5171\u4EAB\u6587\u4EF6\u5939 smfcore.orderSetting=\u5DE5\u5355\u8BBE\u7F6E
smfcore.enterCorrectFolder=\u8BF7\u8F93\u5165\u6B63\u786E\u7684\u6587\u4EF6\u5939 smfcore.enterCorrectFolder=\u8BF7\u8F93\u5165\u6B63\u786E\u7684\u6587\u4EF6\u5939
smfcore.taskHasEnd=\u4EFB\u52A1{0}\u5DF2\u53D6\u6D88\u6216\u5DF2\u7ED3\u675F smfcore.taskHasEnd=\u4EFB\u52A1{0}\u5DF2\u53D6\u6D88\u6216\u5DF2\u7ED3\u675F
smfcore.virtual.notFound=\u672A\u627E\u5230\u865A\u62DF\u4ED3 smfcore.virtual.notFound=\u672A\u627E\u5230\u865A\u62DF\u4ED3
...@@ -252,3 +252,4 @@ smfcore.safetyInventory.supplementReel=\u8865\u5145\u76D8\u6570 ...@@ -252,3 +252,4 @@ smfcore.safetyInventory.supplementReel=\u8865\u5145\u76D8\u6570
smfcore.safetyInventory.amount=\u6700\u5C0F\u5305\u88C5 smfcore.safetyInventory.amount=\u6700\u5C0F\u5305\u88C5
smfcore.component.storeError=\u8BF7\u8F93\u5165\u6B63\u786E\u7684\u5E93\u5B58\uFF0C\u6700\u5C0F\u5E93\u5B58<=\u5B89\u5168\u5E93\u5B58<=\u6700\u5927\u5E93\u5B58 smfcore.component.storeError=\u8BF7\u8F93\u5165\u6B63\u786E\u7684\u5E93\u5B58\uFF0C\u6700\u5C0F\u5E93\u5B58<=\u5B89\u5168\u5E93\u5B58<=\u6700\u5927\u5E93\u5B58
smfcore.user.group.error=\u7EC4[{0}]\u5DF2\u7ECF\u5206\u914D\u7ED9\u64CD\u4F5C\u5458[{1}] smfcore.user.group.error=\u7EC4[{0}]\u5DF2\u7ECF\u5206\u914D\u7ED9\u64CD\u4F5C\u5458[{1}]
smfcore.order.choose=\u8BF7\u9009\u62E9\u5DE5\u5355
\ No newline at end of file \ No newline at end of file
...@@ -148,7 +148,7 @@ smfcore.solderPasteKanban=\u8A2D\u5099\u6982\u89BD ...@@ -148,7 +148,7 @@ smfcore.solderPasteKanban=\u8A2D\u5099\u6982\u89BD
smfcore.solderPasteManage=\u5EAB\u5B58 smfcore.solderPasteManage=\u5EAB\u5B58
smfcore.solderPasteData=\u8FFD\u6EAF\u6027 smfcore.solderPasteData=\u8FFD\u6EAF\u6027
smfcore.solderPasteSetting=\u8A2D\u7F6E smfcore.solderPasteSetting=\u8A2D\u7F6E
smfcore.orderSetting=\u5171\u4EAB\u6587\u4EF6\u593E smfcore.orderSetting=\u5DE5\u55AE\u8A2D\u7F6E
smfcore.enterCorrectFolder=\u8ACB\u8F38\u5165\u6B63\u78BA\u7684\u6587\u4EF6\u593E smfcore.enterCorrectFolder=\u8ACB\u8F38\u5165\u6B63\u78BA\u7684\u6587\u4EF6\u593E
smfcore.taskHasEnd=\u4EFB\u52D9{0}\u5DF2\u53D6\u6D88\u6216\u5DF2\u7D50\u675F smfcore.taskHasEnd=\u4EFB\u52D9{0}\u5DF2\u53D6\u6D88\u6216\u5DF2\u7D50\u675F
smfcore.virtual.notFound=\u672A\u627E\u5230\u865B\u64EC\u5009 smfcore.virtual.notFound=\u672A\u627E\u5230\u865B\u64EC\u5009
...@@ -252,3 +252,4 @@ smfcore.safetyInventory.supplementReel=\u88DC\u5145\u76E4\u6578 ...@@ -252,3 +252,4 @@ smfcore.safetyInventory.supplementReel=\u88DC\u5145\u76E4\u6578
smfcore.safetyInventory.amount=\u6700\u5C0F\u5305\u88DD smfcore.safetyInventory.amount=\u6700\u5C0F\u5305\u88DD
smfcore.component.storeError=\u8ACB\u8F38\u5165\u6B63\u78BA\u7684\u5EAB\u5B58\uFF0C\u6700\u5C0F\u5EAB\u5B58<=\u5B89\u5168\u5EAB\u5B58<=\u6700\u5927\u5EAB\u5B58 smfcore.component.storeError=\u8ACB\u8F38\u5165\u6B63\u78BA\u7684\u5EAB\u5B58\uFF0C\u6700\u5C0F\u5EAB\u5B58<=\u5B89\u5168\u5EAB\u5B58<=\u6700\u5927\u5EAB\u5B58
smfcore.user.group.error=\u7D44[{0}]\u5DF2\u7D93\u5206\u914D\u7D66\u64CD\u4F5C\u54E1[{1}] smfcore.user.group.error=\u7D44[{0}]\u5DF2\u7D93\u5206\u914D\u7D66\u64CD\u4F5C\u54E1[{1}]
smfcore.order.choose=\u8ACB\u9078\u64C7\u5DE5\u55AE
\ No newline at end of file \ No newline at end of file
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!