一、环境准备
1、启动Zookeeper
进入bin目录
cd /opt/zookeeper/bin
启动服务
./zkServer.sh start
2、重启nginx
/usr/local/nginx/sbin/nginx -s stop /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
3、启动 FastDFS
启动 FastDFS 的 tracker
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart
启动 FastDFS 的 storage
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart
4、启动dubbo-admin-master服务终端
进到注册中心目录
E:dubbodubbo-admin-masterdubbo-admintarget
启动注册中心
java -jar dubbo-admin-0.0.1-SNAPSHOT.jar
二、服务提供端
1、User实体类
package entity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
import java.util.Date;
import java.io.Serializable;
@Data //get和set都全部生成了
@AllArgsConstructor //生成全参数的构造方法
@NoArgsConstructor //生成空构造方法
@ToString // 生成toString方法
public class User implements Serializable {
private static final long serialVersionUID = -16975262897238315L;
private Integer id;
private String name;
private String portrait;
private String phone;
private String password;
private String regIp;
private Object accountNonExpired;
private Object credentialsNonExpired;
private Object accountNonLocked;
private String status;
private Object isDel;
private Date createTime;
private Date updateTime;
}
2、dao层接口
UserDao:
package mapper;
import entity.User;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Service;
@Service
public interface UserDao {
User login(@Param("phone") String phone,@Param("password") String password);
Integer checkPhone(String phone);
Integer register(@Param("phone") String phone, @Param("password") String password,@Param("nickname") String nickname,@Param("headimg") String headimg);
Integer updateUserInfo(@Param("userid") Integer userid,@Param("headimg") String headimg,@Param("nickname") String nickname);
Integer updatePassword(@Param("userid") Integer userid,@Param("password") String password);
}
UserDao.xml
3、service层接口
UserService :
package com.lagou.user.service;
import entity.User;
import org.apache.ibatis.annotations.Param;
public interface UserService {
User login(String phone,String password);
Integer checkPhone(String phone);
Integer register(String phone,String password,String nickname,String headimg);
Integer updateUserInfo(Integer userid,String headimg,String nickname);
Integer updatePassword(Integer userid,String password);
}
UserServiceImpl
package com.lagou.user.service.impl;
import com.alibaba.dubbo.config.annotation.Service;
import com.lagou.user.service.UserService;
import entity.User;
import mapper.UserDao;
import org.springframework.beans.factory.annotation.Autowired;
@Service//暴露服务
public class UserServiceImpl implements UserService {
@Autowired
private UserDao userDao;
public User login(String phone, String password) {
return userDao.login(phone,password);
}
@Override
public Integer checkPhone(String phone) {
return userDao.checkPhone(phone);
}
@Override
public Integer register(String phone, String password, String nickname, String headimg) {
return userDao.register(phone,password,nickname,headimg);
}
@Override
public Integer updateUserInfo(Integer userid, String headimg, String nickname) {
return userDao.updateUserInfo(userid,headimg,nickname);
}
@Override
public Integer updatePassword(Integer userid, String password) {
return userDao.updatePassword(userid,password);
}
}
三、服务消费者
1、UserService接口
package com.lagou.user.service;
import entity.User;
public interface UserService {
User login(String phone, String password);
Integer checkPhone(String phone);
Integer register(String phone, String password,String nickname,String headimg);
Integer updateUserInfo(Integer userid,String headimg,String nickname);
Integer updatePassword(Integer userid,String password);
}
2、UserController
package com.lagou.user.controller;
import com.alibaba.dubbo.config.annotation.Reference;
import com.lagou.user.service.UserService;
import entity.FileSystem;
import entity.User;
import entity.UserDTO;
import entity.UserVO;
import org.csource.common.MyException;
import org.csource.common.NamevaluePair;
import org.csource.fastdfs.*;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.util.UUID;
@RestController
@RequestMapping("/user")
public class UserController {
@Reference//远程消费
private UserService userService;
@GetMapping("login")
public UserDTO login(String phone,String password,String nickname,String headimg){
UserDTO dto=new UserDTO();
User user=null;
System.out.println(phone);
System.out.println(password);
// 检测手机号是否注册
Integer i = userService.checkPhone(phone);
if(i == 0){
// 未注册,自动注册并登录
userService.register(phone, password,nickname,headimg);
dto.setMessage("手机号尚未注册,系统已帮您自动注册,请牢记密码!");
user = userService.login(phone, password);
}else{
user = userService.login(phone, password);
if(user == null){
dto.setState(300); //300表示失败
dto.setMessage("帐号密码不匹配,登录失败!");
}else{
dto.setState(200); //200表示成功
dto.setMessage("登录成功!");
}
}
dto.setContent(user);
return dto;
}
@PostMapping("/updateUserInfo")
public UserDTO updateUserInfo(@RequestBody UserVO userVO){
System.out.println(userVO.getName());
System.out.println(userVO.getPortrait());
System.out.println(userVO.getUserid());
UserDTO dto=new UserDTO();
Integer integer = userService.updateUserInfo(userVO.getUserid(), userVO.getPortrait(), userVO.getName());
if (integer==1){
dto.setState(200);
dto.setMessage("修改成功");
dto.setSuccess(true);
}else {
dto.setState(300);
dto.setMessage("修改失败");
dto.setSuccess(false);
}
return dto;
}
@PostMapping("/upload")
public UserDTO upload(MultipartHttpServletRequest request) throws IOException, MyException {
UserDTO dto=new UserDTO();
FileSystem fileSystem=new FileSystem();
//从前端页面获取文件对象
MultipartFile file=request.getFile("fname");
// 从文件对象中获取 文件的原始名称
String originalFilename = file.getOriginalFilename();
// 通过字符串截取的方式,从文件原始名中获取文件的后缀 1.jpg
String fileNameSuffix = originalFilename.substring(originalFilename.lastIndexOf(".") + 1);
// 为了避免文件因为同名而覆盖,生成全新的文件名
String newFileName = UUID.randomUUID().toString() + "." + fileNameSuffix;
// 创建web服务器保存文件的目录(预先创建好D:/upload目录,否则系统找不到路径,会抛异常)
File toSaveFile = new File("D:/upload/" + newFileName);
// 将路径转换成文件
file.transferTo(toSaveFile);
// 获取服务器的绝对路径
String newFilePath = toSaveFile.getAbsolutePath();
ClientGlobal.initByProperties("config/ fastdfs-client.properties");
TrackerClient trackerClient = new TrackerClient();
TrackerServer trackerServer = trackerClient.getConnection();
StorageServer storageServer = null;
StorageClient1 client = new StorageClient1(trackerServer, storageServer);
NamevaluePair[] list = new NamevaluePair[1];
list[0] = new NamevaluePair("fileName",originalFilename);
String fileId = client.upload_file1(newFilePath, fileNameSuffix, list);
trackerServer.close();
// 封装fileSystem数据对象
fileSystem.setFileId(fileId);
fileSystem.setFileName(originalFilename);
fileSystem.setFilePath(fileId); //已经上传到FastDFS上,通过fileId来访问图片,所以fileId即为文件路径
dto.setState(200);
dto.setMessage("图片上传成功");
dto.setContent(fileSystem);
return dto;
}
@PostMapping("/updatePassword")
public UserDTO updatePassword(@RequestBody UserVO userVO){
UserDTO dto=new UserDTO();
Integer integer = userService.updatePassword(userVO.getUserid(), userVO.getPassword());
if (integer==1){
dto.setState(200);
dto.setMessage("修改成功");
dto.setSuccess(true);
}else {
dto.setState(300);
dto.setMessage("修改失败");
dto.setSuccess(false);
}
return dto;
}
}



