package com.seeyon.apps.src_contract.ordinary.param;

import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

import com.seeyon.apps.ext.workflow.vo.FormDataVo;
import org.apache.commons.io.FileUtils;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.seeyon.apps.src_contract.lease.kit.form.CAP4FormKit;
import com.seeyon.apps.src_contract.lease.util.EnumUtils;
import com.seeyon.cap4.form.bean.FormDataMasterBean;
import com.seeyon.cap4.form.bean.FormDataSubBean;
import com.seeyon.ctp.common.AppContext;
import com.seeyon.ctp.common.SystemEnvironment;
import com.seeyon.ctp.common.ctpenumnew.manager.EnumManager;
import com.seeyon.ctp.common.exceptions.BusinessException;
import com.seeyon.v3x.dee.util.DateUtil;

public class OrdinaryContractParam {

	private  EnumManager enumManagerNew;
	
	public void setEnumManagerNew(EnumManager enumManagerNew) {
		this.enumManagerNew = enumManagerNew;
	}
	
	public EnumManager getEnumManagerNew() {
		if (enumManagerNew == null) {
			enumManagerNew = (EnumManager) AppContext.getBean("enumManagerNew");
		}
		return enumManagerNew;
	}
	
	/**
	 * 一般付款合同参数封装
	 * @param formDataVo
	 * @param summaryId
	 * @return
	 * @throws IOException
	 * @throws BusinessException
	 */
	public JSONObject getOrdinaryPaymentContractParam(FormDataVo formDataVo, String summaryId) throws NoSuchFieldException {
		JSONObject jsonObject = new JSONObject();
//		jsonObject.put("financialOrg", CAP4FormKit.getFieldStrValue(master, "NC公司编码"));//财务组织编码
		jsonObject.put("financialOrg", formDataVo.getFieldData("NC公司编码")!=null?formDataVo.getFieldData("NC公司编码").getStringValue():"");//财务组织编码
		jsonObject.put("oaUrl", "/seeyon/cst/flowInfo.do?summaryId="+summaryId);//OA联查链接
//		jsonObject.put("OAbillCode", CAP4FormKit.getFieldStrValue(master, "单据编号"));//OA单据编号
		jsonObject.put("OAbillCode", formDataVo.getFieldData("单据编号")!=null?formDataVo.getFieldData("单据编号").getStringValue():"");//OA单据编号
//		jsonObject.put("VbillCode", CAP4FormKit.getFieldStrValue(master, "合同编号"));//合同编码
		jsonObject.put("VbillCode", formDataVo.getFieldData("合同编号")!=null?formDataVo.getFieldData("合同编号").getStringValue():"");//合同编码
//		jsonObject.put("contractName", CAP4FormKit.getFieldStrValue(master, "合同名称"));//合同名称
		jsonObject.put("contractName", formDataVo.getFieldData("合同名称")!=null?formDataVo.getFieldData("合同名称").getStringValue():"");//合同名称
//		jsonObject.put("supplier", CAP4FormKit.getFieldStrValue(master, "默认客商编码"));//客户编码
		jsonObject.put("supplier", formDataVo.getFieldData("默认客商编码")!=null?formDataVo.getFieldData("默认客商编码").getStringValue():"");//客户编码
//		jsonObject.put("personnelid", CAP4FormKit.getFieldStrValue(master, "经办人手机号码"));//承办人员(传电话号码过来)
		jsonObject.put("personnelid", formDataVo.getFieldData("经办人手机号码")!=null?formDataVo.getFieldData("经办人手机号码").getStringValue():"");//承办人员(传电话号码过来)
//		jsonObject.put("contractApproveDate", CAP4FormKit.getFieldStrValue(master, "合同签订日期"));//签字盖章日期
		jsonObject.put("contractApproveDate", formDataVo.getFieldData("合同签订日期")!=null?formDataVo.getFieldData("合同签订日期").getStringValue():"");//签字盖章日期
//		jsonObject.put("ntotalOrigMny", CAP4FormKit.getFieldStrValue(master, "合同金额"));//原币价税合计
		jsonObject.put("ntotalOrigMny", formDataVo.getFieldData("合同金额")!=null?formDataVo.getFieldData("合同金额").getStringValue():"");//原币价税合计
//		jsonObject.put("contractStartDate", CAP4FormKit.getFieldStrValue(master, "合同开始日期"));//计划生效日期
		jsonObject.put("contractStartDate", formDataVo.getFieldData("合同开始日期")!=null?formDataVo.getFieldData("合同开始日期").getStringValue():"");//计划生效日期
//		jsonObject.put("contractEndDate", CAP4FormKit.getFieldStrValue(master, "合同结束日期"));//计划终止日期
		jsonObject.put("contractEndDate", formDataVo.getFieldData("合同结束日期")!=null?formDataVo.getFieldData("合同结束日期").getStringValue():"");//计划终止日期
//		jsonObject.put("vdef33", CAP4FormKit.getFieldStrValue(master, "说明事项"));//说明事项
		jsonObject.put("vdef33", formDataVo.getFieldData("说明事项")!=null?formDataVo.getFieldData("说明事项").getStringValue():"");//说明事项
//		jsonObject.put("vdef34", CAP4FormKit.getFieldStrValue(master, "联系人"));//对方联系人姓名
		jsonObject.put("vdef34", formDataVo.getFieldData("联系人")!=null?formDataVo.getFieldData("联系人").getStringValue():"");//对方联系人姓名
//		jsonObject.put("vdef36", CAP4FormKit.getFieldStrValue(master, "预留字段1"));//预留字段1
		jsonObject.put("vdef36", formDataVo.getFieldData("预留字段1")!=null?formDataVo.getFieldData("预留字段1").getStringValue():"");//预留字段1
//		jsonObject.put("vdef37", CAP4FormKit.getFieldStrValue(master, "预留字段2"));//预留字段2
		jsonObject.put("vdef37", formDataVo.getFieldData("预留字段2")!=null?formDataVo.getFieldData("预留字段2").getStringValue():"");//预留字段2
//		jsonObject.put("vdef38", CAP4FormKit.getFieldStrValue(master, "预留字段3"));//预留字段3
		jsonObject.put("vdef38", formDataVo.getFieldData("预留字段3")!=null?formDataVo.getFieldData("预留字段3").getStringValue():"");//预留字段3
//		jsonObject.put("vdef39", CAP4FormKit.getFieldStrValue(master, "预留字段4"));//预留字段4
		jsonObject.put("vdef39", formDataVo.getFieldData("预留字段4")!=null?formDataVo.getFieldData("预留字段4").getStringValue():"");//预留字段4
//		jsonObject.put("vdef40", CAP4FormKit.getFieldStrValue(master, "预留字段5"));//预留字段5
		jsonObject.put("vdef40", formDataVo.getFieldData("预留字段5")!=null?formDataVo.getFieldData("预留字段5").getStringValue():"");//预留字段5
//		jsonObject.put("rate", CAP4FormKit.getFieldStrValue(master, "中标费率"));//费率
		jsonObject.put("rate", formDataVo.getFieldData("中标费率")!=null?formDataVo.getFieldData("中标费率").getStringValue():"");//费率
//		期初标识
//		String earlySignid = CAP4FormKit.getFieldStrValue(master, "期初标识");
		String earlySignid = formDataVo.getFieldData("中标费率")!=null?formDataVo.getFieldData("中标费率").getDbValue()+"":"";
		if("".equals(earlySignid)) {
			jsonObject.put("earlySign", "");//期初标识
		}else {
			String earlySign = getEnumManagerNew().getEnumItem(Long.parseLong(earlySignid)).getLabel();
			if("是".equals(earlySign)){
				jsonObject.put("earlySign", "Y");//期初标识
			}else {
				jsonObject.put("earlySign", "");//期初标识
			}
		}
//		jsonObject.put("margin", CAP4FormKit.getFieldStrValue(master, "保证金"));//保证金
		jsonObject.put("margin", formDataVo.getFieldData("保证金")!=null?formDataVo.getFieldData("保证金").getStringValue():"");//保证金
//		jsonObject.put("paymentAccumulate", CAP4FormKit.getFieldStrValue(master, "期初已付款金额"));//累计付款
		jsonObject.put("paymentAccumulate", formDataVo.getFieldData("期初已付款金额")!=null?formDataVo.getFieldData("期初已付款金额").getStringValue():"");//累计付款
//		jsonObject.put("invoiceMoney", CAP4FormKit.getFieldStrValue(master, "期初已开票金额"));//开票金额
		jsonObject.put("invoiceMoney", formDataVo.getFieldData("期初已开票金额")!=null?formDataVo.getFieldData("期初已开票金额").getStringValue():"");//开票金额

		JSONArray body = new JSONArray();
//		List<FormDataSubBean> formDataSubBeans = CAP4FormKit.getSubBeans(master,"合同条款信息");
		List<FormDataVo> subFormDataVos = formDataVo.getSubFormMap().get("合同条款信息");
		for (FormDataVo subFormDataVo : subFormDataVos) {
			JSONObject json = new JSONObject();
//			json.put("vtermname", CAP4FormKit.getSubFieldValue(formDataSubBean,"条款名称")); //条款名称
			json.put("vtermname", subFormDataVo.getFieldData("条款名称")!=null?subFormDataVo.getFieldData("条款名称").getStringValue():""); //条款名称
//			json.put("vtermcontent", CAP4FormKit.getSubFieldValue(formDataSubBean,"条款内容")); //条款内容
			json.put("vtermcontent", subFormDataVo.getFieldData("条款内容")!=null?subFormDataVo.getFieldData("条款内容").getStringValue():""); //条款内容
//			json.put("vmemo", CAP4FormKit.getSubFieldValue(formDataSubBean,"备注")); //备注
			json.put("vmemo", subFormDataVo.getFieldData("备注")!=null?subFormDataVo.getFieldData("备注").getStringValue():""); //备注
//			json.put("planStartDate", CAP4FormKit.getFieldStrValue(master, "合同开始日期")); //开始时间
			json.put("planStartDate", formDataVo.getFieldData("合同开始日期")!=null?formDataVo.getFieldData("合同开始日期").getStringValue():""); //开始时间
//			json.put("planEndDate", CAP4FormKit.getFieldStrValue(master, "合同结束日期")); //结束时间
			json.put("planEndDate", formDataVo.getFieldData("合同结束日期")!=null?formDataVo.getFieldData("合同结束日期").getStringValue():""); //结束时间
			body.add(json);
		}
		jsonObject.put("body", body);//收款计划的集合
//		String str = SystemEnvironment.getApplicationFolder();
//		String date = DateUtil.format(new Date(), "yyyyMMddHHmmss");
//		FileUtils.writeStringToFile(new File(str+"/OrdinaryContractjson/"+date.substring(0,4)+"/"+date.substring(4,6)+"/"+date.substring(6,8)+"/BIPHTSK_" + date + ".json"), jsonObject.toString(), "UTF-8");
		return jsonObject;
	}
	
	
	/**
	 * 一般收款合同参数封装
	 * @param formDataVo
	 * @param summaryId
	 * @return
	 * @throws IOException
	 * @throws BusinessException
	 */
	public JSONObject getOrdinaryCollectionContractParam(FormDataVo formDataVo,String summaryId) throws IOException, BusinessException, NoSuchFieldException {
		JSONObject jsonObject = new JSONObject();
//		jsonObject.put("financeCode", CAP4FormKit.getFieldStrValue(master, "NC公司编码"));//财务组织编码
		jsonObject.put("financeCode", formDataVo.getFieldData("NC公司编码")!=null?formDataVo.getFieldData("NC公司编码").getStringValue():"");//财务组织编码
//		jsonObject.put("VbillCode", CAP4FormKit.getFieldStrValue(master, "合同编号"));//合同编码
		jsonObject.put("VbillCode", formDataVo.getFieldData("合同编号")!=null?formDataVo.getFieldData("合同编号").getStringValue():"");//合同编码
//		jsonObject.put("contractName", CAP4FormKit.getFieldStrValue(master, "合同名称"));//合同名称
		jsonObject.put("contractName", formDataVo.getFieldData("合同名称")!=null?formDataVo.getFieldData("合同名称").getStringValue():"");//合同名称
		jsonObject.put("oaUrl", "/seeyon/cst/flowInfo.do?summaryId="+summaryId);//OA联查链接
//		jsonObject.put("OAbillCode", CAP4FormKit.getFieldStrValue(master, "单据编号"));//OA单据编号
		jsonObject.put("OAbillCode", formDataVo.getFieldData("单据编号")!=null?formDataVo.getFieldData("单据编号").getStringValue():"");//OA单据编号
//		jsonObject.put("contractApproveDate", CAP4FormKit.getFieldStrValue(master, "合同签订日期"));//签字盖章日期
		jsonObject.put("contractApproveDate", formDataVo.getFieldData("合同签订日期")!=null?formDataVo.getFieldData("合同签订日期").getStringValue():"");//签字盖章日期
//		jsonObject.put("contractStartDate", CAP4FormKit.getFieldStrValue(master, "合同开始日期"));//计划生效日期
		jsonObject.put("contractStartDate", formDataVo.getFieldData("合同开始日期")!=null?formDataVo.getFieldData("合同开始日期").getStringValue():"");//计划生效日期
//		jsonObject.put("contractEndDate", CAP4FormKit.getFieldStrValue(master, "合同结束日期"));//计划终止日期
		jsonObject.put("contractEndDate", formDataVo.getFieldData("合同结束日期")!=null?formDataVo.getFieldData("合同结束日期").getStringValue():"");//计划终止日期
//		jsonObject.put("customerCode", CAP4FormKit.getFieldStrValue(master, "默认客商编码"));//客户编码
		jsonObject.put("customerCode", formDataVo.getFieldData("默认客商编码")!=null?formDataVo.getFieldData("默认客商编码").getStringValue():"");//客户编码
//		jsonObject.put("ntotalOrigMny", CAP4FormKit.getFieldStrValue(master, "合同金额"));//原币价税合计
		jsonObject.put("ntotalOrigMny", formDataVo.getFieldData("合同金额")!=null?formDataVo.getFieldData("合同金额").getStringValue():"");//原币价税合计
//		jsonObject.put("personnelid", CAP4FormKit.getFieldStrValue(master, "经办人手机号码"));//承办人员(传电话号码过来)
		jsonObject.put("personnelid", formDataVo.getFieldData("经办人手机号码")!=null?formDataVo.getFieldData("经办人手机号码").getStringValue():"");//承办人员(传电话号码过来)
//		jsonObject.put("vdef33", CAP4FormKit.getFieldStrValue(master, "说明事项"));//说明事项
		jsonObject.put("vdef33", formDataVo.getFieldData("说明事项")!=null?formDataVo.getFieldData("说明事项").getStringValue():"");//说明事项
//		jsonObject.put("vdef34", CAP4FormKit.getFieldStrValue(master, "联系人"));//对方联系人姓名
		jsonObject.put("vdef34", formDataVo.getFieldData("联系人")!=null?formDataVo.getFieldData("联系人").getStringValue():"");//对方联系人姓名
//		jsonObject.put("vdef36", CAP4FormKit.getFieldStrValue(master, "预留字段1"));//预留字段1
		jsonObject.put("vdef36", formDataVo.getFieldData("预留字段1")!=null?formDataVo.getFieldData("预留字段1").getStringValue():"");//预留字段1
//		jsonObject.put("vdef37", CAP4FormKit.getFieldStrValue(master, "预留字段2"));//预留字段2
		jsonObject.put("vdef37", formDataVo.getFieldData("预留字段2")!=null?formDataVo.getFieldData("预留字段2").getStringValue():"");//预留字段2
//		jsonObject.put("vdef38", CAP4FormKit.getFieldStrValue(master, "预留字段3"));//预留字段3
		jsonObject.put("vdef38", formDataVo.getFieldData("预留字段3")!=null?formDataVo.getFieldData("预留字段3").getStringValue():"");//预留字段3
//		jsonObject.put("vdef39", CAP4FormKit.getFieldStrValue(master, "预留字段4"));//预留字段4
		jsonObject.put("vdef39", formDataVo.getFieldData("预留字段4")!=null?formDataVo.getFieldData("预留字段4").getStringValue():"");//预留字段4
//		jsonObject.put("vdef40", CAP4FormKit.getFieldStrValue(master, "预留字段5"));//预留字段5
		jsonObject.put("vdef40", formDataVo.getFieldData("预留字段5")!=null?formDataVo.getFieldData("预留字段5").getStringValue():"");//预留字段5
//		jsonObject.put("rate", CAP4FormKit.getFieldStrValue(master, "中标费率"));//费率
		jsonObject.put("rate", formDataVo.getFieldData("中标费率")!=null?formDataVo.getFieldData("中标费率").getStringValue():"");//费率

//		期初标识
//		String earlySignid = CAP4FormKit.getFieldStrValue(master, "期初标识");
		String earlySignid = formDataVo.getFieldData("中标费率")!=null?formDataVo.getFieldData("中标费率").getDbValue()+"":"";
		if("".equals(earlySignid)) {
			jsonObject.put("earlySign", "");//期初标识
		}else {
			String earlySign = getEnumManagerNew().getEnumItem(Long.parseLong(earlySignid)).getLabel();
			if("是".equals(earlySign)){
				jsonObject.put("earlySign", "Y");//期初标识
			}else {
				jsonObject.put("earlySign", "");//期初标识
			}
		}
//		jsonObject.put("margin", CAP4FormKit.getFieldStrValue(master, "保证金"));//保证金
		jsonObject.put("margin", formDataVo.getFieldData("保证金")!=null?formDataVo.getFieldData("保证金").getStringValue():"");//保证金
//		jsonObject.put("gatherAccumulate", CAP4FormKit.getFieldStrValue(master, "期初已收款金额"));//累计收款
		jsonObject.put("gatherAccumulate", formDataVo.getFieldData("期初已收款金额")!=null?formDataVo.getFieldData("期初已收款金额").getStringValue():"");//累计收款
//		jsonObject.put("invoiceMoney", CAP4FormKit.getFieldStrValue(master, "期初已开票金额"));//开票金额
		jsonObject.put("invoiceMoney", formDataVo.getFieldData("期初已开票金额")!=null?formDataVo.getFieldData("期初已开票金额").getStringValue():"");//开票金额

		JSONArray body = new JSONArray();
//		List<FormDataSubBean> formDataSubBeans = CAP4FormKit.getSubBeans(master,"合同条款信息");
		List<FormDataVo> subFormDataVos = formDataVo.getSubFormMap().get("合同条款信息");
		for (FormDataVo subFormDataVo : subFormDataVos) {
			JSONObject json = new JSONObject();
//			json.put("vtermname", CAP4FormKit.getSubFieldValue(formDataSubBean,"条款名称")); //条款名称
			json.put("vtermname", subFormDataVo.getFieldData("条款名称")!=null?subFormDataVo.getFieldData("条款名称").getStringValue():""); //条款名称
//			json.put("vtermcontent", CAP4FormKit.getSubFieldValue(formDataSubBean,"条款内容")); //条款内容
			json.put("vtermcontent", subFormDataVo.getFieldData("条款内容")!=null?subFormDataVo.getFieldData("条款内容").getStringValue():""); //条款内容
//			json.put("vmemo", CAP4FormKit.getSubFieldValue(formDataSubBean,"备注")); //备注
			json.put("vmemo", subFormDataVo.getFieldData("备注")!=null?subFormDataVo.getFieldData("备注").getStringValue():""); //备注
//			json.put("planStartDate", CAP4FormKit.getFieldStrValue(master, "合同开始日期")); //备注
			json.put("planStartDate", formDataVo.getFieldData("合同开始日期")!=null?formDataVo.getFieldData("合同开始日期").getStringValue():""); //备注
//			json.put("planEndDate", CAP4FormKit.getFieldStrValue(master, "合同结束日期")); //备注
			json.put("planEndDate", formDataVo.getFieldData("合同结束日期")!=null?formDataVo.getFieldData("合同结束日期").getStringValue():""); //备注
			body.add(json);
		}
		jsonObject.put("body", body);//收款计划的集合
//		String str = SystemEnvironment.getApplicationFolder();
//		String date = DateUtil.format(new Date(), "yyyyMMddHHmmss");
//		FileUtils.writeStringToFile(new File(str+"/OrdinaryContractjson/"+date.substring(0,4)+"/"+date.substring(4,6)+"/"+date.substring(6,8)+"/BIPHTFK_" + date + ".json"), jsonObject.toString(), "UTF-8");
		return jsonObject;
	}
	
	
	/**
	 * 一般收款合同参数封装
	 * @param formDataVo
	 * @return
	 * @throws IOException
	 * @throws BusinessException
	 */
	public JSONObject getOrdinaryContractSKStopParam(FormDataVo formDataVo) throws NoSuchFieldException {
		JSONObject jsonObject = new JSONObject();
//		jsonObject.put("vbillcode", CAP4FormKit.getFieldStrValue(master, "合同编号"));//合同编号
		jsonObject.put("vbillcode", formDataVo.getFieldData("合同编号")!=null?formDataVo.getFieldData("合同编号").getStringValue():"");//合同编号
//		jsonObject.put("vexecdate", CAP4FormKit.getFieldStrValue(master, "单据日期"));//单据日期
		jsonObject.put("vexecdate", formDataVo.getFieldData("单据日期")!=null?formDataVo.getFieldData("单据日期").getStringValue():"");//单据日期
//		jsonObject.put("terminateReason", CAP4FormKit.getFieldStrValue(master, "终止原因"));//终止原因
		jsonObject.put("terminateReason", formDataVo.getFieldData("终止原因")!=null?formDataVo.getFieldData("终止原因").getStringValue():"");//终止原因
//		String businessTypeId = CAP4FormKit.getFieldStrValue(master, "业务类型");
		String businessTypeId = formDataVo.getFieldData("业务类型")!=null?formDataVo.getFieldData("业务类型").getDbValue()+"":"";
		String businessType = getEnumManagerNew().getEnumItem(Long.parseLong(businessTypeId)).getLabel();
		jsonObject.put("businessType", businessType);//终止类型
//		String str = SystemEnvironment.getApplicationFolder();
//		String date = DateUtil.format(new Date(), "yyyyMMddHHmmss");
//		FileUtils.writeStringToFile(new File(str+"/OrdinaryContractjson/"+date.substring(0,4)+"/"+date.substring(4,6)+"/"+date.substring(6,8)+"/BIPSKZZ_" + date + ".json"), jsonObject.toString(), "UTF-8");
		return jsonObject;
	}
	
	
	/**
	 * 一般付款合同参数封装
	 * @param formDataVo
	 * @return
	 * @throws IOException
	 * @throws BusinessException
	 */
	public JSONObject getOrdinaryContractFKStopParam(FormDataVo formDataVo) throws NoSuchFieldException {
		JSONObject jsonObject = new JSONObject();
//		jsonObject.put("vbillcode", CAP4FormKit.getFieldStrValue(master, "合同编号"));//合同编号
		jsonObject.put("vbillcode", formDataVo.getFieldData("合同编号")!=null?formDataVo.getFieldData("合同编号").getStringValue():"");//合同编号
//		jsonObject.put("vexecdate", CAP4FormKit.getFieldStrValue(master, "单据日期"));//单据日期
		jsonObject.put("vexecdate", formDataVo.getFieldData("单据日期")!=null?formDataVo.getFieldData("单据日期").getStringValue():"");//单据日期
//		jsonObject.put("terminateReason", CAP4FormKit.getFieldStrValue(master, "终止原因"));//终止原因
		jsonObject.put("terminateReason", formDataVo.getFieldData("终止原因")!=null?formDataVo.getFieldData("终止原因").getStringValue():"");//终止原因
//		String businessTypeId = CAP4FormKit.getFieldStrValue(master, "业务类型");
		String businessTypeId = formDataVo.getFieldData("业务类型")!=null?formDataVo.getFieldData("业务类型").getDbValue()+"":"";
		String businessType = getEnumManagerNew().getEnumItem(Long.parseLong(businessTypeId)).getLabel();
		jsonObject.put("businessType", businessType);//终止类型
//		String str = SystemEnvironment.getApplicationFolder();
//		String date = DateUtil.format(new Date(), "yyyyMMddHHmmss");
//		FileUtils.writeStringToFile(new File(str+"/OrdinaryContractjson/"+date.substring(0,4)+"/"+date.substring(4,6)+"/"+date.substring(6,8)+"/BIPFKZZ_" + date + ".json"), jsonObject.toString(), "UTF-8");
		return jsonObject;
	}
	
}
