package com.order.controller.notify;

import com.alibaba.fastjson.JSONObject;
import com.hfkj.common.utils.AESTool;
import com.hfkj.common.utils.DateUtil;
import com.hfkj.common.utils.MD5Util;
import com.hfkj.config.CommonSysConst;
import com.hfkj.entity.BsOrderCoupon;
import com.hfkj.entity.BsOrderCouponNo;
import com.hfkj.service.coupon.BsOrderCouponNoService;
import com.hfkj.service.coupon.channel.ChongQingCNPCCouponService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

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

@Controller
@RequestMapping(value = "/cqNotify")
@Api(value = "重庆业务通知")
public class CqNotifyController {

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

    @Resource
    private BsOrderCouponNoService orderCouponNoService;

    @RequestMapping(value = "/cqCnpcNotify", method = RequestMethod.POST)
    @ResponseBody
    @ApiOperation(value = "重庆中石油通知")
    public Object cqCnpcNotify(@RequestBody String paramsStr) {
        System.out.println(paramsStr);
        log.info("重庆中石油核销通知");
        log.info("通知参数：" + paramsStr);
        try {
            if (StringUtils.isNotBlank(paramsStr)) {

                JSONObject sendMessage = JSONObject.parseObject(paramsStr).getJSONObject("sendMessage");
                JSONObject body = ChongQingCNPCCouponService.decryptBody(sendMessage.getString("body"));

                // 查询卡密
                BsOrderCouponNo coupon = orderCouponNoService.getDetailByCouNo(body.getString("couponNo"));
                if (coupon != null) {
                    coupon.setFinishTime(DateUtil.format(body.getString("useTime"), "yyyyMMddHHmmss"));
                    coupon.setStatus(40);
                    orderCouponNoService.editData(coupon);
                }

                Map<String, Object> param = new HashMap<>();
                param.put("status", 1);
                param.put("msg", "成功");
                String verifyCode = AESTool.Encrypt(JSONObject.toJSONString(param), CommonSysConst.getSysConfig().getChongQingCnpcMerKey());

                Map<String, Object> returnContent = new HashMap<>();
                Map<String, Object> returnPostMessage = new HashMap<>();

                Map<String, Object> returnHead = new HashMap<>();
                returnHead.put("verifyCode", MD5Util.encode((verifyCode + CommonSysConst.getSysConfig().getChongQingCnpcMerKey()).getBytes()).toLowerCase());
                returnHead.put("requestType", "couponNotice");
                returnPostMessage.put("head", returnHead);

                returnPostMessage.put("body", verifyCode);
                returnContent.put("postMessage", returnPostMessage);
                return returnContent;
            } else {
                Map<String, Object> param = new HashMap<>();
                param.put("status", 0);
                param.put("msg", "解析参数错误");
                String verifyCode = AESTool.Encrypt(JSONObject.toJSONString(param), CommonSysConst.getSysConfig().getChongQingCnpcMerKey());

                Map<String, Object> returnContent = new HashMap<>();
                Map<String, Object> returnPostMessage = new HashMap<>();

                Map<String, Object> returnHead = new HashMap<>();
                returnHead.put("verifyCode", MD5Util.encode((verifyCode + CommonSysConst.getSysConfig().getChongQingCnpcMerKey()).getBytes()).toLowerCase());
                returnHead.put("requestType", "couponNotice");
                returnPostMessage.put("head", returnHead);

                returnPostMessage.put("body", verifyCode);
                returnContent.put("postMessage", returnPostMessage);
                return returnContent;
            }
        } catch (Exception e) {
            log.info("重庆中石油核销通知业务出现异常", e);
            return null;
            // return ResponseMsgUtil.exception(e);
        }
    }

}
