zhaowc
20 小时以前 35e3dae48db445e66c9614ee55dba062659e33d7
程序修改
28个文件已修改
1449 ■■■■■ 已修改文件
HTML/.vscode/settings.json 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HTML/views/HouseWithinSetting/HopperTransport.html 111 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HTML/views/QualityControl/QualityInformation.html 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HTML/views/QualityControl/QualityInformationFrom.html 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HTML/views/StatisticalReport/BoxInfor.html 137 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HTML/views/WareHouseSetting/FlatLibraryLegend.html 259 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HTML/views/WareHouseSetting/Locate.html 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HTML/views/WareHouseSetting/Pallets.html 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HTML/views/WareHouseSetting/PalletsPrintFrom.html 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/Model/InterFaceModel/HopperTransportModel.cs 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/Model/InterFaceModel/HttpModel.cs 65 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/Model/ModelVm/DataVm/DataStockInfoVM.cs 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/Utility/Tools/RcsHelper.cs 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.BLL/BllQualityServer/QualityInspectServer.cs 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.BLL/BllTransServer/HopperTransportServer.cs 363 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.BLL/BllTransServer/RcsServer.cs 125 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.BLL/DataServer/StockDetailServer.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.BLL/SysServer/PalletsServer.cs 67 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.IBLL/IBllQualityServer/IQualityInspectServer.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.IBLL/IBllTransServer/IHopperTransportServer.cs 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.IBLL/IBllTransServer/IRcsServer.cs 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.IBLL/IDataServer/IStockDetailServer.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/Wms/Controllers/BllCheckController.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/Wms/Controllers/BllQualityController.cs 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/Wms/Controllers/DownApiController.cs 99 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/Wms/Controllers/StatisticalController.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/Wms/Tools/ApiUrlConfig.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/Wms/appsettings.json 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HTML/.vscode/settings.json
@@ -1,3 +1,3 @@
{
    "liveServer.settings.port": 5504
    "liveServer.settings.port": 5505
}
HTML/views/HouseWithinSetting/HopperTransport.html
@@ -53,7 +53,7 @@
            <ul class="layui-tab-title" id="tab">
              <li class="layui-this">叫料</li>
              <li>叫车</li>
              <!-- <li>车间到车间</li> -->
              <li>点到点任务</li>
            </ul>
            <div class="layui-tab-content">
@@ -291,7 +291,7 @@
              <div class="layui-tab-item">
                <div class="flesDiv">
                  <form class="layui-form" action="" style="width: 40%">
                    <div class="layui-form-item">
                    <!-- <div class="layui-form-item">
                      <label class="layui-form-label" style="width: 80px"
                        >起始区域</label
                      >
@@ -303,22 +303,23 @@
                          <option value=""></option>
                        </select>
                      </div>
                    </div>
                    </div> -->
                    <div class="layui-form-item">
                      <label class="layui-form-label" style="width: 80px"
                        >起始位置</label
                      >
                      <div class="layui-input-block">
                        <select
                        <input
                         type="text"
                          id="LocateSelect3"
                          name="LocateSelect3"
                          lay-filter="LocateSelect3">
                          <option value=""></option>
                        </select>
                          placeholder=""
                          autocomplete="off"
                          class="layui-input"/>
                      </div>
                    </div>
                    <div class="layui-form-item">
                    <!-- <div class="layui-form-item">
                      <label class="layui-form-label" style="width: 80px"
                        >目标区域</label
                      >
@@ -330,22 +331,22 @@
                          <option value=""></option>
                        </select>
                      </div>
                    </div>
                    </div> -->
                    <div class="layui-form-item">
                      <label class="layui-form-label" style="width: 80px"
                        >目标位置</label
                      >
                      <div class="layui-input-block">
                        <select
                        <input
                         type="text"
                          id="LocateSelect4"
                          name="LocateSelect4"
                          lay-filter="LocateSelect4">
                          <option value=""></option>
                        </select>
                          placeholder=""
                          autocomplete="off"
                          class="layui-input"/>
                      </div>
                    </div>
                    <div class="layui-form-item">
                    <!-- <div class="layui-form-item">
                      <label class="layui-form-label" style="width: 80px"
                        >桶类型</label
                      >
@@ -360,8 +361,8 @@
                          <option value="3">脏桶</option>
                        </select>
                      </div>
                    </div>
                    <div class="layui-form-item" id="SkuSelectDiv2">
                    </div> -->
                    <!-- <div class="layui-form-item" id="SkuSelectDiv2">
                      <label class="layui-form-label" style="width: 80px"
                        >物料</label
                      >
@@ -373,8 +374,8 @@
                          <option value=""></option>
                        </select>
                      </div>
                    </div>
                    <div class="layui-form-item" id="LotNoSelectDiv2">
                    </div> -->
                    <!-- <div class="layui-form-item" id="LotNoSelectDiv2">
                      <label class="layui-form-label" style="width: 80px"
                        >批次</label
                      >
@@ -387,8 +388,8 @@
                          autocomplete="off"
                          class="layui-input" />
                      </div>
                    </div>
                    <div class="layui-form-item" id="WeightSelectDiv2">
                    </div> -->
                    <!-- <div class="layui-form-item" id="WeightSelectDiv2">
                      <label class="layui-form-label" style="width: 80px"
                        >重量</label
                      >
@@ -401,7 +402,7 @@
                          autocomplete="off"
                          class="layui-input" />
                      </div>
                    </div>
                    </div> -->
                    <div class="layui-form-item">
                      <div class="layui-input-block">
                        <button
@@ -433,6 +434,9 @@
    <script src="../../js/jquery.cookie.js"></script>
    <script type="text/javascript"></script>
    <script>
       var id = localStorage.getItem('keyUserName');
       console.log("id:"+id);
      layui
        .config({
          base: "../../layuiadmin/", //静态资源所在路径
@@ -482,7 +486,7 @@
                Standard: field.Standard,
                SkuNo: field.SkuSelect,
                LotNo: field.LotNoSelect,
              };
              };
              sendData(
                IP + "/DownApi/jiaoLiaoHopper",
                param,
@@ -563,6 +567,67 @@
              return false; // 阻止默认 form 跳转
            });
             // 点对点任务提交事件
            form.on("submit(demo3)", function (data) {
              var field = data.field; // 获取表单字段值
              console.log("起始位置:"+field.LocateSelect3+",目标位置:"+field.LocateSelect4+",用户ID:"+id);
              var begin = field.LocateSelect3
              var end = field.LocateSelect4
              if (begin.length = 0) {
                layer.msg("请先输入起始储位!", {
                  icon: 2,
                  time: 2000 //2秒关闭(如果不配置,默认是3秒)
                  });
                  return;
              }
              if (end.length = 0) {
                layer.msg("请先输入目标储位!", {
                  icon: 2,
                  time: 2000 //2秒关闭(如果不配置,默认是3秒)
                  });
                  return;
              }
              var param = {
                BeginPoint: begin,
                EndPoint: end,
                ID:id
              };
              console.log(param);
              sendData(
                IP + "/DownApi/PointToPointRequest",
                param,
                "post",
                function (res) {
                  if (res.code == 0) {
                    //成功
                    layer.msg(
                      res.message,
                      {
                        icon: 1,
                        time: 1000, //2秒关闭(如果不配置,默认是3秒)
                      },
                      function () {}
                    );
                  } else {
                    //不成功
                    layer.msg(
                      res.message,
                      {
                        icon: 2,
                        time: 2000, //2秒关闭(如果不配置,默认是3秒)
                      },
                      function () {}
                    );
                  }
                }
              );
              return false; // 阻止默认 form 跳转
            });
            GetArea();
            form.on("select(AreaSelect)", function (data) {
HTML/views/QualityControl/QualityInformation.html
@@ -363,7 +363,7 @@
                                    InspectNo: field.InspectNo,        
                                    //ASNNo: field.ASNNo,        
                                    LotNo: field.LotNo,
                                    //SkuNo: field.SkuNo,
                                    SkuNo: field.SkuNo,
                                    IsQualified: field.IsQualified,
                                };
                                if(doing)
HTML/views/QualityControl/QualityInformationFrom.html
@@ -16,32 +16,20 @@
                    <input type="text" name="InspectNo" placeholder="请输入检验号" lay-verify="required" autocomplete="off" class="layui-input">
                </div>
            </div>
            <!-- <div class="layui-form-item">
                <label class="layui-form-label">入库单号</label>
                <div class="layui-input-block" style="width: 70%;">
                    <input type="text" name="ASNNo" placeholder="请输入入库单号" autocomplete="off" class="layui-input">
                </div>
            </div> -->
            <!-- <div class="layui-form-item">
                <label class="layui-form-label">批次号</label>
                <div class="layui-input-block" style="width: 70%;">
                    <input type="text" name="LotNo" placeholder="请输入批次号" lay-verify="required" autocomplete="off" class="layui-input">
                </div>
            </div> -->
            <div class="layui-form-item">
                <label class="layui-form-label">批次号</label>
                <label class="layui-form-label">物料编码</label>
                <div class="layui-input-block" style="width: 70%;">
                    <select name="LotNo" id="LotNo" lay-filter="LotNo" lay-verify="">
                    <select name="SkuNo" id="SkuNo" lay-filter="SkuNo" lay-verify="">
                        <option value=""></option>
                    </select>
                </div>
            </div>
            <!-- <div class="layui-form-item">
                <label class="layui-form-label">物料号</label>
            <div class="layui-form-item">
                <label class="layui-form-label">批次号</label>
                <div class="layui-input-block" style="width: 70%;">
                    <input type="text" name="SkuNo" placeholder="请输入物料号" lay-verify="required" autocomplete="off" class="layui-input">
                    <input type="text" name="LotNo" placeholder="请输入批次号" lay-verify="required" class="layui-input">
                </div>
            </div> -->
            </div>
            <div class="layui-form-item">
                    <label class="layui-form-label">审核状态</label>
                    <div class="layui-input-block" style="width: 70%;">
@@ -70,7 +58,6 @@
                var $ = layui.$,
                    form = layui.form,
                    layer = layui.layer;
                });
                //获取浏览器参数
