chengsc
2024-07-21 e75362cc5d11d900068a26232eb97ebd30203d48
Merge branch 'master' into csc
8个文件已添加
10个文件已修改
1374 ■■■■■ 已修改文件
HTML/js/public.js 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HTML/layuiadmin/dragMove/dragMove.css 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HTML/layuiadmin/dragMove/dragMove.js 261 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HTML/views/HouseWithinSetting/StockCheck.html 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HTML/views/HouseWithinSetting/ViewPicture.html 104 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HTML/views/HouseWithinSetting/images/1920x1080.jpg 补丁 | 查看 | 原始文档 | blame | 历史
HTML/views/HouseWithinSetting/images/1920x400.jpg 补丁 | 查看 | 原始文档 | blame | 历史
HTML/views/HouseWithinSetting/images/400x400.jpg 补丁 | 查看 | 原始文档 | blame | 历史
HTML/views/HouseWithinSetting/images/400x900.jpg 补丁 | 查看 | 原始文档 | blame | 历史
HTML/views/StatisticalReport/InventoryStatistics.html 356 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HTML/views/SystemSettings/PrintModule.html 153 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/Model/ModelDto/DataDto/MateDataStockDto.cs 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.BLL/BllSoServer/ExportNoticeServer.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.BLL/BllSoServer/WaveMageServer.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.BLL/DataServer/StockServer.cs 324 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.BLL/Logic/AllotSku.cs 77 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.IBLL/IDataServer/IStockServer.cs 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/Wms/Controllers/StatisticalController.cs 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HTML/js/public.js
@@ -203,9 +203,9 @@
  var bodyHeight = $("#body").outerHeight();
  var topHeight = $("#top").outerHeight();
  var centerHeight = $("#center").outerHeight();
//   console.log(bodyHeight);
//   console.log(topHeight);
//   console.log(centerHeight);
  console.log(bodyHeight);
  console.log(topHeight);
  console.log(centerHeight);
  var hh = bodyHeight - topHeight-centerHeight - 26 ;//6是body上内边距 
  return hh;
HTML/layuiadmin/dragMove/dragMove.css
New file
@@ -0,0 +1,20 @@
/**
 @ Name:layui.dragMove 图片查看器
 @ Author:FQSong
 @ License:MIT
 */
/* 样式加载完毕的标识 */
html #layuicss-dragMove{display: none; position: absolute; width: 1989px;}
/* 组件样式 */
.dragMove-skin .layui-layer-content {overflow: hidden !important;}
.layui-dragMove {position: relative; width: 100%; height: 100%; display: -webkit-flex; display: flex; flex-direction:column;}
.layui-dragMove .dragMove-img {position: relative; width: 100%; height: 100%; overflow: hidden; -webkit-flex: 1;  flex: 1; background-color:#eee;}
.layui-dragMove .dragMove-img img {position: absolute; left: 0; top: 0; user-select:none; cursor: grab;}
.layui-dragMove .dragMove-btn {width:100%; padding: 10px 0; text-align:center; -webkit-flex: none;  flex: none;}
.layui-dragMove .dragMove-btn .layui-btn {height: 28px; line-height: 28px;}
.layui-icon-loading {position: absolute; left: 50%; top: 50%; display: block; width: 36px; height: 36px; font-size: 36px; line-height: 36px; }
.transitioning {-webkit-transition: -webkit-transform .24s ease-out; transition: transform .24s ease-out;}
HTML/layuiadmin/dragMove/dragMove.js
New file
@@ -0,0 +1,261 @@
/**
 @ Name:layui.dragMove 图片查看器
 @ Author:FQSong
 @ License:MIT
 */
layui.define('layer', function(exports){
  var $ = layui.$
  ,layer = layui.layer
  //字符常量
  ,MOD_NAME = 'dragMove', ELEM = '.layui-dragMove'
  //外部接口
  ,dragMove = {
    index: layui.dragMove ? (layui.dragMove.index + 10000) : 0
    //设置全局项
    ,set: function(options){
      var that = this;
      that.config = $.extend({}, that.config, options);
      return that;
    }
    //事件监听
    ,on: function(events, callback){
      return layui.onevent.call(this, MOD_NAME, events, callback);
    }
  }
  //构造器
  ,Class = function(options){
    var that = this;
    that.index = ++dragMove.index;
    that.config = $.extend({}, that.config, dragMove.config, options);
    that.render();
  };
  //默认配置
  Class.prototype.config = {
    layerArea: ["960px","720px"],
    layerShade: 0.6,
    layerMove: 0,
    maxZoom: 1
  };
  //渲染视图
  Class.prototype.render = function(){
    var that = this
    ,options = that.config
    ,dragMoveView = "<div class='layui-dragMove'>"
    + "<div class='dragMove-img'>"
    +   "<span class='layui-icon layui-icon-loading layui-anim layui-anim-rotate layui-anim-loop'></span>"
    + "</div>"
    + "<div class='dragMove-btn'>"
    +   "<button type='button' class='layui-btn layui-btn-sm' data-method='default'>默认大小</button>"
    +   "<button type='button' class='layui-btn layui-btn-sm' data-method='real'>实际大小</button>"
    +   "<button type='button' class='layui-btn layui-btn-sm' data-method='zoomin'>放大</button>"
    +   "<button type='button' class='layui-btn layui-btn-sm' data-method='zoomout'>缩小</button>"
    + "</div>"
    + "</div>";
    options.elem = $(options.elem);
    options.elem.on("click","img",function(e){
      let imgObj =  $(this),
      imgSrc = imgObj.attr("src"),
      imgTitle = imgObj.attr("alt") || imgSrc.replace(/(.*\/)*([^.]+).*/ig,"$2");
      layer.open({
        type: 1,
        resize: 0,
        btn: 0,
        skin: "dragMove-skin",
        move: options.layerMove,
        area: options.layerArea,
        shade: options.layerShade,
        title: imgTitle,
        content: dragMoveView,
        success: function(layero){
          var imgbox = layero.find(".dragMove-img");
          options.imgboxWidth = imgbox.innerWidth();
          options.imgboxHeight = imgbox.innerHeight();
          var nImg = new Image();
          nImg.src = imgSrc;
          if (nImg.complete) {
            imgbox.empty().append(nImg);
            that.init(nImg)
          } else {
            nImg.onload = function () {
              imgbox.empty().append(nImg);
              that.init(nImg)
            }
          }
        }
      });
    });
  }
  //
  Class.prototype.init = function(img){
    var that = this
    ,options = that.config;
    let $img = $(img),
    parent = $img.closest(".layui-dragMove"),
    zoomData = {};
    zoomData.img = img;
    zoomData.imgWidth = img.width;
    zoomData.imgHeight = img.height;
    zoomData.zoomSize = Math.min(Math.min(options.imgboxWidth / zoomData.imgWidth, options.imgboxHeight / zoomData.imgHeight), 1);
    zoomData.left = (options.imgboxWidth - zoomData.imgWidth * zoomData.zoomSize) / 2;
    zoomData.top = (options.imgboxHeight - zoomData.imgHeight * zoomData.zoomSize) / 2;
    zoomData.defaultZoom = zoomData.zoomSize;
    that.zoomData = zoomData;
    $img.css({ "transform-origin": "0 0", "transform": "matrix(" + zoomData.zoomSize + ",0,0," + zoomData.zoomSize + "," + zoomData.left + "," + zoomData.top + ")" });
    $img.on("mousedown", function (e) {
      e.preventDefault();
      let currentX = e.clientX,
      currentY = e.clientY;
      $img.removeClass("transitioning").css({"cursor": "grabbing"});
      $(document).on("mousemove", function (even) {
        let moveX = even.clientX - currentX,
        moveY = even.clientY - currentY;
        $img.css({ "transform": "matrix(" + zoomData.zoomSize + ",0,0," + zoomData.zoomSize + "," + (zoomData.left + moveX) + "," + (zoomData.top + moveY) + ")" });
      });
      $(document).on("mouseup", function (even) {
        var matrix = $img.css("transform").slice(7, -1).split(','),
        center = that.getCenter(parseFloat(matrix[4]), parseFloat(matrix[5]), zoomData);
        zoomData.left = center.left;
        zoomData.top = center.top;
        $img.addClass("transitioning").css({
          "transform": "matrix(" + zoomData.zoomSize + ",0,0," + zoomData.zoomSize + "," + zoomData.left + "," + zoomData.top + ")",
          "cursor": "grab"
        });
        $(document).off("mousemove");
        $(document).off("mouseup");
      });
    });
    parent.on("click", "button", function (e) {
      e.preventDefault();
      var method = $(this).attr("data-method"),
      scaleSize = 0;
      switch (method) {
        case "default":
          scaleSize = zoomData.defaultZoom;
          break;
        case "real":
          scaleSize = 1;
          break;
        case "zoomin":
          scaleSize = zoomData.zoomSize * 1.2;
          scaleSize = scaleSize > options.maxZoom ? options.maxZoom : scaleSize;
          break;
        case "zoomout":
          scaleSize = zoomData.zoomSize / 1.2;
          scaleSize = scaleSize < zoomData.defaultZoom ? zoomData.defaultZoom : scaleSize;
          break;
        default:
          break;
      }
      scaleSize && that.scaleZoom(scaleSize);
    });
    //鼠标滚轮
    parent.on("mousewheel", function (e) {
      e.preventDefault();
      let scaleSize = 0;
      if (e.originalEvent.wheelDelta > 0) {
        scaleSize = zoomData.zoomSize * 1.2;
      } else {
        scaleSize = zoomData.zoomSize / 1.2;
      }
      scaleSize = Math.min(Math.max(scaleSize, zoomData.defaultZoom),options.maxZoom);
      that.scaleZoom(scaleSize);
    });
    $img.on("transitionend webkitTransitionend", function () {
      $(this).removeClass("transitioning")
    });
  };
  Class.prototype.scaleZoom = function(index){
    var that = this
    ,options = that.config
    ,zoomData = that.zoomData;
    zoomData.left = zoomData.left - zoomData.imgWidth * (index - zoomData.zoomSize) / 2;
    zoomData.top = zoomData.top -  zoomData.imgHeight * (index - zoomData.zoomSize) / 2;
    zoomData.zoomSize = index;
    var center = that.getCenter(zoomData.left,zoomData.top,zoomData);
    zoomData.left = center.left;
    zoomData.top = center.top;
    $(zoomData.img).addClass("transitioning").css({
      "transform":"matrix("+ zoomData.zoomSize +",0,0," + zoomData.zoomSize +","+zoomData.left+","+zoomData.top+")"
    });
  };
  Class.prototype.getCenter = function(x,y,zoomData){
    var that = this
    ,options = that.config
    ,zoomData = that.zoomData;
    let newleft,newtop;
    newleft = (function(){
      var left;
      if(zoomData.imgWidth * zoomData.zoomSize < options.imgboxWidth){
        left = (options.imgboxWidth - zoomData.imgWidth * zoomData.zoomSize) / 2;
      }else{
        left = Math.max(Math.min(0,x), options.imgboxWidth - zoomData.imgWidth * zoomData.zoomSize);
      }
      return left;
    })();
    newtop = (function(){
      var top;
      if(zoomData.imgHeight * zoomData.zoomSize < options.imgboxHeight){
        top = (options.imgboxHeight - zoomData.imgHeight * zoomData.zoomSize) / 2;
      }else{
        top = Math.max(Math.min(0, y), options.imgboxHeight - zoomData.imgHeight * zoomData.zoomSize);
      }
      return top;
    })();
    return {left:newleft,top:newtop}
  };
  Class.prototype.decimal = function(num){
    var result = parseFloat(num);
    if (isNaN(result)) {
      return false;
    }
    result = Math.round(num * 100) / 100;
    return result;
  };
  //核心入口
  dragMove.render = function(options){
    var ins = new Class(options);
    return ins;
  };
  //加载组件所需样式
  layui.link(layui.cache.base + 'dragMove/dragMove.css', function(){
    //样式加载完毕的回调
  }, MOD_NAME);
  exports(MOD_NAME, dragMove);
});
HTML/views/HouseWithinSetting/StockCheck.html
@@ -188,7 +188,20 @@
                        }}
                         
                    </script>
                <script type="text/html" id="table-content-list2">
                        {{#
                                var html = '';
                                if(d.Status >= 1){
                                    html += `<a class="layui-btn layui-btn-danger layui-btn-xs delClass" lay-event="viewPicture">
                                                <i class="layui-icon layui-icon-ok"></i>查看图片
                                            </a>`;
                                }
                                return html;
                        }}
                    </script>
                <script type="text/html" id="toolbarDemo">
                        <button class="layui-btn layuiadmin-btn-list layui-btn-sm  addClass" lay-event="add">
