Esempio n. 1
0
        public object GetListByCondition(string appId, int pageIndex, int pageSize, int state, int type, string value, string startDate, string endDate)
        {
            List <GroupUser> groupUserList = new List <GroupUser>();

            if (string.IsNullOrEmpty(appId))
            {
                return(groupUserList);
            }
            List <MySqlParameter> paramters = new List <MySqlParameter>();
            string sql      = $" select a.* from groupUser a left join GroupSponsor b on a.GroupSponsorId=b.id  where ";
            string sqlwhere = GetSqlwhere(paramters, appId, state, type, value, startDate, endDate);

            sql += $" {sqlwhere} order by id desc limit {(pageIndex - 1) * pageSize},{pageSize}";
            using (var dr = SqlMySql.ExecuteDataReader(connName, CommandType.Text, sql, paramters.ToArray()))
            {
                groupUserList = GetList(dr);
            }
            if (groupUserList != null && groupUserList.Count > 0)
            {
                string sponsorIds = string.Join(",", groupUserList.Select(s => s.GroupSponsorId).Distinct());
                List <GroupSponsor> groupSponsorList = GroupSponsorBLL.SingleModel.GetListByIds(sponsorIds);

                string        groupIds   = string.Join(",", groupUserList.Select(s => s.GroupId).Distinct());
                List <Groups> groupsList = GroupsBLL.SingleModel.GetListByIds(groupIds);

                foreach (GroupUser groupUser in groupUserList)
                {
                    GroupSponsor groupSponsor = groupSponsorList?.FirstOrDefault(f => f.Id == groupUser.GroupSponsorId);
                    if (groupSponsor != null)
                    {
                        groupUser.PState  = groupSponsor.State;
                        groupUser.EndDate = groupSponsor.EndDate;
                    }
                    Groups group = groupsList?.FirstOrDefault(f => f.Id == groupUser.GroupId);
                    groupUser.GroupName = group.GroupName;
                    if (groupUser.GroupSponsorId == 0)//一键成团
                    {
                        groupUser.PState = 3;
                    }
                    else if (groupUser.PState == 1 && groupUser.EndDate < DateTime.Now)//拼团过期
                    {
                        groupUser.PState = -1;
                    }
                }
            }
            return(groupUserList);
        }
