VipCardNoPushJob.java 20.4 KB
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458
/*
package com.zteits.pay.job;


import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;

import com.alibaba.fastjson.JSON;
import com.clouds.common.config.IrainConfigure;
import com.clouds.common.config.QDConfigure;
import com.clouds.common.utils.ApprntSignUtil;
import com.zteits.clouds.api.apibase.constants.AppPublicArgsEnum;
import org.eclipse.jetty.util.StringUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.clouds.common.cache.park.IRainPkNoRelationCacheUtil;
import com.clouds.common.cache.park.ParkingLotCacheUtil;
import com.clouds.common.utils.DateUtil;
import com.xxl.job.core.biz.model.ReturnT;

import com.xxl.job.core.context.XxlJobHelper;
import com.zteits.clouds.api.apibase.bean.BizResult;
import com.zteits.clouds.api.apibase.constants.OrderEnum;
import com.zteits.clouds.api.dto.bill.vipcard.VipNoPushCardCustInfoDTO;
import com.zteits.clouds.api.dto.bill.vipcard.param.VipPushRequest;
import com.zteits.clouds.api.dto.park.dto.ParkingLotDTO;
import com.zteits.clouds.api.service.bill.vipcard.VipCardService;
import com.zteits.pay.util.HttpClientTutorial;

*/
/**
 * 会员卡同步第三方
 * 目前只写同步irain
 *
 * Copyright: Copyright (c) 2017  ZTE-ITS
 *
 * @ClassName: VipCardNoPushJob.java
 * @Description:
 * @version: v1.0.0
 * @author: wangbiao
 * @date: 2017年11月23日
 * Modification History:
 *    Date         Author          Version         Description
 *---------------------------------------------------------*
 * 2017年11月23日      wangbiao        v1.0.0          创建
 *//*

@XxlJob(value="VipCardNoPushJob")
@Component
public class VipCardNoPushJob {
    private static final Logger logger = LoggerFactory.getLogger(VipCardNoPushJob.class);
    @Autowired
    private VipCardService vipCardService;
    */
/**推送状态 1:已推送 0:未推送*//*

    private static final Integer PUSH_STATE = 1;
    @Override
    public ReturnT<String> execute(String... arg0) throws Exception {

        int updateCount =0;
        this.logger("---begin查询未推送irain购买会员卡信息");
        VipPushRequest vipPushRequest = new VipPushRequest();
        vipPushRequest.setSysCode("1001");
        BizResult<List<VipNoPushCardCustInfoDTO>> rsList = vipCardService.queryNoPustVipCardCustInfo(vipPushRequest);
        this.logger("本次未推送条数="+(CollectionUtils.isNotEmpty(rsList.getData()) ? rsList.getData().size() :0));
        if(rsList.isSuccess() && rsList.getData()!=null) {
            int index = 1;
            for(VipNoPushCardCustInfoDTO cardInfo :rsList.getData()) {
                if(cardInfo == null || StringUtils.isEmpty(cardInfo.getPlNo())){
                    continue;
                }
                ParkingLotDTO parkingLotDTO = ParkingLotCacheUtil.getParkLotByPlNo(cardInfo.getPlNo());
                this.logger("begin开始推送第"+(index++)+"条,从缓存获取停车场信息="+JSONObject.toJSON(cardInfo));
                */
