package com.hzs.report.member.controller.manage;/**
 * @Description:
 * @Author: yuhui
 * @Time: 2024/5/14 10:24
 * @Classname: OrderSingleItemStatController
 * @PackageName: com.hzs.report.member.controller.manage
 */

import com.hzs.common.core.utils.DateUtils;
import com.hzs.common.core.utils.StringUtils;
import com.hzs.common.core.utils.poi.ExcelUtil;
import com.hzs.common.core.web.controller.BaseController;
import com.hzs.common.core.web.domain.AjaxResult;
import com.hzs.common.core.web.page.PageDomain;
import com.hzs.common.core.web.page.TableDataInfo;
import com.hzs.common.core.web.page.TableSupport;
import com.hzs.sale.order.ISaOrderServiceApi;
import com.hzs.sale.order.dto.SingleItemStatDTO;
import com.hzs.sale.order.dto.SingleItemStatParamDTO;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletResponse;
import java.util.*;

/**
 * @BelongsProject: hzs_cloud
 * @BelongsPackage: com.hzs.report.member.controller.manage
 * @Author: yh   订单单品统计
 * @CreateTime: 2024-05-14  10:24
 * @Description: TODO
 * @Version: 1.0
 */
@RequestMapping("/manager/order-single-item")
@RestController
public class OrderSingleItemStatController extends BaseController {

    @DubboReference
    private ISaOrderServiceApi orderServiceApi;


