package com.fs.company.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.param.CompanyStatisticsParam;
import com.fs.company.param.FsStoreStatisticsParam;
import com.fs.company.service.ICompanySmsLogsService;
import com.fs.company.service.ICompanyUserService;
import com.fs.company.service.ICompanyVoiceLogsService;
import com.fs.company.vo.CompanySmsLogsStatisticsVO;
import com.fs.company.vo.CompanyVoiceLogsStatisticsVO;
import com.fs.company.vo.FsStoreOrderStatisticsVO;
import com.fs.company.vo.FsStorePaymentStatisticsVO;
import com.fs.crm.param.CrmCustomerStatisticsParam;
import com.fs.crm.service.ICrmCustomerService;
import com.fs.crm.service.ICrmCustomerVisitService;
import com.fs.crm.vo.CrmCustomerStatisticsVO;
import com.fs.crm.vo.CrmCustomerVisitStatisticsVO;
import com.fs.his.service.IFsStoreOrderService;
import com.fs.his.service.IFsStorePaymentService;
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.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

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

    @Autowired
    private ICompanyUserService userService;

    @Autowired
    private IFsStoreOrderService storeOrderService;
    @Autowired
    private IFsStorePaymentService storePaymentService;
    @Autowired
    private ICompanyVoiceLogsService voiceLogsService;
    @Autowired
    private ICompanySmsLogsService smsLogsService;


    @Autowired
    private ICrmCustomerService crmCustomerService;
    @Autowired
    private ICrmCustomerVisitService crmCustomerVisitService;
    @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("未查找到数据");
        }
    }


    @GetMapping("/packageOrder")
    public R storePackageOrder(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.selectFsPackageOrderStatisticsList(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.selectFsPackageOrderCounts(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("未查找到数据");
        }
    }


    @GetMapping("/inquiryOrder")
    public R storeInquiryOrder(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.selectFsInquiryOrderStatisticsList(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.selectFsInquiryOrderCounts(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("未查找到数据");
        }
    }




    @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");
    }

    @GetMapping("/exportPackageOrder")
    public AjaxResult exportPackageOrder(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.selectFsPackageOrderStatisticsList(param);

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


    @GetMapping("/exportInquiryOrder")
    public AjaxResult exportInquiryOrder(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.selectFsInquiryOrderStatisticsList(param);

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

    @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("未查找到数据");
        }
    }

    @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.selectCompanyUserList(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");
    }

//分割

    @GetMapping("/voiceLogs")
    public R voiceLogs(CompanyStatisticsParam 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<CompanyVoiceLogsStatisticsVO> list= voiceLogsService.selectVoiceLogsStatisticsList(param);
            if(list!=null){
                for(CompanyVoiceLogsStatisticsVO vo:list){
                    double f1 = new BigDecimal((float)vo.getCallSuccessCount()/vo.getCallCount()).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue()*100;
                    vo.setCallRate(f1);
                }
            }
            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 = voiceLogsService.selectVoiceLogsTotalCount(timeEntity.toMap());
            List<String> dates = jsonObjectList.stream().map(jsonObject -> jsonObject.getString("type")).collect(Collectors.toList());
            List<Integer> callCount = jsonObjectList.stream().map(jsonObject -> jsonObject.getInteger("callCount")).collect(Collectors.toList());
            List<Integer> callSuccessCount = jsonObjectList.stream().map(jsonObject -> jsonObject.getInteger("callSuccessCount")).collect(Collectors.toList());
            List<Integer> times = jsonObjectList.stream().map(jsonObject -> jsonObject.getInteger("times")).collect(Collectors.toList());
            List<Integer> billingTime = jsonObjectList.stream().map(jsonObject -> jsonObject.getInteger("billingTime")).collect(Collectors.toList());
            return R.ok().put("list",list).put("dates",dates).put("callCount",callCount).put("callSuccessCount",callSuccessCount).put("times",times).put("billingTime",billingTime);
        }
        else {
            return R.ok("未查找到数据");
        }
    }

    @GetMapping("/exportVoiceLogs")
    public AjaxResult exportVoiceLogs(CompanyStatisticsParam 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<CompanyVoiceLogsStatisticsVO> list= voiceLogsService.selectVoiceLogsStatisticsList(param);
        if(list!=null){
            for(CompanyVoiceLogsStatisticsVO vo:list){
                double f1 = new BigDecimal((float)vo.getCallSuccessCount()/vo.getCallCount()).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue()*100;
                vo.setCallRate(f1);
            }
        }
        ExcelUtil<CompanyVoiceLogsStatisticsVO> util = new ExcelUtil<CompanyVoiceLogsStatisticsVO>(CompanyVoiceLogsStatisticsVO.class);
        return util.exportExcel(list, "voiceLogs");
    }








    @GetMapping("/smsLogs")
    public R smsLogs(CompanyStatisticsParam 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<CompanySmsLogsStatisticsVO> list= smsLogsService.selectSmsLogsStatisticsList(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 = smsLogsService.selectSmsLogsCounts(timeEntity.toMap());
            List<String> dates = jsonObjectList.stream().map(jsonObject -> jsonObject.getString("type")).collect(Collectors.toList());
            List<Integer> smsCount = jsonObjectList.stream().map(jsonObject -> jsonObject.getInteger("smsCount")).collect(Collectors.toList());
            List<Integer> successCount = jsonObjectList.stream().map(jsonObject -> jsonObject.getInteger("successCount")).collect(Collectors.toList());
            return R.ok().put("list",list).put("dates",dates).put("smsCount",smsCount).put("successCount",successCount);
        }
        else {
            return R.ok("未查找到数据");
        }
    }

    @GetMapping("/exportSmsLogs")
    public AjaxResult exportSmsLogs(CompanyStatisticsParam 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<CompanySmsLogsStatisticsVO> list= smsLogsService.selectSmsLogsStatisticsList(param);

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


    @GetMapping("/customer")
    public R customer(CrmCustomerStatisticsParam 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<CrmCustomerStatisticsVO> list= crmCustomerService.selectCrmCustomerStatisticsList(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 = crmCustomerService.selectCrmCustomerCounts(timeEntity.toMap());
            List<String> dates = jsonObjectList.stream().map(jsonObject -> jsonObject.getString("type")).collect(Collectors.toList());
            List<Integer> receiveCount = jsonObjectList.stream().map(jsonObject -> jsonObject.getInteger("receiveCount")).collect(Collectors.toList());
            List<Integer> poolCount = jsonObjectList.stream().map(jsonObject -> jsonObject.getInteger("poolCount")).collect(Collectors.toList());
            return R.ok().put("list",list).put("dates",dates).put("receiveCount",receiveCount).put("poolCount",poolCount);
        }
        else {
            return R.ok("未查找到数据");
        }
    }

    @GetMapping("/exportCustomer")
    public AjaxResult exportCustomer(CrmCustomerStatisticsParam 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<CrmCustomerStatisticsVO> list= crmCustomerService.selectCrmCustomerStatisticsList(param);
        ExcelUtil<CrmCustomerStatisticsVO> util = new ExcelUtil<CrmCustomerStatisticsVO>(CrmCustomerStatisticsVO.class);
        return util.exportExcel(list, "customer");
    }


    @GetMapping("/customerVisit")
    public R customerVisit(CrmCustomerStatisticsParam 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<CrmCustomerVisitStatisticsVO> list= crmCustomerVisitService.selectCrmCustomerVisitStatisticsList(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 = crmCustomerVisitService.selectCrmCustomerVisitCounts(timeEntity.toMap());
            List<String> dates = jsonObjectList.stream().map(jsonObject -> jsonObject.getString("type")).collect(Collectors.toList());
            List<Integer> customerCount = jsonObjectList.stream().map(jsonObject -> jsonObject.getInteger("customerCount")).collect(Collectors.toList());
            List<Integer> visitCount = jsonObjectList.stream().map(jsonObject -> jsonObject.getInteger("visitCount")).collect(Collectors.toList());
            return R.ok().put("list",list).put("dates",dates).put("customerCount",customerCount).put("visitCount",visitCount);
        }
        else {
            return R.ok("未查找到数据");
        }
    }

    @GetMapping("/exportCustomerVisit")
    public AjaxResult exportCustomerVisit(CrmCustomerStatisticsParam 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<CrmCustomerVisitStatisticsVO> list= crmCustomerVisitService.selectCrmCustomerVisitStatisticsList(param);
        ExcelUtil<CrmCustomerVisitStatisticsVO> util = new ExcelUtil<CrmCustomerVisitStatisticsVO>(CrmCustomerVisitStatisticsVO.class);
        return util.exportExcel(list, "visit");
    }
}
