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.QszjBLO;
import com.zjrs.zwnw.zj.bpo.QszjBPO;
import com.zjrs.zwnw.zj.dto.QsDTO;
import com.zjrs.zwnw.zj.dto.QsPageDTO;
import com.zjrs.zwnw.zj.dto.QszjDTO;
import com.zjrs.zwnw.zj.po.InitPO;
import com.zjrs.zwnw.zj.po.QszjPO;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;

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

@Service
public class QszjBPOImpl extends BPOImpl implements QszjBPO {
    @Resource
    private QszjBLO qszjBLO;
    @Resource
    private InitBLO initBLO;
    @Override
    public void export(QsDTO dto, HttpServletResponse res) {
        qszjBLO.export(dto,res);
    }

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

    @Override
    public AjaxResponse getInfo(QsDTO dto) {
        AjaxResponse ajaxResponse = new AjaxResponse();
        QszjPO qszjPO = qszjBLO.getInfo(dto.getNd());
        QszjDTO qszjDTO=new QszjDTO();
        BeanUtils.copyProperties(qszjPO, qszjDTO);
        QszjDTO tjDTO=qszjBLO.getTjData(dto.getNd());
        Long zgjlj=Long.parseLong(tjDTO.getZgjlj());
        qszjDTO.setZgjlj(zgjlj+"");

        Long gjlj=Long.parseLong(tjDTO.getGjlj());
        qszjDTO.setGjlj(gjlj+"");

        Long zjlj=Long.parseLong(tjDTO.getZjlj());
        qszjDTO.setZjlj(zjlj+"");

        Long cjlj=Long.parseLong(tjDTO.getCjlj());
        qszjDTO.setCjlj(cjlj+"");

        Long ljzl=zgjlj+gjlj+zjlj+cjlj;
        qszjDTO.setLjzl(ljzl+"");
        qszjDTO.setNdxz((Long.parseLong(qszjDTO.getZgjxz())+Long.parseLong(qszjDTO.getGjxz())
                +Long.parseLong(qszjDTO.getZjxz())+Long.parseLong(qszjDTO.getCjxz()))+"");
        qszjDTO.setNdlc((Long.parseLong(qszjDTO.getZgjlc())+Long.parseLong(qszjDTO.getGjlc())
                +Long.parseLong(qszjDTO.getZjlc())+Long.parseLong(qszjDTO.getCjlc()))+"");
        ajaxResponse.setData("data",qszjDTO);
        return ajaxResponse;
    }

    @Override
    public AjaxResponse saveOrUpd(QszjDTO dto) {
        AjaxResponse ajaxResponse = new AjaxResponse();
        QszjPO qszjPO = new QszjPO();
        BeanUtils.copyProperties(dto, qszjPO);
        //判断年度是否比初始年度小
        InitPO initPO=initBLO.getInfo();
        if(Long.parseLong(dto.getNd())<=Long.parseLong(initPO.getNd())){
            ajaxResponse.setAppcode("1");
            ajaxResponse.setErrorMsg("年度有误，请刷新页面");
            return ajaxResponse;
        }
        String maxNd=qszjBLO.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;
        }
        QszjDTO qszjDTO=qszjBLO.getTjData(dto.getNd());
        //1.正高级职称流出：必须小于或等于“正高级职称累计总量”。
        Long num1=Long.parseLong(dto.getZgjlc());
        Long num2=Long.parseLong(qszjDTO.getZgjlj());
        if(num1>num2){
            ajaxResponse.setAppcode("1");
            ajaxResponse.setErrorMsg("“正高级职称流出” 必须小于或等于 “上一年度的正高级职称累计总量”");
            return ajaxResponse;
        }
        //2.高级职称流出：必须小于或等于“高级职称累计总量”。
        num1=Long.parseLong(dto.getGjlc());
        num2=Long.parseLong(qszjDTO.getGjlj());
        if(num1>num2){
            ajaxResponse.setAppcode("1");
            ajaxResponse.setErrorMsg("“高级职称流出” 必须小于或等于 “上一年度的高级职称累计总量”");
            return ajaxResponse;
        }
        //3.中级职称流出：必须小于或等于“中级职称累计总量”。
        num1=Long.parseLong(dto.getZjlc());
        num2=Long.parseLong(qszjDTO.getZjlj());
        if(num1>num2){
            ajaxResponse.setAppcode("1");
            ajaxResponse.setErrorMsg("“中级职称流出” 必须小于或等于 “上一年度的中级职称累计总量”");
            return ajaxResponse;
        }
        //初级职称流出：必须小于或等于“初级职称累计总量”。
        num1=Long.parseLong(dto.getCjlc());
        num2=Long.parseLong(qszjDTO.getCjlj());
        if(num1>num2){
            ajaxResponse.setAppcode("1");
            ajaxResponse.setErrorMsg("“初级职称流出” 必须小于或等于 “上一年度的初级职称累计总量”");
            return ajaxResponse;
        }
        qszjBLO.saveOrUpd(qszjPO);
        return ajaxResponse;
    }

    @Override
    public PageResult getList(QsPageDTO dto, int page, int rows) {
        return qszjBLO.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;
        }
        QszjDTO tjData = qszjBLO.getTjData(null);
        ajaxResponse.setData("data",tjData);
        return ajaxResponse;
    }
}
