package com.hzya.frame.grpU8.nxproof.controlindex.service.impl;

import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUtil;
import com.hzya.frame.grpU8.nxproof.controlindex.entity.ControlIndexEntity;
import com.hzya.frame.grpU8.nxproof.controlindex.service.IControlIndexService;
import com.hzya.frame.grpU8.nxproof.gbizbsyrec.dao.IGbiZbsyrecDao;
import com.hzya.frame.grpU8.nxproof.gbizbsyrec.entity.GbiZbsyrecEntity;
import com.hzya.frame.grpU8.nxproof.oerdjml.dao.IOerDjmlDao;
import com.hzya.frame.grpU8.nxproof.oerdjml.entity.OerDjmlEntity;
import com.hzya.frame.web.exception.BaseSystemException;
import org.apache.ibatis.session.SqlSession;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.List;

@Service(value = "controlIndexServiceImpl")
public class ControlIndexServiceImpl implements IControlIndexService {

    private static Logger logger= LogManager.getLogger(ControlIndexServiceImpl.class);

    @Autowired
    private IGbiZbsyrecDao gbiZbsyrecDao;
    @Autowired
    private IOerDjmlDao oerDjmlDao;
    /*@Autowired
    @Qualifier("sqlSessionMaster")
    private SqlSession sqlSession;*/
    //查询数据库表状态为1的数据，写入指标执行表
    @Override
    public String queryControlIndexByStatus(String stauts) {
        ControlIndexEntity controlIndexEntity=new ControlIndexEntity();
        List<ControlIndexEntity> controlIndexEntities=null;
        OerDjmlEntity oerDjmlEntity=new OerDjmlEntity();
        oerDjmlEntity.setGsdm("001");
        oerDjmlEntity.setDjlxId("102");
        switch (stauts){
            case "1":
                logger.info("========开始查询数据库表状态为1的数据========");
                controlIndexEntity.setZT("1");
               // controlIndexEntities= sqlSession.selectList("ControlIndexEntity_list_base", controlIndexEntity);
                logger.info("根据状态为1查询出来的数据有{}条",controlIndexEntities.size());
                if(CollUtil.isNotEmpty(controlIndexEntities) && controlIndexEntities.size()>0){
                    for (ControlIndexEntity indexEntity : controlIndexEntities) {
                        logger.info("循环遍历中得验收单号为:{}",indexEntity.getYSDH());
                        if(null == indexEntity.getYSDH() || null ==indexEntity.getZBID()){
                            throw new BaseSystemException("验收单号或者指标id不能为空");
                        }
                        //将查询出来的状态为1的数据写入到指标占用表中
                        GbiZbsyrecEntity gbiZbsyrecEntity=new GbiZbsyrecEntity();
                        gbiZbsyrecEntity.setDjId(indexEntity.getYSDH());//单据id
                        logger.info("开始根据编号查询指标占用表的数据");
                        //根据编号查询指标占用表里面是否存在数据，如果存在，则不新增
                        GbiZbsyrecEntity gbiZbsyrecEntityOne =(GbiZbsyrecEntity) gbiZbsyrecDao.selectOne("GbiZbsyrecEntity_list_base_one", gbiZbsyrecEntity);
                       if(null ==gbiZbsyrecEntityOne || !indexEntity.getYSDH().equals(gbiZbsyrecEntityOne.getDjId())) {
                          logger.info("验收单号:{}在指标占用表中不存在，开始保存到占用表中",indexEntity.getYSDH());
                           try {
                               gbiZbsyrecEntity.setJhId(indexEntity.getZBID());//指标id
                               gbiZbsyrecEntity.setDjje(String.valueOf(indexEntity.getJE()));//金额
                               gbiZbsyrecEntity.setKjnd(indexEntity.getKJND());
                               gbiZbsyrecEntity.setGsdm("001");//公司代码
                               gbiZbsyrecEntity.setModule("OER");//模块
                               gbiZbsyrecEntity.setDjlx("102");//单据类型
                               gbiZbsyrecEntity.setDjflh("148001");//单据分录数
                               gbiZbsyrecEntity.setDjzt(indexEntity.getZT());
                               gbiZbsyrecEntity.setSzfx("1");
                               gbiZbsyrecEntity.setJdzb("0");
                               gbiZbsyrecEntity.setCzlx("0");
                               gbiZbsyrecEntity.setDjflmx(indexEntity.getYSDH());
                               gbiZbsyrecDao.save(gbiZbsyrecEntity);
                               //保存报销单
                               oerDjmlEntity.setDjdate(DateUtil.formatDate(new Date()).replace("-",""));
                               String djbh = oerDjmlDao.getMaxDjbgByGsdmZy(oerDjmlEntity);
                               oerDjmlEntity.setDjbh(djbh);
                               oerDjmlEntity.setMlId(indexEntity.getYSDH());
                               oerDjmlEntity.setKjnd(indexEntity.getKJND());
                               oerDjmlEntity.setZt("1");
                               oerDjmlEntity.setJe(String.valueOf(indexEntity.getJE()));
                               oerDjmlEntity.setGrdm("123456");
                               oerDjmlEntity.setGrmc("占用测试");
                               //oerDjmlEntity.setJedx(AmountConvert.toChinese(String.valueOf(indexEntity.getJE())));
                               OerDjmlEntity save = oerDjmlDao.save(oerDjmlEntity);
                               logger.info("验收单号:{}在指标占用表中占用成功",indexEntity.getYSDH());
                               if(save!=null){
                                   //修改T_ZCCW_CONTROLINDEX的指标同步状态为1
                                   indexEntity.setZBTBZT("1");
                                   logger.info("保存中开始根据验收单号:{},会计年度:{},指标id：{}更新指标同步状态",indexEntity.getYSDH(),indexEntity.getKJND(),indexEntity.getZBID());
                               //    sqlSession.update("ControlIndexEntity_update",indexEntity);
                               }
                           }catch (Exception e){
                               logger.info("指标占用失败:{}",e.getMessage());
                           }
                       }else{
                           logger.info("验收单号:{}在指标占用表中已经存在，不再保存到占用表中",indexEntity.getYSDH());
                       }
                    }
                }else {
                    logger.info("========没有查询到状态为1，需要写入指标占用表的数据========");
                    return null;
                }
                break;
            case "3":
                logger.info("========开始查询数据库表状态为3的数据========");
                controlIndexEntity.setZT("3");
             //   controlIndexEntities= sqlSession.selectList("ControlIndexEntity_list_base", controlIndexEntity);
                logger.info("根据状态为3查询出来的数据有{}条",controlIndexEntities.size());
                if(CollUtil.isNotEmpty(controlIndexEntities) && controlIndexEntities.size()>0){
                    for (ControlIndexEntity indexEntity : controlIndexEntities) {
                        if(null == indexEntity.getYSDH() || null ==indexEntity.getZBID()){
                            throw new BaseSystemException("验收单号或者指标id不能为空");
                        }
                        GbiZbsyrecEntity gbiZbsyrecEntity=new GbiZbsyrecEntity();
                        gbiZbsyrecEntity.setDjId(indexEntity.getYSDH());
                        //根据编号查询指标占用表中是否存在，存在就删除
                        GbiZbsyrecEntity gbiZbsyrecEntityOne =(GbiZbsyrecEntity) gbiZbsyrecDao.selectOne("GbiZbsyrecEntity_list_base_one", gbiZbsyrecEntity);
                        if(null !=gbiZbsyrecEntityOne && indexEntity.getYSDH().equals(gbiZbsyrecEntityOne.getDjId())) {
                            logger.info("验收单号:{}在指标占用表中存在，开始删除指标占用表",indexEntity.getYSDH());
                            try {
                                //根据编号删除指标占用表
                                gbiZbsyrecEntity.setKjnd(indexEntity.getKJND());
                                logger.info("指标占用表中的djid为:{},会计年度为:{}",gbiZbsyrecEntity.getDjId(),gbiZbsyrecEntity.getKjnd());
                                gbiZbsyrecDao.delete("GbiZbsyrecEntity_delete",gbiZbsyrecEntity);
                                //根据编号删除报销单
                                oerDjmlEntity.setKjnd(indexEntity.getKJND());
                                oerDjmlEntity.setMlId(indexEntity.getYSDH());
                                logger.info("报销单中的mlid为：{}，会计年度为：{}，公司代码为：{}，单据类型id为：{}",oerDjmlEntity.getMlId(),oerDjmlEntity.getKjnd(),oerDjmlEntity.getGsdm(),oerDjmlEntity.getDjlxId());
                                int delete = oerDjmlDao.delete("OerDjmlEntity_delete", oerDjmlEntity);
                                logger.info("根据验收单号:{}在指标占用表中已删除",indexEntity.getYSDH());
                                if(delete>0){
                                    //修改T_ZCCW_CONTROLINDEX的指标同步状态为1
                                    indexEntity.setZBTBZT("1");
                                    logger.info("删除中开始根据验收单号:{},会计年度:{},指标id：{}更新指标同步状态",indexEntity.getYSDH(),indexEntity.getKJND(),indexEntity.getZBID());
                          //          sqlSession.update("ControlIndexEntity_update",indexEntity);
                                }
                            }catch (Exception e){
                                logger.info("指标删除失败:{}",e.getMessage());
                            }
                        }else {
                            logger.info("验收单号:{}在指标占用表中不存在",indexEntity.getYSDH());
                        }
                    }
                }else {
                    logger.info("========没有查询到状态为3，需要删除指标占用表的数据========");
                    return null;
                }
                break;
            default:
                break;
        }
        return null;
        }
    }

