前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >微服务综合案例-05-业务逻辑实现

微服务综合案例-05-业务逻辑实现

作者头像
用户4919348
发布2019-06-19 19:04:50
4420
发布2019-06-19 19:04:50
举报
文章被收录于专栏:波波烤鸭波波烤鸭

  本文我在前面的基础上来实现各个业务模块。结构图如下

在这里插入图片描述
在这里插入图片描述

一、模拟登陆功能

1.e-book-user-service 处理

1.1 pojo序列化

在这里插入图片描述
在这里插入图片描述

1.2 service接口处理

代码语言:javascript
复制
@RequestMapping("/user")
public interface UserService {

	// 用户登录
	@RequestMapping(value = "/login", method = RequestMethod.GET)
	public User login(@RequestParam("userName") String userName
			, @RequestParam("password") String password);
}
在这里插入图片描述
在这里插入图片描述

2.e-book-user-provider处理

2.1 创建service实现

代码语言:javascript
复制
@Service
public class UserServiceImpl {

	@Autowired
	private UserMapper userMapper;
	
	public User login(String userName,String password){
		UserExample example = new UserExample();
		example.createCriteria()
				.andUserNameEqualTo(userName)
				.andPasswordEqualTo(password);
		List<User> list = userMapper.selectByExample(example);
		if(list == null || list.size() != 1){
			return null;
		}else{
			return list.get(0);
		}
	}
}

2.2 创建controller

代码语言:javascript
复制
@RestController
public class UserController implements UserService{
	
	@Autowired
	private UserServiceImpl service;

	@Override
	public User login(String userName, String password) {
		User user = service.login(userName, password);
		return user;
	}

}

2.3 修改启动类

  注意相关的注解的添加

代码语言:javascript
复制
/**
 * User的启动类
 * @author dengp
 *
 */
@EnableEurekaClient
@SpringBootApplication
@MapperScan("com.bobo.mapper")
public class Start {

    public static void main(String[] args) {
        SpringApplication.run(Start.class, args);
    }
}

2.4 启动服务

  启动服务,在Eureka注册中心中可以发现对应的服务

在这里插入图片描述
在这里插入图片描述

3.e-book-consumer处理

  在controller中简单模拟登陆操作,然后启动consumer服务,测试是否能够访问

代码语言:javascript
复制
@RestController
public class ConsumerController {

	@Autowired
	private ConsumerOrderService orderService;
	
	@Autowired
	private ConsumerProductService productService;
	
	@Autowired
	private ConsumerTradeService tradeService;
	
	@Autowired
	private ConsumerUserService userService;
	
	/**
	* 模拟内容: 登录 查看产品 下订单
	* 1.测试登录 账号 admin admin
	* 2.查看所有产品列表
	* 3.选第一款产品,下订单
	* 4.实现订单交易支付
	* 5.查看所有的订单信息
	*/
	@RequestMapping(value="/create",method=RequestMethod.GET)
	public List<Orders> createOrder(){
		// 测试登录
		this.login();
		return null;
	}
	
	/**
	* 用户登录
	*/
	private Integer login(){
		String username =  "admin";
		String password = "admin";
		User user = this.userService.login(username, password);
		if(user != null && user.getUserName().length() >= 0){
			System.out.println("登录成功");
			return user.getId();
		}
		System.out.println("登录失败");
		return null;
	}
}

访问服务

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

模拟登陆操作成功~

二、查询商品信息

1.e-book-product-service 处理

  pojo同样序列化,service接口提供查询所有商品的方法,具体如下

代码语言:javascript
复制
@RequestMapping("/product")
public interface ProductService {

	@RequestMapping(value="findAll",method=RequestMethod.GET)
	public List<Product> findAll();
}

2.e-book-product-provider处理

2.1 service实现

代码语言:javascript
复制
@Service
public class ProductServiceImpl {
	
	@Autowired
	private ProductMapper productMapper;
	
