新增商家根据等级查询
新增评分功能 新增分组功能
This commit is contained in:
parent
d3b6383e47
commit
e2810d28fb
|
@ -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
|
||||
(
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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,"查询成功");
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 分页查询
|
||||
|
|
|
@ -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);
|
||||
// }
|
||||
|
||||
/**
|
||||
* 删除购物车
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -37,8 +37,6 @@ public class UserController {
|
|||
@Resource
|
||||
private UserService userService;
|
||||
|
||||
@Resource
|
||||
private UserMapper userMapper;
|
||||
|
||||
/**
|
||||
* 用户注册请求接口
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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> {
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
|
@ -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);
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
|
@ -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;
|
||||
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
|
|
|
@ -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;
|
||||
}
|
|
@ -86,4 +86,9 @@ public class BusinessVO implements Serializable {
|
|||
*/
|
||||
private Date createTime;
|
||||
|
||||
/**
|
||||
* 等级
|
||||
*/
|
||||
private Integer level;
|
||||
|
||||
}
|
|
@ -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;
|
||||
}
|
|
@ -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());
|
||||
}
|
||||
}
|
||||
|
|
@ -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();
|
||||
|
||||
}
|
||||
|
|
|
@ -52,4 +52,9 @@ public interface BusinessService extends IService<Business> {
|
|||
* 获取当前登录商家
|
||||
*/
|
||||
Business getLoginBusiness(HttpServletRequest request);
|
||||
|
||||
/**
|
||||
* 查询所有商家
|
||||
*/
|
||||
List<BusinessVO> findAllBusiness();
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
||||
|
||||
}
|
|
@ -57,4 +57,9 @@ public interface ManicuristService extends IService<Manicurist> {
|
|||
* 获取查询条件
|
||||
*/
|
||||
QueryWrapper<Manicurist> getQueryWrapper(ManicuristUpdateRequest manicuristUpdateRequest);
|
||||
|
||||
/**
|
||||
*更新美甲师等级
|
||||
*/
|
||||
public void updateManicuristLevel(Long manicuristId);
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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>
|
|
@ -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>
|
||||
|
|
Loading…
Reference in New Issue
Block a user