diff --git a/eladmin-logging/target/generated-sources/annotations/me/zhengjie/service/mapstruct/LogErrorMapperImpl.java b/eladmin-logging/target/generated-sources/annotations/me/zhengjie/service/mapstruct/LogErrorMapperImpl.java index e9a9b78..810794d 100644 --- a/eladmin-logging/target/generated-sources/annotations/me/zhengjie/service/mapstruct/LogErrorMapperImpl.java +++ b/eladmin-logging/target/generated-sources/annotations/me/zhengjie/service/mapstruct/LogErrorMapperImpl.java @@ -9,7 +9,7 @@ import org.springframework.stereotype.Component; @Generated( value = "org.mapstruct.ap.MappingProcessor", - date = "2023-06-05T10:51:01+0800", + date = "2023-06-21T17:29:40+0800", comments = "version: 1.3.1.Final, compiler: javac, environment: Java 1.8.0_251 (Oracle Corporation)" ) @Component diff --git a/eladmin-logging/target/generated-sources/annotations/me/zhengjie/service/mapstruct/LogSmallMapperImpl.java b/eladmin-logging/target/generated-sources/annotations/me/zhengjie/service/mapstruct/LogSmallMapperImpl.java index 6fcd3a7..f70bbac 100644 --- a/eladmin-logging/target/generated-sources/annotations/me/zhengjie/service/mapstruct/LogSmallMapperImpl.java +++ b/eladmin-logging/target/generated-sources/annotations/me/zhengjie/service/mapstruct/LogSmallMapperImpl.java @@ -9,7 +9,7 @@ import org.springframework.stereotype.Component; @Generated( value = "org.mapstruct.ap.MappingProcessor", - date = "2023-06-05T10:51:01+0800", + date = "2023-06-21T17:29:40+0800", comments = "version: 1.3.1.Final, compiler: javac, environment: Java 1.8.0_251 (Oracle Corporation)" ) @Component diff --git a/eladmin-system/log/history/2023-05-24.gz b/eladmin-system/log/history/2023-05-24.gz new file mode 100644 index 0000000..448311f Binary files /dev/null and b/eladmin-system/log/history/2023-05-24.gz differ diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/dmpMonitor/domian/DmpMonitorNumDto.java b/eladmin-system/src/main/java/me/zhengjie/modules/dmpMonitor/domian/DmpMonitorNumDto.java index 758dd54..4091761 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/dmpMonitor/domian/DmpMonitorNumDto.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/dmpMonitor/domian/DmpMonitorNumDto.java @@ -36,4 +36,9 @@ public class DmpMonitorNumDto { * 邮箱 */ private String mail; + + /** + * 版本 + */ + private Integer version; } diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/gender/domain/DeliveryGender.java b/eladmin-system/src/main/java/me/zhengjie/modules/gender/domain/DeliveryGender.java index 9ba22f6..32fb026 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/gender/domain/DeliveryGender.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/gender/domain/DeliveryGender.java @@ -15,18 +15,17 @@ */ package me.zhengjie.modules.gender.domain; -import lombok.Data; import cn.hutool.core.bean.BeanUtil; -import io.swagger.annotations.ApiModelProperty; import cn.hutool.core.bean.copier.CopyOptions; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; import me.zhengjie.common.convert.JpaConverterListJson; import org.hibernate.annotations.CreationTimestamp; import org.hibernate.annotations.UpdateTimestamp; import javax.persistence.*; -import javax.validation.constraints.*; -import java.sql.Timestamp; import java.io.Serializable; +import java.sql.Timestamp; import java.util.List; /** @@ -74,6 +73,11 @@ public class DeliveryGender implements Serializable { @ApiModelProperty(value = "类型") private Integer type; + + @Column(name = "user_id") + @ApiModelProperty(value = "用户id") + private Long userId; + @CreationTimestamp @Column(name = "create_time") @ApiModelProperty(value = "创建时间") diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/gender/rest/DeliveryGenderController.java b/eladmin-system/src/main/java/me/zhengjie/modules/gender/rest/DeliveryGenderController.java index 1df069c..41937b6 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/gender/rest/DeliveryGenderController.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/gender/rest/DeliveryGenderController.java @@ -1,42 +1,42 @@ /* -* Copyright 2019-2020 Zheng Jie -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ + * Copyright 2019-2020 Zheng Jie + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ package me.zhengjie.modules.gender.rest; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; import me.zhengjie.annotation.Log; import me.zhengjie.modules.gender.domain.DeliveryGender; import me.zhengjie.modules.gender.service.DeliveryGenderService; import me.zhengjie.modules.gender.service.dto.DeliveryGenderQueryCriteria; +import me.zhengjie.utils.SecurityUtils; import org.springframework.data.domain.Pageable; -import lombok.RequiredArgsConstructor; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; -import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; -import io.swagger.annotations.*; import org.springframework.web.multipart.MultipartFile; -import java.io.IOException; import javax.servlet.http.HttpServletResponse; +import java.io.IOException; /** -* @website https://el-admin.vip -* @author Enzo -* @date 2023-06-01 -**/ + * @author Enzo + * @website https://el-admin.vip + * @date 2023-06-01 + **/ @RestController @RequiredArgsConstructor @RequestMapping("/api/deliveryGender") @@ -47,35 +47,38 @@ public class DeliveryGenderController { @Log("导出数据") @ApiOperation("导出数据") @GetMapping(value = "/download") - @PreAuthorize("@el.check('deliveryGender:list')") public void download(HttpServletResponse response, DeliveryGenderQueryCriteria criteria) throws IOException { + Long currentUserId = SecurityUtils.getCurrentUserId(); + if (currentUserId != null && currentUserId != 1) { + criteria.setUserId(currentUserId); + } deliveryGenderService.download(deliveryGenderService.queryAll(criteria), response); } @GetMapping @ApiOperation("查询") - @PreAuthorize("@el.check('deliveryGender:list')") - public ResponseEntity query(DeliveryGenderQueryCriteria criteria, Pageable pageable){ - return new ResponseEntity<>(deliveryGenderService.queryAll(criteria,pageable),HttpStatus.OK); + public ResponseEntity query(DeliveryGenderQueryCriteria criteria, Pageable pageable) { + Long currentUserId = SecurityUtils.getCurrentUserId(); + if (currentUserId != null && currentUserId != 1) { + criteria.setUserId(currentUserId); + } + return new ResponseEntity<>(deliveryGenderService.queryAll(criteria, pageable), HttpStatus.OK); } @PostMapping @ApiOperation("新增") - @PreAuthorize("@el.check('deliveryGender:add')") - public ResponseEntity create(@Validated @RequestBody DeliveryGender resources){ - return new ResponseEntity<>(deliveryGenderService.create(resources),HttpStatus.CREATED); + public ResponseEntity create(@Validated @RequestBody DeliveryGender resources) { + return new ResponseEntity<>(deliveryGenderService.create(resources), HttpStatus.CREATED); } @PutMapping @ApiOperation("修改") - @PreAuthorize("@el.check('deliveryGender:edit')") - public ResponseEntity update(@Validated @RequestBody DeliveryGender resources){ + public ResponseEntity update(@Validated @RequestBody DeliveryGender resources) { deliveryGenderService.update(resources); return new ResponseEntity<>(HttpStatus.NO_CONTENT); } @ApiOperation("删除") - @PreAuthorize("@el.check('deliveryGender:del')") @DeleteMapping public ResponseEntity delete(@RequestBody Long[] ids) { deliveryGenderService.deleteAll(ids); @@ -85,7 +88,7 @@ public class DeliveryGenderController { @ApiOperation("上传文件发送邮件") @PostMapping("/upload/files") - public ResponseEntity uploadFile(@RequestParam("file") MultipartFile[] files, @RequestParam(value = "taskName") String taskName) { + public ResponseEntity uploadFile(@RequestParam("file") MultipartFile[] files, @RequestParam(value = "taskName") String taskName) { return new ResponseEntity<>(deliveryGenderService.uploadFile(files, taskName), HttpStatus.OK); } } diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/gender/service/dto/DeliveryGenderDto.java b/eladmin-system/src/main/java/me/zhengjie/modules/gender/service/dto/DeliveryGenderDto.java index 3735d8a..7d8b0b8 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/gender/service/dto/DeliveryGenderDto.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/gender/service/dto/DeliveryGenderDto.java @@ -16,8 +16,9 @@ package me.zhengjie.modules.gender.service.dto; import lombok.Data; -import java.sql.Timestamp; + import java.io.Serializable; +import java.sql.Timestamp; import java.util.List; /** @@ -51,4 +52,14 @@ public class DeliveryGenderDto implements Serializable { /** 标识 */ private List taskNumStr; + + + /** 下载地址 */ + private String downUrl; + + /** 文件地址 */ + private String downPath; + + /** 邮件姓名 */ + private String mailName; } diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/gender/service/dto/DeliveryGenderQueryCriteria.java b/eladmin-system/src/main/java/me/zhengjie/modules/gender/service/dto/DeliveryGenderQueryCriteria.java index 6cb9493..a495365 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/gender/service/dto/DeliveryGenderQueryCriteria.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/gender/service/dto/DeliveryGenderQueryCriteria.java @@ -32,4 +32,8 @@ public class DeliveryGenderQueryCriteria { @Query(type = Query.Type.INNER_LIKE) private String taskName; + + @Query(type = Query.Type.EQUAL) + private Long userId; + } diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/gender/service/impl/DeliveryGenderServiceImpl.java b/eladmin-system/src/main/java/me/zhengjie/modules/gender/service/impl/DeliveryGenderServiceImpl.java index 9435c78..093db88 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/gender/service/impl/DeliveryGenderServiceImpl.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/gender/service/impl/DeliveryGenderServiceImpl.java @@ -112,7 +112,7 @@ public class DeliveryGenderServiceImpl implements DeliveryGenderService { public void deleteAll(Long[] ids) { for (Long id : ids) { DeliveryGender deliveryGender = deliveryGenderRepository.findById(id).orElseGet(DeliveryGender::new); - if (ObjectUtil.isNotNull(deliveryGender)){ + if (ObjectUtil.isNotNull(deliveryGender)) { FileUtil.del(deliveryGender.getDownPath()); } deliveryGenderRepository.deleteById(id); @@ -150,41 +150,43 @@ public class DeliveryGenderServiceImpl implements DeliveryGenderService { ? TxtUtils.txtParseListVyUrl(filePath.getPath()) : originalFilename.contains(FileConstant.CSV_FILE_SUB_NAME) ? ToolExcelUtils.csvParseListByUrl(filePath.getPath()) - : ToolExcelUtils.excelParseListByUrl(filePath.getPath()); + : ToolExcelUtils.excelParseListByUrl(filePath.getPath()); } } - if (CollUtil.isNotEmpty(arrayList)) { - // 去除重复数据 - List dtoArrayList = Lists.newArrayList(Sets.newHashSet(arrayList)); - // 加密 - List stringList = dtoArrayList.stream().filter - (StringUtils::isNotBlank).map - (source -> AESUtils.dbEncrypt(FileConstant.AES_PASSWORD, source)) - .collect(Collectors.toList()); - if (stringList.size() < 100) { - throw new BadRequestException("上传条数不能小于100条"); - } - // 每次500000 数据 - List> partition = Lists.partition(stringList, 500000); - for (List list : partition) { - String uuid = IdUtil.fastSimpleUUID(); - String sendMailName = redisUtils.acquisitionBatch(CacheKey.GR_REQUEST_TYPE); - String file = FileUtil.SYS_TEM_DIR.concat(StrUtil.SLASH).concat(uuid); - // 保存文件下载地址 - ZipUtils.zipFileAndSendGenderMail(list, file, sendMailName, deliveryProperties); - this.saveDeliveryRecord(taskName, sendMailName, list.size(), 1); - } - return Boolean.TRUE; + if (CollUtil.isEmpty(arrayList)) { + throw new BadRequestException("解析文件不能空!"); + } + // 去除重复数据 + List dtoArrayList = Lists.newArrayList(Sets.newHashSet(arrayList)); + // 加密 + List stringList = dtoArrayList.stream().filter + (StringUtils::isNotBlank).map + (source -> AESUtils.dbEncrypt(FileConstant.AES_PASSWORD, source)) + .collect(Collectors.toList()); + if (stringList.size() < 100) { + throw new BadRequestException("上传条数不能小于100条"); + } + // 每次500000 数据 + List> partition = Lists.partition(stringList, 500000); + for (List list : partition) { + String uuid = IdUtil.fastSimpleUUID(); + String sendMailName = redisUtils.acquisitionBatch(CacheKey.GR_REQUEST_TYPE); + String file = FileUtil.SYS_TEM_DIR.concat(StrUtil.SLASH).concat(uuid); + // 保存文件下载地址 + ZipUtils.zipFileAndSendGenderMail(list, file, sendMailName, deliveryProperties); + this.saveDeliveryRecord(taskName, sendMailName, list.size(), SecurityUtils.getCurrentUserId(), 1); } + return Boolean.TRUE; } return Boolean.FALSE; } - public Boolean saveDeliveryRecord(String taskImeiName, String sendMailName, Integer num, Integer type) { + public Boolean saveDeliveryRecord(String taskImeiName, String sendMailName, Integer num, Long currentUserId, Integer type) { DeliveryGender deliveryRecord = new DeliveryGender(); deliveryRecord.setNum(num); deliveryRecord.setStatus(0); deliveryRecord.setType(type); + deliveryRecord.setUserId(currentUserId); deliveryRecord.setMailName(sendMailName); deliveryRecord.setTaskName(taskImeiName); return deliveryGenderRepository.save(deliveryRecord).getId() != null; diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/gender/task/GenderConversionTask.java b/eladmin-system/src/main/java/me/zhengjie/modules/gender/task/GenderConversionTask.java index 140635d..d293a89 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/gender/task/GenderConversionTask.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/gender/task/GenderConversionTask.java @@ -1,6 +1,8 @@ package me.zhengjie.modules.gender.task; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.text.csv.CsvData; import cn.hutool.core.text.csv.CsvReader; import cn.hutool.core.text.csv.CsvUtil; @@ -26,9 +28,11 @@ import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; +import javax.mail.Flags; import javax.mail.Message; import javax.mail.internet.MimeMessage; import java.io.File; +import java.util.Date; import java.util.List; import java.util.Objects; import java.util.concurrent.TimeUnit; @@ -54,7 +58,7 @@ public class GenderConversionTask { @SneakyThrows - @Scheduled(cron = "0 0/10 * * * ? ") + @Scheduled(cron = "0 0/15 * * * ? ") @Transactional(rollbackFor = Exception.class) public void receiveMail() { // 获取邮件内容 @@ -106,6 +110,8 @@ public class GenderConversionTask { if (StringUtils.isNotBlank(byTaskName.getDownPath())) { FileUtil.writeToCsv(joinList, parseFile.getPath(), Boolean.TRUE); + // 设置压缩文件 + CompressUtil.decryptionCompression(path, parseFile.getPath(), null); deliveryGenderService.update(byTaskName); return; } @@ -132,4 +138,25 @@ public class GenderConversionTask { } } } + + + /** + * 删除五天前数据 + */ + @SneakyThrows + @Scheduled(cron = "0 25 23 * * ? ") + public void deleteMail() { + // 获取邮件内容 + List list = MailUtil.readMailByIMAP + (deliveryProperties.getGenderEmailAddress(), deliveryProperties.getEmailPassword()); + for (Message message : list) { + Date sentDate = message.getSentDate(); + // 时间偏移 + DateTime dateTime = DateUtil.offsetDay(DateUtil.date(), -5); + if (dateTime.after(sentDate)) { + // 删除邮件 + message.setFlag(Flags.Flag.DELETED, Boolean.TRUE); + } + } + } } diff --git a/eladmin-system/src/main/resources/config/application-prod.yml b/eladmin-system/src/main/resources/config/application-prod.yml index 930ddc1..7efa99a 100644 --- a/eladmin-system/src/main/resources/config/application-prod.yml +++ b/eladmin-system/src/main/resources/config/application-prod.yml @@ -156,9 +156,9 @@ rdsFileRecord: gender: emailPassword: baiye2022 - fileUrl: /home/eladmin/mail + fileUrl: /home/eladmin/file/mail zipPassword: DB2022hjk213v1... emailAddress: ensoze@outlook.com - downPath: https://xx.tuoz.net/mail/down/ + downPath: https://xx.tuoz.net/file/mail/ genderEmailAddress: ensoze2023@outlook.com toGenderEmailAddress: ggggod_2022@outlook.com diff --git a/log/history/2023-05-24.gz b/log/history/2023-05-24.gz new file mode 100644 index 0000000..3685464 Binary files /dev/null and b/log/history/2023-05-24.gz differ diff --git a/log/history/2023-05-30.gz b/log/history/2023-05-30.gz new file mode 100644 index 0000000..23c5c9e Binary files /dev/null and b/log/history/2023-05-30.gz differ diff --git a/log/history/2023-06-01.gz b/log/history/2023-06-01.gz new file mode 100644 index 0000000..394610c Binary files /dev/null and b/log/history/2023-06-01.gz differ diff --git a/log/history/2023-06-20.gz b/log/history/2023-06-20.gz new file mode 100644 index 0000000..1408496 Binary files /dev/null and b/log/history/2023-06-20.gz differ