0
点赞
收藏
分享

微信扫一扫

首页、产品列表和投资排行榜

1. 平台基本信息   26

首页、产品列表和投资排行榜_List

首页、产品列表和投资排行榜_spring_02

准备工具

安装一个mybatis的插件

将这个插件直接拖到idea中,会弹出一个安装的提示框,统一安装即可

首页、产品列表和投资排行榜_spring_03

首页、产品列表和投资排行榜_java_04

出现绿色箭头即代表成功

首页、产品列表和投资排行榜_spring_05

1.1 业务接口

操作micr-api模块 提供业务接口   

1.1.1 定义平台详细信息service接口

接口PlatBaseInfoService

package com.bjpowernode.api.service;

import com.bjpowernode.api.pojo.BaseInfo;

//平台详细信息接口   26
public interface PlatBaseInfoService {
    // 计算利率, 注册人数, 累计成交金额    26
    BaseInfo queryPlatBaseInfo();
}

1.1.2平台详细信息实体类    26

BaseInfo

package com.bjpowernode.api.pojo;

import java.io.Serializable;
import java.math.BigDecimal;

/**
 * 平台详细信息实体类  26
 */
public class BaseInfo implements Serializable {

    /*收益率平均值*/
    private BigDecimal historyAvgRate;

    /*累计成交金额*/
    private BigDecimal sumBidMoney;

    /*注册人数*/
    private Integer registerUsers;

    public BaseInfo() {
    }

    public BaseInfo(BigDecimal historyAvgRate, BigDecimal sumBidMoney, Integer registerUsers) {
        this.historyAvgRate = historyAvgRate;
        this.sumBidMoney = sumBidMoney;
        this.registerUsers = registerUsers;
    }

    public BigDecimal getHistoryAvgRate() {
        return historyAvgRate;
    }

    public void setHistoryAvgRate(BigDecimal historyAvgRate) {
        this.historyAvgRate = historyAvgRate;
    }

    public BigDecimal getSumBidMoney() {
        return sumBidMoney;
    }

    public void setSumBidMoney(BigDecimal sumBidMoney) {
        this.sumBidMoney = sumBidMoney;
    }

    public Integer getRegisterUsers() {
        return registerUsers;
    }

    public void setRegisterUsers(Integer registerUsers) {
        this.registerUsers = registerUsers;
    }
}

1.2 业务接口实现类   26

操作micr-dataservice模块充当提供者

1.2.1 平台详细信息service接口实现类

接口实现类PlatBaseInfoServiceImpl

package com.bjpowernode.dataservice.service;

import com.bjpowernode.api.pojo.BaseInfo;
import com.bjpowernode.api.service.PlatBaseInfoService;
import com.bjpowernode.dataservice.mapper.BidInfoMapper;
import com.bjpowernode.dataservice.mapper.ProductInfoMapper;
import com.bjpowernode.dataservice.mapper.UserMapper;
import org.apache.dubbo.config.annotation.DubboService;

import javax.annotation.Resource;
import java.math.BigDecimal;

/**
 * 平台详细信息service接口实现类   26
 */
@DubboService(interfaceClass = PlatBaseInfoService.class,version = "1.0")
public class PlatBaseInfoServiceImpl implements PlatBaseInfoService {
    //注入Mapper   26
    @Resource
    private UserMapper userMapper;

    @Resource
    private ProductInfoMapper productInfoMapper;

    @Resource
    private BidInfoMapper bidInfoMapper;

    /*平台基本信息*/
    @Override
    public BaseInfo queryPlatBaseInfo() {
        //获取注册人数, 收益率平均值, 累计成交金额
        int registerUser = userMapper.selectCountUser();

        //收益率平均值   27
        BigDecimal avgRate = productInfoMapper.selectAvgRate();

        //累计成交金额   28
        BigDecimal sumBidMoney = bidInfoMapper.selectSumBidMoney();

        BaseInfo baseInfo = new BaseInfo(avgRate,sumBidMoney,registerUser);

        return baseInfo;
    }
}

