XxlJobUtils.java 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  1. package com.dk.common.infrastructure.xxl;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.dk.common.exception.BaseBusinessException;
  4. import com.dk.common.infrastructure.config.XxlJobInfoConfig;
  5. import com.dk.common.infrastructure.constant.Constant;
  6. import com.dk.common.infrastructure.enums.ErrorCodeEnum;
  7. import com.dk.common.model.xxl.XxlJobInfo;
  8. import com.dk.common.response.ResponseCodeEnum;
  9. import com.dk.common.response.ResponseResultVO;
  10. import com.dk.common.util.HttpUtils;
  11. import com.dk.common.util.UrlUtils;
  12. import com.xxl.job.core.handler.annotation.XxlJob;
  13. import lombok.extern.slf4j.Slf4j;
  14. import org.springframework.beans.factory.annotation.Autowired;
  15. import org.springframework.stereotype.Component;
  16. import java.util.HashMap;
  17. import java.util.Map;
  18. /**
  19. * @author : 洪旭东
  20. * @desc : XxlJobUtils
  21. * xxl job 定时任务工具类
  22. * @date : 2022-06-29 11:36
  23. */
  24. @Slf4j
  25. @Component
  26. public class XxlJobUtils {
  27. @Autowired
  28. private XxlJobInfoConfig xxlJobInfoConfig;
  29. /**
  30. * @desc : 创建任务
  31. * 客户提醒
  32. *
  33. * second 间隔秒数
  34. * planId 计划id
  35. * type 任务类型
  36. *
  37. * @author : 洪旭东
  38. * @date : 2022-06-29 14:15
  39. */
  40. public int create(int second, Long planId, String type) {
  41. Map<String, Map<String, Object>> followPlan = xxlJobInfoConfig.getInfo();
  42. int jobGroup = xxlJobInfoConfig.getJobGroup();
  43. XxlJobInfo xxlJobInfo = new XxlJobInfo();
  44. xxlJobInfo.setJobGroup(jobGroup);
  45. xxlJobInfo.setJobDesc(followPlan.get(type).get("job-desc").toString()+planId);
  46. xxlJobInfo.setAuthor("dk");
  47. xxlJobInfo.setScheduleType("FIX_RATE");
  48. xxlJobInfo.setScheduleConf(String.valueOf(second));
  49. xxlJobInfo.setGlueType("BEAN");
  50. xxlJobInfo.setExecutorHandler(followPlan.get(type).get("executo-handler").toString());
  51. xxlJobInfo.setExecutorRouteStrategy("FIRST");
  52. xxlJobInfo.setMisfireStrategy("DO_NOTHING");
  53. xxlJobInfo.setExecutorBlockStrategy("SERIAL_EXECUTION");
  54. xxlJobInfo.setExecutorTimeout(0);
  55. xxlJobInfo.setExecutorFailRetryCount(0);
  56. xxlJobInfo.setGlueRemark("GLUE代码初始化");
  57. xxlJobInfo.setExecutorParam(String.valueOf(planId));
  58. Map<String, String> header = new HashMap<>(2);
  59. // header.put("Cookie","XXL_JOB_LOGIN_IDENTITY=7b226964223a312c22757365726e616d65223a2261646d696e222c2270617373776f7264223a226531306164633339343962613539616262653536653035376632306638383365222c22726f6c65223a312c227065726d697373696f6e223a6e756c6c7d");
  60. ResponseResultVO<JSONObject> resultVO = HttpUtils.post(xxlJobInfoConfig.getServerUrl() + "/hg/scrm/add",
  61. xxlJobInfo, header);
  62. if (resultVO.getCode() == ResponseCodeEnum.SUCCESS.getCode()) {
  63. if (resultVO.getData().getInteger("code").equals(ResponseCodeEnum.SUCCESS.getCode())) {
  64. return resultVO.getData().getInteger("content");
  65. } else {
  66. //提醒时间有问题,任务间隔时间为负数
  67. if (resultVO.getData()!=null &&
  68. Constant.StringConstant.XXL_JOB_ERROR_MESSAGE.getName().equals(resultVO.getData().getString("msg"))){
  69. // TODO
  70. // throw new BaseBusinessException(ErrorCodeEnum.CUSTOMER_FOLLOW_NEXT_TIME_OVER.getCode(),
  71. // ErrorCodeEnum.CUSTOMER_FOLLOW_NEXT_TIME_OVER.getMessage());
  72. }
  73. throw new BaseBusinessException(resultVO.getData().getInteger("code"), resultVO.getData().getString("msg"));
  74. }
  75. } else {
  76. throw new BaseBusinessException(resultVO.getCode(), resultVO.getMessage());
  77. }
  78. }
  79. public int create(String cron, Long primaryKeyId, String type) {
  80. Map<String, Map<String, Object>> info = xxlJobInfoConfig.getInfo();
  81. int jobGroup = xxlJobInfoConfig.getJobGroup();
  82. XxlJobInfo xxlJobInfo = new XxlJobInfo();
  83. xxlJobInfo.setJobGroup(jobGroup);
  84. xxlJobInfo.setJobDesc(info.get(type).get("job-desc").toString()+primaryKeyId);
  85. xxlJobInfo.setAuthor("dk");
  86. xxlJobInfo.setScheduleType("CRON");
  87. xxlJobInfo.setScheduleConf(cron);
  88. xxlJobInfo.setGlueType("BEAN");
  89. xxlJobInfo.setExecutorHandler(info.get(type).get("executo-handler").toString());
  90. xxlJobInfo.setExecutorRouteStrategy("FIRST");
  91. xxlJobInfo.setMisfireStrategy("DO_NOTHING");
  92. xxlJobInfo.setExecutorBlockStrategy("SERIAL_EXECUTION");
  93. xxlJobInfo.setExecutorTimeout(0);
  94. xxlJobInfo.setExecutorFailRetryCount(0);
  95. xxlJobInfo.setGlueRemark("GLUE代码初始化");
  96. xxlJobInfo.setExecutorParam(String.valueOf(primaryKeyId));
  97. Map<String, String> header = new HashMap<>(2);
  98. // header.put("Cookie","XXL_JOB_LOGIN_IDENTITY=7b226964223a312c22757365726e616d65223a2261646d696e222c2270617373776f7264223a226531306164633339343962613539616262653536653035376632306638383365222c22726f6c65223a312c227065726d697373696f6e223a6e756c6c7d");
  99. ResponseResultVO<JSONObject> resultVO = HttpUtils.post(xxlJobInfoConfig.getServerUrl() + "/hg/scrm/add",
  100. xxlJobInfo, header);
  101. if (resultVO.getCode() == ResponseCodeEnum.SUCCESS.getCode()) {
  102. if (resultVO.getData().getInteger("code").equals(ResponseCodeEnum.SUCCESS.getCode())) {
  103. return resultVO.getData().getInteger("content");
  104. } else {
  105. //提醒时间有问题,任务间隔时间为负数
  106. if (resultVO.getData()!=null &&
  107. Constant.StringConstant.XXL_JOB_ERROR_MESSAGE.getName().equals(resultVO.getData().getString("msg"))){
  108. //TODO
  109. // throw new BaseBusinessException(ErrorCodeEnum.CUSTOMER_FOLLOW_NEXT_TIME_OVER.getCode(),
  110. // ErrorCodeEnum.CUSTOMER_FOLLOW_NEXT_TIME_OVER.getMessage());
  111. }
  112. throw new BaseBusinessException(resultVO.getData().getInteger("code"), resultVO.getData().getString("msg"));
  113. }
  114. } else {
  115. throw new BaseBusinessException(resultVO.getCode(), resultVO.getMessage());
  116. }
  117. }
  118. /**
  119. * @desc : 删除xxl job
  120. * @author : 洪旭东
  121. * @date : 2022-06-30 15:50
  122. */
  123. public void delete(int xxlJobId) {
  124. Map<String, String> header = new HashMap<>(2);
  125. // header.put("Cookie","XXL_JOB_LOGIN_IDENTITY=7b226964223a312c22757365726e616d65223a2261646d696e222c2270617373776f7264223a226531306164633339343962613539616262653536653035376632306638383365222c22726f6c65223a312c227065726d697373696f6e223a6e756c6c7d");
  126. ResponseResultVO<JSONObject> resultVO = HttpUtils.post(xxlJobInfoConfig.getServerUrl() + "/hg/scrm/remove/" + xxlJobId,
  127. null, header);
  128. if (resultVO.getCode() == ResponseCodeEnum.SUCCESS.getCode()) {
  129. if (!resultVO.getData().getInteger("code").equals(ResponseCodeEnum.SUCCESS.getCode())) {
  130. throw new BaseBusinessException(resultVO.getData().getInteger("code"), resultVO.getData().getString("msg"));
  131. }
  132. } else {
  133. throw new BaseBusinessException(resultVO.getCode(), resultVO.getMessage());
  134. }
  135. }
  136. /**
  137. * @desc : 查询详情
  138. * @author : 洪旭东
  139. * @date : 2022-07-22 17:23
  140. */
  141. public XxlJobInfo detail(int xxlJobId) {
  142. Map<String, String> header = new HashMap<>(2);
  143. // header.put("Cookie","XXL_JOB_LOGIN_IDENTITY=7b226964223a312c22757365726e616d65223a2261646d696e222c2270617373776f7264223a226531306164633339343962613539616262653536653035376632306638383365222c22726f6c65223a312c227065726d697373696f6e223a6e756c6c7d");
  144. ResponseResultVO<JSONObject> resultVO = HttpUtils.get(xxlJobInfoConfig.getServerUrl() + "/hg/scrm/detail/" + xxlJobId);
  145. if (resultVO.getCode() == ResponseCodeEnum.SUCCESS.getCode()) {
  146. if (resultVO.getData()==null) {
  147. throw new BaseBusinessException(ResponseCodeEnum.SELECT_NULL);
  148. }
  149. return JSONObject.parseObject(JSONObject.toJSONString(resultVO.getData()), XxlJobInfo.class);
  150. } else {
  151. throw new BaseBusinessException(resultVO.getCode(), resultVO.getMessage());
  152. }
  153. }
  154. /**
  155. * @desc : 登录xxl job
  156. * 暂时不需要
  157. * @author : 洪旭东
  158. * @date : 2022-06-30 15:58
  159. */
  160. public String loginXxlJob(){
  161. ResponseResultVO<JSONObject> resultVO = HttpUtils.post("http://127.0.0.1:8888/xxl-job-admin/hg/scrm/login?userName=admin&password=123456",
  162. null);
  163. return resultVO.getData().getString("content");
  164. }
  165. public void update(XxlJobInfo xxlJobInfo) {
  166. Map<String, String> header = new HashMap<>(2);
  167. // header.put("Cookie","XXL_JOB_LOGIN_IDENTITY=7b226964223a312c22757365726e616d65223a2261646d696e222c2270617373776f7264223a226531306164633339343962613539616262653536653035376632306638383365222c22726f6c65223a312c227065726d697373696f6e223a6e756c6c7d");
  168. ResponseResultVO<JSONObject> resultVO = HttpUtils.post(xxlJobInfoConfig.getServerUrl() + "/hg/scrm/update",
  169. xxlJobInfo);
  170. if (resultVO.getCode() == ResponseCodeEnum.SUCCESS.getCode()) {
  171. if (!resultVO.getData().getInteger("code").equals(ResponseCodeEnum.SUCCESS.getCode())) {
  172. throw new BaseBusinessException(resultVO.getData().getInteger("code"), resultVO.getData().getString("msg"));
  173. }
  174. } else {
  175. throw new BaseBusinessException(resultVO.getCode(), resultVO.getMessage());
  176. }
  177. }
  178. }