|
@@ -3,6 +3,7 @@ package com.caimei.modules.user.service;
|
|
|
import com.caimei.modules.order.entity.NewOrder;
|
|
|
import com.caimei.modules.user.dao.CmPortraitDao;
|
|
|
import com.caimei.modules.user.entity.*;
|
|
|
+import com.caimei.utils.MathUtil;
|
|
|
import com.thinkgem.jeesite.common.utils.ObjectUtils;
|
|
|
import com.thinkgem.jeesite.common.utils.StringUtils;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
@@ -13,6 +14,7 @@ import java.text.NumberFormat;
|
|
|
import java.text.ParseException;
|
|
|
import java.text.SimpleDateFormat;
|
|
|
import java.util.*;
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
|
* Description
|
|
@@ -127,35 +129,62 @@ public class ClubPortraitService {
|
|
|
if (clubRemark.contains(",")) {
|
|
|
String[] split = clubRemark.split(",");
|
|
|
for (String s : split) {
|
|
|
- if (demandList.size() < 10 && StringUtils.isNotBlank(s) && !demandList.contains(s)) {
|
|
|
+ if (StringUtils.isNotBlank(s)) {
|
|
|
+
|
|
|
demandList.add(s);
|
|
|
}
|
|
|
}
|
|
|
} else {
|
|
|
- if (demandList.size() < 10 && StringUtils.isNotBlank(clubRemark) && !demandList.contains(clubRemark)) {
|
|
|
+ if (StringUtils.isNotBlank(clubRemark)) {
|
|
|
demandList.add(clubRemark);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
// 访问记录
|
|
|
- List<String> clubBehaviors = cmPortraitDao.getClubBehavior(clubId, demandStart, demandEnd);
|
|
|
+ List<CmBehaviorRecord> clubBehaviors = cmPortraitDao.getClubBehavior(clubId, demandStart, demandEnd);
|
|
|
if (clubBehaviors.size() > 0) {
|
|
|
- for (String clubBehavior : clubBehaviors) {
|
|
|
- if (clubBehavior.contains(",")) {
|
|
|
- String[] split = clubBehavior.split(",");
|
|
|
+ for (CmBehaviorRecord clubBehavior : clubBehaviors) {
|
|
|
+ if (clubBehavior.getPageLabel().contains(",")) {
|
|
|
+ String[] split = clubBehavior.getPageLabel().split(",");
|
|
|
for (String s : split) {
|
|
|
- if (demandList.size() < 10 && StringUtils.isNotBlank(s) && !demandList.contains(s)) {
|
|
|
+ if (StringUtils.isNotBlank(s)) {
|
|
|
+ s = s + "(" + clubBehavior.getPageType() + ")";
|
|
|
demandList.add(s);
|
|
|
}
|
|
|
}
|
|
|
} else {
|
|
|
- if (demandList.size() < 10 && StringUtils.isNotBlank(clubBehavior) && !demandList.contains(clubBehavior)) {
|
|
|
- demandList.add(clubBehavior);
|
|
|
+ if (StringUtils.isNotBlank(clubBehavior.getPageLabel())) {
|
|
|
+ String types = clubBehavior.getPageLabel() + "(" + clubBehavior.getPageType() + ")";
|
|
|
+ demandList.add(types);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+ // 排序
|
|
|
+ List<String> demandString = new ArrayList<>();
|
|
|
+ List<Integer> demandInteger = new ArrayList<>();
|
|
|
+ for (String s : demandList) {
|
|
|
+ if (!demandString.contains(s)) {
|
|
|
+ demandString.add(s);
|
|
|
+ int size = demandList.stream().filter(dem -> dem.equals(s)).collect(Collectors.toList()).size();
|
|
|
+ demandInteger.add(size);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ demandList.clear();
|
|
|
+ for (int i = 0; i <= demandInteger.size()-1; i++) {
|
|
|
+ int item = i;
|
|
|
+ Integer num = demandInteger.get(i);
|
|
|
+ for (int k = i; k <= demandInteger.size()-1; k++) {
|
|
|
+ if (num < demandInteger.get(k)) {
|
|
|
+ item = k;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (!demandList.contains(demandString.get(item)) && demandList.size() <= 10) {
|
|
|
+ demandList.add(demandString.get(item));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
Map<String, Object> map = new HashMap<>();
|
|
|
map.put("startTime", demandStart);
|
|
|
map.put("endTime", demandEnd);
|
|
@@ -445,7 +474,239 @@ public class ClubPortraitService {
|
|
|
}
|
|
|
return cmPortrait;
|
|
|
}
|
|
|
+ /**
|
|
|
+ * 协销列表
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public List<Server> getSerList() {
|
|
|
+ List<Server> serviceInfo = cmPortraitDao.getServiceInfo();
|
|
|
+ return serviceInfo;
|
|
|
+ }
|
|
|
|
|
|
+ /**
|
|
|
+ * 机构-协销画像
|
|
|
+ * @param clubSales
|
|
|
+ */
|
|
|
+ public CmClubSales clubSales(CmClubSales clubSales) {
|
|
|
+ SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
|
|
|
+ Date date = new Date();
|
|
|
+ String endTime = "";
|
|
|
+ String startTime = "";
|
|
|
+ Calendar calendar = Calendar.getInstance();
|
|
|
+ calendar.setTime(date);
|
|
|
+ calendar.add(Calendar.DAY_OF_MONTH, -1);
|
|
|
+ Date time = calendar.getTime();
|
|
|
+ endTime = dateFormat.format(time);
|
|
|
+ String time1 = "";
|
|
|
+ String time2 = "";
|
|
|
+ boolean expty = ObjectUtils.isEmpty(clubSales.getStartTime()) && ObjectUtils.isEmpty(clubSales.getEndTime());
|
|
|
+ if (expty) {
|
|
|
+ Date start = null;
|
|
|
+ clubSales.setEndTime(endTime);
|
|
|
+ // 日期参数为 日
|
|
|
+ if (1 == clubSales.getDateType()) {
|
|
|
+ clubSales.setStartTime(endTime);
|
|
|
+ }
|
|
|
+ if (2 == clubSales.getDateType()) {
|
|
|
+ calendar.setTime(time);
|
|
|
+ calendar.add(Calendar.MONTH, -1);
|
|
|
+ start = calendar.getTime();
|
|
|
+ startTime = dateFormat.format(start);
|
|
|
+ clubSales.setStartTime(startTime);
|
|
|
+ }
|
|
|
+ if (3 == clubSales.getDateType()) {
|
|
|
+ calendar.setTime(time);
|
|
|
+ calendar.add(Calendar.MONTH, -6);
|
|
|
+ start = calendar.getTime();
|
|
|
+ startTime = dateFormat.format(start);
|
|
|
+ clubSales.setStartTime(startTime);
|
|
|
+ }
|
|
|
+ if (4 == clubSales.getDateType()) {
|
|
|
+ calendar.setTime(time);
|
|
|
+ calendar.add(Calendar.YEAR, -1);
|
|
|
+ start = calendar.getTime();
|
|
|
+ startTime = dateFormat.format(start);
|
|
|
+ clubSales.setStartTime(startTime);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ time1 = clubSales.getStartTime();
|
|
|
+ time2 = clubSales.getEndTime();
|
|
|
+ }
|
|
|
+ // 新注册机构
|
|
|
+ if (0 == clubSales.getType() || 3 == clubSales.getType()) {
|
|
|
+ if ((0 == clubSales.getDateType() || 1 == clubSales.getDateType()) && expty) {
|
|
|
+ clubSales.setEndTime(dateFormat.format(date));
|
|
|
+ }
|
|
|
+ if (clubSales.getEndTime().equals(endTime)) {
|
|
|
+ clubSales.setEndTime(dateFormat.format(date));
|
|
|
+ }
|
|
|
+ int spClub = 0, unSpClub = 0;
|
|
|
+ ArrayList<OrderPortrait> orderPortraits = new ArrayList<>();
|
|
|
+ OrderPortrait orderPortrait = new OrderPortrait();
|
|
|
+ List<clubData> clubList = cmPortraitDao.getNewClubInfo(clubSales);
|
|
|
+ int length = clubList.size();
|
|
|
+ NumberFormat instance = NumberFormat.getInstance();
|
|
|
+ instance.setMaximumFractionDigits(2);
|
|
|
+ if (length != 0) {
|
|
|
+ for (clubData club : clubList) {
|
|
|
+ if ( null == club.getSpID() || 1342 == club.getSpID()) {
|
|
|
+ // 未分配协销结构与
|
|
|
+ spClub++;
|
|
|
+ } else {
|
|
|
+ // 已分配协销机构
|
|
|
+ unSpClub++;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ clubSales.setTotal(length);
|
|
|
+ orderPortrait.setValue(spClub);
|
|
|
+ if (spClub != 0) {
|
|
|
+ orderPortrait.setName("已分配协销 " + instance.format((float) spClub / (float) length * 100) + "% " + spClub + "个");
|
|
|
+ } else {
|
|
|
+ orderPortrait.setName("已分配协销 0 % " + spClub + "个");
|
|
|
+ }
|
|
|
+ orderPortraits.add(orderPortrait);
|
|
|
+ orderPortrait = new OrderPortrait();
|
|
|
+ orderPortrait.setValue(unSpClub);
|
|
|
+ if (unSpClub != 0) {
|
|
|
+ orderPortrait.setName("未分配协销 " + instance.format((float) unSpClub / (float) length * 100) + "% " + unSpClub + "个");
|
|
|
+ } else {
|
|
|
+ orderPortrait.setName("未分配协销 0 % " + unSpClub + "个");
|
|
|
+ }
|
|
|
+ orderPortraits.add(orderPortrait);
|
|
|
+
|
|
|
+ clubSales.setPortrait(orderPortraits);
|
|
|
+ }
|
|
|
+ calendar.setTime(date);
|
|
|
+ calendar.add(Calendar.DAY_OF_MONTH, -1);
|
|
|
+ time = calendar.getTime();
|
|
|
+ endTime = dateFormat.format(time);
|
|
|
+ clubSales.setEndTime(endTime);
|
|
|
+ }
|
|
|
+ // 机构咨询记录
|
|
|
+ if (1 == clubSales.getType() || 3 == clubSales.getType()) {
|
|
|
+ // 机构咨询记录
|
|
|
+ List<clubData> clubRemark = cmPortraitDao.getClubRemark(clubSales);
|
|
|
+ // 游客咨询记录
|
|
|
+ List<clubData> clubVisitorRemark = cmPortraitDao.getClubVisitorRemark(clubSales);
|
|
|
+ // 新注册机构
|
|
|
+ List<Integer> clubIdList = cmPortraitDao.getNewClubId(clubSales);
|
|
|
+ int total = 0;
|
|
|
+ // 组装数据
|
|
|
+ ArrayList<OrderPortrait> orderPortraits = new ArrayList<>();
|
|
|
+ OrderPortrait orderPortrait = new OrderPortrait();
|
|
|
+ Integer clubRemarkNumber = 0;
|
|
|
+ Integer touristRemarkNumber = 0;
|
|
|
+ if (clubRemark.size() != 0) {
|
|
|
+
|
|
|
+ // 组转内圈数据
|
|
|
+ // 填写过机构数、咨询记录数
|
|
|
+ int fillClub = 0, fillRemark = 0 ;
|
|
|
+ // 未填写过机构数、咨询记录数
|
|
|
+ int unFillClub = 0;
|
|
|
+ for (clubData remark : clubRemark) {
|
|
|
+ total += remark.getNumber();
|
|
|
+ clubRemarkNumber += remark.getNumber();
|
|
|
+ for (Integer clubId : clubIdList) {
|
|
|
+ if (clubRemark.contains(clubId)) {
|
|
|
+ fillClub ++;
|
|
|
+ fillRemark += remark.getNumber();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ orderPortrait.setValue(fillClub);
|
|
|
+ if (fillClub != 0) {
|
|
|
+ orderPortrait.setName("新注册机构--填写机构 " + fillRemark + "条 " + fillClub + "个");
|
|
|
+ } else {
|
|
|
+ orderPortrait.setName("新注册机构--填写机构 0条 " + fillClub + "个");
|
|
|
+ }
|
|
|
+ orderPortraits.add(orderPortrait);
|
|
|
+ orderPortrait = new OrderPortrait();
|
|
|
+ orderPortrait.setValue(unFillClub);
|
|
|
+ unFillClub = clubIdList.size() - fillClub;
|
|
|
+ if (unFillClub != 0) {
|
|
|
+ orderPortrait.setName("新注册机构--未填写机构 0条 " + unFillClub + "个");
|
|
|
+ } else {
|
|
|
+ orderPortrait.setName("新注册机构--未填写机构 0条 " + unFillClub + "个");
|
|
|
+ }
|
|
|
+ orderPortraits.add(orderPortrait);
|
|
|
+ clubSales.setInternalPortrait(orderPortraits);
|
|
|
+ orderPortraits = new ArrayList<>();
|
|
|
+ orderPortrait = new OrderPortrait();
|
|
|
+ }
|
|
|
+ if (clubVisitorRemark.size() != 0) {
|
|
|
+ for (clubData tourist : clubVisitorRemark) {
|
|
|
+ total += tourist.getNumber();
|
|
|
+ touristRemarkNumber += tourist.getNumber();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 外圈数据
|
|
|
+ clubSales.setRemarkTotal(total);
|
|
|
+ orderPortrait.setValue(clubRemarkNumber);
|
|
|
+ if (clubRemark.size() != 0) {
|
|
|
+ orderPortrait.setName("已填写机构 " + clubRemarkNumber + "条 " + clubRemark.size() + "个");
|
|
|
+ } else {
|
|
|
+ orderPortrait.setName("已填写机构 0条 " + clubRemark.size() + "个");
|
|
|
+ }
|
|
|
+ orderPortraits.add(orderPortrait);
|
|
|
+ orderPortrait = new OrderPortrait();
|
|
|
+ orderPortrait.setValue(touristRemarkNumber);
|
|
|
+ if (clubVisitorRemark.size() != 0) {
|
|
|
+ orderPortrait.setName("已填写游客 " + touristRemarkNumber + "条 " + clubVisitorRemark.size() + "个");
|
|
|
+ } else {
|
|
|
+ orderPortrait.setName("已填写游客 0条 " + clubVisitorRemark.size() + "个");
|
|
|
+ }
|
|
|
+ orderPortraits.add(orderPortrait);
|
|
|
+ clubSales.setPortrait(orderPortraits);
|
|
|
+ }
|
|
|
+ // 机构活跃
|
|
|
+ if (2 == clubSales.getType() || 3 == clubSales.getType()) {
|
|
|
+ if (expty) {
|
|
|
+ // 默认前一周
|
|
|
+ calendar.setTime(date);
|
|
|
+ Date activeStartTime = calendar.getTime();
|
|
|
+ endTime = dateFormat.format(activeStartTime);
|
|
|
+ calendar.add(Calendar.DAY_OF_MONTH, -7);
|
|
|
+ Date activeEndTime = calendar.getTime();
|
|
|
+ startTime = dateFormat.format(activeEndTime);
|
|
|
+ clubSales.setStartTime(startTime);
|
|
|
+ clubSales.setEndTime(endTime);
|
|
|
+ }
|
|
|
+ // 查询时间--图表 x 轴数据
|
|
|
+ List<String> activeDateList = cmPortraitDao.getActiveDate(clubSales.getStartTime(), clubSales.getEndTime());
|
|
|
+ ArrayList<String> names = new ArrayList<>();
|
|
|
+ // 活跃数据
|
|
|
+ ArrayList<Integer> active = new ArrayList<>();
|
|
|
+ // 不活跃数据
|
|
|
+ ArrayList<Integer> unActive = new ArrayList<>();
|
|
|
+ for (String activeDate : activeDateList) {
|
|
|
+ names.add(activeDate);
|
|
|
+ // 该天用户活跃数据
|
|
|
+ List<clubData> activeInfo = cmPortraitDao.getActiveInfo(activeDate, clubSales.getSpID());
|
|
|
+ Integer activeNumber = 0;
|
|
|
+ Integer unActiveNumber = 0;
|
|
|
+ if (null != activeInfo && activeInfo.size() > 0) {
|
|
|
+ // 活跃数据
|
|
|
+ activeNumber = activeInfo.stream().filter(ac -> ac.getActiveStatus().equals(0)).collect(Collectors.toList()).get(0).getNumber();
|
|
|
+ // 不活跃数据
|
|
|
+ unActiveNumber = activeInfo.stream().filter(ac -> ac.getActiveStatus().equals(1)).collect(Collectors.toList()).get(0).getNumber();
|
|
|
+ }
|
|
|
+ active.add(activeNumber);
|
|
|
+ unActive.add(unActiveNumber);
|
|
|
+ }
|
|
|
+ clubSales.setNames(names);
|
|
|
+ clubSales.setValues(active);
|
|
|
+ clubSales.setValues1(unActive);
|
|
|
+ }
|
|
|
+ if (!expty) {
|
|
|
+ clubSales.setStartTime(time1);
|
|
|
+ if ((0 == clubSales.getDateType() || 1 == clubSales.getDateType()) && ObjectUtils.isEmpty(clubSales.getStartTime())) {
|
|
|
+ clubSales.setStartTime(time1);
|
|
|
+ }
|
|
|
+ clubSales.setEndTime(time2);
|
|
|
+ }
|
|
|
+ return clubSales;
|
|
|
+ }
|
|
|
/**
|
|
|
* 设置机构资料完整度
|
|
|
* @param clubStatistics
|