@@ -80,15 +67,20 @@
                    if (r != null) return unescape(r[2]);
                    return null;
                }
                getsku();
                function getsku(res){
                //获取批次下拉框信息
                sendData(IP + "/BllQuality/GetLotNoList", {}, 'get', function(res) {
                var param = {
                    SkuNo:  $("#SkuNo").val(),
                };
                sendData(IP + "/BllQuality/GetLotNoList",  param,"post", function(res) {
                    if (res.code == 0) { //成功
                    for (var i = 0; i < res.data.length; i++) {
                        $("#LotNo").append('<option value =' + res.data[i].LotNo + '>' + res.data[i].LotNo + '</option>');
                    }
                    form.render('select');
                        $("#SkuNo").append('<option value =' + res.data[i].SkuNo + '>' + res.data[i].SkuNo + '</option>');
                    };
                    } else { //不成功
                        layer.msg(res.msg, {
                            icon: 2,
@@ -96,7 +88,7 @@
                        }, function() {});
                    }
                });
            }
        </script>
    </body>
</html>
HTML/views/StatisticalReport/BoxInfor.html
@@ -92,6 +92,18 @@
                                <input type="text" id="LotNo"  name="LotNo" placeholder="批次号" autocomplete="off" class="layui-input">
                            </div>
                        </div>
                         <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;">
                                <select name="PalletStatus" id="PalletStatus" lay-filter="PalletStatus"
                                    lay-search> =
                                    <option value=""></option>
                                    <option value="0">净桶</option>
                                    <option value="2">满桶</option>
                                    <option value="3">脏桶</option>
                                </select>
                            </div>
                        </div>
                        <!-- 箱码 箱支状态 检验标记 零箱标记 质量状态 -->
@@ -113,17 +125,7 @@
                                </select>
                            </div>
                        </div> -->
                        <!-- <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;">
                                <select name="InspectMark" id="InspectMark" lay-filter="InspectMark"
                                    lay-search>
                                    <option value=""></option>
                                    <option value="0">否</option>
                                    <option value="1">是</option>
                                </select>
                            </div>
                        </div>
                        <!--
                        <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;">
@@ -198,6 +200,18 @@
                        </div>
                        <!-- #endregion -->
                    </div>
                        <script type="text/html" id="buttonTpl">
                        {{# function GetBtn1(d){
                                var html = '';
                                html =`<a class="layui-btn layui-btn-xs" lay-event="del"><i
                                        class="layui-icon layui-icon-ok"></i>删除</a>`;
                                return html;
                            }
                        }}
                        {{ GetBtn1(d) }}
                    </script>
                    
                    <script type="text/html" id="InspectMarkStatus">
                        {{#  if(d.InspectMark=='0'){ }}
@@ -352,14 +366,22 @@
                    {field: 'LockQty', title: '锁定数量', align: 'center',},
                    {field: 'FrozenQty', title: '冻结数量', align: 'center'},
                    {field: 'InspectStatus', title: '质检状态', align: 'center', templet: '#InspectStatus1'}, 
                    {field: 'UDF1', title: '所属设备编码', align: 'center'},
                    {field: 'UDF1', title: '所属设备编码', align: 'center'}
                    , {
                        field: 'caozuo',
                        title: '操作',
                        fixed: 'right',
                        align: 'center',
                        width: 205,
                        toolbar: '#buttonTpl'
                    }
                    //{field: 'InspectMark', title: '抽检标记', align: 'center', templet: '#InspectMarkStatus'},
                    //{field: 'BitPalletMark', title: '零托标记', align: 'center', templet: '#BitPalletMarkStatus'},
                ]];
                var TotalColsSysArr=encodeURIComponent(encodeURIComponent(JSON.stringify(TotalColsArr)))//将表头数据进行url编码
                //#endregion
                //获取托盘明细
                function refreshTable(WareHouseName,AreaName,LocatNo,PalletNo,LotNo) {
                function refreshTable(WareHouseName,AreaName,LocatNo,PalletNo,LotNo,PalletStatus) {
                    //#region 自定义表头
                    var colsJson
                    var param1={
@@ -399,7 +421,7 @@
                            locatNo:LocatNo,
                            palletNo:PalletNo, //托盘号
                            LotNo:LotNo, //批次号
                            PalletStatus:PalletStatus,
                        };
                        sendData(IP + "/Statistical/GetBindList", param, 'get', function(res) { 
                            console.log(res)                       
@@ -424,64 +446,40 @@
                    //#endregion                    
                }     
                
                //头工具栏事件
                table.on('toolbar(LAY-app-content-list)', function (obj) {
                    var checkStatus = table.checkStatus(obj.config.id);
                    if (obj.event == "add") {
                        layer.open({
                            type: 2,
                            title: '添加托盘库存明细',
                            content: 'PalletAddFrom.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 = {
                                        PalletNo:field.PalletNo,//托盘码
                                        WareHouseNo: field.WareHouseNo, //所属仓库
                                        AreaNo: field.AreaNo, //所属区域
                                        LocatNo:field.LocatNo,//所属储位
                                        PalletStatus: field.PalletStatus, //托盘类别
                                        SkuNo:field.SkuNo,
                                        SkuName:field.SkuName,
                                        LotNo:field.LotNo
                                    };
                                    if(doing){
                                        doing = false;
                                        sendData(IP + "/Statistical/InsertStockDetail", 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("","","","","","","","","","","","","","");
                                                    doing = true;
                                                });
                                            }
                                            else
                                            { //不成功
                                                layer.msg(res.msg, {
                                                    icon: 2,
                                                    time: 2000 //2秒关闭(如果不配置,默认是3秒)
                                                }, function() {doing = true;});
                table.on('tool(LAY-app-content-list)', function (obj) {
                    var data = obj.data;
                    console.log(data)
                    if (obj.event === 'del') {
                        layer.confirm('确定删除当前托盘库存?', function (index) {
                            var param = {
                                id: uid,
                                StockId:data.Id
                            };
                            var postUrl='/DownApi/DelStockWms'
                            sendData(IP + postUrl, param, 'post', function (res) {
                                console.log(res);
                                if (res.code == 0) { //成功
                                    layer.msg(res.msg, {
                                        icon: 1,
                                        time: 1000 //2秒关闭(如果不配置,默认是3秒)
                                    }, function () {
                                        tableIns.reload({
                                            page: {
                                                curr: 1
                                            }
                                        });
                                    }
                                });
                                submit.trigger('click');
                            }
                                    });
                                } else { //不成功
                                    layer.msg(res.msg, {
                                        icon: 2,
                                        time: 2000 //2秒关闭(如果不配置,默认是3秒)
                                    }, function () { });
                                }
                            });
                        });
                    }
                });
                })
                //获取仓库下拉框信息
                sendData(IP + "/Sys/GetWarehouseDic", {}, 'get', function(res) {
                    if (res.code == 0) { //成功
@@ -534,8 +532,9 @@
                    var LocatNo = $("#LocatNo").val();
                    var PalletNo = $("#PalletNo").val();
                    var LotNo = $("#LotNo").val();
                    var PalletStatus =  $("#PalletStatus").val();
                    refreshTable(WareHouseName,AreaName,LocatNo,PalletNo,LotNo);
                    refreshTable(WareHouseName,AreaName,LocatNo,PalletNo,LotNo,PalletStatus);
                    
                });
HTML/views/WareHouseSetting/FlatLibraryLegend.html
@@ -283,7 +283,6 @@
                                    <table class="">
                                        <tr>
                                            <td><button id="C1200101" value="C1200101" class="btnShow " ></button></td>
                                            <td><button id="C1200102" value="C1200102" class="btnShow " ></button></td>
                                        </tr>
                                        <tr>
                                            <td><button id="C1200201" value="C1200201" class="btnShow " ></button></td>
@@ -304,7 +303,6 @@
                                    <table class="">
                                        <tr>
                                            <td><button id="C1400101" value="C1400101" class="btnShow " ></button></td>
                                        </tr>
                                        <tr>
                                            <td><button id="C1400201" value="C1400201" class="btnShow " ></button></td>
@@ -339,108 +337,66 @@
                        <div class="solidDiv"  style="width: 59%; height: 100%;">
                            <p>中间站</p>
                            <div id="C01" style="display: flex; height: 85%;" >
                                <div class="flesDiv" style="width: 35%;height: 100%;">
                                <div class="flesDiv" style="width: 65%;height: 100%;">
                                    <table class="">
                                        <tr>
                                            <td><button id="C0100101" value="C0100101" class="btnShow " ></button></td>
                                            <td><button id="C0100102" value="C0100102" class="btnShow " ></button></td>
                                            <td><button id="C0100103" value="C0100103" class="btnShow " ></button></td>
                                            <td><button id="C0100115" value="C0100115" class="btnShow " ></button></td>
                                            <td style="width: 30px;"></td>
                                            <td><button id="C0100116" value="C0100116" class="btnShow " ></button></td>
                                            <td style="width: 30px;"></td>
                                            <td><button id="C0100117" value="C0100117" class="btnShow " ></button></td>
                                            <td style="width: 20px;"></td>
                                            <td><button id="C0100118" value="C0100118" class="btnShow " ></button></td>
                                            <td style="width: 20px;"></td>
                                            <td><button id="C0100119" value="C0100119" class="btnShow " ></button></td>
                                            <td style="width: 20px;"></td>
                                            <td><button id="C0100120" value="C0100120" class="btnShow " ></button></td>
                                            <td style="width: 20px;"></td>
                                            <td><button id="C0100121" value="C0100121" class="btnShow " ></button></td>
                                            <td style="width: 20px;"></td>
                                            <td><button id="C0100122" value="C0100122" class="btnShow " ></button></td>
                                        </tr>
                                        <tr>
                                            <td><button id="C0100201" value="C0100201" class="btnShow " ></button></td>
                                            <td><button id="C0100202" value="C0100202" class="btnShow " ></button></td>
                                            <td><button id="C0100203" value="C0100203" class="btnShow " ></button></td>
                                            <td style="height: 60px;"></td>
                                        </tr>
                                        <tr>
                                            <td><button id="C0100301" value="C0100301" class="btnShow " ></button></td>
                                            <td><button id="C0100302" value="C0100302" class="btnShow " ></button></td>
                                            <td><button id="C0100303" value="C0100303" class="btnShow " ></button></td>
                                        </tr>
                                        <tr>
                                            <td style="height: 20px;"></td>
                                            <td><button id="C0100114" value="C0100114" class="btnShow " ></button></td>
                                            <td style="width: 20px;"></td>
                                            <td><button id="C0100113" value="C0100113" class="btnShow " ></button></td>
                                            <td style="width: 20px;"></td>
                                            <td><button id="C0100112" value="C0100112" class="btnShow " ></button></td>
                                            <td style="width: 20px;"></td>
                                            <td><button id="C0100111" value="C0100111" class="btnShow " ></button></td>
                                            <td style="width: 20px;"></td>
                                            <td><button id="C0100110" value="C0100110" class="btnShow " ></button></td>
                                            <td style="width: 20px;"></td>
                                            <td><button id="C0100109" value="C0100109" class="btnShow " ></button></td>
                                            <td style="width: 20px;"></td>
                                            <td><button id="C0100108" value="C0100108" class="btnShow " ></button></td>
                                            <td style="width: 20px;"></td>
                                            <td><button id="C0100107" value="C0100107" class="btnShow " ></button></td>
                                        </tr>
                                        <tr>
                                            <td><button id="C0100401" value="C0100401" class="btnShow " ></button></td>
                                            <td><button id="C0100402" value="C0100402" class="btnShow " ></button></td>
                                            <td><button id="C0100403" value="C0100403" class="btnShow " ></button></td>
                                        </tr>
                                        <tr>
                                            <td><button id="C0100501" value="C0100501" class="btnShow " ></button></td>
                                            <td><button id="C0100502" value="C0100502" class="btnShow " ></button></td>
                                            <td><button id="C0100503" value="C0100503" class="btnShow " ></button></td>
                                        </tr>
                                        <tr>
                                            <td><button id="C0100601" value="C0100601" class="btnShow " ></button></td>
                                            <td><button id="C0100602" value="C0100602" class="btnShow " ></button></td>
                                            <td><button id="C0100603" value="C0100603" class="btnShow " ></button></td>
                                        </tr>
                                    </table>
                                </div>
                                <div class="flesDiv" style="width: 30%;height: 100%;">
                                    <table class="" >
                                        <tr>
                                            <td><button id="C0100701" value="C0100701" class="btnShow " ></button></td>
                                            <td><button id="C0100702" value="C0100702" class="btnShow " ></button></td>
                                        </tr>
                                        <tr>
                                            <td><button id="C0100801" value="C0100801" class="btnShow " ></button></td>
                                            <td><button id="C0100802" value="C0100802" class="btnShow " ></button></td>
                                        </tr>
                                        <tr>
                                            <td><button id="C0100901" value="C0100901" class="btnShow " ></button></td>
                                            <td><button id="C0100902" value="C0100902" class="btnShow " ></button></td>
                                        </tr>
                                        <tr>
                                            <td style="height: 20px;"></td>
                                        </tr>
                                        <tr>
                                            <td><button id="C0101001" value="C0101001" class="btnShow " ></button></td>
                                            <td><button id="C0101002" value="C0101002" class="btnShow " ></button></td>
                                        </tr>
                                        <tr>
                                            <td><button id="C0101101" value="C0101101" class="btnShow " ></button></td>
                                            <td><button id="C0101102" value="C0101102" class="btnShow " ></button></td>
                                        </tr>
                                        <tr>
                                            <td><button id="C0101201" value="C0101201" class="btnShow " ></button></td>
                                            <td><button id="C0101202" value="C0101202" class="btnShow " ></button></td>
                                        </tr>
                                    </table>
                                </div>
                                <div class="flesDiv" style="width: 35%;height: 100%;">
                                    <table>
                                        <tr>
                                            <td><button id="C0101301" value="C0101301" class="btnShow " ></button></td>
                                            <td><button id="C0101302" value="C0101302" class="btnShow " ></button></td>
                                            <td><button id="C0101303" value="C0101303" class="btnShow " ></button></td>
                                            <td><button id="C0100101" value="C0100101" class="btnShow " ></button></td>
                                        </tr>
                                        <tr>
                                            <td><button id="C0101401" value="C0101401" class="btnShow " ></button></td>
                                            <td><button id="C0101402" value="C0101402" class="btnShow " ></button></td>
                                            <td><button id="C0101403" value="C0101403" class="btnShow " ></button></td>
                                            <td><button id="C0100102" value="C0100102" class="btnShow " ></button></td>
                                        </tr>
                                        <tr>
                                            <td><button id="C0101501" value="C0101501" class="btnShow " ></button></td>
                                            <td><button id="C0101502" value="C0101502" class="btnShow " ></button></td>
                                            <td><button id="C0101503" value="C0101503" class="btnShow " ></button></td>
                                            <td><button id="C0100103" value="C0100103" class="btnShow " ></button></td>
                                        </tr> 
                                        <tr>
                                            <td style="height: 20px;"></td>
                                            <td><button id="C0100104" value="C0100104" class="btnShow " ></button></td>
                                        </tr>
                                        <tr>
                                            <td><button id="C0101601" value="C0101601" class="btnShow " ></button></td>
                                            <td><button id="C0101602" value="C0101602" class="btnShow " ></button></td>
                                            <td><button id="C0101603" value="C0101603" class="btnShow " ></button></td>
                                            <td><button id="C0100105" value="C0100105" class="btnShow " ></button></td>
                                        </tr>
                                        <tr>
                                            <td><button id="C0101701" value="C0101701" class="btnShow " ></button></td>
                                            <td><button id="C0101702" value="C0101702" class="btnShow " ></button></td>
                                            <td><button id="C0101703" value="C0101703" class="btnShow " ></button></td>
                                        </tr>
                                        <tr>
                                            <td><button id="C0101801" value="C0101801" class="btnShow " ></button></td>
                                            <td><button id="C0101802" value="C0101802" class="btnShow " ></button></td>
                                            <td><button id="C0101803" value="C0101803" class="btnShow " ></button></td>
                                            <td><button id="C0100106" value="C0100106" class="btnShow " ></button></td>
                                        </tr> 
                                    </table>
                                </div>
@@ -459,17 +415,11 @@
                                        <tr>
                                            <td><button id="C1800201" value="C1800201" class="btnShow " ></button></td>
                                        </tr>
                                        <tr>
                                            <td><button id="C1800301" value="C1800301" class="btnShow " ></button></td>
                                        </tr>
                                    </table>
                                </div>
                                <div class="flesDiv" style="width: 50%;height: 100%;">
                                    <table class="" >
                                        <tr>
                                            <td><button id="C1800501" value="C1800501" class="btnShow " ></button></td>
                                        </tr>
                                        <tr>
                                            <td><button id="C1800601" value="C1800601" class="btnShow " ></button></td>
                                        </tr> 
@@ -485,11 +435,6 @@
                                    <tr>
                                        <td><button id="C2000101" value="C2000101" class="btnShow " ></button></td>
                                        <td><button id="C2000102" value="C2000102" class="btnShow " ></button></td>
                                    </tr>
                                    <tr>
                                        <td><button id="C2000201" value="C2000201" class="btnShow " ></button></td>
                                        <td><button id="C2000202" value="C2000202" class="btnShow " ></button></td>
                                        
                                    </tr>
                                        
@@ -519,6 +464,8 @@
                                <p>干法制粒</p>
                                <div id="C17" class="flesDiv" style="height:85%; justify-content: space-around;">
                                    <button id="C1700101" value="C1700101" class="btnShow " ></button>
                                    <button id="C1700201" value="C1700201" class="btnShow " ></button>
                                </div>    
                            </div>
                           
@@ -527,8 +474,9 @@
                        <div class="solidDiv"  style="width: 19%; height: 100%;">    
                            <p>湿法制粒3</p>
                            <div id="C16" class="flesDiv" style="height:85%; justify-content: space-around;">
                                <button id="C1600101" value="C1700101" class="btnShow " ></button>
                                <button id="C1600201" value="C1700201" class="btnShow " ></button>
                                <button id="C1600101" value="C1600101" class="btnShow " ></button>
                                <button id="C1600201" value="C1600201" class="btnShow " ></button>
                                <button id="C1600301" value="C1600301" class="btnShow " ></button>
                            </div>
                        </div>
                    </div>    
@@ -552,6 +500,7 @@
                        <div id="C28" style="height:75%; display: flex; justify-content: space-around;">
                            <div class="flesDiv">
                                <button id="C2800301" value="C2800301" class="btnShow" ></button>
                                <button id="C2800302" value="C2800302" class="btnShow" ></button>
                            </div>
                            <div class="flesDiv">
                                <table class="">
@@ -572,6 +521,7 @@
                        <div id="C29" style="height:75%;  display: flex; justify-content: space-around;">
                            <div class="flesDiv">
                                <button id="C2900301" value="C2900301" class="btnShow" ></button>
                                <button id="C2900302" value="C2900302" class="btnShow" ></button>
                            </div>
                            <div class="flesDiv">
                                <table class="">
@@ -592,6 +542,7 @@
                        <div id="C30" style="height:75%;  display: flex; justify-content: space-around;">
                            <div class="flesDiv">
                                <button id="C3000301" value="C3000301" class="btnShow" ></button>
                                <button id="C3000302" value="C3000302" class="btnShow" ></button>
                            </div>
                            <div class="flesDiv">
                                <table class="">
@@ -612,6 +563,7 @@
                        <div id="C34" style="height:75%;  display: flex; justify-content: space-around;">
                            <div class="flesDiv">
                                <button id="C3400301" value="C3400301" class="btnShow" ></button>
                                <button id="C3400302" value="C3400302" class="btnShow" ></button>
                            </div>
                            <div class="flesDiv">
                                <table class="">
@@ -632,6 +584,7 @@
                        <div id="C35" style="height:75%;  display: flex; justify-content: space-around;">
                            <div class="flesDiv">
                                <button id="C3500301" value="C3500301" class="btnShow" ></button>
                                <button id="C3500302" value="C3500302" class="btnShow" ></button>
                            </div>
                            <div class="flesDiv">
                                <table class="">
@@ -652,6 +605,7 @@
                        <div id="C36" style="height:75%; display: flex; justify-content: space-around;">
                            <div class="flesDiv">
                                <button id="C3600301" value="C3600301" class="btnShow" ></button>
                                <button id="C3600302" value="C3600302" class="btnShow" ></button>
                            </div>
                            <div class="flesDiv">
                                <table class="">
@@ -672,6 +626,7 @@
                        <div id="C37" style="height:75%;  display: flex; justify-content: space-around;">
                            <div class="flesDiv">
                                <button id="C3700301" value="C3700301" class="btnShow" ></button>
                                <button id="C3700302" value="C3700302" class="btnShow" ></button>
                            </div>
                            <div class="flesDiv">
                                <table class="">
@@ -697,13 +652,12 @@
                            <div id="C43" class="flesDiv" style="height:85%; justify-content: space-around;">
                                <table class="">
                                    <tr>
                                        <td class="btnShow"></td>
                                        <td><button id="C4300201" value="C4300201" class="btnShow " ></button></td>
                                        <td><button id="C4300202" value="C4300202" class="btnShow " ></button></td>
                                        <!-- <td><button id="C4300302" value="C4300302" class="btnShow " ></button></td> -->
                                    </tr>
                                    <tr>
                                        <td><button id="C4300101" value="C4300101" class="btnShow " ></button></td>
                                        <td><button id="C4300201" value="C4300201" class="btnShow " ></button></td>
                                        <td><button id="C4300102" value="C4300102" class="btnShow " ></button></td>
                                        <!-- <td><button id="C4300301" value="C4300301" class="btnShow " ></button></td> -->
                                    </tr>
                                     
@@ -796,11 +750,11 @@
                            <p>投料区6</p>
                            <div id="C48" class="flesDiv" style="height:85%; justify-content: space-around;">
                                <table class="">
                                    <tr>
                                    <!-- <tr>
                                        <td><button id="C4800102" value="C4800102" class="btnShow " ></button></td>
                                        <td><button id="C4800202" value="C4800202" class="btnShow " ></button></td>
                                        <!-- <td><button id="C4800302" value="C4800302" class="btnShow " ></button></td> -->
                                    </tr>
                                        <td><button id="C4800302" value="C4800302" class="btnShow " ></button></td>
                                    </tr> -->
                                    <tr>
                                        <td><button id="C4800101" value="C4800101" class="btnShow " ></button></td>
                                        <td><button id="C4800201" value="C4800201" class="btnShow " ></button></td>
@@ -815,11 +769,11 @@
                            <p>投料区7</p>
                            <div id="C49" class="flesDiv" style="height:85%; justify-content: space-around;">
                                <table class="">
                                    <tr>
                                    <!-- <tr>
                                        <td><button id="C4900102" value="C4900102" class="btnShow " ></button></td>
                                        <td><button id="C4900202" value="C4900202" class="btnShow " ></button></td>
                                        <!-- <td><button id="C4900302" value="C4900302" class="btnShow " ></button></td> -->
                                    </tr>
                                        <td><button id="C4900302" value="C4900302" class="btnShow " ></button></td>
                                    </tr> -->
                                    <tr>
                                        <td><button id="C4900101" value="C4900101" class="btnShow " ></button></td>
                                        <td><button id="C4900201" value="C4900201" class="btnShow " ></button></td>
@@ -834,11 +788,11 @@
                            <p>投料区8</p>
                            <div id="C50" class="flesDiv" style="height:85%; justify-content: space-around;">
                                <table class="">
                                    <tr>
                                    <!-- <tr>
                                        <td><button id="C5000102" value="C5000102" class="btnShow " ></button></td>
                                        <td><button id="C5000202" value="C5000202" class="btnShow " ></button></td>
                                        <!-- <td><button id="C5000302" value="C5000302" class="btnShow " ></button></td> -->
                                    </tr>
                                        <td><button id="C5000302" value="C5000302" class="btnShow " ></button></td>
                                    </tr> -->
                                    <tr>
                                        <td><button id="C5000101" value="C5000101" class="btnShow " ></button></td>
                                        <td><button id="C5000201" value="C5000201" class="btnShow " ></button></td>
@@ -1015,39 +969,15 @@
                                <div style="width: 80%; height: 100%;">
                                    <div class="flesDiv" style="width: 100%; height: 25%;">
                                        <table>
                                            <!-- <tr>
                                                <td><button id="C2400104" value="C2400104" class="btnShow1 " ></button></td>
                                                <td><button id="C2400204" value="C2400204" class="btnShow1 " ></button></td>
                                                <td><button id="C2400304" value="C2400304" class="btnShow1 " ></button></td>
                                                <td><button id="C2400404" value="C2400404" class="btnShow1 " ></button></td>
                                                <td><button id="C2400504" value="C2400504" class="btnShow1 " ></button></td>
                                                <td class="btnShow1"></td>
                                                <td><button id="C2400704" value="C2400704" class="btnShow1 " ></button></td>
                                                <td><button id="C2400804" value="C2400804" class="btnShow1 " ></button></td>
                                                <td><button id="C2400904" value="C2400904" class="btnShow1 " ></button></td>
                                                <td class="btnShow1"></td>
                                                <td><button id="C2401104" value="C2401104" class="btnShow1 " ></button></td>
                                                <td><button id="C2401204" value="C2401204" class="btnShow1 " ></button></td>
                                                <td><button id="C2401304" value="C2401304" class="btnShow1 " ></button></td>
                                                <td class="btnShow1"></td>
                                                <td><button id="C2401504" value="C2401504" class="btnShow1 " ></button></td>
                                                <td><button id="C2401604" value="C2401604" class="btnShow1 " ></button></td>
                                                <td><button id="C2401704" value="C2401704" class="btnShow1 " ></button></td>
                                                <td><button id="C2401804" value="C2401804" class="btnShow1 " ></button></td>
                                                <td><button id="C2401904" value="C2401904" class="btnShow1 " ></button></td>
                                            </tr> -->
                                            <tr>
                                                <td><button id="C2400103" value="C2400103" class="btnShow1 " ></button></td>
                                                <td><button id="C2400203" value="C2400203" class="btnShow1 " ></button></td>
                                                <td><button id="C2400303" value="C2400303" class="btnShow1 " ></button></td>
                                                <td><button id="C2400403" value="C2400403" class="btnShow1 " ></button></td>
                                                <td><button id="C2400503" value="C2400503" class="btnShow1 " ></button></td>
                                                <td class="btnShow1"></td>
                                                <td><button id="C2400703" value="C2400703" class="btnShow1 " ></button></td>
                                                <td><button id="C2400803" value="C2400803" class="btnShow1 " ></button></td>
                                                <td><button id="C2400903" value="C2400903" class="btnShow1 " ></button></td>
                                                <td><button id="C2401002" value="C2401002" class="btnShow1 " ></button></td>
                                                 <td class="btnShow1"></td>
                                                <td><button id="C2401103" value="C2401103" class="btnShow1 " ></button></td>
                                                <td><button id="C2401203" value="C2401203" class="btnShow1 " ></button></td>
                                                <td><button id="C2401303" value="C2401303" class="btnShow1 " ></button></td>
@@ -1063,16 +993,14 @@
                                                <td><button id="C2400202" value="C2400202" class="btnShow1 " ></button></td>
                                                <td><button id="C2400302" value="C2400302" class="btnShow1 " ></button></td>
                                                <td><button id="C2400402" value="C2400402" class="btnShow1 " ></button></td>
                                                <td><button id="C2400502" value="C2400502" class="btnShow1 " ></button></td>
                                                <td><button id="C2400602" value="C2400602" class="btnShow1 " ></button></td>
                                                <td><button id="C2400702" value="C2400702" class="btnShow1 " ></button></td>
                                                <td class="btnShow1"></td>
                                                <td><button id="C2400802" value="C2400802" class="btnShow1 " ></button></td>
                                                <td><button id="C2400902" value="C2400902" class="btnShow1 " ></button></td>
                                                <td><button id="C2401001" value="C2401001" class="btnShow1 " ></button></td>
                                                 <td class="btnShow1"></td>
                                                <td><button id="C2401102" value="C2401102" class="btnShow1 " ></button></td>
                                                <td><button id="C2401202" value="C2401202" class="btnShow1 " ></button></td>
                                                <td><button id="C2401302" value="C2401302" class="btnShow1 " ></button></td>
                                                <td><button id="C2401402" value="C2401402" class="btnShow1 " ></button></td>
                                                <td class="btnShow1"></td>
                                                <td><button id="C2401502" value="C2401502" class="btnShow1 " ></button></td>
                                                <td><button id="C2401602" value="C2401602" class="btnShow1 " ></button></td>
                                                <td><button id="C2401702" value="C2401702" class="btnShow1 " ></button></td>
@@ -1084,16 +1012,14 @@
                                                <td><button id="C2400201" value="C2400201" class="btnShow1 " ></button></td>
                                                <td><button id="C2400301" value="C2400301" class="btnShow1 " ></button></td>
                                                <td><button id="C2400401" value="C2400401" class="btnShow1 " ></button></td>
                                                <td><button id="C2400501" value="C2400501" class="btnShow1 " ></button></td>
                                                <td><button id="C2400601" value="C2400601" class="btnShow1 " ></button></td>
                                                <td><button id="C2400701" value="C2400701" class="btnShow1 " ></button></td>
                                                <td class="btnShow1"></td>
                                                <td><button id="C2400801" value="C2400801" class="btnShow1 " ></button></td>
                                                <td><button id="C2400901" value="C2400901" class="btnShow1 " ></button></td>
                                                <td class="btnShow1"></td>
                                                 <td class="btnShow1"></td>
                                                <td><button id="C2401101" value="C2401101" class="btnShow1 " ></button></td>
                                                <td><button id="C2401201" value="C2401201" class="btnShow1 " ></button></td>
                                                <td><button id="C2401301" value="C2401301" class="btnShow1 " ></button></td>
                                                <td><button id="C2401401" value="C2401401" class="btnShow1 " ></button></td>
                                                <td class="btnShow1"></td>
                                                <td><button id="C2401501" value="C2401501" class="btnShow1 " ></button></td>
                                                <td><button id="C2401601" value="C2401601" class="btnShow1 " ></button></td>
                                                <td><button id="C2401701" value="C2401701" class="btnShow1 " ></button></td>
@@ -1152,7 +1078,7 @@
                                                <td><button id="C2402201" value="C2402201" class="btnShow1 " ></button></td>
                                                <td><button id="C2402301" value="C2402301" class="btnShow1 " ></button></td>
                                                <td><button id="C2402401" value="C2402401" class="btnShow1 " ></button></td> 
                                                <td><button id="C2402501" value="C2402501" class="btnShow1 " ></button></td>
                                                 <td class="btnShow1"></td>
                                                <td><button id="C2402601" value="C2402601" class="btnShow1 " ></button></td>
                                                <td><button id="C2402701" value="C2402701" class="btnShow1 " ></button></td>
                                                <td><button id="C2402801" value="C2402801" class="btnShow1 " ></button></td>
@@ -1171,27 +1097,7 @@
                                    </div>
                                    <div class="flesDiv" style="width: 100%; height: 25%;">
                                        <table>
                                            <!-- <tr>
                                                <td><button id="C2403904" value="C2403904" class="btnShow1 " ></button></td>
                                                <td><button id="C2404004" value="C2404004" class="btnShow1 " ></button></td>
                                                <td><button id="C2404104" value="C2404104" class="btnShow1 " ></button></td>
                                                <td><button id="C2404204" value="C2404204" class="btnShow1 " ></button></td>
                                                <td class="btnShow1"></td>
                                                <td><button id="C2404401" value="C2404401" class="btnShow1 " ></button></td>
                                                <td><button id="C2404604" value="C2404604" class="btnShow1 " ></button></td>
                                                <td><button id="C2404704" value="C2404704" class="btnShow1 " ></button></td>
                                                <td><button id="C2404804" value="C2404804" class="btnShow1 " ></button></td>
                                                <td><button id="C2404904" value="C2404904" class="btnShow1 " ></button></td>
                                                <td><button id="C2405004" value="C2405004" class="btnShow1 " ></button></td>
                                                <td><button id="C2405104" value="C2405104" class="btnShow1 " ></button></td>
                                                <td><button id="C2405203" value="C2405203" class="btnShow1 " ></button></td>
                                                <td class="btnShow1"></td>
                                                <td><button id="C2405404" value="C2405404" class="btnShow1 " ></button></td>
                                                <td><button id="C2405504" value="C2405504" class="btnShow1 " ></button></td>
                                                <td><button id="C2405604" value="C2405604" class="btnShow1 " ></button></td>
                                                <td><button id="C2405704" value="C2405704" class="btnShow1 " ></button></td>
                                                <td><button id="C2405804" value="C2405804" class="btnShow1 " ></button></td>
                                            </tr> -->
                                            <tr>
                                                <td><button id="C2403903" value="C2403903" class="btnShow1 " ></button></td>
                                                <td><button id="C2404003" value="C2404003" class="btnShow1 " ></button></td>
@@ -1219,16 +1125,15 @@
                                                <td><button id="C2404102" value="C2404102" class="btnShow1 " ></button></td>
                                                <td><button id="C2404202" value="C2404202" class="btnShow1 " ></button></td>
                                                <td><button id="C2404302" value="C2404302" class="btnShow1 " ></button></td> 
                                                <td><button id="C2404502" value="C2404502" class="btnShow1 " ></button></td>
                                                  <td class="btnShow1"></td>
                                                <td><button id="C2404602" value="C2404602" class="btnShow1 " ></button></td>
                                                <td><button id="C2404702" value="C2404702" class="btnShow1 " ></button></td>
                                                <td><button id="C2404802" value="C2404802" class="btnShow1 " ></button></td>
                                                <td><button id="C2404902" value="C2404902" class="btnShow1 " ></button></td>
                                                <td><button id="C2405002" value="C2405002" class="btnShow1 " ></button></td>
                                                <td><button id="C2405102" value="C2405102" class="btnShow1 " ></button></td>
                                                <td><button id="C2405201" value="C2405201" class="btnShow1 " ></button></td>
                                                <td><button id="C2405302" value="C2405302" class="btnShow1 " ></button></td>
                                                <td><button id="C2405201" value="C2405201" class="btnShow1 " ></button></td>
                                                <td class="btnShow1"></td>
                                                <td><button id="C2405402" value="C2405402" class="btnShow1 " ></button></td>
                                                <td><button id="C2405502" value="C2405502" class="btnShow1 " ></button></td>
                                                <td><button id="C2405602" value="C2405602" class="btnShow1 " ></button></td>
@@ -1241,8 +1146,7 @@
                                                <td><button id="C2404101" value="C2404101" class="btnShow1 " ></button></td>
                                                <td><button id="C2404201" value="C2404201" class="btnShow1 " ></button></td>
                                                <td><button id="C2404301" value="C2404301" class="btnShow1 " ></button></td> 
                                                <td><button id="C2404501" value="C2404501" class="btnShow1 " ></button></td>
                                                  <td class="btnShow1"></td>
                                                <td><button id="C2404601" value="C2404601" class="btnShow1 " ></button></td>
                                                <td><button id="C2404701" value="C2404701" class="btnShow1 " ></button></td>
                                                <td><button id="C2404801" value="C2404801" class="btnShow1 " ></button></td>
@@ -1250,7 +1154,7 @@
                                                <td><button id="C2405001" value="C2405001" class="btnShow1 " ></button></td>
                                                <td><button id="C2405101" value="C2405101" class="btnShow1 " ></button></td>
                                                <td class="btnShow1"></td>
                                                <td><button id="C2405301" value="C2405301" class="btnShow1 " ></button></td>
                                                <td class="btnShow1"></td>
                                                <td><button id="C2405401" value="C2405401" class="btnShow1 " ></button></td>
                                                <td><button id="C2405501" value="C2405501" class="btnShow1 " ></button></td>
                                                <td><button id="C2405601" value="C2405601" class="btnShow1 " ></button></td>
@@ -1280,14 +1184,13 @@
                                                <td><button id="C2407403" value="C2407403" class="btnShow1 " ></button></td>
                                                <td><button id="C2407503" value="C2407503" class="btnShow1 " ></button></td>
                                                <td><button id="C2407603" value="C2407603" class="btnShow1 " ></button></td>
                                                <td><button id="C2407703" value="C2407703" class="btnShow1 " ></button></td>
                                            </tr>
                                            <tr>
                                                <td><button id="C2405902" value="C2405902" class="btnShow1 " ></button></td>
                                                <td><button id="C2406002" value="C2406002" class="btnShow1 " ></button></td>
                                                <td><button id="C2406102" value="C2406102" class="btnShow1 " ></button></td>
                                                <td><button id="C2406202" value="C2406202" class="btnShow1 " ></button></td>
                                                <td><button id="C2406302" value="C2406302" class="btnShow1 " ></button></td>
                                                 <td class="btnShow1"></td>
                                                <td class="btnShow1"></td>
                                                <td><button id="C2406502" value="C2406502" class="btnShow1 " ></button></td>
                                                <td><button id="C2406602" value="C2406602" class="btnShow1 " ></button></td>
@@ -1301,15 +1204,14 @@
                                                <td><button id="C2407402" value="C2407402" class="btnShow1 " ></button></td>
                                                <td><button id="C2407502" value="C2407502" class="btnShow1 " ></button></td>
                                                <td><button id="C2407602" value="C2407602" class="btnShow1 " ></button></td>
                                                <td><button id="C2407702" value="C2407702" class="btnShow1 " ></button></td>
                                            </tr>
                                            <tr>
                                                <td><button id="C2405901" value="C2405901" class="btnShow1 " ></button></td>
                                                <td><button id="C2406001" value="C2406001" class="btnShow1 " ></button></td>
                                                <td><button id="C2406101" value="C2406101" class="btnShow1 " ></button></td>
                                                <td><button id="C2406201" value="C2406201" class="btnShow1 " ></button></td>
                                                <td><button id="C2406301" value="C2406301" class="btnShow1 " ></button></td>
                                                <td><button id="C2406401" value="C2406401" class="btnShow1 " ></button></td>
                                                <td class="btnShow1"></td>
                                                <td class="btnShow1"></td>
                                                <td><button id="C2406501" value="C2406501" class="btnShow1 " ></button></td>
                                                <td><button id="C2406601" value="C2406601" class="btnShow1 " ></button></td>
                                                <td><button id="C2406701" value="C2406701" class="btnShow1 " ></button></td>
@@ -1317,12 +1219,11 @@
                                                <td><button id="C2406901" value="C2406901" class="btnShow1 " ></button></td>
                                                <td><button id="C2407001" value="C2407001" class="btnShow1 " ></button></td>
                                                <td><button id="C2407101" value="C2407101" class="btnShow1 " ></button></td>
                                                <td><button id="C2407201" value="C2407201" class="btnShow1 " ></button></td>
                                                <td class="btnShow1"></td>
                                                <td><button id="C2407301" value="C2407301" class="btnShow1 " ></button></td>
                                                <td><button id="C2407401" value="C2407401" class="btnShow1 " ></button></td>
                                                <td><button id="C2407501" value="C2407501" class="btnShow1 " ></button></td>
                                                <td><button id="C2407601" value="C2407601" class="btnShow1 " ></button></td>
                                                <td><button id="C2407701" value="C2407701" class="btnShow1 " ></button></td>
                                            </tr>
                                        </table>
                                    </div>
HTML/views/WareHouseSetting/Locate.html
@@ -109,12 +109,12 @@
                                <i class="layui-icon layui-icon-search layuiadmin-button-btn"></i>搜索
                            </button>
                        </div>
                        <div class="layui-inline">
                        <!-- <div class="layui-inline">
                            <button style="margin-right: 10px;" class="layui-btn layui-btn-normal layui-btn-sm layuiadmin-btn-list editClass"
                                data-type="editList" id="approvalBtn">
                                <i class="layui-icon layui-icon-edit layuiadmin-button-btn"> </i>批量编辑
                            </button>
                        </div>
                        </div> -->
                    </div>
                </div>
                <div id="center"></div>
HTML/views/WareHouseSetting/Pallets.html
@@ -164,7 +164,7 @@
                                    default:
                                        return ""; 
                                }
                            }
                            }
                        }, {
                            field: 'CreateUserName',
                            title: '创建人',
@@ -251,7 +251,7 @@
                                        var param = {
                                            PalletNo:field.StockCode,
                                            LocatNo:field.LocatNo,
                                            DeviceCode:field.DeviceCode
                                            DeviceCode:field.Status
                                        };
                                        synData(IP + "/Sys/AddPallets", param, 'post', function(res) {
                                            console.log(res);
HTML/views/WareHouseSetting/PalletsPrintFrom.html
@@ -13,23 +13,28 @@
        <div class="layui-form" lay-filter="layuiadmin-app-form-list" id="layuiadmin-app-form-list" style="padding: 20px 30px 0 0;">
            <div class="layui-form-item">
                <label class="layui-form-label">桶号</label>
                <div class="layui-input-block">
                <div class="layui-input-block"  style="width: 70%;">
                    <input type="text" name="StockCode" placeholder="请输入桶号" lay-verify="required" autocomplete="off" class="layui-input">
                </div>
            </div>            
            <div class="layui-form-item">
                <label class="layui-form-label">储位地址</label>
                <div class="layui-input-block">
                <div class="layui-input-block"  style="width: 70%;">
                    <input type="text" name="LocatNo" placeholder="请输入储位地址" lay-verify="required" autocomplete="off" class="layui-input">
                </div>
            </div>
            <div class="layui-form-item">
                <label class="layui-form-label">桶规格(L)</label>
                <div class="layui-input-block">
                    <input type="text" name="DeviceCode" placeholder="请输入桶规格" lay-verify="required" autocomplete="off" class="layui-input">
                </div>
            </div>
                    <label class="layui-form-label">桶类型</label>
                    <div class="layui-input-block" style="width: 70%;">
                        <select name="Status" id="Status" lay-verify="">
                            <option value=""></option>
                                    <option value="0">净桶</option>
                                    <option value="3">脏桶</option>
                        </select>
                    </div>
            </div>
            <div class="layui-form-item layui-hide">
                <input type="button" lay-submit lay-filter="layuiadmin-app-form-submit" id="layuiadmin-app-form-submit" value="确认添加">
                <input type="button" lay-submit lay-filter="layuiadmin-app-form-edit" id="layuiadmin-app-form-edit" value="确认编辑">
            </div>
Wms/Model/InterFaceModel/HopperTransportModel.cs
@@ -22,6 +22,13 @@
        public decimal Weight { get; set; }
    }
    public class PointTask
    {
        public string ID { get; set; }
        public string BeginPoint { get; set; }
        public string EndPoint { get; set; }
    }
}
Wms/Model/InterFaceModel/HttpModel.cs
@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.Data;
using System.Text;
namespace Model.InterFaceModel
@@ -592,64 +593,6 @@
    }
    /// <summary>
    /// 取消任务
    /// </summary>
    public class AgvCancelTask
    {
        /// <summary>
        /// 请求编号,每个请求都要一个唯一编号, 同一个请求重复提交, 使用同一编号。
        /// 是否必填:是
        /// </summary>
        public string ReqCode { get; set; }
        /// <summary>
        /// 请求时间截
        /// 格式: “yyyy-MM-dd HH:mm:ss”。
        /// 是否必填:否
        /// </summary>
        public string ReqTime { get; set; }
        /// <summary>
        /// 客户端编号,如 PDA,HCWMS 等。
        /// 是否必填:否
        /// </summary>
        public string ClientCode { get; set; }
        /// <summary>
        /// 令牌号, 由调度系统颁发。 由RCS-2000 告知上层系统
        /// 是否必填:否
        /// </summary>
        public string TokenCode { get; set; }
        /// <summary>
        /// 取消类型
        /// 0 表示:取消后货架直接放地上
        /// 1 表示:AGV 仍然背着货架, 根据回库区域执行回库指令, 只有潜伏车和 CTU 车支持。
        /// 若不传值,默认的取消模式为 0
        /// 是否必填:否
        /// </summary>
        public string ForceCancel { get; set; }
        /// <summary>
        /// forcecancel=1 时有意义,回库区域编号,如果为空,采用货架配置的库区。
        /// 是否必填:否
        /// </summary>
        public string MatterArea { get; set; }
        /// <summary>
        /// 取消该 AGV 正在执行的任务单
        /// 是否必填:否
        /// </summary>
        public string AgvCode { get; set; }
        /// <summary>
        /// 任务单编号, 取消该任务单
        /// 是否必填:否
        /// </summary>
        public string TaskCode { get; set; }
    }
    /// <summary>
    /// 任务完成通知参数
    /// </summary>
    public class AgvTaskDto
