using CommonUtil;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Operater.DAL;
using Operater.DbModel;
using Operater.DTO.System;
using Operater.Service;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Threading.Tasks;
namespace Api.Operater.Controllers
{
[Route(TopConstants.API_ROUTE)]
public class TradeController : BaseController
{
public ITradeCreateService _itradeCreateService;
public ILoginUserInfoService _iloginUserInfoService;
public ISendGoodsService _isendGoodsService;
public TradeController(ITradeCreateService tradeCreateService, ILoginUserInfoService loginUserInfoService, ISendGoodsService sendGoodsService)
{
_itradeCreateService = tradeCreateService;
_iloginUserInfoService = loginUserInfoService;
_isendGoodsService = sendGoodsService;
}
///
/// 创建1688订单
///
///
///
[HttpPost]
public IActionResult CreateAliTrade([FromBody] CreateAliTradeRequest request)
{
var userInfo = _iloginUserInfoService.GetUserInfo();
//查询是否已经创建任务
var relaHis = new TradeCreateRelationDAL().ListGet(t => t.YzTid == request.YzTid);
if (!relaHis.IsNull() && relaHis.Count > 0)
{
var errorHis = relaHis.Where(t => t.RunStatus == 3).ToList();
if (errorHis.IsNull() || errorHis.Count == 0)
{
return Error("该有赞订单已经创建了1688订单,请勿重复操作!");
}
//失败的任务激活
TradeCreateRelation tradeCreateRelation = new TradeCreateRelation()
{
RunStatus = 0,
Memo = ""
};
new TradeCreateRelationDAL().Update(tradeCreateRelation, i => new { i.RunStatus, i.Memo }, t => t.YzTid == request.YzTid && t.RunStatus == 3);
}
else
{//创建订单关系
var yzOrder = new YzOrderinfoDAL().ListGet(t => t.Tid == request.YzTid);
List relationList = new List();
foreach (var order in yzOrder)
{
TradeCreateRelation relate = new TradeCreateRelation()
{
YzOid = order.Oid,
YzTid = order.Tid,
CreatTime = DateTime.Now,
RunStatus = 0,
TaskId = Guid.NewGuid().ToString()
};
relationList.Add(relate);
}
new TradeCreateRelationDAL().InsertRange(relationList);
}
AliTradeCreateRequest re = new AliTradeCreateRequest()
{
YzToken = userInfo.YzToken,
AliToken = userInfo.AlibabaToken,
YzTradeId = request.YzTid,
YzShopId=userInfo.YzShopId
};
var res = _itradeCreateService.AliTradeCreate(re);
if (res.Success)
{
return Success(true);
}
return Error(res.ErrorMsg);
}
///
/// 获取有赞订单信息
///
///
///
[HttpPost]
public IActionResult ListPageGetYzTrade([FromBody] ListPageGetYzTradeRequest request)
{
List listRsp = new List();
var expression = Expressionable.Create().AndIF(!request.TradeStatus.IsNullOrEmpty(), t => t.Status == request.TradeStatus)
.AndIF(!request.Tid.IsNullOrEmpty(), t => t.Tid == request.Tid)
.AndIF(!request.ReceiveMobile.IsNullOrEmpty(), t => t.ReceiverTel == request.ReceiveMobile)
.ToExpression();
int totalCount = 0;
var tradeList = new YzTradeinfoDAL().ListPageGet(expression, t => t.CreateTime, DbEnum.OrderType.Desc, request.PageNo, request.PageSize, ref totalCount);
if (tradeList.IsNull() || tradeList.Count == 0)
{
return Success(listRsp, request.PageNo, request.PageSize, 0);
}
var ids = tradeList.Select(i => i.Tid).ToList();
var orderList = new YzOrderinfoDAL().ListGet(t => ids.Contains(t.Tid));
foreach (var tradeItem in tradeList)
{
var order = orderList.Where(t => t.Tid == tradeItem.Tid).ToList();
ListPageGetYzTradeRequestResponse rsp = new ListPageGetYzTradeRequestResponse()
{
TradeInfo = tradeItem,
OrderInfo = order
};
listRsp.Add(rsp);
}
return Success(listRsp, request.PageNo, request.PageSize, totalCount);
}
///
/// 有赞订单发货
///
///
///
[HttpPost]
public IActionResult SendYzGoods([FromBody] SendYzGoodsRequest request)
{
var userInfo = _iloginUserInfoService.GetUserInfo();
int errorCount = 0;
foreach (var yzOid in request.YzOid)
{
YzSendGoodsRequest yzSendGoodsRequest = new YzSendGoodsRequest()
{
YzOid = yzOid,
YzToken = userInfo.YzToken
};
var res = _isendGoodsService.YzSendGoods(yzSendGoodsRequest);
if (!res.IsSuccess)
{
return Error(res.ErrorMsg);
}
}
//if (errorCount > 0)
//{
// return Error(errorCount + "笔子订单发货失败!");
//}
return Success(true);
}
///
/// 获取待创建/待发货1688订单
///
///
///
[HttpPost]
public IActionResult GetWaiteCreateTrade([FromBody] GetWaiteCreateTradeRequest request)
{
List response = new List();
string where = $" ali_trade_status='0' AND trade_status='WAIT_SELLER_SEND_GOODS' ";
if (request.SearchType == 1)
{//获取待发货
where = $" ali_goods_status='1' and yz_goods_status='0' ";
}
where += request.YzTid.IsNullOrEmpty() ? "" : $" and tid='{request.YzTid}' ";
DataTable countDt = new YzOrderinfoDAL().SearchBySqlDataTable("", $"select count(1) as count from yz_orderinfo where {where}");
if (countDt.IsNull() || countDt.Rows.Count == 0 || countDt.Rows[0]["count"].ToString() == "0")
{
return Success(response, request.PageNo, request.PageSize, 0);
}
string searchField = "tid,create_time,pay_time,status,status_str,update_time,delivery_address,delivery_city,delivery_district,delivery_province,receiver_name,receiver_tel,total_fee,payment";
string searchSql = $"select {searchField} from yz_tradeinfo where tid in (select a.* from (select distinct(tid) as tid from yz_orderinfo where {where} order by create_time desc limit {request.PageSize} offset {(request.PageNo - 1) * request.PageSize}) a)";
DataTable TidDt = new YzOrderinfoDAL().SearchBySqlDataTable("", searchSql);
if (TidDt.IsNull() || TidDt.Rows.Count == 0)
{
return Success(response, request.PageNo, request.PageSize, 0);
}
//var orders = new YzOrderinfoDAL().ListPageGet(t => t.AliTradeStatus == 0, t => t.CreateTime, DbEnum.OrderType.Desc, t => t.Tid, request.PageNo, request.PageSize, ref totalCount).Select(t => t.Tid);
foreach (DataRow tid in TidDt.Rows)
{
var expression = Expressionable.Create().And(t => t.Tid == tid["tid"].ToString())
.AndIF(request.SearchType == 0, t => t.AliTradeStatus == 0)
.AndIF(request.SearchType == 1, t => t.AliTradeStatus == 1)
.ToExpression();
var oids = new YzOrderinfoDAL().ListGet(expression);
DateTime? paytime;
if (tid["pay_time"].IsNull() || tid["pay_time"].ToString().IsNullOrEmpty())
{
paytime = null;
}
else
{
paytime = Convert.ToDateTime(tid["pay_time"].ToString());
}
string ss = tid["pay_time"] == null ? "" : "";
GetWaiteCreateTradeResponse resItem = new GetWaiteCreateTradeResponse()
{
Tid = tid["tid"].ToString(),
create_time = Convert.ToDateTime(tid["create_time"].ToString()),
pay_time = paytime,
status_str = tid["status_str"].ToString(),
update_time = Convert.ToDateTime(tid["update_time"].ToString()),
delivery_address = tid["delivery_address"].ToString(),
delivery_city = tid["delivery_city"].ToString(),
delivery_district = tid["delivery_district"].ToString(),
delivery_province = tid["delivery_province"].ToString(),
receiver_name = tid["receiver_name"].ToString(),
receiver_tel = tid["receiver_tel"].ToString(),
total_fee = tid["total_fee"].ToString(),
payment = tid["payment"].ToString(),
Orders = oids
};
response.Add(resItem);
}
return Success(response, request.PageNo, request.PageSize, int.Parse(countDt.Rows[0]["count"].ToString()));
}
}
}