MaterialTaskController.java 17 KB

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