package com.zzg.system.service.state.impl;
|
|
import com.alibaba.excel.EasyExcelFactory;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.zzg.common.core.domain.BaseEntity;
|
import com.zzg.common.core.domain.entity.state.StateProjectCompensateStandard;
|
import com.zzg.common.core.domain.entity.state.StateProjectCompensation;
|
import com.zzg.common.enums.CompensateTypeEnum;
|
import com.zzg.common.enums.CompensationCategoryEnum;
|
import com.zzg.common.enums.CompensationSubTypeEnum;
|
import com.zzg.common.exception.GlobalException;
|
import com.zzg.common.utils.FileUtil;
|
import com.zzg.common.utils.StringUtils;
|
import com.zzg.system.convert.StateProjectConvert;
|
import com.zzg.system.domain.vo.StateProjectCompensateStandardVO;
|
import com.zzg.system.mapper.state.StateProjectCompensateStandardMapper;
|
import com.zzg.system.service.state.StateProjectCompensateStandardService;
|
import com.zzg.system.service.state.StateProjectCompensationService;
|
import org.springframework.context.annotation.Lazy;
|
import org.springframework.stereotype.Service;
|
import org.springframework.util.CollectionUtils;
|
import org.springframework.web.multipart.MultipartFile;
|
|
import javax.annotation.Resource;
|
import java.io.IOException;
|
import java.util.*;
|
import java.util.stream.Collectors;
|
|
@Service
|
public class StateProjectCompensateStandardServiceImpl extends ServiceImpl<StateProjectCompensateStandardMapper, StateProjectCompensateStandard> implements StateProjectCompensateStandardService {
|
|
@Lazy
|
@Resource
|
private StateProjectCompensationService stateProjectCompensationService;
|
|
/**
|
* 获取补偿标准列表
|
* @param standardName
|
* @param stopFlag
|
* @param compensateType
|
* @return
|
*/
|
@Override
|
public Map<String, List<StateProjectCompensateStandardVO>> getCompensateStandardMap(String standardName, Integer stopFlag, Integer compensateType) {
|
LambdaQueryWrapper<StateProjectCompensateStandard> queryWrapper = new LambdaQueryWrapper<>();
|
if (Objects.nonNull(stopFlag)) {
|
queryWrapper.eq(StateProjectCompensateStandard::getStopFlag, stopFlag);
|
}
|
if (Objects.nonNull(compensateType)) {
|
queryWrapper.eq(StateProjectCompensateStandard::getCompensateType, compensateType);
|
}
|
if (StringUtils.isNotEmpty(standardName)) {
|
queryWrapper.eq(StateProjectCompensateStandard::getStandardName, standardName);
|
}
|
queryWrapper.orderByAsc(BaseEntity::getCreateTime);
|
List<StateProjectCompensateStandard> list = list(queryWrapper);
|
if (CollectionUtils.isEmpty(list)) {
|
return Collections.emptyMap();
|
}
|
StateProjectCompensateStandardVO vo;
|
List<StateProjectCompensateStandardVO> voList = new ArrayList<>();
|
for (StateProjectCompensateStandard e : list) {
|
vo = StateProjectConvert.INSTANCE.toStateProjectCompensateStandardVO(e);
|
vo.setCompensateTypeStr(CompensateTypeEnum.getDescription(e.getCompensateType()));
|
vo.setCategoryStr(CompensationCategoryEnum.getDescription(e.getCategory()));
|
vo.setSubTypeStr(CompensationSubTypeEnum.getDescription(e.getSubType()));
|
voList.add(vo);
|
}
|
return voList.stream().collect(Collectors.groupingBy(StateProjectCompensateStandardVO::getStandardName));
|
}
|
|
@Override
|
public List<StateProjectCompensateStandard> getEnableCompensateStandard(List<String> standardNameList) {
|
LambdaQueryWrapper<StateProjectCompensateStandard> queryWrapper = new LambdaQueryWrapper<>();
|
queryWrapper.eq(StateProjectCompensateStandard::getStopFlag,1);
|
queryWrapper.eq(StateProjectCompensateStandard::getDelFlag,0);
|
if (!CollectionUtils.isEmpty(standardNameList)) {
|
queryWrapper.in(StateProjectCompensateStandard::getStandardName, standardNameList);
|
}
|
return list(queryWrapper);
|
}
|
|
@Override
|
public boolean importByExcel(MultipartFile file) {
|
List<StateProjectCompensateStandardVO> dataList;
|
try {
|
dataList = EasyExcelFactory.read(FileUtil.convertToFile(file))
|
.head(StateProjectCompensateStandardVO.class)
|
.sheet()
|
.doReadSync();
|
} catch (IOException e) {
|
throw new GlobalException("读取Excel文件失败");
|
}
|
//TODO 导入未校验标准名称唯一
|
StateProjectCompensateStandard po;
|
List<StateProjectCompensateStandard> poList = new ArrayList<>();
|
for (StateProjectCompensateStandardVO e : dataList) {
|
po = StateProjectConvert.INSTANCE.toStateProjectCompensateStandardPO(e);
|
int typeCode = CompensateTypeEnum.getCode(e.getCompensateTypeStr());
|
int categoryCode = CompensationCategoryEnum.getCode(e.getCategoryStr());
|
int subTypeCode = CompensationSubTypeEnum.getCode(e.getSubTypeStr());
|
if (typeCode == 0 || categoryCode == 0 || subTypeCode == 0 || org.apache.commons.lang3.StringUtils.isBlank(po.getStandardName())) {
|
throw new GlobalException("excel填写的数据有误");
|
}
|
po.setCompensateType(typeCode);
|
po.setCategory(categoryCode);
|
po.setSubType(subTypeCode);
|
poList.add(po);
|
}
|
|
return saveBatch(poList);
|
}
|
|
/**
|
* 创建补偿标准
|
* @param stateProjectCompensateStandard
|
* @return
|
*/
|
@Override
|
public Boolean createCompensatesStandard(StateProjectCompensateStandard stateProjectCompensateStandard) {
|
String standardName = stateProjectCompensateStandard.getStandardName();
|
LambdaQueryWrapper<StateProjectCompensateStandard> queryWrapper = new LambdaQueryWrapper<>();
|
queryWrapper.eq(StateProjectCompensateStandard::getStandardName, standardName);
|
long count = count(queryWrapper);
|
if (count > 0) {
|
throw new GlobalException("已经存在同名标准");
|
}
|
|
stateProjectCompensateStandard.setStandardName(standardName);
|
stateProjectCompensateStandard.setStopFlag(1);
|
List<StateProjectCompensateStandard> standardList = new ArrayList<>();
|
for (CompensateTypeEnum typeEnum : CompensateTypeEnum.values()) {
|
if (typeEnum.getCode() == stateProjectCompensateStandard.getCompensateType()) {
|
for (CompensationCategoryEnum categoryEnum : CompensationCategoryEnum.values()) {
|
// 只添加符合条件的组合
|
if (isValidCompensationType(typeEnum.getCode(), categoryEnum.getCode())) {
|
StateProjectCompensateStandard compensation = createCompensation(typeEnum, categoryEnum, stateProjectCompensateStandard);
|
|
// TODO 处理特殊的组合
|
handleSpecialCases(typeEnum, categoryEnum, compensation, standardList);
|
|
// 添加最终的 compensation 到标准列表
|
standardList.add(compensation);
|
}
|
}
|
}
|
}
|
return this.saveOrUpdateBatch(standardList);
|
}
|
|
/**
|
* 修改补偿标准名字
|
* @param stateProjectCompensateStandard
|
* @return
|
*/
|
@Override
|
public Boolean updateName(StateProjectCompensateStandard stateProjectCompensateStandard) {
|
|
LambdaQueryWrapper<StateProjectCompensateStandard> queryWrapper = new LambdaQueryWrapper<>();
|
queryWrapper.eq(StateProjectCompensateStandard::getStandardName, stateProjectCompensateStandard.getStandardName());
|
long count = count(queryWrapper);
|
if (count > 0) {
|
throw new GlobalException("已经存在同名标准");
|
}
|
LambdaUpdateWrapper<StateProjectCompensateStandard> updateWrapper = new LambdaUpdateWrapper<>();
|
updateWrapper.eq(StateProjectCompensateStandard::getStandardName, stateProjectCompensateStandard.getOldStandardName())
|
.set(StateProjectCompensateStandard::getStandardName, stateProjectCompensateStandard.getStandardName());
|
|
List<StateProjectCompensation> compensationList = stateProjectCompensationService
|
.lambdaQuery()
|
.eq(StateProjectCompensation::getCompensationType, stateProjectCompensateStandard.getOldStandardName())
|
.or()
|
.eq(StateProjectCompensation::getPolicyCompensationType, stateProjectCompensateStandard.getOldStandardName())
|
.or()
|
.eq(StateProjectCompensation::getPolicySubsidy, stateProjectCompensateStandard.getOldStandardName())
|
.or()
|
.eq(StateProjectCompensation::getPolicySupplement, stateProjectCompensateStandard.getOldStandardName())
|
.or()
|
.eq(StateProjectCompensation::getAward, stateProjectCompensateStandard.getOldStandardName())
|
.list();
|
|
List<StateProjectCompensation> toUpdateList = new ArrayList<>();
|
for (StateProjectCompensation compensation : compensationList) {
|
boolean isUpdated = false;
|
if (compensation.getCompensationType().equals(stateProjectCompensateStandard.getOldStandardName())) {
|
compensation.setCompensationType(stateProjectCompensateStandard.getStandardName());
|
isUpdated = true;
|
}
|
if (compensation.getPolicyCompensationType().equals(stateProjectCompensateStandard.getOldStandardName())) {
|
compensation.setPolicyCompensationType(stateProjectCompensateStandard.getStandardName());
|
isUpdated = true;
|
}
|
if (compensation.getPolicySubsidy().equals(stateProjectCompensateStandard.getOldStandardName())) {
|
compensation.setPolicySubsidy(stateProjectCompensateStandard.getStandardName());
|
isUpdated = true;
|
}
|
if (compensation.getPolicySupplement().equals(stateProjectCompensateStandard.getOldStandardName())) {
|
compensation.setPolicySupplement(stateProjectCompensateStandard.getStandardName());
|
isUpdated = true;
|
}
|
if (compensation.getAward().equals(stateProjectCompensateStandard.getOldStandardName())) {
|
compensation.setAward(stateProjectCompensateStandard.getStandardName());
|
isUpdated = true;
|
}
|
if (isUpdated) {
|
toUpdateList.add(compensation);
|
}
|
}
|
if (!toUpdateList.isEmpty()) {
|
stateProjectCompensationService.updateBatchById(toUpdateList);
|
}
|
return update(updateWrapper);
|
}
|
|
private void handleSpecialCases(CompensateTypeEnum typeEnum, CompensationCategoryEnum categoryEnum,
|
StateProjectCompensateStandard compensation, List<StateProjectCompensateStandard> standardList) {
|
//政策性补贴
|
if (typeEnum.equals(CompensateTypeEnum.POLICY_ALLOWANCE)
|
//购房补贴
|
&& categoryEnum.equals(CompensationCategoryEnum.HOUSE_PURCHASE_SUBSIDY)) {
|
addCompensationWithSpecifications(compensation, standardList);
|
}
|
|
if (typeEnum.equals(CompensateTypeEnum.POLICY_COMPENSATION_FEE)
|
&& categoryEnum.equals(CompensationCategoryEnum.PHONE_RELOCATION)) {
|
addCompensationWithSpecifications(compensation, standardList);
|
}
|
|
if (typeEnum.equals(CompensateTypeEnum.HOUSE_ACQUISITION_COMPENSATION_FEE)
|
&& categoryEnum.equals(CompensationCategoryEnum.PROPERTY_SWAP)) {
|
compensation.setUnit("平方米/元");
|
addCompensationWithSpecifications(compensation, standardList);
|
}
|
}
|
|
|
private void addCompensationWithSpecifications(StateProjectCompensateStandard compensation,
|
List<StateProjectCompensateStandard> standardList) {
|
compensation.setSpecification("住宅");
|
StateProjectCompensateStandard copy = StateProjectConvert.INSTANCE.copyCompensateStandard(compensation);
|
copy.setSpecification("非住宅");
|
standardList.add(copy);
|
}
|
|
private boolean isValidCompensationType(int type1Code, int type2Code) {
|
// 根据 type1 的 code 判断 type2 是否匹配相应的前缀
|
return type2Code / 100 == type1Code;
|
}
|
|
private StateProjectCompensateStandard createCompensation(CompensateTypeEnum type, CompensationCategoryEnum category, StateProjectCompensateStandard stateProjectCompensateStandard) {
|
StateProjectCompensateStandard copy = StateProjectConvert.INSTANCE.copyCompensateStandard(stateProjectCompensateStandard);
|
copy.setCompensateType(type.getCode());
|
copy.setCategory(category.getCode());
|
copy.setUnit(category.getUnit());
|
return copy;
|
}
|
}
|