    /**
     * 订单单品统计(作废)
     * TODO 前端修改完删除该接口
     */
    @GetMapping("single-item-stat")
    public TableDataInfo singleItemStat(SingleItemStatParamDTO singleItemStatParamDTO) {
        if (StringUtils.isBlank(singleItemStatParamDTO.getSkuCode())
        && StringUtils.isBlank(singleItemStatParamDTO.getProductName())
        && singleItemStatParamDTO.getOrderType() == null
        && singleItemStatParamDTO.getStartPayDate() == null
        &&  singleItemStatParamDTO.getEndPayDate() == null
        ){
            return getDataTable(new ArrayList<>());
        }
        // 订单单品统计
        if (singleItemStatParamDTO.getStartPayDate() != null) {
            singleItemStatParamDTO.setStartPayDate(DateUtils.getStartTime(singleItemStatParamDTO.getStartPayDate()));
        }
        if (singleItemStatParamDTO.getEndPayDate() != null) {
            singleItemStatParamDTO.setEndPayDate(DateUtils.getEndTime(singleItemStatParamDTO.getEndPayDate()));
        }
        startPage();
        PageDomain pageDomain = TableSupport.buildPageRequest();
        Integer pageNum = pageDomain.getPageNum();
        Integer pageSize = pageDomain.getPageSize();
        List<SingleItemStatDTO> singleItemStatList = orderServiceApi.singleItemStat(singleItemStatParamDTO);
        Map<String, SingleItemStatDTO> resultMap = new HashMap<>();
        for (SingleItemStatDTO singleItemStat : singleItemStatList) {
            // Integer type = singleItemStat.getType();
            if (singleItemStat.getPayTime() != null) {
                String payTime = DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD, singleItemStat.getPayTime());
                SingleItemStatDTO singleItemStatDTO = resultMap.get(payTime);
                if (singleItemStatDTO == null) {

                    singleItemStatDTO = new SingleItemStatDTO();
                    if (singleItemStat.getType() != null) {
                        if (singleItemStat.getType().equals(1)) {
                            singleItemStatDTO.setWaresQuantity(singleItemStat.getWaresQuantity());
                            singleItemStatDTO.setPayTime(singleItemStat.getPayTime());
                        } else if (singleItemStat.getType().equals(2)) {
                            singleItemStatDTO.setProductQuantity(singleItemStat.getProductQuantity());
                            singleItemStatDTO.setPayTime(singleItemStat.getPayTime());
                        } else if (singleItemStat.getType().equals(3)) {
                            singleItemStatDTO.setGiftQuantity(singleItemStat.getGiftQuantity());
                            singleItemStatDTO.setPayTime(singleItemStat.getPayTime());
                        }
                    }

                    resultMap.put(payTime, singleItemStatDTO);
                } else {
                    if (singleItemStat.getType() != null) {
                        if (singleItemStat.getType().equals(1)) {
                            singleItemStatDTO.setWaresQuantity(singleItemStat.getWaresQuantity());
                            singleItemStatDTO.setPayTime(singleItemStat.getPayTime());
                        } else if (singleItemStat.getType().equals(2)) {
                            singleItemStatDTO.setProductQuantity(singleItemStat.getProductQuantity());
                            singleItemStatDTO.setPayTime(singleItemStat.getPayTime());
                        } else if (singleItemStat.getType().equals(3)) {
                            singleItemStatDTO.setGiftQuantity(singleItemStat.getGiftQuantity());
                            singleItemStatDTO.setPayTime(singleItemStat.getPayTime());
                        }
                    }

                }
            }


        }
        List<SingleItemStatDTO> resultList = new ArrayList<>();
        for (Map.Entry<String, SingleItemStatDTO> stringSingleItemStatDTOEntry : resultMap.entrySet()) {
            if (stringSingleItemStatDTOEntry.getValue().getGiftQuantity() == null) {
                stringSingleItemStatDTOEntry.getValue().setGiftQuantity(0);
            }
            if (stringSingleItemStatDTOEntry.getValue().getProductQuantity() == null) {
                stringSingleItemStatDTOEntry.getValue().setProductQuantity(0);
            }
            if (stringSingleItemStatDTOEntry.getValue().getWaresQuantity() == null) {
                stringSingleItemStatDTOEntry.getValue().setWaresQuantity(0);
            }
            Integer total = stringSingleItemStatDTOEntry.getValue().getGiftQuantity() + stringSingleItemStatDTOEntry.getValue().getProductQuantity();
            // 计算总计
            stringSingleItemStatDTOEntry.getValue().setTotal(total);
            resultList.add(stringSingleItemStatDTOEntry.getValue());
        }
        return getDataTable(resultList);
    }

    /**
     * 订单单品统计导出(作废)
     * TODO 前端修改完删除该接口
     */
    @PostMapping("single-item-stat-export")
    public void singleItemStatExport(SingleItemStatParamDTO singleItemStatParamDTO, HttpServletResponse response) {
        if (StringUtils.isBlank(singleItemStatParamDTO.getSkuCode())
                && StringUtils.isBlank(singleItemStatParamDTO.getProductName())
                && singleItemStatParamDTO.getOrderType() == null
                && singleItemStatParamDTO.getStartPayDate() == null
                && singleItemStatParamDTO.getEndPayDate() == null
        ){
            ExcelUtil<SingleItemStatDTO> util = new ExcelUtil<>(SingleItemStatDTO.class);
            util.exportExcel(response, new ArrayList<>(), "订单单品统计导出");
        }
        // 订单单品统计
        if (singleItemStatParamDTO.getStartPayDate() != null) {
            singleItemStatParamDTO.setStartPayDate(DateUtils.getStartTime(singleItemStatParamDTO.getStartPayDate()));
        }
        if (singleItemStatParamDTO.getEndPayDate() != null) {
            singleItemStatParamDTO.setEndPayDate(DateUtils.getEndTime(singleItemStatParamDTO.getEndPayDate()));
        }
        List<SingleItemStatDTO> singleItemStatList = orderServiceApi.singleItemStat(singleItemStatParamDTO);
        Map<String, SingleItemStatDTO> resultMap = new HashMap<>();
        for (SingleItemStatDTO singleItemStat : singleItemStatList) {
            // Integer type = singleItemStat.getType();
            if (singleItemStat.getPayTime() != null) {
                String payTime = DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD, singleItemStat.getPayTime());
                SingleItemStatDTO singleItemStatDTO = resultMap.get(payTime);
                if (singleItemStatDTO == null) {

                    singleItemStatDTO = new SingleItemStatDTO();
                    if (singleItemStat.getType() != null) {
                        if (singleItemStat.getType().equals(1)) {
                            singleItemStatDTO.setWaresQuantity(singleItemStat.getWaresQuantity());
                            singleItemStatDTO.setPayTime(singleItemStat.getPayTime());
                        } else if (singleItemStat.getType().equals(2)) {
                            singleItemStatDTO.setProductQuantity(singleItemStat.getProductQuantity());
                            singleItemStatDTO.setPayTime(singleItemStat.getPayTime());
                        } else if (singleItemStat.getType().equals(3)) {
                            singleItemStatDTO.setGiftQuantity(singleItemStat.getGiftQuantity());
                            singleItemStatDTO.setPayTime(singleItemStat.getPayTime());
                        }
                    }

                    resultMap.put(payTime, singleItemStatDTO);
                } else {
                    if (singleItemStat.getType() != null) {
                        if (singleItemStat.getType().equals(1)) {
                            singleItemStatDTO.setWaresQuantity(singleItemStat.getWaresQuantity());
                            singleItemStatDTO.setPayTime(singleItemStat.getPayTime());
                        } else if (singleItemStat.getType().equals(2)) {
                            singleItemStatDTO.setProductQuantity(singleItemStat.getProductQuantity());
                            singleItemStatDTO.setPayTime(singleItemStat.getPayTime());
                        } else if (singleItemStat.getType().equals(3)) {
                            singleItemStatDTO.setGiftQuantity(singleItemStat.getGiftQuantity());
                            singleItemStatDTO.setPayTime(singleItemStat.getPayTime());
                        }
                    }

                }
            }


        }
        List<SingleItemStatDTO> resultList = new ArrayList<>();
        for (Map.Entry<String, SingleItemStatDTO> stringSingleItemStatDTOEntry : resultMap.entrySet()) {
            if (stringSingleItemStatDTOEntry.getValue().getGiftQuantity() == null) {
                stringSingleItemStatDTOEntry.getValue().setGiftQuantity(0);
            }
            if (stringSingleItemStatDTOEntry.getValue().getProductQuantity() == null) {
                stringSingleItemStatDTOEntry.getValue().setProductQuantity(0);
            }
            Integer total = stringSingleItemStatDTOEntry.getValue().getGiftQuantity() + stringSingleItemStatDTOEntry.getValue().getProductQuantity();
            // 计算总计
            stringSingleItemStatDTOEntry.getValue().setTotal(total);
            resultList.add(stringSingleItemStatDTOEntry.getValue());
        }
        // 计算合计
        SingleItemStatDTO dto = new SingleItemStatDTO();
        // 赠送数量
        Integer giftQuantity = 0;
        // 商品数量
        Integer waresQuantity = 0;
        // 产品数量
        Integer productQuantity = 0;
        // 总计
        Integer total = 0;
        for (SingleItemStatDTO singleItemStatDTO : resultList) {
            giftQuantity = giftQuantity + singleItemStatDTO.getGiftQuantity();
            if (singleItemStatDTO.getWaresQuantity() != null) {
                waresQuantity = waresQuantity + singleItemStatDTO.getWaresQuantity();
            }

            productQuantity = productQuantity + singleItemStatDTO.getProductQuantity();
            total =  total + singleItemStatDTO.getTotal();
        }
        dto.setTotal(total);
        dto.setProductQuantity(productQuantity);
        dto.setWaresQuantity(waresQuantity);
        dto.setGiftQuantity(giftQuantity);
        resultList.add(dto);
        ExcelUtil<SingleItemStatDTO> util = new ExcelUtil<>(SingleItemStatDTO.class);
        util.exportExcel(response, resultList, "订单单品统计导出");
    }
}
