新增添加商品规格接口以及对应的校验

新增添加商品属性接口以及对应的校验
This commit is contained in:
gaomusan 2024-10-31 10:08:35 +08:00
parent 745e3b790a
commit efb6eea972
19 changed files with 391 additions and 38 deletions

View File

@ -183,6 +183,5 @@ create table if not exists manicurist_auth
INDEX idx_artistId (artistId)
) comment ='美甲师认证表' COLLATE = utf8mb4_unicode_ci;
ALTER TABLE manicurist ADD COLUMN manStatus INT DEFAULT 0;

View File

@ -28,4 +28,9 @@ public interface UserConstant {
*/
int ADMIN_ROLE = 1;
/**
* 商家权限
*/
int BUSINESS_ROLE = 2;
}

View File

@ -57,7 +57,7 @@ public class CartController {
//校验
cartService.validCart(cartAddRequest);
//添加品到购物车
//添加品到购物车
Long cart = cartService.addCart(cartAddRequest, request);
return ResultUtils.success(cart);
}

View File

@ -0,0 +1,29 @@
package com.cj.jiaqingjiayi.model.request.attribute;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
/**
* 属性添加请求体
*
* @author xy
*/
@Data
public class AttributeAddRequest implements Serializable {
/**
* 属性名称
*/
private String attributeName;
/**
* 属性状态:0在售,1停售
*/
private Integer attributeStatus;
@Serial
private static final long serialVersionUID = 1L;
}

View File

@ -0,0 +1,31 @@
package com.cj.jiaqingjiayi.model.request.attribute;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
/**
* @author xy
*/
@Data
public class AttributeUpdateRequest implements Serializable {
/**
* 属性id
*/
private Long id;
/**
* 属性名称
*/
private String attributeName;
/**
* 属性状态:0在售,1停售
*/
private Integer attributeStatus;
@Serial
private static final long serialVersionUID = 1L;
}

View File

@ -0,0 +1,26 @@
package com.cj.jiaqingjiayi.model.request.specifications;
import com.cj.jiaqingjiayi.model.request.attribute.AttributeAddRequest;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.List;
@Data
public class SpecificationsAddRequest implements Serializable {
/**
* 规格名称
*/
private String specificationsName;
/**
* 属性请求体列表
*/
private List<AttributeAddRequest> attributeAddRequests;
@Serial
private static final long serialVersionUID = -2573217224030065261L;
}

View File

@ -0,0 +1,21 @@
package com.cj.jiaqingjiayi.model.request.specifications;
import lombok.Data;
import java.io.Serializable;
/**
* 用户删除请求
*
* @author bsz
*/
@Data
public class SpecificationsMyQueryRequest implements Serializable {
/**
* id
*/
private Long id;
private static final long serialVersionUID = 1L;
}

View File

@ -0,0 +1,21 @@
package com.cj.jiaqingjiayi.model.request.specifications;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
/**
* @author ASUS
*/
@Data
public class SpecificationsQueryRequest implements Serializable {
/**
* 规格名称
*/
private String specificationsName;
@Serial
private static final long serialVersionUID = 1L;
}

View File

@ -0,0 +1,31 @@
package com.cj.jiaqingjiayi.model.request.specifications;
import com.cj.jiaqingjiayi.model.request.attribute.AttributeUpdateRequest;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.List;
@Data
public class SpecificationsUpdateRequest implements Serializable {
/**
* 规格id
*/
private Long id;
/**
* 规格名称
*/
private String specificationsName;
/**
* 属性请求体列表
*/
private List<AttributeUpdateRequest> attributeUpdateRequests;
@Serial
private static final long serialVersionUID = -2573217224030065261L;
}

View File

@ -3,6 +3,7 @@ package com.cj.jiaqingjiayi.model.vo;
import com.baomidou.mybatisplus.annotation.TableField;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
@ -50,5 +51,6 @@ public class ManicuristVO implements Serializable {
private String manicuristAvatar;
@TableField(exist = false)
@Serial
private static final long serialVersionUID = 1L;
}

View File

