diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/AppUserController.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/AppUserController.java index 3244b625..8cf0c3eb 100644 --- a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/AppUserController.java +++ b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/AppUserController.java @@ -3,6 +3,8 @@ 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.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.*; @@ -16,11 +18,13 @@ import com.nflg.mobilebroken.starter.annotation.MethodInfoMark; import com.nflg.mobilebroken.starter.service.EmailService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; +import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import javax.mail.MessagingException; import javax.validation.Valid; +import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotNull; import java.util.Base64; import java.util.List; @@ -203,4 +207,25 @@ public class AppUserController extends ControllerBase { appUserService.enable(request); return ApiResult.success(); } + + /** + * 发送重置密码邮件 + * @param ids 用户id列表 + **/ + @Transactional + @PostMapping("sendResetPasswordEmail") + //@SaUserCheckRole("primary") + public ApiResult sendResetPasswordEmail(@Valid @RequestBody @NotEmpty List ids){ + 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())); + } + }catch (Exception ex){ + throw new NflgException(STATE.BusinessError,"发送邮件失败:"+ex.getMessage()); + } + return ApiResult.success(); + } } \ No newline at end of file diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/FileController.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/FileController.java index 95273b91..b6409614 100644 --- a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/FileController.java +++ b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/FileController.java @@ -10,6 +10,7 @@ import com.nflg.mobilebroken.common.pojo.PageData; import com.nflg.mobilebroken.common.pojo.request.FileSearchRequest; import com.nflg.mobilebroken.common.pojo.vo.FileVO; import com.nflg.mobilebroken.common.util.AdminUserUtil; +import com.nflg.mobilebroken.repository.entity.FileUploadRecord; import com.nflg.mobilebroken.repository.service.IFileUploadRecordService; import com.nflg.mobilebroken.starter.service.FileUploadService; import org.springframework.web.bind.annotation.*; @@ -18,6 +19,7 @@ import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import javax.validation.Valid; import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.ArrayList; @@ -47,9 +49,11 @@ public class FileController extends ControllerBase { */ @PostMapping("uploadSingleFile") @ApiMark(moduleName = "文件管理", apiName = "上传单个文件") - public ApiResult uploadSingleFile(@RequestParam("file") MultipartFile file) { + public ApiResult uploadSingleFile(@Valid @NotNull @RequestParam("file") MultipartFile file,@Valid @NotNull @RequestParam("ticketId") Integer ticketId) { try { - return ApiResult.success(fileUploadService.upload(buildFilePath(file.getOriginalFilename()), file)); + String url=fileUploadService.upload(buildFilePath(file.getOriginalFilename()), file); + fileUploadRecordService.save(buildFileUploadRecord(ticketId,file,url)); + return ApiResult.success(url); } catch (Exception ex) { throw new NflgException(STATE.BusinessError, "上传文件失败:" + ex.getMessage()); } @@ -67,21 +71,36 @@ public class FileController extends ControllerBase { */ @PostMapping("uploadMultipleFiles") @ApiMark(moduleName = "文件管理", apiName = "上传多个文件") - public ApiResult> uploadMultipleFiles(@Valid @RequestParam("files") @NotEmpty List files) { + public ApiResult> uploadMultipleFiles(@Valid @RequestParam("files") @NotEmpty List files,@Valid @NotNull @RequestParam("ticketId") Integer ticketId) { try { List list = new ArrayList<>(); + List records = new ArrayList<>(); for (MultipartFile f : files) { - list.add(fileUploadService.upload(buildFilePath(f.getOriginalFilename()), f)); + String url=fileUploadService.upload(buildFilePath(f.getOriginalFilename()), f); + list.add(url); + records.add(buildFileUploadRecord(ticketId,f,url)); } + fileUploadRecordService.saveBatch(records); return ApiResult.success(list); } catch (Exception ex) { throw new NflgException(STATE.BusinessError, "上传文件失败:" + ex.getMessage()); } } + private FileUploadRecord buildFileUploadRecord(Integer ticketId, MultipartFile file, String url){ + return new FileUploadRecord() + .setFileName(file.getOriginalFilename()) + .setFileType(file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."))) + .setFrom("admin") + .setCreateTime(LocalDateTime.now()) + .setSource((byte) 0) + .setSourceId(ticketId) + .setUrl(url) + .setCreateBy(AdminUserUtil.getUserName()); + } + /** * 搜索文件 - * * @param request 搜索条件 * @return 搜索到的文件列表 */ @@ -93,7 +112,6 @@ public class FileController extends ControllerBase { /** * 删除文件 - * * @param ids 文件id列表 */ @PostMapping("deleteFile") diff --git a/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/controller/FileController.java b/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/controller/FileController.java index d1bb9b3d..36244460 100644 --- a/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/controller/FileController.java +++ b/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/controller/FileController.java @@ -6,6 +6,8 @@ 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.util.AppUserUtil; +import com.nflg.mobilebroken.repository.entity.FileUploadRecord; +import com.nflg.mobilebroken.repository.service.IFileUploadRecordService; import com.nflg.mobilebroken.starter.service.FileUploadService; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; @@ -16,6 +18,7 @@ import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import javax.validation.Valid; import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.ArrayList; @@ -33,6 +36,9 @@ public class FileController extends ControllerBase { @Resource private FileUploadService fileUploadService; + @Resource + private IFileUploadRecordService fileUploadRecordService; + private static final DateTimeFormatter FORMATTER= DateTimeFormatter.ofPattern("yyyyMMdd"); /** @@ -41,9 +47,11 @@ public class FileController extends ControllerBase { * @return 可访问的文件url */ @PostMapping("uploadSingleFile") - public ApiResult uploadSingleFile(@RequestParam("file") MultipartFile file) { + public ApiResult uploadSingleFile(@Valid @NotNull @RequestParam("file") MultipartFile file,@Valid @NotNull @RequestParam("ticketId") Integer ticketId) { try { - return ApiResult.success(fileUploadService.upload(buildFilePath(file.getOriginalFilename()), file)); + String url=fileUploadService.upload(buildFilePath(file.getOriginalFilename()), file); + fileUploadRecordService.save(buildFileUploadRecord(ticketId,file,url)); + return ApiResult.success(url); }catch (Exception ex){ throw new NflgException(STATE.BusinessError,"上传文件失败:"+ex.getMessage()); } @@ -60,15 +68,31 @@ public class FileController extends ControllerBase { * @return 可访问的文件url列表 */ @PostMapping("uploadMultipleFiles") - public ApiResult> uploadMultipleFiles(@Valid @RequestParam("files") @NotEmpty List files) { + public ApiResult> uploadMultipleFiles(@Valid @RequestParam("files") @NotEmpty List files,@Valid @NotNull @RequestParam("ticketId") Integer ticketId) { try { List list = new ArrayList<>(); + List records = new ArrayList<>(); for (MultipartFile f : files) { - list.add(fileUploadService.upload(buildFilePath(f.getOriginalFilename()), f)); + String url=fileUploadService.upload(buildFilePath(f.getOriginalFilename()), f); + list.add(url); + records.add(buildFileUploadRecord(ticketId,f,url)); } + fileUploadRecordService.saveBatch(records); return ApiResult.success(list); } catch (Exception ex) { throw new NflgException(STATE.BusinessError, "上传文件失败:" + ex.getMessage()); } } + + private FileUploadRecord buildFileUploadRecord(Integer ticketId,MultipartFile file,String url){ + return new FileUploadRecord() + .setFileName(file.getOriginalFilename()) + .setFileType(file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."))) + .setFrom("app") + .setCreateTime(LocalDateTime.now()) + .setSource((byte) 0) + .setSourceId(ticketId) + .setUrl(url) + .setCreateBy(AppUserUtil.getUserName()); + } } diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/PrimaryAppUserUpdateRequest.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/PrimaryAppUserUpdateRequest.java index e1e3402d..190bbb76 100644 --- a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/PrimaryAppUserUpdateRequest.java +++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/PrimaryAppUserUpdateRequest.java @@ -3,8 +3,6 @@ package com.nflg.mobilebroken.common.pojo.request; import lombok.Data; import lombok.EqualsAndHashCode; -import javax.validation.constraints.NotNull; - @EqualsAndHashCode(callSuper = false) @Data public class PrimaryAppUserUpdateRequest extends PrimaryAppUserAddRequest { @@ -12,6 +10,5 @@ public class PrimaryAppUserUpdateRequest extends PrimaryAppUserAddRequest { private Integer id; //是否启用 - @NotNull private Boolean enable; } diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/FileUploadRecord.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/FileUploadRecord.java index 22a5db95..14f047b3 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/FileUploadRecord.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/FileUploadRecord.java @@ -48,7 +48,7 @@ public class FileUploadRecord implements Serializable { /** * 关联id */ - private String sourceId; + private Integer sourceId; /** * 访问地址 diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/AppUserServiceImpl.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/AppUserServiceImpl.java index b8e21a47..ddc1219d 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/AppUserServiceImpl.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/AppUserServiceImpl.java @@ -199,8 +199,10 @@ public class AppUserServiceImpl extends ServiceImpl impl .setCompanyId(StrUtil.join(",", request.getCompanyIds())) .setIsPrimary(true) // .setUpdateBy(AdminUserUtil.getUserId()) - .setUpdateTime(LocalDateTime.now()) - .setState(request.getEnable() ? UserState.Activated.getState() : UserState.Disabled.getState()); + .setUpdateTime(LocalDateTime.now()); + if (Objects.nonNull(request.getEnable())){ + user.setState(request.getEnable() ? UserState.Activated.getState() : UserState.Disabled.getState()); + } updateById(user); } diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/DictionaryItemServiceImpl.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/DictionaryItemServiceImpl.java index 48c54e0e..3395dc60 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/DictionaryItemServiceImpl.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/DictionaryItemServiceImpl.java @@ -105,6 +105,9 @@ public class DictionaryItemServiceImpl extends ServiceImpl forAdd = new ArrayList<>(); List forUpdate = new ArrayList<>(); for (TranslateMap translate : request.getLanguages()) { + if(StrUtil.isBlank(translate.getValue())){ + continue; + } DictionaryItemTranslate t = new DictionaryItemTranslate() .setDictionaryItemId(id) .setLanguageCode(translate.getCode()) diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/TicketServiceImpl.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/TicketServiceImpl.java index b0c1d2ff..8528439a 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/TicketServiceImpl.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/TicketServiceImpl.java @@ -68,6 +68,9 @@ public class TicketServiceImpl extends ServiceImpl impleme if (Objects.nonNull(request.getAreaId())) { request.setAreaIds(appAreaService.getAllhildrens(request.getAreaId())); } + if (Objects.nonNull(request.getEndTime())){ + request.setEndTime(request.getEndTime().plusDays(1)); + } if (request.getType()==1){ return baseMapper.searchMy(new Page<>(request.getPage(), request.getPageSize()), request, user.getId()); }else if (request.getType()==2){ diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/WebComponentServiceImpl.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/WebComponentServiceImpl.java index d221f13c..58b4e192 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/WebComponentServiceImpl.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/WebComponentServiceImpl.java @@ -129,11 +129,7 @@ public class WebComponentServiceImpl extends ServiceImpl translates = webComponentTranslateService.lambdaQuery().eq(WebComponentTranslate::getComponentId, id).list(); - List languages = new ArrayList<>(); - if (CollectionUtil.isNotEmpty(translates)) { - languages = languageService.listByIds(translates.stream().map(WebComponentTranslate::getLanguageId).collect(Collectors.toList())); - } - List finalLanguages = languages; + List languages = languageService.getLanguages(); return new WebComponentInfoVO() .setId(webComponent.getId()) .setModuleName(webComponent.getModuleName()) @@ -142,10 +138,12 @@ public class WebComponentServiceImpl extends ServiceImpl new WebComponentTraslateVO() - .setLanguageId(t.getLanguageId()) - .setLanguageName(finalLanguages.stream().filter(l -> l.getId().equals(t.getLanguageId())).findFirst().get().getName()) - .setValue(t.getValue())).collect(Collectors.toList())); + .setTraslates(languages.stream().map(l->{ + return new WebComponentTraslateVO() + .setLanguageId(l.getId()) + .setLanguageName(l.getName()) + .setValue(translates.stream().filter(t->Objects.equals(t.getLanguageId(),l.getId())).findFirst().orElse(new WebComponentTranslate().setValue("")).getValue()); + }).collect(Collectors.toList())); } @Transactional diff --git a/nflg-mobilebroken-repository/src/main/resources/mapper/TicketMapper.xml b/nflg-mobilebroken-repository/src/main/resources/mapper/TicketMapper.xml index 47a9c7e5..a05f91cd 100644 --- a/nflg-mobilebroken-repository/src/main/resources/mapper/TicketMapper.xml +++ b/nflg-mobilebroken-repository/src/main/resources/mapper/TicketMapper.xml @@ -77,7 +77,7 @@ LEFT JOIN app_user u ON t.user_id=u.id LEFT JOIN app_area a ON u.area_id=a.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} + WHERE t.user_id=#{userId} AND t.state!=4 ORDER BY t.create_time DESC @@ -88,7 +88,7 @@ LEFT JOIN app_user u ON t.user_id=u.id LEFT JOIN app_area a ON u.area_id=a.id LEFT JOIN ticket_follow tf ON t.id=tf.ticket_id AND tf.from=0 - WHERE tf.user_id=#{userId} + WHERE tf.user_id=#{userId} AND t.state!=4 ORDER BY t.create_time DESC @@ -98,7 +98,7 @@ 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 - WHERE u.company_id IN + WHERE t.state!=4 AND u.company_id IN #{companyId}