1.2.2 定义mapper中的接口方法

UserMapper   26

首页、产品列表和投资排行榜_List_06

//统计注册人数   26
int selectCountUser();

ProductInfoMapper

//利率平均值  27
    BigDecimal selectAvgRate();

BidInfoMapper  28

//累计成交金额  28
    BigDecimal selectSumBidMoney();

1.2.3 编写sql    27

利用我们之前安装的插件

首页、产品列表和投资排行榜_spring_07

UserMapper.xml

<!--  注册的用户数   27-->
  <select id="selectCountUser" resultType="java.lang.Integer">
    select count(id) as ct from u_user
  </select>

ProductInfoMapper.xml

<!--    利率平均值  27-->
  <select id="selectAvgRate" resultType="java.math.BigDecimal">
        select round(avg(rate),2) as avgRate  from b_product_info
    </select>

BidInfoMapper.xml

<!--  累计成交金额  28-->
  <select id="selectSumBidMoney" resultType="java.math.BigDecimal">
    select  sum(bid_money) ad sumBidMoney from b_bid_info
  </select>

1.3  控制层消费者controller  28

操作micr-web模块 充当消费者

1.3.1 BaseController 公共controller

BaseController 公共controller,定义这个类就是为了方便,定义一些常量啊,引用啊啥的

package com.bjpowernode.front.controller;

import com.bjpowernode.api.service.PlatBaseInfoService;
import org.apache.dubbo.config.annotation.DubboReference;

/**
 * 公共controller   28
 */
public class BaseController {

    //声明公共的方法,属性的等
    @DubboReference(interfaceClass = PlatBaseInfoService.class,version = "1.0")
    protected PlatBaseInfoService platBaseInfoService;
}

同一的应答结果类RespResult

package com.bjpowernode.front.view;

/**
 * 同一的应答结果。 controller方法的返回值都是它   28
 */
public class RespResult {
    //应答码,自定义的数字
    private int code;
    //code的文字说明,一般做提示给用户看
    private String msg;
    //单个数据
    private Object data;




    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public Object getData() {
        return data;
    }

    public void setData(Object data) {
        this.data = data;
    }
}

1.3.2 消费者PlatInfoController

package com.bjpowernode.front.controller;

import com.bjpowernode.api.pojo.BaseInfo;
import com.bjpowernode.front.view.RespResult;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

//平台基本信息   28
@Api(tags = "平台信息功能")
@RestController
@RequestMapping("/v1")
public class PlatInfoController extends BaseController {

    /*平台基本信息*/
    @ApiOperation(value = "平台三项基本信息",notes = "注册人数,平均的利率,总投资金额")
    @GetMapping("/plat/info")
    public RespResult queryPlatBaseInfo(){
        //调用远程服务,展示平台基本信息
        BaseInfo baseInfo = platBaseInfoService.queryPlatBaseInfo();

        RespResult result = new RespResult();
        result.setCode(1000); //表示成功
        result.setMsg("查询平台信息成功");
        result.setData(baseInfo);

        return result;
    }
}

1.4 测试  28

启动提供者

首页、产品列表和投资排行榜_spring_08

启动消费者

首页、产品列表和投资排行榜_java_09

浏览器输入http://localhost:8000/api/v1/plat/info

成功没问题

首页、产品列表和投资排行榜_java_10

看看接口文档   29

操作micr-web模块

package com.bjpowernode.front.setttings;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;

//配置接口文档 的头 11
@Configuration
public class SwaggerConfigruationSettings {
    //创建Docket对象
    @Bean
    public Docket docket(){
        //1创建Docket对象
        Docket docket = new Docket(DocumentationType.SWAGGER_2);
        //2创建APi信息,接口文档的总体描述
        ApiInfo apiInfo = new ApiInfoBuilder()
                .title("一个金融项目")//标题
                .version("1.0")//版本
                .description("前后端分离的项目,前端Vue,后端Spring Boot+Dubbo分布式项目")//描述
                .build();

        //3.设置使用ApiInfo
        docket  = docket.apiInfo(apiInfo);

        //4. 设置哪些controller参与生成  12
        docket = docket.select()
                .apis(RequestHandlerSelectors.basePackage("com.bjpowernode.front.controller")).build();

        return docket;
    }
}

