From ed08477d187fe143566c9baeeef365b1eacbdfd4 Mon Sep 17 00:00:00 2001 From: skyouc Date: 星期四, 24 七月 2025 16:36:54 +0800 Subject: [PATCH] 新增调拔单明细功能 --- rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TransferItemServiceImpl.java | 12 rsf-server/src/main/java/com/vincent/rsf/server/common/CodeBuilder.java | 4 rsf-server/src/main/java/com/vincent/rsf/server/manager/mapper/TransferItemMapper.java | 12 rsf-server/src/main/resources/mapper/manager/TransferItemMapper.xml | 5 rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/TransferItemController.java | 110 +++++ rsf-server/src/main/java/transfer.sql | 33 + rsf-server/src/main/java/com/vincent/rsf/server/manager/service/TransferItemService.java | 8 rsf-admin/src/page/orders/transfer/TransferItemEdit.jsx | 203 +++++++++ rsf-admin/src/i18n/zh.js | 22 + rsf-admin/src/page/orders/transfer/TransferEdit.jsx | 291 ++++++------- rsf-admin/src/page/orders/transfer/TransferItemList.jsx | 177 ++++++++ rsf-admin/src/i18n/en.js | 21 + rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/TransferItem.java | 314 ++++++++++++++ rsf-server/src/main/java/transferItem.sql | 39 + 14 files changed, 1,094 insertions(+), 157 deletions(-) diff --git a/rsf-admin/src/i18n/en.js b/rsf-admin/src/i18n/en.js index 38765d7..bd7b5ab 100644 --- a/rsf-admin/src/i18n/en.js +++ b/rsf-admin/src/i18n/en.js @@ -670,6 +670,27 @@ tarAreaName: "tarAreaName", }, + transferItem: { + transferId: "transferId", + transferCode: "transferCode", + matnrId: "matnrId", + maktx: "maktx", + matnrCode: "matnrCode", + unit: "unit", + anfme: "anfme", + qty: "qty", + workQty: "workQty", + batch: "batch", + splrId: "splrId", + spec: "spec", + model: "model", + fieldsIndex: "fieldsIndex", + platItemId: "platItemId", + platOrderCode: "platOrderCode", + platWorkCode: "platWorkCode", + projectCode: "projectCode", + }, + checkDiffItem: { checkId: "checkId", orderCode: "orderCode", diff --git a/rsf-admin/src/i18n/zh.js b/rsf-admin/src/i18n/zh.js index 6211ee3..fdcbf80 100644 --- a/rsf-admin/src/i18n/zh.js +++ b/rsf-admin/src/i18n/zh.js @@ -700,6 +700,28 @@ tarAreaId: "鐩爣搴撳尯", tarAreaName: "鐩爣搴撳尯", }, + + transferItem: { + transferId: "璋冩嫈鍗旾D", + transferCode: "璋冩嫈鍗�", + matnrId: "鐗╂枡ID", + maktx: "鐗╂枡鍚嶇О", + matnrCode: "鐗╂枡缂栫爜", + unit: "鍗曚綅", + anfme: "鏁伴噺", + qty: "瀹屾垚鏁伴噺", + workQty: "鎵ц鏁伴噺", + batch: "鎵规", + splrId: "渚涘簲鍟�", + spec: "瑙勬牸", + model: "鍨嬪彿", + fieldsIndex: "瀛楁绱㈠紩", + platOrderCode: "瀹㈠崟鍙�", + platWorkCode: "宸ュ崟鍙�", + projectCode: "椤圭洰鍗曞彿", + }, + + checkDiffItem: { checkId: "鐩樼偣鍗旾D", orderCode: "鐩樼偣鍗曞彿", diff --git a/rsf-admin/src/page/orders/transfer/TransferEdit.jsx b/rsf-admin/src/page/orders/transfer/TransferEdit.jsx index 2cd2003..fedacf5 100644 --- a/rsf-admin/src/page/orders/transfer/TransferEdit.jsx +++ b/rsf-admin/src/page/orders/transfer/TransferEdit.jsx @@ -1,171 +1,152 @@ 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'; + 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.js'; -import { EDIT_MODE, REFERENCE_INPUT_PAGESIZE } from '@/config/setting.js'; +import { Stack, Grid, Box, Typography } from "@mui/material"; +import * as Common from "@/utils/common.js"; +import { EDIT_MODE, REFERENCE_INPUT_PAGESIZE } from "@/config/setting.js"; import EditBaseAside from "../../components/EditBaseAside.jsx"; import CustomerTopToolBar from "../../components/EditTopToolBar.jsx"; import MemoInput from "../../components/MemoInput.jsx"; import StatusSelectInput from "../../components/StatusSelectInput.jsx"; +import TransferItemList from "./TransferItemList.jsx"; const FormToolbar = () => { - const { getValues } = useFormContext(); + const { getValues } = useFormContext(); - return ( - <Toolbar sx={{ justifyContent: 'space-between' }}> - <SaveButton /> - <DeleteButton mutationMode="optimistic" /> - </Toolbar> - ) -} + return ( + <Toolbar sx={{ justifyContent: "space-between" }}> + <SaveButton /> + <DeleteButton mutationMode="optimistic" /> + </Toolbar> + ); +}; const TransferEdit = () => { - const translate = useTranslate(); + const translate = useTranslate(); - return ( - <Edit - redirect="list" - mutationMode={EDIT_MODE} - actions={<CustomerTopToolBar />} - aside={<EditBaseAside />} + return ( + <> + <Edit + redirect="list" + mutationMode={EDIT_MODE} + actions={<CustomerTopToolBar />} + aside={<EditBaseAside />} + > + <SimpleForm + shouldUnregister + warnWhenUnsavedChanges + toolbar={<FormToolbar />} + mode="onTouched" + defaultValues={{}} + // validate={(values) => { }} > - <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.transfer.code" - source="code" - parse={v => v} - autoFocus - /> - </Stack> - <Stack direction='row' gap={2}> - <NumberInput - label="table.field.transfer.type" - source="type" - /> - </Stack> - <Stack direction='row' gap={2}> - <SelectInput - label="table.field.transfer.source" - source="source" - choices={[ - { id: 1, name: 'ERP绯荤粺' }, - { id: 2, name: 'WMS绯荤粺鐢熸垚' }, - { id: 3, name: 'EXCEL瀵煎叆 ' }, - { id: 4, name: 'QMS绯荤粺' }, - ]} - /> - </Stack> - <Stack direction='row' gap={2}> - <SelectInput - label="table.field.transfer.exceStatus" - source="exceStatus" - choices={[ - { id: 0, name: '鏈墽琛�' }, - { id: 1, name: '鎵ц涓�' }, - { id: 2, name: '鎵ц瀹屾垚' }, - ]} - /> - </Stack> - <Stack direction='row' gap={2}> - <NumberInput - label="table.field.transfer.orgWareId" - source="orgWareId" - /> - </Stack> - <Stack direction='row' gap={2}> - <TextInput - label="table.field.transfer.orgWareName" - source="orgWareName" - parse={v => v} - /> - </Stack> - <Stack direction='row' gap={2}> - <NumberInput - label="table.field.transfer.tarWareId" - source="tarWareId" - /> - </Stack> - <Stack direction='row' gap={2}> - <TextInput - label="table.field.transfer.tarWareName" - source="tarWareName" - parse={v => v} - /> - </Stack> - <Stack direction='row' gap={2}> - <NumberInput - label="table.field.transfer.orgAreaId" - source="orgAreaId" - /> - </Stack> - <Stack direction='row' gap={2}> - <TextInput - label="table.field.transfer.orgAreaName" - source="orgAreaName" - parse={v => v} - /> - </Stack> - <Stack direction='row' gap={2}> - <NumberInput - label="table.field.transfer.tarAreaId" - source="tarAreaId" - /> - </Stack> - <Stack direction='row' gap={2}> - <TextInput - label="table.field.transfer.tarAreaName" - source="tarAreaName" - 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 > - ) -} + <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.transfer.code" + source="code" + parse={(v) => v} + autoFocus + /> + </Stack> + <Stack direction="row" gap={2}> + <NumberInput label="table.field.transfer.type" source="type" /> + <SelectInput + label="table.field.transfer.source" + source="source" + choices={[ + { id: 1, name: "ERP绯荤粺" }, + { id: 2, name: "WMS绯荤粺鐢熸垚" }, + { id: 3, name: "EXCEL瀵煎叆 " }, + { id: 4, name: "QMS绯荤粺" }, + ]} + /> + <SelectInput + label="table.field.transfer.exceStatus" + source="exceStatus" + choices={[ + { id: 0, name: "鏈墽琛�" }, + { id: 1, name: "鎵ц涓�" }, + { id: 2, name: "鎵ц瀹屾垚" }, + ]} + /> + </Stack> + <Stack direction="row" gap={2}> + <NumberInput + label="table.field.transfer.orgWareId" + source="orgWareId" + /> + <TextInput + label="table.field.transfer.orgWareName" + source="orgWareName" + parse={(v) => v} + /> + <NumberInput + label="table.field.transfer.tarWareId" + source="tarWareId" + /> + <TextInput + label="table.field.transfer.tarWareName" + source="tarWareName" + parse={(v) => v} + /> + </Stack> + <Stack direction="row" gap={2}> + <NumberInput + label="table.field.transfer.orgAreaId" + source="orgAreaId" + /> + <TextInput + label="table.field.transfer.orgAreaName" + source="orgAreaName" + parse={(v) => v} + /> + <NumberInput + label="table.field.transfer.tarAreaId" + source="tarAreaId" + /> + <TextInput + label="table.field.transfer.tarAreaName" + source="tarAreaName" + parse={(v) => v} + /> + </Stack> + </Grid> + </Grid> + </SimpleForm> + </Edit> + <TransferItemList /> + </> + ); +}; export default TransferEdit; diff --git a/rsf-admin/src/page/orders/transfer/TransferItemEdit.jsx b/rsf-admin/src/page/orders/transfer/TransferItemEdit.jsx new file mode 100644 index 0000000..3bde7c2 --- /dev/null +++ b/rsf-admin/src/page/orders/transfer/TransferItemEdit.jsx @@ -0,0 +1,203 @@ +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 TransferItemEdit = () => { + 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}> + <NumberInput + label="table.field.transferItem.transferId" + source="transferId" + autoFocus + /> + </Stack> + <Stack direction='row' gap={2}> + <TextInput + label="table.field.transferItem.transferCode" + source="transferCode" + parse={v => v} + /> + </Stack> + <Stack direction='row' gap={2}> + <NumberInput + label="table.field.transferItem.matnrId" + source="matnrId" + /> + </Stack> + <Stack direction='row' gap={2}> + <TextInput + label="table.field.transferItem.maktx" + source="maktx" + parse={v => v} + /> + </Stack> + <Stack direction='row' gap={2}> + <TextInput + label="table.field.transferItem.matnrCode" + source="matnrCode" + parse={v => v} + /> + </Stack> + <Stack direction='row' gap={2}> + <TextInput + label="table.field.transferItem.unit" + source="unit" + parse={v => v} + /> + </Stack> + <Stack direction='row' gap={2}> + <NumberInput + label="table.field.transferItem.anfme" + source="anfme" + /> + </Stack> + <Stack direction='row' gap={2}> + <NumberInput + label="table.field.transferItem.qty" + source="qty" + /> + </Stack> + <Stack direction='row' gap={2}> + <NumberInput + label="table.field.transferItem.workQty" + source="workQty" + /> + </Stack> + <Stack direction='row' gap={2}> + <TextInput + label="table.field.transferItem.batch" + source="batch" + parse={v => v} + /> + </Stack> + <Stack direction='row' gap={2}> + <NumberInput + label="table.field.transferItem.splrId" + source="splrId" + /> + </Stack> + <Stack direction='row' gap={2}> + <TextInput + label="table.field.transferItem.spec" + source="spec" + parse={v => v} + /> + </Stack> + <Stack direction='row' gap={2}> + <TextInput + label="table.field.transferItem.model" + source="model" + parse={v => v} + /> + </Stack> + <Stack direction='row' gap={2}> + <TextInput + label="table.field.transferItem.fieldsIndex" + source="fieldsIndex" + parse={v => v} + /> + </Stack> + <Stack direction='row' gap={2}> + <TextInput + label="table.field.transferItem.platItemId" + source="platItemId" + parse={v => v} + /> + </Stack> + <Stack direction='row' gap={2}> + <TextInput + label="table.field.transferItem.platOrderCode" + source="platOrderCode" + parse={v => v} + /> + </Stack> + <Stack direction='row' gap={2}> + <TextInput + label="table.field.transferItem.platWorkCode" + source="platWorkCode" + parse={v => v} + /> + </Stack> + <Stack direction='row' gap={2}> + <TextInput + label="table.field.transferItem.projectCode" + source="projectCode" + 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 TransferItemEdit; diff --git a/rsf-admin/src/page/orders/transfer/TransferItemList.jsx b/rsf-admin/src/page/orders/transfer/TransferItemList.jsx new file mode 100644 index 0000000..db16ab8 --- /dev/null +++ b/rsf-admin/src/page/orders/transfer/TransferItemList.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, +} from 'react-admin'; +import { Box, Typography, Card, Stack } from '@mui/material'; +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"; +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" alwaysOn />, + <DateInput label='common.time.before' source="timeEnd" alwaysOn />, + <NumberInput source="transferId" label="table.field.transferItem.transferId" />, + <TextInput source="transferCode" label="table.field.transferItem.transferCode" />, + <NumberInput source="matnrId" label="table.field.transferItem.matnrId" />, + <TextInput source="maktx" label="table.field.transferItem.maktx" />, + <TextInput source="matnrCode" label="table.field.transferItem.matnrCode" />, + <TextInput source="unit" label="table.field.transferItem.unit" />, + <NumberInput source="anfme" label="table.field.transferItem.anfme" />, + <NumberInput source="qty" label="table.field.transferItem.qty" />, + <NumberInput source="workQty" label="table.field.transferItem.workQty" />, + <TextInput source="batch" label="table.field.transferItem.batch" />, + <NumberInput source="splrId" label="table.field.transferItem.splrId" />, + <TextInput source="spec" label="table.field.transferItem.spec" />, + <TextInput source="model" label="table.field.transferItem.model" />, + <TextInput source="fieldsIndex" label="table.field.transferItem.fieldsIndex" />, + <TextInput source="platItemId" label="table.field.transferItem.platItemId" />, + <TextInput source="platOrderCode" label="table.field.transferItem.platOrderCode" />, + <TextInput source="platWorkCode" label="table.field.transferItem.platWorkCode" />, + <TextInput source="projectCode" label="table.field.transferItem.projectCode" />, + <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 TransferItemList = () => { + const translate = useTranslate(); + + const [createDialog, setCreateDialog] = useState(false); + const [drawerVal, setDrawerVal] = useState(false); + + return ( + <Box display="flex"> + <List + sx={{ + flexGrow: 1, + transition: (theme) => + theme.transitions.create(['all'], { + duration: theme.transitions.duration.enteringScreen, + }), + marginRight: !!drawerVal ? `${PAGE_DRAWER_WIDTH}px` : 0, + }} + title={"menu.transferItem"} + empty={<EmptyData onClick={() => { setCreateDialog(true) }} />} + filters={filters} + sort={{ field: "create_time", order: "desc" }} + actions={( + <TopToolbar> + <FilterButton /> + <MyCreateButton onClick={() => { setCreateDialog(true) }} /> + <SelectColumnsButton preferenceKey='transferItem' /> + <MyExportButton /> + </TopToolbar> + )} + perPage={DEFAULT_PAGE_SIZE} + > + <StyledDatagrid + preferenceKey='transferItem' + bulkActionButtons={() => <BulkDeleteButton mutationMode={OPERATE_MODE} />} + rowClick={(id, resource, record) => false} + expand={false} + expandSingle={false} + omit={['id', 'createTime', 'createBy', 'memo']} + > + <NumberField source="id" /> + <NumberField source="transferId" label="table.field.transferItem.transferId" /> + <TextField source="transferCode" label="table.field.transferItem.transferCode" /> + <NumberField source="matnrId" label="table.field.transferItem.matnrId" /> + <TextField source="maktx" label="table.field.transferItem.maktx" /> + <TextField source="matnrCode" label="table.field.transferItem.matnrCode" /> + <TextField source="unit" label="table.field.transferItem.unit" /> + <NumberField source="anfme" label="table.field.transferItem.anfme" /> + <NumberField source="qty" label="table.field.transferItem.qty" /> + <NumberField source="workQty" label="table.field.transferItem.workQty" /> + <TextField source="batch" label="table.field.transferItem.batch" /> + <NumberField source="splrId" label="table.field.transferItem.splrId" /> + <TextField source="spec" label="table.field.transferItem.spec" /> + <TextField source="model" label="table.field.transferItem.model" /> + <TextField source="fieldsIndex" label="table.field.transferItem.fieldsIndex" /> + <TextField source="platItemId" label="table.field.transferItem.platItemId" /> + <TextField source="platOrderCode" label="table.field.transferItem.platOrderCode" /> + <TextField source="platWorkCode" label="table.field.transferItem.platWorkCode" /> + <TextField source="projectCode" label="table.field.transferItem.projectCode" /> + + <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> + <PageDrawer + title='TransferItem Detail' + drawerVal={drawerVal} + setDrawerVal={setDrawerVal} + > + </PageDrawer> + </Box> + ) +} + +export default TransferItemList; diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/common/CodeBuilder.java b/rsf-server/src/main/java/com/vincent/rsf/server/common/CodeBuilder.java index 8c5663c..f29ee02 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/common/CodeBuilder.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/common/CodeBuilder.java @@ -22,8 +22,8 @@ // generator.username="sa"; // generator.password="Zoneyung@zy56$"; - generator.table = "man_transfer"; - generator.tableDesc = "璋冩嫈鍗�"; + generator.table = "man_transfer_item"; + generator.tableDesc = "璋冩嫈鍗曟槑缁�"; generator.packagePath = "com.vincent.rsf.server.manager"; generator.build(); diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/TransferItemController.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/TransferItemController.java new file mode 100644 index 0000000..d80f348 --- /dev/null +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/TransferItemController.java @@ -0,0 +1,110 @@ +package com.vincent.rsf.server.manager.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.vincent.rsf.framework.common.Cools; +import com.vincent.rsf.framework.common.R; +import com.vincent.rsf.server.common.utils.ExcelUtil; +import com.vincent.rsf.server.common.annotation.OperationLog; +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.entity.TransferItem; +import com.vincent.rsf.server.manager.service.TransferItemService; +import com.vincent.rsf.server.system.controller.BaseController; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.util.*; + +@RestController +public class TransferItemController extends BaseController { + + @Autowired + private TransferItemService transferItemService; + + @PreAuthorize("hasAuthority('manager:transfer:list')") + @PostMapping("/transferItem/page") + public R page(@RequestBody Map<String, Object> map) { + BaseParam baseParam = buildParam(map, BaseParam.class); + PageParam<TransferItem, BaseParam> pageParam = new PageParam<>(baseParam, TransferItem.class); + return R.ok().add(transferItemService.page(pageParam, pageParam.buildWrapper(true))); + } + + @PreAuthorize("hasAuthority('manager:transfer:list')") + @PostMapping("/transferItem/list") + public R list(@RequestBody Map<String, Object> map) { + return R.ok().add(transferItemService.list()); + } + + @PreAuthorize("hasAuthority('manager:transfer:list')") + @PostMapping({"/transferItem/many/{ids}", "/transferItems/many/{ids}"}) + public R many(@PathVariable Long[] ids) { + return R.ok().add(transferItemService.listByIds(Arrays.asList(ids))); + } + + @PreAuthorize("hasAuthority('manager:transfer:list')") + @GetMapping("/transferItem/{id}") + public R get(@PathVariable("id") Long id) { + return R.ok().add(transferItemService.getById(id)); + } + + @PreAuthorize("hasAuthority('manager:transfer:save')") + @OperationLog("Create 璋冩嫈鍗曟槑缁�") + @PostMapping("/transferItem/save") + public R save(@RequestBody TransferItem transferItem) { + transferItem.setCreateBy(getLoginUserId()); + transferItem.setCreateTime(new Date()); + transferItem.setUpdateBy(getLoginUserId()); + transferItem.setUpdateTime(new Date()); + if (!transferItemService.save(transferItem)) { + return R.error("Save Fail"); + } + return R.ok("Save Success").add(transferItem); + } + + @PreAuthorize("hasAuthority('manager:transfer:update')") + @OperationLog("Update 璋冩嫈鍗曟槑缁�") + @PostMapping("/transferItem/update") + public R update(@RequestBody TransferItem transferItem) { + transferItem.setUpdateBy(getLoginUserId()); + transferItem.setUpdateTime(new Date()); + if (!transferItemService.updateById(transferItem)) { + return R.error("Update Fail"); + } + return R.ok("Update Success").add(transferItem); + } + + @PreAuthorize("hasAuthority('manager:transfer:remove')") + @OperationLog("Delete 璋冩嫈鍗曟槑缁�") + @PostMapping("/transferItem/remove/{ids}") + public R remove(@PathVariable Long[] ids) { + if (!transferItemService.removeByIds(Arrays.asList(ids))) { + return R.error("Delete Fail"); + } + return R.ok("Delete Success").add(ids); + } + + @PreAuthorize("hasAuthority('manager:transfer:list')") + @PostMapping("/transferItem/query") + public R query(@RequestParam(required = false) String condition) { + List<KeyValVo> vos = new ArrayList<>(); + LambdaQueryWrapper<TransferItem> wrapper = new LambdaQueryWrapper<>(); + if (!Cools.isEmpty(condition)) { + wrapper.like(TransferItem::getId, condition); + } + transferItemService.page(new Page<>(1, 30), wrapper).getRecords().forEach( + item -> vos.add(new KeyValVo(item.getId(), item.getId())) + ); + return R.ok().add(vos); + } + + @PreAuthorize("hasAuthority('manager:transfer:list')") + @PostMapping("/transferItem/export") + public void export(@RequestBody Map<String, Object> map, HttpServletResponse response) throws Exception { + ExcelUtil.build(ExcelUtil.create(transferItemService.list(), TransferItem.class), response); + } + +} diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/TransferItem.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/TransferItem.java new file mode 100644 index 0000000..e9127c3 --- /dev/null +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/TransferItem.java @@ -0,0 +1,314 @@ +package com.vincent.rsf.server.manager.entity; + +import com.baomidou.mybatisplus.annotation.TableLogic; +import java.text.SimpleDateFormat; +import java.util.Date; +import org.springframework.format.annotation.DateTimeFormat; +import java.text.SimpleDateFormat; +import java.util.Date; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableLogic; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import com.vincent.rsf.framework.common.Cools; +import com.vincent.rsf.framework.common.SpringUtils; +import com.vincent.rsf.server.system.service.UserService; +import com.vincent.rsf.server.system.entity.User; +import java.io.Serializable; +import java.util.Date; + +@Data +@TableName("man_transfer_item") +public class TransferItem implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @ApiModelProperty(value= "ID") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + /** + * 璋冩嫈鍗旾D + */ + @ApiModelProperty(value= "璋冩嫈鍗旾D") + private Long transferId; + + /** + * 璋冩嫈鍗曞彿 + */ + @ApiModelProperty(value= "璋冩嫈鍗曞彿") + private String transferCode; + + /** + * 鐗╂枡ID + */ + @ApiModelProperty(value= "鐗╂枡ID") + private Long matnrId; + + /** + * 鐗╂枡鍚嶇О + */ + @ApiModelProperty(value= "鐗╂枡鍚嶇О") + private String maktx; + + /** + * 鐗╂枡缂栫爜 + */ + @ApiModelProperty(value= "鐗╂枡缂栫爜") + private String matnrCode; + + /** + * 搴撳瓨鍗曚綅 + */ + @ApiModelProperty(value= "搴撳瓨鍗曚綅") + private String unit; + + /** + * 鏁伴噺 + */ + @ApiModelProperty(value= "鏁伴噺") + private Double anfme; + + /** + * 瀹屾垚鏁伴噺 + */ + @ApiModelProperty(value= "瀹屾垚鏁伴噺") + private Double qty; + + /** + * 鎵ц鏁伴噺 + */ + @ApiModelProperty(value= "鎵ц鏁伴噺 ") + private Double workQty; + + /** + * 渚涘簲鍟嗘壒娆� + */ + @ApiModelProperty(value= "渚涘簲鍟嗘壒娆�") + private String batch; + + /** + * 渚涘簲鍟咺D + */ + @ApiModelProperty(value= "渚涘簲鍟咺D") + private Long splrId; + + /** + * 瑙勬牸 + */ + @ApiModelProperty(value= "瑙勬牸") + private String spec; + + /** + * 鍨嬪彿 + */ + @ApiModelProperty(value= "鍨嬪彿") + private String model; + + /** + * 瀛楁绱㈠紩 + */ + @ApiModelProperty(value= "瀛楁绱㈠紩") + private String fieldsIndex; + + /** + * 骞冲彴ID(琛屽彿) + */ + @ApiModelProperty(value= "骞冲彴ID(琛屽彿)") + private String platItemId; + + /** + * 瀹㈡埛璁㈠崟鍙� + */ + @ApiModelProperty(value= "瀹㈡埛璁㈠崟鍙�") + private String platOrderCode; + + /** + * 宸ュ崟鍙� + */ + @ApiModelProperty(value= "宸ュ崟鍙�") + private String platWorkCode; + + /** + * 椤圭洰鍙� + */ + @ApiModelProperty(value= "椤圭洰鍙�") + private String projectCode; + + /** + * 鐘舵�� 1: 姝e父 0: 鍐荤粨 + */ + @ApiModelProperty(value= "鐘舵�� 1: 姝e父 0: 鍐荤粨 ") + private Integer status; + + /** + * 鏄惁鍒犻櫎 1: 鏄� 0: 鍚� + */ + @ApiModelProperty(value= "鏄惁鍒犻櫎 1: 鏄� 0: 鍚� ") + @TableLogic + private Integer deleted; + + /** + * 绉熸埛 + */ + @ApiModelProperty(value= "绉熸埛") + private Integer tenantId; + + /** + * 娣诲姞浜哄憳 + */ + @ApiModelProperty(value= "娣诲姞浜哄憳") + private Long createBy; + + /** + * 娣诲姞鏃堕棿 + */ + @ApiModelProperty(value= "娣诲姞鏃堕棿") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + private Date createTime; + + /** + * 淇敼浜哄憳 + */ + @ApiModelProperty(value= "淇敼浜哄憳") + private Long updateBy; + + /** + * 淇敼鏃堕棿 + */ + @ApiModelProperty(value= "淇敼鏃堕棿") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + private Date updateTime; + + /** + * 澶囨敞 + */ + @ApiModelProperty(value= "澶囨敞") + private String memo; + + public TransferItem() {} + + public TransferItem(Long transferId,String transferCode,Long matnrId,String maktx,String matnrCode,String unit,Double anfme,Double qty,Double workQty,String batch,Long splrId,String spec,String model,String fieldsIndex,String platItemId,String platOrderCode,String platWorkCode,String projectCode,Integer status,Integer deleted,Integer tenantId,Long createBy,Date createTime,Long updateBy,Date updateTime,String memo) { + this.transferId = transferId; + this.transferCode = transferCode; + this.matnrId = matnrId; + this.maktx = maktx; + this.matnrCode = matnrCode; + this.unit = unit; + this.anfme = anfme; + this.qty = qty; + this.workQty = workQty; + this.batch = batch; + this.splrId = splrId; + this.spec = spec; + this.model = model; + this.fieldsIndex = fieldsIndex; + this.platItemId = platItemId; + this.platOrderCode = platOrderCode; + this.platWorkCode = platWorkCode; + this.projectCode = projectCode; + this.status = status; + this.deleted = deleted; + this.tenantId = tenantId; + this.createBy = createBy; + this.createTime = createTime; + this.updateBy = updateBy; + this.updateTime = updateTime; + this.memo = memo; + } + +// TransferItem transferItem = new TransferItem( +// null, // 璋冩嫈鍗旾D +// null, // 璋冩嫈鍗曞彿 +// null, // 鐗╂枡ID +// null, // 鐗╂枡鍚嶇О +// null, // 鐗╂枡缂栫爜 +// null, // 搴撳瓨鍗曚綅 +// null, // 鏁伴噺 +// null, // 瀹屾垚鏁伴噺 +// null, // 鎵ц鏁伴噺 +// null, // 渚涘簲鍟嗘壒娆� +// null, // 渚涘簲鍟咺D +// null, // 瑙勬牸 +// null, // 鍨嬪彿 +// null, // 瀛楁绱㈠紩 +// null, // 骞冲彴ID(琛屽彿) +// null, // 瀹㈡埛璁㈠崟鍙� +// null, // 宸ュ崟鍙� +// null, // 椤圭洰鍙� +// null, // 鐘舵�乕闈炵┖] +// null, // 鏄惁鍒犻櫎[闈炵┖] +// null, // 绉熸埛 +// null, // 娣诲姞浜哄憳 +// null, // 娣诲姞鏃堕棿[闈炵┖] +// null, // 淇敼浜哄憳 +// null, // 淇敼鏃堕棿[闈炵┖] +// null // 澶囨敞 +// ); + + public String getStatus$(){ + if (null == this.status){ return null; } + switch (this.status){ + case 1: + return "姝e父"; + case 0: + return "鍐荤粨"; + default: + return String.valueOf(this.status); + } + } + + public String getCreateBy$(){ + UserService service = SpringUtils.getBean(UserService.class); + User user = service.getById(this.createBy); + if (!Cools.isEmpty(user)){ + return String.valueOf(user.getNickname()); + } + return null; + } + + public String getCreateTime$(){ + if (Cools.isEmpty(this.createTime)){ + return ""; + } + return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.createTime); + } + + public String getUpdateBy$(){ + UserService service = SpringUtils.getBean(UserService.class); + User user = service.getById(this.updateBy); + if (!Cools.isEmpty(user)){ + return String.valueOf(user.getNickname()); + } + return null; + } + + public String getUpdateTime$(){ + if (Cools.isEmpty(this.updateTime)){ + return ""; + } + return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.updateTime); + } + + + + public Boolean getStatusBool(){ + if (null == this.status){ return null; } + switch (this.status){ + case 1: + return true; + case 0: + return false; + default: + return null; + } + } + +} diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/mapper/TransferItemMapper.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/mapper/TransferItemMapper.java new file mode 100644 index 0000000..6b4f93b --- /dev/null +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/mapper/TransferItemMapper.java @@ -0,0 +1,12 @@ +package com.vincent.rsf.server.manager.mapper; + +import com.vincent.rsf.server.manager.entity.TransferItem; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; +import org.springframework.stereotype.Repository; + +@Mapper +@Repository +public interface TransferItemMapper extends BaseMapper<TransferItem> { + +} diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/TransferItemService.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/TransferItemService.java new file mode 100644 index 0000000..b61038a --- /dev/null +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/TransferItemService.java @@ -0,0 +1,8 @@ +package com.vincent.rsf.server.manager.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.vincent.rsf.server.manager.entity.TransferItem; + +public interface TransferItemService extends IService<TransferItem> { + +} diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TransferItemServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TransferItemServiceImpl.java new file mode 100644 index 0000000..094d00f --- /dev/null +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TransferItemServiceImpl.java @@ -0,0 +1,12 @@ +package com.vincent.rsf.server.manager.service.impl; + +import com.vincent.rsf.server.manager.mapper.TransferItemMapper; +import com.vincent.rsf.server.manager.entity.TransferItem; +import com.vincent.rsf.server.manager.service.TransferItemService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +@Service("transferItemService") +public class TransferItemServiceImpl extends ServiceImpl<TransferItemMapper, TransferItem> implements TransferItemService { + +} diff --git a/rsf-server/src/main/java/transfer.sql b/rsf-server/src/main/java/transfer.sql new file mode 100644 index 0000000..7c640b1 --- /dev/null +++ b/rsf-server/src/main/java/transfer.sql @@ -0,0 +1,33 @@ +-- save transfer record +-- mysql +insert into `sys_menu` ( `name`, `parent_id`, `route`, `component`, `type`, `sort`, `tenant_id`, `status`) values ( 'menu.transfer', '0', '/manager/transfer', 'transfer', '0' , '0', '1' , '1'); + +insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `tenant_id`, `status`) values ( 'Query 璋冩嫈鍗�', '', '1', 'manager:transfer:list', '0', '1', '1'); +insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `tenant_id`, `status`) values ( 'Create 璋冩嫈鍗�', '', '1', 'manager:transfer:save', '1', '1', '1'); +insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `tenant_id`, `status`) values ( 'Update 璋冩嫈鍗�', '', '1', 'manager:transfer:update', '2', '1', '1'); +insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `tenant_id`, `status`) values ( 'Delete 璋冩嫈鍗�', '', '1', 'manager:transfer:remove', '3', '1', '1'); + +-- locale menu name +transfer: 'Transfer', + +-- locale field +transfer: { + code: "code", + type: "type", + source: "source", + exceStatus: "exceStatus", + orgWareId: "orgWareId", + orgWareName: "orgWareName", + tarWareId: "tarWareId", + tarWareName: "tarWareName", + orgAreaId: "orgAreaId", + orgAreaName: "orgAreaName", + tarAreaId: "tarAreaId", + tarAreaName: "tarAreaName", +}, + +-- ResourceContent +import transfer from './transfer'; + +case 'transfer': + return transfer; diff --git a/rsf-server/src/main/java/transferItem.sql b/rsf-server/src/main/java/transferItem.sql new file mode 100644 index 0000000..5749b2e --- /dev/null +++ b/rsf-server/src/main/java/transferItem.sql @@ -0,0 +1,39 @@ +-- save transferItem record +-- mysql +insert into `sys_menu` ( `name`, `parent_id`, `route`, `component`, `type`, `sort`, `tenant_id`, `status`) values ( 'menu.transferItem', '0', '/manager/transferItem', 'transferItem', '0' , '0', '1' , '1'); + +insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `tenant_id`, `status`) values ( 'Query 璋冩嫈鍗曟槑缁�', '', '1', 'manager:transferItem:list', '0', '1', '1'); +insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `tenant_id`, `status`) values ( 'Create 璋冩嫈鍗曟槑缁�', '', '1', 'manager:transferItem:save', '1', '1', '1'); +insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `tenant_id`, `status`) values ( 'Update 璋冩嫈鍗曟槑缁�', '', '1', 'manager:transferItem:update', '2', '1', '1'); +insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `tenant_id`, `status`) values ( 'Delete 璋冩嫈鍗曟槑缁�', '', '1', 'manager:transferItem:remove', '3', '1', '1'); + +-- locale menu name +transferItem: 'TransferItem', + +-- locale field +transferItem: { + transferId: "transferId", + transferCode: "transferCode", + matnrId: "matnrId", + maktx: "maktx", + matnrCode: "matnrCode", + unit: "unit", + anfme: "anfme", + qty: "qty", + workQty: "workQty", + batch: "batch", + splrId: "splrId", + spec: "spec", + model: "model", + fieldsIndex: "fieldsIndex", + platItemId: "platItemId", + platOrderCode: "platOrderCode", + platWorkCode: "platWorkCode", + projectCode: "projectCode", +}, + +-- ResourceContent +import transferItem from './transferItem'; + +case 'transferItem': + return transferItem; diff --git a/rsf-server/src/main/resources/mapper/manager/TransferItemMapper.xml b/rsf-server/src/main/resources/mapper/manager/TransferItemMapper.xml new file mode 100644 index 0000000..3080ac0 --- /dev/null +++ b/rsf-server/src/main/resources/mapper/manager/TransferItemMapper.xml @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="com.vincent.rsf.server.manager.mapper.TransferItemMapper"> + +</mapper> -- Gitblit v1.9.1