Beispiel #1
0
        /// <summary>
        /// HowTO: 5. Transaction,  支持两个不同数据库连接之间的事务
        /// </summary>
        static void HowTO_5()
        {
            Console.WriteLine("HowTO: 5. Transaction,  支持两个不同数据库连接之间的事务");

            TestAbstractDA    da1 = new TestAbstractDA();
            TestAbstractTable da2 = new TestAbstractTable();

            try
            {
                using (TransScope scope = new TransScope(da1, da2))
                {
                    da1.DeleteAll();
                    da2.DeleteAll();

                    int id1 = da1.Insert("1", "1");
                    int id2 = da2.Insert("2", "2");
                    da1.Insert("3", "3");
                    da2.Insert("4", "4");

                    Console.WriteLine("da1:");
                    foreach (TestUser u in da1.SelectAll())
                    {
                        Console.WriteLine("\tID={0},UserName={1},UserPass={2}", u.ID, u.UserName, u.UserPass);
                    }

                    Console.WriteLine("da2:");
                    foreach (TestUser u in da2.SelectAll())
                    {
                        Console.WriteLine("\tID={0},UserName={1},UserPass={2}", u.ID, u.UserName, u.UserPass);
                    }

                    da1.Update(id1, "修改", "修改");
                    da2.Update(id2, "修改", "修改");

                    Console.WriteLine("da1修改后:");
                    foreach (TestUser u in da1.SelectAll())
                    {
                        Console.WriteLine("\tID={0},UserName={1},UserPass={2}", u.ID, u.UserName, u.UserPass);
                    }

                    Console.WriteLine("da1修改后:");
                    foreach (TestUser u in da2.SelectAll())
                    {
                        Console.WriteLine("\tID={0},UserName={1},UserPass={2}", u.ID, u.UserName, u.UserPass);
                    }


                    scope.Commit();
                }
            }
            catch (DatabaseException ex)
            {
                Console.WriteLine(ex.Message);
                Console.WriteLine("SQL:" + ex.SQL);
            }
        }
Beispiel #2
0
        private static long[] Get(string dbName, string tableName, int count)
        {
            long[] result = new long[count];
            if (count == 0)
            {
                return(result);
            }

            ConnectionConfig config   = ConnectionManager.GetConnectionString(dbName + "_inc", DBrwType.Write);
            DbHelper         dbHelper = DbHelper.Create(DBType.MySql, config.ConnectionString);;

            if (count > 20)//超过30条时,锁定表,只插入一次(用于批量导入)
            {
                using (TransScope trans = new TransScope(TransScopeOption.RequiresNew))
                {
                    dbHelper.ExecuteNonQuery("LOCK TABLES " + tableName + " WRITE");
                    HashObject data   = dbHelper.GetData("select id from " + tableName + " order by id desc limit 1");
                    long       max    = data.GetValue <long>("id", 0);//当前最大值
                    long       newmax = max + count;
                    dbHelper.ExecuteNonQuery("insert into " + tableName + " values (" + newmax + ");UNLOCK TABLES;");
                    trans.Complete();

                    for (int i = 0; i < count; i++)
                    {
                        result[i] = max + i + 1;
                    }
                }
            }
            else
            {
                StringBuilder sb = new StringBuilder();
                sb.AppendFormat("insert into {0} values ", tableName);
                for (int i = 0; i < count; i++)
                {
                    sb.Append("(null),");
                }
                sb.Remove(sb.Length - 1, 1);
                sb.Append(";Select LAST_INSERT_ID() As ID;");
                string sql = sb.ToString();

                long firstId = 0;
                using (TransScope trans = new TransScope(TransScopeOption.RequiresNew))
                {
                    object temp = dbHelper.ExecuteScalar(sql);
                    firstId = Convert.ToInt64(temp);
                    trans.Complete();
                }

                for (int i = 0; i < count; i++)
                {
                    result[i] = firstId + i;
                }
            }

            return(result);
        }
