1
3 天以前 eba3ce4a22ea7bd74c6ad4a9114039c3ce43f476
Merge remote-tracking branch 'origin/devlop-phyz' into devlop-phyz

# Conflicts:
# rsf-server/src/main/java/com/vincent/rsf/server/api/controller/pda/PdaOutStockController.java
9个文件已修改
1个文件已添加
413 ■■■■ 已修改文件
rsf-admin/src/i18n/zh.js 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-admin/src/page/orders/asnOrderItem/AsnOrderItemList.jsx 49 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-admin/src/page/orders/config/orderItemColumns.jsx 138 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-admin/src/page/orders/outStockItem/OutStockItemList.jsx 49 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/api/controller/pda/AgvController.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/api/controller/pda/InBoundController.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/api/controller/pda/MobileController.java 83 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/api/controller/pda/PdaCheckOrderController.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/api/controller/pda/PdaOutStockController.java 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/common/security/SecurityConfig.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-admin/src/i18n/zh.js
@@ -720,7 +720,7 @@
                orderCode: "单号",
                matnrId: "物料标识",
                platOrderCode: '客户单号',
                platWorkCode: '工单号',
                platWorkCode: '计划跟踪号',
                projectCode: '项目号',
                maktx: "物料名称",
                spec: "规格",
@@ -778,7 +778,7 @@
                model: "型号",
                fieldsIndex: "字段索引",
                platOrderCode: "客单号",
                platWorkCode: "工单号",
                platWorkCode: "计划跟踪号",
                projectCode: "项目单号",
            },
@@ -815,7 +815,7 @@
                platItemId: '行号',
                matnrId: "物料标识",
                platOrderCode: '客户单号',
                platWorkCode: '工单号',
                platWorkCode: '计划跟踪号',
                projectCode: '项目号',
                maktx: "物料名称",
                spec: "规格",
rsf-admin/src/page/orders/asnOrderItem/AsnOrderItemList.jsx
@@ -39,8 +39,8 @@
import { styled } from '@mui/material/styles';
import PageDrawer from "../../components/PageDrawer";
import request from '@/utils/request';
import { PAGE_DRAWER_WIDTH, OPERATE_MODE, DEFAULT_PAGE_SIZE } from '@/config/setting';
import { fetchInOrderItemColumns } from '../config/orderItemColumns';
const StyledDatagrid = styled(DatagridConfigurable)(({ theme }) => ({
    '& .css-1vooibu-MuiSvgIcon-root': {
@@ -147,50 +147,11 @@
    }, []);
    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.asnOrderItem.orderId" />,
                <TextField source="orderCode" label="table.field.asnOrderItem.orderCode" />,
                // <TextField source="poDetlId" label="table.field.asnOrderItem.poDetlId" />,
                // <TextField source="poDetlCode" label="table.field.asnOrderItem.poDetlCode" />,
                <TextField source="platItemId" label="table.field.asnOrderItem.platItemId" />,
                <TextField source="matnrId" label="table.field.asnOrderItem.matnrId" />,
                <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" />,
                <NumberField source="qty" label="table.field.asnOrderItem.qty" />,
                <TextField source="stockUnit" label="table.field.asnOrderItem.stockUnit" />,
                <NumberField source="purQty" label="table.field.asnOrderItem.purQty" />,
                <TextField source="purUnit" label="table.field.asnOrderItem.purUnit" />,
                <TextField source="splrCode" label="table.field.asnOrderItem.splrCode" />,
                <TextField source="splrName" label="table.field.asnOrderItem.splrName" />,
                <TextField source="isptResult$" label="table.field.asnOrderItem.isptResult" />,
                <TextField source="qrcode" label="table.field.asnOrderItem.qrcode" />,
                <TextField source="trackCode" label="table.field.asnOrderItem.barcode" />,
                <TextField source="packName" label="table.field.asnOrderItem.packName" />,
            ]
            const fields = data.map(el => <TextField key={el.fields} source={`extendFields.[${el.fields}]`} label={el.fieldsAlise} />)
            const lastArr = [
                <DateField source="updateTime" label="common.field.updateTime" showTime />,
                <ReferenceField source="updateBy" label="common.field.updateBy" reference="user" link={false} sortable={false}>
                    <TextField source="nickname" />
                </ReferenceField>,
                <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 />,
            ]
            setColumns([...arr, ...fields, ...lastArr]);
        const result = await fetchInOrderItemColumns();
        if (result.success) {
            setColumns(result.columns);
        } else {
            notify(msg);
            notify(result.msg);
        }
    }
rsf-admin/src/page/orders/config/orderItemColumns.jsx
New file
@@ -0,0 +1,138 @@
import React from "react";
import {
    TextField,
    NumberField,
    DateField,
    ReferenceField,
} from 'react-admin';
import request from '@/utils/request';
/**
 * 获取出库订单明细的基础列配置
 * @returns {Array} 基础列数组
 */
