diff --git a/nflg_project_dev/material/src/main/java/com/nflg/product/material/api/user/material/MaterialUpdateBillApi.java b/nflg_project_dev/material/src/main/java/com/nflg/product/material/api/user/material/MaterialUpdateBillApi.java index 69c391a8..244adbae 100644 --- a/nflg_project_dev/material/src/main/java/com/nflg/product/material/api/user/material/MaterialUpdateBillApi.java +++ b/nflg_project_dev/material/src/main/java/com/nflg/product/material/api/user/material/MaterialUpdateBillApi.java @@ -4,9 +4,10 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.nflg.product.base.core.api.BaseApi; import com.nflg.product.base.core.exception.NflgBusinessException; import com.nflg.product.material.pojo.dto.MaterialStateUpExcelDTO; -import com.nflg.product.material.pojo.dto.TwentyMaterialTemplateExcelDTO; import com.nflg.product.material.pojo.dto.MaterialUpdateBillDTO; +import com.nflg.product.material.pojo.dto.TwentyMaterialTemplateExcelDTO; import com.nflg.product.material.pojo.entity.MaterialUpdateBillEntity; +import com.nflg.product.material.pojo.entity.MaterialUpdateImportTaskEntity; import com.nflg.product.material.pojo.query.MaterialUpdateBillQuery; import com.nflg.product.material.pojo.vo.MaterialBatchImportVO; import com.nflg.product.material.pojo.vo.MaterialMainVO; @@ -191,4 +192,10 @@ public class MaterialUpdateBillApi extends BaseApi { public void doCalcRecommend() { materialUpdateToOAService.doFreezeState(); } + + @GetMapping("getMaterialUpdateImportTaskList") + @ApiOperation("获取物料变更批量导入任务表") + public ResultVO> getMaterialUpdateImportTaskList() { + return ResultVO.success(materialUpdateBillService.getMaterialUpdateImportTaskList()); + } } diff --git a/nflg_project_dev/material/src/main/java/com/nflg/product/material/mapper/master/MaterialUpdateImportTaskMapper.java b/nflg_project_dev/material/src/main/java/com/nflg/product/material/mapper/master/MaterialUpdateImportTaskMapper.java index 22ec07fa..35f6b42d 100644 --- a/nflg_project_dev/material/src/main/java/com/nflg/product/material/mapper/master/MaterialUpdateImportTaskMapper.java +++ b/nflg_project_dev/material/src/main/java/com/nflg/product/material/mapper/master/MaterialUpdateImportTaskMapper.java @@ -2,6 +2,10 @@ package com.nflg.product.material.mapper.master; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.nflg.product.material.pojo.entity.MaterialUpdateImportTaskEntity; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface MaterialUpdateImportTaskMapper extends BaseMapper { + List getMaterialUpdateImportTaskList(@Param("userCode") String userCode); } diff --git a/nflg_project_dev/material/src/main/java/com/nflg/product/material/pojo/entity/MaterialUpdateImportTaskEntity.java b/nflg_project_dev/material/src/main/java/com/nflg/product/material/pojo/entity/MaterialUpdateImportTaskEntity.java index ecb5e4cc..5714d07e 100644 --- a/nflg_project_dev/material/src/main/java/com/nflg/product/material/pojo/entity/MaterialUpdateImportTaskEntity.java +++ b/nflg_project_dev/material/src/main/java/com/nflg/product/material/pojo/entity/MaterialUpdateImportTaskEntity.java @@ -66,7 +66,7 @@ public class MaterialUpdateImportTaskEntity implements Serializable { * 任务状态:0进行中 1已完成 */ @TableField(value = "task_status") - @ApiModelProperty(value = "任务状态:0进行中 1已完成") + @ApiModelProperty(value = "任务状态:0进行中 1已完成 2已中止") private Integer taskStatus; /** diff --git a/nflg_project_dev/material/src/main/java/com/nflg/product/material/service/MaterialUpdateBillService.java b/nflg_project_dev/material/src/main/java/com/nflg/product/material/service/MaterialUpdateBillService.java index 78cfb290..744e7703 100644 --- a/nflg_project_dev/material/src/main/java/com/nflg/product/material/service/MaterialUpdateBillService.java +++ b/nflg_project_dev/material/src/main/java/com/nflg/product/material/service/MaterialUpdateBillService.java @@ -409,27 +409,25 @@ public class MaterialUpdateBillService extends ServiceImpl excelContext = EecExcelUtil.getExcelContext(file.getInputStream(), MaterialStateUpExcelDTO.class); - if (CollectionUtil.isNotEmpty(excelContext) && excelContext.size() > 1000) { + if (CollectionUtil.isNotEmpty(excelContext) && excelContext.size() > batchSize) { if (excelContext.size() > 10000) { return ResultVO.error("导入失败,最多支持10000条批量导入"); } redisTemplate.opsForValue().set(buildKey(userCode + ":updateBatchImport"), file.getOriginalFilename()); - Map indexMaterialMap = new HashMap<>(excelContext.size()); + Map indexMaterialMap = new HashMap<>(excelContext.size()); for (int i = 0; i < excelContext.size(); i++) { - indexMaterialMap.put(i + 1, excelContext.get(i).getMaterialNo()); + indexMaterialMap.put(excelContext.get(i).getMaterialNo(), i + 1); } Long rowId = IdWorker.getId(); // 大数据量,子线程分批次提交OA(每批1000条),主线程提前返回结果给前端 CompletableFuture task1 = CompletableFuture.supplyAsync(() -> { long startTime = System.currentTimeMillis(); insertMaterialUpdateImportTask(rowId, excelContext.size(), file.getOriginalFilename(), userCode); - List> lists = Lists.partition(excelContext, 1000); - for (int i = 0; i < lists.size(); i++) { - List items = lists.get(i); - this.handleImportDataForState(items, applyDeptName, deptEnt, realName, userCode); - } + List> lists = Lists.partition(excelContext, batchSize); + lists.forEach(items -> this.handleImportDataForState(items, applyDeptName, deptEnt, realName, userCode)); updateMaterialUpdateImportTask(rowId, excelContext.size(), excelContext.size(), 0, ""); long endTime = System.currentTimeMillis(); log.info("物料变更批量导入耗时(ms): {}", endTime - startTime); @@ -440,7 +438,14 @@ public class MaterialUpdateBillService extends ServiceImpl excelContext = EecExcelUtil.getExcelContext(file.getInputStream(), TwentyMaterialTemplateExcelDTO.class); - if (CollectionUtil.isNotEmpty(excelContext) && excelContext.size() > 1000) { + if (CollectionUtil.isNotEmpty(excelContext) && excelContext.size() > batchSize) { if (excelContext.size() > 10000) { return ResultVO.error("导入失败,最多支持10000条批量导入"); } redisTemplate.opsForValue().set(buildKey(userCode + ":updateBatchImport"), file.getOriginalFilename()); + Map indexMaterialMap = new HashMap<>(excelContext.size()); + for (int i = 0; i < excelContext.size(); i++) { + indexMaterialMap.put(excelContext.get(i).getMaterialNo(), i + 1); + } + Long rowId = IdWorker.getId(); // 大数据量,子线程分批次提交OA(每批1000条),主线程提前返回结果给前端 CompletableFuture task1 = CompletableFuture.supplyAsync(() -> { long startTime = System.currentTimeMillis(); - List> lists = Lists.partition(excelContext, 1000); + insertMaterialUpdateImportTask(rowId, excelContext.size(), file.getOriginalFilename(), userCode); + List> lists = Lists.partition(excelContext, batchSize); lists.forEach(items -> this.handleImportDataForSummary(items, applyDeptName, deptEnt, realName, userCode)); + updateMaterialUpdateImportTask(rowId, excelContext.size(), excelContext.size(), 0, ""); long endTime = System.currentTimeMillis(); log.info("物料变更批量导入耗时(ms): {}", endTime - startTime); redisTemplate.delete(buildKey(userCode + ":updateBatchImport")); @@ -471,6 +483,15 @@ public class MaterialUpdateBillService extends ServiceImpl { // 异常处理器,打印异常信息并返回默认值 log.error("物料变更批量导入异常: " + ex.getMessage()); + String errMaterialNo = getErrMaterialNo(ex.getMessage()); + int successNum = 0; + int failNum = excelContext.size(); + if (StrUtil.isNotEmpty(errMaterialNo)) { + Integer idx = indexMaterialMap.get(errMaterialNo); + successNum = idx / batchSize; + failNum = excelContext.size() - (idx / batchSize); + } + updateMaterialUpdateImportTask(rowId, excelContext.size(), successNum, failNum, ex.getMessage()); redisTemplate.delete(buildKey(userCode + ":updateBatchImport")); return -1; }); @@ -489,6 +510,8 @@ public class MaterialUpdateBillService extends ServiceImpl 0) { - desc += StrUtil.format(",第{}条后因为“{}”而终止", successNum, exceptionMsg); + desc += StrUtil.format(",第{}条起因为“{}”而中止", successNum + 1, exceptionMsg); + update.setTaskStatus(2); // 已中止 + } else { + update.setTaskStatus(1); // 已完成 } update.setFailReason(desc); - update.setTaskStatus(1); materialUpdateImportTaskMapper.updateById(update); } @@ -1172,4 +1198,8 @@ public class MaterialUpdateBillService extends ServiceImpl getMaterialUpdateImportTaskList() { + return materialUpdateImportTaskMapper.getMaterialUpdateImportTaskList(SessionUtil.getUserCode()); + } } diff --git a/nflg_project_dev/material/src/main/resources/mapper/master/MaterialUpdateImportTaskMapper.xml b/nflg_project_dev/material/src/main/resources/mapper/master/MaterialUpdateImportTaskMapper.xml index 996b323a..5feb00ff 100644 --- a/nflg_project_dev/material/src/main/resources/mapper/master/MaterialUpdateImportTaskMapper.xml +++ b/nflg_project_dev/material/src/main/resources/mapper/master/MaterialUpdateImportTaskMapper.xml @@ -1,4 +1,13 @@ + +