Example #1
0
 public DeliveryPrintDocument(Order[] orders, WuliuNumber[] wuliuNumbers, Dictionary <string, string>[] userDatas, WuliuPrintTemplate wuliuTemplate)
 {
     this.WuliuNumbers       = wuliuNumbers;
     this.Orders             = orders;
     this.UserDatas          = userDatas;
     this.CloudPrintTemplate = wuliuTemplate;
 }
Example #2
0
 public void UpdateWuliuNumber(Shop shop, WuliuPrintTemplate wuliuTemplate, Order order, WuliuNumber wuliuNumber)
 {
     if (shop.WuliuEnabled == false)
     {
         throw new Exception("店铺电子面单接口已禁用,无法调用相应接口操作");
     }
     this.InvokeWithRefreshAccessToken(shop, (Action)(() => GetPop(shop.PopType).UpdateWuliuNumber(shop, wuliuTemplate, order, wuliuNumber)));
 }
Example #3
0
 public WuliuNumber GetWuliuNumber(Shop shop, string popSellerNumberId, WuliuPrintTemplate wuliuTemplate, Order order, string[] wuliuIds, string packageId, string senderName, string senderPhone, string senderAddress)
 {
     if (shop.WuliuEnabled == false)
     {
         throw new Exception("店铺电子面单接口已禁用,无法调用相应接口操作");
     }
     return(this.InvokeWithRefreshAccessToken <WuliuNumber>(shop, () => GetPop(shop.PopType).GetWuliuNumber(shop, popSellerNumberId, wuliuTemplate, order, wuliuIds, packageId, senderName, senderPhone, senderAddress)));
 }
Example #4
0
        public override List <WuliuPrintTemplate> GetWuliuPrintTemplates(Shop shop, string cpCode)
        {
            //系统需要使用到标准模板,所以需要先下载
            var stdWuliuTemplats = new List <WuliuPrintTemplate>();
            CainiaoCloudprintStdtemplatesGetRequest reqStd = new CainiaoCloudprintStdtemplatesGetRequest()
            {
            };
            CainiaoCloudprintStdtemplatesGetResponse rspStd = InvokeOpenApi <CainiaoCloudprintStdtemplatesGetResponse>(shop, reqStd);

            foreach (var v in rspStd.Result.Datas)
            {
                if (string.IsNullOrWhiteSpace(cpCode) == false && cpCode.Equals(v.CpCode, StringComparison.OrdinalIgnoreCase) == false)
                {
                    continue;
                }
                foreach (var vv in v.StandardTemplates)
                {
                    var wuliuTemplate = new WuliuPrintTemplate {
                        CpCode = v.CpCode, Name = vv.StandardTemplateName, SourceType = WuliuPrintTemplateSourceType.CAINIAO, StandTemplateUrl = vv.StandardTemplateUrl, StandTemplateId = vv.StandardTemplateId.ToString(), UserOrIsvTemplateAreaId = "", UserOrIsvTemplateAreaUrl = ""
                    };
                    stdWuliuTemplats.Add(wuliuTemplate);
                }
            }

            var wuliuTemplates = new List <WuliuPrintTemplate>();
            //用户自定义模板
            CainiaoCloudprintMystdtemplatesGetRequest  req = new CainiaoCloudprintMystdtemplatesGetRequest();
            CainiaoCloudprintMystdtemplatesGetResponse rsp = InvokeOpenApi <CainiaoCloudprintMystdtemplatesGetResponse>(shop, req);

            foreach (var v in rsp.Result.Datas)
            {
                if (string.IsNullOrWhiteSpace(cpCode) == false && cpCode.Equals(v.CpCode, StringComparison.OrdinalIgnoreCase) == false)
                {
                    continue;
                }
                foreach (var vv in v.UserStdTemplates)
                {
                    var wuliuTemplate = new WuliuPrintTemplate {
                        CpCode = v.CpCode, Name = vv.UserStdTemplateName, SourceType = WuliuPrintTemplateSourceType.CAINIAO, StandTemplateUrl = vv.UserStdTemplateUrl, StandTemplateId = vv.UserStdTemplateId.ToString()
                    };
                    CainiaoCloudprintCustomaresGetRequest r = new CainiaoCloudprintCustomaresGetRequest()
                    {
                        TemplateId = vv.UserStdTemplateId
                    };
                    var rs = InvokeOpenApi <CainiaoCloudprintCustomaresGetResponse>(shop, r);
                    wuliuTemplate.UserOrIsvTemplateAreaUrl = rs.Result.Datas.FirstOrDefault().CustomAreaUrl;
                    wuliuTemplate.UserOrIsvTemplateAreaId  = rs.Result.Datas.FirstOrDefault().CustomAreaId.ToString();
                    wuliuTemplates.Add(wuliuTemplate);
                }
            }
            return(wuliuTemplates);
        }
