IntegrateServiceImpl.java 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234
  1. package jnpf.integrate.service.impl;
  2. import cn.hutool.core.util.ObjectUtil;
  3. import com.baomidou.dynamic.datasource.annotation.DSTransactional;
  4. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  5. import com.baomidou.mybatisplus.core.metadata.IPage;
  6. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  7. import jnpf.base.ActionResult;
  8. import jnpf.base.service.SuperServiceImpl;
  9. import jnpf.constant.MsgCode;
  10. import jnpf.exception.WorkFlowException;
  11. import jnpf.integrate.entity.IntegrateEntity;
  12. import jnpf.integrate.job.Integrate;
  13. import jnpf.integrate.job.IntegrateJobUtil;
  14. import jnpf.integrate.job.QuartzUtil;
  15. import jnpf.integrate.mapper.IntegrateMapper;
  16. import jnpf.integrate.model.childnode.IntegrateChildNode;
  17. import jnpf.integrate.model.childnode.IntegrateProperties;
  18. import jnpf.integrate.model.integrate.IntegratePagination;
  19. import jnpf.integrate.model.nodeJson.IntegrateModel;
  20. import jnpf.integrate.service.IntegrateQueueService;
  21. import jnpf.integrate.service.IntegrateService;
  22. import jnpf.util.*;
  23. import org.apache.commons.lang3.StringUtils;
  24. import org.quartz.JobDataMap;
  25. import org.springframework.beans.factory.annotation.Autowired;
  26. import org.springframework.stereotype.Service;
  27. import java.util.*;
  28. @Service
  29. public class IntegrateServiceImpl extends SuperServiceImpl<IntegrateMapper, IntegrateEntity> implements IntegrateService {
  30. @Autowired
  31. private RedisUtil redisUtil;
  32. @Autowired
  33. private IntegrateQueueService integrateQueueService;
  34. @Override
  35. public List<IntegrateEntity> getList(IntegratePagination pagination) {
  36. return getList(pagination, true);
  37. }
  38. @Override
  39. public List<IntegrateEntity> getList(IntegratePagination pagination, boolean isPage) {
  40. QueryWrapper<IntegrateEntity> queryWrapper = new QueryWrapper<>();
  41. if (StringUtil.isNotEmpty(pagination.getKeyword())) {
  42. queryWrapper.lambda().and(
  43. t -> t.like(IntegrateEntity::getFullName, pagination.getKeyword())
  44. .or().like(IntegrateEntity::getEnCode, pagination.getKeyword())
  45. );
  46. }
  47. if (ObjectUtil.isNotEmpty(pagination.getType())) {
  48. queryWrapper.lambda().eq(IntegrateEntity::getType, pagination.getType());
  49. }
  50. if (ObjectUtil.isNotEmpty(pagination.getFormId())) {
  51. queryWrapper.lambda().eq(IntegrateEntity::getFormId, pagination.getFormId());
  52. }
  53. if (ObjectUtil.isNotEmpty(pagination.getTrigger())) {
  54. queryWrapper.lambda().eq(IntegrateEntity::getTriggerType, pagination.getTrigger());
  55. }
  56. if (ObjectUtil.isNotEmpty(pagination.getEnabledMark())) {
  57. queryWrapper.lambda().eq(IntegrateEntity::getEnabledMark, pagination.getEnabledMark());
  58. }
  59. //排序
  60. if (StringUtils.isEmpty(pagination.getSidx())) {
  61. queryWrapper.lambda().orderByDesc(IntegrateEntity::getCreatorTime);
  62. } else {
  63. queryWrapper = "asc".equals(pagination.getSort().toLowerCase()) ? queryWrapper.orderByAsc(pagination.getSidx()) : queryWrapper.orderByDesc(pagination.getSidx());
  64. }
  65. if (isPage) {
  66. Page<IntegrateEntity> page = new Page<>(pagination.getCurrentPage(), pagination.getPageSize());
  67. IPage<IntegrateEntity> userPage = page(page, queryWrapper);
  68. return pagination.setData(userPage.getRecords(), page.getTotal());
  69. }
  70. return this.list(queryWrapper);
  71. }
  72. @Override
  73. public IntegrateEntity getInfo(String id) {
  74. QueryWrapper<IntegrateEntity> queryWrapper = new QueryWrapper<>();
  75. queryWrapper.lambda().eq(IntegrateEntity::getId, id);
  76. return this.getOne(queryWrapper);
  77. }
  78. @Override
  79. public Boolean isExistByFullName(String fullName, String id) {
  80. QueryWrapper<IntegrateEntity> queryWrapper = new QueryWrapper<>();
  81. queryWrapper.lambda().eq(IntegrateEntity::getFullName, fullName);
  82. if (!StringUtil.isEmpty(id)) {
  83. queryWrapper.lambda().ne(IntegrateEntity::getId, id);
  84. }
  85. return this.count(queryWrapper) > 0;
  86. }
  87. @Override
  88. public Boolean isExistByEnCode(String encode, String id) {
  89. QueryWrapper<IntegrateEntity> queryWrapper = new QueryWrapper<>();
  90. queryWrapper.lambda().eq(IntegrateEntity::getEnCode, encode);
  91. if (!StringUtil.isEmpty(id)) {
  92. queryWrapper.lambda().ne(IntegrateEntity::getId, id);
  93. }
  94. return this.count(queryWrapper) > 0;
  95. }
  96. @Override
  97. public void create(IntegrateEntity entity) {
  98. if (StringUtil.isEmpty(entity.getId())) {
  99. entity.setId(RandomUtil.uuId());
  100. }
  101. entity.setCreatorTime(new Date());
  102. entity.setCreatorUserId(UserProvider.getUser().getUserId());
  103. formId(entity);
  104. this.save(entity);
  105. }
  106. @Override
  107. @DSTransactional
  108. public ActionResult ImportData(IntegrateEntity entity, Integer type) throws WorkFlowException {
  109. if (entity != null) {
  110. StringJoiner errList = new StringJoiner("、");
  111. String copyNum = UUID.randomUUID().toString().substring(0, 5);
  112. if (this.getInfo(entity.getId()) != null) {
  113. if (Objects.equals(type, 0)) {
  114. errList.add("ID");
  115. } else {
  116. entity.setId(RandomUtil.uuId());
  117. }
  118. }
  119. if (this.isExistByEnCode(entity.getEnCode(),null) ) {
  120. if (Objects.equals(type, 0)) {
  121. errList.add(MsgCode.IMP009.get());
  122. } else {
  123. entity.setEnCode(entity.getEnCode() + copyNum);
  124. }
  125. }
  126. if (this.isExistByFullName(entity.getFullName(), null) ) {
  127. if (Objects.equals(type, 0)) {
  128. errList.add(MsgCode.IMP008.get());
  129. } else {
  130. entity.setFullName(entity.getFullName() + ".副本" + copyNum);
  131. }
  132. }
  133. if (Objects.equals(type, 0) && errList.length() > 0) {
  134. return ActionResult.fail(errList + MsgCode.IMP007.get());
  135. }
  136. try {
  137. this.setIgnoreLogicDelete().removeById(entity.getId());
  138. entity.setCreatorTime(new Date());
  139. entity.setCreatorUserId(UserProvider.getLoginUserId());
  140. entity.setLastModifyTime(null);
  141. entity.setLastModifyUserId(null);
  142. entity.setEnabledMark(0);
  143. this.setIgnoreLogicDelete().saveOrUpdate(entity);
  144. this.clearIgnoreLogicDelete();
  145. } catch (Exception e) {
  146. throw new WorkFlowException(MsgCode.IMP003.get(),e);
  147. }
  148. return ActionResult.success(MsgCode.IMP001.get());
  149. }
  150. return ActionResult.fail(MsgCode.IMP006.get());
  151. }
  152. @Override
  153. public Boolean update(String id, IntegrateEntity entity, boolean state) {
  154. entity.setId(id);
  155. IntegrateEntity info = getInfo(id);
  156. if (Objects.equals(entity.getEnabledMark(), 0) || !Objects.equals(info.getTemplateJson(), entity.getTemplateJson())) {
  157. deleteJob(entity);
  158. }
  159. if (ObjectUtil.isEmpty(entity.getEnabledMark())) {
  160. entity.setEnabledMark(info.getEnabledMark());
  161. }
  162. if (ObjectUtil.isEmpty(entity.getType())) {
  163. entity.setType(info.getType());
  164. }
  165. if ((!Objects.equals(info.getTemplateJson(), entity.getTemplateJson()) || state) && Objects.equals(entity.getEnabledMark(), 1)) {
  166. formId(entity);
  167. }
  168. entity.setLastModifyTime(new Date());
  169. entity.setLastModifyUserId(UserProvider.getUser().getUserId());
  170. return this.updateById(entity);
  171. }
  172. @Override
  173. public void delete(IntegrateEntity entity) {
  174. deleteJob(entity);
  175. this.removeById(entity.getId());
  176. }
  177. private void formId(IntegrateEntity entity) {
  178. Integer enabledMark = entity.getEnabledMark();
  179. String templateJson = entity.getTemplateJson();
  180. if (StringUtil.isNotEmpty(templateJson)) {
  181. IntegrateChildNode childNode = JsonUtil.getJsonToBean(templateJson, IntegrateChildNode.class);
  182. IntegrateProperties properties = childNode.getProperties();
  183. String formId = properties.getFormId();
  184. entity.setFormId(formId);
  185. entity.setTriggerType(properties.getTriggerEvent());
  186. if (Objects.equals(enabledMark, 1)) {
  187. if (Objects.equals(entity.getType(), 2)) {
  188. IntegrateModel model = new IntegrateModel();
  189. model.setId(entity.getId());
  190. IntegrateJobUtil.removeModel(model, redisUtil);
  191. IntegrateModel integrateModel = JsonUtil.getJsonToBean(properties, IntegrateModel.class);
  192. integrateModel.setUserInfo(UserProvider.getUser());
  193. integrateModel.setId(entity.getId());
  194. integrateModel.setState(0);
  195. JobDataMap jobDataMap = new JobDataMap();
  196. Date startTime = ObjectUtil.isNotEmpty(properties.getStartTime()) ? new Date(properties.getStartTime()) : new Date();
  197. Date endTime = Objects.equals(properties.getEndTimeType(), 2) ? new Date(properties.getEndTime()) : null;
  198. integrateModel.setEndTime(endTime != null ? endTime.getTime() : null);
  199. integrateModel.setStartTime(startTime.getTime());
  200. jobDataMap.putAll(JsonUtil.entityToMap(integrateModel));
  201. redisUtil.removeHash(IntegrateJobUtil.IDGENERATOR_REDIS_KEY, entity.getId());
  202. boolean isAdd = ObjectUtil.isNotEmpty(endTime) ? endTime.getTime() > System.currentTimeMillis() : true;
  203. if (isAdd) {
  204. QuartzUtil.addJob(entity.getId(), properties.getCron(), Integrate.class, jobDataMap, startTime, endTime);
  205. }
  206. }
  207. }
  208. }
  209. }
  210. private void deleteJob(IntegrateEntity entity) {
  211. QuartzUtil.deleteJob(entity.getId());
  212. integrateQueueService.delete(entity.getId());
  213. IntegrateModel model = new IntegrateModel();
  214. model.setId(entity.getId());
  215. IntegrateJobUtil.removeModel(model, redisUtil);
  216. }
  217. }