MaterialTaskController.java 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287
  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.metadata.IPage;
  10. import com.github.yulichang.wrapper.MPJLambdaWrapper;
  11. import com.xjrsoft.common.model.result.R;
  12. import com.xjrsoft.common.model.result.RT;
  13. import com.xjrsoft.common.page.ConventPage;
  14. import com.xjrsoft.common.page.PageOutput;
  15. import com.xjrsoft.common.utils.VoToColumnUtil;
  16. import com.xjrsoft.module.app.dto.UpdateEnableMarkDto;
  17. import com.xjrsoft.module.form.dto.FormExecuteInfoDto;
  18. import com.xjrsoft.module.form.service.IFormExecuteService;
  19. import com.xjrsoft.module.material.dto.*;
  20. import com.xjrsoft.module.material.entity.MaterialTask;
  21. import com.xjrsoft.module.material.entity.MaterialTaskAssign;
  22. import com.xjrsoft.module.material.entity.MaterialType;
  23. import com.xjrsoft.module.material.entity.MaterialTypeAssign;
  24. import com.xjrsoft.module.material.service.IMaterialTaskAssignService;
  25. import com.xjrsoft.module.material.service.IMaterialTaskService;
  26. import com.xjrsoft.module.material.vo.MaterialTaskAssignListVo;
  27. import com.xjrsoft.module.material.vo.MaterialTaskAssignVo;
  28. import com.xjrsoft.module.material.vo.MaterialTaskPageVo;
  29. import com.xjrsoft.module.material.vo.MaterialTaskVo;
  30. import com.xjrsoft.module.material.vo.MaterialTaskWaitPageVo;
  31. import com.xjrsoft.module.organization.entity.Department;
  32. import com.xjrsoft.module.organization.entity.UserDeptRelation;
  33. import com.xjrsoft.module.teacher.entity.XjrUser;
  34. import io.swagger.annotations.Api;
  35. import io.swagger.annotations.ApiOperation;
  36. import lombok.AllArgsConstructor;
  37. import org.springframework.http.ResponseEntity;
  38. import org.springframework.web.bind.annotation.DeleteMapping;
  39. import org.springframework.web.bind.annotation.GetMapping;
  40. import org.springframework.web.bind.annotation.PostMapping;
  41. import org.springframework.web.bind.annotation.PutMapping;
  42. import org.springframework.web.bind.annotation.RequestBody;
  43. import org.springframework.web.bind.annotation.RequestMapping;
  44. import org.springframework.web.bind.annotation.RequestParam;
  45. import org.springframework.web.bind.annotation.RestController;
  46. import org.springframework.web.multipart.MultipartFile;
  47. import javax.validation.Valid;
  48. import java.io.ByteArrayOutputStream;
  49. import java.io.IOException;
  50. import java.time.LocalDate;
  51. import java.time.format.DateTimeFormatter;
  52. import java.util.List;
  53. /**
  54. * @title: 材料提交任务
  55. * @Author baicai
  56. * @Date: 2023-10-31
  57. * @Version 1.0
  58. */
  59. @RestController
  60. @RequestMapping("/material" + "/materialtask")
  61. @Api(value = "/material" + "/materialtask",tags = "材料提交任务代码")
  62. @AllArgsConstructor
  63. public class MaterialTaskController {
  64. private final IMaterialTaskService materialTaskService;
  65. private final IMaterialTaskAssignService materialTaskAssignService;
  66. private final IFormExecuteService formExecuteService;
  67. @GetMapping(value = "/page")
  68. @ApiOperation(value = "材料提交任务列表(分页 我发布的)")
  69. @SaCheckPermission("materialtask:detail")
  70. public RT<PageOutput<MaterialTaskPageVo>> page(@Valid MaterialTaskPageDto dto) {
  71. MPJLambdaWrapper<MaterialTask> queryWrapper = new MPJLambdaWrapper<>();
  72. queryWrapper
  73. .orderByDesc(MaterialTask::getId)
  74. .eq(MaterialTask::getCreateUserId, StpUtil.getLoginIdAsLong())
  75. .like(StrUtil.isNotBlank(dto.getName()), MaterialTask::getName, dto.getName())
  76. .eq((ObjectUtil.isNotEmpty(dto.getMaterialTypeId())) && dto.getMaterialTypeId() > 0, MaterialTask::getMaterialTypeId, dto.getMaterialTypeId())
  77. .eq((ObjectUtil.isNotEmpty(dto.getStatus())) && dto.getStatus() > 0, MaterialTask::getStatus, dto.getStatus())
  78. .gt(dto.getCreateDateStart() != null && !dto.getCreateDateStart().equals(""), MaterialTask::getCreateDate, dto.getCreateDateStart())
  79. .lt(dto.getCreateDateEnd() != null && !dto.getCreateDateEnd().equals(""), MaterialTask::getCreateDate, dto.getCreateDateEnd())
  80. .select(MaterialTask::getId)
  81. .selectAs(MaterialType::getName, MaterialTaskPageVo::getMaterialTypeIdCn)
  82. .selectAs(MaterialType::getCreateDate, MaterialTaskPageVo::getCreateDate)
  83. .select(MaterialTask.class, x -> VoToColumnUtil.fieldsToColumns(MaterialTaskPageVo.class).contains(x.getProperty()))
  84. .leftJoin(MaterialType.class, MaterialType::getId, MaterialTask::getMaterialTypeId);
  85. IPage<MaterialTaskPageVo> page = materialTaskService.selectJoinListPage(ConventPage.getPage(dto), MaterialTaskPageVo.class, queryWrapper);
  86. PageOutput<MaterialTaskPageVo> pageOutput = ConventPage.getPageOutput(page, MaterialTaskPageVo.class);
  87. return RT.ok(pageOutput);
  88. }
  89. @GetMapping(value = "/wait-page")
  90. @ApiOperation(value = "材料提交任务列表(分页 我的待办)")
  91. @SaCheckPermission("materialtask:detail")
  92. public RT<PageOutput<MaterialTaskWaitPageVo>> waitPage(@Valid MaterialTaskWaitPageDto dto) {
  93. MPJLambdaWrapper<MaterialTask> queryWrapper = new MPJLambdaWrapper<>();
  94. queryWrapper
  95. .disableLogicDel()
  96. // .eq(MaterialTask::getCreateUserId, StpUtil.getLoginIdAsLong())
  97. .like(StrUtil.isNotBlank(dto.getName()), MaterialTask::getName, dto.getName())
  98. .like(StrUtil.isNotBlank(dto.getAssignedUser()), XjrUser::getName, dto.getAssignedUser())
  99. .eq(ObjectUtil.isNotEmpty(dto.getStatus()), MaterialTask::getStatus, dto.getStatus())
  100. // .eq((ObjectUtil.isNotEmpty(dto.getMaterialTypeId())) && dto.getMaterialTypeId() > 0, MaterialTask::getMaterialTypeId, dto.getMaterialTypeId())
  101. .eq((dto.getExtStatus() != null && dto.getExtStatus() != 1), MaterialTaskAssign::getStatus, dto.getExtStatus())
  102. .and((dto.getExtStatus() != null && dto.getExtStatus() == 1),wp -> wp.eq(MaterialTaskAssign::getStatus, 1)
  103. .or()
  104. .eq(MaterialTaskAssign::getStatus, 4))
  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. // .leftJoin(MaterialTaskAppendix.class, MaterialTaskAppendix::getMaterialTaskId, MaterialTaskAssign::getId, ext -> ext.selectAs(MaterialTaskAppendix::getFileId, MaterialTaskWaitPageVo::getMaterialId))
  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. MaterialTaskVo materialTaskVo = materialTaskService.getInfoById(id);
  129. return RT.ok(materialTaskVo);
  130. }
  131. @PostMapping
  132. @ApiOperation(value = "新增材料提交任务")
  133. @SaCheckPermission("materialtask:add")
  134. public RT<Long> add(@Valid @RequestBody AddMaterialTaskDto dto) {
  135. Long materialTaskId = materialTaskService.add(dto);
  136. //当返回了id表示成功添加了且需要发送通知
  137. if(materialTaskId != null && materialTaskId > 0 && dto.getSendMessage() != null && dto.getSendMessage() == 1){;
  138. materialTaskService.sendMessage(materialTaskId);
  139. }
  140. return RT.ok(materialTaskId);
  141. }
  142. @PutMapping
  143. @ApiOperation(value = "修改材料提交任务")
  144. @SaCheckPermission("materialtask:edit")
  145. public RT<Boolean> update(@Valid @RequestBody UpdateMaterialTaskDto dto) {
  146. MaterialTask materialTask = BeanUtil.toBean(dto, MaterialTask.class);
  147. return RT.ok(materialTaskService.update(materialTask));
  148. }
  149. @DeleteMapping
  150. @ApiOperation(value = "删除材料提交任务")
  151. @SaCheckPermission("materialtask:delete")
  152. public RT<Boolean> delete(@Valid @RequestBody List<Long> ids) {
  153. return RT.ok(materialTaskService.delete(ids));
  154. }
  155. @PostMapping("/import")
  156. @ApiOperation(value = "导入")
  157. public RT<Boolean> importData(@RequestParam MultipartFile file) throws IOException {
  158. List<MaterialTaskPageVo> savedDataList = EasyExcel.read(file.getInputStream()).head(MaterialTaskPageVo.class).sheet().doReadSync();
  159. Boolean result = materialTaskService.saveBatch(BeanUtil.copyToList(savedDataList, MaterialTask.class));
  160. return RT.ok(result);
  161. }
  162. @PostMapping("/export-query")
  163. @ApiOperation(value = "导出")
  164. public ResponseEntity<byte[]> exportData(@Valid @RequestBody MaterialTaskPageDto dto) {
  165. List<MaterialTaskPageVo> customerList = ((PageOutput<MaterialTaskPageVo>) page(dto).getData()).getList();
  166. ByteArrayOutputStream bot = new ByteArrayOutputStream();
  167. EasyExcel.write(bot, MaterialTaskPageVo.class).automaticMergeHead(false).excelType(ExcelTypeEnum.XLSX).sheet().doWrite(customerList);
  168. return RT.fileStream(bot.toByteArray(), "MaterialTask" + ExcelTypeEnum.XLSX.getValue());
  169. }
  170. @GetMapping(value = "/assign-page")
  171. @ApiOperation(value = "材料提交任务分员列表(分页)")
  172. @SaCheckPermission("materialtask:detail")
  173. public RT<PageOutput<MaterialTaskAssignVo>> assignPage(@Valid MaterialTaskAssignPageDto dto) {
  174. MPJLambdaWrapper<MaterialTaskAssign> queryWrapper = new MPJLambdaWrapper<>();
  175. queryWrapper
  176. .disableSubLogicDel()
  177. .eq(MaterialTaskAssign::getMaterialTaskId, dto.getMaterialTaskId())
  178. .select(MaterialTaskAssign::getId)
  179. .select(MaterialTaskAssign.class, x -> VoToColumnUtil.fieldsToColumns(MaterialTaskAssignVo.class).contains(x.getProperty()))
  180. .innerJoin(XjrUser.class, XjrUser::getId, MaterialTaskAssign::getUserId, ext -> ext.selectAs(XjrUser::getUserName, MaterialTaskAssignVo::getUserName))
  181. .leftJoin(UserDeptRelation.class, UserDeptRelation::getUserId, MaterialTypeAssign::getUserId)
  182. .leftJoin(Department.class, Department::getId, UserDeptRelation::getDeptId, ext -> ext.selectAs(Department::getName, MaterialTaskAssignVo::getDeptName))
  183. ;
  184. IPage<MaterialTaskAssignVo> page = materialTaskAssignService.selectJoinListPage(ConventPage.getPage(dto), MaterialTaskAssignVo.class, queryWrapper);
  185. PageOutput<MaterialTaskAssignVo> pageOutput = ConventPage.getPageOutput(page);
  186. return RT.ok(pageOutput);
  187. }
  188. @PostMapping(value = "/assign-add")
  189. @ApiOperation(value = "材料提交任务分员权限")
  190. @SaCheckPermission("materialtask:add")
  191. public RT<Boolean> assignAdd(@Valid @RequestBody AddMaterialTaskAssignDto dto){
  192. boolean isSuccess = materialTaskAssignService.add(dto);
  193. return RT.ok(isSuccess);
  194. }
  195. @DeleteMapping(value = "/assign-delete")
  196. @ApiOperation(value = "删除材料提交任务分员")
  197. @SaCheckPermission("materialtask:delete")
  198. public RT<Boolean> assignDelete(@Valid @RequestBody List<Long> ids){
  199. return RT.ok(materialTaskAssignService.delete(ids));
  200. }
  201. @PostMapping(value = "submited")
  202. @ApiOperation(value = "提交材料")
  203. @SaCheckPermission("materialtask:add")
  204. public RT<Boolean> submited(@Valid @RequestBody MaterialTaskAssignAppendixDto dto) {
  205. boolean isSuccess = materialTaskService.submited(dto);
  206. return RT.ok(isSuccess);
  207. }
  208. @PostMapping("/approved")
  209. @ApiOperation(value = "提交材料审核")
  210. public R approved(@Valid @RequestBody List<MaterialTaskAssignApprovedDto> dtos) {
  211. return R.ok(materialTaskAssignService.approved(dtos));
  212. }
  213. @PutMapping("/end")
  214. @ApiOperation(value = "提交材料结束 enabledMark 不用传")
  215. public R end(@Valid @RequestBody UpdateEnableMarkDto dto) {
  216. MaterialTask materialTask = new MaterialTask();
  217. materialTask.setId(dto.getId());
  218. materialTask.setStatus(3);
  219. materialTaskService.updateById(materialTask);
  220. return R.ok(true);
  221. }
  222. @GetMapping(value = "/assign-list")
  223. @ApiOperation(value = "审核分员列表")
  224. @SaCheckPermission("materialtask:detail")
  225. public RT<List<MaterialTaskAssignListVo>> assignList(@Valid MaterialTaskAssignListDto dto) {
  226. return RT.ok(materialTaskService.assignList(dto));
  227. }
  228. @GetMapping("/view-contents")
  229. @ApiOperation(value = "查看填报的表单")
  230. public R viewContent(@Valid ViewContentDto dto) {
  231. return R.ok(formExecuteService.getInfoByTemplateId(new FormExecuteInfoDto(){{
  232. setTemplateId(dto.getTemplateId());
  233. setId(dto.getId());
  234. }}));
  235. }
  236. @PostMapping("/form-data-export-query")
  237. @ApiOperation(value = "表单缴交数据条件导出")
  238. public ResponseEntity<byte[]> formDataExportQuery(@Valid @RequestBody FormDataExportQueryDto dto) {
  239. ByteArrayOutputStream bot = materialTaskService.formDataExportQuery(dto);
  240. return RT.fileStream(bot.toByteArray(), "MaterialFormData" + ExcelTypeEnum.XLSX.getValue());
  241. }
  242. @PostMapping("/download-file-export")
  243. @ApiOperation(value = "下载附件(zip压缩包)")
  244. public ResponseEntity<byte[]> downloadFile(@Valid @RequestBody MaterialTaskAssignListDto dto) {
  245. MaterialTask materialTask = materialTaskService.getById(dto.getMaterialTaskId());
  246. DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日");
  247. byte[] bytes = materialTaskService.downloadFile(dto);
  248. return RT.fileStream(bytes, materialTask.getName() + "【" + LocalDate.now().format(formatter) + "】" + ".zip");
  249. }
  250. }