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

Source Code of com.sogou.qadev.service.cynthia.controller.QuitBugMoveController

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

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

import javax.servlet.http.HttpSession;

import net.sf.json.JSONArray;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import com.sogou.qadev.service.cynthia.bean.Data;
import com.sogou.qadev.service.cynthia.bean.DataAccessAction;
import com.sogou.qadev.service.cynthia.bean.Flow;
import com.sogou.qadev.service.cynthia.bean.Right;
import com.sogou.qadev.service.cynthia.bean.Role;
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.bean.UserInfo;
import com.sogou.qadev.service.cynthia.dao.DataAccessSessionMySQL;
import com.sogou.qadev.service.cynthia.dao.TimerAccessSessionMySQL;
import com.sogou.qadev.service.cynthia.factory.DataAccessFactory;
import com.sogou.qadev.service.cynthia.service.DataAccessSession.ErrorCode;
import com.sogou.qadev.service.cynthia.service.DataManager;
import com.sogou.qadev.service.cynthia.service.TableRuleManager;
import com.sogou.qadev.service.login.bean.Key;
import com.sohu.rd.td.util.reference.Pair;
import com.sohu.rd.td.util.xml.XMLUtil;

@Controller
@RequestMapping("/quitBugMove")
public class QuitBugMoveController extends BaseController{
 
  @ResponseBody
  @RequestMapping("/getUserTemplate.do")
  public String getUserTemplate(HttpSession httpSession) throws Exception {
    Key key   = ((Key)httpSession.getAttribute("key"));
    Long keyId = (Long)httpSession.getAttribute("kid");
    das = DataAccessFactory.getInstance().createDataAccessSession(key.getUsername(), keyId);
   
    Template[] allTemplates = DataManager.getInstance().queryUserTemplates(das);
   
    JSONArray json = JSONArray.fromObject(allTemplates);
    return json.toString();
  }

 
  @ResponseBody
  @RequestMapping("/getTemplateRole.do")
  public String getTemplateRole(@RequestParam("templateId") String templateIdStr) throws Exception {
    UUID templateId = DataAccessFactory.getInstance().createUUID(templateIdStr);
   
    Template template = das.queryTemplate(templateId);
    if (template == null) {
      return "";
    }
    Flow flow = das.queryFlow(template.getFlowId());
    if (flow == null) {
      return "";
    }
   
    Role[] allRoles = flow.getRoles();

    JSONArray json = JSONArray.fromObject(allRoles);
    return json.toString();
  }
 
  /**
   * @description:get the quit users from template
   * @date:2014-5-5 下午8:35:55
   * @version:v1.0
   * @param templateIdStr
   * @param roleIdStr
   * @return
   * @throws Exception
   */
  @ResponseBody
  @RequestMapping("/getQuitUser.do")
  public String getQuitUser(@RequestParam("templateId") String templateIdStr , @RequestParam("roleId") String roleIdStr) throws Exception {
    if (roleIdStr == null || roleIdStr.length() == 0 || templateIdStr == null || templateIdStr.length() == 0) {
      return "";
    }
    UUID roleId = DataAccessFactory.getInstance().createUUID(roleIdStr);
   
    Template template = das.queryTemplate(DataAccessFactory.getInstance().createUUID(templateIdStr));
   
    Flow flow = das.queryFlow(template.getFlowId());
   
    List<UserInfo> allQuitUserList = getAllQuitUser(template, flow, roleId);
   
    JSONArray json = JSONArray.fromObject(allQuitUserList);
    return json.toString();
  }
 
  private List<UserInfo> getAllQuitUser(Template template , Flow flow , UUID roleId){
    List<UserInfo> allQuitUserList = flow.queryAllQuitUserInfo(roleId);
    return allQuitUserList;
  }
 
