From 34079a90f7fbdd0f1c47aeb75588628ebf21f15a Mon Sep 17 00:00:00 2001
From: verou <857149855@qq.com>
Date: 星期四, 10 四月 2025 13:25:20 +0800
Subject: [PATCH] Merge branch 'devlop' of http://47.97.1.152:5880/r/wms-master into devlop
---
rsf-admin/src/page/system/serialRule/SerialRuleEdit.jsx | 156 +++----
rsf-admin/src/page/system/serialRule/SerialRuleList.jsx | 28 -
rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/WaitPakin.java | 4
rsf-admin/src/page/asnOrderLog/AsnOrderItemLogList.jsx | 177 +++++++++
rsf-admin/src/page/system/serialRule/SerialRuleItemList.jsx | 225 +++++++++++
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WaitPakinServiceImpl.java | 98 +++-
rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java | 20
rsf-admin/src/page/task/TaskPanel.jsx | 3
rsf-admin/src/page/waitPakinLog/WaitPakinLogList.jsx | 16
rsf-admin/src/page/system/serialRule/SerialRuleItemCreate.jsx | 151 +++++++
/dev/null | 18
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/WarehouseAreasItemService.java | 4
rsf-admin/src/page/task/TaskList.jsx | 15
rsf-admin/src/page/waitPakinLog/WaitPakinItemLogList.jsx | 34 -
rsf-admin/src/page/waitPakinLog/WaitPakinLogEdit.jsx | 125 ++---
rsf-admin/src/page/ResourceContent.js | 13
16 files changed, 787 insertions(+), 300 deletions(-)
diff --git a/rsf-admin/src/page/ResourceContent.js b/rsf-admin/src/page/ResourceContent.js
index ed01cd9..2ead1d2 100644
--- a/rsf-admin/src/page/ResourceContent.js
+++ b/rsf-admin/src/page/ResourceContent.js
@@ -43,14 +43,9 @@
import waitPakin from './waitPakin';
import waitPakinItem from './waitPakinItem';
import waitPakinLog from './waitPakinLog';
-import waitPakinItemLog from './waitPakinItemLog';
import asnOrderLog from './asnOrderLog';
-// import asnOrderItemLog from './asnOrderItemLog';
import task from './task';
-// import taskItem from './taskItem';
import taskLog from './taskLog';
-// import taskItemLog from './taskItemLog';
-
const ResourceContent = (node) => {
switch (node.component) {
@@ -110,8 +105,6 @@
return asnOrderItem;
case 'asnOrderLog':
return asnOrderLog;
- // case 'asnOrderItemLog':
- // return asnOrderItemLog;
case 'purchaseItem':
return purchaseItem;
case 'purchase':
@@ -136,16 +129,10 @@
return waitPakinItem;
case 'waitPakinLog':
return waitPakinLog;
- case 'waitPakinItemLog':
- return waitPakinItemLog;
case 'task':
return task;
- // case 'taskItem':
- // return taskItem;
case 'taskLog':
return taskLog;
- // case 'taskItemLog':
- // return taskItemLog;
default:
return {
diff --git a/rsf-admin/src/page/asnOrderLog/AsnOrderItemLogList.jsx b/rsf-admin/src/page/asnOrderLog/AsnOrderItemLogList.jsx
new file mode 100644
index 0000000..643d4ca
--- /dev/null
+++ b/rsf-admin/src/page/asnOrderLog/AsnOrderItemLogList.jsx
@@ -0,0 +1,177 @@
+import React, { useState, useRef, useEffect, useMemo, useCallback } from "react";
+import { useNavigate } from 'react-router-dom';
+import {
+ 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,
+ useGetRecordId,
+} from 'react-admin';
+import { Box, Typography, Card, Stack } from '@mui/material';
+import { styled } from '@mui/material/styles';
+import EmptyData from "../components/EmptyData";
+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';
+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 />,
+
+ <NumberInput source="asnId" label="table.field.asnOrderItemLog.asnId" />,
+ <TextInput source="asnCode" label="table.field.asnOrderItemLog.asnCode" />,
+ <TextInput source="platItemId" label="table.field.asnOrderItemLog.platItemId" />,
+ <NumberInput source="poDetlId" label="table.field.asnOrderItemLog.poDetlId" />,
+ <TextInput source="poCode" label="table.field.asnOrderItemLog.poCode" />,
+ <TextInput source="fieldsIndex" label="table.field.asnOrderItemLog.fieldsIndex" />,
+ <TextInput source="matnrId" label="table.field.asnOrderItemLog.matnrId" />,
+ <TextInput source="matnrCode" label="table.field.asnOrderItemLog.matnrCode" />,
+ <TextInput source="maktx" label="table.field.asnOrderItemLog.maktx" />,
+ <NumberInput source="anfme" label="table.field.asnOrderItemLog.anfme" />,
+ <TextInput source="stockUnit" label="table.field.asnOrderItemLog.stockUnit" />,
+ <NumberInput source="purQty" label="table.field.asnOrderItemLog.purQty" />,
+ <TextInput source="purUnit" label="table.field.asnOrderItemLog.purUnit" />,
+ <NumberInput source="qty" label="table.field.asnOrderItemLog.qty" />,
+ <TextInput source="splrCode" label="table.field.asnOrderItemLog.splrCode" />,
+ <TextInput source="splrBatch" label="table.field.asnOrderItemLog.splrBatch" />,
+ <TextInput source="splrName" label="table.field.asnOrderItemLog.splrName" />,
+ <TextInput source="qrcode" label="table.field.asnOrderItemLog.qrcode" />,
+ <TextInput source="trackCode" label="table.field.asnOrderItemLog.trackCode" />,
+ <TextInput source="barcode" label="table.field.asnOrderItemLog.barcode" />,
+ <TextInput source="packName" label="table.field.asnOrderItemLog.packName" />,
+ <SelectInput source="ntyStatus" label="table.field.asnOrderItemLog.ntyStatus"
+ choices={[
+ { id: 0, name: ' 鏈笂鎶�' },
+ { id: 1, name: ' 宸蹭笂鎶�' },
+ ]}
+ />,
+
+ <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 AsnOrderItemLogList = () => {
+ const translate = useTranslate();
+ const [createDialog, setCreateDialog] = useState(false);
+ const [drawerVal, setDrawerVal] = useState(false);
+ const recodeId = useGetRecordId();
+
+ return (
+ <Box display="flex">
+ <List
+ resource="asnOrderItemLog"
+ sx={{
+ flexGrow: 1,
+ transition: (theme) =>
+ theme.transitions.create(['all'], {
+ duration: theme.transitions.duration.enteringScreen,
+ }),
+ marginRight: drawerVal ? `${PAGE_DRAWER_WIDTH}px` : 0,
+ }}
+ title={"menu.asnOrderItemLog"}
+ empty={false}
+ filters={filters}
+ filter={{ logId: recodeId }}
+ sort={{ field: "create_time", order: "desc" }}
+ actions={(
+ <TopToolbar>
+ <FilterButton />
+ <SelectColumnsButton preferenceKey='asnOrderItemLog' />
+ <MyExportButton />
+ </TopToolbar>
+ )}
+ perPage={DEFAULT_PAGE_SIZE}
+ >
+ <StyledDatagrid
+ preferenceKey='asnOrderItemLog'
+ bulkActionButtons={false}
+ rowClick={(id, resource, record) => false}
+ omit={['id', 'asnId', 'poDetlId', 'poCode', 'qrcode', 'packName', 'createTime', 'memo', 'fieldsIndex', 'matnrId', 'splrCode', 'status', 'createBy$']}
+ >
+ <NumberField source="id" />
+ <NumberField source="asnId" label="table.field.asnOrderItemLog.asnId" />
+ <TextField source="asnCode" label="table.field.asnOrderItemLog.asnCode" />
+ <TextField source="platItemId" label="table.field.asnOrderItemLog.platItemId" />
+ <NumberField source="poDetlId" label="table.field.asnOrderItemLog.poDetlId" />
+ <TextField source="poCode" label="table.field.asnOrderItemLog.poCode" />
+ <TextField source="fieldsIndex" label="table.field.asnOrderItemLog.fieldsIndex" />
+ <TextField source="matnrId" label="table.field.asnOrderItemLog.matnrId" />
+ <TextField source="matnrCode" label="table.field.asnOrderItemLog.matnrCode" />
+ <TextField source="maktx" label="table.field.asnOrderItemLog.maktx" />
+ <NumberField source="anfme" label="table.field.asnOrderItemLog.anfme" />
+ <NumberField source="purQty" label="table.field.asnOrderItemLog.purQty" />
+ <TextField source="purUnit" label="table.field.asnOrderItemLog.purUnit" />
+ <NumberField source="qty" label="table.field.asnOrderItemLog.qty" />
+ <TextField source="splrCode" label="table.field.asnOrderItemLog.splrCode" />
+ <TextField source="splrBatch" label="table.field.asnOrderItemLog.splrBatch" />
+ <TextField source="splrName" label="table.field.asnOrderItemLog.splrName" />
+ <TextField source="qrcode" label="table.field.asnOrderItemLog.qrcode" />
+ <TextField source="trackCode" label="table.field.asnOrderItemLog.trackCode" />
+ <TextField source="packName" label="table.field.asnOrderItemLog.packName" />
+ <TextField source="ntyStatus$" label="table.field.asnOrderItemLog.ntyStatus" sortable={false} />
+ <TextField source="updateBy$" label="common.field.updateBy" />
+ <TextField source="createBy$" label="common.field.createBy" />
+ <DateField source="createTime" label="common.field.createTime" showTime />
+ <TextField source="memo" label="common.field.memo" sortable={false} />
+ </StyledDatagrid>
+ </List>
+ <PageDrawer
+ title='AsnOrderItemLog Detail'
+ drawerVal={drawerVal}
+ setDrawerVal={setDrawerVal}
+ >
+ </PageDrawer>
+ </Box>
+ )
+}
+
+export default AsnOrderItemLogList;
diff --git a/rsf-admin/src/page/system/serialRule/SerialRuleEdit.jsx b/rsf-admin/src/page/system/serialRule/SerialRuleEdit.jsx
index 4440c43..53cf77d 100644
--- a/rsf-admin/src/page/system/serialRule/SerialRuleEdit.jsx
+++ b/rsf-admin/src/page/system/serialRule/SerialRuleEdit.jsx
@@ -28,12 +28,13 @@
import CustomerTopToolBar from "../../components/EditTopToolBar";
import MemoInput from "../../components/MemoInput";
import StatusSelectInput from "../../components/StatusSelectInput";
+import SerialRuleItemList from "./SerialRuleItemList";
const FormToolbar = () => {
const { getValues } = useFormContext();
return (
- <Toolbar sx={{ justifyContent: 'space-between' }}>
+ <Toolbar sx={{ justifyContent: 'end' }}>
<SaveButton />
<DeleteButton mutationMode="optimistic" />
</Toolbar>
@@ -44,89 +45,82 @@
const translate = useTranslate();
return (
- <Edit
- redirect="list"
- mutationMode={EDIT_MODE}
- actions={<CustomerTopToolBar />}
- aside={<EditBaseAside />}
- >
- <SimpleForm
- shouldUnregister
- warnWhenUnsavedChanges
- toolbar={<FormToolbar />}
- mode="onTouched"
- defaultValues={{}}
- // validate={(values) => { }}
+ <>
+ <Edit
+ redirect="list"
+ mutationMode={EDIT_MODE}
+ actions={<CustomerTopToolBar />}
+ aside={<EditBaseAside />}
>
- <Grid container width={{ xs: '100%', xl: '80%' }} rowSpacing={3} columnSpacing={3}>
- <Grid item xs={12} md={8}>
- <Typography variant="h6" gutterBottom>
- {translate('common.edit.title.main')}
- </Typography>
- <Stack direction='row' gap={2}>
- <TextInput
- label="table.field.serialRule.code"
- source="code"
- parse={v => v}
- autoFocus
- />
- </Stack>
- <Stack direction='row' gap={2}>
- <TextInput
- label="table.field.serialRule.name"
- source="name"
- parse={v => v}
- />
- </Stack>
- <Stack direction='row' gap={2}>
- <TextInput
- label="table.field.serialRule.delimit"
- source="delimit"
- parse={v => v}
- />
- </Stack>
- <Stack direction='row' gap={2}>
- <TextInput
- label="table.field.serialRule.reset"
- source="reset"
- parse={v => v}
- validate={required()}
- />
- </Stack>
- <Stack direction='row' gap={2}>
- <TextInput
- label="table.field.serialRule.resetDep"
- source="resetDep"
- parse={v => v}
- />
- </Stack>
- <Stack direction='row' gap={2}>
- <TextInput
- label="table.field.serialRule.currValue"
- source="currValue"
- parse={v => v}
- />
- </Stack>
- <Stack direction='row' gap={2}>
- <TextInput
- label="table.field.serialRule.lastCode"
- source="lastCode"
- parse={v => v}
- />
- </Stack>
+ <SimpleForm
+ shouldUnregister
+ warnWhenUnsavedChanges
+ toolbar={<FormToolbar />}
+ mode="onTouched"
+ defaultValues={{}}
+ // validate={(values) => { }}
+ >
+ <Grid container width={{ xs: '100%', xl: '80%' }} rowSpacing={3} columnSpacing={3}>
+ <Grid item xs={12} md={8}>
+ <Typography variant="h6" gutterBottom>
+ {translate('common.edit.title.main')}
+ </Typography>
+ <Stack direction='row' gap={2}>
+ <TextInput
+ label="table.field.serialRule.code"
+ source="code"
+ parse={v => v}
+ readOnly
+ />
+ <TextInput
+ label="table.field.serialRule.name"
+ source="name"
+ parse={v => v}
+ />
+ <TextInput
+ label="table.field.serialRule.delimit"
+ source="delimit"
+ parse={v => v}
+ />
+ </Stack>
+ <Stack direction='row' gap={2}>
+ <TextInput
+ label="table.field.serialRule.reset"
+ source="reset"
+ parse={v => v}
+ validate={required()}
+ />
+ <TextInput
+ label="table.field.serialRule.resetDep"
+ source="resetDep"
+ parse={v => v}
+ />
+ <TextInput
+ label="table.field.serialRule.currValue"
+ source="currValue"
+ parse={v => v}
+ />
+ <TextInput
+ label="table.field.serialRule.lastCode"
+ source="lastCode"
+ parse={v => v}
+ />
+ </Stack>
+ </Grid>
+ <Grid item xs={12} md={4}>
+ <Typography variant="h6" gutterBottom>
+ {translate('common.edit.title.common')}
+ </Typography>
+ <StatusSelectInput />
+ <Box mt="2em" />
+ <MemoInput />
+ </Grid>
</Grid>
- <Grid item xs={12} md={4}>
- <Typography variant="h6" gutterBottom>
- {translate('common.edit.title.common')}
- </Typography>
- <StatusSelectInput />
- <Box mt="2em" />
- <MemoInput />
- </Grid>
- </Grid>
- </SimpleForm>
- </Edit >
+ </SimpleForm>
+ </Edit >
+ <SerialRuleItemList></SerialRuleItemList>
+ </>
)
}
diff --git a/rsf-admin/src/page/system/serialRule/SerialRuleItemCreate.jsx b/rsf-admin/src/page/system/serialRule/SerialRuleItemCreate.jsx
new file mode 100644
index 0000000..f51326e
--- /dev/null
+++ b/rsf-admin/src/page/system/serialRule/SerialRuleItemCreate.jsx
@@ -0,0 +1,151 @@
+import React, { useState, useRef, useEffect, useMemo } from "react";
+import {
+ CreateBase,
+ useTranslate,
+ TextInput,
+ NumberInput,
+ BooleanInput,
+ DateInput,
+ SaveButton,
+ SelectInput,
+ ReferenceInput,
+ ReferenceArrayInput,
+ AutocompleteInput,
+ Toolbar,
+ required,
+ useDataProvider,
+ useNotify,
+ Form,
+ useCreateController,
+} from 'react-admin';
+import {
+ Dialog,
+ DialogActions,
+ DialogContent,
+ DialogTitle,
+ Stack,
+ Grid,
+ Box,
+} from '@mui/material';
+import DialogCloseButton from "../../components/DialogCloseButton";
+import StatusSelectInput from "../../components/StatusSelectInput";
+import MemoInput from "../../components/MemoInput";
+
+const SerialRuleItemCreate = (props) => {
+ const { open, setOpen } = props;
+
+ const translate = useTranslate();
+ const notify = useNotify();
+
+ const handleClose = (event, reason) => {
+ if (reason !== "backdropClick") {
+ setOpen(false);
+ }
+ };
+
+ const handleSuccess = async (data) => {
+ setOpen(false);
+ notify('common.response.success');
+ };
+
+ const handleError = async (error) => {
+ notify(error.message || 'common.response.fail', { type: 'error', messageArgs: { _: error.message } });
+ };
+
+ return (
+ <>
+ <CreateBase
+ record={{}}
+ transform={(data) => {
+ return data;
+ }}
+ mutationOptions={{ onSuccess: handleSuccess, onError: handleError }}
+ >
+ <Dialog
+ open={open}
+ onClose={handleClose}
+ aria-labelledby="form-dialog-title"
+ fullWidth
+ disableRestoreFocus
+ maxWidth="md" // 'xs' | 'sm' | 'md' | 'lg' | 'xl'
+ >
+ <Form>
+ <DialogTitle id="form-dialog-title" sx={{
+ position: 'sticky',
+ top: 0,
+ backgroundColor: 'background.paper',
+ zIndex: 1000
+ }}
+ >
+ {translate('create.title')}
+ <Box sx={{ position: 'absolute', top: 8, right: 8, zIndex: 1001 }}>
+ <DialogCloseButton onClose={handleClose} />
+ </Box>
+ </DialogTitle>
+ <DialogContent sx={{ mt: 2 }}>
+ <Grid container rowSpacing={2} columnSpacing={2}>
+ <Grid item xs={6} display="flex" gap={1}>
+ <NumberInput
+ label="table.field.serialRuleItem.ruleId"
+ source="ruleId"
+ autoFocus
+ />
+ </Grid>
+ <Grid item xs={6} display="flex" gap={1}>
+ <TextInput
+ label="table.field.serialRuleItem.wkType"
+ source="wkType"
+ parse={v => v}
+ />
+ </Grid>
+ <Grid item xs={6} display="flex" gap={1}>
+ <TextInput
+ label="table.field.serialRuleItem.feildValue"
+ source="feildValue"
+ parse={v => v}
+ />
+ </Grid>
+ <Grid item xs={6} display="flex" gap={1}>
+ <NumberInput
+ label="table.field.serialRuleItem.len"
+ source="len"
+ />
+ </Grid>
+ <Grid item xs={6} display="flex" gap={1}>
+ <NumberInput
+ label="table.field.serialRuleItem.lenStr"
+ source="lenStr"
+ validate={required()}
+ />
+ </Grid>
+ <Grid item xs={6} display="flex" gap={1}>
+ <NumberInput
+ label="table.field.serialRuleItem.sort"
+ source="sort"
+ validate={required()}
+ />
+ </Grid>
+
+ <Grid item xs={6} display="flex" gap={1}>
+ <StatusSelectInput />
+ </Grid>
+ <Grid item xs={12} display="flex" gap={1}>
+ <Stack direction="column" spacing={1} width={'100%'}>
+ <MemoInput />
+ </Stack>
+ </Grid>
+ </Grid>
+ </DialogContent>
+ <DialogActions sx={{ position: 'sticky', bottom: 0, backgroundColor: 'background.paper', zIndex: 1000 }}>
+ <Toolbar sx={{ width: '100%', justifyContent: 'space-between' }} >
+ <SaveButton />
+ </Toolbar>
+ </DialogActions>
+ </Form>
+ </Dialog>
+ </CreateBase>
+ </>
+ )
+}
+
+export default SerialRuleItemCreate;
diff --git a/rsf-admin/src/page/system/serialRule/SerialRuleItemList.jsx b/rsf-admin/src/page/system/serialRule/SerialRuleItemList.jsx
new file mode 100644
index 0000000..c99a1bc
--- /dev/null
+++ b/rsf-admin/src/page/system/serialRule/SerialRuleItemList.jsx
@@ -0,0 +1,225 @@
+import React, {
+ useState,
+ useRef,
+ useEffect,
+ useMemo,
+ useCallback,
+} from "react";
+import { useNavigate, useLocation } from "react-router-dom";
+import {
+ 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,
+ useGetRecordId,
+} from "react-admin";
+import { Box, Typography, Card, Stack } from "@mui/material";
+import { styled } from "@mui/material/styles";
+import SerialRuleItemCreate from "./SerialRuleItemCreate";
+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";
+import * as Common from "@/utils/common";
+import CustomerTopToolBar from "../../components/EditTopToolBar";
+
+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="ruleId" label="table.field.serialRuleItem.ruleId" />,
+ <TextInput source="wkType" label="table.field.serialRuleItem.wkType" />,
+ <TextInput source="feildValue" label="table.field.serialRuleItem.feildValue" />,
+ <NumberInput source="len" label="table.field.serialRuleItem.len" />,
+ <NumberInput source="lenStr" label="table.field.serialRuleItem.lenStr" />,
+ <NumberInput source="sort" label="table.field.serialRuleItem.sort" />,
+ <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 SerialRuleItemList = () => {
+ const translate = useTranslate();
+ const [createDialog, setCreateDialog] = useState(false);
+ const [drawerVal, setDrawerVal] = useState(false);
+ const ruleId = useGetRecordId();
+
+ return (
+ <>
+ <Box display="flex">
+ <List
+ resource="serialRuleItem"
+ sx={{
+ flexGrow: 1,
+ transition: (theme) =>
+ theme.transitions.create(["all"], {
+ duration: theme.transitions.duration.enteringScreen,
+ }),
+ marginRight: drawerVal ? `${PAGE_DRAWER_WIDTH}px` : 0,
+ }}
+ title={"menu.serialRuleItem"}
+ empty={
+ <EmptyData
+ onClick={() => {
+ setCreateDialog(true);
+ }}
+ />
+ }
+ filters={filters}
+ filter={{ ruleId: ruleId }}
+ sort={{ field: "create_time", order: "desc" }}
+ actions={
+ <TopToolbar>
+ <FilterButton />
+ <MyCreateButton
+ onClick={() => {
+ setCreateDialog(true);
+ }}
+ />
+ <SelectColumnsButton preferenceKey="serialRuleItem" />
+ <MyExportButton />
+ </TopToolbar>
+ }
+ perPage={DEFAULT_PAGE_SIZE}
+ >
+ <StyledDatagrid
+ preferenceKey="serialRuleItem"
+ bulkActionButtons={() => (
+ <BulkDeleteButton mutationMode={OPERATE_MODE} />
+ )}
+ rowClick={false}
+ omit={["id", "createTime", "createBy", "memo"]}
+ >
+ <NumberField source="id" />
+ <NumberField
+ source="ruleId"
+ label="table.field.serialRuleItem.ruleId"
+ />
+ <TextField
+ source="wkType$"
+ label="table.field.serialRuleItem.wkType"
+ />
+ <TextField
+ source="feildValue"
+ label="table.field.serialRuleItem.feildValue"
+ />
+ <NumberField source="len" label="table.field.serialRuleItem.len" />
+ <NumberField
+ source="lenStr"
+ label="table.field.serialRuleItem.lenStr"
+ />
+ <NumberField
+ source="sort"
+ label="table.field.serialRuleItem.sort"
+ />
+ <ReferenceField
+ source="updateBy"
+ label="common.field.updateBy"
+ reference="user"
+ link={false}
+ sortable={false}
+ >
+ <TextField source="nickname" />
+ </ReferenceField>
+ <DateField
+ source="updateTime"
+ label="common.field.updateTime"
+ showTime
+ />
+ <ReferenceField
+ source="createBy"
+ label="common.field.createBy"
+ reference="user"
+ link={false}
+ sortable={false}
+ >
+ <TextField source="nickname" />
+ </ReferenceField>
+ <DateField
+ source="createTime"
+ label="common.field.createTime"
+ showTime
+ />
+ <BooleanField
+ source="statusBool"
+ label="common.field.status"
+ sortable={false}
+ />
+ <TextField
+ source="memo"
+ label="common.field.memo"
+ sortable={false}
+ />
+ <WrapperField cellClassName="opt" label="common.field.opt">
+ <EditButton sx={{ padding: "1px", fontSize: ".75rem" }} />
+ <DeleteButton
+ sx={{ padding: "1px", fontSize: ".75rem" }}
+ mutationMode={OPERATE_MODE}
+ />
+ </WrapperField>
+ </StyledDatagrid>
+ </List>
+ <SerialRuleItemCreate open={createDialog} setOpen={setCreateDialog} />
+ <PageDrawer
+ title="SerialRuleItem Detail"
+ drawerVal={drawerVal}
+ setDrawerVal={setDrawerVal}
+ ></PageDrawer>
+ </Box>
+ </>
+ );
+};
+
+export default SerialRuleItemList;
diff --git a/rsf-admin/src/page/system/serialRule/SerialRuleList.jsx b/rsf-admin/src/page/system/serialRule/SerialRuleList.jsx
index 6008fab..8b4c623 100644
--- a/rsf-admin/src/page/system/serialRule/SerialRuleList.jsx
+++ b/rsf-admin/src/page/system/serialRule/SerialRuleList.jsx
@@ -72,7 +72,6 @@
<SearchInput source="condition" alwaysOn />,
<DateInput label="common.time.after" source="timeStart" alwaysOn />,
<DateInput label="common.time.before" source="timeEnd" alwaysOn />,
-
<TextInput source="code" label="table.field.serialRule.code" />,
<TextInput source="name" label="table.field.serialRule.name" />,
<TextInput source="delimit" label="table.field.serialRule.delimit" />,
@@ -100,10 +99,10 @@
const [drawerVal, setDrawerVal] = useState(false);
const [detailDialog, setDetailDialog] = useState(false);
- const navigate = useNavigate();
- const assign = (record) => {
- navigate(`/serialRuleItem?ruleId=${record.id}`);
- };
+ // const navigate = useNavigate();
+ // const assign = (record) => {
+ // navigate(`/serialRuleItem?ruleId=${record.id}`);
+ // };
return (
<Box display="flex">
@@ -145,26 +144,11 @@
bulkActionButtons={() => (
<BulkDeleteButton mutationMode={OPERATE_MODE} />
)}
- rowClick={(id, resource, record) => false}
+ rowClick={'edit'}
omit={["id", "createTime", "createBy", "memo"]}
>
<NumberField source="id" />
- <MyField
- source="code"
- label="table.field.serialRule.code"
- onClick={(event, record, val) => {
- event.stopPropagation();
- assign(record);
- }}
- />
- {/* <MyField
- source="code"
- label="table.field.serialRule.code"
- onClick={() => {
- setDetailDialog(true);
- }}
- /> */}
-
+ <TextField source="code" label="table.field.serialRule.code" />
<TextField source="name" label="table.field.serialRule.name" />
<TextField source="delimit" label="table.field.serialRule.delimit" />
<TextField source="reset" label="table.field.serialRule.reset" />
diff --git a/rsf-admin/src/page/task/TaskList.jsx b/rsf-admin/src/page/task/TaskList.jsx
index dc8eceb..7f6cce0 100644
--- a/rsf-admin/src/page/task/TaskList.jsx
+++ b/rsf-admin/src/page/task/TaskList.jsx
@@ -8,33 +8,22 @@
SearchInput,
TopToolbar,
SelectColumnsButton,
- EditButton,
FilterButton,
- CreateButton,
- ExportButton,
BulkDeleteButton,
WrapperField,
useRecordContext,
useTranslate,
useNotify,
useRefresh,
- useDataProvider,
- useListContext,
- FunctionField,
TextField,
NumberField,
DateField,
BooleanField,
- ReferenceField,
TextInput,
- DateTimeInput,
DateInput,
SelectInput,
NumberInput,
- ReferenceInput,
- ReferenceArrayInput,
- AutocompleteInput,
- DeleteButton,
+
Button,
} from 'react-admin';
import { Box, Typography, Card, Stack, Drawer } from '@mui/material';
@@ -100,9 +89,7 @@
const TaskList = () => {
const translate = useTranslate();
- const [createDialog, setCreateDialog] = useState(false);
const [drawerVal, setDrawerVal] = useState(false);
- const [data, setData] = useState([]);
return (
<Box display="flex">
<List
diff --git a/rsf-admin/src/page/task/TaskPanel.jsx b/rsf-admin/src/page/task/TaskPanel.jsx
index a207d24..6207229 100644
--- a/rsf-admin/src/page/task/TaskPanel.jsx
+++ b/rsf-admin/src/page/task/TaskPanel.jsx
@@ -48,7 +48,7 @@
marginRight: !!drawerVal ? `${PAGE_DRAWER_WIDTH}px` : 0,
}}
filter={{ taskId: record.id }}
- title={"menu.taskItem"}
+ // title={"menu.taskItem"}
pagination={false}
empty={false}
actions={false}
@@ -77,7 +77,6 @@
<TextField source="createBy$" label="common.field.createBy"/>
<DateField source="updateTime" label="common.field.updateTime" showTime />
<DateField source="createTime" label="common.field.createTime" showTime />
- <BooleanField source="statusBool" label="common.field.status" sortable={false} />
<TextField source="memo" label="common.field.memo" sortable={false} />
</StyledDatagrid>
</List>
diff --git a/rsf-admin/src/page/waitPakinItemLog/WaitPakinItemLogCreate.jsx b/rsf-admin/src/page/waitPakinItemLog/WaitPakinItemLogCreate.jsx
deleted file mode 100644
index 0ee7ce6..0000000
--- a/rsf-admin/src/page/waitPakinItemLog/WaitPakinItemLogCreate.jsx
+++ /dev/null
@@ -1,220 +0,0 @@
-import React, { useState, useRef, useEffect, useMemo } from "react";
-import {
- CreateBase,
- useTranslate,
- TextInput,
- NumberInput,
- BooleanInput,
- DateInput,
- SaveButton,
- SelectInput,
- ReferenceInput,
- ReferenceArrayInput,
- AutocompleteInput,
- Toolbar,
- required,
- useDataProvider,
- useNotify,
- Form,
- useCreateController,
-} from 'react-admin';
-import {
- Dialog,
- DialogActions,
- DialogContent,
- DialogTitle,
- Stack,
- Grid,
- Box,
-} from '@mui/material';
-import DialogCloseButton from "../components/DialogCloseButton";
-import StatusSelectInput from "../components/StatusSelectInput";
-import MemoInput from "../components/MemoInput";
-
-const WaitPakinItemLogCreate = (props) => {
- const { open, setOpen } = props;
-
- const translate = useTranslate();
- const notify = useNotify();
-
- const handleClose = (event, reason) => {
- if (reason !== "backdropClick") {
- setOpen(false);
- }
- };
-
- const handleSuccess = async (data) => {
- setOpen(false);
- notify('common.response.success');
- };
-
- const handleError = async (error) => {
- notify(error.message || 'common.response.fail', { type: 'error', messageArgs: { _: error.message } });
- };
-
- return (
- <>
- <CreateBase
- record={{}}
- transform={(data) => {
- return data;
- }}
- mutationOptions={{ onSuccess: handleSuccess, onError: handleError }}
- >
- <Dialog
- open={open}
- onClose={handleClose}
- aria-labelledby="form-dialog-title"
- fullWidth
- disableRestoreFocus
- maxWidth="md" // 'xs' | 'sm' | 'md' | 'lg' | 'xl'
- >
- <Form>
- <DialogTitle id="form-dialog-title" sx={{
- position: 'sticky',
- top: 0,
- backgroundColor: 'background.paper',
- zIndex: 1000
- }}
- >
- {translate('create.title')}
- <Box sx={{ position: 'absolute', top: 8, right: 8, zIndex: 1001 }}>
- <DialogCloseButton onClose={handleClose} />
- </Box>
- </DialogTitle>
- <DialogContent sx={{ mt: 2 }}>
- <Grid container rowSpacing={2} columnSpacing={2}>
- <Grid item xs={6} display="flex" gap={1}>
- <ReferenceInput
- source="pakinId"
- reference="waitPakin"
- autoFocus
- >
- <AutocompleteInput
- label="table.field.waitPakinItemLog.pakinId"
- optionText="id"
- filterToQuery={(val) => ({ id: val })}
- />
- </ReferenceInput>
- </Grid>
- <Grid item xs={6} display="flex" gap={1}>
- <NumberInput
- label="table.field.waitPakinItemLog.pakinItemId"
- source="pakinItemId"
- />
- </Grid>
- <Grid item xs={6} display="flex" gap={1}>
- <NumberInput
- label="table.field.waitPakinItemLog.asnId"
- source="asnId"
- />
- </Grid>
- <Grid item xs={6} display="flex" gap={1}>
- <TextInput
- label="table.field.waitPakinItemLog.asnCode"
- source="asnCode"
- parse={v => v}
- />
- </Grid>
- <Grid item xs={6} display="flex" gap={1}>
- <NumberInput
- label="table.field.waitPakinItemLog.asnItemId"
- source="asnItemId"
- />
- </Grid>
- <Grid item xs={6} display="flex" gap={1}>
- <TextInput
- label="table.field.waitPakinItemLog.trackCode"
- source="trackCode"
- parse={v => v}
- />
- </Grid>
- <Grid item xs={6} display="flex" gap={1}>
- <TextInput
- label="table.field.waitPakinItemLog.maktx"
- source="maktx"
- parse={v => v}
- />
- </Grid>
- <Grid item xs={6} display="flex" gap={1}>
- <ReferenceInput
- source="matnrId"
- reference="matnr"
- >
- <AutocompleteInput
- label="table.field.waitPakinItemLog.matnrId"
- optionText="unit"
- filterToQuery={(val) => ({ unit: val })}
- />
- </ReferenceInput>
- </Grid>
- <Grid item xs={6} display="flex" gap={1}>
- <TextInput
- label="table.field.waitPakinItemLog.matnrCode"
- source="matnrCode"
- parse={v => v}
- />
- </Grid>
- <Grid item xs={6} display="flex" gap={1}>
- <NumberInput
- label="table.field.waitPakinItemLog.anfme"
- source="anfme"
- />
- </Grid>
- <Grid item xs={6} display="flex" gap={1}>
- <NumberInput
- label="table.field.waitPakinItemLog.workQty"
- source="workQty"
- />
- </Grid>
- <Grid item xs={6} display="flex" gap={1}>
- <TextInput
- label="table.field.waitPakinItemLog.unit"
- source="unit"
- parse={v => v}
- />
- </Grid>
- <Grid item xs={6} display="flex" gap={1}>
- <TextInput
- label="table.field.waitPakinItemLog.fieldsIndex"
- source="fieldsIndex"
- parse={v => v}
- />
- </Grid>
- <Grid item xs={6} display="flex" gap={1}>
- <NumberInput
- label="table.field.waitPakinItemLog.qty"
- source="qty"
- />
- </Grid>
- <Grid item xs={6} display="flex" gap={1}>
- <TextInput
- label="table.field.waitPakinItemLog.batch"
- source="batch"
- parse={v => v}
- />
- </Grid>
-
- <Grid item xs={6} display="flex" gap={1}>
- <StatusSelectInput />
- </Grid>
- <Grid item xs={12} display="flex" gap={1}>
- <Stack direction="column" spacing={1} width={'100%'}>
- <MemoInput />
- </Stack>
- </Grid>
- </Grid>
- </DialogContent>
- <DialogActions sx={{ position: 'sticky', bottom: 0, backgroundColor: 'background.paper', zIndex: 1000 }}>
- <Toolbar sx={{ width: '100%', justifyContent: 'space-between' }} >
- <SaveButton />
- </Toolbar>
- </DialogActions>
- </Form>
- </Dialog>
- </CreateBase>
- </>
- )
-}
-
-export default WaitPakinItemLogCreate;
diff --git a/rsf-admin/src/page/waitPakinItemLog/WaitPakinItemLogEdit.jsx b/rsf-admin/src/page/waitPakinItemLog/WaitPakinItemLogEdit.jsx
deleted file mode 100644
index 80599c0..0000000
--- a/rsf-admin/src/page/waitPakinItemLog/WaitPakinItemLogEdit.jsx
+++ /dev/null
@@ -1,194 +0,0 @@
-import React, { useState, useRef, useEffect, useMemo } from "react";
-import {
- Edit,
- SimpleForm,
- FormDataConsumer,
- useTranslate,
- TextInput,
- NumberInput,
- BooleanInput,
- DateInput,
- SelectInput,
- ReferenceInput,
- ReferenceArrayInput,
- AutocompleteInput,
- SaveButton,
- Toolbar,
- Labeled,
- NumberField,
- required,
- useRecordContext,
- DeleteButton,
-} from 'react-admin';
-import { useWatch, useFormContext } from "react-hook-form";
-import { Stack, Grid, Box, Typography } from '@mui/material';
-import * as Common from '@/utils/common';
-import { EDIT_MODE, REFERENCE_INPUT_PAGESIZE } from '@/config/setting';
-import EditBaseAside from "../components/EditBaseAside";
-import CustomerTopToolBar from "../components/EditTopToolBar";
-import MemoInput from "../components/MemoInput";
-import StatusSelectInput from "../components/StatusSelectInput";
-
-const FormToolbar = () => {
- const { getValues } = useFormContext();
-
- return (
- <Toolbar sx={{ justifyContent: 'space-between' }}>
- <SaveButton />
- <DeleteButton mutationMode="optimistic" />
- </Toolbar>
- )
-}
-
-const WaitPakinItemLogEdit = () => {
- const translate = useTranslate();
-
- return (
- <Edit
- redirect="list"
- mutationMode={EDIT_MODE}
- actions={<CustomerTopToolBar />}
- aside={<EditBaseAside />}
- >
- <SimpleForm
- shouldUnregister
- warnWhenUnsavedChanges
- toolbar={<FormToolbar />}
- mode="onTouched"
- defaultValues={{}}
- // validate={(values) => { }}
- >
- <Grid container width={{ xs: '100%', xl: '80%' }} rowSpacing={3} columnSpacing={3}>
- <Grid item xs={12} md={8}>
- <Typography variant="h6" gutterBottom>
- {translate('common.edit.title.main')}
- </Typography>
- <Stack direction='row' gap={2}>
- <ReferenceInput
- source="pakinId"
- reference="waitPakin"
- perPage={REFERENCE_INPUT_PAGESIZE}
- autoFocus
- >
- <AutocompleteInput
- label="table.field.waitPakinItemLog.pakinId"
- optionText="id"
- filterToQuery={(val) => ({ id: val })}
- />
- </ReferenceInput>
- </Stack>
- <Stack direction='row' gap={2}>
- <NumberInput
- label="table.field.waitPakinItemLog.pakinItemId"
- source="pakinItemId"
- />
- </Stack>
- <Stack direction='row' gap={2}>
- <NumberInput
- label="table.field.waitPakinItemLog.asnId"
- source="asnId"
- />
- </Stack>
- <Stack direction='row' gap={2}>
- <TextInput
- label="table.field.waitPakinItemLog.asnCode"
- source="asnCode"
- parse={v => v}
- />
- </Stack>
- <Stack direction='row' gap={2}>
- <NumberInput
- label="table.field.waitPakinItemLog.asnItemId"
- source="asnItemId"
- />
- </Stack>
- <Stack direction='row' gap={2}>
- <TextInput
- label="table.field.waitPakinItemLog.trackCode"
- source="trackCode"
- parse={v => v}
- />
- </Stack>
- <Stack direction='row' gap={2}>
- <TextInput
- label="table.field.waitPakinItemLog.maktx"
- source="maktx"
- parse={v => v}
- />
- </Stack>
- <Stack direction='row' gap={2}>
- <ReferenceInput
- source="matnrId"
- reference="matnr"
- perPage={REFERENCE_INPUT_PAGESIZE}
- >
- <AutocompleteInput
- label="table.field.waitPakinItemLog.matnrId"
- optionText="unit"
- filterToQuery={(val) => ({ unit: val })}
- />
- </ReferenceInput>
- </Stack>
- <Stack direction='row' gap={2}>
- <TextInput
- label="table.field.waitPakinItemLog.matnrCode"
- source="matnrCode"
- parse={v => v}
- />
- </Stack>
- <Stack direction='row' gap={2}>
- <NumberInput
- label="table.field.waitPakinItemLog.anfme"
- source="anfme"
- />
- </Stack>
- <Stack direction='row' gap={2}>
- <NumberInput
- label="table.field.waitPakinItemLog.workQty"
- source="workQty"
- />
- </Stack>
- <Stack direction='row' gap={2}>
- <TextInput
- label="table.field.waitPakinItemLog.unit"
- source="unit"
- parse={v => v}
- />
- </Stack>
- <Stack direction='row' gap={2}>
- <TextInput
- label="table.field.waitPakinItemLog.fieldsIndex"
- source="fieldsIndex"
- parse={v => v}
- />
- </Stack>
- <Stack direction='row' gap={2}>
- <NumberInput
- label="table.field.waitPakinItemLog.qty"
- source="qty"
- />
- </Stack>
- <Stack direction='row' gap={2}>
- <TextInput
- label="table.field.waitPakinItemLog.batch"
- source="batch"
- parse={v => v}
- />
- </Stack>
-
- </Grid>
- <Grid item xs={12} md={4}>
- <Typography variant="h6" gutterBottom>
- {translate('common.edit.title.common')}
- </Typography>
- <StatusSelectInput />
- <Box mt="2em" />
- <MemoInput />
- </Grid>
- </Grid>
- </SimpleForm>
- </Edit >
- )
-}
-
-export default WaitPakinItemLogEdit;
diff --git a/rsf-admin/src/page/waitPakinItemLog/WaitPakinItemLogPanel.jsx b/rsf-admin/src/page/waitPakinItemLog/WaitPakinItemLogPanel.jsx
deleted file mode 100644
index 8bb4f7e..0000000
--- a/rsf-admin/src/page/waitPakinItemLog/WaitPakinItemLogPanel.jsx
+++ /dev/null
@@ -1,141 +0,0 @@
-import React, { useState, useRef, useEffect, useMemo } from "react";
-import { Box, Card, CardContent, Grid, Typography, Tooltip } from '@mui/material';
-import {
- useTranslate,
- useRecordContext,
-} from 'react-admin';
-import PanelTypography from "../components/PanelTypography";
-import * as Common from '@/utils/common'
-
-const WaitPakinItemLogPanel = () => {
- const record = useRecordContext();
- if (!record) return null;
- const translate = useTranslate();
- return (
- <>
- <Card sx={{ width: { xs: 300, sm: 500, md: 600, lg: 800 }, margin: 'auto' }}>
- <CardContent>
- <Grid container spacing={2}>
- <Grid item xs={12} sx={{ display: 'flex', justifyContent: 'space-between' }}>
- <Typography variant="h6" gutterBottom align="left" sx={{
- maxWidth: { xs: '100px', sm: '180px', md: '260px', lg: '360px' },
- whiteSpace: 'nowrap',
- overflow: 'hidden',
- textOverflow: 'ellipsis',
- }}>
- {Common.camelToPascalWithSpaces(translate('table.field.waitPakinItemLog.id'))}: {record.id}
- </Typography>
- {/* inherit, primary, secondary, textPrimary, textSecondary, error */}
- <Typography variant="h6" gutterBottom align="right" >
- ID: {record.id}
- </Typography>
- </Grid>
- </Grid>
- <Grid container spacing={2}>
- <Grid item xs={12} container alignContent="flex-end">
- <Typography variant="caption" color="textSecondary" sx={{ wordWrap: 'break-word', wordBreak: 'break-all' }}>
- {Common.camelToPascalWithSpaces(translate('common.field.memo'))}:{record.memo}
- </Typography>
- </Grid>
- </Grid>
- <Box height={20}> </Box>
- <Grid container spacing={2}>
- <Grid item xs={6}>
- <PanelTypography
- title="table.field.waitPakinItemLog.pakinId"
- property={record.pakinId$}
- />
- </Grid>
- <Grid item xs={6}>
- <PanelTypography
- title="table.field.waitPakinItemLog.pakinItemId"
- property={record.pakinItemId}
- />
- </Grid>
- <Grid item xs={6}>
- <PanelTypography
- title="table.field.waitPakinItemLog.asnId"
- property={record.asnId}
- />
- </Grid>
- <Grid item xs={6}>
- <PanelTypography
- title="table.field.waitPakinItemLog.asnCode"
- property={record.asnCode}
- />
- </Grid>
- <Grid item xs={6}>
- <PanelTypography
- title="table.field.waitPakinItemLog.asnItemId"
- property={record.asnItemId}
- />
- </Grid>
- <Grid item xs={6}>
- <PanelTypography
- title="table.field.waitPakinItemLog.trackCode"
- property={record.trackCode}
- />
- </Grid>
- <Grid item xs={6}>
- <PanelTypography
- title="table.field.waitPakinItemLog.maktx"
- property={record.maktx}
- />
- </Grid>
- <Grid item xs={6}>
- <PanelTypography
- title="table.field.waitPakinItemLog.matnrId"
- property={record.matnrId$}
- />
- </Grid>
- <Grid item xs={6}>
- <PanelTypography
- title="table.field.waitPakinItemLog.matnrCode"
- property={record.matnrCode}
- />
- </Grid>
- <Grid item xs={6}>
- <PanelTypography
- title="table.field.waitPakinItemLog.anfme"
- property={record.anfme}
- />
- </Grid>
- <Grid item xs={6}>
- <PanelTypography
- title="table.field.waitPakinItemLog.workQty"
- property={record.workQty}
- />
- </Grid>
- <Grid item xs={6}>
- <PanelTypography
- title="table.field.waitPakinItemLog.unit"
- property={record.unit}
- />
- </Grid>
- <Grid item xs={6}>
- <PanelTypography
- title="table.field.waitPakinItemLog.fieldsIndex"
- property={record.fieldsIndex}
- />
- </Grid>
- <Grid item xs={6}>
- <PanelTypography
- title="table.field.waitPakinItemLog.qty"
- property={record.qty}
- />
- </Grid>
- <Grid item xs={6}>
- <PanelTypography
- title="table.field.waitPakinItemLog.batch"
- property={record.batch}
- />
- </Grid>
-
- </Grid>
- </CardContent>
- </Card >
- </>
- );
-};
-
-export default WaitPakinItemLogPanel;
diff --git a/rsf-admin/src/page/waitPakinItemLog/index.jsx b/rsf-admin/src/page/waitPakinItemLog/index.jsx
deleted file mode 100644
index 52cacba..0000000
--- a/rsf-admin/src/page/waitPakinItemLog/index.jsx
+++ /dev/null
@@ -1,18 +0,0 @@
-import React, { useState, useRef, useEffect, useMemo } from "react";
-import {
- ListGuesser,
- EditGuesser,
- ShowGuesser,
-} from "react-admin";
-
-import WaitPakinItemLogList from "./WaitPakinItemLogList";
-import WaitPakinItemLogEdit from "./WaitPakinItemLogEdit";
-
-export default {
- list: WaitPakinItemLogList,
- edit: WaitPakinItemLogEdit,
- show: ShowGuesser,
- recordRepresentation: (record) => {
- return `${record.id}`
- }
-};
diff --git a/rsf-admin/src/page/waitPakinItemLog/WaitPakinItemLogList.jsx b/rsf-admin/src/page/waitPakinLog/WaitPakinItemLogList.jsx
similarity index 84%
rename from rsf-admin/src/page/waitPakinItemLog/WaitPakinItemLogList.jsx
rename to rsf-admin/src/page/waitPakinLog/WaitPakinItemLogList.jsx
index 767197a..31b2e7d 100644
--- a/rsf-admin/src/page/waitPakinItemLog/WaitPakinItemLogList.jsx
+++ b/rsf-admin/src/page/waitPakinLog/WaitPakinItemLogList.jsx
@@ -31,12 +31,10 @@
ReferenceArrayInput,
AutocompleteInput,
DeleteButton,
+ useGetRecordId,
} from 'react-admin';
import { Box, Typography, Card, Stack } from '@mui/material';
-import { styled } from '@mui/material/styles';
-import WaitPakinItemLogCreate from "./WaitPakinItemLogCreate";
-import WaitPakinItemLogPanel from "./WaitPakinItemLogPanel";
-import EmptyData from "../components/EmptyData";
+import { styled } from '@mui/material/styles'; import EmptyData from "../components/EmptyData";
import MyCreateButton from "../components/MyCreateButton";
import MyExportButton from '../components/MyExportButton';
import PageDrawer from "../components/PageDrawer";
@@ -60,7 +58,6 @@
const filters = [
<SearchInput source="condition" alwaysOn />,
-
<ReferenceInput source="pakinId" label="table.field.waitPakinItemLog.pakinId" reference="waitPakin">
<AutocompleteInput label="table.field.waitPakinItemLog.pakinId" optionText="id" filterToQuery={(val) => ({ id: val })} />
</ReferenceInput>,
@@ -80,7 +77,6 @@
<TextInput source="fieldsIndex" label="table.field.waitPakinItemLog.fieldsIndex" />,
<NumberInput source="qty" label="table.field.waitPakinItemLog.qty" />,
<TextInput source="batch" label="table.field.waitPakinItemLog.batch" />,
-
<TextInput label="common.field.memo" source="memo" />,
<SelectInput
label="common.field.status"
@@ -95,13 +91,14 @@
const WaitPakinItemLogList = () => {
const translate = useTranslate();
-
const [createDialog, setCreateDialog] = useState(false);
const [drawerVal, setDrawerVal] = useState(false);
+ const recordId = useGetRecordId();
return (
<Box display="flex">
<List
+ resource="waitPakinItemLog"
sx={{
flexGrow: 1,
transition: (theme) =>
@@ -113,11 +110,11 @@
title={"menu.waitPakinItemLog"}
empty={<EmptyData onClick={() => { setCreateDialog(true) }} />}
filters={filters}
+ filter={{ logId: recordId }}
sort={{ field: "create_time", order: "desc" }}
actions={(
<TopToolbar>
<FilterButton />
- <MyCreateButton onClick={() => { setCreateDialog(true) }} />
<SelectColumnsButton preferenceKey='waitPakinItemLog' />
<MyExportButton />
</TopToolbar>
@@ -127,8 +124,8 @@
<StyledDatagrid
preferenceKey='waitPakinItemLog'
bulkActionButtons={() => <BulkDeleteButton mutationMode={OPERATE_MODE} />}
- rowClick={(id, resource, record) => false}
- omit={['id', 'createTime', 'createBy', 'memo']}
+ rowClick={ false}
+ omit={['id', 'createTime', 'createBy', 'memo', 'pakinId', 'pakinItemId', 'asnId' ,'asnItemId', 'createBy$', 'fieldsIndex']}
>
<NumberField source="id" />
<ReferenceField source="pakinId" label="table.field.waitPakinItemLog.pakinId" reference="waitPakin" link={false} sortable={false}>
@@ -150,27 +147,14 @@
<TextField source="fieldsIndex" label="table.field.waitPakinItemLog.fieldsIndex" />
<NumberField source="qty" label="table.field.waitPakinItemLog.qty" />
<TextField source="batch" label="table.field.waitPakinItemLog.batch" />
-
- <ReferenceField source="updateBy" label="common.field.updateBy" reference="user" link={false} sortable={false}>
- <TextField source="nickname" />
- </ReferenceField>
+ <TextField source="updateBy$" label="common.field.updateBy" />
<DateField source="updateTime" label="common.field.updateTime" showTime />
- <ReferenceField source="createBy" label="common.field.createBy" reference="user" link={false} sortable={false}>
- <TextField source="nickname" />
- </ReferenceField>
+ <TextField source="createBy$" label="common.field.createBy" />
<DateField source="createTime" label="common.field.createTime" showTime />
<BooleanField source="statusBool" label="common.field.status" sortable={false} />
<TextField source="memo" label="common.field.memo" sortable={false} />
- <WrapperField cellClassName="opt" label="common.field.opt">
- <EditButton sx={{ padding: '1px', fontSize: '.75rem' }} />
- <DeleteButton sx={{ padding: '1px', fontSize: '.75rem' }} mutationMode={OPERATE_MODE} />
- </WrapperField>
</StyledDatagrid>
</List>
- <WaitPakinItemLogCreate
- open={createDialog}
- setOpen={setCreateDialog}
- />
<PageDrawer
title='WaitPakinItemLog Detail'
drawerVal={drawerVal}
diff --git a/rsf-admin/src/page/waitPakinLog/WaitPakinLogEdit.jsx b/rsf-admin/src/page/waitPakinLog/WaitPakinLogEdit.jsx
index 3570c73..ac2350e 100644
--- a/rsf-admin/src/page/waitPakinLog/WaitPakinLogEdit.jsx
+++ b/rsf-admin/src/page/waitPakinLog/WaitPakinLogEdit.jsx
@@ -28,12 +28,13 @@
import CustomerTopToolBar from "../components/EditTopToolBar";
import MemoInput from "../components/MemoInput";
import StatusSelectInput from "../components/StatusSelectInput";
+import WaitPakinItemLogList from "./WaitPakinItemLogList";
const FormToolbar = () => {
const { getValues } = useFormContext();
return (
- <Toolbar sx={{ justifyContent: 'space-between' }}>
+ <Toolbar sx={{ justifyContent: 'end' }}>
<SaveButton />
<DeleteButton mutationMode="optimistic" />
</Toolbar>
@@ -44,76 +45,62 @@
const translate = useTranslate();
return (
- <Edit
- redirect="list"
- mutationMode={EDIT_MODE}
- actions={<CustomerTopToolBar />}
- aside={<EditBaseAside />}
- >
- <SimpleForm
- shouldUnregister
- warnWhenUnsavedChanges
- toolbar={<FormToolbar />}
- mode="onTouched"
- defaultValues={{}}
- // validate={(values) => { }}
+ <>
+ <Edit
+ redirect="list"
+ mutationMode={EDIT_MODE}
+ actions={<CustomerTopToolBar />}
+ aside={<EditBaseAside />}
>
- <Grid container width={{ xs: '100%', xl: '80%' }} rowSpacing={3} columnSpacing={3}>
- <Grid item xs={12} md={8}>
- <Typography variant="h6" gutterBottom>
- {translate('common.edit.title.main')}
- </Typography>
- <Stack direction='row' gap={2}>
- <NumberInput
- label="table.field.waitPakinLog.pakinId"
- source="pakinId"
- autoFocus
- />
- </Stack>
- <Stack direction='row' gap={2}>
- <TextInput
- label="table.field.waitPakinLog.code"
- source="code"
- parse={v => v}
- />
- </Stack>
- <Stack direction='row' gap={2}>
- <TextInput
- label="table.field.waitPakinLog.barcode"
- source="barcode"
- parse={v => v}
- />
- </Stack>
- <Stack direction='row' gap={2}>
- <NumberInput
- label="table.field.waitPakinLog.anfme"
- source="anfme"
- />
- </Stack>
- <Stack direction='row' gap={2}>
- <SelectInput
- label="table.field.waitPakinLog.ioStatus"
- source="ioStatus"
- choices={[
- { id: 0, name: '寰呭叆搴�' },
- { id: 1, name: ' 鍏ュ簱涓�' },
- ]}
- validate={required()}
- />
- </Stack>
-
+ <SimpleForm
+ shouldUnregister
+ warnWhenUnsavedChanges
+ toolbar={<FormToolbar />}
+ mode="onTouched"
+ defaultValues={{}}
+ // validate={(values) => { }}
+ >
+ <Grid container width={{ xs: '100%', xl: '80%' }} rowSpacing={3} columnSpacing={3}>
+ <Grid item xs={24} md={12}>
+ <Typography variant="h6" gutterBottom>
+ {translate('common.edit.title.main')}
+ </Typography>
+ <Stack direction='row' gap={2}>
+ <NumberInput
+ label="table.field.waitPakinLog.pakinId"
+ source="pakinId"
+ autoFocus
+ />
+ <TextInput
+ label="table.field.waitPakinLog.code"
+ source="code"
+ parse={v => v}
+ />
+ <TextInput
+ label="table.field.waitPakinLog.barcode"
+ source="barcode"
+ parse={v => v}
+ />
+ <NumberInput
+ label="table.field.waitPakinLog.anfme"
+ source="anfme"
+ />
+ <SelectInput
+ label="table.field.waitPakinLog.ioStatus"
+ source="ioStatus"
+ choices={[
+ { id: 0, name: '寰呭叆搴�' },
+ { id: 1, name: ' 鍏ュ簱涓�' },
+ ]}
+ validate={required()}
+ />
+ </Stack>
+ </Grid>
</Grid>
- <Grid item xs={12} md={4}>
- <Typography variant="h6" gutterBottom>
- {translate('common.edit.title.common')}
- </Typography>
- <StatusSelectInput />
- <Box mt="2em" />
- <MemoInput />
- </Grid>
- </Grid>
- </SimpleForm>
- </Edit >
+ </SimpleForm>
+ </Edit >
+ <WaitPakinItemLogList />
+ </>
)
}
diff --git a/rsf-admin/src/page/waitPakinLog/WaitPakinLogList.jsx b/rsf-admin/src/page/waitPakinLog/WaitPakinLogList.jsx
index e9cb3f8..c689002 100644
--- a/rsf-admin/src/page/waitPakinLog/WaitPakinLogList.jsx
+++ b/rsf-admin/src/page/waitPakinLog/WaitPakinLogList.jsx
@@ -34,13 +34,9 @@
} from 'react-admin';
import { Box, Typography, Card, Stack } from '@mui/material';
import { styled } from '@mui/material/styles';
-import WaitPakinLogCreate from "./WaitPakinLogCreate";
-import WaitPakinLogPanel from "./WaitPakinLogPanel";
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';
import * as Common from '@/utils/common';
@@ -86,7 +82,6 @@
const WaitPakinLogList = () => {
const translate = useTranslate();
-
const [createDialog, setCreateDialog] = useState(false);
const [drawerVal, setDrawerVal] = useState(false);
@@ -108,7 +103,6 @@
actions={(
<TopToolbar>
<FilterButton />
- {/* <MyCreateButton onClick={() => { setCreateDialog(true) }} /> */}
<SelectColumnsButton preferenceKey='waitPakinLog' />
<MyExportButton />
</TopToolbar>
@@ -117,9 +111,9 @@
>
<StyledDatagrid
preferenceKey='waitPakinLog'
- bulkActionButtons={() => <BulkDeleteButton mutationMode={OPERATE_MODE} />}
- rowClick={(id, resource, record) => false}
- expand={() => <WaitPakinLogPanel />}
+ bulkActionButtons={false}
+ rowClick={'edit'}
+ expand={false}
expandSingle={true}
omit={['id', 'createTime', 'createBy', 'memo']}
>
@@ -146,10 +140,6 @@
</WrapperField>
</StyledDatagrid>
</List>
- <WaitPakinLogCreate
- open={createDialog}
- setOpen={setCreateDialog}
- />
<PageDrawer
title='WaitPakinLog Detail'
drawerVal={drawerVal}
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 3d93a98..0229436 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
@@ -248,7 +248,7 @@
throw new CoolException("閫氱煡鍗曟槑缁嗕笉瀛樺湪锛侊紒");
}
if (Objects.isNull(dto.getReceiptQty()) || Double.compare(dto.getReceiptQty(), 0.0) == 0) {
- throw new CoolException("鏀惰揣鏁伴噺涓嶈兘涓洪浂锛侊紒");
+ throw new CoolException("鐗╂枡:" + dto.getMaktx() + "鏀惰揣鏁伴噺涓嶈兘涓洪浂锛侊紒");
}
Double itemRcptQty = dto.getReceiptQty() + orderItem.getQty();
orderItem.setQty(itemRcptQty)
@@ -291,7 +291,7 @@
.setWeight(dto.getWeigth())
.setStockUnit(dto.getStockUnit())
.setBatch(SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_RECEIPT_BATCH, dto))
- .setAnfme(itemRcptQty)
+ .setAnfme(dto.getReceiptQty())
.setSplrBatch(dto.getSplrBatch())
.setMatnrCode(matnr.getCode())
.setMatnrId(matnr.getId())
@@ -738,6 +738,7 @@
*/
@Override
public R getItemByContainer(Map<String, Object> params) {
+ //鑾峰彇缁勬嫋鏈敓鎴愪换鍔$殑缁勬嫋妗�
List<Short> asList = Arrays.asList(Short.valueOf(PakinIOStatus.PAKIN_IO_STATUS_DONE.val), Short.valueOf(PakinIOStatus.PAKIN_IO_STATUS_DONE.val));
WaitPakin waitPakin = waitPakinService.getOne(new LambdaQueryWrapper<WaitPakin>()
.eq(WaitPakin::getBarcode, params.get("barcode").toString())
@@ -756,11 +757,16 @@
.lambda()
.in(WarehouseAreasItem::getTrackCode, list)
.groupBy(WarehouseAreasItem::getSplrBatch,
- WarehouseAreasItem::getAsnId,
- WarehouseAreasItem::getAreaId,
- WarehouseAreasItem::getTrackCode,
- WarehouseAreasItem::getMatnrId);
- return R.ok(warehouseAreasItemService.list(queryWrapper));
+ WarehouseAreasItem::getTrackCode);
+ List<WarehouseAreasItem> warehouseAreasItems = warehouseAreasItemService.list(queryWrapper);
+ for (int i = 0; i < warehouseAreasItems.size(); i++) {
+ for (WaitPakinItem pakinItem : pakinItems) {
+ if (warehouseAreasItems.get(i).getTrackCode().equals(pakinItem.getTrackCode())) {
+ warehouseAreasItems.get(i).setAnfme(pakinItem.getAnfme());
+ }
+ }
+ }
+ return R.ok(warehouseAreasItems);
}
/**
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/WaitPakin.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/WaitPakin.java
index d5ae471..d4b1461 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/WaitPakin.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/WaitPakin.java
@@ -152,6 +152,10 @@
return "寰呭叆搴�";
case 1:
return " 鍏ュ簱涓�";
+ case 2:
+ return "浠诲姟鎵ц涓�";
+ case 3:
+ return "浠诲姟瀹屾垚";
default:
return String.valueOf(this.ioStatus);
}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/WarehouseAreasItemService.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/WarehouseAreasItemService.java
index 3018867..6870db3 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/WarehouseAreasItemService.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/WarehouseAreasItemService.java
@@ -1,12 +1,14 @@
package com.vincent.rsf.server.manager.service;
+import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.service.IService;
import com.vincent.rsf.server.manager.entity.WarehouseAreasItem;
+import org.apache.ibatis.annotations.Param;
import java.util.List;
-import java.util.Map;
public interface WarehouseAreasItemService extends IService<WarehouseAreasItem> {
List<WarehouseAreasItem> getList();
+
}
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 b50c28e..75bdb0e 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
@@ -1,6 +1,7 @@
package com.vincent.rsf.server.manager.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.vincent.rsf.framework.exception.CoolException;
import com.vincent.rsf.server.manager.controller.params.PakinItem;
@@ -13,15 +14,13 @@
import com.vincent.rsf.server.system.constant.SerialRuleCode;
import com.vincent.rsf.server.system.utils.SerialRuleUtils;
import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.parameters.P;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
+import java.util.*;
import java.util.stream.Collectors;
@Service("waitPakinService")
@@ -36,6 +35,8 @@
private WaitPakinService waitPakinService;
@Autowired
private WaitPakinItemService waitPakinItemService;
+ @Autowired
+ private WarehouseAreasItemService warehouseAreasItemService;
@Autowired
private LocService locService;
@@ -55,52 +56,73 @@
if (StringUtils.isBlank(waitPakin.getBarcode())) {
throw new CoolException("鍙傛暟閿欒锛氭墭鐩樼爜涓虹┖锛侊紒");
}
-
- List<WaitPakin> list = waitPakinService.list(new LambdaQueryWrapper<WaitPakin>().eq(WaitPakin::getBarcode, waitPakin.getBarcode()));
- if (!list.isEmpty()) {
- List<String> stringList = list.stream().map(WaitPakin::getCode).collect(Collectors.toList());
- String join = StringUtils.join(stringList, ",");
- throw new CoolException("鎷栫洏鐮侊細" + waitPakin.getBarcode() + "宸茶缁勬嫋鍗曪細" + join + "浣跨敤锛侊紒");
+ List<Short> asList = Arrays.asList(Short.valueOf(PakinIOStatus.PAKIN_IO_STATUS_DONE.val), Short.valueOf(PakinIOStatus.PAKIN_IO_STATUS_DONE.val));
+ WaitPakin list = waitPakinService.getOne(new LambdaQueryWrapper<WaitPakin>()
+ .notIn(WaitPakin::getIoStatus, asList)
+ .eq(WaitPakin::getBarcode, waitPakin.getBarcode()));
+ if (!Objects.isNull(list)) {
+ throw new CoolException("鎷栫洏鐮侊細" + waitPakin.getBarcode() + "宸茶缁勬嫋鍗曪細" + list.getCode() + "浣跨敤锛侊紒");
}
-
List<Loc> locs = locService.list(new LambdaQueryWrapper<Loc>().eq(Loc::getBarcode, waitPakin.getBarcode()));
if (!locs.isEmpty()) {
List<String> locCodes = locs.stream().map(Loc::getCode).collect(Collectors.toList());
String join = StringUtils.join(locCodes, ",");
throw new CoolException("鎷栫洏鐮侊細" + waitPakin.getBarcode() + "宸茶搴撲綅锛�" + join + "浣跨敤锛侊紒");
}
-
double sum = waitPakin.getItems().stream().mapToDouble(PakinItem::getReceiptQty).sum();
- WaitPakin pakin = new WaitPakin();
-
- String ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_WAIT_PAKIN_CODE, null);
- if (StringUtils.isBlank(ruleCode)) {
- throw new CoolException("缂栫爜瑙勫垯閿欒锛� 缂栫爜瑙勫垯銆孲YS_WAIT_PAKIN_CODE銆嶈鍒欐槸涓嶅瓨鍦�");
+ WaitPakin waitPakin1 = new WaitPakin();
+ WaitPakin pakin = waitPakinService.getOne(new LambdaQueryWrapper<WaitPakin>()
+ .in(WaitPakin::getIoStatus, asList)
+ .eq(WaitPakin::getBarcode, waitPakin.getBarcode()));
+ if (Objects.isNull(pakin)) {
+ String ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_WAIT_PAKIN_CODE, null);
+ if (StringUtils.isBlank(ruleCode)) {
+ throw new CoolException("缂栫爜瑙勫垯閿欒锛� 缂栫爜瑙勫垯銆孲YS_WAIT_PAKIN_CODE銆嶈鍒欐槸涓嶅瓨鍦�");
+ }
+ waitPakin1.setCode(ruleCode)
+ //鐘舵�佷慨鏀逛负鍏ュ簱涓�
+ .setIoStatus(Short.parseShort(PakinIOStatus.PAKIN_IO_STATUS_DONE.val))
+ .setAnfme(sum)
+ .setBarcode(waitPakin.getBarcode());
+ if (!this.save(waitPakin1)) {
+ throw new CoolException("涓诲崟淇濆瓨澶辫触锛侊紒");
+ }
+ } else {
+ BeanUtils.copyProperties(pakin, waitPakin1);
+ waitPakin1.setAnfme(sum);
+ if (!this.saveOrUpdate(waitPakin1)) {
+ throw new CoolException("涓诲崟淇敼澶辫触锛侊紒");
+ }
}
- pakin.setCode(ruleCode)
- //鐘舵�佷慨鏀逛负鍏ュ簱涓�
- .setIoStatus(Short.parseShort(PakinIOStatus.PAKIN_IO_STATUS_DONE.val))
- .setAnfme(sum)
- .setBarcode(waitPakin.getBarcode());
- if (!this.save(pakin)) {
- throw new CoolException("涓诲崟淇濆瓨澶辫触锛侊紒");
- }
-
/**鐗╂枡璺熻釜鐮�*/
List<String> tracks = waitPakin.getItems().stream().map(PakinItem::getTrackCode).collect(Collectors.toList());
-
- List<AsnOrderItem> asnOrderItems = asnOrderItemService.list(new LambdaQueryWrapper<AsnOrderItem>()
- .in(AsnOrderItem::getTrackCode, tracks));
- if (Objects.isNull(asnOrderItems) || asnOrderItems.isEmpty()) {
- throw new CoolException("鍗曟嵁涓嶅瓨鍦紒锛�");
+ List<WaitPakinItem> pakinItems = waitPakinItemService.list(new LambdaQueryWrapper<WaitPakinItem>()
+ .eq(WaitPakinItem::getPakinId, waitPakin1.getId())
+ .in(WaitPakinItem::getTrackCode, tracks));
+ if (!pakinItems.isEmpty()) {
+ if (!waitPakinItemService.remove(new LambdaQueryWrapper<WaitPakinItem>()
+ .eq(WaitPakinItem::getPakinId, waitPakin1.getId())
+ .in(WaitPakinItem::getTrackCode, tracks))) {
+ throw new CoolException("鍘熷崟鎹竻闄ゅけ璐ワ紒锛�");
+ }
}
+ 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()
+ .in(WarehouseAreasItem::getTrackCode, tracks)
+ .groupBy(WarehouseAreasItem::getSplrBatch,
+ WarehouseAreasItem::getTrackCode);
+ List<WarehouseAreasItem> warehouseAreasItems = warehouseAreasItemService.list(queryWrapper);
+ if (Objects.isNull(warehouseAreasItems) || warehouseAreasItems.isEmpty()) {
+ throw new CoolException("鐗╂枡鏈�佽嚦鏀惰揣鍖猴紒锛�");
+ }
List<WaitPakinItem> items = new ArrayList<>();
- for (AsnOrderItem item : asnOrderItems) {
+ for (WarehouseAreasItem item : warehouseAreasItems) {
WaitPakinItem pakinItem = new WaitPakinItem();
pakinItem.setAnfme(item.getAnfme())
- .setPakinId(pakin.getId())
+ .setPakinId(waitPakin1.getId())
.setAsnId(item.getAsnId())
.setAsnCode(item.getAsnCode())
.setAsnItemId(item.getId())
@@ -112,9 +134,10 @@
.setMatnrCode(item.getMatnrCode());
for (PakinItem waitPakinItem : waitPakin.getItems()) {
if (waitPakinItem.getTrackCode().equals(item.getTrackCode())) {
-// Double v = item.getWorkQty() + waitPakinItem.getReceiptQty();
+ if (waitPakinItem.getReceiptQty() > item.getAnfme()) {
+ throw new CoolException("缁勬嫋鏁伴噺涓嶈兘澶т簬鏀惰揣鏁伴噺锛侊紒");
+ }
pakinItem
- .setWorkQty(waitPakinItem.getReceiptQty())
.setAnfme(waitPakinItem.getReceiptQty())
.setTrackCode(waitPakinItem.getTrackCode());
/**鏇存柊鍗曟嵁鎵ц涓簱瀛�*/
@@ -127,9 +150,14 @@
}
items.add(pakinItem);
}
+ double sum1 = items.stream().mapToDouble(WaitPakinItem::getAnfme).sum();
if (!waitPakinItemService.saveBatch(items)) {
throw new CoolException("缁勬嫋鏄庣粏淇濆瓨澶辫触锛侊紒");
}
+ waitPakin1.setAnfme(sum1);
+ if (!this.updateById(waitPakin1)) {
+ throw new CoolException("缁勬嫋鏁伴噺淇敼澶辫触锛侊紒");
+ }
return pakin;
}
--
Gitblit v1.9.1