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

import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONObject;
import com.hzya.frame.grpU8.nxproof.gbizbxmb.entity.GbiZbxmbEntity;
import com.hzya.frame.grpU8.nxproof.gbizbxmb.dao.IGbiZbxmbDao;
import com.hzya.frame.grpU8.nxproof.gbizbxmb.service.IGbiZbxmbService;
import com.hzya.frame.grpU8.nxproof.glczrz.dao.IGlCzrzDao;
import com.hzya.frame.grpU8.nxproof.glczrz.entity.GlCzrzEntity;
import com.hzya.frame.grpU8.nxproof.glfzxzl.dao.IGlFzxzlDao;
import com.hzya.frame.grpU8.nxproof.glfzxzl.entity.GlFzxzlEntity;
import com.hzya.frame.grpU8.nxproof.glxmzl.dao.ISenderGlXmzlDao;
import com.hzya.frame.grpU8.nxproof.glxmzl.entity.SenderGlXmzlEntity;
import com.hzya.frame.grpU8.nxproof.pubbmxx.dao.ISenderPubbmxxDao;
import com.hzya.frame.grpU8.nxproof.pubbmxx.entity.SenderPubbmxxEntity;
import com.hzya.frame.grpU8.nxproof.zbwhsz.dao.IZbWhszDao;
import com.hzya.frame.grpU8.nxproof.zbwhsz.entity.ZbWhszEntity;
import com.hzya.frame.grpU8.nxproof.zbzbly.dao.IZbZblyDao;
import com.hzya.frame.grpU8.nxproof.zbzbly.entity.ZbZblyEntity;
import com.hzya.frame.web.entity.BaseResult;
import com.hzya.frame.web.entity.JsonResultEntity;
import org.springframework.stereotype.Service;
import org.springframework.beans.factory.annotation.Autowired;
import javax.annotation.Resource;
import com.hzya.frame.basedao.service.impl.BaseService;

import java.util.UUID;

/**
 * (GbiZbxmb)表服务实现类
 *
 * @author makejava
 * @since 2024-08-14 16:58:44
 */
@Service(value = "gbiZbxmbService")
public class GbiZbxmbServiceImpl extends BaseService<GbiZbxmbEntity, String> implements IGbiZbxmbService {
     
    private IGbiZbxmbDao gbiZbxmbDao;
	@Autowired
	private ISenderPubbmxxDao pubbmxxDao;
	@Autowired
	private ISenderGlXmzlDao glXmzlDao;
	@Autowired
	private IZbWhszDao zbWhszDao;
	@Autowired
	private IZbZblyDao zbZblyDao;
	@Autowired
	private IGlFzxzlDao glFzxzlDao;
	@Autowired
	private IGlCzrzDao glCzrzDao;


	@Autowired
	public void setGbiZbxmbDao(IGbiZbxmbDao dao) {
		this.gbiZbxmbDao = dao;
		this.dao = dao;
	}

