TaiJiEqpTokenTask.java 8.33 KB
package com.zteits.park.configuration.schedule;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONException;
import org.apache.commons.lang3.StringUtils;
import com.alibaba.fastjson.JSONObject;
import com.clouds.common.cache.sys.SysCodeValueCacheUtil;
import com.clouds.common.constants.CodeValKindEnum;
import com.clouds.common.constants.RedisKeyEnum;
import com.clouds.common.redis.RedisCacheFactory;
import com.clouds.common.redis.RedisCacheUtil;
import com.clouds.common.utils.HttpClientTutorial;
import com.clouds.common.utils.MD5Utils;
import com.zteits.clouds.api.apibase.constants.PDAErrorEnum;
import com.zteits.clouds.api.apibase.exception.BizException;
import com.zteits.clouds.api.dto.order.taijiyun.EqpLoginRequest;
import com.zteits.clouds.api.dto.park.dto.TaijiChanneEqpDTO;
import com.zteits.clouds.api.dto.rocketmq.datacollection.hvreport.BjxcTaijiConfigVO;
import com.zteits.park.dao.TpEEmployeeChargeDao;
import com.zteits.park.domain.TpEEmployeeCharge;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.util.List;

/**
 * Copyright: Copyright (c) 2021
 *
 * @ClassName: com.zteits.order.config.schedule
 * @Description: 西城上传太极进出场数据
 * @version: v1.0.0
 * @author:
 * @date: 2022/11/12   11:10 上午 Modification History:
 * @ Date         Author          Version      Description
 * @ ---------------------------------------------------------*
 * @ 2022/11/12                v1.0.0          创建
 */
@Component
public class TaiJiEqpTokenTask {

    Logger logger = LoggerFactory.getLogger(TaiJiEqpTokenTask.class);

    @Autowired
    private RedisCacheUtil redisCacheUtil;

    @Autowired
    private TpEEmployeeChargeDao tpEEmployeeChargeDao;

