コード例 #1
0
        /// <summary>
        /// 自动积分并微信推送接口
        /// </summary>
        /// <param name="webPosArg"></param>
        /// <returns></returns>
        private async static Task <Result> WebPosForPoint(WebPosArg webPosArg)
        {
            int    amount     = new Random(((unchecked ((int)DateTime.Now.Millisecond + (int)DateTime.Now.Ticks)))).Next(10, 2000);
            string testString = $@"<cmd type=""SALES"" appCode=""POS"">
                                        <shared offline=""true"">
                                                <companyID>{webPosArg.companyID}</companyID>
                                                <orgID>{webPosArg.orgID}</orgID>
                                                <storeID>{webPosArg.storeID}</storeID>
                                                <cashierID>{webPosArg.cashierID}</cashierID>
                                        </shared>
                                        <sales discountPercentage=""{webPosArg.discountPercentage}"" 
                                        cardID=""{webPosArg.cardID}"" 
                                        txnDateTime=""{webPosArg.txnDateTime}"" 
                                        receiptNo=""12L102N10120180321uytu7t876896{amount}"" 
                                        actualAmount=""{amount}"" 
                                        payableAmount=""{amount}"" 
                                        verificationCode="""" />
                                   </cmd>";

            WebPosTest.WebPOSSoapClient  ws  = new WebPosTest.WebPOSSoapClient(WebPosTest.WebPOSSoapClient.EndpointConfiguration.WebPOSSoap);
            WebPosTest.WebPOSCredentials mwc = new WebPosTest.WebPOSCredentials();


            mwc.Username = ConfigurationUtil.GetSection("ObjectConfig:WebPosService:UserName");
            mwc.Password = ws.GetEncryptedCharAsync(ConfigurationUtil.GetSection("ObjectConfig:WebPosService:PassWord")).Result;
            try
            {
                var cmdResult = await ws.CmdAsync(mwc, testString);

                if (!string.IsNullOrWhiteSpace(cmdResult.CmdResult) && cmdResult.CmdResult.Contains("hasError=\"false\""))
                {
                    return(new Result(true, "OCR识别成功,完成自动积分且进行微信推送", null));
                }
                return(new Result(false, $"OCR验证通过,{cmdResult.CmdResult}", null));
            }
            catch (Exception ex)
            {
                Log.Error("WebPos接口", ex);
                return(new Result(false, $"OCR验证通过,{ex.Message}", null));
            }
        }
コード例 #2
0
        public static async Task <Result> ReceiptOCR(string Id)
        {
            try
            {
                var ApplyPointModel = dal.GetModel <ApplyPoint>($"and ApplyPointID='{Id}'");        //根据Id 获取 积分申请
                if (ApplyPointModel == null)
                {
                    return(new Result(false, "积分申请表查无数据", null));
                }

                var ReceiptOCRResult = await Task.Run(async() =>
                {
                    #region 调用BAIDUOCR API,并将识别数据添加至原始数据表

                    var Image  = (Bitmap)Bitmap.FromFile(ApplyPointModel.ReceiptPhoto);
                    var base64 = Commom.ImgToBase64String(Image);        //拿到积分申请中的图片转为Base64
                    base64     = System.Web.HttpUtility.UrlEncode(base64);
                    //byte[] bytes = Convert.FromBase64String(base64);
                    //var result = Commom.GeneralOCRBasic(s => s.Receipt(bytes));   //暂时为票据服务识别
                    //根据MallOCRRule配置的OCR相关配置进行OCR请求,暂不用SDK,缓存处理
                    MallOCRRule MallOCRRule = CacheHandle <MallOCRRule>($"MallOCRRule{Id}", 1, $" and MallID='{ApplyPointModel.MallID}'");
                    var result = HttpHelper.HttpPost(string.Format(MallOCRRule.OCRServerURL, MallOCRRule.OCRServerToken), $"image={base64}");
                    if (result.Contains("error_msg"))
                    {
                        var OCRErrorModel = JsonConvert.DeserializeObject <OCRErrorResult>(result);
                        return(new Result(false, OCRErrorModel.error_msg, null));
                    }

                    var RecongnizeModel = new ApplyPictureRecongnize
                    {
                        id          = Guid.NewGuid(),
                        applyid     = Guid.Parse(Id),
                        Lineno      = 0,
                        LineContent = result
                    };
                    var AddResult = DbContext.Add(RecongnizeModel);       //识别内容添加到识别原始表

                    #endregion

                    if (AddResult == 0)
                    {
                        ApplyPointModel.RecongizeStatus = 1;
                        var UpadateResult = DbContext.Update(ApplyPointModel);        //已解析原始数据
                        if (UpadateResult)
                        {
                            //根据商铺规则明细取到OCR结果
                            var ApplyOCRResult = GetApplyPointOCRResult(Guid.Parse(Id), ApplyPointModel.StoreID, result);
                            if (ApplyOCRResult.Success)
                            {
                                ApplyPointOCRResult OCRResult = (ApplyPointOCRResult)ApplyOCRResult.Data;

                                //匹配商铺规则
                                var VerifyResult = VerifyOCRResult(OCRResult);
                                if (VerifyResult.Success)
                                {
                                    //更新积分申请表
                                    ApplyPointModel.RecongizeStatus = 2;            //成功匹配
                                    ApplyPointModel.AuditDate       = DateTime.Now; //修改审批日期
                                    if (DbContext.Update(ApplyPointModel))
                                    {
                                        Store StoreModel = CacheHandle <Store>($"Store{ApplyPointModel.StoreID}", 1, $" and StoreId = '{ApplyPointModel.StoreID}'");
                                        OrgInfo orgInfo  = CacheHandle <OrgInfo>($"OrgInfo{StoreModel.OrgID}", 24, $" and OrgId = '{StoreModel.OrgID}'");
                                        Company company  = CacheHandle <Company>($"Company{StoreModel.CompanyID}", 24, $" and CompanyId = '{StoreModel.CompanyID}'");

                                        Card card = dal.GetModel <Card>($" and CardID = '{ApplyPointModel.CardID}'");
                                        //自动积分
                                        var webPosArg = new WebPosArg
                                        {
                                            cardID             = card.CardCode,
                                            companyID          = company.CompanyCode,
                                            orgID              = orgInfo.OrgCode,
                                            storeID            = StoreModel.StoreCode,
                                            cashierID          = "crm",
                                            discountPercentage = 0,
                                            receiptNo          = ApplyPointModel.ReceiptNo,
                                            txnDateTime        = ApplyPointModel.TransDate
                                        };
                                        var webPosResult = await WebPosForPoint(webPosArg);
                                        return(webPosResult);
                                    }
                                    else
                                    {
                                        return(new Result(false, "OCR信息校验成功后修改积分申请表失败", null));
                                    }
                                }
                                else
                                {
                                    return(new Result(false, VerifyResult.Message, null));
                                }
                            }
                            else
                            {
                                ApplyPointModel.RecongizeStatus = 3;  //成功匹配
                                DbContext.Update(ApplyPointModel);
                                return(new Result(false, ApplyOCRResult.Message, null));
                            }
                        }
                        else
                        {
                            return(new Result(false, "修改积分申请表失败", null));
                        }
                    }
                    else
                    {
                        return(new Result(false, "添加到原始表失败", null));
                    }
                });

                return(ReceiptOCRResult);
            }
            catch (Exception ex)
            {
                Log.Error("ReceiptOCR", ex);
                return(new Result(false, ex.Message, null));
            }
        }
コード例 #3
0
        /// <summary>
        /// 创建积分申请单,校验信息成功并推送
        /// 若原先存在积分申请单,失败的原因:校验失败 所有应该重新赋值
        /// </summary>
        /// <param name="applyPointRequest"></param>
        /// <returns></returns>
        public static Result CreateApplyPoint(ApplyPointRequest applyPointRequest)
        {
            try
            {
                #region 图片上传
                ImageResponse ImageResponse = null;
                try
                {
                    var FileUploadResult = ImageUpload(Commom.FileUploadUrl, applyPointRequest.receiptOCR.Base64);
                    if (!FileUploadResult.Success)
                    {
                        return(FileUploadResult);
                    }
                    ImageResponse = JsonConvert.DeserializeObject <ImageResponse>(FileUploadResult.Data.ToString());
                }
                catch (Exception ex)
                {
                    Log.Error("CreateApplyPoint-FileUpload", ex);
                    return(new Result(false, ex.Message, null));
                }
                #endregion

                Store StoreModel = CacheHandle <Store>(
                    Key: $"Store{applyPointRequest.receiptOCR.StoreId}",
                    Hour: double.Parse(ConfigurationUtil.GetSection("ObjectConfig:CacheExpiration:Store")),
                    sqlWhere: $" and StoreId = '{applyPointRequest.receiptOCR.StoreId}'");

                StoreOCR StoreOCRRule = CacheHandle <StoreOCR>(
                    Key: $"StoreOCR{applyPointRequest.receiptOCR.StoreId}",
                    Hour: double.Parse(ConfigurationUtil.GetSection("ObjectConfig:CacheExpiration:StoreOCR")),
                    sqlWhere: $"and StoreId = '{applyPointRequest.receiptOCR.StoreId}'");

                var ApplyPoint = dal.GetModel <ApplyPoint>($" and ReceiptNo='{applyPointRequest.receiptOCR.ReceiptNo}' and StoreID='{applyPointRequest.receiptOCR.StoreId}'");

                ApplyPictureRecongnize applyPictureRecongnize = dal.GetModel <ApplyPictureRecongnize>($" and id='{applyPointRequest.receiptOCR.RecongnizelId}'");


                var IsHas = false;      // 是否原先存在积分申请单  默认没有 更新识别原始表
                if (ApplyPoint == null) //判断该小票号 是否存在积分申请单 不存在则添加原始积分申请单 (已解析原始数据,校验失败)
                {
                    var ApplyPointId = Guid.NewGuid();
                    ApplyPoint = new ApplyPoint
                    {
                        ApplyPointID = ApplyPointId,
                        MallID       = StoreModel.MallID,
                        StoreID      = applyPointRequest.receiptOCR.StoreId,
                        CardID       = Guid.Parse(applyPointRequest.cardId),
                        ReceiptNo    = applyPointRequest.receiptOCR.ReceiptNo,
                        TransDate    = applyPointRequest.receiptOCR.TransDatetime,
                        TransAmt     = applyPointRequest.receiptOCR.TranAmount,
                        VerifyStatus = StoreOCRRule.needVerify == 0 ? 1 : 0,
                        ReceiptPhoto = ImageResponse.fileURL
                    };
                    applyPictureRecongnize.applyid = ApplyPointId;
                    DbContext.Update <ApplyPictureRecongnize>(applyPictureRecongnize);
                }
                else
                {
                    IsHas                   = true;
                    ApplyPoint.MallID       = StoreModel.MallID;
                    ApplyPoint.StoreID      = applyPointRequest.receiptOCR.StoreId;
                    ApplyPoint.CardID       = Guid.Parse(applyPointRequest.cardId);
                    ApplyPoint.ReceiptNo    = applyPointRequest.receiptOCR.ReceiptNo;
                    ApplyPoint.TransDate    = applyPointRequest.receiptOCR.TransDatetime;
                    ApplyPoint.TransAmt     = applyPointRequest.receiptOCR.TranAmount;
                    ApplyPoint.VerifyStatus = StoreOCRRule.needVerify == 0 ? 1 : 0;
                }

                var VerifyRecognitionResult = VerifyRecognition(applyPointRequest.receiptOCR); //校验结果
                ApplyPoint.AuditDate = DateTime.Now;
                if (VerifyRecognitionResult.Success)                                           //校验成功
                {
                    ApplyPoint.RecongizeStatus = 2;
                    ApplyPoint.VerifyStatus    = 1;
                }
                else//校验失败 修改值
                {
                    ApplyPoint.RecongizeStatus = 3;
                    ApplyPoint.VerifyStatus    = 0;
                    ApplyPoint.Status          = 0;
                    if (IsHas)
                    {
                        DbContext.Update <ApplyPoint>(ApplyPoint);
                    }
                    else
                    {
                        DbContext.Add <ApplyPoint>(ApplyPoint);
                    }
                    return(VerifyRecognitionResult);
                }

                var LastRes = true;//添加是否成功
                if (IsHas)
                {
                    if (!DbContext.Update <ApplyPoint>(ApplyPoint))
                    {
                        LastRes = false;
                    }
                }
                else
                {
                    if (DbContext.Add <ApplyPoint>(ApplyPoint) != 0)
                    {
                        LastRes = false;
                    }
                }

                if (LastRes)
                {
                    List <Company> companyList = CacheHandle <List <Company> >(
                        Key: "Company",
                        Hour: double.Parse(ConfigurationUtil.GetSection("ObjectConfig:CacheExpiration:Company")),
                        sqlWhere: "");
                    List <OrgInfo> orgList = CacheHandle <List <OrgInfo> >(
                        Key: "OrgInfo",
                        Hour: double.Parse(ConfigurationUtil.GetSection("ObjectConfig:CacheExpiration:OrgInfo")),
                        sqlWhere: "");

                    //自动积分 推送
                    var arg = new WebPosArg
                    {
                        companyID          = companyList.Where(s => s.CompanyId == StoreModel.CompanyID).FirstOrDefault()?.CompanyCode ?? "",
                        storeID            = StoreModel.StoreCode,
                        cardID             = dal.GetModel <Card>($" and CardID='{applyPointRequest.cardId}'")?.CardCode ?? "",
                        cashierID          = "CrmApplyPoint",
                        discountPercentage = 0,
                        orgID       = orgList.Where(s => s.OrgId == StoreModel.OrgID).FirstOrDefault()?.OrgCode ?? "",
                        receiptNo   = applyPointRequest.receiptOCR.ReceiptNo,
                        txnDateTime = applyPointRequest.receiptOCR.TransDatetime
                    };
                    var argStr = JsonConvert.SerializeObject(arg);
                    ProducerMQ(argStr);
                    return(new Result(true, "校验成功,已申请积分!", null));
                }
                return(new Result(false, "校验成功,对ApplyPoint操作失败!", null));
            }
            catch (Exception ex)
            {
                Log.Error("CreateApplyPoint", ex);
                return(new Result(false, ex.Message, null));
            }
        }