diff --git a/cds-platform-2025.V1/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mps/controller/MpsManualPricingController.java b/cds-platform-2025.V1/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mps/controller/MpsManualPricingController.java index 5b559e0..013a26b 100644 --- a/cds-platform-2025.V1/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mps/controller/MpsManualPricingController.java +++ b/cds-platform-2025.V1/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mps/controller/MpsManualPricingController.java @@ -86,7 +86,7 @@ public class MpsManualPricingController extends BaseController { public R importData(@RequestPart("file") MultipartFile file, boolean updateSupport, @RequestParam @DateTimeFormat(pattern = "yyyy-MM") Date importMonth) throws Exception { String importTime = DateUtils.parseDateToStr(FormatsType.YYYY_MM,importMonth); - mpsManualPricingService.deleteDataByMonth(importTime); +// mpsManualPricingService.deleteDataByMonth(importTime); ExcelResult result = ExcelUtil.importExcel(file.getInputStream(), MpsManualPricingImportVo.class, new MpsManualPricingImportListener(updateSupport,importTime)); return R.ok(result.getAnalysis()); } diff --git a/cds-platform-2025.V1/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mps/domain/MpsManualPricing.java b/cds-platform-2025.V1/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mps/domain/MpsManualPricing.java index 0caf9c3..4f6ada1 100644 --- a/cds-platform-2025.V1/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mps/domain/MpsManualPricing.java +++ b/cds-platform-2025.V1/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mps/domain/MpsManualPricing.java @@ -36,6 +36,7 @@ public class MpsManualPricing extends TenantEntity { /** * 员工身份证号 */ + @TableField(value = "idcard_no") private String idcardNo; /** @@ -111,6 +112,7 @@ public class MpsManualPricing extends TenantEntity { /** * 日期 */ + @TableField(value = "import_time") private String importTime; /** diff --git a/cds-platform-2025.V1/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mps/service/impl/MpsManualPricingServiceImpl.java b/cds-platform-2025.V1/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mps/service/impl/MpsManualPricingServiceImpl.java index 2858943..3527816 100644 --- a/cds-platform-2025.V1/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mps/service/impl/MpsManualPricingServiceImpl.java +++ b/cds-platform-2025.V1/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mps/service/impl/MpsManualPricingServiceImpl.java @@ -11,7 +11,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.dromara.original.domain.OriginalHeat; +import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import org.dromara.mps.domain.bo.MpsManualPricingBo; import org.dromara.mps.domain.vo.MpsManualPricingVo; @@ -20,7 +20,10 @@ import org.dromara.mps.mapper.MpsManualPricingMapper; import org.dromara.mps.service.IMpsManualPricingService; import org.springframework.transaction.annotation.Transactional; +import java.math.BigDecimal; import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; /** * 手工导入计价Service业务层处理 @@ -43,11 +46,56 @@ public class MpsManualPricingServiceImpl implements IMpsManualPricingService { } // 业务校验(可选),参照demo - //validateBusinessRules(list); + validateBusinessRules(list); // 2. 批量插入/更新 if (isUpdateSupport) { - baseMapper.insertOrUpdateBatch(list); + // 1. 先查询所有具有相同import_time的记录 + List existingData = baseMapper.selectList( + Wrappers.lambdaQuery() + .in(MpsManualPricing::getImportTime, + list.stream() + .map(MpsManualPricing::getImportTime) + .distinct() + .collect(Collectors.toList()) + ) + ); + + // 2. 构建身份证号到ID的映射 + Map idcardToRecordMap = existingData.stream() + .collect(Collectors.toMap( + MpsManualPricing::getIdcardNo, + Function.identity(), + (oldValue, newValue) -> oldValue // 如果有重复身份证号,保留第一个 + )); + + // 3. 处理待插入的数据,合并ID + List processedList = new ArrayList<>(); + for (MpsManualPricing item : list) { + MpsManualPricing copy = new MpsManualPricing(); + BeanUtils.copyProperties(item, copy); + + // 如果找到匹配的ID,则设置ID + if (idcardToRecordMap.containsKey(copy.getIdcardNo())) { + MpsManualPricing existing = idcardToRecordMap.get(copy.getIdcardNo()); + copy.setId(existing.getId()); + // 并新旧数据计算 + BigDecimal total = ( + copy.getMerchantRetentionRate() != null ? copy.getMerchantRetentionRate() : existing.getMerchantRetentionRate()) + .add(copy.getNewPartyFeeUnits() != null ? copy.getNewPartyFeeUnits() : existing.getNewPartyFeeUnits()) + .add(copy.getNewPropertyFeeUnits() != null ? copy.getNewPropertyFeeUnits() : existing.getNewPropertyFeeUnits()) + .add(copy.getNewCateringFeeUnits() != null ? copy.getNewCateringFeeUnits() : existing.getNewCateringFeeUnits()) + .add(copy.getNewForeignAccounts() != null ? copy.getNewForeignAccounts() : existing.getNewForeignAccounts()) + .add(copy.getNewIndividualTreasury() != null ? copy.getNewIndividualTreasury() : existing.getNewIndividualTreasury()) + .add(copy.getNewCorporateTreasury() != null ? copy.getNewCorporateTreasury() : existing.getNewCorporateTreasury()) + .add(copy.getTreasuryTransactions() != null ? copy.getTreasuryTransactions() : existing.getTreasuryTransactions()) + .add(copy.getRegularProducts() != null ? copy.getRegularProducts() : existing.getRegularProducts()) + .add(copy.getNewHousingFund() != null ? copy.getNewHousingFund() : existing.getNewHousingFund()); + copy.setTotalScore(total); + } + processedList.add(copy); + } + baseMapper.insertOrUpdateBatch(processedList); } else { // baseMapper.insertBatch(list); @@ -77,16 +125,16 @@ public class MpsManualPricingServiceImpl implements IMpsManualPricingService { } // 示例:业务重复检查 - /*private void validateBusinessRules(Collection list) { + private void validateBusinessRules(Collection list) { Set uniqueKeys = new HashSet<>(); - for (MpsManualPricingBo bo : list) { - String key = bo.getCustAcctNo(); + for (MpsManualPricing bo : list) { + String key = bo.getIdcardNo(); if (uniqueKeys.contains(key)) { throw new ServiceException("重复的客户账号: " + key); } uniqueKeys.add(key); } - } */ + } /** * 查询手工导入计价 diff --git a/cds-platform-2025.V1/ruoyi-modules/ruoyi-system/src/main/resources/mapper/mps/MpsEmpAddItemsMapper.xml b/cds-platform-2025.V1/ruoyi-modules/ruoyi-system/src/main/resources/mapper/mps/MpsEmpAddItemsMapper.xml index 2aa20e9..116cd9e 100644 --- a/cds-platform-2025.V1/ruoyi-modules/ruoyi-system/src/main/resources/mapper/mps/MpsEmpAddItemsMapper.xml +++ b/cds-platform-2025.V1/ruoyi-modules/ruoyi-system/src/main/resources/mapper/mps/MpsEmpAddItemsMapper.xml @@ -15,7 +15,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" marketing_code, add_item, record_month, - tenant_id, create_dept, create_by, create_time, @@ -32,7 +31,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{item.marketingCode}, #{item.addItem}, #{item.recordMonth}, - #{item.tenantId}, #{item.createDept}, #{item.createBy}, #{item.createTime}, diff --git a/cds-platform-2025.V1/ruoyi-modules/ruoyi-system/src/main/resources/mapper/mps/MpsManualPricingMapper.xml b/cds-platform-2025.V1/ruoyi-modules/ruoyi-system/src/main/resources/mapper/mps/MpsManualPricingMapper.xml index 20b255d..4b17625 100644 --- a/cds-platform-2025.V1/ruoyi-modules/ruoyi-system/src/main/resources/mapper/mps/MpsManualPricingMapper.xml +++ b/cds-platform-2025.V1/ruoyi-modules/ruoyi-system/src/main/resources/mapper/mps/MpsManualPricingMapper.xml @@ -48,17 +48,17 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{item.name}, #{item.position}, #{item.marketingCode}, - #{item.merchantRetentionRate}, - #{item.newPartyFeeUnits}, - #{item.newPropertyFeeUnits}, - #{item.newCateringFeeUnits}, - #{item.newForeignAccounts}, - #{item.newIndividualTreasury}, - #{item.newCorporateTreasury}, - #{item.treasuryTransactions}, - #{item.regularProducts}, - #{item.newHousingFund}, - #{item.totalScore}, + COALESCE(#{item.merchantRetentionRate},0.00), + COALESCE(#{item.newPartyFeeUnits},0.00), + COALESCE(#{item.newPropertyFeeUnits},0.00), + COALESCE(#{item.newCateringFeeUnits},0.00), + COALESCE(#{item.newForeignAccounts},0.00), + COALESCE(#{item.newIndividualTreasury},0.00), + COALESCE(#{item.newCorporateTreasury},0.00), + COALESCE(#{item.treasuryTransactions},0.00), + COALESCE(#{item.regularProducts},0.00), + COALESCE(#{item.newHousingFund},0.00), + COALESCE(#{item.totalScore},0.00), #{item.importTime}, #{item.fill1}, #{item.fill2},