Commit c0820c37 authored by “yiyousong”'s avatar “yiyousong”
parents 18fd1882 38d17586
...@@ -9383,6 +9383,96 @@ msg|String|消息|- ...@@ -9383,6 +9383,96 @@ msg|String|消息|-
``` ```
### 自助终端应用部署
**请求URL:** app/appDistribute
**请求方式:** POST
**内容类型:** application/json;charset=utf-8
**简要描述:** 应用部署
**请求参数:**
参数名称| 类型 | 必填 |描述
:---|:------|:----|:-------
id|Long|否|应用Id
**请求样例:**
```
{
}
```
**响应参数:**
参数名称 |参数类型|描述
:---|:---|:------
code|Integer|结果码(-1.失败,1.成功)
msg|String|消息
data|object|数据对象
**响应消息样例:**
```
{
"msg":"应用部署成功",
"code":1,
"data":{}
}
}
```
### 自助终端基础应用部署
**请求URL:** app/appCommonDistribute
**请求方式:** POST
**内容类型:** application/json;charset=utf-8
**简要描述:** 基础应用部署
**请求参数:**
参数名称| 类型 | 必填 |描述
:---|:------|:----|:-------
filePath|String|是|文件相对路径地址
**请求样例:**
```
{
}
```
**响应参数:**
参数名称 |参数类型|描述
:---|:---|:------
code|Integer|结果码(-1.失败,1.成功)
msg|String|消息
data|object|数据对象
**响应消息样例:**
```
{
"msg":"应用部署成功",
"code":1,
"data":{}
}
}
```
### 自助终端应用克隆 ### 自助终端应用克隆
......
...@@ -7,6 +7,7 @@ import com.mortals.framework.service.IUser; ...@@ -7,6 +7,7 @@ import com.mortals.framework.service.IUser;
import com.mortals.framework.util.StringUtils; import com.mortals.framework.util.StringUtils;
import com.mortals.xhx.base.system.upload.service.UploadService; import com.mortals.xhx.base.system.upload.service.UploadService;
import com.mortals.xhx.common.code.UploadFileType; import com.mortals.xhx.common.code.UploadFileType;
import com.mortals.xhx.utils.SpringUtils;
import lombok.Getter; import lombok.Getter;
import org.apache.commons.io.FilenameUtils; import org.apache.commons.io.FilenameUtils;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
......
...@@ -297,9 +297,9 @@ public class UserServiceImpl extends AbstractCRUDServiceImpl<UserDao, UserEntity ...@@ -297,9 +297,9 @@ public class UserServiceImpl extends AbstractCRUDServiceImpl<UserDao, UserEntity
@Override @Override
public void updateUserList(List<UserPdu> list) { public void updateUserList(List<UserPdu> list) {
//更新本地用户信息,并且更新用户站点树 //更新本地用户信息,并且更新用户站点树
list.forEach(user -> { for (UserPdu user : list) {
UserEntity tempUserEntity = this.selectOne(new UserQuery().loginName(user.getLoginName())); UserEntity tempUser = this.selectOne(new UserQuery().loginName(user.getLoginName()));
if (ObjectUtils.isEmpty(tempUserEntity)) { if (ObjectUtils.isEmpty(tempUser)) {
//新增 //新增
UserEntity entity = new UserEntity(); UserEntity entity = new UserEntity();
entity.initAttrValue(); entity.initAttrValue();
...@@ -307,18 +307,18 @@ public class UserServiceImpl extends AbstractCRUDServiceImpl<UserDao, UserEntity ...@@ -307,18 +307,18 @@ public class UserServiceImpl extends AbstractCRUDServiceImpl<UserDao, UserEntity
this.save(entity); this.save(entity);
Context context = new Context(); Context context = new Context();
context.setUser(entity); context.setUser(entity);
ThreadPool.getInstance().execute(new SyncTreeSiteThread(context)); ThreadPool.getInstance().execute(new SyncTreeSiteThread(context));
} else { } else {
//更新 //更新
UserEntity userEntity = new UserEntity(); UserEntity userEntity = new UserEntity();
BeanUtils.copyProperties(user, userEntity, new String[]{"loginPwd", "userType", "status", "lastLoginTime", "lastLoginAddress"}); BeanUtils.copyProperties(user, userEntity, new String[]{"loginPwd","loginName", "userType", "status", "lastLoginTime", "lastLoginAddress"});
userEntity.setId(tempUser.getId());
this.updateWidthDao(userEntity); this.updateWidthDao(userEntity);
Context context = new Context(); Context context = new Context();
context.setUser(userEntity); context.setUser(userEntity);
ThreadPool.getInstance().execute(new SyncTreeSiteThread( context)); ThreadPool.getInstance().execute(new SyncTreeSiteThread( context));
} }
}); }
} }
......
...@@ -3,6 +3,7 @@ package com.mortals.xhx.common.utils; ...@@ -3,6 +3,7 @@ package com.mortals.xhx.common.utils;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.compress.archivers.zip.ZipArchiveEntry; import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
import org.apache.commons.compress.archivers.zip.ZipArchiveInputStream; import org.apache.commons.compress.archivers.zip.ZipArchiveInputStream;
import org.apache.commons.compress.archivers.zip.ZipUtil;
import org.apache.commons.io.FileUtils; import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils; import org.apache.commons.io.IOUtils;
...@@ -12,6 +13,8 @@ import java.io.*; ...@@ -12,6 +13,8 @@ import java.io.*;
public class ZipUtils { public class ZipUtils {
public static void main(String[] args) throws Exception { public static void main(String[] args) throws Exception {
unzip(new File("F:\\1664176173348.zip"), "F:\\tmp"); unzip(new File("F:\\1664176173348.zip"), "F:\\tmp");
// String path = "F:\\Users\\Isuzu\\Desktop\\test.zip"; // String path = "F:\\Users\\Isuzu\\Desktop\\test.zip";
// unzip(new File(path), "D:\\data"); // unzip(new File(path), "D:\\data");
} }
......
...@@ -22,6 +22,8 @@ public interface AppService extends ICRUDService<AppEntity, Long> { ...@@ -22,6 +22,8 @@ public interface AppService extends ICRUDService<AppEntity, Long> {
Rest<String> appDistribute(AppEntity appEntity, Context context); Rest<String> appDistribute(AppEntity appEntity, Context context);
Rest<Void> appCommonDistribute(AppEntity appEntity, Context context);
Rest<String> cloneAppsBySites(List<AppEntity> appList, List<SiteEntity> siteList, Context context); Rest<String> cloneAppsBySites(List<AppEntity> appList, List<SiteEntity> siteList, Context context);
......
...@@ -2,6 +2,7 @@ package com.mortals.xhx.module.app.service.impl; ...@@ -2,6 +2,7 @@ package com.mortals.xhx.module.app.service.impl;
import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import cn.hutool.core.util.ZipUtil;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.mortals.framework.model.DbMatchMode; import com.mortals.framework.model.DbMatchMode;
...@@ -62,16 +63,16 @@ public class AppServiceImpl extends AbstractCRUDServiceImpl<AppDao, AppEntity, L ...@@ -62,16 +63,16 @@ public class AppServiceImpl extends AbstractCRUDServiceImpl<AppDao, AppEntity, L
@Override @Override
protected void findAfter(AppEntity params, PageInfo pageInfo, Context context, List<AppEntity> list) throws AppException { protected void findAfter(AppEntity params, PageInfo pageInfo, Context context, List<AppEntity> list) throws AppException {
//排序 //排序
if(!ObjectUtils.isEmpty(params.getIdList())){ if (!ObjectUtils.isEmpty(params.getIdList())) {
//根据idList进行排序 //根据idList进行排序
for (int i = 0; i < params.getIdList().size(); i++) { for (int i = 0; i < params.getIdList().size(); i++) {
Long id = params.getIdList().get(i); Long id = params.getIdList().get(i);
for (int j = 0; j < list.size(); j++) { for (int j = 0; j < list.size(); j++) {
if(id.equals(list.get(j).getId())){ if (id.equals(list.get(j).getId())) {
//判断位置是否一直 //判断位置是否一直
if(i!=j){ if (i != j) {
//交换 //交换
Collections.swap(list,i,j); Collections.swap(list, i, j);
} }
} }
} }
...@@ -109,8 +110,8 @@ public class AppServiceImpl extends AbstractCRUDServiceImpl<AppDao, AppEntity, L ...@@ -109,8 +110,8 @@ public class AppServiceImpl extends AbstractCRUDServiceImpl<AppDao, AppEntity, L
if (FileUtil.isDirectory(disPath)) { if (FileUtil.isDirectory(disPath)) {
FileUtil.del(disPath); FileUtil.del(disPath);
} }
ZipUtils.unzip(new File(targetFilePath), disPath); //ZipUtils.unzip(new File(targetFilePath), disPath);
// ZipUtil.unzip(targetFilePath, disPath); ZipUtil.unzip(targetFilePath, disPath);
//更新 //更新
appEntity.setDistributeFilePath(disPath); appEntity.setDistributeFilePath(disPath);
appEntity.setDistribute(YesNoEnum.YES.getValue()); appEntity.setDistribute(YesNoEnum.YES.getValue());
...@@ -119,6 +120,30 @@ public class AppServiceImpl extends AbstractCRUDServiceImpl<AppDao, AppEntity, L ...@@ -119,6 +120,30 @@ public class AppServiceImpl extends AbstractCRUDServiceImpl<AppDao, AppEntity, L
return Rest.ok("应用部署成功!"); return Rest.ok("应用部署成功!");
} }
@Override
public Rest<Void> appCommonDistribute(AppEntity appEntity, Context context) {
//判断文件是否存在
String targetFilePath = uploadService.getFilePath(appEntity.getFilePath());
if (FileUtil.isEmpty(new File(targetFilePath))) {
throw new AppException("部署文件不存在!");
}
if (!FileUtil.getSuffix(appEntity.getFilePath()).equals("zip")) {
throw new AppException("部署只支持zip文件!");
}
//部署路径是否存在 如果不存在 创建目录,
//文件构成目录 /home/publish/app/common
String disPath = "/home/publish/app/common";
//判断目标目录是否存在 如果存在 这删除
if (FileUtil.isDirectory(disPath)) {
FileUtil.del(disPath);
}
// ZipUtils.unzip(new File(targetFilePath), disPath);
ZipUtil.unzip(targetFilePath, disPath);
return Rest.ok("基础应用部署成功!");
}
@Override @Override
public Rest<String> cloneAppsBySites(List<AppEntity> appList, List<SiteEntity> siteList, Context context) { public Rest<String> cloneAppsBySites(List<AppEntity> appList, List<SiteEntity> siteList, Context context) {
log.info("克隆应用开始!"); log.info("克隆应用开始!");
......
package com.mortals.xhx.module.app.service.impl; package com.mortals.xhx.module.app.service.impl;
import cn.hutool.core.io.FileUtil; import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.ZipUtil;
import com.mortals.framework.ap.GlobalSysInfo; import com.mortals.framework.ap.GlobalSysInfo;
import com.mortals.framework.common.Rest; import com.mortals.framework.common.Rest;
import com.mortals.framework.model.Context; import com.mortals.framework.model.Context;
...@@ -70,7 +71,8 @@ public class AppVersionServiceImpl extends AbstractCRUDServiceImpl<AppVersionDao ...@@ -70,7 +71,8 @@ public class AppVersionServiceImpl extends AbstractCRUDServiceImpl<AppVersionDao
if (FileUtil.isDirectory(disPath)) { if (FileUtil.isDirectory(disPath)) {
FileUtil.del(disPath); FileUtil.del(disPath);
} }
ZipUtils.unzip(new File(targetFilePath), disPath); // ZipUtils.unzip(new File(targetFilePath), disPath);
ZipUtil.unzip(targetFilePath, disPath);
return disPath; return disPath;
} }
......
package com.mortals.xhx.module.app.web; package com.mortals.xhx.module.app.web;
import cn.hutool.core.net.url.UrlBuilder; import cn.hutool.core.net.url.UrlBuilder;
import cn.hutool.core.util.ZipUtil;
import com.mortals.framework.common.Rest; import com.mortals.framework.common.Rest;
import com.mortals.framework.exception.AppException; import com.mortals.framework.exception.AppException;
import com.mortals.framework.model.Context; import com.mortals.framework.model.Context;
...@@ -57,8 +58,6 @@ public class AppController extends BaseCRUDJsonBodyMappingController<AppService, ...@@ -57,8 +58,6 @@ public class AppController extends BaseCRUDJsonBodyMappingController<AppService,
} }
@Override @Override
protected int infoAfter(Long id, Map<String, Object> model, AppEntity entity, Context context) throws AppException { protected int infoAfter(Long id, Map<String, Object> model, AppEntity entity, Context context) throws AppException {
List<AppEntity> appEntityList = this.service.find(new AppQuery().appCode(entity.getAppCode()), context); List<AppEntity> appEntityList = this.service.find(new AppQuery().appCode(entity.getAppCode()), context);
...@@ -67,22 +66,13 @@ public class AppController extends BaseCRUDJsonBodyMappingController<AppService, ...@@ -67,22 +66,13 @@ public class AppController extends BaseCRUDJsonBodyMappingController<AppService,
return super.infoAfter(id, model, entity, context); return super.infoAfter(id, model, entity, context);
} }
@Override
protected int doListAfter(AppEntity query, Map<String, Object> model, Context context) throws AppException {
//model.get("result")
return super.doListAfter(query, model, context);
}
/** /**
* app应用部署 * app应用部署
*/ */
@PostMapping(value = "appDistribute") @PostMapping(value = "appDistribute")
public Rest<Void> appDistribute(@RequestBody AppEntity appEntity) { public Rest<String> appDistribute(@RequestBody AppEntity appEntity) {
String busiDesc = this.getModuleDesc() + "自助服务应用部署"; String busiDesc = this.getModuleDesc() + "自助服务应用部署";
Rest<Void> rest = Rest.ok(busiDesc + " 【成功】"); Rest<String> rest = Rest.ok(busiDesc + " 【成功】");
try { try {
if (ObjectUtils.isEmpty(appEntity.getId())) { if (ObjectUtils.isEmpty(appEntity.getId())) {
throw new AppException("应用Id不能为空!"); throw new AppException("应用Id不能为空!");
...@@ -91,7 +81,7 @@ public class AppController extends BaseCRUDJsonBodyMappingController<AppService, ...@@ -91,7 +81,7 @@ public class AppController extends BaseCRUDJsonBodyMappingController<AppService,
if (ObjectUtils.isEmpty(appEntity)) { if (ObjectUtils.isEmpty(appEntity)) {
throw new AppException("当前应用不存在!appId:" + appEntity.getId()); throw new AppException("当前应用不存在!appId:" + appEntity.getId());
} }
Rest<String> disRest = this.service.appDistribute(appEntity, getContext()); rest = this.service.appDistribute(appEntity, getContext());
recordSysLog(request, busiDesc + " 【成功】"); recordSysLog(request, busiDesc + " 【成功】");
} catch (Exception e) { } catch (Exception e) {
log.error("自助服务应用部署", e); log.error("自助服务应用部署", e);
...@@ -100,6 +90,23 @@ public class AppController extends BaseCRUDJsonBodyMappingController<AppService, ...@@ -100,6 +90,23 @@ public class AppController extends BaseCRUDJsonBodyMappingController<AppService,
return rest; return rest;
} }
/**
* app基础应用部署
*/
@PostMapping(value = "appCommonDistribute")
public Rest<Void> appCommonDistribute(@RequestBody AppEntity appEntity) {
String busiDesc = this.getModuleDesc() + "自助服务应用部署";
Rest<Void> rest = Rest.ok(busiDesc + " 【成功】");
try {
rest = this.service.appCommonDistribute(appEntity, getContext());
recordSysLog(request, busiDesc + " 【成功】");
} catch (Exception e) {
log.error("基础服务应用部署", e);
rest = Rest.fail(super.convertException(e));
}
return rest;
}
/** /**
* app应用克隆给其它站点 * app应用克隆给其它站点
...@@ -130,10 +137,13 @@ public class AppController extends BaseCRUDJsonBodyMappingController<AppService, ...@@ -130,10 +137,13 @@ public class AppController extends BaseCRUDJsonBodyMappingController<AppService,
public static void main(String[] args) { public static void main(String[] args) {
String homeUrl = "app/1/2"; /* String homeUrl = "app/1/2";
String domainUrl = "http://192.168.0.98:11078"; String domainUrl = "http://192.168.0.98:11078";
String s = UrlBuilder.of(domainUrl).addPath("app").addPath("1").addPath("2").toString(); String s = UrlBuilder.of(domainUrl).addPath("app").addPath("1").addPath("2").toString();
System.out.println(s); System.out.println(s);*/
ZipUtil.unzip("F://1672973316144.zip","E://abc");
} }
......
...@@ -148,8 +148,8 @@ setup_java() { ...@@ -148,8 +148,8 @@ setup_java() {
#yum -y remove tzdata-java.noarch #yum -y remove tzdata-java.noarch
else else
writelog "ubuntu java clear" writelog "ubuntu java clear"
apt-get purge openjdk* #apt-get -y purge openjdk*
apt-get purge icedtea-* openjdk-* #apt-get -y purge icedtea-* openjdk-*
fi fi
rm -rf ${JAVA_HOME} rm -rf ${JAVA_HOME}
mkdir -p ${JAVA_HOME} mkdir -p ${JAVA_HOME}
...@@ -224,7 +224,18 @@ setup_mysql() { ...@@ -224,7 +224,18 @@ setup_mysql() {
mkdir -p ${MYSQL_EXECPATH}/mysql-files mkdir -p ${MYSQL_EXECPATH}/mysql-files
groupadd mysql groupadd mysql
useradd -r -g mysql mysql useradd -r -g mysql mysql
system_version=$(unix_is_centos)
if [[ ${system_version} == "centos" ]]; then
writelog "centos"
yum -y install libncurses*
# yum -y remove java-*-openjdk* #卸载centos中的openjdk
#yum -y remove tzdata-java.noarch
else
writelog "ubuntu"
apt -y install libncurses*
#apt-get purge openjdk*
#apt-get purge icedtea-* openjdk-*
fi
writelog "exccmd tar -zvxf ${BASEDIR}/soft/${MYSQL}/${MYSQL_CENTOS_FILENAME} -C ${MYSQL_EXECPATH} --strip-components 1" writelog "exccmd tar -zvxf ${BASEDIR}/soft/${MYSQL}/${MYSQL_CENTOS_FILENAME} -C ${MYSQL_EXECPATH} --strip-components 1"
tar -zvxf ${BASEDIR}/soft/${MYSQL}/${MYSQL_CENTOS_FILENAME} -C ${MYSQL_EXECPATH} --strip-components 1 tar -zvxf ${BASEDIR}/soft/${MYSQL}/${MYSQL_CENTOS_FILENAME} -C ${MYSQL_EXECPATH} --strip-components 1
cd ${MYSQL_EXECPATH} cd ${MYSQL_EXECPATH}
...@@ -232,19 +243,30 @@ setup_mysql() { ...@@ -232,19 +243,30 @@ setup_mysql() {
chmod 750 mysql-file chmod 750 mysql-file
echo "[mysqld] echo "[mysqld]
datadir=${MYSQL_DATA_PATH} datadir=${MYSQL_DATA_PATH}
port = ${MYSQL_PORT} socket=/tmp/mysql.sock
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES port = ${MYSQL_PORT}
symbolic-links=0 sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
max_connections=400 symbolic-links=0
innodb_file_per_table=1 max_connections=400
#表名存储在磁盘是小写的,但是比较的时候是不区分大小写 innodb_file_per_table=1
lower_case_table_names=1 #表名存储在磁盘是小写的,但是比较的时候是不区分大小写
#忽略密码 lower_case_table_names=1
skip-grant-tables #忽略密码
skip-grant-tables
[client]
default-character-set=utf8
socket=/tmp/mysql.sock
[mysql]
default-character-set=utf8
socket=/tmp/mysql.sock
" >${MYSQL_CONF_PATH} " >${MYSQL_CONF_PATH}
#初始化 #初始化
bin/mysqld --initialize --user=mysql --datadir=${MYSQL_DATA_PATH} --basedir=${MYSQL_EXECPATH} writelog "mysql init cmd: bin/mysqld --initialize --user=mysql --datadir=${MYSQL_DATA_PATH} --basedir=${MYSQL_EXECPATH} --socket=/tmp/mysql.sock"
bin/mysqld --initialize --user=mysql --datadir=${MYSQL_DATA_PATH} --basedir=${MYSQL_EXECPATH} --socket=/tmp/mysql.sock
#bin/mysqld --initialize-insecure --user=mysql --datadir=${MYSQL_DATA_PATH} --basedir=${MYSQL_EXECPATH} --socket=/tmp/mysql.sock
#创建软连接 #创建软连接
ln -s ${MYSQL_EXECPATH}/support-files/mysql.server /etc/init.d/mysql ln -s ${MYSQL_EXECPATH}/support-files/mysql.server /etc/init.d/mysql
...@@ -252,7 +274,7 @@ setup_mysql() { ...@@ -252,7 +274,7 @@ setup_mysql() {
export PATH=$PATH:${MYSQL_EXECPATH}/bin export PATH=$PATH:${MYSQL_EXECPATH}/bin
source /etc/profile source /etc/profile
service mysql restart service mysql restart
mysql -uroot -p123 <${BASEDIR}/soft/${MYSQL}/user.sql mysql -uroot -p <${BASEDIR}/soft/${MYSQL}/user.sql
sed -i "s/skip-grant-tables/#skip-grant-tables/g" ${MYSQL_CONF_PATH} sed -i "s/skip-grant-tables/#skip-grant-tables/g" ${MYSQL_CONF_PATH}
service mysql restart service mysql restart
...@@ -304,7 +326,7 @@ setup_nginx() { ...@@ -304,7 +326,7 @@ setup_nginx() {
else else
writelog "ubuntu nginx clear" writelog "ubuntu nginx clear"
apt-get purge nginx* apt-get purge nginx*
apt-get -y install pcre-devel openssl openssl-devel gd-devel gcc gcc-c++ apt-get -y install build-essential openssl libssl-dev libpcre3 libpcre3-dev zlib1g zlib1g-dev
fi fi
rm -rf ${NGINX_EXECPATH} rm -rf ${NGINX_EXECPATH}
...@@ -313,6 +335,7 @@ setup_nginx() { ...@@ -313,6 +335,7 @@ setup_nginx() {
tar -zvxf ${BASEDIR}/soft/${NGINX}/${NGINX_FILENAME} -C ${NGINX_EXECPATH} --strip-components 1 tar -zvxf ${BASEDIR}/soft/${NGINX}/${NGINX_FILENAME} -C ${NGINX_EXECPATH} --strip-components 1
cd ${NGINX_EXECPATH} cd ${NGINX_EXECPATH}
#./configure --prefix=${NGINX_EXECPATH} --conf-path=${NGINX_CONF} --with-pcre=/home/pcre-8.45
./configure --prefix=${NGINX_EXECPATH} --conf-path=${NGINX_CONF} ./configure --prefix=${NGINX_EXECPATH} --conf-path=${NGINX_CONF}
writelog "nginx make start" writelog "nginx make start"
make make
......
...@@ -38,7 +38,6 @@ ...@@ -38,7 +38,6 @@
<dependencies> <dependencies>
<dependency> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId> <artifactId>spring-boot-starter-data-redis</artifactId>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment