ComplianceServer/oldcode/Core.BLL/Application/Refund/RefundServices.cs

266 lines
14 KiB
C#

using CRM.Core.BLL.Base;
using CRM.Core.BLL.EventBus.Events;
using CRM.Core.BLL.Util;
using CRM.Core.BLL.Wx;
using CRM.Core.Common.WebHelper;
using CRM.Core.DTO;
using CRM.Core.DTO.Ord;
using CRM.Core.Model.Entity;
using CRM.Core.Model.Enum;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using WX.CRM.Common;
namespace CRM.Core.BLL.Application.Refund
{
public class RefundServices
{
private readonly BAS_PARAMETER_BL paramter_bl = new BAS_PARAMETER_BL();
private readonly WX_SzzyOrderRefund_BL _orderRefund = new WX_SzzyOrderRefund_BL();
private readonly WX_SzzyOrderDeposit_BL _orderDeposit = new WX_SzzyOrderDeposit_BL();
private readonly WX_SZZYORDER_BL _order = new WX_SZZYORDER_BL();
private readonly Wx_SzzyOrderRefundContract_BL _orderRefundContract = new Wx_SzzyOrderRefundContract_BL();
private readonly WX_PRODUCT_BL _subProduct = new WX_PRODUCT_BL();
private readonly Wx_SzzyOrder_HandGift_BL _SzzyOrder_HandGift_BL = new Wx_SzzyOrder_HandGift_BL();
private readonly SecurityHelper sHelper = new SecurityHelper();
public retMsg Audit(WX_SzzyOrderRefund orderRefundDto, int status, int userId, string userName)
{
var curMonth = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1);
var url = paramter_bl.GetValue_Parameter(Parameter.UserCenter_RiaService_refund);//封装出来的接口
var url2 = paramter_bl.GetValue_Parameter(Parameter.UserCenter_RiaService_closeFreeOrder);
var orderRefund = _orderRefund.Get(p => p.id == orderRefundDto.id);
orderRefund.att2 = orderRefundDto.att2;
var deposit = _orderDeposit.Get(p => p.id == orderRefund.orderid);
if (deposit != null)
{
//订金退款
orderRefund.auditstatus = 1;
orderRefund.auditor = userId;
orderRefund.auditorname = userName;
orderRefund.audittime = DateTime.Now;
var audret = _orderRefund.Audit(orderRefund, null);
if (audret.result)
{
Common.EventBus.EventBus.Instance.Publish(new DepositRefundOrderEvent(deposit.id, (int)orderRefund.id, orderRefund.auditstatus, orderRefund.auditor.Value, orderRefund.auditorname, orderRefund.audittime.Value, deposit.isuse, deposit.companycode));
}
return audret;
}
else
{
var order = _order.GetModel(orderRefund.orderid);
if (status == 220)
{
//只退款,不修改订单状态,不关闭权限
orderRefund.auditstatus = 1;
orderRefund.auditor = userId;
orderRefund.auditorname = userName;
orderRefund.audittime = DateTime.Now;
orderRefund.att2 = orderRefundDto.att2;
var audret = _orderRefund.Audit(orderRefund, order);
if (audret.result)
{
//推送订单状态
Common.EventBus.EventBus.Instance.Publish(new RefundOrderEvent(Convert.ToInt32(order.ORDERID), order.ORDERSTATUS, order.ORDERSTATUSNAME, order.companycode, (int)orderRefund.id, orderRefund.auditstatus, orderRefund.auditor.Value, orderRefund.auditorname, orderRefund.audittime.Value, Convert.ToInt32(order.ISOPEN.Value), orderRefund.channel));
}
return audret;
}
else
{
var subProductList = _subProduct.GetSubProductListByProductId(0, 0, null);
var subProduct = subProductList.FirstOrDefault(p => p.SUBPRODUCTID == order.SUBPRODUCTID);
//正常订单退款
var contract = _orderRefundContract.Get(p => p.OrderId == orderRefund.orderid);
if (orderRefund.isacturalrefund == 1 && (contract == null || contract.ContractStatus != 2) && order.ISOPEN == 1 && subProduct.IsCompliance == 1)
{
return new retMsg { result = false, retmsg = "该退款方式需要签退款协议,请确认!" };
}
var activeProductExtcount = 0;
var i = 0;
if (!string.IsNullOrEmpty(order.activeproductext))
{
#region 退
var activeProductExt = Utility.JSONToObject<List<ActiveProduct>>(order.activeproductext);
activeProductExt.Reverse();
i = 0;
activeProductExtcount = activeProductExt.Count();
foreach (var item in activeProductExt)
{
var refundReq = new freeOrderClose { userName = order.SOFTUSERNAME, orderId = item.SzzyOrderId.ToString(), flag = "0" };
var param = JsonHelper.ObjDivertToJson(sHelper.createAjaxSignEncodingStr(JsonHelper.ObjDivertToJson(refundReq), SecurityHelper.OrderClientIdKey));
var refundRet = Utility.PostAjaxData(url2, param, Encoding.UTF8);
var refundRetMsg = JsonHelper.JsonDivertToObj<freeOrderCloseRes>(refundRet);
Core.Common.LogHelper.Trace("赠送退款接口返回结果:" + refundRetMsg.ToJson());
if (refundRetMsg.iRet == 0)
{
i++;
}
else
{
LogHelper.Error("执行退款--赠送订单关闭失败:参数:" + refundRet + "--执行结果:+" + refundRet);
}
}
#endregion
}
//手工赠送订单退款
var handgiftOrder = _SzzyOrder_HandGift_BL.GetList(order.ORDERID);
var handgiftOrdercount = 0;
foreach (var item in handgiftOrder)
{
//审核通过后才有权限id
if (item.orderstatus == 1 && item.szzyorderid.HasValue)
{
handgiftOrdercount++;
item.orderstatus = 3;
item.closememo = "退款关闭";
item.closetime = DateTime.Now;
item.closeuser = string.Format("{0}-{1}", userId, userName);
var refundReq = new freeOrderClose { userName = order.SOFTUSERNAME, orderId = item.szzyorderid.ToString(), flag = "0" };
var param = JsonHelper.ObjDivertToJson(sHelper.createAjaxSignEncodingStr(JsonHelper.ObjDivertToJson(refundReq), SecurityHelper.OrderClientIdKey));
var refundRet = Utility.PostAjaxData(url2, param, Encoding.UTF8);
var refundRetMsg = JsonHelper.JsonDivertToObj<freeOrderCloseRes>(refundRet);
Common.LogHelper.Trace($"{order.ORDERID}赠送退款接口返回结果:{refundRetMsg.ToJson()}");
if (refundRetMsg.iRet == 0)
{
i++;
_SzzyOrder_HandGift_BL.CheckGift(item);
Common.EventBus.EventBus.Instance.Publish(new HandGiftEvent(item, item.companycode));//推送数据到坐席端
}
else
{
LogHelper.Error("执行退款--手工赠送订单关闭失败:参数:" + refundRet + "--执行结果:+" + refundRet);
}
}
}
var giftCount = activeProductExtcount + handgiftOrdercount;
if (i == giftCount)
{
return RefundNode(order, orderRefund, status, userId, userName);
}
else
{
LogHelper.Error($"退款失败giftCount:{giftCount},activeProductExtcount:{activeProductExtcount},handgiftOrdercount:{handgiftOrdercount}");
return new retMsg { result = false, retmsg = "付费订单退款成功,但赠送订单退款失败,请重试!" };
}
}
}
}
private retMsg RefundNode(WX_SZZYORDER order, WX_SzzyOrderRefund orderRefund, int status, int userId, string userName)
{
var curMonth = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1);
var url = paramter_bl.GetValue_Parameter(Parameter.UserCenter_RiaService_refund);//封装出来的接口
#region =================NodeJs退款订单========================
LogHelper.Info("====调用NodeJs创建订单===");
RefundOrderReq suorder = new RefundOrderReq
{
orderId = order.SZZYORDERID.ToString(),
refundStatus = 200,//退款状态
cancelAmount = Convert.ToInt32(orderRefund.refundprice * 100)//退款金额
};
string json = JsonHelper.ObjDivertToJson(suorder);
LogHelper.Info("Node.JS接口参数json=>:" + json);
json = JsonHelper.ObjDivertToJson(sHelper.createAjaxSignEncodingStr(json, SecurityHelper.OrderClientIdKey));
string retmsg = Utility.PostAjaxData(url, json, Encoding.UTF8);//返回信息
RefundOrderRsp retmessage = JsonHelper.JsonDivertToObj<RefundOrderRsp>(retmsg);
LogHelper.Info("Node.JS接口返回数据json=>:" + retmsg);
#endregion
#region =================NodeJs修改订单状态========================
if (retmessage.retCode == (int)NodeJsOrderEnum. || retmessage.retCode == (int)NodeJsOrderEnum.)
{
LogHelper.Info("====调用NodeJs创建订单===");
suorder.refundStatus = 220;//退款状态
json = JsonHelper.ObjDivertToJson(suorder);
LogHelper.Info("Node.JS接口参数json=>:" + json);
json = JsonHelper.ObjDivertToJson(sHelper.createAjaxSignEncodingStr(json, SecurityHelper.OrderClientIdKey));
retmsg = Utility.PostAjaxData(url, json, Encoding.UTF8);//返回信息
LogHelper.Info("Node.JS接口返回数据json=>:" + retmsg);
//retmsg = sHelper.decyptData(SecurityHelper.OrderClientIdKey, retmsg);
retmessage = JsonHelper.JsonDivertToObj<RefundOrderRsp>(retmsg);
orderRefund.auditstatus = 1;
orderRefund.auditor = userId;
orderRefund.auditorname = userName;
orderRefund.audittime = DateTime.Now;
// orderRefund.att2 = orderRefundDto.att2;
orderRefund.refunddate = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd"));
if (retmessage.retCode == (int)NodeJsOrderEnum.)//开通成功
{
if (status == 70)
{
order.ORDERSTATUS = "70";
order.ORDERSTATUSNAME = "已取消";
}
else
{
order.ORDERSTATUS = "90";
order.ORDERSTATUSNAME = "已退款";
}
var audret = _orderRefund.Audit(orderRefund, order);
if (audret.result)
{
//推送订单状态
Common.EventBus.EventBus.Instance.Publish(new RefundOrderEvent(Convert.ToInt32(order.ORDERID), order.ORDERSTATUS, order.ORDERSTATUSNAME, order.companycode, (int)orderRefund.id, orderRefund.auditstatus, orderRefund.auditor.Value, orderRefund.auditorname, orderRefund.audittime.Value, Convert.ToInt32(order.ISOPEN.Value), orderRefund.channel));
}
return audret;
}
else if (retmessage.retCode == (int)NodeJsOrderEnum.)//已经退款过
{
if (status == 70)
{
order.ORDERSTATUS = "70";
order.ORDERSTATUSNAME = "已取消";
}
else
{
order.ORDERSTATUS = "90";
order.ORDERSTATUSNAME = "已退款";
}
var audret = _orderRefund.Audit(orderRefund, order);
if (audret.result)
{
//推送订单状态
Common.EventBus.EventBus.Instance.Publish(new RefundOrderEvent(Convert.ToInt32(order.ORDERID), order.ORDERSTATUS, order.ORDERSTATUSNAME, order.companycode, (int)orderRefund.id, orderRefund.auditstatus, orderRefund.auditor.Value, orderRefund.auditorname, orderRefund.audittime.Value, Convert.ToInt32(order.ISOPEN.Value), orderRefund.channel));
}
return audret;
}
else
{
return new retMsg { result = false, retmsg = string.IsNullOrEmpty(retmessage.retMsg) ? Utility.GetCheckEnumNameByValue<NodeJsOrderEnum>(retmessage.retCode) : retmessage.retMsg };
}
}
else
{
return new retMsg { result = false, retmsg = string.IsNullOrEmpty(retmessage.retMsg) ? Utility.GetCheckEnumNameByValue<NodeJsOrderEnum>(retmessage.retCode) : retmessage.retMsg };
}
#endregion
}
}
}