/// <summary> /// 储值支付 /// </summary> /// <param name="orderObj"></param> /// <param name="order"></param> /// <param name="aid"></param> /// <param name="saveMoneyUser"></param> /// <param name="sbUpdateGoodCartSql"></param> /// <param name="reductionCart"></param> /// <param name="orderId"></param> /// <returns></returns> public object PayOrderByChuzhi(object orderObj, int aid, SaveMoneySetUser saveMoneyUser, TransactionModel tran, ref int orderId) { QiyeGoodsOrder order = (QiyeGoodsOrder)orderObj; //储值支付 扣除预存款金额并生成消费记录 //添加储值日志 SaveMoneySetUserLog userLog = new SaveMoneySetUserLog() { AppId = saveMoneyUser.AppId, UserId = order.UserId, MoneySetUserId = saveMoneyUser.Id, Type = -1, BeforeMoney = saveMoneyUser.AccountMoney, AfterMoney = saveMoneyUser.AccountMoney - order.BuyPrice, ChangeMoney = order.BuyPrice, ChangeNote = $" 购买商品,订单号:{order.OrderNum} ", CreateDate = DateTime.Now, State = 1, AId = order.AId, }; tran.Add(Utils.BuildAddSqlS(userLog, "OrderId", "(select LAST_INSERT_ID())", SaveMoneySetUserLogBLL.SingleModel.TableName, SaveMoneySetUserLogBLL.SingleModel.arrProperty)); //储值扣费 tran.Add($" update SaveMoneySetUser set AccountMoney = AccountMoney - {order.BuyPrice} where id = {saveMoneyUser.Id} ; "); if (!ExecuteTransactionDataCorect(tran.sqlArray, tran.ParameterArray)) { log4net.LogHelper.WriteInfo(this.GetType(), "储值支付:操作失败" + Newtonsoft.Json.JsonConvert.SerializeObject(tran)); return(""); } QiyeStore store = QiyeStoreBLL.SingleModel.GetModel(order.StoreId); if (store != null) { //清除商品缓存 QiyeGoodsBLL.SingleModel.RemoveEntGoodListCache(store.Aid); } orderId = 1; order = GetModelByOrderNum(order.OrderNum); if (order == null) { log4net.LogHelper.WriteInfo(this.GetType(), "储值支付:生成订单失败"); return(""); } //发送支付成功通知给用户 object orderData = TemplateMsg_Miniapp.QiyeGetTemplateMessageData(order, SendTemplateMessageTypeEnum.企业智推版订单支付成功通知); TemplateMsg_Miniapp.SendTemplateMessage(order.UserId, SendTemplateMessageTypeEnum.企业智推版订单支付成功通知, TmpType.企业智推版, orderData); //发送支付成功公众号通知给商家 TemplateMsg_Gzh.SendQiyePaySuccessTemplateMessage(order); return(new { postdata = order.OrderNum, orderid = 0, dbOrder = order.Id }); }
/// <summary> /// 餐饮储值支付 退款 /// </summary> /// <param name="dbOrder"></param> /// <param name="saveMoneyUser"></param> /// <returns></returns> public bool FoodSaveMoneyReFundQueue(FoodGoodsOrder dbOrder, SaveMoneySetUser saveMoneyUser, int oldState) { if (saveMoneyUser == null || saveMoneyUser.Id <= 0) { return(false); } //回退库存 if (!FoodGoodsOrderBLL.SingleModel.updateStock(dbOrder, oldState)) { return(false); } TransactionModel tran = new TransactionModel(); tran.Add(SaveMoneySetUserLogBLL.SingleModel.BuildAddSql(new SaveMoneySetUserLog() { AppId = saveMoneyUser.AppId, UserId = dbOrder.UserId, MoneySetUserId = saveMoneyUser.Id, Type = 1, BeforeMoney = saveMoneyUser.AccountMoney, AfterMoney = saveMoneyUser.AccountMoney + dbOrder.BuyPrice, ChangeMoney = dbOrder.BuyPrice, ChangeNote = $" 购买商品,订单号:{dbOrder.OrderNum} ", CreateDate = DateTime.Now, State = 1 })); saveMoneyUser.AccountMoney += dbOrder.BuyPrice; tran.Add($" update SaveMoneySetUser set AccountMoney = AccountMoney + {dbOrder.BuyPrice} where id = {saveMoneyUser.Id} ; "); tran.Add($" update foodgoodsorder set state = {(int)miniAppFoodOrderState.已退款 },outOrderDate = '{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}',Remark = @Remark where Id = {dbOrder.Id} and state <> {(int)miniAppFoodOrderState.已退款 } ; ", new MySqlParameter[] { new MySqlParameter("@Remark", dbOrder.Remark) });//防止重复退款 //记录订单退款日志 tran.Add(FoodGoodsOrderLogBLL.SingleModel.BuildAddSql(new FoodGoodsOrderLog() { GoodsOrderId = dbOrder.Id, UserId = dbOrder.UserId.ToString(), LogInfo = $" 订单储值支付,退款成功:{dbOrder.BuyPrice * 0.01} 元 ", CreateDate = DateTime.Now })); return(ExecuteTransaction(tran.sqlArray, tran.ParameterArray)); }
/// <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); } }
/// <summary> /// 砍价退款(照搬后台的) /// </summary> /// <param name="bargainUser"></param> /// <param name="bargain"></param> /// <param name="appId"></param> /// <param name="msg"></param> /// <returns></returns> public bool BargainReFundQueue(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; SaveMoneySetUser 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 = BargainUserBLL.SingleModel.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 = _cityMordersBLL.GetModel(bargainUser.CityMordersId); if (order == null) { msg = "订单信息有误!"; return(isok); } bargainUser.refundFee = bargainUser.CurrentPrice + bargain.GoodsFreight; if (BargainUserBLL.SingleModel.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(base.Add(reModel)); if (funid > 0) { object orderData = TemplateMsg_Miniapp.BargainGetTemplateMessageData(bargainUser, SendTemplateMessageTypeEnum.价订单退款通知, "商家操作退款"); TemplateMsg_Miniapp.SendTemplateMessage(bargainUser, SendTemplateMessageTypeEnum.价订单退款通知, orderData); isok = true; msg = "操作成功,已提交退款申请!"; return(isok); } 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); } } }
/// <summary> /// 订单退款 /// </summary> /// <param name="item"></param> /// <param name="oldState"></param> /// <param name="BuyMode">默认微信支付</param> /// <param name="isPartOut">是否部分退款</param> /// <returns></returns> public bool EntReFundQueue(EntGoodsOrder item, int oldState, int BuyMode = (int)miniAppBuyMode.微信支付, int?newState = null, bool isPartOut = false) { //重新加回库存 if (EntGoodsOrderBLL.SingleModel.updateStock(item, oldState)) { int money = isPartOut ? item.refundFee : item.BuyPrice;//兼容多版本,目前只有专业版订单有部分退款 item.refundFee = money; if (BuyMode == (int)miniAppBuyMode.微信支付) { try { item.outOrderDate = DateTime.Now; if (item.BuyPrice == 0) //金额为0时,回滚库存后,默认退款成功 { item.State = (int)MiniAppEntOrderState.退款成功; } else { CityMorders order = _cityMordersBLL.GetModel(item.OrderId); item.State = (int)MiniAppEntOrderState.退款中; if (newState.HasValue) { item.State = newState.Value; } if (order == null) { item.State = (int)MiniAppEntOrderState.退款失败; EntGoodsOrderBLL.SingleModel.Update(item, "State,outOrderDate,Remark,refundFee"); return(false); } //微信支付 ReFundQueue reModel = new ReFundQueue { minisnsId = -5, money = item.refundFee, orderid = order.Id, traid = order.trade_no, addtime = DateTime.Now, note = "小程序行业版退款", retype = 1 }; base.Add(reModel); } bool isSuccess = EntGoodsOrderBLL.SingleModel.Update(item, "State,outOrderDate,Remark,refundFee"); if (isSuccess) { //发给用户退款通知 object orderData = TemplateMsg_Miniapp.EnterpriseGetTemplateMessageData(item, SendTemplateMessageTypeEnum.专业版订单退款通知, "商家操作退款"); TemplateMsg_Miniapp.SendTemplateMessage(item.UserId, SendTemplateMessageTypeEnum.专业版订单退款通知, TmpType.小程序专业模板, orderData); } } catch (Exception ex) { log4net.LogHelper.WriteInfo(GetType(), $"{ex.Message} xxxxxxxxxxxxxxxx小程序餐饮退款订单插入队列失败 ID={item.Id}"); } } else { XcxAppAccountRelation r = XcxAppAccountRelationBLL.SingleModel.GetModel(item.aId); if (r == null) { return(false); } SaveMoneySetUser saveMoneyUser = SaveMoneySetUserBLL.SingleModel.getModelByUserId(r.AppId, item.UserId); TransactionModel tran = new TransactionModel(); tran.Add(SaveMoneySetUserLogBLL.SingleModel.BuildAddSql(new SaveMoneySetUserLog() { AppId = r.AppId, UserId = item.UserId, MoneySetUserId = saveMoneyUser.Id, Type = 1, BeforeMoney = saveMoneyUser.AccountMoney, AfterMoney = saveMoneyUser.AccountMoney + item.refundFee, ChangeMoney = item.refundFee, ChangeNote = $"专业版购买商品退款,订单号:{item.OrderNum} ", CreateDate = DateTime.Now, State = 1 })); item.State = (int)MiniAppEntOrderState.退款成功; if (newState.HasValue) { item.State = newState.Value; } tran.Add($" update SaveMoneySetUser set AccountMoney = AccountMoney + {item.refundFee} where id = {saveMoneyUser.Id} ; "); tran.Add($" update EntGoodsOrder set State = {item.State },outOrderDate = '{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}',Remark = @Remark where Id = {item.Id} and state <> {item.State} ; ", new MySqlParameter[] { new MySqlParameter("@Remark", item.Remark) });//防止重复退款 //记录订单储值支付退款日志 tran.Add(EntGoodsOrderLogBLL.SingleModel.BuildAddSql(new EntGoodsOrderLog() { GoodsOrderId = item.Id, UserId = item.UserId, LogInfo = $" 储值支付订单退款成功:{item.refundFee * 0.01} 元 ", CreateDate = DateTime.Now })); bool isSuccess = ExecuteTransaction(tran.sqlArray, tran.ParameterArray); if (isSuccess) { //发给用户退款通知 object orderData = TemplateMsg_Miniapp.EnterpriseGetTemplateMessageData(item, SendTemplateMessageTypeEnum.专业版订单退款通知, "商家操作退款"); TemplateMsg_Miniapp.SendTemplateMessage(item.UserId, SendTemplateMessageTypeEnum.专业版订单退款通知, TmpType.小程序专业模板, orderData); } return(isSuccess); } } else { return(false); } return(true); }
/// <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> /// 处理餐饮UU配送回调 /// </summary> /// <param name="orderid"></param> /// <param name="state"></param> /// <returns></returns> public bool UUToFoodReturn(UUOrder order) { bool isSuccess = false; string updatesql = "State"; FoodGoodsOrder foodGoodOrder = FoodGoodsOrderBLL.SingleModel.GetModel(order.OrderId);// and OrderType ={(int)miniAppFoodOrderType.店内点餐 } "); if (foodGoodOrder == null) { LogHelper.WriteInfo(this.GetType(), "UU配送:找不到餐饮订单"); return(isSuccess); } string msg = string.Empty; switch (order.State) { case (int)UUOrderEnum.订单取消: isSuccess = base.Update(order, updatesql); if (!isSuccess) { LogHelper.WriteInfo(this.GetType(), "UU配送:修改系统订单状态出错," + JsonConvert.SerializeObject(order)); return(isSuccess); } //退款接口 abel //判断是否是取消订单,取消订单则要执行退款 if (foodGoodOrder.BuyMode == (int)miniAppBuyMode.微信支付) { isSuccess = FoodGoodsOrderBLL.SingleModel.outOrder(foodGoodOrder, foodGoodOrder.State); } else if (foodGoodOrder.BuyMode == (int)miniAppBuyMode.储值支付) { SaveMoneySetUser userSaveMoney = SaveMoneySetUserBLL.SingleModel.getModelByUserId(foodGoodOrder.UserId) ?? new SaveMoneySetUser(); isSuccess = FoodGoodsOrderBLL.SingleModel.outOrderBySaveMoneyUser(foodGoodOrder, userSaveMoney, foodGoodOrder.State); } #region 餐饮退款成功通知 模板消息 if (isSuccess) { object postData2 = FoodGoodsOrderBLL.SingleModel.getTemplateMessageData(foodGoodOrder.Id, SendTemplateMessageTypeEnum.餐饮退款成功通知); TemplateMsg_Miniapp.SendTemplateMessage(foodGoodOrder.UserId, SendTemplateMessageTypeEnum.餐饮退款成功通知, (int)TmpType.小程序餐饮模板, postData2); } #endregion return(isSuccess); case (int)UUOrderEnum.单成功: case (int)UUOrderEnum.跑男抢单: case (int)UUOrderEnum.已到达: case (int)UUOrderEnum.已取件: updatesql += ",driver_name,driver_mobile,driver_jobnum"; foodGoodOrder.State = (int)miniAppFoodOrderState.待送餐; if (order.State == (int)UUOrderEnum.已取件) { foodGoodOrder.State = (int)miniAppFoodOrderState.待确认送达; #region 发送餐饮订单配送通知 模板消息 C_UserInfo userinfo = C_UserInfoBLL.SingleModel.GetModel(foodGoodOrder.UserId) ?? new C_UserInfo(); object postData = FoodGoodsOrderBLL.SingleModel.getTemplateMessageData(foodGoodOrder.Id, SendTemplateMessageTypeEnum.餐饮订单配送通知); TemplateMsg_Miniapp.SendTemplateMessage(userinfo.Id, SendTemplateMessageTypeEnum.餐饮订单配送通知, (int)TmpType.小程序餐饮模板, postData); #endregion } break; case (int)UUOrderEnum.到达目的地: foodGoodOrder.State = (int)miniAppFoodOrderState.待确认送达; break; case (int)UUOrderEnum.收件人已收货: foodGoodOrder.State = (int)miniAppFoodOrderState.已完成; break; } isSuccess = base.Update(order, updatesql); if (!isSuccess) { LogHelper.WriteInfo(this.GetType(), "UU配送:修改系统订单状态出错," + JsonConvert.SerializeObject(order)); return(isSuccess); } isSuccess = FoodGoodsOrderBLL.SingleModel.Update(foodGoodOrder, "State"); return(isSuccess); }
/// <summary> /// 取消订单 /// </summary> /// <returns></returns> public ActionResult CancelFNOrder() { string orderid = Context.GetRequest("orderid", string.Empty); string orderno = Context.GetRequest("orderno", string.Empty); int cancelcode = Context.GetRequestInt("cancel_reason_id", 0); string cancel_reason = Context.GetRequest("cancel_reason", string.Empty); object data = new FNCancelOrderRequestModel() { partner_order_code = orderno, order_cancel_reason_code = 2, order_cancel_code = cancelcode, order_cancel_description = cancel_reason, order_cancel_time = Convert.ToInt64(FNApi.SingleModel.GetTimeStamp()), }; string url = FNApi._cancelorderapi; string result = FNApi.SingleModel.UseFNApi(data, url); if (string.IsNullOrEmpty(result)) { return(Json(new { isok = false, msg = "取消订单失败" }, JsonRequestBehavior.AllowGet)); } FNApiReponseModel <object> reposemodel = JsonConvert.DeserializeObject <FNApiReponseModel <object> >(result); if (reposemodel == null || reposemodel.code != 200) { return(Json(new { isok = false, msg = reposemodel == null ?"接口异常":reposemodel.msg }, JsonRequestBehavior.AllowGet)); } else { FNOrder order = FNOrderBLL.SingleModel.GetModelByOrderNo(orderno); if (order == null) { return(Json(new { isok = false, msg = "找不到蜂鸟订单" }, JsonRequestBehavior.AllowGet)); } order.state = (int)FNOrderEnum.已取消; order.updatetime = DateTime.Now; order.order_cancel_reason_code = 2; order.order_cancel_code = cancelcode; order.order_cancel_description = cancel_reason; order.order_cancel_time = FNApi.SingleModel.GetTimeStamp().ToString(); bool success = FNOrderBLL.SingleModel.Update(order, "state,updatetime,order_cancel_reason_code,order_cancel_code,order_cancel_description,order_cancel_time"); if (!success) { return(Json(new { isok = false, msg = "修改蜂鸟订单状态失败" }, JsonRequestBehavior.AllowGet)); } FoodGoodsOrder foodGoodOrder = FoodGoodsOrderBLL.SingleModel.GetModel($" Id = {orderid} "); if (foodGoodOrder == null) { return(Json(new { isok = false, msg = "蜂鸟配送:找不到订单" }, JsonRequestBehavior.AllowGet)); } //退款接口 abel if (foodGoodOrder.BuyMode == (int)miniAppBuyMode.微信支付) { success = FoodGoodsOrderBLL.SingleModel.outOrder(foodGoodOrder, foodGoodOrder.State); } else if (foodGoodOrder.BuyMode == (int)miniAppBuyMode.储值支付) { SaveMoneySetUser userSaveMoney = SaveMoneySetUserBLL.SingleModel.getModelByUserId(foodGoodOrder.UserId) ?? new SaveMoneySetUser(); success = FoodGoodsOrderBLL.SingleModel.outOrderBySaveMoneyUser(foodGoodOrder, userSaveMoney, foodGoodOrder.State); } } return(Json(new { isok = true, msg = result }, JsonRequestBehavior.AllowGet)); }
/// <summary> /// 处理餐饮快跑者配送回调 /// </summary> /// <param name="orderid"></param> /// <param name="state"></param> /// <returns></returns> public bool KPZToFoodReturn(KPZOrder order) { bool isSuccess = false; string updatesql = "status"; FoodGoodsOrder foodGoodOrder = FoodGoodsOrderBLL.SingleModel.GetModel(order.OrderId);// and OrderType ={(int)miniAppFoodOrderType.店内点餐 } "); if (foodGoodOrder == null) { LogHelper.WriteInfo(this.GetType(), "快跑者配送:找不到餐饮订单"); return(isSuccess); } string msg = string.Empty; switch (order.status) { case (int)KPZOrderEnum.已撤销: isSuccess = base.Update(order, updatesql); if (!isSuccess) { LogHelper.WriteInfo(this.GetType(), "快跑者配送:修改系统订单状态出错," + JsonConvert.SerializeObject(order)); return(isSuccess); } //退款接口 abel //判断是否是取消订单,取消订单则要执行退款 if (foodGoodOrder.BuyMode == (int)miniAppBuyMode.微信支付) { isSuccess = FoodGoodsOrderBLL.SingleModel.outOrder(foodGoodOrder, foodGoodOrder.State); } else if (foodGoodOrder.BuyMode == (int)miniAppBuyMode.储值支付) { SaveMoneySetUser userSaveMoney = SaveMoneySetUserBLL.SingleModel.getModelByUserId(foodGoodOrder.UserId) ?? new SaveMoneySetUser(); isSuccess = FoodGoodsOrderBLL.SingleModel.outOrderBySaveMoneyUser(foodGoodOrder, userSaveMoney, foodGoodOrder.State); } #region 餐饮退款成功通知 模板消息 if (isSuccess) { object postData2 = FoodGoodsOrderBLL.SingleModel.getTemplateMessageData(foodGoodOrder.Id, SendTemplateMessageTypeEnum.餐饮退款成功通知); TemplateMsg_Miniapp.SendTemplateMessage(foodGoodOrder.UserId, SendTemplateMessageTypeEnum.餐饮退款成功通知, (int)TmpType.小程序餐饮模板, postData2); } #endregion return(isSuccess); case (int)KPZOrderEnum.待发单: case (int)KPZOrderEnum.待抢单: case (int)KPZOrderEnum.待接单: foodGoodOrder.State = (int)miniAppFoodOrderState.待接单; break; case (int)KPZOrderEnum.取单中: updatesql += ",courier,tel"; foodGoodOrder.State = (int)miniAppFoodOrderState.待送餐; #region 发送餐饮订单配送通知 模板消息 C_UserInfo userinfo = C_UserInfoBLL.SingleModel.GetModel(foodGoodOrder.UserId) ?? new C_UserInfo(); object postData = FoodGoodsOrderBLL.SingleModel.getTemplateMessageData(foodGoodOrder.Id, SendTemplateMessageTypeEnum.餐饮订单配送通知); TemplateMsg_Miniapp.SendTemplateMessage(userinfo.Id, SendTemplateMessageTypeEnum.餐饮订单配送通知, (int)TmpType.小程序餐饮模板, postData); #endregion break; case (int)KPZOrderEnum.送单中: foodGoodOrder.State = (int)miniAppFoodOrderState.待确认送达; break; case (int)KPZOrderEnum.已送达: foodGoodOrder.State = (int)miniAppFoodOrderState.已完成; break; } isSuccess = base.Update(order, updatesql); if (!isSuccess) { LogHelper.WriteInfo(this.GetType(), "快跑者配送:修改系统订单状态出错," + JsonConvert.SerializeObject(order)); return(isSuccess); } isSuccess = FoodGoodsOrderBLL.SingleModel.Update(foodGoodOrder, "State"); return(isSuccess); }
/// <summary> /// 蜂鸟订单状态改变回调接口 /// </summary> /// <param name="returnModel"></param> /// <returns></returns> public ActionResult FNnotis(FNApiReponseModel <string> returnModel) { if (returnModel == null || returnModel.data == null || returnModel.data.Length == 0) { LogHelper.WriteInfo(this.GetType(), "蜂鸟回调请求参数为空"); return(Content("")); } string datajson = HttpUtility.UrlDecode(returnModel.data); FNAccepterOrderModel data = JsonConvert.DeserializeObject <FNAccepterOrderModel>(datajson); string urlencodedata = returnModel.data; DistributionApiConfig model = DistributionApiConfigBLL.SingleModel.GetModelByRedis(FNApi._fnapi_appid); string signature = FNApi.SingleModel.GetSign(model.access_token, urlencodedata, returnModel.salt); if (returnModel.signature != signature || data == null) { LogHelper.WriteInfo(this.GetType(), "蜂鸟配送回调签名错误json:" + JsonConvert.SerializeObject(returnModel) + ",解码后:" + datajson); return(Content("")); } FNOrder order = FNOrderBLL.SingleModel.GetModelByOrderNo(data.partner_order_code); if (order == null) { log4net.LogHelper.WriteInfo(this.GetType(), $"蜂鸟订单回调:找不到订单【{data.partner_order_code}】"); return(Content("")); } order.state = data.order_status; order.updatetime = DateTime.Now; order.carrier_driver_name = data.carrier_driver_name; order.carrier_driver_phone = data.carrier_driver_phone; order.description = data.description; bool updatebool = FNOrderBLL.SingleModel.Update(order, "state,updatetime,carrier_driver_name,carrier_driver_phone,description"); if (updatebool && data.order_status == (int)FNOrderEnum.异常) { FNOrderRelation orelationmodel = FNOrderRelationBLL.SingleModel.GetModelUOrderNo(order.partner_order_code); if (orelationmodel == null) { log4net.LogHelper.WriteInfo(this.GetType(), "蜂鸟配送取消订单回调发起退款出错:找不到关联该订单的数据"); return(Content("success")); } bool isSuccess = false; switch (orelationmodel.ordertype) { case (int)TmpType.小程序餐饮模板: FoodGoodsOrder foodGoodOrder = FoodGoodsOrderBLL.SingleModel.GetModel($" Id = {orelationmodel.orderid} "); // and OrderType ={(int)miniAppFoodOrderType.店内点餐 } "); if (foodGoodOrder == null) { LogHelper.WriteInfo(this.GetType(), "蜂鸟配送:找不到订单"); return(Content("success")); } //退款接口 abel if (foodGoodOrder.BuyMode == (int)miniAppBuyMode.微信支付) { isSuccess = FoodGoodsOrderBLL.SingleModel.outOrder(foodGoodOrder, foodGoodOrder.State); } else if (foodGoodOrder.BuyMode == (int)miniAppBuyMode.储值支付) { SaveMoneySetUser userSaveMoney = SaveMoneySetUserBLL.SingleModel.getModelByUserId(foodGoodOrder.UserId) ?? new SaveMoneySetUser(); isSuccess = FoodGoodsOrderBLL.SingleModel.outOrderBySaveMoneyUser(foodGoodOrder, userSaveMoney, foodGoodOrder.State); } break; case (int)TmpType.小程序专业模板: EntGoodsOrder entorder = EntGoodsOrderBLL.SingleModel.GetModel(orelationmodel.orderid); if (entorder == null) { LogHelper.WriteInfo(this.GetType(), "蜂鸟配送取消订单回调发起退款出错:找不到小程序订单数据"); return(Content("success")); } isSuccess = EntGoodsOrderBLL.SingleModel.outOrder(entorder, entorder.State, entorder.BuyMode); if (!isSuccess) { LogHelper.WriteInfo(this.GetType(), "蜂鸟配送取消订单回调发起退款出错:执行退款服务出错"); return(Content("success")); } EntGoodsOrderLogBLL.SingleModel.AddLog(entorder.Id, 0, $"蜂鸟:将订单状态改为:{Enum.GetName(typeof(MiniAppEntOrderState), entorder.State)}"); break; } } return(Content("")); }
public ActionResult addSaveMoneySet(string appid, string openid, int saveMoneySetId) { if (string.IsNullOrEmpty(appid)) { return(Json(new { isok = false, msg = "获取失败(appid不能为空)" }, JsonRequestBehavior.AllowGet)); } XcxAppAccountRelation r = _xcxAppAccountRelationBLL.GetModel($"AppId='{appid}'"); if (r == null) { return(Json(new { isok = false, msg = "获取失败(还未进行授权)" }, JsonRequestBehavior.AllowGet)); } var minisnsId = 0; //获取当前小程序模板类型 var typeSql = $" select type from xcxtemplate where id = {r.TId} "; var temp = Convert.ToInt32(SqlMySql.ExecuteScalar(_xcxAppAccountRelationBLL.connName, CommandType.Text, typeSql, null)); if (temp == (int)TmpType.小程序电商模板 || temp == (int)TmpType.小程序电商模板测试) { var store = StoreBLL.SingleModel.GetModelByRid(r.Id) ?? new Store(); minisnsId = store.Id; try { store.funJoinModel = JsonConvert.DeserializeObject <StoreConfigModel>(store.configJson); } catch (Exception) { store.funJoinModel = new StoreConfigModel(); } if (!store.funJoinModel.canSaveMoneyFunction) { return(Json(new { isok = false, msg = "商家未开启储值优惠功能" }, JsonRequestBehavior.AllowGet)); } } else if (temp == (int)TmpType.小程序餐饮模板) { var food = FoodBLL.SingleModel.GetModel($" appId = {r.Id} ") ?? new Food(); minisnsId = food.Id; if (!food.funJoinModel.canSaveMoneyFunction) { return(Json(new { isok = false, msg = "商家未开启储值优惠功能" }, JsonRequestBehavior.AllowGet)); } } var model = SaveMoneySetBLL.SingleModel.GetModel(saveMoneySetId, r.AppId); if (model == null || model.State != 1)//要是上架状态的储值项目 { return(Json(new { isok = false, msg = "找不到储值项目" }, JsonRequestBehavior.AllowGet)); } var userInfo = C_UserInfoBLL.SingleModel.GetModelByAppId_OpenId(appid, openid); if (userInfo == null) { return(Json(new { isok = -1, msg = "用户不存在" }, JsonRequestBehavior.AllowGet)); } if (model == null || model.State != 1)//要是上架状态的储值项目 { return(Json(new { isok = false, msg = "找不到储值项目" }, JsonRequestBehavior.AllowGet)); } var user = SaveMoneySetUserBLL.SingleModel.getModelByUserId(r.AppId, userInfo.Id); if (user == null) { //用户储值账户,若无则开通一个 user = new SaveMoneySetUser() { AppId = r.AppId, UserId = userInfo.Id, AccountMoney = 0, CreateDate = DateTime.Now }; user.Id = Convert.ToInt32(SaveMoneySetUserBLL.SingleModel.Add(user)); if (user.Id <= 0) { return(Json(new { isok = -1, msg = "开通储值账户失败,请重试" }, JsonRequestBehavior.AllowGet)); } } //充值记录 var newLog = new SaveMoneySetUserLog() { AppId = r.AppId, UserId = userInfo.Id, MoneySetUserId = user.Id, Type = 0, BeforeMoney = user.AccountMoney, AfterMoney = user.AccountMoney + model.AmountMoney, ChangeMoney = model.AmountMoney, ChangeNote = model.SetName, CreateDate = DateTime.Now, State = 0, GiveMoney = model.GiveMoney }; //付款后才去累计预充值金额 //user.AccountMoney += model.AmountMoney; //_miniappsavemoneysetuserBll.Update(user, "AccountMoney"); newLog.Id = Convert.ToInt32(SaveMoneySetUserLogBLL.SingleModel.Add(newLog)); //小程序信息 var xcxconfig = OpenAuthorizerConfigBLL.SingleModel.GetModel($" appid = '{r.AppId}' "); #region cityMorder string no = WxPayApi.GenerateOutTradeNo(); CityMorders citymorderModel = new CityMorders { OrderType = (int)ArticleTypeEnum.MiniappSaveMoneySet, ActionType = (int)ArticleTypeEnum.MiniappSaveMoneySet, Addtime = DateTime.Now, payment_free = model.JoinMoney, trade_no = no, Percent = 99,//不收取服务费 userip = WebHelper.GetIP(), FuserId = userInfo.Id, Fusername = userInfo.NickName, orderno = no, payment_status = 0, Status = 0, Articleid = 0, CommentId = 0, MinisnsId = minisnsId, //r.Id,//模板权限表Id TuserId = newLog.Id, //充值记录的ID ShowNote = $" {xcxconfig?.nick_name} 储值项目[{model.SetName}]购买商品支付{(model.JoinMoney * 0.01).ToString("0.00")}元", CitySubId = 0, //无分销,默认为0 PayRate = 1, buy_num = 0, //无 appid = appid, }; var orderid = Convert.ToInt32(_cityMordersBLL.Add(citymorderModel)); if (orderid <= 0) { return(Json(new { isok = false, msg = "生成订单失败!" }, JsonRequestBehavior.AllowGet)); } newLog.OrderId = orderid; SaveMoneySetUserLogBLL.SingleModel.Update(newLog, "OrderId"); #endregion return(Json(new { isok = true, msg = "获取成功!", orderid = newLog.OrderId }, JsonRequestBehavior.AllowGet)); }