protected override SetActivityRD ProcessRequest(DTO.Base.APIRequest <SetActivityRP> pRequest) { var rd = new SetActivityRD(); var para = pRequest.Parameters; var loggingSessionInfo = new SessionManager().CurrentUserLoginInfo; var ActivityBLL = new C_ActivityBLL(loggingSessionInfo); var C_TargetGroupBLL = new C_TargetGroupBLL(loggingSessionInfo); var C_ActivityMessageBLL = new C_ActivityMessageBLL(loggingSessionInfo); if (string.IsNullOrWhiteSpace(para.StartTime)) { throw new APIException("请输入活动开始日期!") { ErrorCode = ERROR_CODES.INVALID_BUSINESS } } ; //卡 if (para.VipCardTypeIDList == null || para.VipCardTypeIDList.Count == 0) { //throw new APIException("请选择目标人群!") { ErrorCode = ERROR_CODES.INVALID_BUSINESS }; } //对充值活动,不允许时间重叠 if (ActivityBLL.IsActivityOverlap(loggingSessionInfo.ClientID, para.ActivityID, para.ActivityType, para.StartTime, para.EndTime, para.VipCardTypeIDList)) { throw new APIException("与已有活动时间重叠!") { ErrorCode = ERROR_CODES.INVALID_BUSINESS } } ; //事务 var pTran = ActivityBLL.GetTran(); using (pTran.Connection) { try { if (!string.IsNullOrWhiteSpace(para.ActivityID)) { //编辑 C_ActivityEntity ChangeData = ActivityBLL.GetByID(para.ActivityID); if (ChangeData == null) { throw new APIException("活动对象为NULL!") { ErrorCode = ERROR_CODES.INVALID_BUSINESS }; } string m_OldStarTime = ChangeData.StartTime.Value.ToString("yyyy-MM-dd"); ChangeData.ActivityName = para.ActivityName; if (para.IsAllCardType != null) { ChangeData.IsAllVipCardType = int.Parse(para.IsAllCardType); } ChangeData.ActivityType = para.ActivityType; ChangeData.StartTime = Convert.ToDateTime(para.StartTime); if (!string.IsNullOrWhiteSpace(para.EndTime)) { ChangeData.EndTime = Convert.ToDateTime(para.EndTime + " 23:59:59"); } else { ChangeData.EndTime = DateTime.Parse("2099-01-01 23:59:59"); } ChangeData.IsLongTime = para.IsLongTime; ChangeData.CustomerID = loggingSessionInfo.ClientID; ChangeData.TargetCount = 0; //执行 ActivityBLL.Update(ChangeData, pTran); #region 更新活动消息发送时间 List <C_ActivityMessageEntity> m_MessageList = C_ActivityMessageBLL.QueryByEntity(new C_ActivityMessageEntity() { ActivityID = new Guid(para.ActivityID) }, null).ToList(); if (m_MessageList.Count > 0) { if (!m_OldStarTime.Equals(para.StartTime)) { DateTime dt1 = Convert.ToDateTime(m_OldStarTime); DateTime dt2 = Convert.ToDateTime(para.StartTime); TimeSpan ts = (TimeSpan)(dt2 - dt1); int s = Convert.ToInt32(ts.TotalDays); foreach (var item in m_MessageList) { item.SendTime = item.SendTime.Value.AddDays(s); C_ActivityMessageBLL.Update(item, pTran); } } } #endregion #region 目标群日信息 //卡 List <C_TargetGroupEntity> UpdateData = C_TargetGroupBLL.QueryByEntity(new C_TargetGroupEntity() { ActivityID = new Guid(para.ActivityID), GroupType = 1 }, null).ToList(); foreach (var i in UpdateData) { C_TargetGroupBLL.Delete(i, pTran); } if (para.VipCardTypeIDList != null) { foreach (var i in para.VipCardTypeIDList) { C_TargetGroupEntity AddTargetGroupData = new C_TargetGroupEntity(); AddTargetGroupData.ActivityID = ChangeData.ActivityID; AddTargetGroupData.GroupType = 1; AddTargetGroupData.ObjectID = i; AddTargetGroupData.CustomerID = loggingSessionInfo.ClientID; C_TargetGroupBLL.Create(AddTargetGroupData); } } #endregion rd.ActivityID = ChangeData.ActivityID.ToString(); } else { //新增 if (!ActivityBLL.IsActivityNameValid(para.ActivityName)) { throw new APIException("名称重复!") { ErrorCode = ERROR_CODES.INVALID_BUSINESS }; } C_ActivityEntity AddData = new C_ActivityEntity(); AddData.ActivityID = System.Guid.NewGuid(); AddData.ActivityType = para.ActivityType; AddData.ActivityName = para.ActivityName; AddData.StartTime = Convert.ToDateTime(para.StartTime); if (!string.IsNullOrWhiteSpace(para.EndTime)) { AddData.EndTime = Convert.ToDateTime(para.EndTime + " 23:59:59"); } else { AddData.EndTime = DateTime.Parse("2099-01-01 23:59:59"); } AddData.IsLongTime = para.IsLongTime; AddData.IsAllVipCardType = int.Parse(para.IsAllCardType); AddData.SendCouponQty = 0; AddData.Status = 5; AddData.CustomerID = loggingSessionInfo.ClientID; AddData.TargetCount = 0; //执行 ActivityBLL.Create(AddData); #region 新增目标群日信息 foreach (var i in para.VipCardTypeIDList) { C_TargetGroupEntity AddTargetGroupData = new C_TargetGroupEntity(); AddTargetGroupData.ActivityID = AddData.ActivityID; AddTargetGroupData.GroupType = 1; AddTargetGroupData.ObjectID = i; AddTargetGroupData.CustomerID = loggingSessionInfo.ClientID; C_TargetGroupBLL.Create(AddTargetGroupData, pTran); } #endregion rd.ActivityID = AddData.ActivityID.ToString(); } pTran.Commit(); } catch (APIException apiEx) { pTran.Rollback(); throw new APIException(apiEx.ErrorCode, apiEx.Message); } } return(rd); } } }
/// <summary> /// 活动服务送券业务方法 /// </summary> private void ActivitySendCoupon() { #region 业务对象 var activityBLL = new C_ActivityBLL(c_loggingSessionInfo); var targetGroupBLL = new C_TargetGroupBLL(c_loggingSessionInfo); var prizesBLL = new C_PrizesBLL(c_loggingSessionInfo); var prizesDetailBLL = new C_PrizesDetailBLL(c_loggingSessionInfo); var CouponTypeBLL = new CouponTypeBLL(c_loggingSessionInfo); var ActivityMessageBLL = new C_ActivityMessageBLL(c_loggingSessionInfo); #endregion #region 获取当前商户活动集合 List <IWhereCondition> complexCondition = new List <IWhereCondition> { }; complexCondition.Add(new EqualsCondition() { FieldName = "CustomerID", Value = c_loggingSessionInfo.ClientID }); //complexCondition.Add(new DirectCondition(" ((IsLongTime=1 and GETDATE()>=StartTime) OR (GETDATE()>=StartTime AND GETDATE()<=EndTime)) AND STATUS=0 and IsDelete=0 ")); complexCondition.Add(new DirectCondition(" (IsLongTime=1 or (IsLongTime=0 and GETDATE()<=EndTime)) and STATUS=0 and IsDelete=0 ")); var ActivityList = activityBLL.Query(complexCondition.ToArray(), null);//营销活动 #endregion #region 轮循活动,送券业务处理 foreach (var activity in ActivityList) { Loggers.Debug(new DebugLogInfo() { Message = "轮循营销活动" }); #region 获取卡类型ID(目标卡人群) var targetGroupInfo = targetGroupBLL.QueryByEntity(new C_TargetGroupEntity() { ActivityID = activity.ActivityID, GroupType = 1 }, null).FirstOrDefault(); int VipCardTypeID = targetGroupInfo == null ? -1 : int.Parse(targetGroupInfo.ObjectID);//卡类型ID #endregion #region 活动是否设置奖品控制 //获取赠送礼券奖品 var prizesData = prizesBLL.QueryByEntity(new C_PrizesEntity() { ActivityID = activity.ActivityID, PrizesType = 1 }, null).FirstOrDefault(); //当前活动消息类型集合 var ActivityMessageLsit = ActivityMessageBLL.QueryByEntity(new C_ActivityMessageEntity() { ActivityID = activity.ActivityID }, null).ToList(); List <IWhereCondition> PrizeDetailCondition = new List <IWhereCondition> { }; if (prizesData != null) { PrizeDetailCondition.Add(new DirectCondition(" PrizesID='" + prizesData.PrizesID + "' ")); } var PrizeDetailList = prizesDetailBLL.Query(PrizeDetailCondition.ToArray(), null).ToList(); #endregion #region 当前活动券处理 #region 获取活动会员人数 int SumVipCount = 0;//会员数 if (activity.IsAllVipCardType == 0) { SumVipCount = activityBLL.GetholderCardCount(VipCardTypeID.ToString(), null);//当前卡类型会员数 } else { SumVipCount = activityBLL.GetholderCardCount(null, null);//所有会员数 } #endregion #region 获取当前活动送券集合 List <IWhereCondition> CouponTypeCondition = new List <IWhereCondition> { }; StringBuilder strWhere = new StringBuilder(); string NewStrWhere = ""; foreach (var itemPrizeDetail in PrizeDetailList) { strWhere.Append("couponTypeID='" + itemPrizeDetail.CouponTypeID + "' or "); } if (PrizeDetailList.Count > 0) { NewStrWhere = ((strWhere.ToString().TrimEnd()).TrimEnd('r')).Trim('o'); } if (!string.IsNullOrWhiteSpace(NewStrWhere)) { CouponTypeCondition.Add(new DirectCondition(NewStrWhere)); } //券集合 var ActivityCouponTypeList = CouponTypeBLL.Query(CouponTypeCondition.ToArray(), null); #endregion #region 判断当前券数量是否充足,不充足:计算出缺省券数量,充足获取券数最少的一种券 //券种数量集合 List <int> CouponNumList = new List <int>(); bool CouponFlag = true; string Remark = ""; foreach (var CouponTypeitem in ActivityCouponTypeList) { if (CouponTypeitem.IsVoucher >= CouponTypeitem.IssuedQty) { if (SumVipCount > activity.SendCouponQty) { int Math = SumVipCount - (activity.SendCouponQty ?? 0);//目标数-使用数 // Loggers.Debug(new DebugLogInfo() { Message = CouponTypeitem.CouponTypeName + "券数量库存不足!" + DateTime.Now }); Remark += string.Format("{1}都已发完还少{0}张,", Math, CouponTypeitem.CouponTypeName); CouponFlag = false; } } else { CouponNumList.Add((CouponTypeitem.IssuedQty ?? 0) - (CouponTypeitem.IsVoucher ?? 0)); } } if (CouponFlag == false) { Remark += "请追加券数量!"; //activity.Remark = Remark; activityBLL.Update(activity);//更新当前活动备注 continue; } int MinCouponNum = 0; if (CouponNumList.Count > 0) { MinCouponNum = CouponNumList.Min();//当前活动奖品券种数量最少的券数 } if (MinCouponNum == 0) { continue; } #endregion #endregion #region 批量新增券关系,修改券数量 int ResultConunt = 0; string CouponTypeNameStr = "";//所有券名称 foreach (var CouponTypeitem in ActivityCouponTypeList) { CouponTypeNameStr += CouponTypeitem.CouponTypeName + ","; ResultConunt = BatchAddSendCoupon(MinCouponNum, activity.ActivityID.Value.ToString(), activity.ActivityType.Value, CouponTypeitem.CouponTypeID.Value.ToString(), VipCardTypeID); System.Threading.Thread.Sleep(2000);//沉睡2秒 } #endregion if (ResultConunt > 0) { #region 修改活动领券人数 activity.SendCouponQty = activity.SendCouponQty + ResultConunt; activityBLL.Update(activity); #endregion #region 批量新增活动获赠奖品预发送消息 //CouponTypeNameStr = CouponTypeNameStr.TrimEnd(','); foreach (var ActMessageitem in ActivityMessageLsit) { string Content = ActMessageitem.Content + "," + CouponTypeNameStr; //消息内容 BatchAddMessageSend(ResultConunt, activity.ActivityID.Value.ToString(), VipCardTypeID, ActMessageitem.MessageID.Value.ToString(), ActMessageitem.MessageType, Content, ActMessageitem.SendTime.Value, activity.ActivityType ?? 2); System.Threading.Thread.Sleep(2000); //沉睡2秒 } #endregion #region 批量新增获赠信息 BatchAddPrizeReceive(ResultConunt, activity.ActivityID.Value.ToString(), VipCardTypeID, activity.ActivityType ?? 2); System.Threading.Thread.Sleep(2000);//沉睡2秒 #endregion } } #endregion }