Selaa lähdekoodia

优化查询原始记录,同班同炉重复数据问题

qiangxuan 2 viikkoa sitten
vanhempi
sitoutus
752836ed79

+ 22 - 6
zgztBus/jeecg-module-sbm/src/main/java/org/jeecg/modules/billet/billetOriginalProductRecord/controller/BilletOriginalProductRecordController.java

@@ -51,6 +51,7 @@ import org.jeecg.modules.billet.storageBill.service.IStorageBillService;
 import org.jeecg.modules.carUnit.service.ISysDictService;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.dao.DuplicateKeyException;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.servlet.ModelAndView;
@@ -654,12 +655,27 @@ public class BilletOriginalProductRecordController extends JeecgController<Bille
 				 billetOriginalProductRecords.add(billetOriginalProductRecord);
 			 });
 			 log.info("钢坯原始生产记录信息: " + JSON.toJSON(billetOriginalProductRecords));
-			 try {
-				 // 批量保存
-				 billetOriginalProductRecordService.saveBatch(billetOriginalProductRecords);
-			 } catch (Exception e) {
-				 log.error("保存钢坯原始生产记录失败", e);
-				 return Result.error("钢坯原始生产记录数据保存失败,请重试");
+
+			 // 在批量保存前,过滤掉已存在的炉号记录
+			 List<BilletOriginalProductRecord> finalRecords = billetOriginalProductRecords.stream()
+					 .filter(record -> {
+						 // 使用 getOne 方法检查是否存在相同记录(铸机号、炉号、班次、班组均相同)
+						 LambdaQueryWrapper<BilletOriginalProductRecord> checkWrapper = new LambdaQueryWrapper<>();
+						 checkWrapper.eq(BilletOriginalProductRecord::getCcmNo, record.getCcmNo())
+								 .eq(BilletOriginalProductRecord::getHeatNo, record.getHeatNo())
+								 .eq(BilletOriginalProductRecord::getShift, record.getShift())
+								 .eq(BilletOriginalProductRecord::getShiftGroup, record.getShiftGroup())
+								 .last("LIMIT 1"); // 只查询一条记录,提高性能
+						 // 如果 getOne 结果为 null,表示记录不存在,保留该记录
+						 return billetOriginalProductRecordService.getOne(checkWrapper, false) == null;
+					 }).collect(Collectors.toList());
+			 if(oConvertUtils.listIsNotEmpty(finalRecords)){
+				 try {
+					 // 批量保存
+					 billetOriginalProductRecordService.saveBatch(finalRecords);
+				 } catch (DuplicateKeyException e) {
+					 log.error("炉号重复插入:{}", JSON.toJSONString(billetOriginalProductRecords), e);
+				 }
 			 }
 		 }
 		 QueryWrapper<BilletOriginalProductRecord> queryWrapper3 = new QueryWrapper<>();