package com.zjrs.zwnw.zj.bpo.impl;

import io.micrometer.core.instrument.util.StringUtils;
import org.mohrss.leaf.core.framework.domain.bpo.impl.BPOImpl;
import org.mohrss.leaf.core.framework.persistens.PageResult;
import org.mohrss.leaf.core.framework.web.controller.AjaxResponse;
import com.zjrs.zwnw.zj.blo.InitBLO;
import com.zjrs.zwnw.zj.blo.QsbsBLO;
import com.zjrs.zwnw.zj.bpo.QsbsBPO;
import com.zjrs.zwnw.zj.dto.QsDTO;
import com.zjrs.zwnw.zj.dto.QsPageDTO;
import com.zjrs.zwnw.zj.dto.QsbsDTO;
import com.zjrs.zwnw.zj.po.InitPO;
import com.zjrs.zwnw.zj.po.QsbsPO;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;

import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletResponse;

@Service
public class QsbsBPOImpl extends BPOImpl implements QsbsBPO {
    @Resource
    private QsbsBLO qsbsBLO;
    @Resource
    private InitBLO initBLO;

    @Override
    public void export(QsDTO dto, HttpServletResponse res) {
        qsbsBLO.export(dto,res);
    }

    @Override
    public AjaxResponse del(QsDTO dto) {
        AjaxResponse ajaxResponse = new AjaxResponse();
        //判断是否从最大年度开始删除
        String maxYear=qsbsBLO.getMaxYear();
        if(!dto.getNd().equals(maxYear)){
            ajaxResponse.setAppcode("1");
            ajaxResponse.setErrorMsg("只能删除填报年度为最新年度的填报记录");
            return ajaxResponse;
        }
        qsbsBLO.del(dto.getNd());
        return ajaxResponse;
    }

    @Override
    public AjaxResponse getInfo(QsDTO dto) {
        AjaxResponse ajaxResponse = new AjaxResponse();
        QsbsPO qsbsPO = qsbsBLO.getInfo(dto.getNd());
        QsbsDTO qsbsDTO=new QsbsDTO();
        BeanUtils.copyProperties(qsbsPO, qsbsDTO);
        QsbsDTO tjDTO=qsbsBLO.getTjData(dto.getNd());
        //40周岁（含）以上博士累计总量
        Long nl40dlj=Long.parseLong(tjDTO.getNl40dlj());
        qsbsDTO.setNl40dlj(nl40dlj+"");
        //40周岁以下博士累计总量
        Long zyszzdwlj=Long.parseLong(tjDTO.getZyszzdwlj());
        qsbsDTO.setZyszzdwlj(zyszzdwlj+"");
        //中央、省驻湛单位累计总量
        Long ssdwlj=Long.parseLong(tjDTO.getSsdwlj());
        qsbsDTO.setSsdwlj(ssdwlj+"");
        //市属单位累计总量
        Long nl40ulj=Long.parseLong(tjDTO.getNl40ulj());
        qsbsDTO.setNl40ulj(nl40ulj+"");
        Long ljzl=nl40dlj+nl40ulj;
        qsbsDTO.setLjzl(ljzl+"");
        qsbsDTO.setNdxz((Long.parseLong(qsbsDTO.getNl40uxz())+Long.parseLong(qsbsDTO.getNl40dxz()))+"");
        qsbsDTO.setNdlc((Long.parseLong(qsbsDTO.getNl40ulc())+Long.parseLong(qsbsDTO.getNl40dlc()))+"");
        ajaxResponse.setData("data",qsbsDTO);
        return ajaxResponse;
    }

