Пример #1
0
        public OptResult Save(TaskModel task)
        {
            OptResult rst = null;

            if (task == null)
            {
                rst = OptResult.Build(ResultCode.ParamError, "参数不能为空或格式不正确");
                return(rst);
            }

            if (string.IsNullOrEmpty(task.id))
            {
                task.id    = GuidExtension.GetOne();
                task.state = "编辑";

                _rep.Insert(task);
            }
            else
            {
                var oldTask = _rep.GetById(task.id);
                oldTask.name        = task.name;
                oldTask.content     = task.content;
                oldTask.priority    = task.priority;
                oldTask.receiver    = task.receiver;
                oldTask.expire_time = task.expire_time;

                _rep.Update(oldTask);
            }
            rst = OptResult.Build(ResultCode.Success, "保存成功");

            return(rst);
        }
Пример #2
0
        public OptResult Add(Table table)
        {
            OptResult rst = null;

            if (table == null)
            {
                rst = OptResult.Build(ResultCode.ParamError, string.Format("{0},参数不能为空!", Msg_AddTable));
                return(rst);
            }
            //1、表名或别名是否存在
            if (IsRepeat(table))
            {
                rst = OptResult.Build(ResultCode.DataRepeat, string.Format("{0},查询表名称或别名已存在!", Msg_AddTable));
                return(rst);
            }
            //2、插入数据库
            table.id = GuidExtension.GetOne();
            try
            {
                _tableRep.Insert(table);

                rst = OptResult.Build(ResultCode.Success, Msg_AddTable);
            }
            catch (Exception ex)
            {
                LogHelper.LogError(Msg_AddTable, ex);
                rst = OptResult.Build(ResultCode.DbError, Msg_AddTable);
            }
            return(rst);
        }
Пример #3
0
        private OptResult ProcessFieldName(IEnumerable <Field> fields, IEnumerable <Table> tables)
        {
            OptResult rst;

            if (tables.IsEmpty())
            {
                rst = OptResult.Build(ResultCode.DataNotFound, string.Format("{0},查询表不存在!", Msg_InitFields));
                return(rst);
            }
            var   groups = fields.GroupBy(f => f.tbid);
            Table tb     = null;

            foreach (var gp in groups)
            {
                tb = tables.Where(t => t.id == gp.Key).FirstOrDefault();
                if (tb == null)
                {
                    rst = OptResult.Build(ResultCode.DataNotFound, string.Format("{0},查询表不存在!", Msg_InitFields));
                    return(rst);
                }

                foreach (var field in gp)
                {
                    ProcessFieldName(field, tb);

                    field.id = GuidExtension.GetOne();
                    if (field.displayname.IsEmpty())
                    {
                        field.displayname = field.fieldname;
                    }
                }
            }
            rst = OptResult.Build(ResultCode.Success, Msg_InitFields);
            return(rst);
        }
        void SetUserInfo()
        {
            if (_auditInfoEntities != null && _auditInfoEntities.Count > 0)
            {
                Guid   userId = Guid.Empty;
                String actionPerformedByUser = null;
                if (HttpContext.Current != null &&
                    HttpContext.Current.User != null &&
                    HttpContext.Current.User.Identity != null &&
                    !String.IsNullOrEmpty(HttpContext.Current.User.Identity.Name) &&
                    HttpContext.Current.User.Identity.IsAuthenticated)
                {
                    userId = HttpContext.Current.User.GetProviderUserKey();
                    actionPerformedByUser = HttpContext.Current.User.Identity.Name;
                }

                for (int i = 0; i < _auditInfoEntities.Count; i++)
                {
                    var item = _auditInfoEntities.GetAt(i) as AuditInfoEntity;
                    if (item != null)
                    {
                        item.ActionPerformedByUser = actionPerformedByUser;
                        item.UserId    = userId;
                        item.UserAgent = String.Empty;
                        item.Referrer  = String.Empty;
                        item.IpAddress = String.Empty;

                        if (HttpContext.Current != null && HttpContext.Current.Request != null)
                        {
                            if (HttpContext.Current.Request.UserAgent != null)
                            {
                                item.UserAgent = ToTrimmedWordString(HttpContext.Current.Request.UserAgent, AuditInfoFields.UserAgent.MaxLength, true);
                            }

                            if (HttpContext.Current.Request.UrlReferrer != null)
                            {
                                item.Referrer = ToTrimmedWordString(HttpContext.Current.Request.UrlReferrer.AbsoluteUri, AuditInfoFields.Referrer.MaxLength, true);
                            }

                            item.IpAddress = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
                        }

                        //HttpContext.Current.User not available when just logging in.
                        if (GuidExtension.IsNullOrEmpty(item.UserId) && item.ActionDataLog != null && item.ActionDataLog.Data != null)
                        {
                            if (item.ActionDataLog.Data is LogInAudit)
                            {
                                var logInData = item.ActionDataLog.Data as LogInAudit;
                                item.UserId = logInData.UserId;
                            }
                            else if (item.ActionDataLog.Data is LogOutAudit)
                            {
                                var logOutData = item.ActionDataLog.Data as LogOutAudit;
                                item.UserId = logOutData.UserId;
                            }
                        }
                    }
                }
            }
        }
