Commit 145a23d8 zshaohui

1.其他工单正在执行中的,暂停工单不允许出库

2.盘点出库优化
3.看板优化
1 个父辈 544cc2b9
...@@ -666,12 +666,14 @@ public class LiteOrderCache { ...@@ -666,12 +666,14 @@ public class LiteOrderCache {
List<DataLog> allTask=taskService.getAllTasks(); List<DataLog> allTask=taskService.getAllTasks();
for (DataLog task:allTask for (DataLog task:allTask
) { ) {
if (OP.CHECKOUT == task.getType()&&(!task.isEnd())) { if (OP.CHECKOUT == task.getType()) {
//更新工单状态 if (!task.isEnd() && !task.isFinished() && !task.isCancel()) {
String taskSourceName = task.getSourceName(); //更新工单状态
if (!Strings.isNullOrEmpty(taskSourceName) && orderNo.equals(taskSourceName)) { String taskSourceName = task.getSourceName();
log.info("关闭工单[" + orderNo + "]失败,有未完成的出库任务:"+task.getPosName()); if (!Strings.isNullOrEmpty(taskSourceName) && orderNo.equals(taskSourceName)) {
return "smfcore.order.close.taskNotEnd"; log.info("关闭工单[" + orderNo + "]失败,有未完成的出库任务:" + task.getPosName());
return "smfcore.order.close.taskNotEnd";
}
} }
} }
} }
...@@ -895,7 +897,8 @@ public class LiteOrderCache { ...@@ -895,7 +897,8 @@ public class LiteOrderCache {
Barcode barcode = pos.getBarcode(); Barcode barcode = pos.getBarcode();
List<Barcode> subCodeList = barcode.getSubCodeList(); List<Barcode> subCodeList = barcode.getSubCodeList();
//进行排序 //进行排序
subCodeList = subCodeList.stream().sorted(Comparator.comparing(Barcode::getPosName)).collect(Collectors.toList()); subCodeList = subCodeList.stream().sorted(Comparator.comparing(Barcode::getCreateDate)).collect(Collectors.toList());
subCodeList = subCodeList.stream().sorted(Comparator.comparing(Barcode::getAmount)).collect(Collectors.toList());
List<String> subCodeIds = new ArrayList<>(); List<String> subCodeIds = new ArrayList<>();
for (Barcode subCode : subCodeList) { for (Barcode subCode : subCodeList) {
if (outReelCount >= orderItem.getNeedReelCount() && outNumCount >= orderItem.getNeedNum()) { if (outReelCount >= orderItem.getNeedReelCount() && outNumCount >= orderItem.getNeedNum()) {
...@@ -1069,6 +1072,20 @@ public class LiteOrderCache { ...@@ -1069,6 +1072,20 @@ public class LiteOrderCache {
return ""; return "";
} }
public boolean hasExecutingOrder(){
Collection<LiteOrder> liteOrders = getAllLiteOrder();
if (liteOrders != null && !liteOrders.isEmpty()){
for (LiteOrder liteOrder : liteOrders) {
if (liteOrder.isOutTails()){
return true;
}
}
}
return false;
}
/** /**
* 获取所有liteOrder * 获取所有liteOrder
* @return * @return
......
...@@ -565,7 +565,11 @@ public class OrderController { ...@@ -565,7 +565,11 @@ public class OrderController {
@ApiOperation("工单恢复") @ApiOperation("工单恢复")
@RequestMapping("/restoreOrder") @RequestMapping("/restoreOrder")
public ResultBean restoreOrder(@RequestBody Map<String,String> paramMap) { public ResultBean restoreOrder(@RequestBody Map<String, String> paramMap) {
if (liteOrderCache.hasExecutingOrder()) {
//throw new ValidateException("","有正在执行的工单,不允许恢复");
return ResultBean.newErrorResult(-1, "", "有正在执行的工单,不允许恢复");
}
String orderNo = paramMap.get("orderNo"); String orderNo = paramMap.get("orderNo");
//根据orderNo得到正在执行的任务 //根据orderNo得到正在执行的任务
Collection<DataLog> queueTasks = taskService.getQueueTasks(); Collection<DataLog> queueTasks = taskService.getQueueTasks();
......
...@@ -363,7 +363,7 @@ public class StoragePosManagerImpl implements IStoragePosManager { ...@@ -363,7 +363,7 @@ public class StoragePosManagerImpl implements IStoragePosManager {
@Override @Override
public StoragePos findPartNumberInStorages(List<String> storageIdList, String pn, Collection<String> excludePosIds, CHECKOUT_TYPE checkOutType, String warehouseCode, String brand, boolean isOut) { public StoragePos findPartNumberInStorages(List<String> storageIdList, String pn, Collection<String> excludePosIds, CHECKOUT_TYPE checkOutType, String warehouseCode, String brand, boolean isOut) {
Criteria c = Criteria.where("id").nin(excludePosIds); Criteria c = Criteria.where("id").nin(excludePosIds);
// .and("enabled").is(true)//可用//.and("barcode.lockId").is(null);//没有被锁定的仓位; c.and("enabled").is(true);//可用//.and("barcode.lockId").is(null);//没有被锁定的仓位;
if (storageIdList != null) { if (storageIdList != null) {
c = c.and("storageId").in(storageIdList); c = c.and("storageId").in(storageIdList);
} }
......
...@@ -1084,7 +1084,7 @@ public class TaskService { ...@@ -1084,7 +1084,7 @@ public class TaskService {
private synchronized Barcode clearOut(Barcode barcode) { private synchronized Barcode clearOut(Barcode barcode) {
if (barcode != null) { if (barcode != null) {
List<Barcode> subCodeList = barcode.getSubCodeList(); List<Barcode> subCodeList = barcode.getSubCodeList();
if (subCodeList != null && !subCodeList.isEmpty()){ if (subCodeList != null && !subCodeList.isEmpty()) {
for (Barcode subCode : subCodeList) { for (Barcode subCode : subCodeList) {
subCode = barcodeManager.get(subCode.getId()); subCode = barcodeManager.get(subCode.getId());
if (subCode.isOut()) { if (subCode.isOut()) {
...@@ -1095,11 +1095,11 @@ public class TaskService { ...@@ -1095,11 +1095,11 @@ public class TaskService {
subCode.setOrderItemId(null); subCode.setOrderItemId(null);
subCode = barcodeManager.save(subCode); subCode = barcodeManager.save(subCode);
barcode.UpdateSubCode(subCode); barcode.UpdateSubCode(subCode);
barcode = barcodeManager.save(barcode); generateTask(subCode, OP_STATUS.CANCEL.name(), subCode.getAmount(), OP.CHECKOUT, orderItemId, "", ExtendType.TASK_CANNEL);
generateTask(subCode, OP_STATUS.CANCEL.name(), subCode.getAmount(),OP.CHECKOUT , orderItemId, "", ExtendType.TASK_CANNEL);
log.info("点击完成扫码并入库,任务取消,barcode:" + subCode.getBarcode() + ",OrderItemId为:" + orderItemId); log.info("点击完成扫码并入库,任务取消,barcode:" + subCode.getBarcode() + ",OrderItemId为:" + orderItemId);
} }
} }
barcode = barcodeManager.save(barcode);
} }
} }
return barcode; return barcode;
......
...@@ -280,7 +280,7 @@ public class InventoryController { ...@@ -280,7 +280,7 @@ public class InventoryController {
return ResultBean.newErrorResult(-1, "", "请点击开始盘点"); return ResultBean.newErrorResult(-1, "", "请点击开始盘点");
} }
if (storagePosIdList == null || storagePosIdList.isEmpty()) { if (storagePosIdList == null || storagePosIdList.isEmpty()) {
return ResultBean.newErrorResult(-1, "smfcore.valueCanotNull", "{0}不能为空", new String[]{"ID"}); return ResultBean.newErrorResult(-1, "smfcore.valueCanotNull", "{0}不能为空", new String[]{"库位"});
} }
if (storagePosIdList != null && !storagePosIdList.isEmpty()) { if (storagePosIdList != null && !storagePosIdList.isEmpty()) {
List<StoragePos> storagePosList = storagePosManager.findByQuery(inventoryQuery(null, null, storagePosIdList)); List<StoragePos> storagePosList = storagePosManager.findByQuery(inventoryQuery(null, null, storagePosIdList));
...@@ -330,6 +330,21 @@ public class InventoryController { ...@@ -330,6 +330,21 @@ public class InventoryController {
/** /**
* 批量盘点出库
* @param posName
* @return
*/
@RequestMapping("/batchInventoryOut")
public ResultBean batchInventoryOut(String posName) {
Pattern pattern = Pattern.compile(QueryHelp.escapeExprSpecialWord(posName), Pattern.CASE_INSENSITIVE);
List<StoragePos> storagePosList = storagePosManager.findByQuery(new Query(Criteria.where("posName").regex(pattern)));
List<String> storagePosIdList = storagePosList.stream().map(item -> item.getId()).collect(Collectors.toList());
return inventoryOut(storagePosIdList);
}
/**
* 料箱信息 * 料箱信息
* *
* @param name * @param name
...@@ -475,7 +490,9 @@ public class InventoryController { ...@@ -475,7 +490,9 @@ public class InventoryController {
if (StringUtils.isBlank(inventoryBatch) || "-1".equals(inventoryBatch)) { if (StringUtils.isBlank(inventoryBatch) || "-1".equals(inventoryBatch)) {
pos = taskService.findEmptyPosForPutIn(storageList, boxBarcode, "", ""); pos = taskService.findEmptyPosForPutIn(storageList, boxBarcode, "", "");
} else { } else {
InventoryData data = inventoryDataManager.findOne(new Query(Criteria.where("inventoryBatch").is(inventoryBatch).and("box").is(boxStr))); InventoryData data = inventoryDataManager.findOne(
new Query(Criteria.where("inventoryBatch").is(inventoryBatch).and("box").is(boxStr))
.with(Sort.by(Sort.Direction.DESC, "createDate")));
String posName = data.getPosName(); String posName = data.getPosName();
pos = storagePosManager.getByPosName(posName); pos = storagePosManager.getByPosName(posName);
} }
...@@ -608,7 +625,9 @@ public class InventoryController { ...@@ -608,7 +625,9 @@ public class InventoryController {
if (StringUtils.isBlank(inventoryBatch) || "-1".equals(inventoryBatch)) { if (StringUtils.isBlank(inventoryBatch) || "-1".equals(inventoryBatch)) {
return "当前没有要盘点的批次"; return "当前没有要盘点的批次";
} }
InventoryData data = inventoryDataManager.findOne(new Query(Criteria.where("inventoryBatch").is(inventoryBatch).and("boxPartition").is(posName))); InventoryData data = inventoryDataManager.findOne(
new Query(Criteria.where("inventoryBatch").is(inventoryBatch).and("boxPartition").is(posName))
.with(Sort.by(Sort.Direction.DESC, "createDate")));
if (data != null) { if (data != null) {
List<Barcode> barcodeList = data.getBarcodeList(); List<Barcode> barcodeList = data.getBarcodeList();
if (barcodeList != null && !barcodeList.isEmpty()) { if (barcodeList != null && !barcodeList.isEmpty()) {
...@@ -657,7 +676,7 @@ public class InventoryController { ...@@ -657,7 +676,7 @@ public class InventoryController {
inventoryDataManager.save(data); inventoryDataManager.save(data);
//同时,把当前料箱的盘点人,都改成当前登录人 //同时,把当前料箱的盘点人,都改成当前登录人
List<InventoryData> inventoryDataList = inventoryDataManager.findByQuery(new Query(Criteria.where("inventoryBatch").is(inventoryBatch).and("box").is(boxStr))); List<InventoryData> inventoryDataList = inventoryDataManager.findByQuery(new Query(Criteria.where("inventoryBatch").is(inventoryBatch).and("box").is(boxStr).and("oriPosName").is(data.getOriPosName())));
if (inventoryDataList != null && !inventoryDataList.isEmpty()){ if (inventoryDataList != null && !inventoryDataList.isEmpty()){
for (InventoryData inventoryData : inventoryDataList) { for (InventoryData inventoryData : inventoryDataList) {
inventoryData.setCreator(SecurityUtils.getCurrentUsername()); inventoryData.setCreator(SecurityUtils.getCurrentUsername());
......
...@@ -828,6 +828,7 @@ public class OutLineController { ...@@ -828,6 +828,7 @@ public class OutLineController {
posName = posName + "-" + pos.getId(); posName = posName + "-" + pos.getId();
} else { } else {
pos = new StoragePos(); pos = new StoragePos();
pos.setStorageId(storage.getId());
pos = storagePosManager.save(pos); pos = storagePosManager.save(pos);
posName = posName + "-" + pos.getId(); posName = posName + "-" + pos.getId();
} }
......
...@@ -263,7 +263,14 @@ public class InnerBoxRestController { ...@@ -263,7 +263,14 @@ public class InnerBoxRestController {
labelOrderItemMap.remove(cidKey); labelOrderItemMap.remove(cidKey);
} }
} else { } else {
labelOrderItemId = labelOrderItemMap.get(cid); if ("0000".equals(cid)) {
if (manualOrderItemIdList != null && !manualOrderItemIdList.isEmpty()) {
labelOrderItemId = manualOrderItemIdList.get(0);
manualOrderItemIdList.remove(0);
}
} else {
labelOrderItemId = labelOrderItemMap.get(cid);
}
} }
Map<String, String> resultMap = getPrintLabel(labelOrderItemId); Map<String, String> resultMap = getPrintLabel(labelOrderItemId);
if (resultMap == null || resultMap.isEmpty()) { if (resultMap == null || resultMap.isEmpty()) {
......
...@@ -155,6 +155,8 @@ public class InnerKanbanController { ...@@ -155,6 +155,8 @@ public class InnerKanbanController {
int totalSlots = resultList.stream().mapToInt(Storage::getTotalSlots).sum(); int totalSlots = resultList.stream().mapToInt(Storage::getTotalSlots).sum();
int emptySlots = resultList.stream().mapToInt(Storage::getEmptySlots).sum(); int emptySlots = resultList.stream().mapToInt(Storage::getEmptySlots).sum();
usage = (int) (((double) (totalSlots - emptySlots) / totalSlots) * 100); //库位使用率 usage = (int) (((double) (totalSlots - emptySlots) / totalSlots) * 100); //库位使用率
total = totalSlots;
use = totalSlots - emptySlots;
} }
Map<String,Integer> resultMap = new HashMap<>(); Map<String,Integer> resultMap = new HashMap<>();
resultMap.put("usage",usage); resultMap.put("usage",usage);
......
package com.neotel.smfcore.custom.lizhen.kanban.utils; package com.neotel.smfcore.custom.lizhen.kanban.utils;
import com.neotel.smfcore.common.bean.ResultBean; import com.neotel.smfcore.common.bean.ResultBean;
import com.neotel.smfcore.common.utils.StringUtils;
import com.neotel.smfcore.custom.lizhen.kanban.common.KanbanUtils; import com.neotel.smfcore.custom.lizhen.kanban.common.KanbanUtils;
import com.neotel.smfcore.custom.lizhen.kanban.utils.bean.AgvInfo; import com.neotel.smfcore.custom.lizhen.kanban.utils.bean.AgvInfo;
import com.neotel.smfcore.custom.lizhen.kanban.utils.enums.Location; import com.neotel.smfcore.custom.lizhen.kanban.utils.enums.Location;
...@@ -81,11 +82,18 @@ public class AgvStatusCache { ...@@ -81,11 +82,18 @@ public class AgvStatusCache {
locList.addAll(getLocByType(2)); locList.addAll(getLocByType(2));
locCnList.addAll(getLocCnByType(2)); locCnList.addAll(getLocCnByType(2));
} }
int type = 1;
for (AgvInfo agvInfo : agvInfoCacheList) { for (AgvInfo agvInfo : agvInfoCacheList) {
String loc = agvInfo.getLoc(); String loc = agvInfo.getLoc();
agvInfo.setLocCn(Location.getLoc(loc)); if (StringUtils.isNotBlank(Location.getLoc(loc))) {
agvInfo.setLocCn(Location.getLoc(loc));
} else {
agvInfo.setLocCn(agvInfo.getLoc());
}
agvInfo.setLocList(locList); agvInfo.setLocList(locList);
agvInfo.setLocCnList(locCnList); agvInfo.setLocCnList(locCnList);
agvInfo.setType(type);
type ++;
} }
return ResultBean.newOkResult(agvInfoCacheList); return ResultBean.newOkResult(agvInfoCacheList);
} }
......
...@@ -35,4 +35,6 @@ public class AgvInfo { ...@@ -35,4 +35,6 @@ public class AgvInfo {
* 位置集合 中文 * 位置集合 中文
*/ */
private List<String> locCnList; private List<String> locCnList;
int type = 0;
} }
...@@ -8,7 +8,7 @@ public enum Location { ...@@ -8,7 +8,7 @@ public enum Location {
//外仓点位 //外仓点位
WAREHOUSE("仓库", 2), WAREHOUSE("仓库", 2),
TAKE("取料点", 2), TAKE("取料点", 2),
PUT("料点", 2), PUT("料点", 2),
//内外仓,通用点位 //内外仓,通用点位
STANDBY("待机点", 0), STANDBY("待机点", 0),
......
package com.neotel.smfcore.custom.lizhen.util;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import java.util.Date;
public class ExpireDateUtil {
public static void main(String[] args) {
String barcodeStr = "138S00071-017425|FF2N14CY4-2302|10000|M1301742531BA1BCMZ|MURATA";
String pattern = "";
}
public static Date getExpireDate(String dateStr, String vendor) {
switch (vendor) {
case "UMT":
return getWWYYDate(dateStr);
case "AT&S":
return getWWYYDate(dateStr);
case "Compeq":
return getWWYYDate(dateStr);
case "Avary":
return getWWYYDate(dateStr);
case "AKMMV":
return getWWYYDate(dateStr);
case "HIROSE":
return getYYYYMMDDDate(dateStr);
case "SUNWAY":
return getYYMMDDDate(dateStr);
case "Fujikura":
return getYYWWDate(dateStr);
case "CCTC":
return getWWYYDate(dateStr);
case "Jones":
return getYYMMDDDate(dateStr);
case "Marian":
return getYYMMDDDate(dateStr);
case "Murata":
return getYYWWDate(dateStr);
case "JAE":
return getYYMMDate(dateStr);
case "UNISTEEL":
return getYYMMDDDate(dateStr);
case "PSM":
return getYYYYMMDDDate(dateStr);
case "HAMA":
return getYYMMDDDate(dateStr);
case "TRIUMPH/LY":
return getYYYYMMDDDate(dateStr);
case "Everwin":
return getYYMMDDDate(dateStr);
case "INTERPLEX":
return getYYMMDDDate(dateStr);
case "CYNTEC":
return getYYMMDDDate(dateStr);
case "YAGEO":
return getYYMMDDDate(dateStr);
case "Sony":
return getYYYYMMDDDate(dateStr);
case "Kioxia":
return getYYYYMMDDDate(dateStr);
case "Taiyo":
return getYYMMDate(dateStr);
case "Hynix":
return getYWWDate(dateStr);
case "Amkor":
return getYWWDDate(dateStr);
case "Qualcomm":
return getYYWWDate(dateStr);
case "Skyworks ":
return getYYWWDate(dateStr);
case "Qorvo":
return getYYWWDate(dateStr);
case "LG":
return getYYWWDate(dateStr);
case "ICT":
return getYYWWDate(dateStr);
case "USI-上海":
return getYYWWDate(dateStr);
case "JSCK":
return getYYWWDate(dateStr);
case "Kyocera":
return getYYWWDate(dateStr);
case "TDK":
return getYYWWDate(dateStr);
case "INFINEON":
return getYYWWDate(dateStr);
case "Epson":
return getYYWWDate(dateStr);
case "TXC":
return getYYWWDate(dateStr);
case "ON":
return getYYWWDate(dateStr);
case "TI":
return getYYWWDate(dateStr);
case "DIODES":
return getYYWWDate(dateStr);
case "TSMC":
return getYYWWDate(dateStr);
case "NXP":
return getYYWWDate(dateStr);
case "Cirrus":
return getYYWWDate(dateStr);
case "ADI":
return getYYWWDate(dateStr);
case "Broadcom ":
return getYYWWDate(dateStr);
case "ST":
return getYYWWDate(dateStr);
case "Bosch":
return getYYWWDate(dateStr);
case "SAMSUNG":
return getYYWWDate(dateStr);
case "WD":
return getYYWWDate(dateStr);
case "Richtek":
return getYYWWDate(dateStr);
case "Nexperia":
return getYYWWDate(dateStr);
case "GIGADEVICE":
return getYYWWDate(dateStr);
case "Winbond":
return getYYWWDate(dateStr);
case "Dialog/Renesas ":
return getYYWWDate(dateStr);
case "SITIME":
return getYYWWDate(dateStr);
case "ROHM":
return getYYWWDate(dateStr);
case "KDS":
return getYYWWDate(dateStr);
case "SEMTEC":
return getYYWWDate(dateStr);
}
return null;
}
public static Date getWWYYDate(String dateStr) {
DateTime dateTime = DateUtil.parse(dateStr, "wwyy");
return dateTime = DateUtil.beginOfWeek(dateTime);
}
public static Date getYYYYMMDDDate(String dateStr) {
return DateUtil.parse(dateStr, "yyyyMMdd");
}
public static Date getYYMMDDDate(String dateStr) {
return DateUtil.parse(dateStr, "yyMMdd");
}
public static Date getYYWWDate(String dateStr) {
DateTime dateTime = DateUtil.parse(dateStr, "yyww");
dateTime = DateUtil.beginOfWeek(dateTime);
return dateTime;
}
public static Date getYYMMDate(String dateStr) {
return DateUtil.parse(dateStr, "yyMM");
}
public static Date getYWWDate(String dateStr) {
int year = DateUtil.thisYear() / 10;
dateStr = dateStr.substring(0,dateStr.length() - 1);
DateTime dateTime = DateUtil.parse(year + dateStr, "yyyyww");
return DateUtil.beginOfWeek(dateTime);
}
public static Date getYWWDDate(String dateStr) {
int year = DateUtil.thisYear() / 10;
//获取到当前周
String currentDateStr = dateStr.substring(0, dateStr.length() - 1);
currentDateStr = year + currentDateStr;
DateTime dateTime = DateUtil.parse(currentDateStr, "yyyyww");
dateTime = DateUtil.beginOfWeek(dateTime);
//获取到第几天
int endDay = Integer.valueOf(dateStr.substring(dateStr.length() - 1));
dateTime = DateUtil.offsetDay(dateTime,endDay - 1);
return dateTime;
}
}
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!