PhpBuildCtrl.java 6.92 KB
package com.ui.ctrl;

import com.ui.contants.HttpUriContants;
import com.ui.contants.ProjectConstant;
import com.ui.ctrl.util.ReleaseCheck;
import com.ui.http.HttpRestClient;
import com.ui.model.BaseResponse;
import com.ui.model.domain.BuildMessage;
import com.ui.model.req.BuildRequest;
import com.ui.model.req.User;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpSession;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


@RestController
@RequestMapping("phpBuild")
public class PhpBuildCtrl {
    Logger log = LoggerFactory.getLogger(PhpBuildCtrl.class);

    @Autowired
    private HttpRestClient httpRestClient;
    @Autowired
    private ReleaseCheck releaseCheck;

    private String URL = "http://"+ ProjectConstant.DEPLOY_IP+":8883/php/";
    //private String URL = "http://127.0.0.1:8883/php/";

    @RequestMapping("/toProject")
    public ModelAndView toProject(Model model) {
        return new ModelAndView("project/php_project");
    }

    /**
     * 获取所有项目
     *
     * @return
     */
    @RequestMapping(value = "getProjects", method = RequestMethod.POST)
    @ResponseBody
    public String getProjects() {
        try {
            return httpRestClient.get(URL + "getProjects", String.class, null);
        } catch (Exception ex) {
            return "failed";
        }
    }

    /**
     * 获取所有项目
     *
     * @return
     */
    @RequestMapping(value = "getProject", method = RequestMethod.POST)
    @ResponseBody
    public String getProjectByName(String name) {
        try {
            return httpRestClient.get(URL + "getProject?name="+name , String.class, null);
        } catch (Exception ex) {
            return "failed";
        }
    }

    /**
     * 发布前校验
     *
     * @return
     */
    @RequestMapping(value = "check")
    @ResponseBody
    public BaseResponse check(String workid,HttpSession httpSession) {
        BaseResponse rtnResponse=releaseCheck.check(workid,httpSession);
        /*if(200!=rtnResponse.getCode()){
            return rtnResponse;
        }*/

        return rtnResponse;


    }

    /**
     * 执行任务
     *
     * @return
     */
    @RequestMapping(value = "build", method = RequestMethod.POST)
    public ModelAndView build(String project_name, String environment_name, String operate_name, String branch_name, String rollbackfile_name,String hosts_name,String workid_name, Model model, HttpSession session) {
        try {
            User user = (User) session.getAttribute("user");
            BaseResponse checkResponse=releaseCheck.checkAndUpdate(workid_name,operate_name,user.getName());
            if(200!=checkResponse.getCode()){
                model.addAttribute("environment_name", checkResponse.getMessage());
                return new ModelAndView("project/php_project_build");
            }
            List<BuildMessage> list = new ArrayList<>();
            BuildRequest buildRequest = new BuildRequest();
            buildRequest.setBranch(branch_name);
            buildRequest.setUser(user.getName());
            buildRequest.setEnvironment(environment_name);
            buildRequest.setRollbackfile(rollbackfile_name);
            buildRequest.setOperate(operate_name);
            buildRequest.setHost(hosts_name);
            buildRequest.setWorkid(workid_name);

            String messageids = "";
            if ("Deploy".equals(operate_name)) {
                String[] array = project_name.split(",");
                if (array.length > 4) {
                    String[] newArray = new String[]{"", "", "", ""};
                    for (int i = 0; i < array.length; i++) {
                        newArray[i % 4] = newArray[i % 4] + array[i] + ",";
                    }
                    for (String project : newArray) {
                        buildRequest.setProject(project.substring(0, project.length() - 1));
                        BuildMessage buildMessage = httpRestClient.post(URL + "build", buildRequest, BuildMessage.class);
                        if (buildMessage != null) {
                            list.add(buildMessage);
                            messageids = messageids + buildMessage.getId() + ",";
                        }
                    }

                } else {
                    for (String project : array) {
                        buildRequest.setProject(project);
                        BuildMessage buildMessage = httpRestClient.post(URL + "build", buildRequest, BuildMessage.class);
                        if (buildMessage != null) {
                            list.add(buildMessage);
                            messageids = messageids + buildMessage.getId() + ",";
                        }
                    }
                }


            } else {
                buildRequest.setProject(project_name);
                BuildMessage buildMessage = httpRestClient.post(URL + "build", buildRequest, BuildMessage.class);
                if (buildMessage != null) {
                    list.add(buildMessage);
                    messageids = messageids + buildMessage.getId() + ",";
                }
            }
            model.addAttribute("environment_name", environment_name);
            model.addAttribute("operate_name", operate_name);
            model.addAttribute("branch_name", branch_name);
            model.addAttribute("rollbackfile_name", rollbackfile_name);
            model.addAttribute("messageids", messageids);
            model.addAttribute("messageList", list);
            model.addAttribute("hosts_name", hosts_name);

        } catch (Exception ex) {
        }
        return new ModelAndView("project/php_project_build");
    }

    /**
     * 获取执行结果
     *
     * @param messageid
     * @return
     */
    @RequestMapping(value = "getbuildmsg", method = RequestMethod.POST)
    @ResponseBody
    public String getbuildmsg(String messageid, String project) {
        return releaseCheck.getbuildmsg(URL,messageid,project);
    }

    @RequestMapping(value = "cancelBuild")
    @ResponseBody
    public String cancelBuild(String id) {
        return releaseCheck.cancelBuild(URL,id);
    }

    @RequestMapping(value = "rollbackList", method = RequestMethod.POST)
    @ResponseBody
    public String rollbackList(String project, String environment) {
        return releaseCheck.rollbackList(URL,project,environment);
    }

    @RequestMapping(value = "refreshGit", method = RequestMethod.POST)
    @ResponseBody
    public String refreshGit() {
        return releaseCheck.refreshGit(URL);
    }


}