package com.ruoyi.tc.service.impl;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.PasswordGenerator;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.system.service.ISysUserService;
import com.ruoyi.tc.entity.AssetTask;
import com.ruoyi.tc.entity.Unit;
import com.ruoyi.tc.entity.request.GeneralQueryRequest;
import com.ruoyi.tc.entity.request.UnitRequest;
import com.ruoyi.tc.mapper.UnitMapper;
import com.ruoyi.tc.service.UnitService;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

/**
 * 单位信息（unit_info）表业务处理层
 *
 * @author du
 * @since 2024/11/13 15:02
 */
@Service
public class UnitServiceImpl extends ServiceImpl<UnitMapper, Unit> implements UnitService {

    @Resource
    private ISysUserService userService;

    /**
     * 分页条件查询所有单位列表
     *
     * @param unit 用户信息
     * @return 用户信息集合信息
     */
    @Override
    public Page<Unit> page(Page<Unit> page, UnitRequest unit) {
        return baseMapper.selectUnitList(page, unit);
    }

    /**
     * 根据条件查询所有单位列表
     *
     * @param unit 用户信息
     * @return 用户信息集合信息
     */
    @Override
    public List<Unit> selectUnitList(UnitRequest unit) {
        return baseMapper.selectUnitList(unit);
    }

    /**
     * 根据id获取详细信息
     */
    @Override
    public Unit getById(Long id) {
        return baseMapper.getById(id);
    }


    /**
     * 检查用户表是否存在该用户，并做新增和修改
     */
    @Override
    public String validUser(Unit x) {
        if (x.getUserName() != null && x.getNickName() != null) {
            String password = PasswordGenerator.password();
            SysUser user = new SysUser();
            user.setUserName(x.getUserName());
            user.setPassword(SecurityUtils.encryptPassword(password));
            user.setNickName(x.getNickName());
            user.setDeptId(x.getDeptId());
            SysUser u = userService.selectUserByUserName(x.getUserName());
            //如果存在用户就做修改
            //不存在用户就做新增
            if (StringUtils.isNull(u)) {
                userService.insertUser(user);
                Long[] roles = new Long[]{100L};
                userService.insertUserAuth(user.getUserId(), roles);
            } else {
                u.setDeptId(x.getDeptId());
                userService.updateUserProfile(u);
            }
            return password;
        } else {
            throw new ServiceException("统一社会信用代码/用户账号不能为空");
        }
    }

    /**
     * 根据id列表查询单位
     */
    @Override
    public List<String> selectByIds(Long id) {
        return baseMapper.selectByIds(id);
    }

    /**
     * 逻辑删除用户
     */
    @Override
    public void deleteUsers(String userNames) {
        baseMapper.deleteUsers(userNames);
    }

    /**
     * 逻辑删除单位
     */
    @Override
    public void deleteUnits(Long id) {
        baseMapper.deleteUnits(id);
    }

    @Override
    public Page<Unit> dwList(Page<Unit> page, UnitRequest unit) {
        return baseMapper.dwList(page, unit);
    }

    /**
     * 根据查询条件查询所有单位列表
     *
     * @param req 查询条件
     * @return 单位
     */
    @Override
    public List<Unit> selectAllUnit(GeneralQueryRequest req) {
        return baseMapper.selectAllUnit(req);
    }

    /**
     * 根据单位名称和5种资产类型查询
     */
    @Override
    public Integer selectTaskId(String dwmc, String type) {
        return baseMapper.selectTaskId(dwmc,type);
    }

    @Override
    public Integer findBydwmc(String part) {
        return baseMapper.findBydwmc(part);
    }

}
