From 5ae1669ac1794f62cf72e7d5352853da14d440b9 Mon Sep 17 00:00:00 2001
From: skyouc
Date: 星期六, 12 四月 2025 15:30:41 +0800
Subject: [PATCH] # bug修复 20250412问题修复

---
 rsf-admin/src/page/asnOrder/AsnOrderList.jsx                                                    |   20 ++
 rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/AsnOrderItemController.java  |    2 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/QlyInspectServiceImpl.java |   19 ++
 rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/MatnrController.java         |    4 
 rsf-admin/src/page/qlyInspect/QlyInspectList.jsx                                                |   15 +
 rsf-admin/src/page/locAreaRela/LocAreaRelaList.jsx                                              |  154 +++++++++++++++++++
 rsf-admin/src/page/qlyInspect/QlyInspectOpCreate.jsx                                            |  178 ++++++++++++++++++++++
 rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java         |    4 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrderItem.java                |    1 
 rsf-admin/src/page/basicInfo/loc/LocList.jsx                                                    |    1 
 rsf-server/src/main/java/com/vincent/rsf/server/common/utils/FieldsUtils.java                   |    2 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/QlyInspectController.java    |    5 
 rsf-admin/src/layout/SubMenu.jsx                                                                |    5 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderServiceImpl.java   |    7 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrder.java                    |    1 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/excel/MatnrsTemplate.java        |    8 
 rsf-admin/src/i18n/zh.js                                                                        |    1 
 rsf-admin/src/i18n/en.js                                                                        |    3 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/QlyInspectService.java          |    2 
 19 files changed, 403 insertions(+), 29 deletions(-)

diff --git a/rsf-admin/src/i18n/en.js b/rsf-admin/src/i18n/en.js
index 7afc39b..a9d204c 100644
--- a/rsf-admin/src/i18n/en.js
+++ b/rsf-admin/src/i18n/en.js
@@ -137,7 +137,7 @@
         container: 'Container',
         contract: 'Contract',
         qlyInspect: 'QlyInspect',
-        qlyIsptItem: '璐ㄦ淇℃伅鏄庣粏',
+        qlyIsptItem: 'qlyIsptItem',
         dictType: 'DictType',
         dictData: 'DictData',
         companys: 'Companys',
@@ -425,6 +425,7 @@
                 dlyQty: "dlyQty",
                 rcptQty: "rcptQty",
                 isptQty: "isptQty",
+                isptResult: "isptResult",
                 isptStatus: "isptStatus",
             },
             qlyIsptItem: {
diff --git a/rsf-admin/src/i18n/zh.js b/rsf-admin/src/i18n/zh.js
index 681bb53..d1e20f5 100644
--- a/rsf-admin/src/i18n/zh.js
+++ b/rsf-admin/src/i18n/zh.js
@@ -433,6 +433,7 @@
                 dlyQty: "閫佽揣鏁伴噺",
                 rcptQty: "鏀惰揣鏁伴噺	",
                 isptQty: "璐ㄦ鏁伴噺",
+                isptResult: "璐ㄦ缁撴灉",
                 isptStatus: "璐ㄦ鐘舵��",
             },
             qlyIsptItem: {
diff --git a/rsf-admin/src/layout/SubMenu.jsx b/rsf-admin/src/layout/SubMenu.jsx
index bb979eb..d79867e 100644
--- a/rsf-admin/src/layout/SubMenu.jsx
+++ b/rsf-admin/src/layout/SubMenu.jsx
@@ -10,7 +10,8 @@
 } from '@mui/material';
 import ExpandMore from '@mui/icons-material/ExpandMore';
 import { useTranslate, useSidebarState } from 'react-admin';
