bklLiudl
2024-07-17 bec134656a5a8057435d77f5f8154928fb2625f9
更改sql写法
6个文件已修改
1106 ■■■■ 已修改文件
HTML/views/ASNSetting/ArrivalNoticeDetail.html 68 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HTML/views/ASNSetting/SelMaterials.html 502 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.BLL/BllAsnServer/ArrivalNoticeServer.cs 416 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.BLL/BllAsnServer/BllBoxInfoServer.cs 108 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.Entity/BllAsnEntity/BllArrivalNoticeDetail.cs 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/Wms/Controllers/BllAsnController.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HTML/views/ASNSetting/ArrivalNoticeDetail.html
@@ -25,14 +25,22 @@
        .layui-table-mend {
            position: relative;
        }
        .input-dis {
            position: absolute; /* 设置为绝对定位 */
            top: -25%; /* 顶部对齐 */
            right: 0; /* 右侧对齐 */
            bottom: 0; /* 底部对齐 */
            left: 0; /* 左侧对齐 */
            width: 100%; /* 宽度设置为100% */
            height: 150%; /* 高度设置为100% */
            position: absolute;
            /* 设置为绝对定位 */
            top: -25%;
            /* 顶部对齐 */
            right: 0;
            /* 右侧对齐 */
            bottom: 0;
            /* 底部对齐 */
            left: 0;
            /* 左侧对齐 */
            width: 100%;
            /* 宽度设置为100% */
            height: 150%;
            /* 高度设置为100% */
            background-color: transparent;
            border: none;
            text-align: center;
@@ -59,26 +67,11 @@
            <label class="layui-form-label">单据类型</label>
            <div class="layui-input-inline">
                <select name="Type" id="Type" lay-filter="Type" lay-search>
                    <!-- JC23 -->
                    <option value="0">成品入库</option>
                    <option value="1">采购入库</option>
                    <option value="4">车间余料退回入库</option>
                    <option value="5">其它入库</option>
                    <option value="6">代储入库</option>
                    <!-- <option value=""></option> -->
                    <!-- JC24 -->
                    <!-- <option value="0" selected>成品入库</option>
                    <option value="1">采购入库</option>
                    <option value="2">中间品入库</option> -->
                    <!-- <option value="3">退货入库</option> -->
                    <!-- <option value="4">车间余料退回入库</option>
                    <option value="5">其它入库</option>
                    <option value="6">代储入库</option>
                    <option value="7">寄存入库</option> -->
                    <!-- JC08 -->
                    <!-- <option value="0">成品入库</option>
                    <option value="1">原料入库</option>
                    <option value="2">退货入库</option> -->
                    <option value="2">中间品入库</option>
                    <option value="3">退货入库</option>
                    <option value="4">余料退回入库</option>
                </select>
            </div>
@@ -259,7 +252,7 @@
                            if (elem.data('value') != '' && elem.data('value') != undefined) {
                                elem.val(elem.data('value')).parents('table.layui-table-cell').css('overflow', 'visible');
                            }
                        });
                        });
                        form.render();
                        //自定义列宽
                        SetTableColW('LAY-app-content-list', 'BllAsn/GetArrivalNoticeDetailList2', TotalColsSysArr);