启动类

首页、产品列表和投资排行榜_java_11

浏览器输入http://localhost:8000/api/doc.html

首页、产品列表和投资排行榜_spring_12

首页、产品列表和投资排行榜_List_13

2. 首页展示各类产品信息   30

按类型分页查询各类产品

首页、产品列表和投资排行榜_List_14


2.1  业务接口30

操作micr-api模块 提供业务接口 

2.1.1 接口ProductService

package com.bjpowernode.api.service;

import com.bjpowernode.api.model.ProductInfo;
import com.bjpowernode.api.pojo.MultiProduct;

import java.util.List;

/**
 * 分页查询产品接口   30
 */
public interface ProductService {

       /*首页的多个产品数据   31*/
    MultiProduct queryIndexPageProducts();


}

2.1.2 分页查询实体类  31

MultiProduct  

package com.bjpowernode.api.pojo;

import com.bjpowernode.api.model.ProductInfo;

import java.io.Serializable;
import java.util.List;

/**
 * 分页查询 多个产品数据 实体类  31
 */
public class MultiProduct implements Serializable {
    private List<ProductInfo> xinShouBao;
    private List<ProductInfo> youXuan;
    private List<ProductInfo> sanBiao;

    public List<ProductInfo> getXinShouBao() {
        return xinShouBao;
    }

    public void setXinShouBao(List<ProductInfo> xinShouBao) {
        this.xinShouBao = xinShouBao;
    }

    public List<ProductInfo> getYouXuan() {
        return youXuan;
    }

    public void setYouXuan(List<ProductInfo> youXuan) {
        this.youXuan = youXuan;
    }

    public List<ProductInfo> getSanBiao() {
        return sanBiao;
    }

    public void setSanBiao(List<ProductInfo> sanBiao) {
        this.sanBiao = sanBiao;
    }
}

接下来给model中的每个实体类都序列化

首页、产品列表和投资排行榜_java_15

2.2   业务接口实现类 30

操作micr-dataservice模块充当提供者

2.2.1 新建一个micr-common模块

首页、产品列表和投资排行榜_List_16

首页、产品列表和投资排行榜_spring_17

在micr-dataservice中引入micr-common坐标

首页、产品列表和投资排行榜_java_18

工具类 CommonUtil

package com.bjpowernode.common.util;

/**
 * 工具类  30
 */
public class CommonUtil {

    //以下两个是处理分页判断的工具类   30
    /*处理pageNo*/
    public static int defaultPageNo(Integer pageNo){
        int pNo = pageNo;
        if( pageNo == null || pageNo < 1 ){
            pNo = 1;
        }
        return pNo;
    }

    /*处理pageSize*/
    public static int defaultPageSize(Integer pageSize){
        int pSize = pageSize;
        if( pageSize == null || pageSize < 1 ){
            pSize = 1;
        }
        return pSize;
    }
}

常量类YLBConstant

package com.bjpowernode.common.constants;

/**
 *
 * 常量类   31
 */
public class YLBConstant {

    /*****产品类型*********/
    //新手宝
    public static final  int PRODUCT_TYPE_XINSHOUBAO =  0;
    //优选
    public static final  int PRODUCT_TYPE_YOUXUAN = 1;
    //散标
    public static final  int PRODUCT_TYPE_SANBIAO = 2;
}

2.2.2  接口实现类ProductServiceImpl

package com.bjpowernode.dataservice.service;

import com.bjpowernode.api.model.ProductInfo;
import com.bjpowernode.api.pojo.MultiProduct;
import com.bjpowernode.api.service.ProductService;
import com.bjpowernode.common.constants.YLBConstant;
import com.bjpowernode.common.util.CommonUtil;
import com.bjpowernode.dataservice.mapper.ProductInfoMapper;
import org.apache.dubbo.config.annotation.DubboService;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;

