using BizCom;
using SQLData;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using SiteCore;
using SiteCore.taoObj;
using static SiteCore.taoObj.Trade_fullinfo_get_response_Obj;
using System.Data;
using static SiteCore.taoObj.Api_tmc_refund_info_Obj;
using NHibernate.Mapping;
using SiteCore.Handler;
using Utils.Serialization;
using SiteCore.taobao;
//status可选值:
//* TRADE_NO_CREATE_PAY(没有创建支付宝交易)
//* WAIT_BUYER_PAY(等待买家付款)
//* SELLER_CONSIGNED_PART(卖家部分发货)
//* WAIT_SELLER_SEND_GOODS(等待卖家发货, 即:买家已付款)
//* WAIT_BUYER_CONFIRM_GOODS(等待买家确认收货, 即:卖家已发货)
//* TRADE_BUYER_SIGNED(买家已签收, 货到付款专用)
//* TRADE_FINISHED(交易成功)
//* TRADE_CLOSED(付款以后用户退款成功,交易自动关闭)
//* TRADE_CLOSED_BY_TAOBAO(付款以前,卖家或买家主动关闭交易)
//* PAY_PENDING(国际信用卡支付付款确认中)
//* WAIT_PRE_AUTH_CONFIRM(0元购合约中)
namespace SiteCore
{
///
/// 同步推送处理
///
public class refundTmcHelper
{
public static int RemoveEmptyEntries { get; private set; }
public static string GetUTF8String(byte[] buffer)
{
if (buffer == null)
return null;
if (buffer.Length <= 3)
{
return Encoding.UTF8.GetString(buffer);
}
byte[] bomBuffer = new byte[] { 0xef, 0xbb, 0xbf };
if (buffer[0] == bomBuffer[0] && buffer[1] == bomBuffer[1] && buffer[2] == bomBuffer[2])
{
return new UTF8Encoding(false).GetString(buffer, 3, buffer.Length - 3);
}
return Encoding.UTF8.GetString(buffer);
}
public static string GetNoNullValue_string(string value)
{
value = value.Replace("\n", " ");
value = value.Replace("\r", " ");
if (value == null)
{
return "";
}
return value;
}
public static string GetNull_tostring(object value)
{
if (value == null)
{
return "";
}
return value.ToString();
}
// 时间戳转为C#格式时间
public static DateTime StampToDateTime(string timeStamp)
{
DateTime dateTimeStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1));
long lTime = long.Parse(timeStamp + "0000");
TimeSpan toNow = new TimeSpan(lTime);
return dateTimeStart.Add(toNow);
}
public static void Api_TmcRefundMsg(string res)
{
Api_tmc_refund_info_Obj refundFullObj = null;
if (res == "") return;
try
{
res = GetUTF8String(Encoding.UTF8.GetBytes(res));
//res = res.Replace(" ", "");
refundFullObj = JsonConvert.DeserializeObject(res);
if (refundFullObj == null)
{
Console.WriteLine("Api_tmc_refund_info_Obj isNull");
XLog.SaveLog(0, "Api_tmc_refund_info_Obj isNull");
return;
}
Content tObj = refundFullObj.content;
CeErpTrade trade = CeErpTrade.Get(tObj.refOid);
if (trade != null)
{
try
{
apiDesign.API_GetPrintData_Refund(CeErpTradeCell.GetByTid(tObj.refOid));//退款同步设计师系统
}
catch (Exception ex)
{
XLog.SaveLog(0, res + "|refund|1|" + ex.Message + "退款同步设计师系统失败");
}
//先判断有没有创建退款订单。多退款可以有数据
CeErpTradeRefund refund = CeErpTradeRefund.GetByTidAndReId(tObj.refOid, tObj.refAid);
LogHelper.addLog(tObj.refOid, 0, "客户退款", 0);
if (refund == null)
{
refund = new CeErpTradeRefund();
refund.refund_id = tObj.refAid;
refund.tid = tObj.refOid;
//refund.oid = item.oid;
if (tObj.createTime != null && tObj.createTime.Length > 0)
{
refund.created = StampToDateTime(tObj.createTime);
}
if (tObj.updateTime != null && tObj.updateTime.Length > 0)
{
refund.modified = StampToDateTime(tObj.updateTime);
}
refund.status = tObj.status;
refund.order_status = tObj.orderStatus;
refund.payment = trade.payment.ToString();
refund.refund_fee = tObj.refundFee;//退款金额
refund.buyer_nick = GetNull_tostring(tObj.openBuyerNick);
refund.seller_nick = trade.seller_nick;
refund.total_fee = tObj.totalFee;
refund.RefundState = 1;
refund.reason = tObj.reason;
refund.refundDesc = tObj.desc;
if (Convert.ToDouble(refund.payment) - Convert.ToDouble(refund.refund_fee) > 0.01)
{
/*refund.IsPartRefund = 1;*/
}
refund.Create();
try
{
StringBuilder CeErpTradeCellSql = new StringBuilder();
CeErpTradeCellSql.AppendFormat("select * from CE_ErpTradeCell where tid='{0}';", trade.tid);
DataSet data = DbHelper.DbConn.ExecuteDataset(CeErpTradeCellSql.ToString());
DataTable datatable = data.Tables[0];
if (datatable.Rows.Count > 0)
{
foreach (DataRow dr in datatable.Rows)
{
int DesignUserId = Convert.ToInt32(dr["DesignUserId"]);
int OrderState = Convert.ToInt32(dr["OrderState"]);
int CustomerUserId = Convert.ToInt32(dr["CustomerUserId"]);
if (DesignUserId > 0 && OrderState == 4)
{
CeErpMessageTip ceErpMessageTip = new CeErpMessageTip();
ceErpMessageTip.tid = dr["ctid"].ToString();
ceErpMessageTip.type = Convert.ToInt32(MessageState.订单退款);
ceErpMessageTip.userId = DesignUserId;
ceErpMessageTip.isVisit = false;
ceErpMessageTip.content = "订单" + dr["ctid"] + "申请了退款!";
ceErpMessageTip.Create();
StringBuilder sqlTip = new StringBuilder();
sqlTip.AppendFormat(" select top 1 B.id from view_ErpUser A JOIN view_ErpUser b ON a.OrgID = B.OrgID and b.PostName Like '设计主管%' WHERE A.ID = '{0}';", DesignUserId);
DataTable dth = DbHelper.DbConn.ExecuteDataset(sqlTip.ToString()).Tables[0];
if (dth.Rows.Count > 0)
{
foreach (DataRow dthdr in dth.Rows)
{
int Bid = Convert.ToInt32(dthdr["id"]);
if (Bid > 0)
{
CeErpMessageTip ceErpMessageTipB = new CeErpMessageTip();
ceErpMessageTipB.tid = dr["ctid"].ToString();
ceErpMessageTipB.type = Convert.ToInt32(MessageState.订单退款);
ceErpMessageTipB.userId = Bid;
ceErpMessageTipB.isVisit = false;
ceErpMessageTipB.content = "订单" + dr["ctid"] + "申请了退款!";
ceErpMessageTipB.Create();
}
}
}
}
else if (CustomerUserId > 0)
{
CeErpMessageTip ceErpMessageTip = new CeErpMessageTip();
ceErpMessageTip.tid = dr["ctid"].ToString();
ceErpMessageTip.type = Convert.ToInt32(MessageState.订单退款);
ceErpMessageTip.userId = CustomerUserId;
ceErpMessageTip.isVisit = false;
ceErpMessageTip.content = "订单" + dr["ctid"] + "申请了退款!";
ceErpMessageTip.Create();
StringBuilder sqlTip = new StringBuilder();
sqlTip.AppendFormat(" select top 1 B.id from view_ErpUser A JOIN view_ErpUser b ON a.OrgID = B.OrgID and b.PostName Like '店长%' WHERE A.ID = '{0}';", CustomerUserId);
DataTable dth = DbHelper.DbConn.ExecuteDataset(sqlTip.ToString()).Tables[0];
if (dth.Rows.Count > 0)
{
foreach (DataRow dthdr in dth.Rows)
{
int Bid = Convert.ToInt32(dthdr["id"]);
if (Bid > 0)
{
CeErpMessageTip ceErpMessageTipB = new CeErpMessageTip();
ceErpMessageTipB.tid = dr["ctid"].ToString();
ceErpMessageTipB.type = Convert.ToInt32(MessageState.订单退款);
ceErpMessageTipB.userId = Bid;
ceErpMessageTipB.isVisit = false;
ceErpMessageTipB.content = "订单" + dr["ctid"] + "申请了退款!";
ceErpMessageTipB.Create();
}
}
}
}
}
}
}
catch (Exception ex)
{
XLog.SaveLog(0, "退款推送通知创建失败!!" + ex);
}
int rstate = commonHelper.getRefundTagByState(tObj.status);
StringBuilder sql = new StringBuilder();
if (refund.IsPartRefund == 1)
{
double paylast = trade.payment - Convert.ToDouble(refund.refund_fee);
sql.AppendFormat("update CE_ErpTradeCell with(rowlock) set IsRefund={1},payment={2} where tid='{0}' and isAfterSaleOrder=0;", tObj.refOid, 3, paylast);
}
else
sql.AppendFormat("update CE_ErpTradeCell with(rowlock) set IsRefund={1} where tid='{0}' and isAfterSaleOrder=0;", tObj.refOid, rstate);
CeErpTradeRefund.ExecuteNonQuery(sql.ToString());
string rstateWord = commonHelper.getRefundStringByState(tObj.status);
//commonHelper.UpdateRefundOrderState(tObj.refOid, rstate);
StringBuilder sqls = new StringBuilder();
sqls.AppendFormat("update CE_ErpDesignerBill set isDel = 1 where tid = '{0}'", tObj.refOid);
CeErpDesignerBill.ExecuteNonQuery(sqls.ToString());
LogHelper.addDesignerBillLog(tObj.refOid, 0, "客户退款", "系统自动", 0);
}
else
{
if (refund.status != tObj.status)
{
refund.modified = DateTime.Now;
if (tObj.updateTime != null && tObj.updateTime.Length > 0)
{
refund.modified = StampToDateTime(tObj.updateTime);
}
refund.order_status = tObj.orderStatus;
refund.Update();
int rstate = commonHelper.getRefundTagByState(tObj.status);
string rstateWord = commonHelper.getRefundStringByState(tObj.status);
StringBuilder sql = new StringBuilder();
sql.AppendFormat("update CE_ErpTradeCell with(rowlock) set IsRefund={0} where tid='{1}' and isAfterSaleOrder=0;", rstate, tObj.refOid);
CeErpTradeRefund.ExecuteNonQuery(sql.ToString());
//commonHelper.UpdateRefundOrderState(tObj.refOid, rstate);
LogHelper.addLog(tObj.refOid, 0, "更新退款状态:" + rstateWord, (int)OrderState.交易关闭);
// 取消设计费
StringBuilder sqls = new StringBuilder();
sqls.AppendFormat("update CE_ErpDesignerBill set isDel = 1 where tid = '{0}'", tObj.refOid);
CeErpDesignerBill.ExecuteNonQuery(sqls.ToString());
LogHelper.addDesignerBillLog(tObj.refOid, 0, "客户退款", "系统自动", 0);
}
}
List goodsItems = tObj.lines;
foreach (Api_tmc_refund_info_Obj.Lines item in goodsItems)
{
CeErpTradeOrder goods = CeErpTradeOrder.GetByOid(item.refOlId);
if (goods != null)
{
goods.refund_status = item.refundStatus;
goods.Update();
}
}
if (tObj.status == "WAIT_SELLER_AGREE")
{
StringBuilder sql = new StringBuilder();
sql.AppendFormat("update ce_erptradecell with(rowlock) set isrefund={1} where tid='{0}' and isAfterSaleOrder=0;", tObj.refOid, 1);
DbHelper.DbConn.ExecuteNonQuery(sql.ToString());
designHelper.API_refundOrder(tObj.refOid, "refundIng", tObj.reason);
LogHelper.addLog(tObj.refOid, 0, "申请退款中", 0);
}
else if (tObj.status == "CLOSED")
{
StringBuilder sql = new StringBuilder();
sql.AppendFormat("update ce_erptradecell with(rowlock) set isrefund={1} where tid='{0}' and isAfterSaleOrder=0;", tObj.refOid, 0);
DbHelper.DbConn.ExecuteNonQuery(sql.ToString());
designHelper.API_refundOrder(tObj.refOid, "refundCancel", tObj.reason);
LogHelper.addLog(tObj.refOid, 0, "关闭申请退款中", 0);
}
else if (tObj.status == "REFUNDED" || tObj.status == "SUCCESS")
{
designHelper.API_refundOrder(tObj.refOid, "refundEd", tObj.reason);
}
}
else
{
CeErpSpecialRefund ceErpSpecialRefund = new CeErpSpecialRefund();
ceErpSpecialRefund.refoid = tObj.refOid;
ceErpSpecialRefund.refxml = res;
ceErpSpecialRefund.whethernotify = 0;
ceErpSpecialRefund.Create();
XLog.SaveLog(0, tObj.refOid + "退款推送没有找到对应的订单!!");
}
}
catch (Exception ex)
{
XLog.SaveLog(0, res + "|refund|1|" + ex.Message);
}
}
}
}