MaterialTaskController.java 16 KB

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