package com.zhongzheng.controller.user; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.lang.Validator; import com.alibaba.fastjson.JSONArray; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.zhongzheng.common.annotation.Log; import com.zhongzheng.common.core.controller.BaseController; import com.zhongzheng.common.core.domain.AjaxResult; import com.zhongzheng.common.core.page.TableDataInfo; import com.zhongzheng.common.enums.BusinessType; import com.zhongzheng.common.utils.DateUtils; import com.zhongzheng.common.utils.poi.ExcelUtil; import com.zhongzheng.modules.exam.bo.ExamApplySiteTimeTwoAddBo; import com.zhongzheng.modules.exam.domain.ExamApplySiteTime; import com.zhongzheng.modules.exam.service.IExamApplyGoodsService; import com.zhongzheng.modules.exam.service.IExamApplySiteTimeService; import com.zhongzheng.modules.exam.vo.ExamSessionVo; import com.zhongzheng.modules.system.vo.SysTaskVo; import com.zhongzheng.modules.user.bo.*; import com.zhongzheng.modules.user.service.IUserExamGoodsService; import com.zhongzheng.modules.user.service.IUserSubscribeService; import com.zhongzheng.modules.user.vo.*; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * 用户预约考试Controller * * @author ruoyi * @date 2021-12-07 */ @Api(value = "报考数据控制器", tags = {"报考数据控制器"}) @RequiredArgsConstructor(onConstructor_ = @Autowired) @RestController @RequestMapping("/system/subscribe") public class UserSubscribeController extends BaseController { private final IUserSubscribeService iUserSubscribeService; private final IUserExamGoodsService iUserExamGoodsService; private final IExamApplyGoodsService iExamApplyGoodsService; private final IExamApplySiteTimeService iExamApplySiteTimeService; /** * 查询用户预约考试列表 */ @ApiOperation("查询报考数据列表") @PreAuthorize("@ss.hasPermi('system:subscribe:list')") @GetMapping("/list") public TableDataInfo listSubscribe(UserSubscribeQueryBo bo) { startPage(); List list = iUserSubscribeService.listSubscribe(bo); return getDataTable(list); } /** * 预约列表(包含其他使用祥粤考场的机构) */ @ApiOperation("预约列表(包含其他使用祥粤考场的机构)") @GetMapping("/sub/list") public TableDataInfo getListSubscribe(UserSubQueryBo bo) { startPage(); List list = iUserSubscribeService.getListSubscribe(bo); return getDataTable(list); } /** * 预约学员档案资料下载 */ @ApiOperation("预约学员档案资料下载") @GetMapping("/sub/user/export") public AjaxResult subUserExport(SubUserExportBo bo) { return toAjax(iUserSubscribeService.subUserExport(bo) ? 1 : 0); } /** * 预约学员信息下载 */ @ApiOperation("预约学员信息下载") @PostMapping("/sub/record/user/export") public AjaxResult subRecordUserExport(@RequestBody SubUserExportBo bo) { String path = iUserSubscribeService.subRecordUserExport(bo); return AjaxResult.success("操作成功",path); } /** * 学员档案下载任务列表 */ @ApiOperation("学员档案下载任务列表") @GetMapping("/sub/user/export/list") public AjaxResult> subUserExportList() { return AjaxResult.success(iUserSubscribeService.subUserExportList()); } /** * 根据月份获取当月考试场次 */ @ApiOperation("根据月份获取当月考试场次") @GetMapping("/session/{applyDate}") public AjaxResult> getExamSession(@PathVariable("applyDate")String applyDate) { List list = iUserSubscribeService.getExamSession(applyDate); return AjaxResult.success(list); } /** * 修改用户预约考试 */ @ApiOperation("批量取消预约,批量选考试登记状态,批量修改预约状态,批量前培账号开通") @PreAuthorize("@ss.hasPermi('system:subscribe:edit')") @Log(title = "用户预约考试", businessType = BusinessType.UPDATE) @PostMapping("editMore") public AjaxResult editMore(@RequestBody List list) { return toAjax(iUserSubscribeService.updateByEditMoreBo(list) ? 1 : 0); } /** * * 修改用户预约考试 */ @ApiOperation("批量取消预约,批量选考试登记状态,批量修改预约状态,批量前培账号开通") @PreAuthorize("@ss.hasPermi('system:subscribe:edit')") @Log(title = "用户预约考试", businessType = BusinessType.UPDATE) @PostMapping("edit") public AjaxResult edit(@RequestBody UserSubscribeEditBo bo) { return toAjax(iUserSubscribeService.updateByEditBo(bo) ? 1 : 0); } /** * 修改用户预约考试 */ @ApiOperation("批量改证书状态") @PreAuthorize("@ss.hasPermi('system:subscribe:edit')") @Log(title = "用户预约考试", businessType = BusinessType.UPDATE) @PostMapping() public AjaxResult editCertificate(@RequestBody List bo) { return toAjax(iUserSubscribeService.editCertificate(bo) ? 1 : 0); } /** * 查询用户下这个商品的考试次数,前培次数列表 */ @ApiOperation("查询用户下商品的考试次数,前培次数列表") @PreAuthorize("@ss.hasPermi('system:goods:list')") @GetMapping("/listUserExam") public TableDataInfo listUserExam(UserExamGoodsQueryBo bo) { startPage(); List list = iUserExamGoodsService.listUserExam(bo); return getDataTable(list); } /** * 查询详细商品考试次数,前培次数 */ @ApiOperation("查询详细商品考试次数,前培次数") @PreAuthorize("@ss.hasPermi('system:apply:query')") @GetMapping("/UserExam") public AjaxResult getUserExamInfo(UserExamGoodsQueryBo userExamGoodsQueryBo) { UserExamGoodsVo userExamGoodsVo = iUserExamGoodsService.getUserExamInfo(userExamGoodsQueryBo); return AjaxResult.success(userExamGoodsVo); } @Log(title = "导入新增预约考试模板", businessType = BusinessType.IMPORT) @ApiOperation("导入新增预约考试模板") @PreAuthorize("@ss.hasPermi('system:apply:import')") @PostMapping("/importData") public AjaxResult> importData(MultipartFile file) throws Exception { ExcelUtil util = new ExcelUtil(UserSubscribeImport.class); List userSubscribeImportList = util.importExcel(file.getInputStream()); Map userSubscribeImport = iUserSubscribeService.importData(userSubscribeImportList); return AjaxResult.success(userSubscribeImport); } @Log(title = "导入新增预约考培模板", businessType = BusinessType.IMPORT) @ApiOperation("导入新增预约考培模板") @PreAuthorize("@ss.hasPermi('system:apply:import')") @PostMapping("/importTrainData") public AjaxResult> importTrainData(MultipartFile file) throws Exception { ExcelUtil util = new ExcelUtil(UserSubscribeImport.class); List userSubscribeImportList = util.importExcel(file.getInputStream()); Map userSubscribeImport = iUserSubscribeService.importTrainData(userSubscribeImportList); return AjaxResult.success(userSubscribeImport); } @Log(title = "导入批量考试登记", businessType = BusinessType.IMPORT) @ApiOperation("导入批量考试登记") @PreAuthorize("@ss.hasPermi('system:apply:import')") @PostMapping("/importUpdateData") public AjaxResult> importUpdateData(MultipartFile file) throws Exception { ExcelUtil util = new ExcelUtil(UserSubscribeImport.class); List userSubscribeImportList = util.importExcel(file.getInputStream()); Map userSubscribeImport = iUserSubscribeService.importUpdateData(userSubscribeImportList); return AjaxResult.success(userSubscribeImport); } /** * 查询报考数据用户列表 */ @ApiOperation("查询报考数据用户列表") @PreAuthorize("@ss.hasPermi('system:subscribe:list')") @GetMapping("/listUser") public TableDataInfo listSubscribeByUser(UserSubscribeQueryBo bo) { startPage(); List list = iUserSubscribeService.listSubscribeByUser(bo); return getDataTable(list); } @ApiOperation("预约考试身份证导入新增模板过滤不存在") @PreAuthorize("@ss.hasPermi('system:apply:import')") @PostMapping("/importIdsDataFilter") public AjaxResult> importIdsDataFilter(MultipartFile file) throws Exception { ExcelUtil util = new ExcelUtil(UserSubscribeIdsImport.class); List userSubscribeIdsImportList = util.importExcel(file.getInputStream()); userSubscribeIdsImportList = iUserSubscribeService.importIdsDataFilter(userSubscribeIdsImportList); return AjaxResult.success(userSubscribeIdsImportList); } @ApiOperation("预约考试身份证导入新增模板") @PreAuthorize("@ss.hasPermi('system:apply:import')") @PostMapping("/importIdsData") public AjaxResult> importIdsData(MultipartFile file) throws Exception { ExcelUtil util = new ExcelUtil(UserSubscribeIdsImport.class); List userSubscribeIdsImportList = util.importExcel(file.getInputStream()); return AjaxResult.success(userSubscribeIdsImportList); } /** * 导出新增预约模板 */ @ApiOperation("导出新增预约模板") @PreAuthorize("@ss.hasPermi('system:profile:export')") @Log(title = "导出新增预约模板", businessType = BusinessType.EXPORT) @GetMapping("/exportNew") public AjaxResult> exportNew(UserSubscribeExportBo bo) { Map map = new HashMap<>(); // ExamApplyGoodsQueryBo examApplyGoodsQueryBo = new ExamApplyGoodsQueryBo(); // examApplyGoodsQueryBo.setApplyId(bo.getApplyId()); // List goodsList = iExamApplyGoodsService.listGoods(examApplyGoodsQueryBo); // ExcelUtil goodsUtil = new ExcelUtil(ExamApplyGoodsVo.class); String timeStr= LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); // map.put("goodsExcel",goodsUtil.exportEasyExcel(goodsUtil.exportEasyData(goodsList), bo.getApplyName()+"商品列表"+timeStr)); ExamApplySiteTime siteTime = iExamApplySiteTimeService.getOne(new LambdaQueryWrapper() .eq(ExamApplySiteTime::getApplyId, bo.getApplyId()) .last("limit 1")); if(Validator.isEmpty(bo.getApplySiteAddressTrain())){ UserSubscribeExport export = new UserSubscribeExport(); export.setRemark("导入时,请把示例删除"); export.setUserName("李小米"); export.setIdCard("44086921356895125365"); export.setApplyName(bo.getApplyName()); export.setApplySiteAddress(bo.getApplySiteAddress()); export.setStudentType("是"); if (ObjectUtils.isNotNull(siteTime)){ List siteTimeTwoAddBos = JSONArray.parseArray(siteTime.getSiteTime(), ExamApplySiteTimeTwoAddBo.class); if (CollectionUtils.isNotEmpty(siteTimeTwoAddBos)){ ExamApplySiteTimeTwoAddBo twoAddBo = siteTimeTwoAddBos.get(0); export.setApplySiteTime(String.format("%s-%s",twoAddBo.getStartTime(),twoAddBo.getEndTime())); } export.setApplySiteExamTime(DateUtils.timestampToDateFormat(siteTime.getExamTime(),"yyyy/MM/dd")); }else { export.setApplySiteExamTime("2021/10/21"); export.setApplySiteTime("9:00-12:00"); } export.setMajorName("土建质量员"); // export.setCode("SP6415428604"); // export.setGoodsName("一级建造师继续教育(必修课+机电工程)"); List list = new ArrayList<>(); list.add(export); ExcelUtil util = new ExcelUtil(UserSubscribeExport.class); map.put("demoExcel",util.exportEasyExcel(util.exportEasyData(list), bo.getApplyName()+"新增预约模板"+timeStr)); }else{ //有考培地点 UserSubscribeTrainExport export = new UserSubscribeTrainExport(); export.setRemark("导入时,请把示例删除"); export.setUserName("李小米"); export.setIdCard("44086921356895125365"); export.setApplyName(bo.getApplyName()); export.setApplySiteAddress(bo.getApplySiteAddress()); export.setApplySiteExamTime("2021/10/21"); export.setApplySiteTime("9:00-12:00"); export.setCode("SP6415428604"); export.setGoodsName("一级建造师继续教育(必修课+机电工程)"); export.setStudentType("是"); export.setApplySiteAddressTrain(bo.getApplySiteAddressTrain()); if (ObjectUtils.isNotNull(siteTime)){ List siteTimeTwoAddBos = JSONArray.parseArray(siteTime.getSiteTime(), ExamApplySiteTimeTwoAddBo.class); if (CollectionUtils.isNotEmpty(siteTimeTwoAddBos)){ ExamApplySiteTimeTwoAddBo twoAddBo = siteTimeTwoAddBos.get(0); export.setApplySiteTime(String.format("%s-%s",twoAddBo.getStartTime(),twoAddBo.getEndTime())); } export.setApplySiteExamTime(DateUtils.timestampToDateFormat(siteTime.getExamTime(),"yyyy/MM/dd")); }else { export.setApplySiteExamTime("2021/10/21"); export.setApplySiteTime("9:00-12:00"); } List list = new ArrayList<>(); list.add(export); ExcelUtil util = new ExcelUtil(UserSubscribeTrainExport.class); map.put("demoExcel",util.exportEasyExcel(util.exportEasyData(list), bo.getApplyName()+"新增预约模板"+timeStr)); } return AjaxResult.success(map); } /** * 导出登记模板 */ @ApiOperation("导出登记模板") @PreAuthorize("@ss.hasPermi('system:profile:export')") @Log(title = "导出登记模板", businessType = BusinessType.EXPORT) @GetMapping("/exportRegister") public AjaxResult exportRegister(UserSubscribeExportBo bo) { UserSubscribeQueryBo userSubscribeQueryBo = new UserSubscribeQueryBo(); userSubscribeQueryBo.setApplyId(bo.getApplyId()); userSubscribeQueryBo.setApplySiteAddress(bo.getApplySiteAddress()); if (CollectionUtils.isNotEmpty(bo.getIdCards())){ userSubscribeQueryBo.setIdCards(bo.getIdCards()); } userSubscribeQueryBo.setSubscribeStatus(1); List list = iUserSubscribeService.listSubscribe(userSubscribeQueryBo); List eList = new ArrayList<>(); for(UserSubscribeVo vo : list){ UserSubscribeExportVo export = BeanUtil.toBean(vo, UserSubscribeExportVo.class); export.setSubscribeStatus("正常"); if(vo.getExamStatus()==0){ export.setExamStatus("待登记"); } else if(vo.getExamStatus()==1){ export.setExamStatus("正常"); } else if(vo.getExamStatus()==2){ export.setExamStatus("缺考"); } else if(vo.getExamStatus()==3){ export.setExamStatus("作弊"); } else if(vo.getExamStatus()==4){ export.setExamStatus("替考"); } if(Validator.isNotEmpty(vo.getResult())){ if(vo.getResult()==1){ export.setResult("通过"); } else if(vo.getResult()==0){ export.setResult("不通过"); } } export.setApplySiteExamTime(DateUtils.timestampToDateFormat(vo.getApplySiteExamTime())); export.setApplySiteTime(vo.getApplySiteStartTime()+"-"+vo.getApplySiteEndTime()); eList.add(export); } String timeStr= LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy/MM/dd")); ExcelUtil util = new ExcelUtil(UserSubscribeExportVo.class); return util.exportEasyExcel(util.exportEasyData(eList), bo.getApplyName()+"登记数据"+timeStr); } /** * 导出新增预约模板 */ @ApiOperation("导出错误数据") @PreAuthorize("@ss.hasPermi('system:profile:export')") @Log(title = "导出错误数据", businessType = BusinessType.EXPORT) @PostMapping("/exportErrorNew") public AjaxResult> exportErrorNew(@RequestBody List bo) { List errorList = bo; ExcelUtil util = new ExcelUtil(UserSubscribeExport.class); String timeStr= LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); return util.exportEasyExcel(util.exportEasyData(errorList), "导出新增错误数据"+timeStr); } /** * 导出前培错误数据 */ @ApiOperation("导出新增含考培错误数据") @PreAuthorize("@ss.hasPermi('system:profile:export')") @Log(title = "导出新增含考培错误数据", businessType = BusinessType.EXPORT) @PostMapping("/exportErrorTrain") public AjaxResult> exportErrorTrain(@RequestBody List bo) { List errorList = bo; ExcelUtil util = new ExcelUtil(UserSubscribeTrainExport.class); String timeStr= LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); return util.exportEasyExcel(util.exportEasyData(errorList), "导出新增含考培错误数据"+timeStr); } /** * 导出前培错误数据 */ @ApiOperation("导出登记错误数据") @PreAuthorize("@ss.hasPermi('system:profile:export')") @Log(title = "导出登记错误数据", businessType = BusinessType.EXPORT) @PostMapping("/exportErrorUpdate") public AjaxResult> exportErrorUpdate(@RequestBody List bo) { List errorList = bo; ExcelUtil util = new ExcelUtil(UserSubscribeErrorImport.class); String timeStr= LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); return util.exportEasyExcel(util.exportEasyData(errorList), "导出登记错误数据"+timeStr); } @ApiOperation("导入前检查身份证是否存在") @PreAuthorize("@ss.hasPermi('system:apply:import')") @PostMapping("/checkIdCardData") public AjaxResult> checkIdCardData(@RequestBody UserSubscribeIdsImportCheck bo) throws Exception { return AjaxResult.success(iUserSubscribeService.checkIdsDataFilter(bo)); } @ApiOperation("导出学员信息表") @PreAuthorize("@ss.hasPermi('system:subscribe:list')") @GetMapping("/listUserExport") public AjaxResult> listUserExport(UserSubscribeQueryBo bo) { Map map = iUserSubscribeService.listUserExport(bo); List list = (List)map.get("list"); ExcelUtil util = new ExcelUtil(UserSubscribeStudentExportVo.class); map.put("excel",util.exportExcel(list, "学员信息表")); map.remove("list"); return AjaxResult.success(map); } @ApiOperation("导出学员签到表") @PreAuthorize("@ss.hasPermi('system:subscribe:list')") @GetMapping("/listSignExport") public AjaxResult listSignExport(UserSubscribeQueryBo bo) { Map map = iUserSubscribeService.listSignExport(bo); List list = (List)map.get("list"); ExcelUtil util = new ExcelUtil(UserSubscribeSignExportVo.class); map.put("excel",util.exportExcel(list, "学员签到表")); map.remove("list"); return AjaxResult.success(map); } @ApiOperation("导出学员承诺书") @PreAuthorize("@ss.hasPermi('system:subscribe:list')") @GetMapping("/listLetterExport") public AjaxResult listLetterExport(UserSubscribeQueryBo bo) { Map map = iUserSubscribeService.listLetterExport(bo); List list = (List)map.get("list"); ExcelUtil util = new ExcelUtil(UserSubscribeLetterExportVo.class); map.put("excel",util.exportExcel(list, "疫情防控承诺书")); map.remove("list"); return AjaxResult.success(map); } }