chengsc
2024-10-18 f2b3c45b78bb9fc021869c4ae35e6de039b50bbf
修改问题
8个文件已修改
1个文件已添加
1034 ■■■■ 已修改文件
HTML/views/SystemSettings/LogOperation.html 249 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HTML/views/WareHouseSetting/Locate.html 162 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HTML/views/WareHouseSetting/LocateEditArea.html 178 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/Model/ModelVm/SysVm/LocateVm.cs 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.BLL/LogServer/OperationSysServer.cs 189 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.BLL/SysServer/StorageLocatServer.cs 113 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.IBLL/ILogServer/IOperationSysServer.cs 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.IBLL/ISysServer/IStorageLocatServer.cs 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/Wms/Controllers/SysController.cs 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HTML/views/SystemSettings/LogOperation.html
@@ -1,5 +1,252 @@
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>操作记录</title>
    <meta name="renderer" content="webkit">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta name="viewport"
        content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
    <link rel="stylesheet" href="../../layuiadmin/layui/css/layui.css" media="all">
    <link rel="stylesheet" href="../../layuiadmin/style/admin.css" media="all">
    <link rel="stylesheet" href="../../css/public.css" media="all">
    <script>
        // 这里是需要在页面渲染之前执行的代码
        document.addEventListener("DOMContentLoaded", function () {
            //获取table默认显示数
            pageCntFirst();
            //判断是否开启table列表列宽调整功能。
            GetIsSetColW();
        });
    </script>
</head>
<body id="body">
    <div class="layui-card" style="padding-bottom: 0">
        <div class="layui-form layui-card-header layuiadmin-card-header-auto" id="top">
            <div class="layui-form-item">
                <div class="layui-inline">
                    <label class="layui-form-label">菜单名称</label>
                    <div class="layui-input-inline">
                        <input type="text" id="MenuName" name="MenuName" placeholder="请输入菜单名称" autocomplete="off"
                            class="layui-input">
                    </div>
                </div>
                <div class="layui-inline">
                    <label class="layui-form-label" style="width: 45px;">类型</label>
                    <div class="layui-input-inline">
                        <select name="Type" id="Type" lay-verify="" lay-search>
                            <option value=""></option>
                        </select>
                    </div>
                </div>
                <div class="layui-inline">
                    <label class="layui-form-label">操作内容</label>
                    <div class="layui-input-inline">
                        <input type="text" id="Msg" name="Msg" placeholder="请输入操作内容" autocomplete="off"
                            class="layui-input">
                    </div>
                </div>
                <div class="layui-inline">
                    <label class="layui-form-label" style="width: 60px;">开始时间</label>
                    <div class="layui-input-inline">
                        <input type="text" autocomplete="off" name="StartTime" id="StartTime" class="layui-input"
                            placeholder="开始时间">
                    </div>
                </div>
                <div class="layui-inline">
                    <label class="layui-form-label" style="width: 60px;">结束时间</label>
                    <div class="layui-input-inline">
                        <input type="text" autocomplete="off" name="EndTime" id="EndTime" class="layui-input"
                            placeholder="结束时间">
                    </div>
                </div>
                <div class="layui-inline">
                    <button class="layui-btn layui-btn-sm layuiadmin-btn-list" lay-submit
                        lay-filter="LAY-app-contlist-search">
                        <i class="layui-icon layui-icon-search layuiadmin-button-btn"></i>搜索
                    </button>
                </div>
            </div>
        </div>
        <div id="center"></div>
        <div class="layui-card-body">
            <div class="position-relative"><!-- class="position-relative" --><!-- 自定义表头加上 -->
                <table id="LAY-app-content-list" lay-filter="LAY-app-content-list"></table>
                <!-- #region 自定义表头 -->
                <div class="headerSetIcon">
                    <button class="layui-btn layui-btn-primary layui-btn-sm" data-type="customCols">
                        <i class="layui-icon">&#xe610;</i>
                    </button>
                </div>
                <!-- #endregion -->
                <!-- #region 自定义表头 -->
                <script type="text/html" id="templetCreateTime">
                        {{# function GetBtn(d){
                                return formatDate(d.CreateTime);
                            }
                        }}
                        {{ GetBtn(d) }}
                    </script>
                <!-- #endregion -->
            </div>
        </div>
    </div>
    <script src="../../layuiadmin/layui/layui.js"></script>
    <script src="../../js/jquery-3.5.1.min.js"></script>
    <script src="../../js/jquery.cookie.js"></script>
    <script src="../../js/public.js"></script>
    <script>
        layui.config({
            base: '../../layuiadmin/' //静态资源所在路径
        }).extend({
            index: 'lib/index' //主入口模块
        }).use(['index', 'table', 'laypage', 'layer', 'laydate'], function () {
            var table = layui.table,
                form = layui.form,
                laypage = layui.laypage,
                layer = layui.layer;
            laydate = layui.laydate;
            laydate.render({
                elem: '#StartTime'
                , format: 'yyyy-MM-dd' //可任意组合
            });
            laydate.render({
                elem: '#EndTime'
                , format: 'yyyy-MM-dd' //可任意组合
            });
            var h1 = GetTableHeight();
            refreshTable();
            //获取类型菜单下拉
            sendData(IP + "/Sys/GetDictionaryByParentNo", { parentNo: "LogType" }, 'get', function (res) {
                var html = '';
                console.log(res);
                if (res.code == 0) { //成功
                    var list = res.data;
                    for (var i = 0; i < list.length; i++) {
                        html += '<option value = "' + list[i].Id + '">' + list[i].DictName + '</option>';
                    }
                    $("#Type").append(html);
                    form.render('select');
                } else { //不成功
                    layer.msg('获取操作类型信息失败!', {
                        icon: 2,
                        time: 2000 //2秒关闭(如果不配置,默认是3秒)
                    });
                }
            });
            //渲染表格
            //#region 自定义表头
            var TotalColsArr = [[
                { field: '', title: '序号', type: 'numbers', width: 65, align: 'center', fixed: 'left', "disabled": true },
                { field: 'ParentNo', title: '模块号', align: 'center', fixed: 'left', width: 80, "disabled": true },
                { field: 'MenuNo', title: '菜单号', align: 'center', fixed: 'left', width: 80, "disabled": true },
                { field: 'MenuName', title: '菜单名称', align: 'center', width: 190 },
                { field: 'FkNo', title: '数据编号', align: 'center', width: 180 },
                { field: 'Type', title: '类型', align: 'center', width: 100 },
                { field: 'Msg', title: '操作内容', align: 'center' },
                { field: 'CreateUserName', title: '创建人', align: 'center', width: 120 },
                { field: 'CreateTime', title: '创建时间', align: 'center', width: 160, templet: '#templetCreateTime' }
            ]];
            var TotalColsSysArr = encodeURIComponent(encodeURIComponent(JSON.stringify(TotalColsArr)))//将表头数据进行url编码
            function refreshTable() {
                //#region 自定义表头
                var colsJson
                var param1 = {
                    Href: 'Sys/GetLogOperationList'
                };
                sendData(IP + "/Sys/GetTableColsByUserId", param1, 'post', function (res) {
                    if (res.code == 0) {
                        if (res.data == '' || res.data == undefined || res.data == null) {
                            colsJson = TotalColsArr
                        } else {
                            colsJson = eval(res.data);
                        }
                    } else {
                        colsJson = TotalColsArr
                    }
                    var param = {
                        MenuName: $("#MenuName").val(),
                        Type: $("#Type").val(),
                        Msg: $("#Msg").val(),
                        StartTime: $("#StartTime").val(),
                        EndTime: $("#EndTime").val(),
                    };
                    table.render({
                        elem: '#LAY-app-content-list',
                        url: IP + "/Sys/GetLogOperationList",
                        method: 'POST',
                        height: h1,
                        id: 'LAY-app-content-list',
                        where: param,
                        contentType: 'application/json',
                        headers: { ToKen: $.cookie('token') },
                        page: true,
                        limit: pageCnt,
                        limits: pageLimits,
                        cellMinWidth: 60, //全局定义常规单元格的最小宽度,layui 2.2.1 新增
                        cols: colsJson,
                        done: function (res) {
                            //自定义列宽
                            SetTableColW('LAY-app-content-list', 'Sys/GetLogOperationList', TotalColsSysArr);
                        },
                    });
                });
                //#endregion
            }
            //监听搜索
            form.on('submit(LAY-app-contlist-search)', function (data) {
                refreshTable();
            });
            //#region 自定义表头
            //自定义表头
            active = {
                customCols: function () {
                    layer.open({
                        type: 2,
                        title: '自定义列',
                        content: '../SystemSettings/HeaderSetting.html?Href=Sys/GetLogOperationList&ColsSysArr=' + TotalColsSysArr,
                        maxmin: false,
                        resize: false,
                        area: ['970px', '650px']
                    });
                }
            };
            $('.layui-btn').on('click', function () {
                var type = $(this).data('type');
                active[type] ? active[type].call(this) : '';
            });
            //#endregion
        });
    </script>
