package com.zcloud.controller.inspectAnnually;

import com.zcloud.controller.base.BaseController;
import com.zcloud.entity.Page;
import com.zcloud.entity.PageData;
import com.zcloud.logs.LogAnno;
import com.zcloud.service.freighttrailer.FreightTrailerService;
import com.zcloud.service.inspectAnnually.InspectAnnuallyService;
import com.zcloud.service.operatingvehicles.OperatingVehiclesService;
import com.zcloud.service.system.ImgFilesService;
import com.zcloud.util.DateUtil;
import com.zcloud.util.Jurisdiction;
import com.zcloud.util.ObjectExcelView;
import com.zcloud.util.Tools;
import org.apache.commons.lang.StringUtils;
import org.apache.shiro.util.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

import java.util.*;
import java.util.stream.Collectors;

/**
 * 年检管理
 */
@Controller
@RequestMapping("/inspectAnnually")
public class InspectAnnuallyController extends BaseController {

    @Autowired
    private InspectAnnuallyService inspectAnnuallyService;
    @Autowired
    private ImgFilesService imgfilesService;

    @Autowired
    private OperatingVehiclesService operatingVehiclesService;

    @Autowired
    private FreightTrailerService freightTrailerService;


    /**
     * 新增
     *
     * @param
     * @throws Exception
     */
    @RequestMapping(value = "/add")
    // @RequiresPermissions( value = {"question:add" , "courseware:add"}, logical = Logical.OR)
    @ResponseBody
    @LogAnno(menuType = "机务档案", menuServer = "年检管理", instructionsOperate = "年检管理", instructionsType = "新增")
    public Object add() throws Exception {
        Map<String, Object> map = new HashMap<String, Object>();
        String errInfo = "success";
        PageData pd = new PageData();
        pd = this.getPageData();
        pd.put("INSPECTANNUALLY_ID", this.get32UUID());    //主键
        pd.put("CREATOR", Jurisdiction.getUSER_ID());    //添加人id
        pd.put("CREATORNAME", Jurisdiction.getName());    //添加人
        pd.put("CREATTIME", DateUtil.date2Str(new Date()));    //添加时间
        pd.put("ISDELETE", "0");    //是否删除(0:有效 1:删除)
        pd.put("CORPINFO_ID", Jurisdiction.getCORPINFO_ID());    //企业ID
        pd.put("ARCHIVES_TYPE", "0");    //档案状态
        pd.put("VEHICLE", pd.get("PLATE_NUMBER"));
        inspectAnnuallyService.save(pd);
        map.put("pd", pd);
        map.put("result", errInfo);
        return map;
    }

    /**
     * 删除
     *
     * @param
     * @throws Exception
     */
    @RequestMapping(value = "/delete")
    // @RequiresPermissions( value = {"question:del" , "courseware:del"}, logical = Logical.OR)
    @ResponseBody
    @LogAnno(menuType = "机务档案", menuServer = "年检管理", instructionsOperate = "年检管理", instructionsType = "删除")
    public Object delete() throws Exception {
        Map<String, String> map = new HashMap<String, String>();
        String errInfo = "success";
        PageData pd = new PageData();
        pd = this.getPageData();
        pd.put("DELETEOR", Jurisdiction.getUSER_ID());    //删除人id
        pd.put("DELETEORNAME", Jurisdiction.getName());    //删除人
        pd.put("DELETTIME", DateUtil.date2Str(new Date()));    //删除时间
        inspectAnnuallyService.delete(pd);
        map.put("result", errInfo);                //返回结果
        return map;
    }

    /**
     * 修改
     *
     * @param
     * @throws Exception
     */
    @RequestMapping(value = "/edit")
    // @RequiresPermissions( value = {"question:edit" , "courseware:edit"}, logical = Logical.OR)
    @ResponseBody
    @LogAnno(menuType = "机务档案", menuServer = "年检管理", instructionsOperate = "年检管理", instructionsType = "修改")
    public Object edit() throws Exception {
        Map<String, Object> map = new HashMap<String, Object>();
        String errInfo = "success";
        PageData pd = new PageData();
        pd = this.getPageData();
        pd.put("OPERATOR", Jurisdiction.getUSER_ID());    //修改人id
        pd.put("OPERATORNAME", Jurisdiction.getName());    //修改人
        pd.put("OPERATTIME", DateUtil.date2Str(new Date()));    //修改时间
        inspectAnnuallyService.edit(pd);
        map.put("pd", pd);
        map.put("result", errInfo);
        return map;
    }

