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.exception.BusinessException; 
 | 
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.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 org.springframework.stereotype.Component; 
 | 
import org.springframework.util.CollectionUtils; 
 | 
  
 | 
import java.util.Date; 
 | 
import java.util.List; 
 | 
import java.util.Objects; 
 | 
  
 | 
/** 
 | 
 * 定时任务 
 | 
 * @author jiangping 
 | 
 * @date 2021-10-10 14:40:35 
 | 
 * https://www.bejson.com/othertools/cron/  cron 表达式生成地址 
 | 
 */ 
 | 
@Component 
 | 
@EnableScheduling 
 | 
@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 
 | 
     */ 
 | 
    public void getWxBill() throws Exception { 
 | 
        //前一天的數據 
 | 
        Date ydate = DateUtil.addDaysToDate(new Date(), -1); 
 | 
        wxBillService.getWxBill(ydate); 
 | 
  
 | 
    } 
 | 
    /** 
 | 
     * 測試 
 | 
     * @throws Exception 
 | 
     */ 
 | 
    @Scheduled(cron = "0 30 13 * * ? ") 
 | 
    public void getYesterdayBill() throws Exception { 
 | 
        log.info("=====================开始每天自动结算======================="); 
 | 
        goodsorderService.autoCloseOrder(); 
 | 
        log.info("=====================结束每天自动结算======================="); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 定时刷新骑行中的数充值未开锁失败 
 | 
     * 30 秒刷新一次 
 | 
     * @throws Exception 
 | 
     */ 
 | 
    @Scheduled(cron = "0/30 * * * * ? ") 
 | 
    public void autoRefreshLockStatus() throws Exception { 
 | 
        log.info("=====================开始定时刷新骑行中的数充值未开锁失败======================="); 
 | 
        memberRidesService.autoRefreshLockStatus(); 
 | 
        log.info("=====================结束定时刷新骑行中的数充值未开锁失败======================="); 
 | 
    } 
 | 
  
 | 
  
 | 
    /** 
 | 
     * 站点车辆满架率预警 
 | 
     * @throws Exception 
 | 
     */ 
 | 
    @Scheduled(fixedDelay = 1000L * 60L * 10L) 
 | 
    public void siteReserves() throws Exception { 
 | 
        log.info("=====================开始 站点车辆满架率预警======================="); 
 | 
        sitesService.siteReservesNotice();; 
 | 
        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.doGet(url,null); 
 | 
        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 ) 
 | 
    public void autoCancelRefunOrder(){ 
 | 
        log.info("=====================开始 自動取消未推送退款状态的退款单状态======================="); 
 | 
        goodsorderService.autoCancelRefunOrder();; 
 | 
        log.info("=====================结束 自動取消未推送退款状态的退款单状态======================="); 
 | 
    } 
 | 
  
 | 
  
 | 
} 
 |