Package com.sogou.qadev.service.cynthia.service

Source Code of com.sogou.qadev.service.cynthia.service.DataManager

package com.sogou.qadev.service.cynthia.service;

import java.sql.Timestamp;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeSet;

import com.sogou.qadev.cache.impl.FieldNameCache;
import com.sogou.qadev.service.cynthia.bean.Action;
import com.sogou.qadev.service.cynthia.bean.Attachment;
import com.sogou.qadev.service.cynthia.bean.ChangeLog;
import com.sogou.qadev.service.cynthia.bean.CommonField;
import com.sogou.qadev.service.cynthia.bean.CommonOption;
import com.sogou.qadev.service.cynthia.bean.Data;
import com.sogou.qadev.service.cynthia.bean.Field;
import com.sogou.qadev.service.cynthia.bean.Role;
import com.sogou.qadev.service.cynthia.bean.Field.DataType;
import com.sogou.qadev.service.cynthia.bean.Field.Type;
import com.sogou.qadev.service.cynthia.bean.Flow;
import com.sogou.qadev.service.cynthia.bean.Option;
import com.sogou.qadev.service.cynthia.bean.Stat;
import com.sogou.qadev.service.cynthia.bean.Template;
import com.sogou.qadev.service.cynthia.bean.UUID;
import com.sogou.qadev.service.cynthia.dao.DataAccessSessionMySQL;
import com.sogou.qadev.service.cynthia.factory.DataAccessFactory;
import com.sogou.qadev.service.cynthia.service.ErrorManager.ErrorType;
import com.sohu.rd.td.util.xml.XMLUtil;

public class DataManager
{
  private static DataManager instance = null;

  public static DataManager getInstance()
  {
    if (instance == null)
      instance = new DataManager();

    return instance;
  }

  public String makeResult(String title, String stat, String assignUser, boolean success){
    StringBuffer result = new StringBuffer();
    result.append("<result>");
    result.append("<title>").append(XMLUtil.toSafeXMLString(title)).append("</title>");
    result.append("<status>").append(XMLUtil.toSafeXMLString(stat)).append("</status>");

    if(assignUser == null){
      result.append("<assignUser/>");
    }
    else{
      result.append("<assignUser>").append(XMLUtil.toSafeXMLString(assignUser)).append("</assignUser>");
    }

    result.append("<success>").append(success).append("</success>");
    result.append("</result>");

    return result.toString();
  }

  public String makeModifyStatResult(String title, boolean success){
    StringBuffer result = new StringBuffer();
    result.append("<result>");
    result.append("<title>").append(XMLUtil.toSafeXMLString(title)).append("</title>");
    result.append("<success>").append(success).append("</success>");
    result.append("</result>");

    return result.toString();
  }
 
  public synchronized void addExtFields(UUID templateId, Map<String, CommonField> fieldMap, Map<String, Set<CommonOption>> fieldOptionMap, DataAccessSession das)
  {
    Template template = das.queryTemplate(templateId);
    if(template == null)
      return;

    Set<Field> fieldSet = template.getFields();
    if(fieldSet == null)
      return;

    for(Field field : fieldSet)
    {
      CommonField commonField = new CommonField();
      commonField.setId(field.getId().toString());
      commonField.setName(field.getName());
      commonField.setType(field.getType().toString().split("\\_")[1]);
      if(field.getDataType() != null)
        commonField.setDataType(field.getDataType().toString().split("\\_")[1]);

      fieldMap.put(commonField.getId(), commonField);

      if(field.getType().equals(Field.Type.t_selection))
      {
        if(field.getOptions() != null && field.getOptions().size() > 0)
        {
          fieldOptionMap.put(commonField.getId(), new TreeSet<CommonOption>());

          for(Option option : field.getOptions())
          {
            CommonOption commonOption = new CommonOption();
            commonOption.setId(option.getId().toString());
            commonOption.setName(option.getName());

            fieldOptionMap.get(commonField.getId()).add(commonOption);
          }
        }
      }
      else if(field.getType().equals(Field.Type.t_reference))
      {
        Data[] referenceArray = das.queryTemplateFieldReferences(templateId, field.getId());
        if(referenceArray != null && referenceArray.length > 0)
        {
          fieldOptionMap.put(commonField.getId(), new TreeSet<CommonOption>());

          for(Data reference : referenceArray)
          {
            CommonOption commonOption = new CommonOption();
            commonOption.setId(reference.getId().toString());
            commonOption.setName(reference.getTitle());

            fieldOptionMap.get(commonField.getId()).add(commonOption);
          }
        }
      }
      else if(field.getType().equals(Field.Type.t_attachment))
      {
        Attachment[] attachmentArray = das.queryTemplateFieldAttachments(templateId, field.getId());
        if(attachmentArray != null && attachmentArray.length > 0)
        {
          fieldOptionMap.put(commonField.getId(), new TreeSet<CommonOption>());

          for(Attachment attachment : attachmentArray)
          {
            CommonOption commonOption = new CommonOption();
            commonOption.setId(attachment.getId().toString());
            commonOption.setName(attachment.getName());

            fieldOptionMap.get(commonField.getId()).add(commonOption);
          }
        }
      }
    }
  }