@@ -401,6 +414,7 @@
                    { field: 'CreateTime', title: '创建时间', align: 'center', width: 160, templet: '#CreateTimeButton', },
                    { field: 'UpdateUserName', title: '修改人', align: 'center', width: 120, hide: true },
                    { field: 'UpdateTime', title: '修改时间', align: 'center', width: 160, hide: true, templet: '#UpdateTimeButton', },
                    { field: 'caozuo', title: '操作', fixed: 'right', align: 'center', toolbar: '#table-content-list2', width: 100 }
                ]];
            var TotalColsSysArrm = encodeURIComponent(encodeURIComponent(JSON.stringify(TotalColsArrm)))//将表头数据进行url编码
            refreshTable();
@@ -860,7 +874,24 @@
                    });
                }
            });
            table.on('tool(LAY-app-content-list2)', function (obj) {
                var data = obj.data;
                if (obj.event === 'viewPicture') {//查看图片
                    debugger;
                    layer.open({
                        type: 2,
                        title: '查看图片',
                        content: 'ViewPicture.html',
                        maxmin: true,
                        area: ['100%', '100%'],
                        success: function (layero, index) {
                            var body = layer.getChildFrame('body', index);
                            body.find('#CrNo').val(data.CrNo);
                            body.find('#PalletNo').val(data.PalletNo);
                        }
                    });
                }
            });
            var $ = layui.$,
                active = {
                    customCols: function () {
HTML/views/HouseWithinSetting/ViewPicture.html
New file
@@ -0,0 +1,104 @@
<!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>
    <input type="hidden" id="CrNo" name="CrNo">
    <input type="hidden" id="PalletNo" name="PalletNo">
    <div class="layui-bg-gray" style="padding: 16px;" id="imgDragmove">
        <div class="layui-row layui-col-space15">
          <div class="layui-col-md2">
            <div class="layui-card">
              <div class="layui-card-header">0100101箱</div>
              <div class="layui-card-body">
                <img src="images/1920x1080.jpg" height="200" width="100%" alt="0100101箱">
              </div>
            </div>
          </div>
          <div class="layui-col-md2">
            <div class="layui-card">
              <div class="layui-card-header">0100102箱</div>
              <div class="layui-card-body">
                <img src="images/1920x400.jpg" height="200" width="100%" alt="0100102箱">
              </div>
            </div>
          </div>
          <div class="layui-col-md2">
            <div class="layui-card">
              <div class="layui-card-header">0100103箱</div>
              <div class="layui-card-body">
                <img src="images/400x400.jpg" height="200" width="100%" alt="0100103箱">
              </div>
            </div>
          </div>
          <div class="layui-col-md2">
            <div class="layui-card">
              <div class="layui-card-header">0100104箱</div>
              <div class="layui-card-body">
                <img src="images/400x400.jpg" height="200" width="100%" alt="0100104箱">
              </div>
            </div>
          </div>
          <div class="layui-col-md2">
            <div class="layui-card">
              <div class="layui-card-header">0100105箱</div>
              <div class="layui-card-body">
                <img src="images/400x400.jpg" height="200" width="100%" alt="0100105箱">
              </div>
            </div>
          </div>
          <div class="layui-col-md2">
            <div class="layui-card">
              <div class="layui-card-header">0100106箱</div>
              <div class="layui-card-body">
                <img src="images/400x400.jpg" height="200" width="100%" alt="0100106箱">
              </div>
            </div>
          </div>
          <div class="layui-col-md2">
            <div class="layui-card">
              <div class="layui-card-header">0100107箱</div>
              <div class="layui-card-body">
                <img src="images/400x400.jpg" height="200" width="100%" alt="0100107箱">
              </div>
            </div>
          </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', //主入口模块
            dragMove: 'dragMove/dragMove'
        }).use(['dragMove'], function () {
            var $ = layui.$;
            var dragMove = layui.dragMove;
            //执行示例
            dragMove.render({
                elem: "#imgDragmove", //指向图片的父容器
                layerArea: ["960px", "720px"], //弹窗的宽高,同layer的area,默认["960px","720px"]
                layerShade: 0.6, //遮罩的透明度,同layer的shade,默认0.6
                layerMove: false, //触发拖动的元素,同layer的move,这里默认禁止,可设置为'.layui-layer-title'
                maxZoom: 1 //图片能放大的最大倍数,默认1倍
            });
        })
    </script>
</body>
</html>
HTML/views/HouseWithinSetting/images/1920x1080.jpg
HTML/views/HouseWithinSetting/images/1920x400.jpg
HTML/views/HouseWithinSetting/images/400x400.jpg
HTML/views/HouseWithinSetting/images/400x900.jpg
HTML/views/StatisticalReport/InventoryStatistics.html
@@ -36,6 +36,18 @@
            <div class="layui-form layui-card-header layuiadmin-card-header-auto" id="top">
                <div class="layui-form-item" style="margin-bottom: 0px;">
                    <div class="layui-inline ">
                        <label class="layui-form-label" style="width: 60px;">查询类型</label>
                        <div class="layui-input-inline" style="width: 170px; margin-right: 0px;">
                            <select name="SelectType" id="SelectType" lay-filter="SelectType" lay-search>
                                <option value="">正常</option>
                                <option value="0">物料信息</option>
                                <option value="1">批次信息</option>
                                <option value="2">质检信息</option>
                                <option value="3">货主信息</option>
                            </select>
                        </div>
                    </div>
                    <div class="layui-inline zongdan">
                        <label class="layui-form-label" style="width: 60px;">物料编码</label>
                        <div class="layui-input-inline" style="width: 170px; margin-right: 0px;">
@@ -71,7 +83,7 @@
                                class="layui-input">
                        </div>
                    </div>
                    <div class="layui-inline mingxi">
                    <!-- <div class="layui-inline mingxi">
                        <label class="layui-form-label" style="width: 60px;">储位地址</label>
                        <div class="layui-input-inline" style="width: 170px; margin-right: 0px;">
                            <input type="text" id="LocatNo" name="LocatNo" placeholder="储位地址" autocomplete="off"
@@ -84,7 +96,7 @@
                            <input type="text" id="PalletNo" name="PalletNo" placeholder="托盘号" autocomplete="off"
                                class="layui-input">
                        </div>
                    </div>
                    </div> -->
                    
                    <div class="layui-inline ">
                        <label class="layui-form-label" style="width: 60px;">库存状态</label>
@@ -123,7 +135,7 @@
                            </select>
                        </div>
                    </div>
                    <div class="layui-inline zhijian">
                    <!-- <div class="layui-inline zhijian">
                        <label class="layui-form-label" style="width: 60px;">开始时间</label>
                        <div class="layui-input-inline" style="width: 170px; margin-right: 0px;">
                            <input type="text" autocomplete="off" id="StartTime" class="layui-input"