	//保存项目指标
	@Override
	public Object saveGbiZbxmb(JSONObject json) {
		JSONObject jsonObject = json.getJSONObject("jsonStr");
		if(!checkStr(jsonObject.getString("gsdm"))){
			return BaseResult.getFailureMessageEntity("请传递公司代码");
		}
		if(!checkStr(jsonObject.getString("kjnd"))){
			return BaseResult.getFailureMessageEntity("请传递会计年度");
		}
		if(!checkStr(jsonObject.getString("zblb"))){
			return BaseResult.getFailureMessageEntity("请传递指标类别");
		}
		GbiZbxmbEntity gbiZbxmbEntity = jsonObject.toJavaObject(GbiZbxmbEntity.class);
		try {
			//查询指标id最大值和指标代码最大值
			GbiZbxmbEntity gbiZbxmbEntityZbid = gbiZbxmbDao.queryZbidAndZbdm(gbiZbxmbEntity);
			gbiZbxmbEntity.setZbid(gbiZbxmbEntityZbid.getZbid());
			gbiZbxmbEntity.setZbdm(gbiZbxmbEntityZbid.getZbdm());
		}catch (Exception e){
			logger.info("根据会计年度：{}，公司代码：{}，指标类别：{}获取指标id和指标代码失败:{}",
					jsonObject.getString("kjnd"),jsonObject.getString("gsdm"),jsonObject.getString("zblb"),e.getMessage());
			return BaseResult.getFailureMessageEntity("获取指标id和指标代码失败");
		}
		//更新其他表得使用状态
		JsonResultEntity jsonResultEntity = updateOtherTable(gbiZbxmbEntity);
		//保存指标项目表
		try {
			gbiZbxmbEntity.setZt("1");//状态为1为保存
			gbiZbxmbEntity.setIdzbbh(String.valueOf(UUID.randomUUID()));//IDZBBH
			gbiZbxmbEntity.setSfjz("0");//是否结转
			gbiZbxmbEntity.setCyskzfs("0");//超预算控制方式
			gbiZbxmbEntity.setYjbfb(100.00);//预警百分比
			gbiZbxmbEntity.setPfrid(-1);//批复人id
			gbiZbxmbEntity.setShrid(-1);//审核人id
			gbiZbxmbEntity.setSjly(1);//数据来源
			gbiZbxmbEntity.setXfzt("0");//下发状态
			gbiZbxmbEntity.setNcysy(0.00);//年初已使用
			gbiZbxmbEntity.setSjzbid(0);//上级指标id

			logger.info("=========开始保存指标项目表=========");
			GbiZbxmbEntity save = gbiZbxmbDao.save(gbiZbxmbEntity);
			logger.info("==========指标项目表保存完毕======");
			GlCzrzEntity glCzrzEntity=new GlCzrzEntity();
			glCzrzEntity.setStation("yusuanzhibiaobaocun");
			logger.info("==========开始查询操作日志的最大值no======");
			GlCzrzEntity glCzrzEntityNo = glCzrzDao.queryCzrzNo(glCzrzEntity);
			logger.info("根据station为:{}查询出来的no值为:{}",glCzrzEntity.getStation(),glCzrzEntityNo.getNo());
			glCzrzEntity.setNo(glCzrzEntityNo.getNo());
			glCzrzEntity.setName("0.指标保存");
			glCzrzEntity.setCznr("增加指标"+gbiZbxmbEntity.getZbid()+"(MXZB)");
			logger.info("==========开始保存操作日志======");
			glCzrzDao.save(glCzrzEntity);
			logger.info("==========操作日志保存完毕======");
			JSONObject jsonObjectSave=new JSONObject();
			jsonObjectSave.put("status","200");
			jsonObjectSave.put("zbxm",save);
			return jsonObjectSave;
		}catch (Exception e){
			logger.info("保存预算指标失败:{}",e.getMessage());
			return BaseResult.getFailureMessageEntity("保存指标失败");
		}
	}