@@ -683,6 +626,12 @@
        public ExtraModelView values { get; set; }
    }
    public class AgvCancelTask
    {
        public string robotTaskCode {  get; set; }
        public string cancelType {  get; set; }
    }
    /// <summary>
Wms/Model/ModelVm/DataVm/DataStockInfoVM.cs
@@ -193,4 +193,13 @@
        /// </summary>
        public int? UpdateUser { get; set; }
    }
    public class DelStockInfo
    {
        /// <summary>
        /// Desc:库存明细ID
        /// Default:
        /// Nullable:False
        /// </summary>
        public int StockId { get; set; }
    }
}
Wms/Utility/Tools/RcsHelper.cs
@@ -29,7 +29,7 @@
            switch (taskDetial.Crtype)
            {
                case "1":  //叫桶
                    tasktype = "F12";
                    tasktype = "F16";
                    break;
                case "2":  //叫车
                    tasktype = "F12";
@@ -43,13 +43,11 @@
                default:
                    break;
            }
            //跨楼层任务tasktype值赋值……
            if (taskDetial.Endport.Substring(0,3) == "C01")
            //取净桶跨楼层任务tasktype值赋值
            if (taskDetial.Endport.Substring(0,3) == "C01" && taskDetial.Startport.Substring(0,1) == "1")
            {
                tasktype = "F23";
            }
            List<targetRoute> pahtList = new List<targetRoute>();
            //起始位置
