Merge remote-tracking branch 'origin/master'
commit
908924f8b7
|
@ -1,6 +1,7 @@
|
|||
package cn.palmte.work.bean;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.math.RoundingMode;
|
||||
|
||||
public class FinalBean {
|
||||
|
||||
|
@ -137,6 +138,10 @@ public class FinalBean {
|
|||
BigDecimal incomeTotal = getIncomeTotal();
|
||||
BigDecimal costTotal = getCostTotal();
|
||||
BigDecimal costExpropriationFinalTotal = getCostExpropriationFinalTotal();
|
||||
|
||||
if (null == incomeTotal || null == costTotal || null == costExpropriationFinalTotal) {
|
||||
return null;
|
||||
}
|
||||
return incomeTotal.subtract(costTotal).subtract(costExpropriationFinalTotal);
|
||||
}
|
||||
|
||||
|
@ -150,7 +155,13 @@ public class FinalBean {
|
|||
private BigDecimal grossProfitProfitMargin;
|
||||
|
||||
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) {
|
||||
|
@ -165,6 +176,10 @@ public class FinalBean {
|
|||
public BigDecimal getContributionMarginFinalTotal() {
|
||||
BigDecimal grossProfitFinalTotal = getGrossProfitFinalTotal();
|
||||
BigDecimal costCompanyManageFinalTotal = getCostCompanyManageFinalTotal();
|
||||
|
||||
if (null == grossProfitFinalTotal || null == costCompanyManageFinalTotal) {
|
||||
return null;
|
||||
}
|
||||
return grossProfitFinalTotal.subtract(costCompanyManageFinalTotal);
|
||||
}
|
||||
|
||||
|
@ -178,7 +193,14 @@ public class FinalBean {
|
|||
private BigDecimal contributionMarginProfitMargin;
|
||||
|
||||
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) {
|
||||
|
@ -193,6 +215,9 @@ public class FinalBean {
|
|||
public BigDecimal getNetMarginFinalTotal() {
|
||||
BigDecimal contributionMarginFinalTotal = getContributionMarginFinalTotal();
|
||||
BigDecimal costIncomeTaxFinalTotal = getCostIncomeTaxFinalTotal();
|
||||
if (null == contributionMarginFinalTotal || null == costIncomeTaxFinalTotal) {
|
||||
return null;
|
||||
}
|
||||
return contributionMarginFinalTotal.subtract(costIncomeTaxFinalTotal);
|
||||
}
|
||||
|
||||
|
@ -206,7 +231,13 @@ public class FinalBean {
|
|||
private BigDecimal netMarginProfitMargin;
|
||||
|
||||
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) {
|
||||
|
@ -254,6 +285,11 @@ public class FinalBean {
|
|||
BigDecimal taxCost = getTaxCost();
|
||||
BigDecimal earnestMoneyCost = getEarnestMoneyCost();
|
||||
|
||||
if (null == saleIncomeCash || null == taxReturn || null == earnestMoneyIncome ||
|
||||
null == purchaseCost || null == taxCost || null == earnestMoneyCost) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return saleIncomeCash
|
||||
.add(taxReturn)
|
||||
.add(earnestMoneyIncome)
|
||||
|
@ -295,6 +331,10 @@ public class FinalBean {
|
|||
public BigDecimal getFinancingCapitalCashflow() {
|
||||
BigDecimal financingCapitalInflow = getFinancingCapitalInflow();
|
||||
BigDecimal financingCapitalOutflow = getFinancingCapitalOutflow();
|
||||
|
||||
if (null == financingCapitalInflow || null == financingCapitalOutflow) {
|
||||
return null;
|
||||
}
|
||||
return financingCapitalInflow.subtract(financingCapitalOutflow);
|
||||
}
|
||||
|
||||
|
@ -312,6 +352,10 @@ public class FinalBean {
|
|||
BigDecimal netCashFlow = getNetCashFlow();
|
||||
BigDecimal netCashFromInvestingActivities = getNetCashFromInvestingActivities();
|
||||
BigDecimal financingCapitalCashflow = getFinancingCapitalCashflow();
|
||||
|
||||
if (null == netCashFlow || null == netCashFromInvestingActivities || null == financingCapitalCashflow) {
|
||||
return null;
|
||||
}
|
||||
return netCashFlow
|
||||
.add(netCashFromInvestingActivities)
|
||||
.add(financingCapitalCashflow);
|
||||
|
@ -323,6 +367,7 @@ public class FinalBean {
|
|||
|
||||
/**
|
||||
* 获取所有现金流量决算总额
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public BigDecimal getCashFluxTotal() {
|
||||
|
|
|
@ -101,6 +101,67 @@ public class FormerBean extends IncomeCostBean{
|
|||
*/
|
||||
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() {
|
||||
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);
|
||||
} catch (Exception e) {
|
||||
logger.error("保存账号出错!" + e.toString());
|
||||
return "新增账号出错!请联系管理员处理!";
|
||||
model.put("errorMessage", "保存账号出错!请联系管理员处理");
|
||||
return "/common/error";
|
||||
}
|
||||
return "redirect:/account/list";
|
||||
}
|
||||
|
@ -224,7 +224,7 @@ public class AccountController extends BaseController {
|
|||
Map<String, String> searchInfo = getSearchInfo(keywords);
|
||||
downloadHeader(httpServletResponse, Utils.generateExcelName("人员信息"), "application/octet-stream");
|
||||
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,
|
||||
httpServletResponse.getOutputStream(), (pN, pS) -> accountService.list(searchInfo, pN, pS).getList());
|
||||
}
|
||||
|
@ -235,7 +235,7 @@ public class AccountController extends BaseController {
|
|||
@RequestMapping("/template")
|
||||
public void template(HttpServletResponse response) throws Exception {
|
||||
|
||||
String[] headers = new String[]{"工号", "手机号码", "登录名称", "姓名", "常驻地", "一级部门", "直接主管", "职位", "所属角色", "公司邮件地址"};
|
||||
String[] headers = new String[]{"工号", "手机号码", "姓名", "常驻地", "一级部门", "直接主管", "职位", "所属角色", "公司邮件地址"};
|
||||
downloadHeader(response, Utils.generateExcelName("人员信息批量导入模板"));
|
||||
ExportUtils exportUtils = new ExportUtils(headers);
|
||||
exportUtils.write(response.getOutputStream());
|
||||
|
|
|
@ -66,6 +66,8 @@ public class ProjectController extends BaseController {
|
|||
private ProjectSettleService projectSettleService;
|
||||
@Autowired
|
||||
private ProcurementTypeService procurementTypeService;
|
||||
@Autowired
|
||||
private ProjectSettleIncomeRepository projectSettleIncomeRepository;
|
||||
|
||||
/**
|
||||
* 项目列表
|
||||
|
@ -335,19 +337,19 @@ public class ProjectController extends BaseController {
|
|||
*/
|
||||
@RequestMapping("/approve")
|
||||
public String approve(@RequestParam("id") int id, @RequestParam String listFrom, Map<String, Object> model) {
|
||||
String time = "2021-11";
|
||||
Project project = projectService.getProject(id);
|
||||
EstimateBean estimateBean = projectEstimateService.getEstimate(project);
|
||||
model.put("estimateBean", estimateBean);
|
||||
|
||||
//项目信息
|
||||
model.put("adminId", InterfaceUtil.getAdminId());
|
||||
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);
|
||||
|
||||
//概算信息
|
||||
EstimateBean estimateBean = projectEstimateService.getEstimate(project);
|
||||
model.put("estimateBean", estimateBean);
|
||||
|
||||
//预算信息
|
||||
BudgetBean budgetBean = projectBudgetService.getBudget(project);
|
||||
//预算主页面数据
|
||||
model.put("budgetBean", budgetBean);
|
||||
//收入明细
|
||||
model.put("incomeDetails", projectBudgetService.getBudgetIncomeDetail(project));
|
||||
|
@ -364,11 +366,32 @@ public class ProjectController extends BaseController {
|
|||
model.put("underwrittenPlanStatistic", projectBudgetService.getProjectUnderwrittenPlanStatisticBean(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));
|
||||
|
||||
//freemarker可以利用的静态方法
|
||||
model.put("Utils", FreeMarkerUtil.fromStaticPackage("cn.palmte.work.utils.Utils"));
|
||||
|
||||
//审核记录
|
||||
List<ProjectTaskRecord> list = projectTaskRecordService.list(id);
|
||||
model.put("taskRecords", list);
|
||||
if (!list.isEmpty()) {
|
||||
model.put("taskRecords", list);
|
||||
}
|
||||
|
||||
return "admin/project_approve";
|
||||
}
|
||||
|
||||
|
@ -470,6 +493,16 @@ public class ProjectController extends BaseController {
|
|||
return ResponseMsg.buildSuccessMsg("成功");
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 删除草稿状态下的概算项目
|
||||
*/
|
||||
@GetMapping("/deleteProject/{id}")
|
||||
@ResponseBody
|
||||
public ResponseMsg deleteProject(@PathVariable int id) {
|
||||
return projectService.deleteProject(id);
|
||||
}
|
||||
|
||||
@InitBinder
|
||||
public void initBinder(WebDataBinder webDataBinder) {
|
||||
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.PrimaryIndicatorBean;
|
||||
import cn.palmte.work.bean.StatisticsBean;
|
||||
import cn.palmte.work.service.StatisticsService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Controller;
|
||||
|
@ -19,10 +20,10 @@ public class StatisticsController extends BaseController{
|
|||
|
||||
@RequestMapping("/month")
|
||||
public String month(Map<String, Object> model){
|
||||
List<PrimaryIndicatorBean> primaryIndicatorList = statisticsService.getPrimaryIndicator();
|
||||
List<CashFlowStatisticsBean> cashFlowList = statisticsService.getCashFlow();
|
||||
model.put("primaryIndicatorList",primaryIndicatorList);
|
||||
model.put("cashFlowList",cashFlowList);
|
||||
StatisticsBean statisticsData = statisticsService.getStatisticsData();
|
||||
model.put("primaryIndicatorList",statisticsData.getPrimaryIndicatorBeanList());
|
||||
model.put("profitAndLossList",statisticsData.getProfitAndLossBeanList());
|
||||
model.put("cashFlowList",statisticsData.getCashFlowStatisticsBeanList());
|
||||
return "admin/month_statistics";
|
||||
}
|
||||
|
||||
|
|
|
@ -6,4 +6,6 @@ import java.util.List;
|
|||
|
||||
public interface ProjectEstimateCostManageRepository extends JpaRepository<ProjectEstimateCostManage,Integer> {
|
||||
List<ProjectEstimateCostManage> findAllByProjectIdEquals(int id);
|
||||
|
||||
int deleteByProjectId(int pId);
|
||||
}
|
||||
|
|
|
@ -6,4 +6,6 @@ import java.util.List;
|
|||
|
||||
public interface ProjectEstimateCostRepository extends JpaRepository<ProjectEstimateCost,Integer> {
|
||||
List<ProjectEstimateCost> findAllByProjectIdEquals(int id);
|
||||
|
||||
int deleteByProjectId(int pId);
|
||||
}
|
||||
|
|
|
@ -6,4 +6,6 @@ import java.util.List;
|
|||
|
||||
public interface ProjectEstimateIncomeRepository extends JpaRepository<ProjectEstimateIncome,Integer> {
|
||||
List<ProjectEstimateIncome> findAllByProjectIdEquals(int id);
|
||||
|
||||
int deleteByProjectId(int piId);
|
||||
}
|
||||
|
|
|
@ -53,6 +53,20 @@ public class ProjectFinalProfitMargin {
|
|||
@Column(name = "final_total_profit_margin")
|
||||
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() {
|
||||
return id;
|
||||
}
|
||||
|
@ -77,5 +91,35 @@ public class ProjectFinalProfitMargin {
|
|||
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")
|
||||
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() {
|
||||
return id;
|
||||
}
|
||||
|
|
|
@ -134,7 +134,7 @@ public class AccountService {
|
|||
oldAdmin.setRealName(admin.getRealName());
|
||||
oldAdmin.setDeptName(dept.getName());
|
||||
oldAdmin.setPositionName(userPosition.getPositionName());
|
||||
oldAdmin.setEmpCode(admin.getEmpCode());
|
||||
//oldAdmin.setEmpCode(admin.getEmpCode());
|
||||
oldAdmin.setWorkLocation(admin.getWorkLocation());
|
||||
oldAdmin.setDirectManager(admin.getDirectManager());
|
||||
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 (null != empCode) {
|
||||
message = "该工号已存在!";
|
||||
|
@ -185,7 +185,7 @@ public class AccountService {
|
|||
message = "该工号已存在!";
|
||||
return message;
|
||||
}
|
||||
}
|
||||
}*/
|
||||
|
||||
//手机号重复校验
|
||||
Admin byTelephoneEquals = adminRepository.findByTelephone(phone);
|
||||
|
@ -202,18 +202,18 @@ public class AccountService {
|
|||
}
|
||||
|
||||
if (StringUtils.isEmpty(admin.getUserName())) {
|
||||
message = "登录名不能为空!";
|
||||
message = "工号不能为空!";
|
||||
return message;
|
||||
}
|
||||
Admin existAdmin = adminRepository.getAdminByUsername(admin.getUserName());
|
||||
if (userId == -1) {
|
||||
if (existAdmin != null) {
|
||||
message = "该登录名称已存在!";
|
||||
message = "该工号已存在!";
|
||||
return message;
|
||||
}
|
||||
} else {
|
||||
if (existAdmin != null && existAdmin.getId() != userId) {
|
||||
message = "该登录名称已存在!";
|
||||
message = "该工号已存在!";
|
||||
return message;
|
||||
}
|
||||
}
|
||||
|
@ -304,7 +304,7 @@ public class AccountService {
|
|||
throw new Exception("工号不能为空");
|
||||
}
|
||||
|
||||
Admin byEmpCode = adminRepository.findByEmpCode(empCode.toString());
|
||||
Admin byEmpCode = adminRepository.getAdminByUsername(empCode.toString());
|
||||
|
||||
if (null != byEmpCode) {
|
||||
throw new Exception("工号" + empCode.toString() + "已存在");
|
||||
|
@ -320,7 +320,7 @@ public class AccountService {
|
|||
throw new Exception("手机号码" + telephone.toString() + "已存在");
|
||||
}
|
||||
|
||||
Object userName = m.get("登录名称");
|
||||
/*Object userName = m.get("登录名称");
|
||||
if (userName == null || StrKit.isBlank(userName.toString())) {
|
||||
throw new Exception("登录名称不能为空");
|
||||
}
|
||||
|
@ -328,7 +328,7 @@ public class AccountService {
|
|||
Admin byUsername = adminRepository.getAdminByUsername(userName.toString());
|
||||
if (null != byUsername) {
|
||||
throw new Exception("登录名称" + byUsername.toString() + "已存在");
|
||||
}
|
||||
}*/
|
||||
|
||||
Object realName = m.get("姓名");
|
||||
if (realName == null || StrKit.isBlank(realName.toString())) {
|
||||
|
@ -389,9 +389,10 @@ public class AccountService {
|
|||
}
|
||||
|
||||
admin = new Admin();
|
||||
admin.setEmpCode(empCode.toString());
|
||||
//admin.setEmpCode(empCode.toString());
|
||||
admin.setTelephone(telephone.toString());
|
||||
admin.setUserName(userName.toString());
|
||||
admin.setUserName(empCode.toString());
|
||||
admin.setRealName(realName.toString());
|
||||
admin.setWorkLocation(workLocation.toString());
|
||||
admin.setDeptId(dept.getId());
|
||||
admin.setDeptName(dept.getName());
|
||||
|
@ -399,7 +400,7 @@ public class AccountService {
|
|||
admin.setPositionId(userPosition.getId());
|
||||
admin.setPositionName(userPosition.getPositionName());
|
||||
admin.setRoleId(role.getId());
|
||||
admin.setRealName(role.getName());
|
||||
admin.setRoleName(role.getName());
|
||||
admin.setCompanyEmail(companyEmail.toString());
|
||||
|
||||
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.model.*;
|
||||
import cn.palmte.work.utils.DateKit;
|
||||
import cn.palmte.work.utils.InterfaceUtil;
|
||||
import cn.palmte.work.utils.StrKit;
|
||||
import org.slf4j.Logger;
|
||||
|
@ -70,6 +71,16 @@ public class HumanCostService {
|
|||
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)
|
||||
public ResponseMsg check(Collection<Map> excelMap, Map<String, String> title, String date) {
|
||||
int successCount = 0;
|
||||
|
@ -82,6 +93,12 @@ public class HumanCostService {
|
|||
Map<String, BigDecimal> staffCost = new HashMap<>();
|
||||
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){
|
||||
ResponseMsg msg = ResponseMsg.buildFailedMsg("请填写人力成本数据!");
|
||||
msg.setData(errorList);
|
||||
|
@ -184,11 +201,6 @@ public class HumanCostService {
|
|||
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) {
|
||||
String[] headers = new String[staff.size() + 3];
|
||||
headers[0] = "项目名称";
|
||||
|
@ -229,16 +241,16 @@ public class HumanCostService {
|
|||
Admin admin = InterfaceUtil.getAdmin();
|
||||
List<Project> projectList = null;
|
||||
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";
|
||||
projectList = pagination.find(sql, Project.class, Project.STATUS_SETTLE);
|
||||
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, Project.STATUS_BUDGET, 2);
|
||||
} 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";
|
||||
//项目可见性,根据角色和人员id
|
||||
int roleId = admin.getRoleId();
|
||||
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) {
|
||||
data.add(project.getName());
|
||||
|
|
|
@ -63,6 +63,15 @@ public class ProjectEstimateService {
|
|||
costManage(project, estimateBean);
|
||||
}
|
||||
|
||||
public void deleteEstimate(int projectId){
|
||||
//删除收入记录
|
||||
projectEstimateIncomeRepository.deleteByProjectId(projectId);
|
||||
//删除成本记录
|
||||
projectEstimateCostRepository.deleteByProjectId(projectId);
|
||||
//删除管理记录
|
||||
projectEstimateCostManageRepository.deleteByProjectId(projectId);
|
||||
}
|
||||
|
||||
private void cost(Project project, EstimateBean estimateBean) {
|
||||
ProjectEstimateCost projectEstimateCostDevice = new ProjectEstimateCost();
|
||||
projectEstimateCostDevice.setProjectId(project.getId());
|
||||
|
|
|
@ -55,6 +55,9 @@ public class ProjectFinalSevice {
|
|||
@Autowired
|
||||
private ProjectSettleService projectSettleService;
|
||||
|
||||
@Autowired
|
||||
private ProjectFinalProfitMarginRepository projectFinalProfitMarginRepository;
|
||||
|
||||
@Transactional
|
||||
public void save(Project project, FinalBean finalBean) {
|
||||
//预算表数据
|
||||
|
@ -76,6 +79,9 @@ public class ProjectFinalSevice {
|
|||
//保存项目结算管理成本信息
|
||||
saveProjectFinalCostManage(project,finalBean,estimate,budget,settle);
|
||||
|
||||
//保存项目决算利润率
|
||||
saveProjectFinalProfitMargin(project,finalBean,estimate,budget,settle);
|
||||
|
||||
//保存项目结算现金流量信息
|
||||
saveProjectFinalCashFlux(project,finalBean,cashFlowBean,settle);
|
||||
|
||||
|
@ -103,6 +109,9 @@ public class ProjectFinalSevice {
|
|||
//保存项目结算管理成本信息
|
||||
saveProjectFinalCostManage(project,finalBean,estimate,budget,settle);
|
||||
|
||||
//保存项目决算利润率
|
||||
saveProjectFinalProfitMargin(project,finalBean,estimate,budget,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){
|
||||
ProjectFinalCostManage expropriationManage = new ProjectFinalCostManage();
|
||||
expropriationManage.setProjectId(project.getId());
|
||||
|
|
|
@ -7,6 +7,7 @@ import com.alibaba.fastjson.JSON;
|
|||
import com.alibaba.fastjson.JSONObject;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import top.jfunc.common.db.QueryHelper;
|
||||
import top.jfunc.common.db.bean.Page;
|
||||
import top.jfunc.common.db.utils.Pagination;
|
||||
|
@ -39,6 +40,8 @@ public class ProjectService {
|
|||
private SysRoleRepository sysRoleRepository;
|
||||
@Autowired
|
||||
private AdminRepository adminRepository;
|
||||
@Autowired
|
||||
private ProjectEstimateService projectEstimateService;
|
||||
|
||||
|
||||
private QueryHelper getQueryHelper(Map<String, String> searchInfo) {
|
||||
|
@ -300,4 +303,23 @@ public class ProjectService {
|
|||
}
|
||||
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.PrimaryIndicatorBean;
|
||||
import cn.palmte.work.bean.ProfitAndLossBean;
|
||||
import cn.palmte.work.bean.StatisticsBean;
|
||||
import cn.palmte.work.model.*;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
@ -38,15 +40,26 @@ public class StatisticsService {
|
|||
@Autowired
|
||||
private ProjectSettleCashFlowRepository projectSettleCashFlowRepository;
|
||||
|
||||
@Autowired
|
||||
private ProjectSettleProfitMarginRepository projectSettleProfitMarginRepository;
|
||||
|
||||
/**
|
||||
* 分月项目统计 获取主要指标数据
|
||||
* 分月项目统计 获取主要指标数据、损益表
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public List<PrimaryIndicatorBean> getPrimaryIndicator() {
|
||||
public StatisticsBean getStatisticsData() {
|
||||
StatisticsBean statisticsBean = new StatisticsBean();
|
||||
List<PrimaryIndicatorBean> list = new ArrayList<>();
|
||||
List<ProfitAndLossBean> profitAndLossList = new ArrayList<>();
|
||||
|
||||
PrimaryIndicatorBean include = new PrimaryIndicatorBean();
|
||||
PrimaryIndicatorBean exclude = new PrimaryIndicatorBean();
|
||||
|
||||
ProfitAndLossBean profitAndLossBeanInclude = new ProfitAndLossBean();
|
||||
ProfitAndLossBean profitAndLossBeanExclude = new ProfitAndLossBean();
|
||||
profitAndLossBeanInclude.setTitle("预算金额(含税)");
|
||||
profitAndLossBeanExclude.setTitle("预算金额(不含税)");
|
||||
include.setTitle("预算金额(含税)");
|
||||
exclude.setTitle("预算金额(不含税)");
|
||||
//收入数据
|
||||
|
@ -68,6 +81,10 @@ public class StatisticsService {
|
|||
exclude.setIncomeEngineer(engineerIncomeTaxExcludeSum);
|
||||
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.setCostProjectManage(projectManageCostTaxExcludeSum);
|
||||
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.setCostCompanyManage(companyManageSum);
|
||||
|
||||
profitAndLossBeanExclude.setExpropriation(expropriationSum);
|
||||
profitAndLossBeanExclude.setCompanyManage(companyManageSum);
|
||||
}
|
||||
|
||||
list.add(include);
|
||||
list.add(exclude);
|
||||
profitAndLossList.add(profitAndLossBeanInclude);
|
||||
profitAndLossList.add(profitAndLossBeanExclude);
|
||||
|
||||
PrimaryIndicatorBean allSettle = new PrimaryIndicatorBean();
|
||||
ProfitAndLossBean allProfitAndLoss = new ProfitAndLossBean();
|
||||
allSettle.setTitle("实际累计(不含税)");
|
||||
allProfitAndLoss.setTitle("实际累计(不含税)");
|
||||
|
||||
List<ProjectSettleIncome> allSettleIncome = projectSettleIncomeRepository.findAll();
|
||||
if (CollectionUtil.isNotEmpty(allSettleIncome)) {
|
||||
|
@ -128,6 +164,9 @@ public class StatisticsService {
|
|||
allSettle.setIncomeDevice(incomeDeviceAll);
|
||||
allSettle.setIncomeEngineer(incomeEngineerAll);
|
||||
allSettle.setIncomeService(incomeServiceAll);
|
||||
|
||||
BigDecimal incomeExclude = allSettleIncome.stream().map(ProjectSettleIncome::getIncomeTaxExclude).reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||
allProfitAndLoss.setIncome(incomeExclude);
|
||||
}
|
||||
|
||||
List<ProjectSettleCost> allSettleCost = projectSettleCostRepository.findAll();
|
||||
|
@ -145,6 +184,12 @@ public class StatisticsService {
|
|||
allSettle.setCostPurchaseOther(costOtherAll);
|
||||
allSettle.setCostProjectManage(costProjectManageAll);
|
||||
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();
|
||||
|
@ -154,15 +199,33 @@ public class StatisticsService {
|
|||
|
||||
allSettle.setCostExpropriation(expropriationAll);
|
||||
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);
|
||||
profitAndLossList.add(allProfitAndLoss);
|
||||
|
||||
List<String> projectTime = projectSettleIncomeRepository.getProjectTime();
|
||||
if (CollectionUtil.isNotEmpty(projectTime)) {
|
||||
for (String time : projectTime) {
|
||||
|
||||
PrimaryIndicatorBean primaryIndicatorBean = new PrimaryIndicatorBean();
|
||||
ProfitAndLossBean profitAndLossBean = new ProfitAndLossBean();
|
||||
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 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.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 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);
|
||||
|
@ -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 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.setCostPurchaseBuild(costBuilding);
|
||||
primaryIndicatorBean.setCostPurchaseService(costService);
|
||||
|
@ -187,28 +252,39 @@ public class StatisticsService {
|
|||
primaryIndicatorBean.setCostProjectManage(costProjectManage);
|
||||
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 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.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);
|
||||
profitAndLossList.add(profitAndLossBean);
|
||||
}
|
||||
}
|
||||
|
||||
return list;
|
||||
}
|
||||
List<CashFlowStatisticsBean> cashFlow = getCashFlow();
|
||||
|
||||
/**
|
||||
* 分月项目统计 获取损益表数据
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public List getIncomeStatement() {
|
||||
|
||||
|
||||
return null;
|
||||
statisticsBean.setPrimaryIndicatorBeanList(list);
|
||||
statisticsBean.setProfitAndLossBeanList(profitAndLossList);
|
||||
statisticsBean.setCashFlowStatisticsBeanList(cashFlow);
|
||||
return statisticsBean;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -28,9 +28,9 @@
|
|||
工号
|
||||
</div>
|
||||
<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="请输入工号"
|
||||
type="text" id="empCode" value="${account.empCode!}" minlength="1"
|
||||
type="text" id="userName" value="${account.userName!}" minlength="1"
|
||||
maxlength="20"
|
||||
required <#if userId!=-1>readonly</#if>
|
||||
placeholder="请输入工号"/>
|
||||
|
@ -56,7 +56,7 @@
|
|||
<div class="am-u-sm-2 am-u-md-4 input-msg"></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">
|
||||
<span style="color: red;">*</span>
|
||||
登录名称
|
||||
|
@ -70,7 +70,7 @@
|
|||
placeholder="请输入登录名称(20字符以内)"/>
|
||||
</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-u-sm-4 am-u-md-2 am-text-right">
|
||||
|
@ -129,7 +129,7 @@
|
|||
<input name="directManager" class="js-ajax-validate"
|
||||
data-validate-async data-validation-message="请输入直接主管"
|
||||
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="请输入直接主管"/>
|
||||
</div>
|
||||
<div class="am-u-sm-2 am-u-md-4 input-msg"></div>
|
||||
|
|
|
@ -157,7 +157,7 @@
|
|||
<tbody>
|
||||
<#list pager.list as list>
|
||||
<tr>
|
||||
<td>${list.empCode!}</td>
|
||||
<td>${list.userName!}</td>
|
||||
<td>${list.telephone!}</td>
|
||||
<td>${list.realName!}</td>
|
||||
<td>${list.workLocation!}</td>
|
||||
|
|
|
@ -41,17 +41,17 @@
|
|||
<#list primaryIndicatorList as list>
|
||||
<tr>
|
||||
<td>${list.title!}</td>
|
||||
<td>${list.incomeDevice!}</td>
|
||||
<td>${list.incomeEngineer!}</td>
|
||||
<td>${list.incomeService!}</td>
|
||||
<td>${list.costPurchaseDevice!}</td>
|
||||
<td>${list.costPurchaseBuild!}</td>
|
||||
<td>${list.costPurchaseService!}</td>
|
||||
<td>${list.costPurchaseOther!}</td>
|
||||
<td>${list.costOtherOther!}</td>
|
||||
<td>${list.costProjectManage!}</td>
|
||||
<td>${list.costExpropriation!}</td>
|
||||
<td>${list.costCompanyManage!}</td>
|
||||
<td>${(list.incomeDevice!0)?string("0.##")}
|
||||
<td>${(list.incomeEngineer!0)?string("0.##")}</td>
|
||||
<td>${(list.incomeService!0)?string("0.##")}</td>
|
||||
<td>${(list.costPurchaseDevice!0)?string("0.##")}</td>
|
||||
<td>${(list.costPurchaseBuild!0)?string("0.##")}</td>
|
||||
<td>${(list.costPurchaseService!0)?string("0.##")}</td>
|
||||
<td>${(list.costPurchaseOther!0)?string("0.##")}</td>
|
||||
<td>${(list.costOtherOther!0)?string("0.##")}</td>
|
||||
<td>${(list.costProjectManage!0)?string("0.##")}</td>
|
||||
<td>${(list.costExpropriation!0)?string("0.##")}</td>
|
||||
<td>${(list.costCompanyManage!0)?string("0.##")}</td>
|
||||
</tr>
|
||||
</#list>
|
||||
</#if>
|
||||
|
@ -84,24 +84,23 @@
|
|||
</thead>
|
||||
|
||||
<tbody>
|
||||
<#if (cashFlowList)?exists && (cashFlowList?size>0)>
|
||||
<#list cashFlowList as list>
|
||||
<#if (profitAndLossList)?exists && (profitAndLossList?size>0)>
|
||||
<#list profitAndLossList as list>
|
||||
<tr>
|
||||
<td>${list.title!}</td>
|
||||
<td>${list.saleIncomeCash!}</td>
|
||||
<td>${list.taxReturn!}</td>
|
||||
<td>${list.earnestMoneyIncome!}</td>
|
||||
<td>${list.purchaseCost!}</td>
|
||||
<td>${list.taxCost!}</td>
|
||||
<td>${list.earnestMoneyCost!}</td>
|
||||
<td>${list.netCashFlow!}</td>
|
||||
<td>${list.cashInflowFromInvestingActivities!}</td>
|
||||
<td>${list.cashOutflowFromInvestingActivities!}</td>
|
||||
<td>${list.netCashFromInvestingActivities!}</td>
|
||||
<td>${list.financingCapitalInflow!}</td>
|
||||
<td>${list.financingCapitalOutflow!}</td>
|
||||
<td>${list.financingCapitalCashflow!}</td>
|
||||
<td>${list.netIncreaseMonetaryFunds!}</td>
|
||||
<td>${(list.cost!0)?string("0.##")}</td>
|
||||
<td>${(list.income!0)?string("0.##")}</td>
|
||||
<td>${(list.manageCost!0)?string("0.##")}</td>
|
||||
<td>${(list.other!0)?string("0.##")}</td>
|
||||
<td>${(list.expropriation!0)?string("0.##")}</td>
|
||||
<td>${(list.grossProfit!0)?string("0.##")}</td>
|
||||
<td>${(list.grossProfitProfit!0)?string("0.##")}</td>
|
||||
<td>${(list.companyManage!0)?string("0.##")}</td>
|
||||
<td>${(list.contributionMargin!0)?string("0.##")}</td>
|
||||
<td>${(list.contributionMarginProfit!0)?string("0.##")}</td>
|
||||
<td>${(list.incomeTax!0)?string("0.##")}</td>
|
||||
<td>${(list.netMargin!0)?string("0.##")}</td>
|
||||
<td>${(list.netMarginProfit!0)?string("0.##")}</td>
|
||||
</tr>
|
||||
</#list>
|
||||
</#if>
|
||||
|
@ -137,20 +136,20 @@
|
|||
<#list cashFlowList as list>
|
||||
<tr>
|
||||
<td>${list.title!}</td>
|
||||
<td>${list.saleIncomeCash!}</td>
|
||||
<td>${list.taxReturn!}</td>
|
||||
<td>${list.earnestMoneyIncome!}</td>
|
||||
<td>${list.purchaseCost!}</td>
|
||||
<td>${list.taxCost!}</td>
|
||||
<td>${list.earnestMoneyCost!}</td>
|
||||
<td>${list.netCashFlow!}</td>
|
||||
<td>${list.cashInflowFromInvestingActivities!}</td>
|
||||
<td>${list.cashOutflowFromInvestingActivities!}</td>
|
||||
<td>${list.netCashFromInvestingActivities!}</td>
|
||||
<td>${list.financingCapitalInflow!}</td>
|
||||
<td>${list.financingCapitalOutflow!}</td>
|
||||
<td>${list.financingCapitalCashflow!}</td>
|
||||
<td>${list.netIncreaseMonetaryFunds!}</td>
|
||||
<td>${(list.saleIncomeCash!0)?string("0.##")}</td>
|
||||
<td>${(list.taxReturn!0)?string("0.##")}</td>
|
||||
<td>${(list.earnestMoneyIncome!0)?string("0.##")}</td>
|
||||
<td>${(list.purchaseCost!0)?string("0.##")}</td>
|
||||
<td>${(list.taxCost!0)?string("0.##")}</td>
|
||||
<td>${(list.earnestMoneyCost!0)?string("0.##")}</td>
|
||||
<td>${(list.netCashFlow!0)?string("0.##")}</td>
|
||||
<td>${(list.cashInflowFromInvestingActivities!0)?string("0.##")}</td>
|
||||
<td>${(list.cashOutflowFromInvestingActivities!0)?string("0.##")}</td>
|
||||
<td>${(list.netCashFromInvestingActivities!0)?string("0.##")}</td>
|
||||
<td>${(list.financingCapitalInflow!0)?string("0.##")}</td>
|
||||
<td>${(list.financingCapitalOutflow!0)?string("0.##")}</td>
|
||||
<td>${(list.financingCapitalCashflow!0)?string("0.##")}</td>
|
||||
<td>${(list.netIncreaseMonetaryFunds!0)?string("0.##")}</td>
|
||||
</tr>
|
||||
</#list>
|
||||
</#if>
|
||||
|
|
|
@ -854,7 +854,7 @@
|
|||
<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" 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>
|
||||
<td>项目贡献利润</td>
|
||||
|
@ -863,7 +863,7 @@
|
|||
<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" 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>
|
||||
<td>项目净利润</td>
|
||||
|
@ -872,7 +872,7 @@
|
|||
<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" 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>
|
||||
</tbody>
|
||||
</table>
|
||||
|
|
|
@ -232,7 +232,7 @@
|
|||
<tr>
|
||||
<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="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>
|
||||
|
|
|
@ -216,6 +216,15 @@
|
|||
</button>
|
||||
</#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 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>
|
||||
|
|
|
@ -181,7 +181,7 @@
|
|||
<#list pager.list as list>
|
||||
<tr>
|
||||
<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.statusDesc!}</td>
|
||||
<td>${list.approveStatusDesc!}</td>
|
||||
|
@ -193,15 +193,15 @@
|
|||
<td>
|
||||
<div class="am-btn-toolbar">
|
||||
<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"
|
||||
onclick="location.href='${base}/project/approve?listFrom=list&id=${list.id}'"><span
|
||||
class="am-icon-pencil-square-o"></span>查看
|
||||
</button>
|
||||
</button>-->
|
||||
|
||||
<button type="button"
|
||||
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>审核
|
||||
</button>
|
||||
|
||||
|
|
Loading…
Reference in New Issue