コード例 #1
0
        /// <summary>
        /// 二维码扫描处理方法
        /// </summary>
        /// <param name="p">二维码所属包ID</param>
        /// <param name="sn">二维码的信息编码</param>
        /// <param name="userId">扫描人的用户ID</param>
        /// <param name="userType">扫描人的用户类型</param>
        /// <returns>二维码扫描结果</returns>
        public string ScanQrCode(string sn = "", int userId = 0, int userType = 0)
        {
            ScanQrCodeViewModel scanResult = new ScanQrCodeViewModel();

            scanResult.IsSuccess = false;
            scanResult.Msg       = "扫描二维码无效,请换一瓶";
            if (string.IsNullOrEmpty(sn))
            {
                scanResult.ReturnUrl = "二维码不存在";
            }
            var totalIntegral = 0;
            var rowNumber     = 0;

            //var memberInfo = _memberService.Find(userId);
            RegistMember memberInfo = (from o in db.RegistMember
                                       where o.MemberId == userId
                                       select o).FirstOrDefault();

            string isChance = "";   //标识,判断是否为活动概率规则

            if (!string.IsNullOrEmpty(sn))
            {
                var code = EncryptHelper.Confusion(sn);
                if (!string.IsNullOrEmpty(code) && code.Length == 18)
                {
                    //获取二维码
                    IntegralGoodsQrc qrc = (from o in db.IntegralGoodsQrc
                                            where o.Code == code
                                            select o).FirstOrDefault();

                    if (qrc.State == 1)
                    {
                        var wrapCode     = code.Substring(0, 2);
                        var categoryCode = code.Substring(2, 2);
                        var factoryCode  = code.Substring(4, 2);
                        var monthCode    = code.Substring(6, 2);
                        var productCode  = code.Substring(8);

                        //获取积分规则
                        DateTime date          = DateTime.Now;
                        var      integralModel = (from o in db.IntegralRule
                                                  join c in db.IntegralGoods on o.GoodsId equals c.GoodsId
                                                  where o.RuleState != 100 && c.GoodsState != 100 && c.GoodsNo == categoryCode &&
                                                  o.StartDate <date && o.EndDate> date
                                                  orderby o.RuleType descending
                                                  select o).FirstOrDefault();

                        if (memberInfo.IsEnable == 0 && (memberInfo.RecommendId > 0 || integralModel.RuleId == 83))
                        {
                            if (integralModel != null)
                            {
                                int count        = 0;
                                int scanIntegral = 0;

                                //使用二维码;添加商品积分记录;增加积分
                                var flag = Scan(integralModel.GoodsId, userId, qrc.QrcId, integralModel.Integral, (int)integralModel.RuleType, code, memberInfo.MemberCode, memberInfo.HotelName, out count, out scanIntegral, out isChance);

                                if (flag)
                                {
                                    //操作成功
                                    scanResult.IsSuccess = true;

                                    if (integralModel.ScanLimit > 0)
                                    {
                                        if (count >= integralModel.ScanLimit)
                                        {
                                            //int score = integralModel.Integral / 2;
                                            scanResult.Msg = string.Format("恭喜您!成功增加{0}积分", scanIntegral);
                                        }
                                        else
                                        {
                                            scanResult.Msg = string.Format("恭喜您!成功增加{0}积分", scanIntegral);
                                        }
                                    }
                                    else
                                    {
                                        scanResult.Msg = string.Format("恭喜您!成功增加{0}积分", scanIntegral);
                                    }
                                }
                                else
                                {
                                    //操作失败
                                    scanResult.Msg = "增加积分失败,请换一瓶。";
                                }
                            }
                            else
                            {
                                scanResult.Msg = "该产品不存在或者还没有对应的积分规则。";
                            }
                        }
                        else
                        {
                            scanResult.Msg = "产品积分扫码活动只针对已认证会员开展,未认证会员暂时无法扫描积分卡片。";
                        }
                    }
                    else
                    {
                        scanResult.Msg = string.Format("该二维码已被使用过。");
                    }
                }
            }

            scanResult.TotalIntegral = totalIntegral;
            scanResult.RowNumber     = rowNumber;
            return(scanResult.Msg + isChance.ToString());
        }
コード例 #2
0
        /// <summary>
        /// 执行生成二维码包
        /// </summary>
        /// <param name="obj"></param>
        /// <returns></returns>
        public bool ExcGenerate(IntegralGoodsQrcPackage obj)
        {
            try
            {
                //压缩包存储路径
                var basePath   = System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase;
                var qrCodePath = Convert.ToString(ConfigurationManager.AppSettings["QrCodeStorePath"]);
                var fileName   = string.Format("{0}.xls", Guid.NewGuid().ToString());
                var serverPath = qrCodePath + fileName;
                var filePath   = basePath + serverPath;
                //查询商品
                IntegralGoods goods = (from g in db.IntegralGoods
                                       where g.GoodsId == obj.GoodsId
                                       select g).FirstOrDefault <IntegralGoods>();

                //var goods = _integralGoodsRepository.Find(obj.GoodsId);
                obj.Name        = goods.GoodsName;
                obj.GoodsCode   = goods.GoodsNo;
                obj.State       = 2;
                obj.CreateDate  = DateTime.Now;
                obj.Url         = Convert.ToString(ConfigurationManager.AppSettings["QrCodeUrl"]) + "/";
                obj.DownLoadUrl = serverPath;

                //添加一条压缩包记录
                db.IntegralGoodsQrcPackage.Add(obj);
                db.SaveChanges();

                //安全码的模板
                //{规格}{商品类别}{工厂}{月份}{流水号}
                var snTmpl = ((int)obj.Range).ToString()
                             + obj.GoodsCode
                             + ((int)obj.Source).ToString()
                             + ((int)obj.March).ToString().PadLeft(2, '0');
                List <string> qrCodeList = new List <string>();

                //生成二维码
                for (int i = 1; i <= obj.Num; i++)
                {
                    IntegralGoodsQrc qrc = new IntegralGoodsQrc();
                    qrc.State      = 1;
                    qrc.PackageId  = obj.PackageId;
                    qrc.CreateDate = DateTime.Now;
                    qrc.QrcUrl     = "";
                    qrc.Code       = "";

                    //添加一条二维码记录
                    db.IntegralGoodsQrc.Add(qrc);
                    db.SaveChanges();

                    //安全码
                    qrc.Code = snTmpl + qrc.QrcId.ToString().PadLeft(10, '0');
                    //安全码需混淆
                    //{域名}?p={本批次ID}&sn={安全码}
                    qrc.QrcUrl = string.Format("{0}?sn={1}", obj.Url, EncryptHelper.Confusion(qrc.Code));
                    //更改二维码的值
                    SetQrcCode(qrc.QrcId, qrc.QrcUrl, qrc.Code);
                    //生成一个二维码
                    var code = QrCodeHelper.ToBytes(qrc.QrcUrl);
                    qrCodeList.Add(qrc.QrcUrl);
                }

                //生成Excel
                ExcelExtend.SaveExcel <string>(qrCodeList, qrCodePath, fileName);

                obj.State = 1;
                //_repository.Update(obj);
                EntityState statebefore = db.Entry(obj).State;
                db.Entry(obj).State = EntityState.Modified;
                db.SaveChanges();

                //将生成的所有二维码打包
                //CompressHelper.ToZip(qrCodeList, filePath, "PNG");

                return(true);
            }
            catch (Exception ex)
            {
                string a = ex.Message;
                return(false);
            }
        }