package com.ygtx.gxt.service.impl;

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;

import com.ygtx.common.core.domain.entity.SysUser;
import com.ygtx.system.service.ISysUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ygtx.gxt.mapper.GxtUserScoreMapper;
import com.ygtx.gxt.domain.GxtUserScore;
import com.ygtx.gxt.service.IGxtUserScoreService;

/**
 * 用户月度评分统计表Service业务层处理
 * 
 * @author ruoyi
 * @date 2025-11-03
 */
@Service
public class GxtUserScoreServiceImpl implements IGxtUserScoreService 
{
    @Autowired
    private GxtUserScoreMapper gxtUserScoreMapper;
    
    @Autowired
    private ISysUserService sysUserService;

    /**
     * 查询用户月度评分统计表
     * 
     * @param id 用户月度评分统计表主键
     * @return 用户月度评分统计表
     */
    @Override
    public GxtUserScore selectGxtUserScoreById(Long id)
    {
        return gxtUserScoreMapper.selectGxtUserScoreById(id);
    }

    /**
     * 查询用户月度评分统计表列表
     * 
     * @param gxtUserScore 用户月度评分统计表
     * @return 用户月度评分统计表
     */
    @Override
    public List<GxtUserScore> selectGxtUserScoreList(GxtUserScore gxtUserScore)
    {
        return gxtUserScoreMapper.selectGxtUserScoreList(gxtUserScore);
    }

    /**
     * 查询用户月度评分统计表列表
     *
     * @param gxtUserScore 用户月度评分统计表
     * @return 用户月度评分统计表
     */
    @Override
    public List<GxtUserScore> selectUserAllScore(GxtUserScore gxtUserScore) {
        return gxtUserScoreMapper.selectUserAllScore(gxtUserScore);
    }

    /**
     * 新增用户月度评分统计表
     * 
     * @param gxtUserScore 用户月度评分统计表
     * @return 结果
     */
    @Override
    public int insertGxtUserScore(GxtUserScore gxtUserScore)
    {
        return gxtUserScoreMapper.insertGxtUserScore(gxtUserScore);
    }

    /**
     * 修改用户月度评分统计表
     * 
     * @param gxtUserScore 用户月度评分统计表
     * @return 结果
     */
    @Override
    public int updateGxtUserScore(GxtUserScore gxtUserScore)
    {
        return gxtUserScoreMapper.updateGxtUserScore(gxtUserScore);
    }

    /**
     * 批量删除用户月度评分统计表
     * 
     * @param ids 需要删除的用户月度评分统计表主键
     * @return 结果
     */
    @Override
    public int deleteGxtUserScoreByIds(Long[] ids)
    {
        return gxtUserScoreMapper.deleteGxtUserScoreByIds(ids);
    }

    /**
     * 删除用户月度评分统计表信息
     * 
     * @param id 用户月度评分统计表主键
     * @return 结果
     */
    @Override
    public int deleteGxtUserScoreById(Long id)
    {
        return gxtUserScoreMapper.deleteGxtUserScoreById(id);
    }
    
    /**
     * 根据条件查询用户月度评分统计表列表
     * 
     * @param rtType 查询类型 1-部门所有用户 其他-当前用户
     * @param monthPeriod 月份(yyyy-MM格式)
     * @param userId 用户ID
     * @param deptId 部门ID
     * @return 用户月度评分统计表集合
     */
    @Override
    public List<GxtUserScore> selectGxtUserScoreListByCondition(Integer rtType, String monthPeriod, Long userId, Long deptId, String permission) {
        GxtUserScore gxtUserScore = new GxtUserScore();
        // 设置月份条件
        gxtUserScore.setMonthPeriod(monthPeriod);
        gxtUserScore.setPermission(permission);
        // 根据rtType和月份条件确定查询用户范围
        if (rtType != null && rtType == 2) {
            // 新增
            SysUser user = new SysUser();
            user.setDeptId(deptId);
            user.setDelFlag("0");
            user.setPermission(permission);
            List<SysUser> users = sysUserService.selectUserListByDeptId(user);
            List<GxtUserScore> result = new ArrayList<>();
            if (!users.isEmpty()) {
                for (SysUser user1:users) {
                    GxtUserScore userScore = new GxtUserScore();
                    userScore.setUserId(user1.getUserId());
                    userScore.setUserName(user1.getUserName());
                    userScore.setNickName(user1.getNickName());
                    result.add(userScore);
                }
            }
            return result;
        } else if (rtType != null && rtType == 1) {
            // 查看部门
            gxtUserScore.setDeptId(deptId);
        } else {
            // 查看当前用户
            gxtUserScore.setUserId(userId);
        }
        return gxtUserScoreMapper.selectGxtUserScoreList(gxtUserScore);
    }
}