本文我在前面的基础上来实现各个业务模块。结构图如下
@RequestMapping("/user")
public interface UserService {
// 用户登录
@RequestMapping(value = "/login", method = RequestMethod.GET)
public User login(@RequestParam("userName") String userName
, @RequestParam("password") String password);
}
@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);
}
}
}
@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;
}
}
注意相关的注解的添加
/**
* User的启动类
* @author dengp
*
*/
@EnableEurekaClient
@SpringBootApplication
@MapperScan("com.bobo.mapper")
public class Start {
public static void main(String[] args) {
SpringApplication.run(Start.class, args);
}
}
启动服务,在Eureka注册中心中可以发现对应的服务
在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;
}
}
访问服务
模拟登陆操作成功~
pojo同样序列化,service接口提供查询所有商品的方法,具体如下
@RequestMapping("/product")
public interface ProductService {
@RequestMapping(value="findAll",method=RequestMethod.GET)
public List<Product> findAll();
}
@Service
public class ProductServiceImpl {
@Autowired
private ProductMapper productMapper;
public List<Product> findAll(){
ProductExample example = new ProductExample();
return productMapper.selectByExample(example);
}
}
/**
* 商品服务 提供者
* @author dengp
*
*/
@RestController
public class ProductController implements ProductService{
@Autowired
private ProductServiceImpl service;
@Override
public List<Product> findAll() {
return service.findAll();
}
}
/**
* provider的启动类
* @author dengp
*
*/
@EnableEurekaClient
@SpringBootApplication
@MapperScan("com.bobo.mapper")
public class Start {
public static void main(String[] args) {
SpringApplication.run(Start.class, args);
}
}
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);
}
@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);
}
}
/**
* 订单服务 提供者
* @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();
}
}
注意添加注解
/**
* provider的启动类
* @author dengp
*
*/
@EnableEurekaClient
@SpringBootApplication
@MapperScan("com.bobo.mapper")
public class Start {
public static void main(String[] args) {
SpringApplication.run(Start.class, args);
}
}
@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);
}
@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);
}
}
@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);
}
}
@SpringBootApplication
@EnableEurekaClient
@MapperScan("com.bobo.mapper")
public class Start {
public static void main(String[] args) {
SpringApplication.run(Start.class, args);
}
}
/**
* 创建订单
*
* @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的服务。
添加 Order-Service、Feign 的坐标
添加fegin的主键
@EnableFeignClients
@SpringBootApplication
@EnableEurekaClient
@MapperScan("com.bobo.mapper")
public class StartTrade {
public static void main(String[] args) {
SpringApplication.run(StartTrade.class, args);
}
}
@FeignClient("e-book-order")
public interface ProviderOrderService extends OrderService{
}
//根据订单 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);
修改 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);
}
}
/**
* 订单服务 提供者
* @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);
}
}
@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);
}
添加这段逻辑,完成更新订单中的支付编号信息