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); } } } }