	@Override
	public Object updateGbiZbxmb(JSONObject json) {
		JSONObject jsonObject = json.getJSONObject("jsonStr");
		if(!checkStr(jsonObject.getString("gsdm"))){
			return BaseResult.getFailureMessageEntity("请传递公司代码");
		}
		if(!checkStr(jsonObject.getString("kjnd"))){
			return BaseResult.getFailureMessageEntity("请传递会计年度");
		}
		if(!checkStr(jsonObject.getString("zblb"))){
			return BaseResult.getFailureMessageEntity("请传递指标类别");
		}
		if(!checkStr(jsonObject.getString("zbid"))){
			return BaseResult.getFailureMessageEntity("请传递指标id");
		}
		GbiZbxmbEntity gbiZbxmbEntity = jsonObject.toJavaObject(GbiZbxmbEntity.class);
		try {
			JsonResultEntity jsonResultEntity = updateOtherTable(gbiZbxmbEntity);
			gbiZbxmbEntity.setZt("1");
			gbiZbxmbEntity.setNcysy(0.00);//年初已使用
			logger.info("=========开始更新指标项目表=========");
			GbiZbxmbEntity save = gbiZbxmbDao.update(gbiZbxmbEntity);
			logger.info("==========指标项目表更新完毕======");
			GlCzrzEntity glCzrzEntity=new GlCzrzEntity();
			glCzrzEntity.setStation("yusuanzhibiaobaocun");
			logger.info("==========开始查询操作日志的最大值no======");
			GlCzrzEntity glCzrzEntityNo = glCzrzDao.queryCzrzNo(glCzrzEntity);
			logger.info("根据station为:{}查询出来的no值为:{}",glCzrzEntity.getStation(),glCzrzEntityNo.getNo());
			glCzrzEntity.setNo(glCzrzEntityNo.getNo());
			glCzrzEntity.setName("0.指标修改");
			glCzrzEntity.setCznr("修改指标"+gbiZbxmbEntity.getZbid()+"(MXZB)");
			logger.info("==========开始保存操作日志======");
			glCzrzDao.save(glCzrzEntity);
			logger.info("==========操作日志保存完毕======");
			JSONObject jsonObjectUpdate =new JSONObject();
			jsonObjectUpdate.put("status","200");
			jsonObjectUpdate.put("zbxm",save);
			return jsonObjectUpdate;
		}catch (Exception e){
			logger.info("更新预算指标失败:{}",e.getMessage());
			return BaseResult.getFailureMessageEntity("修改指标失败");
		}
	}

	@Override
	public Object deleteGbiZbxmb(JSONObject json) {
		JSONObject jsonObject = json.getJSONObject("jsonStr");
		if(!checkStr(jsonObject.getString("gsdm"))){
			return BaseResult.getFailureMessageEntity("请传递公司代码");
		}
		if(!checkStr(jsonObject.getString("kjnd"))){
			return BaseResult.getFailureMessageEntity("请传递会计年度");
		}
		if(!checkStr(jsonObject.getString("zblb"))){
			return BaseResult.getFailureMessageEntity("请传递指标类别");
		}
		if(!checkStr(jsonObject.getString("zbid"))){
			return BaseResult.getFailureMessageEntity("请传递指标id");
		}
		GbiZbxmbEntity gbiZbxmbEntity = jsonObject.toJavaObject(GbiZbxmbEntity.class);
		try {
			gbiZbxmbEntity.setZt("1");
			logger.info("=========开始删除指标项目表=========");
			int delete = gbiZbxmbDao.delete("entity_delete", gbiZbxmbEntity);
			logger.info("==========指标项目表删除完毕======");
			GlCzrzEntity glCzrzEntity=new GlCzrzEntity();
			glCzrzEntity.setStation("yusuanzhibiaobaocun");
			logger.info("==========开始查询操作日志的最大值no======");
			GlCzrzEntity glCzrzEntityNo = glCzrzDao.queryCzrzNo(glCzrzEntity);
			logger.info("根据station为:{}查询出来的no值为:{}",glCzrzEntity.getStation(),glCzrzEntityNo.getNo());
			glCzrzEntity.setNo(glCzrzEntityNo.getNo());
			glCzrzEntity.setName("0.指标删除");
			glCzrzEntity.setCznr("删除指标"+gbiZbxmbEntity.getZbid()+"(MXZB)");
			logger.info("==========开始保存操作日志======");
			glCzrzDao.save(glCzrzEntity);
			logger.info("==========操作日志保存完毕======");
			JSONObject jsonObjectDelete =new JSONObject();
			jsonObjectDelete.put("status","200");
			jsonObjectDelete.put("zbxm",delete);
			return jsonObjectDelete;
		}catch (Exception e){
			logger.info("删除指标项目失败:{}",e.getMessage());
			return BaseResult.getFailureMessageEntity("删除指标失败");
		}
	}


