package cn.iocoder.yudao.module.property.service.impl;

import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.framework.security.core.LoginUser;
import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
import cn.iocoder.yudao.module.property.entity.PropertyPos;
import cn.iocoder.yudao.module.property.mapper.PropertyPosMapper;
import cn.iocoder.yudao.module.property.service.PropertyPosService;
import cn.iocoder.yudao.module.property.vo.PropertyPosReqVO;
import cn.iocoder.yudao.module.property.vo.PropertyPosRespVO;
import cn.iocoder.yudao.module.system.api.dept.DeptApi;
import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;

import javax.annotation.Resource;

import static cn.iocoder.yudao.common.ErrorCodeConstants.PROPERTY_NO_CORP;
import static cn.iocoder.yudao.common.ErrorCodeConstants.PROPERTY_NO_DEPT;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;

/**
 * 企业管理-资产存放位置 Service 实现类
 *
 * @author vinjor-m
 */
@Service
@Validated
public class PropertyPosServiceImpl extends ServiceImpl<PropertyPosMapper, PropertyPos> implements PropertyPosService {
    @Resource
    private DeptApi deptApi;
    @Resource
    private PropertyPosMapper propertyPosMapper;

    @Override
    public String createPropertyPos(PropertyPosReqVO createReqVO) {
        /* 1.设置当前登录用户所属部门Id、企业Id */
        LoginUser loginUser = SecurityFrameworkUtils.getLoginUser();
        if(StringUtils.isEmpty(loginUser.getInfo().get("deptId"))){
            //当前登录用户没有部门，不能新增
            throw exception(PROPERTY_NO_DEPT);
        }
        Long deptId = Long.valueOf(loginUser.getInfo().get("deptId"));
        createReqVO.setDeptId(deptId);
        DeptRespDTO deptRespDTO = deptApi.getDept(deptId);
        if(StringUtils.isEmpty(deptRespDTO.getCorpId()) && StringUtils.isEmpty(createReqVO.getCorpId())){
            //当前登录用户非企业人员，且没有手动选择所属企业的话，不能添加
            throw exception(PROPERTY_NO_CORP);
        }
        if(StringUtils.isEmpty(createReqVO.getCorpId())){
            createReqVO.setCorpId(deptRespDTO.getCorpId());
        }
        /* 2.插入数据并反回Id*/
        PropertyPos propertyPos = BeanUtils.toBean(createReqVO, PropertyPos.class);
        baseMapper.insert(propertyPos);
        // 返回
        return propertyPos.getId();
    }

    @Override
    public void updatePropertyPos(PropertyPosReqVO updateReqVO) {
        // 更新
        PropertyPos updateObj = BeanUtils.toBean(updateReqVO, PropertyPos.class);
        baseMapper.updateById(updateObj);
    }

    @Override
    public void deletePropertyPos(String id) {
        // 删除
        baseMapper.deleteById(id);
    }



    @Override
    public PropertyPos getPropertyPos(String id) {
        return baseMapper.selectById(id);
    }

    @Override
    public IPage<PropertyPosRespVO> getPropertyPosPage(Page<PropertyPos> page, PropertyPosReqVO pageReqVO) {
        return propertyPosMapper.selectListPage(page,pageReqVO);
    }

}