rsf-admin/src/page/basicInfo/basContainer/BasContainerList.jsx
@@ -31,7 +31,6 @@ ReferenceArrayInput, AutocompleteInput, DeleteButton, Button, } from 'react-admin'; import { Box, Typography, Card, Stack } from '@mui/material'; import { styled } from '@mui/material/styles'; @@ -43,11 +42,8 @@ import PageDrawer from "../../components/PageDrawer"; import MyField from "../../components/MyField"; import { PAGE_DRAWER_WIDTH, OPERATE_MODE, DEFAULT_PAGE_SIZE } from '@/config/setting'; import * as Common from '@/utils/common'; import CrossZoneAreaField from "../basStation/CrossZoneAreaField"; import AllInclusiveIcon from '@mui/icons-material/AllInclusive'; import BasContainerInit from "./BasContainerInit"; import PrintModal from './PrintModal' const StyledDatagrid = styled(DatagridConfigurable)(({ theme }) => ({ '& .css-1vooibu-MuiSvgIcon-root': { @@ -65,8 +61,8 @@ const filters = [ <SearchInput source="condition" alwaysOn />, <DateInput label='common.time.after' source="timeStart" />, <DateInput label='common.time.before' source="timeEnd" />, <DateInput label='common.time.after' source="timeStart" />, <DateInput label='common.time.before' source="timeEnd" />, <NumberInput source="containerType" label="table.field.basContainer.containerType" />, <TextInput source="codeType" label="table.field.basContainer.codeType" />, @@ -89,9 +85,6 @@ const [areaFieldDialog, setAreaFieldDialog] = useState(false); const [createDialog, setCreateDialog] = useState(false); const [drawerVal, setDrawerVal] = useState(false); const [open, setOpen] = useState(false); const [print, setPrint] = useState(false); const [selectPrints, setSelectPrints] = useState([]); return ( <Box display="flex"> @@ -105,14 +98,13 @@ marginRight: !!drawerVal ? `${PAGE_DRAWER_WIDTH}px` : 0, }} title={"menu.basContainer"} empty={false} empty={<EmptyData onClick={() => { setCreateDialog(true) }} />} filters={filters} sort={{ field: "create_time", order: "desc" }} actions={( <TopToolbar> <InitButton setOpen={setOpen} /> <FilterButton /> {/* <MyCreateButton onClick={() => { setCreateDialog(true) }} /> */} <MyCreateButton onClick={() => { setCreateDialog(true) }} /> <SelectColumnsButton preferenceKey='basContainer' /> <MyExportButton /> </TopToolbar> @@ -121,18 +113,21 @@ > <StyledDatagrid preferenceKey='basContainer' bulkActionButtons={<> <BulkPrintBarcode setPrint={setPrint} setSelectPrints={setSelectPrints} /> <BulkDeleteButton mutationMode={OPERATE_MODE} /> </>} rowClick={(id, resource, record) => false} bulkActionButtons={() => <BulkDeleteButton mutationMode={OPERATE_MODE} />} rowClick={(id, resource, record) => false} expandSingle={true} omit={['id', 'statusBool']} omit={['id', 'createTime', 'createBy', 'memo','statusBool']} > <NumberField source="id" /> <NumberField source="containerType$" label="table.field.basContainer.containerType" /> <TextField source="code" label="table.field.basContainer.code" /> <TextField source="codeType" label="table.field.basContainer.codeType" /> <WrapperField cellClassName="areas" label="table.field.basContainer.areas"> <CrossZoneAreaField open={areaFieldDialog} setOpen={setAreaFieldDialog} /> </WrapperField> <ReferenceField source="updateBy" label="common.field.updateBy" reference="user" link={false} sortable={false}> <TextField source="nickname" /> </ReferenceField> @@ -153,15 +148,6 @@ open={createDialog} setOpen={setCreateDialog} /> <BasContainerInit open={open} setOpen={setOpen} /> <PrintModal open={print} setOpen={setPrint} rows={selectPrints} /> <PageDrawer title='BasContainer Detail' drawerVal={drawerVal} @@ -171,39 +157,5 @@ </Box> ) } //初始化按钮 const InitButton = ({ setOpen }) => { const init = () => { setOpen(true) } return ( <Button label="toolbar.init" variant="text" size="small" onClick={init} startIcon={<AllInclusiveIcon />} /> ) } const BulkPrintBarcode = ({ setPrint, setSelectPrints }) => { const { selectedIds } = useListContext(); //打印 const print = () => { setPrint(true); setSelectPrints(selectedIds); } return ( <Button label="toolbar.print" variant="text" size="small" onClick={print} startIcon={<AllInclusiveIcon />} /> ) } export default BasContainerList; rsf-admin/src/page/container/ContainerList.jsx
@@ -31,7 +31,6 @@ ReferenceArrayInput, AutocompleteInput, DeleteButton, Button, } from 'react-admin'; import { Box, Typography, Card, Stack } from '@mui/material'; import { styled } from '@mui/material/styles'; @@ -44,7 +43,6 @@ import MyField from "../components/MyField"; import { PAGE_DRAWER_WIDTH, OPERATE_MODE, DEFAULT_PAGE_SIZE } from '@/config/setting'; import * as Common from '@/utils/common'; import AllInclusiveIcon from '@mui/icons-material/AllInclusive'; const StyledDatagrid = styled(DatagridConfigurable)(({ theme }) => ({ '& .css-1vooibu-MuiSvgIcon-root': { @@ -124,7 +122,6 @@ sort={{ field: "create_time", order: "desc" }} actions={( <TopToolbar> <InitButton /> <FilterButton /> <MyCreateButton onClick={() => { setCreateDialog(true) }} /> <SelectColumnsButton preferenceKey='container' /> @@ -185,23 +182,5 @@ </Box> ) } //初始化按钮 const InitButton = ({ setOpen }) => { const close = () => { setOpen(false) } return ( <Button label="toolbar.init" variant="outlined" size="medium" onClick={close} startIcon={<AllInclusiveIcon />} sx={{ margin: '3.5em' }} /> ) } export default ContainerList; rsf-server/src/main/java/com/vincent/rsf/server/api/controller/pda/MobileController.java
@@ -120,6 +120,13 @@ return mobileService.getReceiptAreas(getLoginUser()); } @PreAuthorize("hasAuthority('manager:warehouseAreas:list')") @ApiOperation("获取可用库区") @GetMapping("/areas/user/all") public R getAreasUserAll() { return mobileService.getAreasUserAll(getLoginUser()); } @PreAuthorize("hasAuthority('manager:asnOrder:list')") @GetMapping("/orders/asn") @@ -167,7 +174,7 @@ public R pikinOrder(@RequestBody WaitPakinParam waitPakin) { Long userId = getLoginUserId(); if (Objects.isNull(waitPakin)) { return R.error("参数不能为空!!"); return R.error( "参数不能为空!!"); } if (org.apache.commons.lang3.StringUtils.isBlank(waitPakin.getBarcode())) { return R.error("托盘码不能为空!!"); rsf-server/src/main/java/com/vincent/rsf/server/api/service/MobileService.java
@@ -37,6 +37,7 @@ List<WkOrder> getAllAsnOrders(); R getReceiptAreas(User user); R getAreasUserAll(User user); List<Fields> getDynamicFields(); rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/AgvServiceImpl.java
@@ -255,9 +255,17 @@ new LambdaQueryWrapper<BasContainer>() .in(BasContainer::getContainerType, longs1) ); boolean matches = containers.stream() .map(BasContainer::getCodeType) .anyMatch(codeType -> barcode.matches(codeType)); boolean matches = false; for (BasContainer container : containers) { String codeType = container.getCodeType(); // 获取正则表达式 if (barcode.matches(codeType)) { // 判断条码是否符合这个正则 matches = true; break; // 找到匹配的就退出循环 } } // boolean matches = containers.stream() // .map(BasContainer::getCodeType) // .anyMatch(codeType -> barcode.matches(codeType)); if (!matches) { throw new CoolException("条码与站点不匹配"); } rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java
@@ -522,6 +522,28 @@ * @param * @return * @author Ryan * @description 获取集货区 * @time 2025/3/11 10:12 */ @Override public R getAreasUserAll(User user) { Long[] userRoleIds = user.getUserRoleIds(); List<WarehouseRoleMenu> warehouseRoleMenus = warehouseRoleMenuService.list(new LambdaQueryWrapper<WarehouseRoleMenu>() .in(WarehouseRoleMenu::getRoleId, Arrays.asList(userRoleIds)) ); Set<WarehouseRoleMenu> warehouseRoleMenusSet = new HashSet<>(warehouseRoleMenus); List<Long> longs = warehouseRoleMenusSet.stream().map(WarehouseRoleMenu::getMenuId).collect(Collectors.toList()); List<WarehouseAreas> areas = warehouseAreasService.list(new LambdaQueryWrapper<WarehouseAreas>() .eq(WarehouseAreas::getType, WarehouseAreaType.WAREHOUSE_AREA_COLLECTION.type) .in(WarehouseAreas::getId, longs) ); return R.ok(areas); } /** * @param * @return * @author Ryan * @description 获取所有启用动态字段 * @time 2025/3/12 09:23 */ rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/BasContainerController.java
@@ -9,7 +9,6 @@ import com.vincent.rsf.server.common.domain.BaseParam; import com.vincent.rsf.server.common.domain.KeyValVo; import com.vincent.rsf.server.common.domain.PageParam; import com.vincent.rsf.server.manager.controller.params.InitContainerParams; import com.vincent.rsf.server.manager.entity.BasContainer; import com.vincent.rsf.server.manager.entity.BasStation; import com.vincent.rsf.server.manager.service.BasContainerService; @@ -33,18 +32,18 @@ BaseParam baseParam = buildParam(map, BaseParam.class); PageParam<BasContainer, BaseParam> pageParam = new PageParam<>(baseParam, BasContainer.class); PageParam<BasContainer, BaseParam> page = basContainerService.page(pageParam, pageParam.buildWrapper(true)); // for (BasContainer container : page.getRecords()) { // if (!Cools.isEmpty(container.getAreas())) { // String content = container.getAreas().substring(1, container.getAreas().length() - 1); // String[] parts = content.split(","); // Long[] longArray = new Long[parts.length]; // for (int i = 0; i < parts.length; i++) { // longArray[i] = Long.parseLong(parts[i].trim()); // } // container.setAreaIds(longArray); // } // // } for (BasContainer container : page.getRecords()) { if (!Cools.isEmpty(container.getAreas())) { String content = container.getAreas().substring(1, container.getAreas().length() - 1); String[] parts = content.split(","); Long[] longArray = new Long[parts.length]; for (int i = 0; i < parts.length; i++) { longArray[i] = Long.parseLong(parts[i].trim()); } container.setAreaIds(longArray); } } return R.ok().add(page); } @@ -82,7 +81,7 @@ basContainer.setCreateTime(new Date()); basContainer.setUpdateBy(getLoginUserId()); basContainer.setUpdateTime(new Date()); BasContainer container = basContainerService.getOne(new LambdaQueryWrapper<BasContainer>().eq(BasContainer::getContainerType, basContainer.getContainerType()).orderByDesc(BasContainer::getId),false); BasContainer container = basContainerService.getOne(new LambdaQueryWrapper<BasContainer>().eq(BasContainer::getContainerType, basContainer.getContainerType())); if (null != container) { return R.error("该类型已被初始化"); } @@ -133,22 +132,6 @@ ); return R.ok().add(vos); } /** * 初始化 * @return */ @PreAuthorize("hasAuthority('manager:basContainer:list')") @OperationLog("容器初始化") @PostMapping("/basContainer/init/save") public R init(@RequestBody InitContainerParams params) { if (Objects.isNull(params)) { return R.error("参数不能为空!!"); } return basContainerService.init(params, getLoginUserId()); } @PreAuthorize("hasAuthority('manager:basContainer:list')") @PostMapping("/basContainer/export")