yuyou_x
2024-03-16 ecb386a4201213c6635f28f9e9e02e3faf217b51
Wms/WMS.BLL/BllAsnServer/BllBoxInfoServer.cs
@@ -264,7 +264,7 @@
                  .AndIF(!string.IsNullOrWhiteSpace(model.ProductionTime), it => it.ProductionTime >= Convert.ToDateTime(model.ProductionTime))
                  .AndIF(!string.IsNullOrWhiteSpace(model.InspectMark), it => it.InspectMark == model.InspectMark.Trim())
                  .AndIF(!string.IsNullOrWhiteSpace(model.BitBoxMark), it => it.BitBoxMark == model.BitBoxMark.Trim())
                  .AndIF(!string.IsNullOrWhiteSpace(model.Origin), it => it.Origin == model.Origin.Trim())
                  .AndIF(!string.IsNullOrWhiteSpace(model.Origin), it => model.Origin.Trim().Contains(it.Origin))
                  .And(m => m.SkuNo != "100099" && m.IsDel == "0" && m.Status == "0")
                  .ToExpression();//注意 这一句 不能少
                var total = 0;
@@ -412,10 +412,10 @@
                    .AndIF(!string.IsNullOrWhiteSpace(model.SkuNo), it => it.SkuNo.Contains(model.SkuNo.Trim()))
                    .AndIF(!string.IsNullOrWhiteSpace(model.LotNo), it => it.LotNo.Contains(model.LotNo.Trim()))
                    .AndIF(!string.IsNullOrWhiteSpace(model.SupplierLot), it => it.SupplierLot.Contains(model.SupplierLot.Trim()))
                    .AndIF(!string.IsNullOrWhiteSpace(model.Status), it => it.Status == model.SupplierLot)
                    .AndIF(!string.IsNullOrWhiteSpace(model.Status), it => it.Status == model.Status)
                    .AndIF(!string.IsNullOrWhiteSpace(model.ProductionTime), it => it.ProductionTime >= Convert.ToDateTime(model.ProductionTime))
                    .AndIF(!string.IsNullOrWhiteSpace(model.ProductionTime), it => it.ProductionTime <= Convert.ToDateTime(model.ProductionTime).AddDays(1))
                    .And(it => it.IsDel == "0")
                    .And(it => it.IsDel == "0" && it.Origin == "WMS生成")
                    .ToExpression();
                
                var total = 0;