  public String getDataFieldValue(UUID dataId, UUID templateId, UUID fieldId, DataAccessSession das)
  {
    Data data = das.queryData(dataId,templateId);
    if(data == null)
      return null;

    Field field = das.queryField(fieldId , data.getTemplateId());
    if(field == null)
      return null;

    if(field.getType().equals(Field.Type.t_selection))
    {
      if(field.getDataType().equals(Field.DataType.dt_single))
      {
        UUID optionId = data.getSingleSelection(fieldId);
        if(optionId == null)
          return null;

        Option option = field.getOption(optionId);
        if(option != null)
          return "[" + option.getName() + "]";
      }
      else if(field.getDataType().equals(Field.DataType.dt_multiple))
      {
        UUID[] optionIdArray = data.getMultiSelection(fieldId);
        if(optionIdArray == null || optionIdArray.length == 0)
          return null;

        StringBuffer valueStrb = new StringBuffer();
        for(UUID optionId : optionIdArray)
        {
          Option option = field.getOption(optionId);
          if(option == null)
            continue;

          if(valueStrb.length() > 0)
            valueStrb.append(",");

          valueStrb.append("[").append(option.getName()).append("]");
        }

        return valueStrb.toString();
      }
    }
    else if(field.getType().equals(Field.Type.t_reference))
    {
      if(field.getDataType().equals(Field.DataType.dt_single))
      {
        UUID referenceId = data.getSingleReference(fieldId);
        if(referenceId == null)
          return null;

        String[] referTitleArray = new DataAccessSessionMySQL().queryFieldByIds(new UUID[]{referenceId}, "title", templateId);
        if(referTitleArray != null && referTitleArray.length > 0)
          return "[" + referTitleArray[0] + "]";
      }
      else if(field.getDataType().equals(Field.DataType.dt_multiple))
      {
        UUID[] referenceIdArray = data.getMultiReference(fieldId);
        if(referenceIdArray == null || referenceIdArray.length == 0)
          return null;

        StringBuffer valueStrb = new StringBuffer();
        String[] referTitleArray = new DataAccessSessionMySQL().queryFieldByIds(referenceIdArray, "title", templateId);

        for(String title : referTitleArray)
        {
          if(title == null)
            continue;
          if(valueStrb.length() > 0)
            valueStrb.append(",");
          valueStrb.append("[").append(title).append("]");
        }

        return valueStrb.toString();
      }
    }
    else if(field.getType().equals(Field.Type.t_attachment))
    {
      UUID[] attachmentIdArray = data.getAttachments(fieldId);
      if(attachmentIdArray == null || attachmentIdArray.length == 0)
        return null;

      StringBuffer valueStrb = new StringBuffer();

      Attachment[] attachmentArray = das.queryAttachments(attachmentIdArray, false);
      for(Attachment attachment : attachmentArray)
      {
        if(valueStrb.length() > 0)
          valueStrb.append(",");

        valueStrb.append("[").append(attachment.getName()).append("]");
      }

      return valueStrb.toString();
    }
    else if(field.getType().equals(Field.Type.t_input))
    {
      Object value = null;

      if(field.getDataType().equals(Field.DataType.dt_integer))
        value = data.getInteger(fieldId);
      else if(field.getDataType().equals(Field.DataType.dt_long))
        value = data.getLong(fieldId);
      else if(field.getDataType().equals(Field.DataType.dt_float))
        value = data.getFloat(fieldId);
      else if(field.getDataType().equals(Field.DataType.dt_double))
        value = data.getDouble(fieldId);
      else if(field.getDataType().equals(Field.DataType.dt_string) || field.getDataType().equals(Field.DataType.dt_text))
        value = data.getString(fieldId);
      else if(field.getDataType().equals(Field.DataType.dt_timestamp))
        value = data.getDate(fieldId);

      if(value != null)
        return value.toString();
    }

    return null;
  }