export const getOutOrderItemBaseColumns = () => [
    <NumberField source="id" key="id" />, // id
    <TextField source="orderCode" label="table.field.asnOrderItem.orderCode" key="orderCode" />, // 订单号
    <TextField source="platWorkCode" label="table.field.asnOrderItem.platWorkCode" key="platWorkCode" />, //计划跟踪号
    <TextField source="splrCode" label="table.field.asnOrderItem.splrCode" key="splrCode" />, //供应商编码
    <TextField source="splrName" label="table.field.asnOrderItem.splrName" key="splrName" />, //供应商名称
    <TextField source="platItemId" label="table.field.asnOrderItem.platItemId" key="platItemId" />, //行号
    <TextField source="matnrCode" label="table.field.asnOrderItem.matnrCode" key="matnrCode" />, //物料编码
    <TextField source="maktx" label="table.field.asnOrderItem.maktx" key="maktx" />, //物料名称
    <TextField source="splrBatch" label="table.field.asnOrderItem.splrBatch" key="splrBatch" />, //批次
    <TextField source="spec" label="table.field.asnOrderItem.spec" key="spec" />, //规格
    <NumberField source="anfme" label="table.field.asnOrderItem.anfme" key="anfme" />, //应收数量
    <NumberField source="qty" label="table.field.asnOrderItem.qty" key="qty" />, //实收数量
    <TextField source="stockUnit" label="table.field.asnOrderItem.stockUnit" key="stockUnit" />, //单位
];
/**
 * 获取入库订单明细的基础列配置
 * @returns {Array} 基础列数组
 */
export const getInOrderItemBaseColumns = () => [
    <NumberField source="id" key="id" />, // id
    <TextField source="orderCode" label="table.field.asnOrderItem.orderCode" key="orderCode" />, // 订单号
    <TextField source="platWorkCode" label="table.field.asnOrderItem.platWorkCode" key="platWorkCode" />, //计划跟踪号
    <TextField source="splrCode" label="table.field.asnOrderItem.splrCode" key="splrCode" />, //供应商编码
    <TextField source="splrName" label="table.field.asnOrderItem.splrName" key="splrName" />, //供应商名称
    <TextField source="platItemId" label="table.field.asnOrderItem.platItemId" key="platItemId" />, //行号
    <TextField source="matnrCode" label="table.field.asnOrderItem.matnrCode" key="matnrCode" />, //物料编码
    <TextField source="maktx" label="table.field.asnOrderItem.maktx" key="maktx" />, //物料名称
    <TextField source="splrBatch" label="table.field.asnOrderItem.splrBatch" key="splrBatch" />, //批次
    <TextField source="spec" label="table.field.asnOrderItem.spec" key="spec" />, //规格
    <NumberField source="anfme" label="table.field.asnOrderItem.anfme" key="anfme" />, //应收数量
    <NumberField source="qty" label="table.field.asnOrderItem.qty" key="qty" />, //实收数量
    <TextField source="stockUnit" label="table.field.asnOrderItem.stockUnit" key="stockUnit" />, //单位
];
/**
 * 获取动态扩展字段列
 * @param {Array} fieldsData - 动态字段数据
 * @returns {Array} 动态字段列数组
 */
export const getExtendFieldColumns = (fieldsData) => {
    return fieldsData.map(el => (
        <TextField
            key={el.fields}
            source={`extendFields.[${el.fields}]`}
            label={el.fieldsAlise}
        />
    ));
};
/**
 * 获取订单明细的尾部列配置(时间和操作人信息)
 * @returns {Array} 尾部列数组
 */
export const getLastColumns = () => [
    <DateField source="updateTime" label="common.field.updateTime" showTime key="updateTime" />,
    <ReferenceField source="updateBy" label="common.field.updateBy" reference="user" link={false} sortable={false} key="updateBy">
        <TextField source="nickname" />
    </ReferenceField>,
    <ReferenceField source="createBy" label="common.field.createBy" reference="user" link={false} sortable={false} key="createBy">
        <TextField source="nickname" />
    </ReferenceField>,
    <DateField source="createTime" label="common.field.createTime" showTime key="createTime" />,
];
/**
 * 组合入库订单明细所有列配置
 * @param {Array} extendFieldsData - 动态扩展字段数据
 * @returns {Array} 完整的列配置数组
 */
export const buildInOrderItemColumns = (extendFieldsData = []) => {
    return [
        ...getInOrderItemBaseColumns(),
        ...getExtendFieldColumns(extendFieldsData),
        ...getLastColumns()
    ];
};
/**
 * 组合出库订单明细所有列配置
 * @param {Array} extendFieldsData - 动态扩展字段数据
 * @returns {Array} 完整的列配置数组
 */