Пример #5
0
        public OptResult Add(Dict dict)
        {
            OptResult rst = null;
            //1、编号类型是否存在
            var count = _dictTypeRep.Count(Predicates.Field <DictType>(t => t.type_code, Operator.Eq, dict.dict_type));

            if (count < 1)
            {
                rst = OptResult.Build(ResultCode.DataNotFound, string.Format("{0},编号类型{1}不存在!", Msg_Add, dict.dict_type));
                return(rst);
            }
            //2、相同类型下,编号是否已存在
            PredicateGroup pg = new PredicateGroup {
                Operator = GroupOperator.And, Predicates = new List <IPredicate>()
            };

            pg.Predicates.Add(Predicates.Field <Dict>(d => d.dict_type, Operator.Eq, dict.dict_type));
            pg.Predicates.Add(Predicates.Field <Dict>(d => d.dict_code, Operator.Eq, dict.dict_code));
            count = _dictRep.Count(pg);
            if (count > 0)
            {
                rst = OptResult.Build(ResultCode.DataRepeat, string.Format("{0},类型{1}下已存在编号{2}!", Msg_Add, dict.dict_type, dict.dict_code));
                return(rst);
            }
            //3、相同类型下,只能有一个默认值
            if (dict.dict_default == true)
            {
                pg.Predicates.Clear();
                pg.Predicates.Add(Predicates.Field <Dict>(d => d.dict_type, Operator.Eq, dict.dict_type));
                pg.Predicates.Add(Predicates.Field <Dict>(d => d.dict_default, Operator.Eq, true));

                count = _dictRep.Count(pg);
                if (count > 0)
                {
                    rst = OptResult.Build(ResultCode.DataRepeat, string.Format("{0},类型{1}下已存在默认值!", Msg_Add, dict.dict_type));
                    return(rst);
                }
            }

            //4、新增
            dict.dict_id = GuidExtension.GetOne();
            try
            {
                var val = _dictRep.Insert(dict);

                rst = OptResult.Build(ResultCode.Success, Msg_Add);
            }
            catch (Exception ex)
            {
                LogHelper.LogError(Msg_Add, ex);
                rst = OptResult.Build(ResultCode.DbError, Msg_Add);
            }
            return(rst);
        }
Пример #6
0
        public OptResult Save(PartyActAreaModel area)
        {
            OptResult rst = null;

            if (area == null)
            {
                rst = OptResult.Build(ResultCode.ParamError, "参数不能为空或格式不正确");
                return(rst);
            }

            if (string.IsNullOrEmpty(area.id))
            {
                area.id = GuidExtension.GetOne();

                var tran = _rep.Begin();
                try
                {
                    _rep.Insert(area, tran);
                    if (area.pic != null && area.pic.Count > 0)
                    {
                        //_picRep.InsertBatch(pics, tran);
                        //保存图片数据(直接写到文件)
                        UploadHelper.Upload(area.id, area.pic);
                    }

                    tran.Commit();
                }
                catch (Exception ex)
                {
                    LogHelper.LogError("新增area", ex);
                    rst = OptResult.Build(ResultCode.DbError, "新增area");
                    return(rst);
                }
            }
            else
            {
                var oldArea = _rep.GetById(area.id);
                oldArea.town           = area.town;
                oldArea.village        = area.village;
                oldArea.floor_area     = area.floor_area;
                oldArea.courtyard_area = area.courtyard_area;
                oldArea.levels         = area.levels;
                oldArea.rooms          = area.rooms;
                oldArea.location       = area.location;
                oldArea.gps            = area.gps;
                oldArea.levels         = area.levels;

                _rep.Update(area);
            }

            rst = OptResult.Build(ResultCode.Success, "保存成功");

            return(rst);
        }
Пример #7
0
        /// <summary>
        /// 给用户分配权限
        /// </summary>
        /// <param name="usrId"></param>
        /// <param name="perIds">新的权限id列表</param>
        /// <param name="assignAll">是否分配所有权限,如果true,则忽略perIds</param>
        /// <returns></returns>
        public OptResult AssignPermissions(string usrId, List <string> perIds = null, bool assignAll = false)
        {
            OptResult rst = null;
            //1、用户是否存在
            var usr = _usrRep.GetById(usrId);

            if (usr == null)
            {
                rst = OptResult.Build(ResultCode.DataNotFound, string.Format("{0}失败,用户不存在!", Msg_AssignPer));
                return(rst);
            }
            //新权限(非数据库操作尽量放到事务外)
            var newRels = new List <UserPermissionRel>();

            if (!assignAll && perIds != null && perIds.Count > 0)
            {
                //去重
                perIds.Distinct().ToList()
                .ForEach(newPerId =>
                {
                    newRels.Add(new UserPermissionRel {
                        rel_id = GuidExtension.GetOne(), rel_userid = usrId, rel_permissionid = newPerId
                    });
                });
            }
            if (assignAll)
            {
                newRels.Add(new UserPermissionRel {
                    rel_id = GuidExtension.GetOne(), rel_userid = usrId, rel_permissionid = "*"
                });
            }
            var tran = _usrPerRelRep.Begin();

            try
            {
                //2、清空用户当前所有权限
                bool val = _usrPerRelRep.Delete(Predicates.Field <UserPermissionRel>(r => r.rel_userid, Operator.Eq, usrId), tran);
                //3、添加新权限
                if (newRels.Count > 0)
                {
                    _usrPerRelRep.InsertBatch(newRels, tran);
                }
                tran.Commit();
                rst = OptResult.Build(ResultCode.Success, Msg_AssignPer);
            }
            catch (Exception ex)
            {
                LogHelper.LogError(Msg_AssignPer, ex);
                rst = OptResult.Build(ResultCode.DbError, Msg_AssignPer);
            }

            return(rst);
        }
Пример #8
0
        public static void Upload(string subPath, string content)
        {
            var path = _uploadRootPath + "/" + subPath;

            if (!Directory.Exists(path))
            {
                Directory.CreateDirectory(path);
            }

            string filePath = path + "/" + GuidExtension.GetOne();

            File.WriteAllText(filePath, content);
        }
Пример #9
0
        public OptResult Init(IEnumerable <Table> tables)
        {
            OptResult rst = null;

            if (tables.IsEmpty())
            {
                rst = OptResult.Build(ResultCode.ParamError, string.Format("{0},参数不能为空!", Msg_Init));
                return(rst);
            }
            //预处理
            List <Field> fields = new List <Field>();

            foreach (var t in tables)
            {
                //主键、别名
                t.id = GuidExtension.GetOne();
                if (t.alias.IsEmpty())
                {
                    t.alias = t.tbname;
                }
                fields.AddRange(t.fields);
            }
            var tran = _tableRep.Begin();

            try
            {
                //1、清除查询表所有信息、查询字段所有信息
                //TODO,如果后续还有查询模板啥的,是不是都得清除?
                _fieldRep.Delete(Predicates.Field <Field>(f => f.id, Operator.Eq, null, true), tran);
                _tableRep.Delete(Predicates.Field <Table>(t => t.id, Operator.Eq, null, true), tran);
                //2、新增
                _tableRep.InsertBatch(tables, tran);
                if (fields.IsNotEmpty())
                {
                    _fieldRep.InsertBatch(fields, tran);
                }
                _tableRep.Commit();
                rst = OptResult.Build(ResultCode.Success, Msg_Init);
            }
            catch (Exception ex)
            {
                LogHelper.LogError(Msg_Init, ex);
                rst = OptResult.Build(ResultCode.DbError, Msg_Init);
            }
            return(rst);
        }
