예제 #1
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));
        }