/// <summary> /// 获取红包 /// </summary> /// <returns></returns> public Jinher.AMP.BTP.Deploy.CustomDTO.UserRedEnvelopeDTO GetRedEnvelopeExt(Guid redEnvelopeId) { try { Jinher.AMP.BTP.Deploy.CustomDTO.UserRedEnvelopeDTO userRedEnvelopeDTO = new UserRedEnvelopeDTO(); var query = UserRedEnvelope.ObjectSet().Where(q => q.Id == redEnvelopeId).FirstOrDefault(); if (query != null) { userRedEnvelopeDTO.Id = query.Id; userRedEnvelopeDTO.AppId = query.AppId; userRedEnvelopeDTO.Content = query.Content; userRedEnvelopeDTO.Description = query.Description; userRedEnvelopeDTO.DueDate = query.DueDate; userRedEnvelopeDTO.GoldCount = query.GoldCount; userRedEnvelopeDTO.SubTime = query.SubTime; userRedEnvelopeDTO.ModifiedOn = query.ModifiedOn; userRedEnvelopeDTO.State = query.State; userRedEnvelopeDTO.UserId = query.UserId; userRedEnvelopeDTO.RedEnvelopeType = query.RedEnvelopeType; } return(userRedEnvelopeDTO); } catch (Exception ex) { LogHelper.Error(string.Format("获取我的红包UserRedEnvelopeSV-GetRedEnvelopeExt,参数redEnvelopeId:{0}", redEnvelopeId), ex); return(null); } }
private static int UpdateRedState(UserRedEnvelope query, int state) { ContextSession contextSession = ContextFactory.CurrentThreadContext; query.State = state; query.EntityState = EntityState.Modified; int num = contextSession.SaveChanges(); return(num); }
/// <summary> /// 获取我的红包 /// </summary> /// <param name="userId"></param> /// <returns></returns> public List <Jinher.AMP.BTP.Deploy.CustomDTO.UserRedEnvelopeDTO> GetMyOrgRedEnvelopeExt(Guid userId, int type, int pageIndex, int pageSize) { pageSize = pageSize == 0 ? 10 : pageSize; List <Jinher.AMP.BTP.Deploy.CustomDTO.UserRedEnvelopeDTO> userRedEnvelopeDTOList = new List <UserRedEnvelopeDTO>(); try { List <Guid> orgIdList = Jinher.AMP.BTP.TPS.EBCSV.Instance.GetOrgIdsByUserIdAndCode(userId, "ReceiveRed"); var qaueryList = UserRedEnvelope.ObjectSet().Where(q => orgIdList.Contains(q.UserId) && q.RedEnvelopeType == type).OrderByDescending(q => q.SubTime).Skip((pageIndex - 1) * pageSize).Take(pageSize).ToList(); foreach (var item in qaueryList) { Jinher.AMP.BTP.Deploy.CustomDTO.UserRedEnvelopeDTO userRedEnvelopeDTO = new UserRedEnvelopeDTO(); userRedEnvelopeDTO.Id = item.Id; userRedEnvelopeDTO.AppId = item.AppId; userRedEnvelopeDTO.Content = item.Content; userRedEnvelopeDTO.Description = item.Description; userRedEnvelopeDTO.DueDate = item.DueDate; userRedEnvelopeDTO.GoldCount = item.GoldCount; userRedEnvelopeDTO.SubTime = item.SubTime; userRedEnvelopeDTO.ModifiedOn = item.ModifiedOn; userRedEnvelopeDTO.State = item.State; userRedEnvelopeDTO.UserId = item.UserId; userRedEnvelopeDTO.RedEnvelopeType = item.RedEnvelopeType; userRedEnvelopeDTOList.Add(userRedEnvelopeDTO); } return(userRedEnvelopeDTOList); } catch (Exception ex) { LogHelper.Error(string.Format("获取我的组织红包UserRedEnvelopeSV-GetMyRedEnvelopeExt,userId:{0},type:{1},pageIndex:{2},pageSize:{3},", userId, type, pageIndex, pageSize), ex); return(null); } }
/// <summary> /// 领取红包 /// </summary> /// <param name="userRedEnvelopeId"></param> /// <returns></returns> public Jinher.AMP.BTP.Deploy.CustomDTO.ResultDTO DrawRedEnvelopeExt(Guid userRedEnvelopeId) { ContextSession contextSession = ContextFactory.CurrentThreadContext; Jinher.AMP.BTP.Deploy.CustomDTO.ResultDTO result = new ResultDTO(); UserRedEnvelope query = null; lock (getRedLock) { //用户分红表 query = UserRedEnvelope.ObjectSet().Where(q => q.Id == userRedEnvelopeId).FirstOrDefault(); if (query == null) { result.ResultCode = 1; result.Message = "没有红包可领"; return(result); } else if (query.State == 0 && DateTime.Now > query.DueDate) { result.ResultCode = 1; result.Message = "红包已过期"; return(result); } else if (query.State == 1) { result.ResultCode = 1; result.Message = "红包已领"; return(result); } int num = UpdateRedState(query, 1); if (num > 0) { result.ResultCode = 0; result.Message = "领取红包成功"; } else { result.ResultCode = 1; result.Message = "领取红包失败"; return(result); } } MultiPayeeTradeByPasswordArg arg = new MultiPayeeTradeByPasswordArg(); ReturnInfoDTO gReturnDTO = new ReturnInfoDTO(); arg.PayeeComments = new List <string>(); arg.PayorComments = new List <string>(); arg.AppId = query.AppId; arg.Payees = new List <Tuple <Guid, bool> >(); arg.Payees.Add(new Tuple <Guid, bool>(query.UserId, true)); arg.BizSystem = "BTP"; arg.BizId = query.Id; arg.Golds = new List <long> { query.GoldCount }; arg.PayorPassword = CustomConfig.ShareGoldAccout.BTPShareAccountPwd; //众销 if (query.RedEnvelopeType == 0) { arg.PayorId = CustomConfig.ShareGoldAccout.BTPShareGoldAccount; arg.UsageId = CustomConfig.ShareGoldAccout.BTPGlodUsageId; arg.BizType = "BTP_ShareDividend_Auto"; arg.PayorComments.Add("电商分享红包支出"); arg.PayeeComments.Add("电商分享红包收益"); } else { //众筹 arg.PayorId = CustomConfig.CrowdfundingAccount.BTPCrowdfundingAcount; arg.UsageId = CustomConfig.CrowdfundingAccount.BTPCrowdfundingUsageId; arg.BizType = "BTP_CrowdfundingDividend"; arg.PayorComments.Add("电商众筹分红支出"); arg.PayeeComments.Add("电商众筹分红收益"); //计算用户已得分红 var uc = UserCrowdfunding.ObjectSet().Where(q => q.AppId == query.AppId && q.UserId == query.UserId).FirstOrDefault(); uc.RealGetDividend += query.GoldCount; uc.EntityState = EntityState.Modified; contextSession.SaveObject(uc); } try { gReturnDTO = Jinher.AMP.BTP.TPS.Finance.Instance.MultiPayeeTradeByPassword(arg); } catch (Exception ex) { int num = UpdateRedState(query, 0); LogHelper.Error(string.Format("获取我的红包UserRedEnvelopeSV-DrawRedEnvelopeExt-MultiPayeeTrade,参数redEnvelopeId:{0},红包状态恢复{1}", userRedEnvelopeId, (num > 0 ? "成功" : "失败")), ex); result.ResultCode = 1; result.Message = "调用金币接口失败"; return(result); } if (gReturnDTO == null || !gReturnDTO.IsSuccess) { int num = UpdateRedState(query, 0); result.ResultCode = 1; result.Message = "分享红包支付失败"; LogHelper.Error(string.Format("调用金币MultiPayeeTradeByPassword方法失败,code:{0},错误消息:{1},参数redEnvelopeId:{2},红包状态恢复{3}", gReturnDTO.Code, gReturnDTO.Info, userRedEnvelopeId, (num > 0 ? "成功" : "失败"))); return(result); } return(result); }
/// <summary> /// 处理众筹过期红包 /// </summary> public void HandleCfInValidRedEnvelopeExt() { DateTime now = DateTime.Now; int pageIndex = 0; int pageSize = 500; ContextSession session = ContextFactory.CurrentThreadContext; bool isContinue = true; do { var userRedEnvelopes = (from u in UserRedEnvelope.ObjectSet() where u.DueDate < now && u.State == 0 && u.RedEnvelopeType == 1 select u) .OrderBy(a => a.DueDate).Take(pageSize).Skip(pageIndex).ToList(); if (!userRedEnvelopes.Any()) { break; } if (userRedEnvelopes.Count < pageSize) { isContinue = false; } var totalGoldNum = userRedEnvelopes.Sum(x => x.GoldCount); MultiPayeeTradeByPasswordArg arg = new MultiPayeeTradeByPasswordArg(); arg.PayeeComments = new List <string>(); arg.PayorComments = new List <string>(); arg.AppId = userRedEnvelopes[0].AppId; arg.PayorId = CustomConfig.CrowdfundingAccount.BTPCrowdfundingAcount; arg.UsageId = CustomConfig.CrowdfundingAccount.BTPCrowdfundingUsageId; arg.Golds = new List <long>() { totalGoldNum }; arg.Payees = new List <Tuple <Guid, bool> >(); arg.Payees.Add(new Tuple <Guid, bool>(CustomConfig.CrowdfundingAccount.JhCrowdfundingGoldAccount, true)); arg.BizSystem = "BTP"; arg.BizId = userRedEnvelopes[0].Id; arg.BizType = "BTP_Cf_InvalidRed_Auto"; arg.PayorComments.Add("众筹活动电商过期红包支出"); arg.PayeeComments.Add("众筹活动电商过期红包收益"); arg.PayorPassword = CustomConfig.CrowdfundingAccount.BTPCrowdfundingPwd; ReturnInfoDTO gReturnDTO = new ReturnInfoDTO(); try { gReturnDTO = Jinher.AMP.BTP.TPS.Finance.Instance.MultiPayeeTradeByPassword(arg); if (gReturnDTO.IsSuccess) { foreach (var userRedEnvelope in userRedEnvelopes) { userRedEnvelope.State = 2; userRedEnvelope.EntityState = System.Data.EntityState.Modified; } session.SaveChanges(); LogHelper.Info(string.Format("众筹活动电商过期红包Job处理了UserRedEnvelope表{0}条记录", userRedEnvelopes.Count)); } else { JAP.Common.Loging.LogHelper.Error("众筹活动电商过期红包MultiPayeeTrade fail:" + gReturnDTO.Code + ":" + gReturnDTO.Info); isContinue = false; } } catch (Exception ex) { LogHelper.Error("众筹活动电商过期红包Job服务异常。", ex); isContinue = false; } }while (isContinue); }
/// <summary> /// 发送众筹红包 /// </summary> public void SendCfRedEnvelopeExt() { int pageIndex = 0; int pageSize = 500; DateTime today = DateTime.Now.Date; ContextSession session = ContextFactory.CurrentThreadContext; bool isContinue = true; do { var userDividents = (from s in CfDividend.ObjectSet() where s.SettlementDate < today && s.State == 0 group s by s.UserId into g select g ).OrderBy(a => a.Key).Take(pageSize).Skip(pageIndex) .ToDictionary(x => x.Key, y => y.ToList()); foreach (Guid userId in userDividents.Keys) { StringBuilder strDescription = new StringBuilder(50); foreach (CfDividend userDivident in userDividents[userId]) { userDivident.State = 1; userDivident.EntityState = System.Data.EntityState.Modified; strDescription.Append(userDivident.AppName); strDescription.Append(" 持股"); strDescription.Append(userDivident.ShareCount); strDescription.Append("股 获得分红"); strDescription.Append(userDivident.Gold); strDescription.Append("个金币").Append(","); } strDescription.Remove(strDescription.Length - 1, 1); var goldNum = userDividents[userId].Sum(x => x.Gold); UserRedEnvelope redEnvelope = UserRedEnvelope.CreateUserRedEnvelope(); redEnvelope.EntityState = System.Data.EntityState.Added; redEnvelope.AppId = userDividents[userId][0].AppId; redEnvelope.Content = CustomConfig.SaleShare.DividentContent; redEnvelope.Description = strDescription.ToString(); double dueDateAdd = CustomConfig.CrowdfundingConfig.DividentDue; redEnvelope.DueDate = DateTime.Now.AddHours(dueDateAdd); redEnvelope.GoldCount = goldNum; redEnvelope.UserId = userId; redEnvelope.RedEnvelopeType = 1; session.SaveObject(redEnvelope); ShareRedMessageDTO contentCDTO = new ShareRedMessageDTO(); contentCDTO.message = redEnvelope.Content; contentCDTO.userName = redEnvelope.Content; contentCDTO.msgId = redEnvelope.Id; contentCDTO.url = string.Format("{0}ShareRedEnvelope/ShareRedEnvelopesDetail?msgId={1}", CustomConfig.BtpDomain, redEnvelope.Id); double dueMessDateAdd = CustomConfig.CrowdfundingConfig.DividentMessageDue; SendMessage(redEnvelope.Id, redEnvelope.AppId, redEnvelope.UserId, DateTime.Now.AddHours(dueMessDateAdd), contentCDTO); } try { session.SaveChanges(); if (userDividents.Count < pageSize) { isContinue = false; } LogHelper.Info(string.Format("发送众筹红包Job处理了CfDividend表{0}条记录", userDividents.Count)); } catch (Exception ex) { LogHelper.Error("发送众筹红包Job服务异常。", ex); isContinue = false; } }while (isContinue); }
/// <summary> /// 发送红包 /// </summary> public void SendRedEnvelopeExt() { int pageIndex = 0; int pageSize = 500; DateTime today = DateTime.Now.Date; ContextSession session = ContextFactory.CurrentThreadContext; bool isContinue = true; do { var userDividents = (from s in ShareDividendDetail.ObjectSet() where s.SettlementDate < today && s.State == 0 group s by s.UserId into g select g ).OrderBy(a => a.Key).Take(pageSize).Skip(pageIndex) .ToDictionary(x => x.Key, y => y.ToList()); foreach (Guid userId in userDividents.Keys) { StringBuilder strDescription = new StringBuilder(50); foreach (ShareDividendDetail userDivident in userDividents[userId]) { userDivident.State = 1; userDivident.EntityState = System.Data.EntityState.Modified; strDescription.Append(userDivident.Description).Append(","); } strDescription.Remove(strDescription.Length - 1, 1); var goldNum = userDividents[userId].Sum(x => x.Money); UserRedEnvelope redEnvelope = UserRedEnvelope.CreateUserRedEnvelope(); redEnvelope.EntityState = System.Data.EntityState.Added; redEnvelope.AppId = userDividents[userId][0].AppId; redEnvelope.Content = CustomConfig.SaleShare.DividentContent; redEnvelope.Description = strDescription.ToString(); double dueDateAdd = 24; double.TryParse(CustomConfig.SaleShare.DividentDue, out dueDateAdd); redEnvelope.DueDate = DateTime.Now.AddHours(dueDateAdd); redEnvelope.GoldCount = goldNum; redEnvelope.UserId = userId; redEnvelope.RoleType = userDividents[userId][0].RoleType; ShareRedMessageDTO contentCDTO = new ShareRedMessageDTO(); contentCDTO.message = redEnvelope.Content; contentCDTO.userName = redEnvelope.Content; contentCDTO.msgId = redEnvelope.Id; contentCDTO.url = string.Format("{0}ShareRedEnvelope/ShareRedEnvelopesDetail?msgId={1}", CustomConfig.BtpDomain, redEnvelope.Id); double dueMessDateAdd = 48; double.TryParse(CustomConfig.SaleShare.DividentMessageDue, out dueMessDateAdd); if (userDividents[userId][0].RoleType == 2) { try { List <Guid> userIds = Jinher.AMP.BTP.TPS.EBCSV.Instance.GetUserIdsByOrgIdAndCode(userId, "ReceiveRed"); int msgCount = 0; foreach (Guid id in userIds) { SendMessage(redEnvelope.Id, redEnvelope.AppId, id, DateTime.Now.AddHours(dueMessDateAdd), contentCDTO); //最多选择20个代领者 msgCount += 1; if (msgCount > 20) { break; } } } catch (Exception ex) { LogHelper.Error("发送红包Job服务异常:EBC.ISV.Facade.OrganizationQueryFacade。", ex); continue; } } else { SendMessage(redEnvelope.Id, redEnvelope.AppId, redEnvelope.UserId, DateTime.Now.AddHours(dueMessDateAdd), contentCDTO); } session.SaveObject(redEnvelope); } try { session.SaveChanges(); if (userDividents.Count < pageSize) { isContinue = false; } LogHelper.Info(string.Format("发送红包Job处理了ShareDividendDetail表{0}条记录", userDividents.Count)); } catch (Exception ex) { LogHelper.Error("发送红包Job服务异常。", ex); isContinue = false; } }while (isContinue); }