@@ -1,7 +1,10 @@
package com.simple.service.impl;
import com.simple.domain.dto.MarkingCouponDataReportDto;
import com.simple.domain.vo.MarkingCouponDataReportVo;
import com.simple.domain.vo.MarkingSceneDataReportVo;
import com.simple.domain.vo.MarkingSceneDataVo;
import com.simple.mapper.WxCarCmdLogMapper;
import com.simple.mapper.WxCouponActionLogMapper;
import com.simple.mapper.WxCouponOrderMapper;
import com.simple.service.MarkingDataReportService;
@@ -23,9 +26,11 @@ public class MarkingDataReportServiceImpl implements MarkingDataReportService {
private WxCouponOrderMapper wxCouponOrderMapper;
@Autowired
private WxCouponActionLogMapper wxCouponActionLogMapper;
@Autowired
private WxCarCmdLogMapper wxCarCmdLogMapper;
//取本月第一天
private Date getFirstDayOfMonth(){
private Date getFirstDayOfMonth() {
Calendar c = Calendar.getInstance();
c.set(Calendar.DAY_OF_MONTH, 0);//设置为1号,当前日期既为本月第一天
c.set(Calendar.HOUR_OF_DAY, 0);
@@ -35,7 +40,8 @@ public class MarkingDataReportServiceImpl implements MarkingDataReportService {
Date thisMonth = c.getTime();
return thisMonth;
}
private Date addDay(int addDayAmount){
private Date addDay(int addDayAmount) {
Calendar c = Calendar.getInstance();
c.add(Calendar.DATE, addDayAmount);
c.set(Calendar.HOUR_OF_DAY, 0);
@@ -45,107 +51,227 @@ public class MarkingDataReportServiceImpl implements MarkingDataReportService {
Date date = c.getTime();
return date;
}
/**
* @param date 转换当前时间去掉时分秒
* @return
*/
private Date convertDate(Date date) {
Calendar c = Calendar.getInstance();
c.setTime(date);
c.set(Calendar.HOUR_OF_DAY, 0);
c.set(Calendar.MINUTE, 0);
c.set(Calendar.SECOND, 0);
c.set(Calendar.MILLISECOND, 0);
Date result = c.getTime();
return date;
}
private Date convertDateAndAdd(Date date, int addDayAmount) {
Calendar c = Calendar.getInstance();
c.setTime(date);
c.add(Calendar.DATE, addDayAmount);
c.set(Calendar.HOUR_OF_DAY, 0);
c.set(Calendar.MINUTE, 0);
c.set(Calendar.SECOND, 0);
c.set(Calendar.MILLISECOND, 0);
Date result = c.getTime();
return date;
}
//取的当月券数据
@Override
public Map<String,Object> getCouponDate(String tenantId){
public Map<String, Object> getCouponDate(String tenantId) {
//今日领取券数
//查询coupon order表
int todayCouponCount = wxCouponOrderMapper.findCountByDateLimit(tenantId,addDay(0),addDay(1));
int yesterdayCount = wxCouponOrderMapper.findCountByDateLimit(tenantId,addDay(-1),addDay(0));
int lastWeekCount = wxCouponOrderMapper.findCountByDateLimit(tenantId,addDay(-7),addDay(-6));
int todayCouponCount = wxCouponOrderMapper.findCountByDateLimit(tenantId, addDay(0), addDay(1));
int yesterdayCount = wxCouponOrderMapper.findCountByDateLimit(tenantId, addDay(-1), addDay(0));
int lastWeekCount = wxCouponOrderMapper.findCountByDateLimit(tenantId, addDay(-7), addDay(-6));
NumberFormat nf = NumberFormat.getPercentInstance();
nf.setMinimumFractionDigits(2);//控制保留小数点后几位,2:表示保留2位小数点
String couponUpDay ="";
if(yesterdayCount!=0) {
String couponUpDay = "";
if (yesterdayCount != 0) {
couponUpDay = nf.format((todayCouponCount - yesterdayCount) / (float) yesterdayCount);
}else{
} else {
couponUpDay = nf.format(todayCouponCount);
}
String couponUpWeek ="";
if(lastWeekCount!=0) {
String couponUpWeek = "";
if (lastWeekCount != 0) {
couponUpWeek = nf.format((todayCouponCount - lastWeekCount) / (float) lastWeekCount);
}else{
} else {
couponUpWeek = nf.format(todayCouponCount);
}
//couponData
HashMap<String, Object> params = new HashMap<>();
params.put("tenantId",tenantId);
params.put("startTime",getFirstDayOfMonth());
params.put("endTime",addDay(1));
List<MarkingCouponDataReportVo> couponDatalist=wxCouponOrderMapper.couponDataMap(params);
params.put("tenantId", tenantId);
params.put("startTime", getFirstDayOfMonth());
params.put("endTime", addDay(1));
List<MarkingCouponDataReportVo> couponDatalist = wxCouponOrderMapper.couponDataMap(params);
//查询券领取人数
HashMap<String,Object> returnMap = new HashMap<>();
returnMap.put("couponUpDay",couponUpDay);//比昨日提升
returnMap.put("couponUpWeek",couponUpWeek);//比上周提升
returnMap.put("todayCouponCount",todayCouponCount);//今日领取数
returnMap.put("couponDataMap",couponDatalist);
HashMap<String, Object> returnMap = new HashMap<>();
returnMap.put("couponUpDay", couponUpDay);//比昨日提升
returnMap.put("couponUpWeek", couponUpWeek);//比上周提升
returnMap.put("todayCouponCount", todayCouponCount);//今日领取数
returnMap.put("couponDataMap", couponDatalist);
return returnMap;
}
@Override
public Map<String,Object> getSceneData(String tenantId){
public Map<String, Object> getSceneData(String tenantId) {
//今日营销投放券数
int todaySceneCount = wxCouponActionLogMapper.findCountByDateLimit(tenantId,addDay(0),addDay(1));
int yesterdayCount = wxCouponActionLogMapper.findCountByDateLimit(tenantId,addDay(-1),addDay(0));
int lastWeekCount = wxCouponActionLogMapper.findCountByDateLimit(tenantId,addDay(-7),addDay(-6));
int todaySceneCount = wxCouponActionLogMapper.findCountByDateLimit(tenantId, addDay(0), addDay(1));
int yesterdayCount = wxCouponActionLogMapper.findCountByDateLimit(tenantId, addDay(-1), addDay(0));
int lastWeekCount = wxCouponActionLogMapper.findCountByDateLimit(tenantId, addDay(-7), addDay(-6));
NumberFormat nf = NumberFormat.getPercentInstance();
nf.setMinimumFractionDigits(2);//控制保留小数点后几位,2:表示保留2位小数点
String sceneDownDay ="";
if(yesterdayCount!=0) {
sceneDownDay = nf.format((yesterdayCount-todaySceneCount) / (float) yesterdayCount);
}else{
sceneDownDay = nf.format(0-todaySceneCount);
String sceneDownDay = "";
if (yesterdayCount != 0) {
sceneDownDay = nf.format((yesterdayCount - todaySceneCount) / (float) yesterdayCount);
} else {
sceneDownDay = nf.format(0 - todaySceneCount);
}
String sceneUpWeek ="";
if(lastWeekCount!=0) {
String sceneUpWeek = "";
if (lastWeekCount != 0) {
sceneUpWeek = nf.format((todaySceneCount - lastWeekCount) / (float) lastWeekCount);
}else{
} else {
sceneUpWeek = nf.format(todaySceneCount);
}
HashMap<String, Object> params = new HashMap<>();
params.put("tenantId",tenantId);
params.put("startTime",getFirstDayOfMonth());
params.put("endTime",addDay(1));
params.put("tenantId", tenantId);
params.put("startTime", getFirstDayOfMonth());
params.put("endTime", addDay(1));
//停车发券数 停车发券被核销数 核销发券数 核销发券被核销数
List<MarkingSceneDataReportVo> list = wxCouponActionLogMapper.sceneDataMap(params);
//停车发券被核销数
HashMap<String, Object> params1 = new HashMap<>();
params1.put("tenantId",tenantId);
params1.put("startTime",getFirstDayOfMonth());
params1.put("endTime",addDay(1));
params1.put("channelType",3);//停车
params1.put("tenantId", tenantId);
params1.put("startTime", getFirstDayOfMonth());
params1.put("endTime", addDay(1));
params1.put("channelType", 3);//停车
List<MarkingSceneDataReportVo> list1 = wxCouponActionLogMapper.sceneDataMapJoinCouponOrder(params1);
Map<String,Integer> parkCountMap = list1.stream().collect(Collectors.toMap(MarkingSceneDataReportVo::getxTime, p->p.getTempCount()));
Map<String, Integer> parkCountMap = list1.stream().collect(Collectors.toMap(MarkingSceneDataReportVo::getxTime, p -> p.getTempCount()));
//核销发券被核销数
HashMap<String, Object> params2 = new HashMap<>();
params2.put("tenantId",tenantId);
params2.put("startTime",getFirstDayOfMonth());
params2.put("endTime",addDay(1));
params2.put("channelType",4);//核销
params2.put("tenantId", tenantId);
params2.put("startTime", getFirstDayOfMonth());
params2.put("endTime", addDay(1));
params2.put("channelType", 4);//核销
List<MarkingSceneDataReportVo> list2 = wxCouponActionLogMapper.sceneDataMapJoinCouponOrder(params2);
Map<String,Integer> verifyCountMap = list2.stream().collect(Collectors.toMap(MarkingSceneDataReportVo::getxTime, p->p.getTempCount()));
Map<String, Integer> verifyCountMap = list2.stream().collect(Collectors.toMap(MarkingSceneDataReportVo::getxTime, p -> p.getTempCount()));
for (MarkingSceneDataReportVo vo:list) {
for (MarkingSceneDataReportVo vo : list) {
vo.setParkCount(parkCountMap.get(vo.getxTime()) == null ? 0 : parkCountMap.get(vo.getxTime()));
vo.setVerifyCount(verifyCountMap.get(vo.getxTime()) == null ? 0 : verifyCountMap.get(vo.getxTime()));
}
HashMap<String,Object> returnMap = new HashMap<>();
returnMap.put("sceneDownDay",sceneDownDay);//比昨日下降
returnMap.put("sceneUpWeek",sceneUpWeek);//比上周提升
returnMap.put("todaySceneCount",todaySceneCount);//今日领取数
returnMap.put("sceneDataMap",list);
HashMap<String, Object> returnMap = new HashMap<>();
returnMap.put("sceneDownDay", sceneDownDay);//比昨日下降
returnMap.put("sceneUpWeek", sceneUpWeek);//比上周提升
returnMap.put("todaySceneCount", todaySceneCount);//今日领取数
returnMap.put("sceneDataMap", list);
return returnMap;
}
@Override
public List<MarkingCouponDataReportVo> getCouponDateList(String tenantId, MarkingCouponDataReportDto markingCouponDataReportDto) {
HashMap<String, Object> params = new HashMap<>();
params.put("tenantId", tenantId);
params.put("startTime", convertDate(markingCouponDataReportDto.getStartTime()));
params.put("endTime", convertDateAndAdd(convertDate(markingCouponDataReportDto.getEndTime()), 1));
List<MarkingCouponDataReportVo> couponDatalist = wxCouponOrderMapper.couponDataList(params);
return couponDatalist;
}
@Override
public List<MarkingSceneDataVo> getSceneDataList(String tenantId, MarkingCouponDataReportDto markingCouponDataReportDto) {
HashMap<String, Object> params = new HashMap<>();
params.put("tenantId", tenantId);
params.put("startTime", convertDate(markingCouponDataReportDto.getStartTime()));
params.put("endTime", convertDateAndAdd(convertDate(markingCouponDataReportDto.getEndTime()), 1));
//停车发券数 停车发券被核销数 核销发券数 核销发券被核销数
List<MarkingSceneDataReportVo> templist = wxCouponActionLogMapper.sceneDataMap(params);
List<MarkingSceneDataVo> list = new ArrayList<>();
for (MarkingSceneDataReportVo temp: templist) {
MarkingSceneDataVo vo = new MarkingSceneDataVo();
vo.setxTime(temp.getxTime());
if(markingCouponDataReportDto.getType()==1) {
vo.setSendCount(temp.getParkSendCount());
}else{
vo.setSendCount(temp.getVerifySendCount());
}
}
Map<String, Integer> countMap = new HashMap<>();
if(markingCouponDataReportDto.getType()==1){ //停车
//停车发券被核销数
HashMap<String, Object> params1 = new HashMap<>();
params1.put("tenantId", tenantId);
params1.put("startTime", convertDate(markingCouponDataReportDto.getStartTime()));
params1.put("endTime", convertDateAndAdd(convertDate(markingCouponDataReportDto.getEndTime()), 1));
params1.put("channelType", 3);//停车
List<MarkingSceneDataReportVo> list1 = wxCouponActionLogMapper.sceneDataJoinCouponOrderList(params1);
countMap = list1.stream().collect(Collectors.toMap(MarkingSceneDataReportVo::getxTime, p -> p.getTempCount()));
}else{
//核销发券被核销数
HashMap<String, Object> params2 = new HashMap<>();
params2.put("tenantId", tenantId);
params2.put("startTime", convertDate(markingCouponDataReportDto.getStartTime()));
params2.put("endTime", convertDateAndAdd(convertDate(markingCouponDataReportDto.getEndTime()), 1));
params2.put("channelType", 4);//核销
List<MarkingSceneDataReportVo> list2 = wxCouponActionLogMapper.sceneDataJoinCouponOrderList(params2);
countMap = list2.stream().collect(Collectors.toMap(MarkingSceneDataReportVo::getxTime, p -> p.getTempCount()));
}
//获取车辆进场数
HashMap<String, Object> params3 = new HashMap<>();
params3.put("tenantId", tenantId);
params3.put("startTime", convertDate(markingCouponDataReportDto.getStartTime()));
params3.put("endTime", convertDateAndAdd(convertDate(markingCouponDataReportDto.getEndTime()), 1));
params3.put("cmdType", 601);//核销
List<MarkingSceneDataVo> markingSceneDataVos = wxCarCmdLogMapper.queryForSceneRepotyHistoryCar(params3);
Map<String,Integer> carCountMap = markingSceneDataVos.stream().collect(Collectors.toMap(MarkingSceneDataVo::getxTime, p -> p.getCarCount()));
for (MarkingSceneDataVo vo : list) {
vo.setVerifyCount(countMap.get(vo.getxTime()) == null ? 0 : countMap.get(vo.getxTime()));
vo.setCarCount(carCountMap.get(vo.getxTime()) == null ? 0 : carCountMap.get(vo.getxTime()));
if(vo.getSendCount()==0||vo.getVerifyCount()==0){
vo.setVerifyPercent(vo.getVerifyCount()+":"+vo.getSendCount());
}else {
int gcd = gcd(vo.getSendCount(), vo.getVerifyCount());
vo.setVerifyPercent(vo.getVerifyCount() / gcd + "/" + vo.getSendCount() / gcd);
}
}
return list;
}
public Map<String, Object> getTouchUsersReport(String tenantId, MarkingCouponDataReportDto markingCouponDataReportDto){
//获取领取人数
//获取领取量
//获取核销人数
//核销量
return null;
}
//计算最大公约数
public int gcd(int x, int y){ // 这个是运用辗转相除法求 两个数的 最大公约数 看不懂可以百度 // 下
if(y == 0)
return x;
else
return gcd(y,x%y);
}
}