Demo
2024-02-24 1543e640a8867fa7c8a99fae43402b81876a95a8
Merge branch 'csc'
9个文件已修改
169 ■■■■ 已修改文件
Wms/Model/ModelDto/BllSoDto/ExportNoticeDetailDto.cs 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/Model/ModelDto/BllSoDto/ExportNoticeDto.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/Model/ModelDto/PdaDto/PdaSoDto.cs 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.BLL/BllAsnServer/PalletBindServer.cs 82 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.BLL/BllSoServer/ExportNoticeServer.cs 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.BLL/Logic/AllotSku.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.Entity/BllSoEntity/BLLExportNoticeDetail.cs 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.Entity/BllSoEntity/BllExportAllot.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/Wms/Controllers/DownApiController.cs 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/Model/ModelDto/BllSoDto/ExportNoticeDetailDto.cs
@@ -48,22 +48,22 @@
        /// <summary>
        /// Desc:数量
        /// </summary>           
        public int Qty { get; set; }
        public decimal Qty { get; set; }
        /// <summary>
        /// Desc:分配数量
        /// </summary>           
        public int? AllotQty { get; set; }
        public decimal? AllotQty { get; set; }
        /// <summary>
        /// Desc:下架数量
        /// </summary>           
        public int? FactQty { get; set; }
        public decimal? FactQty { get; set; }
        /// <summary>
        /// Desc:拣货数量
        /// </summary>           
        public int? CompleteQty { get; set; }
        public decimal? CompleteQty { get; set; }
        /// <summary>
        /// Desc:包装编码
Wms/Model/ModelDto/BllSoDto/ExportNoticeDto.cs
@@ -128,7 +128,7 @@
        public string SkuNo { get; set; }       //物料编码
        public string SkuName { get; set; }       //物料名称
        public decimal Qty { get; set; }        //库存数量
        public int ExQty { get; set; }        //数量
        public decimal ExQty { get; set; }        //数量
        public string Standard { get; set; }
        public string IsBale { get; set; }  //是否裹包
        public string IsBelt { get; set; }  //是否打带
@@ -214,7 +214,7 @@
        /// <summary>
        /// Desc:数量
        /// </summary>           
        public int Qty { get; set; }
        public decimal Qty { get; set; }
        /// <summary>
        /// Desc:拣货数量
Wms/Model/ModelDto/PdaDto/PdaSoDto.cs
@@ -7,10 +7,10 @@
    public class OutPdaInfo
    {
        public string OutModel { get; set; }                     // 拣货区(出库口)
        public int PlanQty { get; set; }                       // 计划数量
        public int? FinishQty { get; set; }                       // 完成数量
        public decimal PlanQty { get; set; }                       // 计划数量
        public decimal? FinishQty { get; set; }                       // 完成数量
        public string Standard { get; set; }                       // 规格
        public int PickQty { get; set; }                       // 托盘待拣数量
        public decimal PickQty { get; set; }                       // 托盘待拣数量
        public decimal? PickedQty { get; set; }                       // 托盘已拣数量
    }
    public class BoxInfo
