HINOTOR 2 years ago
parent a31e7c2cf5
commit bc7f640363

@ -60,6 +60,11 @@
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.5</version>
</dependency>
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.4.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>

@ -0,0 +1,13 @@
package com.example.recommend.common;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface AdminPermission {
String produceType() default "text/html";
}

@ -0,0 +1,50 @@
package com.example.recommend.common;
import com.example.recommend.controller.admin.AdminController;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.lang.reflect.Method;
@Aspect
@Configuration
public class ControllerAspect {
@Autowired
private HttpServletRequest httpServletRequest;
@Autowired
private HttpServletResponse httpServletResponse;
@Around("execution(* com.example.recommend.controller.admin.*.*(..)) && @annotation(org.springframework.web.bind.annotation.RequestMapping)")
public Object adminControllerBeforeValidation(ProceedingJoinPoint joinPoint) throws Throwable {
Method method = ((MethodSignature) joinPoint.getSignature()).getMethod();
AdminPermission adminPermission = method.getAnnotation(AdminPermission.class);
if (adminPermission == null) {
//公共方法
Object resultObject = joinPoint.proceed();
return resultObject;
}
//判断当前管理员是否登录
String email = (String) httpServletRequest.getSession().getAttribute(AdminController.CURRENT_ADMIN_SESSION);
if (email == null) {
if (adminPermission.produceType().equals("text/html")) {
httpServletResponse.sendRedirect("/admin/admin/loginpage");
return null;
} else {
CommonError commonError = new CommonError(EmBusinessError.ADMIN_SHOULD_LOGIN);
return CommonRes.create(commonError, "fail");
}
} else {
Object resultObject = joinPoint.proceed();
return resultObject;
}
}
}