/***购买会员卡通知中irian*//*

                if(parkingLotDTO!=null && parkingLotDTO.getSourceType().equals(OrderEnum.ORDER_SOURCE_TYPE_IN.value())) {
                    updateCount = pushVip2Irain(updateCount, cardInfo);
                }
                if(parkingLotDTO!=null && parkingLotDTO.getSourceType().equals(OrderEnum.ORDER_SOURCE_TYPE_QD.value())) {
                    updateCount =  pushVip2QD(updateCount, cardInfo);
                }
            }
        }else{
            this.logger("---本次没有要推送的会员卡信息..");
            updateCount =1;
        }
        return updateCount > 0 ? ReturnT.SUCCESS :ReturnT.FAIL;
    }

    private int  pushVip2QD(int updateCount, VipNoPushCardCustInfoDTO cardInfo) throws IOException {
        //订单类型:301-会员卡购买单,302-会 员卡续费
        String orderType = "";
        Map<String, Object> queryMap = getStringObjectMap();
        queryMap.put("carNumber", cardInfo.getCarNumber());
        queryMap.put("parkCode", cardInfo.getPlNo());
        String querySign = ApprntSignUtil.signRequest(queryMap, QDConfigure.getSecret_key(), "md5", true);
        queryMap.put("sign", querySign);
        String reqStr1 = JSONObject.toJSONString(queryMap);
        System.out.println("请求参数"+reqStr1);
        String queryRst = "";
        try {
            queryRst = HttpClientTutorial.httpPostRequest(QDConfigure.getUrl() + "/pay/vipCardList", reqStr1);
        } catch (Exception e) {
        }
        JSONObject jsobj = JSONObject.parseObject(queryRst);
        if (jsobj != null && jsobj.get("code").toString().equals("0")) {
            JSONObject jsobDate = JSONObject.parseObject(jsobj.get("data") + "");
            JSONArray jSONArray = jsobDate.getJSONArray("cards");
            JSONObject job = jSONArray.getJSONObject(0);
            Long irainEndTimeStr = job.getLong("expDate") * 1000;
            if (jSONArray.size() > 0 && cardInfo.getEffDate().getTime() < irainEndTimeStr) {
                orderType = "302";
            } else {
                orderType = "301";
            }
        } else {
            orderType = "301";
        }

        Map<String, Object> returnMap = getStringObjectMap();
        returnMap.put("cardId", cardInfo.getCardNo());
        List<Map<String, String>> carList = new ArrayList<Map<String, String>>();
        Map<String, String> cars = new HashMap<>();
        cars.put("carNumber", cardInfo.getCarNumber());
        carList.add(cars);
        returnMap.put("carNumbers", JSON.toJSON(carList));
        returnMap.put("orderType", orderType);
        returnMap.put("effDate", cardInfo.getEffDate().getTime());
        returnMap.put("expDate", DateUtil.getOffsetDaysDate(cardInfo.getExpDate(), 1).getTime()); //2018-07-30 统一加一天
        returnMap.put("parkCode", cardInfo.getPlNo());
        String appSign = ApprntSignUtil.signRequest(returnMap, QDConfigure.getSecret_key(), "md5", true);
        returnMap.put("sign", appSign);
        String rs = "";
        String reqStr = JSONObject.toJSONString(returnMap);
        System.out.println("请求参数" + reqStr);
        try {
            rs = HttpClientTutorial.httpPostRequest(QDConfigure.getUrl() + "/pay/vipCard", reqStr);
        } catch (Exception e) {
        }

        this.logger("会员卡购买青岛  返回:" + JSONObject.toJSONString(rs));
        JSONObject rsobj = JSONObject.parseObject(rs);
        if (jsobj != null) {
            if (jsobj.get("code").toString().equals("0")) {
                this.logger("购买会员卡-青岛-成功  修改推送状态:");
                updateCount = updatePushStatus(updateCount, cardInfo);
            }
        }
        return updateCount;
    }

    private int updatePushStatus(int updateCount, VipNoPushCardCustInfoDTO cardInfo) {
        VipPushRequest record = new VipPushRequest();
        record.setSysCode("1001");
        record.setId(cardInfo.getId());
        record.setPushState(PUSH_STATE);
        */
/**更新推送状态.*//*

        this.logger("begin更新推送状态..." + JSONObject.toJSON(record));
        BizResult<Integer> result = vipCardService.updateByPrimaryKeySelective(record);
        this.logger("end更新推送状态...结果=" + JSONObject.toJSON(result));
        if (result != null && result.getData() > 0) {
            updateCount = result.getData();
            this.logger("id={" + cardInfo.getId() + "}已推送并更新成功..");
        }
        return updateCount;
    }

    private Map<String, Object> getStringObjectMap() {
        Map<String, Object> queryMap = new TreeMap<String, Object>();
        queryMap.put(AppPublicArgsEnum.APP_ID.getCode(), QDConfigure.getApp_id());
        queryMap.put(AppPublicArgsEnum.APP_SALT.getCode(), QDConfigure.getSecret_key());
        queryMap.put(AppPublicArgsEnum.APP_SIGN_TYPE.getCode(), "md5");
        return queryMap;
    }

    */
