package com.dhcc.finance.main.service.impl;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;

import com.dhcc.common.constant.SysConstants;
import com.dhcc.common.constant.SysStatusCode;
import com.dhcc.common.model.CurrencyMeta;
import com.dhcc.common.model.response.RestfulResponse;
import com.dhcc.finance.main.dao.CwProjectCheckMapper;
import com.dhcc.finance.main.model.CwProjectCheckWeb;
import com.dhcc.finance.main.service.CwProjectCheckService;
import com.dhcc.finance.util.MetaDataUtil;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;

import brave.Tracer;
import lombok.extern.slf4j.Slf4j;

/**
 * 功能描述：财务检验信息实现
 * @author leiyu
 * @date 2020年4月21日 下午17:29:05
 * @修改日志：
 */
@Slf4j
@Service
public class CwProjectCheckServiceImpl implements CwProjectCheckService{
	
	@Autowired
	private Tracer tracer;
	
	@Autowired
	private StringRedisTemplate stringRedisTemplate;

	@Autowired
	CwProjectCheckMapper cwProjectCheckMapper;

	/**
	 * 功能描述：查询单个科目余额为负
	 * @param xtxmbh
	 * @param xtzxmbh
	 * @param userId
	 * @param jzrq
	 * @return RestfulResponse<PageInfo<CwProjectCheckWeb>, CurrencyMeta>
	 * @author leiyu
	 * @date 2020年4月21日 下午17:29:05
	 * @修改日志：
	 */
	@Override
	public RestfulResponse<PageInfo<CwProjectCheckWeb>, CurrencyMeta> selectSingleSubjectBalance(String xtxmbh,
																								 String xtzxmbh, String userId, String jzrq, int pageNum, int pageSize, int navigatePages) {
		PageHelper.startPage(pageNum, pageSize);
		List<CwProjectCheckWeb> list=cwProjectCheckMapper.selectSingleSubjectBalance(xtxmbh,xtzxmbh,userId,jzrq);
		PageInfo<CwProjectCheckWeb> pageInfo = new PageInfo<>(list, navigatePages);
		return new RestfulResponse<PageInfo<CwProjectCheckWeb>, CurrencyMeta>(SysConstants.CODE.SUCCESS,SysConstants.DEFAULT_MESSAGE.OPERATION_SUCCESS,pageInfo,MetaDataUtil.getMeta(tracer,SysStatusCode.OPERATION_SUCCESS));
	}

	/**
	 * 功能描述：查询单个科目余额为负
	 * @param xtxmbh
	 * @param xtzxmbh
	 * @param userId
	 * @param jzrq
	 * @return RestfulResponse<PageInfo<CwProjectCheckWeb>, CurrencyMeta>
	 * @author leiyu
	 * @date 2020年4月21日 下午17:29:05
	 * @修改日志：
	 */
	@Override
	public RestfulResponse<PageInfo<CwProjectCheckWeb>, CurrencyMeta> selectNoScaleNoClosed(String xtxmbh,
																								 String xtzxmbh, String userId, String jzrq, int pageNum, int pageSize, int navigatePages) {
		PageHelper.startPage(pageNum, pageSize);
		List<CwProjectCheckWeb> list=cwProjectCheckMapper.selectNoScaleNoClosed(xtxmbh,xtzxmbh,userId,jzrq);
		PageInfo<CwProjectCheckWeb> pageInfo = new PageInfo<>(list, navigatePages);
		return new RestfulResponse<PageInfo<CwProjectCheckWeb>, CurrencyMeta>(SysConstants.CODE.SUCCESS,SysConstants.DEFAULT_MESSAGE.OPERATION_SUCCESS,pageInfo,MetaDataUtil.getMeta(tracer,SysStatusCode.OPERATION_SUCCESS));
	}




