using Infrastructure.Attribute; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.DependencyInjection; using SqlSugar; using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Linq.Expressions; using System.Text; using System.Threading.Tasks; using ZR.Common; using ZR.Service.mes.pro.IService; using ZR.Service.MES.md.IService; using static System.Net.WebRequestMethods; using JinianNet.JNTemplate; using static Aliyun.OSS.Model.LiveChannelStat; using ZR.Model.MES.pro.DTO; using ZR.Model.MES.qu; using ZR.Model.MES.pro; using Model.DBModel; using Infrastructure; using Microsoft.AspNetCore.Hosting; using MiniExcelLibs; using System.IO; using SqlSugar.Extensions; using ZR.Model.mes.pro; namespace ZR.Service.mes.pro { [AppService(ServiceType = typeof(IProWorkorderServiceV2), ServiceLifetime = LifeTime.Transient)] public class ProWorkorderServiceV2 : BaseService, IProWorkorderServiceV2 { public (List, int) GetWorkorderList(int pageNum, int pageSize, int year, int week, int date, int isSchedule) { var predicate = Expressionable.Create() .AndIF(year > 0, it => it.Year == year) .AndIF(week > 0, it => it.Week == week) .AndIF(date > 0, it => it.Date == date) .ToExpression(); int totalCount = 0; List proWorkorderList = Context.Queryable().Where(predicate).OrderBy(it => it.Id).ToPageList(pageNum, pageSize, ref totalCount); return (proWorkorderList, totalCount); } /// /// 获取生产计划id /// /// private int Getworkplanid_max() { ProWorkorder_v2 max_workoder = Context.Queryable().OrderBy(it => it.Id, OrderByType.Desc).First(); if (max_workoder != null && !string.IsNullOrEmpty(max_workoder.Id) && max_workoder.Id.Substring(2, 8) == DateTime.Now.ToString("yyyyMMdd")) { int num = Convert.ToInt32(max_workoder.Id.Substring(10)) + 1; return num; } else { return 0; } } public string ImportExceldata(List workorderList) { int max_id = Getworkplanid_max(); // 更新生产计划 if (workorderList != null && workorderList.Count > 0) { workorderList.ForEach(it => { it.Id = "WO" + DateTime.Now.ToString("yyyyMMdd") + max_id.ToString("000"); it.Remark3 = "Excel导入"; max_id++; }); foreach (ProWorkorder_v2 item in workorderList) { ProWorklplan_v2 planItem = Context.Queryable().Where(it => it.Id == item.FinishedPartNumber).First(); if (planItem != null) { Context.Updateable().Where(it => it.Id == planItem.Id) .SetColumns(it => it.NoSchedule == planItem.RequireNum - item.hangNumber ).ExecuteCommandAsync(); } } UseTran(() => { // 删除之前的工单 Context.Deleteable().Where(it => it.Year == workorderList[0].Year) .Where(it => it.Week == workorderList[0].Week) .Where(it => it.Date == workorderList[0].Date).ExecuteCommand(); //插入 Context.Insertable(workorderList).ExecuteCommand(); }); return "success"; } //var x = Context.Storageable(workorderList) // .SplitUpdate(it => it.Any())//存在更新 // .SplitInsert(it => true)//否则插入(更新优先级大于插入) // .WhereColumns(it => new { it.Year, it.Week, it.Date, it.FinishedPartNumber })//如果不是主键可以这样实现(多字段it=>new{it.x1,it.x2}) // .ToStorage(); //x.AsInsertable.ExecuteCommand();//插入可插入部分; //x.AsUpdateable.IgnoreColumns(it => it.Id).ExecuteCommand();//存在更新 //string msg = string.Format(" 插入{0} 更新{1} 错误数据{2} 不计算数据{3} 删除数据{4} 总共{5}", // x.InsertList.Count, // x.UpdateList.Count, // x.ErrorList.Count, // x.IgnoreList.Count, // x.DeleteList.Count, // x.TotalList.Count); return ""; //插入可插入部分 } /// /// 下载 /// /// /// /// /// public (string, string) ExportExceldata(int year, int week, int date) { //1.0 读取表数据 var list = Queryable().Where(it => it.Year == year && it.Week == week && it.Date == date).ToList(); //2.0 保存为excel IWebHostEnvironment webHostEnvironment = (IWebHostEnvironment)App.ServiceProvider.GetService(typeof(IWebHostEnvironment)); string sFileName = $"{year}年{week}周{date}日计划-{DateTime.Now:MM-dd-HHmmss}.xlsx"; string fullPath = Path.Combine(webHostEnvironment.WebRootPath, "export", sFileName); Directory.CreateDirectory(Path.GetDirectoryName(fullPath)); var Sheet1 = new { year = year, week = week, date = date, title = $"{year}年车镜实业涂装事业{week}周{date}生产滚动表", workorder = list }; string templatePath = Path.Combine(webHostEnvironment.WebRootPath, "ImportTemplate", "日生产计划模板1.xlsx"); MiniExcel.SaveAsByTemplate(fullPath, templatePath, Sheet1); // MiniExcel.SaveAs(fullPath, list); //3.0 返回路径和文件名 return (sFileName, fullPath); } /// /// 删除周计划全部 /// /// /// /// public int DeleteAllWorkorder(int year, int week, int date) { return Context.Deleteable().Where(it => it.Year == year && it.Week == week && it.Date == date).ExecuteCommand(); } /// /// 获取生产计划id /// /// private int Getworkorderid_max() { ProWorkorder_v2 max_workorder = Context.Queryable().OrderBy(it => it.Id, OrderByType.Desc).First(); if (max_workorder != null && !string.IsNullOrEmpty(max_workorder.Id) && max_workorder.Id.Substring(2, 8) == DateTime.Now.ToString("yyyyMMdd")) { int num = Convert.ToInt32(max_workorder.Id.Substring(10)) + 1; return num; } else { return 0; } } public int AddWorkOrder(ProWorkorder_v2 workorder) { workorder.Id = "WO" + DateTime.Now.ToString("yyyyMMdd") + Getworkorderid_max().ToString("000"); return Context.Insertable(workorder).ExecuteCommand(); } public int DeleteWorkOrder(string id) { return Context.Deleteable().In(id).ExecuteCommand(); } public int UpdateWorkOrder(ProWorkorder_v2 workorder) { return Context.Updateable(workorder).ExecuteCommand(); } } }