Example #5
0
        public DataCollectionResponse <WuliuNumber> GenWuliuNumber(Shop shop, WuliuPrintTemplate wuliuTemplate, Order order, string[] wuliuIds, string packageId, string senderName, string senderPhone, string senderAddress)
        {
            Dictionary <string, object> para = new Dictionary <string, object>();

            para["shop"]          = shop;
            para["wuliuTemplate"] = wuliuTemplate;
            para["order"]         = order;
            para["wuliuIds"]      = wuliuIds;
            para["packageId"]     = packageId;
            para["senderName"]    = senderName;
            para["senderPhone"]   = senderPhone;
            para["senderAddress"] = senderAddress;
            return(DoPost <DataCollectionResponse <WuliuNumber> >(para));
        }
Example #6
0
        public override void UpdateWuliuNumber(Shop shop, WuliuPrintTemplate wuliuTemplate, Order order, WuliuNumber wuliuNumber)
        {
            PddReqWaybillUpdate reqUpdate = new PddReqWaybillUpdate();

            reqUpdate.waybill_code = wuliuNumber.DeliveryNumber;
            reqUpdate.wp_code      = wuliuTemplate.CpCode;
            reqUpdate.recipient    = new PddReqWaybillGetTradeOrderInfoDtoRecipient {
                name = order.ReceiverName, mobile = order.ReceiverMobile, phone = order.ReceiverPhone, address = ConvertToAddress(order.ReceiverAddress, order.PopType)
            };
            SortedDictionary <string, string> param = new SortedDictionary <string, string>();

            param["param_waybill_cloud_print_update_request"] = Newtonsoft.Json.JsonConvert.SerializeObject(reqUpdate);
            var rspUpdate = this.Invoke <PddRspWaybillUpdate>(shop, "pdd.waybill.update", param);

            wuliuNumber.PrintData = rspUpdate.print_data;
        }
Example #7
0
        public DataCollectionResponse <WuliuNumber> GenWuliuNumber(Shop shop, WuliuPrintTemplate wuliuTemplate, Order order, string[] wuliuIds, string packageId, string senderName, string senderPhone, string senderAddress)
        {
            try
            {
                System.Console.WriteLine(string.Format("{0}, 订单:{1},正在取号模版:{2}", DateTime.Now.ToString(), order.Id, wuliuTemplate.StandTemplateUrl));
                string wuliuId     = string.Join(",", wuliuIds);
                var    wuliuNumber = this.dao.GetByAll(wuliuId, wuliuTemplate.DeliveryCompany, "", packageId, DateTime.MinValue, DateTime.MinValue, 0, 0).Datas.FirstOrDefault(obj => obj.SourceType == wuliuTemplate.SourceType);

                //如果已拉取过快递单号,且订单没有变,只是收货人信息变了,则需要更新物流信息
                if (wuliuNumber != null && wuliuId == wuliuNumber.WuliuIds && (wuliuNumber.ReceiverAddress != order.ReceiverAddress || wuliuNumber.ReceiverName != order.ReceiverName || wuliuNumber.ReceiverPhone != wuliuNumber.ReceiverPhone || wuliuNumber.ReceiverMobile != wuliuNumber.ReceiverMobile))
                {
                    wuliuNumber.ReceiverAddress = order.ReceiverAddress;
                    wuliuNumber.ReceiverMobile  = order.ReceiverMobile;
                    wuliuNumber.ReceiverName    = order.ReceiverName;
                    wuliuNumber.ReceiverPhone   = order.ReceiverPhone;
                    ps.UpdateWuliuNumber(shop, wuliuTemplate, order, wuliuNumber);
                    this.dao.Update(wuliuNumber);
                }
                else
                {
                    //这种情况是属于以前合并打印后,某个订单又拆分出来,此时需要增加包裹编号,否则菜鸟会返回相同的快递信息
                    if (wuliuNumber != null && wuliuId != wuliuNumber.WuliuIds)
                    {
                        packageId = (string.IsNullOrWhiteSpace(packageId) || packageId == "0") ? "1" : packageId + "1";
                    }
                    var wu = ps.GetWuliuNumber(shop, shop.PopSellerNumberId, wuliuTemplate, order, wuliuIds, packageId, senderName, senderPhone, senderAddress);
                    if (wuliuNumber != null)
                    {
                        wu.Id = wuliuNumber.Id;
                    }
                    wuliuNumber = wu;
                }
                if (wuliuNumber.Id < 1)
                {
                    this.dao.Save(wuliuNumber);
                }
                return(new DataCollectionResponse <WuliuNumber>(wuliuNumber));
            }
            catch (WebFaultException <ResponseBase> )
            {
                throw;
            }
            catch (Exception ex)
            {
                throw new WebFaultException <ResponseBase>(new ResponseBase(ex.Message), System.Net.HttpStatusCode.OK);
            }
        }