Esempio n. 2
0
        public ActionResult GetInvitePageData()
        {
            string appId = Context.GetRequest("appId", string.Empty);
            int    gsid  = Context.GetRequestInt("gsid", 0);

            if (string.IsNullOrEmpty(appId))
            {
                return(Json(new { isok = false, msg = "参数错误" }, JsonRequestBehavior.AllowGet));
            }
            if (gsid <= 0)
            {
                return(Json(new { isok = false, msg = "参团Id不能小于0" }, JsonRequestBehavior.AllowGet));
            }

            XcxAppAccountRelation r = _xcxAppAccountRelationBLL.GetModelByAppid(appId);

            if (r == null)
            {
                return(Json(new { isok = false, msg = "小程序未授权" }, JsonRequestBehavior.AllowGet));
            }

            GroupSponsor groupsmodel = GroupSponsorBLL.SingleModel.GetModel(gsid);

            if (groupsmodel == null)
            {
                return(Json(new { isok = false, msg = "参团数据不存在" }, JsonRequestBehavior.AllowGet));
            }
            //获取还需要几人才能成团
            groupsmodel.NeedNum = GroupUserBLL.SingleModel.GetDCount(groupsmodel.GroupId, groupsmodel.Id, groupsmodel.GroupSize);

            List <GroupUser> usergrouplog = GroupUserBLL.SingleModel.GetListGroupUserList(gsid);

            if (usergrouplog == null || usergrouplog.Count <= 0)
            {
                return(Json(new { isok = false, msg = "参团用户数据不存在" }, JsonRequestBehavior.AllowGet));
            }

            List <C_UserInfo> userinfolist     = new List <C_UserInfo>();
            string            userIds          = string.Join(",", usergrouplog.Select(s => s.ObtainUserId).Distinct());
            List <C_UserInfo> userInfoListTemp = C_UserInfoBLL.SingleModel.GetListByIds(userIds);

            foreach (GroupUser item in usergrouplog)
            {
                //获取头像和昵称
                C_UserInfo user = userInfoListTemp?.FirstOrDefault(f => f.Id == item.ObtainUserId);
                if (user != null)
                {
                    user.zbSiteId = item.IsGroupHead;
                    if (string.IsNullOrEmpty(user.HeadImgUrl))
                    {
                        user.HeadImgUrl = "j.vzan.cc/content/city/images/voucher/10.jpg";
                    }

                    userinfolist.Add(user);
                }
            }

            Groups model = GroupsBLL.SingleModel.GetModel(groupsmodel.GroupId);

            if (model == null)
            {
                return(Json(new { isok = false, msg = "拼团数据不存在" }, JsonRequestBehavior.AllowGet));
            }
            model.ImgList     = C_AttachmentBLL.SingleModel.GetListByCache(groupsmodel.GroupId, (int)AttachmentItemType.小程序拼团轮播图);
            model.DescImgList = C_AttachmentBLL.SingleModel.GetListByCache(groupsmodel.GroupId, (int)AttachmentItemType.小程序拼团详情图);
            model.GroupsNum   = GroupUserBLL.SingleModel.GetCountPayGroup(model.Id);

            //开团成功
            if (groupsmodel.State == 1)
            {
            }
            else if (groupsmodel.State == 2)
            {
                //团购成功
                //获取当前可以参加的团
                model.GroupSponsorList = GetHaveSuccessGroup(model.Id, 2);
            }
            else if (groupsmodel.State == -1 || groupsmodel.EndDate < DateTime.Now)
            {
                //拼团失败,超过24小时未拼团成功
                groupsmodel.State = -1;
                //获取当前可以参加的团
                model.GroupSponsorList = GetHaveSuccessGroup(model.Id, 2);
            }

            //拼团结束
            if (model.ValidDateEnd < DateTime.Now)
            {
                groupsmodel.State = -2;
                //获取可以参加的拼团数据
                model.GroupsList = GetCanJoinGroup(model.StoreId, 2);
            }

            //可以参加的团
            var goupsponsordata = model.GroupSponsorList?.Select(s => new {
                s.NeedNum,
                s.ShowEndTime,
                s.ShowStartTime,
                s.UserLogo,
                s.UserName,
                s.GroupId
            });

            //其他拼团商品数据
            var canjoindata = model.GroupsList?.Select(s => new
            {
                s.DiscountPrice,
                s.UnitPrice,
                s.OriginalPrice,
                s.GroupName,
                s.GroupSize,
                s.Id,
                s.ImgUrl,
                s.GroupsNum,
                s.StoreId,
            });

            var postdata = new
            {
                model.ImgList,
                model.ImgUrl,
                model.GroupName,
                model.GroupSize,
                model.GroupsNum,
                model.DiscountPrice,
                model.UnitPrice,
                model.OriginalPrice,
                model.Description,
                model.DescImgList,
                GroupSponsorList = goupsponsordata,
                Canjoindata      = canjoindata,
                GroupSponsorId   = groupsmodel.Id,
                MState           = groupsmodel.State,
                groupsmodel.NeedNum,
                Id             = groupsmodel.GroupId,
                ValidDateEnd   = groupsmodel.EndDate.ToString("yyyy-MM-dd HH:mm:ss"),
                ValidDateStart = groupsmodel.StartDate.ToString("yyyy-MM-dd HH:mm:ss"),
                GroupUserList  = userinfolist?.Select(s => new {
                    s.Id,
                    s.HeadImgUrl,
                    s.NickName,
                    IsGroupHeader = s.zbSiteId,
                }),
            };

            return(Json(new { isok = true, msg = "数据获取成功", postdata = postdata }, JsonRequestBehavior.AllowGet));
        }