/**
     * 会员卡通知irian
     * @Title: pushVip2Irain
     * @param @param updateCount
     * @param @param cardInfo
     * @param @return    设定文件
     * @return int    返回类型
     * @throws
     *//*

    private int pushVip2Irain(int updateCount, VipNoPushCardCustInfoDTO cardInfo) {
        */
/**购买会员卡*//*

        String park_code = IRainPkNoRelationCacheUtil.getIRainPayPkNoByPlNo(cardInfo.getPlNo());
        this.logger("从缓存查询irain对应的 停车场编码="+park_code+",云平台plNo="+cardInfo.getPlNo());
        if(StringUtil.isNotBlank(park_code)) {
            */
/**会员卡新增*//*

            if(Integer.valueOf(1).equals(cardInfo.getCardBuyType())) {
                */
/**新增之前先查询 irain系统该车是否已经购买过会员卡,如果已经购买走续费逻辑否则走购买逻辑**//*

                Map<String, Object> params = new HashMap<>();
                IrainConfigure.irainRequestParams(params);
                params.put("vpl_number", cardInfo.getCarNumber());
                params.put("park_code", park_code);
                String rs ="";
                try {
                    rs = HttpClientTutorial.httpPostRequest(IrainConfigure.getIrain_url() + "/vehicle_auth/GetAuth", params);
                    logger.info("irain 获取授权信息:" + JSONObject.toJSONString(rs));

                    JSONObject jsobj = JSONObject.parseObject(rs);
                    if (jsobj != null) {
                        if (!jsobj.get("status").toString().equals("0")) {
                            JSONObject jsobDate = JSONObject.parseObject(jsobj.get("data")+"");
                            JSONArray  jSONArray  = jsobDate.getJSONArray("list");
                            if(jSONArray.size()>0) {
                                JSONObject job = jSONArray.getJSONObject(0);
                                //2018-09-10 注释 新增时候日期没有增加一天,无需比较日期直接加一天
                                //Long irainEndTimeStr = job.getLong("validetime") * 1000;
                                //if(cardInfo.getEffDate().getTime()<irainEndTimeStr){
                                    */
/**比较本地与Irain结束时间.*//*


                                  //  cardInfo.setExpDate(DateUtil.getOffsetDaysDate(cardInfo.getExpDate(), 1));
                                    //this.logger("已经购买结束日期增加一天,结束日期="+cardInfo.getExpDate());
                                    //BeanUtils.copyProperties(cardInfoCompare,cardInfo);
                                    */
/***已经线下购买过会员卡 走续费逻辑*//*

                                //}
                                cardInfo.setExpDate(DateUtil.getOffsetDaysDate(cardInfo.getExpDate(), 1));
                                this.logger("已经线下购买过会员卡走续费逻辑,结束日期增加一天,结束日期="+cardInfo.getExpDate());
                                updateCount = pushEditVipCard4Irain(updateCount, cardInfo,park_code);
                            }else {
                                cardInfo.setExpDate(DateUtil.getOffsetDaysDate(cardInfo.getExpDate(), 1));
                                this.logger("线下没有够没过会员卡 走购买逻辑,结束日期增加一天,结束日期="+cardInfo.getExpDate());
                                */
/**线下没有够没过会员卡 走购买逻辑**//*

                                updateCount = pushAddVipCard4Irain(updateCount, cardInfo,park_code);
                            }
                        }
                    }

                } catch (Exception e) {
                    logger.info("irain 获取授权信息:" + e);
                }
            }
            */
