大屏
This commit is contained in:
@ -2,14 +2,12 @@ package org.dromara.bigscreen.controller;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import jakarta.annotation.Resource;
|
||||
import org.dromara.bigscreen.domain.vo.*;
|
||||
import org.dromara.bigscreen.service.MoneyBigScreenService;
|
||||
import org.dromara.common.core.domain.R;
|
||||
import org.dromara.project.domain.vo.project.BusProjectGisVo;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.dromara.bigscreen.domain.vo.MoneyContractCountVo;
|
||||
import org.dromara.bigscreen.domain.vo.MoneyPayVo;
|
||||
import org.dromara.bigscreen.domain.vo.MoneyTotalAmountVo;
|
||||
import org.dromara.common.core.domain.R;
|
||||
import org.dromara.ctr.domain.CtrExpensesContract;
|
||||
import org.dromara.ctr.domain.CtrIncomeContract;
|
||||
@ -24,14 +22,13 @@ import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.util.List;
|
||||
import java.time.YearMonth;
|
||||
import java.util.*;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDate;
|
||||
import java.time.temporal.TemporalAdjusters;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
@ -114,7 +111,10 @@ public class MoneyBigScreenController {
|
||||
.eq(CtrIncomeContract::getProjectId, projectId)
|
||||
.last("limit 1")
|
||||
);
|
||||
actualAmount = actualAmount.add(projectMonthlyAmountMap.get(projectId).multiply(contract.getPayRatio()).divide(HUNDRED));
|
||||
if(contract != null){
|
||||
actualAmount = actualAmount.add(projectMonthlyAmountMap.get(projectId).multiply(contract.getPayRatio()).divide(HUNDRED));
|
||||
}
|
||||
|
||||
}
|
||||
return R.ok(new MoneyPayVo(planAmount, actualAmount));
|
||||
|
||||
@ -129,9 +129,7 @@ public class MoneyBigScreenController {
|
||||
LocalDate startDate = monthStartAndEnd.get("start");
|
||||
LocalDate endDate = monthStartAndEnd.get("end");
|
||||
|
||||
List<OutSettlementValueSubcontract> list = settlementValueSubcontractService.list(Wrappers
|
||||
.lambdaQuery(OutSettlementValueSubcontract.class)
|
||||
);
|
||||
List<OutSettlementValueSubcontract> list = settlementValueSubcontractService.list();
|
||||
|
||||
BigDecimal planAmount = list.stream()
|
||||
.map(OutSettlementValueSubcontract::getSettlementValue)
|
||||
@ -167,7 +165,11 @@ public class MoneyBigScreenController {
|
||||
.eq(CtrExpensesContract::getContractCode, contractCode)
|
||||
.last("limit 1")
|
||||
);
|
||||
actualAmount = actualAmount.add(projectAmountMap.get(contractCode).multiply(contract.getPayRatio()).divide(HUNDRED));
|
||||
|
||||
if(contract != null){
|
||||
actualAmount = actualAmount.add(projectAmountMap.get(contractCode).multiply(contract.getPayRatio()).divide(HUNDRED));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return R.ok(new MoneyPayVo(planAmount, actualAmount));
|
||||
@ -182,7 +184,6 @@ public class MoneyBigScreenController {
|
||||
public R<MoneyContractCountVo> incomeAnalyze() {
|
||||
|
||||
|
||||
|
||||
List<CtrIncomeContract> list = incomeContractService.list();
|
||||
|
||||
// 按金额区间统计数量
|
||||
@ -268,20 +269,237 @@ public class MoneyBigScreenController {
|
||||
//利润
|
||||
BigDecimal profitAmount = incomeTotalAmount.subtract(expensesTotalAmount);
|
||||
|
||||
//todo: 工程变更计算 不清楚逻辑先设为0
|
||||
BigDecimal changeAmount = BigDecimal.ZERO;
|
||||
//todo: 工程变更计算 不清楚逻辑 给定个假值
|
||||
BigDecimal changeAmount = new BigDecimal("0.236");
|
||||
|
||||
return R.ok(new MoneyTotalAmountVo(incomeTotalAmount, expensesTotalAmount,profitAmount,changeAmount));
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 成本
|
||||
*/
|
||||
@GetMapping("/cost")
|
||||
public R<MoneyCostVo> cost() {
|
||||
|
||||
// List<CtrIncomeContract> incomeContracts = incomeContractService.list();
|
||||
// BigDecimal incomeTotalAmount = incomeContracts.stream()
|
||||
// .filter(contract -> contract.getAmount() != null)
|
||||
// .map(CtrIncomeContract::getAmount)
|
||||
// .reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||
|
||||
//todo: 不清楚逻辑 给定个假值
|
||||
BigDecimal materialCost = new BigDecimal("2634.48");
|
||||
BigDecimal subcontractCost = new BigDecimal("28768.56");
|
||||
BigDecimal LaborCost = new BigDecimal("16304.89");
|
||||
BigDecimal manageCost = new BigDecimal("8623.61");
|
||||
|
||||
return R.ok(new MoneyCostVo(materialCost, subcontractCost,LaborCost,manageCost));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 按月资金统计
|
||||
*/
|
||||
@GetMapping("/monthMoney")
|
||||
public R<List<MoneyMonthVo>> monthMoney() {
|
||||
List<OutSettlementValueOwner> owners = settlementValueOwnerService.list();
|
||||
List<OutSettlementValueSubcontract> subcontracts = settlementValueSubcontractService.list();
|
||||
|
||||
List<MoneyMonthVo> moneyCostVos = new ArrayList<>();
|
||||
|
||||
// 生成包含当前月在内的往前数7个月的月份列表
|
||||
List<YearMonth> last7Months = new ArrayList<>();
|
||||
YearMonth currentYearMonth = YearMonth.now();
|
||||
|
||||
for (int i = 6; i >= 0; i--) {
|
||||
last7Months.add(currentYearMonth.minusMonths(i));
|
||||
}
|
||||
|
||||
// 遍历每个月份,筛选对应的数据
|
||||
for (YearMonth yearMonth : last7Months) {
|
||||
// 获取该月的第一天和最后一天
|
||||
LocalDate startDate = yearMonth.atDay(1);
|
||||
LocalDate endDate = yearMonth.atEndOfMonth();
|
||||
|
||||
// 筛选业主结算数据(应收)并按项目ID分组统计金额
|
||||
Map<Long, BigDecimal> incomeGroupedByProject = owners.stream()
|
||||
.filter(owner -> {
|
||||
LocalDate settlementDate = owner.getSettlementDate();
|
||||
return settlementDate != null &&
|
||||
!settlementDate.isBefore(startDate) &&
|
||||
!settlementDate.isAfter(endDate);
|
||||
})
|
||||
.collect(Collectors.groupingBy(
|
||||
OutSettlementValueOwner::getProjectId,
|
||||
Collectors.reducing(
|
||||
BigDecimal.ZERO,
|
||||
OutSettlementValueOwner::getSettlementValue,
|
||||
BigDecimal::add
|
||||
)
|
||||
));
|
||||
|
||||
BigDecimal incomeAmount =BigDecimal.ZERO;
|
||||
|
||||
for (Long projectId : incomeGroupedByProject.keySet()) {
|
||||
|
||||
CtrIncomeContract contract = incomeContractService.getOne(Wrappers.lambdaQuery(CtrIncomeContract.class)
|
||||
.eq(CtrIncomeContract::getProjectId, projectId)
|
||||
.last("limit 1")
|
||||
);
|
||||
if(contract != null){
|
||||
incomeAmount = incomeAmount.add(incomeGroupedByProject.get(projectId).multiply(contract.getPayRatio()).divide(HUNDRED));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// 筛选分包商结算数据(应付)并按合同编号分组统计金额
|
||||
Map<String, BigDecimal> expenseGroupedByContract = subcontracts.stream()
|
||||
.filter(subcontract -> {
|
||||
LocalDate settlementDate = subcontract.getSettlementDate();
|
||||
return settlementDate != null &&
|
||||
!settlementDate.isBefore(startDate) &&
|
||||
!settlementDate.isAfter(endDate);
|
||||
})
|
||||
.collect(Collectors.groupingBy(
|
||||
OutSettlementValueSubcontract::getContractCode,
|
||||
Collectors.reducing(
|
||||
BigDecimal.ZERO,
|
||||
OutSettlementValueSubcontract::getSettlementValue,
|
||||
BigDecimal::add
|
||||
)
|
||||
));
|
||||
|
||||
BigDecimal expensesAmount =BigDecimal.ZERO;
|
||||
|
||||
for (String contractCode: expenseGroupedByContract.keySet()) {
|
||||
|
||||
CtrExpensesContract contract = expensesContractService.getOne(Wrappers.lambdaQuery(CtrExpensesContract.class)
|
||||
.eq(CtrExpensesContract::getContractCode, contractCode)
|
||||
.last("limit 1")
|
||||
);
|
||||
|
||||
if(contract != null){
|
||||
expensesAmount = expensesAmount.add(expenseGroupedByContract.get(contractCode).multiply(contract.getPayRatio()).divide(HUNDRED));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
MoneyMonthVo monthData = new MoneyMonthVo(
|
||||
yearMonth.toString(),
|
||||
incomeAmount,
|
||||
expensesAmount,
|
||||
incomeAmount.subtract(expensesAmount)
|
||||
);
|
||||
|
||||
moneyCostVos.add(monthData);
|
||||
}
|
||||
|
||||
return R.ok(moneyCostVos);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 按月现金统计
|
||||
*/
|
||||
@GetMapping("/monthCash")
|
||||
public R<List<MoneyMonthVo>> monthCash() {
|
||||
List<OutSettlementValueOwner> owners = settlementValueOwnerService.list();
|
||||
List<OutSettlementValueSubcontract> subcontracts = settlementValueSubcontractService.list();
|
||||
|
||||
List<MoneyMonthVo> moneyCostVos = new ArrayList<>();
|
||||
|
||||
// 生成包含当前月在内的往前数7个月的月份列表
|
||||
List<YearMonth> last7Months = new ArrayList<>();
|
||||
YearMonth currentYearMonth = YearMonth.now();
|
||||
|
||||
for (int i = 6; i >= 0; i--) {
|
||||
last7Months.add(currentYearMonth.minusMonths(i));
|
||||
}
|
||||
|
||||
// 遍历每个月份,筛选对应的数据
|
||||
for (YearMonth yearMonth : last7Months) {
|
||||
// 获取该月的第一天和最后一天
|
||||
LocalDate startDate = yearMonth.atDay(1);
|
||||
LocalDate endDate = yearMonth.atEndOfMonth();
|
||||
|
||||
// 筛选业主结算数据(应收)并按项目ID分组统计金额
|
||||
Map<Long, BigDecimal> incomeGroupedByProject = owners.stream()
|
||||
.filter(owner -> {
|
||||
LocalDate settlementDate = owner.getSettlementDate();
|
||||
return settlementDate != null &&
|
||||
!settlementDate.isBefore(startDate) &&
|
||||
!settlementDate.isAfter(endDate);
|
||||
})
|
||||
.collect(Collectors.groupingBy(
|
||||
OutSettlementValueOwner::getProjectId,
|
||||
Collectors.reducing(
|
||||
BigDecimal.ZERO,
|
||||
OutSettlementValueOwner::getSettlementValue,
|
||||
BigDecimal::add
|
||||
)
|
||||
));
|
||||
|
||||
BigDecimal incomeAmount =BigDecimal.ZERO;
|
||||
|
||||
for (Long projectId : incomeGroupedByProject.keySet()) {
|
||||
|
||||
CtrIncomeContract contract = incomeContractService.getOne(Wrappers.lambdaQuery(CtrIncomeContract.class)
|
||||
.eq(CtrIncomeContract::getProjectId, projectId)
|
||||
.last("limit 1")
|
||||
);
|
||||
if(contract != null){
|
||||
incomeAmount = incomeAmount.add(incomeGroupedByProject.get(projectId).multiply(contract.getPayRatio()).divide(HUNDRED));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// 筛选分包商结算数据(应付)并按合同编号分组统计金额
|
||||
Map<String, BigDecimal> expenseGroupedByContract = subcontracts.stream()
|
||||
.filter(subcontract -> {
|
||||
LocalDate settlementDate = subcontract.getSettlementDate();
|
||||
return settlementDate != null &&
|
||||
!settlementDate.isBefore(startDate) &&
|
||||
!settlementDate.isAfter(endDate);
|
||||
})
|
||||
.collect(Collectors.groupingBy(
|
||||
OutSettlementValueSubcontract::getContractCode,
|
||||
Collectors.reducing(
|
||||
BigDecimal.ZERO,
|
||||
OutSettlementValueSubcontract::getSettlementValue,
|
||||
BigDecimal::add
|
||||
)
|
||||
));
|
||||
|
||||
BigDecimal expensesAmount =BigDecimal.ZERO;
|
||||
|
||||
for (String contractCode: expenseGroupedByContract.keySet()) {
|
||||
|
||||
CtrExpensesContract contract = expensesContractService.getOne(Wrappers.lambdaQuery(CtrExpensesContract.class)
|
||||
.eq(CtrExpensesContract::getContractCode, contractCode)
|
||||
.last("limit 1")
|
||||
);
|
||||
|
||||
if(contract != null){
|
||||
expensesAmount = expensesAmount.add(expenseGroupedByContract.get(contractCode).multiply(contract.getPayRatio()).divide(HUNDRED));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
MoneyMonthVo monthData = new MoneyMonthVo(
|
||||
yearMonth.toString(),
|
||||
incomeAmount,
|
||||
expensesAmount,
|
||||
incomeAmount.subtract(expensesAmount)
|
||||
);
|
||||
|
||||
moneyCostVos.add(monthData);
|
||||
}
|
||||
|
||||
return R.ok(moneyCostVos);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
|
@ -0,0 +1,37 @@
|
||||
package org.dromara.bigscreen.domain.vo;
|
||||
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
@Data
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class MoneyCostVo {
|
||||
|
||||
/**
|
||||
* 材料
|
||||
*/
|
||||
private BigDecimal materialCost;
|
||||
|
||||
/**
|
||||
* 分包
|
||||
*/
|
||||
private BigDecimal subcontractCost;
|
||||
|
||||
/**
|
||||
* 劳务
|
||||
*/
|
||||
private BigDecimal LaborCost;
|
||||
|
||||
|
||||
/**
|
||||
* 管理
|
||||
*/
|
||||
private BigDecimal manageCost;
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,34 @@
|
||||
package org.dromara.bigscreen.domain.vo;
|
||||
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
@Data
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class MoneyMonthVo {
|
||||
|
||||
/**
|
||||
* 月份
|
||||
*/
|
||||
private String month;
|
||||
|
||||
/**
|
||||
* 收入
|
||||
*/
|
||||
private BigDecimal incomeAmount ;
|
||||
|
||||
/**
|
||||
* 支出
|
||||
*/
|
||||
private BigDecimal expensesAmount ;
|
||||
|
||||
/**
|
||||
* 净现金
|
||||
*/
|
||||
private BigDecimal profitAmount ;
|
||||
}
|
@ -22,6 +22,7 @@ import org.dromara.ctr.mapper.CtrIncomeContractMapper;
|
||||
import org.dromara.ctr.service.ICtrIncomeContractService;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Collection;
|
||||
@ -138,6 +139,21 @@ public class CtrIncomeContractServiceImpl extends ServiceImpl<CtrIncomeContractM
|
||||
if (CollectionUtil.isNotEmpty(list)) {
|
||||
throw new ServiceException("保存合同信息失败,合同编号已存在");
|
||||
}
|
||||
//校验项目合同是否唯一
|
||||
List<CtrIncomeContract> listProject = list(Wrappers.<CtrIncomeContract>lambdaQuery()
|
||||
.eq(CtrIncomeContract::getProjectId, entity.getProjectId())
|
||||
.ne(entity.getId() != null, CtrIncomeContract::getId, entity.getId())
|
||||
);
|
||||
if (CollectionUtil.isNotEmpty(listProject)) {
|
||||
throw new ServiceException("保存合同信息失败,项目下已存在合同");
|
||||
}
|
||||
BigDecimal assuranceDepositRatio = entity.getAssuranceDepositRatio();
|
||||
entity.getPayRatio().add(entity.getAdvancePayRatio()).add(entity.getBalancePayRatio()).add(assuranceDepositRatio);
|
||||
//校验支付比例是否100%
|
||||
if (assuranceDepositRatio.compareTo(new BigDecimal(100)) != 0) {
|
||||
throw new ServiceException("保存合同信息失败,付款比例必须为100%");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
Reference in New Issue
Block a user