From c96d7cac4e3ed8d8ab3d2ef4fbee8be372f1a3b0 Mon Sep 17 00:00:00 2001 From: skyouc Date: 星期二, 22 七月 2025 13:27:50 +0800 Subject: [PATCH] no message --- rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java | 189 +++++++++++++++++++++++-------------- rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/CheckOrderSchedules.java | 43 ++++---- rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/PdaCheckOrderServiceImpl.java | 13 ++ rsf-admin/src/page/orders/check/checkDiff/CheckDiffList.jsx | 6 4 files changed, 153 insertions(+), 98 deletions(-) diff --git a/rsf-admin/src/page/orders/check/checkDiff/CheckDiffList.jsx b/rsf-admin/src/page/orders/check/checkDiff/CheckDiffList.jsx index 9695fca..64f2008 100644 --- a/rsf-admin/src/page/orders/check/checkDiff/CheckDiffList.jsx +++ b/rsf-admin/src/page/orders/check/checkDiff/CheckDiffList.jsx @@ -107,7 +107,7 @@ marginRight: !!drawerVal ? `${PAGE_DRAWER_WIDTH}px` : 0, }} title={"menu.checkDiff"} - empty={<EmptyData onClick={() => { setCreateDialog(true) }} />} + empty={false} filters={filters} sort={{ field: "create_time", order: "desc" }} actions={( @@ -124,8 +124,8 @@ preferenceKey='checkDiff' bulkActionButtons={() => <BulkDeleteButton mutationMode={OPERATE_MODE} />} rowClick={(id, resource, record) => false} - expand={() => <CheckDiffPanel />} - expandSingle={true} + expand={false} + expandSingle={false} omit={['id', 'createTime', 'createBy', 'memo']} > <NumberField source="id" /> diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/PdaCheckOrderServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/PdaCheckOrderServiceImpl.java index 2780e06..0f6db5a 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/PdaCheckOrderServiceImpl.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/PdaCheckOrderServiceImpl.java @@ -161,17 +161,24 @@ if (null == diffItem) { return R.error("鏁版嵁閿欒锛屾湭鎵惧埌宸紓鍗曟槑缁�"); } + diffItem.setCheckQty(ckDiffItem.getCheckQty()).setReason(ckDiffItem.getReason()).setMemo(ckDiffItem.getMemo()); } diffItem.setExceStatus(CheckDiffExceStatus.CHECK_DIFF_EXCE_STATUS_HOLD.val); if (!checkDiffItemService.updateById(diffItem)) { throw new CoolException("鏇存柊宸紓鍗曟槑缁嗗け璐�"); } - Double checkQty = Math.round((checkDiff.getCheckQty() + diffItem.getCheckQty()) * 10000) / 10000.0; - checkDiff.setCheckQty(checkQty); +// Double checkQty = Math.round((checkDiff.getCheckQty() + diffItem.getCheckQty()) * 10000) / 10000.0; +// checkDiff.setCheckQty(checkQty); } - checkDiff.setExceStatus(CheckDiffExceStatus.CHECK_DIFF_EXCE_STATUS_HOLD.val); + List<CheckDiffItem> diffItems = checkDiffItemService.list(new LambdaQueryWrapper<CheckDiffItem>() + .eq(CheckDiffItem::getCheckId, checkDiff.getId())); + if (diffItems.isEmpty()) { + throw new CoolException("鐩樼偣宸紓鍗曟槑缁嗕笉瀛樺湪锛侊紒"); + } + Double sum = diffItems.stream().mapToDouble(CheckDiffItem::getCheckQty).sum(); + checkDiff.setExceStatus(CheckDiffExceStatus.CHECK_DIFF_EXCE_STATUS_HOLD.val).setCheckQty(sum); if (!checkDiffService.updateById(checkDiff)) { throw new CoolException("鏇存柊宸紓鍗曞け璐�"); } diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/CheckOrderSchedules.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/CheckOrderSchedules.java index d201957..cf17c46 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/CheckOrderSchedules.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/CheckOrderSchedules.java @@ -52,6 +52,7 @@ public void genReCheck() { List<Task> tasks = taskService.list(new LambdaQueryWrapper<Task>() .select(Task::getId) + .eq(Task::getTaskStatus, TaskStsType.GENERATE_OUT.id) .eq(Task::getTaskType, TaskType.TASK_TYPE_CHECK_OUT.type)); if (tasks.isEmpty()) { return; @@ -59,15 +60,12 @@ List<CheckDiffItem> list = checkDiffItemService .list(new LambdaQueryWrapper<CheckDiffItem>() .select(CheckDiffItem::getTaskItemId)); - if (list.isEmpty()) { - return; - } Set<Long> taskIds = tasks.stream().map(Task::getId).collect(Collectors.toSet()); List<Long> itemIds = list.stream().map(CheckDiffItem::getTaskItemId).collect(Collectors.toList()); List<TaskItem> taskItems = taskItemService .list(new LambdaQueryWrapper<TaskItem>() .in(TaskItem::getTaskId, taskIds) - .notIn(TaskItem::getId, itemIds)); + .notIn(!itemIds.isEmpty(), TaskItem::getId, itemIds)); if (taskItems.isEmpty()) { return; } @@ -90,22 +88,21 @@ .setUpdateBy(loginUserId) .setUpdateTime(new Date()) .setOrderId(order.getId()); - if (!checkDiffService.save(checkDiff)) { + if (!checkDiffService.saveOrUpdate(checkDiff)) { throw new CoolException("鐩樼偣宸紓鍗曚繚瀛樺け璐ワ紒锛�"); } } List<TaskItem> items = taskMps.get(orderId); List<CheckDiffItem> diffItems = new ArrayList<>(); - CheckDiff finalCheckDiff = checkDiff; - items.forEach(item -> { + for (TaskItem item : items) { Task task = taskService.getById(item.getTaskId()); if (Objects.isNull(task)) { throw new CoolException("鏁版嵁閿欒锛氫换鍔′笉瀛樺湪锛侊紒"); } CheckDiffItem checkDiffItem = new CheckDiffItem(); BeanUtils.copyProperties(item, checkDiffItem); - checkDiffItem.setCheckId(finalCheckDiff.getId()) + checkDiffItem.setCheckId(checkDiff.getId()) .setTaskItemId(item.getId()) .setTaskId(item.getTaskId()) .setCreateBy(loginUserId) @@ -113,23 +110,25 @@ .setBarcode(task.getBarcode()) .setUpdateBy(loginUserId) .setUpdateTime(new Date()) - .setOrderCode(finalCheckDiff.getOrderCode()); + .setOrderCode(checkDiff.getOrderCode()); diffItems.add(checkDiffItem); - if (Objects.isNull(finalCheckDiff.getAreaId())) { - Loc loc = locService.getOne(new LambdaQueryWrapper<Loc>() - .eq(Loc::getCode, task.getOrgLoc()) - .eq(Loc::getUseStatus, LocStsType.LOC_STS_TYPE_R.type)); - if (Objects.isNull(loc)) { - throw new CoolException("鐩樼偣搴撲綅涓嶅瓨鍦紒锛�"); - } - finalCheckDiff.setAreaId(loc.getAreaId()).setAreaName(loc.getAreaId$()); +// if (Objects.isNull(checkDiff.getAreaId())) { +// Loc loc = locService.getOne(new LambdaQueryWrapper<Loc>() +// .eq(Loc::getCode, task.getOrgLoc()) +// .eq(Loc::getUseStatus, LocStsType.LOC_STS_TYPE_R.type)); +// if (Objects.isNull(loc)) { +// throw new CoolException("鐩樼偣搴撲綅涓嶅瓨鍦紒锛�"); +// } +//// finalCheckDiff.setAreaId(loc.getAreaId()).setAreaName(loc.getAreaId$()); +// } + } - if (!checkDiffService.updateById(finalCheckDiff)) { - throw new CoolException("搴撳尯淇℃伅淇敼澶辫触锛侊紒"); - } - } - }); +// checkDiff.setAreaId(finalCheckDiff.getAreaId()).setAreaName(finalCheckDiff.getAreaName()); +// +// if (!checkDiffService.updateById(checkDiff)) { +// throw new CoolException("搴撳尯淇℃伅淇敼澶辫触锛侊紒"); +// } if (!checkDiffItemService.saveBatch(diffItems)) { throw new CoolException("鐩樼偣宸紓鍗曚繚瀛樺け璐ワ紒锛�"); diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java index a9b1461..b269e33 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java @@ -33,6 +33,7 @@ import java.util.*; import java.util.stream.Collectors; +import java.util.stream.Stream; @Service("taskService") public class TaskServiceImpl extends ServiceImpl<TaskMapper, Task> implements TaskService { @@ -683,13 +684,13 @@ if (taskItems.isEmpty()) { throw new CoolException("浠诲姟鏄庣粏涓嶅瓨鍦紒锛�"); } + List<LocItem> items = new ArrayList<>(); for (TaskItem taskItem : taskItems) { LocItem locItem = new LocItem(); LocItemWorking locWorking = locItemWorkingService.getOne(new LambdaQueryWrapper<LocItemWorking>() .eq(LocItemWorking::getTaskId, taskItem.getTaskId()) .eq(StringUtils.isNotBlank(taskItem.getBatch()), LocItemWorking::getBatch, taskItem.getBatch()) -// .eq(StringUtils.isNotBlank(taskItem.getFieldsIndex()), LocItemWorking::getFieldsIndex, taskItem.getFieldsIndex()) .eq(LocItemWorking::getMatnrId, taskItem.getMatnrId())); if (Objects.isNull(locWorking)) { throw new CoolException("鏁版嵁閿欒锛屼綔涓氫腑搴撳瓨鏁版嵁涓㈠け锛侊紒"); @@ -787,17 +788,9 @@ throw new CoolException("鐩樼偣鍗曟墽琛屾暟閲忎慨鏀瑰け璐ワ紒锛�"); } - List<CheckDiffItem> diffItems = checkDiffItemService - .list(new LambdaQueryWrapper<CheckDiffItem>() - .eq(CheckDiffItem::getTaskItemId, taskItem.getTaskId())); - if (!diffItems.isEmpty()) { - CheckDiffItem item = diffItems.stream().findFirst().get(); - List<CheckDiffItem> items = checkDiffItemService.list(new LambdaQueryWrapper<CheckDiffItem>() - .eq(CheckDiffItem::getId, item.getCheckId())); - if (items.isEmpty()) { - checkDiffService.removeById(item.getCheckId()); - } - } + checkDiffItemService.remove(new LambdaQueryWrapper<CheckDiffItem>().eq(CheckDiffItem::getTaskItemId, taskItem.getId())); + + checkDiffService.removeById(taskItem.getSourceId()); }); } @@ -991,46 +984,78 @@ if (!this.updateById(task)) { throw new CoolException("浠诲姟鐘舵�佹洿鏂板け璐ワ紒锛�"); } - + //鑾峰彇鍥犲綋鍓嶄换鍔″嚭搴撶殑鎵�鏈夌墿鏂欎俊鎭� + List<LocItemWorking> tempLocs = locItemWorkingService.list(new LambdaQueryWrapper<LocItemWorking>().eq(LocItemWorking::getTaskId, task.getId())); + if (tempLocs.isEmpty()) { + throw new CoolException("鏁版嵁閿欒锛屼綔涓氫腑搴撳瓨鏁版嵁涓㈠け锛侊紒"); + } List<TaskItem> taskItems = taskItemService.list(new LambdaQueryWrapper<TaskItem>().eq(TaskItem::getTaskId, task.getId())); - for (int i = 0; i < taskItems.size(); i++) { - TaskItem taskItem = taskItems.get(i); - LocItemWorking locWorking = locItemWorkingService.getOne(new LambdaQueryWrapper<LocItemWorking>() - .eq(LocItemWorking::getTaskId, taskItem.getTaskId()) - .eq(StringUtils.isNotBlank(taskItem.getBatch()), LocItemWorking::getBatch, taskItem.getBatch()) -// .eq(StringUtils.isNotBlank(taskItem.getFieldsIndex()), LocItemWorking::getFieldsIndex, taskItem.getFieldsIndex()) - .eq(LocItemWorking::getMatnrId, taskItem.getMatnrId())); - if (Objects.isNull(locWorking)) { - throw new CoolException("鏁版嵁閿欒锛屼綔涓氫腑搴撳瓨鏁版嵁涓㈠け锛侊紒"); - } - if (task.getTaskType().equals(TaskType.TASK_TYPE_CHECK_IN.type)) { - locWorking.setWorkQty(0.0); - locWorking.setAnfme(taskItem.getAnfme()); - } else { - if (locWorking.getAnfme().compareTo(taskItem.getAnfme()) >= 0) { - locWorking.setWorkQty(0.0); - locWorking.setAnfme(Math.round((locWorking.getAnfme() - taskItem.getAnfme()) * 10000) / 10000.0); - } else { - continue; + if (taskItems.isEmpty()) { + throw new CoolException("鏁版嵁閿欒锛氫换鍔℃槑缁嗕负绌猴紒锛�"); + } + + tempLocs.forEach(working -> { + taskItems.forEach(taskItem -> { + if (taskItem.getMatnrId().equals(working.getMatnrId())) { + Double minQty = Math.round((working.getAnfme() - taskItem.getAnfme()) * 10000) / 10000.0; + if (minQty.compareTo(0.0) > 0) { + taskItem.setAnfme(minQty); + if (!taskItemService.updateById(taskItem)) { + throw new CoolException("浠诲姟鏄庣粏淇敼澶辫触锛侊紒"); + } + + } else { + if (!taskItemService.removeById(taskItem)) { + throw new CoolException("浠诲姟鏄庣粏淇敼澶辫触锛侊紒"); + } + } } - } - if (!locItemWorkingService.updateById(locWorking)) { - throw new CoolException("涓存椂搴撳瓨鏇存柊澶辫触锛侊紒"); - } - taskItems.get(i).setAnfme(locWorking.getAnfme()); - } + }); + }); + List<Long> matnrIds = taskItems.stream().map(TaskItem::getMatnrId).collect(Collectors.toList()); + //鍒犻櫎涓庝换鍔℃槑缁嗛噸澶嶇殑搴撳瓨淇℃伅锛屼互浠诲姟鏄庣粏涓哄噯 + List<LocItemWorking> itemWorkings = tempLocs.stream() + .filter(working -> !matnrIds.contains(working.getMatnrId())) + .collect(Collectors.toList()); + itemWorkings.forEach(working -> { + TaskItem taskItem = taskItems.stream().findFirst().get(); + taskItem.setMatnrId(working.getMatnrId()) + .setMaktx(working.getMaktx()) + .setSpec(working.getSpec()) + .setAnfme(working.getAnfme()) + .setBatch(working.getBatch()) + .setFieldsIndex(working.getFieldsIndex()) + .setUnit(working.getUnit()) + .setId(null) + .setModel(working.getModel()); - if (!taskItemService.updateBatchById(taskItems)) { - throw new CoolException("浠诲姟鏄庣粏鏇存柊澶辫触锛侊紒"); - } + if (!taskItemService.saveOrUpdate(taskItem)) { + throw new CoolException("涓存椂搴撳瓨杞换鍔℃槑缁嗗け璐ワ紒锛�"); + } + }); - Loc one = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getCode, task.getTargLoc())); - if (Objects.isNull(one)) { + locItemWorkingService.remove(new LambdaQueryWrapper<LocItemWorking>().eq(LocItemWorking::getTaskId, task.getId())); + Loc loc1 = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getCode, task.getOrgLoc())); + if (Objects.isNull(loc1)) { throw new CoolException("鐩爣搴撲綅涓嶅瓨鍦紒锛�"); } - one.setUseStatus(LocStsType.LOC_STS_TYPE_S.type); - if (!locService.updateById(one)) { + List<LocItemWorking> workings = new ArrayList<>(); + List<TaskItem> items = taskItemService.list(new LambdaQueryWrapper<TaskItem>().eq(TaskItem::getTaskId, task.getId())); + items.forEach(taskItem -> { + LocItemWorking itemWorking = new LocItemWorking(); + BeanUtils.copyProperties(taskItem, itemWorking); + itemWorking.setTaskId(task.getId()).setLocId(loc1.getId()).setLocCode(loc1.getCode()); + workings.add(itemWorking); + }); + + if (!locItemWorkingService.saveBatch(workings)) { + throw new CoolException("涓存椂搴撳瓨鏇存柊澶辫触锛侊紒"); + } + + loc1.setUseStatus(LocStsType.LOC_STS_TYPE_S.type); + + if (!locService.updateById(loc1)) { throw new CoolException("搴撲綅棰勭害鍏ュ簱澶辫触锛侊紒"); } return task; @@ -1098,35 +1123,41 @@ * */ List<TaskItem> list = listMap.get(Short.parseShort(OrderWorkType.ORDER_WORK_TYPE_STOCK_OUT.type)); if (Objects.isNull(list) || list.isEmpty()) { - Map<Long, List<TaskItem>> maps = taskItems.stream().collect(Collectors.groupingBy(TaskItem::getSource)); - maps.keySet().forEach(key -> { - if (task.getResource().equals(TaskResouceType.TASK_RESOUCE_WAVE_TYPE.val)) { - WaveItem waveItem = waveItemService.getById(key); - if (Objects.isNull(waveItem)) { - throw new CoolException("娉㈡鏄庣粏涓嶅瓨鍦紒锛�"); - } - try { - saveOutStockItem(maps.get(key), null, waveItem, loginUserId); - } catch (Exception e) { - throw new CoolException(e.getMessage()); - } - } else if (task.getResource().equals(TaskResouceType.TASK_RESOUCE_ORDER_TYPE.val) || task.getResource().equals(TaskResouceType.TASK_RESOUCE_CHECK_TYPE.val)) { - WkOrderItem orderItem = asnOrderItemService.getById(key); - if (Objects.isNull(orderItem)) { - throw new CoolException("鍗曟嵁鏄庣粏涓嶅瓨鍦紒锛�"); - } - try { - saveOutStockItem(maps.get(key), orderItem, null, loginUserId); - } catch (Exception e) { - throw new CoolException(e.getMessage()); - } + Map<Long, List<TaskItem>> maps = taskItems.stream().collect(Collectors.groupingBy(TaskItem::getSource)); + maps.keySet().forEach(key -> { + if (task.getResource().equals(TaskResouceType.TASK_RESOUCE_WAVE_TYPE.val)) { + WaveItem waveItem = waveItemService.getById(key); + if (Objects.isNull(waveItem)) { + throw new CoolException("娉㈡鏄庣粏涓嶅瓨鍦紒锛�"); + } + try { + saveOutStockItem(maps.get(key), null, waveItem, null, loginUserId); + } catch (Exception e) { + throw new CoolException(e.getMessage()); + } + } else if (task.getResource().equals(TaskResouceType.TASK_RESOUCE_ORDER_TYPE.val) || task.getResource().equals(TaskResouceType.TASK_RESOUCE_CHECK_TYPE.val)) { + WkOrderItem orderItem = new WkOrderItem(); + if (task.getResource().equals(TaskResouceType.TASK_RESOUCE_CHECK_TYPE.val)) { + CheckDiffItem diffItem = checkDiffItemService.getById(key); } else { + orderItem = asnOrderItemService.getById(key); } - }); + if (Objects.isNull(orderItem)) { + throw new CoolException("鍗曟嵁鏄庣粏涓嶅瓨鍦紒锛�"); + } + try { + saveOutStockItem(maps.get(key), orderItem, null, null, loginUserId); + } catch (Exception e) { + throw new CoolException(e.getMessage()); + } + } else { + + } + }); } else { try { - saveOutStockItem(taskItems, null, null, loginUserId); + saveOutStockItem(taskItems, null, null, null, loginUserId); } catch (Exception e) { throw new CoolException(e.getMessage()); } @@ -1173,7 +1204,22 @@ * @version 1.0 */ @Transactional(rollbackFor = Exception.class) - public void saveOutStockItem(List<TaskItem> taskItems, WkOrderItem orderItem, WaveItem waveItem, Long loginUserId) throws Exception { + public void saveOutStockItem(List<TaskItem> taskItems, CheckDiffItem diffItem, Long loginUserId) { + try { + saveOutStockItem(taskItems, null, null, diffItem, loginUserId); + } catch (Exception e) { + throw new CoolException(e); + } + } + + /** + * @author Ryan + * @date 2025/5/20 + * @description: 鍑哄簱淇℃伅淇濆瓨鑷冲簱瀛樻槑缁嗚〃 + * @version 1.0 + */ + @Transactional(rollbackFor = Exception.class) + public void saveOutStockItem(List<TaskItem> taskItems, WkOrderItem orderItem, WaveItem waveItem, CheckDiffItem diffItem, Long loginUserId) throws Exception { Stock stock = new Stock(); String ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_STOCK_CODE, null); if (StringUtils.isBlank(ruleCode)) { @@ -1192,6 +1238,9 @@ WkOrder wkOrder = asnOrderService.getById(orderItem.getOrderId()); stock.setWkType(Short.parseShort(wkOrder.getWkType())) .setType(OrderType.ORDER_OUT.type); + } else if (!Objects.isNull(diffItem)) { + stock.setWkType(Short.parseShort(OrderWorkType.ORDER_WORK_TYPE_STOCK_CHECK.type)) + .setType(OrderType.ORDER_CHECK.type); } else { //TODO 鐢熸垚娉㈡鏃堕渶瑕佸皢娉㈡鍙峰啓鍏ュ崟鎹紝閫氳繃鐗╂枡锛屾壒娆★紝鍔ㄦ�佸瓧娈电瓑鍞竴鍊煎弽鏌ュ崟鎹俊鎭� stock.setSourceId(waveItem.getId()).setType(OrderType.ORDER_OUT.type); -- Gitblit v1.9.1