RestTemplate与若依定时任务,XXLJob定时任务的结合

该代码实现了一个基于XXLJob的定时任务,该任务通过Spring的RESTTemplate调用其他服务的REST接口进行数据同步。任务中涉及了日期处理、HTTP请求头设置以及结果的处理和存储。同时,当没有新增数据时,会触发邮件通知。
摘要由CSDN通过智能技术生成
package com.luxsan.lpms.job;


import com.alibaba.fastjson2.JSONObject;
import com.luxsan.lpms.mapper.PUpphOutPutDetailMapper;
import com.ruoyi.framework.web.domain.AjaxResult;
import com.xxl.job.core.handler.annotation.XxlJob;
import lombok.extern.log4j.Log4j2;

import org.springframework.http.*;


import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

import javax.annotation.Resource;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.*;

/**
 * 使用若依的定时任务与XXLJob做的同步接口,使用restTemplate发送的请求
 */

@RestController
@RequestMapping("/sync")
@Log4j2
@Component("syncJob")    //使用若依 syncJob.getMapData
public class SYNCOverAllCapacityJob {

    public static final String url = "http://IP:8081/项目路径";
    public static final String emailUrl = "https://域名/项目路径";
//    public static final String url1= "http://IP:8081/项目路径";
//    public static final String url2= "https://ifasx.luxsan-ict.com/api/WorkWeChat/SendTextMessage";

    @Resource
    private RestTemplate restTemplate;

    @Resource
    PUpphOutPutDetailMapper pUpphOutPutDetailMapper;


    @RequestMapping("/getData")  
    @Transactional(rollbackFor = Exception.class)
    @XxlJob("mapData")   //使用XXljob  就这一个就可以  JobHandler*
    public AjaxResult getMapData() {  //若依  定时任务
        List<Map<String, String>> list = pUpphOutPutDetailMapper.selectParm();
        List<Map<String, Object>> resultList = new ArrayList<>();
        String startTime = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy/MM/dd"));//获取当前时间
//        String startTime = "2023/9/3";//获取当前时间
        String date = getDate(startTime, -1);//前一天的时间
        for (Map<String, String> dataMap : list) {
            HashMap<String, String> requestMap = new HashMap<>();
            HttpHeaders headers = new HttpHeaders();
            headers.add("NginxModel", dataMap.get("MODEL"));
            headers.add("NginxStage", dataMap.get("STAGE_GROUP"));
            headers.add("NginxProcess", dataMap.get("FATP"));
            headers.add("sign", "e74167063074b180b6dafa567b2095a8f7996327");
            requestMap.put("shift", "D");
            requestMap.put("model", dataMap.get("MODEL"));
            requestMap.put("stage", dataMap.get("STAGE_GROUP"));
            requestMap.put("reflow", "Y");
            requestMap.put("startTime", startTime);
            //调用接口发送请求
            List<Map<String, String>> dataList = exchange(headers, requestMap);
            if (null != dataList && !dataList.isEmpty()) {
                for (Map<String, String> data : dataList) {
                    HashMap<String, Object> resultMap = getResultMap(data, dataMap);
                    resultMap.put("shift", "D");
                    resultMap.put("startTime", startTime);
                    resultList.add(resultMap);
                }
            }
            requestMap.put("shift", "N");
            requestMap.put("startTime", date);
            //调用接口发送请求
            List<Map<String, String>> dataNList = exchange(headers, requestMap);
            if (null != dataNList && !dataNList.isEmpty()) {
                for (Map<String, String> data : dataNList) {
                    HashMap<String, Object> resultMap = getResultMap(data, dataMap);
                    resultMap.put("shift", "N");
                    resultMap.put("startTime", date);

                    resultList.add(resultMap);
                }
            }
        }
        log.info("resultList=====" + resultList.size() + "条");
        if (null != resultList && resultList.size() > 0) {
            pUpphOutPutDetailMapper.deleteByDate(startTime);
            pUpphOutPutDetailMapper.deleteByDateN(date);
            int count = pUpphOutPutDetailMapper.insertResultList(resultList);
            log.info("新增" + count + "条");
            return AjaxResult.success("新增" + count + "条");
        }else {
            try {
//                JSONObject jsonObject = new JSONObject();
//                jsonObject.put("EmpCodes", "75333337");
//                jsonObject.put("Content", "云管同步定时任务新增0条,确认下是不是任务失败了");
//                ResponseEntity<Map> forEntity = restTemplate.postForEntity(url2, jsonObject, Map.class);
//                log.info("新增0条");
                JSONObject jsonObject = new JSONObject();
                jsonObject.put("mailFrom", "luxsan.imes@luxsan-ict.com");
                jsonObject.put("mailTo", "LEE.LIN@luxsan-ict.com");
                jsonObject.put("subject", "云管数据同步定时任务预警");
                jsonObject.put("content", "云管同步定时任务新增0条,确认下是不是任务失败了");
                ResponseEntity<Map> forEntity = restTemplate.postForEntity(emailUrl, jsonObject, Map.class);
                log.info("新增0条");
            }catch (Exception e) {
               return AjaxResult.error("调用邮箱接口失败");
            }
            return AjaxResult.success("新增0条");
        }
    }

