/// <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()); }
/// <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); } }