  public String getDataStatus(Data data, DataAccessSession das)
  {
    Template template = das.queryTemplate(data.getTemplateId());
    if(template == null)
      return null;

    Flow flow = das.queryFlow(template.getFlowId());
    if(flow == null)
      return null;

    Stat stat = flow.getStat(data.getStatusId());
    if(stat == null)
      return null;

    return stat.getName();
  }

  public UUID getDataTemplateTypeId(Data data, DataAccessSession das)
  {
    Template template = das.queryTemplate(data.getTemplateId());
    if(template == null)
      return null;

    return template.getTemplateTypeId();
  }

  public String getBatchStatusModifyXML(UUID[] dataIdArray,DataAccessSession das){

    Set<String> nodeStatusSet = new HashSet<String>();

    Set<Stat> allStatSet = new LinkedHashSet<Stat>();
   
    for(UUID dataId : dataIdArray)
    {
      Data data = das.queryData(dataId);
      if(data == null)
        continue;

      Template template = das.queryTemplate(data.getTemplateId());
      if(template == null)
        continue;

      if(nodeStatusSet.contains(template.getId() + "|" + data.getStatusId()))
        continue;

      nodeStatusSet.add(template.getId() + "|" + data.getStatusId());

      Flow flow = das.queryFlow(template.getFlowId());
      if(flow == null)
        continue;
      boolean isEditAllow = flow.isEditActionAllow(das.getUsername(), template.getId(), data.getAssignUsername(), data.getActionUser());

      if(isEditAllow){//具有编辑权限的人可以批量修改状态
        Stat[] allStats = flow.getStats();
        allStatSet.addAll(Arrays.asList(allStats));
      }
    }

    StringBuffer strb = new StringBuffer();
    strb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
    if(allStatSet.size() == 0)
      strb.append("<stats/>");
    else
    {
      strb.append("<stats>");

      for(Stat stat : allStatSet)
      {
        strb.append("<stat>");
        strb.append("<id>").append(stat.getId().getValue()).append("</id>");
        strb.append("<name>").append(XMLUtil.toSafeXMLString(stat.getName())).append("</name>");
        strb.append("</stat>");
      }

      strb.append("</stats>");
    }

    return strb.toString();
  }
 
  public String getBatchCloseActionsXML(UUID[] dataIdArray,DataAccessSession das)
  {
    Map<String, Set<String>> actionUserMap = new LinkedHashMap<String, Set<String>>();

    Set<String> nodeStatusSet = new HashSet<String>();

    for(UUID dataId : dataIdArray)
    {
      Data data = das.queryData(dataId);
      if(data == null)
        continue;

      Template template = das.queryTemplate(data.getTemplateId());
      if(template == null)
        continue;

      if(nodeStatusSet.contains(template.getId() + "|" + data.getStatusId()))
        continue;

      nodeStatusSet.add(template.getId() + "|" + data.getStatusId());

      Flow flow = das.queryFlow(template.getFlowId());
      if(flow == null)
        continue;
      boolean isEditAllow = flow.isEditActionAllow(das.getUsername(), template.getId(), data.getAssignUsername(), data.getActionUser());
      Set<Action> actionSet = new LinkedHashSet<Action>();

      if(isEditAllow){//具有编辑权限的人可以批量关闭BUG add by lyl
        Action[] endActions = flow.getEndActions();
        for(int i=0;endActions!=null && i<endActions.length;i++){
          actionSet.add(endActions[i]);
        }
      }
      for(Action action : actionSet)
      {
        String actionName = action.getName();
        if(action.getBeginStatId() == null)
          actionName = "激活--" + actionName;

        actionUserMap.put(actionName, new LinkedHashSet<String>());

        String[] userArray = flow.queryNodeStatAssignUsers(template.getId(), action.getEndStatId());
        if(userArray != null)
          actionUserMap.get(actionName).addAll(Arrays.asList(userArray));
      }
    }

    StringBuffer strb = new StringBuffer();
    strb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
    if(actionUserMap.size() == 0)
      strb.append("<actions/>");
    else
    {
      strb.append("<actions>");

      for(String actionName : actionUserMap.keySet())
      {
        strb.append("<action>");
        strb.append("<name>").append(XMLUtil.toSafeXMLString(actionName)).append("</name>");
        Set<String> userSet = actionUserMap.get(actionName);
        if(userSet == null || userSet.size() == 0)
          strb.append("<users/>");
        else
        {
          strb.append("<users>");
          for(String user : userSet)
            strb.append("<user>").append(XMLUtil.toSafeXMLString(user)).append("</user>");
          strb.append("</users>");
        }
        strb.append("</action>");
      }

      strb.append("</actions>");
    }

    return strb.toString();
  }

