微服务综合案例-05-业务逻辑实现
2019-06-18 21:49
190 查看
本文我在前面的基础上来实现各个业务模块。结构图如下
一、模拟登陆功能
1.e-book-user-service 处理
1.1 pojo序列化
1.2 service接口处理
@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实现
@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
@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 修改启动类
注意相关的注解的添加
/** * 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服务,测试是否能够访问
@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接口提供查询所有商品的方法,具体如下
@RequestMapping("/product") public interface ProductService { @RequestMapping(value="findAll",method=RequestMethod.GET) public List<Product> findAll(); }
2.e-book-product-provider处理
2.1 service实现
@Service public class ProductServiceImpl { @Autowired private ProductMapper productMapper; public List<Product> findAll(){ ProductExample example = new ProductExample(); return productMapper.selectByExample(example); } }
2.2 controller处理
/** * 商品服务 提供者 * @author dengp * */ @RestController public class ProductController implements ProductService{ @Autowired private ProductServiceImpl service; @Override public List<Product> findAll() { return service.findAll(); } }
2.3启动类
/** * 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的接口功能如下:
@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 业务功能实现
@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
/** * 订单服务 提供者 * @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 启动类
注意添加注解
/** * 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
@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 业务实现
@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
@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 启动类
@SpringBootApplication @EnableEurekaClient @MapperScan("com.bobo.mapper") public class Start { public static void main(String[] args) { SpringApplication.run(Start.class, args); } }
3.consumer服务
/** * 创建订单 * * @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的主键
@EnableFeignClients @SpringBootApplication @EnableEurekaClient @MapperScan("com.bobo.mapper") public class StartTrade { public static void main(String[] args) { SpringApplication.run(StartTrade.class, args); } }
3.在 Trade-Provider 服务中添加接口
@FeignClient("e-book-order") public interface ProviderOrderService extends OrderService{ }
4.修改 Order-Service 添加方法
//根据订单 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 完成对数据库的操作
@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
/** * 订单服务 提供者 * @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中完成业务实现
@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); }
添加这段逻辑,完成更新订单中的支付编号信息
相关文章推荐
- 提高IT运维综合管理能力,实现业务服务管理
- 提高IT运维综合管理能力实现业务服务管理
- 提高IT运维综合管理能力,实现业务服务管理 推荐
- 【干货】利用MVC5+EF6搭建博客系统(一)EF Code frist、实现泛型数据仓储以及业务逻辑
- Hibernate学习笔记 -- day12 使用JPA实现综合案例
- [spring cloud学习4]综合使用spring cloud技术实现微服务
- Service层实现业务逻辑
- 在 Laravel 5 中使用 Repository 模式实现业务逻辑和数据访问的分离
- 基于Android的小巫新闻客户端开发--主界面业务逻辑实现
- 单击事件的处理方式及注册窗体的创建之(二)登录业务逻辑的实现
- 【转载】用 WCF 实现多层服务架构平台——业务适配器。
- 《Spark商业案例与性能调优实战100课》第19课:商业案例之NBA篮球运动员大数据分析核心业务逻辑代码实战
- J2EE综合--业务逻辑和数据库访问决策
- 面向服务体系架构的业务规划和建模方法系列之四--实践案例介绍“汽车贷款 推荐
- 领域驱动设计案例之实现业务3
- 解析大型.NET ERP系统 业务逻辑设计与实现
- Silverlight实战示例4(兼集合属性的妙用)--业务逻辑与服务层
- 综合使用spring cloud技术实现微服务应用
- 综合使用spring cloud技术实现微服务应用
- 微服务的业务逻辑到底放在哪?[转]---业务问题