Beispiel #3
0
        public int DeleteEmployee(string accessToken, int empId)
        {
            EMPLOYEE emp = _empRepo.Get(empId);

            if (emp != null)
            {
                var response = WXQYClientServiceApi.Create().DeleteUser(accessToken, emp.USERID);
                if (response != null && response.ErrorCode == 0)
                {
                    using (TransScope scope = new TransScope())
                    {
                        int rows = _empRepo.Delete(empId);
                        _empRepo.DeleteRelByEmpID(empId);

                        scope.Commit();

                        return(rows);
                    }
                }
            }

            return(0);
        }
        /// <summary>
        /// 保存问卷信息
        /// </summary>
        /// <param name="req"></param>
        /// <returns></returns>
        public override async Task <RpcResult <SaveQPaperRsp> > SaveQPaperAsync(SaveQPaperReq req)
        {
            var res = new RpcResult <SaveQPaperRsp>();

            if (req.Questions.Count == 0)
            {
                res.Code = ErrorCodes.PARAMS_VALIDATION_FAIL;
                return(res);
            }
            res.Data = new SaveQPaperRsp();

            using (TransScope scope = this._qpaperRepo.BeginTransScope())
            {
                int paperId = 0;

                var qpaper = new QPaper();
                qpaper.QpaperId    = req.QpaperId;
                qpaper.Description = req.Description;
                //数据校验
                if (!string.IsNullOrEmpty(req.StartTime))
                {
                    qpaper.StartTime = Convert.ToDateTime(req.StartTime);
                }

                if (!string.IsNullOrEmpty(req.EndTime))
                {
                    qpaper.EndTime = Convert.ToDateTime(req.EndTime);
                }
                qpaper.Subject    = req.Subject;
                qpaper.UpdateTime = DateTime.Now;
                if (req.QpaperId > 0) // 更新
                {
                    paperId = req.QpaperId;

                    //更新时需判断是否存在答卷
                    bool hasAPaper = await this._qpaperRepo.CheckHasAPaper(paperId);

                    if (hasAPaper)
                    {
                        res.Code = ErrorCodes.INVALID_OPERATION;
                        res.Data.ReturnMessage = "该问卷已存在答卷,不能修改了!";
                        return(res);
                    }

                    var t1 = this._qpaperRepo.UpdateAsync(qpaper);
                    //删除旧题目
                    var t2 = this._qpaperRepo.DeleteQuestionsByPId(paperId);

                    await Task.WhenAll(t1, t2); //两个任务可以并行
                }
                else
                {
                    qpaper.CreateUserId = req.Identity;
                    var newId = await this._qpaperRepo.InsertAsync(qpaper);

                    paperId = (int)newId;
                }

                if (paperId <= 0)
                {
                    //Internal error;
                    res.Code = ErrorCodes.INTERNAL_ERROR;
                    res.Data.ReturnMessage = "操作失败,请稍后重试";
                    return(res);
                }
                res.Data.QpaperId = paperId;
                //重新保存问题
                int i     = 0;
                var qlist = new List <Question>();
                foreach (var q in req.Questions)
                {
                    var question = new Question();
                    question.Id           = q.Id;
                    question.PaperId      = paperId;
                    question.Sequence     = ++i;
                    question.ExtendInput  = q.ExtendInput;
                    question.ItemDetail   = q.ItemDetail;
                    question.QuestionType = (sbyte)q.QuestionType.GetHashCode();
                    question.Topic        = q.Topic;
                    qlist.Add(question);
                }
                await this._qpaperRepo.AddQuestions(qlist);

                scope.Complete();// 提交事务
            }
            return(res);
        }
