MQTask.java 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533
  1. package com.iamberry.wechat.handles.mq;
  2. import java.lang.reflect.Method;
  3. import java.text.MessageFormat;
  4. import java.text.SimpleDateFormat;
  5. import java.util.*;
  6. import java.util.concurrent.locks.Lock;
  7. import java.util.concurrent.locks.ReentrantLock;
  8. import com.iamberry.wechat.core.entity.admin.ShopSystemRule;
  9. import com.iamberry.wechat.core.entity.coupon.CouponItem;
  10. import com.iamberry.wechat.core.entity.integral.IntegralConfig;
  11. import com.iamberry.wechat.core.entity.integral.UseIntegral;
  12. import com.iamberry.wechat.core.entity.member.Member;
  13. import com.iamberry.wechat.core.entity.order.NumberBacklogDto;
  14. import com.iamberry.wechat.core.entity.report.Report;
  15. import com.iamberry.wechat.face.admin.SystemService;
  16. import com.iamberry.wechat.face.agentInfo.AgentPurchaseOrderService;
  17. import com.iamberry.wechat.face.coupon.CouponItemService;
  18. import com.iamberry.wechat.face.integral.UseIntegralService;
  19. import com.iamberry.wechat.face.member.MemberService;
  20. import com.iamberry.wechat.face.order.AdminOrderService;
  21. import com.iamberry.wechat.face.report.ReportService;
  22. import com.iamberry.wechat.service.ImberryConfig;
  23. import com.iamberry.wechat.tools.HttpClient431Util;
  24. import com.iamberry.wechat.tools.NameUtils;
  25. import com.iamberry.wechat.tools.SendMessageUtil;
  26. import org.apache.commons.lang.StringUtils;
  27. import org.springframework.beans.factory.InitializingBean;
  28. import org.springframework.beans.factory.annotation.Autowired;
  29. import org.springframework.context.annotation.Lazy;
  30. import org.springframework.scheduling.annotation.Scheduled;
  31. import org.springframework.stereotype.Component;
  32. import com.iamberry.app.tool.log.RatFWLogger;
  33. import com.iamberry.wechat.core.entity.mq.MQMessage;
  34. import com.iamberry.wechat.core.entity.order.ProbationOrderDto;
  35. import com.iamberry.wechat.core.entity.probation.ProbationAwardRelu;
  36. import com.iamberry.wechat.core.entity.probation.ProbationNewLogs;
  37. import com.iamberry.wechat.core.entity.task.TaskModel;
  38. import com.iamberry.wechat.core.entity.task.WechatTask;
  39. import com.iamberry.wechat.core.entity.task.WechatTaskLogs;
  40. import com.iamberry.wechat.face.order.CodeService;
  41. import com.iamberry.wechat.face.order.ProbationShopOrderService;
  42. import com.iamberry.wechat.face.reback.RebackServices;
  43. import com.iamberry.wechat.face.task.WechatTaskService;
  44. import com.iamberry.wechat.service.StaticCacheMemory;
  45. import com.iamberry.wechat.tools.DateTimeUtil;
  46. import com.iamberry.wechat.tools.ResultInfo;
  47. import com.iamberry.zk.SpringContextHolder;
  48. /**
  49. * @author:何秀刚
  50. * @description: MQ模拟实现,每天最多处理1382400条
  51. * @createDate:2016年5月25日
  52. */
  53. @Component(value="mqTask")
  54. @Lazy(false)
  55. public class MQTask implements InitializingBean {
  56. @Autowired
  57. private MQServiceProxy mQSerivce;
  58. @Autowired
  59. private RatFWLogger logger;
  60. @Autowired
  61. private WechatTaskService wechatTaskService;
  62. @Autowired
  63. private RebackServices rebackServices;
  64. @Autowired
  65. private ProbationShopOrderService probationShopOrderService;
  66. @Autowired
  67. private SendMessageUtil sendMessageUtil;
  68. @Autowired
  69. private CodeService codeService;
  70. @Autowired
  71. private SystemService systemService;
  72. @Autowired
  73. private AgentPurchaseOrderService agentPurchaseOrderService;
  74. @Autowired
  75. private UseIntegralService useIntegralService;
  76. @Autowired
  77. private AdminOrderService adminOrderService;
  78. @Autowired
  79. private CouponItemService couponItemService;
  80. @Autowired
  81. private MemberService memberService;
  82. @Autowired
  83. private ReportService reportService;
  84. private Lock lock = new ReentrantLock();
  85. @SuppressWarnings(value = {"unchecked", "rawtypes"})
  86. @Scheduled(cron = "0/30 * * * * ?")
  87. public void sendOrderService() {
  88. logger.info("------------task start-----------");
  89. // If the timer has not stopped, then the next time the timer can not start.
  90. lock.lock();
  91. try {
  92. // step 1, Gets the message that is not executed in the database.
  93. List<MQMessage> messages = mQSerivce.selectWaitHandlerMessage();
  94. if (messages == null || messages.size() <= 0) {
  95. return;
  96. }
  97. // step 2, Handle 10 messages at a time.
  98. for (MQMessage mqMessage : messages) {
  99. try {
  100. Object object = SpringContextHolder.getBean(mqMessage.getServiceHandlerObjectName());
  101. Class classes = object.getClass();
  102. Method method = classes.getMethod(mqMessage.getServiceHandlerMethodName(), MQMessage.class);
  103. if (method == null) {
  104. mqMessage.setServiceErrorMessage("Method is not defined:" + mqMessage.getServiceHandlerMethodName());
  105. mqMessage.setServiceStatus(2);
  106. continue;
  107. }
  108. // invoke Method.
  109. Object resultObject = method.invoke(object, mqMessage);
  110. if (!(resultObject instanceof Boolean)) {
  111. mqMessage.setServiceStatus(2);
  112. mqMessage.setServiceErrorMessage(mqMessage.getServiceHandlerObjectName() + "." + mqMessage.getServiceHandlerMethodName() + "()Return value is not type Boolean");
  113. continue;
  114. }
  115. if (!(Boolean) resultObject) {
  116. mqMessage.setServiceErrorMessage("invoke Method Error");
  117. mqMessage.setServiceStatus(2);
  118. continue;
  119. }
  120. mqMessage.setServiceStatus(1);
  121. continue;
  122. } catch (Exception e) {
  123. // TODO: handle exception
  124. mqMessage.setServiceErrorMessage(e.getMessage());
  125. mqMessage.setServiceStatus(2);
  126. continue;
  127. } finally {
  128. mqMessage.setServiceIsSend(1);
  129. }
  130. }
  131. // step 3, update Message status and serviceIsSend.
  132. mQSerivce.updateBatchMessage(messages);
  133. // step 4, is next ?
  134. if (messages.size() >= 10) {
  135. StaticCacheMemory.isStartTask = true;
  136. this.sendOrderService();
  137. }
  138. } catch (Exception e) {
  139. e.printStackTrace();
  140. logger.error(e, "MQ Task Error:" + e.getMessage());
  141. } finally {
  142. // reset lock
  143. lock.unlock();
  144. }
  145. logger.info("------------task invoke success-----------");
  146. }
  147. /**
  148. * 订阅消息
  149. */
  150. public void subscribeMessageQueue() {
  151. }
  152. // 强迫线程可见
  153. private volatile boolean oldState = true;
  154. /**
  155. * 微信定期任务奖励-上个月的定时器
  156. */
  157. @SuppressWarnings("deprecation")
  158. // @Scheduled(cron = "0/59 * * * * ?")
  159. public void oldMonthTask() {
  160. if (!oldState) {
  161. logger.info("线程正忙...");
  162. return;
  163. }
  164. oldState = false;
  165. try {
  166. // 判断上一个月的数据是否奖励完成
  167. logger.info("上一个月的定时奖励任务奖励...");
  168. // 当前时间
  169. Date nowDate = new Date();
  170. // 回到上一个月
  171. nowDate.setMonth(nowDate.getMonth() - 1);
  172. // 上一个月的结束时间 类似 :2016-02-29 23:59:59
  173. Date oldMonthLastDay = DateTimeUtil.getLastDayOfYear(nowDate);
  174. // 上一个月的开始时间 类似 :2016-02-01 00:00:00
  175. Date oldMonthFirstDay = DateTimeUtil.getFirstDayOfYear(nowDate);
  176. List<WechatTask> tasks = wechatTaskService.getRunTask(oldMonthFirstDay, oldMonthLastDay);
  177. if (tasks == null || tasks.size() == 0) {
  178. logger.info("暂时没有上一个月的任务奖励...");
  179. oldState = true;
  180. return;
  181. }
  182. // 获取在上一个月销售达到X台的数据
  183. for (WechatTask wechatTask : tasks) {
  184. List<TaskModel> models = rebackServices.getByDate(wechatTask.getTaskProductType(), oldMonthFirstDay, oldMonthLastDay, wechatTask.getTaskSalesNum());
  185. if (models == null || models.size() == 0) {
  186. logger.info("暂时没有人完成上一个月的任务" + wechatTask.getTaskId() + "奖励...");
  187. continue;
  188. }
  189. // 达到的用户是否已经领取奖励
  190. for (TaskModel taskModel : models) {
  191. WechatTaskLogs logs = new WechatTaskLogs();
  192. logs.setLogsTaskId(wechatTask.getTaskId());
  193. logs.setLogsUserOpenId(taskModel.getOpenID());
  194. Integer logsID = wechatTaskService.getByTaskIdAndOpenId(logs);
  195. if (logsID != null) {
  196. // 如果当前用户已经领取了奖励,那么跳过
  197. continue;
  198. }
  199. // 若用没有领取,那么奖励
  200. try {
  201. wechatTaskService.handlerTask(taskModel.getOpenID(), wechatTask.getTaskMoney(), wechatTask.getTaskId(), wechatTask.getTaskProductType());
  202. } catch (Exception e) {
  203. logger.error(this, "对:" + taskModel.getOpenID() + ",奖励失败!error:" + e.getMessage());
  204. }
  205. }
  206. }
  207. } catch (Exception e) {
  208. logger.error(this, "发生异常,奖励失败!error:" + e.getMessage());
  209. } finally {
  210. // 归还锁
  211. oldState = true;
  212. }
  213. }
  214. // 强迫线程可见
  215. private volatile boolean nowState = true;
  216. /**
  217. * 微信定期任务奖励-本月的定时器
  218. */
  219. // @Scheduled(cron = "0/59 * * * * ?")
  220. public void nowMonthTask() {
  221. if (!nowState) {
  222. logger.info("线程正忙...");
  223. return;
  224. }
  225. nowState = false;
  226. try {
  227. // 判断本月是否有奖励数据
  228. logger.info("本月的定时奖励任务奖励...");
  229. // 当前时间
  230. Date nowDate = new Date();
  231. // 上一个月的结束时间 类似 :2016-02-29 23:59:59
  232. Date oldMonthLastDay = DateTimeUtil.getLastDayOfYear(nowDate);
  233. // 上一个月的开始时间 类似 :2016-02-01 00:00:00
  234. Date oldMonthFirstDay = DateTimeUtil.getFirstDayOfYear(nowDate);
  235. List<WechatTask> tasks = wechatTaskService.getRunTask(oldMonthFirstDay, oldMonthLastDay);
  236. if (tasks == null || tasks.size() == 0) {
  237. logger.info("暂时没有本月的任务奖励...");
  238. nowState = true;
  239. return;
  240. }
  241. // 获取在上一个月销售达到X台的数据
  242. for (WechatTask wechatTask : tasks) {
  243. List<TaskModel> models = rebackServices.getByDate(wechatTask.getTaskProductType(), oldMonthFirstDay, oldMonthLastDay, wechatTask.getTaskSalesNum());
  244. if (models == null || models.size() == 0) {
  245. logger.info("暂时没有人完成本月的任务" + wechatTask.getTaskId() + "奖励...");
  246. continue;
  247. }
  248. // 达到的用户是否已经领取奖励
  249. for (TaskModel taskModel : models) {
  250. WechatTaskLogs logs = new WechatTaskLogs();
  251. logs.setLogsTaskId(wechatTask.getTaskId());
  252. logs.setLogsUserOpenId(taskModel.getOpenID());
  253. Integer logsID = wechatTaskService.getByTaskIdAndOpenId(logs);
  254. if (logsID != null) {
  255. // 如果当前用户已经领取了奖励,那么跳过
  256. continue;
  257. }
  258. // 若用没有领取,那么奖励
  259. try {
  260. wechatTaskService.handlerTask(taskModel.getOpenID(), wechatTask.getTaskMoney(), wechatTask.getTaskId(), wechatTask.getTaskProductType());
  261. } catch (Exception e) {
  262. logger.error(this, "对:" + taskModel.getOpenID() + ",奖励失败!error:" + e.getMessage());
  263. }
  264. }
  265. }
  266. } catch (Exception e) {
  267. // TODO: handle exception
  268. logger.error(this, "发生异常:" + e.getMessage());
  269. } finally {
  270. nowState = true;
  271. }
  272. }
  273. public void afterPropertiesSet() throws Exception {
  274. }
  275. /**
  276. * 试用订单短信推送服务(满足XX天奖励XX奖励)
  277. */
  278. // @Scheduled(cron = "0 0 */1 * * ?")//每小时执行一次
  279. public void probationRewardPush(){
  280. logger.info("------------执行推送满足奖励条件用户 start-----------");
  281. //查询奖励推送规则
  282. List<ProbationAwardRelu> reluList = probationShopOrderService.selectProbationAwardRelu();
  283. SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  284. if(reluList!=null && !reluList.isEmpty()){
  285. for(ProbationAwardRelu awardRelu : reluList){
  286. //查询所有待支付订单
  287. List<ProbationOrderDto> orderDtoList = probationShopOrderService.selectProbationStartOrder();
  288. if(orderDtoList!=null && !orderDtoList.isEmpty()){
  289. for(ProbationOrderDto orderDto : orderDtoList ){
  290. //计算总试用期限(小时)
  291. Long totalDate = (orderDto.getProbationEndTime().getTime() - orderDto.getProbationStartTime().getTime()) / 1000 / 60 / 60;
  292. //计算试用剩余期限(小时)
  293. Long remainingDate = (orderDto.getProbationEndTime().getTime() - new Date().getTime()) / 1000 / 60 / 60;
  294. //暂停时间
  295. /*Long pauseDate = 0l;
  296. if(orderDto.getProbationPauseStartTime() != null && orderDto.getProbationPauseEndTime() != null){
  297. pauseDate = (orderDto.getProbationPauseEndTime().getTime() - orderDto.getProbationPauseStartTime().getTime()) / 1000 / 60 / 60;
  298. }*/
  299. //实际试用时间 (总试用时间 - 试用剩余期限 - 暂停时间)
  300. Long actualProbationDate = totalDate - remainingDate - orderDto.getProbationPauseTotalLength() / 1000 / 60 / 60;
  301. //奖励奖品天数转换为小时
  302. Long awardDate = Long.valueOf(awardRelu.getAwardNum()) * 24;
  303. //奖励条件时间 - 实际试用时间 (大于23小时或者小于26小时则推送)
  304. if( awardDate -actualProbationDate > 23 && awardDate -actualProbationDate < 26 ){
  305. ProbationNewLogs probationNewLogs = probationShopOrderService.selectProbationNewLogsByOrderId(orderDto.getProbationOrderid());
  306. //添加日志信息
  307. ProbationNewLogs newLogs = new ProbationNewLogs();
  308. newLogs.setLogsPorderid(orderDto.getProbationOrderid());
  309. newLogs.setLogsTime(awardRelu.getAwardNum());
  310. newLogs.setLogsCreateTime(new Date());
  311. if(probationNewLogs == null){
  312. //推送操作
  313. sendMessageUtil.probationPush(awardRelu.getAwardInfo(),
  314. orderDto.getProductName(),
  315. orderDto.getProbationOrderid(),
  316. formatter.format(orderDto.getProbationStartTime()),
  317. formatter.format(
  318. new Date(
  319. orderDto.getProbationStartTime().getTime() +
  320. (awardRelu.getAwardNum() * 24 + orderDto.getProbationPauseTotalLength()) * 60 * 60 * 1000)),
  321. awardRelu.getAwardInfoTwo(),
  322. orderDto.getProbationOpenid(),
  323. ResultInfo.TRY_ORDER_DETAIL+"?orderId="+orderDto.getProbationOrderid());
  324. //添加日志
  325. probationShopOrderService.insertProbationLogs(newLogs);
  326. //发送短信给收货人
  327. if(StringUtils.isNotEmpty(orderDto.getProbationReceiveTel())){
  328. codeService.sendTextToUser(orderDto.getProbationReceiveTel(), 6);
  329. }
  330. }else if(probationNewLogs.getLogsTime() < awardRelu.getAwardNum()){
  331. //执行推送
  332. sendMessageUtil.probationPush(
  333. awardRelu.getAwardInfo(),
  334. orderDto.getProductName(),
  335. orderDto.getProbationOrderid(),
  336. formatter.format(orderDto.getProbationStartTime()),
  337. formatter.format(
  338. new Date(orderDto.getProbationStartTime().getTime()
  339. + (awardRelu.getAwardNum() * 24 + orderDto.getProbationPauseTotalLength()) * 60 * 60 * 1000)),
  340. awardRelu.getAwardInfoTwo(),
  341. orderDto.getProbationOpenid(),
  342. ResultInfo.TRY_ORDER_DETAIL+"?orderId="+orderDto.getProbationOrderid());
  343. //修改日志
  344. probationShopOrderService.updatePauseLogsDate(newLogs);
  345. //发送短信给收货人
  346. if(StringUtils.isNotEmpty(orderDto.getProbationReceiveTel())){
  347. codeService.sendTextToUser(orderDto.getProbationReceiveTel(), awardRelu.getAwardNum().intValue());
  348. }
  349. }
  350. }
  351. }
  352. }
  353. }
  354. }
  355. }
  356. /**
  357. * 保持百胜系统cookie的活性(每分钟执行一次)
  358. */
  359. @SuppressWarnings(value = {"unchecked", "rawtypes"})
  360. @Scheduled(cron = "0 0/1 * * * ?")
  361. public void selectEfastOrder() {
  362. try{
  363. //获取cookie值
  364. ShopSystemRule rule = systemService.selectOneShopRuleById(244);
  365. String phone = "13590159563";
  366. String url = NameUtils.getConfig("efast_order_url") + phone;
  367. Map<String,String> params = new HashMap<String,String>();
  368. String cookie = rule.getRuleDesc();
  369. //查询百胜订单信息
  370. String str = HttpClient431Util.doGet(params,url,null,null,cookie);
  371. } catch(Exception e) {
  372. System.out.println("------------请求百胜接口失败-------------");
  373. }
  374. }
  375. /**
  376. * 电动牙刷商城更换刷头提示(每小时执行一次)
  377. */
  378. /*@SuppressWarnings(value = {"unchecked", "rawtypes"})
  379. @Scheduled(cron = "0 0 0/1 * * ?")
  380. public void updateToothHint() {
  381. //获取更换刷头时间间隔
  382. ShopSystemRule rule = systemService.selectOneShopRuleById(245);
  383. List<OrderHint> list = new ArrayList<OrderHint>();
  384. OrderHint orderHint = new OrderHint();
  385. orderHint.setHintTime(new Date());
  386. orderHint.setHintStatus(1);
  387. //根据时间和状态获取需要提示的
  388. List<OrderHint> orderList = agentPurchaseOrderService.listOrderHint(orderHint);
  389. if (orderList == null || orderList.size() == 0) {
  390. return;
  391. }
  392. for (int i = 0;i < orderList.size();i++) {
  393. OrderHint order = orderList.get(i);
  394. Calendar cl = Calendar.getInstance();
  395. cl.setTime(order.getHintTime());
  396. cl.add(Calendar.MONTH, +rule.getRuleNum().intValue());
  397. OrderHint hint = new OrderHint();
  398. hint.setHintTime(cl.getTime());
  399. hint.setHintId(order.getHintId());
  400. hint.setHintNum(1);
  401. list.add(hint);
  402. //更换牙刷刷头提示
  403. sendMessageUtil.updateToothHint("上朵电动牙刷商城", "上朵电动牙刷","您的牙刷已使用三个月,请及时更换刷头!", "上朵电动牙刷商城", order.getUserOpenId(),NameUtils.getConfig("WECHAT_UPDATE_TOOTH_HINT")+order.getHintId());
  404. }
  405. //批量修改更换刷头信息
  406. int num = agentPurchaseOrderService.updateOrderHintList(list);
  407. }*/
  408. /**
  409. * 待入账积分更改为已入账积分(每小时执行一次)
  410. */
  411. @SuppressWarnings(value = {"unchecked", "rawtypes"})
  412. @Scheduled(cron = "0 0 0/1 * * ?")
  413. // @Scheduled(cron = "0 0/3 * * * ?")//每三分钟执行一次
  414. public void updateIntegralStayToAlready() {
  415. useIntegralService.updateIntegralStayToAlready();
  416. }
  417. /**
  418. * 待处理订单提醒(每天下午2:50点,短信提醒益霜、上朵运营一次(15814645335、13472545449)
  419. */
  420. @SuppressWarnings(value = {"unchecked", "rawtypes"})
  421. /*@Scheduled(cron = "0 0/3 * * * ?")//每三分钟执行一次*/
  422. @Scheduled(cron = "0 50 14 * * ?")//每天下午2点50分执行一次
  423. public void pendingOrderReminder() {
  424. //查询待发货事项、申请退款订单、申请退货订单、申请换货订单 的数量
  425. NumberBacklogDto numberBacklogDto = adminOrderService.selectNumberBacklog();
  426. Integer num = (numberBacklogDto.getExchange()+numberBacklogDto.getReturnGoods()+numberBacklogDto.getReturnRefund()+numberBacklogDto.getSendTheGoods());
  427. String text = MessageFormat.format(ImberryConfig.PENDING_ORDER_REMINDER, num);
  428. if(num > 0){
  429. codeService.informShipping("17621958750", text);
  430. codeService.informShipping("18271840547", text);
  431. codeService.informShipping("13922874118", text);
  432. }
  433. }
  434. /**
  435. * 每天0点统计上朵领取优惠券信息
  436. *
  437. * 领券人数:
  438. * 使用券人数:
  439. * 注册人数:
  440. */
  441. @SuppressWarnings(value = {"unchecked", "rawtypes"})
  442. // @Scheduled(cron = "0 0/3 * * * ?")//每三分钟执行一次
  443. @Scheduled(cron = "0 0 0 * * ?") //每天0点触发
  444. public void report() {
  445. logger.info("统计上朵领取优惠券信息");
  446. Report report = new Report();
  447. //获取需要查询的优惠券类型的id
  448. String ids = systemService.selectOneShopRuleById(256).getRuleDesc();
  449. String[] newIds = ids.split(",");
  450. if(newIds == null){
  451. return;
  452. }
  453. Integer[] couponIds = new Integer[newIds.length];
  454. for (int i=0;i<newIds.length;i++) {
  455. couponIds[i] = Integer.valueOf(newIds[i]);
  456. }
  457. CouponItem couponItem = new CouponItem();
  458. couponItem.setCouponIds(couponIds);
  459. Integer number = couponItemService.allCouponItemNumber(couponItem);
  460. report.setReportCouponNumber(number);
  461. couponItem.setCouponUseStatus(2);
  462. number = couponItemService.allCouponItemNumber(couponItem);
  463. report.setReportCouponUseNumber(number);
  464. number = memberService.getRegisteredNumber();
  465. report.setReportRegisteredNumber(number);
  466. Integer flag = reportService.save(report);
  467. }
  468. /**
  469. * 生日福利
  470. * 每天0点为当天生日的人送积分
  471. */
  472. @SuppressWarnings(value = {"unchecked", "rawtypes"})
  473. // @Scheduled(cron = "0 0/2 * * * ?") //每三分钟执行一次
  474. @Scheduled(cron = "0 0 9 * * ?") //每天9点触发
  475. public void birthday() {
  476. logger.info("生日福利定时任务");
  477. IntegralConfig integralConfig = useIntegralService.getIntegralConfigById(16);
  478. Integer integral = integralConfig.getIntegralConfigNumber();
  479. Integer configId = integralConfig.getIntegralConfigId();
  480. Member memeber = new Member();
  481. memeber.setUserBirthDate(new Date());
  482. memeber.setUserIdentity(1); //userIdentity
  483. /*查询当天生日的人*/
  484. List<Member> memberList = memberService.getBirthday(memeber);
  485. for (Member m :memberList) {
  486. UseIntegral ui = new UseIntegral();
  487. ui.setUserOpenId(m.getUserOpenid());
  488. ui.setConfigId(16);
  489. ui.setIntegralCreateTime(new Date());
  490. List<UseIntegral> useIntegralList = useIntegralService.getUseIntegralList(ui);
  491. if(useIntegralList == null || useIntegralList.size() < 1){
  492. memberService.updaterIntegral(m.getUserId(),1,configId,integral,"生日福利赠送积分");
  493. }
  494. }
  495. }
  496. }