/// <summary> /// 获取订单退款失败原因 /// </summary> /// <param name="orderId"></param> /// <returns></returns> public ActionResult GetOutOrderFailRemark(int orderId = 0) { Return_Msg returnData = new Return_Msg(); try { PlatChildGoodsOrder order = PlatChildGoodsOrderBLL.SingleModel.GetModel(orderId); CityMorders ctiyMorder = new CityMordersBLL().GetModel(order.OrderId); ReFundResult outOrderRsult = RefundResultBLL.SingleModel.GetModelByTradeno(ctiyMorder.trade_no); if (outOrderRsult == null) { returnData.Msg = "未知原因!"; } else { returnData.Msg = outOrderRsult.err_code_des ?? outOrderRsult.return_msg; returnData.isok = true; } } catch (Exception ex) { returnData.Msg = ex.Message; } return(Json(returnData)); }
/// <summary> /// 微信支付 /// </summary> /// <param name="orderObj"></param> /// <param name="cityMorder"></param> /// <returns></returns> public object PayOrder(object orderObj, CityMorders cityMorder, TransactionModel tran, ref int orderId) { CityMordersBLL cityMordersBLL = new CityMordersBLL(); QiyeGoodsOrder order = (QiyeGoodsOrder)orderObj; cityMorder.payment_free = order.BuyPrice; if (tran == null || tran.sqlArray.Count() <= 0) { log4net.LogHelper.WriteInfo(this.GetType(), "独立模板生成订单失败,sql为空"); return(""); } TransactionModel tranModel = new TransactionModel(); tranModel.Add(cityMordersBLL.BuildAddSql(cityMorder)); foreach (string sqlitem in tran.sqlArray) { tranModel.Add(sqlitem); } if (!ExecuteTransactionDataCorect(tranModel.sqlArray, tranModel.ParameterArray)) { log4net.LogHelper.WriteInfo(this.GetType(), "独立模板生成订单失败" + JsonConvert.SerializeObject(tran)); return(""); } QiyeStore store = QiyeStoreBLL.SingleModel.GetModel(order.StoreId); if (store != null) { //清除商品缓存 QiyeGoodsBLL.SingleModel.RemoveEntGoodListCache(store.Aid); } order = GetModelByOrderNum(order.OrderNum); if (order == null) { log4net.LogHelper.WriteInfo(this.GetType(), $"独立模板生成订单失败,获取不到生成的订单【{order.OrderNum}】"); return(""); } if (order.OrderId <= 0) { log4net.LogHelper.WriteInfo(this.GetType(), "独立模板生成订单OrderId失败" + JsonConvert.SerializeObject(tranModel)); return(""); } cityMorder.Id = order.OrderId; orderId = order.OrderId; //为0不需进入生成微信预支付订单的流程(免费订单) if (order.BuyPrice == 0) { PayResult payresult = new PayResult(); new CityMordersBLL(payresult, cityMorder).QiyePayOrder(0, order); return(new { orderid = order.Id, dbOrder = order.Id }); } else //生成微信预支付订单 { return(new { orderid = order.OrderId, dbOrder = order.Id }); } }
/// <summary> /// 微信退款 /// </summary> /// <param name="order"></param> /// <param name="msg"></param> /// <param name="tran"></param> /// <returns></returns> public bool RefundMoney(PinGoodsOrder order, int money, ref string msg, TransactionModel tran = null) { bool istran = tran != null; if (!istran) { tran = new TransactionModel(); } CityMorders cityMorder = new CityMordersBLL().GetModel(order.payNo); if (cityMorder == null) { msg = "退款失败,未找到退款的源微信订单"; return(false); } if (cityMorder.payment_status == 0) //微信订单未支付 { msg = "退款失败,该订单未支付"; return(false); } ReFundQueue reModel = new ReFundQueue { minisnsId = -5, money = money, orderid = cityMorder.Id, traid = cityMorder.trade_no, addtime = DateTime.Now, note = "小程序拼享惠退款", retype = 1 }; tran.Add(new ReFundQueueBLL().BuildAddSql(reModel)); if (!istran) { if (!ExecuteTransactionDataCorect(tran.sqlArray, tran.ParameterArray)) { msg = "加入退款队列失败"; return(false); } } msg = "加入退款队列成功,将在1-7个工作日内响应退款"; return(true); }
/// <summary> /// 跟进 退款状态 (退款是否成功)用于微信支付跟进 /// </summary> /// <returns></returns> public bool updateOutOrderState() { TransactionModel tranModel = new TransactionModel(); List <BargainUser> itemList = GetList($" State = {2} and outOrderDate <= (NOW()-interval 17 second) ", 1000, 1) ?? new List <BargainUser>(); List <CityMorders> orderList = new List <CityMorders>(); List <Entity.MiniApp.ReFundResult> outOrderList = new List <Entity.MiniApp.ReFundResult>(); if (itemList.Any()) { orderList = new CityMordersBLL().GetList($" Id in ({string.Join(",", itemList.Select(x => x.CityMordersId))}) ", 1000, 1) ?? new List <CityMorders>(); if (orderList.Any()) { outOrderList = RefundResultBLL.SingleModel.GetList($" transaction_id in ('{string.Join("','", orderList.Select(x => x.trade_no))}') and retype = 1") ?? new List <ReFundResult>(); itemList.ForEach(x => { var curOrder = orderList.Where(y => y.Id == x.CityMordersId).FirstOrDefault(); if (curOrder != null) { //退款是排程处理,故无法确定何时执行退款,而现阶段退款操作成败与否都会记录在系统内 var curOutOrder = outOrderList.Where(y => y.transaction_id == curOrder.trade_no).FirstOrDefault(); if (curOutOrder != null && curOutOrder.result_code.Equals("SUCCESS")) { x.State = 3;//表示退款成功 tranModel.Add(BuildUpdateSql(x, "State")); } else if (curOutOrder != null && !curOutOrder.result_code.Equals("SUCCESS")) { x.State = 4;// 退款失败; tranModel.Add(BuildUpdateSql(x, "State")); } //tranModel.Add(BuildUpdateSql(x, "State")); } }); } } var isSuccess = ExecuteTransactionDataCorect(tranModel.sqlArray, tranModel.ParameterArray); return(isSuccess); }
/// <summary> /// 修改下单金额,返回新的citymorders id /// </summary> public Int32 updateWxOrderMoney(int citymorderId, int price, ref string errorMsg) { int newOrderId = 0; CityMordersBLL citymordersBLL = new CityMordersBLL(); CityMorders buyMorder = citymordersBLL.GetModel(citymorderId); if (buyMorder == null) { errorMsg = "该订单的支付资料丢失,无法修改金额"; return(newOrderId); } //关闭原微信订单 bool isColseOrderSuccess = CloseCityMorder(buyMorder.Id, ref errorMsg); if (!isColseOrderSuccess) { return(newOrderId); } buyMorder.Status = -1; citymordersBLL.Update(buyMorder, "Status"); //开新单 buyMorder.trade_no = buyMorder.orderno = WxPayApi.GenerateOutTradeNo(); //生成新的订单号 buyMorder.payment_free = price; buyMorder.Status = 0; newOrderId = buyMorder.Id = Convert.ToInt32(citymordersBLL.Add(buyMorder)); if (buyMorder.Id <= 0) { errorMsg = "生成新的微信订单失败"; return(newOrderId); } return(newOrderId); }
/// <summary> /// 返回是否关闭成功 /// </summary> /// <param name="setting"></param> /// <param name="morder"></param> /// <param name="notify_url"></param> /// <returns></returns> public bool CloseCityMorder(int citymorederId, ref string errorMsg) { CityMorders morder = new CityMordersBLL().GetModel(citymorederId); if (morder == null) { errorMsg = "未找到citymorder订单"; return(false); } PayCenterSetting setting = PayCenterSettingBLL.SingleModel.GetPayCenterSetting(morder.appid); if (setting == null) { errorMsg = "未找到用户的商户配置"; return(false); } string out_trade_no = morder.orderno;//商户订单号 if (string.IsNullOrEmpty(morder.orderno)) { return(false); } WxPayData data = new WxPayData(); data.SetValue("out_trade_no", out_trade_no); WxPayData result = WxPayApi.CloseOrder(data, setting); if (result == null || !result.GetValue("return_code").ToString().Equals("SUCCESS")) { errorMsg = "请求关闭订单失败,原因为:"; switch (data.GetValue("return_code").ToString()) { case "ORDERPAID": errorMsg += "订单已支付,不能发起关单"; break; case "SYSTEMERROR": errorMsg += "系统异常,请重新调用该API"; break; case "ORDERCLOSED": errorMsg += "订单已关闭,无法重复关闭"; break; case "SIGNERROR": errorMsg += "签名错误"; break; case "REQUIRE_POST_METHOD": errorMsg += "未使用post传递参数"; break; case "XML_FORMAT_ERROR": errorMsg += "XML格式错误"; break; } return(false); } return(true); }
/// <summary> /// 创建预约付费订单 /// </summary> /// <param name="aid">小程序aid</param> /// <param name="uid">userId</param> /// <param name="remark">预约商品信息Json字符串 EntFormRemark</param> /// <returns></returns> public EntGoodsOrder CreateOrder(int aid, int userId, Store store, string remark, int buyMode, out string msg) { EntGoodsOrder order = null; try { EntFormRemark formRemark = JsonConvert.DeserializeObject <EntFormRemark>(remark); EntGoods goods = EntGoodsBLL.SingleModel.GetModel(formRemark.goods.id); if (goods == null) { msg = "订单生成失败:商品信息不存在"; return(order); } //商品标价 int originalPrice = originalPrice = Convert.ToInt32(!string.IsNullOrWhiteSpace(formRemark.attrSpacStr) ? goods.GASDetailList.First(x => x.id.Equals(formRemark.attrSpacStr)).originalPrice * 100 : goods.originalPrice * 100); //商品未打折价格 int price = Convert.ToInt32(!string.IsNullOrWhiteSpace(formRemark.attrSpacStr) ? goods.GASDetailList.First(x => x.id.Equals(formRemark.attrSpacStr)).price * 100 : goods.price * 100); //清单 EntGoodsCart goodsCar = new EntGoodsCart { NotDiscountPrice = price, originalPrice = originalPrice, GoodName = goods.name, FoodGoodsId = goods.id, SpecIds = formRemark.attrSpacStr, Count = formRemark.count, Price = price, SpecInfo = formRemark.SpecInfo, SpecImg = formRemark.SpecImg,//规格图片 UserId = userId, CreateDate = DateTime.Now, State = 0, GoToBuy = 1, aId = aid, type = (int)EntGoodCartType.预约表单 }; goodsCar.Id = Convert.ToInt32(EntGoodsCartBLL.SingleModel.Add(goodsCar)); if (goodsCar.Id <= 0) { msg = "订单生成失败:购物车添加失败"; return(order); } C_UserInfo userInfo = C_UserInfoBLL.SingleModel.GetModel(userId); if (userInfo == null) { msg = "订单生成失败:用户信息不存在"; return(order); } XcxAppAccountRelation xcxAppAccount = XcxAppAccountRelationBLL.SingleModel.GetModel(aid); if (xcxAppAccount == null) { msg = "订单生成失败:小程序信息不存在"; return(order); } int buyPrice = 0; if (store.funJoinModel.YuyuePayType == 0)//固定金额付费 { buyPrice = store.funJoinModel.YuyuePayCount * 100 * goodsCar.Count; } else { double priceData = goodsCar.Price * goodsCar.Count * store.funJoinModel.YuyuePayCount * 0.01; buyPrice = Convert.ToInt32(Math.Ceiling(priceData)); } order = new EntGoodsOrder() { BuyPrice = buyPrice, GoodsGuid = goodsCar.FoodGoodsId.ToString(), UserId = userInfo.Id, CreateDate = DateTime.Now, OrderType = (int)EntOrderType.预约付费订单, QtyCount = goodsCar.Count, aId = aid, BuyMode = buyMode, }; order.Id = Convert.ToInt32(EntGoodsOrderBLL.SingleModel.Add(order)); if (order.Id <= 0) { msg = "订单生成失败:生成失败"; return(null); } //将订单id添加到清单 goodsCar.GoodsOrderId = order.Id; goodsCar.State = 1; EntGoodsCartBLL.SingleModel.Update(goodsCar, "state,goodsorderid"); //生成对外订单号 string outTradeNo = order.Id.ToString(); if (outTradeNo.Length >= 3) { outTradeNo = outTradeNo.Substring(outTradeNo.Length - 3, 3); } else { outTradeNo.PadLeft(3, '0'); } outTradeNo = $"{DateTime.Now.ToString("yyyyMMddHHmm")}{outTradeNo}"; order.OrderNum = outTradeNo; if (order.BuyMode == (int)miniAppBuyMode.微信支付) { CityMordersBLL cityMordersBLL = new CityMordersBLL(); //创建微信订单 CityMorders cityMorders = cityMordersBLL.CreateCityMorder((int)ArticleTypeEnum.EntSubscribeFormPay, (int)ArticleTypeEnum.EntSubscribeFormPay, order.BuyPrice, 99, aid, userInfo.Id, userInfo.NickName, order.Id, xcxAppAccount.AppId, xcxAppAccount.Title); if (cityMorders == null) { msg = "订单生成失败:生成微信订单失败"; return(null); } order.OrderId = cityMorders.Id; if (!EntGoodsOrderBLL.SingleModel.Update(order, "orderid,OrderNum")) { msg = "订单生成失败:微信支付错误"; return(null); } msg = string.Empty; return(order); } else if (order.BuyMode == (int)miniAppBuyMode.储值支付) { SaveMoneySetUser saveMoneyUser = SaveMoneySetUserBLL.SingleModel.getModelByUserId(xcxAppAccount.AppId, userInfo.Id); if (saveMoneyUser == null || saveMoneyUser.AccountMoney < order.BuyPrice) { msg = "订单生成失败:预存款余额不足"; return(null); } if (!SaveMoneySetUserBLL.SingleModel.paySubscribeFromOrderBySaveMoneyUser(order, saveMoneyUser)) { msg = "订单生成失败:储值支付失败"; return(null); } msg = string.Empty; return(order); } else { msg = "订单生成失败:支付方式错误"; return(null); } } catch { msg = "订单生成失败:remark error"; return(order); } }
//回调根据PayResult处理回调 public bool NotifyOper(PayResult result) { //log4net.LogHelper.WriteInfo(this.GetType(), "回调到这里"); //log4net.LogHelper.WriteInfo(this.GetType(), JsonConvert.SerializeObject(result)); if (WxUtils.getAttachValue(result.attach, "from") == "city") { CityMordersBLL citybll = new CityMordersBLL(result); string orderidstr = WxUtils.getAttachValue(result.attach, "orderid"); if (string.IsNullOrEmpty(orderidstr)) { log4net.LogHelper.WriteError(GetType(), new Exception(JsonConvert.SerializeObject(result))); return(false); } int orderid = Convert.ToInt32(orderidstr); CityMorders order = citybll.GetModel(orderid);//citybll.GetModel(" Id=" + orderid + ""); //修改订单支付状态 if (order == null) { Exception ex = new Exception("警报:根据支付单号找不到相关订单!" + " out_trade_no='" + result.out_trade_no + "'"); log4net.LogHelper.WriteError(GetType(), ex); log4net.LogHelper.WriteError(GetType(), new Exception(JsonConvert.SerializeObject(result))); return(false); } if (order.payment_status != 0) { return(false); } if (order.Percent < 0 || order.Percent > 100) { Exception ex = new Exception("警报:出现异常订单!订单提成百分比为:" + order.Percent + " out_trade_no='" + result.out_trade_no + "'"); log4net.LogHelper.WriteError(GetType(), ex); log4net.LogHelper.WriteError(GetType(), new Exception(JsonConvert.SerializeObject(result))); return(false); } citybll.Order = order; //修改order支付商户 order.mch_id = result.mch_id; order.appid = result.appid; citybll.Update(order); switch (result.paytype) { //小程序商城 case (int)ArticleTypeEnum.MiniappGoods: return(citybll.MiniappStoreGoods()); //小程序餐饮 case (int)ArticleTypeEnum.MiniappFoodGoods: return(citybll.MiniappFoodGoods()); //小程序储值 case (int)ArticleTypeEnum.MiniappSaveMoneySet: return(citybll.MiniappSaveMoney()); //小程序砍价 case (int)ArticleTypeEnum.MiniappBargain: return(citybll.MiniappBargainMoney()); //小程序拼团 case (int)ArticleTypeEnum.MiniappGroups: return(citybll.MiniappStoreGroup()); //小程序行业版 case (int)ArticleTypeEnum.MiniappEnt: return(citybll.MiniappEntGoods()); //小程序足浴版 case (int)ArticleTypeEnum.MiniappFootbath: return(citybll.MiniappFootbath()); case (int)ArticleTypeEnum.MiniappMultiStore: return(citybll.MiniappMultiStore()); //小程序专业版积分兑换(微信+积分方式兑换) case (int)ArticleTypeEnum.MiniappExchangeActivity: return(citybll.PayMiniappExchangeActivity()); //小程序同城模拟板 case (int)ArticleTypeEnum.City_StoreBuyMsg: return(citybll.cityBuyMsg()); } } return(false); }
public List <CityMsg> getListByaid(int aid, out int totalCount, int isTop = 0, int pageSize = 10, int pageIndex = 1, string msgTypeName = "", string userName = "", string userPhone = "", string orderWhere = "addTime desc", string appId = "", int Review = -2) { string strWhere = $"aid={aid} and state<>-1"; if (isTop == 0) { //表示普通信息 非置顶信息 strWhere += " and topDay=0 and IsDoNotTop<>1"; } else if (isTop == 1) { List <string> listMsgId = new List <string>(); List <CityMorders> listCityMorder = new CityMordersBLL().GetList($"MinisnsId={aid} and payment_status=1 and Status=1"); if (listCityMorder != null && listCityMorder.Count > 0) { foreach (CityMorders item in listCityMorder) { listMsgId.Add(item.CommentId.ToString()); } } else { listMsgId.Add("0"); } strWhere += $" and (topDay>0 or IsDoNotTop=1) and (Id in({string.Join(",",listMsgId)}) or IsDoTop=1) ";//置顶信息 去CityMorders表找出已经付款成功的帖子信息ID } if (Review != -2) { strWhere += $" and Review={Review} "; } #region 根据类别名称查询类别 List <CityStoreMsgType> listMsgType = new List <CityStoreMsgType>(); if (!string.IsNullOrEmpty(msgTypeName)) { //类别 int count = 0; string typeIds = string.Empty; List <int> listIds = new List <int>(); listMsgType = CityStoreMsgTypeBLL.SingleModel.getListByaid(aid, out count, 1000, 1, msgTypeName); if (listMsgType != null && listMsgType.Count > 0) { listIds.AddRange(listMsgType.Select(x => x.Id)); } else { listIds.Add(0); } typeIds = string.Join(",", listIds); if (!string.IsNullOrEmpty(typeIds)) { strWhere += $" and msgTypeId in ({typeIds})"; } } #endregion #region 根据用户昵称模糊匹配用户列表 List <C_UserInfo> listUserInfo = new List <C_UserInfo>(); if (!string.IsNullOrEmpty(userName)) { //用户 string userIds = string.Empty; List <int> listIds = new List <int>(); listUserInfo = C_UserInfoBLL.SingleModel.GetUserListByNickName(userName, appId); if (listUserInfo != null && listUserInfo.Count > 0) { listIds.AddRange(listUserInfo.Select(x => x.Id)); } else { listIds.Add(0); } userIds = string.Join(",", listIds); if (!string.IsNullOrEmpty(userIds)) { strWhere += $" and userId in ({userIds})"; } } #endregion List <MySqlParameter> parameters = new List <MySqlParameter>(); if (!string.IsNullOrEmpty(userPhone)) { parameters.Add(new MySqlParameter("@userPhone", $"%{userPhone}%")); strWhere += " and phone like @userPhone"; } totalCount = base.GetCount(strWhere, parameters.ToArray()); List <CityMsg> listCity_Msg = base.GetListByParam(strWhere, parameters.ToArray(), pageSize, pageIndex, "*", orderWhere); if (listCity_Msg != null && listCity_Msg.Count > 0) { listCity_Msg.ForEach(x => { if (listUserInfo != null && listUserInfo.Count > 0) { x.userName = listUserInfo.FirstOrDefault(u => u.Id == x.userId).NickName; x.userHeaderImg = listUserInfo.FirstOrDefault(u => u.Id == x.userId).HeadImgUrl; } else { C_UserInfo c_UserInfo = C_UserInfoBLL.SingleModel.GetModel(x.userId); if (c_UserInfo != null) { x.userName = c_UserInfo.NickName; x.userHeaderImg = c_UserInfo.HeadImgUrl; } } if (listMsgType != null && listMsgType.Count > 0) { x.msgTypeName = listMsgType.FirstOrDefault(t => t.Id == x.msgTypeId).name; } else { CityStoreMsgType city_StoreMsgType = CityStoreMsgTypeBLL.SingleModel.GetModel(x.msgTypeId); if (city_StoreMsgType != null) { x.msgTypeName = city_StoreMsgType.name; } } x.msgDetail = HttpUtility.HtmlDecode(x.msgDetail); }); } return(listCity_Msg); }
/// <summary> /// 根据用户Id获取该用户的帖子信息 /// </summary> /// <param name="aid"></param> /// <param name="totalCount"></param> /// <param name="userId"></param> /// <param name="pageSize"></param> /// <param name="pageIndex"></param> /// <param name="orderType">帖子排序字段 默认为0表示按照时间降序排列 1表示先按照置顶排序 然后再按照时间</param> /// <returns></returns> public List <CityMsg> getListByUserId(int aid, out int totalCount, int userId, int pageSize = 10, int pageIndex = 1, int orderType = 0) { List <string> listMsgId = new List <string>(); List <CityMorders> listCityMorder = new CityMordersBLL().GetList($"MinisnsId={aid} and payment_status=1 and Status=1"); if (listCityMorder != null && listCityMorder.Count > 0) { foreach (CityMorders item in listCityMorder) { listMsgId.Add(item.CommentId.ToString()); } } else { listMsgId.Add("0"); } string strWhere = $"aid={aid} and userId={userId} and ( (state<>-1 and topDay=0) or (state<>-1 and Id in({string.Join(",",listMsgId)}))) "; string orderWhere = " addTime desc";//默认按照时间降序排序 //if (orderType == 1) //{ // orderWhere = " topDay desc,addTime desc";//先按照置顶排序 然后再按照时间 // strWhere += ""; //} totalCount = base.GetCount(strWhere); List <CityMsg> listCity_Msg = base.GetList(strWhere, pageSize, pageIndex, "*", orderWhere); if (listCity_Msg != null && listCity_Msg.Count > 0) { string userIds = string.Join(",", listCity_Msg.Select(s => s.userId).Distinct()); List <C_UserInfo> userInfoList = C_UserInfoBLL.SingleModel.GetListByIds(userIds); string cityMsgIds = string.Join(",", listCity_Msg.Select(s => s.msgTypeId)); List <CityStoreMsgType> cityStoreMsgTypeList = CityStoreMsgTypeBLL.SingleModel.GetListByIds(cityMsgIds); string msgShareIds = string.Join(",", listCity_Msg.Select(s => s.Id)); List <CityMsgViewFavoriteShare> cityMsgViewFavoriteShareList = CityMsgViewFavoriteShareBLL.SingleModel.GetListByMsgIds(msgShareIds); listCity_Msg.ForEach(x => { //获取用户头像 C_UserInfo c_UserInfo = userInfoList?.FirstOrDefault(f => f.Id == x.userId); if (c_UserInfo != null) { x.userName = c_UserInfo.NickName; x.userHeaderImg = c_UserInfo.HeadImgUrl; } //获取帖子类别 CityStoreMsgType city_StoreMsgType = cityStoreMsgTypeList?.FirstOrDefault(f => f.Id == x.msgTypeId); if (city_StoreMsgType != null) { x.msgTypeName = city_StoreMsgType.name; } //根据帖子ID获取其浏览量-收藏量-分享量数据 CityMsgViewFavoriteShare city_MsgViewFavoriteShare = cityMsgViewFavoriteShareList?.FirstOrDefault(f => f.Id == x.Id); if (city_MsgViewFavoriteShare != null) { x.ViewCount = city_MsgViewFavoriteShare.ViewCount; x.FavoriteCount = city_MsgViewFavoriteShare.FavoriteCount; x.ShareCount = city_MsgViewFavoriteShare.ShareCount; x.DzCount = city_MsgViewFavoriteShare.DzCount; } x.showTimeStr = CommondHelper.GetTimeSpan(DateTime.Now - x.addTime); x.msgDetail = HttpUtility.HtmlDecode(x.msgDetail); }); } return(listCity_Msg); }
/// <summary> /// 足浴版退款 /// </summary> /// <param name="appId"></param> /// <param name="orderInfo"></param> /// <returns></returns> public bool ZYReFundQueue(string appId, EntGoodsOrder orderInfo, ServiceTime serviceTime) { bool result = false; if (orderInfo == null || orderInfo.Id <= 0) { return(result); } orderInfo.outOrderDate = DateTime.Now; if (orderInfo.BuyMode == (int)miniAppBuyMode.储值支付) { var saveMoneyUser = new SaveMoneySetUser(); saveMoneyUser = SaveMoneySetUserBLL.SingleModel.getModelByUserId(appId, orderInfo.UserId); if (saveMoneyUser == null || saveMoneyUser.Id <= 0) { return(result); } TransactionModel tran = new TransactionModel(); tran.Add(SaveMoneySetUserLogBLL.SingleModel.BuildAddSql(new SaveMoneySetUserLog() { AppId = saveMoneyUser.AppId, UserId = orderInfo.UserId, MoneySetUserId = saveMoneyUser.Id, Type = 1, BeforeMoney = saveMoneyUser.AccountMoney, AfterMoney = saveMoneyUser.AccountMoney + orderInfo.BuyPrice, ChangeMoney = orderInfo.BuyPrice, ChangeNote = $" 购买商品,订单号:{orderInfo.OrderNum} ", CreateDate = DateTime.Now, State = 1 })); saveMoneyUser.AccountMoney += orderInfo.BuyPrice; tran.Add($" update SaveMoneySetUser set AccountMoney = AccountMoney + {orderInfo.BuyPrice} where id = {saveMoneyUser.Id} ; "); tran.Add($" update EntGoodsOrder set state = {(int)MiniAppEntOrderState.退款成功 },outOrderDate = '{orderInfo.outOrderDate.ToString("yyyy-MM-dd HH:mm:ss")}',Remark = @Remark where Id = {orderInfo.Id} and state <> {(int)MiniAppEntOrderState.退款成功 } ; ", new MySqlParameter[] { new MySqlParameter("@Remark", orderInfo.Remark) });//防止重复退款 if (serviceTime != null) { tran.Add($"update servicetime set time='{serviceTime.time}' where id={serviceTime.Id}");//取消已预订的技师服务时间 } //记录订单退款日志 tran.Add(EntGoodsOrderLogBLL.SingleModel.BuildAddSql(new EntGoodsOrderLog() { GoodsOrderId = orderInfo.Id, UserId = orderInfo.UserId, LogInfo = $" 订单储值支付,退款成功:{orderInfo.BuyPrice * 0.01} 元 ", CreateDate = DateTime.Now })); result = ExecuteTransaction(tran.sqlArray, tran.ParameterArray); if (result) { object objData = TemplateMsg_Miniapp.FootbathGetTemplateMessageData(orderInfo, SendTemplateMessageTypeEnum.足浴退款通知); TemplateMsg_Miniapp.SendTemplateMessage(orderInfo.UserId, SendTemplateMessageTypeEnum.足浴退款通知, TmpType.小程序足浴模板, objData); } return(result); } if (orderInfo.BuyMode == (int)miniAppBuyMode.微信支付) { CityMorders order = new CityMordersBLL().GetModel(orderInfo.OrderId); orderInfo.State = (int)MiniAppEntOrderState.退款中; if (order == null) { orderInfo.State = (int)MiniAppEntOrderState.退款失败; EntGoodsOrderBLL.SingleModel.Update(orderInfo, "State,outOrderDate,Remark"); return(result); } //微信支付 ReFundQueue reModel = new ReFundQueue { minisnsId = -5, money = orderInfo.BuyPrice, orderid = order.Id, traid = order.trade_no, addtime = DateTime.Now, note = "小程序足浴版退款", retype = 1 }; try { base.Add(reModel); result = EntGoodsOrderBLL.SingleModel.Update(orderInfo, "State,outOrderDate"); return(result); } catch (Exception ex) { log4net.LogHelper.WriteInfo(GetType(), $"{ex.Message} xxxxxxxxxxxxxxxx小程序足浴退款订单插入队列失败 ID={orderInfo.Id}"); } } return(result); }
/// <summary> /// 修改订单 /// </summary> /// <returns></returns> public ActionResult UpdateOrderMaterial() { Return_Msg returnData = new Return_Msg(); string orderJson = Context.GetRequest("orderJson", string.Empty); if (string.IsNullOrWhiteSpace(orderJson)) { returnData.Msg = "服务器繁忙,未接收到订单数据"; return(Json(returnData)); } string columnstr = "Address,AccepterName,AccepterTelePhone"; PlatChildGoodsOrder order = null; //要修改成的订单数据 PlatChildGoodsOrder dbOrder = null; //数据库订单 try { //订单 order = Newtonsoft.Json.JsonConvert.DeserializeObject <PlatChildGoodsOrder>(orderJson); if (order == null || order.Id <= 0) { returnData.Msg = $"订单数据出现异常"; return(Json(returnData)); } } catch (Exception) { returnData.Msg = "订单数据存在异常"; return(Json(returnData)); } dbOrder = PlatChildGoodsOrderBLL.SingleModel.GetModel(order.Id); if (dbOrder == null) { returnData.Msg = "订单数据有异常"; return(Json(returnData)); } dbOrder.Address = order.Address; dbOrder.AccepterName = order.AccepterName; dbOrder.AccepterTelePhone = order.AccepterTelePhone; //微信支付,金额不等才去重新生成微信订单并关闭原有订单 if (dbOrder.OrderId > 0 && dbOrder.BuyPrice != order.BuyPrice) { dbOrder.BuyPrice = order.BuyPrice; columnstr += ",BuyPrice,ReducedPrice"; dbOrder.ReducedPrice += dbOrder.BuyPrice - order.BuyPrice;//重新累计优惠金额 //如果微信支付为0,则后台直接改变状态 if (order.BuyPrice <= 0 && dbOrder.BuyMode == (int)miniAppBuyMode.微信支付) { CityMorders cityMorder = new CityMordersBLL().GetModel(dbOrder.OrderId); TransactionModel tran = new TransactionModel(); PayResult payresult = new PayResult(); new CityMordersBLL(payresult, cityMorder).MiniappPlatChildGoods(0, dbOrder); } else { columnstr += ",OrderId"; //关闭原微信订单 string errorMsg = ""; dbOrder.OrderId = new JsApiPay(HttpContext).updateWxOrderMoney(dbOrder.OrderId, order.BuyPrice, ref errorMsg); if (dbOrder.OrderId <= 0 || errorMsg.Length > 0) { returnData.Msg = errorMsg; return(Json(returnData)); } } } bool isSuccess = PlatChildGoodsOrderBLL.SingleModel.Update(dbOrder, columnstr); if (isSuccess) { returnData.isok = true; returnData.Msg = "修改订单资料成功"; } else { returnData.Msg = "修改订单资料失败"; } return(Json(returnData)); }
//回调根据PayResult处理回调 public bool NotifyOper(PayResult result) { if (WxUtils.getAttachValue(result.attach, "from") == "city") { CityMordersBLL citybll = new CityMordersBLL(result); string orderidstr = WxUtils.getAttachValue(result.attach, "orderid"); if (string.IsNullOrEmpty(orderidstr)) { log4net.LogHelper.WriteError(GetType(), new Exception(JsonConvert.SerializeObject(result))); return(false); } int orderid = Convert.ToInt32(orderidstr); CityMorders order = citybll.GetModel(orderid); //修改订单支付状态 if (order == null) { Exception ex = new Exception("警报:根据支付单号找不到相关订单!" + " out_trade_no='" + result.out_trade_no + "'"); log4net.LogHelper.WriteError(GetType(), ex); log4net.LogHelper.WriteError(GetType(), new Exception(JsonConvert.SerializeObject(result))); return(false); } if (order.payment_status != 0) { return(false); } if (order.Percent < 0 || order.Percent > 100) { Exception ex = new Exception("警报:出现异常订单!订单提成百分比为:" + order.Percent + " out_trade_no='" + result.out_trade_no + "'"); log4net.LogHelper.WriteError(GetType(), ex); log4net.LogHelper.WriteError(GetType(), new Exception(JsonConvert.SerializeObject(result))); return(false); } citybll.Order = order; //修改order支付商户 order.mch_id = result.mch_id; order.appid = result.appid; citybll.Update(order); switch (result.paytype) { //小程序商城 case (int)ArticleTypeEnum.MiniappGoods: return(citybll.MiniappStoreGoods()); //小程序餐饮 case (int)ArticleTypeEnum.MiniappFoodGoods: return(citybll.MiniappFoodGoods()); //小程序储值 case (int)ArticleTypeEnum.MiniappSaveMoneySet: return(citybll.MiniappSaveMoney()); //小程序砍价 case (int)ArticleTypeEnum.MiniappBargain: return(citybll.MiniappBargainMoney()); //小程序拼团 case (int)ArticleTypeEnum.MiniappGroups: return(citybll.MiniappStoreGroup()); //小程序专业版 case (int)ArticleTypeEnum.MiniappEnt: return(citybll.MiniappEntGoods()); //小程序足浴版 case (int)ArticleTypeEnum.MiniappFootbath: return(citybll.MiniappFootbath()); case (int)ArticleTypeEnum.MiniappMultiStore: return(citybll.MiniappMultiStore()); //小程序专业版积分兑换(微信+积分方式兑换) case (int)ArticleTypeEnum.MiniappExchangeActivity: return(citybll.PayMiniappExchangeActivity()); //小程序同城模板 case (int)ArticleTypeEnum.City_StoreBuyMsg: return(citybll.cityBuyMsg()); //小程序直接微信转账 case (int)ArticleTypeEnum.MiniappWXDirectPay: return(citybll.PayByStoredvalue()); //智慧餐厅 case (int)ArticleTypeEnum.DishOrderPay: return(citybll.PayDishOrder()); case (int)ArticleTypeEnum.DishStorePayTheBill: return(citybll.PayDishStorePayTheBill()); case (int)ArticleTypeEnum.DishCardAccount: return(citybll.PayDishCardAccount()); //平台版小程序分类信息发帖 case (int)ArticleTypeEnum.PlatMsgPay: return(citybll.PlatMsgPay()); //付费内容支付购买 case (int)ArticleTypeEnum.PayContent: return(citybll.PayContentCallBack()); //子模版订单平台支付 case (int)ArticleTypeEnum.PlatChildOrderInPlatPay: //平台子模版支付 case (int)ArticleTypeEnum.PlatChildOrderPay: return(citybll.MiniappPlatChildGoods()); //拼享惠支付 case (int)ArticleTypeEnum.PinOrderPay: return(citybll.PayPinOrder()); //平台子模版支付 case (int)ArticleTypeEnum.QiyeOrderPay: return(citybll.QiyePayOrder()); //平台店铺入驻支付 case (int)ArticleTypeEnum.PlatAddStorePay: return(citybll.PlatAddStorePay()); //平台店铺续期支付 case (int)ArticleTypeEnum.PlatStoreAddTimePay: return(citybll.PlatStoreAddTimePay()); //专业版预约表单付费 case (int)ArticleTypeEnum.EntSubscribeFormPay: return(citybll.EntSubscribeFormPay()); } } return(false); }
/// <summary> /// 退款 /// </summary> /// <param name="item"></param> /// <param name="oldState"></param> /// <param name="BuyMode">默认微信支付</param> /// <returns></returns> public void ReturnOrder(QiyeGoodsOrder order, ref string msg) { TransactionModel tranModel = new TransactionModel(); order.State = (int)QiyeOrderState.退款成功; order.RefundTime = DateTime.Now; if (order.BuyMode == (int)miniAppBuyMode.微信支付) { if (order.BuyPrice > 0) { order.State = (int)QiyeOrderState.退款中; CityMorders citymorder = new CityMordersBLL().GetModel(order.OrderId); if (citymorder == null) { msg = "退款:退款数据繁忙"; return; } //微信支付 ReFundQueue reModel = new ReFundQueue { minisnsId = -5, money = citymorder.payment_free, orderid = citymorder.Id, traid = citymorder.trade_no, addtime = DateTime.Now, note = "企业智推版小程序退款", retype = 1 }; tranModel.Add(new ReFundQueueBLL().BuildAddSql(reModel)); } } else if (order.BuyMode == (int)miniAppBuyMode.储值支付) { SaveMoneySetUserBLL.SingleModel.ReturnPrice(order.AppId, order.AId, order.UserId, TmpType.小未平台子模版, order.BuyPrice, order.OrderNum, ref tranModel, ref msg, true); if (msg.Length > 0) { return; } } else { msg = "退款:无效支付类型"; return; } tranModel.Add($"update QiyeGoodsOrder set state={order.State},RefundTime='{order.RefundTime}' where id={order.Id}"); //订单明细 List <QiyeGoodsCart> cartList = QiyeGoodsCartBLL.SingleModel.GetListByOrderIds($"'{order.Id}'"); if (cartList == null || cartList.Count <= 0) { msg = "退款:找不到订单明细"; return; } //更改库存 UpdateGoodsStock(cartList, ref tranModel, ref msg, true, true); if (msg.Length > 0) { return; } if (!ExecuteTransactionDataCorect(tranModel.sqlArray, tranModel.ParameterArray)) { msg = "退款:操作失败"; } //清除商品缓存 QiyeGoodsBLL.SingleModel.RemoveEntGoodListCache(order.AId); }
/// <summary> /// 砍价退款(照搬后台的) /// </summary> /// <param name="bargainUser"></param> /// <param name="bargain"></param> /// <param name="appId"></param> /// <param name="msg"></param> /// <returns></returns> public bool OutOrder(BargainUser bargainUser, Bargain bargain, string appId, out string msg) { bargainUser.State = 2; bargainUser.outOrderDate = DateTime.Now; if (bargainUser.PayType == (int)miniAppBuyMode.储值支付) { bargainUser.refundFee = bargainUser.CurrentPrice + bargain.GoodsFreight; bargainUser.State = 3; var saveMoneyUser = SaveMoneySetUserBLL.SingleModel.getModelByUserId(appId, bargainUser.UserId); TransactionModel tran = new TransactionModel(); tran.Add(SaveMoneySetUserLogBLL.SingleModel.BuildAddSql(new SaveMoneySetUserLog() { AppId = appId, UserId = bargainUser.UserId, MoneySetUserId = saveMoneyUser.Id, Type = 1, BeforeMoney = saveMoneyUser.AccountMoney, AfterMoney = saveMoneyUser.AccountMoney + bargainUser.refundFee, ChangeMoney = bargainUser.refundFee, ChangeNote = $"小程序砍价购买商品[{bargainUser.BName}]退款,订单号:{bargainUser.OrderId} ", CreateDate = DateTime.Now, State = 1 })); tran.Add($" update SaveMoneySetUser set AccountMoney = AccountMoney + {bargainUser.refundFee} where id = {saveMoneyUser.Id} ; "); string updateBargainUser = BuildUpdateSql(bargainUser, "State,outOrderDate,refundFee"); tran.Add(updateBargainUser); bool isok = BargainBLL.SingleModel.ExecuteTransactionDataCorect(tran.sqlArray); if (isok) { object orderData = TemplateMsg_Miniapp.BargainGetTemplateMessageData(bargainUser, SendTemplateMessageTypeEnum.价订单退款通知, "商家操作退款"); TemplateMsg_Miniapp.SendTemplateMessage(bargainUser, SendTemplateMessageTypeEnum.价订单退款通知, orderData); msg = "退款成功,请查看账户余额!"; } else { msg = "退款异常!";//返回订单信息 } return(isok); } else { bool isok = false; CityMorders order = new CityMordersBLL().GetModel(bargainUser.CityMordersId); if (order == null) { msg = "订单信息有误!"; return(isok); } bargainUser.refundFee = bargainUser.CurrentPrice + bargain.GoodsFreight; if (new BargainUserBLL().Update(bargainUser, "State,outOrderDate,refundFee")) { ReFundQueue reModel = new ReFundQueue { minisnsId = -5, money = bargainUser.refundFee, orderid = order.Id, traid = order.trade_no, addtime = DateTime.Now, note = "小程序砍价订单退款", retype = 1 }; try { int funid = Convert.ToInt32(new ReFundQueueBLL().Add(reModel)); if (funid > 0) { object orderData = TemplateMsg_Miniapp.BargainGetTemplateMessageData(bargainUser, SendTemplateMessageTypeEnum.价订单退款通知, "商家操作退款"); TemplateMsg_Miniapp.SendTemplateMessage(bargainUser, SendTemplateMessageTypeEnum.价订单退款通知, orderData); isok = true; msg = "操作成功,已提交退款申请!"; return(isok); // return Json(new { isok = true, msg = "", obj = funid }); } else { isok = false; msg = "退款异常插入队列小于0!"; return(isok); } } catch (Exception ex) { log4net.LogHelper.WriteInfo(GetType(), $"{ex.Message} xxxxxxxxxxxxxxxx小程序砍价退款订单插入队列失败 ID={order.Id}"); isok = false; msg = "退款异常(插入队列失败)!"; return(isok); } } else { isok = false; msg = "退款异常!"; return(isok); } } }
public bool RefundOne(GroupUser item, ref string msg, int type = 0) { //0:微信支付,1:储值卡支付 int paytype = item.PayType; TransactionModel tranmodel = new MiniApp.TransactionModel(); Groups csg = GroupsBLL.SingleModel.GetModel(item.GroupId); if (csg == null) { msg = "小程序拼团商品不存在啦=" + item.GroupId; item.State = (int)MiniappPayState.已失效; Update(item, "State"); return(false); } GroupSponsor gsinfo = GroupSponsorBLL.SingleModel.GetModel(item.GroupSponsorId); if (gsinfo == null)//&& item.IsGroup == 1) { msg = "小程序拼团团购不存在啦=" + item.GroupSponsorId; item.State = (int)MiniappPayState.已失效; Update(item, "State"); return(false); } if (item.BuyPrice <= 0) { msg = "xxxxxxxxxxxxx小程序拼团价格为0不需要退款=" + item.Id; return(false); } if (item.PayState == (int)MiniappPayState.已退款) { msg = "xxxxxxxxxxxxx小程序拼团状态有误,不能退款=" + item.Id + ",paystate=" + item.PayState + "," + (int)MiniappPayState.已退款; return(false); } item.State = (int)MiniappPayState.已退款; //更新用户订单状态 tranmodel.Add($"update GroupUser set State={item.State} where id={item.Id}"); //判断是否是微信支付 if (paytype == 0) { CityMordersBLL mbll = new CityMordersBLL(); CityMorders order = mbll.GetModel(item.OrderId); if (order == null) { msg = "xxxxxxxxxxxxxxxxxx小程序拼团退款查不到支付订单 ID=" + item.Id; item.State = (int)MiniappPayState.已失效; Update(item, "State"); return(false); } //插入退款队列 ReFundQueue reModel = new ReFundQueue(); reModel.minisnsId = -5; reModel.money = item.BuyPrice; reModel.orderid = item.OrderId; reModel.traid = order.trade_no; reModel.addtime = DateTime.Now; reModel.note = "小程序拼团退款"; reModel.retype = 1; tranmodel.Add(new ReFundQueueBLL().BuildAddSql(reModel)); } else if (paytype == 1) { //储值卡退款 tranmodel.Add(SaveMoneySetUserBLL.SingleModel.GetCommandCarPriceSql(item.AppId, item.ObtainUserId, item.BuyPrice, 1, item.OrderId, item.OrderNo).ToArray()); if (tranmodel.sqlArray.Length <= 0) { msg = "xxxxxxxxxxxxxxxxxx拼团储值卡退款失败,ID=" + item.Id; return(false); } } //是店主手动退款不加库存 --统一,只要是退款就加库存 //if (type == 0) { if (gsinfo.State == 2 && item.IsGroup == 1) { msg = "小程序团购成功,不能退款=" + item.GroupSponsorId; return(false); } //退款成功,更新剩余数量 tranmodel.Add($"update groups set RemainNum ={(csg.RemainNum + item.BuyNum)} where id={csg.Id}"); } if (tranmodel.sqlArray.Length <= 0) { msg = "xxxxxxxxxxxxxxxxxx拼团退款失败,ID=" + item.Id; return(false); } if (!base.ExecuteTransaction(tranmodel.sqlArray, tranmodel.ParameterArray)) { msg = "xxxxxxxxxxxxxxxxxx拼团退款事务执行失败,ID=" + item.Id + "sql:" + string.Join(";", tranmodel.sqlArray); return(false); } XcxAppAccountRelation xcx = XcxAppAccountRelationBLL.SingleModel.GetModelByAppid(item.AppId); if (xcx == null) { log4net.LogHelper.WriteError(GetType(), new Exception($"发送模板消息,参数不足,XcxAppAccountRelation_null:appId = {item.AppId}")); return(true); } //发给用户发货通知 object groupData = TemplateMsg_Miniapp.GroupGetTemplateMessageData("商家操作退款", item, SendTemplateMessageTypeEnum.拼团基础版订单退款通知); TemplateMsg_Miniapp.SendTemplateMessage(item.ObtainUserId, SendTemplateMessageTypeEnum.拼团基础版订单退款通知, xcx.Type, groupData); msg = "xxxxxxxxxxxxxxxxxx拼团退款成功,ID=" + item.Id; return(true); }