@@ -165,10 +163,10 @@
            // 正式运行程序放开
            var jsonData = JsonConvert.SerializeObject(carrierInfo);
            string response = HttpHelper.DoPost(url, jsonData, "下发给AGV绑定载具命令", "AGV", key);
            string response = HttpHelper.DoPost(url, jsonData, "下发给AGV解除绑定载具命令", "AGV", key);
            //解析返回数据 
            var agvModel = JsonConvert.DeserializeObject<OutCommanAgvDto>(response);
            if (agvModel.Code == "0")
            if (agvModel.Code == "SUCCESS")
            {
                result = true;//给下车下发任务成功
Wms/WMS.BLL/BllQualityServer/QualityInspectServer.cs
@@ -96,6 +96,11 @@
                throw new Exception("质检号不可为空,请核查!");
            }
            //验证批次号是否为空
            if (string.IsNullOrEmpty(model.SkuNo))
            {
                throw new Exception("物料编码不可为空,请核查!");
            }
            //验证批次号是否为空
            if (string.IsNullOrEmpty(model.LotNo))
            {
                throw new Exception("批次号不可为空,请核查!");
@@ -103,14 +108,17 @@
            model.Origin = "WMS"; //来源
            model.CreateTime = Db.GetDate(); //创建日期
            model.SkuNo = ""; //物料号
            model.SkuName = ""; //物料名称
            model.PassQty = 0; //合格数量
            model.FailQty = 0; //不合格数量
            model.Standard = ""; //规格
            //查找库存明细信息
            List<DataStockDetail> detail = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && m.LotNo == model.LotNo).ToList();
            List<DataStockDetail> detail = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && m.SkuNo == model.SkuNo && m.LotNo == model.LotNo).ToList();
            if (detail.Count == 0)
            {
                throw new Exception("未找到当前物料当前批次的库存");
            }
            foreach (var item in detail)
            {
                //判断合格状态是否合格
@@ -151,6 +159,34 @@
                throw new Exception(ex.Message);
            }
        }
        /// <summary>
        /// 获取库存批次号集合
        /// </summary>
        /// <returns></returns>
        /// <exception cref="Exception"></exception>
        public List<DataStockDetail> GetLotNoList(string skuNo)
        {
            try
            {
                string str = "select skuNo from DataStockDetail where isDel = '0'";
                if (!string.IsNullOrEmpty(skuNo))
                {
                    str += " and skuNo = @skuNo";
                }
                str += " group by skuNo";
                List<DataStockDetail> skulist = Db.Ado.SqlQuery<DataStockDetail>(str, new
                {
                    SkuNo = "%" + skuNo + "%", //物料号
                });
                return skulist;
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }
        #endregion
    }
