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