using System; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using System.Linq; using System.Net.NetworkInformation; using System.Text; using System.Threading.Tasks; using OfficeOpenXml.FormulaParsing.Excel.Functions.Information; using SqlSugar; using StackExchange.Profiling.Internal; using WIDESEA_ISerialPortRepository; using WIDESEA_SerialPortRepository; using WIDESEAWCS_Core; using WIDESEAWCS_Core.BaseRepository; using WIDESEAWCS_Core.BaseServices; using WIDESEAWCS_DTO.SerialPort; using WIDESEAWCS_ITaskInfoRepository; using WIDESEAWCS_ITaskInfoService; using WIDESEAWCS_Model.Models; namespace WIDESEAWCS_TaskInfoService { public class NjTaskServer : ServiceBase, INjTaskServer { private readonly ITemplateRepository _templateRepository; private readonly INJtakeHistoryRepository _nJtakeHistoryRepository; private readonly IPutakeRepository _putakeRepository; private IUnitOfWorkManage _unitOfWorkManage; public NjTaskServer(INjTaskRepository BaseDal, ITemplateRepository templateRepository, INJtakeHistoryRepository nJtakeHistoryRepository, IPutakeRepository putakeRepository, IUnitOfWorkManage unitOfWorkManage) : base(BaseDal) { _templateRepository = templateRepository; _nJtakeHistoryRepository = nJtakeHistoryRepository; _putakeRepository = putakeRepository; _unitOfWorkManage = unitOfWorkManage;//数据库事务 } public override PageGridData GetPageData(PageDataOptions options) { OrderByParameters = new Dictionary { { nameof(Dt_NjTask.trainKind),SqlSugar.OrderByType.Asc } }; return base.GetPageData(options); } /// /// 保存模板并提交 /// 有模板id的时候就返回模板的值,更新或选择模板的值并将任务派发下去 /// 没有模板id的时候,就创建一个模板,共下次使用 /// /// /// public WebResponseContent Submtandsave(NjtakeDTO njtakeDTO) { try { // 1. 查询模板表 & 任务表 var existtepm = _templateRepository.QueryFirst(i => i.TemplateID == njtakeDTO.Tpid); var task = BaseDal.QueryFirst(i => i.NJtaskID == njtakeDTO.Njtakeid); if (task == null) { return new WebResponseContent { Status = false, Message = "没有找到任务" }; } //2.确定是新建模板还是更新已有模板 bool isNewTemplate = existtepm == null; if (isNewTemplate) { existtepm = new Dt_Template { TemplateName = njtakeDTO.takename, TakeName = njtakeDTO.takename, jiShuYuan = njtakeDTO.jishuyuan, gongZhang = njtakeDTO.gongzhang, zhiJianYuan_Dq = njtakeDTO.zhijianyuan_dq, zhiJianYuan_Lc = njtakeDTO.zhijianyuan_lc, zhiJianYuan_Dg = njtakeDTO.zhijianyuan_dg, liJu_Dg = njtakeDTO.liju_dg, liJu_Dq = njtakeDTO.liju_dq, liJu_Lc = njtakeDTO.liju_lc, fuZhu_Dg = njtakeDTO.fuzhu_dg, fuZhu_Dq = njtakeDTO.fuzhu_dq, fuZhu_Lc = njtakeDTO.fuzhu_lc }; } else { existtepm.zhiJianYuan_Dq = njtakeDTO.zhijianyuan_dq; existtepm.zhiJianYuan_Lc = njtakeDTO.zhijianyuan_lc; existtepm.zhiJianYuan_Dg = njtakeDTO.zhijianyuan_dg; existtepm.liJu_Dg = njtakeDTO.liju_dg; existtepm.liJu_Dq = njtakeDTO.liju_dq; existtepm.liJu_Lc = njtakeDTO.liju_lc; existtepm.fuZhu_Dg = njtakeDTO.fuzhu_dg; existtepm.fuZhu_Dq = njtakeDTO.fuzhu_dq; existtepm.fuZhu_Lc = njtakeDTO.fuzhu_lc; } // 3. 更新任务表 task.Taskstatus = 1; // 已派工 task.dispatchTime = DateTime.Now; task.startTime = DateTime.Now; ApplyTemplateToTask(task, existtepm, isNewTemplate, njtakeDTO); // 4. 插入历史记录 var history = new Dt_NJtakeHistory { taskID = task.id, trainKind = task.trainKind, TakeName = task.TakeName, trainNum = task.trainNum, track = task.track, coachNum = task.coachNum, bogie = task.bogie, processDept = task.processDept, jiShuYuan = task.jiShuYuan, zhiJianYuan_LC = task.zhiJianYuan_LC, zhiJianYuan_DG = task.zhiJianYuan_DG, zhiJianYuan_DQ = task.zhiJianYuan_DQ, gongZhang = task.gongZhang, liJu_LC = task.liJu_LC, liJu_DG = task.liJu_DG, liJu_DQ = task.liJu_DQ, fuZhu_LC = task.fuZhu_LC, fuZhu_DQ = task.fuZhu_DQ, fuZhu_DG = task.fuZhu_DG, createTime = task.createTime, dispatchTime = task.dispatchTime, startTime = task.startTime, startTime_LC = task.startTime_LC, endTime_LC = task.endTime_LC, startTime_DG = task.startTime_DG, endTime_DG = task.endTime_DG, startTime_DQ = task.startTime_DQ, endTime_DQ = task.endTime_DQ, endTime = task.endTime, confirmTime_JS = task.confirmTime_JS, confirmTime_GZ = task.confirmTime_GZ, confirmTime_LC = task.confirmTime_LC, confirmTime_DG = task.confirmTime_DG, confirmTime_DQ = task.confirmTime_DQ }; // 5. 插入任务分解数据 var listp = new List { new Dt_Putake { Njtakeid = task.NJtaskID, takename = task.TakeName, jishuyuan = task.jiShuYuan, gonzhang = task.gongZhang, Grouptype = "电气", Pustatus = 0, zhijianyuan = task.zhiJianYuan_DQ, lijuzouyeyuan = task.liJu_DQ, fuzyuan = task.fuZhu_DQ, Dispatchtime = task.dispatchTime }, new Dt_Putake { Njtakeid = task.NJtaskID, takename = task.TakeName, jishuyuan = task.jiShuYuan, gonzhang = task.gongZhang, Grouptype = "机械", Pustatus = 0, zhijianyuan = task.zhiJianYuan_LC, lijuzouyeyuan = task.liJu_LC, fuzyuan = task.fuZhu_LC, Dispatchtime = task.dispatchTime }, new Dt_Putake { Njtakeid = task.NJtaskID, takename = task.TakeName, jishuyuan = task.jiShuYuan, gonzhang = task.gongZhang, Grouptype = "地沟", Pustatus = 0, zhijianyuan = task.zhiJianYuan_DG, lijuzouyeyuan = task.liJu_DG, fuzyuan = task.fuZhu_DG, Dispatchtime = task.dispatchTime } }; // 6. 事务提交 _unitOfWorkManage.BeginTran(); if (isNewTemplate) { _templateRepository.AddData(existtepm); } else { _templateRepository.UpdateData(existtepm); } BaseDal.UpdateData(task); _nJtakeHistoryRepository.AddData(history); _putakeRepository.AddData(listp); _unitOfWorkManage.CommitTran(); return new WebResponseContent { Status = true, Data = task }; } catch (Exception ex) { _unitOfWorkManage.RollbackTran(); return new WebResponseContent { Status = false, Message = "添加失败:" + ex.Message }; } } /// /// 任务表应用模板信息 /// private void ApplyTemplateToTask(Dt_NjTask task, Dt_Template template, bool isNewTemplate, NjtakeDTO njtakeDTO) { if (isNewTemplate) //模板id是否有,默认为null { task.TakeName = njtakeDTO.takename; task.gongZhang = njtakeDTO.gongzhang; } else { task.TakeName = template.TakeName; task.gongZhang = template.gongZhang; } task.jiShuYuan = template.jiShuYuan; task.zhiJianYuan_DG = njtakeDTO.zhijianyuan_dg; task.zhiJianYuan_DQ = njtakeDTO.zhijianyuan_dq; task.zhiJianYuan_LC = njtakeDTO.zhijianyuan_lc; task.liJu_DG = njtakeDTO.liju_dg; task.liJu_DQ = njtakeDTO.liju_dq; task.liJu_LC = njtakeDTO.liju_lc; task.fuZhu_DG = njtakeDTO.fuzhu_dg; task.fuZhu_DQ = njtakeDTO.fuzhu_dq; task.fuZhu_LC = njtakeDTO.fuzhu_lc; } //不保存模板 public WebResponseContent Submit(NotempDTO notempDTO) { try { //先根据id判断是否有该任务 var task = BaseDal.QueryFirst(i => i.NJtaskID == notempDTO.Njtakeid); if (task == null) { return new WebResponseContent { Status = false, Message = "没有找到" }; } task.Taskstatus = 1;//已派工 task.TakeName = notempDTO.takename; task.jiShuYuan = notempDTO.jishuyuan; task.zhiJianYuan_DG = notempDTO.zhijianyuan_dg; task.zhiJianYuan_DQ = notempDTO.zhijianyuan_dq; task.zhiJianYuan_LC = notempDTO.zhijianyuan_lc; task.gongZhang = notempDTO.gongzhang; task.liJu_DG = notempDTO.liju_dg; task.liJu_DQ = notempDTO.liju_dq; task.liJu_LC = notempDTO.liju_lc; task.fuZhu_DG = notempDTO.fuzhu_dg; task.fuZhu_DQ = notempDTO.fuzhu_dq; task.fuZhu_LC = notempDTO.fuzhu_lc; task.dispatchTime = DateTime.Now; task.startTime = DateTime.Now; // 插入到任务历史表 var history = new Dt_NJtakeHistory { taskID = task.id, trainKind = task.trainKind, TakeName = task.TakeName, trainNum = task.trainNum, track = task.track, coachNum = task.coachNum, bogie = task.bogie, processDept = task.processDept, jiShuYuan = task.jiShuYuan, zhiJianYuan_LC = task.zhiJianYuan_LC, zhiJianYuan_DG = task.zhiJianYuan_DG, zhiJianYuan_DQ = task.zhiJianYuan_DQ, gongZhang = task.gongZhang, liJu_LC = task.liJu_LC, liJu_DG = task.liJu_DG, liJu_DQ = task.liJu_DQ, fuZhu_LC = task.fuZhu_LC, fuZhu_DQ = task.fuZhu_DQ, fuZhu_DG = task.fuZhu_DG, createTime = task.createTime, dispatchTime = task.dispatchTime, startTime = task.startTime, startTime_LC = task.startTime_LC, endTime_LC = task.endTime_LC, startTime_DG = task.startTime_DG, endTime_DG = task.endTime_DG, startTime_DQ = task.startTime_DQ, endTime_DQ = task.endTime_DQ, endTime = task.endTime, confirmTime_JS = task.confirmTime_JS, confirmTime_GZ = task.confirmTime_GZ, confirmTime_LC = task.confirmTime_LC, confirmTime_DG = task.confirmTime_DG, confirmTime_DQ = task.confirmTime_DQ }; List listp = new List(); // 定义任务拆解的组信息 var groups = new[] { new { Grouptype= "电气",Pustatus=0,Zhijianyuan = task.zhiJianYuan_DQ, Lijuzouyeyuan = task.liJu_DQ, Fuzyuan = task.fuZhu_DQ }, new { Grouptype = "机械",Pustatus=0, Zhijianyuan = task.zhiJianYuan_LC, Lijuzouyeyuan = task.liJu_LC, Fuzyuan = task.fuZhu_LC }, new { Grouptype = "地沟",Pustatus=0, Zhijianyuan = task.zhiJianYuan_DG, Lijuzouyeyuan = task.liJu_DG, Fuzyuan = task.fuZhu_DG } }; // 通过循环创建对象 foreach (var g in groups) { listp.Add(new Dt_Putake { Njtakeid = task.NJtaskID, takename = task.TakeName, jishuyuan = task.jiShuYuan, gonzhang = task.gongZhang, zhijianyuan = g.Zhijianyuan, lijuzouyeyuan = g.Lijuzouyeyuan, fuzyuan = g.Fuzyuan, Grouptype = g.Grouptype, Pustatus = g.Pustatus, Dispatchtime = task.dispatchTime, }); } _unitOfWorkManage.BeginTran();//开启事务(在增删改查前,业务后) BaseDal.UpdateData(task);//将模板表中修改的插入进任务表中 // db.Insertable(history).ExecuteCommand(); _nJtakeHistoryRepository.AddData(history);// 插入历史记录 _putakeRepository.AddData(listp);//下发三条任务分解表数据 // return new WebResponseContent { Status = true, Message = "下发了任务并保存了模板"}; _unitOfWorkManage.CommitTran();//提交事务(增删改查后) return new WebResponseContent { Status = true, Data = task }; } catch (Exception ex) { //db.Ado.RollbackTran(); // 回滚事务 _unitOfWorkManage.RollbackTran(); return new WebResponseContent { Status = false, Message = "添加失败:" + ex.Message }; } } //添加信息 public WebResponseContent AddNjtake(AddNjtDTO addNjtDTO) { try { #region 自定义命名给Njtaskid string CustomizeID = ""; if (addNjtDTO.NJtaskID == 0) { // 获取今天的日期部分,如 "K20250306" string todayPrefix = $"K{DateTime.Now:yyyyMMdd}"; // 查询数据库,找出当天最大的 NJtaskID var lastTask = BaseDal.QueryData(i => i.NJtaskID.StartsWith(todayPrefix)) .OrderByDescending(i => i.NJtaskID) .FirstOrDefault(); int nextNumber = 1; // 默认编号 if (lastTask != null) { // 获取后两位分钟编号 string lastNumberPart = lastTask.NJtaskID.Substring(6, 2); if (int.TryParse(lastNumberPart, out int lastNumber)) { nextNumber = lastNumber + 1; } } // 生成 NJtaskID,例如 KH0306001, KH0306002... CustomizeID = $"{todayPrefix}{nextNumber:D3}";//D3表示 3位数,不足补0 } else { CustomizeID = addNjtDTO.NJtaskID.ToString(); } if (addNjtDTO.Creater == "") { addNjtDTO.Creater = "admin"; } #endregion var addnj = new Dt_NjTask() { NJtaskID = CustomizeID, trainKind = addNjtDTO.trainKind, trainNum = addNjtDTO.trainNum, track = addNjtDTO.track, coachNum = addNjtDTO.coachNum, bogie = addNjtDTO.bogie, processDept = addNjtDTO.processDept, jiShuYuan = addNjtDTO.jiShuYuan, zhiJianYuan_LC = addNjtDTO.zhiJianYuan_LC, zhiJianYuan_DG = addNjtDTO.zhiJianYuan_DG, zhiJianYuan_DQ = addNjtDTO.zhiJianYuan_DQ, gongZhang = addNjtDTO.gongZhang, liJu_LC = addNjtDTO.liJu_LC, liJu_DG = addNjtDTO.liJu_DG, liJu_DQ = addNjtDTO.liJu_DQ, fuZhu_LC = addNjtDTO.fuZhu_LC, fuZhu_DG = addNjtDTO.fuZhu_DG, fuZhu_DQ = addNjtDTO.fuZhu_DQ, Taskstatus = 0, createTime = DateTime.Now, }; BaseDal.AddData(addnj); return new WebResponseContent { Status = true, Message = "成功", Code = 200, Data = addnj }; } catch (Exception ex) { return new WebResponseContent { Status = false, Message = "失败" + ex.Message, Code = 400 }; } } //查看详情 返回整个表的数据(更具id) public WebResponseContent GetNjdetail(string njtaskID) { try { var datatail = BaseDal.QueryData(x => x.NJtaskID == njtaskID).FirstOrDefault(); if (datatail == null) { return new WebResponseContent { Status = false, Message = "没有找到" }; } return new WebResponseContent { Status = true, Data = datatail }; } catch (Exception ex) { return new WebResponseContent() { Status = false, Message = "失败" + ex.Message }; } } //根据id更新 public WebResponseContent PuNjtake(PutNjtDTO putNjtDTO) { try { var putake = BaseDal.QueryData(x => x.id == putNjtDTO.id).FirstOrDefault(); if (putake == null) { return new WebResponseContent { Status = false, Message = "没有找到" }; } putake.trainKind = putNjtDTO.trainkind; putake.trainNum = putNjtDTO.trainNum; putake.track = putNjtDTO.track; putake.coachNum = putake.coachNum; putake.bogie = putNjtDTO.bogie; putake.processDept = putake.processDept; BaseDal.UpdateData(putake); return new WebResponseContent { Status = true, Data = putake }; } catch (Exception ex) { return new WebResponseContent { Status = false, Message = "查询失败:" + ex.Message }; } } } }