public ActionResult Save(LotTerminalViewModel model) { MethodReturnResult result = new MethodReturnResult(); try { TerminalParameter p = new TerminalParameter() { Creator = User.Identity.Name, OperateComputer = Request.UserHostAddress, Operator = User.Identity.Name, ReasonCodeCategoryName = model.ReasonCodeCategoryName, ReasonCodeName = model.ReasonCodeName, Remark = model.Description, LotNumbers = new List <string>() }; char splitChar = ','; //获取批次号值。 string[] lotNumbers = Request["LotNumber"].ToUpper().Split(splitChar); p.LotNumbers = lotNumbers.ToList(); for (int i = 0; i < p.LotNumbers.Count; i++) { string lotNumber = p.LotNumbers[i]; result = GetLot(lotNumber); if (result.Code > 0) { return(Json(result)); } } //终止批次。 using (LotTerminalServiceClient client = new LotTerminalServiceClient()) { result = client.Terminal(p); } if (result.Code == 0) { result.Message = string.Format("结束 {0} 成功。", model.LotNumber); } } catch (Exception ex) { result.Code = 1000; result.Message = ex.Message; result.Detail = ex.ToString(); } // 如果我们进行到这一步时某个地方出错,则重新显示表单 return(Json(result)); }
public ViewResult Parameters(int id, Terminal term) { _repository.UserName = User?.Identity?.Name; var groups = DbHelper.GetUserGroups(_repository.UserName, Constants.RightReadName); var terminal = _repository.GetTerminal(id); if (groups == null || terminal == null || (groups.Any() && groups.All(g => g.Id != terminal.IdGroup))) { return(View("Unauthorize")); } var result = false; var toUpdate = new Dictionary <Tuple <int, int>, TerminalParameter>(); foreach (var k in Request.Form.AllKeys) { if (k.StartsWith("all")) { var keyParts = k.Split(new[] { '_' }, StringSplitOptions.RemoveEmptyEntries); int idTerminal = int.Parse(keyParts[1]); int idParameter = int.Parse(keyParts[2]); var key = new Tuple <int, int>(idTerminal, idParameter); int idGroup = int.Parse(keyParts[3]); if (toUpdate.ContainsKey(key)) { var newVal = toUpdate[key]; newVal.ToAllGroups = true; toUpdate[key] = newVal; } else { var newPar = new TerminalParameter { IdTerminal = idTerminal, IdParameter = idParameter, IdGroupTerminal = idGroup, ToAllGroups = true, }; toUpdate.Add(key, newPar); } } else if (k.StartsWith("val")) { var keyParts = k.Split(new[] { '_' }, StringSplitOptions.RemoveEmptyEntries); int idTerminal = int.Parse(keyParts[1]); int idParameter = int.Parse(keyParts[2]); var key = new Tuple <int, int>(idTerminal, idParameter); int idGroup = int.Parse(keyParts[3]); if (toUpdate.ContainsKey(key)) { var newVal = toUpdate[key]; newVal.Value = Request.Form[k]; toUpdate[key] = newVal; } else { var newPar = new TerminalParameter { IdTerminal = idTerminal, IdParameter = idParameter, IdGroupTerminal = idGroup, Value = Request.Form[k] }; toUpdate.Add(key, newPar); } } } if (toUpdate.Values.Any(par => par.ToAllGroups)) { var terminal1 = terminal; var terminalsToUpd = _repository.Terminals.Where(t => t.IdGroup == terminal1.IdGroup && t.Id != id); var srcParams = toUpdate.Values.Where(par => par.ToAllGroups).ToArray(); foreach (var termToUpd in terminalsToUpd) { foreach (var parToUpd in srcParams.Select(tp => new TerminalParameter { IdParameter = tp.IdParameter, IdTerminal = termToUpd.Id, IdGroupTerminal = termToUpd.IdGroup, Value = tp.Value, ToAllGroups = tp.ToAllGroups, }) ) { toUpdate.Add(new Tuple <int, int>(parToUpd.IdTerminal, parToUpd.IdParameter), parToUpd); } } result = DbHelper.UpdateTerminalParameters(toUpdate.Values.Where(par => par.ToAllGroups), _repository.UserName); } else { result = true; } if (result && toUpdate.Values.Any(par => !par.ToAllGroups)) { var terminal1 = terminal; result = DbHelper.UpdateTerminalParameters( toUpdate.Values.Where(toUpdadePar => /*!string.IsNullOrWhiteSpace(toUpdadePar.Value) &&*/ !toUpdadePar.ToAllGroups && terminal1?.Parameters?.FirstOrDefault( termParam => termParam.Id == toUpdadePar.IdParameter)?.Value != toUpdadePar.Value) , _repository.UserName); } if (!result) { ModelState.AddModelError("Db", "Параметры терминала не были изменены! Повторите попытку или свяжитесь с администратором."); } terminal = _repository.GetTerminal(id); var parameters = DbHelper.GetAllParameters(terminal.IdGroup); var terminalsModel = new TerminalParametersViewModel { Parameters = parameters.Select(p => new Parameter { Id = p.Id, TId = terminal?.Id ?? 0,//terminal?.Parameters?.FirstOrDefault(tp => tp.Id == p.Id)?.TId ?? 0, Name = p.Name, Path = p.Path, Value = terminal?.Parameters?.FirstOrDefault(tp => tp.Id == p.Id)?.Value, SaveTime = terminal?.Parameters?.FirstOrDefault(tp => tp.Id == p.Id)?.SaveTime ?? DateTime.MinValue, LastEditTime = terminal?.Parameters?.FirstOrDefault(tp => tp.Id == p.Id)?.LastEditTime ?? DateTime.MinValue, Description = p.Description }), Terminal = new ViewTerminal(terminal) { GroupsIdsString = terminal.IdGroup.ToString(), GroupsNamesString = terminal.Group?.Name } }; ViewBag.CanEdit = DbHelper.UserIsAdmin(User?.Identity?.Name) || DbHelper.UserInRole(User?.Identity?.Name, Constants.RightWriteName, terminal.IdGroup) || DbHelper.UserInRole(User?.Identity?.Name, Constants.RightWriteName, null); return(View(terminalsModel)); }