package cn.superdesk.uniorder.service.sys.impl;

import cn.hutool.core.lang.Snowflake;
import cn.superdesk.uniorder.common.exception.utils.AssertUtils;
import cn.superdesk.uniorder.common.numerical.AnBeanUtils;
import cn.superdesk.uniorder.common.numerical.AnCollectionUtils;
import cn.superdesk.uniorder.common.rest.response.R;
import cn.superdesk.uniorder.dao.entity.sys.SysConfig;
import cn.superdesk.uniorder.dao.entity.sys.SysConfigExample;
import cn.superdesk.uniorder.dao.mapper.sys.SysConfigMapper;
import cn.superdesk.uniorder.service.sys.SysConfigService;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

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

// 问题表1
//SELECT * FROM `sys_config`
//id	code	description	value_date	value_int	value_str1	value_str2	value_str3	value_double
//1	DZSN	对账单号	2021-03-15 09:32:12	7	DZ NULL NULL NULL
//2	EMAIL	邮箱账号 NULL 465	smtp.avic-s.com	duizhang@avic-s.com	Super123 NULL
//3	INVA	发票申请号	2021-03-15 09:34:50	2	IN NULL NULL NULL
//4	UPDATEAREA	更新区域名称	2020-03-12 15:08:30	1NULL
//5	VIRTTJ	企业统计	2020-03-23 17:47:57	2024	11NULL

// 问题表2
//SELECT * FROM `unified_sn_config`
//id	next_sn	service_no	start_str	end_inivalue	end_length	end_rodom	mid_dateformat	remarks	create_time	create_user_id	update_time	update_user_id
//1	LS2021030800006	LNSS	LS	1	5	0	yyyyMMdd	楼闪送	2019-08-05 11:22:47 NULL  2019-08-05 11:22:50 NUL
//2	LSDZ2020122900002	LNSS-DZ	LSDZ	1	5	0	yyyyMMdd	楼闪送对账	2019-08-05 11:22:47 NULL  2019-08-05 11:22:50 NULL
//3	SI202009090003	SI	SI	1	4	0	yyyyMMdd	供应商申请发票	2019-08-22 16:33:22 NULL  2019-08-22 16:33:24 NULL
//4	QNDZ202103050002	QYNG-DZ	QNDZ	1	4	0	yyyyMMdd	供应商企业采购对账	2019-10-21 17:29:53 NULL  2019-10-21 17:29:55 NULL
//6	FLDZ202103050002	FLSC-DZ	FLDZ	1	4	0	yyyyMMdd	企业福利	2020-03-05 16:45:30 NULL  2020-03-05 16:45:33 NULL
//7	FLSC_QCH-DZ202001010001	FLSC_QCH-DZ	FLSC_QCH-DZ	1	4	0	yyyyMMdd	企业福利_侨城汇	2020-03-05 16:45:30 NULL  2020-03-05 16:45:33 NULL


/**
 * @Description: 系统配置
 * @Author: linjinyu
 * @CreateDate: 2020/12/7 上午10:37
 * @UpdateUser: linjinyu
 * @UpdateDate: 2020/12/7 上午10:37
 * @UpdateRemark: 修改内容
 * @Version: 1.0
 */
@Deprecated
@Slf4j
@Service
public class SysConfigServiceImpl implements SysConfigService {


    //	@Resource
//	private SnowflakeGenerator snowflakeGenerator;
    @Resource
    private Snowflake snowflake;

    @Autowired
    private SysConfigMapper sysConfigMapper;

    /****************************************** extends BaseService 部分 start ******************************************/


    @Override
    public int insertSelective(SysConfig entity) {
        return sysConfigMapper.insertSelective(entity);
    }

    @Override
    public int updateByPrimaryKeySelective(SysConfig entity) {
        return sysConfigMapper.updateByPrimaryKeySelective(entity);
    }

    @Override
    public void deleteObj(Long id) {
    }

    @Override
    public SysConfig findById(Long id) {
        return sysConfigMapper.selectByPrimaryKey(id);
    }

    @Override
    public PageInfo<SysConfig> findByPaging(Map<String, Object> conditions, Integer pageNun, Integer pageSize) {
        return null;
    }

    @Override
    public List<SysConfig> findAll(Map<String, Object> queryMap) {
        return null;
    }


    /****************************************** extends BaseService 部分   end ******************************************/


    public void addSysConfig(SysConfig entity) {
        sysConfigMapper.insertSelective(entity);
    }

    public void updateSysConfig(SysConfig entity) {
        SysConfig originEntity = sysConfigMapper.selectByPrimaryKey(entity.getId());
        AssertUtils.notNull(originEntity);
        AnBeanUtils.copy(entity, originEntity);
        sysConfigMapper.updateByPrimaryKey(originEntity);
    }

    public void deleteSysConfig(Long id) {
        sysConfigMapper.deleteByPrimaryKey(id);
    }

    public SysConfig findSysConfigById(Long id) {
        SysConfig entity = sysConfigMapper.selectByPrimaryKey(id);
        AssertUtils.notNull(entity);
        return entity;
    }

    public R<List<SysConfig>> pageQuery(Map<String, Object> conditions, int pageNun, int pageSize) {

        // 样例 保留
//		SysConfig sysConfigConditions = BeanUtils.mapToBean(conditions,SysConfig.class);

        SysConfigExample          example  = new SysConfigExample();
        SysConfigExample.Criteria criteria = example.createCriteria();

        PageHelper.startPage(pageNun, pageSize);
        List<SysConfig>     resultList = sysConfigMapper.selectByExample(example);
        PageInfo<SysConfig> page       = new PageInfo<SysConfig>(resultList);
        PageHelper.clearPage();

        return new R<List<SysConfig>>(page.getPageNum(), page.getPageSize(), (int) page.getTotal(), resultList);

    }


    /****************************************** 自定义 start ******************************************/


    /**
     * 重构后存在问题,没有再读取数据库配置了 还要进一步重构 mark by linjinyu at 20210315
     *
     * @return
     */
//	public String getCustomerStatementOfAccountSn() {
//
//		Long   snowflakeId    = snowflake.nextId();
//		String snowflakeIdStr = AnStringUtils.getString(snowflakeId);
//
////		截取
//		String snowflakeStrSub = snowflakeIdStr.substring(snowflakeIdStr.length()-9, snowflakeIdStr.length());
//
//		String createSn = "DZ" + AnDateHelper.getCurrentDateStr("yyyyMMdd") + snowflakeStrSub;
//
//		log.info("新的生成SN getStatementOfAccountSn {}", createSn);
//
//		return createSn;
//	}


