| | |
| | | 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.*; |
| | | import com.zzg.common.core.domain.entity.state.StateAgreement; |
| | | import com.zzg.common.core.domain.entity.state.StateAsset; |
| | | import com.zzg.common.core.domain.entity.state.StateHousehold; |
| | | import com.zzg.common.core.domain.entity.state.StateProject; |
| | | import com.zzg.common.core.domain.entity.state.StateSettlement; |
| | | import com.zzg.common.core.domain.entity.system.SysDept; |
| | | import com.zzg.common.enums.*; |
| | | import com.zzg.common.enums.AgreementTypeEnum; |
| | | import com.zzg.common.enums.CompensationCategoryEnum; |
| | | import com.zzg.common.enums.DeleteFlagEnum; |
| | | import com.zzg.common.enums.ProcessCategoryEnum; |
| | | import com.zzg.common.enums.StateProjectStatusEnum; |
| | | import com.zzg.common.enums.SubmitStatusEnum; |
| | | import com.zzg.common.exception.GlobalException; |
| | | import com.zzg.common.utils.PageUtils; |
| | | import com.zzg.common.utils.SecurityUtils; |
| | | import com.zzg.common.utils.StringUtils; |
| | | import com.zzg.system.domain.bo.AssetDetailBO; |
| | | import com.zzg.system.domain.bo.FileBO; |
| | | import com.zzg.system.domain.bo.ProcessStartBO; |
| | | import com.zzg.system.domain.bo.StateAssetBO; |
| | | import com.zzg.system.domain.vo.StateAssetDetailVO; |
| | | import com.zzg.system.mapper.state.StateAssetMapper; |
| | | import com.zzg.system.service.state.*; |
| | | import com.zzg.system.service.state.StateAgreementService; |
| | | import com.zzg.system.service.state.StateAssetService; |
| | | import com.zzg.system.service.state.StateHouseholdService; |
| | | import com.zzg.system.service.state.StateProcessTemplateService; |
| | | import com.zzg.system.service.state.StateProjectService; |
| | | import com.zzg.system.service.state.StateSettlementService; |
| | | import com.zzg.system.service.system.ISysDeptService; |
| | | import lombok.RequiredArgsConstructor; |
| | | import org.springframework.context.annotation.Lazy; |
| | |
| | | import javax.annotation.Resource; |
| | | import java.math.BigDecimal; |
| | | import java.math.RoundingMode; |
| | | import java.util.*; |
| | | import java.util.ArrayList; |
| | | import java.util.Collections; |
| | | import java.util.HashMap; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Objects; |
| | | import java.util.function.Function; |
| | | import java.util.stream.Collectors; |
| | | |
| | | @Service |
| | | @RequiredArgsConstructor |
| | | |
| | | public class StateAssetServiceImpl |
| | | extends ServiceImpl<StateAssetMapper, StateAsset> |
| | | implements StateAssetService { |
| | | public class StateAssetServiceImpl extends ServiceImpl<StateAssetMapper, StateAsset> implements StateAssetService { |
| | | |
| | | |
| | | private final StateAgreementService agreementService; |
| | | |
| | | private final StateAssetMapper assetMapper; |
| | | |
| | | private final StateSettlementService settlementService; |
| | | |
| | | @Lazy |
| | | @Resource |
| | | private final StateProjectService stateProjectService; |
| | | |
| | | @Lazy |
| | | @Resource |
| | | private final StateHouseholdService stateHouseholdService; |
| | | |
| | | @Lazy |
| | | @Resource |
| | | private final StateProcessTemplateService stateProcessTemplateService; |
| | | |
| | | @Lazy |
| | | @Resource |
| | | private final StateHouseholdOwnerService stateHouseholdOwnerService; |
| | | |
| | | @Lazy |
| | | @Resource |
| | | private final ISysDeptService deptService; |
| | | |
| | | /** |
| | | * 项目资金点击上方符号查询 |
| | | * @param assetDetailBO |
| | | * @return |
| | | */ |
| | | @Override |
| | | public PageInfo<StateAssetDetailVO> listAssetDetail(AssetDetailBO assetDetailBO) { |
| | | |
| | | |
| | | //查询项目信息 |
| | | StateProject stateProject = stateProjectService.getById(assetDetailBO.getProjectId()); |
| | | |
| | | Integer currentStatus = stateProject.getStatus(); |
| | | |
| | | PageUtils.startPage(); |
| | | //查询项目预算资金详情 |
| | | List<StateAssetDetailVO> assetDetailVOList = assetMapper.listAssetDetail(assetDetailBO, currentStatus); |
| | | if (CollectionUtils.isEmpty(assetDetailVOList)) { |
| | | return new PageInfo<>(); |
| | | } |
| | | PageInfo<StateAssetDetailVO> stateAssetDetailVOPageInfo = new PageInfo<>(assetDetailVOList); |
| | | // //组装名字 |
| | | // List<String> houseIdList = assetDetailVOList.stream().map(StateAssetDetailVO::getHouseId).collect(Collectors.toList()); |
| | | // LambdaQueryWrapper<StateHouseholdOwner> householdOwnerLambdaQueryWrapper = new LambdaQueryWrapper<>(); |
| | | // householdOwnerLambdaQueryWrapper.in(StateHouseholdOwner::getStateHouseholdId, houseIdList); |
| | | // |
| | | // if (!StringUtils.isEmpty(assetDetailBO.getOwnerName())) { |
| | | // householdOwnerLambdaQueryWrapper.like(StateHouseholdOwner::getOwnerName, assetDetailBO.getOwnerName()); |
| | | // } |
| | | // List<StateHouseholdOwner> stateHouseholdOwners = stateHouseholdOwnerService.list(householdOwnerLambdaQueryWrapper); |
| | | |
| | | // Map<String, List<StateHouseholdOwner>> ownerMap = stateHouseholdOwners.stream().collect(Collectors.groupingBy(StateHouseholdOwner::getStateHouseholdId)); |
| | | // if (!StringUtils.isEmpty(assetDetailBO.getOwnerName())) { |
| | | // assetDetailVOList = assetDetailVOList.stream().filter(data -> ownerMap.containsKey(data.getHouseId())).collect(Collectors.toList()); |
| | | // } |
| | | stateAssetDetailVOPageInfo.setList(assetDetailVOList); |
| | | Map<String, List<StateAssetDetailVO>> listMap = stateAssetDetailVOPageInfo.getList().stream().collect(Collectors.groupingBy(StateAssetDetailVO::getHouseId)); |
| | | |
| | |
| | | for (String houseId : listMap.keySet()) { |
| | | List<StateAssetDetailVO> stateAssetDetailVOList = listMap.get(houseId); |
| | | StateAssetDetailVO assetDetailVO = stateAssetDetailVOList.get(0); |
| | | // //组装名字 |
| | | // if (ownerMap.containsKey(houseId)) { |
| | | // String fullName = ownerMap.get(houseId).stream().map(StateHouseholdOwner::getOwnerName).collect(Collectors.joining("|")); |
| | | // assetDetailVO.setOwnerName(fullName); |
| | | // assetDetailVO.setPersonNum(ownerMap.get(houseId).size()); |
| | | // } |
| | | result.add(assetDetailVO); |
| | | } |
| | | |
| | | //国有项目协议查询条件 |
| | | LambdaQueryWrapper<StateAgreement> stateAgreementLambdaQueryWrapper = new LambdaQueryWrapper<>(); |
| | | stateAgreementLambdaQueryWrapper.in(StateAgreement::getStateHouseholdId, result.stream().map(StateAssetDetailVO::getHouseId).collect(Collectors.toList())); |
| | | //根据项目状态查询协议 这一个项目状态只有一种 随便取出来即可 |
| | |
| | | } |
| | | } |
| | | stateAgreementLambdaQueryWrapper.isNotNull(StateAgreement::getAgreementNumber); |
| | | //查询协议列表 |
| | | List<StateAgreement> stateAgreements = agreementService.list(stateAgreementLambdaQueryWrapper); |
| | | if (CollectionUtils.isEmpty(stateAgreements)) { |
| | | stateAssetDetailVOPageInfo.setList(result); |
| | |
| | | LambdaQueryWrapper<StateSettlement> stateSettlementLambdaQueryWrapper = new LambdaQueryWrapper<>(); |
| | | stateSettlementLambdaQueryWrapper.in(StateSettlement::getStateHouseholdId, |
| | | result.stream().map(StateAssetDetailVO::getHouseId).collect(Collectors.toList())); |
| | | //查询已结算金额 |
| | | List<StateSettlement> stateSettlementList = settlementService.list(stateSettlementLambdaQueryWrapper); |
| | | |
| | | |
| | | Map<String, StateSettlement> stateSettlementMap = stateSettlementList.stream() |
| | | .collect(Collectors.toMap(StateSettlement::getStateHouseholdId, Function.identity())); |
| | | //赋值结算金额 |
| | | result.forEach(data -> { |
| | | |
| | | StateSettlement stateSettlement = stateSettlementMap.get(data.getHouseId()); |
| | | if (Objects.isNull(stateSettlement)) { |
| | | return; |
| | | } |
| | | //TODO 置换后金额含义 |
| | | // 结算金额 |
| | | Double dbSettleMoney = Objects.nonNull(stateSettlement.getSettlementMoney()) ? stateSettlement.getSettlementMoney() : 0; |
| | | |
| | | //置换后金额 |
| | | Double dbExchangeMoney = Objects.nonNull(stateSettlement.getExchangeMoney()) ? stateSettlement.getExchangeMoney() : 0; |
| | | |
| | | BigDecimal settleMoney = BigDecimal.valueOf(dbSettleMoney + dbExchangeMoney).setScale(4, RoundingMode.HALF_UP); |
| | | |
| | | data.setSettleMoney(settleMoney); |
| | | Number agreementMoney = Objects.nonNull(data.getAgreementMoney()) ? data.getAgreementMoney() : 0; |
| | | settleMoney = Objects.nonNull(data.getSettleMoney()) ? data.getSettleMoney() : BigDecimal.ZERO; |
| | | data.setDiffMoney(BigDecimal.valueOf(agreementMoney.doubleValue()).subtract(settleMoney)); |
| | | data.setPaidOffTime(Objects.nonNull(stateSettlement.getPaidTime()) ? stateSettlement.getPaidTime() : null); |
| | | |
| | | }); |
| | | |
| | | stateAssetDetailVOPageInfo.setList(result); |
| | | return stateAssetDetailVOPageInfo; |
| | | } |
| | | |
| | | /** |
| | | * 项目资金 上方统计数据 |
| | | * @param projectId |
| | | * @return |
| | | */ |
| | | @Override |
| | | public JSONObject sumAsset(String projectId) { |
| | | JSONObject jsonObject = new JSONObject(); |
| | | |
| | | //查询项目信息 |
| | | StateProject stateProject = stateProjectService.getProjectById(projectId); |
| | | |
| | | // TODO 未将逻辑删除的字段过滤 |
| | | LambdaQueryWrapper<StateAsset> stateAssetQueryWrapper = new LambdaQueryWrapper<>(); |
| | | stateAssetQueryWrapper.eq(StateAsset::getStateProjectId, projectId); |
| | | //查询项目预算资金 |
| | | List<StateAsset> stateAssets = this.list(stateAssetQueryWrapper); |
| | | |
| | | //预算金额 |
| | |
| | | .sum(); |
| | | String roundedBudgetAmount = BigDecimal.valueOf(budgetAmount) |
| | | .setScale(4, RoundingMode.HALF_UP).toPlainString(); |
| | | |
| | | jsonObject.put("budgetAmount", roundedBudgetAmount); |
| | | |
| | | //合同金额 |
| | | LambdaQueryWrapper<StateHousehold> stateHouseholdLambdaQueryWrapper = new LambdaQueryWrapper<>(); |
| | | stateHouseholdLambdaQueryWrapper.eq(StateHousehold::getStateProjectId, projectId); |
| | | // stateHouseholdLambdaQueryWrapper.eq(StateHousehold::getAgreementStatus,SubmitStatusEnum.ACCEPT.getValue()); |
| | | stateHouseholdLambdaQueryWrapper.eq(StateHousehold::getDelFlag, DeleteFlagEnum.NOT_DELETED.getKey()); |
| | | stateHouseholdLambdaQueryWrapper.isNotNull(StateHousehold::getAgreementStatus); |
| | | //根据项目id查询房产数据 |
| | | List<StateHousehold> stateHouseholds = stateHouseholdService.list(stateHouseholdLambdaQueryWrapper); |
| | | |
| | | if (CollectionUtils.isEmpty(stateHouseholds)) { |
| | |
| | | } |
| | | } |
| | | |
| | | |
| | | stateAgreementLambdaQueryWrapper.isNotNull(StateAgreement::getAgreementNumber); |
| | | stateAgreementLambdaQueryWrapper.in(StateAgreement::getStateHouseholdId, houseIds); |
| | | //查询协议信息 |
| | | List<StateAgreement> stateAgreements = agreementService.list(stateAgreementLambdaQueryWrapper); |
| | | if (CollectionUtils.isNotEmpty(stateAgreements)) { |
| | | |
| | | Integer projectStatus = stateProject.getStatus(); |
| | | if (Objects.equals(projectStatus, StateProjectStatusEnum.SIMULATE.getKey())) { |
| | | stateAgreementLambdaQueryWrapper.eq(StateAgreement::getAgreementFileType, AgreementTypeEnum.VIRTUAL_STATE_AGREEMENT.getValue()); |
| | |
| | | stateAgreementLambdaQueryWrapper.eq(StateAgreement::getAgreementFileType, AgreementTypeEnum.STATE_AGREEMENT.getValue()); |
| | | stateAgreements = stateAgreements.stream().filter(e -> e.getAgreementFileType().equals(AgreementTypeEnum.STATE_AGREEMENT.getValue())).collect(Collectors.toList()); |
| | | } |
| | | |
| | | // 协议金额 |
| | | double agreementMoney = stateAgreements.stream() |
| | | .filter(Objects::nonNull) |
| | | .filter(data -> Objects.nonNull(data.getMoney())).mapToDouble(StateAgreement::getMoney).sum(); |
| | |
| | | |
| | | jsonObject.put("agreementMoney", agreementMoneyBig); |
| | | } |
| | | |
| | | //将该项目下面的房产数据类型为产权置换的房产id筛选出来 |
| | | List<String> componseTypeHouseIds = stateHouseholds.stream().filter(data -> ObjectUtil.isNotEmpty(data.getCompensationType()) |
| | | && data.getCompensationType().equals(CompensationCategoryEnum.PROPERTY_SWAP_2.getCode())).map(StateHousehold::getId).collect(Collectors.toList()); |
| | | |
| | | //产权置换下的合金额 |
| | | BigDecimal roundedAgreementMoney = BigDecimal.ZERO; |
| | | |
| | | |
| | | if (ObjectUtil.isNotEmpty(componseTypeHouseIds)) { |
| | | componseTypeAgreementLambdaQueryWrapper.isNotNull(StateAgreement::getAgreementNumber); |
| | | componseTypeAgreementLambdaQueryWrapper.in(StateAgreement::getStateHouseholdId, componseTypeHouseIds); |
| | | //根据房产id查询协议列表 |
| | | List<StateAgreement> stateAgreementsInDb = agreementService.list(componseTypeAgreementLambdaQueryWrapper); |
| | | if (CollectionUtils.isNotEmpty(stateAgreementsInDb)) { |
| | | double agreementMoney = stateAgreementsInDb.stream() |
| | |
| | | stateSettlementLambdaQueryWrapper.in(StateSettlement::getStateHouseholdId, houseIds); |
| | | stateSettlementLambdaQueryWrapper.isNotNull(StateSettlement::getAuditStatus); |
| | | List<StateSettlement> stateSettlementList = settlementService.list(stateSettlementLambdaQueryWrapper); |
| | | |
| | | jsonObject.put("settlementMoney", 0); |
| | | if (CollectionUtils.isNotEmpty(stateSettlementList)) { |
| | | |
| | | |
| | | Double settlementMoney = stateSettlementList.stream() |
| | | .mapToDouble(stateSettlement -> { |
| | | Double settlementMoneyValue = stateSettlement.getSettlementMoney(); |
| | |
| | | // 四舍五入保留两位小数 |
| | | String roundedSettlementMoney = BigDecimal.valueOf(settlementMoney) |
| | | .setScale(4, RoundingMode.HALF_UP).toPlainString(); |
| | | |
| | | |
| | | jsonObject.put("settlementMoney", roundedSettlementMoney); |
| | | } |
| | | jsonObject.put("status", stateProject.getStatus()); |
| | | |
| | | return jsonObject; |
| | | } |
| | | |
| | | /** |
| | | * 新增和修改 项目资金 |
| | | * @param asset |
| | | * @return |
| | | */ |
| | | @Transactional |
| | | @Override |
| | | public boolean saveAsset(StateAssetBO asset) { |
| | | String deptId = SecurityUtils.getLoginUser().getUser().getDept().getDeptId(); |
| | | |
| | | //根据当前登录人部门id查询部门信息 |
| | | Map<String, SysDept> stringSysDeptMap = deptService.selectMapDeptById(Collections.singletonList(deptId)); |
| | | |
| | | asset.setSubmittedBy(stringSysDeptMap.values().stream().map(SysDept::getDeptName).collect(Collectors.joining(","))); |
| | | |
| | | if (CollectionUtils.isNotEmpty(asset.getFileBOList())) { |
| | |
| | | variable.put("projectId", asset.getStateProjectId()); |
| | | variable.put("street", asset.getStreet()); |
| | | processStartBO.setVariable(variable); |
| | | //启动工作流 |
| | | stateProcessTemplateService.start(processStartBO); |
| | | return result; |
| | | } |