Package org.jeecgframework.web.cgform.controller.build

Source Code of org.jeecgframework.web.cgform.controller.build.CgFormBuildController

package org.jeecgframework.web.cgform.controller.build;

import java.io.BufferedWriter;
import java.io.IOException;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.jeecgframework.web.cgform.common.CgAutoListConstant;
import org.jeecgframework.web.cgform.common.CommUtils;
import org.jeecgframework.web.cgform.engine.TempletContext;
import org.jeecgframework.web.cgform.entity.config.CgFormHeadEntity;
import org.jeecgframework.web.cgform.entity.upload.CgUploadEntity;
import org.jeecgframework.web.cgform.exception.BusinessException;
import org.jeecgframework.web.cgform.service.build.DataBaseService;
import org.jeecgframework.web.cgform.service.config.CgFormFieldServiceI;

import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.jeecgframework.core.common.controller.BaseController;
import org.jeecgframework.core.common.model.json.AjaxJson;
import org.jeecgframework.core.util.DBTypeUtil;
import org.jeecgframework.core.util.StringUtil;
import org.jeecgframework.core.util.UUIDGenerator;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import freemarker.template.Template;
import freemarker.template.TemplateException;

/**
* @ClassName: formBuildController
* @Description: 读取模板生成填报表单(添加、修改)-执行表单数据添加和修改操作
* @author 周俊峰
*/
@Controller
@RequestMapping("/cgFormBuildController")
public class CgFormBuildController extends BaseController {
  private static final Logger logger = Logger.getLogger(CgFormBuildController.class);
  private String message;
 
  @Autowired
  private TempletContext templetContext;
  @Autowired
  private DataBaseService dataBaseService;
 
  @Autowired
  private CgFormFieldServiceI cgFormFieldService;

  public String getMessage() {
    return message;
  }

  public void setMessage(String message) {
    this.message = message;
  }
 
  /**
   * form表单页面跳转
   */
  @SuppressWarnings("unchecked")
  @RequestMapping(params = "ftlForm")
  public void ftlForm(HttpServletRequest request,HttpServletResponse response) {
    try {
      long start = System.currentTimeMillis();
      String tableName =request.getParameter("tableName");
      Template template = templetContext.getTemplate(tableName);
      StringWriter stringWriter = new StringWriter();
      BufferedWriter writer = new BufferedWriter(stringWriter);
          Map<String, Object> data = new HashMap<String, Object>();
          String id = request.getParameter("id");
          //获取版本号
          String version = cgFormFieldService.getCgFormVersionByTableName(tableName);
          //装载表单配置
        Map configData = cgFormFieldService.getFtlFormConfig(tableName,version);
        data = new HashMap(configData);
        //如果该表是主表查出关联的附表
        CgFormHeadEntity head = (CgFormHeadEntity)data.get("head");
          Map<String, Object> dataForm = new HashMap<String, Object>();
          if(StringUtils.isNotEmpty(id)){
            dataForm = dataBaseService.findOneForJdbc(tableName, id);
          }
          Iterator it=dataForm.entrySet().iterator();
        while(it.hasNext()){
          Map.Entry entry=(Map.Entry)it.next();
            String ok=(String)entry.getKey();
            Object ov=entry.getValue();
            data.put(ok, ov);
        }
          Map<String, Object> tableData  = new HashMap<String, Object>();
          //获取主表或单表表单数据
          tableData.put(tableName, dataForm);
          //获取附表表表单数据
        if(StringUtils.isNotEmpty(id)){
          if(head.getJformType()==CgAutoListConstant.JFORM_TYPE_MAIN_TALBE){
            String subTableStr = head.getSubTableStr();
            if(StringUtils.isNotEmpty(subTableStr)){
               String [] subTables = subTableStr.split(",");
               List<Map<String,Object>> subTableData = new ArrayList<Map<String,Object>>();
               for(String subTable:subTables){
                  subTableData = cgFormFieldService.getSubTableData(tableName,subTable,id);
                  tableData.put(subTable, subTableData);
               }
            }
          }
        }
        //装载单表/(主表和附表)表单数据
        data.put("data", tableData);
        data.put("id", id);
        //装载附件信息数据
        pushFiles(data,id);
      template.process(data, writer);
      String content = stringWriter.toString();
      response.setContentType("text/html;charset=utf-8");
      response.getWriter().print(content);
      long end = System.currentTimeMillis();
      logger.debug("自定义表单生成耗时:"+(end-start)+" ms");
    } catch (IOException e) {
      e.printStackTrace();
    } catch (TemplateException e) {
      e.printStackTrace();
    }

  }
 
  /**
   * 如果表单带有附件,则查询出来传递到页面
   * @param data 传往页面的数据容器
   * @param id 表单主键,用户查找附件数据
   */
  private void pushFiles(Map<String, Object> data, String id) {
    List<CgUploadEntity> uploadBeans = cgFormFieldService.findByProperty(CgUploadEntity.class, "cgformId", id);
    List<Map<String,Object>> files = new ArrayList<Map<String,Object>>(0);
    for(CgUploadEntity b:uploadBeans){
      String title = b.getAttachmenttitle();//附件名
      String fileKey = b.getId();//附件主键
      String path = b.getRealpath();//附件路径
      String field = b.getCgformField();//表单中作为附件控件的字段
      Map<String, Object> file = new HashMap<String, Object>();
      file.put("title", title);
      file.put("fileKey", fileKey);
      file.put("path", path);
      file.put("field", field==null?"":field);
      files.add(file);
    }
    data.put("filesList", files);
  }

