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 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 demandList = new ArrayList<>(); // 咨询记录 List 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 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 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 orderPortraits = new ArrayList<>(); OrderPortrait orderPortrait = new OrderPortrait(); List 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 behaviorRecordList = cmPortraitDao.selBehaviorList(cmPortrait); int keywordsTotal = 0; ArrayList integers = new ArrayList<>(); ArrayList 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 remarksList = cmPortraitDao.selRemarksList(cmPortrait); // int remarksTotal = 0; ArrayList integers = new ArrayList<>(); ArrayList strings = new ArrayList<>(); ArrayList strRemark = new ArrayList<>(); ArrayList 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 pageTypeList = cmPortraitDao.selBehaviorPageTypeList(cmPortrait); ArrayList integers = new ArrayList<>(); ArrayList 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 + "%"); } }