`
bukebuhao
  • 浏览: 87973 次
  • 性别: Icon_minigender_1
  • 来自: 绍兴
社区版块
存档分类
最新评论

渠道订单设计

 
阅读更多
  • 目的
      我们是提供分销服务的,一般的供销平台提供了代销和经销两种线上经营模式

代销:分销商无需拿货就可以直接销售并赚取差价,由供应商一件代发

经销:分销商直接从供应商处批量采购并囤货销售,享受更多折扣

1)     代销基本业务流程

2)     经销基本业务流程

 
而我们的系统是提供代销服务。就是分销商在其他的平台例如淘宝销售商品,生成订单反馈给我们系统,我们系统需要把外部订单转换成我们自己的订单,
生成和他对应的供应商订单,然后进入我们的系统的订单流程,最终由我们的仓储平台发货。因此,我们需要获取不同渠道的订单, 转换成我们系统的的订单。
 
  • 条件
      1. 要获取不同渠道的订单,就要涉及到对方的开放平台(API) 。因此,首先要解决如何对接开放平台?对接开放平台一般都需要用户授权,授权流程遵循oauth2.0协议。
      例如,如果您的应用和淘宝开放平台对接后,需要获取用户隐私信息(如:商品、订单、收藏夹等),为保证用户数据的安全性与隐私性,您的应用需要取得用户的授权。在这种情况下,您的应用需要引导用户完成“使用淘宝帐号登录并授权”的流程。 淘宝的Taobao ID(淘帐号)产品,采用国际通用的OAuth2.0标准协议,作为用户身份验证与授   权协议,支持网站、手机客户端、桌面客户端。
      淘宝的授权流程需要您有自己的web服务器,能够保存应用本身的密钥以及状态,可以通过https直接访问淘宝的授权服务器。
授权过程分为两个步骤:
  
 
上面的淘宝的授权流程就遵循oauth2.0协议。
 
    2. 授权成功后,还需要通过调用api获取所属信息。api调用需要遵循对方的要求。例如淘宝的api调用方式

TOP 作为淘宝数据插槽,只要用户按照TOP的规范拼装一个正确的URL,通过HTTP请求到TOP,就能够拿到用户自己需要的数据。调用原理示意图如下(注: 淘宝 API <接口>采用 REST 风格,只需将所需参数拼装成http请求,即可调用。故支持 http 协议请求的程序语言,均可调用淘宝API,例如php、C#、asp、java、delphi 等。)

  3. 获取了数据,还需要把数据转换成我们的自己的数据。

总的大体流程如下:
 

 
  • 实现
     针对上面的分析,我们需要实现oauth授权,api调用,csv导入和导出。
 
      1.oauth授权
              我们仅仅是oauth的web的client实现,虽然目前有很多流行的框架.例如oauth官方推荐的
     调查了spring social,实现的方式很好,代理拦截+template模块化获取资源, 只是目前还不支持top,虽然已支持facebook, twitter,github等,如果自己实现工作量有点大。
   spring security,还需要引入spring security这个框架,虽然先前我使用过,有点杀鸡焉用牛刀的感觉
   Restlet是一个rest框架,和spring的实现有重叠。
 
  最终选择了apache的实现,参照demo很容易实现,授权的流程。
 @RequestMapping ("/authorize/{providerId}" )
    public ModelAndView authorize( @PathVariable
    String providerId, Model model) throws OAuthSystemException, IOException {
        try {

            OauthTemplate oauth = getTemplate(providerId);
            OauthProviderConfig appOauth = oauth.getProviderConfig();

            OAuthClientRequest request = OAuthClientRequest.authorizationLocation(appOauth.getAuthzEndpoint()).setClientId(appOauth.getClientId()).setRedirectURI(appOauth.getRedirectUri())
                    .setResponseType(ResponseType.CODE .toString()).setScope(appOauth.getScope()).setState(appOauth.getState()).buildQueryMessage();

            return new ModelAndView(new RedirectView(request.getLocationUri()));
        } catch (Exception e) {
            model.addAttribute( "errorMsg" , "授权失败" );
            logger.info( "authorize" , e);
            return new ModelAndView("redirect:/oauthClient/list.htm");
        }
    }

    @RequestMapping (value = "/token/{providerId}" , method = RequestMethod.GET)
    public ModelAndView handleRedirect( @PathVariable
    String providerId, Model model, HttpServletRequest req) throws OAuthSystemException {

        try {

            OauthTemplate oauth = getTemplate(providerId);
            OauthProviderConfig appOauth = oauth.getProviderConfig();

            // Create the response wrapper
            OAuthAuthzResponse oar = null ;
            oar = OAuthAuthzResponse. oauthCodeAuthzResponse(req);

            // Get Authorization Code
            String code = oar.getCode();

            OAuthClientRequest request = OAuthClientRequest.tokenLocation(appOauth.getTokenEndpoint()).setClientId(appOauth.getClientId()).setClientSecret(appOauth.getClientSecret())
                    .setRedirectURI(appOauth.getRedirectUri()).setCode(code).setGrantType(GrantType.AUTHORIZATION_CODE).buildBodyMessage();

            OAuthClient client = new OAuthClient(SSL_CLIENT);

            OAuthJSONAccessTokenResponse oauthResponse = client.accessToken(request, OAuthJSONAccessTokenResponse.class);

            Boolean oauthResult = channelService .saveInfo(oauth.convertResponse(oauthResponse));
            model.addAttribute( "successFlag" , oauthResult);

        } catch (OAuthProblemException e) {
            logger.info( "oauth" , e);
            model.addAttribute( "errorMsg" , "授权失败" );
        }

        return new ModelAndView("redirect:/oauthClient/list.htm");

    }
 
 
  2. 授权完成了,需要api调用,选择了top官方推荐的sdk模式,针对以后可能不同的渠道,例如还需要支持paipai,采用了模板模式
  获取模板如
  private OauthTemplate getTemplate(String appId) throws OAuthSystemException {
        OauthTemplate oauth = null ;
        for (OauthTemplate template : oauthTemplates ) {
            if (template.isProvider(appId)) {
                oauth = template;
                break ;
            }
        }
        if (oauth == null) {
            throw new OAuthSystemException("无效的用户请求" );
        }
        return oauth;
    }
 
 
 
 针对获取不同的资源,采取了命令模式,同时可以实现session token的拦截验证,目前,由于授权的限制,仅仅简单判定一下是否报错就可了。
 
 
public Map<String, Object> doAuthInfo(Integer cid, AuthInfo authInfo) throws OAuthSystemException {
        ChannelInfo info = channelService .getInfo(cid);
        if (info == null) {
            throw new OAuthSystemException("无效的请求 ");
        }
        Map<String, Object> resultMap = new HashMap<String, Object>();
        resultMap.put( "flag" , Boolean.TRUE);
        try {
            OauthTemplate oauth = getTemplate(info.getProviderId());

            authInfo.doExecute(info, oauth, resultMap);

        } catch (OAuthProblemException e) {
            logger.info( "授权错误" , e);
            resultMap.put( "flag" , Boolean.FALSE);
            resultMap.put( "redirect" , MessageFormat.format( "authorize/{0}.htm" , info.getProviderId()));
        } catch (Exception e) {
            logger.info( "请求资源错误" , e);
            resultMap.put( "flag" , Boolean.FALSE);
        }
        return resultMap;
    }
 
 3.csv实现
   采用第三方opencsv实现的。
  
 
  • 结论
     
    总的原则,还是面向对象的思想,解耦。
  • 大小: 20.4 KB
分享到:
评论

相关推荐

    电商业务中台OMS全渠道订单管理系统

    一站式的中台系统包括订单管理系统OMS/ERP、库存WMS统一管理系统和SAP财务管理系统等,实现快速部署,并帮助企业后续自主进行开发迭代,来帮助企业实现数字化转型,并有多个经典案例。系统包括:通用业务中台、强大...

    订单管理系统:多种维度、多种渠道订单管理,自动化处理,及退换货处理。.zip

    它由Sun Microsystems(现在是Oracle Corporation)的James Gosling等人在1995年推出,被设计为一种简单、健壮、可移植、多线程、动态的语言。Java的主要特点和优势包括以下几个方面: 跨平台性(Write Once, Run ...

    聚合支付对账原型设计 RP (Axure RP 9打开)

    聚合支付对账Axure原型设计,原型已完成99%的交互动作和详细逻辑描述。 原型包含: 1、通道对账单模版配置 2、通道对账单下载任务 3、通道对账单导入 4、对账批次管理 5、存疑订单管理 6、差错订单管理 7、差错订单...

    最新小程序亿家旺生鲜云订单零售系统的设计与实现+ssm.zip

    最新小程序“亿家旺生鲜云订单零售系统的设计与实现Ssm.zip”是一款面向生鲜零售业的综合管理平台,它整合了微信生态和SSM(Spring, Spring MVC, MyBatis)框架的技术优势。利用微信平台的便捷性与广泛覆盖优势,...

    电商系统管理后台设计原型RP文件完整版

    完整的电商系统后台设计原型,从系统登录到商品分类管理、商品管理、订单管理、运营管理、售后管理等设计电商系统架构

    基于Python的数据分析-课程设计(含22页的设计报告)

    基于Python的数据分析-课程设计(含22页的设计报告) 1 需求分析 1 1.1可行性分析 1 1.2功能需求分析 2 2 数据源的获取、读取与数据预处理 3 2.1读取数据 3 2.2 加载数据文件 3 2.3 提取数据 4 2.3.1根据业务需要...

    毕业设计 商城购物系统 源码_v1.0.zip

    是一套企业级开源电商系统,采用全新架构开发, 使用多种前沿创新技术,完美打通各渠道,实现全终端数据同步,集合PC+微信+手机版无缝整合于一体,打造一个真正的生态化电商平台。 页面构架:依托多年行业经验90%...

    基于Hive和SparkSQL实现的京东数据仓库订单客户分析项目(视频+代码+文档+工具)

    02-以驴妈妈、一号店及京东订单分析技术架构设计 03-分析订单表、订单商品表及用户表的结构 04-修改配置Hive MetaStore对应Database中的相关字段字符编码为utf8 05-ODS层创建订单相关表及加载数据 06-DIM层维度...

    IBM助联邦百货渠道多样化

    新的解决方案由 Federated Systems Group 和 IBM Global Services for WebSphere 共同设计完成,通过实施该方案,联邦百货实现了 24x7 的全天候实时库存监控,从而做到了跨多个渠道支持快速、准确的订单履行,并有效...

    基于Java SSM 古玩在线商城的设计与实现

    古玩在线商城的设计与实现是把用户的线下购买古玩需求与信息技术结合来实现的,通过系统来实现古玩的浏览、购买、下单、管理、发货、以及订单的查询统计等功能。 古玩在线商城的设计与实现在用户上分为了前台用户和...

    基于Springboot的家具商城销售网站的设计与实现

    基于Java Spring徐州家具商城网站的设计与实现是把用户的线下购买家具的需求与信息技术结合来实现的,通过系统来实现家具的浏览、购买、下单、管理、发货、以及订单的查询统计等功能。 基于Java Spring徐州家具商城...

    详细设计说明书

    实体渠道:提供渠道发展用户分析、业务受理分析、渠道构成分析、资源分析、考核分析,监控和评估渠道的运营状况和管理能力。 如果采用面向对象的设计模式,则可以使用用例图等来说明这些设计类之间如何交互,实现本...

    微信支付小程序毕业设计项目,可自行阅读readme.md对代码进行修改

    微信支付小程序毕业设计项目 项目概述: 本项目是一个微信支付小程序,可用于毕业...UI设计:根据需求分析结果,设计小程序界面,包括首页、商品列表页、购物车页、支付页和订单页等。 后端开发:搭建云服务器,编写

    电子商城设计方案.doc

    三、包涵的范围:集成了新闻发布管理、网站内容管理、商品发布管理、渠道管理、 订单管理、网上支付、会员管理、留言薄管理、广告发布管理、自助友情链接、论坛等 多套系统 四、网站风格:既已定位为小商品销售门户...

    JAVA毕业设计之springboot050星之语明星周边产品销售网站的设计与实现完整源码.zip

    这是一个关于Spring Boot的毕业设计项目,名为“星之语...总之,这个项目是一个功能完善、设计合理的明星周边产品销售网站,可以帮助用户方便地购买自己喜欢的明星周边产品,同时也为商家提供了一个有效的销售渠道。

    毕业设计-基于python的企业物流管理系统(django)毕业设计与实现(源码+数据库+演示视频).zip

    制订订单,包含渠道和货物信息,有临时和正式状态,员工创建临时订单,经理审核通过后变为正式订单,正式订单将生成存储记录并可查询 仓储管理:采购、销售后生成入库或出库记录(时间、货物信息等)并可查询 运输...

    计算机专业毕业设计答辩PPT模板.pptx

    网络销售企业C 渠道销售企业A 店面零售企业B 投入少 无囤积 全日制全球制 2023/5/24 计算机专业毕业设计答辩PPT模板全文共31页,当前为第7页。 1 选 题 的 意 义 2 系 统 分 析 2023/5/24 计算机专业毕业设计答辩...

    网上服装店设计_毕业论文设计(java)

    本系统为人们在网上购买服装提供方便,也给用户提供更为广阔的销售渠道。网上服装店系统从功能上划分成客户端和管理端两个子系统。客户端的功能包括:注册用户、注销用户、用户登录、用户浏览、服装查询。管理端的...

Global site tag (gtag.js) - Google Analytics