  public String getActionsXML(UUID[] dataIdArray, DataAccessSession das)
  {
    Map<String, Set<String>> actionUserMap = new LinkedHashMap<String, Set<String>>();

    Set<String> nodeStatusSet = new HashSet<String>();

    for(UUID dataId : dataIdArray)
    {
      Data data = das.queryData(dataId);
      if(data == null)
        continue;

      Template template = das.queryTemplate(data.getTemplateId());
      if(template == null)
        continue;

      if(nodeStatusSet.contains(template.getId() + "|" + data.getStatusId()))
        continue;

      nodeStatusSet.add(template.getId() + "|" + data.getStatusId());

      Flow flow = das.queryFlow(template.getFlowId());
      if(flow == null)
        continue;

      boolean isEditAllow = flow.isEditActionAllow(das.getUsername(), template.getId(), data.getAssignUsername(), data.getActionUser());
      if(isEditAllow)
      {
        String[] assignUserArray = flow.queryNodeStatAssignUsers(template.getId(), data.getStatusId());
        if(assignUserArray != null)
        {
          if(!actionUserMap.containsKey("编辑"))
            actionUserMap.put("编辑", new LinkedHashSet<String>());

          actionUserMap.get("编辑").addAll(Arrays.asList(assignUserArray));
        }
      }

      Set<Action> actionSet = new LinkedHashSet<Action>();

      Action[] statActionArray = flow.queryStatActions(data.getStatusId());
      if(statActionArray == null || statActionArray.length == 0)
      {
        Action[] userNodeBeginActionArray = flow.queryUserNodeBeginActions(das.getUsername(), template.getId());
        for(int i = 0; userNodeBeginActionArray != null && i < userNodeBeginActionArray.length; i++)
          actionSet.add(userNodeBeginActionArray[i]);
      }
      else
      {
        Action[] userNodeStatActionArray = flow.queryUserNodeStatActions(das.getUsername(), template.getId(), data.getStatusId());
        for(int i = 0; userNodeStatActionArray != null && i < userNodeStatActionArray.length; i++)
          actionSet.add(userNodeStatActionArray[i]);
      }

      for(Action action : actionSet)
      {
        String actionName = action.getName();
        if(action.getBeginStatId() == null)
          actionName = "激活--" + actionName;

        actionUserMap.put(actionName, new LinkedHashSet<String>());

        String[] userArray = flow.queryNodeStatAssignUsers(template.getId(), action.getEndStatId());
        if(userArray != null)
          actionUserMap.get(actionName).addAll(Arrays.asList(userArray));
      }
    }

    StringBuffer strb = new StringBuffer();
    strb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
    if(actionUserMap.size() == 0)
      strb.append("<actions/>");
    else
    {
      strb.append("<actions>");

      for(String actionName : actionUserMap.keySet())
      {
        strb.append("<action>");
        strb.append("<name>").append(XMLUtil.toSafeXMLString(actionName)).append("</name>");
        Set<String> userSet = actionUserMap.get(actionName);
        if(userSet == null || userSet.size() == 0)
          strb.append("<users/>");
        else
        {
          strb.append("<users>");
          for(String user : userSet)
            strb.append("<user>").append(XMLUtil.toSafeXMLString(user)).append("</user>");
          strb.append("</users>");
        }
        strb.append("</action>");
      }

      strb.append("</actions>");
    }

    return strb.toString();
  }