    @Override
    public AjaxResponse saveOrUpd(QsbsDTO dto) {
        AjaxResponse ajaxResponse = new AjaxResponse();
        QsbsPO qsbsPO = new QsbsPO();
        BeanUtils.copyProperties(dto, qsbsPO);
        //判断年度是否比初始年度小
        InitPO initPO=initBLO.getInfo();
        if(Long.parseLong(dto.getNd())<=Long.parseLong(initPO.getNd())){
            ajaxResponse.setAppcode("1");
            ajaxResponse.setErrorMsg("年度有误，请刷新页面");
            return ajaxResponse;
        }
        String maxNd=qsbsBLO.getMaxYear();
        if(StringUtils.isNotBlank(maxNd)) {
            if(Long.parseLong(dto.getNd())>Long.parseLong(maxNd)+1){
                ajaxResponse.setAppcode("1");
                ajaxResponse.setErrorMsg("年度有误，请刷新页面");
                return ajaxResponse;
            }
        }else if(Long.parseLong(dto.getNd())!=Long.parseLong(initPO.getNd())+1){
            ajaxResponse.setAppcode("1");
            ajaxResponse.setErrorMsg("年度有误，请刷新页面");
            return ajaxResponse;
        }

        //【年度新增明细】栏目下的“40周岁（含）以上博士新增”+“40周岁以下博士新增”=【年度新增明细】栏目下的“中央、省驻湛单位新增”+“市属单位新增”
        Long num1=Long.parseLong(dto.getNl40uxz())+Long.parseLong(dto.getNl40dxz());
        Long num2=Long.parseLong(dto.getZyszzdwxz())+Long.parseLong(dto.getSsdwxz());
        if(num1!=num2){
            ajaxResponse.setAppcode("1");
            ajaxResponse.setErrorMsg("“40周岁（含）以上博士新增”+“40周岁以下博士新增” 必须等于 “中央、省驻湛单位博士新增”+“市属单位博士新增”");
            return ajaxResponse;
        }
        //【年度流出明细】栏目下的“40周岁（含）以上博士流出”+“40周岁以下博士流出”=【年度流出明细】栏目下的“中央、省驻湛单位流出”+“市属单位流出”
        num1=Long.parseLong(dto.getNl40ulc())+Long.parseLong(dto.getNl40dlc());
        num2=Long.parseLong(dto.getZyszzdwlc())+Long.parseLong(dto.getSsdwlc());
        if(num1!=num2){
            ajaxResponse.setAppcode("1");
            ajaxResponse.setErrorMsg("“40周岁（含）以上博士流出”+“40周岁以下博士流出” 必须等于 “中央、省驻湛单位博士流出”+“市属单位博士流出”");
            return ajaxResponse;
        }
        QsbsDTO qsbsDTO=qsbsBLO.getTjData(dto.getNd());
        //1.40周岁（含）以上博士流出：必须小于或等于“40周岁（含）以上博士累计总量”
        Long nl40ulc=Long.parseLong(dto.getNl40ulc());
        Long nl40ulj=Long.parseLong(qsbsDTO.getNl40ulj());
        if(nl40ulc>nl40ulj){
            ajaxResponse.setAppcode("1");
            ajaxResponse.setErrorMsg("“40周岁（含）以上博士流出” 必须小于或等于 “上一年度的40周岁（含）以上博士累计总量”");
            return ajaxResponse;
        }
        //2.40周岁以下博士流出：必须小于或等于“40周岁以下博士累计总量”
        Long nl40dlc=Long.parseLong(dto.getNl40dlc());
        Long nl40dlj=Long.parseLong(qsbsDTO.getNl40dlj());
        if(nl40dlc>nl40dlj){
            ajaxResponse.setAppcode("1");
            ajaxResponse.setErrorMsg("“40周岁以下博士流出” 必须小于或等于 “上一年度的40周岁以下博士累计总量”");
            return ajaxResponse;
        }
        //3.中央、省驻湛单位流出：必须小于或等于“中央、省驻湛单位累计总量”
        Long zyszzdwlc=Long.parseLong(dto.getZyszzdwlc());
        Long zyszzdwlj=Long.parseLong(qsbsDTO.getZyszzdwlj());
        if(zyszzdwlc>zyszzdwlj){
            ajaxResponse.setAppcode("1");
            ajaxResponse.setErrorMsg("“中央、省驻湛单位流出” 必须小于或等于 “上一年度的中央、省驻湛单位累计总量”");
            return ajaxResponse;
        }
        //4.市属单位流出：必须小于或等于“市属单位累计总量”
        Long ssdwlc=Long.parseLong(dto.getSsdwlc());
        Long ssdwlj=Long.parseLong(qsbsDTO.getSsdwlj());
        if(ssdwlc>ssdwlj){
            ajaxResponse.setAppcode("1");
            ajaxResponse.setErrorMsg("“市属单位流出” 必须小于或等于 “上一年度的市属单位累计总量”");
            return ajaxResponse;
        }
        qsbsBLO.saveOrUpd(qsbsPO);
        return ajaxResponse;
    }

    @Override
    public PageResult getList(QsPageDTO dto, int page, int rows) {
        return qsbsBLO.getList(dto,page,rows);
    }

    @Override
    public AjaxResponse getTjData() {
        AjaxResponse ajaxResponse = new AjaxResponse();
        //判断是否有初始化数据
        int cnt=initBLO.getCnt();
        if(cnt==0){
            ajaxResponse.setAppcode("1");
            ajaxResponse.setErrorMsg("初始数据未设置，请先设置！");
            return ajaxResponse;
        }
        QsbsDTO tjData = qsbsBLO.getTjData(null);
        ajaxResponse.setData("data",tjData);
        return ajaxResponse;
    }
}
