package com.bonus.zlpt.equip.service.impl;

import java.util.List;
import java.util.stream.Collectors;


import com.bonus.zlpt.common.security.utils.SecurityUtils;
import com.bonus.zlpt.equip.api.domain.SysFileInfo;
import com.bonus.zlpt.equip.api.domain.TypeInfo;
import com.bonus.zlpt.equip.api.domain.UpOff;
import com.bonus.zlpt.equip.api.domain.dto.UpOffDto;
import com.bonus.zlpt.common.core.enums.FileDictEnum;
import com.bonus.zlpt.equip.mapper.SysFileInfoMapper;
import com.bonus.zlpt.equip.mapper.TypeInfoMapper;
import com.bonus.zlpt.equip.api.domain.vo.MaDevInfoVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.bonus.zlpt.equip.mapper.UpOffMapper;
import com.bonus.zlpt.equip.service.IUpOffService;

import javax.annotation.Resource;

/**
 * 设备上下架管理
Service业务层处理
 * 
 * @author xsheng
 * @date 2023-12-02
 */
@Service
public class UpOffServiceImpl implements IUpOffService 
{
    @Resource
    private UpOffMapper upOffMapper;

    @Resource
    private TypeInfoMapper typeInfoMapper;

    @Resource
    private SysFileInfoMapper sysFileInfoMapper;

    /**
     * 查询设备上下架管理

     * 
     * @param id 设备上下架管理
主键
     * @return 设备上下架管理

     */
    @Override
    public UpOff selectUpOffById(Long id)
    {
        return upOffMapper.selectUpOffById(id);
    }

    /**
     * 查询设备上下架管理
列表
     * 
     * @param upOff 设备上下架管理

     * @return 设备上下架管理

     */
    @Override
    public List<UpOff> selectUpOffList(UpOff upOff)
    {
        return upOffMapper.selectUpOffList(upOff);
    }

    /**
     * 新增设备上下架管理

     * 
     * @param upOffList 设备上下架管理

     * @return 结果
     */
    @Override
    public int insertUpOff(List<UpOff> upOffList)
    {
        String name = SecurityUtils.getUsername();

        for (int i = 0; i < upOffList.size(); i++) {
            UpOff UpOff =   upOffList.get(i);
            UpOff.setApplyUser(name);
         upOffMapper.insertUpOff(UpOff);
        }
        return 1;
    }

    /**
     * 修改设备上下架管理

     * 
     * @param upOff 设备上下架管理

     * @return 结果
     */
    @Override
    public int updateUpOff(UpOff upOff)
    {
        return  upOffMapper.updateUpOff(upOff);
    }

    /**
     * 批量删除设备上下架管理

     * 
     * @param ids 需要删除的设备上下架管理
主键
     * @return 结果
     */
    @Override
    public int deleteUpOffByIds(Long[] ids)
    {
        return upOffMapper.deleteUpOffByIds(ids);
    }

    /**
     * 删除设备上下架管理
信息
     * 
     * @param id 设备上下架管理
主键
     * @return 结果
     */
    @Override
    public int deleteUpOffById(Long id)
    {
        return upOffMapper.deleteUpOffById(id);
    }


    /**
     * 查询装备上架请求信息
     * @param upOffDto
     * @return
     */
    @Override
    public List<MaDevInfoVo> selectList(UpOffDto upOffDto) {

        List<MaDevInfoVo> devInfoVos = upOffMapper.selectList(upOffDto);
        for (MaDevInfoVo devInfoVo : devInfoVos) {
            //组装装备名称   当前数据装备类型名称 + 设备型号
            devInfoVo.buildDevName();
            TypeInfo typeInfo = typeInfoMapper.selectTypeInfoByTypeId(devInfoVo.getTypeId());
            TypeInfo typeInfo1 = typeInfoMapper.selectTypeInfoByTypeId(typeInfo.getParentId());
            devInfoVo.setParentDevType(typeInfo1.getTypeName());
        }
        return devInfoVos;
    }

    @Override
    public List<MaDevInfoVo> selectInfo(List<Long> ids) {

        List<MaDevInfoVo> devInfoVos = selectList(new UpOffDto());
        //去重
        devInfoVos = devInfoVos.stream()
                .filter(devInfoVo -> ids.contains(devInfoVo.getMaId()))
                .collect(Collectors.toList());

        for (MaDevInfoVo devInfoVo : devInfoVos) {
            //组装装备名称   当前数据装备类型名称 + 设备型号
            devInfoVo.buildDevName();
            TypeInfo typeInfo = typeInfoMapper.selectTypeInfoByTypeId(devInfoVo.getTypeId());
            TypeInfo typeInfo1 = typeInfoMapper.selectTypeInfoByTypeId(typeInfo.getParentId());
            devInfoVo.setParentDevType(typeInfo1.getTypeName());
        }

        for (MaDevInfoVo devInfoVo : devInfoVos) {
            //组装url
            List<SysFileInfo> fileInfos = sysFileInfoMapper.selectByMaId(devInfoVo.getMaId());
            for (SysFileInfo fileInfo : fileInfos) {
                if(FileDictEnum.INSPECT_IMAGE_URL.getValue().equals(fileInfo.getDicId())){
                    devInfoVo.setInspectImageUrl(fileInfo.getFileUrl());
                }
                if(FileDictEnum.INSURE_IMAGE_URL.getValue().equals(fileInfo.getDicId())){
                    devInfoVo.setInsureImageUrl(fileInfo.getFileUrl());
                }
            }
        }
        return devInfoVos;

    }

    @Override
    public int UpdateUpOffLIst(List<UpOff> upOffList) {

        for (int i = 0; i < upOffList.size(); i++) {
            UpOff UpOff =   upOffList.get(i);
            upOffMapper.UpdateUpOffLIst(UpOff);
        }
        return 1;
    }
}
