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 execute(String... params) throws Exception { String param = XxlJobHelper.getJobParam(); if (StringUtils.isNotEmpty(param) && params == null) { params = param.split(","); } //判断哪个区县的诱导需要调用青岛接口回显图片 Map 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 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 getGuideAddrMap, String guideNo) { String appId = getGuideAddrMap.get("APP_ID"); String appSecret = getGuideAddrMap.get("APP_SECRET"); String url = getGuideAddrMap.get("URL"); Map returnMap = new HashMap(); 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); } }