/// <summary> /// /// </summary> /// <param name="model"></param> /// <param name="auditUser"></param> /// <param name="db"></param> /// <returns></returns> public static ApplyAuditVdto <AuditStreamModel> ToAuditVDTO <T>(this AuditApplyViewModel model, User auditUser, IQueryable <T> db) where T : IHasGuidId, IAuditable, new() { var b = new ApplyAuditVdto <AuditStreamModel>() { AuditUser = auditUser, List = model.Data.List.Select(d => new ApplyAuditNodeVdto <AuditStreamModel>() { Action = d.Action, AuditItem = db.FirstOrDefault(i => i.Id == d.Id).ToModel(), Remark = d.Remark }) }; return(b); }
public IActionResult Audit([FromBody] AuditApplyViewModel model) { var auditUser = currentUserService.CurrentUser; if (model.Auth?.AuthByUserID != null && auditUser?.Id != model.Auth?.AuthByUserID) { if (model.Auth.Verify(googleAuthService, currentUserService.CurrentUser?.Id)) { auditUser = usersService.GetById(model.Auth.AuthByUserID); } else { return(new JsonResult(ActionStatusMessage.Account.Auth.AuthCode.Invalid)); } } try { var applyStrList = new StringBuilder(); foreach (var a in model.Data.List) { applyStrList.Append(a.Id).Append(':').Append(a.Action).Append(','); } var ua = userActionServices.Log(DAL.Entities.UserInfo.UserOperation.AuditApply, auditUser.Id, $"授权审批申请:{applyStrList}", true, ActionRank.Warning); model.Data.List = model.Data.List.Distinct(new CompareAudit()); var targets = model.Data.List.Select(d => d.Id); var raw_items = context.AppliesIndayDb.Where(i => targets.Contains(i.Id)); var items = model.ToAuditVDTO(auditUser, raw_items); var results = auditStreamServices.Audit(ref items); var result_list = items.List.Select(i => i.AuditItem.ToModel(raw_items.FirstOrDefault(a => a.Id == i.AuditItem.Id))).ToList(); context.AppliesInday.UpdateRange(result_list); context.SaveChanges(); int count = 0; return(new JsonResult(new ApplyAuditResponseStatusViewModel() { Data = results.Select(r => new ApplyAuditResponseStatusDataModel(model.Data.List.ElementAt(count++).Id, r)) })); } catch (ActionStatusMessageException e) { return(new JsonResult(e.Status)); } }