微服务(七)—— 收货地址模块(backend-shipping)

上一篇: 微服务(六)—— 注册中心模块(backend-server).

一、创建项目

首先创建一个SpringBoot项目,具体创建过程和 微服务(三)—— 用户模块(backend-user).一样。

二、项目结构

1.目录结构

在这里插入图片描述
和用户模块、产品模块一样,传统的Controller层、Service层、Dao层,数据库表对应的实体类是通过 MyBatis插件 逆向生成,详见微服务(三)—— MyBatis逆向工程模块(backend-generator).,所以Dao层是Mapper接口,和 resources/mappers/ShippingMapper.xml 生成一一映射的关系。

2.具体类介绍

(1) 首先看给前端提供接口的类ShippingController

package com.aiun.shipping.controller;

/**
 * 收货地址
 * @author lenovo
 */
@Api(tags = "收获地址相关接口")
@RestController
@RequestMapping("/shipping/")
public class ShippingController {
   
    @Autowired
    private IShippingService iShippingService;
    @Autowired
    private RedisTemplate<String, String> redisTemplate;

    /**
     * 增加收货地址
     * @param request 请求
     * @param shipping 地址信息
     * @return 返回结果
     */
    @PostMapping("add")
    @ApiOperation(value = "增加收货地址")
    public ServerResponse add(HttpServletRequest request, Shipping shipping) {
   
        ServerResponse hasLogin = loginHasExpired(request);
        if (hasLogin.isSuccess()) {
   
            User user = (User) hasLogin.getData();
            return iShippingService.add(user.getId(), shipping);
        }
        return hasLogin;
    }

    /**
     * 删除收货地址
     * @param request 请求
     * @param shippingId 地址 id
     * @return 返回结果
     */
    @DeleteMapping("del")
    @ApiOperation(value = "删除收货地址")
    public ServerResponse del(HttpServletRequest request, Integer shippingId) {
   
        ServerResponse hasLogin = loginHasExpired(request);
        if (hasLogin.isSuccess()) {
   
            User user = (User) hasLogin.getData();
            return iShippingService.del(user.getId(), shippingId);
        }
        return hasLogin;
    }

    /**
     * 更新收货地址
     * @param request 请求
     * @param shipping 地址信息
     * @return 返回结果
     */
    @PostMapping("update")
    @ApiOperation(value = "更新收货地址")
    public ServerResponse update(HttpServletRequest request, Shipping shipping) {
   
        ServerResponse hasLogin = loginHasExpired(request);
        if (hasLogin.isSuccess()) {
   
            User user = (User) hasLogin.getData();
            return iShippingService.update(user.getId(), shipping);
        }
        return hasLogin;
    }

    /**
     * 查询收货地址
     * @param request 请求
     * @param shippingId 地址 id
     * @return 地址信息
     */
    @PostMapping("select")
    @ApiOperation(value = "查询收货地址")
    public ServerResponse<Shipping> select(HttpServletRequest request, Integer shippingId) {
   
        ServerResponse hasLogin = loginHasExpired(request);
        if (hasLogin.isSuccess()) {
   
            User user = (User) hasLogin.getData();
            return iShippingService.select(user.getId(), shippingId);
        }
        return hasLogin;
    }

    /**
     * 查询某用户的所有收货地址,并分页
     * @param pageNum 当前页
     * @param pageSize 页大小
     * @param request 请求
     * @return
     */
    @PostMapping("list")
    @ApiOperation(value = "查询某用户的所有收货地址,并分页")
    public ServerResponse<PageInfo> list(@RequestParam(value = "pageNum", defaultValue = "1") int pageNum,
                                         @RequestParam(value = "pageSize", defaultValue = "10") int pageSize,
                                         HttpServletRequest request) {
   
        ServerResponse hasLogin = loginHasExpired(request);
        if (hasLogin.isSuccess()) {
   
            User user = (User) hasLogin.getData();
            return iShippingService.list(user.getId(), pageNum, pageSize);
        }
        return hasLogin;
    }

    /**
     * 对外提供的服务
     * 根据ID查询Shipping数据
     * @param id 产品 id
     * @return 产品信息类
     */
    @GetMapping("{id}")
    public Shipping findById(@PathVariable(name="id") Integer id) {
   
        return iShippingService.findById(id);
    }

    /**
     * 判断用户登录是否过期
     * @param request 请求
     * @return 结果
     */
    private ServerResponse<User> loginHasExpired(HttpServletRequest request) {
   
        String key = request.getHeader(UserConst.AUTHORITY);
        ValueOperations<String, String> valueOperations = redisTemplate.opsForValue();
        String value = valueOperations.get(key);
        if (StringUtils.isEmpty(value)) {
   
            return ServerResponse.createByErrorMessage(ResponseCode.NEED_LOGIN.getCode(), ResponseCode.NEED_LOGIN.getDesc());
        }
        User user = JsonUtils.jsonStr2Object(value, User.class);
        if (!key.equals(user.getUsername())) {
   
            return ServerResponse.createByErrorMessage(ResponseCode.NEED_LOGIN.getCode(), ResponseCode.NEED_LOGIN.getDesc());
        }
        valueOperations.set(key, value, 1, TimeUnit.HOURS);
        return ServerResponse.createBySuccess(user);
    }
}

这个类里向前端提供后端数据的增、删、改、查接口,初次之外还用Redis做了一个用户登录状态的验证
(2)看Controller的调用层Service的实现类ShippingServiceImpl

package com.aiun.shipping.service.impl;
/**
 * @author lenovo
 */
@Service("iShippingService")
public class ShippingServiceImpl implements IShippingService {
   
    @Autowired
    private ShippingMapper shippingMapper;

    @Override
    public ServerResponse add(Integer userId, Shipping shipping) {
   
        shipping.setUserId(userId);
        int rowCount = shippingMapper.insert(shipping);
        if (rowCount > 0) {
   
            Map resultMap 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值