package com.zzg.system.service.state.impl;
|
|
import cn.hutool.core.bean.BeanUtil;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.github.pagehelper.PageInfo;
|
import com.zzg.common.core.domain.entity.state.StateAgreement;
|
import com.zzg.common.core.domain.entity.state.StateHousehold;
|
import com.zzg.common.core.domain.entity.state.StateHouseholdOwner;
|
import com.zzg.common.core.domain.entity.system.SysDictData;
|
import com.zzg.common.enums.AgreementTypeEnum;
|
import com.zzg.common.enums.CompensationCategoryEnum;
|
import com.zzg.common.exception.GlobalException;
|
import com.zzg.common.utils.PageUtils;
|
import com.zzg.common.utils.StringUtils;
|
import com.zzg.system.domain.bo.StateAgreementBO;
|
import com.zzg.system.domain.vo.AgreementDetailVO;
|
import com.zzg.system.domain.vo.StateAgreementVO;
|
import com.zzg.system.mapper.state.StateAgreementMapper;
|
import com.zzg.system.service.state.StateAgreementService;
|
import com.zzg.system.service.state.StateHouseholdOwnerService;
|
import com.zzg.system.service.state.StateHouseholdService;
|
import com.zzg.system.service.system.ISysDictTypeService;
|
import lombok.RequiredArgsConstructor;
|
import org.springframework.context.annotation.Lazy;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import javax.annotation.Resource;
|
import java.math.BigDecimal;
|
import java.text.ParseException;
|
import java.text.SimpleDateFormat;
|
import java.util.*;
|
import java.util.function.Function;
|
import java.util.stream.Collectors;
|
import java.util.stream.Stream;
|
|
@Service
|
@RequiredArgsConstructor
|
public class StateAgreementServiceImpl
|
extends ServiceImpl<StateAgreementMapper, StateAgreement>
|
implements StateAgreementService {
|
|
private final StateHouseholdOwnerService stateHouseholdOwnerService;
|
private final StateHouseholdService stateHouseholdService;
|
|
@Resource
|
@Lazy
|
private final ISysDictTypeService dictTypeService;
|
|
@Override
|
public PageInfo<StateAgreementVO> listDataByCondition(StateAgreementBO request) {
|
PageUtils.startPage();
|
List<StateAgreementVO> sqlResult = this.getBaseMapper().listDataByConditions(request);
|
if (CollectionUtils.isEmpty(sqlResult)) {
|
return new PageInfo<>();
|
}
|
List<String> houseIdList = sqlResult.stream().map(StateAgreementVO::getStateHouseholdId).distinct().collect(Collectors.toList());
|
|
|
PageInfo<StateAgreementVO> stateAgreementVOPageInfo = new PageInfo<>(sqlResult);
|
LambdaQueryWrapper<StateHouseholdOwner> ownerLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
ownerLambdaQueryWrapper.in(StateHouseholdOwner::getStateHouseholdId, houseIdList);
|
|
List<StateHouseholdOwner> stateHouseholdOwners = stateHouseholdOwnerService.list(ownerLambdaQueryWrapper);
|
List<StateHouseholdOwner> useList;
|
if (!StringUtils.isEmpty(request.getOwnerName())) {
|
useList = stateHouseholdOwners.stream().filter(e -> e.getOwnerName().contains(request.getOwnerName())).collect(Collectors.toList());
|
List<String> houseIdS = useList.stream().map(StateHouseholdOwner::getStateHouseholdId).collect(Collectors.toList());
|
useList.addAll(stateHouseholdOwners.stream().filter(e -> houseIdS.contains(e.getStateHouseholdId())).collect(Collectors.toList()));
|
useList = new ArrayList<>(useList.stream()
|
.filter(Objects::nonNull)
|
.collect(Collectors.toMap(
|
StateHouseholdOwner::getId, // 根据 stateHouseholdId 去重
|
vo -> vo, // 保留原始对象
|
(existing, replacement) -> existing // 如果有重复,保留第一个对象
|
))
|
.values());
|
} else {
|
useList = stateHouseholdOwners;
|
}
|
|
Map<String, List<StateHouseholdOwner>> map = useList.stream().collect(Collectors.groupingBy(StateHouseholdOwner::getStateHouseholdId));
|
|
if (!StringUtils.isEmpty(request.getOwnerName())) {
|
sqlResult = sqlResult.stream().filter(data -> map.containsKey(data.getStateHouseholdId())).collect(Collectors.toList());
|
}
|
//拼接名字
|
Map<String, List<StateAgreementVO>> householdMap = sqlResult.stream().filter(Objects::nonNull).filter(vo -> vo.getStateHouseholdId() != null).collect(Collectors.groupingBy(StateAgreementVO::getStateHouseholdId));
|
List<StateAgreementVO> stateAgreementVOS = new ArrayList<>();
|
|
for (String householdId : householdMap.keySet()) {
|
List<StateAgreementVO> innerList = householdMap.get(householdId);
|
|
innerList.forEach(innerData -> {
|
//测试要求:当合同总价为空时,模拟合同金额、合同金额需要给前端返空,不要返回个0
|
if (Objects.nonNull(innerData.getAgreementMoney()) && innerData.getAgreementMoney().equals(new BigDecimal(0))) {
|
innerData.setAgreementMoney(null);
|
}
|
if (Objects.nonNull(innerData.getAgreementMoney()) && Objects.equals(innerData.getVirtualMoney(), new BigDecimal(0))) {
|
innerData.setVirtualMoney(null);
|
}
|
if (map.containsKey(innerData.getStateHouseholdId())) {
|
List<StateHouseholdOwner> innerOwner = map.get(innerData.getStateHouseholdId());
|
innerData.setOwnerType(innerOwner.get(0).getOwnerType());
|
}
|
});
|
|
stateAgreementVOS.addAll(innerList);
|
}
|
|
//存储agreement信息
|
List<String> householdIdList = stateAgreementVOS.stream().map(StateAgreementVO::getStateHouseholdId).collect(Collectors.toList());
|
if (CollectionUtils.isEmpty(householdIdList)) {
|
return stateAgreementVOPageInfo;
|
}
|
LambdaQueryWrapper<StateAgreement> queryWrapper = new LambdaQueryWrapper<>();
|
queryWrapper.in(StateAgreement::getStateHouseholdId, householdIdList);
|
List<StateAgreement> stateAgreements = this.list(queryWrapper);
|
|
if (!CollectionUtils.isEmpty(stateAgreements)) {
|
Map<String, List<StateAgreement>> agreementMap = stateAgreements.stream().collect(Collectors.groupingBy(StateAgreement::getStateHouseholdId));
|
stateAgreementVOS.forEach(data -> {
|
if (agreementMap.containsKey(data.getStateHouseholdId())) {
|
Map<Integer, StateAgreement> fileTypeMap = agreementMap.get(data.getStateHouseholdId()).stream()
|
.collect(Collectors.toMap(StateAgreement::getAgreementFileType, Function.identity()));
|
StateAgreement virtualAgreement = fileTypeMap.get(AgreementTypeEnum.VIRTUAL_STATE_AGREEMENT.getValue());
|
data.setVirtualMoney(Objects.nonNull(virtualAgreement) && Objects.nonNull(virtualAgreement.getMoney())
|
? BigDecimal.valueOf(virtualAgreement.getMoney())
|
: null);
|
|
data.setVirtualAgreementId(Objects.nonNull(virtualAgreement) ? virtualAgreement.getId() : null);
|
//这里没定枚举 写死
|
data.setIsUploadFile(Objects.nonNull(virtualAgreement) && Objects.nonNull(virtualAgreement.getAppendFileName())
|
&& Objects.nonNull(virtualAgreement.getAgreementNumber()) ? 1 : 0);
|
|
StateAgreement stateAgreement = fileTypeMap.get(AgreementTypeEnum.STATE_AGREEMENT.getValue());
|
data.setAgreementMoney(Objects.nonNull(stateAgreement) && Objects.nonNull(stateAgreement.getMoney())
|
? BigDecimal.valueOf(stateAgreement.getMoney())
|
: null);
|
data.setStateAgreementId(Objects.nonNull(stateAgreement) ? stateAgreement.getId() : null);
|
data.setIsUploadStateFile(Objects.nonNull(stateAgreement) && Objects.nonNull(stateAgreement.getAppendFileName())
|
&& Objects.nonNull(stateAgreement.getAgreementNumber()) ? 1 : 0);
|
|
StateAgreement checkAgreement = fileTypeMap.get(AgreementTypeEnum.CHECK_STATE_AGREEMENT.getValue());
|
data.setCheckFileName(Objects.nonNull(checkAgreement) && Objects.nonNull(checkAgreement.getAppendFileName())
|
&& Objects.nonNull(checkAgreement.getAgreementNumber()) ? checkAgreement.getAppendFileName() : "");
|
}
|
});
|
}
|
stateAgreementVOPageInfo.setList(stateAgreementVOS);
|
return stateAgreementVOPageInfo;
|
}
|
|
/**
|
* 协议详情
|
* @param householdId
|
* @return
|
*/
|
@Override
|
public List<AgreementDetailVO> listAgreementDetailByHouseId(String householdId) {
|
|
StateHousehold stateHousehold = stateHouseholdService.getBaseMapper().selectById(householdId);
|
if (Objects.isNull(stateHousehold)) {
|
return new ArrayList<>();
|
}
|
|
LambdaQueryWrapper<StateHouseholdOwner> ownerWrapper = new LambdaQueryWrapper<>();
|
ownerWrapper.eq(StateHouseholdOwner::getStateHouseholdId, householdId);
|
List<StateHouseholdOwner> ownerList = stateHouseholdOwnerService.getBaseMapper().selectList(ownerWrapper);
|
|
List<String> uniqueOwnerNames = ownerList.stream()
|
.map(StateHouseholdOwner::getOwnerName)
|
.distinct()
|
.collect(Collectors.toList());
|
|
String ownerName = String.join("|", uniqueOwnerNames);
|
|
LambdaQueryWrapper<StateAgreement> agreementWrapper = new LambdaQueryWrapper<>();
|
agreementWrapper.eq(StateAgreement::getStateHouseholdId, householdId);
|
|
List<StateAgreement> stateAgreementList = this.getBaseMapper().selectList(agreementWrapper);
|
List<AgreementDetailVO> result = new ArrayList<>();
|
|
if (CollectionUtils.isEmpty(stateAgreementList)) {
|
AgreementDetailVO agreementDetailVO = new AgreementDetailVO();
|
agreementDetailVO.setCompensationType(stateHousehold.getCompensationType());
|
agreementDetailVO.setCompensationTypeStr(CompensationCategoryEnum.getDescription(stateHousehold.getCompensationType()));
|
agreementDetailVO.setOwnerName(ownerName);
|
result.add(agreementDetailVO);
|
} else {
|
stateAgreementList.forEach(data -> {
|
AgreementDetailVO innerData = new AgreementDetailVO();
|
BeanUtil.copyProperties(data, innerData);
|
innerData.setCompensationType(stateHousehold.getCompensationType());
|
innerData.setCompensationTypeStr(CompensationCategoryEnum.getDescription(stateHousehold.getCompensationType()));
|
innerData.setOwnerName(ownerName);
|
result.add(innerData);
|
});
|
}
|
|
//映射名字
|
List<SysDictData> data = dictTypeService.selectDictDataByType("file_type");
|
|
Map<Integer, String> otherFileType = data.stream()
|
.collect(Collectors.toMap(
|
sysDictData -> Integer.parseInt(sysDictData.getDictValue()), // 键转换为 Integer
|
SysDictData::getDictLabel // 值保持为 String
|
));
|
|
Map<Integer, String> agreementMap = Stream.of(AgreementTypeEnum.values())
|
.collect(Collectors.toMap(AgreementTypeEnum::getValue, AgreementTypeEnum::getText));
|
|
agreementMap.putAll(otherFileType);
|
|
result.forEach(agreement -> {
|
String fileName = agreementMap.get(agreement.getAgreementFileType());
|
if (fileName != null) {
|
agreement.setAgreementFileName(fileName);
|
}
|
});
|
|
|
return result.stream()
|
.sorted((a1, a2) -> {
|
if (a1.getSignAt() == null && a2.getSignAt() == null) {
|
return 0; // 两者都是 null,视为相等
|
} else if (a1.getSignAt() == null) {
|
return 1; // a1 是 null,排在最后
|
} else if (a2.getSignAt() == null) {
|
return -1; // a2 是 null,排在最后
|
} else {
|
return a2.getSignAt().compareTo(a1.getSignAt()); // 正常比较,降序
|
}
|
})
|
.collect(Collectors.toList());
|
}
|
|
@Override
|
public Map<String, Object> getWordData(String stateHouseholdId, String stateAgreementId) {
|
LambdaQueryWrapper<StateHouseholdOwner> ownerWrapper = new LambdaQueryWrapper<>();
|
ownerWrapper.eq(StateHouseholdOwner::getStateHouseholdId, stateHouseholdId);
|
List<StateHouseholdOwner> ownerList = stateHouseholdOwnerService.getBaseMapper().selectList(ownerWrapper);
|
|
String ownerName = ownerList.stream()
|
.map(StateHouseholdOwner::getOwnerName)
|
.filter(Objects::nonNull) // 过滤掉 null 值
|
.filter(StringUtils::isNotBlank) // 过滤空字符串
|
.distinct()
|
.collect(Collectors.collectingAndThen(
|
Collectors.toList(),
|
list -> {
|
if (list.size() == 1) {
|
return list.get(0);
|
} else {
|
return String.join(",", list);
|
}
|
}));
|
|
String ownerPhone = ownerList.stream()
|
.map(StateHouseholdOwner::getPhoneNumber)
|
.filter(Objects::nonNull) // 过滤掉 null 值
|
.distinct()
|
.collect(Collectors.collectingAndThen(
|
Collectors.toList(),
|
list -> {
|
if (list.size() == 1) {
|
return list.get(0);
|
} else {
|
return String.join(",", list);
|
}
|
}));
|
|
|
String concatenatedIdForPerson = ownerList.stream()
|
.filter(e -> Objects.nonNull(e.getPersonIdCard()))
|
.map(owner -> String.valueOf(owner.getPersonIdCard())) // 确保返回的是字符串
|
// 过滤掉 null 和空字符串
|
.distinct()
|
.collect(Collectors.collectingAndThen(
|
Collectors.toList(),
|
(List<String> list) -> { // 明确指定 list 是 List<String>
|
if (list.size() == 1) {
|
return list.get(0);
|
} else {
|
return String.join(",", list);
|
}
|
}));
|
String concatenatedIdForCompanySocialCode = ownerList.stream()
|
.filter(e -> org.apache.commons.lang3.StringUtils.isNotBlank(e.getCompanySocialCode()))
|
.map(owner -> String.valueOf(owner.getCompanySocialCode())) // 确保返回的是字符串// 过滤掉 null 和空字符串
|
.distinct()
|
.collect(Collectors.collectingAndThen(
|
Collectors.toList(),
|
(List<String> list) -> { // 明确指定 list 是 List<String>
|
if (list.size() == 1) {
|
return list.get(0);
|
} else {
|
return String.join(",", list);
|
}
|
}));
|
|
String concatenatedIds = Stream.of(concatenatedIdForPerson, concatenatedIdForCompanySocialCode)
|
.filter(org.apache.commons.lang3.StringUtils::isNotBlank) // 过滤掉空字符串
|
.collect(Collectors.joining(",")); // 用逗号连接剩余的非空字符串
|
|
|
StateHousehold byId = stateHouseholdService.getById(stateHouseholdId);
|
LambdaQueryWrapper<StateAgreement> agreementWrapper = new LambdaQueryWrapper<>();
|
agreementWrapper.eq(StateAgreement::getId, stateAgreementId);
|
agreementWrapper.isNotNull(StateAgreement::getAgreementNumber);
|
StateAgreement one = this.getOne(agreementWrapper);
|
|
Map<String, Object> dataMap = new HashMap<>();
|
if (StringUtils.isNotBlank(ownerName)) {
|
dataMap.put("ownerName", ownerName);
|
} else {
|
dataMap.put("ownerName", "");
|
}
|
|
if (StringUtils.isNotBlank(ownerPhone)) {
|
dataMap.put("ownerPhone", ownerPhone);
|
} else {
|
dataMap.put("ownerPhone", "");
|
}
|
|
if (byId != null && StringUtils.isNotBlank(byId.getHouseholdLocation())) {
|
dataMap.put("householdLocation", byId.getHouseholdLocation());
|
} else {
|
dataMap.put("householdLocation", "");
|
}
|
|
if (StringUtils.isNotBlank(concatenatedIds)) {
|
dataMap.put("concatenatedIds", concatenatedIds);
|
} else {
|
dataMap.put("concatenatedIds", "");
|
}
|
|
if (one != null && one.getMoney() != null) {
|
dataMap.put("amount", one.getMoney());
|
} else {
|
dataMap.put("amount", "");
|
}
|
|
return dataMap;
|
}
|
|
/**
|
* 模拟加征收
|
* @param houseId
|
* @return
|
*/
|
@Override
|
@Transactional
|
public Boolean updateStateAgreement(List<String> houseId) {
|
LambdaQueryWrapper<StateAgreement> stateAgreementLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
stateAgreementLambdaQueryWrapper.in(StateAgreement::getStateHouseholdId, houseId);
|
List<StateAgreement> stateAgreement = this.list(stateAgreementLambdaQueryWrapper);
|
if (org.springframework.util.CollectionUtils.isEmpty(stateAgreement)) {
|
throw new GlobalException("未查询到相关协议");
|
}
|
List<StateAgreement> agreementList = new ArrayList<>();
|
Map<String, List<StateAgreement>> stringListMap = stateAgreement.stream().collect(Collectors.groupingBy(StateAgreement::getStateHouseholdId));
|
for (String currentHouseId : houseId) {
|
List<StateAgreement> stateAgreementList = stringListMap.get(currentHouseId);
|
if (org.springframework.util.CollectionUtils.isEmpty(stateAgreementList)) {
|
continue;
|
}
|
Optional<StateAgreement> agreement = stateAgreementList.stream()
|
.filter(data -> Objects.equals(data.getAgreementFileType(), AgreementTypeEnum.STATE_AGREEMENT.getValue())).findAny();
|
if (agreement.isPresent() && Objects.nonNull(agreement.get().getAgreementNumber())) {
|
continue;
|
}
|
Optional<StateAgreement> virtual = stateAgreementList.stream()
|
.filter(data -> Objects.equals(data.getAgreementFileType(), AgreementTypeEnum.VIRTUAL_STATE_AGREEMENT.getValue())).findAny();
|
if (virtual.isPresent() && agreement.isPresent()) {
|
StateAgreement virtualAgreement = virtual.get();
|
StateAgreement dbAgreement = agreement.get();
|
|
dbAgreement.setMoney(virtualAgreement.getMoney());
|
dbAgreement.setEffectiveDate(virtualAgreement.getEffectiveDate());
|
dbAgreement.setAppendFileName("(转)" + virtualAgreement.getAppendFileName());
|
dbAgreement.setAgreementNumber(virtualAgreement.getAgreementNumber());
|
dbAgreement.setFileUrl(virtualAgreement.getFileUrl());
|
Date currentDate = new Date();
|
|
// 定义日期格式
|
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
|
// 将当前日期格式化为字符串
|
String formattedDateString = dateFormat.format(currentDate);
|
|
// 将字符串转换回 Date 对象
|
try {
|
Date formattedDate = dateFormat.parse(formattedDateString);
|
// 假设 dbAgreement 是你的对象,并且 signAt 是 Date 类型
|
dbAgreement.setSignAt(formattedDate);
|
} catch (ParseException e) {
|
e.printStackTrace();
|
}
|
agreementList.add(dbAgreement);
|
}
|
}
|
if (CollectionUtils.isEmpty(agreementList)) {
|
throw new GlobalException("这批房产已经存在正式协议");
|
}
|
return this.saveOrUpdateBatch(agreementList);
|
}
|
|
}
|