Пример #10
0
        public OptResult Add(Permission per)
        {
            OptResult rst = null;

            //1、校验权限编号是否已存在
            var count = _perRep.Count(Predicates.Field <Permission>(p => p.per_code, Operator.Eq, per.per_code));

            if (count > 0)
            {
                rst = OptResult.Build(ResultCode.DataRepeat, string.Format("{0},编号为{1}的权限已存在!", Msg_AddPer, per.per_code));
                return(rst);
            }

            //2、权限类型是否合法
            string msg = "";

            if (!ValidatePermissionType(per.per_type, out msg))
            {
                rst = OptResult.Build(ResultCode.ParamError, Msg_AddPer + "," + msg);
                return(rst);
            }

            //3、上级权限是否存在
            if (!ValidateParent(per.per_parent, out msg))
            {
                rst = OptResult.Build(ResultCode.ParamError, Msg_AddPer + "," + msg);
                return(rst);
            }

            per.per_id = GuidExtension.GetOne();
            try
            {
                _perRep.Insert(per);

                rst = OptResult.Build(ResultCode.Success, Msg_AddPer);
            }
            catch (Exception ex)
            {
                LogHelper.LogError(Msg_AddPer, ex);
                rst = OptResult.Build(ResultCode.DbError, Msg_AddPer);
            }
            return(rst);
        }
Пример #11
0
        public OptResult Add(Field field)
        {
            OptResult rst = null;

            if (field == null)
            {
                rst = OptResult.Build(ResultCode.ParamError, string.Format("{0},参数不能为空!", Msg_AddField));
                return(rst);
            }
            //1、字段名是否存在
            if (IsRepeat(field))
            {
                rst = OptResult.Build(ResultCode.DataRepeat, string.Format("{0},字段名称已存在!", Msg_AddField));
                return(rst);
            }
            //2、查询表是否存在
            var table = _tableRep.GetById(field.tbid);

            if (table == null)
            {
                rst = OptResult.Build(ResultCode.DataNotFound, string.Format("{0},对应查询表不存在!", Msg_AddField));
                return(rst);
            }
            //3、修改查询字段名称
            ProcessFieldName(field, table);
            //4、插入数据库
            field.id = GuidExtension.GetOne();
            try
            {
                _fieldRep.Insert(field);

                rst = OptResult.Build(ResultCode.Success, Msg_AddField);
            }
            catch (Exception ex)
            {
                LogHelper.LogError(Msg_AddField, ex);
                rst = OptResult.Build(ResultCode.DbError, Msg_AddField);
            }
            return(rst);
        }
Пример #12
0
        public OptResult Add(User usr)
        {
            OptResult rst = null;
            //1、用户名是否已存在
            PredicateGroup pg = new PredicateGroup {
                Operator = GroupOperator.Or, Predicates = new List <IPredicate>()
            };

            pg.Predicates.Add(Predicates.Field <User>(u => u.user_name, Operator.Eq, usr.user_name));
            pg.Predicates.Add(Predicates.Field <User>(u => u.user_idcard, Operator.Eq, usr.user_idcard));
            var count = _usrRep.Count(pg);

            if (count > 0)
            {
                rst = OptResult.Build(ResultCode.DataRepeat,
                                      string.Format("{0},用户{1}或身份证号{2}已存在", Msg_AddUser, usr.user_name, usr.user_idcard));
                return(rst);
            }
            //2、处理
            usr.user_id  = GuidExtension.GetOne();
            usr.user_pwd = EncryptionExtension.GetMd5Hash(usr.user_idcard.Substring(usr.user_idcard.Length - 6, 6));//初始密码身份证后六位
            try
            {
                var val = _usrRep.Insert(usr);

                //3、新增用户默认权限
                //TODO

                rst = OptResult.Build(ResultCode.Success, Msg_AddUser);
            }
            catch (Exception ex)
            {
                LogHelper.LogError(Msg_AddUser, ex);
                rst = OptResult.Build(ResultCode.DbError, Msg_AddUser);
            }
            return(rst);
        }
Пример #13
0
        public OptResult Add(Group group)
        {
            OptResult rst = null;

            //1、校验组织编号是否已存在
            var count = _groupRep.Count(Predicates.Field <Group>(gp => gp.gp_code, Operator.Eq, group.gp_code));

            if (count > 0)
            {
                rst = OptResult.Build(ResultCode.DataRepeat, string.Format("{0},编号为{1}的组织已存在!", Msg_AddGroup, group.gp_code));
                return(rst);
            }

            //2、上级组织是否存在
            string msg = "";

            if (!ValidateParent(group.gp_parent, out msg))
            {
                rst = OptResult.Build(ResultCode.ParamError, Msg_AddGroup + "," + msg);
                return(rst);
            }

            group.gp_id = GuidExtension.GetOne();
            try
            {
                _groupRep.Insert(group);

                rst = OptResult.Build(ResultCode.Success, Msg_AddGroup);
            }
            catch (Exception ex)
            {
                LogHelper.LogError(Msg_AddGroup, ex);
                rst = OptResult.Build(ResultCode.DbError, Msg_AddGroup);
            }
            return(rst);
        }
