/**
 * 版权所有 ©2021 
 * 工程名：yearBooks
 * 文件名：NcjjZczService.java
 * 创建日期：2021年10月21日 上午9:18:50
 * 作者：duanxiaomingzi
 */
package com.lion.service;

import java.io.IOException;
import java.io.InputStream;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

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

import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;

import com.lion.dao.OrganizationTreeDao;
import com.lion.dao.XmyNmclDao;
import com.lion.entity.LoginUserInfo;
import com.lion.entity.XmyNmcl;
import com.lion.util.CheckUtil;
import com.lion.util.ExcelUtil;
import com.lion.util.TimeUtil;
import com.lion.util.Util;

import jodd.util.StringUtil;

/**
 * 类描述 年末存栏
 * @author duanxiaomingzi
 * @since 2021年10月21日
 */
@Service
public class XmyNmclService {
	@Resource
	private XmyNmclDao dao;
	@Resource
	private OrganizationTreeDao odao;
	public Map<String,Object> addOrUpdate(XmyNmcl z){
		if(z.getZs()==null){
			z.setZs(new BigDecimal(0.00));
		}
		if(z.getNs()==null){
			z.setNs(new BigDecimal(0.00));
		}
		if(z.getJqs()==null){
			z.setJqs(new BigDecimal(0.00));
		}
		z.setHj(z.getZs().add(z.getNs()).add(z.getJqs()));
		int count=dao.checkIfExistByYearAndOrg(z);
		if(count>0){
			return Util.responseMap("false", "当前年度的数据已存在，无需再次录入");
		}
		if(StringUtil.isNotEmpty(z.getId())){//修改
			count=dao.update(z);
		}else{
			count=dao.add(z);
		}
		return Util.responseMap(count);
	}
	public Map<String,Object> delete(int id){
		return Util.responseMap(dao.delete(id));
	}
	public Map<String,Object> getList(String year,String orgid,int page,int rows){
		int start=(page-1)*rows;
		return Util.responseMap("true", dao.getList(year, orgid,start,rows), dao.getListCount(year, orgid));
	}
	public Map<String,Object> exportData(String year,String orgid,HttpServletRequest req){
		List<Map<String,Object>> list=dao.getList(year, orgid, 0,100000);
		String[] title={"部门","年度","猪年末存栏量(万头)","牛年末存栏量(万头)","家禽年末存栏量(万头)","年末存栏总量(万头)"};
		String[] cellValue={"orgname","year","zs","ns","jqs","hj"};
		String path=ExcelUtil.exportExcel(title, cellValue, list, "年末存栏量", req);
		return Util.responseMap("true","操作成功", path);
	}
	@Transactional(rollbackFor=Exception.class)
	public Map<String,Object> importData(MultipartFile file,LoginUserInfo user){
		InputStream in = null;
			try {
				in = file.getInputStream();
			} catch (IOException e) {
				e.printStackTrace();
			}
			Workbook work = ExcelUtil.getWorkbook(in, file.getOriginalFilename());// 根据文件后缀，自适应上传文件的版本
			if (null == work) {// 判定格式不支持
				return Util.responseMap("false", "创建工作簿失败，excel表格格式不支持","");
			}
			Sheet sheet = work.getSheetAt(0);// 获取第一个工作表
			Row row = null;
			if(sheet.getLastRowNum()<1){// 解析excel不足两行，说明是空表格
				return Util.responseMap("false", "无数据可导入");
			}
			int cellNum=sheet.getRow(0).getLastCellNum();// 获取工作表中第3行最后一个单元格编号
			if(cellNum!=6){// 不等于12代表跟预设模板格式不符
				return Util.responseMap("false", "excel表格式错误，请下载模板");
			}
			
			List<XmyNmcl> list=new ArrayList<XmyNmcl>();
			// 遍历当前sheet中的所有行
			for(int j = 1; j < sheet.getLastRowNum() + 1; j++){// 从第2行开始遍历
				XmyNmcl z=new XmyNmcl();
				z.setCreateTime(TimeUtil.getNowTime());
				z.setCreateUser(user.getUserId());
				z.setOrgid(user.getOrgid());
				row = sheet.getRow(j); // 获取第j行
				// 遍历所有的列
				if(user.getOrgid().length()==2){//市级导入需要校验单位
					String orgname=row.getCell(0) == null ?"":row.getCell(0).toString().trim();
					List<Map<String,Object>> listorg=odao.getOrgdeptByName(orgname);
					if(listorg.size()>0){
						z.setOrgid(listorg.get(0).get("id").toString());
					}else{
						return Util.responseMap("false", "第"+(j+1)+"行,部门名称错误");
					}
				}
				String year = row.getCell(1) == null ?"":row.getCell(1).toString();
				if(StringUtil.isEmpty(year)){
					return Util.responseMap("false", "第"+(j+1)+"行,年度必填");
				}
				if(year.indexOf(".")>0){
					year=year.substring(0,year.indexOf("."));
				}
				if(year.length()!=4||!CheckUtil.checkStrIsNum(year)){
					return Util.responseMap("false", "第"+(j+1)+"行,年度请输入4位数字");
				}
				z.setYear(year);
				try{
					BigDecimal zs=row.getCell(2) == null ? new BigDecimal(0.0) : BigDecimal.valueOf(row.getCell(2).getNumericCellValue());
					BigDecimal ns=row.getCell(3) == null ? new BigDecimal(0.0) : BigDecimal.valueOf(row.getCell(3).getNumericCellValue());
					BigDecimal jqs=row.getCell(4) == null ? new BigDecimal(0.0) : BigDecimal.valueOf(row.getCell(4).getNumericCellValue());
					BigDecimal hj=row.getCell(5) == null ? new BigDecimal(0.0) : BigDecimal.valueOf(row.getCell(5).getNumericCellValue());
					z.setZs(zs);
					z.setNs(ns);
					z.setJqs(jqs);
					z.setHj(hj);
				}catch(Exception e){
					e.printStackTrace();
					return Util.responseMap("true", "第"+(j+1)+"行，金额请输入数字");
				}
				list.add(z);
			}
			int count=0;
			if(list.size()>0){
				for(XmyNmcl nz:list){
					count=dao.checkIfExistByYearAndOrg(nz);
					if(count>0){
						return Util.responseMap("false", nz.getYear()+"年度的数据已存在，无需再次录入");
					}
					dao.add(nz);
				}
			}
			return Util.responseMap(1);
	}
}
