/// <summary> /// 修改 /// </summary> /// <param name="model"></param> /// <returns></returns> public override MessageRecorder <bool> Update(Project model) { var r = new MessageRecorder <bool>(); model.CreatedAt = Now; model.CreatedBy = AccountNo; string oldKey; using (var conn = ConnectionManager.Open()) { var trans = conn.BeginTransaction(); var query = new Criteria <Project>() .Where(m => m.No, Op.Eq, model.No) .Or(m => m.Name, Op.Eq, model.Name) .And(m => m.Id, Op.NotEq, model.Id); if (conn.Exists(query)) { trans.Rollback(); return(r.Error("编号或者名称重复")); } var obj = new Criteria <Project>() .Where(m => m.Id, Op.Eq, model.Id) .Select(m => m.AddrPic); oldKey = conn.ExecuteScalarEx <string>(obj.ToSelectSql()); var effectedCount = conn.Update(model, trans); if (!effectedCount) { trans.Rollback(); return(r.Error("保存失败")); } foreach (var projectInfo in model.ProjectInfos) { projectInfo.UpdatedAt = Now; projectInfo.UpdatedBy = AccountNo; projectInfo.DpNo = model.No; } var effectedCount2 = conn.Update(model.ProjectInfos, trans); if (!effectedCount2) { trans.Rollback(); return(r.Error("保存失败")); } trans.Commit(); } if (!Equals(oldKey, model.AddrPic)) { r.Append(AccessoryService.DeleteObject(oldKey)); r.Append(AccessoryService.ClearExpiration(model.AddrPic)); } return(r.SetValue(!r.HasError)); }
/// <summary> /// 添加 /// </summary> /// <param name="model"></param> /// <returns></returns> public override MessageRecorder <bool> Create(DevRoom model) { var r = new MessageRecorder <bool>(); model.CreatedAt = Now; model.CreatedBy = AccountNo; using (var conn = ConnectionManager.Open()) { var trans = conn.BeginTransaction(); var query = new Criteria <DevRoom>() .Where(m => m.No, Op.Eq, model.No) .Or(m => m.Name, Op.Eq, model.Name) .Desc(m => m.No); if (conn.Exists(query)) { trans.Rollback(); return(r.Error("保存失败")); } var effectedCount = conn.Insert(model, trans); if (effectedCount == -1) { trans.Rollback(); return(r.Error("保存失败")); } trans.Commit(); } r.Append(AccessoryService.ClearExpiration(model.Pic)); return(r.SetValue(!r.HasError)); }
public MessageRecorder <bool> Delete(long[] ids) { var mr = new MessageRecorder <bool>(); using (var conn = ConnectionManager.Open()) { var trans = conn.BeginTransaction(); var query = new Criteria <Account>() .Where(m => m.Id, Op.In, ids) .And("`no` NOT IN (SELECT `AccountNo` FROM `base_account_role_ref` WHERE `RoleNo` NOT IN('BranchAdmin', 'BranchStaff'))"); var models = conn.Query(query); var isOk = models.All(m => conn.Delete(m, trans)); if (isOk) { trans.Commit(); foreach (var model in models) { mr.Append(AccessoryService.DeleteObject(model.Photo)); } mr.SetValue(!mr.HasError); } else { trans.Rollback(); } return(mr); } }
public MessageRecorder <Account> Auth(string username, string password) { var r = new MessageRecorder <Account>(); if (string.IsNullOrEmpty(username)) { return(r.Error("请输入账户名")); } if (string.IsNullOrEmpty(password)) { return(r.Error("请输入密码")); } var account = GetAll().FirstOrDefault(m => m.ValidNos.Contains(username)); if (account == null) { return(r.Error("账户名或者密码不匹配")); } if (!account.AuthPassword(password)) { account.ErrLoginCount++; account.ErrLoginAt = Now; r.Append(Update(account)); return(r.Error("密码不正确")); } account.LastLoginAt = Now; account.ErrLoginCount = 0; r.Append(UpdateLoginInfo(account)); var model = GetAccount(account.No); return(r.SetValue(model)); }
/// <summary> /// 上传附件 /// </summary> /// <param name="request">HttpRequest</param> /// <param name="inputName">获取指定Input控件的文件</param> /// <returns>上传结果信息</returns> public static MessageRecorder <IList <string> > Upload( HttpRequestBase request, string inputName = null) { var mr = new MessageRecorder <IList <string> > { Value = new List <string>() }; var service = new AliyunOssService(); for (var i = 0; i < request.Files.Count; i++) { var upload = request.Files.AllKeys[i]; //如果指定了Input名称,则寻找对应的Input执行上传操作 if (Equals(upload, inputName)) { continue; } var file = request.Files[i]; if (file == null) { continue; } if (file.ContentLength <= 0) { continue; } // Uploaded file // Use the following properties to get file's name, size and MIMEType //int fileSize = file.ContentLength; //string fileName = file.FileName; //string mimeType = file.ContentType; var metadata = new ObjectMetadata { ExpirationTime = DateTime.Now.AddDays(1), ContentLength = file.InputStream.Length, ContentType = file.ContentType, ContentDisposition = file.FileName }; var key = Guid.NewGuid().ToString("N"); var mr2 = service.PutObject(key, file.InputStream, metadata); mr.Append(mr2); mr.Value.Add(key); } return(mr); }
/// <summary> /// 删除文件 /// </summary> /// <param name="keys"></param> /// <returns></returns> public static MessageRecorder <bool> Remove(IList <string> keys) { var mr = new MessageRecorder <bool>(); if (keys.IsNullOrEmpty()) { return(mr); } var service = new AliyunOssService(); foreach (var key in keys) { mr.Append(service.DeleteObject(key)); } return(mr); }
/// <summary> /// 修改 /// </summary> /// <param name="model"></param> /// <returns></returns> public override MessageRecorder <bool> Update(Account model) { var r = new MessageRecorder <bool>(); model.UpdatedAt = Now; model.UpdatedBy = AccountNo; var validNos = model.ValidNos; if (validNos.IsNullOrEmpty()) { return(r.Error("没有有效账户标识")); } string oldKey; using (var conn = ConnectionManager.Open()) { var trans = conn.BeginTransaction(); var query = new Criteria <Account>() .Or(m => m.No, Op.In, validNos) .Or(m => m.Email, Op.In, validNos) .Or(m => m.Phone, Op.In, validNos) .Or(m => m.Phone2, Op.In, validNos) .Or(m => m.Phone3, Op.In, validNos) .And(m => m.Id, Op.NotEq, model.Id); if (conn.Exists(query)) { trans.Rollback(); return(r.Error("编号或者名称重复")); } var obj = new Criteria <Account>() .Where(m => m.Id, Op.Eq, model.Id) .Select(m => m.Photo); oldKey = conn.ExecuteScalarEx <string>(obj.ToSelectSql()); // 在不修改密码的情况下,赋予原来的密码 if (string.IsNullOrEmpty(model.PasswordHash)) { query.ClearCondition().And(m => m.Id, Op.Eq, model.Id); var oriModel = conn.Query(query).FirstOrDefault(); if (oriModel == null) { return(r.Error("账户不存在")); } model.PasswordHash = oriModel.PasswordHash; model.PasswordSalt = oriModel.PasswordSalt; } var effectedCount = conn.Update(model, trans); if (!effectedCount) { trans.Rollback(); return(r.Error("保存失败")); } trans.Commit(); } if (!Equals(oldKey, model.Photo)) { r.Append(AccessoryService.DeleteObject(oldKey)); r.Append(AccessoryService.ClearExpiration(model.Photo)); } return(r.SetValue(true)); }
/// <summary> /// 添加 /// </summary> /// <param name="model"></param> /// <returns></returns> public override MessageRecorder <bool> Create(Account model) { var r = new MessageRecorder <bool>(); model.CreatedAt = Now; model.CreatedBy = AccountNo; if (model.ValidNos.Any() && model.ValidNos.Count != model.ValidNos.Distinct().Count()) { return(r.Error("电话或者邮件地址重复")); } var validNos = model.ValidNos; if (validNos.IsNullOrEmpty()) { return(r.Error("没有有效账户标识")); } using (var conn = ConnectionManager.Open()) { var trans = conn.BeginTransaction(); var query = new Criteria <Account>() .Or(m => m.No, Op.In, validNos) .Or(m => m.Email, Op.In, validNos) .Or(m => m.Phone, Op.In, validNos) .Or(m => m.Phone2, Op.In, validNos) .Or(m => m.Phone3, Op.In, validNos); if (conn.Exists(query)) { trans.Rollback(); return(r.Error("保存失败")); } var effectedCount = conn.Insert(model, trans); if (effectedCount == -1) { trans.Rollback(); return(r.Error("保存失败")); } var accountRoleRefQuery = new Criteria <AccountRoleRef>() .Where(m => m.AccountNo, Op.Eq, AccountNo); var accountRoleRef = conn.Get(accountRoleRefQuery); if (string.IsNullOrEmpty(accountRoleRef?.BranchNo)) { trans.Rollback(); return(r.Error("没有找到分支号,保存失败")); } var arr = new AccountRoleRef { AccountNo = model.No, BranchNo = accountRoleRef.BranchNo, RoleNo = "BranchStaff", CreatedAt = DateTime.Now, CreatedBy = AccountNo }; var effectedCount1 = conn.Insert(arr, trans); if (effectedCount1 == -1) { trans.Rollback(); return(r.Error("保存失败")); } trans.Commit(); } r.Append(AccessoryService.ClearExpiration(model.Photo)); return(r.SetValue(true)); }
/// <summary> /// 生成验证码 /// </summary> /// <param name="codeType">代码类型</param> /// <param name="accountNo">账号</param> /// <param name="phoneNo">手机号</param> /// <returns></returns> public MessageRecorder <VerificationCode> MakeCode(AlidayuService.CodeType codeType, string accountNo, string phoneNo) { var mr = new MessageRecorder <VerificationCode>(); if (string.IsNullOrEmpty(phoneNo)) { return(mr.Error("没有设置手机号")); } // 检测是否达到最小时间间隔,10秒 using (var conn = ConnectionManager.Open()) { var query = new Criteria <VerificationCode>() .Where(m => m.PhoneNo, Op.Eq, phoneNo) .And(m => m.CodeType, Op.Eq, codeType) .And(m => m.ExpiredAt, Op.NotNul, DateTime.Now) .Desc(m => m.CreatedAt); var existModel = conn.Get(query); if (existModel != null && existModel.CreatedAt.AddSeconds(RequestInterval) > DateTime.Now) { return(mr.Error("发送间隔时间太短,请稍候")); } } var now = DateTime.Now; var rnd = new Random(now.Millisecond); var code = string.Concat(rnd.Next(0, 9), rnd.Next(0, 9), rnd.Next(0, 9), rnd.Next(0, 9), rnd.Next(0, 9)); var r = new AlidayuService().SendCode(codeType, accountNo, phoneNo, code); mr.Append(r); if (r.HasError) { return(mr); } var vcode = new VerificationCode { CreatedAt = now, CodeType = codeType, AccountNo = accountNo, PhoneNo = phoneNo, AliOrderNo = r.Value, Code = code, CreatedBy = "SYSTEM", ExpiredAt = now.AddSeconds(ExpiredInterval), Uuid = Guid.NewGuid().ToString("N") }; using (var conn = ConnectionManager.Open()) { var effectedCount = conn.Insert(vcode); if (effectedCount == -1) { return(mr.Error($"保存验证码失败,流水{r.Value}无效")); } } // 发送成功后,存储发送记录 Logger.Info($"验证服务:{codeType},账户 {accountNo},号码 {phoneNo},代码 {code},流水号 {r.Value}"); // 返回验证码 return(mr.SetValue(vcode)); }