Enford 5 年之前
父节点
当前提交
0bb56e832d
共有 56 个文件被更改,包括 7708 次插入0 次删除
  1. 22 0
      src/main/java/com/jeeplus/modules/buydetails/dao/BuyDetailsDao.java
  2. 88 0
      src/main/java/com/jeeplus/modules/buydetails/entity/BuyDetails.java
  3. 56 0
      src/main/java/com/jeeplus/modules/buydetails/service/BuyDetailsService.java
  4. 224 0
      src/main/java/com/jeeplus/modules/buydetails/web/BuyDetailsController.java
  5. 19 0
      src/main/java/com/jeeplus/modules/casebuildinfo/dao/CaseBuildInfoDao.java
  6. 79 0
      src/main/java/com/jeeplus/modules/casebuildinfo/entity/CaseBuildInfo.java
  7. 50 0
      src/main/java/com/jeeplus/modules/casebuildinfo/service/CaseBuildInfoService.java
  8. 196 0
      src/main/java/com/jeeplus/modules/casebuildinfo/web/CaseBuildInfoController.java
  9. 20 0
      src/main/java/com/jeeplus/modules/casecategory/dao/CaseCategoryDao.java
  10. 77 0
      src/main/java/com/jeeplus/modules/casecategory/entity/CaseCategory.java
  11. 54 0
      src/main/java/com/jeeplus/modules/casecategory/service/CaseCategoryService.java
  12. 241 0
      src/main/java/com/jeeplus/modules/casecategory/web/CaseCategoryController.java
  13. 19 0
      src/main/java/com/jeeplus/modules/casedesigninfo/dao/CaseDesignInfoDao.java
  14. 79 0
      src/main/java/com/jeeplus/modules/casedesigninfo/entity/CaseDesignInfo.java
  15. 50 0
      src/main/java/com/jeeplus/modules/casedesigninfo/service/CaseDesignInfoService.java
  16. 196 0
      src/main/java/com/jeeplus/modules/casedesigninfo/web/CaseDesignInfoController.java
  17. 19 0
      src/main/java/com/jeeplus/modules/caseexecuteinfo/dao/CaseExecuteInfoDao.java
  18. 79 0
      src/main/java/com/jeeplus/modules/caseexecuteinfo/entity/CaseExecuteInfo.java
  19. 50 0
      src/main/java/com/jeeplus/modules/caseexecuteinfo/service/CaseExecuteInfoService.java
  20. 196 0
      src/main/java/com/jeeplus/modules/caseexecuteinfo/web/CaseExecuteInfoController.java
  21. 41 0
      src/main/java/com/jeeplus/modules/caseinfo/dao/CaseInfoDao.java
  22. 457 0
      src/main/java/com/jeeplus/modules/caseinfo/entity/CaseInfo.java
  23. 1213 0
      src/main/java/com/jeeplus/modules/caseinfo/service/CaseInfoService.java
  24. 1199 0
      src/main/java/com/jeeplus/modules/caseinfo/web/CaseInfoController.java
  25. 19 0
      src/main/java/com/jeeplus/modules/casematerials/dao/CaseMaterialsDao.java
  26. 204 0
      src/main/java/com/jeeplus/modules/casematerials/entity/CaseMaterials.java
  27. 53 0
      src/main/java/com/jeeplus/modules/casematerials/service/CaseMaterialsService.java
  28. 314 0
      src/main/java/com/jeeplus/modules/casematerials/web/CaseMaterialsController.java
  29. 19 0
      src/main/java/com/jeeplus/modules/casematerialsnorm/dao/CaseMaterialsNormDao.java
  30. 97 0
      src/main/java/com/jeeplus/modules/casematerialsnorm/entity/CaseMaterialsNorm.java
  31. 50 0
      src/main/java/com/jeeplus/modules/casematerialsnorm/service/CaseMaterialsNormService.java
  32. 196 0
      src/main/java/com/jeeplus/modules/casematerialsnorm/web/CaseMaterialsNormController.java
  33. 19 0
      src/main/java/com/jeeplus/modules/casemechanicalnorm/dao/CaseMechanicalNormDao.java
  34. 97 0
      src/main/java/com/jeeplus/modules/casemechanicalnorm/entity/CaseMechanicalNorm.java
  35. 50 0
      src/main/java/com/jeeplus/modules/casemechanicalnorm/service/CaseMechanicalNormService.java
  36. 196 0
      src/main/java/com/jeeplus/modules/casemechanicalnorm/web/CaseMechanicalNormController.java
  37. 19 0
      src/main/java/com/jeeplus/modules/casemember/dao/CaseMemberDao.java
  38. 47 0
      src/main/java/com/jeeplus/modules/casemember/entity/CaseMember.java
  39. 50 0
      src/main/java/com/jeeplus/modules/casemember/service/CaseMemberService.java
  40. 196 0
      src/main/java/com/jeeplus/modules/casemember/web/CaseMemberController.java
  41. 19 0
      src/main/java/com/jeeplus/modules/casenorm/dao/CaseNormDao.java
  42. 97 0
      src/main/java/com/jeeplus/modules/casenorm/entity/CaseNorm.java
  43. 50 0
      src/main/java/com/jeeplus/modules/casenorm/service/CaseNormService.java
  44. 196 0
      src/main/java/com/jeeplus/modules/casenorm/web/CaseNormController.java
  45. 19 0
      src/main/java/com/jeeplus/modules/casepeoplenorm/dao/CasePeopleNormDao.java
  46. 97 0
      src/main/java/com/jeeplus/modules/casepeoplenorm/entity/CasePeopleNorm.java
  47. 50 0
      src/main/java/com/jeeplus/modules/casepeoplenorm/service/CasePeopleNormService.java
  48. 196 0
      src/main/java/com/jeeplus/modules/casepeoplenorm/web/CasePeopleNormController.java
  49. 19 0
      src/main/java/com/jeeplus/modules/caseprojectfeature/dao/CaseProjectFeatureDao.java
  50. 57 0
      src/main/java/com/jeeplus/modules/caseprojectfeature/entity/CaseProjectFeature.java
  51. 50 0
      src/main/java/com/jeeplus/modules/caseprojectfeature/service/CaseProjectFeatureService.java
  52. 196 0
      src/main/java/com/jeeplus/modules/caseprojectfeature/web/CaseProjectFeatureController.java
  53. 19 0
      src/main/java/com/jeeplus/modules/contractclient/dao/WorkContractClientDao.java
  54. 47 0
      src/main/java/com/jeeplus/modules/contractclient/entity/WorkContractClient.java
  55. 50 0
      src/main/java/com/jeeplus/modules/contractclient/service/WorkContractClientService.java
  56. 196 0
      src/main/java/com/jeeplus/modules/contractclient/web/WorkContractClientController.java

+ 22 - 0
src/main/java/com/jeeplus/modules/buydetails/dao/BuyDetailsDao.java

@@ -0,0 +1,22 @@
+/**
+ * Copyright &copy; 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.modules.buydetails.dao;
+
+import com.jeeplus.modules.oabuy.entity.OaBuy;
+import java.util.List;
+import com.jeeplus.common.persistence.CrudDao;
+import com.jeeplus.common.persistence.annotation.MyBatisDao;
+import com.jeeplus.modules.buydetails.entity.BuyDetails;
+
+/**
+ * 采购明细DAO接口
+ * @author liuw
+ * @version 2018-01-16
+ */
+@MyBatisDao
+public interface BuyDetailsDao extends CrudDao<BuyDetails> {
+
+	public List<OaBuy> findListByoaBuy(OaBuy oaBuy);
+	
+}

+ 88 - 0
src/main/java/com/jeeplus/modules/buydetails/entity/BuyDetails.java

@@ -0,0 +1,88 @@
+/**
+ * Copyright &copy; 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.modules.buydetails.entity;
+
+import com.jeeplus.modules.oabuy.entity.OaBuy;
+
+import com.jeeplus.common.persistence.DataEntity;
+import com.jeeplus.common.utils.excel.annotation.ExcelField;
+
+/**
+ * 采购明细Entity
+ * @author liuw
+ * @version 2018-01-16
+ */
+public class BuyDetails extends DataEntity<BuyDetails> {
+	
+	private static final long serialVersionUID = 1L;
+	private OaBuy oaBuy;		// 采购申请id
+	private String name;		// 名称
+	private String format;		// 规格
+	private String amount;		// 数量
+	private String unit;		// 单位
+	private String price;		// 价格
+
+	public BuyDetails() {
+		super();
+	}
+
+	public BuyDetails(String id){
+		super(id);
+	}
+
+	@ExcelField(title="采购申请id", align=2, sort=7)
+	public OaBuy getOaBuy() {
+		return oaBuy;
+	}
+
+	public void setOaBuy(OaBuy oaBuy) {
+		this.oaBuy = oaBuy;
+	}
+	
+	@ExcelField(title="名称", align=2, sort=8)
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+	
+	@ExcelField(title="规格", align=2, sort=9)
+	public String getFormat() {
+		return format;
+	}
+
+	public void setFormat(String format) {
+		this.format = format;
+	}
+	
+	@ExcelField(title="数量", align=2, sort=10)
+	public String getAmount() {
+		return amount;
+	}
+
+	public void setAmount(String amount) {
+		this.amount = amount;
+	}
+	
+	@ExcelField(title="单位", align=2, sort=11)
+	public String getUnit() {
+		return unit;
+	}
+
+	public void setUnit(String unit) {
+		this.unit = unit;
+	}
+	
+	@ExcelField(title="价格", align=2, sort=12)
+	public String getPrice() {
+		return price;
+	}
+
+	public void setPrice(String price) {
+		this.price = price;
+	}
+	
+}

+ 56 - 0
src/main/java/com/jeeplus/modules/buydetails/service/BuyDetailsService.java

@@ -0,0 +1,56 @@
+/**
+ * Copyright &copy; 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.modules.buydetails.service;
+
+import java.util.List;
+
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import com.jeeplus.modules.oabuy.entity.OaBuy;
+import com.jeeplus.common.persistence.Page;
+import com.jeeplus.common.service.CrudService;
+import com.jeeplus.modules.buydetails.entity.BuyDetails;
+import com.jeeplus.modules.buydetails.dao.BuyDetailsDao;
+
+/**
+ * 采购明细Service
+ * @author liuw
+ * @version 2018-01-16
+ */
+@Service
+@Transactional(readOnly = true)
+public class BuyDetailsService extends CrudService<BuyDetailsDao, BuyDetails> {
+
+	public BuyDetails get(String id) {
+		return super.get(id);
+	}
+	
+	public List<BuyDetails> findList(BuyDetails buyDetails) {
+		return super.findList(buyDetails);
+	}
+	
+	public Page<BuyDetails> findPage(Page<BuyDetails> page, BuyDetails buyDetails) {
+		return super.findPage(page, buyDetails);
+	}
+	
+	@Transactional(readOnly = false)
+	public void save(BuyDetails buyDetails) {
+		super.save(buyDetails);
+	}
+	
+	@Transactional(readOnly = false)
+	public void delete(BuyDetails buyDetails) {
+		super.delete(buyDetails);
+	}
+	
+	public Page<OaBuy> findPageByoaBuy(Page<OaBuy> page, OaBuy oaBuy) {
+		oaBuy.setPage(page);
+		page.setList(dao.findListByoaBuy(oaBuy));
+		return page;
+	}
+	
+	
+	
+}

+ 224 - 0
src/main/java/com/jeeplus/modules/buydetails/web/BuyDetailsController.java

@@ -0,0 +1,224 @@
+/**
+ * Copyright &copy; 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.modules.buydetails.web;
+
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import java.util.List;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.ConstraintViolationException;
+
+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.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.servlet.mvc.support.RedirectAttributes;
+
+import com.jeeplus.modules.oabuy.entity.OaBuy;
+import com.google.common.collect.Lists;
+import com.jeeplus.common.utils.DateUtils;
+import com.jeeplus.common.utils.MyBeanUtils;
+import com.jeeplus.common.config.Global;
+import com.jeeplus.common.persistence.Page;
+import com.jeeplus.common.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.buydetails.entity.BuyDetails;
+import com.jeeplus.modules.buydetails.service.BuyDetailsService;
+
+/**
+ * 采购明细Controller
+ * @author liuw
+ * @version 2018-01-16
+ */
+@Controller
+@RequestMapping(value = "${adminPath}/buydetails/buyDetails")
+public class BuyDetailsController extends BaseController {
+
+	@Autowired
+	private BuyDetailsService buyDetailsService;
+	
+	@ModelAttribute
+	public BuyDetails get(@RequestParam(required=false) String id) {
+		BuyDetails entity = null;
+		if (StringUtils.isNotBlank(id)){
+			entity = buyDetailsService.get(id);
+		}
+		if (entity == null){
+			entity = new BuyDetails();
+		}
+		return entity;
+	}
+	
+	/**
+	 * 采购明细列表页面
+	 */
+	@RequiresPermissions("buydetails:buyDetails:list")
+	@RequestMapping(value = {"list", ""})
+	public String list(BuyDetails buyDetails, HttpServletRequest request, HttpServletResponse response, Model model) {
+		Page<BuyDetails> page = buyDetailsService.findPage(new Page<BuyDetails>(request, response), buyDetails); 
+		model.addAttribute("page", page);
+		return "modules/buydetails/buyDetailsList";
+	}
+
+	/**
+	 * 查看,增加,编辑采购明细表单页面
+	 */
+	/*@RequiresPermissions(value={"buydetails:buyDetails:view","buydetails:buyDetails:add","buydetails:buyDetails:edit"},logical=Logical.OR)*/
+	@RequestMapping(value = "form")
+	public String form(BuyDetails buyDetails, Model model) {
+		model.addAttribute("buyDetails", buyDetails);
+		return "modules/buydetails/buyDetailsForm";
+	}
+
+	/**
+	 * 保存采购明细
+	 */
+	/*@RequiresPermissions(value={"buydetails:buyDetails:add","buydetails:buyDetails:edit"},logical=Logical.OR)*/
+	@RequestMapping(value = "save")
+	public String save(BuyDetails buyDetails, Model model, RedirectAttributes redirectAttributes) throws Exception{
+		if (!beanValidator(model, buyDetails)){
+			return form(buyDetails, model);
+		}
+		if(!buyDetails.getIsNewRecord()){//编辑表单保存
+			BuyDetails t = buyDetailsService.get(buyDetails.getId());//从数据库取出记录的值
+			MyBeanUtils.copyBeanNotNull2Bean(buyDetails, t);//将编辑表单中的非NULL值覆盖数据库记录中的值
+			buyDetailsService.save(t);//保存
+		}else{//新增表单保存
+			buyDetailsService.save(buyDetails);//保存
+		}
+		addMessage(redirectAttributes, "保存采购明细成功");
+		return "redirect:"+Global.getAdminPath()+"/buydetails/buyDetails/?repage";
+	}
+	
+	/**
+	 * 删除采购明细
+	 */
+	/*@RequiresPermissions("buydetails:buyDetails:del")*/
+	@RequestMapping(value = "delete")
+	public String delete(BuyDetails buyDetails, RedirectAttributes redirectAttributes) {
+		buyDetailsService.delete(buyDetails);
+		addMessage(redirectAttributes, "删除采购明细成功");
+		return "redirect:"+Global.getAdminPath()+"/buydetails/buyDetails/?repage";
+	}
+	
+	/**
+	 * 批量删除采购明细
+	 */
+	@RequiresPermissions("buydetails:buyDetails:del")
+	@RequestMapping(value = "deleteAll")
+	public String deleteAll(String ids, RedirectAttributes redirectAttributes) {
+		String idArray[] =ids.split(",");
+		for(String id : idArray){
+			buyDetailsService.delete(buyDetailsService.get(id));
+		}
+		addMessage(redirectAttributes, "删除采购明细成功");
+		return "redirect:"+Global.getAdminPath()+"/buydetails/buyDetails/?repage";
+	}
+	
+	/**
+	 * 导出excel文件
+	 */
+	@RequiresPermissions("buydetails:buyDetails:export")
+    @RequestMapping(value = "export", method=RequestMethod.POST)
+    public String exportFile(BuyDetails buyDetails, HttpServletRequest request, HttpServletResponse response, RedirectAttributes redirectAttributes) {
+		try {
+            String fileName = "采购明细"+DateUtils.getDate("yyyyMMddHHmmss")+".xlsx";
+            Page<BuyDetails> page = buyDetailsService.findPage(new Page<BuyDetails>(request, response, -1), buyDetails);
+    		new ExportExcel("采购明细", BuyDetails.class).setDataList(page.getList()).write(response, fileName).dispose();
+    		return null;
+		} catch (Exception e) {
+			addMessage(redirectAttributes, "导出采购明细记录失败!失败信息:"+e.getMessage());
+		}
+		return "redirect:"+Global.getAdminPath()+"/buydetails/buyDetails/?repage";
+    }
+
+	/**
+	 * 导入Excel数据
+
+	 */
+	@RequiresPermissions("buydetails:buyDetails:import")
+    @RequestMapping(value = "import", method=RequestMethod.POST)
+    public String importFile(MultipartFile file, RedirectAttributes redirectAttributes) {
+		try {
+			int successNum = 0;
+			int failureNum = 0;
+			StringBuilder failureMsg = new StringBuilder();
+			ImportExcel ei = new ImportExcel(file, 1, 0);
+			List<BuyDetails> list = ei.getDataList(BuyDetails.class);
+			for (BuyDetails buyDetails : list){
+				try{
+					buyDetailsService.save(buyDetails);
+					successNum++;
+				}catch(ConstraintViolationException ex){
+					failureNum++;
+				}catch (Exception ex) {
+					failureNum++;
+				}
+			}
+			if (failureNum>0){
+				failureMsg.insert(0, ",失败 "+failureNum+" 条采购明细记录。");
+			}
+			addMessage(redirectAttributes, "已成功导入 "+successNum+" 条采购明细记录"+failureMsg);
+		} catch (Exception e) {
+			addMessage(redirectAttributes, "导入采购明细失败!失败信息:"+e.getMessage());
+		}
+		return "redirect:"+Global.getAdminPath()+"/buydetails/buyDetails/?repage";
+    }
+	
+	/**
+	 * 下载导入采购明细数据模板
+	 */
+	@RequiresPermissions("buydetails:buyDetails:import")
+    @RequestMapping(value = "import/template")
+    public String importFileTemplate(HttpServletResponse response, RedirectAttributes redirectAttributes) {
+		try {
+            String fileName = "采购明细数据导入模板.xlsx";
+    		List<BuyDetails> list = Lists.newArrayList(); 
+    		new ExportExcel("采购明细数据", BuyDetails.class, 1).setDataList(list).write(response, fileName).dispose();
+    		return null;
+		} catch (Exception e) {
+			addMessage(redirectAttributes, "导入模板下载失败!失败信息:"+e.getMessage());
+		}
+		return "redirect:"+Global.getAdminPath()+"/buydetails/buyDetails/?repage";
+    }
+	
+	
+	/**
+	 * 选择采购申请id
+	 */
+	@RequestMapping(value = "selectoaBuy")
+	public String selectoaBuy(OaBuy oaBuy, String url, String fieldLabels, String fieldKeys, String searchLabel, String searchKey, HttpServletRequest request, HttpServletResponse response, Model model) {
+		Page<OaBuy> page = buyDetailsService.findPageByoaBuy(new Page<OaBuy>(request, response),  oaBuy);
+		try {
+			fieldLabels = URLDecoder.decode(fieldLabels, "UTF-8");
+			fieldKeys = URLDecoder.decode(fieldKeys, "UTF-8");
+			searchLabel = URLDecoder.decode(searchLabel, "UTF-8");
+			searchKey = URLDecoder.decode(searchKey, "UTF-8");
+		} catch (UnsupportedEncodingException e) {
+			e.printStackTrace();
+		}
+		model.addAttribute("labelNames", fieldLabels.split("\\|"));
+		model.addAttribute("labelValues", fieldKeys.split("\\|"));
+		model.addAttribute("fieldLabels", fieldLabels);
+		model.addAttribute("fieldKeys", fieldKeys);
+		model.addAttribute("url", url);
+		model.addAttribute("searchLabel", searchLabel);
+		model.addAttribute("searchKey", searchKey);
+		model.addAttribute("obj", oaBuy);
+		model.addAttribute("page", page);
+		return "modules/sys/gridselect";
+	}
+	
+
+}

+ 19 - 0
src/main/java/com/jeeplus/modules/casebuildinfo/dao/CaseBuildInfoDao.java

@@ -0,0 +1,19 @@
+/**
+ * Copyright &copy; 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.modules.casebuildinfo.dao;
+
+import com.jeeplus.common.persistence.CrudDao;
+import com.jeeplus.common.persistence.annotation.MyBatisDao;
+import com.jeeplus.modules.casebuildinfo.entity.CaseBuildInfo;
+
+/**
+ * 案例-建设单位DAO接口
+ * @author fgy
+ * @version 2018-01-24
+ */
+@MyBatisDao
+public interface CaseBuildInfoDao extends CrudDao<CaseBuildInfo> {
+
+	
+}

+ 79 - 0
src/main/java/com/jeeplus/modules/casebuildinfo/entity/CaseBuildInfo.java

@@ -0,0 +1,79 @@
+/**
+ * Copyright &copy; 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.modules.casebuildinfo.entity;
+
+import org.hibernate.validator.constraints.Email;
+
+import com.jeeplus.common.persistence.DataEntity;
+import com.jeeplus.common.utils.excel.annotation.ExcelField;
+
+/**
+ * 案例-建设单位Entity
+ * @author fgy
+ * @version 2018-01-24
+ */
+public class CaseBuildInfo extends DataEntity<CaseBuildInfo> {
+	
+	private static final long serialVersionUID = 1L;
+	private String name;		// 名称
+	private String linkedman;		// 联系人名称
+	private String mobile;		// 联系电话
+	private String email;		// 邮箱
+	private String caseId;		// 案例id
+	
+	public CaseBuildInfo() {
+		super();
+	}
+
+	public CaseBuildInfo(String id){
+		super(id);
+	}
+
+	@ExcelField(title="名称", align=2, sort=7)
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+	
+	@ExcelField(title="联系人名称", align=2, sort=8)
+	public String getLinkedman() {
+		return linkedman;
+	}
+
+	public void setLinkedman(String linkedman) {
+		this.linkedman = linkedman;
+	}
+	
+	@ExcelField(title="联系电话", align=2, sort=9)
+	public String getMobile() {
+		return mobile;
+	}
+
+	public void setMobile(String mobile) {
+		this.mobile = mobile;
+	}
+	
+	@Email(message="邮箱必须为合法邮箱")
+	@ExcelField(title="邮箱", align=2, sort=10)
+	public String getEmail() {
+		return email;
+	}
+
+	public void setEmail(String email) {
+		this.email = email;
+	}
+	
+	@ExcelField(title="案例id", align=2, sort=11)
+	public String getCaseId() {
+		return caseId;
+	}
+
+	public void setCaseId(String caseId) {
+		this.caseId = caseId;
+	}
+	
+}

+ 50 - 0
src/main/java/com/jeeplus/modules/casebuildinfo/service/CaseBuildInfoService.java

@@ -0,0 +1,50 @@
+/**
+ * Copyright &copy; 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.modules.casebuildinfo.service;
+
+import java.util.List;
+
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import com.jeeplus.common.persistence.Page;
+import com.jeeplus.common.service.CrudService;
+import com.jeeplus.modules.casebuildinfo.entity.CaseBuildInfo;
+import com.jeeplus.modules.casebuildinfo.dao.CaseBuildInfoDao;
+
+/**
+ * 案例-建设单位Service
+ * @author fgy
+ * @version 2018-01-24
+ */
+@Service
+@Transactional(readOnly = true)
+public class CaseBuildInfoService extends CrudService<CaseBuildInfoDao, CaseBuildInfo> {
+
+	public CaseBuildInfo get(String id) {
+		return super.get(id);
+	}
+	
+	public List<CaseBuildInfo> findList(CaseBuildInfo caseBuildInfo) {
+		return super.findList(caseBuildInfo);
+	}
+	
+	public Page<CaseBuildInfo> findPage(Page<CaseBuildInfo> page, CaseBuildInfo caseBuildInfo) {
+		return super.findPage(page, caseBuildInfo);
+	}
+	
+	@Transactional(readOnly = false)
+	public void save(CaseBuildInfo caseBuildInfo) {
+		super.save(caseBuildInfo);
+	}
+	
+	@Transactional(readOnly = false)
+	public void delete(CaseBuildInfo caseBuildInfo) {
+		super.delete(caseBuildInfo);
+	}
+	
+	
+	
+	
+}