	public List<Product> findAll(){
		ProductExample example = new ProductExample();
		return productMapper.selectByExample(example);
	}

}

2.2 controller处理

代码语言:javascript
复制
/**
 * 商品服务  提供者
 * @author dengp
 *
 */
@RestController
public class ProductController implements ProductService{
	
	@Autowired
	private ProductServiceImpl service;

	@Override
	public List<Product> findAll() {
		
		return service.findAll();
	}

}

2.3启动类

代码语言:javascript
复制
/**
 * provider的启动类
 * @author dengp
 *
 */
@EnableEurekaClient
@SpringBootApplication
@MapperScan("com.bobo.mapper")
public class Start {

    public static void main(String[] args) {
        SpringApplication.run(Start.class, args);
    }
}

三、创建订单

1.e-book-order-service

  pojo同样需要序列化,service的接口功能如下:

代码语言:javascript
复制
@RequestMapping("/order")
public interface OrderService {
	
	@GetMapping("/findAll")
	public List<Orders> findAll();
	
	@PostMapping(value="/addOrder",consumes=MediaType.APPLICATION_JSON_VALUE)
	public Integer addOrder(@RequestBody Orders order);

}

2.e-book-order-provider

2.1 业务功能实现

代码语言:javascript
复制
@Service
public class OrderServiceImpl {
	
	@Autowired
	private OrdersMapper ordersMapper;
	
	public List<Orders> findAll(){
		OrdersExample example = new OrdersExample();
		return ordersMapper.selectByExample(example );
	}
	
	public Integer addOrder(Orders order){
		return ordersMapper.insertSelective(order);
	}

}

2.2 controller

代码语言:javascript
复制
/**
 * 订单服务  提供者
 * @author dengp
 *
 */
@RestController
public class OrderController implements OrderService{
	
	@Autowired
	private OrderServiceImpl service;

	@Override
	public List<Orders> findAll() {
		// TODO Auto-generated method stub
		return service.findAll();
	}

	@Override
	public Integer addOrder(@RequestBody Orders order) {
		// TODO Auto-generated method stub
		service.addOrder(order);
		return  order.getId();
	}

}

2.3 启动类

  注意添加注解

代码语言:javascript
复制
/**
 * provider的启动类
 * @author dengp
 *
 */
@EnableEurekaClient
@SpringBootApplication
@MapperScan("com.bobo.mapper")
public class Start {

    public static void main(String[] args) {
        SpringApplication.run(Start.class, args);
    }
}

四、完成交易

1.e-book-trade-service

代码语言:javascript
复制
@RequestMapping("/trade")
public interface TradeService {
	
	// 查询所有交易信息
	@RequestMapping(value = "/findAll", method = RequestMethod.GET)
	public List<Trade> findAll();
	
	@RequestMapping(value="/create" ,method=RequestMethod.POST
			,consumes=MediaType.APPLICATION_JSON_VALUE)
	public void addTrade(@RequestBody Trade trade);

}

2.e-book-trade-provider

2.1 业务实现

代码语言:javascript
复制
@Service
public class TradeServiceImpl {

	@Autowired
	private TradeMapper tradeMapper;

	/**
	 * 查询所有交易信息
	 */
	public List<Trade> findTradeAll() {
		TradeExample example = new TradeExample();
		return this.tradeMapper.selectByExample(example);
	}

	/**
	 * 添加交易信息
	 */
	public void addTrade(@RequestBody Trade trade) {
		this.tradeMapper.insert(trade);
	}
}

2.2 controller

代码语言:javascript
复制
@RestController
public class TradeController implements TradeService{
	
	@Autowired
	private TradeServiceImpl service;

	@Override
	public List<Trade> findAll() {
		// TODO Auto-generated method stub
		return service.findTradeAll();
	}

	@Override
	public void addTrade(Trade trade) {
		// 添加支付信息
		service.addTrade(trade);
	}

}

2.3 启动类

