Merge remote-tracking branch 'origin/master'

# Conflicts:
#	ad-platform-manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/impl/UserServiceImpl.java
master
bynt 2 years ago
commit 46f2b975b8

@ -0,0 +1,51 @@
package com.baiye.config;
import com.wf.captcha.base.Captcha;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
/**
* {@link ArithmeticCaptchaRewrite}
*/
public abstract class ArithmeticCaptchaAbstractRewrite extends Captcha {
private String arithmeticString;
public ArithmeticCaptchaAbstractRewrite() {
this.setLen(2);
}
protected char[] alphas() {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < this.len; ++i) {
sb.append(num(10));
if (i < this.len - 1) {
sb.append("+");
}
}
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("javascript");
try {
this.chars = String.valueOf(engine.eval(sb.toString().replaceAll("x", "*")));
} catch (ScriptException var5) {
var5.printStackTrace();
}
sb.append("=?");
this.arithmeticString = sb.toString();
return this.chars.toCharArray();
}
public String getArithmeticString() {
this.checkAlpha();
return this.arithmeticString;
}
public void setArithmeticString(String arithmeticString) {
this.arithmeticString = arithmeticString;
}
}

@ -0,0 +1,82 @@
package com.baiye.config;
import java.awt.Color;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.OutputStream;
import javax.imageio.ImageIO;
/**
* {@link ArithmeticCaptchaAbstractRewrite}
*/
public class ArithmeticCaptchaRewrite extends ArithmeticCaptchaAbstractRewrite {
public ArithmeticCaptchaRewrite() {
}
public ArithmeticCaptchaRewrite(int width, int height) {
this();
this.setWidth(width);
this.setHeight(height);
}
public ArithmeticCaptchaRewrite(int width, int height, int len) {
this(width, height);
this.setLen(len);
}
public ArithmeticCaptchaRewrite(int width, int height, int len, Font font) {
this(width, height, len);
this.setFont(font);
}
public boolean out(OutputStream out) {
this.checkAlpha();
return this.graphicsImage(this.getArithmeticString().toCharArray(), out);
}
public String toBase64() {
return this.toBase64("data:image/png;base64,");
}
private boolean graphicsImage(char[] strs, OutputStream out) {
try {
BufferedImage bi = new BufferedImage(this.width, this.height, 1);
Graphics2D g2d = (Graphics2D)bi.getGraphics();
g2d.setColor(Color.WHITE);
g2d.fillRect(0, 0, this.width, this.height);
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
this.drawOval(2, g2d);
g2d.setFont(this.getFont());
FontMetrics fontMetrics = g2d.getFontMetrics();
int fW = this.width / strs.length;
int fSp = (fW - (int)fontMetrics.getStringBounds("8", g2d).getWidth()) / 2;
for(int i = 0; i < strs.length; ++i) {
g2d.setColor(this.color());
int fY = this.height - (this.height - (int)fontMetrics.getStringBounds(String.valueOf(strs[i]), g2d).getHeight() >> 1);
g2d.drawString(String.valueOf(strs[i]), i * fW + fSp + 3, fY - 3);
}
g2d.dispose();
ImageIO.write(bi, "png", out);
out.flush();
boolean var20 = true;
return var20;
} catch (IOException var18) {
var18.printStackTrace();
} finally {
try {
out.close();
} catch (IOException var17) {
var17.printStackTrace();
}
}
return false;
}
}

