import java.io.IOException;
import java.util.Map;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import com.chongdong.common.exception.APIException;
import com.chongdong.common.util.JacksonUtils;
import com.chongdong.common.util.freemarker.Freemarker;
import com.chongdong.data.entity.OrdBase;
import com.chongdong.data.entity.OrdExtend;
import com.chongdong.service.order.biz.OrdBaseBiz;
import freemarker.core.Environment;
import freemarker.template.TemplateDirectiveBody;
import freemarker.template.TemplateDirectiveModel;
import freemarker.template.TemplateException;
import freemarker.template.TemplateModel;
import freemarker.template.WrappingTemplateModel;
/**
* 订单宏
* @author yanxh
*
*/
@Repository
public class OrderDetail implements TemplateDirectiveModel {
@Autowired
private OrdBaseBiz ordBaseBiz;
/**
* @param env 系统环境变量,通常用它来输出相关内容,如Writer out = env.getOut();
* @param map 自定义标签传过来的对象,其key=自定义标签的参数名,value值是TemplateModel类型,而TemplateModel是一个接口类型,通常我们都使用TemplateScalarModel接口来替代它获取一个String 值,如TemplateScalarModel.getAsString();当然还有其它常用的替代接口,如TemplateNumberModel获取number,TemplateHashModel等
* @param loopVars 循环替代变量
* @param body 用于处理自定义标签中的内容;当标签是<@myDirective />格式时,body=null
*/
@Override
public void execute(Environment env, Map map, TemplateModel[] loopVars,
TemplateDirectiveBody body) throws TemplateException, IOException {
/**
* 订单ID字符串
*/
Long orderId = Freemarker.getLong(map, "orderId");
/**
* 获取订单信息
*/
OrdBase ordBase = null;
try {
ordBase = ordBaseBiz.getDetail(orderId);
} catch (APIException e) {
e.printStackTrace();
}
/**
* 获取dataJson
*/
Map<String, Object> jsonMap = null;
try {
OrdExtend ordExtend = ordBase.getOrdExtend();
if(ordExtend != null) {
String dataJson = ordExtend.getDataJson();
if(!StringUtils.isBlank(dataJson)) {
jsonMap = JacksonUtils.json2map(dataJson);
}
}
} catch (Exception e) {
e.printStackTrace();
}
loopVars[0]=WrappingTemplateModel.getDefaultObjectWrapper().wrap(ordBase);
loopVars[1]=WrappingTemplateModel.getDefaultObjectWrapper().wrap(jsonMap);
body.render(env.getOut());
}
}