+ 196 - 0
src/main/java/com/jeeplus/modules/casebuildinfo/web/CaseBuildInfoController.java

@@ -0,0 +1,196 @@
+/**
+ * Copyright &copy; 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.modules.casebuildinfo.web;
+
+import java.util.List;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.ConstraintViolationException;
+
+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.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.servlet.mvc.support.RedirectAttributes;
+
+import com.google.common.collect.Lists;
+import com.jeeplus.common.utils.DateUtils;
+import com.jeeplus.common.utils.MyBeanUtils;
+import com.jeeplus.common.config.Global;
+import com.jeeplus.common.persistence.Page;
+import com.jeeplus.common.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.casebuildinfo.entity.CaseBuildInfo;
+import com.jeeplus.modules.casebuildinfo.service.CaseBuildInfoService;
+
+/**
+ * 案例-建设单位Controller
+ * @author fgy
+ * @version 2018-01-24
+ */
+@Controller
+@RequestMapping(value = "${adminPath}/casebuildinfo/caseBuildInfo")
+public class CaseBuildInfoController extends BaseController {
+
+	@Autowired
+	private CaseBuildInfoService caseBuildInfoService;
+	
+	@ModelAttribute
+	public CaseBuildInfo get(@RequestParam(required=false) String id) {
+		CaseBuildInfo entity = null;
+		if (StringUtils.isNotBlank(id)){
+			entity = caseBuildInfoService.get(id);
+		}
+		if (entity == null){
+			entity = new CaseBuildInfo();
+		}
+		return entity;
+	}
+	
+	/**
+	 * 案例-建设单位列表页面
+	 */
+	@RequiresPermissions("casebuildinfo:caseBuildInfo:list")
+	@RequestMapping(value = {"list", ""})
+	public String list(CaseBuildInfo caseBuildInfo, HttpServletRequest request, HttpServletResponse response, Model model) {
+		Page<CaseBuildInfo> page = caseBuildInfoService.findPage(new Page<CaseBuildInfo>(request, response), caseBuildInfo); 
+		model.addAttribute("page", page);
+		return "modules/casebuildinfo/caseBuildInfoList";
+	}
+
+	/**
+	 * 查看,增加,编辑案例-建设单位表单页面
+	 */
+	@RequiresPermissions(value={"casebuildinfo:caseBuildInfo:view","casebuildinfo:caseBuildInfo:add","casebuildinfo:caseBuildInfo:edit"},logical=Logical.OR)
+	@RequestMapping(value = "form")
+	public String form(CaseBuildInfo caseBuildInfo, Model model) {
+		model.addAttribute("caseBuildInfo", caseBuildInfo);
+		return "modules/casebuildinfo/caseBuildInfoForm";
+	}
+
+	/**
+	 * 保存案例-建设单位
+	 */
+	@RequiresPermissions(value={"casebuildinfo:caseBuildInfo:add","casebuildinfo:caseBuildInfo:edit"},logical=Logical.OR)
+	@RequestMapping(value = "save")
+	public String save(CaseBuildInfo caseBuildInfo, Model model, RedirectAttributes redirectAttributes) throws Exception{
+		if (!beanValidator(model, caseBuildInfo)){
+			return form(caseBuildInfo, model);
+		}
+		if(!caseBuildInfo.getIsNewRecord()){//编辑表单保存
+			CaseBuildInfo t = caseBuildInfoService.get(caseBuildInfo.getId());//从数据库取出记录的值
+			MyBeanUtils.copyBeanNotNull2Bean(caseBuildInfo, t);//将编辑表单中的非NULL值覆盖数据库记录中的值
+			caseBuildInfoService.save(t);//保存
+		}else{//新增表单保存
+			caseBuildInfoService.save(caseBuildInfo);//保存
+		}
+		addMessage(redirectAttributes, "保存案例-建设单位成功");
+		return "redirect:"+Global.getAdminPath()+"/casebuildinfo/caseBuildInfo/?repage";
+	}
+	
+	/**
+	 * 删除案例-建设单位
+	 */
+	@RequiresPermissions("casebuildinfo:caseBuildInfo:del")
+	@RequestMapping(value = "delete")
+	public String delete(CaseBuildInfo caseBuildInfo, RedirectAttributes redirectAttributes) {
+		caseBuildInfoService.delete(caseBuildInfo);
+		addMessage(redirectAttributes, "删除案例-建设单位成功");
+		return "redirect:"+Global.getAdminPath()+"/casebuildinfo/caseBuildInfo/?repage";
+	}
+	
+	/**
+	 * 批量删除案例-建设单位
+	 */
+	@RequiresPermissions("casebuildinfo:caseBuildInfo:del")
+	@RequestMapping(value = "deleteAll")
+	public String deleteAll(String ids, RedirectAttributes redirectAttributes) {
+		String idArray[] =ids.split(",");
+		for(String id : idArray){
+			caseBuildInfoService.delete(caseBuildInfoService.get(id));
+		}
+		addMessage(redirectAttributes, "删除案例-建设单位成功");
+		return "redirect:"+Global.getAdminPath()+"/casebuildinfo/caseBuildInfo/?repage";
+	}
+	
+	/**
+	 * 导出excel文件
+	 */
+	@RequiresPermissions("casebuildinfo:caseBuildInfo:export")
+    @RequestMapping(value = "export", method=RequestMethod.POST)
+    public String exportFile(CaseBuildInfo caseBuildInfo, HttpServletRequest request, HttpServletResponse response, RedirectAttributes redirectAttributes) {
+		try {
+            String fileName = "案例-建设单位"+DateUtils.getDate("yyyyMMddHHmmss")+".xlsx";
+            Page<CaseBuildInfo> page = caseBuildInfoService.findPage(new Page<CaseBuildInfo>(request, response, -1), caseBuildInfo);
+    		new ExportExcel("案例-建设单位", CaseBuildInfo.class).setDataList(page.getList()).write(response, fileName).dispose();
+    		return null;
+		} catch (Exception e) {
+			addMessage(redirectAttributes, "导出案例-建设单位记录失败!失败信息:"+e.getMessage());
+		}
+		return "redirect:"+Global.getAdminPath()+"/casebuildinfo/caseBuildInfo/?repage";
+    }
+
+	/**
+	 * 导入Excel数据
+
+	 */
+	@RequiresPermissions("casebuildinfo:caseBuildInfo:import")
+    @RequestMapping(value = "import", method=RequestMethod.POST)
+    public String importFile(MultipartFile file, RedirectAttributes redirectAttributes) {
+		try {
+			int successNum = 0;
+			int failureNum = 0;
+			StringBuilder failureMsg = new StringBuilder();
+			ImportExcel ei = new ImportExcel(file, 1, 0);
+			List<CaseBuildInfo> list = ei.getDataList(CaseBuildInfo.class);
+			for (CaseBuildInfo caseBuildInfo : list){
+				try{
+					caseBuildInfoService.save(caseBuildInfo);
+					successNum++;
+				}catch(ConstraintViolationException ex){
+					failureNum++;
+				}catch (Exception ex) {
+					failureNum++;
+				}
+			}
+			if (failureNum>0){
+				failureMsg.insert(0, ",失败 "+failureNum+" 条案例-建设单位记录。");
+			}
+			addMessage(redirectAttributes, "已成功导入 "+successNum+" 条案例-建设单位记录"+failureMsg);
+		} catch (Exception e) {
+			addMessage(redirectAttributes, "导入案例-建设单位失败!失败信息:"+e.getMessage());
+		}
+		return "redirect:"+Global.getAdminPath()+"/casebuildinfo/caseBuildInfo/?repage";
+    }
+	
+	/**
+	 * 下载导入案例-建设单位数据模板
+	 */
+	@RequiresPermissions("casebuildinfo:caseBuildInfo:import")
+    @RequestMapping(value = "import/template")
+    public String importFileTemplate(HttpServletResponse response, RedirectAttributes redirectAttributes) {
+		try {
+            String fileName = "案例-建设单位数据导入模板.xlsx";
+    		List<CaseBuildInfo> list = Lists.newArrayList(); 
+    		new ExportExcel("案例-建设单位数据", CaseBuildInfo.class, 1).setDataList(list).write(response, fileName).dispose();
+    		return null;
+		} catch (Exception e) {
+			addMessage(redirectAttributes, "导入模板下载失败!失败信息:"+e.getMessage());
+		}
+		return "redirect:"+Global.getAdminPath()+"/casebuildinfo/caseBuildInfo/?repage";
+    }
+	
+	
+	
+
+}

+ 20 - 0
src/main/java/com/jeeplus/modules/casecategory/dao/CaseCategoryDao.java

@@ -0,0 +1,20 @@
+/**
+ * Copyright &copy; 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.modules.casecategory.dao;
+
+import com.jeeplus.common.persistence.CrudDao;
+import com.jeeplus.common.persistence.TreeDao;
+import com.jeeplus.common.persistence.annotation.MyBatisDao;
+import com.jeeplus.modules.casecategory.entity.CaseCategory;
+
+/**
+ * 案例分类DAO接口
+ * @author liuw
+ * @version 2018-01-24
+ */
+@MyBatisDao
+public interface CaseCategoryDao extends TreeDao<CaseCategory> {
+
+	
+}

+ 77 - 0
src/main/java/com/jeeplus/modules/casecategory/entity/CaseCategory.java

