呼叫方式修改提交

master
yqy 3 years ago
parent 30f5db6bd5
commit 9bf8ec8475

@ -73,4 +73,6 @@ public class UserDto extends BaseDTO implements Serializable {
private Integer companyStatus;
private String organizeName;
}

@ -92,13 +92,19 @@ public class OrganizeController {
return organizeService.saveOrganizeDistribution(organizeSaveDTO);
}
@ApiOperation("查询组")
@ApiOperation("查询组(分页)")
@GetMapping("/queryAll")
public ResponseEntity<Object> queryAll(OrganizeQueryCriteria organizeQueryCriteria, Pageable pageable) {
return new ResponseEntity<>(organizeService.queryAll(organizeQueryCriteria, pageable), HttpStatus.OK);
}
@ApiOperation("查询组")
@ApiOperation("查询组(分页 + 组人员列表)")
@GetMapping("/queryUserAll")
public ResponseEntity<Object> queryUserAll(OrganizeQueryCriteria organizeQueryCriteria, Pageable pageable) {
return new ResponseEntity<>(organizeService.queryUserAll(organizeQueryCriteria, pageable), HttpStatus.OK);
}
@ApiOperation("查询组(列表)")
@GetMapping("/query")
public ResponseEntity<Object> query(OrganizeQueryCriteria organizeQueryCriteria) {
return new ResponseEntity<>(organizeService.query(organizeQueryCriteria), HttpStatus.OK);
@ -148,4 +154,11 @@ public class OrganizeController {
public ResponseEntity<Object> selectAllOrganize() {
return new ResponseEntity<>(organizeService.selectAllOrganize(), HttpStatus.OK);
}
@ApiOperation("查询呼叫方式")
@GetMapping("/selectCallMode")
public ResponseEntity<Map<String, Object>> selectCallMode() {
return new ResponseEntity<>(organizeService.selectCallMode(), HttpStatus.OK);
}
}

@ -75,7 +75,7 @@ public interface OrganizeService {
ResponseEntity<Object> saveOrganizeDistribution(OrganizeSaveDTO organizeSaveDTO);
/**
*
* ()
*
* @param organizeQueryCriteria
* @return
@ -83,7 +83,15 @@ public interface OrganizeService {
Map<String, Object> queryAll(OrganizeQueryCriteria organizeQueryCriteria, Pageable pageable);
/**
*
* ( + )
* @param organizeQueryCriteria
* @param pageable
* @return
*/
Map<String, Object> queryUserAll(OrganizeQueryCriteria organizeQueryCriteria, Pageable pageable);
/**
* ()
*
* @param organizeQueryCriteria
* @return
@ -91,7 +99,7 @@ public interface OrganizeService {
List<OrganizeDto> query(OrganizeQueryCriteria organizeQueryCriteria);
/**
*
* ()
*
* @param organizeQueryCriteria
* @return
@ -150,4 +158,10 @@ public interface OrganizeService {
* @return
*/
Organize findByOrganizeId(Long teamId);
/**
*
* @return
*/
Map<String, Object> selectCallMode();
}

@ -13,6 +13,7 @@ import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
import java.util.Map;
@Getter
@Setter
@ -50,4 +51,7 @@ public class OrganizeDto implements Serializable {
@ApiModelProperty(value = "返回的任务内管理员定义标签")
private List<String> baseLabel;
@ApiModelProperty(value = "用户列表")
private List<Map<String, Object>> userMapList;
}

@ -18,11 +18,13 @@ import com.baiye.modules.system.service.dto.*;
import com.baiye.modules.system.service.mapstruct.OrganizeMapper;
import com.baiye.modules.system.service.mapstruct.OrganizeUserMapper;
import com.baiye.modules.system.service.mapstruct.TaskOrganizeMapper;
import com.baiye.modules.telemarkting.dao.ExtensionUserRepository;
import com.baiye.modules.telemarkting.service.ExtensionNumberService;
import com.baiye.util.*;
import com.google.common.collect.Lists;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
@ -55,7 +57,9 @@ public class OrganizeServiceImpl implements OrganizeService {
private final RoleService roleService;
private final RedisUtils redisUtils;
private final UserMessageService userMessageService;
private final ExtensionNumberService ExtensionNumberService;
private final ExtensionNumberService extensionNumberService;
private final CompanyRepository companyRepository;
private final ExtensionUserRepository extensionUserRepository;
/**
*
@ -68,7 +72,7 @@ public class OrganizeServiceImpl implements OrganizeService {
organize.setCreateBy(SecurityUtils.getCurrentUserId());
Organize saveOrganize = organizeRepository.save(organize);
//添加分机号
ExtensionNumberService.assignExtensionNum(saveOrganize.getId(),organize.getUserId());
extensionNumberService.assignExtensionNum(saveOrganize.getId(), organize.getUserId());
// 添加小组成员信息
OrganizeUser organizeUser = new OrganizeUser();
organizeUser.setOrganizeId(saveOrganize.getId());
@ -87,10 +91,19 @@ public class OrganizeServiceImpl implements OrganizeService {
*/
@Override
@Transactional(rollbackFor = Exception.class)
@CacheEvict(value = "organize",key = "'organize:' + #organize.getId()")
@CacheEvict(value = "organize", key = "'organize:' + #organize.getId()")
public void updateOrganize(Organize organize) {
Organize updateOrganize = organizeRepository.findById(organize.getId()).orElseGet(Organize::new);
//添加(删除)分机号
if (organize.getCallMode() != null && organize.getCallMode() != updateOrganize.getCallMode()){
List<OrganizeUser> organizeList = organizeUserRepository.findByOrganizeId(organize.getId());
if (organize.getCallMode() == 1) {
organizeList.forEach(oe -> extensionNumberService.assignExtensionNum(oe.getOrganizeId(), oe.getUserId()));
}else if (updateOrganize.getCallMode() == 1){
extensionUserRepository.deleteByOrganizeId(updateOrganize.getId());
}
}
if (organize.getOrganizeName() != null) {
Organize updateOrganize = organizeRepository.findById(organize.getId()).orElseGet(Organize::new);
updateOrganize.setOrganizeName(organize.getOrganizeName());
updateOrganize.setCallMode(organize.getCallMode());
// 设置一个无用的字段save方法会验证validation的验证参数
@ -138,7 +151,7 @@ public class OrganizeServiceImpl implements OrganizeService {
addOrganizeUser.setCreateBy(currentUserId);
OrganizeUser saveOrganizeUser = organizeUserRepository.save(addOrganizeUser);
//添加分机号
ExtensionNumberService.assignExtensionNum(saveOrganizeUser.getOrganizeId(),saveOrganizeUser.getUserId());
extensionNumberService.assignExtensionNum(saveOrganizeUser.getOrganizeId(), saveOrganizeUser.getUserId());
}
}
@ -193,33 +206,6 @@ public class OrganizeServiceImpl implements OrganizeService {
return list;
}
/**
*
*/
public List<Map<String, Object>> findUser(List<Long> userIdList, OrganizeUserQueryCriteria organizeUserQueryCriteria) {
List<User> userList = new ArrayList<>();
if (organizeUserQueryCriteria.getBlurry() != null) {
userList = userRepository.findUserIdsByNiceName(userIdList, organizeUserQueryCriteria.getBlurry());
} else {
userList = userRepository.findAllById(userIdList);
}
List<Map<String, Object>> list = Lists.newArrayList();
if (userList.size() > 0) {
for (User user : userList) {
Map<String, Object> map = new HashMap<>();
map.put("id", user.getId());
map.put("nickName", user.getNickName());
map.put("gender", user.getGender());
map.put("email", user.getEmail());
map.put("phone", user.getPhone());
map.put("username", user.getUsername());
map.put("avatarPath", user.getAvatarPath());
list.add(map);
}
}
return list;
}
/**
*
*/
@ -274,7 +260,7 @@ public class OrganizeServiceImpl implements OrganizeService {
if (data != null && data.size() > 0) {
int index = 0;
for (DistributeResponseDTO distributeResponseDTO : data) {
if (distributeResponseDTO.getResponseList().size() <= 0 ){
if (distributeResponseDTO.getResponseList().size() <= 0) {
String organizeName = organizeRepository.findOrganizeById(distributeResponseDTO.getDeptId()).getOrganizeName();
throw new BadRequestException(organizeName + "比例过低分配数不低于0");
}
@ -291,7 +277,8 @@ public class OrganizeServiceImpl implements OrganizeService {
taskOrganize.setRatio(weights.get(index));
taskOrganize.setRemark(organizeList.get(index).getRemark());
index++;
taskOrganizeRepository.save(taskOrganize);
TaskOrganize saveTaskOrganize = taskOrganizeRepository.save(taskOrganize);
redisUtils.set(String.valueOf(saveTaskOrganize.getTaskId()), saveTaskOrganize.getOrganizeTaskName(), 2592000);//缓存时间三十天
// 发送通知的用户id
OrganizeUser organizeUser = organizeUserRepository.findByOrganizeIdAndIsLeader(distributeResponseDTO.getDeptId(), true);
userIdList.add(organizeUser.getUserId());
@ -324,6 +311,34 @@ public class OrganizeServiceImpl implements OrganizeService {
return PageUtil.toPage(map);
}
/**
* ( + )
*/
@Override
public Map<String, Object> queryUserAll(OrganizeQueryCriteria organizeQueryCriteria, Pageable pageable) {
organizeQueryCriteria.setCreateBy(SecurityUtils.getCurrentUserId());
Page<Organize> organizePage = organizeRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root, organizeQueryCriteria, criteriaBuilder), pageable);
Page<OrganizeDto> map = organizePage.map(organizeMapper::toDto);
for (OrganizeDto organizeDto : map) {
List<OrganizeUser> organizeUserList = organizeUserRepository.findByOrganizeId(organizeDto.getId());
List<Long> userIds = new ArrayList<>();
for (OrganizeUser organizeUser : organizeUserList) {
// 组长单独设置字段
if (organizeUser.getIsLeader()){
UserDto userDto = userService.findById(organizeUser.getUserId());
organizeDto.setUserId(userDto.getId());
organizeDto.setUserNickName(userDto.getNickName());
}else {
userIds.add(organizeUser.getUserId());
}
}
// 查询组员用户信息(注意:循环中查询,一个小组查询一次库)
List<Map<String, Object>> userList = findUser(userIds, new OrganizeUserQueryCriteria());
organizeDto.setUserMapList(userList);
}
return PageUtil.toPage(map);
}
/**
* ()
*/
@ -340,7 +355,7 @@ public class OrganizeServiceImpl implements OrganizeService {
}
/**
* ()
* ()
*/
@Override
public TaskOrganize queryDetails(OrganizeQueryCriteria organizeQueryCriteria) {
@ -377,7 +392,7 @@ public class OrganizeServiceImpl implements OrganizeService {
public Map<String, Object> queryLeaderTaskList(TaskOrganizeQueryCriteria taskOrganizeQueryCriteria, Pageable pageable) {
PageRequest pageRequest = PageRequest.of(pageable.getPageNumber(), pageable.getPageSize(), Sort.by(Sort.Direction.DESC, "updateTime")
.and( Sort.by(Sort.Direction.ASC,"taskStatus")));
.and(Sort.by(Sort.Direction.ASC, "taskStatus")));
Long currentUserId = SecurityUtils.getCurrentUserId();
Organize organize = organizeRepository.findOrganize(currentUserId);
if (organize != null) {
@ -417,7 +432,7 @@ public class OrganizeServiceImpl implements OrganizeService {
organizeUser.setCreateBy(SecurityUtils.getCurrentUserId());
OrganizeUser saveOrganizeUser = organizeUserRepository.save(organizeUser);
//添加分机号
ExtensionNumberService.assignExtensionNum(saveOrganizeUser.getOrganizeId(),saveOrganizeUser.getUserId());
extensionNumberService.assignExtensionNum(saveOrganizeUser.getOrganizeId(), saveOrganizeUser.getUserId());
}
}
//分配组员资源
@ -429,7 +444,7 @@ public class OrganizeServiceImpl implements OrganizeService {
if (rse.getBody() != null) {
Long userId = rse.getBody();
UserDto user = userService.findById(userId);
throw new BadRequestException(user.getNickName() + "比例过低,分配数量不能低于0");
throw new BadRequestException(user.getNickName() + "比例过低,分配数量不能低于0");
}
//修改小组任务信息
TaskOrganize updateTaskOrganize = taskOrganizeRepository.findByOrganizeIdAndTaskId(organizeId, taskId);
@ -464,7 +479,7 @@ public class OrganizeServiceImpl implements OrganizeService {
// 判断角色,管理员只查组长角色的用户
if (roleId != RoleNumberConstants.MINUS_EIGHT_NUMBER) {
roles.add(RoleNumberConstants.MINUS_FIVE_NUMBER);
}else {
} else {
roles.add(RoleNumberConstants.MINUS_NINE_NUMBER);
}
//查询角色下所有用户
@ -489,7 +504,7 @@ public class OrganizeServiceImpl implements OrganizeService {
}
}
// 小组分配资源时,显示组长自己的信息,组长给自己分配资源
if (organizeQueryCriteria.getIsShowLeader() == 1){
if (organizeQueryCriteria.getIsShowLeader() == 1) {
UserDto leaderUser = userService.findById(SecurityUtils.getCurrentUserId());
userDtoList.add(leaderUser);
}
@ -502,21 +517,20 @@ public class OrganizeServiceImpl implements OrganizeService {
@Override
public Map<String, List<String>> getLabel(Long taskId, Long organizeId) {
TaskOrganizeQueryCriteria taskOrganizeQueryCriteria = new TaskOrganizeQueryCriteria();
if (organizeId != 0) {
if (organizeId != null) {
taskOrganizeQueryCriteria.setOrganizeId(organizeId);
}
taskOrganizeQueryCriteria.setTaskId(taskId);
List<TaskOrganizeDto> taskOrganizeDtos = taskOrganizeMapper.toDto(taskOrganizeRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root, taskOrganizeQueryCriteria, criteriaBuilder)));
TaskOrganizeDto taskOrganizeDto = taskOrganizeDtos.get(0);
Map<String, List<String>> map = new HashMap<>();
if (organizeId == 0) {
if (!redisUtils.hasKey(String.valueOf(taskOrganizeDto.getTaskId()))) {
int duration = new Random().nextInt(259200 - 172800 + 1) + 172800;//缓存时间两天到三天随机
redisUtils.set(String.valueOf(taskOrganizeDto.getTaskId()), taskOrganizeDto.getOrganizeTaskName(), duration);
List<String> list = new ArrayList<>();
list.add(taskOrganizeDto.getOrganizeTaskName());
map.put("taskName", list);
}
//判断redis中是否有值,线索列表时查询任务名称,任务id作为key,任务名称为val,任务名称不能修改
String taskName = (String) redisUtils.get(taskOrganizeDto.getTaskId() + "");
if (organizeId == null && StringUtils.isBlank(taskName)) {
List<String> list = new ArrayList<>();
list.add(taskOrganizeDto.getOrganizeTaskName());
map.put("taskName", list);
redisUtils.set(String.valueOf(taskOrganizeDto.getTaskId()), taskOrganizeDto.getOrganizeTaskName(), 2592000);// 缓存三十天
return map;
}
map.put("organizeLabel", taskOrganizeDto.getOrganizeLabel());
@ -533,7 +547,31 @@ public class OrganizeServiceImpl implements OrganizeService {
@Override
// @Cacheable(cacheNames = "organizeCache",key = "#teamId")
public Organize findByOrganizeId(Long teamId) {
return organizeRepository.findById(teamId).orElseGet(Organize::new);
return organizeRepository.findById(teamId).orElseGet(Organize::new);
}
/**
*
* @return
*/
@Override
public Map<String, Object> selectCallMode() {
Map<String, Object> callModeMap = new HashMap<>();
String tel = "";
Long userId = SecurityUtils.getCurrentUserId();
User user = userRepository.findById(userId).orElseGet(User::new);
OrganizeUser organizeUser = organizeUserRepository.findByUserId(userId);
Organize organize = organizeRepository.findById(organizeUser.getOrganizeId()).orElseGet(Organize::new);
if (organize.getCallMode() == 1){
// (点呼)获取分机号
tel = String.valueOf(extensionNumberService.getExtension(userId).getNumber());
}else if (organize.getCallMode() == 2){
Company company = companyRepository.findById(user.getCompanyId()).orElseGet(Company::new);
tel = company.getTelX();
}
callModeMap.put("callMode",organize.getCallMode());
callModeMap.put("callNum",tel);
return callModeMap;
}
/**
@ -544,5 +582,31 @@ public class OrganizeServiceImpl implements OrganizeService {
UserDto userDto = userService.findById(organizeUser.getUserId());
return userDto;
}
/**
*
*/
public List<Map<String, Object>> findUser(List<Long> userIdList, OrganizeUserQueryCriteria organizeUserQueryCriteria) {
List<User> userList = new ArrayList<>();
if (organizeUserQueryCriteria.getBlurry() != null) {
userList = userRepository.findUserIdsByNiceName(userIdList, organizeUserQueryCriteria.getBlurry());
} else {
userList = userRepository.findAllById(userIdList);
}
List<Map<String, Object>> list = Lists.newArrayList();
if (userList.size() > 0) {
for (User user : userList) {
Map<String, Object> map = new HashMap<>();
map.put("id", user.getId());
map.put("nickName", user.getNickName());
map.put("gender", user.getGender());
map.put("email", user.getEmail());
map.put("phone", user.getPhone());
map.put("username", user.getUsername());
map.put("avatarPath", user.getAvatarPath());
list.add(map);
}
}
return list;
}
}

@ -31,13 +31,11 @@ import com.baiye.model.dto.TreeUserDTO;
import com.baiye.model.dto.UserDto;
import com.baiye.model.dto.UserFavorOfExcel;
import com.baiye.modules.security.service.OnlineUserService;
import com.baiye.modules.system.domain.Company;
import com.baiye.modules.system.domain.OrganizeUser;
import com.baiye.modules.system.domain.*;
import com.baiye.modules.system.repository.OrganizeRepository;
import com.baiye.modules.system.repository.OrganizeUserRepository;
import com.baiye.modules.system.service.CompanyService;
import com.baiye.service.UserCacheClean;
import com.baiye.modules.system.domain.Role;
import com.baiye.modules.system.domain.User;
import com.baiye.modules.system.repository.RoleRepository;
import com.baiye.modules.system.repository.UserRepository;
import com.baiye.modules.system.service.CompanyService;
@ -85,6 +83,7 @@ public class UserServiceImpl implements UserService {
private final PasswordEncoder passwordEncoder;
private final OnlineUserService onlineUserService;
private final OrganizeUserRepository organizeUserRepository;
private final OrganizeRepository organizeRepository;
@Override
@ -302,6 +301,11 @@ public class UserServiceImpl implements UserService {
convert.setCompanyStatus(companyByUserId.getStatus());
}
}
OrganizeUser organizeUser = organizeUserRepository.findByUserId(user.getId());
if (organizeUser != null){
Organize organize = organizeRepository.findOrganizeById(organizeUser.getOrganizeId());
convert.setOrganizeName(organize.getOrganizeName());
}
for (Role role : roles) {
if (role.getId() == DefaultNumberConstants.EIGHT_NUMBER) {
convert.setIsManager(Boolean.TRUE);

@ -20,6 +20,7 @@ public interface ExtensionNumberRepository extends JpaRepository<ExtensionNumber
* @param status
* @return
*/
@Query(value = "SELECT number FROM tb_extension_number WHERE status = ?1 AND company_id = ?2 LIMIT 0, 1", nativeQuery = true)
Integer findIdByStatusAndCompanyId(Integer status,Long companyId);
@Modifying

@ -3,6 +3,7 @@ package com.baiye.modules.telemarkting.dao;
import com.baiye.modules.telemarkting.entity.ExtensionUser;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;
/**
@ -11,5 +12,9 @@ import org.springframework.stereotype.Repository;
*/
@Repository
public interface ExtensionUserRepository extends JpaRepository<ExtensionUser, Long>, JpaSpecificationExecutor<ExtensionUser> {
@Query(value = "SELECT number FROM tb_extension_user WHERE member_id = ?1", nativeQuery = true)
Integer findNumberByMemberId(Long memberId);
void deleteByOrganizeId(Long organizeId);
}

@ -50,10 +50,7 @@ public class ExtensionNumberServiceImpl implements ExtensionNumberService {
@Transactional(rollbackFor = Exception.class)
public CommonResponse<Object> assignExtensionNum(Long organizeId, Long memberId) {
//查询组
Organize organize = organizeRepository.findById(organizeId).orElseGet(Organize::new);
if (organize.getCallMode() == DefaultNumberConstants.ONE_NUMBER) {
Integer numberByMemberId = extensionUserRepository.findNumberByMemberId(memberId);
if (numberByMemberId != null) {
log.info("用户 {},已经分配分机号", memberId);
throw new BadRequestException("用户已经分配分机号,用户id" + memberId);
@ -73,7 +70,6 @@ public class ExtensionNumberServiceImpl implements ExtensionNumberService {
log.error("分机号分配失败 memberId{}", memberId);
throw new BadRequestException("分机号分配失败,用户id为" + memberId);
}
}
return CommonResponse.createBySuccess();
}

@ -242,7 +242,7 @@ public class TelephoneCallServiceImpl implements TelephoneCallService {
AllCallInfo allCallInfo = allCallInfoRepository.findBySessionId(sessionId);
if (ObjectUtil.isNotEmpty(allCallInfo)) {
//相同说明是分机号的回调
if (sessionId.equals(otherLeg)) {
if (sessionId.equals(otherLeg) && StrUtil.isNotBlank(rollCallBackDTO.getRecord_file_url())) {
allCallInfo.setRecordFlag(DefaultNumberConstants.ONE_NUMBER);
allCallInfo.setRecordFileDownloadUrl(rollCallBackDTO.getRecord_file_url());
} else {

@ -1,8 +1,5 @@
package com.baiye.module.service.impl;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.baiye.constant.DefaultNumberConstants;
import com.baiye.exception.BadRequestException;
import com.baiye.feign.OrganizeClient;
@ -143,15 +140,14 @@ public class ClueServiceImpl implements ClueService {
if (clueQueryCriteria.getMemberId() != null) {
List<ClueDto> clueDtoList = clueJpa.getClueList(clueQueryCriteria, pageable);
Long count = clueJpa.getCount(clueQueryCriteria);
// 标签信息
// 列表中查询标签信息 和 axb请求字段
for (ClueDto clueDto : clueDtoList) {
String str = (String) redisUtils.get(String.valueOf(clueDto.getTaskId()));
if (StringUtils.isNotBlank(str)) {
clueDto.setTaskName(str);
} else {
Map<String, List<String>> body = organizeClient.getLabel(clueDto.getTaskId(), 0L).getBody();
clueDto.setTaskName(body.get("taskName").get(0));
if (StringUtils.isBlank(str)) {
Map<String, List<String>> body = organizeClient.getLabel(clueDto.getTaskId(), null).getBody();
str = body.get("taskName").get(0);
}
clueDto.setTaskName(str);
}
return PageUtil.toPage(clueDtoList, count);
}
@ -169,11 +165,6 @@ public class ClueServiceImpl implements ClueService {
if (clueQueryCriteria.getId() != null) {
for (ClueDto clueDto : clueDtoList) {
//循环查库ID查询只一次循环
// String organizeStr = organizeClient.query(clueDto.getOrganizeId()).getBody().toString();
// String str = organizeStr.replaceAll("=", ":");
// JSONArray jsonArray = JSONUtil.parseArray(str);
// JSONObject jsonObject = JSONUtil.parseObj(jsonArray.get(0));
// clueDto.setCallMode((Integer)jsonObject.get("callMode"));
Map<String, List<String>> mapList = organizeClient.getLabel(clueDto.getTaskId(), clueDto.getOrganizeId()).getBody();
clueDto.setBaseLabel(mapList.get("baseLabel"));
clueDto.setOrganizeLabel(mapList.get("organizeLabel"));

@ -6,7 +6,7 @@ spring:
freemarker:
check-template-location: false
profiles:
active: prod
active: dev
application:
name: @artifactId@
jackson:

@ -0,0 +1,23 @@
,
\`-,
| `\
| \
__/.- - -.\,__
_.-'` `'"'--..,__
.-'` `'--.,_
.'` _ _ ___ `)
.' .'` `'-. (_` _`) _.-'
.' '--. '. .-.`"`@ .-'""-,
.------~' ,.---' '-._ _.' / `'--'"""".-'
/` ' /` _,..-----.,__ `''''`/ ;__,..--''--'`
`'--.,__ ' |-'` `'---'| |
`\ \ \ /
| | '-'
\ |
yqy `\ |
\/
年少太轻狂 误入IT行
白发森森立 两眼直茫茫
语言数十种 无一称擅长
三十而立时 无房单身郎
Loading…
Cancel
Save