export const buildOutOrderItemColumns = (extendFieldsData = []) => {
    return [
        ...getOutOrderItemBaseColumns(),
        ...getExtendFieldColumns(extendFieldsData),
        ...getLastColumns()
    ];
};
/**
 * 获取动态字段并构建完整列配置
 * @returns {Promise<{success: boolean, columns?: Array, msg?: string}>}
 */
export const fetchInOrderItemColumns = async () => {
    try {
        const { data: { code, data, msg } } = await request.get("/fields/enable/list");
        if (code == 200) {
            return { success: true, columns: buildInOrderItemColumns(data) };
        } else {
            return { success: false, msg };
        }
    } catch (error) {
        return { success: false, msg: error.message };
    }
};
/**
 * 获取动态字段并构建完整列配置
 * @returns {Promise<{success: boolean, columns?: Array, msg?: string}>}
 */
export const fetchOutOrderItemColumns = async () => {
    try {
        const { data: { code, data, msg } } = await request.get("/fields/enable/list");
        if (code == 200) {
            return { success: true, columns: buildOutOrderItemColumns(data) };
        } else {
            return { success: false, msg };
        }
    } catch (error) {
        return { success: false, msg: error.message };
    }
};
rsf-admin/src/page/orders/outStockItem/OutStockItemList.jsx
@@ -39,8 +39,8 @@
import { styled } from '@mui/material/styles';
import PageDrawer from "../../components/PageDrawer";
import request from '@/utils/request';
import { PAGE_DRAWER_WIDTH, OPERATE_MODE, DEFAULT_PAGE_SIZE } from '@/config/setting';
import { fetchOutOrderItemColumns } from '../config/orderItemColumns';
const StyledDatagrid = styled(DatagridConfigurable)(({ theme }) => ({
    '& .css-1vooibu-MuiSvgIcon-root': {
@@ -147,50 +147,11 @@
    }, []);
    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.asnOrderItem.orderId" />,
                <TextField source="orderCode" label="table.field.asnOrderItem.orderCode" />,
                // <TextField source="poDetlId" label="table.field.asnOrderItem.poDetlId" />,
                // <TextField source="poDetlCode" label="table.field.asnOrderItem.poDetlCode" />,
                <TextField source="platItemId" label="table.field.asnOrderItem.platItemId" />,
                <TextField source="matnrId" label="table.field.asnOrderItem.matnrId" />,
                <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" />,
                <NumberField source="qty" label="table.field.asnOrderItem.qty" />,
                <TextField source="stockUnit" label="table.field.asnOrderItem.stockUnit" />,
                <NumberField source="purQty" label="table.field.asnOrderItem.purQty" />,
                <TextField source="purUnit" label="table.field.asnOrderItem.purUnit" />,
                <TextField source="splrCode" label="table.field.asnOrderItem.splrCode" />,
                <TextField source="splrName" label="table.field.asnOrderItem.splrName" />,
                <TextField source="isptResult$" label="table.field.asnOrderItem.isptResult" />,
                <TextField source="qrcode" label="table.field.asnOrderItem.qrcode" />,
                <TextField source="trackCode" label="table.field.asnOrderItem.barcode" />,
                <TextField source="packName" label="table.field.asnOrderItem.packName" />,
            ]
            const fields = data.map(el => <TextField key={el.fields} source={`extendFields.[${el.fields}]`} label={el.fieldsAlise} />)
            const lastArr = [
                <DateField source="updateTime" label="common.field.updateTime" showTime />,
                <ReferenceField source="updateBy" label="common.field.updateBy" reference="user" link={false} sortable={false}>
                    <TextField source="nickname" />
                </ReferenceField>,
                <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 />,
            ]
            setColumns([...arr, ...fields, ...lastArr]);
        const result = await fetchOutOrderItemColumns();
        if (result.success) {
            setColumns(result.columns);
        } else {
            notify(msg);
            notify(result.msg);
        }
    }