代码语言:javascript
复制
@SpringBootApplication
@EnableEurekaClient
@MapperScan("com.bobo.mapper")
public class Start {

    public static void main(String[] args) {
        SpringApplication.run(Start.class, args);
    }
}

3.consumer服务

代码语言:javascript
复制
/**
 * 创建订单
 * 
 * @author dengp
 *
 */
@RestController
public class ConsumerController {

	@Autowired
	private ConsumerOrderService orderService;

	@Autowired
	private ConsumerProductService productService;

	@Autowired
	private ConsumerTradeService tradeService;

	@Autowired
	private ConsumerUserService userService;

	/**
	 * 模拟内容: 登录 查看产品 下订单
	 *  1.测试登录 账号 admin admin 
	 *  2.查看所有产品列表 
	 *  3.选第一款产品,下订单
	 *  4.实现订单交易支付
	 *  5.查看所有的订单信息
	 */
	@RequestMapping(value = "/create", method = RequestMethod.GET)
	public List<Orders> createOrder() {
		// 测试登录 账号: 用户名:admin 密码:admin
		Integer userid = this.login();
		System.out.println(userid);
		// 查询所有商品
		List<Product> products = this.productService.findAll();
		/*
		 * for (Product product : products) {
		 * System.out.println(product.getName()); }
		 */
		// 选第一款商品 下订单
		Product product = products.get(0);
		// 创建订单
		Orders orders = new Orders();
		// 订单ID
		Integer orderId = 1011;
		orders.setId(orderId);
		orders.setUserId(userid);
		orders.setProductId(product.getId());
		orders.setPrice(product.getPrice());
		// '删除标志,默认0不删除,1删除
		orders.setDeleted((byte) 0);
		// 调用Order服务持久化订单
		Integer oId = this.orderService.addOrder(orders);
		System.out.println(oId);

		// 订单的交易支付
		Trade trade = new Trade();
		trade.setUserId(userid);
		trade.setOrderId(oId);
		trade.setPrice(orders.getPrice());
		trade.setPayStatus((byte) 4);// '1 未付款 2 付款中 3 付款失败 4 付款完成'
		trade.setPayType((byte) 4); // '支付类型:1-支付宝支付,2-网银在线,3-银联,4-微信支付',
		trade.setGatewayPayNum(new Date().getTime() + "");// '网关支付流水号',
		trade.setGatewayPayPrice(orders.getPrice());
		trade.setGatewayPayTime(new Date());
		trade.setDeleted((byte) 0);
		this.tradeService.addTrade(trade);

		// 查询所有订单并返回
		List<Orders> list = this.orderService.findAll();

		return list;
	}

	/**
	 * 用户登录
	 */
	private Integer login() {
		String username = "admin";
		String password = "admin";
		User user = this.userService.login(username, password);
		if (user != null && user.getUserName().length() >= 0) {
			System.out.println("登录成功");
			return user.getId();
		}
		System.out.println("登录失败");
		return null;
	}
}

分别启动服务测试

在这里插入图片描述
在这里插入图片描述

启动consumer服务,范围测试

创建订单成功

在这里插入图片描述
在这里插入图片描述

创建支付信息成功

在这里插入图片描述
在这里插入图片描述

五、更新订单信息

  接下来我们需要完成更新订单中的支付信息的操作,也就是e-book-trade-provider需要调用e-book-order-provider的服务。

1.修改 Trade 的 pom 文件

  添加 Order-Service、Feign 的坐标

在这里插入图片描述
在这里插入图片描述

2.修改启动类

  添加fegin的主键

代码语言:javascript
复制
@EnableFeignClients
@SpringBootApplication
@EnableEurekaClient
@MapperScan("com.bobo.mapper")
public class StartTrade {

    public static void main(String[] args) {
        SpringApplication.run(StartTrade.class, args);
    }
}

3.在 Trade-Provider 服务中添加接口

代码语言:javascript
复制
@FeignClient("e-book-order")
public interface ProviderOrderService extends OrderService{

}

