111
k94314517
2025-02-21 3139292bd5e958ec735778a9ecc4b4fdef814fa8
server/platform/src/main/java/com/doumee/task/ScheduleTool.java
@@ -1,15 +1,24 @@
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.MemberRidesService;
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;
@@ -18,6 +27,7 @@
import java.util.Date;
import java.util.List;
import java.util.Objects;
/**
 * 定时任务
@@ -30,10 +40,13 @@
@Slf4j
public class ScheduleTool {
    @Autowired
    private SystemDictDataBiz systemDictDataBiz;
    @Autowired
    private RefundService refundService;
    @Autowired
    private SystemDictDataService systemDictDataService;
    @Autowired
    private WxBillService wxBillService;
@@ -41,19 +54,25 @@
    @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
@@ -63,7 +82,6 @@
        log.info("=====================开始每天自动结算=======================");
        goodsorderService.autoCloseOrder();
        log.info("=====================结束每天自动结算=======================");
    }
    /**
@@ -71,11 +89,98 @@
     * 30 秒刷新一次
     * @throws Exception
     */
    @Scheduled(cron = "0/30 * * * * ? ")
    @Scheduled(cron = "0/15 * * * * ? ")
    public void autoRefreshLockStatus() throws Exception {
        log.info("=====================开始每天自动结算=======================");
        memberRidesService.autoRefreshLockStatus();
        log.info("=====================结束每天自动结算=======================");
        log.info("=====================开始定时刷新骑行中的数充值未开锁失败=======================");
       memberRidesService.autoRefreshLockStatus();
        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("=====================结束 自動取消未支付订单状态=======================");
    }
}