Example #8
0
        public override void UpdateWuliuNumber(Shop shop, WuliuPrintTemplate wuliuTemplate, Order order, WuliuNumber wuliuNumber)
        {
            //需要更新菜鸟面单以打印正确的信息
            var updateReq     = new CainiaoWaybillIiUpdateRequest {
            };
            var updateReqBody = new CainiaoWaybillIiUpdateRequest.WaybillCloudPrintUpdateRequestDomain
            {
                CpCode      = wuliuTemplate.CpCode,
                WaybillCode = wuliuNumber.DeliveryNumber,
                TemplateUrl = wuliuTemplate.StandTemplateUrl,
                Recipient   = TaobaoConvertToUserInfoDtoDomain(order.ReceiverAddress, order.ReceiverName, order.ReceiverPhone, order.ReceiverMobile, order.PopType),
            };

            updateReq.ParamWaybillCloudPrintUpdateRequest_ = updateReqBody;
            var rsp = InvokeOpenApi <CainiaoWaybillIiUpdateResponse>(shop, updateReq);

            wuliuNumber.PrintData = rsp.PrintData;
        }
Example #9
0
        public override List <WuliuPrintTemplate> GetWuliuPrintTemplates(Shop shop, string cpCode)
        {
            List <WuliuPrintTemplate> pts = new List <WuliuPrintTemplate>();
            //第一步先查找所有的标准模板
            SortedDictionary <string, string> param = new SortedDictionary <string, string>();

            param["wp_code"] = cpCode;
            var std = this.Invoke <PddRspCloudprintStdtemplates>(shop, "pdd.cloudprint.stdtemplates.get", param);

            if (std.result == null || std.result.datas == null || std.result.datas.Length == 0)
            {
                return(pts);
            }
            foreach (var v in std.result.datas)
            {
                foreach (var vv in v.standard_templates)
                {
                    if (string.IsNullOrWhiteSpace(vv.standard_template_id) || vv.standard_template_id == "0")
                    {
                        continue;
                    }
                    param.Clear();
                    param["template_id"] = vv.standard_template_id;
                    var cus = this.Invoke <PddRspCloudprintCustomares>(shop, "pdd.cloudprint.customares.get", param);
                    if (cus.result == null || cus.result.datas == null || cus.result.datas.Length == 0)
                    {
                        continue;
                    }
                    foreach (var av in cus.result.datas)
                    {
                        var pt = new WuliuPrintTemplate {
                            CpCode = cpCode, DeliveryCompany = "", IsIsv = false, Name = av.custom_area_name, PrinterName = "", SourceType = WuliuPrintTemplateSourceType.PINDUODUO, StandTemplateId = vv.standard_template_id, StandTemplateUrl = vv.standard_template_url, UserOrIsvTemplateAreaId = av.custom_area_id, UserOrIsvTemplateAreaUrl = av.custom_area_url
                        };
                        pts.Add(pt);
                    }
                }
            }
            return(pts);
        }