Beispiel #5
0
        /// <summary>
        /// 保存答卷信息
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        public override async Task <RpcResult <SaveAPaperRsp> > SaveAPaperAsync(SaveAPaperReq req)
        {
            var res = new RpcResult <SaveAPaperRsp>();

            res.Data = new SaveAPaperRsp();

            if (req.Answers.Count == 0)
            {
                res.Code = ErrorCodes.PARAMS_VALIDATION_FAIL;
                res.Data.ReturnMessage = "答案不能为空";
                return(res);
            }
            var          qpaperService = _proxy.GetClient <QPaperInnerServiceClient>();
            GetQPaperReq getQPRep      = new GetQPaperReq();

            getQPRep.XRequestId = req.XRequestId;
            getQPRep.Identity   = req.Identity;
            getQPRep.ClientIp   = req.ClientIp;
            getQPRep.CheckRole  = false;
            getQPRep.QpaperId   = req.QpaperId;

            var getQPRes = await qpaperService.GetQPaperAsync(getQPRep);

            if (getQPRes.Code != 0)
            {
                res.Code = getQPRes.Code;
                if (getQPRes.Data != null)
                {
                    res.Data.ReturnMessage = getQPRes.Data.ReturnMessage;
                }

                return(res);
            }
            if (getQPRes.Data == null)
            {
                res.Code = ErrorCodes.DATA_NOT_FOUND;
                res.Data.ReturnMessage = "问卷不存在";
                return(res);
            }

            using (TransScope scope = this._apaperRepo.BeginTransScope())
            {
                var apaper = new APaper();
                apaper.CreateTime    = DateTime.Now;
                apaper.QpaperId      = req.QpaperId;
                apaper.QpaperSubject = getQPRes.Data.Subject;
                apaper.QpaperUserId  = getQPRes.Data.CreateUserId;
                apaper.Remark        = req.Remark;
                apaper.UserId        = string.IsNullOrEmpty(req.UserId) ? req.Identity : req.UserId;

                bool hasA = await this._apaperRepo.CheckAPaperAsync(apaper.QpaperId, apaper.UserId);

                if (hasA)
                {
                    res.Code = ErrorCodes.BIZ_RULE_FAIL;
                    res.Data.ReturnMessage = "该用户已经回答过该问卷了";
                    return(res);
                }

                var newId = await this._apaperRepo.InsertAsync(apaper);

                if (newId < 0)
                {
                    res.Code = ErrorCodes.INTERNAL_ERROR;
                    res.Data.ReturnMessage = "新增问卷失败,请稍后重试";
                    return(res);
                }
                var apaperId = (int)newId;

                var alist = new List <Answer>();
                foreach (var a in req.Answers)
                {
                    var answer = new Answer();
                    answer.AnswerId         = Guid.NewGuid().ToString("N");
                    answer.ApaperId         = apaperId;
                    answer.ObjectiveAnswer  = a.ObjectiveAnswer;
                    answer.SubjectiveAnswer = a.SubjectiveAnswer;
                    answer.QuestionId       = a.QuestionId;

                    alist.Add(answer);
                }
                await this._apaperRepo.AddAnswers(alist);

                res.Data.ApaperId = apaperId;

                scope.Complete();// 提交事务
            }


            // 异步执行不管是否成功
            var addReq = new AddAPaperReq();

            addReq.ClientIp   = req.ClientIp;
            addReq.Identity   = req.Identity;
            addReq.XRequestId = req.XRequestId;
            addReq.QpaperId   = req.QpaperId;
            addReq.Count      = 1;
#pragma warning disable CS4014 // 由于此调用不会等待,因此在调用完成前将继续执行当前方法
            qpaperService.AddAPaperCountAsync(addReq);
#pragma warning restore CS4014 // 由于此调用不会等待,因此在调用完成前将继续执行当前方法

            return(res);
        }
