public bool ResumeCase(string caseId, string taskName, object value)
 {
     using (var connection = new SqlConnection(_connectionString))
     {
         try
         {
             connection.Open();
             SqlDataReader reader =
                 connection.Select(BookmarkTableName,
                                   new KeyValuePair<string, object>(CaseIdColumnName, caseId));
             using (reader)
             {
                 reader.Read();
                 Guid instanceId = Guid.Parse((string) reader[WorkflowinstanceidColumnName]);
                 var resetEvent = new ManualResetEvent(false);
                 WorkflowApplication wfApp = GetWorkflowApplication(new CaseWorkflow(), caseId, resetEvent);
                 lock (this)
                 {
                     wfApp.Load(instanceId);
                     BookmarkResumptionResult result = wfApp.ResumeBookmark(taskName, value);
                     resetEvent.WaitOne(TimeSpan.FromMinutes(1));
                     return result == BookmarkResumptionResult.Success;
                 }
             }
         }
         catch (Exception e)
         {
             return false;
         }
     }
 }
 public IEnumerable<User> GetUsersByRole(Role role)
 {
     using (var connection = new SqlConnection(_connectionString))
     {
         connection.Open();
         var users = new List<User>();
         var reader = connection.Select(_tableName, new KeyValuePair<string, object>("Role", role.ToString()));
         while (reader.Read())
             users.Add(ExtractUser(reader));
         reader.Close();
         return users;
     }
 }
 public Case? GetCaseById(string caseId)
 {
     using (var connection = new SqlConnection(_connectionString))
     {
         connection.Open();
         SqlDataReader reader = connection.Select(CaseTableName,
                                                  new KeyValuePair<string, object>("编号", caseId));
         using (reader)
         {
             if (reader.Read())
                 return ExtractCase(reader);
             return null;
         }
     }
 }
 public IEnumerable<Customer> GetAllCustomers()
 {
     using (var connection = new SqlConnection(_connectionString))
     {
         connection.Open();
         List<Customer> customers;
         using (SqlDataReader reader = connection.Select(CustomerTableName))
         {
             customers = new List<Customer>();
             while (reader.Read())
                 customers.Add(ExtractCustomer(reader));
         }
         return customers;
     }
 }
 public Customer? GetCustomer(string 客户号)
 {
     using (var connection = new SqlConnection(_connectionString))
     {
         connection.Open();
         SqlDataReader reader = connection.Select(CustomerTableName,
                                                  new KeyValuePair<string, object>("客户号", 客户号));
         using (reader)
         {
             if (reader.Read())
                 return ExtractCustomer(reader);
             return null;
         }
     }
 }
 public Tuple<LoginResult, User> Login(string userName, string password)
 {
     using (var connection = new SqlConnection(_connectionString))
     {
         connection.Open();
         LoginResult result;
         User user = null;
         SqlDataReader reader = connection.Select(_tableName, new KeyValuePair<string, object>("UserName", userName));
         if (reader.Read())
             if ((string) reader["Password"] != password)
                 result = LoginResult.PasswordNotMatch;
             else
             {
                 result = LoginResult.Successful;
                 user = ExtractUser(reader);
             }
         else
             result = LoginResult.UserNotExist;
         return Tuple.Create(result, user);
     }
 }
 public IEnumerable<CaseDoc> GetDocsOf(string 案件编号)
 {
     using (var connection = new SqlConnection(_connectionString))
     {
         connection.Open();
         SqlDataReader reader = connection.Select(CaseDocTableName,
                                                  new KeyValuePair<string, object>("案件编号", 案件编号));
         List<CaseDoc> caseDocs;
         using (reader)
         {
             caseDocs = new List<CaseDoc>();
             while (reader.Read())
                 caseDocs.Add(new CaseDoc
                                  {
                                      FileName = (string) reader["文件名"],
                                      UploadUserName = (string) reader["创建人"],
                                      UploadDateTime = (DateTime) reader["创建日期"],
                                      FilePath = (string) reader["文件路径"]
                                  });
         }
         return caseDocs;
     }
 }
 public IEnumerable<CaseMessage> GetMessagesOf(string 案件编号)
 {
     using (var connection = new SqlConnection(_connectionString))
     {
         connection.Open();
         SqlDataReader reader = connection.Select(TableName, new KeyValuePair<string, object>("案件编号", 案件编号));
         List<CaseMessage> caseMessages;
         using (reader)
         {
             caseMessages = new List<CaseMessage>();
             while (reader.Read())
             {
                 caseMessages.Add(new CaseMessage
                                      {
                                          案件编号 = (string) reader["案件编号"],
                                          Content = (string) reader["Content"],
                                          SenderUsername = (string) reader["SenderName"]
                                      });
             }
         }
         return caseMessages;
     }
 }
        public IList<Activity> GetActivities()
        {
            IList<Activity> activities;
            IList<ActivityActivity> activityActivities;

            using (var conn = new SqlConnection(ConnectionString))
            {
                activities = conn.Select<Activity>().ToList();
                activityActivities = conn.Select<ActivityActivity>().ToList();
            }

            var groups = activityActivities.OrderBy(a => a.ActivityId).GroupBy(a => a.ParentActivityId);
            foreach (var group in groups)
            {
                var parentActivity = activities.SingleOrDefault(a => a.Id == group.Key);
                if (parentActivity == null)
                {
                    continue;
                }

                foreach (var child in group)
                {
                    var childActivity = activities.SingleOrDefault(a => a.Id == child.ActivityId);
                    if (childActivity != null)
                    {
                        parentActivity.Activities.Add(childActivity);
                    }
                }
            }

            return activities;
        }
 public Inventor? GetInventor(string 身份证号)
 {
     using (var connection = new SqlConnection(_connectionString))
     {
         connection.Open();
         SqlDataReader reader = connection.Select(InventorTableName,
                                                  new KeyValuePair<string, object>("身份证号", 身份证号));
         using (reader)
         {
             if (reader.Read())
                 return ExtractInventor(reader);
             return null;
         }
     }
 }
 public IEnumerable<Inventor> GetAllInventors()
 {
     using (var connection = new SqlConnection(_connectionString))
     {
         connection.Open();
         var inventors = new List<Inventor>();
         using (SqlDataReader sqlDataReader = connection.Select(InventorTableName))
             while (sqlDataReader.Read())
                 inventors.Add(ExtractInventor(sqlDataReader));
         return inventors;
     }
 }
 public Applicant? GetApplicant(string 证件号)
 {
     using (var connection = new SqlConnection(_connectionString))
     {
         connection.Open();
         SqlDataReader reader = connection.Select(ApplicantTableName,
                                                  new KeyValuePair<string, object>("证件号", 证件号));
         using (reader)
         {
             if (reader.Read())
                 return ExtractApplicant(reader);
             return null;
         }
     }
 }
 public IEnumerable<Applicant> GetAllApplicants()
 {
     using (var connection = new SqlConnection(_connectionString))
     {
         connection.Open();
         var applicants = new List<Applicant>();
         using (SqlDataReader reader = connection.Select(ApplicantTableName))
             while (reader.Read())
                 applicants.Add(ExtractApplicant(reader));
         return applicants;
     }
 }
 public IEnumerable<CustomerContact> GetCustomerContacts(string 客户号)
 {
     using (var connection = new SqlConnection(_connectionString))
     {
         connection.Open();
         var customerContacts = new List<CustomerContact>();
         SqlDataReader reader = connection.Select(CustomerContactTableName,
                                                  new KeyValuePair<string, object>("客户号", 客户号));
         using (reader)
         {
             while (reader.Read())
                 customerContacts.Add(ExtractCustomerContact(reader));
         }
         return customerContacts;
     }
 }
        public IList<Role> GetRoles(IList<Activity> activities)
        {
            IList<Role> roles;
            IList<RoleRole> roleRoles;
            IList<RoleActivity> roleActivities;

            using (var conn = new SqlConnection(ConnectionString))
            {
                roles = conn.Select<Role>().ToList();
                roleRoles = conn.Select<RoleRole>().ToList();
                roleActivities = conn.Select<RoleActivity>().ToList();
            }

            var roleActivityGroups = roleActivities.OrderBy(r => r.ActivityId).GroupBy(r => r.RoleId);
            foreach (var group in roleActivityGroups)
            {
                var role = roles.SingleOrDefault(r => r.Id.Equals(group.Key));
                if (role == null)
                {
                    continue;
                }

                foreach (var activity in group)
                {
                    var childActivity = activities.SingleOrDefault(a => a.Id == activity.ActivityId);
                    if (childActivity != null)
                    {
                        role.Activities.Add(childActivity);
                    }
                }
            }

            var groups = roleRoles.OrderBy(r => r.RoleId).GroupBy(r => r.ParentRoleId);
            foreach (var group in groups)
            {
                var parentRole = roles.SingleOrDefault(r => r.Id == group.Key);
                if (parentRole == null)
                {
                    continue;
                }

                foreach (var child in group)
                {
                    var childRole = roles.SingleOrDefault(r => r.Id == child.RoleId);
                    if (childRole != null)
                    {
                        parentRole.Roles.Add(childRole);
                    }
                }
            }

            return roles;
        }
        public IList<UserAuthorisation> GetUserAuthorisations(IList<Role> roles)
        {
            IList<UserAuthorisation> userAuthorisations;
            IList<UserRole> userRoles;

            using (var conn = new SqlConnection(ConnectionString))
            {
                userAuthorisations = conn.Select<UserAuthorisation>().ToList();
                userRoles = conn.Select<UserRole>().ToList();
            }

            var groups = userRoles.OrderBy(r => r.RoleId).GroupBy(r => r.Id);
            foreach (var group in groups)
            {
                var userAuthorisation = userAuthorisations.SingleOrDefault(u => u.Id == group.Key);
                if (userAuthorisation == null)
                {
                    continue;
                }

                foreach (var child in group)
                {
                    var role = roles.SingleOrDefault(r => r.Id == child.RoleId);
                    if (role != null)
                    {
                        userAuthorisation.Roles.Add(role);
                    }
                }
            }

            return userAuthorisations;
        }
 private IEnumerable<string> GetAllCaseIdsPendingAt(string taskName)
 {
     using (var connection = new SqlConnection(_connectionString))
     {
         connection.Open();
         var caseIds = new List<string>();
         SqlDataReader reader =
             connection.Select(BookmarkTableName,
                               new KeyValuePair<string, object>(BookmarkNameColumnName,
                                                                taskName));
         using (reader)
             while (reader.Read())
                 caseIds.Add(reader[CaseIdColumnName].ToString());
         return caseIds;
     }
 }