package com.cku.oa.tongji.web;

import com.cku.oa.tongji.dao.QueryMemberDao;
import com.cku.oa.tongji.entity.Tongji;
import com.cku.oa.tongjis.dao.CaiwuDao;
import com.cku.oa.tongjis.entity.Caiwu;
import com.thinkgem.jeesite.common.utils.StringUtils;
import com.thinkgem.jeesite.common.web.BaseController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.*;

@Controller
@RequestMapping(value = "${adminPath}/sys/tongji")
public class TongJiController extends BaseController {
	@Autowired
	private QueryMemberDao queryMemberDao;
	@Autowired
	private CaiwuDao caiwuDao;
	@RequestMapping(value = {"get", ""})
	public String list(Tongji tongji, HttpServletRequest request, HttpServletResponse response, Model model) {
		//
		Caiwu c=new Caiwu();
		Map<String,List<Tongji>> mapz= new LinkedHashMap<>();
		Map<String,Tongji> map = new HashMap();
		Map<String,Double> mapYiji = new HashMap();
		List<Caiwu> list=new ArrayList<>();
		if(StringUtils.isBlank(tongji.getStartTime())){
            tongji.setStartTime(fisrtDay());
            tongji.setEndTime(lastDay());
        }
		if(null!=tongji.getType()&&!tongji.getType().equals("0")){
            c.setType(tongji.getType());
        }
		if(null==tongji.getSubject()||tongji.getSubject().equals("1")||tongji.getSubject().equals("2")){
            //查询要统计的东西
            list=caiwuDao.findList(c);
            String yiji="1";
            List<Tongji>tongjilist1 =null;
            for(Caiwu a:list){
                //yiji=a.getYiji();
                Map b=queryMemberDao.getSum(a.getSijiId(),tongji.getStartTime(),tongji.getEndTime());
                map.put(a.getErji(),addErji(a,map,b));
                mapYiji.put(a.getYiji(),addYiji(a,mapYiji,b));
            }
            List<Caiwu> list1=caiwuDao.findByYiji();
            for(Caiwu a:list1){
                if(!yiji.equals(a.getYiji())){
                    if(!yiji.equals("1")){
                        mapz.put(yiji,tongjilist1);
                    }
                    tongjilist1=new ArrayList<Tongji>();
                    yiji=a.getYiji();
                }
                Tongji bb=new Tongji();
                bb.setName2(a.getErji());
                if(null!=map.get(a.getErji())){
                    bb.setMoney(map.get(a.getErji()).getMoney());
                    bb.setCount(map.get(a.getErji()).getCount());
                }
                tongjilist1.add(bb);
            }
            mapz.put(yiji,tongjilist1);
            model.addAttribute("type", "2");
        }else if(tongji.getSubject().equals("3")){
		    if(null!=tongji.getName()){
		        c.setErji(tongji.getName());
            }
            //查询要统计的东西
            list=caiwuDao.findList(c);
            String erji="1";
            List<Tongji>tongjilist1 =null;
            for(Caiwu a:list){
                //erji=a.getErji();
                Map b=queryMemberDao.getSum(a.getSijiId(),tongji.getStartTime(),tongji.getEndTime());
                map.put(a.getSanji(),addSanji(a,map,b));
                mapYiji.put(a.getErji(),addErjis(a,mapYiji,b));
            }
            List<Caiwu> list1=caiwuDao.findByerji(tongji.getName());
            for(Caiwu a:list1){
                if(!erji.equals(a.getErji())){
                    if(!erji.equals("1")){
                        mapz.put(erji,tongjilist1);
                    }
                    tongjilist1=new ArrayList<Tongji>();
                    erji=a.getErji();
                }
                Tongji bb=new Tongji();
                bb.setName2(a.getSanji());
                if(null!=map.get(a.getSanji())){
                    bb.setMoney(map.get(a.getSanji()).getMoney());
                    bb.setCount(map.get(a.getSanji()).getCount());
                }
                tongjilist1.add(bb);
            }
            mapz.put(erji,tongjilist1);
            model.addAttribute("type", "2");
        }else {
            if(null!=tongji.getName()){
                c.setSanji(tongji.getName());
            }
            //查询要统计的东西
            list=caiwuDao.findList(c);
            String sanji="1";
            List<Tongji>tongjilist1 =null;
            for(Caiwu a:list){
                Map b=queryMemberDao.getSum(a.getSijiId(),tongji.getStartTime(),tongji.getEndTime());
                map.put(a.getSiji(),addSiji(a,map,b));
                mapYiji.put(a.getSanji(),addSijis(a,mapYiji,b));
            }
            List<Caiwu> list1=caiwuDao.findBySanji(tongji.getName());
            for(Caiwu a:list1){
                if(!sanji.equals(a.getSanji())){
                    if(!sanji.equals("1")){
                        mapz.put(sanji,tongjilist1);
                    }
                    tongjilist1=new ArrayList<Tongji>();
                    sanji=a.getSanji();
                }
                Tongji bb=new Tongji();
                bb.setName2(a.getSiji());
                if(null!=map.get(a.getSiji())){
                    bb.setMoney(map.get(a.getSiji()).getMoney());
                    bb.setCount(map.get(a.getSiji()).getCount());
                    bb.setSijicharge(a.getSijicharge());
                }
                tongjilist1.add(bb);
                model.addAttribute("type", "4");
            }
            mapz.put(sanji,tongjilist1);

        }


        model.addAttribute("mapz", mapz);
		model.addAttribute("msgs", map);
		model.addAttribute("tongji", tongji);
		model.addAttribute("mapYiji", mapYiji);
		model.addAttribute("firstDay", fisrtDay());
		model.addAttribute("lastDay", lastDay());
		model.addAttribute("firstYear", getCurrYearFirst());
		return "oa/tongji/tongji1";
	}
	public Tongji addErji(Caiwu c,Map<String,Tongji> a, Map b){
		Tongji t=new Tongji();
		t.setName(c.getErji());
		//找到
		Tongji tong=a.get(c.getErji());
		if(tong!=null){
			//相加计算
			int oldCount=Integer.valueOf(tong.getCount());
			int newCount=Integer.valueOf(b.get("counts").toString ());
			t.setCount(String.valueOf(oldCount+newCount));
			double oldmoney=Double.valueOf(tong.getMoney());
			double newMoney=Double.valueOf(b.get("summ").toString());
			t.setMoney(String.valueOf(oldmoney+newMoney));
		}else{
			t.setCount(b.get("counts").toString());
			t.setMoney(b.get("summ").toString());
		}
		return  t;
	}
    public Tongji addSanji(Caiwu c,Map<String,Tongji> a, Map b){
        Tongji t=new Tongji();
        t.setName(c.getSanji());
        //找到
        Tongji tong=a.get(c.getSanji());
        if(tong!=null){
            //相加计算
            int oldCount=Integer.valueOf(tong.getCount());
            int newCount=Integer.valueOf(b.get("counts").toString ());
            t.setCount(String.valueOf(oldCount+newCount));
            double oldmoney=Double.valueOf(tong.getMoney());
            double newMoney=Double.valueOf(b.get("summ").toString());
            t.setMoney(String.valueOf(oldmoney+newMoney));
        }else{
            t.setCount(b.get("counts").toString());
            t.setMoney(b.get("summ").toString());
        }
        return  t;
    }
    public Tongji addSiji(Caiwu c,Map<String,Tongji> a, Map b){
        Tongji t=new Tongji();
        t.setName(c.getSiji());
        t.setCount(b.get("counts").toString());
        t.setMoney(b.get("summ").toString());
        return  t;
    }

