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