Wms/WMS.BLL/BllTransServer/HopperTransportServer.cs
@@ -240,6 +240,7 @@
                {
                    throw new Exception("满桶请选择物料与批次");
                }
                //判断目标叫料储位状态
                var endLocateInfo = Db.Queryable<SysStorageLocat>().First(m => m.IsDel == "0" && m.LocatNo == endLocate && m.AreaNo == areaNo);
                if (endLocateInfo == null)
@@ -274,7 +275,12 @@
                {
                    if (house.WareHouseNo == "M01")
                    {
                        stockDetail = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && m.Status == "0" && m.PalletStatus == "0" && m.Standard == standard && !string.IsNullOrWhiteSpace(m.LocatNo)).OrderBy(m => m.LocatNo).ToList();
                        stockDetail = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && m.Status == "0" && m.PalletStatus == "0" && m.WareHouseNo == "M01" && m.Standard == standard && !string.IsNullOrWhiteSpace(m.LocatNo)).OrderBy(m => m.LocatNo).ToList();
                        if (stockDetail.Count() == 0)
                        {
                            stockDetail = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && m.Status == "0" && m.PalletStatus == "0" && m.Standard == standard && !string.IsNullOrWhiteSpace(m.LocatNo)).OrderBy(m => m.LocatNo).ToList();
                        }
                    }
                    else
                    {
@@ -285,7 +291,8 @@
                //满桶
                else if (plnStatus == "2") 
                {
                    stockDetail = stockDetail.Where(m => m.PalletStatus == "2" && m.SkuNo == skuNo && m.LotNo == lotNo).OrderBy(m => m.LocatNo).ToList();
                    stockDetail = stockDetail.Where(m => m.PalletStatus == "2" && m.SkuNo == skuNo && m.LotNo == lotNo && m.InspectStatus == "1").OrderBy(m => m.LocatNo).ToList();
                }
                else
                {
@@ -305,25 +312,45 @@
                //目标仓库所有储位
                var locatList = Db.Queryable<SysStorageLocat>().Where(w => w.IsDel == "0" && w.Flag=="0" && w.WareHouseNo == house.WareHouseNo).OrderBy(w=>w.Column).ToList();
                //目标仓库所有最外侧的储位
                var locatListWai = locatList.Where(w => string.IsNullOrEmpty(w.AisleOne)).Select(s => s.LocatNo);
                //先找不需要移库的桶
                var palletModel = stockDetail.Where(w => locatListWai.Contains(w.LocatNo) && w.Status == "0").OrderByDescending(w => w.UpdateTime).FirstOrDefault();
                if (palletModel == null)
                var locatListWai = locatList.Where(w => string.IsNullOrEmpty(w.AisleOne) && w.Flag == "0").Select(s => s.LocatNo);
                var locatListNei = locatList.Where(w => !string.IsNullOrEmpty(w.AisleOne) && w.Flag == "0").Select(s => s.LocatNo);
                var palletModel = new DataStockDetail();
                if (plnStatus == "0") //净桶获取库位
                {
                    //找需要移库的桶
                    palletModel= stockDetail.Where(w => !locatListWai.Contains(w.LocatNo)).OrderByDescending(w => w.UpdateTime).FirstOrDefault();
                    //先找不需要移库的桶
                    palletModel = stockDetail.Where(w => locatListWai.Contains(w.LocatNo) && w.Status == "0" && w.Standard == standard).OrderByDescending(w => w.UpdateTime).FirstOrDefault();
                    if (palletModel == null)
                    {
                        throw new Exception("未找到对应桶信息");
                        //找需要移库的桶
                        palletModel = stockDetail.Where(w => locatListNei.Contains(w.LocatNo) && w.Standard == standard).OrderByDescending(w => w.UpdateTime).FirstOrDefault();
                        if (palletModel == null)
                        {
                            throw new Exception("未找到对应桶信息");
                        }
                        resultYi = YikuTask(palletModel.PalletNo, taskNo, url, bindUrl);
                    }
                    resultYi = YikuTask(palletModel.PalletNo, taskNo, url,bindUrl);
                }
                else   //满桶获取库位
                {
                    //先找不需要移库的桶
                    palletModel = stockDetail.Where(w => locatListWai.Contains(w.LocatNo) && w.Status == "0").OrderByDescending(w => w.UpdateTime).FirstOrDefault();
                    if (palletModel == null)
                    {
                        //找需要移库的桶
                        palletModel = stockDetail.Where(w => locatListNei.Contains(w.LocatNo)).OrderByDescending(w => w.UpdateTime).FirstOrDefault();
                        if (palletModel == null)
                        {
                            throw new Exception("未找到对应桶信息");
                        }
                        resultYi = YikuTask(palletModel.PalletNo, taskNo, url, bindUrl);
                    }
                }
                palletModel.Status = "2";
                Db.Updateable(palletModel).ExecuteCommand();
                #endregion
                //起始储位地址信息
                var startLoction = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.Status == "1" && w.LocatNo == palletModel.LocatNo);
                var startLoction = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.LocatNo == palletModel.LocatNo);
                if (startLoction == null)
                {
                    throw new Exception($"起始目标储位信息不存在,桶号:{palletModel.LocatNo}");
@@ -332,6 +359,12 @@
                if (resultYi)
                {
                    taskNo = taskNo + "-1";
                }
                //检验当前托盘是否有任务未完成
                var checkTask = Db.Queryable<LogTask>().First(w => w.IsDel == "0" && (w.Status == "1" || w.Status == "0") && w.PalletNo == palletModel.PalletNo);
                if (checkTask != null)
                {
                    throw new Exception("当前托盘有正在执行的任务!");
                }
                //添加任务
                var logTaskEntry = new LogTask
@@ -430,8 +463,8 @@
        {
            try
            {
                string type = "1";//叫料模板
                #region 判断
                if (string.IsNullOrWhiteSpace(areaNo) || string.IsNullOrWhiteSpace(StartLocate) || string.IsNullOrWhiteSpace(plnStatus))
                {
                    throw new Exception("区域/起始位/桶类型不能为空");
@@ -480,6 +513,10 @@
                //目标楼层
                var layer = startLoction.Layer;
                var houseStr = layer == 3 ? "3楼中间站" : layer == 4 ? "4楼中间站" : "";
                if (layer == 3 && plnStatus == "2")
                {
                    type = "2";
                }
                //通过仓库名称查询仓库信息
                var house = Db.Queryable<SysWareHouse>().First(m => m.IsDel == "0" && m.WareHouseName == houseStr);
                if (house == null)
@@ -516,7 +553,7 @@
                        Status = "2",
                        InspectMark = "0",
                        BitPalletMark = "0",
                        InspectStatus = "1",
                        InspectStatus = "0",
                    };
                    Db.Updateable(stockDetailNew).ExecuteCommand();
                }
@@ -538,7 +575,12 @@
                {
                    throw new Exception("没有找到合适的目标储位");
                }
                //检验当前托盘是否有任务未完成
                var checkTask = Db.Queryable<LogTask>().First(w => w.IsDel == "0" && (w.Status == "1" || w.Status == "0") && w.PalletNo == plnNo);
                if (checkTask != null)
                {
                    throw new Exception("当前托盘有正在执行的任务!");
                }
                var taskNo = new Common().GetMaxNo("TK");
                //添加任务
                var logTaskEntry = new LogTask
@@ -569,7 +611,7 @@
                    Startport = StartLocate,//起始位置
                    Endport = endLocatInfo.LocatNo,//目标位置
                    Pallno = plnNo,//桶号
                    Crtype = "1",//叫桶
                    Crtype = type,//叫车模板
                };
                //调用AGV接口下发任务
                string agvMsg = string.Empty;
@@ -678,19 +720,37 @@
                {
                    throw new Exception($"起始储位信息不存在");
                }
                startLocatInfo.Status = "0";//空储位
                //修改起始储位状态
                Db.Updateable(startLocatInfo).ExecuteCommand();
                //startLocatInfo.Status = "0";//空储位
                ////修改起始储位状态
                //Db.Updateable(startLocatInfo).ExecuteCommand();
                //目标储位信息
                //任务表中目标储位信息
                var endLocatInfo = Db.Queryable<SysStorageLocat>().First(w => w.LocatNo == taskInfo.EndLocat && w.IsDel == "0");
                if (endLocatInfo == null)
                {
                    throw new Exception($"目标储位信息不存在");
                }
                //AGV小车返回实际存放目标储位
                var trueLocatInfo = Db.Queryable<SysStorageLocat>().First(w => w.LocatNo == locateNo && w.IsDel == "0");
                if (trueLocatInfo == null)
                {
                    throw new Exception($"小车放货储位信息不存在");
                }
                if (endLocatInfo.LocatNo != trueLocatInfo.LocatNo)
                {
                    //不一致时以小车放货储位为准
                    endLocatInfo = trueLocatInfo;
                    //var tasklocat = Db.Queryable<LogTask>().First(w => w.EndLocat == trueLocatInfo.LocatNo && (w.Status == "0" || w.Status == "1") && w.IsDel == "0");
                    //if (tasklocat == null)
                    //{
                    //    trueLocatInfo.Status = "0";
                    //    Db.Updateable(trueLocatInfo).ExecuteCommand();
                    //}
                }
                //修改目标储位状态
                endLocatInfo.Status = "1";//有物品
                endLocatInfo.UpdateTime = DateTime.Now;//更新时间
                //修改目标储位状态
                Db.Updateable(endLocatInfo).ExecuteCommand();
                //目标储位所属区域
@@ -817,6 +877,7 @@
                var startLoction = new SysStorageLocat();//起始储位信息
                var endLoction = new SysStorageLocat();//目标储位信息
                var palletModel = new DataStockDetail();//分配桶信息
                string locatno = "";
                string type = "";//叫料类型
                //开启事务
@@ -847,22 +908,26 @@
                            {
                                //有脏桶的话,将更改此桶状态(代表此桶正在清洗中)
                                var qxStock = Db.Queryable<DataStockDetail>().Where(w => w.LocatNo == endLoction.LocatNo).First();
                                if (qxStock == null)
                                {
                                    throw new Exception("叫料位置状态错误");
                                }
                                qxStock.Status = "2"; 
                                qxStock.UpdateTime = DateTime.Now;//清洗时间
                                //qxStock.UpdateTime = DateTime.Now;//清洗时间
                                Db.Updateable(qxStock).ExecuteCommand();
                                //更改设备储位状态为空储位
                                endLoction.Status = "0";
                                Db.Updateable(endLoction).ExecuteCommand();
                            }
                            //优先查找脏桶缓存车间
                            palletModel = stockDetail.Where(w => w.AreaNo == "C54").FirstOrDefault();
                            palletModel = stockDetail.Where(w => w.AreaNo == "C54").OrderByDescending(w => w.UpdateTime).FirstOrDefault();
                            if (palletModel == null)//脏桶缓存车间没有脏桶,再从三楼中间站脏桶区查找
                            {
                                palletModel = stockDetail.Where(w => w.WareHouseNo == "M16" && w.AreaNo == "C26").FirstOrDefault();
                                palletModel = stockDetail.Where(w => w.WareHouseNo == "M16" && w.AreaNo == "C26").OrderByDescending(w => w.UpdateTime).FirstOrDefault();
                            }
                            if (palletModel == null)//三楼中间站脏桶区没有脏桶,再从四楼中间站脏桶区查找
                            {
                                palletModel = stockDetail.Where(w => w.WareHouseNo == "M01" && w.AreaNo == "C03").FirstOrDefault();
                                palletModel = stockDetail.Where(w => w.WareHouseNo == "M01" && w.AreaNo == "C03").OrderByDescending(w => w.UpdateTime).FirstOrDefault();
                            }
                            if (palletModel == null)
                            {
@@ -875,7 +940,7 @@
                                throw new Exception($"起始目标储位信息不存在,桶号:{palletModel.LocatNo}");
                            }
                            //起始桶信息
                            var startDataDetil = Db.Queryable<DataStockDetail>().First(w => w.IsDel == "0" && w.Status == "0" && w.PalletStatus == "3");
                            var startDataDetil = Db.Queryable<DataStockDetail>().First(w => w.IsDel == "0" && w.Status == "0" && w.PalletStatus == "3" && w.PalletNo == palletModel.PalletNo);
                            if (startDataDetil == null)
                            {
                                throw new Exception($"清洗机所叫的桶状态错误,桶号:{palletModel.LocatNo}");
@@ -898,7 +963,7 @@
                            startLoction = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.WareHouseNo == houseNo && w.AreaNo == deviceInfo.AreaNo);
                            //获取清洗机上第一次叫的脏桶
                            string locate = deviceID == "1002"?"1001":"1003";
                            palletModel = Db.Queryable<DataStockDetail>().Where(w => w.LocatNo == locate && (w.Status == "2" || w.Status == "0")).OrderBy(o => o.CreateTime).First();
                            palletModel = Db.Queryable<DataStockDetail>().Where(w => w.LocatNo == locate).OrderBy(o => o.UpdateTime).First();
                            if (palletModel == null)
                            {
                                throw new Exception("未找到库存中正在清洗的脏桶");
@@ -918,20 +983,55 @@
                            {
                                throw new Exception("没有空余的净桶储位");
                            }
                            //优先分配四楼中间站净桶区
                            endLoction = jtLocate.Where(w => w.WareHouseNo == "M01" && w.AreaNo == "C01")
                                                .OrderBy(w => w.Row).OrderByDescending(w => w.Column).FirstOrDefault();
                            if (endLoction == null)//四楼中间站净桶区没有空储位,再从三楼中间站净桶区查找
                            //首先查找是否已有同规格同巷道的空位
                            var pallnoStorage = Db.Queryable<DataStockDetail>().Where(w => w.Standard == palletModel.Standard && w.PalletStatus == "0" && w.Status == "0").OrderBy(o => o.UpdateTime).ToList();
                            if (pallnoStorage.Count()>0)
                            {
                            endLoction = jtLocate.Where(w => w.WareHouseNo == "M16" && w.AreaNo == "C24")
                                                .OrderBy(w => w.Row).OrderByDescending(w => w.Column).FirstOrDefault();
                                foreach (var item in pallnoStorage)
                                {
                                    //获取巷道列,查找列中空储位
                                    var pallnoRow = Db.Queryable<SysStorageLocat>().Where(w => w.LocatNo == item.LocatNo).First();
                                    endLoction = jtLocate.Where(w => w.AreaNo == pallnoRow.AreaNo && w.Row == pallnoRow.Row && w.Status == "0" && w.Flag == "0" && w.Column<pallnoRow.Column).FirstOrDefault();
                                    if (endLoction == null)
                                    {
                                        continue;
                                    }
                                    else
                                    {
                                        locatno = endLoction.LocatNo;
                                        break;
                                    }
                                }
                            }
                            if (endLoction == null)//三楼中间站净桶区没有空储位,再从三楼清洗间缓存区查找             PS:小车现在还不支持清洗机直接送往4楼净桶区
                            if (palletModel.Standard != "400L" && string.IsNullOrEmpty(locatno))
                            {
                                //优先分配四楼中间站净桶区
                                endLoction = jtLocate.Where(w => w.WareHouseNo == "M01" && w.AreaNo == "C01")
                                                    .OrderBy(w => w.Row).OrderByDescending(w => w.Column).FirstOrDefault();
                                if (endLoction != null)
                                {
                                    locatno = endLoction.LocatNo;
                                }
                            }
                            if (string.IsNullOrEmpty(locatno))
                            {
                                endLoction = jtLocate.Where(w => w.WareHouseNo == "M16" && w.AreaNo == "C24")
                                                    .OrderBy(w => w.Row).OrderByDescending(w => w.Column).FirstOrDefault();
                                if (endLoction != null)
                                {
                                    locatno = endLoction.LocatNo;
                                }
                            }
                            if (string.IsNullOrEmpty(locatno))//三楼中间站净桶区没有空储位,再从三楼清洗间缓存区查找
                            {
                                endLoction = jtLocate.Where(w => w.WareHouseNo == "M44" && w.AreaNo == "C55")
                                                .OrderBy(w => w.Row).OrderByDescending(w => w.Column).FirstOrDefault();
                                if (endLoction != null)
                                {
                                    locatno = endLoction.LocatNo;
                                }
                            }
                            if (endLoction == null)
                            if (string.IsNullOrEmpty(locatno))
                            {
                                throw new Exception("未查询到合适储位");
                            }
@@ -952,7 +1052,12 @@
                        throw new Exception("叫料点位异常");
     
                }
                //检验当前托盘是否有任务未完成
                var checkTask = Db.Queryable<LogTask>().First(w => w.IsDel == "0" && (w.Status == "1" || w.Status == "0") && w.PalletNo == palletModel.PalletNo);
                if (checkTask != null)
                {
                    throw new Exception("当前托盘有正在执行的任务!");
                }
                var taskNo = new Common().GetMaxNo("TK");
                //添加任务
                var logTaskEntry = new LogTask
@@ -1009,6 +1114,25 @@
                        endLoction.Status = "2";//入库中
                        Db.Updateable(endLoction).ExecuteCommand();
                        //净桶申请成功后判断当前清洗机上是否还有桶,没有桶则清空清洗机入口工位状态
                        if (deviceStation == "output")
                        {
                            var rlocat = palletModel.LocatNo == "1002" ? "1001" : "1003";
                            //判断有没有正在执行的到清洗机入口的任务
                            var tasklist = Db.Queryable<LogTask>().First(w => w.EndLocat == rlocat && (w.Status == "0" && w.Status == "1"));
                            if (tasklist == null)
                            {
                                var stocklist = Db.Queryable<DataStockDetail>().First(w => w.LocatNo == rlocat);
                                if (stocklist == null)
                                {
                                    var rdecive = Db.Queryable<SysStorageLocat>().First(w => w.LocatNo == rlocat);
                                    rdecive.Status = "0";
                                    Db.Updateable(rdecive).ExecuteCommand();
                                }
                            }
                        }
                    }
                    else//失败
                    {
@@ -1075,6 +1199,18 @@
                        {
                            throw new Exception("要移库的桶有正在执行的任务,请稍后再试");
                        }
                        //判断要移库的桶外侧是否有桶
                        var locatInfoYi = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.LocatNo == palletInfoYi.LocatNo);
                        if (locatInfo == null)
                        {
                            throw new Exception("未查询到要移库的桶所在的储位信息");
                        }
                        var palletInfoYi2 = Db.Queryable<DataStockDetail>().First(w => w.IsDel == "0" && w.LocatNo == locatInfoYi.AisleOne);
                        if (palletInfoYi2 != null)
                        {
                            throw new Exception("所要叫料的桶无法进行移库,请联系管理员进行手动移桶");
                        }
                        #region#给要移库的桶先移到中转储位
                        //找到中转储位所在区域
                        var transfeArea = Db.Queryable<SysStorageArea>().First(w => w.IsDel == "0" && w.WareHouseNo == WareHouseNo && w.AreaName.Contains("转运区"));
@@ -1112,6 +1248,7 @@
                            Msg = $"将桶{palletInfoYi.PalletNo}从{palletInfoYi.LocatNo}移到{transferLocat.LocatNo}", //关键信息
                            LotNo = ""//批次号
                        };
                        Db.Insertable(logTaskEntry).ExecuteCommand();
                        //组织下发小车任务信息
                        var task = new TaskDetial
@@ -1467,10 +1604,16 @@
                            {
                                endLocatInfo = Db.Queryable<SysStorageLocat>().Where(w => w.IsDel == "0" && w.Status == "0" && w.Flag == "0" && w.Row == rowItem.Row && w.AreaNo == rowItem.AreaNo  && (w.WareHouseNo == "M01"||w.WareHouseNo == "M16"))
                                               .OrderByDescending(o => o.Column).First();
                                if (endLocatInfo.LocatNo != null)
                                if (endLocatInfo != null)
                                {
                                    break;
                                }
                            }
                            if (endLocatInfo == null)
                            {
                                endLocatInfo = Db.Queryable<SysStorageLocat>().Where(w => w.IsDel == "0" && w.Status == "0" && w.Flag == "0"
                                            && (w.AreaNo == "C02" || w.AreaNo == "C25"))
                                           .OrderBy(o => o.Layer).OrderByDescending(o => o.Column).OrderBy(o => o.Row).First();
                            }
                            //没有找到相同物料同组的空储位
                            if (endLocatInfo.LocatNo == null)
@@ -1483,11 +1626,12 @@
                        }
                        else {//其他区域 
                            areaNo = houseNo == "M01" ? "C02" : "C25";
                            //查到到满桶区域编号
                            areaNo = Db.Queryable<SysStorageArea>().Where(w => w.IsDel == "0" && w.WareHouseNo == houseNo && w.Type == "1").Select(s => s.AreaNo).First();
                            //分配储位
                            //先查到同物料的组
                            string sql = $@"select Row,AreaNo from SysStorageLocat where WareHouseNo='{houseNo}' and AreaNo='{areaNo}' and Status = '0' and LocatNo in(
                            string sql = $@"select Row,AreaNo from SysStorageLocat where WareHouseNo='{houseNo}' and AreaNo='{areaNo}' and Status = '1' and LocatNo in(
                                                    select LocatNo from DataStockDetail where SkuNo='{skuNo}' and LotNo = '{lotNo}' and Standard='{standard}' and WareHouseNo='{houseNo}' and AreaNo='{areaNo}' 
                                                ) group by Row,AreaNo";