Пример #14
0
        //公共方法

        /// <summary>
        /// 注册一卡通账户
        /// </summary>
        /// <param name="card"></param>
        /// <returns></returns>
        public OptResult Register(CardInfo newCard)
        {
            OptResult rst       = null;
            var       operation = CardOperation.Reg;
            var       optDesc   = operation.GetDescription();

            PredicateGroup pg = new PredicateGroup {
                Operator = GroupOperator.Or, Predicates = new List <IPredicate>()
            };

            pg.Predicates.Add(Predicates.Field <CardInfo>(c => c.card_idcard, Operator.Eq, newCard.card_idcard));
            pg.Predicates.Add(Predicates.Field <CardInfo>(c => c.card_number, Operator.Eq, newCard.card_number));
            pg.Predicates.Add(Predicates.Field <CardInfo>(c => c.card_phone, Operator.Eq, newCard.card_phone));
            var card = _cardInfoRep.GetList(pg).FirstOrDefault();

            if (card != null)
            {
                //1、身份证号是否已存在
                if (card.card_idcard.Equals(newCard.card_idcard))
                {
                    rst = OptResult.Build(ResultCode.DataRepeat, string.Format("{0}——创建本地一卡通账户失败,身份证号已存在!", optDesc));
                    return(rst);
                }
                //2、一卡通号是否已存在
                if (card.card_number.Equals(newCard.card_number))
                {
                    rst = OptResult.Build(ResultCode.DataRepeat, string.Format("{0}——创建本地一卡通账户失败,一卡通号已存在!", optDesc));
                    return(rst);
                }
                //3、手机号号是否已存在
                if (card.card_phone.Equals(newCard.card_phone))
                {
                    rst = OptResult.Build(ResultCode.DataRepeat, string.Format("{0}——创建本地一卡通账户失败,手机号已存在!", optDesc));
                    return(rst);
                }
            }

            //4、创建
            //主键
            if (string.IsNullOrEmpty(newCard.card_id))
            {
                newCard.card_id = GuidExtension.GetOne();
            }
            //默认状态
            newCard.card_state = CardState.Normal.ToString();

            //新增一卡通数据
            var cardRecord = new CardRecord
            {
                rec_id       = GuidExtension.GetOne(),
                rec_number   = newCard.card_number,
                rec_username = newCard.card_username,
                rec_idcard   = newCard.card_idcard,
                rec_type     = operation.ToString(),
                rec_time     = DateTime.Now,
                rec_operator = newCard.card_creator,
                rec_remark   = optDesc
            };
            var tran = _cardInfoRep.Begin();

            try
            {
                var val = _cardInfoRep.Insert(newCard, tran);
                //新增操作记录
                val = _cardRecordRep.Insert(cardRecord, tran);

                tran.Commit();
                rst = OptResult.Build(ResultCode.Success, optDesc);
            }
            catch (Exception ex)
            {
                //这里不用rollback了,因为仓储层已处理
                //tran.Rollback();
                LogHelper.LogError(optDesc, ex);
                rst = OptResult.Build(ResultCode.DbError, optDesc);
            }

            return(rst);
        }
 public override void InitializeAuditInfoEntity(AuditInfoEntity auditInfoEntity)
 {
     ((AuditInfoEntity)auditInfoEntity).Id = GuidExtension.NewSequentialGuid();
 }
Пример #16
0
        /// <summary>
        /// 付款
        /// </summary>
        /// <param name="pay"></param>
        /// <returns></returns>
        public OptResult Pay(PayEntity pay)
        {
            OptResult rst = null;

            var operation = CardOperation.Pay;
            var optDesc   = operation.GetDescription();

            if (pay == null)
            {
                rst = OptResult.Build(ResultCode.ParamError, optDesc + "——参数不能为空!");
                return(rst);
            }
            string msg = string.Empty;

            if (!pay.Check(out msg))
            {
                rst = OptResult.Build(ResultCode.ParamError, string.Format("{0}——{1}!", optDesc, msg));
                return(rst);
            }
            //1、账户是否存在
            var card = GetByIdcard(pay.idcard);

            if (card == null)
            {
                rst = OptResult.Build(ResultCode.DataNotFound, string.Format("{0}——指定身份证号{1}的账户不存在!", optDesc, pay.idcard));
                return(rst);
            }
            //2、如果一卡通号存在,看是否和身份证号对应
            if (!string.IsNullOrEmpty(pay.number) && !string.Equals(card.card_number, pay.number))
            {
                rst = OptResult.Build(ResultCode.ParamError, string.Format("{0}——身份证号{1}与一卡通号{2}不匹配!", optDesc, pay.idcard, pay.number));
                return(rst);
            }
            //3、一卡通状态是否正常
            if (card.State != CardState.Normal)
            {
                rst = OptResult.Build(ResultCode.ParamError, string.Format("{0}——一卡通状态异常[{1}]!", optDesc, card.State.GetDescription()));
                return(rst);
            }
            //4、余额是否充足
            if (pay.amount > card.card_govmoney + card.card_mymoney)
            {
                rst = OptResult.Build(ResultCode.ParamError, string.Format("{0}——余额不足!", optDesc));
                return(rst);
            }
            //5、是否已经支付过(该一卡通和订单号下,存在"支付"流水或"退款"流水)
            var pg = new PredicateGroup {
                Operator = GroupOperator.And, Predicates = new List <IPredicate>()
            };

            pg.Predicates.Add(Predicates.Field <CardBill>(b => b.bill_idcard, Operator.Eq, card.card_idcard));
            pg.Predicates.Add(Predicates.Field <CardBill>(b => b.bill_order, Operator.Eq, pay.order));
            pg.Predicates.Add(Predicates.Field <CardBill>(b => b.bill_type, Operator.Eq, new string[] { CardOperation.Pay.ToString(), CardOperation.Refund.ToString() }));
            var count = _cardBillRep.Count(pg);

            if (count > 0)
            {
                //已付款或退款
                rst = OptResult.Build(ResultCode.OptRepeat, optDesc + "——已付款或退款,不能再次支付!");
                return(rst);
            }
            //6、支付

            /*
             * 消费扣费逻辑:
             * 优先扣除gov:if pay > govnow,govchanged=govnow,govnew=0;mychanged=pay-govnow,mynew=mynow-mychanged;
             *                   else         govchanged=pay,govnew=govnow-govchanged;mychanged=0,mynew=mynow;
             *      优先扣除my: if pay > mynow, mychanged=mynow,mynew=0;govchanged=pay-mynow,govnew=govnow-govchanged;
             *                   else         mychanged=pay,mynew=mynow-mychanged;govchanged=0,govnew=govnow;
             * 1)更新card_info,
             * 2)新增操作记录,type:付款
             * 3)新增一卡通流水,type:付款
             * 注:扣费时,变动额为负数
             */
            decimal govnew, govchanged, mynew, mychanged;

            if (pay.priority == MoneyEnum.gov)
            {
                if (pay.amount > card.card_govmoney)
                {
                    govchanged = -card.card_govmoney;
                    govnew     = 0;
                    mychanged  = -(pay.amount - card.card_govmoney);
                    mynew      = card.card_mymoney + mychanged;//因为mychanged是负数
                }
                else
                {
                    govchanged = -pay.amount;
                    govnew     = card.card_govmoney - pay.amount;
                    mychanged  = 0;
                    mynew      = card.card_mymoney;
                }
            }
            else
            {
                if (pay.amount > card.card_mymoney)
                {
                    mychanged  = -card.card_mymoney;
                    mynew      = 0;
                    govchanged = -(pay.amount - card.card_mymoney);
                    govnew     = card.card_govmoney + govchanged;//因为govchanged是负数
                }
                else
                {
                    mychanged  = -pay.amount;
                    mynew      = card.card_mymoney - pay.amount;
                    govchanged = 0;
                    govnew     = card.card_govmoney;
                }
            }
            //
            var      rec_id     = GuidExtension.GetOne();//操作记录id
            DateTime optTime    = DateTime.Now;
            var      cardRecord = new CardRecord
            {
                rec_id       = rec_id,
                rec_number   = card.card_number,
                rec_idcard   = card.card_idcard,
                rec_type     = operation.ToString(),
                rec_time     = optTime,
                rec_username = card.card_username,
                rec_remark   = string.Format("付款金额:{0}", pay.amount),
                rec_operator = pay.opt
            };
            var cardBill = new CardBill
            {
                bill_id        = GuidExtension.GetOne(),
                bill_number    = card.card_number,
                bill_idcard    = card.card_idcard,
                bill_agoall    = card.card_govmoney + card.card_mymoney,
                bill_agogov    = card.card_govmoney,
                bill_agomy     = card.card_mymoney,
                bill_changegov = govchanged,
                bill_changemy  = mychanged,
                bill_nowall    = mynew + govnew,
                bill_nowgov    = govnew,
                bill_nowmy     = mynew,
                bill_type      = operation.ToString(),
                bill_time      = optTime,
                bill_order     = pay.order,
                bill_src       = pay.src,
                bill_record    = rec_id,
                bill_remark    = pay.remark
            };
            var tran = base.Begin();

            try
            {
                //
                count = _cardInfoRep.UpdateBySqlName(SqlName_Update,
                                                     new { card_govmoney = govnew, card_mymoney = mynew, card_modifier = pay.opt, card_modifytime = optTime, card_idcard = pay.idcard },
                                                     new string[] { "card_govmoney", "card_mymoney", "card_modifier", "card_modifytime" },
                                                     tran);
                if (count < 1)
                {
                    tran.Rollback();
                    rst = OptResult.Build(ResultCode.Fail, optDesc + "——未知错误!");
                    return(rst);
                }
                //
                _cardRecordRep.Insert(cardRecord);
                //
                _cardBillRep.Insert(cardBill);

                tran.Commit();

                rst = OptResult.Build(ResultCode.Success, optDesc + "——idcard:" + pay.idcard);
            }
            catch (Exception ex)
            {
                LogHelper.LogError(optDesc, ex);
                rst = OptResult.Build(ResultCode.DbError, optDesc);
            }

            return(rst);
        }
