bklLiudl
2024-09-02 9885a8a2f98104f5ee63dd5ab8023095a1d8b9f6
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,8 @@
                    CompleteTime = tb1.CompleteTime,
                    CreateTime = tb1.CreateTime,
                    CreateUserName = tb3.RealName,
                    UpdateTime = tb1.UpdateTime.ToString(),
                    UserName=tb1.UserName,
                    UpdateTime = ((DateTime)tb1.UpdateTime).ToString("yyyy-MM-dd HH:mm:ss"),
                    UpdateUserName = tb4.RealName
                }).ToPageListAsync(model.Page, model.Limit, count);
@@ -95,9 +93,9 @@
                .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)
                .LeftJoin<SysMaterials>((tb1, tb2, tb3, tb4,tb5) => tb1.SkuNo == tb5.SkuNo && tb5.IsDel == "0")
                .LeftJoin<SysUnit>((tb1, tb2, tb3, tb4, tb5,tb6) => tb5.UnitNo == tb6.UnitNo && tb6.IsDel == "0")
                .LeftJoin<SysPackag>((tb1, tb2, tb3, tb4, tb5, tb6,tb7) => tb1.PackagNo == tb7.PackagNo && tb7.IsDel == "0")
                .Select((tb1, tb2, tb3, tb4, tb5,tb6, tb7) => new ArrivalNoticeDetailDto()
                 {
                     Id = tb1.Id,
@@ -121,6 +119,8 @@
                     Status = tb1.Status,
                     AsnType = tb2.Type,
                     AsnStatus = tb2.Status,
                     Lot1 = tb1.Lot1,
                     Lot2 = tb1.Lot2,
                     UDF1 = tb1.UDF1,
                     UDF2 = tb1.UDF2,
                     UDF3 = tb1.UDF3,
@@ -129,8 +129,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 +165,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 +212,6 @@
                    .Includes(x => x.UnitInfo)
                    .Includes(x => x.PackagInfo)
                    .ToList();
                return data.Select(m => new MaterialsDto()
                {
@@ -266,10 +247,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 +277,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 +310,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 +350,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 +369,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 +453,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 +485,17 @@
                    {
                        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>();
                    var maxLotNo = "";
                    foreach (ArrivalNoticeDetailVm detailModel in detailModels)
                    {
                        if (string.IsNullOrEmpty(detailModel.SkuNo))
@@ -490,10 +522,21 @@
                            }
                        }
                        if (TypeLot.Contains(model.Type))
                        {
                            if (string.IsNullOrWhiteSpace(detailModel.Lot1))
                            {
                                throw new Exception("生产日期不可为空!");
                            }
                            if (string.IsNullOrWhiteSpace(detailModel.Lot2))
                            {
                                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);
                        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:物料和批次号重复;";
@@ -508,7 +551,10 @@
                        if (detailModel.Id == 0 || detailModel.Id == null || string.IsNullOrWhiteSpace(detailModel.LotNo))
                        {
                            var notice = Db.Queryable<BllArrivalNotice>().Where(m => m.IsDel == "0" && TypeLot.Contains(m.Type)).Select(m => m.ASNNo).ToList();
                            var maxLotNo = Db.Queryable<BllArrivalNoticeDetail>().Where(m=>m.IsDel == "0" && !string.IsNullOrWhiteSpace(m.LotNo) && notice.Contains(m.ASNNo)).Max(m=>m.LotNo);
                            if (string.IsNullOrWhiteSpace(maxLotNo))
                            {
                                maxLotNo = Db.Queryable<BllArrivalNoticeDetail>().Where(m => m.IsDel == "0" && !string.IsNullOrWhiteSpace(m.LotNo) && notice.Contains(m.ASNNo)).Max(m => m.LotNo);
                            }
                            if (string.IsNullOrWhiteSpace(maxLotNo))
                            {
                                maxLotNo = toDayTime.Substring(2, 6) + "0001";
@@ -538,13 +584,35 @@
                            }
                            // 计算出总金额
                            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",
                                Lot1 = detailModel.Lot1,
                                Lot2 = detailModel.Lot2,
                                UDF1 = detailModel.UDF1,
                                UDF2 = detailModel.UDF2,
                                UDF3 = detailModel.UDF3,
                                UDF4 = detailModel.UDF4,
                                UDF5 = detailModel.UDF5,
                                CreateUser=(int)model.CreateUser
                            };
                            addDetails.Add(addModel);
                        }
                        else
                        {
@@ -557,6 +625,8 @@
                                             && it.SupplierLot == detailModel.SupplierLot
                                             && it.IsBale == detailModel.IsBale
                                             && it.IsBelt == detailModel.IsBelt
                                             && it.Lot1 == detailModel.Lot1                                 // 生产日期
                                             && it.Lot2 == detailModel.Lot2                                 // 过期日期
                                             && it.UDF1 == detailModel.UDF1
                                             && it.UDF2 == detailModel.UDF2
                                             && it.UDF3 == detailModel.UDF3
@@ -566,14 +636,15 @@
                            {
                                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)
                                    {
                                        strMessage = "-1:当前单据类型不可更改批次,只可编辑数量;";
                                        strMessage = "-1:当前单据类型不可更改批次;";
                                        continue;
                                    }
                                }
@@ -581,24 +652,41 @@
                            }
                            // 计算出总金额
                            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.Lot1 = detailModel.Lot1;
                            dbDetail.Lot2 = detailModel.Lot2;
                            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 +710,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 +722,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 +780,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 +793,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 = "1";
                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 +828,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 +842,7 @@
                throw new Exception(ex.Message);
            }
        }
        //关闭入库单
        public string CloseArrivalNotice(int id, int userId)
        {
@@ -751,29 +853,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)
                {
@@ -783,12 +895,16 @@
                #region 采购计划,若是采购订单根据采购计划单自动生成入库单信息
                if (notice.Type == "1" && !string.IsNullOrEmpty(notice.OrderCode))
                {
                    // 获取采购总单信息
                    var planOrd = Db.Queryable<BllProcurePlanNotice>().First(it => it.OrderCode == notice.OrderCode && it.IsDel == "0");
                    //入库单明细
                    var noticeDetailList = Db.Queryable<BllArrivalNoticeDetail>().Where(m => m.IsDel == "0" && m.ASNNo == notice.ASNNo).ToList();
                    var noticeDetailList = Db.Queryable<BllArrivalNoticeDetail>()
                        .Where(m => m.IsDel == "0" && m.ASNNo == notice.ASNNo).ToList();
                    foreach (var item in noticeDetailList)
                    {
                        //采购单明细
                        var planDetail = Db.Queryable<BllProcurePlanNoticeDetail>().First(it => it.OrderDetailCode == item.OrderDetailCode && it.IsDel == "0");
                        var planDetail = Db.Queryable<BllProcurePlanNoticeDetail>()
                            .First(it => it.ParentId == planOrd.Id && it.SkuNo == item.SkuNo && it.IsDel == "0");
                        planDetail.CompleteQty += item.CompleteQty;
                        if (planDetail.CompleteQty >= planDetail.Qty)
                        {
@@ -801,8 +917,7 @@
                        }
                        Db.Updateable(planDetail).ExecuteCommand();
                    }
                    //采购总单信息
                    var planOrd = Db.Queryable<BllProcurePlanNotice>().First(it => it.OrderCode == notice.OrderCode && it.IsDel == "0");
                    // 维护采购总单信息
                    var planDetailNum = Db.Queryable<BllProcurePlanNoticeDetail>().Count(m => m.IsDel == "0" && m.ParentId == planOrd.Id && m.Status != "2");
                    if (planDetailNum == 0)
                    {
@@ -819,7 +934,8 @@
                        }
                    }
                    //采购单明细
                    var planDetailList = Db.Queryable<BllProcurePlanNoticeDetail>().Where(it => it.ParentId == planOrd.Id && it.IsDel == "0" && it.CompleteQty < it.Qty).ToList();
                    var planDetailList = Db.Queryable<BllProcurePlanNoticeDetail>()
                        .Where(it => it.ParentId == planOrd.Id && it.IsDel == "0" && it.CompleteQty < it.Qty).ToList();
                    foreach (var item in planDetailList)
                    {
                        //判断有无正在执行的
@@ -842,7 +958,7 @@
                        }
                        // 入库总表信息
                        string asnNo = new Common().GetMaxNo("ASN");
                        var asnModel = new BllArrivalNotice()
                        var asnModel1 = new BllArrivalNotice()
                        {
                            ASNNo = asnNo,
                            Status = "0",//执行状态,0:等待执行
@@ -854,7 +970,7 @@
                            CreateUser = 0
                        };
                        // 插入入库总表信息
                        Db.Insertable(asnModel).ExecuteCommand();
                        Db.Insertable(asnModel1).ExecuteCommand();
                        //入库单明细
                        var arrDetailModel = new BllArrivalNoticeDetail()
                        {
@@ -1098,6 +1214,7 @@
                    CustomerNo = model.Customer,
                    CustomerName = CustomerModel.CustomerName,
                    OrderCode = model.OrderCode,
                    UserName = model.Username
                };
                // 入库明细表信息