using Aop.Api.Util;
using CRM.Core.BLL;
using CRM.Core.BLL.Application.Pay;
using CRM.Core.BLL.Base;
using CRM.Core.BLL.EventBus.EventHandlers;
using CRM.Core.BLL.Isvr;
using CRM.Core.BLL.Util;
using CRM.Core.BLL.Wx;
using CRM.Core.Common.EventBus;
using CRM.Core.DTO.Ord;
using CRM.Core.Model.Entity;
using CRM.Core.Model.Enum;
using CRM.Core.Model.Map;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.IO;
using System.Linq;
using System.Linq.Expressions;
using System.ServiceModel;
using System.Web;
using WX.CRM.Common;
using WX.CRM.Common.WxPay;
namespace ZXDService
{
// 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码、svc 和配置文件中的类名“OrderPayService”。
// 注意: 为了启动 WCF 测试客户端以测试此服务,请在解决方案资源管理器中选择 OrderPayService.svc 或 OrderPayService.svc.cs,然后开始调试。
public class OrderPayService : IOrderPayService
{
private readonly Bas_CompanyVirtual_BL _company = new Bas_CompanyVirtual_BL();
private string clientKey = WX.CRM.Common.Utility.GetSettingByKey("CRMClientKey");
ISVR_INTERFACECALLLOG_BL logHelper = new ISVR_INTERFACECALLLOG_BL();
SecurityHelper sHelper = new SecurityHelper();
WX_SZZYORDER_BL orderBL = new WX_SZZYORDER_BL();
WX_SzzyOrderPay_BL orderPayBL = new WX_SzzyOrderPay_BL();
WX_SzzyOrderDeposit_BL _deposit = new WX_SzzyOrderDeposit_BL();
CACHE_BL cache_BL = new CACHE_BL();
private PayServices _payService = new PayServices();
public OrderPayService()
{
EventBus.Instance.Subscribe(new PayInfoEventHandler());
EventBus.Instance.Subscribe(new SendPayMessageEventHandler());
EventBus.Instance.Subscribe(new PayOrderEventHandler());
EventBus.Instance.Subscribe(new DepositOrderEventHandler());
EventBus.Instance.Subscribe(new OpenOrderEventHandler());
EventBus.Instance.Subscribe(new SupplyOrderEventHandler());
EventBus.Instance.Subscribe(new RefundOrderEventHandler());
EventBus.Instance.Subscribe(new UpGradeOrderEventHandler());
EventBus.Instance.Subscribe(new DepositUseOrderEventHandler());
EventBus.Instance.Subscribe(new DepositRefundOrderEventHandler());
EventBus.Instance.Subscribe(new FinishRefundContractEventHandler());
EventBus.Instance.Subscribe(new DeleteRefundOrderEventHandler());
EventBus.Instance.Subscribe(new CloseFreeOrderEventHandler());
EventBus.Instance.Subscribe(new HandGiftEventHandler());
EventBus.Instance.Subscribe(new PayRejectEventHandler());
EventBus.Instance.Subscribe(new DepositRejectEventHandler());
EventBus.Instance.Subscribe(new DepositDeleteEventHandler());
EventBus.Instance.Subscribe(new OrderAndPayInfoEventHandler());
}
///
/// 在线下单情况,订单走补单接口,支付完成后走本接口
///
///
///
///
///
public Stream SyncPayInfo(string content, string clientid, string sign)
{
LogHelper.Info("cntent:" + content + ",clientid:" + clientid + ",sign:" + sign);
string retMsg = string.Empty;
//string url = Utility.GetClassAndMethodName(1);
//var content2 = content;
//logHelper.AddCallLog(content, clientid, sign, url);
//验证是否非法请求
if (!sHelper.CheckClientValid(clientid, content, sign))
{
retMsg = Utility.ObjectToJson(new { result = false, retcode = (int)EnumInterfaceErrcode.非法请求 });
//retMsg = sHelper.encyptData(clientid, retMsg);
LogHelper.Info("非法请求content:" + content + ",clientid=" + clientid + ",sign=" + sign);
return Utility.GetStream(sHelper.encyptData(clientKey, retMsg));
}
#region 参数解析阶段
LogHelper.Info("开始解密");//解密后的内容
SyncOrderPayInfoDto syncOrderPayInfo = null;
try
{
LogHelper.Info("xx:" + content);
content = sHelper.decyptData(clientid, content); //解密操作
LogHelper.Info("内容:" + content);//解密后的内容
syncOrderPayInfo = Utility.JSONToObject(content);
if (string.IsNullOrEmpty(syncOrderPayInfo.ApplyOrderId))
{
retMsg = Utility.ObjectToJson(new { result = false, retcode = (int)EnumInterfaceErrcode.参数错误 });
//retMsg = sHelper.encyptData(clientid, retMsg);
return Utility.GetStream(sHelper.encyptData(clientid, retMsg));
}
}
catch (Exception ex)
{
retMsg = Utility.ObjectToJson(new { result = false, retcode = (int)EnumInterfaceErrcode.参数错误 });
LogHelper.Error(string.Concat("当前请求Url:", "|" + content + "|", ex.ToString()));
return Utility.GetStream(sHelper.encyptData(clientid, retMsg));
}
#endregion
try
{
decimal syncOrderId = Convert.ToDecimal(syncOrderPayInfo.ApplyOrderId);
var order = orderBL.Get(m => m.SZZYORDERID == syncOrderId);
if (order == null)
{
retMsg = Utility.ObjectToJson(new { result = false, retcode = (int)EnumInterfaceErrcode.找不到订单 });
LogHelper.Info(string.Format("线上订单:{0},本地不存在", syncOrderPayInfo.ApplyOrderId));
return Utility.GetStream(sHelper.encyptData(clientid, retMsg));
}
var orderId = Convert.ToInt32(order.ORDERID);
var payInfo = orderPayBL.Get(m => m.orderid == orderId && m.payno == syncOrderPayInfo.PayNo && m.paytype == syncOrderPayInfo.PayType);
if (payInfo != null)
{
retMsg = Utility.ObjectToJson(new { result = false, retcode = (int)EnumInterfaceErrcode.订单已开通 });
LogHelper.Info(string.Format("线上订单:{0},支付流水:{1},支付类型:{2}已经存在", syncOrderPayInfo.ApplyOrderId, syncOrderPayInfo.PayNo, syncOrderPayInfo.PayType.ToString()));
return Utility.GetStream(sHelper.encyptData(clientid, retMsg));
}
else
{
//payInfo = new WX_SzzyOrderPay();
//payInfo.orderid = orderId;
//payInfo.needpay = order.NEEDPAY.Value;
//payInfo.payprice = syncOrderPayInfo.PayPrice; //支付成功后,这里的金额单位是元
//payInfo.payno = syncOrderPayInfo.PayNo;
//payInfo.paytype = syncOrderPayInfo.PayType;
//var payTypeName = cache_BL.GetList_Parameter(ParameterGroup.OrderPayType).FirstOrDefault(p => p.PARAVALUE == syncOrderPayInfo.PayType.ToString()).PARANAME;
//payInfo.paytypename = payTypeName;
//payInfo.remark = syncOrderPayInfo.PayMark;
//payInfo.ctime = DateTime.Now;
//payInfo.paydate = DateTime.Now.Date;
//payInfo.payname = "在线支付";
//payInfo.companycode = order.companycode;
//payInfo.auditstatus = 1; //表示已经确认
//payInfo.audittime = payInfo.ctime;
//payInfo.channel = order.CHANNEL;
//payInfo.checkpaytime = DateTime.Now;
////写入支付记录表
//int result = orderPayBL.Add(payInfo);
//if (result == 1)
//{
// //更新订单支付信息
// order.ARRIVALPAY = syncOrderPayInfo.PayPrice;
// order.FINALPAY = syncOrderPayInfo.PayPrice;
// order.ARRIVALTIME = payInfo.paydate;
// order.ORDERSTATUS = "200";
// order.ORDERSTATUSNAME = "已支付";
// orderBL.Update(order);
// //推送支付事件
// EventBus.Instance.Publish(new PayInfoEvent(Convert.ToInt32(order.ORDERID), "200", "已支付", order.NEEDPAY.Value, payInfo.paydate.Value, order.companycode, syncOrderPayInfo.PayNo, syncOrderPayInfo.PayType, payTypeName, syncOrderPayInfo.PayMark, payInfo.payprice, payInfo.ctime, payInfo.payname));
// ////推送收款短信给订单审核人
// //var onlinePayReceiveMobile = ConfigurationManager.AppSettings["OnlinePayReceiveMobile"];
// //var resList = new List();
// //if (!string.IsNullOrWhiteSpace(onlinePayReceiveMobile))
// //{
// // resList = onlinePayReceiveMobile.Split(',').ToList();
// //}
// //foreach (var resId in resList)
// //{
// // EventBus.Instance.Publish(new SendPayMessageEvent(payInfo.payprice, resId, payTypeName, 10000));
// //}
// ////推送短信结束
// LogHelper.Info(string.Format("处理成功!订单:{0},本地订单号:{1}", syncOrderPayInfo.ApplyOrderId, order.ORDERID.ToString()));
// return Utility.GetStream(sHelper.encyptData(clientid, Utility.ObjectToJson(new { result = true, retcode = 10000 })));
//}
//else
//{
// return Utility.GetStream(sHelper.encyptData(clientid, Utility.ObjectToJson(new { result = false, retcode = (int)EnumInterfaceErrcode.系统错误 })));
//}
var paylist = new List() {
new PayInfoDto(){
resid = order.RESID,
paytype = syncOrderPayInfo.PayType,
paytypename =cache_BL.GetList_Parameter(ParameterGroup.OrderPayType).FirstOrDefault(p => p.PARAVALUE == syncOrderPayInfo.PayType.ToString()).PARANAME,
paydate =DateTime.Now.Date,
payname = "在线支付",
remark = syncOrderPayInfo.PayMark,
payno = syncOrderPayInfo.PayNo,
isuse = 0,
companycode = order.companycode,
tradeno = null,
creator = null,
creatorname = null,
checkpaytime=DateTime.Now,
payprice=syncOrderPayInfo.PayPrice
}
};
var orderuselist = new List() {
new OrderuseDto() { orderid = Convert.ToInt32(order.ORDERID), needpay = order.NEEDPAY.Value, arrivalpay = 0 }
};
var dto2 = new CRM.Core.DTO.Ord.PayDto2
{
orderuselist = orderuselist,
resid = order.RESID,
//depprice = depprice,
paylist = paylist
};
LogHelper.Info("dto2:" + dto2.ToJson());
var ret2 = _payService.Add(dto2, 2);
if (ret2.result)
{
LogHelper.Info("写入支付记录和更新订单状态执行数据库操作成功!");
//支付信息写入成功之后自动调用审核
var depositInfoList = ret2.retmsg;
foreach (var deposit in depositInfoList)
{
try
{
var depositModel = _deposit.Get(p => p.id == deposit.id);
if (depositModel != null)
{
_deposit.Audit(depositModel, 0, string.Empty);
}
}
catch (Exception exx)
{
LogHelper.Error(exx);
}
}
}
return Utility.GetStream(Utility.ObjectToJson(new { state = 0, message = "同步成功" }));
}
}
catch (Exception ex)
{
retMsg = Utility.ObjectToJson(new { result = false, retcode = (int)EnumInterfaceErrcode.系统错误 });
LogHelper.Error(string.Concat("执行支付信息入库错误:", ex.ToString()));
return Utility.GetStream(sHelper.encyptData(clientid, retMsg));
}
}
///
/// 支付宝回调
///
///
///
public Stream AliPayNotify(Stream input)
{
LogHelper.Info("===========entry===========");
Dictionary sArray = GetRequestPost(input);
if (sArray.Count != 0)
{
//LogHelper.Info("sArray:" + sArray.ToJson());
var tradeNo = sArray["out_trade_no"];
LogHelper.Info("traodeNo:" + tradeNo);
var aliPayId = tradeNo.Substring(1, 16);
LogHelper.Info("aliPayId:" + aliPayId);
var trade_status = sArray["trade_status"];
var payNo = sArray["trade_no"];
var payDate = sArray["gmt_payment"];
var appId = sArray["app_id"];
var payPrice = sArray["total_amount"];
var aliPayPublicKey = AliPayConfig.alipay_public_key(aliPayId);
//LogHelper.Info("PublicKey:" + aliPayPublicKey);
bool flag = AlipaySignature.RSACheckV1(sArray, aliPayPublicKey, AliPayConfig.charset, "RSA2", false);
if (flag)
{
//交易状态
//判断该笔订单是否在商户网站中已经做过处理
//如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
//请务必判断请求时的total_amount与通知时获取的total_fee为一致的
//如果有做过处理,不执行商户的业务程序
//注意:
//退款日期超过可退款期限后(如三个月可退款),支付宝系统发送该交易状态通知
//1、商户需要验证该通知数据中的 out_trade_no 是否为商户系统中创建的订单号;
//2、判断 total_amount 是否确实为该订单的实际金额(即商户订单创建时的金额);
//3、校验通知中的 seller_id(或者 seller_email ) 是否为 out_trade_no 这笔单据的对应的操作方(有的时候,一个商户可能有多个seller_id / seller_email);
//4、验证 app_id 是否为该商户本身。上述 1、2、3、4有任何一个验证不通过,则表明本次通知是异常通知,务必忽略。在上述验证通过后商户必须根据支付宝不同类型的业务通知,正确的进行不同的业务处理,并且过滤重复的通知结果数据。在支付宝的业务通知中,只有交易通知状态为 TRADE_SUCCESS 或 TRADE_FINISHED 时,支付宝才会认定为买家付款成功。
if (trade_status == "TRADE_SUCCESS" || trade_status == "TRADE_FINISHED")
{
if (tradeNo.StartsWith("D"))
{
//订金以D开头
var deposit = _deposit.Get(p => p.tradeno == tradeNo && p.auditstatus == 0);
if (deposit != null)
{
if (deposit.payprice == decimal.Parse(payPrice))
{
if (aliPayId == appId)
{
deposit.payno = payNo;
deposit.paydate = DateTime.Parse(DateTime.Parse(payDate).ToString("yyyy-MM-dd"));
deposit.audittime = DateTime.Parse(payDate);
deposit.checkpaytime = DateTime.Parse(payDate);
LogHelper.Info("depositInfo:" + deposit.ToJson());
//_deposit.Audit(deposit, 0, string.Empty);
_deposit.Audit(deposit, 0, string.Empty, 2);//走自动审核流程
return Utility.GetStream("success");
}
}
}
}
else
{
//正常订单以P开头(弃用)
//var orderPay = orderPayBL.Get(p => p.tradeno == tradeNo && p.auditstatus == 0);
//if (orderPay != null)
//{
// if (orderPay.payprice == decimal.Parse(payPrice))
// {
// if (aliPayId == appId)
// {
// orderPay.payno = payNo;
// orderPay.paydate = DateTime.Parse(DateTime.Parse(payDate).ToString("yyyy-MM-dd"));
// orderPay.audittime = DateTime.Parse(payDate);
// LogHelper.Info("orderPayInfo:" + orderPay.ToJson());
// var order = orderBL.Get(p => p.ORDERID == orderPay.orderid);
// //orderPayBL.Audit(orderPay, order, 0, string.Empty);
// _deposit.Audit(deposit, 0, string.Empty, 2);//走自动审核流程
// return Utility.GetStream("success");
// }
// }
//}
//正常订单以P开头(但是目前都走订金方式)
var deposit = _deposit.Get(p => p.tradeno == tradeNo && p.auditstatus == 0);
if (deposit != null)
{
if (deposit.payprice == decimal.Parse(payPrice))
{
if (aliPayId == appId)
{
deposit.payno = payNo;
deposit.paydate = DateTime.Parse(DateTime.Parse(payDate).ToString("yyyy-MM-dd"));
deposit.audittime = DateTime.Parse(payDate);
deposit.checkpaytime = DateTime.Parse(payDate);
LogHelper.Info("depositInfo:" + deposit.ToJson());
//_deposit.Audit(deposit, 0, string.Empty);
_deposit.Audit(deposit, 0, string.Empty, 2);//走自动审核流程
return Utility.GetStream("success");
}
}
}
}
}
else
{
//交易状态没成功
return Utility.GetStream("failure");
}
LogHelper.Info("true");
}
else
{
LogHelper.Info("false");
}
}
return Utility.GetStream("failure");
}
///
/// 微信回调
///
///
public Stream WxPayNotify()
{
string msg = OperationContext.Current.RequestContext.RequestMessage.ToString();
LogHelper.Info("Receive data from WeChat : " + msg);
WxPayData notifyData = GetWxNotifyData(msg);
//检查支付结果中transaction_id是否存在
if (!notifyData.IsSet("transaction_id"))
{
//若transaction_id不存在,则立即返回结果给微信支付后台
WxPayData res = new WxPayData();
res.SetValue("return_code", "FAIL");
res.SetValue("return_msg", "支付结果中微信订单号不存在");
LogHelper.Error("The Pay result is error : " + res.ToXml());
return Utility.GetStream(res.ToXml());
//return res.ToXml();
}
string transaction_id = notifyData.GetValue("transaction_id").ToString();
//查询订单,判断订单真实性
if (!QueryOrder(transaction_id, notifyData.GetValue("mch_id").ToString()))
{
//若订单查询失败,则立即返回结果给微信支付后台
WxPayData res = new WxPayData();
res.SetValue("return_code", "FAIL");
res.SetValue("return_msg", "订单查询失败");
LogHelper.Error("Order query failure : " + res.ToXml());
return Utility.GetStream(res.ToXml());
//return res.ToXml();
}
//查询订单成功
else
{
var tradeNo = notifyData.GetValue("out_trade_no").ToString();
var endTime = notifyData.GetValue("time_end").ToString();
var paydate = DateTime.ParseExact(endTime, "yyyyMMddHHmmss", System.Globalization.CultureInfo.CurrentCulture);
if (tradeNo.StartsWith("D"))
{
//订金以D开头
var deposit = _deposit.Get(p => p.tradeno == tradeNo && p.auditstatus == 0);
if (deposit != null)
{
deposit.payno = transaction_id;
deposit.paydate = DateTime.Parse(paydate.ToString("yyyy-MM-dd"));
deposit.checkpaytime = paydate;
LogHelper.Info("depositInfo:" + deposit.ToJson());
_deposit.Audit(deposit, 0, string.Empty, 2);//走自动审核流程
}
}
else
{
////正常订单以P开头
//var orderPay = orderPayBL.Get(p => p.tradeno == tradeNo && p.auditstatus == 0);
//if (orderPay != null)
//{
// //orderPay.payno = transaction_id;
// //orderPay.paydate = DateTime.Parse(paydate.ToString("yyyy-MM-dd"));
// LogHelper.Info("orderPayInfo:" + orderPay.ToJson());
// //var order = orderBL.Get(p => p.ORDERID == orderPay.orderid);
// //orderPayBL.Audit(orderPay, order, 0, string.Empty);//废弃
// var deposit = _deposit.Get(p => p.tradeno == tradeNo && p.auditstatus == 0);//也是走自动审核
// deposit.paydate = DateTime.Parse(paydate.ToString("yyyy-MM-dd"));
// deposit.payno = transaction_id;
// retMsg ret = _deposit.Audit(deposit, 0, string.Empty, 2);
//}
//else
//{
// LogHelper.Info("未查找到数据:" + tradeNo);
//}
var deposit = _deposit.Get(p => p.tradeno == tradeNo && p.auditstatus == 0);
if (deposit != null)
{
deposit.payno = transaction_id;
deposit.paydate = DateTime.Parse(paydate.ToString("yyyy-MM-dd"));
deposit.checkpaytime = paydate;
LogHelper.Info("depositInfo:" + deposit.ToJson());
_deposit.Audit(deposit, 0, string.Empty, 2);//走自动审核流程
}
}
WxPayData res = new WxPayData();
res.SetValue("return_code", "SUCCESS");
res.SetValue("return_msg", "OK");
LogHelper.Info("order query success : " + res.ToXml());
return Utility.GetStream(res.ToXml());
//return res.ToXml();
}
}
public Dictionary GetRequestPost(Stream input)
{
int i = 0;
Dictionary sArray = new Dictionary();
StreamReader sr = new StreamReader(input);
string s = sr.ReadToEnd();
sr.Dispose();
LogHelper.Info(string.Format("流输入值:{0}", s));
NameValueCollection coll = HttpUtility.ParseQueryString(HttpUtility.UrlDecode(s));
//NameValueCollection coll;
//coll = System.Web.HttpContext.Current.Request.Form;
String[] requestItem = coll.AllKeys;
for (i = 0; i < requestItem.Length; i++)
{
var key = requestItem[i];
//RSA加密算法,urldecode后会把'+'变成空格
if (key == "sign")
{
sArray.Add(key, coll.Get(key).Replace(' ', '+'));
}
else
{
sArray.Add(key, coll.Get(key));
}
LogHelper.Info(string.Format("{0}|||{1}", key, sArray[key]));
}
return sArray;
}
public WxPayData GetWxNotifyData(string msg)
{
//接收从微信后台POST过来的数据
/*Stream s = input;
int count = 0;
byte[] buffer = new byte[1024];
StringBuilder builder = new StringBuilder();
while ((count = s.Read(buffer, 0, 1024)) > 0)
{
builder.Append(Encoding.UTF8.GetString(buffer, 0, count));
}
s.Flush();
s.Close();
s.Dispose();*/
//StreamReader sr = new StreamReader(input);
//string builder = sr.ReadToEnd();
//sr.Close();
//sr.Dispose();
//转换数据格式并验证签名
WxPayData data = new WxPayData();
try
{
data.FromXml(msg, "");
}
catch (WxPayException ex)
{
//若签名错误,则立即返回结果给微信支付后台
WxPayData res = new WxPayData();
res.SetValue("return_code", "FAIL");
res.SetValue("return_msg", ex.Message);
LogHelper.Error("Sign check error : " + res.ToXml());
HttpContext.Current.Response.Write(res.ToXml());
HttpContext.Current.Response.End();
//return Utility.GetStream(res.ToXml());
}
LogHelper.Info("Check sign success");
return data;
}
//查询订单
private bool QueryOrder(string transaction_id, string mch_id)
{
WxPayData req = new WxPayData();
req.SetValue("transaction_id", transaction_id);
WxPayData res = WxPayApi.OrderQuery(req, mch_id);
if (res.GetValue("return_code").ToString() == "SUCCESS" &&
res.GetValue("result_code").ToString() == "SUCCESS")
{
return true;
}
else
{
return false;
}
}
public JsonResult> Add(string content, string clientid, string sign)
{
try
{
if (!sHelper.CheckClientValid(clientid, content, sign))//签名认证
{
return new JsonResult>() { result = false, retcode = (int)EnumInterfaceErrcode.非法请求, retmsg = null };
}
content = sHelper.decyptData(clientid, content); //解密操作
//LogHelper.Info("content:" + content);
//var dto = Utility.JSONToObject(content);
var dto = JsonConvert.DeserializeObject(content);
LogHelper.Info("payadd:" + dto.ToJson());
var res = _payService.Add(dto);
return new JsonResult>() { result = res.result, retcode = (int)EnumInterfaceErrcode.调用成功, retmsg = res.retmsg };
}
catch (Exception ex)
{
LogHelper.Error(ex.ToString());
return new JsonResult>() { result = false, retcode = (int)EnumInterfaceErrcode.系统错误, retmsg = null };
}
}
public JsonResult> Use(string content, string clientid, string sign)
{
try
{
if (!sHelper.CheckClientValid(clientid, content, sign))//签名认证
{
return new JsonResult>() { result = false, retcode = (int)EnumInterfaceErrcode.非法请求, retmsg = null };
}
content = sHelper.decyptData(clientid, content); //解密操作
var dto = Utility.JSONToObject(content);
LogHelper.Info("payuse:" + dto.ToJson());
var res = _payService.Use(dto);
return new JsonResult>() { result = res.result, retcode = (int)EnumInterfaceErrcode.调用成功, retmsg = res.retmsg };
}
catch (Exception ex)
{
LogHelper.Error(ex.ToString());
return new JsonResult>() { result = false, retcode = (int)EnumInterfaceErrcode.系统错误, retmsg = null };
}
}
///
/// 查找客户可用金额
///
///
///
///
///
public JsonResult LastpriceGet(string content, string clientid, string sign)
{
try
{
if (!sHelper.CheckClientValid(clientid, content, sign))//签名认证
{
return new JsonResult() { result = false, retcode = (int)EnumInterfaceErrcode.非法请求, retmsg = null };
}
content = sHelper.decyptData(clientid, content); //解密操作
var dto = Utility.JSONToObject(content);
if (dto.channel == 0 || string.IsNullOrEmpty(dto.resid))
{
return new JsonResult() { result = false, retcode = (int)EnumInterfaceErrcode.参数错误, retmsg = null };
}
LastPriceRspDto responseModel = new LastPriceRspDto()
{
resid = dto.resid,
lastprice = 0,
useprice = 0
};
//CompanyVirlual channelInfo = _company.GetChannel(dto.channel);
List channelInfoList = _company.GetChannelList(dto.channel);
if (channelInfoList == null || channelInfoList.Count() == 0)
{
return new JsonResult() { result = false, retcode = (int)EnumInterfaceErrcode.参数错误, retmsg = null };
}
WX_SzzyOrderDeposit_BL _orderDeposit = new WX_SzzyOrderDeposit_BL();
var where = PredicateExtensionses.True();
where = where.And(m => m.resid == dto.resid && (m.isdelete == 0 || m.isdelete == null) && m.auditstatus == 1);
var predicates = new List>>();
foreach (var channelInfo in channelInfoList)
{
foreach (var item in channelInfo.channels)
{
predicates.Add(m => m.channel >= item.minChannel && m.channel <= item.maxChannel);
}
}
where = where.AndListOr(predicates.ToArray());
var orderDepList = _orderDeposit.GetList(where).ToList();
if (orderDepList != null && orderDepList.Count() > 0)
{
responseModel.lastprice = orderDepList.Sum(m => m.lastprice) ?? 0;
responseModel.useprice = orderDepList.Sum(m => m.useprice) ?? 0;
}
if (responseModel.lastprice < 0)
{
responseModel.lastprice = 0;
}
if (responseModel.useprice < 0)
{
responseModel.useprice = 0;
}
return new JsonResult() { result = true, retcode = (int)EnumInterfaceErrcode.调用成功, retmsg = responseModel };
}
catch (Exception ex)
{
LogHelper.Error(ex.ToString());
return new JsonResult() { result = false, retcode = (int)EnumInterfaceErrcode.系统错误, retmsg = null };
}
}
///
/// 订金列表
///
///
///
///
///
public ListResult OrderPayListGet(string content, string clientid, string sign)
{
try
{
if (!sHelper.CheckClientValid(clientid, content, sign))//签名认证
{
return new ListResult { result = false, retcode = (int)EnumInterfaceErrcode.非法请求, retmsg = "非法请求" };
}
content = sHelper.decyptData(clientid, content); //解密操作
var dto = Utility.JSONToObject(content);
if (dto.channel == 0)
{
return new ListResult { result = false, retcode = (int)EnumInterfaceErrcode.参数错误, retmsg = "参数错误" };
}
//CompanyVirlual channelInfo = _company.GetChannel(dto.channel);
List channelInfoList = _company.GetChannelList(dto.channel);
if (channelInfoList == null || channelInfoList.Count() == 0)
{
return new ListResult { result = false, retcode = (int)EnumInterfaceErrcode.参数错误, retmsg = "参数错误" };
}
WX_SzzyOrderDeposit_BL _orderDeposit = new WX_SzzyOrderDeposit_BL();
var where = PredicateExtensionses.True();
where = where.And(m => (m.isdelete == 0 || m.isdelete == null));// 查询需要查出除了删除的所有状态数据
if (dto.id.HasValue)
{
where = where.And(m => m.id == dto.id.Value);
}
if (dto.auditstatus.HasValue)
{
where = where.And(m => m.auditstatus == dto.auditstatus.Value);
}
if (dto.audittimeStime.HasValue)
{
where = where.And(m => m.audittime >= dto.audittimeStime.Value);
}
if (dto.audittimeEtime.HasValue)
{
dto.audittimeEtime = dto.audittimeEtime.Value.AddDays(1);
where = where.And(m => m.audittime <= dto.audittimeEtime.Value);
}
if (dto.paydateStime.HasValue)
{
where = where.And(m => m.paydate >= dto.paydateStime.Value);
}
if (dto.paydateEtime.HasValue)
{
dto.paydateEtime = dto.paydateEtime.Value.AddDays(1);
where = where.And(m => m.paydate <= dto.paydateEtime.Value);
}
if (!string.IsNullOrEmpty(dto.payno))
{
dto.payno = dto.payno.Trim();
where = where.And(m => m.payno == dto.payno);
}
if (dto.paytype.HasValue)
{
where = where.And(m => m.paytype == dto.paytype.Value);
}
if (!string.IsNullOrEmpty(dto.resid))
{
dto.resid = dto.resid.Trim();
where = where.And(m => m.resid == dto.resid);
}
var predicates = new List>>();
foreach (var channelInfo in channelInfoList)
{
foreach (var item in channelInfo.channels)
{
predicates.Add(m => m.channel >= item.minChannel && m.channel <= item.maxChannel);
}
}
where = where.AndListOr(predicates.ToArray());
//Laypage laypage = new Laypage()
//{
// count = dto.laypage.count,
// limit = dto.laypage.limit,
// order = dto.laypage.order,
// page = dto.laypage.page,
// sort = dto.laypage.sort
//};
OrderPayListSumRspInfo info = new OrderPayListSumRspInfo() { lastpriceSum = _orderDeposit.Sum(where, m => m.lastprice), paypriceSum = _orderDeposit.Sum(where, m => m.payprice) };
var quer = _orderDeposit.GetList(where, m => m.ctime, dto.laypage);
var nlist = quer.ToList();
var newObjects = nlist.Select(m => Mapper.T1MapToT2(m)).ToList();
return new ListResult() { result = true, retcode = (int)EnumInterfaceErrcode.调用成功, retmsg = "succss", infolist = newObjects, pageinfo = dto.laypage, sumInfo = info };
}
catch (Exception ex)
{
LogHelper.Error(ex.ToString());
return new ListResult() { result = false, retcode = (int)EnumInterfaceErrcode.系统错误, retmsg = "succss" };
}
}
///
/// pay列表获取
///
///
///
///
///
public ListResult OrderPayUseListGet(string content, string clientid, string sign)
{
try
{
if (!sHelper.CheckClientValid(clientid, content, sign))//签名认证
{
return new ListResult { result = false, retcode = (int)EnumInterfaceErrcode.非法请求, retmsg = "非法请求" };
}
content = sHelper.decyptData(clientid, content); //解密操作
var dto = Utility.JSONToObject(content);
if (dto.channel == 0)
{
return new ListResult { result = false, retcode = (int)EnumInterfaceErrcode.参数错误, retmsg = "参数错误" };
}
WX_SzzyOrderPay_BL _orderpay = new WX_SzzyOrderPay_BL();
OrderPayUseListSumRspInfo info = new OrderPayUseListSumRspInfo() { usePriceSum = 0 };
List nlist = _orderpay.OrderPayUseListGet(dto, ref info);
return new ListResult() { result = true, retcode = (int)EnumInterfaceErrcode.调用成功, retmsg = "succss", infolist = nlist, pageinfo = dto.laypage, sumInfo = info };
}
catch (Exception ex)
{
LogHelper.Error(ex.ToString());
return new ListResult() { result = false, retcode = (int)EnumInterfaceErrcode.系统错误, retmsg = "succss" };
}
}
}
}