@@ -529,7 +529,7 @@
        }
        //获取标签信息(生成标签)
        public List<BllBoxInfo> AddLabelBox(int imId, string isReset, decimal arriveQty, string productionTime, string expirationTime, string storeTime, int userId)
        public List<BllBoxInfo> AddLabelBox(int imId, string isReset, decimal arriveQty, string productionTime, string expirationTime, string storeTime,string supplierLot, int userId)
        {
            try
            { 
@@ -576,7 +576,7 @@
                    packStr += "-" + pack.L5Num + "/" + pack.L5Name;
                }
                //标签表
                var label = Db.Queryable<BllBoxInfo>().Where(m => m.IsDel == "0" && m.ASNDetailNo == imId).ToList();
                var label = Db.Queryable<BllBoxInfo>().Where(m => m.IsDel == "0" && m.Origin == "WMS生成").ToList();
                #endregion
@@ -605,36 +605,44 @@
                    zNum = Convert.ToInt32(pack.L1Num);
                }
                if (packLevel <= 1)//包装等级小于1,按照1级标签打印
                if (packLevel < 1)//包装等级小于1,按照1级标签打印
                {
                    throw new Exception("包装信息有误,小于一级");
                }
                #endregion
                var modelList = new List<BllBoxInfo>();
                var addLotNo = "";
                if (arriveQty <= 0)
                {
                    throw new Exception("到货数量不能小于等于0!");
                }
                Db.BeginTran();
                if (packLevel == 1)
                {
                    #region 一级包装
                    // 根据用户输入的箱数量计算需要的条码数
                    var labQty = label.Sum(m => m.Qty);
                    var qty = asnList.Qty - labQty;//当前单据剩余需要打印的物料数量(不是标签数量)
                    if (qty <= 0)
                    {
                        throw new Exception("当前单据物料标签已打印完毕,如有需要请补打");
                    }
                    //var labQty = label.Sum(m => m.Qty);
                    //var qty = asnList.Qty - labQty;//当前单据剩余需要打印的物料数量(不是标签数量)
                    //if (qty <= 0)
                    //{
                    //    throw new Exception("当前单据物料标签已打印完毕,如有需要请补打");
                    //}
                    #region 到货数量
                    if (arriveQty - qty > 0)
                    {
                        throw new Exception("到货数量大于未打标签数量,请重新输入到货数量并核实!");
                    }
                    else
                    {
                        qty = arriveQty;
                    }
                    //if (arriveQty - qty > 0)
                    //{
                    //    throw new Exception("到货数量大于未打标签数量,请重新输入到货数量并核实!");
                    //}
                    //else
                    //{
                    //    qty = arriveQty;
                    //}
                    var qty = arriveQty;
                    #endregion
                    int labelNum = 1; //生产条码数量
@@ -653,23 +661,39 @@
                    string maxBoxCode = ""; //箱码号
                    // 生成自编批号
                    string toDayTime = DateTime.Now.ToString("yyyyMMdd");
                    var maxLotNo = label.Max(a => a.LotNo);
                    var maxBoxNo = label.Max(a => a.BoxNo);
                    if (isReset == "0")
                    {
                        maxLotNoStr = maxLotNo;
                        maxBoxCode = maxBoxNo;
                        if (string.IsNullOrWhiteSpace(maxLotNoStr))
                        //判断单据是否是余料退回单
                        if (asn.Type == "4")
                        {
                            maxLotNoStr = toDayTime.Substring(2, 6) + "0001";
                            maxLotNoStr = asnList.LotNo;
                            maxBoxCode = label.Where(m=>m.LotNo == maxLotNoStr).Max(a => a.BoxNo);
                            if (string.IsNullOrWhiteSpace(maxLotNoStr))
                            {
                                throw new Exception("车间余料退回单据批次不能为空");
                            }
                        }
                        else
                        {
                            var labelCount = label.Where(m => m.ASNDetailNo == imId).ToList();
                            if (labelCount.Count <= 0)
                            {
                                throw new Exception("当前单据明细还未生成标签,请选择重置批次选项为‘是’;");
                            }
                            maxLotNoStr = labelCount.Max(a => a.LotNo);
                            if (string.IsNullOrWhiteSpace(maxLotNoStr))
                            {
                                maxLotNoStr = toDayTime.Substring(2, 6) + "0001";
                            }
                            maxBoxCode = label.Where(m => m.LotNo == maxLotNoStr).Max(a => a.BoxNo);
                        }
                    }
                    else
                    {
                        var maxCode = Db.Queryable<BllLabelBoxNo>().Max(a => a.LotNo);                        // 获取今天最大批次号
                        var maxCode = Db.Queryable<BllBoxInfo>().Where(m=>m.Origin == "WMS生成").Max(a => a.LotNo);                        // 获取今天最大批次号
                        if (string.IsNullOrWhiteSpace(maxCode))
                        {
                            maxLotNoStr = toDayTime.Substring(2, 6) + "0001";
@@ -690,9 +714,10 @@
                        }
                    }
                    addLotNo = maxLotNoStr;
                    #endregion
                    for (int i = 1; i <= labelNum; i++)
                    {
@@ -716,7 +741,7 @@
                        }
                        //获取箱码
                        if (maxBoxCode == "")
                        if (string.IsNullOrWhiteSpace(maxBoxCode))
                        {
                            var str = "B"+maxLotNoStr + "000001"; //批号+ 流水  2302010001000001
                            maxBoxCode = str;
@@ -740,7 +765,7 @@
                            LotNo = maxLotNoStr,
                            Standard = asnList.Standard,
                            PackageStandard = packStr,
                            SupplierLot = asnList.SupplierLot,
                            SupplierLot = supplierLot,
                            InspectMark = "0",
                            BitBoxMark = bNum > boxQty ? "1":"0",
                            InspectStatus = "",
@@ -765,25 +790,27 @@
                    #region 二级包装
                    // 根据用户输入的箱数量计算需要的条码数
                    var labQty = label.Sum(m => m.Qty);
                    var qty2 = asnList.Qty - labQty;
                    if (qty2 <= 0)
                    {
                        throw new Exception("当前单据物料标签已打印完毕,如有需要请补打");
                    }
                    //var labQty = label.Sum(m => m.Qty);
                    //var qty2 = asnList.Qty - labQty;
                    //if (qty2 <= 0)
                    //{
                    //    throw new Exception("当前单据物料标签已打印完毕,如有需要请补打");
                    //}
                    #region 增加到货数量
                    if (arriveQty - qty2 > 0)
                    {
                        throw new Exception("到货数量大于未打标签数量,请重新输入到货数量!");
                    }
                    else
                    {
                        qty2 = arriveQty;
                    }
                    //if (arriveQty - qty2 > 0)
                    //{
                    //    throw new Exception("到货数量大于未打标签数量,请重新输入到货数量!");
                    //}
                    //else
                    //{
                    //    qty2 = arriveQty;
                    //}
                    #endregion
                    var qty2 = arriveQty;
                    int labelNum2 = 1; //生产箱条码数量
                    labelNum2 = int.Parse(Math.Ceiling(qty2 / bNum).ToString());
@@ -802,20 +829,38 @@
                    string toDayTime2 = DateTime.Now.ToString("yyyyMMdd");
                    if (isReset == "0")
                    {
                        var maxCode = label.Max(a => a.LotNo);
                        var boxCode1 = label.Max(a => a.BoxNo);//箱号
                        var boxCode2 = label.Max(a => a.BoxNo3);//支号
                        maxCodestr2 = maxCode;
                        maxboxcode2 = boxCode1;
                        maxboxcode3 = boxCode2;
                        if (string.IsNullOrWhiteSpace(maxCodestr2))
                        //判断单据是否是余料退回单
                        if (asn.Type == "4")
                        {
                            maxCodestr2 = toDayTime2.Substring(2, 6) + "0001";
                            maxCodestr2 = asnList.LotNo;
                            maxboxcode2 = label.Where(m => m.LotNo == maxCodestr2).Max(a => a.BoxNo);
                            maxboxcode3 = label.Where(m => m.LotNo == maxCodestr2).Max(a => a.BoxNo3);//支号
                            if (string.IsNullOrWhiteSpace(maxCodestr2))
                            {
                                throw new Exception("车间余料退回单据批次不能为空");
                            }
                        }
                        else
                        {
                            var labelCount = label.Where(m => m.ASNDetailNo == imId).ToList();
                            if (labelCount.Count <= 0)
                            {
                                throw new Exception("当前单据明细还未生成标签,请选择重置批次选项为‘是’;");
                            }
                            maxCodestr2 = labelCount.Max(a => a.LotNo); ;
                            if (string.IsNullOrWhiteSpace(maxCodestr2))
                            {
                                maxCodestr2 = toDayTime2.Substring(2, 6) + "0001";
                            }
                            maxboxcode2 = label.Where(m => m.LotNo == maxCodestr2).Max(a => a.BoxNo);//箱号;
                            maxboxcode3 = label.Where(m => m.LotNo == maxCodestr2).Max(a => a.BoxNo3);//支号;
                        }
                    }
                    else
                    {
                        var maxCode = Db.Queryable<BllLabelBoxNo>().Max(a => a.LotNo);                        // 获取今天最大批次号
                        var maxCode = Db.Queryable<BllBoxInfo>().Where(m => m.Origin == "WMS生成").Max(a => a.LotNo);                        // 获取今天最大批次号
                        if (string.IsNullOrWhiteSpace(maxCode))
                        {
                            maxCodestr2 = toDayTime2.Substring(2, 6) + "0001";
@@ -836,9 +881,10 @@
                        }
                    }
                    addLotNo = maxCodestr2;
                    #endregion
                    for (int i = 1; i <= labelNum2; i++)//箱码标签
                    {
@@ -863,7 +909,7 @@
                        }
                        //获取箱码
                        if (maxboxcode2 == "")
                        if (string.IsNullOrWhiteSpace(maxboxcode2))
                        {
                            maxboxcode2 = "B"+maxCodestr2 + "000001"; // 箱号     批号+第几箱
                        }
@@ -907,7 +953,7 @@
                                }
                            }
                            
                            if (maxboxcode3 == "")
                            if (string.IsNullOrWhiteSpace(maxboxcode3))
                            {
                                maxboxcode3 = "Z"+maxCodestr2 + "0001"; // 支号     批号+第几箱 
                            }