	private JsonResultEntity updateOtherTable(GbiZbxmbEntity gbiZbxmbEntity){
		try {
			if(StrUtil.isNotEmpty(gbiZbxmbEntity.getBmdm()) && StrUtil.isNotEmpty(gbiZbxmbEntity.getBmmc()) ){
				logger.info("===========开始更新部门信息得使用状态=========");
				//根据部门代码，会计年度，公司代码更新部门使用状态为1
				SenderPubbmxxEntity pubbmxxEntity=new SenderPubbmxxEntity();
				pubbmxxEntity.setGsdm(gbiZbxmbEntity.getGsdm());
				pubbmxxEntity.setKjnd(gbiZbxmbEntity.getKjnd());
				pubbmxxEntity.setBmdm(gbiZbxmbEntity.getBmdm());
				pubbmxxEntity.setSyzt("1");
				pubbmxxDao.update(pubbmxxEntity);
				logger.info("===========更新部门信息得使用状态完毕=========");
			}
		}catch (Exception e){
			logger.info("更新部门信息得使用状态失败:{}",e.getMessage());
			return BaseResult.getFailureMessageEntity("更新部门信息得使用状态失败");
		}
		try {
			if(StrUtil.isNotEmpty(gbiZbxmbEntity.getXmdm()) && StrUtil.isNotEmpty(gbiZbxmbEntity.getXmmc())) {
				//根据部门代码，会计年度，公司代码更新项目使用状态为1
				SenderGlXmzlEntity glXmzlEntity = new SenderGlXmzlEntity();
				glXmzlEntity.setGsdm(gbiZbxmbEntity.getGsdm());
				glXmzlEntity.setKjnd(gbiZbxmbEntity.getKjnd());
				glXmzlEntity.setXmdm(gbiZbxmbEntity.getXmdm());
				glXmzlEntity.setSyzt("1");
				logger.info("===========开始更新项目资料得使用状态=========");
				glXmzlDao.update(glXmzlEntity);
				logger.info("===========更新项目资料得使用状态完毕=========");
			}
		}catch (Exception e){
			logger.info("更新项目资料得使用状态失败:{}",e.getMessage());
			return BaseResult.getFailureMessageEntity("更新项目资料得使用状态失败");
		}
		try {
			if(StrUtil.isNotEmpty(gbiZbxmbEntity.getWhdm()) && StrUtil.isNotEmpty(gbiZbxmbEntity.getWhmc())){
				//根据部门代码，会计年度，公司代码更新文号使用状态为1
				ZbWhszEntity zbWhszEntity=new ZbWhszEntity();
				zbWhszEntity.setGsdm(gbiZbxmbEntity.getGsdm());
				zbWhszEntity.setKjnd(gbiZbxmbEntity.getKjnd());
				zbWhszEntity.setWhdm(gbiZbxmbEntity.getWhdm());
				zbWhszEntity.setSyzt("1");
				logger.info("===========开始更新文号得使用状态=========");
				zbWhszDao.update(zbWhszEntity);
				logger.info("===========更新文号得使用状态完毕=========");
			}
		}catch (Exception e){
			logger.info("更新文号得使用状态失败:{}",e.getMessage());
			return BaseResult.getFailureMessageEntity("更新文号得使用状态失败");
		}
		try {
			if(StrUtil.isNotEmpty(gbiZbxmbEntity.getZblydm()) && StrUtil.isNotEmpty(gbiZbxmbEntity.getZblymc())) {
				//根据部门代码，会计年度，公司代码更新指标来源使用状态为1
				ZbZblyEntity zblyEntity = new ZbZblyEntity();
				zblyEntity.setGsdm(gbiZbxmbEntity.getGsdm());
				zblyEntity.setKjnd(gbiZbxmbEntity.getKjnd());
				zblyEntity.setZblydm(gbiZbxmbEntity.getZblydm());
				zblyEntity.setSyzt("1");
				logger.info("===========开始更新指标来源得使用状态=========");
				zbZblyDao.update(zblyEntity);
				logger.info("===========更新指标来源得使用状态完毕=========");
			}
		}catch (Exception e){
			logger.info("更新指标来源得使用状态失败:{}",e.getMessage());
			return BaseResult.getFailureMessageEntity("更新指标来源得使用状态失败");
		}
		try {
			//根据类别代码，会计年度，公司代码,辅助代码更新使用状态
			//部门经济科目
			GlFzxzlEntity glFzxzlEntity=new GlFzxzlEntity();
			glFzxzlEntity.setGsdm(gbiZbxmbEntity.getGsdm());
			glFzxzlEntity.setKjnd(gbiZbxmbEntity.getKjnd());
			glFzxzlEntity.setSyzt("1");
			try {
				if(StrUtil.isNotEmpty(gbiZbxmbEntity.getJjkmdm()) &&  StrUtil.isNotEmpty(gbiZbxmbEntity.getJjkmmc())) {
					logger.info("===========开始更新辅助项资料(部门经济科目)得使用状态=========");
					glFzxzlEntity.setFzdm(gbiZbxmbEntity.getJjkmdm());
					glFzxzlEntity.setLbdm("5");
					glFzxzlDao.update(glFzxzlEntity);
					logger.info("===========更新辅助项资料(部门经济科目)得使用状态完毕=========");
				}
			}catch (Exception e){
				logger.info("更新辅助项资料(部门经济科目)得使用状态失败:{}",e.getMessage());
				return BaseResult.getFailureMessageEntity("更新辅助项资料(部门经济科目)得使用状态");
			}
			try {
				if(StrUtil.isNotEmpty(gbiZbxmbEntity.getFz6dm()) && StrUtil.isNotEmpty(gbiZbxmbEntity.getFz6mc())){
					//资金性质
					glFzxzlEntity.setLbdm("6");
					glFzxzlEntity.setFzdm(gbiZbxmbEntity.getFz6dm());
					logger.info("===========开始更新辅助项资料(资金性质)得使用状态=========");
					glFzxzlDao.update(glFzxzlEntity);
					logger.info("===========更新辅助项资料(资金性质)得使用状态完毕=========");
				}
			}catch (Exception e){
				logger.info("更新辅助项资料(资金性质)得使用状态失败:{}",e.getMessage());
				return BaseResult.getFailureMessageEntity("更新辅助项资料(资金性质)得使用状态失败");
			}
			try {
				if(StrUtil.isNotEmpty(gbiZbxmbEntity.getFz8dm()) && StrUtil.isNotEmpty(gbiZbxmbEntity.getFz8mc())) {
					//国库项目
					glFzxzlEntity.setLbdm("8");
					glFzxzlEntity.setFzdm(gbiZbxmbEntity.getFz8dm());
					logger.info("===========开始更新辅助项资料(国库项目)得使用状态=========");
					glFzxzlDao.update(glFzxzlEntity);
					logger.info("===========更新辅助项资料(国库项目)得使用状态完毕=========");
				}
			}catch (Exception e){
				logger.info("更新辅助项资料(国库项目)得使用状态失败:{}",e.getMessage());
				return BaseResult.getFailureMessageEntity("更新辅助项资料(国库项目)得使用状态失败");
			}
			try {
				if(StrUtil.isNotEmpty(gbiZbxmbEntity.getFz9dm()) && StrUtil.isNotEmpty(gbiZbxmbEntity.getFz9mc())){
					//经费类型I
					glFzxzlEntity.setLbdm("9");
					glFzxzlEntity.setFzdm(gbiZbxmbEntity.getFz9dm());
					logger.info("===========开始更新辅助项资料(经费类型I)得使用状态=========");
					glFzxzlDao.update(glFzxzlEntity);
					logger.info("===========更新辅助项资料(经费类型I)得使用状态完毕=========");
				}
			}catch (Exception e){
				logger.info("更新辅助项资料(经费类型I)得使用状态失败:{}",e.getMessage());
				return BaseResult.getFailureMessageEntity("更新辅助项资料(经费类型I)得使用状态失败");
			}
		}catch (Exception e){
			logger.info("更新辅助项资料得使用状态失败:{}",e.getMessage());
			return BaseResult.getFailureMessageEntity("更新辅助项资料得使用状态失败");
		}
		return BaseResult.getSuccessMessageEntity("相关得表状态都已修改");
	}
}