@@ -1498,13 +1642,19 @@
                                               && w.WareHouseNo == houseNo && w.AreaNo == areaNo && w.Row == rowItem.Row && w.AreaNo == rowItem.AreaNo && (w.WareHouseNo == "M01" || w.WareHouseNo == "M16"))
                                               .OrderByDescending(o => o.Column).First();
                                if (endLocatInfo.LocatNo != null)
                                if (endLocatInfo != null)
                                {
                                    break;
                                }
                            }
                            if (endLocatInfo == null)
                            {
                                endLocatInfo = Db.Queryable<SysStorageLocat>().Where(w => w.IsDel == "0" && w.Status == "0" && w.Flag == "0"
                                              && w.WareHouseNo == houseNo && w.AreaNo == areaNo)
                                              .OrderByDescending(o => o.Column).OrderBy(o => o.Row).First();
                            }
                            //没有找到相同物料同组的空储位
                            if (endLocatInfo.LocatNo == null)
                            if (endLocatInfo.LocatNo == null )
                            {
                            
                                endLocatInfo = Db.Queryable<SysStorageLocat>().Where(w => w.IsDel == "0" && w.Status == "0" && w.Flag == "0"
@@ -1544,5 +1694,138 @@
                throw new Exception(ex.Message);
            }
        }
        /// <summary>
        /// 点对点任务下发
        /// </summary>
        /// <param name="beginLocate">起始位</param>
        /// <param name="endLocate">终点位</param>
        /// <exception cref="Exception"></exception>
        public void PointToPointRequest(string id,string beginPoint, string endPoint, string url, string bindUrl)
        {
            try
            {
                //权限校验
                var user = Db.Queryable<SysUserInfor>().First(m => m.IsDel == "0" && m.UserName == id);
                if (user == null)
                {
                    throw new Exception("没有查询到用户信息");
                }
                if (user.RoleNo != "01")
                {
                    throw new Exception("当前用户没有权限使用此功能");
                }
                //起始储位信息
                var startLoction = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.LocatNo == beginPoint);
                if (startLoction == null)
                {
                    throw new Exception("未找到输入的起始储位");
                }
                if (startLoction.Status != "1")
                {
                      throw new Exception("起始储位:"+beginPoint+"的储位状态错误,储位状态应为:‘有物品’");
                }
                //目标储位信息
                var endLoction = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.LocatNo == endPoint);
                if (endLoction == null)
                {
                    throw new Exception("未找到输入的目标储位");
                }
                if (endLoction.Status != "0")
                {
                    throw new Exception("目标储位:" + endPoint  + "的储位状态错误,储位状态应为:'空储位'");
                }
                //托盘信息
                var palletModel = Db.Queryable<DataStockDetail>().First(w => w.IsDel == "0" && w.LocatNo == beginPoint);
                if (palletModel == null)
                {
                    throw new Exception("未找到储位对应托盘信息!");
                }
                //检验当前托盘是否有任务未完成
                var checkTask = Db.Queryable<LogTask>().First(w => w.IsDel == "0" && (w.Status == "1" || w.Status == "0") && w.PalletNo == palletModel.PalletNo);
                if (checkTask != null)
                {
                    throw new Exception("当前托盘有正在执行的任务!");
                }
                Db.BeginTran();
                var taskNo = new Common().GetMaxNo("TK");
                //添加任务
                var logTaskEntry = new LogTask
                {
                    TaskNo = taskNo,
                    Sender = "WMS",
                    Receiver = "RCS",
                    IsSuccess = 0, //是否下发成功 0失败 1成功
                    StartLocat = beginPoint,//起始位置
                    EndLocat = endPoint,//目标位置
                    PalletNo = palletModel.PalletNo,//托盘码
                    IsSend = 1,//是否可再次下发
                    IsCancel = 1,//是否可取消
                    IsFinish = 1,//是否可完成
                    Type = "1",//任务类型 0 入库任务 1 出库任务  2 移库任务
                    Status = "0",//任务状态0:等待执行1正在执行2执行完成
                    OrderType = "3",//0 入库单 1 出库单  2 盘点单  3 移库单
                    CreateTime = DateTime.Now
                };
                Db.Insertable(logTaskEntry).ExecuteCommand();
                //组织下发小车任务信息
                var task = new TaskDetial
                {
                    Taskno = taskNo,//任务号
                    Startport = beginPoint,//起始位置
                    Endport = endPoint,//目标位置
                    Pallno = palletModel.PalletNo,//桶号
                    Crtype = "1",//叫桶
                };
                string agvMsg = string.Empty;
                //给下车下发任务
                logTaskEntry.SendDate = DateTime.Now;//发送时间
                //下发载具与货位绑定
                var bind = RcsHelper.BindPalletAndSite(palletModel.PalletNo, beginPoint, bindUrl, out string agvBindMsg);
                if (bind)
                {
                    var agvResult = RcsHelper.CreateTaskForAgv(task, url, out agvMsg);
                    if (agvResult)//成功
                    {
                        //请求成功修改任务表相应字段状态
                        logTaskEntry.IsSuccess = 1;
                        logTaskEntry.IsSend = 0;
                        //logTaskEntry.IsCancel = 0;
                        logTaskEntry.BackDate = DateTime.Now;
                        logTaskEntry.Status = "1";//正在执行
                        Db.Updateable(logTaskEntry).ExecuteCommand();
                        startLoction.Status = "3";//出库中
                        Db.Updateable(startLoction).ExecuteCommand();
                        endLoction.Status = "2";//入库中
                        Db.Updateable(endLoction).ExecuteCommand();
                    }
                    else//失败
                    {
                        throw new Exception("桶号:" + task.Pallno + ",调度小车失败");
                    }
                }
                else
                {
                    throw new Exception("桶号:" + task.Pallno + ",绑定货位失败");
                }
                //提交事务
                Db.CommitTran();
            }
            catch (Exception e)
            {
                //回滚事务
                Db.RollbackTran();
                throw new Exception(e.Message);
            }
        }
    }
}
Wms/WMS.BLL/BllTransServer/RcsServer.cs
@@ -1052,7 +1052,7 @@
        /// <param name="taskNo"></param>
        /// <param name="userId"></param>
        /// <exception cref="Exception"></exception>
        public void CancelTask(string taskNo, int userId)
        public void CancelTask(string taskNo, string url, int userId)
        {
            try
            {
@@ -1063,6 +1063,20 @@
                if (task == null)
                {
                    throw new Exception("未查询到任务信息");
                }
                //校验起点是否已经生成任务
                var taskHave = Db.Queryable<LogTask>().First(m => m.EndLocat == task.StartLocat && m.IsDel == "0" && (m.Status == "0"|| m.Status == "1"));
                if (taskHave == null)
                {
                    var locateHave = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == task.StartLocat);
                    if (locateHave.Status != "3")
                    {
                        throw new Exception("起始储位已有其他料斗存在,无法取消当前任务!");
                    }
                }
                else
                {
                    throw new Exception("起始储位已有任务生成,无法取消当前任务!");
                }
                //if (task.Status != "0")
                //{
@@ -1103,10 +1117,19 @@
                }
                stockDetail.Status = "0";//待分配
                Db.Updateable(stockDetail).ExecuteCommand();
                //添加操作日志记录
                var k = new OperationCrServer().AddLogOperationCr("库内作业", "库内日志", taskNo, "取消", $"点击取消按钮、取消了任务号为:{taskNo}的任务", userId);
                Db.CommitTran();
                string agvMsg = "";
                bool t = CancleTaskForAgv(taskNo, url, out agvMsg);
                if (t)
                {
                    //添加操作日志记录
                    var k = new OperationCrServer().AddLogOperationCr("库内作业", "库内日志", taskNo, "取消", $"点击取消按钮、取消了任务号为:{taskNo}的任务", userId);
                    Db.CommitTran();
                }
                else
                {
                    throw new Exception("下发取消小车任务失败");
                }
            }
            catch (Exception e)
            {
@@ -1327,6 +1350,43 @@
        }
        /// <summary>
        /// 下发取消任务给AGV
        /// </summary>
        /// <param name="req"></param>
        /// <returns></returns>
        public bool CancleTaskForAgv(string taskno, string url, out string agvMsg, string priority = null)
        {
            bool result = false;
            #region 呼叫小车代码
            AgvCancelTask cancelTask = new AgvCancelTask();
            cancelTask.robotTaskCode = taskno;
            cancelTask.cancelType = "DROP";
            // 正式运行程序放开
            //AGV任务下发时增加hearder:X-LR-REQUEST-ID,值为随机数
            long ran = DateTime.Now.Ticks;
            Dictionary<string, string> key = new Dictionary<string, string>();
            key.Add("X-LR-REQUEST-ID", ran.ToString());
            var jsonData = JsonConvert.SerializeObject(cancelTask);
            string response = HttpHelper.DoPost(url, jsonData, "下发给AGV转运命令", "AGV", key);
            //解析返回数据
            var agvModel = JsonConvert.DeserializeObject<OutCommanAgvDto>(response);
            if (agvModel.Code == "SUCCESS")
            {
                result = true;//给下车下发任务成功
                agvMsg = "";
            }
            else
            {
                var logStr = $@".\log\AGV\AGV取消任务" + DateTime.Now.ToString("yyyyMMdd") + ".txt";
                LogFile.SaveLogToFile($"AGV取消任务异常:( {agvModel.Message} ),", logStr);
                agvMsg = agvModel.Message;
            }
            return result;
            #endregion
        }
        /// <summary>
        /// 分配桶后判断该桶外侧储位是否需要移库
        /// </summary>
        /// <param name="palletNo"></param>
@@ -1484,5 +1544,60 @@
                throw new Exception(e.Message);
            }
        }
        public bool DelStockWms(int stockId,string url,int userId,out string errMsg)
        {
            try
            {
                errMsg = "";
                //获取当前库存信息
                var stock = Db.Queryable<DataStockDetail>().First(w => w.IsDel == "0" && w.Id == stockId);
                if (stock == null)
                {
                    throw new Exception("未在库存中找到当前料桶");
                }
                //获取当前料斗任务信息
                var taskInfo = Db.Queryable<LogTask>().First(w => w.IsDel == "0" && w.PalletNo == stock.PalletNo && (w.Status == "0" || w.Status == "1"));
                if (taskInfo != null)
                {
                    throw new Exception("当前料桶有等待执行或正在执行的任务");
                }
                //获取当前料斗储位状态
                var locatInfo = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.LocatNo == stock.LocatNo && w.Status == "1");
                if (locatInfo == null)
                {
                    throw new Exception("当前料桶储位状态错误");
                }
                var pallnoInfo = Db.Queryable<SysPallets>().First(w => w.IsDel == "0" && w.PalletNo == stock.PalletNo);
                if (pallnoInfo == null)
                {
                    throw new Exception("未找到当前料桶条码");
                }
                Db.BeginTran();
                //下发给AGV解绑信息
                bool t = RcsHelper.UnBindPalletAndSite(stock.PalletNo, stock.LocatNo, url,out errMsg);
                if (t)
                {
                    //删除库存
                    Db.Deleteable(stock).ExecuteCommand();
                    Db.Deleteable(pallnoInfo).ExecuteCommand();
                    locatInfo.Status = "0";
                    Db.Updateable(locatInfo).ExecuteCommand();
                    //添加操作日志记录
                    var k = new OperationCrServer().AddLogOperationCr("统计报表", "桶明细", "", "删除", $"点击删除按钮、删除了桶号:{stock.PalletNo}", userId);
                }
                Db.CommitTran();
                return t;
            }
            catch (Exception e)
            {
                Db.RollbackTran();
                throw new Exception(e.Message);
            }
        }
    }
}
Wms/WMS.BLL/DataServer/StockDetailServer.cs
@@ -38,7 +38,7 @@
        /// <param name="bitBoxMark">零箱标记</param>
        /// <param name="inspectStatus">质量状态</param>
        /// <returns></returns>
        public List<StockDetailDto> GetBindList(string wareHouseName, string areaName, string locatNo, string palletNo, string lotNo)
        public List<StockDetailDto> GetBindList(string wareHouseName, string areaName, string locatNo, string palletNo, string lotNo,string palletStatus)
        {
            string str = $@"select 
                                detail.*,
@@ -76,9 +76,24 @@
            {
                str += $" and detail.LotNo like  '%{lotNo}%'";
            }
            if (!string.IsNullOrEmpty(palletStatus))
            {
                str += $" and detail.PalletStatus like  '%{palletStatus}%'";
            }
            //排序
            str += " order by PalletNo";
            List<StockDetailDto> boxInforList = Db.Ado.SqlQuery<StockDetailDto>(str).ToList();
            foreach (var item in boxInforList)
            {
                if (item.LocatNo == "1004" || item.LocatNo == "1002")
                {
                    item.PalletStatus = "0";
                }
                if (item.LocatNo == "1001" || item.LocatNo == "1003")
                {
                    item.PalletStatus = "3";
                }
            }
            return boxInforList;
        }
Wms/WMS.BLL/SysServer/PalletsServer.cs
@@ -123,7 +123,7 @@
        /// <param name="locatNo"></param>
        /// <param name="userId"></param>
        /// <exception cref="Exception"></exception>
        public void AddPallets(string palletNo,string locatNo, string deviceCode, string url, int userId)
        public void AddPallets(string palletNo,string locatNo, string status, string url, int userId)
        {
            var db = DataContext.Db;
            try
@@ -146,6 +146,18 @@
                {
                    throw new Exception("储位地址不存在");
                }
                if (locatModel.Flag == "1")
                {
                    throw new Exception("该储位已屏蔽");
                }
                var nlocat = db.Queryable<SysStorageLocat>().First(w => w.AisleOne == locatModel.LocatNo && w.IsDel == "0");
                if (nlocat != null)
                {
                    if (nlocat.Status == "0")
                    {
                        throw new Exception("请从内侧库位开始绑定");
                    }
                }
                if (locatModel.Status != "0")
                {
                    throw new Exception("该储位地址非空闲状态");
@@ -155,14 +167,28 @@
                {
                    throw new Exception("储位地址所属区域不存在");
                }
                if (!areaModel.AreaName.Contains("净桶"))
                switch (status)
                {
                    throw new Exception("新添加的桶只能绑定净桶区");
                    case "0":
                        if (!areaModel.AreaName.Contains("净桶"))
                        {
                            throw new Exception("请选择净桶区域进行绑定");
                        }
                        break;
                    case "3":
                        if (!areaModel.AreaName.Contains("脏桶"))
                        {
                            throw new Exception("请选择脏桶区域进行绑定");
                        }
                        break;
                    default:
                        throw new Exception("请选择桶类型!");
                        break;
                }
                if (!string.IsNullOrEmpty(deviceCode))
                string deviceCode = "";
                if (!string.IsNullOrEmpty(palletNo))
                {
                    switch (deviceCode)
                    switch (palletNo.Substring(2,3))
                    {
                        case "400":
                            deviceCode = "400L";
@@ -170,11 +196,11 @@
                        case "800":
                            deviceCode = "800L";
                            break;
                        case "1000":
                        case "100":
                            deviceCode = "1000L";
                            break;
                        default:
                            throw new Exception("不能录入400,800,1000以外的值");
                            throw new Exception("桶号录入错误,请核实!");
                    }
                }
@@ -189,6 +215,7 @@
                palletModel.CreateUser = userId;
                //添加桶
                db.Insertable(palletModel).ExecuteCommand();
                var comTime = DateTime.Now;
                var model = new DataStockDetail()
@@ -221,7 +248,7 @@
                    SkuName = "",
                    LotNo = "",
                    PalletStatus = "0",//净桶
                    PalletStatus = status,
                    Standard = deviceCode,  //规格
@@ -240,17 +267,17 @@
                //下发AGV绑定载具接口
                //调用AGV接口下发任务
                //string agvMsg = string.Empty;
                ////给下车下发任务
                //var agvResult = RcsHelper.BindPalletAndSite(palletNo, locatNo,url, out agvMsg);
                //if (agvResult)//成功
                //{
                //     //增加日志
                //}
                //else//失败
                //{
                //    throw new Exception("小车载具和库位关系绑定失败,原因:"+agvMsg);
                //}
                string agvMsg = string.Empty;
                //给下车下发任务
                var agvResult = RcsHelper.BindPalletAndSite(palletNo, locatNo, url, out agvMsg);
                if (agvResult)//成功
                {
                    //增加日志
                }
                else//失败
                {
                    throw new Exception("小车载具和库位关系绑定失败,原因:" + agvMsg);
                }
                //提交事务
                db.CommitTran();
Wms/WMS.IBLL/IBllQualityServer/IQualityInspectServer.cs
@@ -31,6 +31,12 @@
        /// </summary>
        /// <returns></returns>
        public List<DataStockDetail> GetLotNoList();
        /// <summary>
        /// 获取库存批次号集合
        /// </summary>
        /// <returns></returns>
        public List<DataStockDetail> GetLotNoList(string skuNo);
        #endregion
    }
}
Wms/WMS.IBLL/IBllTransServer/IHopperTransportServer.cs
@@ -46,5 +46,14 @@
        /// <param name="status"></param>
        /// <exception cref="Exception"></exception>
        void RCSCleanRequest(string deviceID, string deviceStation, string status, string url,string bindUrl);
        /// <summary>
        /// 点对点任务下发
        /// </summary>
        ///  <param name="id">用户ID</param>
        /// <param name="beginLocate">起始位</param>
        /// <param name="endLocate">终点位</param>
        /// <exception cref="Exception"></exception>
        void PointToPointRequest(string id,string beginLocate, string endLocate, string url, string bindUrl);
    }
}
Wms/WMS.IBLL/IBllTransServer/IRcsServer.cs
@@ -49,7 +49,7 @@
        /// <param name="taskNo"></param>
        /// <param name="userId"></param>
        /// <exception cref="Exception"></exception>
        void CancelTask(string taskNo, int userId);
        void CancelTask(string taskNo,string url, int userId);
        /// <summary>
        /// 手动下发任务