@@ -916,6 +962,9 @@
                                maxboxcode3 = maxboxcode3.Substring(0, 11) + (int.Parse(maxboxcode3.Substring(11, 4)) + 1).ToString().PadLeft(4, '0'); 
                            }
                            var ssss = d.ToString("0");
                            var sss = int.Parse(ssss);
                            // 将条码保存到原料条码表
                            var labelModel = new BllBoxInfo()
                            {
@@ -923,7 +972,7 @@
                                ASNDetailNo = asnList.Id,
                                BoxNo = maxboxcode2,
                                BoxNo3 = maxboxcode3,
                                Qty = int.Parse(d.ToString()),
                                Qty = sss,
                                FullQty = bNum,
                                Status = "0",
                                SkuNo = asnList.SkuNo,
@@ -954,7 +1003,20 @@
                    #endregion
                }
                if (string.IsNullOrWhiteSpace(asnList.LotNo))
                {
                    asnList.LotNo = addLotNo;
                    Db.Updateable(asnList).ExecuteCommand();
                }
                else
                {
                    if (!asnList.LotNo.Contains(addLotNo))
                    {
                        asnList.LotNo += ";" + addLotNo;
                        Db.Updateable(asnList).ExecuteCommand();
                    }
                }
                Db.CommitTran();
                return modelList;
