MaterialTaskController.java 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266
  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.form.dto.FormExecuteInfoDto;
  19. import com.xjrsoft.module.form.service.IFormExecuteService;
  20. import com.xjrsoft.module.material.dto.*;
  21. import com.xjrsoft.module.material.entity.*;
  22. import com.xjrsoft.module.material.service.IMaterialTaskAppendixService;
  23. import com.xjrsoft.module.material.service.IMaterialTaskAssignService;
  24. import com.xjrsoft.module.material.service.IMaterialTaskService;
  25. import com.xjrsoft.module.material.vo.MaterialTaskAppendixVo;
  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.personnel.entity.FaceIdentifyRecords;
  34. import com.xjrsoft.module.system.entity.File;
  35. import com.xjrsoft.module.teacher.entity.XjrUser;
  36. import io.swagger.annotations.Api;
  37. import io.swagger.annotations.ApiOperation;
  38. import lombok.AllArgsConstructor;
  39. import org.springframework.http.ResponseEntity;
  40. import org.springframework.web.bind.annotation.DeleteMapping;
  41. import org.springframework.web.bind.annotation.GetMapping;
  42. import org.springframework.web.bind.annotation.PostMapping;
  43. import org.springframework.web.bind.annotation.PutMapping;
  44. import org.springframework.web.bind.annotation.RequestBody;
  45. import org.springframework.web.bind.annotation.RequestMapping;
  46. import org.springframework.web.bind.annotation.RequestParam;
  47. import org.springframework.web.bind.annotation.RestController;
  48. import org.springframework.web.multipart.MultipartFile;
  49. import javax.validation.Valid;
  50. import java.io.ByteArrayOutputStream;
  51. import java.io.IOException;
  52. import java.util.ArrayList;
  53. import java.util.List;
  54. /**
  55. * @title: 材料提交任务
  56. * @Author baicai
  57. * @Date: 2023-10-31
  58. * @Version 1.0
  59. */
  60. @RestController
  61. @RequestMapping("/material" + "/materialtask")
  62. @Api(value = "/material" + "/materialtask",tags = "材料提交任务代码")
  63. @AllArgsConstructor
  64. public class MaterialTaskController {
  65. private final IMaterialTaskService materialTaskService;
  66. private final IMaterialTaskAssignService materialTaskAssignService;
  67. private final IFormExecuteService formExecuteService;
  68. @GetMapping(value = "/page")
  69. @ApiOperation(value = "材料提交任务列表(分页 我发布的)")
  70. @SaCheckPermission("materialtask:detail")
  71. public RT<PageOutput<MaterialTaskPageVo>> page(@Valid MaterialTaskPageDto dto) {
  72. MPJLambdaWrapper<MaterialTask> queryWrapper = new MPJLambdaWrapper<>();
  73. queryWrapper
  74. .orderByDesc(MaterialTask::getId)
  75. .eq(MaterialTask::getCreateUserId, StpUtil.getLoginIdAsLong())
  76. .like(StrUtil.isNotBlank(dto.getName()), MaterialTask::getName, dto.getName())
  77. .eq((ObjectUtil.isNotEmpty(dto.getMaterialTypeId())) && dto.getMaterialTypeId() > 0, MaterialTask::getMaterialTypeId, dto.getMaterialTypeId())
  78. .eq((ObjectUtil.isNotEmpty(dto.getStatus())) && dto.getStatus() > 0, MaterialTask::getStatus, dto.getStatus())
  79. .gt(dto.getCreateDateStart() != null && !dto.getCreateDateStart().equals(""), MaterialTask::getCreateDate, dto.getCreateDateStart())
  80. .lt(dto.getCreateDateEnd() != null && !dto.getCreateDateEnd().equals(""), MaterialTask::getCreateDate, dto.getCreateDateEnd())
  81. .select(MaterialTask::getId)
  82. .selectAs(MaterialType::getName, MaterialTaskPageVo::getMaterialTypeIdCn)
  83. .selectAs(MaterialType::getCreateDate, MaterialTaskPageVo::getCreateDate)
  84. .select(MaterialTask.class, x -> VoToColumnUtil.fieldsToColumns(MaterialTaskPageVo.class).contains(x.getProperty()))
  85. .leftJoin(MaterialType.class, MaterialType::getId, MaterialTask::getMaterialTypeId);
  86. IPage<MaterialTaskPageVo> page = materialTaskService.selectJoinListPage(ConventPage.getPage(dto), MaterialTaskPageVo.class, queryWrapper);
  87. PageOutput<MaterialTaskPageVo> pageOutput = ConventPage.getPageOutput(page, MaterialTaskPageVo.class);
  88. return RT.ok(pageOutput);
  89. }
  90. @GetMapping(value = "/wait-page")
  91. @ApiOperation(value = "材料提交任务列表(分页 我的待办)")
  92. @SaCheckPermission("materialtask:detail")
  93. public RT<PageOutput<MaterialTaskWaitPageVo>> waitPage(@Valid MaterialTaskWaitPageDto dto) {
  94. MPJLambdaWrapper<MaterialTask> queryWrapper = new MPJLambdaWrapper<>();
  95. queryWrapper
  96. .disableLogicDel()
  97. // .eq(MaterialTask::getCreateUserId, StpUtil.getLoginIdAsLong())
  98. .like(StrUtil.isNotBlank(dto.getName()), MaterialTask::getName, dto.getName())
  99. .like(StrUtil.isNotBlank(dto.getAssignedUser()), XjrUser::getName, dto.getAssignedUser())
  100. .eq(ObjectUtil.isNotEmpty(dto.getStatus()), MaterialTask::getStatus, dto.getStatus())
  101. // .eq((ObjectUtil.isNotEmpty(dto.getMaterialTypeId())) && dto.getMaterialTypeId() > 0, MaterialTask::getMaterialTypeId, dto.getMaterialTypeId())
  102. .eq((ObjectUtil.isNotEmpty(dto.getExtStatus())), MaterialTaskAssign::getStatus, dto.getExtStatus())
  103. .select(MaterialTask::getId)
  104. .select(MaterialTask.class, x -> VoToColumnUtil.fieldsToColumns(MaterialTaskWaitPageVo.class).contains(x.getProperty()))
  105. .innerJoin(MaterialTaskAssign.class, MaterialTaskAssign::getMaterialTaskId, MaterialTask::getId, ext -> ext.eq(MaterialTaskAssign::getUserId, StpUtil.getLoginIdAsLong()))
  106. .selectAs(MaterialTaskAssign::getId, MaterialTaskWaitPageVo::getAssignId)
  107. .selectAs(MaterialTaskAssign::getExecutiveStatus, MaterialTaskWaitPageVo::getExecutiveStatus)
  108. .selectAs(MaterialTaskAssign::getTransferAssignPerson, MaterialTaskWaitPageVo::getTransferAssignPerson)
  109. .selectAs(MaterialTaskAssign::getTransferSubmitedPerson, MaterialTaskWaitPageVo::getTransferSubmitedPerson)
  110. .selectAs(MaterialTaskAssign::getStatus, MaterialTaskWaitPageVo::getProcessStatus)
  111. .leftJoin(XjrUser.class, XjrUser::getId, MaterialTask::getCreateUserId, ext -> ext.selectAs(XjrUser::getName, MaterialTaskWaitPageVo::getCreateUserName))
  112. ;
  113. // if (ObjectUtil.isNotNull(dto.getRequiredCompleteStareTime()) && ObjectUtil.isNotNull(dto.getRequiredCompleteEndTime())) {
  114. // queryWrapper.ge(FaceIdentifyRecords::getVerifyTime, dto.getRequiredCompleteStareTime());
  115. // queryWrapper.le(FaceIdentifyRecords::getVerifyTime, dto.getRequiredCompleteEndTime());
  116. // }
  117. IPage<MaterialTaskWaitPageVo> page = materialTaskService.selectJoinListPage(ConventPage.getPage(dto), MaterialTaskWaitPageVo.class, queryWrapper);
  118. PageOutput<MaterialTaskWaitPageVo> pageOutput = ConventPage.getPageOutput(page);
  119. return RT.ok(pageOutput);
  120. }
  121. @GetMapping(value = "/info")
  122. @ApiOperation(value = "根据id查询材料提交任务信息")
  123. @SaCheckPermission("materialtask:detail")
  124. public RT<MaterialTaskVo> info(@RequestParam Long id) {
  125. MaterialTaskVo materialTaskVo = materialTaskService.getInfoById(id);
  126. return RT.ok(materialTaskVo);
  127. }
  128. @PostMapping
  129. @ApiOperation(value = "新增材料提交任务")
  130. @SaCheckPermission("materialtask:add")
  131. public RT<Long> add(@Valid @RequestBody AddMaterialTaskDto dto) {
  132. Long materialTaskId = materialTaskService.add(dto);
  133. //当返回了id表示成功添加了且需要发送通知
  134. if(materialTaskId != null && materialTaskId > 0 && dto.getSendMessage() != null && dto.getSendMessage() == 1){;
  135. materialTaskService.sendMessage(materialTaskId);
  136. }
  137. return RT.ok(materialTaskId);
  138. }
  139. @PutMapping
  140. @ApiOperation(value = "修改材料提交任务")
  141. @SaCheckPermission("materialtask:edit")
  142. public RT<Boolean> update(@Valid @RequestBody UpdateMaterialTaskDto dto) {
  143. MaterialTask materialTask = BeanUtil.toBean(dto, MaterialTask.class);
  144. return RT.ok(materialTaskService.update(materialTask));
  145. }
  146. @DeleteMapping
  147. @ApiOperation(value = "删除材料提交任务")
  148. @SaCheckPermission("materialtask:delete")
  149. public RT<Boolean> delete(@Valid @RequestBody List<Long> ids) {
  150. return RT.ok(materialTaskService.delete(ids));
  151. }
  152. @PostMapping("/import")
  153. @ApiOperation(value = "导入")
  154. public RT<Boolean> importData(@RequestParam MultipartFile file) throws IOException {
  155. List<MaterialTaskPageVo> savedDataList = EasyExcel.read(file.getInputStream()).head(MaterialTaskPageVo.class).sheet().doReadSync();
  156. Boolean result = materialTaskService.saveBatch(BeanUtil.copyToList(savedDataList, MaterialTask.class));
  157. return RT.ok(result);
  158. }
  159. @GetMapping("/export")
  160. @ApiOperation(value = "导出")
  161. public ResponseEntity<byte[]> exportData(@Valid MaterialTaskPageDto dto, @RequestParam(defaultValue = "false") Boolean isTemplate) {
  162. List<MaterialTaskPageVo> customerList = isTemplate != null && isTemplate ? new ArrayList<>() : ((PageOutput<MaterialTaskPageVo>) page(dto).getData()).getList();
  163. ByteArrayOutputStream bot = new ByteArrayOutputStream();
  164. EasyExcel.write(bot, MaterialTaskPageVo.class).automaticMergeHead(false).excelType(ExcelTypeEnum.XLSX).sheet().doWrite(customerList);
  165. return RT.fileStream(bot.toByteArray(), "MaterialTask" + ExcelTypeEnum.XLSX.getValue());
  166. }
  167. @GetMapping(value = "/assign-page")
  168. @ApiOperation(value = "材料提交任务分员列表(分页)")
  169. @SaCheckPermission("materialtask:detail")
  170. public RT<PageOutput<MaterialTaskAssignVo>> assignPage(@Valid MaterialTaskAssignPageDto dto) {
  171. MPJLambdaWrapper<MaterialTaskAssign> queryWrapper = new MPJLambdaWrapper<>();
  172. queryWrapper
  173. .disableSubLogicDel()
  174. .eq(MaterialTaskAssign::getMaterialTaskId, dto.getMaterialTaskId())
  175. .select(MaterialTaskAssign::getId)
  176. .select(MaterialTaskAssign.class, x -> VoToColumnUtil.fieldsToColumns(MaterialTaskAssignVo.class).contains(x.getProperty()))
  177. .innerJoin(XjrUser.class, XjrUser::getId, MaterialTaskAssign::getUserId, ext -> ext.selectAs(XjrUser::getUserName, MaterialTaskAssignVo::getUserName))
  178. .leftJoin(UserDeptRelation.class, UserDeptRelation::getUserId, MaterialTypeAssign::getUserId)
  179. .leftJoin(Department.class, Department::getId, UserDeptRelation::getDeptId, ext -> ext.selectAs(Department::getName, MaterialTaskAssignVo::getDeptName))
  180. ;
  181. IPage<MaterialTaskAssignVo> page = materialTaskAssignService.selectJoinListPage(ConventPage.getPage(dto), MaterialTaskAssignVo.class, queryWrapper);
  182. PageOutput<MaterialTaskAssignVo> pageOutput = ConventPage.getPageOutput(page);
  183. return RT.ok(pageOutput);
  184. }
  185. @PostMapping(value = "/assign-add")
  186. @ApiOperation(value = "材料提交任务分员权限")
  187. @SaCheckPermission("materialtask:add")
  188. public RT<Boolean> assignAdd(@Valid @RequestBody AddMaterialTaskAssignDto dto){
  189. boolean isSuccess = materialTaskAssignService.add(dto);
  190. return RT.ok(isSuccess);
  191. }
  192. @DeleteMapping(value = "/assign-delete")
  193. @ApiOperation(value = "删除材料提交任务分员")
  194. @SaCheckPermission("materialtask:delete")
  195. public RT<Boolean> assignDelete(@Valid @RequestBody List<Long> ids){
  196. return RT.ok(materialTaskAssignService.delete(ids));
  197. }
  198. @PostMapping(value = "submited")
  199. @ApiOperation(value = "提交材料")
  200. @SaCheckPermission("materialtask:add")
  201. public RT<Boolean> submited(@Valid @RequestBody MaterialTaskAssignAppendixDto dto) {
  202. boolean isSuccess = materialTaskService.submited(dto);
  203. return RT.ok(isSuccess);
  204. }
  205. @PostMapping("/approved")
  206. @ApiOperation(value = "提交材料审核")
  207. public R approved(@Valid @RequestBody List<MaterialTaskAssignApprovedDto> dtos) {
  208. return R.ok(materialTaskAssignService.approved(dtos));
  209. }
  210. @PutMapping("/end")
  211. @ApiOperation(value = "提交材料结束 enabledMark 不用传")
  212. public R end(@Valid @RequestBody UpdateEnableMarkDto dto) {
  213. MaterialTask materialTask = new MaterialTask();
  214. materialTask.setId(dto.getId());
  215. materialTask.setStatus(3);
  216. materialTaskService.updateById(materialTask);
  217. return R.ok(true);
  218. }
  219. @GetMapping(value = "/assign-list")
  220. @ApiOperation(value = "审核分员列表")
  221. @SaCheckPermission("materialtask:detail")
  222. public RT<List<MaterialTaskAssignListVo>> assignList(@Valid MaterialTaskAssignListDto dto) {
  223. return RT.ok(materialTaskService.assignList(dto));
  224. }
  225. @GetMapping("/view-contents")
  226. @ApiOperation(value = "查看填报的表单")
  227. public R viewContent(@Valid ViewContentDto dto) {
  228. return R.ok(formExecuteService.getInfoByTemplateId(new FormExecuteInfoDto(){{
  229. setTemplateId(dto.getTemplateId());
  230. setId(dto.getId());
  231. }}));
  232. }
  233. }