yanjinhui
2025-03-13 d3ae2e67d8237e8474c7b88f526619550608b933
ÏîÄ¿´úÂë/WIDESEAWCS_Server Õýʽ/SerialPortService/ProcessServer.cs
@@ -4,6 +4,7 @@
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using AutoMapper.Configuration.Conventions;
using SqlSugar;
using WIDESEA_ISerialPortRepository;
using WIDESEA_SerialPortRepository;
@@ -30,9 +31,9 @@
        public override PageGridData<Dt_Process> GetPageData(PageDataOptions options)
        {
            OrderByParameters = new Dictionary<string, OrderByType>
            {
                { nameof(Dt_Process.ArticleOne), OrderByType.Asc },//按什么字段排序
            OrderByParameters = new Dictionary<string, OrderByType>
            {
                { nameof(Dt_Process.SetpNum), OrderByType.Asc },//按什么字段排序
            };
            return base.GetPageData(options);
        }
@@ -63,6 +64,7 @@
            }
        }
        //获取套筒数量
        public WebResponseContent GetSleeveandStep(string gruops)
        {
            try
@@ -86,104 +88,213 @@
        }
        public WebResponseContent AddProcess(AddProcessDTO addProcessDTO)
        {
            try
            {
                var proces = new Dt_Process();
                proces.Nodal = addProcessDTO.nodal;
                proces.CraftType = addProcessDTO.craftstype;
                proces.CraftsStep = addProcessDTO.craftsstep;
                proces.CraftContent = addProcessDTO.craftcontent;
                proces.TorqueSum = addProcessDTO.sleeveNum;
                proces.Tools = addProcessDTO.tools;
                _unitOfWorkManage.BeginTran();
                BaseDal.AddData(proces);
                _unitOfWorkManage.CommitTran();
                return new WebResponseContent { Status = true, Data = proces };
            }
            catch (Exception ex)
            {
                _unitOfWorkManage.RollbackTran();
                return new WebResponseContent { Status = false, Message = "查询失败:" + ex.Message };
            }
        }
        public WebResponseContent Upprocess(PutProcessDTO addProcessDTO)
        public WebResponseContent AddOrUpdateProcess(AddProcessDTO addProcessDTO)
        {
            try
            {
                var proces = BaseDal.QueryData(x => x.CraftID == addProcessDTO.id).FirstOrDefault();
                if (proces == null)
                _unitOfWorkManage.BeginTran(); // å¼€å¯äº‹åŠ¡
                // åˆ¤æ–­æ˜¯æ·»åŠ è¿˜æ˜¯æ›´æ–°
                if (addProcessDTO.id == 0)//添加
                {
                    return new WebResponseContent { Status = false, Message = "没有找到" };
                    // æ£€æŸ¥æ˜¯å¦å·²ç»å­˜åœ¨ç›¸åŒçš„ setnum
                    bool isExist = BaseDal.QueryData(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);
                    _unitOfWorkManage.CommitTran(); // æäº¤äº‹åŠ¡
                    return new WebResponseContent { Status = true, Data = proces };
                }
                proces.Nodal = addProcessDTO.nodal;
                proces.CraftType = addProcessDTO.craftstype;
                proces.CraftsStep = addProcessDTO.craftsstep;
                proces.CraftContent = addProcessDTO.craftcontent;
                proces.TorqueSum = addProcessDTO.sleeveNum;
                proces.Tools = addProcessDTO.tools;
                _unitOfWorkManage.BeginTran();
                BaseDal.UpdateData(proces);
                _unitOfWorkManage.CommitTran();
                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);
                    _unitOfWorkManage.CommitTran(); // æäº¤äº‹åŠ¡
                    return new WebResponseContent { Status = true, Data = existingProcess };
                }
            }
            catch (Exception ex)
            {
                _unitOfWorkManage.RollbackTran();
                return new WebResponseContent { Status = false, Message = "查询失败:" + ex.Message };
                _unitOfWorkManage.RollbackTran(); // äº‹åŠ¡å›žæ»š
                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);
                // å…ˆæŸ¥åˆ°è¿™æ¡ä»»åŠ¡
                var putake = _putakeRepository.QueryData(x => x.Njtakeid == takeid && x.Grouptype == group).OrderBy(x => x.Dispatchtime).FirstOrDefault();
                if (putake==null)
                {
                    return new WebResponseContent { Status = false, Message = "没有找到" };
                }
                //获取到当前完成的步骤
                var nowNum = _torqueOpRepository.QueryData(x => x.GroupOp == group && x.TakeId == takeid).Max(x => x.ProcessSte);
                //根据分组和步骤找到该条数据
                var process = BaseDal.QueryData(x => x.CraftType == group&&x.SetpNum== nowNum).FirstOrDefault();
                //获取Modifier  ="true"  è¡¨ç¤ºæ˜¯å¼ºåˆ¶æ‰§è¡Œ
                var Mod = torp.Select(x => x.Modifier).FirstOrDefault();
                //查出工艺表
                var process = BaseDal.QueryData(x => x.CraftType == group);
                //返回当前工艺的最大步骤
                var maxproce = BaseDal.QueryData(x => x.CraftType == group).Max(x => x.SetpNum);
                var maxproce = process.Max(x => x.SetpNum);
                //一共要有多少条数据(目标数量)
                int TargetCount = process.TorqueOneQuantity + process.TorqueTwoQuantity;
                //拿到工艺表中步骤为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.GroupOp == group&&x.TakeId== takeid).Count();
                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();
                if (practiceCount < TargetCount)
                //判断存值表的数据是否满足该步骤需要几条数据的条数
                int TargetCount = TorqueOneQuantity + TorqueTwoQuantity;//一共要有多少条数据(目标数量)
                if (practiceCount < TargetCount && !flag)
                {
                    return new WebResponseContent { Status = false, Message = "没有完成当前步骤",Data= process };
                    return new WebResponseContent { Status = true, Message = "没有完成当前步骤", Data =new { nowdate, maxproce } };
                }
                if (maxproce== nowNum)
                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 = nowNum + 1;
                int num = setpDTO.setnum + 1;
                var nex = BaseDal.QueryFirst(x => x.CraftType == group && x.SetpNum == num);
                //返回下一步步骤
                var nex = process.Where(x => x.CraftType == setpDTO.group && x.SetpNum == num).FirstOrDefault();
                return new WebResponseContent { Status = true, Data = nex };
                _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)
            {