  /**
   * @function:
   * @modifyTime:2013-9-9 下午6:22:29
   * @author:李明
   * @email: liming@sogou-inc.com
   * @param templateTypeId templateTypeId 为空时为查询所有表单
   * @param das
   * @return
   */
  public Template[] queryUserTemplates(UUID templateTypeId, DataAccessSession das)
  {
    Template[] templateArray = das.queryAllTemplates();
    if(templateArray == null || templateArray.length == 0)
      return new Template[0];

    Set<Template> templateSet = new LinkedHashSet<Template>();
    for(Template template : templateArray)
    {
      if(templateTypeId != null && !template.getTemplateTypeId().equals(templateTypeId))
        continue;
     
      Flow flow = das.queryFlow(template.getFlowId());
      if(flow == null)
        continue;
     
      Action[] actionArray = flow.queryUserNodeBeginActions(das.getUsername(), template.getId());
      if(actionArray != null && actionArray.length > 0)
        templateSet.add(template);
    }

    return templateSet.toArray(new Template[0]);
  }

  /**
   * @description:查询用户可查看权限表单
   * @date:2014-9-3 下午2:30:13
   * @version:v1.0
   * @param templateTypeId
   * @param das
   * @return
   */
  public Template[] queryUserReadableTemplates(UUID templateTypeId, DataAccessSession das)
  {
    Template[] templateArray = das.queryAllTemplates();
    if(templateArray == null || templateArray.length == 0)
      return new Template[0];

    Set<Template> templateSet = new LinkedHashSet<Template>();
    for(Template template : templateArray)
    {
      if(templateTypeId != null && !template.getTemplateTypeId().equals(templateTypeId))
        continue;
     
      Flow flow = das.queryFlow(template.getFlowId());
      if(flow == null)
        continue;
     
      if(flow.isRoleEditAction(Role.everyoneUUID) || flow.isRoleReadAction(Role.everyoneUUID))
      {
        //everyone 查看 编辑
        templateSet.add(template);
        continue;
      }
     
      //有everyone可操作的动作
      boolean isAdd = false;
      Action[] actionArray = flow.getActions();
      if(actionArray != null)
      {
        for(Action action : actionArray)
        {
          if(flow.isActionEveryoneRole(action.getId()))
          {
            isAdd = true;
            break;
          }
        }
      }
     
      if(isAdd)
      {
        templateSet.add(template);
        continue;
      }
     
      //其它角色查看
      List<Role> userRoleList = Arrays.asList(flow.queryUserNodeRoles(das.getUsername(), template.getId()));
      Role[] readActionRoles = flow.queryReadActionRoles();
     
      for(Role role : readActionRoles){
        if(userRoleList.contains(role)){
          templateSet.add(template);
        }
      }
    }

    return templateSet.toArray(new Template[0]);
  }
 
  /**
   * @function:
   * @modifyTime:2013-9-9 下午6:22:29
   * @author:李明
   * @email: liming@sogou-inc.com
   * @param das
   * @return
   */
  public Template[] queryUserTemplates(DataAccessSession das)
  {
    Template[] templateArray = das.queryAllTemplates();
    if(templateArray == null || templateArray.length == 0)
      return new Template[0];

    Set<Template> templateSet = new LinkedHashSet<Template>();
    for(Template template : templateArray)
    {
      Flow flow = das.queryFlow(template.getFlowId());
      if(flow == null)
        continue;
     
      Action[] actionArray = flow.queryUserNodeBeginActions(das.getUsername(), template.getId());
      if(actionArray != null && actionArray.length > 0)
        templateSet.add(template);
    }

    return templateSet.toArray(new Template[0]);
  }

  //根据日期判断是否为选择数据
  private static boolean isSelectedData(String startDate,String endDate,String date)
  {
    if(startDate ==null&&endDate == null)
      return false;
    if(startDate == null&&(date.compareTo(endDate)<=0))
      return true;
    else if(endDate == null&&(date.compareTo(startDate)>=0))
      return true;
    else if(date.compareTo(startDate)>=0&&date.compareTo(endDate)<=0)
      return true
    else
      return false;
  }

  private static String transferTime2String(Timestamp time)
  {
    SimpleDateFormat  sdf = new SimpleDateFormat ("yyyy-MM-dd");
    return sdf.format(time);
  }

  //查询状态名
  private static String queryStatName(Stat[] stats,UUID statId)
  {
    for(Stat stat : stats)
    {
      if(stat.getId().equals(statId))
        return stat.getName();
    }
    return "";
  }

