package com.huashe.park.core.service.impl;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;

import com.alibaba.fastjson2.JSONObject;
import com.huashe.park.common.DateTimeUtil;
import com.huashe.park.common.consts.enums.ConsResult;
import com.huashe.park.core.mapper.MachineProcessResultMapper;
import com.huashe.park.core.service.IMachineProcessResultService;
import com.huashe.park.domain.dto.cons.ConsUnitResult;
import com.huashe.park.domain.dto.cons.ResultCADCsv;
import com.huashe.park.domain.entity.MachineProcessResult;

import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.convert.Convert;

/**
 * 桩机施工结果数据（2025-02-26版协议）Service业务层处理
 * 
 * @author ruoyi
 * @date 2025-02-26
 */
@Service
public class MachineProcessResultServiceImpl implements IMachineProcessResultService {

    @Autowired
    private MachineProcessResultMapper machineProcessResultMapper;

    /**
     * 查询桩机施工结果数据（2025-02-26版协议）
     * 
     * @param id 桩机施工结果数据（2025-02-26版协议）主键
     * @return 桩机施工结果数据（2025-02-26版协议）
     */
    @Override
    public MachineProcessResult selectMachineProcessResultById(Long id) {
        return machineProcessResultMapper.selectMachineProcessResultById(id);
    }

    /**
     * 查询桩机施工结果数据（2025-02-26版协议）列表
     * 
     * @param machineProcessResult 桩机施工结果数据（2025-02-26版协议）
     * @return 桩机施工结果数据（2025-02-26版协议）
     */
    @Override
    public List<MachineProcessResult> selectMachineProcessResultList(MachineProcessResult machineProcessResult) {
        return machineProcessResultMapper.selectMachineProcessResultList(machineProcessResult);
    }

    /**
     * 新增桩机施工结果数据（2025-02-26版协议）
     * 
     * @param machineProcessResult 桩机施工结果数据（2025-02-26版协议）
     * @return 结果
     */
    @Override
    public int insertMachineProcessResult(MachineProcessResult machineProcessResult) {
        return machineProcessResultMapper.insertMachineProcessResultOnUpdate(machineProcessResult);
    }

    /**
     * 修改桩机施工结果数据（2025-02-26版协议）
     * 
     * @param machineProcessResult 桩机施工结果数据（2025-02-26版协议）
     * @return 结果
     */
    @Override
    public int updateMachineProcessResult(MachineProcessResult machineProcessResult) {
        return machineProcessResultMapper.updateMachineProcessResult(machineProcessResult);
    }

    /**
     * 批量删除桩机施工结果数据（2025-02-26版协议）
     * 
     * @param ids 需要删除的桩机施工结果数据（2025-02-26版协议）主键
     * @return 结果
     */
    @Override
    public int deleteMachineProcessResultByIds(Long[] ids) {
        return machineProcessResultMapper.deleteMachineProcessResultByIds(ids);
    }

    /**
     * 删除桩机施工结果数据（2025-02-26版协议）信息
     * 
     * @param id 桩机施工结果数据（2025-02-26版协议）主键
     * @return 结果
     */
    @Override
    public int deleteMachineProcessResultById(Long id) {
        return machineProcessResultMapper.deleteMachineProcessResultById(id);
    }

    @Override
    public List<String[]> qeyConsUnitResult(Long consUnitId) {
        List<ConsUnitResult> consUnitResults = machineProcessResultMapper.qeyConsUnitResult(consUnitId);
        List<String[]> resultCADCsvs = new ArrayList<>(consUnitResults.size());
        ResultCADCsv resultCADCsv;
        ConsResult consResult;
        Map<String, Object> stringObjectMap;
        JSONObject depthPress;
        String[] strings;
        for (ConsUnitResult consUnitResult : consUnitResults) {
            resultCADCsv = new ResultCADCsv();
            BeanUtil.copyProperties(consUnitResult, resultCADCsv);
            resultCADCsv.setId(consUnitResult.getId());
            resultCADCsv.setPileNum(consUnitResult.getHoleNum());
            resultCADCsv.setDt(
                DateTimeUtil.getDateFromMills(consUnitResult.getDataTime(), DateTimeUtil.DateFormatter.yyyy_MM_dd));
            resultCADCsv.setStartingTime(
                DateTimeUtil.getDateFromMills(consUnitResult.getDataTime(), DateTimeUtil.DateFormatter.HHmmss));
            resultCADCsv.setDuration(calcSecond(consUnitResult.getEndTime(), consUnitResult.getStartTime()));

            // 评价结果转换
            consResult = ConsResult.getByCode(consUnitResult.getResultEvaluation());
            resultCADCsv.setEvaluation(consResult.getValue());
            resultCADCsv.setPullValue(consUnitResult.getSprayVolume());
            // 实际深度 = 桩长 - 回带量
            resultCADCsv.setActualDepth(
                (float) Math.round((consUnitResult.getPileLength() - consUnitResult.getSprayVolume()) * 100) / 100.0f);
            resultCADCsv.setEndingPress(consUnitResult.getEndPress());
            resultCADCsv.setAvgSprayPressure(consUnitResult.getEndPress());
            resultCADCsv.setAvgSpeed(consUnitResult.getAvgSpeed());
            resultCADCsv.setAvgUpSpeed(consUnitResult.getAvgUpSpeed());
            stringObjectMap = BeanUtil.beanToMap(resultCADCsv);
            depthPress = consUnitResult.getDepthPress();
            if (!CollectionUtils.isEmpty(depthPress)) {
                stringObjectMap.putAll(depthPress);
            }
            strings = Convert.toStrArray(stringObjectMap.values());

            resultCADCsvs.add(strings);
        }
        return resultCADCsvs;
    }

    private Long calcSecond(Long end, Long start) {
        if (end == null || start == null) {
            return 0L;
        }
        return TimeUnit.MILLISECONDS.toSeconds(end - start);
    }
}
