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

import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.github.pagehelper.PageInfo;
import com.hzya.frame.basedao.service.impl.BaseService;
import com.hzya.frame.grpU8.nxproof.gbizbxmb.dao.IGbiZbxmbDao;
import com.hzya.frame.grpU8.nxproof.gbizbxmb.entity.GbiZbxmbEntity;
import com.hzya.frame.grpU8.nxproof.pubbmxx.dao.ISenderPubbmxxDao;
import com.hzya.frame.grpU8.nxproof.pubbmxx.entity.SenderPubbmxxEntity;
import com.hzya.frame.grpU8.nxproof.pubbmxx.service.ISenderPubbmxxService;
import com.hzya.frame.web.entity.BaseResult;
import com.hzya.frame.web.entity.JsonResultEntity;
import org.apache.commons.collections.CollectionUtils;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

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

/**
 * (Pubbmxx)表服务实现类
 *
 * @author makejava
 * @since 2024-06-20 09:48:44
 */
@Service(value = "SenderPubbmxxServiceImpl")
public class SenderPubbmxxServiceImpl extends BaseService<SenderPubbmxxEntity, String> implements ISenderPubbmxxService {


    @Autowired
	private IGbiZbxmbDao gbiZbxmbDao;

	private ISenderPubbmxxDao senderPubbmxxDao;
    
    @Autowired
	public void setSenderPubbmxxDao(ISenderPubbmxxDao dao) {
		this.senderPubbmxxDao = dao;
		this.dao = dao;
	}