4.修改 Order-Service 添加方法

代码语言:javascript
复制
	//根据订单 ID 查询订单
	@RequestMapping(value="/findOrderById",method=RequestMethod.GET)
	public Orders findOrderById(@RequestParam("orderid") Integer orderid);
	
	//更新订单
	@RequestMapping(value="/updateOrder",method=RequestMethod.POST
			,consumes=MediaType.APPLICATION_JSON_VALUE)
	public void updateOrder(@RequestBody Orders order);

5.修改OrderServiceImpl

  修改 Order-Provider 的 OrderServiceImpl 完成对数据库的操作

代码语言:javascript
复制
@Service
public class OrderServiceImpl {

	@Autowired
	private OrdersMapper ordersMapper;

	public List<Orders> findAll() {
		OrdersExample example = new OrdersExample();
		return ordersMapper.selectByExample(example);
	}

	public Integer addOrder(Orders order) {
		return ordersMapper.insert(order);
	}

	/**
	 * 根据 ID 查询订单
	 */
	public Orders findOrderById(Integer id) {
		return this.ordersMapper.selectByPrimaryKey(id);
	}

	/**
	 * 更新订单
	 */
	public void updateOrder(Orders order) {
		this.ordersMapper.updateByPrimaryKey(order);
	}

}

6.OrderController

代码语言:javascript
复制
/**
 * 订单服务  提供者
 * @author dengp
 *
 */
@RestController
public class OrderController implements OrderService{
	
	@Autowired
	private OrderServiceImpl service;

	@Override
	public List<Orders> findAll() {
		// TODO Auto-generated method stub
		return service.findAll();
	}

	@Override
	public Integer addOrder(@RequestBody Orders order) {
		// TODO Auto-generated method stub
		service.addOrder(order);
		return  order.getId();
	}
	
	@Override
	public Orders findOrderById(Integer orderid) {
		return this.service.findOrderById(orderid);
	}
	@Override
	public void updateOrder(@RequestBody Orders order) {
		this.service.updateOrder(order);
	}
}

6.在 Trade-provider中完成业务实现

代码语言:javascript
复制
	@Override
	public void addTrade(@RequestBody Trade trade) {
		// 添加支付信息
		service.addTrade(trade);
		//根据 ID 查询订单
		Orders order = this.providerOrderService.findOrderById(trade.getOrderId());
		System.out.println(order.getId()+" ----  "+trade.getId());
		order.setTradeId(trade.getId());
		//更新订单
		this.providerOrderService.updateOrder(order);
	}

添加这段逻辑,完成更新订单中的支付编号信息

在这里插入图片描述
在这里插入图片描述
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019年06月18日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、模拟登陆功能
    • 1.e-book-user-service 处理
      • 1.1 pojo序列化
      • 1.2 service接口处理
    • 2.e-book-user-provider处理
      • 2.1 创建service实现
      • 2.2 创建controller
      • 2.3 修改启动类
      • 2.4 启动服务
    • 3.e-book-consumer处理
    • 二、查询商品信息
      • 1.e-book-product-service 处理
        • 2.e-book-product-provider处理
          • 2.1 service实现
          • 2.2 controller处理
          • 2.3启动类
      • 三、创建订单
        • 1.e-book-order-service
          • 2.e-book-order-provider
            • 2.1 业务功能实现
            • 2.2 controller
            • 2.3 启动类
        • 四、完成交易
          • 1.e-book-trade-service
            • 2.e-book-trade-provider
              • 2.1 业务实现
              • 2.2 controller
              • 2.3 启动类
            • 3.consumer服务
            • 五、更新订单信息
              • 1.修改 Trade 的 pom 文件
                • 2.修改启动类
                • 3.在 Trade-Provider 服务中添加接口
                • 4.修改 Order-Service 添加方法
                • 5.修改OrderServiceImpl
                • 6.OrderController
                • 6.在 Trade-provider中完成业务实现
                相关产品与服务
                文件存储
                文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档