old_flsystem/应用/Weixin.SNCirclePromotion/AnalyzeGoods.cs

272 lines
14 KiB
C#
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using Api.Framework;
using Api.Framework.Cps;
using Api.Framework.EntityTmp.SuNing;
using Api.Framework.EntityTmp.SuNing4;
using Api.Framework.Enums;
using Api.Framework.Model;
using Api.Framework.Tools;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Weixin.SNCirclePromotion.Entitys;
namespace Weixin.SNCirclePromotion
{
/// <summary>
/// 解析商品
/// </summary>
public class AnalyzeGoods
{
/// <summary>
/// 通过商品的id查询返回获取到自己返利商品信息
/// </summary>
/// <param name="api"></param>
/// <param name="goodinfo"></param>
/// <param name="goods_source"></param>
/// <returns></returns>
public fl_plugin_sncirclepromotion_goodsinfos FindGoodsInfoToGoodsId(SuNingApi api, string goodinfo, GoodsSourceType goods_source)
{
try
{
fl_plugin_sncirclepromotion_goodsinfos goodsinfo = null;
var snGInfo = api.QueryGoodInfo(goodinfo);
if (snGInfo.sn_responseContent.sn_error != null)
throw new Exception(snGInfo.sn_responseContent.sn_error.error_msg);//查询没结果
else if (snGInfo.sn_responseContent.sn_body == null || snGInfo.sn_responseContent.sn_body.queryCommoditydetail == null || snGInfo.sn_responseContent.sn_body.queryCommoditydetail.Count == 0)
throw new Exception("查询没结果2");
foreach (var goods in snGInfo.sn_responseContent.sn_body.queryCommoditydetail)
{
var goodsname = (goods.commodityInfo.commodityName ?? string.Empty).ToString(); //商品标题
var goodsdesc = (goods.commodityInfo.sellingPoint ?? string.Empty).ToString(); //商品描述
var picurl = (goods.commodityInfo.pictureUrl != null && goods.commodityInfo.pictureUrl.Count != 0) ? goods.commodityInfo.pictureUrl[0].picUrl : string.Empty; //商品图片链接
var goodsid = (goods.commodityInfo.commodityCode ?? string.Empty).ToString(); //商品id
//已售卖件数
var sold_quantity = goods.commodityInfo.monthSales;
var vipPrice = -1d;
if (!string.IsNullOrWhiteSpace(goods.commodityInfo.snPrice))
vipPrice = double.Parse(goods.commodityInfo.snPrice);
if (vipPrice == -1 && !string.IsNullOrWhiteSpace(goods.commodityInfo.commodityPrice))
vipPrice = double.Parse(goods.commodityInfo.commodityPrice);
var buyUrl = goods.commodityInfo.productUrl;
if (goods.pgInfo != null)
{
if (!string.IsNullOrWhiteSpace(goods.pgInfo.pgUrl))
{
buyUrl = goods.pgInfo.pgUrl;
if (!string.IsNullOrWhiteSpace(goods.pgInfo.pgUrl))
{
vipPrice = double.Parse(goods.pgInfo.pgPrice);
}
}
}
if (vipPrice == -1)
throw new Exception("当前价格不明");
//优惠券金额
var coupon_price = 0.00d;
//怕两个地址都没有链接.用自己拼的
if (string.IsNullOrWhiteSpace(buyUrl))
buyUrl = $@"https://product.suning.com/{goods.commodityInfo.supplierCode}/{goodsid}.html";
//优惠券地址
var couponUrl = (goods.couponInfo != null && !string.IsNullOrWhiteSpace(goods.couponInfo.couponUrl)) ? goods.couponInfo.couponUrl : string.Empty;
//优惠券地址
//var coupon_click_url = string.Empty;
if (!string.IsNullOrWhiteSpace(couponUrl))//有券
{
//优惠券没有过期
if (goods.couponInfo.couponEndTime >= DateTime.Now && ((!string.IsNullOrWhiteSpace(goods.couponInfo.bounsLimit) && double.Parse(goods.couponInfo.bounsLimit) <= vipPrice) || (string.IsNullOrWhiteSpace(goods.couponInfo.bounsLimit))))
coupon_price = double.Parse(goods.couponInfo.couponValue);
}
//商品标题//&lt; &gt;&amp;&quot;&copy; <>&",©;
var goodsName = goods.commodityInfo.commodityName.Replace("", "").Replace("&lt;", "<").Replace("&gt;", ">").Replace("&amp;", "&").Replace("&quot;", "\"").Replace(" &copy;", "©");
var endPrice = vipPrice;
if (coupon_price != 0)
endPrice = (double)((decimal)vipPrice - (decimal)coupon_price);
//佣金比例
var commissionRate = double.Parse(goods.commodityInfo.rate);
var supplierName = goods.commodityInfo.supplierName; //店铺名称
var coupon_min_order_amount = Math.Round(string.IsNullOrWhiteSpace(goods.couponInfo.bounsLimit) ? 0 : double.Parse(goods.couponInfo.bounsLimit), 2); //优惠券门槛价格,单位为元
var coupon_discount = Math.Round(goods.couponInfo.couponValue == null ? 0 : double.Parse(goods.couponInfo.couponValue), 2); //优惠券面额,单位为元
goodsinfo = new fl_plugin_sncirclepromotion_goodsinfos() { couponUrl = couponUrl, buyUrl = buyUrl, goodsid = goodsid, supplierCode = goods.commodityInfo.supplierCode, goodsname = goodsname, goodsdesc = goodsdesc.Substring(0, goodsdesc.Length < 200 ? goodsdesc.Length : 200), picurl = picurl, sold_quantity = sold_quantity, vipPrice = vipPrice, supplierName = supplierName, coupon_min_order_amount = coupon_min_order_amount, coupon_discount = coupon_discount, commissionRate = commissionRate, cur_time = DateTime.Today, state = StateType.广, goods_source = goods_source };
}
return goodsinfo;
}
catch (Exception ex)
{
return null;
}
}
private static int DownPage = 1;
#region
/// <summary>
/// 数据采集
/// </summary>
public void GatherFactory()
{
for (int i = 0; i < 2; i++)
{
var session = ApiClient.GetSession();
try
{
var member = CpsClient.Members.FirstOrDefault(f => f.cpstype == CpsType.);//随机获取一个苏宁的cps
if (member != null)
{
var api = CpsClient.CreateSuNingRequest(member);
object data = null;
var opt_ids = Class1.Config.Category.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries);
foreach (var item in opt_ids)
{
var result = api.QueryGuideGoodsInfo(Util.ConvertEnum<CategoryType>(item), DownPage);
GatherAction(result);
}
}
}
catch (Exception ex)
{
DownPage = 1;
EventClient.OnEvent(this, $"苏宁采集A{ex.Message} - {ex.StackTrace}");
}
return;
}
}
#endregion
/// <summary>
/// 苏宁商品采集
/// </summary>
/// <param name="snGInfo">SN_GoodInfo对象</param>
private void GatherAction(SN_Recommend_Commodity snGInfo)
{
DownPage++;
var session = ApiClient.GetSession();
try
{
if (snGInfo.sn_responseContent.sn_error != null)
throw new Exception(snGInfo.sn_responseContent.sn_error.error_msg);//查询没结果
else if (snGInfo.sn_responseContent.sn_body == null || snGInfo.sn_responseContent.sn_body.querySelectrecommendcommodity == null || snGInfo.sn_responseContent.sn_body.querySelectrecommendcommodity == null && snGInfo.sn_responseContent.sn_body.querySelectrecommendcommodity.commodityList == null && snGInfo.sn_responseContent.sn_body.querySelectrecommendcommodity.commodityList.Count == 0)
throw new Exception("查询没结果2");
session.BeginTransaction();
List<fl_plugin_sncirclepromotion_goodsinfos> goodsinfos = new List<fl_plugin_sncirclepromotion_goodsinfos>();
foreach (var goods in snGInfo.sn_responseContent.sn_body.querySelectrecommendcommodity.commodityList)
{
try
{
var goodsid = (goods.commodityInfo.commodityCode ?? string.Empty).ToString(); //商品id
if (session.FindSingle<fl_plugin_sncirclepromotion_goodsinfos>("select * from fl_plugin_sncirclepromotion_goodsinfos where goodsid = @goodsid", new { goodsid = goodsid }) != null)
continue;
var goodsname = (goods.commodityInfo.commodityName ?? string.Empty).ToString(); //商品标题
var goodsdesc = (goods.commodityInfo.sellingPoint ?? string.Empty).ToString(); //商品描述
var picurl = (goods.commodityInfo.pictureUrl != null && goods.commodityInfo.pictureUrl.Count != 0) ? goods.commodityInfo.pictureUrl[0].picUrl : string.Empty; //商品图片链接
//已售卖件数
var sold_quantity = goods.commodityInfo.monthSales;
var vipPrice = -1d;
if (!string.IsNullOrWhiteSpace(goods.commodityInfo.snPrice))
vipPrice = double.Parse(goods.commodityInfo.snPrice);
if (vipPrice == -1 && !string.IsNullOrWhiteSpace(goods.commodityInfo.commodityPrice))
vipPrice = double.Parse(goods.commodityInfo.commodityPrice);
var buyUrl = goods.commodityInfo.productUrl;
if (goods.pgInfo != null)
{
if (!string.IsNullOrWhiteSpace(goods.pgInfo.pgUrl))
{
buyUrl = goods.pgInfo.pgUrl;
if (!string.IsNullOrWhiteSpace(goods.pgInfo.pgUrl))
{
vipPrice = double.Parse(goods.pgInfo.pgPrice);
}
}
}
if (vipPrice == -1)
throw new Exception("当前价格不明");
//优惠券金额
var coupon_price = 0.00d;
//怕两个地址都没有链接.用自己拼的
if (string.IsNullOrWhiteSpace(buyUrl))
buyUrl = $@"https://product.suning.com/{goods.commodityInfo.supplierCode}/{goodsid}.html";
//优惠券地址
var couponUrl = (goods.couponInfo != null && !string.IsNullOrWhiteSpace(goods.couponInfo.couponUrl)) ? goods.couponInfo.couponUrl : string.Empty;
//优惠券地址
//var coupon_click_url = string.Empty;
if (!string.IsNullOrWhiteSpace(couponUrl))//有券
{
//优惠券没有过期
if (goods.couponInfo.couponEndTime >= DateTime.Now && ((!string.IsNullOrWhiteSpace(goods.couponInfo.bounsLimit) && double.Parse(goods.couponInfo.bounsLimit) <= vipPrice) || (string.IsNullOrWhiteSpace(goods.couponInfo.bounsLimit))))
coupon_price = double.Parse(goods.couponInfo.couponValue);
}
//商品标题//&lt; &gt;&amp;&quot;&copy; <>&",©;
var goodsName = goods.commodityInfo.commodityName.Replace("", "").Replace("&lt;", "<").Replace("&gt;", ">").Replace("&amp;", "&").Replace("&quot;", "\"").Replace(" &copy;", "©");
//var vipPrice = double.Parse(item.commodityInfo.snPrice);
var endPrice = vipPrice;
if (coupon_price != 0)
endPrice = (double)((decimal)vipPrice - (decimal)coupon_price);
//佣金比例
var commissionRate = double.Parse(goods.commodityInfo.rate);
var supplierName = goods.commodityInfo.supplierName; //店铺名称
var coupon_min_order_amount = Math.Round(string.IsNullOrWhiteSpace(goods.couponInfo.bounsLimit) ? 0 : double.Parse(goods.couponInfo.bounsLimit), 2); //优惠券门槛价格,单位为元
var coupon_discount = Math.Round(goods.couponInfo.couponValue == null ? 0 : double.Parse(goods.couponInfo.couponValue), 2); //优惠券面额,单位为元
var ss = new fl_plugin_sncirclepromotion_goodsinfos() { couponUrl = couponUrl, buyUrl = buyUrl, goodsid = goodsid, supplierCode = goods.commodityInfo.supplierCode, goodsname = goodsName, goodsdesc = goodsdesc.Substring(0, goodsdesc.Length < 200 ? goodsdesc.Length : 200), picurl = picurl, sold_quantity = sold_quantity, vipPrice = vipPrice, supplierName = supplierName, coupon_min_order_amount = coupon_min_order_amount, coupon_discount = coupon_discount, commissionRate = commissionRate, cur_time = DateTime.Today, state = StateType.广, goods_source = GoodsSourceType. };
goodsinfos.Add(ss);
}
catch (Exception ex)
{ }
}
if (goodsinfos.Count != 0)
session.Insertable(goodsinfos).ExecuteCommand();
session.Commit();
}
catch (Exception ex)
{
DownPage = 1;
session.Rollback();
throw ex;
}
}
}
}