using System; using System.Linq; using Infrastructure; using OpenAuth.App.ViewModel; using OpenAuth.Domain; using OpenAuth.Domain.Interface; namespace OpenAuth.App { public class CommonApplyApp { private IRepository _repository; private IUnitWork _unitWork; public CommonApplyApp(IRepository repository, IUnitWork unitWork) { _repository = repository; _unitWork = unitWork; } public void AddOrUpdate(CommonApply model) { if (model.Id == Guid.Empty) { model.ApplyTime = DateTime.Now; _repository.Add(model); } else { _repository.Update(u => u.Id == model.Id, u => new CommonApply { UserId = model.UserId, Name = model.Name, Comment = model.Comment }); } } /// /// 更改流程状态 /// public void ChangeState(Guid id,string state, string statename) { _repository.Update(u =>u.Id == id, u =>new CommonApply { State = state, StateName = statename }); } public CommonApply Get(Guid value) { return _repository.FindSingle(u =>u.Id == value); } /// /// 加载流程处理 /// /// 用户ID /// inbox:待办事项/outbox:已办事项 public GridData Load(Guid userid, string type, int pageCurrent, int pageSize) { var result = new GridData { pageCurrent = pageCurrent }; if (type == "inbox") //待办事项 { var inboxes = GetInboxProcessIds(userid); result.total = _unitWork.Find(u => inboxes.Contains(u.Id)).Count(); result.list = _unitWork.Find(pageCurrent, pageSize, "Sort descending",u => inboxes.Contains(u.Id)).ToList(); } else if (type == "outbox") //已办事项 { IQueryable outboxes = GetOutboxProcessIds(userid); result.total = _unitWork.Find(u => outboxes.Contains(u.Id)).Count(); result.list = _unitWork.Find(pageCurrent, pageSize, "Sort descending", u => outboxes.Contains(u.Id)).ToList(); } else //我的流程 { result.total = _unitWork.Find(u => u.UserId == userid).Count(); result.list = _unitWork.Find(pageCurrent, pageSize, "Sort descending", u => u.UserId == userid).ToList(); } return result; } private IQueryable GetOutboxProcessIds(Guid userid) { return _unitWork.Find(u => u.UserId == userid).Select(u => u.ApplyId); } private IQueryable GetInboxProcessIds(Guid userid) { return _unitWork.Find(u =>u.Key =="ProcessUser" &&(userid == Guid.Empty || u.SecondId == userid)).Select(u =>u.FirstId); } public void Del(Guid id) { _repository.Delete(u =>u.Id == id); } } }