ActivityInfoController.java 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280
  1. package com.xjrsoft.module.activity.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.db.Entity;
  6. import cn.hutool.json.JSONArray;
  7. import cn.hutool.json.JSONUtil;
  8. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  9. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  10. import com.google.gson.JsonArray;
  11. import com.google.gson.JsonElement;
  12. import com.google.gson.JsonObject;
  13. import com.google.gson.JsonParser;
  14. import com.xjrsoft.common.exception.MyException;
  15. import com.xjrsoft.common.model.result.RT;
  16. import com.xjrsoft.common.mybatis.SqlRunnerAdapter;
  17. import com.xjrsoft.common.page.ConventPage;
  18. import com.xjrsoft.common.page.PageOutput;
  19. import com.xjrsoft.module.activity.dto.ActivityEnrollExportDto;
  20. import com.xjrsoft.module.activity.dto.ActivityEnrollPageDto;
  21. import com.xjrsoft.module.activity.dto.ActivityInfoPageDto;
  22. import com.xjrsoft.module.activity.dto.AddActivityEnrollRangeDto;
  23. import com.xjrsoft.module.activity.dto.AddActivityInfoDto;
  24. import com.xjrsoft.module.activity.dto.ChangeStatusDto;
  25. import com.xjrsoft.module.activity.dto.UpdateActivityInfoDto;
  26. import com.xjrsoft.module.activity.entity.ActivityEnroll;
  27. import com.xjrsoft.module.activity.entity.ActivityEnrollRange;
  28. import com.xjrsoft.module.activity.entity.ActivityInfo;
  29. import com.xjrsoft.module.activity.service.IActivityEnrollRangeService;
  30. import com.xjrsoft.module.activity.service.IActivityEnrollService;
  31. import com.xjrsoft.module.activity.service.IActivityInfoService;
  32. import com.xjrsoft.module.activity.vo.ActivityEnrollPageVo;
  33. import com.xjrsoft.module.activity.vo.ActivityEnrollRangeVo;
  34. import com.xjrsoft.module.activity.vo.ActivityInfoPageVo;
  35. import com.xjrsoft.module.activity.vo.ActivityInfoVo;
  36. import com.xjrsoft.module.base.entity.BaseClass;
  37. import com.xjrsoft.module.base.service.IBaseClassService;
  38. import com.xjrsoft.module.concat.service.IXjrUserService;
  39. import com.xjrsoft.module.organization.entity.Department;
  40. import com.xjrsoft.module.organization.service.IDepartmentService;
  41. import com.xjrsoft.module.system.entity.File;
  42. import com.xjrsoft.module.system.service.IFileService;
  43. import com.xjrsoft.module.teacher.entity.XjrUser;
  44. import io.swagger.annotations.Api;
  45. import io.swagger.annotations.ApiOperation;
  46. import lombok.AllArgsConstructor;
  47. import org.springframework.web.bind.annotation.DeleteMapping;
  48. import org.springframework.web.bind.annotation.GetMapping;
  49. import org.springframework.web.bind.annotation.PostMapping;
  50. import org.springframework.web.bind.annotation.PutMapping;
  51. import org.springframework.web.bind.annotation.RequestBody;
  52. import org.springframework.web.bind.annotation.RequestMapping;
  53. import org.springframework.web.bind.annotation.RequestParam;
  54. import org.springframework.web.bind.annotation.RestController;
  55. import javax.validation.Valid;
  56. import java.time.LocalDateTime;
  57. import java.time.ZoneId;
  58. import java.util.ArrayList;
  59. import java.util.Date;
  60. import java.util.List;
  61. import java.util.Map;
  62. import java.util.Set;
  63. import java.util.stream.Collectors;
  64. /**
  65. * @title: 活动信息
  66. * @Author dzx
  67. * @Date: 2024-07-19
  68. * @Version 1.0
  69. */
  70. @RestController
  71. @RequestMapping("/activity" + "/activityInfo")
  72. @Api(value = "/activity" + "/activityInfo",tags = "活动信息代码")
  73. @AllArgsConstructor
  74. public class ActivityInfoController {
  75. private final IActivityInfoService activityInfoService;
  76. private final IBaseClassService classService;
  77. private final IDepartmentService departmentService;
  78. private final IXjrUserService xjrUserService;
  79. private final IFileService fileService;
  80. private final IActivityEnrollService enrollService;
  81. private final IActivityEnrollRangeService rangeService;
  82. @GetMapping(value = "/page")
  83. @ApiOperation(value="活动信息列表(分页)")
  84. @SaCheckPermission("activityinfo:detail")
  85. public RT<PageOutput<ActivityInfoPageVo>> page(@Valid ActivityInfoPageDto dto){
  86. Page<ActivityInfoPageVo> page = activityInfoService.getPage(new Page<>(dto.getLimit(), dto.getSize()), dto);
  87. PageOutput<ActivityInfoPageVo> pageOutput = ConventPage.getPageOutput(page, ActivityInfoPageVo.class);
  88. return RT.ok(pageOutput);
  89. }
  90. @GetMapping(value = "/info")
  91. @ApiOperation(value="根据id查询活动信息信息")
  92. @SaCheckPermission("activityinfo:detail")
  93. public RT<ActivityInfoVo> info(@RequestParam Long id, Integer category){
  94. ActivityInfoVo infoVo = null;
  95. if(category != null && (category == 1 || category == 2)){
  96. ActivityInfo activityInfo = activityInfoService.getByIdDeep(id);
  97. if (activityInfo == null) {
  98. return RT.error("找不到此数据!");
  99. }
  100. infoVo = BeanUtil.toBean(activityInfo, ActivityInfoVo.class);
  101. if(infoVo.getOrgId() != null){
  102. Department department = departmentService.getById(infoVo.getOrgId());
  103. if(department != null){
  104. infoVo.setOrgName(department.getName());
  105. }
  106. }
  107. if(infoVo.getEnterpriseId() != null){
  108. String tableName = "company_coop";
  109. Entity where = Entity.create(tableName);
  110. where.set("id", infoVo.getEnterpriseId());
  111. Map<String, Object> objectMap = SqlRunnerAdapter.db().dynamicSelectOne(tableName, where);
  112. if(objectMap != null && objectMap.containsKey("company_name")){
  113. infoVo.setEnterpriseName(objectMap.get("company_name").toString());
  114. }
  115. }
  116. List<ActivityEnrollRangeVo> userRelationList = new ArrayList<>();
  117. if(activityInfo.getEnrollRange() != null && !activityInfo.getEnrollRange().isEmpty()){
  118. JSONArray asJsonArray = JSONUtil.parseArray(activityInfo.getEnrollRange());
  119. for (Object jsonElement : asJsonArray) {
  120. ActivityEnrollRangeVo relationDto = JSONUtil.toBean(JSONUtil.parseObj(jsonElement), ActivityEnrollRangeVo.class);
  121. if(relationDto.getUserId() != null){
  122. XjrUser xjrUser = xjrUserService.getById(relationDto.getUserId());
  123. if(xjrUser != null){
  124. relationDto.setName(xjrUser.getName());
  125. }
  126. }else if(relationDto.getDeptId() != null){
  127. Department department = departmentService.getById(relationDto.getDeptId());
  128. if(department != null){
  129. relationDto.setName(department.getName());
  130. }
  131. }else if(relationDto.getClassId() != null){
  132. BaseClass aClass = classService.getById(relationDto.getClassId());
  133. if(aClass != null){
  134. relationDto.setName(aClass.getName());
  135. }
  136. }
  137. userRelationList.add(relationDto);
  138. }
  139. }
  140. infoVo.setActivityEnrollRangeList(userRelationList);
  141. ActivityEnrollExportDto dto = new ActivityEnrollExportDto();
  142. dto.setActivityInfoId(id);
  143. List<ActivityEnrollPageVo> enrollList = enrollService.getList(dto);
  144. infoVo.setEnrollCount(enrollList.size());
  145. Set<ActivityEnrollPageVo> teacherSet = enrollList.stream().filter(x -> x.getTeacherId() != null).collect(Collectors.toSet());
  146. infoVo.setTeacherCount(teacherSet.size());
  147. Set<ActivityEnrollPageVo> studentSet = enrollList.stream().filter(x -> x.getStudentId() != null).collect(Collectors.toSet());
  148. infoVo.setStudentCount(studentSet.size());
  149. Set<ActivityEnrollPageVo> suretSet = enrollList.stream().filter(x -> (x.getStatus() == 1 || x.getStatus() == 2)).collect(Collectors.toSet());
  150. infoVo.setSureCount(suretSet.size());
  151. Set<ActivityEnrollPageVo> notSuretSet = enrollList.stream().filter(x -> x.getStatus() == 0).collect(Collectors.toSet());
  152. infoVo.setNotSureCount(notSuretSet.size());
  153. }else if(category != null && category == 3){
  154. String tableName = "club_activities";
  155. Entity where = Entity.create(tableName);
  156. where.set("id", id);
  157. Map<String, Object> objectMap = SqlRunnerAdapter.db().dynamicSelectOne(tableName, where);
  158. infoVo = new ActivityInfoVo();
  159. infoVo.setName(objectMap.get("club_activities_name").toString());
  160. infoVo.setContent(objectMap.get("club_activities_content").toString());
  161. infoVo.setStartDate(Date.from(((LocalDateTime)objectMap.get("start_time")).atZone(ZoneId.systemDefault()).toInstant()));
  162. infoVo.setEndDate(Date.from(((LocalDateTime)objectMap.get("end_time")).atZone(ZoneId.systemDefault()).toInstant()));
  163. infoVo.setPlace(objectMap.get("activity_location").toString());
  164. }
  165. return RT.ok(infoVo);
  166. }
  167. @PostMapping(value = "/change-status")
  168. @ApiOperation(value="修改状态")
  169. @SaCheckPermission("officebuild:detail")
  170. public RT<Boolean> changeStatus(@Valid @RequestBody ChangeStatusDto dto) throws Exception {
  171. ActivityInfo activityInfo = activityInfoService.getById(dto.getId());
  172. if(activityInfo == null){
  173. throw new MyException("未能找到活动信息");
  174. }
  175. activityInfo.setStatus(dto.getStatus());
  176. activityInfoService.updateById(activityInfo);
  177. return RT.ok(true);
  178. }
  179. @PostMapping
  180. @ApiOperation(value = "新增活动信息")
  181. @SaCheckPermission("activityinfo:add")
  182. public RT<Boolean> add(@Valid @RequestBody AddActivityInfoDto dto){
  183. boolean isSuccess = activityInfoService.add(dto);
  184. return RT.ok(isSuccess);
  185. }
  186. @PutMapping
  187. @ApiOperation(value = "修改活动信息")
  188. @SaCheckPermission("activityinfo:edit")
  189. public RT<Boolean> update(@Valid @RequestBody UpdateActivityInfoDto dto){
  190. return RT.ok(activityInfoService.update(dto));
  191. }
  192. @DeleteMapping
  193. @ApiOperation(value = "删除活动信息")
  194. @SaCheckPermission("activityinfo:delete")
  195. public RT<Boolean> delete(@Valid @RequestBody List<Long> ids){
  196. return RT.ok(activityInfoService.delete(ids));
  197. }
  198. @GetMapping(value = "/effective-list")
  199. @ApiOperation(value="移动端活动信息列表(分页)")
  200. @SaCheckPermission("activityinfo:detail")
  201. public RT<PageOutput<ActivityInfoPageVo>> mobilePage(@Valid ActivityInfoPageDto dto){
  202. AddActivityEnrollRangeDto rangeDto = new AddActivityEnrollRangeDto();
  203. if(dto.getLoginUserId() == null){
  204. dto.setLoginUserId(StpUtil.getLoginIdAsLong());
  205. }
  206. rangeDto.setUserId(dto.getLoginUserId());
  207. List<Long> activityInfoIds = rangeService.getActivityInfoIds(rangeDto);
  208. dto.setActivityInfoIds(activityInfoIds);
  209. dto.setIsEffective(1);
  210. Page<ActivityInfoPageVo> page = activityInfoService.getPage(new Page<>(dto.getLimit(), dto.getSize()), dto);
  211. List<ActivityEnroll> enrollList = enrollService.list(
  212. new QueryWrapper<ActivityEnroll>().lambda()
  213. .eq(ActivityEnroll::getUserId, StpUtil.getLoginIdAsLong())
  214. );
  215. Set<Long> collect = enrollList.stream().map(ActivityEnroll::getActivityInfoId).collect(Collectors.toSet());
  216. for (ActivityInfoPageVo record : page.getRecords()) {
  217. record.setIsEnroll(0);
  218. if(collect.contains(Long.parseLong(record.getId()))){
  219. record.setIsEnroll(1);
  220. }
  221. if(record.getCoverFileId() != null){
  222. File file = fileService.getOne(new QueryWrapper<File>().lambda().eq(File::getFolderId, record.getCoverFileId()));
  223. if(file != null){
  224. record.setCoverFileUrl(file.getFileUrl());
  225. }
  226. }
  227. }
  228. PageOutput<ActivityInfoPageVo> pageOutput = ConventPage.getPageOutput(page, ActivityInfoPageVo.class);
  229. return RT.ok(pageOutput);
  230. }
  231. @GetMapping(value = "/my-enroll-list")
  232. @ApiOperation(value="我的报名记录(分页)")
  233. @SaCheckPermission("activityinfo:detail")
  234. public RT<PageOutput<ActivityInfoPageVo>> myEnrollList(@Valid ActivityInfoPageDto dto){
  235. dto.setLoginUserId(StpUtil.getLoginIdAsLong());
  236. Page<ActivityInfoPageVo> page = activityInfoService.getMyPage(new Page<>(dto.getLimit(), dto.getSize()), dto);
  237. for (ActivityInfoPageVo record : page.getRecords()) {
  238. if(record.getCoverFileId() != null){
  239. File file = fileService.getOne(new QueryWrapper<File>().lambda().eq(File::getFolderId, record.getCoverFileId()));
  240. if(file != null){
  241. record.setCoverFileUrl(file.getFileUrl());
  242. }
  243. }
  244. }
  245. PageOutput<ActivityInfoPageVo> pageOutput = ConventPage.getPageOutput(page, ActivityInfoPageVo.class);
  246. return RT.ok(pageOutput);
  247. }
  248. }