using Infrastructure.Attribute; using Microsoft.Extensions.DependencyInjection; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using ZR.Model.MES.op.ZR.Model.mes.md; using ZR.Service.MES.op.IService; using ZR.Service; using ZR.Service.mes.mm.IService; using ZR.Model.MES.mm; using ZR.Model.MES.pro; using System.Globalization; using static System.Runtime.InteropServices.JavaScript.JSType; using ZR.Model.MES.mm.Dto; using SqlSugar; using Microsoft.Extensions.Hosting; namespace ZR.Service.mes.mm { [AppService(ServiceType = typeof(IMaterialInputService), ServiceLifetime = LifeTime.Transient)] public class MaterialInputService : BaseService, IMaterialInputService { /// /// 获取AGV上料起点 /// /// public string[] Getstart_AGV_points() { List positions = Context.Queryable() .Where(it => it.AreaCode == 2) .Where(it => it.Type == 0) .ToList(); string[] cors = new string[positions.Count]; for (int i = 0; i < positions.Count; i++) cors[i] = positions[i].Coordinate.ToString(); return cors; } /// /// 获取AGV上料终点 /// /// public string[] Getend_AGV_points() { List positions = Context.Queryable() .Where(it => it.AreaCode == 2) .Where(it => it.Type == 1) .ToList(); string[] cors = new string[positions.Count]; for (int i = 0; i < positions.Count; i++) cors[i] = positions[i].Coordinate.ToString(); return cors; } /// /// 获取工单列表 /// /// /// public List Getworkorderlist(DateTime datetimespan) { // 获取年份和周数 Calendar calendar = new GregorianCalendar(); int year = calendar.GetYear(datetimespan); int week = calendar.GetWeekOfYear(datetimespan, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Sunday); // 获取这一周中的第几天 DayOfWeek dayOfWeek = datetimespan.DayOfWeek; int dayOfWeekNumber = (int)dayOfWeek + 1; // 将 DayOfWeek 枚举转换为从 1 开始的数字 List WorkorderList = Context.Queryable() .Where(it => it.Year == year) .Where(it => it.Week == week) .Where(it => it.Date == dayOfWeekNumber) .Where(it=>it.Remark3=="是") .ToList(); string[] workorderArray=new string[WorkorderList.Count]; for(int i = 0; i< WorkorderList.Count; i++) { workorderArray[i] = WorkorderList[i].ClientWorkorder; } // 配料list List ingredients=Context.Queryable() .Where(it=> workorderArray.Contains(it.FkWorkorder)) .Where(it=> it.Isingredient==0) .ToList(); for (int i = 0; i < WorkorderList.Count; i++) { for (int j = 0; j < ingredients.Count; j++) { if (ingredients[j].FkWorkorder == WorkorderList[i].ClientWorkorder) { WorkorderList[i].PreviousNumber = ingredients[j].Remian ?? 0; } } } return WorkorderList; } /// /// 生成任务单 /// /// /// public int Generatetask(IngredientTaskDto task,string name) { List ingredientTasks=new List (); long taskid= SnowFlakeSingle.Instance.NextId(); foreach (var item in task.workorders) { //TODO 处理 未完成的工单 //1 判断为未完成的工单 if (item.previousNumber > item.previousNumbered) { int remain = item.previousNumber - item.previousNumbered; //插入或者修改 MmFkWorkorderIngredient ingredient=new MmFkWorkorderIngredient(); ingredient.FkWorkorder=item.workorder; ingredient.Isingredient=0; ingredient.Remian = remain; ingredient.CreatedTime=DateTime.Now; ingredient.UpdatedTime=DateTime.Now; var x = Context.Storageable(ingredient).ToStorage(); x.AsInsertable.ExecuteCommand();//不存在插入 x.AsUpdateable.IgnoreColumns(z => z.CreatedTime).ExecuteCommand();//存在更新 } else if (item.previousNumber==item.previousNumbered) { Context.Updateable() .SetColumns(it => it.Isingredient == 1) .SetColumns(it => it.Remian == 0) .Where(it => it.FkWorkorder == item.workorder).ExecuteCommand(); } MmIngredientTask ingredientTask = new MmIngredientTask(); ingredientTask.AgvPosition = task.agv_position; ingredientTask.TaskId = taskid; ingredientTask.Workorder = item.workorder; ingredientTask.Partnumber = item.partnumber; ingredientTask.PreviousNumber = item.previousNumber; ingredientTask.PreviousNumbered=item.previousNumbered; ingredientTask.CreatedBy = name; ingredientTask.CreatedTime=DateTime.Now; ingredientTasks.Add(ingredientTask); } return Context.Insertable(ingredientTasks).ExecuteCommand(); } } }