@@ -962,6 +1024,7 @@
            }
            catch (Exception e)
            {
                Db.RollbackTran();
                throw new Exception(e.Message);
            }
        }
@@ -1014,7 +1077,7 @@
                            model.BoxNo = data.BoxNo;                 // 箱号     
                            model.ImgStr = BarcodeHelper.GetCodeBarBase64(model.BoxNo,100, 25);
                            model.ImgStr = BarcodeHelper.GetCodeBarBase64(model.BoxNo,160, 40,false);
                            // 添加到list集合
                            printModelList.Add(model);
@@ -1069,7 +1132,7 @@
                                model.BoxNo = data.BoxNo;                 // 箱号     
                                model.ImgStr = BarcodeHelper.GetCodeBarBase64(model.BoxNo, 100, 25);
                                model.ImgStr = BarcodeHelper.GetCodeBarBase64(model.BoxNo, 160, 40, false);
                                // 添加到list集合
                                printModelList.Add(model);
@@ -1121,7 +1184,7 @@
                            model.BoxNo = data.BoxNo3;                 // 支号     
                            model.ImgStr = BarcodeHelper.GetCodeBarBase64(model.BoxNo, 100, 25);
                            model.ImgStr = BarcodeHelper.GetCodeBarBase64(model.BoxNo, 160, 40, false);
                            // 添加到list集合
                            printModelList.Add(model);
@@ -1173,7 +1236,7 @@
                                model.BoxNo = data.BoxNo3;                 // 箱号     
                                model.ImgStr = BarcodeHelper.GetCodeBarBase64(model.BoxNo, 100, 25);
                                model.ImgStr = BarcodeHelper.GetCodeBarBase64(model.BoxNo, 160, 40, false);
                                // 添加到list集合
                                printModelList.Add(model);