@ -11,7 +11,11 @@ public enum EmBusinessError {
//用户服务相关的错误类型20000开头
REGISTER_DUP_FAIL(20001, "用户已存在"),
LOGIN_FAIL(20002, "手机号或密码错误");
LOGIN_FAIL(20002, "手机号或密码错误"),
//admin相关错误
ADMIN_SHOULD_LOGIN(30001, "管理员需要先登录"),
;
private Integer errCode;

@ -4,9 +4,10 @@ import com.example.recommend.common.BusinessException;
import com.example.recommend.common.CommonRes;
import com.example.recommend.common.CommonUtil;
import com.example.recommend.common.EmBusinessError;
import com.example.recommend.model.UserModel;
import com.example.recommend.request.LoginReq;
import com.example.recommend.request.RegisterReq;
import com.example.recommend.service.UserService;
import com.example.recommend.model.UserModel;
import jakarta.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
@ -17,12 +18,18 @@ import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import java.io.UnsupportedEncodingException;
import java.security.NoSuchAlgorithmException;
@Controller("/user")
@RequestMapping("/user")
public class UserController {
public static final String CURRENT_USER_SESSION = "currentUserSession";
@Autowired
private HttpServletRequest httpServletRequest;
@Autowired
private UserService userService;
@ -69,4 +76,31 @@ public class UserController {
return CommonRes.create(resUserModel);
}
@RequestMapping("/login")
@ResponseBody
public CommonRes login(@RequestBody @Valid LoginReq loginReq, BindingResult bindingResult) throws BusinessException, UnsupportedEncodingException, NoSuchAlgorithmException {
if (bindingResult.hasErrors()) {
throw new BusinessException(EmBusinessError.PARAMETER_VALIDATION_ERROR, CommonUtil.processErrorString(bindingResult));
}
UserModel userModel = userService.login(loginReq.getTelephone(), loginReq.getPassword());
httpServletRequest.getSession().setAttribute(CURRENT_USER_SESSION, userModel);
return CommonRes.create(userModel);
}
@RequestMapping("/logout")
@ResponseBody
public CommonRes logout() throws BusinessException, UnsupportedEncodingException, NoSuchAlgorithmException {
httpServletRequest.getSession().invalidate();
return CommonRes.create(null);
}
//获取当前用户信息
@RequestMapping("/getcurrentuser")
@ResponseBody
public CommonRes getCurrentUser() {
UserModel userModel = (UserModel) httpServletRequest.getSession().getAttribute(CURRENT_USER_SESSION);
return CommonRes.create(userModel);
}
}

@ -0,0 +1,81 @@
package com.example.recommend.controller.admin;
import com.example.recommend.common.AdminPermission;
import com.example.recommend.common.BusinessException;
import com.example.recommend.common.EmBusinessError;
import com.example.recommend.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;
import sun.misc.BASE64Encoder;
import javax.servlet.http.HttpServletRequest;
import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
@Controller("/admin/admin")
@RequestMapping("/admin/admin")
public class AdminController {
@Value("${admin.email}")
private String email;
@Value("${admin.encryptPassword}")
private String encrptyPassord;
@Autowired
private HttpServletRequest httpServletRequest;
@Autowired
private UserService userService;
public static final String CURRENT_ADMIN_SESSION = "currentAdminSession";
@RequestMapping("/index")
@AdminPermission
public ModelAndView index() {
ModelAndView modelAndView = new ModelAndView("/admin/admin/index");
modelAndView.addObject("userCount", userService.countAllUser());
modelAndView.addObject("CONTROLLER_NAME", "admin");
modelAndView.addObject("ACTION_NAME", "index");
return modelAndView;
}
@RequestMapping("/loginpage")
public ModelAndView loginpage() {
ModelAndView modelAndView = new ModelAndView("/admin/admin/login");
return modelAndView;
}
@RequestMapping(value = "/login", method = RequestMethod.POST)
public String login(@RequestParam(name = "email") String email,
@RequestParam(name = "password") String password) throws BusinessException, UnsupportedEncodingException, NoSuchAlgorithmException {
if (StringUtils.isEmpty(email) || StringUtils.isEmpty(password)) {
throw new BusinessException(EmBusinessError.PARAMETER_VALIDATION_ERROR, "用户名密码不能为空");
}
if (email.equals(this.email) && encodeByMd5(password).equals(this.encrptyPassord)) {
//登录成功
httpServletRequest.getSession().setAttribute(CURRENT_ADMIN_SESSION, email);
return "redirect:/admin/admin/index";
} else {
throw new BusinessException(EmBusinessError.PARAMETER_VALIDATION_ERROR, "用户名密码错误");
}
}
private String encodeByMd5(String str) throws NoSuchAlgorithmException, UnsupportedEncodingException {
//确认计算方法MD5
MessageDigest messageDigest = MessageDigest.getInstance("MD5");
BASE64Encoder base64Encoder = new BASE64Encoder();
return base64Encoder.encode(messageDigest.digest(str.getBytes("utf-8")));
}
}

@ -0,0 +1,78 @@
package com.example.recommend.controller.admin;
import com.example.recommend.common.*;
import com.example.recommend.model.SellerModel;
import com.example.recommend.request.PageQuery;
import com.example.recommend.request.SellerCreateReq;
import com.example.recommend.service.SellerService;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import jakarta.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
import java.util.List;
@Controller("/admin/seller")
@RequestMapping("/admin/seller")
public class SellerController {
@Autowired
private SellerService sellerService;
//商户列表
@RequestMapping("/index")
@AdminPermission
public ModelAndView index(PageQuery pageQuery) {
PageHelper.startPage(pageQuery.getPage(), pageQuery.getSize());
List<SellerModel> sellerModelList = sellerService.selectAll();
PageInfo<SellerModel> sellerModelPageInfo = new PageInfo<>(sellerModelList);
ModelAndView modelAndView = new ModelAndView("/admin/seller/index.html");
modelAndView.addObject("data", sellerModelPageInfo);
modelAndView.addObject("CONTROLLER_NAME", "seller");
modelAndView.addObject("ACTION_NAME", "index");
return modelAndView;
}
@RequestMapping("/createpage")
@AdminPermission
public ModelAndView createPage() {
ModelAndView modelAndView = new ModelAndView("/admin/seller/create.html");
modelAndView.addObject("CONTROLLER_NAME", "seller");
modelAndView.addObject("ACTION_NAME", "create");
return modelAndView;
}
@RequestMapping(value = "/create", method = RequestMethod.POST)
@AdminPermission
public String create(@Valid SellerCreateReq sellerCreateReq, BindingResult bindingResult) throws BusinessException {
if (bindingResult.hasErrors()) {
throw new BusinessException(EmBusinessError.PARAMETER_VALIDATION_ERROR, CommonUtil.processErrorString(bindingResult));
}
SellerModel sellerModel = new SellerModel();
sellerModel.setName(sellerCreateReq.getName());
sellerService.create(sellerModel);
return "redirect:/admin/seller/index";
}
@RequestMapping(value = "down", method = RequestMethod.POST)
@AdminPermission
@ResponseBody
public CommonRes down(@RequestParam(value = "id") Integer id) throws BusinessException {
SellerModel sellerModel = sellerService.changeStatus(id, 1);
return CommonRes.create(sellerModel);
}
@RequestMapping(value = "up", method = RequestMethod.POST)
@AdminPermission
@ResponseBody
public CommonRes up(@RequestParam(value = "id") Integer id) throws BusinessException {
SellerModel sellerModel = sellerService.changeStatus(id, 0);
return CommonRes.create(sellerModel);
}
}

@ -0,0 +1,57 @@
package com.example.recommend.dal;
import com.example.recommend.model.SellerModel;
import java.util.List;
public interface SellerModelMapper {
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table seller
*
* @mbg.generated Mon Oct 09 23:38:39 CST 2023
*/
int deleteByPrimaryKey(Integer id);
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table seller
*
* @mbg.generated Mon Oct 09 23:38:39 CST 2023
*/
int insert(SellerModel record);
List<SellerModel> selectAll();
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table seller
*
* @mbg.generated Mon Oct 09 23:38:39 CST 2023
*/
int insertSelective(SellerModel record);
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table seller
*
* @mbg.generated Mon Oct 09 23:38:39 CST 2023
*/
SellerModel selectByPrimaryKey(Integer id);
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table seller
*
* @mbg.generated Mon Oct 09 23:38:39 CST 2023
*/
int updateByPrimaryKeySelective(SellerModel record);
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table seller
*
* @mbg.generated Mon Oct 09 23:38:39 CST 2023
*/
int updateByPrimaryKey(SellerModel record);
}

@ -1,6 +1,7 @@
package com.example.recommend.dal;
import com.example.recommend.model.UserModel;
import org.apache.ibatis.annotations.Param;
public interface UserModelMapper {
/**
@ -35,6 +36,8 @@ public interface UserModelMapper {
*/
UserModel selectByPrimaryKey(Integer id);
UserModel selectByTelephoneAndPassword(@Param("telephone") String telephone, @Param("password") String password);
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table user
@ -50,4 +53,6 @@ public interface UserModelMapper {
* @mbg.generated Mon Oct 09 13:50:54 CST 2023
*/
int updateByPrimaryKey(UserModel record);
Integer countAllUser();
}

@ -0,0 +1,204 @@
package com.example.recommend.model;
import java.math.BigDecimal;
import java.util.Date;
public class SellerModel {
/**
*
* This field was generated by MyBatis Generator.
* This field corresponds to the database column seller.id
*
* @mbg.generated Mon Oct 09 23:38:39 CST 2023
*/
private Integer id;
/**
*
* This field was generated by MyBatis Generator.
* This field corresponds to the database column seller.name
*
* @mbg.generated Mon Oct 09 23:38:39 CST 2023
*/
private String name;
/**
*
* This field was generated by MyBatis Generator.
* This field corresponds to the database column seller.created_at
*
* @mbg.generated Mon Oct 09 23:38:39 CST 2023
*/
private Date createdAt;
/**
*
* This field was generated by MyBatis Generator.
* This field corresponds to the database column seller.updated_at
*
* @mbg.generated Mon Oct 09 23:38:39 CST 2023
*/
private Date updatedAt;
/**
*
* This field was generated by MyBatis Generator.
* This field corresponds to the database column seller.remark_score
*
* @mbg.generated Mon Oct 09 23:38:39 CST 2023
*/
private BigDecimal remarkScore;
/**
*
* This field was generated by MyBatis Generator.
* This field corresponds to the database column seller.disabled_flag
*
* @mbg.generated Mon Oct 09 23:38:39 CST 2023
*/
private Integer disabledFlag;
/**
* This method was generated by MyBatis Generator.
* This method returns the value of the database column seller.id
*
* @return the value of seller.id
*
* @mbg.generated Mon Oct 09 23:38:39 CST 2023
*/
public Integer getId() {
return id;
}
/**
* This method was generated by MyBatis Generator.
* This method sets the value of the database column seller.id
*
* @param id the value for seller.id
*
* @mbg.generated Mon Oct 09 23:38:39 CST 2023
*/
public void setId(Integer id) {
this.id = id;
}
/**
* This method was generated by MyBatis Generator.
* This method returns the value of the database column seller.name
*
* @return the value of seller.name
*
* @mbg.generated Mon Oct 09 23:38:39 CST 2023
*/
public String getName() {
return name;
}
/**
* This method was generated by MyBatis Generator.
* This method sets the value of the database column seller.name
*
* @param name the value for seller.name
*
* @mbg.generated Mon Oct 09 23:38:39 CST 2023
*/
public void setName(String name) {
this.name = name == null ? null : name.trim();
}
/**
* This method was generated by MyBatis Generator.
* This method returns the value of the database column seller.created_at
*
* @return the value of seller.created_at
*
* @mbg.generated Mon Oct 09 23:38:39 CST 2023
*/
public Date getCreatedAt() {
return createdAt;
}
/**
* This method was generated by MyBatis Generator.
* This method sets the value of the database column seller.created_at
*
* @param createdAt the value for seller.created_at
*
* @mbg.generated Mon Oct 09 23:38:39 CST 2023
*/
public void setCreatedAt(Date createdAt) {
this.createdAt = createdAt;
}
/**
* This method was generated by MyBatis Generator.
* This method returns the value of the database column seller.updated_at
*
* @return the value of seller.updated_at
*
* @mbg.generated Mon Oct 09 23:38:39 CST 2023
*/
public Date getUpdatedAt() {
return updatedAt;
}
/**
* This method was generated by MyBatis Generator.
* This method sets the value of the database column seller.updated_at
*
* @param updatedAt the value for seller.updated_at
*
* @mbg.generated Mon Oct 09 23:38:39 CST 2023
*/
public void setUpdatedAt(Date updatedAt) {
this.updatedAt = updatedAt;
}
/**
* This method was generated by MyBatis Generator.
* This method returns the value of the database column seller.remark_score
*
* @return the value of seller.remark_score
*
* @mbg.generated Mon Oct 09 23:38:39 CST 2023
*/
public BigDecimal getRemarkScore() {
return remarkScore;
}
/**
* This method was generated by MyBatis Generator.
* This method sets the value of the database column seller.remark_score
*
* @param remarkScore the value for seller.remark_score
*
* @mbg.generated Mon Oct 09 23:38:39 CST 2023
*/
public void setRemarkScore(BigDecimal remarkScore) {
this.remarkScore = remarkScore;
}
/**
* This method was generated by MyBatis Generator.
* This method returns the value of the database column seller.disabled_flag
*
* @return the value of seller.disabled_flag
*
* @mbg.generated Mon Oct 09 23:38:39 CST 2023
*/
public Integer getDisabledFlag() {
return disabledFlag;
}
/**
* This method was generated by MyBatis Generator.
* This method sets the value of the database column seller.disabled_flag
*
* @param disabledFlag the value for seller.disabled_flag
*
* @mbg.generated Mon Oct 09 23:38:39 CST 2023
*/
public void setDisabledFlag(Integer disabledFlag) {
this.disabledFlag = disabledFlag;
}
}

@ -1,10 +1,10 @@
package com.example.recommend.model;
import java.io.Serializable;
import java.util.Date;
public class UserModel {
public class UserModel implements Serializable {
/**
*
* This field was generated by MyBatis Generator.
* This field corresponds to the database column user.id
*
@ -13,7 +13,6 @@ public class UserModel {
private Integer id;
/**
*
* This field was generated by MyBatis Generator.
* This field corresponds to the database column user.created_at
*
@ -22,7 +21,6 @@ public class UserModel {
private Date createdAt;
/**
*
* This field was generated by MyBatis Generator.
* This field corresponds to the database column user.updated_at
*
@ -31,7 +29,6 @@ public class UserModel {
private Date updatedAt;
/**
*
* This field was generated by MyBatis Generator.
* This field corresponds to the database column user.telephone
*
@ -40,7 +37,6 @@ public class UserModel {
private String telephone;
/**
*
* This field was generated by MyBatis Generator.
* This field corresponds to the database column user.password
*
@ -49,7 +45,6 @@ public class UserModel {
private String password;
/**
*
* This field was generated by MyBatis Generator.
* This field corresponds to the database column user.nick_name
*
@ -58,7 +53,6 @@ public class UserModel {
private String nickName;
/**
*
* This field was generated by MyBatis Generator.
* This field corresponds to the database column user.gender
*
@ -71,7 +65,6 @@ public class UserModel {
* This method returns the value of the database column user.id
*
* @return the value of user.id
*
* @mbg.generated Mon Oct 09 13:50:54 CST 2023
*/
public Integer getId() {
@ -83,7 +76,6 @@ public class UserModel {
* This method sets the value of the database column user.id
*
* @param id the value for user.id
*
* @mbg.generated Mon Oct 09 13:50:54 CST 2023
*/
public void setId(Integer id) {
@ -95,7 +87,6 @@ public class UserModel {
* This method returns the value of the database column user.created_at
*
* @return the value of user.created_at
*
* @mbg.generated Mon Oct 09 13:50:54 CST 2023
*/
public Date getCreatedAt() {
@ -107,7 +98,6 @@ public class UserModel {
* This method sets the value of the database column user.created_at
*
* @param createdAt the value for user.created_at
*
* @mbg.generated Mon Oct 09 13:50:54 CST 2023
*/
public void setCreatedAt(Date createdAt) {
@ -119,7 +109,6 @@ public class UserModel {
* This method returns the value of the database column user.updated_at
*
* @return the value of user.updated_at
*
* @mbg.generated Mon Oct 09 13:50:54 CST 2023
*/
public Date getUpdatedAt() {
@ -131,7 +120,6 @@ public class UserModel {
* This method sets the value of the database column user.updated_at
*
* @param updatedAt the value for user.updated_at
*
* @mbg.generated Mon Oct 09 13:50:54 CST 2023
*/
public void setUpdatedAt(Date updatedAt) {
@ -143,7 +131,6 @@ public class UserModel {
* This method returns the value of the database column user.telephone
*
* @return the value of user.telephone
*
* @mbg.generated Mon Oct 09 13:50:54 CST 2023
*/
public String getTelephone() {
@ -155,7 +142,6 @@ public class UserModel {
* This method sets the value of the database column user.telephone
*
* @param telephone the value for user.telephone
*
* @mbg.generated Mon Oct 09 13:50:54 CST 2023
*/
public void setTelephone(String telephone) {
@ -167,7 +153,6 @@ public class UserModel {
* This method returns the value of the database column user.password
*
* @return the value of user.password
*
* @mbg.generated Mon Oct 09 13:50:54 CST 2023
*/
public String getPassword() {
@ -179,7 +164,6 @@ public class UserModel {
* This method sets the value of the database column user.password
*
* @param password the value for user.password
*
* @mbg.generated Mon Oct 09 13:50:54 CST 2023
*/
public void setPassword(String password) {
@ -191,7 +175,6 @@ public class UserModel {
* This method returns the value of the database column user.nick_name
*
* @return the value of user.nick_name
*
* @mbg.generated Mon Oct 09 13:50:54 CST 2023
*/
public String getNickName() {
@ -203,7 +186,6 @@ public class UserModel {
* This method sets the value of the database column user.nick_name
*
* @param nickName the value for user.nick_name
*
* @mbg.generated Mon Oct 09 13:50:54 CST 2023
*/
public void setNickName(String nickName) {
@ -215,7 +197,6 @@ public class UserModel {
* This method returns the value of the database column user.gender
*
* @return the value of user.gender
*
* @mbg.generated Mon Oct 09 13:50:54 CST 2023
*/
public Integer getGender() {
@ -227,7 +208,6 @@ public class UserModel {
* This method sets the value of the database column user.gender
*
* @param gender the value for user.gender
*
* @mbg.generated Mon Oct 09 13:50:54 CST 2023
*/
public void setGender(Integer gender) {

@ -0,0 +1,26 @@
package com.example.recommend.request;
import jakarta.validation.constraints.NotBlank;
public class LoginReq {
@NotBlank(message = "手机号不能为空")
private String telephone;
@NotBlank(message = "密码不能为空")
private String password;
public String getTelephone() {
return telephone;
}
public void setTelephone(String telephone) {
this.telephone = telephone;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}

@ -0,0 +1,24 @@
package com.example.recommend.request;
public class PageQuery {
private Integer page = 1;
private Integer size = 20;
public Integer getPage() {
return page;
}
public void setPage(Integer page) {
this.page = page;
}
public Integer getSize() {
return size;
}
public void setSize(Integer size) {
this.size = size;
}
}

@ -0,0 +1,17 @@
package com.example.recommend.request;
import jakarta.validation.constraints.NotBlank;
public class SellerCreateReq {
@NotBlank(message = "商户名不能为空")
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}

@ -0,0 +1,16 @@
package com.example.recommend.service;
import com.example.recommend.common.BusinessException;
import com.example.recommend.model.SellerModel;
import java.util.List;
public interface SellerService {
SellerModel create(SellerModel sellerModel);
SellerModel get(Integer id);
List<SellerModel> selectAll();
SellerModel changeStatus(Integer id, Integer disabledFlag) throws BusinessException;
}

@ -0,0 +1,54 @@
package com.example.recommend.service.impl;
import com.example.recommend.common.BusinessException;
import com.example.recommend.common.EmBusinessError;
import com.example.recommend.dal.SellerModelMapper;
import com.example.recommend.model.SellerModel;
import com.example.recommend.service.SellerService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
@Service
public class SellerServiceImpl implements SellerService {
@Autowired
private SellerModelMapper sellerModelMapper;
@Override
@Transactional
public SellerModel create(SellerModel sellerModel) {
sellerModel.setCreatedAt(new Date());
sellerModel.setUpdatedAt(new Date());
sellerModel.setRemarkScore(new BigDecimal(0));
sellerModel.setDisabledFlag(0);
sellerModelMapper.insertSelective(sellerModel);
return get(sellerModel.getId());
}
@Override
public SellerModel get(Integer id) {
return sellerModelMapper.selectByPrimaryKey(id);
}
@Override
public List<SellerModel> selectAll() {
return sellerModelMapper.selectAll();
}
@Override
public SellerModel changeStatus(Integer id, Integer disabledFlag) throws BusinessException {
SellerModel sellerModel = get(id);
if (sellerModel == null) {
throw new BusinessException(EmBusinessError.PARAMETER_VALIDATION_ERROR);
}
sellerModel.setDisabledFlag(disabledFlag);
sellerModelMapper.updateByPrimaryKeySelective(sellerModel);
return sellerModel;
}
}

@ -44,12 +44,16 @@ public class UserServiceImpl implements UserService {
@Override
public UserModel login(String telephone, String password) throws UnsupportedEncodingException, NoSuchAlgorithmException, BusinessException {
return null;
UserModel userModel = userModelMapper.selectByTelephoneAndPassword(telephone, encodeByMd5(password));
if (userModel == null) {
throw new BusinessException(EmBusinessError.LOGIN_FAIL);
}
return userModel;
}
@Override
public Integer countAllUser() {
return null;
return userModelMapper.countAllUser();
}
private String encodeByMd5(String str) throws NoSuchAlgorithmException, UnsupportedEncodingException {

@ -15,4 +15,7 @@ spring.mvc.throw-exception-if-no-handler-found=true
spring.mvc.static-path-pattern=/static/**
#thymeleaf?????
spring.thymeleaf.prefix=classpath:/templates/
spring.thymeleaf.suffix=.html
spring.thymeleaf.suffix=.html
#admin???????????
admin.email=admin@qq.com
admin.encryptPassword=4QrcOUm6Wau+VuBX8g+IPg==

@ -9,4 +9,15 @@ CREATE TABLE `recommenddb`.`user`
`gender` int NOT NULL DEFAULT 0,
PRIMARY KEY (`id`),
UNIQUE INDEX `telephone_unique_index` (`telephone`) USING BTREE
);
CREATE TABLE `recommenddb`.`seller`
(
`id` int(0) NOT NULL AUTO_INCREMENT,
`name` varchar(80) NOT NULL DEFAULT '',
`created_at` datetime(0) NOT NULL DEFAULT '0000-00-00 00:00:00',
`updated_at` datetime(0) NOT NULL DEFAULT '0000-00-00 00:00:00',
`remark_score` decimal(2, 1) NOT NULL DEFAULT 0,
`disabled_flag` int(0) NOT NULL DEFAULT 0,
PRIMARY KEY (`id`)
);

@ -0,0 +1,150 @@
<?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.example.recommend.dal.SellerModelMapper">
<resultMap id="BaseResultMap" type="com.example.recommend.model.SellerModel">
<!--
WARNING - @mbg.generated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Mon Oct 09 23:38:39 CST 2023.
-->
<id column="id" jdbcType="INTEGER" property="id"/>
<result column="name" jdbcType="VARCHAR" property="name"/>
<result column="created_at" jdbcType="TIMESTAMP" property="createdAt"/>
<result column="updated_at" jdbcType="TIMESTAMP" property="updatedAt"/>
<result column="remark_score" jdbcType="DECIMAL" property="remarkScore"/>
<result column="disabled_flag" jdbcType="INTEGER" property="disabledFlag"/>
</resultMap>
<sql id="Base_Column_List">
<!--
WARNING - @mbg.generated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Mon Oct 09 23:38:39 CST 2023.
-->
id, name, created_at, updated_at, remark_score, disabled_flag
</sql>
<select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap">
<!--
WARNING - @mbg.generated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Mon Oct 09 23:38:39 CST 2023.
-->
select
<include refid="Base_Column_List"/>
from seller
where id = #{id,jdbcType=INTEGER}
</select>
<select id="selectAll" resultMap="BaseResultMap">
select
<include refid="Base_Column_List"/>
from seller
order by id ASC
</select>
<delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">
<!--
WARNING - @mbg.generated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Mon Oct 09 23:38:39 CST 2023.
-->
delete from seller
where id = #{id,jdbcType=INTEGER}
</delete>
<insert id="insert" parameterType="com.example.recommend.model.SellerModel">
<!--
WARNING - @mbg.generated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Mon Oct 09 23:38:39 CST 2023.
-->
<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
SELECT LAST_INSERT_ID()
</selectKey>
insert into seller (name, created_at, updated_at,
remark_score, disabled_flag)
values (#{name,jdbcType=VARCHAR}, #{createdAt,jdbcType=TIMESTAMP}, #{updatedAt,jdbcType=TIMESTAMP},
#{remarkScore,jdbcType=DECIMAL}, #{disabledFlag,jdbcType=INTEGER})
</insert>
<insert id="insertSelective" parameterType="com.example.recommend.model.SellerModel">
<!--
WARNING - @mbg.generated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Mon Oct 09 23:38:39 CST 2023.
-->
<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
SELECT LAST_INSERT_ID()
</selectKey>
insert into seller
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="name != null">
name,
</if>
<if test="createdAt != null">
created_at,
</if>
<if test="updatedAt != null">
updated_at,
</if>
<if test="remarkScore != null">
remark_score,
</if>
<if test="disabledFlag != null">
disabled_flag,
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="name != null">
#{name,jdbcType=VARCHAR},
</if>
<if test="createdAt != null">
#{createdAt,jdbcType=TIMESTAMP},
</if>
<if test="updatedAt != null">
#{updatedAt,jdbcType=TIMESTAMP},
</if>
<if test="remarkScore != null">
#{remarkScore,jdbcType=DECIMAL},
</if>
<if test="disabledFlag != null">
#{disabledFlag,jdbcType=INTEGER},
</if>
</trim>
</insert>
<update id="updateByPrimaryKeySelective" parameterType="com.example.recommend.model.SellerModel">
<!--
WARNING - @mbg.generated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Mon Oct 09 23:38:39 CST 2023.
-->
update seller
<set>
<if test="name != null">
name = #{name,jdbcType=VARCHAR},
</if>
<if test="createdAt != null">
created_at = #{createdAt,jdbcType=TIMESTAMP},
</if>
<if test="updatedAt != null">
updated_at = #{updatedAt,jdbcType=TIMESTAMP},
</if>
<if test="remarkScore != null">
remark_score = #{remarkScore,jdbcType=DECIMAL},
</if>
<if test="disabledFlag != null">
disabled_flag = #{disabledFlag,jdbcType=INTEGER},
</if>
</set>
where id = #{id,jdbcType=INTEGER}
</update>
<update id="updateByPrimaryKey" parameterType="com.example.recommend.model.SellerModel">
<!--
WARNING - @mbg.generated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Mon Oct 09 23:38:39 CST 2023.
-->
update seller
set name = #{name,jdbcType=VARCHAR},
created_at = #{createdAt,jdbcType=TIMESTAMP},
updated_at = #{updatedAt,jdbcType=TIMESTAMP},
remark_score = #{remarkScore,jdbcType=DECIMAL},
disabled_flag = #{disabledFlag,jdbcType=INTEGER}
where id = #{id,jdbcType=INTEGER}
</update>
</mapper>

@ -1,157 +1,168 @@
<?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.example.recommend.dal.UserModelMapper">
<resultMap id="BaseResultMap" type="com.example.recommend.model.UserModel">
<!--
WARNING - @mbg.generated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Mon Oct 09 13:50:54 CST 2023.
-->
<id column="id" jdbcType="INTEGER" property="id" />
<result column="created_at" jdbcType="TIMESTAMP" property="createdAt" />
<result column="updated_at" jdbcType="TIMESTAMP" property="updatedAt" />
<result column="telephone" jdbcType="VARCHAR" property="telephone" />
<result column="password" jdbcType="VARCHAR" property="password" />
<result column="nick_name" jdbcType="VARCHAR" property="nickName" />
<result column="gender" jdbcType="INTEGER" property="gender" />
</resultMap>
<sql id="Base_Column_List">
<!--
WARNING - @mbg.generated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Mon Oct 09 13:50:54 CST 2023.
-->
id, created_at, updated_at, telephone, password, nick_name, gender
</sql>
<select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap">
<!--
WARNING - @mbg.generated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Mon Oct 09 13:50:54 CST 2023.
-->
select
<include refid="Base_Column_List" />
from user
where id = #{id,jdbcType=INTEGER}
</select>
<delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">
<!--
WARNING - @mbg.generated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Mon Oct 09 13:50:54 CST 2023.
-->
delete from user
where id = #{id,jdbcType=INTEGER}
</delete>
<insert id="insert" parameterType="com.example.recommend.model.UserModel">
<!--
WARNING - @mbg.generated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Mon Oct 09 13:50:54 CST 2023.
-->
<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
SELECT LAST_INSERT_ID()
</selectKey>
insert into user (created_at, updated_at, telephone,
password, nick_name, gender
)
values (#{createdAt,jdbcType=TIMESTAMP}, #{updatedAt,jdbcType=TIMESTAMP}, #{telephone,jdbcType=VARCHAR},
#{password,jdbcType=VARCHAR}, #{nickName,jdbcType=VARCHAR}, #{gender,jdbcType=INTEGER}
)
</insert>
<insert id="insertSelective" parameterType="com.example.recommend.model.UserModel">
<!--
WARNING - @mbg.generated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Mon Oct 09 13:50:54 CST 2023.
-->
<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
SELECT LAST_INSERT_ID()
</selectKey>
insert into user
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="createdAt != null">
created_at,
</if>
<if test="updatedAt != null">
updated_at,
</if>
<if test="telephone != null">
telephone,
</if>
<if test="password != null">
password,
</if>
<if test="nickName != null">
nick_name,
</if>
<if test="gender != null">
gender,
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="createdAt != null">
#{createdAt,jdbcType=TIMESTAMP},
</if>
<if test="updatedAt != null">
#{updatedAt,jdbcType=TIMESTAMP},
</if>
<if test="telephone != null">
#{telephone,jdbcType=VARCHAR},
</if>
<if test="password != null">
#{password,jdbcType=VARCHAR},
</if>
<if test="nickName != null">
#{nickName,jdbcType=VARCHAR},
</if>
<if test="gender != null">
#{gender,jdbcType=INTEGER},
</if>
</trim>
</insert>
<update id="updateByPrimaryKeySelective" parameterType="com.example.recommend.model.UserModel">
<!--
WARNING - @mbg.generated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Mon Oct 09 13:50:54 CST 2023.
-->
update user
<set>
<if test="createdAt != null">
created_at = #{createdAt,jdbcType=TIMESTAMP},
</if>
<if test="updatedAt != null">
<resultMap id="BaseResultMap" type="com.example.recommend.model.UserModel">
<!--
WARNING - @mbg.generated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Mon Oct 09 13:50:54 CST 2023.
-->
<id column="id" jdbcType="INTEGER" property="id"/>
<result column="created_at" jdbcType="TIMESTAMP" property="createdAt"/>
<result column="updated_at" jdbcType="TIMESTAMP" property="updatedAt"/>
<result column="telephone" jdbcType="VARCHAR" property="telephone"/>
<result column="password" jdbcType="VARCHAR" property="password"/>
<result column="nick_name" jdbcType="VARCHAR" property="nickName"/>
<result column="gender" jdbcType="INTEGER" property="gender"/>
</resultMap>
<sql id="Base_Column_List">
<!--
WARNING - @mbg.generated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Mon Oct 09 13:50:54 CST 2023.
-->
id, created_at, updated_at, telephone, password, nick_name, gender
</sql>
<select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap">
<!--
WARNING - @mbg.generated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Mon Oct 09 13:50:54 CST 2023.
-->
select
<include refid="Base_Column_List"/>
from user
where id = #{id,jdbcType=INTEGER}
</select>
<delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">
<!--
WARNING - @mbg.generated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Mon Oct 09 13:50:54 CST 2023.
-->
delete from user
where id = #{id,jdbcType=INTEGER}
</delete>
<insert id="insert" parameterType="com.example.recommend.model.UserModel">
<!--
WARNING - @mbg.generated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Mon Oct 09 13:50:54 CST 2023.
-->
<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
SELECT LAST_INSERT_ID()
</selectKey>
insert into user (created_at, updated_at, telephone,
password, nick_name, gender
)
values (#{createdAt,jdbcType=TIMESTAMP}, #{updatedAt,jdbcType=TIMESTAMP}, #{telephone,jdbcType=VARCHAR},
#{password,jdbcType=VARCHAR}, #{nickName,jdbcType=VARCHAR}, #{gender,jdbcType=INTEGER}
)
</insert>
<insert id="insertSelective" parameterType="com.example.recommend.model.UserModel">
<!--
WARNING - @mbg.generated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Mon Oct 09 13:50:54 CST 2023.
-->
<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
SELECT LAST_INSERT_ID()
</selectKey>
insert into user
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="createdAt != null">
created_at,
</if>
<if test="updatedAt != null">
updated_at,
</if>
<if test="telephone != null">
telephone,
</if>
<if test="password != null">
password,
</if>
<if test="nickName != null">
nick_name,
</if>
<if test="gender != null">
gender,
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="createdAt != null">
#{createdAt,jdbcType=TIMESTAMP},
</if>
<if test="updatedAt != null">
#{updatedAt,jdbcType=TIMESTAMP},
</if>
<if test="telephone != null">
#{telephone,jdbcType=VARCHAR},
</if>
<if test="password != null">
#{password,jdbcType=VARCHAR},
</if>
<if test="nickName != null">
#{nickName,jdbcType=VARCHAR},
</if>
<if test="gender != null">
#{gender,jdbcType=INTEGER},
</if>
</trim>
</insert>
<update id="updateByPrimaryKeySelective" parameterType="com.example.recommend.model.UserModel">
<!--
WARNING - @mbg.generated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Mon Oct 09 13:50:54 CST 2023.
-->
update user
<set>
<if test="createdAt != null">
created_at = #{createdAt,jdbcType=TIMESTAMP},
</if>
<if test="updatedAt != null">
updated_at = #{updatedAt,jdbcType=TIMESTAMP},
</if>
<if test="telephone != null">
telephone = #{telephone,jdbcType=VARCHAR},
</if>
<if test="password != null">
password = #{password,jdbcType=VARCHAR},
</if>
<if test="nickName != null">
nick_name = #{nickName,jdbcType=VARCHAR},
</if>
<if test="gender != null">
gender = #{gender,jdbcType=INTEGER},
</if>
</set>
where id = #{id,jdbcType=INTEGER}
</update>
<update id="updateByPrimaryKey" parameterType="com.example.recommend.model.UserModel">
<!--
WARNING - @mbg.generated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Mon Oct 09 13:50:54 CST 2023.
-->
update user
set created_at = #{createdAt,jdbcType=TIMESTAMP},
updated_at = #{updatedAt,jdbcType=TIMESTAMP},
</if>
<if test="telephone != null">
telephone = #{telephone,jdbcType=VARCHAR},
</if>
<if test="password != null">
password = #{password,jdbcType=VARCHAR},
</if>
<if test="nickName != null">
nick_name = #{nickName,jdbcType=VARCHAR},
</if>
<if test="gender != null">
gender = #{gender,jdbcType=INTEGER},
</if>
</set>
where id = #{id,jdbcType=INTEGER}
</update>
<update id="updateByPrimaryKey" parameterType="com.example.recommend.model.UserModel">
<!--
WARNING - @mbg.generated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Mon Oct 09 13:50:54 CST 2023.
-->
update user
set created_at = #{createdAt,jdbcType=TIMESTAMP},
updated_at = #{updatedAt,jdbcType=TIMESTAMP},
telephone = #{telephone,jdbcType=VARCHAR},
password = #{password,jdbcType=VARCHAR},
nick_name = #{nickName,jdbcType=VARCHAR},
gender = #{gender,jdbcType=INTEGER}
where id = #{id,jdbcType=INTEGER}
</update>
gender = #{gender,jdbcType=INTEGER}
where id = #{id,jdbcType=INTEGER}
</update>
<select id="selectByTelephoneAndPassword" resultMap="BaseResultMap">
SELECT
<include refid="Base_Column_List"/>
from user where telephone=#{telephone} and password = #{password}
</select>
<select id="countAllUser" resultType="java.lang.Integer">
SELECT count(1)
from user
</select>
</mapper>

@ -38,7 +38,7 @@
enableUpdateByExample="false" enableDeleteByExample="false"
enableSelectByExample="false" selectByExampleQueryId="false"></table>
-->
<table tableName="user" domainObjectName="UserModel" enableCountByExample="false"
<table tableName="seller" domainObjectName="SellerModel" enableCountByExample="false"
enableUpdateByExample="false" enableDeleteByExample="false"
enableSelectByExample="false" selectByExampleQueryId="false">
<generatedKey column="id" sqlStatement="MySql" identity="true"/>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 162 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 299 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 643 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 408 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 604 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 591 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 643 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 600 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 497 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 488 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 428 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 506 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 647 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 403 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 673 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 524 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 663 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 589 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 593 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 585 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 504 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 449 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 497 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 462 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 457 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 675 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 486 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 611 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 639 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 500 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 593 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 526 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 631 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 512 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 443 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 514 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 600 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 628 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 398 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 625 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 528 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 614 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 521 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 367 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 453 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 586 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 450 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 525 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 472 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 483 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 477 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 439 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 563 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 529 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 608 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 428 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 476 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 545 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 572 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 495 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 620 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 508 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 582 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 500 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 429 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 465 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 508 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 496 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 653 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 469 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 592 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 479 B

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save