package com.zcloud.util.message.imp;

import com.zcloud.entity.PageData;
import com.zcloud.mapper.datasource.notice.NoticeCorpMapper;
import com.zcloud.mapper.datasource.notice.NoticeCorpUserMapper;
import com.zcloud.mapper.datasource.message.MessageTemplatesMapper;
import com.zcloud.util.DateUtil;
import com.zcloud.util.Tools;
import com.zcloud.util.UuidUtil;
import com.zcloud.util.message.MessageService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.Date;
import java.util.HashMap;
import java.util.Map;

/**
 * 说明：相关方管理
 * 作者：luoxiaobao
 * 时间：2022-06-07
 * 官网：www.zcloudchina.com
 */
@Service
@Transactional //开启事物
public class MessageServiceImpl implements MessageService {

//	@Autowired
//	private MessagePublic messagePublic;
	@Autowired
	private MessageTemplatesMapper messageTemplatesMapper;
	@Autowired
	private NoticeCorpMapper noticeCorpMapper;
	@Autowired
	private NoticeCorpUserMapper noticeCorpUserMapper;
	/**
	 *
	 * @param encode 消息模板编码
	 * @param synpsis 消息简介，如果没有此参数按照模板配置进行通知，如有此参数，按照参数通知
	 * @param corpinfo 企业id
	 * @param userID 信息接收人用户id
	 * @param parameter1
	 * @param parameter2
	 * @param parameter3
	 * @param parameter4
	 * @param parameter5
	 * @return
	 * @throws Exception
	 */
	public  Object sendMessageByParameter(String encode ,
										  String synpsis,
										  String corpinfo,
										  String userID ,
										  String key,
										  String parameter1,String parameter2,String parameter3,String parameter4,String parameter5){

		PageData pd = new PageData();
		pd.put("ENCODE",encode);
		pd.put("SYNOPSIS",synpsis);
		pd.put("parameter1",parameter1);
		pd.put("parameter2",parameter2);
		pd.put("parameter3",parameter3);
		pd.put("parameter4",parameter4);
		pd.put("parameter5",parameter5);
		pd.put("FOREIGN_KEY",key);
		pd.put("CORP_INFO_ID",corpinfo);
		pd.put("USER_ID",userID);
		try {
			return this.sendMessageByParameter(pd);
		}catch (Exception e){
			System.out.println(e);
		}
		return null;
	}
	public  Object sendMessageByParameter(String encode ,
										  String synpsis,
										  String corpinfo,
										  String userID ,
										  String key,
										  String parameter1,String parameter2,String parameter3,String parameter4,String parameter5,String url){

		PageData pd = new PageData();
		pd.put("ENCODE",encode);
		pd.put("SYNOPSIS",synpsis);
		pd.put("parameter1",parameter1);
		pd.put("parameter2",parameter2);
		pd.put("parameter3",parameter3);
		pd.put("parameter4",parameter4);
		pd.put("parameter5",parameter5);
		pd.put("FOREIGN_KEY",key);
		pd.put("CORP_INFO_ID",corpinfo);
		pd.put("USER_ID",userID);
		pd.put("USER_ID",userID);
		pd.put("url",url);
		try {
//			PushUtil.push(userID,encode,synpsis,"other");
			return this.sendMessageByParameter(pd);
		}catch (Exception e){
			System.out.println(e);
		}
		return null;
	}
	/**根据参数发送消息给指定对象
	 * @param pd
	 * ENCODE : 消息模板编码
	 * SYNOPSIS : 消息简介，如果没有此参数按照模板配置进行通知，如有此参数，按照参数通知
	 * parameter1 :
	 * parameter2:
	 * parameter3:
	 * parameter4:
	 * parameter5:
	 * FOREIGN_KEY : 跳转地址的参数id 1&name=2
	 * CORP_INFO_ID : 企业id
	 * USER_ID :	信息接收人用户id
	 * @throws Exception
	 */
	public Object sendMessageByParameter(PageData pd)throws Exception{

		PageData messageTemplate = messageTemplatesMapper.findByEncode(pd);
		if (messageTemplate == null){
			System.out.println("没有查询到相关模板");
			return null;
		}
		PageData noticecorp = new PageData();
		// 公告通知相关id
		noticecorp.put("FOREIGN_KEY",pd.get("FOREIGN_KEY"));
		// 企业ID
		noticecorp.put("CORP_INFO_ID",pd.get("CORP_INFO_ID"));
		noticecorp = initializeEntity(noticecorp, messageTemplate, pd,1);

		noticeCorpMapper.save(noticecorp);


		PageData noticecorpuser = new PageData();
		//人员ID
		noticecorpuser.put("USER_ID",pd.get("USER_ID"));
		noticecorpuser = initializeEntity(noticecorpuser, noticecorp,pd, 2);
		noticeCorpUserMapper.save(noticecorpuser);


		Map<String,Object> map = new HashMap<String,Object>();
		String errInfo = "success";
		map.put("result", errInfo);
		return map;

	}


