首页>代码>spring3+spring mvc3+hibernate4开发通用网站后台管理系统>/my-forestry/src/com/forestry/controller/sys/ForestryController.java
package com.forestry.controller.sys;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.text.NumberFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

import org.apache.commons.io.FileUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang3.time.DateFormatUtils;
import org.apache.log4j.Logger;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.hssf.usermodel.HSSFHeader;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
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.support.RequestContext;

import com.forestry.core.ForestryBaseController;
import com.forestry.model.sys.Forestry;
import com.forestry.model.sys.ForestryType;
import com.forestry.service.sys.ForestryService;
import com.forestry.service.sys.ForestryTypeService;

import core.extjs.ExtJSBaseParameter;
import core.extjs.ListView;
import core.support.QueryResult;
import core.util.ForestryUtils;

/**
 * @author Yang Tian
 * @email 1298588579@qq.com
 */
@Controller
@RequestMapping("/sys/forestry")
public class ForestryController extends ForestryBaseController<Forestry> {

	private static final Logger log = Logger.getLogger(ForestryController.class);
	private static SimpleDateFormat sdfDate = new SimpleDateFormat("yyyy-MM-dd");

	@Resource
	private ForestryService forestryService;
	@Resource
	private ForestryTypeService forestryTypeService;

	@RequestMapping(value = "/getForestry", method = { RequestMethod.POST, RequestMethod.GET })
	public void getForestry(HttpServletRequest request, HttpServletResponse response) throws Exception {
		Integer firstResult = Integer.valueOf(request.getParameter("start"));
		Integer maxResults = Integer.valueOf(request.getParameter("limit"));
		String sortedObject = null;
		String sortedValue = null;
		List<LinkedHashMap<String, Object>> sortedList = mapper.readValue(request.getParameter("sort"), List.class);
		for (int i = 0; i < sortedList.size(); i++) {
			Map<String, Object> map = sortedList.get(i);
			sortedObject = (String) map.get("property");
			sortedValue = (String) map.get("direction");
		}
		Forestry forestry = new Forestry();
		String epcId = request.getParameter("epcId");
		if (StringUtils.isNotBlank(epcId)) {
			forestry.set$like_epcId(epcId);
		}
		String name = request.getParameter("name");
		if (StringUtils.isNotBlank(name)) {
			forestry.set$like_name(name);
		}
		String forestryTypeId = request.getParameter("forestryTypeId");
		if (StringUtils.isNotBlank(forestryTypeId)) {
			forestry.set$eq_typeId(Long.valueOf(forestryTypeId));
		}
		forestry.setFirstResult(firstResult);
		forestry.setMaxResults(maxResults);
		Map<String, String> sortedCondition = new HashMap<String, String>();
		sortedCondition.put(sortedObject, sortedValue);
		forestry.setSortedConditions(sortedCondition);
		QueryResult<Forestry> queryResult = forestryService.doPaginationQuery(forestry);
		List<Forestry> forestryList = forestryService.getForestryList(queryResult.getResultList());
		ListView<Forestry> forestryListView = new ListView<Forestry>();
		forestryListView.setData(forestryList);
		forestryListView.setTotalRecord(queryResult.getTotalCount());
		writeJSON(response, forestryListView);
	}

	@RequestMapping("/deleteForestry")
	public void deleteForestry(HttpServletRequest request, HttpServletResponse response, @RequestParam("ids") Long[] ids) throws IOException {
		boolean flag = forestryService.deleteByPK(ids);
		if (flag) {
			writeJSON(response, "{success:true}");
		} else {
			writeJSON(response, "{success:false}");
		}
	}

	@RequestMapping("/getForestryTypeName")
	public void getForestryTypeName(HttpServletRequest request, HttpServletResponse response) throws Exception {
		List<ForestryType> forestryTypeList = forestryTypeService.doQueryAll();
		JSONArray jsonArray = new JSONArray();
		for (int i = 0; i < forestryTypeList.size(); i++) {
			JSONObject jsonObject = new JSONObject();
			jsonObject.element("ItemText", forestryTypeList.get(i).getName());
			jsonObject.element("ItemValue", forestryTypeList.get(i).getId());
			jsonArray.add(jsonObject);
		}
		JSONObject resultJSONObject = new JSONObject();
		resultJSONObject.element("list", jsonArray);
		writeJSON(response, resultJSONObject);
	}