Wms/WMS.BLL/BllAsnServer/PalletBindServer.cs
@@ -862,22 +862,48 @@
                    }
                }
                var roadList = Db.Queryable<SysStorageLocat>().Where(m => m.WareHouseNo == houseNo && areaList.Contains(m.AreaNo))
                    .GroupBy(m => m.RoadwayNo).Select(m => m.RoadwayNo).ToList();
                    .GroupBy(m => m.RoadwayNo).OrderBy(m => m.RoadwayNo).Select(m => m.RoadwayNo).ToList();
                SysRoadwayUseLog useLog = Db.Ado.SqlQuerySingle<SysRoadwayUseLog>("select Top(1) * from SysRoadwayUseLog where IsDel=0 order by CreateTime desc"); //巷道最后一次使用记录
                SysRoadwayUseLog useLog = Db.Queryable<SysRoadwayUseLog>().Where(m=>m.IsDel =="0" && roadList.Contains(m.RoadwayNo)).OrderByDescending(l => l.Id).First(); //巷道最后一次使用记录
                var bindNum = Db.Queryable<BllPalletBind>()
                    .Where(m => m.IsDel == "0" && m.Status == "0" && !string.IsNullOrWhiteSpace(m.RoadwayNo))
                    .GroupBy(m => m.PalletNo).Select(m => m.PalletNo).Count();
                #region 确定巷道排序
                List<string> roadList2 = new List<string>();
                List<string> roadSmall = new List<string>();
                List<string> roadLarge = new List<string>();
                if (useLog != null)
                {
                    roadList2.Add(useLog.RoadwayNo);
                    foreach (var r in roadList)
                    {
                        if (r == useLog.RoadwayNo)
                        {
                            continue;
                        }
                        //如果结果为0,则说明两个字符串相等;
                        //如果结果小于0,则说明第一个字符串小于第二个字符串;
                        //如果结果大于0,则说明第一个字符串大于第二个字符串。
                        var bol = String.CompareOrdinal(r, useLog.RoadwayNo);
                        if (bol < 0)
                        {
                            roadSmall.Add(r);
                        }
                        if (bol > 0)
                        {
                            roadLarge.Add(r);
                        }
                    }
                    roadList2.AddRange(roadLarge);
                    roadList2.AddRange(roadSmall);
                }
                roadList = roadList2;
                #endregion
                var roadNo = "";
                if (laneAllot == 0)//跳巷道平均分配
                {
                    //如果同级巷道有多条则查上次位置日志
                    if (roadList.Count > 1)
                    {
                        useLog = Db.Queryable<SysRoadwayUseLog>().OrderByDescending(l => l.Id).First();
                    }
                    //取各巷道所有排第一个合适位
                    foreach (var l in roadList)
                    {
@@ -888,7 +914,11 @@
                        }
                        var locateCount = Db.Queryable<SysStorageLocat>()
                            .Where(m => m.Status == "0" && m.Flag == "0" && areaList.Contains(m.AreaNo)).Count();
                            .Where(m => m.Status == "0" && m.Flag == "0" && areaList.Contains(m.AreaNo) && m.RoadwayNo == l).Count();
                        var bindNum = Db.Queryable<BllPalletBind>()
                            .Where(m => m.IsDel == "0" && m.Status == "0" && m.RoadwayNo== l)
                            .GroupBy(m => m.PalletNo).Select(m => m.PalletNo).Count();
                        if (locateCount - bindNum > 0)
                        {
                            roadNo = l;
@@ -905,19 +935,39 @@
                    {
                        if (useLog != null)
                        {
                            roadNo = useLog.RoadwayNo;
                            var locateCount = Db.Queryable<SysStorageLocat>()
                                .Where(m => m.Status == "0" && m.Flag == "0" && areaList.Contains(m.AreaNo) && m.RoadwayNo == useLog.RoadwayNo).Count();
                            var bindNum = Db.Queryable<BllPalletBind>()
                                .Where(m => m.IsDel == "0" && m.Status == "0" && m.RoadwayNo == useLog.RoadwayNo)
                                .GroupBy(m => m.PalletNo).Select(m => m.PalletNo).Count();
                            if (locateCount - bindNum > 0)
                            {
                                roadNo = useLog.RoadwayNo;
                            }
                        }
                    }
                }
                else//按照巷道优先级分配
                {
                    foreach (var item in roadList)
                    {
                        roadNo = item;
                    {
                        var locateCount = Db.Queryable<SysStorageLocat>()
                            .Where(m => m.Status == "0" && m.Flag == "0" && areaList.Contains(m.AreaNo) && m.RoadwayNo == item).Count();
                        var bindNum = Db.Queryable<BllPalletBind>()
                            .Where(m => m.IsDel == "0" && m.Status == "0" && m.RoadwayNo == item)
                            .GroupBy(m => m.PalletNo).Select(m => m.PalletNo).Count();
                        if (locateCount - bindNum > 0)
                        {
                            roadNo = item;
                        }
                        //当前巷有位置则退出
                        if (roadNo != null)
                        {
                            break;
                        }
                        }
                    }
                }
@@ -975,7 +1025,7 @@
                }
                #endregion
                return null;
                return comDto;
            }
            catch (Exception e)
            {
Wms/WMS.BLL/BllSoServer/ExportNoticeServer.cs
@@ -2256,11 +2256,11 @@
                        }
                        #endregion
                        //取合适库存商品
                        Dictionary<int, int> stockQtyDic = new Dictionary<int, int>();//托出库物品数
                        Dictionary<int, decimal> stockQtyDic = new Dictionary<int, decimal>();//托出库物品数
                        Dictionary<string, int> zxQtyDic = new Dictionary<string, int>();//托出整箱数
                        //分配货物
                        //assign.AllocatePallets(stocks, pNum, bNum, needQty, stockQtyDic, zxQtyDic);
                        int qty = assign.AllotPallets(stockDetail, int.Parse(needQty.ToString()), pNum, bNum, stockQtyDic);
                        var qty = assign.AllotPallets(stockDetail, decimal.Parse(needQty.ToString()), pNum, bNum, stockQtyDic);
                        foreach (var sc in stockQtyDic)
                        {
@@ -2678,8 +2678,8 @@
                //修改出库单状态 
                if (notice.Status == "0" || notice.Status == "1")
                {
                    int totalQty = 0;
                    int totalAllotQty = 0;
                    decimal totalQty = 0;
                    decimal totalAllotQty = 0;
                    foreach (var item in detailList)
                    {
                        totalQty += item.Qty;
Wms/WMS.BLL/Logic/AllotSku.cs
@@ -14,14 +14,12 @@
        /// 分配货物
        /// </summary>
        /// <param name="palletList">库存明细集合</param>
        /// <param name="goodCode">物料编码</param>
        /// <param name="lotNo">批次</param>
        /// <param name="needQty">需要分配的数量</param>
        /// <param name="fullPalletQty">满托数量</param>
        /// <param name="fullBoxQty">满箱数量</param>
        /// <param name="stockQtyDic">托出库物品数 key:库存托盘表的ID、val:托盘上的数量</param>
        /// <returns></returns>
        public int AllotPallets(List<DataStockDetail> palletList, int needQty, int fullPalletQty, int fullBoxQty, Dictionary<int, int> stockQtyDic)
        public decimal AllotPallets(List<DataStockDetail> palletList, decimal needQty, int fullPalletQty, int fullBoxQty, Dictionary<int, decimal> stockQtyDic)
        {
            //优先先进先出(快过期的先出)
            //优先零箱、零托(出完零箱出整箱)
@@ -53,7 +51,7 @@
                    }
                }
                #endregion
                var qty = 0; //分配的总数量
                decimal qty = 0; //分配的总数量
                var ztNum = needQty / fullPalletQty;//需要整托数
                var zps = palletList.Where(s => s.Qty >= fullPalletQty).ToList();//整托
@@ -66,7 +64,7 @@
                    //散托
                    foreach (var s in st)
                    {
                        var detailQty = int.Parse((s.Qty - s.LockQty - s.FrozenQty).ToString());
                        var detailQty = decimal.Parse((s.Qty - s.LockQty - s.FrozenQty).ToString());
                        if (needQty - qty < detailQty)
                        {
                            var num = needQty - qty;
@@ -89,7 +87,7 @@
                        var zt = zps.OrderBy(s => s.ExpirationTime).ToList();//所有未使用的托盘(未被分配的)
                        foreach (var ss in zt)
                        {
                            var detailQty = int.Parse((ss.Qty - ss.LockQty - ss.FrozenQty).ToString());
                            var detailQty = decimal.Parse((ss.Qty - ss.LockQty - ss.FrozenQty).ToString());
                            if (needQty - qty < detailQty)
                            {
                                var num = needQty - qty;
@@ -123,7 +121,7 @@
                        var zt = zps.OrderBy(s => s.ExpirationTime).ToList();//所有未使用的托盘(未被分配的)
                        foreach (var ss in zt)
                        {
                            var detailQty = int.Parse((ss.Qty - ss.LockQty - ss.FrozenQty).ToString());
                            var detailQty = decimal.Parse((ss.Qty - ss.LockQty - ss.FrozenQty).ToString());
                            if (needQty - qty < detailQty)
                            {
                                break;
@@ -144,7 +142,7 @@
                        foreach (var ss in zt)
                        {
                            var detailQty = int.Parse((ss.Qty - ss.LockQty - ss.FrozenQty).ToString());
                            var detailQty = decimal.Parse((ss.Qty - ss.LockQty - ss.FrozenQty).ToString());
                            if (needQty - qty < detailQty)
                            {
                                var num = needQty - qty;
@@ -167,7 +165,7 @@
                        var zt = zps.Where(s => !sIds.Contains(s.Id)).OrderBy(s => s.ExpirationTime).ThenBy(m => m.Qty - m.LockQty - m.FrozenQty).ToList();//所有未使用(未被分配的)
                        foreach (var ss in zt)
                        {
                            var detailQty = int.Parse((ss.Qty - ss.LockQty - ss.FrozenQty).ToString());
                            var detailQty = decimal.Parse((ss.Qty - ss.LockQty - ss.FrozenQty).ToString());
                            if (needQty - qty < detailQty)
                            {
                                var num = needQty - qty;
@@ -206,7 +204,7 @@
        /// <param name="dic"></param>
        /// <param name="key"></param>
        /// <param name="v"></param>
        private void SaveDic(Dictionary<int, int> dic, int key, int v)
        private void SaveDic(Dictionary<int, decimal> dic, int key, decimal v)
        {
            if (dic.ContainsKey(key))
            {
Wms/WMS.Entity/BllSoEntity/BLLExportNoticeDetail.cs
@@ -66,28 +66,28 @@
        /// Default:
        /// Nullable:False
        /// </summary>           
        public int Qty {get;set;}
        public decimal Qty {get;set;}
        /// <summary>
        /// Desc:分配数量
        /// Default:
        /// Nullable:True
        /// </summary>           
        public int? AllotQty {get;set;}
        public decimal? AllotQty {get;set;}
        /// <summary>
        /// Desc:下架数量
        /// Default:0
        /// Nullable:True
        /// </summary>           
        public int? FactQty {get;set;}
        public decimal? FactQty {get;set;}
        /// <summary>
        /// Desc:拣货数量
        /// Default:0
        /// Nullable:True
        /// </summary>           
        public int? CompleteQty {get;set;}
        public decimal? CompleteQty {get;set;}
        /// <summary>
        /// Desc:包装编码
Wms/WMS.Entity/BllSoEntity/BllExportAllot.cs
@@ -116,7 +116,7 @@
        /// Default:
        /// Nullable:False
        /// </summary>           
        public int Qty {get;set;}
        public decimal Qty {get;set;}
        /// <summary>
        /// Desc:拣货数量
Wms/Wms/Controllers/DownApiController.cs
@@ -189,6 +189,39 @@
        /// <returns></returns>
        [AllowAnonymous]
        [HttpPost]
        public IActionResult RequestRoadWay(RequestLocate model)
        {
            var logStr = "";
            logStr = $@".\log\WCS\WCS申请巷道" + DateTime.Now.ToString("yyyyMMdd") + ".txt";
            try
            {
                var jsonData = JsonConvert.SerializeObject(model);
                LogFile.SaveLogToFile($"WCS申请巷道:( {jsonData} ),", logStr);
                var list = _asnPalletBindSvc.RequestRoadWay(model.PalletNo, model.HouseNo );
                LogFile.SaveLogToFile($"WCS申请储位返回:( {JsonConvert.SerializeObject(list)} ),", logStr);
                return Ok(new { Success = 0, Message = "申请储位成功", TaskList = list });
            }
            catch (Exception e)
            {
                LogFile.SaveLogToFile($"WCS申请巷道返回:( {e.Message} ),", logStr);
                return Ok(new ErpModel { Success = -1, Message = e.Message });
            }
        }
        /// <summary>
        /// 申请储位
        /// </summary>
        /// <param name="model">入库单信息</param>
        /// <returns></returns>
        [AllowAnonymous]
        [HttpPost]
        public IActionResult RequestLocation(RequestLocate model)
        {