package com.fs.store.controller;

import com.alibaba.fastjson.JSONObject;
import com.fs.common.core.controller.BaseController;
import com.fs.common.core.domain.AjaxResult;
import com.fs.common.core.domain.R;
import com.fs.common.utils.StringUtils;
import com.fs.common.utils.TimeUtils;
import com.fs.common.utils.poi.ExcelUtil;
import com.fs.company.domain.CompanyUser;
import com.fs.company.service.ICompanyUserService;
import com.fs.core.web.service.TokenService;
import com.fs.store.vo.FsStoreOrderStatisticsVO;
import com.fs.store.param.FsStoreStatisticsParam;
import com.fs.store.service.IFsStoreOrderService;
import com.fs.store.service.IFsStorePaymentService;
import com.fs.store.vo.FsStorePaymentStatisticsVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

/**
 * 统计
 *
 * @author fs
 * @date 2021-03-22
 */
@RestController
@RequestMapping("/store/statistics")
public class FsStoreStatisticsController extends BaseController
{

    @Autowired
    private ICompanyUserService userService;

    @Autowired
    private IFsStoreOrderService storeOrderService;
    @Autowired
    private IFsStorePaymentService storePaymentService;
    @Autowired
    private TokenService tokenService;
    @PreAuthorize("@ss.hasPermi('store:statistics:storeOrder')")
    @GetMapping("/storeOrder")
    public R storeOrder(FsStoreStatisticsParam param)
    {
        if(StringUtils.isNotEmpty(param.getUserIds())){
            String[] userIds=param.getUserIds().split(",");
            Long[] ids=new Long[userIds.length];
            for(int i=0;i<ids.length; i++){
                ids[i]=Long.parseLong(userIds[i]);
            }
            param.setUsers(ids);
        }
        else{
            //获取部门下的所有用户
            CompanyUser usermap=new CompanyUser();
            usermap.setDeptId(param.getDeptId());
            List<CompanyUser> users = userService.getUserListByDeptId(usermap);
            List<Long> userIds = users.stream().map(element -> element.getUserId()).collect(Collectors.toList());
            param.setUsers(userIds.toArray(new Long[userIds.size()]));
        }
        if(param.getUsers()!=null&&param.getUsers().length>0){
            List<FsStoreOrderStatisticsVO> list= storeOrderService.selectFsStoreOrderStatisticsList(param);

            TimeUtils.TimeEntity timeEntity=TimeUtils.parseTime(param.getType().toString(),param.getStartTime(),param.getEndTime());
            timeEntity.setUserIds(param.getUsers());
            Integer cycleNum = timeEntity.getCycleNum();
            Integer beginTime = timeEntity.getBeginTime();
            List<Integer> timeList = new ArrayList<>();
            for (int i = 1; i <= cycleNum; i++) {
                timeList.add(beginTime);
                beginTime = TimeUtils.formatTime(beginTime);
            }
            List<JSONObject> jsonObjectList = storeOrderService.selectFsStoreOrderCounts(timeEntity.toMap());
            List<String> dates = jsonObjectList.stream().map(jsonObject -> jsonObject.getString("type")).collect(Collectors.toList());
            List<Integer> orderCount = jsonObjectList.stream().map(jsonObject -> jsonObject.getInteger("orderCount")).collect(Collectors.toList());
            List<Integer> payPrice = jsonObjectList.stream().map(jsonObject -> jsonObject.getInteger("payPrice")).collect(Collectors.toList());
            return R.ok().put("list",list).put("dates",dates).put("orderCount",orderCount).put("payPrice",payPrice);
        }
        else {
            return R.ok("未查找到数据");
        }
    }
    @PreAuthorize("@ss.hasPermi('store:statistics:exportStoreOrder')")
    @GetMapping("/exportStoreOrder")
    public AjaxResult exportStoreOrder(FsStoreStatisticsParam param)
    {
        if(StringUtils.isNotEmpty(param.getUserIds())){
            String[] userIds=param.getUserIds().split(",");
            Long[] ids=new Long[userIds.length];
            for(int i=0;i<ids.length; i++){
                ids[i]=Long.parseLong(userIds[i]);
            }
            param.setUsers(ids);
        }
        else{
            //获取所有员工
            CompanyUser usermap=new CompanyUser();
            usermap.setDeptId(param.getDeptId());
            List<CompanyUser> users = userService.getUserListByDeptId(usermap);
            List<Long> userIds = users.stream().map(element -> element.getUserId()).collect(Collectors.toList());
            param.setUsers(userIds.toArray(new Long[userIds.size()]));
        }

        List<FsStoreOrderStatisticsVO> list= storeOrderService.selectFsStoreOrderStatisticsList(param);

        ExcelUtil<FsStoreOrderStatisticsVO> util = new ExcelUtil<FsStoreOrderStatisticsVO>(FsStoreOrderStatisticsVO.class);
        return util.exportExcel(list, "orderLogs");
    }


