From a78add24db92e8d276f9473e077a136c44dc5625 Mon Sep 17 00:00:00 2001
From: sfd <sun.sunshine@163.com>
Date: 星期三, 21 五月 2025 11:42:02 +0800
Subject: [PATCH] 修改导入数据重复问题
---
aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsMaterialProductGroupManagementServiceImpl.java | 16 ++--
aps-modules/aps-core/src/main/java/com/aps/core/controller/mainPlan/ApsGasPipelineMoController.java | 4
aps-modules/aps-core/src/main/java/com/aps/core/controller/mainPlan/ApsGasPipelinePredictionController.java | 30 ++----
aps-modules/aps-core/src/main/java/com/aps/core/mapper/ApsMaterialProductGroupManagementMapper.java | 15 +--
aps-modules/aps-core/src/main/java/com/aps/core/domain/ApsGasPipelinePrediction.java | 18 ++++
aps-modules/aps-core/src/main/java/com/aps/core/mapper/ApsGasPipelinePredictionMapper.java | 15 +--
aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsGasPipelinePredictionServiceImpl.java | 30 +++---
aps-modules/aps-core/src/main/java/com/aps/core/domain/ApsMaterialProductGroupManagement.java | 98 +++++++++++++-----------
aps-modules/aps-core/src/main/java/com/aps/core/controller/mainPlan/ApsMaterialProductGroupManagementController.java | 4
9 files changed, 120 insertions(+), 110 deletions(-)
diff --git a/aps-modules/aps-core/src/main/java/com/aps/core/controller/mainPlan/ApsGasPipelineMoController.java b/aps-modules/aps-core/src/main/java/com/aps/core/controller/mainPlan/ApsGasPipelineMoController.java
index 9c72746..5f836fe 100644
--- a/aps-modules/aps-core/src/main/java/com/aps/core/controller/mainPlan/ApsGasPipelineMoController.java
+++ b/aps-modules/aps-core/src/main/java/com/aps/core/controller/mainPlan/ApsGasPipelineMoController.java
@@ -53,8 +53,8 @@
@PostMapping("/importData")
public AjaxResult importData(MultipartFile file) throws Exception {
- int i = apsGasPipelineMoService.batchInsertGasPipelineMo(file);
- return toAjax(i);
+ apsGasPipelineMoService.batchInsertGasPipelineMo(file);
+ return toAjax(true);
}
/**
diff --git a/aps-modules/aps-core/src/main/java/com/aps/core/controller/mainPlan/ApsGasPipelinePredictionController.java b/aps-modules/aps-core/src/main/java/com/aps/core/controller/mainPlan/ApsGasPipelinePredictionController.java
index c045a32..90a9b60 100644
--- a/aps-modules/aps-core/src/main/java/com/aps/core/controller/mainPlan/ApsGasPipelinePredictionController.java
+++ b/aps-modules/aps-core/src/main/java/com/aps/core/controller/mainPlan/ApsGasPipelinePredictionController.java
@@ -1,30 +1,22 @@
package com.aps.core.controller.mainPlan;
-import java.util.List;
-
+import com.aps.common.core.utils.poi.ExcelUtil;
+import com.aps.common.core.web.controller.BaseController;
+import com.aps.common.core.web.domain.AjaxResult;
import com.aps.common.core.web.page.TableDataInfo;
-import com.aps.core.domain.ApsGasPipelineMo;
+import com.aps.common.log.annotation.Log;
+import com.aps.common.log.enums.BusinessType;
+import com.aps.common.security.annotation.RequiresPermissions;
import com.aps.core.domain.ApsGasPipelinePrediction;
import com.aps.core.service.IApsGasPipelinePredictionService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-import com.aps.common.log.annotation.Log;
-import com.aps.common.log.enums.BusinessType;
-import com.aps.common.security.annotation.RequiresPermissions;
-import com.aps.common.core.web.controller.BaseController;
-import com.aps.common.core.web.domain.AjaxResult;
-import com.aps.common.core.utils.poi.ExcelUtil;
+import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
+
+import java.util.List;
/**
* 绠¤矾鎵嬪伐姘斾綋棰勬祴鏁版嵁Controller
@@ -61,8 +53,8 @@
@PostMapping("/importData")
public AjaxResult importData(MultipartFile file) throws Exception {
- int i = apsGasPipelinePredictionService.batchInsertApsGasPipelinePrediction(file);
- return toAjax(i);
+ apsGasPipelinePredictionService.batchInsertApsGasPipelinePrediction(file);
+ return toAjax(true);
}
/**
* 瀵煎嚭绠¤矾鎵嬪伐姘斾綋棰勬祴鏁版嵁鍒楄〃
diff --git a/aps-modules/aps-core/src/main/java/com/aps/core/controller/mainPlan/ApsMaterialProductGroupManagementController.java b/aps-modules/aps-core/src/main/java/com/aps/core/controller/mainPlan/ApsMaterialProductGroupManagementController.java
index 347af56..97eefb8 100644
--- a/aps-modules/aps-core/src/main/java/com/aps/core/controller/mainPlan/ApsMaterialProductGroupManagementController.java
+++ b/aps-modules/aps-core/src/main/java/com/aps/core/controller/mainPlan/ApsMaterialProductGroupManagementController.java
@@ -53,8 +53,8 @@
@PostMapping("/importData")
public AjaxResult importData(MultipartFile file) throws Exception {
- int i = apsMaterialProductGroupManagementService.batchInsertApsMaterialProductGroupManagement(file);
- return toAjax(i);
+ apsMaterialProductGroupManagementService.batchInsertApsMaterialProductGroupManagement(file);
+ return toAjax(true);
}
/**
* 瀵煎嚭鐗╂枡浜у搧缁勬暟鎹鐞嗗垪琛�
diff --git a/aps-modules/aps-core/src/main/java/com/aps/core/domain/ApsGasPipelinePrediction.java b/aps-modules/aps-core/src/main/java/com/aps/core/domain/ApsGasPipelinePrediction.java
index 294c62e..4ebf861 100644
--- a/aps-modules/aps-core/src/main/java/com/aps/core/domain/ApsGasPipelinePrediction.java
+++ b/aps-modules/aps-core/src/main/java/com/aps/core/domain/ApsGasPipelinePrediction.java
@@ -2,13 +2,19 @@
import com.aps.common.core.annotation.Excel;
import com.aps.common.core.web.domain.BaseEntity;
+import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonIgnore;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.springframework.data.annotation.Id;
import java.math.BigDecimal;
import java.sql.Timestamp;
+import java.text.SimpleDateFormat;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
/**
* 绠¤矾鎵嬪伐姘斾綋棰勬祴鏁版嵁瀵硅薄 aps_gas_pipeline_prediction
@@ -49,4 +55,16 @@
@Schema(description = "鏁伴噺")
private BigDecimal predictQuantity;
+ @JsonIgnore
+ @TableField(exist = false)
+ private String key;
+
+ public String getKey() {
+ if (key == null) {
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
+ key = getFactory() + "##" + getMaterialCode() + "##" + sdf.format(getPredictDate());
+ }
+ return key;
+ }
+
}
diff --git a/aps-modules/aps-core/src/main/java/com/aps/core/domain/ApsMaterialProductGroupManagement.java b/aps-modules/aps-core/src/main/java/com/aps/core/domain/ApsMaterialProductGroupManagement.java
index da7a861..001a28a 100644
--- a/aps-modules/aps-core/src/main/java/com/aps/core/domain/ApsMaterialProductGroupManagement.java
+++ b/aps-modules/aps-core/src/main/java/com/aps/core/domain/ApsMaterialProductGroupManagement.java
@@ -1,7 +1,9 @@
package com.aps.core.domain;
import com.aps.common.core.web.domain.BaseEntity;
+import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonIgnore;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.apache.commons.lang3.builder.ToStringBuilder;
@@ -11,14 +13,13 @@
/**
* 鐗╂枡浜у搧缁勬暟鎹鐞嗗璞� aps_material_product_group_management
- *
+ *
* @author ruoyi
* @date 2025-05-19
*/
@Schema(description = "鐗╂枡浜у搧缁勬暟鎹鐞嗗疄浣撶被")
@Data
-public class ApsMaterialProductGroupManagement extends BaseEntity
-{
+public class ApsMaterialProductGroupManagement extends BaseEntity {
private static final long serialVersionUID = 1L;
@Id
@@ -27,104 +28,113 @@
@Schema(description = "ID")
private Long id;
- /** 閫傜敤宸ュ巶 鍙傝�� aps_factory */
+ /**
+ * 閫傜敤宸ュ巶 鍙傝�� aps_factory
+ */
@Excel(name = "閫傜敤宸ュ巶 鍙傝�� aps_factory")
@Schema(description = "閫傜敤宸ュ巶 鍙傝�� aps_factory")
private String factory;
- /** 鏂欏彿 */
+ /**
+ * 鏂欏彿
+ */
@Excel(name = "鏂欏彿")
@Schema(description = "鏂欏彿")
private String materialCode;
- /** 涓撲笟 鍙傝�� aps_domain */
+ /**
+ * 涓撲笟 鍙傝�� aps_domain
+ */
@Excel(name = "涓撲笟 鍙傝�� aps_domain")
@Schema(description = "涓撲笟 鍙傝�� aps_domain")
private String domain;
- /** 鏄惁涓轰富闃� 鏄�/鍚� */
+ /**
+ * 鏄惁涓轰富闃� 鏄�/鍚�
+ */
@Excel(name = "鏄惁涓轰富闃� 鏄�/鍚�")
@Schema(description = "鏄惁涓轰富闃� 鏄�/鍚�")
private String isMain;
- /** 鏂欏彿绫诲埆 鍒堕�犱欢/閲囪喘浠� */
+ @JsonIgnore
+ @TableField(exist = false)
+ private String key;
+
+ public String getKey() {
+ if (key == null) {
+ key = getFactory() + "##" + getMaterialCode();
+ }
+ return key;
+ }
+
+ /**
+ * 鏂欏彿绫诲埆 鍒堕�犱欢/閲囪喘浠�
+ */
@Excel(name = "鏂欏彿绫诲埆 鍒堕�犱欢/閲囪喘浠�")
@Schema(description = "鏂欏彿绫诲埆 鍒堕�犱欢/閲囪喘浠�")
private String materialType;
- public void setId(Long id)
- {
+ public void setId(Long id) {
this.id = id;
}
- public Long getId()
- {
+ public Long getId() {
return id;
}
- public void setFactory(String factory)
- {
+ public void setFactory(String factory) {
this.factory = factory;
}
- public String getFactory()
- {
+ public String getFactory() {
return factory;
}
- public void setMaterialCode(String materialCode)
- {
+ public void setMaterialCode(String materialCode) {
this.materialCode = materialCode;
}
- public String getMaterialCode()
- {
+ public String getMaterialCode() {
return materialCode;
}
- public void setDomain(String domain)
- {
+ public void setDomain(String domain) {
this.domain = domain;
}
- public String getDomain()
- {
+ public String getDomain() {
return domain;
}
- public void setIsMain(String isMain)
- {
+ public void setIsMain(String isMain) {
this.isMain = isMain;
}
- public String getIsMain()
- {
+ public String getIsMain() {
return isMain;
}
- public void setMaterialType(String materialType)
- {
+ public void setMaterialType(String materialType) {
this.materialType = materialType;
}
- public String getMaterialType()
- {
+ public String getMaterialType() {
return materialType;
}
@Override
public String toString() {
- return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
- .append("id", getId())
- .append("factory", getFactory())
- .append("materialCode", getMaterialCode())
- .append("domain", getDomain())
- .append("createBy", getCreateBy())
- .append("createTime", getCreateTime())
- .append("updateBy", getUpdateBy())
- .append("updateTime", getUpdateTime())
- .append("isMain", getIsMain())
- .append("materialType", getMaterialType())
- .toString();
+ return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
+ .append("id", getId())
+ .append("factory", getFactory())
+ .append("materialCode", getMaterialCode())
+ .append("domain", getDomain())
+ .append("createBy", getCreateBy())
+ .append("createTime", getCreateTime())
+ .append("updateBy", getUpdateBy())
+ .append("updateTime", getUpdateTime())
+ .append("isMain", getIsMain())
+ .append("materialType", getMaterialType())
+ .toString();
}
}
diff --git a/aps-modules/aps-core/src/main/java/com/aps/core/mapper/ApsGasPipelinePredictionMapper.java b/aps-modules/aps-core/src/main/java/com/aps/core/mapper/ApsGasPipelinePredictionMapper.java
index ef687da..7ca23e2 100644
--- a/aps-modules/aps-core/src/main/java/com/aps/core/mapper/ApsGasPipelinePredictionMapper.java
+++ b/aps-modules/aps-core/src/main/java/com/aps/core/mapper/ApsGasPipelinePredictionMapper.java
@@ -74,18 +74,13 @@
select id, factory || '##' || material_code || '##' || TO_CHAR(predict_date, 'yyyy-MM') as key
from aps_gas_pipeline_prediction
where 1 = 0
- <if test="!facs.isEmpty()">or factory in
- <foreach collection="facs" item="item" open="(" separator="," close=")">
+ <if test="!keys.isEmpty()">or factory || '##' || material_code || '##' || TO_CHAR(predict_date, 'yyyy-MM') in
+ <foreach collection="keys" item="item" open="(" separator="," close=")">
#{item}
- </foreach>
- </if>
- <if test="!facs.isEmpty()">or material_code in
- <foreach collection="codes" item="item" open="(" separator="," close=")">
- #{item}
- </foreach>
- </if>
+ </foreach>
+ </if>
</script>
""")
- List<Map<String, Object>> selectByFacOrMaterial(@NotNull Set<String> facs, @NotNull Set<String> codes);
+ List<Map<String, Object>> selectByFacOrMaterial(@NotNull Set<String> keys);
}
diff --git a/aps-modules/aps-core/src/main/java/com/aps/core/mapper/ApsMaterialProductGroupManagementMapper.java b/aps-modules/aps-core/src/main/java/com/aps/core/mapper/ApsMaterialProductGroupManagementMapper.java
index 3a71a0f..956dfc5 100644
--- a/aps-modules/aps-core/src/main/java/com/aps/core/mapper/ApsMaterialProductGroupManagementMapper.java
+++ b/aps-modules/aps-core/src/main/java/com/aps/core/mapper/ApsMaterialProductGroupManagementMapper.java
@@ -71,17 +71,12 @@
<script>
select distinct factory || '##' || material_code from aps_material_product_group_management
where 1 = 0
- <if test="!facs.isEmpty()">or factory in
- <foreach collection="facs" item="item" open="(" separator="," close=")">
+ <if test="!keys.isEmpty()">or factory || '##' || material_code in
+ <foreach collection="keys" item="item" open="(" separator="," close=")">
#{item}
- </foreach>
- </if>
- <if test="!facs.isEmpty()">or material_code in
- <foreach collection="codes" item="item" open="(" separator="," close=")">
- #{item}
- </foreach>
- </if>
+ </foreach>
+ </if>
</script>
""")
- Set<String> selectByFacOrMaterial(@NotNull Set<String> facs, @NotNull Set<String> codes);
+ Set<String> selectByFacOrMaterial(@NotNull Set<String> keys);
}
diff --git a/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsGasPipelinePredictionServiceImpl.java b/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsGasPipelinePredictionServiceImpl.java
index f6e3a61..3012ee2 100644
--- a/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsGasPipelinePredictionServiceImpl.java
+++ b/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsGasPipelinePredictionServiceImpl.java
@@ -22,6 +22,7 @@
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.*;
+import java.util.concurrent.atomic.AtomicBoolean;
import java.util.stream.Collectors;
/**
@@ -112,9 +113,9 @@
int rows = sheet.getLastRowNum();
if (rows > 0) {
List<ApsGasPipelinePrediction> list = new ArrayList<>();
-
+ Set<String> keys = new HashSet<>();
/*鏁版嵁鍒椾粠1寮�濮�*/
- for (int i = 1; i <= rows; i++) {
+ for (int i = rows; i > 0; --i) {
Row row = sheet.getRow(i);
if (row.getCell(0) == null) {
continue;
@@ -137,32 +138,31 @@
item.setCreateTime(DateUtils.getNowDate());
item.setPredictQuantity(new BigDecimal(quantity));
item.setPredictDate(new Timestamp(date.getTime()));
- list.add(item);
+ if (!keys.contains(item.getKey())) {
+ keys.add(item.getKey());
+ list.add(item);
+ }
}
}
if (!list.isEmpty()) {
-
- List<Map<String, Object>> facCodeKey = apsGasPipelinePredictionMapper.selectByFacOrMaterial(
- list.stream().map(ApsGasPipelinePrediction::getFactory).collect(Collectors.toSet()),
- list.stream().map(ApsGasPipelinePrediction::getMaterialCode).collect(Collectors.toSet())
- );
+ List<Map<String, Object>> facCodeKey = apsGasPipelinePredictionMapper.selectByFacOrMaterial(keys);
if (!facCodeKey.isEmpty()) {
- SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
Iterator<ApsGasPipelinePrediction> it = list.iterator();
while (it.hasNext()) {
ApsGasPipelinePrediction item = it.next();
- String key = item.getFactory() + "##" + item.getMaterialCode() + "##" + sdf.format(item.getPredictDate());
- facCodeKey.stream()
- .filter(map -> map.get("key").equals(key))
- .forEach(row -> {
+ long count = facCodeKey.stream()
+ .filter(map -> map.get("key").equals(item.getKey()))
+ .peek(row -> {
item.setId((Long) row.get("id"));
item.setCreateBy(null);
item.setCreateTime(null);
item.setUpdateBy(SecurityUtils.getUsername());
item.setUpdateTime(new Timestamp(System.currentTimeMillis()));
apsGasPipelinePredictionMapper.updateById(item);
- it.remove();
- });
+ }).count();
+ if (count > 0){
+ it.remove();
+ }
}
}
if (!list.isEmpty()) {
diff --git a/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsMaterialProductGroupManagementServiceImpl.java b/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsMaterialProductGroupManagementServiceImpl.java
index de29aca..52ac0a3 100644
--- a/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsMaterialProductGroupManagementServiceImpl.java
+++ b/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsMaterialProductGroupManagementServiceImpl.java
@@ -123,7 +123,8 @@
List<ApsMaterialProductGroupManagement> list = new ArrayList<>();
/*鏁版嵁鍒椾粠1寮�濮�*/
- for (int i = 1; i <= rows; i++) {
+ Set<String> keys = new HashSet<>();
+ for (int i = rows; i > 0; --i) {
Row row = sheet.getRow(i);
if (row.getCell(0) == null) {
continue;
@@ -149,20 +150,19 @@
item.setIsMain(isMain);
item.setCreateBy(SecurityUtils.getUsername());
item.setCreateTime(DateUtils.getNowDate());
- list.add(item);
+ if (!keys.contains(item.getKey())) {
+ keys.add(item.getKey());
+ list.add(item);
+ }
}
}
if (!list.isEmpty()) {
- Set<String> facCodeKey = apsMaterialProductGroupManagementMapper.selectByFacOrMaterial(
- list.stream().map(ApsMaterialProductGroupManagement::getFactory).collect(Collectors.toSet()),
- list.stream().map(ApsMaterialProductGroupManagement::getMaterialCode).collect(Collectors.toSet())
- );
+ Set<String> facCodeKey = apsMaterialProductGroupManagementMapper.selectByFacOrMaterial(keys);
if (!facCodeKey.isEmpty()) {
Iterator<ApsMaterialProductGroupManagement> it = list.iterator();
while (it.hasNext()) {
ApsMaterialProductGroupManagement item = it.next();
- String key = item.getFactory() + "##" + item.getMaterialCode();
- if (facCodeKey.contains(key)) {
+ if (facCodeKey.contains(item.getKey())) {
LambdaUpdateWrapper<ApsMaterialProductGroupManagement> wrapper = new LambdaUpdateWrapper<>();
wrapper.eq(ApsMaterialProductGroupManagement::getFactory, item.getFactory());
wrapper.eq(ApsMaterialProductGroupManagement::getMaterialCode, item.getMaterialCode());
--
Gitblit v1.9.3