diff --git a/src/main/java/com/huaheng/api/wcs/service/warecellAllocation/LocationAllocationServiceImpl.java b/src/main/java/com/huaheng/api/wcs/service/warecellAllocation/LocationAllocationServiceImpl.java index af3f280..4d473f8 100644 --- a/src/main/java/com/huaheng/api/wcs/service/warecellAllocation/LocationAllocationServiceImpl.java +++ b/src/main/java/com/huaheng/api/wcs/service/warecellAllocation/LocationAllocationServiceImpl.java @@ -239,7 +239,6 @@ public class LocationAllocationServiceImpl implements LocationAllocationService public String doubleRk(String roadWay, int high, Integer frequencyLocation, Integer emptyContainerTask, boolean isFlammable, String taskNo, boolean bypass) { //boolean isSecondFactory = isSecondFactory();//是否是二厂项目 int reserveNumber = 0; - //二厂,分拣任务回库的时候,也要判断预留库位 if (!bypass) { reserveNumber = getReserveNumber(roadWay); } @@ -264,8 +263,7 @@ public class LocationAllocationServiceImpl implements LocationAllocationService .eq(Location::getContainerCode, "") .eq(Location::getSelfCreated, NO_TSELFCREATED) .eq(Location::getOnlyEmptyContainer, NO_EMPTY_CONTAINER_LOCATION) - .eq(Location::getHigh, high) - .last(" limit 20"); + .eq(Location::getHigh, high); //if (isSecondFactory) { // wrapper.ge(Location::getHigh, high); //} else { @@ -287,8 +285,7 @@ public class LocationAllocationServiceImpl implements LocationAllocationService .eq(Location::getOnlyEmptyContainer, NO_EMPTY_CONTAINER_LOCATION) .orderByAsc(Location::getHigh) .orderByAsc(Location::getILayer) - .orderByAsc(Location::getId) - .last(" limit 20"); + .orderByAsc(Location::getId); //if (isSecondFactory) { // locationLambda.ge(Location::getHigh, high); //} else { @@ -321,8 +318,7 @@ public class LocationAllocationServiceImpl implements LocationAllocationService .eq(Location::getHigh, high) .orderByAsc(Location::getHigh) .orderByAsc(Location::getILayer) - .orderByAsc(Location::getId) - .last(" limit 20"); + .orderByAsc(Location::getId); //if (isSecondFactory) { // locationLambda2.ge(Location::getHigh, high); //} else { @@ -367,8 +363,7 @@ public class LocationAllocationServiceImpl implements LocationAllocationService .eq(Location::getContainerCode, "") .eq(Location::getSelfCreated, SELFCREATED) .eq(Location::getOnlyEmptyContainer, NO_EMPTY_CONTAINER_LOCATION) - .eq(Location::getHigh, high) - .last(" limit 20"); + .eq(Location::getHigh, high); //if (isSecondFactory) { // wrapper.ge(Location::getHigh, high); //} else { @@ -391,8 +386,7 @@ public class LocationAllocationServiceImpl implements LocationAllocationService .eq(Location::getOnlyEmptyContainer, NO_EMPTY_CONTAINER_LOCATION) .orderByAsc(Location::getHigh) .orderByAsc(Location::getILayer) - .orderByAsc(Location::getId) - .last(" limit 20"); + .orderByAsc(Location::getId); //if (isSecondFactory) { // locationLambda.ge(Location::getHigh, high); @@ -426,8 +420,7 @@ public class LocationAllocationServiceImpl implements LocationAllocationService .eq(Location::getHigh, high) .orderByAsc(Location::getHigh) .orderByAsc(Location::getILayer) - .orderByAsc(Location::getId) - .last(" limit 20"); + .orderByAsc(Location::getId); //if (isSecondFactory) { // locationLambda2.ge(Location::getHigh, high); //} else { @@ -479,8 +472,7 @@ public class LocationAllocationServiceImpl implements LocationAllocationService .eq(Location::getContainerCode, "") .eq(Location::getSelfCreated, NO_TSELFCREATED) .eq(Location::getHigh, high) - .eq(Location::getOnlyEmptyContainer, NO_EMPTY_CONTAINER_LOCATION) - .last(" limit 20"); + .eq(Location::getOnlyEmptyContainer, NO_EMPTY_CONTAINER_LOCATION); //if (isSecondFactory) { // wrapper.ge(Location::getHigh, high); diff --git a/src/main/java/com/huaheng/pc/monitor/job/task/RyTask.java b/src/main/java/com/huaheng/pc/monitor/job/task/RyTask.java index e2ca94c..577985e 100644 --- a/src/main/java/com/huaheng/pc/monitor/job/task/RyTask.java +++ b/src/main/java/com/huaheng/pc/monitor/job/task/RyTask.java @@ -349,8 +349,7 @@ public class RyTask extends BaseController { .eq(TaskHeader::getStatus, QuantityConstant.TASK_STATUS_COMPLETED) .lt(TaskHeader::getPushErrorCount, 2) .in(TaskHeader::getTaskType, QuantityConstant.TASK_TYPE_WHOLERECEIPT, QuantityConstant.TASK_TYPE_SUPPLEMENTRECEIPT) - .eq(TaskHeader::getBackMoM, 0) - .last("LIMIT 5"); + .eq(TaskHeader::getBackMoM, 0); List<TaskHeader> taskHeaderList = taskHeaderService.list(taskHeaderLambdaQueryWrapper); for (TaskHeader taskHeader : taskHeaderList) { try { @@ -708,56 +707,37 @@ public class RyTask extends BaseController { } - public void saveWcsTaskRecord() { - String date = DateUtils.getDate(); - LambdaQueryWrapper<TaskTime> lambdaQueryWrapper = new LambdaQueryWrapper<>(); - lambdaQueryWrapper.eq(TaskTime::getCreatedTime, date); - lambdaQueryWrapper.last("limit 1"); - TaskTime OneTaskTime = taskTimeMapper.selectOne(lambdaQueryWrapper); - if (!Objects.isNull(OneTaskTime)) { - return; - } - String startTime = StringUtils.join(date, " 00:00:00"); - String endTime = StringUtils.join(date, " 23:59:59"); - Map<String, Object> map = srmTaskInfoService.getData(startTime, endTime); - List<TaskTime> taskTimeMapListResult = (List<TaskTime>) map.get("taskTimeMapListResult"); - List<TaskNum> taskNumMapListResult = (List<TaskNum>) map.get("taskNumMapListResult"); - List<SrmStatusTime> srmStatusMapList = (List<SrmStatusTime>) map.get("srmStatusMapList"); - List<TaskTime> taskTimes = BeanUtil.copyToList(taskTimeMapListResult, TaskTime.class); - List<TaskNum> taskNums = BeanUtil.copyToList(taskNumMapListResult, TaskNum.class); - List<SrmStatusTime> statusTimes = BeanUtil.copyToList(srmStatusMapList, SrmStatusTime.class); - taskTimes.forEach(taskTime -> taskTimeMapper.insert(taskTime)); - taskNums.forEach(taskNum -> taskNumMapper.insert(taskNum)); - statusTimes.forEach(srmStatusTime -> srmStatusTimeMapper.insert(srmStatusTime)); - } - - //修复错误的单据状态 建议十分钟一次 public void fixErroneousBillStatus() { - //List<ReceiptHeader> receiptHeaderList = receiptHeaderService.list(new LambdaQueryWrapper<ReceiptHeader>() - // .eq(ReceiptHeader::getFirstStatus, QuantityConstant.RECEIPT_HEADER_POSTING) - // .ne(ReceiptHeader::getLastStatus, QuantityConstant.RECEIPT_HEADER_POSTING) - // .eq(ReceiptHeader::getDeleted, 1)); - // - //List<ReceiptHeader> newReceiptHeaderList = receiptHeaderList.stream() - // .filter(receiptHeader -> { - // List<ReceiptDetail> receiptDetails = receiptDetailService.list(new LambdaQueryWrapper<ReceiptDetail>().eq(ReceiptDetail::getReceiptId, receiptHeader.getId())); - // return receiptDetails.stream().allMatch(detail -> detail.getQty().equals(detail.getTaskQty())); - // }) - // .collect(Collectors.toList()); - // - //for (ReceiptHeader receiptHeader : newReceiptHeaderList) { - // - // int taskCount = taskDetailService.count(new LambdaQueryWrapper<TaskDetail>() - // .eq(TaskDetail::getBillCode, receiptHeader.getCode()) - // .eq(TaskDetail::getInternalTaskType, QuantityConstant.TASK_TYPE_WHOLERECEIPT) - // .ne(TaskDetail::getStatus, QuantityConstant.TASK_STATUS_COMPLETED)); - // if (taskCount == 0) { - // receiptHeader.setLastStatus(QuantityConstant.RECEIPT_HEADER_POSTING); - // receiptHeader.setErrorMsg("单据尾状态异常"); - // receiptHeaderService.updateById(receiptHeader); - // } - //} + List<ReceiptHeader> receiptHeaderList = receiptHeaderService.list(new LambdaQueryWrapper<ReceiptHeader>() + .eq(ReceiptHeader::getFirstStatus, QuantityConstant.RECEIPT_HEADER_RETURN) + .eq(ReceiptHeader::getLastStatus, QuantityConstant.RECEIPT_HEADER_POSTING) + .eq(ReceiptHeader::getDeleted, 1)); + // ReceiptDetail 的数量 (qty) 和任务数量 (taskQty) 相等时,该 ReceiptHeader 才会被保留在新的列表中。 + List<ReceiptHeader> newReceiptHeaderList = receiptHeaderList.stream() + .filter(receiptHeader -> { + List<ReceiptDetail> receiptDetails = receiptDetailService.list(new LambdaQueryWrapper<ReceiptDetail>().eq(ReceiptDetail::getReceiptId, receiptHeader.getId())); + return receiptDetails.stream().allMatch(detail -> detail.getQty().equals(detail.getTaskQty())); + }) + .collect(Collectors.toList()); + + //查询任务是否都已回传,已回传就完成单据,让它进入历史 + for (ReceiptHeader receiptHeader : newReceiptHeaderList) { + List<TaskDetail> detailList = taskDetailService.list(new LambdaQueryWrapper<TaskDetail>() + .eq(TaskDetail::getBillCode, receiptHeader.getCode()) + .eq(TaskDetail::getInternalTaskType, QuantityConstant.TASK_TYPE_WHOLERECEIPT)); + + Integer[] taskIds = detailList.stream().map(TaskDetail::getTaskId).distinct().toArray(Integer[]::new); + + List<TaskHeader> taskHeaderList = taskHeaderService.getTasksByIds(taskIds); + boolean flag = taskHeaderList.stream().allMatch(taskHeader -> taskHeader.getBackMoM() == 1); + if (flag) { + receiptHeader.setPushSuccessStatus(1); + receiptHeader.setLastStatus(QuantityConstant.RECEIPT_HEADER_RETURN); + receiptHeader.setErrorMsg("单据尾状态异常"); + receiptHeaderService.updateById(receiptHeader); + } + } //出库单----------------------------------------- diff --git a/src/main/java/com/huaheng/pc/task/taskHeader/controller/TaskHeaderController.java b/src/main/java/com/huaheng/pc/task/taskHeader/controller/TaskHeaderController.java index 9580360..b4e680b 100644 --- a/src/main/java/com/huaheng/pc/task/taskHeader/controller/TaskHeaderController.java +++ b/src/main/java/com/huaheng/pc/task/taskHeader/controller/TaskHeaderController.java @@ -126,6 +126,7 @@ public class TaskHeaderController extends BaseController { .gt(StringUtils.isNotEmpty(createdBegin), TaskHeader::getCreated, createdBegin) .lt(StringUtils.isNotEmpty(createdEnd), TaskHeader::getCreated, createdEnd) .gt(StringUtils.isNotEmpty(completeTimeBegin), TaskHeader::getCompleteTime, completeTimeBegin) + .in(StringUtils.isNotEmpty(taskHeader.getBillCode()), TaskHeader::getId, taskDetailService.list(new LambdaQueryWrapper<TaskDetail>().eq(TaskDetail::getBillCode, taskHeader.getBillCode())).stream().map(TaskDetail::getTaskId).collect(Collectors.toList())) .lt(StringUtils.isNotEmpty(completeTimeEnd), TaskHeader::getCompleteTime, completeTimeEnd) .orderByAsc(TaskHeader::getStatus) .orderByDesc(TaskHeader::getId); diff --git a/src/main/java/com/huaheng/pc/task/taskHeader/domain/TaskHeader.java b/src/main/java/com/huaheng/pc/task/taskHeader/domain/TaskHeader.java index e7ef716..992cf20 100644 --- a/src/main/java/com/huaheng/pc/task/taskHeader/domain/TaskHeader.java +++ b/src/main/java/com/huaheng/pc/task/taskHeader/domain/TaskHeader.java @@ -431,5 +431,13 @@ public class TaskHeader implements Serializable { @TableField(exist = false) private String zoneName; + + @TableField(exist = false) + private String billCode; + + @TableField(exist = false) + private String receiptCode; + @TableField(exist = false) + private String shipmentCode; } diff --git a/src/main/java/com/huaheng/pc/task/taskHeader/service/ReceiptTaskService.java b/src/main/java/com/huaheng/pc/task/taskHeader/service/ReceiptTaskService.java index 7d2c4fd..e73f10a 100644 --- a/src/main/java/com/huaheng/pc/task/taskHeader/service/ReceiptTaskService.java +++ b/src/main/java/com/huaheng/pc/task/taskHeader/service/ReceiptTaskService.java @@ -486,6 +486,25 @@ public class ReceiptTaskService { throw new ServiceException("更新入库组盘头表状态失败"); } } + //任务明细为空,任务类型为补充入库 + if (taskDetailList.isEmpty() && task.getTaskType().equals(QuantityConstant.TASK_TYPE_SUPPLEMENTRECEIPT)) { + List<ReceiptContainerHeader> list = receiptContainerHeaderService.list(new LambdaQueryWrapper<ReceiptContainerHeader>() + .eq(ReceiptContainerHeader::getFromLocation, task.getFromLocation()) + .eq(ReceiptContainerHeader::getStatus, QuantityConstant.RECEIPT_HEADER_BUILD) + .eq(ReceiptContainerHeader::getContainerCode, task.getContainerCode())); + if (!list.isEmpty()) { + //取消组盘 + if (list.size() > 1) { + throw new ServiceException("完成空明细补充入库任务时,获取的组盘输了大于1,请根据来源库位和容器排查为什么会有两条"); + } + Integer id = list.get(0).getId(); + if (!receiptContainerHeaderService.cancelByIds(Collections.singletonList(id))) { + throw new ServiceException("完成空明细补充入库任务时,取消组盘失败"); + } + } + } + + return AjaxResult.success(); } @@ -660,6 +679,7 @@ public class ReceiptTaskService { ReceiptDetail receiptDetail = receiptDetailService.getById(taskDetail.getBillDetailId()); if (!"MOM".equals(receiptDetail.getCreatedBy())) { + updateTaskHeaderWithSuccess(taskHeader); continue; // 只处理创建者为MOM的明细 } @@ -673,6 +693,12 @@ public class ReceiptTaskService { continue; } + //快速入平库,也不用回传 + if (receiptHeader.getIsFastReceipt() == 1) { + updateTaskHeaderWithSuccess(taskHeader); + continue; + } + // 调用接口进行回传操作 ReturnInfo returnInfo = mesReceiptController.postE_Rd_In(receiptDetail); processReturnInfo(returnInfo, taskDetail, taskHeader, receiptHeader); diff --git a/src/main/resources/templates/receipt/receiptContainerHeader/receiptContainerHeader.html b/src/main/resources/templates/receipt/receiptContainerHeader/receiptContainerHeader.html index 6ea42a9..6abb4f9 100644 --- a/src/main/resources/templates/receipt/receiptContainerHeader/receiptContainerHeader.html +++ b/src/main/resources/templates/receipt/receiptContainerHeader/receiptContainerHeader.html @@ -34,16 +34,15 @@ <li> 库位编号:<input type="text" name="toLocation"/> </li> - <li> - <!--入库类型:<input type="text" name="sourceCode"/> - --> - 任务类型:<select name="taskType" - th:with="type=${@dict.getType('receiptTaskType')}"> - <option value="">所有</option> - <option th:each="e : ${type}" th:text="${e['dictLabel']}" - th:value="${e['dictValue']}"></option> - </select> - </li> +<!-- <li>--> +<!-- <!–入库类型:<input type="text" name="sourceCode"/>--> +<!-- –>--> +<!-- 任务类型:<select name="taskType" th:with="type=${@dict.getType('receiptTaskType')}">--> +<!-- <option value="">所有</option>--> +<!-- <option th:each="e : ${type}" th:text="${e['dictLabel']}"--> +<!-- th:value="${e['dictValue']}"></option>--> +<!-- </select>--> +<!-- </li>--> <li> <!--头 状 态:<input type="text" name="firstStatus"/>--> 容器任务状态:<select name="Status" @@ -142,8 +141,12 @@ title: '容器编号', }, { + field: 'fromLocation', + title: '来源库位编号', + }, + { field: 'toLocation', - title: '库位编号', + title: '目标库位编号', }, { field: 'taskType', diff --git a/src/main/resources/templates/task/taskHeader/taskHeader.html b/src/main/resources/templates/task/taskHeader/taskHeader.html index b589d58..dfc94c2 100644 --- a/src/main/resources/templates/task/taskHeader/taskHeader.html +++ b/src/main/resources/templates/task/taskHeader/taskHeader.html @@ -46,6 +46,9 @@ 任务id:<input type="text" name="id"/> </li> <li> + 单据编码:<input type="billCode" name="billCode"/> + </li> + <li> 任务类型:<select id="taskType" name="taskType" th:with="type=${@dict.getType('taskType')}"> <option value="">所有</option>