  //查询单选值
  private static String querySingleOptionName(Set<Option> options,UUID optionId)
  {
    for(Option option : options)
    {
      if(option.getId().equals(optionId))
        return option.getName();
    }
    return "";
  }
  //查询多选值
  private static String queryMultiOptionName(Set<Option> options,UUID[] optionIds)
  {
    String allOptions = "";
    for(UUID uuid : optionIds){
      for(Option option : options){
        if(option.getId().equals(uuid))
          allOptions += option.getName()+",";
      }
    }
    if(allOptions.length()>0)
      allOptions = allOptions.substring(0,allOptions.length()-1);
    return allOptions;
  }

  private static String getFieldData(Field field,Data data){
    String returndata = "";
    if(field.getType()==Type.t_input){
      if(field.getDataType()==DataType.dt_timestamp){
        if(data.getDate(field.getId())!=null)
          returndata = "<field><id>" +field.getId().toString()+ "</id><name>" + XMLUtil.toSafeXMLString(field.getName()) + "</name><value>" + XMLUtil.toSafeXMLString(data.getDate(field.getId()).toString()) + "</value></field>";
      }else if(field.getDataType() == DataType.dt_double){
        if(data.getDouble(field.getId())!=null)
          returndata = "<field><id>" +field.getId().toString()+ "</id><name>" + XMLUtil.toSafeXMLString(field.getName()) + "</name><value>" + XMLUtil.toSafeXMLString(data.getDouble(field.getId()).toString()) + "</value></field>";
      }else if(field.getDataType() == DataType.dt_float){
        if(data.getFloat(field.getId())!=null)
          returndata = "<field><id>" +field.getId().toString()+ "</id><name>" + XMLUtil.toSafeXMLString(field.getName()) + "</name><value>" + XMLUtil.toSafeXMLString(data.getFloat(field.getId()).toString()) + "</value></field>";
      }else if(field.getDataType() == DataType.dt_integer){
        if(data.getInteger(field.getId())!=null)
          returndata = "<field><id>" +field.getId().toString()+ "</id><name>" + XMLUtil.toSafeXMLString(field.getName()) + "</name><value>" + XMLUtil.toSafeXMLString(data.getInteger(field.getId()).toString()) + "</value></field>";
      }else if(field.getDataType() == DataType.dt_float){
        if(data.getFloat(field.getId())!=null)
          returndata = "<field><id>" +field.getId().toString()+ "</id><name>" + XMLUtil.toSafeXMLString(field.getName()) + "</name><value>" + XMLUtil.toSafeXMLString(data.getFloat(field.getId()).toString()) + "</value></field>";
       
      }else if(field.getDataType() == DataType.dt_long){
        if(data.getLong(field.getId())!=null)
          returndata = "<field><id>" +field.getId().toString()+ "</id><name>" + XMLUtil.toSafeXMLString(field.getName()) + "</name><value>" + XMLUtil.toSafeXMLString(data.getLong(field.getId()).toString()) + "</value></field>";
      }else //string
        if(data.getString(field.getId())!=null)
          returndata = "<field><id>" +field.getId().toString()+ "</id><name>" + XMLUtil.toSafeXMLString(field.getName()) + "</name><value>" + XMLUtil.toSafeXMLString(data.getString(field.getId())) + "</value></field>";
      }
     
    }else if(field.getType() == Type.t_selection){
      if(field.getDataType() == DataType.dt_single){
        if(data.getSingleSelection(field.getId())!=null)
          returndata = "<field><id>" +field.getId().toString()+ "</id><name>" + XMLUtil.toSafeXMLString(field.getName()) + "</name><value>" + XMLUtil.toSafeXMLString(querySingleOptionName(field.getOptions(), data.getSingleSelection(field.getId()))) + "</value></field>";
      }else if(field.getDataType() == DataType.dt_multiple){
        if(data.getMultiSelection(field.getId())!=null)
          returndata = "<field><id>" +field.getId().toString()+ "</id><name>" + XMLUtil.toSafeXMLString(field.getName()) + "</name><value>" + XMLUtil.toSafeXMLString(queryMultiOptionName(field.getOptions(), data.getMultiSelection(field.getId()))) + "</value></field>";
      }
    }
    if(returndata == ""//表示没有值 返回空
      returndata = "<field><id>" +field.getId().toString()+ "</id><name>" + XMLUtil.toSafeXMLString(field.getName()) + "</name><value></value></field>";
    return returndata;
  }

