package com.zhongzheng.controller.goods; import cn.hutool.core.lang.Validator; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.zhongzheng.common.core.controller.BaseController; import com.zhongzheng.common.core.domain.AjaxResult; import com.zhongzheng.common.core.page.PageDomain; import com.zhongzheng.common.core.page.TableDataInfo; import com.zhongzheng.common.core.page.TableSupport; import com.zhongzheng.common.exception.CustomException; import com.zhongzheng.common.utils.ServletUtils; import com.zhongzheng.framework.web.service.WxTokenService; import com.zhongzheng.modules.bank.bo.QuestionChapterExamQueryBo; import com.zhongzheng.modules.bank.bo.QuestionModuleChapterQueryBo; import com.zhongzheng.modules.bank.service.IQuestionChapterExamService; import com.zhongzheng.modules.bank.service.IQuestionModuleChapterService; import com.zhongzheng.modules.bank.service.IQuestionService; import com.zhongzheng.modules.bank.vo.ExamVo; import com.zhongzheng.modules.bank.vo.QuestionChapterVo; import com.zhongzheng.modules.collect.bo.CollectQuestionQueryBo; import com.zhongzheng.modules.collect.service.ICollectQuestionService; import com.zhongzheng.modules.course.bo.CourseQueryBo; import com.zhongzheng.modules.course.service.ICourseSectionService; import com.zhongzheng.modules.course.vo.CourseLiveVo; import com.zhongzheng.modules.course.vo.CourseSectionVo; import com.zhongzheng.modules.exam.domain.ExamPaper; import com.zhongzheng.modules.exam.service.IExamPaperService; import com.zhongzheng.modules.goods.bo.*; import com.zhongzheng.modules.goods.service.IGoodsAttachedService; import com.zhongzheng.modules.goods.service.IGoodsService; import com.zhongzheng.modules.goods.service.IGoodsSpecTemplateService; import com.zhongzheng.modules.goods.vo.*; import com.zhongzheng.modules.grade.bo.UserPeriodQueryBo; import com.zhongzheng.modules.grade.service.IUserPeriodService; import com.zhongzheng.modules.order.domain.OrderGoods; import com.zhongzheng.modules.order.domain.OrderGoodsFree; import com.zhongzheng.modules.order.service.IOrderGoodsFreeService; import com.zhongzheng.modules.order.service.IOrderGoodsService; import com.zhongzheng.modules.order.vo.OrderGoodsVo; import com.zhongzheng.modules.user.bo.UserExamRecordQueryBo; import com.zhongzheng.modules.user.bo.UserExamWrongRecordQueryBo; import com.zhongzheng.modules.user.entity.ClientLoginUser; import com.zhongzheng.modules.user.service.IUserExamRecordService; import com.zhongzheng.modules.user.service.IUserExamWrongRecordService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.util.*; /** * 商品Controller * * @author hjl * @date 2021-10-12 */ @Api(value = "商品控制器", tags = {"商品管理"}) @RequiredArgsConstructor(onConstructor_ = @Autowired) @RestController @RequestMapping("/goods") public class GoodsController extends BaseController { private final IGoodsService iGoodsService; private final IGoodsAttachedService iGoodsAttachedService; private final WxTokenService wxTokenService; private final IUserExamRecordService iUserExamRecordService; private final IUserExamWrongRecordService iUserExamWrongRecordService; private final ICollectQuestionService iCollectQuestionService; private final IQuestionModuleChapterService iQuestionModuleChapterService; private final IQuestionChapterExamService iQuestionChapterExamService; private final IUserPeriodService iUserPeriodService; private final IOrderGoodsService iOrderGoodsService; private final ICourseSectionService iCourseSectionService; private final IOrderGoodsFreeService iOrderGoodsFreeService; private final IExamPaperService iExamPaperService; /** * 获取商品详细信息 */ @ApiOperation("获取商品详细信息") @GetMapping("/{goodsId}") public AjaxResult getInfo(@PathVariable("goodsId" ) Long goodsId) { CourseQueryBo bo = new CourseQueryBo(); ClientLoginUser loginUser = wxTokenService.getLoginUser(ServletUtils.getRequest()); bo.setUserId(loginUser.getUser().getUserId()); bo.setGoodsId(goodsId); return AjaxResult.success(iGoodsService.selectUserDetail(bo)); } /** * 获取商品详细信息 */ @ApiOperation("获取题库订单商品题目数统计信息") @GetMapping("/bank/questionNum/{orderGoodsId}") public AjaxResult> questionNum(@PathVariable("orderGoodsId" ) Long orderGoodsId) { ClientLoginUser loginUser = wxTokenService.getLoginUser(ServletUtils.getRequest()); Map numMap = new HashMap<>(); UserExamWrongRecordQueryBo wBo = new UserExamWrongRecordQueryBo(); wBo.setOrderGoodsId(orderGoodsId); wBo.setUserId(loginUser.getUser().getUserId()); wBo.setDoMode(1L); Long wrongNum = iUserExamWrongRecordService.recordNum(wBo); numMap.put("wrongNum",wrongNum); CollectQuestionQueryBo collectQuestionQueryBo = new CollectQuestionQueryBo(); collectQuestionQueryBo.setOrderGoodsId(orderGoodsId); collectQuestionQueryBo.setUserId(loginUser.getUser().getUserId()); collectQuestionQueryBo.setDoMode(1L); Integer collectNum = iCollectQuestionService.collectNum(collectQuestionQueryBo); numMap.put("collectNum",collectNum); UserExamRecordQueryBo userExamRecordQueryBo = new UserExamRecordQueryBo(); userExamRecordQueryBo.setOrderGoodsId(orderGoodsId); userExamRecordQueryBo.setUserId(loginUser.getUser().getUserId()); userExamRecordQueryBo.setDoMode(1L); Long doNum = iUserExamRecordService.selectDoNum(userExamRecordQueryBo); numMap.put("doNum",doNum); userExamRecordQueryBo.setOrderGoodsId(orderGoodsId); userExamRecordQueryBo.setUserId(loginUser.getUser().getUserId()); userExamRecordQueryBo.setDoMode(1L); Long rightNum = iUserExamRecordService.selectRightNum(userExamRecordQueryBo); numMap.put("rightNum",rightNum); OrderGoods orderGoods = iOrderGoodsService.getOne(new LambdaQueryWrapper() .eq(OrderGoods::getOrderGoodsId, orderGoodsId)); if(Validator.isNotEmpty(orderGoods)){ OrderGoodsFree goodsFree = iOrderGoodsFreeService.getOne(new LambdaQueryWrapper() .eq(OrderGoodsFree::getOrderGoodsId, orderGoodsId)); Long goodsId = null; if(Validator.isNotEmpty(goodsFree)){ goodsId = goodsFree.getFreeGoodsId(); //存在免费赠送题库商品 }else{ goodsId = orderGoods.getGoodsId(); } Long totalNum = iGoodsService.getQuestionNum(goodsId); numMap.put("totalNum",totalNum); } return AjaxResult.success(numMap); } @ApiOperation("获取题库订单商品随机练习题目数统计信息") @GetMapping("/bank/questionTempNum/{orderGoodsId}") public AjaxResult> questionTempNum(@PathVariable("orderGoodsId" ) Long orderGoodsId) { ClientLoginUser loginUser = wxTokenService.getLoginUser(ServletUtils.getRequest()); Map numMap = new HashMap<>(); ExamPaper examPaper = iExamPaperService.getOne(new LambdaQueryWrapper().eq(ExamPaper::getStatus, 1).eq(ExamPaper::getPaperName,"随机练习").last("limit 1")); if(Validator.isEmpty(examPaper)){ throw new CustomException("系统不存在随机练习试卷类型"); } UserExamRecordQueryBo userExamRecordQueryBo = new UserExamRecordQueryBo(); userExamRecordQueryBo.setOrderGoodsId(orderGoodsId); userExamRecordQueryBo.setUserId(loginUser.getUser().getUserId()); userExamRecordQueryBo.setDoMode(2L); Long doNum = iUserExamRecordService.selectDoNum(userExamRecordQueryBo); numMap.put("doNum",doNum); userExamRecordQueryBo.setOrderGoodsId(orderGoodsId); userExamRecordQueryBo.setUserId(loginUser.getUser().getUserId()); userExamRecordQueryBo.setDoMode(2L); Long rightNum = iUserExamRecordService.selectRightNum(userExamRecordQueryBo); numMap.put("rightNum",rightNum); OrderGoods orderGoods = iOrderGoodsService.getOne(new LambdaQueryWrapper() .eq(OrderGoods::getOrderGoodsId, orderGoodsId)); if(Validator.isNotEmpty(orderGoods)){ Long goodsId = orderGoods.getGoodsId(); Long totalNum = iGoodsService.getRandomQuestionNum(goodsId,examPaper.getPaperId()); numMap.put("totalNum",totalNum); } return AjaxResult.success(numMap); } @ApiOperation("查询商品题库目录列表") @GetMapping("/bank/list") public AjaxResult> bankList(GoodsAttachedQueryBo bo) { ClientLoginUser loginUser = wxTokenService.getLoginUser(ServletUtils.getRequest()); bo.setUserId(loginUser.getUser().getUserId()); List list = iGoodsAttachedService.getList(bo); return AjaxResult.success(list); } @ApiOperation("查询商品题库做过目录列表") @GetMapping("/bank/dolist") public AjaxResult> bankDoList(GoodsAttachedQueryBo bo) { ClientLoginUser loginUser = wxTokenService.getLoginUser(ServletUtils.getRequest()); bo.setUserId(loginUser.getUser().getUserId()); List list = iGoodsAttachedService.selectDoList(bo); return AjaxResult.success(list); } /** * 查询关联章卷列表 */ @ApiOperation("查询模块卷关联章卷做过列表") @GetMapping("/chapter/dolist") public AjaxResult> chapterDoList(QuestionModuleChapterQueryBo bo) { ClientLoginUser loginUser = wxTokenService.getLoginUser(ServletUtils.getRequest()); bo.setUserId(loginUser.getUser().getUserId()); List list = iQuestionModuleChapterService.getDoList(bo); return AjaxResult.success(list); } /** * 查询关联试卷列表 */ @ApiOperation("查询章卷关联试卷做过列表") @GetMapping("/exam/dolist") public AjaxResult> examDoList(QuestionChapterExamQueryBo bo) { ClientLoginUser loginUser = wxTokenService.getLoginUser(ServletUtils.getRequest()); bo.setUserId(loginUser.getUser().getUserId()); List list = iQuestionChapterExamService.getDoList(bo); return AjaxResult.success(list); } /** * 查询用户商品今天学习节数 */ @ApiOperation("查询用户商品今天学习节数") @GetMapping("/todayStudySectionNum") public AjaxResult todayStudySectionNum(UserPeriodQueryBo bo) { ClientLoginUser loginUser = wxTokenService.getLoginUser(ServletUtils.getRequest()); bo.setUserId(loginUser.getUser().getUserId()); return AjaxResult.success(iUserPeriodService.todayStudySectionNum(bo)); } /** * 查询商品列表 */ @ApiOperation("查询用户拥有直播商品") @GetMapping("/listGoodsUserLive") public TableDataInfo listGoodsUserQuestionVo(GoodsQueryBo bo) { startPage(); ClientLoginUser loginUser = wxTokenService.getLoginUser(ServletUtils.getRequest()); bo.setUserId(loginUser.getUser().getUserId()); List list = iOrderGoodsService.listGoodsUserLive(bo); return getDataTable(list); } /** * 查询商品列表 */ @ApiOperation("查询用户拥有视频+直播商品") @GetMapping("/listUserVideoLive") public TableDataInfo listUserVideoLive(GoodsQueryBo bo) { startPage(); ClientLoginUser loginUser = wxTokenService.getLoginUser(ServletUtils.getRequest()); bo.setUserId(loginUser.getUser().getUserId()); List list = iOrderGoodsService.listUserVideoLive(bo); return getDataTable(list); } /** * 获取商品详细信息 */ @ApiOperation("查询用户有哪些商品节正在直播") @GetMapping("/livingSectionList") public AjaxResult> livingSectionList() { ClientLoginUser loginUser = wxTokenService.getLoginUser(ServletUtils.getRequest()); return AjaxResult.success(iCourseSectionService.livingSectionList(loginUser.getUser().getUserId())); } /** * 获取直播提醒列表 */ @ApiOperation("获取直播提醒列表") @GetMapping("/getLiveList") public TableDataInfo liveList() { startPage(); ClientLoginUser loginUser = wxTokenService.getLoginUser(ServletUtils.getRequest()); List list = iOrderGoodsService.getLiveList(loginUser.getUser().getUserId()); return getDataTable(list); } /** * 校验商品状态 */ @ApiOperation("校验商品状态") @PostMapping("/check/goods/status") public AjaxResult checkGoodsStatus(@RequestBody CheckGoodsStatusBo bo) { ClientLoginUser loginUser = wxTokenService.getLoginUser(ServletUtils.getRequest()); bo.setUserId(loginUser.getUser().getUserId()); return toAjax(iOrderGoodsService.checkGoodsStatus(bo) ? 1 : 0); } /** * 获取商品所有节列表 */ @ApiOperation("获取商品所有节列表") @GetMapping("/section/list/{goodsId}") public AjaxResult> getGoodsSectionList(@PathVariable("goodsId") Long goodsId) { return AjaxResult.success(iOrderGoodsService.getGoodsSectionList(goodsId)); } }