Переглянути джерело

数据库文件,施工单位模块,评价标准模块

lem 3 роки тому
батько
коміт
f75c61a945
12 змінених файлів з 1403 додано та 3 видалено
  1. 336 3
      database/jeeplus-vue-base.sql
  2. 47 0
      jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/modules/constructionunit/entity/ConstructionExportUnit.java
  3. 46 0
      jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/modules/constructionunit/entity/ConstructionUnit.java
  4. 40 0
      jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/modules/constructionunit/mapper/ConstructionUnitMapper.java
  5. 178 0
      jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/modules/constructionunit/mapper/xml/ConstructionUnitMapper.xml
  6. 114 0
      jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/modules/constructionunit/service/ConstructionUnitService.java
  7. 212 0
      jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/modules/constructionunit/web/ConstructionUnitController.java
  8. 53 0
      jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/modules/criterion/entity/EvaluationCriterion.java
  9. 20 0
      jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/modules/criterion/mapper/EvaluationCriterionMapper.java
  10. 175 0
      jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/modules/criterion/mapper/xml/EvaluationCriterionMapper.xml
  11. 46 0
      jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/modules/criterion/service/EvaluationCriterionService.java
  12. 136 0
      jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/modules/criterion/web/EvaluationCriterionController.java

Різницю між файлами не показано, бо вона завелика
+ 336 - 3
database/jeeplus-vue-base.sql


+ 47 - 0
jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/modules/constructionunit/entity/ConstructionExportUnit.java

@@ -0,0 +1,47 @@
+/**
+ * Copyright © 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.modules.constructionunit.entity;
+
+
+import com.jeeplus.common.utils.excel.annotation.ExcelField;
+import com.jeeplus.core.persistence.DataEntity;
+
+/**
+ * ConstructionUnitEntity
+ * @author 邱悦
+ * @version 2021-12-29
+ */
+public class ConstructionExportUnit extends DataEntity<ConstructionExportUnit> {
+
+	private static final long serialVersionUID = 1L;
+	private String yearOfEvaluation;		// 评价年份
+	private String unitName;		// 单位名称
+
+	public ConstructionExportUnit() {
+		super();
+	}
+
+	public ConstructionExportUnit(String id){
+		super(id);
+	}
+
+	@ExcelField(title="评价年份", align=2, sort=1)
+	public String getYearOfEvaluation() {
+		return yearOfEvaluation;
+	}
+
+	public void setYearOfEvaluation(String yearOfEvaluation) {
+		this.yearOfEvaluation = yearOfEvaluation;
+	}
+	
+	@ExcelField(title="单位名称", align=2, sort=2)
+	public String getUnitName() {
+		return unitName;
+	}
+
+	public void setUnitName(String unitName) {
+		this.unitName = unitName;
+	}
+	
+}

+ 46 - 0
jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/modules/constructionunit/entity/ConstructionUnit.java

@@ -0,0 +1,46 @@
+/**
+ * Copyright © 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.modules.constructionunit.entity;
+
+
+import com.jeeplus.core.persistence.DataEntity;
+import com.jeeplus.common.utils.excel.annotation.ExcelField;
+
+/**
+ * ConstructionUnitEntity
+ * @author 邱悦
+ * @version 2021-12-29
+ */
+public class ConstructionUnit extends DataEntity<ConstructionUnit> {
+	
+	private static final long serialVersionUID = 1L;
+	private String yearOfEvaluation;		// 评价年份
+	private String unitName;		// 单位名称
+	
+	public ConstructionUnit() {
+		super();
+	}
+
+	public ConstructionUnit(String id){
+		super(id);
+	}
+
+	public String getYearOfEvaluation() {
+		return yearOfEvaluation;
+	}
+
+	public void setYearOfEvaluation(String yearOfEvaluation) {
+		this.yearOfEvaluation = yearOfEvaluation;
+	}
+	
+	@ExcelField(title="单位名称", align=2, sort=1)
+	public String getUnitName() {
+		return unitName;
+	}
+
+	public void setUnitName(String unitName) {
+		this.unitName = unitName;
+	}
+	
+}

+ 40 - 0
jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/modules/constructionunit/mapper/ConstructionUnitMapper.java