</body>
</html>
<!-- <!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>用户信息列表</title>
@@ -200,4 +447,4 @@
            });
        </script>
    </body>
</html>
</html> -->
HTML/views/WareHouseSetting/Locate.html
@@ -154,46 +154,10 @@
                active = { 
                    
                    editList: function () {
                        var checkStatus = table.checkStatus('LAY-app-content-list'),
                        checkData = checkStatus.data; //得到选中的数据
                        if (checkData.length === 0) {
                            return layer.msg('请选择数据');
                        }
                        else if(checkData.length > 1)
                        {
                            var li = 0;
                            var ping = 0;
                            var WareNo = "W01";
                            checkData.forEach(item => {
                                if (item.WareHouseName == "力诺立体库")
                                {
                                    li += 1;
                                    WareNo = "W01";
                                    if (ping > 0)
                                    {
                                        return;
                                    }
                                }
                                if (item.WareHouseName == "力诺平库")
                                {
                                    ping += 1;
                                    WareNo = "W02";
                                    if (li > 0)
                                    {
                                        return;
                                    }
                                }
                            });
                            if (li != 0 && ping != 0)
                            {
                                return layer.msg('请勿选择多种仓库!');
                            }
                        }
                        layer.open({
                            type: 2,
                            title: '编辑储位状态集合',
                            content: 'LocateFrom.html?WareHouseNo='+WareNo,
                            content: 'LocateEditArea.html',
                            maxmin: true,
                            area: ['560px', '510px'],
                            btn: ['确定', '取消'],
@@ -205,23 +169,23 @@
                                iframeWindow.layui.form.on('submit(' + submitID + ')', function (data) {
                                    var field = data.field; //获取提交的字段
                                    console.log(field);
                                    var msg = [];
                                    for (var i = 0; i < checkData.length; i++) {
                                        // msg.push(checkData[i].Id);
                                        msg.push(checkData[i].Id)
                                    }
                                    console.log(msg);
                                     
                                    //提交 Ajax 成功后,静态更新表格中的数据
                                    var param = { 
                                        Id: msg,
                                        RoadWayNo: field.RoadwayNo,
                                        AreaNo:field.AreaNo,
                                        Row:parseInt(field.Row),
                                        Column:parseInt(field.Column),
                                        Layer: parseInt(field.Layer),
                                        Dept:parseInt(field.Depth),
                                        Status:field.Status,
                                        Flag:field.Flag,
                                        Temperature:field.Temp
                                    };
                                    console.log(param);
                                    if (doing) {
                                        doing = false;
                                        sendData(IP + "/Sys/EditStorageLocatList", param, 'post', function (res) {
                                        sendData(IP + "/Sys/EditStorageLocatListNew", param, 'post', function (res) {
                                            console.log(res);
                                            if (res.code == 0) { //成功
                                                layer.msg(res.msg, {
@@ -249,13 +213,115 @@
                                            }
                                        });
                                    }
                                    //$.ajax({});
                                });
                                submit.trigger('click');
                            }
                        });
                    }
                    // editList: function () {
                    //     var checkStatus = table.checkStatus('LAY-app-content-list'),
                    //     checkData = checkStatus.data; //得到选中的数据
                    //     if (checkData.length === 0) {
                    //         return layer.msg('请选择数据');
                    //     }
                    //     else if(checkData.length > 1)
                    //     {
                    //         var li = 0;
                    //         var ping = 0;
                    //         var WareNo = "W01";
                    //         checkData.forEach(item => {
                    //             if (item.WareHouseName == "力诺立体库")
                    //             {
                    //                 li += 1;
                    //                 WareNo = "W01";
                    //                 if (ping > 0)
                    //                 {
                    //                     return;
                    //                 }
                    //             }
                    //             if (item.WareHouseName == "力诺平库")
                    //             {
                    //                 ping += 1;
                    //                 WareNo = "W02";
                    //                 if (li > 0)
                    //                 {
                    //                     return;
                    //                 }
                    //             }
                    //         });
                    //         if (li != 0 && ping != 0)
                    //         {
                    //             return layer.msg('请勿选择多种仓库!');
                    //         }
                    //     }
                    //     layer.open({
                    //         type: 2,
                    //         title: '编辑储位状态集合',
                    //         content: 'LocateFrom.html?WareHouseNo='+WareNo,
                    //         maxmin: true,
                    //         area: ['560px', '510px'],
                    //         btn: ['确定', '取消'],
                    //         yes: function (index, layero) {
                    //             var iframeWindow = window['layui-layer-iframe' + index],
                    //                 submitID = 'layuiadmin-app-form-submit',
                    //                 submit = layero.find('iframe').contents().find('#' + submitID);
                    //             //监听提交
                    //             iframeWindow.layui.form.on('submit(' + submitID + ')', function (data) {
                    //                 var field = data.field; //获取提交的字段
                    //                 console.log(field);
                    //                 var msg = [];
                    //                 for (var i = 0; i < checkData.length; i++) {
                    //                     // msg.push(checkData[i].Id);
                    //                     msg.push(checkData[i].Id)
                    //                 }
                    //                 console.log(msg);
                    //                 //提交 Ajax 成功后,静态更新表格中的数据
                    //                 var param = {
                    //                     Id: msg,
                    //                     Status:field.Status,
                    //                     Flag:field.Flag,
                    //                     Temperature:field.Temp
                    //                 };
                    //                 if (doing) {
                    //                     doing = false;
                    //                     sendData(IP + "/Sys/EditStorageLocatList", param, 'post', function (res) {
                    //                         console.log(res);
                    //                         if (res.code == 0) { //成功
                    //                             layer.msg(res.msg, {
                    //                                 icon: 1,
                    //                                 time: 2000 //2秒关闭(如果不配置,默认是3秒)
                    //                             }, function () {
                    //                                 tableIns.reload({
                    //                                     page: {
                    //                                         curr: 1
                    //                                     }
                    //                                 });
                    //                                 layer.close(index); //关闭弹层
                    //                                 doing = true;
                    //                             });
                    //                         } else if(res.code == 1){
                    //                             layer.msg(res.msg, {
                    //                                 icon: 2,
                    //                                 time: 2000 //2秒关闭(如果不配置,默认是3秒)
                    //                             }, function() {doing = true;});
                    //                         } else { //不成功
                    //                             layer.msg(res.statusText, {
                    //                                 icon: 2,
                    //                                 time: 2000 //2秒关闭(如果不配置,默认是3秒)
                    //                             }, function() {doing = true;});
                    //                         }
                    //                     });
                    //                 }
                    //                 //$.ajax({});
                    //             });
                    //             submit.trigger('click');
                    //         }
                    //     });
                    // }
                };
                $('.layui-btn.layuiadmin-btn-list').on('click', function () {
                    var type = $(this).data('type');
HTML/views/WareHouseSetting/LocateEditArea.html
New file
@@ -0,0 +1,178 @@
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>储位区域编辑</title>
        <meta name="renderer" content="webkit">
        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
        <meta name="viewport"
            content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
        <link rel="stylesheet" href="../../layuiadmin/layui/css/layui.css" media="all">
    </head>
    <body>
        <div class="layui-form" lay-filter="layuiadmin-app-form-list" id="layuiadmin-app-form-list"
            style="padding: 20px 30px 0 0;">
            <div class="layui-form-item">
                <label class="layui-form-label">所属巷道</label>
                <div class="layui-input-inline">
                    <select name="RoadwayNo" id="RoadwayNo" lay-filter="getRoadwayNo" lay-search >
                        <option value=""></option>
                    </select>
                </div>
                <label class="layui-form-label">所属区域</label>
                <div class="layui-input-inline">
                    <select name="AreaNo" id="AreaNo" lay-filter="getAreaNo" lay-search>
                        <option value=""></option>
                    </select>
                </div>
            </div>
            <div class="layui-form-item">
                <label class="layui-form-label">&emsp;&emsp;储排</label>
                <div class="layui-input-inline">
                    <input type="number" id="Row" name="Row" placeholder="排···" autocomplete="off"
                        class="layui-input" >
                </div>
                <label class="layui-form-label">&emsp;&emsp;储列</label>
                <div class="layui-input-inline">
                    <input type="number" id="Column" name="Column" placeholder="列···" autocomplete="off"
                        class="layui-input" >
                </div>
            </div>
            <div class="layui-form-item">
                <label class="layui-form-label">&emsp;&emsp;储层</label>
                <div class="layui-input-inline">
                    <input type="number" id="Layer" name="Layer" placeholder="层···" autocomplete="off"
                        class="layui-input" >
                </div>
                <label class="layui-form-label">储位深度</label>
                <div class="layui-input-inline">
                    <input type="number" id="Depth" name="Depth" placeholder="储位深度···" autocomplete="off"
                        class="layui-input" oninput="value=value.replace(/^[0-9]+$/,'')"
                     onafterpaste="this.value=this.value.replace(/^[0-9]+$/,'')">
                </div>
            </div>
            <div class="layui-form-item">
                <label class="layui-form-label">储位状态</label>
                <div class="layui-input-inline">
                    <select name="Status" id="Status" lay-filter="getStatus" lay-search >
                        <option value=""></option>
                        <option value="0">空储位</option>
                        <option value="1">有物品</option>
                        <option value="2">正在入库</option>
                        <option value="3">正在出库</option>
                        <option value="4">正在移入</option>
                        <option value="5">正在移出</option>
                    </select>
                </div>
                <label class="layui-form-label">储位标志</label>
                <div class="layui-input-inline">
                    <select name="Flag" id="Flag" lay-filter="getFlag" lay-search >
                        <option value=""></option>
                        <option value="0">正常</option>
                        <option value="1">屏蔽</option>
                        <option value="2">损坏</option>
                    </select>
                </div>
            </div>
            <!--  -->
            <div class="layui-form-item layui-hide">
                <input type="button" lay-submit lay-filter="layuiadmin-app-form-submit" id="layuiadmin-app-form-submit"
                    value="确认添加">
                <input type="button" lay-submit lay-filter="layuiadmin-app-form-edit" id="layuiadmin-app-form-edit"
                    value="确认编辑">
            </div>
        </div>
        <script src="../../layuiadmin/layui/layui.js"></script>
        <script src="../../js/public.js"></script>
        <script src="../../js/jquery-3.5.1.min.js"></script>
        <script src="../../js/jquery.cookie.js"></script>
        <script>
            var uid = $.cookie('userId');
            if(uid==null){
                alert('请登录后操作');
                window.parent.location.href='../Login.html'
            }
            layui.config({
                base: '../../layuiadmin/' //静态资源所在路径
            }).extend({
                index: 'lib/index' //主入口模块
            }).use(['index', 'form', 'layer'], function() {
                var $ = layui.$,
                    form = layui.form,
                    layer = layui.layer;
                //var no = getQueryString('WareHouseNo');
                GetRoadway("");
                GetArea('');
                //获取区域
                function GetArea(val){
                    var param = {
                        wareHouseNo: "W01" //立库W01
                    }
                    sendData(IP + "/Sys/GetStorageAreaByHouseNo", param, 'get', function(res) {
                        console.log(res)
                        if (res.code == 0) { //成功
                            $("#AreaNo").empty();
                            $("#AreaNo").append('<option value =""></option>');
                            for (var i = 0; i < res.data.length; i++) {
                                $("#AreaNo").append('<option value =' + res.data[i].AreaNo + '>' + res.data[i].AreaNo + '-' +
                                    res.data[i].AreaName + '</option>');
                            }
                            $("select[name='AreaNo']").val(val);
                            form.render('select');
                        } else { //不成功
                            layer.msg('获取区域信息失败', {
                                icon: 2,
                                time: 2000 //2秒关闭(如果不配置,默认是3秒)
                            }, function() {
                                //回调
                                form.render('select');
                            });
                        }
                    });
                }
                //获取巷道
                function GetRoadway(val){
                    sendData(IP + "/Sys/GetStorageRoadwayByHouseNo", {}, 'get', function(res) {
                        if (res.code == 0) { //成功
                            $("#RoadwayNo").empty();
                            $("#RoadwayNo").append('<option value =""></option>');
                            for (var i = 0; i < res.data.length; i++) {
                                $("#RoadwayNo").append('<option value =' + res.data[i].RoadwayNo + '>' + res.data[i].RoadwayNo + '-' +
                                    res.data[i].RoadwayName + '</option>');
                            }
                            $("select[name='RoadwayNo']").val(val);
                            form.render('select');
                        } else { //不成功
                            layer.msg('获取巷道信息失败', {
                                icon: 2,
                                time: 2000 //2秒关闭(如果不配置,默认是3秒)
                            }, function() {
                                //回调
                                form.render('select');
                            });
                        }
                    });
                }
                //获取浏览器参数
                function getQueryString(name) {
                    var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
                    var r = window.location.search.substr(1).match(reg);
                    if (r != null) return unescape(r[2]);
                    return null;
                }
            })
        </script>
    </body>
</html>
Wms/Model/ModelVm/SysVm/LocateVm.cs
@@ -38,12 +38,57 @@
        [MaxLength(3)]
        [Required]
        public string Flag { get; set; }
        /// <summary>
        /// 存储环境
        /// </summary>
        [MaxLength(3)]
        public string Temperature { get; set; }
    }
    /// <summary>
    /// 修改储位集合model
    /// </summary>
    public class EditLocateListNewVm
    {
        /// <summary>
        /// 状态
        /// </summary>
        public string Status { get; set; }
        /// <summary>
        /// 储位标志
        /// </summary>
        public string Flag { get; set; }
        /// <summary>
        /// 巷道
        /// </summary>
        public string RoadWayNo { get; set; }
        /// <summary>
        /// 区域
        /// </summary>
        public string AreaNo { get; set; }
        /// <summary>
        /// 排
        /// </summary>
        public int? Row { get; set; }
        /// <summary>
        /// 列
        /// </summary>
        public int? Column { get; set; }
        /// <summary>
        /// 层
        /// </summary>
        public int? Layer { get; set; }
        /// <summary>
        /// 深度
        /// </summary>
        public int? Dept { get; set; }
    }
    /// <summary>
    /// 修改储位model
    /// </summary>
Wms/WMS.BLL/LogServer/OperationSysServer.cs
@@ -33,55 +33,148 @@
        }
        ///// <summary>
        ///// 查询操作日志
        ///// </summary>
        ///// <param name="menuName">菜单名称</param>
        ///// <param name="type">类型</param>
        ///// <param name="msg">内容</param>
        ///// <param name="startTime">开始日期</param>
        ///// <param name="endTime">结束日期</param>
        ///// <param name="page"></param>
        ///// <param name="limit"></param>
        ///// <param name="count"></param>
        ///// <returns></returns>
        //public List<OperationDto> GetOperationSysList(string menuName, string type, string msg, string startTime, string endTime, int page, int limit, out int count)
        //{
        //    try
        //    {
        //        Expression<Func<LogOperationSys, bool>> item = Expressionable.Create<LogOperationSys>()
        //            .AndIF(!string.IsNullOrWhiteSpace(menuName), it => it.MenuName.Contains(menuName.Trim()))
        //            .AndIF(!string.IsNullOrWhiteSpace(type), it => it.Type == type)
        //            .AndIF(!string.IsNullOrWhiteSpace(msg), it => it.Msg.Contains(msg.Trim()))
        //            .AndIF(!string.IsNullOrWhiteSpace(startTime), it => it.CreateTime >= Convert.ToDateTime(startTime))
        //            .AndIF(!string.IsNullOrWhiteSpace(endTime), it => it.CreateTime <= Convert.ToDateTime(startTime).AddDays(1))
        //            .ToExpression();//注意 这一句 不能少
        /// <summary>
        /// 查询操作日志
        /// </summary>
        /// <param name="menuName">菜单名称</param>
        /// <param name="type">类型</param>
        /// <param name="msg">内容</param>
        /// <param name="startTime">开始日期</param>
        /// <param name="endTime">结束日期</param>
        /// <param name="page"></param>
        /// <param name="limit"></param>
        /// <param name="count"></param>
        /// <returns></returns>
        public List<OperationDto> GetOperationList(string menuName, string type, string msg, string startTime, string endTime, int page, int limit, out int count)
        {
            try
            {
                var total = 0;
                #region asn
        //        var data = GetAllWhereAsync(item)
        //            .Includes(x => x.TypeInfo)
        //            .Includes(x => x.CreateUserInfo)
        //            .Includes(x => x.UpdateUserInfo).ToList();
        //        count = data.Count;
        //        return data.Select(m => new OperationDto()
        //        {
        //            Id = m.Id,
        //            ParentNo = m.ParentNo,
        //            MenuNo = m.MenuNo,
        //            MenuName = m.MenuName,
        //            FkNo = m.FkNo,
        //            Type = m.TypeInfo == null ? "" : m.TypeInfo.DictName,
        //            Msg = m.Msg,
        //            CreateTime = m.CreateTime.ToString("yyyy-MM-dd HH:mm:ss"),
        //            CreateUserName = m.CreateUserInfo == null ? "" : m.CreateUserInfo.UserName,
        //            UpdateTime = m.UpdateTime == null ? "" : ((DateTime)m.UpdateTime).ToString("yyyy-MM-dd HH:mm:ss"),
        //            UpdateUserName = m.UpdateUserInfo == null ? "" : m.UpdateUserInfo.UserName
        //        }).ToList();
        //    }
        //    catch (Exception e)
        //    {
        //        throw new Exception(e.Message);
        //    }
        //}
                var item = Expressionable.Create<LogOperationASN>()
                    .AndIF(!string.IsNullOrWhiteSpace(menuName), it => it.MenuName.Contains(menuName.Trim()))
                    .AndIF(!string.IsNullOrWhiteSpace(type), it => it.Type == type)
                    .AndIF(!string.IsNullOrWhiteSpace(msg), it => it.Msg.Contains(msg.Trim()))
                    .AndIF(!string.IsNullOrWhiteSpace(startTime), it => it.CreateTime >= Convert.ToDateTime(startTime))
                    .AndIF(!string.IsNullOrWhiteSpace(endTime), it => it.CreateTime <= Convert.ToDateTime(endTime).AddDays(1))
                    .And(it=>it.IsDel == "0")
                    .ToExpression();//注意 这一句 不能少
                var list = Db.Queryable<LogOperationASN>().Where(item)
                    .LeftJoin<SysDictionary>((it, dic) => it.Type == dic.Id.ToString())
                    .LeftJoin<SysUserInfor>((it, dic, users) => it.CreateUser == users.Id)
                    .Select((it, dic, users) => new OperationDto()
                    {
                        Id = it.Id,
                        ParentNo = it.ParentNo,
                        MenuNo = it.MenuNo,
                        MenuName = it.MenuName,
                        FkNo = it.FkNo,
                        Type = dic.DictName,
                        Msg = it.Msg,
                        CreateTime = it.CreateTime.ToString("yyyy-MM-dd HH:mm:ss"),
                        CreateUserName = users.RealName,
                    });
                #endregion
                #region so
                var item2 = Expressionable.Create<LogOperationSO>()
                   .AndIF(!string.IsNullOrWhiteSpace(menuName), it => it.MenuName.Contains(menuName.Trim()))
                   .AndIF(!string.IsNullOrWhiteSpace(type), it => it.Type == type)
                   .AndIF(!string.IsNullOrWhiteSpace(msg), it => it.Msg.Contains(msg.Trim()))
                   .AndIF(!string.IsNullOrWhiteSpace(startTime), it => it.CreateTime >= Convert.ToDateTime(startTime))
                   .AndIF(!string.IsNullOrWhiteSpace(endTime), it => it.CreateTime <= Convert.ToDateTime(endTime).AddDays(1))
                   .And(it => it.IsDel == "0")
                   .ToExpression();//注意 这一句 不能少
                var list2 = Db.Queryable<LogOperationSO>().Where(item2)
                    .LeftJoin<SysDictionary>((it, dic) => it.Type == dic.Id.ToString())
                    .LeftJoin<SysUserInfor>((it, dic, users) => it.CreateUser == users.Id)
                    .Select((it, dic, users) => new OperationDto()
                    {
                        Id = it.Id,
                        ParentNo = it.ParentNo,
                        MenuNo = it.MenuNo,
                        MenuName = it.MenuName,
                        FkNo = it.FkNo,
                        Type = dic.DictName,
                        Msg = it.Msg,
                        CreateTime = it.CreateTime.ToString("yyyy-MM-dd HH:mm:ss"),
                        CreateUserName = users.RealName,
                    });
                #endregion
                #region cr
                var item3 = Expressionable.Create<LogOperationCR>()
                    .AndIF(!string.IsNullOrWhiteSpace(menuName), it => it.MenuName.Contains(menuName.Trim()))
                    .AndIF(!string.IsNullOrWhiteSpace(type), it => it.Type == type)
                    .AndIF(!string.IsNullOrWhiteSpace(msg), it => it.Msg.Contains(msg.Trim()))
                    .AndIF(!string.IsNullOrWhiteSpace(startTime), it => it.CreateTime >= Convert.ToDateTime(startTime))
                    .AndIF(!string.IsNullOrWhiteSpace(endTime), it => it.CreateTime <= Convert.ToDateTime(endTime).AddDays(1))
                    .And(it => it.IsDel == "0")
                    .ToExpression();//注意 这一句 不能少
                var list3 = Db.Queryable<LogOperationCR>().Where(item3)
                    .LeftJoin<SysDictionary>((it, dic) => it.Type == dic.Id.ToString())
                    .LeftJoin<SysUserInfor>((it, dic, users) => it.CreateUser == users.Id)
                    .Select((it, dic, users) => new OperationDto()
                    {
                        Id = it.Id,
                        ParentNo = it.ParentNo,
                        MenuNo = it.MenuNo,
                        MenuName = it.MenuName,
                        FkNo = it.FkNo,
                        Type = dic.DictName,
                        Msg = it.Msg,
                        CreateTime = it.CreateTime.ToString("yyyy-MM-dd HH:mm:ss"),
                        CreateUserName = users.RealName,
                    });
                #endregion
                #region sys
                var item4 = Expressionable.Create<LogOperationSys>()
                    .AndIF(!string.IsNullOrWhiteSpace(menuName), it => it.MenuName.Contains(menuName.Trim()))
                    .AndIF(!string.IsNullOrWhiteSpace(type), it => it.Type == type)
                    .AndIF(!string.IsNullOrWhiteSpace(msg), it => it.Msg.Contains(msg.Trim()))
                    .AndIF(!string.IsNullOrWhiteSpace(startTime), it => it.CreateTime >= Convert.ToDateTime(startTime))
                    .AndIF(!string.IsNullOrWhiteSpace(endTime), it => it.CreateTime <= Convert.ToDateTime(startTime).AddDays(1))
                    .ToExpression();//注意 这一句 不能少
                var list4 = Db.Queryable<LogOperationSys>().Where(item4)
                    .LeftJoin<SysDictionary>((it, dic) => it.Type == dic.Id.ToString())
                    .LeftJoin<SysUserInfor>((it, dic, users) => it.CreateUser == users.Id)
                    .Select((it, dic, users) => new OperationDto()
                    {
                        Id = it.Id,
                        ParentNo = it.ParentNo,
                        MenuNo = it.MenuNo,
                        MenuName = it.MenuName,
                        FkNo = it.FkNo,
                        Type = dic.DictName,
                        Msg = it.Msg,
                        CreateTime = it.CreateTime.ToString("yyyy-MM-dd HH:mm:ss"),
                        CreateUserName = users.RealName,
                    });
                #endregion
                var data = Db.UnionAll(list, list2, list3, list4).OrderByDescending(it => it.CreateTime)
                    .ToOffsetPage(page, limit, ref total);
                count = total;
                return data.OrderByDescending(m => m.CreateTime).ToList();
            }
            catch (Exception e)
            {
                throw new Exception(e.Message);
            }
        }
        /// <summary>
        /// 添加操作日志
Wms/WMS.BLL/SysServer/StorageLocatServer.cs
@@ -2,16 +2,19 @@
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Runtime.Intrinsics.X86;
using System.Text;
using System.Threading.Tasks;
using Model.ModelDto.SysDto;
using Model.ModelVm.SysVm;
using SqlSugar;
using WMS.BLL.LogServer;
using WMS.DAL;
using WMS.Entity.BllAsnEntity;
using WMS.Entity.Context;
using WMS.Entity.DataEntity;
using WMS.Entity.SysEntity;
using WMS.IBLL.ILogServer;
using WMS.IBLL.ISysServer;
using WMS.IDAL.ISysInterface;
@@ -298,6 +301,116 @@
                throw new Exception(e.Message);
            }
        }
        public bool EditStorageLocatListNew(EditLocateListNewVm model, int userId)
        {
            try
            {
                if (string.IsNullOrWhiteSpace(model.RoadWayNo))
                {
                    throw new Exception("巷道不能为空");
                }
                bool isRow = false;
                if (model.Row != null)
                {
                    if (model.Row <= 0)
                    {
                        throw new Exception("排需要大于0");
                    }
                    isRow = true;
                }
                bool isColumn = false;
                if (model.Column != null)
                {
                    if (model.Column <= 0)
                    {
                        throw new Exception("列需要大于0");
                    }
                    isColumn = true;
                }
                bool isLayer = false;
                if (model.Layer != null )
                {
                    if (model.Column <= 0)
                    {
                        throw new Exception("层需要大于0");
                    }
                    isLayer = true;
                }
                bool isDepth = false;
                if (model.Dept != null)
                {
                    if (model.Dept != 1 && model.Dept != 2)
                    {
                        throw new Exception("深度只能为1或2");
                    }
                    isDepth = true;
                }
                Expression<Func<SysStorageLocat, bool>> item = Expressionable.Create<SysStorageLocat>() //创建表达式
                    .AndIF(isRow, it => it.Row == model.Row)
                    .AndIF(isColumn, it => it.Column == model.Column)
                    .AndIF(isLayer, it => it.Layer == model.Layer)
                    .AndIF(isDepth, it => it.Depth == "0"+model.Dept)
                    .AndIF(!string.IsNullOrWhiteSpace(model.RoadWayNo), it => it.RoadwayNo == model.RoadWayNo)
                    .ToExpression();//注意 这一句 不能少
                var locateList = Db.Queryable<SysStorageLocat>().Where(item).ToList();
                if (locateList.Count == 0)
                {
                    throw new Exception($"未查询到相对应的储位信息");
                }
                var com = new Common();
                var i = 0;
                Db.BeginTran();
                foreach (var locate in locateList)
                {
                    if (model.Flag == "2" && locate.Depth == "01")//标识是损坏且深度是01时 需把深度为2的储位给屏蔽
                    {
                        var locate2 = com.GetLocateNoDepth2(locate.WareHouseNo, locate.LocatNo);
                        if (locate2.Flag == "0" && !locateList.Contains(locate2))
                        {
                            locate2.Flag = "1";
                            locate2.UpdateUser = userId;
                            locate2.UpdateTime = DateTime.Now;
                            var m = Db.Updateable(locate2).ExecuteCommand();
                        }
                    }
                    if (model.Flag == "0" && locate.Depth == "02")//标识是正常且深度是02时 需判断深度为1的储位状态是否正常
                    {
                        var locate1 = com.GetLocateNoDepth1(locate.WareHouseNo, locate.LocatNo);
                        if (locate1.Flag == "2")
                        {
                            throw new Exception($"需先修改{locate1.LocatNo}的储位标识为不是损坏");
                        }
                    }
                    if (!string.IsNullOrEmpty(model.Status))
                    {
                        locate.Status = model.Status;
                    }
                    if (!string.IsNullOrEmpty(model.Flag))
                    {
                        locate.Flag = model.Flag;
                    }
                    if (!string.IsNullOrEmpty(model.AreaNo))
                    {
                        locate.AreaNo = model.AreaNo;
                    }
                    locate.UpdateUser = userId;
                    locate.UpdateTime = DateTime.Now;
                    i = Db.Updateable(locate).ExecuteCommand();
                }
                Db.CommitTran();
                return i > 0;
            }
            catch (Exception e)
            {
                Db.RollbackTran();
                throw new Exception(e.Message);
            }
        }
        /// <summary>
        /// 查询储位状态
Wms/WMS.IBLL/ILogServer/IOperationSysServer.cs
@@ -10,19 +10,19 @@
{
    public interface IOperationSysServer
    {
        ///// <summary>
        ///// 查询操作日志
        ///// </summary>
        ///// <param name="menuName">菜单名称</param>
        ///// <param name="type">类型</param>
        ///// <param name="msg">内容</param>
        ///// <param name="startTime">开始日期</param>
        ///// <param name="endTime">结束日期</param>
        ///// <param name="page"></param>
        ///// <param name="limit"></param>
        ///// <param name="count"></param>
        ///// <returns></returns>
        //List<OperationDto> GetOperationSysList(string menuName,string type,string msg,string startTime,string endTime,int page,int limit,out int count);
        /// <summary>
        /// 查询操作日志
        /// </summary>
        /// <param name="menuName">菜单名称</param>
        /// <param name="type">类型</param>
        /// <param name="msg">内容</param>
        /// <param name="startTime">开始日期</param>
        /// <param name="endTime">结束日期</param>
        /// <param name="page"></param>
        /// <param name="limit"></param>
        /// <param name="count"></param>
        /// <returns></returns>
        List<OperationDto> GetOperationList(string menuName, string type, string msg, string startTime, string endTime, int page, int limit, out int count);
        /// <summary>
        /// 添加操作日志
Wms/WMS.IBLL/ISysServer/IStorageLocatServer.cs
@@ -81,6 +81,13 @@
        /// <param name="userId">操作人</param>
        /// <returns></returns>
        bool EditStorageLocatList(EditLocateListVm model, int userId);
        /// <summary>
        /// 批量修改储位信息 状态、标识、区域
        /// </summary>
        /// <param name="model"></param>
        /// <param name="userId"></param>
        /// <returns></returns>
        bool EditStorageLocatListNew(EditLocateListNewVm model, int userId);
        /// <summary>
        /// 获取储位信息
Wms/Wms/Controllers/SysController.cs
@@ -21,6 +21,7 @@
using Model.ModelDto;
using Model.ModelDto.LogDto;
using Newtonsoft.Json.Linq;
using Model.ModelVm.LogVm;
namespace Wms.Controllers
{
@@ -1260,6 +1261,47 @@
                return Ok(new { code = 1, msg = "数据格式错误" });
            }
        }
        /// <summary>
        /// 修改储位状态标识信息集合
        /// </summary>
        /// <param name="model">模型</param>
        /// <returns></returns>
        [HttpPost]
        public IActionResult EditStorageLocatListNew (EditLocateListNewVm model)
        {
            try
            {
                //获取当前登录的用户ID
                var claimsIdentity = this.User.Identity as ClaimsIdentity;
                if (claimsIdentity == null)
                {
                    return Ok(new { code = 1, msg = "为获取到当前操作人信息" });
                }
                var userId = claimsIdentity.FindFirst(ClaimTypes.Name)?.Value;
                if (string.IsNullOrWhiteSpace(userId))
                {
                    return Ok(new { code = 1, msg = "为获取到当前操作人信息" });
                }
                var bolls = _locatSvc.EditStorageLocatListNew(model, int.Parse(userId));
                if (bolls)
                {
                    _operation.InsertOperation("仓库设置", "储位管理", "", "修改", $"修改巷道:{model.RoadWayNo}、排:{model.Row}、列:{model.Column}、层:{model.Layer}、深度:{model.Dept}的区域:{model.AreaNo}、状态:{model.Status}、标识:{model.Flag}的储位信息 ", Convert.ToInt32(userId));
                    return Ok(new { code = 0, msg = "编辑成功", data = "" });
                }
                else
                {
                    return Ok(new { code = 1, msg = "编辑失败", data = "" });
                }
            }
            catch (Exception e)
            {
                return Ok(new { code = 1, msg = e.Message });
            }
        }
        #endregion
        #region 托盘条码管理
@@ -2001,7 +2043,30 @@
        #endregion
        #region 操作日志
        /// <summary>
        /// 获取操作日志信息
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        [AllowAnonymous]
        [HttpPost]
        public IActionResult GetLogOperationList(GetOperationVm model)
        {
            try
            {
                var bolls = _operation.GetOperationList(model.MenuName, model.Type, model.Msg, model.StartTime, model.EndTime, model.Page, model.Limit, out int count);
                return Ok(new { code = 0, count, msg = "操作日志信息", data = bolls });
            }
            catch (Exception e)
            {
                return Ok(new { code = 1, msg = e.Message });
            }
        }
        #endregion
        #region 数据表格表头自定义(通用方法)
        /// <summary>