	@Override
	@RequestMapping(value = "/saveForestry", method = { RequestMethod.POST, RequestMethod.GET })
	public void doSave(Forestry entity, HttpServletRequest request, HttpServletResponse response) throws IOException {
		ExtJSBaseParameter parameter = ((ExtJSBaseParameter) entity);
		Forestry checkEpcId = forestryService.getByProerties("epcId", entity.getEpcId());
		if (null != checkEpcId && null == entity.getId()) {
			parameter.setSuccess(false);
		} else {
			ForestryType forestryType = forestryTypeService.get(entity.getForestryTypeId());
			entity.setForestryType(forestryType);
			if (CMD_EDIT.equals(parameter.getCmd())) {
				forestryService.update(entity);
			} else if (CMD_NEW.equals(parameter.getCmd())) {
				forestryService.persist(entity);
			}
			parameter.setCmd(CMD_EDIT);
			parameter.setSuccess(true);
		}
		writeJSON(response, parameter);
	}

	private static SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");

	@RequestMapping(value = "/importForestryFile", method = RequestMethod.POST)
	public void importForestryFile(@RequestParam(value = "importedFile", required = false) MultipartFile file, HttpServletRequest request, HttpServletResponse response) throws Exception {
		RequestContext requestContext = new RequestContext(request);
		JSONObject json = new JSONObject();
		if (!file.isEmpty()) {
			if (file.getSize() > 2097152) {
				json.put("msg", requestContext.getMessage("g_fileTooLarge"));
			} else {
				try {
					String originalFilename = file.getOriginalFilename();
					String fileName = sdf.format(new Date()) + ForestryUtils.getRandomString(3) + originalFilename.substring(originalFilename.lastIndexOf("."));
					File filePath = new File(getClass().getClassLoader().getResource("/").getPath().replace("/WEB-INF/classes/", "/static/download/attachment/" + DateFormatUtils.format(new Date(), "yyyyMM")));
					if (!filePath.exists()) {
						filePath.mkdirs();
					}
					String serverFile = filePath.getAbsolutePath() + "\\" + fileName;
					file.transferTo(new File(serverFile));

					String fileType = fileName.substring(fileName.lastIndexOf(".") + 1);
					if (!fileType.equalsIgnoreCase("xls") && !fileType.equalsIgnoreCase("xlsx")) {
						json.put("success", false);
						json.put("msg", requestContext.getMessage("g_notValidExcel"));
						writeJSON(response, json.toString());
						return;
					}
					int count = 0;
					StringBuilder stringBuilder = new StringBuilder();
					InputStream xls = new FileInputStream(serverFile);
					Workbook wb = null;
					Sheet sheet = null;
					Row currentRow = null;
					Row headRow = null;
					Cell currentCell = null;
					if (fileType.equals("xls")) {
						wb = new HSSFWorkbook(xls);
					} else if (fileType.equals("xlsx")) {
						wb = new XSSFWorkbook(xls);
					}
					sheet = wb.getSheetAt(0);// excel中至少会存在一个sheet页
					int rowNum = sheet.getPhysicalNumberOfRows();// 物理有效行数
					Object[] rowValues = null;// excel中一行树木信息
					List<Object[]> models = new ArrayList<Object[]>();// excel中全部树木信息
					if (rowNum > 1) {
						headRow = sheet.getRow(0);
						columns: for (int i = 1; i < rowNum; i++) {
							currentRow = sheet.getRow(i);
							if (currentRow != null) {
								rowValues = new Object[5];
								// int cellNum = currentRow.getLastCellNum();// 总单元格数目
								for (short j = 0; j < 5; j++) {
									try {
										currentCell = currentRow.getCell(j);
										Object obj = null;
										if (currentCell == null) {
											obj = "";
										} else {
											switch (currentCell.getCellType()) {
												case Cell.CELL_TYPE_BLANK:
													obj = "";
													break;
												case Cell.CELL_TYPE_STRING:
													obj = currentCell.getRichStringCellValue();
													break;
												case Cell.CELL_TYPE_NUMERIC:
													if (HSSFDateUtil.isCellDateFormatted(currentCell)) {
														double d = currentCell.getNumericCellValue();
														Date date = HSSFDateUtil.getJavaDate(d);
														obj = sdfDate.format(date);
													} else {
														NumberFormat nf = NumberFormat.getInstance();
														nf.setGroupingUsed(false);//true时的格式:1,234,567,890
														obj = nf.format(currentCell.getNumericCellValue());
													}
													break;
												default:
													obj = "";
													break;
											}
										}
										String cellVal = obj.toString();
										rowValues[j] = cellVal;
									} catch (IllegalStateException e) {
										rowValues = null;
										stringBuilder.append("第" + i + "行," + headRow.getCell(j).getRichStringCellValue() + "列输入了非法值,未导入成功!");
										continue columns;
									} catch (NullPointerException e) {
										rowValues = null;
										stringBuilder.append("第" + i + "行," + headRow.getCell(j).getRichStringCellValue() + "列输入了空值,未导入成功!");
										continue columns;
									} catch (Exception e) {
										rowValues = null;
										stringBuilder.append(e.getMessage());
										continue columns;
									}
								}
								if (rowValues != null) {
									models.add(rowValues);
								}
							}
						}
					} else if (rowNum <= 1 && rowNum > 0) {// 表示模版中只存在头部信息
						json.put("success", false);
						json.put("msg", "Excel表格中没有需要导入 的内容!");
						writeJSON(response, json.toString());
						return;
					} else if (rowNum <= 0) {// 表示这是一个空sheet页
						json.put("success", false);
						json.put("msg", "所导入文件格式不正确,请下载模板!");
						writeJSON(response, json.toString());
						return;
					}
					List<Forestry> list = objectToForestry(models);// Object-->Forestry
					for (int i = 0; i < list.size(); i++) {
						if (StringUtils.isBlank(list.get(i).getEpcId()) || StringUtils.isBlank(list.get(i).getName())) {
							stringBuilder.append("第" + (i + 1) + "行记录的必填项有空值,导入失败。");
							continue;
						}
						Forestry checkForestryEpcId = forestryService.getByProerties("epcId", list.get(i).getEpcId());
						if (checkForestryEpcId != null) {
							stringBuilder.append("第" + (i + 1) + "行记录的epc编码已存在,导入失败。");
							continue;
						}
						if (list.get(i).getForestryType() == null) {
							stringBuilder.append("第" + (i + 1) + "行记录的种类为空或不存在,导入失败。");
							continue;
						}
						forestryService.persist(list.get(i));
						count++;
					}

					json.put("success", true);
					json.put("msg", count + "条记录导入完成。" + stringBuilder.toString());
				} catch (Exception e) {
					e.printStackTrace();
					json.put("success", false);
					json.put("msg", requestContext.getMessage("g_operateFailure"));
					writeJSON(response, json.toString());
				}
			}
		} else {
			json.put("success", false);
			json.put("msg", requestContext.getMessage("g_uploadNotExists"));
		}
		writeJSON(response, json.toString());
	}