Пример #17
0
        private static void DoTestFromStringBase64url(string i, string e)
        {
            var g = new Guid(e);

            Assert.AreEqual(g, GuidExtension.FromStringBase64url(i));
        }
Пример #18
0
        /// <summary>
        ///  变更手机号
        /// </summary>
        /// <param name="idcard"></param>
        /// <param name="newPhone"></param>
        /// <param name="opt"></param>
        /// <returns></returns>
        public OptResult ChangePhone(string idcard, string newPhone, string opt)
        {
            OptResult rst       = null;
            var       operation = CardOperation.ChgPhone;
            var       optDesc   = operation.GetDescription();

            //1、指定身份证号账户是否存在
            var card = GetByIdcard(idcard);

            if (card == null)
            {
                rst = OptResult.Build(ResultCode.DataNotFound, string.Format("{0}——指定身份证号{1}的账户不存在!", optDesc, idcard));
                return(rst);
            }
            //2、手机号是否已存在
            var count = _cardInfoRep.Count(Predicates.Field <CardInfo>(c => c.card_phone, Operator.Eq, newPhone));

            if (count > 0)
            {
                rst = OptResult.Build(ResultCode.DataNotFound, string.Format("{0}——手机号{1}已存在!", optDesc, newPhone));
                return(rst);
            }
            //3、数据库操作
            var optTime    = DateTime.Now;
            var cardRecord = new CardRecord
            {
                rec_id       = GuidExtension.GetOne(),
                rec_number   = card.card_number,
                rec_username = card.card_username,
                rec_idcard   = idcard,
                rec_type     = operation.ToString(),
                rec_time     = optTime,
                rec_operator = opt,
                rec_remark   = string.Format("手机号,变更前:{0},变更后:{1}", card.card_phone, newPhone)
            };
            var tran = _cardInfoRep.Begin();

            try
            {
                count = _cardInfoRep.UpdateBySqlName(SqlName_Update,
                                                     new { card_phone = newPhone, card_idcard = idcard, card_modifier = opt, card_modifytime = optTime },
                                                     new string[] { "card_phone", "card_modifier", "card_modifytime" }, tran);
                if (count < 1)
                {
                    tran.Rollback();
                    rst = OptResult.Build(ResultCode.Fail, optDesc + "——未知错误!");
                    return(rst);
                }
                //添加操作记录
                var val = _cardRecordRep.Insert(cardRecord, tran);
                rst = OptResult.Build(ResultCode.Success, optDesc);
                tran.Commit();
            }
            catch (Exception ex)
            {
                LogHelper.LogError(optDesc, ex);
                rst = OptResult.Build(ResultCode.DbError, optDesc);
            }

            return(rst);
        }
