diff --git a/src/main/java/cn/palmte/work/bean/ApproveStatusEnum.java b/src/main/java/cn/palmte/work/bean/ApproveStatusEnum.java new file mode 100644 index 0000000..0660def --- /dev/null +++ b/src/main/java/cn/palmte/work/bean/ApproveStatusEnum.java @@ -0,0 +1,47 @@ +package cn.palmte.work.bean; + +/** + * @author xiongshiyan at 2021/11/1 , contact me with email yanshixiong@126.com or phone 15208384257 + */ +public enum ApproveStatusEnum { + APPROVAL_PENDING(0,"待审核"), + APPROVAL_PASSED(1,"审核通过"), + APPROVAL_UNPASS(2,"审核不通过"); + + private int approveStatus; + private String approveStatusDesc; + + private ApproveStatusEnum(int approveStatus, String approveStatusDesc) { + this.approveStatus = approveStatus; + this.approveStatusDesc = approveStatusDesc; + } + + public int getApproveStatus() { + return approveStatus; + } + + public void setApproveStatus(int approveStatus) { + this.approveStatus = approveStatus; + } + + public String getApproveStatusDesc() { + return approveStatusDesc; + } + + public void setApproveStatusDesc(String approveStatusDesc) { + this.approveStatusDesc = approveStatusDesc; + } + + public static ApproveStatusEnum parseApproveStatus(int approveStatus){ + if(approveStatus == 0){ + return APPROVAL_PENDING; + } + if(approveStatus == 1){ + return APPROVAL_PASSED; + } + if(approveStatus == 2){ + return APPROVAL_UNPASS; + } + throw new IllegalArgumentException("Unkown approveStatus:"+approveStatus); + } +} diff --git a/src/main/java/cn/palmte/work/bean/EstimateBean.java b/src/main/java/cn/palmte/work/bean/EstimateBean.java new file mode 100644 index 0000000..2dcfbfc --- /dev/null +++ b/src/main/java/cn/palmte/work/bean/EstimateBean.java @@ -0,0 +1,266 @@ +package cn.palmte.work.bean; + +import java.math.BigDecimal; + +/** + * @author xiongshiyan at 2021/11/1 , contact me with email yanshixiong@126.com or phone 15208384257 + */ +public class EstimateBean { + private BigDecimal incomeDeviceTaxInclude; + private BigDecimal incomeEngineerTaxInclude; + private BigDecimal incomeServiceTaxInclude; + private BigDecimal incomeTotalTaxInclude; + + private BigDecimal incomeDeviceTaxExclude; + private BigDecimal incomeEngineerTaxExclude; + private BigDecimal incomeServiceTaxExclude; + private BigDecimal incomeTotalTaxExclude; + + private BigDecimal costPurchaseDeviceTaxInclude; + private BigDecimal costPurchaseBuildTaxInclude; + private BigDecimal costPurchaseServiceTaxInclude; + private BigDecimal costProjectManageTaxInclude; + private BigDecimal costPurchaseOtherTaxInclude; + private BigDecimal costOtherOtherTaxInclude; + private BigDecimal costTotalTaxInclude; + + private BigDecimal costPurchaseDeviceTaxExclude; + private BigDecimal costPurchaseBuildTaxExclude; + private BigDecimal costPurchaseServiceTaxExclude; + private BigDecimal costPurchaseOtherTaxExclude; + private BigDecimal costProjectManageTaxExclude; + private BigDecimal costOtherOtherTaxExclude; + private BigDecimal costTotalTaxExclude; + + private BigDecimal costExpropriationTaxExclude; + private BigDecimal costCompanyManageTaxExclude; + + private BigDecimal projectGrossProfit; + private BigDecimal projectGrossProfitRate; + private BigDecimal projectContributionProfit; + private BigDecimal projectContributionProfitRate; + + public BigDecimal getIncomeDeviceTaxInclude() { + return incomeDeviceTaxInclude; + } + + public void setIncomeDeviceTaxInclude(BigDecimal incomeDeviceTaxInclude) { + this.incomeDeviceTaxInclude = incomeDeviceTaxInclude; + } + + public BigDecimal getIncomeEngineerTaxInclude() { + return incomeEngineerTaxInclude; + } + + public void setIncomeEngineerTaxInclude(BigDecimal incomeEngineerTaxInclude) { + this.incomeEngineerTaxInclude = incomeEngineerTaxInclude; + } + + public BigDecimal getIncomeServiceTaxInclude() { + return incomeServiceTaxInclude; + } + + public void setIncomeServiceTaxInclude(BigDecimal incomeServiceTaxInclude) { + this.incomeServiceTaxInclude = incomeServiceTaxInclude; + } + + public BigDecimal getIncomeTotalTaxInclude() { + return incomeTotalTaxInclude; + } + + public void setIncomeTotalTaxInclude(BigDecimal incomeTotalTaxInclude) { + this.incomeTotalTaxInclude = incomeTotalTaxInclude; + } + + public BigDecimal getIncomeDeviceTaxExclude() { + return incomeDeviceTaxExclude; + } + + public void setIncomeDeviceTaxExclude(BigDecimal incomeDeviceTaxExclude) { + this.incomeDeviceTaxExclude = incomeDeviceTaxExclude; + } + + public BigDecimal getIncomeEngineerTaxExclude() { + return incomeEngineerTaxExclude; + } + + public void setIncomeEngineerTaxExclude(BigDecimal incomeEngineerTaxExclude) { + this.incomeEngineerTaxExclude = incomeEngineerTaxExclude; + } + + public BigDecimal getIncomeServiceTaxExclude() { + return incomeServiceTaxExclude; + } + + public void setIncomeServiceTaxExclude(BigDecimal incomeServiceTaxExclude) { + this.incomeServiceTaxExclude = incomeServiceTaxExclude; + } + + public BigDecimal getIncomeTotalTaxExclude() { + return incomeTotalTaxExclude; + } + + public void setIncomeTotalTaxExclude(BigDecimal incomeTotalTaxExclude) { + this.incomeTotalTaxExclude = incomeTotalTaxExclude; + } + + public BigDecimal getCostPurchaseDeviceTaxInclude() { + return costPurchaseDeviceTaxInclude; + } + + public void setCostPurchaseDeviceTaxInclude(BigDecimal costPurchaseDeviceTaxInclude) { + this.costPurchaseDeviceTaxInclude = costPurchaseDeviceTaxInclude; + } + + public BigDecimal getCostPurchaseBuildTaxInclude() { + return costPurchaseBuildTaxInclude; + } + + public void setCostPurchaseBuildTaxInclude(BigDecimal costPurchaseBuildTaxInclude) { + this.costPurchaseBuildTaxInclude = costPurchaseBuildTaxInclude; + } + + public BigDecimal getCostPurchaseServiceTaxInclude() { + return costPurchaseServiceTaxInclude; + } + + public void setCostPurchaseServiceTaxInclude(BigDecimal costPurchaseServiceTaxInclude) { + this.costPurchaseServiceTaxInclude = costPurchaseServiceTaxInclude; + } + + public BigDecimal getCostProjectManageTaxInclude() { + return costProjectManageTaxInclude; + } + + public void setCostProjectManageTaxInclude(BigDecimal costProjectManageTaxInclude) { + this.costProjectManageTaxInclude = costProjectManageTaxInclude; + } + + public BigDecimal getCostPurchaseOtherTaxInclude() { + return costPurchaseOtherTaxInclude; + } + + public void setCostPurchaseOtherTaxInclude(BigDecimal costPurchaseOtherTaxInclude) { + this.costPurchaseOtherTaxInclude = costPurchaseOtherTaxInclude; + } + + public BigDecimal getCostOtherOtherTaxInclude() { + return costOtherOtherTaxInclude; + } + + public void setCostOtherOtherTaxInclude(BigDecimal costOtherOtherTaxInclude) { + this.costOtherOtherTaxInclude = costOtherOtherTaxInclude; + } + + public BigDecimal getCostTotalTaxInclude() { + return costTotalTaxInclude; + } + + public void setCostTotalTaxInclude(BigDecimal costTotalTaxInclude) { + this.costTotalTaxInclude = costTotalTaxInclude; + } + + public BigDecimal getCostPurchaseDeviceTaxExclude() { + return costPurchaseDeviceTaxExclude; + } + + public void setCostPurchaseDeviceTaxExclude(BigDecimal costPurchaseDeviceTaxExclude) { + this.costPurchaseDeviceTaxExclude = costPurchaseDeviceTaxExclude; + } + + public BigDecimal getCostPurchaseBuildTaxExclude() { + return costPurchaseBuildTaxExclude; + } + + public void setCostPurchaseBuildTaxExclude(BigDecimal costPurchaseBuildTaxExclude) { + this.costPurchaseBuildTaxExclude = costPurchaseBuildTaxExclude; + } + + public BigDecimal getCostPurchaseServiceTaxExclude() { + return costPurchaseServiceTaxExclude; + } + + public void setCostPurchaseServiceTaxExclude(BigDecimal costPurchaseServiceTaxExclude) { + this.costPurchaseServiceTaxExclude = costPurchaseServiceTaxExclude; + } + + public BigDecimal getCostPurchaseOtherTaxExclude() { + return costPurchaseOtherTaxExclude; + } + + public void setCostPurchaseOtherTaxExclude(BigDecimal costPurchaseOtherTaxExclude) { + this.costPurchaseOtherTaxExclude = costPurchaseOtherTaxExclude; + } + + public BigDecimal getCostProjectManageTaxExclude() { + return costProjectManageTaxExclude; + } + + public void setCostProjectManageTaxExclude(BigDecimal costProjectManageTaxExclude) { + this.costProjectManageTaxExclude = costProjectManageTaxExclude; + } + + public BigDecimal getCostOtherOtherTaxExclude() { + return costOtherOtherTaxExclude; + } + + public void setCostOtherOtherTaxExclude(BigDecimal costOtherOtherTaxExclude) { + this.costOtherOtherTaxExclude = costOtherOtherTaxExclude; + } + + public BigDecimal getCostTotalTaxExclude() { + return costTotalTaxExclude; + } + + public void setCostTotalTaxExclude(BigDecimal costTotalTaxExclude) { + this.costTotalTaxExclude = costTotalTaxExclude; + } + + public BigDecimal getCostExpropriationTaxExclude() { + return costExpropriationTaxExclude; + } + + public void setCostExpropriationTaxExclude(BigDecimal costExpropriationTaxExclude) { + this.costExpropriationTaxExclude = costExpropriationTaxExclude; + } + + public BigDecimal getCostCompanyManageTaxExclude() { + return costCompanyManageTaxExclude; + } + + public void setCostCompanyManageTaxExclude(BigDecimal costCompanyManageTaxExclude) { + this.costCompanyManageTaxExclude = costCompanyManageTaxExclude; + } + + public BigDecimal getProjectGrossProfit() { + return projectGrossProfit; + } + + public void setProjectGrossProfit(BigDecimal projectGrossProfit) { + this.projectGrossProfit = projectGrossProfit; + } + + public BigDecimal getProjectGrossProfitRate() { + return projectGrossProfitRate; + } + + public void setProjectGrossProfitRate(BigDecimal projectGrossProfitRate) { + this.projectGrossProfitRate = projectGrossProfitRate; + } + + public BigDecimal getProjectContributionProfit() { + return projectContributionProfit; + } + + public void setProjectContributionProfit(BigDecimal projectContributionProfit) { + this.projectContributionProfit = projectContributionProfit; + } + + public BigDecimal getProjectContributionProfitRate() { + return projectContributionProfitRate; + } + + public void setProjectContributionProfitRate(BigDecimal projectContributionProfitRate) { + this.projectContributionProfitRate = projectContributionProfitRate; + } +} diff --git a/src/main/java/cn/palmte/work/bean/StatusEnum.java b/src/main/java/cn/palmte/work/bean/StatusEnum.java new file mode 100644 index 0000000..3b36678 --- /dev/null +++ b/src/main/java/cn/palmte/work/bean/StatusEnum.java @@ -0,0 +1,59 @@ +package cn.palmte.work.bean; + +/** + * @author xiongshiyan at 2021/11/1 , contact me with email yanshixiong@126.com or phone 15208384257 + */ +public enum StatusEnum { + DRAFT(0,"草稿"), + CREATED(1,"项目创建"), + ESTIMATE_ACCOUNTS(5,"概算完成"), + BUDGET_ACCOUNTS(10,"预算完成"), + SETTLE_ACCOUNTS(15,"结算中"), + FINAL_ACCOUNTS(20,"决算完成"); + + private int status; + private String statusDesc; + + private StatusEnum(int status, String statusDesc) { + this.status = status; + this.statusDesc = statusDesc; + } + + public int getStatus() { + return status; + } + + public void setStatus(int status) { + this.status = status; + } + + public String getStatusDesc() { + return statusDesc; + } + + public void setStatusDesc(String statusDesc) { + this.statusDesc = statusDesc; + } + + public static StatusEnum parseStatus(int status){ + if(status == 0){ + return DRAFT; + } + if(status == 1){ + return CREATED; + } + if(status == 5){ + return ESTIMATE_ACCOUNTS; + } + if(status == 10){ + return BUDGET_ACCOUNTS; + } + if(status == 15){ + return SETTLE_ACCOUNTS; + } + if(status == 20){ + return FINAL_ACCOUNTS; + } + throw new IllegalArgumentException("Unkown status:"+status); + } +} diff --git a/src/main/java/cn/palmte/work/bean/TypeEnum.java b/src/main/java/cn/palmte/work/bean/TypeEnum.java new file mode 100644 index 0000000..2f1bfcb --- /dev/null +++ b/src/main/java/cn/palmte/work/bean/TypeEnum.java @@ -0,0 +1,47 @@ +package cn.palmte.work.bean; + +/** + * @author xiongshiyan at 2021/11/1 , contact me with email yanshixiong@126.com or phone 15208384257 + */ +public enum TypeEnum { + PROJECT_INTEGRATION(1,"工程集成类"), + DEVICE_INTEGRATION(2,"设备集成类"), + STRATEGIC_PARTNER(3,"战略合作类"); + + private int type; + private String typeDesc; + + private TypeEnum(int type, String typeDesc) { + this.type = type; + this.typeDesc = typeDesc; + } + + public int getType() { + return type; + } + + public void setType(int type) { + this.type = type; + } + + public String getTypeDesc() { + return typeDesc; + } + + public void setTypeDesc(String typeDesc) { + this.typeDesc = typeDesc; + } + + public static TypeEnum parseType(int type){ + if(type == 1){ + return PROJECT_INTEGRATION; + } + if(type == 2){ + return DEVICE_INTEGRATION; + } + if(type == 3){ + return STRATEGIC_PARTNER; + } + throw new IllegalArgumentException("Unkown type:"+type); + } +} diff --git a/src/main/java/cn/palmte/work/controller/backend/ProjectController.java b/src/main/java/cn/palmte/work/controller/backend/ProjectController.java index 33d8899..75b28f2 100644 --- a/src/main/java/cn/palmte/work/controller/backend/ProjectController.java +++ b/src/main/java/cn/palmte/work/controller/backend/ProjectController.java @@ -1,9 +1,18 @@ package cn.palmte.work.controller.backend; +import cn.palmte.work.bean.EstimateBean; +import cn.palmte.work.model.Dept; import cn.palmte.work.model.DeptRepository; +import cn.palmte.work.model.Project; import cn.palmte.work.service.ProjectService; +import cn.palmte.work.utils.InterfaceUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.format.datetime.DateFormatter; import org.springframework.stereotype.Controller; +import org.springframework.web.bind.WebDataBinder; +import org.springframework.web.bind.annotation.InitBinder; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; @@ -17,6 +26,7 @@ import java.util.concurrent.ConcurrentHashMap; @Controller @RequestMapping("/project") public class ProjectController extends BaseController{ + private static final Logger logger = LoggerFactory.getLogger(ProjectController.class); @Autowired private ProjectService projectService; @@ -35,4 +45,33 @@ public class ProjectController extends BaseController{ model.put("pager",projectService.list(searchInfo,pageNumber,pageSize)); return "admin/project_list"; } + + + /** + * 新增,至项目概算 + */ + @RequestMapping("/add") + public String add(Map model) { + + //TODO 根据登录人的部门 + Dept one = deptRepository.findOne(1); + model.put("dept",one); + + return "admin/project_estimate_input"; + } + @RequestMapping("/estimateSave") + public String estimateSave(Project project, EstimateBean estimateBean, + Map model) { + projectService.estimateSave(project, estimateBean, InterfaceUtil.getAdmin()); + return "redirect:/project/list"; + } + @RequestMapping("/estimateSaveAndApprove") + public String estimateSaveAndApprove(Map model) { + return "redirect:/project/list"; + } + + @InitBinder + public void initBinder(WebDataBinder webDataBinder){ + webDataBinder.addCustomFormatter(new DateFormatter("yyyy-MM-dd")); + } } diff --git a/src/main/java/cn/palmte/work/model/Project.java b/src/main/java/cn/palmte/work/model/Project.java index 66aa5c8..8ea1ac4 100644 --- a/src/main/java/cn/palmte/work/model/Project.java +++ b/src/main/java/cn/palmte/work/model/Project.java @@ -38,7 +38,7 @@ public class Project { */ @Column(name = "approve_status") private int approveStatus; - @Column(name = "approveStatus_desc") + @Column(name = "approve_status_desc") private String approveStatusDesc; /** * 审核人id @@ -78,8 +78,6 @@ public class Project { */ @Column(name = "underwritten_mode") private int underwrittenMode; - @Transient - private String underwrittenModeDesc; /** * 客户名称 */ @@ -268,14 +266,6 @@ public class Project { this.underwrittenMode = underwrittenMode; } - public String getUnderwrittenModeDesc() { - return underwrittenModeDesc; - } - - public void setUnderwrittenModeDesc(String underwrittenModeDesc) { - this.underwrittenModeDesc = underwrittenModeDesc; - } - public String getCustomer() { return customer; } diff --git a/src/main/java/cn/palmte/work/service/ProjectService.java b/src/main/java/cn/palmte/work/service/ProjectService.java index e512412..7c988f4 100644 --- a/src/main/java/cn/palmte/work/service/ProjectService.java +++ b/src/main/java/cn/palmte/work/service/ProjectService.java @@ -1,6 +1,12 @@ package cn.palmte.work.service; +import cn.palmte.work.bean.ApproveStatusEnum; +import cn.palmte.work.bean.EstimateBean; +import cn.palmte.work.bean.StatusEnum; +import cn.palmte.work.bean.TypeEnum; +import cn.palmte.work.model.Admin; import cn.palmte.work.model.Project; +import cn.palmte.work.model.ProjectRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import top.jfunc.common.db.QueryHelper; @@ -8,6 +14,7 @@ import top.jfunc.common.db.bean.Page; import top.jfunc.common.db.utils.Pagination; import top.jfunc.common.utils.StrUtil; +import java.util.Date; import java.util.Map; /** @@ -17,6 +24,8 @@ import java.util.Map; public class ProjectService { @Autowired private Pagination pagination; + @Autowired + private ProjectRepository projectRepository; private QueryHelper getQueryHelper(Map searchInfo, int pageNumber, int pageSize) { @@ -43,20 +52,20 @@ public class ProjectService { /** * 只选择了一个时间的情况,就项目时间包括这个时间的 */ - if(StrUtil.isNotEmpty(searchInfo.get("startTime")) && StrUtil.isEmpty(searchInfo.get("endTime"))){ - String time = searchInfo.get("startTime") + " 00:00:00"; + if(StrUtil.isNotEmpty(searchInfo.get("startDate")) && StrUtil.isEmpty(searchInfo.get("endDate"))){ + String time = searchInfo.get("startDate") + " 00:00:00"; queryHelper.addCondition("p.start_date<=? AND p.end_date>=?", time, time); } - if(StrUtil.isNotEmpty(searchInfo.get("endTime")) && StrUtil.isEmpty(searchInfo.get("startTime"))){ - String time = searchInfo.get("endTime") + " 00:00:00"; + if(StrUtil.isNotEmpty(searchInfo.get("endDate")) && StrUtil.isEmpty(searchInfo.get("startDate"))){ + String time = searchInfo.get("endDate") + " 00:00:00"; queryHelper.addCondition("p.start_date<=? AND p.end_date>=?", time, time); } /** * 两个时间都选了,则包含项目时间 */ - if(StrUtil.isNotEmpty(searchInfo.get("startTime")) && StrUtil.isNotEmpty(searchInfo.get("endTime"))){ - String startTime = searchInfo.get("startTime") + " 00:00:00"; - String endTime = searchInfo.get("endTime") + " 23:59:59"; + if(StrUtil.isNotEmpty(searchInfo.get("startDate")) && StrUtil.isNotEmpty(searchInfo.get("endDate"))){ + String startTime = searchInfo.get("startDate") + " 00:00:00"; + String endTime = searchInfo.get("endDate") + " 23:59:59"; queryHelper.addCondition("p.start_date>=? AND p.end_date<=?", startTime, endTime); } @@ -68,4 +77,31 @@ public class ProjectService { return pagination.paginate(queryHelper.getSql(), Project.class,pageNumber,pageSize); } + /** + * 概算保存项目 + */ + public Project estimateSave(Project project, EstimateBean estimateBean, Admin admin) { + project.setTypeDesc(TypeEnum.parseType(project.getType()).getTypeDesc()); + project.setStatusDesc(StatusEnum.parseStatus(project.getStatus()).getStatusDesc()); + project.setApproveStatus(ApproveStatusEnum.APPROVAL_PENDING.getApproveStatus()); + project.setApproveStatusDesc(ApproveStatusEnum.APPROVAL_PENDING.getApproveStatusDesc()); + project.setCreatorId(admin.getId()); + project.setCreatorName(admin.getUserName()); + + //TODO 审核人通过计算得到 + project.setApproveId(0); + project.setApproveName(""); + + //TODO 获取登录人的部门信息 + project.setDeptId(admin.getId()); + project.setDeptName(""); + + project.setCreateTime(new Date()); + + project = projectRepository.saveAndFlush(project); + + + + return project; + } } diff --git a/src/main/resources/application-local.properties b/src/main/resources/application-local.properties new file mode 100644 index 0000000..4d654fa --- /dev/null +++ b/src/main/resources/application-local.properties @@ -0,0 +1,13 @@ +spring.datasource.url=jdbc:mysql://localhost:3306/fourcal?\ +characterEncoding=UTF8&zeroDateTimeBehavior=convertToNull&serverTimezone=GMT%2b8&rewriteBatchedStatements=true +spring.datasource.username=root +spring.datasource.password=123456 + +spring.jpa.database-platform=org.hibernate.dialect.MySQLDialect +#spring.jpa.properties.hibernate.hbm2ddl.auto=update +spring.jpa.show-sql=true + +admin.domain=https://dzgtest.palmte.cn + +upload.path=/mnt/dzg/image +upload.prefix=https://dzgtest.palmte.cn/upload \ No newline at end of file diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index a481c7b..604d429 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -2,7 +2,7 @@ spring.application.name=fourcal server.port=8282 server.context-path=/fourcal app.version=0.0.1 -spring.profiles.active=dev +spring.profiles.active=local spring.datasource.type=com.alibaba.druid.pool.DruidDataSource spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver diff --git a/src/main/resources/templates/admin/project_estimate_input.ftl b/src/main/resources/templates/admin/project_estimate_input.ftl new file mode 100644 index 0000000..806064e --- /dev/null +++ b/src/main/resources/templates/admin/project_estimate_input.ftl @@ -0,0 +1,543 @@ +<#assign base=request.contextPath /> +<#import "../common/defaultLayout.ftl" as defaultLayout> +<@defaultLayout.layout> + +
+
+
+
项目概算表 /
+
+ +
+ +
+ +
+
+ <#----> + + +
+
*部门名称
+
+ ${dept.name} +
+
+
+ +
+
*项目计划开始时间
+
+
+ + +
+
+
+
+
+
*项目计划结束时间
+
+
+ + +
+
+
+
+ + + +
+
*项目名称
+
+ +
+
+
+ +
+
*项目类型
+
+ +
+
+
+
+
*垫资模式
+
+ +
+
+
+ +
+
*客户名称
+
+ +
+
+
+
+
*终端客户名称
+
+ +
+
+
+
+
*垫资利息
+
+ +
+
+
+
+
*垫资峰值
+
+ +
+
+
+
+
*合同金额
+
+ +
+
+
+
+
*行业场景应用
+
+ +
+
+
+
+
*华智产品金额
+
+ +
+
+
+
+
*紫光其他产品金额
+
+ +
+
+
+
+
*主合同收款条款
+
+ +
+
+
+ +
+ +
+
+
+ 收入 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
类别费用含税金额(元)不含税金额(元)
收入设备类
收入工程类
收入服务类
合计
+ 成本 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
类别费用费用项目含税金额(元)不含税金额(元)
成本采购成本设备
成本采购成本施工
成本采购成本服务
成本采购成本其他
成本项目管理成本项目管理成本
成本其他其他
合计
+ 管理 + + + + + + + + + + + + + + + + + + +
类别费用项目不含税金额(元)
财务费用资金占用成本
公司管理费用
+ + 利润率计算 + + + + + + + + + + + + + + + + + + +
类别不含税金额(元)利润率(%)
项目毛利
项目贡献利润率
+
+ +
+
+
+ +
+ + + +
+ + +
+ + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/templates/admin/project_list.ftl b/src/main/resources/templates/admin/project_list.ftl index 5021df5..fd5a1c1 100644 --- a/src/main/resources/templates/admin/project_list.ftl +++ b/src/main/resources/templates/admin/project_list.ftl @@ -92,14 +92,14 @@
- +
-
@@ -220,10 +220,10 @@ keywordsObj.deptId = $("#deptId").val(); if ($("#type").val()) keywordsObj.type = $("#type").val(); - if ($("#startTime").val()) - keywordsObj.startTime = $("#startTime").val(); - if ($("#endTime").val()) - keywordsObj.endTime = $("#endTime").val(); + if ($("#startDate").val()) + keywordsObj.startDate = $("#startDate").val(); + if ($("#endDate").val()) + keywordsObj.endDate = $("#endDate").val(); var keywords = ""; if (!$.isEmptyObject(keywordsObj)) { keywords = JSON.stringify(keywordsObj);