rsf-server/src/main/java/com/vincent/rsf/server/api/controller/pda/AgvController.java
@@ -25,7 +25,6 @@
    private AgvService agvService;
    @ApiOperation("站点绑定查询")
    @PreAuthorize("hasAuthority('manager:basStation:list')")
    @PostMapping("/staBind/list")
    public R getStaBindList(@RequestBody Map<String, Object> params) {
        if (Objects.isNull(params)) {
@@ -35,7 +34,6 @@
    }
    @ApiOperation("站点查询")
    @PreAuthorize("hasAuthority('manager:basStation:list')")
    @PostMapping("/staMsg/select")
    public R getStaMsgSelect(@RequestBody Map<String, Object> params) {
        if (Objects.isNull(params)) {
@@ -44,7 +42,6 @@
        return agvService.getStaMsgSelect(params);
    }
    @PreAuthorize("hasAuthority('manager:basStation:list')")
    @ApiOperation("站点绑定")
    @PostMapping("/AGV/staBind")
    public R getAGVStaBind(@RequestBody WaitPakinParam waitPakinPda) {
@@ -54,7 +51,6 @@
        return agvService.getAGVStaBind(waitPakinPda);
    }
    @PreAuthorize("hasAuthority('manager:basStation:list')")
    @ApiOperation("站点解绑")
    @PostMapping("/AGV/staUnBind")
    public R getAGVStaUnBind(@RequestBody Map<String, Object> params) {
@@ -64,7 +60,6 @@
        return agvService.AGVStaUnBind(params);
    }
    @PreAuthorize("hasAuthority('manager:basStation:list')")
    @ApiOperation("AGV启动入库")
    @PostMapping("/AGV/task/start")
    public R AGVInTaskStart(@RequestBody WaitPakinParam waitPakinPda) {
@@ -74,7 +69,6 @@
        return agvService.AGVInTaskStart(waitPakinPda, getLoginUserId());
    }
    @PreAuthorize("hasAuthority('manager:basStation:list')")
    @ApiOperation("AGV绑定&入库")
    @PostMapping("/AGV/bindAndIn/start")
    public R AGVBindAndInTaskStart(@RequestBody WaitPakinParam waitPakinPda) {
rsf-server/src/main/java/com/vincent/rsf/server/api/controller/pda/InBoundController.java
@@ -23,11 +23,10 @@
    @Autowired
    private InBoundService inBoundService;
    @PreAuthorize("hasAuthority('manager:task:list')")
    @PostMapping("/in/emptyContainer/warehousing")
    @ApiOperation("空容器入库")
    public R emptyContainerWarehousing(@RequestBody PdaGeneralParam param) {
        return inBoundService.generateTasks(param,getLoginUserId());
        return inBoundService.generateTasks(param, getLoginUserId());
    }
}
rsf-server/src/main/java/com/vincent/rsf/server/api/controller/pda/MobileController.java
@@ -49,8 +49,10 @@
    private WaitPakinService waitPakinService;
    @Autowired
    private AgvService agvService;
    /**
     * PDA用户登录
     *
     * @param param
     * @param request
     * @return
@@ -71,16 +73,15 @@
        return mobileService.login(param, request);
    }
    /**
     * 标准扫码收货信息
     *
     * @param trackCode
     * @return
     */
    @PreAuthorize("hasAuthority('manager:asnOrder:list')")
    @GetMapping("/orders/{trackCode}")
    @ApiOperation("标准扫码收货")
    public R  getOrderBybarcode(@PathVariable String trackCode) {
    public R getOrderBybarcode(@PathVariable String trackCode) {
        if (StringUtils.isEmpty(trackCode)) {
            throw new CoolException("条码不能为空!!");
        }
@@ -89,20 +90,19 @@
    /**
     * 确认收货信息
     *
     * @param params
     * @return
     */
    @PreAuthorize("hasAuthority('manager:warehouseAreas:save')")
    @PostMapping("/orders/confirm")
    @ApiOperation("确认收货")
    public R confirmReceipt(@RequestBody Map<String, Object> params) {
       if (Objects.isNull(params)) {
           throw new CoolException("请求参数不能为空!!");
       }
        if (Objects.isNull(params)) {
            throw new CoolException("请求参数不能为空!!");
        }
        return mobileService.receiptToWarehouse(params, getLoginUserId());
    }
    @PreAuthorize("hasAuthority('manager:asnOrder:list')")
    @PostMapping("/orders/other")
    @ApiOperation("其它扫码收货")
    public R getOtherReceipt(@RequestBody OtherReceiptParams params) {
@@ -112,38 +112,30 @@
        return mobileService.otherReceipt(params);
    }
    @PreAuthorize("hasAuthority('manager:warehouseAreas:list')")
    @ApiOperation("获取收货区")
    @GetMapping("/areas/receipt")
    public R getReceiptAreas() {
        return mobileService.getReceiptAreas(getLoginUser());
    }
    @PreAuthorize("hasAuthority('manager:warehouseAreas:list')")
    @ApiOperation("获取可用库区")
    @GetMapping("/areas/user/all")
    public R getAreasUserAll() {
        return mobileService.getAreasUserAll(getLoginUser());
    }
    @PreAuthorize("hasAuthority('manager:asnOrder:list')")
    @GetMapping("/orders/asn")
    @ApiOperation("获取通知单")
    public R getAllAsnOrders() {
        return R.ok(mobileService.getAllAsnOrders());
    }
    @PreAuthorize("hasAuthority('manager:asnOrder:list')")
    @GetMapping("/dynamic/fields")
    @ApiOperation("获取动态字段")
    public R getDynamicFields() {
        return R.ok(mobileService.getDynamicFields());
    }
    @PreAuthorize("hasAuthority('manager:asnOrderItem:list')")
    @ApiOperation("获取订单物料明细")
    @PostMapping("/asnOrderItem/trackCode")
    public R getItemByTrackCode(@RequestBody Map<String, Object> params) {
@@ -153,7 +145,6 @@
        return mobileService.getDeltByCode(params);
    }
    @PreAuthorize("hasAuthority('manager:asnOrderItem:list')")
    @ApiOperation("获取拖盘明细")
    @PostMapping("/asnOrderItem/container")
    public R getItemByContainer(@RequestBody Map<String, Object> params) {
@@ -163,17 +154,16 @@
        if (!Objects.isNull(params.get("type")) && params.get("type").equals("unbind")) {
            return mobileService.getUnItemByContainer(params);
        } else {
            return mobileService.getItemByContainer(params,getLoginUser());
            return mobileService.getItemByContainer(params, getLoginUser());
        }
    }
    @PreAuthorize("hasAuthority('manager:waitPakin:update')")
    @ApiOperation("组托")
    @PostMapping("/waitPakin/merge")
    public R pikinOrder(@RequestBody WaitPakinParam waitPakin) {
        Long userId = getLoginUserId();
        if (Objects.isNull(waitPakin)) {
            return R.error( "参数不能为空!!");
            return R.error("参数不能为空!!");
        }
        if (org.apache.commons.lang3.StringUtils.isBlank(waitPakin.getBarcode())) {
            return R.error("托盘码不能为空!!");
@@ -181,15 +171,14 @@
        if (Objects.isNull(waitPakin.getItems()) || waitPakin.getItems().isEmpty()) {
            return R.error("跟踪码不能为空!!");
        }
        try{
        try {
            mobileService.mergeItemsWcs(waitPakin, userId);
        } catch (Exception e){
        } catch (Exception e) {
            return R.error(e.getMessage());
        }
        return R.ok();
    }
    @PreAuthorize("hasAuthority('manager:waitPakin:update')")
    @ApiOperation("组拖解绑")
    @PostMapping("/waitPakin/unbind")
    public R pakinUnBind(@RequestBody WaitPakinParam param) {
@@ -207,7 +196,7 @@
    @ApiOperation("报检")
    @GetMapping("/asnOrder/inspect/{code}")
    @PreAuthorize("hasAuthority('manager:waitPakin:list')")
    public R getAsnOdrers(@PathVariable String code) {
        if (Objects.isNull(code)) {
            throw new CoolException("参数不能为空!!");
@@ -217,17 +206,17 @@
    @ApiOperation("提交报检")
    @GetMapping("/inspect/confirm/{id}")
    @PreAuthorize("hasAuthority('manager:waitPakin:list')")
    public R confirmInspect(@PathVariable String id) {
        if (Objects.isNull(id)) {
            throw new CoolException("参数不能为空!");
        }
        return  mobileService.confirmIspt(id);
        return mobileService.confirmIspt(id);
    }
    @ApiOperation("快速质检信息")
    @PreAuthorize("hasAuthority('manager:qlyInspect:list')")
//    @PostMapping("/inspect/query")
    // @PostMapping("/inspect/query")
    public R checkObjs(@RequestBody CheckObjParams params) {
        if (Objects.isNull(params)) {
            return R.error("参数不能为空!!");
@@ -235,9 +224,8 @@
        return mobileService.checkObjs(params);
    }
    @ApiOperation("快速质检")
    @PreAuthorize("hasAuthority('manager:qlyInspect:update')")
    @PostMapping("/inspect/check/update")
    public R checkUpdate(@RequestBody List<QlyIsptItem> params) {
        if (Objects.isNull(params) || params.isEmpty()) {
@@ -247,7 +235,7 @@
    }
    @ApiOperation("获取上架信息")
    @PreAuthorize("hasAuthority('manager:qlyInspect:list')")
    @PostMapping("/stock/operate/list")
    public R operateToStock(@RequestBody OpStockParams params) {
        if (Objects.isNull(params)) {
@@ -257,21 +245,22 @@
    }
    @ApiOperation("人工上架")
    @PreAuthorize("hasAuthority('manager:qlyInspect:update')")
    @PostMapping("/stock/operate")
    public R publicToStock(@RequestBody ManualShelvingParams params) {
        if (Cools.isEmpty(params.getItemList()) || Cools.isEmpty(params.getLocCode()) || Cools.isEmpty(params.getBarcode())) {
        if (Cools.isEmpty(params.getItemList()) || Cools.isEmpty(params.getLocCode())
                || Cools.isEmpty(params.getBarcode())) {
            return R.error("参数不能为空!!");
        }
        WaitPakin waitPakin = waitPakinService.getOne(new LambdaQueryWrapper<WaitPakin>().eq(WaitPakin::getBarcode, params.getBarcode()));
        WaitPakin waitPakin = waitPakinService
                .getOne(new LambdaQueryWrapper<WaitPakin>().eq(WaitPakin::getBarcode, params.getBarcode()));
        return taskService.generateFlatWarehouseTasks(waitPakin, params.getLocCode(), getLoginUserId());
//        return mobileService.publicToStock(params, getLoginUserId());
        // return mobileService.publicToStock(params, getLoginUserId());
    }
    @ApiOperation("获取任务信息")
    @PreAuthorize("hasAuthority('manager:qlyInspect:list')")
    @PostMapping("/task/stock/{code}")
    public R taskToStock(@PathVariable String code) {
        if (Objects.isNull(code)) {
@@ -281,7 +270,7 @@
    }
    @ApiOperation("任务上架")
    @PreAuthorize("hasAuthority('manager:qlyInspect:update')")
    @PostMapping("/task/public/{code}")
    public R taskToLocs(@PathVariable String code) throws Exception {
        if (Objects.isNull(code)) {
@@ -292,7 +281,7 @@
    @ApiOperation("一键收货")
    @PostMapping("/complete/{id}")
    @PreAuthorize("hasAuthority('manager:asnOrder:update')")
    public R completeOrder(@PathVariable Long id) {
        if (Objects.isNull(id)) {
            return R.error("参数不能为空!!");
@@ -300,20 +289,19 @@
        return mobileService.completeOrder(id, getLoginUserId());
    }
    @ApiOperation("获取不良托盘物料")
    @PostMapping("/defect/matnrs")
    @PreAuthorize("hasAuthority('manager:asnOrder:list')")
    public R getAsnDefectItemByCode(@RequestBody Map<String, Object> map) {
        if (Objects.isNull(map)) {
            return R.error("参数不能为空!!");
        }
        return mobileService.getItemByContainer(map,getLoginUser());
        return mobileService.getItemByContainer(map, getLoginUser());
    }
    @ApiOperation("获取订单不良物料")
    @PostMapping("/defect/{trackCode}")
    @PreAuthorize("hasAuthority('manager:asnOrder:list')")
    public R defectProducts(@PathVariable String trackCode) {
        if (Objects.isNull(trackCode)) {
            return R.error("参数不能为空!!");
@@ -323,7 +311,7 @@
    @ApiOperation("获取组拖入库信息")
    @PostMapping("/pakin/info/{barcode}")
    @PreAuthorize("hasAuthority('manager:waitPakin:list')")
    public R getPakinInStock(@PathVariable String barcode) {
        if (Objects.isNull(barcode)) {
            return R.error("参数不能为空!!");
@@ -333,21 +321,21 @@
    @ApiOperation("获取上架站点信息")
    @GetMapping("/inStock/sites")
    @PreAuthorize("hasAuthority('manager:deviceSite:list')")
    public R getTarSite() {
        return mobileService.getDeviceSites();
    }
    @ApiOperation("获取推荐库位列表信息")
    @GetMapping("/locs/list")
    @PreAuthorize("hasAuthority('manager:deviceSite:list')")
    public R getLocs() {
        return mobileService.getRecommondLocs();
    }
    @ApiOperation("生成任务列表")
    @PostMapping("/pakin/task")
    @PreAuthorize("hasAuthority('manager:deviceSite:list')")
    public R pakinToTask(@RequestBody Map<String, Object> map) {
        if (Objects.isNull(map)) {
            return R.error("参数不能为空!!");
@@ -355,4 +343,3 @@
        return mobileService.generateTask(map, getLoginUserId());
    }
}
rsf-server/src/main/java/com/vincent/rsf/server/api/controller/pda/PdaCheckOrderController.java
@@ -20,7 +20,6 @@
    @Autowired
    private PdaCheckOrderService pdaCheckOrderService;
    @PreAuthorize("hasAuthority('manager:task:list')")
    @PostMapping("/getCheckList")
    @ApiOperation("查询盘点差异单列表")
    public R getCheckList(@RequestBody Map<String, String> map) {
@@ -28,15 +27,13 @@
        return pdaCheckOrderService.getCheckList(map.get("code"));
    }
    @PreAuthorize("hasAuthority('manager:task:list')")
    @PostMapping("/getCheckTaskItemList")
    @ApiOperation("查询盘点任务列表")
    public R getCheckTaskItemList(@RequestBody Map<String, String> map) {
        return pdaCheckOrderService.getCheckTaskItemList(map.get("barcode"),map.get("checkCode"));
        return pdaCheckOrderService.getCheckTaskItemList(map.get("barcode"), map.get("checkCode"));
    }
    @PreAuthorize("hasAuthority('manager:task:list')")
    @PostMapping("/getCheckTaskItemList2")
    @ApiOperation("查询盘点任务列表,直接扫容器码")
    public R getCheckTaskItemList2(@RequestBody Map<String, String> map) {
@@ -44,7 +41,6 @@
        return pdaCheckOrderService.getCheckTaskItemList2(map.get("barcode"));
    }
    @PreAuthorize("hasAuthority('manager:task:list')")
    @GetMapping("/getCheckDiffReasonList")
    @ApiOperation("查询盘点差异原因")
    public R getCheckDiffReasonList() {
@@ -52,14 +48,12 @@
        return pdaCheckOrderService.getCheckDiffReasonList();
    }
    @PreAuthorize("hasAuthority('manager:task:list')")
    @PostMapping("/saveCheckDiff")
    @ApiOperation("保存盘点数据")
    public R saveCheckDiff(@RequestBody SaveCheckDiffParams saveCheckDiffParams) {
        return pdaCheckOrderService.saveCheckDiff(saveCheckDiffParams,getLoginUserId());
        return pdaCheckOrderService.saveCheckDiff(saveCheckDiffParams, getLoginUserId());
    }
    @PreAuthorize("hasAuthority('manager:task:list')")
    @PostMapping("/selectAddMatnr")
    @ApiOperation("查询需要添加的物料")
    public R selectAddMatnr(@RequestBody Map<String, String> map) {
rsf-server/src/main/java/com/vincent/rsf/server/api/controller/pda/PdaOutStockController.java
@@ -9,7 +9,6 @@
import com.vincent.rsf.server.api.entity.params.ContainerWaveParam;
import com.vincent.rsf.server.api.entity.params.OrderOutGeneralParam;
import com.vincent.rsf.server.api.service.PdaOutStockService;
import com.vincent.rsf.server.manager.controller.params.OrderOutTaskParam;
import com.vincent.rsf.server.manager.entity.WkOrder;
import com.vincent.rsf.server.manager.entity.WkOrderItem;
import com.vincent.rsf.server.manager.enums.OrderType;
@@ -43,7 +42,6 @@
    @Autowired
    private DictDataService dictDataService;
    @PreAuthorize("hasAuthority('manager:task:list')")
    @GetMapping("/outStockTaskItem/{barcode}")
    @ApiOperation("快速拣货查询")
    public R getOutStockTaskItem(@PathVariable String barcode) {
@@ -51,7 +49,6 @@
        return pdaOutStockService.getOutStockTaskItem(barcode);
    }
    @PreAuthorize("hasAuthority('manager:task:list')")
    @GetMapping("/saveOutTaskSts/{barcode}")
    @ApiOperation("快速拣货")
    public R saveOutTaskSts(@PathVariable String barcode) {
@@ -59,7 +56,6 @@
        return pdaOutStockService.saveOutTaskSts(barcode);
    }
    @PreAuthorize("hasAuthority('manager:task:list')")
    @PostMapping("/getWaveList")
    @ApiOperation("查询波次列表")
    public R getWaveListItem(@RequestBody Map<String, String> map) {
@@ -67,7 +63,6 @@
        return pdaOutStockService.getWaveListItem(map.get("barcode"));
    }
    @PreAuthorize("hasAuthority('manager:task:list')")
    @PostMapping("/getContainerWaveList")
    @ApiOperation("根据容器码查询波次及出库单")
    public R getContainerWaveList(@RequestBody Map<String, String> map) {
@@ -75,66 +70,64 @@
        return pdaOutStockService.getContainerWaveList(map);
    }
    @PreAuthorize("hasAuthority('manager:task:list')")
    @PostMapping("/saveWavePick")
    @ApiOperation("根据容器码查询波次及出库单")
    public R saveWavePick(@RequestBody ContainerWaveParam containerWaveParam) {
        return pdaOutStockService.saveWavePick(containerWaveParam,getLoginUserId());
        return pdaOutStockService.saveWavePick(containerWaveParam, getLoginUserId());
    }
    @PreAuthorize("hasAuthority('manager:task:list')")
    @PostMapping("/callForEmptyContainers")
    @ApiOperation("呼叫空容器")
    public R callForEmptyContainers(@RequestBody CallForEmptyContainersParam containerWaveParam) {
        return pdaOutStockService.callForEmptyContainers(containerWaveParam,getLoginUserId());
        return pdaOutStockService.callForEmptyContainers(containerWaveParam, getLoginUserId());
    }
//    @PreAuthorize("hasAuthority('manager:outStock:list')")
    // @PreAuthorize("hasAuthority('manager:outStock:list')")
    @PostMapping("/outStockItem/page")
    public R page(@RequestBody JSONObject param) {
        return R.ok().add(outStockItemService.list(new LambdaQueryWrapper<>(WkOrderItem.class).eq(WkOrderItem::getDeleted, 0)
                .eq(WkOrderItem::getOrderCode, param.getString("orderId"))));
        return R.ok()
                .add(outStockItemService.list(new LambdaQueryWrapper<>(WkOrderItem.class).eq(WkOrderItem::getDeleted, 0)
                        .eq(WkOrderItem::getOrderCode, param.getString("orderId"))));
    }
    @PostMapping("/orderOut/getType")
    public R orderOutGetType(@RequestBody OrderOutGeneralParam param) {
        if (Cools.isEmpty(param)){
        if (Cools.isEmpty(param)) {
            return R.ok();
        }
        List<DictData> dictData = dictDataService.list(new LambdaQueryWrapper<DictData>()
                .eq(DictData::getDictTypeCode, DictTypeCode.DICT_SYS_BUSINESS_TYPE)
                .in(DictData::getValue, param.getType())
        );
                .in(DictData::getValue, param.getType()));
        return R.ok(dictData);
    }
    @RequestMapping(value = "/orderOut/list")
    public R pdaPageList(@RequestParam(required = true)String orderNo,
                         @RequestParam(defaultValue = "1")Integer curr,
                         @RequestParam(defaultValue = "5")Integer limit){
    public R pdaPageList(@RequestParam(required = true) String orderNo,
            @RequestParam(defaultValue = "1") Integer curr,
            @RequestParam(defaultValue = "5") Integer limit) {
        Page<WkOrder> page = new Page<>(curr, limit);
        LambdaQueryWrapper<WkOrder> wkOrderLambdaQueryWrapper = new LambdaQueryWrapper<>();
        wkOrderLambdaQueryWrapper.eq(WkOrder::getType, OrderType.ORDER_OUT.type);
        wkOrderLambdaQueryWrapper.eq(!Cools.isEmpty(orderNo),WkOrder::getCode, orderNo);
        wkOrderLambdaQueryWrapper.eq(!Cools.isEmpty(orderNo), WkOrder::getCode, orderNo);
        Page<WkOrder> wkOrderPage = outStockService.page(page, wkOrderLambdaQueryWrapper);
        return R.ok(wkOrderPage);
    }
    @RequestMapping(value = "/orderOut/detlList")
    public R orderOutDetlList(@RequestParam(required = true)String orderNo){
    public R orderOutDetlList(@RequestParam(required = true) String orderNo) {
        if (Cools.isEmpty(orderNo)){
        if (Cools.isEmpty(orderNo)) {
            return R.error("订单号为空");
        }
        LambdaQueryWrapper<WkOrderItem> wkOrderLambdaQueryWrapper = new LambdaQueryWrapper<>();
//        wkOrderLambdaQueryWrapper.eq(WkOrderItem::getType, OrderType.ORDER_OUT.type);
        wkOrderLambdaQueryWrapper.eq(!Cools.isEmpty(orderNo),WkOrderItem::getOrderCode, orderNo);
        // wkOrderLambdaQueryWrapper.eq(WkOrderItem::getType, OrderType.ORDER_OUT.type);
        wkOrderLambdaQueryWrapper.eq(!Cools.isEmpty(orderNo), WkOrderItem::getOrderCode, orderNo);
        List<WkOrderItem> list = outStockItemService.list(wkOrderLambdaQueryWrapper);
        return R.ok(list);
@@ -142,26 +135,16 @@
    @PostMapping("/orderOut/getOutLocView")
    public R orderOutGetOutLocView(@RequestBody OrderOutGeneralParam param) {
        //参数 param.getOrderItemId()//出库预览
        if (Cools.isEmpty(param)) {
            return R.error("参数不能为空");
        }
        OrderOutTaskParam orderOutTaskParam = new OrderOutTaskParam();
        orderOutTaskParam.setOrderId(param.getOrderItemId());
        orderOutTaskParam.setWaveId(param.getWaveId());
        return outStockService.getOrderOutTaskItem(orderOutTaskParam);
//        return R.ok();
    }
//
    @PostMapping("/orderOut/getOutLocRun")
    public R orderOutGetOutLocRun(@RequestBody OrderOutGeneralParam param) {
        //参数 param.getOrderItemId()//出库执行
        // 参数 param.getOrderItemId()//出库预览
        return R.ok();
    }
    //
    // @PostMapping("/orderOut/getOutLocRun")
    // public R orderOutGetOutLocView(@RequestBody OrderOutGeneralParam param) {
    // //参数 param.getOrderItemId()//出库执行
    //
    // return R.ok();
    // }
}
rsf-server/src/main/java/com/vincent/rsf/server/common/security/SecurityConfig.java
@@ -33,13 +33,13 @@
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    public static final String[] FILTER_PATH = new String[]{
    public static final String[] FILTER_PATH = new String[] {
            "/demo/**",
            "/test/**",
            "/system/info",
            "/tenant/list",
            "/email/code",
            "/pda/login",
            "/pda/**",
            "/erp/**",
            "/base/**",
            "/order/**",