MaterialTaskController.java 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295
  1. package com.xjrsoft.module.material.controller;
  2. import cn.dev33.satoken.stp.StpUtil;
  3. import cn.hutool.core.bean.BeanUtil;
  4. import cn.hutool.core.util.ObjectUtil;
  5. import cn.hutool.core.util.StrUtil;
  6. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  7. import com.baomidou.mybatisplus.core.metadata.IPage;
  8. import com.baomidou.mybatisplus.core.toolkit.Wrappers;
  9. import com.github.yulichang.wrapper.MPJLambdaWrapper;
  10. import com.xjrsoft.common.annotation.XjrLog;
  11. import com.xjrsoft.common.constant.GlobalConstant;
  12. import com.baomidou.mybatisplus.core.toolkit.StringPool;
  13. import com.xjrsoft.common.model.result.R;
  14. import com.xjrsoft.common.page.ConventPage;
  15. import com.xjrsoft.common.page.PageOutput;
  16. import com.xjrsoft.common.model.result.RT;
  17. import com.xjrsoft.common.utils.VoToColumnUtil;
  18. import com.xjrsoft.module.app.dto.UpdateEnableMarkDto;
  19. import com.xjrsoft.module.material.dto.*;
  20. import cn.dev33.satoken.annotation.SaCheckPermission;
  21. import com.alibaba.excel.EasyExcel;
  22. import com.xjrsoft.module.material.entity.*;
  23. import com.xjrsoft.module.material.service.IMaterialTaskAppendixService;
  24. import com.xjrsoft.module.material.service.IMaterialTaskAssignService;
  25. import com.xjrsoft.module.material.vo.*;
  26. import com.xjrsoft.module.oa.entity.NewsAppendix;
  27. import com.xjrsoft.module.oa.entity.NewsRelation;
  28. import com.xjrsoft.module.oa.vo.NewsAppendixVo;
  29. import com.xjrsoft.module.oa.vo.NewsRelationVo;
  30. import com.xjrsoft.module.organization.entity.Department;
  31. import com.xjrsoft.module.organization.entity.UserDeptRelation;
  32. import com.xjrsoft.module.personnel.entity.FaceIdentifyRecords;
  33. import com.xjrsoft.module.student.entity.BaseStudentUser;
  34. import com.xjrsoft.module.system.entity.File;
  35. import com.xjrsoft.module.teacher.entity.XjrUser;
  36. import org.springframework.web.multipart.MultipartFile;
  37. import java.io.IOException;
  38. import com.alibaba.excel.support.ExcelTypeEnum;
  39. import org.springframework.http.ResponseEntity;
  40. import java.io.ByteArrayOutputStream;
  41. import java.util.ArrayList;
  42. import com.xjrsoft.module.material.service.IMaterialTaskService;
  43. import io.swagger.annotations.Api;
  44. import io.swagger.annotations.ApiOperation;
  45. import lombok.AllArgsConstructor;
  46. import org.springframework.web.bind.annotation.*;
  47. import javax.validation.Valid;
  48. import javax.validation.constraints.NotNull;
  49. import java.util.List;
  50. /**
  51. * @title: 材料提交任务
  52. * @Author baicai
  53. * @Date: 2023-10-31
  54. * @Version 1.0
  55. */
  56. @RestController
  57. @RequestMapping("/material" + "/materialtask")
  58. @Api(value = "/material" + "/materialtask",tags = "材料提交任务代码")
  59. @AllArgsConstructor
  60. public class MaterialTaskController {
  61. private final IMaterialTaskService materialTaskService;
  62. private final IMaterialTaskAssignService materialTaskAssignService;
  63. private final IMaterialTaskAppendixService materialTaskAppendixService;
  64. @GetMapping(value = "/page")
  65. @ApiOperation(value = "材料提交任务列表(分页 自己)")
  66. @SaCheckPermission("materialtask:detail")
  67. public RT<PageOutput<MaterialTaskPageVo>> page(@Valid MaterialTaskPageDto dto) {
  68. LambdaQueryWrapper<MaterialTask> queryWrapper = new LambdaQueryWrapper<>();
  69. queryWrapper
  70. .orderByDesc(MaterialTask::getId)
  71. .eq(MaterialTask::getCreateUserId, StpUtil.getLoginIdAsLong())
  72. .like(StrUtil.isNotBlank(dto.getName()), MaterialTask::getName, dto.getName())
  73. .eq((ObjectUtil.isNotEmpty(dto.getMaterialTypeId())) && dto.getMaterialTypeId() > 0, MaterialTask::getMaterialTypeId, dto.getMaterialTypeId())
  74. .eq((ObjectUtil.isNotEmpty(dto.getStatus())) && dto.getStatus() > 0, MaterialTask::getStatus, dto.getStatus())
  75. .select(MaterialTask.class, x -> VoToColumnUtil.fieldsToColumns(MaterialTaskPageVo.class).contains(x.getProperty()));
  76. IPage<MaterialTask> page = materialTaskService.page(ConventPage.getPage(dto), queryWrapper);
  77. PageOutput<MaterialTaskPageVo> pageOutput = ConventPage.getPageOutput(page, MaterialTaskPageVo.class);
  78. return RT.ok(pageOutput);
  79. }
  80. @GetMapping(value = "/wait-page")
  81. @ApiOperation(value = "材料提交任务列表(分页 我的待办)")
  82. @SaCheckPermission("materialtask:detail")
  83. public RT<PageOutput<MaterialTaskWaitPageVo>> waitPage(@Valid MaterialTaskWaitPageDto dto) {
  84. MPJLambdaWrapper<MaterialTask> queryWrapper = new MPJLambdaWrapper<>();
  85. queryWrapper
  86. .disableLogicDel()
  87. // .eq(MaterialTask::getCreateUserId, StpUtil.getLoginIdAsLong())
  88. .like(StrUtil.isNotBlank(dto.getName()), MaterialTask::getName, dto.getName())
  89. .eq(ObjectUtil.isNotEmpty(dto.getStatus()) && dto.getStatus() >0, MaterialTask::getStatus, dto.getStatus())
  90. .eq((ObjectUtil.isNotEmpty(dto.getMaterialTypeId())) && dto.getMaterialTypeId() > 0, MaterialTask::getMaterialTypeId, dto.getMaterialTypeId())
  91. .select(MaterialTask::getId)
  92. .select(MaterialTask.class, x -> VoToColumnUtil.fieldsToColumns(MaterialTaskWaitPageVo.class).contains(x.getProperty()))
  93. .innerJoin(MaterialTaskAssign.class, MaterialTaskAssign::getMaterialTaskId, MaterialTask::getId, ext -> ext.eq(MaterialTaskAssign::getUserId, StpUtil.getLoginIdAsLong()))
  94. .selectAs(MaterialTaskAssign::getId, MaterialTaskWaitPageVo::getAssignId)
  95. .selectAs(MaterialTaskAssign::getExecutiveStatus, MaterialTaskWaitPageVo::getExecutiveStatus)
  96. .selectAs(MaterialTaskAssign::getTransferAssignPerson, MaterialTaskWaitPageVo::getTransferAssignPerson)
  97. .selectAs(MaterialTaskAssign::getTransferSubmitedPerson, MaterialTaskWaitPageVo::getTransferSubmitedPerson)
  98. .selectAs(MaterialTaskAssign::getStatus, MaterialTaskWaitPageVo::getProcessStatus)
  99. .leftJoin(XjrUser.class, XjrUser::getId, MaterialTask::getCreateUserId, ext -> ext.selectAs(XjrUser::getName, MaterialTaskWaitPageVo::getCreateUserName))
  100. .like(StrUtil.isNotBlank(dto.getAssignedUser()), XjrUser::getName, dto.getAssignedUser())
  101. ;
  102. if (ObjectUtil.isNotNull(dto.getRequiredCompleteStareTime()) && ObjectUtil.isNotNull(dto.getRequiredCompleteEndTime())) {
  103. queryWrapper.ge(FaceIdentifyRecords::getVerifyTime, dto.getRequiredCompleteStareTime());
  104. queryWrapper.le(FaceIdentifyRecords::getVerifyTime, dto.getRequiredCompleteEndTime());
  105. }
  106. IPage<MaterialTaskWaitPageVo> page = materialTaskService.selectJoinListPage(ConventPage.getPage(dto), MaterialTaskWaitPageVo.class, queryWrapper);
  107. PageOutput<MaterialTaskWaitPageVo> pageOutput = ConventPage.getPageOutput(page);
  108. return RT.ok(pageOutput);
  109. }
  110. @GetMapping(value = "/info")
  111. @ApiOperation(value = "根据id查询材料提交任务信息")
  112. @SaCheckPermission("materialtask:detail")
  113. public RT<MaterialTaskVo> info(@RequestParam Long id) {
  114. MaterialTask materialTask = materialTaskService.getByIdDeep(id);
  115. if (materialTask == null) {
  116. return RT.error("找不到此数据!");
  117. }
  118. MaterialTaskVo materialTaskVo = BeanUtil.toBean(materialTask, MaterialTaskVo.class);
  119. List<MaterialTaskAppendixVo> newsAppendixVoList = materialTaskAppendixService.selectJoinList(MaterialTaskAppendixVo.class,
  120. new MPJLambdaWrapper<MaterialTaskAppendix>().eq(MaterialTaskAppendix::getMaterialTaskId, id)
  121. .select(MaterialTaskAppendix::getId)
  122. .select(MaterialTaskAppendix.class, x -> VoToColumnUtil.fieldsToColumns(MaterialTaskAppendixVo.class).contains(x.getProperty()))
  123. .leftJoin(File.class, File::getId, MaterialTaskAppendix::getFileId, ext -> ext.selectAs(File::getFileName, MaterialTaskAppendixVo::getFileName)
  124. .selectAs(File::getFolderId, MaterialTaskAppendixVo::getFolderId)
  125. .selectAs(File::getFileUrl, MaterialTaskAppendixVo::getFileUrl))
  126. );
  127. if (newsAppendixVoList.size() > 0) {
  128. materialTaskVo.setMaterialTaskAppendixList(newsAppendixVoList);
  129. }
  130. return RT.ok(materialTaskVo);
  131. }
  132. @PostMapping
  133. @ApiOperation(value = "新增材料提交任务")
  134. @SaCheckPermission("materialtask:add")
  135. public RT<Boolean> add(@Valid @RequestBody AddMaterialTaskDto dto) {
  136. MaterialTask materialTask = BeanUtil.toBean(dto, MaterialTask.class);
  137. boolean isSuccess = materialTaskService.add(materialTask);
  138. return RT.ok(isSuccess);
  139. }
  140. @PutMapping
  141. @ApiOperation(value = "修改材料提交任务")
  142. @SaCheckPermission("materialtask:edit")
  143. public RT<Boolean> update(@Valid @RequestBody UpdateMaterialTaskDto dto) {
  144. MaterialTask materialTask = BeanUtil.toBean(dto, MaterialTask.class);
  145. return RT.ok(materialTaskService.update(materialTask));
  146. }
  147. @DeleteMapping
  148. @ApiOperation(value = "删除材料提交任务")
  149. @SaCheckPermission("materialtask:delete")
  150. public RT<Boolean> delete(@Valid @RequestBody List<Long> ids) {
  151. return RT.ok(materialTaskService.delete(ids));
  152. }
  153. @PostMapping("/import")
  154. @ApiOperation(value = "导入")
  155. public RT<Boolean> importData(@RequestParam MultipartFile file) throws IOException {
  156. List<MaterialTaskPageVo> savedDataList = EasyExcel.read(file.getInputStream()).head(MaterialTaskPageVo.class).sheet().doReadSync();
  157. Boolean result = materialTaskService.saveBatch(BeanUtil.copyToList(savedDataList, MaterialTask.class));
  158. return RT.ok(result);
  159. }
  160. @GetMapping("/export")
  161. @ApiOperation(value = "导出")
  162. public ResponseEntity<byte[]> exportData(@Valid MaterialTaskPageDto dto, @RequestParam(defaultValue = "false") Boolean isTemplate) {
  163. List<MaterialTaskPageVo> customerList = isTemplate != null && isTemplate ? new ArrayList<>() : ((PageOutput<MaterialTaskPageVo>) page(dto).getData()).getList();
  164. ByteArrayOutputStream bot = new ByteArrayOutputStream();
  165. EasyExcel.write(bot, MaterialTaskPageVo.class).automaticMergeHead(false).excelType(ExcelTypeEnum.XLSX).sheet().doWrite(customerList);
  166. return RT.fileStream(bot.toByteArray(), "MaterialTask" + ExcelTypeEnum.XLSX.getValue());
  167. }
  168. @GetMapping(value = "/assign-page")
  169. @ApiOperation(value = "材料提交任务分员列表(分页)")
  170. @SaCheckPermission("materialtask:detail")
  171. public RT<PageOutput<MaterialTaskAssignVo>> assignPage(@Valid MaterialTaskAssignPageDto dto) {
  172. MPJLambdaWrapper<MaterialTaskAssign> queryWrapper = new MPJLambdaWrapper<>();
  173. queryWrapper
  174. .disableSubLogicDel()
  175. .eq(MaterialTaskAssign::getMaterialTaskId, dto.getMaterialTaskId())
  176. .select(MaterialTaskAssign::getId)
  177. .select(MaterialTaskAssign.class, x -> VoToColumnUtil.fieldsToColumns(MaterialTaskAssignVo.class).contains(x.getProperty()))
  178. .innerJoin(XjrUser.class, XjrUser::getId, MaterialTaskAssign::getUserId, ext -> ext.selectAs(XjrUser::getUserName, MaterialTaskAssignVo::getUserName))
  179. .leftJoin(UserDeptRelation.class, UserDeptRelation::getUserId, MaterialTypeAssign::getUserId)
  180. .leftJoin(Department.class, Department::getId, UserDeptRelation::getDeptId, ext -> ext.selectAs(Department::getName, MaterialTaskAssignVo::getDeptName))
  181. ;
  182. IPage<MaterialTaskAssignVo> page = materialTaskAssignService.selectJoinListPage(ConventPage.getPage(dto), MaterialTaskAssignVo.class, queryWrapper);
  183. PageOutput<MaterialTaskAssignVo> pageOutput = ConventPage.getPageOutput(page);
  184. return RT.ok(pageOutput);
  185. }
  186. @PostMapping(value = "/assign-add")
  187. @ApiOperation(value = "材料提交任务分员权限")
  188. @SaCheckPermission("materialtask:add")
  189. public RT<Boolean> assignAdd(@Valid @RequestBody AddMaterialTaskAssignDto dto){
  190. boolean isSuccess = materialTaskAssignService.add(dto);
  191. return RT.ok(isSuccess);
  192. }
  193. @DeleteMapping(value = "/assign-delete")
  194. @ApiOperation(value = "删除材料提交任务分员")
  195. @SaCheckPermission("materialtask:delete")
  196. public RT<Boolean> assignDelete(@Valid @RequestBody List<Long> ids){
  197. return RT.ok(materialTaskAssignService.delete(ids));
  198. }
  199. @PostMapping(value = "submited")
  200. @ApiOperation(value = "提交材料")
  201. @SaCheckPermission("materialtask:add")
  202. public RT<Boolean> submited(@Valid @RequestBody MaterialTaskAssignAppendixDto dto) {
  203. boolean isSuccess = materialTaskService.submited(dto);
  204. return RT.ok(isSuccess);
  205. }
  206. @PutMapping("/approved")
  207. @ApiOperation(value = "提交材料审核 enabledMark 不用传")
  208. public R approved(@Valid @RequestBody UpdateEnableMarkDto dto) {
  209. MaterialTaskAssign materialTaskAssign = new MaterialTaskAssign();
  210. materialTaskAssign.setId(dto.getId());
  211. materialTaskAssign.setStatus(3);
  212. materialTaskAssignService.updateById(materialTaskAssign);
  213. return R.ok(true);
  214. }
  215. @PutMapping("/reject")
  216. @ApiOperation(value = "提交材料重新 enabledMark 不用传")
  217. public R reject(@Valid @RequestBody UpdateEnableMarkDto dto) {
  218. MaterialTaskAssign materialTaskAssign = new MaterialTaskAssign();
  219. materialTaskAssign.setId(dto.getId());
  220. materialTaskAssign.setStatus(4);
  221. materialTaskAssignService.updateById(materialTaskAssign);
  222. return R.ok(true);
  223. }
  224. @PutMapping("/end")
  225. @ApiOperation(value = "提交材料结束 enabledMark 不用传")
  226. public R end(@Valid @RequestBody UpdateEnableMarkDto dto) {
  227. MaterialTask materialTask = new MaterialTask();
  228. materialTask.setId(dto.getId());
  229. materialTask.setStatus(3);
  230. materialTaskService.updateById(materialTask);
  231. return R.ok(true);
  232. }
  233. @GetMapping(value = "/assign-list")
  234. @ApiOperation(value = "审核分员列表")
  235. @SaCheckPermission("materialtask:detail")
  236. public RT<List<MaterialTaskAssignListVo>> assignList(@Valid MaterialTaskAssignListDto dto) {
  237. MPJLambdaWrapper<MaterialTaskAssign> queryWrapper = new MPJLambdaWrapper<>();
  238. queryWrapper
  239. .distinct()
  240. .disableSubLogicDel()
  241. .eq(MaterialTaskAssign::getMaterialTaskId, dto.getMaterialTaskId())
  242. .eq(dto.getState() == 1, MaterialTaskAssign::getStatus, 2)
  243. .eq(dto.getState() == 2, MaterialTaskAssign::getExecutiveStatus, 1)
  244. .eq(dto.getState() == 3, MaterialTaskAssign::getStatus, 3)
  245. .select(MaterialTaskAssign::getId)
  246. .select(MaterialTaskAssign.class, x -> VoToColumnUtil.fieldsToColumns(MaterialTaskAssignListVo.class).contains(x.getProperty()))
  247. .innerJoin(XjrUser.class, XjrUser::getId, MaterialTaskAssign::getUserId, ext -> ext.selectAs(XjrUser::getUserName, MaterialTaskAssignListVo::getUserName))
  248. .leftJoin(UserDeptRelation.class, UserDeptRelation::getUserId, MaterialTypeAssign::getUserId)
  249. .leftJoin(Department.class, Department::getId, UserDeptRelation::getDeptId, ext -> ext.selectAs(Department::getName, MaterialTaskAssignListVo::getDeptName))
  250. .leftJoin(MaterialTaskAppendix.class, MaterialTaskAppendix::getMaterialTaskId, MaterialTaskAssign::getId)
  251. .leftJoin(File.class, File::getId, MaterialTaskAppendix::getFileId)
  252. .selectAs(File::getFolderId, MaterialTaskAssignListVo::getFolderId);
  253. List<MaterialTaskAssignListVo> pageOutput = materialTaskAssignService.selectJoinList(MaterialTaskAssignListVo.class, queryWrapper);
  254. return RT.ok(pageOutput);
  255. }
  256. }