package cn.stylefeng.rest.modular.user.controller; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.ListUtil; import cn.hutool.core.util.StrUtil; import cn.stylefeng.guns.modular.business.entity.CounsellingInfo; import cn.stylefeng.guns.modular.business.entity.CounsellingOrderReservation; import cn.stylefeng.guns.modular.business.entity.Course; import cn.stylefeng.guns.modular.business.entity.UserEvaluate; import cn.stylefeng.guns.modular.business.service.*; import cn.stylefeng.roses.kernel.auth.api.context.LoginContext; import cn.stylefeng.roses.kernel.customer.modular.entity.Customer; import cn.stylefeng.roses.kernel.customer.modular.service.CustomerService; import cn.stylefeng.roses.kernel.db.api.factory.PageFactory; import cn.stylefeng.roses.kernel.db.api.factory.PageResultFactory; import cn.stylefeng.roses.kernel.db.api.pojo.page.PageResult; import cn.stylefeng.roses.kernel.rule.annotation.BusinessLog; import cn.stylefeng.roses.kernel.rule.enums.ResBizTypeEnum; import cn.stylefeng.roses.kernel.rule.pojo.response.ErrorResponseData; import cn.stylefeng.roses.kernel.rule.pojo.response.ResponseData; import cn.stylefeng.roses.kernel.rule.pojo.response.SuccessResponseData; import cn.stylefeng.roses.kernel.scanner.api.annotation.ApiResource; import cn.stylefeng.roses.kernel.scanner.api.annotation.GetResource; import cn.stylefeng.roses.kernel.scanner.api.annotation.PostResource; import com.alibaba.druid.sql.visitor.functions.If; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.util.Date; import java.util.List; import java.util.Map; /** * 用户评价表管理类 * @author guo */ @RestController @Api(tags = "用户评价") @ApiResource(name = "用户评价", resBizType = ResBizTypeEnum.BUSINESS) @RequestMapping public class UserEvaluateController { @Resource private IUserEvaluateService userEvaluateService; @Resource private ICourseService courseService; @Resource private ICounsellingInfoService counsellingInfoService; @Resource private CustomerService customerService; /** * 添加用户评价表 */ @ApiOperation("添加用户评价表") @PostResource(name = "添加用户评价表", path = "/userEvaluate/add") public ResponseData add(@RequestBody UserEvaluate userEvaluate) { userEvaluate.setCreateTime(new Date()); userEvaluate.setUpdateTime(new Date()); if (userEvaluate.getUserId() == null){ userEvaluate.setUserId(LoginContext.me().getLoginUser().getUserId()); } this.userEvaluateService.save(userEvaluate); //查询评价评分 Map map = this.userEvaluateService.getMap(new QueryWrapper().select(" IFNULL(AVG(score),0) score ").lambda().eq(UserEvaluate::getBuinessId,userEvaluate.getBuinessId()) .eq(UserEvaluate::getBuinessType,userEvaluate.getBuinessType()).eq(UserEvaluate::getIsDelete,false)); if (map != null){ //计算对应评分 业务类型 1-课程,2-咨询 if (userEvaluate.getBuinessType().intValue() ==1){ if (map.get("score") != null){ this.courseService.update(new LambdaUpdateWrapper().set(Course::getTotalScore,map.get("score")).eq(Course::getId,userEvaluate.getBuinessId())); } }else if (userEvaluate.getBuinessType().intValue() == 2){ if (map.get("score") != null){ this.counsellingInfoService.update(new LambdaUpdateWrapper().set(CounsellingInfo::getTotalScore,map.get("score")).eq(CounsellingInfo::getId,userEvaluate.getBuinessId())); } } } return new SuccessResponseData<>(); } /** * 修改用户评价表 */ @ApiOperation("修改用户评价表") @PostResource(name = "修改用户评价表", path = "/userEvaluate/edit") public ResponseData edit(@RequestBody UserEvaluate userEvaluate) { this.userEvaluateService.updateById(userEvaluate); //判断是否有修改评分 if (userEvaluate.getScore() != null){ //查询评价评分 Map map = this.userEvaluateService.getMap(new QueryWrapper().select(" IFNULL(AVG(score),0) score ").lambda().eq(UserEvaluate::getBuinessId,userEvaluate.getBuinessId()) .eq(UserEvaluate::getBuinessType,userEvaluate.getBuinessType()).eq(UserEvaluate::getIsDelete,false)); if (map != null){ //计算对应评分 业务类型 1-课程,2-咨询 if (userEvaluate.getBuinessType().intValue() ==1){ if (map.get("score") != null){ this.courseService.update(new LambdaUpdateWrapper().set(Course::getTotalScore,map.get("score")).eq(Course::getId,userEvaluate.getBuinessId())); } }else if (userEvaluate.getBuinessType().intValue() == 2){ if (map.get("score") != null){ this.counsellingInfoService.update(new LambdaUpdateWrapper().set(CounsellingInfo::getTotalScore,map.get("score")).eq(CounsellingInfo::getId,userEvaluate.getBuinessId())); } } } } return new SuccessResponseData<>(); } /** * 获取用户评价表列表(分页) */ @ApiOperation(value = "获取用户评价表列表(分页)") @GetResource(name = "获取用户评价表列表(分页)", path = "/userEvaluate/page") @ApiImplicitParams({ @ApiImplicitParam(name = "pageNo", value = "分页:第几页(从1开始)", dataTypeClass = Integer.class, paramType = "query"), @ApiImplicitParam(name = "pageSize", value = "分页:每页大小(默认10)", dataTypeClass = Integer.class, paramType = "query"), @ApiImplicitParam(name = "buinessType", value = "业务类型 1-课程,2-咨询", dataTypeClass = Integer.class, paramType = "query"), @ApiImplicitParam(name = "buinessId", value = "业务id 课程id或咨询人员id", dataTypeClass = Long.class, paramType = "query"), @ApiImplicitParam(name = "userId", value = "评价用户id(查询自己的评价时候使用)", dataTypeClass = Long.class, paramType = "query"), }) public ResponseData> page(Integer pageNo, Integer pageSize, Integer buinessType, Long buinessId,Long userId) { LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper().eq(UserEvaluate::getIsDelete,false) .orderByDesc(UserEvaluate::getUpdateTime); lambdaQueryWrapper.eq(buinessType != null,UserEvaluate::getBuinessType,buinessType); lambdaQueryWrapper.eq(buinessId != null,UserEvaluate::getBuinessId,buinessId); lambdaQueryWrapper.eq(userId != null,UserEvaluate::getUserId,userId); Page page = this.userEvaluateService.page(PageFactory.defaultPage(), lambdaQueryWrapper); if (CollectionUtil.isNotEmpty(page.getRecords())){ page.getRecords().forEach(userEvaluate -> { Customer customer = this.customerService.getById(userEvaluate.getUserId()); if (customer != null){ userEvaluate.setAvatar(customer.getAvatarObjectName()); userEvaluate.setNickName(customer.getNickName()); } }); } return new SuccessResponseData<>(PageResultFactory.createPageResult(page)); } }