Esempio n. 3
0
        public ActionResult GetMyGroupDetail()
        {
            string appId       = Context.GetRequest("appId", string.Empty);
            int    groupsponId = Context.GetRequestInt("groupsponId", 0);
            int    userId      = Context.GetRequestInt("userId", 0);

            if (userId <= 0)
            {
                return(Json(new { isok = false, msg = "用户ID不能为0" }, JsonRequestBehavior.AllowGet));
            }
            C_UserInfo loginuserinfo = C_UserInfoBLL.SingleModel.GetModel(userId);

            if (loginuserinfo == null)
            {
                return(Json(new { isok = false, msg = "用户不能为空" }, JsonRequestBehavior.AllowGet));
            }
            if (string.IsNullOrEmpty(appId))
            {
                return(Json(new { isok = false, msg = "参数错误" }, JsonRequestBehavior.AllowGet));
            }
            if (groupsponId <= 0)
            {
                return(Json(new { isok = false, msg = "拼团Id不能小于0" }, JsonRequestBehavior.AllowGet));
            }

            XcxAppAccountRelation r = _xcxAppAccountRelationBLL.GetModelByAppid(appId);

            if (r == null)
            {
                return(Json(new { isok = false, msg = "小程序未授权" }, JsonRequestBehavior.AllowGet));
            }
            Store store = StoreBLL.SingleModel.GetModelByRid(r.Id);

            if (store == null)
            {
                return(Json(new { isok = false, msg = "还未开通店铺" }, JsonRequestBehavior.AllowGet));
            }

            GroupSponsor smodel = GroupSponsorBLL.SingleModel.GetModel(groupsponId);

            if (smodel == null)
            {
                return(Json(new { isok = false, msg = "参拼团数据不存在" }, JsonRequestBehavior.AllowGet));
            }

            Groups model = GroupsBLL.SingleModel.GetModel(smodel.GroupId);

            if (model == null)
            {
                return(Json(new { isok = false, msg = "拼团数据不存在" }, JsonRequestBehavior.AllowGet));
            }
            model.ImgList     = C_AttachmentBLL.SingleModel.GetListByCache(smodel.GroupId, (int)AttachmentItemType.小程序拼团轮播图);
            model.DescImgList = C_AttachmentBLL.SingleModel.GetListByCache(smodel.GroupId, (int)AttachmentItemType.小程序拼团详情图);

            //视频
            List <C_AttachmentVideo> attvideolist = C_AttachmentVideoBLL.SingleModel.GetListByCache(smodel.GroupId, (int)AttachmentVideoType.小程序拼团视频);

            if (attvideolist.Count > 0)
            {
                model.VideoPath = attvideolist[0].convertFilePath;
            }
            //获取当前团的所有成员
            List <GroupUser> groupUserList = GroupUserBLL.SingleModel.GetList($"GroupId={smodel.GroupId} and GroupSponsorId={smodel.Id} and IsGroup=1 and state not in ({(int)MiniappPayState.取消支付},{(int)MiniappPayState.待支付})");


            //获取还需要几人才能成团
            int NeedNum = GroupUserBLL.SingleModel.GetDCount(smodel.GroupId, smodel.Id, smodel.GroupSize);

            int mState = 0;
            List <C_UserInfo> userinfolist = new List <C_UserInfo>();

            if (groupUserList != null && groupUserList.Count > 0)
            {
                string            userIds          = string.Join(",", groupUserList.Select(s => s.ObtainUserId).Distinct());
                List <C_UserInfo> userInfoListTemp = C_UserInfoBLL.SingleModel.GetListByIds(userIds);
                foreach (GroupUser GUInfo in groupUserList)
                {
                    //获取头像和昵称
                    C_UserInfo User = userInfoListTemp?.FirstOrDefault(f => f.Id == GUInfo.ObtainUserId);
                    if (User != null)
                    {
                        User.zbSiteId = GUInfo.IsGroupHead;
                        if (string.IsNullOrEmpty(User.HeadImgUrl))
                        {
                            User.HeadImgUrl = GUInfo.HeadImgUrl;
                        }
                        if (User.Id == userId)
                        {
                            if (smodel.State == 2)
                            {
                                mState = 2;
                            }
                            else if (smodel.State == 1 && smodel.EndDate > DateTime.Now)
                            {
                                mState = 1;
                            }
                            else if (smodel.State == 0)
                            {
                                mState = 0;
                            }
                            else
                            {
                                mState = -1;
                            }
                        }

                        userinfolist.Add(User);
                    }
                }
            }

            //判断是否已结束
            if ((model.ValidDateEnd < DateTime.Now || model.RemainNum <= 0))
            {
                model.IsEnd = 1;
            }
            else if ((model.ValidDateStart > DateTime.Now && model.RemainNum > 0))
            {
                //判断是否开始
                model.IsEnd = 2;
            }
            else
            {
                model.IsEnd = 0;
            }
            var groupdetail = new
            {
                model.Id,
                model.CreateNum,
                model.RemainNum,
                model.LimitNum,
                model.DiscountPrice,
                model.UnitPrice,
                model.OriginalPrice,
                model.HeadDeduct,
                model.GroupName,
                ValidDateEnd   = smodel.EndDate.ToString("yyyy-MM-dd HH:mm:ss"),
                ValidDateStart = smodel.StartDate.ToString("yyyy-MM-dd HH:mm:ss"),
                smodel.GroupSize,
                model.VideoPath,
                smodel.State,
                mState,
                model.ImgUrl,
                model.ImgList,
                model.Description,
                model.DescImgList,
                NeedNum,
                GroupUserList = userinfolist?.Select(s => new {
                    s.Id,
                    s.HeadImgUrl,
                    s.NickName,
                    IsGroupHeader = s.zbSiteId,
                }),
            };

            return(Json(new { isok = true, msg = "数据获取成功", groupdetail = groupdetail }, JsonRequestBehavior.AllowGet));
        }