  /**
   * 保存或更新
   *
   * @param jeecgDemo
   * @param request
   * @return
   * @throws Exception
   */
  @SuppressWarnings("unchecked")
  @RequestMapping(params = "saveOrUpdate")
  @ResponseBody
  public AjaxJson saveOrUpdate(HttpServletRequest request) throws Exception{
    AjaxJson j = new AjaxJson();
    Map data = request.getParameterMap();
    if(data!=null){
      data = CommUtils.mapConvert(data);
      String tableName = (String)data.get("tableName");
      String id = (String)data.get("id");
      //打印测试
        Iterator it=data.entrySet().iterator();
        while(it.hasNext()){
          Map.Entry entry=(Map.Entry)it.next();
            Object ok=entry.getKey();
            Object ov=entry.getValue()==null?"":entry.getValue();
            logger.debug("name:"+ok.toString()+";value:"+ov.toString());
        }
        if(StringUtils.isEmpty(id)){
          //消除不是表的字段
          String [] filterName = {"tableName","saveOrUpdate"};
          data = CommUtils.attributeMapFilter(data,filterName);
          //保存数据库
          try {
            Object pkValue = null;
            pkValue = dataBaseService.getPkValue(tableName);
            data.put("id", pkValue);
          int num = dataBaseService.insertTable(tableName, data);
          if (num>0) {
            j.setSuccess(true);
            message = "添加成功";
          }else {
            j.setSuccess(false);
            message = "添加失败";
          }
        } catch (Exception e) {
          e.printStackTrace();
          j.setSuccess(false);
          message = e.getMessage();
        }
      }else{
        //消除不是表的字段
          String [] filterName = {"tableName","saveOrUpdate","id"};
          data = CommUtils.attributeMapFilter(data,filterName);
          //更新数据库
          try {
          int num = dataBaseService.updateTable(tableName, id, data);
          if (num>0) {
            j.setSuccess(true);
            message = "更新成功";
          }else {
            j.setSuccess(false);
            message = "更新失败";
          }
         
        } catch (Exception e) {
          e.printStackTrace();
          j.setSuccess(false);
          message = e.getMessage();
        }
      }
    }
    j.setMsg(message);
    j.setObj(data);
    return j;
  }
 
 
 
  /**
   * 保存或更新
   *
   * @param jeecgDemo
   * @param request
   * @return
   * @throws Exception
   */
  @SuppressWarnings("unchecked")
  @RequestMapping(params = "saveOrUpdateMore")
  @ResponseBody
  public AjaxJson saveOrUpdateMore(HttpServletRequest request) throws Exception{
    AjaxJson j = new AjaxJson();
    Map data = request.getParameterMap();
    if(data!=null){
      data = CommUtils.mapConvert(data);
      String tableName = (String)data.get("tableName");
      String id = (String)data.get("id");
      //打印测试
        Iterator it=data.entrySet().iterator();
        while(it.hasNext()){
          Map.Entry entry=(Map.Entry)it.next();
            Object ok=entry.getKey();
            Object ov=entry.getValue()==null?"":entry.getValue();
            logger.debug("name:"+ok.toString()+";value:"+ov.toString());
        }
        Map<String,List<Map<String,Object>>> mapMore =CommUtils.mapConvertMore(data, tableName);
        if(StringUtils.isEmpty(id)){
          logger.info("一对多添加!!!!!");
          try {
            Map<String, Object> result = dataBaseService.insertTableMore(mapMore, tableName);
            data.put("id", result.get("id"));
            j.setSuccess(true);
          message = "添加成功";
        } catch (BusinessException e) {
          e.printStackTrace();
          j.setSuccess(false);
          message = e.getMessage();
        }
         
      }else{
        logger.info("一对多修改!!!!!");
        try {
          dataBaseService.updateTableMore(mapMore, tableName);
          j.setSuccess(true);
          message = "更新成功";
        } catch (BusinessException e) {
          e.printStackTrace();
          j.setSuccess(false);
          message = e.getMessage();
        }
      }
    }
    j.setMsg(message);
    j.setObj(data);
    return j;
  }
 
 
  /**
   * 自定义按钮(触发对应的后台方法)
   */
  @SuppressWarnings("unchecked")
  @RequestMapping(params = "doButton")
  @ResponseBody
  public AjaxJson doButton(HttpServletRequest request){
    AjaxJson j = new AjaxJson();
    try {
      String formId = request.getParameter("formId");
      String buttonCode = request.getParameter("buttonCode");
      String tableName = request.getParameter("tableName");
      String id = request.getParameter("id");
      Map<String,Object> data  = dataBaseService.findOneForJdbc(tableName, id);
      if(data!=null){
        //打印测试
          Iterator it=data.entrySet().iterator();
          while(it.hasNext()){
            Map.Entry entry=(Map.Entry)it.next();
              Object ok=entry.getKey();
              Object ov=entry.getValue()==null?"":entry.getValue();
              logger.debug("name:"+ok.toString()+";value:"+ov.toString());
          }
        data = CommUtils.mapConvert(data);
        dataBaseService.executeSqlExtend(formId, buttonCode, data);
      }
      j.setSuccess(true);
      message = "操作成功";
    } catch (Exception e) {
      e.printStackTrace();
      message = "操作失败";
    }
    j.setMsg(message);
    return j;
  }
 
}
TOP

Related Classes of org.jeecgframework.web.cgform.controller.build.CgFormBuildController

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.