Example #10
0
 public abstract void UpdateWuliuNumber(Shop shop, WuliuPrintTemplate wuliuTemplate, Order order, WuliuNumber wuliuNumber);
Example #11
0
 public abstract WuliuNumber GetWuliuNumber(Shop shop, string popSellerNumberId, WuliuPrintTemplate wuliuTemplate, Order order, string[] wuliuIds, string packageId, string senderName, string senderPhone, string senderAddress);
Example #12
0
 public CainiaoPrintDocument(Order[] orders, WuliuNumber[] wuliuNumbers, Dictionary <string, string>[] userDatas, WuliuPrintTemplate wuliuTemplate) : base(orders, wuliuNumbers, userDatas, wuliuTemplate)
 {
 }
Example #13
0
        public override WuliuNumber GetWuliuNumber(Shop shop, string popSellerNumberId, WuliuPrintTemplate wuliuTemplate, Order order, string[] wuliuIds, string packageId, string senderName, string senderPhone, string senderAddress)
        {
            PddReqWaybillGet reqGet = new PddReqWaybillGet();

            reqGet.sender = new PddReqWaybillGetSender {
                name = senderName, mobile = senderPhone, address = ConvertToAddress(senderAddress, PopType.PINGDUODUO)
            };
            reqGet.wp_code               = wuliuTemplate.CpCode;
            reqGet.need_encrypt          = true;
            reqGet.trade_order_info_dtos = new PddReqWaybillGetTradeOrderInfoDto[1] {
                new PddReqWaybillGetTradeOrderInfoDto()
            };
            reqGet.trade_order_info_dtos[0].object_id    = ((long)DateTime.UtcNow.Subtract(UNIX_START_TIME).TotalSeconds).ToString();
            reqGet.trade_order_info_dtos[0].user_id      = popSellerNumberId;
            reqGet.trade_order_info_dtos[0].template_url = wuliuTemplate.StandTemplateUrl;
            reqGet.trade_order_info_dtos[0].recipient    = new PddReqWaybillGetTradeOrderInfoDtoRecipient()
            {
                name = order.ReceiverName, mobile = order.ReceiverMobile, phone = order.ReceiverPhone, address = ConvertToAddress(order.ReceiverAddress, order.PopType)
            };
            reqGet.trade_order_info_dtos[0].package_info = new PddReqWaybillGetTradeOrderInfoDtoPackageInfo {
                id = packageId, items = new PddReqWaybillGetTradeOrderInfoDtoPackageInfoItem[] { new PddReqWaybillGetTradeOrderInfoDtoPackageInfoItem {
                                                                                                     name = "商品", count = 1
                                                                                                 } }
            };
            reqGet.trade_order_info_dtos[0].order_info = new PddReqWaybillGetTradeOrderInfoDtoOrderInfo {
                order_channels_type = "OTHER", trade_order_list = wuliuIds
            };

            SortedDictionary <string, string> param = new SortedDictionary <string, string>();

            param["param_waybill_cloud_print_apply_new_request"] = Newtonsoft.Json.JsonConvert.SerializeObject(reqGet);
            var rspGet = this.Invoke <PddRspWaybillGet>(shop, "pdd.waybill.get", param);
            var wn     = new WuliuNumber {
                CreateTime = DateTime.Now, DeliveryCompany = wuliuTemplate.DeliveryCompany, DeliveryNumber = rspGet.modules[0].waybill_code, PackageId = packageId, PrintData = rspGet.modules[0].print_data, ReceiverAddress = order.ReceiverAddress, ReceiverMobile = order.ReceiverMobile, ReceiverPhone = order.ReceiverPhone, ReceiverName = order.ReceiverName, SourceType = WuliuPrintTemplateSourceType.PINDUODUO, WuliuIds = string.Join(",", wuliuIds)
            };

            return(wn);
        }
