MaterialTaskController.java 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334
  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.AddMaterialTaskAssignDto;
  20. import com.xjrsoft.module.material.dto.AddMaterialTaskDto;
  21. import com.xjrsoft.module.material.dto.FormDataExportQueryDto;
  22. import com.xjrsoft.module.material.dto.MaterialTaskAssignAppendixDto;
  23. import com.xjrsoft.module.material.dto.MaterialTaskAssignApprovedDto;
  24. import com.xjrsoft.module.material.dto.MaterialTaskAssignListDto;
  25. import com.xjrsoft.module.material.dto.MaterialTaskAssignPageDto;
  26. import com.xjrsoft.module.material.dto.MaterialTaskPageDto;
  27. import com.xjrsoft.module.material.dto.MaterialTaskWaitPageDto;
  28. import com.xjrsoft.module.material.dto.UpdateMaterialTaskDto;
  29. import com.xjrsoft.module.material.dto.ViewContentDto;
  30. import com.xjrsoft.module.material.entity.MaterialTask;
  31. import com.xjrsoft.module.material.entity.MaterialTaskAssign;
  32. import com.xjrsoft.module.material.entity.MaterialType;
  33. import com.xjrsoft.module.material.entity.MaterialTypeAssign;
  34. import com.xjrsoft.module.material.service.IMaterialTaskAssignService;
  35. import com.xjrsoft.module.material.service.IMaterialTaskService;
  36. import com.xjrsoft.module.material.vo.MaterialTaskAssignListVo;
  37. import com.xjrsoft.module.material.vo.MaterialTaskAssignVo;
  38. import com.xjrsoft.module.material.vo.MaterialTaskExcelVo;
  39. import com.xjrsoft.module.material.vo.MaterialTaskPageVo;
  40. import com.xjrsoft.module.material.vo.MaterialTaskVo;
  41. import com.xjrsoft.module.material.vo.MaterialTaskWaitPageVo;
  42. import com.xjrsoft.module.organization.entity.Department;
  43. import com.xjrsoft.module.organization.entity.UserDeptRelation;
  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 IFormExecuteService formExecuteService;
  77. @GetMapping(value = "/page")
  78. @ApiOperation(value = "材料提交任务列表(分页 我发布的)")
  79. @SaCheckPermission("materialtask:detail")
  80. public RT<PageOutput<MaterialTaskPageVo>> page(@Valid MaterialTaskPageDto dto) {
  81. MPJLambdaWrapper<MaterialTask> queryWrapper = new MPJLambdaWrapper<>();
  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. .gt(dto.getCreateDateStart() != null && !dto.getCreateDateStart().equals(""), MaterialTask::getCreateDate, dto.getCreateDateStart())
  89. .lt(dto.getCreateDateEnd() != null && !dto.getCreateDateEnd().equals(""), MaterialTask::getCreateDate, dto.getCreateDateEnd())
  90. .select(MaterialTask::getId)
  91. .selectAs(MaterialType::getName, MaterialTaskPageVo::getMaterialTypeIdCn)
  92. .selectAs(MaterialType::getCreateDate, MaterialTaskPageVo::getCreateDate)
  93. .select(MaterialTask.class, x -> VoToColumnUtil.fieldsToColumns(MaterialTaskPageVo.class).contains(x.getProperty()))
  94. .leftJoin(MaterialType.class, MaterialType::getId, MaterialTask::getMaterialTypeId);
  95. IPage<MaterialTaskPageVo> page = materialTaskService.selectJoinListPage(ConventPage.getPage(dto), MaterialTaskPageVo.class, queryWrapper);
  96. PageOutput<MaterialTaskPageVo> pageOutput = ConventPage.getPageOutput(page, MaterialTaskPageVo.class);
  97. return RT.ok(pageOutput);
  98. }
  99. @GetMapping(value = "/wait-page")
  100. @ApiOperation(value = "材料提交任务列表(分页 我的待办)")
  101. @SaCheckPermission("materialtask:detail")
  102. public RT<PageOutput<MaterialTaskWaitPageVo>> waitPage(@Valid MaterialTaskWaitPageDto dto) {
  103. MPJLambdaWrapper<MaterialTask> queryWrapper = new MPJLambdaWrapper<>();
  104. queryWrapper
  105. .orderByDesc(MaterialTask::getId)
  106. .disableLogicDel()
  107. // .eq(MaterialTask::getCreateUserId, StpUtil.getLoginIdAsLong())
  108. .like(StrUtil.isNotBlank(dto.getName()), MaterialTask::getName, dto.getName())
  109. .like(StrUtil.isNotBlank(dto.getAssignedUser()), XjrUser::getName, dto.getAssignedUser())
  110. .eq(ObjectUtil.isNotEmpty(dto.getStatus()), MaterialTask::getStatus, dto.getStatus())
  111. // .eq((ObjectUtil.isNotEmpty(dto.getMaterialTypeId())) && dto.getMaterialTypeId() > 0, MaterialTask::getMaterialTypeId, dto.getMaterialTypeId())
  112. .eq((dto.getExtStatus() != null && dto.getExtStatus() != 1), MaterialTaskAssign::getStatus, dto.getExtStatus())
  113. .and((dto.getExtStatus() != null && dto.getExtStatus() == 1),wp -> wp.eq(MaterialTaskAssign::getStatus, 1)
  114. .or()
  115. .eq(MaterialTaskAssign::getStatus, 4))
  116. .select(MaterialTask::getId)
  117. .selectAs(MaterialTask::getMaterialTypeId, MaterialTaskWaitPageVo::getMaterialId)
  118. .select(MaterialTask.class, x -> VoToColumnUtil.fieldsToColumns(MaterialTaskWaitPageVo.class).contains(x.getProperty()))
  119. .innerJoin(MaterialTaskAssign.class, MaterialTaskAssign::getMaterialTaskId, MaterialTask::getId, ext -> ext.eq(MaterialTaskAssign::getUserId, StpUtil.getLoginIdAsLong()))
  120. .selectAs(MaterialTaskAssign::getId, MaterialTaskWaitPageVo::getAssignId)
  121. .selectAs(MaterialTaskAssign::getExecutiveStatus, MaterialTaskWaitPageVo::getExecutiveStatus)
  122. .selectAs(MaterialTaskAssign::getTransferAssignPerson, MaterialTaskWaitPageVo::getTransferAssignPerson)
  123. .selectAs(MaterialTaskAssign::getTransferSubmitedPerson, MaterialTaskWaitPageVo::getTransferSubmitedPerson)
  124. .selectAs(MaterialTaskAssign::getStatus, MaterialTaskWaitPageVo::getProcessStatus)
  125. .leftJoin(XjrUser.class, XjrUser::getId, MaterialTask::getCreateUserId, ext -> ext.selectAs(XjrUser::getName, MaterialTaskWaitPageVo::getCreateUserName))
  126. // .leftJoin(MaterialTaskAppendix.class, MaterialTaskAppendix::getMaterialTaskId, MaterialTaskAssign::getId, ext -> ext.selectAs(MaterialTaskAppendix::getFileId, MaterialTaskWaitPageVo::getMaterialId))
  127. ;
  128. // if (ObjectUtil.isNotNull(dto.getRequiredCompleteStareTime()) && ObjectUtil.isNotNull(dto.getRequiredCompleteEndTime())) {
  129. // queryWrapper.ge(FaceIdentifyRecords::getVerifyTime, dto.getRequiredCompleteStareTime());
  130. // queryWrapper.le(FaceIdentifyRecords::getVerifyTime, dto.getRequiredCompleteEndTime());
  131. // }
  132. IPage<MaterialTaskWaitPageVo> page = materialTaskService.selectJoinListPage(ConventPage.getPage(dto), MaterialTaskWaitPageVo.class, queryWrapper);
  133. PageOutput<MaterialTaskWaitPageVo> pageOutput = ConventPage.getPageOutput(page);
  134. return RT.ok(pageOutput);
  135. }
  136. @GetMapping(value = "/info")
  137. @ApiOperation(value = "根据id查询材料提交任务信息")
  138. @SaCheckPermission("materialtask:detail")
  139. public RT<MaterialTaskVo> info(@RequestParam Long id) {
  140. MaterialTaskVo materialTaskVo = materialTaskService.getInfoById(id);
  141. return RT.ok(materialTaskVo);
  142. }
  143. @GetMapping(value = "/view")
  144. @ApiOperation(value = "根据id查询材料提交任务信息")
  145. @SaCheckPermission("materialtask:detail")
  146. public RT<MaterialTaskVo> view(@RequestParam Long id) {
  147. MaterialTaskVo materialTaskVo = materialTaskService.getInfoViewById(id);
  148. return RT.ok(materialTaskVo);
  149. }
  150. @PostMapping
  151. @ApiOperation(value = "新增材料提交任务")
  152. @SaCheckPermission("materialtask:add")
  153. public RT<Long> add(@Valid @RequestBody AddMaterialTaskDto dto) {
  154. Long materialTaskId = materialTaskService.add(dto);
  155. //当返回了id表示成功添加了且需要发送通知
  156. if(materialTaskId != null && materialTaskId > 0 && dto.getSendMessage() != null && dto.getSendMessage() == 1){;
  157. materialTaskService.sendMessage(materialTaskId);
  158. }
  159. return RT.ok(materialTaskId);
  160. }
  161. @PutMapping
  162. @ApiOperation(value = "修改材料提交任务")
  163. @SaCheckPermission("materialtask:edit")
  164. public RT<Boolean> update(@Valid @RequestBody UpdateMaterialTaskDto dto) {
  165. MaterialTask materialTask = BeanUtil.toBean(dto, MaterialTask.class);
  166. return RT.ok(materialTaskService.update(materialTask));
  167. }
  168. @DeleteMapping
  169. @ApiOperation(value = "删除材料提交任务")
  170. @SaCheckPermission("materialtask:delete")
  171. public RT<Boolean> delete(@Valid @RequestBody List<Long> ids) {
  172. return RT.ok(materialTaskService.delete(ids));
  173. }
  174. @PostMapping("/import")
  175. @ApiOperation(value = "导入")
  176. public RT<Boolean> importData(@RequestParam MultipartFile file) throws IOException {
  177. List<MaterialTaskPageVo> savedDataList = EasyExcel.read(file.getInputStream()).head(MaterialTaskPageVo.class).sheet().doReadSync();
  178. Boolean result = materialTaskService.saveBatch(BeanUtil.copyToList(savedDataList, MaterialTask.class));
  179. return RT.ok(result);
  180. }
  181. @PostMapping("/export-query")
  182. @ApiOperation(value = "导出")
  183. public ResponseEntity<byte[]> exportData(@Valid @RequestBody MaterialTaskAssignListDto dto) {
  184. List<MaterialTaskAssignListVo> customerList = materialTaskService.assignList(dto);
  185. List<MaterialTaskExcelVo> dataList = new ArrayList<>();
  186. for (int i = 0; i < customerList.size(); i ++){
  187. int finalI = i;
  188. MaterialTaskAssignListVo listVo = customerList.get(i);
  189. MaterialTaskExcelVo excelVo = new MaterialTaskExcelVo();
  190. excelVo.setSortCode(finalI + 1);
  191. excelVo.setName(listVo.getName());
  192. excelVo.setUserNumber(listVo.getUserNumber());
  193. String userType = "";
  194. if(listVo.getUserType() != null && listVo.getUserType() == 1){
  195. userType = "教职工";
  196. }else if(listVo.getUserType() != null && listVo.getUserType() == 2){
  197. userType = "学生";
  198. }
  199. excelVo.setUserType(userType);
  200. excelVo.setDeptName(listVo.getDeptName());
  201. //状态 1=未提交 2=待审核 3=通过 4=重做
  202. String state = "";
  203. if(listVo.getStatus() != null && listVo.getStatus() == 1){
  204. state = "未提交";
  205. }else if(listVo.getStatus() != null && listVo.getStatus() == 2){
  206. state = "待审核";
  207. }else if(listVo.getStatus() != null && listVo.getStatus() == 3){
  208. state = "通过";
  209. }else if(listVo.getStatus() != null && listVo.getStatus() == 4){
  210. state = "重做";
  211. }
  212. excelVo.setStatus(state);
  213. dataList.add(excelVo);
  214. }
  215. ByteArrayOutputStream bot = new ByteArrayOutputStream();
  216. EasyExcel.write(bot, MaterialTaskExcelVo.class).automaticMergeHead(false).excelType(ExcelTypeEnum.XLSX).sheet().doWrite(dataList);
  217. return RT.fileStream(bot.toByteArray(), "MaterialTask" + ExcelTypeEnum.XLSX.getValue());
  218. }
  219. @GetMapping(value = "/assign-page")
  220. @ApiOperation(value = "材料提交任务分员列表(分页)")
  221. @SaCheckPermission("materialtask:detail")
  222. public RT<PageOutput<MaterialTaskAssignVo>> assignPage(@Valid MaterialTaskAssignPageDto dto) {
  223. MPJLambdaWrapper<MaterialTaskAssign> queryWrapper = new MPJLambdaWrapper<>();
  224. queryWrapper
  225. .disableSubLogicDel()
  226. .eq(MaterialTaskAssign::getMaterialTaskId, dto.getMaterialTaskId())
  227. .select(MaterialTaskAssign::getId)
  228. .select(MaterialTaskAssign.class, x -> VoToColumnUtil.fieldsToColumns(MaterialTaskAssignVo.class).contains(x.getProperty()))
  229. .innerJoin(XjrUser.class, XjrUser::getId, MaterialTaskAssign::getUserId, ext -> ext.selectAs(XjrUser::getUserName, MaterialTaskAssignVo::getUserName))
  230. .leftJoin(UserDeptRelation.class, UserDeptRelation::getUserId, MaterialTypeAssign::getUserId)
  231. .leftJoin(Department.class, Department::getId, UserDeptRelation::getDeptId, ext -> ext.selectAs(Department::getName, MaterialTaskAssignVo::getDeptName))
  232. ;
  233. IPage<MaterialTaskAssignVo> page = materialTaskAssignService.selectJoinListPage(ConventPage.getPage(dto), MaterialTaskAssignVo.class, queryWrapper);
  234. PageOutput<MaterialTaskAssignVo> pageOutput = ConventPage.getPageOutput(page);
  235. return RT.ok(pageOutput);
  236. }
  237. @PostMapping(value = "/assign-add")
  238. @ApiOperation(value = "材料提交任务分员权限")
  239. @SaCheckPermission("materialtask:add")
  240. public RT<Boolean> assignAdd(@Valid @RequestBody AddMaterialTaskAssignDto dto){
  241. boolean isSuccess = materialTaskAssignService.add(dto);
  242. return RT.ok(isSuccess);
  243. }
  244. @DeleteMapping(value = "/assign-delete")
  245. @ApiOperation(value = "删除材料提交任务分员")
  246. @SaCheckPermission("materialtask:delete")
  247. public RT<Boolean> assignDelete(@Valid @RequestBody List<Long> ids){
  248. return RT.ok(materialTaskAssignService.delete(ids));
  249. }
  250. @PostMapping(value = "submited")
  251. @ApiOperation(value = "提交材料")
  252. @SaCheckPermission("materialtask:add")
  253. public RT<Boolean> submited(@Valid @RequestBody MaterialTaskAssignAppendixDto dto) {
  254. boolean isSuccess = materialTaskService.submited(dto);
  255. return RT.ok(isSuccess);
  256. }
  257. @PostMapping("/approved")
  258. @ApiOperation(value = "提交材料审核")
  259. public R approved(@Valid @RequestBody List<MaterialTaskAssignApprovedDto> dtos) {
  260. return R.ok(materialTaskAssignService.approved(dtos));
  261. }
  262. @PutMapping("/end")
  263. @ApiOperation(value = "提交材料结束 enabledMark 不用传")
  264. public R end(@Valid @RequestBody UpdateEnableMarkDto dto) {
  265. MaterialTask materialTask = new MaterialTask();
  266. materialTask.setId(dto.getId());
  267. materialTask.setStatus(3);
  268. materialTaskService.updateById(materialTask);
  269. return R.ok(true);
  270. }
  271. @GetMapping(value = "/assign-list")
  272. @ApiOperation(value = "审核分员列表")
  273. @SaCheckPermission("materialtask:detail")
  274. public RT<List<MaterialTaskAssignListVo>> assignList(@Valid MaterialTaskAssignListDto dto) {
  275. return RT.ok(materialTaskService.assignList(dto));
  276. }
  277. @GetMapping("/view-contents")
  278. @ApiOperation(value = "查看填报的表单")
  279. public R viewContent(@Valid ViewContentDto dto) {
  280. return R.ok(formExecuteService.getInfoByTemplateId(new FormExecuteInfoDto(){{
  281. setTemplateId(dto.getTemplateId());
  282. setId(dto.getId());
  283. }}));
  284. }
  285. @PostMapping("/form-data-export-query")
  286. @ApiOperation(value = "表单缴交数据条件导出")
  287. public ResponseEntity<byte[]> formDataExportQuery(@Valid @RequestBody FormDataExportQueryDto dto) {
  288. ByteArrayOutputStream bot = materialTaskService.formDataExportQuery(dto);
  289. return RT.fileStream(bot.toByteArray(), "MaterialFormData" + ExcelTypeEnum.XLSX.getValue());
  290. }
  291. @PostMapping("/download-file-export-query")
  292. @ApiOperation(value = "下载附件(zip压缩包)")
  293. public ResponseEntity<byte[]> downloadFile(@Valid @RequestBody MaterialTaskAssignListDto dto) {
  294. byte[] bytes = materialTaskService.downloadFile(dto);
  295. return RT.fileStream(bytes, "download-file-export.zip");
  296. }
  297. }