Browse Source

财务项目概预算信息管理,修改,批量插入,同步插入费用检查信息,删除,同步删除费用检查信息,项目编号查询,多编号空格查询,项目名称模糊查询,点击项目编号查看详细,ftl导出,包含搜索条件导出

[user3] 4 years ago
parent
commit
499a768350
16 changed files with 3905 additions and 0 deletions
  1. 192 0
      src/main/java/com/jeeplus/modules/sg/financial/settlement/entity/CostCheck.java
  2. 378 0
      src/main/java/com/jeeplus/modules/sg/financial/settlement/entity/ProjectBudget.java
  3. 75 0
      src/main/java/com/jeeplus/modules/sg/financial/settlement/mapper/CostCheckMapper.java
  4. 42 0
      src/main/java/com/jeeplus/modules/sg/financial/settlement/mapper/ProjectBudgetMapper.java
  5. 219 0
      src/main/java/com/jeeplus/modules/sg/financial/settlement/mapper/xml/CostCheckMapper.xml
  6. 322 0
      src/main/java/com/jeeplus/modules/sg/financial/settlement/mapper/xml/ProjectBudgetMapper.xml
  7. 170 0
      src/main/java/com/jeeplus/modules/sg/financial/settlement/service/CostCheckService.java
  8. 415 0
      src/main/java/com/jeeplus/modules/sg/financial/settlement/service/ProjectBudgetService.java
  9. 305 0
      src/main/java/com/jeeplus/modules/sg/financial/settlement/web/CostCheckController.java
  10. 428 0
      src/main/java/com/jeeplus/modules/sg/financial/settlement/web/ProjectBudgetController.java
  11. 455 0
      src/main/resources/freemarker/projectBudget.ftl
  12. 353 0
      src/main/webapp/webpage/modules/sg/financial/settlement/costCheckList.js
  13. 77 0
      src/main/webapp/webpage/modules/sg/financial/settlement/costCheckList.jsp
  14. 169 0
      src/main/webapp/webpage/modules/sg/financial/settlement/financeBudgetForm.jsp
  15. 217 0
      src/main/webapp/webpage/modules/sg/financial/settlement/financeBudgetList.js
  16. 88 0
      src/main/webapp/webpage/modules/sg/financial/settlement/financeBudgetList.jsp

+ 192 - 0
src/main/java/com/jeeplus/modules/sg/financial/settlement/entity/CostCheck.java

@@ -0,0 +1,192 @@
+package com.jeeplus.modules.sg.financial.settlement.entity;
+
+import com.jeeplus.core.persistence.DataEntity;
+
+/**
+ * 财务项目费用检查实体类
+ * @author user3
+ * @date 2020-11-25
+ * */
+public class CostCheck extends DataEntity<CostCheck> {
+    /**
+     * 项目编码
+     * */
+    private String projectId;
+    /**
+     * 项目名称
+     * */
+    private String projectName;
+    /**
+     * 施工费应付金额
+     * */
+    private Double constructionAmountDue;
+    /**
+     * 施工费实付金额
+     * */
+    private Double constructionAmountPaid;
+    /**
+     * 施工费差额
+     */
+    private Double constructionCostDifference;
+    /**
+     * 施工费允许少付
+     * */
+    private String constructionUnderPayment;
+    /**
+     * 设计费应付金额
+     * */
+    private Double designAmountDue;
+    /**
+     * 设计费实付金额
+     * */
+    private Double designAmountPaid;
+    /**
+     * 设计费差额
+     */
+    private Double designCostDifference;
+    /**
+     * 设计费允许少付
+     * */
+    private String designUnderPayment;
+    /**
+     * 监理费应付金额
+     * */
+    private Double supervisorAmountDue;
+    /**
+     * 监理费实付金额
+     * */
+    private Double supervisorAmountPaid;
+    /**
+     * 监理费差额
+     */
+    private Double supervisorDifference;
+    /**
+     * 监理费允许少付
+     * */
+    private String supervisorUnderPayment;
+
+    /**
+     * 查询用id集合
+     * */
+    private String[] projectIds;
+
+    public String getProjectId() {
+        return projectId;
+    }
+
+    public void setProjectId(String projectId) {
+        this.projectId = projectId;
+    }
+
+    public String getProjectName() {
+        return projectName;
+    }
+
+    public void setProjectName(String projectName) {
+        this.projectName = projectName;
+    }
+
+    public Double getConstructionAmountDue() {
+        return constructionAmountDue;
+    }
+
+    public void setConstructionAmountDue(Double constructionAmountDue) {
+        this.constructionAmountDue = constructionAmountDue;
+    }
+
+    public Double getConstructionAmountPaid() {
+        return constructionAmountPaid;
+    }
+
+    public void setConstructionAmountPaid(Double constructionAmountPaid) {
+        this.constructionAmountPaid = constructionAmountPaid;
+    }
+
+    public Double getDesignAmountDue() {
+        return designAmountDue;
+    }
+
+    public void setDesignAmountDue(Double designAmountDue) {
+        this.designAmountDue = designAmountDue;
+    }
+
+    public Double getDesignAmountPaid() {
+        return designAmountPaid;
+    }
+
+    public void setDesignAmountPaid(Double designAmountPaid) {
+        this.designAmountPaid = designAmountPaid;
+    }
+
+    public Double getSupervisorAmountDue() {
+        return supervisorAmountDue;
+    }
+
+    public void setSupervisorAmountDue(Double supervisorAmountDue) {
+        this.supervisorAmountDue = supervisorAmountDue;
+    }
+
+    public Double getSupervisorAmountPaid() {
+        return supervisorAmountPaid;
+    }
+
+    public void setSupervisorAmountPaid(Double supervisorAmountPaid) {
+        this.supervisorAmountPaid = supervisorAmountPaid;
+    }
+
+    public String getConstructionUnderPayment() {
+        return constructionUnderPayment;
+    }
+
+    public void setConstructionUnderPayment(String constructionUnderPayment) {
+        this.constructionUnderPayment = constructionUnderPayment;
+    }
+
+    public String getDesignUnderPayment() {
+        return designUnderPayment;
+    }
+
+    public void setDesignUnderPayment(String designUnderPayment) {
+        this.designUnderPayment = designUnderPayment;
+    }
+
+    public String getSupervisorUnderPayment() {
+        return supervisorUnderPayment;
+    }
+
+    public void setSupervisorUnderPayment(String supervisorUnderPayment) {
+        this.supervisorUnderPayment = supervisorUnderPayment;
+    }
+
+    public String[] getProjectIds() {
+        return projectIds;
+    }
+
+    public void setProjectIds(String[] projectIds) {
+        this.projectIds = projectIds;
+    }
+
+    public Double getConstructionCostDifference() {
+        return constructionCostDifference;
+    }
+
+    public void setConstructionCostDifference(Double constructionCostDifference) {
+        this.constructionCostDifference = constructionCostDifference;
+    }
+
+    public Double getDesignCostDifference() {
+        return designCostDifference;
+    }
+
+    public void setDesignCostDifference(Double designCostDifference) {
+        this.designCostDifference = designCostDifference;
+    }
+
+    public Double getSupervisorDifference() {
+        return supervisorDifference;
+    }
+
+    public void setSupervisorDifference(Double supervisorDifference) {
+        this.supervisorDifference = supervisorDifference;
+    }
+}

+ 378 - 0
src/main/java/com/jeeplus/modules/sg/financial/settlement/entity/ProjectBudget.java

@@ -0,0 +1,378 @@
+package com.jeeplus.modules.sg.financial.settlement.entity;
+
+import com.jeeplus.core.persistence.DataEntity;
+
+import java.util.Date;
+
+/**
+ * 财务项目概预算信息实体类
+ *
+ * @author user3
+ * @date 2020-11-24
+ */
+public class ProjectBudget extends DataEntity<ProjectBudget> {
+    /**
+     * 项目名称
+     * */
+    private String projectName;
+    /**
+     * 项目编码
+     * */
+    private String projectId;
+    /**
+     * 设计单位
+     * */
+    private String designUnit;
+    /**
+     * 施工单位
+     * */
+    private String constructionUnit;
+    /**
+     * 建筑地址
+     * */
+    private String buildingAddress;
+    /**
+     * 建筑属性
+     * */
+    private String buildingProperty;
+    /**
+     * 发文总投资
+     * */
+    private String totalInvestment;
+    /**
+     * 开工时间
+     * */
+    private Date startTime;
+    /**
+     * 竣工时间
+     * */
+    private Date stopTime;
+    /**
+     * 批准文号
+     * */
+    private String approvalNumber;
+    /**
+     * 建筑费
+     * */
+    private Double constructionCost;
+    /**
+     * 安装费
+     * */
+    private Double installationCost;
+    /**
+     * 设备购置费
+     * */
+    private Double equipmentCost;
+    /**
+     * 主材费
+     * */
+    private Double materialCost;
+    /**
+     * 设计费
+     * */
+    private Double designCost;
+    /**
+     * 监理费
+     * */
+    private Double supervisorCost;
+    /**
+     * 项目前期工作费
+     * */
+    private Double preliminaryWorkCost;
+    /**
+     * 线路施工赔偿费
+     * */
+    private Double compensationCost;
+    /**
+     * 法人管理费
+     * */
+    private Double administrationCost;
+    /**
+     * 设计合同折扣
+     * */
+    private Double designContractDiscount;
+    /**
+     * 设计典设折扣
+     * */
+    private Double designTypicalDiscount;
+    /**
+     * 监理合同折扣
+     * */
+    private Double supervisorContractDiscount;
+    /**
+     * 项目类型
+     * */
+    private String projectType;
+    /**
+     * 甲供材领退料检查
+     * */
+    private String donorMaterialCheck;
+    /**
+     * 施工费检查
+     * */
+    private String constructionCostCheck;
+    /**
+     * 设计费检查
+     * */
+    private String designCostCheck;
+    /**
+     * 监理费检查
+     * */
+    private String supervisorCostCheck;
+
+    /**
+     * 应付设计费
+     */
+    private String designFeePayable;
+
+    /**
+     * 应付监理费
+     */
+    private String supervisionFeePayable;
+
+
+    /**
+     * 查询用id集合
+     * */
+    private String[] projectIds;
+
+    public String getProjectName() {
+        return projectName;
+    }
+
+    public void setProjectName(String projectName) {
+        this.projectName = projectName;
+    }
+
+    public String getProjectId() {
+        return projectId;
+    }
+
+    public void setProjectId(String projectId) {
+        this.projectId = projectId;
+    }
+
+    public String getDesignUnit() {
+        return designUnit;
+    }
+
+    public void setDesignUnit(String designUnit) {
+        this.designUnit = designUnit;
+    }
+
+    public String getConstructionUnit() {
+        return constructionUnit;
+    }
+
+    public void setConstructionUnit(String constructionUnit) {
+        this.constructionUnit = constructionUnit;
+    }
+
+    public String getBuildingAddress() {
+        return buildingAddress;
+    }
+
+    public void setBuildingAddress(String buildingAddress) {
+        this.buildingAddress = buildingAddress;
+    }
+
+    public String getBuildingProperty() {
+        return buildingProperty;
+    }
+
+    public void setBuildingProperty(String buildingProperty) {
+        this.buildingProperty = buildingProperty;
+    }
+
+    public String getTotalInvestment() {
+        return totalInvestment;
+    }
+
+    public void setTotalInvestment(String totalInvestment) {
+        this.totalInvestment = totalInvestment;
+    }
+
+    public Date getStartTime() {
+        return startTime;
+    }
+
+    public void setStartTime(Date startTime) {
+        this.startTime = startTime;
+    }
+
+    public Date getStopTime() {
+        return stopTime;
+    }
+
+    public void setStopTime(Date stopTime) {
+        this.stopTime = stopTime;
+    }
+
+    public String getApprovalNumber() {
+        return approvalNumber;
+    }
+
+    public void setApprovalNumber(String approvalNumber) {
+        this.approvalNumber = approvalNumber;
+    }
+
+    public Double getConstructionCost() {
+        return constructionCost;
+    }
+
+    public void setConstructionCost(Double constructionCost) {
+        this.constructionCost = constructionCost;
+    }
+
+    public Double getInstallationCost() {
+        return installationCost;
+    }
+
+    public void setInstallationCost(Double installationCost) {
+        this.installationCost = installationCost;
+    }
+
+    public Double getEquipmentCost() {
+        return equipmentCost;
+    }
+
+    public void setEquipmentCost(Double equipmentCost) {
+        this.equipmentCost = equipmentCost;
+    }
+
+    public Double getMaterialCost() {
+        return materialCost;
+    }
+
+    public void setMaterialCost(Double materialCost) {
+        this.materialCost = materialCost;
+    }
+
+    public Double getDesignCost() {
+        return designCost;
+    }
+
+    public void setDesignCost(Double designCost) {
+        this.designCost = designCost;
+    }
+
+    public Double getSupervisorCost() {
+        return supervisorCost;
+    }
+
+    public void setSupervisorCost(Double supervisorCost) {
+        this.supervisorCost = supervisorCost;
+    }
+
+    public Double getPreliminaryWorkCost() {
+        return preliminaryWorkCost;
+    }
+
+    public void setPreliminaryWorkCost(Double preliminaryWorkCost) {
+        this.preliminaryWorkCost = preliminaryWorkCost;
+    }
+
+    public Double getCompensationCost() {
+        return compensationCost;
+    }
+
+    public void setCompensationCost(Double compensationCost) {
+        this.compensationCost = compensationCost;
+    }
+
+    public Double getAdministrationCost() {
+        return administrationCost;
+    }
+
+    public void setAdministrationCost(Double administrationCost) {
+        this.administrationCost = administrationCost;
+    }
+
+    public Double getDesignContractDiscount() {
+        return designContractDiscount;
+    }
+
+    public void setDesignContractDiscount(Double designContractDiscount) {
+        this.designContractDiscount = designContractDiscount;
+    }
+
+    public Double getDesignTypicalDiscount() {
+        return designTypicalDiscount;
+    }
+
+    public void setDesignTypicalDiscount(Double designTypicalDiscount) {
+        this.designTypicalDiscount = designTypicalDiscount;
+    }
+
+    public Double getSupervisorContractDiscount() {
+        return supervisorContractDiscount;
+    }
+
+    public void setSupervisorContractDiscount(Double supervisorContractDiscount) {
+        this.supervisorContractDiscount = supervisorContractDiscount;
+    }
+
+    public String getProjectType() {
+        return projectType;
+    }
+
+    public void setProjectType(String projectType) {
+        this.projectType = projectType;
+    }
+
+    public String getDonorMaterialCheck() {
+        return donorMaterialCheck;
+    }
+
+    public void setDonorMaterialCheck(String donorMaterialCheck) {
+        this.donorMaterialCheck = donorMaterialCheck;
+    }
+
+    public String getConstructionCostCheck() {
+        return constructionCostCheck;
+    }
+
+    public void setConstructionCostCheck(String constructionCostCheck) {
+        this.constructionCostCheck = constructionCostCheck;
+    }
+
+    public String getDesignCostCheck() {
+        return designCostCheck;
+    }
+
+    public void setDesignCostCheck(String designCostCheck) {
+        this.designCostCheck = designCostCheck;
+    }
+
+    public String getSupervisorCostCheck() {
+        return supervisorCostCheck;
+    }
+
+    public void setSupervisorCostCheck(String supervisorCostCheck) {
+        this.supervisorCostCheck = supervisorCostCheck;
+    }
+
+    public String getDesignFeePayable() {
+        return designFeePayable;
+    }
+
+    public void setDesignFeePayable(String designFeePayable) {
+        this.designFeePayable = designFeePayable;
+    }
+
+    public String getSupervisionFeePayable() {
+        return supervisionFeePayable;
+    }
+
+    public void setSupervisionFeePayable(String supervisionFeePayable) {
+        this.supervisionFeePayable = supervisionFeePayable;
+    }
+
+    public String[] getProjectIds() {
+        return projectIds;
+    }
+
+    public void setProjectIds(String[] projectIds) {
+        this.projectIds = projectIds;
+    }
+}

+ 75 - 0
src/main/java/com/jeeplus/modules/sg/financial/settlement/mapper/CostCheckMapper.java

@@ -0,0 +1,75 @@
+/**
+ * Copyright &copy; 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.modules.sg.financial.settlement.mapper;
+
+import com.jeeplus.core.persistence.BaseMapper;
+import com.jeeplus.core.persistence.annotation.MyBatisMapper;
+import com.jeeplus.modules.sg.financial.settlement.entity.CostCheck;
+import com.jeeplus.modules.sg.financial.settlement.entity.ProjectBudget;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * @author user3
+ * @date 2020-11-24
+ * 财费用检查表mapper
+ * */
+@MyBatisMapper
+public interface CostCheckMapper extends BaseMapper<CostCheck> {
+    /**
+     * 费用检查信息(批量导入插入)
+     * @param list 导入参数
+     * @return 成功导入的条数
+     * */
+    int insertList(@Param("list") List<ProjectBudget> list);
+
+
+    /**
+     * 费用检查信息(批量导入更新)
+     * @param list 导入参数
+     * @return 成功导入的条数
+     * */
+    int updateList(@Param("list") List<ProjectBudget> list);
+
+    /**
+     * 查询库中所有的项目编号,用于比对插入时是否修改
+     * @return 所有项目编号
+     * */
+    List<CostCheck> findAllProjectId();
+
+    /**
+     * 费用检查单挑更新
+     * @param projectBudget 修改页面提交的值
+     * */
+    void updateDesignSup(ProjectBudget projectBudget);
+
+    /**
+     * 导入送审单获取施工费应付金额
+     * @param list 导入list数据集合
+     * @return 成功修改的行数
+     * */
+    int updateConstructionList(@Param("list") List<CostCheck> list);
+
+    /**
+     * 修改设计费允许少付
+     * @param costCheck 修改数据实体
+     * @return 成功修改的行数
+     * */
+    int updateDes(CostCheck costCheck);
+
+    /**
+     * 修改施工费允许少付
+     * @param costCheck 修改数据实体
+     * @return 成功修改的行数
+     * */
+    int updateCon(CostCheck costCheck);
+
+    /**
+     * 修改监理费允许少付
+     * @param costCheck 修改数据实体
+     * @return 成功修改的行数
+     * */
+    int updateSup(CostCheck costCheck);
+}