    /**
     * 修改
     *
     * @param
     * @throws Exception
     */
    @RequestMapping(value = "/edit2")
    // @RequiresPermissions( value = {"question:edit" , "courseware:edit"}, logical = Logical.OR)
    @ResponseBody
    @LogAnno(menuType = "机务档案", menuServer = "年检管理", instructionsOperate = "年检管理", instructionsType = "修改")
    public Object edit2() throws Exception {
        Map<String, Object> map = new HashMap<String, Object>();
        String errInfo = "success";
        PageData pd = new PageData();
        pd = this.getPageData();
        pd.put("OPERATOR", Jurisdiction.getUSER_ID());    //修改人id
        pd.put("OPERATORNAME", Jurisdiction.getName());    //修改人
        pd.put("OPERATTIME", DateUtil.date2Str(new Date()));    //修改时间
        inspectAnnuallyService.edit2(pd);
        map.put("pd", pd);
        map.put("result", errInfo);
        return map;
    }

    /**
     * 列表
     *
     * @param page
     * @throws Exception
     */
    @RequestMapping(value = "/list")
    // @RequiresPermissions( value = {"question:list" , "courseware:list"}, logical = Logical.OR)
    @ResponseBody
    @LogAnno(menuType = "机务档案", menuServer = "年检管理", instructionsOperate = "年检管理", instructionsType = "列表")
    public Object list(Page page) throws Exception {
        Map<String, Object> map = new HashMap<String, Object>();
        String errInfo = "success";
        PageData pd = new PageData();
        pd = this.getPageData();
        pd.put("CORPINFO_ID", Jurisdiction.getCORPINFO_ID());    //企业ID
        page.setPd(pd);
        List<PageData> varList = inspectAnnuallyService.list(page);    //列出年检列表
        varList.forEach(inspectAnnually -> {
            boolean isScrapFlag = varList.stream().anyMatch(data -> "1".equals(inspectAnnually.get("OPEAR_ISSCRAP")) || "1".equals(inspectAnnually.get("FREIGHT_ISSCRAP")));
            boolean isAssignedFlag = varList.stream().anyMatch(data -> "1".equals(inspectAnnually.get("OPEAR_ISASSIGNED")) || "1".equals(inspectAnnually.get("FREIGHT_ISASSIGNED")));
            if (isScrapFlag) {
                inspectAnnually.put("ARCHIVES_TYPE", "2");
            } else if (isAssignedFlag) {
                inspectAnnually.put("ARCHIVES_TYPE", "1");
            }
        });
        map.put("varList", varList);
        map.put("page", page);
        map.put("result", errInfo);
        return map;
    }

    /**
     * 去修改页面获取数据
     *
     * @param
     * @throws Exception
     */
    @RequestMapping(value = "/goEdit")
    // @RequiresPermissions( value = {"question:edit" , "courseware:edit"}, logical = Logical.OR)
    @ResponseBody
    @LogAnno(menuType = "机务档案", menuServer = "年检管理", instructionsOperate = "年检管理", instructionsType = "去修改页面获取数据")
    public Object goEdit() throws Exception {
        Map<String, Object> map = new HashMap<String, Object>();
        String errInfo = "success";
        PageData pd = new PageData();
        pd = this.getPageData();
        pd = inspectAnnuallyService.findById(pd);    //根据ID读取

        if ("1".equals(pd.getString("VEHICLE_MODEL"))) {
            PageData opearting = new PageData();
            opearting.put("OPERATING_ID", pd.get("VEHICLE"));
            opearting.put("CORPINFO_ID", pd.get("CORPINFO_ID"));
            PageData pageData = operatingVehiclesService.findById(opearting);
            pd.put("VEHICLE_BRAND", pageData.get("VEHICLE_BRAND"));
            pd.put("VEHICLE_TYPE", pageData.get("VEHICLE_MODEL"));
            pd.put("PLATE_NUMBER", pageData.get("PLATE_NUMBER"));
        } else {
            PageData freight = new PageData();
            freight.put("FREIGHTTRAILER_ID", pd.get("VEHICLE"));
            freight.put("CORPINFO_ID", pd.get("CORPINFO_ID"));
            PageData pageData = freightTrailerService.findById(freight);
            pd.put("VEHICLE_BRAND", pageData.get("TRAILER_BRAND"));
            pd.put("VEHICLE_TYPE", pageData.get("TRAILER_MODEL"));
        }

        pd.put("FOREIGN_KEY", pd.getString("INSPECTANNUALLY_ID"));
        pd.put("TYPE", 124);
        List<PageData> inspectinfoImgs = imgfilesService.listAll(pd);//年检资料图片

        map.put("pd", pd);
        map.put("inspectinfoImgs", inspectinfoImgs);
        map.put("result", errInfo);
        return map;
    }


