pom.xml
@@ -342,6 +342,18 @@ <version>1.7.6</version> </dependency> <dependency> <groupId>com.luhuiguo</groupId> <artifactId>aspose-pdf</artifactId> <version>23.1</version> </dependency> <dependency> <groupId>com.luhuiguo</groupId> <artifactId>aspose-words</artifactId> <version>23.1</version> </dependency> </dependencies> <build> src/main/java/org/springblade/common/utils/WordToPdfUtils.java
New file @@ -0,0 +1,38 @@ package org.springblade.common.utils; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; public class WordToPdfUtils { // https://srgdjczzxtpt.com:2080/gminio/jczz/upload/20240710/ade086b8d725a08631b62d812a63f6da.docx public static String wordToPdf(String fileName, String pdfPath) throws Exception { // 判断入参是否有空 if (fileName == null || pdfPath == null) { throw new Exception("入参不能为空"); } // 判断文件后缀名是否doc,ppt,xls if (fileName.endsWith(".doc") || fileName.endsWith(".docx")) { // 获取文件流 URL url = new URL(pdfPath); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestProperty("User-Agent", "Mozilla/5.0"); // 获取文件名 String orFileName = fileName.substring(0, fileName.lastIndexOf(".")); InputStream inputStream = connection.getInputStream(); long timeMillis = System.currentTimeMillis(); // String filePathPdf = "/data/app/jczz/pdf/" + orFileName + "_" + timeMillis + ".pdf"; String filePathPdf = "D:\\公司\\" + orFileName + "_" + timeMillis + ".pdf"; com.aspose.words.Document doc = new com.aspose.words.Document(inputStream); doc.save(filePathPdf, com.aspose.words.SaveFormat.PDF); return filePathPdf; } else { throw new Exception("文件格式不正确"); } } public static void main(String[] args) throws Exception { wordToPdf(" 测试.docx", "https://srgdjczzxtpt.com:2080/gminio/jczz/upload/20240710/ade086b8d725a08631b62d812a63f6da.docx"); } } src/main/java/org/springblade/modules/auth/granter/CaptchaTokenGranter.java
@@ -17,6 +17,8 @@ package org.springblade.modules.auth.granter; import lombok.AllArgsConstructor; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springblade.common.cache.CacheNames; import org.springblade.common.cache.ParamCache; import org.springblade.core.log.exception.ServiceException; @@ -48,6 +50,8 @@ @Component @AllArgsConstructor public class CaptchaTokenGranter implements ITokenGranter { protected static final Logger logger = LoggerFactory.getLogger(CaptchaTokenGranter.class); public static final String GRANT_TYPE = "captcha"; public static final Integer FAIL_COUNT = 5; @@ -83,6 +87,7 @@ int cnt = Func.toInt(bladeRedis.get(CacheNames.tenantKey(tenantId, CacheNames.USER_FAIL_KEY, username)), 0); int failCount = Func.toInt(ParamCache.getValue(FAIL_COUNT_VALUE), FAIL_COUNT); if (cnt >= failCount) { logger.error("用户名或密码错误,用户账号:{},用户名:{},错误次数:{}",tenantId, username, cnt); throw new ServiceException(TokenUtil.USER_HAS_TOO_MANY_FAILS); } src/main/java/org/springblade/modules/auth/granter/PasswordTokenGranter.java
@@ -17,6 +17,8 @@ package org.springblade.modules.auth.granter; import lombok.AllArgsConstructor; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springblade.common.cache.CacheNames; import org.springblade.common.cache.ParamCache; import org.springblade.core.log.exception.ServiceException; @@ -48,6 +50,8 @@ @AllArgsConstructor public class PasswordTokenGranter implements ITokenGranter { protected static final Logger logger = LoggerFactory.getLogger(CaptchaTokenGranter.class); public static final String GRANT_TYPE = "password"; public static final Integer FAIL_COUNT = 5; public static final String FAIL_COUNT_VALUE = "account.failCount"; @@ -75,6 +79,7 @@ int cnt = Func.toInt(bladeRedis.get(CacheNames.tenantKey(tenantId, CacheNames.USER_FAIL_KEY, username)), 0); int failCount = Func.toInt(ParamCache.getValue(FAIL_COUNT_VALUE), FAIL_COUNT); if (cnt >= failCount) { logger.error("用户名或密码错误,用户账号:{},用户名:{},错误次数:{}",tenantId, username, cnt); throw new ServiceException(TokenUtil.USER_HAS_TOO_MANY_FAILS); } src/main/java/org/springblade/modules/eCallEventTwo/controller/ECallEventTwoController.java
@@ -145,13 +145,13 @@ // 创建居住证发送短信定时任务 EcOrderParamDTO ecOrderParamDTO = new EcOrderParamDTO(); // 获取当前日期时间 LocalDateTime now = LocalDateTime.now(); // LocalDateTime now = LocalDateTime.now(); // 获取前一天的开始时间 LocalDateTime yesterdayStart = now.minus(1, ChronoUnit.DAYS).with(LocalTime.MIN); // LocalDateTime yesterdayStart = now.minus(1, ChronoUnit.DAYS).with(LocalTime.MIN); // 获取前一天的结束时间 LocalDateTime yesterdayEnd = now.minus(1, ChronoUnit.DAYS).with(LocalTime.MAX); ecOrderParamDTO.setEndTime(yesterdayEnd.format(DateUtil.DATETIME_FORMATTER)); ecOrderParamDTO.setStartTime(yesterdayStart.format(DateUtil.DATETIME_FORMATTER)); // LocalDateTime yesterdayEnd = now.minus(1, ChronoUnit.DAYS).with(LocalTime.MAX); // ecOrderParamDTO.setEndTime(yesterdayEnd.format(DateUtil.DATETIME_FORMATTER)); // ecOrderParamDTO.setStartTime(yesterdayStart.format(DateUtil.DATETIME_FORMATTER)); boolean b = ecOrderService.SynchronizeData(ecOrderParamDTO); return R.status(b); } src/main/java/org/springblade/modules/eCallEventTwo/service/impl/EcOrderServiceImpl.java
@@ -1,6 +1,7 @@ package org.springblade.modules.eCallEventTwo.service.impl; import cn.hutool.core.convert.Convert; import com.alibaba.fastjson.JSON; import com.baomidou.dynamic.datasource.annotation.DS; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -125,27 +126,34 @@ if (StringUtils.isNotBlank(ecOrderParamDTO.getStartTime()) && StringUtils.isNotEmpty(ecOrderParamDTO.getEndTime())) { ecOrderQueryWrapper.between("import_time", ecOrderParamDTO.getStartTime(), ecOrderParamDTO.getEndTime()); } // System.out.println("**********参数**************************" + JSON.toJSONString(ecOrderParamDTO)); long count = count(ecOrderQueryWrapper); System.out.println("**********总数**************************" + count); int totalPages = (int) Math.ceil((double) count / pageSize); // 计算总页数 for (int pageNum = 1; pageNum <= totalPages; pageNum++) { Page<EcOrder> page = new Page<>(pageNum, pageSize); QueryWrapper<EcOrder> objectQueryWrapper = new QueryWrapper<>(); IPage<EcOrder> resultPage = baseMapper.selectPage(page, objectQueryWrapper); IPage<EcOrder> resultPage = baseMapper.selectPage(page, ecOrderQueryWrapper); List<EcOrder> records = resultPage.getRecords(); List<ECallEventTwoEntity> recordEntityList = BeanUtil.copy(records, ECallEventTwoEntity.class); List<ECallEventTwoEntity> arrayList = new ArrayList<>(); List<ECallEventTwoEntity> addList = new ArrayList<>(); List<ECallEventTwoEntity> updateList = new ArrayList<>(); // 过滤出已同步的订单 recordEntityList.forEach(record -> { long count1 = ecOrderService.count(Wrappers.<ECallEventTwoEntity>lambdaQuery().eq(ECallEventTwoEntity::getOrderId, record.getOrderId())); long count1 = ecOrderService.count(Wrappers.<ECallEventTwoEntity>lambdaQuery().eq(ECallEventTwoEntity::getOrderCode, record.getOrderCode())); if (count1 == 0) { arrayList.add(record); addList.add(record); } else { updateList.add(record); } }); // 同步订单 boolean b = false; if (arrayList.size() > 0) { b = ecOrderService.saveOrUpdateBatch(arrayList); if (addList.size() > 0) { b = ecOrderService.saveBatch(addList); } if (updateList.size() > 0) { b = ecOrderService.saveOrUpdateBatch(updateList); } System.out.println("更新第" + pageNum + "页" + b); } src/main/java/org/springblade/modules/house/mapper/HouseholdMapper.xml
@@ -349,11 +349,8 @@ and jhs.district_code = #{household.aoiCode} </if> and jh.is_deleted = 0 and jg.grid_code is not null order by jh.id desc </where> </select> <select id="getAllHouseHold" resultMap="householdPageAndLabelMap"> src/main/java/org/springblade/modules/resource/endpoint/OssEndpoint.java
@@ -16,9 +16,7 @@ */ package org.springblade.modules.resource.endpoint; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONPObject; import io.swagger.annotations.Api; import lombok.AllArgsConstructor; import lombok.SneakyThrows; @@ -33,7 +31,6 @@ import org.springblade.core.tool.constant.RoleConstant; import org.springblade.core.tool.utils.FileUtil; import org.springblade.core.tool.utils.Func; import org.springblade.core.tool.utils.ImageUtil; import org.springblade.modules.resource.builder.oss.OssBuilder; import org.springblade.modules.resource.entity.Attach; import org.springblade.modules.resource.entity.AttachData; @@ -42,14 +39,6 @@ import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.URL; import java.util.Arrays; import java.util.List; @@ -267,7 +256,7 @@ // 返回 return R.data(bladeFile); } else { return R.fail("上传的附件必须是pdf,ppt,doc,docx格式!"); return R.fail("上传的附件必须是pdf,doc,docx格式!"); } } src/main/java/org/springblade/modules/task/entity/TaskPlaceRecordEntity.java
@@ -111,4 +111,13 @@ @ApiModelProperty(value = "1:图片 2:ppt 3:其他", example = "") @TableField("file_type") private String fileType; @ApiModelProperty(value = "PDF图片地址", example = "") @TableField("pdf_path") private String pdfPath; // 文件原名称 @ApiModelProperty(value = "文件原名称", example = "") @TableField("original_name") private String originalName; } src/main/java/org/springblade/modules/task/mapper/TaskNoFraudReportingMapper.xml
@@ -87,7 +87,7 @@ and jtnfr.pcs_name like concat('%', #{place.pcsName},'%') </if> <if test="isAdministrator==2"> <if test="isAdministrator==2 and place.createUser == null"> <choose> <when test="place.roleName != null and place.roleName != ''"> <if test="place.roleName=='wgy'"> @@ -167,6 +167,8 @@ jpr.rectification_image_urls, jpr.rectification_remark, jpr.rectification_time, jpr.pdf_path, jpr.original_name, jpgi.items_name from jczz_task_place_record jpr LEFT JOIN jczz_patrol_group_item jpgi on jpr.item_id = jpgi.id src/main/java/org/springblade/modules/task/service/impl/TaskNoFraudReportingServiceImpl.java
@@ -19,15 +19,20 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springblade.common.constant.CommonConstant; import org.springblade.common.constant.DictConstant; import org.springblade.common.exception.CustomException; import org.springblade.common.param.CommonParamSet; import org.springblade.common.param.GridSet; import org.springblade.common.utils.SpringUtils; import org.springblade.common.utils.WordToPdfUtils; import org.springblade.core.oss.model.BladeFile; import org.springblade.core.secure.utils.AuthUtil; import org.springblade.core.tool.utils.BeanUtil; import org.springblade.core.tool.utils.SpringUtil; import org.springblade.modules.resource.builder.oss.OssBuilder; import org.springblade.modules.task.entity.TaskNoFraudReportingEntity; import org.springblade.modules.task.entity.TaskPlaceRecordEntity; import org.springblade.modules.task.excel.TaskNoExplosionExcel; @@ -37,9 +42,12 @@ import org.springblade.modules.task.service.ITaskService; import org.springblade.modules.task.vo.TaskNoFraudReportingVO; import org.springblade.modules.task.vo.TaskPlaceRecordVO; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.io.FileInputStream; import java.io.IOException; import java.util.List; import java.util.stream.Collectors; @@ -51,6 +59,15 @@ */ @Service public class TaskNoFraudReportingServiceImpl extends ServiceImpl<TaskNoFraudReportingMapper, TaskNoFraudReportingEntity> implements ITaskNoFraudReportingService { private static final Logger logger = LoggerFactory.getLogger(TaskNoFraudReportingServiceImpl.class); /** * 对象存储构建类 */ @Autowired private OssBuilder ossBuilder; @Override public IPage<TaskNoFraudReportingVO> selectTaskNoFraudReportingPage(IPage<TaskNoFraudReportingVO> page, TaskNoFraudReportingVO taskNoFraudReporting) { @@ -106,6 +123,30 @@ item.setTaskPlaceSelfCheckId(taskNoFraudReporting.getId()); item.setCreateUser(AuthUtil.getUserId()); item.setType("2"); // 判断是否有生成pdf if (StringUtils.isBlank(item.getPdfPath()) && StringUtils.isNotBlank(item.getImageUrls())) { // 生成pdf String filePath; FileInputStream file = null; try { filePath = WordToPdfUtils.wordToPdf(item.getOriginalName(), item.getImageUrls()); file = new FileInputStream(filePath); BladeFile bladeFile = ossBuilder.template().putFile(item.getOriginalName(), file); item.setPdfPath(bladeFile.getLink()); } catch (Exception e) { logger.error("生成pdf失败", e); // throw new RuntimeException(e); } finally { if (file != null) { try { file.close(); } catch (IOException e) { logger.error("关闭流异常", e); /* 异常处理 */ } } } } }); List<TaskPlaceRecordEntity> collect = taskPlaceRecordList.stream().collect(Collectors.toList()); if (collect.size() > 0) { @@ -153,6 +194,20 @@ List<TaskPlaceRecordEntity> recordEntityList = BeanUtil.copy(taskPlaceRecordList, TaskPlaceRecordEntity.class); for (TaskPlaceRecordEntity taskPlaceRecordEntity : recordEntityList) { taskPlaceRecordEntity.setType("2"); // 判断是否有生成pdf if (StringUtils.isBlank(taskPlaceRecordEntity.getPdfPath()) && StringUtils.isNotBlank(taskPlaceRecordEntity.getImageUrls())) { // 生成pdf String filePath; try { filePath = WordToPdfUtils.wordToPdf(taskPlaceRecordEntity.getOriginalName(), taskPlaceRecordEntity.getImageUrls()); FileInputStream file = new FileInputStream(filePath); BladeFile bladeFile = ossBuilder.template().putFile(taskPlaceRecordEntity.getOriginalName(), file); taskPlaceRecordEntity.setPdfPath(bladeFile.getLink()); } catch (Exception e) { logger.error("生成pdf失败", e); // throw new RuntimeException(e); } } } boolean result = bean.saveOrUpdateBatch(recordEntityList); if (result) { src/main/java/org/springblade/modules/task/service/impl/TaskServiceImpl.java
@@ -699,6 +699,7 @@ objectLambdaUpdateWrapper.set(TaskNoFraudReportingEntity::getHouseCode, task.getHouseCode()); } objectLambdaUpdateWrapper.set(TaskNoFraudReportingEntity::getStatus, task.getStatus()); objectLambdaUpdateWrapper.set(TaskNoFraudReportingEntity::getRemark, task.getRemark()); objectLambdaUpdateWrapper.eq(TaskNoFraudReportingEntity::getTaskId, task.getId()); return bean.update(objectLambdaUpdateWrapper); }