Esempio n. 1
0
        /// <summary>
        /// 生成会员卡
        /// </summary>
        /// <param name="ids"></param>
        /// <returns></returns>
        public OpResult GenerateMemberCard(string ids)
        {
            try
            {
                var datas = _service.GetMakingMembershipCardByIds(ids);

                if (datas == null || datas.Count == 0)
                {
                    return(new OpResult()
                    {
                        Successed = false, Message = "找不到原数据!"
                    });
                }
                //var sw = new Stopwatch();

                var securityCodes = BaseService <MembershipCard> .CurrentRepository.Entities.Where(o => o.CompanyId == CommonService.CompanyId).Select(o => o.SecurityCode).ToList();

                var cardTypeIds  = datas.Select(o => o.CardTypeId).ToList();
                var cardTypeInfo = BaseService <CardInfo> .CurrentRepository.Entities.Where(o => cardTypeIds.Contains(o.CardTypeId)).ToDictionary(o => o.CardTypeId, o => o);

                var areaCode = string.Empty;

                //统计当前的所有批次
                var batchs = string.Empty;
                //生成相应会员卡信息
                foreach (var item in datas)
                {
                    //查询当前cid区号
                    if (string.IsNullOrEmpty(areaCode))
                    {
                        var companyEntity = BaseService <OMS_CompanyAuthorize> .CurrentRepository.Entities.FirstOrDefault(o => o.Code == item.CompanyId);

                        if (companyEntity == null)
                        {
                            areaCode = "0000";
                        }
                        else
                        {
                            if (!string.IsNullOrEmpty(companyEntity.AreaCode))
                            {
                                areaCode = companyEntity.AreaCode;
                            }
                            else
                            {
                                areaCode = "0000";
                            }
                        }
                    }
                    //判断状态 0=未制卡
                    if (item.State == 0)
                    {
                        batchs += "," + item.BatchSN;
                        //生成会员卡数据
                        var membershipCards = new List <MembershipCard>();

                        var         resetSwiftNumber = 0;
                        SwiftNumber swiftNumber      = new SwiftNumber(string.Format("MembershipCard_{0}", item.CompanyId), SwiftNumberMode.Normal);
                        var         swiftNumbers     = swiftNumber.GetNumberRanges(item.MakeNumber, out resetSwiftNumber);
                        //sw.Start();
                        var indexCard = string.Empty;
                        for (int i = 0; i < item.MakeNumber; i++)
                        {
                            var securitycode = ExtendHelper.GetRandomStr(4, (o) => { return(securityCodes.Contains(o)); });
                            securityCodes.Add(securitycode);
                            //1位卡类型   4位区号  7位商户号  7位随机数
                            StringBuilder cardSn = new StringBuilder();
                            if (cardTypeInfo[item.CardTypeId].CardType.Contains(","))
                            {
                                indexCard = "3";
                            }
                            else
                            {
                                indexCard = cardTypeInfo[item.CardTypeId].CardType;
                            }
                            cardSn.Append(indexCard);
                            cardSn.Append(areaCode);
                            cardSn.Append(item.CompanyId.ToString("0000000"));
                            cardSn.Append(swiftNumbers[i].ToString("0000000"));
                            MembershipCard membershipCard = new MembershipCard()
                            {
                                CompanyId     = item.CompanyId,
                                BatchSN       = item.BatchSN,
                                CardSN        = cardSn.ToString(),
                                CardTypeId    = item.CardTypeId,
                                ReChargeTotal = 0m,
                                GiveTotal     = 0m,
                                Balance       = cardTypeInfo[item.CardTypeId].DefaultPrice,
                                Deposit       = 0m,
                                State         = 0,
                                ExpiryStart   = item.ExpiryStart,
                                ExpiryEnd     = item.ExpiryEnd,
                                CreateDT      = DateTime.Now,
                                CreateUID     = Sys.CurrentUser.UID,
                                SecurityCode  = securitycode,
                            };
                            membershipCards.Add(membershipCard);
                        }
                        //更新批次状态
                        _service.UpdateState(1, item.Id.ToString());

                        BluckHelper.BulkInsertAll <MembershipCard>(membershipCards);//5000 0.9767s
                        //BaseService<MembershipCard>.CurrentRepository.AddRange(membershipCards);//5000条1.08分钟

                        swiftNumber.Reset(resetSwiftNumber);
                        //sw.Stop();
                    }
                }
                //var date = sw.Elapsed;
                return(new OpResult()
                {
                    Successed = true, Message = "操作成功!"
                });
            }
            catch (Exception e)
            {
                return(new OpResult()
                {
                    Successed = false, Message = e.Message
                });
            }
        }
        /// <summary>
        /// 生成优惠券
        /// </summary>
        /// <param name="id">优惠券Id</param>
        /// <param name="batchSN">批次号</param>
        /// <param name="num">生成数量</param>
        /// <returns>生成结果</returns>
        public OpResult GenerateCoupon(string id, string batchSN, int num)
        {
            OpResult result = new OpResult()
            {
                Successed = false, Message = "生成失败!"
            };

            if ((!string.IsNullOrEmpty(batchSN)) && num > 0)
            {
                TransactionOptions transactionoptions = new TransactionOptions();
                transactionoptions.Timeout = new TimeSpan(0, 10, 0);//事务超时:10分钟
                try
                {
                    using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, transactionoptions))
                    {
                        var ranArray = GetRandString(3, num);//3位不重复的随机字符串数组,数组长度为num
                        if (ranArray[0] == "错误")
                        {
                            return(result);
                        }
                        object obj = new object();
                        lock (obj)
                        {
                            var couponList = new List <CouponCardDetail>();
                            for (int i = 0; i < num; i++)
                            {
                                CouponCardDetail model = new CouponCardDetail();
                                model.CreateDT  = DateTime.Now;
                                model.CreateUID = Sys.CurrentUser.UID;
                                model.CompanyId = CommonService.CompanyId;
                                model.BatchSN   = batchSN;
                                var serialNo = (i + 1).ToString().PadLeft(5, '0');
                                model.TicketNo     = batchSN + serialNo; //券号:8位批次号 + 5位序号,示例:1608160100001
                                model.SecurityCode = ranArray[i];        //防伪码:3位英文字母随机组合,同一批次内唯一
                                model.State        = 0;
                                couponList.Add(model);
                            }
                            BluckHelper.BulkInsertAll <CouponCardDetail>(couponList);//往数据库插入5000条数据约耗时:0.9s
                            result = SetCouponState(id, 1);
                            //result = BaseService<CouponCardDetail>.AddRange(couponList);//往数据库插入5000条数据约耗时:90s
                            //if (result.Successed)
                            //{
                            //    result = SetCouponState(id, 1);
                            //}
                        }
                        scope.Complete();
                    }
                }
                catch (Exception)
                {
                    return(result);
                }
                if (result.Successed)
                {
                    return(new OpResult()
                    {
                        Successed = true, Message = "生成成功!"
                    });
                }
                else
                {
                    return(new OpResult()
                    {
                        Successed = false, Message = "生成失败!"
                    });
                }
            }
            else
            {
                return(result);
            }
        }