Пример #19
0
        /// <summary>
        /// 挂失
        /// </summary>
        /// <param name="idcard"></param>
        /// <param name="opt"></param>
        /// <returns></returns>
        public OptResult ReportLoss(string idcard, string opt)
        {
            OptResult rst = null;

            var operation = CardOperation.RepLoss;
            var optDesc   = operation.GetDescription();

            //1、账户是否存在
            var card = GetByIdcard(idcard);

            if (card == null)
            {
                rst = OptResult.Build(ResultCode.DataNotFound, string.Format("{0}——指定身份证号{1}的账户不存在!", optDesc, idcard));
                return(rst);
            }
            //2、状态是否“正常”
            if (card.State != CardState.Normal)
            {
                rst = OptResult.Build(ResultCode.Fail, string.Format("{0}——一卡通账户状态异常[{1}]!", optDesc, card.State.GetDescription()));
                return(rst);
            }
            var optTime    = DateTime.Now;
            var cardRecord = new CardRecord
            {
                rec_id       = GuidExtension.GetOne(),
                rec_number   = card.card_number,
                rec_username = card.card_username,
                rec_idcard   = idcard,
                rec_type     = operation.ToString(),
                rec_time     = optTime,
                rec_operator = opt,
                rec_remark   = optDesc
            };
            //
            var tran = base.Begin();

            try
            {
                var count = _cardInfoRep.UpdateBySqlName(SqlName_Update,
                                                         new { card_state = CardState.Loss.ToString(), card_idcard = idcard, card_modifier = opt, card_modifytime = optTime },
                                                         new string[] { "card_state", "card_modifier", "card_modifytime" }, tran);
                if (count < 1)
                {
                    tran.Rollback();
                    rst = OptResult.Build(ResultCode.Fail, optDesc + "失败,未知错误!");
                    return(rst);
                }

                _cardRecordRep.Insert(cardRecord, tran);

                tran.Commit();
                rst = OptResult.Build(ResultCode.Success, optDesc);
            }
            catch (Exception ex)
            {
                LogHelper.LogError(optDesc, ex);
                rst = OptResult.Build(ResultCode.DbError, optDesc);
            }

            return(rst);
        }
Пример #20
0
        //私有方法

        private OptResult CloseDownSingle(SingleProcessParam param)
        {
            OptResult rst       = null;
            var       operation = CardOperation.CloseDwn;
            var       optDesc   = operation.GetDescription() + "(单账户)";

            if (param.card == null)
            {
                rst = OptResult.Build(ResultCode.DataNotFound, string.Format("{0}——一卡通账户不存在!", optDesc));
                return(rst);
            }
            if (param.card.State != CardState.Normal)//暂定只有正常状态的账户才能注销
            {
                rst = OptResult.Build(ResultCode.Fail,
                                      string.Format("{0}——身份证号为{1}的账户状态为{2},不能注销!", optDesc, param.card.card_idcard, param.card.State.GetDescription()));
                return(rst);
            }
            //2、数据库处理

            /*
             * 流程:
             * 1)更新card_info
             * 2)新增操作记录,type:注销
             * 3)新增一卡通流水
             */
            var rec_id     = GuidExtension.GetOne();
            var optTime    = DateTime.Now;
            var cardRecord = new CardRecord
            {
                rec_id       = rec_id,
                rec_number   = param.card.card_number,
                rec_username = param.card.card_username,
                rec_idcard   = param.card.card_idcard,
                rec_type     = operation.ToString(),
                rec_time     = optTime,
                rec_operator = param.opt,
                rec_remark   = string.Format("{0}——本次变动额:{1}", optDesc, param.card.card_govmoney + param.card.card_mymoney)
            };

            var cardBill = new CardBill
            {
                bill_id        = Guid.NewGuid().ToString("N"),
                bill_number    = param.card.card_number,
                bill_idcard    = param.card.card_idcard,
                bill_agoall    = param.card.card_govmoney + param.card.card_mymoney,
                bill_agogov    = param.card.card_govmoney,
                bill_agomy     = param.card.card_mymoney,
                bill_changegov = -param.card.card_govmoney,
                bill_changemy  = -param.card.card_mymoney,
                bill_nowall    = 0,
                bill_nowgov    = 0,
                bill_nowmy     = 0,
                bill_type      = operation.ToString(),
                bill_time      = optTime,
                bill_record    = rec_id,
                bill_remark    = optDesc
            };

            var innerTran = param.tran;

            if (innerTran == null)
            {
                innerTran = _cardInfoRep.Begin();
            }
            try
            {
                //1
                var count = _cardInfoRep.UpdateBySqlName(SqlName_Update,
                                                         new { card_govmoney = 0, card_mymoney = 0, card_idcard = param.card.card_idcard, card_state = CardState.Off.ToString(), card_modifier = param.opt, card_modifytime = optTime },
                                                         new string[] { "card_govmoney", "card_mymoney", "card_state", "card_modifier", "card_modifytime" },
                                                         innerTran);
                if (count < 1)
                {
                    if (param.tran == null)
                    {
                        //外部事务为null,说明是本方法内部事务,这里自行回滚
                        innerTran.Rollback();
                    }
                    rst = OptResult.Build(ResultCode.Fail, string.Format("{0}——idcard={1}", optDesc, param.card.card_idcard));
                    return(rst);
                }
                //2
                _cardRecordRep.Insert(cardRecord, innerTran);
                //3
                _cardBillRep.Insert(cardBill, innerTran);
                if (param.tran == null)
                {
                    //外部事务为null,说明是本方法内部事务,这里自行提交
                    innerTran.Commit();
                }
                rst = OptResult.Build(ResultCode.Success, string.Format("{0}——idcard={1}", optDesc, param.card.card_idcard));
            }
            catch (Exception ex)
            {
                LogHelper.LogError(optDesc, ex);
                rst = OptResult.Build(ResultCode.DbError, optDesc);
                return(rst);
            }

            return(rst);
        }
