yyk
2024-07-18 bf1a9a818ffb721aea2709e9409fbb932b07e81d
Wms/WMS.BLL/BllAsnServer/ArrivalNoticeServer.cs
@@ -8,17 +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;
namespace WMS.BLL.BllAsnServer
{
@@ -34,114 +32,105 @@
        #endregion
        #region 事件方法
        public List<ArrivalNoticeDto> GetArrivalNoticeList(ArrivalNoticeVm model, out int count)
        public async Task<List<ArrivalNoticeDto>> GetArrivalNoticeList(ArrivalNoticeVm model, RefAsync<int> count)
        {
            string sqlString = string.Empty;
            string sqlCount = string.Empty;
            string sqlPub = string.Empty;
            try
            {
                sqlCount += "SELECT DISTINCT COUNT(tb1.ID) FROM BllArrivalNotice AS tb1 ";
                sqlString += "SELECT DISTINCT tb1.*,tb3.RealName as CreateUserName,tb4.RealName as UpdateUserName,tb5.RealName as CheckUserName FROM BllArrivalNotice AS tb1 ";
                sqlPub += "LEFT JOIN BllArrivalNoticeDetail AS tb2 ON tb1.ASNNo = tb2.ASNNo ";
                sqlPub += "LEFT JOIN SysUserInfor AS tb3 ON tb1.CreateUser = tb3.Id ";
                sqlPub += "LEFT JOIN SysUserInfor AS tb4 ON tb1.UpdateUser = tb4.Id ";
                sqlPub += "LEFT JOIN SysUserInfor AS tb5 ON tb1.CheckUser = tb5.Id ";
                sqlPub += $"WHERE tb1.ASNNo LIKE '%{model.ASNNo}%' AND tb2.LotNo LIKE '%{model.LotNo}%' ";
                sqlPub += $"AND tb2.SkuNo  LIKE '%{model.SkuNo}%' AND tb2.SkuName  LIKE '%{model.SkuName}%' ";
                sqlPub += $"AND tb1.CustomerName  LIKE '%{model.CustomerName}%' ";
                if (!string.IsNullOrEmpty(model.OrderCode))
            var modelList = await Db.Queryable<BllArrivalNotice,BllArrivalNoticeDetail, SysUserInfor, SysUserInfor,
                SysUserInfor>((tb1, tb2, tb3, tb4,tb5)  => new JoinQueryInfos(
                    JoinType.Left, tb1.ASNNo == tb2.ASNNo,
                    JoinType.Left, tb1.CreateUser == tb3.Id,
                    JoinType.Left, tb1.UpdateUser == tb4.Id,
                    JoinType.Left, tb1.CheckUser == tb5.Id))
                .WhereIF(!string.IsNullOrWhiteSpace(model.ASNNo), tb1 => tb1.ASNNo.Contains(model.ASNNo))
                .WhereIF(!string.IsNullOrWhiteSpace(model.LotNo), (tb1,tb2) => tb2.LotNo.Contains(model.LotNo))
                .WhereIF(!string.IsNullOrWhiteSpace(model.SkuNo), (tb1,tb2) => tb2.SkuNo.Contains(model.SkuNo))
                .WhereIF(!string.IsNullOrWhiteSpace(model.SkuName), (tb1,tb2) => tb2.SkuName.Contains(model.SkuName))
                .WhereIF(!string.IsNullOrWhiteSpace(model.CustomerName), tb1 => tb1.CustomerName.Contains(model.CustomerName))
                .WhereIF(!string.IsNullOrWhiteSpace(model.OrderCode), tb1 => tb1.OrderCode.Contains(model.OrderCode))
                .WhereIF(!string.IsNullOrWhiteSpace(model.Status), tb1 => tb1.Status == model.Status)
                .WhereIF(!string.IsNullOrWhiteSpace(model.Type), tb1 => tb1.Type == model.Type)
                .WhereIF(!string.IsNullOrWhiteSpace(model.StartTime), tb1 => tb1.CreateTime >= Convert.ToDateTime(model.StartTime))
                .WhereIF(!string.IsNullOrWhiteSpace(model.EndTime), tb1 => tb1.CreateTime <= Convert.ToDateTime(model.EndTime).AddDays(1))
                .WhereIF(!string.IsNullOrWhiteSpace(model.CustomerName), tb1 => tb1.CustomerName.Contains(model.CustomerName))
                .Where(tb1 => tb1.IsDel == "0")
                .OrderByDescending(tb1 => tb1.ASNNo)
                .Distinct()
                .Select((tb1, tb2, tb3, tb4, tb5) => new ArrivalNoticeDto()
                {
                    sqlPub += $"AND tb1.OrderCode LIKE '%{model.OrderCode}%' ";
                }
                if (!string.IsNullOrEmpty(model.Status))
                {
                    sqlPub += $"AND tb1.Status = '{model.Status}' ";
                }
                if (!string.IsNullOrEmpty(model.Type))
                {
                    if (model.Type == "3")
                    {
                        sqlPub += $"AND tb1.Type = '{model.Type}' ";
                    }
                    else
                    {
                        sqlPub += $"AND tb1.Type = '{model.Type}' AND tb1.Type != '3' ";
                    }
                }
                else
                {
                    sqlPub += " AND tb1.Type != '3'";
                    Id = tb1.Id,
                    ASNNo = tb1.ASNNo,
                    Type = tb1.Type,
                    Status = tb1.Status,
                    Origin = tb1.Origin,
                    CustomerNo = tb1.CustomerNo,
                    CustomerName = tb1.CustomerName,
                    LotNo = tb1.LotNo,
                    LotText = tb1.LotText,
                    CheckTime = ((DateTime)tb1.CheckTime).ToString("yyyy-MM-dd HH:mm:ss"),
                    CheckUserName = tb5.RealName,
                    SupplierLot = tb1.SupplierLot,
                    Demo = tb1.Demo,
                    OrderCode = tb1.OrderCode,
                    CompleteTime = tb1.CompleteTime,
                    CreateTime = tb1.CreateTime,
                    CreateUserName = tb3.RealName,
                    UpdateTime = ((DateTime)tb1.UpdateTime).ToString("yyyy-MM-dd HH:mm:ss"),
                    UpdateUserName = tb4.RealName
                }
                if (!string.IsNullOrEmpty(model.StartTime))
                {
                    sqlPub += $"AND tb1.CreateTime >= '{model.StartTime}' ";
                }
                if (!string.IsNullOrEmpty(model.EndTime))
                {
                    sqlPub += $"AND tb1.CreateTime <= '{model.EndTime}' ";
                }
                sqlCount += sqlPub + "AND tb1.IsDel = '0' ";
                sqlPub += "AND tb1.IsDel = '0' order by tb1.ASNNo desc ";
                if (model.Page == 0)
                {
                    model.Page = 1;
                }
                sqlString += sqlPub + $" offset {((model.Page - 1) * model.Limit)} rows fetch next {model.Limit} rows only;";
                }).ToPageListAsync(model.Page, model.Limit, count);
                var com = new Common();
                count = com.GetRowCount(sqlCount);
                var modelList = Db.Ado.SqlQuery<ArrivalNoticeDto>(sqlString);
                return modelList;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return modelList;
        }
        public List<ArrivalNoticeDetailDto> GetArrivalNoticeDetailList(ArrivalNoticeDetailVm model, out int count)
        public async Task<List<ArrivalNoticeDetailDto>> GetArrivalNoticeDetailList(ArrivalNoticeDetailVm model, RefAsync<int> count)
        {
            string sqlString = string.Empty;
            string sqlCount = string.Empty;
            int rowCount = 1;
            try
            {
                if (model.Page == 0)
                {
                    model.Page = 1;
                }
                sqlCount += $"SELECT COUNT(ID) FROM BllArrivalNoticeDetail where ASNNo = '{model.ASNNo}' and isdel = '0';";
                var com = new Common();
                count = com.GetRowCount(sqlCount);
                if (count != 0)
                {
                    rowCount = count;
                }
            var item = Expressionable.Create<BllArrivalNoticeDetail>()
                .AndIF(!string.IsNullOrWhiteSpace(model.ASNNo), it => it.ASNNo == model.ASNNo)
                .AndIF(true, it => it.IsDel == "0")
                .ToExpression();//注意 这一句 不能少
                sqlString += "SELECT DISTINCT tb1.*,tb2.Type as AsnType,tb2.Status as AsnStatus,tb3.RealName as CreateUserName, ";
                sqlString += "tb4.RealName as UpdateUserName,isnull(tb6.UnitName,tb5.UnitNo) as UnitName,tb7.PackagName,tb5.IsPasteCode ";
                sqlString += "FROM BllArrivalNoticeDetail AS tb1 ";
                sqlString += "LEFT JOIN BllArrivalNotice AS tb2 ON tb1.ASNNo = tb2.ASNNo ";
                sqlString += "LEFT JOIN SysUserInfor AS tb3 ON tb1.CreateUser = tb3.Id ";
                sqlString += "LEFT JOIN SysUserInfor AS tb4 ON tb1.UpdateUser = tb4.Id ";
                sqlString += "LEFT JOIN SysMaterials AS tb5 on tb1.SkuNo = tb5.SkuNo ";
                sqlString += "LEFT JOIN SysUnit AS tb6 on tb5.UnitNo = tb6.UnitNo ";
                sqlString += "LEFT JOIN SysPackag AS tb7 on tb1.PackagNo = tb7.PackagNo ";
                sqlString += $"WHERE tb1.ASNNo = '{model.ASNNo}' AND tb1.IsDel = '0' order by tb1.SkuNo desc ";
                sqlString += $"offset {((model.Page - 1) * model.Limit)} rows fetch next {rowCount} rows only;";
            var modelList = await Db.Queryable<BllArrivalNoticeDetail>().Where(item)
                .LeftJoin<BllArrivalNotice>((tb1, tb2) => tb1.ASNNo == tb2.ASNNo)
                .LeftJoin<SysUserInfor>((tb1, tb2,tb3) => tb1.CreateUser == tb3.Id)
                .LeftJoin<SysUserInfor>((tb1,tb2,tb3,tb4) => tb1.UpdateUser == tb4.Id)
                .LeftJoin<SysMaterials>((tb1, tb2, tb3, tb4,tb5) => tb1.SkuNo == tb5.SkuNo)
                .LeftJoin<SysUnit>((tb1, tb2, tb3, tb4, tb5,tb6) => tb5.UnitNo == tb6.UnitNo)
                .LeftJoin<SysPackag>((tb1, tb2, tb3, tb4, tb5, tb6,tb7) => tb1.PackagNo == tb7.PackagNo)
                .Select((tb1, tb2, tb3, tb4, tb5,tb6, tb7) => new ArrivalNoticeDetailDto()
                 {
                     Id = tb1.Id,
                     ASNNo = tb1.ASNNo,
                     SkuNo = tb1.SkuNo,
                     SkuName = tb1.SkuName,
                     Standard = tb1.Standard,
                     LotNo = tb1.LotNo,
                     LotText = tb1.LotText,
                     Qty = tb1.Qty,
                     FactQty = tb1.FactQty,
                     CompleteQty = tb1.CompleteQty,
                     IsSampling = tb1.IsSampling,
                     InspectStatus = tb1.InspectStatus,
                     PackagNo = tb1.PackagNo,
                     PackagName = tb7.PackagName,
                     UnitName = tb6.UnitName,
                     IsBale = tb1.IsBale,
                     IsBelt = tb1.IsBelt,
                     SupplierLot = tb1.SupplierLot,
                     Status = tb1.Status,
                     AsnType = tb2.Type,
                     AsnStatus = tb2.Status,
                     UDF1 = tb1.UDF1,
                     UDF2 = tb1.UDF2,
                     UDF3 = tb1.UDF3,
                     UDF4 = tb1.UDF4,
                     UDF5 = tb1.UDF5,
                     CompleteTime = tb1.CompleteTime,
                     CreateTime = tb1.CreateTime,
                     CreateUserName = tb3.RealName,
                     UpdateTime = ((DateTime)tb1.UpdateTime).ToString("yyyy-MM-dd HH:mm:ss"),
                    UpdateUserName = tb4.RealName
                 }).ToPageListAsync(model.Page, model.Limit, count);
                var modelList = Db.Ado.SqlQuery<ArrivalNoticeDetailDto>(sqlString);
                return modelList;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return modelList;
        }
        //获取入库单明细剩余打印数量
@@ -173,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;
                }
@@ -237,8 +209,6 @@
                    .Includes(x => x.UnitInfo)
                    .Includes(x => x.PackagInfo)
                    .ToList();
                return data.Select(m => new MaterialsDto()
                {
@@ -274,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
            {
@@ -299,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))
                        {
@@ -323,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))
@@ -364,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:物料和批次号重复;";
@@ -379,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));
@@ -435,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;
                    // 处理已删除的明细
@@ -465,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))
@@ -499,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:物料和批次号重复;";
@@ -546,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
                        {
@@ -574,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)
@@ -589,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)
                    {
@@ -630,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:入库单状态已变更,不可删除!";
@@ -644,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 "";
@@ -696,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)
                {
@@ -710,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)
                {
@@ -739,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)
@@ -749,6 +816,7 @@
                throw new Exception(ex.Message);
            }
        }
        //关闭入库单
        public string CloseArrivalNotice(int id, int userId)
        {
@@ -759,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)
                {
@@ -850,7 +928,7 @@
                        }
                        // 入库总表信息
                        string asnNo = new Common().GetMaxNo("ASN");
                        var asnModel = new BllArrivalNotice()
                        var asnModel1 = new BllArrivalNotice()
                        {
                            ASNNo = asnNo,
                            Status = "0",//执行状态,0:等待执行
@@ -862,7 +940,7 @@
                            CreateUser = 0
                        };
                        // 插入入库总表信息
                        Db.Insertable(asnModel).ExecuteCommand();
                        Db.Insertable(asnModel1).ExecuteCommand();
                        //入库单明细
                        var arrDetailModel = new BllArrivalNoticeDetail()
                        {