自学实前后端践项目3 Spring Cloud微服务 6

六.服务消费者整合user

先添加两个前端:

链接:https://pan.baidu.com/s/1phn9ejGF_21Gp-WGJ9qsCA 
提取码:ul6d

 在User下创建封装VO

package com.redhat.entity;

import lombok.Data;

import java.util.List;

@Data
public class UserVO {
    private int code;
    private String msg;
    private int count;
    private List<User> data;
}

同时client 需要调用也要复制到它的文件夹下

 接下来修改handler创建对照menu和user的不同之处

package com.redhat.controller;

import com.redhat.entity.User;
import com.redhat.entity.UserVO;
import com.redhat.feign.UserFeign;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import java.util.Date;
import java.util.List;

@Controller
@RequestMapping("/user")
public class UserHandler {
    @Autowired
    private UserFeign userFeign;

    @GetMapping("/findAll")
    @ResponseBody
    public UserVO findAll(@RequestParam("page")int page, @RequestParam("limit")int limit){
       int index = (page-1)*limit;
       UserVO userVO = new UserVO();
       userVO.setCode(0);
       userVO.setMsg("");
       userVO.setCount(userFeign.count());
       userVO.setData(userFeign.findAll(index,limit));
        return userVO;
    }

    @GetMapping("/redirect/{location}")
    public String redirect(@PathVariable("location") String location){
        return location;
    }

    @GetMapping("/count")
    public int count(){
        return userFeign.count();
    }

    @PostMapping("/save")
    public String save(User user){
        user.setRegisterdate(new Date());
        userFeign.save(user);
        return "redirect:/user/redirect/user_manage";
    }

    @GetMapping("/deleteById/{id}")
    public String deleteById(@PathVariable("id") long id) {
        userFeign.deleteById(id);
        return "redirect:/user/redirect/user_manage";
    }
}

最后启动服务开始测试

调用页面通了开始测试添加用户

 提价成功

 删除

 easy

七。服务消费者整合account(用于admin和普通用户调用的权限访问转换)

1.添加一个模块account

配置文件从user复制

pom相关依赖和user的依赖相同

<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        <version>2.0.2.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>1.3.1</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.27</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-config</artifactId>
        <version>2.0.2.RELEASE</version>
    </dependency>
</dependencies>

bootstrap.yml

spring:
  application:
    name: account
  profiles:
    active: dev
  cloud:
    config:
      uri: http://localhost:8762
      fail-fast: true

端口配置

server:
  port: 8050
spring:
  application:
    name: account
  datasource:
    name: orderingsystem
    url: jdbc:mysql://localhost:3306/orderingsystem?useUnicode=true&characterEncoding=UTF-8
    username: root
    password: 123456
  eureka:
    client:
      service-url:
        defaultZone: http://localhost:8761/eureka/
    instance:
      prefer-ip-address: true
