GetGuidePicJob.java 5.2 KB
package com.zteits.park.job.guideJob;

import org.apache.commons.lang3.StringUtils;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.clouds.common.cache.sys.SysCodeValueCacheUtil;
import com.clouds.common.constants.CodeValKindEnum;
import com.clouds.common.utils.ApprntSignUtil;
import com.xiaoleilu.hutool.util.CollectionUtil;
import com.xxl.job.core.biz.model.ReturnT;

import com.xxl.job.core.context.XxlJobHelper;
import com.zteits.clouds.api.apibase.constants.AppPublicArgsEnum;
import com.zteits.clouds.api.apibase.constants.DataStatusEnum;
import com.zteits.park.domain.TdGGuideScreen;
import com.zteits.park.domain.TdGGuideScreenExample;
import com.zteits.park.mapper.TdGGuideScreenMapper;
import com.zteits.park.util.HttpClientTutorial;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

/**
 * 调用青岛接口获取诱导图片,每天凌晨执行一次
 * 没啥用了,因为获取的图片有失效性,一会就没有了
 */
//@Component
public class GetGuidePicJob {
    private static final Logger logger = LoggerFactory.getLogger(GetGuidePicJob.class);
    @Autowired
    private TdGGuideScreenMapper tdGGuideScreenMapper;

    //@XxlJob(value = "getGuidePicJob")
    public ReturnT<String> execute(String... params) throws Exception {
        String param = XxlJobHelper.getJobParam();
        if (StringUtils.isNotEmpty(param) && params == null) {
            params = param.split(",");
        }

        //判断哪个区县的诱导需要调用青岛接口回显图片
        Map<String, String> getGuideAddrMap = SysCodeValueCacheUtil.queryCodeValueAndNames(CodeValKindEnum.IN_OUT_PARK_SYNC_QD);
        String guideCountryids = getGuideAddrMap.get("GUIDE_COUNTRYIDS");
        if(StringUtils.isBlank(guideCountryids)){
            log("未配置GUIDE_COUNTRYIDS,无需调用青岛获取诱导图片");
            return ReturnT.SUCCESS;
        }
        String[] guideCountryIdArray = guideCountryids.split(",");
        TdGGuideScreenExample example = new TdGGuideScreenExample();
        example.createCriteria().andDataStatusEqualTo(DataStatusEnum.DATA_STATUS_VALID.value())
                .andCountryIdIn(Arrays.stream(guideCountryIdArray).map(item->Long.valueOf(item)).collect(Collectors.toList()));
        List<TdGGuideScreen> tdGGuideScreenList = tdGGuideScreenMapper.selectByExample(example);
        if(CollectionUtil.isEmpty(tdGGuideScreenList)){
            log("根据countryIds:"+guideCountryids+"没有查询到相关诱导信息");
            return ReturnT.SUCCESS;
        }
        for (TdGGuideScreen tdGGuideScreen : tdGGuideScreenList){
            //调用接口获取图片
            String picPath = this.getGuidePicForQD(getGuideAddrMap,tdGGuideScreen.getGuideNo());
            if(StringUtils.isBlank(picPath)){
                continue;
            }
            //更新到数据库中
            TdGGuideScreen record = new TdGGuideScreen();
            record.setId(tdGGuideScreen.getId());
            record.setPicturePath(picPath);
            tdGGuideScreenMapper.updateByPrimaryKeySelective(record);
        }
        return  ReturnT.SUCCESS;
    }
    /**
     * 调用青岛接口获取诱导图片,一级,二级,三级诱导均是通过接口获取
     * @param getGuideAddrMap
     * @param guideNo
     * @return
     */
    private String getGuidePicForQD(Map<String, String> getGuideAddrMap, String guideNo) {
        String appId = getGuideAddrMap.get("APP_ID");
        String appSecret = getGuideAddrMap.get("APP_SECRET");
        String url = getGuideAddrMap.get("URL");
        Map<String, Object> returnMap = new HashMap<String, Object>();
        returnMap.put(AppPublicArgsEnum.APP_ID.getCode(), appId);
        returnMap.put(AppPublicArgsEnum.APP_SALT.getCode(), appSecret);
        returnMap.put(AppPublicArgsEnum.APP_SIGN_TYPE.getCode(), "md5");
        returnMap.put("guideNo",guideNo);
        String rs = "";
        try {
            String appSign = ApprntSignUtil.signRequest(returnMap, appSecret, "md5");
            returnMap.put("sign", appSign);
            String req = JSON.toJSONString(returnMap);
            log("诱导回显调用青岛请求参数:"+req);
            rs = HttpClientTutorial.httpPostRequest(url+"/guideScreen/getLatestProgram",null, req);
            log("诱导回显调用青岛响应信息"+rs);
            JSONObject resultJson = JSONObject.parseObject(rs);
            String code = resultJson.getString("code");
            if("8888".equals(code)){
                JSONArray jsonArray = resultJson.getJSONObject("data").getJSONArray("programs");
                if(jsonArray.size()>0){
                    return jsonArray.getJSONObject(0).getString("imageUrl");
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
            log("诱导回显调用青岛数据错误");
        }
        return null;
    }

    private void log(String msg){
        XxlJobHelper.log(msg);
        logger.info(msg);
    }
}