feat: 一些调整

This commit is contained in:
曹鹏飞 2025-02-17 20:51:37 +08:00
parent 44281ff108
commit fd8912351d
22 changed files with 241 additions and 107 deletions

View File

@ -17,6 +17,7 @@ import com.nflg.mobilebroken.common.util.AdminUserUtil;
import com.nflg.mobilebroken.common.util.VUtils;
import com.nflg.mobilebroken.repository.entity.AdminUser;
import com.nflg.mobilebroken.repository.service.IAdminUserService;
import com.nflg.mobilebroken.repository.service.IDictionaryItemTranslateService;
import com.nflg.mobilebroken.repository.service.ITBaseDepartmentService;
import com.nflg.mobilebroken.repository.service.ITBasePositionService;
import com.nflg.mobilebroken.starter.annotation.MethodInfoMark;
@ -52,6 +53,9 @@ public class AdminUserController extends ControllerBase {
@Value("${email.activate.admin.url}")
private String activateUrl;
@Value("${email.activate.admin.website}")
private String websiteUrl;
@Resource
private IAdminUserService adminUserService;
@ -67,6 +71,9 @@ public class AdminUserController extends ControllerBase {
@Resource
private WXQRCodeService wxQRCodeService;
@Resource
private IDictionaryItemTranslateService dictionaryItemTranslateService;
@Resource
private RedisTemplate<String, String> redisTemplate;
@ -99,11 +106,16 @@ public class AdminUserController extends ControllerBase {
@ApiMark(moduleName = "账号管理", apiName = "新增账号")
public ApiResult<Void> addAccount(@Valid @RequestBody AccountAddRequest request) {
request.setPassword(RandomUtil.randomString(6));
adminUserService.add(request);
AdminUser adminUser=adminUserService.add(request);
try {
String email = request.getEmail();
emailService.sendEmail(email, "新增账号",
"您的账号已创建,随机码为:" + request.getPassword() + ",点击链接激活账号: " + activateUrl + "?code=" + Base64.getUrlEncoder().encodeToString(email.getBytes()));
String email = adminUser.getEmail();
String subject = dictionaryItemTranslateService.getValueByCode(Constant.DICTIONARY_EMAIL_NOTIFY, Constant.DICTIONARY_ITEM_EMAIL_TITLE_ACCOUNT_ACTIVATION, "cn");
String content = dictionaryItemTranslateService.getValueByCode(Constant.DICTIONARY_EMAIL_NOTIFY, Constant.DICTIONARY_ITEM_EMAIL_CONTENT_ACCOUNT_ACTIVATION_NOTIFY, "cn")
.replace("${loginName}",adminUser.getLoginName())
.replace("${url}",activateUrl + "?code=" + Base64.getUrlEncoder().encodeToString(email.getBytes()))
.replace("${password}",request.getPassword())
.replace("${website}",websiteUrl);
emailService.sendEmail(email, subject, content);
} catch (MessagingException e) {
log.error("发送邮件失败", e);
}
@ -168,9 +180,13 @@ public class AdminUserController extends ControllerBase {
try {
for (Integer id : ids) {
String password = RandomUtil.randomString(6);
String email = adminUserService.resetPassword(id, password);
emailService.sendEmail(email, "密码重置",
"随机码为:" + password + ",点击链接激活账号: " + activateUrl + "?code=" + Base64.getUrlEncoder().encodeToString(email.getBytes()));
AdminUser adminUser = adminUserService.resetPassword(id, password);
String subject = dictionaryItemTranslateService.getValueByCode(Constant.DICTIONARY_EMAIL_NOTIFY, Constant.DICTIONARY_ITEM_EMAIL_TITLE_ACCOUNT_RESET_PASSWORD, "cn");
String content = dictionaryItemTranslateService.getValueByCode(Constant.DICTIONARY_EMAIL_NOTIFY, Constant.DICTIONARY_ITEM_EMAIL_CONTENT_RESET_PASSWORD_NOTIFY, "cn")
.replace("${loginName}",adminUser.getLoginName())
.replace("${url}",activateUrl + "?code=" + Base64.getUrlEncoder().encodeToString(adminUser.getEmail().getBytes()))
.replace("${password}",password);
emailService.sendEmail(adminUser.getEmail(), subject, content);
}
} catch (Exception ex) {
throw new NflgException(STATE.BusinessError, "发送邮件失败:" + ex.getMessage());
@ -188,9 +204,13 @@ public class AdminUserController extends ControllerBase {
public ApiResult<Void> forgetPassword(@Valid @RequestParam @NotBlank String email) {
try {
String password = RandomUtil.randomString(6);
adminUserService.forgetPassword(email, password);
emailService.sendEmail(email, "忘记密码",
"随机码为:" + password + ",点击链接激活账号: " + activateUrl + "?code=" + Base64.getUrlEncoder().encodeToString(email.getBytes()));
AdminUser adminUser=adminUserService.forgetPassword(email, password);
String subject = dictionaryItemTranslateService.getValueByCode(Constant.DICTIONARY_EMAIL_NOTIFY, Constant.DICTIONARY_ITEM_EMAIL_TITLE_ACCOUNT_RESET_PASSWORD, "cn");
String content = dictionaryItemTranslateService.getValueByCode(Constant.DICTIONARY_EMAIL_NOTIFY, Constant.DICTIONARY_ITEM_EMAIL_CONTENT_RESET_PASSWORD_NOTIFY, "cn")
.replace("${loginName}",adminUser.getLoginName())
.replace("${url}",activateUrl + "?code=" + Base64.getUrlEncoder().encodeToString(email.getBytes()))
.replace("${password}",password);
emailService.sendEmail(email, subject, content);
} catch (Exception ex) {
throw new NflgException(STATE.BusinessError, "发送邮件失败:" + ex.getMessage());
}

View File

@ -3,17 +3,16 @@ package com.nflg.mobilebroken.admin.controller;
import cn.hutool.core.util.RandomUtil;
import com.nflg.mobilebroken.admin.annotation.ApiMark;
import com.nflg.mobilebroken.common.constant.AppUserApplyforType;
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.*;
import com.nflg.mobilebroken.repository.entity.AppUser;
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.repository.service.*;
import com.nflg.mobilebroken.starter.annotation.MethodInfoMark;
import com.nflg.mobilebroken.starter.service.EmailService;
import lombok.extern.slf4j.Slf4j;
@ -41,6 +40,9 @@ public class AppUserController extends ControllerBase {
@Value("${email.activate.app.url}")
private String activateUrl;
@Value("${email.activate.app.website}")
private String websiteUrl;
@Resource
private IAppUserService appUserService;
@ -56,6 +58,9 @@ public class AppUserController extends ControllerBase {
@Resource
private EmailService emailService;
@Resource
private IDictionaryItemTranslateService dictionaryItemTranslateService;
/**
* 获取公司列表
* @return 部门列表
@ -85,11 +90,16 @@ public class AppUserController extends ControllerBase {
@ApiMark(moduleName = "代理商管理", apiName = "添加代理商主账号")
public ApiResult<Void> addPrimaryAppUser(@Valid @RequestBody PrimaryAppUserAddRequest request) {
request.setPassword(RandomUtil.randomNumbers(6));
appUserService.addPrimaryAppUser(request);
AppUser appUser =appUserService.addPrimaryAppUser(request);
try {
String email = request.getEmail();
emailService.sendEmail(email, "账号开通",
"您的账号已开通,随机码为:" + request.getPassword() + ",点击链接激活账号: " + activateUrl + "?code=" + Base64.getUrlEncoder().encodeToString(email.getBytes()));
String subject = dictionaryItemTranslateService.getValueByCode(Constant.DICTIONARY_EMAIL_NOTIFY, Constant.DICTIONARY_ITEM_EMAIL_TITLE_ACCOUNT_ACTIVATION, appUser.getLanguageCode());
String content = dictionaryItemTranslateService.getValueByCode(Constant.DICTIONARY_EMAIL_NOTIFY, Constant.DICTIONARY_ITEM_EMAIL_CONTENT_ACCOUNT_ACTIVATION_NOTIFY, appUser.getLanguageCode())
.replace("${loginName}",appUser.getLoginName())
.replace("${url}",activateUrl + "?code=" + Base64.getUrlEncoder().encodeToString(email.getBytes()))
.replace("${password}",request.getPassword())
.replace("${website}",websiteUrl);
emailService.sendEmail(email, subject, content);
} catch (MessagingException e) {
log.error("发送邮件失败", e);
}
@ -131,9 +141,13 @@ public class AppUserController extends ControllerBase {
AppUserApplyfor applyfor = appUserApplyforService.getById(request.getId());
if (applyfor.getType() == AppUserApplyforType.ADD.getState().byteValue()) {
try {
String email = applyfor.getUserEmail();
emailService.sendEmail(email, "账号审核通过",
"您的账号审核通过,随机码为:" + request.getPassword() + ",点击链接激活账号: " + activateUrl + "?code=" + Base64.getUrlEncoder().encodeToString(email.getBytes()));
String subject = dictionaryItemTranslateService.getValueByCode(Constant.DICTIONARY_EMAIL_NOTIFY, Constant.DICTIONARY_ITEM_EMAIL_TITLE_ACCOUNT_ACTIVATION, applyfor.getLanguageCode());
String content = dictionaryItemTranslateService.getValueByCode(Constant.DICTIONARY_EMAIL_NOTIFY, Constant.DICTIONARY_ITEM_EMAIL_CONTENT_ACCOUNT_ACTIVATION_NOTIFY, applyfor.getLanguageCode())
.replace("${loginName}",applyfor.getUserEmail())
.replace("${url}",activateUrl + "?code=" + Base64.getUrlEncoder().encodeToString(applyfor.getUserEmail().getBytes()))
.replace("${password}",request.getPassword())
.replace("${website}",websiteUrl);
emailService.sendEmail(applyfor.getUserEmail(), subject, content);
} catch (MessagingException e) {
log.error("发送邮件失败", e);
}
@ -219,9 +233,13 @@ public class AppUserController extends ControllerBase {
try {
for (Integer id : ids) {
String password=RandomUtil.randomString(6);
String email=appUserService.resetPassword(id,password);
emailService.sendEmail(email, "密码重置",
"随机码为:" + password + ",点击链接激活账号: " + activateUrl + "?code=" + Base64.getUrlEncoder().encodeToString(email.getBytes()));
AppUser appUser=appUserService.resetPassword(id,password);
String subject = dictionaryItemTranslateService.getValueByCode(Constant.DICTIONARY_EMAIL_NOTIFY, Constant.DICTIONARY_ITEM_EMAIL_TITLE_ACCOUNT_RESET_PASSWORD, appUser.getLanguageCode());
String content = dictionaryItemTranslateService.getValueByCode(Constant.DICTIONARY_EMAIL_NOTIFY, Constant.DICTIONARY_ITEM_EMAIL_CONTENT_RESET_PASSWORD_NOTIFY, appUser.getLanguageCode())
.replace("${loginName}",appUser.getLoginName())
.replace("${url}",activateUrl + "?code=" + Base64.getUrlEncoder().encodeToString(appUser.getEmail().getBytes()))
.replace("${password}",password);
emailService.sendEmail(appUser.getEmail(), subject, content);
}
}catch (Exception ex){
throw new NflgException(STATE.BusinessError,"发送邮件失败:"+ex.getMessage());

View File

@ -81,6 +81,9 @@ public class TicketController extends ControllerBase {
@Resource
private IAppAreaService appAreaService;
@Resource
private ITBaseAreaService adminAreaService;
@Resource
private IDictionaryItemService dictionaryItemService;
@ -336,7 +339,12 @@ public class TicketController extends ControllerBase {
public ApiResult<TicketInfoVO> getTicket(@Valid @RequestParam @NotNull Integer id) {
Ticket ticket = ticketService.getById(id);
AppUser user = appUserService.getById(ticket.getUserId());
AppArea appArea = appAreaService.getById(user.getAreaId());
String areaName;
if (user.getIsPrimary()){
areaName=adminAreaService.getById(user.getAreaId()).getAreaName();
}else {
areaName = appAreaService.getById(user.getAreaId()).getName();
}
// TBaseCustomer company = customerService.getById(Integer.valueOf(user.getCompanyId()));
DeviceInfoVO device = deviceService.getByDeviceNo(ticket.getDeviceNo());
String warrantyStateDesc = "";
@ -376,7 +384,7 @@ public class TicketController extends ControllerBase {
.setCreateUserName(user.getName())
.setCreateUserAvatar(user.getAvatar())
.setCreateTime(ticket.getCreateTime())
.setAreaName(appArea.getName())
.setAreaName(areaName)
.setCompanyName(device.getCustomerName())
.setHandle(handle)
.setSolution(ticket.getSolution())

View File

@ -0,0 +1,13 @@
package com.nflg.mobilebroken.admin.pojo.dto;
import lombok.Data;
@Data
public class TiketTimeoutDTO {
private Integer emergency;
private Integer general;
private Integer nonemergency;
}

View File

@ -3,7 +3,8 @@ package com.nflg.mobilebroken.admin.task;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.util.StrUtil;
import com.nflg.mobilebroken.admin.service.NotificationService;
import cn.hutool.json.JSONUtil;
import com.nflg.mobilebroken.admin.pojo.dto.TiketTimeoutDTO;
import com.nflg.mobilebroken.common.constant.Constant;
import com.nflg.mobilebroken.common.constant.MessageSubType;
import com.nflg.mobilebroken.repository.entity.*;
@ -39,19 +40,23 @@ public class TicketScheduledTasks {
@Resource
private ITicketFollowService ticketFollowService;
@Resource
private NotificationService notificationService;
private static final DateTimeFormatter FORMATTER= DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_PATTERN);
@Resource
private IAppMessageService appMessageService;
@Resource
private IDictionaryItemTranslateService dictionaryItemTranslateService;
@Resource
private ITBaseDeviceTypeService deviceTypeService;
@Resource
private EmailService emailService;
@Resource
private IParamConfigService paramConfigService;
/**
* 工单超时提醒
* 每天午夜12点执行一次
@ -59,32 +64,31 @@ public class TicketScheduledTasks {
@Scheduled(cron = "0 0 0 * * ?")
public void timeoutRemind() {
log.info("开始执行工单超时提醒");
emergencyRemind();
generalRemind();
nonemergencyRemind();
ParamConfig config = paramConfigService.lambdaQuery().eq(ParamConfig::getCode, "TiketTimeout").one();
TiketTimeoutDTO cfgTimeout= JSONUtil.toBean(config.getValue(), TiketTimeoutDTO.class);
emergencyRemind(cfgTimeout);
generalRemind(cfgTimeout);
nonemergencyRemind(cfgTimeout);
log.info("执行工单超时提醒完成");
}
private void emergencyRemind() {
int days = 3;
log.info("获取状态为紧急且{}天未解决的工单", days);
List<Ticket> tickets = ticketService.getEmergencys(days);
private void emergencyRemind(TiketTimeoutDTO cfgTimeout) {
log.info("获取状态为紧急且{}天未解决的工单", cfgTimeout.getEmergency());
List<Ticket> tickets = ticketService.getEmergencys(cfgTimeout.getEmergency());
log.info("共{}条数据", tickets.size());
tickets.forEach(this::ticketHande);
}
private void generalRemind() {
int days = 7;
log.info("获取状态为普通且{}天未解决的工单", days);
List<Ticket> tickets = ticketService.getGenerals(days);
private void generalRemind(TiketTimeoutDTO cfgTimeout) {
log.info("获取状态为普通且{}天未解决的工单", cfgTimeout.getGeneral());
List<Ticket> tickets = ticketService.getGenerals(cfgTimeout.getGeneral());
log.info("共{}条数据", tickets.size());
tickets.forEach(this::ticketHande);
}
private void nonemergencyRemind() {
int days = 15;
log.info("获取状态为普通且{}天未解决的工单", days);
List<Ticket> tickets = ticketService.getNonemergency(days);
private void nonemergencyRemind(TiketTimeoutDTO cfgTimeout) {
log.info("获取状态为非紧急且{}天未解决的工单", cfgTimeout.getNonemergency());
List<Ticket> tickets = ticketService.getNonemergency(cfgTimeout.getNonemergency());
log.info("共{}条数据", tickets.size());
tickets.forEach(this::ticketHande);
}

View File

@ -73,6 +73,9 @@ public class TiketController extends ControllerBase {
@Resource
private IAppAreaService appAreaService;
@Resource
private ITBaseAreaService adminAreaService;
@Resource
private ITBaseCustomerService customerService;
@ -104,7 +107,6 @@ public class TiketController extends ControllerBase {
/**
* 获取所有设备部件
*
* @return 设备部件列表
**/
@GetMapping("getAllDeviceComponents")
@ -186,7 +188,12 @@ public class TiketController extends ControllerBase {
public ApiResult<TicketInfoVO> getTicket(@Valid @RequestParam @NotNull Integer id) {
Ticket ticket = ticketService.getById(id);
AppUser user = appUserService.getById(ticket.getUserId());
AppArea appArea = appAreaService.getById(user.getAreaId());
String areaName;
if (user.getIsPrimary()){
areaName=adminAreaService.getById(user.getAreaId()).getAreaName();
}else {
areaName = appAreaService.getById(user.getAreaId()).getName();
}
List<TBaseCustomer> companys = customerService.listByIds(Arrays.stream(user.getCompanyId().split(",")).map(Integer::parseInt).collect(Collectors.toList()));
DeviceInfoVO device = deviceService.getByDeviceNo(ticket.getDeviceNo());
String handle = ticket.getHandle();
@ -210,7 +217,7 @@ public class TiketController extends ControllerBase {
.setCreateUserName(user.getName())
.setCreateUserAvatar(user.getAvatar())
.setCreateTime(ticket.getCreateTime())
.setAreaName(appArea.getName())
.setAreaName(areaName)
.setSolveTime(ticket.getSolveTime())
.setCompanyName(StrUtil.join(",",companys.stream().map(TBaseCustomer::getAgencyCompanyName).collect(Collectors.toList())))
.setHandle(handle)

View File

@ -55,6 +55,9 @@ public class UserController extends ControllerBase {
@Value("${email.activate.app.url}")
private String activateUrl;
@Value("${email.activate.app.website}")
private String websiteUrl;
@Resource
private IAppUserService appUserService;
@ -82,6 +85,9 @@ public class UserController extends ControllerBase {
@Resource
private IAdminMessageService adminMessageService;
@Resource
private IDictionaryItemTranslateService dictionaryItemTranslateService;
/**
* 获取用户信息
* @return 用户信息
@ -259,11 +265,15 @@ public class UserController extends ControllerBase {
@Transactional
@PostMapping("forgetPassword")
public ApiResult<Void> forgetPassword(@Valid @RequestParam @NotBlank String email) {
String password = RandomUtil.randomString(6);
AppUser appUser=appUserService.forgetPassword(email, password);
try {
String password = RandomUtil.randomString(6);
appUserService.forgetPassword(email, password);
emailService.sendEmail(email, "忘记密码",
"随机码为:" + password + ",点击链接激活账号: " + activateUrl + "?code=" + Base64.getUrlEncoder().encodeToString(email.getBytes()));
String subject = dictionaryItemTranslateService.getValueByCode(Constant.DICTIONARY_EMAIL_NOTIFY, Constant.DICTIONARY_ITEM_EMAIL_TITLE_ACCOUNT_RESET_PASSWORD, appUser.getLanguageCode());
String content = dictionaryItemTranslateService.getValueByCode(Constant.DICTIONARY_EMAIL_NOTIFY, Constant.DICTIONARY_ITEM_EMAIL_CONTENT_RESET_PASSWORD_NOTIFY, appUser.getLanguageCode())
.replace("${loginName}",appUser.getLoginName())
.replace("${url}",activateUrl + "?code=" + Base64.getUrlEncoder().encodeToString(email.getBytes()))
.replace("${password}",password);
emailService.sendEmail(email, subject,content);
} catch (Exception ex) {
throw new NflgException(STATE.BusinessError, "发送邮件失败:" + ex.getMessage());
}
@ -281,9 +291,14 @@ public class UserController extends ControllerBase {
try {
for (Integer id : ids) {
String password=RandomUtil.randomString(6);
String email=appUserService.resetPassword(id,password);
emailService.sendEmail(email, "密码重置",
"随机码为:" + password + ",点击链接激活账号: " + activateUrl + "?code=" + Base64.getUrlEncoder().encodeToString(email.getBytes()));
AppUser appUser=appUserService.resetPassword(id,password);
String subject = dictionaryItemTranslateService.getValueByCode(Constant.DICTIONARY_EMAIL_NOTIFY, Constant.DICTIONARY_ITEM_EMAIL_TITLE_ACCOUNT_RESET_PASSWORD, appUser.getLanguageCode());
String content = dictionaryItemTranslateService.getValueByCode(Constant.DICTIONARY_EMAIL_NOTIFY, Constant.DICTIONARY_ITEM_EMAIL_CONTENT_RESET_PASSWORD_NOTIFY, appUser.getLanguageCode())
.replace("${loginName}",appUser.getLoginName())
.replace("${url}",activateUrl + "?code=" + Base64.getUrlEncoder().encodeToString(appUser.getEmail().getBytes()))
.replace("${password}",password)
.replace("${website}",websiteUrl);
emailService.sendEmail(appUser.getEmail(), subject, content);
}
}catch (Exception ex){
throw new NflgException(STATE.BusinessError,"发送邮件失败:"+ex.getMessage());

View File

@ -42,6 +42,14 @@ public class Constant {
public static final String DICTIONARY_ITEM_EMAIL_CONTENT_TICKET_NOTIFY="TicketNotify";
public static final String DICTIONARY_ITEM_EMAIL_TITLE_ACCOUNT_RESET_PASSWORD="TitleResetPassword";
public static final String DICTIONARY_ITEM_EMAIL_TITLE_ACCOUNT_ACTIVATION="TitleAccountActivation";
public static final String DICTIONARY_ITEM_EMAIL_CONTENT_RESET_PASSWORD_NOTIFY="ResetPassword";
public static final String DICTIONARY_ITEM_EMAIL_CONTENT_ACCOUNT_ACTIVATION_NOTIFY="AccountActivation";
/**
* 事业部部长
*/

View File

@ -26,7 +26,6 @@ public class TicketAddRequest {
private String title;
//描述
@NotBlank
@Size(max = 500, message = "描述长度不能超过500")
private String description;

View File

@ -13,7 +13,7 @@ public class AppUserApplyforInfoVO {
private String avatar;
//申请类型0新增账号1账号启用2账号延期
private Integer type;
private Byte type;
//公司名称
private String companyName;

View File

@ -81,6 +81,9 @@ public class AppUserForAdminVO {
*/
private String languageCode;
//职位
private String title;
//下级账号
private List<AppUserForAdminVO> children;
}

View File

@ -1,12 +1,14 @@
package com.nflg.mobilebroken.common.pojo.vo;
import lombok.Data;
import lombok.experimental.Accessors;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
@Data
@Accessors(chain = true)
public class MenuVO {
private Integer id;

View File

@ -20,7 +20,7 @@ public interface IAdminUserService extends IService<AdminUser> {
AdminUser getUser(String userName, String password);
void add(AccountAddRequest request);
AdminUser add(AccountAddRequest request);
void update(AccountUpdateRequest request);
@ -32,7 +32,7 @@ public interface IAdminUserService extends IService<AdminUser> {
void authorizeRole(AuthorizeRoleRequest request);
String resetPassword(Integer id, String password);
AdminUser resetPassword(Integer id, String password);
void setAvatar(Integer userId, String avatar);
@ -40,7 +40,7 @@ public interface IAdminUserService extends IService<AdminUser> {
void activateUser(UserActivateRequest request);
void forgetPassword(String email, String password);
AdminUser forgetPassword(String email, String password);
List<AdminUser> getByTitleCode(String titleCode);

View File

@ -25,7 +25,7 @@ public interface IAppUserService extends IService<AppUser> {
void disable(Integer id);
String resetPassword(Integer id, String password);
AppUser resetPassword(Integer id, String password);
IPage<CompanyVO> search(UserSearchRequest request);
@ -33,7 +33,7 @@ public interface IAppUserService extends IService<AppUser> {
AppUserVO getInfo(Integer userId);
void addPrimaryAppUser(PrimaryAppUserAddRequest request);
AppUser addPrimaryAppUser(PrimaryAppUserAddRequest request);
void updatePrimaryAppUser(PrimaryAppUserUpdateRequest request);
@ -51,7 +51,7 @@ public interface IAppUserService extends IService<AppUser> {
void activateUser(UserActivateRequest request);
void forgetPassword(String email, String password);
AppUser forgetPassword(String email, String password);
AppUser getPrimaryByCompanyId(String companyId);
}

View File

@ -12,14 +12,18 @@ import com.nflg.mobilebroken.common.pojo.vo.ButtonVO;
import com.nflg.mobilebroken.common.pojo.vo.MenuVO;
import com.nflg.mobilebroken.common.pojo.vo.RoleVO;
import com.nflg.mobilebroken.common.util.AdminUserUtil;
import com.nflg.mobilebroken.repository.entity.AdminMenu;
import com.nflg.mobilebroken.repository.entity.AdminRole;
import com.nflg.mobilebroken.repository.mapper.AdminRoleMapper;
import com.nflg.mobilebroken.repository.service.IAdminMenuService;
import com.nflg.mobilebroken.repository.service.IAdminRoleService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
/**
* <p>
@ -32,6 +36,9 @@ import java.util.List;
@Service
public class AdminRoleServiceImpl extends ServiceImpl<AdminRoleMapper, AdminRole> implements IAdminRoleService {
@Resource
private IAdminMenuService menuService;
@Override
public void add(RoleAddRequest request) {
AdminRole adminRole = new AdminRole()
@ -75,7 +82,22 @@ public class AdminRoleServiceImpl extends ServiceImpl<AdminRoleMapper, AdminRole
if (CollectionUtil.isEmpty(roleCodes)){
return Collections.emptyList();
}
return baseMapper.getMenusByRoleCodes(roleCodes);
List<MenuVO> menus=baseMapper.getMenusByRoleCodes(roleCodes);
for (int i = 0; i < menus.size(); i++) {
MenuVO menu = menus.get(i);
bindParent(menu, menus);
}
return menus;
}
private void bindParent(MenuVO menu,List<MenuVO> datas){
if (!Objects.equals(0,menu.getParentId())){
AdminMenu mp=menuService.getById(menu.getParentId());
if (datas.stream().noneMatch(d->Objects.equals(d.getId(),mp.getId()))){
MenuVO m=new MenuVO().setId(mp.getId()).setName(mp.getName()).setUrl(mp.getUrl()).setComponent(mp.getComponent()).setParentId(mp.getParentId());
datas.add(m);
}
}
}
@Override

View File

@ -67,7 +67,7 @@ public class AdminUserServiceImpl extends ServiceImpl<AdminUserMapper, AdminUser
}
@Override
public void add(AccountAddRequest request) {
public AdminUser add(AccountAddRequest request) {
VUtils.trueThrowBusinessError(lambdaQuery().eq(AdminUser::getLoginName, request.getLoginName()).exists())
.throwMessage("已存在登录名为"+request.getLoginName()+"的账号");
AdminUser user = new AdminUser()
@ -83,6 +83,7 @@ public class AdminUserServiceImpl extends ServiceImpl<AdminUserMapper, AdminUser
.setCreateBy(AdminUserUtil.getUserId())
.setCreateTime(LocalDateTime.now());
save(user);
return user;
}
@Override
@ -172,7 +173,7 @@ public class AdminUserServiceImpl extends ServiceImpl<AdminUserMapper, AdminUser
}
@Override
public String resetPassword(Integer id, String password) {
public AdminUser resetPassword(Integer id, String password) {
String encodePassword = PASSWORDENCODER.encode(password);
AdminUser user = getById(id);
VUtils.trueThrowBusinessError(Objects.isNull(user)).throwMessage("用户不存在");
@ -180,7 +181,7 @@ public class AdminUserServiceImpl extends ServiceImpl<AdminUserMapper, AdminUser
user.setUpdateTime(LocalDateTime.now());
user.setState(UserState.ToBeActivated.getState());
updateById(user);
return user.getEmail();
return user;
}
@Override
@ -223,7 +224,7 @@ public class AdminUserServiceImpl extends ServiceImpl<AdminUserMapper, AdminUser
}
@Override
public void forgetPassword(String email, String password) {
public AdminUser forgetPassword(String email, String password) {
String encodePassword = PASSWORDENCODER.encode(password);
AdminUser user = lambdaQuery().eq(AdminUser::getLoginName, email).one();
VUtils.trueThrowBusinessError(Objects.isNull(user)).throwMessage("用户不存在");
@ -233,6 +234,7 @@ public class AdminUserServiceImpl extends ServiceImpl<AdminUserMapper, AdminUser
user.setPassword(encodePassword);
user.setUpdateTime(LocalDateTime.now());
updateById(user);
return user;
}
@Override

View File

@ -50,16 +50,12 @@ public class AppAreaServiceImpl extends ServiceImpl<AppAreaMapper, AppArea> impl
@Override
public IPage<AreaVO> search(AreaSearchRequest request) {
if (StrUtil.isBlank(request.getName())) {
if (StrUtil.isBlank(request.getName()) && Objects.isNull(request.getEnabled())) {
return getPage(request);
}else {
LambdaQueryWrapper<AppArea> queryWrapper = new LambdaQueryWrapper<>();
if (StrUtil.isNotBlank(request.getName())) {
queryWrapper.like(AppArea::getName, request.getName());
}
if (Objects.nonNull(request.getEnabled())) {
queryWrapper.eq(AppArea::getEnable, request.getEnabled());
}
queryWrapper.like(StrUtil.isNotBlank(request.getName()),AppArea::getName, request.getName());
queryWrapper.eq(Objects.nonNull(request.getEnabled()),AppArea::getEnable, request.getEnabled());
queryWrapper.orderByDesc(AppArea::getId);
List<AppArea> list = baseMapper.selectList(queryWrapper);
//找出非根节点

View File

@ -14,15 +14,9 @@ import com.nflg.mobilebroken.common.pojo.vo.AppUserVO;
import com.nflg.mobilebroken.common.util.AdminUserUtil;
import com.nflg.mobilebroken.common.util.AppUserUtil;
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.entity.*;
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.ITBasePositionService;
import com.nflg.mobilebroken.repository.service.*;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service;
@ -54,6 +48,9 @@ public class AppUserApplyforServiceImpl extends ServiceImpl<AppUserApplyforMappe
@Resource
private ITBasePositionService positionService;
@Resource
private ITBaseCustomerService customerService;
@Override
public AppUserApplyfor add(AddUserRequest request) {
VUtils.trueThrowBusinessError(appUserService.lambdaQuery().eq(AppUser::getEmail, request.getEmail()).exists())
@ -115,13 +112,17 @@ public class AppUserApplyforServiceImpl extends ServiceImpl<AppUserApplyforMappe
AppArea area = appAreaService.getById(applyfor.getAreaId());
TBasePosition position = positionService.getById(applyfor.getTitleId());
String titleName = Objects.isNull(position) ? "" : position.getPositionName();
TBaseCustomer customer =customerService.getById(applyfor.getCompanyId());
vo.setApplyfor(new AppUserApplyforInfoVO()
.setType(applyfor.getType())
.setAreaName(area.getName())
.setPhone(applyfor.getUserPhone())
.setEmail(applyfor.getUserEmail())
.setAvatar(applyfor.getUserAvatar())
.setUserName(applyfor.getUserName())
.setTitleName(titleName)
.setPhone(applyfor.getUserPhone())
.setCompanyName(customer.getAgencyCompanyName())
.setReason(applyfor.getReason())
.setCreateTime(applyfor.getCreateTime()));
AppUser appUser = appUserService.getById(applyfor.getCreateBy());
@ -129,6 +130,7 @@ public class AppUserApplyforServiceImpl extends ServiceImpl<AppUserApplyforMappe
vo.setUser(new AppUserVO()
.setAreaName(area.getName())
.setSalesUserName(appUser.getSalesUserName())
.setState(1)
.setExpireTime(appUser.getExpireTime())
.setEmail(appUser.getEmail())
.setName(appUser.getName())

View File

@ -59,7 +59,10 @@ public class AppUserServiceImpl extends ServiceImpl<AppUserMapper, AppUser> impl
private IAdminUserService adminUserService;
@Resource
private ILanguageService languageService;
private ITBasePositionService positionService;
@Resource
private ITBaseAreaService adminAreaService;
@Override
public AppUser getUser(String userName, String password) {
@ -83,7 +86,7 @@ public class AppUserServiceImpl extends ServiceImpl<AppUserMapper, AppUser> impl
}
@Override
public String resetPassword(Integer id, String password) {
public AppUser resetPassword(Integer id, String password) {
String encodePassword=PASSWORDENCODER.encode(password);
AppUser user=getById(id);
VUtils.trueThrowBusinessError(Objects.isNull(user)).throwMessage("用户不存在");
@ -91,7 +94,7 @@ public class AppUserServiceImpl extends ServiceImpl<AppUserMapper, AppUser> impl
user.setPassword(encodePassword);
user.setUpdateTime(LocalDateTime.now());
updateById(user);
return user.getEmail();
return user;
}
@Override
@ -130,7 +133,7 @@ public class AppUserServiceImpl extends ServiceImpl<AppUserMapper, AppUser> impl
}
@Override
public void addPrimaryAppUser(PrimaryAppUserAddRequest request) {
public AppUser addPrimaryAppUser(PrimaryAppUserAddRequest request) {
VUtils.trueThrowBusinessError(lambdaQuery().eq(AppUser::getLoginName, request.getLoginName()).exists())
.throwMessage("登录名已存在");
List<Integer> companyIds = lambdaQuery()
@ -167,6 +170,7 @@ public class AppUserServiceImpl extends ServiceImpl<AppUserMapper, AppUser> impl
.setState(UserState.ToBeActivated.getState())
.setExpireTime(LocalDateTime.of(LocalDateTime.now().getYear(), 12, 31, 0, 0, 0).toLocalDate());
save(user);
return user;
}
@Override
@ -234,7 +238,7 @@ public class AppUserServiceImpl extends ServiceImpl<AppUserMapper, AppUser> impl
.like(StrUtil.isNotBlank(request.getName()), AppUser::getName, request.getName())
.page(new Page<>(request.getPage(), request.getPageSize()));
return PageUtil.convert(page, d -> {
AppArea area = appAreaService.getById(d.getAreaId());
TBaseArea area = adminAreaService.getById(d.getAreaId());
String createBy = "";
if (d.getIsPrimary()) {
if (Objects.nonNull(d.getCreateBy())) {
@ -267,7 +271,7 @@ public class AppUserServiceImpl extends ServiceImpl<AppUserMapper, AppUser> impl
.setPhone(d.getPhone())
.setAreaId(d.getAreaId())
.setSalesUserName(d.getSalesUserName())
.setAreaName(area.getName())
.setAreaName(area.getAreaName())
.setUserState(d.getState())
.setExpireTime(d.getExpireTime())
.setCreateBy(createBy)
@ -329,15 +333,18 @@ public class AppUserServiceImpl extends ServiceImpl<AppUserMapper, AppUser> impl
if (Objects.nonNull(d.getUpdateBy())) {
updateBy = getById(d.getUpdateBy()).getName();
}
TBaseCustomer customer=customerService.getById(d.getCompanyId());
TBasePosition title=positionService.getById(d.getTitleId());
return new AppUserForAdminVO()
.setKey("u-" + d.getId())
.setId(d.getId())
.setAvatar(d.getAvatar())
.setLoginName(d.getLoginName())
.setUserName(d.getName())
.setCompanyName(d.getCompanyId())
.setCompanyName(customer.getAgencyCompanyName())
.setName(d.getName())
.setEmail(d.getEmail())
.setTitle(title.getPositionName())
.setLanguageCode(d.getLanguageCode())
.setSalesUserName(d.getSalesUserName())
.setAreaName(area.getName())
@ -473,7 +480,7 @@ public class AppUserServiceImpl extends ServiceImpl<AppUserMapper, AppUser> impl
}
@Override
public void forgetPassword(String email, String password) {
public AppUser forgetPassword(String email, String password) {
String encodePassword = PASSWORDENCODER.encode(password);
AppUser user = lambdaQuery().eq(AppUser::getLoginName, email).one();
VUtils.trueThrowBusinessError(Objects.isNull(user)).throwMessage("用户不存在");
@ -483,6 +490,7 @@ public class AppUserServiceImpl extends ServiceImpl<AppUserMapper, AppUser> impl
user.setPassword(encodePassword);
user.setUpdateTime(LocalDateTime.now());
updateById(user);
return user;
}
@Override

View File

@ -88,7 +88,7 @@ public class DictionaryItemServiceImpl extends ServiceImpl<DictionaryItemMapper,
.setCreateBy(AdminUserUtil.getUserName())
.setCreateTime(LocalDateTime.now());
save(dictionaryItem);
id = dictionary.getId();
id = dictionaryItem.getId();
} else {
DictionaryItem dictionaryItem = new DictionaryItem()
.setId(request.getId())

View File

@ -25,7 +25,7 @@
</select>
<select id="getMenusByRoleCodes" resultType="com.nflg.mobilebroken.common.pojo.vo.MenuVO">
SELECT DISTINCT m.id,m.`name`,m.url,m.component
SELECT DISTINCT m.id,m.`name`,m.url,m.component,m.parent_id AS 'parentId'
FROM admin_role r
INNER JOIN admin_role_menu_map rmm ON r.id=rmm.role_id
INNER JOIN admin_menu m ON rmm.menu_id=m.id

View File

@ -72,11 +72,12 @@
</sql>
<select id="searchMy" resultType="com.nflg.mobilebroken.common.pojo.vo.TicketVO">
SELECT t.*,a.`name` AS 'areaName',IF(tf.id IS NULL, false, true) AS 'followed',u.`name` AS 'createBy'
SELECT t.*,IF(u.is_primary,a1.area_name,a2.`name`) AS 'areaName',IF(tf.id IS NULL, false, true) AS 'followed',u.`name` AS 'createBy'
,IF(tf.id IS NULL, false, true) AS 'followed',t.handle
FROM ticket t
LEFT JOIN app_user u ON t.user_id=u.id
LEFT JOIN app_area a ON u.area_id=a.id
LEFT JOIN t_base_area a1 ON u.area_id=a1.id
LEFT JOIN app_area a2 ON u.area_id=a2.id
LEFT JOIN ticket_follow tf ON t.id=tf.ticket_id AND tf.user_id=#{userId} AND tf.from=0
WHERE t.user_id=#{userId} AND t.state!=4
<include refid="searchWhereCondition"/>
@ -84,10 +85,11 @@
</select>
<select id="searchFollow" resultType="com.nflg.mobilebroken.common.pojo.vo.TicketVO">
SELECT t.*,a.`name` AS 'areaName',true AS 'followed',u.`name` AS 'createBy',true AS 'followed',t.handle
SELECT t.*,IF(u.is_primary,a1.area_name,a2.`name`) AS 'areaName',true AS 'followed',u.`name` AS 'createBy',true AS 'followed',t.handle
FROM ticket t
LEFT JOIN app_user u ON t.user_id=u.id
LEFT JOIN app_area a ON u.area_id=a.id
LEFT JOIN t_base_area a1 ON u.area_id=a1.id
LEFT JOIN app_area a2 ON u.area_id=a2.id
LEFT JOIN ticket_follow tf ON t.id=tf.ticket_id AND tf.from=0
WHERE tf.user_id=#{userId} AND t.state!=4
<include refid="searchWhereCondition"/>
@ -95,10 +97,11 @@
</select>
<select id="searchArea" resultType="com.nflg.mobilebroken.common.pojo.vo.TicketVO">
SELECT t.*,a.`name` AS 'areaName',u.`name` AS 'createBy',t.handle
SELECT t.*,IF(u.is_primary,a1.area_name,a2.`name`) AS 'areaName',u.`name` AS 'createBy',t.handle
FROM ticket t
LEFT JOIN app_user u ON t.user_id=u.id
LEFT JOIN app_area a ON u.area_id=a.id
LEFT JOIN app_user u ON t.user_id=u.id
LEFT JOIN t_base_area a1 ON u.area_id=a1.id
LEFT JOIN app_area a2 ON u.area_id=a2.id
WHERE t.state!=4 AND u.company_id IN
<foreach collection="companyIds" item="companyId" open="(" separator="," close=")">
#{companyId}
@ -108,14 +111,15 @@
</select>
<select id="searchFromAdmin" resultType="com.nflg.mobilebroken.common.pojo.vo.AdminTicketVO">
SELECT t.id,t.`no`,t.title,t.state,t.urgency,t.component,t.question,t.solution,a.`name` AS 'areaName'
SELECT t.id,t.`no`,t.title,t.state,t.urgency,t.component,t.question,t.solution,IF(u.is_primary,a1.area_name,a2.`name`) AS 'areaName'
,d.customer_name AS 'companyName',u.company_id AS 'companyId',u.`name` AS 'createBy',t.device_no AS 'deviceNo',t.use_time AS 'useTime'
,t.create_time AS 'createTime',t.handle,t.solve_time AS 'solveTime',di.name AS 'warrantyStatusDesc',d.device_type AS 'deviceType'
,d.model_no AS 'equipmentModel',d.shipment_date AS 'shipmentDate',IF(tf.id IS NULL, false, true) AS 'followed',t.cqm
FROM ticket t
LEFT JOIN app_user u ON t.user_id=u.id
LEFT JOIN t_base_customer c ON u.company_id=c.id
LEFT JOIN app_area a ON u.area_id=a.id
LEFT JOIN t_base_area a1 ON u.area_id=a1.id
LEFT JOIN app_area a2 ON u.area_id=a2.id
LEFT JOIN device d ON t.device_no=d.device_no AND d.data_valid_state=1
LEFT JOIN dictionary_item di ON d.warranty_state=di.id
LEFT JOIN ticket_follow tf ON t.id=tf.ticket_id AND tf.user_id=#{userId} AND tf.from=1
@ -133,13 +137,14 @@
<!-- </select>-->
<select id="searchAllFromAdmin" resultType="com.nflg.mobilebroken.common.pojo.vo.AdminTicketVO">
SELECT t.id,t.`no`,t.title,t.state,t.urgency,t.component,t.question,t.solution,a.`name` AS 'areaName'
SELECT t.id,t.`no`,t.title,t.state,t.urgency,t.component,t.question,t.solution,IF(u.is_primary,a1.area_name,a2.`name`) AS 'areaName'
,d.customer_name AS 'companyName',u.company_id AS 'companyId',u.`name` AS 'createBy',t.device_no AS 'deviceNo',t.use_time AS 'useTime'
,t.create_time AS 'createTime',t.handle,t.solve_time AS 'solveTime',di.name AS 'warrantyStatusDesc'
FROM ticket t
LEFT JOIN app_user u ON t.user_id=u.id
LEFT JOIN t_base_customer c ON u.company_id=c.id
LEFT JOIN app_area a ON u.area_id=a.id
LEFT JOIN t_base_area a1 ON u.area_id=a1.id
LEFT JOIN app_area a2 ON u.area_id=a2.id
LEFT JOIN device d ON t.device_no=d.device_no AND d.data_valid_state=1
LEFT JOIN dictionary_item di ON d.warranty_state=di.id
<include refid="adminSearchWhereCondition"/>
@ -147,14 +152,15 @@
</select>
<select id="searchFromAdminAndFollow" resultType="com.nflg.mobilebroken.common.pojo.vo.AdminTicketVO">
SELECT t.id,t.`no`,t.title,t.state,t.urgency,t.component,t.question,t.solution,a.`name` AS 'areaName'
SELECT t.id,t.`no`,t.title,t.state,t.urgency,t.component,t.question,t.solution,IF(u.is_primary,a1.area_name,a2.`name`) AS 'areaName'
,d.customer_name AS 'companyName',u.company_id AS 'companyId',u.`name` AS 'createBy',t.device_no AS 'deviceNo',t.use_time AS 'useTime'
,t.create_time AS 'createTime',t.handle,t.solve_time AS 'solveTime',di.name AS 'warrantyStatusDesc',d.device_type AS 'deviceType'
,d.model_no AS 'equipmentModel',d.shipment_date AS 'shipmentDate',IF(tf.id IS NULL, false, true) AS 'followed',t.cqm
FROM ticket t
LEFT JOIN app_user u ON t.user_id=u.id
LEFT JOIN t_base_customer c ON u.company_id=c.id
LEFT JOIN app_area a ON u.area_id=a.id
LEFT JOIN t_base_area a1 ON u.area_id=a1.id
LEFT JOIN app_area a2 ON u.area_id=a2.id
INNER JOIN ticket_follow tf ON t.id=tf.ticket_id AND tf.user_id=#{userId} AND tf.from=1
LEFT JOIN device d ON t.device_no=d.device_no AND d.data_valid_state=1
LEFT JOIN dictionary_item di ON d.warranty_state=di.id
@ -163,13 +169,14 @@
</select>
<select id="searchAllFromAdminAndFollow" resultType="com.nflg.mobilebroken.common.pojo.vo.AdminTicketVO">
SELECT t.id,t.`no`,t.title,t.state,t.urgency,t.component,t.question,t.solution,a.`name` AS 'areaName'
SELECT t.id,t.`no`,t.title,t.state,t.urgency,t.component,t.question,t.solution,IF(u.is_primary,a1.area_name,a2.`name`) AS 'areaName'
,d.customer_name AS 'companyName',u.company_id AS 'companyId',u.`name` AS 'createBy',t.device_no AS 'deviceNo',t.use_time AS 'useTime'
,t.create_time AS 'createTime',t.handle,t.solve_time AS 'solveTime',di.name AS 'warrantyStatusDesc',IF(tf.id IS NULL, false, true) AS 'followed'
FROM ticket t
LEFT JOIN app_user u ON t.user_id=u.id
LEFT JOIN t_base_customer c ON u.company_id=c.id
LEFT JOIN app_area a ON u.area_id=a.id
LEFT JOIN t_base_area a1 ON u.area_id=a1.id
LEFT JOIN app_area a2 ON u.area_id=a2.id
INNER JOIN ticket_follow tf ON t.id=tf.ticket_id AND tf.user_id=#{userId} AND tf.from=1
LEFT JOIN device d ON t.device_no=d.device_no AND d.data_valid_state=1
LEFT JOIN dictionary_item di ON d.warranty_state=di.id