/**
 * 分页展示产品信息实现类  30
 */
@DubboService(interfaceClass = ProductService.class,version = "1.0")
public class ProductServiceImpl implements ProductService {

    @Resource
    private ProductInfoMapper productInfoMapper;

    /*首页的多个产品数据分页查询   31*/
    @Override
    public MultiProduct queryIndexPageProducts() {
        MultiProduct result = new MultiProduct();

        //查询新手宝
        List<ProductInfo> xinShouBaoList  = productInfoMapper.selectByTypeLimit(
                                      YLBConstant.PRODUCT_TYPE_XINSHOUBAO,0,1);
        //查询优选
        List<ProductInfo> youXuanList = productInfoMapper.selectByTypeLimit(
                                      YLBConstant.PRODUCT_TYPE_YOUXUAN,0,3 );

        //散标
        List<ProductInfo> sanBiaoList = productInfoMapper.selectByTypeLimit(
                                      YLBConstant.PRODUCT_TYPE_SANBIAO,0,3 );

        result.setXinShouBao(xinShouBaoList);
        result.setYouXuan(youXuanList);
        result.setSanBiao(sanBiaoList);
        return result;
    }


}

2.2.3 定义mapper中的接口方法   30

ProductInfoMapper   30

/*按产品类型分页查询   30*/
    List<ProductInfo> selectByTypeLimit(@Param("ptype") Integer ptype,
                                        @Param("offset") Integer offset,
                                        @Param("rows") Integer rows);

2.2.4 编写sql      30

ProductInfoMapper.xml

<!--按产品类型分页查询   30-->
  <select id="selectByTypeLimit" resultMap="BaseResultMap">
    select <include refid="Base_Column_List" />
    from b_product_info
    where product_type = #{ptype}
    order by release_time desc
    limit #{offset},#{rows}
  </select>

2.3   控制层消费者controller    32

 操作micr-web模块 充当消费者

首页、产品列表和投资排行榜_java_19

2.3.1 公共BaseController   32

首页、产品列表和投资排行榜_List_20

//产品服务   32
    @DubboReference(interfaceClass = ProductService.class,version = "1.0")
    protected ProductService productService;

2.3.2 改造响应结果类RespResult   33

操作micr-common模块

枚举类RCode

package com.bjpowernode.common.enums;

/**
 * 枚举 定义相应结果码   33
 */
public enum RCode {

    UNKOWN(0,"请稍候重试"),
    SUCC(1000,"请求成功"),

    ;

    private int code;
    private String text;

    RCode(int c, String t){
        this.code = c;
        this.text = t;
    }

    /**应答码
     * 0:默认
     * 1000-2000是请求参数有误,逻辑的问题
     * 2000-3000是服务器请求错误。
     * 3000-4000是访问dubbo的应答结果
     */

    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public String getText() {
        return text;
    }

    public void setText(String text) {
        this.text = text;
    }
}

首页、产品列表和投资排行榜_List_21

首页、产品列表和投资排行榜_spring_22

响应结果类RespResult    33

package com.bjpowernode.front.view;

import com.bjpowernode.common.enums.RCode;
import com.sun.javaws.jnl.RContentDesc;

import java.sql.ResultSet;
import java.util.List;

/**
 * 同一的应答结果。 controller方法的返回值都是它   28
 */
public class RespResult {
    //应答码,自定义的数字
    private int code;
    //code的文字说明,一般做提示给用户看
    private String msg;
    //单个数据
    private Object data;


    //表示成功的RespResult对象  33
    public static RespResult ok(){
        RespResult result = new RespResult();
        result.setRCode(RCode.SUCC);
        return result;
    }
    //表示失败的RespResult对象   33
    public static RespResult fail(){
        RespResult result = new RespResult();
        result.setRCode(RCode.UNKOWN);
        return result;
    }

