using Ant.Data;
using Ant.ORM;
using Ant.SuperSocket.Common;
using Ant.Service.Common;
using Ant.Service.Common.Enums;
using Central.Control.Domain;
using MES.Production.Entity;
using MES.Production.Entity.Entity;
using MES.Production.Entity.Enum;
using MES.Production.Entity.Extensions;
using MES.Production.Entity.Model;
using MES.Production.Entity.Model.OrderList;
using Ant.Service.Mongodb;
using MES.Production.Service.IService;
using MES.Production.Service.ServiceImp;
using Ant.Service.Utility;
using ChangFa.Machinery.WebPage.App_Start;
using ChangFa.Machinery.WebPage.Areas.SysManage.Models;
using ChangFa.Machinery.WebPage.Controllers;
using ChangFa.Machinery.WebPage.Models;
using MongoDB.Driver.Builders;
using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Text;
using System.Web;
using System.Web.Mvc;
using JsonHelper = Ant.Service.Common.JsonHelper;
namespace ChangFa.Machinery.WebPage.Areas.SysManage.Controllers
{
public class OrderListController : BaseController
{
///
/// 订单列表
///
///
[UserAuthorize(ModuleAlias = "OrderList", OperaAction = "View")]
public ActionResult List()
{
try
{
PageInfo pageInfo = new PageInfo(base.page, base.pagesize, 0, JsonConverter.JsonClass(new List()));
#region 处理查询参数
var orderId = Request.QueryString["orderId"];
var os = Request.QueryString["orderStatus"];
var deviceId = Request.QueryString["deviceId"];
if (string.IsNullOrWhiteSpace(os))
{
os = "-1";
}
var orderStatus = ConvertHelper.ObjToInt(os);
#endregion
#region 加载列表
using (AntORM orm = new AntORM())
{
orm.db = DataAccessFactory.CreateDataConnection("CyclingItem");
RequestModel res = new RequestModel();
res.newSt = new SqlNote() { Author = "smj", NewSt = new System.Diagnostics.StackTrace(true), SqlDesc = "获取订单列表" };
var query = orm.Queryable();
int pageno = (base.page - 1) * base.pagesize;
// 订单id查询
query = query.WhereIf(!string.IsNullOrEmpty(orderId), p => p.Id == orderId);
// 订单状态
query = query.WhereIf(orderStatus > -1, p => p.OrderStatus == (OrderStatusEnum)orderStatus);
// 所属设备查询
query = query.WhereIf(!string.IsNullOrWhiteSpace(deviceId), p => p.DeviceId == deviceId);
var reslut = query.OrderByDesc(p => p.CreateDT).Skip(pageno).Top(pagesize).ToList(res);
if (reslut.IsSuccess)
{
reslut.RecordNum = query.Count();
#region 替换deviceid成设备名称
var result = reslut.ResultModel as List;
var deviceIds = result.Select(p => p.DeviceId).ToList();
var devices = orm.Queryable().Where(p => deviceIds.Contains(p.Id)).ToList(res).ResultModel as List;
result.ForEach(item => {
var deviceName = devices.FirstOrDefault(p => p.Id == item.DeviceId)?.Name;
item.DeviceId = deviceName ?? item.DeviceId;
});
#endregion
pageInfo = new PageInfo(base.page, base.pagesize, reslut.RecordNum, result);
}
// 查询所以设备数据,下拉框用
List devicesData = orm.Queryable().Where(p => p.IsDelete == 0).ToList().ResultModel;
ViewData["devicesData"] = devicesData;
}
ViewData["orderId"] = orderId;
ViewData["orderStatus"] = orderStatus;
ViewData["deviceId"] = deviceId ?? string.Empty;
return View(pageInfo);
#endregion
}
catch (Exception e)
{
WriteLog(enumOperator.Select, "获取参赛列表:", e);
throw e.InnerException;
}
}
///
/// 支付信息
///
///
[UserAuthorize(ModuleAlias = "OrderList", OperaAction = "payInfo")]
public ActionResult PayInfo(string id)
{
PayCallDto result = new PayCallDto();
using (AntORM orm = new AntORM())
{
orm.db = DataAccessFactory.CreateDataConnection("CyclingItem");
RequestModel res = new RequestModel();
res.newSt = new SqlNote() { Author = "smj", NewSt = new System.Diagnostics.StackTrace(true), SqlDesc = "支付信息" };
var payList = orm.Queryable().Where(p => p.IsDelete == 0 && p.OrderId == id).ToList(res).ResultModel as List;
payList?.ForEach(payItem => {
result.OrderPayInfos.Add(new OrderPayInfoDto()
{
Id = payItem.Id,
PayStatus = payItem.PayStatus,
PaySerialId = payItem.PaySerialId,
BuyAccount = payItem.BuyAccount,
CreateDT = payItem.CreateDT
});
});
}
return View(result);
}
///
/// 订单流程信息
///
///
[UserAuthorize(ModuleAlias = "OrderList", OperaAction = "processInfo")]
public ActionResult ProcessInfo(string id)
{
ProcessInfoDto result = new ProcessInfoDto();
using (AntORM orm = new AntORM())
{
orm.db = DataAccessFactory.CreateDataConnection("CyclingItem");
RequestModel res = new RequestModel();
res.newSt = new SqlNote() { Author = "smj", NewSt = new System.Diagnostics.StackTrace(true), SqlDesc = "流程信息" };
var processList = orm.Queryable().Where(p => p.IsDelete == 0 && p.OrderId == id).ToList(res).ResultModel as List;
var devices = new List();
var deviceIds = processList?.Select(p => p.DeviceId).ToList();
if (deviceIds != null && deviceIds.Count() > 0)
{
devices = orm.Queryable().Where(p => p.IsDelete == 0 && deviceIds.Contains(p.Id)).ToList(res).ResultModel as List;
}
processList?.ForEach(processItem => {
result.OrderProcessInfos.Add(new OrderProcessDto()
{
Id = processItem.Id,
DeviceName = devices.FirstOrDefault(p => p.Id == processItem.DeviceId)?.Name ?? processItem.DeviceId,
CurrentOrderStatus = processItem.CurrentOrderStatus,
Message = processItem.Message,
CreateDT = processItem.CreateDT
});
});
}
return View(result);
}
///
/// 订单日志信息
///
///
[UserAuthorize(ModuleAlias = "OrderList", OperaAction = "orderLog")]
public ActionResult OrderLog(string id)
{
OrderLogDto result = new OrderLogDto();
using (AntORM orm = new AntORM())
{
orm.db = DataAccessFactory.CreateDataConnection("CyclingItem");
RequestModel res = new RequestModel();
res.newSt = new SqlNote() { Author = "smj", NewSt = new System.Diagnostics.StackTrace(true), SqlDesc = "订单日志" };
var orderLogs = orm.Queryable().Where(p => p.OrderId == id).ToList(res).ResultModel as List;
result.OrderLogInfos = orderLogs.Select(p => new OrderLogInfoDto()
{
Id = p.Id,
Title = p.Title,
Content = p.Content,
CreateDT = p.CreateDT,
CreateBY = p.CreateBY
}).ToList();
}
return View(result);
}
///
/// 订单详情
///
///
///
[UserAuthorize(ModuleAlias = "OrderList", OperaAction = "Detail")]
public ActionResult Detail(string id)
{
OrderInfoDto entity = new OrderInfoDto();
using (AntORM orm = new AntORM())
{
try
{
orm.db = DataAccessFactory.CreateDataConnection("CyclingItem");
RequestModel request = new RequestModel
{
newSt = new SqlNote() { Author = "smj", NewSt = new System.Diagnostics.StackTrace(true), SqlDesc = "订单详情" },
Oid = id.ToString()
};
var reslut = orm.GetEntity(request);
if (reslut.IsSuccess)
{
YW_Order order = reslut.ResultModel;
string payAccount = string.Empty;
if (!string.IsNullOrWhiteSpace(order.PaySerialId))
{
// 若有支付流水号,则查询出事谁支付的
var payCall = orm.Queryable().Where(p=>p.PaySerialId == order.PaySerialId).FirstOrDefault().ResultModel as YW_PayCall;
if (payCall != null)
{
payAccount = $"({payCall.BuyAccount})";
}
}
// 查询订单所属的设备
request.Oid = order.DeviceId;
var device = orm.GetEntity(request).ResultModel as SYS_Device;
// 查询订单详情
var orderDetails = orm.Queryable().Where(p => p.IsDelete == 0 && p.OrderId == order.Id).ToList(request).ResultModel as List;
List od = new List();
decimal totalBuyPrice = 0;
orderDetails?.ForEach(orderDetail =>
{
od.Add(new OrderDetailsDto()
{
Id = orderDetail.Id,
ProductId = orderDetail.ProductId,
Name = orderDetail.Name,
Code = orderDetail.Code,
Img = orderDetail.Img,
Price = orderDetail.Price,
BuyingPrice = orderDetail.BuyingPrice,
Count = orderDetail.Count,
CreateDT = orderDetail.CreateDT
});
totalBuyPrice += orderDetail.BuyingPrice * orderDetail.Count;
});
// 返回实体赋值
entity.Id = order.Id;
entity.DeviceName = device.Name;
entity.Price = order.Price;
entity.BuyingPrice = totalBuyPrice;
entity.Profit = order.Price - totalBuyPrice;
entity.OrderStatus = order.OrderStatus;
entity.PaySerialId = order.PaySerialId;
entity.BuyAccount = payAccount;
entity.CreateDT = order.CreateDT;
entity.OrderDetails = od;
}
}
catch (Exception e)
{
}
}
return View(entity);
}
///
/// 订单退款
///
///
///
[UserAuthorize(ModuleAlias = "OrderList", OperaAction = "orderRefund")]
public ActionResult OrderRefundDetails(string id)
{
OrderRefundDto entity = new OrderRefundDto();
using (AntORM orm = new AntORM())
{
try
{
orm.db = DataAccessFactory.CreateDataConnection("CyclingItem");
RequestModel request = new RequestModel
{
newSt = new SqlNote() { Author = "smj", NewSt = new System.Diagnostics.StackTrace(true), SqlDesc = "订单详情" },
Oid = id.ToString()
};
var reslut = orm.GetEntity(request);
if (reslut.IsSuccess)
{
YW_Order order = reslut.ResultModel;
string payAccount = string.Empty;
if (!string.IsNullOrWhiteSpace(order.PaySerialId))
{
// 若有支付流水号,则查询出事谁支付的
var payCall = orm.Queryable().Where(p => p.PaySerialId == order.PaySerialId).FirstOrDefault().ResultModel as YW_PayCall;
if (payCall != null)
{
payAccount = $"({payCall.BuyAccount})";
}
}
// 查询订单所属的设备
request.Oid = order.DeviceId;
var device = orm.GetEntity(request).ResultModel as SYS_Device;
// 返回实体赋值
entity.Id = order.Id;
entity.DeviceName = device.Name;
entity.Price = order.Price;
entity.PaySerialId = order.PaySerialId;
entity.BuyAccount = payAccount;
entity.PayStatus = order.PayStatus;
entity.CreateDT = order.CreateDT;
}
}
catch (Exception e)
{
}
}
return View(entity);
}
///
/// 订单退款
///
///
///
[UserAuthorize(ModuleAlias = "OrderList", OperaAction = "orderRefund")]
public ActionResult OrderRefund(OrderRefundDto entity)
{
Ant.ORM.RequestModel sqlQueryReq = new Ant.ORM.RequestModel();
sqlQueryReq.newSt = new Ant.ORM.SqlNote() { Author = "smj", NewSt = new System.Diagnostics.StackTrace(true), SqlDesc = "OrderListController-OrderRefund" };
JsonHelper json = new JsonHelper() { Msg = "订单退款", Status = "n", ReUrl = "/OrderList/List" };
// WebClient webClient = new WebClient();
using (HttpClient client = new HttpClient())
{
// 参数设置
string stringForHash = $"{entity.Id}|{WebSystemAccessConfig.Sign}";
string token = MD5Helper.MD5Hash(stringForHash);
string url = $"http://api.rgtech.ltd/api/order/orderrefund/{entity.Id}?token={token}";
var method = new HttpMethod("PUT");
var request = new HttpRequestMessage(method, url);
var response = client.SendAsync(request).Result;
if (response.IsSuccessStatusCode)
{
var stream = response.Content.ReadAsStringAsync().Result;
ApiResult result = Newtonsoft.Json.JsonConvert.DeserializeObject(stream);
if (result.IsSuccess)
{
// 退款成功
json.Status = "y";
}
else
{
json.Msg = result.Message;
}
}
else
{
json.Msg = "退款失败";
WriteLog(enumOperator.Audit, $"订单退款:{Newtonsoft.Json.JsonConvert.SerializeObject(response)}", enumLog4net.ERROR);
}
}
return Json(json);
}
}
}