using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Text.RegularExpressions; using System.Threading.Tasks; using AutoMapper.Configuration.Conventions; using SqlSugar; using WIDESEA_ISerialPortRepository; using WIDESEA_SerialPortRepository; using WIDESEAWCS_Core; using WIDESEAWCS_Core.BaseRepository; using WIDESEAWCS_Core.BaseServices; using WIDESEAWCS_DTO.SerialPort; using WIDESEAWCS_ITaskInfoService; using WIDESEAWCS_Model.Models; namespace WIDESEAWCS_TaskInfoService { public class ProcessServer : ServiceBase, IProcessServer { private IPutakeRepository _putakeRepository; private IUnitOfWorkManage _unitOfWorkManage; private ITorqueOpRepository _torqueOpRepository; public ProcessServer(IProcessRepository BaseDal, IUnitOfWorkManage unitOfWorkManage, IPutakeRepository putakeRepository, ITorqueOpRepository torqueOpRepository) : base(BaseDal) { _putakeRepository = putakeRepository; _unitOfWorkManage = unitOfWorkManage; _torqueOpRepository = torqueOpRepository; } public override PageGridData GetPageData(PageDataOptions options) { OrderByParameters = new Dictionary { { nameof(Dt_Process.SetpNum), OrderByType.Asc },//按什么字段排序 { nameof(Dt_Process.CraftType), OrderByType.Asc } }; return base.GetPageData(options); } //获取套筒数量 public WebResponseContent GetSleeveandStep(string gruops) { try { var result = BaseDal.QueryData(x => x.CraftType == gruops) // 先筛选 CraftType .GroupBy(x => x.CraftType) // 按 CraftType 分组 .Select(g => new { maxNodal = g.Max(a => a.Nodal), sumTorqueSum = g.Sum(a => a.TorqueSum) }).ToList(); return new WebResponseContent { Status = true, Data = result }; } catch (Exception ex) { return new WebResponseContent { Status = false, Message = "查询失败:" + ex.Message }; } } #region //public WebResponseContent AddOrUpdateProcess(AddProcessDTO addProcessDTO) //{ // try // { // var allProcesses = BaseDal.QueryData(); // 仅查询一次所有数据 // if (addProcessDTO.id == 0) // 添加 // { // // 检查是否已经存在相同的 setnum // if (allProcesses.Any(x => x.SetpNum == addProcessDTO.setnum && x.CraftType == addProcessDTO.craftstype)) // { // return new WebResponseContent { Status = false, Message = $"步骤 {addProcessDTO.setnum} 已存在,不能重复添加!" }; // } // // 创建新工艺步骤 // var proces = new Dt_Process // { // SetpNum = addProcessDTO.setnum, // CraftType = addProcessDTO.craftstype, // CraftsStep = addProcessDTO.craftsstep, // CraftContent = addProcessDTO.craftcontent, // Tools = addProcessDTO.tools, // Material = addProcessDTO.material, // ArticleOneid = addProcessDTO.aritcleoneid, // ArticleOne = addProcessDTO.articleone, // ArticleTowid = addProcessDTO.aritcletowid, // ArticleTwo = addProcessDTO.articletwo, // CreateDate = DateTime.Now // }; // BaseDal.AddData(proces); // return new WebResponseContent { Status = true, Data = proces }; // } // else // 更新 // { // var existingProcess = allProcesses.FirstOrDefault(x => x.CraftID == addProcessDTO.id); // if (existingProcess == null) // { // return new WebResponseContent { Status = false, Message = "未找到该工艺步骤,无法更新!" }; // } // // 只有当 setnum 发生变化时,才进行重复性检查 // if (existingProcess.SetpNum != addProcessDTO.setnum && allProcesses.Any(x => x.SetpNum == addProcessDTO.setnum && x.CraftType == addProcessDTO.craftstype && x.CraftID != addProcessDTO.id)) // { // return new WebResponseContent { Status = false, Message = $"步骤 {addProcessDTO.setnum} 已存在,不能重复!" }; // } // // 更新数据 // existingProcess.Nodal = addProcessDTO.Nodal; // existingProcess.SetpNum = addProcessDTO.setnum; // existingProcess.CraftType = addProcessDTO.craftstype; // existingProcess.CraftsStep = addProcessDTO.craftsstep; // existingProcess.CraftContent = addProcessDTO.craftcontent; // existingProcess.Tools = addProcessDTO.tools; // existingProcess.Material = addProcessDTO.material; // existingProcess.ArticleOneid = addProcessDTO.aritcleoneid; // existingProcess.ArticleOne = addProcessDTO.articleone; // existingProcess.ArticleTowid = addProcessDTO.aritcletowid; // existingProcess.ArticleTwo = addProcessDTO.articletwo; // existingProcess.CreateDate = DateTime.Now; // BaseDal.UpdateData(existingProcess); // return new WebResponseContent { Status = true, Data = existingProcess }; // } // } // catch (Exception ex) // { // return new WebResponseContent { Status = false, Message = "操作失败:" + ex.Message }; // } //} //获取当前任务工作步骤 #endregion /// /// 根据id来判断,有id就更新没有就添加 /// /// /// public WebResponseContent AddOrUpdateProcess(AddProcessDTO addProcessDTO) { try { var allProcesses = BaseDal.QueryData().OrderBy(x => x.SetpNum).ToList(); // 按 setnum 排序 if (addProcessDTO.id == 0) // 添加 { // 检查是否已经存在相同的 setnum if (allProcesses.Any(x => x.SetpNum == addProcessDTO.setnum && x.CraftType == addProcessDTO.craftstype)) { return new WebResponseContent { Status = false, Message = $"步骤 {addProcessDTO.setnum} 已存在,不能重复添加!" }; } // 需要调整后续步骤的序号 foreach (var process in allProcesses.Where(x => x.SetpNum >= addProcessDTO.setnum)) { process.SetpNum++; // 后移一位 BaseDal.UpdateData(process); } // 创建新工艺步骤 var proces = new Dt_Process { SetpNum = addProcessDTO.setnum, CraftType = addProcessDTO.craftstype, CraftsStep = addProcessDTO.craftsstep, CraftContent = addProcessDTO.craftcontent, Tools = addProcessDTO.tools, Material = addProcessDTO.material, ArticleOneid = addProcessDTO.aritcleoneid, ArticleOne = addProcessDTO.articleone, ArticleTowid = addProcessDTO.aritcletowid, ArticleTwo = addProcessDTO.articletwo, CreateDate = DateTime.Now }; BaseDal.AddData(proces); return new WebResponseContent { Status = true, Data = proces }; } else // 更新 { var existingProcess = allProcesses.FirstOrDefault(x => x.CraftID == addProcessDTO.id); if (existingProcess == null) { return new WebResponseContent { Status = false, Message = "未找到该工艺步骤,无法更新!" }; } int oldSetNum = existingProcess.SetpNum; int newSetNum = addProcessDTO.setnum; if (oldSetNum == newSetNum) // 如果没改顺序,直接更新其他内容 { existingProcess.Nodal = addProcessDTO.Nodal; existingProcess.CraftType = addProcessDTO.craftstype; existingProcess.CraftsStep = addProcessDTO.craftsstep; existingProcess.CraftContent = addProcessDTO.craftcontent; existingProcess.Tools = addProcessDTO.tools; existingProcess.Material = addProcessDTO.material; existingProcess.ArticleOneid = addProcessDTO.aritcleoneid; existingProcess.ArticleOne = addProcessDTO.articleone; existingProcess.ArticleTowid = addProcessDTO.aritcletowid; existingProcess.ArticleTwo = addProcessDTO.articletwo; existingProcess.CreateDate = DateTime.Now; BaseDal.UpdateData(existingProcess); return new WebResponseContent { Status = true, Data = existingProcess }; } // 调整顺序 if (newSetNum < oldSetNum) // 向前移动,后续数据往后移 { foreach (var process in allProcesses.Where(x => x.SetpNum >= newSetNum && x.SetpNum < oldSetNum)) { process.SetpNum++; // 后移一位 BaseDal.UpdateData(process); } } else if (newSetNum > oldSetNum) // 向后移动,前面数据往前移 { foreach (var process in allProcesses.Where(x => x.SetpNum > oldSetNum && x.SetpNum <= newSetNum)) { process.SetpNum--; // 前移一位 BaseDal.UpdateData(process); } } // 更新当前步骤的新序号 existingProcess.SetpNum = newSetNum; existingProcess.Nodal = addProcessDTO.Nodal; existingProcess.CraftType = addProcessDTO.craftstype; existingProcess.CraftsStep = addProcessDTO.craftsstep; existingProcess.CraftContent = addProcessDTO.craftcontent; existingProcess.Tools = addProcessDTO.tools; existingProcess.Material = addProcessDTO.material; existingProcess.ArticleOneid = addProcessDTO.aritcleoneid; existingProcess.ArticleOne = addProcessDTO.articleone; existingProcess.ArticleTowid = addProcessDTO.aritcletowid; existingProcess.ArticleTwo = addProcessDTO.articletwo; existingProcess.CreateDate = DateTime.Now; BaseDal.UpdateData(existingProcess); return new WebResponseContent { Status = true, Data = existingProcess }; } } catch (Exception ex) { return new WebResponseContent { Status = false, Message = "操作失败:" + ex.Message }; } } public WebResponseContent Getcircuit(string group, string takeid) { try { //根据组和任务号获得top表全部数据 var torp = _torqueOpRepository.QueryData(x => x.GroupOp == group && x.TakeId == takeid); //获取Modifier ="true" 表示是强制执行 var Mod = torp.Select(x => x.Modifier).FirstOrDefault(); //查出工艺表 var process = BaseDal.QueryData(x => x.CraftType == group); //返回当前工艺的最大步骤 var maxproce = process.Max(x => x.SetpNum); //拿到工艺表中步骤为1的 var proNoe = process.Where(x => x.SetpNum == 1);//获得工艺表中的第一步 if (torp.Count == 0) { return new WebResponseContent { Status = true, Message = "返回工艺表中的第一条", Data =new { proNoe, maxproce } }; } var nowNum = torp.Max(x => x.ProcessSte);//获得当前最大步骤 //op.Modifier="true" 表示是强制执行,就不需要判断应扭的次数,直接返回 op.ProcessSte+1 if (Mod == "true") { var now= maxproce + 1; return new WebResponseContent { Status = true, Data = new { proNoe, maxproce, now } }; } //如果存值表中有数据就返回给他当前工艺步骤 var maxpro = process.Where(x => x.SetpNum == nowNum); //判断当前步骤的扭力次数是否完成,没完成返回当前步骤,完成返回op.ProcessSte+1,状态值给false return new WebResponseContent { Status = true, Message = "返回当前任务做到的大步骤", Data =new { maxpro, maxproce } }; } catch (Exception ex) { return new WebResponseContent { Status = false, Message = "查询失败:" + ex.Message }; } } public WebResponseContent Nextprocess(SetpDTO setpDTO,bool flag)//强制执行给我true { try { Dt_TorqueOp op = new Dt_TorqueOp(); //查出工艺表 var process = BaseDal.QueryData(x => x.CraftType == setpDTO.group); // 查询当前步骤的 TorqueOp 记录,匹配 ProcessSte和组,任务号,检查是否达到要求(实际数量) int practiceCount = _torqueOpRepository.QueryData(x => x.ProcessSte == setpDTO.setnum && x.GroupOp == setpDTO.group && x.TakeId == setpDTO.takeid).Count(); //查到有该条数据了(更具分组和步骤找到该条数据) var nowdate = process.Where(x => x.CraftType == setpDTO.group && x.SetpNum == setpDTO.setnum); //返回当前工艺的最大步骤 var maxproce = process.Max(x => x.SetpNum); var TorqueOneQuantity = nowdate.Select(x => x.TorqueOneQuantity).FirstOrDefault(); var TorqueTwoQuantity= nowdate.Select(x => x.TorqueTwoQuantity).FirstOrDefault(); //判断存值表的数据是否满足该步骤需要几条数据的条数 int TargetCount = TorqueOneQuantity + TorqueTwoQuantity;//一共要有多少条数据(目标数量) if (practiceCount < TargetCount && !flag) { return new WebResponseContent { Status = true, Message = "没有完成当前步骤", Data =new { nowdate, maxproce } }; } else if(practiceCount == TargetCount || (practiceCount != TargetCount && flag))//强制执行 前端给我一个flag=ture时 { //强制跳转下一步,插入op表当前步骤 op.TakeId = setpDTO.takeid; op.GroupOp = setpDTO.group; op.ProcessSte = setpDTO.setnum; op.CreateDate = DateTime.Now; op.Creater = "admin"; op.Modifier = "true"; } if (maxproce == setpDTO.setnum) { return new WebResponseContent { Status = false, Message = "你完成了当前作业" }; } int num = setpDTO.setnum + 1; //返回下一步步骤 var nex = process.Where(x => x.CraftType == setpDTO.group && x.SetpNum == num).FirstOrDefault(); _torqueOpRepository.AddData(op); return new WebResponseContent { Status = true,Message= $"你已完成当前第{setpDTO.setnum},准备第{num}步任务", Data = new { nex, maxproce } }; } catch (Exception ex) { return new WebResponseContent { Status = false, Message = "查询失败:" + ex.Message }; } } public WebResponseContent PreviousProcess(SetpDTO setpDTO) { try { //查出工艺表 var process = BaseDal.QueryData(x => x.CraftType == setpDTO.group); // 查询当前步骤的 TorqueOp 记录,匹配 ProcessSte和组,任务号,检查是否达到要求(实际数量) int practiceCount = _torqueOpRepository.QueryData(x => x.ProcessSte == setpDTO.setnum && x.GroupOp == setpDTO.group && x.TakeId == setpDTO.takeid).Count(); //查到有该条数据了(更具分组和步骤找到该条数据) var nowdate = process.Where(x => x.CraftType == setpDTO.group && x.SetpNum == setpDTO.setnum); //返回当前工艺的最大步骤 var maxproce = process.Max(x => x.SetpNum); int num = setpDTO.setnum - 1; var nex = process.Where(x => x.CraftType == setpDTO.group && x.SetpNum == num).FirstOrDefault(); return new WebResponseContent { Status = true, Message = $"上一步{setpDTO.setnum}", Data = new { nex, maxproce } }; } catch (Exception ex) { return new WebResponseContent { Status = false, Message = "查询失败:" + ex.Message }; } } } }