    public void setRCode(RCode rcode){
        this.code = rcode.getCode();
        this.msg = rcode.getText();
    }

    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public Object getData() {
        return data;
    }

    public void setData(Object data) {
        this.data = data;
    }
}

2.3.3 消费者ProductController   32

package com.bjpowernode.front.controller;

import com.bjpowernode.api.model.ProductInfo;
import com.bjpowernode.api.pojo.MultiProduct;
import com.bjpowernode.front.view.RespResult;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

/**
 * 产品的分页查询  32
 */
@Api(tags = "理财产品功能")
@RestController
@RequestMapping("/v1")
public class ProductController extends BaseController {


    //首页三类产品列表  32
    @ApiOperation(value = "首页三类产品列表",notes = "一个新手宝,三个优选,三个散标产品")
    @GetMapping("/product/index")
    public RespResult queryProductIndex(){
        RespResult result = RespResult.ok();
        MultiProduct multiProduct = productService.queryIndexPageProducts();
        result.setData(multiProduct);
        return result;

    }

}

2.4 测试   32

使用postman测试

启动提供者

首页、产品列表和投资排行榜_java_23

启动消费者

首页、产品列表和投资排行榜_java_24

输入http://localhost:8000/api/v1/product/index

成功

首页、产品列表和投资排行榜_List_25

3. 展示查看更多产品页面  34

在首页我们点击查看更多产品时

首页、产品列表和投资排行榜_List_26

跳转此页面

首页、产品列表和投资排行榜_List_27

3.1 产品列表---分页查询一类产品   34

首页、产品列表和投资排行榜_spring_28

首页、产品列表和投资排行榜_spring_29

3.1.1 业务接口     30、34

操作micr-api模块 提供业务接口   

接口ProductService

/*根据产品类型,单独查询产品,支持分页   30*/
    List<ProductInfo> queryByTypeLimit(Integer pType,Integer pageNo,Integer pageSize);

    /*某个产品类型的记录总数   34*/
    Integer queryRecordNumsByType(Integer pType);

3.1.2 业务接口实现类   30、34

操作micr-dataservice模块充当提供者

接口实现类ProductServiceImpl

/*按类型单独分页查询产品   30*/
    @Override
    public List<ProductInfo> queryByTypeLimit(Integer pType, Integer pageNo, Integer pageSize) {
        List<ProductInfo> productInfos = new ArrayList<>();
        if( pType == 0 || pType == 1 || pType == 2){
            //这里对分页数据做了一个判断
            pageNo = CommonUtil.defaultPageNo(pageNo);
            pageSize = CommonUtil.defaultPageSize(pageSize);
            int offset  = (pageNo - 1) * pageSize;
            productInfos = productInfoMapper.selectByTypeLimit(pType, offset, pageSize);
        }
        return productInfos;
    }

定义接口mapper中的方法   34

ProductInfoMapper

//某个产品的记录总数   34
    Integer selectCountByType(@Param("ptype") Integer pType);

编写sql   34

ProductInfoMapper.xml

<!--  某个产品的记录总数   34-->
  <select id="selectCountByType" resultType="java.lang.Integer">
    select count(id) ad nums from b_product_info where product_type = #{ptype}
  </select>

3.1.3控制层消费者controller    34

创建一个分页数据类   35

PageInfo

package com.bjpowernode.front.view;

/**
 * 分页数据类   35
 */
public class PageInfo {
    //页号
    private Integer pageNo;
    //每页大小
    private Integer pageSize;
    //总页数
    private Integer totalPage;
    //总记录数
    private Integer totalRecord;

    public PageInfo() {
    }

    public PageInfo(Integer pageNo, Integer pageSize, Integer totalRecord) {
        this.pageNo = pageNo;
        this.pageSize = pageSize;
        this.totalRecord = totalRecord;

        //计算总页数   36
        if( this.totalRecord % this.pageSize  == 0 ){
            this.totalPage = this.totalRecord / this.pageSize;
        } else {
            this.totalPage = this.totalRecord / this.pageSize + 1;
        }
    }