	/**
	 * 初始化成员变量
	 * @param target 目标变量，初始化完成基础数据并返回的实体
	 * @param data 数据变量，作为参数取出数据 写入目标的实体
	 * @param pd 调用参数，调用接口时传入的参数
	 * @param type 类型  1为bus_noticecorp 实体  2为bus_noticecorpuserid 实体
	 * @return
	 */
	public PageData initializeEntity(PageData target,PageData data,PageData pd,int type){

		switch (type){
			case 1:
				// 主键
				String uuid = UuidUtil.get32UUID();

				target.put("NOTICECORP_ID", UuidUtil.get32UUID());
				// 发布人
				target.put("CREATOR","1");
				// 用户名
				target.put("USERNAME","系统管理员");
				// 发布时间
				target.put("CREATTIME",DateUtil.date2Str(new Date()));
				// 公告简介
				if (!Tools.isEmpty(pd.get("SYNOPSIS"))){
					target.put("SYNOPSIS",pd.get("SYNOPSIS"));
				}else{
					target.put("SYNOPSIS",data.get("SYNOPSIS"));
				}
				// 公告内容
				target.put("CONTENT",initializeContent(pd, data.get("CONTENT").toString()));
				// 是否全显
				target.put("ISALL","yes");
				// 是否删除
				target.put("ISDELETE","0");
				// 是否置顶
				target.put("ISTOP","0");
				// 是否发布，0否1是
				target.put("STATUS","1");
				// 手机端操作链接地址
				if(Tools.isEmpty(pd.getString("url"))){
					target.put("WORKURL",data.get("URL"));
				}else{
					target.put("WORKURL",pd.getString("url"));
				}
				break ;
			case 2:
				// 主键
				target.put("NOTICECORPUSERID_ID",UuidUtil.get32UUID());
				//企业公告ID
				target.put("NOTICECORP_ID",data.get("NOTICECORP_ID"));
				//状态（0未阅读，1已阅读）
				target.put("TYPE","0");
				break ;
		}
		return target;
	}

	/**
	 * 序列化参数，拼接到通知内容中
	 * @param pd 调用时传入的参数
	 * @param content 根据模板编码查询到的 模板消息
	 * @return
	 */
	public String initializeContent (PageData pd,String content){
		if(!Tools.isEmpty(pd.getString("parameter1"))){
			content = content.replace("$parameter1$",pd.getString("parameter1"));
		}
		if(!Tools.isEmpty(pd.getString("parameter2"))){
			content = content.replace("$parameter2$",pd.getString("parameter2"));
		}
		if(!Tools.isEmpty(pd.getString("parameter3"))){
			content = content.replace("$parameter3$",pd.getString("parameter3"));
		}
		if(!Tools.isEmpty(pd.getString("parameter4"))){
			content = content.replace("$parameter4$",pd.getString("parameter4"));
		}
		if(!Tools.isEmpty(pd.getString("parameter5"))){
			content = content.replace("$parameter5$",pd.getString("parameter5"));
		}

		return content;
	}
}

