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<Date> xAxis = StatisticsTimeUtil.getTimeSpace(statisticsParam.getBeginTime(), statisticsParam.getEndTime(), statisticsParam.getStatisticsUnit());
|
|
//获取所有门店
|
SysUsers user = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY);
|
List<SysShopInfo> 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<SeriesVo> series = new ArrayList<>();
|
|
//定义数据主体
|
String[] legendData = new String[shops.size()];
|
|
int i = 0;
|
|
//按门店统计数据
|
List<StatisticsTimeDaoParam> timeSpaceParam = StatisticsTimeUtil.buidParam(xAxis);
|
for (SysShopInfo shop : shops) {
|
|
legendData[i++] = shop.getShopName();
|
//数据项内容
|
SeriesVo storeInfoSeries = new SeriesVo();
|
storeInfoSeries.setName(shop.getShopName());
|
//调用计算器获取数据库统计的结果
|
Map<String, Integer> yAxisMap = caculate.exec(timeSpaceParam, shop.getId(), null);
|
//把统计结果转成数组格式
|
storeInfoSeries.setData(StatisticsTimeUtil.getSeries(yAxisMap));
|
series.add(storeInfoSeries);
|
|
}
|
//构造返回对象
|
Map<Object, Object> 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<Date> xAxis = StatisticsTimeUtil.getTimeSpace(statisticsParam.getBeginTime(), statisticsParam.getEndTime(), statisticsParam.getStatisticsUnit());
|
|
//获取所有门店
|
SysUsers user = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY);
|
|
SysCompany company = sysCompanyDao.selectById(user.getCompanyId());
|
|
//定义数据项内容
|
List<SeriesVo> series = new ArrayList<>();
|
|
//定义数据主体
|
String[] legendData = new String[1];
|
|
int i = 0;
|
|
//按门店统计数据
|
List<StatisticsTimeDaoParam> timeSpaceParam = StatisticsTimeUtil.buidParam(xAxis);
|
|
legendData[0] = company.getComName();
|
//数据项内容
|
SeriesVo storeInfoSeries = new SeriesVo();
|
storeInfoSeries.setName(company.getComName());
|
//调用计算器获取数据库统计的结果
|
Map<String, Integer> yAxisMap = caculate.exec(timeSpaceParam, null, company.getComId());
|
//把统计结果转成数组格式
|
storeInfoSeries.setData(StatisticsTimeUtil.getSeries(yAxisMap));
|
series.add(storeInfoSeries);
|
|
//构造返回对象
|
Map<Object, Object> 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<Date> 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<SeriesVo> series = new ArrayList<>();
|
|
//定义数据主体
|
String[] legendData = new String[1];
|
|
int i = 0;
|
|
//按门店统计数据
|
List<StatisticsTimeDaoParam> timeSpaceParam = StatisticsTimeUtil.buidParam(xAxis);
|
|
legendData[0] = sysUsers.getSuName();
|
//数据项内容
|
SeriesVo storeInfoSeries = new SeriesVo();
|
storeInfoSeries.setName(sysUsers.getSuName());
|
//调用计算器获取数据库统计的结果
|
Map<String, Integer> yAxisMap = caculate.exec(timeSpaceParam, null, sysUsers.getSuId());
|
//把统计结果转成数组格式
|
storeInfoSeries.setData(StatisticsTimeUtil.getSeries(yAxisMap));
|
series.add(storeInfoSeries);
|
|
//构造返回对象
|
Map<Object, Object> 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;
|
}
|
}
|