package cn.com.countrygarden.bi.main.service.wcx.impl;

import cn.com.countrygarden.bi.main.core.Response;
import cn.com.countrygarden.bi.main.core.Result;
import cn.com.countrygarden.bi.main.dao.wcx.WcxRoleMapper;
import cn.com.countrygarden.bi.main.dao.wcx.WcxUserDtoMapper;
import cn.com.countrygarden.bi.main.dto.wcx.BdTypeDo;
import cn.com.countrygarden.bi.main.dto.wcx.WcxRegionProjectDto;
import cn.com.countrygarden.bi.main.exception.ServiceException;
import cn.com.countrygarden.bi.main.model.AccessToken;
import cn.com.countrygarden.bi.main.model.PageData;
import cn.com.countrygarden.bi.main.model.bd_psndoc;
import cn.com.countrygarden.bi.main.model.wcx.WcxRole;
import cn.com.countrygarden.bi.main.model.wcx.WcxUserAdmDto;
import cn.com.countrygarden.bi.main.service.wcx.WcxUserDtoService;
import cn.com.countrygarden.bi.main.util.wcx.CommonUtil;
import cn.com.countrygarden.bi.main.util.wcx.PageUtil;
import com.github.pagehelper.PageRowBounds;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

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

@Transactional(rollbackFor =Exception.class)
@Service
public class WcxUserDtoServiceImpl implements WcxUserDtoService {

    @Autowired
    private WcxUserDtoMapper wcxUserDtoMapper;

    @Autowired
    private WcxRoleMapper wcxRoleMapper;

    @Override
    public PageData queryPageList(WcxUserAdmDto wcxUserAdmDto,AccessToken accessToken) {
        int pageOffset = PageUtil.getPageOffset(wcxUserAdmDto.getPageIndex(), wcxUserAdmDto.getPageSize());
        wcxUserAdmDto.setPageOffset(pageOffset);

        List<WcxUserAdmDto> data = wcxUserDtoMapper.selectPageData(wcxUserAdmDto);

        Long total = wcxUserDtoMapper.selectPageCount(wcxUserAdmDto);
        PageRowBounds pageRowBounds = new PageRowBounds(wcxUserAdmDto.getPageIndex(), wcxUserAdmDto.getPageSize());
        pageRowBounds.setTotal(total);
        pageRowBounds.setCount(true);

        PageData pageData = new PageData(data, pageRowBounds);
        return pageData;
    }

    @Override
    public List<BdTypeDo> findRoleregionfour(AccessToken accessToken) {
        List<BdTypeDo> list=wcxUserDtoMapper.findRoleregionfour();
        return list;
    }

    @Override
    public Object getPojDate(AccessToken accessToken, String organCode) {
        List<BdTypeDo> list=wcxUserDtoMapper.getPojDate(organCode);
        return list;
    }

    @Override
    public void allpoj() {
        try{
            List<WcxUserAdmDto> listUser= wcxUserDtoMapper.selectList();
            List<WcxUserAdmDto> addlistUser= new ArrayList<>();
            for (int i = 0; i <listUser.size() ; i++) {
                WcxUserAdmDto wuser=new WcxUserAdmDto();
                List<bd_psndoc> psndocsList= wcxUserDtoMapper.selectByPersonName(listUser.get(i).getEmployeeName(),listUser.get(i).getEmployeeCardId());
                if(CollectionUtils.isNotEmpty(psndocsList)){
                    wuser.setUserCode(psndocsList.get(0).getCODE());
                }


                WcxRegionProjectDto conditionRegionProject = new WcxRegionProjectDto();
                conditionRegionProject.setEmployeeCardId(listUser.get(i).getEmployeeCardId());
                WcxRegionProjectDto wcxRegionProjectDto = wcxUserDtoMapper.selectOne(conditionRegionProject);

                if (wcxRegionProjectDto != null) {
                   // 判断是否有erp项目
              /*      if (!StringUtils.hasText(wcxRegionProjectDto.getProjectName())) {
                        // 没有
                        BdTypeDo bdTypeDo= wcxUserDtoMapper.findPropertyProjectNameByEmployeeCardId(listUser.get(i).getEmployeeCardId());
                        wuser.setCommCode(bdTypeDo.getFive());
                        wuser.setCommName(bdTypeDo.getPkOrg());
                    } else {
                        // 有
                        wuser.setCommCode(wcxRegionProjectDto.getCommCode());
                        wuser.setCommName(wcxRegionProjectDto.getProjectName());
                    }*/
                    wuser.setCommCode(wcxRegionProjectDto.getCommCode());
                    wuser.setCommName(wcxRegionProjectDto.getProjectName());
                    wuser.setOrgCode(wcxRegionProjectDto.getOrgCode());
                    wuser.setOrgName(wcxRegionProjectDto.getRegionName());
                    wuser.setEmployeeCardId(listUser.get(i).getEmployeeCardId());
                    wcxUserDtoMapper.updateOrg(wuser);
                }
            }
        }catch (Exception e){
            e.printStackTrace();
        }
    }

    @Override
    public Result addUser(WcxUserAdmDto wcxUserAdmDto, AccessToken accessToken) {

        List<WcxUserAdmDto> wcxUserAdmDtoList=wcxUserDtoMapper.selectUserOne(wcxUserAdmDto.getEmployeeName(),wcxUserAdmDto.getEmployeeCardId());
        if(CollectionUtils.isNotEmpty(wcxUserAdmDtoList)){
            throw new ServiceException("此用户已添加，请勿重复添加！");
        }

        List<bd_psndoc> psndocsList= wcxUserDtoMapper.selectByPersonName(wcxUserAdmDto.getEmployeeName(),wcxUserAdmDto.getEmployeeCardId());
        if(CollectionUtils.isEmpty(psndocsList)){
            throw new ServiceException("没有此用户或者已离职！");
        }

        WcxRole wcxRole=new WcxRole();
        wcxRole.setRoleCode("default");
        WcxRole wcxRoleList= wcxRoleMapper.selectOne(wcxRole);
        WcxUserAdmDto wuser=new WcxUserAdmDto();
        WcxRegionProjectDto conditionRegionProject = new WcxRegionProjectDto();
        conditionRegionProject.setEmployeeCardId(wcxUserAdmDto.getEmployeeCardId());
        WcxRegionProjectDto wcxRegionProjectDto = wcxUserDtoMapper.selectOne(conditionRegionProject);

        if (wcxRegionProjectDto != null) {
            // 判断是否有erp项目
          /*  if (!StringUtils.hasText(wcxRegionProjectDto.getProjectName())) {
                // 没有
                BdTypeDo bdTypeDo= wcxUserDtoMapper.findPropertyProjectNameByEmployeeCardId(wcxUserAdmDto.getEmployeeCardId());
                wuser.setCommCode(bdTypeDo.getFive());
                wuser.setCommName(bdTypeDo.getPkOrg());
            } else {
                // 有
                wuser.setCommCode(wcxRegionProjectDto.getCommCode());
                wuser.setCommName(wcxRegionProjectDto.getProjectName());
            }*/
            wuser.setUserCode(psndocsList.get(0).getCODE());
            wuser.setCommCode(wcxRegionProjectDto.getCommCode());
            wuser.setCommName(wcxRegionProjectDto.getProjectName());
            wuser.setOrgCode(wcxRegionProjectDto.getOrgCode());
            wuser.setOrgName(wcxRegionProjectDto.getRegionName());
            wuser.setEmployeeCardId(wcxUserAdmDto.getEmployeeCardId());
            wuser.setEmployeeName(wcxUserAdmDto.getEmployeeName());
            wuser.setUserId(CommonUtil.getUUID());
            wuser.setOpenId(CommonUtil.getUUID28());
            wuser.setStatus("0");
            wuser.setRoleId(wcxRoleList.getRoleId());
            wuser.setIsInvalid(0);
            wuser.setCreateDate(new Date());
            wcxUserDtoMapper.insertUser(wuser);
        }

        return Response.response();
    }

    @Override
    public Result addInvalid(WcxUserAdmDto wcxUserAdmDto, AccessToken accessToken) {
        wcxUserDtoMapper.addInvalid(wcxUserAdmDto);
        return Response.response();
    }

    @Override
    public PageData getReading(AccessToken accessToken,WcxUserAdmDto wcxUserAdmDto) {
        int pageOffset = PageUtil.getPageOffset(wcxUserAdmDto.getPageIndex(), wcxUserAdmDto.getPageSize());
        wcxUserAdmDto.setPageOffset(pageOffset);
        if(wcxUserAdmDto.getIndex().equals("1")){
            List<WcxUserAdmDto> listNo=wcxUserDtoMapper.getReadingNotice(wcxUserAdmDto);

            Long total = wcxUserDtoMapper.getReadingNoticeCount(wcxUserAdmDto);
            PageRowBounds pageRowBounds = new PageRowBounds(wcxUserAdmDto.getPageIndex(), wcxUserAdmDto.getPageSize());
            pageRowBounds.setTotal(total);
            pageRowBounds.setCount(true);

            PageData pageData = new PageData(listNo, pageRowBounds);
            return pageData;
        }
        if(wcxUserAdmDto.getIndex().equals("2")){
            List<WcxUserAdmDto> listInnovation=wcxUserDtoMapper.getReadingInnovation(wcxUserAdmDto);

            Long total = wcxUserDtoMapper.getReadingInnovationCount(wcxUserAdmDto);

            PageRowBounds pageRowBounds = new PageRowBounds(wcxUserAdmDto.getPageIndex(), wcxUserAdmDto.getPageSize());
            pageRowBounds.setTotal(total);
            pageRowBounds.setCount(true);

            PageData pageData = new PageData(listInnovation, pageRowBounds);
            return pageData;

        }
        return null;
    }
}