@@ -136,7 +148,7 @@
                            <input type="text" autocomplete="off" id="EndTime" class="layui-input"
                                placeholder="结束时间">
                        </div>
                    </div>
                    </div> -->
                    <div class="layui-inline sousuo">
                        <button class="layui-btn layui-btn-sm layuiadmin-btn-list" lay-submit
                            lay-filter="LAY-app-contlist-search">
@@ -151,19 +163,15 @@
                </div>
            </div>
            <div id="center"></div>
            <div class="layui-card-body">
                <div style="position: relative;">
                    <div class="layui-tab layui-tab-brief" lay-filter="docDemoTabBrief">
                        <ul class="layui-tab-title" id="tab">
                            <li class="layui-this">库存总量</li>
                            <li>库存明细</li>
                        </ul>
                        <div id="center"></div>
                        <!-- <div id="center">
                        </div> -->
                        <div class="layui-tab-content">
                            <div class="layui-tab-item layui-show">
                            <!-- <div class="layui-tab-item layui-show"> -->
                                <div class="position-relative"><!-- class="position-relative" --><!-- 自定义表头加上 -->
                                    <table id="LAY-app-content-list" lay-filter="LAY-app-content-list"></table>
                                    <!-- #region 自定义表头 -->
@@ -173,29 +181,6 @@
                                        </button>
                                    </div>
                                    <!-- #endregion -->
                                </div>
                            </div>
                            <div class="layui-tab-item">
                                <div class="position-relative"><!-- class="position-relative" --><!-- 自定义表头加上 -->
                                    <table id="LAY-app-content-list2" lay-filter="LAY-app-content-list2"></table>
                                    <!-- #region 自定义表头 -->
                                    <div class="headerSetIcon">
                                        <button class="layui-btn layui-btn-primary layui-btn-sm" data-type="customCols2">
                                            <i class="layui-icon">&#xe610;</i>
                                        </button>
                                    </div>
                                    <!-- #endregion -->
                                    <!-- #region 自定义表头 -->
                                    <script type="text/html" id="templetCompleteTime">
                                        {{# function GetBtn(d){
                                                return formatDate(d.CompleteTime);
                                            }
                                        }}
                                        {{ GetBtn(d) }}
                                    </script>
                                    <!-- #endregion -->
                                </div>
                            </div>
                        </div>
                    </div>