    /**
     * 半小时刷新一次token获取
     */
    @Scheduled(fixedRate = 1800 * 1000)
    public void refreshTaiJiEqpToken() {
        logger.info("西城半小时刷新token:");
        List<TpEEmployeeCharge> tpEEmployeeCharges = tpEEmployeeChargeDao.queryChargerByOrgId(10007L);
        logger.info("西城半小时刷新token:"+JSONObject.toJSON(tpEEmployeeCharges));

        if(tpEEmployeeCharges.size()<=0){
            return;
        }
        for (TpEEmployeeCharge employeeCharge:tpEEmployeeCharges){
            //eqptoken不为空 说明收费用已经登录
            if(StringUtils.isNotEmpty(employeeCharge.getEqpToken())){

                String codeValue = SysCodeValueCacheUtil.queryCodeValue(CodeValKindEnum.BJXC_TAIJI_UPLOAD);
                logger.info("西城太极上报配置信息11:" + JSONObject.toJSON(codeValue));
                JSONObject response = new JSONObject();
                if (StringUtils.isNotEmpty(codeValue)) {
                    String devStatuskeyStr = RedisKeyEnum.TAIJI_EQP_DEVICE_STATUS.key() + employeeCharge.getEqpSn();
                    TaijiChanneEqpDTO channeEqpDTO = RedisCacheFactory.getRedisCacheUtil().get(devStatuskeyStr);
                    logger.info("devStatuskeyStr:" + JSONObject.toJSON(devStatuskeyStr));
                    logger.info("西taijiChanneEqpDTO:" + JSONObject.toJSON(channeEqpDTO));

                    if(channeEqpDTO == null){
                        continue;
                    }
                    try {
                        BjxcTaijiConfigVO configVO = JSON.parseObject(codeValue, BjxcTaijiConfigVO.class);

                        EqpLoginRequest loginRequest = new EqpLoginRequest();
//                        loginRequest.setSn(employeeCharge.getEqpSn());
//                        String timeMillis = System.currentTimeMillis()+"";
//                        loginRequest.setTimestamp(timeMillis);
//                        loginRequest.setPositionLat(channeEqpDTO.getLatId()+"");
//                        loginRequest.setPositionLong(channeEqpDTO.getLonId()+"");
////
////                        loginRequest.setPositionLat("40.3842111");
////                        loginRequest.setPositionLong("115.9074991");
//                        loginRequest.setUserName(employeeCharge.getEqpUserName());
//                        loginRequest.setPassword(employeeCharge.getChargerPwd());
//                        String md = employeeCharge.getChargerName()+ employeeCharge.getEqpUserPassword()+timeMillis+configVO.getKey();
//                        String sing = MD5Utils.enMD5(md);

                        loginRequest.setSn(employeeCharge.getEqpSn());
                        String timeMillis = System.currentTimeMillis()+"";
                        loginRequest.setTimestamp(timeMillis);
                        loginRequest.setPositionLat(channeEqpDTO.getLatId()+"");
                        loginRequest.setPositionLong(channeEqpDTO.getLonId()+"");
                        loginRequest.setUserName(employeeCharge.getEqpUserName());
                        loginRequest.setPassword(employeeCharge.getEqpUserPassword());
                        String md = employeeCharge.getEqpUserName()+ employeeCharge.getEqpUserPassword()+timeMillis+configVO.getKey();
                        String sing = MD5Utils.enMD5(md);

                        loginRequest.setSign(sing);
                        loginRequest.setVersion(configVO.getVersion());

                        String logInUrl = configVO.getLogInUrl();
                        JSONObject voJson = (JSONObject) JSONObject.toJSON(loginRequest);
                        logger.info("{},西城巡检车设备登录信息,请求:{}", logInUrl, voJson);
                        response = HttpClientTutorial.doPostXC(logInUrl, voJson); // 发送
                        logger.info("{},西城巡检车设备登录信息,响应:{}", logInUrl, response);

                    } catch (JSONException e) {
                        logger.info("西城太极上报配置信息获取错误:" + JSONObject.toJSON(e));
                    }
                    if (null != response) {
                        try {
                            String keyStr = RedisKeyEnum.TAIJI_EQP_TOKEN.key() + employeeCharge.getEqpSn();

                            String resCode = response.getString("code");
                            String msg = response.getString("msg");

                            JSONObject content = response.getJSONObject ("content");
                            if("100".equals(resCode)){
                                String token = response.getString("token");;

                                String empCode = content.getString("empCode");
                                String empName = content.getString("empName");

                                TaijiChanneEqpDTO taijiChanneEqpDTO = new TaijiChanneEqpDTO();
                                taijiChanneEqpDTO.setEqpSn(employeeCharge.getEqpSn());
                                taijiChanneEqpDTO.setChargerCode(employeeCharge.getChargerCode());
                                taijiChanneEqpDTO.setChargerName(employeeCharge.getChargerName());
                                taijiChanneEqpDTO.setEqpToken(token);
                                taijiChanneEqpDTO.setEqpCode(empCode);
                                taijiChanneEqpDTO.setEqpName(empName);
                                taijiChanneEqpDTO.setEqpUserName(employeeCharge.getEqpUserName());
                                taijiChanneEqpDTO.setEqpUserPassword(employeeCharge.getEqpUserPassword());
                                taijiChanneEqpDTO.setLonId(channeEqpDTO.getLonId());
                                taijiChanneEqpDTO.setLatId(channeEqpDTO.getLatId());

                                logger.info("西城设备登录token至内存:"+token);
                                //放入Redis
                                if(StringUtils.isNotEmpty(token)){
                                    redisCacheUtil.put(keyStr, taijiChanneEqpDTO, 60*60L);//保存ACCESS_TAIJI_TOKEN到内存
                                }
                                logger.info("西城太极设备登录token刷新成功:"+redisCacheUtil.get(keyStr));
                            }else {
                                throw new BizException(PDAErrorEnum.PDA_NOT_USED, msg);
                            }
                        } catch (Exception e) {
                            logger.error(e.getMessage(), e);
                        }
                    }


                }
            }
        }


    }
}