@@ -0,0 +1,40 @@
+/**
+ * Copyright © 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.modules.constructionunit.mapper;
+
+import org.apache.ibatis.annotations.Param;
+import org.springframework.security.core.parameters.P;
+import org.springframework.stereotype.Repository;
+import com.jeeplus.core.persistence.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import com.jeeplus.modules.constructionunit.entity.ConstructionUnit;
+
+import java.util.List;
+
+/**
+ * ConstructionUnitMAPPER接口
+ * @author 邱悦
+ * @version 2021-12-29
+ */
+@Mapper
+@Repository
+public interface ConstructionUnitMapper extends BaseMapper<ConstructionUnit> {
+
+    /**
+     * 通过评价年份和单位名称判断项目是否唯一
+     * @param entity 查询条件
+     * */
+    ConstructionUnit getYearName(ConstructionUnit entity);
+
+    /**
+     * 导入时,通过评价年份和单位名称获取已有的数据
+     * @param list 查询条件
+     * */
+    List<ConstructionUnit>  findListByYearName(@Param("list") List<ConstructionUnit> list, @Param("yearOfEvaluation") String yearOfEvaluation);
+
+    /**
+     * 批量插入
+     * */
+    void insertList(List<ConstructionUnit> list);
+}

+ 178 - 0
jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/modules/constructionunit/mapper/xml/ConstructionUnitMapper.xml