    public Integer getPageNo() {
        return pageNo;
    }

    public void setPageNo(Integer pageNo) {
        this.pageNo = pageNo;
    }

    public Integer getPageSize() {
        return pageSize;
    }

    public void setPageSize(Integer pageSize) {
        this.pageSize = pageSize;
    }

    public Integer getTotalPage() {
        return totalPage;
    }

    public void setTotalPage(Integer totalPage) {
        this.totalPage = totalPage;
    }

    public Integer getTotalRecord() {
        return totalRecord;
    }

    public void setTotalRecord(Integer totalRecord) {
        this.totalRecord = totalRecord;
    }
}

修改应答结果类RespResult

首页、产品列表和投资排行榜_List_30

首页、产品列表和投资排行榜_List_31

package com.bjpowernode.front.view;

import com.bjpowernode.common.enums.RCode;
import com.sun.javaws.jnl.RContentDesc;

import java.sql.ResultSet;
import java.util.List;

/**
 * 同一的应答结果。 controller方法的返回值都是它   28
 */
public class RespResult {
    //应答码,自定义的数字
    private int code;
    //code的文字说明,一般做提示给用户看
    private String msg;
    //单个数据
    private Object data;
    //集合数据   35
    private List list;
    //分页   36
    private PageInfo page;


    //表示成功的RespResult对象  33
    public static RespResult ok(){
        RespResult result = new RespResult();
        result.setRCode(RCode.SUCC);
        return result;
    }
    //表示失败的RespResult对象  33
    public static RespResult fail(){
        RespResult result = new RespResult();
        result.setRCode(RCode.UNKOWN);
        return result;
    }

    public void setRCode(RCode rcode){
        this.code = rcode.getCode();
        this.msg = rcode.getText();
    }

    public List getList() {
        return list;
    }

    public void setList(List list) {
        this.list = list;
    }

    public PageInfo getPage() {
        return page;
    }

    public void setPage(PageInfo page) {
        this.page = page;
    }

    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public Object getData() {
        return data;
    }

    public void setData(Object data) {
        this.data = data;
    }
}

在micr-common模块RCode添加枚举

首页、产品列表和投资排行榜_List_32

消费者 ProductController    34-35

/*按产品类型分页查询   34-35*/
    @GetMapping("/product/list")
    public RespResult queryProductByType(@RequestParam("ptype") Integer pType,
                                         //required = false,defaultValue = "1"代表参数没有时就默认为1
                                         @RequestParam(value = "pageNo",required = false,defaultValue = "1") Integer pageNo,
                                         @RequestParam(value = "pageSize",required = false,defaultValue = "9") Integer pageSize){
        RespResult result = RespResult.fail();
        if(pType != null && (pType == 0 || pType == 1 || pType == 2)){
            pageNo = CommonUtil.defaultPageNo(pageNo);
            pageSize = CommonUtil.defaultPageSize(pageSize);
            //记录总数
            Integer recordNums = productService.queryRecordNumsByType(pType);
            if( recordNums > 0 ){
                //产品集合 ,分页查询到数据
                List<ProductInfo> productInfos = productService.queryByTypeLimit(pType,pageNo,pageSize);

                //构建PageInfo
                PageInfo page = new PageInfo(pageNo,pageSize,recordNums);

                result = RespResult.ok();
                result.setList(productInfos);
                result.setPage(page);
            }
        } else {
            //请求参数有误   36
            result.setRCode(RCode.REQUEST_PRODUCT_TYPE_ERR);
        }
        return result;

    }

3.1.4 测试  38

启动提供者

首页、产品列表和投资排行榜_java_33

启动消费者

首页、产品列表和投资排行榜_spring_34

postman输入 http://localhost:8000/api/v1/product/list

测试成功

首页、产品列表和投资排行榜_List_35

3.2  投资排行榜   39

首页、产品列表和投资排行榜_List_36

首页、产品列表和投资排行榜_java_37