Example #14
0
        public override WuliuNumber GetWuliuNumber(Shop shop, string popSellerNumberId, WuliuPrintTemplate wuliuTemplate, Order order, string[] wuliuIds, string packageId, string senderName, string senderPhone, string senderAddress)
        {
            if (string.IsNullOrWhiteSpace(senderName) || string.IsNullOrWhiteSpace(senderPhone))
            {
                throw new Exception("淘宝接口发货人不完整请配置");
            }

            if (string.IsNullOrWhiteSpace(popSellerNumberId))
            {
                throw new Exception("淘宝卖家数据编号为空");
            }

            //生成请求参数
            CainiaoWaybillIiGetRequest req = new CainiaoWaybillIiGetRequest();
            var reqBody = new CainiaoWaybillIiGetRequest.WaybillCloudPrintApplyNewRequestDomain();

            reqBody.CpCode = wuliuTemplate.CpCode;
            reqBody.Sender = new CainiaoWaybillIiGetRequest.UserInfoDtoDomain {
                Phone = "", Name = senderName, Mobile = senderPhone, Address = TaobaoConvertToAddressDtoDomain(senderAddress, PopType.TAOBAO)
            };
            reqBody.NeedEncrypt        = true;
            reqBody.TradeOrderInfoDtos = new List <CainiaoWaybillIiGetRequest.TradeOrderInfoDtoDomain>();//订单信息,一个请求里面可以包含多个订单,我们系统里面,默认一个
            var or = new CainiaoWaybillIiGetRequest.TradeOrderInfoDtoDomain {
                ObjectId = Guid.NewGuid().ToString()
            };

            or.UserId      = long.Parse(popSellerNumberId);
            or.TemplateUrl = wuliuTemplate.StandTemplateUrl;
            or.Recipient   = new CainiaoWaybillIiGetRequest.UserInfoDtoDomain {
                Phone = order.ReceiverPhone, Mobile = order.ReceiverMobile, Name = order.ReceiverName, Address = TaobaoConvertToAddressDtoDomain(order.ReceiverAddress, order.PopType),
            };
            or.OrderInfo = new CainiaoWaybillIiGetRequest.OrderInfoDtoDomain {
                OrderChannelsType = "OTHERS", TradeOrderList = new List <string>(wuliuIds)
            };
            or.PackageInfo = new CainiaoWaybillIiGetRequest.PackageInfoDtoDomain {
                Id = packageId == "" ? null : packageId, Items = new List <CainiaoWaybillIiGetRequest.ItemDomain>()
            };
            or.PackageInfo.Items.AddRange(order.OrderGoodss.Where(obj => (int)obj.State >= (int)OrderState.PAYED && (int)obj.State <= (int)OrderState.SUCCESS).Select(obj => new CainiaoWaybillIiGetRequest.ItemDomain {
                Name = obj.Number + "," + obj.Edtion + "," + obj.Color + "," + obj.Size, Count = obj.Count
            }));
            if (or.PackageInfo.Items.Count < 1)
            {
                or.PackageInfo.Items.Add(new CainiaoWaybillIiGetRequest.ItemDomain {
                    Name = "没有商品或者其它未定义商品", Count = 1
                });
            }
            reqBody.TradeOrderInfoDtos.Add(or);
            req.ParamWaybillCloudPrintApplyNewRequest_ = reqBody;
            var rsp = InvokeOpenApi <CainiaoWaybillIiGetResponse>(shop, req);

            if (rsp.Modules == null || rsp.Modules.Count < 1)
            {
                throw new Exception("菜鸟电子面单未返回数据:" + rsp.ErrMsg);
            }
            var wuliuNumber = new WuliuNumber {
                CreateTime = DateTime.Now
            };

            wuliuNumber.ReceiverAddress = order.ReceiverAddress;
            wuliuNumber.ReceiverMobile  = order.ReceiverMobile;
            wuliuNumber.ReceiverName    = order.ReceiverName;
            wuliuNumber.ReceiverPhone   = order.ReceiverPhone;
            wuliuNumber.DeliveryCompany = wuliuTemplate.DeliveryCompany;
            wuliuNumber.DeliveryNumber  = rsp.Modules[0].WaybillCode;
            wuliuNumber.WuliuIds        = string.Join(",", wuliuIds);
            wuliuNumber.PackageId       = packageId;
            wuliuNumber.PrintData       = rsp.Modules[0].PrintData;
            wuliuNumber.SourceType      = WuliuPrintTemplateSourceType.CAINIAO;
            return(wuliuNumber);
        }