package com.xjrsoft.module.material.controller; import cn.dev33.satoken.stp.StpUtil; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.github.yulichang.wrapper.MPJLambdaWrapper; import com.xjrsoft.common.annotation.XjrLog; import com.xjrsoft.common.constant.GlobalConstant; import com.baomidou.mybatisplus.core.toolkit.StringPool; import com.xjrsoft.common.model.result.R; import com.xjrsoft.common.page.ConventPage; import com.xjrsoft.common.page.PageOutput; import com.xjrsoft.common.model.result.RT; import com.xjrsoft.common.utils.VoToColumnUtil; import com.xjrsoft.module.app.dto.UpdateEnableMarkDto; import com.xjrsoft.module.material.dto.*; import cn.dev33.satoken.annotation.SaCheckPermission; import com.alibaba.excel.EasyExcel; import com.xjrsoft.module.material.entity.*; import com.xjrsoft.module.material.service.IMaterialTaskAppendixService; import com.xjrsoft.module.material.service.IMaterialTaskAssignService; import com.xjrsoft.module.material.vo.*; import com.xjrsoft.module.oa.entity.NewsAppendix; import com.xjrsoft.module.oa.entity.NewsRelation; import com.xjrsoft.module.oa.vo.NewsAppendixVo; import com.xjrsoft.module.oa.vo.NewsRelationVo; import com.xjrsoft.module.organization.entity.Department; import com.xjrsoft.module.organization.entity.UserDeptRelation; import com.xjrsoft.module.personnel.entity.FaceIdentifyRecords; import com.xjrsoft.module.student.entity.BaseStudentUser; import com.xjrsoft.module.system.entity.File; import com.xjrsoft.module.teacher.entity.XjrUser; import org.springframework.web.multipart.MultipartFile; import java.io.IOException; import com.alibaba.excel.support.ExcelTypeEnum; import org.springframework.http.ResponseEntity; import java.io.ByteArrayOutputStream; import java.util.ArrayList; import com.xjrsoft.module.material.service.IMaterialTaskService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.AllArgsConstructor; import org.springframework.web.bind.annotation.*; import javax.validation.Valid; import javax.validation.constraints.NotNull; import java.util.List; /** * @title: 材料提交任务 * @Author baicai * @Date: 2023-10-31 * @Version 1.0 */ @RestController @RequestMapping("/material" + "/materialtask") @Api(value = "/material" + "/materialtask",tags = "材料提交任务代码") @AllArgsConstructor public class MaterialTaskController { private final IMaterialTaskService materialTaskService; private final IMaterialTaskAssignService materialTaskAssignService; private final IMaterialTaskAppendixService materialTaskAppendixService; @GetMapping(value = "/page") @ApiOperation(value = "材料提交任务列表(分页 自己)") @SaCheckPermission("materialtask:detail") public RT> page(@Valid MaterialTaskPageDto dto) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper .orderByDesc(MaterialTask::getId) .eq(MaterialTask::getCreateUserId, StpUtil.getLoginIdAsLong()) .like(StrUtil.isNotBlank(dto.getName()), MaterialTask::getName, dto.getName()) .eq((ObjectUtil.isNotEmpty(dto.getMaterialTypeId())) && dto.getMaterialTypeId() > 0, MaterialTask::getMaterialTypeId, dto.getMaterialTypeId()) .eq((ObjectUtil.isNotEmpty(dto.getStatus())) && dto.getStatus() > 0, MaterialTask::getStatus, dto.getStatus()) .select(MaterialTask.class, x -> VoToColumnUtil.fieldsToColumns(MaterialTaskPageVo.class).contains(x.getProperty())); IPage page = materialTaskService.page(ConventPage.getPage(dto), queryWrapper); PageOutput pageOutput = ConventPage.getPageOutput(page, MaterialTaskPageVo.class); return RT.ok(pageOutput); } @GetMapping(value = "/wait-page") @ApiOperation(value = "材料提交任务列表(分页 我的待办)") @SaCheckPermission("materialtask:detail") public RT> waitPage(@Valid MaterialTaskWaitPageDto dto) { MPJLambdaWrapper queryWrapper = new MPJLambdaWrapper<>(); queryWrapper .disableLogicDel() // .eq(MaterialTask::getCreateUserId, StpUtil.getLoginIdAsLong()) .like(StrUtil.isNotBlank(dto.getName()), MaterialTask::getName, dto.getName()) .eq(ObjectUtil.isNotEmpty(dto.getStatus()) && dto.getStatus() >0, MaterialTask::getStatus, dto.getStatus()) .eq((ObjectUtil.isNotEmpty(dto.getMaterialTypeId())) && dto.getMaterialTypeId() > 0, MaterialTask::getMaterialTypeId, dto.getMaterialTypeId()) .select(MaterialTask::getId) .select(MaterialTask.class, x -> VoToColumnUtil.fieldsToColumns(MaterialTaskWaitPageVo.class).contains(x.getProperty())) .innerJoin(MaterialTaskAssign.class, MaterialTaskAssign::getMaterialTaskId, MaterialTask::getId, ext -> ext.eq(MaterialTaskAssign::getUserId, StpUtil.getLoginIdAsLong())) .selectAs(MaterialTaskAssign::getId, MaterialTaskWaitPageVo::getAssignId) .selectAs(MaterialTaskAssign::getExecutiveStatus, MaterialTaskWaitPageVo::getExecutiveStatus) .selectAs(MaterialTaskAssign::getTransferAssignPerson, MaterialTaskWaitPageVo::getTransferAssignPerson) .selectAs(MaterialTaskAssign::getTransferSubmitedPerson, MaterialTaskWaitPageVo::getTransferSubmitedPerson) .selectAs(MaterialTaskAssign::getStatus, MaterialTaskWaitPageVo::getProcessStatus) .leftJoin(XjrUser.class, XjrUser::getId, MaterialTask::getCreateUserId, ext -> ext.selectAs(XjrUser::getName, MaterialTaskWaitPageVo::getCreateUserName)) .like(StrUtil.isNotBlank(dto.getAssignedUser()), XjrUser::getName, dto.getAssignedUser()) ; if (ObjectUtil.isNotNull(dto.getRequiredCompleteStareTime()) && ObjectUtil.isNotNull(dto.getRequiredCompleteEndTime())) { queryWrapper.ge(FaceIdentifyRecords::getVerifyTime, dto.getRequiredCompleteStareTime()); queryWrapper.le(FaceIdentifyRecords::getVerifyTime, dto.getRequiredCompleteEndTime()); } IPage page = materialTaskService.selectJoinListPage(ConventPage.getPage(dto), MaterialTaskWaitPageVo.class, queryWrapper); PageOutput pageOutput = ConventPage.getPageOutput(page); return RT.ok(pageOutput); } @GetMapping(value = "/info") @ApiOperation(value = "根据id查询材料提交任务信息") @SaCheckPermission("materialtask:detail") public RT info(@RequestParam Long id) { MaterialTask materialTask = materialTaskService.getByIdDeep(id); if (materialTask == null) { return RT.error("找不到此数据!"); } MaterialTaskVo materialTaskVo = BeanUtil.toBean(materialTask, MaterialTaskVo.class); List newsAppendixVoList = materialTaskAppendixService.selectJoinList(MaterialTaskAppendixVo.class, new MPJLambdaWrapper().eq(MaterialTaskAppendix::getMaterialTaskId, id) .select(MaterialTaskAppendix::getId) .select(MaterialTaskAppendix.class, x -> VoToColumnUtil.fieldsToColumns(MaterialTaskAppendixVo.class).contains(x.getProperty())) .leftJoin(File.class, File::getId, MaterialTaskAppendix::getFileId, ext -> ext.selectAs(File::getFileName, MaterialTaskAppendixVo::getFileName) .selectAs(File::getFolderId, MaterialTaskAppendixVo::getFolderId) .selectAs(File::getFileUrl, MaterialTaskAppendixVo::getFileUrl)) ); if (newsAppendixVoList.size() > 0) { materialTaskVo.setMaterialTaskAppendixList(newsAppendixVoList); } return RT.ok(materialTaskVo); } @PostMapping @ApiOperation(value = "新增材料提交任务") @SaCheckPermission("materialtask:add") public RT add(@Valid @RequestBody AddMaterialTaskDto dto) { MaterialTask materialTask = BeanUtil.toBean(dto, MaterialTask.class); boolean isSuccess = materialTaskService.add(materialTask); return RT.ok(isSuccess); } @PutMapping @ApiOperation(value = "修改材料提交任务") @SaCheckPermission("materialtask:edit") public RT update(@Valid @RequestBody UpdateMaterialTaskDto dto) { MaterialTask materialTask = BeanUtil.toBean(dto, MaterialTask.class); return RT.ok(materialTaskService.update(materialTask)); } @DeleteMapping @ApiOperation(value = "删除材料提交任务") @SaCheckPermission("materialtask:delete") public RT delete(@Valid @RequestBody List ids) { return RT.ok(materialTaskService.delete(ids)); } @PostMapping("/import") @ApiOperation(value = "导入") public RT importData(@RequestParam MultipartFile file) throws IOException { List savedDataList = EasyExcel.read(file.getInputStream()).head(MaterialTaskPageVo.class).sheet().doReadSync(); Boolean result = materialTaskService.saveBatch(BeanUtil.copyToList(savedDataList, MaterialTask.class)); return RT.ok(result); } @GetMapping("/export") @ApiOperation(value = "导出") public ResponseEntity exportData(@Valid MaterialTaskPageDto dto, @RequestParam(defaultValue = "false") Boolean isTemplate) { List customerList = isTemplate != null && isTemplate ? new ArrayList<>() : ((PageOutput) page(dto).getData()).getList(); ByteArrayOutputStream bot = new ByteArrayOutputStream(); EasyExcel.write(bot, MaterialTaskPageVo.class).automaticMergeHead(false).excelType(ExcelTypeEnum.XLSX).sheet().doWrite(customerList); return RT.fileStream(bot.toByteArray(), "MaterialTask" + ExcelTypeEnum.XLSX.getValue()); } @GetMapping(value = "/assign-page") @ApiOperation(value = "材料提交任务分员列表(分页)") @SaCheckPermission("materialtask:detail") public RT> assignPage(@Valid MaterialTaskAssignPageDto dto) { MPJLambdaWrapper queryWrapper = new MPJLambdaWrapper<>(); queryWrapper .disableSubLogicDel() .eq(MaterialTaskAssign::getMaterialTaskId, dto.getMaterialTaskId()) .select(MaterialTaskAssign::getId) .select(MaterialTaskAssign.class, x -> VoToColumnUtil.fieldsToColumns(MaterialTaskAssignVo.class).contains(x.getProperty())) .innerJoin(XjrUser.class, XjrUser::getId, MaterialTaskAssign::getUserId, ext -> ext.selectAs(XjrUser::getUserName, MaterialTaskAssignVo::getUserName)) .leftJoin(UserDeptRelation.class, UserDeptRelation::getUserId, MaterialTypeAssign::getUserId) .leftJoin(Department.class, Department::getId, UserDeptRelation::getDeptId, ext -> ext.selectAs(Department::getName, MaterialTaskAssignVo::getDeptName)) ; IPage page = materialTaskAssignService.selectJoinListPage(ConventPage.getPage(dto), MaterialTaskAssignVo.class, queryWrapper); PageOutput pageOutput = ConventPage.getPageOutput(page); return RT.ok(pageOutput); } @PostMapping(value = "/assign-add") @ApiOperation(value = "材料提交任务分员权限") @SaCheckPermission("materialtask:add") public RT assignAdd(@Valid @RequestBody AddMaterialTaskAssignDto dto){ boolean isSuccess = materialTaskAssignService.add(dto); return RT.ok(isSuccess); } @DeleteMapping(value = "/assign-delete") @ApiOperation(value = "删除材料提交任务分员") @SaCheckPermission("materialtask:delete") public RT assignDelete(@Valid @RequestBody List ids){ return RT.ok(materialTaskAssignService.delete(ids)); } @PostMapping(value = "submited") @ApiOperation(value = "提交材料") @SaCheckPermission("materialtask:add") public RT submited(@Valid @RequestBody MaterialTaskAssignAppendixDto dto) { boolean isSuccess = materialTaskService.submited(dto); return RT.ok(isSuccess); } @PutMapping("/approved") @ApiOperation(value = "提交材料审核 enabledMark 不用传") public R approved(@Valid @RequestBody UpdateEnableMarkDto dto) { MaterialTaskAssign materialTaskAssign = new MaterialTaskAssign(); materialTaskAssign.setId(dto.getId()); materialTaskAssign.setStatus(3); materialTaskAssignService.updateById(materialTaskAssign); return R.ok(true); } @PutMapping("/reject") @ApiOperation(value = "提交材料重新 enabledMark 不用传") public R reject(@Valid @RequestBody UpdateEnableMarkDto dto) { MaterialTaskAssign materialTaskAssign = new MaterialTaskAssign(); materialTaskAssign.setId(dto.getId()); materialTaskAssign.setStatus(4); materialTaskAssignService.updateById(materialTaskAssign); return R.ok(true); } @PutMapping("/end") @ApiOperation(value = "提交材料结束 enabledMark 不用传") public R end(@Valid @RequestBody UpdateEnableMarkDto dto) { MaterialTask materialTask = new MaterialTask(); materialTask.setId(dto.getId()); materialTask.setStatus(3); materialTaskService.updateById(materialTask); return R.ok(true); } @GetMapping(value = "/assign-list") @ApiOperation(value = "审核分员列表") @SaCheckPermission("materialtask:detail") public RT> assignList(@Valid MaterialTaskAssignListDto dto) { MPJLambdaWrapper queryWrapper = new MPJLambdaWrapper<>(); queryWrapper .distinct() .disableSubLogicDel() .eq(MaterialTaskAssign::getMaterialTaskId, dto.getMaterialTaskId()) .eq(dto.getState() == 1, MaterialTaskAssign::getStatus, 2) .eq(dto.getState() == 2, MaterialTaskAssign::getExecutiveStatus, 1) .eq(dto.getState() == 3, MaterialTaskAssign::getStatus, 3) .select(MaterialTaskAssign::getId) .select(MaterialTaskAssign.class, x -> VoToColumnUtil.fieldsToColumns(MaterialTaskAssignListVo.class).contains(x.getProperty())) .innerJoin(XjrUser.class, XjrUser::getId, MaterialTaskAssign::getUserId, ext -> ext.selectAs(XjrUser::getUserName, MaterialTaskAssignListVo::getUserName)) .leftJoin(UserDeptRelation.class, UserDeptRelation::getUserId, MaterialTypeAssign::getUserId) .leftJoin(Department.class, Department::getId, UserDeptRelation::getDeptId, ext -> ext.selectAs(Department::getName, MaterialTaskAssignListVo::getDeptName)) .leftJoin(MaterialTaskAppendix.class, MaterialTaskAppendix::getMaterialTaskId, MaterialTaskAssign::getId) .leftJoin(File.class, File::getId, MaterialTaskAppendix::getFileId) .selectAs(File::getFolderId, MaterialTaskAssignListVo::getFolderId); List pageOutput = materialTaskAssignService.selectJoinList(MaterialTaskAssignListVo.class, queryWrapper); return RT.ok(pageOutput); } }