Пример #1
0
        /// <summary>
        /// 申报商品
        /// </summary>
        /// <param name="decalreList">待申报商品列表,必须是同一个商家,不能超过10个商品</param>
        /// <returns></returns>
        public DeclareProductResult DeclareProduct(List <WaitDeclareProduct> decalreList)
        {
            DeclareProductResult result = new DeclareProductResult();

            //检查是否有数据
            if (decalreList == null || decalreList.Count <= 0)
            {
                return(result);
            }
            var group = decalreList.GroupBy(d => d.MerchantSysNo);

            //检查数据是否满足要求
            if (group.Count() > 1 || decalreList.Count > 10)
            {
                throw new BizException("待申报商品列表,必须是同一个商家,不能超过10个商品");
            }
            //获取商家取关务对接相关信息
            VendorCustomsInfo customsInfo = SODA.LoadVendorCustomsInfoByMerchant(decalreList.FirstOrDefault().MerchantSysNo);
            //获取待申报商品详细信息
            List <ProductDeclare> dataList = ObjectFactory <IIMBizInteract> .Instance.DeclareGetProduct(decalreList);

            #region 构造请求参数
            EasiPayRequestDeclareProduct requestInfo = new EasiPayRequestDeclareProduct();
            requestInfo.version      = AppSettingManager.GetSetting("SO", "EasiPayDeclareProductConfigVersion");
            requestInfo.commitTime   = DateTime.Now.ToString("yyyyMMddHHmmss");
            requestInfo.coName       = customsInfo.CBTMerchantName;
            requestInfo.coCode       = customsInfo.CBTSRC_NCode;
            requestInfo.serialNumber = this.CreateSerialNumber(requestInfo.coCode);
            requestInfo.Cargoes      = EntityConverter <ProductDeclare, EasiPayRequestDeclareProductDetail> .Convert(dataList, (s, t) =>
            {
                t.cargoCode        = s.ProductID;
                t.cargoBrand       = s.BrandName;
                t.cargoNameCh      = s.ProductName;
                t.cargoNameEh      = s.ProductNameEN;
                t.cargoModel       = s.ProductMode;
                t.cargoSpec        = s.Specifications;
                t.cargoPlace       = s.CountryName;
                t.cargoFunction    = s.Functions;
                t.cargoPurpose     = s.Purpose;
                t.cargoIngredient  = s.Component;
                t.cargoFactoryDate = s.ManufactureDate.ToString("yyyyMMdd");
                t.cargoUnit        = s.TaxUnit;
                t.cargoUnitNum     = s.TaxQty.ToString();
                t.cargoPrice       = s.CurrentPrice.ToString("F2");
                t.cargoGrossWT     = s.GrossWeight;
                t.cargoNetWT       = s.SuttleWeight;
                t.serverType       = s.BizType == TradeType.FTA ? "S02" : "S01";
                t.customsCode      = s.CustomsCode;
                t.copGNo           = s.ProductSKUNO;
                t.materialID       = s.SuppliesSerialNo;
                t.beianUnit        = s.ApplyUnit;
                t.beianQty         = s.ApplyQty.ToString();
            });

            requestInfo.operationCode = "1";
            requestInfo.spt           = "";
            #endregion
            #region 3.处理请求,解析请求结果
            string reqContent       = BuildPostReqData(requestInfo, customsInfo.CBTProductDeclareSecretKey);
            string note             = string.Empty;
            string strRequestResult = HttpPostRequest(AppSettingManager.GetSetting("SO", "EasiPayDeclareProductConfigRequestUrl"), reqContent);
            strRequestResult = CommonUtility.HttpUrlDecode(strRequestResult);
            EasiPayRequestResult requestResult = SerializationUtility.JsonDeserialize <EasiPayRequestResult>(strRequestResult);
            if (requestResult.status.ToLower().Equals("success"))
            {
                result.Success = true;
                try
                {
                    ObjectFactory <IIMBizInteract> .Instance.ProductBatchEntry(decalreList.Select(t => t.ProductSysNo).ToList(), "", ProductEntryStatus.Entry, ProductEntryStatusEx.Customs);
                }
                catch (Exception ex)
                {
                    result.Message = ex.Message;
                }
                note = "商品报关申请成功";
            }
            else
            {
                result.Message = requestResult.msg;
                note           = "商品报关申请失败:" + requestResult.msg;
            }
            #region 写系统Log
            ApplicationEventLog log = new ApplicationEventLog()
            {
                Source           = "JOB ProductDeclare",
                ReferenceIP      = ServiceContext.Current.ClientIP,
                EventType        = 8,
                HostName         = "JOB",
                EventTitle       = "ProductDeclare Request",
                EventMessage     = reqContent,
                LanguageCode     = "zh-CN",
                CompanyCode      = "8601",
                StoreCompanyCode = "8601",
                EventDetail      = note
            };
            ObjectFactory <ICommonBizInteract> .Instance.CreateApplicationEventLog(log);

            #endregion
            #endregion
            return(result);
        }