/**会员卡续费**//*

            else if(Integer.valueOf(2).equals(cardInfo.getCardBuyType())) {
                if(cardInfo != null && cardInfo.getExpDate() != null){
                    cardInfo.setExpDate(DateUtil.getOffsetDaysDate(cardInfo.getExpDate(), 1));
                    this.logger("直接续费--结束日期增加一天,结束日期="+cardInfo.getExpDate());
                }
                updateCount = pushEditVipCard4Irain(updateCount, cardInfo,park_code);
            }
        }
        //1:购卡
        return updateCount;
    }
    */
/**
     * 重新计算开始和结束时间.<br/>
     * @param jSONArray
     * @param cardInfo
     * @return
     * 2018年1月10日  wangfs.<br/>
     *//*

    private void compareStartTime(JSONArray  jSONArray,VipNoPushCardCustInfoDTO cardInfo){
        try {
            for(int i=0;i<jSONArray.size();i++){
                JSONObject job = jSONArray.getJSONObject(i);
                //irain开始时间
                Long irainBeginTimeStr = job.getLong("validbtime") * 1000;
                //irain结束时间
                Long irainEndTimeStr = job.getLong("validetime") * 1000;
                SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
                //1.irain开始时间
                Date  irainBeginTime = null;
                //2.irain结束时间
                Date  irainEndTime = null;
                if(irainBeginTimeStr > 0){
                    irainBeginTime = format.parse(format.format(new Date(irainBeginTimeStr)));
                }
                if(irainEndTimeStr > 0){
                    irainEndTime = format.parse(format.format(new Date(irainEndTimeStr)));
                }

                */
/** 生效时间 *//*

                Date effDate = null ;
                if(cardInfo.getEffDate() != null){
                    effDate = format.parse(format.format(cardInfo.getEffDate()));
                }

                */
/**
                 * 情况1:
                 *  Irain    开始时间              结束时间
                 *           |_________________________|
                 *  本地开始时间                  |______________| 本地开始时间在 Irain 开始结束范围之内 取本地开始时间 否则开始时间去Irain开始时间
                 *//*

                if(effDate != null && irainBeginTime != null && irainEndTime != null){
                    if(effDate.getTime() >= irainBeginTime.getTime() &&  effDate.getTime() <= irainEndTime.getTime() ){
                        this.logger("车牌号="+cardInfo.getCarNumber()+"本地开始时间在irain 开始和结束时间之内,取irain开始时间");
                        cardInfo.setEffDate(irainBeginTime);
                    }
                }
            }
        } catch (ParseException e) {
            e.printStackTrace();
        }


    }
    */
/***
     *
     * @Title: pushEditVipCard4Irain
     * @Description: 会员卡续费 推送irain
     * @param @param updateCount
     * @param @param cardInfo
     * @param @param park_code
     * @param @return    设定文件
     * @return int    返回类型
     * @throws
     *//*

    private int pushEditVipCard4Irain(int updateCount, VipNoPushCardCustInfoDTO cardInfo,String park_code) {
        this.logger("---start---会员卡续费成功,开始通知irain="+park_code+",车牌号="+cardInfo.getCarNumber()+",结束日期="+cardInfo.getExpDate());
        try {
            Map<String, Object> params = new HashMap<>();
            IrainConfigure.irainRequestParams(params);
            params.put("vpl_number", cardInfo.getCarNumber());//+","+UUID.randomUUID(
            params.put("serial_number",UUID.randomUUID());// cardInfo.getCustCardNo());
            params.put("park_code", park_code);
            params.put("start_time", cardInfo.getEffDate().getTime()/1000);// 起始时间 是 时间戳
            params.put("end_time",cardInfo.getExpDate().getTime()/1000);// 结束时间 是 时间戳

            */