@ -2,6 +2,8 @@ package com.cj.jiaqingjiayi.service;
import com.cj.jiaqingjiayi.model.domain.Attribute;
import com.baomidou.mybatisplus.extension.service.IService;
import com.cj.jiaqingjiayi.model.request.attribute.AttributeAddRequest;
import com.cj.jiaqingjiayi.model.request.attribute.AttributeUpdateRequest;
import com.cj.jiaqingjiayi.model.vo.SpecificationsVO;
import java.util.List;
@ -17,4 +19,20 @@ public interface AttributeService extends IService<Attribute> {
* 根据规格id获取属性脱敏列表
*/
List<SpecificationsVO> getBySpecificationsVoId(List<SpecificationsVO> specificationsVOList);
/**
* 添加属性
*/
Boolean addAttribute(List<AttributeAddRequest> attributeAddRequest, Long businessId, Long specificationsId);
/**
* 校验
*/
void validAttribute(Attribute attribute);
/**
* 更新属性信息
*/
Boolean updateAttribute(List<AttributeUpdateRequest> attributeUpdateRequests, Long businessId, Long specificationsId);
}

View File

@ -48,7 +48,6 @@ public interface BusinessService extends IService<Business> {
*/
List<BusinessVO> getBusinessVO(List<Business> businessList);
/**
* 获取当前登录商家
*/

View File

@ -9,8 +9,6 @@ import javax.servlet.http.HttpServletRequest;
/**
* @author 高木
* @description 针对表cart(购物车表)的数据库操作Service
* @createDate 2024-09-05 15:15:56
*/
public interface CartService extends IService<Cart> {
@ -20,17 +18,17 @@ public interface CartService extends IService<Cart> {
void validCart(CartAddRequest cartAddRequest);
/**
* 添加
* 添加
*/
Long addCart (CartAddRequest cartAddRequest, HttpServletRequest request);
/**
* 更新购物车
* 更新购物车
*/
Boolean updateCart(CartUpdateRequest cartUpdateRequest, HttpServletRequest request);
/**
* 删除购物车
* 删除购物车
*/
Boolean deleteCart(Long cartId, HttpServletRequest request);

View File

@ -2,6 +2,12 @@ package com.cj.jiaqingjiayi.service;
import com.cj.jiaqingjiayi.model.domain.Specifications;
import com.baomidou.mybatisplus.extension.service.IService;
import com.cj.jiaqingjiayi.model.request.attribute.AttributeAddRequest;
import com.cj.jiaqingjiayi.model.request.attribute.AttributeUpdateRequest;
import com.cj.jiaqingjiayi.model.vo.SpecificationsVO;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
/**
* @author 高木
@ -10,4 +16,23 @@ import com.baomidou.mybatisplus.extension.service.IService;
*/
public interface SpecificationsService extends IService<Specifications> {
/**
* 校验
*/
void validSpecifications(Specifications specifications, boolean add);
/**
* 添加规格
*/
Boolean addSpecifications(Specifications specifications, List<AttributeAddRequest> attributeAddRequests, HttpServletRequest request);
/**
* 更新规格
*/
Boolean updateSpecifications(Specifications specifications, List<AttributeUpdateRequest> attributeUpdateRequests, HttpServletRequest request);
/**
* 获取规格脱敏列表
*/
List<SpecificationsVO> getSpecificationsVO(List<Specifications> specificationsList);
}

View File

@ -35,38 +35,26 @@ public interface UserService extends IService<User> {
/**
* 用户注销
* @param request
* @return
*/
int userLogout(HttpServletRequest request);
/**
* 用户脱敏
* @param user
* @return
*/
User getSafetyUser(User user);
/**
* 获取当前用户登录信息
*
* @param request
* @return
*/
User getLoginUser(HttpServletRequest request);
/**
* 用户修改密码
* @param userUpdatePasswordRequest
* @param request
* @return
*/
boolean updateUserPassword(UserUpdatePasswordRequest userUpdatePasswordRequest, HttpServletRequest request);
/**
* 分页条件
* @param searchRequest
* @return
*/
QueryWrapper<User> getQueryWrapper(UserSearchRequest searchRequest);
@ -74,7 +62,11 @@ public interface UserService extends IService<User> {
/**
* 判断是否为管理员
* @return
*/
void isAdmin(HttpServletRequest request);
/**
* 判断是否为商家
*/
void isBusiness(HttpServletRequest request);
}

View File

@ -2,15 +2,23 @@ package com.cj.jiaqingjiayi.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.cj.jiaqingjiayi.common.ErrorCode;
import com.cj.jiaqingjiayi.exception.BusinessException;
import com.cj.jiaqingjiayi.exception.ThrowUtils;
import com.cj.jiaqingjiayi.model.domain.Attribute;
import com.cj.jiaqingjiayi.model.request.attribute.AttributeAddRequest;
import com.cj.jiaqingjiayi.model.request.attribute.AttributeUpdateRequest;
import com.cj.jiaqingjiayi.model.vo.AttributeVO;
import com.cj.jiaqingjiayi.model.vo.SpecificationsVO;
import com.cj.jiaqingjiayi.service.AttributeService;
import com.cj.jiaqingjiayi.mapper.AttributeMapper;
import com.cj.jiaqingjiayi.service.BusinessService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
@ -41,6 +49,65 @@ public class AttributeServiceImpl extends ServiceImpl<AttributeMapper, Attribute
}).collect(Collectors.toList());
}
@Override
public Boolean addAttribute(List<AttributeAddRequest> attributeAddRequests, Long businessId, Long specificationsId) {
if (attributeAddRequests.isEmpty()) {
throw new BusinessException(ErrorCode.PARAMS_ERROR);
}
//保存每个规格属性
for (AttributeAddRequest attributeAddRequest: attributeAddRequests) {
Attribute attribute = new Attribute();
BeanUtils.copyProperties(attributeAddRequest, attribute);
//校验
validAttribute(attribute);
//添加保存
saveAttribute(businessId, specificationsId, attribute);
}
return true;
}
@Override
public void validAttribute(Attribute attribute) {
if (attribute == null) {
throw new BusinessException(ErrorCode.PARAMS_ERROR);
}
String attributeName = attribute.getAttributeName();
Integer attributeStatus = attribute.getAttributeStatus();
if (attributeStatus == null) {
throw new BusinessException(ErrorCode.PARAMS_ERROR, "请填写属性状态");
}
if (StringUtils.isBlank(attributeName)) {
throw new BusinessException(ErrorCode.PARAMS_ERROR, "请填写属性名称");
}
}
@Override
public Boolean updateAttribute(List<AttributeUpdateRequest> attributeUpdateRequests, Long businessId, Long specificationsId) {
if (attributeUpdateRequests.isEmpty()) {
throw new BusinessException(ErrorCode.PARAMS_ERROR,"请补全属性参数");
}
QueryWrapper<Attribute> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("specificationsId",specificationsId);
boolean remove = this.remove(queryWrapper);
ThrowUtils.throwIf(!remove, ErrorCode.OPERATION_ERROR);
//更新
for (AttributeUpdateRequest attributeUpdateRequest : attributeUpdateRequests) {
Attribute attribute = new Attribute();
BeanUtils.copyProperties(attributeUpdateRequest,attribute);
//校验
validAttribute(attribute);
//更新
saveAttribute(businessId,specificationsId,attribute);
}
return true;
}
/**
* 获取脱敏属性列表
* @param attributes 为脱敏列表
@ -56,6 +123,16 @@ public class AttributeServiceImpl extends ServiceImpl<AttributeMapper, Attribute
return attributeVO;
}).collect(Collectors.toList());
}
/**
* 保存属性信息
*/
private void saveAttribute(Long businessId, Long specificationsId, Attribute attribute) {
attribute.setBusinessId(businessId);
attribute.setSpecificationsId(specificationsId);
boolean result = this.save(attribute);
ThrowUtils.throwIf(!result, ErrorCode.OPERATION_ERROR);
}
}