	@Override
	public Object pubbmxxSynchronization(JSONObject json) {
		JSONObject jsonObject = json.getJSONObject("jsonStr");
		SenderPubbmxxEntity senderPubbmxxEntity = jsonObject.toJavaObject(SenderPubbmxxEntity.class);
		List<SenderPubbmxxEntity> senderPubbmxxEntities=new ArrayList<>();
		String result=null;
		try {
			//如果没有传入年度，则查询当年得，避免数据查询太大
			if(senderPubbmxxEntity.getKjnd()==null){
				senderPubbmxxEntity.setKjnd(DateUtil.format(new Date(),"yyyy"));
			}
			/*try {
				//同步南浔区人民医院001部门信息
				senderPubbmxxEntity.setGsdm("0101010101");
				logger.info("==========开始查询南浔区人民医院部门信息========");
				senderPubbmxxEntities = sqlSessionNxrm.selectList("SenderPubbmxxEntity_list_base",senderPubbmxxEntity);
				result =sendBmxxToHealthBureau(senderPubbmxxEntities);
				logger.info("南浔区人民医院GRPU8部门信息同步结果为:{}",result);
			}catch (Exception e){
				logger.info("南浔区人民医院GRPU8部门信息同步失败:{}",e.getMessage());
				e.printStackTrace();
			}*/
			try {
				//同步南浔区练市人民医院003部门信息
				senderPubbmxxEntity.setGsdm("0101010204");
				logger.info("==========开始查询南浔区练市人民医院部门信息========");
				senderPubbmxxEntities = senderPubbmxxDao.querySenderPubbmxxEntity(senderPubbmxxEntity);
				result =sendBmxxToHealthBureau(senderPubbmxxEntities);
				logger.info("南浔区练市人民医院GRPU8部门信息同步结果为:{}",result);
			}catch (Exception e){
				logger.info("南浔区练市人民医院GRPU8部门信息同步失败:{}",e.getMessage());
				e.printStackTrace();
			}
			/*try {
				//同步练市镇中心卫生院005部门信息
				senderPubbmxxEntity.setGsdm("0101010202");
				logger.info("==========开始查询南浔区练市镇中心卫生院部门信息========");
				senderPubbmxxEntities = sqlSessionNxrm.selectList("SenderPubbmxxEntity_list_base",senderPubbmxxEntity);
				result =sendBmxxToHealthBureau(senderPubbmxxEntities);
				logger.info("南浔区练市镇中心卫生院GRPU8部门信息同步结果为:{}",result);
			}catch (Exception e){
				logger.info("南浔区练市镇中心卫生院GRPU8部门信息同步失败:{}",e.getMessage());
				e.printStackTrace();
			}*/
			/*try {
				//同步善琏镇卫生院007部门信息
				senderPubbmxxEntity.setGsdm("0101010204");
				logger.info("==========开始查询南浔区善琏镇卫生院部门信息========");
				senderPubbmxxEntities = sqlSessionNxrm.selectList("SenderPubbmxxEntity_list_base",senderPubbmxxEntity);
				result =sendBmxxToHealthBureau(senderPubbmxxEntities);
				logger.info("南浔区善琏镇卫生院GRPU8部门信息同步结果为:{}",result);
			}catch (Exception e){
				logger.info("南浔区善琏镇卫生院GRPU8部门信息同步失败:{}",e.getMessage());
				e.printStackTrace();
			}*/
			/*try {
				//同步双林镇中心卫生院004部门信息
				SenderPubbmxxEntity.setGsdm("0101010201");
				senderPubbmxxEntities = sqlSessionSlz.selectList("SenderPubbmxxEntity_list_base",senderPubbmxxEntity);
				result =sendBmxxToHealthBureau(senderPubbmxxEntities);
				logger.info("双林镇中心卫生院GRPU8部门信息同步结果为:{}",result);
			}catch (Exception e){
				logger.info("双林镇中心卫生院GRPU8部门信息同步失败:{}",e.getMessage());
				e.printStackTrace();
			}
			try {
				//同步菱湖镇中心卫生院009部门信息
				SenderPubbmxxEntity.setGsdm("0101020201");
				senderPubbmxxEntities = sqlSessionLhz.selectList("SenderPubbmxxEntity_list_base",senderPubbmxxEntity);
				result =sendBmxxToHealthBureau(senderPubbmxxEntities);
				logger.info("菱湖镇中心卫生院GRPU8部门信息同步结果为:{}",result);
			}catch (Exception e){
				logger.info("菱湖镇中心卫生院GRPU8部门信息同步失败:{}",e.getMessage());
				e.printStackTrace();
			}
			try {
				//同步和孚镇卫生院010部门信息
				SenderPubbmxxEntity.setGsdm("0101020202");
				senderPubbmxxEntities = sqlSessionHfz.selectList("SenderPubbmxxEntity_list_base",senderPubbmxxEntity);
				result =sendBmxxToHealthBureau(senderPubbmxxEntities);
				logger.info("和孚镇卫生院GRPU8部门信息同步结果为:{}",result);
			}catch (Exception e){
				logger.info("和孚镇卫生院GRPU8部门信息同步失败:{}",e.getMessage());
				e.printStackTrace();
			}
			try {
				//同步千金镇卫生院011部门信息
				SenderPubbmxxEntity.setGsdm("0101020203");
				senderPubbmxxEntities = sqlSessionQjz.selectList("SenderPubbmxxEntity_list_base",senderPubbmxxEntity);
				result =sendBmxxToHealthBureau(senderPubbmxxEntities);
				logger.info("千金镇卫生院GRPU8部门信息同步结果为:{}",result);
			}catch (Exception e){
				logger.info("千金镇卫生院GRPU8部门信息同步失败:{}",e.getMessage());
				e.printStackTrace();
			}
			try {
				//同步石崇镇卫生院012部门信息
				SenderPubbmxxEntity.setGsdm("0101020204");
				senderPubbmxxEntities = sqlSessionScz.selectList("SenderPubbmxxEntity_list_base",senderPubbmxxEntity);
				result =sendBmxxToHealthBureau(senderPubbmxxEntities);
				logger.info("石崇镇卫生院GRPU8部门信息同步结果为:{}",result);
			}catch (Exception e){
				logger.info("石崇镇卫生院GRPU8部门信息同步失败:{}",e.getMessage());
				e.printStackTrace();
			}
			try {
				//同步南浔镇中心卫生院014部门信息
				SenderPubbmxxEntity.setGsdm("010202");
				senderPubbmxxEntities = sqlSessionNxz.selectList("SenderPubbmxxEntity_list_base",senderPubbmxxEntity);
				result =sendBmxxToHealthBureau(senderPubbmxxEntities);
				logger.info("南浔镇中心卫生院GRPU8部门信息同步结果为:{}",result);
			}catch (Exception e){
				logger.info("南浔镇中心卫生院GRPU8部门信息同步失败:{}",e.getMessage());
				e.printStackTrace();
			}*/
		}catch (Exception e){
			logger.info("GRPU8部门信息同步失败:{}",e.getMessage());
			throw new RuntimeException(e.getMessage());
		}
		JSONObject jsonObject1=new JSONObject();
		jsonObject1.put("status","200");
		jsonObject1.put("result",result);
		return jsonObject1;
	}

