public Result PutSet([FromBody] WarningSetWithItems set) { var oldSet = WarningSetHelper.Instance.Get <WarningSet>(set.Id); if (oldSet == null) { return(Result.GenError <Result>(Error.WarningSetNotExist)); } if (set.Name.IsNullOrEmpty()) { return(Result.GenError <Result>(Error.WarningSetNotEmpty)); } if (set.DataType == WarningDataType.生产数据 && set.StepId == set.BindId) { return(Result.GenError <Result>(Error.WarningSetStepBindDuplicate)); } var names = new List <string> { set.Name }; var ids = new List <int> { set.Id }; if (WarningSetHelper.GetHaveSame(1, names, ids)) { return(Result.GenError <Result>(Error.WarningSetIsExist)); } var createUserId = Request.GetIdentityInformation(); var markedDateTime = DateTime.Now; if (set.Items != null) { if (set.Items.Any()) { switch (set.DataType) { case WarningDataType.设备数据: set.Items = set.Items.Where(x => x.DictionaryId != 0).ToList(); foreach (var item in set.Items) { item.Item = ""; } break; case WarningDataType.生产数据: set.Items = set.Items.Where(x => x.ItemType != WarningItemType.Default).ToList(); foreach (var item in set.Items) { if (HWarningHelper.生产数据单设备加工信息字段.All(x => x.Item2 != item.ItemType)) { item.DeviceIds = set.DeviceIds; } } break; case WarningDataType.故障数据: set.Items = set.Items; break; case WarningDataType.流程卡数据: set.Items = set.Items.Where(x => x.ItemType != WarningItemType.Default).ToList(); break; default: set.Items.Clear(); break; } //if (set.Items.Any(x => !x.ValidDataType())) //{ // return Result.GenError<Result>(Error.WarningSetItemDataTypeError); //} foreach (var item in set.Items) { item.MarkedDateTime = markedDateTime; item.SetId = set.Id; } if (set.Items.Any(x => x.ItemType == WarningItemType.SpecifyStepTimeOut && x.StepId == 0)) { return(Result.GenError <Result>(Error.WarningSetItemFlowCardStepError)); } if (set.Items.Any(x => !x.ValidFrequency())) { return(Result.GenError <Result>(Error.WarningSetItemFrequencyError)); } if (set.Items.Any(x => !x.ValidCondition())) { return(Result.GenError <Result>(Error.WarningSetItemConditionError)); } var oldWarningSetItems = WarningSetItemHelper.GetWarningSetItemsBySetId(set.Id); var delItems = oldWarningSetItems.Where(x => set.Items.All(y => y.Id != x.Id)); if (delItems.Any()) { WarningSetItemHelper.Instance.Delete(delItems.Select(x => x.Id)); } var updateItems = set.Items.Where(x => x.Id != 0); if (updateItems.Any()) { var uIds = new List <int>(); foreach (var item in updateItems) { var oldItem = oldWarningSetItems.FirstOrDefault(x => x.Id == item.Id); if (oldItem != null && ClassExtension.HaveChange(oldItem, item)) { if (HWarningHelper.生产数据单设备加工信息字段.All(x => x.Item2 != item.ItemType)) { item.DeviceIds = set.DeviceIds; } uIds.Add(item.Id); } } WarningSetItemHelper.Instance.Update(updateItems.Where(x => uIds.Contains(x.Id))); } var newItems = set.Items.Where(x => x.Id == 0); if (newItems.Any()) { foreach (var item in newItems) { item.CreateUserId = createUserId; } WarningSetItemHelper.Instance.Add(newItems); } } else { WarningSetItemHelper.Instance.DeleteFromParent(set.Id); } } if (ClassExtension.HaveChange(oldSet, set)) { set.MarkedDateTime = markedDateTime; WarningSetHelper.Instance.Update(set); } HWarningHelper.UpdateConfig(); return(Result.GenError <Result>(Error.Success)); }
public DataResult GetSetItem([FromQuery] int sId, WarningDataType dataType, bool isNew = false) { var result = new DataResult(); WarningSetWithItems set = null; if (!isNew) { set = WarningSetHelper.Instance.Get <WarningSetWithItems>(sId); if (set == null) { return(Result.GenError <DataResult>(Error.WarningSetNotExist)); } } var scriptId = -1; var sql = ""; switch (dataType) { case WarningDataType.设备数据: sql = "SELECT ScriptId, VariableName Item, PointerAddress, VariableTypeId, Id DictionaryId FROM `data_name_dictionary` WHERE ScriptId = @sId AND MarkedDelete = 0 ORDER BY VariableTypeId, PointerAddress;"; if (!isNew) { scriptId = set.ScriptId; sql = "SELECT a.VariableName Item, a.PointerAddress, a.VariableTypeId, b.*, a.Id DictionaryId " + "FROM (SELECT * FROM `data_name_dictionary` WHERE ScriptId = @scriptId AND MarkedDelete = 0) a " + "LEFT JOIN (SELECT * FROM `warning_set_item` WHERE SetId = @setId AND MarkedDelete = 0) b " + "ON a.Id = b.DictionaryId ORDER BY a.VariableTypeId, a.PointerAddress;"; } result.datas.AddRange(ServerConfig.ApiDb.Query <WarningSetItemDetail>(sql, new { sId, scriptId })); break; case WarningDataType.生产数据: if (isNew) { result.datas.AddRange(HWarningHelper.生产数据字段汇总.Select(x => new WarningSetItem { Item = x.Item1, ItemType = x.Item2 })); } else { var d = WarningSetItemHelper.GetWarningSetItemsBySetId(sId).ToList(); foreach (var val in HWarningHelper.生产数据字段汇总) { if (d.All(x => x.Item != val.Item1)) { result.datas.Add(new WarningSetItem { Item = val.Item1, ItemType = val.Item2 }); } else { result.datas.Add(d.First(x => x.Item == val.Item1)); } } } break; case WarningDataType.故障数据: //sql = "SELECT * FROM `warning_set_item` WHERE MarkedDelete = 0 AND SetId = @setId;"; break; case WarningDataType.流程卡数据: if (isNew) { result.datas.AddRange(HWarningHelper.流程卡数据字段汇总.Select(x => new WarningSetItem { Item = x.Item1, ItemType = x.Item2, IsRepeat = x.Item3, IsConfig = true })); } else { var d = WarningSetItemHelper.GetWarningSetItemsBySetId(sId).ToList(); foreach (var val in HWarningHelper.流程卡数据字段汇总) { if (d.All(x => x.Item != val.Item1)) { d.Add(new WarningSetItem { Item = val.Item1, ItemType = val.Item2, IsRepeat = val.Item3, IsConfig = true }); } else { foreach (var dd in d.Where(x => x.ItemType == val.Item2)) { dd.Item = val.Item1; dd.IsRepeat = val.Item3; } } } d = d.OrderBy(x => x.IsRepeat).ThenBy(x => x.ItemType).ThenBy(x => x.Id).ToList(); result.datas.AddRange(d); } break; } return(result); }