@@ -409,29 +402,6 @@
                    }
                }
            })
            // var IsBaleValue = "";
            // form.on('switch(IsBaleDemo)', function (obj) {
            //     layer.tips(this.value + ' ' + this.name + ':' + obj.elem.checked, obj.othis);
            //     if (obj.elem.checked) {
            //         IsBaleValue = "1";
            //     } else {
            //         IsBaleValue = "0";
            //     }
            // });
            // table.on('row(LAY-app-content-list)', function (obj) {
            //     if (IsBaleValue != "") {
            //         for (var j in arr) {
            //             if (obj.data.SkuNo == arr[j].SkuNo) {
            //                 arr[j].IsBale = IsBaleValue;
            //                 IsBaleValue = ""
            //                 break;
            //             }
            //         }
            //     }
            // })
            // 删除入库单明细
            table.on('tool(LAY-app-content-list)', function (obj) {
HTML/views/ASNSetting/SelMaterials.html
@@ -1,283 +1,271 @@
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>选择物料信息</title>
        <meta name="renderer" content="webkit">
        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
        <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
        <link rel="stylesheet" href="../../layuiadmin/layui/css/layui.css" media="all">
    </head>
    <body>
        <div class="layui-fluid">
            <div class="layui-card">
                <div class="layui-form layui-card-header layuiadmin-card-header-auto">
                    <div class="layui-form-item">
                        <div class="layui-inline">
                            <label class="layui-form-label">关键字</label>
                            <div class="layui-input-inline">
                                <input type="text" id="Msg" name="Msg" placeholder="编码/名称/规格" autocomplete="off" class="layui-input">
                            </div>
                        </div>
                        <div class="layui-inline">
                            <label class="layui-form-label">单据类型</label>
                            <div class="layui-input-inline">
                                <select name="Type" id="Type" lay-filter="Type" disabled="disabled"
                                    lay-search>
                                    <option value="0">成品入库</option>
                                    <option value="1">采购入库</option>
                                    <option value="2">中间品入库</option>
                                    <option value="3">退货入库</option>
                                    <option value="4">车间余料退回入库</option>
                                    <option value="5">其它入库</option>
                                    <option value="6">代储入库</option>
                                    <option value="7">寄存入库</option>
                                </select>
                            </div>
                        </div>
                        <div class="layui-inline">
                            <button class="layui-btn layui-btn-sm layuiadmin-btn-list" lay-submit lay-filter="LAY-app-contlist-search">
                                <i class="layui-icon layui-icon-search layuiadmin-button-btn"></i>搜索
                            </button>
                            <button class="layui-btn layui-btn-sm layuiadmin-btn-list" data-type="setParent">确定</button>
<head>
    <meta charset="utf-8">
    <title>选择物料信息</title>
    <meta name="renderer" content="webkit">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta name="viewport"
        content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
    <link rel="stylesheet" href="../../layuiadmin/layui/css/layui.css" media="all">
</head>
<body>
    <div class="layui-fluid">
        <div class="layui-card">
            <div class="layui-form layui-card-header layuiadmin-card-header-auto">
                <div class="layui-form-item">
                    <div class="layui-inline">
                        <label class="layui-form-label">关键字</label>
                        <div class="layui-input-inline">
                            <input type="text" id="Msg" name="Msg" placeholder="编码/名称/规格" autocomplete="off"
                                class="layui-input">
                        </div>
                    </div>
                </div>
                <div class="layui-card-body">
                    <table id="goods-list" lay-filter="goods-list"></table>
                    <div class="layui-inline">
                        <label class="layui-form-label">单据类型</label>
                        <div class="layui-input-inline">
                            <select name="Type" id="Type" lay-filter="Type" disabled="disabled" lay-search>
                                <option value="0">成品入库</option>
                                <option value="1">采购入库</option>
                                <option value="2">中间品入库</option>
                                <option value="3">退货入库</option>
                                <option value="4">余料退回入库</option>
                            </select>
                        </div>
                    </div>
                    <div class="layui-inline">
                        <button class="layui-btn layui-btn-sm layuiadmin-btn-list" lay-submit
                            lay-filter="LAY-app-contlist-search">
                            <i class="layui-icon layui-icon-search layuiadmin-button-btn"></i>搜索
                        </button>
                        <button class="layui-btn layui-btn-sm layuiadmin-btn-list" data-type="setParent">确定</button>
                    </div>
                </div>
            </div>
            <div class="layui-card-body">
                <table id="goods-list" lay-filter="goods-list"></table>
            </div>
        </div>
    </div>
        <script src="../../layuiadmin/layui/layui.js"></script>
        <script src="../../js/jquery-3.5.1.min.js"></script>
        <script src="../../js/jquery.cookie.js"></script>
        <script src="../../js/public.js"></script>
        <script>
            layui.config({
                base: '../../layuiadmin/' //静态资源所在路径
            }).extend({
                index: 'lib/index' //主入口模块
            }).use(['index', 'table', 'laypage', 'layer'], function() {
                var table = layui.table,
                    form = layui.form,
                    laypage = layui.laypage,
                    index1 = parent.layer.getFrameIndex(window.name),
                    layer = layui.layer;
    <script src="../../layuiadmin/layui/layui.js"></script>
    <script src="../../js/jquery-3.5.1.min.js"></script>
    <script src="../../js/jquery.cookie.js"></script>
    <script src="../../js/public.js"></script>
    <script>
        layui.config({
            base: '../../layuiadmin/' //静态资源所在路径
        }).extend({
            index: 'lib/index' //主入口模块
        }).use(['index', 'table', 'laypage', 'layer'], function () {
            var table = layui.table,
                form = layui.form,
                laypage = layui.laypage,
                index1 = parent.layer.getFrameIndex(window.name),
                layer = layui.layer;
                // 获取上游页面的传值
                getQueryString('type');
            // 获取上游页面的传值
            getQueryString('type');
                function getQueryString(name) {
                    var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
                    var r = window.location.search.substr(1).match(reg);
                    if (r != null)
                    {
                        // $("#Type").empty();
                        // if (unescape(r[2]) == 0)
                        // {
                        //     $("#Type").append('<option value ="0" Selected >标准物料</option>');
                        //     $("#Type").append('<option value ="1">非标物料</option>');
                        // }
                        // if (unescape(r[2]) == 1)
                        // {
                        //     $("#Type").append('<option value ="0">标准物料</option>');
                        //     $("#Type").append('<option value ="1" Selected >非标物料</option>');
                        // }
            function getQueryString(name) {
                var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
                var r = window.location.search.substr(1).match(reg);
                        $("#Type").val(unescape(r[2])); // "optionValue"为需要被选中的选项的value属性值
                        form.render('select');
                    }
                if (r != null) {
                    //return null;
                    $("#Type").val(unescape(r[2])); // "optionValue"为需要被选中的选项的value属性值
                    form.render('select');
                }
                //return null;
            }
                refreshTable();
                var active = {
                  setParent: function(){
                    var checkStatus = table.checkStatus('goods-list');
                    var id = '#LAY-app-content-list',goods = $('#goods-list');
                    if(checkStatus.data.length == 0)
                    {
                      parent.layer.msg('请选择待入库的物料!');
                      return true;
            refreshTable();
            var active = {
                setParent: function () {
                    var checkStatus = table.checkStatus('goods-list');
                    var id = '#LAY-app-content-list', goods = $('#goods-list');
                    if (checkStatus.data.length == 0) {
                        parent.layer.msg('请选择待入库的物料!');
                        return true;
                    }
                    window.parent.success(checkStatus.data);
                    parent.layer.close(index1);
                  }
                };
                $('.layui-inline .layui-btn').on('click', function(){
                  var othis = $(this)
                  ,type = othis.data('type');
                  active[type] && active[type].call(this);
                });
                var tableIns;
                function refreshTable() {
                    var param = {
                        SkuNo:  $("#Msg").val(),
                        Type: $("#Type").val()
                    };
                    sendData(IP + "/BllAsn/GetMaterialsList", param, 'post', function(res) {
                        if (res.code == 0) { //成功
                            var list = res.data;
                                $.extend(infoOptions, {
                                    data: list
                                });
                                infoOptions.page = {
                                    curr: 1
                            }
                            tableIns = table.render(infoOptions);
                        } else { //不成功
                            layer.msg('获取物料信息失败!', {
                                icon: 2,
                                time: 2000 //2秒关闭(如果不配置,默认是3秒)
                            }, function() {});
                        }
                    });
                    parent.layer.close(index1);
                }
                // 表单需要的变量
                var infoOptions = {
                    elem: '#goods-list',
                    height: 'full-100',
                    id: 'goods-list',
                    page: true,
                    limit: pageCnt,
                    limits: pageLimits,
                    cellMinWidth: 80, //全局定义常规单元格的最小宽度,layui 2.2.1 新增
                    cols: [
                        [{
                            field: 'SkuId',
                            title: 'Id',
                            type: 'checkbox',
                            width: 100,
                            sort: true,
                            fixed: 'left'
                        }, {
                            field: 'SkuNo',
                            title: '物料编码',
                            width: 100,
                            fixed: 'left'
                        }, {
                            field: 'SkuName',
                            title: '物料名称',
                            width: 180,
                        },{
                            field: 'Standard',
                            title: '规格',
                            align: 'center',
                            width: 180
                        }, {
                            field: 'Type',
                            title: '类型',
                            width: 100,
                            templet: function (d) {
                                    switch (d.Type) {
                                        case "0" : return "原料";
                                        case "1" : return "包材";
                                        case "2" : return "成品";
                                        case "3" : return "耗材";
                                        case "4" : return "半成品";
                                        default : return "";
                                    }
                                }
                        }, {
                            field: 'IsControlled',
                            title: '是否标准',
                            // JC08 title: '是否受控',
                            width: 100,
                            // JC09
                            templet: function (d) {
                                    switch (d.IsControlled) {
                                        case "0" : return "标准";
                                        case "1" : return "非标";
                                        default : return "";
                                    }
                                },
                            // JC08
                            // templet: function (d) {
                            //         switch (d.IsBale) {
                            //             case "0" : return "受控";
                            //             case "1" : return "非受控";
                            //             default : return "";
                            //         }
                            //     }
                        },{
                            field: 'IsInspect',
                            title: '是否免检',
                            width: 100,
                            templet: function (d) {
                                    switch (d.IsInspect) {
                                        case "0" : return "否";
                                        case "1" : return "是";
                                        default : return "";
                                    }
                                },
                        },{
                            field: 'Origin',
                            title: '来源',
                            width: 120
                        },{
                            field: 'UnitName',
                            title: '计量单位',
                            width: 100,
                        }, {
                            field: 'PackagName',
                            title: '包装名称',
                            width: 120
                        }, {
                            field: 'Environment',
                            title: '存储环境',
                            width: 120,
                            templet: function (d) {
                                    switch (d.Environment) {
                                        case "0" : return "常温";
                                        case "1" : return "低温";
                                        case "3" : return "干燥通风";
                                        default : return "";
                                    }
                                },
                        }, {
                            field: 'Weight',
                            title: '理论重量',
                            width: 100
                        },
                        // {
                        //     field: 'Price',
                        //     title: '理论单价',
                        //     width: 100,
                        //     hide:true
                        // },
                        {
                            field: 'Warranty',
                            title: '保质期(天)',
                            width: 100
                        },{
                            field: 'GoodsRemark',
                            title: '备注',
                            width: 160
                        }
                        ]
                    ],
            };
            $('.layui-inline .layui-btn').on('click', function () {
                var othis = $(this)
                    , type = othis.data('type');
                active[type] && active[type].call(this);
            });
            var tableIns;
            function refreshTable() {
                var param = {
                    SkuNo: $("#Msg").val(),
                    Type: $("#Type").val()
                };
                //监听搜索
                form.on('submit(LAY-app-contlist-search)', function(data) {
                    refreshTable();
                sendData(IP + "/BllAsn/GetMaterialsList", param, 'post', function (res) {
                    if (res.code == 0) { //成功
                        var list = res.data;
                        $.extend(infoOptions, {
                            data: list
                        });
                        infoOptions.page = {
                            curr: 1
                        }
                        tableIns = table.render(infoOptions);
                    } else { //不成功
                        layer.msg('获取物料信息失败!', {
                            icon: 2,
                            time: 2000 //2秒关闭(如果不配置,默认是3秒)
                        }, function () { });
                    }
                });
            }
            // 表单需要的变量
            var infoOptions = {
                elem: '#goods-list',
                height: 'full-100',
                id: 'goods-list',
                page: true,
                limit: pageCnt,
                limits: pageLimits,
                cellMinWidth: 80, //全局定义常规单元格的最小宽度,layui 2.2.1 新增
                cols: [
                    [{
                        field: 'SkuId',
                        title: 'Id',
                        type: 'checkbox',
                        width: 100,
                        sort: true,
                        fixed: 'left'
                    }, {
                        field: 'SkuNo',
                        title: '物料编码',
                        width: 100,
                        fixed: 'left'
                    }, {
                        field: 'SkuName',
                        title: '物料名称',
                        width: 180,
                    }, {
                        field: 'Standard',
                        title: '规格',
                        align: 'center',
                        width: 180
                    }, {
                        field: 'Type',
                        title: '类型',
                        width: 100,
                        templet: function (d) {
                            switch (d.Type) {
                                case "0": return "原料";
                                case "1": return "包材";
                                case "2": return "成品";
                                case "3": return "耗材";
                                case "4": return "半成品";
                                default: return "";
                            }
                        }
                    }, {
                        field: 'IsControlled',
                        title: '是否标准',
                        // JC08 title: '是否受控',
                        width: 100,
                        // JC09
                        templet: function (d) {
                            switch (d.IsControlled) {
                                case "0": return "标准";
                                case "1": return "非标";
                                default: return "";
                            }
                        },
                        // JC08
                        // templet: function (d) {
                        //         switch (d.IsBale) {
                        //             case "0" : return "受控";
                        //             case "1" : return "非受控";
                        //             default : return "";
                        //         }
                        //     }
                    }, {
                        field: 'IsInspect',
                        title: '是否免检',
                        width: 100,
                        templet: function (d) {
                            switch (d.IsInspect) {
                                case "0": return "否";
                                case "1": return "是";
                                default: return "";
                            }
                        },
                    }, {
                        field: 'Origin',
                        title: '来源',
                        width: 120
                    }, {
                        field: 'UnitName',
                        title: '计量单位',
                        width: 100,
                    }, {
                        field: 'PackagName',
                        title: '包装名称',
                        width: 120
                    }, {
                        field: 'Environment',
                        title: '存储环境',
                        width: 120,
                        templet: function (d) {
                            switch (d.Environment) {
                                case "0": return "常温";
                                case "1": return "低温";
                                case "3": return "干燥通风";
                                default: return "";
                            }
                        },
                    }, {
                        field: 'Weight',
                        title: '理论重量',
                        width: 100
                    },
                    // {
                    //     field: 'Price',
                    //     title: '理论单价',
                    //     width: 100,
                    //     hide:true
                    // },
                    {
                        field: 'Warranty',
                        title: '保质期(天)',
                        width: 100
                    }, {
                        field: 'GoodsRemark',
                        title: '备注',
                        width: 160
                    }
                    ]
                ],
            };
            //监听搜索
            form.on('submit(LAY-app-contlist-search)', function (data) {
                refreshTable();
            });
        </script>
    </body>
</html>
        });
    </script>
</body>
</html>
Wms/WMS.BLL/BllAsnServer/ArrivalNoticeServer.cs
@@ -8,18 +8,15 @@
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using Model.ModelVm.BllAsnVm;
using Newtonsoft.Json;
using Utility.Tools;
using System.Threading.Tasks;
using WMS.BLL.LogServer;
using WMS.DAL;
using WMS.Entity.BllAsnEntity;
using WMS.Entity.BllSoEntity;
using WMS.Entity.Context;
using WMS.Entity.DataEntity;
using WMS.Entity.SysEntity;
using WMS.IBLL.IBllAsnServer;
using WMS.Entity.BllSoEntity;
using WMS.Entity.DataEntity;
using System.Threading.Tasks;
namespace WMS.BLL.BllAsnServer
{
@@ -68,7 +65,7 @@
                    CustomerName = tb1.CustomerName,
                    LotNo = tb1.LotNo,
                    LotText = tb1.LotText,
                    CheckTime = tb1.CheckTime.ToString(),
                    CheckTime = ((DateTime)tb1.CheckTime).ToString("yyyy-MM-dd HH:mm:ss"),
                    CheckUserName = tb5.RealName,
                    SupplierLot = tb1.SupplierLot,
                    Demo = tb1.Demo,
@@ -76,7 +73,7 @@
                    CompleteTime = tb1.CompleteTime,
                    CreateTime = tb1.CreateTime,
                    CreateUserName = tb3.RealName,
                    UpdateTime = tb1.UpdateTime.ToString(),
                    UpdateTime = ((DateTime)tb1.UpdateTime).ToString("yyyy-MM-dd HH:mm:ss"),
                    UpdateUserName = tb4.RealName
                }).ToPageListAsync(model.Page, model.Limit, count);
@@ -129,8 +126,8 @@
                     CompleteTime = tb1.CompleteTime,
                     CreateTime = tb1.CreateTime,
                     CreateUserName = tb3.RealName,
                     UpdateTime = tb1.UpdateTime.ToString(),
                     UpdateUserName = tb4.RealName
                     UpdateTime = ((DateTime)tb1.UpdateTime).ToString("yyyy-MM-dd HH:mm:ss"),
                    UpdateUserName = tb4.RealName
                 }).ToPageListAsync(model.Page, model.Limit, count);
            return modelList;
@@ -165,49 +162,32 @@
            {
                string skuType = string.Empty;
                int IsPack = 2; // 0:不贴 1:贴 2:不管
                /**
                 * 成品贴         0
                 * 采购可贴可不贴    1
                /** model.type (单据类型)
                 * 成品入库     0
                 * 采购入库     1
                 * 中间品不贴    2
                 * 退货贴        3
                 * 余料退回可贴可不贴    4
                 * 其它可贴可不贴    5
                 * 代储不贴        6
                 * 寄存不贴        7
                 * 退货入库        3
                 * 余料退回入库    4
                 */
                switch (model.Type)//0:原料 1:包材 2:成品 3:耗材 4:半成品
                {
                    case "0"://成品入库
                        skuType = "(2)";
                        IsPack = 1; //贴
                        break;
                    case "1"://采购入库
                        skuType = "(0,1,3)";
                        break;
                    case "2"://中间品入库
                        skuType = "(4)";
                        IsPack = 0; //不贴
                        break;
                    case "3"://退货入库
                        skuType = "(0,2)";
                        IsPack = 1; //贴
                        skuType = "(2)";
                        break;
                    case "4"://车间余料退回入库
                        skuType = "(0,1,3)";
                        break;
                    case "5"://其它入库
                        skuType = "(0,1,2,3,4)";
                        break;
                    case "6"://代储入库
                        skuType = "(2)";
                        IsPack = 0; //不贴
                        break;
                    case "7"://寄存入库
                        //skuType = "(3)";
                        IsPack = 0; //不贴
                        skuType = "(0,1,2,3)";
                        break;
                    default: //其它
                        //skuType = "(0,1,2,3,4)";
                        skuType = "(0,1,2,3,4)";
                        break;
                }
@@ -229,8 +209,6 @@
                    .Includes(x => x.UnitInfo)
                    .Includes(x => x.PackagInfo)
                    .ToList();
                return data.Select(m => new MaterialsDto()
                {
@@ -266,10 +244,15 @@
        public string AddArrivalNotice(ArrivalNoticeVm model)
        {
            string strMessage = "";
            string sqlString = string.Empty;
            string sqlDetailStr = string.Empty;
            //0:成品入库 1:采购入库 2:中间品入库 3:退货入库 4:车间余料入库 5:其它入库 6:代储入库 7:寄存入库
            var TypeLot = "1, 5, 6, 7"; //批次可为空单据类型
            /** model.type (单据类型)
            * 成品入库     0
            * 采购入库     1
            * 中间品不贴    2
            * 退货入库        3
            * 余料退回入库    4
            */
            var TypeLot = "1, 5, 6, 7";         //批次可为空单据类型
            try
            {
@@ -291,14 +274,23 @@
                
                lock (AsnLock)
                {
                    sqlString += "Insert into BllArrivalNotice (ASNNo,Type,Origin,CustomerNo,";
                    sqlString += "CustomerName,LotNo,LotText,SupplierLot,CreateUser) values ( ";
                    sqlString += $"'{model.ASNNo}','{model.Type}','{model.Origin}','{model.CustomerNo}', ";
                    sqlString += $"'{model.CustomerName}','{model.LotNo}','{model.LotText}','{model.SupplierLot}','{model.CreateUser}');";
                    // 总表实体赋值
                    BllArrivalNotice ASNModel = new BllArrivalNotice()
                    {
                        ASNNo = model.ASNNo,
                        Type = model.Type,
                        Origin = model.Origin,
                        CustomerNo = model.CustomerNo,
                        CustomerName = model.CustomerName,
                        Status = "0",
                        LotNo = model.LotNo,
                        LotText = model.LotText,
                        SupplierLot = model.SupplierLot,
                        CreateUser = (int)model.CreateUser
                    };
                    var detailModels = model.AsnDetail;
                    foreach (ArrivalNoticeDetailVm detailModel in detailModels)
                    List<BllArrivalNoticeDetail> details = new List<BllArrivalNoticeDetail>();
                    foreach (ArrivalNoticeDetailVm detailModel in model.AsnDetail)
                    {
                        if (string.IsNullOrEmpty(detailModel.SkuNo))
                        {
@@ -315,8 +307,7 @@
                            strMessage = "-1:数量必须大于0;";
                            continue;
                        }
                        //判断是否为采购入库单据或车间余料退回入库
                        // 0:成品入库 1:采购入库 2:中间品入库 3:退货入库 4:车间余料退回入库 5:其它入库 6:代储入库 7:寄存入库
                        if (model.Type == "1" || model.Type == "5" || model.Type == "6" || model.Type == "7")
                        {
                            if (!string.IsNullOrWhiteSpace(detailModel.LotNo))
@@ -356,10 +347,14 @@
                                throw new Exception("当前单据类型批次不可为空!");
                            }
                        }
                        // 判断是否已存在当前明细
                        string sqlCount = $"SELECT COUNT(ID) FROM BllArrivalNoticeDetail where ASNNo = '{model.ASNNo}' ";
                        sqlCount += $"and SkuNo ='{detailModel.SkuNo}' and LotNo = '{detailModel.LotNo}' and id != '{detailModel.Id}' and isdel = '0';";
                        var com = new Common().GetRowCount(sqlCount);
                        int com = Db.Queryable<BllArrivalNoticeDetail>()
                            .Where(m => m.ASNNo == model.ASNNo
                            && m.SkuNo == detailModel.SkuNo
                            && m.LotNo == detailModel.LotNo
                            && m.Id != (int)detailModel.Id
                            && m.IsDel == "0").ToList().Count();
                        if (com > 0)
                        {
                            strMessage = "-1:物料和批次号重复;";
@@ -371,26 +366,54 @@
                        }
                        // 计算出总金额
                        detailModel.Money = detailModel.Price * detailModel.Qty;
                        sqlDetailStr += "Insert into BllArrivalNoticeDetail (ASNNo,SkuNo,SkuName,Standard,";
                        sqlDetailStr += "LotNo,LotText,Qty,PackagNo,Price,Money,IsBale,IsBelt,SupplierLot,Status,IsSampling,InspectStatus,UDF1,UDF2,UDF3,UDF4,UDF5,CreateUser) values ( ";
                        sqlDetailStr += $"'{model.ASNNo}','{detailModel.SkuNo}','{detailModel.SkuName}','{detailModel.Standard}', ";
                        sqlDetailStr += $"'{detailModel.LotNo.Trim()}','{detailModel.LotText}','{detailModel.Qty}','{detailModel.PackagNo}','{detailModel.Price}', ";
                        sqlDetailStr += $"{detailModel.Money},'{detailModel.IsBale}','{detailModel.IsBelt}','{detailModel.SupplierLot}','0','0','0','{detailModel.UDF1}','{detailModel.UDF2}','{detailModel.UDF3}','{detailModel.UDF4}','{detailModel.UDF5}','{model.CreateUser}');";
                    }
                        BllArrivalNoticeDetail detail = new BllArrivalNoticeDetail()
                        {
                            ASNNo = model.ASNNo,
                            SkuNo = detailModel.SkuNo,
                            SkuName = detailModel.SkuName,
                            Standard = detailModel.Standard,
                            LotNo = detailModel.LotNo.Trim(),
                            LotText = detailModel.LotText,
                            Qty = (decimal)detailModel.Qty,
                            PackagNo = detailModel.PackagNo,
                            FactQty = 0,                        // 已组数量
                            CompleteQty = 0,                    // 完成数量
                            Price = detailModel.Price,
                            Money = detailModel.Money,
                            IsBale = detailModel.IsBale,
                            IsBelt = detailModel.IsBelt,
                            SupplierLot = detailModel.SupplierLot,
                            Status = "0",
                            IsSampling = "0",
                            InspectStatus = "0",
                            UDF1 = detailModel.UDF1,
                            UDF2 = detailModel.UDF2,
                            UDF3 = detailModel.UDF3,
                            UDF4 = detailModel.UDF4,
                            UDF5 = detailModel.UDF5,
                            CreateUser = (int)model.CreateUser,
                        };
                    if (sqlDetailStr == string.Empty)
                        details.Add(detail);
                    }
                    // 判断是否存在被过滤掉的明细
                    if (details.Count <= 0)
                    {
                        return strMessage;
                    }
                    Db.Ado.BeginTran();
                    int rowCount = Db.Ado.ExecuteCommand(sqlString);
                    var rowDetailCount = 1;
                    if (sqlDetailStr.Length > 0)
                    var rowCount = Db.Insertable(ASNModel).ExecuteCommand();
                    var rowDetailCount = 0;
                    if (details.Count  > 0)
                    {
                        rowDetailCount = Db.Ado.ExecuteCommand(sqlDetailStr);
                        rowDetailCount = Db.Insertable(details).ExecuteCommand();
                    }
                    Db.Ado.CommitTran();
                    if (rowCount > 0 && rowDetailCount > 0)
                    {
                        new OperationASNServer().AddLogOperationAsn("入库作业", "入库单据", model.ASNNo, "添加", $"添加了单据号为{model.ASNNo}的单据信息", Convert.ToInt32(model.CreateUser));
@@ -427,29 +450,31 @@
                    //7 必须为空
                    var TypeLot = "1, 5, 6, 7"; //批次为生成批次单据类型
                    
                    //if (model.Origin != "录入")
                    //{
                    //    strMessage = "-1:上游系统下发的单据,不可编辑;";
                    //    return strMessage;
                    //}
                    sqlString += $"select * from BllArrivalNotice where ASNNo = '{model.ASNNo}' and isDel = '0';";
                    var asnInfo = Db.Ado.SqlQuery<BllArrivalNotice>(sqlString).FirstOrDefault();
                    var asnInfo = Db.Queryable<BllArrivalNotice>().First(m => m.ASNNo == model.ASNNo && m.IsDel == "0");
                    if (asnInfo == null)
                    {
                        strMessage = "-1:单号不存在,或已删除!;";
                        return strMessage;
                    }
                    if (asnInfo.Status != "0")
                    {
                        strMessage = "-1:单据状态变更,不可编辑;";
                        return strMessage;
                    }
                    sqlString = "UPDATE BllArrivalNotice SET ";
                    sqlString += $"CustomerNo = '{model.CustomerNo}',CustomerName = '{model.CustomerName}',";
                    sqlString += $"LotNo = '{model.LotNo}',LotText = '{model.LotText}',";
                    sqlString += $"UpdateTime = GETDATE(),UpdateUser = '{model.CreateUser}' ";
                    sqlString += $"WHERE ASNNo = '{model.ASNNo}'";
                    var dateTime = DateTime.Now;
                    // 编辑总单
                    asnInfo.CustomerNo = model.CustomerNo;
                    asnInfo.CustomerName = model.CustomerName;
                    asnInfo.LotNo = model.LotNo;
                    asnInfo.LotText = model.LotText;
                    asnInfo.UpdateTime = dateTime;
                    asnInfo.UpdateUser = model.CreateUser;
                    var detailModels = model.AsnDetail;
                    sqlDetailStr += $"SELECT * FROM BllArrivalNoticeDetail WHERE ASNNo = '{model.ASNNo}' and isDel = '0';";
                    var dbDetailModels = DataContext.Db.Ado.SqlQuery<BllArrivalNoticeDetail>(sqlDetailStr);
                    //var dbDetailModels = DataContext.Db.Ado.SqlQuery<BllArrivalNoticeDetail>(sqlDetailStr);
                    var dbDetailModels = Db.Queryable<BllArrivalNoticeDetail>().Where(m => m.ASNNo == model.ASNNo && m.IsDel == "0").ToList();
                    sqlDetailStr = string.Empty;
                    // 处理已删除的明细
@@ -457,13 +482,16 @@
                    {
                        if (detailModels.Count(it => it.Id == dbDetailModel.Id) == 0)
                        {
                            sqlDetailStr += $"UPDATE BllArrivalNoticeDetail SET IsDel = '1',";
                            sqlDetailStr += $"UpdateTime = GETDATE(),UpdateUser = '{model.CreateUser}' ";
                            sqlDetailStr += $"WHERE Id = {dbDetailModel.Id};";
                            dbDetailModel.IsDel = "1";
                            dbDetailModel.UpdateTime = dateTime;
                            dbDetailModel.UpdateUser = model.CreateUser;
                        }
                    }
                    string toDayTime = DateTime.Now.ToString("yyyyMMdd");
                    // 处理修改和添加的明细
                    string toDayTime = dateTime.ToString("yyyymmdd");
                    List<BllArrivalNoticeDetail> addDetails = new List<BllArrivalNoticeDetail>();
                    List<BllArrivalNoticeDetail> editDetails = new List<BllArrivalNoticeDetail>();
                    foreach (ArrivalNoticeDetailVm detailModel in detailModels)
                    {
                        if (string.IsNullOrEmpty(detailModel.SkuNo))
@@ -491,9 +519,7 @@
                        }
                        // 判断是否已存在当前明细
                        string sqlCount = $"SELECT COUNT(ID) FROM BllArrivalNoticeDetail where ASNNo = '{model.ASNNo}' ";
                        sqlCount += $"and SkuNo ='{detailModel.SkuNo}' and LotNo = '{detailModel.LotNo}' and id != '{detailModel.Id}' and isdel = '0';";
                        var com = new Common().GetRowCount(sqlCount);
                        var com =  dbDetailModels.Where(m => m.SkuNo == detailModel.SkuNo && m.LotNo == detailModel.LotNo && m.Id != detailModel.Id && m.IsDel == "0").Count();
                        if (com > 0)
                        {
                            strMessage = "-1:物料和批次号重复;";
@@ -538,13 +564,33 @@
                            }
                            // 计算出总金额
                            detailModel.Money = detailModel.Price * detailModel.Qty;
                            sqlDetailStr += "Insert into BllArrivalNoticeDetail (ASNNo,SkuNo,SkuName,Standard,";
                            sqlDetailStr += "LotNo,LotText,Qty,PackagNo,Price,Money,IsBale,IsBelt,SupplierLot,Status,UDF1,UDF2,UDF3,UDF4,UDF5,CreateUser) values ( ";
                            sqlDetailStr += $"'{model.ASNNo}','{detailModel.SkuNo}','{detailModel.SkuName}','{detailModel.Standard}', ";
                            sqlDetailStr += $"'{detailModel.LotNo.Trim()}','{detailModel.LotText}','{detailModel.Qty}','{detailModel.PackagNo}','{detailModel.Price}', ";
                            sqlDetailStr += $"{detailModel.Money},'{detailModel.IsBale}','{detailModel.IsBelt}','{detailModel.SupplierLot}','0','{detailModel.UDF1}','{detailModel.UDF2}','{detailModel.UDF3}','{detailModel.UDF4}','{detailModel.UDF5}','{model.CreateUser}');";
                            BllArrivalNoticeDetail addModel = new BllArrivalNoticeDetail()
                            {
                                ASNNo = model.ASNNo,
                                SkuNo = detailModel.SkuNo,
                                SkuName = detailModel.SkuName,
                                Standard = detailModel.Standard,
                                LotNo = detailModel.LotNo.Trim(),
                                LotText = detailModel.LotText,
                                Qty = (decimal)detailModel.Qty,
                                PackagNo = detailModel.PackagNo,
                                Price = detailModel.Price,
                                Money = detailModel.Money,
                                FactQty = 0,                        // 已组数量
                                CompleteQty = 0,                    // 完成数量
                                IsBale = detailModel.IsBale,
                                IsBelt = detailModel.IsBelt,
                                SupplierLot = detailModel.SupplierLot,
                                Status = "0",
                                UDF1 = detailModel.UDF1,
                                UDF2 = detailModel.UDF2,
                                UDF3 = detailModel.UDF3,
                                UDF4 = detailModel.UDF4,
                                UDF5 = detailModel.UDF5,
                                CreateUser=(int)model.CreateUser
                            };
                            addDetails.Add(addModel);
                        }
                        else
                        {
@@ -566,9 +612,10 @@
                            {
                                continue;
                            }
                            var dbDetail = dbDetailModels.First(m => m.Id == detailModel.Id);
                            if (TypeLot.Contains(model.Type))
                            {
                                var dbDetail = dbDetailModels.First(m=>m.Id == detailModel.Id);
                                if (!string.IsNullOrWhiteSpace(dbDetail.LotNo))
                                {
                                    if (dbDetail.LotNo != detailModel.LotNo)
@@ -581,24 +628,39 @@
                            }
                            // 计算出总金额
                            detailModel.Money = detailModel.Price * detailModel.Qty;
                            sqlDetailStr += $"UPDATE BllArrivalNoticeDetail SET ";
                            sqlDetailStr += $"Qty = '{detailModel.Qty}',LotNo = '{detailModel.LotNo.Trim()}',Money='{detailModel.Money}', ";
                            sqlDetailStr += $"LotText = '{detailModel.LotText}',SupplierLot = '{detailModel.SupplierLot}', ";
                            sqlDetailStr += $"IsBale = '{detailModel.IsBale}',IsBelt = '{detailModel.IsBelt}', ";
                            sqlDetailStr += $"UDF1 = '{detailModel.UDF1}',UDF2 = '{detailModel.UDF2}',UDF3 = '{detailModel.UDF3}',UDF4 = '{detailModel.UDF4}',UDF5 = '{detailModel.UDF5}',";
                            sqlDetailStr += $"UpdateTime = GETDATE(),UpdateUser = '{model.CreateUser}' ";
                            sqlDetailStr += $"WHERE Id = {detailModel.Id};";
                            dbDetail.Qty = (decimal)detailModel.Qty;
                            dbDetail.LotNo = detailModel.LotNo;
                            dbDetail.Money = detailModel.Money;
                            dbDetail.LotText = detailModel.LotText;
                            dbDetail.SupplierLot = detailModel.SupplierLot;
                            dbDetail.IsBale = detailModel.IsBale;
                            dbDetail.UDF1 = detailModel.UDF1;
                            dbDetail.UDF2 = detailModel.UDF2;
                            dbDetail.UDF3 = detailModel.UDF3;
                            dbDetail.UDF4 = detailModel.UDF4;
                            dbDetail.UDF5 = detailModel.UDF5;
                            dbDetail.UpdateTime = dateTime;
                            dbDetail.UpdateUser = model.CreateUser;
                            editDetails.Add(dbDetail);
                        }
                    }
                    Db.Ado.BeginTran();
                    int rowCount = Db.Ado.ExecuteCommand(sqlString);
                    Db.Updateable(dbDetailModels).ExecuteCommand();
                    int rowCount = Db.Updateable(asnInfo).ExecuteCommand();
                    var rowDetailCount = 1;
                    if (sqlDetailStr.Length > 0)
                    if (addDetails.Count > 0)
                    {
                        rowDetailCount = Db.Ado.ExecuteCommand(sqlDetailStr);
                        rowDetailCount = Db.Insertable(addDetails).ExecuteCommand();
                    }
                    if (editDetails.Count > 0)
                    {
                        rowDetailCount += Db.Updateable(editDetails).ExecuteCommand();
                    }
                    Db.Ado.CommitTran();
                    if (rowCount > 0 && rowDetailCount > 0)
                    {
@@ -622,9 +684,7 @@
        {
            try
            {
                var sqlString = $"SELECT * FROM BllArrivalNotice WHERE ASNNo = '{model.ASNNo}' AND IsDel = 0 AND Status = '0';";
                var asnModel = Db.Ado.SqlQuery<BllArrivalNotice>(sqlString).FirstOrDefault();
                var asnModel = Db.Queryable<BllArrivalNotice>().First(m => m.ASNNo == model.ASNNo && m.IsDel == "0" && m.Status == "0");
                if (asnModel == null)
                {
                    return "-1:入库单状态已变更,不可删除!";
@@ -636,42 +696,48 @@
                }
                // 删除总单
                sqlString = $"UPDATE BllArrivalNotice SET IsDel = '1',";
                sqlString += $"UpdateTime = GETDATE(),UpdateUser = '{model.CreateUser}' ";
                sqlString += $"WHERE ASNNo = '{model.ASNNo}';";
                var editDateTime = DateTime.Now;
                asnModel.IsDel = "1";
                asnModel.UpdateTime = editDateTime;
                asnModel.UpdateUser = model.CreateUser;
                // 删除明细单
                sqlString += $"UPDATE BllArrivalNoticeDetail SET IsDel = '1',";
                sqlString += $"UpdateTime = GETDATE(),UpdateUser = '{model.CreateUser}' ";
                sqlString += $"WHERE ASNNo = '{model.ASNNo}';";
                var asnDetails = Db.Queryable<BllArrivalNoticeDetail>().Where(m => m.ASNNo == model.ASNNo && m.IsDel =="0").ToList();
                foreach (BllArrivalNoticeDetail asnDetail in asnDetails)
                {
                    asnDetail.IsDel = "1";
                    asnDetail.UpdateTime = editDateTime;
                    asnDetail.UpdateUser = model.CreateUser;
                }
                #region liudl Edit JC26物料不贴吗无需删除
                //判断是否为采购入库单据或车间余料退回入库
                // 0:成品入库 1:采购入库 2:中间品入库 3:退货入库 4:车间余料退回入库 5:其它入库 6:代储入库 7:寄存入库
                int notdel = 0;
                if (model.Type == "1" || model.Type == "4")
                {
                    //获取单据生成对应标签
                    var list = Db.Queryable<BllBoxInfo>().Where(a => a.IsDel == "0" && a.Status == "0" && a.BindNo == null);
                //int notdel = 0;
                //if (model.Type == "1" || model.Type == "4")
                //{
                //    //获取单据生成对应标签
                //    var list = Db.Queryable<BllBoxInfo>().Where(a => a.IsDel == "0" && a.Status == "0" && a.BindNo == null);
                    //验证对应箱支信息是否存在
                    if (list == null)
                    {
                        return "-1:已有箱码已绑定托盘或已入库,不可删除!";
                    }
                //    //验证对应箱支信息是否存在
                //    if (list == null)
                //    {
                //        return "-1:已有箱码已绑定托盘或已入库,不可删除!";
                //    }
                    // 删除对应箱支信息
                    sqlString += $"UPDATE BllBoxInfo SET IsDel = '1',";
                    sqlString += $"UpdateTime = GETDATE(),UpdateUser = '{model.CreateUser}' ";
                    sqlString += $"WHERE ASNNo = '{model.ASNNo}';";
                    notdel = 1;
                }
                //    // 删除对应箱支信息
                //    sqlString += $"UPDATE BllBoxInfo SET IsDel = '1',";
                //    sqlString += $"UpdateTime = GETDATE(),UpdateUser = '{model.CreateUser}' ";
                //    sqlString += $"WHERE ASNNo = '{model.ASNNo}';";
                //    notdel = 1;
                //}
                #endregion
                Db.Ado.BeginTran();
                int rowCount = Db.Ado.ExecuteCommand(sqlString);
                if (rowCount < 2 + notdel)
                {
                    Db.RollbackTran();
                    return "-1:删除失败!";
                }
                //int rowCount = Db.Ado.ExecuteCommand(sqlString);
                int rowCount = Db.Updateable(asnModel).ExecuteCommand();
                rowCount += Db.Updateable(asnDetails).ExecuteCommand();
                Db.Ado.CommitTran();
                new OperationASNServer().AddLogOperationAsn("入库作业", "入库单据", model.ASNNo, "删除", $"删除了单据号为{model.ASNNo}的单据信息", Convert.ToInt32(model.CreateUser));
                return "";
@@ -688,8 +754,7 @@
            string sqlString = string.Empty;
            try
            {
                sqlString = $"SELECT * FROM BllArrivalNotice WHERE ASNNo = '{model.ASNNo}' AND IsDel = 0 AND Status = '0';";
                var asnModel = Db.Ado.SqlQuery<BllArrivalNotice>(sqlString).FirstOrDefault();
                var asnModel = Db.Queryable<BllArrivalNotice>().First(m => m.ASNNo == model.ASNNo && m.IsDel == "0" && m.Status == "0");
                if (asnModel == null)
                {
@@ -702,28 +767,34 @@
                }
                sqlString = $"SELECT * FROM BllArrivalNoticeDetail WHERE ASNNo = '{model.ASNNo}' and Id <> {model.Id};";
                var detailModel = Db.Ado.SqlQuery<ArrivalNoticeDetailVm>(sqlString);
                var asnDetail = Db.Queryable<BllArrivalNoticeDetail>().First(m => m.ASNNo == model.ASNNo && m.IsDel == "0" && m.Id == model.Id);
                if (asnDetail == null)
                {
                    return "-1:明细状态已变更,不可删除!";
                }
                var detailModel = Db.Queryable<BllArrivalNoticeDetail>()
                    .Where(m => m.ASNNo == model.ASNNo && m.IsDel == "0" && m.Id != model.Id).ToList();
                var editDateTime = DateTime.Now;
                if (detailModel.Count <= 0)
                {
                    sqlString = $"UPDATE BllArrivalNotice SET IsDel = '1',";
                    sqlString += $"UpdateTime = GETDATE(),UpdateUser = '{model.CreateUser}' ";
                    sqlString += $"WHERE ASNNo = '{model.ASNNo}';";
                    asnModel.IsDel = "1";
                    asnModel.UpdateTime = editDateTime;
                    asnModel.UpdateUser = model.CreateUser;
                }
                else
                {
                    sqlString = $"UPDATE BllArrivalNotice SET ";
                    sqlString += $"UpdateTime = GETDATE(),UpdateUser = '{model.CreateUser}' ";
                    sqlString += $"WHERE ASNNo = '{model.ASNNo}';";
                    asnModel.UpdateTime = editDateTime;
                    asnModel.UpdateUser = model.CreateUser;
                }
                sqlString += $"UPDATE BllArrivalNoticeDetail SET IsDel = '1',";
                sqlString += $"UpdateTime = GETDATE(),UpdateUser = '{model.CreateUser}' ";
                sqlString += $"WHERE Id = '{model.Id}';";
                asnDetail.IsDel = "0";
                asnDetail.UpdateTime = editDateTime;
                asnDetail.UpdateUser = model.CreateUser;
                Db.Ado.BeginTran();
                int rowCount = Db.Ado.ExecuteCommand(sqlString);
                int rowCount = Db.Updateable(asnModel).ExecuteCommand();
                rowCount += Db.Updateable(asnDetail).ExecuteCommand();
                if (rowCount < 2)
                {
@@ -731,8 +802,12 @@
                    return "-1:删除失败!";
                }
                Db.Ado.CommitTran();
                var detail = Db.Queryable<BllArrivalNoticeDetail>().First(m => m.Id == model.Id);
                new OperationASNServer().AddLogOperationAsn("入库作业", "入库单据", model.ASNNo, "删除", $"删除了单据号为{model.ASNNo}、物料为{detail.SkuNo}、批次号为{detail.LotNo}的单据信息", Convert.ToInt32(model.CreateUser));
                new OperationASNServer().AddLogOperationAsn("入库作业", "入库单据", model.ASNNo, "删除",
                    $"删除了单据号为{model.ASNNo}、物料为{detail.SkuNo}、批次号为{detail.LotNo}的单据信息",
                    Convert.ToInt32(model.CreateUser));
                return "";
            }
            catch (Exception ex)
@@ -741,6 +816,7 @@
                throw new Exception(ex.Message);
            }
        }
        //关闭入库单
        public string CloseArrivalNotice(int id, int userId)
        {
@@ -751,29 +827,39 @@
                {
                    throw new Exception("未查询到入库单据信息");
                }
                //if (notice.Status != "2")
                //{
                //    throw new Exception("参数异常,请检查状态是否为执行完成");
                //}
                var palletBind = Db.Queryable<BllPalletBind>().Where(m => m.IsDel == "0" && m.ASNNo == notice.ASNNo && m.Status != "2" && m.Status != "3").ToList();
                var palletBind = Db.Queryable<BllPalletBind>()
                    .Where(m => m.IsDel == "0" && m.ASNNo == notice.ASNNo
                    && m.Status != "2" && m.Status != "3").ToList();
                if (palletBind != null && palletBind.Count > 0)
                {
                    throw new Exception("存在未入库完成托盘信息,不允许关单");
                }
                var comTime = DateTime.Now;
                var sqlString = "";
                // 总单关单
                sqlString = $"UPDATE BllArrivalNotice SET Status = '3',";
                sqlString += $"CompleteTime = GETDATE(),UpdateTime = GETDATE(),UpdateUser = '{userId}' ";
                sqlString += $"WHERE Id = '{id}';";
                var asnModel = Db.Queryable<BllArrivalNotice>().First(m => m.Id == id);
                if (asnModel != null)
                {
                    asnModel.Status = "3";
                    asnModel.CompleteTime = comTime;
                    asnModel.UpdateTime = comTime;
                    asnModel.UpdateUser = userId;
                }
                // 将未完成的明细改为已完成
                sqlString += $"UPDATE BllArrivalNoticeDetail SET Status = '2',";
                sqlString += $"CompleteTime = GETDATE(),UpdateTime = GETDATE(),UpdateUser = '{userId}' ";
                sqlString += $"WHERE Id = '{id}' and Status <> '2';";
                var asnDetails = Db.Queryable<BllArrivalNoticeDetail>().Where(m => m.Id == id && m.Status == "2").ToList();
                foreach (BllArrivalNoticeDetail asnDetail in asnDetails)
                {
                    asnDetail.Status = "2";
                    asnDetail.CompleteTime = comTime;
                    asnDetail.UpdateTime = comTime;
                    asnDetail.UpdateUser = userId;
                }
                Db.Ado.BeginTran();
                int rowCount = Db.Ado.ExecuteCommand(sqlString);
                int rowCount = Db.Updateable(asnModel).ExecuteCommand();
                rowCount += Db.Updateable(asnDetails).ExecuteCommand();
                if (rowCount <= 0)
                {
@@ -842,7 +928,7 @@
                        }
                        // 入库总表信息
                        string asnNo = new Common().GetMaxNo("ASN");
                        var asnModel = new BllArrivalNotice()
                        var asnModel1 = new BllArrivalNotice()
                        {
                            ASNNo = asnNo,
                            Status = "0",//执行状态,0:等待执行
@@ -854,7 +940,7 @@
                            CreateUser = 0
                        };
                        // 插入入库总表信息
                        Db.Insertable(asnModel).ExecuteCommand();
                        Db.Insertable(asnModel1).ExecuteCommand();
                        //入库单明细
                        var arrDetailModel = new BllArrivalNoticeDetail()
                        {
Wms/WMS.BLL/BllAsnServer/BllBoxInfoServer.cs
@@ -71,19 +71,34 @@
                }
                // 验证是否重复 支/袋码
                sqlString += $@"select count(id) from BllBoxInfo where BoxNo3 = '{model.BoxNo3}' and IsDel = 0 ";
                int rowCount = Db.Ado.GetInt(sqlString);
                if (rowCount > 0)
                //sqlString += $@"select count(id) from BllBoxInfo where BoxNo3 = '{model.BoxNo3}' and IsDel = 0 ";
                //int rowCount = Db.Ado.GetInt(sqlString);
                var box1 = Db.Queryable<BllBoxInfo>().First(m => m.BoxNo3 == model.BoxNo3 && m.IsDel == "0");
                if (box1 != null)
                {
                    strMessage = "-1:重复数据!";
                    return strMessage;
                }
                // 获取物料信息
                sqlString = "select tb1.SkuNo,tb1.SkuName,tb1.Warranty, ";
                sqlString += "case tb2.level when 5 then tb2.L4Num when 4 then tb2.L3Num when 3 then tb2.L2Num else 0 end as FullQty ";
                sqlString += "from SysMaterials as tb1 left join SysPackag as tb2 on tb1.PackagNo = tb2.PackagNo ";
                sqlString += $"where SkuNo = '{model.SkuNo}' and tb1.IsDel = '0';";
                var materialModel = Db.Ado.SqlQuery<BoxInfoVm>(sqlString);
                //sqlString = "select tb1.SkuNo,tb1.SkuName,tb1.Warranty, ";
                //sqlString += "case tb2.level when 5 then tb2.L4Num when 4 then tb2.L3Num when 3 then tb2.L2Num else 0 end as FullQty ";
                //sqlString += "from SysMaterials as tb1 left join SysPackag as tb2 on tb1.PackagNo = tb2.PackagNo ";
                //sqlString += $"where SkuNo = '{model.SkuNo}' and tb1.IsDel = '0';";
                //var materialModel = Db.Ado.SqlQuery<BoxInfoVm>(sqlString);
                var materialModel = Db.Queryable<SysMaterials>()
                    .LeftJoin<SysPackag>((tb1, tb2) => tb1.PackagNo == tb2.PackagNo)
                    .Where(tb1 => tb1.SkuNo == model.SkuNo && tb1.IsDel == "0")
                    .Select((tb1, tb2) => new BoxInfoVm
                    {
                        SkuNo = tb1.SkuNo,
                        SkuName = tb1.SkuName,
                        Warranty = tb1.Warranty,
                        FullQty = SqlFunc.IF(tb2.Level == 5).Return(tb2.L4Num)
                                    .ElseIF(tb2.Level == 4).Return(tb2.L3Num)
                                    .ElseIF(tb2.Level == 3).Return(tb2.L2Num).End(0)
                    }).ToList();
                if (materialModel.Count <= 0)
                {
                    strMessage = "-1:该物料信息不存在!";
@@ -108,9 +123,16 @@
                }
                #region 包装信息
                string str = $"select SUM(Qty) Qty from BllBoxInfo where IsDel = '0' and BoxNo = '{model.BoxNo}'";
                //获取箱码信息
                var box = Db.Ado.SqlQuerySingle<BoxInfoVm>(str);
                //string str = $"select SUM(Qty) Qty from BllBoxInfo where IsDel = '0' and BoxNo = '{model.BoxNo}'";
                ////获取箱码信息
                //var box = Db.Ado.SqlQuerySingle<BoxInfoVm>(str);
                var boxs = Db.Queryable<BllBoxInfo>().Where(m => m.IsDel == "0" && m.BoxNo == model.BoxNo).Select(m => new BoxInfoVm
                {
                    Qty = SqlFunc.AggregateSum(m.Qty)
                });
                var box = boxs.First();
                if (box.Qty == null)
                {
                    box.Qty = 0;
@@ -162,13 +184,37 @@
                #endregion
                // 插入信息
                sqlString = "Insert into BllBoxInfo (BoxNo,BoxNo2,BoxNo3,SkuNo,SkuName,LotNo,LotText,";
                sqlString += "Qty,FullQty,ProductionTime,ExpirationTime,InspectMark,InspectStatus,BitBoxMark,Origin,Status,CreateUser) values ( ";
                sqlString += $"'{model.BoxNo}','{model.BoxNo2}','{model.BoxNo3}','{model.SkuNo}', ";
                sqlString += $"'{materialModel[0].SkuName}','{model.LotNo}','{model.LotText}','{model.Qty}','{materialModel[0].FullQty}',";
                sqlString += $"'{model.ProductionTime}','{model.ExpirationTime}','{model.InspectMark}','{sku.IsInspect}','{model.BitBoxMark}','{model.Origin}','0','{model.CreateUser}');";
                //sqlString = "Insert into BllBoxInfo (BoxNo,BoxNo2,BoxNo3,SkuNo,SkuName,LotNo,LotText,";
                //sqlString += "Qty,FullQty,ProductionTime,ExpirationTime,InspectMark,InspectStatus,BitBoxMark,Origin,Status,CreateUser) values ( ";
                //sqlString += $"'{model.BoxNo}','{model.BoxNo2}','{model.BoxNo3}','{model.SkuNo}', ";
                //sqlString += $"'{materialModel[0].SkuName}','{model.LotNo}','{model.LotText}','{model.Qty}','{materialModel[0].FullQty}',";
                //sqlString += $"'{model.ProductionTime}','{model.ExpirationTime}','{model.InspectMark}','{sku.IsInspect}','{model.BitBoxMark}" +
                //    $"','{model.Origin}','0','{model.CreateUser}');";
                //rowCount = Db.Ado.ExecuteCommand(sqlString);
                rowCount = Db.Ado.ExecuteCommand(sqlString);
                BllBoxInfo newboxModel = new BllBoxInfo()
                {
                    BoxNo=model.BoxNo,
                    BoxNo2 = model.BoxNo2,
                    BoxNo3 = model.BoxNo3,
                    SkuNo = model.SkuNo,
                    SkuName = materialModel[0].SkuName,
                    LotNo = model.LotNo,
                    LotText = model.LotText,
                    Qty = (decimal)model.Qty,
                    FullQty = materialModel[0].FullQty,
                    ProductionTime = DateTime.Parse(model.ProductionTime),
                    ExpirationTime = model.ExpirationTime,
                    InspectMark = model.InspectMark,
                    InspectStatus = sku.IsInspect,
                    BitBoxMark = model.BitBoxMark,
                    Origin = model.Origin,
                    Status = "0",
                    CreateUser = (int)model.CreateUser
                };
                var rowCount = Db.Insertable(newboxModel).ExecuteCommand();
                if (rowCount <= 0)
                {
                    strMessage = "-1:添加失败!";
@@ -203,15 +249,23 @@
                //开启事务
                Db.Ado.BeginTran();
                // 删除明细单
                sqlString += $"UPDATE BllBoxInfo SET IsDel = '1',";
                sqlString += $"UpdateTime = GETDATE(),UpdateUser = '{model.CreateUser}' ";
                sqlString += $"WHERE Id = '{model.Id}' and Status = '0';";
                //sqlString += $"UPDATE BllBoxInfo SET IsDel = '1',";
                //sqlString += $"UpdateTime = GETDATE(),UpdateUser = '{model.CreateUser}' ";
                //sqlString += $"WHERE Id = '{model.Id}' and Status = '0';";
                int rowCount = Db.Ado.ExecuteCommand(sqlString);
                if (rowCount <= 0)
                //int rowCount = Db.Ado.ExecuteCommand(sqlString);
                var boxModel = Db.Queryable<BllBoxInfo>().First(m => m.Id == model.Id && m.Status == "0");
                if (boxInfo.Status != "0")
                {
                    return "-1:状态已变更无法删除!";
                }
                boxInfo.IsDel = "1";
                boxInfo.UpdateTime = DateTime.Now;
                boxInfo.UpdateUser = model.CreateUser;
                var boxInfoList = Db.Queryable<BllBoxInfo>().Where(m => m.IsDel == "0" && m.BoxNo == boxInfo.BoxNo && m.Id != model.Id).ToList();
                if (boxInfoList.Count != 0)
                {
@@ -221,15 +275,11 @@
                        {
                            continue;
                        }
                        var sql = $"update BllBoxInfo SET BitBoxMark = '1' Where id = {item.Id}";
                        int rowCount2 = Db.Ado.ExecuteCommand(sql);
                        if (rowCount2 <= 0)
                        {
                            throw new Exception("-1:状态已变更无法删除!");
                        }
                        item.BitBoxMark = "1";
                    }
                }
                Db.Updateable(boxInfo).ExecuteCommand();
                Db.Updateable(boxInfoList).ExecuteCommand();
                Db.Ado.CommitTran();
                new OperationASNServer().AddLogOperationAsn("入库作业", "箱支录入", boxInfo.BoxNo3, "删除", $"删除了箱码:{boxInfo.BoxNo}、追溯码:{boxInfo.BoxNo3}的箱支物料信息", Convert.ToInt32(model.CreateUser));
Wms/WMS.Entity/BllAsnEntity/BllArrivalNoticeDetail.cs
@@ -59,19 +59,21 @@
        /// Nullable:False
        /// </summary>           
        public decimal Qty {get;set;}
        /// <summary>
        /// Desc:已组数量
        /// Default:0
        /// Nullable:True
        /// </summary>
        /// </summary>
        [SugarColumn(DefaultValue = "0")]
        public decimal? FactQty {get;set;}
        /// <summary>
        /// Desc:入库数量
        /// Default:0
        /// Nullable:True
        /// </summary>
        /// </summary>
        [SugarColumn(DefaultValue = "0")]
        public decimal? CompleteQty {get;set;}
        /// <summary>
Wms/Wms/Controllers/BllAsnController.cs
@@ -168,6 +168,10 @@
                {
                    throw new Exception("未获取到用户信息");
                }
                if (string.IsNullOrWhiteSpace(model.ASNNo))
                {
                    throw new Exception("单据号不可为null!");
                }
                model.CreateUser = int.Parse(UserId);
                string strMesage = _arrivalNoticeSvc.EditArrivalNotice(model);