//package com.gree.mall.manager.logic.tax;
//
//import com.alibaba.fastjson.JSON;
//import com.alibaba.fastjson.JSONObject;
//import com.alibaba.fastjson.TypeReference;
//import com.gree.mall.manager.bean.tax.*;
//import com.gree.mall.manager.commonmapper.TaxMapper;
//import com.gree.mall.manager.constant.Constant;
//import com.gree.mall.manager.exception.RemoteServiceException;
//import com.gree.mall.manager.plus.entity.*;
//import com.gree.mall.manager.plus.service.OrderDetailService;
//import com.gree.mall.manager.plus.service.OrderInfoService;
//import com.gree.mall.manager.plus.service.OrderTaxService;
//import com.gree.mall.manager.utils.HttpUtils;
//import com.gree.mall.manager.utils.RedisUtil;
//import com.gree.mall.manager.utils.email.EmailUtils;
//import lombok.extern.slf4j.Slf4j;
//import org.apache.commons.lang3.StringUtils;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.beans.factory.annotation.Value;
//import org.springframework.stereotype.Service;
//
//import java.math.BigDecimal;
//import java.math.MathContext;
//import java.math.RoundingMode;
//import java.util.ArrayList;
//import java.util.HashMap;
//import java.util.List;
//import java.util.Map;
//
//@Service
//@Slf4j
//public class    TaxLogic {
//    @Value("${tax.token.appid}")
//    private String clientId;
//    @Value("${tax.token.appSecret}")
//    private String clientSecret;
//    @Value("${tax.token.url}")
//    private String taxTokenUrl;
//    @Value("${tax.invoice.url}")
//    private String taxUrl;
//    @Autowired
//    private OrderInfoService orderInfoService;
//    @Autowired
//    private OrderTaxService orderTaxService;
//    @Autowired
//    private TaxMapper taxMapper;
//    @Autowired
//    private OrderDetailService orderDetailService;
//    private final String KPY = "李家丽";
//    private final String SKY = "陈惠明";
//    private final String FHR = "罗年欢";
//    @Autowired
//    RedisUtil redisUtil;
//
//    public String getTaxToken() throws RemoteServiceException {
//        Object token = redisUtil.get(Constant.RedisPrefix.TOKEN_TAX);
//
//        if (token != null) {
//            return token.toString();
//        }
//        //过期就重新获取
//        return this.deleteAndAddWxToken();
//    }
//
//    public String deleteAndAddWxToken() throws RemoteServiceException {
//        HashMap<String, String> params = new HashMap();
//        params.put("clientId", this.clientId);
//        params.put("clientSecret", this.clientSecret);
//        String content = HttpUtils.requestGet(taxTokenUrl, params, null);
//        Map<String, Object> resMap = JSON.parseObject(content, new TypeReference<HashMap<String, Object>>() {
//        });
//
//        int code = (int) resMap.get("code");
//        if (code == 1) {
//            String token = (String) resMap.get("data");
//            redisUtil.set(Constant.RedisPrefix.TOKEN_TAX, token, 2 * 60 * 60);//2小时过期
//            return token;
//        }
//        return null;
//    }
////
////    public TaxTitleItem title(String companyName) throws RemoteServiceException {
////        HashMap<String, String> params = new HashMap();
////        HashMap<String, String> heads = new HashMap();
////        heads.put("authorization_token", getTaxToken());
////        params.put("companyName", companyName);
////        String content = HttpUtils.requestGet(taxTitleUrl, params, heads);
////        TaxTitleBean taxTitleBean = JSON.parseObject(content, new TypeReference<TaxTitleBean>() {
////        });
////
////        int code = taxTitleBean.getCode();
////        if (code == 1 && taxTitleBean.getData().size() > 0) {
////            return taxTitleBean.getData().get(0);
////        }
////        return null;
////    }
//
//    public BaseBean generateTaxData(String orderId) {
//        OrderTax orderTax = orderTaxService.lambdaQuery()
//                .eq(OrderTax::getOrderId, orderId)
//                .one();
//        if (orderTax == null) {
//            return null;
//        }
//        //专票
//        if (orderTax.getTaxType()) {
//            return null;
//        }
//        String title =  orderTax.getName();
//        if (orderTax.getType()) {
//            title = orderTax.getName();
//        }
//        List<OrderDetail> orderDetailList = orderDetailService.lambdaQuery()
//                .eq(OrderDetail::getOrderId, orderId)
//                .list();
//
//        OrderInfo orderInfo = orderInfoService.getById(orderId);
//        BaseBean baseBean = new BaseBean();
//        Content content = new Content();
//        TaxPayerInfo taxPayerInfo = new TaxPayerInfo();
//        List<TaxDetail> taxDetails = new ArrayList<>();
//
//        for (OrderDetail orderDetail : orderDetailList) {
//            TaxDetail taxDetail = new TaxDetail();
//            GoodsCategory goodsCategory = taxMapper.queryTaxById(orderDetail.getOrderDetailId());
//            if (goodsCategory == null) {
//                return null;
//            }
//            if(goodsCategory.getTaxPercent() == null){
//                continue;
//            }
//            taxDetail.setSl(goodsCategory.getTaxPercent().doubleValue());
//            taxDetail.setHsbz("1");
//            taxDetail.setFphxz("0");
//            taxDetail.setSpbm(goodsCategory.getTaxNumber());
//            taxDetail.setXmmc(orderDetail.getGoodsName().length()<50?
//                    orderDetail.getGoodsName():orderDetail.getGoodsName().substring(0,50));
//            taxDetail.setXmsl(orderDetail.getNum().doubleValue());
//            taxDetail.setYhzcbs("0");
//            taxDetail.setXmje((orderDetail.getPayAmount().add(orderDetail.getFreight())).doubleValue());
////            BigDecimal alpha = new BigDecimal(taxDetail.getSl());
////            BigDecimal beta = new BigDecimal(taxDetail.getSl()).add(new BigDecimal("1.00"));
////            taxDetail.setSe(orderDetail.getPayAmount()
////                    .multiply(alpha.divide(beta, 2, RoundingMode.HALF_UP), new MathContext(2, RoundingMode.HALF_UP))
////                    .doubleValue());
//            taxDetail.setXmmc(taxDetail.getXmmc().replaceAll(" ",""));
//            taxDetails.add(taxDetail);
//        }
//
//        taxPayerInfo.setKpxm(orderInfo.getOrderTitle().length()<50?
//                orderInfo.getOrderTitle():orderInfo.getOrderTitle().substring(0,50));
//        taxPayerInfo.setGhfmc(title);
////        if(StringUtils.isNotBlank(orderTax.getReceiverEmail())){
////            taxPayerInfo.setBillSentSign("1");
////            taxPayerInfo.setGhf_email(orderTax.getReceiverEmail());
////        }else{
////        }
//        taxPayerInfo.setBillSentSign("0");
//        taxPayerInfo.setDkbz("0");
//        taxPayerInfo.setKplx("1");
//        taxPayerInfo.setQd_bz("0");
//        taxPayerInfo.setKpy(KPY);
//        taxPayerInfo.setSky(SKY);
//        taxPayerInfo.setFhr(FHR);
//
////        taxPayerInfo.setXhfmc("航信培训企业");
////        taxPayerInfo.setKpy("张会计");
//        if (!orderTax.getType()) {//个人发票
//            taxPayerInfo.setGhfqylx("03");
//        } else {
//            taxPayerInfo.setGhfqylx("01");
//            taxPayerInfo.setGhf_nsrsbh(orderTax.getTaxNo().trim());
//        }
//        content.setFptxx(taxPayerInfo);
//        content.setXmxx(taxDetails);
//        baseBean.setKpContent(content);
//        return baseBean;
//    }
//
//    public void taxHttp(String orderId) {
//        BaseBean baseBean = generateTaxData(orderId);
//        if (baseBean == null) {
//            return;
//        }
//        HashMap<String, String> heads = new HashMap();
//        try {
//            String token = getTaxToken();
//            if (StringUtils.isBlank(token)) {
//                return;
//            }
//            heads.put("authorization_token", token);
//        } catch (RemoteServiceException e) {
//            return;
//        }
//        String content = null;
//        try {
//            content = HttpUtils.requestPostBody(taxUrl, JSON.toJSONString(baseBean), heads);
//        } catch (RemoteServiceException e) {
//            return;
//        }
//
//        Map<String, Object> resMap = JSON.parseObject(content, new TypeReference<HashMap<String, Object>>() {
//        });
//
//        int code = (int) resMap.get("code");
//        if (code == 1) {
//            String pdfUrl = "" + resMap.get("data");
//            if (StringUtils.isBlank(pdfUrl)) {
//                return;
//            }
//            orderTaxService.lambdaUpdate()
//                    .eq(OrderTax::getOrderId, orderId)
//                    .set(OrderTax::getStatus, true)
//                    .set(OrderTax::getTaxType, false)
//                    .set(OrderTax::getTaxLink, pdfUrl)
//                    .update();
////            new EmailUtils().sendMail();
//        }
//
//
//    }
//
//
//}