@@ -1237,7 +1300,7 @@
                                    model1.Qty = dataList.Sum(m=>m.Qty);// 数量
                                    model1.BoxNo = data.BoxNo;                 // 箱号     
                                    model1.ImgStr = BarcodeHelper.GetCodeBarBase64(model1.BoxNo, 100, 25);
                                    model1.ImgStr = BarcodeHelper.GetCodeBarBase64(model1.BoxNo, 160, 40, false);
                                    // 添加到list集合
                                    printModelList.Add(model1);
@@ -1256,7 +1319,7 @@
                                    model.Qty = data.Qty;// 数量
                                    model.BoxNo = data.BoxNo3;                 // 支号     
                                    model.ImgStr = BarcodeHelper.GetCodeBarBase64(model.BoxNo, 100, 25);
                                    model.ImgStr = BarcodeHelper.GetCodeBarBase64(model.BoxNo, 160, 40, false);
                                    // 添加到list集合
                                    printModelList.Add(model);
@@ -1303,7 +1366,7 @@
                                    model.Qty = data.Sum(m => m.Qty);     // 数量
                                    model.BoxNo = boxData.BoxNo;                 // 支号     
                                    model.ImgStr = BarcodeHelper.GetCodeBarBase64(model.BoxNo, 100, 25);
                                    model.ImgStr = BarcodeHelper.GetCodeBarBase64(model.BoxNo, 160, 40, false);
                                    // 添加到list集合
                                    printModelList.Add(model);
@@ -1325,7 +1388,7 @@
                                        model1.Qty = item.Qty;// 数量
                                        model1.BoxNo = item.BoxNo3;                 // 支号     
                                        model.ImgStr = BarcodeHelper.GetCodeBarBase64(model1.BoxNo, 100, 25);
                                        model.ImgStr = BarcodeHelper.GetCodeBarBase64(model1.BoxNo, 160, 40, false);
                                        // 添加到list集合
                                        printModelList.Add(model);
@@ -1371,7 +1434,7 @@
                                model.Qty = data.Sum(m => m.Qty);     // 数量
                                model.BoxNo = boxData.BoxNo;                 // 支号     
                                model.ImgStr = BarcodeHelper.GetCodeBarBase64(model.BoxNo, 100, 25);
                                model.ImgStr = BarcodeHelper.GetCodeBarBase64(model.BoxNo, 160, 40, false);
                                // 添加到list集合
                                printModelList.Add(model);
@@ -1395,7 +1458,7 @@
                                        model1.Qty = item.Qty;     // 数量
                                        model1.BoxNo = item.BoxNo3;                 // 支号     
                                        model1.ImgStr = BarcodeHelper.GetCodeBarBase64(model1.BoxNo, 100, 25);
                                        model1.ImgStr = BarcodeHelper.GetCodeBarBase64(model1.BoxNo, 160, 40, false);
                                        // 添加到list集合
@@ -1463,7 +1526,7 @@
                                model.Qty = data.Sum(m => m.Qty);     // 数量
                                model.BoxNo = boxData.BoxNo;                 // 支号     
                                model.ImgStr = BarcodeHelper.GetCodeBarBase64(model.BoxNo, 100, 25);
                                model.ImgStr = BarcodeHelper.GetCodeBarBase64(model.BoxNo, 160, 40, false);
                                // 添加到list集合
                                printModelList.Add(model);
@@ -1491,7 +1554,7 @@
                                        model1.Qty = item.Qty;// 数量
                                        model1.BoxNo = item.BoxNo3;                 // 支号     
                                        model.ImgStr = BarcodeHelper.GetCodeBarBase64(model1.BoxNo, 100, 25);
                                        model1.ImgStr = BarcodeHelper.GetCodeBarBase64(model1.BoxNo, 160, 40, false);
                                        // 添加到list集合
                                        printModelList.Add(model1);
@@ -1522,9 +1585,6 @@
                #endregion
                //dataContext.WmsLabelPrintLog.InsertAllOnSubmit(printlog);
                //    dataContext.SubmitChanges();
                //    return printModel;
                return printModelList;
            }
            catch (Exception e)
