package weaver.interfaces.htsc.replaceDoc;

import org.apache.commons.lang.StringUtils;
import weaver.conn.RecordSet;
import weaver.formmode.customjavacode.AbstractModeExpandJavaCodeNew;
import weaver.general.BaseBean;
import weaver.general.Util;
import weaver.hrm.User;
import weaver.soa.workflow.request.Property;
import weaver.soa.workflow.request.RequestInfo;
import static com.engine.odoc.util.DocUtil.*;

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



/**
 * 说明
 * 修改时
 * 类名要与文件名保持一致
 * class文件存放位置与路径保持一致。
 * 请把编译后的class文件，放在对应的目录中才能生效
 * 注意 同一路径下java名不能相同。
 * @author Administrator
 *
 */
public class ModeExpandTemplate extends AbstractModeExpandJavaCodeNew {
	/**
	 * 执行模块扩展动作
	 * @param param
	 *  param包含(但不限于)以下数据
	 *  user 当前用户
	 *  importtype 导入方式(仅在批量导入的接口动作会传输) 1 追加，2覆盖,3更新，获取方式(int)param.get("importtype")
     *  导入链接中拼接的特殊参数(仅在批量导入的接口动作会传输)，比如a=1，可通过param.get("a")获取参数值
	 *  页面链接拼接的参数，比如b=2,可以通过param.get("b")来获取参数
	 * @return 
	 */
	public Map<String, String> doModeExpand(Map<String, Object> param) {
		Map<String, String> result = new HashMap<String, String>();
		BaseBean baseBean = new BaseBean();
		try {
			User user = (User)param.get("user");
			int billid = -1;//数据id
			int modeid = -1;//模块id
			RequestInfo requestInfo = (RequestInfo)param.get("RequestInfo");
			if(requestInfo!=null){
				billid = Util.getIntValue(requestInfo.getRequestid());
				modeid = Util.getIntValue(requestInfo.getWorkflowid());
				if(billid>0&&modeid>0){
					//------请在下面编写业务逻辑代码-----
					//获取主表数据
					new BaseBean().writeLog("太乙进来了");
					Map<String, String> mainDatas = new HashMap<>();
					Property[] properties = requestInfo.getMainTableInfo().getProperty();
					for (Property propertie : properties) {
						mainDatas.put(propertie.getName(), propertie.getValue());
					}

					// 获取新旧附件的 docid
					int lsfj = Util.getIntValue(Util.null2String(mainDatas.get("lsfj")));
					int fjsc = Util.getIntValue(Util.null2String(mainDatas.get("fjsc")));

					String old_name = null;
					String new_name = null;
					int old_imagefielid = -1;
					int new_imagefielid = -1;

					RecordSet rs = new RecordSet();
					// 获取新旧附件的 文件名 和 imagefileid
					rs.executeQuery("select imagefilename,imagefileid from docimagefile where DOCID = ?",lsfj);
					if(rs.next()){
						old_name = rs.getString("imagefilename");
						old_imagefielid = Util.getIntValue(rs.getString("imagefileid"));
						baseBean.writeLog("old_imagefielid :" + old_imagefielid);
						baseBean.writeLog("old_name :" + old_name);
					}
					rs.executeQuery("select imagefilename,imagefileid from docimagefile where DOCID = ?",fjsc);
					if(rs.next()){
						new_name = rs.getString("imagefilename");
						new_imagefielid = Util.getIntValue(rs.getString("imagefileid"));
						baseBean.writeLog("new_imagefielid :" + new_imagefielid);
						baseBean.writeLog("new_name :" + new_name);
					}

					if(StringUtils.isNotBlank(old_name) && StringUtils.isNotBlank(new_name)){
						baseBean.writeLog("old_name和new_name都不为空");

						// 获取 新旧附件 的 文件扩展名
						String old_extension=old_name.substring(old_name.lastIndexOf(".")+1);
						String new_extension=new_name.substring(new_name.lastIndexOf(".")+1);
						baseBean.writeLog("oldname-文件后缀名 :" + old_extension);
						baseBean.writeLog("newname-文件后缀名 :" + new_extension);

						// 比较 新旧文件 的 扩展名是否一样，一样则进行替换
						if (old_extension.equals(new_extension)){
							// 根据 旧文件 创建 新的文件
							int newId = createDocFromAnother(lsfj);
							baseBean.writeLog("根据 旧文件 创建 新的文件的id :" + newId);

							// 将 old 中的 imagefileid 替换成 new_imagefielid
							rs.executeUpdate("update docimagefile set imagefileid = ? where docid = ?",new_imagefielid,lsfj);
							// 将 ImageFile表 中的 new_imagefileid 中的 文件名 替换成 旧文件名
							rs.executeUpdate("update ImageFile set imagefilename = ? where imagefileid = ?",old_name,new_imagefielid);
							// 将 新文件的 new_imagefielid 替换成 -6
							rs.executeUpdate("update docimagefile set imagefileid = ? where docid = ?",-6,fjsc);

						}
					}
				}
			}
		} catch (Exception e) {
			result.put("errmsg","自定义出错信息");
			result.put("flag", "false");
		}
		return result;
	}

}