Пример #21
0
        //私有方法

        /// <summary>
        /// 设置单个一卡通账户的金额
        /// 关于事务:
        ///  * 1、如果从外部传递事务,则事务操作也由调用方处理
        ///  * 2、如果外部没有传入事务,则内部起一个事务,并自行负责事务操作
        /// </summary>
        /// <param name="card"></param>
        /// </param>
        /// <returns></returns>
        private OptResult SetMoneySingle(SetMoneySingleProcessParam param)
        {
            OptResult rst = null;

            if (param == null)
            {
                rst = OptResult.Build(ResultCode.ParamError, "补贴/充值——参数错误!");
                return(rst);
            }
            var operation = param.moneyType == MoneyEnum.gov ? CardOperation.SetGov : CardOperation.SetMy;
            var optDesc   = operation.GetDescription() + "(单账户)";

            if (param.card == null)
            {
                rst = OptResult.Build(ResultCode.DataNotFound, string.Format("{0}[{1}]——一卡通账户不存在!", optDesc, param.moneyType.GetDescription()));
                return(rst);
            }

            //2、数据库处理

            /*
             * 流程:
             * 1)更新card_info
             * 2)新增操作记录,type:补贴、充值
             * 3)新增一卡通流水
             */
            var rec_id     = GuidExtension.GetOne();
            var optTime    = DateTime.Now;
            var cardRecord = new CardRecord
            {
                rec_id       = rec_id,
                rec_number   = param.card.card_number,
                rec_username = param.card.card_username,
                rec_idcard   = param.card.card_idcard,
                rec_type     = operation.ToString(),
                rec_time     = optTime,
                rec_operator = param.opt,
                rec_remark   = string.Format("{0},本次变动额:{1}", optDesc, param.money)
            };
            //政府补贴金时,不保留政府补贴现有余额,直接更新成新的金额
            var cardBill = new CardBill
            {
                bill_id        = Guid.NewGuid().ToString("N"),
                bill_number    = param.card.card_number,
                bill_idcard    = param.card.card_idcard,
                bill_agoall    = param.card.card_govmoney + param.card.card_mymoney,
                bill_agogov    = param.card.card_govmoney,
                bill_agomy     = param.card.card_mymoney,
                bill_changegov = param.moneyType == MoneyEnum.gov ? (param.money - param.card.card_govmoney) : 0,
                bill_changemy  = param.moneyType == MoneyEnum.my ? param.money : 0,
                bill_nowall    = param.moneyType == MoneyEnum.gov ? (param.money + param.card.card_mymoney) : (param.card.card_govmoney + param.card.card_mymoney + param.money),
                bill_nowgov    = param.moneyType == MoneyEnum.gov ? param.money : param.card.card_govmoney,
                bill_nowmy     = param.moneyType == MoneyEnum.my ? (param.card.card_mymoney + param.money) : param.card.card_mymoney,
                bill_type      = operation.ToString(),
                bill_time      = optTime,
                bill_record    = rec_id,
                bill_remark    = optDesc
            };


            var innerTran = param.tran;

            if (innerTran == null)
            {
                innerTran = _cardInfoRep.Begin();
            }
            try
            {
                var count = 0;
                //1
                if (param.moneyType == MoneyEnum.gov)
                {
                    count = _cardInfoRep.UpdateBySqlName(SqlName_Update,
                                                         new { card_govmoney = param.money, card_idcard = param.card.card_idcard, card_modifier = param.opt, card_modifytime = optTime },
                                                         new string[] { "card_govmoney", "card_modifier", "card_modifytime" },
                                                         innerTran);
                }
                else
                {
                    count = _cardInfoRep.UpdateBySqlName(SqlName_Update,
                                                         new { card_mymoney = param.card.card_mymoney + param.money, card_idcard = param.card.card_idcard, card_modifier = param.opt, card_modifytime = optTime },
                                                         new string[] { "card_mymoney", "card_modifier", "card_modifytime" },
                                                         innerTran);
                }
                if (count < 1)
                {
                    if (param.tran == null)
                    {
                        //外部事务为null,说明是本方法内部事务,这里自行回滚
                        innerTran.Rollback();
                    }
                    rst = OptResult.Build(ResultCode.Fail, string.Format("{0}——idcard={1}", optDesc, param.card.card_idcard));
                    return(rst);
                }
                //2
                _cardRecordRep.Insert(cardRecord, innerTran);
                //3
                _cardBillRep.Insert(cardBill, innerTran);
                if (param.tran == null)
                {
                    //外部事务为null,说明是本方法内部事务,这里自行提交
                    innerTran.Commit();
                }
                rst = OptResult.Build(ResultCode.Success, string.Format("{0}——idcard={1}", optDesc, param.card.card_idcard));
            }
            catch (Exception ex)
            {
                LogHelper.LogError(optDesc, ex);
                rst = OptResult.Build(ResultCode.DbError, optDesc);
                return(rst);
            }

            return(rst);
        }
Пример #22
0
        private OptResult RecoverSingle(SingleProcessParam param)
        {
            OptResult rst       = null;
            var       operation = CardOperation.Recover;
            var       optDesc   = operation.GetDescription() + "(单账户)";

            if (param.card == null)
            {
                rst = OptResult.Build(ResultCode.DataNotFound, string.Format("{0}——一卡通账户不存在!", optDesc));
                return(rst);
            }
            if (param.card.State == CardState.Normal)//"正常"状态的账户无需恢复
            {
                rst = OptResult.Build(ResultCode.Success,
                                      string.Format("{0}——身份证号为{1}的账户状态为{2},无需恢复!", optDesc, param.card.card_idcard, param.card.State.GetDescription()));
                return(rst);
            }
            //2、数据库处理

            /*
             * 流程:
             * 1)更新card_info
             * 2)新增操作记录,type:注销
             * 3)新增一卡通流水
             */
            var rec_id     = GuidExtension.GetOne();
            var optTime    = DateTime.Now;
            var cardRecord = new CardRecord
            {
                rec_id       = rec_id,
                rec_number   = param.card.card_number,
                rec_username = param.card.card_username,
                rec_idcard   = param.card.card_idcard,
                rec_type     = operation.ToString(),
                rec_time     = optTime,
                rec_operator = param.opt,
                rec_remark   = optDesc
            };

            var innerTran = param.tran;

            if (innerTran == null)
            {
                innerTran = _cardInfoRep.Begin();
            }
            try
            {
                //1
                var count = _cardInfoRep.UpdateBySqlName(SqlName_Update,
                                                         new { card_idcard = param.card.card_idcard, card_state = CardState.Normal.ToString(), card_modifier = param.opt, card_modifytime = optTime },
                                                         new string[] { "card_state", "card_modifier", "card_modifytime" },
                                                         innerTran);
                if (count < 1)
                {
                    if (param.tran == null)
                    {
                        //外部事务为null,说明是本方法内部事务,这里自行回滚
                        innerTran.Rollback();
                    }
                    rst = OptResult.Build(ResultCode.Fail, string.Format("{0}——idcard={1}", optDesc, param.card.card_idcard));
                    return(rst);
                }
                //2
                _cardRecordRep.Insert(cardRecord, innerTran);
                if (param.tran == null)
                {
                    //外部事务为null,说明是本方法内部事务,这里自行提交
                    innerTran.Commit();
                }
                rst = OptResult.Build(ResultCode.Success, string.Format("{0}——idcard={1}", optDesc, param.card.card_idcard));
            }
            catch (Exception ex)
            {
                LogHelper.LogError(optDesc, ex);
                rst = OptResult.Build(ResultCode.DbError, optDesc);
                return(rst);
            }

            return(rst);
        }