	private String sendBmxxToHealthBureau(List<SenderPubbmxxEntity> senderPubbmxxEntities){
			//查询发送方得部门信息数据
			if (CollectionUtils.isEmpty(senderPubbmxxEntities)) {
				logger.info("GRPU8没有需要同步得部门信息");
				return "GRPU8没有需要同步得部门信息";
			} else {
				for (SenderPubbmxxEntity bmxxEntity : senderPubbmxxEntities) {
					 //bmxxEntity.setKjnd("2021");
					//根据会计年度，公司代码，部门代码查询数据是否已经同步过
					SenderPubbmxxEntity receiverPubbmxxEntity = new SenderPubbmxxEntity();
					receiverPubbmxxEntity.setKjnd(bmxxEntity.getKjnd());
					receiverPubbmxxEntity.setGsdm(bmxxEntity.getGsdm());
					receiverPubbmxxEntity.setBmdm(bmxxEntity.getBmdm());
					try {
						List<SenderPubbmxxEntity> receiverPubbmxxEntities =queryEntityPageHealthBureau(receiverPubbmxxEntity);
						//设置id为会计年度，公司代码，部门代码拼接，测试时候这样，具体看情况
						bmxxEntity.setId(bmxxEntity.getGsdm() + '-' + bmxxEntity.getKjnd() + '-' + bmxxEntity.getBmdm());
						JsonResultEntity jsonResultEntity=null;
						if (CollectionUtils.isEmpty(receiverPubbmxxEntities)) {
							logger.info("===========开始将公司编码为：{}得GRPU8部门信息同步新增到卫生局GRPU8中=============",bmxxEntity.getGsdm());
							JSONObject jsonObjectStr = new JSONObject();
							jsonObjectStr.put("jsonStr", bmxxEntity);
							Object o = saveEntityHealthBureau(jsonObjectStr);
							JSONObject json = (JSONObject) JSON.toJSON(o);
							if(json.getString("status").equalsIgnoreCase("200")){
								 logger.info("公司编码{}得GROU8部门信息同步保存返回结果为:{}",bmxxEntity.getGsdm(),json.getString("bmxx"));
							 }
							/*if (jsonObjectAttribute != null) {
								logger.info("===========开始将发送方的GRPU8部门信息新增到部门日志中=============");
								//保存发送方得日志
								bmxxEntity.setDataSourceCode(grp_data_source_code);
								senderPubbmxxDao.saveSenderPubbmxxEntity(bmxxEntity);
							}*/
						} else {
							logger.info("===========开始将公司编码为：{}得GRPU8部门信息同步更新到卫生局GRPU8中=============",bmxxEntity.getGsdm());
							JSONObject jsonObjectStr = new JSONObject();
							jsonObjectStr.put("jsonStr", bmxxEntity);
							Object o = updateEntityHealthBureau(jsonObjectStr);
							JSONObject json = (JSONObject) JSON.toJSON(o);
							if(json.getString("status").equalsIgnoreCase("200")){
								//JSONObject jsonObjectAttribute = (JSONObject) JSONObject.toJSON(jsonResultEntity.getAttribute());
								logger.info("公司编码{}得GROU8部门信息同步更新返回结果为:{}",bmxxEntity.getGsdm(),json.getString("bmxx"));
							}
							/*if (jsonObjectAttribute != null) {
								logger.info("===========开始将发送方的GRPU8部门信息更新到部门日志中=============");
								//保存发送方得日志
								bmxxEntity.setDataSourceCode(grp_data_source_code);
								senderPubbmxxDao.updateSenderPubbmxxEntity(bmxxEntity);
							}*/
						}
					} catch (Exception e) {
						logger.info("公司编码{}得GRPU8部门信息同步失败:{}",bmxxEntity.getGsdm(), e.getMessage());
						e.printStackTrace();
					}
				}
				return "同步GROU8部门信息成功";
			}
	}

