package com.steering.pss.plnsaleord.processOrder;

import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;

import CoreFS.SA06.CoreReturnObject;
import CoreFS.SA08.CoreXmlSqlParsersFactory;
import CoreFS.SC01.CoreConstantData;

import com.steering.comm.db.DBCommon;
import com.steering.comm.tools.EntityTool;
import com.steering.pss.plnsaleord.base.PlnHelper;
import com.steering.pss.plnsaleord.processOrder.entity.SlmBaseMaterialKPlEntity;

/**
 * 加工产线能力
 * 
 * @author Administrator
 * 
 */
public class FrmBaseMaterialIPl extends DBCommon {
	/**
	 * 初始化加工基础产线
	 * 
	 * @return
	 */
	public CoreReturnObject getBaseJgxPline(String groupId) {
		Object[] params = new Object[] { groupId, groupId, groupId };
		return this
				.getDataBySqlID("FrmBaseMaterialIPl.getBaseJgxPline", params);
	}

	/**
	 * 初始化物料描述
	 * 
	 * @param inMaterialNo
	 *            投入物料
	 * @param outMaterialNo
	 *            产出物料
	 * @return
	 */
	public CoreReturnObject getMaterialDesc(String inMaterialNo,
			String outMaterialNo) {
		Object[] params = new Object[] { inMaterialNo, outMaterialNo };
		return this
				.getDataBySqlID("FrmBaseMaterialIPl.getMaterialDesc", params);
	}

	/**
	 * 查询加工产线能力
	 * 
	 * @param inMaterialNo
	 * @param outMaterialNo
	 * @return
	 */
	public CoreReturnObject getGjxPl(String inMaterialNo, String outMaterialNo,
			String groupId) {
		Object[] params = new Object[] { inMaterialNo, outMaterialNo, groupId,
				groupId, groupId };
		return this.getDataBySqlID("FrmBaseMaterialIPl.getGjxPl", params);
	}

	/**
	 * 验证是否存在记录
	 * 
	 * @param plineCode
	 *            产线
	 * @param inMaterialNo
	 *            投入物料
	 * @param outMaterialNo
	 *            产出物料
	 * @return
	 */
	public CoreReturnObject checkIsExist(String plineCode, String inMaterialNo,
			String outMaterialNo) {
		Object[] params = new Object[] { plineCode, inMaterialNo, outMaterialNo };
		return this.getDataBySqlID("FrmBaseMaterialIPl.checkIsExist", params);
	}

	/**
	 * 产线能力操作
	 * 
	 * @param iPlEntitys
	 * @param flag
	 * @return
	 */
	public CoreReturnObject saveGjxPl(ArrayList<String> jsonList, String flag) {
		List<SlmBaseMaterialKPlEntity> iPlEntitys = PlnHelper
				.jsonsToEntityList(SlmBaseMaterialKPlEntity.class, jsonList);
		ArrayList<String> sqllist = new ArrayList<String>();
		for (SlmBaseMaterialKPlEntity fPlEntity : iPlEntitys) {
			if (fPlEntity.getDisableFl().equals("True")) {
				fPlEntity.setDisableFl("1");
			} else {
				fPlEntity.setDisableFl("0");
			}
			FrmBaseMaterialIPl.nullConverNullString(fPlEntity);
		}
		if (flag.equals("0")) {
			// 新增
			for (SlmBaseMaterialKPlEntity fPlEntity : iPlEntitys) {
				String sql = CoreXmlSqlParsersFactory
						.getSql("FrmBaseMaterialIPl.addJgxPl");
				sql = EntityTool.fillSqlByEntity(sql, fPlEntity);
				sqllist.add(sql);
			}
		} else if (flag.equals("1")) {
			// 修改
			for (SlmBaseMaterialKPlEntity fPlEntity : iPlEntitys) {
				String sql = CoreXmlSqlParsersFactory
						.getSql("FrmBaseMaterialIPl.updateJgxPl");
				sql = EntityTool.fillSqlByEntity(sql, fPlEntity);
				sqllist.add(sql);
			}
		} else {
			// 删除
			for (SlmBaseMaterialKPlEntity fPlEntity : iPlEntitys) {
				String sql = CoreXmlSqlParsersFactory
						.getSql("FrmBaseMaterialIPl.deleteJgxPl");
				sql = EntityTool.fillSqlByEntity(sql, fPlEntity);
				sqllist.add(sql);
			}
		}
		return this.getDao(CoreConstantData.sysbeanstr).ExcuteTransction(
				sqllist);
	}

	/**
	 * @param src
	 *            源字符串
	 * @return 字符串，将src的第一个字母转换为大写，src为空时返回null
	 */
	public static String change(String src) {
		if (src != null) {
			StringBuffer sb = new StringBuffer(src);
			sb.setCharAt(0, Character.toUpperCase(sb.charAt(0)));
			return sb.toString();
		} else {
			return null;
		}
	}

	/**
	 * 将对象属性NULL转化为空字符串
	 * 
	 * @param obj
	 */
	public static void nullConverNullString(Object obj) {
		if (obj != null) {
			Class<? extends Object> classz = obj.getClass();
			// 获取所有该对象的属性值
			Field fields[] = classz.getDeclaredFields();
			// 遍历属性值，取得所有属性为 null 值的
			for (Field field : fields) {
				try {
					Type t = field.getGenericType();
					if (!t.toString().equals("boolean")) {
						Method m = classz.getMethod("get"
								+ change(field.getName()));
						Object name = m.invoke(obj);// 调用该字段的get方法
						if (name == null) {

							Method mtd = classz.getMethod(
									"set" + change(field.getName()),
									new Class[] { String.class });// 取得所需类的方法对象
							mtd.invoke(obj, new Object[] { "" });// 执行相应赋值方法
						}
					}

				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		}
	}

}
