1
yuyou_x
2024-01-31 426134e8a0dbb5fc63a0bc64eeff2de6aac4b81a
1
4个文件已修改
5个文件已添加
1464 ■■■■■ 已修改文件
HTML/views/SystemSettings/Category.html 539 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HTML/views/WareHouseSetting/StorageLegend.html 337 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/Model/ModelDto/SysDto/MaterialCategoryDto.cs 73 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.BLL/SysServer/MaterialCategory.cs 218 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.BLL/SysServer/StorageLocatServer.cs 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.Entity/SysEntity/MaterialCategory.cs 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.IBLL/ISysServer/IMaterialCategory.cs 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.IBLL/ISysServer/IStorageLocatServer.cs 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/Wms/Controllers/SysController.cs 195 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HTML/views/SystemSettings/Category.html
New file
@@ -0,0 +1,539 @@
<!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">
        <script>
            // 这里是需要在页面渲染之前执行的代码
            document.addEventListener("DOMContentLoaded", function() {
                //获取table默认显示数
                pageCntFirst();
            });
          </script>
    </head>
    <body>
        <div class="layui-fluid" style="padding-bottom: 0;">
            <div class="layui-card">
                <div class="layui-form layui-card-header layuiadmin-card-header-auto" style="border-bottom:1px solid #CCC">
                    <div class="layui-form-item">
                        <div class="layui-inline">
                            <label class="layui-form-label" style="width: 60px;">类别名称</label>
                            <div class="layui-input-inline">
                                <input type="text" id="DictName" name="DictName" placeholder="请输入功能名称" autocomplete="off" class="layui-input">
                            </div>
                        </div>
                        <div class="layui-inline">
                            <label class="layui-form-label" style="width: 70px;">父级字典号</label>
                            <div class="layui-input-inline">
                                <select name="ParentNo" id="ParentNo" lay-verify="" lay-search="">
                                    <option value=""></option>
                                </select>
                            </div>
                        </div>
                        <div class="layui-inline">
                            <label class="layui-form-label" style="width: 45px;">区域</label>
                            <div class="layui-input-inline">
                                <select name="Level" id="Level" lay-verify="" lay-search>
                                    <option value=""></option>
                                    <option value="0">根目录</option>
                                    <option value="1">下级目录</option>
                                </select>
                            </div>
                        </div>
                        <!-- <div class="layui-inline">
                            <label class="layui-form-label" style="width: 60px;">是否公开</label>
                            <div class="layui-input-inline">
                                <select name="IsPublic" id="IsPublic" lay-verify="" lay-search>
                                    <option value=""></option>
                                    <option value="0">公开</option>
                                    <option value="1">不公开</option>
                                </select>
                            </div>
                        </div> -->
                        <div class="layui-inline">
                            <label class="layui-form-label" style="width: 60px;">允许编辑</label>
                            <div class="layui-input-inline">
                                <select name="IsEdit" id="IsEdit" lay-verify="" lay-search>
                                    <option value=""></option>
                                    <option value="0">允许</option>
                                    <option value="1">不允许</option>
                                </select>
                            </div>
                        </div>
                        <div class="layui-inline">
                            <label class="layui-form-label" style="width: 60px;">允许增加</label>
                            <div class="layui-input-inline">
                                <select name="IsAdd" id="IsAdd" lay-verify="" lay-search>
                                    <option value=""></option>
                                    <option value="0">允许</option>
                                    <option value="1">不允许</option>
                                </select>
                            </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 class="layui-inline">
                            <button class="layui-btn layui-btn-sm layuiadmin-btn-list approvalBtn" data-type="add" id="approvalBtn">
                                <i class="layui-icon layuiadmin-button-btn">&#xe654;</i>添加
                            </button>
                        </div>
                    </div>
                </div>
                <div class="layui-card-body">
                    <table id="LAY-app-content-list" lay-filter="LAY-app-content-list"></table>
                    <!-- 是否公开 -->
                    <script type="text/html" id="buttonIsPublic">
                        {{# if(d.IsPublic=='0'){ }}
                            <button class="layui-btn layui-btn-radius layui-btn-xs">公开</button>
                        {{# } else if(d.IsPublic=='1') { }}
                            <button class="layui-btn layui-btn-radius layui-btn-danger layui-btn-xs">不公开</button>
                        {{# }  }}
                    </script>
                    <!-- 层级 -->
                    <script type="text/html" id="buttonLevel">
                        {{# if(d.Level=='0'){ }}
                            <button class="layui-btn layui-btn-radius layui-btn-xs">根目录</button>
                        {{# } else if(d.Level=='1') { }}
                            <button class="layui-btn layui-btn-radius layui-btn-danger layui-btn-xs">下级目录</button>
                        {{# }  }}
                    </script>
                    <!-- 允许编辑 -->
                    <script type="text/html" id="buttonIsEdit">
                        {{# if(d.IsEdit=='0'){ }}
                            <p>允许</p>
                        {{# } else if(d.IsEdit=='1') { }}
                            <p>不允许</p>
                        {{# }  }}
                    </script>
                    <!-- 允许添加 -->
                    <script type="text/html" id="buttonIsAdd">
                        {{# if(d.IsAdd=='0'){ }}
                            <p>允许</p>
                        {{# } else if(d.IsAdd=='1') { }}
                            <p>不允许</p>
                        {{# }  }}
                    </script>
                    <!-- 操作 -->
                    <script type="text/html" id="table-content-list">
                        {{# if(d.IsEdit=='0'){ }}
                            <a class="layui-btn layui-btn-normal layui-btn-xs approvalBtnupt" lay-event="edit">
                                <i class="layui-icon layui-icon-edit"></i>编辑
                            </a>
                        {{# } else if(d.IsEdit=='1') }}
                        <a class="layui-btn layui-btn-danger layui-btn-xs approvalBtndel" lay-event="del">
                            <i class="layui-icon layui-icon-delete"></i>删除
                        </a>
                    </script>
                </div>
            </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>
            layui.config({
                base: '../../layuiadmin/' //静态资源所在路径
            }).extend({
                index: 'lib/index' //主入口模块
            }).use(['index', 'table', 'laypage', 'layer'], function() {
                var table = layui.table,
                    form = layui.form,
                    laypage = layui.laypage,
                    layer = layui.layer;
                var tableIns;
                //获取父级字典号
                sendData(IP + "/sys/GetDicParentListByLevel",{},'get',function(res){
                    if (res.code == 0) //成功
                    {
                        parentnohtml = '<option value =""></option>';
                        for (var i = 0; i < res.data.length; i++) {
                            //判断层级不是按钮
                            if (res.data[i].Level == '0')
                            {
                                //根目录
                                parentnohtml = parentnohtml + '<option value =' + res.data[i].DictNo + '>' + res.data[i].DictName + '</option>'
                            }
                        }
                        $("#ParentNo").append(parentnohtml);
                        form.render('select');
                    }
                })
                function refreshTable(DictName,DictNo,Level,IsEdit,IsAdd) {
                    var param = {
                        DictName: DictName,
                        DictNo: DictNo,
                        Level: Level,
                        IsEdit: IsEdit,
                        IsAdd: IsAdd
                    };
                    sendData(IP + "/Sys/GetDicList?DictName="+DictName+"&&DictNo="+DictNo+"&&Level="+Level+"&&IsEdit="+IsEdit+"&&IsAdd="+IsAdd, {}, 'get', function(res) {
                        if (res.code == 0) { //成功
                            var list = res.data;
                            $.extend(infoOptions, {
                                data: list
                            });
                            infoOptions.page = {
                                curr: 1
                            }
                            tableIns = table.render(infoOptions);
                        }
                        else //不成功
                        {
                            layer.msg('获取字典列表信息失败!', {
                                icon: 2,
                                time: 2000 //2秒关闭(如果不配置,默认是3秒)
                            }, function() {});
                        }
                    });
                }
                sendData(IP + "/basis/GetRoleRightList", {}, 'get', function(res) {
                    $(function() {
                        $("#approvalBtn").hide();
                    });
                    $(function() {
                        $(".approvalBtnupt").hide();
                    });
                    $(function() {
                        $(".approvalBtndel").hide();
                    });
                    if (res.code == 0) { //成功
                        for (var k = 0; k < res.data.length; k++) {
                            if (res.data[k].MenuName == "添加字典") {
                                $(function() {
                                    $("#approvalBtn").show();
                                });
                            }
                            if (res.data[k].MenuName == "删除字典") {
                                $(function() {
                                    $(".approvalBtndel").show();
                                });
                            }
                            if (res.data[k].MenuName == "编辑字典") {
                                $(function() {
                                    $(".approvalBtnupt").show();
                                });
                            }
                        }
                    }
                    else
                    { //不成功
                        layer.msg('获取信息失败', {
                            icon: 2,
                            time: 2000 //2秒关闭(如果不配置,默认是3秒)
                        }, function() {
                            //回调
                        });
                    }
                });
                var infoOptions = {
                    elem: "#LAY-app-content-list",
                    height: "full-95",
                    id: "LAY-app-content-list",
                    page: true,
                    limit: pageCnt,
                    limits: pageLimits,
                    even: true,
                    cellMinWidth: 80, //全局定义常规单元格的最小宽度,layui 2.2.1 新增
                    cols: [[
                        {
                            title: '序号', type: 'numbers', fixed: 'left', width:65
                        },
                        {
                            field: 'DictNo', title: '字典编号', align: 'center', fixed: 'left'
                        },
                        {
                            field: 'DictName', title: '字典名称', align: 'center'
                        },
                        {
                            field: 'ParentNo', title: '父级字典号', align: 'center'
                        },
                        {
                            field: 'Ord', title: '显示顺序', align: 'center'
                        },
                        {
                            field: 'Level', title: '层级', align: 'center', templet: '#buttonLevel'
                        },
                        {
                            field: 'IsPublic', templet: '#buttonIsPublic', title: '是否公开', align: 'center'
                        },
                        {
                            field: 'IsEdit', title: '允许编辑', align: 'center',  templet: '#buttonIsEdit'
                        },
                        {
                            field: 'IsAdd', title: '允许增加', align: 'center', templet: '#buttonIsAdd'
                        },
                        {
                            field: 'CreateName', title: '创建人', align: 'center'
                        },
                        {
                            field: 'CreateTime', title: '创建日期', align: 'center',
                            templet: function (d) {
                                return formatDate(d.CreateTime);
                            }
                        },
                        {
                            title: '操作', fixed: 'right', align: 'center', width: 200 , toolbar: '#table-content-list'
                        }
                    ]],
                };
                //监听搜索
                form.on('submit(LAY-app-contlist-search)', function(data) {
                    console.log(data)
                    var DictName = data.field.DictName;
                    var DictNo = data.field.ParentNo;
                    var Level = data.field.Level;
                    var IsEdit = data.field.IsEdit;
                    var IsAdd = data.field.IsAdd;
                    refreshTable(DictName,DictNo,Level,IsEdit,IsAdd);
                });
                var doing = true;
                var $ = layui.$,
                    active = {
                        //新增
                        add: function() {
                            layer.open({
                                type: 2,
                                title: '添加字典信息',
                                content: 'DictionaryForm.html',
                                maxmin: true,
                                area: ['530px', '530px'],
                                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; //获取提交的字段
                                        //提交 Ajax 成功后,静态更新表格中的数据
                                        var param = {
                                            DictNo: field.DictNo, //字典编号
                                            DictName: field.DictName, //字典名称
                                            ParentNo: field.ParentNo, //父级字典号
                                            Ord: field.Ord, //显示顺序
                                            Level: field.Level, //层级
                                            IsPublic: field.IsPublic, //是否公开
                                            IsEdit: field.IsEdit, //允许编辑
                                            IsAdd: field.IsAdd //允许添加
                                        };
                                        if(field.Level == '1')
                                        {
                                            if(field.ParentNo == '')
                                            {
                                                layer.msg("当层级为子级时,父级目录不可为空!", {
                                                    icon: 2,
                                                    time: 2000 //2秒关闭(如果不配置,默认是3秒)
                                                }, function() {doing = true;});
                                            }
                                            else
                                            {
                                                console.log(11)
                                                if(doing){
                                                    doing = false;
                                                    sendData(IP + "/sys/AddDic", param, 'post',function(res) {
                                                        console.log(res);
                                                        if (res.code == 0) { //成功
                                                            layer.msg(res.msg, {
                                                                icon: 1,
                                                                time: 2000 //2秒关闭(如果不配置,默认是3秒)
                                                            }, function() {
                                                                layer.close(index); //关闭弹层
                                                                refreshTable($("#DictName").val(),$("#ParentNo").val(),$("#Level").val(), $("#IsEdit").val(), $("#IsAdd").val());
                                                                doing = true;
                                                            });
                                                        }
                                                        else
                                                        { //不成功
                                                            layer.msg(res.msg, {
                                                                icon: 2,
                                                                time: 2000 //2秒关闭(如果不配置,默认是3秒)
                                                            }, function() {doing = true;});
                                                        }
                                                    });
                                                }
                                                else
                                                {
                                                    console.log(123);
                                                }
                                            }
                                        }
                                    });
                                    submit.trigger('click');
                                }
                            });
                        }
                    };
                $('.layui-btn.layuiadmin-btn-list').on('click', function() {
                    var type = $(this).data('type');
                    active[type] ? active[type].call(this) : '';
                });
                var element = layui.element;
                var houseId = 0;
                var param = {
                    Id: $.cookie('userId')
                }
                var xml = '';
                function getchiled(data, mainId) {
                    if (data)
                    {
                        var list = data.filter(item => item.ParentId == mainId);
                        if (list)
                        {
                            for (var i = 0; i < list.length; i++) {
                                var id = list[i].Id;
                                //查询有无子菜单
                                var count = data.filter(item => item.ParentId == id).length;
                                if (count > 0)
                                {
                                    xml = xml + '<dd>' + '<a href="javascript:;">' + list[i].Name + '</a>' + '<dl class="layui-nav-child">';
                                    getchiled(data, id);
                                    xml = xml + '</dl></dd>';
                                }
                                else
                                {
                                    xml = xml + '<dd>' + '<a lay-href="' + list[i].Url + '">' + list[i].Name + '</a>' + '</dd>';
                                }
                            }
                        }
                    }
                }
                var uid = $.cookie('userId');
                refreshTable("","","","","");
                table.on('tool(LAY-app-content-list)', function(obj) {
                    var data = obj.data;
                    //删除
                    if (obj.event === 'del')
                    {
                        layer.confirm('确定删除选中的字典?', function(index) {
                            // console.log(data);
                            cusid = data.Id;
                            var arr = [];
                            arr.push(cusid); //属性
                            var param = {
                                Ids: arr
                            };
                            if(doing)
                            {
                                doing = false;
                                sendData(IP + "/sys/DelDic?Id="+data.Id+"", {} , 'get', function(res) {
                                    console.log(res);
                                    if (res.code == 0)
                                    { //成功
                                        layer.msg(res.msg, {
                                            icon: 1,
                                            time: 2000 //2秒关闭(如果不配置,默认是3秒)
                                        }, function() {
                                            refreshTable($("#DictName").val(),$("#ParentNo").val(),$("#Level").val(), $("#IsEdit").val(), $("#IsAdd").val());
                                            //table.reload('LAY-app-content-list'); //数据刷新
                                            doing = true;
                                        });
                                    }
                                    else
                                    { //不成功
                                        layer.msg(res.msg, {
                                            icon: 2,
                                            time: 2000 //2秒关闭(如果不配置,默认是3秒)
                                        }, function() {doing = true;});
                                    }
                                });
                            }
                            else
                            {
                                console.log(123);
                            }
                        });
                    }
                    //编辑
                    else if (obj.event === 'edit')
                    {
                        cusId = data.Id;
                        layer.open({
                            type: 2,
                            title: '编辑字典信息',
                            content: 'DictionaryForm.html?id=' + cusId,
                            maxmin: true,
                            area: ['500px', '450px'],
                            btn: ['确定', '取消'],
                            yes: function(index, layero) {
                                var iframeWindow = window['layui-layer-iframe' + index],
                                    submitID = 'layuiadmin-app-form-edit',
                                    submit = layero.find('iframe').contents().find('#' + submitID);
                                //监听提交
                                iframeWindow.layui.form.on('submit(' + submitID + ')', function(data) {
                                    var field = data.field; //获取提交的字段
                                    //提交 Ajax 成功后,静态更新表格中的数据
                                    var param = {
                                        Id: cusId,
                                        DictNo: field.DictNo,
                                        DictName: field.DictName,
                                        ParentNo: field.ParentNo,
                                        Ord: field.Ord,
                                        Level: field.Level,
                                        IsPublic: field.IsPublic,
                                        IsEdit: field.IsEdit,
                                        IsAdd: field.IsAdd
                                    };
                                    if(doing)
                                    {
                                        doing = false;
                                        sendData(IP + "/sys/ExitDic", param, 'post',
                                        function(res) {
                                            if (res.code == 0)
                                            { //成功
                                                layer.msg("修改成功", {
                                                    icon: 1,
                                                    time: 1000 //2秒关闭(如果不配置,默认是3秒)
                                                }, function() {
                                                    layer.close(index); //关闭弹层
                                                    refreshTable($("#DictName").val(),$("#ParentNo").val(),$("#Level").val(), $("#IsEdit").val(), $("#IsAdd").val());
                                                    //table.reload('LAY-app-content-list'); //数据刷新
                                                    doing = true;
                                                });
                                            }
                                            else
                                            { //不成功
                                                layer.msg(res.msg, {
                                                    icon: 2,
                                                    time: 2000 //2秒关闭(如果不配置,默认是3秒)
                                                }, function() {doing = true;});
                                            }
                                        });
                                    }
                                    else
                                    {
                                        console.log(123);
                                    }
                                });
                                submit.trigger('click');
                            }
                        });
                    }
                });
            });
        </script>
    </body>
</html>
HTML/views/WareHouseSetting/StorageLegend.html
@@ -83,6 +83,7 @@
            Opacity: .8;
        }
        .btnShow {
            width: 20px;
            height: 15px;
@@ -120,13 +121,22 @@
                                    <div class="layui-inline">
                                        <label class="layui-form-label">排</label>
                                        <div class="layui-input-inline">
                                            <select name="Detph" id="Detph" lay-filter="SelectLayer">
                                                <option value="1">第一排</option>
                                                <option value="2">第二排</option>
                                            <select name="Row" id="Row" lay-filter="SelectLayer">
                                                <!-- <option value="1">第一排</option>
                                                <option value="2">第二排</option> -->
                                            </select>
                                        </div>
                                    </div>
                                    <!-- 定时自刷新库位图例 -->
                                    <div class="layui-inline">
                                        <label class="layui-form-label">深度</label>
                                        <div class="layui-input-inline">
                                            <select name="Depth" id="Depth" lay-filter="SelectDepth">
                                                <option value="01" selected>深度1</option>
                                                <option value="02" id="shendu2">深度2</option>
                                            </select>
                                        </div>
                                    </div>
                                    <!-- //定时自刷新库位图例 -->
                                    <div class="layui-inline" style="float: right;">
                                        <label class="layui-form-label" style="margin-top: 10px;">自动刷新</label>
                                        <div class="layui-input-inline" style="width: auto;">
@@ -212,8 +222,8 @@
            var cengShu = "1";
            var dom = $('#LAY_app_tabsheader', parent.document).children();//.find(s=>s.s.nodeType == 1 && className == "layui-this")
            //算出button百分比大小
            var xianga = "";
            var xiangb = "";
            //获取仓库下拉框信息
            synData(IP + "/Sys/GetWarehouseDic", {}, 'get', function (res) {
@@ -238,25 +248,150 @@
                }
            });
            getRoadway();
            var svmwidth = 0;
            GetSlotVm($("#WareHouseNo").val(), $("#RoadwayNo").val(), $("#Detph").val());
            GetSlotVm($("#WareHouseNo").val(), $("#RoadwayNo").val(), $("#Row").val(), $("#Depth").val());
            GetSlotChart($("#WareHouseNo").val());
            GetSlotChartz($("#WareHouseNo").val(), $("#RoadwayNo").val())
            // 查询事件
            form.on('select(getWareHouseNo)', function (data) {
                GetSlotVm($("#WareHouseNo").val(), $("#RoadwayNo").val(), $("#Detph").val());
                GetSlotVm($("#WareHouseNo").val(), $("#RoadwayNo").val(), $("#Row").val(), $("#Depth").val());
                getRoadway()
                GetSlotChart($("#WareHouseNo").val())
            });
            form.on('select(getRoadwayNo)', function (data) {
                if (data.value == "R01")
                {
                    xianga = "巷道1排";
                    xiangb = "巷道2排";
                    $("#Row").empty();//清空上一个查询下拉值
                    $("#Row option[value ='1']").attr("selected", "selected")
                    $("#Row").append('<option value =1>第1排</option>');
                    $("#Row").append('<option value =2>第2排</option>');
                    form.render('select');
                }
                else if ($("#RoadwayNo").val() == "R02")
                {
                    xianga = "巷道3排";
                    xiangb = "巷道4排";
                    $("#Row").empty();//清空上一个查询下拉值
                    $("#Row option[value ='3']").attr("selected", "selected")
                    $("#Row").append('<option value =3>第3排</option>');
                    $("#Row").append('<option value =4>第4排</option>');
                    form.render('select');
                }
                else if ($("#RoadwayNo").val() == "R03")
                {
                    xianga = "巷道5排";
                    xiangb = "巷道6排";
                    $("#Row").empty();//清空上一个查询下拉值
                    $("#Row option[value ='5']").attr("selected", "selected")
                    $("#Row").append('<option value =5>第5排</option>');
                    $("#Row").append('<option value =6>第6排</option>');
                    form.render('select');
                }
                else if ($("#RoadwayNo").val() == "R04")
                {
                    xianga = "巷道7排";
                    xiangb = "巷道8排";
                    $("#Row").empty();//清空上一个查询下拉值
                    $("#Row option[value ='7']").attr("selected", "selected")
                    $("#Row").append('<option value =7>第7排</option>');
                    $("#Row").append('<option value =8>第8排</option>');
                    form.render('select');
                }
                else if ($("#RoadwayNo").val() == "R05")
                {
                    xianga = "巷道9排";
                    xiangb = "巷道10排";
                    $("#Row").empty();//清空上一个查询下拉值
                    $("#Row option[value ='9']").attr("selected", "selected")
                    $("#Row").append('<option value =9>第9排</option>');
                    $("#Row").append('<option value =10>第10排</option>');
                    form.render('select');
                }
                else if ($("#RoadwayNo").val() == "R06")
                {
                    xianga = "巷道11排";
                    xiangb = "巷道12排";
                    $("#Row").empty();//清空上一个查询下拉值
                    $("#Row option[value ='11']").attr("selected", "selected")
                    $("#Row").append('<option value =11>第11排</option>');
                    $("#Row").append('<option value =12>第12排</option>');
                    form.render('select');
                }
                else if ($("#RoadwayNo").val() == "R07")
                {
                    xianga = "巷道13排";
                    xiangb = "巷道14排";
                    $("#Row").empty();//清空上一个查询下拉值
                    $("#Row option[value ='13']").attr("selected", "selected")
                    $("#Row").append('<option value =13>第13排</option>');
                    $("#Row").append('<option value =14>第14排</option>');
                    form.render('select');
                }
                else if ($("#RoadwayNo").val() == "R08")
                {
                    xianga = "巷道15排";
                    xiangb = "巷道16排";
                    $("#Row").empty();//清空上一个查询下拉值
                    $("#Row option[value ='15']").attr("selected", "selected")
                    $("#Row").append('<option value =15>第15排</option>');
                    $("#Row").append('<option value =16>第16排</option>');
                    form.render('select');
                }
                else if ($("#RoadwayNo").val() == "R09")
                {
                    xianga = "巷道17排";
                    xiangb = "巷道18排";
                    $("#Row").empty();//清空上一个查询下拉值
                    $("#Row option[value ='17']").attr("selected", "selected")
                    $("#Row").append('<option value =17>第17排</option>');
                    $("#Row").append('<option value =18>第18排</option>');
                    form.render('select');
                }
                else if ($("#RoadwayNo").val() == "R10")
                {
                    xianga = "巷道19排";
                    xiangb = "巷道20排";
                    $("#Row").empty();//清空上一个查询下拉值
                    $("#Row option[value ='19']").attr("selected", "selected")
                    $("#Row").append('<option value =19>第19排</option>');
                    $("#Row").append('<option value =>第20排</option>');
                    form.render('select');
                }
                GetSlotChartz($("#WareHouseNo").val(), $("#RoadwayNo").val())
                GetSlotVm($("#WareHouseNo").val(), $("#RoadwayNo").val(), $("#Detph").val());
                GetSlotVm($("#WareHouseNo").val(), $("#RoadwayNo").val(), $("#Row").val(), $("#Depth").val());
            })
            form.on('select(SelectLayer)', function (data) {
                GetSlotVm($("#WareHouseNo").val(), $("#RoadwayNo").val(), $("#Detph").val());
                if($("#Row").val() == "2" || $("#Row").val() == "5" || $("#Row").val() == "9" || $("#Row").val() == "13" || $("#Row").val() == "17")
                {
                    $("#Depth").empty();//清空上一个查询下拉值
                    $("#Depth option[value ='01']").attr("selected", "selected")
                    $("#Depth").append('<option value =01>深度1</option>');
                }
                else
                {
                    $("#Depth").empty();//清空上一个查询下拉值
                    $("#Depth option[value ='01']").attr("selected", "selected")
                    $("#Depth").append('<option value =01>深度1</option>');
                    $("#Depth").append('<option value =02>深度2</option>');
                }
                form.render('select');
                GetSlotVm($("#WareHouseNo").val(), $("#RoadwayNo").val(), $("#Row").val(), $("#Depth").val());
            });
            form.on('select(SelectDepth)', function (data) {
                GetSlotVm($("#WareHouseNo").val(), $("#RoadwayNo").val(), $("#Row").val(), $("#Depth").val());
            });
            //获取仓库巷道
@@ -268,10 +403,109 @@
                        for (var i = 0; i < res.data.length; i++) {
                            $("#RoadwayNo").append('<option value =' + res.data[i].RoadwayNo + '>' +
                                res.data[i].RoadwayName + '</option>');
                            res.data[i].RoadwayName + '</option>');
                        }
                        $("#RoadwayNo option[value='" + res.data[0].RoadwayNo + "']").attr("selected", "selected")
                        $("#Depth option[value ='01']").attr("selected", "selected")
                        form.render('select');
                        if ($("#RoadwayNo").val() == "R01")
                        {
                            xianga = "巷道1排";
                            xiangb = "巷道2排";
                            $("#Row option[value ='1']").attr("selected", "selected")
                            $("#Row").append('<option value =1>第1排</option>');
                            $("#Row").append('<option value =2>第2排</option>');
                            form.render('select');
                        }
                        else if ($("#RoadwayNo").val() == "R02")
                        {
                            xianga = "巷道3排";
                            xiangb = "巷道4排";
                            $("#Row option[value ='3']").attr("selected", "selected")
                            $("#Row").append('<option value =3>第3排</option>');
                            $("#Row").append('<option value =4>第4排</option>');
                            form.render('select');
                        }
                        else if ($("#RoadwayNo").val() == "R03")
                        {
                            xianga = "巷道5排";
                            xiangb = "巷道6排";
                            $("#Row option[value ='5']").attr("selected", "selected")
                            $("#Row").append('<option value =5>第5排</option>');
                            $("#Row").append('<option value =6>第6排</option>');
                            form.render('select');
                        }
                        else if ($("#RoadwayNo").val() == "R04")
                        {
                            xianga = "巷道7排";
                            xiangb = "巷道8排";
                            $("#Row option[value ='7']").attr("selected", "selected")
                            $("#Row").append('<option value =7>第7排</option>');
                            $("#Row").append('<option value =8>第8排</option>');
                            form.render('select');
                        }
                        else if ($("#RoadwayNo").val() == "R05")
                        {
                            xianga = "巷道9排";
                            xiangb = "巷道10排";
                            $("#Row option[value ='9']").attr("selected", "selected")
                            $("#Row").append('<option value =9>第9排</option>');
                            $("#Row").append('<option value =10>第10排</option>');
                            form.render('select');
                        }
                        else if ($("#RoadwayNo").val() == "R06")
                        {
                            xianga = "巷道11排";
                            xiangb = "巷道12排";
                            $("#Row option[value ='11']").attr("selected", "selected")
                            $("#Row").append('<option value =11>第11排</option>');
                            $("#Row").append('<option value =12>第12排</option>');
                            form.render('select');
                        }
                        else if ($("#RoadwayNo").val() == "R07")
                        {
                            xianga = "巷道13排";
                            xiangb = "巷道14排";
                            $("#Row option[value ='13']").attr("selected", "selected")
                            $("#Row").append('<option value =13>第13排</option>');
                            $("#Row").append('<option value =14>第14排</option>');
                            form.render('select');
                        }
                        else if ($("#RoadwayNo").val() == "R08")
                        {
                            xianga = "巷道15排";
                            xiangb = "巷道16排";
                            $("#Row option[value ='15']").attr("selected", "selected")
                            $("#Row").append('<option value =15>第15排</option>');
                            $("#Row").append('<option value =16>第16排</option>');
                            form.render('select');
                        }
                        else if ($("#RoadwayNo").val() == "R09")
                        {
                            xianga = "巷道17排";
                            xiangb = "巷道18排";
                            $("#Row option[value ='17']").attr("selected", "selected")
                            $("#Row").append('<option value =17>第17排</option>');
                            $("#Row").append('<option value =18>第18排</option>');
                            form.render('select');
                        }
                        else if ($("#RoadwayNo").val() == "R10")
                        {
                            xianga = "巷道19排";
                            xiangb = "巷道20排";
                            $("#Row option[value ='19']").attr("selected", "selected")
                            $("#Row").append('<option value =19>第19排</option>');
                            $("#Row").append('<option value =>第20排</option>');
                            form.render('select');
                        }
                    } else { //不成功
                        layer.msg(res.msg, {
                            icon: 2,
@@ -283,11 +517,12 @@
            }
            //获取数据渲染库位图
            function GetSlotVm(houseNo, roadway, row) {
            function GetSlotVm(houseNo, roadway, row, depth) {
                var param = {
                    WareHouseNo: houseNo,
                    roadway: roadway,
                    Row: row
                    Row: row,
                    Depth: depth
                }
                sendData(IP + "/Sys/GetStorageLocatLists", param, 'get', function (res) {
                    if (res.code == 0) {
@@ -306,6 +541,7 @@
                                var statu = list.find(r => r.Column == a && r.Layer == i);
                                if (statu != undefined) {
                                    //判断储位标识是否为0
                                    if(statu.Flag != '0')
                                    {
                                        html += '<td><button value=' + statu.LocatNo + ' class="btnShow filg"  ></button></td>'
@@ -313,24 +549,25 @@
                                    }
                                    //空储位 0
                                    if (statu.Status == 0) {
                                        html += '<td><button value=' + statu.LocatNo + ' class="btnShow zero" ></button></td>'
                                        html += '<td><button value=' + statu.LocatNo + ' class="btnShow zero"  ></button></td>'
                                        continue;
                                    }
                                    //有物品 1
                                    if (statu.Status == 1) {
                                        html += '<td><button value=' + statu.LocatNo + '  class="btnShow one" ></button></td>'
                                        html += '<td><button value=' + statu.LocatNo + '  class="btnShow one"  ></button></td>'
                                        continue;
                                    }
                                    //入库中 2
                                    if (statu.Status == 2) {
                                        html += '<td><button value=' + statu.LocatNo + '  class="btnShow two" ></button></td>'
                                        html += '<td><button value=' + statu.LocatNo + '  class="btnShow two"  ></button></td>'
                                        continue;
                                    }
                                    //出库中 3
                                    if (statu.Status == 3) {
                                        html += '<td><button value=' + statu.LocatNo + '  class="btnShow three" ></button></td>'
                                        html += '<td><button value=' + statu.LocatNo + '  class="btnShow three"  ></button></td>'
                                        continue;
                                    }
                                    //移入中 4
                                    // if (statu.Status == 4) {
                                    //     html += '<td style="height:auto;width:auto"><button value=' + statu.LocatNo + '  class="btnShow four" style="height:' + height3 + 'px;width:' + svmwidth + 'px"></button></td>'
@@ -353,13 +590,12 @@
                            let num = 1;
                            if (i == 1) {
                                html += '<tr style="height:10px;"><td></td>'
                                for (let aa = 0; aa < list.length; aa++) {
                                    //let num = Number(aa) + 1;
                                    if (list[aa].Layer == i) {
                                        html += '<td><p>&nbsp;' + num + '</p></td>'
                                        num = Number(num) + 1;
                                    }
                                }
                                html += '</tr>'
@@ -376,31 +612,19 @@
                });
            }
            // 加载仓库图例
            //圆
            function GetSlotChart(warehouseNo) {
                sendData(IP + "/Sys/GetStorageProportion?WareHouseNo=" + warehouseNo, {}, 'get', function (res) {
                    // console.log("园数据",res)
                    if (res.code == 0) {
                        var LayerName = res.data[0].warehouseNo;
                        var list = res.data;
                        //0:空储位 1:有物品 2:入库中 3:出库中 4:移入中 5:移出中  6: 损坏\屏蔽
                        var key = ['空储位', '有物品', '入库中', '出库中', '损坏\屏蔽'];
                        // var value = [];
                        // var a = 0;
                        // for (var i = 0; i < key.length; i++) {
                        //     if (a < list.length) {
                        //         if (i == list[a].Status) {
                        //             value.push(list[a].StatusNum)
                        //             a = a + 1;
                        //         }
                        //     }
                        //     else {
                        //         value.push(0)
                        //     }
                        // }
                        var value = [0,0,0,0,0,0,0];
                        list.forEach(item => {
                            value[item.Status] = item.StatusNum;
@@ -409,13 +633,13 @@
                        this.chartLine2 = echarts.init(document.getElementById("yuan"));
                        var option2 = {
                            color: [
                            '#5470c6', //空储位
                                '#91cc75', //有物品
                                '#ffdc60', //入库中
                                '#ee6666', //出库中
                                // '#ffff7f', //移入中
                                // '#ee23ee' //移出中
                                '#808080', //损坏屏蔽
                                '#5470c6',
                                '#91cc75',
                                '#ffdc60',
                                '#ee6666',
                                // '#ffff7f',
                                // '#ee23ee',
                                '#808080',
                            ],
                            title: {
                                text: LayerName,
@@ -437,10 +661,10 @@
                                radius: '85%',
                                data:
                                    [
                                        { value: value[0], name: key[0] },
                                        { value: value[1], name: key[1] },
                                        { value: value[2], name: key[2] },
                                        { value: value[3], name: key[3] },
                                        { value: value[0], name: key[0] }, //空储位
                                        { value: value[1], name: key[1] }, //有物品
                                        { value: value[2], name: key[2] }, //入库中
                                        { value: value[3], name: key[3] }, //出库中
                                        // { value: value[4], name: key[4] },
                                        // { value: value[5], name: key[5] },
                                        { value: value[6], name: key[4] }, //损坏\屏蔽
@@ -473,12 +697,11 @@
                    if (res.code == 0) {
                        var list = res.data;
                        console.log(list)
                        //0:空储位 1:有物品 2:入库中 3:出库中 4:移入中 5:移出中 6:损坏\屏蔽 
                        var key = ['空储位', '有物品', '入库中', '出库中','损坏\屏蔽'];
                        this.chartLine2 = echarts.init(document.getElementById("zhu"));
                        //巷道
                        var roarylist = ['巷道1排', '巷道2排'];
                        var roarylist = [xianga, xiangb];
                        //各储位状态数量
                        var status0 = [];
                        var status1 = [];
@@ -512,7 +735,6 @@
                                status6.push(list[i].StatusNum)
                            }
                        }
                        console.log(status3.length)
                        if (status0.length == 0)
                        {
                            status0.push(0)
@@ -622,8 +844,8 @@
                                        focus: 'series'
                                    },
                                    data: status3
                                },
                                // ,{
                                },
                                // {
                                //     name: '移入中',
                                //     type: 'bar',
                                //     color: '#ffff7f',
@@ -678,27 +900,28 @@
                var className=$(that)[0].className;
                if(className=='btnShow zero'){
                    html = "<p style='word-wrap:break-word;width: 100%;height:100%;line-height:24px;font-size:18px'>储位编码:" + locatNo + "<br/>储位状态:空储位</p>";
                    tipsVal=layer.tips(html,that,{tips:[1,"rgb(58, 61, 73)"],area: ['200px'],time: 0});
                    tipsVal=layer.tips(html,that,{tips:[1,"rgb(58, 61, 73)"],area: ['220px'],time: 0});
                }else{
                    var param={
                        locatNo:locatNo
                    }
                    sendData(IP + "/Sys/GetLocateInfo", param, 'get', function (res) {
                        console.log(res)
                        if (res.code == 0) {
                            html = "<p style='word-wrap:break-word;width: 100%;height:100%;line-height:24px;font-size:18px;'>";
                            html += "储位编码:" + locatNo;
                            html += "<br/>储位状态:"+res.data.Status;
                            if (res.data.GoodsInfoList != null)
                            {
                                html += "<br/>托盘号:&nbsp;&nbsp;&nbsp;&nbsp;"+res.data.PalletNo;
                                for(var i=0;i<res.data.GoodsInfoList.length;i++){
                                    html += "<br/>托盘号:&nbsp;&nbsp;&nbsp;&nbsp;"+res.data.PalletNo;
                                    html += "<br/><br/>物料编码:"+res.data.GoodsInfoList[i].SkuNo;
                                    html += "<br/>物料名称:"+res.data.GoodsInfoList[i].SkuName;
                                    html += "<br/>批次号:&nbsp;&nbsp;&nbsp;&nbsp;"+res.data.GoodsInfoList[i].LotNo;
                                    html += "<br/>数量:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"+res.data.GoodsInfoList[i].Qty;
                                }    
                            }
                            html += "</p>"
                                html += "</p>"
                            }
                            tipsVal=layer.tips(html,that,{tips:[1,"rgb(58, 61, 73)"],area: ['260px'],time: 0});
                        } else {
                            layer.msg(res.msg, {
@@ -716,7 +939,7 @@
            });
            //#endregion
            //#region 定时刷新库位图例
            // #region 定时刷新库位图例
            //获取是否自动刷新
            var autoRefresh=$('#autoRefresh').prop('checked');
            //绑定自动刷新change事件监听器
@@ -726,12 +949,12 @@
            //定时器
            setInterval(function(){
                if(autoRefresh){
                    GetSlotVm($("#WareHouseNo").val(), $("#RoadwayNo").val(), $("#Detph").val());
                    GetSlotVm($("#WareHouseNo").val(), $("#RoadwayNo").val(), $("#Row").val(), $("#Depth").val());
                    //var currentDate = new Date();
                    //console.log('自动刷新了,'+currentDate)                
                }
            },10000)//10秒自动刷新一次
            //#endregion
            // #endregion
        });
    </script>
</body>
Wms/Model/ModelDto/SysDto/MaterialCategoryDto.cs
New file
@@ -0,0 +1,73 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace Model.ModelDto.SysDto
{
    public class MaterialCategoryDto
    {
        /// <summary>
        /// Id
        /// </summary>
        public int Id { get; set; }
        /// <summary>
        /// 类别号
        /// </summary>
        public string CategoryNo { get; set; }
        /// <summary>
        /// 类别名称
        /// </summary>
        public string CategoryName { get; set; }
        /// <summary>
        /// 区域编码
        /// </summary>
        public string AreaNo { get; set; }
        /// <summary>
        /// 区域名称
        /// </summary>
        public string AreaName { get; set; }
        /// <summary>
        /// 所属仓库
        /// </summary>
        public string WareHouseNo { get; set; }
        /// <summary>
        /// 仓库名称
        /// </summary>
        public string WareHouseName { get; set; }
        /// <summary>
        /// 备注
        /// </summary>
        public string Demo { get; set; }
        /// <summary>
        /// 创建日期
        /// </summary>
        public DateTime CreateTime { get; set; } = DateTime.Now;
        /// <summary>
        /// 更新日期
        /// </summary>
        public DateTime? UpdateTime { get; set; }
        /// <summary>
        /// 是否删除
        /// </summary>
        public string IsDel { get; set; } = "0";
        /// <summary>
        /// 创建人
        /// </summary>
        public int CreateUser { get; set; }
        /// <summary>
        /// 更新人
        /// </summary>
        public int? UpdateUser { get; set; }
    }
}
Wms/WMS.BLL/SysServer/MaterialCategory.cs
New file
@@ -0,0 +1,218 @@
using Model.ModelDto;
using Model.ModelDto.SysDto;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using WMS.DAL;
using WMS.Entity.BllSoEntity;
using WMS.Entity.Context;
using WMS.Entity.SysEntity;
using WMS.IBLL.ISysServer;
namespace WMS.BLL.SysServer
{
    /// <summary>
    ///  物料类别管理方法
    /// </summary>
    public class MaterialCategory : DbHelper<SysMaterialCategory>, IMaterialCategory
    {
        private static readonly SqlSugarScope Db = DataContext.Db;
        public MaterialCategory() : base(Db)
        {
        }
        /// <summary>
        /// 获取物料类别信息
        /// </summary>
        /// <param name="categoryName">类别名称</param>
        /// <param name="areaNo">区域编码</param>
        /// <returns></returns>
        /// <exception cref="Exception"></exception>
        public List<MaterialCategoryDto> GetMaterialCategories(string categoryName, string areaNo)
        {
            try
            {
                var list = Db.Queryable<MaterialCategoryDto>()
                    .WhereIF(!string.IsNullOrWhiteSpace(categoryName), a => a.CategoryName == categoryName)
                    .WhereIF(!string.IsNullOrWhiteSpace(areaNo), a => a.AreaNo == areaNo)
                    .Where(a => a.IsDel == "0").ToList();
                return list;
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }
        /// <summary>
        /// 新增类别信息
        /// </summary>
        /// <param name="category">物料类别实体</param>
        /// <returns></returns>
        /// <exception cref="Exception"></exception>
        public string InsertMaterialCategories(SysMaterialCategory category)
        {
            try
            {
                string msg = "";
                //获取类别信息
                var categoryInfo = Db.Queryable<SysMaterialCategory>().First(a => a.IsDel == "0" && a.CategoryNo == category.CategoryNo);
                //获取区域信息
                var area = Db.Queryable<SysStorageArea>().First(a => a.AreaNo == category.AreaNo && a.IsDel == "0");
                if (categoryInfo != null)
                {
                    msg = "当前类别信息已被创建,请重新填写信息!";
                    return msg;
                }
                if (area == null)
                {
                    msg = "当前选择区域信息异常,请重新选择或联系管理员!";
                    return msg;
                }
                Db.BeginTran();
                SysMaterialCategory list = new SysMaterialCategory()
                {
                    CategoryNo = category.CategoryNo, //类别号
                    CategoryName = category.CategoryName, //类别名称
                    AreaNo = category.AreaNo, //区域编码
                    WareHouseNo = area.WareHouseNo, //所属仓库
                    Demo = category.Demo, //备注
                    IsDel = "0", //是否删除
                    CreateUser = category.CreateUser, //创建人
                    CreateTime = Db.GetDate(), //创建时间
                };
                Db.Insertable(list).ExecuteCommand();
                Db.CommitTran();
                msg = "新增类别信息成功!";
                return msg;
            }
            catch (Exception ex)
            {
                Db.RollbackTran();
                throw new Exception(ex.Message);
            }
        }
        /// <summary>
        /// 编辑类别信息
        /// </summary>
        /// <param name="category">物料类别实体</param>
        /// <returns></returns>
        /// <exception cref="Exception"></exception>
        public string ExitMaterialCategories(SysMaterialCategory category)
        {
            try
            {
                string msg = "";
                //获取类别信息
                var categoryInfo = Db.Queryable<SysMaterialCategory>().First(a => a.IsDel == "0" && a.CategoryNo == category.CategoryNo);
                //获取区域信息
                var area = Db.Queryable<SysStorageArea>().First(a => a.AreaNo == category.AreaNo && a.IsDel == "0");
                if (categoryInfo != null)
                {
                    msg = "当前类别信息已被创建,请重新填写信息!";
                    return msg;
                }
                if (area == null)
                {
                    msg = "当前选择区域信息异常,请重新选择或联系管理员!";
                    return msg;
                }
                Db.BeginTran();
                categoryInfo = new SysMaterialCategory()
                {
                    CategoryNo = category.CategoryNo, //类别号
                    CategoryName = category.CategoryName, //类别名称
                    AreaNo = category.AreaNo, //区域编码
                    WareHouseNo = area.WareHouseNo, //所属仓库
                    Demo = category.Demo, //备注
                    IsDel = "0", //是否删除
                    UpdateUser = category.CreateUser, //更改人
                    UpdateTime = Db.GetDate(), //更改时间
                };
                Db.Updateable(categoryInfo).ExecuteCommand();
                Db.CommitTran();
                msg = "编辑类别信息成功!";
                return msg;
            }
            catch (Exception ex)
            {
                Db.RollbackTran();
                throw new Exception(ex.Message);
            }
        }
        /// <summary>
        /// 删除类别信息
        /// </summary>
        /// <param name="category">物料类别实体</param>
        /// <returns></returns>
        /// <exception cref="Exception"></exception>
        public string DeleteMaterialCategories(SysMaterialCategory category)
        {
            try
            {
                string msg = "";
                //获取类别信息
                var categoryInfo = Db.Queryable<SysMaterialCategory>().First(a => a.IsDel == "0" && a.CategoryNo == category.CategoryNo);
                //获取区域信息
                var area = Db.Queryable<SysStorageArea>().First(a => a.AreaNo == category.AreaNo && a.IsDel == "0");
                if (categoryInfo != null)
                {
                    msg = "当前类别信息已被删除,请重新选择!";
                    return msg;
                }
                if (area == null)
                {
                    msg = "当前选择区域信息异常,请重新选择或联系管理员!";
                    return msg;
                }
                Db.BeginTran();
                categoryInfo.IsDel = "1";
                Db.Updateable(categoryInfo).ExecuteCommand();
                Db.CommitTran();
                msg = "删除类别信息成功!";
                return msg;
            }
            catch (Exception ex)
            {
                Db.RollbackTran();
                throw new Exception(ex.Message);
            }
        }
    }
}
Wms/WMS.BLL/SysServer/StorageLocatServer.cs
@@ -306,17 +306,14 @@
        /// <param name="wareHouseNo">仓库</param>
        /// <param name="roadway">巷道号</param>
        /// <param name="row">排 1 or 2</param>
        /// <param name="depth">深度</param>
        /// <returns></returns>
        public List<SysStorageLocat> GetStorageLocatLists(string wareHouseNo, string roadway, string row)
        public List<SysStorageLocat> GetStorageLocatLists(string wareHouseNo, string roadway, string row, string depth)
        {
            try
            {
                var road = roadway.Substring(1, roadway.Length - 1);
                var num = int.Parse(road);
                var rows = (num - 1) * 2 + int.Parse(row);//排
                var list = Db.Queryable<SysStorageLocat>().Where(m =>
                    m.IsDel == "0" && m.WareHouseNo == wareHouseNo && m.RoadwayNo == roadway && m.Row == rows).ToList();
                    m.IsDel == "0" && m.WareHouseNo == wareHouseNo && m.RoadwayNo == roadway && m.Row == int.Parse(row) && m.Depth == depth).ToList();
                 
                return list;
            }
@@ -343,7 +340,7 @@
                var rows = (num - 1) * 2 + int.Parse(row);//排
                var maxLayer = Db.Queryable<SysStorageLocat>().Where(m =>
                    m.IsDel == "0" && m.WareHouseNo == wareHouseNo && m.RoadwayNo == roadway && m.Row == rows).Max(m=>m.Layer);
                    m.IsDel == "0" && m.WareHouseNo == wareHouseNo && m.RoadwayNo == roadway && m.Row == int.Parse(row)).Max(m=>m.Layer);
                return maxLayer;
            }
@@ -369,7 +366,7 @@
                var rows = (num - 1) * 2 + int.Parse(row);//排
                var maxColumn = Db.Queryable<SysStorageLocat>().Where(m =>
                    m.IsDel == "0" && m.WareHouseNo == wareHouseNo && m.RoadwayNo == roadway && m.Row == rows).Max(m => m.Column);
                    m.IsDel == "0" && m.WareHouseNo == wareHouseNo && m.RoadwayNo == roadway && m.Row == int.Parse(row)).Max(m => m.Column);
                return maxColumn;
            }
Wms/WMS.Entity/SysEntity/MaterialCategory.cs
New file
@@ -0,0 +1,38 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace WMS.Entity.SysEntity
{
    /// <summary>
    /// 物料类别表
    /// </summary>
    public class SysMaterialCategory : BaseEntity
    {
        /// <summary>
        /// 类别号
        /// </summary>
        public string CategoryNo { get; set; }
        /// <summary>
        /// 类别名称
        /// </summary>
        public string CategoryName { get; set; }
        /// <summary>
        /// 区域编码
        /// </summary>
        public string AreaNo { get; set; }
        /// <summary>
        /// 所属仓库
        /// </summary>
        public string WareHouseNo { get; set; }
        /// <summary>
        /// 备注
        /// </summary>
        public string Demo { get; set; }
    }
}
Wms/WMS.IBLL/ISysServer/IMaterialCategory.cs
New file
@@ -0,0 +1,47 @@
using Model.ModelDto.SysDto;
using System;
using System.Collections.Generic;
using System.Text;
using WMS.Entity.SysEntity;
namespace WMS.IBLL.ISysServer
{
    /// <summary>
    ///  物料类别管理方法
    /// </summary>
    public interface IMaterialCategory
    {
        /// <summary>
        /// 获取物料类别信息
        /// </summary>
        /// <param name="categoryName">类别名称</param>
        /// <param name="areaNo">区域编码</param>
        /// <returns></returns>
        /// <exception cref="Exception"></exception>
        List<MaterialCategoryDto> GetMaterialCategories(string categoryName, string areaNo);
        /// <summary>
        /// 新增类别信息
        /// </summary>
        /// <param name="category">物料类别实体</param>
        /// <returns></returns>
        /// <exception cref="Exception"></exception>
        string InsertMaterialCategories(SysMaterialCategory category);
        /// <summary>
        /// 编辑类别信息
        /// </summary>
        /// <param name="category">物料类别实体</param>
        /// <returns></returns>
        /// <exception cref="Exception"></exception>
        string ExitMaterialCategories(SysMaterialCategory category);
        /// <summary>
        /// 删除类别信息
        /// </summary>
        /// <param name="category">物料类别实体</param>
        /// <returns></returns>
        /// <exception cref="Exception"></exception>
        string DeleteMaterialCategories(SysMaterialCategory category);
    }
}
Wms/WMS.IBLL/ISysServer/IStorageLocatServer.cs
@@ -70,8 +70,10 @@
        /// <param name="wareHouseNo">仓库</param>
        /// <param name="roadway">巷道号</param>
        /// <param name="row">排</param>
        /// <param name="depth">深度</param>
        /// <returns></returns>
        List<SysStorageLocat> GetStorageLocatLists(string wareHouseNo, string roadway,string row);
        List<SysStorageLocat> GetStorageLocatLists(string wareHouseNo, string roadway,string row, string depth);
        /// <summary>
        /// 获取最大层级
Wms/Wms/Controllers/SysController.cs
@@ -41,6 +41,9 @@
        private readonly IOperationSysServer _operation; //操作日志
        private readonly IExceptionServer _table; //异常处理
        private readonly IHeaderSettingsServer _headerSet;//表头设置
        private readonly IMaterialCategory _category;//物料类别
        /// <summary>
        /// 构造函数
        /// </summary>
@@ -54,7 +57,8 @@
        /// <param name="dic">数据字典</param>
        /// <param name="operation">操作日志</param>
        /// <param name="table">异常处理</param>
        public SysController(IWareHouseServer wareHouseSvc, IStorageAreaServer areaSvc, IStorageRoadwayServer roadwaySvc, IStorageLocatServer locatSvc, IPalletsServer palletSvc, IPalletTrackServer palletTrackSvc, IMenuServer menuSvc, IDictionaryServer dic, IOperationSysServer operation, IExceptionServer table, IHeaderSettingsServer headerSet)
        /// <param name="category">物料类别</param>
        public SysController(IWareHouseServer wareHouseSvc, IStorageAreaServer areaSvc, IStorageRoadwayServer roadwaySvc, IStorageLocatServer locatSvc, IPalletsServer palletSvc, IPalletTrackServer palletTrackSvc, IMenuServer menuSvc, IDictionaryServer dic, IOperationSysServer operation, IExceptionServer table, IHeaderSettingsServer headerSet, IMaterialCategory category)
        {
            _wareHouseSvc = wareHouseSvc; //仓库
            _areaSvc = areaSvc; //区域
@@ -69,6 +73,7 @@
            _table = table; //异常处理
            _headerSet = headerSet;//表头设置
            _category = category;//物料类别
        }
        #region 菜单管理
@@ -225,7 +230,7 @@
            }
            catch (Exception ex)
            {
                return Ok(new { data = "", code = 3,  msg = "新增菜单信息异常:"+ ex.Message });
                return Ok(new { data = "", code = 3, msg = "新增菜单信息异常:" + ex.Message });
            }
        }
@@ -1138,7 +1143,7 @@
                        {
                            _operation.InsertOperation("仓库设置", "储位管理", storage.LocatNo, "修改", "修改储位信息 储位号:" + storage.LocatNo, Convert.ToInt32(userId));
                        }
                        return Ok(new { code = 0, msg = "编辑成功", data = "" });
                    }
                    else
@@ -1384,11 +1389,11 @@
                int uid = Convert.ToInt32(userId);
                //更改人
                tabledto.UpdateUser = uid;
                string strMesage  = _table.EditStatus(tabledto);
                string strMesage = _table.EditStatus(tabledto);
                if (strMesage == "")
                {
                    return Ok(new { code = 0, msg = "处理成功" });
                }
                }
                else
                {
                    return Ok(new { code = 1, msg = strMesage });
@@ -1444,12 +1449,13 @@
        /// <param name="wareHouseNo">仓库</param>
        /// <param name="roadway">巷道号</param>
        /// <param name="row">排</param>
        /// <param name="depth">深度</param>
        /// <returns></returns>
        [HttpGet]
        public IActionResult GetStorageLocatLists(string wareHouseNo, string roadway,string row)
        public IActionResult GetStorageLocatLists(string wareHouseNo, string roadway, string row, string depth)
        {
            //获取储位信息
            List<SysStorageLocat> storagelist = _locatSvc.GetStorageLocatLists(wareHouseNo, roadway, row);
            List<SysStorageLocat> storagelist = _locatSvc.GetStorageLocatLists(wareHouseNo, roadway, row, depth);
            //获取最大层级
            int maxLayer = _locatSvc.GetMaxLayer(wareHouseNo, roadway, row);
@@ -1527,7 +1533,7 @@
        [HttpGet]
        public IActionResult GetStorageProportion1(string wareHouseNo, string roadwayNo)
        {
            List<GetLocateVm> getLocateVms = _locatSvc.GetStorageProportion1(wareHouseNo,roadwayNo);
            List<GetLocateVm> getLocateVms = _locatSvc.GetStorageProportion1(wareHouseNo, roadwayNo);
            return Ok(new
            {
                data = getLocateVms,
@@ -1586,6 +1592,179 @@
        #endregion
        #region 物料类别
        /// <summary>
        /// 获取物料类别信息
        /// </summary>
        /// <param name="categoryName">类别名称</param>
        /// <param name="areaNo">区域编码</param>
        /// <returns></returns>
        /// <exception cref="Exception"></exception>
        [HttpGet]
        public IActionResult GetMaterialCategories(string categoryName, string areaNo)
        {
            try
            {
                var list = _category.GetMaterialCategories(categoryName, areaNo);
                return Ok(new
                {
                    data = list,
                    code = 1,
                    msg = "获取物料类别信息成功"
                });
            }
            catch (Exception ex)
            {
                return Ok(new
                {
                    data = "",
                    code = 0,
                    msg = "获取物料类别信息异常"
                });
            }
        }
        /// <summary>
        /// 新增类别信息
        /// </summary>
        /// <param name="category">物料类别实体</param>
        /// <returns></returns>
        /// <exception cref="Exception"></exception>
        [HttpPost]
        public IActionResult InsertMaterialCategories(SysMaterialCategory category)
        {
            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 = "为获取到当前操作人信息" });
                }
                category.CreateUser = int.Parse(userId);
                var list = _category.InsertMaterialCategories(category);
                return Ok(new
                {
                    data = list,
                    code = 1,
                    msg = "新增物料类别信息成功"
                });
            }
            catch (Exception ex)
            {
                return Ok(new
                {
                    data = "",
                    code = 0,
                    msg = "新增物料类别信息异常"
                });
            }
        }
        /// <summary>
        /// 编辑类别信息
        /// </summary>
        /// <param name="category">物料类别实体</param>
        /// <returns></returns>
        /// <exception cref="Exception"></exception>
        [HttpPost]
        public IActionResult ExitMaterialCategories(SysMaterialCategory category)
        {
            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 = "为获取到当前操作人信息" });
                }
                category.UpdateUser = int.Parse(userId);
                var list = _category.ExitMaterialCategories(category);
                return Ok(new
                {
                    data = list,
                    code = 1,
                    msg = "编辑物料类别信息成功"
                });
            }
            catch (Exception ex)
            {
                return Ok(new
                {
                    data = "",
                    code = 0,
                    msg = "编辑物料类别信息异常"
                });
            }
        }
        /// <summary>
        /// 删除类别信息
        /// </summary>
        /// <param name="category">物料类别实体</param>
        /// <returns></returns>
        /// <exception cref="Exception"></exception>
        [HttpPost]
        public IActionResult DeleteMaterialCategories(SysMaterialCategory category)
        {
            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 = "为获取到当前操作人信息" });
                }
                category.UpdateUser = int.Parse(userId);
                var list = _category.DeleteMaterialCategories(category);
                return Ok(new
                {
                    data = list,
                    code = 1,
                    msg = "删除物料类别信息成功"
                });
            }
            catch (Exception ex)
            {
                return Ok(new
                {
                    data = "",
                    code = 0,
                    msg = "删除物料类别信息异常"
                });
            }
        }
        #endregion
        #region 数据表格表头自定义(通用方法)