View File

@ -108,8 +108,10 @@ public class BusinessServiceImpl extends ServiceImpl<BusinessMapper, Business>
}
}
Business byId = getById(id);
ThrowUtils.throwIf(byId == null, ErrorCode.NULL_ERROR, "商家不存在");
if(!add){
Business byId = getById(id);
ThrowUtils.throwIf(byId == null, ErrorCode.NULL_ERROR, "商家不存在");
}
// 有参数可以校验参数 保证商家名字唯一
if (StringUtils.isNotBlank(businessName)) {

View File

@ -1,10 +1,28 @@
package com.cj.jiaqingjiayi.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.cj.jiaqingjiayi.common.ErrorCode;
import com.cj.jiaqingjiayi.exception.BusinessException;
import com.cj.jiaqingjiayi.exception.ThrowUtils;
import com.cj.jiaqingjiayi.model.domain.Business;
import com.cj.jiaqingjiayi.model.domain.Specifications;
import com.cj.jiaqingjiayi.model.request.attribute.AttributeAddRequest;
import com.cj.jiaqingjiayi.model.request.attribute.AttributeUpdateRequest;
import com.cj.jiaqingjiayi.model.vo.SpecificationsVO;
import com.cj.jiaqingjiayi.service.AttributeService;
import com.cj.jiaqingjiayi.service.BusinessService;
import com.cj.jiaqingjiayi.service.SpecificationsService;
import com.cj.jiaqingjiayi.mapper.SpecificationsMapper;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
* @author 高木
@ -15,6 +33,68 @@ import org.springframework.stereotype.Service;
public class SpecificationsServiceImpl extends ServiceImpl<SpecificationsMapper, Specifications>
implements SpecificationsService{
@Resource
private BusinessService businessService;
@Resource
private AttributeService attributeService;
@Override
public void validSpecifications(Specifications specifications, boolean update) {
if (specifications == null) {
throw new BusinessException(ErrorCode.PARAMS_ERROR);
}
String specificationsName = specifications.getSpecificationsName();
Long id = specifications.getId();
if (update) {
ThrowUtils.throwIf(id == null, ErrorCode.PARAMS_ERROR,"请提供规格id");
}
if (StringUtils.isBlank(specificationsName)) {
throw new BusinessException(ErrorCode.PARAMS_ERROR, "请填写规格名称");
}
}
@Override
public Boolean addSpecifications(Specifications specifications, List<AttributeAddRequest> attributeAddRequests, HttpServletRequest request) {
//获取当前商户
Business loginBusiness = businessService.getLoginBusiness(request);
Long businessId = loginBusiness.getId();
//保存规格
specifications.setBusinessId(businessId);
boolean save = this.save(specifications);
ThrowUtils.throwIf(!save, ErrorCode.PARAMS_ERROR);
Long specificationsId = specifications.getId();
return attributeService.addAttribute(attributeAddRequests, businessId, specificationsId);
}
@Override
public Boolean updateSpecifications(Specifications specifications, List<AttributeUpdateRequest> attributeUpdateRequests, HttpServletRequest request) {
Long specificationsId = specifications.getId();
//获取当前登录商家信息
Business loginBusiness = businessService.getLoginBusiness(request);
Long businessId = loginBusiness.getId();
//更新规格信息
specifications.setBusinessId(businessId);
boolean update = this.updateById(specifications);
ThrowUtils.throwIf(!update, ErrorCode.OPERATION_ERROR);
//更新规格的属性信息
return attributeService.updateAttribute(attributeUpdateRequests, businessId, specificationsId);
}
@Override
public List<SpecificationsVO> getSpecificationsVO(List<Specifications> specificationsList) {
if (CollectionUtils.isEmpty(specificationsList)){
return new ArrayList<>();
}
return specificationsList.stream().map(item ->{
SpecificationsVO specificationsVO = new SpecificationsVO();
BeanUtils.copyProperties(item,specificationsVO);
return specificationsVO;
}).collect(Collectors.toList());
}
}

View File

@ -150,8 +150,6 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User>
/**
* 实现用户注销
* @param request
* @return
*/
@Override
public int userLogout(HttpServletRequest request) {
@ -161,8 +159,6 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User>
/**
* 用户脱敏
* @param user
* @return
*/
@Override
public User getSafetyUser(User user) {
@ -181,8 +177,6 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User>
/**
* 获取当前登录用户的信息
* @param request
* @return
*/
@Override
public User getLoginUser(HttpServletRequest request) {
@ -200,9 +194,6 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User>
/**
* 用户修改密码
* @param updatePasswordRequest
* @param request
* @return
*/
@Override
public boolean updateUserPassword(UserUpdatePasswordRequest updatePasswordRequest, HttpServletRequest request) {
@ -210,7 +201,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User>
throw new BusinessException(ErrorCode.NULL_ERROR);
}
/**
/*
* 判断用户是否存在
*/
User logingUser = getLoginUser(request);
@ -220,14 +211,14 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User>
}
String newPassword = updatePasswordRequest.getNewPassword();
/**
* 确认密码
/*
确认密码
*/
if(!newPassword.equals(updatePasswordRequest.getCheckNewPassword())){
throw new BusinessException(ErrorCode.PARAMS_ERROR, "两次输入密码不相同");
}
/**
/*
* 判断修改后的密码是否与原密码相同
*/
User user = new User();
@ -253,7 +244,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User>
}
@Override
/**
/*
* 分页查询
*
* @param searchRequest
@ -324,7 +315,6 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User>
/**
* 判断是否为管理员
* @return
*/
@Override
public void isAdmin(HttpServletRequest request){
@ -333,4 +323,11 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User>
ThrowUtils.throwIf(!(user != null && user.getUserRole() == ADMIN_ROLE) ,ErrorCode.NO_AUTH, "无管理员权限");
}
@Override
public void isBusiness(HttpServletRequest request) {
Object userObj = request.getSession().getAttribute(USER_LOGIN_STATE);
User user = (User) userObj;
ThrowUtils.throwIf(!(user != null && user.getUserRole() == BUSINESS_ROLE) ,ErrorCode.NO_AUTH, "无商家权限");
}
}