@ -48,7 +48,8 @@ public class KaptchaTextCreator {
switch (captchaConfig.getCodeType()) {
case arithmetic:
// 算术类型 https://gitee.com/whvse/EasyCaptcha
captcha = new ArithmeticCaptcha(captchaConfig.getWidth(), captchaConfig.getHeight());
//captcha = new ArithmeticCaptcha(captchaConfig.getWidth(), captchaConfig.getHeight());
captcha = new ArithmeticCaptchaRewrite(captchaConfig.getWidth(), captchaConfig.getHeight());
// 几位数运算,默认是两位
captcha.setLen(captchaConfig.getLength());
break;

@ -1,9 +1,7 @@
package com.baiye.modules.platform.rest;
import com.baiye.annotation.Inner;
import com.baiye.http.CommonResponse;
import com.baiye.http.ResponseCode;
import com.baiye.model.dto.ClueDto;
import com.baiye.model.dto.OrganizeQueryCriteria;
import com.baiye.modules.platform.domain.Organize;
import com.baiye.modules.platform.domain.OrganizeUser;

@ -133,6 +133,7 @@ public interface OrganizeService {
Map<Long, String> findNameById(Set<Long> organizeIds);
Map<Long, Map<String, Object>> findMemberIdByOrganizeIds(List<Long> organizeIds);
/**
* idid()
*/

@ -551,7 +551,6 @@ public class OrganizeServiceImpl implements OrganizeService {
// 判断角色,管理员只查组长角色的用户
if (roleId.equals(RoleNumberConstants.MINUS_EIGHT_NUMBER) || roleId.equals(RoleNumberConstants.MINUS_TEN_NUMBER)) {
roles.add(RoleNumberConstants.MINUS_NINE_NUMBER);
roles.add(RoleNumberConstants.MINUS_TEN_NUMBER);
} else {
roles.add(RoleNumberConstants.MINUS_FIVE_NUMBER);
}

@ -5,7 +5,6 @@ import com.baiye.modules.report.entity.dto.StatisticalReportDTO;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;
/**
* @author wujingtao
@ -15,25 +14,17 @@ public interface QueryReportService {
/**
*
*
* @return
*/
CommonResponse<Object> getReportByAll();
/**
*
*
* @param s
* @return
*/
CommonResponse<Object> getReportByTask(StatisticalReportDTO s);
/**
*
*
* @param response
* @param s
*/
void downloadTaskReport(HttpServletResponse response, StatisticalReportDTO s);
@ -41,79 +32,41 @@ public interface QueryReportService {
/**
*
*
* @param s
* @return
*/
CommonResponse<Object> getReportByOrganize(StatisticalReportDTO s);
/**
*
*
* @param response
* @param s
*/
void downloadOrganizeReport(HttpServletResponse response, StatisticalReportDTO s);
/**
*
*
* @param beginTime
* @param endTime
* @param memberId
* @return
*/
CommonResponse<Object> getMemberReport(String beginTime, String endTime, Long memberId);
/**
*
*
* @param memberId
* @return
*/
CommonResponse<Object> getMemberReportByMonth(Long memberId);
/**
*
*
* @param response
* @param beginTime
* @param endTime
* @param memberId
* @return
*/
void downloadMemberReport(HttpServletResponse response, String beginTime, String endTime, Long memberId);
/**
* 线
*
* @param clueIds
* @return
*/
CommonResponse<List<Long>> getTurnOnIds(List<Long> clueIds);
/**
* 线
*
* @param clueId
* @return
*/
CommonResponse<Object> getCallRecordDetails(Long clueId);
/**
* 线
*
* @param response
* @param clueId
*/
void downloadCallRecordDetails(HttpServletResponse response, Long clueId);
Map<Long, Map<String, Object>> findMemberIdByOrganizeIds(List<Long> organizeIds);
/**
*
*
* @param companyId
*/
void deleteReport(Long companyId);
}

@ -3,7 +3,6 @@ package com.baiye.modules.report.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUnit;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.NumberUtil;
@ -17,7 +16,6 @@ import com.baiye.http.CommonResponse;
import com.baiye.model.enums.ClueStageEnum;
import com.baiye.model.enums.ResponseCode;
import com.baiye.model.vo.ResSourceLabel;
import com.baiye.modules.platform.repository.OrganizeUserRepository;
import com.baiye.modules.report.dao.TaskReportRepository;
import com.baiye.modules.report.dao.UserReportRepository;
import com.baiye.modules.report.entity.TaskReport;
@ -31,7 +29,6 @@ import com.baiye.modules.platform.domain.Clue;
import com.baiye.modules.platform.domain.Organize;
import com.baiye.modules.platform.domain.Task;
import com.baiye.modules.system.domain.User;
import com.baiye.modules.platform.domain.OrganizeUser;
import com.baiye.modules.platform.repository.OrganizeRepository;
import com.baiye.modules.platform.repository.TaskRepository;
import com.baiye.modules.system.repository.UserRepository;
@ -50,7 +47,6 @@ import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.servlet.http.HttpServletResponse;
import java.util.*;
@ -69,7 +65,6 @@ public class QueryReportServiceImpl implements QueryReportService {
private final TaskRepository taskRepository;
private final AllCallInfoRepository allCallInfoRepository;
private final OrganizeUserRepository organizeUserRepository;
private final TaskReportRepository taskReportRepository;
private final OrganizeRepository organizeRepository;
private final UserReportRepository userReportRepository;
@ -905,29 +900,4 @@ public class QueryReportServiceImpl implements QueryReportService {
public User getMember(Long id) {
return userRepository.findUserById(id);
}
@Override
public Map<Long, Map<String, Object>> findMemberIdByOrganizeIds(List<Long> organizeIds) {
List<Organize> byIdIn = organizeRepository.findByIdIn(organizeIds);
List<OrganizeUser> userIdByOrganizeId = organizeUserRepository.findUserIdByOrganizeId(organizeIds);
HashMap<Long, List<OrganizeUser>> mapByOrganize = new HashMap<>(userIdByOrganizeId.stream().collect(Collectors.groupingBy(OrganizeUser::getOrganizeId, Collectors.toList())));
Map<Long, Map<String, Object>> map = new HashMap<>();
for (Organize organize : byIdIn) {
Map<String, Object> mapUser = new HashMap<>();
mapUser.put("name", organize.getOrganizeName());
List<OrganizeUser> organizeUsers = mapByOrganize.get(organize.getId());
List<Long> collect = organizeUsers.stream().map(OrganizeUser::getUserId).collect(Collectors.toList());
mapUser.put("memberIds", collect);
map.put(organize.getId(), mapUser);
}
return map;
}
@Override
@Transactional(rollbackFor = Exception.class)
public void deleteReport(Long companyId) {
taskReportRepository.deleteByCompanyId(companyId);
userReportRepository.deleteByCompanyId(companyId);
}
}

@ -22,6 +22,7 @@ import com.baiye.constant.AdPlatFormConstants;
import com.baiye.constant.DefaultNumberConstants;
import com.baiye.constant.RoleNumberConstants;
import com.baiye.exception.BadRequestException;
import com.baiye.model.dto.DelUserDTO;
import com.baiye.model.dto.RoleSmallDto;
import com.baiye.model.dto.UserDto;
import com.baiye.model.dto.UserFavorOfExcel;
@ -176,19 +177,17 @@ public class UserController {
return new ResponseEntity<>(HttpStatus.OK);
}
@ApiOperation("删除用户")
@DeleteMapping
@PreAuthorize("@el.check('user:del')")
public ResponseEntity<Object> delete(@RequestBody Set<Long> ids) {
for (Long id : ids) {
Integer currentLevel = Collections.min(roleService.findByUsersId(SecurityUtils.getCurrentUserId()).stream().map(RoleSmallDto::getLevel).collect(Collectors.toList()));
Integer optLevel = Collections.min(roleService.findByUsersId(id).stream().map(RoleSmallDto::getLevel).collect(Collectors.toList()));
if (currentLevel > optLevel) {
throw new BadRequestException("角色权限不足,不能删除:" + userService.findById(id).getUsername());
}
public ResponseEntity<Object> delete(@Validated @RequestBody DelUserDTO delUserDTO) {
Long userId = delUserDTO.getUserId();
Integer currentLevel = Collections.min(roleService.findByUsersId(SecurityUtils.getCurrentUserId()).stream().map(RoleSmallDto::getLevel).collect(Collectors.toList()));
Integer optLevel = Collections.min(roleService.findByUsersId(userId).stream().map(RoleSmallDto::getLevel).collect(Collectors.toList()));
if (currentLevel > optLevel) {
throw new BadRequestException("角色权限不足,不能删除:" + userService.findById(userId).getUsername());
}
userService.delete(ids);
userService.delete(delUserDTO);
return new ResponseEntity<>(HttpStatus.OK);
}

@ -16,6 +16,7 @@
package com.baiye.modules.system.service;
import cn.hutool.core.date.DateTime;
import com.baiye.model.dto.DelUserDTO;
import com.baiye.model.dto.UserDto;
import com.baiye.model.dto.UserFavorOfExcel;
import com.baiye.modules.system.domain.User;
@ -66,9 +67,9 @@ public interface UserService {
/**
*
*
* @param ids /
* @param delUserDTO /
*/
void delete(Set<Long> ids);
void delete(DelUserDTO delUserDTO);
/**
*

@ -37,6 +37,11 @@ import com.baiye.model.enums.ResponseCode;
import com.baiye.modules.platform.domain.*;
import com.baiye.modules.platform.repository.*;
import com.baiye.modules.platform.service.*;
import com.baiye.modules.platform.service.dto.*;
import com.baiye.modules.report.dao.TaskReportRepository;
import com.baiye.modules.report.dao.UserReportRepository;
import com.baiye.modules.report.service.QueryReportService;
import com.baiye.modules.system.mapstruct.UserMapper;
import com.baiye.modules.platform.service.dto.BuyComboDTO;
import com.baiye.modules.platform.service.dto.CompanyDto;
import com.baiye.modules.platform.service.dto.CreateUserDTO;
@ -55,11 +60,13 @@ import com.google.common.collect.Sets;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.cache.Cache;
import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service;
@ -120,12 +127,13 @@ public class UserServiceImpl implements UserService {
private final TaskOrganizeRepository taskOrganizeRepository;
private final TaskUserDistributionRepository taskUserDistributionRepository;
private final TaskReportRepository taskReportRepository;
private final UserReportRepository userReportRepository;
private final ExtensionNumberService extensionNumberService;
// private final QueryReportService queryReportService;
private final TaskImeiService taskImeiService;
private final TaskTagRepository taskTagRepository;
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean fileCreateUser(List<UserFavorOfExcel> excels, Long companyId, UserDto userDto) {
@ -536,10 +544,8 @@ public class UserServiceImpl implements UserService {
delCaches(user.getId(), user.getUsername());
}
@Override
@Transactional(rollbackFor = Exception.class)
public void delete(Set<Long> ids) {
public void delete2(Set<Long> ids) {
for (Long id : ids) {
// 清理缓存
UserDto user = findById(id);
@ -553,11 +559,9 @@ public class UserServiceImpl implements UserService {
userRepository.deleteAllByIdIn(ids);
}
/**
* TODO
*/
@Override
@Transactional(rollbackFor = Exception.class)
public void delete2(DelUserDTO delUserDTO) {
public void delete(DelUserDTO delUserDTO) {
Long userId = delUserDTO.getUserId();
Long replaceUserId = delUserDTO.getReplaceUserId();
UserDto user = findById(userId);
@ -602,7 +606,8 @@ public class UserServiceImpl implements UserService {
//11、删除分机号
extensionNumberService.deleteExtensionNumberByCompany(user.getCompanyId());
//12、删除统计信息
//.deleteReport(user.getCompanyId());
taskReportRepository.deleteByCompanyId(user.getCompanyId());
userReportRepository.deleteByCompanyId(user.getCompanyId());
//13.删除imei和tag
taskImeiService.deleteTaskImei(taskIds);
taskTagRepository.deleteByTaskIds(taskIds);
@ -610,7 +615,7 @@ public class UserServiceImpl implements UserService {
} else if (roleIds.contains(RoleNumberConstants.MINUS_NINE_NUMBER)) {
// 二: 删除或者替换组长
if (replaceUserId == null) throw new BadRequestException("请选择替换组长");
if (CollUtil.isNotEmpty(replaceRoleIds) && !roleIds.contains(RoleNumberConstants.MINUS_NINE_NUMBER))
if (CollUtil.isNotEmpty(replaceRoleIds) && !replaceRoleIds.contains(RoleNumberConstants.MINUS_NINE_NUMBER))
throw new BadRequestException("请选择组长角色的用户");
organizeUserRepository.updateUser(userId, replaceUserId);
organizeUserRepository.updateCreateBy(replaceUserId, userId);
@ -618,7 +623,11 @@ public class UserServiceImpl implements UserService {
} else if (roleIds.contains(RoleNumberConstants.MINUS_FIVE_NUMBER)) {
// 三: 删除或者替换业务员
if (replaceUserId == null) organizeUserRepository.deleteByUserId(userId);
else organizeUserRepository.updateUser(userId, replaceUserId);
else {
if (replaceRoleIds.contains(RoleNumberConstants.MINUS_NINE_NUMBER))
organizeUserRepository.deleteByUserId(userId);
else organizeUserRepository.updateUser(userId, replaceUserId);
}
this.sourceDel(userId, replaceUserId);
}
//分机号

@ -62,6 +62,6 @@ public interface ExtensionNumberRepository extends JpaRepository<ExtensionNumber
int deleteByCompanyId(Long companyId);
@Modifying
@Query(value = "update tb_extension_number c set c.status =?1 where c.number = (select number from tb_extension_user where member_id =?2", nativeQuery = true)
@Query(value = "update tb_extension_number c set c.status =?1 where c.number in (select teu.number from tb_extension_user teu where teu.member_id =?2)", nativeQuery = true)
int updateExtensionNumber(Integer status, Long userId);
}

@ -53,6 +53,6 @@ public interface ExtensionUserRepository extends JpaRepository<ExtensionUser, Lo
* @param companyId
*/
@Modifying
@Query(value = "delete from tb_extension_user where number in (select number from tb_extension_number where company_id = ?1)", nativeQuery = true)
@Query(value = "delete from tb_extension_user eu where eu.number in (select ten.number from tb_extension_number ten where ten.company_id = ?1)", nativeQuery = true)
void deleteByCompanyId(Long companyId);
}

@ -176,11 +176,9 @@ public class ExtensionNumberServiceImpl implements ExtensionNumberService {
extensionNumberRepository.updateExtensionNumber(0, userId);
extensionUserRepository.deleteByMemberId(userId);
} else {
int i = extensionUserRepository.deleteByMemberId(replaceUserId);
if (i > 0) extensionNumberRepository.updateExtensionNumber(0, replaceUserId);
extensionUserRepository.updateByNumber(userId, replaceUserId);
int i = extensionNumberRepository.updateExtensionNumber(0, replaceUserId);
if (i > 0) {
extensionUserRepository.deleteByMemberId(replaceUserId);
}
}
}
}

@ -3,10 +3,14 @@ package com.baiye.model.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotNull;
import java.util.Set;
@Data
public class DelUserDTO {
@ApiModelProperty("删除的用户ID")
@NotNull(message = "删除用户ID不能尅空")
private Long userId;
@ApiModelProperty("替换人用户ID")

@ -142,8 +142,8 @@ public interface ClueMiddleRepository extends JpaRepository<ClueMiddle, Long>, J
/**
*
*/
@Query(value = "SELECT task_id,count(*) FROM `tb_clue_middle` where task_id in ?1 GROUP BY task_id", nativeQuery = true)
Map<Long,Integer> findTaskIdCount(Set<Long> taskIds);
@Query(value = "SELECT task_id as taskId,count(*) as num FROM `tb_clue_middle` where task_id in ?1 GROUP BY task_id", nativeQuery = true)
List<Map<String,Object>> findTaskIdCount(Set<Long> taskIds);
@Query(value = " select * from tb_clue_middle where (clue_stage_time between ?2 and ?3) and task_id in ?1 and (coalesce (?4,null) is null or clue_stage =?4)", nativeQuery = true)

@ -33,6 +33,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigInteger;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
@ -530,7 +531,14 @@ public class ClueServiceImpl implements ClueService {
clueMiddleRepository.deleteByMemberId(userId);
//3、删除拓客或者DMP资源数据
clueTalkRepository.deleteByMemberId(userId);
return clueMiddleRepository.findTaskIdCount(taskIds);
List<Map<String,Object>> mapList = clueMiddleRepository.findTaskIdCount(taskIds);
Map<Long, Integer> taskCount = new HashMap<>();
for (Map<String, Object> map : mapList) {
BigInteger taskId = (BigInteger)map.get("taskId");
BigInteger num = (BigInteger)map.get("num");
taskCount.put(taskId.longValue(), num.intValue());
}
return taskCount;
}
public void delete(List<ClueDto> clueAll, Set<Long> clueIds) {

@ -257,8 +257,8 @@ public class ReportCrmServiceImpl implements ReportCrmService {
Double turnoverAmount = 0.00;
Double actualAmount = 0.00;
for (TurnoverRecord turnoverRecord : turnoverRecords) {
NumberUtil.add(turnoverAmount, turnoverRecord.getTurnoverAmount());
NumberUtil.add(actualAmount, turnoverRecord.getActualAmount());
turnoverAmount = NumberUtil.add(turnoverAmount, turnoverRecord.getTurnoverAmount());
actualAmount = NumberUtil.add(actualAmount, turnoverRecord.getActualAmount());
}
UploadCrmTurnoverDTO uploadCrmTurnoverDTO = new UploadCrmTurnoverDTO();
uploadCrmTurnoverDTO.setMemberName(memberName);

@ -1,10 +1,10 @@
package com.baiye.task;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.json.JSONUtil;
import com.baiye.constant.FileConstant;
import com.baiye.model.dto.ClueDto;
import com.baiye.module.dao.ClueBackupsRepository;
import com.baiye.module.entity.Clue;
import com.baiye.module.entity.ClueBackups;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@ -15,6 +15,7 @@ import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
/**
*
@ -34,6 +35,11 @@ public class ClueBackupsTask {
for (ClueDto clue : clueAll) {
ClueBackups clueBackups = new ClueBackups();
BeanUtils.copyProperties(clue, clueBackups,"createTime");
Object sourceLabel = clue.getSourceLabel();
if (!Objects.isNull(sourceLabel)){
List<String> label = JSONUtil.toList(JSONUtil.parseArray(sourceLabel), String.class);
clueBackups.setSourceLabel(label);
}
list.add(clueBackups);
if (list.size() >= FileConstant.ONE_THOUSAND_NUMBER){
clueBackupsRepository.saveAll(list);

@ -66,7 +66,7 @@ storage:
de_symbol: /
download-template: http://8.130.96.163:8001/source/download/1/custom.xlsx
download-template-move: http://8.130.96.163:8001/source/download/1/dynamictemplate.xlsx
download-template-toker: /usr/local/webapp/ad-platform/ad-platform-source/toker.xlsx
download-template-toker: http://8.130.96.163:8001/source/download/1/toker.xlsx
download-auditing-file: http://8.130.96.163:8001/source/auditingFiles/
private-key: /usr/local/webapp/platform/source/template/privatekey

Loading…
Cancel
Save