| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337 |
- 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
- {
- /// <summary>
- /// 同步推送处理
- /// </summary>
- 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<Api_tmc_refund_info_Obj>(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},UpdateTime = getdate() where tid='{0}' and isAfterSaleOrder=0;", tObj.refOid, 3, paylast);
- }
- else
- sql.AppendFormat("update CE_ErpTradeCell with(rowlock) set IsRefund={1},UpdateTime = getdate() 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.status = tObj.status;
- 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<Api_tmc_refund_info_Obj.Lines> 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);
- }
- }
- }
- }
|