@@ -258,7 +243,7 @@
            element = layui.element;
            laydate = layui.laydate;
            var h1 = GetTableTabHeight();
            var h1 = GetTableHeight();
            laydate.render({
                elem: '#StartTime',
@@ -296,7 +281,7 @@
            var $ = layui.$;
            var yemianid = 0;
            refreshTable("", "","","","");
            refreshTable("", "", "", "", "", "", "", "");
            // 表单需要的变量
            var infoOptions;
@@ -361,14 +346,17 @@
                        {field: 'LotText',title: '批次描述',align: 'center'},
                        {field: 'OwnerNo',title: '货主编码',align: 'center'},
                        {field: 'OwnerName',title: '货主名称',align: 'center'}, 
                        {field: 'Status',title: '库存状态',align: 'center',templet: '#buttonTpl'},
                        {field: 'InspectStatus',title: '质检状态',align: 'center',templet: '#buttonTp2'},
                        {field: 'Qty',title: '库存数量',align: 'center',totalRow: true}, 
                        {field: 'LockQty',title: '锁定数量',align: 'center',totalRow: true}, 
                        {field: 'FrozenQty',title: '冻结数量',align: 'center',totalRow: true}
                        {field: 'FrozenQty',title: '冻结数量',align: 'center',totalRow: true},
                        {field: 'InspectQty',title: '可抽检数量',align: 'center',totalRow: true},
                    ]];
            var TotalColsSysArr=encodeURIComponent(encodeURIComponent(JSON.stringify(TotalColsArr)))//将表头数据进行url编码
            //#endregion
            //获取总量信息
            function refreshTable(SkuNo,SkuName,OwnerNo,OwnerName,LotNo) {
            function refreshTable(SelectType,SkuNo,SkuName,OwnerNo,OwnerName,LotNo,Status,InspectStatus) {
                //#region 自定义表头
                var colsJson
                var param1={
@@ -401,11 +389,14 @@
                        cols:colsJson
                    };
                    var param = {
                        SelectType:SelectType, //查询类型
                        SkuNo:SkuNo, //物料号
                        SkuName:SkuName, //物料名称
                        OwnerNo:OwnerNo, //货主编码
                        OwnerName:OwnerName, //货主名称
                        LotNo:LotNo, //批次号
                        Status:Status, //库存状态 = $("#Status").val();
                        InspectStatus:InspectStatus, //质检状态 = $("#InspectStatus").val();
                    };
                    sendData(IP + "/Statistical/GetInventoryList", param, 'get', function (res) {
                        console.log(res)
@@ -430,256 +421,22 @@
                //#endregion
            }            
            // 表单需要的变量
            var infoOptions2;
            //#region 原始非自定义列
            //infoOptions2 = {
            //    elem: '#LAY-app-content-list2',
            //    height: 'full-206',
            //    id: 'LAY-app-content-list2',
            //    page: true,
            //    limit: pageCnt,
            //    limits: pageLimits,
            //    even: true,
            //    cellMinWidth: 80, //全局定义常规单元格的最小宽度,layui 2.2.1 新增
            //    cols:
            //        [[
            //            {
            //                field: 'PalletNo',
            //                title: '托盘号',
            //                align: 'center',
            //                width: 110,
            //            }, {
            //                field: 'LocatNo',
            //                title: '储位地址',
            //                align: 'center',
            //                width: 100,
            //            }, {
            //                field: 'RoadwayName',
            //                title: '所属巷道',
            //                width: 90,
            //                align: 'center',
            //            }, {
            //                field: 'WareHouseName',
            //                title: '所属仓库',
            //                width: 90,
            //                align: 'center',
            //            }, {
            //                field: 'SkuNo',
            //                title: '物料编码',
            //                width: 100,
            //                align: 'center',
            //            }, {
            //                field: 'SkuName',
            //                title: '物料名称',
            //                align: 'center',
            //            }, {
            //                field: 'Standard',
            //                title: '物料规格',
            //                width: 130,
            //                align: 'center',
            //            }, {
            //                field: 'LotNo',
            //                title: '批次号',
            //                align: 'center',
            //            }, {
            //                field: 'Qty',
            //                title: '库存数量',
            //                width: 110,
            //                align: 'center',
            //            }, {
            //                field: 'LockQty',
            //                title: '锁定数量',
            //                width: 110,
            //                align: 'center',
            //            },
            //            {
            //                field: 'Status',
            //                templet: '#buttonTpl',
            //                title: '库存状态',
            //                width: 90,
            //                align: 'center',
            //            }, {
            //                field: 'InspectStatus',
            //                templet: '#buttonTp2',
            //                title: '质检状态',
            //                width: 90,
            //                align: 'center',
            //            },
            //            {
            //                field: 'CompleteTime',
            //                title: '入库时间',
            //                align: 'center',
            //                width: 150,
            //                templet: function (d) {
            //                    return formatDate(d.CompleteTime);
            //                },
            //            },
            //        ]]
            //};
            //#endregion
            //获取明细信息
            //#region 自定义表头
            var DetailColsArr = [[
                        {field: 'PalletNo',title: '托盘号',align: 'center',width: 110,},
                        {field: 'LocatNo',title: '储位地址',align: 'center',width: 100,},
                        {field: 'WareHouseName',title: '所属仓库',width: 90,align: 'center'},
                        {field: 'RoadwayName',title: '所属巷道',width: 90,align: 'center'},
                        {field: 'AreaName',title: '所属区域',width: 90,align: 'center'},
                        {field: 'SkuNo',title: '物料编码',width: 100,align: 'center'},
                        {field: 'SkuName',title: '物料名称',align: 'center'},
                        {field: 'Standard',title: '物料规格',width: 130,align: 'center'},
                        {field: 'LotNo',title: '批次号',align: 'center'},
                        {field: 'OwnerNo',title: '货主编码',align: 'center'},
                        {field: 'OwnerName',title: '货主名称',align: 'center'},
                        {field: 'SupplierNo',title: '供应商编码',align: 'center'},
                        {field: 'SupplierName',title: '供应商名称',align: 'center'},
                        {field: 'Qty',title: '库存数量',width: 110,align: 'center'},
                        {field: 'LockQty',title: '锁定数量',width: 110,align: 'center'},
                        {field: 'Status',templet: '#buttonTpl',title: '库存状态',width: 90,align: 'center'},
                        {field: 'InspectStatus',templet: '#buttonTp2',title: '质检状态',width: 90,align: 'center'},
                        {field: 'CompleteTime',title: '入库时间',align: 'center',width: 150,templet: '#templetCompleteTime'},
                    ]];
            var DetailColsSysArr=encodeURIComponent(encodeURIComponent(JSON.stringify(DetailColsArr)))//将表头数据进行url编码
            //#endregion
            function refreshTable2(SkuNo,SkuName,OwnerNo,OwnerName,LotNo,LocatNo,PalletNo,Status,InspectStatus,StartTime,EndTime) {
                //#region 自定义表头
                var colsJson2
                var param1={
                    Href:'Statistical/GetInventoryList1'
                };
                sendData(IP + "/Sys/GetTableColsByUserId", param1, 'post', function(res) {
                    if (res.code == 0){
                        if(res.data=='' || res.data==undefined || res.data==null){
                            colsJson2=DetailColsArr
                        }else{
                            colsJson2= eval(res.data);
                        }
                    }else{
                            colsJson2=DetailColsArr
                    }
                    infoOptions2 = {
                        elem: '#LAY-app-content-list2',
                        height: h1,
                        id: 'LAY-app-content-list2',
                        page: true,
                        limit: pageCnt,
                        limits: pageLimits,
                        even: true,
                        cellMinWidth: 80, //全局定义常规单元格的最小宽度,layui 2.2.1 新增
                        done: function(){
                            //自定义列宽
                            SetTableColW('LAY-app-content-list2','Statistical/GetInventoryList1',DetailColsSysArr);
                        },
                        cols:colsJson2
                    };
                    var param = {
                        SkuNo:SkuNo, //物料号
                        SkuName:SkuName, //物料名称
                        OwnerNo:OwnerNo, //货主编码
                        OwnerName:OwnerName, //货主名称
                        LotNo:LotNo, //批次号
                        LocatNo:LocatNo,//储位地址
                        PalletNo:PalletNo, //托盘号
                        Status:Status,//库存状态
                        InspectStatus:InspectStatus, //质检状态
                        StartTime:StartTime,//开始时间
                        EndTime:EndTime, //结束时间
                    };
                    sendData(IP + "/Statistical/GetInventoryList1", param, 'get', function (res) {
                        if (res.code == 0) //成功
                        {
                            var list = res.data;
                            $.extend(infoOptions2, {
                                data: list
                            });
                            infoOptions2.page = {
                                curr: 1
                            }
                            tableIns2 = table.render(infoOptions2);
                        }
                        else //不成功
                        {
                            layer.msg('获取明细列表信息失败!', {
                                icon: 2,
                                time: 2000 //2秒关闭(如果不配置,默认是3秒)
                            }, function () { });
                        }
                    })
                });
                //#endregion
            }
            //var url = IP + "/Statistical/GetInventoryList1";
            //接受全局变量
            let quanSkuNo = '';
            let quanLotNo='';
            //监听搜索
            form.on('submit(LAY-app-contlist-search)', function (data) {
                var SelectType = $("#SelectType").val();
                var SkuNo = $("#SkuNo").val();
                var SkuName = $("#SkuName").val();
                var LotNo = $("#LotNo").val();
                var LocatNo = $("#LocatNo").val();
                var PalletNo = $("#PalletNo").val();
                var OwnerNo = $("#OwnerNo").val();
                var OwnerName = $("#OwnerName").val();
                var Status = $("#Status").val();
                var InspectStatus = $("#InspectStatus").val();
                var StartTime = $("#StartTime").val();
                var EndTime = $("#EndTime").val();
                if (yemianid == 0) {
                    console.log("总单");
                    refreshTable(SkuNo, SkuName,OwnerNo,OwnerName,LotNo);
                } else if (yemianid == 1) {
                    //quanSkuNo = quanSkuNo;
                    //quanLotNo='';
                    console.log("明细");
                    console.log(SkuNo,SkuName,OwnerNo,OwnerName,LotNo,LocatNo,PalletNo,Status,InspectStatus,StartTime,EndTime)
                    refreshTable2(quanSkuNo,SkuName,OwnerNo,OwnerName,quanLotNo,LocatNo,PalletNo,Status,InspectStatus,StartTime,EndTime);
                }
                refreshTable(SelectType,SkuNo, SkuName,OwnerNo,OwnerName,LotNo,Status,InspectStatus);
            });
            //触发行双击事件
            table.on('rowDouble(LAY-app-content-list)', function (obj) {
                $(".layui-tab-title>li").attr("class", "");
                $('.layui-tab-title>li').eq(1).attr('class', 'layui-this');
                $('.layui-tab-content .layui-tab-item').attr('class', 'layui-tab-item')
                $('.layui-tab-content .layui-tab-item').eq(1).attr('class', 'layui-tab-item layui-show')
                console.log(obj);
                quanSkuNo = obj.data.SkuNo;
                quanLotNo=obj.data.lotNo;
                refreshTable2(obj.data.SkuNo,obj.data.SkuName,obj.data.OwnerNo,obj.data.OwnerName,obj.data.LotNo,obj.data.LocatNo,obj.data.PalletNo,obj.data.Status,obj.data.InspectStatus,obj.data.StartTime,obj.data.EndTime);
                yemianid = 1;
            });
            //监听Tab切换,以改变地址hash值
            element.on('tab(docDemoTabBrief)', function (data) {
                var SkuNo = $("#SkuNo").val();
                var SkuName = $("#SkuName").val();
                var LotNo = $("#LotNo").val();
                var LocatNo = $("#LocatNo").val();
                var PalletNo = $("#PalletNo").val();
                var OwnerNo = $("#OwnerNo").val();
                var OwnerName = $("#OwnerName").val();
                var Status = $("#Status").val();
                var InspectStatus = $("#InspectStatus").val();
                console.log(data.index);
                yemianid = data.index
                if (yemianid == 0) {
                    console.log("总单");
                    refreshTable(SkuNo, SkuName,OwnerNo,OwnerName,LotNo);
                } else if (yemianid == 1) {
                    console.log("明细");
                    refreshTable2(SkuNo,SkuName,OwnerNo,OwnerName,LotNo,LocatNo,PalletNo,Status,InspectStatus,StartTime,EndTime);
                }
            });
            form.on('submit(daochu)', function () {
                layer.confirm('确定导出当前数据吗?', function (index) {
                    if (yemianid == 0) {
                        console.log("总单");
                        var param = {
                            SkuNo: $("#SkuNo").val(),
                            SkuName: $("#SkuName").val(),
@@ -703,44 +460,6 @@
                                }, function () { });
                            }
                        });
                    } else if (yemianid == 1) {
                        console.log("明细");
                        var SkuNo = $("#SkuNo").val();
                        if (SkuNo == '') {
                            SkuNo = quanSkuNo;
                        }
                        var param = {
                            SkuNo: SkuNo,
                            SkuName: $("#SkuName").val(),
                            LotNo: $("#LotNo").val(),
                            LocatNo: $("#LocatNo").val(),
                            PalletNo: $("#PalletNo").val(),
                            Status: $("#Status").val(),
                            InspectStatus: $("#InspectStatus").val(),
                            IsSamolingTray: $("#IsSamolingTray").val(),
                            StartTime: $("#StartTime").val(),
                            EndTime: $("#EndTime").val(),
                        };
                        sendData(IP + "/Statistical/GetInventoryList1DaoChu", param, 'get', function (res) {
                            console.log(res);
                            if (res.code == 0) { //成功
                                var list = res.data;
                                table.exportFile(tableIns2.config.id, list, 'xls', "库存明细信息" + getNowTime(),); //data 为该实例中的任意数量的数据
                                layer.msg('导出成功!', {
                                    icon: 1,
                                    time: 2000 //2秒关闭(如果不配置,默认是3秒)
                                }, function () {
                                });
                            } else { //不成功
                                layer.msg('获取信息失败!', {
                                    icon: 2,
                                    time: 2000 //2秒关闭(如果不配置,默认是3秒)
                                }, function () { });
                            }
                        });
                    }
                });
@@ -757,18 +476,7 @@
                        resize: false,
                        area: ['970px', '650px']
                    });
                },
                customCols2: function(){
                    layer.open({
                        type: 2,
                        title: '自定义列',
                        content: '../SystemSettings/HeaderSetting.html?Href=Statistical/GetInventoryList1&ColsSysArr='+DetailColsSysArr,
                        maxmin: false,
                        resize: false,
                        area: ['970px', '650px']
                    });
                }
            };
            $('.layui-btn').on('click', function() {
                var type = $(this).data('type');
HTML/views/SystemSettings/PrintModule.html
New file
@@ -0,0 +1,153 @@
<!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" type="text/css" href="../../js/HiPrint/css/hiprint.css?t=' + Math.random() + '" />
    <link rel="stylesheet" type="text/css" href="../../js/HiPrint/css/print-lock.css" />
    <link rel="stylesheet" media="print" href="../../js/HiPrint/css/print-lock.css" />
    <!-- <link rel="stylesheet" type="text/css" href="../../js/HiPrint/css/bootstrap.min.css" > -->
    <style>
        .layui-form-label {
            padding: 5px 1px;
            text-align: center;
        }
        div {
            font-size: inherit;
        }
    </style>
</head>
<body>
    <div class="layui-card">
        <input type="hidden" id="printData" name="printData">
        <input type="hidden" id="printType" name="printType">
        <div class="row">
            <!--左侧div-->
            <div class="layui-col-xs2" style="padding-right:0px;max-height:250mm;">
                <div class="small-printElement-types hiprintEpContainer">
                </div>
            </div>
            <!--打印部分-->
            <div class="layui-col-xs6" style="margin-right: 50px;margin-left: 30px;">
                <!--打印头部分-->
                <div class="hiprint-toolbar" style="margin-top:15px;">
                    <ul>
                        <li><a class="hiprint-toolbar-item"><input type="number" id="customWidth"
                                    style="width: 50px;height: 19px;border: 0px;" placeholder="宽/mm" /></a></li>
                        <li><a class="hiprint-toolbar-item"><input type="number" id="customHeight"
                                    style="width: 50px;height: 19px;border: 0px;" placeholder="高/mm" /></a></li>
                        <li><a class="hiprint-tizee-btn" onclick="clearTemplate()">清空</a></li>
                        <!-- <li> <a class="btn hiprint-toolbar-item "
                                style="color: #fff;background-color: #d9534f;border-color: #d43f3a;"
                                id="preview">快速预览</a> </li> -->
                        <li> <a id="directPrint" class="btn hiprint-toolbar-item "
                                style="color: #fff;background-color: #d9534f; border-color: #d43f3a;">打印</a>
                        </li>
                        <!-- <li>
                            <a class="btn hiprint-toolbar-item"
                                style="color: #fff;background-color: #d9534f; border-color: #d43f3a;"
                                id="A4_getJson_toTextarea" onclick="BtnSubmit_Click()">保存</a>
                        </li> -->
                    </ul>
                    <div style="clear:both;"></div>
                </div>
                <!--打印主体部分-->
                <div id="hiprint-printTemplate" class="hiprint-printTemplate" style="margin-top:20px;">
                </div>
                <textarea class="form-control" rows="10" id="A4_textarea_json" style="display: none;"></textarea>
            </div>
            <!--右侧div-->
            <div class="layui-col-xs2" style="margin-left: 6%;max-height:260mm; overflow-y: scroll;">
                <div id="PrintElementOptionSetting" style="margin-top: 10px;"></div>
            </div>
        </div>
    </div>
    <script src="../../js/jquery-3.5.1.min.js"></script>
    <script src="../../js/jquery.cookie.js"></script>
    <script src="../../js/hiprint/content/bootstrap.min.js"></script>
    <script src="../../js/HiPrint/polyfill.min.js"></script>
    <script src="../../js/HiPrint/plugins/jquery.minicolors.min.js"></script>
    <script src="../../js/HiPrint/plugins/JsBarcode.all.min.js"></script>
    <script src="../../js/HiPrint/plugins/qrcode.js"></script>
    <script src="../../js/HiPrint/hiprint.bundle.js"></script>
    <script src="../../js/HiPrint/plugins/jquery.hiwprint.js"></script>
    <!-- <script src="../../js/HiPrint/plugins/socket.io.js"></script> -->
    <script src="../../js/HiPrint/plugins/config-etype-provider.js"></script>
    <script src="../../js/HiPrint/plugins/jspdf/canvas2image.js"></script>
    <script src="../../js/HiPrint/plugins/jspdf/canvg.min.js"></script>
    <script src="../../js/HiPrint/plugins/jspdf/html2canvas.min.js"></script>
    <script src="../../js/HiPrint/plugins/jspdf/jspdf.min.js"></script>
    <script src="../../js/HiPrint/plugins/print-data-list.js"></script>
    <script src="../../js/HiPrint/hiprint.config.js"></script>
    <script src="../../layuiadmin/layui/layui.js"></script>
    <script src="../../js/public.js"></script>
    <script>
        var configPrintJson;
        var datalist = [];
        //初始化打印插件渲染
        $(".hiprintEpContainer").html(""); //清除div内容
        var hiprintTemplate;
        // var JsonData = JSON.parse('{"panels":[{"index":0,"height":50,"width":50,"paperHeader":0,"paperFooter":141.73228346456693,"printElements":[{"tid":"configModule.SkuName","options":{"left":9,"top":12,"height":9.75,"width":120}},{"tid":"configModule.SkuNo","options":{"left":9,"top":37.5,"height":78,"width":120,"textType":"qrcode"}}],"paperNumberLeft":178.5,"paperNumberTop":123}]}')
        var JsonData = {};
        setTimeout(function () {
            var printType = $("#printType").val();
            datalist = getPrintDataList()(printType);
            synData(IP + "/sys/GetDefaultPrintTemplate?Type=" + printType, {}, 'get', function (res) {
                if (res.code == 0) { //成功
                    hiprint.init({
                        providers: [new configElementTypeProvider()]
                    });
                    //设置左侧拖拽事件
                    hiprint.PrintElementTypeManager.build('.hiprintEpContainer', 'testModule');
                    JsonData = JSON.parse(res.data.PositionJson);
                    $("#customWidth").val(JsonData.panels[0].width);
                    $("#customHeight").val(JsonData.panels[0].height);
                    hiprintTemplate = new hiprint.PrintTemplate({
                        template: JsonData,//模板JSON
                        settingContainer: '#PrintElementOptionSetting',
                        paginationContainer: '.hiprint-printPagination'
                    });
                    //打印设计
                    hiprintTemplate.design('#hiprint-printTemplate');
                    //打印
                    //这里获取上级页面的printData数据打印
                    // var printData = deepClone(parent.printData);
                    var printData = JSON.parse($("#printData").val());
                    hiprintTemplate.print(printData, '打印');
                    parent.layer.closeAll();
                }
                else //不成功
                {
                    layer.msg(res.msg, {
                        icon: 2,
                        time: 2000 //2秒关闭(如果不配置,默认是3秒)
                    }, function () { parent.layer.closeAll(); });
                }
            });
        }, 100);
        $('#directPrint').click(function () {
            hiprintTemplate.print(printData);
        });
    </script>
</body>
</html>
Wms/Model/ModelDto/DataDto/MateDataStockDto.cs
@@ -38,17 +38,23 @@
        /// <summary>
        /// 数量
        /// </summary>
        public string Qty { get; set; }
        public decimal? Qty { get; set; }
        /// <summary>
        /// 锁定数量
        /// </summary>
        public string LockQty { get; set; }
        public decimal? LockQty { get; set; }
        /// <summary>
        /// 冻结数量
        /// </summary>
        public string FrozenQty { get; set; }
        public decimal? FrozenQty { get; set; }
        /// <summary>
        /// 可抽检数量
        /// </summary>
        public decimal? InspectQty { get; set; }
        /// <summary>
        /// 剩余数量
Wms/WMS.BLL/BllSoServer/ExportNoticeServer.cs
@@ -4458,7 +4458,7 @@
                        }
                        else
                        {
                            qty += assign.AllotPallets(stockDetail, needQty, pNum, bNum, stockQtyDic);
                            qty += assign.AllotPallets(stockDetail, needQty, pNum, bNum, stockQtyDic, detail.LotNo, detail.IsMixBox);
                        }
                        
                        foreach (var sc in stockQtyDic)
Wms/WMS.BLL/BllSoServer/WaveMageServer.cs
@@ -480,7 +480,7 @@
                        Dictionary<string, int> zxQtyDic = new Dictionary<string, int>();//托出整箱数
                        //分配货物
                        //assign.AllocatePallets(stocks, pNum, bNum, needQty, stockQtyDic, zxQtyDic);
                        var qty = assign.AllotPallets(stockDetail, decimal.Parse(needQty.ToString()), pNum, bNum, stockQtyDic);
                        var qty = assign.AllotPallets(stockDetail, decimal.Parse(needQty.ToString()), pNum, bNum, stockQtyDic, detail.LotNo, detail.IsMixBox);
                       
                        foreach (var sc in stockQtyDic)
                        {
Wms/WMS.BLL/DataServer/StockServer.cs
@@ -5,9 +5,12 @@
using System.Runtime.Intrinsics.X86;
using System.Security.Claims;
using System.Text;
using System.Threading.Tasks;
using Model.ModelDto;
using Model.ModelDto.DataDto;
using Model.ModelDto.SysDto;
using Model.ModelVm.DataVm;
using Model.ModelVm.SysVm;
using SqlSugar;
using WMS.DAL;
using WMS.Entity.Context;
@@ -31,92 +34,255 @@
        /// <summary>
        /// 查询库存总量
        /// </summary>
        /// <param name="selectType">查询类型 0:物料信息 1:批次信息 2:质检信息 3:货主信息</param>
        /// <param name="skuNo">物料编码</param>
        /// <param name="skuName">物料名称</param>
        /// <param name="ownerNo">货主编码</param>
        /// <param name="ownerName">货主名称</param>
        /// <param name="lotNo">批次</param>
        /// <param name="status">库存状态</param>
        /// <param name="inspectStatus">质检状态</param>
        /// <returns></returns>
        public List<MateDataStockDto> GetDataStockList(string skuNo, string skuName, string ownerNo, string ownerName, string lotNo)
        public async Task<List<MateDataStockDto>> GetDataStockList(string selectType, string skuNo, string skuName, string ownerNo, string ownerName, string lotNo, string status, string inspectStatus)
        {
            string str = "select stock.SkuNo,stock.SkuName,stock.LotNo,stock.LotText,stock.Standard,stock.Qty," +
                "stock.LockQty,stock.FrozenQty,stock.OwnerNo,stock.OwnerName,(mate.Weight * stock.Qty) WeightSum " +
                "from DataStock stock " +
                "left join SysMaterials mate on stock.SkuNo = mate.SkuNo " +
                "Where stock.IsDel = @isdel and mate.IsDel = 0 ";
            //判断物料编码是否为空
            if (!string.IsNullOrEmpty(skuNo))
            List<MateDataStockDto> modUser = new List<MateDataStockDto>();
            if (string.IsNullOrEmpty(selectType))
            {
                str += " and stock.SkuNo like @skuno";
            }
            //判断物料名称是否为空
            if (!string.IsNullOrEmpty(skuName))
                modUser = await Db.Queryable<DataStock>()
                            .WhereIF(!string.IsNullOrEmpty(skuNo), a => a.SkuNo == skuNo)
                            .WhereIF(!string.IsNullOrEmpty(skuName), a => a.SkuName == skuName)
                            .WhereIF(!string.IsNullOrEmpty(ownerNo), a => a.OwnerNo == ownerNo)
                            .WhereIF(!string.IsNullOrEmpty(ownerName), a => a.OwnerName == ownerName)
                            .WhereIF(!string.IsNullOrEmpty(lotNo), a => a.LotNo == lotNo)
                            .Where(a => a.IsDel == "0")
                            .Select(a => new MateDataStockDto()
            {
                str += " and stock.SkuName like @skuname";
            }
            //判断货主编码是否为空
            if (!string.IsNullOrEmpty(ownerNo))
            {
                str += " and stock.OwnerNo like @ownerNo";
            }
            //判断货主名称是否为空
            if (!string.IsNullOrEmpty(ownerName))
            {
                str += " and stock.OwnerName like @ownerName";
            }
            //判断货主名称是否为空
            if (!string.IsNullOrEmpty(lotNo))
            {
                str += " and stock.LotNo like @lotNo";
            }
            //排序
            str += " order by stock.SkuNo";
            List<MateDataStockDto> StockList = Db.Ado.SqlQuery<MateDataStockDto>(str, new
            {
                isdel = "0", //是否删除
                skuno = "%" + skuNo + "%", //物料编码
                skuname = "%" + skuName + "%", //物料名称
                ownerNo = "%" + ownerNo + "%", //货主编码
                ownerName = "%" + ownerName + "%", //货主名称
                lotNo = "%" + lotNo + "%", //批次号
            });
                                SkuNo = a.SkuNo, //物料编码
                                SkuName = a.SkuName, //物料名称
                                Standard = a.Standard, //规格
                                LotNo = a.LotNo, //批次
                                LotText = a.LotText, //批次描述
                                OwnerNo = a.OwnerNo, //货主编码
                                OwnerName = a.OwnerName, //货主名称
                                Status = status, //库存状态
                                InspectStatus = inspectStatus, //质检状态
                                Qty = SqlFunc.Subqueryable<DataStockDetail>()
                                    .WhereIF(!string.IsNullOrEmpty(status), s => s.Status == status)
                                    .WhereIF(!string.IsNullOrEmpty(inspectStatus), s => s.InspectStatus == inspectStatus)
                                    .Where(s => s.IsDel == "0" && s.LotNo == a.LotNo)
                                    .Sum(s => s.Qty), //库存数量
                                //Qty = SqlFunc.AggregateSum(b.Qty), //库存数量
                                LockQty = SqlFunc.Subqueryable<DataStockDetail>()
                                    .WhereIF(!string.IsNullOrEmpty(status), s => s.Status == status)
                                    .WhereIF(!string.IsNullOrEmpty(inspectStatus), s => s.InspectStatus == inspectStatus)
                                    .Where(s => s.IsDel == "0" && s.LotNo == a.LotNo)
                                    .Sum(s => s.LockQty), //锁定数量
                                FrozenQty = SqlFunc.Subqueryable<DataStockDetail>()
                                    .WhereIF(!string.IsNullOrEmpty(status), s => s.Status == status)
                                    .WhereIF(!string.IsNullOrEmpty(inspectStatus), s => s.InspectStatus == inspectStatus)
                                    .Where(s => s.IsDel == "0" && s.LotNo == a.LotNo)
                                    .Sum(s => s.FrozenQty), //冻结数量
                                InspectQty = SqlFunc.Subqueryable<DataStockDetail>()
                                    .WhereIF(!string.IsNullOrEmpty(status), s => s.Status == status)
                                    .WhereIF(!string.IsNullOrEmpty(inspectStatus), s => s.InspectStatus == inspectStatus)
                                    .Where(s => s.IsDel == "0" && s.LotNo == a.LotNo)
                                    .Sum(s => s.InspectQty), //可抽检数量
                            }).ToListAsync();
            //库存总量
            List<MateDataStockDto> StockListDto = new List<MateDataStockDto>();
            foreach (var item in StockList)
                return modUser;
            }
            else
            {
                StockListDto.Add(item);
                ////判断库存总量是否拥有物料
                //if (StockListDto.Count > 0)
                //{
                //    int i = 0;
                //    //foreach循环库存总量
                //    foreach (var dto in StockListDto)
                //    {
                //        //判断物料和批次是否相同
                //        if (dto.SkuNo == item.SkuNo && dto.LotNo == item.LotNo)
                //        {
                //            dto.Qty =  (Convert.ToDecimal(dto.Qty) + Convert.ToDecimal(item.Qty)).ToString();
                //            dto.FrozenQty = (Convert.ToDecimal(dto.FrozenQty) + Convert.ToDecimal(item.FrozenQty)).ToString();
                //            dto.LockQty = (Convert.ToDecimal(dto.LockQty) + Convert.ToDecimal(item.LockQty)).ToString();
                //            dto.ResidueQty= (Convert.ToDecimal(dto.ResidueQty) + Convert.ToDecimal(item.ResidueQty)).ToString();
                //            break;
                //        }
                //        i += 1;
                //        //判断已有相同物料
                //        if (i == StockListDto.Count)
                //        {
                //            StockListDto.Add(item);
                //            break;
                //        }
                //    }
                //}
                //else
                //{
                //    StockListDto.Add(item);
                //    continue;
                //}
                var selectList = new List<DataStockDetail>();
                switch (selectType)
                {
                    case "0": // 物料信息
                        modUser = await Db.Queryable<DataStock>()
                            .Where(a => a.IsDel == "0")
                            .GroupBy(a => new { a.SkuNo, a.SkuName, a.Standard })
                            .Select(a => new MateDataStockDto()
                            {
                                SkuNo = a.SkuNo, //物料编码
                                SkuName = a.SkuName, //物料名称
                                Standard = a.Standard, //规格
                                Qty = SqlFunc.Subqueryable<DataStockDetail>()
                                    .WhereIF(!string.IsNullOrEmpty(skuNo), s => s.SkuNo == skuNo)
                                    .WhereIF(!string.IsNullOrEmpty(skuName), s => s.SkuName == skuName)
                                    .WhereIF(!string.IsNullOrEmpty(ownerNo), s => s.OwnerNo == ownerNo)
                                    .WhereIF(!string.IsNullOrEmpty(ownerName), s => s.OwnerName == ownerName)
                                    .WhereIF(!string.IsNullOrEmpty(lotNo), s => s.LotNo == lotNo)
                                    .WhereIF(!string.IsNullOrEmpty(status), s => s.Status == status)
                                    .WhereIF(!string.IsNullOrEmpty(inspectStatus), s => s.InspectStatus == inspectStatus)
                                    .Where(s => s.IsDel == "0" && s.SkuNo == a.SkuNo)
                                    .Sum(s => s.Qty), //库存数量
                                LockQty = SqlFunc.Subqueryable<DataStockDetail>()
                                    .WhereIF(!string.IsNullOrEmpty(skuNo), s => s.SkuNo == skuNo)
                                    .WhereIF(!string.IsNullOrEmpty(skuName), s => s.SkuName == skuName)
                                    .WhereIF(!string.IsNullOrEmpty(ownerNo), s => s.OwnerNo == ownerNo)
                                    .WhereIF(!string.IsNullOrEmpty(ownerName), s => s.OwnerName == ownerName)
                                    .WhereIF(!string.IsNullOrEmpty(lotNo), s => s.LotNo == lotNo)
                                    .WhereIF(!string.IsNullOrEmpty(status), s => s.Status == status)
                                    .WhereIF(!string.IsNullOrEmpty(inspectStatus), s => s.InspectStatus == inspectStatus)
                                    .Where(s => s.IsDel == "0" && s.SkuNo == a.SkuNo)
                                    .Sum(s => s.LockQty), //锁定数量
                                FrozenQty = SqlFunc.Subqueryable<DataStockDetail>()
                                    .WhereIF(!string.IsNullOrEmpty(skuNo), s => s.SkuNo == skuNo)
                                    .WhereIF(!string.IsNullOrEmpty(skuName), s => s.SkuName == skuName)
                                    .WhereIF(!string.IsNullOrEmpty(ownerNo), s => s.OwnerNo == ownerNo)
                                    .WhereIF(!string.IsNullOrEmpty(ownerName), s => s.OwnerName == ownerName)
                                    .WhereIF(!string.IsNullOrEmpty(lotNo), s => s.LotNo == lotNo)
                                    .WhereIF(!string.IsNullOrEmpty(status), s => s.Status == status)
                                    .WhereIF(!string.IsNullOrEmpty(inspectStatus), s => s.InspectStatus == inspectStatus)
                                    .Where(s => s.IsDel == "0" && s.SkuNo == a.SkuNo)
                                    .Sum(s => s.FrozenQty), //冻结数量
                                InspectQty = SqlFunc.Subqueryable<DataStockDetail>()
                                    .WhereIF(!string.IsNullOrEmpty(skuNo), s => s.SkuNo == skuNo)
                                    .WhereIF(!string.IsNullOrEmpty(skuName), s => s.SkuName == skuName)
                                    .WhereIF(!string.IsNullOrEmpty(ownerNo), s => s.OwnerNo == ownerNo)
                                    .WhereIF(!string.IsNullOrEmpty(ownerName), s => s.OwnerName == ownerName)
                                    .WhereIF(!string.IsNullOrEmpty(lotNo), s => s.LotNo == lotNo)
                                    .WhereIF(!string.IsNullOrEmpty(status), s => s.Status == status)
                                    .WhereIF(!string.IsNullOrEmpty(inspectStatus), s => s.InspectStatus == inspectStatus)
                                    .Where(s => s.IsDel == "0" && s.SkuNo == a.SkuNo)
                                    .Sum(s => s.InspectQty), //可抽检数量
                            })
                            .ToListAsync();
                        return modUser;
                    case "1": // 批次信息
                        modUser = await Db.Queryable<DataStock>()
                            .Where(a => a.IsDel == "0")
                            .GroupBy(a => new { a.LotNo, a.LotText })
                            .Select(a => new MateDataStockDto()
                            {
                                LotNo = a.LotNo, //批次
                                LotText = a.LotText, //批次描述
                                Qty = SqlFunc.Subqueryable<DataStockDetail>()
                                    .WhereIF(!string.IsNullOrEmpty(skuNo), s => s.SkuNo == skuNo)
                                    .WhereIF(!string.IsNullOrEmpty(skuName), s => s.SkuName == skuName)
                                    .WhereIF(!string.IsNullOrEmpty(ownerNo), s => s.OwnerNo == ownerNo)
                                    .WhereIF(!string.IsNullOrEmpty(ownerName), s => s.OwnerName == ownerName)
                                    .WhereIF(!string.IsNullOrEmpty(lotNo), s => s.LotNo == lotNo)
                                    .WhereIF(!string.IsNullOrEmpty(status), s => s.Status == status)
                                    .WhereIF(!string.IsNullOrEmpty(inspectStatus), s => s.InspectStatus == inspectStatus)
                                    .Where(s => s.IsDel == "0" && s.LotNo == a.LotNo)
                                    .Sum(s => s.Qty), //库存数量
                                LockQty = SqlFunc.Subqueryable<DataStockDetail>()
                                    .WhereIF(!string.IsNullOrEmpty(skuNo), s => s.SkuNo == skuNo)
                                    .WhereIF(!string.IsNullOrEmpty(skuName), s => s.SkuName == skuName)
                                    .WhereIF(!string.IsNullOrEmpty(ownerNo), s => s.OwnerNo == ownerNo)
                                    .WhereIF(!string.IsNullOrEmpty(ownerName), s => s.OwnerName == ownerName)
                                    .WhereIF(!string.IsNullOrEmpty(lotNo), s => s.LotNo == lotNo)
                                    .WhereIF(!string.IsNullOrEmpty(status), s => s.Status == status)
                                    .WhereIF(!string.IsNullOrEmpty(inspectStatus), s => s.InspectStatus == inspectStatus)
                                    .Where(s => s.IsDel == "0" && s.LotNo == a.LotNo)
                                    .Sum(s => s.LockQty), //锁定数量
                                FrozenQty = SqlFunc.Subqueryable<DataStockDetail>()
                                    .WhereIF(!string.IsNullOrEmpty(skuNo), s => s.SkuNo == skuNo)
                                    .WhereIF(!string.IsNullOrEmpty(skuName), s => s.SkuName == skuName)
                                    .WhereIF(!string.IsNullOrEmpty(ownerNo), s => s.OwnerNo == ownerNo)
                                    .WhereIF(!string.IsNullOrEmpty(ownerName), s => s.OwnerName == ownerName)
                                    .WhereIF(!string.IsNullOrEmpty(lotNo), s => s.LotNo == lotNo)
                                    .WhereIF(!string.IsNullOrEmpty(status), s => s.Status == status)
                                    .WhereIF(!string.IsNullOrEmpty(inspectStatus), s => s.InspectStatus == inspectStatus)
                                    .Where(s => s.IsDel == "0" && s.LotNo == a.LotNo)
                                    .Sum(s => s.FrozenQty), //冻结数量
                                InspectQty = SqlFunc.Subqueryable<DataStockDetail>()
                                    .WhereIF(!string.IsNullOrEmpty(skuNo), s => s.SkuNo == skuNo)
                                    .WhereIF(!string.IsNullOrEmpty(skuName), s => s.SkuName == skuName)
                                    .WhereIF(!string.IsNullOrEmpty(ownerNo), s => s.OwnerNo == ownerNo)
                                    .WhereIF(!string.IsNullOrEmpty(ownerName), s => s.OwnerName == ownerName)
                                    .WhereIF(!string.IsNullOrEmpty(lotNo), s => s.LotNo == lotNo)
                                    .WhereIF(!string.IsNullOrEmpty(status), s => s.Status == status)
                                    .WhereIF(!string.IsNullOrEmpty(inspectStatus), s => s.InspectStatus == inspectStatus)
                                    .Where(s => s.IsDel == "0" && s.LotNo == a.LotNo)
                                    .Sum(s => s.InspectQty), //可抽检数量
                            })
                            .ToListAsync();
                        return modUser;
                    case "2": // 质检信息
                        modUser = await Db.Queryable<DataStock>()
                            .LeftJoin<DataStockDetail>((a, b) => a.LotNo == b.LotNo)
                           .WhereIF(!string.IsNullOrEmpty(skuNo), a => a.SkuNo == skuNo)
                           .WhereIF(!string.IsNullOrEmpty(skuName), a => a.SkuName == skuName)
                           .WhereIF(!string.IsNullOrEmpty(ownerNo), a => a.OwnerNo == ownerNo)
                           .WhereIF(!string.IsNullOrEmpty(ownerName), a => a.OwnerName == ownerName)
                           .WhereIF(!string.IsNullOrEmpty(lotNo), a => a.LotNo == lotNo)
                           .WhereIF(!string.IsNullOrEmpty(status), (a, b) => b.Status == status)
                           .WhereIF(!string.IsNullOrEmpty(inspectStatus), (a, b) => b.InspectStatus == inspectStatus)
                           .Where(a => a.IsDel == "0")
                           .GroupBy((a, b) => b.InspectStatus)
                           .Select((a, b) => new MateDataStockDto()
                           {
                               InspectStatus = b.InspectStatus, //质检状态
                               Qty = SqlFunc.AggregateSum(b.Qty), //库存数量
                               LockQty = SqlFunc.AggregateSum(b.LockQty), //锁定数量
                               FrozenQty = SqlFunc.AggregateSum(b.FrozenQty), //冻结数量
                               InspectQty = SqlFunc.AggregateSum(b.InspectQty), //可抽检数量
                           })
                           .ToListAsync();
                        return modUser;
                    case "3": // 货主信息
                        modUser = await Db.Queryable<DataStock>()
                            .Where(a => a.IsDel == "0")
                            .GroupBy(a => new { a.OwnerNo, a.OwnerName })
                            .Select(a => new MateDataStockDto()
                            {
                                OwnerNo = a.OwnerNo, //货主编码
                                OwnerName = a.OwnerName, //货主名称
                                Qty = SqlFunc.Subqueryable<DataStockDetail>()
                                    .WhereIF(!string.IsNullOrEmpty(skuNo), s => s.SkuNo == skuNo)
                                    .WhereIF(!string.IsNullOrEmpty(skuName), s => s.SkuName == skuName)
                                    .WhereIF(!string.IsNullOrEmpty(ownerNo), s => s.OwnerNo == ownerNo)
                                    .WhereIF(!string.IsNullOrEmpty(ownerName), s => s.OwnerName == ownerName)
                                    .WhereIF(!string.IsNullOrEmpty(lotNo), s => s.LotNo == lotNo)
                                    .WhereIF(!string.IsNullOrEmpty(status), s => s.Status == status)
                                    .WhereIF(!string.IsNullOrEmpty(inspectStatus), s => s.InspectStatus == inspectStatus)
                                    .Where(s => s.IsDel == "0" && s.OwnerNo == a.OwnerNo)
                                    .Sum(s => s.Qty), //库存数量
                                LockQty = SqlFunc.Subqueryable<DataStockDetail>()
                                    .WhereIF(!string.IsNullOrEmpty(skuNo), s => s.SkuNo == skuNo)
                                    .WhereIF(!string.IsNullOrEmpty(skuName), s => s.SkuName == skuName)
                                    .WhereIF(!string.IsNullOrEmpty(ownerNo), s => s.OwnerNo == ownerNo)
                                    .WhereIF(!string.IsNullOrEmpty(ownerName), s => s.OwnerName == ownerName)
                                    .WhereIF(!string.IsNullOrEmpty(lotNo), s => s.LotNo == lotNo)
                                    .WhereIF(!string.IsNullOrEmpty(status), s => s.Status == status)
                                    .WhereIF(!string.IsNullOrEmpty(inspectStatus), s => s.InspectStatus == inspectStatus)
                                    .Where(s => s.IsDel == "0" && s.OwnerNo == a.OwnerNo)
                                    .Sum(s => s.LockQty), //锁定数量
                                FrozenQty = SqlFunc.Subqueryable<DataStockDetail>()
                                    .WhereIF(!string.IsNullOrEmpty(skuNo), s => s.SkuNo == skuNo)
                                    .WhereIF(!string.IsNullOrEmpty(skuName), s => s.SkuName == skuName)
                                    .WhereIF(!string.IsNullOrEmpty(ownerNo), s => s.OwnerNo == ownerNo)
                                    .WhereIF(!string.IsNullOrEmpty(ownerName), s => s.OwnerName == ownerName)
                                    .WhereIF(!string.IsNullOrEmpty(lotNo), s => s.LotNo == lotNo)
                                    .WhereIF(!string.IsNullOrEmpty(status), s => s.Status == status)
                                    .WhereIF(!string.IsNullOrEmpty(inspectStatus), s => s.InspectStatus == inspectStatus)
                                    .Where(s => s.IsDel == "0" && s.OwnerNo == a.OwnerNo)
                                    .Sum(s => s.FrozenQty), //冻结数量
                                InspectQty = SqlFunc.Subqueryable<DataStockDetail>()
                                    .WhereIF(!string.IsNullOrEmpty(skuNo), s => s.SkuNo == skuNo)
                                    .WhereIF(!string.IsNullOrEmpty(skuName), s => s.SkuName == skuName)
                                    .WhereIF(!string.IsNullOrEmpty(ownerNo), s => s.OwnerNo == ownerNo)
                                    .WhereIF(!string.IsNullOrEmpty(ownerName), s => s.OwnerName == ownerName)
                                    .WhereIF(!string.IsNullOrEmpty(lotNo), s => s.LotNo == lotNo)
                                    .WhereIF(!string.IsNullOrEmpty(status), s => s.Status == status)
                                    .WhereIF(!string.IsNullOrEmpty(inspectStatus), s => s.InspectStatus == inspectStatus)
                                    .Where(s => s.IsDel == "0" && s.OwnerNo == a.OwnerNo)
                                    .Sum(s => s.InspectQty), //可抽检数量
                            })
                            .ToListAsync();
                        return modUser;
                    default:
                        break;
            }
            return StockListDto;
                return modUser;
            }
        }
        /// <summary>