	private List<Forestry> objectToForestry(List<Object[]> models) {
		List<Forestry> forestryList = new ArrayList<Forestry>();
		Forestry forestry = null;
		for (int i = 0; i < models.size(); i++) {
			try {
				forestry = new Forestry();
				forestry.setEpcId(models.get(i)[0].toString());
				forestry.setName(models.get(i)[1].toString());
				if (StringUtils.isBlank(models.get(i)[2].toString())) {
					forestry.setPlantTime(null);
				} else {
					forestry.setPlantTime(sdfDate.parse(models.get(i)[2].toString()));
				}
				if (StringUtils.isBlank(models.get(i)[3].toString())) {
					forestry.setEntryTime(null);
				} else {
					forestry.setEntryTime(sdfDate.parse(models.get(i)[3].toString()));
				}
				ForestryType forestryType = forestryTypeService.getByProerties("name", models.get(i)[4].toString());
				forestry.setForestryType(forestryType);
				forestryList.add(forestry);
			} catch (Exception e) {
				e.printStackTrace();
				continue;
			}
		}
		return forestryList;
	}

	@RequestMapping("/downloadImportedFile")
	public ResponseEntity<byte[]> downloadImportedFile() throws IOException {
		HttpHeaders headers = new HttpHeaders();
		headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
		headers.setContentDispositionFormData("attachment", "template.xlsx");
		File filePath = new File(getClass().getClassLoader().getResource("/").getPath().replace("/WEB-INF/classes/", "/static/download/attachment/" + "template.xlsx"));
		return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(filePath), headers, HttpStatus.CREATED);
	}

	@RequestMapping(value = "/exportForestry", method = { RequestMethod.POST, RequestMethod.GET })
	public void exportForestry(HttpServletRequest request, HttpServletResponse response, @RequestParam("ids") Long[] ids) throws Exception {
		List<Object[]> forestryList = forestryService.queryExportedForestry(ids);
		//创建一个新的Excel
		HSSFWorkbook workBook = new HSSFWorkbook();
		//创建sheet页
		HSSFSheet sheet = workBook.createSheet("树木信息");
		//设置第一行为Header
		HSSFRow row = sheet.createRow(0);
		HSSFCell cell0 = row.createCell(0);
		HSSFCell cell1 = row.createCell(1);
		HSSFCell cell2 = row.createCell(2);
		HSSFCell cell3 = row.createCell(3);
		HSSFCell cell4 = row.createCell(4);
		cell0.setCellValue("epc编码");
		cell1.setCellValue("名称");
		cell2.setCellValue("种植时间");
		cell3.setCellValue("入园时间");
		cell4.setCellValue("所属种类名称");
		for (int i = 0; i < forestryList.size(); i++) {
			Object[] forestry = forestryList.get(i);
			row = sheet.createRow(i + 1);
			cell0 = row.createCell(0);
			cell1 = row.createCell(1);
			cell2 = row.createCell(2);
			cell3 = row.createCell(3);
			cell4 = row.createCell(4);
			cell0.setCellValue(forestry[0].toString());
			cell1.setCellValue(forestry[1].toString());
			cell2.setCellValue(forestry[2].toString());
			cell3.setCellValue(forestry[3].toString());
			cell4.setCellValue(forestry[4].toString());
			sheet.setColumnWidth(0, 6000);
			sheet.setColumnWidth(1, 6000);
			sheet.setColumnWidth(2, 6000);
			sheet.setColumnWidth(3, 6000);
			sheet.setColumnWidth(4, 6000);
		}
		response.reset();
		response.setContentType("application/msexcel;charset=UTF-8");
		try {
			response.addHeader("Content-Disposition", "attachment;filename=file.xls");
			OutputStream out = response.getOutputStream();
			workBook.write(out);
			out.flush();
			out.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}
最近下载更多
AAA孚盟软件售前刘美鲸  LV3 2021年10月20日
love8309287  LV4 2021年5月9日
有法说可能  LV4 2020年6月5日
ssy552  LV10 2020年5月7日
labelA  LV5 2020年2月12日
garin_lau  LV9 2019年7月29日
huasir2018  LV14 2019年7月22日
yyyyyyyyyyyyyyyyyyy  LV16 2019年7月4日
xk9587  LV16 2019年4月30日
17614099410  LV2 2019年4月26日
最近浏览更多
lyq6666666  LV5 2023年10月25日
45436683  LV8 2023年9月20日
what_the_fo  LV5 2023年4月6日
xxx520520  LV6 2023年1月31日
暂无贡献等级
adnawda 2022年11月27日
暂无贡献等级
cdjiangyang 2022年8月23日
暂无贡献等级
zhaoyangwfd  LV17 2022年6月24日
无名氏111  LV32 2022年1月30日
不会写代码的小姚  LV3 2021年11月20日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友