Esempio n. 4
0
        public ActionResult GetOrderDetail()
        {
            string appId = Context.GetRequest("appId", string.Empty);
            int    guid  = Context.GetRequestInt("guid", 0);

            if (string.IsNullOrEmpty(appId))
            {
                return(Json(new { isok = false, msg = "参数错误" }, JsonRequestBehavior.AllowGet));
            }
            if (guid <= 0)
            {
                return(Json(new { isok = false, msg = "订单Id不能小于0" }, JsonRequestBehavior.AllowGet));
            }

            XcxAppAccountRelation r = _xcxAppAccountRelationBLL.GetModelByAppid(appId);

            if (r == null)
            {
                return(Json(new { isok = false, msg = "小程序未授权" }, JsonRequestBehavior.AllowGet));
            }

            GroupUser groupumodel = GroupUserBLL.SingleModel.GetModel(guid);

            if (groupumodel == null)
            {
                return(Json(new { isok = false, msg = "订单数据不存在" }, JsonRequestBehavior.AllowGet));
            }

            Groups group = GroupsBLL.SingleModel.GetModel(groupumodel.GroupId);

            if (group == null)
            {
                return(Json(new { isok = false, msg = "拼团商品不存在" }, JsonRequestBehavior.AllowGet));
            }

            Store store = StoreBLL.SingleModel.GetModel(group.StoreId);

            if (store == null)
            {
                return(Json(new { isok = false, msg = "店铺不存在" }, JsonRequestBehavior.AllowGet));
            }

            string orderNo = "";

            if (groupumodel.PayType == 0)
            {
                CityMorders citymorder = _cityMordersBLL.GetModel(groupumodel.OrderId);
                if (citymorder == null)
                {
                    return(Json(new { isok = false, msg = "订单不存在" }, JsonRequestBehavior.AllowGet));
                }
                orderNo = citymorder.orderno;
            }
            else
            {
                orderNo = groupumodel.OrderNo;
            }

            GroupSponsor groupspormodel = new GroupSponsor();

            //如果是拼团查找拼团信息
            if (groupumodel.IsGroup == 1)
            {
                groupspormodel = GroupSponsorBLL.SingleModel.GetModel(groupumodel.GroupSponsorId);
                if (groupspormodel == null)
                {
                    return(Json(new { isok = false, msg = "拼团不存在" }, JsonRequestBehavior.AllowGet));
                }
            }

            C_UserInfo userinfo = C_UserInfoBLL.SingleModel.GetModel(groupumodel.ObtainUserId);
            var        postdata = new
            {
                groupumodel.Address,
                groupumodel.BuyPrice,
                groupumodel.PayType,
                groupumodel.Note,
                isheader        = groupspormodel.SponsorUserId == groupumodel.ObtainUserId,
                CreateDate      = groupumodel.CreateDate.ToString("yyyy-MM-dd HH:mm:ss"),
                SendGoodTime    = groupumodel.SendGoodTime.ToString("yyyy-MM-dd HH:mm:ss"),
                RecieveGoodTime = groupumodel.RecieveGoodTime.ToString("yyyy-MM-dd HH:mm:ss"),
                PayTime         = groupumodel.PayTime.ToString("yyyy-MM-dd HH:mm:ss"),
                groupumodel.StorerRemark,
                groupumodel.State,
                isGroup  = groupumodel.IsGroup,
                num      = groupumodel.BuyNum,
                username = groupumodel.UserName,
                phone    = groupumodel.Phone,
                group.HeadDeduct,
                group.ImgUrl,
                group.DiscountPrice,
                group.OriginalPrice,
                group.GroupName,
                storemobile = store.TelePhone,
                orderno     = orderNo,
            };

            return(Json(new { isok = true, msg = "数据获取成功", postdata = postdata }, JsonRequestBehavior.AllowGet));
        }