	//查询部门信息
	@Override
	public Object queryEntityPage(JSONObject json) {
		JSONObject jsonObject = json.getJSONObject("jsonStr");
		SenderPubbmxxEntity senderPubbmxxEntity = jsonObject.toJavaObject(SenderPubbmxxEntity.class);
		List<SenderPubbmxxEntity> senderPubbmxxEntities=new ArrayList<>();
		//如果没有传入年度，则查询当年得，避免数据查询太大
		if(senderPubbmxxEntity.getKjnd()==null){
			senderPubbmxxEntity.setKjnd(DateUtil.format(new Date(),"yyyy"));
		}
		if(StrUtil.isEmpty(senderPubbmxxEntity.getGsdm())){
			logger.info("======根据公司编码:{}查询部门信息为空",senderPubbmxxEntity.getGsdm());
			return BaseResult.getFailureMessageEntity("请传递公司编码");
		}
		try {
			/*switch (SenderPubbmxxEntity.getGsdm()){
				case "0101010103"://练市人民医院
					senderPubbmxxEntities = senderPubbmxxDao.queryByLike(SenderPubbmxxEntity);
					break;
				case "0101010201"://双林镇中心卫生院
					senderPubbmxxEntities = senderPubbmxxDao.queryByLike(SenderPubbmxxEntity);
					break;
				case "0101010202"://练市镇中心卫生院
					senderPubbmxxEntities = senderPubbmxxDao.queryByLike(SenderPubbmxxEntity);
					break;
				case "0101010204"://善琏镇卫生院
					senderPubbmxxEntities = senderPubbmxxDao.queryByLike(SenderPubbmxxEntity);
					break;
				case "0101020201":
					senderPubbmxxEntities = senderPubbmxxDao.queryByLike(SenderPubbmxxEntity);
					break;
				case "0101020202":
					senderPubbmxxEntities = senderPubbmxxDao.queryByLike(SenderPubbmxxEntity);
					break;
				case "0101020203":
					senderPubbmxxEntities = senderPubbmxxDao.queryByLike(SenderPubbmxxEntity);
					break;
				case "0101020204":
					senderPubbmxxEntities = senderPubbmxxDao.queryByLike(SenderPubbmxxEntity);
					break;
				case "0101010101"://南浔区人民医院
					senderPubbmxxEntities = senderPubbmxxDao.queryByLike(SenderPubbmxxEntity);
					break;
				default:
					break;
			}*/
			senderPubbmxxEntities = senderPubbmxxDao.querySenderPubbmxxEntity(senderPubbmxxEntity);
			PageInfo pageInfo=new PageInfo(senderPubbmxxEntities);
			JSONObject jsonParasm=new JSONObject();
			jsonParasm.put("status","200");
			jsonParasm.put("pageInfo",pageInfo);
			return jsonParasm;
		}catch (Exception e){
			logger.info("查询公司编码为：{}得GROU8部门信息失败:{}",senderPubbmxxEntity.getGsdm(),e.getMessage());
			return BaseResult.getFailureMessageEntity("查询GROU8部门信息失败");
		}
	}


	//查询部门信息  卫生局
	@Override
	public List<SenderPubbmxxEntity> queryEntityPageHealthBureau(SenderPubbmxxEntity senderPubbmxxEntity) {
		try {
			logger.info("====开始根据公司代码：{}查询卫生局中得部门信息",senderPubbmxxEntity.getGsdm());
			List<SenderPubbmxxEntity> receiverPubbmxxEntities = senderPubbmxxDao.queryPubbmxxHealthBureau(senderPubbmxxEntity);
			return  receiverPubbmxxEntities;
		}catch (Exception e){
			logger.info("根据公司编码：{}查询GROU8部门信息失败:{}",senderPubbmxxEntity.getGsdm(),e.getMessage());
			e.printStackTrace();
		}
		return null;
	}