	/**
	 * 功能描述：校验：未分配利润出现负数
	 * @param xtxmbh
	 * @param xtzxmbh
	 * @param userId
	 * @param jzrq
	 * @return RestfulResponse<PageInfo<CwProjectCheckWeb>, CurrencyMeta>
	 * @author leiyu
	 * @date 2020年4月23日 上午10:20:38
	 * @修改日志：
	 */
	@Override
	public RestfulResponse<PageInfo<CwProjectCheckWeb>, CurrencyMeta> selectUndistributedProfit(String xtxmbh,
			String xtzxmbh, String userId, String jzrq, int pageNum, int pageSize, int navigatePages) {
		PageHelper.startPage(pageNum, pageSize);
		List<CwProjectCheckWeb> list=cwProjectCheckMapper.selectUndistributedProfit(xtxmbh, xtzxmbh, userId, jzrq);
		PageInfo<CwProjectCheckWeb> pageInfo = new PageInfo<>(list, navigatePages);
		return new RestfulResponse<PageInfo<CwProjectCheckWeb>, CurrencyMeta>(SysConstants.CODE.SUCCESS,SysConstants.DEFAULT_MESSAGE.OPERATION_SUCCESS,pageInfo,MetaDataUtil.getMeta(tracer,SysStatusCode.OPERATION_SUCCESS));
	}
	
	/**
	 * 功能描述   校验：科目余额与辅助账余额不一致
	 * @return List<CwProjectCheckWeb>
	 * @param kmlx
	 * @param xtxmbh
	 * @param xtzxmbh
	 * @param userId
	 * @author leiyu
	 * @date 2020年4月24日 下午17:12:29
	 * 修改日志
	 */
	@Override
	public RestfulResponse<PageInfo<CwProjectCheckWeb>, CurrencyMeta> selectDifferentBalance(String kmlx,
			String xtxmbh, String xtzxmbh, String userId, String jzrq, int pageNum, int pageSize, int navigatePages) {
		PageHelper.startPage(pageNum, pageSize);
		List<CwProjectCheckWeb> list=cwProjectCheckMapper.selectDifferentBalance(kmlx, xtxmbh, xtzxmbh, userId, jzrq);
		PageInfo<CwProjectCheckWeb> pageInfo = new PageInfo<>(list, navigatePages);
		return new RestfulResponse<PageInfo<CwProjectCheckWeb>, CurrencyMeta>(SysConstants.CODE.SUCCESS,SysConstants.DEFAULT_MESSAGE.OPERATION_SUCCESS,pageInfo,MetaDataUtil.getMeta(tracer,SysStatusCode.OPERATION_SUCCESS));
	}
	
	/**
	 * 功能描述   校验：已结束项目存在信托规模
	 * @return List<CwProjectCheckWeb>
	 * @param xtxmbh
	 * @param xtzxmbh
	 * @param userId
	 * @param xmzzr
	 * @author leiyu
	 * @date 2020年4月22日 下午16:22:35
	 * 修改日志
	 */
	@Override
	public RestfulResponse<PageInfo<CwProjectCheckWeb>, CurrencyMeta> selectScaleOfClosedProjects(String xtxmbh,
			String xtzxmbh, String userId, String xmyjzzr, int pageNum, int pageSize, int navigatePages) {
		PageHelper.startPage(pageNum, pageSize);
		List<CwProjectCheckWeb> list=cwProjectCheckMapper.selectScaleOfClosedProjects(xtxmbh, xtzxmbh, userId, xmyjzzr);
		PageInfo<CwProjectCheckWeb> pageInfo = new PageInfo<>(list, navigatePages);
		return new RestfulResponse<PageInfo<CwProjectCheckWeb>, CurrencyMeta>(SysConstants.CODE.SUCCESS,SysConstants.DEFAULT_MESSAGE.OPERATION_SUCCESS,pageInfo,MetaDataUtil.getMeta(tracer,SysStatusCode.OPERATION_SUCCESS));
	}
	
	/**
     * 功能描述 查询未归还固有代垫款项目
     *@param xtxmbh
     *@param xtzxmbh
     *@param userId
     *@param pageNum
     *@param pageSize
     *@param navigatePages
     *@return RestfulResponse<PageInfo<CwBdGlorgbookAndOther>,CurrencyMeta>
     *@author jiangyoushun
     *@date 2020年4月22日
     *修改日志:
     */
    @Override
    public RestfulResponse<PageInfo<CwProjectCheckWeb>, CurrencyMeta> selectEntrustRewardBalance(String xtxmbh,
            String xtzxmbh, String userId, String jzrq, int pageNum,  int pageSize, int navigatePages) {
        PageHelper.startPage(pageNum, pageSize);
        List<CwProjectCheckWeb> list=cwProjectCheckMapper.selectEntrustRewardBalance(xtxmbh,xtzxmbh,userId,jzrq);
        PageInfo<CwProjectCheckWeb> pageInfo = new PageInfo<>(list, navigatePages);
        return new RestfulResponse<PageInfo<CwProjectCheckWeb>, CurrencyMeta>(SysConstants.CODE.SUCCESS,SysConstants.DEFAULT_MESSAGE.OPERATION_SUCCESS,pageInfo,MetaDataUtil.getMeta(tracer,SysStatusCode.OPERATION_SUCCESS));
    }