Beispiel #6
0
        public int SaveEmployee(string accessToken, EMPLOYEE entity, DeptInfo dept, ref string errMsg)
        {
            using (TransScope scope = new TransScope())
            {
                int        wxGroupId = 0, deptId = dept.ID;
                GROUP_INFO groupInfo = null;
                if (entity.ID > 0)
                {
                    var rel = _empRepo.GetGroupIdByEmpID(entity.ID);
                    deptId = rel;
                }
                groupInfo = _groupRepo.Get(deptId);
                if (groupInfo == null)
                {
                    return(0);
                }
                wxGroupId = groupInfo.WX_GROUP_ID;
                List <int> department = new List <int>()
                {
                    wxGroupId
                };
                string gender = entity.GENDER.HasValue ? entity.GENDER.Value.ToString() : null;

                int rows = 0;
                if (entity.ID == 0)
                {
                    var response = WXQYClientServiceApi.Create().CreateUser(accessToken, entity.USERID, entity.NAME, department, entity.POSITION, entity.MOBILE, gender, entity.EMAIL, entity.WECHAT_ID);
                    if (response != null && response.ErrorCode == 0)
                    {
                        //同步头像
                        UserInfo user = WXQYClientServiceApi.Create().GetUser(accessToken, entity.USERID);
                        if (user != null)
                        {
                            entity.AVATAR_URL = user.Avatar;
                        }
                        entity.STATUS      = 4;
                        entity.CREATE_TIME = DateTime.Now;
                        rows      = (int)_empRepo.Insert(entity);
                        entity.ID = rows;
                        //修改关系表
                        if (rows > 0)
                        {
                            //删除所有员工关系
                            _empRepo.DeleteRelByEmpID(entity.ID);
                            //新增关系
                            REL_EMP_GROUP rel = new REL_EMP_GROUP();
                            rel.TYPE        = groupInfo.TYPE;
                            rel.EMP_ID      = entity.ID;
                            rel.GROUP_ID    = deptId;
                            rel.CREATE_TIME = DateTime.Now;
                            rel.CREATE_USER = "******";
                            _empRepo.Insert(rel);
                        }
                    }
                    else
                    {
                        errMsg = response.ErrorMessage;
                    }
                }
                else
                {
                    var response = WXQYClientServiceApi.Create().UpdateUser(accessToken, entity.USERID, entity.NAME, department, entity.POSITION, entity.MOBILE, gender, entity.EMAIL, entity.WECHAT_ID);
                    if (response != null && response.ErrorCode == 0)
                    {
                        //同步头像
                        UserInfo user = WXQYClientServiceApi.Create().GetUser(accessToken, entity.USERID);
                        if (user != null)
                        {
                            entity.AVATAR_URL = user.Avatar;
                        }
                        entity.FullUpdate = false;
                        rows = _empRepo.Update(entity);
                    }
                    else
                    {
                        errMsg = response.ErrorMessage;
                    }
                }

                scope.Commit();

                return(rows);
            }
        }
        public string OldAndNew(WXCUST_MSG_HIS requestXML, string resxml, int num)
        {
            OrderService       osbo = new OrderService();
            MySmallShopService mss  = new MySmallShopService();
            OAauth_Log         oa   = mss.GetOA(num - 10000);

            if (oa != null)
            {
                lock (lockobject)
                {
                    OAauth_Log o = SaveOA(requestXML.FROMUSERNAME, requestXML.TOUSERNAME);
                    using (TransScope scope = new TransScope(System.Configuration.ConfigurationManager.ConnectionStrings[SPACRM.Common.AppConfig.MainDbKey].ConnectionString))
                    {
                        if (o != null && requestXML.WXEVENT.ToLower() == "subscribe")
                        {
                            if (o.FromUserName != oa.FromUserName)
                            {
                                int jie = 0;
                                if (DateTime.Now < DateTime.Parse(ActiveEndDate))
                                {
                                    jie = 2;
                                }
                                Cust_Old_New old = new Cust_Old_New
                                {
                                    CreateTime     = DateTime.Now,
                                    FromUserName   = oa.FromUserName,
                                    OrderID        = 0,
                                    Price          = 20,
                                    State          = 0,
                                    ToUserName     = o.FromUserName,
                                    ToUserNickName = o.Nickname,
                                    Jie            = jie
                                };
                                osbo.SaveCustOldNew(old);
                                //给推荐人一个抽奖码
                                if (DateTime.Now < DateTime.Parse(ActiveEndDate))
                                {
                                    try
                                    {
                                        string token = Token(mjuserid);
                                        var    temp  = new
                                        {
                                            first    = new { value = "活动状态变更通知", color = "#173177" },
                                            keyword1 = new { value = "棒棒哒!您邀请的好友**关注【佰草集汉方SPA】啦!", color = "#173177" },
                                            keyword2 = new { value = "小集", color = "#173177" },
                                            keyword3 = new { value = "以礼邀约,迎接初夏", color = "#173177" },
                                            keyword4 = new { value = "2018年4月27日18:00:00 - 5月3日23:59:59", color = "#173177" },
                                        };
                                        string message = SendTemplateMessage(token, oa.FromUserName, ActiveStateChangeTmpId, "#FF0000", temp, WebUrl + "/wechat/SPA/HFOldAndNew.aspx");//Seapage2
                                    }
                                    catch (Exception)
                                    {
                                    }
                                }
                            }
                        }
                        resxml += "<MsgType><![CDATA[text]]></MsgType><Content><![CDATA[感谢您的关注,小集在此等候多时啦!\n\n注册绑定即可获得380元代金券\n凭券消费入店,还可领取入店礼“佰草集汉方SPA金致玉妍院线产品2件套” 一份\n\n<a href='" + WebUrl + "/wechat/SPA/HFOldAndNew.aspx'>邀好友赢大奖</a> \n活动奖品:赢佰草集太极.昼御夜养.源生霜、清肌养颜太极泥、三丽鸥KITTY礼品杯\n\n保存下图并分享参与活动吧!]]></Content><FuncFlag>0</FuncFlag></xml>";

                        //生成海报
                        if (DateTime.Now < DateTime.Parse(ActiveEndDate))
                        {
                        }
                        scope.Commit();
                    }
                }
            }
            return(resxml);
        }