	//保存部门信息 卫生局
	@Override
	public Object saveEntityHealthBureau(JSONObject json) {
		JSONObject jsonObject = json.getJSONObject("jsonStr");
		SenderPubbmxxEntity receiverPubbmxxEntity = jsonObject.toJavaObject(SenderPubbmxxEntity.class);
		if (!checkStr(jsonObject.getString("kjnd"))) {
			logger.info("============保存部门信息时会计年度为空===========");
			return BaseResult.getFailureMessageEntity("会计年度为空");
		}
		if (!checkStr(jsonObject.getString("gsdm"))) {
			logger.info("============保存部门信息时公司代码为空===========");
			return BaseResult.getFailureMessageEntity("公司代码为空");
		}
		if (!checkStr(jsonObject.getString("bmdm"))) {
			logger.info("============保存部门信息时部门编码为空===========");
			return BaseResult.getFailureMessageEntity("部门编码为空");
		}
		if (!checkStr(jsonObject.getString("bmmc"))) {
			logger.info("============保存部门信息时部门名称为空===========");
			return BaseResult.getFailureMessageEntity("部门名称为空");
		}
		if (!checkStr(jsonObject.getString("jlrId"))) {
			logger.info("============保存部门信息时建立人id为空===========");
			return BaseResult.getFailureMessageEntity("建立人id为空");
		}
		if (!checkStr(jsonObject.getString("jlRq"))) {
			logger.info("============保存部门信息时建立日期为空===========");
			return BaseResult.getFailureMessageEntity("建立日期为空");
		}
		try {
			SenderPubbmxxEntity senderPubbmxxEntity=new SenderPubbmxxEntity();
			senderPubbmxxEntity.setKjnd(receiverPubbmxxEntity.getKjnd());
			senderPubbmxxEntity.setGsdm(receiverPubbmxxEntity.getGsdm());
			senderPubbmxxEntity.setBmdm(receiverPubbmxxEntity.getBmdm());
			senderPubbmxxEntity.setDataSourceCode(receiverPubbmxxEntity.getDataSourceCode());
			List<SenderPubbmxxEntity> senderPubbmxxEntities = queryEntityPageHealthBureau(senderPubbmxxEntity);
			if(CollectionUtils.isEmpty(senderPubbmxxEntities)){
				receiverPubbmxxEntity.setId(receiverPubbmxxEntity.getGsdm()+'-'+receiverPubbmxxEntity.getKjnd()+'-'+receiverPubbmxxEntity.getBmdm());
				logger.info("==========开始保存公司编码为：{}得部门信息，id为:{}=========",receiverPubbmxxEntity.getGsdm(),receiverPubbmxxEntity.getId());
				SenderPubbmxxEntity receiverPubbmxxEntity1 = senderPubbmxxDao.savePubbmxxHealthBureau(receiverPubbmxxEntity);
				JSONObject jsonObject1=new JSONObject();
				jsonObject1.put("status","200");
				jsonObject1.put("bmxx",receiverPubbmxxEntity1);
				return jsonObject1;
			}else{
				logger.info("==========开始更新公司编码为：{}得部门信息，代码为:{}=========",receiverPubbmxxEntity.getGsdm(),receiverPubbmxxEntity.getBmdm());
				SenderPubbmxxEntity receiverPubbmxxEntity1 = senderPubbmxxDao.updatePubbmxxHealthBureau(receiverPubbmxxEntity);
				JSONObject jsonObject1=new JSONObject();
				jsonObject1.put("status","200");
				jsonObject1.put("bmxx",receiverPubbmxxEntity1);
				return jsonObject1;
			}
		}catch (Exception e){
			logger.info("保存公司编码为:{}得GROU8部门信息失败:{}",receiverPubbmxxEntity.getGsdm(),e.getMessage());
			return BaseResult.getFailureMessageEntity("保存GROU8部门信息失败");
		}
	}