  private static String getLogData(ChangeLog log,Flow flow){
   
    String returndata = "";
    try{
      String logActionName = flow.getAction(log.getActionId()) == null?"编辑" :flow.getAction(log.getActionId()).getName();
      returndata = "<log>"
             + "<createUser>"  + XMLUtil.toSafeXMLString(log.getCreateUser()) + "</createUser>"
             + "<createTime>"  + XMLUtil.toSafeXMLString(transferTime2String(log.getCreateTime())) + "</createTime>"
             + "<actionName>"  + XMLUtil.toSafeXMLString(logActionName) + "</actionName>"
             + "<actionComment>"  + XMLUtil.toSafeXMLString(log.getActionComment()) + "</actionComment>"
             + "</log>";
    }catch(Exception e){
      returndata = "<log></log>";
      e.printStackTrace();
    }
    return returndata;
  }

  /**
   * @function:返回基本数据xml
   * @modifyTime:2013-10-24 下午5:18:08
   * @author:李明
   * @email: liming@sogou-inc.com
   * @param das
   * @param templateIdStr
   * @param startTime
   * @return
   */
  public static String getDataXML(DataAccessSession das,String templateIdStr,String startTime)
  {
    StringBuffer  returnXml = new StringBuffer();
    returnXml.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?><root>");

    UUID templateId = DataAccessFactory.getInstance().createUUID(templateIdStr);
    Template template = das.queryTemplate(templateId);
    Flow flow = das.queryFlow(template.getFlowId());
     
    Stat[] stats = flow.getStats();   //状态
    Set<Field> allFields = template.getFields();
   
    Timestamp startTimestamp = null;
    try {
      startTimestamp = new Timestamp(new SimpleDateFormat("yyyy-MM-dd").parse(java.sql.Date.valueOf(startTime).toLocaleString()).getTime());
    } catch (ParseException e) {
      e.printStackTrace();
    }
    if(startTimestamp == null)
      return ErrorManager.getErrorXml(ErrorType.time_parse_error);
   
    Data[] templateDatas = das.queryTemplateDatas(templateId, true, startTimestamp, null);
   
    for(Data data : templateDatas)
    {
      String createTime = transferTime2String(data.getCreateTime());
      if(startTime!=null && isSelectedData(startTime,null,createTime))
      {
        returnXml.append("<fields>");
        returnXml.append("<field><name>编号</name><value>").append(XMLUtil.toSafeXMLString(data.getId().toString())).append("</value></field>");
        returnXml.append("<field><name>标题</name><value>").append(XMLUtil.toSafeXMLString(data.getTitle())).append("</value></field>");
        returnXml.append("<field><name>创建人员</name><value>").append(XMLUtil.toSafeXMLString(data.getCreateUsername())).append("</value></field>");
        returnXml.append("<field><name>创建时间</name><value>").append(XMLUtil.toSafeXMLString(data.getCreateTime().toString())).append("</value></field>");
        returnXml.append("<field><name>上次修改时间</name><value>").append(XMLUtil.toSafeXMLString(data.getLastModifyTime().toString())).append("</value></field>");
        returnXml.append("<field><name>当前状态</name><value>").append(XMLUtil.toSafeXMLString(queryStatName(stats, data.getStatusId()))).append("</value></field>");
        returnXml.append("<field><name>描述</name><value>").append(XMLUtil.toSafeXMLString(data.getDescription())).append("</value></field>");
        returnXml.append("<field><name>当前指派</name><value>").append(XMLUtil.toSafeXMLString(data.getAssignUsername())).append("</value></field>");
       
        for(Field field :allFields){
          if(field.getName()==null || field.getName().equals("null"))
            continue;
          returnXml.append(getFieldData(field, data));
        }
       
        ChangeLog[] allLogs = data.getChangeLogs();
        returnXml.append("<logs>");
        for(ChangeLog log : allLogs){
          returnXml.append(getLogData(log, flow));
        }
        returnXml.append("</logs>");
        returnXml.append("</fields>");
      }
    }
   
    returnXml.append("</root>");
    return returnXml.toString();
  }
 
 
  /**
   * @function:返回基本数据xml
   * @modifyTime:2013-10-24 下午5:18:08
   * @author:李明
   * @email: liming@sogou-inc.com
   * @param das
   * @param templateIdStr
   * @param startTime
   * @return
   */
  public static String getDataXMLNew(DataAccessSession das,String templateIdStr,String startTime, String endTime,boolean needLog)
  {
    StringBuffer  returnXml = new StringBuffer();
    returnXml.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?><root>");

    UUID templateId = DataAccessFactory.getInstance().createUUID(templateIdStr);
    Template template = das.queryTemplate(templateId);
    Flow flow = das.queryFlow(template.getFlowId());
     
    Stat[] stats = flow.getStats();   //状态
    Set<Field> allFields = template.getFields();
   
    Timestamp startTimestamp = null;
    try {
      startTimestamp = new Timestamp(new SimpleDateFormat("yyyy-MM-dd").parse(java.sql.Date.valueOf(startTime).toLocaleString()).getTime());
    } catch (ParseException e) {
      e.printStackTrace();
    }
    if(startTimestamp == null)
      return ErrorManager.getErrorXml(ErrorType.time_parse_error);
   
    Timestamp endTimestamp = null;
    if (endTime != null) {
      try {
        endTimestamp = new Timestamp(new SimpleDateFormat("yyyy-MM-dd").parse(java.sql.Date.valueOf(endTime).toLocaleString()).getTime());
      } catch (ParseException e) {
        e.printStackTrace();
      }
    }
     
    if (endTimestamp == null) {
      endTimestamp = new Timestamp(System.currentTimeMillis());
    }
   
    Data[] templateDatas = das.queryTemplateDatas(templateId, needLog, startTimestamp, endTimestamp);
   
    returnXml.append("<datas>");
    for(Data data : templateDatas)
    {
      String createTime = transferTime2String(data.getCreateTime());
      if(startTime!=null && isSelectedData(startTime,null,createTime))
      {
        returnXml.append("<data>");
        returnXml.append("<field><name>编号</name><value>").append(XMLUtil.toSafeXMLString(data.getId().toString())).append("</value></field>");
        returnXml.append("<field><name>标题</name><value>").append(XMLUtil.toSafeXMLString(data.getTitle())).append("</value></field>");
        returnXml.append("<field><name>创建人员</name><value>").append(XMLUtil.toSafeXMLString(data.getCreateUsername())).append("</value></field>");
        returnXml.append("<field><name>创建时间</name><value>").append(XMLUtil.toSafeXMLString(data.getCreateTime().toString())).append("</value></field>");
        returnXml.append("<field><name>上次修改时间</name><value>").append(XMLUtil.toSafeXMLString(data.getLastModifyTime().toString())).append("</value></field>");
        returnXml.append("<field><name>当前状态</name><value>").append(XMLUtil.toSafeXMLString(queryStatName(stats, data.getStatusId()))).append("</value></field>");
        returnXml.append("<field><name>描述</name><value>").append(XMLUtil.toSafeXMLString(data.getDescription())).append("</value></field>");
        returnXml.append("<field><name>当前指派</name><value>").append(XMLUtil.toSafeXMLString(data.getAssignUsername())).append("</value></field>");
       
        for(Field field :allFields){
          if(field.getName()==null || field.getName().equals("null"))
            continue;
          returnXml.append(getFieldData(field, data));
        }
       
        ChangeLog[] allLogs = data.getChangeLogs();
        returnXml.append("<logs>");
        for(ChangeLog log : allLogs){
          returnXml.append(getLogData(log, flow));
        }
        returnXml.append("</logs>");
        returnXml.append("</data>");
      }
    }
    returnXml.append("</datas>");
    returnXml.append("</root>");
    return returnXml.toString();
  }
 
 
  /**
   * @function:查询数据库中是否有类似数据
   * @modifyTime:2013-10-16 下午7:58:39
   * @author:李明
   * @email: liming@sogou-inc.com
   * @param dataValue
   * @param templateId  null表示查询所有数据
   * @param field
   * @return
   */
  public boolean isDataExist(String dataValue , UUID templateId , Field field){
    if (templateId == null || field == null)
      return false;
 
    if(dataValue==null||dataValue.indexOf("/")<=0)
      return false;
   
    dataValue = dataValue.substring(0,dataValue.lastIndexOf("/"));
   
    String fieldColName = FieldNameCache.getInstance().getFieldName(field.getId(), templateId);
   
    return new DataAccessSessionMySQL().isDataExist(dataValue, templateId , fieldColName);
   
  }
}
TOP

Related Classes of com.sogou.qadev.service.cynthia.service.DataManager

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.