  /**
   * @description:get all users by role
   * @date:2014-5-5 下午8:36:25
   * @version:v1.0
   * @param templateIdStr
   * @param roleIdStr
   * @return
   * @throws Exception
   */
  @ResponseBody
  @RequestMapping("/getAllRoleUser.do")
  public String getAllRoleUser(@RequestParam("templateId") String templateIdStr , @RequestParam("roleId") String roleIdStr) throws Exception {
    if (roleIdStr == null || roleIdStr.length() == 0 || templateIdStr == null || templateIdStr.length() == 0) {
      return "";
    }
    UUID roleId = DataAccessFactory.getInstance().createUUID(roleIdStr);
   
    Template template = das.queryTemplate(DataAccessFactory.getInstance().createUUID(templateIdStr));
   
    Flow flow = das.queryFlow(template.getFlowId());
   
    List<UserInfo> allQuitUserList = flow.queryAllUserInfo(roleId);
    JSONArray json = JSONArray.fromObject(allQuitUserList);
    return json.toString();
  }
 
  /**
   * @description:get all not closed data by user
   * @date:2014-5-5 下午8:36:43
   * @version:v1.0
   * @param templateIdStr
   * @param userName
   * @return
   * @throws Exception
   */
  @ResponseBody
  @RequestMapping("/getUserNoCloseData.do")
  public String getUserNoCloseData(@RequestParam("templateId") String templateIdStr , @RequestParam("userName") String userName) throws Exception {
    UUID templateId = DataAccessFactory.getInstance().createUUID(templateIdStr);
    Template template = das.queryTemplate(templateId);
    if (template == null || userName == null || userName.equals("") ) {
      return "";
    }
    Flow flow = das.queryFlow(template.getFlowId());
    if (flow == null ) {
      return "";
    }
    List<Data> allDatas = getTemplateUserNoCloseData(template, flow, userName);
    JSONArray json = JSONArray.fromObject(allDatas);
    return json.toString();
  }
 
