Merge remote-tracking branch 'origin/master'
commit
908924f8b7
|
@ -1,6 +1,7 @@
|
||||||
package cn.palmte.work.bean;
|
package cn.palmte.work.bean;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
|
import java.math.RoundingMode;
|
||||||
|
|
||||||
public class FinalBean {
|
public class FinalBean {
|
||||||
|
|
||||||
|
@ -137,6 +138,10 @@ public class FinalBean {
|
||||||
BigDecimal incomeTotal = getIncomeTotal();
|
BigDecimal incomeTotal = getIncomeTotal();
|
||||||
BigDecimal costTotal = getCostTotal();
|
BigDecimal costTotal = getCostTotal();
|
||||||
BigDecimal costExpropriationFinalTotal = getCostExpropriationFinalTotal();
|
BigDecimal costExpropriationFinalTotal = getCostExpropriationFinalTotal();
|
||||||
|
|
||||||
|
if (null == incomeTotal || null == costTotal || null == costExpropriationFinalTotal) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
return incomeTotal.subtract(costTotal).subtract(costExpropriationFinalTotal);
|
return incomeTotal.subtract(costTotal).subtract(costExpropriationFinalTotal);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -150,7 +155,13 @@ public class FinalBean {
|
||||||
private BigDecimal grossProfitProfitMargin;
|
private BigDecimal grossProfitProfitMargin;
|
||||||
|
|
||||||
public BigDecimal getGrossProfitProfitMargin() {
|
public BigDecimal getGrossProfitProfitMargin() {
|
||||||
return grossProfitProfitMargin;
|
BigDecimal grossProfitFinalTotal = getGrossProfitFinalTotal();
|
||||||
|
BigDecimal incomeTotal = getIncomeTotal();
|
||||||
|
|
||||||
|
if(null == grossProfitFinalTotal || null == incomeTotal){
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return grossProfitFinalTotal.divide(incomeTotal,4, RoundingMode.HALF_UP).multiply(new BigDecimal(100));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setGrossProfitProfitMargin(BigDecimal grossProfitProfitMargin) {
|
public void setGrossProfitProfitMargin(BigDecimal grossProfitProfitMargin) {
|
||||||
|
@ -165,6 +176,10 @@ public class FinalBean {
|
||||||
public BigDecimal getContributionMarginFinalTotal() {
|
public BigDecimal getContributionMarginFinalTotal() {
|
||||||
BigDecimal grossProfitFinalTotal = getGrossProfitFinalTotal();
|
BigDecimal grossProfitFinalTotal = getGrossProfitFinalTotal();
|
||||||
BigDecimal costCompanyManageFinalTotal = getCostCompanyManageFinalTotal();
|
BigDecimal costCompanyManageFinalTotal = getCostCompanyManageFinalTotal();
|
||||||
|
|
||||||
|
if (null == grossProfitFinalTotal || null == costCompanyManageFinalTotal) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
return grossProfitFinalTotal.subtract(costCompanyManageFinalTotal);
|
return grossProfitFinalTotal.subtract(costCompanyManageFinalTotal);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -178,7 +193,14 @@ public class FinalBean {
|
||||||
private BigDecimal contributionMarginProfitMargin;
|
private BigDecimal contributionMarginProfitMargin;
|
||||||
|
|
||||||
public BigDecimal getContributionMarginProfitMargin() {
|
public BigDecimal getContributionMarginProfitMargin() {
|
||||||
return contributionMarginProfitMargin;
|
BigDecimal contributionMarginFinalTotal = getContributionMarginFinalTotal();
|
||||||
|
BigDecimal incomeTotal = getIncomeTotal();
|
||||||
|
|
||||||
|
if(null == contributionMarginFinalTotal || null == incomeTotal){
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return contributionMarginFinalTotal.divide(incomeTotal,4, RoundingMode.HALF_UP).multiply(new BigDecimal(100));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setContributionMarginProfitMargin(BigDecimal contributionMarginProfitMargin) {
|
public void setContributionMarginProfitMargin(BigDecimal contributionMarginProfitMargin) {
|
||||||
|
@ -193,6 +215,9 @@ public class FinalBean {
|
||||||
public BigDecimal getNetMarginFinalTotal() {
|
public BigDecimal getNetMarginFinalTotal() {
|
||||||
BigDecimal contributionMarginFinalTotal = getContributionMarginFinalTotal();
|
BigDecimal contributionMarginFinalTotal = getContributionMarginFinalTotal();
|
||||||
BigDecimal costIncomeTaxFinalTotal = getCostIncomeTaxFinalTotal();
|
BigDecimal costIncomeTaxFinalTotal = getCostIncomeTaxFinalTotal();
|
||||||
|
if (null == contributionMarginFinalTotal || null == costIncomeTaxFinalTotal) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
return contributionMarginFinalTotal.subtract(costIncomeTaxFinalTotal);
|
return contributionMarginFinalTotal.subtract(costIncomeTaxFinalTotal);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -206,7 +231,13 @@ public class FinalBean {
|
||||||
private BigDecimal netMarginProfitMargin;
|
private BigDecimal netMarginProfitMargin;
|
||||||
|
|
||||||
public BigDecimal getNetMarginProfitMargin() {
|
public BigDecimal getNetMarginProfitMargin() {
|
||||||
return netMarginProfitMargin;
|
BigDecimal netMarginFinalTotal = getNetMarginFinalTotal();
|
||||||
|
BigDecimal incomeTotal = getIncomeTotal();
|
||||||
|
|
||||||
|
if(null == netMarginFinalTotal || null == incomeTotal){
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return netMarginFinalTotal.divide(incomeTotal,4, RoundingMode.HALF_UP).multiply(new BigDecimal(100));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setNetMarginProfitMargin(BigDecimal netMarginProfitMargin) {
|
public void setNetMarginProfitMargin(BigDecimal netMarginProfitMargin) {
|
||||||
|
@ -254,6 +285,11 @@ public class FinalBean {
|
||||||
BigDecimal taxCost = getTaxCost();
|
BigDecimal taxCost = getTaxCost();
|
||||||
BigDecimal earnestMoneyCost = getEarnestMoneyCost();
|
BigDecimal earnestMoneyCost = getEarnestMoneyCost();
|
||||||
|
|
||||||
|
if (null == saleIncomeCash || null == taxReturn || null == earnestMoneyIncome ||
|
||||||
|
null == purchaseCost || null == taxCost || null == earnestMoneyCost) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
return saleIncomeCash
|
return saleIncomeCash
|
||||||
.add(taxReturn)
|
.add(taxReturn)
|
||||||
.add(earnestMoneyIncome)
|
.add(earnestMoneyIncome)
|
||||||
|
@ -295,6 +331,10 @@ public class FinalBean {
|
||||||
public BigDecimal getFinancingCapitalCashflow() {
|
public BigDecimal getFinancingCapitalCashflow() {
|
||||||
BigDecimal financingCapitalInflow = getFinancingCapitalInflow();
|
BigDecimal financingCapitalInflow = getFinancingCapitalInflow();
|
||||||
BigDecimal financingCapitalOutflow = getFinancingCapitalOutflow();
|
BigDecimal financingCapitalOutflow = getFinancingCapitalOutflow();
|
||||||
|
|
||||||
|
if (null == financingCapitalInflow || null == financingCapitalOutflow) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
return financingCapitalInflow.subtract(financingCapitalOutflow);
|
return financingCapitalInflow.subtract(financingCapitalOutflow);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -312,6 +352,10 @@ public class FinalBean {
|
||||||
BigDecimal netCashFlow = getNetCashFlow();
|
BigDecimal netCashFlow = getNetCashFlow();
|
||||||
BigDecimal netCashFromInvestingActivities = getNetCashFromInvestingActivities();
|
BigDecimal netCashFromInvestingActivities = getNetCashFromInvestingActivities();
|
||||||
BigDecimal financingCapitalCashflow = getFinancingCapitalCashflow();
|
BigDecimal financingCapitalCashflow = getFinancingCapitalCashflow();
|
||||||
|
|
||||||
|
if (null == netCashFlow || null == netCashFromInvestingActivities || null == financingCapitalCashflow) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
return netCashFlow
|
return netCashFlow
|
||||||
.add(netCashFromInvestingActivities)
|
.add(netCashFromInvestingActivities)
|
||||||
.add(financingCapitalCashflow);
|
.add(financingCapitalCashflow);
|
||||||
|
@ -323,6 +367,7 @@ public class FinalBean {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取所有现金流量决算总额
|
* 获取所有现金流量决算总额
|
||||||
|
*
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public BigDecimal getCashFluxTotal() {
|
public BigDecimal getCashFluxTotal() {
|
||||||
|
|
|
@ -101,6 +101,67 @@ public class FormerBean extends IncomeCostBean{
|
||||||
*/
|
*/
|
||||||
private BigDecimal cashFlowTotal;
|
private BigDecimal cashFlowTotal;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 项目毛利利润率
|
||||||
|
*/
|
||||||
|
private BigDecimal grossProfitProfitMargin;
|
||||||
|
|
||||||
|
public BigDecimal getGrossProfitProfitMargin() {
|
||||||
|
// 100 * grossProfit() / getIncomeTotalTaxExclude()
|
||||||
|
BigDecimal grossProfit = getGrossProfit();
|
||||||
|
BigDecimal incomeTotalTaxExclude = getIncomeTotalTaxExclude();
|
||||||
|
|
||||||
|
if (null == grossProfit || null == incomeTotalTaxExclude) {
|
||||||
|
return handleSpecial(null);
|
||||||
|
}
|
||||||
|
return grossProfit.divide(incomeTotalTaxExclude).multiply(new BigDecimal(100));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setGrossProfitProfitMargin(BigDecimal grossProfitProfitMargin) {
|
||||||
|
this.grossProfitProfitMargin = grossProfitProfitMargin;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*项目贡献利润利润率
|
||||||
|
*/
|
||||||
|
private BigDecimal contributionProfitProfitMargin;
|
||||||
|
|
||||||
|
public BigDecimal getContributionProfitProfitMargin() {
|
||||||
|
//100 * contributionProfit() / getIncomeTotalTaxExclude()
|
||||||
|
BigDecimal contributionProfit = getContributionProfit();
|
||||||
|
BigDecimal incomeTotalTaxExclude = getIncomeTotalTaxExclude();
|
||||||
|
|
||||||
|
if (null == contributionProfit || null == incomeTotalTaxExclude) {
|
||||||
|
return handleSpecial(null);
|
||||||
|
}
|
||||||
|
return contributionProfit.divide(incomeTotalTaxExclude).multiply(new BigDecimal(100));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setContributionProfitProfitMargin(BigDecimal contributionProfitProfitMargin) {
|
||||||
|
this.contributionProfitProfitMargin = contributionProfitProfitMargin;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 项目净利润利润率
|
||||||
|
*/
|
||||||
|
private BigDecimal netProfitProfitMargin;
|
||||||
|
|
||||||
|
public BigDecimal getNetProfitProfitMargin() {
|
||||||
|
//100 * netProfit() / getIncomeTotalTaxExclude()
|
||||||
|
BigDecimal netProfit = getNetProfit();
|
||||||
|
BigDecimal incomeTotalTaxExclude = getIncomeTotalTaxExclude();
|
||||||
|
|
||||||
|
if (null == netProfit || null == incomeTotalTaxExclude) {
|
||||||
|
return handleSpecial(null);
|
||||||
|
}
|
||||||
|
return netProfit.divide(incomeTotalTaxExclude).multiply(new BigDecimal(100));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setNetProfitProfitMargin(BigDecimal netProfitProfitMargin) {
|
||||||
|
this.netProfitProfitMargin = netProfitProfitMargin;
|
||||||
|
}
|
||||||
|
|
||||||
public BigDecimal getCostIncomeTax() {
|
public BigDecimal getCostIncomeTax() {
|
||||||
return costIncomeTax;
|
return costIncomeTax;
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,80 @@
|
||||||
|
package cn.palmte.work.bean;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 损益表数据
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class ProfitAndLossBean {
|
||||||
|
|
||||||
|
private String title;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 营业收入
|
||||||
|
*/
|
||||||
|
private BigDecimal income;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 营业成本
|
||||||
|
*/
|
||||||
|
private BigDecimal cost;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 项目管理成本
|
||||||
|
*/
|
||||||
|
private BigDecimal manageCost;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 其他
|
||||||
|
*/
|
||||||
|
private BigDecimal other;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 财务费用
|
||||||
|
*/
|
||||||
|
private BigDecimal expropriation;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 项目毛利
|
||||||
|
*/
|
||||||
|
private BigDecimal grossProfit;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 项目毛利率
|
||||||
|
*/
|
||||||
|
private BigDecimal grossProfitProfit;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 公司管理费用
|
||||||
|
*/
|
||||||
|
private BigDecimal CompanyManage;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 项目贡献利润
|
||||||
|
*/
|
||||||
|
private BigDecimal contributionMargin;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 项目贡献利润率
|
||||||
|
*/
|
||||||
|
private BigDecimal contributionMarginProfit;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 所得税费用
|
||||||
|
*/
|
||||||
|
private BigDecimal incomeTax;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 项目净利润
|
||||||
|
*/
|
||||||
|
private BigDecimal netMargin;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 项目净利润率
|
||||||
|
*/
|
||||||
|
private BigDecimal netMarginProfit;
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,16 @@
|
||||||
|
package cn.palmte.work.bean;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class StatisticsBean {
|
||||||
|
|
||||||
|
private List<PrimaryIndicatorBean> primaryIndicatorBeanList;
|
||||||
|
|
||||||
|
private List<ProfitAndLossBean> profitAndLossBeanList;
|
||||||
|
|
||||||
|
private List<CashFlowStatisticsBean> cashFlowStatisticsBeanList;
|
||||||
|
|
||||||
|
}
|
|
@ -139,8 +139,8 @@ public class AccountController extends BaseController {
|
||||||
|
|
||||||
accountService.saveOrUpdateAccount(userId, admin.getRoleId(), admin, privateKey);
|
accountService.saveOrUpdateAccount(userId, admin.getRoleId(), admin, privateKey);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
logger.error("保存账号出错!" + e.toString());
|
model.put("errorMessage", "保存账号出错!请联系管理员处理");
|
||||||
return "新增账号出错!请联系管理员处理!";
|
return "/common/error";
|
||||||
}
|
}
|
||||||
return "redirect:/account/list";
|
return "redirect:/account/list";
|
||||||
}
|
}
|
||||||
|
@ -224,7 +224,7 @@ public class AccountController extends BaseController {
|
||||||
Map<String, String> searchInfo = getSearchInfo(keywords);
|
Map<String, String> searchInfo = getSearchInfo(keywords);
|
||||||
downloadHeader(httpServletResponse, Utils.generateExcelName("人员信息"), "application/octet-stream");
|
downloadHeader(httpServletResponse, Utils.generateExcelName("人员信息"), "application/octet-stream");
|
||||||
String[] headers = {"工号", "手机号码", "姓名", "常驻地", "一级部门", "直接主管", "职位", "所属角色", "公司邮件地址"};
|
String[] headers = {"工号", "手机号码", "姓名", "常驻地", "一级部门", "直接主管", "职位", "所属角色", "公司邮件地址"};
|
||||||
String[] exportColumns = {"empCode", "telephone", "realName", "workLocation", "deptName", "directManager", "positionName", "roleName", "companyEmail"};
|
String[] exportColumns = {"userName", "telephone", "realName", "workLocation", "deptName", "directManager", "positionName", "roleName", "companyEmail"};
|
||||||
ExportUtils.exportToExcel(headers, exportColumns, 1, 10000,
|
ExportUtils.exportToExcel(headers, exportColumns, 1, 10000,
|
||||||
httpServletResponse.getOutputStream(), (pN, pS) -> accountService.list(searchInfo, pN, pS).getList());
|
httpServletResponse.getOutputStream(), (pN, pS) -> accountService.list(searchInfo, pN, pS).getList());
|
||||||
}
|
}
|
||||||
|
@ -235,7 +235,7 @@ public class AccountController extends BaseController {
|
||||||
@RequestMapping("/template")
|
@RequestMapping("/template")
|
||||||
public void template(HttpServletResponse response) throws Exception {
|
public void template(HttpServletResponse response) throws Exception {
|
||||||
|
|
||||||
String[] headers = new String[]{"工号", "手机号码", "登录名称", "姓名", "常驻地", "一级部门", "直接主管", "职位", "所属角色", "公司邮件地址"};
|
String[] headers = new String[]{"工号", "手机号码", "姓名", "常驻地", "一级部门", "直接主管", "职位", "所属角色", "公司邮件地址"};
|
||||||
downloadHeader(response, Utils.generateExcelName("人员信息批量导入模板"));
|
downloadHeader(response, Utils.generateExcelName("人员信息批量导入模板"));
|
||||||
ExportUtils exportUtils = new ExportUtils(headers);
|
ExportUtils exportUtils = new ExportUtils(headers);
|
||||||
exportUtils.write(response.getOutputStream());
|
exportUtils.write(response.getOutputStream());
|
||||||
|
|
|
@ -66,6 +66,8 @@ public class ProjectController extends BaseController {
|
||||||
private ProjectSettleService projectSettleService;
|
private ProjectSettleService projectSettleService;
|
||||||
@Autowired
|
@Autowired
|
||||||
private ProcurementTypeService procurementTypeService;
|
private ProcurementTypeService procurementTypeService;
|
||||||
|
@Autowired
|
||||||
|
private ProjectSettleIncomeRepository projectSettleIncomeRepository;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 项目列表
|
* 项目列表
|
||||||
|
@ -335,19 +337,19 @@ public class ProjectController extends BaseController {
|
||||||
*/
|
*/
|
||||||
@RequestMapping("/approve")
|
@RequestMapping("/approve")
|
||||||
public String approve(@RequestParam("id") int id, @RequestParam String listFrom, Map<String, Object> model) {
|
public String approve(@RequestParam("id") int id, @RequestParam String listFrom, Map<String, Object> model) {
|
||||||
String time = "2021-11";
|
|
||||||
Project project = projectService.getProject(id);
|
Project project = projectService.getProject(id);
|
||||||
EstimateBean estimateBean = projectEstimateService.getEstimate(project);
|
|
||||||
model.put("estimateBean", estimateBean);
|
//项目信息
|
||||||
model.put("adminId", InterfaceUtil.getAdminId());
|
model.put("adminId", InterfaceUtil.getAdminId());
|
||||||
model.put("project", project);
|
model.put("project", project);
|
||||||
model.put("formerBean", projectSettleService.getFormerSettle(project, time));
|
|
||||||
model.put("monthBean", projectSettleService.getMonthSettle(project, time));
|
|
||||||
model.put("currentBean", projectSettleService.getCurrentSettle(project, time));
|
|
||||||
model.put("time", time);
|
|
||||||
model.put("listFrom", listFrom);
|
model.put("listFrom", listFrom);
|
||||||
|
|
||||||
|
//概算信息
|
||||||
|
EstimateBean estimateBean = projectEstimateService.getEstimate(project);
|
||||||
|
model.put("estimateBean", estimateBean);
|
||||||
|
|
||||||
|
//预算信息
|
||||||
BudgetBean budgetBean = projectBudgetService.getBudget(project);
|
BudgetBean budgetBean = projectBudgetService.getBudget(project);
|
||||||
//预算主页面数据
|
|
||||||
model.put("budgetBean", budgetBean);
|
model.put("budgetBean", budgetBean);
|
||||||
//收入明细
|
//收入明细
|
||||||
model.put("incomeDetails", projectBudgetService.getBudgetIncomeDetail(project));
|
model.put("incomeDetails", projectBudgetService.getBudgetIncomeDetail(project));
|
||||||
|
@ -364,11 +366,32 @@ public class ProjectController extends BaseController {
|
||||||
model.put("underwrittenPlanStatistic", projectBudgetService.getProjectUnderwrittenPlanStatisticBean(projectBudgetPlanDetails));
|
model.put("underwrittenPlanStatistic", projectBudgetService.getProjectUnderwrittenPlanStatisticBean(projectBudgetPlanDetails));
|
||||||
//现金表
|
//现金表
|
||||||
model.put("cashFlowBean", projectBudgetService.getCashFlowBean(project, projectBudgetPlanDetails));
|
model.put("cashFlowBean", projectBudgetService.getCashFlowBean(project, projectBudgetPlanDetails));
|
||||||
|
|
||||||
|
//结算信息
|
||||||
|
ProjectSettleIncome projectSettleIncome = projectSettleIncomeRepository.findNewByProjectId(id);
|
||||||
|
String time = "";
|
||||||
|
if(null == projectSettleIncome){
|
||||||
|
model.put("time", time);
|
||||||
|
}else {
|
||||||
|
time = projectSettleIncome.getTime();
|
||||||
|
model.put("time", time);
|
||||||
|
}
|
||||||
|
model.put("formerBean", projectSettleService.getFormerSettle(project, time));
|
||||||
|
model.put("monthBean", projectSettleService.getMonthSettle(project, time));
|
||||||
|
model.put("currentBean", projectSettleService.getCurrentSettle(project, time));
|
||||||
|
|
||||||
|
//决算信息
|
||||||
model.put("finalBean", projectFinalSevice.getFinal(project));
|
model.put("finalBean", projectFinalSevice.getFinal(project));
|
||||||
|
|
||||||
//freemarker可以利用的静态方法
|
//freemarker可以利用的静态方法
|
||||||
model.put("Utils", FreeMarkerUtil.fromStaticPackage("cn.palmte.work.utils.Utils"));
|
model.put("Utils", FreeMarkerUtil.fromStaticPackage("cn.palmte.work.utils.Utils"));
|
||||||
|
|
||||||
|
//审核记录
|
||||||
List<ProjectTaskRecord> list = projectTaskRecordService.list(id);
|
List<ProjectTaskRecord> list = projectTaskRecordService.list(id);
|
||||||
|
if (!list.isEmpty()) {
|
||||||
model.put("taskRecords", list);
|
model.put("taskRecords", list);
|
||||||
|
}
|
||||||
|
|
||||||
return "admin/project_approve";
|
return "admin/project_approve";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -470,6 +493,16 @@ public class ProjectController extends BaseController {
|
||||||
return ResponseMsg.buildSuccessMsg("成功");
|
return ResponseMsg.buildSuccessMsg("成功");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除草稿状态下的概算项目
|
||||||
|
*/
|
||||||
|
@GetMapping("/deleteProject/{id}")
|
||||||
|
@ResponseBody
|
||||||
|
public ResponseMsg deleteProject(@PathVariable int id) {
|
||||||
|
return projectService.deleteProject(id);
|
||||||
|
}
|
||||||
|
|
||||||
@InitBinder
|
@InitBinder
|
||||||
public void initBinder(WebDataBinder webDataBinder) {
|
public void initBinder(WebDataBinder webDataBinder) {
|
||||||
webDataBinder.addCustomFormatter(new DateFormatter("yyyy-MM-dd"));
|
webDataBinder.addCustomFormatter(new DateFormatter("yyyy-MM-dd"));
|
||||||
|
|
|
@ -2,6 +2,7 @@ package cn.palmte.work.controller.backend;
|
||||||
|
|
||||||
import cn.palmte.work.bean.CashFlowStatisticsBean;
|
import cn.palmte.work.bean.CashFlowStatisticsBean;
|
||||||
import cn.palmte.work.bean.PrimaryIndicatorBean;
|
import cn.palmte.work.bean.PrimaryIndicatorBean;
|
||||||
|
import cn.palmte.work.bean.StatisticsBean;
|
||||||
import cn.palmte.work.service.StatisticsService;
|
import cn.palmte.work.service.StatisticsService;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Controller;
|
import org.springframework.stereotype.Controller;
|
||||||
|
@ -19,10 +20,10 @@ public class StatisticsController extends BaseController{
|
||||||
|
|
||||||
@RequestMapping("/month")
|
@RequestMapping("/month")
|
||||||
public String month(Map<String, Object> model){
|
public String month(Map<String, Object> model){
|
||||||
List<PrimaryIndicatorBean> primaryIndicatorList = statisticsService.getPrimaryIndicator();
|
StatisticsBean statisticsData = statisticsService.getStatisticsData();
|
||||||
List<CashFlowStatisticsBean> cashFlowList = statisticsService.getCashFlow();
|
model.put("primaryIndicatorList",statisticsData.getPrimaryIndicatorBeanList());
|
||||||
model.put("primaryIndicatorList",primaryIndicatorList);
|
model.put("profitAndLossList",statisticsData.getProfitAndLossBeanList());
|
||||||
model.put("cashFlowList",cashFlowList);
|
model.put("cashFlowList",statisticsData.getCashFlowStatisticsBeanList());
|
||||||
return "admin/month_statistics";
|
return "admin/month_statistics";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -6,4 +6,6 @@ import java.util.List;
|
||||||
|
|
||||||
public interface ProjectEstimateCostManageRepository extends JpaRepository<ProjectEstimateCostManage,Integer> {
|
public interface ProjectEstimateCostManageRepository extends JpaRepository<ProjectEstimateCostManage,Integer> {
|
||||||
List<ProjectEstimateCostManage> findAllByProjectIdEquals(int id);
|
List<ProjectEstimateCostManage> findAllByProjectIdEquals(int id);
|
||||||
|
|
||||||
|
int deleteByProjectId(int pId);
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,4 +6,6 @@ import java.util.List;
|
||||||
|
|
||||||
public interface ProjectEstimateCostRepository extends JpaRepository<ProjectEstimateCost,Integer> {
|
public interface ProjectEstimateCostRepository extends JpaRepository<ProjectEstimateCost,Integer> {
|
||||||
List<ProjectEstimateCost> findAllByProjectIdEquals(int id);
|
List<ProjectEstimateCost> findAllByProjectIdEquals(int id);
|
||||||
|
|
||||||
|
int deleteByProjectId(int pId);
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,4 +6,6 @@ import java.util.List;
|
||||||
|
|
||||||
public interface ProjectEstimateIncomeRepository extends JpaRepository<ProjectEstimateIncome,Integer> {
|
public interface ProjectEstimateIncomeRepository extends JpaRepository<ProjectEstimateIncome,Integer> {
|
||||||
List<ProjectEstimateIncome> findAllByProjectIdEquals(int id);
|
List<ProjectEstimateIncome> findAllByProjectIdEquals(int id);
|
||||||
|
|
||||||
|
int deleteByProjectId(int piId);
|
||||||
}
|
}
|
||||||
|
|
|
@ -53,6 +53,20 @@ public class ProjectFinalProfitMargin {
|
||||||
@Column(name = "final_total_profit_margin")
|
@Column(name = "final_total_profit_margin")
|
||||||
private BigDecimal finalTotalProfitMargin;
|
private BigDecimal finalTotalProfitMargin;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 利润率
|
||||||
|
*/
|
||||||
|
@Column(name = "profit_margin")
|
||||||
|
private BigDecimal profitMargin;
|
||||||
|
|
||||||
|
public BigDecimal getProfitMargin() {
|
||||||
|
return profitMargin;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setProfitMargin(BigDecimal profitMargin) {
|
||||||
|
this.profitMargin = profitMargin;
|
||||||
|
}
|
||||||
|
|
||||||
public Integer getId() {
|
public Integer getId() {
|
||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
@ -77,5 +91,35 @@ public class ProjectFinalProfitMargin {
|
||||||
this.type = type;
|
this.type = type;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public BigDecimal getEstimateTotalProfitMargin() {
|
||||||
|
return estimateTotalProfitMargin;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setEstimateTotalProfitMargin(BigDecimal estimateTotalProfitMargin) {
|
||||||
|
this.estimateTotalProfitMargin = estimateTotalProfitMargin;
|
||||||
|
}
|
||||||
|
|
||||||
|
public BigDecimal getBudgetTotalProfitMargin() {
|
||||||
|
return budgetTotalProfitMargin;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBudgetTotalProfitMargin(BigDecimal budgetTotalProfitMargin) {
|
||||||
|
this.budgetTotalProfitMargin = budgetTotalProfitMargin;
|
||||||
|
}
|
||||||
|
|
||||||
|
public BigDecimal getSettleTotalProfitMargin() {
|
||||||
|
return settleTotalProfitMargin;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSettleTotalProfitMargin(BigDecimal settleTotalProfitMargin) {
|
||||||
|
this.settleTotalProfitMargin = settleTotalProfitMargin;
|
||||||
|
}
|
||||||
|
|
||||||
|
public BigDecimal getFinalTotalProfitMargin() {
|
||||||
|
return finalTotalProfitMargin;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setFinalTotalProfitMargin(BigDecimal finalTotalProfitMargin) {
|
||||||
|
this.finalTotalProfitMargin = finalTotalProfitMargin;
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -44,6 +44,17 @@ public class ProjectSettleProfitMargin {
|
||||||
@Column(name = "budget")
|
@Column(name = "budget")
|
||||||
private BigDecimal budget;
|
private BigDecimal budget;
|
||||||
|
|
||||||
|
@Column(name = "profit_margin")
|
||||||
|
private BigDecimal profitMargin;
|
||||||
|
|
||||||
|
public BigDecimal getProfitMargin() {
|
||||||
|
return profitMargin;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setProfitMargin(BigDecimal profitMargin) {
|
||||||
|
this.profitMargin = profitMargin;
|
||||||
|
}
|
||||||
|
|
||||||
public Integer getId() {
|
public Integer getId() {
|
||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
|
|
@ -134,7 +134,7 @@ public class AccountService {
|
||||||
oldAdmin.setRealName(admin.getRealName());
|
oldAdmin.setRealName(admin.getRealName());
|
||||||
oldAdmin.setDeptName(dept.getName());
|
oldAdmin.setDeptName(dept.getName());
|
||||||
oldAdmin.setPositionName(userPosition.getPositionName());
|
oldAdmin.setPositionName(userPosition.getPositionName());
|
||||||
oldAdmin.setEmpCode(admin.getEmpCode());
|
//oldAdmin.setEmpCode(admin.getEmpCode());
|
||||||
oldAdmin.setWorkLocation(admin.getWorkLocation());
|
oldAdmin.setWorkLocation(admin.getWorkLocation());
|
||||||
oldAdmin.setDirectManager(admin.getDirectManager());
|
oldAdmin.setDirectManager(admin.getDirectManager());
|
||||||
oldAdmin.setCompanyEmail(admin.getCompanyEmail());
|
oldAdmin.setCompanyEmail(admin.getCompanyEmail());
|
||||||
|
@ -174,7 +174,7 @@ public class AccountService {
|
||||||
}
|
}
|
||||||
|
|
||||||
//工号重复校验
|
//工号重复校验
|
||||||
Admin empCode = adminRepository.findByEmpCode(admin.getEmpCode());
|
/*Admin empCode = adminRepository.findByEmpCode(admin.getEmpCode());
|
||||||
if (userId == -1) {
|
if (userId == -1) {
|
||||||
if (null != empCode) {
|
if (null != empCode) {
|
||||||
message = "该工号已存在!";
|
message = "该工号已存在!";
|
||||||
|
@ -185,7 +185,7 @@ public class AccountService {
|
||||||
message = "该工号已存在!";
|
message = "该工号已存在!";
|
||||||
return message;
|
return message;
|
||||||
}
|
}
|
||||||
}
|
}*/
|
||||||
|
|
||||||
//手机号重复校验
|
//手机号重复校验
|
||||||
Admin byTelephoneEquals = adminRepository.findByTelephone(phone);
|
Admin byTelephoneEquals = adminRepository.findByTelephone(phone);
|
||||||
|
@ -202,18 +202,18 @@ public class AccountService {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (StringUtils.isEmpty(admin.getUserName())) {
|
if (StringUtils.isEmpty(admin.getUserName())) {
|
||||||
message = "登录名不能为空!";
|
message = "工号不能为空!";
|
||||||
return message;
|
return message;
|
||||||
}
|
}
|
||||||
Admin existAdmin = adminRepository.getAdminByUsername(admin.getUserName());
|
Admin existAdmin = adminRepository.getAdminByUsername(admin.getUserName());
|
||||||
if (userId == -1) {
|
if (userId == -1) {
|
||||||
if (existAdmin != null) {
|
if (existAdmin != null) {
|
||||||
message = "该登录名称已存在!";
|
message = "该工号已存在!";
|
||||||
return message;
|
return message;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (existAdmin != null && existAdmin.getId() != userId) {
|
if (existAdmin != null && existAdmin.getId() != userId) {
|
||||||
message = "该登录名称已存在!";
|
message = "该工号已存在!";
|
||||||
return message;
|
return message;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -304,7 +304,7 @@ public class AccountService {
|
||||||
throw new Exception("工号不能为空");
|
throw new Exception("工号不能为空");
|
||||||
}
|
}
|
||||||
|
|
||||||
Admin byEmpCode = adminRepository.findByEmpCode(empCode.toString());
|
Admin byEmpCode = adminRepository.getAdminByUsername(empCode.toString());
|
||||||
|
|
||||||
if (null != byEmpCode) {
|
if (null != byEmpCode) {
|
||||||
throw new Exception("工号" + empCode.toString() + "已存在");
|
throw new Exception("工号" + empCode.toString() + "已存在");
|
||||||
|
@ -320,7 +320,7 @@ public class AccountService {
|
||||||
throw new Exception("手机号码" + telephone.toString() + "已存在");
|
throw new Exception("手机号码" + telephone.toString() + "已存在");
|
||||||
}
|
}
|
||||||
|
|
||||||
Object userName = m.get("登录名称");
|
/*Object userName = m.get("登录名称");
|
||||||
if (userName == null || StrKit.isBlank(userName.toString())) {
|
if (userName == null || StrKit.isBlank(userName.toString())) {
|
||||||
throw new Exception("登录名称不能为空");
|
throw new Exception("登录名称不能为空");
|
||||||
}
|
}
|
||||||
|
@ -328,7 +328,7 @@ public class AccountService {
|
||||||
Admin byUsername = adminRepository.getAdminByUsername(userName.toString());
|
Admin byUsername = adminRepository.getAdminByUsername(userName.toString());
|
||||||
if (null != byUsername) {
|
if (null != byUsername) {
|
||||||
throw new Exception("登录名称" + byUsername.toString() + "已存在");
|
throw new Exception("登录名称" + byUsername.toString() + "已存在");
|
||||||
}
|
}*/
|
||||||
|
|
||||||
Object realName = m.get("姓名");
|
Object realName = m.get("姓名");
|
||||||
if (realName == null || StrKit.isBlank(realName.toString())) {
|
if (realName == null || StrKit.isBlank(realName.toString())) {
|
||||||
|
@ -389,9 +389,10 @@ public class AccountService {
|
||||||
}
|
}
|
||||||
|
|
||||||
admin = new Admin();
|
admin = new Admin();
|
||||||
admin.setEmpCode(empCode.toString());
|
//admin.setEmpCode(empCode.toString());
|
||||||
admin.setTelephone(telephone.toString());
|
admin.setTelephone(telephone.toString());
|
||||||
admin.setUserName(userName.toString());
|
admin.setUserName(empCode.toString());
|
||||||
|
admin.setRealName(realName.toString());
|
||||||
admin.setWorkLocation(workLocation.toString());
|
admin.setWorkLocation(workLocation.toString());
|
||||||
admin.setDeptId(dept.getId());
|
admin.setDeptId(dept.getId());
|
||||||
admin.setDeptName(dept.getName());
|
admin.setDeptName(dept.getName());
|
||||||
|
@ -399,7 +400,7 @@ public class AccountService {
|
||||||
admin.setPositionId(userPosition.getId());
|
admin.setPositionId(userPosition.getId());
|
||||||
admin.setPositionName(userPosition.getPositionName());
|
admin.setPositionName(userPosition.getPositionName());
|
||||||
admin.setRoleId(role.getId());
|
admin.setRoleId(role.getId());
|
||||||
admin.setRealName(role.getName());
|
admin.setRoleName(role.getName());
|
||||||
admin.setCompanyEmail(companyEmail.toString());
|
admin.setCompanyEmail(companyEmail.toString());
|
||||||
|
|
||||||
String salt = RandomStringUtils.randomAlphanumeric(6).toUpperCase();
|
String salt = RandomStringUtils.randomAlphanumeric(6).toUpperCase();
|
||||||
|
|
|
@ -2,6 +2,7 @@ package cn.palmte.work.service;
|
||||||
|
|
||||||
import cn.palmte.work.bean.ResponseMsg;
|
import cn.palmte.work.bean.ResponseMsg;
|
||||||
import cn.palmte.work.model.*;
|
import cn.palmte.work.model.*;
|
||||||
|
import cn.palmte.work.utils.DateKit;
|
||||||
import cn.palmte.work.utils.InterfaceUtil;
|
import cn.palmte.work.utils.InterfaceUtil;
|
||||||
import cn.palmte.work.utils.StrKit;
|
import cn.palmte.work.utils.StrKit;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
|
@ -70,6 +71,16 @@ public class HumanCostService {
|
||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
String date = "2021-12";
|
||||||
|
Date date1 = DateKit.getDate(date, DateKit.DATE_FORMAT_YEAR_MONTH2);
|
||||||
|
if (date1.getTime() - System.currentTimeMillis() > 0) {
|
||||||
|
System.out.println(date1.getTime() - System.currentTimeMillis());
|
||||||
|
} else {
|
||||||
|
System.out.println(date1.getTime());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public ResponseMsg check(Collection<Map> excelMap, Map<String, String> title, String date) {
|
public ResponseMsg check(Collection<Map> excelMap, Map<String, String> title, String date) {
|
||||||
int successCount = 0;
|
int successCount = 0;
|
||||||
|
@ -82,6 +93,12 @@ public class HumanCostService {
|
||||||
Map<String, BigDecimal> staffCost = new HashMap<>();
|
Map<String, BigDecimal> staffCost = new HashMap<>();
|
||||||
List<ProjectUserTime> saveList = new ArrayList<>();
|
List<ProjectUserTime> saveList = new ArrayList<>();
|
||||||
|
|
||||||
|
Date date1 = DateKit.getDate(date, DateKit.DATE_FORMAT_YEAR_MONTH2);
|
||||||
|
if (date1.getTime() - System.currentTimeMillis() > 0) {
|
||||||
|
ResponseMsg msg = ResponseMsg.buildFailedMsg("填写日期须小于当前日期!");
|
||||||
|
msg.setData(errorList);
|
||||||
|
return msg;
|
||||||
|
}
|
||||||
if(excelMap.size() == 0){
|
if(excelMap.size() == 0){
|
||||||
ResponseMsg msg = ResponseMsg.buildFailedMsg("请填写人力成本数据!");
|
ResponseMsg msg = ResponseMsg.buildFailedMsg("请填写人力成本数据!");
|
||||||
msg.setData(errorList);
|
msg.setData(errorList);
|
||||||
|
@ -184,11 +201,6 @@ public class HumanCostService {
|
||||||
return msg;
|
return msg;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void main(String[] args) {
|
|
||||||
System.out.println("0.66".matches("(([1-9]{1}\\d*)|([0]{1}))(\\.(\\d){1,2})?"));
|
|
||||||
System.out.println("0.66".matches("(([1-9]{1}\\d*)|([0]{1}))(\\.(\\d){1,2})?"));
|
|
||||||
}
|
|
||||||
|
|
||||||
public String[] getHeaders(List<ProjectUserTime> staff) {
|
public String[] getHeaders(List<ProjectUserTime> staff) {
|
||||||
String[] headers = new String[staff.size() + 3];
|
String[] headers = new String[staff.size() + 3];
|
||||||
headers[0] = "项目名称";
|
headers[0] = "项目名称";
|
||||||
|
@ -229,16 +241,16 @@ public class HumanCostService {
|
||||||
Admin admin = InterfaceUtil.getAdmin();
|
Admin admin = InterfaceUtil.getAdmin();
|
||||||
List<Project> projectList = null;
|
List<Project> projectList = null;
|
||||||
if (admin.getRoleLevel() <= 2 || admin.getRoleLevel() == 4) {
|
if (admin.getRoleLevel() <= 2 || admin.getRoleLevel() == 4) {
|
||||||
String sql = "select proj.id, proj.name from project proj where proj.status = ? order by proj.id asc";
|
String sql = "select proj.id, proj.name from project proj where (proj.status = ? or (proj.status = ? and proj.approve_status_budget = ?)) order by proj.id asc";
|
||||||
projectList = pagination.find(sql, Project.class, Project.STATUS_SETTLE);
|
projectList = pagination.find(sql, Project.class, Project.STATUS_SETTLE, Project.STATUS_BUDGET, 2);
|
||||||
} else {
|
} else {
|
||||||
String sql = "select proj.id, proj.name from project proj where proj.status = ? and " +
|
String sql = "select proj.id, proj.name from project proj where (proj.status = ? or (proj.status = ? and proj.approve_status_budget = ?)) and " +
|
||||||
" (proj.creator_id=? OR proj.id in (SELECT pv1.project_id FROM project_visible pv1 WHERE pv1.type=1 AND pv1.tid=? UNION SELECT pv2.project_id FROM project_visible pv2 WHERE pv2.type=2 AND pv2.tid=?)) order by proj.id asc";
|
" (proj.creator_id=? OR proj.id in (SELECT pv1.project_id FROM project_visible pv1 WHERE pv1.type=1 AND pv1.tid=? UNION SELECT pv2.project_id FROM project_visible pv2 WHERE pv2.type=2 AND pv2.tid=?)) order by proj.id asc";
|
||||||
//项目可见性,根据角色和人员id
|
//项目可见性,根据角色和人员id
|
||||||
int roleId = admin.getRoleId();
|
int roleId = admin.getRoleId();
|
||||||
Integer adminId = admin.getId();
|
Integer adminId = admin.getId();
|
||||||
//自己创建的肯定能看见
|
//自己创建的肯定能看见
|
||||||
projectList = pagination.find(sql, Project.class, Project.STATUS_SETTLE, adminId, roleId, adminId);
|
projectList = pagination.find(sql, Project.class, Project.STATUS_SETTLE, Project.STATUS_BUDGET, 2, adminId, roleId, adminId);
|
||||||
}
|
}
|
||||||
for (Project project : projectList) {
|
for (Project project : projectList) {
|
||||||
data.add(project.getName());
|
data.add(project.getName());
|
||||||
|
|
|
@ -63,6 +63,15 @@ public class ProjectEstimateService {
|
||||||
costManage(project, estimateBean);
|
costManage(project, estimateBean);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void deleteEstimate(int projectId){
|
||||||
|
//删除收入记录
|
||||||
|
projectEstimateIncomeRepository.deleteByProjectId(projectId);
|
||||||
|
//删除成本记录
|
||||||
|
projectEstimateCostRepository.deleteByProjectId(projectId);
|
||||||
|
//删除管理记录
|
||||||
|
projectEstimateCostManageRepository.deleteByProjectId(projectId);
|
||||||
|
}
|
||||||
|
|
||||||
private void cost(Project project, EstimateBean estimateBean) {
|
private void cost(Project project, EstimateBean estimateBean) {
|
||||||
ProjectEstimateCost projectEstimateCostDevice = new ProjectEstimateCost();
|
ProjectEstimateCost projectEstimateCostDevice = new ProjectEstimateCost();
|
||||||
projectEstimateCostDevice.setProjectId(project.getId());
|
projectEstimateCostDevice.setProjectId(project.getId());
|
||||||
|
|
|
@ -55,6 +55,9 @@ public class ProjectFinalSevice {
|
||||||
@Autowired
|
@Autowired
|
||||||
private ProjectSettleService projectSettleService;
|
private ProjectSettleService projectSettleService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private ProjectFinalProfitMarginRepository projectFinalProfitMarginRepository;
|
||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
public void save(Project project, FinalBean finalBean) {
|
public void save(Project project, FinalBean finalBean) {
|
||||||
//预算表数据
|
//预算表数据
|
||||||
|
@ -76,6 +79,9 @@ public class ProjectFinalSevice {
|
||||||
//保存项目结算管理成本信息
|
//保存项目结算管理成本信息
|
||||||
saveProjectFinalCostManage(project,finalBean,estimate,budget,settle);
|
saveProjectFinalCostManage(project,finalBean,estimate,budget,settle);
|
||||||
|
|
||||||
|
//保存项目决算利润率
|
||||||
|
saveProjectFinalProfitMargin(project,finalBean,estimate,budget,settle);
|
||||||
|
|
||||||
//保存项目结算现金流量信息
|
//保存项目结算现金流量信息
|
||||||
saveProjectFinalCashFlux(project,finalBean,cashFlowBean,settle);
|
saveProjectFinalCashFlux(project,finalBean,cashFlowBean,settle);
|
||||||
|
|
||||||
|
@ -103,6 +109,9 @@ public class ProjectFinalSevice {
|
||||||
//保存项目结算管理成本信息
|
//保存项目结算管理成本信息
|
||||||
saveProjectFinalCostManage(project,finalBean,estimate,budget,settle);
|
saveProjectFinalCostManage(project,finalBean,estimate,budget,settle);
|
||||||
|
|
||||||
|
//保存项目决算利润率
|
||||||
|
saveProjectFinalProfitMargin(project,finalBean,estimate,budget,settle);
|
||||||
|
|
||||||
//保存项目结算现金流量信息
|
//保存项目结算现金流量信息
|
||||||
saveProjectFinalCashFlux(project,finalBean,cashFlowBean,settle);
|
saveProjectFinalCashFlux(project,finalBean,cashFlowBean,settle);
|
||||||
|
|
||||||
|
@ -113,6 +122,38 @@ public class ProjectFinalSevice {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void saveProjectFinalProfitMargin(Project project, FinalBean finalBean, EstimateBean estimate, BudgetBean budget, FormerBean settle) {
|
||||||
|
ProjectFinalProfitMargin typeGrossProfit = new ProjectFinalProfitMargin();
|
||||||
|
typeGrossProfit.setProjectId(project.getId());
|
||||||
|
typeGrossProfit.setType(ProjectFinalProfitMargin.TYPE_GROSS_PROFIT);
|
||||||
|
typeGrossProfit.setEstimateTotalProfitMargin(estimate.getProjectGrossProfit());
|
||||||
|
typeGrossProfit.setBudgetTotalProfitMargin(budget.getProjectGrossProfit());
|
||||||
|
typeGrossProfit.setSettleTotalProfitMargin(settle.getGrossProfit());
|
||||||
|
typeGrossProfit.setFinalTotalProfitMargin(finalBean.getGrossProfitFinalTotal());
|
||||||
|
typeGrossProfit.setProfitMargin(finalBean.getGrossProfitProfitMargin());
|
||||||
|
projectFinalProfitMarginRepository.saveAndFlush(typeGrossProfit);
|
||||||
|
|
||||||
|
|
||||||
|
ProjectFinalProfitMargin typeContributionMargin = new ProjectFinalProfitMargin();
|
||||||
|
typeContributionMargin.setProjectId(project.getId());
|
||||||
|
typeContributionMargin.setType(ProjectFinalProfitMargin.TYPE_CONTRIBUTION_MARGIN);
|
||||||
|
typeContributionMargin.setEstimateTotalProfitMargin(estimate.getProjectContributionProfit());
|
||||||
|
typeContributionMargin.setBudgetTotalProfitMargin(budget.getProjectContributionProfit());
|
||||||
|
typeContributionMargin.setSettleTotalProfitMargin(settle.getContributionProfit());
|
||||||
|
typeContributionMargin.setFinalTotalProfitMargin(finalBean.getContributionMarginFinalTotal());
|
||||||
|
typeContributionMargin.setProfitMargin(finalBean.getContributionMarginProfitMargin());
|
||||||
|
projectFinalProfitMarginRepository.saveAndFlush(typeContributionMargin);
|
||||||
|
|
||||||
|
ProjectFinalProfitMargin typeNetMargin = new ProjectFinalProfitMargin();
|
||||||
|
typeNetMargin.setProjectId(project.getId());
|
||||||
|
typeNetMargin.setType(ProjectFinalProfitMargin.TYPE_NET_MARGIN);
|
||||||
|
typeNetMargin.setSettleTotalProfitMargin(settle.getNetProfit());
|
||||||
|
typeNetMargin.setFinalTotalProfitMargin(finalBean.getNetMarginFinalTotal());
|
||||||
|
typeNetMargin.setProfitMargin(finalBean.getNetMarginProfitMargin());
|
||||||
|
projectFinalProfitMarginRepository.saveAndFlush(typeNetMargin);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
public void saveProjectFinalCostManage(Project project, FinalBean finalBean,EstimateBean estimate,BudgetBean budget,FormerBean settle){
|
public void saveProjectFinalCostManage(Project project, FinalBean finalBean,EstimateBean estimate,BudgetBean budget,FormerBean settle){
|
||||||
ProjectFinalCostManage expropriationManage = new ProjectFinalCostManage();
|
ProjectFinalCostManage expropriationManage = new ProjectFinalCostManage();
|
||||||
expropriationManage.setProjectId(project.getId());
|
expropriationManage.setProjectId(project.getId());
|
||||||
|
|
|
@ -7,6 +7,7 @@ import com.alibaba.fastjson.JSON;
|
||||||
import com.alibaba.fastjson.JSONObject;
|
import com.alibaba.fastjson.JSONObject;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
import top.jfunc.common.db.QueryHelper;
|
import top.jfunc.common.db.QueryHelper;
|
||||||
import top.jfunc.common.db.bean.Page;
|
import top.jfunc.common.db.bean.Page;
|
||||||
import top.jfunc.common.db.utils.Pagination;
|
import top.jfunc.common.db.utils.Pagination;
|
||||||
|
@ -39,6 +40,8 @@ public class ProjectService {
|
||||||
private SysRoleRepository sysRoleRepository;
|
private SysRoleRepository sysRoleRepository;
|
||||||
@Autowired
|
@Autowired
|
||||||
private AdminRepository adminRepository;
|
private AdminRepository adminRepository;
|
||||||
|
@Autowired
|
||||||
|
private ProjectEstimateService projectEstimateService;
|
||||||
|
|
||||||
|
|
||||||
private QueryHelper getQueryHelper(Map<String, String> searchInfo) {
|
private QueryHelper getQueryHelper(Map<String, String> searchInfo) {
|
||||||
|
@ -300,4 +303,23 @@ public class ProjectService {
|
||||||
}
|
}
|
||||||
projectVisibleRepository.save(pvs);
|
projectVisibleRepository.save(pvs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
|
public ResponseMsg deleteProject(int id) {
|
||||||
|
Project one = projectRepository.findOne(id);
|
||||||
|
if (one == null) {
|
||||||
|
return ResponseMsg.buildFailedMsg("项目不存在");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (one.getStatus() != StatusEnum.ESTIMATE_ACCOUNTS.getStatus()
|
||||||
|
|| one.getApproveStatusEstimate() != ApproveStatusEnum.APPROVAL_UNCOMMIT.getApproveStatus()) {
|
||||||
|
return ResponseMsg.buildFailedMsg("项目当前状态下不能删除");
|
||||||
|
}
|
||||||
|
|
||||||
|
projectRepository.delete(id);
|
||||||
|
|
||||||
|
projectEstimateService.deleteEstimate(id);
|
||||||
|
|
||||||
|
return ResponseMsg.buildSuccessMsg("删除成功");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,6 +2,8 @@ package cn.palmte.work.service;
|
||||||
|
|
||||||
import cn.palmte.work.bean.CashFlowStatisticsBean;
|
import cn.palmte.work.bean.CashFlowStatisticsBean;
|
||||||
import cn.palmte.work.bean.PrimaryIndicatorBean;
|
import cn.palmte.work.bean.PrimaryIndicatorBean;
|
||||||
|
import cn.palmte.work.bean.ProfitAndLossBean;
|
||||||
|
import cn.palmte.work.bean.StatisticsBean;
|
||||||
import cn.palmte.work.model.*;
|
import cn.palmte.work.model.*;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
@ -38,15 +40,26 @@ public class StatisticsService {
|
||||||
@Autowired
|
@Autowired
|
||||||
private ProjectSettleCashFlowRepository projectSettleCashFlowRepository;
|
private ProjectSettleCashFlowRepository projectSettleCashFlowRepository;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private ProjectSettleProfitMarginRepository projectSettleProfitMarginRepository;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 分月项目统计 获取主要指标数据
|
* 分月项目统计 获取主要指标数据、损益表
|
||||||
*
|
*
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public List<PrimaryIndicatorBean> getPrimaryIndicator() {
|
public StatisticsBean getStatisticsData() {
|
||||||
|
StatisticsBean statisticsBean = new StatisticsBean();
|
||||||
List<PrimaryIndicatorBean> list = new ArrayList<>();
|
List<PrimaryIndicatorBean> list = new ArrayList<>();
|
||||||
|
List<ProfitAndLossBean> profitAndLossList = new ArrayList<>();
|
||||||
|
|
||||||
PrimaryIndicatorBean include = new PrimaryIndicatorBean();
|
PrimaryIndicatorBean include = new PrimaryIndicatorBean();
|
||||||
PrimaryIndicatorBean exclude = new PrimaryIndicatorBean();
|
PrimaryIndicatorBean exclude = new PrimaryIndicatorBean();
|
||||||
|
|
||||||
|
ProfitAndLossBean profitAndLossBeanInclude = new ProfitAndLossBean();
|
||||||
|
ProfitAndLossBean profitAndLossBeanExclude = new ProfitAndLossBean();
|
||||||
|
profitAndLossBeanInclude.setTitle("预算金额(含税)");
|
||||||
|
profitAndLossBeanExclude.setTitle("预算金额(不含税)");
|
||||||
include.setTitle("预算金额(含税)");
|
include.setTitle("预算金额(含税)");
|
||||||
exclude.setTitle("预算金额(不含税)");
|
exclude.setTitle("预算金额(不含税)");
|
||||||
//收入数据
|
//收入数据
|
||||||
|
@ -68,6 +81,10 @@ public class StatisticsService {
|
||||||
exclude.setIncomeEngineer(engineerIncomeTaxExcludeSum);
|
exclude.setIncomeEngineer(engineerIncomeTaxExcludeSum);
|
||||||
exclude.setIncomeService(serviceIncomeTaxExcludeSum);
|
exclude.setIncomeService(serviceIncomeTaxExcludeSum);
|
||||||
|
|
||||||
|
BigDecimal incomeInclude = allIncome.stream().map(ProjectBudgetIncome::getIncomeTaxInclude).reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||||
|
profitAndLossBeanInclude.setIncome(incomeInclude);
|
||||||
|
BigDecimal incomeExclude = allIncome.stream().map(ProjectBudgetIncome::getIncomeTaxExclude).reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||||
|
profitAndLossBeanExclude.setIncome(incomeExclude);
|
||||||
}
|
}
|
||||||
|
|
||||||
//成本数据
|
//成本数据
|
||||||
|
@ -101,6 +118,18 @@ public class StatisticsService {
|
||||||
exclude.setCostPurchaseOther(otherCostTaxExcludeSum);
|
exclude.setCostPurchaseOther(otherCostTaxExcludeSum);
|
||||||
exclude.setCostProjectManage(projectManageCostTaxExcludeSum);
|
exclude.setCostProjectManage(projectManageCostTaxExcludeSum);
|
||||||
exclude.setCostOtherOther(otherOtherCostTaxExcludeSum);
|
exclude.setCostOtherOther(otherOtherCostTaxExcludeSum);
|
||||||
|
|
||||||
|
BigDecimal costInclude = allCost.stream().filter(d -> d.getType() == ProjectBudgetCost.TYPE_DEVICE || d.getType() == ProjectBudgetCost.TYPE_BUILDING || d.getType() == ProjectBudgetCost.TYPE_SERVICE).map(ProjectBudgetCost::getCostTaxInclude).reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||||
|
BigDecimal costExclude = allCost.stream().filter(d -> d.getType() == ProjectBudgetCost.TYPE_DEVICE || d.getType() == ProjectBudgetCost.TYPE_BUILDING || d.getType() == ProjectBudgetCost.TYPE_SERVICE).map(ProjectBudgetCost::getCostTaxExclude).reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||||
|
|
||||||
|
profitAndLossBeanInclude.setCost(costInclude);
|
||||||
|
profitAndLossBeanInclude.setManageCost(projectManageCostTaxIncludeSum);
|
||||||
|
profitAndLossBeanInclude.setOther(otherCostTaxIncludeSum.add(otherOtherCostTaxIncludeSum));
|
||||||
|
|
||||||
|
profitAndLossBeanExclude.setCost(costExclude);
|
||||||
|
profitAndLossBeanInclude.setManageCost(projectManageCostTaxExcludeSum);
|
||||||
|
profitAndLossBeanExclude.setOther(otherCostTaxExcludeSum.add(otherOtherCostTaxExcludeSum));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//管理成本数据
|
//管理成本数据
|
||||||
|
@ -111,13 +140,20 @@ public class StatisticsService {
|
||||||
|
|
||||||
exclude.setCostExpropriation(expropriationSum);
|
exclude.setCostExpropriation(expropriationSum);
|
||||||
exclude.setCostCompanyManage(companyManageSum);
|
exclude.setCostCompanyManage(companyManageSum);
|
||||||
|
|
||||||
|
profitAndLossBeanExclude.setExpropriation(expropriationSum);
|
||||||
|
profitAndLossBeanExclude.setCompanyManage(companyManageSum);
|
||||||
}
|
}
|
||||||
|
|
||||||
list.add(include);
|
list.add(include);
|
||||||
list.add(exclude);
|
list.add(exclude);
|
||||||
|
profitAndLossList.add(profitAndLossBeanInclude);
|
||||||
|
profitAndLossList.add(profitAndLossBeanExclude);
|
||||||
|
|
||||||
PrimaryIndicatorBean allSettle = new PrimaryIndicatorBean();
|
PrimaryIndicatorBean allSettle = new PrimaryIndicatorBean();
|
||||||
|
ProfitAndLossBean allProfitAndLoss = new ProfitAndLossBean();
|
||||||
allSettle.setTitle("实际累计(不含税)");
|
allSettle.setTitle("实际累计(不含税)");
|
||||||
|
allProfitAndLoss.setTitle("实际累计(不含税)");
|
||||||
|
|
||||||
List<ProjectSettleIncome> allSettleIncome = projectSettleIncomeRepository.findAll();
|
List<ProjectSettleIncome> allSettleIncome = projectSettleIncomeRepository.findAll();
|
||||||
if (CollectionUtil.isNotEmpty(allSettleIncome)) {
|
if (CollectionUtil.isNotEmpty(allSettleIncome)) {
|
||||||
|
@ -128,6 +164,9 @@ public class StatisticsService {
|
||||||
allSettle.setIncomeDevice(incomeDeviceAll);
|
allSettle.setIncomeDevice(incomeDeviceAll);
|
||||||
allSettle.setIncomeEngineer(incomeEngineerAll);
|
allSettle.setIncomeEngineer(incomeEngineerAll);
|
||||||
allSettle.setIncomeService(incomeServiceAll);
|
allSettle.setIncomeService(incomeServiceAll);
|
||||||
|
|
||||||
|
BigDecimal incomeExclude = allSettleIncome.stream().map(ProjectSettleIncome::getIncomeTaxExclude).reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||||
|
allProfitAndLoss.setIncome(incomeExclude);
|
||||||
}
|
}
|
||||||
|
|
||||||
List<ProjectSettleCost> allSettleCost = projectSettleCostRepository.findAll();
|
List<ProjectSettleCost> allSettleCost = projectSettleCostRepository.findAll();
|
||||||
|
@ -145,6 +184,12 @@ public class StatisticsService {
|
||||||
allSettle.setCostPurchaseOther(costOtherAll);
|
allSettle.setCostPurchaseOther(costOtherAll);
|
||||||
allSettle.setCostProjectManage(costProjectManageAll);
|
allSettle.setCostProjectManage(costProjectManageAll);
|
||||||
allSettle.setCostOtherOther(costOtherOtherAll);
|
allSettle.setCostOtherOther(costOtherOtherAll);
|
||||||
|
|
||||||
|
BigDecimal cost = allSettleCost.stream().filter(d -> d.getType() == ProjectSettleCost.TYPE_DEVICE || d.getType() == ProjectSettleCost.TYPE_BUILDING || d.getType() == ProjectSettleCost.TYPE_SERVICE).map(ProjectSettleCost::getCostTaxExclude).reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||||
|
allProfitAndLoss.setCost(cost);
|
||||||
|
allProfitAndLoss.setManageCost(costProjectManageAll);
|
||||||
|
allProfitAndLoss.setOther(costOtherAll.add(costOtherOtherAll));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
List<ProjectSettleCostManage> allSettleCostManage = projectSettleCostManageRepository.findAll();
|
List<ProjectSettleCostManage> allSettleCostManage = projectSettleCostManageRepository.findAll();
|
||||||
|
@ -154,15 +199,33 @@ public class StatisticsService {
|
||||||
|
|
||||||
allSettle.setCostExpropriation(expropriationAll);
|
allSettle.setCostExpropriation(expropriationAll);
|
||||||
allSettle.setCostCompanyManage(companyManageAll);
|
allSettle.setCostCompanyManage(companyManageAll);
|
||||||
|
|
||||||
|
allProfitAndLoss.setExpropriation(expropriationAll);
|
||||||
|
allProfitAndLoss.setCompanyManage(companyManageAll);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
List<ProjectSettleProfitMargin> profitMargins = projectSettleProfitMarginRepository.findAll();
|
||||||
|
if(CollectionUtil.isNotEmpty(profitMargins)){
|
||||||
|
BigDecimal typeGrossProfit = profitMargins.stream().filter(d -> d.getType() == ProjectSettleProfitMargin.TYPE_GROSS_PROFIT).map(ProjectSettleProfitMargin::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||||
|
BigDecimal typeContributionProfit = profitMargins.stream().filter(d -> d.getType() == ProjectSettleProfitMargin.TYPE_CONTRIBUTION_PROFIT).map(ProjectSettleProfitMargin::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||||
|
BigDecimal typeNetProfit = profitMargins.stream().filter(d -> d.getType() == ProjectSettleProfitMargin.TYPE_NET_PROFIT).map(ProjectSettleProfitMargin::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||||
|
|
||||||
|
allProfitAndLoss.setGrossProfit(typeGrossProfit);
|
||||||
|
allProfitAndLoss.setContributionMargin(typeContributionProfit);
|
||||||
|
allProfitAndLoss.setNetMargin(typeNetProfit);
|
||||||
|
}
|
||||||
|
|
||||||
list.add(allSettle);
|
list.add(allSettle);
|
||||||
|
profitAndLossList.add(allProfitAndLoss);
|
||||||
|
|
||||||
List<String> projectTime = projectSettleIncomeRepository.getProjectTime();
|
List<String> projectTime = projectSettleIncomeRepository.getProjectTime();
|
||||||
if (CollectionUtil.isNotEmpty(projectTime)) {
|
if (CollectionUtil.isNotEmpty(projectTime)) {
|
||||||
for (String time : projectTime) {
|
for (String time : projectTime) {
|
||||||
|
|
||||||
PrimaryIndicatorBean primaryIndicatorBean = new PrimaryIndicatorBean();
|
PrimaryIndicatorBean primaryIndicatorBean = new PrimaryIndicatorBean();
|
||||||
|
ProfitAndLossBean profitAndLossBean = new ProfitAndLossBean();
|
||||||
primaryIndicatorBean.setTitle(time);
|
primaryIndicatorBean.setTitle(time);
|
||||||
|
profitAndLossBean.setTitle(time);
|
||||||
|
|
||||||
BigDecimal incomeDevice = allSettleIncome.stream().filter(d -> d.getTime().equals(time) && d.getType() == ProjectSettleIncome.TYPE_DEVICE).map(ProjectSettleIncome::getIncomeTaxExclude).reduce(BigDecimal.ZERO, BigDecimal::add);
|
BigDecimal incomeDevice = allSettleIncome.stream().filter(d -> d.getTime().equals(time) && d.getType() == ProjectSettleIncome.TYPE_DEVICE).map(ProjectSettleIncome::getIncomeTaxExclude).reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||||
BigDecimal incomeEngineer = allSettleIncome.stream().filter(d -> d.getTime().equals(time) && d.getType() == ProjectSettleIncome.TYPE_ENGINEER).map(ProjectSettleIncome::getIncomeTaxExclude).reduce(BigDecimal.ZERO, BigDecimal::add);
|
BigDecimal incomeEngineer = allSettleIncome.stream().filter(d -> d.getTime().equals(time) && d.getType() == ProjectSettleIncome.TYPE_ENGINEER).map(ProjectSettleIncome::getIncomeTaxExclude).reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||||
|
@ -172,6 +235,9 @@ public class StatisticsService {
|
||||||
primaryIndicatorBean.setIncomeEngineer(incomeEngineer);
|
primaryIndicatorBean.setIncomeEngineer(incomeEngineer);
|
||||||
primaryIndicatorBean.setIncomeService(incomeService);
|
primaryIndicatorBean.setIncomeService(incomeService);
|
||||||
|
|
||||||
|
BigDecimal income = allSettleIncome.stream().filter(d -> d.getTime().equals(time)).map(ProjectSettleIncome::getIncomeTaxExclude).reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||||
|
profitAndLossBean.setIncome(income);
|
||||||
|
|
||||||
BigDecimal costDevice = allSettleCost.stream().filter(d -> d.getTime().equals(time) && d.getType() == ProjectSettleCost.TYPE_DEVICE).map(ProjectSettleCost::getCostTaxExclude).reduce(BigDecimal.ZERO, BigDecimal::add);
|
BigDecimal costDevice = allSettleCost.stream().filter(d -> d.getTime().equals(time) && d.getType() == ProjectSettleCost.TYPE_DEVICE).map(ProjectSettleCost::getCostTaxExclude).reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||||
BigDecimal costBuilding = allSettleCost.stream().filter(d -> d.getTime().equals(time) && d.getType() == ProjectSettleCost.TYPE_BUILDING).map(ProjectSettleCost::getCostTaxExclude).reduce(BigDecimal.ZERO, BigDecimal::add);
|
BigDecimal costBuilding = allSettleCost.stream().filter(d -> d.getTime().equals(time) && d.getType() == ProjectSettleCost.TYPE_BUILDING).map(ProjectSettleCost::getCostTaxExclude).reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||||
BigDecimal costService = allSettleCost.stream().filter(d -> d.getTime().equals(time) && d.getType() == ProjectSettleCost.TYPE_SERVICE).map(ProjectSettleCost::getCostTaxExclude).reduce(BigDecimal.ZERO, BigDecimal::add);
|
BigDecimal costService = allSettleCost.stream().filter(d -> d.getTime().equals(time) && d.getType() == ProjectSettleCost.TYPE_SERVICE).map(ProjectSettleCost::getCostTaxExclude).reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||||
|
@ -179,7 +245,6 @@ public class StatisticsService {
|
||||||
BigDecimal costProjectManage = allSettleCost.stream().filter(d -> d.getTime().equals(time) && d.getType() == ProjectSettleCost.TYPE_PROJECT_MANAGE).map(ProjectSettleCost::getCostTaxExclude).reduce(BigDecimal.ZERO, BigDecimal::add);
|
BigDecimal costProjectManage = allSettleCost.stream().filter(d -> d.getTime().equals(time) && d.getType() == ProjectSettleCost.TYPE_PROJECT_MANAGE).map(ProjectSettleCost::getCostTaxExclude).reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||||
BigDecimal costOtherOther = allSettleCost.stream().filter(d -> d.getTime().equals(time) && d.getType() == ProjectSettleCost.TYPE_OTHER_OTHER).map(ProjectSettleCost::getCostTaxExclude).reduce(BigDecimal.ZERO, BigDecimal::add);
|
BigDecimal costOtherOther = allSettleCost.stream().filter(d -> d.getTime().equals(time) && d.getType() == ProjectSettleCost.TYPE_OTHER_OTHER).map(ProjectSettleCost::getCostTaxExclude).reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||||
|
|
||||||
|
|
||||||
primaryIndicatorBean.setCostPurchaseDevice(costDevice);
|
primaryIndicatorBean.setCostPurchaseDevice(costDevice);
|
||||||
primaryIndicatorBean.setCostPurchaseBuild(costBuilding);
|
primaryIndicatorBean.setCostPurchaseBuild(costBuilding);
|
||||||
primaryIndicatorBean.setCostPurchaseService(costService);
|
primaryIndicatorBean.setCostPurchaseService(costService);
|
||||||
|
@ -187,28 +252,39 @@ public class StatisticsService {
|
||||||
primaryIndicatorBean.setCostProjectManage(costProjectManage);
|
primaryIndicatorBean.setCostProjectManage(costProjectManage);
|
||||||
primaryIndicatorBean.setCostOtherOther(costOtherOther);
|
primaryIndicatorBean.setCostOtherOther(costOtherOther);
|
||||||
|
|
||||||
|
BigDecimal cost = allSettleCost.stream().filter(d -> d.getTime().equals(time) && (d.getType() == ProjectSettleCost.TYPE_DEVICE || d.getType() == ProjectSettleCost.TYPE_BUILDING || d.getType() == ProjectSettleCost.TYPE_SERVICE)).map(ProjectSettleCost::getCostTaxExclude).reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||||
|
profitAndLossBean.setCost(cost);
|
||||||
|
profitAndLossBean.setManageCost(costProjectManage);
|
||||||
|
profitAndLossBean.setOther(costOther.add(costOtherOther));
|
||||||
|
|
||||||
BigDecimal expropriation = allSettleCostManage.stream().filter(d -> d.getTime().equals(time) && d.getType() == ProjectSettleCostManage.TYPE_EXPROPRIATION).map(ProjectSettleCostManage::getCostTaxExclude).reduce(BigDecimal.ZERO, BigDecimal::add);
|
BigDecimal expropriation = allSettleCostManage.stream().filter(d -> d.getTime().equals(time) && d.getType() == ProjectSettleCostManage.TYPE_EXPROPRIATION).map(ProjectSettleCostManage::getCostTaxExclude).reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||||
BigDecimal companyManage = allSettleCostManage.stream().filter(d -> d.getTime().equals(time) && d.getType() == ProjectSettleCostManage.TYPE_COMPANY_MANAGE).map(ProjectSettleCostManage::getCostTaxExclude).reduce(BigDecimal.ZERO, BigDecimal::add);
|
BigDecimal companyManage = allSettleCostManage.stream().filter(d -> d.getTime().equals(time) && d.getType() == ProjectSettleCostManage.TYPE_COMPANY_MANAGE).map(ProjectSettleCostManage::getCostTaxExclude).reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||||
|
|
||||||
primaryIndicatorBean.setCostExpropriation(expropriation);
|
primaryIndicatorBean.setCostExpropriation(expropriation);
|
||||||
primaryIndicatorBean.setCostCompanyManage(companyManage);
|
primaryIndicatorBean.setCostCompanyManage(companyManage);
|
||||||
|
|
||||||
|
profitAndLossBean.setExpropriation(expropriation);
|
||||||
|
profitAndLossBean.setCompanyManage(companyManage);
|
||||||
|
|
||||||
|
BigDecimal typeGrossProfit = profitMargins.stream().filter(d -> d.getTime().equals(time) && d.getType() == ProjectSettleProfitMargin.TYPE_GROSS_PROFIT).map(ProjectSettleProfitMargin::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||||
|
BigDecimal typeContributionProfit = profitMargins.stream().filter(d -> d.getTime().equals(time) && d.getType() == ProjectSettleProfitMargin.TYPE_CONTRIBUTION_PROFIT).map(ProjectSettleProfitMargin::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||||
|
BigDecimal typeNetProfit = profitMargins.stream().filter(d -> d.getTime().equals(time) && d.getType() == ProjectSettleProfitMargin.TYPE_NET_PROFIT).map(ProjectSettleProfitMargin::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||||
|
|
||||||
|
profitAndLossBean.setGrossProfit(typeGrossProfit);
|
||||||
|
profitAndLossBean.setContributionMargin(typeContributionProfit);
|
||||||
|
profitAndLossBean.setNetMargin(typeNetProfit);
|
||||||
|
|
||||||
list.add(primaryIndicatorBean);
|
list.add(primaryIndicatorBean);
|
||||||
|
profitAndLossList.add(profitAndLossBean);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return list;
|
List<CashFlowStatisticsBean> cashFlow = getCashFlow();
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
statisticsBean.setPrimaryIndicatorBeanList(list);
|
||||||
* 分月项目统计 获取损益表数据
|
statisticsBean.setProfitAndLossBeanList(profitAndLossList);
|
||||||
*
|
statisticsBean.setCashFlowStatisticsBeanList(cashFlow);
|
||||||
* @return
|
return statisticsBean;
|
||||||
*/
|
|
||||||
public List getIncomeStatement() {
|
|
||||||
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -28,9 +28,9 @@
|
||||||
工号
|
工号
|
||||||
</div>
|
</div>
|
||||||
<div class="am-u-sm-6 am-u-md-6">
|
<div class="am-u-sm-6 am-u-md-6">
|
||||||
<input name="empCode" class="js-ajax-validate"
|
<input name="userName" class="js-ajax-validate"
|
||||||
data-validate-async data-validation-message="请输入工号"
|
data-validate-async data-validation-message="请输入工号"
|
||||||
type="text" id="empCode" value="${account.empCode!}" minlength="1"
|
type="text" id="userName" value="${account.userName!}" minlength="1"
|
||||||
maxlength="20"
|
maxlength="20"
|
||||||
required <#if userId!=-1>readonly</#if>
|
required <#if userId!=-1>readonly</#if>
|
||||||
placeholder="请输入工号"/>
|
placeholder="请输入工号"/>
|
||||||
|
@ -56,7 +56,7 @@
|
||||||
<div class="am-u-sm-2 am-u-md-4 input-msg"></div>
|
<div class="am-u-sm-2 am-u-md-4 input-msg"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="am-g am-form-group am-margin-top">
|
<#--<div class="am-g am-form-group am-margin-top">
|
||||||
<div class="am-u-sm-4 am-u-md-2 am-text-right">
|
<div class="am-u-sm-4 am-u-md-2 am-text-right">
|
||||||
<span style="color: red;">*</span>
|
<span style="color: red;">*</span>
|
||||||
登录名称
|
登录名称
|
||||||
|
@ -70,7 +70,7 @@
|
||||||
placeholder="请输入登录名称(20字符以内)"/>
|
placeholder="请输入登录名称(20字符以内)"/>
|
||||||
</div>
|
</div>
|
||||||
<div class="am-u-sm-2 am-u-md-4 input-msg"></div>
|
<div class="am-u-sm-2 am-u-md-4 input-msg"></div>
|
||||||
</div>
|
</div>-->
|
||||||
|
|
||||||
<div class="am-g am-form-group am-margin-top">
|
<div class="am-g am-form-group am-margin-top">
|
||||||
<div class="am-u-sm-4 am-u-md-2 am-text-right">
|
<div class="am-u-sm-4 am-u-md-2 am-text-right">
|
||||||
|
@ -129,7 +129,7 @@
|
||||||
<input name="directManager" class="js-ajax-validate"
|
<input name="directManager" class="js-ajax-validate"
|
||||||
data-validate-async data-validation-message="请输入直接主管"
|
data-validate-async data-validation-message="请输入直接主管"
|
||||||
type="text" id="directManager" value="${account.directManager!}"
|
type="text" id="directManager" value="${account.directManager!}"
|
||||||
minlength="1" maxlength="20" <#if userId!=-1>readonly</#if>
|
minlength="1" maxlength="10" <#if userId!=-1>readonly</#if>
|
||||||
required placeholder="请输入直接主管"/>
|
required placeholder="请输入直接主管"/>
|
||||||
</div>
|
</div>
|
||||||
<div class="am-u-sm-2 am-u-md-4 input-msg"></div>
|
<div class="am-u-sm-2 am-u-md-4 input-msg"></div>
|
||||||
|
|
|
@ -157,7 +157,7 @@
|
||||||
<tbody>
|
<tbody>
|
||||||
<#list pager.list as list>
|
<#list pager.list as list>
|
||||||
<tr>
|
<tr>
|
||||||
<td>${list.empCode!}</td>
|
<td>${list.userName!}</td>
|
||||||
<td>${list.telephone!}</td>
|
<td>${list.telephone!}</td>
|
||||||
<td>${list.realName!}</td>
|
<td>${list.realName!}</td>
|
||||||
<td>${list.workLocation!}</td>
|
<td>${list.workLocation!}</td>
|
||||||
|
|
|
@ -41,17 +41,17 @@
|
||||||
<#list primaryIndicatorList as list>
|
<#list primaryIndicatorList as list>
|
||||||
<tr>
|
<tr>
|
||||||
<td>${list.title!}</td>
|
<td>${list.title!}</td>
|
||||||
<td>${list.incomeDevice!}</td>
|
<td>${(list.incomeDevice!0)?string("0.##")}
|
||||||
<td>${list.incomeEngineer!}</td>
|
<td>${(list.incomeEngineer!0)?string("0.##")}</td>
|
||||||
<td>${list.incomeService!}</td>
|
<td>${(list.incomeService!0)?string("0.##")}</td>
|
||||||
<td>${list.costPurchaseDevice!}</td>
|
<td>${(list.costPurchaseDevice!0)?string("0.##")}</td>
|
||||||
<td>${list.costPurchaseBuild!}</td>
|
<td>${(list.costPurchaseBuild!0)?string("0.##")}</td>
|
||||||
<td>${list.costPurchaseService!}</td>
|
<td>${(list.costPurchaseService!0)?string("0.##")}</td>
|
||||||
<td>${list.costPurchaseOther!}</td>
|
<td>${(list.costPurchaseOther!0)?string("0.##")}</td>
|
||||||
<td>${list.costOtherOther!}</td>
|
<td>${(list.costOtherOther!0)?string("0.##")}</td>
|
||||||
<td>${list.costProjectManage!}</td>
|
<td>${(list.costProjectManage!0)?string("0.##")}</td>
|
||||||
<td>${list.costExpropriation!}</td>
|
<td>${(list.costExpropriation!0)?string("0.##")}</td>
|
||||||
<td>${list.costCompanyManage!}</td>
|
<td>${(list.costCompanyManage!0)?string("0.##")}</td>
|
||||||
</tr>
|
</tr>
|
||||||
</#list>
|
</#list>
|
||||||
</#if>
|
</#if>
|
||||||
|
@ -84,24 +84,23 @@
|
||||||
</thead>
|
</thead>
|
||||||
|
|
||||||
<tbody>
|
<tbody>
|
||||||
<#if (cashFlowList)?exists && (cashFlowList?size>0)>
|
<#if (profitAndLossList)?exists && (profitAndLossList?size>0)>
|
||||||
<#list cashFlowList as list>
|
<#list profitAndLossList as list>
|
||||||
<tr>
|
<tr>
|
||||||
<td>${list.title!}</td>
|
<td>${list.title!}</td>
|
||||||
<td>${list.saleIncomeCash!}</td>
|
<td>${(list.cost!0)?string("0.##")}</td>
|
||||||
<td>${list.taxReturn!}</td>
|
<td>${(list.income!0)?string("0.##")}</td>
|
||||||
<td>${list.earnestMoneyIncome!}</td>
|
<td>${(list.manageCost!0)?string("0.##")}</td>
|
||||||
<td>${list.purchaseCost!}</td>
|
<td>${(list.other!0)?string("0.##")}</td>
|
||||||
<td>${list.taxCost!}</td>
|
<td>${(list.expropriation!0)?string("0.##")}</td>
|
||||||
<td>${list.earnestMoneyCost!}</td>
|
<td>${(list.grossProfit!0)?string("0.##")}</td>
|
||||||
<td>${list.netCashFlow!}</td>
|
<td>${(list.grossProfitProfit!0)?string("0.##")}</td>
|
||||||
<td>${list.cashInflowFromInvestingActivities!}</td>
|
<td>${(list.companyManage!0)?string("0.##")}</td>
|
||||||
<td>${list.cashOutflowFromInvestingActivities!}</td>
|
<td>${(list.contributionMargin!0)?string("0.##")}</td>
|
||||||
<td>${list.netCashFromInvestingActivities!}</td>
|
<td>${(list.contributionMarginProfit!0)?string("0.##")}</td>
|
||||||
<td>${list.financingCapitalInflow!}</td>
|
<td>${(list.incomeTax!0)?string("0.##")}</td>
|
||||||
<td>${list.financingCapitalOutflow!}</td>
|
<td>${(list.netMargin!0)?string("0.##")}</td>
|
||||||
<td>${list.financingCapitalCashflow!}</td>
|
<td>${(list.netMarginProfit!0)?string("0.##")}</td>
|
||||||
<td>${list.netIncreaseMonetaryFunds!}</td>
|
|
||||||
</tr>
|
</tr>
|
||||||
</#list>
|
</#list>
|
||||||
</#if>
|
</#if>
|
||||||
|
@ -137,20 +136,20 @@
|
||||||
<#list cashFlowList as list>
|
<#list cashFlowList as list>
|
||||||
<tr>
|
<tr>
|
||||||
<td>${list.title!}</td>
|
<td>${list.title!}</td>
|
||||||
<td>${list.saleIncomeCash!}</td>
|
<td>${(list.saleIncomeCash!0)?string("0.##")}</td>
|
||||||
<td>${list.taxReturn!}</td>
|
<td>${(list.taxReturn!0)?string("0.##")}</td>
|
||||||
<td>${list.earnestMoneyIncome!}</td>
|
<td>${(list.earnestMoneyIncome!0)?string("0.##")}</td>
|
||||||
<td>${list.purchaseCost!}</td>
|
<td>${(list.purchaseCost!0)?string("0.##")}</td>
|
||||||
<td>${list.taxCost!}</td>
|
<td>${(list.taxCost!0)?string("0.##")}</td>
|
||||||
<td>${list.earnestMoneyCost!}</td>
|
<td>${(list.earnestMoneyCost!0)?string("0.##")}</td>
|
||||||
<td>${list.netCashFlow!}</td>
|
<td>${(list.netCashFlow!0)?string("0.##")}</td>
|
||||||
<td>${list.cashInflowFromInvestingActivities!}</td>
|
<td>${(list.cashInflowFromInvestingActivities!0)?string("0.##")}</td>
|
||||||
<td>${list.cashOutflowFromInvestingActivities!}</td>
|
<td>${(list.cashOutflowFromInvestingActivities!0)?string("0.##")}</td>
|
||||||
<td>${list.netCashFromInvestingActivities!}</td>
|
<td>${(list.netCashFromInvestingActivities!0)?string("0.##")}</td>
|
||||||
<td>${list.financingCapitalInflow!}</td>
|
<td>${(list.financingCapitalInflow!0)?string("0.##")}</td>
|
||||||
<td>${list.financingCapitalOutflow!}</td>
|
<td>${(list.financingCapitalOutflow!0)?string("0.##")}</td>
|
||||||
<td>${list.financingCapitalCashflow!}</td>
|
<td>${(list.financingCapitalCashflow!0)?string("0.##")}</td>
|
||||||
<td>${list.netIncreaseMonetaryFunds!}</td>
|
<td>${(list.netIncreaseMonetaryFunds!0)?string("0.##")}</td>
|
||||||
</tr>
|
</tr>
|
||||||
</#list>
|
</#list>
|
||||||
</#if>
|
</#if>
|
||||||
|
|
|
@ -854,7 +854,7 @@
|
||||||
<td><input name="grossProfitFormerSettleTotal" type="number" value="${Utils.format(formerBean.grossProfit,'0')}" required readonly title="项目毛利上月结算总额"></td>
|
<td><input name="grossProfitFormerSettleTotal" type="number" value="${Utils.format(formerBean.grossProfit,'0')}" required readonly title="项目毛利上月结算总额"></td>
|
||||||
<td><input type="number" min="0.00" max="99999999.99" step="0.01" name="grossProfit" value="${Utils.format(monthBean.grossProfit,'0')}" readonly required title="项目毛利本月结算金额"></td>
|
<td><input type="number" min="0.00" max="99999999.99" step="0.01" name="grossProfit" value="${Utils.format(monthBean.grossProfit,'0')}" readonly required title="项目毛利本月结算金额"></td>
|
||||||
<td><input type="number" name="grossProfitSettleTotal" value="${Utils.format(currentBean.grossProfit,'0')}" readonly title="项目毛利结算总额"></td>
|
<td><input type="number" name="grossProfitSettleTotal" value="${Utils.format(currentBean.grossProfit,'0')}" readonly title="项目毛利结算总额"></td>
|
||||||
<td><input name="grossProfitProfitMargin" type="number" value="${Utils.format(100 * currentBean.grossProfit / currentBean.getIncomeTotalTaxExclude(),'0')}" readonly title="项目毛利利润率"></td>
|
<td><input name="grossProfitProfitMargin" type="number" value="${Utils.format(currentBean.getGrossProfitProfitMargin(),'0')}" readonly title="项目毛利利润率"></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>项目贡献利润</td>
|
<td>项目贡献利润</td>
|
||||||
|
@ -863,7 +863,7 @@
|
||||||
<td><input name="contributionProfitFormerSettleTotal" type="number" value="${Utils.format(formerBean.contributionProfit,'0')}" required readonly title="项目贡献利润上月结算总额"></td>
|
<td><input name="contributionProfitFormerSettleTotal" type="number" value="${Utils.format(formerBean.contributionProfit,'0')}" required readonly title="项目贡献利润上月结算总额"></td>
|
||||||
<td><input type="number" min="0.00" max="99999999.99" step="0.01" name="contributionProfit" value="${Utils.format(monthBean.contributionProfit,'0')}" required readonly title="项目贡献利润本月结算金额"></td>
|
<td><input type="number" min="0.00" max="99999999.99" step="0.01" name="contributionProfit" value="${Utils.format(monthBean.contributionProfit,'0')}" required readonly title="项目贡献利润本月结算金额"></td>
|
||||||
<td><input type="number" name="contributionProfitSettleTotal" value="${Utils.format(currentBean.contributionProfit,'0')}" readonly title="项目贡献利润结算总额"></td>
|
<td><input type="number" name="contributionProfitSettleTotal" value="${Utils.format(currentBean.contributionProfit,'0')}" readonly title="项目贡献利润结算总额"></td>
|
||||||
<td><input name="contributionProfitProfitMargin" type="number" value="${Utils.format(100 * currentBean.contributionProfit / currentBean.getIncomeTotalTaxExclude(),'0')}" readonly title="项目贡献利润利润率"></td>
|
<td><input name="contributionProfitProfitMargin" type="number" value="${Utils.format(currentBean.getContributionProfitProfitMargin(),'0')}" readonly title="项目贡献利润利润率"></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>项目净利润</td>
|
<td>项目净利润</td>
|
||||||
|
@ -872,7 +872,7 @@
|
||||||
<td><input name="netProfitFormerSettleTotal" type="number" value="${Utils.format(formerBean.netProfit,'0')}" required readonly title="项目净利润上月结算总额"></td>
|
<td><input name="netProfitFormerSettleTotal" type="number" value="${Utils.format(formerBean.netProfit,'0')}" required readonly title="项目净利润上月结算总额"></td>
|
||||||
<td><input type="number" min="0.00" max="99999999.99" step="0.01" name="netProfit" value="${Utils.format(monthBean.netProfit,'0')}" required readonly title="项目净利润本月结算金额"></td>
|
<td><input type="number" min="0.00" max="99999999.99" step="0.01" name="netProfit" value="${Utils.format(monthBean.netProfit,'0')}" required readonly title="项目净利润本月结算金额"></td>
|
||||||
<td><input type="number" name="netProfitSettleTotal" value="${Utils.format(currentBean.netProfit,'0')}" readonly title="项目净利润结算总额"></td>
|
<td><input type="number" name="netProfitSettleTotal" value="${Utils.format(currentBean.netProfit,'0')}" readonly title="项目净利润结算总额"></td>
|
||||||
<td><input name="netProfitProfitMargin" type="number" value="${Utils.format(100 * currentBean.netProfit / currentBean.getIncomeTotalTaxExclude(),'0')}" readonly title="项目净利润利润率"></td>
|
<td><input name="netProfitProfitMargin" type="number" value="${Utils.format(currentBean.getNetProfitProfitMargin(),'0')}" readonly title="项目净利润利润率"></td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
|
|
@ -232,7 +232,7 @@
|
||||||
<tr>
|
<tr>
|
||||||
<td>项目净利润</td>
|
<td>项目净利润</td>
|
||||||
<td>/</td>
|
<td>/</td>
|
||||||
<td><input name="netMarginBudgetTotal" type="number" value="${Utils.format(finalBean.netMarginBudgetTotal,'0')}" readonly required title="项目净利润预算总额"></td>
|
<td>/<#--<input name="netMarginBudgetTotal" type="number" value="${Utils.format(budgetBean.netProfit,'0')}" readonly required title="项目净利润预算总额">--></td>
|
||||||
<td><input name="netMarginSettleTotal" type="number" value="${Utils.format(settleBean.netProfit,'0')}" readonly required title="项目净利润结算总额"></td>
|
<td><input name="netMarginSettleTotal" type="number" value="${Utils.format(settleBean.netProfit,'0')}" readonly required title="项目净利润结算总额"></td>
|
||||||
<td><input name="netMarginFinalTotal" type="number" value="${Utils.format(finalBean.netMarginFinalTotal,'0')}" readonly required title="项目净利润决算总额"></td>
|
<td><input name="netMarginFinalTotal" type="number" value="${Utils.format(finalBean.netMarginFinalTotal,'0')}" readonly required title="项目净利润决算总额"></td>
|
||||||
<td><input name="netMarginProfitMargin" type="number" value="${Utils.format(finalBean.netMarginProfitMargin,'0')}" required readonly title="项目净利润利润率"></td>
|
<td><input name="netMarginProfitMargin" type="number" value="${Utils.format(finalBean.netMarginProfitMargin,'0')}" required readonly title="项目净利润利润率"></td>
|
||||||
|
|
|
@ -216,6 +216,15 @@
|
||||||
</button>
|
</button>
|
||||||
</#if>
|
</#if>
|
||||||
|
|
||||||
|
<#-- 项目等于概算状态、概算审核为草稿状态-->
|
||||||
|
<#if list.creatorId==adminId && list.status==1 && list.approveStatusEstimate==0>
|
||||||
|
<button type="button"
|
||||||
|
class="am-btn am-btn-default am-btn-xs am-text-secondary"
|
||||||
|
onclick="deleteProject('${list.id}')"><span
|
||||||
|
class="am-icon-pencil-square-o"></span>删除
|
||||||
|
</button>
|
||||||
|
</#if>
|
||||||
|
|
||||||
<#-- </@shiro.hasPermission>
|
<#-- </@shiro.hasPermission>
|
||||||
<@shiro.hasPermission name="PROJECT_EDIT">-->
|
<@shiro.hasPermission name="PROJECT_EDIT">-->
|
||||||
<#-- 概算审核等于通过状态、预算审核不等于待审核状态、 决算审核不等于通过状态-->
|
<#-- 概算审核等于通过状态、预算审核不等于待审核状态、 决算审核不等于通过状态-->
|
||||||
|
@ -401,4 +410,23 @@
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
var deleteProject = function (id) {
|
||||||
|
if (window.confirm('确定要删除此项目吗?')) {
|
||||||
|
$.ajax({
|
||||||
|
url: '${base}/project/deleteProject/' + id,
|
||||||
|
dataType: "json",
|
||||||
|
async: false,
|
||||||
|
success: function (data) {
|
||||||
|
if (data.status == 0) {
|
||||||
|
alert(data.msg);
|
||||||
|
window.location.href = window.location.href;
|
||||||
|
} else if (data.status == 1) {
|
||||||
|
alert(data.msg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -181,7 +181,7 @@
|
||||||
<#list pager.list as list>
|
<#list pager.list as list>
|
||||||
<tr>
|
<tr>
|
||||||
<td>${list.id!}</td>
|
<td>${list.id!}</td>
|
||||||
<td>${list.name!}</td>
|
<td><a style="cursor: pointer;text-decoration:none" onclick="location.href='${base}/project/approve?listFrom=list&id=${list.id}'">${list.name!}</a></td>
|
||||||
<td>${list.typeDesc!}</td>
|
<td>${list.typeDesc!}</td>
|
||||||
<td>${list.statusDesc!}</td>
|
<td>${list.statusDesc!}</td>
|
||||||
<td>${list.approveStatusDesc!}</td>
|
<td>${list.approveStatusDesc!}</td>
|
||||||
|
@ -193,15 +193,15 @@
|
||||||
<td>
|
<td>
|
||||||
<div class="am-btn-toolbar">
|
<div class="am-btn-toolbar">
|
||||||
<div class="am-btn-group am-btn-group-xs">
|
<div class="am-btn-group am-btn-group-xs">
|
||||||
<button type="button"
|
<#--<button type="button"
|
||||||
class="am-btn am-btn-default am-btn-xs am-text-secondary"
|
class="am-btn am-btn-default am-btn-xs am-text-secondary"
|
||||||
onclick="location.href='${base}/project/approve?listFrom=list&id=${list.id}'"><span
|
onclick="location.href='${base}/project/approve?listFrom=list&id=${list.id}'"><span
|
||||||
class="am-icon-pencil-square-o"></span>查看
|
class="am-icon-pencil-square-o"></span>查看
|
||||||
</button>
|
</button>-->
|
||||||
|
|
||||||
<button type="button"
|
<button type="button"
|
||||||
class="am-btn am-btn-default am-btn-xs am-text-secondary"
|
class="am-btn am-btn-default am-btn-xs am-text-secondary"
|
||||||
onclick="location.href='${base}/project/approve?listFrom=listApprove&id=${list.id}'"><span
|
onclick="location.href='${base}/project/approve?listFrom=list&id=${list.id}'"><span
|
||||||
class="am-icon-pencil-square-o"></span>审核
|
class="am-icon-pencil-square-o"></span>审核
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue