package com.hdkj.lt.bf.service.impl;

import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.hdkj.lt.base.exception.BusinessException;
import com.hdkj.lt.bf.entity.UsersPage;
import com.hdkj.lt.bf.entity.dto.FhzgFaultTransferSchemeUsersDTO;
import com.hdkj.lt.bf.entity.dto.LoadSwitchLoseUsersDTO;
import com.hdkj.lt.bf.mapper.FaultTransferSchemeUsersMapper;
import com.hdkj.lt.bf.service.IFaultTransferSchemeUsersService;
import com.hdkj.lt.core.bizms.modle.dto.FhzgFaultTransferSchemeUsersReqDTO;
import com.hdkj.lt.core.bizms.modle.po.fault.FaultTransferSchemeUsers;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.List;
import java.util.Objects;

/**
 * <p>
 * 故障停电转供方案可靠校验用户信息明细表(不可转供和失电用户) 服务实现类
 * </p>
 *
 * @author luorui
 * @since 2025-05-29
 */
@Service
public class FaultTransferSchemeUsersServiceImpl extends ServiceImpl<FaultTransferSchemeUsersMapper, FaultTransferSchemeUsers> implements IFaultTransferSchemeUsersService {

    @Autowired
    FaultTransferSchemeUsersMapper faultTransferSchemeUsersMapper;

    @Override
    public UsersPage<FhzgFaultTransferSchemeUsersDTO> getFhzgFaultTransferSchemeUsersByIdPage(FhzgFaultTransferSchemeUsersReqDTO faultTransferSchemeUsersReqDTO) {
        if (Objects.isNull(faultTransferSchemeUsersReqDTO.getId())) {
            throw new BusinessException("组合方案id为空");
        }
        if (Objects.isNull(faultTransferSchemeUsersReqDTO.getPageNum())) {
            throw new BusinessException("分页页码为空");
        }
        if (Objects.isNull(faultTransferSchemeUsersReqDTO.getPageSize())) {
            throw new BusinessException("分页长度为空");
        }
        if (StrUtil.isBlank(faultTransferSchemeUsersReqDTO.getQueryType())) {
            throw new BusinessException("查询类型为空");
        }
        Page<FaultTransferSchemeUsers> page = new Page(faultTransferSchemeUsersReqDTO.getPageNum(), faultTransferSchemeUsersReqDTO.getPageSize());
        Page<FhzgFaultTransferSchemeUsersDTO> faultTransferSchemeUsersByIdPage = null;
        if ("6".equals(faultTransferSchemeUsersReqDTO.getQueryType())) {
            //配变低电压
            faultTransferSchemeUsersByIdPage = faultTransferSchemeUsersMapper.getDistributionTransformerLowVoltage(page, faultTransferSchemeUsersReqDTO);
            faultTransferSchemeUsersByIdPage.getRecords().forEach(i -> i.setVoltageLimitViolationMagnitude(i.getAfterTransferVoltage().subtract(new BigDecimal("10")).multiply(new BigDecimal("100")).divide(new BigDecimal("220"), RoundingMode.HALF_UP).setScale(2, RoundingMode.HALF_UP)));
        } else {
            faultTransferSchemeUsersByIdPage = faultTransferSchemeUsersMapper.getFhzgFaultTransferSchemeUsersByIdPage(page, faultTransferSchemeUsersReqDTO);
        }
        UsersPage<FhzgFaultTransferSchemeUsersDTO> result = new UsersPage<>();
        BeanUtil.copyProperties(faultTransferSchemeUsersByIdPage, result);

//        FhzgPlanTransferSchemeUsers usersPageSum = fhzgPlanTransferSchemeUsersMapper.getSum(fhzgPlanTransferSchemeUsersReqDTO);
//        result.setTotalLossPowers(usersPageSum.getTotalLossPowers());
//        result.setTotalLossCustHours(usersPageSum.getTotalLossCustHours());
        return result;
    }

    /**
     * @author luorui
     * @date 2025/6/6 17:18
     * @discription 统计方案下，损失用户数据，聚合到对应的负荷开关下
     **/
    @Override
    public List<LoadSwitchLoseUsersDTO> countLoadSwitchLoseUsersByScheme(Long schemeId) {
        if (Objects.isNull(schemeId)) {
            throw new BusinessException("方案编码为空");
        }
        List<LoadSwitchLoseUsersDTO> result = baseMapper.countLoadSwitchLoseUsersByScheme(schemeId);
        return result;
    }

}