-
+import KeyboardArrowDownIcon from '@mui/icons-material/KeyboardArrowDown';
+import KeyboardArrowRightIcon from '@mui/icons-material/KeyboardArrowRight';
 const SubMenu = (props) => {
     const { handleToggle, isOpen, name, icon, children, dense } = props;
     const translate = useTranslate();
@@ -21,7 +22,7 @@
         <MenuItem dense={dense} onClick={handleToggle} sx={{ display: 'flex', alignItems: 'center' }}>
             <ListItemIcon sx={{ minWidth: 40, color: 'text.secondary', display: 'flex', alignItems: 'center' }}>
                 {/* {isOpen ? <ExpandMore /> : icon}  */}
-                {icon}
+                {isOpen ? <KeyboardArrowDownIcon /> : <KeyboardArrowRightIcon />}
             </ListItemIcon>
             <Typography variant="inherit" color="textSecondary" sx={{ ml: 1, display: 'flex', alignItems: 'center' }}>
                 {translate(name)}
diff --git a/rsf-admin/src/page/asnOrder/AsnOrderList.jsx b/rsf-admin/src/page/asnOrder/AsnOrderList.jsx
index 26d7d70..ada23e8 100644
--- a/rsf-admin/src/page/asnOrder/AsnOrderList.jsx
+++ b/rsf-admin/src/page/asnOrder/AsnOrderList.jsx
@@ -78,7 +78,14 @@
   <TextInput source="poCode" label="table.field.asnOrder.poCode" />,
   <NumberInput source="poId" label="table.field.asnOrder.poId" />,
   <TextInput source="type" label="table.field.asnOrder.type" />,
-  <TextInput source="wkType" label="table.field.asnOrder.wkType" />,
+  <ReferenceInput source="wkType" reference="dictData" filter={{dictTypeCode: 'sys_business_type'}}  label="table.field.asnOrder.wkType">
+    <AutocompleteInput
+      label="table.field.asnOrder.wkType"
+      optionValue="value"
+      filterToQuery={(val) => ({ name: val })}
+    />
+  </ReferenceInput>,
+  // <AutocompleteInput source='wkType' label='table.field.asnOrder.wkType' optionText={ } choices={JSON.parse(localStorage.getItem('sys_dicts'))?.filter(dict => (dict.dictTypeCode == 'sys_business_type')) || []} />,
   <NumberInput source="anfme" label="table.field.asnOrder.anfme" />,
   <NumberInput source="qty" label="table.field.asnOrder.qty" />,
   <TextInput source="logisNo" label="table.field.asnOrder.logisNo" />,
@@ -102,13 +109,13 @@
 
 const AsnOrderList = () => {
   const translate = useTranslate();
-
   const [createDialog, setCreateDialog] = useState(false);
   const [drawerVal, setDrawerVal] = useState(false);
   const [modalType, setmodalType] = useState(0);
   const billReload = useRef();
-
   const navigate = useNavigate();
+  const dicts = JSON.parse(localStorage.getItem('sys_dicts'))?.filter(dict => (dict.dictTypeCode == 'sys_business_type')) || [];
+
   const assign = (record) => {
     navigate(`/asnOrderItem?asnId=${record.id}`);
   };
@@ -139,6 +146,7 @@
         perPage={DEFAULT_PAGE_SIZE}
       >
         <StyledDatagrid
+          sx={{ width: '100%' }}
           preferenceKey='asnOrder'
           bulkActionButtons={<> <InspectionsButton /><BulkDeleteButton mutationMode={OPERATE_MODE} /></>}
           rowClick={() => false}
@@ -151,13 +159,17 @@
           <TextField source="poCode" label="table.field.asnOrder.poCode" />
           <NumberField source="poId" label="table.field.asnOrder.poId" />
           <TextField source="type$" label="table.field.asnOrder.type" />
+          {/* <ReferenceField source="updateBy" label="common.field.updateBy" reference="user" link={false} sortable={false}>
+            <TextField source="wkType" />
+          </ReferenceField> */}
+          {/* <AutocompleteInput choices={dicts} optionText="label" label="table.field.qlyInspect.wkType" source="wkType" optionValue="value" /> */}
           <TextField source="wkType$" label="table.field.asnOrder.wkType" />
           <NumberField source="anfme" label="table.field.asnOrder.anfme" />
           <NumberField source="qty" label="table.field.asnOrder.qty" />
           <TextField source="logisNo" label="table.field.asnOrder.logisNo" />
           <DateField source="arrTime" label="table.field.asnOrder.arrTime" showTime />
           <TextField source="rleStatus$" label="table.field.asnOrder.rleStatus" sortable={false} />
-          <TextField source="updateBy$" label="common.field.updateBy"  />
+          <TextField source="updateBy$" label="common.field.updateBy" />
           <DateField source="updateTime" label="common.field.updateTime" showTime />
           <TextField source="createBy$" label="common.field.createBy" />
           <DateField source="createTime" label="common.field.createTime" showTime />
diff --git a/rsf-admin/src/page/basicInfo/loc/LocList.jsx b/rsf-admin/src/page/basicInfo/loc/LocList.jsx
index bac9056..8811f4d 100644
--- a/rsf-admin/src/page/basicInfo/loc/LocList.jsx
+++ b/rsf-admin/src/page/basicInfo/loc/LocList.jsx
@@ -172,7 +172,6 @@
                                 onClick={() => { setCreateDialog(true) }}>
                                 {translate('create.empty.button')}
                             </Button>
-
                             <Button
                                 variant="contained"
                                 color="primary"
diff --git a/rsf-admin/src/page/locAreaRela/LocAreaRelaList.jsx b/rsf-admin/src/page/locAreaRela/LocAreaRelaList.jsx
new file mode 100644
index 0000000..cb1ae2b
--- /dev/null
+++ b/rsf-admin/src/page/locAreaRela/LocAreaRelaList.jsx
@@ -0,0 +1,154 @@
+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 LocAreaRelaCreate from "./LocAreaRelaCreate";
+import LocAreaRelaPanel from "./LocAreaRelaPanel";
+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';
+
+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="locAreaId" label="table.field.locAreaRela.locAreaId" />,
+    <NumberInput source="locId" label="table.field.locAreaRela.locId" />,
+
+    <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 LocAreaRelaList = () => {
+    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.locAreaRela"}
+                empty={<EmptyData onClick={() => { setCreateDialog(true) }} />}
+                filters={filters}
+                sort={{ field: "create_time", order: "desc" }}
+                actions={(
+                    <TopToolbar>
+                        <FilterButton />
+                        <MyCreateButton onClick={() => { setCreateDialog(true) }} />
+                        <SelectColumnsButton preferenceKey='locAreaRela' />
+                        <MyExportButton />
+                    </TopToolbar>
+                )}
+                perPage={DEFAULT_PAGE_SIZE}
+            >
+                <StyledDatagrid
+                    preferenceKey='locAreaRela'
+                    bulkActionButtons={() => <BulkDeleteButton mutationMode={OPERATE_MODE} />}
+                    rowClick={(id, resource, record) => false}
+                    expand={() => <LocAreaRelaPanel />}
+                    expandSingle={true}
+                    omit={['id', 'createTime', 'createBy', 'memo']}
+                >
+                    <NumberField source="id" />
+                    <NumberField source="locAreaId" label="table.field.locAreaRela.locAreaId" />
+                    <NumberField source="locId" label="table.field.locAreaRela.locId" />
+
+                    <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>
+            <LocAreaRelaCreate
+                open={createDialog}
+                setOpen={setCreateDialog}
+            />
+            <PageDrawer
+                title='LocAreaRela Detail'
+                drawerVal={drawerVal}
+                setDrawerVal={setDrawerVal}
+            >
+            </PageDrawer>
+        </Box>
+    )
+}
+
+export default LocAreaRelaList;
diff --git a/rsf-admin/src/page/qlyInspect/QlyInspectList.jsx b/rsf-admin/src/page/qlyInspect/QlyInspectList.jsx
index 46b4912..5a0bbc3 100644
--- a/rsf-admin/src/page/qlyInspect/QlyInspectList.jsx
+++ b/rsf-admin/src/page/qlyInspect/QlyInspectList.jsx
@@ -52,7 +52,7 @@
 import request from '@/utils/request';
 import AsnSelModal from "./AsnSelModal";
 import InspectModal from "./InspectModal";
-
+import QlyInspectOpCreate from './QlyInspectOpCreate';
 const StyledDatagrid = styled(DatagridConfigurable)(({ theme }) => ({
     '& .css-1vooibu-MuiSvgIcon-root': {
         height: '.9em'
@@ -69,14 +69,12 @@
 
 const filters = [
     <SearchInput source="condition" alwaysOn />,
-
     <TextInput source="code" label="table.field.qlyInspect.code" />,
     <TextInput source="wkType" label="table.field.qlyInspect.wkType" />,
     <NumberInput source="safeQty" label="table.field.qlyInspect.safeQty" />,
     <NumberInput source="dlyQty" label="table.field.qlyInspect.dlyQty" />,
     <NumberInput source="rcptQty" label="table.field.qlyInspect.rcptQty" />,
     <NumberInput source="isptQty" label="table.field.qlyInspect.isptQty" />,
-
     <TextInput label="common.field.memo" source="memo" />,
     <SelectInput
         label="common.field.status"
@@ -91,9 +89,9 @@
 
 const QlyInspectList = () => {
     const translate = useTranslate();
-
     const [createDialog, setCreateDialog] = useState(false);
     const [drawerVal, setDrawerVal] = useState(false);
+    const [opCreateDialog, setOpCreateDialog] = useState(false);
 
     return (
         <Box display="flex">
@@ -119,6 +117,7 @@
                 actions={(
                     <TopToolbar>
                         <AsnCreatButton />
+                        <MyCreateButton onClick={() => { setOpCreateDialog(true) }} />
                         <FilterButton />
                         <SelectColumnsButton preferenceKey='qlyInspect' />
                         <MyExportButton />
@@ -167,14 +166,16 @@
                 open={createDialog}
                 setOpen={setCreateDialog}
             />
+            <QlyInspectOpCreate
+                open={opCreateDialog}
+                setOpen={setOpCreateDialog}
+            />
             <PageDrawer
                 title='QlyInspect Detail'
                 drawerVal={drawerVal}
                 setDrawerVal={setDrawerVal}
             >
             </PageDrawer>
-
-
         </Box>
     )
 }
@@ -186,7 +187,7 @@
     const notify = useNotify();
     const refresh = useRefresh();
     const [createDialog, setCreateDialog] = useState(false);
-
+    const [opCreateDialog, setOpCreateDialog] = useState(false);
 
     return (
         <>
diff --git a/rsf-admin/src/page/qlyInspect/QlyInspectOpCreate.jsx b/rsf-admin/src/page/qlyInspect/QlyInspectOpCreate.jsx
new file mode 100644
index 0000000..ea33da9
--- /dev/null
+++ b/rsf-admin/src/page/qlyInspect/QlyInspectOpCreate.jsx
@@ -0,0 +1,178 @@
+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,
+    ReferenceField,
+} 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 QlyInspectOpCreate = (props) => {
+    const { open, setOpen } = props;
+    const translate = useTranslate();
+    const notify = useNotify();
+    const dicts = JSON.parse(localStorage.getItem('sys_dicts'))?.filter(dict => (dict.dictTypeCode == 'sys_business_type')) || [];
+    const isptResult = JSON.parse(localStorage.getItem('sys_dicts'))?.filter(dict => (dict.dictTypeCode == 'sys_inspect_result')) || [];
+    const isptStatus = JSON.parse(localStorage.getItem('sys_dicts'))?.filter(dict => (dict.dictTypeCode == 'sys_qly_inspect_status')) || [];
+
+    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="asnCode"
+                                        reference="asnOrder"
+                                    >
+                                        <AutocompleteInput
+                                            label="table.field.qlyInspect.asnCode"
+                                            optionText="code"
+                                            filterToQuery={(val) => ({ name: val })}
+                                        />
+                                    </ReferenceInput>
+                                </Grid>
+                                <Grid item xs={6} display="flex" gap={1}>
+                                    <AutocompleteInput
+                                        choices={dicts}
+                                        optionText="label"
+                                        label="table.field.qlyInspect.wkType"
+                                        source="wkType"
+                                        optionValue="value"
+                                        parse={v => v}
+                                        validate={[required()]} />
+                                </Grid>
+                                <Grid item xs={6} display="flex" gap={1}>
+                                    <NumberInput
+                                        label="table.field.qlyInspect.safeQty"
+                                        source="safeQty"
+                                    />
+                                </Grid>
+                                <Grid item xs={6} display="flex" gap={1}>
+                                    <NumberInput
+                                        label="table.field.qlyInspect.dlyQty"
+                                        source="dlyQty"
+                                    />
+                                </Grid>
+                                <Grid item xs={6} display="flex" gap={1}>
+                                    <NumberInput
+                                        label="table.field.qlyInspect.rcptQty"
+                                        source="rcptQty"
+                                    />
+                                </Grid>
+                                <Grid item xs={6} display="flex" gap={1}>
+                                    <NumberInput
+                                        label="table.field.qlyInspect.isptQty"
+                                        source="isptQty"
+                                    />
+                                </Grid>
+                                <Grid item xs={6} display="flex" gap={1}>
+                                    <AutocompleteInput
+                                        choices={isptStatus}
+                                        optionText="label"
+                                        label="table.field.qlyInspect.isptStatus"
+                                        source="isptStatus"
+                                        optionValue="value"
+                                        parse={v => v}
+                                    />
+                                </Grid>
+                                <Grid item xs={6} display="flex" gap={1}>
+                                    <AutocompleteInput
+                                        choices={isptResult}
+                                        optionText="label"
+                                        label="table.field.qlyInspect.isptResult"
+                                        source="isptResult"
+                                        optionValue="value"
+                                        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 QlyInspectOpCreate;
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 efd29ac..c8cd598 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
@@ -213,6 +213,10 @@
 
         Double receiptQty = receipts.stream().mapToDouble(ReceiptDetlsDto::getReceiptQty).sum();
 
+        if (Objects.isNull(receiptQty) || receiptQty.compareTo(0.00) <= 0) {
+            throw new CoolException("鏀惰揣鏁伴噺涓嶈兘灏忎簬鎴栫瓑浜庨浂锛侊紒");
+        }
+
         String asnCode = receipts.stream().findFirst().get().getAsnCode();
 
         AsnOrder asnOrder = asnOrderMapper.getOne(new LambdaQueryWrapper<AsnOrder>()
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/common/utils/FieldsUtils.java b/rsf-server/src/main/java/com/vincent/rsf/server/common/utils/FieldsUtils.java
index 16a1c10..ad98507 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/common/utils/FieldsUtils.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/common/utils/FieldsUtils.java
@@ -107,7 +107,7 @@
                     FieldsItem item = new FieldsItem();
                     item.setUuid(uuid)
                             .setValue(template.get(obj.getFields()).toString())
-                            .setMatnrId(Long.parseLong(template.get("matnrId").toString()))
+                            .setMatnrId(!Objects.isNull(template.get("matnrId")) ? Long.parseLong(template.get("matnrId").toString()) : null)
                             .setFieldsId(obj.getId());
                     fieldsItems.add(item);
                 }
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/AsnOrderItemController.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/AsnOrderItemController.java
index 267ca22..3ca24bd 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/AsnOrderItemController.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/AsnOrderItemController.java
@@ -125,7 +125,7 @@
         if (!Objects.isNull(map.get("ids"))) {
             orderItems = asnOrderItemService.list(new LambdaQueryWrapper<AsnOrderItem>().in(AsnOrderItem::getId, map.get("ids")).eq(AsnOrderItem::getStatus, 1));
         } else {
-            orderItems = asnOrderItemService.list(new LambdaQueryWrapper<AsnOrderItem>().last("limit 1"));
+            orderItems = asnOrderItemService.list(new LambdaQueryWrapper<AsnOrderItem>());
         }
 
         ExcelUtil.build(ExcelUtil.create(orderItems, AsnOrderItem.class, true), response);
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/MatnrController.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/MatnrController.java
index 091cf4a..2067080 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/MatnrController.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/MatnrController.java
@@ -204,9 +204,9 @@
         if (!Objects.isNull(map.get("ids"))) {
             matnrs = matnrService.list(new LambdaQueryWrapper<Matnr>().in(Matnr::getId, map.get("ids")).eq(Matnr::getStatus, 1));
         } else {
-            matnrs = matnrService.list(new LambdaQueryWrapper<Matnr>().last("limit 1"));
+            matnrs = matnrService.list();
         }
-        ExcelUtil.build(ExcelUtil.create(matnrs, Matnr.class, true), response);
+        ExcelUtil.build(ExcelUtil.create(matnrs, Matnr.class, false), response);
     }
 
     @PreAuthorize("hasAuthority('manager:matnr:list')")
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/QlyInspectController.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/QlyInspectController.java
index 57d0e20..6c9ff33 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/QlyInspectController.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/QlyInspectController.java
@@ -14,9 +14,12 @@
 import com.vincent.rsf.server.manager.controller.params.QlyInspectAndItem;
 import com.vincent.rsf.server.manager.entity.QlyInspect;
 import com.vincent.rsf.server.manager.service.QlyInspectService;
+import com.vincent.rsf.server.system.constant.SerialRuleCode;
 import com.vincent.rsf.server.system.controller.BaseController;
+import com.vincent.rsf.server.system.utils.SerialRuleUtils;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
@@ -104,7 +107,7 @@
     public R save(@RequestBody QlyInspect qlyInspect) {
         qlyInspect.setCreateBy(getLoginUserId());
         qlyInspect.setUpdateBy(getLoginUserId());
-        if (!qlyInspectService.save(qlyInspect)) {
+        if (!qlyInspectService.qlySave(qlyInspect)) {
             return R.error("Save Fail");
         }
         return R.ok("Save Success").add(qlyInspect);
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrder.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrder.java
index 9ea862d..f8c4cf4 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrder.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrder.java
@@ -124,7 +124,6 @@
      * 鏄惁鍒犻櫎 1: 鏄�  0: 鍚�  
      */
     @ApiModelProperty(value= "鏄惁鍒犻櫎 1: 鏄�  0: 鍚�  ")
-    @TableLogic
     private Integer deleted;
 
     /**
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrderItem.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrderItem.java
index 0e1a978..572b4d2 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrderItem.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrderItem.java
@@ -190,7 +190,6 @@
      * 鏄惁鍒犻櫎 1: 鏄�  0: 鍚�  
      */
     @ApiModelProperty(value= "鏄惁鍒犻櫎 1: 鏄�  0: 鍚�  ")
-    @TableLogic
     private Integer deleted;
 
     /**
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/excel/MatnrsTemplate.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/excel/MatnrsTemplate.java
index 9904ef6..cb9e44e 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/excel/MatnrsTemplate.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/excel/MatnrsTemplate.java
@@ -22,22 +22,22 @@
 public class MatnrsTemplate {
 
     @NotNull
-    @Excel(name = "鐗╂枡鍚嶇О")
+    @Excel(name = "鐗╂枡鍚嶇О*")
     @ExcelComment(example = "鍗庝负鎵嬫満")
     private String name;
 
     @NotNull
-    @Excel(name = "鍒嗙被鍔╄鐮�")
+    @Excel(name = "鍒嗙被鍔╄鐮�*")
     @ExcelComment(example = "256874556")
     private String groupCode;
 
     @NotNull
-    @Excel(name = "鍒嗙被鍚嶇О")
+    @Excel(name = "鍒嗙被鍚嶇О*")
     @ExcelComment(example = "绉诲姩璁惧")
     private String groupName;
 
     @NotNull
-    @Excel(name = "鐗╂枡鍔╄鐮�")
+    @Excel(name = "鐗╂枡鍔╄鐮�*")
     @ExcelComment(example = "P3528461569")
     private String erpCode;
 
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/QlyInspectService.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/QlyInspectService.java
index 74f09eb..06d5073 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/QlyInspectService.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/QlyInspectService.java
@@ -20,4 +20,6 @@
     List<AsnOrder> getUnInspect(Map<String, Object> map);
 
     R saveSelected(IsptOrderParam param, Long loginUserId);
+
+    boolean qlySave(QlyInspect qlyInspect);
 }
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderServiceImpl.java
index 6c91462..08d52a5 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderServiceImpl.java
@@ -267,9 +267,9 @@
         if (orderItems.isEmpty()) {
             throw new CoolException("鏀惰揣鏄庣粏涓虹┖锛侊紒");
         }
-        if (Objects.isNull(asrder.getAnfme()) || asrder.getAnfme().compareTo(0.00) == 0) {
-            throw new CoolException("鏀惰揣鏁伴噺涓嶈兘涓洪浂锛侊紒");
-        }
+//        if (Objects.isNull(asrder.getAnfme()) || asrder.getAnfme().compareTo(0.00) == 0) {
+//            throw new CoolException("鏀惰揣鏁伴噺涓嶈兘涓洪浂锛侊紒");
+//        }
         AsnOrder order = this.getById(asrder.getId());
         AsnOrderLog orderLog = new AsnOrderLog();
         order.setExceStatus(Short.parseShort(AsnExceStatus.ASN_EXCE_STATUS_TASK_DONE.val));
@@ -290,6 +290,7 @@
             AsnOrderItemLog itemLog = new AsnOrderItemLog();
             BeanUtils.copyProperties(item, itemLog);
             itemLog.setAsnItemId(itemLog.getId())
+                    .setLogId(orderLog.getId())
                     .setAsnId(item.getAsnId());
             logs.add(itemLog);
         });
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/QlyInspectServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/QlyInspectServiceImpl.java
index e4330bc..568cf81 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/QlyInspectServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/QlyInspectServiceImpl.java
@@ -176,4 +176,23 @@
         }
         return R.ok("淇濆瓨鎴愬姛锛侊紒");
     }
+
+    @Override
+    public boolean qlySave(QlyInspect qlyInspect) {
+        String code = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_INSPECT_CODE, qlyInspect);
+        if (Objects.isNull(code) || StringUtils.isBlank(code)) {
+            throw new CoolException("缂栫爜瑙勫垯閿欒锛�" + "璇锋鏌ョ紪鐮侊細" + "銆孲YS_INSPECT_CODE銆�" + "鏄惁璁剧疆鎴愬姛锛侊紒");
+        }
+        qlyInspect.setCode(code);
+        if (Objects.isNull(qlyInspect.getAsnCode()) || StringUtils.isBlank(qlyInspect.getAsnCode())) {
+            throw new CoolException("鏀惰揣鍗曞彿涓嶈兘涓虹┖锛侊紒");
+        }
+        AsnOrder asnOrder = asnOrderService.getOne(new LambdaQueryWrapper<AsnOrder>().eq(AsnOrder::getId, qlyInspect.getAsnCode()));
+        if (Objects.isNull(asnOrder)) {
+            throw new CoolException("鏀惰揣鍗曚笉瀛樺湪锛侊紒");
+        }
+        qlyInspect.setAsnCode(asnOrder.getCode()).setAsnId(asnOrder.getId());
+
+        return this.save(qlyInspect);
+    }
 }

--
Gitblit v1.9.1