/// <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); } }
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); }
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); }
/// <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); }
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); }
/// <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"); } }