package com.boman.web.core.service.delete;

import com.alibaba.fastjson.JSONObject;
import com.boman.common.core.utils.obj.ObjectUtils;
import com.boman.web.core.domain.RowResult;
import com.boman.web.core.mapper.StandardlyMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * @author shiqian
 * @date 2021年03月26日 11:16
 **/
@Service
public class BaseDeleteServiceImpl implements IBaseDeleteService {

    private static final Logger LOGGER = LoggerFactory.getLogger(BaseDeleteServiceImpl.class);

    @Autowired
    private StandardlyMapper mapper;

    /**
     * 功能描述: 在此不对入参进行校验，所以在调用此方法之前一定要对参数进行校验，以免报错
     *
     * @param idArr     需要删除的iD
     * @param tableName 业务主表
     * @param pkName    业务表的主键名
     * @return com.boman.system.common.RowResult
     */
    @Override
    public RowResult objectDelete(Long[] idArr, String tableName, String pkName) {
        int delete = mapper.deleteByIds(tableName, idArr, pkName);
        return RowResult.ok("共删除了 " + delete + " 条记录");
    }

    /**
     * 功能描述: 在此不对入参进行校验，所以在调用此方法之前一定要对参数进行校验，以免报错
     *
     * @param id        需要删除的iD
     * @param tableName 业务主表
     * @param pkName    业务表的主键名
     * @return com.boman.system.common.RowResult
     */
    @Override
    public RowResult deleteById(String tableName, String pkName, Long id) {
        int delete = mapper.deleteById(tableName, pkName, id);
        return delete > 0 ? RowResult.ok() : RowResult.fail();
    }

    /**
     * 功能描述: 在此不对入参进行校验，所以在调用此方法之前一定要对参数进行校验，以免报错
     *
     * @param idArr     需要删除的iD
     * @param tableName 业务主表
     * @param pkName    业务表的主键名
     * @param model     逻辑删除的字段和值
     * @return com.boman.system.common.RowResult
     */
    @Override
    public RowResult objectLogicDelete(Long[] idArr, String tableName, String pkName, JSONObject model) {
        int delete = mapper.updateById(tableName, model, pkName, idArr);
        return delete > 0 ? RowResult.ok() : RowResult.fail();
    }


}
