Пример #1
0
        /// <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));
        }
Пример #2
0
        /// <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));
        }
Пример #3
0
        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);
            }
        }
Пример #4
0
        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));
        }
Пример #5
0
        /// <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);
        }
Пример #6
0
        /// <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);
        }
Пример #7
0
        /// <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));
        }
Пример #8
0
        /// <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));
        }
Пример #9
0
        /// <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));
        }