	public  double addYiji(Caiwu c,Map<String,Double> a,Map b){
		Double money=a.get(c.getYiji());
		if(null!=money){
			return Double.valueOf(b.get("summ").toString())+money;
		}else{
			return Double.valueOf(b.get("summ").toString());
		}
	}
    public  double addErjis(Caiwu c,Map<String,Double> a,Map b){
        Double money=a.get(c.getErji());
        if(null!=money){
            return Double.valueOf(b.get("summ").toString())+money;
        }else{
            return Double.valueOf(b.get("summ").toString());
        }
    }
    public  double addSijis(Caiwu c,Map<String,Double> a,Map b){
        Double money=a.get(c.getSanji());
        if(null!=money){
            return Double.valueOf(b.get("summ").toString())+money;
        }else{
            return Double.valueOf(b.get("summ").toString());
        }
    }


	/**
	 * 公司
	 * @param m
	 * @param startTime
	 * @param endTime
	 * @return
	 *//*
	public Map huiyuan(Map m,String startTime,String endTime){
		//基础会员年度登记费
		double huiyuanjichudengjifei=queryMemberDao.getSum("1",startTime,endTime);
		//专业会员初次注册费
		double zhuanyehuiyuan=queryMemberDao.getSum("2",startTime,endTime);
		//专业会员年度登记费
		double zhuanyehuiyuannianfei=queryMemberDao.getSum("3",startTime,endTime);
		m.put("huiyuanjichudengjifei",huiyuanjichudengjifei);
		m.put("zhuanyehuiyuan",zhuanyehuiyuan);
		m.put("zhuanyehuiyuannianfei",zhuanyehuiyuannianfei);
		return  m;
	}

	*//**
	 * 年度犬舍 公司
	 * @return
	 *//*
	public Map nianduquanshe(Map m,String startTime,String endTime){

		return  m;
	}*/

	public static String fisrtDay(){
		SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
		//获得实体类
		Calendar ca = Calendar.getInstance();
		//设置最后一天
		ca.set(Calendar.DAY_OF_MONTH, ca.getActualMinimum(Calendar.DAY_OF_MONTH));
		//最后一天格式化
		String lastDay = format.format(ca.getTime());
		return lastDay;
	}
	public static String lastDay(){
		SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
		//获得实体类
		Calendar ca = Calendar.getInstance();
		//设置最后一天
		ca.set(Calendar.DAY_OF_MONTH, ca.getActualMaximum(Calendar.DAY_OF_MONTH));
		//最后一天格式化
		String lastDay = format.format(ca.getTime());
		return lastDay;
	}

	public static String getCurrYearFirst(){
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		Calendar currCal=Calendar.getInstance();
		int currentYear = currCal.get(Calendar.YEAR);
		return sdf.format(getYearFirst(currentYear));
	}
	/**
	 * 获取某年第一天日期
	 * @param year 年份
	 * @return Date
	 */
	public static Date getYearFirst(int year){
		Calendar calendar = Calendar.getInstance();
		calendar.clear();
		calendar.set(Calendar.YEAR, year);
		Date currYearFirst = calendar.getTime();
		return currYearFirst;
	}
}