Esempio n. 1
0
        public async Task Invoke()
        {
            string activityNo = CronJobParam.ActivityNo;

            string strWhere = string.Empty;

            var(startTime, endTime) = await _cronJobParam.GetActivity();

            //活动结束,未选择商户的不发消息
            if (endTime < DateTime.Now)
            {
                strWhere = " AND mak.mch_no IS NOT NULL ";
            }

            string strSql     = $@"SELECT
                    mak.id makeWishId,
                    bas.wish_name wishName,
                    bas.wish_unit wishUnit,
                    mak.user_count userCount,
                    bas.rules rulesStr,
	                mem.openId,
	                mem.nick_name,
                    mak.mch_no
                FROM
	                t_make_wish mak
	                LEFT JOIN t_member mem ON mem.id = mak.member_id
                    LEFT JOIN t_wish_base bas ON bas.wish_no = mak.wish_no
                WHERE
                    mak.activity_no = @activityNo
	                AND mak.exchange_status = 0
	                AND mak.`status` IN ( 1, 4 )
                    {strWhere}
	                AND (
		                DATE(
			                DATE_ADD( mak.complated_time, INTERVAL 1 DAY )) = DATE(
		                NOW())
		                OR DATE(
			                DATE_ADD( mak.complated_time, INTERVAL 3 DAY )) = DATE(
		                NOW()));"        ;
            var    memberlist = await _jiakeRepository.SQLQueryAsync <NoExchangeMember>(strSql, new { activityNo });

            foreach (var mem in memberlist)
            {
                if (!string.IsNullOrEmpty(mem.wishUnit) && mem.wishUnit != "--")
                {
                    var r = mem.rules.Where(e => e.n == mem.userCount).FirstOrDefault()?.r;
                    if (r != null)
                    {
                        mem.wishName = string.Concat(mem.wishName, r, mem.wishUnit);
                    }
                }

                await _cronJobParam.NoExchangeSendTemplateMessage(mem.makeWishId, mem.wishName, mem.openId, mem.nickName, mem.mch_no);
            }
        }
Esempio n. 2
0
        /// <summary>
        /// 我的首页
        /// 我的愿望列表未达成的愿望不返回
        /// </summary>
        /// <param name="memberId"></param>
        /// <returns></returns>
        public async Task <IEnumerable <MyWishResponse> > GetMyWishListAsync(string activityNo, int memberId)
        {
            //查询会员参加的愿望列表
            string strSql   = $@"SELECT
	                                a.id,
	                                b.wish_name AS `name`,
	                                CASE a.for_people WHEN 1 THEN b.wish_pic ELSE b.wish_pic2 END AS pic,
	                                a.`status`,
	                                b.wish_unit AS wishUnit,
	                                b.rules,
	                                a.is_power AS isPower,
                                    IFNULL(c.helpers,0) helpers,
	                                a.user_count AS userCount,a.mch_no mchNo
                                FROM
	                                t_make_wish a
	                                INNER JOIN t_wish_base b ON a.wish_no = b.wish_no AND a.activity_no=b.activity_no
	                                LEFT JOIN ( SELECT make_wish_id, COUNT( DISTINCT member_id ) helpers FROM t_help_wish WHERE activity_no = @activityNo GROUP BY make_wish_id ) c ON c.make_wish_id = a.id
                                WHERE a.member_id={memberId} AND a.`status` IN (0,1,4) AND a.activity_no=@activityNo;";
            var    wishList = await _jiakeRepository.SQLQueryAsync <MyWishResponse>(strSql, new { activityNo });

            //判断有没有达成的愿望,如果有就不用处理那一堆返回参数了(因为只能实现一个愿望,如果有实现的返回的只是这一条)
            if (!wishList.Any(x => x.process == 1))
            {
                foreach (var wish in wishList)
                {
                    //如果使用了助力值,助力人数+5
                    if (wish.isPower)
                    {
                        wish.helpers += 5;
                    }
                    //进行中许愿的处理返回值目标值和需要人数
                    if (wish.process == 0)
                    {
                        //判断助力人数和达到的档位
                        if (wish.ruleItems.Count == 1)//无档位处理
                        {
                            wish.target = "实现愿望";
                            wish.needed = wish.ruleItems[0].n - wish.helpers;
                        }
                        else if (wish.ruleItems.Count > 1)//多档位处理
                        {
                            //多档位的,只取第一个档位、目标档位、最后一个档位
                            var retItems = new List <WishRuleItem>();
                            //将第一个加入进去
                            retItems.Add(wish.ruleItems[0]);
                            //将最后一个加入进去
                            retItems.Add(wish.ruleItems[wish.ruleItems.Count - 1]);
                            //将会员选择的目标加入进去
                            if (!retItems.Any(x => x.n == wish.userCount))
                            {
                                var item = wish.ruleItems.Where(x => x.n == wish.userCount).FirstOrDefault();
                                if (item != null)
                                {
                                    retItems.Add(item);
                                }
                            }
                            retItems = retItems.OrderBy(p => p.n).ToList();
                            //查询下一个要达到的档位
                            var targetRule = retItems.Where(x => x.n > wish.helpers).FirstOrDefault();
                            if (targetRule != null)
                            {
                                wish.target = $"{targetRule.r}{wish.wishUnit}";
                                wish.needed = targetRule.n - wish.helpers;
                            }
                        }
                    }
                }
                wishList = wishList.OrderBy(p => p.needed).ThenByDescending(p => p.id);
            }

            return(wishList);
        }