public DeliveryPrintDocument(Order[] orders, WuliuNumber[] wuliuNumbers, Dictionary <string, string>[] userDatas, WuliuPrintTemplate wuliuTemplate) { this.WuliuNumbers = wuliuNumbers; this.Orders = orders; this.UserDatas = userDatas; this.CloudPrintTemplate = wuliuTemplate; }
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))); }
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))); }
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); }
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)); }
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; }
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); } }
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; }
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); }
public abstract void UpdateWuliuNumber(Shop shop, WuliuPrintTemplate wuliuTemplate, Order order, WuliuNumber wuliuNumber);
public abstract WuliuNumber GetWuliuNumber(Shop shop, string popSellerNumberId, WuliuPrintTemplate wuliuTemplate, Order order, string[] wuliuIds, string packageId, string senderName, string senderPhone, string senderAddress);
public CainiaoPrintDocument(Order[] orders, WuliuNumber[] wuliuNumbers, Dictionary <string, string>[] userDatas, WuliuPrintTemplate wuliuTemplate) : base(orders, wuliuNumbers, userDatas, wuliuTemplate) { }
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); }
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); }