  /**
   * @description:move data from quit user
   * @date:2014-5-5 下午8:37:02
   * @version:v1.0
   * @param httpSession
   * @param templateIdStr
   * @param quitUserName
   * @param newUserName
   * @param actionComment
   * @param roleIdStr
   * @return
   * @throws Exception
   */
  @ResponseBody
  @RequestMapping("/quitUserTaskMove.do")
  public String getUserNoCloseData(HttpSession httpSession , @RequestParam("templateId") String templateIdStr, @RequestParam("quitUserName") String quitUserName , @RequestParam("newUserName") String newUserName ,@RequestParam("actionComment") String actionComment, @RequestParam("roleId") String roleIdStr) throws Exception {
    Key key   = ((Key)httpSession.getAttribute("key"));
    Long keyId = (Long)httpSession.getAttribute("kid");
    das = DataAccessFactory.getInstance().createDataAccessSession(key.getUsername(), keyId);
   
    UUID roleId = DataAccessFactory.getInstance().createUUID(roleIdStr);
    if (roleId == null) {
      return "请选择角色";
    }
   
    if (templateIdStr == null || templateIdStr.length() == 0 ) {
      return "表单不能为空";
    }
    UUID templateId = DataAccessFactory.getInstance().createUUID(templateIdStr);
   
   
    Template template = das.queryTemplate(templateId);
    if (template == null) {
      return "无法找到该表单";
    }
    Flow flow = das.queryFlow(template.getFlowId());
    if (flow == null) {
      return "无法找到该流程";
    }
   
    List<String> allQuitUser = new ArrayList<String>();
    if (quitUserName != null && quitUserName.equals("all")) {
      List<UserInfo> allQuitUserList =  getAllQuitUser(template, flow, roleId);
      for (UserInfo userInfo : allQuitUserList) {
        allQuitUser.add(userInfo.getUserName());
      }
    }else {
      allQuitUser.add(quitUserName);
    }
   
    List<Data> allNeedMoveDataList = new ArrayList<Data>();
    for (String user : allQuitUser) {
      allNeedMoveDataList.addAll(getTemplateUserNoCloseData(template, flow, user));
    }
   
    StringBuffer errorDataBuffer = new StringBuffer();
   
    for (Data tempData : allNeedMoveDataList) {
      Data data = das.queryData(tempData.getId(), templateId);
      if (data != null) {
        try {
          Map<String, Pair<Object, Object>> baseValueMap = new HashMap<String, Pair<Object,Object>>();
          Map<UUID, Pair<Object, Object>> extValueMap =  new HashMap<UUID, Pair<Object,Object>>();
         
          if(data.getAssignUsername() == null && newUserName != null || data.getAssignUsername() != null && newUserName == null
            || data.getAssignUsername() != null && newUserName != null && !data.getAssignUsername().equals(newUserName)){
            baseValueMap.put("assignUser", new Pair<Object, Object>(data.getAssignUsername(), newUserName));
          }
         
          data.setAssignUsername(newUserName);
         
          data.setObject("logCreateUser", key.getUsername());
         
          data.setObject("logActionId", null);
         
          if(actionComment != null && actionComment.length() > 0){
            data.setObject("logActionComment", actionComment);
          }else {
            data.setObject("logActionComment", "");
          }
         
          data.setObject("logBaseValueMap", baseValueMap);
          data.setObject("logExtValueMap", extValueMap);
         
          Pair<ErrorCode, String> result = das.modifyData(data);
         
          if(result.getFirst().equals(ErrorCode.success)){
            das.commitTranscation();
          }else{
            errorDataBuffer.append(errorDataBuffer.length() > 0 ?"," :"").append(XMLUtil.toSafeXMLString(data.getTitle()));
            das.rollbackTranscation();
          }
        } catch (Exception e) {
          errorDataBuffer.append(errorDataBuffer.length() > 0 ?"," :"").append(XMLUtil.toSafeXMLString(data.getTitle()));
          e.printStackTrace();
        }
      }
    }
    if (errorDataBuffer.length() > 0) {
      return "转移失败,错误数据有:" + errorDataBuffer.toString();
    }else {
      //从表单中删除人员
      Set<Right> allRights = flow.getRightSet();
      Iterator<Right> iterator = allRights.iterator();
      while (iterator.hasNext()) {
        if (allQuitUser.contains(iterator.next().getUsername())) {
          iterator.remove();
        }
      }
      flow.setRightSet(allRights);
      ErrorCode errorCode = das.updateFlow(flow);
      if (errorCode.equals(ErrorCode.success)) {
        das.updateCache(DataAccessAction.update, flow.getId().getValue(), flow);
      }else {
        das.rollbackTranscation();
      }
     
      //删除定时器数据
      for (String user : allQuitUser) {
        new TimerAccessSessionMySQL().removeTimerByCreateUser(user);
      }
      return "转移成功";
    }
  }
 
  /**
   * @function:获取表单下某用户未关闭数据
   * @modifyTime:2013-12-4 下午5:13:21
   * @author:李明
   * @email: liming@sogou-inc.com
   * @param template
   * @param flow
   * @param userName
   * @return
   */
  private List<Data> getTemplateUserNoCloseData(Template template , Flow flow , String userName){
    StringBuffer sqlBuffer = new StringBuffer();
   
    sqlBuffer.append("select id , title from ").append(TableRuleManager.getInstance().getDataTableName(template.getId()));
    sqlBuffer.append(" where assignUser = '").append(userName).append("'");
   
    StringBuffer statsBuffer = new StringBuffer();
   
    for (Stat endStat: flow.getEndStats()) {
      statsBuffer.append(statsBuffer.length() >0 ? " and " :"").append(" statusId != ").append(endStat.getId().getValue());
    }
    sqlBuffer.append(" and (").append(statsBuffer.toString()).append(")");

    List<Data> allDatas = new DataAccessSessionMySQL().queryDatas(sqlBuffer.toString(), false, template.getId());
    return allDatas;
  }
 
 
 
}
TOP

Related Classes of com.sogou.qadev.service.cynthia.controller.QuitBugMoveController

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.