品优购项目学习总结

2019-05-16  本文已影响0人  苯基乙胺

品优购项目总结

一、工程搭建问题

     <mirror>  
      <!--This sends everything else to /public -->  
      <id>nexus</id>  
      <mirrorOf>*</mirrorOf>   
      <url>http://maven.aliyun.com/nexus/content/groups/public/</url>  
    </mirror>  
    <mirror>  
      <!--This is used to direct the public snapshots repo in the   
          profile below over to a different nexus group -->  
      <id>nexus-public-snapshots</id>  
      <mirrorOf>public-snapshots</mirrorOf>   
      <url>http://maven.aliyun.com/nexus/content/repositories/snapshots/</url>  
    </mirror> 
  </mirrors>

二、商户修改密码阶段问题

BCryptPasswordEncoder passwordEncoder =new BCryptPasswordEncoder();
boolean matches = passwordEncoder.matches(oldpass, seller.getPassword());

三、AngularJS跨域提交的过程中文乱码问题

    $scope.maps={};
    $scope.findOne=function(ids){
        $scope.maps.sellerId=ids;
        sellerService.findOne($scope.maps).success(
            function(response){
                $scope.entity= response;
            }
        );
    }

四、Solr搜索服务问题

  1. 在第十天、第十一天的内容里面都是在做Solr的搜索,当时在做的过程中,测试的时候发现了一个小bug,就是我点击最后一页,比如是19页,当我在搜索一个内容的时候,没有19页就会出现什么内容也没有。(后面的时候老师有讲这个过程)可以在搜索的时候每次将页面拉回去。
    $scope.searchMap.pageNo=1;

这句话只要是涉及到更改搜索内容的时候都需要放上,不然都会出现没有数据的情况。

  1. 第二个小问题就是在更新solr库的时候,感觉需求分析稍微有点问题,个人感觉,商品上传以后运营商会进行审核,但是在审核的过程当中由于 没有修改后端代码,运用商更新的只是tb_goods表当中的audit_status字段,但是在导入solr库的时候,导入的是tb_item这个表里面的信息,而且看的也是这个表中status字段,所以在存储的过程中,永远不会添加到solr库。
@RequestMapping("/updateStatue")
    public void updateStatue(final Long id, String status){

        goodsService.UpdateMarkStatus(id,status);

        //更新Solr
        if (status.equals("1")) {
             List<TbItem> item = goodsService.findItemListByGoodsIdListAndStatus(id, status);
//          //导入solr
//          itemSearchService.importList(item);

            final String jsonString = JSON.toJSONString(item);
            //发消息 传输对象必须是实现了序列化接口
            jmsTemplate.send(queueSolrDestination, new MessageCreator() {
                @Override
                public Message createMessage(Session session) throws JMSException {
                    return session.createTextMessage(jsonString);
                }
            });
            System.out.println("消息发送完毕------");


            //创建页面
//          itemPageService.genItemHtml(id);
            jmsTemplate.send(topicGoodsDestination, new MessageCreator() {
                @Override
                public Message createMessage(Session session) throws JMSException {

                    return session.createTextMessage(id+"");
                }
            });
        }else{
            //下架以后再创建
//          itemPageService.genItemHtml(id);
            jmsTemplate.send(topicGoodsDestination, new MessageCreator() {
                @Override
                public Message createMessage(Session session) throws JMSException {

                    return session.createTextMessage(id+"");
                }
            });
        }

五、Redis缓存问题

private void saveToRedisOne(TbTypeTemplate typeTemplate){
        List brandList = JSON.parseArray(typeTemplate.getBrandIds(), Map.class);
        List<Map> specList = findSpecList(typeTemplate.getId());
        redisTemplate.boundHashOps("brandList").put(typeTemplate.getId(), brandList);
        redisTemplate.boundHashOps("specList").put(typeTemplate.getId(), specList);
        System.out.println("品牌..规格...列表放入缓存");
    }

六、支付

  1. 首先去 https://docs.open.alipay.com/ 开发者中心注册这些自己就可以完成。之后进入开发中心 ----> 网页移动应用 。
    在这里插入图片描述
  2. 然后选择一下支付接入,自己接入一下。这个地方其实可以随便写一下,因为app上线的话这个就很重要,我们的目的是学习,所以这个地方自己有兴趣看看,加密那块的设置。然后就是打开沙箱测试。 https://openhome.alipay.com/platform/appDaily.htm?tab=info
    在这里插入图片描述
  3. 这里有几个参数一会要用到的,appid 支付宝网关 支付宝公钥。公钥怎么设置这里不做过多的赘述,鼠标放上去之后下载一个支付宝提供的加密软件,生成 复制 粘贴就ok了。说明一下这里的支付宝网关,这里一定记得用这个沙盒测试地址。正式的地址由于没有上线,appid不合法的。需要用安卓手机下载一个沙盒测试app网站里面就有。 https://docs.open.alipay.com/291/106103/ 密钥的开发文档
  4. 生成好密钥以后,保存一下自己的密钥和支付宝公钥。然后就开始写代码测试。如果要学习可以看看 https://docs.open.alipay.com/270/106291/ 开发文档,我用的是电脑扫码付款这个,有兴趣自己下载一下Demo看看。
  5. 引入阿里巴巴的sdk依赖。
        <dependency>
            <groupId>com.alipay.sdk</groupId>
            <artifactId>alipay-sdk-java</artifactId>
            <version>3.4.49.ALL</version>
        </dependency>
  1. 创建一个类,用来完成支付。这里也需要的JSON格式的数据,但是每个都得写太麻烦了,直接就封装到Map里面然后JSON.toJSONString转换了一下字符串就可以了。这里记得要看着开发文档去做啊。我把一些文件都写到了properties文件里面了,详细可以参考一下视频里面的做法。
@Service
public class ZhiFuBaoPayServiceImpl implements ZhiFuBaoPayService {

    @Value("${app_id}")
    private String appid;

    @Value("${merchant_private_key}")
    private String merchant_private_key;

    @Value("${alipay_public_key}")
    private String alipay_public_key;

    @Value("${notify_url}")
    private String notify_url;

    @Value("${return_url}")
    private String return_url;

    @Value("${sign_type}")
    private String sign_type;

    @Value("${charset}")
    private String charset;

    @Value("${gatewayUrl}")
    private String gatewayUrl;

    @Autowired
    private HttpServletRequest req;
    @Autowired
    private HttpServletResponse response;

    @Override
    public String createNative(String out_trade_no, String total_fee,String subject) {
        AlipayClient alipayClient=new DefaultAlipayClient(gatewayUrl,appid,merchant_private_key,"json",charset,alipay_public_key,sign_type);
        AlipayTradePagePayRequest request = new AlipayTradePagePayRequest();
        request.setReturnUrl(return_url);
        request.setNotifyUrl(notify_url);

        //添加商品信息
        Map map=new HashMap();
        map.put("out_trade_no",out_trade_no);
        map.put("total_amount",total_fee);
        map.put("subject",subject);
        map.put("body","你好,测试商品");
        map.put("product_code","FAST_INSTANT_TRADE_PAY");

        String parm=JSON.toJSONString(map);

        request.setBizContent(parm);
//        System.out.println("===这是parm:"+parm);

        String result="";
        try {
            result = alipayClient.pageExecute(request).getBody();


        } catch (AlipayApiException e) {
            e.printStackTrace();
        }
        return result;
    }
}

  1. 创建Controller来完成支付。
@RequestMapping("/pay")
public class ZhiFuBaoController {

    @Reference
    private ZhiFuBaoPayService zhiFuBaoPayService;

    @Reference
    private OrderService orderService;


    @RequestMapping("/ZhiFuBao")
    public void createNativeZhiFuBao(HttpServletResponse response) throws IOException {

        String name = SecurityContextHolder.getContext().getAuthentication().getName();
        TbPayLog tbPayLog = orderService.searchPayLogFromRedis(name);
        String result="";
        if (tbPayLog!=null){
            result = zhiFuBaoPayService.createNative(tbPayLog.getOutTradeNo(),tbPayLog.getTotalFee()+"","黑蚂蚁商城家的商品");
            response.setContentType("text/html;charset=utf-8");
            response.getWriter().write(result);//直接将完整的表单html输出到页面
            response.getWriter().flush();
            response.getWriter().close();
        }else{
            return;
        }
    }


    @RequestMapping("/success")
    public void success(HttpServletRequest request, HttpServletResponse response){
        Map<String,String> parem=new HashMap();
        Map map=request.getParameterMap();
        for (Iterator iterator=map.keySet().iterator();iterator.hasNext();){
            String name= (String) iterator.next();
            String[] values= (String[]) map.get(name);
            String vlaue="";
            for (int i = 0; i < values.length; i++) {
                vlaue = (i == values.length - 1) ? vlaue + values[i]
                        : vlaue + values[i] + ",";
            }
            parem.put(name,vlaue);
        }

        String outId=parem.get("out_trade_no");
        String trade_no=parem.get("trade_no");
        orderService.updateOrderStatus(outId,trade_no);
        System.out.println("支付宝流水号:"+trade_no);
        try {
            response.sendRedirect("../paysuccess.html");
        } catch (IOException e) {
            e.printStackTrace();
        }


    }


}

  1. 我这边测试的时候就把return_url 改成了这个Controller的success.do这个地址。更改数据库字段在跳转成功界面。

总结

整个品优购项目的完成,熟悉了很多的技术。如SpringSecurity、Dubbox,Solr等。在学习过程,遇到了很多的问题,也翻阅了很多的资料。整个品优购项目中,让我体会到一个大型项目的“魅力”。整个项目中,让我感觉到最麻烦最难的一点就是单点登录,每次看单点登录的跳转,看的头大。但是分布式应用有不可避免....自己的技术还有待提高,如果文章当中有问题,或者有什么好的意见,大家可以指出来,一起学习。

上一篇下一篇

猜你喜欢

热点阅读