Merge remote-tracking branch 'origin/main' into main
This commit is contained in:
commit
3b9c58f4d9
@ -86,7 +86,7 @@ public class MpsManualPricingController extends BaseController {
|
|||||||
public R<Void> importData(@RequestPart("file") MultipartFile file, boolean updateSupport,
|
public R<Void> importData(@RequestPart("file") MultipartFile file, boolean updateSupport,
|
||||||
@RequestParam @DateTimeFormat(pattern = "yyyy-MM") Date importMonth) throws Exception {
|
@RequestParam @DateTimeFormat(pattern = "yyyy-MM") Date importMonth) throws Exception {
|
||||||
String importTime = DateUtils.parseDateToStr(FormatsType.YYYY_MM,importMonth);
|
String importTime = DateUtils.parseDateToStr(FormatsType.YYYY_MM,importMonth);
|
||||||
mpsManualPricingService.deleteDataByMonth(importTime);
|
// mpsManualPricingService.deleteDataByMonth(importTime);
|
||||||
ExcelResult<MpsManualPricingImportVo> result = ExcelUtil.importExcel(file.getInputStream(), MpsManualPricingImportVo.class, new MpsManualPricingImportListener(updateSupport,importTime));
|
ExcelResult<MpsManualPricingImportVo> result = ExcelUtil.importExcel(file.getInputStream(), MpsManualPricingImportVo.class, new MpsManualPricingImportListener(updateSupport,importTime));
|
||||||
return R.ok(result.getAnalysis());
|
return R.ok(result.getAnalysis());
|
||||||
}
|
}
|
||||||
|
@ -36,6 +36,7 @@ public class MpsManualPricing extends TenantEntity {
|
|||||||
/**
|
/**
|
||||||
* 员工身份证号
|
* 员工身份证号
|
||||||
*/
|
*/
|
||||||
|
@TableField(value = "idcard_no")
|
||||||
private String idcardNo;
|
private String idcardNo;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -111,6 +112,7 @@ public class MpsManualPricing extends TenantEntity {
|
|||||||
/**
|
/**
|
||||||
* 日期
|
* 日期
|
||||||
*/
|
*/
|
||||||
|
@TableField(value = "import_time")
|
||||||
private String importTime;
|
private String importTime;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -11,7 +11,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|||||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.dromara.original.domain.OriginalHeat;
|
import org.springframework.beans.BeanUtils;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.dromara.mps.domain.bo.MpsManualPricingBo;
|
import org.dromara.mps.domain.bo.MpsManualPricingBo;
|
||||||
import org.dromara.mps.domain.vo.MpsManualPricingVo;
|
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.dromara.mps.service.IMpsManualPricingService;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
import java.util.function.Function;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 手工导入计价Service业务层处理
|
* 手工导入计价Service业务层处理
|
||||||
@ -43,11 +46,56 @@ public class MpsManualPricingServiceImpl implements IMpsManualPricingService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 业务校验(可选),参照demo
|
// 业务校验(可选),参照demo
|
||||||
//validateBusinessRules(list);
|
validateBusinessRules(list);
|
||||||
|
|
||||||
// 2. 批量插入/更新
|
// 2. 批量插入/更新
|
||||||
if (isUpdateSupport) {
|
if (isUpdateSupport) {
|
||||||
baseMapper.insertOrUpdateBatch(list);
|
// 1. 先查询所有具有相同import_time的记录
|
||||||
|
List<MpsManualPricing> existingData = baseMapper.selectList(
|
||||||
|
Wrappers.<MpsManualPricing>lambdaQuery()
|
||||||
|
.in(MpsManualPricing::getImportTime,
|
||||||
|
list.stream()
|
||||||
|
.map(MpsManualPricing::getImportTime)
|
||||||
|
.distinct()
|
||||||
|
.collect(Collectors.toList())
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
// 2. 构建身份证号到ID的映射
|
||||||
|
Map<String, MpsManualPricing> idcardToRecordMap = existingData.stream()
|
||||||
|
.collect(Collectors.toMap(
|
||||||
|
MpsManualPricing::getIdcardNo,
|
||||||
|
Function.identity(),
|
||||||
|
(oldValue, newValue) -> oldValue // 如果有重复身份证号,保留第一个
|
||||||
|
));
|
||||||
|
|
||||||
|
// 3. 处理待插入的数据,合并ID
|
||||||
|
List<MpsManualPricing> 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 {
|
} else {
|
||||||
// baseMapper.insertBatch(list);
|
// baseMapper.insertBatch(list);
|
||||||
|
|
||||||
@ -77,16 +125,16 @@ public class MpsManualPricingServiceImpl implements IMpsManualPricingService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 示例:业务重复检查
|
// 示例:业务重复检查
|
||||||
/*private void validateBusinessRules(Collection<MpsManualPricingBo> list) {
|
private void validateBusinessRules(Collection<MpsManualPricing> list) {
|
||||||
Set<String> uniqueKeys = new HashSet<>();
|
Set<String> uniqueKeys = new HashSet<>();
|
||||||
for (MpsManualPricingBo bo : list) {
|
for (MpsManualPricing bo : list) {
|
||||||
String key = bo.getCustAcctNo();
|
String key = bo.getIdcardNo();
|
||||||
if (uniqueKeys.contains(key)) {
|
if (uniqueKeys.contains(key)) {
|
||||||
throw new ServiceException("重复的客户账号: " + key);
|
throw new ServiceException("重复的客户账号: " + key);
|
||||||
}
|
}
|
||||||
uniqueKeys.add(key);
|
uniqueKeys.add(key);
|
||||||
}
|
}
|
||||||
} */
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询手工导入计价
|
* 查询手工导入计价
|
||||||
|
@ -15,7 +15,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||||||
marketing_code,
|
marketing_code,
|
||||||
add_item,
|
add_item,
|
||||||
record_month,
|
record_month,
|
||||||
tenant_id,
|
|
||||||
create_dept,
|
create_dept,
|
||||||
create_by,
|
create_by,
|
||||||
create_time,
|
create_time,
|
||||||
@ -32,7 +31,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||||||
#{item.marketingCode},
|
#{item.marketingCode},
|
||||||
#{item.addItem},
|
#{item.addItem},
|
||||||
#{item.recordMonth},
|
#{item.recordMonth},
|
||||||
#{item.tenantId},
|
|
||||||
#{item.createDept},
|
#{item.createDept},
|
||||||
#{item.createBy},
|
#{item.createBy},
|
||||||
#{item.createTime},
|
#{item.createTime},
|
||||||
|
@ -48,17 +48,17 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||||||
#{item.name},
|
#{item.name},
|
||||||
#{item.position},
|
#{item.position},
|
||||||
#{item.marketingCode},
|
#{item.marketingCode},
|
||||||
#{item.merchantRetentionRate},
|
COALESCE(#{item.merchantRetentionRate},0.00),
|
||||||
#{item.newPartyFeeUnits},
|
COALESCE(#{item.newPartyFeeUnits},0.00),
|
||||||
#{item.newPropertyFeeUnits},
|
COALESCE(#{item.newPropertyFeeUnits},0.00),
|
||||||
#{item.newCateringFeeUnits},
|
COALESCE(#{item.newCateringFeeUnits},0.00),
|
||||||
#{item.newForeignAccounts},
|
COALESCE(#{item.newForeignAccounts},0.00),
|
||||||
#{item.newIndividualTreasury},
|
COALESCE(#{item.newIndividualTreasury},0.00),
|
||||||
#{item.newCorporateTreasury},
|
COALESCE(#{item.newCorporateTreasury},0.00),
|
||||||
#{item.treasuryTransactions},
|
COALESCE(#{item.treasuryTransactions},0.00),
|
||||||
#{item.regularProducts},
|
COALESCE(#{item.regularProducts},0.00),
|
||||||
#{item.newHousingFund},
|
COALESCE(#{item.newHousingFund},0.00),
|
||||||
#{item.totalScore},
|
COALESCE(#{item.totalScore},0.00),
|
||||||
#{item.importTime},
|
#{item.importTime},
|
||||||
#{item.fill1},
|
#{item.fill1},
|
||||||
#{item.fill2},
|
#{item.fill2},
|
||||||
|
Loading…
Reference in New Issue
Block a user