From aa0aaf8b2091c551a73c851ed692f6d908fea8fb Mon Sep 17 00:00:00 2001 From: verou <857149855@qq.com> Date: 星期二, 08 四月 2025 08:41:57 +0800 Subject: [PATCH] Merge branch 'devlop' of http://47.97.1.152:5880/r/wms-master into devlop --- rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java | 4 rsf-admin/src/page/task/TaskList.jsx | 4 rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/PakinIOStatus.java | 2 rsf-admin/.eslintrc.cjs | 1 rsf-admin/src/page/taskItem/TaskItemList.jsx | 6 - rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WaitPakinServiceImpl.java | 19 ++-- rsf-server/src/main/resources/application.yml | 2 rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/ScheduleJobs.java | 12 ++- rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java | 23 +++++ rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/WarehouseAreasItem.java | 17 +++ rsf-admin/src/page/task/TaskPanel.jsx | 90 +++++++++++++++++++-- rsf-admin/.env | 2 12 files changed, 140 insertions(+), 42 deletions(-) diff --git a/rsf-admin/.env b/rsf-admin/.env index a8ce658..a3c69b2 100644 --- a/rsf-admin/.env +++ b/rsf-admin/.env @@ -1,3 +1,3 @@ -VITE_BASE_IP=192.168.4.24 +VITE_BASE_IP=127.0.0.1 # VITE_BASE_IP=47.76.147.249 VITE_BASE_PORT=8080 diff --git a/rsf-admin/.eslintrc.cjs b/rsf-admin/.eslintrc.cjs index 995e273..24c8a5c 100644 --- a/rsf-admin/.eslintrc.cjs +++ b/rsf-admin/.eslintrc.cjs @@ -9,6 +9,7 @@ ], ignorePatterns: ["dist", ".eslintrc.cjs"], parser: "@typescript-eslint/parser", + "react/jsx-key": [false, { "checkFragmentShorthand": false }], env: { browser: true, es2021: true, diff --git a/rsf-admin/src/page/task/TaskList.jsx b/rsf-admin/src/page/task/TaskList.jsx index 9fdda18..86afa4c 100644 --- a/rsf-admin/src/page/task/TaskList.jsx +++ b/rsf-admin/src/page/task/TaskList.jsx @@ -138,8 +138,8 @@ </> } rowClick={(id, resource, record) => false} - // expand={() => <TaskPanel />} - // expandSingle={true} + expand={() => <TaskPanel />} + expandSingle={true} omit={['id', 'createTime', 'createBy', 'memo', 'robotCode', 'exceStatus', 'expDesc', 'expCode', 'sort']} > <NumberField source="id" /> diff --git a/rsf-admin/src/page/task/TaskPanel.jsx b/rsf-admin/src/page/task/TaskPanel.jsx index 853c1a3..dd7db7f 100644 --- a/rsf-admin/src/page/task/TaskPanel.jsx +++ b/rsf-admin/src/page/task/TaskPanel.jsx @@ -1,16 +1,89 @@ import React, { useState, useRef, useEffect, useMemo } from "react"; import { Box, Card, CardContent, Grid, Typography, Tooltip } from '@mui/material'; import { - useTranslate, + List, + DatagridConfigurable, + SearchInput, + TopToolbar, + SelectColumnsButton, + EditButton, + FilterButton, + CreateButton, + ExportButton, + BulkDeleteButton, + WrapperField, useRecordContext, + useTranslate, + useNotify, + useListContext, + FunctionField, + TextField, + NumberField, + DateField, + BooleanField, + ReferenceField, + TextInput, + DateTimeInput, + DateInput, + SelectInput, + NumberInput, + ReferenceInput, + ReferenceArrayInput, + AutocompleteInput, + DeleteButton, } from 'react-admin'; -import PanelTypography from "../components/PanelTypography"; -import * as Common from '@/utils/common' +import { styled } from '@mui/material/styles'; +import PageDrawer from "../components/PageDrawer"; +import { PAGE_DRAWER_WIDTH, OPERATE_MODE, DEFAULT_PAGE_SIZE } from '@/config/setting'; +import * as Common from '@/utils/common'; + +const StyledDatagrid = styled(DatagridConfigurable)(({ theme }) => ({ + '& .css-1vooibu-MuiSvgIcon-root': { + height: '.9em' + }, + '& .RaDatagrid-row': { + cursor: 'auto' + }, + '& .column-name': { + }, + '& .opt': { + width: 200 + }, +})); + +const filters = [ + <SearchInput source="condition" alwaysOn />, + <DateInput label='common.time.after' source="timeStart" />, + <DateInput label='common.time.before' source="timeEnd" />, + <NumberInput source="taskId" label="table.field.taskItem.taskId" />, + <NumberInput source="orderId" label="table.field.taskItem.orderId" />, + <NumberInput source="orderType" label="table.field.taskItem.orderType" />, + <NumberInput source="orderItemId" label="table.field.taskItem.orderItemId" />, + <NumberInput source="matnrId" label="table.field.taskItem.matnrId" />, + <TextInput source="maktx" label="table.field.taskItem.maktx" />, + <TextInput source="matnrCode" label="table.field.taskItem.matnrCode" />, + <TextInput source="unit" label="table.field.taskItem.unit" />, + <NumberInput source="anfme" label="table.field.taskItem.anfme" />, + <TextInput source="batch" label="table.field.taskItem.batch" />, + <TextInput source="spec" label="table.field.taskItem.spec" />, + <TextInput source="model" label="table.field.taskItem.model" />, + <TextInput label="common.field.memo" source="memo" />, + <SelectInput + label="common.field.status" + source="status" + choices={[ + { id: '1', name: 'common.enums.statusTrue' }, + { id: '0', name: 'common.enums.statusFalse' }, + ]} + resettable + />, +] const TaskPanel = () => { - const record = useRecordContext(); - if (!record) return null; const translate = useTranslate(); + const [createDialog, setCreateDialog] = useState(false); + const [drawerVal, setDrawerVal] = useState(false); + return ( <> <Box display="flex"> @@ -30,18 +103,14 @@ actions={( <TopToolbar> <FilterButton /> - {/* <MyCreateButton onClick={() => { setCreateDialog(true) }} /> */} - <SelectColumnsButton preferenceKey='taskItem' /> - {/* <MyExportButton /> */} </TopToolbar> )} perPage={DEFAULT_PAGE_SIZE} > <StyledDatagrid preferenceKey='taskItem' - // bulkActionButtons={() => <BulkDeleteButton mutationMode={OPERATE_MODE} />} + bulkActionButtons={false} rowClick={(id, resource, record) => false} - // expand={() => <TaskItemPanel />} expandSingle={true} omit={['id', 'createTime', 'createBy', 'memo', 'taskId', 'orderId', 'orderItemId', 'matnrId']} > @@ -58,7 +127,6 @@ <TextField source="batch" label="table.field.taskItem.batch" /> <TextField source="spec" label="table.field.taskItem.spec" /> <TextField source="model" label="table.field.taskItem.model" /> - <ReferenceField source="updateBy" label="common.field.updateBy" reference="user" link={false} sortable={false}> <TextField source="nickname" /> </ReferenceField> diff --git a/rsf-admin/src/page/taskItem/TaskItemList.jsx b/rsf-admin/src/page/taskItem/TaskItemList.jsx index fc2123d..d146e6d 100644 --- a/rsf-admin/src/page/taskItem/TaskItemList.jsx +++ b/rsf-admin/src/page/taskItem/TaskItemList.jsx @@ -34,11 +34,6 @@ } from 'react-admin'; import { Box, Typography, Card, Stack } from '@mui/material'; import { styled } from '@mui/material/styles'; -import TaskItemCreate from "./TaskItemCreate"; -import TaskItemPanel from "./TaskItemPanel"; -import EmptyData from "../components/EmptyData"; -import MyCreateButton from "../components/MyCreateButton"; -import MyExportButton from '../components/MyExportButton'; import PageDrawer from "../components/PageDrawer"; import MyField from "../components/MyField"; import { PAGE_DRAWER_WIDTH, OPERATE_MODE, DEFAULT_PAGE_SIZE } from '@/config/setting'; @@ -88,7 +83,6 @@ const TaskItemList = () => { const translate = useTranslate(); - const [createDialog, setCreateDialog] = useState(false); const [drawerVal, setDrawerVal] = useState(false); diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java index b6536c2..ea767f7 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java @@ -2,6 +2,7 @@ import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.vincent.rsf.framework.common.Cools; import com.vincent.rsf.framework.common.R; import com.vincent.rsf.framework.exception.CoolException; @@ -291,7 +292,7 @@ .setSplrBatch(dto.getSplrBatch()) .setMatnrCode(matnr.getCode()) .setMatnrId(matnr.getId()) - .setMatnrName(matnr.getName()) + .setMaktx(matnr.getName()) //搴撳瓨鍗曚綅涓烘渶灏忓崟浣� .setUnit(dto.getStockUnit()) .setStockUnit(dto.getStockUnit()) @@ -377,9 +378,21 @@ return fieldsMapper.selectList(new LambdaQueryWrapper<Fields>().eq(Fields::getFlagEnable, 1).eq(Fields::getStatus, 1)); } + /** + * @author Ryan + * @description 鑾峰彇缁勭洏鏄庣粏 + * @param + * @return + * @time 2025/4/7 16:58 + */ @Override public R getDeltByCode(String code) { - return R.ok(warehouseAreasItemService.getOne(new LambdaQueryWrapper<WarehouseAreasItem>().eq(WarehouseAreasItem::getTrackCode, code))); + //TODO 鍚庣画闇�鏍规嵁绛栫暐閰嶇疆锛岃幏鍙栫粍鎷栨暟鎹�傚锛氭贩瑁咃紝鎸夋壒娆℃贩瑁呯瓑 + LambdaQueryWrapper<WarehouseAreasItem> queryWrapper = new QueryWrapper<WarehouseAreasItem>() + .select("SUM(anfme) as anfme, track_code, asn_code, id, splr_batch, ispt_result, plat_item_id, batch, qty, work_qty, matnr_code, matnr_id, maktx").lambda() + .eq(WarehouseAreasItem::getTrackCode, code) + .groupBy(WarehouseAreasItem::getSplrBatch, WarehouseAreasItem::getAsnId, WarehouseAreasItem::getAreaId, WarehouseAreasItem::getMatnrId); + return R.ok(warehouseAreasItemService.getOne(queryWrapper)); } /** @@ -394,6 +407,12 @@ return waitPakinService.mergeItems(waitPakin); } + /** + * @author Ryan + * @description 瑙g粦 + * @param param + * @return + */ @Override public WaitPakin unBind(WaitPakinParam param) { return waitPakinService.unBind(param); diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/WarehouseAreasItem.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/WarehouseAreasItem.java index a152659..176d8a1 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/WarehouseAreasItem.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/WarehouseAreasItem.java @@ -53,6 +53,19 @@ @ApiModelProperty("鍗曟嵁鏄庣粏ID") private Long asnItemId; + @ApiModelProperty("琛屽彿") + private String platItemId; + + @ApiModelProperty("璐ㄦ缁撴灉") + private Short isptResult; + + @ApiModelProperty("宸叉敹璐ф暟閲�") + private Double qty; + + @ApiModelProperty("鎵ц鏁伴噺") + private Double workQty; + + /** * 鍖哄煙鍚嶇О */ @@ -72,7 +85,7 @@ * 鐗╂枡鍚嶇О */ @ApiModelProperty(value= "鐗╂枡鍚嶇О") - private String matnrName; + private String maktx; /** * 鐗╂枡缂栫爜 @@ -207,7 +220,7 @@ this.areaId = areaId; this.areaName = areaName; this.matnrId = matnrId; - this.matnrName = matnrName; + this.maktx = matnrName; this.matnrCode = matnrCode; this.trackCode = trackCode; this.anfme = anfme; diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/PakinIOStatus.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/PakinIOStatus.java index 07e1a56..b355406 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/PakinIOStatus.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/PakinIOStatus.java @@ -11,7 +11,7 @@ //璐ㄦ鐘舵�� PAKIN_IO_STATUS_HOLD("0", "寰呭叆搴�"), - QLY_ISPT_STAS_DONE("1", "缁勬嫋瀹屾垚"), + PAKIN_IO_STATUS_DONE("1", "缁勬嫋瀹屾垚"), PAKIN_IO_STATUS_TASK_EXCE("2", "浠诲姟鎵ц涓�"), PAKIN_IO_STATUS_TASK_DONE("3", "浠诲姟瀹屾垚") ; diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/ScheduleJobs.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/ScheduleJobs.java index 86d45c9..6e4e4bd 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/ScheduleJobs.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/ScheduleJobs.java @@ -6,6 +6,7 @@ import com.vincent.rsf.server.common.utils.CommonUtil; import com.vincent.rsf.server.common.utils.DateUtils; import com.vincent.rsf.server.manager.entity.*; +import com.vincent.rsf.server.manager.enums.PakinIOStatus; import com.vincent.rsf.server.manager.service.*; import com.vincent.rsf.server.system.constant.SerialRuleCode; import com.vincent.rsf.server.system.utils.SerialRuleUtils; @@ -183,10 +184,13 @@ * @return * @time 2025/3/29 12:36 */ - @Scheduled(cron = "0/5 * * * * ?") +// @Scheduled(cron = "0 0/05 * * * ? ") + @Scheduled(cron = "0/25 * * * * ?") @Transactional(rollbackFor = Exception.class) public void pakinLog() { - List<WaitPakin> pakinIds = waitPakinService.list(new LambdaQueryWrapper<WaitPakin>().eq(WaitPakin::getIoStatus, 2).select(WaitPakin::getId)); + List<WaitPakin> pakinIds = waitPakinService.list(new LambdaQueryWrapper<WaitPakin>() + .eq(WaitPakin::getIoStatus, Short.valueOf(PakinIOStatus.PAKIN_IO_STATUS_TASK_DONE.val)) + .select(WaitPakin::getId)); if (pakinIds.isEmpty()) { return; } @@ -221,10 +225,10 @@ if (!waitPakinItemLogService.saveBatch(itemLogs)) { throw new CoolException("鍘嗗彶鏄庣粏妗d繚瀛樺け璐ワ紒锛�"); } - if (!waitPakinService.removeByIds(pakins)) { + if (!waitPakinService.removeByIds(list)) { throw new CoolException("鍘熷崟鎹垹闄ゅけ璐ワ紒锛�"); } - if (!waitPakinItemService.removeByIds(pakinItems)) { + if (!waitPakinItemService.remove(new LambdaQueryWrapper<WaitPakinItem>().in(WaitPakinItem::getPakinId, list))) { 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 5e492d8..cc757b4 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 @@ -70,7 +70,7 @@ List<Long> ids = waitPakin.stream().map(WaitPakin::getId).collect(Collectors.toList()); List<WaitPakin> waitPakins = waitPakinService.list(new LambdaQueryWrapper<WaitPakin>() .in(WaitPakin::getId, ids) - .eq(WaitPakin::getIoStatus, Short.parseShort(PakinIOStatus.QLY_ISPT_STAS_DONE.val))); + .eq(WaitPakin::getIoStatus, Short.parseShort(PakinIOStatus.PAKIN_IO_STATUS_DONE.val))); if (waitPakins.isEmpty()) { throw new CoolException("璇锋鏌ョ粍鎷栫姸鎬佹槸鍚﹀畬鎴愶紒锛�"); } @@ -93,7 +93,7 @@ if (!this.save(task)) { throw new CoolException("浠诲姟淇濆瓨澶辫触锛侊紒"); } - if (!locService.update(new LambdaUpdateWrapper<Loc>().eq(Loc::getCode, pakin.getCode()) + if (!locService.update(new LambdaUpdateWrapper<Loc>().eq(Loc::getCode, task.getTargLoc()) .set(Loc::getUseStatus, LocStsType.LOC_STS_TYPE_S.type).set(Loc::getBarcode, pakin.getBarcode()))) { throw new CoolException("搴撲綅棰勭害澶辫触锛侊紒"); } diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WaitPakinServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WaitPakinServiceImpl.java index 70ce7d0..b50c28e 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WaitPakinServiceImpl.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WaitPakinServiceImpl.java @@ -80,7 +80,7 @@ } pakin.setCode(ruleCode) //鐘舵�佷慨鏀逛负鍏ュ簱涓� - .setIoStatus(Short.parseShort(PakinIOStatus.QLY_ISPT_STAS_DONE.val)) + .setIoStatus(Short.parseShort(PakinIOStatus.PAKIN_IO_STATUS_DONE.val)) .setAnfme(sum) .setBarcode(waitPakin.getBarcode()); if (!this.save(pakin)) { @@ -104,26 +104,25 @@ .setAsnId(item.getAsnId()) .setAsnCode(item.getAsnCode()) .setAsnItemId(item.getId()) - .setMatnrCode(item.getMatnrCode()) .setBatch(item.getSplrBatch()) .setUnit(item.getStockUnit()) .setFieldsIndex(item.getFieldsIndex()) - .setUnit(item.getStockUnit()) .setMatnrId(item.getMatnrId()) .setMaktx(item.getMaktx()) .setMatnrCode(item.getMatnrCode()); for (PakinItem waitPakinItem : waitPakin.getItems()) { if (waitPakinItem.getTrackCode().equals(item.getTrackCode())) { - Double v = item.getWorkQty() + waitPakinItem.getReceiptQty(); - pakinItem.setWorkQty(v) +// Double v = item.getWorkQty() + waitPakinItem.getReceiptQty(); + pakinItem + .setWorkQty(waitPakinItem.getReceiptQty()) .setAnfme(waitPakinItem.getReceiptQty()) .setTrackCode(waitPakinItem.getTrackCode()); /**鏇存柊鍗曟嵁鎵ц涓簱瀛�*/ - if (v.compareTo(item.getAnfme()) > 0) {throw new CoolException("鎵ц涓暟閲忓ぇ浜庢敹璐ф暟閲忥紒锛�");} - if (!asnOrderItemService.update(new LambdaUpdateWrapper<AsnOrderItem>() - .eq(AsnOrderItem::getTrackCode, waitPakinItem.getTrackCode()).set(AsnOrderItem::getWorkQty, v))) { - throw new CoolException("鎵ц涓簱瀛樻洿鏂板け璐ワ紒锛�"); - } +// if (v.compareTo(item.getAnfme()) > 0) {throw new CoolException("鎵ц涓暟閲忓ぇ浜庢敹璐ф暟閲忥紒锛�");} +// if (!asnOrderItemService.update(new LambdaUpdateWrapper<AsnOrderItem>() +// .eq(AsnOrderItem::getTrackCode, waitPakinItem.getTrackCode()).set(AsnOrderItem::getWorkQty, v))) { +// throw new CoolException("鎵ц涓簱瀛樻洿鏂板け璐ワ紒锛�"); +// } } } items.add(pakinItem); diff --git a/rsf-server/src/main/resources/application.yml b/rsf-server/src/main/resources/application.yml index a844729..4a03079 100644 --- a/rsf-server/src/main/resources/application.yml +++ b/rsf-server/src/main/resources/application.yml @@ -23,7 +23,7 @@ # global-config: # field-strategy: 0 configuration: -# log-impl: org.apache.ibatis.logging.stdout.StdOutImpl + log-impl: org.apache.ibatis.logging.stdout.StdOutImpl map-underscore-to-camel-case: true cache-enabled: true call-setters-on-nulls: true -- Gitblit v1.9.1