package com.zcloud.service.bus.impl;

import com.zcloud.entity.Page;
import com.zcloud.entity.PageData;
import com.zcloud.entity.system.Department;
import com.zcloud.entity.system.HiddenRegion;
import com.zcloud.mapper.datasource.bus.HiddenRegionMapper;
import com.zcloud.service.bus.HiddenRegionService;
import com.zcloud.util.DateUtil;
import com.zcloud.util.Jurisdiction;
import com.zcloud.util.UuidUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.Date;
import java.util.List;

/**
 * 说明：隐患区域维护管理
 * 作者：yangming
 * 时间：2022-03-24
 * 官网：www.zcloudchina.com
 */
@Service
@Transactional //开启事物
public class HiddenRegionServiceImpl  implements HiddenRegionService {

    @Autowired
    private HiddenRegionMapper hiddenRegionMapper;

    @Override
    public void save(PageData pd) throws Exception {
        hiddenRegionMapper.save(pd);
    }

    @Override
    public List<Department> hiddenRegionByParentId(String parentId) throws Exception {
        return hiddenRegionMapper.hiddenRegionByParentId(parentId);
    }

    @Override
    public void edit(PageData pd) throws Exception {
        hiddenRegionMapper.edit(pd);
    }

    @Override
    public List<PageData> list(Page page) throws Exception {
        return hiddenRegionMapper.listPage(page);
    }

    @Override
    public List<PageData> getPaging(Page page) throws Exception {
        return hiddenRegionMapper.getPaginglistPage(page);
    }
    @Override
    public List<PageData> getBack(Page page) throws Exception {
        return hiddenRegionMapper.getBacklistPage(page);
    }
    @Override
    public List<PageData> getListById(PageData pd) {
        return hiddenRegionMapper.getListById(pd);
    }

    @Override
    public List<PageData> getListSubset(PageData pd) {
        return hiddenRegionMapper.getListSubset(pd);
    }

//    @Override
//    public void delete(PageData pd) {
//        hiddenRegionMapper.delete(pd);
//    }

    /**删除
     * @param pd
     * @throws Exception
     */
    public void delete(PageData pd)throws Exception{
        hiddenRegionMapper.delete(pd);
    }
    @Override
    public List<HiddenRegion> getListTree() {
        return hiddenRegionMapper.getListTree();
    }

    /**
     * 获取所有数据并填充每条数据的子级列表(递归处理)
     * @param
     * @return
     * @throws Exception
     */
    public List<HiddenRegion> listAllDepartment(String parentId,String url) throws Exception {
        List<HiddenRegion> hiddenRegionList = this.listhiddenRegionByParentId(parentId);
        for(HiddenRegion depar : hiddenRegionList){

        }
        return hiddenRegionList;
    }
    public List<HiddenRegion> listhiddenRegionByParentId(String parentId) throws Exception {
        return (List<HiddenRegion>)hiddenRegionMapper.listHiddenRegionByParentId(parentId);
    }

    /**
     * 获取所有菜单并填充每个菜单的子菜单列表(菜单管理)(递归处理)
     * @param MENU_ID
     * @return
     * @throws Exception
     */
    public List<HiddenRegion> listAll(String MENU_ID) throws Exception {
        List<HiddenRegion> menuList = this.listHiddenRegionByParentId(MENU_ID);
        for(HiddenRegion hiddenRegion : menuList){
            hiddenRegion.setHIDDENREGION_URL("menu_edit.html?MENU_ID="+hiddenRegion.getHIDDENREGION_URL());
            hiddenRegion.setSubhiddenRegion(this.listAll(hiddenRegion.getHIDDENREGION_ID()));
            //hiddenRegion.setTarget("treeFrame");
        }
        return menuList;
    }

    /**
     * 获取所有菜单并填充每个菜单的子菜单列表(菜单管理)(递归处理)
     * @param MENU_ID
     * @return
     * @throws Exception
     */
    public List<HiddenRegion> listAll(String MENU_ID,String CORPINFO_ID) throws Exception {
        List<HiddenRegion> menuList = this.listHiddenRegionByParentId(MENU_ID,CORPINFO_ID);
        for(HiddenRegion hiddenRegion : menuList){
            hiddenRegion.setHIDDENREGION_URL("menu_edit.html?MENU_ID="+hiddenRegion.getHIDDENREGION_URL());
            hiddenRegion.setSubhiddenRegion(this.listAll(hiddenRegion.getHIDDENREGION_ID(),CORPINFO_ID));
            //hiddenRegion.setTarget("treeFrame");
        }
        return menuList;
    }

    /**
     * 通过ID获取其子一级菜单
     * @param parentId
     * @return
     * @throws Exception
     */
    @Cacheable(key="'menu-'+#parentId",value="menucache")
    public List<HiddenRegion> listHiddenRegionByParentId(String parentId) throws Exception {
        return hiddenRegionMapper.listHiddenRegionByParentId(parentId);
    }

    /**
     * 通过ID获取其子一级菜单
     * @param parentId
     * @return
     * @throws Exception
     */
    @Cacheable(key="'menu-'+#parentId",value="menucache")
    public List<HiddenRegion> listHiddenRegionByParentId(String parentId,String CORPINFO_ID) throws Exception {
        return hiddenRegionMapper.listHiddenRegionByParentId(parentId,CORPINFO_ID);
    }

    @Override
    public PageData saveHidden(String regionName) throws Exception {

        PageData pd = new PageData();
        pd.put("PARENT_ID","0");
        pd.put("HIDDENREGION",regionName);
        pd.put("HIDDENREGION_ID", UuidUtil.get32UUID());
        pd.put("ISDELETE","0");
        pd.put("CREATOR", Jurisdiction.getUsername());//添加人
        pd.put("CREATTIME", DateUtil.date2Str(new Date()));//添加时间
        pd.put("OPERATOR", Jurisdiction.getUsername());	//修改人
        pd.put("OPERATTIME", DateUtil.date2Str(new Date()));	//修改时间
        pd.put("SORTINDEX",hiddenRegionMapper.getHiddenRegionCountByParentId(pd));	//排序
        pd.put("PERSON_CHARGE",Jurisdiction.getUsername());	//排序
        pd.put("CORPINFO_ID",Jurisdiction.getCORPINFO_ID());
        List<PageData> hiddenRegionList = hiddenRegionMapper.hiddenRegionByName(pd); // 查看最顶级是否有输入的qi
        if(hiddenRegionList.size() == 0){
            hiddenRegionMapper.save(pd);
        }else{
            pd = hiddenRegionList.get(0);
        }
        return pd;
    }

    @Override
    public List<PageData> listRegionByHidden(PageData pd) throws Exception {
        return hiddenRegionMapper.listRegionByHidden(pd);
    }

    public PageData findById(String corpInfoId ,String ID)throws Exception{
        PageData pd = new PageData();
        pd.put("CORPINFO_ID",corpInfoId);
        pd.put("HIDDENREGION_ID",ID);
        return hiddenRegionMapper.findById(pd);
    }
    /**通过id获取数据
     * @param pd
     * @throws Exception
     */
    public PageData findBypId(PageData pd)throws Exception{
        return (PageData)hiddenRegionMapper.findBypId(pd);
    }
}
