ScheduleNewController.java 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291
  1. package jnpf.base.controller;
  2. import cn.hutool.core.bean.BeanUtil;
  3. import io.swagger.v3.oas.annotations.Operation;
  4. import io.swagger.v3.oas.annotations.Parameter;
  5. import io.swagger.v3.oas.annotations.Parameters;
  6. import io.swagger.v3.oas.annotations.tags.Tag;
  7. import jakarta.validation.Valid;
  8. import jnpf.base.ActionResult;
  9. import jnpf.base.entity.DictionaryDataEntity;
  10. import jnpf.base.entity.ScheduleNewEntity;
  11. import jnpf.base.entity.ScheduleNewUserEntity;
  12. import jnpf.base.model.schedule.*;
  13. import jnpf.base.service.DictionaryDataService;
  14. import jnpf.base.service.ScheduleNewApi;
  15. import jnpf.base.service.ScheduleNewService;
  16. import jnpf.base.service.ScheduleNewUserService;
  17. import jnpf.base.vo.ListVO;
  18. import jnpf.constant.MsgCode;
  19. import jnpf.message.entity.SendMessageConfigEntity;
  20. import jnpf.message.service.SendMessageConfigService;
  21. import jnpf.permission.entity.UserEntity;
  22. import jnpf.permission.service.UserService;
  23. import jnpf.util.*;
  24. import org.apache.commons.lang3.StringUtils;
  25. import org.springframework.beans.factory.annotation.Autowired;
  26. import org.springframework.web.bind.annotation.*;
  27. import java.util.*;
  28. import java.util.stream.Collectors;
  29. /**
  30. * 日程
  31. *
  32. * @author JNPF开发平台组
  33. * @copyright 引迈信息技术有限公司(https://www.jnpfsoft.com)
  34. */
  35. @Tag(name = "日程", description = "Schedule")
  36. @RestController
  37. @RequestMapping("/api/system/Schedule")
  38. public class ScheduleNewController extends SuperController<ScheduleNewService, ScheduleNewEntity> implements ScheduleNewApi {
  39. @Autowired
  40. private UserService userService;
  41. @Autowired
  42. private SendMessageConfigService messageTemplateConfigService;
  43. @Autowired
  44. private DictionaryDataService dictionaryDataService;
  45. @Autowired
  46. private ScheduleNewService scheduleNewService;
  47. @Autowired
  48. private ScheduleNewUserService scheduleNewUserService;
  49. /**
  50. * 获取日程安排列表
  51. *
  52. * @param scheduleNewTime 分页模型
  53. * @return
  54. */
  55. @Operation(summary = "获取日程安排列表")
  56. @GetMapping
  57. public ActionResult<ListVO<ScheduleNewListVO>> list(ScheduleNewTime scheduleNewTime) {
  58. List<ScheduleNewEntity> list = scheduleNewService.getList(scheduleNewTime);
  59. Date start = DateUtil.stringToDates(scheduleNewTime.getStartTime());
  60. Date end = DateUtil.stringToDates(scheduleNewTime.getEndTime());
  61. List<Date> dataAll = DateUtil.getAllDays(start, end);
  62. List<ScheduleNewEntity> result = new ArrayList<>();
  63. if (list.size() > 0) {
  64. for (Date date : dataAll) {
  65. for (ScheduleNewEntity entity : list) {
  66. Date startDay = DateUtil.stringToDates(DateUtil.daFormat(entity.getStartDay()));
  67. Date endDay = DateUtil.stringToDates(DateUtil.daFormat(entity.getEndDay()));
  68. if(DateUtil.isEffectiveDate(date,startDay,endDay)){
  69. result.add(entity);
  70. }
  71. }
  72. }
  73. }
  74. for (ScheduleNewEntity item : result) {
  75. ScheduleNewEntity entity = BeanUtil.copyProperties(item, ScheduleNewEntity.class);
  76. if (entity.getAllDay() == 1) {
  77. entity.setEndDay(DateUtil.dateAddSeconds(entity.getEndDay(), 1));
  78. }
  79. }
  80. List<ScheduleNewListVO> vo = JsonUtil.getJsonToList(result, ScheduleNewListVO.class);
  81. ListVO listVO = new ListVO();
  82. listVO.setList(vo);
  83. return ActionResult.success(listVO);
  84. }
  85. /**
  86. * 获取日程安排列表
  87. *
  88. * @param scheduleNewTime 分页模型
  89. * @return
  90. */
  91. @Operation(summary = "获取日程安排列表")
  92. @GetMapping("/AppList")
  93. public ActionResult<ScheduleNewAppListVO> selectList(ScheduleNewTime scheduleNewTime) {
  94. Map<String, Object> signMap = new HashMap<>(16);
  95. List<ScheduleNewEntity> list = scheduleNewService.getList(scheduleNewTime);
  96. Date start = DateUtil.stringToDates(scheduleNewTime.getStartTime());
  97. Date end = DateUtil.stringToDates(scheduleNewTime.getEndTime());
  98. List<Date> dateList = new ArrayList() {{
  99. add(start);
  100. add(end);
  101. }};
  102. if(StringUtils.isNotEmpty(scheduleNewTime.getDateTime())){
  103. dateList.add(DateUtil.strToDate(scheduleNewTime.getDateTime()));
  104. }
  105. Date minDate = dateList.stream().min(Date::compareTo).get();
  106. Date maxDate = dateList.stream().max(Date::compareTo).get();
  107. List<Date> dataAll = DateUtil.getAllDays(minDate, maxDate);
  108. ScheduleNewAppListVO vo = new ScheduleNewAppListVO();
  109. String pattern = "yyyyMMdd";
  110. String dateTime = StringUtils.isEmpty(scheduleNewTime.getDateTime()) ? DateUtil.dateNow(pattern) : scheduleNewTime.getDateTime().replaceAll("-", "");
  111. List<ScheduleNewEntity> todayList = new ArrayList<>();
  112. for (Date date : dataAll) {
  113. String time = DateUtil.dateToString(date, pattern);
  114. List<ScheduleNewEntity> result = new ArrayList<>();
  115. for (ScheduleNewEntity entity : list) {
  116. Date startDay = DateUtil.stringToDates(DateUtil.daFormat(entity.getStartDay()));
  117. Date endDay = DateUtil.stringToDates(DateUtil.daFormat(entity.getEndDay()));
  118. if(DateUtil.isEffectiveDate(date,startDay,endDay)){
  119. result.add(entity);
  120. }
  121. }
  122. signMap.put(time, result.size());
  123. if(time.equals(dateTime)){
  124. todayList.addAll(result);
  125. }
  126. }
  127. vo.setSignList(signMap);
  128. vo.setTodayList(JsonUtil.getJsonToList(todayList, ScheduleNewListVO.class));
  129. return ActionResult.success(vo);
  130. }
  131. /**
  132. * 信息
  133. *
  134. * @param id 主键
  135. * @return
  136. */
  137. @Operation(summary = "获取日程安排信息")
  138. @GetMapping("/{id}")
  139. @Parameters({
  140. @Parameter(name = "id", description = "主键", required = true),
  141. })
  142. public ActionResult<ScheduleNewInfoVO> info(@PathVariable("id") String id) {
  143. ScheduleNewEntity entity = scheduleNewService.getInfo(id);
  144. ScheduleNewInfoVO vo = JsonUtil.getJsonToBean(entity, ScheduleNewInfoVO.class);
  145. if (vo != null) {
  146. if (!Objects.equals(entity.getCreatorUserId(),UserProvider.getLoginUserId())){
  147. return ActionResult.fail(MsgCode.AD104.get());
  148. }
  149. SendMessageConfigEntity config = StringUtil.isNotEmpty(vo.getSend()) ? messageTemplateConfigService.getInfo(vo.getSend()) : null;
  150. vo.setSendName(config!=null?config.getFullName():"");
  151. List<String> toUserIds = scheduleNewUserService.getList(entity.getId(),2).stream().map(ScheduleNewUserEntity::getToUserId).collect(Collectors.toList());
  152. vo.setToUserIds(toUserIds);
  153. return ActionResult.success(vo);
  154. }
  155. return ActionResult.fail(MsgCode.FA001.get());
  156. }
  157. /**
  158. * 信息
  159. *
  160. * @param detailModel 查询模型
  161. * @return
  162. */
  163. @Operation(summary = "获取日程安排信息")
  164. @GetMapping("/detail")
  165. public ActionResult<ScheduleNewDetailInfoVO> detail(ScheduleDetailModel detailModel) {
  166. List<ScheduleNewEntity> groupList = scheduleNewService.getGroupList(detailModel);
  167. ScheduleNewEntity entity = groupList.size() > 0 ? groupList.get(0) : null;
  168. boolean isVO = entity != null;
  169. if (isVO) {
  170. ScheduleNewDetailInfoVO vo = JsonUtil.getJsonToBean(entity, ScheduleNewDetailInfoVO.class);
  171. DictionaryDataEntity info = dictionaryDataService.getInfo(entity.getCategory());
  172. vo.setCategory(info != null ? info.getFullName() : "");
  173. vo.setUrgent("1".equals(vo.getUrgent()) ? "普通" : "2".equals(vo.getUrgent()) ? "重要" : "紧急");
  174. UserEntity infoById = userService.getInfo(vo.getCreatorUserId());
  175. vo.setCreatorUserId(infoById != null ? infoById.getRealName() + "/" + infoById.getAccount() : "");
  176. List<String> toUserIds = scheduleNewUserService.getList(entity.getId(),2).stream().map(ScheduleNewUserEntity::getToUserId).collect(Collectors.toList());
  177. if (!toUserIds.contains(UserProvider.getLoginUserId())){
  178. return ActionResult.fail(MsgCode.AD104.get());
  179. }
  180. List<UserEntity> userName = userService.getUserName(toUserIds);
  181. StringJoiner joiner = new StringJoiner(",");
  182. for (UserEntity userEntity : userName) {
  183. joiner.add(userEntity.getRealName() + "/" + userEntity.getAccount());
  184. }
  185. vo.setToUserIds(joiner.toString());
  186. return ActionResult.success(vo);
  187. }
  188. return ActionResult.fail(MsgCode.SYS042.get());
  189. }
  190. /**
  191. * 新建
  192. *
  193. * @param scheduleCrForm 日程模型
  194. * @return
  195. */
  196. @Operation(summary = "新建日程安排")
  197. @PostMapping
  198. @Parameters({
  199. @Parameter(name = "scheduleCrForm", description = "日程模型",required = true),
  200. })
  201. public ActionResult create(@RequestBody @Valid ScheduleNewCrForm scheduleCrForm) {
  202. if (scheduleCrForm.paramCheck()) {
  203. return ActionResult.fail(scheduleCrForm.getErrMsg());
  204. }
  205. ScheduleNewEntity entity = JsonUtil.getJsonToBean(scheduleCrForm, ScheduleNewEntity.class);
  206. try {
  207. scheduleNewService.create(entity, scheduleCrForm.getToUserIds(), RandomUtil.uuId(),"1",new ArrayList<>());
  208. } catch (Exception e) {
  209. e.printStackTrace();
  210. return ActionResult.fail(e.getMessage());
  211. }
  212. return ActionResult.success(MsgCode.SU001.get());
  213. }
  214. /**
  215. * 更新
  216. *
  217. * @param id 主键
  218. * @param scheduleUpForm 日程模型
  219. * @param type 1.此日程 2.此日程及后续 3.所有日程
  220. * @return
  221. */
  222. @Operation(summary = "更新日程安排")
  223. @PutMapping("/{id}/{type}")
  224. @Parameters({
  225. @Parameter(name = "id", description = "主键", required = true),
  226. @Parameter(name = "scheduleUpForm", description = "日程模型", required = true),
  227. @Parameter(name = "type", description = "类型", required = true),
  228. })
  229. public ActionResult update(@PathVariable("id") String id, @RequestBody @Valid ScheduleNewUpForm scheduleUpForm, @PathVariable("type") String type) {
  230. if("1".equals(type)){
  231. scheduleUpForm.setRepeatTime(null);
  232. scheduleUpForm.setRepetition(1);
  233. }
  234. if (scheduleUpForm.paramCheck()) {
  235. return ActionResult.fail(scheduleUpForm.getErrMsg());
  236. }
  237. ScheduleNewEntity info = scheduleNewService.getInfo(id);
  238. if (!Objects.equals(info.getCreatorUserId(),UserProvider.getLoginUserId())){
  239. return ActionResult.fail(MsgCode.AD104.get());
  240. }
  241. ScheduleNewEntity entity = JsonUtil.getJsonToBean(scheduleUpForm, ScheduleNewEntity.class);
  242. boolean flag = false;
  243. try {
  244. flag = scheduleNewService.update(id, entity, scheduleUpForm.getToUserIds(), type);
  245. } catch (Exception e) {
  246. e.printStackTrace();
  247. return ActionResult.fail(e.getMessage());
  248. }
  249. if (flag == false) {
  250. return ActionResult.fail(MsgCode.FA002.get());
  251. }
  252. return ActionResult.success(MsgCode.SU004.get());
  253. }
  254. /**
  255. * 删除
  256. *
  257. * @param id 主键
  258. * @param type 1.此日程 2.此日程及后续 3.所有日程
  259. * @return
  260. */
  261. @Operation(summary = "删除日程安排")
  262. @DeleteMapping("/{id}/{type}")
  263. @Parameters({
  264. @Parameter(name = "id", description = "主键", required = true),
  265. @Parameter(name = "type", description = "类型", required = true),
  266. })
  267. public ActionResult delete(@PathVariable("id") String id, @PathVariable("type") String type) {
  268. ScheduleNewEntity entity = scheduleNewService.getInfo(id);
  269. if (entity != null) {
  270. if (!Objects.equals(entity.getCreatorUserId(), UserProvider.getLoginUserId())){
  271. return ActionResult.fail(MsgCode.AD104.get());
  272. }
  273. scheduleNewService.delete(entity, type);
  274. return ActionResult.success(MsgCode.SU003.get());
  275. }
  276. return ActionResult.fail(MsgCode.FA003.get());
  277. }
  278. }