package com.yunzhupaas.flowable.service.impl;

import cn.hutool.core.collection.CollectionUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.yunzhupaas.base.service.SuperServiceImpl;
import com.yunzhupaas.flowable.entity.SubtaskDataEntity;
import com.yunzhupaas.flowable.mapper.SubtaskDataMapper;
import com.yunzhupaas.flowable.model.task.FlowModel;
import com.yunzhupaas.flowable.service.SubtaskDataService;
import com.yunzhupaas.util.JsonUtil;
import com.yunzhupaas.util.RandomUtil;
import org.springframework.stereotype.Service;

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

/**
 * 类的描述
 *
 * @author YUNZHUPAASYUNZHUPAAS开发组
 * @version 5.0.x
 * @since 2024/12/6 15:35
 */
@Service
public class SubtaskDataServiceImpl extends SuperServiceImpl<SubtaskDataMapper, SubtaskDataEntity>
        implements SubtaskDataService {

    @Override
    public List<SubtaskDataEntity> getList(String parentId, String parentCode) {
        QueryWrapper<SubtaskDataEntity> queryWrapper = new QueryWrapper<>();
        queryWrapper.lambda().eq(SubtaskDataEntity::getParentId, parentId)
                .eq(SubtaskDataEntity::getNodeCode, parentCode)
                .orderByAsc(SubtaskDataEntity::getSortCode);
        return this.list(queryWrapper);
    }

    @Override
    public void save(List<FlowModel> subTaskData) {
        if (CollectionUtil.isEmpty(subTaskData)) {
            return;
        }
        List<SubtaskDataEntity> list = new ArrayList<>();
        for (int i = 0; i < subTaskData.size(); i++) {
            FlowModel model = subTaskData.get(i);
            SubtaskDataEntity entity = new SubtaskDataEntity();
            entity.setId(RandomUtil.uuId());
            entity.setParentId(model.getParentId());
            entity.setNodeCode(model.getSubCode());
            entity.setSubtaskJson(JsonUtil.getObjectToString(model));
            int sortCode = i + 1;
            entity.setSortCode((long) sortCode);
            list.add(entity);
        }
        if (CollectionUtil.isNotEmpty(list)) {
            this.saveBatch(list);
        }
    }
}
