feat: 一些调整

This commit is contained in:
曹鹏飞 2025-02-05 22:00:07 +08:00
parent 148ff6dbb0
commit 5684456193
17 changed files with 127 additions and 67 deletions

View File

@ -1,5 +1,7 @@
package com.nflg.mobilebroken.admin.controller;
import cn.hutool.core.util.RandomUtil;
import com.nflg.mobilebroken.common.constant.AppUserApplyforType;
import com.nflg.mobilebroken.common.pojo.ApiResult;
import com.nflg.mobilebroken.common.pojo.PageData;
import com.nflg.mobilebroken.common.pojo.request.*;
@ -7,14 +9,18 @@ import com.nflg.mobilebroken.common.pojo.vo.AppUserApplyforVO;
import com.nflg.mobilebroken.common.pojo.vo.AppUserForAdminVO;
import com.nflg.mobilebroken.common.pojo.vo.AreaSimpleVO;
import com.nflg.mobilebroken.common.pojo.vo.CompanySimpleVO;
import com.nflg.mobilebroken.repository.entity.AppUserApplyfor;
import com.nflg.mobilebroken.repository.service.IAppUserApplyforService;
import com.nflg.mobilebroken.repository.service.IAppUserService;
import com.nflg.mobilebroken.repository.service.ITBaseAreaService;
import com.nflg.mobilebroken.repository.service.ITBaseCustomerService;
import com.nflg.mobilebroken.starter.annotation.MethodInfoMark;
import com.nflg.mobilebroken.starter.service.EmailService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.mail.MessagingException;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import java.util.List;
@ -24,6 +30,7 @@ import java.util.List;
*
* @author 曹鹏飞
*/
@Slf4j
@RestController
@RequestMapping("/appuser")
public class AppUserController extends ControllerBase {
@ -40,6 +47,9 @@ public class AppUserController extends ControllerBase {
@Resource
private IAppUserApplyforService appUserApplyforService;
@Resource
private EmailService emailService;
/**
* 获取公司列表
*
@ -105,7 +115,16 @@ public class AppUserController extends ControllerBase {
@PostMapping("approveAppUserApplyfor")
@MethodInfoMark(value = "代理商子账号审核", menuName = "代理商管理")
public ApiResult<Void> approveAppUserApplyfor(@Valid @RequestBody ApproveAppUserApplyforRequest request) {
request.setPassword(RandomUtil.randomNumbers(6));
appUserApplyforService.approveAppUserApplyfor(request);
AppUserApplyfor applyfor = appUserApplyforService.getById(request.getId());
if (applyfor.getType() == AppUserApplyforType.ADD.getState().byteValue()) {
try {
emailService.sendEmail(applyfor.getUserEmail(), "账号审核通过", "您的账号审核通过,密码为:" + request.getPassword());
} catch (MessagingException e) {
log.error("发送邮件失败", e);
}
}
return ApiResult.success();
}

View File

@ -1,6 +1,7 @@
package com.nflg.mobilebroken.admin.controller;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@ -18,6 +19,7 @@ import com.nflg.mobilebroken.common.pojo.vo.DictionaryItemVO;
import com.nflg.mobilebroken.common.pojo.vo.DictionaryVO;
import com.nflg.mobilebroken.common.util.AdminUserUtil;
import com.nflg.mobilebroken.common.util.EecExcelUtil;
import com.nflg.mobilebroken.common.util.PageUtil;
import com.nflg.mobilebroken.common.util.VUtils;
import com.nflg.mobilebroken.repository.entity.DictionaryItemTranslate;
import com.nflg.mobilebroken.repository.entity.Language;
@ -106,18 +108,13 @@ public class DictionaryController extends ControllerBase {
/**
* 搜索字典值
*
* @param request 请求参数
* @return 字典列表
*/
@PostMapping("searchDictionaryItem")
@MethodInfoMark(value = "搜索字典值", menuName = "字典管理")
public ApiResult<PageData<DictionaryItemVO>> searchDictionaryItem(@RequestBody DictionaryItemSearchRequest request) {
IPage<DictionaryItemVO> page = new Page<>();
page.setCurrent(request.getPage());
page.setSize(request.getPageSize());
dictionaryItemService.search(request, page);
return ApiResult.success(page);
return ApiResult.success(PageUtil.convert(dictionaryItemService.search(request), d -> Convert.convert(DictionaryItemVO.class, d)));
}
/**

View File

@ -2,22 +2,22 @@ package com.nflg.mobilebroken.cfs.controller;
import cn.hutool.core.util.RandomUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
import com.nflg.mobilebroken.common.constant.Constant;
import com.nflg.mobilebroken.common.constant.STATE;
import com.nflg.mobilebroken.common.exception.NflgException;
import com.nflg.mobilebroken.common.pojo.ApiResult;
import com.nflg.mobilebroken.common.pojo.PageData;
import com.nflg.mobilebroken.common.pojo.request.*;
import com.nflg.mobilebroken.common.pojo.vo.AppUserVO;
import com.nflg.mobilebroken.common.pojo.vo.CompanySimpleVO;
import com.nflg.mobilebroken.common.pojo.vo.TitleVO;
import com.nflg.mobilebroken.common.pojo.vo.*;
import com.nflg.mobilebroken.common.util.AppUserUtil;
import com.nflg.mobilebroken.common.util.MultilingualUtil;
import com.nflg.mobilebroken.common.util.VUtils;
import com.nflg.mobilebroken.repository.entity.AppUser;
import com.nflg.mobilebroken.repository.service.IAppUserApplyforService;
import com.nflg.mobilebroken.repository.service.IAppUserService;
import com.nflg.mobilebroken.repository.service.IDictionaryItemTranslateService;
import com.nflg.mobilebroken.repository.service.ITBaseCustomerService;
import com.nflg.mobilebroken.repository.service.ITBasePositionService;
import com.nflg.mobilebroken.starter.service.EmailService;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.transaction.annotation.Transactional;
@ -25,10 +25,11 @@ import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import java.time.Duration;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
/**
* 用户相关接口
@ -55,7 +56,7 @@ public class UserController extends ControllerBase {
private ITBaseCustomerService customerService;
@Resource
private IDictionaryItemTranslateService dictionaryItemTranslateService;
ITBasePositionService positionService;
/**
* 获取用户信息
@ -99,8 +100,15 @@ public class UserController extends ControllerBase {
**/
@GetMapping("getTitles")
//@SaUserCheckRole("primary")
public ApiResult<List<TitleVO>> getTitles(@RequestParam @NotBlank(message = "语言不能为空") String language){
return ApiResult.success(dictionaryItemTranslateService.getTitles(language));
public ApiResult<List<TitleVO>> getTitles() {
List<TitleSimpleVO> datas = positionService.getSimpleTitles(2);
String language = MultilingualUtil.getLanguage();
List<TitleVO> list = datas.stream().map(d -> {
List<PositionLanguageVO> lvos = JSONUtil.toList(d.getPositionLanguage(), PositionLanguageVO.class);
PositionLanguageVO lvo = lvos.stream().filter(l -> StrUtil.equals(l.getCode(), language)).findFirst().orElse(null);
return new TitleVO().setId(d.getId()).setName(d.getName()).setValue(Objects.isNull(lvo) ? d.getName() : lvo.getLanguageValue());
}).collect(Collectors.toList());
return ApiResult.success(list);
}
/**

View File

@ -10,15 +10,10 @@ public class Constant {
public static final String DICTIONARY_TYPE_EXPERIENCE_EVALUATION_SELECT = "ExperienceEvaluationSelect";
//字典 类型 用户职位
public static final String DICTIONARY_TYPE_TITLE="UserTitle";
public static final String DICTIONARY_TYPE_TITLE_CQM = "CQM";
public static final String REDIS_KEY_USER_UPDATE_KAPTCHA = "kaptcha:userupdate:{}";
public static final String DICTIONARY_TYPE_SYSTEMERROR_CQMNOTCONFIG = "CQMNotConfig";
public static final String REDIS_KEY_MESSAGECONFIG_WX = "wxNotifyEnabled";
public static final String REDIS_KEY_MESSAGECONFIG_EMAIL = "emailNotifyEnabled";

View File

@ -28,10 +28,6 @@ public class AddUserRequest {
@NotBlank(message = "邮箱不能为空")
private String email;
//密码
@NotBlank(message = "密码不能为空")
private String password;
//手机号
private String phone;

View File

@ -1,5 +1,6 @@
package com.nflg.mobilebroken.common.pojo.request;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Data;
@Data
@ -9,4 +10,7 @@ public class ApproveAppUserApplyforRequest {
// 通过/不通过
private Boolean pass;
@JsonIgnore
private String password;
}

View File

@ -3,10 +3,16 @@ package com.nflg.mobilebroken.common.pojo.request;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.NotNull;
@EqualsAndHashCode(callSuper = false)
@Data
public class DictionaryItemSearchRequest extends PageRequest {
//字典id
@NotNull
private Integer dictionaryId;
//字典名称
private String name;

View File

@ -2,8 +2,8 @@ package com.nflg.mobilebroken.common.pojo.request;
import lombok.Data;
import javax.validation.constraints.Max;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;
import java.util.List;
@Data
@ -22,12 +22,12 @@ public class TicketAddRequest {
//标题
@NotBlank
@Max(value = 20, message = "标题长度不能超过20")
@Size(max = 20, message = "标题长度不能超过20")
private String title;
//描述
@NotBlank
@Max(value = 500, message = "描述长度不能超过500")
@Size(max = 500, message = "描述长度不能超过500")
private String description;
//附件

View File

@ -0,0 +1,22 @@
package com.nflg.mobilebroken.common.pojo.vo;
import lombok.Data;
@Data
public class PositionLanguageVO {
/**
* 语言编码
*/
private String code;
/**
* 语言名称
*/
private String name;
/**
* 内容
*/
private String languageValue;
}

View File

@ -1,5 +1,6 @@
package com.nflg.mobilebroken.common.pojo.vo;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Data;
import lombok.experimental.Accessors;
@ -12,4 +13,10 @@ public class TitleSimpleVO {
//职位名称
private String name;
// 语言对应的值
private String languageValue;
@JsonIgnore
private String positionLanguage;
}

View File

@ -3,12 +3,13 @@ package com.nflg.mobilebroken.repository.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.time.LocalDateTime;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* <p>
* 用户端-用户申请
@ -38,11 +39,6 @@ public class AppUserApplyfor implements Serializable {
*/
private String userName;
/**
* 被申请人用户密码BCrypt
*/
private String userPassword;
/**
* 被申请人头像
*/

View File

@ -16,11 +16,9 @@ import com.nflg.mobilebroken.repository.entity.DictionaryItem;
*/
public interface IDictionaryItemService extends IService<DictionaryItem> {
void search(DictionaryItemSearchRequest request, IPage page);
IPage<DictionaryItem> search(DictionaryItemSearchRequest request);
void save(SaveDictionaryItemRequest request);
Integer getId(String dictionaryName, String dictionaryItemName);
String getTitleName(String titleCode);
}

View File

@ -53,9 +53,6 @@ public class AdminUserServiceImpl extends ServiceImpl<AdminUserMapper, AdminUser
@Resource
private IAdminUserRoleMapService adminUserRoleMapService;
@Resource
private IDictionaryItemService dictionaryItemService;
@Override
public AdminUser getUser(String userName, String password) {
String encodePassword= PASSWORDENCODER.encode(password);
@ -134,12 +131,15 @@ public class AdminUserServiceImpl extends ServiceImpl<AdminUserMapper, AdminUser
@Override
public List<AdminUser> getCQM() {
DictionaryItem cqm = dictionaryItemService
.lambdaQuery()
.eq(DictionaryItem::getCode, Constant.DICTIONARY_TYPE_TITLE_CQM)
TBasePosition position = positionService.lambdaQuery()
.eq(TBasePosition::getDataValidState, 1)
.eq(TBasePosition::getPositionCode, Constant.DICTIONARY_TYPE_TITLE_CQM)
.one();
if (Objects.isNull(position)) {
return Collections.emptyList();
}
return lambdaQuery()
.eq(AdminUser::getTitleId, cqm.getId())
.eq(AdminUser::getTitleId, position.getId())
.list();
}

View File

@ -15,11 +15,14 @@ import com.nflg.mobilebroken.common.util.VUtils;
import com.nflg.mobilebroken.repository.entity.AppArea;
import com.nflg.mobilebroken.repository.entity.AppUser;
import com.nflg.mobilebroken.repository.entity.AppUserApplyfor;
import com.nflg.mobilebroken.repository.entity.TBasePosition;
import com.nflg.mobilebroken.repository.mapper.AppUserApplyforMapper;
import com.nflg.mobilebroken.repository.service.IAppAreaService;
import com.nflg.mobilebroken.repository.service.IAppUserApplyforService;
import com.nflg.mobilebroken.repository.service.IAppUserService;
import com.nflg.mobilebroken.repository.service.IDictionaryItemService;
import com.nflg.mobilebroken.repository.service.ITBasePositionService;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -38,14 +41,16 @@ import java.util.Objects;
@Service
public class AppUserApplyforServiceImpl extends ServiceImpl<AppUserApplyforMapper, AppUserApplyfor> implements IAppUserApplyforService {
private static final PasswordEncoder PASSWORDENCODER = new BCryptPasswordEncoder();
@Resource
private IAppAreaService appAreaService;
@Resource
private IDictionaryItemService dictionaryItemService;
private IAppUserService appUserService;
@Resource
private IAppUserService appUserService;
private ITBasePositionService positionService;
@Override
public void add(AddUserRequest request) {
@ -94,7 +99,11 @@ public class AppUserApplyforServiceImpl extends ServiceImpl<AppUserApplyforMappe
VUtils.trueThrowBusinessError(Objects.isNull(applyfor)).throwMessage("审批信息不存在");
AppUserApplyforVO vo = new AppUserApplyforVO();
AppArea area = appAreaService.getById(applyfor.getAreaId());
String titleName = dictionaryItemService.getTitleName(applyfor.getTitleCode());
TBasePosition position = positionService.lambdaQuery()
.eq(TBasePosition::getDataValidState, 1)
.eq(TBasePosition::getPositionCode, applyfor.getTitleCode())
.one();
String titleName = Objects.isNull(position) ? "" : position.getPositionName();
vo.setApplyfor(new AppUserApplyforInfoVO()
.setAreaName(area.getName())
.setPhone(applyfor.getUserPhone())
@ -129,6 +138,7 @@ public class AppUserApplyforServiceImpl extends ServiceImpl<AppUserApplyforMappe
.setEmail(applyfor.getUserEmail())
.setAvatar(applyfor.getUserAvatar())
.setPhone(applyfor.getUserPhone())
.setPassword(PASSWORDENCODER.encode(request.getPassword()))
.setAreaId(applyfor.getAreaId())
.setCompanyId(String.valueOf(applyfor.getCompanyId()))
.setTitleCode(applyfor.getTitleCode())

View File

@ -4,8 +4,8 @@ import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.nflg.mobilebroken.common.constant.Constant;
import com.nflg.mobilebroken.common.pojo.request.DictionaryItemSearchRequest;
import com.nflg.mobilebroken.common.pojo.request.SaveDictionaryItemRequest;
import com.nflg.mobilebroken.common.pojo.request.TranslateMap;
@ -46,8 +46,9 @@ public class DictionaryItemServiceImpl extends ServiceImpl<DictionaryItemMapper,
private IDictionaryService dictionaryService;
@Override
public void search(DictionaryItemSearchRequest request, IPage page) {
public IPage<DictionaryItem> search(DictionaryItemSearchRequest request) {
LambdaQueryWrapper<DictionaryItem> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(DictionaryItem::getDictionaryId, request.getDictionaryId());
if (StrUtil.isNotBlank(request.getName())) {
queryWrapper.like(DictionaryItem::getName, request.getName());
}
@ -55,7 +56,7 @@ public class DictionaryItemServiceImpl extends ServiceImpl<DictionaryItemMapper,
queryWrapper.like(DictionaryItem::getCode, request.getCode());
}
queryWrapper.orderByDesc(DictionaryItem::getId);
baseMapper.selectPage(page, queryWrapper);
return baseMapper.selectPage(new Page<>(request.getPage(), request.getPageSize()), queryWrapper);
}
@Transactional
@ -129,9 +130,4 @@ public class DictionaryItemServiceImpl extends ServiceImpl<DictionaryItemMapper,
public Integer getId(String dictionaryName, String dictionaryItemName) {
return baseMapper.getId(dictionaryName, dictionaryItemName);
}
@Override
public String getTitleName(String titleCode) {
return baseMapper.getName(Constant.DICTIONARY_TYPE_TITLE, titleCode);
}
}

View File

@ -1,7 +1,5 @@
package com.nflg.mobilebroken.repository.service.impl;
import cn.hutool.core.collection.ListUtil;
import cn.hutool.core.convert.Convert;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.nflg.mobilebroken.common.pojo.query.PageBaseQuery;
@ -13,6 +11,7 @@ import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.stream.Collectors;
/**
* <p>
@ -38,8 +37,10 @@ public class TBasePositionServiceImpl extends ServiceImpl<TBasePositionMapper, T
public List<TitleSimpleVO> getSimpleTitles(Integer type) {
List<TBasePosition> datas = lambdaQuery()
.eq(TBasePosition::getDataValidState, 1)
.in(TBasePosition::getPositionAttribute, type, ListUtil.of(type, 3))
.in(TBasePosition::getPositionAttribute, type, 3)
.list();
return Convert.toList(TitleSimpleVO.class, datas);
return datas.stream()
.map(d -> new TitleSimpleVO().setId(d.getId()).setName(d.getPositionName()).setPositionLanguage(d.getPositionLanguage()))
.collect(Collectors.toList());
}
}

View File

@ -11,6 +11,7 @@ import java.sql.ResultSet;
import java.sql.SQLException;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Objects;
/**
* 本地时间与UTC时间转换
@ -32,26 +33,30 @@ public class UTCLocalDateTimeTypeHandler extends BaseTypeHandler<LocalDateTime>
public LocalDateTime getNullableResult(ResultSet rs, String columnName) throws SQLException {
LocalDateTime utcTime = rs.getObject(columnName, LocalDateTime.class);
// UTC 时间转换为本地时间
return utcTime != null ? utcTime.atZone(ZoneId.of(MultilingualUtil.getZone()))
.withZoneSameInstant(ZoneId.systemDefault())
.toLocalDateTime() : null;
return convertToLocalDateTime(utcTime);
}
@Override
public LocalDateTime getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
LocalDateTime utcTime = rs.getObject(columnIndex, LocalDateTime.class);
// UTC 时间转换为本地时间
return utcTime != null ? utcTime.atZone(ZoneId.of(MultilingualUtil.getZone()))
.withZoneSameInstant(ZoneId.systemDefault())
.toLocalDateTime() : null;
return convertToLocalDateTime(utcTime);
}
@Override
public LocalDateTime getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
LocalDateTime utcTime = cs.getObject(columnIndex, LocalDateTime.class);
// UTC 时间转换为本地时间
return utcTime != null ? utcTime.atZone(ZoneId.of(MultilingualUtil.getZone()))
return convertToLocalDateTime(utcTime);
}
private LocalDateTime convertToLocalDateTime(LocalDateTime utcTime) {
if (utcTime == null) {
return null;
}
String zone = MultilingualUtil.getZone();
return utcTime.atZone(ZoneId.of(Objects.isNull(zone) ? "Asia/Shanghai" : zone))
.withZoneSameInstant(ZoneId.systemDefault())
.toLocalDateTime() : null;
.toLocalDateTime();
}
}