3.2.1 准备redis

我放在了E:\java\tools\Redis\Redis-x64-3.2.100

启动redis

首页、产品列表和投资排行榜_List_38

添加一些数据 add new key

首页、产品列表和投资排行榜_spring_39

首页、产品列表和投资排行榜_List_40

查看

首页、产品列表和投资排行榜_spring_41

在添加一个

首页、产品列表和投资排行榜_spring_42

首页、产品列表和投资排行榜_List_43

3.2.2 添加依赖 和配置redis  39

操作micr-web模块

首页、产品列表和投资排行榜_java_44

pom.xml

<!--		redis起步依赖  39-->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-redis</artifactId>
		</dependency>

配置redis

首页、产品列表和投资排行榜_List_45

application.yml

redis: #配置redis   39
    host: localhost
    port: 6379

3.2.3 公共类BaseController

首页、产品列表和投资排行榜_List_46

BaseController

//声明redis方法    39
    @Resource
    protected StringRedisTemplate stringRedisTemplate;

3.2.4 投资排行榜常量类RedisKey   39

在micr-common模块中

package com.bjpowernode.common.constants;

/**
 * redis  投资排行榜常量类  39
 */
public class RedisKey {

    /*投资排行榜*/
    public static  final String KEY_INVEST_RANK = "INVEST:RANK";
}

3.2.5 存储投资排行榜的数据类RankView   40

package com.bjpowernode.front.view.invest;

/**
 * 存储投资排行榜的数据实体类  40
 */
public class RankView {
    private String phone;
    private Double money;

    public RankView(String phone, Double money) {
        this.phone = phone;
        this.money = money;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public Double getMoney() {
        return money;
    }

    public void setMoney(Double money) {
        this.money = money;
    }
}

3.2.6 处理手机号脱敏  40

操作mict-common模块

CommonUtil

//处理手机号脱敏  40
    public static String tuoMinPhone(String phone){
        String result = "***********";
        if (phone != null && phone.trim().length() == 11) {
            result = phone.substring(0,3) + "******" + phone.substring(9,11);
        }
        return result;
    }

3.2.7 消费者InvestController  39-40

package com.bjpowernode.front.controller;

import com.bjpowernode.common.constants.RedisKey;
import com.bjpowernode.common.util.CommonUtil;
import com.bjpowernode.front.view.RespResult;
import com.bjpowernode.front.view.invest.RankView;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.core.ZSetOperations;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.ArrayList;
import java.util.List;
import java.util.Set;

/**
 * 有关投资功能     39
 */
@Api(tags = "投资理财产品")
@RestController
public class InvestController extends BaseController {

    /*投资排行榜   39*/
    @ApiOperation(value = "投资排行榜",notes = "显式投资金额最高的3位用户信息")
    @GetMapping("/v1/invest/rank")
    public RespResult showInvestRank(){
        //从redis查询数据
        //reverseRangeWithScores(0, 2) 可以反着取数据0,1,2 三个数据,因为redis中数据时从小到大排的,我们需要从大到小排
        Set<ZSetOperations.TypedTuple<String>> sets = stringRedisTemplate
                .boundZSetOps(RedisKey.KEY_INVEST_RANK).reverseRangeWithScores(0, 2);

        List<RankView> rankList = new ArrayList<>();
        //遍历set集合   40
        sets.forEach( tuple ->{
            //tuple.getValue();//手机号
            //tuple.getScore();//投资金额
            rankList.add(new RankView(CommonUtil.tuoMinPhone(tuple.getValue()),tuple.getScore()));
        });

        RespResult  result = RespResult.ok();
        result.setList(rankList);
        return result;
    }
}

测试   40

启动程序

浏览器输入http://localhost:8000/api/v1/invest/rank

首页、产品列表和投资排行榜_java_47

举报

相关推荐

CSS 排行榜

HTTP分数排行榜

OJ解题排行榜

jQuery电影排行榜

分享---GitHub中文排行榜

MySQL实现排行榜功能

0 条评论