    @RequestMapping(value = "/annuallyList")
    // @RequiresPermissions( value = {"question:list" , "courseware:list"}, logical = Logical.OR)
    @ResponseBody
    @LogAnno(menuType = "机务档案", menuServer = "年检管理", instructionsOperate = "年检管理", instructionsType = "列表")
    public Object annuallyList(Page page) throws Exception {
        Map<String, Object> map = new HashMap<String, Object>();
        String errInfo = "success";
        PageData pd = new PageData();
        pd = this.getPageData();
        pd.put("CORPINFO_ID", Jurisdiction.getCORPINFO_ID());    //企业ID
        page.setPd(pd);
        List<PageData> varList = inspectAnnuallyService.annuallyList(page);    //列出Question列表
        map.put("varList", varList);
        map.put("page", page);
        map.put("result", errInfo);
        return map;
    }


    /**
     * 导出到excel
     *
     * @param
     * @throws Exception
     */
    @RequestMapping(value = "/excel")
//	// @RequiresPermissions("toExcel")
    public ModelAndView exportExcel() throws Exception {
        ModelAndView mv = new ModelAndView();
        PageData pd = new PageData();
        pd = this.getPageData();
        String DATA_IDS = pd.getString("DATA_IDS");
        if (Tools.notEmpty(DATA_IDS)) {
            String[] ArrayDATA_IDS = DATA_IDS.split(",");
            pd.put("ArrayDATA_IDS", ArrayDATA_IDS);
        }
        Map<String, Object> dataMap = new HashMap<String, Object>();
        List<String> titles = new ArrayList<String>();
        titles.add("自编号");    //1
        titles.add("年检车辆");    //2
        titles.add("车辆品牌");    //3
        titles.add("年检车型");    //4
        titles.add("车主业户");    //5
        titles.add("联系电话");    //6
        titles.add("登记人");    //7
        titles.add("办理日期");    //8
        titles.add("年检周期");    //9
        titles.add("到期日期");    //10
        titles.add("年检费用");    //11
        titles.add("实收费用");    //12
        titles.add("年检地址");    //13
        titles.add("提醒天数");    //14
        titles.add("提醒日期");    //15
        titles.add("年检资料");    //16
        titles.add("备注");    //17
        dataMap.put("titles", titles);
        List<PageData> varOList = inspectAnnuallyService.listOut(pd);
        List<PageData> varList = new ArrayList<PageData>();
        for (int i = 0; i < varOList.size(); i++) {
            PageData vpd = new PageData();
            vpd.put("var1", varOList.get(i).getString("NUM"));//1
            vpd.put("var2", varOList.get(i).getString("VEHICLE"));//2
            vpd.put("var3", varOList.get(i).getString("VEHICLE_BRAND"));//3
            vpd.put("var4", varOList.get(i).getString("VEHICLE_MODEL"));//4
            vpd.put("var5", varOList.get(i).getString("CAR_OWNERS"));//5
            vpd.put("var6", varOList.get(i).getString("TELEPHONE"));//6
            vpd.put("var7", varOList.get(i).getString("REGISTRANT"));//7
            vpd.put("var8", varOList.get(i).getString("PROCESSING_DATE"));//8
            vpd.put("var9", varOList.get(i).getString("ANNUAL_INSPECTION_CYCLE"));//9
            vpd.put("var10", varOList.get(i).getString("DUE_DATE"));//10
            vpd.put("var11", varOList.get(i).getString("INSPECTFEES"));//11
            vpd.put("var12", varOList.get(i).getString("ACTUAL_COLLECTION"));//12
            vpd.put("var13", varOList.get(i).getString("ADDRESS"));//13
            vpd.put("var14", varOList.get(i).getString("REMINDER_DAYS"));//14
            vpd.put("var15", varOList.get(i).getString("REMINDER_DATE"));//15
            vpd.put("var16", varOList.get(i).getString("INSPECTINFO"));//16
            vpd.put("var17", varOList.get(i).getString("NOTES"));//17
            varList.add(vpd);
        }
        dataMap.put("varList", varList);
        ObjectExcelView erv = new ObjectExcelView();
        mv = new ModelAndView(erv, dataMap);
        return mv;
    }


}