六.服务消费者整合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"> <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";