From 7c266bff815ebed897e51f401ef5987629d77c44 Mon Sep 17 00:00:00 2001 From: sfd <sun.sunshine@163.com> Date: 星期三, 21 五月 2025 11:08:29 +0800 Subject: [PATCH] 修改管路预测与物料产品组导入功能 根据工厂及料号更新与插入 --- aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsMaterialProductGroupManagementServiceImpl.java | 33 +++++++++- aps-modules/aps-core/src/main/java/com/aps/core/mapper/ApsMaterialProductGroupManagementMapper.java | 22 +++++++ aps-modules/aps-core/src/main/java/com/aps/core/mapper/ApsGasPipelinePredictionMapper.java | 26 ++++++++ aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsGasPipelinePredictionServiceImpl.java | 76 ++++++++++++++++--------- 4 files changed, 125 insertions(+), 32 deletions(-) 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 c653463..ef687da 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 @@ -1,9 +1,15 @@ package com.aps.core.mapper; import com.aps.core.domain.ApsGasPipelinePrediction; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Select; +import org.apache.ibatis.annotations.Update; +import org.jetbrains.annotations.NotNull; import java.util.List; +import java.util.Map; +import java.util.Set; /** * 绠¤矾鎵嬪伐姘斾綋棰勬祴鏁版嵁Mapper鎺ュ彛 @@ -62,4 +68,24 @@ public int deleteApsGasPipelinePredictionByIds(Long[] ids); void deleteAll(); + + @Select(""" + <script> + 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=")"> + #{item} + </foreach> + </if> + <if test="!facs.isEmpty()">or material_code in + <foreach collection="codes" item="item" open="(" separator="," close=")"> + #{item} + </foreach> + </if> + </script> + """) + List<Map<String, Object>> selectByFacOrMaterial(@NotNull Set<String> facs, @NotNull Set<String> codes); + } 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 44a8536..3a71a0f 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 @@ -2,8 +2,11 @@ import com.aps.core.domain.ApsMaterialProductGroupManagement; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Select; +import org.jetbrains.annotations.NotNull; import java.util.List; +import java.util.Set; /** * 鐗╂枡浜у搧缁勬暟鎹鐞哅apper鎺ュ彛 @@ -62,4 +65,23 @@ public int deleteApsMaterialProductGroupManagementByIds(Long[] ids); void deleteAll(); + + + @Select(""" + <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=")"> + #{item} + </foreach> + </if> + <if test="!facs.isEmpty()">or material_code in + <foreach collection="codes" item="item" open="(" separator="," close=")"> + #{item} + </foreach> + </if> + </script> + """) + Set<String> selectByFacOrMaterial(@NotNull Set<String> facs, @NotNull Set<String> codes); } 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 cf3d710..f6e3a61 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 @@ -4,8 +4,10 @@ import com.aps.common.core.utils.DateUtils; import com.aps.common.security.utils.SecurityUtils; import com.aps.core.domain.ApsGasPipelinePrediction; +import com.aps.core.domain.ApsMaterialProductGroupManagement; import com.aps.core.mapper.ApsGasPipelinePredictionMapper; import com.aps.core.service.IApsGasPipelinePredictionService; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import io.micrometer.common.util.StringUtils; import lombok.SneakyThrows; import org.apache.poi.ss.usermodel.Row; @@ -18,93 +20,86 @@ import java.math.BigDecimal; import java.sql.Timestamp; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; +import java.text.SimpleDateFormat; +import java.util.*; +import java.util.stream.Collectors; /** * 绠¤矾鎵嬪伐姘斾綋棰勬祴鏁版嵁Service涓氬姟灞傚鐞� - * + * * @author ruoyi * @date 2025-05-19 */ @Service -public class ApsGasPipelinePredictionServiceImpl implements IApsGasPipelinePredictionService -{ +public class ApsGasPipelinePredictionServiceImpl implements IApsGasPipelinePredictionService { @Autowired private ApsGasPipelinePredictionMapper apsGasPipelinePredictionMapper; /** * 鏌ヨ绠¤矾鎵嬪伐姘斾綋棰勬祴鏁版嵁 - * + * * @param id 绠¤矾鎵嬪伐姘斾綋棰勬祴鏁版嵁涓婚敭 * @return 绠¤矾鎵嬪伐姘斾綋棰勬祴鏁版嵁 */ @Override - public ApsGasPipelinePrediction selectApsGasPipelinePredictionById(Long id) - { + public ApsGasPipelinePrediction selectApsGasPipelinePredictionById(Long id) { return apsGasPipelinePredictionMapper.selectApsGasPipelinePredictionById(id); } /** * 鏌ヨ绠¤矾鎵嬪伐姘斾綋棰勬祴鏁版嵁鍒楄〃 - * + * * @param apsGasPipelinePrediction 绠¤矾鎵嬪伐姘斾綋棰勬祴鏁版嵁 * @return 绠¤矾鎵嬪伐姘斾綋棰勬祴鏁版嵁 */ @Override - public List<ApsGasPipelinePrediction> selectApsGasPipelinePredictionList(ApsGasPipelinePrediction apsGasPipelinePrediction) - { + public List<ApsGasPipelinePrediction> selectApsGasPipelinePredictionList(ApsGasPipelinePrediction apsGasPipelinePrediction) { return apsGasPipelinePredictionMapper.selectApsGasPipelinePredictionList(apsGasPipelinePrediction); } /** * 鏂板绠¤矾鎵嬪伐姘斾綋棰勬祴鏁版嵁 - * + * * @param apsGasPipelinePrediction 绠¤矾鎵嬪伐姘斾綋棰勬祴鏁版嵁 * @return 缁撴灉 */ @Override - public int insertApsGasPipelinePrediction(ApsGasPipelinePrediction apsGasPipelinePrediction) - { + public int insertApsGasPipelinePrediction(ApsGasPipelinePrediction apsGasPipelinePrediction) { apsGasPipelinePrediction.setCreateTime(DateUtils.getNowDate()); return apsGasPipelinePredictionMapper.insertApsGasPipelinePrediction(apsGasPipelinePrediction); } /** * 淇敼绠¤矾鎵嬪伐姘斾綋棰勬祴鏁版嵁 - * + * * @param apsGasPipelinePrediction 绠¤矾鎵嬪伐姘斾綋棰勬祴鏁版嵁 * @return 缁撴灉 */ @Override - public int updateApsGasPipelinePrediction(ApsGasPipelinePrediction apsGasPipelinePrediction) - { + public int updateApsGasPipelinePrediction(ApsGasPipelinePrediction apsGasPipelinePrediction) { apsGasPipelinePrediction.setUpdateTime(DateUtils.getNowDate()); return apsGasPipelinePredictionMapper.updateApsGasPipelinePrediction(apsGasPipelinePrediction); } /** * 鎵归噺鍒犻櫎绠¤矾鎵嬪伐姘斾綋棰勬祴鏁版嵁 - * + * * @param ids 闇�瑕佸垹闄ょ殑绠¤矾鎵嬪伐姘斾綋棰勬祴鏁版嵁涓婚敭 * @return 缁撴灉 */ @Override - public int deleteApsGasPipelinePredictionByIds(Long[] ids) - { + public int deleteApsGasPipelinePredictionByIds(Long[] ids) { return apsGasPipelinePredictionMapper.deleteApsGasPipelinePredictionByIds(ids); } /** * 鍒犻櫎绠¤矾鎵嬪伐姘斾綋棰勬祴鏁版嵁淇℃伅 - * + * * @param id 绠¤矾鎵嬪伐姘斾綋棰勬祴鏁版嵁涓婚敭 * @return 缁撴灉 */ @Override - public int deleteApsGasPipelinePredictionById(Long id) - { + public int deleteApsGasPipelinePredictionById(Long id) { return apsGasPipelinePredictionMapper.deleteApsGasPipelinePredictionById(id); } @@ -121,12 +116,12 @@ /*鏁版嵁鍒椾粠1寮�濮�*/ for (int i = 1; i <= rows; i++) { Row row = sheet.getRow(i); - if (row.getCell(0) == null){ + if (row.getCell(0) == null) { continue; } String materialCode = row.getCell(0).getStringCellValue(); - if (StringUtils.isEmpty(materialCode)){ + if (StringUtils.isEmpty(materialCode)) { continue; } String factory = row.getCell(1).getStringCellValue(); @@ -146,8 +141,33 @@ } } if (!list.isEmpty()) { - apsGasPipelinePredictionMapper.deleteAll(); - apsGasPipelinePredictionMapper.insert(list); + + List<Map<String, Object>> facCodeKey = apsGasPipelinePredictionMapper.selectByFacOrMaterial( + list.stream().map(ApsGasPipelinePrediction::getFactory).collect(Collectors.toSet()), + list.stream().map(ApsGasPipelinePrediction::getMaterialCode).collect(Collectors.toSet()) + ); + 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 -> { + 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(); + }); + } + } + if (!list.isEmpty()) { + apsGasPipelinePredictionMapper.insert(list); + } } return list.size(); } 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 5a9c0e1..de29aca 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 @@ -2,9 +2,8 @@ import java.math.BigDecimal; import java.sql.Timestamp; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; +import java.util.*; +import java.util.stream.Collectors; import cn.hutool.core.util.IdUtil; import com.aps.common.core.utils.DateUtils; @@ -13,6 +12,7 @@ import com.aps.core.domain.ApsMaterialProductGroupManagement; import com.aps.core.mapper.ApsMaterialProductGroupManagementMapper; import com.aps.core.service.IApsMaterialProductGroupManagementService; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import io.micrometer.common.util.StringUtils; import lombok.SneakyThrows; import org.apache.poi.ss.usermodel.Row; @@ -153,7 +153,32 @@ } } if (!list.isEmpty()) { - apsMaterialProductGroupManagementMapper.insert(list); + Set<String> facCodeKey = apsMaterialProductGroupManagementMapper.selectByFacOrMaterial( + list.stream().map(ApsMaterialProductGroupManagement::getFactory).collect(Collectors.toSet()), + list.stream().map(ApsMaterialProductGroupManagement::getMaterialCode).collect(Collectors.toSet()) + ); + 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)) { + LambdaUpdateWrapper<ApsMaterialProductGroupManagement> wrapper = new LambdaUpdateWrapper<>(); + wrapper.eq(ApsMaterialProductGroupManagement::getFactory, item.getFactory()); + wrapper.eq(ApsMaterialProductGroupManagement::getMaterialCode, item.getMaterialCode()); + item.setCreateBy(null); + item.setCreateTime(null); + item.setUpdateBy(SecurityUtils.getUsername()); + item.setUpdateTime(new Timestamp(System.currentTimeMillis())); + apsMaterialProductGroupManagementMapper.update(item, wrapper); + it.remove(); + } + } + } + + if (!list.isEmpty()) { + apsMaterialProductGroupManagementMapper.insert(list); + } } return list.size(); } -- Gitblit v1.9.3