Beispiel #1
0
        /// <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));
            }
        }