package com.xisc.pm.app.service.impl;

import com.xisc.pm.app.service.PmPonoWtStaticGdService;
import com.xisc.pm.domain.entity.PmPonoWtStaticGd;
import com.xisc.pm.domain.entity.PmPonoWtStaticGdTra;
import com.xisc.pm.domain.repository.PmPonoWtStaticGdRepository;
import com.xisc.pm.domain.repository.PmPonoWtStaticGdTraRepository;
import io.choerodon.core.domain.Page;
import io.choerodon.core.oauth.DetailsHelper;
import io.choerodon.mybatis.pagehelper.PageHelper;
import io.choerodon.mybatis.pagehelper.domain.PageRequest;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

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

/**
 * 炉重静态表_钢锭(PmPonoWtStaticGd)应用服务
 *
 * @author 纪文桃 wentao.ji01@hand-china.com
 * @since 2024-07-25 09:41:26
 */
@Service
public class PmPonoWtStaticGdServiceImpl implements PmPonoWtStaticGdService {

    private PmPonoWtStaticGdRepository pmPonoWtStaticGdRepository;

    private PmPonoWtStaticGdTraRepository pmPonoWtStaticGdTraRepository;

    public PmPonoWtStaticGdServiceImpl(PmPonoWtStaticGdRepository pmPonoWtStaticGdRepository, PmPonoWtStaticGdTraRepository pmPonoWtStaticGdTraRepository) {
        this.pmPonoWtStaticGdRepository = pmPonoWtStaticGdRepository;
        this.pmPonoWtStaticGdTraRepository = pmPonoWtStaticGdTraRepository;
    }

    @Override
    public Page<PmPonoWtStaticGd> selectList(PageRequest pageRequest, PmPonoWtStaticGd pmPonoWtStaticGd) {
        return PageHelper.doPageAndSort(pageRequest, () -> pmPonoWtStaticGdRepository.selectList(pmPonoWtStaticGd));
    }

    @Override
    @Transactional(rollbackFor = Exception.class)
    public void saveData(Long tenantId, List<PmPonoWtStaticGd> pmPonoWtStaticGdList) {
        // 检查数据列表是否为空，如果为空则直接返回
        if (CollectionUtils.isEmpty(pmPonoWtStaticGdList)) {
            return ;
        }
        // 获取当前时间及操作人信息
        Date now = new Date();
        String username = DetailsHelper.getUserDetails().getUsername();
        List<PmPonoWtStaticGdTra> insertPmPonoWtStaticGdTraList = new ArrayList<>(pmPonoWtStaticGdList.size());

        // 分离需要插入和更新的列表
        List<PmPonoWtStaticGd> insertList = pmPonoWtStaticGdList.stream().filter(line -> line.getPmPonoWtStaticGdId() == null).collect(Collectors.toList());
        List<PmPonoWtStaticGd> updateList = pmPonoWtStaticGdList.stream().filter(line -> line.getPmPonoWtStaticGdId() != null).collect(Collectors.toList());

        // 记录历史表
        for (PmPonoWtStaticGd pmPonoWtStaticGd : updateList) {
            PmPonoWtStaticGdTra pmPonoWtStaticGdTra = new PmPonoWtStaticGdTra();
            BeanUtils.copyProperties(pmPonoWtStaticGd, pmPonoWtStaticGdTra);

            // 设置操作类型为更新（U），并记录操作时间和用户
            pmPonoWtStaticGdTra.setOperationType("U");
            pmPonoWtStaticGdTra.setOperationTime(now);
            pmPonoWtStaticGdTra.setOperationUser(username);
            insertPmPonoWtStaticGdTraList.add(pmPonoWtStaticGdTra);

        }
        // 更新或者新增
        pmPonoWtStaticGdRepository.batchUpdateByPrimaryKeySelective(updateList);
        pmPonoWtStaticGdRepository.batchInsertSelective(insertList);

        for (PmPonoWtStaticGd pmPonoWtStaticGd : insertList) {
            PmPonoWtStaticGdTra pmPonoWtStaticGdTra = new PmPonoWtStaticGdTra();
            BeanUtils.copyProperties(pmPonoWtStaticGd, pmPonoWtStaticGdTra);

            // 设置操作类型为新增（I），并记录操作时间和用户
            pmPonoWtStaticGdTra.setOperationType("I");
            pmPonoWtStaticGdTra.setOperationTime(now);
            pmPonoWtStaticGdTra.setOperationUser(username);
            insertPmPonoWtStaticGdTraList.add(pmPonoWtStaticGdTra);

        }
        // 插入保存或者更新记录到对应履历表
        pmPonoWtStaticGdTraRepository.batchInsertSelective(insertPmPonoWtStaticGdTraList);
    }

    @Override
    @Transactional(rollbackFor = Exception.class)
    public void deleteForUi(List<PmPonoWtStaticGd> pmPonoWtStaticGdList) {
        if (CollectionUtils.isNotEmpty(pmPonoWtStaticGdList)) {
            // 删除
            pmPonoWtStaticGdRepository.batchDeleteByPrimaryKey(pmPonoWtStaticGdList);

            // 获取时间和当前操作人信息
            Date now = new Date();
            String username = DetailsHelper.getUserDetails().getUsername();
            List<PmPonoWtStaticGdTra> insertPmPonoWtStaticGdTraList = new ArrayList<>(pmPonoWtStaticGdList.size());
            for (PmPonoWtStaticGd pmPonoWtStaticGd : pmPonoWtStaticGdList) {
                PmPonoWtStaticGdTra pmPonoWtStaticGdTra = new PmPonoWtStaticGdTra();

                // 设置操作类型为删除（D），并记录操作时间和用户
                BeanUtils.copyProperties(pmPonoWtStaticGd, pmPonoWtStaticGdTra);
                pmPonoWtStaticGdTra.setOperationType("D");
                pmPonoWtStaticGdTra.setOperationTime(now);
                pmPonoWtStaticGdTra.setOperationUser(username);
                insertPmPonoWtStaticGdTraList.add(pmPonoWtStaticGdTra);

            }
            // 插入删除记录到对应履历表
            pmPonoWtStaticGdTraRepository.batchInsertSelective(insertPmPonoWtStaticGdTraList);
        }
    }
}