Пример #23
0
        /// <summary>
        /// 退款
        /// </summary>
        /// <param name="refund"></param>
        /// <returns></returns>
        public OptResult Refound(RefundEntity refund)
        {
            OptResult rst       = null;
            var       operation = CardOperation.Refund;
            var       optDesc   = operation.GetDescription();

            if (refund == null)
            {
                rst = OptResult.Build(ResultCode.ParamError, optDesc + "——参数不能为空!");
                return(rst);
            }
            string msg = string.Empty;

            if (!refund.Check(out msg))
            {
                rst = OptResult.Build(ResultCode.ParamError, string.Format("{0}——{1}!", optDesc, msg));
                return(rst);
            }

            //1、账户是否存在(获取账户信息)
            var card = GetByIdcard(refund.idcard);

            if (card == null)
            {
                rst = OptResult.Build(ResultCode.DataNotFound, string.Format("{0}——指定身份证号{1}的账户不存在!", optDesc, refund.idcard));
                return(rst);
            }
            //2、账户状态
            if (card.State != CardState.Normal)
            {
                rst = OptResult.Build(ResultCode.Fail, string.Format("{0}——一卡通状态异常[{1}]!", optDesc, card.State.GetDescription()));
                return(rst);
            }
            //3、指定订单是否已付款并且未退款(获取付款流水信息)
            PredicateGroup pg = new PredicateGroup {
                Operator = GroupOperator.And, Predicates = new List <IPredicate>()
            };

            pg.Predicates.Add(Predicates.Field <CardBill>(b => b.bill_idcard, Operator.Eq, card.card_idcard));
            pg.Predicates.Add(Predicates.Field <CardBill>(b => b.bill_order, Operator.Eq, refund.order));
            var payTypeWhere = Predicates.Field <CardBill>(b => b.bill_type, Operator.Eq, CardOperation.Pay.ToString());

            pg.Predicates.Add(payTypeWhere);
            var payBill = _cardBillRep.GetList(pg).FirstOrDefault();

            if (payBill == null)
            {
                rst = OptResult.Build(ResultCode.DataNotFound, string.Format("{0}——指定身份证号{1}的订单{2}尚未支付!", optDesc, card.card_idcard, refund.order));
                return(rst);
            }
            pg.Predicates.Remove(payTypeWhere);
            pg.Predicates.Add(Predicates.Field <CardBill>(b => b.bill_type, Operator.Eq, "退款"));
            var count = _cardBillRep.Count(pg);

            if (count > 0)
            {
                rst = OptResult.Build(ResultCode.OptRepeat, string.Format("{0}——指定身份证号{1}的订单{2}已退款!", optDesc, card.card_idcard, refund.order));
                return(rst);
            }
            //4、数据库操作

            /*
             * 退款流程
             * 1)更新一卡通基本信息
             *      gov_new=gov_now+bill.gov_change,my_new=my_now+bill.my_change
             * 2)新增操作记录,type:退款
             * 3)新增流水记录,type:退款
             */
            decimal govchanged = -payBill.bill_changegov; //求反
            decimal mychanged  = -payBill.bill_changemy;  //求反
            decimal govnew     = card.card_govmoney + govchanged;
            decimal mynew      = card.card_mymoney + mychanged;
            var     rec_id     = GuidExtension.GetOne();
            var     optTime    = DateTime.Now;
            var     cardRecord = new CardRecord
            {
                rec_id       = rec_id,
                rec_number   = card.card_number,
                rec_idcard   = card.card_idcard,
                rec_type     = operation.ToString(),
                rec_time     = optTime,
                rec_username = card.card_username,
                rec_remark   = string.Format("退款金额:{0}", govchanged + mychanged),
                rec_operator = refund.opt
            };
            var cardBill = new CardBill
            {
                bill_id        = GuidExtension.GetOne(),
                bill_number    = card.card_number,
                bill_idcard    = card.card_idcard,
                bill_agoall    = card.card_govmoney + card.card_mymoney,
                bill_agogov    = card.card_govmoney,
                bill_agomy     = card.card_mymoney,
                bill_changegov = govchanged,
                bill_changemy  = mychanged,
                bill_nowall    = govnew + mynew,
                bill_nowgov    = govnew,
                bill_nowmy     = mynew,
                bill_type      = operation.ToString(),
                bill_time      = optTime,
                bill_order     = refund.order,
                bill_src       = refund.src,
                bill_record    = rec_id,
                bill_remark    = refund.remark
            };
            //
            var tran = base.Begin();

            try
            {
                //
                count = _cardInfoRep.UpdateBySqlName(SqlName_Update,
                                                     new { card_govmoney = govnew, card_mymoney = mynew, card_modifier = refund.opt, card_modifytime = optTime, card_idcard = refund.idcard },
                                                     new string[] { "card_govmoney", "card_mymoney", "card_modifier", "card_modifytime" },
                                                     tran);
                if (count < 1)
                {
                    tran.Rollback();
                    rst = OptResult.Build(ResultCode.Fail, optDesc + "——未知错误!");
                    return(rst);
                }
                //
                _cardRecordRep.Insert(cardRecord);
                //
                _cardBillRep.Insert(cardBill);

                tran.Commit();
                rst = OptResult.Build(ResultCode.Success, string.Format("{0}——身份证号{1},订单号{2}", optDesc, refund.idcard, refund.order));
            }
            catch (Exception ex)
            {
                LogHelper.LogError(optDesc, ex);
                rst = OptResult.Build(ResultCode.DbError, optDesc);
            }

            return(rst);
        }