@@ -837,9 +1003,9 @@
                        //判断物料是否相同
                        if (dto.SkuNo == item.SkuNo)
                        {
                            dto.Qty = (Convert.ToInt32(dto.Qty) + Convert.ToInt32(item.Qty)).ToString();
                            dto.FrozenQty = (Convert.ToInt32(dto.FrozenQty) + Convert.ToInt32(item.FrozenQty)).ToString();
                            dto.LockQty = (Convert.ToInt32(dto.LockQty) + Convert.ToInt32(item.LockQty)).ToString();
                            dto.Qty = Convert.ToInt32(dto.Qty) + Convert.ToInt32(item.Qty);
                            dto.FrozenQty = Convert.ToInt32(dto.FrozenQty) + Convert.ToInt32(item.FrozenQty);
                            dto.LockQty = Convert.ToInt32(dto.LockQty) + Convert.ToInt32(item.LockQty);
                            dto.ResidueQty = (Convert.ToInt32(dto.ResidueQty) + Convert.ToInt32(item.ResidueQty)).ToString();
                            break;
                        }
Wms/WMS.BLL/Logic/AllotSku.cs
@@ -20,8 +20,10 @@
        /// <param name="fullPalletQty">满托数量</param>
        /// <param name="fullBoxQty">满箱数量</param>
        /// <param name="stockQtyDic">托出库物品数 key:库存托盘表的ID、val:托盘上的数量</param>
        /// <param name="lotNo">批次</param>
        /// <param name="isMixBox">是否接受拼箱 0:否  1:是</param>
        /// <returns></returns>
        public decimal AllotPallets(List<DataStockDetail> palletList, decimal needQty, int fullPalletQty, int fullBoxQty, Dictionary<int, decimal> stockQtyDic)
        public decimal AllotPallets(List<DataStockDetail> palletList, decimal needQty, int fullPalletQty, int fullBoxQty, Dictionary<int, decimal> stockQtyDic,string lotNo,string isMixBox)
        {
            //优先先进先出(快过期的先出)
            //优先零箱、零托(出完零箱出整箱)
@@ -84,8 +86,6 @@
                {
                    var ztNum = needQty / fullPalletQty;//需要整托数
                    var zps = list.Where(s => s.Qty >= fullPalletQty).ToList();//整托
                    var sps = list.Where(s => s.Qty < fullPalletQty).ToList();//散托(有可能是被锁定了数量的) 
@@ -96,7 +96,14 @@
                                                                                                                          //散托
                        foreach (var s in st)
                        {
                            var detailQty = decimal.Parse((s.Qty - s.LockQty - s.FrozenQty).ToString());
                            decimal otherLotQty = 0;//混箱中其他批次数量
                            //不接受拼箱
                            if (isMixBox == "0")
                            {
                                //查找出混箱集合
                                otherLotQty = GetMixBoxQty(s.Id, lotNo);
                            }
                            var detailQty = decimal.Parse((s.Qty - s.LockQty - s.FrozenQty - otherLotQty).ToString());
                            if (needQty - qty < detailQty)
                            {
                                var num = needQty - qty;
@@ -119,7 +126,14 @@
                            var zt = zps.OrderBy(s => s.ExpirationTime).ToList();//所有未使用的托盘(未被分配的)
                            foreach (var ss in zt)
                            {
                                var detailQty = decimal.Parse((ss.Qty - ss.LockQty - ss.FrozenQty).ToString());
                                decimal otherLotQty = 0;//混箱中其他批次数量
                                //不接受拼箱
                                if (isMixBox == "0")
                                {
                                    //查找出混箱集合
                                    otherLotQty = GetMixBoxQty(ss.Id, lotNo);
                                }
                                var detailQty = decimal.Parse((ss.Qty - ss.LockQty - ss.FrozenQty - otherLotQty).ToString());
                                if (needQty - qty < detailQty)
                                {
                                    var num = needQty - qty;
@@ -135,10 +149,7 @@
                                    break;
                                }
                            }
                        }
                    }
                    else if (allotSet == 1)//优先整托(分配合适的整托数量)
                    {
@@ -153,7 +164,14 @@
                            var zt = zps.OrderBy(s => s.ExpirationTime).ToList();//所有未使用的托盘(未被分配的)
                            foreach (var ss in zt)
                            {
                                var detailQty = decimal.Parse((ss.Qty - ss.LockQty - ss.FrozenQty).ToString());
                                decimal otherLotQty = 0;//混箱中其他批次数量
                                //不接受拼箱
                                if (isMixBox == "0")
                                {
                                    //查找出混箱集合
                                    otherLotQty = GetMixBoxQty(ss.Id, lotNo);
                                }
                                var detailQty = decimal.Parse((ss.Qty - ss.LockQty - ss.FrozenQty - otherLotQty).ToString());
                                if (needQty - qty < detailQty)
                                {
                                    break;
@@ -174,7 +192,14 @@
                            foreach (var ss in zt)
                            {
                                var detailQty = decimal.Parse((ss.Qty - ss.LockQty - ss.FrozenQty).ToString());
                                decimal otherLotQty = 0;//混箱中其他批次数量
                                //不接受拼箱
                                if (isMixBox == "0")
                                {
                                    //查找出混箱集合
                                    otherLotQty = GetMixBoxQty(ss.Id, lotNo);
                                }
                                var detailQty = decimal.Parse((ss.Qty - ss.LockQty - ss.FrozenQty - otherLotQty).ToString());
                                if (needQty - qty < detailQty)
                                {
                                    var num = needQty - qty;
@@ -197,7 +222,14 @@
                            var zt = zps.Where(s => !sIds.Contains(s.Id)).OrderBy(s => s.ExpirationTime).ThenBy(m => m.Qty - m.LockQty - m.FrozenQty).ToList();//所有未使用(未被分配的)
                            foreach (var ss in zt)
                            {
                                var detailQty = decimal.Parse((ss.Qty - ss.LockQty - ss.FrozenQty).ToString());
                                decimal otherLotQty = 0;//混箱中其他批次数量
                                //不接受拼箱
                                if (isMixBox == "0")
                                {
                                    //查找出混箱集合
                                    otherLotQty = GetMixBoxQty(ss.Id, lotNo);
                                }
                                var detailQty = decimal.Parse((ss.Qty - ss.LockQty - ss.FrozenQty - otherLotQty).ToString());
                                if (needQty - qty < detailQty)
                                {
                                    var num = needQty - qty;
@@ -213,7 +245,6 @@
                                }
                            }
                        }
                    }
                }
                
@@ -230,6 +261,28 @@
            }
        }
        /// <summary>
        /// 查找出混箱中其他批次总数量
        /// </summary>
        /// <param name="stockDetailId"></param>
        /// <param name="lotNo"></param>
        /// <returns></returns>
        private decimal GetMixBoxQty(int stockDetailId,string lotNo)
        {
            var contextDb = DataContext.Db;
            //查找出混箱集合
            List<string> mixBoxList = contextDb.Queryable<DataBoxInfo>()
                .Where(w => w.IsDel == "0" && w.StockDetailId == stockDetailId)
                .GroupBy(g => g.LotNo)
                .Having(h => SqlFunc.AggregateCount(h.LotNo) > 1)
                .Select(s => s.BoxNo).ToList();
            decimal otherLotQty = contextDb.Queryable<DataBoxInfo>()
                .Where(w => w.IsDel == "0" && w.StockDetailId == stockDetailId && mixBoxList.Contains(w.BoxNo) && w.LotNo != lotNo)
                .Sum(s => s.Qty);
            return otherLotQty;
        }
        /// <summary>
        /// JC23领料出库分配货物(分配托盘上全部物料,防止四楼不同投料口分配同一托盘物料冲突)
Wms/WMS.IBLL/IDataServer/IStockServer.cs
@@ -2,6 +2,7 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
using WMS.Entity.DataEntity;
using WMS.Entity.SysEntity;
@@ -14,10 +15,16 @@
        /// <summary>
        /// 查询库存总量
        /// </summary>
        /// <param name="selectType">查询类型</param>
        /// <param name="skuNo">物料编码</param>
        /// <param name="skuName">物料名称</param>
        /// <param name="ownerNo">货主编码</param>
        /// <param name="ownerName">货主名称</param>
        /// <param name="lotNo">批次</param>
        /// <param name="status">库存状态</param>
        /// <param name="inspectStatus">质检状态</param>
        /// <returns></returns>
        List<MateDataStockDto> GetDataStockList(string skuNo, string skuName, string ownerNo, string ownerName, string lotNo);
        Task<List<MateDataStockDto>> GetDataStockList(string selectType, string skuNo, string skuName, string ownerNo, string ownerName, string lotNo, string status, string inspectStatus);
        /// <summary>
        /// 获取库存明细
Wms/Wms/Controllers/StatisticalController.cs
@@ -6,6 +6,7 @@
using WMS.Entity.DataEntity;
using WMS.IBLL.IDataServer;
using System.Security.Claims;
using System.Threading.Tasks;
namespace Wms.Controllers
{
@@ -40,13 +41,19 @@
        /// <summary>
        /// 获取库存总量
        /// </summary>
        /// <param name="skuNo"></param>
        /// <param name="skuName"></param>
        /// <param name="selectType">查询类型</param>
        /// <param name="skuNo">物料编码</param>
        /// <param name="skuName">物料名称</param>
        /// <param name="ownerNo">货主编码</param>
        /// <param name="ownerName">货主名称</param>
        /// <param name="lotNo">批次</param>
        /// <param name="status">库存状态</param>
        /// <param name="inspectStatus">质检状态</param>
        /// <returns></returns>
        [HttpGet]
        public IActionResult GetInventoryList(string skuNo, string skuName, string ownerNo, string ownerName, string lotNo)
        public async Task<IActionResult> GetInventoryList(string selectType, string skuNo, string skuName, string ownerNo, string ownerName, string lotNo, string status, string inspectStatus)
        {
            List<MateDataStockDto> StockList = _stock.GetDataStockList(skuNo, skuName, ownerNo, ownerName, lotNo);
            List<MateDataStockDto> StockList = await _stock.GetDataStockList(selectType, skuNo, skuName, ownerNo, ownerName, lotNo, status, inspectStatus);
            return Ok(new
            {
                data = StockList,