package com.hfkj.schedule;

import com.alibaba.fastjson.JSONObject;
import com.hfkj.entity.BsOrderCoupon;
import com.hfkj.entity.BsOrderCouponNo;
import com.hfkj.service.coupon.BsOrderCouponNoService;
import com.hfkj.service.coupon.BsOrderCouponService;
import com.hfkj.service.coupon.channel.HuiLianTongCouponService;
import com.hfkj.service.coupon.channel.PetroConfig;
import com.hfkj.service.hlt.HuiLianTongUnionCardService;
import com.hfkj.service.order.BsOrderChildService;
import com.hfkj.service.order.BsOrderService;
import com.hfkj.sysenum.GoodsVpdSourceEnum;
import com.hfkj.sysenum.order.OrderCouponNoStatusEnum;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.Scheduled;

import javax.annotation.Resource;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @Auther: 胡锐
 * @Description: 卡卷定时任务
 * @Date: 2021/3/27 15:39
 */
@Configuration
public class CouponSchedule {

    private static Logger log = LoggerFactory.getLogger(CouponSchedule.class);

    @Resource
    private BsOrderChildService orderChildService;
    @Resource
    private BsOrderService orderService;
    @Resource
    BsOrderCouponService orderCouponService;
    @Resource
    private BsOrderCouponNoService orderCouponNoService;

    //每日凌晨12点5秒执行一次
    @Scheduled(cron = "5 0 0 * * ?")
    public void expiredCoupon() {
        Map<String,Object> param = new HashMap<>();
        param.put("status", OrderCouponNoStatusEnum.status2.getCode());
        param.put("expireStatus", false);
        param.put("exceptionStatus", false);
        // 查询卡密
        List<BsOrderCouponNo> list = orderCouponNoService.getList(param);
        for (BsOrderCouponNo coupon : list) {
            try {
                if (coupon.getGoodsVpdSource().equals(GoodsVpdSourceEnum.type4.getCode())) {
                    // 渠道查询
                    JSONObject jsonObject = HuiLianTongCouponService.getPayOrderByCouNo(coupon.getGoodsVpdSourceCouNo());
                    if (jsonObject.getString("respCode").equals("0000")) {
                        // 解析数据
                        JSONObject data = HuiLianTongUnionCardService.resolveResponse(jsonObject.getString("data"));
                        if (data.getString("respCode").equals("0000")) {
                            JSONObject responseObject = JSONObject.parseObject(data.getString("data"));
                            if (responseObject.getInteger("state") == 40) {
                                coupon.setStatus(OrderCouponNoStatusEnum.status3.getCode());
                                coupon.setFinishTime(new Date());
                                orderCouponNoService.editData(coupon);
                            }
                        }
                    }

                } else if (coupon.getGoodsVpdSource().equals(GoodsVpdSourceEnum.type5.getCode())) {

                } else if (coupon.getGoodsVpdSource().equals(GoodsVpdSourceEnum.type7.getCode())) {

                } else if (coupon.getGoodsVpdSource().equals(GoodsVpdSourceEnum.type10.getCode())) {
                    // 查询卡券订单
                    BsOrderCoupon orderCoupon = orderCouponService.getDetail(coupon.getCouponOrderId());
                    if (orderCoupon != null) {
                        JSONObject jsonObject = PetroConfig.couponDetail(coupon.getGoodsVpdSourceCouNo(), orderCoupon.getUserPhone());
                        if (jsonObject.getString("resultCode").equals("0000")) {
                            String data = PetroConfig.decrypt(jsonObject.getString("jsonResult"));
                            JSONObject jsonData = JSONObject.parseObject(data);
                            if (jsonData.getInteger("state") == 40) {
                                coupon.setStatus(OrderCouponNoStatusEnum.status3.getCode());
                                coupon.setFinishTime(jsonData.getDate("usedTime"));
                                orderCouponNoService.editData(coupon);
                            }
                        }
                    }
                }
            } catch (Exception e) {

            }
        }
    }
}
