|
@@ -1,18 +1,33 @@
|
|
|
package com.ruoyi.project.business.service.impl;
|
|
|
|
|
|
import static com.ruoyi.project.business.enums.account.AccountStatusEnum.CONVERTED_PROJECT;
|
|
|
+import static org.apache.commons.collections4.CollectionUtils.isNotEmpty;
|
|
|
|
|
|
import cn.hutool.core.collection.CollUtil;
|
|
|
import cn.hutool.core.date.DatePattern;
|
|
|
import cn.hutool.core.date.DateUtil;
|
|
|
import cn.hutool.core.thread.ThreadUtil;
|
|
|
import cn.hutool.core.util.IdUtil;
|
|
|
+import com.alibaba.excel.EasyExcel;
|
|
|
+import com.alibaba.excel.ExcelWriter;
|
|
|
+import com.alibaba.excel.metadata.Head;
|
|
|
+import com.alibaba.excel.write.builder.ExcelWriterBuilder;
|
|
|
+import com.alibaba.excel.write.handler.SheetWriteHandler;
|
|
|
+import com.alibaba.excel.write.handler.WriteHandler;
|
|
|
+import com.alibaba.excel.write.handler.context.SheetWriteHandlerContext;
|
|
|
+import com.alibaba.excel.write.merge.AbstractMergeStrategy;
|
|
|
+import com.alibaba.excel.write.merge.LoopMergeStrategy;
|
|
|
+import com.alibaba.excel.write.merge.OnceAbsoluteMergeStrategy;
|
|
|
+import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
|
|
|
+import com.alibaba.excel.write.metadata.holder.WriteWorkbookHolder;
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.Constants;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
import com.github.pagehelper.PageInfo;
|
|
|
import com.google.common.collect.Lists;
|
|
|
+import com.google.common.collect.Maps;
|
|
|
import com.ruoyi.common.enums.DelFlag;
|
|
|
import com.ruoyi.common.enums.ProjectStatus;
|
|
|
import com.ruoyi.common.enums.SerialNumberPrefix;
|
|
@@ -22,13 +37,7 @@ import com.ruoyi.common.importExcel.excel.tempInfo.ProjectEquipmentInfo;
|
|
|
import com.ruoyi.common.importExcel.excel.tempInfo.ProjectFromInfo;
|
|
|
import com.ruoyi.common.importExcel.utils.ExcelUtils;
|
|
|
import com.ruoyi.common.importExcel.utils.ExcelUtils.UploadResult;
|
|
|
-import com.ruoyi.common.utils.DateUtils;
|
|
|
-import com.ruoyi.common.utils.DictUtils;
|
|
|
-import com.ruoyi.common.utils.LocalUtils;
|
|
|
-import com.ruoyi.common.utils.MessageUtils;
|
|
|
-import com.ruoyi.common.utils.SecurityUtils;
|
|
|
-import com.ruoyi.common.utils.SpecialCharacterEscaper;
|
|
|
-import com.ruoyi.common.utils.StringUtils;
|
|
|
+import com.ruoyi.common.utils.*;
|
|
|
import com.ruoyi.common.utils.bean.BeanUtils;
|
|
|
import com.ruoyi.common.utils.email.BaseEmailEntity;
|
|
|
import com.ruoyi.common.utils.email.EmailUtil;
|
|
@@ -66,23 +75,22 @@ import com.ruoyi.project.system.domain.SysDictData;
|
|
|
import com.ruoyi.project.system.domain.SysUser;
|
|
|
import com.ruoyi.project.system.mapper.SysUserMapper;
|
|
|
import com.ruoyi.project.system.service.ISysUserService;
|
|
|
+
|
|
|
+import java.io.IOException;
|
|
|
import java.math.BigDecimal;
|
|
|
import java.text.DecimalFormat;
|
|
|
import java.time.LocalDate;
|
|
|
import java.time.LocalDateTime;
|
|
|
import java.time.LocalTime;
|
|
|
-import java.util.ArrayList;
|
|
|
-import java.util.Collections;
|
|
|
-import java.util.Date;
|
|
|
-import java.util.HashMap;
|
|
|
-import java.util.List;
|
|
|
-import java.util.Locale;
|
|
|
-import java.util.Map;
|
|
|
-import java.util.Objects;
|
|
|
-import java.util.Optional;
|
|
|
+import java.util.*;
|
|
|
import java.util.stream.Collectors;
|
|
|
import javax.annotation.Resource;
|
|
|
+import javax.servlet.http.HttpServletResponse;
|
|
|
+
|
|
|
import org.apache.commons.collections4.CollectionUtils;
|
|
|
+import org.apache.poi.ss.usermodel.Cell;
|
|
|
+import org.apache.poi.ss.usermodel.Sheet;
|
|
|
+import org.apache.poi.ss.util.CellRangeAddress;
|
|
|
import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
import org.springframework.context.MessageSource;
|
|
@@ -152,6 +160,9 @@ public class TcProjectServiceImpl extends ServiceImpl<TcProjectMapper, TcProject
|
|
|
@Resource
|
|
|
private ITcProjectEquipmentHistoryService tcProjectEquipmentHistoryService;
|
|
|
|
|
|
+ @Resource
|
|
|
+ private ITbCountryService tbCountryService;
|
|
|
+
|
|
|
/**
|
|
|
* 查询项目管理
|
|
|
*
|
|
@@ -353,7 +364,7 @@ public class TcProjectServiceImpl extends ServiceImpl<TcProjectMapper, TcProject
|
|
|
List<Long> projectIds = projects.stream().map(TcProject::getProjectId).collect(Collectors.toList());
|
|
|
|
|
|
List<TcProject> quotationInfo =
|
|
|
- CollectionUtils.isNotEmpty(projectIds) ? tcProjectMapper.selectQuotationInfo(projectIds)
|
|
|
+ isNotEmpty(projectIds) ? tcProjectMapper.selectQuotationInfo(projectIds)
|
|
|
: new ArrayList<>();
|
|
|
Map<Long, List<TcProject>> quotationMap = quotationInfo.stream()
|
|
|
.collect(Collectors.groupingBy(TcProject::getProjectId));
|
|
@@ -361,7 +372,7 @@ public class TcProjectServiceImpl extends ServiceImpl<TcProjectMapper, TcProject
|
|
|
for (TcProject project : projects) {
|
|
|
project.setRowKey(String.valueOf(project.getProjectId()));
|
|
|
List<TcProject> children = quotationMap.get(project.getProjectId());
|
|
|
- if (CollectionUtils.isNotEmpty(children)) {
|
|
|
+ if (isNotEmpty(children)) {
|
|
|
if (children.size() > 1) {
|
|
|
for (TcProject child : children) {
|
|
|
BeanUtils.copyProperties(project, child, "rowKey", "elevatorNumber", "elevatorType",
|
|
@@ -402,7 +413,7 @@ public class TcProjectServiceImpl extends ServiceImpl<TcProjectMapper, TcProject
|
|
|
}
|
|
|
List<TcProject> tcProjects = tcProjectMapper.selectTcProjectListExport(tcProject);
|
|
|
Map<Long,String> tcLeadForRelatedMap= new HashMap<>();
|
|
|
- if(CollectionUtils.isNotEmpty(tcProjects)){
|
|
|
+ if(isNotEmpty(tcProjects)){
|
|
|
List<Long> accountIdList = tcProjects.stream().map(item->item.getAccountId()).distinct() .collect(Collectors.toList());
|
|
|
tcLeadForRelatedMap = suppleProjectExportVO(tcProjects.get(0).getLanguage(),accountIdList);
|
|
|
}
|
|
@@ -581,7 +592,7 @@ public class TcProjectServiceImpl extends ServiceImpl<TcProjectMapper, TcProject
|
|
|
tcProjectHistory.setVersion(newVersion);
|
|
|
tcProjectHistoryService.insertTcProjectHistory(tcProjectHistory);
|
|
|
|
|
|
- if (CollectionUtils.isNotEmpty(machineList)) {
|
|
|
+ if (isNotEmpty(machineList)) {
|
|
|
List<TcProjectEquipmentHistory> equipmentHistories = machineList.stream().map(machine -> {
|
|
|
TcProjectEquipmentHistory history = new TcProjectEquipmentHistory();
|
|
|
BeanUtils.copyBeanProp(history, machine);
|
|
@@ -705,7 +716,7 @@ public class TcProjectServiceImpl extends ServiceImpl<TcProjectMapper, TcProject
|
|
|
tcProjectHistory.setVersion(newVersion);
|
|
|
tcProjectHistoryService.insertTcProjectHistory(tcProjectHistory);
|
|
|
|
|
|
- if (CollectionUtils.isNotEmpty(machineList)) {
|
|
|
+ if (isNotEmpty(machineList)) {
|
|
|
List<TcProjectEquipmentHistory> equipmentHistories = machineList.stream().map(machine -> {
|
|
|
TcProjectEquipmentHistory history = new TcProjectEquipmentHistory();
|
|
|
BeanUtils.copyBeanProp(history, machine);
|
|
@@ -775,7 +786,7 @@ public class TcProjectServiceImpl extends ServiceImpl<TcProjectMapper, TcProject
|
|
|
|
|
|
List<TcProjectEquipment> machineList = tcProjectEquipmentService.list(Wrappers.<TcProjectEquipment>lambdaQuery()
|
|
|
.eq(TcProjectEquipment::getProjectId, exist.getProjectId()).eq(TcProjectEquipment::getDelFlag, DelFlagEnum.NORMAL.getValue()));
|
|
|
- if (CollectionUtils.isNotEmpty(machineList)) {
|
|
|
+ if (isNotEmpty(machineList)) {
|
|
|
List<TcProjectEquipmentHistory> equipmentHistories = machineList.stream().map(machine -> {
|
|
|
TcProjectEquipmentHistory history = new TcProjectEquipmentHistory();
|
|
|
BeanUtils.copyBeanProp(history, machine);
|
|
@@ -818,7 +829,7 @@ public class TcProjectServiceImpl extends ServiceImpl<TcProjectMapper, TcProject
|
|
|
|
|
|
List<TcProjectEquipment> machineList = tcProjectEquipmentService.list(Wrappers.<TcProjectEquipment>lambdaQuery()
|
|
|
.eq(TcProjectEquipment::getProjectId, tcProject.getProjectId()).eq(TcProjectEquipment::getDelFlag, DelFlagEnum.NORMAL.getValue()));
|
|
|
- if (CollectionUtils.isNotEmpty(machineList)) {
|
|
|
+ if (isNotEmpty(machineList)) {
|
|
|
List<TcProjectEquipmentHistory> equipmentHistories = machineList.stream().map(machine -> {
|
|
|
TcProjectEquipmentHistory history = new TcProjectEquipmentHistory();
|
|
|
BeanUtils.copyBeanProp(history, machine);
|
|
@@ -961,7 +972,7 @@ public class TcProjectServiceImpl extends ServiceImpl<TcProjectMapper, TcProject
|
|
|
// 同时变更区域,如果变更的目标用户有多个区域权限,取有关联的第一个
|
|
|
TcProject projectDb = tcProjectMapper.selectTcProjectByProjectId(tcProject.getProjectId());
|
|
|
List<Long> areaIdList = user.getAreaIdList();
|
|
|
- if (CollectionUtils.isNotEmpty(areaIdList)) {
|
|
|
+ if (isNotEmpty(areaIdList)) {
|
|
|
Long areaId = projectDb.getAreaId();
|
|
|
List<TbArea> areas = tbAreaMapper.selectListByIdsAndAncestorId(areaIdList, areaId);
|
|
|
// Map<Long, List<String>> area = areas.stream().collect(Collectors.toMap(TbArea::getAreaId, item -> Arrays.stream(item.getPermissionChar().split(",")).filter(StringUtils::isNotBlank).collect(Collectors.toList())));
|
|
@@ -985,7 +996,7 @@ public class TcProjectServiceImpl extends ServiceImpl<TcProjectMapper, TcProject
|
|
|
|
|
|
List<TcProjectEquipment> machineList = tcProjectEquipmentService.list(Wrappers.<TcProjectEquipment>lambdaQuery()
|
|
|
.eq(TcProjectEquipment::getProjectId, exist.getProjectId()).eq(TcProjectEquipment::getDelFlag, DelFlagEnum.NORMAL.getValue()));
|
|
|
- if (CollectionUtils.isNotEmpty(machineList)) {
|
|
|
+ if (isNotEmpty(machineList)) {
|
|
|
List<TcProjectEquipmentHistory> equipmentHistories = machineList.stream().map(machine -> {
|
|
|
TcProjectEquipmentHistory history = new TcProjectEquipmentHistory();
|
|
|
BeanUtils.copyBeanProp(history, machine);
|
|
@@ -1509,22 +1520,102 @@ public class TcProjectServiceImpl extends ServiceImpl<TcProjectMapper, TcProject
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public List<AgentTargetProgressVo> getAgentTargetProgressList(AgentCompleteOrder agentCompleteOrder) {
|
|
|
+ public List<Map<String, Object>> getAgentTargetProgressList(AgentCompleteOrder agentCompleteOrder) {
|
|
|
if (StringUtils.isNotEmpty(agentCompleteOrder.getCity())) {
|
|
|
agentCompleteOrder.setCity(agentCompleteOrder.getCity().replaceAll("%", "/%").replaceAll("_", "/_"));
|
|
|
}
|
|
|
- List<AgentTargetProgressVo> agentTargetProgressVoList = tcProjectMapper.getAgentTargetProgressList(agentCompleteOrder);
|
|
|
- for (AgentTargetProgressVo agentTargetProgressVo : agentTargetProgressVoList) {
|
|
|
- AgentTargetProgressVo agentCompleteOrder1 = new AgentTargetProgressVo();
|
|
|
- agentCompleteOrder1.setAgentId(agentTargetProgressVo.getAgentId());
|
|
|
- agentCompleteOrder1.setYearParam(agentCompleteOrder.getYearParam());
|
|
|
- agentCompleteOrder1.setTargetElevatorCount(agentTargetProgressVo.getTargetElevatorCount());
|
|
|
- List<AgentTargetProgressVo> listSub = tcProjectMapper.getAgentTargetProgressListSub(agentCompleteOrder1);
|
|
|
- agentTargetProgressVo.setAgentTargetProgressVoList(listSub);
|
|
|
- }
|
|
|
+ List<Map<String, Object>> agentTargetProgressVoList = tcProjectMapper.getAgentTargetProgressList(agentCompleteOrder);
|
|
|
+
|
|
|
+ // 获取区域名称
|
|
|
+ List<String> countryIds = Lists.newArrayList();
|
|
|
+ agentTargetProgressVoList.forEach(item -> {
|
|
|
+ countryIds.addAll(Arrays.stream(StringUtils.defaultIfBlank((String) item.get("countryId"), Constants.EMPTY).split(",")).collect(Collectors.toList()));
|
|
|
+ });
|
|
|
+ List<Long> ids = countryIds.stream().filter(StringUtils::isNotBlank).map(Long::valueOf).collect(Collectors.toList());
|
|
|
+ List<Long> areaIds = agentTargetProgressVoList.stream().map(item -> (Long)item.get("areaId")).collect(Collectors.toList());
|
|
|
+ Map<String, String> countryNameMap = isNotEmpty(ids) ? tbCountryService.listByIds(ids).stream().collect(Collectors.toMap(item -> item.getCountryId().toString(), LocalUtils.localCountryNameFun())): Maps.newHashMap();
|
|
|
+ Map<String, String> areaNameMap = isNotEmpty(areaIds) ? tbAreaMapper.selectAreaListByIds(areaIds).stream().collect(Collectors.toMap(item -> item.getAreaId().toString(), LocalUtils.localAreaNameFun())) : new HashMap<>();
|
|
|
+ agentTargetProgressVoList.forEach(item -> {
|
|
|
+ item.put("areaName", areaNameMap.get(item.get("areaId").toString()));
|
|
|
+ String countryId = StringUtils.defaultIfBlank((String) item.get("countryId"), Constants.EMPTY);
|
|
|
+ item.put("countryName", Arrays.stream(countryId.split(",")).filter(StringUtils::isNotBlank).map(countryNameMap::get).collect(Collectors.joining(",")));
|
|
|
+ });
|
|
|
+
|
|
|
return agentTargetProgressVoList;
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public void exportCustomerCompleteOrder(AgentCompleteOrder agentCompleteOrder) {
|
|
|
+
|
|
|
+ List<List<String>> tableData = new ArrayList<>();
|
|
|
+ List<List<String>> header = Lists.newArrayList(
|
|
|
+ Lists.newArrayList("区域", "国家", "城市", "代理商名", "年销售目标台数", "代理商等级"),
|
|
|
+ Lists.newArrayList("", "", "", "", "", "")
|
|
|
+ );
|
|
|
+
|
|
|
+ // 周数据
|
|
|
+ List<Integer> weeks = isNotEmpty(agentCompleteOrder.getWeeks()) ?
|
|
|
+ agentCompleteOrder.getWeeks().stream().sorted().collect(Collectors.toList()) : new ArrayList<>();
|
|
|
+ List<Map<String, Object>> data = getAgentTargetProgressList(agentCompleteOrder);
|
|
|
+ weeks.forEach(week -> {
|
|
|
+ header.get(0).addAll(Lists.newArrayList(week.toString(), ""));
|
|
|
+ header.get(1).addAll(Lists.newArrayList("出货台数", "完成率"));
|
|
|
+ });
|
|
|
+ tableData.addAll(header);
|
|
|
+
|
|
|
+ data.forEach(item -> {
|
|
|
+ List<String> row = Lists.newArrayList(
|
|
|
+ (String)item.get("areaName"),
|
|
|
+ (String)item.get("countryName"),
|
|
|
+ (String)item.get("city"),
|
|
|
+ (String)item.get("agentName"),
|
|
|
+ (String)item.get("agentName"),
|
|
|
+ (String)item.get("agentLevel")
|
|
|
+ );
|
|
|
+ weeks.forEach(week -> {
|
|
|
+ row.add(item.get("count_" + week).toString());
|
|
|
+ row.add(item.get("percent_" + week).toString());
|
|
|
+ });
|
|
|
+ tableData.add(row);
|
|
|
+ });
|
|
|
+
|
|
|
+ if (!agentCompleteOrder.isShowColumn()){
|
|
|
+ tableData.forEach(row -> row.remove(0));
|
|
|
+ }
|
|
|
+
|
|
|
+ //表头单元格合并
|
|
|
+ WriteHandler mergeStrategy = new SheetWriteHandler() {
|
|
|
+ @Override
|
|
|
+ public void afterSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) {
|
|
|
+ List<String> weekInfo = weeks.stream().map(String::valueOf).collect(Collectors.toList());
|
|
|
+ for (int i = 0; i < tableData.get(0).size(); i++) {
|
|
|
+ String val = tableData.get(0).get(i);
|
|
|
+ if (StringUtils.isBlank(val)){
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ CellRangeAddress cellRangeAddress;
|
|
|
+ if (weekInfo.contains(val)){
|
|
|
+ cellRangeAddress = new CellRangeAddress(0, 0, i, i + 1);
|
|
|
+ } else {
|
|
|
+ cellRangeAddress = new CellRangeAddress(0, 1, i, i);
|
|
|
+ }
|
|
|
+ writeSheetHolder.getSheet().addMergedRegionUnsafe(cellRangeAddress);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ };
|
|
|
+
|
|
|
+ // 返回生成的excel文件
|
|
|
+ HttpServletResponse response = ServletUtils.getResponse();
|
|
|
+ response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
|
|
|
+ response.setCharacterEncoding("utf-8");
|
|
|
+ try (ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).registerWriteHandler(mergeStrategy).build()) {
|
|
|
+ excelWriter.write(tableData, EasyExcel.writerSheet(agentCompleteOrder.getYearParam() + "代理商目标管理进度表").build());
|
|
|
+ } catch (IOException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ throw new ServiceException("导出失败");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
private TcProject convert2Project(ProjectFromInfo helper) {
|
|
|
TcProject project = new TcProject();
|
|
|
project.setAccountId(helper.getAccountId());
|