DelegateInfoServiceImpl.java 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217
  1. package jnpf.flowable.service.impl;
  2. import cn.hutool.core.collection.CollectionUtil;
  3. import cn.hutool.core.util.ObjectUtil;
  4. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  5. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  6. import com.github.yulichang.toolkit.JoinWrappers;
  7. import com.github.yulichang.wrapper.MPJLambdaWrapper;
  8. import jnpf.base.UserInfo;
  9. import jnpf.base.model.systemconfig.SysConfigModel;
  10. import jnpf.base.service.SuperServiceImpl;
  11. import jnpf.flowable.entity.DelegateEntity;
  12. import jnpf.flowable.entity.DelegateInfoEntity;
  13. import jnpf.flowable.mapper.DelegateInfoMapper;
  14. import jnpf.flowable.model.delegate.*;
  15. import jnpf.flowable.model.message.DelegateModel;
  16. import jnpf.flowable.service.DelegateInfoService;
  17. import jnpf.flowable.util.MsgUtil;
  18. import jnpf.flowable.util.ServiceUtil;
  19. import jnpf.permission.entity.UserEntity;
  20. import jnpf.util.JsonUtil;
  21. import jnpf.util.RandomUtil;
  22. import jnpf.util.StringUtil;
  23. import jnpf.util.UserProvider;
  24. import org.springframework.beans.factory.annotation.Autowired;
  25. import org.springframework.stereotype.Service;
  26. import java.util.ArrayList;
  27. import java.util.Date;
  28. import java.util.List;
  29. import java.util.stream.Collectors;
  30. /**
  31. * 类的描述
  32. *
  33. * @author JNPF@YinMai Info. Co., Ltd
  34. * @version 5.0.x
  35. * @since 2024/9/2 13:41
  36. */
  37. @Service
  38. public class DelegateInfoServiceImpl extends SuperServiceImpl<DelegateInfoMapper, DelegateInfoEntity> implements DelegateInfoService {
  39. @Autowired
  40. private ServiceUtil serviceUtil;
  41. @Autowired
  42. private MsgUtil msgUtil;
  43. @Override
  44. public List<DelegateListVO> getList(DelegatePagination pagination) {
  45. Integer type = ObjectUtil.equals(pagination.getType(), 2) ? 0 : 1;
  46. String userId = UserProvider.getLoginUserId();
  47. MPJLambdaWrapper<DelegateInfoEntity> wrapper = JoinWrappers.lambda(DelegateInfoEntity.class)
  48. .leftJoin(DelegateEntity.class, DelegateEntity::getId, DelegateInfoEntity::getDelegateId)
  49. .selectAs(DelegateInfoEntity::getId, DelegateInfoModel::getId)
  50. .selectAs(DelegateInfoEntity::getDelegateId, DelegateInfoModel::getDelegateId)
  51. .selectAs(DelegateInfoEntity::getToUserName, DelegateInfoModel::getToUserName)
  52. .selectAs(DelegateInfoEntity::getStatus, DelegateInfoModel::getConfirmStatus)
  53. .selectAs(DelegateEntity::getFlowName, DelegateInfoModel::getFlowName)
  54. .selectAs(DelegateEntity::getUserName, DelegateInfoModel::getUserName)
  55. .selectAs(DelegateEntity::getStartTime, DelegateInfoModel::getStartTime)
  56. .selectAs(DelegateEntity::getEndTime, DelegateInfoModel::getEndTime)
  57. .selectAs(DelegateEntity::getType, DelegateInfoModel::getType)
  58. .selectAs(DelegateEntity::getDescription, DelegateInfoModel::getDescription)
  59. .eq(DelegateInfoEntity::getToUserId, userId)
  60. .eq(DelegateEntity::getType, type);
  61. String keyword = pagination.getKeyword();
  62. if (StringUtil.isNotBlank(keyword)) {
  63. wrapper.and(t -> t.like(DelegateEntity::getUserName, keyword).or().like(DelegateEntity::getFlowName, keyword));
  64. }
  65. wrapper.orderByDesc(DelegateInfoEntity::getCreatorTime);
  66. Page<DelegateInfoModel> page = new Page<>(pagination.getCurrentPage(), pagination.getPageSize());
  67. Page<DelegateInfoModel> data = this.selectJoinListPage(page, DelegateInfoModel.class, wrapper);
  68. List<DelegateInfoModel> dataList = pagination.setData(data.getRecords(), page.getTotal());
  69. List<DelegateListVO> voList = new ArrayList<>();
  70. long time = new Date().getTime();
  71. List<String> delegateIds = dataList.stream().map(DelegateInfoModel::getDelegateId).distinct().collect(Collectors.toList());
  72. List<DelegateInfoEntity> list = this.getList(delegateIds);
  73. for (DelegateInfoModel model : dataList) {
  74. DelegateListVO vo = JsonUtil.getJsonToBean(model, DelegateListVO.class);
  75. List<DelegateInfoEntity> infoList = list.stream()
  76. .filter(e -> ObjectUtil.equals(e.getDelegateId(), model.getDelegateId())).collect(Collectors.toList());
  77. long rejectCount = infoList.stream().filter(e -> ObjectUtil.equals(e.getStatus(), 2)).count();
  78. long acceptCount = infoList.stream().filter(e -> ObjectUtil.equals(e.getStatus(), 1)).count();
  79. if (time >= vo.getEndTime() || rejectCount == infoList.size()) {// 已失效,1、所有人都拒绝;2、到达结束时间或终止委托
  80. vo.setStatus(2);
  81. } else if (time >= vo.getStartTime() && acceptCount > 0) {// 生效中,对方接受且到达开始时间的状态
  82. vo.setStatus(1);
  83. } else {// 未生效,两种场景1:对方已接受但未达到开始时间状态为未生效,2、对方未接受状态为未生效
  84. vo.setStatus(0);
  85. }
  86. voList.add(vo);
  87. }
  88. return voList;
  89. }
  90. @Override
  91. public List<DelegateInfoEntity> getList(List<String> delegateIds) {
  92. if (CollectionUtil.isEmpty(delegateIds)) {
  93. return new ArrayList<>();
  94. }
  95. QueryWrapper<DelegateInfoEntity> queryWrapper = new QueryWrapper<>();
  96. queryWrapper.lambda().in(DelegateInfoEntity::getDelegateId, delegateIds);
  97. return this.list(queryWrapper);
  98. }
  99. @Override
  100. public List<DelegateInfoEntity> getList(String delegateId) {
  101. QueryWrapper<DelegateInfoEntity> queryWrapper = new QueryWrapper<>();
  102. queryWrapper.lambda().eq(DelegateInfoEntity::getDelegateId, delegateId);
  103. return this.list(queryWrapper);
  104. }
  105. @Override
  106. public List<DelegateInfoEntity> getByToUserId(String toUserId) {
  107. QueryWrapper<DelegateInfoEntity> queryWrapper = new QueryWrapper<>();
  108. queryWrapper.lambda().eq(DelegateInfoEntity::getToUserId, toUserId);
  109. return this.list(queryWrapper);
  110. }
  111. @Override
  112. public List<DelegateInfoEntity> getByToUserIds(List<String> userIds) {
  113. List<DelegateInfoEntity> resList = new ArrayList<>();
  114. if (CollectionUtil.isEmpty(userIds)) {
  115. return resList;
  116. }
  117. QueryWrapper<DelegateInfoEntity> queryWrapper = new QueryWrapper<>();
  118. queryWrapper.lambda().in(DelegateInfoEntity::getToUserId, userIds);
  119. resList = this.list(queryWrapper);
  120. return resList;
  121. }
  122. @Override
  123. public void create(DelegateCrForm fo, DelegateEntity delegateEntity) {
  124. this.save(fo.getToUserId(), delegateEntity);
  125. }
  126. public void save(List<String> toUserIdList, DelegateEntity delegateEntity) {
  127. if (CollectionUtil.isNotEmpty(toUserIdList)) {
  128. Integer type = delegateEntity.getType();
  129. // 获取全局配置,是否确认
  130. SysConfigModel sysConfig = serviceUtil.getSysConfig();
  131. Integer ack = ObjectUtil.equals(type, 0) ? sysConfig.getDelegateAck() : sysConfig.getProxyAck();
  132. List<UserEntity> userList = serviceUtil.getUserName(toUserIdList);
  133. List<DelegateInfoEntity> list = new ArrayList<>();
  134. for (String toUserId : toUserIdList) {
  135. DelegateInfoEntity entity = new DelegateInfoEntity();
  136. entity.setId(RandomUtil.uuId());
  137. entity.setStatus(0);
  138. if (ObjectUtil.equals(ack, 0)) {
  139. entity.setStatus(1);
  140. }
  141. entity.setDelegateId(delegateEntity.getId());
  142. entity.setToUserId(toUserId);
  143. UserEntity user = userList.stream().filter(e -> ObjectUtil.equals(e.getId(), toUserId)).findFirst().orElse(null);
  144. if (null != user) {
  145. entity.setToUserName(user.getRealName() + "/" + user.getAccount());
  146. }
  147. list.add(entity);
  148. }
  149. this.saveBatch(list);
  150. // 委托消息
  151. UserInfo userInfo = UserProvider.getUser();
  152. DelegateModel model = new DelegateModel();
  153. model.setToUserIds(toUserIdList);
  154. model.setType(type);
  155. model.setUserInfo(userInfo);
  156. model.setDelegate(ObjectUtil.equals(type, 0));
  157. msgUtil.delegateMsg(model);
  158. }
  159. }
  160. @Override
  161. public void update(DelegateUpForm fo, DelegateEntity delegateEntity) {
  162. String delegateId = delegateEntity.getId();
  163. List<String> toUserIdList = fo.getToUserId();
  164. if (CollectionUtil.isNotEmpty(toUserIdList)) {
  165. List<String> createList = new ArrayList<>();
  166. List<String> deleteList = new ArrayList<>();
  167. List<DelegateInfoEntity> list = this.getList(delegateId);
  168. for (String userId : toUserIdList) {
  169. DelegateInfoEntity infoEntity = list.stream()
  170. .filter(e -> ObjectUtil.equals(e.getToUserId(), userId)).findFirst().orElse(null);
  171. if (null == infoEntity) {
  172. createList.add(userId);
  173. }
  174. }
  175. for (DelegateInfoEntity entity : list) {
  176. String userId = toUserIdList.stream()
  177. .filter(e -> ObjectUtil.equals(entity.getToUserId(), e)).findFirst().orElse(null);
  178. if (StringUtil.isEmpty(userId)) {
  179. deleteList.add(entity.getToUserId());
  180. }
  181. }
  182. if (CollectionUtil.isNotEmpty(deleteList)) {
  183. QueryWrapper<DelegateInfoEntity> wrapper = new QueryWrapper<>();
  184. wrapper.lambda().eq(DelegateInfoEntity::getDelegateId, delegateId)
  185. .in(DelegateInfoEntity::getToUserId, deleteList);
  186. this.remove(wrapper);
  187. }
  188. if (CollectionUtil.isNotEmpty(createList)) {
  189. this.save(createList, delegateEntity);
  190. }
  191. }
  192. }
  193. @Override
  194. public void delete(String delegateId) {
  195. QueryWrapper<DelegateInfoEntity> wrapper = new QueryWrapper<>();
  196. wrapper.lambda().eq(DelegateInfoEntity::getDelegateId, delegateId);
  197. this.remove(wrapper);
  198. }
  199. }