|  |  |  | 
|---|
|  |  |  | package com.doumee.task; | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import com.alibaba.fastjson.JSONObject; | 
|---|
|  |  |  | import com.doumee.biz.system.SystemDictDataBiz; | 
|---|
|  |  |  | import com.doumee.core.constants.Constants; | 
|---|
|  |  |  | import com.doumee.core.dingding.DingDingNotice; | 
|---|
|  |  |  | import com.doumee.core.exception.BusinessException; | 
|---|
|  |  |  | import com.doumee.core.mqtt.config.MqttClientInit; | 
|---|
|  |  |  | import com.doumee.core.utils.DateUtil; | 
|---|
|  |  |  | import com.doumee.core.utils.HttpsUtil; | 
|---|
|  |  |  | import com.doumee.core.wx.WxPayProperties; | 
|---|
|  |  |  | import com.doumee.dao.business.model.Goodsorder; | 
|---|
|  |  |  | import com.doumee.service.business.GoodsorderService; | 
|---|
|  |  |  | import com.doumee.service.business.WxBillService; | 
|---|
|  |  |  | import com.doumee.dao.business.model.Sites; | 
|---|
|  |  |  | import com.doumee.dao.system.model.SystemDictData; | 
|---|
|  |  |  | import com.doumee.service.business.*; | 
|---|
|  |  |  | import com.doumee.service.system.SystemDictDataService; | 
|---|
|  |  |  | import lombok.extern.slf4j.Slf4j; | 
|---|
|  |  |  | import org.apache.commons.lang3.StringUtils; | 
|---|
|  |  |  | import org.apache.shiro.util.ThreadContext; | 
|---|
|  |  |  | import org.apache.shiro.web.mgt.DefaultWebSecurityManager; | 
|---|
|  |  |  | import org.springframework.beans.factory.annotation.Autowired; | 
|---|
|  |  |  | import org.springframework.scheduling.annotation.EnableScheduling; | 
|---|
|  |  |  | import org.springframework.scheduling.annotation.Scheduled; | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import java.util.Date; | 
|---|
|  |  |  | import java.util.List; | 
|---|
|  |  |  | import java.util.Objects; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 定时任务 | 
|---|
|  |  |  | 
|---|
|  |  |  | @Slf4j | 
|---|
|  |  |  | public class ScheduleTool { | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private SystemDictDataBiz systemDictDataBiz; | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private RefundService refundService; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private SystemDictDataService systemDictDataService; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private WxBillService wxBillService; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private GoodsorderService goodsorderService; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private MemberRidesService memberRidesService; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private SitesService sitesService; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * @throws Exception | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | @Scheduled(cron = "0 0 11 * * ? ") | 
|---|
|  |  |  | public void syncStudent() throws Exception { | 
|---|
|  |  |  | @Scheduled(cron = "0 0 10 * * ? ") | 
|---|
|  |  |  | public void getWxBill() throws Exception { | 
|---|
|  |  |  | //前一天的數據 | 
|---|
|  |  |  | Date ydate = DateUtil.addDaysToDate(new Date(), -1); | 
|---|
|  |  |  | wxBillService.getWxBill(ydate); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 測試 | 
|---|
|  |  |  | * @throws Exception | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | @Scheduled(cron = "0 0/1 * * * ?  ") | 
|---|
|  |  |  | @Scheduled(cron = "0 0 21 * * ? ") | 
|---|
|  |  |  | public void getYesterdayBill() throws Exception { | 
|---|
|  |  |  | log.info("=====================开始每天自动结算======================="); | 
|---|
|  |  |  | goodsorderService.autoCloseOrder(); | 
|---|
|  |  |  | log.info("=====================结束每天自动结算======================="); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 定时刷新骑行中的数充值未开锁失败 | 
|---|
|  |  |  | * 30 秒刷新一次 | 
|---|
|  |  |  | * @throws Exception | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | @Scheduled(cron = "0/15 * * * * ? ") | 
|---|
|  |  |  | public void autoRefreshLockStatus() throws Exception { | 
|---|
|  |  |  | log.info("=====================开始定时刷新骑行中的数充值未开锁失败======================="); | 
|---|
|  |  |  | memberRidesService.autoRefreshLockStatus(); | 
|---|
|  |  |  | log.info("=====================结束定时刷新骑行中的数充值未开锁失败======================="); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 定时关闭 超时未支付的订单 | 
|---|
|  |  |  | * 30 秒刷新一次 | 
|---|
|  |  |  | * @throws Exception | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | @Scheduled(cron = "0/15 * * * * ? ") | 
|---|
|  |  |  | public void autCancel() throws Exception { | 
|---|
|  |  |  | log.info("=====================开始定时刷新关闭超时未支付的订单======================="); | 
|---|
|  |  |  | goodsorderService.autCancel(); | 
|---|
|  |  |  | log.info("=====================结束定时刷新关闭超时未支付的订单======================="); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 站点车辆满架率预警 | 
|---|
|  |  |  | * @throws Exception | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | @Scheduled(fixedDelay = 1000L * 60L * 10L) | 
|---|
|  |  |  | public void siteReserves() throws Exception { | 
|---|
|  |  |  | log.info("=====================开始 站点车辆满架率预警======================="); | 
|---|
|  |  |  | sitesService.siteReservesNotice();; | 
|---|
|  |  |  | log.info("=====================结束 站点车辆满架率预警======================="); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 检查通信异常的站点发通知 | 
|---|
|  |  |  | * @throws Exception | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | @Scheduled(fixedDelay = 1000L * 60L * 5) | 
|---|
|  |  |  | public void noticeNoLinkList() throws Exception { | 
|---|
|  |  |  | log.info("=====================开始 检查通信异常的站点发通知======================="); | 
|---|
|  |  |  | sitesService.noticeNoLinkList(new Sites());; | 
|---|
|  |  |  | log.info("=====================结束 检查通信异常的站点发通知======================="); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private WxPayProperties wxPayProperties; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 更新微信 ACCESS_TOKEN | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | //    @Scheduled(fixedDelay = 1000L * 60L * 90L) | 
|---|
|  |  |  | public void updAccessToken(){ | 
|---|
|  |  |  | DefaultWebSecurityManager manager = new DefaultWebSecurityManager(); | 
|---|
|  |  |  | ThreadContext.bind(manager); | 
|---|
|  |  |  | String appId = wxPayProperties.getAppId(); | 
|---|
|  |  |  | String appSecret = wxPayProperties.getAppSecret(); | 
|---|
|  |  |  | if(wxPayProperties.getExistsSub() ==1){ | 
|---|
|  |  |  | //如果是服务商支付,取子商户信息 | 
|---|
|  |  |  | appId = StringUtils.trimToNull(wxPayProperties.getSubAppId()); | 
|---|
|  |  |  | appSecret =StringUtils.trimToNull(wxPayProperties.getSubAppSecret()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //生成微信token | 
|---|
|  |  |  | String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="+appId+"&secret="+appSecret; | 
|---|
|  |  |  | String response = HttpsUtil.get(url,false); | 
|---|
|  |  |  | JSONObject json = JSONObject.parseObject(response); | 
|---|
|  |  |  | SystemDictData systemDictData = systemDictDataBiz.queryByCode(Constants.MINI_PROGRAMME,Constants.ACCESS_TOKEN); | 
|---|
|  |  |  | if(!Objects.isNull(systemDictData)){ | 
|---|
|  |  |  | systemDictData.setCode(json.getString("access_token")); | 
|---|
|  |  |  | systemDictData.setUpdateTime(new Date()); | 
|---|
|  |  |  | systemDictDataService.updateById(systemDictData); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 更新微信 ACCESS_TOKEN | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | @Scheduled(fixedDelay = 1000L * 60L * 90L) | 
|---|
|  |  |  | public void updAccessDingdingToken() throws Exception { | 
|---|
|  |  |  | DefaultWebSecurityManager manager = new DefaultWebSecurityManager(); | 
|---|
|  |  |  | ThreadContext.bind(manager); | 
|---|
|  |  |  | String token = DingDingNotice.getToken(systemDictDataBiz.queryByCode(Constants.DINGDING,Constants.DINGDING_APPKEY).getCode() | 
|---|
|  |  |  | ,systemDictDataBiz.queryByCode(Constants.DINGDING,Constants.DINGDING_SECRET).getCode()); | 
|---|
|  |  |  | if(StringUtils.isNotBlank(token)){ | 
|---|
|  |  |  | SystemDictData systemDictData = systemDictDataBiz.queryByCode(Constants.DINGDING,Constants.DINGDING_TOKEN); | 
|---|
|  |  |  | if(!Objects.isNull(systemDictData)){ | 
|---|
|  |  |  | systemDictData.setCode(token); | 
|---|
|  |  |  | systemDictData.setUpdateTime(new Date()); | 
|---|
|  |  |  | systemDictDataService.updateById(systemDictData); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 更新微信 ACCESS_TOKEN | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | @Scheduled(fixedDelay = 1000L * 60L ) | 
|---|
|  |  |  | public void autoCancelRefunOrder(){ | 
|---|
|  |  |  | log.info("=====================开始 自動取消未推送退款状态的退款单状态======================="); | 
|---|
|  |  |  | goodsorderService.autoCancelRefunOrder();; | 
|---|
|  |  |  | log.info("=====================结束 自動取消未推送退款状态的退款单状态======================="); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Scheduled(fixedDelay = 1000L * 60L ) | 
|---|
|  |  |  | public void autCancelGoodsOrder(){ | 
|---|
|  |  |  | log.info("=====================开始 自動取消未支付订单状态======================="); | 
|---|
|  |  |  | goodsorderService.autoCancelRefunOrder();; | 
|---|
|  |  |  | log.info("=====================结束 自動取消未支付订单状态======================="); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|