Esempio n. 5
0
        /// <summary>
        /// 拼团退款
        /// </summary>
        /// <param name="item"></param>
        /// <param name="type">0:拼团失败退款,1:店主手动退款</param>
        /// <returns></returns>
        public bool GroupReFundQueue(GroupUser item, ref string msg, int type = 0)
        {
            //0:微信支付,1:储值卡支付
            int paytype = item.PayType;

            TransactionModel tranmodel = new TransactionModel();
            Groups           csg       = GroupsBLL.SingleModel.GetModel(item.GroupId);

            if (csg == null)
            {
                msg        = "小程序拼团商品不存在啦=" + item.GroupId;
                item.State = (int)MiniappPayState.已失效;
                GroupUserBLL.SingleModel.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.已失效;
                GroupUserBLL.SingleModel.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)
            {
                CityMorders order = _cityMordersBLL.GetModel(item.OrderId);
                if (order == null)
                {
                    msg        = "xxxxxxxxxxxxxxxxxx小程序拼团退款查不到支付订单 ID=" + item.Id;
                    item.State = (int)MiniappPayState.已失效;
                    GroupUserBLL.SingleModel.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(base.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}");
                //LogHelper.WriteInfo(GetType(), $"修改拼团失败库存: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 (!ExecuteTransactionDataCorect(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);
        }
Esempio n. 6
0
        /// <summary>
        /// 用户参加拼团
        /// </summary>
        /// <param name="groupjson">拼团信息</param>
        /// <returns></returns>
        public int AddGroup(ref AddGroupModel groupjson)
        {
            string appId   = groupjson.appId;   //小程序appId
            int    userId  = groupjson.userId;  //用户ID
            int    groupId = groupjson.groupId; //拼团商品ID
            int    num     = groupjson.num;     //数量
            int    isGroup = groupjson.isGroup; //是否团购
            int    isGHead = groupjson.isGHead; //是否团长
            int    gsid    = groupjson.gsid;    //参团ID

            if (string.IsNullOrEmpty(appId))
            {
                groupjson.msg = "小程序appId不能为空!";
                return(-1);
            }
            XcxAppAccountRelation relationmodel = XcxAppAccountRelationBLL.SingleModel.GetModelByAppid(appId);

            if (relationmodel == null)
            {
                groupjson.msg = "非法请求!";
                return(-1);
            }
            if (userId <= 0)
            {
                groupjson.msg = "用户ID不能为0!";
                return(-1);
            }
            C_UserInfo loginCUser = C_UserInfoBLL.SingleModel.GetModel(userId);

            if (loginCUser == null)
            {
                groupjson.msg = "找不到用户!";
                return(-1);
            }
            if (groupId <= 0)
            {
                groupjson.msg = "拼团商品ID不能为0!";
                return(-1);
            }
            if (num <= 0)
            {
                groupjson.msg = "拼团商品数量不能为0!";
                return(-1);
            }
            if (string.IsNullOrEmpty(groupjson.addres))
            {
                groupjson.msg = "收货地址不能为空!";
                return(-1);
            }
            Groups group = base.GetModel(groupId);

            if (null == group)
            {
                groupjson.msg = "不存在该拼团商品!";
                return(-1);
            }

            List <GroupUser> buyerlist = GroupUserBLL.SingleModel.GetList($"GroupId={groupId} && ObtainUserId={loginCUser.Id} and state not in({(int)MiniappPayState.取消支付},{(int)MiniappPayState.待支付})");
            var userCouponLCount       = buyerlist?.Sum(s => s.BuyNum);

            //var record = userCouponList.Where(m => m.ObtainUserId == loginCUser.Id && m.State !=  && m.State != );

            if (group.LimitNum > 0 && userCouponLCount + num > group.LimitNum)
            {
                groupjson.msg = "您已达到此拼团限购数量!";
                return(-1);
            }

            //判断是否已售罄
            if (group.RemainNum <= 0)
            {
                groupjson.msg = "你手慢了,商品已售罄!";
                return(-1);
            }

            int totalPrice = group.UnitPrice * num;

            if (isGroup == 1)
            {
                totalPrice = group.DiscountPrice * num;
                //新开团团长减价
                if (isGHead == 1)
                {
                    //判断剩余数量是否达到团的人数
                    if (group.RemainNum < group.GroupSize)
                    {
                        groupjson.msg = "商品的剩余数量已经不够开一个新团哦!";
                        return(-1);
                    }
                    totalPrice = totalPrice - group.HeadDeduct;
                }
                else
                {
                }
            }
            //判断价格和数量是否正常
            if (totalPrice <= 0 || num <= 0)
            {
                groupjson.msg = "价格或数量有误,请刷新后重试!";
                return(-1);
            }
            //判断参团的团状态
            if (gsid > 0)
            {
                GroupSponsor gSinfo = GroupSponsorBLL.SingleModel.GetModel(gsid);
                if (gSinfo == null)
                {
                    groupjson.msg = "参团信息有误,请刷新后重试!";
                    return(-1);
                }
                if (gSinfo.State != 1 || gSinfo.EndDate < DateTime.Now)
                {
                    groupjson.msg = "此团信息状态已改变,请刷新后重试!";
                    return(-1);
                }
            }

            lock (GroupLocker)
            {
                if (group.RemainNum < num)
                {
                    groupjson.msg = "库存已不足,请减少购买数量后重试!";
                    return(-1);
                }

                if (isGHead == 0 && isGroup == 1) // 参团
                {
                    var groupsponcount = GroupUserBLL.SingleModel.GetCount($"GroupSponsorId={gsid} and state ={(int)MiniappPayState.待发货}");
                    //var groupsponcount = sporslist?.Sum(s=>s.BuyNum);
                    if (group.GroupSize < groupsponcount + 1)
                    {
                        groupjson.msg = "拼团场面太火爆,请稍后重试!";
                        return(-1);
                    }
                }

                //发起开团
                GroupSponsor groupSponsor = new GroupSponsor();
                int          result       = gsid;
                if (isGHead == 1 && isGroup == 1)
                {
                    if (group.RemainNum / group.GroupSize <= 0)
                    {
                        groupjson.msg = "剩余商品已不足成团!";
                        return(-1);
                    }
                    groupSponsor.GroupId       = group.Id;
                    groupSponsor.GroupName     = group.GroupName;
                    groupSponsor.SponsorUserId = loginCUser.Id;
                    groupSponsor.GroupSize     = group.GroupSize;
                    groupSponsor.StartDate     = DateTime.Now;
                    groupSponsor.EndDate       = DateTime.Now.AddHours(24);
                    if (group.ValidDateEnd <= DateTime.Now.AddHours(24))
                    {
                        groupSponsor.EndDate = group.ValidDateEnd;
                    }
                    groupSponsor.State = (int)GroupState.待付款;  //待付款
                    result             = Convert.ToInt32(GroupSponsorBLL.SingleModel.Add(groupSponsor));
                }

                //用户获得团购
                GroupUser userGroup = new GroupUser();
                userGroup.DiscountGuid   = Guid.NewGuid().ToString().Replace("-", "");
                userGroup.CreateDate     = DateTime.Now;
                userGroup.GroupId        = group.Id;
                userGroup.GroupSponsorId = result;
                userGroup.BuyNum         = num;
                userGroup.BuyPrice       = totalPrice;
                userGroup.IsGroup        = isGroup;
                userGroup.IsGroupHead    = isGHead;
                userGroup.ObtainUserId   = userId;
                userGroup.State          = (int)MiniappPayState.待支付;
                //userGroup.OrderNo = Order.orderno;
                //userGroup.OrderId = Order.Id;
                //userGroup.PayTime = DateTime.Now;
                userGroup.Address = groupjson.addres;
                //userGroup.PayType = groupj == 1 ? Order.ActionType : 0;
                userGroup.ValidNumber = new Random().Next(100000, 999999);
                userGroup.AppId       = groupjson.appId;
                userGroup.Phone       = groupjson.phone;
                userGroup.UserName    = groupjson.username;
                userGroup.Note        = groupjson.note;
                userGroup.Id          = Convert.ToInt32(GroupUserBLL.SingleModel.Add(userGroup));

                group.RemainNum = group.RemainNum - num;
                if (!base.Update(group, "RemainNum"))
                {
                    log4net.LogHelper.WriteInfo(GetType(), "更改拼团库存失败");
                    return(-1);
                }

                groupjson.msg      = "开团成功!";
                groupjson.gsid     = result;
                groupjson.guid     = userGroup.Id;
                groupjson.payprice = totalPrice;
                return(result);
            }
        }