Beispiel #8
0
        /// <summary>
        /// 绑定会员
        /// </summary>
        /// <param name="mobile"></param>
        /// <returns></returns>
        public string BindMember(string mobile, string openid, string Nickname)
        {
            using (TransScope scope = new TransScope())
            {
                WXCUST_FANS fans = _repo.GetFans(openid);

                if (fans == null)
                {
                    return("3");
                }

                CUST_MEMBER member = _repo.GetMemberByMobile(mobile, fans.ID);

                if (member != null)
                {
                    return("2");
                }

                #region 记录会员
                dt_Dyn_DispMember_req w = new dt_Dyn_DispMember_req();
                w.DATA_SOURCE   = "0002";
                w.LOYALTY_BRAND = AppConfig.LOYALTY_BRAND; //忠诚度品牌
                w.SOURCE_SYSTEM = AppConfig.SOURCE_SYSTEM; //来源系统
                w.VGROUP        = AppConfig.VGROUP;        //销售组织
                w.MOB_NUMBER    = mobile;                  //2002652891
                dt_Dyn_DispMember_res dt = WebApiHelp.DispMember(w);

                if (dt.ZCRMT316 == null || dt.ZCRMT316.Count() <= 0)
                {
                    return("4");
                }

                if (dt.ZCRMT316.Count() > 1)
                {
                    return("5");
                }

                ZCRMT302_Dyn meber = dt.ZCRMT316[0];

                CUST_MEMBER mebers = new CUST_MEMBER()
                {
                    ADDRESS     = meber.PSTREET,
                    AVA_POINTS  = (int?)meber.ZCCUR_POINT,
                    BIRTHDAY    = string.IsNullOrEmpty(meber.BIRTHDT) ? null : (DateTime?)DateTime.Parse(meber.BIRTHDT),
                    CITY        = "",
                    COUNTRY     = "",
                    CREATE_DATE = DateTime.Now,
                    CREATE_USER = "******",
                    EMAIL       = meber.CSMTP_ADDR,
                    FANS_ID     = fans.ID,
                    GENDER      = meber.XSEX == "2" ? true : false,
                    MEMBERNO    = meber.ACCOUNT_ID,
                    MEM_LEVEL   = meber.ZTIER,
                    MOBILE      = mobile,
                    STATUS      = 1,
                    STORE       = meber.ZH003,
                    NAME        = meber.NAME1_TEXT,
                    PARTNER     = meber.PARTNER,
                    TYPE        = meber.DATA_SOURCE == "0001" ? 0 : 1
                };

                double counts = _repo.Insert(mebers);
                #endregion
                //如果绑定成功需要告诉crm已经绑定
                if (counts > 0)
                {
                    //绑定接口
                    dt_Dyn_UpdateMemberShip_req updates = new dt_Dyn_UpdateMemberShip_req();
                    ZCRMT322_Dyn z = new ZCRMT322_Dyn();
                    z.DATA_SOURCE = "0002";

                    z.LOYALTY_BRAND      = AppConfig.LOYALTY_BRAND; //忠诚度品牌
                    z.SOURCE_SYSTEM      = AppConfig.SOURCE_SYSTEM; //来源系统
                    z.VGROUP             = AppConfig.VGROUP;        //销售组织
                    z.WECHATNAME         = Nickname;
                    z.WECHATFOLLOWSTATUS = "1";
                    z.OPENID             = openid;
                    z.ACCOUNT_ID         = dt.ZCRMT316[0].ACCOUNT_ID;
                    z.PARTNER            = dt.ZCRMT316[0].PARTNER;
                    updates.ZCRMT316     = new ZCRMT322_Dyn[] { z };

                    dt_Dyn_UpdateMemberShip_res ups = WebApiHelp.UpdateMemberShip(updates);

                    //如果是待激活状态那么就要激活
                    if (meber.ZZAFLD000004 == "E0005")
                    {
                        //激活
                        this.ChageSatus(meber.ACCOUNT_ID);
                    }

                    //绑定成功送三百积分
                    if (fans.IS_REGISTER == null || fans.IS_REGISTER == 0)
                    {
                        #region 注册送积分
                        //如果注册会员成功送积分
                        //si_Dyn_ActCreateTel_obService == si_ActCreateTel_obService
                        dt_Dyn_ActCreateTel_req Actreq = new dt_Dyn_ActCreateTel_req();
                        // 数据源类型
                        Actreq.TYPE = "0002";
                        //处理标识
                        Actreq.OBJECT_ID = DateTime.Now.ToString("yyyyMMddHHmmss") + CommonHelp.GetRand(10);
                        //活动单据类型
                        Actreq.PROCESS_TYPE = "ZXY";
                        //外部会员卡号	"会员卡号(如已传输手机号,可不用填写会员卡号)"
                        Actreq.ACCOUNT_ID   = meber.ACCOUNT_ID;
                        Actreq.POSTING_DATE = DateTime.Today.ToString();
                        //积分类型
                        Actreq.POINT_TYPE = "ZBCJF01";

                        //积分数  要改
                        Actreq.POINTS = decimal.Parse(AppConfig.POINTS);
                        //单据全局活动ID
                        Actreq.CAMPAIGN_HE_ID = "CMP2820171023005";
                        Actreq.LOYALTY_BRAND  = AppConfig.LOYALTY_BRAND; //忠诚度品牌
                        Actreq.SOURCE_SYSTEM  = AppConfig.SOURCE_SYSTEM; //来源系统
                        Actreq.VGROUP         = AppConfig.VGROUP;        //销售组织

                        dt_Dyn_ActCreateTel_res Actres = WebApiHelp.ActCreateTel(Actreq);

                        string remak = string.Empty;

                        if (Actres.I_ZCRMT047_dyn[0].CHECK_FLAG == "N")
                        {
                            remak = "新注册会员送积分失败,原因:" + Actres.I_ZCRMT047_dyn[0].MESSAGE;
                        }
                        #endregion

                        string str = _repo.UpdateIsRegion(fans.ID);
                    }
                }
                scope.Commit();
                return("1");
            }
        }