package com.hzya.frame.grpU8.nxproof.pubzyxx.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.pubzyxx.dao.ISenderPubzyxxDao;
import com.hzya.frame.grpU8.nxproof.pubzyxx.entity.SenderPubzyxxEntity;
import com.hzya.frame.grpU8.nxproof.pubzyxx.service.ISenderPubzyxxService;
import com.hzya.frame.uuid.UUIDLong;
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;

/**
 * (Pubzyxx)表服务实现类
 *
 * @author makejava
 * @since 2024-06-28 17:11:01
 */
@Service(value = "SenderPubzyxxServiceImpl")
public class SenderPubzyxxServiceImpl extends BaseService<SenderPubzyxxEntity, String> implements ISenderPubzyxxService {



    private ISenderPubzyxxDao senderPubzyxxDao;



    @Autowired
	public void setPubzyxxDao(ISenderPubzyxxDao dao) {
		this.senderPubzyxxDao = dao;
		this.dao = dao;
	}

	//同步人员信息
	@Override
	public Object pubzyxxSynchronization(JSONObject json) {
		JSONObject jsonObject = json.getJSONObject("jsonStr");
		SenderPubzyxxEntity senderPubzyxxEntity = jsonObject.toJavaObject(SenderPubzyxxEntity.class);
		List<SenderPubzyxxEntity> senderPubzyxxEntities=new ArrayList<>();
		String result=null;
		try {
			//如果没有传入年度，则查询当年得，避免数据查询太大
			if(senderPubzyxxEntity.getKjnd()==null){
				senderPubzyxxEntity.setKjnd(DateUtil.format(new Date(),"yyyy"));
			}
			/*try {
				//同步南浔区人民医院001人员信息
				senderPubzyxxEntity.setGsdm("0101010101");
				logger.info("======开始查询南浔区人民医院人员信息=====");
				senderPubzyxxEntities = sqlSessionNxrm.selectList("SenderPubzyxxEntity_list_base",senderPubzyxxEntity);
				result = sendZyxxToHealthBureau(senderPubzyxxEntities);
				logger.info("南浔区人民医院GRPU8人员信息同步结果为:{}",result);
			}catch (Exception e){
				logger.info("南浔区人民医院GRPU8人员信息同步失败:{}",e.getMessage());
				e.printStackTrace();
			}*/
			try {
				//同步南浔区练市人民医院003人员信息
				senderPubzyxxEntity.setGsdm("0101010103");
				logger.info("======开始查询南浔区练市人民医院人员信息=====");
				senderPubzyxxEntities = senderPubzyxxDao.querySenderPubzyxxEntity(senderPubzyxxEntity);
				result = sendZyxxToHealthBureau(senderPubzyxxEntities);
				logger.info("南浔区练市人民医院GRPU8人员信息同步结果为:{}",result);
			}catch (Exception e){
				logger.info("南浔区练市人民医院GRPU8人员信息同步失败:{}",e.getMessage());
				e.printStackTrace();
			}
			/*try {
				//同步练市镇中心卫生院005人员信息
				senderPubzyxxEntity.setGsdm("0101010202");
				logger.info("======开始查询南浔区练市镇中心卫生院人员信息=====");
				senderPubzyxxEntities = sqlSessionNxrm.selectList("SenderPubzyxxEntity_list_base",senderPubzyxxEntity);
				result = sendZyxxToHealthBureau(senderPubzyxxEntities);
				logger.info("南浔区练市镇中心卫生院GRPU8人员信息同步结果为:{}",result);
			}catch (Exception e){
				logger.info("南浔区练市镇中心卫生院GRPU8人员信息同步失败:{}",e.getMessage());
				e.printStackTrace();
			}*/
			/*try {
				//同步善琏镇卫生院007人员信息
				senderPubzyxxEntity.setGsdm("0101010204");
				logger.info("======开始查询南浔区善琏镇卫生院人员信息=====");
				senderPubzyxxEntities = sqlSessionNxrm.selectList("SenderPubzyxxEntity_list_base",senderPubzyxxEntity);
				result = sendZyxxToHealthBureau(senderPubzyxxEntities);
				logger.info("南浔区善琏镇卫生院GRPU8人员信息同步结果为:{}",result);
			}catch (Exception e){
				logger.info("南浔区善琏镇卫生院GRPU8人员信息同步失败:{}",e.getMessage());
				e.printStackTrace();
			}*/
			/*try {
				//同步双林镇中心卫生院004人员信息
				senderPubzyxxEntity.setGsdm("0101010201");
				senderPubzyxxEntities = sqlSessionSlz.selectList("SenderPubzyxxEntity_list_base",senderPubzyxxEntity);
				result = sendZyxxToHealthBureau(senderPubzyxxEntities);
				logger.info("双林镇中心卫生院GRPU8人员信息同步结果为:{}",result);
			}catch (Exception e){
				logger.info("双林镇中心卫生院GRPU8人员信息同步失败:{}",e.getMessage());
				e.printStackTrace();
			}
			try {
				//同步菱湖镇中心卫生院009人员信息
				senderPubzyxxEntity.setGsdm("0101020201");
				senderPubzyxxEntities = sqlSessionLhz.selectList("SenderPubzyxxEntity_list_base",senderPubzyxxEntity);
				result = sendZyxxToHealthBureau(senderPubzyxxEntities);
				logger.info("菱湖镇中心卫生院GRPU8人员信息同步结果为:{}",result);
			}catch (Exception e){
				logger.info("菱湖镇中心卫生院GRPU8人员信息同步失败:{}",e.getMessage());
				e.printStackTrace();
			}
			try {
				//同步和孚镇卫生院010人员信息
				senderPubzyxxEntity.setGsdm("0101020202");
				senderPubzyxxEntities = sqlSessionHfz.selectList("SenderPubzyxxEntity_list_base",senderPubzyxxEntity);
				result = sendZyxxToHealthBureau(senderPubzyxxEntities);
				logger.info("和孚镇卫生院GRPU8人员信息同步结果为:{}",result);
			}catch (Exception e){
				logger.info("和孚镇卫生院GRPU8人员信息同步失败:{}",e.getMessage());
				e.printStackTrace();
			}
			try {
				//同步千金镇卫生院011人员信息
				senderPubzyxxEntity.setGsdm("0101020203");
				senderPubzyxxEntities = sqlSessionQjz.selectList("SenderPubzyxxEntity_list_base",senderPubzyxxEntity);
				result = sendZyxxToHealthBureau(senderPubzyxxEntities);
				logger.info("千金镇卫生院GRPU8人员信息同步结果为:{}",result);
			}catch (Exception e){
				logger.info("千金镇卫生院GRPU8人员信息同步失败:{}",e.getMessage());
				e.printStackTrace();
			}
			try {
				//同步石崇镇卫生院012人员信息
				senderPubzyxxEntity.setGsdm("0101020204");
				senderPubzyxxEntities = sqlSessionScz.selectList("SenderPubzyxxEntity_list_base",senderPubzyxxEntity);
				result = sendZyxxToHealthBureau(senderPubzyxxEntities);
				logger.info("石崇镇卫生院GRPU8人员信息同步结果为:{}",result);
			}catch (Exception e){
				logger.info("石崇镇卫生院GRPU8人员信息同步失败:{}",e.getMessage());
				e.printStackTrace();
			}
			try {
				//同步南浔镇中心卫生院014人员信息
				senderPubzyxxEntity.setGsdm("010202");
				senderPubzyxxEntities = sqlSessionNxz.selectList("SenderPubzyxxEntity_list_base",senderPubzyxxEntity);
				result = sendZyxxToHealthBureau(senderPubzyxxEntities);
				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 sendZyxxToHealthBureau(List<SenderPubzyxxEntity> senderPubzyxxEntities){
			if (CollectionUtils.isEmpty(senderPubzyxxEntities)) {
				logger.info("GRPU8没有需要同步得人员信息");
				return "GRPU8没有需要同步得人员信息";
			} else {
				for (SenderPubzyxxEntity pubzyxxEntity : senderPubzyxxEntities) {
					// pubzyxxEntity.setKjnd("2021");
					//根据会计年度，公司代码，账套号查询数据是否已经同步过
					SenderPubzyxxEntity receiverPubzyxxEntity = new SenderPubzyxxEntity();
					receiverPubzyxxEntity.setKjnd(pubzyxxEntity.getKjnd());
					receiverPubzyxxEntity.setGsdm(pubzyxxEntity.getGsdm());
					receiverPubzyxxEntity.setZydm(pubzyxxEntity.getZydm());
					try {
						//查询接收方的数据是否存在
						List<SenderPubzyxxEntity> receiverPubzyxxEntities = queryEntityPageHealthBureau(receiverPubzyxxEntity);
						//设置id为会计年度，公司代码，账套号,会计期间序号拼接，测试时候这样，具体看情况
						pubzyxxEntity.setId(pubzyxxEntity.getGsdm() + '-' + pubzyxxEntity.getKjnd() + '-' + pubzyxxEntity.getZydm());
						JsonResultEntity jsonResultEntity=null;
						if (CollectionUtils.isEmpty(receiverPubzyxxEntities)) {
							logger.info("===========开始将公司代码为：{}得GRPU8人员信息同步新增到卫生局GRPU8中=============",pubzyxxEntity.getGsdm());
							JSONObject jsonObjectStr = new JSONObject();
							jsonObjectStr.put("jsonStr", pubzyxxEntity);
							Object o = saveEntityHealthBureau(jsonObjectStr);
							JSONObject json = (JSONObject) JSON.toJSON(o);
							if(json.getString("status").equalsIgnoreCase("200")){
								 //JSONObject jsonObjectAttribute = (JSONObject) JSONObject.toJSON(jsonResultEntity.getAttribute());
								 logger.info("公司代码{}得GROU8人员信息同步保存返回结果为:{}",pubzyxxEntity.getGsdm(),json.getString("zyxx"));
							 }
							/*if (jsonObjectAttribute != null) {
								logger.info("===========开始将发送方的GRPU8人员信息新增到人员信息日志中=============");
								//保存发送方得日志
								pubzyxxEntity.setDataSourceCode(grp_data_source_code);
								senderPubzyxxDao.saveSenderPubzyxxEntity(pubzyxxEntity);
							}*/
						} else {
							logger.info("===========开始将公司代码为：{}得GRPU8人员信息同步更新到卫生局GRPU8中=============",pubzyxxEntity.getGsdm());
							JSONObject jsonObjectStr = new JSONObject();
							jsonObjectStr.put("jsonStr", pubzyxxEntity);
							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人员信息同步更新返回结果为:{}",pubzyxxEntity.getGsdm(),json.getString("zyxx"));
							}
							/*if (jsonObjectAttribute != null) {
								logger.info("===========开始将发送方的GRPU8人员信息更新到人员信息日志中=============");
								//保存发送方得日志
								pubzyxxEntity.setDataSourceCode(grp_data_source_code);
								senderPubzyxxDao.updateSenderPubzyxxEntity(pubzyxxEntity);
							}*/
						}
					} catch (Exception e) {
						logger.info("公司代码{}得GRPU8人员信息同步失败:{}",pubzyxxEntity.getGsdm(), e.getMessage());
						throw new RuntimeException(e.getMessage());
					}
				}
				return "同步GROU8人员信息成功";
			}
	}

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

	@Override
	public List<SenderPubzyxxEntity> queryEntityPageHealthBureau(SenderPubzyxxEntity senderPubzyxxEntity) {
		try {
			logger.info("======开始根据公司代码为：{}查询卫生局中得人员信息",senderPubzyxxEntity.getGsdm());
			List<SenderPubzyxxEntity> receiverPubzyxxEntities = senderPubzyxxDao.queryPubzyxxHealthBureau(senderPubzyxxEntity);
			return	receiverPubzyxxEntities;
		}catch (Exception e){
			logger.info("查询公司代码为：{}的GROU8人员信息失败:{}",senderPubzyxxEntity.getGsdm(),e.getMessage());
			e.printStackTrace();
		}
		return null;
	}

	@Override
	public Object saveEntityHealthBureau(JSONObject json) {
		JSONObject jsonObject = json.getJSONObject("jsonStr");
		SenderPubzyxxEntity receiverPubzyxxEntity = jsonObject.toJavaObject(SenderPubzyxxEntity.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("zydm"))) {
			logger.info("============保存人员信息时人员代码为空============");
			return BaseResult.getFailureMessageEntity("人员代码为空");
		}
		if (!checkStr(jsonObject.getString("zyxm"))) {
			logger.info("============保存人员信息时人员姓名为空============");
			return BaseResult.getFailureMessageEntity("人员姓名为空");
		}
		try {
			SenderPubzyxxEntity senderPubzyxxEntity=new SenderPubzyxxEntity();
			senderPubzyxxEntity.setKjnd(receiverPubzyxxEntity.getKjnd());
			senderPubzyxxEntity.setGsdm(receiverPubzyxxEntity.getGsdm());
			senderPubzyxxEntity.setZydm(receiverPubzyxxEntity.getZydm());
			senderPubzyxxEntity.setDataSourceCode(receiverPubzyxxEntity.getDataSourceCode());
			List<SenderPubzyxxEntity> senderPubzyxxEntities = queryEntityPageHealthBureau(senderPubzyxxEntity);
			if(CollectionUtils.isEmpty(senderPubzyxxEntities)){
				receiverPubzyxxEntity.setSyzt("0");
				receiverPubzyxxEntity.setGlzt("0");
				receiverPubzyxxEntity.setId(receiverPubzyxxEntity.getGsdm()+'-'+receiverPubzyxxEntity.getKjnd()+'-'+receiverPubzyxxEntity.getZydm());
				logger.info("==========开始保存公司编码为：{}得人员信息，id为:{}=========",receiverPubzyxxEntity.getGsdm(),receiverPubzyxxEntity.getId());
				SenderPubzyxxEntity receiverPubzyxxEntity1 = senderPubzyxxDao.savePubzyxxHealthBureau(receiverPubzyxxEntity);
				JSONObject jsonObject1=new JSONObject();
				jsonObject1.put("status","200");
				jsonObject1.put("zyxx",receiverPubzyxxEntity1);
				return jsonObject1;
			}else{
				SenderPubzyxxEntity receiverPubzyxxEntity1 = senderPubzyxxDao.updatePubzyxxHealthBureau(receiverPubzyxxEntity);
				JSONObject jsonObject1=new JSONObject();
				jsonObject1.put("status","200");
				jsonObject1.put("zyxx",receiverPubzyxxEntity1);
				return jsonObject1;
			}
		}catch (Exception e){
			logger.info("保存公司编码为：{}得GROU8人员信息失败:{}",receiverPubzyxxEntity.getGsdm(),e.getMessage());
			return  BaseResult.getFailureMessageEntity("保存GROU8人员信息失败");
		}
	}

	@Override
	public Object updateEntityHealthBureau(JSONObject json) {
		JSONObject jsonObject = json.getJSONObject("jsonStr");
		SenderPubzyxxEntity receiverPubzyxxEntity = jsonObject.toJavaObject(SenderPubzyxxEntity.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("zydm"))) {
			logger.info("============更新人员信息时人员代码为空============");
			return BaseResult.getFailureMessageEntity("人员代码为空");
		}

		try {
			receiverPubzyxxEntity.setId(receiverPubzyxxEntity.getGsdm()+'-'+receiverPubzyxxEntity.getKjnd()+'-'+receiverPubzyxxEntity.getZydm());
			logger.info("==========开始更新公司编码为:{}得人员信息，id为:{}=========",receiverPubzyxxEntity.getGsdm(),receiverPubzyxxEntity.getId());
			SenderPubzyxxEntity receiverPubzyxxEntity1 = senderPubzyxxDao.updatePubzyxxHealthBureau(receiverPubzyxxEntity);
			JSONObject jsonObject1=new JSONObject();
			jsonObject1.put("status","200");
			jsonObject1.put("zyxx",receiverPubzyxxEntity1);
			return jsonObject1;
		}catch (Exception e){
			logger.info("更新公司代码为：{}得GROU8人员信息失败:{}",receiverPubzyxxEntity.getGsdm(),e.getMessage());
			return BaseResult.getFailureMessageEntity("更新GROU8人员信息失败");
		}
	}

	@Override
	public Object deleteEntityHealthBureau(JSONObject json) {
		JSONObject jsonObject = json.getJSONObject("jsonStr");
		SenderPubzyxxEntity receiverPubzyxxEntity = jsonObject.toJavaObject(SenderPubzyxxEntity.class);
		if (!checkStr(jsonObject.getString("kjnd"))) {
			logger.info("============删除人员信息时会计年度为空============");
			return BaseResult.getFailureMessageEntity("会计年度为空");
		}
		if (!checkStr(jsonObject.getString("gsdm"))) {
			logger.info("============删除人员信息时公司代码为空============");
			return BaseResult.getFailureMessageEntity("公司代码为空");
		}
		try {
			receiverPubzyxxEntity.setId(receiverPubzyxxEntity.getGsdm()+'-'+receiverPubzyxxEntity.getKjnd()+'-'+receiverPubzyxxEntity.getZydm());
			logger.info("==========开始删除公司编码为:{}得人员信息，id为:{}=========",receiverPubzyxxEntity.getGsdm(),receiverPubzyxxEntity.getId());
			Integer integer = senderPubzyxxDao.deletePubzyxxHealthBureau(receiverPubzyxxEntity);
           JSONObject jsonObject1=new JSONObject();
		   jsonObject1.put("status","200");
		   jsonObject1.put("zyxx",integer);
		   return jsonObject1;
		}catch (Exception e){
			logger.info("删除公司代码为：{}得GROU8人员信息失败:{}",receiverPubzyxxEntity.getGsdm(),e.getMessage());
			return BaseResult.getFailureMessageEntity("删除GROU8人员信息失败");
		}
	}
}