    /**
     * 功能描述 查询其他应付款余额超过100万
     *@param xtxmbh
     *@param xtzxmbh
     *@param userId
     *@param pageNum
     *@param pageSize
     *@param navigatePages
     *@return RestfulResponse<PageInfo<CwBdGlorgbookAndOther>,CurrencyMeta>
     *@author jiangyoushun
     *@date 2020年4月22日
     *修改日志:
     */
    @Override
    public RestfulResponse<PageInfo<CwProjectCheckWeb>, CurrencyMeta> selectOtherPayablesBalance(String xtxmbh,
            String xtzxmbh, String userId, String jzrq, int pageNum, int pageSize, int navigatePages) {
        PageHelper.startPage(pageNum, pageSize);
        List<CwProjectCheckWeb> list=cwProjectCheckMapper.selectOtherPayablesBalance(xtxmbh,xtzxmbh,userId,jzrq);
        PageInfo<CwProjectCheckWeb> pageInfo = new PageInfo<>(list, navigatePages);
        return new RestfulResponse<PageInfo<CwProjectCheckWeb>, CurrencyMeta>(SysConstants.CODE.SUCCESS,SysConstants.DEFAULT_MESSAGE.OPERATION_SUCCESS,pageInfo,MetaDataUtil.getMeta(tracer,SysStatusCode.OPERATION_SUCCESS));
    }

    /**
     * 功能描述 查询应付受益人收益有余额
     *@param xtxmbh
     *@param xtzxmbh
     *@param userId
     *@param pageNum
     *@param pageSize
     *@param navigatePages
     *@return RestfulResponse<PageInfo<CwBdGlorgbookAndOther>,CurrencyMeta>
     *@author jiangyoushun
     *@date 2020年4月22日
     *修改日志:
     */
    @Override
    public RestfulResponse<PageInfo<CwProjectCheckWeb>, CurrencyMeta> selectAccruedIncomeBalance(String xtxmbh,
            String xtzxmbh, String userId, String jzrq, int pageNum, int pageSize, int navigatePages) {
        PageHelper.startPage(pageNum, pageSize);
        List<CwProjectCheckWeb> list=cwProjectCheckMapper.selectAccruedIncomeBalance(xtxmbh,xtzxmbh,userId,jzrq);
        PageInfo<CwProjectCheckWeb> pageInfo = new PageInfo<>(list, navigatePages);
        return new RestfulResponse<PageInfo<CwProjectCheckWeb>, CurrencyMeta>(SysConstants.CODE.SUCCESS,SysConstants.DEFAULT_MESSAGE.OPERATION_SUCCESS,pageInfo,MetaDataUtil.getMeta(tracer,SysStatusCode.OPERATION_SUCCESS));
    }

    /**
     * 功能描述 查询科目辅助账存在负数
     *@param xtxmbh
     *@param xtzxmbh
     *@param userId
     *@param pageNum
     *@param pageSize
     *@param navigatePages
     *@return RestfulResponse<PageInfo<CwBdGlorgbookAndOther>,CurrencyMeta>
     *@author jiangyoushun
     *@date 2020年4月22日
     *修改日志:
     */
    @Override
    public RestfulResponse<PageInfo<CwProjectCheckWeb>, CurrencyMeta> selectAssetAccountBalance(String kmlx,String xtxmbh,
            String xtzxmbh, String userId, String jzrq, int pageNum, int pageSize, int navigatePages) {
        PageHelper.startPage(pageNum, pageSize);
        List<CwProjectCheckWeb> list=cwProjectCheckMapper.selectAssetAccountBalance(kmlx,xtxmbh,xtzxmbh,userId,jzrq);
        PageInfo<CwProjectCheckWeb> pageInfo = new PageInfo<>(list, navigatePages);
        return new RestfulResponse<PageInfo<CwProjectCheckWeb>, CurrencyMeta>(SysConstants.CODE.SUCCESS,SysConstants.DEFAULT_MESSAGE.OPERATION_SUCCESS,pageInfo,MetaDataUtil.getMeta(tracer,SysStatusCode.OPERATION_SUCCESS));
    }
}
