package com.jojubanking.boot.module.system.service.ksinfo;

import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;

import java.util.*;
import com.jojubanking.boot.module.system.controller.admin.ksinfo.vo.*;
import com.jojubanking.boot.module.system.dal.dataobject.ksinfo.KsInfoDO;
import com.jojubanking.boot.framework.common.pojo.PageResult;

import com.jojubanking.boot.module.system.convert.ksinfo.KsInfoConvert;
import com.jojubanking.boot.module.system.dal.mysql.ksinfo.KsInfoMapper;

import static com.jojubanking.boot.framework.common.exception.util.ServiceExceptionUtil.exception;
import static com.jojubanking.boot.module.system.enums.ErrorCodeConstants.*;

/**
 * 科室信息 Service 实现类
 *
 * @author admin
 */
@Service
@Validated
public class KsInfoServiceImpl implements KsInfoService {

    @Resource
    private KsInfoMapper ksInfoMapper;

    @Override
    public Integer createKsInfo(KsInfoCreateReqVO createReqVO) {
        // 插入
        KsInfoDO ksInfo = KsInfoConvert.INSTANCE.convert(createReqVO);
        ksInfoMapper.insert(ksInfo);
        // 返回
        return ksInfo.getId();
    }

    @Override
    public void updateKsInfo(KsInfoUpdateReqVO updateReqVO) {
        // 校验存在
        this.validateKsInfoExists(updateReqVO.getId());
        // 更新
        KsInfoDO updateObj = KsInfoConvert.INSTANCE.convert(updateReqVO);
        ksInfoMapper.updateById(updateObj);
    }

    @Override
    public void deleteKsInfo(Integer id) {
        // 校验存在
        this.validateKsInfoExists(id);
        // 删除
        ksInfoMapper.deleteById(id);
    }

    private void validateKsInfoExists(Integer id) {
        if (ksInfoMapper.selectById(id) == null) {
            throw exception(KS_INFO_NOT_EXISTS);
        }
    }

    @Override
    public KsInfoDO getKsInfo(Integer id) {
        return ksInfoMapper.selectById(id);
    }

    @Override
    public List<KsInfoDO> getKsInfoList(Collection<Integer> ids) {
        return ksInfoMapper.selectBatchIds(ids);
    }

    @Override
    public PageResult<KsInfoDO> getKsInfoPage(KsInfoPageReqVO pageReqVO) {
        return ksInfoMapper.selectPage(pageReqVO);
    }

    @Override
    public PageResult<KsInfoDO> getDzInfoPage(KsInfoPageReqVO pageReqVO) {
        return ksInfoMapper.selectDzPage(pageReqVO);
    }

    @Override
    public List<KsInfoDO> getKsInfoList(KsInfoExportReqVO exportReqVO) {
        return ksInfoMapper.selectList(exportReqVO);
    }

    @Override
    public void updateKsInfoPerDay(String kscode, String name, String departtype){
        KsInfoDO ksInfoDO1 = new KsInfoDO();
        ksInfoDO1 = ksInfoMapper.selectOne("departcode", kscode);

        if(ksInfoDO1 == null){
            //
            KsInfoDO ksInfoDO = new KsInfoDO();
            ksInfoDO.setName(name);
            ksInfoDO.setDeparttype(departtype);
            ksInfoDO.setDepartcode(kscode);
            ksInfoMapper.insert(ksInfoDO);
        }else{
            //
//            KsInfoDO ksInfoDO = new KsInfoDO();
//            ksInfoDO.setName(name);
//            ksInfoDO.setDeparttype(departtype);
//            ksInfoDO.setDepartcode(kscode);
            UpdateWrapper<KsInfoDO> updateWrapper = new UpdateWrapper<>();
            updateWrapper.set("departcode", kscode).set("departtype", departtype).set("name", name)
                            .eq("departcode",kscode);
            ksInfoMapper.update(null, updateWrapper);
        }
    }
}

