old_flsystem/应用/CouponsSend/SendCouponThread.cs

309 lines
15 KiB
C#
Raw Normal View History

2022-09-20 03:10:29 +00:00
using Api.Framework;
using Api.Framework.Cps;
using Api.Framework.Enums;
using Api.Framework.Model;
using Api.Framework.SDK;
using Api.Framework.Tools;
using Chat.Framework;
using Chat.Framework.WXSdk;
using CouponsSend.Entitys;
using CouponsSend.Properties;
using CsharpHttpHelper;
using SqlSugar;
using System;
using System.Linq;
using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
using static Api.Framework.Tools.TBHelper;
using static CouponsSend.Entitys.Enum;
namespace CouponsSend
{
public class SendCouponThread : TimerTask
{
public DateTime quanTime;
SqlSugarClient session = ApiClient.GetSession();
AnalyzeGoods analyzeGoods = new AnalyzeGoods();
private bool IsRunning = false;
public override void Run(object state, bool timedOut)
{
if (IsRunning) return;
try
{
IsRunning = true;
#region
if (!string.IsNullOrWhiteSpace(Class1.Config.AutoClearTaskTimes))
{
if (Class1.Config.Auto_IsClear == SwitchType.)
{
try
{
if (DateTime.Now.AddSeconds(-3).ToString("HHmm") == DateTime.Parse(Class1.Config.AutoClearTaskTimes).ToString("HHmm"))
{
//session.ExcuteSQL("Delete from fl_plugin_couponssend_goodsinfos", new { });
}
}
catch (Exception ex)
{
EventClient.OnEvent(this, "定时清理异常" + ex.Message + "-" + ex.StackTrace);
}
}
}
#endregion
var isSendTime = false; //是否是发送时间段内
if (Class1.Config.NotCheckTime == SwitchType.)
{
//检查时间限制
if (Class1.Config.SendTaskTimes != null && Class1.Config.SendTaskTimes.Length != 0)
{
var now = DateTime.Now;
foreach (var item in Class1.Config.SendTaskTimes)
{
try
{
var times = item.Trim().Split(new string[] { "-" }, StringSplitOptions.RemoveEmptyEntries);
if (times.Length != 2) throw new Exception("设置的时间段格式不正确");
var begin = DateTime.Parse(times[0].Trim());
var end = DateTime.Parse(times[1].Trim());
if (begin <= now && now <= end)
{
isSendTime = true;
break;
}
}
catch (Exception ex)
{
EventClient.OnEvent(this, $"{ex.Message} - {ex.StackTrace}");
}
}
}
}
else isSendTime = true;//不限发送开启
if (!isSendTime) return;//不在发送时间终止
//删除N天前的数据
session.ExcuteSQL("Delete from fl_plugin_couponssend_goodsinfos where cur_time <= @time", new { time = DateTime.Today.AddDays(-3) });
#region
if (Class1.Config.Switch == SwitchType.)
{
var num = session.Find<fl_plugin_couponssend_goodsinfos>("select * from fl_plugin_couponssend_goodsinfos where state = @state", new { state = StateType.广 }).Count();
if (num <= Class1.Config.GatherTouchNum)
analyzeGoods.GatherFactory();
}
#endregion
#region
//未选择发送的群
var adzones = session.Find<fl_adzone_info>("select * from fl_adzone_info where custom_type = @custom_type and onoff = @onoff", new { custom_type = Resources.SoftwareType, onoff = false });
var wxGroups = adzones.Where(f => f.group_id.Contains("@") || f.group_id.Contains("R:")).ToList();//微信发送列表
var qqGroups = adzones.Where(f => !f.group_id.Contains("@") && !f.group_id.Contains("R:")).ToList();//微信发送列表
if (qqGroups.Count == 0 && wxGroups.Count == 0) return;
var goods_info = session.FindSingle<fl_plugin_couponssend_goodsinfos>($"select * from fl_plugin_couponssend_goodsinfos where state = 1 order by cur_time desc");
if (goods_info == null) throw new Exception("没有可发送的商品");
if (!string.IsNullOrEmpty(Class1.Config.BlackContent))
{
var tempReg = Regex.Match(goods_info.goods_name, "(" + Class1.Config.BlackContent.Replace("", ",").Replace(",", "|") + ")");
if (tempReg.Success) return;
}
if (!string.IsNullOrEmpty(Class1.Config.WhiteContent))
{
var tempReg = Regex.Match(goods_info.goods_name, "(" + Class1.Config.WhiteContent.Replace("", ",").Replace(",", "|") + ")");
if (!tempReg.Success) return;
}
if (quanTime > DateTime.Now) return;
//商品介绍
var introduce = goods_info.goods_desc;
//随便找一个推广位
var adzone = session.FindAdzoneInfos().FirstOrDefault(f => f.alliance_id == (int)CpsType. && f.custom_type == Resources.SoftwareType && !string.IsNullOrWhiteSpace(f.adzone_pid));
if (adzone == null)
adzone = session.FindAdzoneInfos().FirstOrDefault(f => f.alliance_id == (int)CpsType. && !string.IsNullOrWhiteSpace(f.adzone_pid));
if (adzone == null) return;
var cps = CpsClient.Members.FirstOrDefault(f => f.cpstype == CpsType. && f.username == adzone.adzone_pid_cps_name);
if (cps == null) throw new Exception("群发优惠券推广位设置异常!");
AlimamaApi api = CpsClient.CreateAlimamaRequest(cps);
var pid_split = adzone.adzone_pid.Split('_');
//string adzone_id = pid_split[3];
//string site_id = pid_split[2];
try
{
#region
var wxTask = Task.Run(() =>
{
var _session = ApiClient.GetSession();
var wxClient = ChatClient.WXClient.Values.ToList().Where(f => f.Status == WxStatus.线);
foreach (var item in wxGroups)
{
if (string.IsNullOrWhiteSpace(item.adzone_pid)) continue;
var robot = _session.FindRobots().FirstOrDefault(f => f.id == item.robot_id);
if (robot == null) continue;
var wx = wxClient.FirstOrDefault(f => f.WeixinHao == robot.name);
if (wx == null) continue;
var ipad = wx; //as WXClientImpl_IPAD;
if (ipad == null) continue;
var group = ipad.GetContact(item.group_id);
if (group == null) continue;
try
{
var msg = GetSendMsg(api, pid_split, item, goods_info, Class1.Config.WXMsg);
if (string.IsNullOrWhiteSpace(msg)) return;
ApiClient.SendMessage(robot, string.Empty, msg, item.group_id);
}
catch (Exception ex)
{
EventClient.OnEvent(this, $"发送群:{item.group_id} - {ex.Message} - {ex.StackTrace}");
continue;
}
Thread.Sleep(Class1.Config.IntervalTime_Group * 1000 + new Random().Next(100, 1000));
}
});
#endregion
#region QQ群发送
var qqTask = Task.Run(() =>
{
var _session = ApiClient.GetSession();
var qqClient = ChatClient.QQClients.Values;
foreach (var item in qqGroups)
{
if (string.IsNullOrWhiteSpace(item.adzone_pid)) continue;
var robot = _session.FindRobots().FirstOrDefault(f => f.id == item.robot_id);
if (robot == null) continue;
var qq = qqClient.FirstOrDefault(f => f.QQ.ToString() == robot.name);
if (qq == null) continue;
if (!qq.IsLogin) continue;
try
{
var msg = GetSendMsg(api, pid_split, item, goods_info, Class1.Config.QQMsg);
if (string.IsNullOrWhiteSpace(msg)) return;
ApiClient.SendMessage(robot, string.Empty, msg, item.group_id);
}
catch (Exception ex)
{
EventClient.OnEvent(this, $"发送群:{item.group_id} - {ex.Message} - {ex.StackTrace}");
continue;
}
Thread.Sleep(Class1.Config.IntervalTime_Group * 1000 + new Random().Next(100, 1000));
}
});
#endregion
Task.WaitAll(wxTask, qqTask);
}
catch (Exception ex)
{
EventClient.OnEvent(this, $"发送失败:{ex.Message} - {ex.StackTrace}");
}
//}
quanTime = DateTime.Now.AddSeconds(Class1.Config.IntervalTime_Coupon);
#endregion
}
catch (Exception ex)
{
//EventClient.OnEvent(this, $"解析群发优惠券消息异常:{ex.Message} - {ex.StackTrace}");
}
finally
{
IsRunning = false;
}
}
private string GetSendMsg(AlimamaApi api, string[] pid_split, fl_adzone_info item, fl_plugin_couponssend_goodsinfos goods_info, string mess)
{
try
{
var _cps = CpsClient.Members.FirstOrDefault(f => f.cpstype == CpsType. && f.username == item.adzone_pid_cps_name);
if (_cps == null) throw new Exception("阿里妈妈异常请重新登录!");
AlimamaApi _api = CpsClient.CreateAlimamaRequest(_cps);
pid_split = item.adzone_pid.Split('_');
var turnItem = api.TurnItemId(goods_info.goods_id, goods_info.goods_quan, pid_split[3], pid_split[2], "2");
var coupon_price = goods_info.coupon_discount;
//券后 总佣金
var useCoupon_totalCommFee = (double)turnItem.CommissionUseCouponMoney;
//用券后 给用户的佣金
var useCoupon_commFee = session.FindItemPoint(null, useCoupon_totalCommFee, 1, CpsType.);
var tbAnalysis = new TbAnalysis();
//淘口令的前/后符号有没有设置.有设置将替换掉
var tkl = tbAnalysis.ReplaceTklModifier(turnItem.BuyPass);
var composeUrl = api.ComposeTbClick(goods_info.goods_id, "https://img.alicdn.com/tfs/TB1MaLKRXXXXXaWXFXXXXXXXXXX-480-260.png", tkl, turnItem.BuyUrl, true, item.adzone_pid, ApiClient.Setting.SystemConfig.ZjyComposeType == ComposeType., (int)Class1.Config.SearchDwzType);//中间页地址
//[机器人账号]、[机器人昵称]、[商品标题]、[商品原价]、[优惠券金额]、[券后价]、[商品主图]、[积分名称]、[月销量]、[返利积分]、[购买地址]、[购买中间页地址]、[购买淘口令]、[共节省]、[商品图片]、[文案] XML[图片地址]
string QRPic = string.Empty;
if (Class1.Config.WXMsg.Contains("[商品图片]"))
{
QRPic = ApiClient.GetQRImage(goods_info.goods_name, goods_info.normal_price.ToString(), coupon_price.ToString(), goods_info.actual_price.ToString(), goods_info.goods_thumbnail_url, composeUrl, Class1.Config.qrImageType, CpsType., goods_info.goods_desc);
if (!string.IsNullOrWhiteSpace(QRPic))
QRPic = $"[图片={QRPic}]";
}
if (goods_info.state != StateType.广)
{
goods_info.state = StateType.广;
goods_info = session.Saveable(goods_info).ExecuteReturnEntity();
}
return mess.Replace("[商品标题]", goods_info.goods_name)
.Replace("[商品原价]", goods_info.normal_price.ToString("0.00"))
.Replace("[商品主图]", $"[图片={goods_info.goods_thumbnail_url}]")
.Replace("[月销量]", "0")
.Replace("[返利积分]", useCoupon_commFee.UserPoint.ToString("0.00"))
.Replace("[券后价]", goods_info.actual_price.ToString("0.00"))
.Replace("[优惠券金额]", goods_info.coupon_discount.ToString("0.00"))
.Replace("[购买地址]", turnItem.BuyUrl)
.Replace("[购买中间页地址]", composeUrl)
.Replace("[购买淘口令]", tkl)
.Replace("[共节省]", (goods_info.coupon_discount + useCoupon_commFee.UserPoint).ToString("0.00"))
.Replace("[商品图片]", QRPic)
.Replace("[图片地址]", goods_info.goods_thumbnail_url)
.Replace("[文案]", goods_info.goods_desc);
}
catch (Exception ex)
{
}
return string.Empty;
}
public double QueryDsr(string sellerId, string itemId)
{
string html = new HttpHelper().GetHtml("https://dsr-rate.tmall.com/list_dsr_info.htm?itemId=" + itemId + "&sellerId=" + sellerId + "&_ksTS=" + HttpExtend.GetTimeStamp() + "_194&callback=jsonp195").Html;
var reg = Regex.Match(html, "gradeAvg\":([^,]+)");
if (reg.Success)
{
return double.Parse(reg.Groups[1].Value);
}
return 0.00;
}
}
}