UnDoneAppointmentPushJob.java 5.64 KB
package com.zteits.pay.job.appointment;

import com.alibaba.fastjson.JSONObject;
import com.clouds.common.cache.park.ParkingLotCacheUtil;
import com.xxl.job.core.biz.model.ReturnT;

import com.xxl.job.core.context.XxlJobHelper;
import com.xxl.job.core.handler.annotation.XxlJob;
import com.zteits.clouds.api.apibase.bean.BizResult;
import com.zteits.clouds.api.apibase.constants.AppointmentPushStateEnum;
import com.zteits.clouds.api.apibase.constants.AppointmentStateEnum;
import com.zteits.clouds.api.apibase.constants.SourceTypeEnum;
import com.zteits.clouds.api.dto.order.dto.UnDoneOrderAppointmentDTO;
import com.zteits.clouds.api.dto.order.param.UnDoneOrderAppointmentRequest;
import com.zteits.clouds.api.dto.park.dto.ParkingLotDTO;
import com.zteits.clouds.api.dto.park.param.UpdateFreeBerthEnclosedRequest;
import com.zteits.clouds.api.dto.park.param.ViewFreeBerthEnclosedRequest;
import com.zteits.clouds.api.service.order.orderappointment.OrderAppointmentService;
import com.zteits.clouds.api.service.park.ParkingListQueryService;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Optional;

/**
 * Copyright: Copyright (c) 2018
 *
 * @Description:
 * @version: v1.0.0
 * @author: jiawj
 * @date: 2021/04/15 18:13
 * Modification History:
 * Date             Author          Version            Description
 * ---------------------------------------------------------*
 * 2021/04/15     jiawj         v1.0.0               创建
 */
@Component
public class UnDoneAppointmentPushJob {
    private static final Logger logger = LoggerFactory.getLogger(UnDoneAppointmentPushJob.class);

    @Autowired
    private OrderAppointmentService orderAppointmentService;
    @Resource
    private ParkingListQueryService parkingListQueryService;

    @XxlJob(value = "UnDoneAppointmentPushJob")
    public ReturnT<String> execute(String... arg0) throws Exception {
        //获取车场爽约车辆数据
        UnDoneOrderAppointmentRequest request = new UnDoneOrderAppointmentRequest();
        //查询爽约未推送的预约车数据
        request.setAppointmentState(AppointmentStateEnum.undone_appointment.value());
        // 0 未推送
        request.setPushState(AppointmentPushStateEnum.PUSH_STATE_UN_PUSH.value());
        request.setSysCode("1001");
        BizResult<Boolean> bizResult = new BizResult<>();
        bizResult.setData(false);
        // 获取爽约未推送的数据
        BizResult<List<UnDoneOrderAppointmentDTO>> rsList = orderAppointmentService.queryUnDoneAppointment(request);
        if (rsList.getData() != null) {
            this.logger("待处理数据条目数=" + Optional.ofNullable(rsList.getData()).map(List::size).orElse(0));
            for (UnDoneOrderAppointmentDTO unDoneOrderAppointmentDTO : rsList.getData()) {
                this.logger("待处理数据信息=" + JSONObject.toJSONString(unDoneOrderAppointmentDTO));
                List<String> orderIdList = new ArrayList<>();
                String orderIds = unDoneOrderAppointmentDTO.getOrderIds();
                if (!StringUtils.isBlank(orderIds)) {
                    String[] orderIdArr = orderIds.split(",");
                    orderIdList = Arrays.asList(orderIdArr);
                }
                //获取该停车场信息
                ParkingLotDTO parkingLotDTO = ParkingLotCacheUtil.getParkLotByPlNo(unDoneOrderAppointmentDTO.getPlNo());
                Integer sourceType = (parkingLotDTO == null) ? null : parkingLotDTO.getSourceType();
                if (null != sourceType && sourceType.equals(SourceTypeEnum.CLOUD_BILL.getValue())) {
                    ViewFreeBerthEnclosedRequest viewFreeBerthEnclosedRequest = new ViewFreeBerthEnclosedRequest();
                    viewFreeBerthEnclosedRequest.setPlNo(parkingLotDTO.getPlNo());
                    viewFreeBerthEnclosedRequest.setSysCode("1001");
                    // 获取当前停车场剩余泊位数
                    BizResult<Integer> freeBerthResult = parkingListQueryService.viewFreeBerthEnclosed(viewFreeBerthEnclosedRequest);
                    int freeBerth = freeBerthResult.getData();
                    freeBerth = freeBerth + unDoneOrderAppointmentDTO.getNum();
                    UpdateFreeBerthEnclosedRequest updateFreeBerthEnclosedRequest = new UpdateFreeBerthEnclosedRequest();
                    updateFreeBerthEnclosedRequest.setFreeBerth(freeBerth);
                    updateFreeBerthEnclosedRequest.setPlNo(parkingLotDTO.getPlNo());
                    updateFreeBerthEnclosedRequest.setSysCode("1001");
                    parkingListQueryService.updateFreeBerthEnclosed(updateFreeBerthEnclosedRequest);
                    this.logger("停车场" + parkingLotDTO.getPlNo() + "剩余泊位数修改为" + freeBerth + "个");

                }
                // 所有停车场数据改成已推送
                UnDoneOrderAppointmentRequest unDoneOrderAppointmentRequest = new UnDoneOrderAppointmentRequest();
                unDoneOrderAppointmentRequest.setSysCode("1001");
                unDoneOrderAppointmentRequest.setPushState(1);
                unDoneOrderAppointmentRequest.setOrderIds(orderIdList);
                orderAppointmentService.updateOrderAppointmentPushState(unDoneOrderAppointmentRequest);
            }
        }

        return ReturnT.SUCCESS;
    }


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

}