1个文件已添加
43个文件已修改
756 ■■■■ 已修改文件
rsf-admin/src/App.jsx 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-admin/src/i18n/en.js 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-admin/src/i18n/zh.js 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-admin/src/page/basicInfo/basStation/CrossZoneAreaField.jsx 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-admin/src/page/orders/asnOrder/AsnOrderItemList.jsx 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-admin/src/page/orders/qlyInspect/QlyIsptItemList.jsx 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-admin/src/page/statistics/stockManage/WarehouseAside.jsx 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-admin/src/page/statistics/stockManage/WarehouseHistories.jsx 126 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-admin/src/page/statistics/stockManage/WarehouseStockInfo.jsx 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-admin/src/page/statistics/stockManage/WarehouseStockList.jsx 48 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-admin/src/page/task/TaskItemList.jsx 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-admin/src/page/task/TaskList.jsx 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-admin/src/page/waitPakin/WaitPakinItemList.jsx 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-admin/src/page/warehouseAreasItem/WarehouseAreasItemList.jsx 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/api/controller/WcsController.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/api/controller/params/TaskInParam.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/api/service/WcsService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/AgvServiceImpl.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/WcsServiceImpl.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/BasStationController.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/TaskController.java 53 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/WarehouseStockController.java 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrderItem.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/QlyIsptItem.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/Task.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/TaskItem.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/TaskItemLog.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/ViewStockManage.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/WaitPakinItem.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/WarehouseAreasItem.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/excel/AsnOrderTemplate.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/StaUseStatusType.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/TaskStsType.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/TaskType.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/WarehType.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/ScheduleJobs.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskSchedules.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderItemServiceImpl.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/QlyInspectServiceImpl.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WaitPakinServiceImpl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/system/constant/GlobalConfigCode.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/resources/mapper/manager/WarehouseStockMapper.xml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-admin/src/App.jsx
@@ -31,7 +31,19 @@
import { getSystemInfo, getSystemDicts, tenants } from "@/api/auth";
import chineseMessages from 'ra-language-chinese';
import { createTheme, ThemeProvider } from '@mui/material/styles';
import { zhCN } from '@mui/material/locale';
import { zhCN, frFR, enUS } from '@mui/material/locale';
const getMaterialUILocale = (locale) => {
  switch (locale) {
    case 'en':
      return enUS;
    case 'fr':
      return frFR;
    default:
      return zhCN;
  }
};
const i18nProvider = polyglotI18nProvider(
  (locale) => {
@@ -49,7 +61,7 @@
    { locale: "ru", name: "Russian" },
    { locale: "lk", name: "Русский" },
    { locale: "es", name: "Española" },
  ],
  {
    // msg in console
@@ -58,21 +70,17 @@
);
const theme = createTheme(
  {
    palette: { main: '#1976d2' },
  },
  zhCN
)
const store = localStorageStore(SPA_VERSION, SPA_NAME);
const App = () => {
  const [themeName] = useStore("themeName", DEFAULT_THEME_NAME);
  const lightTheme = themes.find((theme) => theme.name === themeName)?.light;
  const darkTheme = themes.find((theme) => theme.name === themeName)?.dark;
  const [locale, setLocale] = useState('zh');
  const theme = createTheme(
    {
      ...lightTheme
    }, getMaterialUILocale(locale))
  useEffect(() => {
    getSystemInfo().then((data) => {
      localStorage.setItem("system", JSON.stringify(data));
@@ -89,6 +97,7 @@
        lightTheme={lightTheme}
        darkTheme={darkTheme}
        defaultTheme={DEFAULT_THEME_MODE}
        theme={theme}
        i18nProvider={i18nProvider}
        dataProvider={DataProvider(DATA_PROVIDER_SPRING)}
        loginPage={Login}
@@ -118,12 +127,9 @@
};
const AppWrapper = () => (
  <ThemeProvider theme={theme}>
    <StoreContextProvider value={store}>
      <App />
    </StoreContextProvider>
  </ThemeProvider>
  <StoreContextProvider value={store}>
    <App />
  </StoreContextProvider>
);
export default AppWrapper;
rsf-admin/src/i18n/en.js
@@ -603,6 +603,9 @@
                poDetlCode: "poDetlCode",
                matnrId: "matnrId",
                maktx: "maktx",
                platOrderCode: 'Customer Order Code',
                platWorkCode: 'Work Code',
                projectCode: 'Project Code',
                spec: "Spec",
                model: "Model",
                anfme: "anfme",
@@ -826,6 +829,7 @@
                taskCode: "TaskCode",
                taskStatus: "Status",
                taskType: "Type",
                warehType: "Warehouse Type",
                orgLoc: "orgLoc",
                orgSite: "orgSite",
                targLoc: "targLoc",
@@ -872,6 +876,36 @@
                batch: "batch",
                spec: "spec",
                model: "model",
            },
            stock: {
                code: "Code",
                sourceCode: "Resource",
                sourceId: "Resource ID",
                type: "Order Type",
                wkType: "Work Type",
                anfme: "Qty",
            },
            stockItem: {
                orderId: "Order ID",
                orderCode: "Order Code",
                sourceItemId: "Resource Item ID",
                matnrId: "Mat ID",
                matnrCode: "Mat Code",
                maktx: "Maktx",
                anfme: "Anfme",
                stockUnit: "Unit",
                workQty: "Work Qty",
                purQty: "Purchase Qty",
                purUnit: "Purchase Unit",
                qty: "Qty",
                splrCode: "Supplier Code",
                batch: "Batch",
                splrBatch: "Supplier Batch",
                splrName: "Supplier Name",
                trackCode: "Track Code",
                barcode: "Bar Code",
                prodTime: "Prod Time",
                packName: "Pakcage",
            },
            taskItemLog: {
                taskItemId: "taskItemId",
@@ -952,6 +986,7 @@
                unit: 'Unit',
                anfme: 'Stock Qty',
                matnrCode: "Matnr Code",
                warehouse: 'Warehouse',
                workQty: 'Work Qty',
                qty: 'Non Stock Qty',
                splrId: 'supplier',
rsf-admin/src/i18n/zh.js
@@ -607,6 +607,9 @@
                poDetlCode: "PO单",
                platItemId: '行号',
                matnrId: "物料标识",
                platOrderCode: '客户单号',
                platWorkCode: '工单号',
                projectCode: '项目号',
                maktx: "物料名称",
                spec: "规格",
                model: "型号",
@@ -854,7 +857,8 @@
            task: {
                taskCode: "任务号",
                taskStatus: "状态",
                taskType: "类型",
                taskType: "作业类型",
                warehType: "仓库类型",
                orgLoc: "源库位",
                orgSite: "源站点",
                targLoc: "目标库位",
@@ -929,7 +933,7 @@
            },
            stockItem: {
                orderId: "主单ID",
                orderCode: "单据编码",
                orderCode: "单号",
                sourceItemId: "源明细ID",
                matnrId: "物料ID",
                matnrCode: "物料编码",
@@ -986,6 +990,7 @@
                workQty: '执行数',
                qty: '不可用库存',
                splrId: '供应商',
                warehouse: '仓库',
                batch: "批次",
                splrBatch: "批次",
                spec: "规格",
rsf-admin/src/page/basicInfo/basStation/CrossZoneAreaField.jsx
@@ -36,10 +36,10 @@
    };
    React.useEffect(() => {
        if (record?.areaIds && record.areaIds.length > 0) {
        if (record?.areaIds && record.areaIds.length !== 0  && record.areaIds.length > 0) {
            fetchAreaNames();
        }
    }, [record]);
    }, [record]);
    if (loading) {
        return <CircularProgress size={20} />;
rsf-admin/src/page/orders/asnOrder/AsnOrderItemList.jsx
@@ -71,6 +71,9 @@
  <TextInput source="poDetlCode" label="table.field.asnOrderItem.poDetlCode" />,
  <TextInput source="matnrId" label="table.field.asnOrderItem.matnrId" />,
  <TextInput source="maktx" label="table.field.asnOrderItem.maktx" />,
  <TextInput source="platOrderCode" label="table.field.asnOrderItem.platOrderCode" />,
  <TextInput source="platWorkCode" label="table.field.asnOrderItem.platWorkCode" />,
  <TextInput source="projectCode" label="table.field.asnOrderItem.projectCode" />,
  <NumberInput source="anfme" label="table.field.asnOrderItem.anfme" />,
  <TextInput source="stockUnit" label="table.field.asnOrderItem.stockUnit" />,
  <NumberInput source="purQty" label="table.field.asnOrderItem.purQty" />,
@@ -118,7 +121,7 @@
          }}
          title={"menu.asnOrderItem"}
          empty={false}
          filter={{ asnId: asnId}}
          filter={{ asnId: asnId }}
          filters={filters}
          sort={{ field: "create_time", order: "desc" }}
          actions={(
@@ -182,6 +185,9 @@
        <TextField source="matnrCode" label="table.field.asnOrderItem.matnrCode" />,
        <TextField source="maktx" label="table.field.asnOrderItem.maktx" />,
        <TextField source="splrBatch" label="table.field.asnOrderItem.splrBatch" />,
        <TextField source="platOrderCode" label="table.field.asnOrderItem.platOrderCode" />,
        <TextField source="platWorkCode" label="table.field.asnOrderItem.platWorkCode" />,
        <TextField source="projectCode" label="table.field.asnOrderItem.projectCode" />,
        <TextField source="spec" label="table.field.asnOrderItem.spec" />,
        <TextField source="model" label="table.field.asnOrderItem.model" />,
        <NumberField source="anfme" label="table.field.asnOrderItem.anfme" />,
@@ -232,7 +238,7 @@
          preferenceKey='asnOrderItem'
          bulkActionButtons={false}
          rowClick={(id, resource, record) => false}
          omit={['id', 'asnId', 'poDetlId', 'poDetlCode', 'matnrId', 'purQty', 'purUnit', 'qrcode', 'trackCode']}
          omit={['id', 'asnId', 'poDetlId', 'poDetlCode', 'matnrId', 'purQty', 'purUnit', 'qrcode', 'trackCode', 'splrCode', 'platWorkCode', 'projectCode']}
        >
          {columns.map((column) => column)}
        </StyledDatagrid>}
rsf-admin/src/page/orders/qlyInspect/QlyIsptItemList.jsx
@@ -70,6 +70,9 @@
    <TextInput source="splrName" label="table.field.qlyIsptItem.splrName" />,
    <TextInput source="splrBatch" label="table.field.qlyIsptItem.splrBatch" />,
    <TextInput source="stockBatch" label="table.field.qlyIsptItem.stockBatch" />,
    <TextInput source="platOrderCode" label="table.field.asnOrderItem.platOrderCode" />,
    <TextInput source="platWorkCode" label="table.field.asnOrderItem.platWorkCode" />,
    <TextInput source="projectCode" label="table.field.asnOrderItem.projectCode" />,
    <NumberInput source="rcptQty" label="table.field.qlyIsptItem.rcptQty" />,
    <NumberInput source="dlyQty" label="table.field.qlyIsptItem.dlyQty" />,
    <NumberInput source="disQty" label="table.field.qlyIsptItem.disQty" />,
@@ -163,6 +166,9 @@
                <TextField source="label" label="table.field.qlyIsptItem.label" />,
                <TextField source="splrBatch" label="table.field.qlyIsptItem.splrBatch" />,
                <TextField source="stockBatch" label="table.field.qlyIsptItem.stockBatch" />,
                <TextField source="platOrderCode" label="table.field.asnOrderItem.platOrderCode" />,
                <TextField source="platWorkCode" label="table.field.asnOrderItem.platWorkCode" />,
                <TextField source="projectCode" label="table.field.asnOrderItem.projectCode" />,
                <NumberField source="rcptQty" label="table.field.qlyIsptItem.rcptQty" />,
                <NumberField source="dlyQty" label="table.field.qlyIsptItem.dlyQty" />,
                <MyField source="anfme" label="table.field.qlyIsptItem.anfme"
@@ -211,7 +217,7 @@
                    preferenceKey='qlyIsptItem'
                    bulkActionButtons={() => <BulkDeleteButton mutationMode={OPERATE_MODE} />}
                    rowClick={false}
                    omit={['id', 'createTime', 'createBy', 'memo', 'dlyQty', 'label', 'stockBatch', 'picPath', 'ispectId', 'statusBool']}
                    omit={['id', 'createTime', 'createBy', 'memo', 'dlyQty', 'label', 'stockBatch', 'picPath', 'ispectId', 'statusBool', 'platWorkCode', 'projectCode']}
                >
                    {columns.map((column) => column)}
rsf-admin/src/page/statistics/stockManage/WarehouseAside.jsx
@@ -15,9 +15,8 @@
const WarehouseAside = () => {
    const [isSelect, setIsSelect] = useState(false);
    const isSelected = (value, filters) => {
        const aggType = filters.aggType || [];
        const aggType = filters.aggType || ["matnr"];
        return aggType.includes(value.aggType);
    };
rsf-admin/src/page/statistics/stockManage/WarehouseHistories.jsx
@@ -1,4 +1,4 @@
import { Dialog, DialogActions, DialogContent, DialogTitle, Box } from "@mui/material";
import { Dialog, DialogActions, DialogContent, DialogTitle, Box, LinearProgress } from "@mui/material";
import React, { useState, useRef, useEffect, useMemo } from "react";
import {
    List,
@@ -156,39 +156,7 @@
                                    )}
                                    perPage={DEFAULT_ITEM_PAGE_SIZE}
                                >
                                    <StyledDatagrid
                                        preferenceKey='stockHistories'
                                        bulkActionButtons={() => <BulkDeleteButton mutationMode={OPERATE_MODE} />}
                                        rowClick={(id, resource, record) => false}
                                        expand={false}
                                        expandSingle={true}
                                        omit={['id', 'createTime', 'orderId', 'sourceItemId', 'matnrId', 'createBy', 'barcode', 'splrCode', 'splrBatch', 'updateBy$', 'createBy$', 'memo']}
                                    >
                                        <NumberField source="id" />
                                        <NumberField source="orderId" label="table.field.stockItem.orderId" />
                                        <TextField source="orderCode" label="table.field.stockItem.orderCode" />
                                        <TextField source="sourceItemId" label="table.field.stockItem.sourceItemId" />
                                        <TextField source="matnrId" label="table.field.stockItem.matnrId" />
                                        <TextField source="matnrCode" label="table.field.stockItem.matnrCode" />
                                        <TextField source="maktx" label="table.field.stockItem.maktx" />
                                        <NumberField source="anfme" label="table.field.stockItem.anfme" />
                                        <TextField source="stockUnit" label="table.field.stockItem.stockUnit" />
                                        <NumberField source="workQty" label="table.field.stockItem.workQty" />
                                        <NumberField source="qty" label="table.field.stockItem.qty" />
                                        <TextField source="splrCode" label="table.field.stockItem.splrCode" />
                                        <TextField source="batch" label="table.field.stockItem.batch" />
                                        <TextField source="splrBatch" label="table.field.stockItem.splrBatch" />
                                        <TextField source="splrName" label="table.field.stockItem.splrName" />
                                        <TextField source="trackCode" label="table.field.stockItem.trackCode" />
                                        <TextField source="barcode" label="table.field.stockItem.barcode" />
                                        <TextField source="prodTime" label="table.field.stockItem.prodTime" />
                                        <TextField source="packName" label="table.field.stockItem.packName" />
                                        <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 />
                                        <TextField source="memo" label="common.field.memo" sortable={false} />
                                    </StyledDatagrid>
                                   <DynamicFields />
                                </List>
                            </Box>
                        </Grid>
@@ -215,3 +183,93 @@
        <Button label={"toolbar.confirm"} variant="contained" color="primary" size="medium" startIcon={<SaveIcon />} onClick={confirmSelect} />
    )
}
const DynamicFields = (props) => {
    const { setDrawerVal, setCreateDialog, setSelect, filters } = props
    const translate = useTranslate();
    const notify = useNotify();
    const [columns, setColumns] = useState([]);
    const { isLoading } = useListContext();
    const refresh = useRefresh();
    useEffect(() => {
        getDynamicFields();
    }, []);
    const getDynamicFields = async () => {
        const { data: { code, data, msg }, } = await request.get("/fields/enable/list");
        if (code == 200) {
            const arr = [
                <NumberField source="id" />,
                <NumberField source="orderId" label="table.field.stockItem.orderId" />,
                <TextField source="orderCode" label="table.field.stockItem.orderCode" />,
                <TextField source="sourceItemId" label="table.field.stockItem.sourceItemId" />,
                <TextField source="matnrId" label="table.field.stockItem.matnrId" />,
                <TextField source="matnrCode" label="table.field.stockItem.matnrCode" />,
                <TextField source="maktx" label="table.field.stockItem.maktx" />,
                <NumberField source="anfme" label="table.field.stockItem.anfme" />,
                <TextField source="stockUnit" label="table.field.stockItem.stockUnit" />,
                <NumberField source="workQty" label="table.field.stockItem.workQty" />,
                <NumberField source="qty" label="table.field.stockItem.qty" />,
                <TextField source="splrCode" label="table.field.stockItem.splrCode" />,
                <TextField source="batch" label="table.field.stockItem.batch" />,
                <TextField source="splrBatch" label="table.field.stockItem.splrBatch" />,
                <TextField source="splrName" label="table.field.stockItem.splrName" />,
                <TextField source="trackCode" label="table.field.stockItem.trackCode" />,
                <TextField source="barcode" label="table.field.stockItem.barcode" />,
                <TextField source="prodTime" label="table.field.stockItem.prodTime" />,
                <TextField source="packName" label="table.field.stockItem.packName" />,
            ]
            const fields = data.map(el => <TextField key={el.fields} source={`extendFields.[${el.fields}]`} label={el.fieldsAlise} />)
            const lastArr = [
                <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 />,
                <TextField source="memo" label="common.field.memo" sortable={false} />,
            ]
            setColumns([...arr, ...fields, ...lastArr]);
            data.map(el => {
                var i = 0;
                filters.map((item) => {
                    if (item.key === el.fields) {
                        i = 1;
                    }
                })
                i === 0 && filters.push(<TextInput key={el.fields} source={el.fields} label={el.fieldsAlise} />)
            })
            // setFilters([...filters, ...inputFields])
        } else {
            notify(msg);
        }
    }
    return (
        <Box sx={{ position: 'relative', minHeight: "60vh", }}>
            {isLoading && (
                <LinearProgress
                    sx={{
                        height: "2px",
                        position: 'absolute',
                        top: 0,
                        left: 0,
                        right: 0,
                    }}
                />
            )}
            {columns.length > 0 &&
                <StyledDatagrid
                    preferenceKey='stockHistories'
                    bulkActionButtons={() => <BulkDeleteButton mutationMode={OPERATE_MODE} />}
                    rowClick={(id, resource, record) => false}
                    expand={false}
                    expandSingle={true}
                    omit={['id', 'createTime', 'orderId', 'sourceItemId', 'matnrId', 'createBy', 'barcode', 'splrCode', 'splrBatch', 'updateBy$', 'createBy$', 'memo']}
                >
                    {columns.map((column) => column)}
                </StyledDatagrid>}
        </Box>
    )
}
rsf-admin/src/page/statistics/stockManage/WarehouseStockInfo.jsx
@@ -64,16 +64,18 @@
    const translate = useTranslate();
    const notify = useNotify();
    const refresh = useRefresh();
    const [page, setPage] = useState(0);
    const [pageSize, setPageSize] = useState(100);
    const [totalRowCount, setTotalRowCount] = useState(0);
    const [disabled, setDisabled] = useState(false)
    const [loading, setLoading] = useState(false);
    const [createDialog, setCreateDialog] = useState(false);
    const tableRef = useRef();
    useEffect(() => {
        if (open && record !== 0) {
            requestGetBody()
        }
        setDisabled(false)
    }, [open])
        requestGetBody()
        // setDisabled(false)
    }, [open, page, pageSize])
    const handleClose = (event, reason) => {
        if (reason !== "backdropClick") {
@@ -119,12 +121,21 @@
    };
    const requestGetBody = async () => {
        const res = await request.post(`warehouse/stock/info`, { stock: record, aggType: record?.aggType });
        if (res?.data?.code === 200) {
            setTableData(res.data.data.records)
        } else {
            notify(res.data.msg);
        setLoading(true);
        try {
            const res = await request.post(`warehouse/stock/info`, { page: page + 1, pageSize: pageSize, stock: record, aggType: record?.aggType });
            if (res?.data?.code === 200) {
                setTableData(res.data.data.records)
                setTotalRowCount(res.data.data.total)
            } else {
                notify(res.data.msg);
            }
        } catch (error) {
        } finally {
            setLoading(false);
        }
    }
    const [selectedRows, setSelectedRows] = useState([]);
@@ -154,9 +165,16 @@
                <DialogContent sx={{ mt: 2 }}>
                    <Box></Box>
                    <Box sx={{ mt: 2 }}>
                        <AsnOrderModalTable tabelData={tabelData}
                        <AsnOrderModalTable
                            tabelData={tabelData}
                            setTableData={setTableData}
                            record={record}
                            page={page}
                            pageSize={pageSize}
                            loading={loading}
                            setPage={setPage}
                            setPageSize={setPageSize}
                            totalRowCount={totalRowCount}
                            selectedRows={selectedRows}
                            setSelectedRows={setSelectedRows}
                            tableRef={tableRef} />
@@ -229,20 +247,20 @@
    );
};
const AsnOrderModalTable = ({ tabelData, setTableData, record, selectedRows, setSelectedRows, tableRef }) => {
const AsnOrderModalTable = ({ tabelData, setTableData, record, selectedRows, setSelectedRows, tableRef, page, pageSize, totalRowCount, setPageSize, setPage, loading }) => {
    const translate = useTranslate();
    const notify = useNotify();
    const [columns, setColumns] = useState([
        {
            field: 'warehouse',
            field: 'warehouse$',
            headerName: translate('table.field.warehouseStock.warehouse'),
            width: 130,
            editable: false,
        },
        {
            field: 'matnrCode',
            headerName: translate('table.field.asnOrderItem.matnrCode'),
            headerName: translate('table.field.warehouseStock.matnrCode'),
            width: 130,
            editable: false,
        },
@@ -264,7 +282,7 @@
        },
        {
            field: 'batch',
            headerName: translate('table.field.warehouseStock.splrBatch'),
            headerName: translate('table.field.warehouseStock.batch'),
            minWidth: 100,
            flex: 1,
            editable: false,
@@ -352,16 +370,23 @@
    return (
        <div style={{ height: 400, width: '100%' }}>
        <div style={{ height: 500, width: '100%' }}>
            <DataGrid
                apiRef={tableRef}
                rows={tabelData}
                columns={columns}
                disableRowSelectionOnClick
                getRowId={(row) => row.id}
                disableColumnFilter
                disableColumnSelector
                disableColumnSorting
                rowCount={totalRowCount}
                paginationMode="server"
                page={page}
                pageSize={pageSize}
                onPageChange={(newPage) => {
                    setPage(newPage)
                }}
                onPageSizeChange={(newPageSize) => {
                    setPageSize(newPageSize)
                }}
                disableMultipleColumnsSorting
                processRowUpdate={processRowUpdate}
                initialState={{
@@ -372,10 +397,10 @@
                    },
                }}
                pageSizeOptions={[10, 25, 50, 100]}
                editMode="row"
                checkboxSelection
                onRowSelectionModelChange={handleSelectionChange}
                selectionModel={selectedRows}
                loading={loading}
                sx={{
                    '& .MuiDataGrid-cell input': {
                        border: '1px solid #ccc'
rsf-admin/src/page/statistics/stockManage/WarehouseStockList.jsx
@@ -60,20 +60,18 @@
}));
const WarehouseStockList = () => {
    const dict = JSON.parse(localStorage.getItem('sys_dicts'))?.filter(dict => (dict.dictTypeCode == 'sys_stock_summary_code')) || [];
    const translate = useTranslate();
    const [createDialog, setCreateDialog] = useState(false);
    const [select, setSelect] = useState({});
    const [drawerVal, setDrawerVal] = useState(false);
    const filters = [
    const [filters, setFilters] = useState([
        <SearchInput source="condition" alwaysOn />,
        <NumberInput source="locId" label="table.field.locItem.locId" />,
        <TextInput source="locCode" label="table.field.locItem.locCode" />,
        <TextInput source="type" label="table.field.locItem.type" />,
        <ReferenceInput source="aggType" reference="dictData" filter={{ dictTypeCode: 'sys_stock_summary_code' }} alwaysOn>
            <AutocompleteInput optionText='label' optionValue="value" label="table.field.locItem.aggType" />
        </ReferenceInput>,
        <AutocompleteInput choices={dict} optionText='label' optionValue="value" source="aggType" label="table.field.locItem.aggType" />,
        <NumberInput source="orderItemId" label="table.field.locItem.orderItemId" />,
        <NumberInput source="wkType" label="table.field.locItem.wkType" />,
        <NumberInput source="matnrId" label="table.field.locItem.matnrId" />,
@@ -85,8 +83,9 @@
        <TextInput source="spec" label="table.field.locItem.spec" />,
        <TextInput source="model" label="table.field.locItem.model" />,
        <TextInput source="fieldsIndex" label="table.field.locItem.fieldsIndex" />,
        <TextInput label="common.field.memo" source="memo" />,
    ]
        <TextInput label="common.field.memo" source="memo" />,]);
    const [select, setSelect] = useState({});
    const [drawerVal, setDrawerVal] = useState(false);
    return (
        <>
@@ -99,10 +98,14 @@
                                duration: theme.transitions.duration.enteringScreen,
                            }),
                        marginRight: 0,
                        '& .RaAutocompleteInput-textField.MuiFormControl-root.MuiTextField-root': {
                            width: '200px'
                        }
                    }}
                    resource="warehouse/stock"
                    title={"common.button.detail"}
                    empty={false}
                    // filter={{aggType: "matnr"}}
                    filters={filters}
                    sort={{ field: "create_time", order: "desc" }}
                    actions={(
@@ -119,6 +122,7 @@
                        setDrawerVal={setDrawerVal}
                        setCreateDialog={setCreateDialog}
                        setSelect={setSelect}
                        filters={filters}
                    />
                </List>
                <WarehouseStockInfo
@@ -138,9 +142,19 @@
export default WarehouseStockList;
const PaginatedRowNumber = () => {
    const record = useRecordContext();
    const { page, perPage } = useListContext();
    const index = record.__tmp_index !== undefined ? record.__tmp_index : 0;
    //   const index = record.__tmp_index; // react-admin 内部使用的临时索引
    return <span>{(page - 1) * perPage + index + 1}</span>;
};
const DynamicFields = (props) => {
    const { setDrawerVal, setCreateDialog, setSelect } = props
    const index = 1;
    const { setDrawerVal, setCreateDialog, setSelect, filters } = props
    const translate = useTranslate();
    const notify = useNotify();
    const [columns, setColumns] = useState([]);
@@ -166,6 +180,7 @@
                <NumberField source="workQty" label="table.field.warehouseStock.qty" />,
                <TextField source="spec" label="table.field.warehouseStock.spec" />,
                <TextField source="model" label="table.field.warehouseStock.model" />,
                <TextField source="warehouse$" label="table.field.warehouseStock.warehouse" />,
                <TextField source="batch" label="table.field.warehouseStock.batch" />,
                <TextField source="unit" label="table.field.warehouseStock.unit" />,
                <TextField source="fieldsIndex" label="table.field.warehouseStock.fieldsIndex" />,
@@ -180,6 +195,18 @@
                </WrapperField>
            ]
            setColumns([...arr, ...fields, ...lastArr]);
            data.map(el => {
                var i = 0;
                filters.map((item) => {
                    if (item.key === el.fields) {
                        i = 1;
                    }
                })
                i === 0 && filters.push(<TextInput key={el.fields} source={el.fields} label={el.fieldsAlise} />)
            })
            // setFilters([...filters, ...inputFields])
        } else {
            notify(msg);
        }
@@ -216,7 +243,6 @@
const HistoriesButton = ({ setDrawerVal, setSelect }) => {
    const record = useRecordContext();
    const { filterValues } = useListContext();
    const historyClick = (event) => {
        event.stopPropagation();
        setDrawerVal(true)
rsf-admin/src/page/task/TaskItemList.jsx
@@ -58,6 +58,9 @@
    <TextInput source="matnrCode" label="table.field.taskItem.matnrCode" />,
    <TextInput source="unit" label="table.field.taskItem.unit" />,
    <NumberInput source="anfme" label="table.field.taskItem.anfme" />,
    <TextInput source="platOrderCode" label="table.field.asnOrderItem.platOrderCode" />,
    <TextInput source="platWorkCode" label="table.field.asnOrderItem.platWorkCode" />,
    <TextInput source="projectCode" label="table.field.asnOrderItem.projectCode" />,
    <TextInput source="batch" label="table.field.taskItem.batch" />,
    <TextInput source="spec" label="table.field.taskItem.spec" />,
    <TextInput source="model" label="table.field.taskItem.model" />,
@@ -149,6 +152,9 @@
                <TextField source="matnrCode" label="table.field.taskItem.matnrCode" />,
                <TextField source="unit" label="table.field.taskItem.unit" />,
                <NumberField source="anfme" label="table.field.taskItem.anfme" />,
                <TextField source="platOrderCode" label="table.field.asnOrderItem.platOrderCode" />,
                <TextField source="platWorkCode" label="table.field.asnOrderItem.platWorkCode" />,
                <TextField source="projectCode" label="table.field.asnOrderItem.projectCode" />,
                <TextField source="batch" label="table.field.taskItem.batch" />,
                <TextField source="isptResult$" label="table.field.taskItem.isptResult" />,
                <TextField source="spec" label="table.field.taskItem.spec" />,
@@ -193,7 +199,7 @@
                    rowClick={false}
                    // expand={() => <TaskItemPanel />}
                    expandSingle={true}
                    omit={['id', 'createTime', 'createBy', 'memo', 'taskId', 'orderId', 'orderItemId', 'matnrId']}
                    omit={['id', 'createTime', 'createBy', 'memo', 'taskId', 'orderId', 'orderItemId', 'matnrId', 'platWorkCode', 'projectCode']}
                >
                    {columns.map((column) => column)}
                </StyledDatagrid>}
rsf-admin/src/page/task/TaskList.jsx
@@ -18,6 +18,7 @@
    TextField,
    NumberField,
    DateField,
    AutocompleteInput,
    BooleanField,
    TextInput,
    DateInput,
@@ -55,40 +56,46 @@
    },
}));
const filters = [
    <SearchInput source="condition" alwaysOn />,
    <DateInput label='common.time.after' source="timeStart" />,
    <DateInput label='common.time.before' source="timeEnd" />,
    <TextInput source="taskCode" label="table.field.task.taskCode" />,
    <NumberInput source="taskStatus" label="table.field.task.taskStatus" />,
    <NumberInput source="taskType" label="table.field.task.taskType" />,
    <TextInput source="orgLoc" label="table.field.task.orgLoc" />,
    <TextInput source="orgSite" label="table.field.task.orgSite" />,
    <TextInput source="targLoc" label="table.field.task.targLoc" />,
    <TextInput source="targSite" label="table.field.task.targSite" />,
    <TextInput source="barcode" label="table.field.task.barcode" />,
    <TextInput source="robotCode" label="table.field.task.robotCode" />,
    <NumberInput source="exceStatus" label="table.field.task.exceStatus" />,
    <TextInput source="expDesc" label="table.field.task.expDesc" />,
    <NumberInput source="sort" label="table.field.task.sort" />,
    <TextInput source="expCode" label="table.field.task.expCode" />,
    <DateInput source="startTime" label="table.field.task.startTime" />,
    <DateInput source="endTime" label="table.field.task.endTime" />,
    <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 TaskList = (props) => {
    const translate = useTranslate();
    const [drawerVal, setDrawerVal] = useState(false);
    const dict = JSON.parse(localStorage.getItem('sys_dicts'))?.filter(dict => (dict.dictTypeCode == 'sys_warehouse_type')) || [];
    const filters = [
        <SearchInput source="condition" alwaysOn />,
        <DateInput label='common.time.after' source="timeStart" />,
        <DateInput label='common.time.before' source="timeEnd" />,
        <TextInput source="taskCode" label="table.field.task.taskCode" />,
        <NumberInput source="taskStatus" label="table.field.task.taskStatus" />,
        <NumberInput source="taskType" label="table.field.task.taskType" />,
        <AutocompleteInput choices={dict} optionText='label' optionValue="value" source="warehType" label="table.field.task.warehType" />,
        <TextInput source="orgLoc" label="table.field.task.orgLoc" />,
        <TextInput source="orgSite" label="table.field.task.orgSite" />,
        <TextInput source="targLoc" label="table.field.task.targLoc" />,
        <TextInput source="targSite" label="table.field.task.targSite" />,
        <TextInput source="barcode" label="table.field.task.barcode" />,
        <TextInput source="robotCode" label="table.field.task.robotCode" />,
        <NumberInput source="exceStatus" label="table.field.task.exceStatus" />,
        <TextInput source="expDesc" label="table.field.task.expDesc" />,
        <NumberInput source="sort" label="table.field.task.sort" />,
        <TextInput source="expCode" label="table.field.task.expCode" />,
        <DateInput source="startTime" label="table.field.task.startTime" />,
        <DateInput source="endTime" label="table.field.task.endTime" />,
        <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
        />,
    ]
    return (
        <Box display="flex">
            <List
@@ -130,6 +137,7 @@
                    <TextField source="taskCode" label="table.field.task.taskCode" />
                    <NumberField source="taskStatus$" label="table.field.task.taskStatus" />
                    <NumberField source="taskType$" label="table.field.task.taskType" />
                    <NumberField source="warehType$" label="table.field.task.taskType" />
                    <TextField source="orgLoc" label="table.field.task.orgLoc" />
                    <TextField source="orgSite" label="table.field.task.orgSite" />
                    <TextField source="targLoc" label="table.field.task.targLoc" />
rsf-admin/src/page/waitPakin/WaitPakinItemList.jsx
@@ -67,6 +67,9 @@
    <TextInput source="maktx" label="table.field.waitPakinItem.maktx" />,
    <NumberInput source="matnrId" label="table.field.waitPakinItem.matnrId" />,
    <TextInput source="matnrCode" label="table.field.waitPakinItem.matnrCode" />,
    <TextInput source="platOrderCode" label="table.field.asnOrderItem.platOrderCode" />,
    <TextInput source="platWorkCode" label="table.field.asnOrderItem.platWorkCode" />,
    <TextInput source="projectCode" label="table.field.asnOrderItem.projectCode" />,
    <NumberInput source="anfme" label="table.field.waitPakinItem.anfme" />,
    <NumberInput source="workQty" label="table.field.waitPakinItem.workQty" />,
    <TextInput source="unit" label="table.field.waitPakinItem.unit" />,
@@ -160,6 +163,9 @@
                <NumberField source="matnrId" label="table.field.waitPakinItem.matnrId" />,
                <NumberField source="anfme" label="table.field.waitPakinItem.anfme" />,
                <TextField source="unit" label="table.field.waitPakinItem.unit" />,
                <TextField source="platOrderCode" label="table.field.asnOrderItem.platOrderCode" />,
                <TextField source="platWorkCode" label="table.field.asnOrderItem.platWorkCode" />,
                <TextField source="projectCode" label="table.field.asnOrderItem.projectCode" />,
                <NumberField source="workQty" label="table.field.waitPakinItem.workQty" />,
                <NumberField source="qty" label="table.field.waitPakinItem.qty" />,
                <TextField source="fieldsIndex" label="table.field.waitPakinItem.fieldsIndex" />,
@@ -197,7 +203,7 @@
                    preferenceKey='waitPakinItem'
                    bulkActionButtons={false}
                    rowClick={(id, resource, record) => false}
                    omit={['id', 'pakinId', 'createTime', 'matnrId', 'createBy', 'memo', 'fieldsIndex']}
                    omit={['id', 'pakinId', 'createTime', 'matnrId', 'createBy', 'memo', 'fieldsIndex', 'platWorkCode', 'projectCode']}
                >
                    {columns.map((column) => column)}
                </StyledDatagrid>}
rsf-admin/src/page/warehouseAreasItem/WarehouseAreasItemList.jsx
@@ -73,6 +73,9 @@
    <TextInput source="barcode" label="table.field.warehouseAreasItem.barcode" />,
    <NumberInput source="anfme" label="table.field.warehouseAreasItem.anfme" />,
    <TextInput source="batch" label="table.field.warehouseAreasItem.batch" />,
    <TextInput source="platOrderCode" label="table.field.asnOrderItem.platOrderCode" />,
    <TextInput source="platWorkCode" label="table.field.asnOrderItem.platWorkCode" />,
    <TextInput source="projectCode" label="table.field.asnOrderItem.projectCode" />,
    <TextInput source="unit" label="table.field.warehouseAreasItem.unit" />,
    <TextInput source="stockUnit" label="table.field.warehouseAreasItem.stockUnit" />,
    <TextInput source="brand" label="table.field.warehouseAreasItem.brand" />,
@@ -181,6 +184,9 @@
                <NumberField key="anfme" source="anfme" label="table.field.warehouseAreasItem.anfme" />,
                <NumberField key="workQty" source="workQty" label="table.field.warehouseAreasItem.workQty" />,
                <NumberField key="qty" source="qty" label="table.field.warehouseAreasItem.qty" />,
                <TextField source="platOrderCode" label="table.field.asnOrderItem.platOrderCode" />,
                <TextField source="platWorkCode" label="table.field.asnOrderItem.platWorkCode" />,
                <TextField source="projectCode" label="table.field.asnOrderItem.projectCode" />,
                // <MyField source="isptQty" label="table.field.qlyIsptItem.anfme"
                //     onClick={(event, record, val) => {
                //         event.stopPropagation();
@@ -211,13 +217,13 @@
            setColumns([...arr, ...fields, ...lastArr]);
            //filters添加过滤字段
            data.map(el => {
                var i =0;
                filters.map((item) =>{
                    if(item.key === el.fields){
                      i = 1;
                var i = 0;
                filters.map((item) => {
                    if (item.key === el.fields) {
                        i = 1;
                    }
                })
                i===0 && filters.push(<TextInput key={el.fields} source={el.fields} label={el.fieldsAlise} />)
                i === 0 && filters.push(<TextInput key={el.fields} source={el.fields} label={el.fieldsAlise} />)
            })
        } else {
            notify(msg);
@@ -242,7 +248,7 @@
                    preferenceKey='warehouseAreasItem'
                    bulkActionButtons={false}
                    rowClick={(id, resource, record) => false}
                    omit={['id', 'createTime', 'memo', 'areaId', 'brand', 'createBy$', 'weight', 'matnrId', 'batch', 'shipperId', 'splrId']}
                    omit={['id', 'createTime', 'memo', 'areaId', 'brand', 'createBy$', 'weight', 'matnrId', 'batch', 'shipperId', 'splrId', 'platWorkCode', 'projectCode']}
                >
                    {columns.map((column) => column)}
                </StyledDatagrid>}
rsf-server/src/main/java/com/vincent/rsf/server/api/controller/WcsController.java
@@ -38,7 +38,7 @@
        if (Cools.isEmpty(param.getLocType1())){
            return R.error("高低检测信号不能为空");
        }
        InTaskMsgDto msgDto = wcsService.createInTask(param,getLoginUserId());
        InTaskMsgDto msgDto = wcsService.createInTask(param);
        return R.ok(msgDto);
@@ -56,7 +56,7 @@
        if (Cools.isEmpty(param.getBarcode())) {
            return R.error("条码不能为空");
        }
        if (param.getIoType().equals(TaskType.TASK_TYPE_AGV_IN.type)) {
        if (!param.getIoType().equals(TaskType.TASK_TYPE_IN.type)) {
            return R.error("入库类型有误");
        }
        wcsService.agvTaskPickUpComplete(param);
rsf-server/src/main/java/com/vincent/rsf/server/api/controller/params/TaskInParam.java
@@ -9,6 +9,7 @@
    private Integer sourceStaNo; //作业站点 or 来源站点
    private String barcode; //容器条码
    private Integer locType1; //库位类型
    private Long user;
//    private Integer locType2; //库位类型
//    private Integer locType3; //库位类型
}
rsf-server/src/main/java/com/vincent/rsf/server/api/service/WcsService.java
@@ -4,7 +4,7 @@
import com.vincent.rsf.server.api.controller.params.TaskInParam;
public interface WcsService {
    InTaskMsgDto createInTask(TaskInParam param, Long loginUserId);
    InTaskMsgDto createInTask(TaskInParam param);
    void agvTaskPickUpComplete(TaskInParam param);
}
rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/AgvServiceImpl.java
@@ -82,6 +82,7 @@
    @Override
    @Transactional(rollbackFor = Exception.class)
    public R AGVInTaskStart(Map<String, Object> params,Long loginUserId ) {
        String sta = params.get("sta").toString();
        String area = params.get("area").toString();
@@ -112,6 +113,13 @@
        taskService.generateAGVTasks(waitPakin,targetLoc,sta,loginUserId);
        basStation.setUseStatus(StaUseStatusType.TYPE_R.type);
        if (!basStationService.updateById(basStation)){
            throw new CoolException("更新站点状态失败");
        }
        return R.ok();
    }
rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java
@@ -365,6 +365,9 @@
                .setProdTime(dto.getProdTime())
                .setSplrId(companys.getId())
                .setWeight(dto.getWeigth())
                .setPlatOrderCode(orderItem.getPlatOrderCode())
                .setPlatWorkCode(orderItem.getPlatWorkCode())
                .setProjectCode(orderItem.getProjectCode())
                //库存单位为最小单位
                .setUnit(orderItem.getStockUnit())
                .setStockUnit(orderItem.getStockUnit())
@@ -940,8 +943,8 @@
//        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(!Cools.isEmpty(params.get("barcode")),WaitPakin::getBarcode, params.get("barcode").toString())
                .eq(!Cools.isEmpty(params.get("code")),WaitPakin::getCode, params.get("code").toString())
                .eq(!Cools.isEmpty(params.get("barcode")),WaitPakin::getBarcode, params.get("barcode"))
                .eq(!Cools.isEmpty(params.get("code")),WaitPakin::getCode, params.get("code"))
                .eq(WaitPakin::getIoStatus, PakinIOStatus.PAKIN_IO_STATUS_DONE.val));
        if (Objects.isNull(waitPakin)) {
            return R.error("未找到该容器码的组托明细,请检查组托状态");
rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/WcsServiceImpl.java
@@ -83,7 +83,7 @@
    @Override
    @Transactional(rollbackFor = Exception.class)
    public InTaskMsgDto createInTask(TaskInParam param, Long loginUserId) {
    public InTaskMsgDto createInTask(TaskInParam param) {
        // 获取库位号
        InTaskMsgDto locNo = getLocNo(param);
@@ -98,7 +98,7 @@
        // 创建并保存任务
        Task task = createTask(ruleCode, locNo.getLocNo(), waitPakin.getBarcode(),
                deviceSite.getDeviceSite(), param.getSourceStaNo().toString(), loginUserId);
                deviceSite.getDeviceSite(), param.getSourceStaNo().toString(), param.getUser());
        // 更新库位状态
        updateLocStatus(task.getTargLoc(), waitPakin.getBarcode());
@@ -107,10 +107,10 @@
        List<WaitPakinItem> waitPakinItems = getWaitPakinItems(waitPakin.getId());
        // 创建并保存任务明细
        saveTaskItems(task.getId(), waitPakinItems, loginUserId);
        saveTaskItems(task.getId(), waitPakinItems, param.getUser());
        // 更新组托状态
        updateWaitPakinStatus(param.getBarcode(), loginUserId);
        updateWaitPakinStatus(param.getBarcode(), param.getUser());
        // 设置工作单号并返回
        locNo.setWorkNo(ruleCode);
rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/BasStationController.java
@@ -33,13 +33,16 @@
        PageParam<BasStation, BaseParam> pageParam = new PageParam<>(baseParam, BasStation.class);
        PageParam<BasStation, BaseParam> page = basStationService.page(pageParam, pageParam.buildWrapper(true));
        for (BasStation station : page.getRecords()) {
            String content = station.getCrossZoneArea().substring(1, station.getCrossZoneArea().length() - 1);
            String[] parts = content.split(",");
            Long[] longArray = new Long[parts.length];
            for (int i = 0; i < parts.length; i++) {
                longArray[i] = Long.parseLong(parts[i].trim());
            if (!Cools.isEmpty(station.getCrossZoneArea())) {
                String content = station.getCrossZoneArea().substring(1, station.getCrossZoneArea().length() - 1);
                String[] parts = content.split(",");
                Long[] longArray = new Long[parts.length];
                for (int i = 0; i < parts.length; i++) {
                    longArray[i] = Long.parseLong(parts[i].trim());
                }
                station.setAreaIds(longArray);
            }
            station.setAreaIds(longArray);
        }
        return R.ok().add(page);
    }
@@ -85,6 +88,9 @@
        if (!Cools.isEmpty(serviceOne)) {
            return R.error(basStation.getStationName()+"站已被初始化");
        }
        if (null !=basStation.getAreaIds()){
            basStation.setCrossZoneArea(Arrays.toString(basStation.getAreaIds()));
        }
        if (!basStationService.save(basStation)) {
            return R.error("保存失败");
        }
rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/TaskController.java
@@ -6,21 +6,15 @@
import com.vincent.rsf.framework.common.Cools;
import com.vincent.rsf.framework.common.R;
import com.vincent.rsf.framework.exception.CoolException;
import com.vincent.rsf.server.manager.enums.TaskStsType;
import com.vincent.rsf.server.manager.entity.*;
import com.vincent.rsf.server.manager.enums.*;
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.Loc;
import com.vincent.rsf.server.manager.entity.Task;
import com.vincent.rsf.server.manager.entity.TaskItem;
import com.vincent.rsf.server.manager.entity.WaitPakin;
import com.vincent.rsf.server.manager.enums.PakinIOStatus;
import com.vincent.rsf.server.manager.service.LocService;
import com.vincent.rsf.server.manager.service.TaskItemService;
import com.vincent.rsf.server.manager.service.TaskService;
import com.vincent.rsf.server.manager.service.WaitPakinService;
import com.vincent.rsf.server.manager.service.*;
import com.vincent.rsf.server.manager.service.impl.BasStationServiceImpl;
import com.vincent.rsf.server.system.controller.BaseController;
import com.vincent.rsf.server.system.enums.LocStsType;
import io.swagger.annotations.ApiOperation;
@@ -46,6 +40,8 @@
    @Autowired
    private LocService locService;
    @Autowired
    private BasStationService basStationService;
    @PreAuthorize("hasAuthority('manager:task:list')")
    @PostMapping("/task/page")
@@ -120,7 +116,8 @@
            if (null != waitPakin) {
                waitPakin.setIoStatus(Short.valueOf(PakinIOStatus.PAKIN_IO_STATUS_DONE.val));
                if (!waitPakinService.updateById(waitPakin)) {
                    return R.error("更新组托状态失败");
                    throw new CoolException("更新组托状态失败!!");
                }
            }
            Loc loc = locService.getOne(new LambdaQueryWrapper<Loc>()
@@ -132,9 +129,41 @@
                loc.setUseStatus(LocStsType.LOC_STS_TYPE_O.type);
                if (!locService.updateById(loc)) {
                    return R.error("更新库位状态失败");
                    throw new CoolException("更新库位状态失败!!");
                }
            }
            if (task.getWarehType().equals(WarehType.WAREHOUSE_TYPE_AGV.id)){
                BasStation basStation = null;
                if (task.getTaskType().equals(TaskType.TASK_TYPE_IN.type)
                        || task.getTaskType().equals(TaskType.TASK_TYPE_EMPITY_IN.type)
                ){
                    basStation = basStationService.getOne(new LambdaQueryWrapper<BasStation>()
                            .eq(BasStation::getStationName, task.getOrgSite())
                            .eq(BasStation::getUseStatus, StaUseStatusType.TYPE_R.type)
                    );
                } else if (task.getTaskType().equals(TaskType.TASK_TYPE_OUT.type)
                        || task.getTaskType().equals(TaskType.TASK_TYPE_PICK_AGAIN_IN.type)
                        || task.getTaskType().equals(TaskType.TASK_TYPE_MERGE_OUT.type)
                        || task.getTaskType().equals(TaskType.TASK_TYPE_CHECK_OUT.type)
                        || task.getTaskType().equals(TaskType.TASK_TYPE_EMPITY_OUT.type)
                ) {
                    basStation = basStationService.getOne(new LambdaQueryWrapper<BasStation>()
                            .eq(BasStation::getStationName, task.getTargLoc())
                            .eq(BasStation::getUseStatus, StaUseStatusType.TYPE_R.type)
                    );
                }
                if (null == basStation) {
                    throw new CoolException("站点状态错误!!");
                }
                basStation.setUseStatus(StaUseStatusType.TYPE_F.type);
                if (!basStationService.updateById(basStation)){
                    throw new CoolException("更新站点状态失败!!");
                }
            }
        }
        if (!taskService.removeByIds(Arrays.asList(ids))) {
            return R.error("Delete Fail");
rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/WarehouseStockController.java
@@ -11,10 +11,12 @@
import com.vincent.rsf.server.manager.controller.params.WarehouseStockParam;
import com.vincent.rsf.server.manager.entity.StockItem;
import com.vincent.rsf.server.manager.entity.ViewStockManage;
import com.vincent.rsf.server.manager.entity.WarehouseAreasItem;
import com.vincent.rsf.server.manager.enums.ViewStockType;
import com.vincent.rsf.server.manager.service.WarehouseStockService;
import com.vincent.rsf.server.system.controller.BaseController;
import io.swagger.annotations.Api;
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.PostMapping;
@@ -44,7 +46,7 @@
        BaseParam baseParam = buildParam(param, BaseParam.class);
        PageParam<ViewStockManage, BaseParam> pageParam = new PageParam<>(baseParam, ViewStockManage.class);
        WarehouseStockParam stockParam = JSONObject.parseObject(JSONObject.toJSONString(param), WarehouseStockParam.class);
        String type = stockParam.getAggType();
        String type = Objects.isNull(stockParam.getAggType()) ? ViewStockType.VIEW_STOCK_TYPE_MATNR.val : stockParam.getAggType();
        ViewStockManage stock = stockParam.getStock();
        QueryWrapper<ViewStockManage> wrapper = new QueryWrapper<>();
@@ -59,6 +61,9 @@
        } else {
            wrapper.groupBy("matnr_id");
        }
        FieldsUtils.setFieldsFilters(wrapper, pageParam, ViewStockManage.class);
        IPage<ViewStockManage> pageResult = warehouseStockService.pageByStock(pageParam, wrapper);
        List<ViewStockManage> records = pageResult.getRecords();
        for (ViewStockManage record : records) {
@@ -82,7 +87,7 @@
        BaseParam baseParam = buildParam(param, BaseParam.class);
        PageParam<StockItem, BaseParam> pageParam = new PageParam<>(baseParam, StockItem.class);
        WarehouseStockParam stockParam = JSONObject.parseObject(JSONObject.toJSONString(param), WarehouseStockParam.class);
        String type = stockParam.getAggType();
        String type = Objects.isNull(stockParam.getAggType()) ? ViewStockType.VIEW_STOCK_TYPE_MATNR.val : stockParam.getAggType();
        ViewStockManage stock = stockParam.getStock();
        QueryWrapper<StockItem> wrapper = new QueryWrapper<>();
@@ -120,7 +125,7 @@
        BaseParam baseParam = buildParam(param, BaseParam.class);
        PageParam<ViewStockManage, BaseParam> pageParam = new PageParam<>(baseParam, ViewStockManage.class);
        WarehouseStockParam stockParam = JSONObject.parseObject(JSONObject.toJSONString(param), WarehouseStockParam.class);
        String type = stockParam.getAggType();
        String type = Objects.isNull(stockParam.getAggType()) ? ViewStockType.VIEW_STOCK_TYPE_MATNR.val : stockParam.getAggType();
        if (Objects.isNull(type)) {
            return R.error("参数不能为空!!");
        }
@@ -134,7 +139,11 @@
       } else if (type.equals(ViewStockType.VIEW_STOCK_TYPE_WAREHOUSE.val)) {
            wrapper.eq(ViewStockManage::getWarehouse, stock.getWarehouse());
       } else if (type.equals(ViewStockType.VIEW_STOCK_TYPE_FIELDSINDEX.val)) {
            wrapper.eq(ViewStockManage::getFieldsIndex, stock.getFieldsIndex());
            if (StringUtils.isBlank(stock.getFieldsIndex())) {
                wrapper.isNull(ViewStockManage::getFieldsIndex);
            } else {
                wrapper.eq(ViewStockManage::getFieldsIndex, stock.getFieldsIndex());
            }
        } else {
            wrapper.eq(ViewStockManage::getMatnrCode, stock.getMatnrCode());
       }
rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrderItem.java
@@ -43,13 +43,21 @@
    private Long asnId;
    /**
     * 平台标识(行号)
     */
    @ApiModelProperty(value = "平台标识(行号)")
    private String platItemId;
    @ApiModelProperty("客户订单号")
    private String platOrderCode;
    @ApiModelProperty("工单号")
    private String platWorkCode;
    @ApiModelProperty("项目号")
    private String projectCode;
    /**
     * 扩展字段
     */
rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/QlyIsptItem.java
@@ -90,6 +90,15 @@
    @ApiModelProperty("质检数量")
    private Double anfme;
    @ApiModelProperty("客户订单号")
    private String platOrderCode;
    @ApiModelProperty("工单号")
    private String platWorkCode;
    @ApiModelProperty("项目号")
    private String projectCode;
    /**
     * 送货数量
     */
rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/Task.java
@@ -56,6 +56,10 @@
    @ApiModelProperty(value= "任务状态")
    private Short taskStatus;
    @ApiModelProperty("仓库类型")
    private Short warehType;
    /**
     * 任务类型
     */
rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/TaskItem.java
@@ -68,6 +68,18 @@
    @ApiModelProperty("单据ID")
    private Long orderId;
    @ApiModelProperty("行号")
    private String platItemId;
    @ApiModelProperty("客户订单号")
    private String platOrderCode;
    @ApiModelProperty("工单号")
    private String platWorkCode;
    @ApiModelProperty("项目号")
    private String projectCode;
    @ApiModelProperty("单据类型")
    private String orderType;
rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/TaskItemLog.java
@@ -65,6 +65,19 @@
    @ApiModelProperty(value= "物料名称")
    private String maktx;
    @ApiModelProperty("行号")
    private String platItemId;
    @ApiModelProperty("客户订单号")
    private String platOrderCode;
    @ApiModelProperty("工单号")
    private String platWorkCode;
    @ApiModelProperty("项目号")
    private String projectCode;
    /**
     * 物料编码
     */
rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/ViewStockManage.java
@@ -1,6 +1,10 @@
package com.vincent.rsf.server.manager.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.vincent.rsf.framework.common.Cools;
import com.vincent.rsf.framework.common.SpringUtils;
import com.vincent.rsf.server.manager.service.MatnrService;
import com.vincent.rsf.server.manager.service.WarehouseService;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;
@@ -28,7 +32,6 @@
    private String locCode;
    @ApiModelProperty("仓库")
    @TableField(exist = false)
    private String warehouse;
    @ApiModelProperty("单据类型")
@@ -92,4 +95,17 @@
    @TableField(exist = false)
    private Map<String, String> extendFields;
    public String getWarehouse$(){
        WarehouseService service = SpringUtils.getBean(WarehouseService.class);
        Warehouse warehouse = service.getById(this.warehouse);
        if (!Cools.isEmpty(warehouse)){
            return String.valueOf(warehouse.getName());
        }
        return null;
    }
}
rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/WaitPakinItem.java
@@ -82,6 +82,18 @@
    @ApiModelProperty("物料跟踪码")
    private String trackCode;
    @ApiModelProperty("行号")
    private String platItemId;
    @ApiModelProperty("客户订单号")
    private String platOrderCode;
    @ApiModelProperty("工单号")
    private String platWorkCode;
    @ApiModelProperty("项目号")
    private String projectCode;
    /**
     * 物料名称
     */
rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/WarehouseAreasItem.java
@@ -85,6 +85,15 @@
    @ApiModelProperty(value = "扩展字段唯一标识")
    private String fieldsIndex;
    @ApiModelProperty("客户订单号")
    private String platOrderCode;
    @ApiModelProperty("工单号")
    private String platWorkCode;
    @ApiModelProperty("项目号")
    private String projectCode;
    /**
     * 物料名称
     */
rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/excel/AsnOrderTemplate.java
@@ -54,6 +54,20 @@
    @ExcelComment(value = "platItemId", example = "1357564255478")
    private String platItemId;
    @Excel(name = "客户订单号")
    @ApiModelProperty("客户订单号")
    @ExcelComment(value = "platOrderCode", example = "PT202564713301")
    private String platOrderCode;
    @Excel(name = "工单号")
    @ApiModelProperty("工单号")
    @ExcelComment(value = "platWorkCode", example = "PWC2354894211")
    private String platWorkCode;
    @Excel(name = "项目号")
    @ApiModelProperty("项目号")
    @ExcelComment(value = "projectCode", example = "PC2365845636001")
    private String projectCode;
    /**
     * 单据类型
rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/StaUseStatusType.java
@@ -4,6 +4,8 @@
    //订单类型
    TYPE_O("O", "空闲"),
    TYPE_F("F", "占用"),
    TYPE_S("S", "预约入站"),
    TYPE_R("R", "预约出站"),
    TYPE_X("X", "禁用"),
    ;
rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/TaskStsType.java
@@ -17,7 +17,9 @@
//
//    WCS_PUTAWAY_SUSPEND(13L, "入库任务挂起"),
    COMPLETE_IN("99", "入库完成"),
    COMPLETE_IN("98", "入库完成"),
    REPORT_IN("99", "上报完成"),
    UPDATED_IN("100", "库存更新完成"),
rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/TaskType.java
@@ -10,15 +10,13 @@
public enum TaskType {
    TASK_TYPE_IN("1", "入库"),
    TASK_TYPE_FLAT_WAREHOUSE_IN("2", "平库上架"),
    TASK_TYPE_AGV_IN("3", "AGV入库"),
    TASK_TYPE_EMPITY_IN("10", "空板入库"),
    TASK_TYPE_LOC_MOVE("11", "库格移载"),
    TASK_TYPE_PICK_IN("53", "拣料再入库"),
    TASK_TYPE_MERGE_IN("54", "并板再入库"),
    TASK_TYPE_CHECK_IN("57", "盘点再入库"),
    TASK_TYPE_OUT("101", "出库"),
    TASK_TYPE_PICK_AGAIN_IN("103", "拣料入库"),
    TASK_TYPE_PICK_AGAIN_IN("103", "拣料出库"),
    TASK_TYPE_MERGE_OUT("104", "并板出库"),
    TASK_TYPE_CHECK_OUT("107", "盘点出库"),
    TASK_TYPE_EMPITY_OUT("110", "空板出库"),
rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/WarehType.java
New file
@@ -0,0 +1,21 @@
package com.vincent.rsf.server.manager.enums;
public enum WarehType {
    //仓库类型
    WAREHOUSE_TYPE_FOUR_DIRECTIONS("1", "四向库"),
    WAREHOUSE_TYPE_AGV("2", "AGV库"),
    WAREHOUSE_TYPE_CTU("3", "CTU库"),
    WAREHOUSE_TYPE_PLAT("4", "平库"),
    WAREHOUSE_TYPE_CRN("5", "堆垛机库"),
    ;
    public Short id;
    public String desc;
    WarehType(String id, String desc) {
        this.id = Short.parseShort(id);
        this.desc = desc;
    }
}
rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/ScheduleJobs.java
@@ -159,6 +159,9 @@
                .setAsnCode(asnOrder.getCode())
                .setAsnId(asnOrder.getId())
                .setProdTime(orderItem.getProdTime())
                .setPlatOrderCode(orderItem.getPlatOrderCode())
                .setPlatWorkCode(orderItem.getPlatWorkCode())
                .setProjectCode(orderItem.getProjectCode())
                .setSplrId(companys.getId())
                //库存单位为最小单位
                .setUnit(orderItem.getStockUnit())
rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskSchedules.java
@@ -5,6 +5,9 @@
import com.vincent.rsf.server.manager.enums.TaskStsType;
import com.vincent.rsf.server.manager.entity.*;
import com.vincent.rsf.server.manager.service.*;
import com.vincent.rsf.server.system.constant.GlobalConfigCode;
import com.vincent.rsf.server.system.entity.Config;
import com.vincent.rsf.server.system.service.ConfigService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
@@ -13,6 +16,7 @@
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
/**
@@ -42,6 +46,8 @@
    private StockService stockService;
    @Autowired
    private LocService locService;
    @Autowired
    private ConfigService configService;
    /**
    * @author Ryan
    * @description 完成入库,更新库存
@@ -50,7 +56,7 @@
    * @time 2025/4/2 12:37
    */
//    @Scheduled(cron = "0 0/05 * * * ?  ")
    @Scheduled(cron = "0/15 * * * * ?")
    @Scheduled(cron = "0/3 * * * * ?")
    @Transactional(rollbackFor = Exception.class)
    public void completeInStock() throws Exception {
        List<Task> tasks = taskService.list(new LambdaQueryWrapper<Task>().eq(Task::getTaskStatus, TaskStsType.COMPLETE_IN.id));
@@ -71,10 +77,22 @@
    @Scheduled(cron = "0 0/05 * * * ?  ")
    @Transactional(rollbackFor = Exception.class)
    public void taskLogUpdate() {
        List<Task> tasks = taskService.list(new LambdaQueryWrapper<Task>().eq(Task::getTaskStatus, TaskStsType.UPDATED_IN.id));
        LambdaQueryWrapper<Task> queryWrapper = new LambdaQueryWrapper<Task>();
        Config config = configService.getOne(new LambdaQueryWrapper<Config>().eq(Config::getFlag, GlobalConfigCode.ORDER_INOF_REPORT_PLAT));
        if (!Objects.isNull(config)) {
            if (Boolean.parseBoolean(config.getVal())) {
                queryWrapper.eq(Task::getTaskStatus, TaskStsType.REPORT_IN.id);
            } else {
                queryWrapper.eq(Task::getTaskStatus, TaskStsType.UPDATED_IN.id);
            }
        } else {
            queryWrapper.eq(Task::getTaskStatus, TaskStsType.UPDATED_IN.id);
        }
        List<Task> tasks = taskService.list(queryWrapper);
        if (tasks.isEmpty()) {
            return;
        }
        List<Long> list = tasks.stream().map(Task::getId).collect(Collectors.toList());
        List<TaskItem> taskItems = taskItemService.list(new LambdaQueryWrapper<TaskItem>().in(TaskItem::getTaskId, list));
        if (taskItems.isEmpty()) {
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderItemServiceImpl.java
@@ -172,6 +172,9 @@
                        .setIsptResult(QlyIsptResult.getDescVal(orderTemplate.getIsptResult()))
//                        .setTrackCode(trackCode)
                        .setBarcode(trackCode)
                        .setPlatOrderCode(orderTemplate.getPlatOrderCode())
                        .setPlatWorkCode(orderTemplate.getPlatWorkCode())
                        .setProjectCode(orderTemplate.getProjectCode())
                        .setPoCode(orderTemplate.getPoCode())
                        .setPurUnit(matnr.getUnit())
                        .setCreateBy(loginUserId)
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/QlyInspectServiceImpl.java
@@ -113,7 +113,7 @@
                        .select("asn_id as id, SUM(anfme) anfme, SUM(qty) qty, area_id, area_name, asn_code, asn_id, splr_id, splr_batch")
                        .eq(StringUtils.isNotBlank(code), "asn_code", code)
                        .lambda()
                        .isNull(WarehouseAreasItem::getIsptResult)
//                        .isNull(WarehouseAreasItem::getIsptResult)
                        .lt(WarehouseAreasItem::getWorkQty, 1)
                        .lt(WarehouseAreasItem::getQty, 1)
                .groupBy(WarehouseAreasItem::getAsnCode));
@@ -176,11 +176,15 @@
                        .setIspectId(inspect.getId())
                        .setRcptQty(orderItem.getAnfme())
                        .setRcptId(orderItem.getId())
                        .setPlatOrderCode(orderItem.getPlatOrderCode())
                        .setPlatWorkCode(orderItem.getPlatWorkCode())
                        .setProjectCode(orderItem.getProjectCode())
                        .setAnfme(0.0)
                        .setFieldsIndex(orderItem.getFieldsIndex())
                        .setSplrBatch(orderItem.getSplrBatch())
                        .setSplrName(orderItem.getSplrId$())
                        .setCreateBy(loginUserId)
                        .setUpdateBy(loginUserId)
                        .setDlyQty(orderItem.getAnfme());
                items.add(isptItem);
            }
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java
@@ -3,15 +3,12 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.vincent.rsf.framework.common.Cools;
import com.vincent.rsf.server.manager.enums.OrderType;
import com.vincent.rsf.server.manager.enums.TaskStsType;
import com.vincent.rsf.server.manager.enums.*;
import com.vincent.rsf.framework.common.R;
import com.vincent.rsf.framework.exception.CoolException;
import com.vincent.rsf.server.manager.enums.TaskType;
import com.vincent.rsf.server.api.utils.LocUtils;
import com.vincent.rsf.server.manager.controller.params.GenerateTaskParams;
import com.vincent.rsf.server.manager.entity.*;
import com.vincent.rsf.server.manager.enums.PakinIOStatus;
import com.vincent.rsf.server.manager.mapper.TaskMapper;
import com.vincent.rsf.server.manager.service.*;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -93,7 +90,8 @@
            Task task = new Task();
            task.setTaskCode(ruleCode)
                    .setTaskStatus(TaskStsType.GENERATE_IN.id.shortValue())
                    .setTaskType(TaskType.TASK_TYPE_AGV_IN.type.shortValue())
                    .setTaskType(TaskType.TASK_TYPE_IN.type.shortValue())
                    .setWarehType(WarehType.WAREHOUSE_TYPE_AGV.id)
                    .setTargLoc(targetLoc)
                    .setOrgSite(orgSta)
                    .setBarcode(pakin.getBarcode())
@@ -178,7 +176,8 @@
            Task task = new Task();
            task.setTaskCode(ruleCode)
                    .setTaskStatus(TaskStsType.COMPLETE_IN.id.shortValue())
                    .setTaskType(TaskType.TASK_TYPE_FLAT_WAREHOUSE_IN.type.shortValue())
                    .setTaskType(TaskType.TASK_TYPE_IN.type.shortValue())
                    .setWarehType(WarehType.WAREHOUSE_TYPE_PLAT.id)
                    .setTargLoc(targetLoc)
                    .setBarcode(pakin.getBarcode())
                    .setCreateBy(loginUserId)
@@ -331,6 +330,10 @@
                        .setOrderType(OrderType.ORDER_IN.type)
                        .setSource(item.getId())
                        .setTrackCode(item.getTrackCode())
                        .setPlatItemId(item.getPlatItemId())
                        .setPlatOrderCode(item.getPlatOrderCode())
                        .setPlatWorkCode(item.getPlatWorkCode())
                        .setProjectCode(item.getProjectCode())
                        .setCreateBy(loginUserId)
                        .setUpdateBy(loginUserId)
                        .setExtendFields(item.getExtendFields())
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WaitPakinServiceImpl.java
@@ -118,6 +118,10 @@
                    .setAsnCode(warehouseAreasItems.getAsnCode())
                    .setAsnItemId(warehouseAreasItems.getAsnItemId())
                    .setIsptResult(warehouseAreasItems.getIsptResult())
                    .setPlatItemId(warehouseAreasItems.getPlatItemId())
                    .setPlatOrderCode(warehouseAreasItems.getPlatOrderCode())
                    .setPlatWorkCode(warehouseAreasItems.getPlatWorkCode())
                    .setProjectCode(warehouseAreasItems.getProjectCode())
                    .setBatch(warehouseAreasItems.getSplrBatch())
                    .setUnit(warehouseAreasItems.getStockUnit())
                    .setFieldsIndex(warehouseAreasItems.getFieldsIndex())
rsf-server/src/main/java/com/vincent/rsf/server/system/constant/GlobalConfigCode.java
@@ -15,4 +15,6 @@
    /**收货时是否允许超收*/
    public final static String ALLOW_OVER_CHANGE = "AllowOverchange";
    public final static String ORDER_INOF_REPORT_PLAT = "OrderInofReportPlat";
}
rsf-server/src/main/resources/mapper/manager/WarehouseStockMapper.xml
@@ -5,6 +5,7 @@
        SELECT id,
               loc_id,
               loc_code,
               warehouse,
               type,
               order_item_id,
               wk_type,