    private HashMap<String, Object> getResultMap(Map<String, String> data, Map<String, String> dataMap) {
        HashMap<String, Object> resultMap = new HashMap<>();
        resultMap.put("model", dataMap.get("MODEL"));
        resultMap.put("outPut", data.get("inputQty"));
        resultMap.put("stage", data.get("stage"));
        resultMap.put("line", data.get("line"));
        resultMap.put("lineWorkTime", data.get("lineWorkTime"));
        resultMap.put("stageGroup", data.get("SECTION"));
        return resultMap;
    }

    private List<Map<String, String>> exchange(HttpHeaders headers, HashMap<String, String> requestMap) {

        HttpEntity httpEntity = new HttpEntity<>(requestMap, headers);
        ResponseEntity<JSONObject> exchange = this.restTemplate.exchange(url, HttpMethod.POST, httpEntity, JSONObject.class);
        JSONObject body = exchange.getBody();
        List<Map<String, String>> dataList = (List<Map<String, String>>) body.get("data");
        return dataList;
    }

    /**
     * 日期+n天,遇到月末或年末自动转下月或下年
     *
     * @param date
     * @param i
     * @return
     */
    public String getDate(String date, int i) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
        //字符串转换成Date
        Date d = null;
        try {
            d = sdf.parse(date);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        Calendar c = Calendar.getInstance();
        //设置Calendar日期
        c.setTime(d);
        //给指定Calendar日期加上指定天数
        c.add(Calendar.DATE, i);
        //得到日期转成字符串形式返回
        String s = sdf.format(c.getTime());
        return s;
    }
}
若要在Spring Cloud框架中实现模块间的定时任务调用,可以按照以下步骤进行操作。 首先,需要在要调用定时任务的模块中引入Spring Boot的定时任务机制。可以通过在任务类上添加`@EnableScheduling`注解,以及在具体的定时任务方法上添加`@Scheduled`注解来定义定时任务的执行逻辑和频率。 然后,需要在模块之间进行通信。可以使用Spring Cloud提供的服务间调用机制,如Feign、RestTemplate或者消息队列等,来实现模块间的通信。例如,可以在要被调用的模块中定义相应的接口,然后在调用方的模块中使用Feign或RestTemplate调用该接口的方法。 接下来,调用方模块需要在自己的定时任务中调用被调用方模块的接口。可以在调用方模块中定义一个定时任务方法,并在该方法中调用被调用方模块的接口方法。可以使用Feign的方式来进行跨模块的接口调用,以实现定时任务的调用。 最后,启动Spring Cloud的各个模块。可以使用Spring Cloud的服务注册与发现组件,如Eureka或Consul,来将各个模块注册到注册中心,并实现模块之间的服务发现和负载均衡。 总之,只需要在模块中引入Spring Boot的定时任务机制,通过Spring Cloud提供的服务间调用机制进行模块间通信,即可实现夸模块的定时任务调用。这样可以使得系统中的各个模块能够独立运行和部署,同时又能够在需要时相互调用定时任务方法,提高系统的灵活性和可维护性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值