/// <summary> /// 移除空的浇次计划,及关联的炉次计划 /// </summary> /// <param name="current"></param> private void RemoveEmptyJc(Mod_TPP_LGPC_LSB current) { // 炉次数据 var jcData = LCLSBList.Where(w => w.C_FK == current.C_ID); if (jcData.All(w => w.C_STATE == "1")) { LCLSBList.RemoveAll(x => jcData.Contains(x)); LSBList.Remove(current); } }
/// <summary> /// 加载浇次计划 /// </summary> private void InitLsb() { var result = bll_lsb.GetModelList(_strCCMID); foreach (var item in result) { item.N_SORT = result.IndexOf(item) + 1; } LSBList.Clear(); LSBList.AddRange(result); }
/// <summary> /// 移除炉次计划将移除的订单炉次计划添加到最后浇次中,考虑浇次最大炉数 /// </summary> /// <param name="current"></param> /// <param name="lcNum"></param> private void RemoveLcWithLessOrd(Mod_TPP_LGPC_LSB current, int lcNum) { // 浇次炉次数据 var jcData = LCLSBList.Where(w => w.C_FK == current.C_ID); var removeLcData = GetLast(current, lcNum); RemoveLcWithMoreOrd(current, lcNum); removeLcData.RemoveAll(x => x.C_STATE == "1"); // 将炉次计划添加到最后浇次中,或新增浇次并满足最低炉次 var lastJc = LSBList.Where(w => w.N_GROUP == current.N_GROUP).OrderBy(w => w.N_SORT).LastOrDefault(); if (lastJc == current) { // 如果当前浇次就是最后一个浇次,新增浇次 lastJc = current.Clone(); LSBList.Add(lastJc); } ReplaceLc(lastJc, removeLcData); }
/// <summary> /// 添加炉次计划,考虑浇次计划,合并浇次计划 /// </summary> /// <param name="current"></param> /// <param name="lcNum"></param> public void Add(Mod_TPP_LGPC_LSB current, int lcNum) { var grpJc = LSBList.Where(w => w.N_GROUP == current.N_GROUP).OrderByDescending(w => w.N_SORT).ToList(); foreach (var item in grpJc) { if (lcNum == 0 || item == current) { break; } // 炉次数据 var jcData = LCLSBList.Where(w => w.C_FK == item.C_ID).Where(w => w.C_STATE != "1"); foreach (var lcItem in jcData.OrderByDescending(w => w.N_SORT)) { if (lcNum == 0) { break; } LCLSBList.Remove(lcItem); AddOrdLc(current, lcItem); lcNum--; } AddFullLc(item, new List <Mod_TPP_LGPC_LCLSB> { }); RemoveEmptyJc(item); CountLs(item); } if (lcNum > 0) { AddLc(current, lcNum); } CountLs(current); }
/// <summary> /// 递归替换炉次计划 /// 满足最小炉次,如果超过最大炉次新增浇次计划 /// </summary> /// <param name="current"></param> /// <param name="replaceLcData"></param> private void ReplaceLc(Mod_TPP_LGPC_LSB current, List <Mod_TPP_LGPC_LCLSB> replaceLcData) { // 浇次炉次数据 var jcData = LCLSBList.Where(w => w.C_FK == current.C_ID); // 替换的不是订单类型的炉次 Replace(current, replaceLcData); if (replaceLcData.Count > 0) { // 添加最少浇次炉次数据 AddFullLc(current, replaceLcData); } if (replaceLcData.Count > 0) { // 新增浇次递归,满足最低炉次 var addJc = current.Clone(); LSBList.Add(addJc); ReplaceLc(addJc, replaceLcData); } CountLs(current); }