314 lines
6.7 KiB
C#
314 lines
6.7 KiB
C#
using AllBase;
|
||
using AllBase.Helper;
|
||
using AllBase.Model.Result;
|
||
using Newtonsoft.Json;
|
||
using System;
|
||
using System.Collections.Generic;
|
||
using System.Linq;
|
||
using System.Text;
|
||
using System.Threading.Tasks;
|
||
|
||
namespace Work.Services
|
||
{
|
||
/// <summary>
|
||
/// 云商品数据服务
|
||
/// </summary>
|
||
public class CloudGoodsService
|
||
{
|
||
private static string ServerUrl = "http://103.90.155.78:9001";
|
||
static CloudGoodsService()
|
||
{
|
||
if (EnvironmentHelper.IsDevelopment)
|
||
{
|
||
ServerUrl = "http://localhost:9001";
|
||
}
|
||
}
|
||
public static async Task<PageData<CloudGoods>> GetGoods(GoodsSearchRequest request)
|
||
{
|
||
var html = await GetHtml.PostJsonAsync(ServerUrl + "/api/CloudGoods/SearchGoods", request);
|
||
|
||
var ret = JsonConvert.DeserializeObject<Result<PageData<CloudGoods>>>(html);
|
||
if (ret.Code != 200)
|
||
{
|
||
throw new Exception(ret.Msg);
|
||
}
|
||
return ret.Data;
|
||
}
|
||
public static string GetGoodsDetail(long goodsId)
|
||
{
|
||
var html = GetHtml.PostJson(ServerUrl + $"/api/CloudGoods/GetGoodsRawData?goodsId={goodsId}", "");
|
||
|
||
var ret = JsonConvert.DeserializeObject<Result<string>>(html);
|
||
if (ret.Code != 200)
|
||
{
|
||
throw new Exception(ret.Msg);
|
||
}
|
||
return ret.Data;
|
||
}
|
||
|
||
#region user
|
||
/// <summary>
|
||
/// 搜索收藏
|
||
/// </summary>
|
||
/// <param name="request"></param>
|
||
/// <returns></returns>
|
||
/// <exception cref="Exception"></exception>
|
||
public static async Task<PageData<CloudGoods>> SearchFavorites(UserFavoritesGoodsSearchRequest request)
|
||
{
|
||
request.UserName = BaseClass.UserName;
|
||
var html = await GetHtml.PostJsonAsync(ServerUrl + "/api/CloudGoods/SearchFavorites", request);
|
||
|
||
var ret = JsonConvert.DeserializeObject<Result<PageData<CloudGoods>>>(html);
|
||
if (ret.Code != 200)
|
||
{
|
||
throw new Exception(ret.Msg);
|
||
}
|
||
return ret.Data;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 收藏
|
||
/// </summary>
|
||
/// <param name="goodsIds"></param>
|
||
/// <returns></returns>
|
||
/// <exception cref="Exception"></exception>
|
||
|
||
public static async Task<int> Favorite(List<long> goodsIds)
|
||
{
|
||
var html = await GetHtml.PostJsonAsync(ServerUrl + $"/api/CloudGoods/AddFavorite", new
|
||
{
|
||
UserName = BaseClass.UserName,
|
||
GoodsIds = goodsIds,
|
||
});
|
||
|
||
var ret = JsonConvert.DeserializeObject<Result<int>>(html);
|
||
if (ret.Code != 200)
|
||
{
|
||
throw new Exception(ret.Msg);
|
||
}
|
||
return ret.Data;
|
||
}
|
||
/// <summary>
|
||
/// 取消收藏
|
||
/// </summary>
|
||
/// <param name="goodsIds"></param>
|
||
/// <returns></returns>
|
||
/// <exception cref="Exception"></exception>
|
||
|
||
public static async Task<int> RemoveFavorites(List<long> goodsIds)
|
||
{
|
||
var html = await GetHtml.PostJsonAsync(ServerUrl + $"/api/CloudGoods/RemoveFavorites", new
|
||
{
|
||
UserName = BaseClass.UserName,
|
||
GoodsIds = goodsIds,
|
||
});
|
||
|
||
var ret = JsonConvert.DeserializeObject<Result<int>>(html);
|
||
if (ret.Code != 200)
|
||
{
|
||
throw new Exception(ret.Msg);
|
||
}
|
||
return ret.Data;
|
||
}
|
||
#endregion
|
||
}
|
||
/// <summary>
|
||
/// 商品搜索请求
|
||
/// </summary>
|
||
public class GoodsSearchRequest
|
||
{
|
||
/// <summary>
|
||
/// 标题(模糊搜索)
|
||
/// </summary>
|
||
public string Title { get; set; } = string.Empty;
|
||
|
||
/// <summary>
|
||
/// 最低价格(元)
|
||
/// </summary>
|
||
public long? MinPrice { get; set; }
|
||
|
||
/// <summary>
|
||
/// 最高价格(元)
|
||
/// </summary>
|
||
public long? MaxPrice { get; set; }
|
||
|
||
/// <summary>
|
||
/// 一级类目ID
|
||
/// </summary>
|
||
public int? CatId1 { get; set; }
|
||
|
||
/// <summary>
|
||
/// 二级类目ID
|
||
/// </summary>
|
||
public int? CatId2 { get; set; }
|
||
|
||
/// <summary>
|
||
/// 三级类目ID
|
||
/// </summary>
|
||
public int? CatId3 { get; set; }
|
||
|
||
/// <summary>
|
||
/// 四级类目ID
|
||
/// </summary>
|
||
public int? CatId4 { get; set; }
|
||
|
||
/// <summary>
|
||
/// 最低销量
|
||
/// </summary>
|
||
public int? MinSoldQuantity { get; set; }
|
||
|
||
/// <summary>
|
||
/// 最高销量
|
||
/// </summary>
|
||
public int? MaxSoldQuantity { get; set; }
|
||
|
||
/// <summary>
|
||
/// 平台类型
|
||
/// </summary>
|
||
public PlatformType Platform { get; set; }
|
||
|
||
/// <summary>
|
||
/// 页码(默认1)
|
||
/// </summary>
|
||
public int PageIndex { get; set; } = 1;
|
||
|
||
/// <summary>
|
||
/// 每页数量(默认20)
|
||
/// </summary>
|
||
public int PageSize { get; set; } = 20;
|
||
|
||
}
|
||
public class UserFavoritesGoodsSearchRequest : GoodsSearchRequest
|
||
{
|
||
public string UserName { get; set; }
|
||
}
|
||
/// <summary>
|
||
/// 商品搜索返回结果
|
||
/// </summary>
|
||
public class GoodsSearchResponse
|
||
{
|
||
/// <summary>
|
||
/// 商品列表
|
||
/// </summary>
|
||
[JsonProperty("list")]
|
||
public List<CloudGoods> List { get; set; } = new List<CloudGoods>();
|
||
|
||
/// <summary>
|
||
/// 总记录数
|
||
/// </summary>
|
||
[JsonProperty("total")]
|
||
public int Total { get; set; }
|
||
|
||
/// <summary>
|
||
/// 当前页码
|
||
/// </summary>
|
||
[JsonProperty("pageIndex")]
|
||
public int PageIndex { get; set; }
|
||
|
||
/// <summary>
|
||
/// 每页数量
|
||
/// </summary>
|
||
[JsonProperty("pageSize")]
|
||
public int PageSize { get; set; }
|
||
|
||
/// <summary>
|
||
/// 总页数
|
||
/// </summary>
|
||
[JsonProperty("totalPages")]
|
||
public int TotalPages { get; set; }
|
||
}
|
||
public class CloudGoods : BindableBase
|
||
{
|
||
public bool IsSelected
|
||
{
|
||
get => GetValue<bool>();
|
||
set => SetValue(value);
|
||
}
|
||
/// <summary>
|
||
/// 自增ID
|
||
/// </summary>
|
||
public long Id { get; set; }
|
||
|
||
/// <summary>
|
||
/// 平台类型
|
||
/// </summary>
|
||
public byte Platform { get; set; }
|
||
|
||
/// <summary>
|
||
/// 商品编号
|
||
/// </summary>
|
||
public long GoodsId { get; set; }
|
||
|
||
/// <summary>
|
||
/// 标题
|
||
/// </summary>
|
||
public string Title { get; set; } = string.Empty;
|
||
|
||
/// <summary>
|
||
/// 描述
|
||
/// </summary>
|
||
public string? Description { get; set; }
|
||
|
||
/// <summary>
|
||
/// 缩略图
|
||
/// </summary>
|
||
public string? ThumbUrl { get; set; }
|
||
|
||
/// <summary>
|
||
/// 一级类目ID
|
||
/// </summary>
|
||
public int? CatId1 { get; set; }
|
||
|
||
/// <summary>
|
||
/// 二级类目ID
|
||
/// </summary>
|
||
public int? CatId2 { get; set; }
|
||
|
||
/// <summary>
|
||
/// 三级类目ID
|
||
/// </summary>
|
||
public int? CatId3 { get; set; }
|
||
|
||
/// <summary>
|
||
/// 四级类目ID
|
||
/// </summary>
|
||
public int? CatId4 { get; set; }
|
||
|
||
/// <summary>
|
||
/// 最低价快照(元),导入时计算
|
||
/// </summary>
|
||
public decimal MinPrice { get; set; }
|
||
|
||
/// <summary>
|
||
/// 最高价快照(元),导入时计算
|
||
/// </summary>
|
||
public decimal MaxPrice { get; set; }
|
||
public string Price => $"{MinPrice / 100m:N2}";
|
||
|
||
/// <summary>
|
||
/// 销量
|
||
/// </summary>
|
||
public int SoldQuantity { get; set; }
|
||
|
||
/// <summary>
|
||
/// 状态:0正常 1已删除
|
||
/// </summary>
|
||
public byte Status { get; set; }
|
||
|
||
/// <summary>
|
||
/// 创建时间
|
||
/// </summary>
|
||
public DateTime CreatedTime { get; set; }
|
||
|
||
/// <summary>
|
||
/// 更新时间(自动更新)
|
||
/// </summary>
|
||
public DateTime UpdatedTime { get; set; }
|
||
|
||
/// <summary>
|
||
/// 索引同步状态:0未同步 1已同步
|
||
/// </summary>
|
||
public byte IndexStatus { get; set; }
|
||
}
|
||
}
|