    /**
     * 生成 新的 账单 对账单 结算单 SN TODO 弃用
     *
     * @return
     */
//	@Deprecated
//	@Override
//	public Map<String, Object> getConfigByDZSN() {
//
//		Map<String, Object> map = new HashMap<>();
//
//		SysConfig sysConfig = findByCode("DZSN");
//
//		SimpleDateFormat sdf   = new SimpleDateFormat("yyyyMMdd");
//		Date             dtnow = DateUtil.date();
//
//		if (sdf.format(dtnow).equals(sdf.format(sysConfig.getValueDate()))) {
//
//			map.put("valueDate", sysConfig.getValueDate().getTime());
//			map.put("key", "DZSN");
//			map.put("valueInt", sysConfig.getValueInt() + 1);
//
//			String intStr    = String.valueOf(sysConfig.getValueInt() + 1);
//			String resintStr = intStr;
//
//			for (int i = intStr.length(); i <= 4; i++) {
//				resintStr = "0" + resintStr;
//			}
//
//			map.put("sn", sysConfig.getValueStr1() + sdf.format(sysConfig.getValueDate()) + resintStr);
//
//		} else {
//
//			map.put("valueDate", dtnow.getTime());
//			map.put("key", "DZSN");
//			map.put("valueInt", "1");
//			map.put("sn", sysConfig.getValueStr1() + sdf.format(dtnow) + "00001");
//
//		}
//
//		return map;
//	}

//	public String getInvoiceApplySn() {
//
//		Long   snowflakeId    = snowflake.nextId();
//		String snowflakeIdStr = AnStringUtils.getString(snowflakeId);
//
////		截取
//		String snowflakeStrSub = snowflakeIdStr.substring(snowflakeIdStr.length()-5, snowflakeIdStr.length());
//
//		String createSn = "IN" + AnDateHelper.getCurrentDateStr("yyyyMMdd") + snowflakeStrSub;
//
//		log.info("新的生成SN getStatementOfAccountSn {}", createSn);
//
//		return createSn;
//	}

//	@Deprecated
//	@Override
//	public Map<String, Object> getConfigByINVA() {
//
//		Map<String, Object> map = new HashMap<>();
//
//		SysConfig config = findByCode("INVA");
//
//		SimpleDateFormat sdf   = new SimpleDateFormat("yyyyMMdd");
//		Date             dtnow = DateUtil.date();
//
//		if (sdf.format(dtnow).equals(sdf.format(config.getValueDate()))) {
//
//			map.put("valueDate", config.getValueDate().getTime());
//			map.put("key", "INVA");
//			map.put("valueInt", config.getValueInt() + 1);
//
//			String intStr    = String.valueOf(config.getValueInt() + 1);
//			String resintStr = intStr;
//
//			for (int i = intStr.length(); i <= 4; i++) {
//				resintStr = "0" + resintStr;
//			}
//
//			map.put("sn", config.getValueStr1() + sdf.format(config.getValueDate()) + resintStr);
//		} else {
//
//			map.put("valueDate", dtnow.getTime());
//			map.put("key", "INVA");
//			map.put("valueInt", "1");
//			map.put("sn", config.getValueStr1() + sdf.format(dtnow) + "00001");
//		}
//		return map;
//	}

//	@Override
//	public Map<String, Object> getBanckNo() {
//
//		Map<String, Object> map    = new HashMap<>();
//		SysConfig           config = findByCode("BRSN");
//		SimpleDateFormat    sdf    = new SimpleDateFormat("yyyyMMdd");
//		Date                dtnow  = DateUtil.date();
//
//		if (sdf.format(dtnow).equals(sdf.format(config.getValueDate()))) {
//
//			map.put("valueDate", config.getValueDate().getTime());
//			map.put("key", "BRSN");
//			map.put("valueInt", config.getValueInt() + 1);
//
//			String intStr    = String.valueOf(config.getValueInt() + 1);
//			String resintStr = intStr;
//
//			for (int i = intStr.length(); i <= 2; i++) {
//				resintStr = "0" + resintStr;
//			}
//
//			map.put("sn", config.getValueStr1() + sdf.format(config.getValueDate()) + resintStr);
//
//		} else {
//			map.put("valueDate", dtnow.getTime());
//			map.put("key", "BRSN");
//			map.put("valueInt", "1");
//			map.put("sn", config.getValueStr1() + sdf.format(dtnow) + "001");
//		}
//		return map;
//	}
    @Override
    public SysConfig findByCode(String code) {

        SysConfig sysConfig = null;

        SysConfigExample example = new SysConfigExample();
        example.createCriteria()
                .andCodeEqualTo(code);

        List<SysConfig> resultList = sysConfigMapper.selectByExample(example);

        if (AnCollectionUtils.isNotEmpty(resultList)) {
            sysConfig = resultList.get(0);
        }

        return sysConfig;
    }

    /**
     * 更新 账单 对账单 结算单 SN TODO 弃用
     *
     * @param codeMap
     */
//	@Deprecated
//	@Override
//	public void updateSysConfigFieldDataIntByCode(Map<String, Object> codeMap) {
//
//		SysConfig sysConfig = new SysConfig();
//
////		sysConfig.setCode(codeMap.get("key").toString());
//		sysConfig.setValueDate(new Date((Long) (codeMap.get("valueDate"))));
//		sysConfig.setValueInt(Integer.parseInt(codeMap.get("valueInt").toString()));
//
////		sysConfigMapper.updateByPrimaryKeySelective(sysConfig);
//
//		String code = codeMap.get("key").toString();
//
//		SysConfigExample example = new SysConfigExample();
//		example.createCriteria()
//				.andCodeEqualTo(code);
//
//		sysConfigMapper.updateByExampleSelective(sysConfig, example);
//
//	}

    /****************************************** 自定义   end ******************************************/
}