	//更新部门信息 卫生院
	@Override
	public Object updateEntityHealthBureau(JSONObject json) {
		JSONObject jsonObject = json.getJSONObject("jsonStr");
		SenderPubbmxxEntity receiverPubbmxxEntity = jsonObject.toJavaObject(SenderPubbmxxEntity.class);
		if (!checkStr(jsonObject.getString("kjnd"))) {
			logger.info("============更新部门信息时会计年度为空===========");
			return BaseResult.getFailureMessageEntity("会计年度为空");
		}
		if (!checkStr(jsonObject.getString("gsdm"))) {
			logger.info("============更新部门信息时公司代码为空===========");
			return BaseResult.getFailureMessageEntity("公司代码为空");
		}
		if (!checkStr(jsonObject.getString("bmdm"))) {
			logger.info("============更新部门信息时部门编码为空===========");
			return BaseResult.getFailureMessageEntity("部门编码为空");
		}
		try {
			receiverPubbmxxEntity.setId(receiverPubbmxxEntity.getGsdm()+'-'+receiverPubbmxxEntity.getKjnd()+'-'+receiverPubbmxxEntity.getBmdm());
			logger.info("==========开始更新公司编码为：{}得部门信息，代码为:{}=========",receiverPubbmxxEntity.getGsdm(),receiverPubbmxxEntity.getBmdm());
			SenderPubbmxxEntity receiverPubbmxxEntity1 = senderPubbmxxDao.updatePubbmxxHealthBureau(receiverPubbmxxEntity);
			//更新指标项目表中的部门名称
			GbiZbxmbEntity gbiZbxmbEntity=new GbiZbxmbEntity();
			gbiZbxmbEntity.setGsdm(receiverPubbmxxEntity.getGsdm());
			gbiZbxmbEntity.setKjnd(receiverPubbmxxEntity.getKjnd());
			gbiZbxmbEntity.setBmdm(receiverPubbmxxEntity.getBmdm());
			gbiZbxmbEntity.setBmmc(receiverPubbmxxEntity.getBmmc());
			gbiZbxmbEntity.setDataSourceCode(receiverPubbmxxEntity.getDataSourceCode());
			gbiZbxmbDao.updateZbmxBmmc(gbiZbxmbEntity);
			JSONObject jsonObject1=new JSONObject();
			jsonObject1.put("status","200");
			jsonObject1.put("bmxx",receiverPubbmxxEntity1);
			return jsonObject1;
		}catch (Exception e){
			logger.info("更新公司编码为:{}得GROU8部门信息失败:{}",receiverPubbmxxEntity.getGsdm(),e.getMessage());
			return BaseResult.getFailureMessageEntity("更新GROU8部门信息失败");
		}
	}

	//删除部门信息
	@Override
	public Object deleteEntityHealthBureau(JSONObject json) {
		JSONObject jsonObject = json.getJSONObject("jsonStr");
		SenderPubbmxxEntity receiverPubbmxxEntity = jsonObject.toJavaObject(SenderPubbmxxEntity.class);
		if (!checkStr(jsonObject.getString("kjnd"))) {
			logger.info("============删除部门信息时会计年度为空===========");
			return BaseResult.getFailureMessageEntity("会计年度为空");
		}
		if (!checkStr(jsonObject.getString("gsdm"))) {
			logger.info("============删除部门信息时公司代码为空===========");
			return BaseResult.getFailureMessageEntity("公司代码为空");
		}
		try {
			receiverPubbmxxEntity.setId(receiverPubbmxxEntity.getGsdm()+'-'+receiverPubbmxxEntity.getKjnd()+'-'+receiverPubbmxxEntity.getBmdm());
			logger.info("==========开始删除公司编码为：{}得部门信息，编码为:{}=========",receiverPubbmxxEntity.getGsdm(),receiverPubbmxxEntity.getBmdm());
			Integer integer = senderPubbmxxDao.deletePubbmxxHealthBureau(receiverPubbmxxEntity);
			JSONObject jsonObject1=new JSONObject();
			jsonObject1.put("status","200");
			jsonObject1.put("bmxx",integer);
			return jsonObject1;
		}catch (Exception e){
			logger.info("删除公司编码为:{}得GROU8部门信息:{}失败:{}",receiverPubbmxxEntity.getGsdm(),receiverPubbmxxEntity.getBmdm(),e.getMessage());
			return BaseResult.getFailureMessageEntity("删除GROU8部门信息失败");
		}
	}


}
