chengsc
2025-05-13 6167bf4c8fe617d9f9861585042149d48ad15dbb
Wms/WMS.BLL/BllPdaServer/PdaAsnServer.cs
@@ -22,6 +22,9 @@
using System.Xml.Schema;
using ZXing.OneD;
using System.Threading.Tasks;
using System.Security.Policy;
using Newtonsoft.Json;
using Utility.Tools;
namespace WMS.BLL.BllPdaServer
{
@@ -1720,7 +1723,7 @@
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public List<BoxInfoDto> GetBindBoxInfos(BoxInfoVm model)
        public List<BoxInfoDto> GetBindBoxInfos(BoxInfoVm model,string url)
        {
            try
            {
@@ -1728,27 +1731,307 @@
                {
                    throw new Exception("请扫描外箱条码!");
                }
                string sqlString = $@"SELECT
                                        ASNNo,
                                        BoxNo,
                                        SkuNo,
                                        SkuName,
                                        LotNo,
                                        BitBoxMark,
                                        SUM(Qty) as Qty
                                      FROM BllBoxInfo
                                      WHERE IsDel = '0'
                                        AND Status='0'
                                        AND BoxNo = '{model.BoxNo}'
                                      GROUP BY ASNNo,BoxNo,SkuNo,SkuName,LotNo,BitBoxMark; ";
                var models = Db.Ado.SqlQuery<BoxInfoDto>(sqlString);
                if (models.Count == 0)
                if (string.IsNullOrWhiteSpace(model.ASNNo))
                {
                    throw new Exception("箱码信息不存在!");
                    throw new Exception("请选择入库单号!");
                }
                var noticeList = Db.Queryable<BllArrivalNotice>().Where(m => m.IsDel == "0" && m.ASNNo == model.ASNNo).ToList();
                if (noticeList.Count != 1)
                {
                    throw new Exception("入库单号重复!");
                }
                var notice = noticeList.First();
                if (notice.Type == "0")  //成品入库
                {
                    string sqlString = $@"SELECT
                                            ASNNo,
                                            BoxNo,
                                            SkuNo,
                                            SkuName,
                                            LotNo,
                                            BitBoxMark,
                                            SUM(Qty) as Qty
                                          FROM BllBoxInfo
                                          WHERE IsDel = '0'
                                            AND Status='0'
                                            AND BoxNo = '{model.BoxNo}'
                                          GROUP BY ASNNo,BoxNo,SkuNo,SkuName,LotNo,BitBoxMark; ";
                    var models = Db.Ado.SqlQuery<BoxInfoDto>(sqlString);
                return models;
                    if (models.Count != 0)
                    {
                        return models;
                    }
                    else
                    {
                        var boxInfo = Db.Queryable<BllBoxInfo>().Where(m => m.IsDel == "0" && m.BoxNo == model.BoxNo).ToList();
                        if (boxInfo.Count == 0)
                        {
                            models = GetFMBindBoxInfos(model.BoxNo, url);
                            return models;
                        }
                        else
                        {
                            if (boxInfo.Count(m => m.Status != "0") > 0)
                            {
                                throw new Exception("箱码信息状态不是等待执行");
                            }
                            return models;
                        }
                    }
                }
                else if (notice.Type == "1" || notice.Type == "4") //采购入库
                {
                    string sqlString = $@"SELECT
                                            ASNNo,
                                            BoxNo,
                                            SkuNo,
                                            SkuName,
                                            LotNo,
                                            BitBoxMark,
                                            SUM(Qty) as Qty
                                          FROM BllBoxInfo
                                          WHERE IsDel = '0'
                                            AND Status='0'
                                            AND BoxNo = '{model.BoxNo}'
                                          GROUP BY ASNNo,BoxNo,SkuNo,SkuName,LotNo,BitBoxMark; ";
                    var models = Db.Ado.SqlQuery<BoxInfoDto>(sqlString);
                    if (models.Count != 0)
                    {
                        return models;
                    }
                    else
                    {
                        throw new Exception("没有查询到箱码信息");
                    }
                }
                else if (notice.Type == "3") //退货入库
                {
                    string sqlString = $@"SELECT
                                            ASNNo,
                                            BoxNo,
                                            SkuNo,
                                            SkuName,
                                            LotNo,
                                            BitBoxMark,
                                            SUM(Qty) as Qty
                                          FROM BllBoxInfo
                                          WHERE IsDel = '0'
                                            AND Status='0'
                                            AND BoxNo = '{model.BoxNo}'
                                          GROUP BY ASNNo,BoxNo,SkuNo,SkuName,LotNo,BitBoxMark; ";
                    var models = Db.Ado.SqlQuery<BoxInfoDto>(sqlString);
                    if (models.Count != 0)
                    {
                        return models;
                    }
                    else
                    {
                        sqlString = $@"SELECT
                                            ASNNo,
                                            BoxNo,
                                            SkuNo,
                                            SkuName,
                                            LotNo,
                                            BitBoxMark,
                                            SUM(Qty) as Qty
                                          FROM BllBoxInfo
                                          WHERE IsDel = '0'
                                            AND Status='0'
                                            AND BoxNo2 = '{model.BoxNo}'
                                          GROUP BY ASNNo,BoxNo,SkuNo,SkuName,LotNo,BitBoxMark; ";
                        models = Db.Ado.SqlQuery<BoxInfoDto>(sqlString);
                        if (models.Count != 0)
                        {
                            return models;
                        }
                        else
                        {
                            sqlString = $@"SELECT
                                            ASNNo,
                                            BoxNo,
                                            SkuNo,
                                            SkuName,
                                            LotNo,
                                            BitBoxMark,
                                            SUM(Qty) as Qty
                                          FROM BllBoxInfo
                                          WHERE IsDel = '0'
                                            AND Status='0'
                                            AND BoxNo3 = '{model.BoxNo}'
                                          GROUP BY ASNNo,BoxNo,SkuNo,SkuName,LotNo,BitBoxMark; ";
                            models = Db.Ado.SqlQuery<BoxInfoDto>(sqlString);
                            if (models.Count != 0)
                            {
                                return models;
                            }
                        }
                    }
                    #region 获取最后一次出库拣货中的箱码信息
                    var comBox = Db.Queryable<BllCompleteDetail>().Where(m => m.IsDel == "0" && m.BoxNo == model.BoxNo).GroupBy(m => m.ExportAllotId).Select(m => m.ExportAllotId).ToList();
                    if (comBox.Count == 0)
                    {
                        comBox = Db.Queryable<BllCompleteDetail>().Where(m => m.IsDel == "0" && m.BoxNo2 == model.BoxNo).GroupBy(m => m.ExportAllotId).Select(m => m.ExportAllotId).ToList();
                        if (comBox.Count == 0)
                        {
                            comBox = Db.Queryable<BllCompleteDetail>().Where(m => m.IsDel == "0" && m.BoxNo3 == model.BoxNo).GroupBy(m => m.ExportAllotId).Select(m => m.ExportAllotId).ToList();
                        }
                    }
                    var i = 0;//循环次数
                    DateTime time = DateTime.Now;
                    var allotId = 0;
                    foreach (var item in comBox)
                    {
                        var comBoxList = Db.Queryable<BllCompleteDetail>().Where(m => m.IsDel == "0" && m.ExportAllotId == item).OrderByDescending(m => m.CreateTime).First();
                        if (i == 0)
                        {
                            time = comBoxList.CreateTime;
                            allotId = comBoxList.ExportAllotId;
                        }
                        else if (comBoxList.CreateTime > time)
                        {
                            time = comBoxList.CreateTime;
                            allotId = comBoxList.ExportAllotId;
                        }
                        i++;
                    }
                    if (allotId != 0)
                    {
                        var addComBox = Db.Queryable<BllCompleteDetail>().Where(m => m.IsDel == "0" && m.ExportAllotId == allotId).ToList();
                        var addComList = addComBox.GroupBy(m => m.BoxNo).ToList();
                        var sku = Db.Queryable<SysMaterials>().First(m => m.SkuNo == addComBox.First().SkuNo);
                        var pNum = 0;
                        var bNum = 0;
                        new Common().GetPackQtyInfo(sku.PackagNo, ref pNum, ref bNum);
                        var boxList = new List<BllBoxInfo>();
                        foreach (var com in addComList)
                        {
                            //箱内总数和
                            var qtySum = addComBox.Where(m => m.BoxNo == com.Key).Sum(m => m.CompleteQty);
                            var bitBox = "1";
                            if (qtySum == bNum)
                            {
                                bitBox = "0";
                            }
                            foreach (var item in com)
                            {
                                if (item.BoxNo != model.BoxNo)
                                {
                                    if (item.BoxNo2 != model.BoxNo)
                                    {
                                        if (item.BoxNo3 != model.BoxNo)
                                        {
                                            continue;
                                        }
                                    }
                                }
                                var boxInfo = new BllBoxInfo()
                                {
                                    BoxNo = item.BoxNo,
                                    BoxNo2 = item.BoxNo2,
                                    BoxNo3 = item.BoxNo3,
                                    SkuNo = item.SkuNo,
                                    SkuName = item.SkuName,
                                    LotNo = item.LotNo,
                                    LotText = item.LotText,
                                    Qty = (decimal)item.CompleteQty,
                                    FullQty = bNum,
                                    //ProductionTime = ,
                                    //ExpirationTime = ,
                                    InspectMark = "0",
                                    InspectStatus = "0",
                                    BitBoxMark = bitBox,
                                    Origin = "WMS",
                                    Status = "0",
                                    CreateUser = 0
                                };
                                boxList.Add(boxInfo);
                            }
                        }
                        Db.Insertable(boxList).ExecuteCommand();
                        string sqlString2 = $@"SELECT
                                            ASNNo,
                                            BoxNo,
                                            SkuNo,
                                            SkuName,
                                            LotNo,
                                            BitBoxMark,
                                            SUM(Qty) as Qty
                                          FROM BllBoxInfo
                                          WHERE IsDel = '0'
                                            AND Status='0'
                                            AND BoxNo = '{model.BoxNo}'
                                          GROUP BY ASNNo,BoxNo,SkuNo,SkuName,LotNo,BitBoxMark; ";
                        var models2 = Db.Ado.SqlQuery<BoxInfoDto>(sqlString2);
                        if (models2.Count != 0)
                        {
                            return models2;
                        }
                        else
                        {
                            sqlString2 = $@"SELECT
                                            ASNNo,
                                            BoxNo,
                                            SkuNo,
                                            SkuName,
                                            LotNo,
                                            BitBoxMark,
                                            SUM(Qty) as Qty
                                          FROM BllBoxInfo
                                          WHERE IsDel = '0'
                                            AND Status='0'
                                            AND BoxNo2 = '{model.BoxNo}'
                                          GROUP BY ASNNo,BoxNo,SkuNo,SkuName,LotNo,BitBoxMark; ";
                            models2 = Db.Ado.SqlQuery<BoxInfoDto>(sqlString2);
                            if (models2.Count != 0)
                            {
                                return models2;
                            }
                            else
                            {
                                sqlString2 = $@"SELECT
                                            ASNNo,
                                            BoxNo,
                                            SkuNo,
                                            SkuName,
                                            LotNo,
                                            BitBoxMark,
                                            SUM(Qty) as Qty
                                          FROM BllBoxInfo
                                          WHERE IsDel = '0'
                                            AND Status='0'
                                            AND BoxNo3 = '{model.BoxNo}'
                                          GROUP BY ASNNo,BoxNo,SkuNo,SkuName,LotNo,BitBoxMark; ";
                                models2 = Db.Ado.SqlQuery<BoxInfoDto>(sqlString2);
                                if (models2.Count != 0)
                                {
                                    return models2;
                                }
                            }
                        }
                    }
                    throw new Exception("箱码信息不存在!");
                    #endregion
                }
                else
                {
                    throw new Exception("单据类型错误");
                }
            }
            catch (Exception ex)
            {
@@ -1761,21 +2044,83 @@
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public List<BoxInfoDto> GetFMBindBoxInfos(string boxno)
        public List<BoxInfoDto> GetFMBindBoxInfos(string boxno,string url)
        {
            try
            {
                #region 箱码请求接口,正式系统放开
                /*var jsonData = JsonConvert.SerializeObject(boxno);
                var data = new
                {
                    BoxCode = boxno
                };
                var jsonData = JsonConvert.SerializeObject(data);
                var response = HttpHelper.DoPost(url, jsonData, "箱码信息请求", "FM");
                var obj = JsonConvert.DeserializeObject<ErpModel>(response);//解析返回数据
                if (obj.Success != 0)
                var obj = JsonConvert.DeserializeObject<FumaGetBoxModel>(response);//解析返回数据
                if (obj.Success != "0")
                {
                    throw new Exception("请求失败" + obj.Message);
                }*/
                }
                #endregion
                var sku = Db.Queryable<SysMaterials>().First(m => m.SkuNo == obj.Product.SkuNo);
                var pNum = 0;//托盘物品数量
                var bNum = 0;//箱码物品数量
                if (sku == null)
                {
                    throw new Exception($"未查询到物料{obj.Product.SkuNo}信息");
                }
                new Common().GetPackQtyInfo(sku.PackagNo, ref pNum, ref bNum);
                if (pNum == 0 || bNum == 0)
                {
                    throw new Exception($"{sku.SkuNo}物品包装未找到!");
                }
                var boxList = new List<BllBoxInfo>();
                var comTime = DateTime.Now;
                //添加箱码信息
                foreach (var box in obj.Product.BoxInfoList)
                {
                    foreach (var box2 in box.BoxInfo2List)
                    {
                        foreach (var box3 in box2.BoxInfo3List)
                        {
                            var boxInfo = new BllBoxInfo()
                            {
                                BoxNo = box.BoxNo,
                                BoxNo2 = box2.BoxNo2,
                                BoxNo3 = box3.BoxNo3,
                                Qty = box3.Qty,
                                BitBoxMark = box.BitBoxMark,
                                ASNNo = "",
                                //ASNDetailNo = noticeDetail.Id,
                                OrderCode = "",//notice.OrderCode
                                //BindNo = bindId,
                                //PalletNo = model.PallNo,
                                FullQty = bNum,
                                Status = "2",
                                SkuNo = sku.SkuNo,
                                SkuName = sku.SkuName,
                                LotNo = obj.Product.LotNo,
                                LotText = obj.Product.LotText,
                                ProductionTime = DateTime.Parse(obj.Product.ProductionTime),
                                ExpirationTime = DateTime.Parse(obj.Product.ExpirationTime),
                                //CompleteTime = "",
                                InspectMark = "0",
                                InspectStatus = "0",
                                Origin = "赋码",
                                CreateTime = comTime,
                                CreateUser = 0
                            };
                            boxList.Add(boxInfo);
                        }
                    }
                }
                Db.Fastest<BllBoxInfo>().BulkCopy(boxList);
                string sqlString = $@"SELECT 
                                        ASNNo,
                                        BoxNo,