package com.liquidnet.service.platform.controller.A_fskfsfs;


import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.liquidnet.commons.lang.util.DateUtil;
import com.liquidnet.commons.lang.util.IDGenerator;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.kylin.dto.param.PerformancePartnerVo;
import com.liquidnet.service.kylin.dto.vo.partner.KylinTicketPartnerVo;
import com.liquidnet.service.kylin.dto.vo.partner.KylinTicketTimesPartnerVo;
import com.liquidnet.service.kylin.entity.KylinTicketRelations;
import com.liquidnet.service.kylin.entity.KylinTicketStatus;
import com.liquidnet.service.kylin.entity.KylinTickets;
import com.liquidnet.service.kylin.mapper.KylinTicketRelationsMapper;
import com.liquidnet.service.kylin.mapper.KylinTicketStatusMapper;
import com.liquidnet.service.kylin.mapper.KylinTicketsMapper;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.util.List;

/**
 * 临时数据处理
 *
 * @author jiangxiulong
 */
@Api(tags = "临时数据处理")
@RestController
@RequestMapping("fskfsfs")
@Slf4j
public class JxlDataPerformancesController {

    @Autowired
    private KylinTicketRelationsMapper ticketRelationsMapper;
    @Autowired
    private KylinTicketStatusMapper ticketStatusMapper;
    @Autowired
    private KylinTicketsMapper ticketsMapper;
    @Autowired
    private MongoTemplate mongoTemplate;

    @GetMapping("P001")
    @ApiOperation("演出审核后丢失数据报错")
    @ApiImplicitParams({
            @ApiImplicitParam(type = "query", dataType = "String", name = "performancesId", value = "演出id", required = true),
    })
    public ResponseDto P001(
            @RequestParam("performancesId") String performancesId
    ) {
        try {
            List<KylinTicketTimesPartnerVo> voTimes = mongoTemplate.find(Query.query(Criteria.where("performancesId").is(performancesId)),
                    KylinTicketTimesPartnerVo.class, KylinTicketTimesPartnerVo.class.getSimpleName());
            for (KylinTicketTimesPartnerVo voTime : voTimes) {
                List<KylinTicketPartnerVo> timesIdVo = mongoTemplate.find(Query.query(
                                Criteria.where("timesId").is(voTime.getTicketTimesId())),
                        KylinTicketPartnerVo.class,
                        KylinTicketPartnerVo.class.getSimpleName());
                for (KylinTicketPartnerVo ticketVo : timesIdVo) {
                    PerformancePartnerVo performanceData = mongoTemplate.findOne(Query.query(Criteria.where("performancesId").is(performancesId)), PerformancePartnerVo.class, PerformancePartnerVo.class.getSimpleName());

                    KylinTickets tickets = new KylinTickets();
                    BeanUtils.copyProperties(ticketVo, tickets);
                    tickets.setPayCountdownMinute(performanceData.getPayCountdownMinute());
                    tickets.setPriceExpress(new BigDecimal("0.00"));
                    tickets.setPriceDiscountMember(new BigDecimal("0.00"));
                    tickets.setPriceDiscount(new BigDecimal("0.00"));
                    tickets.setTimeStart(DateUtil.asLocalDateTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(ticketVo.getTimeStart())));
                    tickets.setTimeEnd(DateUtil.asLocalDateTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(ticketVo.getTimeEnd())));
                    if (ticketVo.getIsExpress() == 1) {
                        tickets.setTimeEndExpress(DateUtil.asLocalDateTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(ticketVo.getTimeEndExpress())));
                        tickets.setDescribeExpress(ticketVo.getDescribeExpress());
                    }
//                    else{
//                        tickets.setTimeEndExpress(DateUtil.asLocalDateTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2030-01-01 12:00:00")));
//                    }
                    if (ticketVo.getIsElectronic() == 1) {
                        tickets.setDescribeElectronic(ticketVo.getDescribeElectronic());
                    }
                    tickets.setUseStart(DateUtil.asLocalDateTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(voTime.getUseStart())));
                    tickets.setUseEnd(DateUtil.asLocalDateTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(voTime.getUseEnd())));
                    tickets.setSaleRemindMinute(60);
                    tickets.setCreatedAt(DateUtil.asLocalDateTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(ticketVo.getCreatedAt())));
                    tickets.setUpdatedAt(DateUtil.asLocalDateTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(ticketVo.getUpdatedAt())));
                    ticketsMapper.insert(tickets);

//                    判断票中是否存在再新增
//                    判断剩余库存redis
//                    判断兑换剩余库存redis


                    LocalDateTime timeC = null;
                    LocalDateTime timeU = null;
                    try {
                        timeC = DateUtil.asLocalDateTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(ticketVo.getCreatedAt()));
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                    try {
                        timeU = DateUtil.asLocalDateTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(ticketVo.getUpdatedAt()));
                    } catch (Exception e) {
                        e.printStackTrace();
                    }

                    String ticketsId = ticketVo.getTicketsId();
                    KylinTicketRelations ticketRelations = new KylinTicketRelations();
                    BeanUtils.copyProperties(ticketVo, ticketRelations);
                    ticketRelations.setCreatedAt(timeC);
                    ticketRelations.setUpdatedAt(timeU);
                    ticketRelations.setTicketRelationsId(IDGenerator.nextSnowId());
                    ticketRelations.setTicketId(ticketsId);
                    // 场次与票种关联表
                    ticketRelationsMapper.insert(ticketRelations);

                    KylinTicketStatus ticketStatusNew = new KylinTicketStatus();
                    BeanUtils.copyProperties(ticketVo, ticketStatusNew);
                    ticketStatusNew.setTicketId(ticketsId);
                    ticketStatusNew.setStatusExchange(7);
                    if (ticketVo.getExpressType() == null) {
                        ticketStatusNew.setExpressType(0);
                    }
                    ticketStatusNew.setIsTrueName(performanceData.getIsTrueName());
                    ticketStatusNew.setMemberLimitCount(1);
                    ticketStatusNew.setCreatedAt(timeC);
                    ticketStatusNew.setUpdatedAt(timeU);
                    if (ticketVo.getIsShowCode() == 1) {
                        try {
                            ticketStatusNew.setQrCodeShowTime(DateUtil.asLocalDateTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(ticketVo.getQrCodeShowTime())));
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    }
                    KylinTicketStatus ticketStatus = ticketStatusMapper.selectOne(
                            Wrappers.lambdaQuery(KylinTicketStatus.class)
                                    .eq(KylinTicketStatus::getTicketId, ticketsId)
                    );
                    if (null == ticketStatus) {// 添加
                        ticketStatusNew.setTicketStatusId(IDGenerator.nextSnowId());
                        ticketStatusMapper.insert(ticketStatusNew);
                        System.out.println("新增---------------------------------");
                        System.out.println(ticketsId);
                        System.out.println(ticketStatusNew);
                    } else {// 编辑
                        ticketStatusMapper.update(ticketStatusNew,
                                new UpdateWrapper<KylinTicketStatus>().
                                        eq("ticket_id", ticketsId)
                        );
                        System.out.println("编辑---------------------------------");
                        System.out.println(ticketsId);
                        System.out.println(ticketStatusNew);
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

//        dataUtils.delPerformanceRedis(performancesId);
//        System.out.println(voTimes);
        return ResponseDto.success();
    }

}
