package com.qmth.sop.business.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.qmth.boot.api.exception.ApiException;
import com.qmth.sop.business.entity.SysDeviceBrand;
import com.qmth.sop.business.entity.SysUser;
import com.qmth.sop.business.mapper.SysDeviceBrandMapper;
import com.qmth.sop.business.service.SysDeviceBrandService;
import com.qmth.sop.common.contant.SystemConstant;
import com.qmth.sop.common.enums.ExceptionResultEnum;
import com.qmth.sop.common.enums.FieldUniqueEnum;
import com.qmth.sop.common.util.ResultUtil;
import com.qmth.sop.common.util.ServletUtil;
import org.springframework.dao.DuplicateKeyException;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.Map;
import java.util.Objects;

/**
 * 设备品牌表 服务实现.
 *
 * @author: shudonghui
 * @date: 2023-08-25 10:29:08
 * @version: 1.0
 * @email: shudonghui@qmth.com.cn
 * @Company: www.qmth.com.cn
 */
@Service
public class SysDeviceBrandServiceImpl extends ServiceImpl<SysDeviceBrandMapper, SysDeviceBrand> implements SysDeviceBrandService {


	/**
	 * 查询列表
	 *
	 * @param iPage
	 * @return
	 */
	@Override
	public IPage<SysDeviceBrand> query(IPage<Map> iPage, String query) {
		return this.baseMapper.query(iPage, query);
	}

	/**
	 * 新增修改设备品牌表
	 *
	 * @param sysDeviceBrand
	 */
	@Override
	@Transactional
	public Boolean saveSysDeviceBrand(SysDeviceBrand sysDeviceBrand) {
		try {
			SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
			if (Objects.isNull(sysDeviceBrand.getId())) {// 新增
				sysDeviceBrand.insertInfo(sysUser.getId());
			} else { // 修改
				sysDeviceBrand.updateInfo(sysUser.getId());
			}
			return saveOrUpdate(sysDeviceBrand);
		} catch (Exception e) {
			if (e instanceof DuplicateKeyException) {
				String errorColumn = e.getCause().toString();
				String columnStr = errorColumn.substring(errorColumn.lastIndexOf("key") + 3).replaceAll("'", "");
				throw ExceptionResultEnum.SQL_ERROR.exception("[" + FieldUniqueEnum.convertToTitle(columnStr) + "]数据不允许重复插入");
			} else if (e instanceof ApiException) {
				ResultUtil.error((ApiException) e, ((ApiException) e).getCode(), e.getMessage());
			} else {
				ResultUtil.error(e.getMessage());
			}
		}
		return null;

	}

	@Transactional
	@Override
	public SysDeviceBrand findOrAddDeviceBrand(String brand) {
		SysDeviceBrand sysDeviceBrand = this.getOne(new QueryWrapper<SysDeviceBrand>()
				.lambda()
				.eq(SysDeviceBrand::getBrand, brand)
				.last(SystemConstant.LIMIT1));
		if (Objects.isNull(sysDeviceBrand)) {
			// 新增
			sysDeviceBrand = new SysDeviceBrand();
			sysDeviceBrand.setBrand(brand);
			this.saveSysDeviceBrand(sysDeviceBrand);
		}
		return sysDeviceBrand;
	}

	/**
	 * 删除设备品牌表
	 *
	 * @param id
	 */
	@Override
	@Transactional
	public Boolean delete(Long id) {
		return this.removeById(id);
	}
}