@@ -58,5 +58,7 @@
        /// <param name="userId"></param>
        /// <exception cref="Exception"></exception>
        void DownTask(string taskNo, int userId, string url,string bindurl);
        public bool DelStockWms(int stockid, string url, int userId , out string errMsg);
    }
}
Wms/WMS.IBLL/IDataServer/IStockDetailServer.cs
@@ -23,7 +23,7 @@
        /// <param name="bitBoxMark">零箱标记</param>
        /// <param name="inspectStatus">质量状态</param>
        /// <returns></returns>
        List<StockDetailDto> GetBindList(string wareHouseName, string areaName, string locatNo, string palletNo, string lotNo);
        List<StockDetailDto> GetBindList(string wareHouseName, string areaName, string locatNo, string palletNo, string lotNo ,string palletStatus);
        /// <summary>
        /// 导出托盘明细
Wms/Wms/Controllers/BllCheckController.cs
@@ -497,7 +497,7 @@
                {
                    return Ok(new { code = 1, msg = "未获取到当前操作人信息" });
                }
                _rcsserver.CancelTask(model.taskNo, int.Parse(userId));
                _rcsserver.CancelTask(model.taskNo, _config.AgvHost + _config.CancelTask, int.Parse(userId));
                return Ok(new { code = 0, msg = "成功取消任务", data = "" });
            }
Wms/Wms/Controllers/BllQualityController.cs
@@ -313,5 +313,24 @@
                return Ok(new { code = 1, msg = e.Message });
            }
        }
        /// <summary>
        /// 获取库存批次号集合
        /// </summary>
        /// <returns></returns>
        [HttpPost]
        public IActionResult GetLotNoList(string SkuNo)
        {
            try
            {
                var bolls = _qualityServer.GetLotNoList(SkuNo);
                return Ok(new { code = 0, msg = "批次号集合", data = bolls });
            }
            catch (Exception e)
            {
                return Ok(new { code = 1, msg = e.Message });
            }
        }
    }
}
Wms/Wms/Controllers/DownApiController.cs
@@ -23,6 +23,7 @@
using Model.ModelVm.BllCheckVm;
using Model.ModelVm.SysVm;
using System.Security.Policy;
using Model.ModelVm.DataVm;
namespace Wms.Controllers
{
@@ -956,7 +957,7 @@
                LogFile.SaveLogToFile($"AGV任务执行通知-任务结束-请求报文:( {jsonData} ),", logStr);
                //具体处理方法
                _hopper.RCSFinishTask(model.robotTaskCode, extraValue.values.slotCode, "1", "AGV");
                _hopper.RCSFinishTask(model.robotTaskCode, extraValue.values.slotName, "1", "AGV");
                Data data = new Data();
                data.robotTaskCode = model.robotTaskCode;
@@ -991,18 +992,22 @@
            AgvResultModel2 resultModel = null;//返回信息
            try
            {
                var extraValue = new ExtraModel();
                extraValue = model.extra;
                if (!(extraValue.values.method == "cancel"))
                {
                    throw new Exception("小车调用方法错误");
                }
                var jsonData = JsonConvert.SerializeObject(model);
                LogFile.SaveLogToFile($"AGV任务执行通知-任务单取消-请求报文:( {jsonData} ),", logStr);
                LogFile.SaveLogToFile($"AGV任务执行通知-任务取消-请求报文:( {jsonData} ),", logStr);
                //具体处理方法
                //_rcsserver.CancelTask(model.robotTaskCode, _config.AgvHost + _config.CancelTask, 0);
                resultModel.code = "0";
                resultModel.message = "成功";
                resultModel.da.robotTaskCode = model.robotTaskCode;
                Data data = new Data();
                //data.robotTaskCode = model.robotTaskCode;
                resultModel = new AgvResultModel2 { code = "0", message = "成功", da = data };
                var jsonData2 = JsonConvert.SerializeObject(resultModel);
                LogFile.SaveLogToFile($"AGV任务执行通知-任务单取消-返回报文:( {jsonData2} ),", logStr);
                LogFile.SaveLogToFile($"AGV任务执行通知-任务取消-返回报文:( {jsonData2} ),", logStr);
                return Ok(resultModel);
            }
            catch (Exception ex)
@@ -1040,6 +1045,9 @@
                        break;
                    case "end":
                        var b = end(model);
                        break;
                    case "cancel":
                        var c = cancel(model);
                        break;
                    default:
                        break;
@@ -1180,7 +1188,7 @@
                {
                    return Ok(new { code = 1, msg = "未获取到当前操作人信息" });
                }
                _rcsserver.CancelTask(model.taskNo, int.Parse(userId));
                _rcsserver.CancelTask(model.taskNo, _config.AgvHost + _config.CancelTask, int.Parse(userId));
                return Ok(new { code = 0, msg = "成功取消任务", data = "" });
            }
@@ -1419,7 +1427,76 @@
            }
        }
        /// <summary>
        /// 点对点任务
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        [HttpPost]
        public IActionResult PointToPointRequest(PointTask model)
        {
            var logStr = $@".\log\AGV\点对点任务下发" + DateTime.Now.ToString("yyyyMMdd") + ".txt";
            AgvResultModel resultModel = null;//返回信息
            try
            {
                var jsonData = JsonConvert.SerializeObject(model);
                LogFile.SaveLogToFile($"任务下发:( {jsonData} ),", logStr);
                //具体处理方法
                _hopper.PointToPointRequest(model.ID, model.BeginPoint, model.EndPoint, _config.AgvHost + _config.GenAgvSchedulingTask, _config.AgvHost + _config.AGVBindPallets);
                resultModel = new AgvResultModel { code = "0", message = "请求成功!" };
                return Ok(resultModel);
            }
            catch (Exception e)
            {
                LogFile.SaveLogToFile($"下发点对点任务异常:( {e.Message} ),", logStr);
                resultModel = new AgvResultModel { code = "1", message = e.Message, data = "", reqCode = "" };
                return Ok(resultModel);
            }
        }
        /// <summary>
        /// 删除当前库存信息
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        [HttpPost]
        public IActionResult DelStockWms(DelStockInfo model)
        {
            try
            {
                //获取当前登录的用户ID
                var claimsIdentity = this.User.Identity as ClaimsIdentity;
                if (claimsIdentity == null)
                {
                    return Ok(new { code = 1, msg = "未获取到当前操作人信息" });
                }
                var userId = claimsIdentity.FindFirst(ClaimTypes.Name)?.Value;
                if (string.IsNullOrWhiteSpace(userId))
                {
                    return Ok(new { code = 1, msg = "未获取到当前操作人信息" });
                }
                string errMsg = "";
                bool t = _rcsserver.DelStockWms(model.StockId, _config.AgvHost + _config.AGVUnBindPallets, int.Parse(userId),out errMsg);
                if (t)
                {
                    return Ok(new { code = 0, msg = "删除成功", data = "" });
                }
                else
                {
                    return Ok(new { code = 1, msg = "删除失败", data = errMsg });
                }
                }
            catch (Exception e)
            {
                return Ok(new { code = 1, msg = e.Message });
            }
        }
        #endregion
    }
Wms/Wms/Controllers/StatisticalController.cs
@@ -98,11 +98,11 @@
        /// <param name="inspectStatus">质量状态</param>
        /// <returns></returns>
        [HttpGet]
        public IActionResult GetBindList(string wareHouseName,string areaName,string locatNo,string palletNo, string lotNo)
        public IActionResult GetBindList(string wareHouseName,string areaName,string locatNo,string palletNo, string lotNo,string palletStatus)
        {
            try
            {
                List<StockDetailDto> boxInfoList = _stockDetail.GetBindList(wareHouseName,areaName,locatNo,palletNo, lotNo);
                List<StockDetailDto> boxInfoList = _stockDetail.GetBindList(wareHouseName,areaName,locatNo,palletNo, lotNo, palletStatus);
                return Ok(new { data = boxInfoList, code = 0, msg = "获取托盘明细成功" });
            }
            catch (Exception e)
Wms/Wms/Tools/ApiUrlConfig.cs
@@ -97,6 +97,11 @@
        /// </summary>
        public string AGVUnBindPallets { get; set; }
        /// <summary>
        /// 取消任务接口
        /// </summary>
        public string CancelTask { get; set; }
        #endregion
        #endregion
Wms/Wms/appsettings.json
@@ -11,13 +11,10 @@
    //"ConnectionString": "Server=47.95.120.93;Database=WMS_JC09;User ID=sa;password=boxline!@#; Integrated Security=True;",
    //"ConnectionString": "Server=47.95.120.53;Database=WMS_JC09;User ID=sa;Password=boxline!@#;Integrated Security=False;",
    //"ConnectionString": "Server=192.168.62.106;Database=WMS_JC24;User ID=sa;Password=sql2019;Integrated Security=False;",
    "ConnectionString": "Server=192.168.10.201\\WMSSQLSERVER;Database=WMS_JC37;User ID=sa;Password=sa@123456;Integrated Security=False;"
    //"ConnectionString": "Server=.;Database=WMS_JC37;User ID=sa;Password=sa@123456;Integrated Security=False;"
    //"ConnectionString": "Data Source=192.168.10.201\\WMSSQLSERVER;Database=WMS_JC37;User ID=sa;Password=sa@123456;Integrated Security=False;"
    //"ConnectionString": "Server=192.168.10.201\\WMSSQLSERVER;Database=WMS_JC37;User ID=sa;Password=sa@123456;Integrated Security=False;"
    "ConnectionString": "Server=DESKTOP-H7CB0Q0\\MSSQLSERVER2019;Database=WMS_JC37;User ID=sa;Password=sql2019;Integrated Security=False;"
    //"ConnectionString": "Server=192.168.62.200;Database=WMS_JC37;User ID=sa;Password=sql2019;Integrated Security=False;"
    //"ConnectionString": "Server=.\\MSSQLSERVER2019;Database=WMS_JC23-2;User Id=sa;Password=admin2023@;" // SqlServer 库连接字符串
    //"ConnectionString": "Server=172.16.105.10;Database=WMS_JC23-2;User ID=sa;Password=sql2019;Integrated Security=False;"
    //"ConnectionString": "Server=172.16.105.2;Database=WMS_JC23-2;User ID=sa;Password=boxline@2024;Integrated Security=False;"
    //"ConnectionString": "Server=.\\SQLSERVER;Database=WMS_JC23-2;User ID=sa;Password=admin2023@;Integrated Security=False;"
  },
  "JWTConfig": {
    "Issuer": "WYY", //Token������
@@ -47,6 +44,7 @@
    "ContinueTask": "/rcs/rtas/api/robot/controller/task/extend/continue", //继续执行任务接口
    "GenPreScheduleTask": "/rcms/services/rest/hikRpcService/genPreScheduleTask", // 预调度对外接口
    "AGVBindPallets": "/rcs/rtas/api/robot/controller/carrier/bind", //载具与库位绑定接口
    "AGVUnBindPallets": "/rcs/rtas/api/robot/controller/carrier/bind" //载具与库位解绑接口
    "AGVUnBindPallets": "/rcs/rtas/api/robot/controller/carrier/bind", //载具与库位解绑接口
    "CancelTask": "/rcs/rtas/api/robot/controller/task/cancel"//取消任务接口
  }
}