@@ -0,0 +1,178 @@
+<?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.constructionunit.mapper.ConstructionUnitMapper">
+
+	<sql id="constructionUnitColumns">
+		a.id AS "id",
+		a.yearofevaluation AS "yearOfEvaluation",
+		a.unitname AS "unitName",
+		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"
+	</sql>
+
+	<sql id="constructionUnitJoins">
+
+	</sql>
+
+
+	<select id="get" resultType="ConstructionUnit" >
+		SELECT
+			<include refid="constructionUnitColumns"/>
+		FROM lishu_construction_unit a
+		<include refid="constructionUnitJoins"/>
+		WHERE a.id = #{id}
+	</select>
+
+	<select id="getYearName" resultType="ConstructionUnit" >
+		SELECT
+		<include refid="constructionUnitColumns"/>
+		FROM lishu_construction_unit a
+		WHERE a.yearOfEvaluation = #{yearOfEvaluation} and a.unitName = #{unitName}
+	</select>
+
+	<select id="findList" resultType="ConstructionUnit" >
+		SELECT
+			<include refid="constructionUnitColumns"/>
+		FROM lishu_construction_unit a
+		<include refid="constructionUnitJoins"/>
+		<where>
+			a.del_flag = #{DEL_FLAG_NORMAL}
+			${dataScope}
+			<if test="yearOfEvaluation!= null and yearOfEvaluation != ''">
+				and a.yearOfEvaluation =#{yearOfEvaluation}
+			</if>
+			<if test="unitName!= null and unitName != ''">
+				AND a.unitName LIKE
+				<if test="_databaseId == 'postgre'">'%'||#{unitName}||'%'</if>
+				<if test="_databaseId == 'oracle'">'%'||#{unitName}||'%'</if>
+				<if test="_databaseId == 'mssql'">'%'+#{unitName}+'%'</if>
+				<if test="_databaseId == 'mysql'">concat('%',#{unitName},'%')</if>
+			</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="ConstructionUnit" >
+		SELECT
+			<include refid="constructionUnitColumns"/>
+		FROM lishu_construction_unit a
+		<include refid="constructionUnitJoins"/>
+		<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 lishu_construction_unit(
+			id,
+			yearofevaluation,
+			unitname,
+			create_by,
+			create_date,
+			update_by,
+			update_date,
+			remarks,
+			del_flag
+		) VALUES (
+			#{id},
+			#{yearOfEvaluation},
+			#{unitName},
+			#{createBy.id},
+			#{createDate},
+			#{updateBy.id},
+			#{updateDate},
+			#{remarks},
+			#{delFlag}
+		)
+	</insert>
+	<insert id="insertList">
+		INSERT INTO lishu_construction_unit(
+			id,
+			yearofevaluation,
+			unitname,
+			create_by,
+			create_date,
+			update_by,
+			update_date,
+			remarks,
+			del_flag
+		) VALUES
+		<foreach collection="list" item="item" index="index" separator=",">
+			 (
+				 #{item.id},
+				 #{item.yearOfEvaluation},
+				 #{item.unitName},
+				 #{item.createBy.id},
+				 #{item.createDate},
+				 #{item.updateBy.id},
+				 #{item.updateDate},
+				 #{item.remarks},
+				 #{item.delFlag}
+			 )
+		</foreach>
+	</insert>
+
+	<update id="update">
+		UPDATE lishu_construction_unit SET
+			yearofevaluation = #{yearOfEvaluation},
+			unitname = #{unitName},
+			update_by = #{updateBy.id},
+			update_date = #{updateDate},
+			remarks = #{remarks}
+		WHERE id = #{id}
+	</update>
+
+
+	<!--物理删除-->
+	<update id="delete">
+		DELETE FROM lishu_construction_unit
+		WHERE id = #{id}
+	</update>
+
+	<!--逻辑删除-->
+	<update id="deleteByLogic">
+		UPDATE lishu_construction_unit SET
+			del_flag = #{DEL_FLAG_DELETE}
+		WHERE id = #{id}
+	</update>
+
+
+	<!-- 根据实体名称和字段名称和字段值获取唯一记录 -->
+	<select id="findUniqueByProperty" resultType="ConstructionUnit" statementType="STATEMENT">
+		select * FROM lishu_construction_unit  where ${propertyName} = '${value}'
+	</select>
+	<select id="findListByYearName" resultType="ConstructionUnit">
+		SELECT
+		<include refid="constructionUnitColumns"/>
+		FROM lishu_construction_unit a
+		<where>
+			a.yearOfEvaluation = #{yearOfEvaluation}
+			and a.unitName in(
+			<foreach collection="list" index="index" item="item" separator=",">
+				#{item.unitName}
+			</foreach>
+			)
+		</where>
+	</select>
+
+</mapper>

+ 114 - 0
jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/modules/constructionunit/service/ConstructionUnitService.java

@@ -0,0 +1,114 @@
+/**
+ * Copyright © 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.modules.constructionunit.service;
+
+import java.util.HashMap;
+import java.util.List;
+
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import com.jeeplus.core.persistence.Page;
+import com.jeeplus.core.service.CrudService;
+import com.jeeplus.modules.constructionunit.entity.ConstructionUnit;
+import com.jeeplus.modules.constructionunit.mapper.ConstructionUnitMapper;
+
+/**
+ * ConstructionUnitService
+ * @author 邱悦
+ * @version 2021-12-29
+ */
+@Service
+@Transactional(readOnly = true)
+public class ConstructionUnitService extends CrudService<ConstructionUnitMapper, ConstructionUnit> {
+
+	public ConstructionUnit get(String id) {
+		return super.get(id);
+	}
+	
+	public List<ConstructionUnit> findList(ConstructionUnit constructionUnit) {
+		return super.findList(constructionUnit);
+	}
+	
+	public Page<ConstructionUnit> findPage(Page<ConstructionUnit> page, ConstructionUnit constructionUnit) {
+		return super.findPage(page, constructionUnit);
+	}
+
+
+
+	@Transactional(readOnly = false)
+	public void save(ConstructionUnit entity) {
+		super.save(entity);
+	}
+
+	@Transactional(readOnly = false)
+	public Boolean saveName(ConstructionUnit entity) {
+		if (null == mapper.getYearName(entity)) {
+			entity.preInsert();
+			mapper.insert(entity);
+			return true;
+		} else {
+			return false;
+		}
+	}
+
+	@Transactional(readOnly = false)
+	public Boolean update(ConstructionUnit entity) {
+		if (null == mapper.getYearName(entity)) {
+			entity.preUpdate();
+			mapper.update(entity);
+			return true;
+		} else {
+			ConstructionUnit constructionUnit = mapper.get(entity);
+			String unitName = constructionUnit.getUnitName();
+			String yearOfEvaluation = constructionUnit.getYearOfEvaluation();
+			String unitName1 = entity.getUnitName();
+			String yearOfEvaluation1 = entity.getYearOfEvaluation();
+			if (unitName.equals(unitName1) && yearOfEvaluation.equals(yearOfEvaluation1)) {
+				entity.preUpdate();
+				mapper.update(entity);
+				return true;
+			}else{
+				return false;
+			}
+		}
+	}
+
+	@Transactional(readOnly = false)
+	public HashMap<String,String> insertList(List<ConstructionUnit> list,String yearOfEvaluation) {
+		HashMap<String, String> returnMap = new HashMap<>();
+		StringBuilder builder = new StringBuilder();
+
+		List<ConstructionUnit> yearList = mapper.findListByYearName(list,yearOfEvaluation);
+		if (null != yearList && yearList.size() > 0) {
+			builder.append("插入失败");
+			for (ConstructionUnit c :
+					yearList) {
+				String unitName = c.getUnitName();
+				builder.append("单位名称《" + unitName + "》已存在;");
+			}
+			returnMap.put("insertFlag","false");
+		}else{
+			builder.append("插入" + list.size() + "条数据");
+			returnMap.put("insertFlag","true");
+			for (ConstructionUnit c :
+					list) {
+				c.preInsert();
+				c.setYearOfEvaluation(yearOfEvaluation);
+			}
+			mapper.insertList(list);
+		}
+
+		returnMap.put("builder", builder.toString());
+		return returnMap;
+	}
+
+
+
+	@Transactional(readOnly = false)
+	public void delete(ConstructionUnit constructionUnit) {
+		super.delete(constructionUnit);
+	}
+	
+}

+ 212 - 0
jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/modules/constructionunit/web/ConstructionUnitController.java

@@ -0,0 +1,212 @@
+/**
+ * Copyright © 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.modules.constructionunit.web;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.ConstraintViolationException;
+
+import com.jeeplus.modules.constructionunit.entity.ConstructionExportUnit;
+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.ui.Model;
+import org.springframework.web.bind.annotation.ModelAttribute;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+
+import com.google.common.collect.Lists;
+import com.jeeplus.common.utils.DateUtils;
+import com.jeeplus.common.json.AjaxJson;
+import com.jeeplus.core.persistence.Page;
+import com.jeeplus.core.web.BaseController;
+import com.jeeplus.common.utils.StringUtils;
+import com.jeeplus.common.utils.excel.ExportExcel;
+import com.jeeplus.common.utils.excel.ImportExcel;
+import com.jeeplus.modules.constructionunit.entity.ConstructionUnit;
+import com.jeeplus.modules.constructionunit.service.ConstructionUnitService;
+
+/**
+ * ConstructionUnitController
+ * @author 邱悦
+ * @version 2021-12-29
+ */
+@RestController
+@RequestMapping(value = "/constructionUnit/constructionUnit")
+public class ConstructionUnitController extends BaseController {
+
+	@Autowired
+	private ConstructionUnitService constructionUnitService;
+
+	@ModelAttribute
+	public ConstructionUnit get(@RequestParam(required=false) String id) {
+		ConstructionUnit entity = null;
+		if (StringUtils.isNotBlank(id)){
+			entity = constructionUnitService.get(id);
+		}
+		if (entity == null){
+			entity = new ConstructionUnit();
+		}
+		return entity;
+	}
+
+	/**
+	 * 施工单位列表数据
+	 */
+	@RequiresPermissions("constructionUnit:constructionUnit:list")
+	@GetMapping("list")
+	public AjaxJson list(ConstructionUnit constructionUnit, HttpServletRequest request, HttpServletResponse response) {
+		Page<ConstructionUnit> page = constructionUnitService.findPage(new Page<ConstructionUnit>(request, response), constructionUnit);
+		return AjaxJson.success().put("page",page);
+	}
+
+	/**
+	 * 根据Id获取施工单位数据
+	 */
+	@RequiresPermissions(value={"constructionUnit:constructionUnit:view","constructionUnit:constructionUnit:add","constructionUnit:constructionUnit:edit"},logical=Logical.OR)
+	@GetMapping("queryById")
+	public AjaxJson queryById(ConstructionUnit constructionUnit) {
+		return AjaxJson.success().put("constructionUnit", constructionUnit);
+	}
+
+	/**
+	 * 保存施工单位
+	 */
+	@RequiresPermissions(value={"constructionUnit:constructionUnit:add","constructionUnit:constructionUnit:edit"},logical=Logical.OR)
+	@PostMapping("save")
+	public AjaxJson save(ConstructionUnit constructionUnit, Model model) throws Exception{
+		/**
+		 * 后台hibernate-validation插件校验
+		 */
+		String errMsg = beanValidator(constructionUnit);
+		if (StringUtils.isNotBlank(errMsg)){
+			return AjaxJson.error(errMsg);
+		}
+		//新增验证,年份加名称是否纯在,存在提是不予修改,不存在修改
+		Boolean aBoolean = constructionUnitService.saveName(constructionUnit);//保存
+		if (aBoolean) {
+			return AjaxJson.success("保存施工单位成功");
+		}else {
+			return AjaxJson.error("当前年度施工单位已存在");
+		}
+	}
+
+
+
+	/**
+	 * 保存施工单位
+	 */
+	@RequiresPermissions(value={"constructionUnit:constructionUnit:add","constructionUnit:constructionUnit:edit"},logical=Logical.OR)
+	@PostMapping("update")
+	public AjaxJson update(ConstructionUnit constructionUnit, Model model) throws Exception{
+		/**
+		 * 后台hibernate-validation插件校验
+		 */
+		String errMsg = beanValidator(constructionUnit);
+		if (StringUtils.isNotBlank(errMsg)){
+			return AjaxJson.error(errMsg);
+		}
+		//新增或编辑表单保存
+		Boolean update = constructionUnitService.update(constructionUnit);//保存
+		if (update) {
+			return AjaxJson.success("保存施工单位成功");
+		}else{
+			return AjaxJson.error("施工单位已存在");
+		}
+	}
+
+
+	/**
+	 * 批量删除施工单位
+	 */
+	@RequiresPermissions("constructionUnit:constructionUnit:del")
+	@DeleteMapping("delete")
+	public AjaxJson delete(String ids) {
+		String idArray[] =ids.split(",");
+		for(String id : idArray){
+			constructionUnitService.delete(constructionUnitService.get(id));
+		}
+		return AjaxJson.success("删除施工单位成功");
+	}
+
+	/**
+	 * 导出excel文件
+	 */
+	@RequiresPermissions("constructionUnit:constructionUnit:export")
+    @GetMapping("export")
+    public AjaxJson exportFile(ConstructionUnit constructionUnit, HttpServletRequest request, HttpServletResponse response) {
+		try {
+            String fileName = "施工单位"+DateUtils.getDate("yyyyMMddHHmmss")+".xlsx";
+            Page<ConstructionUnit> page = constructionUnitService.findPage(new Page<ConstructionUnit>(request, response, -1), constructionUnit);
+    		new ExportExcel("施工单位", ConstructionExportUnit.class).setDataList(page.getList()).write(response, fileName).dispose();
+    		return null;
+		} catch (Exception e) {
+			return AjaxJson.error("导出施工单位记录失败!失败信息:"+e.getMessage());
+		}
+    }
+
+	/**
+	 * 导入Excel数据
+
+	 */
+	@RequiresPermissions("constructionUnit:constructionUnit:import")
+    @PostMapping("import")
+   	public AjaxJson importFile(@RequestParam("file")MultipartFile file,String yearOfEvaluation, HttpServletResponse response, HttpServletRequest request) {
+		try {
+			ImportExcel ei = new ImportExcel(file, 1, 0);
+			int lastDataRowNum = ei.getLastDataRowNum();
+			List<ConstructionUnit> list = new ArrayList<>();
+			for (int i = 1; i < lastDataRowNum; i++) {
+				ConstructionUnit constructionUnit = new ConstructionUnit();
+				Row row = ei.getRow(i);
+				String cellValue = (String) ei.getCellValue(row, 0);
+				constructionUnit.setUnitName(cellValue);
+				list.add(constructionUnit);
+			}
+//			list = ei.getDataList(ConstructionUnit.class);
+			if (null != list && list.size() > 0) {
+				HashMap<String,String> StringMsg = constructionUnitService.insertList(list,yearOfEvaluation);
+				String insertFlag = StringMsg.get("insertFlag");
+				String builder = StringMsg.get("builder");
+				if ("true".equals(insertFlag)) {
+					return AjaxJson.success(builder);
+				}else{
+					return AjaxJson.error(builder);
+				}
+			}else{
+				return AjaxJson.error("导入数据为空");
+			}
+		} catch (Exception e) {
+			return AjaxJson.error("导入施工单位失败!失败信息:"+e.getMessage());
+		}
+    }
+
+	/**
+	 * 下载导入施工单位数据模板
+	 */
+	@RequiresPermissions("constructionUnit:constructionUnit:import")
+    @GetMapping("import/template")
+     public AjaxJson importFileTemplate(HttpServletResponse response) {
+		try {
+            String fileName = "施工单位数据导入模板.xlsx";
+    		List<String> list = Lists.newArrayList();
+    		new ExportExcel("", ConstructionUnit.class, 2).setDataList(list).write(response, fileName).dispose();
+    		return null;
+		} catch (Exception e) {
+			return AjaxJson.error( "导入模板下载失败!失败信息:"+e.getMessage());
+		}
+    }
+
+
+}

+ 53 - 0
jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/modules/criterion/entity/EvaluationCriterion.java

@@ -0,0 +1,53 @@
+/**
+ * Copyright © 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.modules.criterion.entity;
+
+import com.fasterxml.jackson.annotation.JsonBackReference;
+import javax.validation.constraints.NotNull;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+
+import com.jeeplus.core.persistence.TreeEntity;
+
+/**
+ * criterionEntity
+ * @author 邱悦
+ * @version 2021-12-28
+ */
+@JsonIgnoreProperties(value={"hibernateLazyInitializer","handler"})
+public class EvaluationCriterion extends TreeEntity<EvaluationCriterion> {
+	
+	private static final long serialVersionUID = 1L;
+	private String Veto;		// 是否否决
+	
+	
+	public EvaluationCriterion() {
+		super();
+	}
+
+	public EvaluationCriterion(String id){
+		super(id);
+	}
+
+	public String getVeto() {
+		return Veto;
+	}
+
+	public void setVeto(String Veto) {
+		this.Veto = Veto;
+	}
+	
+	public  EvaluationCriterion getParent() {
+			return parent;
+	}
+	
+	@Override
+	public void setParent(EvaluationCriterion parent) {
+		this.parent = parent;
+		
+	}
+	
+	public String getParentId() {
+		return parent != null && parent.getId() != null ? parent.getId() : "0";
+	}
+}

+ 20 - 0
jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/modules/criterion/mapper/EvaluationCriterionMapper.java

@@ -0,0 +1,20 @@
+/**
+ * Copyright © 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.modules.criterion.mapper;
+
+import org.springframework.stereotype.Repository;
+import com.jeeplus.core.persistence.TreeMapper;
+import org.apache.ibatis.annotations.Mapper;
+import com.jeeplus.modules.criterion.entity.EvaluationCriterion;
+
+/**
+ * criterionMAPPER接口
+ * @author 邱悦
+ * @version 2021-12-28
+ */
+@Mapper
+@Repository
+public interface EvaluationCriterionMapper extends TreeMapper<EvaluationCriterion> {
+	
+}

+ 175 - 0
jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/modules/criterion/mapper/xml/EvaluationCriterionMapper.xml

@@ -0,0 +1,175 @@
+<?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.criterion.mapper.EvaluationCriterionMapper">
+
+    <resultMap id="evaluationCriterionResult" type="EvaluationCriterion">
+   		<result property="id" column="id" />
+		<result property="name" column="name" />
+		<result property="sort" column="sort" />
+		<result property="parentIds" column="parentIds" />
+		<result property="Veto" column="Veto" />
+    </resultMap>
+
+	<sql id="evaluationCriterionColumns">
+		a.id AS "id",
+		a.veto AS "Veto",
+		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.parent_id AS "parent.id",
+		a.parent_ids AS "parentIds",
+		a.name AS "name",
+		a.sort AS "sort"
+	</sql>
+
+
+
+
+	<sql id="evaluationCriterionJoins">
+
+	</sql>
+
+
+
+	<select id="get" resultType="EvaluationCriterion">
+		SELECT
+			<include refid="evaluationCriterionColumns"/>
+		FROM evaluation_criterion a
+		<include refid="evaluationCriterionJoins"/>
+		WHERE a.id = #{id}
+	</select>
+
+	<select id="findList" resultType="EvaluationCriterion">
+		SELECT
+			<include refid="evaluationCriterionColumns"/>
+		FROM evaluation_criterion a
+		<include refid="evaluationCriterionJoins"/>
+		<where>
+			a.del_flag = #{DEL_FLAG_NORMAL}
+			${dataScope}
+			<if test="parent != null and parent.id != null and parent.id != ''">
+				AND a.parent_id = #{parent.id}
+			</if>
+			<if test="parentIds != null and parentIds != ''">
+				AND a.parent_ids LIKE
+				    <if test="_databaseId == 'postgre'">'%'||#{parentIds}||'%'</if>
+					<if test="_databaseId == 'oracle'">'%'||#{parentIds}||'%'</if>
+					<if test="_databaseId == 'mssql'">'%'+#{parentIds}+'%'</if>
+					<if test="_databaseId == 'mysql'">concat('%',#{parentIds},'%')</if>
+			</if>
+			<if test="name != null and name != ''">
+				AND a.name LIKE
+				    <if test="_databaseId == 'postgre'">'%'||#{name}||'%'</if>
+					<if test="_databaseId == 'oracle'">'%'||#{name}||'%'</if>
+					<if test="_databaseId == 'mssql'">'%'+#{name}+'%'</if>
+					<if test="_databaseId == 'mysql'">concat('%',#{name},'%')</if>
+			</if>
+		</where>
+		ORDER BY a.sort ASC
+	</select>
+
+	<select id="findAllList" resultType="EvaluationCriterion">
+		SELECT
+			<include refid="evaluationCriterionColumns"/>
+		FROM evaluation_criterion a
+		<include refid="evaluationCriterionJoins"/>
+		<where>
+			a.del_flag = #{DEL_FLAG_NORMAL}
+			${dataScope}
+		</where>
+		ORDER BY a.sort ASC
+	</select>
+
+	<select id="getChildren" parameterType="String" resultMap="evaluationCriterionResult">
+        select * from evaluation_criterion where parent_id = #{id} ORDER BY sort
+    </select>
+
+	<select id="findByParentIdsLike" resultType="EvaluationCriterion">
+		SELECT
+			a.id,
+			a.parent_id AS "parent.id",
+			a.parent_ids
+		FROM evaluation_criterion a
+		<include refid="evaluationCriterionJoins"/>
+		<where>
+			a.del_flag = #{DEL_FLAG_NORMAL}
+			AND a.parent_ids LIKE #{parentIds}
+		</where>
+		ORDER BY a.sort ASC
+	</select>
+
+	<insert id="insert">
+		INSERT INTO evaluation_criterion(
+			   id,
+			   veto,
+			   create_by,
+			   create_date,
+			   update_by,
+			   update_date,
+			   remarks,
+			   del_flag,
+			   parent_id,
+			   parent_ids,
+			   name,
+			   sort
+		) VALUES (
+			#{id},
+			#{Veto},
+			#{createBy.id},
+			#{createDate},
+			#{updateBy.id},
+			#{updateDate},
+			#{remarks},
+			#{delFlag},
+			#{parent.id},
+			#{parentIds},
+			#{name},
+			#{sort}
+		)
+	</insert>
+
+	<update id="update">
+		UPDATE evaluation_criterion SET
+			veto = #{Veto},
+			update_by = #{updateBy.id},
+			update_date = #{updateDate},
+			remarks = #{remarks},
+			parent_id = #{parent.id},
+			parent_ids = #{parentIds},
+			name = #{name},
+			sort = #{sort}
+		WHERE id = #{id}
+	</update>
+
+	<update id="updateParentIds">
+		UPDATE evaluation_criterion SET
+			parent_id = #{parent.id},
+			parent_ids = #{parentIds}
+		WHERE id = #{id}
+	</update>
+
+	<!--物理删除-->
+	<update id="delete">
+		DELETE FROM evaluation_criterion
+		WHERE id = #{id} OR parent_ids LIKE
+		<if test="_databaseId == 'postgre'">'%,'||#{id}||',%'</if>
+		<if test="_databaseId == 'oracle'">'%,'||#{id}||',%'</if>
+		<if test="_databaseId == 'mssql'">'%,'+#{id}+',%'</if>
+        <if test="_databaseId == 'mysql'">CONCAT('%,', #{id}, ',%')</if>
+	</update>
+
+	<!--逻辑删除-->
+	<update id="deleteByLogic">
+		UPDATE evaluation_criterion SET
+			del_flag = #{DEL_FLAG_DELETE}
+		WHERE id = #{id} OR parent_ids LIKE
+		<if test="_databaseId == 'postgre'">'%,'||#{id}||',%'</if>
+		<if test="_databaseId == 'oracle'">'%,'||#{id}||',%'</if>
+		<if test="_databaseId == 'mssql'">'%,'+#{id}+',%'</if>
+        <if test="_databaseId == 'mysql'">CONCAT('%,', #{id}, ',%')</if>
+	</update>
+
+</mapper>

+ 46 - 0
jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/modules/criterion/service/EvaluationCriterionService.java

@@ -0,0 +1,46 @@
+/**
+ * Copyright © 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.modules.criterion.service;
+
+import java.util.List;
+
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import com.jeeplus.core.service.TreeService;
+import com.jeeplus.common.utils.StringUtils;
+import com.jeeplus.modules.criterion.entity.EvaluationCriterion;
+import com.jeeplus.modules.criterion.mapper.EvaluationCriterionMapper;
+
+/**
+ * criterionService
+ * @author 邱悦
+ * @version 2021-12-28
+ */
+@Service
+@Transactional(readOnly = true)
+public class EvaluationCriterionService extends TreeService<EvaluationCriterionMapper, EvaluationCriterion> {
+
+	public EvaluationCriterion get(String id) {
+		return super.get(id);
+	}
+
+	public List<EvaluationCriterion> findList(EvaluationCriterion evaluationCriterion) {
+		if (StringUtils.isNotBlank(evaluationCriterion.getParentIds())){
+			evaluationCriterion.setParentIds(","+evaluationCriterion.getParentIds()+",");
+		}
+		return super.findList(evaluationCriterion);
+	}
+
+	@Transactional(readOnly = false)
+	public void save(EvaluationCriterion evaluationCriterion) {
+		super.save(evaluationCriterion);
+	}
+
+	@Transactional(readOnly = false)
+	public void delete(EvaluationCriterion evaluationCriterion) {
+		super.delete(evaluationCriterion);
+	}
+
+}

+ 136 - 0
jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/modules/criterion/web/EvaluationCriterionController.java

@@ -0,0 +1,136 @@
+/**
+ * Copyright © 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.modules.criterion.web;
+
+import java.util.List;
+
+import org.apache.shiro.authz.annotation.Logical;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+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.GetMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.google.common.collect.Lists;
+import com.jeeplus.common.json.AjaxJson;
+import com.jeeplus.core.web.BaseController;
+import com.jeeplus.common.utils.StringUtils;
+import com.jeeplus.modules.criterion.entity.EvaluationCriterion;
+import com.jeeplus.modules.criterion.service.EvaluationCriterionService;
+
+/**
+ * criterionController
+ * @author 邱悦
+ * @version 2021-12-28
+ */
+@RestController
+@RequestMapping(value = "/criterion/evaluationCriterion")
+public class EvaluationCriterionController extends BaseController {
+
+	@Autowired
+	private EvaluationCriterionService evaluationCriterionService;
+
+	@ModelAttribute
+	public EvaluationCriterion get(@RequestParam(required=false) String id) {
+		EvaluationCriterion entity = null;
+		if (StringUtils.isNotBlank(id)){
+			entity = evaluationCriterionService.get(id);
+		}
+		if (entity == null){
+			entity = new EvaluationCriterion();
+		}
+		return entity;
+	}
+
+
+	/**
+	 * 评价标准树表数据
+	 */
+	@RequiresPermissions("criterion:evaluationCriterion:list")
+	@GetMapping("list")
+	public AjaxJson list(EvaluationCriterion evaluationCriterion) {
+		return AjaxJson.success().put("list", evaluationCriterionService.findList(evaluationCriterion));
+	}
+
+	/**
+	 * 根据Id获取评价标准数据
+	 */
+	@RequiresPermissions(value={"criterion:evaluationCriterion:view","criterion:evaluationCriterion:add","criterion:evaluationCriterion:edit"},logical=Logical.OR)
+	@GetMapping("queryById")
+	public AjaxJson queryById(EvaluationCriterion evaluationCriterion) {
+		return AjaxJson.success().put("evaluationCriterion", evaluationCriterion);
+	}
+
+	/**
+	 * 保存评价标准
+	 */
+	@RequiresPermissions(value={"criterion:evaluationCriterion:add","criterion:evaluationCriterion:edit"},logical=Logical.OR)
+	@PostMapping("save")
+	public AjaxJson save(EvaluationCriterion evaluationCriterion, Model model) throws Exception{
+		/**
+		 * 后台hibernate-validation插件校验
+		 */
+		String errMsg = beanValidator(evaluationCriterion);
+		if (StringUtils.isNotBlank(errMsg)){
+			return AjaxJson.error(errMsg);
+		}
+		//新增或编辑表单保存
+		evaluationCriterionService.save(evaluationCriterion);//保存
+		return AjaxJson.success("保存评价标准成功");
+	}
+
+	/**
+	 * 删除评价标准
+	 */
+	@RequiresPermissions("criterion:evaluationCriterion:del")
+	@DeleteMapping("delete")
+	public AjaxJson delete(EvaluationCriterion evaluationCriterion) {
+		evaluationCriterionService.delete(evaluationCriterion);
+		return AjaxJson.success("删除评价标准成功");
+	}
+
+	/**
+	     * 获取JSON树形数据。
+	     * @param extId 排除的ID
+	     * @return
+	*/
+	@RequiresPermissions("user")
+	@GetMapping("treeData")
+	public AjaxJson treeData(@RequestParam(required = false) String extId) {
+		List<EvaluationCriterion> list = evaluationCriterionService.findList(new EvaluationCriterion());
+		List rootTree = getEvaluationCriterionTree(list, extId);
+		return AjaxJson.success().put("treeData", rootTree);
+	}
+
+	private List<EvaluationCriterion> getEvaluationCriterionTree(List<EvaluationCriterion> list, String extId) {
+		List<EvaluationCriterion> evaluationCriterions = Lists.newArrayList();
+		List<EvaluationCriterion> rootTrees = evaluationCriterionService.getChildren("0");
+		for (EvaluationCriterion root : rootTrees) {
+		    if (StringUtils.isBlank(extId) ||  !extId.equals(root.getId())) {
+		        evaluationCriterions.add(getChildOfTree(root, list, extId));
+		    }
+		}
+		return evaluationCriterions;
+	}
+
+	private EvaluationCriterion getChildOfTree(EvaluationCriterion evaluationCriterion, List<EvaluationCriterion> evaluationCriterionList, String extId) {
+		evaluationCriterion.setChildNodes(Lists.newArrayList());
+		for (EvaluationCriterion child : evaluationCriterionList) {
+		    if (StringUtils.isBlank(extId) ||  (!extId.equals(child.getId()) && child.getParentIds().indexOf("," + extId + ",") == -1)) {
+		        if (child.getParentId().equals(evaluationCriterion.getId())) {
+		            evaluationCriterion.getChildNodes().add(getChildOfTree(child, evaluationCriterionList, extId));
+		        }
+		    }
+		}
+		return evaluationCriterion;
+	}
+
+
+
+}