新增商家根据等级查询

新增评分功能
新增分组功能
This commit is contained in:
gaomusan 2024-12-17 11:03:48 +08:00
parent d3b6383e47
commit e2810d28fb
27 changed files with 710 additions and 39 deletions

View File

@ -187,7 +187,7 @@ create table if not exists manicurist_auth
-- 预约表
CREATE TABLE IF NOT EXISTS appointments
(
id bigint auto_increment comment '预约ID'primary key,
id bigint auto_increment comment '预约ID' primary key,
userId bigint not null comment '用户ID关联用户表',
userName varchar(100) not null comment '用户姓名',
phone varchar(64) not null comment '手机号',
@ -258,7 +258,7 @@ CREATE TABLE IF NOT EXISTS order_claim
manicuristId BIGINT NOT NULL COMMENT '美甲师ID关联美甲师表',
claimStatus TINYINT DEFAULT 0 NOT NULL COMMENT '抢单状态0 - 待抢单, 1 - 已抢单, 2 - 已分配, 3 - 放弃)',
claimTime DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '抢单时间',
isDelete TINYINT DEFAULT 0 NOT NULL COMMENT '是否删除',
isDelete TINYINT DEFAULT 0 NOT NULL COMMENT '是否删除',
INDEX idx_orderId (orderId),
INDEX idx_manicuristId (manicuristId)
) COMMENT '抢单记录表' COLLATE = utf8mb4_unicode_ci;
@ -266,22 +266,27 @@ CREATE TABLE IF NOT EXISTS order_claim
-- 收藏表
create table collect
(
id bigint auto_increment comment 'id' primary key ,
userId bigint not null comment '用户id',
id bigint auto_increment comment 'id' primary key,
userId bigint not null comment '用户id',
businessId bigint not null comment '商家id'
) comment '收藏';
-- 用户评分表
create table user_rating
(
id bigint auto_increment primary key comment 'id',
businessId bigint not null comment '商家id',
userId bigint not null comment '用户id',
orderId bigint not null comment '订单id',
rating tinyint not null comment '评分',
createTime datetime default CURRENT_TIMESTAMP not null comment '创建时间'
id bigint auto_increment primary key comment 'id',
businessId bigint not null comment '商家id',
userId bigint not null comment '用户id',
manicuristId bigint not null comment '美甲师id',
orderId bigint not null comment '订单id',
rating tinyint not null comment '评分',
manicuristRating tinyint not null comment '美甲师评分',
review varchar(512) null comment '评论',
businessReview varchar(512) null comment '商家回复',
createTime datetime default CURRENT_TIMESTAMP not null comment '创建时间'
) comment '用户评分' collate = utf8mb4_unicode_ci;
-- 商家等级表
create table business_level
(

View File

@ -4,9 +4,11 @@ package com.cj.jiaqingjiayi;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;
@MapperScan("com.cj.jiaqingjiayi.mapper")
@SpringBootApplication
@EnableScheduling
public class JiaqingjiayiApplication {
public static void main(String[] args) {

View File

@ -165,6 +165,17 @@ public class BusinessController {
return new BaseResponse<>(0,businessList,"查询成功");
}
/**
* 查询所有商家
* @return
*/
@ApiOperation(value = "查询所有商家等级版")
@PostMapping("/listLv")
public BaseResponse<List<BusinessVO>> listBusinessAllLv(){
List<BusinessVO> businessList = businessService.findAllBusiness();
return new BaseResponse<>(0,businessList,"查询成功");
}
/**
* 分页查询

View File

@ -86,21 +86,21 @@ public class CartController {
* @param request 网络请求
* @return 是否成功
*/
@ApiOperation(value = "更新购物车")
@PostMapping("/update")
@Transactional(rollbackFor = Exception.class)
public BaseResponse<Boolean> updateCart (@RequestBody CartUpdateRequest cartUpdateRequest, HttpServletRequest request){
if (cartUpdateRequest == null) {
throw new BusinessException(ErrorCode.PARAMS_ERROR);
}
//校验
CartAddRequest cartAddRequest = new CartAddRequest();
BeanUtils.copyProperties(cartUpdateRequest,cartAddRequest);
cartService.validCart(cartAddRequest);
Boolean cart = cartService.updateCart(cartUpdateRequest, request);
return ResultUtils.success(cart);
}
// @ApiOperation(value = "更新购物车")
// @PostMapping("/update")
// @Transactional(rollbackFor = Exception.class)
// public BaseResponse<Boolean> updateCart (@RequestBody CartUpdateRequest cartUpdateRequest, HttpServletRequest request){
// if (cartUpdateRequest == null) {
// throw new BusinessException(ErrorCode.PARAMS_ERROR);
// }
// //校验
// CartAddRequest cartAddRequest = new CartAddRequest();
// BeanUtils.copyProperties(cartUpdateRequest,cartAddRequest);
// cartService.validCart(cartAddRequest);
//
// Boolean cart = cartService.updateCart(cartUpdateRequest, request);
// return ResultUtils.success(cart);
// }
/**
* 删除购物车

View File

@ -0,0 +1,82 @@
package com.cj.jiaqingjiayi.controller;
import com.cj.jiaqingjiayi.common.BaseResponse;
import com.cj.jiaqingjiayi.common.ErrorCode;
import com.cj.jiaqingjiayi.common.ResultUtils;
import com.cj.jiaqingjiayi.exception.ThrowUtils;
import com.cj.jiaqingjiayi.model.domain.CommoditiesGroup;
import com.cj.jiaqingjiayi.model.request.group.AddGroupRequest;
import com.cj.jiaqingjiayi.model.vo.GroupVO;
import com.cj.jiaqingjiayi.service.CommoditiesGroupService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
@Slf4j
@Api(tags = "分组接口")
@RestController
@RequestMapping("/group")
public class GroupController {
@Resource
private CommoditiesGroupService groupService;
/**
*添加分组
*/
@ApiOperation(value = "添加分组")
@PostMapping("/add")
public BaseResponse<Long> addGroup(@RequestBody AddGroupRequest addGroupRequest){
ThrowUtils.throwIf(addGroupRequest == null, ErrorCode.NULL_ERROR);
CommoditiesGroup group = new CommoditiesGroup();
BeanUtils.copyProperties(addGroupRequest, group);
groupService.validGroup(group, true);
Long added = groupService.addGroup(group);
ThrowUtils.throwIf(added < 0, ErrorCode.OPERATION_ERROR);
return ResultUtils.success(added);
}
/**
*删除分组
*/
@ApiOperation(value = "删除分组")
@GetMapping("/delete")
public BaseResponse<Boolean> deleteGroup(@RequestParam String groupName){
ThrowUtils.throwIf(groupName == null, ErrorCode.NULL_ERROR);
CommoditiesGroup group = new CommoditiesGroup();
group.setGroupName(groupName);
groupService.validGroup(group, false);
Boolean deleted = groupService.deleteGroup(groupName);
ThrowUtils.throwIf(!deleted, ErrorCode.OPERATION_ERROR);
return ResultUtils.success(true);
}
/**
*查询分组视图
*/
@ApiOperation(value = "查询分组")
@GetMapping("/queryGroupVO")
public BaseResponse<List<GroupVO>> queryGroup(){
List<CommoditiesGroup> list = groupService.list();
List<GroupVO> groupVO = groupService.getGroupVO(list);
return ResultUtils.success(groupVO);
}
}

View File

@ -37,8 +37,6 @@ public class UserController {
@Resource
private UserService userService;
@Resource
private UserMapper userMapper;
/**
* 用户注册请求接口

View File

@ -10,10 +10,13 @@ import com.cj.jiaqingjiayi.exception.BusinessException;
import com.cj.jiaqingjiayi.exception.ThrowUtils;
import com.cj.jiaqingjiayi.model.CommonRequest;
import com.cj.jiaqingjiayi.model.domain.User;
import com.cj.jiaqingjiayi.model.domain.UserRating;
import com.cj.jiaqingjiayi.model.request.userRating.UserRatingAddRequest;
import com.cj.jiaqingjiayi.service.UserRatingService;
import com.cj.jiaqingjiayi.service.UserService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.web.bind.annotation.PostMapping;
@ -25,6 +28,7 @@ import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
@Api(tags = "用户评分接口")
@RestController
@Slf4j
@RequestMapping("/level")
@ -42,6 +46,7 @@ public class UserRatingController {
* @param request 当期那登录用户
* @return 是否添加成功
*/
@ApiOperation(value = "添加用户评分")
@PostMapping("/add")
public BaseResponse<Boolean> addRating (@RequestBody UserRatingAddRequest userRatingAddRequest, HttpServletRequest request) {
if (userRatingAddRequest == null) {
@ -61,6 +66,7 @@ public class UserRatingController {
* @param commonRequest 用户评分id
* @return 是否删除成功
*/
@ApiOperation(value = "删除用户评分")
@PostMapping("/delete")
public BaseResponse<Boolean> deleteUserRating (@RequestBody CommonRequest commonRequest) {
if (commonRequest == null) {
@ -77,6 +83,7 @@ public class UserRatingController {
* @param request 当前用户
* @return 评分列表
*/
@ApiOperation(value = "展示用户评分")
@PostMapping("/list")
public BaseResponse<List<UserRating>> listUserRating (HttpServletRequest request) {
User loginUser = userService.getLoginUser(request);

View File

@ -0,0 +1,18 @@
package com.cj.jiaqingjiayi.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.cj.jiaqingjiayi.model.domain.CommoditiesGroup;
/**
* @author 高木
* @description 针对表commodities_group(商品分组表)的数据库操作Mapper
* @createDate 2024-12-17 08:52:35
* @Entity generator.domain.CommoditiesGroup
*/
public interface CommoditiesGroupMapper extends BaseMapper<CommoditiesGroup> {
}

View File

@ -1,7 +1,9 @@
package com.cj.jiaqingjiayi.mapper;
import com.cj.jiaqingjiayi.model.domain.UserRating;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.cj.jiaqingjiayi.model.domain.UserRating;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
/**
* @author 高木
@ -11,6 +13,13 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
*/
public interface UserRatingMapper extends BaseMapper<UserRating> {
@Select("select avg(rating) from jqjy.user_rating where businessId = #{businessId}")
Double findAvgByBusinessId(@Param("businessId") Long businessId);
@Select("select avg(manicuristRating) from jqjy.user_rating where manicuristId = #{manicuristId}")
Double findAvgByManicuristId(@Param("manicuristId") Long manicuristId);
}

View File

@ -0,0 +1,57 @@
package com.cj.jiaqingjiayi.model.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* 商品分组表
* @TableName commodities_group
*/
@TableName(value ="commodities_group")
@Data
public class CommoditiesGroup implements Serializable {
/**
* id
*/
@TableId(type = IdType.AUTO)
private Long id;
/**
* 商家id
*/
private Long businessId;
/**
* 商品分组名称
*/
private String groupName;
/**
* 是否置顶:0不置顶,1置顶
*/
private Integer isTopping;
/**
* 创建时间
*/
private Date createTime;
/**
* 更新时间
*/
private Date updateTime;
/**
* 是否删除
*/
private Integer isDelete;
@TableField(exist = false)
private static final long serialVersionUID = 1L;
}

View File

@ -4,9 +4,10 @@ import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
import lombok.Data;
/**
* 用户评分
@ -31,6 +32,11 @@ public class UserRating implements Serializable {
*/
private Long userId;
/**
* 美甲师ID关联美甲师表
*/
private Long manicuristId;
/**
* 订单id
*/
@ -41,6 +47,21 @@ public class UserRating implements Serializable {
*/
private Integer rating;
/**
* 美甲师评分
*/
private Integer manicuristRating;
/**
* 评论
*/
private String review;
/**
* 商家回复
*/
private String businessReview;
/**
* 创建时间
*/

View File

@ -0,0 +1,24 @@
package com.cj.jiaqingjiayi.model.request.group;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
@Data
public class AddGroupRequest {
/**
* 商家id
*/
private Long businessId;
/**
* 商品分组名称
*/
private String groupName;
/**
* 是否置顶:0不置顶,1置顶
*/
private Integer isTopping;
}

View File

@ -86,4 +86,9 @@ public class BusinessVO implements Serializable {
*/
private Date createTime;
/**
* 等级
*/
private Integer level;
}

View File

@ -0,0 +1,28 @@
package com.cj.jiaqingjiayi.model.vo;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
@Data
public class GroupVO {
/**
* id
*/
private Long id;
/**
* 商家id
*/
private Long businessId;
/**
* 商品分组名称
*/
private String groupName;
/**
* 是否置顶:0不置顶,1置顶
*/
private Integer isTopping;
}

View File

@ -0,0 +1,50 @@
package com.cj.jiaqingjiayi.scheduler;
import com.cj.jiaqingjiayi.model.domain.Business;
import com.cj.jiaqingjiayi.model.domain.Manicurist;
import com.cj.jiaqingjiayi.service.BusinessLevelService;
import com.cj.jiaqingjiayi.service.BusinessService;
import com.cj.jiaqingjiayi.service.ManicuristService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Date;
import java.util.List;
@Component
@Slf4j
public class UpdateBusiness {
@Resource
private BusinessService businessService;
@Resource
private ManicuristService manicuristService;
@Resource
private BusinessLevelService businessLevelService;
@Scheduled(cron = "0 0 0 * * ?")
public void updateBusinessLevels() {
List<Business> list = businessService.list();
for (Business business : list) {
businessLevelService.updateBusinessLevel(business.getId());
}
log.info("更新时间:" + new Date());
}
@Scheduled(cron = "0 0 0 * * ?")
public void updateManicuristLevels() {
List<Manicurist> list = manicuristService.list();
for (Manicurist manicurist : list) {
manicuristService.updateManicuristLevel(manicurist.getId());
}
log.info("更新时间:" + new Date());
}
}

View File

@ -3,6 +3,8 @@ package com.cj.jiaqingjiayi.service;
import com.cj.jiaqingjiayi.model.domain.BusinessLevel;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
/**
* @author 高木
* @description 针对表business_level的数据库操作Service
@ -10,4 +12,14 @@ import com.baomidou.mybatisplus.extension.service.IService;
*/
public interface BusinessLevelService extends IService<BusinessLevel> {
/**
* 更新商家等级
*/
void updateBusinessLevel(Long businessId);
/**
* 查询所有商家
*/
List<BusinessLevel> findAllOrdered();
}

View File

@ -52,4 +52,9 @@ public interface BusinessService extends IService<Business> {
* 获取当前登录商家
*/
Business getLoginBusiness(HttpServletRequest request);
/**
* 查询所有商家
*/
List<BusinessVO> findAllBusiness();
}

View File

@ -0,0 +1,43 @@
package com.cj.jiaqingjiayi.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.cj.jiaqingjiayi.model.domain.CommoditiesGroup;
import com.cj.jiaqingjiayi.model.vo.GroupVO;
import java.util.List;
/**
* @author 高木
* @description 针对表commodities_group(商品分组表)的数据库操作Service
* @createDate 2024-12-17 08:52:35
*/
public interface CommoditiesGroupService extends IService<CommoditiesGroup> {
/**
* 添加分组
*/
Long addGroup(CommoditiesGroup commoditiesGroup);
/**
*删除分组
*/
Boolean deleteGroup(String groupName);
/**
* 获取分组视图
*/
GroupVO getGroupVO(CommoditiesGroup group);
/**
*获取分组视图列表
*/
List<GroupVO> getGroupVO(List<CommoditiesGroup> commoditiesGroupList);
/**
*校验
*/
void validGroup(CommoditiesGroup commoditiesGroup, Boolean flag);
}

View File

@ -57,4 +57,9 @@ public interface ManicuristService extends IService<Manicurist> {
* 获取查询条件
*/
QueryWrapper<Manicurist> getQueryWrapper(ManicuristUpdateRequest manicuristUpdateRequest);
/**
*更新美甲师等级
*/
public void updateManicuristLevel(Long manicuristId);
}

View File

@ -1,7 +1,7 @@
package com.cj.jiaqingjiayi.service;
import com.cj.jiaqingjiayi.model.domain.UserRating;
import com.baomidou.mybatisplus.extension.service.IService;
import com.cj.jiaqingjiayi.model.domain.UserRating;
import javax.servlet.http.HttpServletRequest;

View File

@ -1,20 +1,81 @@
package com.cj.jiaqingjiayi.service.impl;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.cj.jiaqingjiayi.mapper.UserRatingMapper;
import com.cj.jiaqingjiayi.model.domain.BusinessLevel;
import com.cj.jiaqingjiayi.service.BusinessLevelService;
import com.cj.jiaqingjiayi.mapper.BusinessLevelMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.List;
/**
* @author 高木
* @description 针对表business_level的数据库操作Service实现
* @createDate 2024-12-02 14:13:25
*/
@Service
@Slf4j
public class BusinessLevelServiceImpl extends ServiceImpl<BusinessLevelMapper, BusinessLevel>
implements BusinessLevelService{
@Resource
private BusinessLevelMapper businessLevelMapper;
@Resource
private UserRatingMapper userRatingMapper;
@Override
public void updateBusinessLevel(Long businessId) {
Double avg = userRatingMapper.findAvgByBusinessId(businessId);
if (avg == null) {
avg = 1.0;
log.info("warn: avg没有值将赋初始值1" + avg);
log.info("当前商家id" + businessId);
}
int level = calculateLevel(avg);
BusinessLevel businessLevel = businessLevelMapper.selectOne(Wrappers.<BusinessLevel>lambdaQuery()
.eq(BusinessLevel::getBusinessId, businessId));
if (businessLevel == null) {
businessLevel = new BusinessLevel();
businessLevel.setBusinessId(businessId);
businessLevel.setLevel(1);
businessLevel.setAverageScore(BigDecimal.valueOf(1));
}
businessLevel.setAverageScore(BigDecimal.valueOf(avg));
businessLevel.setLevel(level);
this.saveOrUpdate(businessLevel);
}
@Override
public List<BusinessLevel> findAllOrdered() {
List<BusinessLevel> list = businessLevelMapper.selectList(Wrappers.<BusinessLevel>lambdaQuery()
.orderByDesc(BusinessLevel::getLevel,BusinessLevel::getAverageScore)
.orderByAsc(BusinessLevel::getCreateTime));
return list;
}
private int calculateLevel(Double averageScore) {
if (averageScore >= 4.5) {
return 5;
} else if (averageScore >= 4.0) {
return 4;
} else if (averageScore >= 3.0) {
return 3;
} else if (averageScore >= 2.0) {
return 2;
} else {
return 1;
}
}
}

View File

@ -9,14 +9,12 @@ 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.BusinessAuth;
import com.cj.jiaqingjiayi.model.domain.BusinessLevel;
import com.cj.jiaqingjiayi.model.domain.User;
import com.cj.jiaqingjiayi.model.request.business.BusinessQueryRequest;
import com.cj.jiaqingjiayi.model.vo.BusinessVO;
import com.cj.jiaqingjiayi.service.BusinessAuthService;
import com.cj.jiaqingjiayi.service.BusinessService;
import com.cj.jiaqingjiayi.service.*;
import com.cj.jiaqingjiayi.mapper.BusinessMapper;
import com.cj.jiaqingjiayi.service.ManicuristService;
import com.cj.jiaqingjiayi.service.UserService;
import com.cj.jiaqingjiayi.utils.RegexUtils;
import com.cj.jiaqingjiayi.utils.SqlUtils;
import org.apache.commons.lang3.ObjectUtils;
@ -28,7 +26,9 @@ import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
@ -43,6 +43,11 @@ public class BusinessServiceImpl extends ServiceImpl<BusinessMapper, Business>
@Resource
private UserService userService;
@Resource
private BusinessMapper businessMapper;
@Resource
private BusinessLevelService businessLevelService;
@Resource
private BusinessAuthService businessAuthService;
@ -210,6 +215,34 @@ public class BusinessServiceImpl extends ServiceImpl<BusinessMapper, Business>
return business;
}
@Override
public List<BusinessVO> findAllBusiness() {
List<BusinessLevel> businessLevels = businessLevelService.findAllOrdered();
// 获取商家 ID 列表
List<Long> businessIds = businessLevels.stream()
.map(BusinessLevel::getBusinessId)
.distinct()
.collect(Collectors.toList());
List<Business> businesses = businessMapper.selectBatchIds(businessIds);
//将商家等级信息映射到商家实体
Map<Long, Integer> levelMap = businessLevels.stream()
.collect(Collectors.toMap(BusinessLevel::getBusinessId, BusinessLevel::getLevel));
// Step 5: 构建 BusinessVO 并将等级添加到商家数据中
List<BusinessVO> businessVOs = businesses.stream()
.map(business -> {
BusinessVO vo = new BusinessVO();
BeanUtils.copyProperties(business, vo); // 自动复制 Business BusinessVO
vo.setLevel(levelMap.getOrDefault(business.getId(), 1)); // 设置等级
return vo;
})
// Step 6: 按等级排序
.sorted(Comparator.comparingLong(BusinessVO::getLevel).reversed()) // 按等级降序排序
.collect(Collectors.toList());
return businessVOs;
}
}

View File

@ -0,0 +1,115 @@
package com.cj.jiaqingjiayi.service.impl;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
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.CommoditiesGroup;
import com.cj.jiaqingjiayi.model.vo.BusinessVO;
import com.cj.jiaqingjiayi.model.vo.GroupVO;
import com.cj.jiaqingjiayi.service.CommoditiesGroupService;
import com.cj.jiaqingjiayi.mapper.CommoditiesGroupMapper;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
* @author 高木
* @description 针对表commodities_group(商品分组表)的数据库操作Service实现
* @createDate 2024-12-17 08:52:35
*/
@Service
public class CommoditiesGroupServiceImpl extends ServiceImpl<CommoditiesGroupMapper, CommoditiesGroup>
implements CommoditiesGroupService{
/**
* 添加分组
*/
@Transactional(rollbackFor = Exception.class)
@Override
public Long addGroup(CommoditiesGroup commoditiesGroup) {
ThrowUtils.throwIf(commoditiesGroup == null, ErrorCode.SYSTEM_ERROR);
boolean save = this.save(commoditiesGroup);
return commoditiesGroup.getId();
}
/**
* 删除分组
*/
@Transactional(rollbackFor = Exception.class)
@Override
public Boolean deleteGroup(String groupName) {
ThrowUtils.throwIf(groupName == null, ErrorCode.SYSTEM_ERROR);
QueryWrapper<CommoditiesGroup> wrapper = new QueryWrapper<>();
wrapper.eq("groupName", groupName);
return this.remove(wrapper);
}
/**
* 校验分组
*/
@Override
public void validGroup(CommoditiesGroup commoditiesGroup, Boolean flag) {
ThrowUtils.throwIf(commoditiesGroup == null, ErrorCode.SYSTEM_ERROR);
QueryWrapper<CommoditiesGroup> queryWrapper = new QueryWrapper<>();
//只在添加时校验是否存在
if(flag) {
queryWrapper.eq("groupName", commoditiesGroup.getGroupName());
long count = this.count(queryWrapper);
if(count > 0 ) {
throw new BusinessException(ErrorCode.PARAMS_ERROR, "已存在该分类");
}
}
//校验要删除的分组是否存在
if(!flag) {
queryWrapper.eq("groupName", commoditiesGroup.getGroupName());
long count = this.count(queryWrapper);
if(count < 1 ) {
throw new BusinessException(ErrorCode.PARAMS_ERROR, "不存在该分组");
}
}
}
@Override
public GroupVO getGroupVO(CommoditiesGroup commoditiesGroup) {
GroupVO groupVO = new GroupVO();
if (commoditiesGroup == null) {
return null;
}
BeanUtils.copyProperties(commoditiesGroup,groupVO);
return groupVO;
}
@Override
public List<GroupVO> getGroupVO(List<CommoditiesGroup> commoditiesGroupList) {
if (CollectionUtils.isEmpty(commoditiesGroupList)) {
return new ArrayList<>();
}
return commoditiesGroupList.stream().map(this::getGroupVO).collect(Collectors.toList());
}
}

View File

@ -1,21 +1,26 @@
package com.cj.jiaqingjiayi.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.cj.jiaqingjiayi.common.ErrorCode;
import com.cj.jiaqingjiayi.contant.CommonConstant;
import com.cj.jiaqingjiayi.exception.BusinessException;
import com.cj.jiaqingjiayi.exception.ThrowUtils;
import com.cj.jiaqingjiayi.mapper.UserRatingMapper;
import com.cj.jiaqingjiayi.model.domain.*;
import com.cj.jiaqingjiayi.model.request.manicurist.ManicuristQueryRequest;
import com.cj.jiaqingjiayi.model.request.manicurist.ManicuristUpdateRequest;
import com.cj.jiaqingjiayi.model.vo.ManicuristVO;
import com.cj.jiaqingjiayi.service.*;
import com.cj.jiaqingjiayi.mapper.ManicuristMapper;
import com.cj.jiaqingjiayi.utils.BeanCopyUtils;
import com.cj.jiaqingjiayi.utils.RegexUtils;
import com.cj.jiaqingjiayi.utils.SqlUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import org.bouncycastle.jcajce.provider.asymmetric.util.PrimeCertaintyCalculator;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -35,6 +40,7 @@ import static com.cj.jiaqingjiayi.contant.UserConstant.USER_SALT;
* @author 高木
*/
@Service
@Slf4j
public class ManicuristServiceImpl extends ServiceImpl<ManicuristMapper, Manicurist>
implements ManicuristService{
@ -44,6 +50,12 @@ public class ManicuristServiceImpl extends ServiceImpl<ManicuristMapper, Manicur
@Resource
private BusinessService businessService;
@Resource
private ManicuristMapper manicuristMapper;
@Resource
private UserRatingMapper userRatingMapper;
@Resource
private ManicuristAuthService manicuristAuthService;
@ -272,6 +284,47 @@ public class ManicuristServiceImpl extends ServiceImpl<ManicuristMapper, Manicur
return queryWrapper;
}
@Override
public void updateManicuristLevel(Long manicuristId) {
Double avg = userRatingMapper.findAvgByManicuristId(manicuristId);
if (avg == null) {
avg = 1.0;
log.info("warn: avg没有值将赋初始值1" + avg);
log.info("当前美甲师id" + manicuristId);
}
int level = calculateLevel(avg);
Manicurist manicurist = manicuristMapper.selectOne(Wrappers.<Manicurist>lambdaQuery()
.eq(Manicurist::getId, manicuristId));
if (manicurist.getRating() == null) {
// businessLevel = new BusinessLevel();
// businessLevel.setBusinessId(businessId);
BigDecimal bigDecimalValue = BigDecimal.valueOf(1);
manicurist.setRating(bigDecimalValue);
// businessLevel.setAverageScore(BigDecimal.valueOf(1));
}
manicurist.setRating(BigDecimal.valueOf(level));
Manicurist Lv = new Manicurist();
BeanCopyUtils.copyPropertiesIgnoreEmpty(manicurist, Lv);
this.saveOrUpdate(Lv);
}
private int calculateLevel(Double averageScore) {
if (averageScore >= 4.5) {
return 5;
} else if (averageScore >= 4.0) {
return 4;
} else if (averageScore >= 3.0) {
return 3;
} else if (averageScore >= 2.0) {
return 2;
} else {
return 1;
}
}
}

View File

@ -21,6 +21,9 @@ server:
port: 8080
servlet:
context-path: /api
session:
timeout: 86400s
mybatis-plus:
configuration:
map-underscore-to-camel-case: false
@ -31,10 +34,6 @@ mybatis-plus:
logic-delete-value: 1
logic-not-delete-value: 0
session:
timeout: 86400
aliyun:
oss:
file:

View File

@ -0,0 +1,22 @@
<?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.cj.jiaqingjiayi.mapper.CommoditiesGroupMapper">
<resultMap id="BaseResultMap" type="com.cj.jiaqingjiayi.model.domain.CommoditiesGroup">
<id property="id" column="id" jdbcType="BIGINT"/>
<result property="businessId" column="businessId" jdbcType="BIGINT"/>
<result property="groupName" column="groupName" jdbcType="VARCHAR"/>
<result property="isTopping" column="isTopping" jdbcType="TINYINT"/>
<result property="createTime" column="createTime" jdbcType="TIMESTAMP"/>
<result property="updateTime" column="updateTime" jdbcType="TIMESTAMP"/>
<result property="isDelete" column="isDelete" jdbcType="TINYINT"/>
</resultMap>
<sql id="Base_Column_List">
id,businessId,groupName,
isTopping,createTime,updateTime,
isDelete
</sql>
</mapper>

View File

@ -8,13 +8,19 @@
<id property="id" column="id" jdbcType="BIGINT"/>
<result property="businessId" column="businessId" jdbcType="BIGINT"/>
<result property="userId" column="userId" jdbcType="BIGINT"/>
<result property="manicuristId" column="manicuristId" jdbcType="BIGINT"/>
<result property="orderId" column="orderId" jdbcType="BIGINT"/>
<result property="rating" column="rating" jdbcType="TINYINT"/>
<result property="manicuristRating" column="manicuristRating" jdbcType="TINYINT"/>
<result property="review" column="review" jdbcType="VARCHAR"/>
<result property="businessReview" column="businessReview" jdbcType="VARCHAR"/>
<result property="createTime" column="createTime" jdbcType="TIMESTAMP"/>
</resultMap>
<sql id="Base_Column_List">
id,businessId,userId,
orderId,rating,createTime
manicuristId,orderId,rating,
manicuristRating,review,businessReview,
createTime
</sql>
</mapper>