123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503 |
- 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.thinkgem.jeesite.common.utils.ObjectUtils;
- import com.thinkgem.jeesite.common.utils.StringUtils;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
- import javax.annotation.Resource;
- import java.text.NumberFormat;
- import java.text.ParseException;
- import java.text.SimpleDateFormat;
- import java.util.*;
- /**
- * Description
- *
- * @author : Charles
- * @date : 2023/2/15
- */
- @Service
- public class ClubPortraitService {
- @Resource
- private CmPortraitDao cmPortraitDao;
- /**
- * 查询画像资料总数
- *
- * @param cmPortrait
- * @return
- */
- public CmPortrait dataTotal(CmPortrait cmPortrait) {
- CmPortrait cmPortraits = cmPortraitDao.selTotal(cmPortrait);
- return cmPortraits;
- }
- public ClubStatistics clubData(Integer clubID) {
- SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
- ClubStatistics clubStatistics = cmPortraitDao.selClubData(clubID);
- if (clubStatistics != null) {
- String type = "";
- if (StringUtils.isNotBlank(clubStatistics.getFirstClubType())) {
- type += clubStatistics.getFirstClubType();
- }
- if (StringUtils.isNotBlank(clubStatistics.getClassify())) {
- type += "-" + clubStatistics.getClassify();
- }
- clubStatistics.setClubType(type);
- setClubNum(clubStatistics);
- // 设置机构信息
- CmClubRemarks clubRemarksInfo = cmPortraitDao.getClubRemarksInfo(clubID);
- if (null != clubRemarksInfo) {
- clubStatistics.setCustomerSource(clubRemarksInfo.getCustomerSource() != null ? clubRemarksInfo.getCustomerSource() : 4);
- clubStatistics.setGroupAddition(clubRemarksInfo.getGroupAddition() != null ? clubRemarksInfo.getGroupAddition() : 1);
- clubStatistics.setMobileReach(1);
- if (null != clubRemarksInfo.getCommunicationMethods() && clubRemarksInfo.getCommunicationMethods().contains("1")) {
- clubStatistics.setMobileReach(0);
- }
- clubStatistics.setWxReach(1);
- if (null != clubRemarksInfo.getCommunicationMethods() && clubRemarksInfo.getCommunicationMethods().contains("2")) {
- clubStatistics.setWxReach(0);
- }
- clubStatistics.setSex(clubRemarksInfo.getCustomerGender() != null ? clubRemarksInfo.getGroupAddition() : null);
- clubStatistics.setAge(StringUtils.isNotBlank(clubRemarksInfo.getCustomerAge()) ? clubRemarksInfo.getCustomerAge() : null);
- clubStatistics.setFillTime(dateFormat.format(clubRemarksInfo.getAddTime()));
- try {
- clubStatistics.setFirstTime(StringUtils.isNotBlank(clubRemarksInfo.getFirstTime()) ? dateFormat.format(dateFormat.parse(clubRemarksInfo.getFirstTime())) : null);
- clubStatistics.setRecentlyTime(StringUtils.isNotBlank(clubRemarksInfo.getRecentlyTime()) ? dateFormat.format(dateFormat.parse(clubRemarksInfo.getRecentlyTime())) : null);
- } catch (ParseException e) {
- e.printStackTrace();
- }
- }
- }
- return clubStatistics;
- }
- public Map<String, Object> getDemand(Integer clubId, Integer dataType, String demandStart, String demandEnd) {
- SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
- Date date = new Date();
- String endTime = "";
- Calendar calendar = Calendar.getInstance();
- calendar.setTime(date);
- calendar.add(Calendar.DAY_OF_MONTH, -1);
- Date time = calendar.getTime();
- calendar.setTime(time);
- boolean expty = ObjectUtils.isEmpty(demandStart) && ObjectUtils.isEmpty(demandEnd);
- if (expty) {
- endTime = dateFormat.format(time);
- Date start = null;
- String startTime = "";
- demandEnd = endTime;
- // 日期参数为 日
- if (1 == dataType) {
- demandStart = endTime;
- }
- if (2 == dataType) {
- calendar.setTime(time);
- calendar.add(Calendar.MONTH, -1);
- start = calendar.getTime();
- startTime = dateFormat.format(start);
- demandStart = startTime;
- }
- if (3 == dataType) {
- calendar.setTime(time);
- calendar.add(Calendar.MONTH, -6);
- start = calendar.getTime();
- startTime = dateFormat.format(start);
- demandStart = startTime;
- }
- if (4 == dataType) {
- calendar.setTime(time);
- calendar.add(Calendar.YEAR, -1);
- start = calendar.getTime();
- startTime = dateFormat.format(start);
- demandStart = startTime;
- }
- }
- List<String> demandList = new ArrayList<>();
- // 咨询记录
- List<String> clubRemarks = cmPortraitDao.getClubRemarks(clubId, demandStart, demandEnd);
- if (clubRemarks.size() > 0) {
- for (String clubRemark : clubRemarks) {
- if (clubRemark.contains(",")) {
- String[] split = clubRemark.split(",");
- for (String s : split) {
- if (demandList.size() < 10 && StringUtils.isNotBlank(s) && !demandList.contains(s)) {
- demandList.add(s);
- }
- }
- } else {
- if (demandList.size() < 10 && StringUtils.isNotBlank(clubRemark) && !demandList.contains(clubRemark)) {
- demandList.add(clubRemark);
- }
- }
- }
- }
- // 访问记录
- List<String> clubBehaviors = cmPortraitDao.getClubBehavior(clubId, demandStart, demandEnd);
- if (clubBehaviors.size() > 0) {
- for (String clubBehavior : clubBehaviors) {
- if (clubBehavior.contains(",")) {
- String[] split = clubBehavior.split(",");
- for (String s : split) {
- if (demandList.size() < 10 && StringUtils.isNotBlank(s) && !demandList.contains(s)) {
- demandList.add(s);
- }
- }
- } else {
- if (demandList.size() < 10 && StringUtils.isNotBlank(clubBehavior) && !demandList.contains(clubBehavior)) {
- demandList.add(clubBehavior);
- }
- }
- }
- }
- Map<String, Object> map = new HashMap<>();
- map.put("startTime", demandStart);
- map.put("endTime", demandEnd);
- map.put("demandList", demandList);
- return map;
- }
- /**
- * 查询机构画像数据
- *
- * @param cmPortrait
- * @return
- */
- public CmPortrait dataList(CmPortrait cmPortrait) {
- SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
- Date date = new Date();
- String endTime = "";
- 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(cmPortrait.getStartTime()) && ObjectUtils.isEmpty(cmPortrait.getEndTime());
- if (expty) {
- Date start = null;
- String startTime = "";
- cmPortrait.setEndTime(endTime);
- // 日期参数为 日
- if (1 == cmPortrait.getDateType() || 1 == cmPortrait.getDateType()) {
- // cmPortrait.setAccessDate(endTime);
- cmPortrait.setStartTime(endTime);
- // cmPortrait.setEndTime(endTime);
- }
- if (2 == cmPortrait.getDateType()) {
- // cmPortrait.setEndTime(endTime);
- calendar.setTime(time);
- calendar.add(Calendar.MONTH, -1);
- start = calendar.getTime();
- startTime = dateFormat.format(start);
- cmPortrait.setStartTime(startTime);
- }
- if (3 == cmPortrait.getDateType()) {
- // cmPortrait.setEndTime(endTime);
- calendar.setTime(time);
- calendar.add(Calendar.MONTH, -6);
- start = calendar.getTime();
- startTime = dateFormat.format(start);
- cmPortrait.setStartTime(startTime);
- }
- if (4 == cmPortrait.getDateType()) {
- // cmPortrait.setEndTime(endTime);
- calendar.setTime(time);
- calendar.add(Calendar.YEAR, -1);
- start = calendar.getTime();
- startTime = dateFormat.format(start);
- cmPortrait.setStartTime(startTime);
- }
- } else {
- time1 = cmPortrait.getStartTime();
- time2 = cmPortrait.getEndTime();
- }
- // 机构订单
- if (0 == cmPortrait.getType() || 4 == cmPortrait.getType()) {
- if ((0 == cmPortrait.getDateType() || 1 == cmPortrait.getDateType()) && expty) {
- cmPortrait.setEndTime(dateFormat.format(date));
- }
- if (cmPortrait.getEndTime().equals(endTime)) {
- cmPortrait.setEndTime(dateFormat.format(date));
- }
- int ordinary = 0, secondHand = 0, rebate = 0, partialRefund = 0, total = 0; //, fullRefund = 0, closed = 0
- double orderScopeTotalFee = 0.0;
- ArrayList<OrderPortrait> orderPortraits = new ArrayList<>();
- OrderPortrait orderPortrait = new OrderPortrait();
- List<NewOrder> orderList = cmPortraitDao.selOrderList(cmPortrait);
- int length = orderList.size();
- NumberFormat instance = NumberFormat.getInstance();
- instance.setMaximumFractionDigits(2);
- if (length != 0) {
- for (NewOrder order : orderList) {
- // 普通订单
- if (("0".equals(order.getSecondHandOrderFlag()) || StringUtils.isEmpty(order.getSecondHandOrderFlag()))
- && (!"1".equals(order.getRebateFlag()) || "".equals(order.getRebateFlag()) || StringUtils.isEmpty(order.getRebateFlag()))
- && (!"2".equals(order.getRefundType()) || "".equals(order.getRefundType()) || StringUtils.isEmpty(order.getRefundType()))
- && !"4".equals(order.getStatus())) {
- ordinary++;
- }
- // 二手订单
- if ("1".equals(order.getSecondHandOrderFlag()) && !"1".equals(order.getRebateFlag())
- && (!"2".equals(order.getRefundType())) && !"4".equals(order.getStatus())) {
- secondHand++;
- }
- // 返佣订单
- /*if ("1".equals(order.getRebateFlag()) &&
- (!"2".equals(order.getRefundType()) || StringUtils.isEmpty(order.getRefundType())) && !"4".equals(order.getStatus())) {
- rebate++;
- }*/
- // 部分退款
- /*if ("1".equals(order.getRefundType()) && !"4".equals(order.getStatus())) {
- partialRefund++;
- }*/
- // 全部退款
- /*if ("2".equals(order.getRefundType()) && !"6".equals(order.getStatus())) {
- fullRefund++;
- }
- // 已关闭
- if ("6".equals(order.getStatus()) || StringUtils.isEmpty(order.getStatus())) {
- closed++;
- }*/
- orderScopeTotalFee += order.getPayTotalFee();
- }
- /*cmPortrait.setOrderTotalAmount(orderList.get(0).getTotalMoney());
- cmPortrait.setOrderTotal(orderList.get(0).getNumbers());*/
- cmPortrait.setOrderTotal(length);
- // 当前单位订单总额
- cmPortrait.setOrderScopeTotalFee(Double.valueOf(String.format("%.2f", orderScopeTotalFee)));
- orderPortrait.setValue(ordinary);
- if (ordinary != 0) {
- orderPortrait.setName("普通订单 【" + instance.format((float) ordinary / (float) length * 100) + "%】 【" + ordinary + "个】");
- } else {
- orderPortrait.setName("普通订单 【 0 %】 【" + ordinary + "个】");
- }
- orderPortraits.add(orderPortrait);
- orderPortrait = new OrderPortrait();
- orderPortrait.setValue(secondHand);
- if (secondHand != 0) {
- orderPortrait.setName("二手订单 【" + instance.format((float) secondHand / (float) length * 100) + "%】 【" + secondHand + "个】");
- } else {
- orderPortrait.setName("二手订单 【 0 %】 【" + secondHand + "个】");
- }
- orderPortraits.add(orderPortrait);
- /*orderPortrait = new OrderPortrait();
- orderPortrait.setValue(rebate);
- if (rebate != 0) {
- orderPortrait.setName("返佣订单 【" + instance.format((float) rebate / (float) length * 100) + "%】 【" + rebate + "个】");
- } else {
- orderPortrait.setName("返佣订单 【 0 %】 【" + rebate + "个】");
- }
- orderPortraits.add(orderPortrait);*/
- /*orderPortrait = new OrderPortrait();
- orderPortrait.setValue(partialRefund);
- if (partialRefund != 0) {
- orderPortrait.setName("部分退款订单 【" + instance.format((float) partialRefund / (float) length * 100) + "%】 【" + partialRefund + "个】");
- } else {
- orderPortrait.setName("部分退款订单 【 0 %】 【" + partialRefund + "个】");
- }
- orderPortraits.add(orderPortrait);*/
- /*orderPortrait = new OrderPortrait();
- orderPortrait.setValue(fullRefund);
- if (fullRefund != 0) {
- orderPortrait.setName("全部退款订单 【" + instance.format((float)fullRefund / (float) length * 100) + "%】 【" + fullRefund + "个】");
- } else {
- orderPortrait.setName("全部退款订单 【 0 %】 【" + fullRefund + "个】");
- }
- orderPortraits.add(orderPortrait);
- orderPortrait = new OrderPortrait();
- orderPortrait.setValue(closed);
- if (closed != 0) {
- orderPortrait.setName("已关闭订单 【" + instance.format((float)closed / (float) length * 100) + "%】 【" + closed + "个】");
- } else {
- orderPortrait.setName("已关闭订单 【 0 %】 【" + closed + "个】");
- }
- orderPortraits.add(orderPortrait);*/
- cmPortrait.setOrderPortrait(orderPortraits);
- }
- // 总量
- total = ordinary + secondHand + rebate + partialRefund; // + fullRefund + closed
- cmPortrait.setOrderScopeNum(total);
- calendar.setTime(date);
- calendar.add(Calendar.DAY_OF_MONTH, -1);
- time = calendar.getTime();
- endTime = dateFormat.format(time);
- cmPortrait.setEndTime(endTime);
- }
- // 搜索关键词
- if (1 == cmPortrait.getType() || 4 == cmPortrait.getType()) {
- List<CmBehaviorRecord> behaviorRecordList = cmPortraitDao.selBehaviorList(cmPortrait);
- int keywordsTotal = 0;
- ArrayList<Integer> integers = new ArrayList<>();
- ArrayList<String> strings = new ArrayList<>();
- if (behaviorRecordList.size() != 0) {
- for (CmBehaviorRecord record : behaviorRecordList) {
- keywordsTotal += record.getNumber();
- integers.add(record.getNumber());
- if (!ObjectUtils.isEmpty(record.getPageLabel())) {
- strings.add(record.getPageLabel());
- } else {
- strings.add("未知");
- }
- cmPortrait.setTotalkeywords(behaviorRecordList.get(0).getNumbers());
- cmPortrait.setBehaviorValue(integers);
- cmPortrait.setBehaviorType(strings);
- }
- }
- cmPortrait.setKeyWordsScopeNum(keywordsTotal);
- }
- // 咨询记录
- if (2 == cmPortrait.getType() || 4 == cmPortrait.getType()) {
- if ((0 == cmPortrait.getDateType() || 1 == cmPortrait.getDateType()) && expty) {
- cmPortrait.setEndTime(dateFormat.format(date));
- }
- if (cmPortrait.getEndTime().equals(endTime)) {
- cmPortrait.setEndTime(dateFormat.format(date));
- }
- List<CmClubRemarks> remarksList = cmPortraitDao.selRemarksList(cmPortrait);
- // int remarksTotal = 0;
- ArrayList<Integer> integers = new ArrayList<>();
- ArrayList<String> strings = new ArrayList<>();
- ArrayList<String> strRemark = new ArrayList<>();
- ArrayList<String> remarkAll = new ArrayList<>();
- int number = 0;
- if (remarksList.size() != 0) {
- for (CmClubRemarks remarks : remarksList) {
- String[] split = remarks.getRemarks().split(",");
- for (String str : split) {
- if (!strRemark.contains(str)) {
- strRemark.add(str);
- }
- remarkAll.add(str);
- }
- }
- for (String str : strRemark) {
- for (int i = 0; i < remarkAll.size(); i++) {
- if (str.equals(remarkAll.get(i))) {
- number++;
- }
- }
- integers.add(number);
- // remarksTotal += number;
- if (!ObjectUtils.isEmpty(str)) {
- strings.add(str);
- } else {
- strings.add("未知");
- }
- number = 0;
- }
- // 数组根据出现次数排序
- int temp = 0;
- String strTemp = "";
- for (int i = 0; i < integers.size() - 1; i++) {
- for (int k = 0; k < integers.size() - 1 - i; k++) {
- if (integers.get(k) > integers.get(k + 1)) {
- temp = integers.get(k);
- integers.set(k, integers.get(k + 1));
- integers.set(k + 1, temp);
- strTemp = strings.get(k);
- strings.set(k, strings.get(k + 1));
- strings.set(k + 1, strTemp);
- }
- }
- }
- // cmPortrait.setRemarksTotal(remarksList.get(0).getNumbers());
- cmPortrait.setRemarksValue(integers);
- cmPortrait.setRemarksType(strings);
- }
- cmPortrait.setRemarksScopeNum(remarksList.size());
- calendar.setTime(date);
- calendar.add(Calendar.DAY_OF_MONTH, -1);
- time = calendar.getTime();
- endTime = dateFormat.format(time);
- cmPortrait.setEndTime(endTime);
- }
- // 访问记录
- if (3 == cmPortrait.getType() || 4 == cmPortrait.getType()) {
- List<CmBehaviorRecord> pageTypeList = cmPortraitDao.selBehaviorPageTypeList(cmPortrait);
- ArrayList<Integer> integers = new ArrayList<>();
- ArrayList<String> strings = new ArrayList<>();
- if (pageTypeList.size() != 0) {
- for (CmBehaviorRecord record : pageTypeList) {
- integers.add(record.getNumbers());
- strings.add(record.getPageLabel());
- }
- cmPortrait.setPageTypeValue(integers);
- cmPortrait.setPageType(strings);
- cmPortrait.setVisitNum(pageTypeList.size());
- }
- }
- if (!expty) {
- cmPortrait.setStartTime(time1);
- if ((0 == cmPortrait.getDateType() || 1 == cmPortrait.getDateType()) && ObjectUtils.isEmpty(cmPortrait.getStartTime())) {
- cmPortrait.setStartTime(time2);
- }
- cmPortrait.setEndTime(time2);
- }
- return cmPortrait;
- }
- /**
- * 设置机构资料完整度
- * @param clubStatistics
- */
- public void setClubNum(ClubStatistics clubStatistics) {
- Integer number = 0;
- if (null != clubStatistics) {
- // 计算资料完整度
- if (StringUtils.isNotBlank(clubStatistics.getName())) {
- number += 10;
- }
- if (StringUtils.isNotBlank(clubStatistics.getLinkMan())) {
- number += 10;
- }
- if (StringUtils.isNotBlank(clubStatistics.getContractMobile())) {
- number += 10;
- }
- if (StringUtils.isNotBlank(clubStatistics.getLinkManIdentity())) {
- number += 10;
- }
- if (StringUtils.isNotBlank(clubStatistics.getAddress())) {
- number += 10;
- }
- if (StringUtils.isNotBlank(clubStatistics.getBusinessLicenseImage())) {
- number += 10;
- }
- if (StringUtils.isNotBlank(clubStatistics.getUserIdentity())) {
- number += 10;
- }
- if (StringUtils.isNotBlank(clubStatistics.getSname())) {
- number += 3;
- }
- if (StringUtils.isNotBlank(clubStatistics.getContractEmail())) {
- number += 5;
- }
- if (StringUtils.isNotBlank(clubStatistics.getContractPhone())) {
- number += 4;
- }
- if (StringUtils.isNotBlank(clubStatistics.getFax())) {
- number += 3;
- }
- if (StringUtils.isNotBlank(clubStatistics.getHeadpic())) {
- number += 5;
- }
- if (StringUtils.isNotBlank(clubStatistics.getSocialCreditCode())) {
- number += 5;
- }
- if (StringUtils.isNotBlank(clubStatistics.getInfo())) {
- number += 5;
- }
- }
- clubStatistics.setNumber(number);
- clubStatistics.setClubDataIntegrity(number + "%");
- }
- }
|