mybatis:
  mapper-locations: classpath:/mapping/*.xml
  type-aliases-package: com.redhat.entity

创建添加admin和user的封装类

User

package com.redhat.entity;

import lombok.Data;

import java.util.Date;

@Data
public class User {
    private long id;
    private  String username;
    private String password;
    private  String nickname;
    private  String gender;
    private  String telephone;
    private Date registerdate;
    private String address;
}

Admin

package com.redhat.entity;

import lombok.Data;

@Data
public class Admin {
    private long id;
    private String username;
    private String password;

}

添加account的启动项

package com.redhat;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@MapperScan("com.redhat.repository")
public class AccountApplication {
    public static void main(String[] args) {
        SpringApplication.run(AccountApplication.class,args);
    }

}

accountHandler

package com.redhat.controller;

import com.redhat.repository.AdminRepository;
import com.redhat.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/account")
public class AccountHandler {
    @Autowired
    private UserRepository userRepository;

    @Autowired
    private AdminRepository adminRepository;

    @GetMapping("/login/{username}/{password}/{type}")
    public Object login(@PathVariable("username") String username,
                        @PathVariable("password") String password,
                        @PathVariable("type") String type)
    {
        Object object =null;
        switch (type){
            case "user":
                object = userRepository.login(username,password);
                break;
            case "admin":
                object = adminRepository.login(username,password);
                break;
        }
        return object;
    }
}
接口分别编写

UserRepository

package com.redhat.repository;

import com.redhat.entity.User;

public interface UserRepository {
    public User login(String username,String password);
}

AdminRepository

package com.redhat.repository;

import com.redhat.entity.Admin;

public interface AdminRepository {
    public Admin login(String username,String password);
}
数据sql查询语句分别编写xml

User

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.redhat.repository.UserRepository">

    <select id="login" resultType="com.redhat.entity.User">
      select * from t_user where username = #{param1} and password = #{param2}
   </select>

</mapper>

Admin

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.redhat.repository.AdminRepository">

    <select id="login" resultType="com.redhat.entity.Admin">
      select * from t_admin where username = #{param1} and password = #{param2}
   </select>

</mapper>

 所有工作准备就绪测试接口

重启配置中心和配置中心启动新建的启动测试

admin

 user

 准备前端页面进行登录操作

复制前端login页面

链接:https://pan.baidu.com/s/1-6U3wkiQZm4RzJ9iSfkHtQ 
提取码:hyhb

client里面把admin类复制到entity里面准备调用

在client里面编写accountHanlder

判断登录模式已经登录权限分配

package com.redhat.controller;

import com.redhat.entity.Admin;
import com.redhat.entity.User;
import com.redhat.feign.AccountFeign;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import javax.servlet.http.HttpSession;
import java.util.LinkedHashMap;

@Controller
@RequestMapping("/account")
public class AccountHandler {
    @Autowired
    private AccountFeign accountFeign;
    @PostMapping("/login")
    public String login(@RequestParam("username") String username,
                         @RequestParam("password") String password,
                         @RequestParam("type") String type,
                        HttpSession session
                         ){
        Object object = accountFeign.login(username, password, type);
        LinkedHashMap<String,Object> hashMap =(LinkedHashMap)object;
        String result = null;
        if(object==null){
            result="login";
        }else {
            switch (type){
                case "user":
                    User user =new  User();
                    String idStr =hashMap.get("id")+"";
                    long id =Long.parseLong(idStr);
                    String nickname=(String)hashMap.get("nickname");
                    user.setId(id);
                    user.setNickname(nickname);
                    session.setAttribute("user",user);
                    result = "index";
                    break;
                case "admin":
                    Admin admin =(Admin) object;
                    session.setAttribute("admin",admin);
                    result = "";
                    break;
            }
        }
        return result;
    }
}

index里面欢迎回来增加登录名称判断nickname
<div style="margin-left: 460px; width: 200px;">
    欢迎回来!<a href="/account/redirect/order" th:text="${session.user.nickname}"></a><a href="/account/logout">&nbsp;&nbsp;&nbsp;<button class="layui-btn layui-btn-warm layui-btn-radius">退出</button></a>
</div>
测试user

登录成功跳转到index

其他order的配置文件以及端口设置和上面account的操作一样

 order添加依赖复制menu里面的

<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        <version>2.0.2.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>1.3.1</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.27</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-config</artifactId>
        <version>2.0.2.RELEASE</version>
    </dependency>

</dependencies>

 把index里面

<script type="text/html" id="barDemo">

</script>

里面的点击事件替换成如下订购按钮

<script type="text/html" id="barDemo">
    <a class="layui-btn layui-btn-xs" lay-event="order">订购</a>
</script>

下面继续完成订单生成相关查询和页面调用

编写相关order的封装

这里需要先把需要用到实体类接口已经需要引用的文件夹复制到对应的文件(已经存在的复制就好)

package com.redhat.entity;

import lombok.Data;

import java.util.Date;

@Data
public class Order {
    private long id;
    private User user;
    private Menu menu;
    private Admin admin;
    private Date date;
    private int state;
}

OrderHandler里面编写查找和保存相关的方法

package com.redhat.controller;

import com.redhat.entity.Order;
import com.redhat.repository.OrderRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;

import java.util.Date;
import java.util.List;


@RestController
@RequestMapping("/order")
public class OrderHandler {
//    @Value("${server.port}")
//    private String port;
//    @GetMapping("/index")
//    public String index(){
//        return "order的端口"+this.port;
//    }
    @Autowired
    private OrderRepository orderRepository;

    @PostMapping("/save")
    public void save(@RequestBody Order order){
        order.setDate(new Date());
        orderRepository.save(order);
    }

    @GetMapping("/findAll/{index}/{limit}")
    public List<Order> findAll(@PathVariable("index") int index,@PathVariable("limit") int limit){
        return orderRepository.findAll(index,limit);
    }
} 


mmapping里面的OrderRepository数据库查询语句
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.redhat.repository.OrderRepository">

   <resultMap id="orderMap" type="com.redhat.entity.Order">
      <id column="id" property="id"></id>
      <result column="date" property="date"></result>
      <result column="state" property="state"></result>
      <association property="menu" select="com.redhat.repository.MenuRepository" column="mid"></association>
   </resultMap>
   <insert id="save" parameterType="com.redhat.entity.Order">
      insert into t_order(uid,mid,date,state) values(#{user.id},#{menu.id},#{date},0)
   </insert>
   
   <select id="findAll" resultType="com.redhat.entity.Order">
      select id,mid,date,state  from t_order limit #{param1},#{param2}
   </select>

</mapper>

client里面添加OrderHandler

package com.redhat.controller;

import com.redhat.entity.Menu;
import com.redhat.entity.Order;
import com.redhat.entity.User;
import com.redhat.feign.OrderFeign;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.http.HttpSession;

@Controller
@RequestMapping("/order")
public class OrderHandler {
    @Autowired
    private OrderFeign orderFeign;
    @GetMapping("/save/{mid}")
    public String save(@PathVariable("mid")int mid, HttpSession session){
        User user = (User)session.getAttribute("user");
        Order order =new Order();
        order.setUser(user);
        Menu menu = new Menu();
        menu.setId(mid);
        order.setMenu(menu);
        order.setState(0);
        orderFeign.save(order);
        return "index";
    }
}

client接口

package com.redhat.feign;

import com.redhat.entity.Order;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;

@FeignClient(value = "order")
public interface OrderFeign {

    @PostMapping("/order/save")
    public void save(@RequestBody Order order);
}
用postman进行保存测试

 测试显示

 测试点击第一个菜进行保存的号码

 数据库数据

 测试查找

 另外退出登录返回到登录界面在client   AccountHanlder下增加即可实现

@GetMapping("/logout")
public String logout(HttpSession session){
    session.invalidate();
    return "redirect:/login.html";


版权声明:本文为weixin_40518706原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。