package com.matrix.system.hive.service.imp; import com.matrix.core.constance.MatrixConstance; import com.matrix.core.pojo.AjaxResult; import com.matrix.core.tools.WebUtil; import com.matrix.system.app.dto.VipStatisticsParamDto; import com.matrix.system.common.bean.SysCompany; import com.matrix.system.common.bean.SysUsers; import com.matrix.system.common.dao.SysCompanyDao; import com.matrix.system.common.dao.SysUsersDao; import com.matrix.system.common.tools.DataAuthUtil; import com.matrix.system.hive.bean.SysShopInfo; import com.matrix.system.hive.dao.SysShopInfoDao; import com.matrix.system.hiveErp.analysUtil.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.*; /** * @author wzy * @date 2020-12-30 **/ @Service public class DataAnalysisCustomerServiceImpl { @Autowired private SysShopInfoDao shopInfoDao; @Autowired private SysCompanyDao sysCompanyDao; @Autowired private SysUsersDao sysUsersDao; /** * 按店铺查询数据通用格式执行方法,支持时、日、月、年维度 * 如: A店铺 B店铺 * 2020-01-01 12 13 * 2020-02-02 10 11 * * @param statisticsParam 时间条件 * @param caculate 循环调用caculate计算该店的数据 * 查询的数据需满足 只有一个门店只有一行 列名称为 t0,t1,t2 * @return */ public AjaxResult getAnalysisResult(StatisticsParamVo statisticsParam, Caculate caculate) { AjaxResult result = new AjaxResult(); //根据计算横坐标 List xAxis = StatisticsTimeUtil.getTimeSpace(statisticsParam.getBeginTime(), statisticsParam.getEndTime(), statisticsParam.getStatisticsUnit()); //获取所有门店 SysUsers user = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY); List shops = null; if (statisticsParam.getShopId() != null) { shops = Arrays.asList(shopInfoDao.selectById(user.getShopId())); } else { if (DataAuthUtil.hasAllShopAuth()) { shops = shopInfoDao.selectShopInfo(user.getCompanyId()); } else { shops = Arrays.asList(shopInfoDao.selectById(user.getShopId())); } } //定义数据项内容 List series = new ArrayList<>(); //定义数据主体 String[] legendData = new String[shops.size()]; int i = 0; //按门店统计数据 List timeSpaceParam = StatisticsTimeUtil.buidParam(xAxis); for (SysShopInfo shop : shops) { legendData[i++] = shop.getShopName(); //数据项内容 SeriesVo storeInfoSeries = new SeriesVo(); storeInfoSeries.setName(shop.getShopName()); //调用计算器获取数据库统计的结果 Map yAxisMap = caculate.exec(timeSpaceParam, shop.getId(), null); //把统计结果转成数组格式 storeInfoSeries.setData(StatisticsTimeUtil.getSeries(yAxisMap)); series.add(storeInfoSeries); } //构造返回对象 Map data = new HashMap<>(); data.put("legendData", legendData); data.put("series", series); String[] xData = StatisticsTimeUtil.getFormartDateList(xAxis, statisticsParam); data.put("xAxis", Arrays.copyOf(xData, xData.length - 1)); result.setMapInfo(data); result.setStatus(AjaxResult.STATUS_SUCCESS); return result; } public AjaxResult getCompanyAnalysisResult(StatisticsParamVo statisticsParam, Caculate caculate) { AjaxResult result = new AjaxResult(); //根据计算横坐标 List xAxis = StatisticsTimeUtil.getTimeSpace(statisticsParam.getBeginTime(), statisticsParam.getEndTime(), statisticsParam.getStatisticsUnit()); //获取所有门店 SysUsers user = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY); SysCompany company = sysCompanyDao.selectById(user.getCompanyId()); //定义数据项内容 List series = new ArrayList<>(); //定义数据主体 String[] legendData = new String[1]; int i = 0; //按门店统计数据 List timeSpaceParam = StatisticsTimeUtil.buidParam(xAxis); legendData[0] = company.getComName(); //数据项内容 SeriesVo storeInfoSeries = new SeriesVo(); storeInfoSeries.setName(company.getComName()); //调用计算器获取数据库统计的结果 Map yAxisMap = caculate.exec(timeSpaceParam, null, company.getComId()); //把统计结果转成数组格式 storeInfoSeries.setData(StatisticsTimeUtil.getSeries(yAxisMap)); series.add(storeInfoSeries); //构造返回对象 Map data = new HashMap<>(); data.put("legendData", legendData); data.put("series", series); String[] xData = StatisticsTimeUtil.getFormartDateList(xAxis, statisticsParam); data.put("xAxis", Arrays.copyOf(xData, xData.length - 1)); result.setMapInfo(data); result.setStatus(AjaxResult.STATUS_SUCCESS); return result; } public AjaxResult getStaffAnalysisResult(VipStatisticsParamDto statisticsParam, Caculate caculate) { AjaxResult result = new AjaxResult(); //根据计算横坐标 List xAxis = StatisticsTimeUtil.getTimeSpace(statisticsParam.getBeginTime(), statisticsParam.getEndTime(), statisticsParam.getStatisticsUnit()); //获取所有门店 SysUsers user = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY); Long staffId = null; if (statisticsParam.getStaffId() == null) { staffId = user.getSuId(); } else { staffId = statisticsParam.getStaffId(); } SysUsers sysUsers = sysUsersDao.selectById(staffId); //定义数据项内容 List series = new ArrayList<>(); //定义数据主体 String[] legendData = new String[1]; int i = 0; //按门店统计数据 List timeSpaceParam = StatisticsTimeUtil.buidParam(xAxis); legendData[0] = sysUsers.getSuName(); //数据项内容 SeriesVo storeInfoSeries = new SeriesVo(); storeInfoSeries.setName(sysUsers.getSuName()); //调用计算器获取数据库统计的结果 Map yAxisMap = caculate.exec(timeSpaceParam, null, sysUsers.getSuId()); //把统计结果转成数组格式 storeInfoSeries.setData(StatisticsTimeUtil.getSeries(yAxisMap)); series.add(storeInfoSeries); //构造返回对象 Map data = new HashMap<>(); data.put("legendData", legendData); data.put("series", series); StatisticsParamVo statisticsParam1 = new StatisticsParamVo(); statisticsParam1.setStatisticsUnit(statisticsParam.getStatisticsUnit()); String[] xData = StatisticsTimeUtil.getFormartDateList(xAxis, statisticsParam1); data.put("xAxis", Arrays.copyOf(xData, xData.length - 1)); result.setMapInfo(data); result.setStatus(AjaxResult.STATUS_SUCCESS); return result; } }