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 }; } } public WebResponseContent AddOrUpdateProcess(AddProcessDTO addProcessDTO) { try { // 判断是添加还是更新 if (addProcessDTO.id == 0)//添加 { var pross = BaseDal.QueryData(); // 检查是否已经存在相同的 setnum bool isExist = pross.Where(x => x.SetpNum == addProcessDTO.setnum && x.CraftType == addProcessDTO.craftstype).Any(); if (isExist) { 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, Creater = "admin", CreateDate = DateTime.Now }; BaseDal.AddData(proces); return new WebResponseContent { Status = true, Data = proces }; } else//更新 { // 查询当前要更新的记录 var existingProcess = BaseDal.QueryFirst(x => x.CraftID == addProcessDTO.id); if (existingProcess == null) { return new WebResponseContent { Status = false, Message = "未找到该工艺步骤,无法更新!" }; } // 只有当 setnum 发生变化时,才进行重复性检查 if (existingProcess.Nodal != addProcessDTO.setnum) { bool isExist = BaseDal.QueryData(x => x.Nodal == addProcessDTO.setnum && x.CraftType == addProcessDTO.craftstype && x.CraftID != addProcessDTO.id).Any(); if (isExist) { return new WebResponseContent { Status = false, Message = $"步骤 {addProcessDTO.setnum} 已存在,不能重复!" }; } } // 更新数据 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 }; } } //获取当前任务工作步骤 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 }; } } } }