@@ -1532,5 +1592,139 @@
                throw new Exception(e.Message);
            }
        }
        //根据入库单号过去单据下所有批次号
        public List<string> GetLotNoListByAsn(string asnNo)
        {
            try
            {
                var data = new List<string>();
                var asnList = Db.Queryable<BllArrivalNoticeDetail>().Where(m => m.IsDel == "0" && m.ASNNo == asnNo).ToList();
                if (asnList.Count == 0)
                {
                    throw new Exception("未查询到该单据号的信息");
                }
                foreach (var item in asnList)
                {
                    if (string.IsNullOrWhiteSpace(item.LotNo))
                    {
                        continue;
                    }
                    var strList = item.LotNo.Split(";");
                    foreach (var str in strList)
                    {
                        if (string.IsNullOrWhiteSpace(str))
                        {
                            continue;
                        }
                        data.Add(str);
                    }
                }
                return data;
            }
            catch (Exception e)
            {
                throw new Exception(e.Message);
            }
        }
        //删除单据下单个或多个批次的标签
        public void DelLabelByAsnNo(string asnNo,string lotNo, int userId)
        {
            try
            {
                var asnList = Db.Queryable<BllArrivalNoticeDetail>().Where(m => m.IsDel == "0" && m.ASNNo == asnNo).ToList();
                if (asnList.Count == 0)
                {
                    throw new Exception("未查询到该单据号的信息");
                }
                Db.BeginTran();
                //批次为空:当前单据下所有批次的标签全部删除; 有批次:伤处当前单据下当前批次的标签
                if (string.IsNullOrWhiteSpace(lotNo)) //删除全部标签
                {
                    var labelList = Db.Queryable<BllBoxInfo>().Where(m => m.IsDel == "0" && m.ASNNo == asnNo).ToList();
                    if (labelList.Count(m => m.Status != "0") >= 1)
                    {
                        throw new Exception("当前单据批次的标签已有已使用,不能删除");
                    }
                    foreach (var item in asnList)
                    {
                        if (string.IsNullOrWhiteSpace(item.LotNo))
                        {
                            continue;
                        }
                        item.LotNo = "";
                        Db.Updateable(item).ExecuteCommand();
                    }
                    Db.Deleteable(labelList).ExecuteCommand();
                }
                else  //删除固定批次标签
                {
                    var labelList = Db.Queryable<BllBoxInfo>().Where(m => m.IsDel == "0" && m.ASNNo == asnNo && m.LotNo == lotNo).ToList();
                    if (labelList.Count(m=>m.Status != "0") >= 1 )
                    {
                        throw new Exception("当前单据批次的标签已有已使用,不能删除");
                    }
                    foreach (var item in asnList)
                    {
                        if (string.IsNullOrWhiteSpace(item.LotNo) || item.LotNo!=lotNo)
                        {
                            continue;
                        }
                        var strList = item.LotNo.Split(";");
                        var updateLotNo = "";
                        foreach (var str in strList)
                        {
                            if (string.IsNullOrWhiteSpace(str) || str == lotNo)
                            {
                                continue;
                            }
                            if (string.IsNullOrWhiteSpace(updateLotNo))
                            {
                                updateLotNo = str;
                            }
                            else
                            {
                                updateLotNo += ";" + str;
                            }
                        }
                        item.LotNo = updateLotNo;
                        Db.Updateable(item).ExecuteCommand();
                    }
                    Db.Deleteable(labelList).ExecuteCommand();
                }
                Db.CommitTran();
                var msg = $"删除了单据号:{asnNo}";
                if (!string.IsNullOrWhiteSpace(lotNo))
                {
                    msg += $"、批次号:{lotNo}";
                }
                msg += "的标签信息";
                new OperationASNServer().AddLogOperationAsn("入库作业", "物料标签", asnNo, "删除", msg, userId);
            }
            catch (Exception e)
            {
                Db.RollbackTran();
                throw new Exception(e.Message);
            }
        }
    }
}