@@ -0,0 +1,77 @@
+package com.jeeplus.modules.casecategory.entity; /**
+ * Copyright &copy; 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+
+import com.fasterxml.jackson.annotation.JsonBackReference;
+import javax.validation.constraints.NotNull;
+
+import com.jeeplus.common.persistence.TreeEntity;
+
+/**
+ * Entity
+ * @author
+ * @version 2017-03-22
+ */
+public class CaseCategory extends TreeEntity<CaseCategory> {
+
+	private static final long serialVersionUID = 1L;
+	private CaseCategory parent;		// 父级编号
+	private String parentIds;		// 所有父级编号
+	private String name;		// 编号分类名
+	private Integer sort;		// 排序
+	private String identifier;
+
+	public String getIdentifier() {
+		return identifier;
+	}
+
+	public void setIdentifier(String identifier) {
+		this.identifier = identifier;
+	}
+
+	public CaseCategory() {
+		super();
+	}
+
+	public CaseCategory(String id){
+		super(id);
+	}
+
+	@JsonBackReference
+	public CaseCategory getParent() {
+		return parent;
+	}
+
+	public void setParent(CaseCategory parent) {
+		this.parent = parent;
+	}
+
+	public String getParentIds() {
+		return parentIds;
+	}
+
+	public void setParentIds(String parentIds) {
+		this.parentIds = parentIds;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	@NotNull(message="排序不能为空")
+	public Integer getSort() {
+		return sort;
+	}
+
+	public void setSort(Integer sort) {
+		this.sort = sort;
+	}
+
+	public String getParentId() {
+		return parent != null && parent.getId() != null ? parent.getId() : "0";
+	}
+}

+ 54 - 0
src/main/java/com/jeeplus/modules/casecategory/service/CaseCategoryService.java

@@ -0,0 +1,54 @@
+/**
+ * Copyright &copy; 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.modules.casecategory.service;
+
+import java.util.List;
+
+import com.jeeplus.common.service.TreeService;
+import com.jeeplus.common.utils.StringUtils;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import com.jeeplus.common.persistence.Page;
+import com.jeeplus.modules.casecategory.entity.CaseCategory;
+import com.jeeplus.modules.casecategory.dao.CaseCategoryDao;
+
+/**
+ * 案例分类Service
+ * @author liuw
+ * @version 2018-01-24
+ */
+@Service
+@Transactional(readOnly = true)
+public class CaseCategoryService extends TreeService<CaseCategoryDao, CaseCategory> {
+
+	public CaseCategory get(String id) {
+		return super.get(id);
+	}
+	
+	public List<CaseCategory> findList(CaseCategory caseCategory) {
+		if (StringUtils.isNotBlank(caseCategory.getParentIds())){
+			caseCategory.setParentIds(","+caseCategory.getParentIds()+",");
+		}
+		return super.findList(caseCategory);
+	}
+	
+	public Page<CaseCategory> findPage(Page<CaseCategory> page, CaseCategory caseCategory) {
+		return super.findPage(page, caseCategory);
+	}
+	
+	@Transactional(readOnly = false)
+	public void save(CaseCategory caseCategory) {
+		super.save(caseCategory);
+	}
+	
+	@Transactional(readOnly = false)
+	public void delete(CaseCategory caseCategory) {
+		super.delete(caseCategory);
+	}
+	
+	
+	
+	
+}

+ 241 - 0
src/main/java/com/jeeplus/modules/casecategory/web/CaseCategoryController.java

@@ -0,0 +1,241 @@
+/**
+ * Copyright &copy; 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.modules.casecategory.web;
+
+import java.util.List;
+import java.util.Map;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.ConstraintViolationException;
+
+import com.google.common.collect.Maps;
+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.*;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.servlet.mvc.support.RedirectAttributes;
+
+import com.google.common.collect.Lists;
+import com.jeeplus.common.utils.DateUtils;
+import com.jeeplus.common.utils.MyBeanUtils;
+import com.jeeplus.common.config.Global;
+import com.jeeplus.common.persistence.Page;
+import com.jeeplus.common.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.casecategory.entity.CaseCategory;
+import com.jeeplus.modules.casecategory.service.CaseCategoryService;
+
+/**
+ * 案例分类Controller
+ * @author liuw
+ * @version 2018-01-24
+			*/
+	@Controller
+	@RequestMapping(value = "${adminPath}/casecategory/caseCategory")
+	public class CaseCategoryController extends BaseController {
+
+		@Autowired
+	private CaseCategoryService caseCategoryService;
+	@Autowired
+	private HttpServletRequest request;
+	
+	@ModelAttribute
+	public CaseCategory get(@RequestParam(required=false) String id) {
+		CaseCategory entity = null;
+		if (StringUtils.isNotBlank(id)){
+			entity = caseCategoryService.get(id);
+		}
+		if (entity == null){
+			entity = new CaseCategory();
+		}
+		return entity;
+	}
+	
+	/**
+	 * 案例分类列表页面
+	 */
+	@RequiresPermissions("casecategory:caseCategory:list")
+	@RequestMapping(value = {"list", ""})
+	public String list(CaseCategory caseCategory, HttpServletRequest request, HttpServletResponse response, Model model) {
+		/*Page<CaseCategory> page = caseCategoryService.findPage(new Page<CaseCategory>(request, response), caseCategory);
+		model.addAttribute("page", page);
+		return "modules/casecategory/caseCategoryList";*/
+		List<CaseCategory> list = caseCategoryService.findList(caseCategory);
+		model.addAttribute("list", list);
+		return "modules/casecategory/caseCategoryList";
+	}
+
+	/**
+	 * 查看,增加,编辑案例分类表单页面
+	 */
+	@RequiresPermissions(value={"casecategory:caseCategory:view","casecategory:caseCategory:add","casecategory:caseCategory:edit"},logical=Logical.OR)
+	@RequestMapping(value = "form")
+	public String form(CaseCategory caseCategory, Model model) {
+		if (caseCategory.getParent()!=null && StringUtils.isNotBlank(caseCategory.getParent().getId())){
+			caseCategory.setParent(caseCategoryService.get(caseCategory.getParent().getId()));
+			// 获取排序号,最末节点排序号+30
+			if (StringUtils.isBlank(caseCategory.getId())){
+				CaseCategory sysNumberClassChild = new CaseCategory();
+				sysNumberClassChild.setParent(new CaseCategory(caseCategory.getParent().getId()));
+				List<CaseCategory> list = caseCategoryService.findList(caseCategory);
+				if (list.size() > 0){
+					caseCategory.setSort(list.get(list.size()-1).getSort());
+					if (caseCategory.getSort() != null){
+						caseCategory.setSort(caseCategory.getSort() + 30);
+					}
+				}
+			}
+		}
+		if (caseCategory.getSort() == null){
+			caseCategory.setSort(30);
+		}
+		model.addAttribute("caseCategory", caseCategory);
+		String tabId = request.getParameter("tabId");
+		if("0".equals(tabId)){
+			return "modules/casecategory/caseCategoryView";
+		}
+		return "modules/casecategory/caseCategoryForm";
+	}
+
+	/**
+	 * 保存案例分类
+	 */
+	@RequiresPermissions(value={"casecategory:caseCategory:add","casecategory:caseCategory:edit"},logical=Logical.OR)
+	@RequestMapping(value = "save")
+	public String save(CaseCategory caseCategory, Model model, RedirectAttributes redirectAttributes) throws Exception{
+		if (!beanValidator(model, caseCategory)){
+			return form(caseCategory, model);
+		}
+		if(!caseCategory.getIsNewRecord()){//编辑表单保存
+			CaseCategory t = caseCategoryService.get(caseCategory.getId());//从数据库取出记录的值
+			MyBeanUtils.copyBeanNotNull2Bean(caseCategory, t);//将编辑表单中的非NULL值覆盖数据库记录中的值
+			caseCategoryService.save(t);//保存
+		}else{//新增表单保存
+			caseCategoryService.save(caseCategory);//保存
+		}
+		addMessage(redirectAttributes, "保存案例分类成功");
+		return "redirect:"+Global.getAdminPath()+"/casecategory/caseCategory/?repage";
+	}
+	@RequiresPermissions("user")
+	@ResponseBody
+	@RequestMapping(value = "treeData")
+	public List<Map<String, Object>> treeData(@RequestParam(required=false) String extId, HttpServletResponse response) {
+		List<Map<String, Object>> mapList = Lists.newArrayList();
+		List<CaseCategory> list = caseCategoryService.findList(new CaseCategory());
+		for (int i=0; i<list.size(); i++){
+			CaseCategory e = list.get(i);
+			if (StringUtils.isBlank(extId) || (extId!=null && !extId.equals(e.getId()) && e.getParentIds().indexOf(","+extId+",")==-1)){
+				Map<String, Object> map = Maps.newHashMap();
+				map.put("id", e.getId());
+				map.put("pId", e.getParentId());
+				map.put("name", e.getName());
+				mapList.add(map);
+			}
+		}
+		return mapList;
+	}
+	/**
+	 * 删除案例分类
+	 */
+	@RequiresPermissions("casecategory:caseCategory:del")
+	@RequestMapping(value = "delete")
+	public String delete(CaseCategory caseCategory, RedirectAttributes redirectAttributes) {
+		caseCategoryService.delete(caseCategory);
+		addMessage(redirectAttributes, "删除案例分类成功");
+		return "redirect:"+Global.getAdminPath()+"/casecategory/caseCategory/?repage";
+	}
+	
+	/**
+	 * 批量删除案例分类
+	 */
+	@RequiresPermissions("casecategory:caseCategory:del")
+	@RequestMapping(value = "deleteAll")
+	public String deleteAll(String ids, RedirectAttributes redirectAttributes) {
+		String idArray[] =ids.split(",");
+		for(String id : idArray){
+			caseCategoryService.delete(caseCategoryService.get(id));
+		}
+		addMessage(redirectAttributes, "删除案例分类成功");
+		return "redirect:"+Global.getAdminPath()+"/casecategory/caseCategory/?repage";
+	}
+	
+	/**
+	 * 导出excel文件
+	 */
+	@RequiresPermissions("casecategory:caseCategory:export")
+    @RequestMapping(value = "export", method=RequestMethod.POST)
+    public String exportFile(CaseCategory caseCategory, HttpServletRequest request, HttpServletResponse response, RedirectAttributes redirectAttributes) {
+		try {
+            String fileName = "案例分类"+DateUtils.getDate("yyyyMMddHHmmss")+".xlsx";
+            Page<CaseCategory> page = caseCategoryService.findPage(new Page<CaseCategory>(request, response, -1), caseCategory);
+    		new ExportExcel("案例分类", CaseCategory.class).setDataList(page.getList()).write(response, fileName).dispose();
+    		return null;
+		} catch (Exception e) {
+			addMessage(redirectAttributes, "导出案例分类记录失败!失败信息:"+e.getMessage());
+		}
+		return "redirect:"+Global.getAdminPath()+"/casecategory/caseCategory/?repage";
+    }
+
+	/**
+	 * 导入Excel数据
+
+	 */
+	@RequiresPermissions("casecategory:caseCategory:import")
+    @RequestMapping(value = "import", method=RequestMethod.POST)
+    public String importFile(MultipartFile file, RedirectAttributes redirectAttributes) {
+		try {
+			int successNum = 0;
+			int failureNum = 0;
+			StringBuilder failureMsg = new StringBuilder();
+			ImportExcel ei = new ImportExcel(file, 1, 0);
+			List<CaseCategory> list = ei.getDataList(CaseCategory.class);
+			for (CaseCategory caseCategory : list){
+				try{
+					caseCategoryService.save(caseCategory);
+					successNum++;
+				}catch(ConstraintViolationException ex){
+					failureNum++;
+				}catch (Exception ex) {
+					failureNum++;
+				}
+			}
+			if (failureNum>0){
+				failureMsg.insert(0, ",失败 "+failureNum+" 条案例分类记录。");
+			}
+			addMessage(redirectAttributes, "已成功导入 "+successNum+" 条案例分类记录"+failureMsg);
+		} catch (Exception e) {
+			addMessage(redirectAttributes, "导入案例分类失败!失败信息:"+e.getMessage());
+		}
+		return "redirect:"+Global.getAdminPath()+"/casecategory/caseCategory/?repage";
+    }
+	
+	/**
+	 * 下载导入案例分类数据模板
+	 */
+	@RequiresPermissions("casecategory:caseCategory:import")
+    @RequestMapping(value = "import/template")
+    public String importFileTemplate(HttpServletResponse response, RedirectAttributes redirectAttributes) {
+		try {
+            String fileName = "案例分类数据导入模板.xlsx";
+    		List<CaseCategory> list = Lists.newArrayList(); 
+    		new ExportExcel("案例分类数据", CaseCategory.class, 1).setDataList(list).write(response, fileName).dispose();
+    		return null;
+		} catch (Exception e) {
+			addMessage(redirectAttributes, "导入模板下载失败!失败信息:"+e.getMessage());
+		}
+		return "redirect:"+Global.getAdminPath()+"/casecategory/caseCategory/?repage";
+    }
+
+
+
+	
+	
+
+}

+ 19 - 0
src/main/java/com/jeeplus/modules/casedesigninfo/dao/CaseDesignInfoDao.java

@@ -0,0 +1,19 @@
+/**
+ * Copyright &copy; 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.modules.casedesigninfo.dao;
+
+import com.jeeplus.common.persistence.CrudDao;
+import com.jeeplus.common.persistence.annotation.MyBatisDao;
+import com.jeeplus.modules.casedesigninfo.entity.CaseDesignInfo;
+
+/**
+ * 案例-设计单位DAO接口
+ * @author fgy
+ * @version 2018-01-24
+ */
+@MyBatisDao
+public interface CaseDesignInfoDao extends CrudDao<CaseDesignInfo> {
+
+	
+}

+ 79 - 0
src/main/java/com/jeeplus/modules/casedesigninfo/entity/CaseDesignInfo.java

@@ -0,0 +1,79 @@
+/**
+ * Copyright &copy; 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.modules.casedesigninfo.entity;
+
+import org.hibernate.validator.constraints.Email;
+
+import com.jeeplus.common.persistence.DataEntity;
+import com.jeeplus.common.utils.excel.annotation.ExcelField;
+
+/**
+ * 案例-设计单位Entity
+ * @author fgy
+ * @version 2018-01-24
+ */
+public class CaseDesignInfo extends DataEntity<CaseDesignInfo> {
+	
+	private static final long serialVersionUID = 1L;
+	private String name;		// 名称
+	private String linkedman;		// 联系人
+	private String mobile;		// 联系方式
+	private String email;		// 邮箱
+	private String caseId;		// 案例表id
+	
+	public CaseDesignInfo() {
+		super();
+	}
+
+	public CaseDesignInfo(String id){
+		super(id);
+	}
+
+	@ExcelField(title="名称", align=2, sort=7)
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+	
+	@ExcelField(title="联系人", align=2, sort=8)
+	public String getLinkedman() {
+		return linkedman;
+	}
+
+	public void setLinkedman(String linkedman) {
+		this.linkedman = linkedman;
+	}
+	
+	@ExcelField(title="联系方式", align=2, sort=9)
+	public String getMobile() {
+		return mobile;
+	}
+
+	public void setMobile(String mobile) {
+		this.mobile = mobile;
+	}
+	
+	@Email(message="邮箱必须为合法邮箱")
+	@ExcelField(title="邮箱", align=2, sort=10)
+	public String getEmail() {
+		return email;
+	}
+
+	public void setEmail(String email) {
+		this.email = email;
+	}
+	
+	@ExcelField(title="案例表id", align=2, sort=11)
+	public String getCaseId() {
+		return caseId;
+	}
+
+	public void setCaseId(String caseId) {
+		this.caseId = caseId;
+	}
+	
+}

+ 50 - 0
src/main/java/com/jeeplus/modules/casedesigninfo/service/CaseDesignInfoService.java

@@ -0,0 +1,50 @@
+/**
+ * Copyright &copy; 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.modules.casedesigninfo.service;
+
+import java.util.List;
+
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import com.jeeplus.common.persistence.Page;
+import com.jeeplus.common.service.CrudService;
+import com.jeeplus.modules.casedesigninfo.entity.CaseDesignInfo;
+import com.jeeplus.modules.casedesigninfo.dao.CaseDesignInfoDao;
+
+/**
+ * 案例-设计单位Service
+ * @author fgy
+ * @version 2018-01-24
+ */
+@Service
+@Transactional(readOnly = true)
+public class CaseDesignInfoService extends CrudService<CaseDesignInfoDao, CaseDesignInfo> {
+
+	public CaseDesignInfo get(String id) {
+		return super.get(id);
+	}
+	
+	public List<CaseDesignInfo> findList(CaseDesignInfo caseDesignInfo) {
+		return super.findList(caseDesignInfo);
+	}
+	
+	public Page<CaseDesignInfo> findPage(Page<CaseDesignInfo> page, CaseDesignInfo caseDesignInfo) {
+		return super.findPage(page, caseDesignInfo);
+	}
+	
+	@Transactional(readOnly = false)
+	public void save(CaseDesignInfo caseDesignInfo) {
+		super.save(caseDesignInfo);
+	}
+	
+	@Transactional(readOnly = false)
+	public void delete(CaseDesignInfo caseDesignInfo) {
+		super.delete(caseDesignInfo);
+	}
+	
+	
+	
+	
+}

+ 196 - 0
src/main/java/com/jeeplus/modules/casedesigninfo/web/CaseDesignInfoController.java

@@ -0,0 +1,196 @@
+/**
+ * Copyright &copy; 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.modules.casedesigninfo.web;
+
+import java.util.List;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.ConstraintViolationException;
+
+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.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.servlet.mvc.support.RedirectAttributes;
+
+import com.google.common.collect.Lists;
+import com.jeeplus.common.utils.DateUtils;
+import com.jeeplus.common.utils.MyBeanUtils;
+import com.jeeplus.common.config.Global;
+import com.jeeplus.common.persistence.Page;
+import com.jeeplus.common.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.casedesigninfo.entity.CaseDesignInfo;
+import com.jeeplus.modules.casedesigninfo.service.CaseDesignInfoService;
+
+/**
+ * 案例-设计单位Controller
+ * @author fgy
+ * @version 2018-01-24
+ */
+@Controller
+@RequestMapping(value = "${adminPath}/casedesigninfo/caseDesignInfo")
+public class CaseDesignInfoController extends BaseController {
+
+	@Autowired
+	private CaseDesignInfoService caseDesignInfoService;
+	
+	@ModelAttribute
+	public CaseDesignInfo get(@RequestParam(required=false) String id) {
+		CaseDesignInfo entity = null;
+		if (StringUtils.isNotBlank(id)){
+			entity = caseDesignInfoService.get(id);
+		}
+		if (entity == null){
+			entity = new CaseDesignInfo();
+		}
+		return entity;
+	}
+	
+	/**
+	 * 案例-设计单位列表页面
+	 */
+	@RequiresPermissions("casedesigninfo:caseDesignInfo:list")
+	@RequestMapping(value = {"list", ""})
+	public String list(CaseDesignInfo caseDesignInfo, HttpServletRequest request, HttpServletResponse response, Model model) {
+		Page<CaseDesignInfo> page = caseDesignInfoService.findPage(new Page<CaseDesignInfo>(request, response), caseDesignInfo); 
+		model.addAttribute("page", page);
+		return "modules/casedesigninfo/caseDesignInfoList";
+	}
+
+	/**
+	 * 查看,增加,编辑案例-设计单位表单页面
+	 */
+	@RequiresPermissions(value={"casedesigninfo:caseDesignInfo:view","casedesigninfo:caseDesignInfo:add","casedesigninfo:caseDesignInfo:edit"},logical=Logical.OR)
+	@RequestMapping(value = "form")
+	public String form(CaseDesignInfo caseDesignInfo, Model model) {
+		model.addAttribute("caseDesignInfo", caseDesignInfo);
+		return "modules/casedesigninfo/caseDesignInfoForm";
+	}
+
+	/**
+	 * 保存案例-设计单位
+	 */
+	@RequiresPermissions(value={"casedesigninfo:caseDesignInfo:add","casedesigninfo:caseDesignInfo:edit"},logical=Logical.OR)
+	@RequestMapping(value = "save")
+	public String save(CaseDesignInfo caseDesignInfo, Model model, RedirectAttributes redirectAttributes) throws Exception{
+		if (!beanValidator(model, caseDesignInfo)){
+			return form(caseDesignInfo, model);
+		}
+		if(!caseDesignInfo.getIsNewRecord()){//编辑表单保存
+			CaseDesignInfo t = caseDesignInfoService.get(caseDesignInfo.getId());//从数据库取出记录的值
+			MyBeanUtils.copyBeanNotNull2Bean(caseDesignInfo, t);//将编辑表单中的非NULL值覆盖数据库记录中的值
+			caseDesignInfoService.save(t);//保存
+		}else{//新增表单保存
+			caseDesignInfoService.save(caseDesignInfo);//保存
+		}
+		addMessage(redirectAttributes, "保存案例-设计单位成功");
+		return "redirect:"+Global.getAdminPath()+"/casedesigninfo/caseDesignInfo/?repage";
+	}
+	
+	/**
+	 * 删除案例-设计单位
+	 */
+	@RequiresPermissions("casedesigninfo:caseDesignInfo:del")
+	@RequestMapping(value = "delete")
+	public String delete(CaseDesignInfo caseDesignInfo, RedirectAttributes redirectAttributes) {
+		caseDesignInfoService.delete(caseDesignInfo);
+		addMessage(redirectAttributes, "删除案例-设计单位成功");
+		return "redirect:"+Global.getAdminPath()+"/casedesigninfo/caseDesignInfo/?repage";
+	}
+	
+	/**
+	 * 批量删除案例-设计单位
+	 */
+	@RequiresPermissions("casedesigninfo:caseDesignInfo:del")
+	@RequestMapping(value = "deleteAll")
+	public String deleteAll(String ids, RedirectAttributes redirectAttributes) {
+		String idArray[] =ids.split(",");
+		for(String id : idArray){
+			caseDesignInfoService.delete(caseDesignInfoService.get(id));
+		}
+		addMessage(redirectAttributes, "删除案例-设计单位成功");
+		return "redirect:"+Global.getAdminPath()+"/casedesigninfo/caseDesignInfo/?repage";
+	}
+	
+	/**
+	 * 导出excel文件
+	 */
+	@RequiresPermissions("casedesigninfo:caseDesignInfo:export")
+    @RequestMapping(value = "export", method=RequestMethod.POST)
+    public String exportFile(CaseDesignInfo caseDesignInfo, HttpServletRequest request, HttpServletResponse response, RedirectAttributes redirectAttributes) {
+		try {
+            String fileName = "案例-设计单位"+DateUtils.getDate("yyyyMMddHHmmss")+".xlsx";
+            Page<CaseDesignInfo> page = caseDesignInfoService.findPage(new Page<CaseDesignInfo>(request, response, -1), caseDesignInfo);
+    		new ExportExcel("案例-设计单位", CaseDesignInfo.class).setDataList(page.getList()).write(response, fileName).dispose();
+    		return null;
+		} catch (Exception e) {
+			addMessage(redirectAttributes, "导出案例-设计单位记录失败!失败信息:"+e.getMessage());
+		}
+		return "redirect:"+Global.getAdminPath()+"/casedesigninfo/caseDesignInfo/?repage";
+    }
+
+	/**
+	 * 导入Excel数据
+
+	 */
+	@RequiresPermissions("casedesigninfo:caseDesignInfo:import")
+    @RequestMapping(value = "import", method=RequestMethod.POST)
+    public String importFile(MultipartFile file, RedirectAttributes redirectAttributes) {
+		try {
+			int successNum = 0;
+			int failureNum = 0;
+			StringBuilder failureMsg = new StringBuilder();
+			ImportExcel ei = new ImportExcel(file, 1, 0);
+			List<CaseDesignInfo> list = ei.getDataList(CaseDesignInfo.class);
+			for (CaseDesignInfo caseDesignInfo : list){
+				try{
+					caseDesignInfoService.save(caseDesignInfo);
+					successNum++;
+				}catch(ConstraintViolationException ex){
+					failureNum++;
+				}catch (Exception ex) {
+					failureNum++;
+				}
+			}
+			if (failureNum>0){
+				failureMsg.insert(0, ",失败 "+failureNum+" 条案例-设计单位记录。");
+			}
+			addMessage(redirectAttributes, "已成功导入 "+successNum+" 条案例-设计单位记录"+failureMsg);
+		} catch (Exception e) {
+			addMessage(redirectAttributes, "导入案例-设计单位失败!失败信息:"+e.getMessage());
+		}
+		return "redirect:"+Global.getAdminPath()+"/casedesigninfo/caseDesignInfo/?repage";
+    }
+	
+	/**
+	 * 下载导入案例-设计单位数据模板
+	 */
+	@RequiresPermissions("casedesigninfo:caseDesignInfo:import")
+    @RequestMapping(value = "import/template")
+    public String importFileTemplate(HttpServletResponse response, RedirectAttributes redirectAttributes) {
+		try {
+            String fileName = "案例-设计单位数据导入模板.xlsx";
+    		List<CaseDesignInfo> list = Lists.newArrayList(); 
+    		new ExportExcel("案例-设计单位数据", CaseDesignInfo.class, 1).setDataList(list).write(response, fileName).dispose();
+    		return null;
+		} catch (Exception e) {
+			addMessage(redirectAttributes, "导入模板下载失败!失败信息:"+e.getMessage());
+		}
+		return "redirect:"+Global.getAdminPath()+"/casedesigninfo/caseDesignInfo/?repage";
+    }
+	
+	
+	
+
+}

+ 19 - 0
src/main/java/com/jeeplus/modules/caseexecuteinfo/dao/CaseExecuteInfoDao.java

@@ -0,0 +1,19 @@
+/**
+ * Copyright &copy; 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.modules.caseexecuteinfo.dao;
+
+import com.jeeplus.common.persistence.CrudDao;
+import com.jeeplus.common.persistence.annotation.MyBatisDao;
+import com.jeeplus.modules.caseexecuteinfo.entity.CaseExecuteInfo;
+
+/**
+ * 案例-施工单位DAO接口
+ * @author fgy
+ * @version 2018-01-24
+ */
+@MyBatisDao
+public interface CaseExecuteInfoDao extends CrudDao<CaseExecuteInfo> {
+
+	
+}

+ 79 - 0
src/main/java/com/jeeplus/modules/caseexecuteinfo/entity/CaseExecuteInfo.java

@@ -0,0 +1,79 @@
+/**
+ * Copyright &copy; 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.modules.caseexecuteinfo.entity;
+
+import org.hibernate.validator.constraints.Email;
+
+import com.jeeplus.common.persistence.DataEntity;
+import com.jeeplus.common.utils.excel.annotation.ExcelField;
+
+/**
+ * 案例-施工单位Entity
+ * @author fgy
+ * @version 2018-01-24
+ */
+public class CaseExecuteInfo extends DataEntity<CaseExecuteInfo> {
+	
+	private static final long serialVersionUID = 1L;
+	private String name;		// 单位名称
+	private String linkedman;		// 联系人姓名
+	private String mobile;		// 联系方式
+	private String email;		// 邮箱
+	private String caseId;		// 案例id
+	
+	public CaseExecuteInfo() {
+		super();
+	}
+
+	public CaseExecuteInfo(String id){
+		super(id);
+	}
+
+	@ExcelField(title="单位名称", align=2, sort=7)
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+	
+	@ExcelField(title="联系人姓名", align=2, sort=8)
+	public String getLinkedman() {
+		return linkedman;
+	}
+
+	public void setLinkedman(String linkedman) {
+		this.linkedman = linkedman;
+	}
+	
+	@ExcelField(title="联系方式", align=2, sort=9)
+	public String getMobile() {
+		return mobile;
+	}
+
+	public void setMobile(String mobile) {
+		this.mobile = mobile;
+	}
+	
+	@Email(message="邮箱必须为合法邮箱")
+	@ExcelField(title="邮箱", align=2, sort=10)
+	public String getEmail() {
+		return email;
+	}
+
+	public void setEmail(String email) {
+		this.email = email;
+	}
+	
+	@ExcelField(title="案例id", align=2, sort=11)
+	public String getCaseId() {
+		return caseId;
+	}
+
+	public void setCaseId(String caseId) {
+		this.caseId = caseId;
+	}
+	
+}

+ 50 - 0
src/main/java/com/jeeplus/modules/caseexecuteinfo/service/CaseExecuteInfoService.java

@@ -0,0 +1,50 @@
+/**
+ * Copyright &copy; 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.modules.caseexecuteinfo.service;
+
+import java.util.List;
+
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import com.jeeplus.common.persistence.Page;
+import com.jeeplus.common.service.CrudService;
+import com.jeeplus.modules.caseexecuteinfo.entity.CaseExecuteInfo;
+import com.jeeplus.modules.caseexecuteinfo.dao.CaseExecuteInfoDao;
+
+/**
+ * 案例-施工单位Service
+ * @author fgy
+ * @version 2018-01-24
+ */
+@Service
+@Transactional(readOnly = true)
+public class CaseExecuteInfoService extends CrudService<CaseExecuteInfoDao, CaseExecuteInfo> {
+
+	public CaseExecuteInfo get(String id) {
+		return super.get(id);
+	}
+	
+	public List<CaseExecuteInfo> findList(CaseExecuteInfo caseExecuteInfo) {
+		return super.findList(caseExecuteInfo);
+	}
+	
+	public Page<CaseExecuteInfo> findPage(Page<CaseExecuteInfo> page, CaseExecuteInfo caseExecuteInfo) {
+		return super.findPage(page, caseExecuteInfo);
+	}
+	
+	@Transactional(readOnly = false)
+	public void save(CaseExecuteInfo caseExecuteInfo) {
+		super.save(caseExecuteInfo);
+	}
+	
+	@Transactional(readOnly = false)
+	public void delete(CaseExecuteInfo caseExecuteInfo) {
+		super.delete(caseExecuteInfo);
+	}
+	
+	
+	
+	
+}

+ 196 - 0
src/main/java/com/jeeplus/modules/caseexecuteinfo/web/CaseExecuteInfoController.java

@@ -0,0 +1,196 @@
+/**
+ * Copyright &copy; 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.modules.caseexecuteinfo.web;
+
+import java.util.List;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.ConstraintViolationException;
+
+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.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.servlet.mvc.support.RedirectAttributes;
+
+import com.google.common.collect.Lists;
+import com.jeeplus.common.utils.DateUtils;
+import com.jeeplus.common.utils.MyBeanUtils;
+import com.jeeplus.common.config.Global;
+import com.jeeplus.common.persistence.Page;
+import com.jeeplus.common.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.caseexecuteinfo.entity.CaseExecuteInfo;
+import com.jeeplus.modules.caseexecuteinfo.service.CaseExecuteInfoService;
+
+/**
+ * 案例-施工单位Controller
+ * @author fgy
+ * @version 2018-01-24
+ */
+@Controller
+@RequestMapping(value = "${adminPath}/caseexecuteinfo/caseExecuteInfo")
+public class CaseExecuteInfoController extends BaseController {
+
+	@Autowired
+	private CaseExecuteInfoService caseExecuteInfoService;
+	
+	@ModelAttribute
+	public CaseExecuteInfo get(@RequestParam(required=false) String id) {
+		CaseExecuteInfo entity = null;
+		if (StringUtils.isNotBlank(id)){
+			entity = caseExecuteInfoService.get(id);
+		}
+		if (entity == null){
+			entity = new CaseExecuteInfo();
+		}
+		return entity;
+	}
+	
+	/**
+	 * 案例-施工单位列表页面
+	 */
+	@RequiresPermissions("caseexecuteinfo:caseExecuteInfo:list")
+	@RequestMapping(value = {"list", ""})
+	public String list(CaseExecuteInfo caseExecuteInfo, HttpServletRequest request, HttpServletResponse response, Model model) {
+		Page<CaseExecuteInfo> page = caseExecuteInfoService.findPage(new Page<CaseExecuteInfo>(request, response), caseExecuteInfo); 
+		model.addAttribute("page", page);
+		return "modules/caseexecuteinfo/caseExecuteInfoList";
+	}
+
+	/**
+	 * 查看,增加,编辑案例-施工单位表单页面
+	 */
+	@RequiresPermissions(value={"caseexecuteinfo:caseExecuteInfo:view","caseexecuteinfo:caseExecuteInfo:add","caseexecuteinfo:caseExecuteInfo:edit"},logical=Logical.OR)
+	@RequestMapping(value = "form")
+	public String form(CaseExecuteInfo caseExecuteInfo, Model model) {
+		model.addAttribute("caseExecuteInfo", caseExecuteInfo);
+		return "modules/caseexecuteinfo/caseExecuteInfoForm";
+	}
+
+	/**
+	 * 保存案例-施工单位
+	 */
+	@RequiresPermissions(value={"caseexecuteinfo:caseExecuteInfo:add","caseexecuteinfo:caseExecuteInfo:edit"},logical=Logical.OR)
+	@RequestMapping(value = "save")
+	public String save(CaseExecuteInfo caseExecuteInfo, Model model, RedirectAttributes redirectAttributes) throws Exception{
+		if (!beanValidator(model, caseExecuteInfo)){
+			return form(caseExecuteInfo, model);
+		}
+		if(!caseExecuteInfo.getIsNewRecord()){//编辑表单保存
+			CaseExecuteInfo t = caseExecuteInfoService.get(caseExecuteInfo.getId());//从数据库取出记录的值
+			MyBeanUtils.copyBeanNotNull2Bean(caseExecuteInfo, t);//将编辑表单中的非NULL值覆盖数据库记录中的值
+			caseExecuteInfoService.save(t);//保存
+		}else{//新增表单保存
+			caseExecuteInfoService.save(caseExecuteInfo);//保存
+		}
+		addMessage(redirectAttributes, "保存案例-施工单位成功");
+		return "redirect:"+Global.getAdminPath()+"/caseexecuteinfo/caseExecuteInfo/?repage";
+	}
+	
+	/**
+	 * 删除案例-施工单位
+	 */
+	@RequiresPermissions("caseexecuteinfo:caseExecuteInfo:del")
+	@RequestMapping(value = "delete")
+	public String delete(CaseExecuteInfo caseExecuteInfo, RedirectAttributes redirectAttributes) {
+		caseExecuteInfoService.delete(caseExecuteInfo);
+		addMessage(redirectAttributes, "删除案例-施工单位成功");
+		return "redirect:"+Global.getAdminPath()+"/caseexecuteinfo/caseExecuteInfo/?repage";
+	}
+	
+	/**
+	 * 批量删除案例-施工单位
+	 */
+	@RequiresPermissions("caseexecuteinfo:caseExecuteInfo:del")
+	@RequestMapping(value = "deleteAll")
+	public String deleteAll(String ids, RedirectAttributes redirectAttributes) {
+		String idArray[] =ids.split(",");
+		for(String id : idArray){
+			caseExecuteInfoService.delete(caseExecuteInfoService.get(id));
+		}
+		addMessage(redirectAttributes, "删除案例-施工单位成功");
+		return "redirect:"+Global.getAdminPath()+"/caseexecuteinfo/caseExecuteInfo/?repage";
+	}
+	
+	/**
+	 * 导出excel文件
+	 */
+	@RequiresPermissions("caseexecuteinfo:caseExecuteInfo:export")
+    @RequestMapping(value = "export", method=RequestMethod.POST)
+    public String exportFile(CaseExecuteInfo caseExecuteInfo, HttpServletRequest request, HttpServletResponse response, RedirectAttributes redirectAttributes) {
+		try {
+            String fileName = "案例-施工单位"+DateUtils.getDate("yyyyMMddHHmmss")+".xlsx";
+            Page<CaseExecuteInfo> page = caseExecuteInfoService.findPage(new Page<CaseExecuteInfo>(request, response, -1), caseExecuteInfo);
+    		new ExportExcel("案例-施工单位", CaseExecuteInfo.class).setDataList(page.getList()).write(response, fileName).dispose();
+    		return null;
+		} catch (Exception e) {
+			addMessage(redirectAttributes, "导出案例-施工单位记录失败!失败信息:"+e.getMessage());
+		}
+		return "redirect:"+Global.getAdminPath()+"/caseexecuteinfo/caseExecuteInfo/?repage";
+    }
+
+	/**
+	 * 导入Excel数据
+
+	 */
+	@RequiresPermissions("caseexecuteinfo:caseExecuteInfo:import")
+    @RequestMapping(value = "import", method=RequestMethod.POST)
+    public String importFile(MultipartFile file, RedirectAttributes redirectAttributes) {
+		try {
+			int successNum = 0;
+			int failureNum = 0;
+			StringBuilder failureMsg = new StringBuilder();
+			ImportExcel ei = new ImportExcel(file, 1, 0);
+			List<CaseExecuteInfo> list = ei.getDataList(CaseExecuteInfo.class);
+			for (CaseExecuteInfo caseExecuteInfo : list){
+				try{
+					caseExecuteInfoService.save(caseExecuteInfo);
+					successNum++;
+				}catch(ConstraintViolationException ex){
+					failureNum++;
+				}catch (Exception ex) {
+					failureNum++;
+				}
+			}
+			if (failureNum>0){
+				failureMsg.insert(0, ",失败 "+failureNum+" 条案例-施工单位记录。");
+			}
+			addMessage(redirectAttributes, "已成功导入 "+successNum+" 条案例-施工单位记录"+failureMsg);
+		} catch (Exception e) {
+			addMessage(redirectAttributes, "导入案例-施工单位失败!失败信息:"+e.getMessage());
+		}
+		return "redirect:"+Global.getAdminPath()+"/caseexecuteinfo/caseExecuteInfo/?repage";
+    }
+	
+	/**
+	 * 下载导入案例-施工单位数据模板
+	 */
+	@RequiresPermissions("caseexecuteinfo:caseExecuteInfo:import")
+    @RequestMapping(value = "import/template")
+    public String importFileTemplate(HttpServletResponse response, RedirectAttributes redirectAttributes) {
+		try {
+            String fileName = "案例-施工单位数据导入模板.xlsx";
+    		List<CaseExecuteInfo> list = Lists.newArrayList(); 
+    		new ExportExcel("案例-施工单位数据", CaseExecuteInfo.class, 1).setDataList(list).write(response, fileName).dispose();
+    		return null;
+		} catch (Exception e) {
+			addMessage(redirectAttributes, "导入模板下载失败!失败信息:"+e.getMessage());
+		}
+		return "redirect:"+Global.getAdminPath()+"/caseexecuteinfo/caseExecuteInfo/?repage";
+    }
+	
+	
+	
+
+}

+ 41 - 0
src/main/java/com/jeeplus/modules/caseinfo/dao/CaseInfoDao.java

@@ -0,0 +1,41 @@
+/**
+ * Copyright &copy; 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.modules.caseinfo.dao;
+
+import com.jeeplus.modules.workproject.entity.WorkProject;
+import java.util.List;
+import com.jeeplus.common.persistence.CrudDao;
+import com.jeeplus.common.persistence.annotation.MyBatisDao;
+import com.jeeplus.modules.caseinfo.entity.CaseInfo;
+
+/**
+ * 案例详情DAO接口
+ * @author liuw
+ * @version 2018-01-24
+ */
+@MyBatisDao
+public interface CaseInfoDao extends CrudDao<CaseInfo> {
+
+	public List<WorkProject> findListByproject(WorkProject project);
+	public List<CaseInfo> findByAllList(CaseInfo caseInfo);
+	public List<CaseInfo> findByAllLists(CaseInfo caseInfo);
+	public List<CaseInfo> findCompanyList(CaseInfo caseInfo);
+	public List<CaseInfo> findListme(CaseInfo caseInfo);
+	public List<CaseInfo> findListoffice(CaseInfo caseInfo);
+	public List<CaseInfo> findListoffice2(CaseInfo caseInfo);
+	//获取自己购买的案例
+	public List<CaseInfo> findBuyCase(CaseInfo caseInfo);
+	/**
+	 * 更新流程实例ID
+	 * @param
+	 * @return
+	 */
+	public int updateProcessInstanceId(CaseInfo caseInfo);
+	/**
+	 * 根据流程实例ID获取Leave
+	 * @param processInstanceId
+	 * @return
+	 */
+	public CaseInfo getByProcessInstanceId(String processInstanceId);
+}

+ 457 - 0
src/main/java/com/jeeplus/modules/caseinfo/entity/CaseInfo.java

@@ -0,0 +1,457 @@
+/**
+ * Copyright &copy; 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.modules.caseinfo.entity;
+
+import com.google.common.collect.Lists;
+import com.jeeplus.common.persistence.ActEntity;
+import com.jeeplus.modules.casebuildinfo.entity.CaseBuildInfo;
+import com.jeeplus.modules.casecategory.entity.CaseCategory;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.jeeplus.modules.casedesigninfo.entity.CaseDesignInfo;
+import com.jeeplus.modules.caseexecuteinfo.entity.CaseExecuteInfo;
+import com.jeeplus.modules.casematerials.entity.CaseMaterials;
+import com.jeeplus.modules.casematerialsnorm.entity.CaseMaterialsNorm;
+import com.jeeplus.modules.casemechanicalnorm.entity.CaseMechanicalNorm;
+import com.jeeplus.modules.casenorm.entity.CaseNorm;
+import com.jeeplus.modules.casepeoplenorm.entity.CasePeopleNorm;
+import com.jeeplus.modules.caseprojectfeature.entity.CaseProjectFeature;
+import com.jeeplus.modules.projectrecord.entity.ProjectRecords;
+import com.jeeplus.modules.sys.entity.Area;
+import com.jeeplus.modules.sys.entity.Office;
+import com.jeeplus.modules.workclientinfo.entity.WorkClientAttachment;
+import com.jeeplus.modules.workproject.entity.WorkProject;
+
+import com.jeeplus.common.persistence.DataEntity;
+import com.jeeplus.common.utils.excel.annotation.ExcelField;
+import org.activiti.engine.history.HistoricProcessInstance;
+import org.activiti.engine.repository.ProcessDefinition;
+import org.activiti.engine.runtime.ProcessInstance;
+import org.activiti.engine.task.Task;
+
+/**
+ * 案例详情Entity
+ * @author liuw
+ * @version 2018-01-24
+ */
+public class CaseInfo extends ActEntity<CaseInfo> {
+	
+	private static final long serialVersionUID = 1L;
+	private CaseCategory caseCategory;		// 分类id
+	private Boolean processEnded;            //流程是否走到了结束状态(结束:false,未结束:true)
+	private String name;		// 案例名称
+	private Date startDate;		// 开工日期
+	private Date endDate;		// 竣工日期
+	private Area area;		// 工程所在地
+	private String price;		// 单位造价
+	private ProjectRecords project;		// 所属项目
+	private String feature;		// 案例特性
+	private String record;        //偏差分析/记录
+	private String source;        //案例来源
+	private String companyName;   //公司名称
+	private String officeName;   //部门名称
+	private String contractName;    //项目名称
+	private String ext;             //项目内外标识
+	private String peculiarity;    //项目特征
+	private String unit;       //造价指标单位
+	private List<CaseBuildInfo> caseBuildInfoList = Lists.newArrayList();		// 建设单位子表列表
+	private List<CaseDesignInfo> caseDesignInfoList = Lists.newArrayList();		// 设计单位子表列表
+	private List<CaseExecuteInfo> caseExecuteInfoList = Lists.newArrayList();		// 施工单位子表列表
+	private List<CaseProjectFeature> caseProjectFeatureList = Lists.newArrayList();		// 特征子表列表(弃用)
+	private List<CaseMaterials> caseMaterialsList = Lists.newArrayList();		// 材料子表列表
+	private List<CaseMaterialsNorm> caseMaterialsNormList = Lists.newArrayList();		// 材料消耗量指标列表
+	private List<CaseMechanicalNorm> caseMechanicalNormList = Lists.newArrayList();		// 	机械消耗量指标列表
+	private List<CasePeopleNorm> casePeopleNormList = Lists.newArrayList();		// 人工消耗量指标列表
+
+	private List<WorkClientAttachment> workAttachments = Lists.newArrayList();//附件表
+	/*暂时弃用*/
+	private List<CaseNorm> caseNormList = Lists.newArrayList();		// 指标子表列表
+
+	private String status;      //审核状态(1暂存2审核中3未通过4已通过5已撤销)
+	private String userids;      //本人及当前部门负责人
+	private String shareStatus;   //共享状态(1一般案例:全平台 2典型案例:全公司)
+	private String companyId;		// 公司id
+	private String officeId;
+	private Office office;         //部门
+	private String processInstanceId; // 流程实例编号
+	private String namee;			//查看修改标识
+	private String dateOrder;      //时间排序
+	private String home;
+	private String memberId;      //会员id
+	// -- 临时属性 --//
+	// 流程任务
+	private Task task;
+	private Map<String, Object> variables;
+	// 运行中的流程实例
+	private ProcessInstance processInstance;
+	// 历史的流程实例
+	private HistoricProcessInstance historicProcessInstance;
+	// 流程定义
+	private ProcessDefinition processDefinition;
+
+	public String getCompanyId() {
+		return companyId;
+	}
+
+	public void setCompanyId(String companyId) {
+		this.companyId = companyId;
+	}
+
+	public String getOfficeName() {
+		return officeName;
+	}
+
+	public void setOfficeName(String officeName) {
+		this.officeName = officeName;
+	}
+
+	public String getOfficeId() {
+		return officeId;
+	}
+
+	public void setOfficeId(String officeId) {
+		this.officeId = officeId;
+	}
+
+	public String getProcessInstanceId() {
+		return processInstanceId;
+	}
+
+	public void setProcessInstanceId(String processInstanceId) {
+		this.processInstanceId = processInstanceId;
+	}
+
+	public Office getOffice() {
+		return office;
+	}
+
+	public void setOffice(Office office) {
+		this.office = office;
+	}
+
+	public String getNamee() {
+		return namee;
+	}
+
+	public void setNamee(String namee) {
+		this.namee = namee;
+	}
+
+	public String getDateOrder() {
+		return dateOrder;
+	}
+
+	public void setDateOrder(String dateOrder) {
+		this.dateOrder = dateOrder;
+	}
+
+	public Task getTask() {
+		return task;
+	}
+
+	public void setTask(Task task) {
+		this.task = task;
+	}
+
+	public Map<String, Object> getVariables() {
+		return variables;
+	}
+
+	public String getHome() {
+		return home;
+	}
+
+	public void setHome(String home) {
+		this.home = home;
+	}
+
+	public void setVariables(Map<String, Object> variables) {
+		this.variables = variables;
+	}
+
+	public ProcessInstance getProcessInstance() {
+		return processInstance;
+	}
+
+	public void setProcessInstance(ProcessInstance processInstance) {
+		this.processInstance = processInstance;
+	}
+
+	public Boolean getProcessEnded() {
+		return processEnded;
+	}
+
+	public void setProcessEnded(Boolean processEnded) {
+		this.processEnded = processEnded;
+	}
+
+	public HistoricProcessInstance getHistoricProcessInstance() {
+		return historicProcessInstance;
+	}
+
+	public void setHistoricProcessInstance(HistoricProcessInstance historicProcessInstance) {
+		this.historicProcessInstance = historicProcessInstance;
+	}
+
+	public ProcessDefinition getProcessDefinition() {
+		return processDefinition;
+	}
+
+	public void setProcessDefinition(ProcessDefinition processDefinition) {
+		this.processDefinition = processDefinition;
+	}
+
+	public List<WorkClientAttachment> getWorkAttachments() {
+		return workAttachments;
+	}
+
+	public void setWorkAttachments(List<WorkClientAttachment> workAttachments) {
+		this.workAttachments = workAttachments;
+	}
+
+	public List<CaseBuildInfo> getCaseBuildInfoList() {
+		return caseBuildInfoList;
+	}
+
+	public void setCaseBuildInfoList(List<CaseBuildInfo> caseBuildInfoList) {
+		this.caseBuildInfoList = caseBuildInfoList;
+	}
+
+	public List<CaseDesignInfo> getCaseDesignInfoList() {
+		return caseDesignInfoList;
+	}
+
+	public void setCaseDesignInfoList(List<CaseDesignInfo> caseDesignInfoList) {
+		this.caseDesignInfoList = caseDesignInfoList;
+	}
+
+	public String getStatus() {
+		return status;
+	}
+
+	public void setStatus(String status) {
+		this.status = status;
+	}
+
+	public String getSource() {
+		return source;
+	}
+
+	public String getContractName() {
+		return contractName;
+	}
+
+	public void setContractName(String contractName) {
+		this.contractName = contractName;
+	}
+
+	public String getExt() {
+		return ext;
+	}
+
+	public String getUserids() {
+		return userids;
+	}
+
+	public void setUserids(String userids) {
+		this.userids = userids;
+	}
+
+	public String getShareStatus() {
+		return shareStatus;
+	}
+
+	public void setShareStatus(String shareStatus) {
+		this.shareStatus = shareStatus;
+	}
+
+	public void setExt(String ext) {
+		this.ext = ext;
+	}
+
+	public void setSource(String source) {
+		this.source = source;
+	}
+
+	public String getPeculiarity() {
+		return peculiarity;
+	}
+
+	public void setPeculiarity(String peculiarity) {
+		this.peculiarity = peculiarity;
+	}
+
+	public List<CaseMaterialsNorm> getCaseMaterialsNormList() {
+		return caseMaterialsNormList;
+	}
+
+	public void setCaseMaterialsNormList(List<CaseMaterialsNorm> caseMaterialsNormList) {
+		this.caseMaterialsNormList = caseMaterialsNormList;
+	}
+
+	public List<CaseMechanicalNorm> getCaseMechanicalNormList() {
+		return caseMechanicalNormList;
+	}
+
+	public void setCaseMechanicalNormList(List<CaseMechanicalNorm> caseMechanicalNormList) {
+		this.caseMechanicalNormList = caseMechanicalNormList;
+	}
+
+	public List<CasePeopleNorm> getCasePeopleNormList() {
+		return casePeopleNormList;
+	}
+
+	public void setCasePeopleNormList(List<CasePeopleNorm> casePeopleNormList) {
+		this.casePeopleNormList = casePeopleNormList;
+	}
+
+	public String getCompanyName() {
+		return companyName;
+	}
+
+	public String getUnit() {
+		return unit;
+	}
+
+	public void setUnit(String unit) {
+		this.unit = unit;
+	}
+
+	public void setCompanyName(String companyName) {
+		this.companyName = companyName;
+	}
+
+	public String getRecord() {
+		return record;
+	}
+
+	public void setRecord(String record) {
+		this.record = record;
+	}
+
+	public List<CaseExecuteInfo> getCaseExecuteInfoList() {
+		return caseExecuteInfoList;
+	}
+
+	public void setCaseExecuteInfoList(List<CaseExecuteInfo> caseExecuteInfoList) {
+		this.caseExecuteInfoList = caseExecuteInfoList;
+	}
+
+	public List<CaseProjectFeature> getCaseProjectFeatureList() {
+		return caseProjectFeatureList;
+	}
+
+	public void setCaseProjectFeatureList(List<CaseProjectFeature> caseProjectFeatureList) {
+		this.caseProjectFeatureList = caseProjectFeatureList;
+	}
+
+	public List<CaseNorm> getCaseNormList() {
+		return caseNormList;
+	}
+
+	public void setCaseNormList(List<CaseNorm> caseNormList) {
+		this.caseNormList = caseNormList;
+	}
+
+	public List<CaseMaterials> getCaseMaterialsList() {
+		return caseMaterialsList;
+	}
+
+	public void setCaseMaterialsList(List<CaseMaterials> caseMaterialsList) {
+		this.caseMaterialsList = caseMaterialsList;
+	}
+
+	public CaseInfo() {
+		super();
+	}
+
+	public CaseInfo(String id){
+		super(id);
+	}
+
+	@ExcelField(title="分类id", align=2, sort=7)
+	public CaseCategory getCaseCategory() {
+		return caseCategory;
+	}
+
+	public void setCaseCategory(CaseCategory caseCategory) {
+		this.caseCategory = caseCategory;
+	}
+	
+	@ExcelField(title="案例名称", align=2, sort=8)
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+	
+	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@ExcelField(title="开工日期", align=2, sort=9)
+	public Date getStartDate() {
+		return startDate;
+	}
+
+	public void setStartDate(Date startDate) {
+		this.startDate = startDate;
+	}
+	
+	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@ExcelField(title="竣工日期", align=2, sort=10)
+	public Date getEndDate() {
+		return endDate;
+	}
+
+	public void setEndDate(Date endDate) {
+		this.endDate = endDate;
+	}
+	
+	@ExcelField(title="工程所在地", fieldType=Area.class, value="", align=2, sort=11)
+	public Area getArea() {
+		return area;
+	}
+
+	public void setArea(Area area) {
+		this.area = area;
+	}
+	
+	@ExcelField(title="单位造价", align=2, sort=12)
+	public String getPrice() {
+		return price;
+	}
+
+	public void setPrice(String price) {
+		this.price = price;
+	}
+	
+	@ExcelField(title="所属项目", align=2, sort=13)
+	public ProjectRecords getProject() {
+		return project;
+	}
+
+	public void setProject(ProjectRecords project) {
+		this.project = project;
+	}
+	
+	@ExcelField(title="案例特性", align=2, sort=14)
+	public String getFeature() {
+		return feature;
+	}
+
+	public void setFeature(String feature) {
+		this.feature = feature;
+	}
+
+	public String getMemberId() {
+		return memberId;
+	}
+
+	public void setMemberId(String memberId) {
+		this.memberId = memberId;
+	}
+}

文件差异内容过多而无法显示
+ 1213 - 0
src/main/java/com/jeeplus/modules/caseinfo/service/CaseInfoService.java


文件差异内容过多而无法显示
+ 1199 - 0
src/main/java/com/jeeplus/modules/caseinfo/web/CaseInfoController.java


+ 19 - 0
src/main/java/com/jeeplus/modules/casematerials/dao/CaseMaterialsDao.java

@@ -0,0 +1,19 @@
+/**
+ * Copyright &copy; 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.modules.casematerials.dao;
+
+import com.jeeplus.common.persistence.CrudDao;
+import com.jeeplus.common.persistence.annotation.MyBatisDao;
+import com.jeeplus.modules.casematerials.entity.CaseMaterials;
+
+/**
+ * 案例-材料DAO接口
+ * @author fgy
+ * @version 2018-01-24
+ */
+@MyBatisDao
+public interface CaseMaterialsDao extends CrudDao<CaseMaterials> {
+
+	int deleteCase(CaseMaterials c);
+}

+ 204 - 0
src/main/java/com/jeeplus/modules/casematerials/entity/CaseMaterials.java

@@ -0,0 +1,204 @@
+/**
+ * Copyright &copy; 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.modules.casematerials.entity;
+
+
+import com.jeeplus.common.persistence.DataEntity;
+import com.jeeplus.common.utils.excel.annotation.ExcelField;
+import com.jeeplus.modules.sys.entity.Area;
+
+import java.util.Date;
+
+/**
+ * 案例-材料Entity
+ * @author fgy
+ * @version 2018-01-24
+ */
+public class CaseMaterials extends DataEntity<CaseMaterials> {
+	
+	private static final long serialVersionUID = 1L;
+	private String name;		// 材料名称
+	private String specification;		// 规格型号
+	private String calculateUnit;		// 计量单位
+	private String taxPrice;           //材料含税价
+	private String price;		// 材料除税价
+    private Date useDate;       //价格取用日期(精确到月)
+	private String source;       //价格来源
+	private String tax;          //税率
+	private String material;        //材质
+	private String brand;		// 材料品牌
+	private String pp;		// 参数性能
+	private Area area;		// 厂商/工厂所在地
+	private String caseId;		// 案例id
+	private String index;
+
+	private String count;		// 采购量
+	private String supplier;		// 供应商
+	private String linkedman;		// 联系人
+	private String mobile;		// 联系电话
+
+	public CaseMaterials() {
+		super();
+	}
+
+	public CaseMaterials(String id){
+		super(id);
+	}
+
+	@ExcelField(title="材料名称", align=2, sort=7)
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+	
+	@ExcelField(title="材料品牌", align=2, sort=8)
+	public String getBrand() {
+		return brand;
+	}
+
+	public void setBrand(String brand) {
+		this.brand = brand;
+	}
+	
+	@ExcelField(title="规格型号", align=2, sort=9)
+	public String getSpecification() {
+		return specification;
+	}
+
+	public void setSpecification(String specification) {
+		this.specification = specification;
+	}
+	
+	@ExcelField(title="参数性能", align=2, sort=10)
+	public String getPp() {
+		return pp;
+	}
+
+	public String getTaxPrice() {
+		return taxPrice;
+	}
+
+	public void setTaxPrice(String taxPrice) {
+		this.taxPrice = taxPrice;
+	}
+
+	public Date getUseDate() {
+		return useDate;
+	}
+
+	public void setUseDate(Date useDate) {
+		this.useDate = useDate;
+	}
+
+	public String getIndex() {
+		return index;
+	}
+
+	public void setIndex(String index) {
+		this.index = index;
+	}
+
+	public String getSource() {
+		return source;
+	}
+
+	public void setSource(String source) {
+		this.source = source;
+	}
+
+	public String getTax() {
+		return tax;
+	}
+
+	public void setTax(String tax) {
+		this.tax = tax;
+	}
+
+	public String getMaterial() {
+		return material;
+	}
+
+	public void setMaterial(String material) {
+		this.material = material;
+	}
+
+	public Area getArea() {
+		return area;
+	}
+
+	public void setArea(Area area) {
+		this.area = area;
+	}
+
+	public void setPp(String pp) {
+		this.pp = pp;
+	}
+	
+	@ExcelField(title="计量单位", align=2, sort=11)
+	public String getCalculateUnit() {
+		return calculateUnit;
+	}
+
+	public void setCalculateUnit(String calculateUnit) {
+		this.calculateUnit = calculateUnit;
+	}
+	
+	@ExcelField(title="材料价格", align=2, sort=12)
+	public String getPrice() {
+		return price;
+	}
+
+	public void setPrice(String price) {
+		this.price = price;
+	}
+	
+	@ExcelField(title="采购量", align=2, sort=13)
+	public String getCount() {
+		return count;
+	}
+
+	public void setCount(String count) {
+		this.count = count;
+	}
+	
+	@ExcelField(title="供应商", align=2, sort=14)
+	public String getSupplier() {
+		return supplier;
+	}
+
+	public void setSupplier(String supplier) {
+		this.supplier = supplier;
+	}
+	
+	@ExcelField(title="联系人", align=2, sort=15)
+	public String getLinkedman() {
+		return linkedman;
+	}
+
+	public void setLinkedman(String linkedman) {
+		this.linkedman = linkedman;
+	}
+	
+	@ExcelField(title="联系电话", align=2, sort=16)
+	public String getMobile() {
+		return mobile;
+	}
+
+	public void setMobile(String mobile) {
+		this.mobile = mobile;
+	}
+	
+	@ExcelField(title="案例id", align=2, sort=17)
+	public String getCaseId() {
+		return caseId;
+	}
+
+	public void setCaseId(String caseId) {
+		this.caseId = caseId;
+	}
+	
+}

+ 53 - 0
src/main/java/com/jeeplus/modules/casematerials/service/CaseMaterialsService.java

@@ -0,0 +1,53 @@
+/**
+ * Copyright &copy; 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.modules.casematerials.service;
+
+import java.util.List;
+
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import com.jeeplus.common.persistence.Page;
+import com.jeeplus.common.service.CrudService;
+import com.jeeplus.modules.casematerials.entity.CaseMaterials;
+import com.jeeplus.modules.casematerials.dao.CaseMaterialsDao;
+
+/**
+ * 案例-材料Service
+ * @author fgy
+ * @version 2018-01-24
+ */
+@Service
+@Transactional(readOnly = true)
+public class CaseMaterialsService extends CrudService<CaseMaterialsDao, CaseMaterials> {
+
+	public CaseMaterials get(String id) {
+		return super.get(id);
+	}
+	
+	public List<CaseMaterials> findList(CaseMaterials caseMaterials) {
+		return super.findList(caseMaterials);
+	}
+	
+	public Page<CaseMaterials> findPage(Page<CaseMaterials> page, CaseMaterials caseMaterials) {
+		return super.findPage(page, caseMaterials);
+	}
+	
+	@Transactional(readOnly = false)
+	public void save(CaseMaterials caseMaterials) {
+		super.save(caseMaterials);
+	}
+	
+	@Transactional(readOnly = false)
+	public void delete(CaseMaterials caseMaterials) {
+		super.delete(caseMaterials);
+	}
+
+	@Transactional(readOnly = false)
+	public void deleteCase(CaseMaterials caseMaterials) {
+		dao.deleteCase(caseMaterials);
+	}
+	
+	
+}

+ 314 - 0
src/main/java/com/jeeplus/modules/casematerials/web/CaseMaterialsController.java

@@ -0,0 +1,314 @@
+/**
+ * Copyright &copy; 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.modules.casematerials.web;
+
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.List;
+import java.util.Locale;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.ConstraintViolationException;
+
+import com.jeeplus.modules.caseinfo.entity.CaseInfo;
+import com.jeeplus.modules.caseinfo.service.CaseInfoService;
+import com.jeeplus.modules.sys.service.AreaService;
+import com.jeeplus.modules.workreimbursement.utils.VarStr;
+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.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.servlet.mvc.support.RedirectAttributes;
+
+import com.google.common.collect.Lists;
+import com.jeeplus.common.utils.DateUtils;
+import com.jeeplus.common.utils.MyBeanUtils;
+import com.jeeplus.common.config.Global;
+import com.jeeplus.common.persistence.Page;
+import com.jeeplus.common.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.casematerials.entity.CaseMaterials;
+import com.jeeplus.modules.casematerials.service.CaseMaterialsService;
+
+/**
+ * 案例-材料Controller
+ * @author fgy
+ * @version 2018-01-24
+ */
+@Controller
+@RequestMapping(value = "${adminPath}/casematerials/caseMaterials")
+public class CaseMaterialsController extends BaseController {
+
+	@Autowired
+	private CaseMaterialsService caseMaterialsService;
+	@Autowired
+	private AreaService areaService;
+	@Autowired
+	private CaseInfoService caseInfoService;
+	@Autowired
+	private HttpServletRequest request;
+
+	
+	@ModelAttribute
+	public CaseMaterials get(@RequestParam(required=false) String id) {
+		CaseMaterials entity = null;
+		if (StringUtils.isNotBlank(id)){
+			entity = caseMaterialsService.get(id);
+		}
+		if (entity == null){
+			entity = new CaseMaterials();
+		}
+		return entity;
+	}
+	
+	/**
+	 * 案例-材料列表页面
+	 */
+	@RequiresPermissions("casematerials:caseMaterials:list")
+	@RequestMapping(value = {"list", ""})
+	public String list(CaseMaterials caseMaterials, HttpServletRequest request, HttpServletResponse response, Model model) {
+		Page<CaseMaterials> page = caseMaterialsService.findPage(new Page<CaseMaterials>(request, response), caseMaterials); 
+		model.addAttribute("page", page);
+		return "modules/casematerials/caseMaterialsList";
+	}
+
+	/**
+	 * 查看,增加,编辑案例-材料表单页面
+	 */
+	/*@RequiresPermissions(value={"casematerials:caseMaterials:view","casematerials:caseMaterials:add","casematerials:caseMaterials:edit"},logical=Logical.OR)*/
+	@RequestMapping(value = "form")
+	public String form(CaseMaterials caseMaterials, Model model) {
+		String tabId = request.getParameter("tabId");
+		model.addAttribute("caseMaterials", caseMaterials);
+		if("1".equals(tabId)){
+			return "modules/caseinfo/caseMaterialsFormBillDetail";
+		}
+		return "modules/casematerials/caseMaterialsForm";
+	}
+
+	/**
+	 * 保存案例-材料
+	 */
+	@RequiresPermissions(value={"casematerials:caseMaterials:add","casematerials:caseMaterials:edit"},logical=Logical.OR)
+	@RequestMapping(value = "save")
+	public String save(CaseMaterials caseMaterials, Model model, RedirectAttributes redirectAttributes) throws Exception{
+		if (!beanValidator(model, caseMaterials)){
+			return form(caseMaterials, model);
+		}
+		if(!caseMaterials.getIsNewRecord()){//编辑表单保存
+			CaseMaterials t = caseMaterialsService.get(caseMaterials.getId());//从数据库取出记录的值
+			MyBeanUtils.copyBeanNotNull2Bean(caseMaterials, t);//将编辑表单中的非NULL值覆盖数据库记录中的值
+			caseMaterialsService.save(t);//保存
+		}else{//新增表单保存
+			caseMaterialsService.save(caseMaterials);//保存
+		}
+		addMessage(redirectAttributes, "保存案例-材料成功");
+		return "redirect:"+Global.getAdminPath()+"/casematerials/caseMaterials/?repage";
+	}
+	
+	/**
+	 * 删除案例-材料
+	 */
+	/*@RequiresPermissions("casematerials:caseMaterials:del")*/
+	@RequestMapping(value = "delete")
+	public String delete(CaseMaterials caseMaterials, RedirectAttributes redirectAttributes) {
+		CaseInfo caseInfo = caseInfoService.get(caseMaterials.getCaseId());
+
+		String sta = caseInfo.getStatus();
+		/*if(!VarStr.status[0].equals(sta)){
+			if(VarStr.status[4].equals(sta)){
+				addMessage(redirectAttributes, "报销单已报销,无法删除");
+				return "redirect:"+adminPath+"/workreimbursement/workReimbursement/form?id="+workAccount.getWorkReimbursement().getId();
+			}else{
+				addMessage(redirectAttributes, "报销单正在审核中,无法删除");
+				return "redirect:"+adminPath+"/workreimbursement/workReimbursement/form?id="+workAccount.getWorkReimbursement().getId();
+			}
+		}*/
+		caseMaterialsService.delete(caseMaterials);
+		addMessage(redirectAttributes, "删除案例-材料成功");
+		return "redirect:"+adminPath+"/caseinfo/caseInfo/form?id="+caseMaterials.getCaseId();
+	}
+	/**
+	 * 批量删除案例-材料
+	 */
+	@RequiresPermissions("casematerials:caseMaterials:del")
+	@RequestMapping(value = "deleteAll")
+	public String deleteAll(String ids, RedirectAttributes redirectAttributes) {
+		String idArray[] =ids.split(",");
+		for(String id : idArray){
+			caseMaterialsService.delete(caseMaterialsService.get(id));
+		}
+		addMessage(redirectAttributes, "删除案例-材料成功");
+		return "redirect:"+Global.getAdminPath()+"/casematerials/caseMaterials/?repage";
+	}
+	
+	/**
+	 * 导出excel文件
+	 */
+	@RequiresPermissions("casematerials:caseMaterials:export")
+    @RequestMapping(value = "export", method=RequestMethod.POST)
+    public String exportFile(CaseMaterials caseMaterials, HttpServletRequest request, HttpServletResponse response, RedirectAttributes redirectAttributes) {
+		try {
+            String fileName = "案例-材料"+DateUtils.getDate("yyyyMMddHHmmss")+".xlsx";
+            Page<CaseMaterials> page = caseMaterialsService.findPage(new Page<CaseMaterials>(request, response, -1), caseMaterials);
+    		new ExportExcel("案例-材料", CaseMaterials.class).setDataList(page.getList()).write(response, fileName).dispose();
+    		return null;
+		} catch (Exception e) {
+			addMessage(redirectAttributes, "导出案例-材料记录失败!失败信息:"+e.getMessage());
+		}
+		return "redirect:"+Global.getAdminPath()+"/casematerials/caseMaterials/?repage";
+    }
+
+	/**
+	 * 导入Excel数据
+
+	 */
+	@RequiresPermissions("casematerials:caseMaterials:import")
+    @RequestMapping(value = "import", method=RequestMethod.POST)
+    public String importFile(MultipartFile file, RedirectAttributes redirectAttributes) {
+		try {
+			int successNum = 0;
+			int failureNum = 0;
+			StringBuilder failureMsg = new StringBuilder();
+			ImportExcel ei = new ImportExcel(file, 1, 0);
+			List<CaseMaterials> list = ei.getDataList(CaseMaterials.class);
+			for (CaseMaterials caseMaterials : list){
+				try{
+					caseMaterialsService.save(caseMaterials);
+					successNum++;
+				}catch(ConstraintViolationException ex){
+					failureNum++;
+				}catch (Exception ex) {
+					failureNum++;
+				}
+			}
+			if (failureNum>0){
+				failureMsg.insert(0, ",失败 "+failureNum+" 条案例-材料记录。");
+			}
+			addMessage(redirectAttributes, "已成功导入 "+successNum+" 条案例-材料记录"+failureMsg);
+		} catch (Exception e) {
+			addMessage(redirectAttributes, "导入案例-材料失败!失败信息:"+e.getMessage());
+		}
+		return "redirect:"+Global.getAdminPath()+"/casematerials/caseMaterials/?repage";
+    }
+	
+	/**
+	 * 下载导入案例-材料数据模板
+	 */
+	@RequiresPermissions("casematerials:caseMaterials:import")
+    @RequestMapping(value = "import/template")
+    public String importFileTemplate(HttpServletResponse response, RedirectAttributes redirectAttributes) {
+		try {
+            String fileName = "案例-材料数据导入模板.xlsx";
+    		List<CaseMaterials> list = Lists.newArrayList(); 
+    		new ExportExcel("案例-材料数据", CaseMaterials.class, 1).setDataList(list).write(response, fileName).dispose();
+    		return null;
+		} catch (Exception e) {
+			addMessage(redirectAttributes, "导入模板下载失败!失败信息:"+e.getMessage());
+		}
+		return "redirect:"+Global.getAdminPath()+"/casematerials/caseMaterials/?repage";
+    }
+
+	/**
+	 * 材料价格列表页面
+	 */
+	@RequestMapping("/addBill")
+	public String addBill(CaseMaterials caseMaterials, RedirectAttributes redirectAttributes,Model model, HttpServletRequest request) {
+		SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy", Locale.ENGLISH);
+		SimpleDateFormat sdf2= new SimpleDateFormat("yyyy-MM-dd");
+//		String wid = request.getParameter("wid");
+//		if(!StringUtils.isNotBlank(wid)){
+//			addMessage(redirectAttributes, "请先保存报销信息,否则无法添加报销单信息");
+//			return "modules/workreimbursement/workReimbursementFormBill";
+//		}
+//		WorkReimbursement workReimbursement = workReimbursementService.get(wid);
+		String name = request.getParameter("name");
+		String flag = request.getParameter("flag");
+		String specification = request.getParameter("specification");
+		String calculateUnit = request.getParameter("calculateUnit");
+		String taxPrice = request.getParameter("taxPrice");
+		String price = request.getParameter("price");
+		String ud = request.getParameter("useDate");
+		String source = request.getParameter("source");
+		String tax = request.getParameter("tax");
+		String material = request.getParameter("material");
+		String brand = request.getParameter("brand");
+		String pp = request.getParameter("pp");
+		String areaId = request.getParameter("areaId");
+		if(StringUtils.isNotBlank(name)&&StringUtils.isNotBlank(flag)&&StringUtils.isNotBlank(flag)&&StringUtils.isNotBlank(specification)
+				&&StringUtils.isNotBlank(calculateUnit)&&StringUtils.isNotBlank(taxPrice)&&StringUtils.isNotBlank(price)&&StringUtils.isNotBlank(ud)
+				&&StringUtils.isNotBlank(source)&&StringUtils.isNotBlank(tax)&&StringUtils.isNotBlank(material)&&StringUtils.isNotBlank(brand)
+				&&StringUtils.isNotBlank(source)&&StringUtils.isNotBlank(tax)
+				){
+			try {
+				name = URLDecoder.decode(name, "UTF-8");
+				flag = URLDecoder.decode(flag, "UTF-8");
+				specification = URLDecoder.decode(specification, "UTF-8");
+				calculateUnit = URLDecoder.decode(calculateUnit, "UTF-8");
+				taxPrice = URLDecoder.decode(taxPrice, "UTF-8");
+				price = URLDecoder.decode(price, "UTF-8");
+				ud = URLDecoder.decode(ud, "UTF-8");
+				source = URLDecoder.decode(source, "UTF-8");
+				tax = URLDecoder.decode(tax, "UTF-8");
+				material = URLDecoder.decode(material, "UTF-8");
+				brand = URLDecoder.decode(brand, "UTF-8");
+				pp = URLDecoder.decode(pp, "UTF-8");
+				areaId = URLDecoder.decode(areaId, "UTF-8");
+			} catch (UnsupportedEncodingException e) {
+				e.printStackTrace();
+			}
+		}
+		if(StringUtils.isNotBlank(areaId)){
+			caseMaterials.setArea(areaService.get(areaId));
+		}
+		if(StringUtils.isNotBlank(flag)){
+			caseMaterials.setId(flag);
+		}else{
+			caseMaterials.setId("flag");
+		}
+		caseMaterials.setIndex(request.getParameter("index"));
+		caseMaterials.setName(name);
+		caseMaterials.setSpecification(specification);
+		caseMaterials.setCalculateUnit(calculateUnit);
+		caseMaterials.setTaxPrice(taxPrice);
+		caseMaterials.setPrice(price);
+		Date useDate = null;
+		if(StringUtils.isNotBlank(ud)){
+			try {
+				useDate = sdf.parse(ud);
+			} catch (ParseException e) {
+				e.printStackTrace();
+				if(useDate == null){
+					try{
+					useDate = sdf2.parse(ud);}
+					catch (ParseException e1){
+						e1.printStackTrace();
+					}
+				}
+			}
+		}
+		caseMaterials.setUseDate(useDate);
+		caseMaterials.setSource(source);
+		caseMaterials.setTax(tax);
+		caseMaterials.setMaterial(material);
+		caseMaterials.setBrand(brand);
+		caseMaterials.setPp(pp);
+		model.addAttribute("caseMaterials",caseMaterials);
+		return "modules/caseinfo/caseMaterialsFormBill";
+	}
+	
+
+}

+ 19 - 0
src/main/java/com/jeeplus/modules/casematerialsnorm/dao/CaseMaterialsNormDao.java

@@ -0,0 +1,19 @@
+/**
+ * Copyright &copy; 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.modules.casematerialsnorm.dao;
+
+import com.jeeplus.common.persistence.CrudDao;
+import com.jeeplus.common.persistence.annotation.MyBatisDao;
+import com.jeeplus.modules.casematerialsnorm.entity.CaseMaterialsNorm;
+
+/**
+ * 材料消耗量指标DAO接口
+ * @author liuw
+ * @version 2018-02-07
+ */
+@MyBatisDao
+public interface CaseMaterialsNormDao extends CrudDao<CaseMaterialsNorm> {
+
+	
+}

+ 97 - 0
src/main/java/com/jeeplus/modules/casematerialsnorm/entity/CaseMaterialsNorm.java

@@ -0,0 +1,97 @@
+/**
+ * Copyright &copy; 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.modules.casematerialsnorm.entity;
+
+
+import com.jeeplus.common.persistence.DataEntity;
+import com.jeeplus.common.utils.excel.annotation.ExcelField;
+
+/**
+ * 材料消耗量指标Entity
+ * @author liuw
+ * @version 2018-02-07
+ */
+public class CaseMaterialsNorm extends DataEntity<CaseMaterialsNorm> {
+	
+	private static final long serialVersionUID = 1L;
+	private String name;		// 名称
+	private String type;		// 型号
+	private String unitContent;		// 单位消耗量
+	private String unit;		// 单位
+	private String allPrice;		// 合价
+	private String proportion;		// 比重
+	private String caseId;		// 案例id
+	
+	public CaseMaterialsNorm() {
+		super();
+	}
+
+	public CaseMaterialsNorm(String id){
+		super(id);
+	}
+
+	@ExcelField(title="名称", align=2, sort=7)
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+	
+	@ExcelField(title="型号", align=2, sort=8)
+	public String getType() {
+		return type;
+	}
+
+	public void setType(String type) {
+		this.type = type;
+	}
+	
+	@ExcelField(title="单位消耗量", align=2, sort=9)
+	public String getUnitContent() {
+		return unitContent;
+	}
+
+	public void setUnitContent(String unitContent) {
+		this.unitContent = unitContent;
+	}
+	
+	@ExcelField(title="单位", align=2, sort=10)
+	public String getUnit() {
+		return unit;
+	}
+
+	public void setUnit(String unit) {
+		this.unit = unit;
+	}
+	
+	@ExcelField(title="合价", align=2, sort=11)
+	public String getAllPrice() {
+		return allPrice;
+	}
+
+	public void setAllPrice(String allPrice) {
+		this.allPrice = allPrice;
+	}
+	
+	@ExcelField(title="比重", align=2, sort=12)
+	public String getProportion() {
+		return proportion;
+	}
+
+	public void setProportion(String proportion) {
+		this.proportion = proportion;
+	}
+	
+	@ExcelField(title="案例id", align=2, sort=13)
+	public String getCaseId() {
+		return caseId;
+	}
+
+	public void setCaseId(String caseId) {
+		this.caseId = caseId;
+	}
+	
+}

+ 50 - 0
src/main/java/com/jeeplus/modules/casematerialsnorm/service/CaseMaterialsNormService.java

@@ -0,0 +1,50 @@
+/**
+ * Copyright &copy; 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.modules.casematerialsnorm.service;
+
+import java.util.List;
+
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import com.jeeplus.common.persistence.Page;
+import com.jeeplus.common.service.CrudService;
+import com.jeeplus.modules.casematerialsnorm.entity.CaseMaterialsNorm;
+import com.jeeplus.modules.casematerialsnorm.dao.CaseMaterialsNormDao;
+
+/**
+ * 材料消耗量指标Service
+ * @author liuw
+ * @version 2018-02-07
+ */
+@Service
+@Transactional(readOnly = true)
+public class CaseMaterialsNormService extends CrudService<CaseMaterialsNormDao, CaseMaterialsNorm> {
+
+	public CaseMaterialsNorm get(String id) {
+		return super.get(id);
+	}
+	
+	public List<CaseMaterialsNorm> findList(CaseMaterialsNorm caseMaterialsNorm) {
+		return super.findList(caseMaterialsNorm);
+	}
+	
+	public Page<CaseMaterialsNorm> findPage(Page<CaseMaterialsNorm> page, CaseMaterialsNorm caseMaterialsNorm) {
+		return super.findPage(page, caseMaterialsNorm);
+	}
+	
+	@Transactional(readOnly = false)
+	public void save(CaseMaterialsNorm caseMaterialsNorm) {
+		super.save(caseMaterialsNorm);
+	}
+	
+	@Transactional(readOnly = false)
+	public void delete(CaseMaterialsNorm caseMaterialsNorm) {
+		super.delete(caseMaterialsNorm);
+	}
+	
+	
+	
+	
+}

+ 196 - 0
src/main/java/com/jeeplus/modules/casematerialsnorm/web/CaseMaterialsNormController.java

@@ -0,0 +1,196 @@
+/**
+ * Copyright &copy; 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.modules.casematerialsnorm.web;
+
+import java.util.List;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.ConstraintViolationException;
+
+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.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.servlet.mvc.support.RedirectAttributes;
+
+import com.google.common.collect.Lists;
+import com.jeeplus.common.utils.DateUtils;
+import com.jeeplus.common.utils.MyBeanUtils;
+import com.jeeplus.common.config.Global;
+import com.jeeplus.common.persistence.Page;
+import com.jeeplus.common.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.casematerialsnorm.entity.CaseMaterialsNorm;
+import com.jeeplus.modules.casematerialsnorm.service.CaseMaterialsNormService;
+
+/**
+ * 材料消耗量指标Controller
+ * @author liuw
+ * @version 2018-02-07
+ */
+@Controller
+@RequestMapping(value = "${adminPath}/casematerialsnorm/caseMaterialsNorm")
+public class CaseMaterialsNormController extends BaseController {
+
+	@Autowired
+	private CaseMaterialsNormService caseMaterialsNormService;
+	
+	@ModelAttribute
+	public CaseMaterialsNorm get(@RequestParam(required=false) String id) {
+		CaseMaterialsNorm entity = null;
+		if (StringUtils.isNotBlank(id)){
+			entity = caseMaterialsNormService.get(id);
+		}
+		if (entity == null){
+			entity = new CaseMaterialsNorm();
+		}
+		return entity;
+	}
+	
+	/**
+	 * 材料消耗量指标列表页面
+	 */
+	@RequiresPermissions("casematerialsnorm:caseMaterialsNorm:list")
+	@RequestMapping(value = {"list", ""})
+	public String list(CaseMaterialsNorm caseMaterialsNorm, HttpServletRequest request, HttpServletResponse response, Model model) {
+		Page<CaseMaterialsNorm> page = caseMaterialsNormService.findPage(new Page<CaseMaterialsNorm>(request, response), caseMaterialsNorm); 
+		model.addAttribute("page", page);
+		return "modules/casematerialsnorm/caseMaterialsNormList";
+	}
+
+	/**
+	 * 查看,增加,编辑材料消耗量指标表单页面
+	 */
+	@RequiresPermissions(value={"casematerialsnorm:caseMaterialsNorm:view","casematerialsnorm:caseMaterialsNorm:add","casematerialsnorm:caseMaterialsNorm:edit"},logical=Logical.OR)
+	@RequestMapping(value = "form")
+	public String form(CaseMaterialsNorm caseMaterialsNorm, Model model) {
+		model.addAttribute("caseMaterialsNorm", caseMaterialsNorm);
+		return "modules/casematerialsnorm/caseMaterialsNormForm";
+	}
+
+	/**
+	 * 保存材料消耗量指标
+	 */
+	@RequiresPermissions(value={"casematerialsnorm:caseMaterialsNorm:add","casematerialsnorm:caseMaterialsNorm:edit"},logical=Logical.OR)
+	@RequestMapping(value = "save")
+	public String save(CaseMaterialsNorm caseMaterialsNorm, Model model, RedirectAttributes redirectAttributes) throws Exception{
+		if (!beanValidator(model, caseMaterialsNorm)){
+			return form(caseMaterialsNorm, model);
+		}
+		if(!caseMaterialsNorm.getIsNewRecord()){//编辑表单保存
+			CaseMaterialsNorm t = caseMaterialsNormService.get(caseMaterialsNorm.getId());//从数据库取出记录的值
+			MyBeanUtils.copyBeanNotNull2Bean(caseMaterialsNorm, t);//将编辑表单中的非NULL值覆盖数据库记录中的值
+			caseMaterialsNormService.save(t);//保存
+		}else{//新增表单保存
+			caseMaterialsNormService.save(caseMaterialsNorm);//保存
+		}
+		addMessage(redirectAttributes, "保存材料消耗量指标成功");
+		return "redirect:"+Global.getAdminPath()+"/casematerialsnorm/caseMaterialsNorm/?repage";
+	}
+	
+	/**
+	 * 删除材料消耗量指标
+	 */
+	@RequiresPermissions("casematerialsnorm:caseMaterialsNorm:del")
+	@RequestMapping(value = "delete")
+	public String delete(CaseMaterialsNorm caseMaterialsNorm, RedirectAttributes redirectAttributes) {
+		caseMaterialsNormService.delete(caseMaterialsNorm);
+		addMessage(redirectAttributes, "删除材料消耗量指标成功");
+		return "redirect:"+Global.getAdminPath()+"/casematerialsnorm/caseMaterialsNorm/?repage";
+	}
+	
+	/**
+	 * 批量删除材料消耗量指标
+	 */
+	@RequiresPermissions("casematerialsnorm:caseMaterialsNorm:del")
+	@RequestMapping(value = "deleteAll")
+	public String deleteAll(String ids, RedirectAttributes redirectAttributes) {
+		String idArray[] =ids.split(",");
+		for(String id : idArray){
+			caseMaterialsNormService.delete(caseMaterialsNormService.get(id));
+		}
+		addMessage(redirectAttributes, "删除材料消耗量指标成功");
+		return "redirect:"+Global.getAdminPath()+"/casematerialsnorm/caseMaterialsNorm/?repage";
+	}
+	
+	/**
+	 * 导出excel文件
+	 */
+	@RequiresPermissions("casematerialsnorm:caseMaterialsNorm:export")
+    @RequestMapping(value = "export", method=RequestMethod.POST)
+    public String exportFile(CaseMaterialsNorm caseMaterialsNorm, HttpServletRequest request, HttpServletResponse response, RedirectAttributes redirectAttributes) {
+		try {
+            String fileName = "材料消耗量指标"+DateUtils.getDate("yyyyMMddHHmmss")+".xlsx";
+            Page<CaseMaterialsNorm> page = caseMaterialsNormService.findPage(new Page<CaseMaterialsNorm>(request, response, -1), caseMaterialsNorm);
+    		new ExportExcel("材料消耗量指标", CaseMaterialsNorm.class).setDataList(page.getList()).write(response, fileName,request.getHeader("USER-AGENT")).dispose();
+    		return null;
+		} catch (Exception e) {
+			addMessage(redirectAttributes, "导出材料消耗量指标记录失败!失败信息:"+e.getMessage());
+		}
+		return "redirect:"+Global.getAdminPath()+"/casematerialsnorm/caseMaterialsNorm/?repage";
+    }
+
+	/**
+	 * 导入Excel数据
+
+	 */
+	@RequiresPermissions("casematerialsnorm:caseMaterialsNorm:import")
+    @RequestMapping(value = "import", method=RequestMethod.POST)
+    public String importFile(MultipartFile file, RedirectAttributes redirectAttributes) {
+		try {
+			int successNum = 0;
+			int failureNum = 0;
+			StringBuilder failureMsg = new StringBuilder();
+			ImportExcel ei = new ImportExcel(file, 1, 0);
+			List<CaseMaterialsNorm> list = ei.getDataList(CaseMaterialsNorm.class);
+			for (CaseMaterialsNorm caseMaterialsNorm : list){
+				try{
+					caseMaterialsNormService.save(caseMaterialsNorm);
+					successNum++;
+				}catch(ConstraintViolationException ex){
+					failureNum++;
+				}catch (Exception ex) {
+					failureNum++;
+				}
+			}
+			if (failureNum>0){
+				failureMsg.insert(0, ",失败 "+failureNum+" 条材料消耗量指标记录。");
+			}
+			addMessage(redirectAttributes, "已成功导入 "+successNum+" 条材料消耗量指标记录"+failureMsg);
+		} catch (Exception e) {
+			addMessage(redirectAttributes, "导入材料消耗量指标失败!失败信息:"+e.getMessage());
+		}
+		return "redirect:"+Global.getAdminPath()+"/casematerialsnorm/caseMaterialsNorm/?repage";
+    }
+	
+	/**
+	 * 下载导入材料消耗量指标数据模板
+	 */
+	@RequiresPermissions("casematerialsnorm:caseMaterialsNorm:import")
+    @RequestMapping(value = "import/template")
+    public String importFileTemplate(HttpServletRequest request,HttpServletResponse response, RedirectAttributes redirectAttributes) {
+		try {
+            String fileName = "材料消耗量指标数据导入模板.xlsx";
+    		List<CaseMaterialsNorm> list = Lists.newArrayList(); 
+    		new ExportExcel("材料消耗量指标数据", CaseMaterialsNorm.class, 1).setDataList(list).write(response, fileName,request.getHeader("USER-AGENT")).dispose();
+    		return null;
+		} catch (Exception e) {
+			addMessage(redirectAttributes, "导入模板下载失败!失败信息:"+e.getMessage());
+		}
+		return "redirect:"+Global.getAdminPath()+"/casematerialsnorm/caseMaterialsNorm/?repage";
+    }
+	
+	
+	
+
+}

+ 19 - 0
src/main/java/com/jeeplus/modules/casemechanicalnorm/dao/CaseMechanicalNormDao.java

@@ -0,0 +1,19 @@
+/**
+ * Copyright &copy; 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.modules.casemechanicalnorm.dao;
+
+import com.jeeplus.common.persistence.CrudDao;
+import com.jeeplus.common.persistence.annotation.MyBatisDao;
+import com.jeeplus.modules.casemechanicalnorm.entity.CaseMechanicalNorm;
+
+/**
+ * 机械消耗量指标DAO接口
+ * @author liuw
+ * @version 2018-02-07
+ */
+@MyBatisDao
+public interface CaseMechanicalNormDao extends CrudDao<CaseMechanicalNorm> {
+
+	
+}

+ 97 - 0
src/main/java/com/jeeplus/modules/casemechanicalnorm/entity/CaseMechanicalNorm.java

@@ -0,0 +1,97 @@
+/**
+ * Copyright &copy; 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.modules.casemechanicalnorm.entity;
+
+
+import com.jeeplus.common.persistence.DataEntity;
+import com.jeeplus.common.utils.excel.annotation.ExcelField;
+
+/**
+ * 机械消耗量指标Entity
+ * @author liuw
+ * @version 2018-02-07
+ */
+public class CaseMechanicalNorm extends DataEntity<CaseMechanicalNorm> {
+	
+	private static final long serialVersionUID = 1L;
+	private String name;		// 名称
+	private String type;		// 型号
+	private String unitContent;		// 单位消耗量
+	private String unit;		// 单位
+	private String allPrice;		// 合价
+	private String proportion;		// 比重
+	private String caseId;		// 案例id
+	
+	public CaseMechanicalNorm() {
+		super();
+	}
+
+	public CaseMechanicalNorm(String id){
+		super(id);
+	}
+
+	@ExcelField(title="名称", align=2, sort=7)
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+	
+	@ExcelField(title="型号", align=2, sort=8)
+	public String getType() {
+		return type;
+	}
+
+	public void setType(String type) {
+		this.type = type;
+	}
+	
+	@ExcelField(title="单位消耗量", align=2, sort=9)
+	public String getUnitContent() {
+		return unitContent;
+	}
+
+	public void setUnitContent(String unitContent) {
+		this.unitContent = unitContent;
+	}
+	
+	@ExcelField(title="单位", align=2, sort=10)
+	public String getUnit() {
+		return unit;
+	}
+
+	public void setUnit(String unit) {
+		this.unit = unit;
+	}
+	
+	@ExcelField(title="合价", align=2, sort=11)
+	public String getAllPrice() {
+		return allPrice;
+	}
+
+	public void setAllPrice(String allPrice) {
+		this.allPrice = allPrice;
+	}
+	
+	@ExcelField(title="比重", align=2, sort=12)
+	public String getProportion() {
+		return proportion;
+	}
+
+	public void setProportion(String proportion) {
+		this.proportion = proportion;
+	}
+	
+	@ExcelField(title="案例id", align=2, sort=13)
+	public String getCaseId() {
+		return caseId;
+	}
+
+	public void setCaseId(String caseId) {
+		this.caseId = caseId;
+	}
+	
+}

+ 50 - 0
src/main/java/com/jeeplus/modules/casemechanicalnorm/service/CaseMechanicalNormService.java

@@ -0,0 +1,50 @@
+/**
+ * Copyright &copy; 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.modules.casemechanicalnorm.service;
+
+import java.util.List;
+
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import com.jeeplus.common.persistence.Page;
+import com.jeeplus.common.service.CrudService;
+import com.jeeplus.modules.casemechanicalnorm.entity.CaseMechanicalNorm;
+import com.jeeplus.modules.casemechanicalnorm.dao.CaseMechanicalNormDao;
+
+/**
+ * 机械消耗量指标Service
+ * @author liuw
+ * @version 2018-02-07
+ */
+@Service
+@Transactional(readOnly = true)
+public class CaseMechanicalNormService extends CrudService<CaseMechanicalNormDao, CaseMechanicalNorm> {
+
+	public CaseMechanicalNorm get(String id) {
+		return super.get(id);
+	}
+	
+	public List<CaseMechanicalNorm> findList(CaseMechanicalNorm caseMechanicalNorm) {
+		return super.findList(caseMechanicalNorm);
+	}
+	
+	public Page<CaseMechanicalNorm> findPage(Page<CaseMechanicalNorm> page, CaseMechanicalNorm caseMechanicalNorm) {
+		return super.findPage(page, caseMechanicalNorm);
+	}
+	
+	@Transactional(readOnly = false)
+	public void save(CaseMechanicalNorm caseMechanicalNorm) {
+		super.save(caseMechanicalNorm);
+	}
+	
+	@Transactional(readOnly = false)
+	public void delete(CaseMechanicalNorm caseMechanicalNorm) {
+		super.delete(caseMechanicalNorm);
+	}
+	
+	
+	
+	
+}

+ 196 - 0
src/main/java/com/jeeplus/modules/casemechanicalnorm/web/CaseMechanicalNormController.java

@@ -0,0 +1,196 @@
+/**
+ * Copyright &copy; 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.modules.casemechanicalnorm.web;
+
+import java.util.List;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.ConstraintViolationException;
+
+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.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.servlet.mvc.support.RedirectAttributes;
+
+import com.google.common.collect.Lists;
+import com.jeeplus.common.utils.DateUtils;
+import com.jeeplus.common.utils.MyBeanUtils;
+import com.jeeplus.common.config.Global;
+import com.jeeplus.common.persistence.Page;
+import com.jeeplus.common.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.casemechanicalnorm.entity.CaseMechanicalNorm;
+import com.jeeplus.modules.casemechanicalnorm.service.CaseMechanicalNormService;
+
+/**
+ * 机械消耗量指标Controller
+ * @author liuw
+ * @version 2018-02-07
+ */
+@Controller
+@RequestMapping(value = "${adminPath}/casemechanicalnorm/caseMechanicalNorm")
+public class CaseMechanicalNormController extends BaseController {
+
+	@Autowired
+	private CaseMechanicalNormService caseMechanicalNormService;
+	
+	@ModelAttribute
+	public CaseMechanicalNorm get(@RequestParam(required=false) String id) {
+		CaseMechanicalNorm entity = null;
+		if (StringUtils.isNotBlank(id)){
+			entity = caseMechanicalNormService.get(id);
+		}
+		if (entity == null){
+			entity = new CaseMechanicalNorm();
+		}
+		return entity;
+	}
+	
+	/**
+	 * 机械消耗量指标列表页面
+	 */
+	@RequiresPermissions("casemechanicalnorm:caseMechanicalNorm:list")
+	@RequestMapping(value = {"list", ""})
+	public String list(CaseMechanicalNorm caseMechanicalNorm, HttpServletRequest request, HttpServletResponse response, Model model) {
+		Page<CaseMechanicalNorm> page = caseMechanicalNormService.findPage(new Page<CaseMechanicalNorm>(request, response), caseMechanicalNorm); 
+		model.addAttribute("page", page);
+		return "modules/casemechanicalnorm/caseMechanicalNormList";
+	}
+
+	/**
+	 * 查看,增加,编辑机械消耗量指标表单页面
+	 */
+	@RequiresPermissions(value={"casemechanicalnorm:caseMechanicalNorm:view","casemechanicalnorm:caseMechanicalNorm:add","casemechanicalnorm:caseMechanicalNorm:edit"},logical=Logical.OR)
+	@RequestMapping(value = "form")
+	public String form(CaseMechanicalNorm caseMechanicalNorm, Model model) {
+		model.addAttribute("caseMechanicalNorm", caseMechanicalNorm);
+		return "modules/casemechanicalnorm/caseMechanicalNormForm";
+	}
+
+	/**
+	 * 保存机械消耗量指标
+	 */
+	@RequiresPermissions(value={"casemechanicalnorm:caseMechanicalNorm:add","casemechanicalnorm:caseMechanicalNorm:edit"},logical=Logical.OR)
+	@RequestMapping(value = "save")
+	public String save(CaseMechanicalNorm caseMechanicalNorm, Model model, RedirectAttributes redirectAttributes) throws Exception{
+		if (!beanValidator(model, caseMechanicalNorm)){
+			return form(caseMechanicalNorm, model);
+		}
+		if(!caseMechanicalNorm.getIsNewRecord()){//编辑表单保存
+			CaseMechanicalNorm t = caseMechanicalNormService.get(caseMechanicalNorm.getId());//从数据库取出记录的值
+			MyBeanUtils.copyBeanNotNull2Bean(caseMechanicalNorm, t);//将编辑表单中的非NULL值覆盖数据库记录中的值
+			caseMechanicalNormService.save(t);//保存
+		}else{//新增表单保存
+			caseMechanicalNormService.save(caseMechanicalNorm);//保存
+		}
+		addMessage(redirectAttributes, "保存机械消耗量指标成功");
+		return "redirect:"+Global.getAdminPath()+"/casemechanicalnorm/caseMechanicalNorm/?repage";
+	}
+	
+	/**
+	 * 删除机械消耗量指标
+	 */
+	@RequiresPermissions("casemechanicalnorm:caseMechanicalNorm:del")
+	@RequestMapping(value = "delete")
+	public String delete(CaseMechanicalNorm caseMechanicalNorm, RedirectAttributes redirectAttributes) {
+		caseMechanicalNormService.delete(caseMechanicalNorm);
+		addMessage(redirectAttributes, "删除机械消耗量指标成功");
+		return "redirect:"+Global.getAdminPath()+"/casemechanicalnorm/caseMechanicalNorm/?repage";
+	}
+	
+	/**
+	 * 批量删除机械消耗量指标
+	 */
+	@RequiresPermissions("casemechanicalnorm:caseMechanicalNorm:del")
+	@RequestMapping(value = "deleteAll")
+	public String deleteAll(String ids, RedirectAttributes redirectAttributes) {
+		String idArray[] =ids.split(",");
+		for(String id : idArray){
+			caseMechanicalNormService.delete(caseMechanicalNormService.get(id));
+		}
+		addMessage(redirectAttributes, "删除机械消耗量指标成功");
+		return "redirect:"+Global.getAdminPath()+"/casemechanicalnorm/caseMechanicalNorm/?repage";
+	}
+	
+	/**
+	 * 导出excel文件
+	 */
+	@RequiresPermissions("casemechanicalnorm:caseMechanicalNorm:export")
+    @RequestMapping(value = "export", method=RequestMethod.POST)
+    public String exportFile(CaseMechanicalNorm caseMechanicalNorm, HttpServletRequest request, HttpServletResponse response, RedirectAttributes redirectAttributes) {
+		try {
+            String fileName = "机械消耗量指标"+DateUtils.getDate("yyyyMMddHHmmss")+".xlsx";
+            Page<CaseMechanicalNorm> page = caseMechanicalNormService.findPage(new Page<CaseMechanicalNorm>(request, response, -1), caseMechanicalNorm);
+    		new ExportExcel("机械消耗量指标", CaseMechanicalNorm.class).setDataList(page.getList()).write(response, fileName).dispose();
+    		return null;
+		} catch (Exception e) {
+			addMessage(redirectAttributes, "导出机械消耗量指标记录失败!失败信息:"+e.getMessage());
+		}
+		return "redirect:"+Global.getAdminPath()+"/casemechanicalnorm/caseMechanicalNorm/?repage";
+    }
+
+	/**
+	 * 导入Excel数据
+
+	 */
+	@RequiresPermissions("casemechanicalnorm:caseMechanicalNorm:import")
+    @RequestMapping(value = "import", method=RequestMethod.POST)
+    public String importFile(MultipartFile file, RedirectAttributes redirectAttributes) {
+		try {
+			int successNum = 0;
+			int failureNum = 0;
+			StringBuilder failureMsg = new StringBuilder();
+			ImportExcel ei = new ImportExcel(file, 1, 0);
+			List<CaseMechanicalNorm> list = ei.getDataList(CaseMechanicalNorm.class);
+			for (CaseMechanicalNorm caseMechanicalNorm : list){
+				try{
+					caseMechanicalNormService.save(caseMechanicalNorm);
+					successNum++;
+				}catch(ConstraintViolationException ex){
+					failureNum++;
+				}catch (Exception ex) {
+					failureNum++;
+				}
+			}
+			if (failureNum>0){
+				failureMsg.insert(0, ",失败 "+failureNum+" 条机械消耗量指标记录。");
+			}
+			addMessage(redirectAttributes, "已成功导入 "+successNum+" 条机械消耗量指标记录"+failureMsg);
+		} catch (Exception e) {
+			addMessage(redirectAttributes, "导入机械消耗量指标失败!失败信息:"+e.getMessage());
+		}
+		return "redirect:"+Global.getAdminPath()+"/casemechanicalnorm/caseMechanicalNorm/?repage";
+    }
+	
+	/**
+	 * 下载导入机械消耗量指标数据模板
+	 */
+	@RequiresPermissions("casemechanicalnorm:caseMechanicalNorm:import")
+    @RequestMapping(value = "import/template")
+    public String importFileTemplate(HttpServletResponse response, RedirectAttributes redirectAttributes) {
+		try {
+            String fileName = "机械消耗量指标数据导入模板.xlsx";
+    		List<CaseMechanicalNorm> list = Lists.newArrayList(); 
+    		new ExportExcel("机械消耗量指标数据", CaseMechanicalNorm.class, 1).setDataList(list).write(response, fileName).dispose();
+    		return null;
+		} catch (Exception e) {
+			addMessage(redirectAttributes, "导入模板下载失败!失败信息:"+e.getMessage());
+		}
+		return "redirect:"+Global.getAdminPath()+"/casemechanicalnorm/caseMechanicalNorm/?repage";
+    }
+	
+	
+	
+
+}

+ 19 - 0
src/main/java/com/jeeplus/modules/casemember/dao/CaseMemberDao.java

@@ -0,0 +1,19 @@
+/**
+ * Copyright &copy; 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.modules.casemember.dao;
+
+import com.jeeplus.common.persistence.CrudDao;
+import com.jeeplus.common.persistence.annotation.MyBatisDao;
+import com.jeeplus.modules.casemember.entity.CaseMember;
+
+/**
+ * 会员案例DAO接口
+ * @author lw
+ * @version 2018-04-19
+ */
+@MyBatisDao
+public interface CaseMemberDao extends CrudDao<CaseMember> {
+
+	
+}

+ 47 - 0
src/main/java/com/jeeplus/modules/casemember/entity/CaseMember.java

@@ -0,0 +1,47 @@
+/**
+ * Copyright &copy; 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.modules.casemember.entity;
+
+
+import com.jeeplus.common.persistence.DataEntity;
+import com.jeeplus.common.utils.excel.annotation.ExcelField;
+
+/**
+ * 会员案例Entity
+ * @author lw
+ * @version 2018-04-19
+ */
+public class CaseMember extends DataEntity<CaseMember> {
+	
+	private static final long serialVersionUID = 1L;
+	private String caseId;		// 案例id
+	private String memberId;		// 会员id
+	
+	public CaseMember() {
+		super();
+	}
+
+	public CaseMember(String id){
+		super(id);
+	}
+
+	@ExcelField(title="案例id", align=2, sort=7)
+	public String getCaseId() {
+		return caseId;
+	}
+
+	public void setCaseId(String caseId) {
+		this.caseId = caseId;
+	}
+	
+	@ExcelField(title="会员id", align=2, sort=8)
+	public String getMemberId() {
+		return memberId;
+	}
+
+	public void setMemberId(String memberId) {
+		this.memberId = memberId;
+	}
+	
+}

+ 50 - 0
src/main/java/com/jeeplus/modules/casemember/service/CaseMemberService.java

@@ -0,0 +1,50 @@
+/**
+ * Copyright &copy; 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.modules.casemember.service;
+
+import java.util.List;
+
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import com.jeeplus.common.persistence.Page;
+import com.jeeplus.common.service.CrudService;
+import com.jeeplus.modules.casemember.entity.CaseMember;
+import com.jeeplus.modules.casemember.dao.CaseMemberDao;
+
+/**
+ * 会员案例Service
+ * @author lw
+ * @version 2018-04-19
+ */
+@Service
+@Transactional(readOnly = true)
+public class CaseMemberService extends CrudService<CaseMemberDao, CaseMember> {
+
+	public CaseMember get(String id) {
+		return super.get(id);
+	}
+	
+	public List<CaseMember> findList(CaseMember caseMember) {
+		return super.findList(caseMember);
+	}
+	
+	public Page<CaseMember> findPage(Page<CaseMember> page, CaseMember caseMember) {
+		return super.findPage(page, caseMember);
+	}
+	
+	@Transactional(readOnly = false)
+	public void save(CaseMember caseMember) {
+		super.save(caseMember);
+	}
+	
+	@Transactional(readOnly = false)
+	public void delete(CaseMember caseMember) {
+		super.delete(caseMember);
+	}
+	
+	
+	
+	
+}

+ 196 - 0
src/main/java/com/jeeplus/modules/casemember/web/CaseMemberController.java

@@ -0,0 +1,196 @@
+/**
+ * Copyright &copy; 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.modules.casemember.web;
+
+import java.util.List;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.ConstraintViolationException;
+
+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.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.servlet.mvc.support.RedirectAttributes;
+
+import com.google.common.collect.Lists;
+import com.jeeplus.common.utils.DateUtils;
+import com.jeeplus.common.utils.MyBeanUtils;
+import com.jeeplus.common.config.Global;
+import com.jeeplus.common.persistence.Page;
+import com.jeeplus.common.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.casemember.entity.CaseMember;
+import com.jeeplus.modules.casemember.service.CaseMemberService;
+
+/**
+ * 会员案例Controller
+ * @author lw
+ * @version 2018-04-19
+ */
+@Controller
+@RequestMapping(value = "${adminPath}/casemember/caseMember")
+public class CaseMemberController extends BaseController {
+
+	@Autowired
+	private CaseMemberService caseMemberService;
+	
+	@ModelAttribute
+	public CaseMember get(@RequestParam(required=false) String id) {
+		CaseMember entity = null;
+		if (StringUtils.isNotBlank(id)){
+			entity = caseMemberService.get(id);
+		}
+		if (entity == null){
+			entity = new CaseMember();
+		}
+		return entity;
+	}
+	
+	/**
+	 * 会员案例列表页面
+	 */
+	@RequiresPermissions("casemember:caseMember:list")
+	@RequestMapping(value = {"list", ""})
+	public String list(CaseMember caseMember, HttpServletRequest request, HttpServletResponse response, Model model) {
+		Page<CaseMember> page = caseMemberService.findPage(new Page<CaseMember>(request, response), caseMember); 
+		model.addAttribute("page", page);
+		return "modules/casemember/caseMemberList";
+	}
+
+	/**
+	 * 查看,增加,编辑会员案例表单页面
+	 */
+	@RequiresPermissions(value={"casemember:caseMember:view","casemember:caseMember:add","casemember:caseMember:edit"},logical=Logical.OR)
+	@RequestMapping(value = "form")
+	public String form(CaseMember caseMember, Model model) {
+		model.addAttribute("caseMember", caseMember);
+		return "modules/casemember/caseMemberForm";
+	}
+
+	/**
+	 * 保存会员案例
+	 */
+	@RequiresPermissions(value={"casemember:caseMember:add","casemember:caseMember:edit"},logical=Logical.OR)
+	@RequestMapping(value = "save")
+	public String save(CaseMember caseMember, Model model, RedirectAttributes redirectAttributes) throws Exception{
+		if (!beanValidator(model, caseMember)){
+			return form(caseMember, model);
+		}
+		if(!caseMember.getIsNewRecord()){//编辑表单保存
+			CaseMember t = caseMemberService.get(caseMember.getId());//从数据库取出记录的值
+			MyBeanUtils.copyBeanNotNull2Bean(caseMember, t);//将编辑表单中的非NULL值覆盖数据库记录中的值
+			caseMemberService.save(t);//保存
+		}else{//新增表单保存
+			caseMemberService.save(caseMember);//保存
+		}
+		addMessage(redirectAttributes, "保存会员案例成功");
+		return "redirect:"+Global.getAdminPath()+"/casemember/caseMember/?repage";
+	}
+	
+	/**
+	 * 删除会员案例
+	 */
+	@RequiresPermissions("casemember:caseMember:del")
+	@RequestMapping(value = "delete")
+	public String delete(CaseMember caseMember, RedirectAttributes redirectAttributes) {
+		caseMemberService.delete(caseMember);
+		addMessage(redirectAttributes, "删除会员案例成功");
+		return "redirect:"+Global.getAdminPath()+"/casemember/caseMember/?repage";
+	}
+	
+	/**
+	 * 批量删除会员案例
+	 */
+	@RequiresPermissions("casemember:caseMember:del")
+	@RequestMapping(value = "deleteAll")
+	public String deleteAll(String ids, RedirectAttributes redirectAttributes) {
+		String idArray[] =ids.split(",");
+		for(String id : idArray){
+			caseMemberService.delete(caseMemberService.get(id));
+		}
+		addMessage(redirectAttributes, "删除会员案例成功");
+		return "redirect:"+Global.getAdminPath()+"/casemember/caseMember/?repage";
+	}
+	
+	/**
+	 * 导出excel文件
+	 */
+	@RequiresPermissions("casemember:caseMember:export")
+    @RequestMapping(value = "export", method=RequestMethod.POST)
+    public String exportFile(CaseMember caseMember, HttpServletRequest request, HttpServletResponse response, RedirectAttributes redirectAttributes) {
+		try {
+            String fileName = "会员案例"+DateUtils.getDate("yyyyMMddHHmmss")+".xlsx";
+            Page<CaseMember> page = caseMemberService.findPage(new Page<CaseMember>(request, response, -1), caseMember);
+    		new ExportExcel("会员案例", CaseMember.class).setDataList(page.getList()).write(response, fileName).dispose();
+    		return null;
+		} catch (Exception e) {
+			addMessage(redirectAttributes, "导出会员案例记录失败!失败信息:"+e.getMessage());
+		}
+		return "redirect:"+Global.getAdminPath()+"/casemember/caseMember/?repage";
+    }
+
+	/**
+	 * 导入Excel数据
+
+	 */
+	@RequiresPermissions("casemember:caseMember:import")
+    @RequestMapping(value = "import", method=RequestMethod.POST)
+    public String importFile(MultipartFile file, RedirectAttributes redirectAttributes) {
+		try {
+			int successNum = 0;
+			int failureNum = 0;
+			StringBuilder failureMsg = new StringBuilder();
+			ImportExcel ei = new ImportExcel(file, 1, 0);
+			List<CaseMember> list = ei.getDataList(CaseMember.class);
+			for (CaseMember caseMember : list){
+				try{
+					caseMemberService.save(caseMember);
+					successNum++;
+				}catch(ConstraintViolationException ex){
+					failureNum++;
+				}catch (Exception ex) {
+					failureNum++;
+				}
+			}
+			if (failureNum>0){
+				failureMsg.insert(0, ",失败 "+failureNum+" 条会员案例记录。");
+			}
+			addMessage(redirectAttributes, "已成功导入 "+successNum+" 条会员案例记录"+failureMsg);
+		} catch (Exception e) {
+			addMessage(redirectAttributes, "导入会员案例失败!失败信息:"+e.getMessage());
+		}
+		return "redirect:"+Global.getAdminPath()+"/casemember/caseMember/?repage";
+    }
+	
+	/**
+	 * 下载导入会员案例数据模板
+	 */
+	@RequiresPermissions("casemember:caseMember:import")
+    @RequestMapping(value = "import/template")
+    public String importFileTemplate(HttpServletResponse response, RedirectAttributes redirectAttributes) {
+		try {
+            String fileName = "会员案例数据导入模板.xlsx";
+    		List<CaseMember> list = Lists.newArrayList(); 
+    		new ExportExcel("会员案例数据", CaseMember.class, 1).setDataList(list).write(response, fileName).dispose();
+    		return null;
+		} catch (Exception e) {
+			addMessage(redirectAttributes, "导入模板下载失败!失败信息:"+e.getMessage());
+		}
+		return "redirect:"+Global.getAdminPath()+"/casemember/caseMember/?repage";
+    }
+	
+	
+	
+
+}

+ 19 - 0
src/main/java/com/jeeplus/modules/casenorm/dao/CaseNormDao.java

@@ -0,0 +1,19 @@
+/**
+ * Copyright &copy; 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.modules.casenorm.dao;
+
+import com.jeeplus.common.persistence.CrudDao;
+import com.jeeplus.common.persistence.annotation.MyBatisDao;
+import com.jeeplus.modules.casenorm.entity.CaseNorm;
+
+/**
+ * 案例-造价及材料指标DAO接口
+ * @author fgy
+ * @version 2018-01-24
+ */
+@MyBatisDao
+public interface CaseNormDao extends CrudDao<CaseNorm> {
+
+	
+}

+ 97 - 0
src/main/java/com/jeeplus/modules/casenorm/entity/CaseNorm.java

@@ -0,0 +1,97 @@
+/**
+ * Copyright &copy; 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.modules.casenorm.entity;
+
+
+import com.jeeplus.common.persistence.DataEntity;
+import com.jeeplus.common.utils.excel.annotation.ExcelField;
+
+/**
+ * 案例-造价及材料指标Entity
+ * @author fgy
+ * @version 2018-01-24
+ */
+public class CaseNorm extends DataEntity<CaseNorm> {
+	
+	private static final long serialVersionUID = 1L;
+	private String name;		// 科目名称
+	private String eachContent;		// 单位含量
+	private String unit;		// 单位
+	private String percent;		// 占造价比例
+	private String calculatedBy;		// 计算口径
+	private String calculatedValue;		// 计算口径值
+	private String caseId;		// 案例id
+	
+	public CaseNorm() {
+		super();
+	}
+
+	public CaseNorm(String id){
+		super(id);
+	}
+
+	@ExcelField(title="科目名称", align=2, sort=7)
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+	
+	@ExcelField(title="单位含量", align=2, sort=8)
+	public String getEachContent() {
+		return eachContent;
+	}
+
+	public void setEachContent(String eachContent) {
+		this.eachContent = eachContent;
+	}
+	
+	@ExcelField(title="单位", align=2, sort=9)
+	public String getUnit() {
+		return unit;
+	}
+
+	public void setUnit(String unit) {
+		this.unit = unit;
+	}
+	
+	@ExcelField(title="占造价比例", align=2, sort=10)
+	public String getPercent() {
+		return percent;
+	}
+
+	public void setPercent(String percent) {
+		this.percent = percent;
+	}
+	
+	@ExcelField(title="计算口径", align=2, sort=11)
+	public String getCalculatedBy() {
+		return calculatedBy;
+	}
+
+	public void setCalculatedBy(String calculatedBy) {
+		this.calculatedBy = calculatedBy;
+	}
+	
+	@ExcelField(title="计算口径值", align=2, sort=12)
+	public String getCalculatedValue() {
+		return calculatedValue;
+	}
+
+	public void setCalculatedValue(String calculatedValue) {
+		this.calculatedValue = calculatedValue;
+	}
+	
+	@ExcelField(title="案例id", align=2, sort=13)
+	public String getCaseId() {
+		return caseId;
+	}
+
+	public void setCaseId(String caseId) {
+		this.caseId = caseId;
+	}
+	
+}

+ 50 - 0
src/main/java/com/jeeplus/modules/casenorm/service/CaseNormService.java

@@ -0,0 +1,50 @@
+/**
+ * Copyright &copy; 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.modules.casenorm.service;
+
+import java.util.List;
+
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import com.jeeplus.common.persistence.Page;
+import com.jeeplus.common.service.CrudService;
+import com.jeeplus.modules.casenorm.entity.CaseNorm;
+import com.jeeplus.modules.casenorm.dao.CaseNormDao;
+
+/**
+ * 案例-造价及材料指标Service
+ * @author fgy
+ * @version 2018-01-24
+ */
+@Service
+@Transactional(readOnly = true)
+public class CaseNormService extends CrudService<CaseNormDao, CaseNorm> {
+
+	public CaseNorm get(String id) {
+		return super.get(id);
+	}
+	
+	public List<CaseNorm> findList(CaseNorm caseNorm) {
+		return super.findList(caseNorm);
+	}
+	
+	public Page<CaseNorm> findPage(Page<CaseNorm> page, CaseNorm caseNorm) {
+		return super.findPage(page, caseNorm);
+	}
+	
+	@Transactional(readOnly = false)
+	public void save(CaseNorm caseNorm) {
+		super.save(caseNorm);
+	}
+	
+	@Transactional(readOnly = false)
+	public void delete(CaseNorm caseNorm) {
+		super.delete(caseNorm);
+	}
+	
+	
+	
+	
+}

+ 196 - 0
src/main/java/com/jeeplus/modules/casenorm/web/CaseNormController.java

@@ -0,0 +1,196 @@
+/**
+ * Copyright &copy; 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.modules.casenorm.web;
+
+import java.util.List;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.ConstraintViolationException;
+
+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.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.servlet.mvc.support.RedirectAttributes;
+
+import com.google.common.collect.Lists;
+import com.jeeplus.common.utils.DateUtils;
+import com.jeeplus.common.utils.MyBeanUtils;
+import com.jeeplus.common.config.Global;
+import com.jeeplus.common.persistence.Page;
+import com.jeeplus.common.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.casenorm.entity.CaseNorm;
+import com.jeeplus.modules.casenorm.service.CaseNormService;
+
+/**
+ * 案例-造价及材料指标Controller
+ * @author fgy
+ * @version 2018-01-24
+ */
+@Controller
+@RequestMapping(value = "${adminPath}/casenorm/caseNorm")
+public class CaseNormController extends BaseController {
+
+	@Autowired
+	private CaseNormService caseNormService;
+	
+	@ModelAttribute
+	public CaseNorm get(@RequestParam(required=false) String id) {
+		CaseNorm entity = null;
+		if (StringUtils.isNotBlank(id)){
+			entity = caseNormService.get(id);
+		}
+		if (entity == null){
+			entity = new CaseNorm();
+		}
+		return entity;
+	}
+	
+	/**
+	 * 案例-造价及材料指标列表页面
+	 */
+	@RequiresPermissions("casenorm:caseNorm:list")
+	@RequestMapping(value = {"list", ""})
+	public String list(CaseNorm caseNorm, HttpServletRequest request, HttpServletResponse response, Model model) {
+		Page<CaseNorm> page = caseNormService.findPage(new Page<CaseNorm>(request, response), caseNorm); 
+		model.addAttribute("page", page);
+		return "modules/casenorm/caseNormList";
+	}
+
+	/**
+	 * 查看,增加,编辑案例-造价及材料指标表单页面
+	 */
+	@RequiresPermissions(value={"casenorm:caseNorm:view","casenorm:caseNorm:add","casenorm:caseNorm:edit"},logical=Logical.OR)
+	@RequestMapping(value = "form")
+	public String form(CaseNorm caseNorm, Model model) {
+		model.addAttribute("caseNorm", caseNorm);
+		return "modules/casenorm/caseNormForm";
+	}
+
+	/**
+	 * 保存案例-造价及材料指标
+	 */
+	@RequiresPermissions(value={"casenorm:caseNorm:add","casenorm:caseNorm:edit"},logical=Logical.OR)
+	@RequestMapping(value = "save")
+	public String save(CaseNorm caseNorm, Model model, RedirectAttributes redirectAttributes) throws Exception{
+		if (!beanValidator(model, caseNorm)){
+			return form(caseNorm, model);
+		}
+		if(!caseNorm.getIsNewRecord()){//编辑表单保存
+			CaseNorm t = caseNormService.get(caseNorm.getId());//从数据库取出记录的值
+			MyBeanUtils.copyBeanNotNull2Bean(caseNorm, t);//将编辑表单中的非NULL值覆盖数据库记录中的值
+			caseNormService.save(t);//保存
+		}else{//新增表单保存
+			caseNormService.save(caseNorm);//保存
+		}
+		addMessage(redirectAttributes, "保存案例-造价及材料指标成功");
+		return "redirect:"+Global.getAdminPath()+"/casenorm/caseNorm/?repage";
+	}
+	
+	/**
+	 * 删除案例-造价及材料指标
+	 */
+	@RequiresPermissions("casenorm:caseNorm:del")
+	@RequestMapping(value = "delete")
+	public String delete(CaseNorm caseNorm, RedirectAttributes redirectAttributes) {
+		caseNormService.delete(caseNorm);
+		addMessage(redirectAttributes, "删除案例-造价及材料指标成功");
+		return "redirect:"+Global.getAdminPath()+"/casenorm/caseNorm/?repage";
+	}
+	
+	/**
+	 * 批量删除案例-造价及材料指标
+	 */
+	@RequiresPermissions("casenorm:caseNorm:del")
+	@RequestMapping(value = "deleteAll")
+	public String deleteAll(String ids, RedirectAttributes redirectAttributes) {
+		String idArray[] =ids.split(",");
+		for(String id : idArray){
+			caseNormService.delete(caseNormService.get(id));
+		}
+		addMessage(redirectAttributes, "删除案例-造价及材料指标成功");
+		return "redirect:"+Global.getAdminPath()+"/casenorm/caseNorm/?repage";
+	}
+	
+	/**
+	 * 导出excel文件
+	 */
+	@RequiresPermissions("casenorm:caseNorm:export")
+    @RequestMapping(value = "export", method=RequestMethod.POST)
+    public String exportFile(CaseNorm caseNorm, HttpServletRequest request, HttpServletResponse response, RedirectAttributes redirectAttributes) {
+		try {
+            String fileName = "案例-造价及材料指标"+DateUtils.getDate("yyyyMMddHHmmss")+".xlsx";
+            Page<CaseNorm> page = caseNormService.findPage(new Page<CaseNorm>(request, response, -1), caseNorm);
+    		new ExportExcel("案例-造价及材料指标", CaseNorm.class).setDataList(page.getList()).write(response, fileName).dispose();
+    		return null;
+		} catch (Exception e) {
+			addMessage(redirectAttributes, "导出案例-造价及材料指标记录失败!失败信息:"+e.getMessage());
+		}
+		return "redirect:"+Global.getAdminPath()+"/casenorm/caseNorm/?repage";
+    }
+
+	/**
+	 * 导入Excel数据
+
+	 */
+	@RequiresPermissions("casenorm:caseNorm:import")
+    @RequestMapping(value = "import", method=RequestMethod.POST)
+    public String importFile(MultipartFile file, RedirectAttributes redirectAttributes) {
+		try {
+			int successNum = 0;
+			int failureNum = 0;
+			StringBuilder failureMsg = new StringBuilder();
+			ImportExcel ei = new ImportExcel(file, 1, 0);
+			List<CaseNorm> list = ei.getDataList(CaseNorm.class);
+			for (CaseNorm caseNorm : list){
+				try{
+					caseNormService.save(caseNorm);
+					successNum++;
+				}catch(ConstraintViolationException ex){
+					failureNum++;
+				}catch (Exception ex) {
+					failureNum++;
+				}
+			}
+			if (failureNum>0){
+				failureMsg.insert(0, ",失败 "+failureNum+" 条案例-造价及材料指标记录。");
+			}
+			addMessage(redirectAttributes, "已成功导入 "+successNum+" 条案例-造价及材料指标记录"+failureMsg);
+		} catch (Exception e) {
+			addMessage(redirectAttributes, "导入案例-造价及材料指标失败!失败信息:"+e.getMessage());
+		}
+		return "redirect:"+Global.getAdminPath()+"/casenorm/caseNorm/?repage";
+    }
+	
+	/**
+	 * 下载导入案例-造价及材料指标数据模板
+	 */
+	@RequiresPermissions("casenorm:caseNorm:import")
+    @RequestMapping(value = "import/template")
+    public String importFileTemplate(HttpServletResponse response, RedirectAttributes redirectAttributes) {
+		try {
+            String fileName = "案例-造价及材料指标数据导入模板.xlsx";
+    		List<CaseNorm> list = Lists.newArrayList(); 
+    		new ExportExcel("案例-造价及材料指标数据", CaseNorm.class, 1).setDataList(list).write(response, fileName).dispose();
+    		return null;
+		} catch (Exception e) {
+			addMessage(redirectAttributes, "导入模板下载失败!失败信息:"+e.getMessage());
+		}
+		return "redirect:"+Global.getAdminPath()+"/casenorm/caseNorm/?repage";
+    }
+	
+	
+	
+
+}

+ 19 - 0
src/main/java/com/jeeplus/modules/casepeoplenorm/dao/CasePeopleNormDao.java

@@ -0,0 +1,19 @@
+/**
+ * Copyright &copy; 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.modules.casepeoplenorm.dao;
+
+import com.jeeplus.common.persistence.CrudDao;
+import com.jeeplus.common.persistence.annotation.MyBatisDao;
+import com.jeeplus.modules.casepeoplenorm.entity.CasePeopleNorm;
+
+/**
+ * 人工消耗量指标DAO接口
+ * @author liuw
+ * @version 2018-02-07
+ */
+@MyBatisDao
+public interface CasePeopleNormDao extends CrudDao<CasePeopleNorm> {
+
+	
+}

+ 97 - 0
src/main/java/com/jeeplus/modules/casepeoplenorm/entity/CasePeopleNorm.java

@@ -0,0 +1,97 @@
+/**
+ * Copyright &copy; 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.modules.casepeoplenorm.entity;
+
+
+import com.jeeplus.common.persistence.DataEntity;
+import com.jeeplus.common.utils.excel.annotation.ExcelField;
+
+/**
+ * 人工消耗量指标Entity
+ * @author liuw
+ * @version 2018-02-07
+ */
+public class CasePeopleNorm extends DataEntity<CasePeopleNorm> {
+	
+	private static final long serialVersionUID = 1L;
+	private String name;		// 名称
+	private String type;		// 型号
+	private String unitContent;		// 单位消耗量
+	private String unit;		// 单位
+	private String allPrice;		// 合价
+	private String proportion;		// 比重
+	private String caseId;		// 案例id
+	
+	public CasePeopleNorm() {
+		super();
+	}
+
+	public CasePeopleNorm(String id){
+		super(id);
+	}
+
+	@ExcelField(title="名称", align=2, sort=7)
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+	
+	@ExcelField(title="型号", align=2, sort=8)
+	public String getType() {
+		return type;
+	}
+
+	public void setType(String type) {
+		this.type = type;
+	}
+	
+	@ExcelField(title="单位消耗量", align=2, sort=9)
+	public String getUnitContent() {
+		return unitContent;
+	}
+
+	public void setUnitContent(String unitContent) {
+		this.unitContent = unitContent;
+	}
+	
+	@ExcelField(title="单位", align=2, sort=10)
+	public String getUnit() {
+		return unit;
+	}
+
+	public void setUnit(String unit) {
+		this.unit = unit;
+	}
+	
+	@ExcelField(title="合价", align=2, sort=11)
+	public String getAllPrice() {
+		return allPrice;
+	}
+
+	public void setAllPrice(String allPrice) {
+		this.allPrice = allPrice;
+	}
+	
+	@ExcelField(title="比重", align=2, sort=12)
+	public String getProportion() {
+		return proportion;
+	}
+
+	public void setProportion(String proportion) {
+		this.proportion = proportion;
+	}
+	
+	@ExcelField(title="案例id", align=2, sort=13)
+	public String getCaseId() {
+		return caseId;
+	}
+
+	public void setCaseId(String caseId) {
+		this.caseId = caseId;
+	}
+	
+}

+ 50 - 0
src/main/java/com/jeeplus/modules/casepeoplenorm/service/CasePeopleNormService.java

@@ -0,0 +1,50 @@
+/**
+ * Copyright &copy; 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.modules.casepeoplenorm.service;
+
+import java.util.List;
+
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import com.jeeplus.common.persistence.Page;
+import com.jeeplus.common.service.CrudService;
+import com.jeeplus.modules.casepeoplenorm.entity.CasePeopleNorm;
+import com.jeeplus.modules.casepeoplenorm.dao.CasePeopleNormDao;
+
+/**
+ * 人工消耗量指标Service
+ * @author liuw
+ * @version 2018-02-07
+ */
+@Service
+@Transactional(readOnly = true)
+public class CasePeopleNormService extends CrudService<CasePeopleNormDao, CasePeopleNorm> {
+
+	public CasePeopleNorm get(String id) {
+		return super.get(id);
+	}
+	
+	public List<CasePeopleNorm> findList(CasePeopleNorm casePeopleNorm) {
+		return super.findList(casePeopleNorm);
+	}
+	
+	public Page<CasePeopleNorm> findPage(Page<CasePeopleNorm> page, CasePeopleNorm casePeopleNorm) {
+		return super.findPage(page, casePeopleNorm);
+	}
+	
+	@Transactional(readOnly = false)
+	public void save(CasePeopleNorm casePeopleNorm) {
+		super.save(casePeopleNorm);
+	}
+	
+	@Transactional(readOnly = false)
+	public void delete(CasePeopleNorm casePeopleNorm) {
+		super.delete(casePeopleNorm);
+	}
+	
+	
+	
+	
+}

+ 196 - 0
src/main/java/com/jeeplus/modules/casepeoplenorm/web/CasePeopleNormController.java

@@ -0,0 +1,196 @@
+/**
+ * Copyright &copy; 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.modules.casepeoplenorm.web;
+
+import java.util.List;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.ConstraintViolationException;
+
+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.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.servlet.mvc.support.RedirectAttributes;
+
+import com.google.common.collect.Lists;
+import com.jeeplus.common.utils.DateUtils;
+import com.jeeplus.common.utils.MyBeanUtils;
+import com.jeeplus.common.config.Global;
+import com.jeeplus.common.persistence.Page;
+import com.jeeplus.common.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.casepeoplenorm.entity.CasePeopleNorm;
+import com.jeeplus.modules.casepeoplenorm.service.CasePeopleNormService;
+
+/**
+ * 人工消耗量指标Controller
+ * @author liuw
+ * @version 2018-02-07
+ */
+@Controller
+@RequestMapping(value = "${adminPath}/casepeoplenorm/casePeopleNorm")
+public class CasePeopleNormController extends BaseController {
+
+	@Autowired
+	private CasePeopleNormService casePeopleNormService;
+	
+	@ModelAttribute
+	public CasePeopleNorm get(@RequestParam(required=false) String id) {
+		CasePeopleNorm entity = null;
+		if (StringUtils.isNotBlank(id)){
+			entity = casePeopleNormService.get(id);
+		}
+		if (entity == null){
+			entity = new CasePeopleNorm();
+		}
+		return entity;
+	}
+	
+	/**
+	 * 人工消耗量指标列表页面
+	 */
+	@RequiresPermissions("casepeoplenorm:casePeopleNorm:list")
+	@RequestMapping(value = {"list", ""})
+	public String list(CasePeopleNorm casePeopleNorm, HttpServletRequest request, HttpServletResponse response, Model model) {
+		Page<CasePeopleNorm> page = casePeopleNormService.findPage(new Page<CasePeopleNorm>(request, response), casePeopleNorm); 
+		model.addAttribute("page", page);
+		return "modules/casepeoplenorm/casePeopleNormList";
+	}
+
+	/**
+	 * 查看,增加,编辑人工消耗量指标表单页面
+	 */
+	@RequiresPermissions(value={"casepeoplenorm:casePeopleNorm:view","casepeoplenorm:casePeopleNorm:add","casepeoplenorm:casePeopleNorm:edit"},logical=Logical.OR)
+	@RequestMapping(value = "form")
+	public String form(CasePeopleNorm casePeopleNorm, Model model) {
+		model.addAttribute("casePeopleNorm", casePeopleNorm);
+		return "modules/casepeoplenorm/casePeopleNormForm";
+	}
+
+	/**
+	 * 保存人工消耗量指标
+	 */
+	@RequiresPermissions(value={"casepeoplenorm:casePeopleNorm:add","casepeoplenorm:casePeopleNorm:edit"},logical=Logical.OR)
+	@RequestMapping(value = "save")
+	public String save(CasePeopleNorm casePeopleNorm, Model model, RedirectAttributes redirectAttributes) throws Exception{
+		if (!beanValidator(model, casePeopleNorm)){
+			return form(casePeopleNorm, model);
+		}
+		if(!casePeopleNorm.getIsNewRecord()){//编辑表单保存
+			CasePeopleNorm t = casePeopleNormService.get(casePeopleNorm.getId());//从数据库取出记录的值
+			MyBeanUtils.copyBeanNotNull2Bean(casePeopleNorm, t);//将编辑表单中的非NULL值覆盖数据库记录中的值
+			casePeopleNormService.save(t);//保存
+		}else{//新增表单保存
+			casePeopleNormService.save(casePeopleNorm);//保存
+		}
+		addMessage(redirectAttributes, "保存人工消耗量指标成功");
+		return "redirect:"+Global.getAdminPath()+"/casepeoplenorm/casePeopleNorm/?repage";
+	}
+	
+	/**
+	 * 删除人工消耗量指标
+	 */
+	@RequiresPermissions("casepeoplenorm:casePeopleNorm:del")
+	@RequestMapping(value = "delete")
+	public String delete(CasePeopleNorm casePeopleNorm, RedirectAttributes redirectAttributes) {
+		casePeopleNormService.delete(casePeopleNorm);
+		addMessage(redirectAttributes, "删除人工消耗量指标成功");
+		return "redirect:"+Global.getAdminPath()+"/casepeoplenorm/casePeopleNorm/?repage";
+	}
+	
+	/**
+	 * 批量删除人工消耗量指标
+	 */
+	@RequiresPermissions("casepeoplenorm:casePeopleNorm:del")
+	@RequestMapping(value = "deleteAll")
+	public String deleteAll(String ids, RedirectAttributes redirectAttributes) {
+		String idArray[] =ids.split(",");
+		for(String id : idArray){
+			casePeopleNormService.delete(casePeopleNormService.get(id));
+		}
+		addMessage(redirectAttributes, "删除人工消耗量指标成功");
+		return "redirect:"+Global.getAdminPath()+"/casepeoplenorm/casePeopleNorm/?repage";
+	}
+	
+	/**
+	 * 导出excel文件
+	 */
+	@RequiresPermissions("casepeoplenorm:casePeopleNorm:export")
+    @RequestMapping(value = "export", method=RequestMethod.POST)
+    public String exportFile(CasePeopleNorm casePeopleNorm, HttpServletRequest request, HttpServletResponse response, RedirectAttributes redirectAttributes) {
+		try {
+            String fileName = "人工消耗量指标"+DateUtils.getDate("yyyyMMddHHmmss")+".xlsx";
+            Page<CasePeopleNorm> page = casePeopleNormService.findPage(new Page<CasePeopleNorm>(request, response, -1), casePeopleNorm);
+    		new ExportExcel("人工消耗量指标", CasePeopleNorm.class).setDataList(page.getList()).write(response, fileName).dispose();
+    		return null;
+		} catch (Exception e) {
+			addMessage(redirectAttributes, "导出人工消耗量指标记录失败!失败信息:"+e.getMessage());
+		}
+		return "redirect:"+Global.getAdminPath()+"/casepeoplenorm/casePeopleNorm/?repage";
+    }
+
+	/**
+	 * 导入Excel数据
+
+	 */
+	@RequiresPermissions("casepeoplenorm:casePeopleNorm:import")
+    @RequestMapping(value = "import", method=RequestMethod.POST)
+    public String importFile(MultipartFile file, RedirectAttributes redirectAttributes) {
+		try {
+			int successNum = 0;
+			int failureNum = 0;
+			StringBuilder failureMsg = new StringBuilder();
+			ImportExcel ei = new ImportExcel(file, 1, 0);
+			List<CasePeopleNorm> list = ei.getDataList(CasePeopleNorm.class);
+			for (CasePeopleNorm casePeopleNorm : list){
+				try{
+					casePeopleNormService.save(casePeopleNorm);
+					successNum++;
+				}catch(ConstraintViolationException ex){
+					failureNum++;
+				}catch (Exception ex) {
+					failureNum++;
+				}
+			}
+			if (failureNum>0){
+				failureMsg.insert(0, ",失败 "+failureNum+" 条人工消耗量指标记录。");
+			}
+			addMessage(redirectAttributes, "已成功导入 "+successNum+" 条人工消耗量指标记录"+failureMsg);
+		} catch (Exception e) {
+			addMessage(redirectAttributes, "导入人工消耗量指标失败!失败信息:"+e.getMessage());
+		}
+		return "redirect:"+Global.getAdminPath()+"/casepeoplenorm/casePeopleNorm/?repage";
+    }
+	
+	/**
+	 * 下载导入人工消耗量指标数据模板
+	 */
+	@RequiresPermissions("casepeoplenorm:casePeopleNorm:import")
+    @RequestMapping(value = "import/template")
+    public String importFileTemplate(HttpServletResponse response, RedirectAttributes redirectAttributes) {
+		try {
+            String fileName = "人工消耗量指标数据导入模板.xlsx";
+    		List<CasePeopleNorm> list = Lists.newArrayList(); 
+    		new ExportExcel("人工消耗量指标数据", CasePeopleNorm.class, 1).setDataList(list).write(response, fileName).dispose();
+    		return null;
+		} catch (Exception e) {
+			addMessage(redirectAttributes, "导入模板下载失败!失败信息:"+e.getMessage());
+		}
+		return "redirect:"+Global.getAdminPath()+"/casepeoplenorm/casePeopleNorm/?repage";
+    }
+	
+	
+	
+
+}

+ 19 - 0
src/main/java/com/jeeplus/modules/caseprojectfeature/dao/CaseProjectFeatureDao.java

@@ -0,0 +1,19 @@
+/**
+ * Copyright &copy; 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.modules.caseprojectfeature.dao;
+
+import com.jeeplus.common.persistence.CrudDao;
+import com.jeeplus.common.persistence.annotation.MyBatisDao;
+import com.jeeplus.modules.caseprojectfeature.entity.CaseProjectFeature;
+
+/**
+ * 案例-主要项目特征DAO接口
+ * @author fgy
+ * @version 2018-01-24
+ */
+@MyBatisDao
+public interface CaseProjectFeatureDao extends CrudDao<CaseProjectFeature> {
+
+	
+}

+ 57 - 0
src/main/java/com/jeeplus/modules/caseprojectfeature/entity/CaseProjectFeature.java

@@ -0,0 +1,57 @@
+/**
+ * Copyright &copy; 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.modules.caseprojectfeature.entity;
+
+
+import com.jeeplus.common.persistence.DataEntity;
+import com.jeeplus.common.utils.excel.annotation.ExcelField;
+
+/**
+ * 案例-主要项目特征Entity
+ * @author fgy
+ * @version 2018-01-24
+ */
+public class CaseProjectFeature extends DataEntity<CaseProjectFeature> {
+	
+	private static final long serialVersionUID = 1L;
+	private String name;		// 特征项
+	private String value;		// 特征值
+	private String caseId;		// 案例id
+	
+	public CaseProjectFeature() {
+		super();
+	}
+
+	public CaseProjectFeature(String id){
+		super(id);
+	}
+
+	@ExcelField(title="特征项", align=2, sort=7)
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+	
+	@ExcelField(title="特征值", align=2, sort=8)
+	public String getValue() {
+		return value;
+	}
+
+	public void setValue(String value) {
+		this.value = value;
+	}
+	
+	@ExcelField(title="案例id", align=2, sort=9)
+	public String getCaseId() {
+		return caseId;
+	}
+
+	public void setCaseId(String caseId) {
+		this.caseId = caseId;
+	}
+	
+}

+ 50 - 0
src/main/java/com/jeeplus/modules/caseprojectfeature/service/CaseProjectFeatureService.java

@@ -0,0 +1,50 @@
+/**
+ * Copyright &copy; 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.modules.caseprojectfeature.service;
+
+import java.util.List;
+
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import com.jeeplus.common.persistence.Page;
+import com.jeeplus.common.service.CrudService;
+import com.jeeplus.modules.caseprojectfeature.entity.CaseProjectFeature;
+import com.jeeplus.modules.caseprojectfeature.dao.CaseProjectFeatureDao;
+
+/**
+ * 案例-主要项目特征Service
+ * @author fgy
+ * @version 2018-01-24
+ */
+@Service
+@Transactional(readOnly = true)
+public class CaseProjectFeatureService extends CrudService<CaseProjectFeatureDao, CaseProjectFeature> {
+
+	public CaseProjectFeature get(String id) {
+		return super.get(id);
+	}
+	
+	public List<CaseProjectFeature> findList(CaseProjectFeature caseProjectFeature) {
+		return super.findList(caseProjectFeature);
+	}
+	
+	public Page<CaseProjectFeature> findPage(Page<CaseProjectFeature> page, CaseProjectFeature caseProjectFeature) {
+		return super.findPage(page, caseProjectFeature);
+	}
+	
+	@Transactional(readOnly = false)
+	public void save(CaseProjectFeature caseProjectFeature) {
+		super.save(caseProjectFeature);
+	}
+	
+	@Transactional(readOnly = false)
+	public void delete(CaseProjectFeature caseProjectFeature) {
+		super.delete(caseProjectFeature);
+	}
+	
+	
+	
+	
+}

+ 196 - 0
src/main/java/com/jeeplus/modules/caseprojectfeature/web/CaseProjectFeatureController.java

@@ -0,0 +1,196 @@
+/**
+ * Copyright &copy; 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.modules.caseprojectfeature.web;
+
+import java.util.List;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.ConstraintViolationException;
+
+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.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.servlet.mvc.support.RedirectAttributes;
+
+import com.google.common.collect.Lists;
+import com.jeeplus.common.utils.DateUtils;
+import com.jeeplus.common.utils.MyBeanUtils;
+import com.jeeplus.common.config.Global;
+import com.jeeplus.common.persistence.Page;
+import com.jeeplus.common.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.caseprojectfeature.entity.CaseProjectFeature;
+import com.jeeplus.modules.caseprojectfeature.service.CaseProjectFeatureService;
+
+/**
+ * 案例-主要项目特征Controller
+ * @author fgy
+ * @version 2018-01-24
+ */
+@Controller
+@RequestMapping(value = "${adminPath}/caseprojectfeature/caseProjectFeature")
+public class CaseProjectFeatureController extends BaseController {
+
+	@Autowired
+	private CaseProjectFeatureService caseProjectFeatureService;
+	
+	@ModelAttribute
+	public CaseProjectFeature get(@RequestParam(required=false) String id) {
+		CaseProjectFeature entity = null;
+		if (StringUtils.isNotBlank(id)){
+			entity = caseProjectFeatureService.get(id);
+		}
+		if (entity == null){
+			entity = new CaseProjectFeature();
+		}
+		return entity;
+	}
+	
+	/**
+	 * 案例-主要项目特征列表页面
+	 */
+	@RequiresPermissions("caseprojectfeature:caseProjectFeature:list")
+	@RequestMapping(value = {"list", ""})
+	public String list(CaseProjectFeature caseProjectFeature, HttpServletRequest request, HttpServletResponse response, Model model) {
+		Page<CaseProjectFeature> page = caseProjectFeatureService.findPage(new Page<CaseProjectFeature>(request, response), caseProjectFeature); 
+		model.addAttribute("page", page);
+		return "modules/caseprojectfeature/caseProjectFeatureList";
+	}
+
+	/**
+	 * 查看,增加,编辑案例-主要项目特征表单页面
+	 */
+	@RequiresPermissions(value={"caseprojectfeature:caseProjectFeature:view","caseprojectfeature:caseProjectFeature:add","caseprojectfeature:caseProjectFeature:edit"},logical=Logical.OR)
+	@RequestMapping(value = "form")
+	public String form(CaseProjectFeature caseProjectFeature, Model model) {
+		model.addAttribute("caseProjectFeature", caseProjectFeature);
+		return "modules/caseprojectfeature/caseProjectFeatureForm";
+	}
+
+	/**
+	 * 保存案例-主要项目特征
+	 */
+	@RequiresPermissions(value={"caseprojectfeature:caseProjectFeature:add","caseprojectfeature:caseProjectFeature:edit"},logical=Logical.OR)
+	@RequestMapping(value = "save")
+	public String save(CaseProjectFeature caseProjectFeature, Model model, RedirectAttributes redirectAttributes) throws Exception{
+		if (!beanValidator(model, caseProjectFeature)){
+			return form(caseProjectFeature, model);
+		}
+		if(!caseProjectFeature.getIsNewRecord()){//编辑表单保存
+			CaseProjectFeature t = caseProjectFeatureService.get(caseProjectFeature.getId());//从数据库取出记录的值
+			MyBeanUtils.copyBeanNotNull2Bean(caseProjectFeature, t);//将编辑表单中的非NULL值覆盖数据库记录中的值
+			caseProjectFeatureService.save(t);//保存
+		}else{//新增表单保存
+			caseProjectFeatureService.save(caseProjectFeature);//保存
+		}
+		addMessage(redirectAttributes, "保存案例-主要项目特征成功");
+		return "redirect:"+Global.getAdminPath()+"/caseprojectfeature/caseProjectFeature/?repage";
+	}
+	
+	/**
+	 * 删除案例-主要项目特征
+	 */
+	@RequiresPermissions("caseprojectfeature:caseProjectFeature:del")
+	@RequestMapping(value = "delete")
+	public String delete(CaseProjectFeature caseProjectFeature, RedirectAttributes redirectAttributes) {
+		caseProjectFeatureService.delete(caseProjectFeature);
+		addMessage(redirectAttributes, "删除案例-主要项目特征成功");
+		return "redirect:"+Global.getAdminPath()+"/caseprojectfeature/caseProjectFeature/?repage";
+	}
+	
+	/**
+	 * 批量删除案例-主要项目特征
+	 */
+	@RequiresPermissions("caseprojectfeature:caseProjectFeature:del")
+	@RequestMapping(value = "deleteAll")
+	public String deleteAll(String ids, RedirectAttributes redirectAttributes) {
+		String idArray[] =ids.split(",");
+		for(String id : idArray){
+			caseProjectFeatureService.delete(caseProjectFeatureService.get(id));
+		}
+		addMessage(redirectAttributes, "删除案例-主要项目特征成功");
+		return "redirect:"+Global.getAdminPath()+"/caseprojectfeature/caseProjectFeature/?repage";
+	}
+	
+	/**
+	 * 导出excel文件
+	 */
+	@RequiresPermissions("caseprojectfeature:caseProjectFeature:export")
+    @RequestMapping(value = "export", method=RequestMethod.POST)
+    public String exportFile(CaseProjectFeature caseProjectFeature, HttpServletRequest request, HttpServletResponse response, RedirectAttributes redirectAttributes) {
+		try {
+            String fileName = "案例-主要项目特征"+DateUtils.getDate("yyyyMMddHHmmss")+".xlsx";
+            Page<CaseProjectFeature> page = caseProjectFeatureService.findPage(new Page<CaseProjectFeature>(request, response, -1), caseProjectFeature);
+    		new ExportExcel("案例-主要项目特征", CaseProjectFeature.class).setDataList(page.getList()).write(response, fileName).dispose();
+    		return null;
+		} catch (Exception e) {
+			addMessage(redirectAttributes, "导出案例-主要项目特征记录失败!失败信息:"+e.getMessage());
+		}
+		return "redirect:"+Global.getAdminPath()+"/caseprojectfeature/caseProjectFeature/?repage";
+    }
+
+	/**
+	 * 导入Excel数据
+
+	 */
+	@RequiresPermissions("caseprojectfeature:caseProjectFeature:import")
+    @RequestMapping(value = "import", method=RequestMethod.POST)
+    public String importFile(MultipartFile file, RedirectAttributes redirectAttributes) {
+		try {
+			int successNum = 0;
+			int failureNum = 0;
+			StringBuilder failureMsg = new StringBuilder();
+			ImportExcel ei = new ImportExcel(file, 1, 0);
+			List<CaseProjectFeature> list = ei.getDataList(CaseProjectFeature.class);
+			for (CaseProjectFeature caseProjectFeature : list){
+				try{
+					caseProjectFeatureService.save(caseProjectFeature);
+					successNum++;
+				}catch(ConstraintViolationException ex){
+					failureNum++;
+				}catch (Exception ex) {
+					failureNum++;
+				}
+			}
+			if (failureNum>0){
+				failureMsg.insert(0, ",失败 "+failureNum+" 条案例-主要项目特征记录。");
+			}
+			addMessage(redirectAttributes, "已成功导入 "+successNum+" 条案例-主要项目特征记录"+failureMsg);
+		} catch (Exception e) {
+			addMessage(redirectAttributes, "导入案例-主要项目特征失败!失败信息:"+e.getMessage());
+		}
+		return "redirect:"+Global.getAdminPath()+"/caseprojectfeature/caseProjectFeature/?repage";
+    }
+	
+	/**
+	 * 下载导入案例-主要项目特征数据模板
+	 */
+	@RequiresPermissions("caseprojectfeature:caseProjectFeature:import")
+    @RequestMapping(value = "import/template")
+    public String importFileTemplate(HttpServletResponse response, RedirectAttributes redirectAttributes) {
+		try {
+            String fileName = "案例-主要项目特征数据导入模板.xlsx";
+    		List<CaseProjectFeature> list = Lists.newArrayList(); 
+    		new ExportExcel("案例-主要项目特征数据", CaseProjectFeature.class, 1).setDataList(list).write(response, fileName).dispose();
+    		return null;
+		} catch (Exception e) {
+			addMessage(redirectAttributes, "导入模板下载失败!失败信息:"+e.getMessage());
+		}
+		return "redirect:"+Global.getAdminPath()+"/caseprojectfeature/caseProjectFeature/?repage";
+    }
+	
+	
+	
+
+}

+ 19 - 0
src/main/java/com/jeeplus/modules/contractclient/dao/WorkContractClientDao.java

@@ -0,0 +1,19 @@
+/**
+ * Copyright &copy; 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.modules.contractclient.dao;
+
+import com.jeeplus.common.persistence.CrudDao;
+import com.jeeplus.common.persistence.annotation.MyBatisDao;
+import com.jeeplus.modules.contractclient.entity.WorkContractClient;
+
+/**
+ * 合同涉及客户列表DAO接口
+ * @author lw
+ * @version 2018-06-05
+ */
+@MyBatisDao
+public interface WorkContractClientDao extends CrudDao<WorkContractClient> {
+
+	
+}

+ 47 - 0
src/main/java/com/jeeplus/modules/contractclient/entity/WorkContractClient.java

@@ -0,0 +1,47 @@
+/**
+ * Copyright &copy; 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.modules.contractclient.entity;
+
+
+import com.jeeplus.common.persistence.DataEntity;
+import com.jeeplus.common.utils.excel.annotation.ExcelField;
+
+/**
+ * 合同涉及客户列表Entity
+ * @author lw
+ * @version 2018-06-05
+ */
+public class WorkContractClient extends DataEntity<WorkContractClient> {
+	
+	private static final long serialVersionUID = 1L;
+	private String contractId;		// 合同id
+	private String clientId;		// 客户id
+	
+	public WorkContractClient() {
+		super();
+	}
+
+	public WorkContractClient(String id){
+		super(id);
+	}
+
+	@ExcelField(title="合同id", align=2, sort=7)
+	public String getContractId() {
+		return contractId;
+	}
+
+	public void setContractId(String contractId) {
+		this.contractId = contractId;
+	}
+	
+	@ExcelField(title="客户id", align=2, sort=8)
+	public String getClientId() {
+		return clientId;
+	}
+
+	public void setClientId(String clientId) {
+		this.clientId = clientId;
+	}
+	
+}

+ 50 - 0
src/main/java/com/jeeplus/modules/contractclient/service/WorkContractClientService.java

@@ -0,0 +1,50 @@
+/**
+ * Copyright &copy; 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.modules.contractclient.service;
+
+import java.util.List;
+
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import com.jeeplus.common.persistence.Page;
+import com.jeeplus.common.service.CrudService;
+import com.jeeplus.modules.contractclient.entity.WorkContractClient;
+import com.jeeplus.modules.contractclient.dao.WorkContractClientDao;
+
+/**
+ * 合同涉及客户列表Service
+ * @author lw
+ * @version 2018-06-05
+ */
+@Service
+@Transactional(readOnly = true)
+public class WorkContractClientService extends CrudService<WorkContractClientDao, WorkContractClient> {
+
+	public WorkContractClient get(String id) {
+		return super.get(id);
+	}
+	
+	public List<WorkContractClient> findList(WorkContractClient workContractClient) {
+		return super.findList(workContractClient);
+	}
+	
+	public Page<WorkContractClient> findPage(Page<WorkContractClient> page, WorkContractClient workContractClient) {
+		return super.findPage(page, workContractClient);
+	}
+	
+	@Transactional(readOnly = false)
+	public void save(WorkContractClient workContractClient) {
+		super.save(workContractClient);
+	}
+	
+	@Transactional(readOnly = false)
+	public void delete(WorkContractClient workContractClient) {
+		super.delete(workContractClient);
+	}
+	
+	
+	
+	
+}

+ 196 - 0
src/main/java/com/jeeplus/modules/contractclient/web/WorkContractClientController.java

@@ -0,0 +1,196 @@
+/**
+ * Copyright &copy; 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.modules.contractclient.web;
+
+import java.util.List;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.ConstraintViolationException;
+
+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.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.servlet.mvc.support.RedirectAttributes;
+
+import com.google.common.collect.Lists;
+import com.jeeplus.common.utils.DateUtils;
+import com.jeeplus.common.utils.MyBeanUtils;
+import com.jeeplus.common.config.Global;
+import com.jeeplus.common.persistence.Page;
+import com.jeeplus.common.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.contractclient.entity.WorkContractClient;
+import com.jeeplus.modules.contractclient.service.WorkContractClientService;
+
+/**
+ * 合同涉及客户列表Controller
+ * @author lw
+ * @version 2018-06-05
+ */
+@Controller
+@RequestMapping(value = "${adminPath}/contractclient/workContractClient")
+public class WorkContractClientController extends BaseController {
+
+	@Autowired
+	private WorkContractClientService workContractClientService;
+	
+	@ModelAttribute
+	public WorkContractClient get(@RequestParam(required=false) String id) {
+		WorkContractClient entity = null;
+		if (StringUtils.isNotBlank(id)){
+			entity = workContractClientService.get(id);
+		}
+		if (entity == null){
+			entity = new WorkContractClient();
+		}
+		return entity;
+	}
+	
+	/**
+	 * 合同涉及客户列表列表页面
+	 */
+	@RequiresPermissions("contractclient:workContractClient:list")
+	@RequestMapping(value = {"list", ""})
+	public String list(WorkContractClient workContractClient, HttpServletRequest request, HttpServletResponse response, Model model) {
+		Page<WorkContractClient> page = workContractClientService.findPage(new Page<WorkContractClient>(request, response), workContractClient); 
+		model.addAttribute("page", page);
+		return "modules/contractclient/workContractClientList";
+	}
+
+	/**
+	 * 查看,增加,编辑合同涉及客户列表表单页面
+	 */
+	@RequiresPermissions(value={"contractclient:workContractClient:view","contractclient:workContractClient:add","contractclient:workContractClient:edit"},logical=Logical.OR)
+	@RequestMapping(value = "form")
+	public String form(WorkContractClient workContractClient, Model model) {
+		model.addAttribute("workContractClient", workContractClient);
+		return "modules/contractclient/workContractClientForm";
+	}
+
+	/**
+	 * 保存合同涉及客户列表
+	 */
+	@RequiresPermissions(value={"contractclient:workContractClient:add","contractclient:workContractClient:edit"},logical=Logical.OR)
+	@RequestMapping(value = "save")
+	public String save(WorkContractClient workContractClient, Model model, RedirectAttributes redirectAttributes) throws Exception{
+		if (!beanValidator(model, workContractClient)){
+			return form(workContractClient, model);
+		}
+		if(!workContractClient.getIsNewRecord()){//编辑表单保存
+			WorkContractClient t = workContractClientService.get(workContractClient.getId());//从数据库取出记录的值
+			MyBeanUtils.copyBeanNotNull2Bean(workContractClient, t);//将编辑表单中的非NULL值覆盖数据库记录中的值
+			workContractClientService.save(t);//保存
+		}else{//新增表单保存
+			workContractClientService.save(workContractClient);//保存
+		}
+		addMessage(redirectAttributes, "保存合同涉及客户列表成功");
+		return "redirect:"+Global.getAdminPath()+"/contractclient/workContractClient/?repage";
+	}
+	
+	/**
+	 * 删除合同涉及客户列表
+	 */
+	@RequiresPermissions("contractclient:workContractClient:del")
+	@RequestMapping(value = "delete")
+	public String delete(WorkContractClient workContractClient, RedirectAttributes redirectAttributes) {
+		workContractClientService.delete(workContractClient);
+		addMessage(redirectAttributes, "删除合同涉及客户列表成功");
+		return "redirect:"+Global.getAdminPath()+"/contractclient/workContractClient/?repage";
+	}
+	
+	/**
+	 * 批量删除合同涉及客户列表
+	 */
+	@RequiresPermissions("contractclient:workContractClient:del")
+	@RequestMapping(value = "deleteAll")
+	public String deleteAll(String ids, RedirectAttributes redirectAttributes) {
+		String idArray[] =ids.split(",");
+		for(String id : idArray){
+			workContractClientService.delete(workContractClientService.get(id));
+		}
+		addMessage(redirectAttributes, "删除合同涉及客户列表成功");
+		return "redirect:"+Global.getAdminPath()+"/contractclient/workContractClient/?repage";
+	}
+	
+	/**
+	 * 导出excel文件
+	 */
+	@RequiresPermissions("contractclient:workContractClient:export")
+    @RequestMapping(value = "export", method=RequestMethod.POST)
+    public String exportFile(WorkContractClient workContractClient, HttpServletRequest request, HttpServletResponse response, RedirectAttributes redirectAttributes) {
+		try {
+            String fileName = "合同涉及客户列表"+DateUtils.getDate("yyyyMMddHHmmss")+".xlsx";
+            Page<WorkContractClient> page = workContractClientService.findPage(new Page<WorkContractClient>(request, response, -1), workContractClient);
+    		new ExportExcel("合同涉及客户列表", WorkContractClient.class).setDataList(page.getList()).write(response, fileName).dispose();
+    		return null;
+		} catch (Exception e) {
+			addMessage(redirectAttributes, "导出合同涉及客户列表记录失败!失败信息:"+e.getMessage());
+		}
+		return "redirect:"+Global.getAdminPath()+"/contractclient/workContractClient/?repage";
+    }
+
+	/**
+	 * 导入Excel数据
+
+	 */
+	@RequiresPermissions("contractclient:workContractClient:import")
+    @RequestMapping(value = "import", method=RequestMethod.POST)
+    public String importFile(MultipartFile file, RedirectAttributes redirectAttributes) {
+		try {
+			int successNum = 0;
+			int failureNum = 0;
+			StringBuilder failureMsg = new StringBuilder();
+			ImportExcel ei = new ImportExcel(file, 1, 0);
+			List<WorkContractClient> list = ei.getDataList(WorkContractClient.class);
+			for (WorkContractClient workContractClient : list){
+				try{
+					workContractClientService.save(workContractClient);
+					successNum++;
+				}catch(ConstraintViolationException ex){
+					failureNum++;
+				}catch (Exception ex) {
+					failureNum++;
+				}
+			}
+			if (failureNum>0){
+				failureMsg.insert(0, ",失败 "+failureNum+" 条合同涉及客户列表记录。");
+			}
+			addMessage(redirectAttributes, "已成功导入 "+successNum+" 条合同涉及客户列表记录"+failureMsg);
+		} catch (Exception e) {
+			addMessage(redirectAttributes, "导入合同涉及客户列表失败!失败信息:"+e.getMessage());
+		}
+		return "redirect:"+Global.getAdminPath()+"/contractclient/workContractClient/?repage";
+    }
+	
+	/**
+	 * 下载导入合同涉及客户列表数据模板
+	 */
+	@RequiresPermissions("contractclient:workContractClient:import")
+    @RequestMapping(value = "import/template")
+    public String importFileTemplate(HttpServletResponse response, RedirectAttributes redirectAttributes) {
+		try {
+            String fileName = "合同涉及客户列表数据导入模板.xlsx";
+    		List<WorkContractClient> list = Lists.newArrayList(); 
+    		new ExportExcel("合同涉及客户列表数据", WorkContractClient.class, 1).setDataList(list).write(response, fileName).dispose();
+    		return null;
+		} catch (Exception e) {
+			addMessage(redirectAttributes, "导入模板下载失败!失败信息:"+e.getMessage());
+		}
+		return "redirect:"+Global.getAdminPath()+"/contractclient/workContractClient/?repage";
+    }
+	
+	
+	
+
+}