    @PreAuthorize("@ss.hasPermi('store:statistics:storePayment')")
    @GetMapping("/storePayment")
    public R storePayment(FsStoreStatisticsParam param)
    {
        if(StringUtils.isNotEmpty(param.getUserIds())){
            String[] userIds=param.getUserIds().split(",");
            Long[] ids=new Long[userIds.length];
            for(int i=0;i<ids.length; i++){
                ids[i]=Long.parseLong(userIds[i]);
            }
            param.setUsers(ids);
        }
        else{
            //获取部门下的所有用户
            CompanyUser usermap=new CompanyUser();
            usermap.setDeptId(param.getDeptId());
            List<CompanyUser> users = userService.getUserListByDeptId(usermap);
            List<Long> userIds = users.stream().map(element -> element.getUserId()).collect(Collectors.toList());
            param.setUsers(userIds.toArray(new Long[userIds.size()]));
        }
        if(param.getUsers()!=null&&param.getUsers().length>0){
            List<FsStorePaymentStatisticsVO> list= storePaymentService.selectFsStorePaymentStatisticsList(param);
            TimeUtils.TimeEntity timeEntity=TimeUtils.parseTime(param.getType().toString(),param.getStartTime(),param.getEndTime());
            timeEntity.setUserIds(param.getUsers());
            Integer cycleNum = timeEntity.getCycleNum();
            Integer beginTime = timeEntity.getBeginTime();
            List<Integer> timeList = new ArrayList<>();
            for (int i = 1; i <= cycleNum; i++) {
                timeList.add(beginTime);
                beginTime = TimeUtils.formatTime(beginTime);
            }
            List<JSONObject> jsonObjectList = storePaymentService.selectFsStorePaymentCounts(timeEntity.toMap());
            List<String> dates = jsonObjectList.stream().map(jsonObject -> jsonObject.getString("type")).collect(Collectors.toList());
            List<Integer> orderCount = jsonObjectList.stream().map(jsonObject -> jsonObject.getInteger("orderCount")).collect(Collectors.toList());
            List<Integer> payMoney = jsonObjectList.stream().map(jsonObject -> jsonObject.getInteger("payMoney")).collect(Collectors.toList());
            return R.ok().put("list",list).put("dates",dates).put("orderCount",orderCount).put("payMoney",payMoney);
        }
        else {
            return R.ok("未查找到数据");
        }
    }
    @PreAuthorize("@ss.hasPermi('store:statistics:exportStorePayment')")
    @GetMapping("/exportStorePayment")
    public AjaxResult exportStorePayment(FsStoreStatisticsParam param)
    {
        if(StringUtils.isNotEmpty(param.getUserIds())){
            String[] userIds=param.getUserIds().split(",");
            Long[] ids=new Long[userIds.length];
            for(int i=0;i<ids.length; i++){
                ids[i]=Long.parseLong(userIds[i]);
            }
            param.setUsers(ids);
        }
        else{
            //获取所有员工
            CompanyUser usermap=new CompanyUser();
            usermap.setDeptId(param.getDeptId());
            List<CompanyUser> users = userService.getUserListByDeptId(usermap);
            List<Long> userIds = users.stream().map(element -> element.getUserId()).collect(Collectors.toList());
            param.setUsers(userIds.toArray(new Long[userIds.size()]));
        }

        List<FsStorePaymentStatisticsVO> list= storePaymentService.selectFsStorePaymentStatisticsList(param);

        ExcelUtil<FsStorePaymentStatisticsVO> util = new ExcelUtil<FsStorePaymentStatisticsVO>(FsStorePaymentStatisticsVO.class);
        return util.exportExcel(list, "paymentLogs");
    }




}