/**增加时间区间字段,add by zwg*//*

            //特征日标识:-1:不限;  1:工作日;  2:非工作日;3:每天
            if(cardInfo.getSpecialDayType()!=null && cardInfo.getSpecialDayType().intValue() == 1 ){
                params.put("type", 3);//
                params.put("time_range", DateUtil.getDateString(cardInfo.getValidStartTime(),DateUtil.DATETIME)+","+DateUtil.getDateString(cardInfo.getValidEndTime(),DateUtil.DATETIME));
                params.put("weeks","1,2,3,4,5,7");
            }
            String rs = "";
            this.logger("会员卡续费通知irain  请求:"+JSONObject.toJSONString(params));
            for (int i = 0; i < 3; i++) {
                if (StringUtils.isBlank(rs)) {
                    rs = HttpClientTutorial.httpPostRequest(IrainConfigure.getIrain_url() + "/vehicle_auth/ModifyAuthPeroid",params);
                }
            }
            this.logger("会员卡续费通知irain  返回:"+JSONObject.toJSONString(rs));
            JSONObject jsobj = JSONObject.parseObject(rs);
            if (jsobj != null) {
                if (!jsobj.get("status").toString().equals("0")) {
                    this.logger("会员卡续费通知irain成功  修改推送状态");
                    updateCount = updatePushStatus(updateCount, cardInfo);
                }
            }
        } catch (UnsupportedEncodingException e) {
            this.logger("会员卡续费成功,结束通知irain失败:"+e.getMessage());
        }
        this.logger("---end---会员卡续费成功,结束通知irain");
        return updateCount;
    }

    */
/***
     *
     * @Title: pushEditVipCard4Irain
     * @Description: 会员卡新增 推送irain
     * @param @param updateCount
     * @param @param cardInfo
     * @param @param park_code
     * @param @return    设定文件
     * @return int    返回类型
     * @throws
     *//*

    private int pushAddVipCard4Irain(int updateCount, VipNoPushCardCustInfoDTO cardInfo,String park_code) {
        this.logger("---start---购买会员成功,开始通知irain="+park_code+",车牌号="+cardInfo.getCarNumber()+",结束日期="+cardInfo.getExpDate());
        try {
            Map<String,Object> params =  new HashMap<>();
            IrainConfigure.irainRequestParams(params);
            params.put("vpl_number", cardInfo.getCarNumber()+",");
            params.put("serial_number",UUID.randomUUID());// cardInfo.getCustCardNo());
            params.put("park_code", park_code);
            params.put("user_name", cardInfo.getCarNumber());// 用户ming
            params.put("park_no", UUID.randomUUID().toString().subSequence(0,10));// 车位编号号 是
            */
/**
             * 2 : 黑名单 3: 授权收费一 4: 授权收费二 5: 月租车 6:商户优惠车 7: 协议单位优惠车 8:员工车 9:免费车 10:内部车 15:军警车
             *//*

            params.put("type", 5);//
            params.put("begin_time", cardInfo.getEffDate().getTime()/1000);// 起始时间 是 时间戳
            params.put("end_time",cardInfo.getExpDate().getTime()/1000);// 结束时间 是 时间戳
            */
/**增加时间区间字段,add by zwg*//*

            //特征日标识:-1:不限;  1:工作日;  2:非工作日;3:每天
            if(cardInfo.getSpecialDayType()!=null && cardInfo.getSpecialDayType().intValue() == 1 ){
                params.put("type", 3);//
                params.put("time_range", DateUtil.getDateString(cardInfo.getValidStartTime(),DateUtil.DATETIME)+","+DateUtil.getDateString(cardInfo.getValidEndTime(),DateUtil.DATETIME));
                params.put("weeks","1,2,3,4,5,7");
            }

            String rs = "";
            for (int i = 0; i < 3; i++) {
                if (StringUtils.isBlank(rs)) {
                    rs = HttpClientTutorial.httpPostRequest(IrainConfigure.getIrain_url() + "/vehicle_auth/Issued",params);
                }
            }
            this.logger("会员卡购买通知irain  返回:"+JSONObject.toJSONString(rs));
            JSONObject jsobj = JSONObject.parseObject(rs);
            if (jsobj != null) {
                if (!jsobj.get("status").toString().equals("0")) {
                    this.logger("购买会员卡通知irain成功  修改推送状态:" );
                    updateCount = updatePushStatus(updateCount, cardInfo);
                }
            }
        } catch (UnsupportedEncodingException e) {
            this.logger("会员卡购买成功,结束通知irain失败:"+e.getMessage());
        }
        this.logger("---end---购买会员成功,结束通知irain");
        return updateCount;
    }

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

}
*/