Esempio n. 1
0
        /// <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));
        }
Esempio n. 2
0
        /// <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 });
            }
        }
Esempio n. 3
0
        /// <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);
        }
Esempio n. 4
0
        /// <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);
        }
Esempio n. 5
0
        /// <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);
        }
Esempio n. 6
0
        /// <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);
        }
Esempio n. 7
0
        /// <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);
            }
        }
Esempio n. 8
0
        //回调根据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);
        }
Esempio n. 9
0
        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);
        }
Esempio n. 10
0
        /// <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);
        }
Esempio n. 11
0
        /// <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);
        }
Esempio n. 12
0
        /// <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));
        }
Esempio n. 13
0
        //回调根据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);
        }
Esempio n. 14
0
        /// <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);
        }
Esempio n. 15
0
        /// <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);
                }
            }
        }
Esempio n. 16
0
        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);
        }