+ 42 - 0
src/main/java/com/jeeplus/modules/sg/financial/settlement/mapper/ProjectBudgetMapper.java

@@ -0,0 +1,42 @@
+/**
+ * Copyright &copy; 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.modules.sg.financial.settlement.mapper;
+
+import com.jeeplus.core.persistence.BaseMapper;
+import com.jeeplus.core.persistence.annotation.MyBatisMapper;
+import com.jeeplus.modules.sg.financial.settlement.entity.MaintainData;
+import com.jeeplus.modules.sg.financial.settlement.entity.ProjectBudget;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * @author user3
+ * @date 2020-11-24
+ * 财务项目概预算信息表mapper
+ * */
+@MyBatisMapper
+public interface ProjectBudgetMapper extends BaseMapper<ProjectBudget> {
+	/**
+	 * 项目概预算信息(批量导入插入)
+	 * @param list 导入参数
+	 * @return 成功导入的条数
+	 * */
+	int insertList(@Param("list") List<ProjectBudget> list);
+
+	/**
+	 * 项目概预算信息(批量导入更新)
+	 * @param list 导入参数
+	 * @return 成功导入的条数
+	 * */
+	int updateList(@Param("list") List<ProjectBudget> list);
+
+	/**
+	 * 查询库中所有的项目编号,用于比对插入时是否修改
+	 * @return 所有项目编号
+	 * */
+	List<ProjectBudget> findAllProjectId();
+
+
+}

+ 219 - 0
src/main/java/com/jeeplus/modules/sg/financial/settlement/mapper/xml/CostCheckMapper.xml

