using Quartz;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Utils;
using Sugar.Enties;
using WxPayAPI;
namespace PMS.NetCore.Service
{
///
/// 物业缴费订单定时处理任务
///
public class WyOrderJob : IJob
{
public Task Execute(IJobExecutionContext context)
{
return Task.Run(() =>
{
try
{
NlogHelper.quartzLogger.Info("开始物业缴费订单定时处理任务");
var manager = new fdc_pm_meterrecordManager();
//遍历最近5天未支付的订单
var list = manager.Db.Queryable().Where(m => m.Status == 0 && m.AddTime > DateTime.Now.AddDays(-5)).ToList();
foreach (var order in list)
{
orderQuery(order.OrderNo);
}
}
catch (Exception ero)
{
NlogHelper.quartzLogger.Error(ero, "物业缴费订单定时处理任务执行出错");
throw;
}
});
}
///
/// 向微信支付发起订单查询请求,根据查询结果,插入缴费记录,及更新order订单表的状态
///
/// 订单号
///
private string orderQuery(string out_trade_no)
{
WxPayData data = new WxPayData();
data.SetValue("out_trade_no", out_trade_no);
WxPayData result = WxPayApi.OrderQuery(data);//提交订单查询请求给API,接收返回数据
if (result.GetValue("return_code") == null || result.GetValue("result_code") == null || result.GetValue("trade_state") == null)
{
NlogHelper.quartzLogger.Debug("return_code...null");
return "";
}
if (result.GetValue("return_code").ToString() != "SUCCESS" || result.GetValue("result_code").ToString() != "SUCCESS" || result.GetValue("trade_state").ToString() != "SUCCESS")
{
NlogHelper.quartzLogger.Debug("return_code...不成功");
return "";
}
var manager = new fdc_pm_meterrecordManager();
manager.Db.BeginTran();
var order = manager.Db.Queryable().First(m => m.OrderNo == out_trade_no);
#region 扫码支付订单处理
if (order == null)
{
manager.Db.RollbackTran();
return "";
}
try
{
string revfarecode="";
var res = manager.InsertPayWithNoTran(order.Farerowid, order.Money.ToString(), order.Ownername, order.Hname, ref revfarecode);
if(res!="success")
{
manager.Db.RollbackTran();
return "";
}
else
{
order.Status = 1;
order.Revfarecode = revfarecode;
//更新订单状态为已支付 更新生成的已缴费主键到order表
manager.Db.Updateable().UpdateColumns(it => new { it.Status, it.Revfarecode }).ExecuteCommand();
}
manager.Db.CommitTran();
return "SUCCESS";
}
catch (Exception ex)
{
manager.Db.RollbackTran();
NlogHelper.quartzLogger.Error(ex,$"{out_trade_no}订单缴费和更新订单状态出错");
//throw;
}
#endregion
return "";
}
}
}