public T_PACKAGE_TASK task(PackageVo packageVo) { T_PACKAGE_TASK t = new T_PACKAGE_TASK(); t.BILLCODE = packageVo.Billcode; t.ALLPACKAGESEQ = packageVo.ALLPACKAGESEQ; t.CIGARETTECODE = packageVo.Cigarettecode; t.CIGARETTENAME = packageVo.CIGARETTENAME; t.CIGHIGH = packageVo.CigHigh; t.CIGHIGHY = packageVo.CigHighY; t.CIGLENGTH = packageVo.CigLength; t.CIGNUM = packageVo.Cignum; t.CIGSEQ = packageVo.CIGSEQ; t.CIGSTATE = 10; t.CIGTYPE = packageVo.Cigtype.ToString(); t.CIGWIDTH = packageVo.CigWidth; t.CIGWIDTHX = packageVo.CigWidthX; t.CIGZ = packageVo.CigZ; t.DOUBLETAKE = packageVo.DoubleTake; t.NORMAILSTATE = 10; t.NORMALQTY = packageVo.Pokenum; t.ORDERDATE = packageVo.Orderdate; t.ORDERPACKAGEQTY = packageVo.ORDERPACKAGENUM; t.ORDERQTY = packageVo.Orderqty; t.ORDERSEQ = packageVo.Orderseq; t.PACKAGENO = packageVo.Packageno; t.PACKAGEQTY = packageVo.PACKAGEQTY; t.PACKAGESEQ = packageVo.Packageseq; t.PACKTASKNUM = packageVo.Packtasknum; t.PTID = packageVo.Ptid; t.PUSHSPACE = packageVo.Pushspace; t.SORTNUM = packageVo.Tasknum; t.STATE = 10; t.UNIONPACKAGETAG = packageVo.Unionpackagestate; return(t); }
List <T_PACKAGE_TASK> GetT_PACKAGE_TASKByExcel() { string path = Directory.GetCurrentDirectory() + "\\4.3数据.xlsx"; DataSet ds = LoadDataExcel(path, "Sheet1"); for (int j = 0; j < ds.Tables[0].Rows.Count; j++) { T_PACKAGE_TASK t_ = new T_PACKAGE_TASK(); t_.PTID = ds.Tables[0].Rows[j].ItemArray[0].CastTo <decimal>(-1); t_.BILLCODE = ds.Tables[0].Rows[j].ItemArray[1].CastTo <string>(); t_.ORDERSEQ = ds.Tables[0].Rows[j].ItemArray[2].CastTo <decimal>(-1); t_.PACKAGESEQ = ds.Tables[0].Rows[j].ItemArray[3].CastTo <decimal>(-1); t_.CIGARETTECODE = ds.Tables[0].Rows[j].ItemArray[4].CastTo <string>(); t_.CIGARETTENAME = ds.Tables[0].Rows[j].ItemArray[5].CastTo <string>(); t_.PACKAGEQTY = ds.Tables[0].Rows[j].ItemArray[6].CastTo <decimal>(-1); t_.CIGSEQ = ds.Tables[0].Rows[j].ItemArray[7].CastTo <decimal>(-1); t_.CIGHIGH = ds.Tables[0].Rows[j].ItemArray[8].CastTo <decimal>(-1); t_.CIGWIDTH = ds.Tables[0].Rows[j].ItemArray[9].CastTo <decimal>(-1); t_.CIGLENGTH = ds.Tables[0].Rows[j].ItemArray[10].CastTo <decimal>(-1); t_.CIGWIDTHX = ds.Tables[0].Rows[j].ItemArray[11].CastTo <decimal>(-1); t_.CIGHIGHY = ds.Tables[0].Rows[j].ItemArray[12].CastTo <decimal>(-1); t_.SORTNUM = ds.Tables[0].Rows[j].ItemArray[13].CastTo <decimal>(-1); t_.ALLPACKAGESEQ = ds.Tables[0].Rows[j].ItemArray[14].CastTo <decimal>(-1); t_.ORDERPACKAGEQTY = ds.Tables[0].Rows[j].ItemArray[15].CastTo <decimal>(-1); t_.ORDERQTY = ds.Tables[0].Rows[j].ItemArray[16].CastTo <decimal>(-1); t_.PACKAGENO = ds.Tables[0].Rows[j].ItemArray[17].CastTo <decimal>(-1); t_.PACKTASKNUM = ds.Tables[0].Rows[j].ItemArray[18].CastTo <decimal>(-1); t_.CIGNUM = ds.Tables[0].Rows[j].ItemArray[19].CastTo <decimal>(-1); t_.CIGTYPE = ds.Tables[0].Rows[j].ItemArray[20].CastTo <string>(); t_.DOUBLETAKE = ds.Tables[0].Rows[j].ItemArray[21].CastTo <string>(); t_.STATE = ds.Tables[0].Rows[j].ItemArray[22].CastTo <decimal>(-1); t_.ORDERDATE = ds.Tables[0].Rows[j].ItemArray[23].CastTo <DateTime>(); t_.PUSHSPACE = ds.Tables[0].Rows[j].ItemArray[24].CastTo <decimal>(-1); t_.UNIONPACKAGETAG = ds.Tables[0].Rows[j].ItemArray[25].CastTo <decimal>(-1); t_.CIGSTATE = ds.Tables[0].Rows[j].ItemArray[26].CastTo <decimal>(-1); t_.NORMAILSTATE = ds.Tables[0].Rows[j].ItemArray[27].CastTo <decimal>(-1); t_.NORMALQTY = ds.Tables[0].Rows[j].ItemArray[28].CastTo <decimal>(-1); de.Add(t_); } return(de); }
public void calcPackage(List <T_PACKAGE_TASK> task, List <PackageArea> list) { var unnormaltask = task.Where(x => x.CIGTYPE == "2").ToList(); var normaltask = task.Where(x => x.CIGTYPE == "1").ToList(); decimal startpackagenum = allpackagenum; int packageNO = 1; //var templist = task.Where(x => x.STATE != 10).ToList().Take(taskCount).ToList(); var templist = unnormaltask.Where(x => x.STATE == 0).ToList().Take(taskCount).ToList(); if (templist != null && templist.Count > 0) { while (templist.Where(x => x.STATE == 10) != null && templist.Where(x => x.STATE != 10).Count() > 0) { // templist = templist.Where(x => x.STATE != 10).ToList(); decimal minHeight = 0; if (list.Where(x => x.isscan == 0 && x.width > minWidth) != null && list.Where(x => x.isscan == 0 && x.width > minWidth).Count() > 0) { minHeight = list.Where(x => x.isscan == 0 && x.width > minWidth).Min(x => x.height); } else { decimal sciseq = templist.Where(x => x.STATE != 10).Min(x => x.CIGSEQ) ?? 0; List <T_PACKAGE_TASK> bigList = templist.Where(x => x.STATE == 10 && x.CIGSEQ > sciseq).OrderBy(x => x.CIGSEQ).ToList();//有大于当前序号已排好的烟 if (bigList != null && bigList.Count > 0) { // bigList = templist.Where(x => x.STATE == 10).OrderBy(x => x.CIGSEQ).ToList(); //list.Clear(); list = RollBackList(list, bigList); list.ForEach(x => x.isscan = 0); templist.ForEach(x => { x.PACKAGESEQ = 0; x.STATE = 0; x.DOUBLETAKE = "0"; }); templist = templist.Where(x => x.CIGSEQ <= sciseq).ToList(); minHeight = list.Where(x => x.isscan == 0 && x.width > minWidth).Min(x => x.height); //List<PackageArea> list1 = new List<PackageArea>(list); //diclist.Push(list1); } else { NormalCig(task, normaltask, 1); packageNO += 1; allpackagenum += 1; list.Clear(); diclist.Clear(); PackageArea areainit = new PackageArea(); areainit.width = packageWidth; areainit.height = 0; areainit.cigaretteList = new List <Cigarette>() { new Cigarette() { CigaretteNo = 0, fromx = 0, tox = packageWidth, width = packageWidth } }; list.Add(areainit); diclist.Push(CopyList(list)); } } PackageArea area = list.Find(x => x.height == minHeight && x.isscan == 0 && x.width > minWidth); area = list.FindAll(x => x.beginx == area.beginx && x.isscan == 0 && x.width > minWidth).OrderByDescending(x => x.height).FirstOrDefault(); //是否有相同品牌的烟 List <ItemGroup> allGroupList = templist.Where(x => x.STATE != 10).GroupBy(x => x.CIGARETTECODE).Select(x => new ItemGroup() { CigaretteCode = x.Key, Total = x.Count() }).ToList(); List <ItemGroup> groupList = allGroupList.FindAll(x => x.Total > 1); foreach (var item in groupList) { var doubleList = templist.Where(x => x.STATE != 10 && x.CIGARETTECODE == item.CigaretteCode).Take(2).ToList(); if (Math.Abs((doubleList[0].CIGSEQ ?? 0) - (doubleList[1].CIGSEQ ?? 0)) != 1) { item.Total = 100; } } groupList.RemoveAll(x => x.Total == 100); // List<ItemGroup> smallGroupList = allGroupList; String tempcode = ""; decimal tempWidth = 0; decimal gdc = 0;//高度差 List <AreaUnit> unit = new List <AreaUnit>(); AreaUnit tempunit = null; if (groupList != null && groupList.Count > 0)//优先双抓 而且是宽度大的双抓 { // List<Cigarette> cigList = area.cigaretteList; foreach (var v in groupList) { unit.Clear(); T_PACKAGE_TASK temptask = templist.Find(x => x.CIGARETTECODE == v.CigaretteCode); decimal cgiseq = templist.Where(x => x.CIGARETTECODE == v.CigaretteCode && x.STATE != 10).FirstOrDefault().CIGSEQ ?? 0; if ((temptask.CIGWIDTH + jx) * 2 <= area.width && area.height + temptask.CIGHIGH < packageHeight)//小于区域宽度,同时小于整包高度 { int i = 0; decimal flag = 1; decimal lastflag = 0; decimal beginx = 0; foreach (var item in area.cigaretteList) { item.index = i; if (cgiseq < item.CigaretteNo) { flag = 0; } else { flag = 1; } if (lastflag == 1 && flag == 1) { AreaUnit u = unit.ElementAt(unit.Count - 1); u.width += item.width; u.end = i; } else if (lastflag == 0 && flag == 1) { AreaUnit cell = new AreaUnit(); cell.width = item.width; cell.begin = i; cell.end = i; cell.beginx = beginx; unit.Add(cell); } lastflag = flag; beginx += item.width; i++; } foreach (var cell in unit) { if ((temptask.CIGWIDTH + jx) * 2 <= cell.width) //后面的seq必须大于已放的才能放 { if (tempWidth <= temptask.CIGWIDTH) { if (tempWidth == temptask.CIGWIDTH) { if (area.left != null) { //看左边高度差 取相差小的 if (Math.Abs(area.height + (temptask.CIGHIGH ?? 0) - area.left.height) - Math.Abs(gdc) < 0) { tempWidth = temptask.CIGWIDTH ?? 0; tempcode = v.CigaretteCode; gdc = area.height + (temptask.CIGHIGH ?? 0) - area.left.height; } } } else { tempWidth = temptask.CIGWIDTH ?? 0; tempcode = v.CigaretteCode; if (area.left != null) { gdc = area.height + (temptask.CIGHIGH ?? 0) - area.left.height; } } } tempunit = cell; break; } } } } } if (tempcode != "" && tempunit != null) { var chooseItem = templist.FindAll(x => x.CIGARETTECODE == tempcode && x.STATE != 10).OrderBy(x => x.CIGSEQ).Take(2).ToList(); decimal width = 0; decimal height = 0; decimal cigseq = 0; foreach (var v in chooseItem) { v.PACKAGESEQ = packageNO; v.CIGWIDTHX = area.beginx + tempunit.beginx + v.CIGWIDTH + jx;//两条当做一条 v.CIGHIGHY = area.height + v.CIGHIGH; v.STATE = 10; v.DOUBLETAKE = "1"; v.ALLPACKAGESEQ = allpackagenum; width += (v.CIGWIDTH ?? 0) + jx; height = area.height + (v.CIGHIGH ?? 0); cigseq = v.CIGSEQ ?? 0; } //更新area if (tempunit.begin == 0) { calcArea(list, area, width, height, cigseq); } else { calcArea(list, area, width, height, cigseq, tempunit); } diclist.Push(CopyList(list)); } else { tempWidth = 0; gdc = 0;//高度差 unit.Clear(); foreach (var v in allGroupList) { T_PACKAGE_TASK temptask = templist.Find(x => x.CIGARETTECODE == v.CigaretteCode && x.STATE != 10); int i = 0; unit.Clear(); decimal flag = 1; decimal lastflag = 0; decimal beginx = 0; foreach (var item in area.cigaretteList) { item.index = i; if (temptask.CIGSEQ < item.CigaretteNo) { flag = 0; } else { flag = 1; } if (lastflag == 1 && flag == 1) { AreaUnit u = unit.ElementAt(unit.Count - 1); u.width += item.width; u.end = i; } else if (lastflag == 0 && flag == 1) { AreaUnit cell = new AreaUnit(); cell.width = item.width; cell.begin = i; cell.end = i; cell.beginx = beginx; unit.Add(cell); } lastflag = flag; beginx += item.width; i++; } if (temptask.CIGWIDTH + jx * 2 <= area.width && area.height + temptask.CIGHIGH < packageHeight) { foreach (var cell in unit) { if (temptask.CIGWIDTH + jx * 2 <= cell.width) //后面的seq必须大于已放的才能放 { if (tempWidth <= temptask.CIGWIDTH + jx * 2) { if (tempWidth == temptask.CIGWIDTH + jx * 2) { if (area.left != null) { //看左边高度差 取相差小的 if (Math.Abs(area.height + (temptask.CIGHIGH ?? 0) - area.left.height) - Math.Abs(gdc) < 0) { tempWidth = (temptask.CIGWIDTH ?? 0) + jx * 2; tempcode = v.CigaretteCode; gdc = area.height + (temptask.CIGHIGH ?? 0) - area.left.height; } } } else { tempWidth = (temptask.CIGWIDTH ?? 0) + jx * 2; tempcode = v.CigaretteCode; if (area.left != null) { gdc = area.height + (temptask.CIGHIGH ?? 0) - area.left.height; } } } tempunit = cell; break; } } } } if (tempcode != "" && tempunit != null) { var chooseItem = templist.FindAll(x => x.CIGARETTECODE == tempcode && x.STATE != 10).OrderBy(x => x.CIGSEQ).FirstOrDefault(); decimal width = 0; decimal height = 0; decimal cigseq = 0; chooseItem.PACKAGESEQ = packageNO; chooseItem.CIGWIDTHX = area.beginx + tempunit.beginx + chooseItem.CIGWIDTH / 2 + jx; chooseItem.CIGHIGHY = area.height + chooseItem.CIGHIGH; chooseItem.STATE = 10; chooseItem.ALLPACKAGESEQ = allpackagenum; width += (chooseItem.CIGWIDTH ?? 0) + jx * 2; height = area.height + (chooseItem.CIGHIGH ?? 0); cigseq = chooseItem.CIGSEQ ?? 0; //更新area //更新area if (tempunit.begin == 0) { calcArea(list, area, width, height, cigseq); } else { calcArea(list, area, width, height, cigseq, tempunit); } diclist.Push(CopyList(list)); } else { area.isscan = 1; } } if (templist.Where(x => x.STATE != 10) == null || templist.Where(x => x.STATE != 10).Count() == 0) { list.ForEach(x => x.isscan = 0); templist = task.Where(x => x.STATE != 10).ToList().Take(taskCount).ToList(); } } } }
public void NormalCig(List <T_PACKAGE_TASK> task, List <T_PACKAGE_TASK> normaltask, int tag) { //常规烟合包:有常规烟的订单 //2.如果常规烟大于36 且除6有余数,将组30 + 余数为一包,剩余用于搭配异型烟 //1.如果小于36 且除6有余数 直接一包 var datalist = task.Where(x => x.ALLPACKAGESEQ == allpackagenum && x.STATE == 10).ToList(); //未计算的总常规烟 条烟数 decimal normalnum = normaltask.Where(x => x.NORMAILSTATE != 10).Sum(x => x.NORMALQTY) ?? 0; decimal Remainder = normalnum % 6;//余数 //如果常规烟大于36 且除6有余数 if (normalnum > 30 + Remainder && Remainder != 0) { decimal count = 0; foreach (var item in normaltask.Where(x => x.NORMAILSTATE != 10).ToList()) { count += item.NORMALQTY ?? 0; //恰好一条记录 需要分割为两条记录 if (count > 30 + Remainder) { decimal itemnum = item.NORMALQTY ?? 0; var temp = normaltask.Where(x => x.PTID == item.PTID).ToList(); decimal surpnum = (item.NORMALQTY ?? 0) - Math.Abs(count - NormalCount);//多出的条数 item.NORMALQTY -= surpnum; T_PACKAGE_TASK _PACKAGE_TASK = new T_PACKAGE_TASK(); Pub.DataCopy.CopyToT(item, _PACKAGE_TASK); _PACKAGE_TASK.NORMALQTY = surpnum; _PACKAGE_TASK.PTID = ptid; normaltask.Add(_PACKAGE_TASK); ptid++; } item.ALLPACKAGESEQ = allpackagenum; item.PUSHSPACE = 0; item.NORMAILSTATE = 10; item.PACKAGESEQ = datalist.Select(x => x.PACKAGESEQ).LastOrDefault(); if (count == 30 + Remainder) { break; } } allpackagenum += 1; } //如果常规烟小于36 且除6有余数 if (normalnum < NormalCount && Remainder != 0) { foreach (var item in normaltask.Where(x => x.NORMAILSTATE != 10).ToList()) { item.ALLPACKAGESEQ = allpackagenum; item.PUSHSPACE = 0; item.NORMAILSTATE = 10; item.PACKAGESEQ = datalist.Select(x => x.PACKAGESEQ).LastOrDefault(); } } //获取上一个包 最高坐标 可匹配常规烟层数 decimal PackHight = Math.Floor((allhight - task.Where(x => x.ALLPACKAGESEQ == allpackagenum - 1).Max(x => x.CIGHIGHY) ?? 0) / normalhight); decimal tempnum = 0; decimal maxnum = PackHight * 6;//可匹配常规烟 条数 bool unnormaltag = true; if (PackHight > 0) { #region //if (normalnum < maxnum && normalnum % 6 > 0)//如果未计算的条烟数小于可配置条烟数, 且无法提供6条烟的平面 //{ // //上包异型烟数据还原未计算 // foreach (var item in task.Where(x => x.ALLPACKAGESEQ == allpackagenum)) // { // item.STATE = 0; // } // //计算初始平面 // list.Clear(); // diclist.Clear(); // PackageArea areainit1 = new PackageArea(); // areainit1.width = packageWidth - normalnum % 6 * 90; // areainit1.height = normalhight; // areainit1.cigaretteList = new List<Cigarette>() { new Cigarette() { CigaretteNo = 0, fromx = 0, tox = packageWidth - normalnum % 6 * 90, width = packageWidth - normalnum % 6 * 90 } }; // list.Add(areainit1); // area = list.Find(x => x.height == normalhight && x.isscan == 0 && x.width > minWidth); // goto aa; //} //else //{ #endregion //未计算常规烟还有几层 decimal uncompute = normaltask.Where(x => x.NORMAILSTATE == 0).Sum(x => x.NORMALQTY).Value; maxnum = uncompute > maxnum ? maxnum : uncompute; PackHight = uncompute > maxnum ? PackHight : uncompute / 6; foreach (var item in task.Where(x => x.CIGTYPE == "1" && x.NORMAILSTATE == 0).ToList()) { if (tempnum < maxnum) { tempnum += item.NORMALQTY ?? 0;//5 //恰好一条记录 需要分割为两条记录 if (tempnum > maxnum) { decimal tmp = item.NORMALQTY ?? 0; //5 decimal itemnum = item.NORMALQTY ?? 0; //5 var temp = normaltask.Where(x => x.PTID == item.PTID).ToList(); decimal surpnum = Convert.ToDecimal(item.NORMALQTY) - Math.Abs(tempnum - maxnum); //多出的条数//5-4 1 T_PACKAGE_TASK _PACKAGE_TASK = new T_PACKAGE_TASK(); Pub.DataCopy.CopyToT(item, _PACKAGE_TASK); _PACKAGE_TASK.NORMALQTY = tmp - surpnum;//1 _PACKAGE_TASK.PTID = ptid; normaltask.Add(_PACKAGE_TASK); // task.Add(_PACKAGE_TASK); // ptid++; item.NORMALQTY = surpnum;//4 } item.ALLPACKAGESEQ = allpackagenum; item.PUSHSPACE = PackHight; item.NORMAILSTATE = 10; item.PACKAGESEQ = datalist.Select(x => x.PACKAGESEQ).LastOrDefault(); if (unnormaltag) { foreach (var it in datalist) { it.PUSHSPACE = PackHight; it.ALLPACKAGESEQ = allpackagenum; } unnormaltag = false; } } else { break; } } //} } }
public void GetAllOrder(decimal packageNo) { int allCount = 0; using (Entities entity = new Entities()) { DateTime TIEM = new DateTime(); DateTime TIEM2 = new DateTime(); DateTimeFormatInfo format = new DateTimeFormatInfo(); format.ShortDatePattern = "yyyy-MM-dd"; TIEM = Convert.ToDateTime("2019-03-21", format); TIEM2 = Convert.ToDateTime("2019-03-21", format); //var query = (from item in entity.T_UN_TASK_H // where item.BILLCODE =="CS10429225" && item.PACKAGEMACHINE == packageNo //&& item.ORDERDATE >= TIEM && item.ORDERDATE <= TIEM2 //&& item.TASKNUM == 799261 // orderby item.TASKNUM // select item).ToList(); var query = (from item in entity.V_PRODUCE_PACKAGEINFO where //item.EXPORT == packageNo && item.BILLCODE == "CS10429225" //&& item.ALLOWSORT=="非标" // && (item.TASKNUM == 664692 || item.TASKNUM == 663143) group item by new { item.BILLCODE, item.TASKNUM } into allcode select new { allcode.Key.BILLCODE, allcode.Key.TASKNUM }).OrderBy(x => x.TASKNUM).ToList(); ptid = entity.T_PACKAGE_TASK.Count() > 0 ? entity.T_PACKAGE_TASK.Max(x => x.PTID) + 1 : 1; if (query != null) { int i = 0; //decimal maxSeq = GetSeq("select decode(max(ptid),null,0,max(ptid)) from t_package_task "); foreach (var v in query) { i++; int pcount = 0; List <T_PACKAGE_TASK> task = new List <T_PACKAGE_TASK>(); var query2 = (from item2 in entity.V_PRODUCE_PACKAGEINFO where item2.BILLCODE == v.BILLCODE && item2.ALLOWSORT == "非标" orderby item2.SENDTASKNUM, item2.MACHINESEQ, item2.TROUGHNUM select item2).ToList(); if (query2 != null) { foreach (var v2 in query2) { allCount = allCount + 1; pcount = pcount + 1; T_PACKAGE_TASK temp = new T_PACKAGE_TASK(); temp.PTID = ptid; temp.CIGARETTECODE = v2.CIGARETTECODE; T_WMS_ITEM tempItem = ItemService.GetItemByCode(v2.CIGARETTECODE); temp.CIGARETTENAME = tempItem.ITEMNAME; temp.CIGHIGH = tempItem.IHEIGHT; temp.CIGWIDTH = tempItem.IWIDTH; temp.CIGWIDTH = tempItem.IWIDTH; temp.CIGLENGTH = tempItem.ILENGTH; temp.BILLCODE = v2.BILLCODE; temp.SORTNUM = v2.TASKNUM; temp.CIGNUM = allCount; temp.CIGSEQ = pcount; //temp.PACKAGESEQ = v2.EXPORT; temp.ALLPACKAGESEQ = 0; //temp.PACKAGENO = v2.PACKAGEMACHINE; temp.PACKAGENO = 1;//v2.EXPORT; //temp.CIGTYPE = "2"; temp.CIGTYPE = v2.ALLOWSORT == "非标" ? "2" : "1"; temp.STATE = 0; //0 新增 10 确定 temp.NORMAILSTATE = 0; //0 新增 10 确定 temp.NORMALQTY = 1; temp.UNIONPACKAGETAG = 0; temp.DOUBLETAKE = "0"; ////temp.ORDERSEQ = v2.PRIORITY; ////temp.ORDERQTY = v2.ORDERQUANTITY; temp.CIGSTATE = 10; task.Add(temp); ptid++; } allpackagenum++; GenPackageInfo(task, entity); foreach (var item in task) { item.PACKTASKNUM = item.ALLPACKAGESEQ; entity.T_PACKAGE_TASK.AddObject(item); } if (i == 5) { entity.SaveChanges(); i = 0; } } } entity.SaveChanges(); } } }