using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using FineUICore; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using MESModel; using Newtonsoft.Json.Linq; using MES.Common; using MES.Controllers; using System.IO; using OfficeOpenXml; using OfficeOpenXml.Drawing; using OfficeOpenXml.Style; using System.Drawing; using NPOI.XSSF.UserModel; using NPOI.HSSF.UserModel; using System.Data; using System.Text; namespace MES.Areas.Plan.Controllers { /// <summary> ///创建人:许加龙 ///日 期:2018/10/15 ///描 述:计划处理打印 /// </summary> [Authorize] [Area("Plan")] public class PrintPlanOrderController : BaseController { #region 服务端事件 /// <summary> /// 页面展示 /// </summary> /// <returns></returns> [CheckPower(ISPower = false)] public IActionResult Index(int PlanOrderID) { Grid grid1 = new Grid(); var gchelper = new GridConfigHelp(db, Url); grid1.Title = "计划处理打印"; grid1.ID = "Grid1"; gchelper.SetGridColumns(UserInfo, RouteData, grid1.ID, new MES_Bus_Plan_PrintModel(), true);//管理员配置表 grid1.SortField = "Order";//默认排序 grid1.DataIDField = "PrintModelID";//主键 grid1.PageSize = 1000;//每页显示数量 gchelper.ConfigGridColumn(grid1, RouteData, PositionInfo);//配置Grid表字段 gchelper.SetGridAttribute(grid1, Url, RouteData, true);//配置Grid表字段为可编辑 gchelper.DeleteBtn(grid1, "btnSave", "fileImport", "btnNew"); var PlanOrd = db.MES_Bus_Plan_Orders.Find(PlanOrderID); var productModel = db.Mes_Bus_Base_ProductModel.FirstOrDefault(p => p.ProductModelName == PlanOrd.Pro_model && p.FactoryID == PlanOrd.FactoryID); if (productModel.PrintModelHeadID == null) { productModel.PrintModelHeadID = 0; } #region 控件替换字段 var ModelType = (RenderField)grid1.Columns.FirstOrDefault(p => p.ID == "ModelType"); if (ModelType != null) { var ddlModelType = new DropDownList() { ID = "ddlModelType", Required = false, ForceSelection = false }; ddlModelType.Items.Add(new ListItem("生产进度计划单", "0")); ddlModelType.Items.Add(new ListItem("领料单", "1")); ddlModelType.Items.Add(new ListItem("子领料单", "2")); ddlModelType.Items.Add(new ListItem("装配流水线清单", "3")); ddlModelType.Items.Add(new ListItem("附件/铜排", "4")); ddlModelType.Items.Add(new ListItem("单台清单", "5")); ddlModelType.Items.Add(new ListItem("特殊要求", "6")); ddlModelType.Items.Add(new ListItem("预装清单", "7")); ddlModelType.EnableEdit = true; ModelType.Editor.Clear(); ModelType.Editor.Add(ddlModelType); ddlModelType.Readonly = true; ModelType.RendererFunction = "renderModelType"; } #endregion var Grid1data = GetData(productModel.PrintModelHeadID.Value, gchelper.GetQuery(grid1));//获取数据集 int RecordCount = Grid1data.Count(); grid1.DataSource = Paging(Grid1data, 0, grid1.PageSize, RecordCount, grid1.SortField, grid1.SortDirection); grid1.RecordCount = RecordCount; grid1.DataBind(); //grid1.Toolbars.First().Items.Add(new Button() { ID = "BtnPrintSingleList", Text = "单台清单", OnClick = new Event("click", Url.Action("BtnPrintSingleList_Click"), new Parameter("PlanOrderID", PlanOrderID.ToString())) }); grid1.Toolbars.First().Items.Add(new Button() { ID = "BtnPrint", Text = "打印", OnClick = new Event("click", Url.Action("BtnPrint_Click"), new Parameter("PlanOrderID", PlanOrderID.ToString()), new Parameter("Grid1_Data", "F.toJSON(F.ui.Grid1.getMergedData())"), new Parameter("SelectRows", "F.ui.Grid1.getSelectedRows()")) }); ViewBag.Grid = new ControlBase[] { grid1, new HiddenField() { ID = "PrintModelHeadID", Text = productModel.PrintModelHeadID.ToString() } }; return View(); } /// <summary> /// 查询条件变更事件 /// </summary> /// <param name="Grid1_fields">字段集合</param> /// <param name="Grid1_filteredData">过滤条件JSON</param> /// <returns></returns> [HttpPost] [ValidateAntiForgeryToken] [CheckPower(ISPower = false)] public IActionResult Grid1_Changed(int PrintModelHeadID, string Grid1_Query, JArray Grid1_fields, JArray Grid1_filteredData, string Grid1_sortField, string Grid1_sortDirection, int Grid1_pageIndex, int Grid1_PageSize, bool IsChanged = false) { var Grid1data = GetData(PrintModelHeadID, Grid1_Query, Grid1_filteredData);//获取数据集 var grid1 = UIHelper.Grid("Grid1"); if (IsChanged) { Grid1_pageIndex = 0; grid1.PageIndex(Grid1_pageIndex); } int RecordCount = Grid1data.Count(); grid1.RecordCount(RecordCount);//总行数 grid1.DataSource(Paging(Grid1data, Grid1_pageIndex, Grid1_PageSize, RecordCount, Grid1_sortField, Grid1_sortDirection), Grid1_fields);//分页 return UIHelper.Result(); } /// <summary> /// 导出数据事件 /// </summary> /// <param name="Grid1_filteredData">过滤条件JSON</param> /// <param name="columns">字段集合</param> /// <returns></returns> [CheckPower(ISPower = false, Name = "计划处理打印_导出")] public IActionResult Grid1_Export(int PrintModelHeadID, string Grid1_Query, JArray Grid1_filteredData, JArray columns, JArray Grid1_title, string title) { var Grid1data = GetData(PrintModelHeadID, Grid1_Query, Grid1_filteredData).ToList(); var data = ListHelp.ListToDataTable<MES_Bus_Plan_PrintModel>(Grid1data); ExcelHelper.ExportExcelByGrid(data, columns, title); return UIHelper.Result(); } /// <summary> /// 保存事件 /// </summary> /// <param name="Grid1_fields">字段集合</param> /// <param name="Grid1_modifiedData">已修改的数据JSON</param> /// <param name="Columns">字段集合</param> /// <returns></returns> [CheckPower(ISPower = false, Name = "计划处理打印_保存")] [HttpPost] [ValidateAntiForgeryToken] public IActionResult Grid1_Save(int PrintModelHeadID, string Grid1_Query, JArray Grid1_fields, JArray Grid1_modifiedData, JArray Columns, JArray Grid1_filteredData, string Grid1_sortField, string Grid1_sortDirection, int Grid1_pageIndex, int Grid1_PageSize) { List<MES_Bus_Plan_PrintModel> models = UpdateModel<MES_Bus_Plan_PrintModel>(Grid1_modifiedData, true); foreach (var model in models) { model.PrintModelHeadID = PrintModelHeadID; } db.SaveChanges(); var Grid1data = GetData(PrintModelHeadID, Grid1_Query, Grid1_filteredData); UIHelper.Grid("Grid1").DataSource(Paging(Grid1data, Grid1_pageIndex, Grid1_PageSize, Grid1data.Count(), Grid1_sortField, Grid1_sortDirection), Grid1_fields); UIHelper.Grid("Grid1").RecordCount(Grid1data.Count()); Alert.Show("保存成功,并已重新绑定数据", MessageBoxIcon.Success); return UIHelper.Result(); } /// <summary> /// 导入数据事件 /// </summary> /// <param name="fileImport">导入文件</param> /// <param name="Columns">字段集合</param> /// <returns></returns> [CheckPower(ISPower = false, Name = "计划处理打印_导入")] [HttpPost] [ValidateAntiForgeryToken] public IActionResult Grid1_Import(int PrintModelHeadID, string Grid1_Query, IFormFile fileImport, JArray Columns, JArray Grid1_fields, JArray Grid1_filteredData, string Grid1_sortField, string Grid1_sortDirection, int Grid1_pageIndex, int Grid1_PageSize, int OrderID) { Dictionary<string, object> dics = new Dictionary<string, object>(); dics.Add("PrintModelHeadID", PrintModelHeadID); var models = ExcelHelper.ImportExcelToGrid<MES_Bus_Plan_PrintModel>(fileImport, Columns, dics); var Grid1data = GetData(PrintModelHeadID, Grid1_Query, Grid1_filteredData); UIHelper.Grid("Grid1").DataSource(Paging(Grid1data, Grid1_pageIndex, Grid1_PageSize, Grid1data.Count(), Grid1_sortField, Grid1_sortDirection), Grid1_fields); UIHelper.Grid("Grid1").RecordCount(Grid1data.Count()); UIHelper.FileUpload("fileImport").Reset(); Alert.Show("导入成功,并已重新绑定数据", MessageBoxIcon.Success); return UIHelper.Result(); } /// <summary> /// 绑定列事件 /// </summary> /// <param name="Columns"></param> /// <returns></returns> [CheckPower(ISPower = false, Name = "计划处理打印_绑定列")] [HttpPost] [ValidateAntiForgeryToken] public IActionResult Grid1_Bind(JArray Columns) { new GridConfigHelp(db, Url).SetColumnWidth(Columns, "Grid1", RouteData); Alert.Show("绑定列成功!", MessageBoxIcon.Success); return UIHelper.Result(); } [HttpPost] [ValidateAntiForgeryToken] [CheckPower(ISPower = false, Name = "计划处理打印_打印")] public IActionResult BtnPrint_Click(int PlanOrderID, JArray Grid1_Data, int[] SelectRows) { var somdb = new Model.SomContext(); var ord = db.MES_Bus_Plan_Orders.Find(PlanOrderID);//计划订单表 var heads = db.MES_Bus_Plan_PartHead.Include(p => p.Bodies).Where(p => p.PlanOrderID == PlanOrderID).AsNoTracking().ToList();//计划订单零件 ListHelp.NullToEmpty(heads); new MesHelp(db).CountPart(heads, false);//重新计算备注转序列 var products = db.MES_Bus_Plan_Product.Where(p => p.PlanOrderID == PlanOrderID).AsNoTracking().ToList();//计划订单柜体 var SomOrd = somdb.ViewOrders.First(p => p.OrderID == ord.OrderID);//获取OMS订单数据 //var lists = GetOrderCustomerDemandToList(somdb, SomOrd.rowguid); var ContainerNOS = products.Select(p => p.ContainerNO).ToList(); //Modify By:Jundi Date:2019-06-06 Desc:特殊要求数据源从静态表取数 var lists = GetCustomerDemandToList(ord.OrderIDS); #region 数量校验 var Error = ""; foreach (var head in heads) { if (head.Quantity != head.Bodies.Where(p => ContainerNOS.Contains(p.ContainerNO)).Sum(p => p.Quantity)) { if (Error != "") { Error += ","; } Error += head.CodeName; } } if (Error != "") { Alert.Show(Error + "这些图号数量异常,请重新修改!"); return UIHelper.Result(); } #endregion #region 获取特殊要求工位 /* var data1 = (from ocd in lists.Where(p => p.CusDemandID == 0) join cds in somdb.TCustomerDemandOrderStation on ocd.ID equals cds.OrderCustDemandID select new Model.TCustomerDemandOrderStation { AssemblingStation = cds.AssemblingStation, BusinessCode = cds.BusinessCode, Checker = cds.Checker, REMARK = cds.REMARK, OrderCustDemandID = ocd.ID, CusDemandName = ocd.CusDemandName, CusDemandType = ocd.CusDemandType, UsedRemark = ocd.UsedRemark, UsedStatus = ocd.UsedStatus, UsedType = ocd.UsedType, }).ToList();//开启查询项目特殊要求工位 var data2 = (from ocd in lists.Where(p => p.CusDemandID != 0) join cds in somdb.TCustomerDemandStation on ocd.CusDemandID equals cds.CusDemandID select new Model.TCustomerDemandOrderStation { AssemblingStation = cds.AssemblingStation, BusinessCode = cds.BusinessCode, Checker = cds.Checker, REMARK = cds.REMARK, OrderCustDemandID = ocd.ID, CusDemandName = ocd.CusDemandName, CusDemandType = ocd.CusDemandType, UsedRemark = ocd.UsedRemark, UsedStatus = ocd.UsedStatus, UsedType = ocd.UsedType, }).ToList();//开启查询标准特殊要求工位 */ var data1 = (from ocd in lists.Where(p => p.CusDemandID == 0)//开启查询项目特殊要求工位 select new Model.TCustomerDemandOrderStation { AssemblingStation = ocd.PartSID, OrderCustDemandID = ocd.ID, CusDemandName = ocd.CusDemandName, CusDemandType = ocd.CusDemandType, UsedRemark = ocd.UsedRemark, UsedStatus = ocd.UsedStatus, UsedType = ocd.UsedType, }).ToList(); var data2 = (from ocd in lists.Where(p => p.CusDemandID != 0)//开启查询标准特殊要求工位 select new Model.TCustomerDemandOrderStation { AssemblingStation = ocd.PartSID, OrderCustDemandID = ocd.ID, CusDemandName = ocd.CusDemandName, CusDemandType = ocd.CusDemandType, UsedRemark = ocd.UsedRemark, UsedStatus = ocd.UsedStatus, UsedType = ocd.UsedType, }).ToList(); var cdos = new List<Model.TCustomerDemandOrderStation>(); cdos.AddRange(data1); cdos.AddRange(data2); #endregion var ProInventorys = new List<Model.TProInventory>(); var OrderIDList = ord.OrderIDS.Split(',').ToList().Distinct().ToList(); var pros = somdb.TProInventory.Where(p => p.OrderID != null && p.IsCabinet == 1 && OrderIDList.Contains(p.OrderID.ToString())).ToList(); var ppp = from pro in pros join product in products on new { pro.OrderID, pro.Cabinet_no } equals new { product.OrderID, Cabinet_no = product.ContainerNumber.ToString() } select new Model.TProInventory { U9Pro_model= pro.U9Pro_model , Spec= pro.Spec, OrderID= pro.OrderID }; if (OrderIDList.Count>1) { var ords = somdb.TOrders.Where(p => OrderIDList.Contains(p.rowguid.ToString())).ToList(); ppp= from p in ppp join o in ords on p.OrderID equals o.rowguid select new Model.TProInventory { U9Pro_model = p.U9Pro_model+"_"+o.Contract_i_no, Spec = p.Spec }; } ProInventorys = ppp.GroupBy(p => new { p.U9Pro_model, p.Spec }).Select(g => new Model.TProInventory { U9Pro_model = g.Key.U9Pro_model, Spec = g.Key.Spec, OrderID = g.Count() }).ToList(); //获取OMS柜体台数 List<MES_Bus_Plan_PartBody> bodys = new List<MES_Bus_Plan_PartBody>(); foreach (var head in heads) { foreach (var bod in head.Bodies) { if (head.ISMoveBatche) { bod.BatchNo = 1; } else { var product = products.First(p => p.ContainerNO == bod.ContainerNO); bod.BatchNo = product.BatchNo.Value;//如果没有批次号 那么等于柜子的批次号 } bodys.Add(bod); } }//获取批次零件 Dictionary<string, int> dics = new Dictionary<string, int>(); string File = "~/FileTemp/计划处理模板.xlsm"; string FullPathFileName = PageContext.MapPath(File); var printModels = JsonHelper.GridJsonToList<MES_Bus_Plan_PrintModel>(Grid1_Data).OrderBy(p => p.Order).ToList();//获取当前页面的打印数据 if (SelectRows.Count() > 0) { printModels = printModels.Where(p => SelectRows.Contains(p.PrintModelID)).ToList(); } using (FileStream stream = new FileStream(FullPathFileName, FileMode.Open, FileAccess.Read)) { using (ExcelPackage package = new ExcelPackage(stream)) { foreach (var printModel in printModels) { if (printModel.ModelType == 0) {//导出生产进度计划表 for (int i = 0; i < printModel.Copies; i++) { ProductionSchedule(ord, package, dics, SomOrd, ProInventorys, printModel); } } else if (printModel.ModelType == 1) {//领料单 for (int i = 0; i < printModel.Copies; i++) { Picking(heads, ord, package, dics, SomOrd, cdos, printModel); } } else if (printModel.ModelType == 2) {//子领料单 for (int i = 0; i < printModel.Copies; i++) { ChildPicking(heads, bodys, products, ord, package, dics, printModel); } } else if (printModel.ModelType == 3) {//装配流水线清单 for (int i = 0; i < printModel.Copies; i++) { Assemble(heads, bodys, products, ord, package, dics, cdos, printModel); } } else if (printModel.ModelType == 4) {//铜排/附件 for (int i = 0; i < printModel.Copies; i++) { CopperOrAppendix(heads, ord, package, dics, cdos, printModel); } } else if (printModel.ModelType == 5) {//单台清单 for (int i = 0; i < printModel.Copies; i++) { SingleList(cdos, heads, bodys, ord, printModel); // PartGroupBOM( heads, bodys, ord, printModel); } } else if (printModel.ModelType == 6) {//特殊要求 for (int i = 0; i < printModel.Copies; i++) { DemandOrderStation(cdos, ord, package, dics, printModel); } } else if (printModel.ModelType == 7) {//预装清单 for (int i = 0; i < printModel.Copies; i++) { // PartGroupBOM( heads, bodys, ord, printModel); } } } package.Workbook.Properties.Title = "计划处理导出";//设置excel的标题 package.Workbook.Properties.Author = "许加龙";//作者 package.Workbook.Properties.Company = "万控智造(浙江)电气有限公司";//公司 package.Workbook.Worksheets.Delete("生产进度计划单模板"); package.Workbook.Worksheets.Delete("铜排模板"); package.Workbook.Worksheets.Delete("特殊要求模板"); package.Workbook.Worksheets[0].Select(); if (package.Workbook.Worksheets.Count > 1) { var data = package.GetAsByteArray(); var FileName = DateTime.Now.ToString("yyyyMMddHHmmssff") + ord.Contract_i_no + ord.CustomerName + Math.Round(ord.Plat_number.Value, 0) + "台" + UserInfo.UserName + ".xlsm"; DirFileHelp.CreateFile(MesConfig.UploadPath + FileName, data); DirFileHelp.DownFile(MesConfig.UploadPath + FileName); } } } return UIHelper.Result(); } #endregion #region C#方法 /// <summary> /// 获取数据源 /// </summary> /// <param name="Grid1_filteredData">过滤条件JSON</param> /// <returns></returns> private IQueryable<MES_Bus_Plan_PrintModel> GetData(int PrintModelHeadID, string Grid1_Query, JArray Grid1_filteredData = null) { LambdaHelper<MES_Bus_Plan_PrintModel> lamada = new LambdaHelper<MES_Bus_Plan_PrintModel>(); GridFilterHelp.SetFilter(lamada, Grid1_filteredData, Grid1_Query, UserInfo);//将过滤条件转换为兰姆达表达式 lamada.And(p => p.PrintModelHeadID == PrintModelHeadID); return db.MES_Bus_Plan_PrintModel.Where(lamada.andwhere); } #region 导出计划处理清单 /// <summary> /// 导出领料清单 /// </summary> /// <param name="heads">表头</param> /// <param name="ord">计划订单</param> /// <param name="package">EXCEL</param> /// <param name="dics"></param> /// <param name="ProductClan">产品族</param> private void Picking(List<MES_Bus_Plan_PartHead> heads, MES_Bus_Plan_Orders ord, ExcelPackage package, Dictionary<string, int> dics, Som.ViewModel.ViewOrders SomOrd, List<Model.TCustomerDemandOrderStation> cdos, MES_Bus_Plan_PrintModel PrintModel) { LambdaHelper<MES_Bus_Plan_PartHead> lamada = new LambdaHelper<MES_Bus_Plan_PartHead>(); if (!string.IsNullOrEmpty(PrintModel.Condition)) { GridFilterHelp.SetFilter(lamada, JArray.Parse(PrintModel.Condition), "", UserInfo);//将过滤条件转换为兰姆达表达式 } var models = heads.AsQueryable().Where(lamada.andwhere).ToList(); if (models.Count == 0) { return; } var newsheet = PrintModel.REMARK; var NO = 1; if (dics.ContainsKey(newsheet))//判断是否存在该清单 { NO = dics[newsheet]; NO++; dics[newsheet] = NO; } else { dics.Add(newsheet, 1); } var worksheet = package.Workbook.Worksheets.Add(newsheet + GetRome(NO)); //创建sheet worksheet.Column(1).Width = 8; //产品族 worksheet.Column(2).Width = 6; //组别 worksheet.Column(3).Width = 7; //工位 worksheet.Column(4).Width = 30; //名称 worksheet.Column(5).Width = 15; //图号 worksheet.Column(6).Width = 16; //规格 worksheet.Column(7).Width = 10; //材料 worksheet.Column(8).Width = 6; //数量 worksheet.Column(9).Width = 15; //转序 worksheet.Column(10).Width = 23; //备注 worksheet.Cells["A1:J6"].Style.Font.Name = "宋体"; //字体设置 worksheet.Cells["A1:J6"].Style.Font.Bold = true; //加粗 worksheet.Cells["A1:J6"].Style.Font.Size = 14; worksheet.Cells["A5"].Style.Font.Color.SetColor(Color.White);//字体颜色:白色 worksheet.Cells["A5:C5"].Style.Fill.PatternType = ExcelFillStyle.Solid; worksheet.Cells["A5:C5"].Style.Fill.BackgroundColor.SetColor(Color.Red);//背景颜色:酒红色 worksheet.Cells["A6:J6"].Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;//字体水平居中 worksheet.Cells["A5:C5"].Merge = true; //合并单元格 worksheet.Cells["D2:I2"].Merge = true; //合并单元格 worksheet.Cells["D3:F3"].Merge = true; //合并单元格 //worksheet.Cells["E5:J5"].Merge = true; //合并单元格 worksheet.Cells["A5"].Value = newsheet;//A5 领料清单-喷塑线 worksheet.Cells["D2"].Value = "客户名称:" + ord.CustomerName;//客户名称:中骏电气 worksheet.Cells["D3"].Value = "合同编号:" + ord.Contract_i_no;//合同编号:G180930-190 worksheet.Cells["D4"].Value = "产品型号:" + ord.Pro_model;//产品型号:KYN28A-12(II) worksheet.Cells["D5"].Value = "柜体台数:" + Math.Round(ord.Plat_number.Value, 0);//台数:29 worksheet.Cells["E4"].Value = "装配日期:" + (ord.Assemble_time == null ? "" : ord.Assemble_time.Value.ToShortDateString());//装配日期:2018-01-01 worksheet.Cells["E5"].Value = ord.PlanRemark;//重点备注://待取值 worksheet.Cells["J2"].Value = "计划员:" + UserInfo.UserName;//计划员:李媛媛 // 张爱强说 谁打印就显示谁的名字 worksheet.Cells["J3"].Value = "技术员:" + ord.DesignName;//技术员 if (ord.FactoryID == 4)//辛柏 { worksheet.Cells["J4"].Value = "编程员:" + ord.NameplateHole;//编程员 } else { worksheet.Cells["J4"].Value = "手车/抽屉:" + ord.HandcartOrDrawerNumber;//手车或抽屉数量 var OrderIDList = ord.OrderIDS.Split(',').ToList().Distinct().ToList(); var ConvCarNumber = new Model.SomContext().TOrders.Where(p => OrderIDList.Contains(p.rowguid.ToString())).Sum(q => q.ConvCarNumber); worksheet.Cells["J5"].Value = "转运车:" + ConvCarNumber;//转车数量 } worksheet.Cells["G3:I5"].Merge = true; //合并单元格 worksheet.Cells["G3"].Value = PrintModel.AllocationDepartment;//分配部门 worksheet.Cells["G3"].Style.Font.Size = 24; worksheet.Cells["A6"].Value = "产品族"; worksheet.Cells["B6"].Value = "组别"; worksheet.Cells["C6"].Value = "工位"; worksheet.Cells["D6"].Value = "名称"; worksheet.Cells["E6"].Value = "图号"; worksheet.Cells["F6"].Value = "规格"; worksheet.Cells["G6"].Value = "材料"; worksheet.Cells["H6"].Value = "数量"; worksheet.Cells["I6"].Value = "转序"; worksheet.Cells["J6"].Value = "备注"; int Row = 6; //循环写入清单 foreach (var model in models.Where(p=>p.PartName=="梁"||p.PartName.Contains("安装梁")).OrderBy(p => p.AssemblingStation).ThenBy(p => p.ProductClan).ThenBy(p => p.PartName)) { Row++; worksheet.Cells[Row, 1].Value = model.ProductClan;//产品族 worksheet.Cells[Row, 2].Value = model.AssemblingGroup;//组别 worksheet.Cells[Row, 3].Value = model.AssemblingStation;//工位 worksheet.Cells[Row, 4].Value = model.PartName;//名称 worksheet.Cells[Row, 5].Value = model.CodeName;//图号 worksheet.Cells[Row, 6].Value = model.Specification;//规格 worksheet.Cells[Row, 7].Value = model.MaterialQuality;//材料 worksheet.Cells[Row, 8].Value = model.Quantity;//数量 worksheet.Cells[Row, 9].Value = model.TransferOrder;//转序 if (string.IsNullOrEmpty(model.SkillRemark)) { if (!string.IsNullOrEmpty(model.Opening))//如果开孔编号不为空 { model.SkillRemark += "【" + model.Opening + "】/ "; } model.SkillRemark += "版本"; if (!string.IsNullOrEmpty(model.MaterialVersion))//版本号不为空 { model.SkillRemark += model.MaterialVersion; } } else { if (!string.IsNullOrEmpty(model.Opening) && !model.SkillRemark.Contains("【" + model.Opening + "】")) { model.SkillRemark = "【" + model.Opening + "】/ " + model.SkillRemark; } } worksheet.Cells[Row, 10].Value = model.SkillRemark;//备注 } //循环写入清单 foreach (var model in models.Where(p=>p.PartName != "梁" && !p.PartName.Contains("安装梁")).OrderBy(p => p.AssemblingStation).ThenBy(p => p.ProductClan).ThenBy(p => p.PartName)) { Row++; worksheet.Cells[Row, 1].Value = model.ProductClan;//产品族 worksheet.Cells[Row, 2].Value = model.AssemblingGroup;//组别 worksheet.Cells[Row, 3].Value = model.AssemblingStation;//工位 worksheet.Cells[Row, 4].Value = model.PartName;//名称 worksheet.Cells[Row, 5].Value = model.CodeName;//图号 worksheet.Cells[Row, 6].Value = model.Specification;//规格 worksheet.Cells[Row, 7].Value = model.MaterialQuality;//材料 worksheet.Cells[Row, 8].Value = model.Quantity;//数量 worksheet.Cells[Row, 9].Value = model.TransferOrder;//转序 if (string.IsNullOrEmpty(model.SkillRemark)) { if (!string.IsNullOrEmpty(model.Opening) && !model.SkillRemark.Contains("【" + model.Opening + "】"))//如果开孔编号不为空 { model.SkillRemark += "【" + model.Opening + "】/ "; } model.SkillRemark += "版本"; if (!string.IsNullOrEmpty(model.MaterialVersion))//版本号不为空 { model.SkillRemark += model.MaterialVersion; } } else { if (!string.IsNullOrEmpty(model.Opening) && !model.SkillRemark.Contains("【" + model.Opening + "】")) { model.SkillRemark = "【" + model.Opening + "】/ " + model.SkillRemark; } } worksheet.Cells[Row, 10].Value = model.SkillRemark;//备注 } if (PrintModel.REMARK.Contains("抽屉组") && cdos.Where(p => p.AssemblingStation != null && p.AssemblingStation.Contains("CT")).Count() > 0) {//写入特殊求 Row++; worksheet.Cells[Row, 1].Value = "特殊要求";//特殊要求 worksheet.Cells[Row, 2].Value = "检验员";//检验员 worksheet.Cells[Row, 3].Value = "工位";//工位 worksheet.Cells[Row, 4].Value = "特殊要求类别";//特殊要求类别 worksheet.Cells[Row, 5].Value = "特殊要求";//特殊要求 worksheet.Cells["E" + Row + ":J" + Row].Merge = true; //合并单元格 worksheet.Cells["A" + Row + ":E" + Row].Style.Font.Bold = true; //设置字体加粗 //循环写入特殊要求 foreach (var cdo in cdos.Where(p => p.AssemblingStation != null && p.AssemblingStation.Contains("CT"))) { Row++; worksheet.Cells[Row, 1].Value = "特殊要求";//特殊要求 worksheet.Cells[Row, 2].Value = cdo.Checker;//检验员 worksheet.Cells[Row, 3].Value = cdo.AssemblingStation;//工位 worksheet.Cells[Row, 4].Value = cdo.CusDemandType;//特殊要求类别 worksheet.Cells[Row, 5].Value = cdo.CusDemandName;//特殊要求 worksheet.Cells[Row, 5].Style.WrapText = true;//自动换行 worksheet.Cells["E" + Row + ":J" + Row].Merge = true; //合并单元格 } } if (PrintModel.REMARK.Contains("手车") && cdos.Where(p => p.AssemblingStation!=null&& p.AssemblingStation.Contains("手车")).Count() > 0) {//写入特殊求 Row++; worksheet.Cells[Row, 1].Value = "特殊要求";//特殊要求 worksheet.Cells[Row, 2].Value = "检验员";//检验员 worksheet.Cells[Row, 3].Value = "工位";//工位 worksheet.Cells[Row, 4].Value = "特殊要求类别";//特殊要求类别 worksheet.Cells[Row, 5].Value = "特殊要求";//特殊要求 worksheet.Cells["E" + Row + ":J" + Row].Merge = true; //合并单元格 worksheet.Cells["A" + Row + ":E" + Row].Style.Font.Bold = true; //设置字体加粗 //循环写入特殊要求 foreach (var cdo in cdos.Where(p => p.AssemblingStation != null && p.AssemblingStation.Contains("手车"))) { Row++; worksheet.Cells[Row, 1].Value = "特殊要求";//特殊要求 worksheet.Cells[Row, 2].Value = cdo.Checker;//检验员 worksheet.Cells[Row, 3].Value = cdo.AssemblingStation;//工位 worksheet.Cells[Row, 4].Value = cdo.CusDemandType;//特殊要求类别 worksheet.Cells[Row, 5].Value = cdo.CusDemandName;//特殊要求 worksheet.Cells[Row, 5].Style.WrapText = true;//自动换行 worksheet.Cells["E" + Row + ":J" + Row].Merge = true; //合并单元格 } } var Cells = worksheet.Cells[6, 1, Row, 10]; Cells.Style.Border.Left.Style = ExcelBorderStyle.Thin; //边框样式 Cells.Style.Border.Right.Style = ExcelBorderStyle.Thin; Cells.Style.Border.Bottom.Style = ExcelBorderStyle.Thin; Cells.Style.Border.Top.Style = ExcelBorderStyle.Thin; Cells.Style.ShrinkToFit = true;//字体自动填充 //worksheet.PrinterSettings.PrintArea.Address = new ExcelAddress(1,1,Row,10).Address; var BodyCells = worksheet.Cells[7, 1, Row, 10]; BodyCells.Style.Font.Name = "宋体"; //字体设置 BodyCells.Style.Font.Size = 12; worksheet.PrinterSettings.Scale = 75;//打印缩放 worksheet.PrinterSettings.RepeatRows = new ExcelAddress("$1:$6");//设置打印标题 worksheet.View.FreezePanes(7, 1);//冻结窗格 worksheet.PrinterSettings.LeftMargin = 0.2m;//左边距 worksheet.PrinterSettings.RightMargin = 0.1m;//右边距 worksheet.PrinterSettings.TopMargin = 0m;//上边距 worksheet.PrinterSettings.BottomMargin = 0.5m;//下边距 worksheet.HeaderFooter.OddFooter.LeftAlignedText = "编制:" + UserInfo.UserName + " " + "日期:" + Now.ToShortDateString() + " " + "领料/日期: 出库/日期: 记账/日期: " + "&P/&N"; worksheet.Row(1).Hidden = true;//隐藏第一行 string File = "~/FileTemp/万控文件LOGO.bmp"; string FullPathFileName = PageContext.MapPath(File); using (FileStream stream = new FileStream(FullPathFileName, FileMode.Open, FileAccess.Read)) { ExcelPicture picture = worksheet.Drawings.AddPicture("logo", System.Drawing.Image.FromStream(stream));//插入图片 picture.SetPosition(38, 4);//设置图片的位置 picture.SetSize(127, 36);//设置图片的大小 } } /// <summary> /// 导出生产进度计划单 /// </summary> private void ProductionSchedule(MES_Bus_Plan_Orders ord, ExcelPackage package, Dictionary<string, int> dics, Som.ViewModel.ViewOrders SomOrd, List<Model.TProInventory> models, MES_Bus_Plan_PrintModel PrintModel) { var newsheet = "生产进度计划单"; var NO = 1; if (dics.ContainsKey(newsheet))//判断是否存在该清单 { NO = dics[newsheet]; NO++; dics[newsheet] = NO; } else { dics.Add(newsheet, 1); } var worksheet = package.Workbook.Worksheets.Copy("生产进度计划单模板", newsheet + GetRome(NO)); worksheet.Cells["B2"].Value = ord.CustomerName;//客户名称 worksheet.Cells["L2"].Value = ord.Plat_colour;//面板颜色 worksheet.Cells["B3"].Value = ord.Contract_i_no;//内部合同号 worksheet.Cells["E3"].Value = Math.Round(ord.Plat_number.Value) + "台";//数量 worksheet.Cells["L3"].Value = ord.Frame_colour;//框架颜色 worksheet.Cells["B4"].Value = ord.AreaName;//办事处 worksheet.Cells["L4"].Value = UserInfo.UserName;//计划员 worksheet.Cells["B5"].Value = SomOrd.Plat_door;//柜型 worksheet.Cells["E5"].Value = ord.Pro_model;//产品型号 worksheet.Cells["L5"].Value = ord.DesignName;//技术员 if (ord.FactoryID == 4) { worksheet.Cells["C7"].Value = ord.REC_CREATE_TIME.ToString("yyyy年MM月dd日") + "前完成。";//计调车间时间 } else { worksheet.Cells["C7"].Value = ord.Assemble_time == null ? "" : ord.Assemble_time.Value.AddDays(-2).ToString("yyyy年MM月dd日") + "前完成。";//计调车间时间 } worksheet.Cells["C8"].Value = ord.Assemble_time == null ? "" : ord.Assemble_time.Value.AddDays(-1).ToString("yyyy年MM月dd日") + "前完成。";//生产车间时间 worksheet.Cells["C9"].Value = ord.Assemble_time == null ? "" : ord.Assemble_time.Value.AddDays(-1).ToString("yyyy年MM月dd日") + "前完成。";//装配车间时间 worksheet.Cells["L8"].Value = ord.AnalogCardHole;//模拟牌孔 worksheet.Cells["L9"].Value = ord.NameplateHole;//铭牌孔 worksheet.Cells["B10"].Value = SomOrd.PackType;//包装要求 worksheet.Cells["B12"].Value = ord.Blows_colour;//眉头颜色 worksheet.Cells["B15"].Value = ord.MakeType;//常规 worksheet.Cells["B16"].Value = ord.HandcartOrDrawerNumber;//手车数量或抽屉数量 var OrderIDList = ord.OrderIDS.Split(',').ToList().Distinct().ToList(); var ConvCarNumber = new Model.SomContext().TOrders.Where(p => OrderIDList.Contains(p.rowguid.ToString())).Sum(q => q.ConvCarNumber); worksheet.Cells["B17"].Value = ConvCarNumber;//转运车数量 worksheet.Cells["G11"].Value = ord.PlanRemark;//计划备注 worksheet.Cells["L1"].Value = PrintModel.AllocationDepartment;//分配部门 worksheet.Cells["B14"].Value = ord.PanelDemand;//板材要求 if (ord.FactoryID == 4)//辛柏 { worksheet.Cells["B11"].Value = ord.Cabinet_colour;// worksheet.Cells["B13"].Value = ord.AnalogCardHole;// worksheet.Cells["H3"].Value = "机柜颜色";//机柜颜色 worksheet.Cells["L3"].Value = ord.Frame_colour;//机柜颜色 } else { worksheet.Cells["B11"].Value = ord.InstrumentDoor;//仪表门 worksheet.Cells["B13"].Value = ord.CabinetTop_Color;//柜顶颜色 } int Row = 20; //循环写入清单 foreach (var model in models) { Row++; worksheet.Cells["A" + Row + ":D" + Row].Merge = true; //合并单元格 worksheet.Cells["E" + Row + ":L" + Row].Merge = true; //合并单元格 worksheet.Cells["M" + Row + ":O" + Row].Merge = true; //合并单元格 worksheet.Cells["A" + Row].Value = model.U9Pro_model;//品名 worksheet.Cells["E" + Row].Value = model.Spec;//规格 worksheet.Cells["M" + Row].Value = model.OrderID;//数量 } var Cells = worksheet.Cells[20, 1, Row, 15]; Cells.Style.Border.Left.Style = ExcelBorderStyle.Thin; //边框样式 Cells.Style.Border.Right.Style = ExcelBorderStyle.Thin; Cells.Style.Border.Bottom.Style = ExcelBorderStyle.Thin; Cells.Style.Border.Top.Style = ExcelBorderStyle.Thin; Cells.Style.ShrinkToFit = true;//字体自动填充 if (ord.FactoryID != 4) //辛柏不需要 { Row++; worksheet.Cells["A" + Row].Value = " 说明:";//品名 Row++; worksheet.Cells["A" + Row].Value = " 1、此单作为生产指令与技术规范同时下发。";//品名 Row++; worksheet.Cells["A" + Row].Value = " 2、生产过程中的有关事项可与项目负责人直接协商。";//品名 } worksheet.HeaderFooter.OddFooter.LeftAlignedText = "编制:" + UserInfo.UserName + " " + "日期:" + Now.ToShortDateString() + " " + "领料/日期: 出库/日期: 记账/日期: " + "&P/&N"; } /// <summary> /// 导出铜排/附件 /// </summary> private void CopperOrAppendix(List<MES_Bus_Plan_PartHead> heads, MES_Bus_Plan_Orders ord, ExcelPackage package, Dictionary<string, int> dics, List<Model.TCustomerDemandOrderStation> cdos, MES_Bus_Plan_PrintModel PrintModel) { var newsheet = PrintModel.REMARK; LambdaHelper<MES_Bus_Plan_PartHead> lamada = new LambdaHelper<MES_Bus_Plan_PartHead>(); if (!string.IsNullOrEmpty(PrintModel.Condition)) { GridFilterHelp.SetFilter(lamada, JArray.Parse(PrintModel.Condition), "", UserInfo);//将过滤条件转换为兰姆达表达式 } var models = heads.AsQueryable().Where(lamada.andwhere).ToList(); if (models.Count == 0) { return; } var NO = 1; if (dics.ContainsKey(newsheet))//判断是否存在该清单 { NO = dics[newsheet]; NO++; dics[newsheet] = NO; } else { dics.Add(newsheet, 1); } var worksheet = package.Workbook.Worksheets.Copy("铜排模板", newsheet + GetRome(NO)); worksheet.Cells["A9"].Value = "客户名称:" + ord.CustomerName;//客户名称 worksheet.Cells["C9"].Value = "数量:" + Math.Round(ord.Plat_number.Value, 2);//数量 worksheet.Cells["D9"].Value = "合同编号:" + ord.Contract_i_no;//内部合同号 worksheet.Cells["G9"].Value = "计划员:" + UserInfo.UserName;//计划员 worksheet.Cells["G3"].Value = PrintModel.AllocationDepartment;//分配部门 if (ord.Pro_name == "高压柜体") { worksheet.Cells["C10"].Formula = "TODAY()+1";// worksheet.Cells["C11"].Formula = "TODAY()+2";// } else { worksheet.Cells["C10"].Value = ord.Assemble_time.Value;// worksheet.Cells["C11"].Value = ord.Assemble_time.Value.AddDays(1);// } int Row = 15; //循环写入清单 var newmodels = models; if (ord.Pro_name == "低压柜体") { newmodels = models.OrderBy(p => p.Specification).ThenBy(p => p.PartName).ToList(); } else { newmodels = models.OrderBy(p => p.PartName).ThenBy(p => p.Specification).ToList(); } foreach (var model in newmodels.OrderBy(p => p.AssemblingStation).ThenBy(p => p.ProductClan).ThenBy(p => p.PartName)) { Row++; worksheet.Cells["A" + Row].Value = model.AssemblingGroup;//组别 worksheet.Cells["B" + Row].Value = model.PartName;//部件名称 worksheet.Cells["C" + Row].Value = model.CodeName;//图号 worksheet.Cells["D" + Row].Value = model.MaterialQuality;//材料 worksheet.Cells["E" + Row].Value = model.Quantity;//数量 worksheet.Cells["F" + Row].Value = model.Specification;//规格 worksheet.Cells["G" + Row].Value = model.REMARK+" "+model.SkillRemark;//备注 worksheet.Cells["H" + Row].Value = model.MaterialCode;//物料编码 worksheet.Cells["I" + Row].Value = model.CuPunching;//铜排 } if (cdos.Where(p => p.AssemblingStation != null && PrintModel.REMARK.Contains( p.AssemblingStation)).Count() > 0) {//写入特殊要求 Row++; worksheet.Cells[Row, 1].Value = "特殊要求";//特殊要求 worksheet.Cells[Row, 2].Value = "检验员";//检验员 worksheet.Cells[Row, 3].Value = "工位";//工位 worksheet.Cells[Row, 4].Value = "特殊要求类别";//特殊要求类别 worksheet.Cells[Row, 5].Value = "特殊要求";//特殊要求 worksheet.Cells["E" + Row + ":J" + Row].Merge = true; //合并单元格 worksheet.Cells["A" + Row + ":E" + Row].Style.Font.Bold = true; //设置字体加粗 //循环写入特殊要求 foreach (var cdo in cdos.Where(p => p.AssemblingStation != null && PrintModel.REMARK.Contains(p.AssemblingStation))) { Row++; worksheet.Cells[Row, 1].Value = "特殊要求";//特殊要求 worksheet.Cells[Row, 2].Value = cdo.Checker;//检验员 worksheet.Cells[Row, 3].Value = cdo.AssemblingStation;//工位 worksheet.Cells[Row, 4].Value = cdo.CusDemandType;//特殊要求类别 worksheet.Cells[Row, 5].Value = cdo.CusDemandName;//特殊要求 worksheet.Cells[Row, 5].Style.WrapText = true;//自动换行 worksheet.Cells["E" + Row + ":J" + Row].Merge = true; //合并单元格 } } var Cells = worksheet.Cells[16, 1, Row, 9]; Cells.Style.Border.Left.Style = ExcelBorderStyle.Thin; //边框样式 Cells.Style.Border.Right.Style = ExcelBorderStyle.Thin; Cells.Style.Border.Bottom.Style = ExcelBorderStyle.Thin; Cells.Style.Border.Top.Style = ExcelBorderStyle.Thin; Cells.Style.ShrinkToFit = true;//字体自动填充 Cells.Style.Font.Size = 14; worksheet.HeaderFooter.OddFooter.LeftAlignedText = "编制:" + UserInfo.UserName + " " + "日期:" + Now.ToShortDateString() + " " + "领料/日期: 出库/日期: 记账/日期: " + "&P/&N"; } /// <summary> /// 导出子清单 /// </summary> /// <param name="heads">表头</param> /// <param name="ord">计划订单</param> /// <param name="package">EXCEL</param> /// <param name="dics"></param> /// <param name="ProductClan">产品族</param> private void ChildPicking(List<MES_Bus_Plan_PartHead> heads, List<MES_Bus_Plan_PartBody> bodys, List<MES_Bus_Plan_Product> products, MES_Bus_Plan_Orders ord, ExcelPackage package, Dictionary<string, int> dics, MES_Bus_Plan_PrintModel PrintModel) { var Batchs = bodys.GroupBy(p => p.BatchNo).OrderBy(p => p.Key).Select(p => p.Key).ToList();//所有批次 foreach (var Batch in Batchs) { LambdaHelper<MES_Bus_Plan_PartHead> lamada = new LambdaHelper<MES_Bus_Plan_PartHead>(); if (!string.IsNullOrEmpty(PrintModel.Condition)) { GridFilterHelp.SetFilter(lamada, JArray.Parse(PrintModel.Condition), "", UserInfo);//将过滤条件转换为兰姆达表达式 } var models = (from head in heads join body in bodys on head.ID equals body.HeadID where body.BatchNo == Batch.Value select new MES_Bus_Plan_PartHead { ID = head.ID,//主键 ProductClan = head.ProductClan,//产品族 AssemblingGroup = head.AssemblingGroup,//组别 AssemblingStation = head.AssemblingStation,//工位 PartName = head.PartName,//名称 CodeName = head.CodeName,//代号 ConsultCode = head.ConsultCode,//参考代号 MaterialVersion = head.MaterialVersion,//版本号 Specification = head.Specification,//规格 MaterialQuality = head.MaterialQuality,//材料 PlateSize = head.PlateSize,//下料尺寸 ReferencePlateSize = head.ReferencePlateSize,//板材规格 MultiParts = head.MultiParts,//双件 MultiPartsRemark = head.MultiPartsRemark,//双件备注 Add By:Jundi Date:2019-05-08 MoldRemark = head.MoldRemark,//模具备注 ClipPlateMachineNumber = head.ClipPlateMachineNumber,//剪板机 PunchingMachineNumber = head.PunchingMachineNumber,//冲床 BendingMachineNumber = head.BendingMachineNumber,//折弯机 Purchasing = head.Purchasing,//采购 Guillotining = head.Guillotining,//剪板 Punching = head.Punching,//冲制 CuPunching = head.CuPunching,//铜排 Tapping = head.Tapping,//攻丝 Bending = head.Bending,//折弯 Stock = head.Stock,//仓库 Carving = head.Carving,//附件 Turning = head.Turning,//模具 Welding = head.Welding,//电焊 PlasticSprying = head.PlasticSprying,//喷塑 Plating = head.Plating,//电镀 Assembling = head.Assembling,//装配 PowderCoatedSize = head.PowderCoatedSize,//喷塑面积 Standard = head.Standard,//标准 PunchingMachineProgramNumber = head.PunchingMachineProgramNumber,//程序号 Category = head.Category,//类别 PlateLength = head.PlateLength,//展开料长 PlateWidth = head.PlateWidth,//展开料宽 PlateThickness = head.PlateThickness,//板厚 Quality = head.Quality,//材质 IsSpecial = head.IsSpecial,//用定尺板 IsResidual = head.IsResidual,//用边料 PlateParts = head.PlateParts,//展开料零件数量 RawPlateCodeName = head.RawPlateCodeName,//原材料代号 RawPlateLength = head.RawPlateLength,//原材料长 RawPlateWidth = head.RawPlateWidth,//原材料宽 RawPlateParts = head.RawPlateParts,//原材料零件数量 GuillotiningStock = head.GuillotiningStock,//剪板超市件 NotInSingleBom = head.NotInSingleBom,//单台配置清单不体现 MaterialCode = head.MaterialCode,//物料编码 Folder = head.Folder,//文件夹 IsConManu = head.IsConManu,//是否为集中制造 ConManuProcedure = head.ConManuProcedure,//集中制造工序 ConManuItemno = head.ConManuItemno,//集中制造物料编码 SpecialRemark = head.SpecialRemark,//领导特殊要求 Quantity = body.Quantity,//数量 Bulks = head.Bulks,//散件 Weight = head.Weight,//净重(Kg) Opening = head.Opening,//开孔编号 SurfaceTAreatment = head.SurfaceTAreatment,//表面处理 ParentItem = head.ParentItem,//父项 WhetherWelding = head.WhetherWelding,//焊接 TransferOrder = head.TransferOrder,//转序 PlanOrderID = head.PlanOrderID,//计划主键 REC_CREATOR = head.REC_CREATOR,//创建人 REC_CREATE_TIME = head.REC_CREATE_TIME,//创建时间 REC_REVISOR = head.REC_REVISOR,//修改人 REC_REVISE_TIME = head.REC_REVISE_TIME,//修改时间 REC_DELETOR = head.REC_DELETOR,//删除人 REC_DELETE_TIME = head.REC_DELETE_TIME,//删除时间 DELETE_FLAG = head.DELETE_FLAG,//逻辑删除标识 REMARK = head.REMARK,//备注 SkillRemark = head.SkillRemark, Bodies = head.Bodies }).AsQueryable().Where(lamada.andwhere).ToList(); if (models.Count == 0) { return; } var BactchNo = Batch; foreach (var model in models) { if (string.IsNullOrEmpty(model.SkillRemark)) { if (!string.IsNullOrEmpty(model.Opening))//如果开孔编号不为空 { model.SkillRemark += "【" + model.Opening + "】/ "; } model.SkillRemark += "版本"; if (!string.IsNullOrEmpty(model.MaterialVersion))//版本号不为空 { model.SkillRemark += model.MaterialVersion; } } else { if (!string.IsNullOrEmpty(model.Opening)) { model.SkillRemark = "【" + model.Opening + "】/ " + model.SkillRemark; } } if (ord.Pro_name == "高压柜体") { var cns = from body in model.Bodies join p in products on body.ContainerNumber equals p.ContainerNumber orderby p.BatchNo, p.ContainerNumber select new { p.BatchNo, p.ContainerNumber }; var BatchNo = 0; if (BactchNo != 1 || !model.ISMoveBatche) { cns = cns.Where(p => p.BatchNo == BactchNo).ToList(); } foreach (var cn in cns) { if (cn.BatchNo != BatchNo) { BatchNo = cn.BatchNo.Value; model.SkillRemark += " C" + BatchNo + ": "; } else { model.SkillRemark += ","; } model.SkillRemark += cn.ContainerNumber; } } } Dictionary<int, decimal?> dicQuantity = new Dictionary<int, decimal?>(); foreach (var model in models) { if (dicQuantity.ContainsKey(model.ID)) { dicQuantity[model.ID] = dicQuantity[model.ID] + model.Quantity; } else { dicQuantity.Add(model.ID, model.Quantity); } } var newsheet = PrintModel.REMARK + "C" + Batch; var NO = 1; if (dics.ContainsKey(newsheet))//判断是否存在该清单 { NO = dics[newsheet]; NO++; dics[newsheet] = NO; } else { dics.Add(newsheet, 1); } var worksheet = package.Workbook.Worksheets.Add(newsheet + GetRome(NO)); //创建sheet worksheet.Column(1).Width = 8; //产品族 worksheet.Column(2).Width = 6; //组别 worksheet.Column(3).Width = 7; //工位 worksheet.Column(4).Width = 30; //名称 worksheet.Column(5).Width = 15; //图号 worksheet.Column(6).Width = 16; //规格 worksheet.Column(7).Width = 10; //材料 worksheet.Column(8).Width = 6; //数量 worksheet.Column(9).Width = 15; //转序 worksheet.Column(10).Width = 23; //备注 worksheet.Cells["A1:J8"].Style.Font.Name = "宋体"; //字体设置 worksheet.Cells["A1:J8"].Style.Font.Bold = true; //加粗 worksheet.Cells["A1:J8"].Style.Font.Size = 16; worksheet.Cells["A1"].Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;//字体水平居中 worksheet.Cells["A1"].Style.Font.Size = 24; if (ord.FactoryID == 4) { worksheet.Cells["A1"].Value = PrintModel.REMARK; } else { worksheet.Cells["A1"].Value = "物料配送卡"; } worksheet.Cells["A1:I1"].Merge = true; //合并单元格 worksheet.Cells["J1"].Value = PrintModel.AllocationDepartment; worksheet.Cells["J1"].Style.Font.Size = 24; worksheet.Cells["A2:C2"].Merge = true; //合并单元格 worksheet.Cells["A3:C3"].Merge = true; //合并单元格 worksheet.Cells["A4:C4"].Merge = true; //合并单元格 worksheet.Cells["A5:C5"].Merge = true; //合并单元格 worksheet.Cells["A6:C7"].Merge = true; //合并单元格 worksheet.Cells["D2:E2"].Merge = true; //合并单元格 worksheet.Cells["D3:E3"].Merge = true; //合并单元格 worksheet.Cells["D4:E4"].Merge = true; //合并单元格 worksheet.Cells["D5:E5"].Merge = true; //合并单元格 worksheet.Cells["D6:H7"].Merge = true; //合并单元格 worksheet.Cells["G2:H2"].Merge = true; //合并单元格 worksheet.Cells["G3:H3"].Merge = true; //合并单元格 worksheet.Cells["G4:H4"].Merge = true; //合并单元格 worksheet.Cells["G5:H5"].Merge = true; //合并单元格 worksheet.Cells["A2"].Value = "生产线名称:"; worksheet.Cells["D2"].Value = ord.Pro_name + newsheet;//高压柜体喷塑线 worksheet.Cells["F2"].Value = "产品型号:"; worksheet.Cells["G2"].Value = ord.Pro_model;//产品型号 worksheet.Cells["I2"].Value = "装配日期:"; worksheet.Cells["J2"].Value = ord.Assemble_time == null ? "" : ord.Assemble_time.Value.ToShortDateString();//装配日期 worksheet.Cells["A3"].Value = "客 户 名称:"; worksheet.Cells["D3"].Value = ord.CustomerName;//中骏电气 worksheet.Cells["F3"].Value = "总计台数:"; worksheet.Cells["G3"].Value = Math.Round(ord.Plat_number.Value, 0);//总计台数 worksheet.Cells["G3"].Style.HorizontalAlignment = ExcelHorizontalAlignment.Left;//字体水平居← worksheet.Cells["I3"].Value = "技 术 员:"; worksheet.Cells["J3"].Value = ord.DesignName;//技术员 worksheet.Cells["A4"].Value = "合 同 编号:"; worksheet.Cells["D4"].Value = ord.Contract_i_no;//G180930-190 worksheet.Cells["F4"].Value = "生产批次:"; worksheet.Cells["G4"].Value = Batch.Value;//生产批次号 worksheet.Cells["G4"].Style.HorizontalAlignment = ExcelHorizontalAlignment.Left;//字体水平居← worksheet.Cells["I4"].Value = "计 划 员:"; worksheet.Cells["J4"].Value = UserInfo.UserName;//计划员 worksheet.Cells["A5"].Value = "批 次 编号:"; worksheet.Cells["D5"].Value = ord.Contract_i_no + "C" + Batch;//G180930-190C1 worksheet.Cells["F5"].Value = "批次台数:"; worksheet.Cells["G5"].Value = products.Count(p => p.BatchNo == Batch);//批次台数 worksheet.Cells["G5"].Style.HorizontalAlignment = ExcelHorizontalAlignment.Left;//字体水平居← worksheet.Cells["I5"].Value = "眉头颜色:"; worksheet.Cells["J5"].Value = ord.Blows_colour;//眉头颜色 worksheet.Cells["A6"].Value = "备 注:"; worksheet.Cells["D6"].Value = ord.PlanRemark;//计划备注 worksheet.Cells["D6"].Style.HorizontalAlignment = ExcelHorizontalAlignment.Left;//字体水平居← worksheet.Cells["D6"].Style.VerticalAlignment = ExcelVerticalAlignment.Top;//字体水平居↑ worksheet.Cells["D6"].Style.WrapText = true; worksheet.Cells["D6"].Style.Font.Size = 12; worksheet.Row(6).Height = 30; worksheet.Row(7).Height = 30; worksheet.Cells["I6"].Value = "面板颜色:"; worksheet.Cells["J6"].Value = ord.Plat_colour;//面板颜色 if (ord.FactoryID == 4)//辛柏 { worksheet.Cells["I7"].Value = "机柜颜色:"; worksheet.Cells["J7"].Value = ord.Frame_colour;//机柜颜色 worksheet.Cells["I4"].Value = "底座颜色:"; worksheet.Cells["J4"].Value = ord.Cabinet_colour;//底座颜色 worksheet.Cells["I3:J3"].Merge = true; //合并单元格 worksheet.Cells["I3"].Value = "技术员:"+ ord.DesignName+";计划员:"+ UserInfo.UserName; } else { worksheet.Cells["I7"].Value = "框架颜色:"; worksheet.Cells["J7"].Value = ord.Frame_colour;//框架颜色 } worksheet.Cells["A8"].Value = "产品族"; worksheet.Cells["B8"].Value = "组别"; worksheet.Cells["C8"].Value = "工位"; worksheet.Cells["D8"].Value = "名称"; worksheet.Cells["E8"].Value = "图号"; worksheet.Cells["F8"].Value = "规格"; worksheet.Cells["G8"].Value = "材料"; worksheet.Cells["H8"].Value = "数量"; worksheet.Cells["I8"].Value = "转序"; worksheet.Cells["J8"].Value = "备注"; int Row = 8; //循环写入清单 foreach (var model in models.GroupBy(p => p.ID).Select(g => g.First()).OrderBy(p => p.AssemblingStation).ThenBy(p => p.ProductClan).ThenBy(p=>p.PartName)) { Row++; worksheet.Cells[Row, 1].Value = model.ProductClan;//产品族 worksheet.Cells[Row, 2].Value = model.AssemblingGroup;//组别 worksheet.Cells[Row, 3].Value = model.AssemblingStation;//工位 worksheet.Cells[Row, 4].Value = model.PartName;//名称 worksheet.Cells[Row, 5].Value = model.CodeName;//图号 worksheet.Cells[Row, 6].Value = model.Specification;//规格 worksheet.Cells[Row, 7].Value = model.MaterialQuality;//材料 worksheet.Cells[Row, 8].Value = dicQuantity[model.ID];//数量 worksheet.Cells[Row, 9].Value = model.TransferOrder;//转序 worksheet.Cells[Row, 10].Value = model.SkillRemark;//备注 } var Cells = worksheet.Cells[2, 1, Row, 10]; Cells.Style.Border.Left.Style = ExcelBorderStyle.Thin; //边框样式 Cells.Style.Border.Right.Style = ExcelBorderStyle.Thin; Cells.Style.Border.Bottom.Style = ExcelBorderStyle.Thin; Cells.Style.Border.Top.Style = ExcelBorderStyle.Thin; Cells.Style.ShrinkToFit = true;//字体自动填充 //worksheet.PrinterSettings.PrintArea.Address = new ExcelAddress(1, 1, Row, 10).Address; var BodyCells = worksheet.Cells[9, 1, Row, 10]; BodyCells.Style.Font.Name = "宋体"; //字体设置 BodyCells.Style.Font.Size = 14; worksheet.PrinterSettings.Scale = 75;//打印缩放 worksheet.PrinterSettings.LeftMargin = 0.2m;//左边距 worksheet.PrinterSettings.RightMargin = 0.1m;//右边距 worksheet.PrinterSettings.TopMargin = 0m;//上边距 worksheet.PrinterSettings.BottomMargin = 0.5m;//下边距 worksheet.HeaderFooter.OddFooter.LeftAlignedText = "编制:" + UserInfo.UserName + " " + "日期:" + Now.ToShortDateString() + " " + "领料/日期: 出库/日期: 记账/日期: " + "&P/&N"; worksheet.PrinterSettings.RepeatRows = new ExcelAddress("$1:$8");//设置打印标题 worksheet.View.FreezePanes(9, 1);//冻结窗格 string File = "~/FileTemp/万控文件LOGO.bmp"; string FullPathFileName = PageContext.MapPath(File); using (FileStream stream = new FileStream(FullPathFileName, FileMode.Open, FileAccess.Read)) { ExcelPicture picture = worksheet.Drawings.AddPicture("logo", System.Drawing.Image.FromStream(stream));//插入图片 picture.SetPosition(0, 5);//设置图片的位置 picture.SetSize(127, 36);//设置图片的大小 } } } /// <summary> /// 导出装配流水线清单 /// </summary> /// <param name="heads">表头</param> /// <param name="ord">计划订单</param> /// <param name="package">EXCEL</param> /// <param name="dics"></param> /// <param name="ProductClan">产品族</param> private void Assemble(List<MES_Bus_Plan_PartHead> heads, List<MES_Bus_Plan_PartBody> bodys, List<MES_Bus_Plan_Product> products, MES_Bus_Plan_Orders ord, ExcelPackage package, Dictionary<string, int> dics, List<Model.TCustomerDemandOrderStation> cdos, MES_Bus_Plan_PrintModel PrintModel) { var Stations = heads.Where(p => !string.IsNullOrEmpty(p.AssemblingStation)).GroupBy(p => p.AssemblingStation.ToUpper()).OrderBy(p => p.Key).Select(p => p.Key).ToList();//所有工位 foreach (var Station in Stations) { LambdaHelper<MES_Bus_Plan_PartHead> lamada = new LambdaHelper<MES_Bus_Plan_PartHead>(); if (!string.IsNullOrEmpty(PrintModel.Condition)) { GridFilterHelp.SetFilter(lamada, JArray.Parse(PrintModel.Condition), "", UserInfo);//将过滤条件转换为兰姆达表达式 } var models = heads.Where(p => p.AssemblingStation == Station).AsQueryable().Where(lamada.andwhere).ToList(); if (models.Count == 0) { continue; } foreach (var model in models) { var str = ""; var batch = 0; foreach (var body in bodys.Where(p => p.HeadID == model.ID).ToList().OrderBy(p => p.ContainerNumber)) { var BatchNo = products.First(p => p.ContainerNumber == body.ContainerNumber).BatchNo; if (BatchNo != batch) { if (str != "") { str += " "; } batch = BatchNo.Value; str += "C" + batch + ":" + body.ContainerNumber; } else { str += "," + body.ContainerNumber; } } model.TransferOrder = str; } // var newsheet = PrintModel.REMARK + Station; var newsheet = Station; var NO = 1; if (dics.ContainsKey(newsheet))//判断是否存在该清单 { NO = dics[newsheet]; NO++; dics[newsheet] = NO; } else { dics.Add(newsheet, 1); } var worksheet = package.Workbook.Worksheets.Add(newsheet + GetRome(NO)); //创建sheet worksheet.Column(1).Width = 7; //产品族 worksheet.Column(2).Width = 5; //组别 worksheet.Column(3).Width = 6; //工位 worksheet.Column(4).Width = 36; //名称 worksheet.Column(5).Width = 14; //图号 worksheet.Column(6).Width = 15; //规格 worksheet.Column(7).Width = 12; //材料 worksheet.Column(8).Width = 6; //数量 worksheet.Column(9).Width = 60; //柜号列表 worksheet.Column(10).Width = 23; //备注 worksheet.Cells["A1:J6"].Style.Font.Name = "宋体"; //字体设置 worksheet.Cells["A1:J6"].Style.Font.Bold = true; //加粗 worksheet.Cells["A1:J6"].Style.Font.Size = 14; worksheet.Cells["A5"].Style.Font.Color.SetColor(Color.White);//字体颜色:白色 worksheet.Cells["A5:C5"].Style.Fill.PatternType = ExcelFillStyle.Solid; worksheet.Cells["A5:C5"].Style.Fill.BackgroundColor.SetColor(Color.Red);//背景颜色:酒红色 worksheet.Cells["A6:J6"].Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;//字体水平居中 worksheet.Cells["A5:C5"].Merge = true; //合并单元格 worksheet.Cells["D2:I2"].Merge = true; //合并单元格 worksheet.Cells["E3:F3"].Merge = true; //合并单元格 worksheet.Cells["E5:J5"].Merge = true; //合并单元格 worksheet.Cells["A5"].Value = "装配流水线清单";//A5 领料清单-喷塑线 worksheet.Cells["D2"].Value = "客户名称:" + ord.CustomerName;//客户名称:中骏电气 worksheet.Cells["D3"].Value = "合同编号:" + ord.Contract_i_no;//合同编号:G180930-190 worksheet.Cells["D4"].Value = "产品型号:" + ord.Pro_model;//产品型号:KYN28A-12(II) worksheet.Cells["D5"].Value = "柜体台数:" + Math.Round(ord.Plat_number.Value, 0);//台数:29 worksheet.Cells["E4"].Value = "装配日期:" + (ord.Assemble_time == null ? "" : ord.Assemble_time.Value.ToShortDateString());//装配日期:2018-01-01 worksheet.Cells["E5"].Value = ord.PlanRemark;//重点备注://待取值 worksheet.Cells["J2"].Value = "计划员:" + UserInfo.UserName;//计划员:李媛媛 // 张爱强说 谁打印就显示谁的名字 worksheet.Cells["J3"].Value = "技术员:" + ord.DesignName;//技术员 worksheet.Cells["J4"].Value = "分配部门:" + PrintModel.AllocationDepartment; worksheet.Cells["E3"].Value = "工位:" + Station;//工位 worksheet.Cells["J2"].Style.ShrinkToFit = true;//计划员:李媛媛 // 张爱强说 谁打印就显示谁的名字 worksheet.Cells["J3"].Style.ShrinkToFit = true;//技术员 worksheet.Cells["J4"].Style.ShrinkToFit = true; worksheet.Cells["A6"].Value = "产品族"; worksheet.Cells["B6"].Value = "组别"; worksheet.Cells["C6"].Value = "工位"; worksheet.Cells["D6"].Value = "名称"; worksheet.Cells["E6"].Value = "图号"; worksheet.Cells["F6"].Value = "规格"; worksheet.Cells["G6"].Value = "材料"; worksheet.Cells["H6"].Value = "数量"; worksheet.Cells["I6"].Value = "柜号列表"; worksheet.Cells["J6"].Value = "备注"; int Row = 6; //循环写入清单 foreach (var model in models.OrderBy(p => p.PartName).ThenBy(p => p.CodeName)) { Row++; worksheet.Cells[Row, 1].Value = model.ProductClan;//产品族 worksheet.Cells[Row, 2].Value = model.AssemblingGroup;//组别 worksheet.Cells[Row, 3].Value = model.AssemblingStation;//工位 worksheet.Cells[Row, 4].Value = model.PartName;//名称 worksheet.Cells[Row, 5].Value = model.CodeName;//图号 worksheet.Cells[Row, 6].Value = model.Specification;//规格 worksheet.Cells[Row, 7].Value = model.MaterialQuality;//材料 worksheet.Cells[Row, 8].Value = model.Quantity;//数量 worksheet.Cells[Row, 9].Value = model.TransferOrder;//柜号列表 worksheet.Row(Row).Height = (Encoding.Default.GetByteCount(model.TransferOrder) / 59 + 1) * worksheet.Row(Row).Height; worksheet.Cells[Row, 9].Style.WrapText = true;//自动换行 if (!string.IsNullOrEmpty(model.Opening))//如果开孔编号不为空 { model.SkillRemark = "【" + model.Opening + "】/ " + model.SkillRemark; } worksheet.Cells[Row, 10].Value = model.SkillRemark;//技术备注 } if (cdos.Where(p => p.AssemblingStation == Station).Count() > 0) {//写入特殊要求 Row++; worksheet.Cells[Row, 1].Value = "特殊要求";//特殊要求 worksheet.Cells[Row, 2].Value = "检验员";//检验员 worksheet.Cells[Row, 3].Value = "工位";//工位 worksheet.Cells[Row, 4].Value = "特殊要求类别";//特殊要求类别 worksheet.Cells[Row, 5].Value = "特殊要求";//特殊要求 worksheet.Cells["E" + Row + ":J" + Row].Merge = true; //合并单元格 worksheet.Cells["A" + Row + ":E" + Row].Style.Font.Bold = true; //设置字体加粗 //循环写入特殊要求 foreach (var cdo in cdos.Where(p => p.AssemblingStation == Station)) { Row++; worksheet.Cells[Row, 1].Value = "特殊要求";//特殊要求 worksheet.Cells[Row, 2].Value = cdo.Checker;//检验员 worksheet.Cells[Row, 3].Value = cdo.AssemblingStation;//工位 worksheet.Cells[Row, 4].Value = cdo.CusDemandType;//特殊要求类别 worksheet.Cells[Row, 5].Value = cdo.CusDemandName;//特殊要求 worksheet.Cells[Row, 5].Style.WrapText = true;//自动换行 worksheet.Cells["E" + Row + ":J" + Row].Merge = true; //合并单元格 } } var Cells = worksheet.Cells[6, 1, Row, 10]; Cells.Style.Border.Left.Style = ExcelBorderStyle.Thin; //边框样式 Cells.Style.Border.Right.Style = ExcelBorderStyle.Thin; Cells.Style.Border.Bottom.Style = ExcelBorderStyle.Thin; Cells.Style.Border.Top.Style = ExcelBorderStyle.Thin; Cells.Style.ShrinkToFit = true;//字体自动填充 //worksheet.PrinterSettings.PrintArea.Address = new ExcelAddress(1,1,Row,10).Address; var BodyCells = worksheet.Cells[7, 1, Row, 10]; BodyCells.Style.Font.Name = "宋体"; //字体设置 BodyCells.Style.Font.Size = 12; worksheet.PrinterSettings.Scale = 75;//打印缩放 worksheet.PrinterSettings.RepeatRows = new ExcelAddress("$1:$6");//设置打印标题 worksheet.View.FreezePanes(7, 1);//冻结窗格 worksheet.PrinterSettings.LeftMargin = 0.2m;//左边距 worksheet.PrinterSettings.RightMargin = 0.1m;//右边距 worksheet.PrinterSettings.TopMargin = 0m;//上边距 worksheet.PrinterSettings.BottomMargin = 0.5m;//下边距 worksheet.PrinterSettings.Orientation = eOrientation.Landscape;//横向打印 worksheet.HeaderFooter.OddFooter.LeftAlignedText = "编制:" + UserInfo.UserName + " " + "日期:" + Now.ToShortDateString() + " " + "领料/日期: 出库/日期: 记账/日期: " + "&P/&N"; worksheet.Row(1).Hidden = true;//隐藏第一行 string File = "~/FileTemp/万控文件LOGO.bmp"; string FullPathFileName = PageContext.MapPath(File); using (FileStream stream = new FileStream(FullPathFileName, FileMode.Open, FileAccess.Read)) { ExcelPicture picture = worksheet.Drawings.AddPicture("logo", System.Drawing.Image.FromStream(stream));//插入图片 picture.SetPosition(38, 4);//设置图片的位置 picture.SetSize(127, 36);//设置图片的大小 } } } /// <summary> /// 单台清单 /// </summary> /// <param name="heads"></param> /// <param name="bodys"></param> /// <param name="ord"></param> /// <param name="PrintModel"></param> private void SingleList(List<Model.TCustomerDemandOrderStation> cdos, List<MES_Bus_Plan_PartHead> heads, List<MES_Bus_Plan_PartBody> bodys, MES_Bus_Plan_Orders ord, MES_Bus_Plan_PrintModel PrintModel) { var ContainerNumbers = bodys.GroupBy(p => p.ContainerNumber).OrderBy(p => p.Key).Select(p => p.Key).ToList();//所有柜号 string File = "~/FileTemp/单台清单模板.xlsm"; if (PrintModel.REMARK.Contains("柜体")) { File = "~/FileTemp/柜体事业群单台清单模板.xlsm"; } string FullPathFileName = PageContext.MapPath(File); LambdaHelper<MES_Bus_Plan_PartHead> lamada = new LambdaHelper<MES_Bus_Plan_PartHead>(); if (!string.IsNullOrEmpty(PrintModel.Condition)) { GridFilterHelp.SetFilter(lamada, JArray.Parse(PrintModel.Condition), "", UserInfo);//将过滤条件转换为兰姆达表达式 } using (FileStream stream = new FileStream(FullPathFileName, FileMode.Open, FileAccess.Read)) { XSSFWorkbook book = new XSSFWorkbook(stream); for (int i = 2; i <= Convert.ToInt32(ord.Plat_number.Value); i++) { book.GetSheet("1").CopySheet(i.ToString()); } System.IO.MemoryStream ms = new System.IO.MemoryStream(); book.Write(ms); #region using (ExcelPackage package = new ExcelPackage(ms)) { foreach (var ContainerNumber in ContainerNumbers) { var models = (from head in heads join body in bodys on head.ID equals body.HeadID where body.ContainerNumber == ContainerNumber select new MES_Bus_Plan_PartHead { ID = head.ID,//主键 ProductClan = head.ProductClan,//产品族 AssemblingGroup = head.AssemblingGroup,//组别 AssemblingStation = head.AssemblingStation,//工位 PartName = head.PartName,//名称 CodeName = head.CodeName,//代号 ConsultCode = head.ConsultCode,//参考代号 MaterialVersion = head.MaterialVersion,//版本号 Specification = head.Specification,//规格 MaterialQuality = head.MaterialQuality,//材料 PlateSize = head.PlateSize,//下料尺寸 ReferencePlateSize = head.ReferencePlateSize,//板材规格 MultiParts = head.MultiParts,//双件 MultiPartsRemark = head.MultiPartsRemark,//双件备注 Add By:Jundi Date:2019-05-08 MoldRemark = head.MoldRemark,//模具备注 ClipPlateMachineNumber = head.ClipPlateMachineNumber,//剪板机 PunchingMachineNumber = head.PunchingMachineNumber,//冲床 BendingMachineNumber = head.BendingMachineNumber,//折弯机 Purchasing = head.Purchasing,//采购 Guillotining = head.Guillotining,//剪板 Punching = head.Punching,//冲制 CuPunching = head.CuPunching,//铜排 Tapping = head.Tapping,//攻丝 Bending = head.Bending,//折弯 Stock = head.Stock,//仓库 Carving = head.Carving,//附件 Turning = head.Turning,//模具 Welding = head.Welding,//电焊 PlasticSprying = head.PlasticSprying,//喷塑 Plating = head.Plating,//电镀 Assembling = head.Assembling,//装配 PowderCoatedSize = head.PowderCoatedSize,//喷塑面积 Standard = head.Standard,//标准 PunchingMachineProgramNumber = head.PunchingMachineProgramNumber,//程序号 Category = head.Category,//类别 PlateLength = head.PlateLength,//展开料长 PlateWidth = head.PlateWidth,//展开料宽 PlateThickness = head.PlateThickness,//板厚 Quality = head.Quality,//材质 IsSpecial = head.IsSpecial,//用定尺板 IsResidual = head.IsResidual,//用边料 PlateParts = head.PlateParts,//展开料零件数量 RawPlateCodeName = head.RawPlateCodeName,//原材料代号 RawPlateLength = head.RawPlateLength,//原材料长 RawPlateWidth = head.RawPlateWidth,//原材料宽 RawPlateParts = head.RawPlateParts,//原材料零件数量 GuillotiningStock = head.GuillotiningStock,//剪板超市件 NotInSingleBom = head.NotInSingleBom,//单台配置清单不体现 MaterialCode = head.MaterialCode,//物料编码 Folder = head.Folder,//文件夹 IsConManu = head.IsConManu,//是否为集中制造 ConManuProcedure = head.ConManuProcedure,//集中制造工序 ConManuItemno = head.ConManuItemno,//集中制造物料编码 SpecialRemark = head.SpecialRemark,//领导特殊要求 Quantity = body.Quantity,//数量 Bulks = head.Bulks,//散件 Weight = head.Weight,//净重(Kg) Opening = head.Opening,//开孔编号 SurfaceTAreatment = head.SurfaceTAreatment,//表面处理 ParentItem = head.ParentItem,//父项 WhetherWelding = head.WhetherWelding,//焊接 TransferOrder = head.TransferOrder,//转序 PlanOrderID = head.PlanOrderID,//计划主键 REC_CREATOR = head.REC_CREATOR,//创建人 REC_CREATE_TIME = head.REC_CREATE_TIME,//创建时间 REC_REVISOR = head.REC_REVISOR,//修改人 REC_REVISE_TIME = head.REC_REVISE_TIME,//修改时间 REC_DELETOR = head.REC_DELETOR,//删除人 REC_DELETE_TIME = head.REC_DELETE_TIME,//删除时间 DELETE_FLAG = head.DELETE_FLAG,//逻辑删除标识 REMARK = head.REMARK,//备注 }).AsQueryable().Where(lamada.andwhere).ToList(); if (models.Count() == 0) { continue; } var newsheet = ContainerNumber; if (newsheet==0) { newsheet = 1; } var worksheet = package.Workbook.Worksheets[newsheet.ToString()]; if (File=="~/FileTemp/柜体事业群单台清单模板.xlsm") { worksheet.Cells["D1"].Value = "合同编号:"+ord.Contract_i_no;//内部合同号 worksheet.Cells["D2"].Value ="合同名称:"+ ord.CustomerName;//客户名称 worksheet.Cells["F1"].Value ="产品型号:"+ ord.Pro_model;//产品型号 worksheet.Cells["F2"].Value = Math.Round(ord.Plat_number.Value, 0);//台数 worksheet.Cells["G1"].Value = "技术员:" + ord.DesignName;//技术员 worksheet.Cells["G2"].Value = "计划员:" + UserInfo.UserName;//计划员 worksheet.Cells["K1"].Value = ContainerNumber;//柜号 } else { worksheet.Cells["F4"].Value = ord.Contract_i_no;//内部合同号 worksheet.Cells["F5"].Value = ord.CustomerName;//客户名称 worksheet.Cells["F6"].Value = ord.Pro_model;//产品型号 worksheet.Cells["F7"].Value = ord.Assemble_time;//装配日期 worksheet.Cells["K4"].Value = ContainerNumber;//柜号 worksheet.Cells["K5"].Value ="台数:"+ Math.Round(ord.Plat_number.Value, 0);//台数 worksheet.Cells["K6"].Value = ord.PlanRemark;//计划备注 worksheet.Cells["L4"].Value = "技术员:" + ord.DesignName;//技术员 worksheet.Cells["L5"].Value = "计划员:" + UserInfo.UserName;//计划员 } int Row = 8; //循环写入清单 foreach (var model in models.OrderBy(p=>p.AssemblingStation).ThenBy(p => p.PartName).ThenBy(p => p.CodeName)) { Row++; worksheet.Cells["B" + Row].Value = model.ProductClan;//产品族 worksheet.Cells["C" + Row].Value = model.AssemblingGroup;//组别 worksheet.Cells["D" + Row].Value = model.AssemblingStation;//工位 worksheet.Cells["E" + Row].Value = model.PartName;//名称 worksheet.Cells["F" + Row].Value = model.CodeName;//图号 worksheet.Cells["G" + Row].Value = model.Specification;//规格 worksheet.Cells["H" + Row].Value = model.MaterialQuality;//材料 worksheet.Cells["I" + Row].Value = model.Quantity;//数量 //worksheet.Cells["J" + Row].Value = model.TransferOrder;//转序 worksheet.Cells["K" + Row].Value = model.SkillRemark;//备注 } var BodyCells = worksheet.Cells[9, 2, Row, 11]; BodyCells.Style.Font.Name = "宋体"; //字体设置 BodyCells.Style.Font.Size = 10; if (cdos.Count() > 0 && PrintModel.REMARK != null && PrintModel.REMARK.Contains("特殊要求")) {//写入特殊要求 Row++; worksheet.Cells[Row, 2].Value = "特殊要求";//特殊要求 worksheet.Cells[Row, 3].Value = "工位";//工位 worksheet.Cells[Row, 4].Value = "检验员";//检验员 worksheet.Cells[Row, 5].Value = "特殊要求类别";//特殊要求类别 worksheet.Cells[Row, 6].Value = "特殊要求";//特殊要求 worksheet.Cells[Row, 6, Row, 11].Merge = true; //合并单元格 worksheet.Cells[Row, 6, Row, 11].Style.Font.Bold = true; //设置字体加粗 //循环写入清单 foreach (var cdo in cdos.OrderBy(p => p.AssemblingStation).ThenBy(p => p.CusDemandName)) { Row++; worksheet.Cells[Row, 3].Value = cdo.AssemblingStation;//工位 worksheet.Cells[Row, 4].Value = cdo.Checker;//检验员 worksheet.Cells[Row, 5].Value = cdo.CusDemandType;//技术要求类别 worksheet.Cells[Row, 6].Value = cdo.CusDemandName;//特殊要求 worksheet.Cells[Row, 6, Row, 11].Merge = true; //合并单元格 worksheet.Cells[Row, 6].Style.WrapText = true;//自动换行 worksheet.Cells[Row, 6].Style.Font.Size = 8; worksheet.Row(Row).Height = 20;//自动调整行高 worksheet.Cells[Row, 6].Style.HorizontalAlignment = ExcelHorizontalAlignment.Left;//字体水平居中 } } var Cells = worksheet.Cells[9, 2, Row, 11]; Cells.Style.Border.Left.Style = ExcelBorderStyle.Thin; //边框样式 Cells.Style.Border.Right.Style = ExcelBorderStyle.Thin; Cells.Style.Border.Bottom.Style = ExcelBorderStyle.Thin; Cells.Style.Border.Top.Style = ExcelBorderStyle.Thin; Cells.Style.ShrinkToFit = true;//字体自动填充 //worksheet.PrinterSettings.PrintArea.Address = new ExcelAddress(1, 1, Row, 10).Address; worksheet.PrinterSettings.Scale = 71;//打印缩放 worksheet.PrinterSettings.LeftMargin = 0.2m;//左边距 worksheet.PrinterSettings.RightMargin = 0.1m;//右边距 worksheet.PrinterSettings.TopMargin = 0m;//上边距 worksheet.PrinterSettings.BottomMargin = 0.5m;//下边距 worksheet.PrinterSettings.RepeatRows = new ExcelAddress("$1:$8");//设置打印标题 worksheet.HeaderFooter.OddFooter.LeftAlignedText = "编制:" + UserInfo.UserName + " " + "日期:" + Now.ToShortDateString() + " " + "领料/日期: 出库/日期: 记账/日期: "; worksheet.HeaderFooter.OddFooter.RightAlignedText = newsheet.ToString(); } package.Workbook.Properties.Title = "单台清单导出";//设置excel的标题 package.Workbook.Properties.Author = "许加龙";//作者 package.Workbook.Properties.Company = "万控智造(浙江)电气有限公司";//公司 // package.Workbook.Worksheets.Delete("模板"); var data = package.GetAsByteArray(); var FileName = DateTime.Now.ToString("yyyyMMddHHmmssff") + ord.Contract_i_no + ord.CustomerName + Math.Round(ord.Plat_number.Value, 0) + "台" + UserInfo.UserName + ".xlsm"; DirFileHelp.CreateFile(MesConfig.UploadPath + FileName, data); DirFileHelp.DownFile(MesConfig.UploadPath + FileName); } #endregion ms.Close(); ms.Dispose(); } } /// <summary> /// 预装清单 /// </summary> /// <param name="heads"></param> /// <param name="bodys"></param> /// <param name="ord"></param> /// <param name="PrintModel"></param> private void PartGroupBOM(List<MES_Bus_Plan_PartHead> heads, List<MES_Bus_Plan_PartBody> bodys, MES_Bus_Plan_Orders ord, ExcelPackage package, Dictionary<string, int> dics, MES_Bus_Plan_PrintModel PrintModel) { var BusinessAxleID = db.MES_Bus_Base_BusinessAxle.First(p => p.FactoryID == ord.FactoryID && p.BusinessAxleName == ord.Pro_name).BusinessAxleID; var cpBOM = db.MES_Bus_Factory_PartGroupBom.Where(p => p.BusinessAxleID == BusinessAxleID && p.PreType == "成品").Include(p => p.Bodies).ToList();//成品BOM var bcpBOM = db.MES_Bus_Factory_PartGroupBom.Where(p => p.BusinessAxleID == BusinessAxleID && p.PreType == "半成品").Include(p => p.Bodies).ToList();//半成品BOM var Parts = (from head in heads join body in bodys on head.ID equals body.HeadID select new MES_Bus_Plan_PartHead { ID = head.ID,//主键 ProductClan = head.ProductClan,//产品族 AssemblingGroup = head.AssemblingGroup,//组别 AssemblingStation = head.AssemblingStation,//工位 PartName = head.PartName,//名称 CodeName = head.CodeName,//代号 ConsultCode = head.ConsultCode,//参考代号 MaterialVersion = head.MaterialVersion,//版本号 Specification = head.Specification,//规格 MaterialQuality = head.MaterialQuality,//材料 PlateSize = head.PlateSize,//下料尺寸 ReferencePlateSize = head.ReferencePlateSize,//板材规格 MultiParts = head.MultiParts,//双件 MultiPartsRemark = head.MultiPartsRemark,//双件备注 Add By:Jundi Date:2019-05-08 MoldRemark = head.MoldRemark,//模具备注 ClipPlateMachineNumber = head.ClipPlateMachineNumber,//剪板机 PunchingMachineNumber = head.PunchingMachineNumber,//冲床 BendingMachineNumber = head.BendingMachineNumber,//折弯机 Purchasing = head.Purchasing,//采购 Guillotining = head.Guillotining,//剪板 Punching = head.Punching,//冲制 CuPunching = head.CuPunching,//铜排 Tapping = head.Tapping,//攻丝 Bending = head.Bending,//折弯 Stock = head.Stock,//仓库 Carving = head.Carving,//附件 Turning = head.Turning,//模具 Welding = head.Welding,//电焊 PlasticSprying = head.PlasticSprying,//喷塑 Plating = head.Plating,//电镀 Assembling = head.Assembling,//装配 PowderCoatedSize = head.PowderCoatedSize,//喷塑面积 Standard = head.Standard,//标准 PunchingMachineProgramNumber = head.PunchingMachineProgramNumber,//程序号 Category = head.Category,//类别 PlateLength = head.PlateLength,//展开料长 PlateWidth = head.PlateWidth,//展开料宽 PlateThickness = head.PlateThickness,//板厚 Quality = head.Quality,//材质 IsSpecial = head.IsSpecial,//用定尺板 IsResidual = head.IsResidual,//用边料 PlateParts = head.PlateParts,//展开料零件数量 RawPlateCodeName = head.RawPlateCodeName,//原材料代号 RawPlateLength = head.RawPlateLength,//原材料长 RawPlateWidth = head.RawPlateWidth,//原材料宽 RawPlateParts = head.RawPlateParts,//原材料零件数量 GuillotiningStock = head.GuillotiningStock,//剪板超市件 NotInSingleBom = head.NotInSingleBom,//单台配置清单不体现 MaterialCode = head.MaterialCode,//物料编码 Folder = head.Folder,//文件夹 IsConManu = head.IsConManu,//是否为集中制造 ConManuProcedure = head.ConManuProcedure,//集中制造工序 ConManuItemno = head.ConManuItemno,//集中制造物料编码 SpecialRemark = head.SpecialRemark,//领导特殊要求 Quantity = body.Quantity,//数量 Bulks = head.Bulks,//散件 Weight = head.Weight,//净重(Kg) Opening = head.Opening,//开孔编号 SurfaceTAreatment = head.SurfaceTAreatment,//表面处理 ParentItem = head.ParentItem,//父项 WhetherWelding = head.WhetherWelding,//焊接 TransferOrder = head.TransferOrder,//转序 PlanOrderID = head.PlanOrderID,//计划主键 REC_CREATOR = head.REC_CREATOR,//创建人 REC_CREATE_TIME = head.REC_CREATE_TIME,//创建时间 REC_REVISOR = head.REC_REVISOR,//修改人 REC_REVISE_TIME = head.REC_REVISE_TIME,//修改时间 REC_DELETOR = head.REC_DELETOR,//删除人 REC_DELETE_TIME = head.REC_DELETE_TIME,//删除时间 DELETE_FLAG = head.DELETE_FLAG,//逻辑删除标识 REMARK = head.REMARK,//备注 ContainerNumber = body.ContainerNumber//柜号 }).ToList(); List<BOM> bOMs = new List<BOM>(); foreach (var part in Parts.Where(m => cpBOM.Select(p => p.CodeName).Contains(m.CodeName)).ToList()) { foreach (var BOM in cpBOM.Where(p => p.CodeName == part.CodeName))//循环BOM { int a = 9999;//循环BOM并判断可预装数量a,冒泡法比较获取a foreach (var body in BOM.Bodies) { var b = (int)Parts.Where(p => p.ContainerNumber == part.ContainerNumber && p.CodeName == body.CodeName).Sum(p => p.Quantity) / (int)body.Quantity; if (b < a) { a = b; } if (body.PreType == "半成品") { foreach (var bcpbom in bcpBOM.First(p => p.PartGroupBomID == body.PartGroupBomID).Bodies) { var c = (int)Parts.Where(p => p.ContainerNumber == part.ContainerNumber && p.CodeName == bcpbom.CodeName).Sum(p => p.Quantity) / (int)bcpbom.Quantity / (int)body.Quantity; if (c < a) { a = c; } } } if (a == 0) { break; } } if (a > 0)//符合条件的最小预装数量 { var 成品 = new BOM(); 成品.成品图号 = part.CodeName; 成品.产品族 = part.ProductClan; 成品.组别 = part.AssemblingGroup; 成品.工位 = part.AssemblingStation; 成品.预装工位 = BOM.PreAssemblingStation; 成品.名称 = part.PartName; 成品.图号 = part.CodeName; 成品.规格 = part.Specification; 成品.材料 = part.MaterialQuality; 成品.数量 = a; 成品.类型 = "成品"; 成品.柜号 = part.ContainerNumber.Value; bOMs.Add(成品); foreach (var body in BOM.Bodies) { var Part = Parts.First(p => p.ContainerNumber == part.ContainerNumber && p.CodeName == body.CodeName); if (Part.CodeName != body.CodeName) { Part.Quantity = Part.Quantity - a * body.Quantity; } if (body.PreType == "半成品") { var 半成品 = new BOM(); 半成品.成品图号 = part.CodeName; 半成品.半成品图号 = Part.CodeName; 半成品.产品族 = Part.ProductClan; 半成品.组别 = Part.AssemblingGroup; 半成品.工位 = Part.AssemblingStation; 半成品.预装工位 = BOM.PreAssemblingStation; 半成品.名称 = Part.PartName; 半成品.图号 = Part.CodeName; 半成品.规格 = Part.Specification; 半成品.材料 = Part.MaterialQuality; 半成品.数量 = a * (int)body.Quantity; 半成品.类型 = "半成品"; 半成品.柜号 = Part.ContainerNumber.Value; bOMs.Add(半成品); foreach (var bcpbom in bcpBOM.First(p => p.PartGroupBomID == body.PartGroupBomID).Bodies) { var c = Parts.First(p => p.ContainerNumber == part.ContainerNumber && p.CodeName == bcpbom.CodeName); if (Part.CodeName != bcpbom.CodeName) { Part.Quantity = Part.Quantity - a * body.Quantity * bcpbom.Quantity; } var 半成品零件 = new BOM(); 半成品零件.成品图号 = part.CodeName; 半成品零件.产品族 = c.ProductClan; 半成品零件.组别 = c.AssemblingGroup; 半成品零件.工位 = c.AssemblingStation; 半成品零件.预装工位 = BOM.PreAssemblingStation; 半成品零件.名称 = c.PartName; 半成品零件.图号 = c.CodeName; 半成品零件.规格 = c.Specification; 半成品零件.材料 = c.MaterialQuality; 半成品零件.数量 = a * (int) body.Quantity * (int)bcpbom.Quantity; 半成品零件.类型 = "半成品零件"; 半成品零件.柜号 = c.ContainerNumber.Value; bOMs.Add(半成品零件); } } else { var 成品零件 = new BOM(); 成品零件.成品图号 = part.CodeName; 成品零件.产品族 = Part.ProductClan; 成品零件.组别 = Part.AssemblingGroup; 成品零件.工位 = Part.AssemblingStation; 成品零件.预装工位 = BOM.PreAssemblingStation; 成品零件.名称 = Part.PartName; 成品零件.图号 = Part.CodeName; 成品零件.规格 = Part.Specification; 成品零件.材料 = Part.MaterialQuality; 成品零件.数量 = a * (int)body.Quantity; 成品零件.类型 = "成品零件"; 成品零件.柜号 = Part.ContainerNumber.Value; bOMs.Add(成品零件); } } } } } var models = bOMs.GroupBy(p => new { p.产品族, p.半成品图号, p.名称, p.图号, p.工位, p.成品图号, p.材料, p.类型, p.组别, p.规格, p.预装工位 }).OrderBy(p=>p.Key.成品图号).ThenBy(p=>p.Key.半成品图号).ThenBy(p=>p.Key.图号) .ToList(); var newsheet = PrintModel.REMARK; var NO = 1; if (dics.ContainsKey(newsheet))//判断是否存在该清单 { NO = dics[newsheet]; NO++; dics[newsheet] = NO; } else { dics.Add(newsheet, 1); } var worksheet = package.Workbook.Worksheets.Copy("预装模板", newsheet + GetRome(NO)); int Row = 8; foreach (var model in models) { Row++; } var Cells = worksheet.Cells[16, 1, Row, 9]; Cells.Style.Border.Left.Style = ExcelBorderStyle.Thin; //边框样式 Cells.Style.Border.Right.Style = ExcelBorderStyle.Thin; Cells.Style.Border.Bottom.Style = ExcelBorderStyle.Thin; Cells.Style.Border.Top.Style = ExcelBorderStyle.Thin; Cells.Style.ShrinkToFit = true;//字体自动填充 Cells.Style.Font.Size = 14; worksheet.HeaderFooter.OddFooter.LeftAlignedText = "编制:" + UserInfo.UserName + " " + "日期:" + Now.ToShortDateString() + " " + "领料/日期: 出库/日期: 记账/日期: "; } /// <summary> /// 特殊要求工位 /// </summary> /// <param name="heads"></param> /// <param name="bodys"></param> /// <param name="ord"></param> /// <param name="PrintModel"></param> private void DemandOrderStation(List<Model.TCustomerDemandOrderStation> cdos, MES_Bus_Plan_Orders ord, ExcelPackage package, Dictionary<string, int> dics, MES_Bus_Plan_PrintModel PrintModel) { if (cdos.Count() == 0) { return; } var newsheet = PrintModel.REMARK; var NO = 1; if (dics.ContainsKey(newsheet))//判断是否存在该清单 { NO = dics[newsheet]; NO++; dics[newsheet] = NO; } else { dics.Add(newsheet, 1); } var worksheet = package.Workbook.Worksheets.Copy("特殊要求模板", newsheet + GetRome(NO)); worksheet.Cells["C5"].Value = ord.Contract_i_no;//内部合同号 worksheet.Cells["D5"].Value = ord.CustomerName;//客户名称 worksheet.Cells["D6"].Value = ord.Assemble_time;//装配日期 worksheet.Cells["D1"].Value = PrintModel.AllocationDepartment;//分配部门 worksheet.Cells["D1"].Style.HorizontalAlignment = ExcelHorizontalAlignment.Right;//字体水平右 var Row = 7; //循环写入清单 foreach (var cdo in cdos.OrderBy(p => p.AssemblingStation).ThenBy(p => p.CusDemandName)) { Row++; worksheet.Cells[Row, 1].Value = cdo.AssemblingStation;//工位 worksheet.Cells[Row, 2].Value = cdo.Checker;//检验员 worksheet.Cells[Row, 3].Value = cdo.CusDemandType;//技术要求类别 worksheet.Cells[Row, 4].Value = cdo.CusDemandName;//特殊要求 worksheet.Cells[Row, 4].Style.WrapText = true;//自动换行 } var Cells = worksheet.Cells[7, 1, Row, 4]; Cells.Style.Border.Left.Style = ExcelBorderStyle.Thin; //边框样式 Cells.Style.Border.Right.Style = ExcelBorderStyle.Thin; Cells.Style.Border.Bottom.Style = ExcelBorderStyle.Thin; Cells.Style.Border.Top.Style = ExcelBorderStyle.Thin; worksheet.HeaderFooter.OddFooter.LeftAlignedText = "编制:" + UserInfo.UserName + " " + "日期:" + Now.ToShortDateString() + " " + "领料/日期: 出库/日期: 记账/日期: " + "&P/&N"; } #endregion /// <summary> /// 获取订单特殊要求 弃用 /// </summary> /// <param name="OrderID"></param> public List<Model.TOrderCustomerDemand> GetOrderCustomerDemandToList(Model.SomContext somdb, string OrderIDS) { var OrderIDList = OrderIDS.Split(',').ToList().Distinct().ToList(); List<Model.TOrderCustomerDemand> list = new List<Model.TOrderCustomerDemand>(); foreach (var o in OrderIDList) { var OrderID = Convert.ToInt32(o); var ord = somdb.TOrders.Find(OrderID); var orda = somdb.TOrders_Assist.First(p => p.OrderID == ord.rowguid); if (somdb.TCustomerDemandType.Count(p => p.Pro_name == ord.Pro_name && p.Pro_model == ord.Pro_model) == 0) { list.AddRange( somdb.TOrderCustomerDemand.Where(m => m.OrderID == OrderID).ToList());//开启查询 } else { list.AddRange(somdb.TOrderCustomerDemand.Where(m => m.OrderID == OrderID).ToList());//开启查询 } if ((orda.IsNotSpec == null || orda.IsNotSpec == false) && (list == null || !list.Any())) { IQueryable<Model.CustomerDemandImport> temp = null; if (somdb.TCustomerDemandType.Count(p => p.Pro_name == ord.Pro_name && p.Pro_model == ord.Pro_model) == 0) { var pron = somdb.TPronModel.First(p => p.Pro_name == ord.Pro_name && p.Pro_model == ord.Pro_model); if (pron.Pro_Series != null && pron.Pro_Series == "Aikko") { pron.Pro_Series = "二代"; } string[] Series = new string[] { "通用", pron.Pro_Series }; temp = somdb.CustomerDemandImport.Where(m => m.Pro_name == ord.Pro_name && ord.Pro_name.Contains(m.Pro_model) && m.CustomerID == ord.Custom_no && Series.Contains(m.UsedType)).AsNoTracking();//开启查询 } else { temp = somdb.CustomerDemandImport.Where(m => m.Pro_model == ord.Pro_model && m.CustomerID == ord.Custom_no).AsNoTracking();//开启查询 } list.AddRange ((from item in temp select new Model.TOrderCustomerDemand { CusDemandID = item.CusDemandID, CusDemandName = item.CusDemandName, CusDemandType = item.CusDemandType, CusDemandTypeSecond = item.CusDemandTypeSecond, UsedType = item.UsedType, UsedStatus = item.UsedStatus, UsedRemark = item.UsedRemark, IsAssemble = item.IsAssemble, IsQuote = item.IsQuote, IsSkill = item.IsSkill, PartSID = item.PartSID, AsmSID = item.AsmSID }).ToList()); } } return list; } /// <summary> /// 获取特殊要求MES静态表 /// Add By:Jundi Date:2019-06-06 /// </summary> /// <param name="OrderID">订单ID</param> public IQueryable<Model.TOrderCustomerDemand> GetCustomerDemandToList(string OrderIDS) { IQueryable<Model.TOrderCustomerDemand> list = null; var OrderIDList = OrderIDS.Split(',').ToList(); var model = db.MES_Bus_Ord_CustomerDemandStation.Where(p=> OrderIDList.Contains(p.OrderId.ToString()) ); list = (from item in model select new Model.TOrderCustomerDemand { PartSID = item.AssemblingStation,//工位 ID = item.CustomerDemandStationID,//主键 CusDemandID = item.CusDemandID,//特殊要求ID CusDemandName = item.CusDemandName,//客户特殊要求 CusDemandType = item.CusDemandType,//特殊要求类别(一级) CusDemandTypeSecond = item.CusDemandTypeSecond,//特殊要求类别(二级) UsedType = item.UsedType,//应用类别 UsedStatus = item.UsedStatus,//应用状态 UsedRemark = item.UsedRemark,//应用备注 }).AsQueryable(); return list; } /// <summary> /// 数字转罗马数字 /// </summary> /// <param name="No"></param> /// <returns></returns>D private string GetRome(int No) { if (No == 1) { return ""; } else if (No == 2) { return "II"; } else if (No == 3) { return "III"; } else if (No == 4) { return "IV"; } else if (No == 5) { return "V"; } else if (No == 6) { return "VI"; } else if (No == 7) { return "VII"; } else if (No == 8) { return "VIII"; } else if (No == 9) { return "IX"; } else if (No == 10) { return "X"; } else if (No == 11) { return "XI"; } else if (No == 12) { return "XII"; } else if (No == 13) { return "XIII"; } else if (No == 14) { return "XIV"; } else if (No == 15) { return "XV"; } else if (No == 16) { return "XVI"; } else if (No == 17) { return "XVII"; } else if (No == 18) { return "XVIII"; } else if (No == 19) { return "XIX"; } else if (No == 20) { return "XX"; } else if (No == 21) { return "XXI"; } else if (No == 22) { return "XXII"; } else if (No == 23) { return "XXIII"; } else if (No == 24) { return "XXIV"; } else if (No == 25) { return "XXV"; } else if (No == 26) { return "XXVI"; } else if (No == 27) { return "XXVII"; } else if (No == 28) { return "XXVII"; } else if (No == 29) { return "XXIX"; } else if (No == 30) { return "XXX"; } return ""; } private class BOM { public string 成品图号 { get; set; } public string 半成品图号 { get; set; } public string 产品族 { get; set; } public string 组别 { get; set; } public string 工位 { get; set; } public string 预装工位 { get; set; } public string 名称 { get; set; } public string 图号 { get; set; } public string 规格 { get; set; } public string 材料 { get; set; } public int 数量 { get; set; } public string 类型 { get; set; } public int 柜号 { get; set; } public string 柜号列表 { get; set; } } } #endregion }