@@ -0,0 +1,219 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.jeeplus.modules.sg.financial.settlement.mapper.CostCheckMapper">
+    
+	<sql id="infoColumns">
+		a.id as "id",
+		a.create_by AS "createBy.id",
+		a.create_date AS "createDate",
+		a.update_by AS "updateBy.id",
+		a.update_date AS "updateDate",
+		a.remarks AS "remarks",
+		a.del_flag AS "delFlag",
+		a.project_id AS "projectId",
+		a.project_name AS "projectName",
+		a.construction_amount_due AS "constructionAmountDue",
+		a.construction_amount_paid AS "constructionAmountPaid",
+		a.design_amount_due AS "designAmountDue",
+		a.design_amount_paid AS "designAmountPaid",
+		a.supervisor_amount_due AS "supervisorAmountDue",
+		a.supervisor_amount_paid AS "supervisorAmountPaid",
+		a.construction_underpayment AS "constructionUnderPayment",
+		a.design_underpayment AS "designUnderPayment",
+		a.supervisor_underpayment AS "supervisorUnderPayment"
+	</sql>
+
+    
+	<select id="get" resultType="CostCheck" >
+		SELECT 
+			<include refid="infoColumns"/>
+		FROM finance_project_cost_check a
+		WHERE a.project_id = #{id}
+	</select>
+	
+	<select id="findList" resultType="CostCheck" >
+		SELECT 
+			<include refid="infoColumns"/>
+		FROM finance_project_cost_check a
+		<where>
+			a.del_flag = #{DEL_FLAG_NORMAL}
+			${dataScope}
+			<if test="projectIds != null ">
+				AND a.project_id in
+                <foreach collection="projectIds" index="index" item="item" open="(" separator="," close=")">
+                #{item}
+                </foreach>
+			</if>
+			<if test="projectId != null and projectId != ''">
+				AND a.project_id = #{projectId}
+			</if>
+			<if test="projectName !=null and projectName != ''">
+				and a.project_name like CONCAT(CONCAT('%',#{projectName},'%'))
+			</if>
+		</where>
+		<choose>
+			<when test="page !=null and page.orderBy != null and page.orderBy != ''">
+				ORDER BY ${page.orderBy}
+			</when>
+			<otherwise>
+				ORDER BY a.update_date DESC
+			</otherwise>
+		</choose>
+	</select>
+	
+	<select id="findAllList" resultType="CostCheck" >
+		SELECT 
+			<include refid="infoColumns"/>
+		FROM finance_project_cost_check a
+		<where>
+			a.del_flag = #{DEL_FLAG_NORMAL}
+			${dataScope}
+		</where>		
+		<choose>
+			<when test="page !=null and page.orderBy != null and page.orderBy != ''">
+				ORDER BY ${page.orderBy}
+			</when>
+			<otherwise>
+				ORDER BY a.update_date DESC
+			</otherwise>
+		</choose>
+	</select>
+	
+	<insert id="insert">
+		INSERT INTO finance_project_cost_check(
+		    id,
+			create_by,
+			create_date,
+			update_by,
+			update_date,
+			remarks,
+			del_flag,
+			project_name,
+			project_id
+		) VALUES (
+		    #{id},
+			#{createBy.id},
+			#{createDate},
+			#{updateBy.id},
+			#{updateDate},
+			#{remarks},
+			#{delFlag},
+			#{projectName},
+			#{projectId}
+		)
+	</insert>
+	<insert id="insertList">
+		INSERT INTO finance_project_cost_check(
+			id,
+			create_by,
+			create_date,
+			update_by,
+			update_date,
+			remarks,
+			del_flag,
+			project_name,
+			project_id,
+			design_amount_due,
+		 	supervisor_amount_due,
+			construction_underpayment,
+			design_underpayment,
+			supervisor_underpayment
+		) VALUES
+		<foreach collection="list" item="item" index="index" separator="," >
+			(
+			 #{item.id},
+			 #{item.createBy.id},
+			 #{item.createDate},
+			 #{item.updateBy.id},
+			 #{item.updateDate},
+			 #{item.remarks},
+			 #{item.delFlag},
+			 #{item.projectName},
+			 #{item.projectId},
+			 #{item.designFeePayable},
+			 #{item.supervisionFeePayable},
+			 '0',
+			 '0',
+			 '0'
+	 		)
+		</foreach>
+	</insert>
+
+
+	<update id="update">
+		UPDATE finance_project_cost_check SET
+			project_id = #{projectId}
+		WHERE id = #{id}
+	</update>
+	
+	
+	<!--物理删除-->
+	<delete id="delete">
+		DELETE FROM finance_project_cost_check
+		WHERE project_id = #{projectId}
+	</delete>
+
+
+	<!--逻辑删除-->
+	<update id="deleteByLogic">
+		UPDATE finance_project_cost_check SET
+			del_flag = #{DEL_FLAG_DELETE}
+		WHERE project_id = #{id}
+	</update>
+	<update id="updateList">
+		<foreach collection="list" item="item" index="index">
+			update finance_project_cost_check set
+		  	update_by = #{item.updateBy.id},
+			update_date = #{item.createDate},
+			design_amount_due = #{item.designFeePayable},
+			supervisor_amount_due = #{item.supervisionFeePayable}
+			where project_id = #{item.projectId};
+		</foreach>
+	</update>
+	<update id="updateDesignSup">
+		update finance_project_cost_check set
+		  update_by = #{updateBy.id},
+		  update_date = #{createDate},
+		  design_amount_due = #{designFeePayable},
+		  supervisor_amount_due = #{supervisionFeePayable}
+		where project_id = #{projectId};
+	</update>
+	<update id="updateConstructionList">
+		<foreach collection="list" item="item" index="index">
+			update finance_project_cost_check set
+			  update_by = #{item.updateBy.id},
+			  update_date = #{item.createDate},
+			  construction_amount_due = #{item.constructionAmountDue}
+			where project_id = #{item.projectId};
+		</foreach>
+	</update>
+
+	<update id="updateSup">
+		update finance_project_cost_check
+		set supervisor_underpayment = #{supervisorUnderPayment}
+		where project_id = #{projectId}
+	</update>
+
+	<update id="updateCon">
+		update finance_project_cost_check
+		set construction_underpayment = #{constructionUnderPayment}
+		where project_id = #{projectId}
+	</update>
+
+	<update id="updateDes">
+		update finance_project_cost_check
+		set design_underpayment = #{designUnderPayment}
+		where project_id = #{projectId}
+	</update>
+
+	<!-- 根据实体名称和字段名称和字段值获取唯一记录 -->
+	<select id="findUniqueByProperty" resultType="TestNote" statementType="STATEMENT">
+		select * FROM finance_project_cost_check  where ${propertyName} = '${value}'
+	</select>
+
+	<select id="findAllProjectId" resultType="com.jeeplus.modules.sg.financial.settlement.entity.CostCheck">
+		select project_id
+		from finance_project_cost_check;
+	</select>
+
+</mapper>

+ 322 - 0
src/main/java/com/jeeplus/modules/sg/financial/settlement/mapper/xml/ProjectBudgetMapper.xml

@@ -0,0 +1,322 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.jeeplus.modules.sg.financial.settlement.mapper.ProjectBudgetMapper">
+    
+	<sql id="infoColumns">
+		a.id as "id",
+		a.create_by AS "createBy.id",
+		a.create_date AS "createDate",
+		a.update_by AS "updateBy.id",
+		a.update_date AS "updateDate",
+		a.remarks AS "remarks",
+		a.del_flag AS "delFlag",
+		project_name as "projectName",
+		project_id as "projectId",
+		design_unit as "designUnit",
+		construction_unit as "constructionUnit",
+		building_address as "buildingAddress",
+		building_property as "buildingProperty",
+		total_investment as "totalInvestment",
+		start_time as "startTime",
+		stop_time as "stopTime",
+		approval_number as "approvalNumber",
+		construction_cost as "constructionCost",
+		installation_cost as "installationCost",
+		equipment_cost as "equipmentCost",
+		material_cost as "materialCost",
+		design_cost as "designCost",
+		supervisor_cost as "supervisorCost",
+		preliminary_work_cost as "preliminaryWorkCost",
+		compensation_cost as "compensationCost",
+		administration_cost as "administrationCost",
+		design_contract_discount as "designContractDiscount",
+		design_typical_discount as "designTypicalDiscount",
+		supervisor_contract_discount as "supervisorContractDiscount",
+		project_type as "projectType"
+	</sql>
+
+    
+	<select id="get" resultType="ProjectBudget" >
+		SELECT 
+			<include refid="infoColumns"/>
+		FROM finance_project_budget a
+		WHERE a.project_id = #{id}
+	</select>
+	
+	<select id="findList" resultType="ProjectBudget" >
+		SELECT 
+			<include refid="infoColumns"/>
+		FROM finance_project_budget a
+		<where>
+			a.del_flag = #{DEL_FLAG_NORMAL}
+			${dataScope}
+			<if test="projectIds != null ">
+				AND a.project_id in
+                <foreach collection="projectIds" index="index" item="item" open="(" separator="," close=")">
+                #{item}
+                </foreach>
+			</if>
+			<if test="projectId != null and projectId != ''">
+				AND a.project_id = #{projectId}
+			</if>
+			<if test="projectName !=null and projectName != ''">
+				and a.project_name like CONCAT(CONCAT('%',#{projectName},'%'))
+			</if>
+		</where>
+		<choose>
+			<when test="page !=null and page.orderBy != null and page.orderBy != ''">
+				ORDER BY ${page.orderBy}
+			</when>
+			<otherwise>
+				ORDER BY a.update_date DESC
+			</otherwise>
+		</choose>
+	</select>
+	
+	<select id="findAllList" resultType="ProjectBudget" >
+		SELECT 
+			<include refid="infoColumns"/>
+		FROM finance_project_budget a
+		<where>
+			a.del_flag = #{DEL_FLAG_NORMAL}
+			${dataScope}
+		</where>		
+		<choose>
+			<when test="page !=null and page.orderBy != null and page.orderBy != ''">
+				ORDER BY ${page.orderBy}
+			</when>
+			<otherwise>
+				ORDER BY a.update_date DESC
+			</otherwise>
+		</choose>
+	</select>
+
+	<select id="findAllProjectId" resultType="com.jeeplus.modules.sg.financial.settlement.entity.ProjectBudget">
+		select project_id
+		from finance_project_budget;
+	</select>
+	
+	<insert id="insert">
+		INSERT INTO finance_project_budget(
+		    id,
+			create_by,
+			create_date,
+			update_by,
+			update_date,
+			remarks,
+			del_flag,
+			project_name,
+			project_id,
+			design_unit,
+			construction_unit,
+			building_address,
+			building_property,
+			total_investment,
+			start_time,
+			stop_time,
+			approval_number,
+			construction_cost,
+			installation_cost,
+			equipment_cost,
+			material_cost,
+			design_cost,
+			supervisor_cost,
+			preliminary_work_cost,
+			compensation_cost,
+			administration_cost,
+			design_contract_discount,
+			design_typical_discount,
+			supervisor_contract_discount,
+			project_type
+		) VALUES (
+		    #{id},
+			#{createBy.id},
+			#{createDate},
+			#{updateBy.id},
+			#{updateDate},
+			#{remarks},
+			#{delFlag},
+			#{projectName},
+			#{projectId},
+			#{designUnit},
+			#{constructionUnit},
+			#{buildingAddress},
+			#{buildingProperty},
+			#{totalInvestment},
+			#{startTime},
+			#{stopTime},
+			#{approvalNumber},
+			#{constructionCost},
+			#{installationCost},
+			#{equipmentCost},
+			#{materialCost},
+			#{designCost},
+			#{supervisorCost},
+			#{preliminaryWorkCost},
+			#{compensationCost},
+			#{administrationCost},
+			#{designContractDiscount},
+			#{designTypicalDiscount},
+			#{supervisorContractDiscount},
+			#{projectType}
+		)
+	</insert>
+	<insert id="insertList">
+		INSERT INTO finance_project_budget(
+			id,
+			create_by,
+			create_date,
+			update_by,
+			update_date,
+			remarks,
+			del_flag,
+			project_name,
+			project_id,
+			design_unit,
+			construction_unit,
+			building_address,
+			building_property,
+			total_investment,
+			start_time,
+			stop_time,
+			approval_number,
+			construction_cost,
+			installation_cost,
+			equipment_cost,
+			material_cost,
+			design_cost,
+			supervisor_cost,
+			preliminary_work_cost,
+			compensation_cost,
+			administration_cost,
+			design_contract_discount,
+			design_typical_discount,
+			supervisor_contract_discount,
+			project_type
+		) VALUES
+		<foreach collection="list" item="item" index="index" separator="," >
+			(
+			 #{item.id},
+			 #{item.createBy.id},
+			 #{item.createDate},
+			 #{item.updateBy.id},
+			 #{item.updateDate},
+			 #{item.remarks},
+			 #{item.delFlag},
+			 #{item.projectName},
+			 #{item.projectId},
+			 #{item.designUnit},
+			 #{item.constructionUnit},
+			 #{item.buildingAddress},
+			 #{item.buildingProperty},
+			 #{item.totalInvestment},
+			 #{item.startTime},
+			 #{item.stopTime},
+			 #{item.approvalNumber},
+			 #{item.constructionCost},
+			 #{item.installationCost},
+			 #{item.equipmentCost},
+			 #{item.materialCost},
+			 #{item.designCost},
+			 #{item.supervisorCost},
+			 #{item.preliminaryWorkCost},
+			 #{item.compensationCost},
+			 #{item.administrationCost},
+			 #{item.designContractDiscount},
+			 #{item.designTypicalDiscount},
+			 #{item.supervisorContractDiscount},
+			 #{item.projectType}
+	 		)
+		</foreach>
+	</insert>
+
+
+	<update id="update">
+		UPDATE finance_project_budget SET
+		  update_by = #{updateBy.id},
+		  update_date = #{createDate},
+		  project_name = #{projectName},
+		  design_unit = #{designUnit},
+		  construction_unit = #{constructionUnit},
+		  building_address = #{buildingAddress},
+		  building_property = #{buildingProperty},
+		  total_investment = #{totalInvestment},
+		  start_time = #{startTime},
+		  stop_time = #{stopTime},
+		  approval_number = #{approvalNumber},
+		  construction_cost = #{constructionCost},
+		  installation_cost = #{installationCost},
+		  equipment_cost = #{equipmentCost},
+		  material_cost = #{materialCost},
+		  design_cost = #{designCost},
+		  supervisor_cost = #{supervisorCost},
+		  preliminary_work_cost = #{preliminaryWorkCost},
+		  compensation_cost = #{compensationCost},
+		  administration_cost = #{administrationCost},
+		  design_contract_discount = #{designContractDiscount},
+		  design_typical_discount = #{designTypicalDiscount},
+		  supervisor_contract_discount = #{supervisorContractDiscount},
+		  project_type = #{projectType},
+		  donor_material_check = '0',
+		  construction_cost_check = '0',
+		  design_cost_check = '0',
+		  supervisor_cost_check = '0'
+		where project_id = #{projectId};
+	</update>
+	
+	
+	<!--物理删除-->
+	<delete id="delete">
+		DELETE FROM finance_project_budget
+		WHERE project_id = #{projectId}
+	</delete>
+
+
+	<!--逻辑删除-->
+	<update id="deleteByLogic">
+		UPDATE finance_project_budget SET
+			del_flag = #{DEL_FLAG_DELETE}
+		WHERE project_id = #{id}
+	</update>
+	<update id="updateList">
+		<foreach collection="list" item="item" index="index">
+			update finance_project_budget set
+			update_by = #{item.updateBy.id},
+			update_date = #{item.createDate},
+			project_name = #{item.projectName},
+			design_unit = #{item.designUnit},
+			construction_unit = #{item.constructionUnit},
+			building_address = #{item.buildingAddress},
+			building_property = #{item.buildingProperty},
+			total_investment = #{item.totalInvestment},
+			start_time = #{item.startTime},
+			stop_time = #{item.stopTime},
+			approval_number = #{item.approvalNumber},
+			construction_cost = #{item.constructionCost},
+			installation_cost = #{item.installationCost},
+			equipment_cost = #{item.equipmentCost},
+			material_cost = #{item.materialCost},
+			design_cost = #{item.designCost},
+			supervisor_cost = #{item.supervisorCost},
+			preliminary_work_cost = #{item.preliminaryWorkCost},
+			compensation_cost = #{item.compensationCost},
+			administration_cost = #{item.administrationCost},
+			design_contract_discount = #{item.designContractDiscount},
+			design_typical_discount = #{item.designTypicalDiscount},
+			supervisor_contract_discount = #{item.supervisorContractDiscount},
+			project_type = #{item.projectType},
+			donor_material_check = '0',
+			construction_cost_check = '0',
+			design_cost_check = '0',
+			supervisor_cost_check = '0'
+			where project_id = #{item.projectId};
+		</foreach>
+
+	</update>
+
+	<!-- 根据实体名称和字段名称和字段值获取唯一记录 -->
+	<select id="findUniqueByProperty" resultType="TestNote" statementType="STATEMENT">
+		select * FROM finance_project_budget  where ${propertyName} = '${value}'
+	</select>
+
+</mapper>

+ 170 - 0
src/main/java/com/jeeplus/modules/sg/financial/settlement/service/CostCheckService.java

@@ -0,0 +1,170 @@
+/**
+ * Copyright &copy; 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.modules.sg.financial.settlement.service;
+
+import com.jeeplus.core.persistence.Page;
+import com.jeeplus.core.service.CrudService;
+import com.jeeplus.modules.sg.financial.settlement.entity.CostCheck;
+import com.jeeplus.modules.sg.financial.settlement.entity.ProjectBudget;
+import com.jeeplus.modules.sg.financial.settlement.mapper.CostCheckMapper;
+import com.jeeplus.modules.sg.financial.settlement.mapper.ProjectBudgetMapper;
+import org.apache.ibatis.annotations.Param;
+import org.apache.poi.hssf.util.HSSFColor;
+import org.apache.poi.ss.usermodel.CellStyle;
+import org.apache.poi.ss.usermodel.Font;
+import org.apache.poi.ss.usermodel.IndexedColors;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.URLEncoder;
+import java.util.*;
+
+/**
+ * 费用检查表Service
+ */
+@Service
+@Transactional(readOnly = true)
+public class CostCheckService extends CrudService<CostCheckMapper, CostCheck> {
+
+	@Autowired
+	private CostCheckMapper costCheckMapper;
+
+	public static Map<String, CellStyle> styles;
+
+	@Override
+	public CostCheck get(String id) {
+		return super.get(id);
+	}
+
+	@Override
+	public List<CostCheck> findList(CostCheck costCheck) {
+		return super.findList(costCheck);
+	}
+
+
+	@Override
+	public Page<CostCheck> findPage(Page<CostCheck> page, CostCheck costCheck) {
+		return super.findPage(page, costCheck);
+	}
+
+	@Override
+	@Transactional(readOnly = false)
+	public void save(CostCheck costCheck) {
+		super.save(costCheck);
+	}
+
+	@Transactional(readOnly = false)
+	public void updateDesignSup(ProjectBudget projectBudget) {
+		costCheckMapper.updateDesignSup(projectBudget);
+	}
+
+	@Override
+	@Transactional(readOnly = false)
+	public void delete(CostCheck costCheck) {
+		super.delete(costCheck);
+	}
+
+	@Transactional(readOnly = false)
+	public String insertList(@Param("list") List<ProjectBudget> list) {
+		String str = "";
+		List<ProjectBudget> insertList = new ArrayList<>();
+		List<ProjectBudget> updateList = new ArrayList<>();
+		//查找所有的费用检查信息
+		List<CostCheck> allList = costCheckMapper.findAllProjectId();
+		if (allList.size() > 0) {
+			for (ProjectBudget b : list) {
+				for (CostCheck a : allList) {
+					if (a.getProjectId().equals(b.getProjectId())) {
+						b.preInsert();
+						updateList.add(b);
+					}
+				}
+			}
+			//获得需要更新的项目信息,其它项目信息则插入
+			Iterator<ProjectBudget> iterator = list.iterator();
+			while (iterator.hasNext()) {
+				ProjectBudget next = iterator.next();
+				for (ProjectBudget u :
+						updateList) {
+					if (next.getProjectId().equals(u.getProjectId())) {
+						iterator.remove();
+					}
+				}
+			}
+			if (list.size() > 0) {
+				for (ProjectBudget a :
+						list) {
+					insertList.add(a);
+				}
+			}
+			if (insertList.size() > 0) {
+				for (ProjectBudget p :
+						insertList) {
+					p.preInsert();
+				}
+			}
+		} else {
+			for (ProjectBudget b : list) {
+				b.preInsert();
+				insertList.add(b);
+			}
+		}
+		//插入
+		if (insertList.size() > 0) {
+			costCheckMapper.insertList(insertList);
+			str += "费用检查信息插入" + insertList.size() + "条-";
+		}
+		//更新
+		if (updateList.size() > 0) {
+			costCheckMapper.updateList(updateList);
+			str += "费用检查信息更新" + updateList.size() + "条-";
+		}
+		return str;
+	}
+
+	@Transactional(readOnly = false)
+	public String insertConstructionList(@Param("list") List<CostCheck> list) {
+		String str = "";
+		List<CostCheck> updateList = new ArrayList<>();
+		List<CostCheck> allList = costCheckMapper.findAllProjectId();
+		for (CostCheck costCheck : allList) {
+			for (CostCheck c : list) {
+				if (costCheck.getProjectId().equals(c.getProjectId())) {
+					c.preInsert();
+					updateList.add(c);
+				}
+			}
+		}
+		if (updateList.size() > 0) {
+			costCheckMapper.updateConstructionList(updateList);
+			str += "概预算信息更新" + updateList.size() + "条";
+		} else {
+			str += "概预算信息更新0条";
+		}
+		return str;
+	}
+
+	@Transactional(readOnly = false)
+	public void updateDes(CostCheck costCheck) {
+		costCheckMapper.updateDes(costCheck);
+	}
+
+	@Transactional(readOnly = false)
+	public void updateCon(CostCheck costCheck) {
+		costCheckMapper.updateCon(costCheck);
+	}
+
+	@Transactional(readOnly = false)
+	public void updateSup(CostCheck costCheck) {
+		costCheckMapper.updateSup(costCheck);
+	}
+}

+ 415 - 0
src/main/java/com/jeeplus/modules/sg/financial/settlement/service/ProjectBudgetService.java

@@ -0,0 +1,415 @@
+/**
+ * Copyright &copy; 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.modules.sg.financial.settlement.service;
+
+import com.jeeplus.common.utils.DateUtils;
+import com.jeeplus.core.persistence.Page;
+import com.jeeplus.core.service.CrudService;
+import com.jeeplus.modules.sg.financial.settlement.entity.MaintainData;
+import com.jeeplus.modules.sg.financial.settlement.entity.ProjectBudget;
+import com.jeeplus.modules.sg.financial.settlement.mapper.DataMaintenanceMapper;
+import com.jeeplus.modules.sg.financial.settlement.mapper.ProjectBudgetMapper;
+import org.apache.poi.hssf.util.HSSFColor;
+import org.apache.poi.ss.usermodel.*;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.URLEncoder;
+import java.util.*;
+
+
+@Service
+@Transactional(readOnly = true)
+public class ProjectBudgetService extends CrudService<ProjectBudgetMapper, ProjectBudget> {
+
+	@Autowired
+	private ProjectBudgetMapper projectBudgetMapper;
+
+	public static Map<String, CellStyle> styles;
+
+	@Override
+	public ProjectBudget get(String id) {
+		return super.get(id);
+	}
+	
+	@Override
+	public List<ProjectBudget> findList(ProjectBudget projectBudget) {
+		return super.findList(projectBudget);
+	}
+
+	/**
+	 * 查询概预算分页数据,这里实际调用mapper的findList方法
+	 * projectId查询,projectIds精准匹配
+	 * @param page 分页对象
+	 * @param projectBudget
+	 * @return
+	 */
+	@Override
+	public Page<ProjectBudget> findPage(Page<ProjectBudget> page, ProjectBudget projectBudget) {
+		return super.findPage(page, projectBudget);
+	}
+
+	@Transactional(readOnly = false)
+	public void update(ProjectBudget projectBudget) {
+		projectBudgetMapper.update(projectBudget);
+	}
+
+	@Override
+	@Transactional(readOnly = false)
+	public void save(ProjectBudget projectBudget) {
+		super.save(projectBudget);
+	}
+
+	/**
+	 * 保存财务项目概预算信息情况
+	 * */
+	@Transactional(readOnly = false)
+	public String saveList(List<ProjectBudget> list) {
+		String str = "";
+		List<ProjectBudget> insertList = new ArrayList<>();
+		List<ProjectBudget> updateList = new ArrayList<>();
+		//查询出所有现在存在的项目概预算信息,判断项目编号是否存在,存在的更新,不存在的插入
+		List<ProjectBudget> allList = projectBudgetMapper.findAllProjectId();
+		if (allList.size() > 0) {
+			for(ProjectBudget b : list){
+				for (ProjectBudget a : allList) {
+					if (a.getProjectId().equals(b.getProjectId())) {
+						b.preInsert();
+						updateList.add(b);
+					}
+				}
+			}
+			//获得需要更新的项目信息,其它项目信息则插入
+			Iterator<ProjectBudget> iterator = list.iterator();
+			while (iterator.hasNext()) {
+				ProjectBudget next = iterator.next();
+				for (ProjectBudget u :
+						updateList) {
+					if (next.getProjectId().equals(u.getProjectId())) {
+						iterator.remove();
+					}
+				}
+			}
+			if (list.size() > 0) {
+				for (ProjectBudget a :
+						list) {
+					insertList.add(a);
+				}
+			}
+			if (insertList.size() > 0) {
+				for (ProjectBudget p :
+						insertList) {
+					p.preInsert();
+				}
+			}
+		}else {
+			for(ProjectBudget b : list){
+				b.preInsert();
+				insertList.add(b);
+			}
+		}
+
+		//插入
+		if (insertList.size() > 0) {
+			projectBudgetMapper.insertList(insertList);
+			str += "概预算信息插入" + insertList.size() + "条-";
+		}
+		//更新
+		if (updateList.size() > 0) {
+			projectBudgetMapper.updateList(updateList);
+			str += "概预算信息更新" + updateList.size() + "条-";
+		}
+		return str;
+	}
+
+	@Override
+	@Transactional(readOnly = false)
+	public void delete(ProjectBudget projectBudget) {
+		super.delete(projectBudget);
+	}
+
+/*
+	public void export(ProjectBudget projectBudget , HttpServletResponse response){
+		InputStream inputStream = null;
+		XSSFWorkbook workbook = null;
+		try {
+			String path = (getSispPath() + "excelmodel/maintainDataExport.xlsx");
+			List<ProjectBudget> dataList = projectBudgetMapper.findList(projectBudget);
+//			String path = "D:/IDEA workspace/sg_audit/target/classes/freemarker/excelmodel/maintainDataExport.xlsx";
+			File file = new File(path);
+			inputStream = new FileInputStream(file);// 将excel文件转为输入流
+			workbook = new XSSFWorkbook(inputStream);// 创建个workbook
+			styles = createStyles(workbook);  //创建样式
+			int rowNum = 3;
+			Sheet sheet = workbook.getSheetAt(0);
+			for (Iterator<ProjectBudget> it = dataList.iterator(); it.hasNext(); ) {
+				ProjectBudget data = it.next();
+				if (data == null) {
+					continue;
+				}
+				//输出行数据
+				Row row = sheet.createRow(rowNum++);
+				convertDataToRow(data, row);
+			}
+			String st = DateUtils.formatDate(new Date(),"yyyyMMddHHmmss");
+			String str = URLEncoder.encode("概预算基本信息"+st+".xlsx", "UTF8");
+			OutputStream outputStream = response.getOutputStream();
+			response.reset();
+			response.setHeader("Content-Disposition", "attachment;filename="+str);
+			response.setContentType("application/vnd.ms-excel;charset=UTF-8");
+			workbook.write(outputStream);
+			outputStream.flush();
+			outputStream.close();
+		} catch (Exception e) {
+			e.printStackTrace();
+		} finally {
+		}
+	}
+*/
+
+
+	public void exportHeard( HttpServletResponse response){
+		InputStream inputStream = null;
+		XSSFWorkbook workbook = null;
+		try {
+			String path = (getSispPath() + "excelmodel/maintainDataImport.xlsx");
+//			String path = "D:/IDEA workspace/sg_audit/target/classes/freemarker/excelmodel/maintainDataImport.xlsx";
+			File file = new File(path);
+			inputStream = new FileInputStream(file);// 将excel文件转为输入流
+			workbook = new XSSFWorkbook(inputStream);// 创建个workbook,
+			String str = URLEncoder.encode("概预算基本信息导入模板.xlsx", "UTF8");
+			OutputStream outputStream = response.getOutputStream();
+			response.reset();
+			response.setHeader("Content-Disposition", "attachment;filename="+str);
+			response.setContentType("application/vnd.ms-excel;charset=UTF-8");
+			workbook.write(outputStream);
+			outputStream.flush();
+			outputStream.close();
+		} catch (Exception e) {
+			e.printStackTrace();
+		} finally {
+		}
+	}
+
+
+	public  String getSispPath() {
+		String sispPath = this.getClass().getResource("/").getPath()+ "freemarker/";
+		return sispPath;
+	}
+
+
+/*	private  void convertDataToRow(ProjectBudget projectBudget, Row row){
+		int cellNum = 0;
+		Cell cell;
+		cell = row.createCell(cellNum++);
+		cell.setCellStyle(styles.get("data"));
+		if (null != maintainData.getProjectId()) {
+			cell.setCellValue(maintainData.getProjectId());
+		} else {
+			cell.setCellValue("");
+		}
+		cell = row.createCell(cellNum++);
+		cell.setCellStyle(styles.get("data"));
+		if (null != maintainData.getDesignUnits()) {
+			cell.setCellValue(maintainData.getDesignUnits());
+		} else {
+			cell.setCellValue("");
+		}
+		cell = row.createCell(cellNum++);
+		cell.setCellStyle(styles.get("data"));
+		if (null != maintainData.getConstructionUnits()) {
+			cell.setCellValue(maintainData.getConstructionUnits());
+		} else {
+			cell.setCellValue("");
+		}
+		cell = row.createCell(cellNum++);
+		cell.setCellStyle(styles.get("data"));
+		if (null != maintainData.getAddress()) {
+			cell.setCellValue(maintainData.getAddress());
+		} else {
+			cell.setCellValue("");
+		}
+		cell = row.createCell(cellNum++);
+		cell.setCellStyle(styles.get("data"));
+		if (null != maintainData.getProperty()) {
+			cell.setCellValue(maintainData.getProperty());
+		} else {
+			cell.setCellValue("");
+		}
+		cell = row.createCell(cellNum++);
+		cell.setCellStyle(styles.get("data"));
+		if (null != maintainData.getInvestment()) {
+			cell.setCellValue(maintainData.getInvestment());
+		} else {
+			cell.setCellValue("");
+		}
+		cell = row.createCell(cellNum++);
+		cell.setCellStyle(styles.get("data"));
+		if (null != maintainData.getStartDate()) {
+			cell.setCellValue(DateUtils.formatDate(maintainData.getStartDate()));
+
+		} else {
+			cell.setCellValue("");
+		}
+		cell = row.createCell(cellNum++);
+		cell.setCellStyle(styles.get("data"));
+		if (null != maintainData.getEndDate()) {
+			cell.setCellValue(DateUtils.formatDate(maintainData.getEndDate()));
+		} else {
+			cell.setCellValue("");
+		}
+		cell = row.createCell(cellNum++);
+		cell.setCellStyle(styles.get("data"));
+		if (null != maintainData.getApprovalNumber()) {
+			cell.setCellValue(maintainData.getApprovalNumber());
+		} else {
+			cell.setCellValue("");
+		}
+		cell = row.createCell(cellNum++);
+		cell.setCellStyle(styles.get("data"));
+		if (null != maintainData.getBuildingFee()) {
+			cell.setCellValue(maintainData.getBuildingFee());
+		} else {
+			cell.setCellValue("");
+		}
+		cell = row.createCell(cellNum++);
+		cell.setCellStyle(styles.get("data"));
+		if (null != maintainData.getInstallFee()) {
+			cell.setCellValue(maintainData.getInstallFee());
+		} else {
+			cell.setCellValue("");
+		}
+
+		cell = row.createCell(cellNum++);
+		cell.setCellStyle(styles.get("data"));
+		if (null != maintainData.getEquipmentFee()) {
+			cell.setCellValue(maintainData.getEquipmentFee());
+		} else {
+			cell.setCellValue("");
+		}
+		cell = row.createCell(cellNum++);
+		cell.setCellStyle(styles.get("data"));
+		if (null != maintainData.getMaterialFee()) {
+			cell.setCellValue(maintainData.getMaterialFee());
+		} else {
+			cell.setCellValue("");
+		}
+		cell = row.createCell(cellNum++);
+		cell.setCellStyle(styles.get("data"));
+		if (null != maintainData.getDesignFee()) {
+			cell.setCellValue(maintainData.getDesignFee());
+		} else {
+			cell.setCellValue("");
+		}
+		cell = row.createCell(cellNum++);
+		cell.setCellStyle(styles.get("data"));
+		if (null != maintainData.getSupervisionFee()) {
+			cell.setCellValue(maintainData.getSupervisionFee());
+		} else {
+			cell.setCellValue("");
+		}
+		cell = row.createCell(cellNum++);
+		cell.setCellStyle(styles.get("data"));
+		if (null != maintainData.getPreliminaryWorkFee()) {
+			cell.setCellValue(maintainData.getPreliminaryWorkFee());
+		} else {
+			cell.setCellValue("");
+		}
+		cell = row.createCell(cellNum++);
+		cell.setCellStyle(styles.get("data"));
+		if (null != maintainData.getDamages()) {
+			cell.setCellValue(maintainData.getDamages());
+		} else {
+			cell.setCellValue("");
+		}
+		cell = row.createCell(cellNum++);
+		cell.setCellStyle(styles.get("data"));
+		if (null != maintainData.getManagementFee()) {
+			cell.setCellValue(maintainData.getManagementFee());
+		} else {
+			cell.setCellValue("");
+		}
+		cell = row.createCell(cellNum++);
+		cell.setCellStyle(styles.get("data"));
+		cell.setCellValue(maintainData.getDesignFee()+maintainData.getSupervisionFee()+maintainData.getPreliminaryWorkFee()
+				+maintainData.getDamages()+maintainData.getManagementFee());
+
+		cell = row.createCell(cellNum++);
+		cell.setCellStyle(styles.get("data"));
+		cell.setCellValue(maintainData.getDesignFee()+maintainData.getSupervisionFee()+maintainData.getPreliminaryWorkFee()
+				+maintainData.getDamages()+maintainData.getManagementFee()+maintainData.getBuildingFee()+maintainData.getInstallFee()
+				+maintainData.getEquipmentFee()+maintainData.getMaterialFee());
+
+	}*/
+
+	private  Map<String, CellStyle> createStyles(Workbook wb) {
+		Map<String, CellStyle> styles = new HashMap<String, CellStyle>();
+
+		CellStyle style = wb.createCellStyle();
+		style.setAlignment(CellStyle.ALIGN_CENTER);
+		style.setVerticalAlignment(CellStyle.VERTICAL_CENTER);
+		Font titleFont = wb.createFont();
+		titleFont.setFontName("Arial");
+		titleFont.setFontHeightInPoints((short) 16);
+		titleFont.setBoldweight(Font.BOLDWEIGHT_BOLD);
+		style.setFont(titleFont);
+		styles.put("title", style);
+
+		style = wb.createCellStyle();
+		style.setVerticalAlignment(CellStyle.VERTICAL_CENTER);
+		style.setBorderRight(CellStyle.BORDER_THIN);
+		style.setRightBorderColor(IndexedColors.GREY_50_PERCENT.getIndex());
+		style.setBorderLeft(CellStyle.BORDER_THIN);
+		style.setLeftBorderColor(IndexedColors.GREY_50_PERCENT.getIndex());
+		style.setBorderTop(CellStyle.BORDER_THIN);
+		style.setTopBorderColor(IndexedColors.GREY_50_PERCENT.getIndex());
+		style.setBorderBottom(CellStyle.BORDER_THIN);
+		style.setBottomBorderColor(IndexedColors.GREY_50_PERCENT.getIndex());
+		Font dataFont = wb.createFont();
+		dataFont.setFontName("Arial");
+		dataFont.setFontHeightInPoints((short) 10);
+		style.setFont(dataFont);
+		styles.put("data", style);
+
+		style = wb.createCellStyle();
+		style.cloneStyleFrom(styles.get("data"));
+		style.setAlignment(CellStyle.ALIGN_LEFT);
+		styles.put("data1", style);
+
+		style = wb.createCellStyle();
+		style.cloneStyleFrom(styles.get("data"));
+		style.setAlignment(CellStyle.ALIGN_CENTER);
+		styles.put("data2", style);
+
+		style = wb.createCellStyle();
+		style.cloneStyleFrom(styles.get("data"));
+		style.setAlignment(CellStyle.ALIGN_RIGHT);
+		styles.put("data3", style);
+
+		style = wb.createCellStyle();
+		style.cloneStyleFrom(styles.get("data"));
+//		style.setWrapText(true);
+		style.setAlignment(CellStyle.ALIGN_CENTER);
+		style.setFillForegroundColor(IndexedColors.GREY_50_PERCENT.getIndex());
+		style.setFillPattern(CellStyle.SOLID_FOREGROUND);
+		Font headerFont = wb.createFont();
+		headerFont.setFontName("Arial");
+		headerFont.setFontHeightInPoints((short) 10);
+		headerFont.setBoldweight(Font.BOLDWEIGHT_BOLD);
+		headerFont.setColor(IndexedColors.BLACK.getIndex());
+		style.setFont(headerFont);
+		style.setFillForegroundColor(HSSFColor.WHITE.index);
+		styles.put("header", style);
+
+		return styles;
+	}
+	
+}

+ 305 - 0
src/main/java/com/jeeplus/modules/sg/financial/settlement/web/CostCheckController.java

@@ -0,0 +1,305 @@
+/**
+ * Copyright &copy; 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.modules.sg.financial.settlement.web;
+
+import com.jeeplus.common.json.AjaxJson;
+import com.jeeplus.common.utils.StringUtils;
+import com.jeeplus.common.utils.excel.ImportExcel;
+import com.jeeplus.core.persistence.Page;
+import com.jeeplus.core.web.BaseController;
+import com.jeeplus.modules.sg.financial.settlement.entity.CostCheck;
+import com.jeeplus.modules.sg.financial.settlement.entity.ProjectBudget;
+import com.jeeplus.modules.sg.financial.settlement.service.CostCheckService;
+import com.jeeplus.modules.sg.financial.settlement.service.ProjectBudgetService;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.shiro.authz.annotation.Logical;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.ModelAttribute;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
+import java.math.BigDecimal;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 概预算基本信息维护
+ */
+@Controller
+@RequestMapping(value = "${adminPath}/cost/check")
+public class CostCheckController extends BaseController {
+
+	@Autowired
+	private CostCheckService costCheckService;
+	
+	@ModelAttribute
+	public CostCheck get(@RequestParam(required=false) String id) {
+		CostCheck entity = null;
+		if (StringUtils.isNotBlank(id)){
+			entity = costCheckService.get(id);
+		}
+		if (entity == null){
+			entity = new CostCheck();
+		}
+		return entity;
+	}
+	
+	/**
+	 * 列表页面
+	 */
+	@RequiresPermissions("cost:check:list")
+	@RequestMapping(value = {"list", ""})
+	public String list(CostCheck costCheck, Model model) {
+		model.addAttribute("costCheck", costCheck);
+		return "modules/sg/financial/settlement/costCheckList";
+	}
+
+
+	/**
+	 * 列表数据
+	 */
+	@ResponseBody
+	@RequiresPermissions("cost:check:list")
+	@RequestMapping(value = "data")
+	public Map<String, Object> data(CostCheck costCheck, HttpServletRequest request, HttpServletResponse response, Model model,HttpSession session) {
+		String st = "";
+		String projectId = costCheck.getProjectId();
+		if(StringUtils.isNotBlank(projectId)){
+			st = projectId;
+		}
+//		对查询的id进行处理,若只有一个id设置projectId模糊匹配,若有多个设置projectIds精准匹配
+		if(StringUtils.isNotBlank(st)){
+			String[] sts = st.split("\\s+");
+			if(sts.length == 1){
+				costCheck.setProjectId(sts[0]);
+            }else {
+				costCheck.setProjectIds(sts);
+				costCheck.setProjectId(null);
+            }
+		}
+		Page<CostCheck> page = costCheckService.findPage(new Page<CostCheck>(request, response), costCheck);
+		return getBootstrapData(page);
+	}
+
+
+	/**
+	 * 查看,增加,编辑表单页面
+	 */
+	@RequiresPermissions(value={"cost:check:view","cost:check:add","cost:check:edit"},logical=Logical.OR)
+	@RequestMapping(value = "form")
+	public String form(CostCheck costCheck, Model model) {
+		model.addAttribute("costCheck", costCheck);
+		return "modules/sg/financial/settlement/dataMaintenanceForm";
+	}
+
+	/**
+	 * 保存
+	 */
+	@ResponseBody
+	@RequiresPermissions(value={"cost:check:add","cost:check:edit"},logical=Logical.OR)
+	@RequestMapping(value = "save")
+	public AjaxJson save(CostCheck costCheck, Model model) throws Exception{
+		AjaxJson j = new AjaxJson();
+		/**
+		 * 后台hibernate-validation插件校验
+		 */
+		String errMsg = beanValidator(costCheck);
+		if (StringUtils.isNotBlank(errMsg)){
+			j.setSuccess(false);
+			j.setMsg(errMsg);
+			return j;
+		}
+		//新增或编辑表单保存
+		costCheckService.save(costCheck);
+		j.setSuccess(true);
+		j.setMsg("保存成功");
+		return j;
+	}
+	
+	/**
+	 * 删除
+	 */
+	@ResponseBody
+	@RequiresPermissions("cost:check:del")
+	@RequestMapping(value = "delete")
+	public AjaxJson delete(CostCheck costCheck) {
+		AjaxJson j = new AjaxJson();
+		costCheckService.delete(costCheck);
+		j.setMsg("删除成功");
+		return j;
+	}
+
+
+/**
+	 * 导出excel文件
+	 *//*
+
+	@ResponseBody
+	@RequiresPermissions("cost:check:export")
+    @RequestMapping(value = "export")
+    public AjaxJson exportFile(ProjectBudget ProjectBudget, HttpServletRequest request, HttpServletResponse response) {
+		AjaxJson j = new AjaxJson();
+		try {
+//            String fileName = DateUtils.getDate("yyyyMMddHHmmss")+".xlsx";
+//            Page<ProjectBudget> page = projectBudgetService.findPage(new Page<ProjectBudget>(request, response, -1), ProjectBudget);
+//    		new ExportExcel(null, ProjectBudget.class).setDataList(page.getList()).write(response, fileName).dispose();
+			projectBudgetService.export(ProjectBudget,response);
+    		j.setSuccess(true);
+    		j.setMsg("导出成功!");
+    		return j;
+		} catch (Exception e) {
+			j.setSuccess(false);
+			j.setMsg("导出失败!失败信息:"+e.getMessage());
+		}
+			return j;
+    }
+*/
+
+	/**
+	 * 导入Excel数据
+	 */
+	@ResponseBody
+	@RequiresPermissions("cost:check:import")
+	@RequestMapping(value = "import")
+	public AjaxJson importFile(@RequestParam("file")MultipartFile file, HttpServletResponse response, HttpServletRequest request) {
+		AjaxJson j = new AjaxJson();
+		try {
+			ImportExcel ei = new ImportExcel(file, 2, "送审单");
+			List<CostCheck> list = getData(ei);
+			//保存费用检查信息
+			String b = costCheckService.insertConstructionList(list);
+			j.setMsg("导入成功" + b);
+		} catch (Exception e) {
+			j.setSuccess(false);
+			j.setMsg("导入失败!失败信息:"+e.getMessage());
+		}
+		return j;
+	}
+
+	/**
+	 *excel文件数据读取
+	 */
+	private List<CostCheck> getData(ImportExcel importExcel) throws ParseException {
+		int lastRow = importExcel.getLastDataRowNum();
+		List<CostCheck> list = new ArrayList<>();
+		CostCheck costCheck;
+		for(int i=2; i<lastRow;i++){
+			costCheck = new CostCheck();
+			Row row = importExcel.getRow(i);
+			String projectId = (String) importExcel.getCellValue(row, 1);
+			if (StringUtils.isNotBlank(projectId)) {
+				costCheck.setProjectId(projectId);
+				double aDouble = getDouble(importExcel, row, 34);
+				BigDecimal bigDecimal = new BigDecimal(aDouble);
+				BigDecimal setScale = bigDecimal.setScale(2, BigDecimal.ROUND_HALF_UP);
+				costCheck.setConstructionAmountDue(Double.valueOf(setScale.toString()));
+				list.add(costCheck);
+			}
+		}
+		return list;
+	}
+
+	/**
+	 *获取excel double类型的值
+	 */
+	private double getDouble(ImportExcel importExcel,Row row,int col){
+		double d = 0.00;
+        Object o = importExcel.getCellValue(row,col);
+        if(!o.equals("") && !o.equals("-")){
+        	d = Double.parseDouble(o.toString());
+		}
+      return d;
+	}
+
+	/**
+	 *获取excel double类型的值(折扣比率值,不能小于1.0)
+	 */
+	private double getDisCount(ImportExcel importExcel,Row row,int col){
+		double d = 1.00;
+		Object o = importExcel.getCellValue(row,col);
+		if(!o.equals("")){
+			d = Double.parseDouble(o.toString());
+		}
+		return d;
+	}
+
+	/**
+	 *获取excel date类型的值
+	 */
+	private Date getDate(ImportExcel importExcel,Row row,int col) throws ParseException {
+		Date d = null;
+		Object o = importExcel.getCellValue(row,col);
+		if(!o.equals("")){
+			SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd");
+			d = simpleDateFormat.parse(o.toString());
+		}
+		return d;
+	}
+
+	/**
+	 * 获取excel String类型的值
+	 * */
+	private String getString(ImportExcel importExcel,Row row,int col) throws ParseException {
+		String str = "";
+		Object o = importExcel.getCellValue(row, col);
+		if (null != o && !"".equals(o)) {
+			str = String.valueOf(o);
+		}
+		return str;
+	}
+
+	/**
+	 * 修改施工费允许少付
+	 * */
+	@ResponseBody
+	@RequiresPermissions(value={"cost:check:edit"},logical=Logical.OR)
+	@RequestMapping(value = "updateDes")
+	public AjaxJson updateDes(CostCheck costCheck, Model model) throws Exception{
+		AjaxJson j = new AjaxJson();
+		costCheckService.updateDes(costCheck);
+		j.setSuccess(true);
+		j.setMsg("保存成功");
+		return j;
+	}
+
+	/**
+	 * 修改设计费允许少付
+	 * */
+	@ResponseBody
+	@RequiresPermissions(value={"cost:check:edit"},logical=Logical.OR)
+	@RequestMapping(value = "updateCon")
+	public AjaxJson updateCon(CostCheck costCheck, Model model) throws Exception{
+		AjaxJson j = new AjaxJson();
+		costCheckService.updateCon(costCheck);
+		j.setSuccess(true);
+		j.setMsg("保存成功");
+		return j;
+	}
+
+	/**
+	 * 修改监理费允许少付
+	 * */
+	@ResponseBody
+	@RequiresPermissions(value={"cost:check:edit"},logical=Logical.OR)
+	@RequestMapping(value = "updateSup")
+	public AjaxJson updateSup(CostCheck costCheck, Model model) throws Exception{
+		AjaxJson j = new AjaxJson();
+		costCheckService.updateSup(costCheck);
+		j.setSuccess(true);
+		j.setMsg("保存成功");
+		return j;
+	}
+}

+ 428 - 0
src/main/java/com/jeeplus/modules/sg/financial/settlement/web/ProjectBudgetController.java

@@ -0,0 +1,428 @@
+/**
+ * Copyright &copy; 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.modules.sg.financial.settlement.web;
+
+import com.jeeplus.common.json.AjaxJson;
+import com.jeeplus.common.utils.StringUtils;
+import com.jeeplus.common.utils.excel.ImportExcel;
+import com.jeeplus.core.persistence.Page;
+import com.jeeplus.core.web.BaseController;
+import com.jeeplus.modules.sg.audit.information.utils.FreemarkerUtil;
+import com.jeeplus.modules.sg.audit.information.utils.ResponseUtil;
+import com.jeeplus.modules.sg.financial.settlement.entity.CostCheck;
+import com.jeeplus.modules.sg.financial.settlement.entity.ProjectBudget;
+import com.jeeplus.modules.sg.financial.settlement.service.CostCheckService;
+import com.jeeplus.modules.sg.financial.settlement.service.ProjectBudgetService;
+import com.jeeplus.modules.sg.settActivi.entity.SettActivi;
+import com.jeeplus.modules.sg.settActivi.entity.SettList;
+import com.jeeplus.modules.sys.utils.UserUtils;
+import freemarker.template.Configuration;
+import freemarker.template.Template;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.shiro.authz.annotation.Logical;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.ModelAttribute;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
+import java.io.File;
+import java.io.IOException;
+import java.math.BigDecimal;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+/**
+ * 概预算基本信息维护
+ */
+@Controller
+@RequestMapping(value = "${adminPath}/finance/budget")
+public class ProjectBudgetController extends BaseController {
+
+	@Autowired
+	private ProjectBudgetService projectBudgetService;
+
+	@Autowired
+	private CostCheckService costCheckService;
+	
+	@ModelAttribute
+	public ProjectBudget get(@RequestParam(required=false) String id) {
+		ProjectBudget entity = null;
+		if (StringUtils.isNotBlank(id)){
+			entity = projectBudgetService.get(id);
+		}
+		if (entity == null){
+			entity = new ProjectBudget();
+		}
+		return entity;
+	}
+	
+	/**
+	 * 列表页面
+	 */
+	@RequiresPermissions("finance:budget:list")
+	@RequestMapping(value = {"list", ""})
+	public String list(ProjectBudget projectBudget, Model model) {
+		model.addAttribute("projectBudget", projectBudget);
+		return "modules/sg/financial/settlement/financeBudgetList";
+	}
+
+
+	/**
+	 * 列表数据
+	 */
+	@ResponseBody
+	@RequiresPermissions("finance:budget:list")
+	@RequestMapping(value = "data")
+	public Map<String, Object> data(ProjectBudget projectBudget, HttpServletRequest request, HttpServletResponse response, Model model,HttpSession session) {
+
+		String st = "";
+		String projectId = projectBudget.getProjectId();
+		if(StringUtils.isNotBlank(projectId)){
+			st = projectId;
+		}
+//		对查询的id进行处理,若只有一个id设置projectId模糊匹配,若有多个设置projectIds精准匹配
+		if(StringUtils.isNotBlank(st)){
+			String[] sts = st.split("\\s+");
+			if(sts.length == 1){
+				projectBudget.setProjectId(sts[0]);
+            }else {
+				projectBudget.setProjectIds(sts);
+				projectBudget.setProjectId(null);
+            }
+		}
+		Page<ProjectBudget> page = projectBudgetService.findPage(new Page<ProjectBudget>(request, response), projectBudget);
+		return getBootstrapData(page);
+	}
+
+
+	/**
+	 * 查看,增加,编辑表单页面
+	 */
+	@RequiresPermissions(value={"finance:budget:view","finance:budget:add","finance:budget:edit"},logical=Logical.OR)
+	@RequestMapping(value = "form")
+	public String form(ProjectBudget projectBudget, Model model) {
+		model.addAttribute("projectBudget", projectBudget);
+		return "modules/sg/financial/settlement/financeBudgetForm";
+	}
+
+	/**
+	 * 保存
+	 */
+	@ResponseBody
+	@RequiresPermissions(value={"finance:budget:add","finance:budget:edit"},logical=Logical.OR)
+	@RequestMapping(value = "save")
+	public AjaxJson save(ProjectBudget projectBudget, Model model) throws Exception{
+		AjaxJson j = new AjaxJson();
+		/**
+		 * 后台hibernate-validation插件校验
+		 */
+		String errMsg = beanValidator(projectBudget);
+		if (StringUtils.isNotBlank(errMsg)){
+			j.setSuccess(false);
+			j.setMsg(errMsg);
+			return j;
+		}
+
+		double designCost = getStaticDouble(projectBudget.getDesignCost());
+		double supervisorCost = getStaticDouble(projectBudget.getSupervisorCost());
+		double designContractDiscount = getStaticDouble(projectBudget.getDesignContractDiscount());
+		double designTypicalDiscount = getStaticDouble(projectBudget.getDesignTypicalDiscount());
+		double supervisorContractDiscount = getStaticDouble(projectBudget.getSupervisorContractDiscount());
+		//使用bigDecimal初始化数值,计算防止精度丢失问题
+		BigDecimal constant = new BigDecimal("1.06");
+		//设计费
+		BigDecimal designCostDecimal = new BigDecimal(designCost);
+		//监理费
+		BigDecimal supervisorCostDecimal = new BigDecimal(supervisorCost);
+		//设计合同折扣
+		BigDecimal desConDecimal = new BigDecimal(designContractDiscount);
+		//设计典设折扣
+		BigDecimal desTypeDecimal = new BigDecimal(designTypicalDiscount);
+		//监理费合同折扣
+		BigDecimal supervisorDecimal = new BigDecimal(supervisorContractDiscount);
+		//计算项目设计费应付金额(设计费*设计合同折扣*设计典设折扣*1.06)两位小数
+		BigDecimal firResult = designCostDecimal.multiply(desConDecimal).setScale(2, BigDecimal.ROUND_HALF_UP);
+		BigDecimal secResult = firResult.multiply(desTypeDecimal).setScale(2, BigDecimal.ROUND_HALF_UP);
+		BigDecimal designFeePayable = secResult.multiply(constant).setScale(2, BigDecimal.ROUND_HALF_UP);
+		projectBudget.setDesignFeePayable(designFeePayable.toString());
+		//计算项目监理费应付金额(监理费*监理费合同折扣*1.06)两位小数
+		BigDecimal thirdResult = supervisorCostDecimal.multiply(supervisorDecimal).setScale(2, BigDecimal.ROUND_HALF_UP);
+		BigDecimal supervisionFeePayable = thirdResult.multiply(constant).setScale(2, BigDecimal.ROUND_HALF_UP);
+		projectBudget.setSupervisionFeePayable(supervisionFeePayable.toString());
+		//新增或编辑表单保存
+		projectBudgetService.update(projectBudget);
+		costCheckService.updateDesignSup(projectBudget);
+		j.setSuccess(true);
+		j.setMsg("保存成功");
+		return j;
+	}
+	
+	/**
+	 * 删除
+	 */
+	@ResponseBody
+	@RequiresPermissions("finance:budget:del")
+	@RequestMapping(value = "delete")
+	public AjaxJson delete(ProjectBudget projectBudget) {
+		AjaxJson j = new AjaxJson();
+		projectBudgetService.delete(projectBudget);
+		j.setMsg("删除成功");
+		return j;
+	}
+
+
+	/**
+	 * 删除Model
+	 * @param ids
+	 * @return
+	 */
+	@ResponseBody
+	@RequiresPermissions("finance:budget:del")
+	@RequestMapping(value = "deleteAll")
+	public AjaxJson deleteAll(String ids) {
+		String idArray[] =ids.split(",");
+		ProjectBudget projectBudget = new ProjectBudget();
+		CostCheck costCheck = new CostCheck();
+		for(String id : idArray){
+			projectBudget.setProjectId(id);
+			costCheck.setProjectId(id);
+			projectBudgetService.delete(projectBudget);
+			costCheckService.delete(costCheck);
+		}
+		AjaxJson j = new AjaxJson();
+		j.setMsg("删除成功" );
+		return j;
+	}
+
+	/**
+	 * 导出excel文件
+	 */
+	@ResponseBody
+	@RequestMapping(value = "exportExcel")
+	public void exportExcel(ProjectBudget projectBudget, HttpServletRequest request, HttpServletResponse response) {
+		Template template = null;
+		response.setContentType("text/text;charset=utf-8");
+		response.setCharacterEncoding("UTF-8");
+		File path = new File(this.getClass().getResource("/").getPath() + "/freemarker");
+		Configuration cfg = new Configuration();
+		try {
+			cfg.setDefaultEncoding("UTF-8");
+			//配置cfg对象
+			cfg.setDirectoryForTemplateLoading(path);
+	//            根据模板名称获取Template对象
+			template = cfg.getTemplate("projectBudget.ftl");
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+		Map<String, Object> data = new HashMap<>();
+		String st = "";
+		String projectId = projectBudget.getProjectId();
+		if(StringUtils.isNotBlank(projectId)){
+			st = projectId;
+		}
+//		对查询的id进行处理,若只有一个id设置projectId模糊匹配,若有多个设置projectIds精准匹配
+		if(StringUtils.isNotBlank(st)){
+			String[] sts = st.split("\\s+");
+			if(sts.length == 1){
+				projectBudget.setProjectId(sts[0]);
+			}else {
+				projectBudget.setProjectIds(sts);
+				projectBudget.setProjectId(null);
+			}
+		}
+		List<ProjectBudget> list = projectBudgetService.findList(projectBudget);
+		data.put("list", list);
+		File docFile = new File(path + "\\概预算基本信息管理表.xls");
+		FreemarkerUtil.generateFile(data, template, docFile);
+		ResponseUtil.docResponse("概预算基本信息管理表.xls", docFile, response);
+	}
+
+
+	/**
+	 * 导入Excel数据
+	 */
+	@ResponseBody
+	@RequiresPermissions("finance:budget:import")
+    @RequestMapping(value = "import")
+   	public AjaxJson importFile(@RequestParam("file")MultipartFile file, HttpServletResponse response, HttpServletRequest request) {
+		AjaxJson j = new AjaxJson();
+		try {
+			ImportExcel ei = new ImportExcel(file, 2, "概预算基本信息管理");
+			List<ProjectBudget> list = getData(ei);
+			List<ProjectBudget> costList = new ArrayList<>();
+			costList.addAll(list);
+			//保存概预算信息
+			String s = projectBudgetService.saveList(list);
+			//保存费用检查信息
+			String b = costCheckService.insertList(costList);
+			j.setMsg("导入成功" + s + b);
+		} catch (Exception e) {
+			j.setSuccess(false);
+			j.setMsg("导入失败!失败信息:"+e.getMessage());
+		}
+		return j;
+    }
+
+	/**
+	 *excel文件数据读取
+	 */
+	private List<ProjectBudget> getData(ImportExcel importExcel) throws ParseException {
+		int lastRow = importExcel.getLastDataRowNum();
+		List<ProjectBudget> list = new ArrayList<>();
+		ProjectBudget ProjectBudget;
+		String projectType;
+		BigDecimal constant = new BigDecimal("1.06");
+		for(int i=3; i<lastRow;i++){
+			ProjectBudget = new ProjectBudget();
+			Row row = importExcel.getRow(i);
+			String projectName = (String) importExcel.getCellValue(row,0);
+			String projectId = (String) importExcel.getCellValue(row, 1);
+			if (StringUtils.isNotBlank(projectName) && StringUtils.isNotBlank(projectId)) {
+				ProjectBudget.setProjectName(projectName);
+				ProjectBudget.setProjectId(projectId);
+				ProjectBudget.setDesignUnit(getString(importExcel, row, 2));
+				ProjectBudget.setConstructionUnit(getString(importExcel, row, 3));
+				ProjectBudget.setBuildingAddress(getString(importExcel, row, 4));
+				ProjectBudget.setBuildingProperty(getString(importExcel, row, 5));
+				ProjectBudget.setTotalInvestment(getString(importExcel, row, 6));
+				ProjectBudget.setStartTime(getDate(importExcel, row, 7));
+				ProjectBudget.setStopTime(getDate(importExcel, row, 8));
+				ProjectBudget.setApprovalNumber(getString(importExcel, row, 9));
+				ProjectBudget.setConstructionCost(getDouble(importExcel, row, 10));
+				ProjectBudget.setInstallationCost(getDouble(importExcel, row, 11));
+				ProjectBudget.setEquipmentCost(getDouble(importExcel, row, 12));
+				ProjectBudget.setMaterialCost(getDouble(importExcel, row, 13));
+				double designCost = getDouble(importExcel, row, 14);
+				ProjectBudget.setDesignCost(designCost);
+				double supervisorCost = getDouble(importExcel, row, 15);
+				ProjectBudget.setSupervisorCost(supervisorCost);
+				ProjectBudget.setPreliminaryWorkCost(getDouble(importExcel, row, 16));
+				ProjectBudget.setCompensationCost(getDouble(importExcel, row, 17));
+				ProjectBudget.setAdministrationCost(getDouble(importExcel, row, 18));
+				double designContractDiscount = getDisCount(importExcel, row, 19);
+				double designTypicalDiscount = getDisCount(importExcel, row, 20);
+				double supervisorContractDiscount = getDisCount(importExcel, row, 21);
+				ProjectBudget.setDesignContractDiscount(designContractDiscount);
+				ProjectBudget.setDesignTypicalDiscount(designTypicalDiscount);
+				ProjectBudget.setSupervisorContractDiscount(supervisorContractDiscount);
+				//判断项目是否以b开头,以字母“B”开头,则该项目为成本项目,project_type为0;否则为资本项目,project_type为1
+				if (projectId.startsWith("B")) {
+					projectType = "0";
+				} else {
+					projectType = "1";
+				}
+				ProjectBudget.setProjectType(projectType);
+				//使用bigDecimal初始化数值,计算防止精度丢失问题
+				//设计费
+				BigDecimal designCostDecimal = new BigDecimal(designCost);
+				//监理费
+				BigDecimal supervisorCostDecimal = new BigDecimal(supervisorCost);
+				//设计合同折扣
+				BigDecimal desConDecimal = new BigDecimal(designContractDiscount);
+				//设计典设折扣
+				BigDecimal desTypeDecimal = new BigDecimal(designTypicalDiscount);
+				//监理费合同折扣
+				BigDecimal supervisorDecimal = new BigDecimal(supervisorContractDiscount);
+				//计算项目设计费应付金额(设计费*设计合同折扣*设计典设折扣*1.06)两位小数
+				BigDecimal firResult = designCostDecimal.multiply(desConDecimal).setScale(2, BigDecimal.ROUND_HALF_UP);
+				BigDecimal secResult = firResult.multiply(desTypeDecimal).setScale(2, BigDecimal.ROUND_HALF_UP);
+				BigDecimal designFeePayable = secResult.multiply(constant).setScale(2, BigDecimal.ROUND_HALF_UP);
+				ProjectBudget.setDesignFeePayable(designFeePayable.toString());
+				//计算项目监理费应付金额(监理费*监理费合同折扣*1.06)两位小数
+				BigDecimal thirdResult = supervisorCostDecimal.multiply(supervisorDecimal).setScale(2, BigDecimal.ROUND_HALF_UP);
+				BigDecimal supervisionFeePayable = thirdResult.multiply(constant).setScale(2, BigDecimal.ROUND_HALF_UP);
+				ProjectBudget.setSupervisionFeePayable(supervisionFeePayable.toString());
+
+				list.add(ProjectBudget);
+			}
+		}
+		return list;
+	}
+
+	/**
+	 *获取excel double类型的值
+	 */
+	private double getDouble(ImportExcel importExcel,Row row,int col){
+		double d = 0.00;
+        Object o = importExcel.getCellValue(row,col);
+        if(!o.equals("") && !o.equals("-")){
+        	d = Double.parseDouble(o.toString());
+		}
+      return d;
+	}
+
+	/**
+	 *获取excel double类型的值(折扣比率值,不能小于1.0)
+	 */
+	private double getDisCount(ImportExcel importExcel,Row row,int col){
+		double d = 1.00;
+		Object o = importExcel.getCellValue(row,col);
+		if(!o.equals("")){
+			d = Double.parseDouble(o.toString());
+		}
+		return d;
+	}
+
+	/**
+	 *获取excel date类型的值
+	 */
+	private Date getDate(ImportExcel importExcel,Row row,int col) throws ParseException {
+		Date d = null;
+		Object o = importExcel.getCellValue(row,col);
+		if(!o.equals("")){
+			SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd");
+			d = simpleDateFormat.parse(o.toString());
+		}
+		return d;
+	}
+
+	/**
+	 * 获取excel String类型的值
+	 * */
+	private String getString(ImportExcel importExcel,Row row,int col) throws ParseException {
+		String str = "";
+		Object o = importExcel.getCellValue(row, col);
+		if (null != o && !"".equals(o)) {
+			str = String.valueOf(o);
+		}
+		return str;
+	}
+
+
+	//校验数据表格是否正确
+	public static Boolean getMainJudge(ImportExcel importExcel){
+		Boolean flag = false;
+		Row row = importExcel.getRow(0);
+		String mainCode = (String) importExcel.getCellValue(row,0);
+		if (!mainCode.contains("项目定义")){
+			flag = true;
+		}
+		String lineItem = (String)importExcel.getCellValue(row,1);
+		if (!lineItem.contains("单位")){
+			flag = true;
+		}
+		return  flag;
+	}
+
+	/**
+	 *获取excel double类型的值(折扣比率值,不能小于1.0)
+	 */
+	private double getStaticDouble(Double a){
+		double d = 1.00;
+		if (null != a) {
+			return a;
+		}
+		return d;
+	}
+
+}

+ 455 - 0
src/main/resources/freemarker/projectBudget.ftl

@@ -0,0 +1,455 @@
+<?xml version="1.0"?>
+<?mso-application progid="Excel.Sheet"?>
+<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
+ xmlns:o="urn:schemas-microsoft-com:office:office"
+ xmlns:x="urn:schemas-microsoft-com:office:excel"
+ xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
+ xmlns:html="http://www.w3.org/TR/REC-html40">
+ <DocumentProperties xmlns="urn:schemas-microsoft-com:office:office">
+  <Author>enford</Author>
+  <LastAuthor>enford</LastAuthor>
+  <Created>2020-11-25T05:49:31Z</Created>
+  <LastSaved>2020-11-25T05:50:06Z</LastSaved>
+  <Version>14.00</Version>
+ </DocumentProperties>
+ <OfficeDocumentSettings xmlns="urn:schemas-microsoft-com:office:office">
+  <AllowPNG/>
+ </OfficeDocumentSettings>
+ <ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel">
+  <SupBook>
+   <Path>镇江财务模块\自动决算\配网项目竣工后财务检查系统各模块情况.xlsx</Path>
+   <SheetName>配网项目竣工后财务检查</SheetName>
+   <SheetName>概预算基本信息管理</SheetName>
+   <SheetName>费用检查</SheetName>
+   <SheetName>甲供物资领退料</SheetName>
+   <Xct>
+    <Count>0</Count>
+    <SheetIndex>0</SheetIndex>
+   </Xct>
+   <Xct>
+    <Count>0</Count>
+    <SheetIndex>1</SheetIndex>
+   </Xct>
+   <Xct>
+    <Count>0</Count>
+    <SheetIndex>2</SheetIndex>
+   </Xct>
+   <Xct>
+    <Count>0</Count>
+    <SheetIndex>3</SheetIndex>
+   </Xct>
+  </SupBook>
+  <WindowHeight>12345</WindowHeight>
+  <WindowWidth>28035</WindowWidth>
+  <WindowTopX>360</WindowTopX>
+  <WindowTopY>90</WindowTopY>
+  <ProtectStructure>False</ProtectStructure>
+  <ProtectWindows>False</ProtectWindows>
+ </ExcelWorkbook>
+ <Styles>
+  <Style ss:ID="Default" ss:Name="Normal">
+   <Alignment ss:Vertical="Center"/>
+   <Borders/>
+   <Font ss:FontName="宋体" x:CharSet="134" ss:Size="11" ss:Color="#000000"/>
+   <Interior/>
+   <NumberFormat/>
+   <Protection/>
+  </Style>
+  <Style ss:ID="s16" ss:Name="千位分隔">
+   <NumberFormat ss:Format="_ * #,##0.00_ ;_ * \-#,##0.00_ ;_ * &quot;-&quot;??_ ;_ @_ "/>
+  </Style>
+  <Style ss:ID="s62">
+   <Alignment ss:Horizontal="Center" ss:Vertical="Center"/>
+   <Borders>
+    <Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>
+    <Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"/>
+    <Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"/>
+    <Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/>
+   </Borders>
+   <Font ss:FontName="Arial" x:Family="Swiss" ss:Color="#000000" ss:Bold="1"/>
+   <Interior ss:Color="#FFFF00" ss:Pattern="Solid"/>
+  </Style>
+  <Style ss:ID="s63">
+   <Alignment ss:Horizontal="Center" ss:Vertical="Center"/>
+   <Borders>
+    <Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>
+    <Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"/>
+    <Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"/>
+    <Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/>
+   </Borders>
+   <Font ss:FontName="Arial" x:Family="Swiss" ss:Color="#000000" ss:Bold="1"/>
+   <Interior ss:Color="#FFFFFF" ss:Pattern="Solid"/>
+  </Style>
+  <Style ss:ID="s64" ss:Parent="s16">
+   <Alignment ss:Horizontal="Center" ss:Vertical="Center"/>
+   <Borders>
+    <Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>
+    <Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"/>
+    <Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"/>
+    <Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/>
+   </Borders>
+   <Font ss:FontName="Arial" x:Family="Swiss" ss:Color="#000000" ss:Bold="1"/>
+   <Interior ss:Color="#FFFFFF" ss:Pattern="Solid"/>
+  </Style>
+  <Style ss:ID="s66">
+   <Font ss:FontName="宋体" x:CharSet="134" ss:Size="11" ss:Color="#000000"/>
+  </Style>
+  <Style ss:ID="s67" ss:Parent="s16">
+   <Alignment ss:Horizontal="Center" ss:Vertical="Center"/>
+   <Borders>
+    <Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>
+    <Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"/>
+    <Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"/>
+    <Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/>
+   </Borders>
+   <Font ss:FontName="宋体" x:CharSet="134" ss:Color="#000000" ss:Bold="1"/>
+   <Interior ss:Color="#FFFFFF" ss:Pattern="Solid"/>
+  </Style>
+  <Style ss:ID="s68" ss:Parent="s16">
+   <Alignment ss:Horizontal="Center" ss:Vertical="Center"/>
+   <Borders>
+    <Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>
+    <Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"/>
+    <Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"/>
+    <Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/>
+   </Borders>
+   <Font ss:FontName="Arial" x:Family="Swiss" ss:Color="#000000" ss:Bold="1"/>
+   <Interior ss:Color="#FFFFFF" ss:Pattern="Solid"/>
+  </Style>
+  <Style ss:ID="s69" ss:Parent="s16">
+   <Alignment ss:Horizontal="Center" ss:Vertical="Center"/>
+   <Borders>
+    <Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>
+    <Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"/>
+    <Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"/>
+    <Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/>
+   </Borders>
+   <Font ss:FontName="宋体" x:CharSet="134" ss:Color="#000000" ss:Bold="1"/>
+   <Interior ss:Color="#FFFFFF" ss:Pattern="Solid"/>
+  </Style>
+  <Style ss:ID="s70">
+   <Alignment ss:Vertical="Center" ss:WrapText="1"/>
+   <Borders>
+    <Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>
+    <Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"/>
+    <Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"/>
+    <Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/>
+   </Borders>
+   <Font ss:FontName="方正仿宋_GBK" x:CharSet="134" ss:Size="11"/>
+   <Interior/>
+  </Style>
+  <Style ss:ID="s71">
+   <Alignment ss:Horizontal="Left" ss:Vertical="Center" ss:ShrinkToFit="1"/>
+   <Borders>
+    <Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>
+    <Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"/>
+    <Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"/>
+    <Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/>
+   </Borders>
+   <Font ss:FontName="方正仿宋_GBK" x:CharSet="134" ss:Size="11"/>
+   <Interior/>
+   <NumberFormat ss:Format="@"/>
+  </Style>
+  <Style ss:ID="s72">
+   <Borders>
+    <Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>
+    <Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"/>
+    <Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"/>
+    <Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/>
+   </Borders>
+   <Font ss:FontName="方正仿宋_GBK" x:CharSet="134" ss:Size="11" ss:Color="#000000"/>
+  </Style>
+  <Style ss:ID="s73">
+   <Alignment ss:Vertical="Center"/>
+   <Borders>
+    <Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>
+    <Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"/>
+    <Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"/>
+    <Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/>
+   </Borders>
+   <Font ss:FontName="方正仿宋_GBK" x:CharSet="134" ss:Size="11"/>
+   <Interior/>
+  </Style>
+  <Style ss:ID="s74" ss:Parent="s16">
+   <Borders>
+    <Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>
+    <Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"/>
+    <Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"/>
+    <Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/>
+   </Borders>
+   <Font ss:FontName="方正仿宋_GBK" x:CharSet="134" ss:Size="11" ss:Color="#000000"/>
+  </Style>
+  <Style ss:ID="s75">
+   <Alignment ss:Horizontal="Center" ss:Vertical="Center"/>
+   <Borders>
+    <Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>
+    <Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"/>
+    <Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"/>
+    <Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/>
+   </Borders>
+   <Font ss:FontName="方正仿宋_GBK" x:CharSet="134" ss:Size="11" ss:Color="#000000"/>
+   <Interior/>
+   <NumberFormat ss:Format="Short Date"/>
+  </Style>
+  <Style ss:ID="s76">
+   <Font ss:FontName="方正仿宋_GBK" x:CharSet="134" ss:Size="11" ss:Color="#000000"/>
+  </Style>
+  <Style ss:ID="s88" ss:Parent="s16">
+   <Alignment ss:Vertical="Bottom"/>
+   <Font ss:FontName="Calibri" x:Family="Swiss" ss:Size="11"/>
+  </Style>
+  <Style ss:ID="s89">
+   <Alignment ss:Vertical="Bottom"/>
+   <Font ss:FontName="Calibri" x:Family="Swiss" ss:Size="11"/>
+  </Style>
+  <Style ss:ID="s90" ss:Parent="s16">
+   <Font ss:FontName="宋体" x:CharSet="134" ss:Size="11" ss:Color="#000000"/>
+  </Style>
+  <Style ss:ID="s91">
+   <Font ss:FontName="宋体" x:CharSet="134" ss:Size="11" ss:Color="#000000"/>
+   <NumberFormat ss:Format="0.00_ "/>
+  </Style>
+ </Styles>
+ <Worksheet ss:Name="概预算基本信息管理">
+  <Names>
+   <NamedRange ss:Name="_FilterDatabase" ss:RefersTo="=概预算基本信息管理!R3:R4"
+    ss:Hidden="1"/>
+  </Names>
+  <Table ss:ExpandedColumnCount="29" ss:ExpandedRowCount="28" x:FullColumns="1"
+   x:FullRows="1" ss:StyleID="s66" ss:DefaultColumnWidth="54"
+   ss:DefaultRowHeight="19.875">
+   <Column ss:StyleID="s66" ss:AutoFitWidth="0" ss:Width="349.5"/>
+   <Column ss:StyleID="s66" ss:AutoFitWidth="0" ss:Width="147"/>
+   <Column ss:StyleID="s66" ss:AutoFitWidth="0" ss:Width="171"/>
+   <Column ss:StyleID="s66" ss:AutoFitWidth="0" ss:Width="257.25"/>
+   <Column ss:StyleID="s66" ss:AutoFitWidth="0" ss:Width="57"/>
+   <Column ss:StyleID="s66" ss:AutoFitWidth="0" ss:Width="54.75"/>
+   <Column ss:StyleID="s90" ss:AutoFitWidth="0" ss:Width="86.25"/>
+   <Column ss:StyleID="s66" ss:AutoFitWidth="0" ss:Width="69" ss:Span="1"/>
+   <Column ss:Index="10" ss:StyleID="s66" ss:AutoFitWidth="0" ss:Width="57.75"/>
+   <Column ss:StyleID="s90" ss:AutoFitWidth="0" ss:Width="77.25"/>
+   <Column ss:StyleID="s90" ss:AutoFitWidth="0" ss:Width="82.5"/>
+   <Column ss:StyleID="s90" ss:AutoFitWidth="0" ss:Width="78.75"/>
+   <Column ss:StyleID="s90" ss:AutoFitWidth="0" ss:Width="69.75"/>
+   <Column ss:StyleID="s90" ss:AutoFitWidth="0" ss:Width="71.25" ss:Span="1"/>
+   <Column ss:Index="17" ss:StyleID="s90" ss:AutoFitWidth="0" ss:Width="117"/>
+   <Column ss:StyleID="s90" ss:AutoFitWidth="0" ss:Width="93.75"/>
+   <Column ss:StyleID="s90" ss:AutoFitWidth="0" ss:Width="125.25"/>
+   <Column ss:StyleID="s90" ss:AutoFitWidth="0" ss:Width="71.25"/>
+   <Column ss:StyleID="s66" ss:AutoFitWidth="0" ss:Width="69"/>
+   <Row ss:AutoFitHeight="0" ss:Height="18">
+    <Cell ss:MergeDown="2" ss:StyleID="s62"><Data ss:Type="String">项目名称</Data></Cell>
+    <Cell ss:MergeDown="2" ss:StyleID="s62"><Data ss:Type="String">项目定义编码</Data></Cell>
+    <Cell ss:MergeDown="2" ss:StyleID="s63"><Data ss:Type="String">设计单位</Data></Cell>
+    <Cell ss:MergeDown="2" ss:StyleID="s62"><Data ss:Type="String">施工单位</Data></Cell>
+    <Cell ss:MergeDown="2" ss:StyleID="s63"><Data ss:Type="String">建筑地址</Data></Cell>
+    <Cell ss:MergeDown="2" ss:StyleID="s63"><Data ss:Type="String">建筑属性</Data></Cell>
+    <Cell ss:MergeDown="2" ss:StyleID="s64"><Data ss:Type="String">发文总投资</Data></Cell>
+    <Cell ss:MergeDown="2" ss:StyleID="s63"><Data ss:Type="String">开工时间</Data></Cell>
+    <Cell ss:MergeDown="2" ss:StyleID="s63"><Data ss:Type="String">竣工时间</Data></Cell>
+    <Cell ss:MergeDown="2" ss:StyleID="s63"><Data ss:Type="String">批准文号</Data></Cell>
+    <Cell ss:MergeAcross="8" ss:StyleID="s64"><Data ss:Type="String">概算数</Data></Cell>
+    <Cell ss:MergeAcross="2" ss:StyleID="s64"><Data ss:Type="String">费用折扣</Data></Cell>
+   </Row>
+   <Row ss:AutoFitHeight="0">
+    <Cell ss:Index="11" ss:MergeDown="1" ss:StyleID="s64"><Data ss:Type="String">建筑费</Data></Cell>
+    <Cell ss:MergeDown="1" ss:StyleID="s64"><Data ss:Type="String">安装费</Data></Cell>
+    <Cell ss:MergeDown="1" ss:StyleID="s64"><Data ss:Type="String">设备购置费</Data></Cell>
+    <Cell ss:MergeDown="1" ss:StyleID="s64"><Data ss:Type="String">主材费</Data></Cell>
+    <Cell ss:MergeAcross="4" ss:StyleID="s64"><Data ss:Type="String">其他费用</Data></Cell>
+    <Cell ss:MergeAcross="1" ss:StyleID="s67"><Data ss:Type="String">设计费</Data></Cell>
+    <Cell ss:StyleID="s68"><Data ss:Type="String">监理费</Data></Cell>
+   </Row>
+   <Row ss:Height="13.5">
+    <Cell ss:Index="15" ss:StyleID="s68"><Data ss:Type="String">设计费</Data><NamedCell
+      ss:Name="_FilterDatabase"/></Cell>
+    <Cell ss:StyleID="s68"><Data ss:Type="String">监理费</Data><NamedCell
+      ss:Name="_FilterDatabase"/></Cell>
+    <Cell ss:StyleID="s69"><Data ss:Type="String">项目前期工作费</Data><NamedCell
+      ss:Name="_FilterDatabase"/></Cell>
+    <Cell ss:StyleID="s69"><Data ss:Type="String">线路施工赔偿费</Data><NamedCell
+      ss:Name="_FilterDatabase"/></Cell>
+    <Cell ss:StyleID="s69"><Data ss:Type="String">法人管理费(余物清理费)</Data><NamedCell
+      ss:Name="_FilterDatabase"/></Cell>
+    <Cell ss:StyleID="s69"><Data ss:Type="String">合同费率</Data><NamedCell
+      ss:Name="_FilterDatabase"/></Cell>
+    <Cell ss:StyleID="s69"><Data ss:Type="String">典设费率</Data><NamedCell
+      ss:Name="_FilterDatabase"/></Cell>
+    <Cell ss:StyleID="s68"><ss:Data ss:Type="String"
+      xmlns="http://www.w3.org/TR/REC-html40"><B><Font html:Face="宋体"
+        x:CharSet="134" html:Color="#000000">合同费率</Font></B></ss:Data><NamedCell
+      ss:Name="_FilterDatabase"/></Cell>
+   </Row>
+   <#list list as item>
+   <Row ss:Height="13.5" ss:StyleID="s76">
+    <Cell ss:StyleID="s70"><Data ss:Type="String">${item.projectName!""}</Data><NamedCell
+      ss:Name="_FilterDatabase"/></Cell>
+    <Cell ss:StyleID="s71"><Data ss:Type="String">${item.projectId!""}</Data><NamedCell
+      ss:Name="_FilterDatabase"/></Cell>
+    <Cell ss:StyleID="s72"><Data ss:Type="String">${item.designUnit!""}</Data><NamedCell
+      ss:Name="_FilterDatabase"/></Cell>
+    <Cell ss:StyleID="s73"><Data ss:Type="String">${item.constructionUnit!""}</Data><NamedCell
+      ss:Name="_FilterDatabase"/></Cell>
+    <Cell ss:StyleID="s72"><Data ss:Type="String">${item.buildingAddress!""}</Data><NamedCell
+      ss:Name="_FilterDatabase"/></Cell>
+    <Cell ss:StyleID="s72"><Data ss:Type="String">${item.buildingProperty!""}</Data><NamedCell
+      ss:Name="_FilterDatabase"/></Cell>
+    <Cell ss:StyleID="s74"><Data ss:Type="Number">${item.totalInvestment!""}</Data><NamedCell
+      ss:Name="_FilterDatabase"/></Cell>
+    <Cell ss:StyleID="s75"><Data ss:Type="DateTime">${((item.startTime)?string("yyyy-MM-dd"))!""}</Data><NamedCell
+      ss:Name="_FilterDatabase"/></Cell>
+    <Cell ss:StyleID="s75"><Data ss:Type="DateTime">${((item.stopTime)?string("yyyy-MM-dd"))!""}</Data><NamedCell
+      ss:Name="_FilterDatabase"/></Cell>
+    <Cell ss:StyleID="s72"><Data ss:Type="String">${item.approvalNumber!""}</Data><NamedCell
+      ss:Name="_FilterDatabase"/></Cell>
+    <Cell ss:StyleID="s74"><Data ss:Type="Number">${item.constructionCost!""}</Data><NamedCell ss:Name="_FilterDatabase"/></Cell>
+    <Cell ss:StyleID="s74"><Data ss:Type="Number">${item.installationCost!""}</Data><NamedCell
+      ss:Name="_FilterDatabase"/></Cell>
+    <Cell ss:StyleID="s74"><Data ss:Type="Number">${item.equipmentCost!""}</Data><NamedCell
+      ss:Name="_FilterDatabase"/></Cell>
+    <Cell ss:StyleID="s74"><Data ss:Type="Number">${item.materialCost!""}</Data><NamedCell
+      ss:Name="_FilterDatabase"/></Cell>
+    <Cell ss:StyleID="s74"><Data ss:Type="Number">${item.designCost!""}</Data><NamedCell
+      ss:Name="_FilterDatabase"/></Cell>
+    <Cell ss:StyleID="s74"><Data ss:Type="Number">${item.supervisorCost!""}</Data><NamedCell
+      ss:Name="_FilterDatabase"/></Cell>
+    <Cell ss:StyleID="s74"><Data ss:Type="Number">${item.preliminaryWorkCost!""}</Data><NamedCell
+      ss:Name="_FilterDatabase"/></Cell>
+    <Cell ss:StyleID="s74"><Data ss:Type="Number">${item.compensationCost!""}</Data><NamedCell ss:Name="_FilterDatabase"/></Cell>
+    <Cell ss:StyleID="s74"><Data ss:Type="Number">${item.administrationCost!""}</Data><NamedCell ss:Name="_FilterDatabase"/></Cell>
+    <Cell ss:StyleID="s74"><Data ss:Type="Number">${item.designContractDiscount!""}</Data><NamedCell ss:Name="_FilterDatabase"/></Cell>
+    <Cell ss:StyleID="s72"><Data ss:Type="Number">${item.designTypicalDiscount!""}</Data><NamedCell ss:Name="_FilterDatabase"/></Cell>
+    <Cell ss:StyleID="s72"><Data ss:Type="Number">${item.supervisorContractDiscount!""}</Data><NamedCell ss:Name="_FilterDatabase"/></Cell>
+   </Row>
+   </#list>
+   <Row ss:Height="15">
+    <Cell ss:Index="7" ss:StyleID="s88"/>
+    <Cell ss:StyleID="s89"/>
+    <Cell ss:StyleID="s89"/>
+    <Cell ss:StyleID="s89"/>
+    <Cell ss:StyleID="s88"/>
+    <Cell ss:StyleID="s88"/>
+    <Cell ss:StyleID="s88"/>
+    <Cell ss:StyleID="s88"/>
+    <Cell ss:StyleID="s88"/>
+    <Cell ss:StyleID="s88"/>
+    <Cell ss:StyleID="s88"/>
+    <Cell ss:StyleID="s88"/>
+    <Cell ss:StyleID="s88"/>
+    <Cell ss:StyleID="s88"/>
+    <Cell ss:StyleID="s89"/>
+    <Cell ss:StyleID="s89"/>
+   </Row>
+   <Row ss:Height="13.5"/>
+   <Row ss:Height="15">
+    <Cell ss:Index="11" ss:StyleID="s88"/>
+    <Cell ss:StyleID="s88"/>
+    <Cell ss:StyleID="s88"/>
+    <Cell ss:StyleID="s88"/>
+    <Cell ss:StyleID="s88"/>
+    <Cell ss:StyleID="s88"/>
+    <Cell ss:StyleID="s88"/>
+    <Cell ss:StyleID="s88"/>
+    <Cell ss:StyleID="s88"/>
+    <Cell ss:Index="21" ss:StyleID="s89"/>
+    <Cell ss:StyleID="s89"/>
+    <Cell ss:StyleID="s89"/>
+    <Cell ss:StyleID="s89"/>
+    <Cell ss:StyleID="s89"/>
+    <Cell ss:StyleID="s89"/>
+    <Cell ss:StyleID="s89"/>
+    <Cell ss:StyleID="s89"/>
+    <Cell ss:StyleID="s89"/>
+   </Row>
+   <Row ss:Height="13.5">
+    <Cell ss:Index="9" ss:StyleID="s91"/>
+   </Row>
+   <Row ss:AutoFitHeight="0">
+    <Cell ss:Index="9" ss:StyleID="s91"/>
+   </Row>
+   <Row ss:AutoFitHeight="0">
+    <Cell ss:Index="9" ss:StyleID="s91"/>
+   </Row>
+   <Row ss:AutoFitHeight="0">
+    <Cell ss:Index="9" ss:StyleID="s91"/>
+   </Row>
+   <Row ss:AutoFitHeight="0">
+    <Cell ss:Index="9" ss:StyleID="s91"/>
+   </Row>
+   <Row ss:AutoFitHeight="0">
+    <Cell ss:Index="9" ss:StyleID="s91"/>
+   </Row>
+   <Row ss:AutoFitHeight="0">
+    <Cell ss:Index="9" ss:StyleID="s91"/>
+   </Row>
+   <Row ss:AutoFitHeight="0">
+    <Cell ss:Index="9" ss:StyleID="s91"/>
+   </Row>
+   <Row ss:AutoFitHeight="0">
+    <Cell ss:Index="9" ss:StyleID="s91"/>
+   </Row>
+   <Row ss:AutoFitHeight="0">
+    <Cell ss:Index="9" ss:StyleID="s91"/>
+   </Row>
+   <Row ss:AutoFitHeight="0">
+    <Cell ss:Index="9" ss:StyleID="s91"/>
+   </Row>
+   <Row ss:AutoFitHeight="0">
+    <Cell ss:Index="9" ss:StyleID="s91"/>
+   </Row>
+   <Row ss:AutoFitHeight="0">
+    <Cell ss:Index="9" ss:StyleID="s91"/>
+   </Row>
+   <Row ss:AutoFitHeight="0">
+    <Cell ss:Index="9" ss:StyleID="s91"/>
+   </Row>
+   <Row ss:AutoFitHeight="0">
+    <Cell ss:Index="9" ss:StyleID="s91"/>
+   </Row>
+   <Row ss:AutoFitHeight="0">
+    <Cell ss:Index="9" ss:StyleID="s91"/>
+   </Row>
+   <Row ss:AutoFitHeight="0">
+    <Cell ss:Index="9" ss:StyleID="s91"/>
+   </Row>
+   <Row ss:AutoFitHeight="0">
+    <Cell ss:Index="9" ss:StyleID="s91"/>
+   </Row>
+   <Row ss:AutoFitHeight="0">
+    <Cell ss:Index="9" ss:StyleID="s91"/>
+   </Row>
+   <Row ss:AutoFitHeight="0">
+    <Cell ss:Index="9" ss:StyleID="s91"/>
+   </Row>
+   <Row ss:AutoFitHeight="0">
+    <Cell ss:Index="9" ss:StyleID="s91"/>
+   </Row>
+  </Table>
+  <WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
+   <PageSetup>
+    <Header x:Margin="0.3"/>
+    <Footer x:Margin="0.3"/>
+    <PageMargins x:Bottom="0.75" x:Left="0.7" x:Right="0.7" x:Top="0.75"/>
+   </PageSetup>
+   <Unsynced/>
+   <Selected/>
+   <FreezePanes/>
+   <FrozenNoSplit/>
+   <SplitHorizontal>3</SplitHorizontal>
+   <TopRowBottomPane>3</TopRowBottomPane>
+   <ActivePane>2</ActivePane>
+   <Panes>
+    <Pane>
+     <Number>3</Number>
+    </Pane>
+    <Pane>
+     <Number>2</Number>
+     <ActiveRow>13</ActiveRow>
+     <ActiveCol>2</ActiveCol>
+    </Pane>
+   </Panes>
+   <ProtectObjects>False</ProtectObjects>
+   <ProtectScenarios>False</ProtectScenarios>
+  </WorksheetOptions>
+ </Worksheet>
+</Workbook>

+ 353 - 0
src/main/webapp/webpage/modules/sg/financial/settlement/costCheckList.js

@@ -0,0 +1,353 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<script>
+    $(document).ready(function () {
+        //定义方法---在bootstrap数据循环中使用,必须定义在bootstrapTable之前
+        window.operateEvents = {
+            'change .con': function (e, value, row, index) {
+                let val = $('#con' + index).val();
+                jp.confirm('确认修改施工费允许少付吗?', function () {
+                    jp.loading();
+                    jp.get("${ctx}/cost/check/updateCon?projectId=" + row.projectId + "&constructionUnderPayment=" + val, function (data) {
+                        if (data.success) {
+                            $('#dataTable').bootstrapTable('refresh');
+                            jp.success(data.msg);
+                        } else {
+                            jp.error(data.msg);
+                        }
+                    });
+                },function () {
+                    $('#dataTable').bootstrapTable('refresh');
+                })
+            },
+            'change .des': function (e, value, row, index) {
+                let val = $('#des' + index).val();
+                jp.confirm('确认修改设计费允许少付吗?', function () {
+                    jp.loading();
+                    jp.get("${ctx}/cost/check/updateDes?projectId=" + row.projectId + "&designUnderPayment=" + val, function (data) {
+                        if (data.success) {
+                            $('#dataTable').bootstrapTable('refresh');
+                            jp.success(data.msg);
+                        } else {
+                            jp.error(data.msg);
+                        }
+                    })
+                },function () {
+                    $('#dataTable').bootstrapTable('refresh');
+                })
+            },
+            'change .sup': function (e, value, row, index) {
+                let val = $('#sup' + index).val();
+                jp.confirm('确认修改监理费允许少付吗?', function () {
+                    jp.loading();
+                    jp.get("${ctx}/cost/check/updateSup?projectId=" + row.projectId + "&supervisorUnderPayment=" + val, function (data) {
+                        if (data.success) {
+                            $('#dataTable').bootstrapTable('refresh');
+                            jp.success(data.msg);
+                        } else {
+                            jp.error(data.msg);
+                        }
+                    })
+                },function () {
+                    $('#dataTable').bootstrapTable('refresh');
+                })
+            }
+        };
+        $('#dataTable').bootstrapTable({
+            //请求方法
+            method: 'post',
+            //类型json
+            dataType: "json",
+            contentType: "application/x-www-form-urlencoded",
+            //显示检索按钮
+            showSearch: true,
+            //显示刷新按钮
+            showRefresh: true,
+            //显示切换手机试图按钮
+            showToggle: true,
+            //显示 内容列下拉框
+            showColumns: true,
+            //显示到处按钮
+            showExport: true,
+            //显示切换分页按钮
+            showPaginationSwitch: true,
+            //最低显示2行
+            minimumCountColumns: 2,
+            //是否显示行间隔色
+            striped: true,
+            //是否使用缓存,默认为true,所以一般情况下需要设置一下这个属性(*)
+            cache: false,
+            //是否显示分页(*)
+            pagination: true,
+            //排序方式
+            sortOrder: "asc",
+            //初始化加载第一页,默认第一页
+            pageNumber: 1,
+            //每页的记录行数(*)
+            pageSize: 10,
+            //可供选择的每页的行数(*)
+            pageList: [10, 25, 50, 100],
+            //这个接口需要处理bootstrap table传递的固定参数,并返回特定格式的json数据
+            url: "${ctx}/cost/check/data",
+            //默认值为 'limit',传给服务端的参数为:limit, offset, search, sort, order Else
+            //queryParamsType:'',
+            ////查询参数,每次调用是会带上这个参数,可自定义
+            queryParams: function (params) {
+                var searchParam = $("#searchForm").serializeJSON();
+                searchParam.pageNo = params.limit === undefined ? "1" : params.offset / params.limit + 1;
+                searchParam.pageSize = params.limit === undefined ? -1 : params.limit;
+                searchParam.orderBy = params.sort === undefined ? "" : params.sort + " " + params.order;
+                return searchParam;
+            },
+            //分页方式:client客户端分页,server服务端分页(*)
+            sidePagination: "server",
+            contextMenuTrigger: "right",//pc端 按右键弹出菜单
+            contextMenuTriggerMobile: "press",//手机端 弹出菜单,click:单击, press:长按。
+            contextMenu: '#context-menu',
+            onContextMenuItem: function (row, $el) {
+                if ($el.data("item") == "edit") {
+                    edit(row.id);
+                } else if ($el.data("item") == "view") {
+                    view(row.id);
+                } else if ($el.data("item") == "delete") {
+                    jp.confirm('确认要删除该数据记录吗?', function () {
+                        jp.loading();
+                        jp.get("${ctx}/sg/settlement/delete?id=" + row.projectId, function (data) {
+                            if (data.success) {
+                                $('#dataTable').bootstrapTable('refresh');
+                                jp.success(data.msg);
+                            } else {
+                                jp.error(data.msg);
+                            }
+                        })
+
+                    });
+
+                }
+            },
+            onClickRow: function (row, $el) {
+            },
+            onShowSearch: function () {
+                $("#search-collapse").slideToggle();
+            },
+            columns: [
+                {
+                    field: 'projectId',
+                    width: '150px',
+                    title: '项目编码'
+                }
+                ,{
+                    field: 'projectName',
+                    width: '200px',
+                    title: '项目名称'
+                }
+                ,{
+                    field: 'constructionAmountDue',
+                    width: '130px',
+                    title: '施工费应付金额'
+                }
+                ,{
+                    field: 'constructionAmountPaid',
+                    width: '130px',
+                    title: '施工费实付金额'
+                }
+                ,{
+                    field: 'constructionCostDifference',
+                    width: '130px',
+                    title: '施工费差额'
+                }
+                ,{
+                    field: 'constructionUnderPayment',
+                    width: '130px',
+                    title: '施工费允许少付',
+                    events: operateEvents,
+                    formatter: function (value,row,index) {
+                        var item = ${fns:toJson(fns:getDictList('finance_underpayment'))}
+                        var option
+                        var headOption
+                        $.each(item,function (i,obj) {
+                            if (value == obj.value) {
+                                headOption = headOption + "<option value='" + obj.value + "' selected>" + obj.label + "</option>";
+                            } else {
+                                headOption = headOption + "<option value='"+obj.value+"'>"+obj.label+"</option>";
+                            }
+                        })
+                        option = '<select class="con" id="con'+index+'" name="sup">' +
+                            headOption +
+                            '</select>'
+                        return option;
+                    }
+                }
+                ,{
+                    field: 'designAmountDue',
+                    width: '130px',
+                    title: '设计费应付金额'
+                }
+                ,{
+                    field: 'designAmountPaid',
+                    width: '130px',
+                    title: '设计费实付金额',
+                }
+                ,{
+                    field: 'designCostDifference',
+                    width: '130px',
+                    title: '设计费差额'
+                }
+                ,{
+                    field: 'designUnderPayment',
+                    width: '130px',
+                    title: '设计费允许少付',
+                    events: operateEvents,
+                    formatter: function (value,row,index) {
+                        var item = ${fns:toJson(fns:getDictList('finance_underpayment'))}
+                        var option
+                        var headOption
+                        $.each(item,function (i,obj) {
+                            if (value == obj.value) {
+                                headOption = headOption + "<option value='" + obj.value + "' selected>" + obj.label + "</option>";
+                            } else {
+                                headOption = headOption + "<option value='"+obj.value+"'>"+obj.label+"</option>";
+                            }
+                        })
+                        option = '<select class="des" id="des'+index+'" name="sup">' +
+                            headOption +
+                            '</select>'
+                        return option;
+                    }
+                }
+                ,{
+                    field: 'supervisorAmountDue',
+                    width: '130px',
+                    title: '监理费应付金额'
+                }
+                ,{
+                    field: 'supervisorAmountPaid',
+                    width: '130px',
+                    title: '监理费实付金额',
+                }
+                ,{
+                    field: 'supervisorDifference',
+                    width: '130px',
+                    title: '监理费差额'
+                }
+                ,{
+                    field: 'supervisorUnderPayment',
+                    width: '130px',
+                    title: '监理费允许少付',
+                    events: operateEvents,
+                    formatter: function (value,row,index) {
+                        var item = ${fns:toJson(fns:getDictList('finance_underpayment'))}
+                        var option
+                        var headOption
+                       $.each(item,function (i,obj) {
+                           if (value == obj.value) {
+                               headOption = headOption + "<option value='" + obj.value + "' selected>" + obj.label + "</option>";
+                           } else {
+                               headOption = headOption + "<option value='"+obj.value+"'>"+obj.label+"</option>";
+                           }
+                       })
+                        option = '<select class="sup" id="sup'+index+'" name="sup">' +
+                            headOption +
+                            '</select>'
+                        return option;
+                    }
+                }
+            ]
+    });
+
+
+        if (navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)) {//如果是移动端
+            $('#dataTable').bootstrapTable("toggleView");
+        }
+
+        $('#dataTable').on('check.bs.table uncheck.bs.table load-success.bs.table ' +
+            'check-all.bs.table uncheck-all.bs.table', function () {
+            $('#remove').prop('disabled', !$('#dataTable').bootstrapTable('getSelections').length);
+            $('#view,#edit').prop('disabled', $('#dataTable').bootstrapTable('getSelections').length != 1);
+        });
+
+        $("#btnImport").click(function () {
+            jp.open({
+                type: 2,
+                area: [500, 200],
+                auto: true,
+                title: "导入数据",
+                content: "${ctx}/tag/importExcel",
+                btn: ['确定', '关闭'],
+                btn1: function (index, layero) {
+                    var iframeWin = layero.find('iframe')[0]; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();
+                    iframeWin.contentWindow.importExcel('${ctx}/cost/check/import', function (data) {
+                        if (data.success) {
+                            jp.success(data.msg);
+                            refresh();
+                        } else {
+                            jp.error(data.msg);
+                        }
+                        jp.close(index);
+                    });//调用保存事件
+                    return false;
+                },
+
+                btn2: function (index) {
+                    jp.close(index);
+                }
+            });
+        });
+
+
+        $("#export").click(function () {//导出Excel文件
+            jp.downloadFile('${ctx}/sg/settlement/export');
+        });
+
+        $("#search").click("click", function () {// 绑定查询按扭
+            $('#dataTable').bootstrapTable('refresh');
+        });
+
+        $("#reset").click("click", function () {// 绑定查询按扭
+            $("#searchForm  input").val("");
+            $("#searchForm  select").val("");
+            $("#searchForm  .select-item").html("");
+            $('#dataTable').bootstrapTable('refresh');
+        });
+
+    });
+
+function getIdSelections() {
+    return $.map($("#dataTable").bootstrapTable('getSelections'), function (row) {
+        return row.projectId
+    });
+}
+
+function deleteAll() {
+    jp.confirm('确认要删除该数据记录吗?', function () {
+        jp.loading();
+        jp.get("${ctx}/sg/settlement/deleteAll?ids=" + getIdSelections(), function (data) {
+            if (data.success) {
+                $('#dataTable').bootstrapTable('refresh');
+                jp.success(data.msg);
+            } else {
+                jp.error(data.msg);
+            }
+        })
+
+    })
+}
+
+//刷新列表
+function refresh() {
+    $('#dataTable').bootstrapTable('refresh');
+}
+
+function edit(id) {//没有权限时,不显示确定按钮
+    if (id == undefined) {
+        id = getIdSelections();
+    }
+    jp.openSaveDialog('编辑', "${ctx}/sg/settlement/form?id=" + id, '800px', '500px');
+}
+
+function view(id) {//没有权限时,不显示确定按钮
+    if (id == undefined) {
+        id = getIdSelections();
+    }
+    jp.openViewDialog('查看', "${ctx}/sg/settlement/form?id=" + id, '800px', '500px');
+}
+</script>

+ 77 - 0
src/main/webapp/webpage/modules/sg/financial/settlement/costCheckList.jsp

@@ -0,0 +1,77 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp" %>
+<html>
+<head>
+    <title>费用检查管理</title>
+    <meta http-equiv="Content-type" content="text/html; charset=utf-8">
+    <meta name="decorator" content="ani"/>
+    <%@ include file="/webpage/include/bootstraptable.jsp" %>
+    <%@include file="/webpage/include/treeview.jsp" %>
+    <%@include file="costCheckList.js" %>
+    <script src="${ctxStatic}/plugin/bootstrapTable/bootstrap-table-resizable.js"></script>
+    <script src="${ctxStatic}/plugin/bootstrapTable/colResizable-1.6.js"></script>
+</head>
+<style>
+    .table {
+        table-layout: fixed;
+        word-break: break-all;
+        word-wrap: break-word;
+        text-align: center;
+    }
+
+    .table th, .table td {
+        text-align: center;
+        vertical-align: middle !important;
+    }
+</style>
+<body>
+<div class="wrapper wrapper-content">
+    <div class="panel panel-primary">
+        <div class="panel-heading">
+            <h3 class="panel-title">费用检查管理</h3>
+        </div>
+        <div class="panel-body">
+            <!-- 搜索 -->
+            <div id="search-collapse" class="collapse">
+                <div class="accordion-inner">
+                    <form:form id="searchForm" modelAttribute="costCheck"
+                               class="form form-horizontal well clearfix">
+                        <div class="col-xs-12 col-sm-6 col-md-4">
+                            <label class="label-item single-overflow pull-left" title="项目编码:">项目编码:</label>
+                            <form:input path="projectId" htmlEscape="false" maxlength="64" class=" form-control"/>
+                        </div>
+                        <div class="col-xs-12 col-sm-6 col-md-4">
+                            <label class="label-item single-overflow pull-left" title="项目名称:">项目名称:</label>
+                            <form:input path="projectName" htmlEscape="false" maxlength="64" class=" form-control"/>
+                        </div>
+                        <div class="col-xs-12 col-sm-6 col-md-4">
+                            <div style="margin-top:26px">
+                                <a id="search" class="btn btn-primary btn-rounded  btn-bordered btn-sm"><i
+                                        class="fa fa-search"></i> 查询</a>
+                                <a id="reset" class="btn btn-primary btn-rounded  btn-bordered btn-sm"><i
+                                        class="fa fa-refresh"></i> 重置</a>
+                            </div>
+                        </div>
+                    </form:form>
+                </div>
+            </div>
+
+            <!-- 工具栏 -->
+            <div id="toolbar">
+                <shiro:hasPermission name="cost:check:import">
+                    <button id="btnImport" class="btn btn-info"><i class="fa fa-folder-open-o"></i> 导入送审单</button>
+                </shiro:hasPermission>
+                <shiro:hasPermission name="cost:check:export">
+                    <button id="export" class="btn btn-warning">
+                        <i class="fa fa-file-excel-o"></i> 导出
+                    </button>
+                </shiro:hasPermission>
+            </div>
+
+            <!-- 表格 -->
+            <table id="dataTable" style="table-layout:fixed" data-toolbar="#toolbar"></table>
+        </div>
+    </div>
+</div>
+</body>
+</html>

+ 169 - 0
src/main/webapp/webpage/modules/sg/financial/settlement/financeBudgetForm.jsp

@@ -0,0 +1,169 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>财务项目概预算信息详细页面</title>
+	<meta name="decorator" content="ani"/>
+	<script type="text/javascript">
+		$(document).ready(function() {
+			$('#startDate').datetimepicker({
+				format: "YYYY-MM-DD"
+			});
+			$('#endDate').datetimepicker({
+				format: "YYYY-MM-DD"
+			});
+		});
+		function save() {
+            let isValidate = jp.validateForm('#inputForm');//校验表单
+			let formData = $('#inputForm').serialize();
+			let startTime = $('#startTime').val();
+			let stopTime = $('#stopTime').val();
+            if(!isValidate){
+                return false;
+			}else{
+                jp.loading();
+				jp.post("${ctx}/finance/budget/save", formData + "&startTime=" + startTime + "&stopTime=" + stopTime, function (data) {
+					if (data.success) {
+						jp.getParent().refresh();
+						let dialogIndex = parent.layer.getFrameIndex(window.name); // 获取窗口索引
+						parent.layer.close(dialogIndex);
+						jp.success(data.msg)
+					} else {
+						jp.error(data.msg);
+					}
+				});
+			}
+        }
+	</script>
+</head>
+<body class="bg-white">
+		<form:form id="inputForm" modelAttribute="projectBudget" class="form-horizontal">
+		<form:hidden path="id"/>	
+		<table class="table table-bordered">
+		   <tbody>
+				<tr>
+					<td class="width-15 active"><label class="pull-right"><font color="red">*</font>项目名称:</label></td>
+					<td class="width-35">
+						<form:input path="projectName" htmlEscape="false"    class="form-control"/>
+					</td>
+					<td class="width-15 active"><label class="pull-right">项目编码:</label></td>
+					<td class="width-35">
+						<form:input readonly="true" path="projectId" htmlEscape="false"    class="form-control"/>
+					</td>
+				</tr>
+				<tr>
+					<td class="width-15 active"><label class="pull-right">设计单位:</label></td>
+					<td class="width-35">
+						<form:input path="designUnit" htmlEscape="false"    class="form-control"/>
+					</td>
+					<td class="width-15 active"><label class="pull-right">施工单位:</label></td>
+					<td class="width-35">
+						<form:input path="constructionUnit" htmlEscape="false"    class="form-control"/>
+					</td>
+				</tr>
+				<tr>
+					<td class="width-15 active"><label class="pull-right">建筑地址:</label></td>
+					<td class="width-35">
+						<form:input path="buildingAddress" htmlEscape="false"    class="form-control"/>
+					</td>
+					<td class="width-15 active"><label class="pull-right">建筑属性:</label></td>
+					<td class="width-35">
+						<form:input path="buildingProperty" htmlEscape="false"    class="form-control"/>
+					</td>
+				</tr>
+
+				<tr>
+					<td class="width-15 active"><label class="pull-right">发文总投资:</label></td>
+					<td class="width-35">
+						<form:input path="totalInvestment" htmlEscape="false"    class="form-control number"/>
+					</td>
+					<td class="width-15 active"><label class="pull-right">开工时间:</label></td>
+					<td class="width-35">
+						<div class='input-group form_datetime' id='startDate'>
+							<input type='text'  name="startDate" class="form-control required" id="startTime"  value="<fmt:formatDate value="${projectBudget.startTime}" pattern="yyyy-MM-dd"/>"/>
+							<span class="input-group-addon">
+			                        <span class="glyphicon glyphicon-calendar"></span>
+			            </span>
+						</div>
+					</td>
+				</tr>
+				<tr>
+					<td class="width-15 active"><label class="pull-right">竣工时间:</label></td>
+					<td class="width-35">
+						<div class='input-group form_datetime' id='endDate'>
+							<input type='text'  name="endDate" class="form-control required" id="stopTime"  value="<fmt:formatDate value="${projectBudget.stopTime}" pattern="yyyy-MM-dd"/>"/>
+							<span class="input-group-addon">
+			                        <span class="glyphicon glyphicon-calendar"></span>
+			            </span>
+						</div>
+					</td>
+					<td class="width-15 active"><label class="pull-right">批准文号:</label></td>
+					<td class="width-35">
+						<form:input path="approvalNumber" htmlEscape="false"    class="form-control"/>
+					</td>
+				</tr>
+				<tr>
+					<td class="width-15 active"><label class="pull-right">建筑费:</label></td>
+					<td class="width-35">
+						<form:input path="constructionCost" htmlEscape="false"    class="form-control number"/>
+					</td>
+					<td class="width-15 active"><label class="pull-right">安装费:</label></td>
+					<td class="width-35">
+						<form:input path="installationCost" htmlEscape="false"    class="form-control number"/>
+					</td>
+				</tr>
+				<tr>
+					<td class="width-15 active"><label class="pull-right">设备购置费:</label></td>
+					<td class="width-35">
+						<form:input path="equipmentCost" htmlEscape="false"    class="form-control number"/>
+					</td>
+					<td class="width-15 active"><label class="pull-right">主材费:</label></td>
+					<td class="width-35">
+						<form:input path="materialCost" htmlEscape="false"    class="form-control number"/>
+					</td>
+				</tr>
+				<tr>
+					<td class="width-15 active"><label class="pull-right">设计费:</label></td>
+					<td class="width-35">
+						<form:input path="designCost" htmlEscape="false"    class="form-control number"/>
+					</td>
+					<td class="width-15 active"><label class="pull-right">监理费:</label></td>
+					<td class="width-35">
+						<form:input path="supervisorCost" htmlEscape="false"    class="form-control number"/>
+					</td>
+				</tr>
+				<tr>
+					<td class="width-15 active"><label class="pull-right">项目前期工作费:</label></td>
+					<td class="width-35">
+						<form:input path="preliminaryWorkCost" htmlEscape="false"    class="form-control number"/>
+					</td>
+					<td class="width-15 active"><label class="pull-right">线路施工赔偿费:</label></td>
+					<td class="width-35">
+						<form:input path="compensationCost" htmlEscape="false"    class="form-control number"/>
+					</td>
+				</tr>
+				<tr>
+					<td class="width-15 active"><label class="pull-right">法人管理费:</label></td>
+					<td class="width-35">
+						<form:input path="administrationCost" htmlEscape="false"    class="form-control number"/>
+					</td>
+					<td class="width-15 active"><label class="pull-right">设计合同折扣:</label></td>
+					<td class="width-35">
+						<form:input path="designContractDiscount" htmlEscape="false"    class="form-control number"/>
+					</td>
+				</tr>
+				<tr>
+					<td class="width-15 active"><label class="pull-right">设计典设折扣:</label></td>
+					<td class="width-35">
+						<form:input path="designTypicalDiscount" htmlEscape="false"    class="form-control number"/>
+					</td>
+					<td class="width-15 active"><label class="pull-right">监理合同折扣:</label></td>
+					<td class="width-35">
+						<form:input path="supervisorContractDiscount" htmlEscape="false"    class="form-control number"/>
+					</td>
+				</tr>
+		 	</tbody>
+		</table>
+	</form:form>
+</body>
+</html>

+ 217 - 0
src/main/webapp/webpage/modules/sg/financial/settlement/financeBudgetList.js

@@ -0,0 +1,217 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<script>
+    $(document).ready(function () {
+        $('#dataTable').bootstrapTable({
+            //请求方法
+            method: 'post',
+            //类型json
+            dataType: "json",
+            contentType: "application/x-www-form-urlencoded",
+            //显示检索按钮
+            showSearch: true,
+            //显示刷新按钮
+            showRefresh: true,
+            //显示切换手机试图按钮
+            showToggle: true,
+            //显示 内容列下拉框
+            showColumns: true,
+            //显示到处按钮
+            showExport: true,
+            //显示切换分页按钮
+            showPaginationSwitch: true,
+            //最低显示2行
+            minimumCountColumns: 2,
+            //是否显示行间隔色
+            striped: true,
+            //是否使用缓存,默认为true,所以一般情况下需要设置一下这个属性(*)
+            cache: false,
+            //是否显示分页(*)
+            pagination: true,
+            //排序方式
+            sortOrder: "asc",
+            //初始化加载第一页,默认第一页
+            pageNumber: 1,
+            //每页的记录行数(*)
+            pageSize: 10,
+            //可供选择的每页的行数(*)
+            pageList: [10, 25, 50, 100],
+            //这个接口需要处理bootstrap table传递的固定参数,并返回特定格式的json数据
+            url: "${ctx}/finance/budget/data",
+            //默认值为 'limit',传给服务端的参数为:limit, offset, search, sort, order Else
+            //queryParamsType:'',
+            ////查询参数,每次调用是会带上这个参数,可自定义
+            queryParams: function (params) {
+                var searchParam = $("#searchForm").serializeJSON();
+                searchParam.pageNo = params.limit === undefined ? "1" : params.offset / params.limit + 1;
+                searchParam.pageSize = params.limit === undefined ? -1 : params.limit;
+                searchParam.orderBy = params.sort === undefined ? "" : params.sort + " " + params.order;
+                return searchParam;
+            },
+            //分页方式:client客户端分页,server服务端分页(*)
+            sidePagination: "server",
+            contextMenuTrigger: "right",//pc端 按右键弹出菜单
+            contextMenuTriggerMobile: "press",//手机端 弹出菜单,click:单击, press:长按。
+            contextMenu: '#context-menu',
+            onContextMenuItem: function (row, $el) {
+                if ($el.data("item") == "edit") {
+                    edit(row.id);
+                } else if ($el.data("item") == "view") {
+                    view(row.id);
+                } else if ($el.data("item") == "delete") {
+                    jp.confirm('确认要删除该数据记录吗?', function () {
+                        jp.loading();
+                        jp.get("${ctx}/sg/settlement/delete?id=" + row.projectId, function (data) {
+                            if (data.success) {
+                                $('#dataTable').bootstrapTable('refresh');
+                                jp.success(data.msg);
+                            } else {
+                                jp.error(data.msg);
+                            }
+                        })
+
+                    });
+
+                }
+            },
+            onClickRow: function (row, $el) {
+            },
+            onShowSearch: function () {
+                $("#search-collapse").slideToggle();
+            },
+            columns: [
+                {
+                checkbox: true
+                }
+                ,{
+                    field: 'projectId',
+                    title: '项目编号'
+                    , formatter: function (value, row, index) {
+                        value = jp.unescapeHTML(value);
+                        return "<a href='javascript:view(\"" + row.projectId + "\")'>" + value + "</a>";
+                    }
+                }
+                ,{
+                    field: 'projectName',
+                    title: '项目名称'
+                }
+                ,{
+                    field: 'designUnit',
+                    title: '设计单位'
+                }
+                ,{
+                    field: 'constructionUnit',
+                    title: '施工单位'
+                }
+                ,{
+                    field: 'buildingAddress',
+                    title: '建筑地址'
+                }
+                ,{
+                    field: 'buildingProperty',
+                    title: '建筑属性'
+                }
+                ,{
+                    field: 'totalInvestment',
+                    title: '发文总投资',
+                }
+            ]
+    });
+
+        if (navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)) {//如果是移动端
+            $('#dataTable').bootstrapTable("toggleView");
+        }
+
+        $('#dataTable').on('check.bs.table uncheck.bs.table load-success.bs.table ' +
+            'check-all.bs.table uncheck-all.bs.table', function () {
+            $('#remove').prop('disabled', !$('#dataTable').bootstrapTable('getSelections').length);
+            $('#view,#edit').prop('disabled', $('#dataTable').bootstrapTable('getSelections').length != 1);
+        });
+
+        $("#btnImport").click(function () {
+            jp.open({
+                type: 2,
+                area: [500, 200],
+                auto: true,
+                title: "导入数据",
+                content: "${ctx}/tag/importExcel",
+                btn: ['确定', '关闭'],
+                btn1: function (index, layero) {
+                    var iframeWin = layero.find('iframe')[0]; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();
+                    iframeWin.contentWindow.importExcel('${ctx}/finance/budget/import', function (data) {
+                        if (data.success) {
+                            jp.success(data.msg);
+                            refresh();
+                        } else {
+                            jp.error(data.msg);
+                        }
+                        jp.close(index);
+                    });//调用保存事件
+                    return false;
+                },
+
+                btn2: function (index) {
+                    jp.close(index);
+                }
+            });
+        });
+
+
+        $("#export").click(function () {//导出Excel文件
+            let projectId = $('#projectId').val();
+            let projectName = $('#projectName').val();
+            jp.downloadFile('${ctx}/finance/budget/exportExcel?projectId=' + projectId + '&projectName=' + projectName);
+        });
+
+        $("#search").click("click", function () {// 绑定查询按扭
+            $('#dataTable').bootstrapTable('refresh');
+        });
+
+        $("#reset").click("click", function () {// 绑定查询按扭
+            $("#searchForm  input").val("");
+            $("#searchForm  select").val("");
+            $("#searchForm  .select-item").html("");
+            $('#dataTable').bootstrapTable('refresh');
+        });
+
+    });
+
+function getIdSelections() {
+    return $.map($("#dataTable").bootstrapTable('getSelections'), function (row) {
+        return row.projectId
+    });
+}
+
+function deleteAll() {
+    jp.confirm('确认要删除该数据记录吗?', function () {
+        jp.loading();
+        jp.get("${ctx}/finance/budget/deleteAll?ids=" + getIdSelections(), function (data) {
+            if (data.success) {
+                $('#dataTable').bootstrapTable('refresh');
+                jp.success(data.msg);
+            } else {
+                jp.error(data.msg);
+            }
+        })
+
+    })
+}
+
+//刷新列表
+function refresh() {
+    $('#dataTable').bootstrapTable('refresh');
+}
+
+function edit(id) {//没有权限时,不显示确定按钮
+    if (id == undefined) {
+        id = getIdSelections();
+    }
+    jp.openSaveDialog('编辑', "${ctx}/finance/budget/form?id=" + id, '800px', '500px');
+}
+
+function view(id) {//没有权限时,不显示确定按钮
+    if (id == undefined) {
+        id = getIdSelections();
+    }
+    jp.openViewDialog('查看', "${ctx}/finance/budget/form?id=" + id, '800px', '500px');
+}
+</script>

+ 88 - 0
src/main/webapp/webpage/modules/sg/financial/settlement/financeBudgetList.jsp

@@ -0,0 +1,88 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp" %>
+<html>
+<head>
+    <title>财务项目概预算信息</title>
+    <meta http-equiv="Content-type" content="text/html; charset=utf-8">
+    <meta name="decorator" content="ani"/>
+    <%@ include file="/webpage/include/bootstraptable.jsp" %>
+    <%@include file="/webpage/include/treeview.jsp" %>
+    <%@include file="financeBudgetList.js" %>
+    <script src="${ctxStatic}/plugin/bootstrapTable/bootstrap-table-resizable.js"></script>
+    <script src="${ctxStatic}/plugin/bootstrapTable/colResizable-1.6.js"></script>
+</head>
+<style>
+    .table {
+        table-layout: fixed;
+        word-break: break-all;
+        word-wrap: break-word;
+        text-align: center;
+    }
+
+    .table th, .table td {
+        text-align: center;
+        vertical-align: middle !important;
+    }
+</style>
+<body>
+<div class="wrapper wrapper-content">
+    <div class="panel panel-primary">
+        <div class="panel-heading">
+            <h3 class="panel-title">财务项目概预算信息管理</h3>
+        </div>
+        <div class="panel-body">
+
+            <!-- 搜索 -->
+            <div id="search-collapse" class="collapse">
+                <div class="accordion-inner">
+                    <form:form id="searchForm" modelAttribute="projectBudget"
+                               class="form form-horizontal well clearfix">
+                        <div class="col-xs-12 col-sm-6 col-md-4">
+                            <label class="label-item single-overflow pull-left" title="项目编码:">项目编码:</label>
+                            <form:input path="projectId" htmlEscape="false" maxlength="64" class=" form-control"/>
+                        </div>
+                        <div class="col-xs-12 col-sm-6 col-md-4">
+                            <label class="label-item single-overflow pull-left" title="项目名称:">项目名称:</label>
+                            <form:input path="projectName" htmlEscape="false" maxlength="64" class=" form-control"/>
+                        </div>
+                        <div class="col-xs-12 col-sm-6 col-md-4">
+                            <div style="margin-top:26px">
+                                <a id="search" class="btn btn-primary btn-rounded  btn-bordered btn-sm"><i
+                                        class="fa fa-search"></i> 查询</a>
+                                <a id="reset" class="btn btn-primary btn-rounded  btn-bordered btn-sm"><i
+                                        class="fa fa-refresh"></i> 重置</a>
+                            </div>
+                        </div>
+                    </form:form>
+                </div>
+            </div>
+
+            <!-- 工具栏 -->
+            <div id="toolbar">
+                <shiro:hasPermission name="finance:budget:del">
+                    <button id="remove" class="btn btn-danger" disabled onclick="deleteAll()">
+                        <i class="glyphicon glyphicon-remove"></i> 删除
+                    </button>
+                </shiro:hasPermission>
+                <shiro:hasPermission name="finance:budget:edit">
+                    <button id="edit" class="btn btn-success" disabled onclick="edit()">
+                        <i class="glyphicon glyphicon-edit"></i> 修改
+                    </button>
+                </shiro:hasPermission>
+                <shiro:hasPermission name="finance:budget:import">
+                    <button id="btnImport" class="btn btn-info"><i class="fa fa-folder-open-o"></i> 导入</button>
+                </shiro:hasPermission>
+                <shiro:hasPermission name="finance:budget:export">
+                    <button id="export" class="btn btn-warning">
+                        <i class="fa fa-file-excel-o"></i> 导出
+                    </button>
+                </shiro:hasPermission>
+            </div>
+
+            <!-- 表格 -->
+            <table id="dataTable" style="table-layout:fixed" data-toolbar="#toolbar"></table>
+        </div>
+    </div>
+</div>
+</body>
+</html>