!3 chore(config): 更新RSA私钥和Base64密钥配置
Merge pull request !3 from Odboy/dev
This commit is contained in:
@@ -19,6 +19,8 @@ export default {
|
||||
url: '',
|
||||
// 查询数据的参数
|
||||
params: {},
|
||||
// 是否自定义参数
|
||||
isCustomParams: false,
|
||||
// 待查询的对象
|
||||
query: {},
|
||||
// 等待时间
|
||||
@@ -76,11 +78,21 @@ export default {
|
||||
Object.keys(this.params).length !== 0 && Object.keys(this.params).forEach(item => {
|
||||
if (this.params[item] === null || this.params[item] === '') this.params[item] = undefined
|
||||
})
|
||||
return {
|
||||
page: this.page,
|
||||
size: this.size,
|
||||
...this.query,
|
||||
...this.params
|
||||
if (this.isCustomParams) {
|
||||
return {
|
||||
page: this.page,
|
||||
size: this.size,
|
||||
args: {
|
||||
...this.params
|
||||
}
|
||||
}
|
||||
} else {
|
||||
return {
|
||||
page: this.page,
|
||||
size: this.size,
|
||||
...this.query,
|
||||
...this.params
|
||||
}
|
||||
}
|
||||
},
|
||||
// 改变页码
|
||||
|
||||
@@ -73,7 +73,7 @@
|
||||
<el-pagination
|
||||
:total="total"
|
||||
:current-page="page"
|
||||
:page-size="6"
|
||||
:page-size="size"
|
||||
style="margin-top:8px;"
|
||||
layout="total, prev, pager, next"
|
||||
@size-change="sizeChange"
|
||||
@@ -110,7 +110,13 @@ export default {
|
||||
// 获取数据前设置好接口地址
|
||||
beforeInit() {
|
||||
this.url = 'api/quartzJob/searchQuartzLog'
|
||||
this.size = 6
|
||||
this.page = 1
|
||||
this.isCustomParams = true
|
||||
this.params = {
|
||||
jobName: this.query.jobName,
|
||||
createTime: this.query.createTime,
|
||||
isSuccess: this.query.isSuccess
|
||||
}
|
||||
return true
|
||||
},
|
||||
// 异常详情
|
||||
|
||||
@@ -151,7 +151,7 @@
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import crudRoles, {getCurrentUserRoleLevel} from '@/api/system/role'
|
||||
import crudRoles from '@/api/system/role'
|
||||
import { searchDept, searchDeptTree } from '@/api/system/dept'
|
||||
import { listChildMenuSetByMenuId, listMenuByPid } from '@/api/system/menu'
|
||||
import CRUD, { crud, form, header, presenter } from '@crud/crud'
|
||||
|
||||
-1
@@ -13,7 +13,6 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package cn.odboy.annotation;
|
||||
|
||||
import java.lang.annotation.Documented;
|
||||
|
||||
-1
@@ -13,7 +13,6 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package cn.odboy.annotation;
|
||||
|
||||
import java.lang.annotation.Documented;
|
||||
|
||||
-1
@@ -13,7 +13,6 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package cn.odboy.annotation;
|
||||
|
||||
import java.lang.annotation.Documented;
|
||||
|
||||
-1
@@ -13,7 +13,6 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package cn.odboy.annotation;
|
||||
|
||||
import java.lang.annotation.Documented;
|
||||
|
||||
-1
@@ -13,7 +13,6 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package cn.odboy.annotation;
|
||||
|
||||
import java.lang.annotation.Documented;
|
||||
|
||||
@@ -13,7 +13,6 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package cn.odboy.base;
|
||||
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
|
||||
+3
-5
@@ -13,12 +13,11 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package cn.odboy.base;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.FieldFill;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import java.util.Date;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.Getter;
|
||||
@@ -29,8 +28,7 @@ import lombok.Setter;
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
public class KitBaseCreateTimeTb extends KitObject {
|
||||
|
||||
@Schema(name = "创建时间: yyyy-MM-dd HH:mm:ss", hidden = true)
|
||||
@TableField(fill = FieldFill.INSERT)
|
||||
private Date
|
||||
createTime;
|
||||
@ApiModelProperty(value = "创建时间: yyyy-MM-dd HH:mm:ss", hidden = true)
|
||||
private Date createTime;
|
||||
}
|
||||
|
||||
+4
-7
@@ -13,12 +13,11 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package cn.odboy.base;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.FieldFill;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import java.util.Date;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.Getter;
|
||||
@@ -30,11 +29,9 @@ import lombok.Setter;
|
||||
public class KitBaseTimeTb extends KitObject {
|
||||
|
||||
@TableField(fill = FieldFill.INSERT)
|
||||
@Schema(name = "创建时间: yyyy-MM-dd HH:mm:ss", hidden = true)
|
||||
private Date
|
||||
createTime;
|
||||
|
||||
@ApiModelProperty(value = "创建时间: yyyy-MM-dd HH:mm:ss", hidden = true)
|
||||
private Date createTime;
|
||||
@TableField(fill = FieldFill.INSERT_UPDATE)
|
||||
@Schema(name = "更新时间: yyyy-MM-dd HH:mm:ss", hidden = true)
|
||||
@ApiModelProperty(value = "更新时间: yyyy-MM-dd HH:mm:ss", hidden = true)
|
||||
private Date updateTime;
|
||||
}
|
||||
|
||||
+2
-3
@@ -13,12 +13,11 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package cn.odboy.base;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.FieldFill;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import java.util.Date;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.Getter;
|
||||
@@ -29,7 +28,7 @@ import lombok.Setter;
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
public class KitBaseUpdateTimeTb extends KitObject {
|
||||
|
||||
@Schema(name = "更新时间: yyyy-MM-dd HH:mm:ss", hidden = true)
|
||||
@TableField(fill = FieldFill.INSERT_UPDATE)
|
||||
@ApiModelProperty(value = "更新时间: yyyy-MM-dd HH:mm:ss", hidden = true)
|
||||
private Date updateTime;
|
||||
}
|
||||
|
||||
+6
-8
@@ -13,12 +13,11 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package cn.odboy.base;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.FieldFill;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import java.lang.reflect.Field;
|
||||
import java.util.Date;
|
||||
import lombok.EqualsAndHashCode;
|
||||
@@ -34,13 +33,12 @@ public class KitBaseUserCreateTimeTb extends KitObject {
|
||||
|
||||
@CreatedBy
|
||||
@TableField(fill = FieldFill.INSERT)
|
||||
@Schema(name = "创建人", hidden = true)
|
||||
private String createBy;
|
||||
|
||||
@ApiModelProperty(value = "创建人", hidden = true)
|
||||
private String
|
||||
createBy;
|
||||
@TableField(fill = FieldFill.INSERT)
|
||||
@Schema(name = "创建时间: yyyy-MM-dd HH:mm:ss", hidden = true)
|
||||
private Date
|
||||
createTime;
|
||||
@ApiModelProperty(value = "创建时间: yyyy-MM-dd HH:mm:ss", hidden = true)
|
||||
private Date createTime;
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
|
||||
+9
-10
@@ -13,13 +13,12 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package cn.odboy.base;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.FieldFill;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableLogic;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import java.util.Date;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
@@ -38,21 +37,21 @@ public class KitBaseUserTimeLogicTb extends KitObject {
|
||||
|
||||
@CreatedBy
|
||||
@TableField(value = "create_by", fill = FieldFill.INSERT)
|
||||
@Schema(name = "创建人", hidden = true)
|
||||
@ApiModelProperty(value = "创建人", hidden = true)
|
||||
private String createBy;
|
||||
@LastModifiedBy
|
||||
@TableField(value = "update_by", fill = FieldFill.INSERT_UPDATE)
|
||||
@Schema(name = "更新人", hidden = true)
|
||||
@ApiModelProperty(value = "更新人", hidden = true)
|
||||
private String updateBy;
|
||||
@TableField(value = "create_time", fill = FieldFill.INSERT)
|
||||
@Schema(name = "创建时间", hidden = true)
|
||||
private Date
|
||||
createTime;
|
||||
@ApiModelProperty(value = "创建时间", hidden = true)
|
||||
private Date createTime;
|
||||
@TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
|
||||
@Schema(name = "更新时间", hidden = true)
|
||||
@ApiModelProperty(value = "更新时间", hidden = true)
|
||||
private Date updateTime;
|
||||
@Schema(name = "数据有效性", hidden = true)
|
||||
@ApiModelProperty(value = "数据有效性", hidden = true)
|
||||
@TableLogic
|
||||
@TableField("available")
|
||||
private Integer available;
|
||||
private Integer
|
||||
available;
|
||||
}
|
||||
|
||||
+9
-14
@@ -13,12 +13,11 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package cn.odboy.base;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.FieldFill;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import java.lang.reflect.Field;
|
||||
import java.util.Date;
|
||||
import lombok.EqualsAndHashCode;
|
||||
@@ -35,22 +34,18 @@ public class KitBaseUserTimeTb extends KitObject {
|
||||
|
||||
@CreatedBy
|
||||
@TableField(fill = FieldFill.INSERT)
|
||||
@Schema(name = "创建人", hidden = true)
|
||||
private String createBy;
|
||||
|
||||
@ApiModelProperty(value = "创建人", hidden = true)
|
||||
private String
|
||||
createBy;
|
||||
@LastModifiedBy
|
||||
@TableField(fill = FieldFill.INSERT_UPDATE)
|
||||
@Schema(name = "更新人", hidden = true)
|
||||
private String
|
||||
updateBy;
|
||||
|
||||
@ApiModelProperty(value = "更新人", hidden = true)
|
||||
private String updateBy;
|
||||
@TableField(fill = FieldFill.INSERT)
|
||||
@Schema(name = "创建时间: yyyy-MM-dd HH:mm:ss", hidden = true)
|
||||
private Date
|
||||
createTime;
|
||||
|
||||
@ApiModelProperty(value = "创建时间: yyyy-MM-dd HH:mm:ss", hidden = true)
|
||||
private Date createTime;
|
||||
@TableField(fill = FieldFill.INSERT_UPDATE)
|
||||
@Schema(name = "更新时间: yyyy-MM-dd HH:mm:ss", hidden = true)
|
||||
@ApiModelProperty(value = "更新时间: yyyy-MM-dd HH:mm:ss", hidden = true)
|
||||
private Date updateTime;
|
||||
|
||||
@Override
|
||||
|
||||
@@ -13,10 +13,8 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package cn.odboy.base;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
@@ -27,6 +25,5 @@ import java.io.Serializable;
|
||||
*/
|
||||
public class KitObject implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
}
|
||||
|
||||
+4
-5
@@ -13,13 +13,12 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package cn.odboy.base;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import java.io.Serializable;
|
||||
import jakarta.validation.constraints.Min;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import java.io.Serializable;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
@@ -37,11 +36,11 @@ public class KitPageArgs<T> implements Serializable {
|
||||
|
||||
@NotNull(message = "参数page不能为空")
|
||||
@Min(value = 1, message = "参数page最小值为1")
|
||||
@Schema(name = "页码", example = "1")
|
||||
@ApiModelProperty(value = "页码", example = "1")
|
||||
private Integer page;
|
||||
@NotNull(message = "参数size不能为空")
|
||||
@Min(value = 1, message = "参数size最小值为1")
|
||||
@Schema(name = "每页数据量", example = "10")
|
||||
@ApiModelProperty(value = "每页数据量", example = "10")
|
||||
private Integer size;
|
||||
private T args;
|
||||
}
|
||||
|
||||
@@ -13,7 +13,6 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package cn.odboy.base;
|
||||
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
|
||||
-1
@@ -13,7 +13,6 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package cn.odboy.base;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
-1
@@ -13,7 +13,6 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package cn.odboy.constant;
|
||||
|
||||
/**
|
||||
|
||||
-2
@@ -13,7 +13,6 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package cn.odboy.constant;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
@@ -24,7 +23,6 @@ import lombok.Getter;
|
||||
public enum FileTypeEnum {
|
||||
/* 文件类型 */
|
||||
IMAGE("image", "图片"), DOC("doc", "文档"), VOICE("voice", "音频"), VIDEO("video", "视频"), OTHER("other", "其他");
|
||||
|
||||
private final String code;
|
||||
private final String description;
|
||||
}
|
||||
|
||||
-8
@@ -13,7 +13,6 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package cn.odboy.constant;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
@@ -22,37 +21,30 @@ import lombok.Getter;
|
||||
@Getter
|
||||
@AllArgsConstructor
|
||||
public enum RequestMethodEnum {
|
||||
|
||||
/**
|
||||
* 搜寻 @AnonymousGetMapping
|
||||
*/
|
||||
GET("GET"),
|
||||
|
||||
/**
|
||||
* 搜寻 @AnonymousPostMapping
|
||||
*/
|
||||
POST("POST"),
|
||||
|
||||
/**
|
||||
* 搜寻 @AnonymousPutMapping
|
||||
*/
|
||||
PUT("PUT"),
|
||||
|
||||
/**
|
||||
* 搜寻 @AnonymousPatchMapping
|
||||
*/
|
||||
PATCH("PATCH"),
|
||||
|
||||
/**
|
||||
* 搜寻 @AnonymousDeleteMapping
|
||||
*/
|
||||
DELETE("DELETE"),
|
||||
|
||||
/**
|
||||
* 否则就是所有 Request 接口都放行
|
||||
*/
|
||||
ALL("All");
|
||||
|
||||
/**
|
||||
* Request 类型
|
||||
*/
|
||||
|
||||
+2
-5
@@ -13,7 +13,6 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package cn.odboy.constant;
|
||||
|
||||
/**
|
||||
@@ -25,22 +24,18 @@ public interface SystemConst {
|
||||
* win 系统
|
||||
*/
|
||||
String WIN = "win";
|
||||
|
||||
/**
|
||||
* mac 系统
|
||||
*/
|
||||
String MAC = "mac";
|
||||
|
||||
/**
|
||||
* 请求头名称
|
||||
*/
|
||||
String HEADER_NAME = "Authorization";
|
||||
|
||||
/**
|
||||
* Token前缀
|
||||
*/
|
||||
String TOKEN_PREFIX = "Bearer";
|
||||
|
||||
/**
|
||||
* 小数点
|
||||
*/
|
||||
@@ -51,4 +46,6 @@ public interface SystemConst {
|
||||
String SYMBOL_AT = "@";
|
||||
String PROPERTY_OS_NAME = "os.name";
|
||||
String OS_NAME_WINDOWS = "Windows";
|
||||
String CURRENT_APP_NAME = "cutejava";
|
||||
String CURRENT_APP_TITLE = "CuteJava";
|
||||
}
|
||||
|
||||
+3
-4
@@ -41,7 +41,7 @@ public class KitSpringBeanHolder implements ApplicationContextAware, DisposableB
|
||||
*/
|
||||
public synchronized static void addCallBacks(CallBack callBack) {
|
||||
if (addCallback) {
|
||||
KitSpringBeanHolder.CALL_BACKS.add(callBack);
|
||||
CALL_BACKS.add(callBack);
|
||||
} else {
|
||||
log.warn("CallBack:{} 已无法添加!立即执行", callBack.getCallBackName());
|
||||
callBack.executor();
|
||||
@@ -116,7 +116,7 @@ public class KitSpringBeanHolder implements ApplicationContextAware, DisposableB
|
||||
* 清除SpringContextHolder中的ApplicationContext为Null.
|
||||
*/
|
||||
private static void clearHolder() {
|
||||
log.debug("清除SpringContextHolder中的ApplicationContext:" + applicationContext);
|
||||
log.debug("清除SpringContextHolder中的ApplicationContext:{}", applicationContext);
|
||||
applicationContext = null;
|
||||
}
|
||||
|
||||
@@ -137,8 +137,7 @@ public class KitSpringBeanHolder implements ApplicationContextAware, DisposableB
|
||||
@Override
|
||||
public void setApplicationContext(@NonNull ApplicationContext applicationContext) throws BeansException {
|
||||
if (KitSpringBeanHolder.applicationContext != null) {
|
||||
log.warn("SpringContextHolder中的ApplicationContext被覆盖, 原有ApplicationContext为:" +
|
||||
KitSpringBeanHolder.applicationContext);
|
||||
log.warn("SpringContextHolder中的ApplicationContext被覆盖, 原有ApplicationContext为:{}", KitSpringBeanHolder.applicationContext);
|
||||
}
|
||||
KitSpringBeanHolder.applicationContext = applicationContext;
|
||||
if (addCallback) {
|
||||
|
||||
+1
-1
@@ -179,7 +179,7 @@ public class KitMpQUtil {
|
||||
*/
|
||||
private static <R> void handleBlurryQuery(QueryWrapper<R> queryWrapper, String blurry, Object fieldVal) {
|
||||
List<String> blurryList =
|
||||
Arrays.stream(blurry.split(",")).filter(StrUtil::isNotBlank).distinct().collect(Collectors.toList());
|
||||
Arrays.stream(blurry.split(",")).filter(StrUtil::isNotBlank).distinct().toList();
|
||||
queryWrapper.and(wrapper -> {
|
||||
for (String blurryItem : blurryList) {
|
||||
String column = StrUtil.toUnderlineCase(blurryItem);
|
||||
|
||||
+1
-2
@@ -280,8 +280,7 @@ public class KitRedisHelper {
|
||||
if (value == null) {
|
||||
return null;
|
||||
}
|
||||
if (value instanceof List<?>) {
|
||||
List<?> list = (List<?>) value;
|
||||
if (value instanceof List<?> list) {
|
||||
// 检查每个元素是否为指定类型
|
||||
if (list.stream().allMatch(clazz::isInstance)) {
|
||||
return list.stream().map(clazz::cast).collect(Collectors.toList());
|
||||
|
||||
+5
-8
@@ -18,7 +18,6 @@ package cn.odboy.framework.server.core;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.odboy.constant.SystemConst;
|
||||
import cn.odboy.util.KitSystemUtil;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
/**
|
||||
@@ -36,26 +35,24 @@ public class KitFileLocalUploadHelper {
|
||||
private static final String PATH_WINDOWS = "C:\\${appName}\\file\\";
|
||||
private static final String PATH_MAC = "/Users${username}/${appName}/file/";
|
||||
private static final String PATH_LINUX = "/home/${appName}/file/";
|
||||
@Value("${spring.application.name}")
|
||||
private String appName;
|
||||
|
||||
public String getPath() {
|
||||
String os = System.getProperty("os.name");
|
||||
if (os == null) {
|
||||
// 默认使用 Linux 路径作为兜底方案
|
||||
return PATH_LINUX.replace("${appName}", appName);
|
||||
return PATH_LINUX.replace("${appName}", SystemConst.CURRENT_APP_NAME);
|
||||
}
|
||||
String lowerOs = os.toLowerCase();
|
||||
if (lowerOs.startsWith(SystemConst.WIN)) {
|
||||
return PATH_WINDOWS.replace("${appName}", appName);
|
||||
return PATH_WINDOWS.replace("${appName}", SystemConst.CURRENT_APP_NAME);
|
||||
} else if (lowerOs.startsWith(SystemConst.MAC)) {
|
||||
String currentUserName = KitSystemUtil.getCurrentUserName();
|
||||
if (StrUtil.isBlank(currentUserName)) {
|
||||
return PATH_MAC.replace("${appName}", appName).replace("${username}", "");
|
||||
return PATH_MAC.replace("${appName}", SystemConst.CURRENT_APP_NAME).replace("${username}", "");
|
||||
}
|
||||
return PATH_MAC.replace("${appName}", appName).replace("${username}", currentUserName);
|
||||
return PATH_MAC.replace("${appName}", SystemConst.CURRENT_APP_NAME).replace("${username}", currentUserName);
|
||||
}
|
||||
return PATH_LINUX.replace("${appName}", appName);
|
||||
return PATH_LINUX.replace("${appName}", SystemConst.CURRENT_APP_NAME);
|
||||
}
|
||||
|
||||
public int getAvatarMaxSize() {
|
||||
|
||||
+1
-1
@@ -48,7 +48,7 @@ public class KitAnonTagUtil {
|
||||
RequestMappingHandlerMapping requestMappingHandlerMapping =
|
||||
(RequestMappingHandlerMapping) applicationContext.getBean("requestMappingHandlerMapping");
|
||||
Map<RequestMappingInfo, HandlerMethod> handlerMethodMap = requestMappingHandlerMapping.getHandlerMethods();
|
||||
Map<String, Set<String>> anonymousUrls = new HashMap<>(8);
|
||||
Map<String, java.util.Set<String>> anonymousUrls = new HashMap<>(8);
|
||||
// 获取匿名标记
|
||||
Set<String> get = new HashSet<>();
|
||||
Set<String> post = new HashSet<>();
|
||||
|
||||
+2
-1
@@ -17,6 +17,7 @@ package cn.odboy.util;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.odboy.base.KitSelectOptionVo;
|
||||
import cn.odboy.framework.exception.BadRequestException;
|
||||
import com.alibaba.fastjson2.JSON;
|
||||
import java.lang.reflect.Field;
|
||||
import java.math.BigDecimal;
|
||||
@@ -39,7 +40,7 @@ import lombok.experimental.UtilityClass;
|
||||
* @date 2022-11-09
|
||||
*/
|
||||
@UtilityClass
|
||||
public final class KitCollUtil extends CollUtil {
|
||||
public final class KitCollUtil extends cn.hutool.core.collection.CollUtil {
|
||||
|
||||
private static <T, K> Predicate<T> distinctPredicate(Function<? super T, ? extends K> keyMapper) {
|
||||
Map<Object, Boolean> map = new HashMap<>(3);
|
||||
|
||||
+3
-3
@@ -28,9 +28,6 @@ import cn.hutool.poi.excel.ExcelUtil;
|
||||
import cn.odboy.constant.FileTypeEnum;
|
||||
import cn.odboy.constant.SystemConst;
|
||||
import cn.odboy.framework.exception.BadRequestException;
|
||||
import jakarta.servlet.ServletOutputStream;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.IOException;
|
||||
@@ -45,6 +42,9 @@ import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
import jakarta.servlet.ServletOutputStream;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import lombok.experimental.UtilityClass;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.poi.util.IOUtils;
|
||||
|
||||
+1
-1
@@ -40,7 +40,7 @@ public final class KitListUtil {
|
||||
*/
|
||||
public static <T, K> List<T> distinctByArgs(List<T> items, Function<? super T, ? extends K> classifier) {
|
||||
return items.stream().collect(Collectors.groupingBy(classifier)).values().stream()
|
||||
.map(monitorItem -> monitorItem.iterator().next()).collect(Collectors.toList());
|
||||
.map(List::getFirst).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
+3
-3
@@ -77,9 +77,9 @@ public class SystemQuartzJobController {
|
||||
@ApiOperation("查询定时任务执行日志")
|
||||
@PostMapping(value = "/searchQuartzLog")
|
||||
@PreAuthorize("@el.check('quartzJob:list')")
|
||||
public ResponseEntity<KitPageResult<SystemQuartzLogTb>> queryQuartzJobLog(SystemQueryQuartzJobArgs args) {
|
||||
Page<SystemQuartzLogTb> page = new Page<>(args.getPage(), args.getSize());
|
||||
return ResponseEntity.ok(systemQuartzJobService.searchQuartzLogByArgs(args, page));
|
||||
public ResponseEntity<KitPageResult<SystemQuartzLogTb>> queryQuartzJobLog(@Validated @RequestBody KitPageArgs<SystemQueryQuartzJobArgs> pageArgs) {
|
||||
Page<SystemQuartzLogTb> page = new Page<>(pageArgs.getPage(), pageArgs.getSize());
|
||||
return ResponseEntity.ok(systemQuartzJobService.searchQuartzLogByArgs(pageArgs.getArgs(), page));
|
||||
}
|
||||
|
||||
@OperationLog
|
||||
|
||||
+2
-3
@@ -72,9 +72,8 @@ public class SystemRoleController {
|
||||
@ApiOperation("查询角色")
|
||||
@PostMapping(value = "/searchRole")
|
||||
@PreAuthorize("@el.check('roles:list')")
|
||||
public ResponseEntity<KitPageResult<SystemRoleVo>> queryRoleByArgs(
|
||||
@Validated @RequestBody KitPageArgs<SystemQueryRoleArgs> pageArgs) {
|
||||
Page<Object> page = new Page<>(pageArgs.getPage(), pageArgs.getSize());
|
||||
public ResponseEntity<KitPageResult<SystemRoleVo>> queryRoleByArgs(@Validated @RequestBody KitPageArgs<SystemQueryRoleArgs> pageArgs) {
|
||||
Page<SystemRoleTb> page = new Page<>(pageArgs.getPage(), pageArgs.getSize());
|
||||
return ResponseEntity.ok(systemRoleService.searchRoleByArgs(pageArgs.getArgs(), page));
|
||||
}
|
||||
|
||||
|
||||
-4
@@ -23,8 +23,4 @@ public class SystemQueryDictArgs {
|
||||
|
||||
@ApiModelProperty(value = "模糊查询")
|
||||
private String blurry;
|
||||
@ApiModelProperty(value = "页码", example = "1")
|
||||
private Integer page = 1;
|
||||
@ApiModelProperty(value = "每页数据量", example = "10")
|
||||
private Integer size = 10;
|
||||
}
|
||||
|
||||
-4
@@ -31,8 +31,4 @@ public class SystemQueryJobArgs {
|
||||
private Boolean enabled;
|
||||
@ApiModelProperty(value = "创建时间")
|
||||
private List<Date> createTime;
|
||||
@ApiModelProperty(value = "页码", example = "1")
|
||||
private Integer page = 1;
|
||||
@ApiModelProperty(value = "每页数据量", example = "10")
|
||||
private Integer size = 10;
|
||||
}
|
||||
|
||||
-4
@@ -29,8 +29,4 @@ public class SystemQueryQuartzJobArgs {
|
||||
private Boolean isSuccess;
|
||||
@ApiModelProperty(value = "创建时间")
|
||||
private List<Date> createTime;
|
||||
@ApiModelProperty(value = "页码", example = "1")
|
||||
private Integer page = 1;
|
||||
@ApiModelProperty(value = "每页数据量", example = "10")
|
||||
private Integer size = 10;
|
||||
}
|
||||
|
||||
-6
@@ -27,10 +27,4 @@ public class SystemQueryRoleArgs {
|
||||
private String blurry;
|
||||
@ApiModelProperty(value = "创建时间")
|
||||
private List<Date> createTime;
|
||||
@ApiModelProperty(value = "页码", example = "1")
|
||||
private Integer page = 1;
|
||||
@ApiModelProperty(value = "每页数据量", example = "10")
|
||||
private Integer size = 10;
|
||||
@ApiModelProperty(value = "偏移量", hidden = true)
|
||||
private long offset;
|
||||
}
|
||||
|
||||
-4
@@ -40,8 +40,4 @@ public class SystemQueryUserArgs extends KitObject {
|
||||
private Long deptId;
|
||||
@ApiModelProperty(value = "创建时间")
|
||||
private List<Date> createTime;
|
||||
@ApiModelProperty(value = "页码", example = "1")
|
||||
private Integer page = 1;
|
||||
@ApiModelProperty(value = "每页数据量", example = "10")
|
||||
private Integer size = 10;
|
||||
}
|
||||
|
||||
-5
@@ -18,7 +18,6 @@ package cn.odboy.system.dal.mysql;
|
||||
import cn.odboy.system.dal.dataobject.SystemDictTb;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import java.util.List;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
/**
|
||||
@@ -29,10 +28,6 @@ import org.apache.ibatis.annotations.Mapper;
|
||||
@Mapper
|
||||
public interface SystemDictMapper extends BaseMapper<SystemDictTb> {
|
||||
|
||||
default List<SystemDictTb> listAll() {
|
||||
return selectList(null);
|
||||
}
|
||||
|
||||
default SystemDictTb getByName(String dictName) {
|
||||
LambdaQueryWrapper<SystemDictTb> wrapper = new LambdaQueryWrapper<>();
|
||||
wrapper.eq(SystemDictTb::getName, dictName);
|
||||
|
||||
+2
-2
@@ -43,8 +43,8 @@ public class BizLockAspect {
|
||||
public Object around(ProceedingJoinPoint joinPoint, BizLock bizLock) throws Throwable {
|
||||
// 解析SpEL表达式生成最终的lockKey
|
||||
String lockKey = parseLockKey(joinPoint, bizLock);
|
||||
Boolean success = redisHelper.setIfAbsent(lockKey, lockKey, bizLock.leaseTime(), bizLock.timeUnit());
|
||||
if (success == null || !success) {
|
||||
boolean success = redisHelper.setIfAbsent(lockKey, lockKey, bizLock.leaseTime(), bizLock.timeUnit());
|
||||
if (!success) {
|
||||
throw new BadRequestException(bizLock.errorMessage());
|
||||
}
|
||||
try {
|
||||
|
||||
-2
@@ -13,7 +13,6 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package cn.odboy.system.framework.mybatisplus;
|
||||
|
||||
import cn.hutool.core.date.DateTime;
|
||||
@@ -55,4 +54,3 @@ public class MpMetaObjectHandler implements MetaObjectHandler {
|
||||
this.strictUpdateFill(metaObject, "updateBy", String.class, username);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+2
-2
@@ -27,8 +27,8 @@ import cn.odboy.util.KitBrowserUtil;
|
||||
import cn.odboy.util.KitIPUtil;
|
||||
import com.alibaba.fastjson2.JSON;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import java.lang.reflect.Method;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.aspectj.lang.ProceedingJoinPoint;
|
||||
import org.aspectj.lang.annotation.Around;
|
||||
@@ -96,7 +96,7 @@ public class OperationLogAspect {
|
||||
}
|
||||
}
|
||||
if (StrUtil.isBlank(bizName)) {
|
||||
bizName = "Default";
|
||||
bizName = "默认业务";
|
||||
}
|
||||
String method = joinPoint.getTarget().getClass().getName() + "." + signature.getName() + "()";
|
||||
Object[] args = joinPoint.getArgs();
|
||||
|
||||
-1
@@ -13,7 +13,6 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package cn.odboy.system.framework.storage;
|
||||
|
||||
import cn.odboy.framework.exception.BadRequestException;
|
||||
|
||||
+2
-5
@@ -13,16 +13,15 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package cn.odboy.system.framework.storage.local;
|
||||
|
||||
import cn.odboy.constant.SystemConst;
|
||||
import cn.odboy.framework.exception.BadRequestException;
|
||||
import cn.odboy.framework.properties.AppProperties;
|
||||
import jakarta.servlet.MultipartConfigElement;
|
||||
import java.io.File;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.boot.web.servlet.MultipartConfigFactory;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
@@ -32,8 +31,6 @@ import org.springframework.util.unit.DataSize;
|
||||
@Configuration
|
||||
public class MultipartConfig {
|
||||
|
||||
@Value("${spring.application.name}")
|
||||
private String name;
|
||||
@Autowired
|
||||
private AppProperties properties;
|
||||
|
||||
@@ -45,7 +42,7 @@ public class MultipartConfig {
|
||||
MultipartConfigFactory factory = new MultipartConfigFactory();
|
||||
factory.setMaxFileSize(DataSize.ofMegabytes(properties.getOss().getMaxSize()));
|
||||
factory.setMaxRequestSize(DataSize.ofMegabytes(properties.getOss().getMaxSize()));
|
||||
String location = System.getProperty("user.home") + "/" + name + "/tmp";
|
||||
String location = System.getProperty("user.home") + "/" + SystemConst.CURRENT_APP_NAME + "/tmp";
|
||||
File tmpFile = new File(location);
|
||||
if (!tmpFile.exists()) {
|
||||
if (!tmpFile.mkdirs()) {
|
||||
|
||||
+2
-15
@@ -13,7 +13,6 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package cn.odboy.system.framework.storage.minio;
|
||||
|
||||
import cn.hutool.core.io.FastByteArrayOutputStream;
|
||||
@@ -44,13 +43,13 @@ import io.minio.Result;
|
||||
import io.minio.http.Method;
|
||||
import io.minio.messages.Bucket;
|
||||
import io.minio.messages.Item;
|
||||
import jakarta.servlet.ServletOutputStream;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import java.io.File;
|
||||
import java.io.InputStream;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import jakarta.servlet.ServletOutputStream;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
@@ -153,13 +152,11 @@ public class MinioRepository {
|
||||
String type = FileTypeUtil.getType(tempFile);
|
||||
String prefix = KitFileUtil.getPrefix(tempFile);
|
||||
String suffix = KitFileUtil.getSuffix(tempFile);
|
||||
|
||||
String fileCode = IdUtil.fastSimpleUUID();
|
||||
String fileName = fileCode + FileUtil.getSuffix(originalFilename);
|
||||
String objectName = KitDateUtil.getNowDateStr() + "/" + fileName;
|
||||
log.info("上传文件,原文件名:{},上传后文件名:{}", originalFilename, fileName);
|
||||
String fileUrl = ossMinioConfig.getEndpoint() + "/" + ossMinioConfig.getBucketName() + "/" + objectName;
|
||||
|
||||
SystemOssStorageTb systemOssStorageTb = new SystemOssStorageTb();
|
||||
systemOssStorageTb.setServiceType("minio");
|
||||
systemOssStorageTb.setEndpoint(ossMinioConfig.getEndpoint());
|
||||
@@ -173,7 +170,6 @@ public class MinioRepository {
|
||||
systemOssStorageTb.setFileUrl(fileUrl);
|
||||
systemOssStorageTb.setFileCode(fileCode);
|
||||
systemOssStorageTb.setObjectName(objectName);
|
||||
|
||||
try (InputStream fileInputStream = KitFileUtil.getInputStream(tempFile)) {
|
||||
PutObjectArgs objectArgs = PutObjectArgs.builder().bucket(ossMinioConfig.getBucketName()).object(objectName)
|
||||
.stream(fileInputStream, fileSize, -1).contentType(contentType).build();
|
||||
@@ -203,14 +199,11 @@ public class MinioRepository {
|
||||
if (StrUtil.isBlank(originalFilename)) {
|
||||
throw new BadRequestException("文件名不能为空");
|
||||
}
|
||||
|
||||
long size = file.getSize();
|
||||
KitFileUtil.checkSize(properties.getOss().getMaxSize(), size);
|
||||
|
||||
String fileName = UUID.randomUUID() + FileUtil.getSuffix(originalFilename);
|
||||
// yyyy/MM/dd/fileName.xxx
|
||||
String objectName = KitDateUtil.getNowDateTimeStr() + "/" + fileName;
|
||||
|
||||
log.info("准备上传文件,原文件名:{},上传后文件名:{}", originalFilename, fileName);
|
||||
try (InputStream fileInputStream = file.getInputStream()) {
|
||||
PutObjectArgs objectArgs =
|
||||
@@ -286,17 +279,14 @@ public class MinioRepository {
|
||||
public void download(String fileName, HttpServletResponse res) {
|
||||
GetObjectArgs objectArgs =
|
||||
GetObjectArgs.builder().bucket(properties.getOss().getMinio().getBucketName()).object(fileName).build();
|
||||
|
||||
try (GetObjectResponse response = minioClient.getObject(objectArgs);
|
||||
FastByteArrayOutputStream os = new FastByteArrayOutputStream()) {
|
||||
|
||||
byte[] buf = new byte[1024];
|
||||
int len;
|
||||
while ((len = response.read(buf)) != -1) {
|
||||
os.write(buf, 0, len);
|
||||
}
|
||||
os.flush();
|
||||
|
||||
byte[] bytes = os.toByteArray();
|
||||
res.setCharacterEncoding("utf-8");
|
||||
res.addHeader("Content-Disposition", "attachment;fileName=" + fileName);
|
||||
@@ -318,12 +308,10 @@ public class MinioRepository {
|
||||
public void downloadOptimizedVersion(String fileName, HttpServletResponse res) {
|
||||
GetObjectArgs objectArgs =
|
||||
GetObjectArgs.builder().bucket(properties.getOss().getMinio().getBucketName()).object(fileName).build();
|
||||
|
||||
try (GetObjectResponse response = minioClient.getObject(objectArgs)) {
|
||||
// 增大缓冲区
|
||||
byte[] buf = new byte[1024 * 4];
|
||||
int len;
|
||||
|
||||
// 分块下载并输出到响应流
|
||||
try (ServletOutputStream stream = res.getOutputStream()) {
|
||||
res.setCharacterEncoding("utf-8");
|
||||
@@ -331,7 +319,6 @@ public class MinioRepository {
|
||||
res.setHeader("Cache-Control", "no-store");
|
||||
res.setHeader("Pragma", "no-cache");
|
||||
res.setHeader("Expires", "0");
|
||||
|
||||
while ((len = response.read(buf)) != -1) {
|
||||
stream.write(buf, 0, len);
|
||||
// 确保实时写入
|
||||
|
||||
+6
-6
@@ -26,7 +26,6 @@ import cn.odboy.system.dal.model.response.SystemDictDetailVo;
|
||||
import cn.odboy.system.dal.mysql.SystemDictMapper;
|
||||
import cn.odboy.util.KitBeanUtil;
|
||||
import cn.odboy.util.KitPageUtil;
|
||||
import cn.odboy.util.KitValidUtil;
|
||||
import cn.odboy.util.xlsx.KitExcelExporter;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
@@ -92,20 +91,21 @@ public class SystemDictService {
|
||||
*/
|
||||
public KitPageResult<SystemDictTb> searchDict(SystemQueryDictArgs args, Page<SystemDictTb> page) {
|
||||
LambdaQueryWrapper<SystemDictTb> wrapper = new LambdaQueryWrapper<>();
|
||||
injectQueryParams(args, wrapper);
|
||||
this.injectQueryParams(args, wrapper);
|
||||
Page<SystemDictTb> selectPage = systemDictMapper.selectPage(page, wrapper);
|
||||
return KitPageUtil.toPage(selectPage);
|
||||
}
|
||||
|
||||
private void injectQueryParams(SystemQueryDictArgs args, LambdaQueryWrapper<SystemDictTb> wrapper) {
|
||||
KitValidUtil.notNull(args);
|
||||
wrapper.and(StrUtil.isNotBlank(args.getBlurry()), c -> c.like(SystemDictTb::getName, args.getBlurry()).or()
|
||||
.like(SystemDictTb::getDescription, args.getBlurry()));
|
||||
if (args != null) {
|
||||
wrapper.and(StrUtil.isNotBlank(args.getBlurry()), c -> c.like(SystemDictTb::getName, args.getBlurry()).or()
|
||||
.like(SystemDictTb::getDescription, args.getBlurry()));
|
||||
}
|
||||
}
|
||||
|
||||
public List<SystemDictTb> queryDictByArgs(SystemQueryDictArgs args) {
|
||||
LambdaQueryWrapper<SystemDictTb> wrapper = new LambdaQueryWrapper<>();
|
||||
injectQueryParams(args, wrapper);
|
||||
this.injectQueryParams(args, wrapper);
|
||||
return systemDictMapper.selectList(wrapper);
|
||||
}
|
||||
|
||||
|
||||
+2
-4
@@ -19,6 +19,7 @@ import cn.hutool.core.lang.Dict;
|
||||
import cn.hutool.core.util.RandomUtil;
|
||||
import cn.hutool.extra.mail.Mail;
|
||||
import cn.hutool.extra.mail.MailAccount;
|
||||
import cn.odboy.constant.SystemConst;
|
||||
import cn.odboy.framework.exception.BadRequestException;
|
||||
import cn.odboy.framework.properties.AppProperties;
|
||||
import cn.odboy.framework.redis.KitRedisHelper;
|
||||
@@ -32,7 +33,6 @@ import cn.odboy.util.KitResourceTemplateUtil;
|
||||
import java.util.Collections;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
@@ -46,8 +46,6 @@ public class SystemEmailService {
|
||||
private KitRedisHelper redisHelper;
|
||||
@Autowired
|
||||
private AppProperties properties;
|
||||
@Value("${spring.application.title}")
|
||||
private String applicationTitle;
|
||||
|
||||
/**
|
||||
* 更新邮件配置
|
||||
@@ -146,7 +144,7 @@ public class SystemEmailService {
|
||||
KitResourceTemplateUtil.render(null, biEnum.getTemplateName(), Dict.create().set("code", oldCode));
|
||||
}
|
||||
SystemSendEmailArgs sendEmailRequest =
|
||||
new SystemSendEmailArgs(Collections.singletonList(email), applicationTitle, content);
|
||||
new SystemSendEmailArgs(Collections.singletonList(email), SystemConst.CURRENT_APP_TITLE, content);
|
||||
sendEmail(sendEmailRequest);
|
||||
}
|
||||
|
||||
|
||||
+7
-7
@@ -26,7 +26,6 @@ import cn.odboy.system.dal.model.request.SystemQueryJobArgs;
|
||||
import cn.odboy.system.dal.mysql.SystemJobMapper;
|
||||
import cn.odboy.util.KitBeanUtil;
|
||||
import cn.odboy.util.KitPageUtil;
|
||||
import cn.odboy.util.KitValidUtil;
|
||||
import cn.odboy.util.xlsx.KitExcelExporter;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
@@ -129,12 +128,13 @@ public class SystemJobService {
|
||||
}
|
||||
|
||||
public void injectQueryParams(SystemQueryJobArgs args, LambdaQueryWrapper<SystemJobTb> wrapper) {
|
||||
KitValidUtil.notNull(args);
|
||||
wrapper.like(StrUtil.isNotBlank(args.getName()), SystemJobTb::getName, args.getName());
|
||||
wrapper.eq(args.getEnabled() != null, SystemJobTb::getEnabled, args.getEnabled());
|
||||
if (CollUtil.isNotEmpty(args.getCreateTime()) && args.getCreateTime().size() >= 2) {
|
||||
wrapper.between(SystemJobTb::getCreateTime, args.getCreateTime().get(0),
|
||||
args.getCreateTime().get(1));
|
||||
if (args != null) {
|
||||
wrapper.like(StrUtil.isNotBlank(args.getName()), SystemJobTb::getName, args.getName());
|
||||
wrapper.eq(args.getEnabled() != null, SystemJobTb::getEnabled, args.getEnabled());
|
||||
if (CollUtil.isNotEmpty(args.getCreateTime()) && args.getCreateTime().size() >= 2) {
|
||||
wrapper.between(SystemJobTb::getCreateTime, args.getCreateTime().get(0),
|
||||
args.getCreateTime().get(1));
|
||||
}
|
||||
}
|
||||
wrapper.orderByDesc(SystemJobTb::getJobSort, SystemJobTb::getId);
|
||||
}
|
||||
|
||||
+10
-10
@@ -33,7 +33,6 @@ import cn.odboy.system.dal.mysql.SystemLocalStorageMapper;
|
||||
import cn.odboy.util.KitBeanUtil;
|
||||
import cn.odboy.util.KitFileUtil;
|
||||
import cn.odboy.util.KitPageUtil;
|
||||
import cn.odboy.util.KitValidUtil;
|
||||
import cn.odboy.util.xlsx.KitExcelExporter;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
@@ -140,15 +139,16 @@ public class SystemLocalStorageService {
|
||||
}
|
||||
|
||||
private void injectQueryParams(SystemQueryStorageArgs args, LambdaQueryWrapper<SystemLocalStorageTb> wrapper) {
|
||||
KitValidUtil.notNull(args);
|
||||
wrapper.and(StrUtil.isNotBlank(args.getBlurry()),
|
||||
c -> c.like(SystemLocalStorageTb::getName, args.getBlurry()).or()
|
||||
.like(SystemLocalStorageTb::getSuffix, args.getBlurry()).or()
|
||||
.like(SystemLocalStorageTb::getType, args.getBlurry()).or()
|
||||
.like(SystemLocalStorageTb::getCreateBy, args.getBlurry()));
|
||||
if (CollUtil.isNotEmpty(args.getCreateTime()) && args.getCreateTime().size() >= 2) {
|
||||
wrapper.between(SystemLocalStorageTb::getUpdateTime, args.getCreateTime().get(0),
|
||||
args.getCreateTime().get(1));
|
||||
if (args != null) {
|
||||
wrapper.and(StrUtil.isNotBlank(args.getBlurry()),
|
||||
c -> c.like(SystemLocalStorageTb::getName, args.getBlurry()).or()
|
||||
.like(SystemLocalStorageTb::getSuffix, args.getBlurry()).or()
|
||||
.like(SystemLocalStorageTb::getType, args.getBlurry()).or()
|
||||
.like(SystemLocalStorageTb::getCreateBy, args.getBlurry()));
|
||||
if (CollUtil.isNotEmpty(args.getCreateTime()) && args.getCreateTime().size() >= 2) {
|
||||
wrapper.between(SystemLocalStorageTb::getUpdateTime, args.getCreateTime().get(0),
|
||||
args.getCreateTime().get(1));
|
||||
}
|
||||
}
|
||||
wrapper.orderByDesc(SystemLocalStorageTb::getId);
|
||||
}
|
||||
|
||||
+6
-5
@@ -219,11 +219,12 @@ public class SystemQuartzJobService {
|
||||
}
|
||||
|
||||
private void injectQuartzLogQueryParams(SystemQueryQuartzJobArgs args, LambdaQueryWrapper<SystemQuartzLogTb> wrapper) {
|
||||
KitValidUtil.notNull(args);
|
||||
wrapper.like(StrUtil.isNotBlank(args.getJobName()), SystemQuartzLogTb::getJobName, args.getJobName());
|
||||
wrapper.eq(args.getIsSuccess() != null, SystemQuartzLogTb::getIsSuccess, args.getIsSuccess());
|
||||
if (CollUtil.isNotEmpty(args.getCreateTime()) && args.getCreateTime().size() >= 2) {
|
||||
wrapper.between(SystemQuartzLogTb::getCreateTime, args.getCreateTime().get(0), args.getCreateTime().get(1));
|
||||
if (args != null) {
|
||||
wrapper.like(StrUtil.isNotBlank(args.getJobName()), SystemQuartzLogTb::getJobName, args.getJobName());
|
||||
wrapper.eq(args.getIsSuccess() != null, SystemQuartzLogTb::getIsSuccess, args.getIsSuccess());
|
||||
if (CollUtil.isNotEmpty(args.getCreateTime()) && args.getCreateTime().size() >= 2) {
|
||||
wrapper.between(SystemQuartzLogTb::getCreateTime, args.getCreateTime().get(0), args.getCreateTime().get(1));
|
||||
}
|
||||
}
|
||||
wrapper.orderByDesc(SystemQuartzLogTb::getId);
|
||||
}
|
||||
|
||||
+20
-15
@@ -68,7 +68,7 @@ public class SystemRoleService {
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void saveRole(SystemCreateRoleArgs args) {
|
||||
checkRoleLevels(args.getLevel());
|
||||
if (this.getRoleByName(args.getName()) != null) {
|
||||
if (this.countRoleByName(args.getName()) > 0) {
|
||||
throw new BadRequestException("角色名称已存在");
|
||||
}
|
||||
SystemRoleTb roleTb = KitBeanUtil.copyToClass(args, SystemRoleTb.class);
|
||||
@@ -85,6 +85,12 @@ public class SystemRoleService {
|
||||
return systemRoleMapper.selectOne(wrapper);
|
||||
}
|
||||
|
||||
private long countRoleByName(String name) {
|
||||
LambdaQueryWrapper<SystemRoleTb> wrapper = new LambdaQueryWrapper<>();
|
||||
wrapper.eq(SystemRoleTb::getName, name);
|
||||
return systemRoleMapper.selectCount(wrapper);
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改
|
||||
*
|
||||
@@ -166,10 +172,11 @@ public class SystemRoleService {
|
||||
/**
|
||||
* 根据条件查询全部角色
|
||||
*
|
||||
* @param args 条件
|
||||
* @param args 条件
|
||||
* @param rolePage 分页参数
|
||||
* @return /
|
||||
*/
|
||||
public List<SystemRoleVo> queryRoleByArgs(SystemQueryRoleArgs args) {
|
||||
public List<SystemRoleVo> queryRoleByArgs(SystemQueryRoleArgs args, Page<SystemRoleTb> rolePage) {
|
||||
KitValidUtil.notNull(args);
|
||||
// 查询角色基本信息
|
||||
LambdaQueryWrapper<SystemRoleTb> wrapper = new LambdaQueryWrapper<>();
|
||||
@@ -181,27 +188,25 @@ public class SystemRoleService {
|
||||
args.getCreateTime().get(1));
|
||||
}
|
||||
wrapper.orderByAsc(SystemRoleTb::getLevel);
|
||||
if (args.getSize() != null) {
|
||||
Page<SystemRoleTb> rolePage = new Page<>(args.getPage(), args.getSize());
|
||||
Page<SystemRoleTb> page = systemRoleMapper.selectPage(rolePage, wrapper);
|
||||
List<SystemRoleTb> roles = page.getRecords();
|
||||
return roles.stream().map(systemUserRoleService::convertToRoleVo).collect(Collectors.toList());
|
||||
List<SystemRoleTb> roles;
|
||||
if (rolePage == null) {
|
||||
roles = systemRoleMapper.selectList(wrapper);
|
||||
} else {
|
||||
List<SystemRoleTb> roles = systemRoleMapper.selectList(wrapper);
|
||||
return roles.stream().map(systemUserRoleService::convertToRoleVo).collect(Collectors.toList());
|
||||
Page<SystemRoleTb> page = systemRoleMapper.selectPage(rolePage, wrapper);
|
||||
roles = page.getRecords();
|
||||
}
|
||||
return roles.stream().map(systemUserRoleService::convertToRoleVo).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
/**
|
||||
* 分页查询角色
|
||||
*
|
||||
* @param args 条件
|
||||
* @param page 分页参数
|
||||
* @param page 分页条件
|
||||
* @return /
|
||||
*/
|
||||
public KitPageResult<SystemRoleVo> searchRoleByArgs(SystemQueryRoleArgs args, Page<Object> page) {
|
||||
args.setOffset(page.offset());
|
||||
List<SystemRoleVo> roles = this.queryRoleByArgs(args);
|
||||
public KitPageResult<SystemRoleVo> searchRoleByArgs(SystemQueryRoleArgs args, Page<SystemRoleTb> page) {
|
||||
List<SystemRoleVo> roles = this.queryRoleByArgs(args, page);
|
||||
Long total = this.countRoleByArgs(args);
|
||||
return KitPageUtil.toPage(roles, total);
|
||||
}
|
||||
@@ -280,7 +285,7 @@ public class SystemRoleService {
|
||||
}
|
||||
|
||||
public void exportRoleXlsx(HttpServletResponse response, SystemQueryRoleArgs args) {
|
||||
List<SystemRoleVo> systemRoleVos = this.queryRoleByArgs(args);
|
||||
List<SystemRoleVo> systemRoleVos = this.queryRoleByArgs(args, null);
|
||||
List<SystemRoleExportRowVo> rowVos = new ArrayList<>();
|
||||
for (SystemRoleVo dataObject : systemRoleVos) {
|
||||
SystemRoleExportRowVo rowVo = new SystemRoleExportRowVo();
|
||||
|
||||
+1
-15
@@ -343,20 +343,6 @@ public class SystemUserService {
|
||||
return KitPageUtil.toPage(userVos, userPage.getTotal());
|
||||
}
|
||||
|
||||
// /**
|
||||
// * 查询全部不分页
|
||||
// *
|
||||
// * @param args 条件
|
||||
// * @return /
|
||||
// */
|
||||
// public List<SystemUserVo> queryUserVoByArgs(SystemQueryUserArgs args) {
|
||||
// // 查询用户基本信息
|
||||
// LambdaQueryWrapper<SystemUserTb> wrapper = buildUserQueryWrapper(args);
|
||||
// List<SystemUserTb> users = systemUserMapper.selectList(wrapper);
|
||||
// // 转换为SystemUserVo并关联查询
|
||||
// return users.stream().map(this::convertToUserVo).collect(Collectors.toList());
|
||||
// }
|
||||
|
||||
public long countUserByArgs(SystemQueryUserArgs args) {
|
||||
LambdaQueryWrapper<SystemUserTb> wrapper = buildUserQueryWrapper(args);
|
||||
return systemUserMapper.selectCount(wrapper);
|
||||
@@ -385,7 +371,7 @@ public class SystemUserService {
|
||||
c.or();
|
||||
c.like(SystemUserTb::getNickName, args.getBlurry());
|
||||
});
|
||||
return systemUserMapper.selectPage(new Page<>(args.getPage(), 50), wrapper).getRecords().stream().map(m -> {
|
||||
return systemUserMapper.selectPage(new Page<>(pageArgs.getPage(), 50), wrapper).getRecords().stream().map(m -> {
|
||||
Map<String, Object> ext = new HashMap<>(1);
|
||||
ext.put("id", m.getId());
|
||||
ext.put("deptId", m.getDeptId());
|
||||
|
||||
+5
-5
@@ -54,12 +54,12 @@ public final class KitSqlUtil {
|
||||
try {
|
||||
className = DriverManager.getDriver(jdbcUrl.trim()).getClass().getName();
|
||||
} catch (SQLException e) {
|
||||
throw new BadRequestException("Get class name error: =" + jdbcUrl);
|
||||
throw new BadRequestException("获取驱动类名失败,jdbcUrl=" + jdbcUrl);
|
||||
}
|
||||
if (StringUtils.isEmpty(className)) {
|
||||
DataTypeEnum dataTypeEnum = DataTypeEnum.urlOf(jdbcUrl);
|
||||
if (null == dataTypeEnum) {
|
||||
throw new BadRequestException("Not supported data type: jdbcUrl=" + jdbcUrl);
|
||||
throw new BadRequestException("不支持的数据库类型,jdbcUrl=" + jdbcUrl);
|
||||
}
|
||||
druidDataSource.setDriverClassName(dataTypeEnum.getDriver());
|
||||
} else {
|
||||
@@ -82,12 +82,12 @@ public final class KitSqlUtil {
|
||||
try {
|
||||
int timeOut = 5;
|
||||
if (null == connection || connection.isClosed() || !connection.isValid(timeOut)) {
|
||||
log.info("connection is closed or invalid, retry get connection!");
|
||||
log.info("连接已关闭或者错误,重试获取连接");
|
||||
connection = dataSource.getConnection();
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error("create connection error, jdbcUrl: {}", jdbcUrl);
|
||||
throw new BadRequestException("create connection error, jdbcUrl: " + jdbcUrl);
|
||||
log.error("创建连接失败, jdbcUrl={}", jdbcUrl);
|
||||
throw new BadRequestException("创建连接失败, jdbcUrl=" + jdbcUrl);
|
||||
} finally {
|
||||
KitCloseUtil.close(connection);
|
||||
}
|
||||
|
||||
@@ -30,9 +30,6 @@ server:
|
||||
# IMMEDIATE(立即): 当应用程序以"IMMEDIATE"模式关闭时,它会立即终止,而不管当前是否有任何活动任务或请求。这种方式适用于那些可以立即停止而不会造成严重问题的情况。
|
||||
shutdown: graceful
|
||||
spring:
|
||||
application:
|
||||
name: cutejava
|
||||
title: CuteJava
|
||||
lifecycle:
|
||||
# 采用java.time.Duration格式的值,如果在这个时间内,优雅停机没有停掉应用,超过这个时间就会强制停止应用
|
||||
timeout-per-shutdown-phase: 30s
|
||||
@@ -149,10 +146,10 @@ mybatis-plus:
|
||||
app:
|
||||
# 密码加密传输,前端公钥加密,后端私钥解密
|
||||
rsa:
|
||||
private-key: MIIBUwIBADANBgkqhkiG9w0BAQEFAASCAT0wggE5AgEAAkEA0vfvyTdGJkdbHkB8mp0f3FE0GYP3AYPaJF7jUd1M0XxFSE2ceK3k2kw20YvQ09NJKk+OMjWQl9WitG9pB6tSCQIDAQABAkA2SimBrWC2/wvauBuYqjCFwLvYiRYqZKThUS3MZlebXJiLB+Ue/gUifAAKIg1avttUZsHBHrop4qfJCwAI0+YRAiEA+W3NK/RaXtnRqmoUUkb59zsZUBLpvZgQPfj1MhyHDz0CIQDYhsAhPJ3mgS64NbUZmGWuuNKp5coY2GIj/zYDMJp6vQIgUueLFXv/eZ1ekgz2Oi67MNCk5jeTF2BurZqNLR3MSmUCIFT3Q6uHMtsB9Eha4u7hS31tj1UWE+D+ADzp59MGnoftAiBeHT7gDMuqeJHPL4b+kC+gzV4FGTfhR9q3tTbklZkD2A==
|
||||
private-key: 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
|
||||
# 鉴权
|
||||
jwt:
|
||||
# 必须使用最少88位的Base64对该令牌进行编码 cn.odboy.util.KitBase64SecretUtil
|
||||
# 必须使用最少88位的Base64对该令牌进行编码 cn.odboy.util.CsBase64SecretUtil
|
||||
base64-secret: YzE5ZWNjMjlkMGY4NDc4MDlmYzE0Y2I0MTk4YTQ4YjY5NTU0OGQxODNjNjQ0MmU1YjBmZTYwYjljYzI0M2M4MTJkZjk3Y2ZlYjg3ZTQxMjM4MjEwY2ZiYzE4YmFiYmZlZDVhM2M1YmI3M2FmNDFmNWJmM2MyMTM1ZDNhMmRmYzY=
|
||||
# 令牌过期时间 此处单位/毫秒 ,默认4小时,可在此网站生成 https://www.convertworld.com/zh-hans/time/milliseconds.html
|
||||
token-validity-in-seconds: 14400000
|
||||
@@ -215,4 +212,4 @@ logging:
|
||||
knife4j:
|
||||
enable: true
|
||||
setting:
|
||||
language: zh_cn
|
||||
language: zh_cn
|
||||
|
||||
@@ -30,9 +30,6 @@ server:
|
||||
# IMMEDIATE(立即): 当应用程序以"IMMEDIATE"模式关闭时,它会立即终止,而不管当前是否有任何活动任务或请求。这种方式适用于那些可以立即停止而不会造成严重问题的情况。
|
||||
shutdown: graceful
|
||||
spring:
|
||||
application:
|
||||
name: cutejava
|
||||
title: CuteJava
|
||||
lifecycle:
|
||||
# 采用java.time.Duration格式的值,如果在这个时间内,优雅停机没有停掉应用,超过这个时间就会强制停止应用
|
||||
timeout-per-shutdown-phase: 30s
|
||||
@@ -158,10 +155,10 @@ mybatis-plus:
|
||||
app:
|
||||
# 密码加密传输,前端公钥加密,后端私钥解密
|
||||
rsa:
|
||||
private-key: MIIBUwIBADANBgkqhkiG9w0BAQEFAASCAT0wggE5AgEAAkEA0vfvyTdGJkdbHkB8mp0f3FE0GYP3AYPaJF7jUd1M0XxFSE2ceK3k2kw20YvQ09NJKk+OMjWQl9WitG9pB6tSCQIDAQABAkA2SimBrWC2/wvauBuYqjCFwLvYiRYqZKThUS3MZlebXJiLB+Ue/gUifAAKIg1avttUZsHBHrop4qfJCwAI0+YRAiEA+W3NK/RaXtnRqmoUUkb59zsZUBLpvZgQPfj1MhyHDz0CIQDYhsAhPJ3mgS64NbUZmGWuuNKp5coY2GIj/zYDMJp6vQIgUueLFXv/eZ1ekgz2Oi67MNCk5jeTF2BurZqNLR3MSmUCIFT3Q6uHMtsB9Eha4u7hS31tj1UWE+D+ADzp59MGnoftAiBeHT7gDMuqeJHPL4b+kC+gzV4FGTfhR9q3tTbklZkD2A==
|
||||
private-key: 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
|
||||
# 鉴权
|
||||
jwt:
|
||||
# 必须使用最少88位的Base64对该令牌进行编码 cn.odboy.util.KitBase64SecretUtil
|
||||
# 必须使用最少88位的Base64对该令牌进行编码 cn.odboy.util.CsBase64SecretUtil
|
||||
base64-secret: YzE5ZWNjMjlkMGY4NDc4MDlmYzE0Y2I0MTk4YTQ4YjY5NTU0OGQxODNjNjQ0MmU1YjBmZTYwYjljYzI0M2M4MTJkZjk3Y2ZlYjg3ZTQxMjM4MjEwY2ZiYzE4YmFiYmZlZDVhM2M1YmI3M2FmNDFmNWJmM2MyMTM1ZDNhMmRmYzY=
|
||||
# 令牌过期时间 此处单位/毫秒 ,默认4小时,可在此网站生成 https://www.convertworld.com/zh-hans/time/milliseconds.html
|
||||
token-validity-in-seconds: 14400000
|
||||
@@ -224,4 +221,4 @@ logging:
|
||||
knife4j:
|
||||
enable: false
|
||||
setting:
|
||||
language: zh_cn
|
||||
language: zh_cn
|
||||
|
||||
@@ -9,7 +9,7 @@ spring:
|
||||
quartz:
|
||||
scheduler:
|
||||
# 必需,指定调度器实例的名称
|
||||
instanceName: ${spring.application.name}
|
||||
instanceName: cutejava
|
||||
# 必需,指定调度器实例的 ID
|
||||
instanceId: auto
|
||||
threadPool:
|
||||
|
||||
@@ -46,4 +46,6 @@ public interface SystemConst {
|
||||
String SYMBOL_AT = "@";
|
||||
String PROPERTY_OS_NAME = "os.name";
|
||||
String OS_NAME_WINDOWS = "Windows";
|
||||
String CURRENT_APP_NAME = "cutejava";
|
||||
String CURRENT_APP_TITLE = "CuteJava";
|
||||
}
|
||||
|
||||
+3
-4
@@ -41,7 +41,7 @@ public class KitSpringBeanHolder implements ApplicationContextAware, DisposableB
|
||||
*/
|
||||
public synchronized static void addCallBacks(CallBack callBack) {
|
||||
if (addCallback) {
|
||||
KitSpringBeanHolder.CALL_BACKS.add(callBack);
|
||||
CALL_BACKS.add(callBack);
|
||||
} else {
|
||||
log.warn("CallBack:{} 已无法添加!立即执行", callBack.getCallBackName());
|
||||
callBack.executor();
|
||||
@@ -116,7 +116,7 @@ public class KitSpringBeanHolder implements ApplicationContextAware, DisposableB
|
||||
* 清除SpringContextHolder中的ApplicationContext为Null.
|
||||
*/
|
||||
private static void clearHolder() {
|
||||
log.debug("清除SpringContextHolder中的ApplicationContext:" + applicationContext);
|
||||
log.debug("清除SpringContextHolder中的ApplicationContext:{}", applicationContext);
|
||||
applicationContext = null;
|
||||
}
|
||||
|
||||
@@ -137,8 +137,7 @@ public class KitSpringBeanHolder implements ApplicationContextAware, DisposableB
|
||||
@Override
|
||||
public void setApplicationContext(@NonNull ApplicationContext applicationContext) throws BeansException {
|
||||
if (KitSpringBeanHolder.applicationContext != null) {
|
||||
log.warn("SpringContextHolder中的ApplicationContext被覆盖, 原有ApplicationContext为:" +
|
||||
KitSpringBeanHolder.applicationContext);
|
||||
log.warn("SpringContextHolder中的ApplicationContext被覆盖, 原有ApplicationContext为:{}", KitSpringBeanHolder.applicationContext);
|
||||
}
|
||||
KitSpringBeanHolder.applicationContext = applicationContext;
|
||||
if (addCallback) {
|
||||
|
||||
+5
-8
@@ -18,7 +18,6 @@ package cn.odboy.framework.server.core;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.odboy.constant.SystemConst;
|
||||
import cn.odboy.util.KitSystemUtil;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
/**
|
||||
@@ -36,26 +35,24 @@ public class KitFileLocalUploadHelper {
|
||||
private static final String PATH_WINDOWS = "C:\\${appName}\\file\\";
|
||||
private static final String PATH_MAC = "/Users${username}/${appName}/file/";
|
||||
private static final String PATH_LINUX = "/home/${appName}/file/";
|
||||
@Value("${spring.application.name}")
|
||||
private String appName;
|
||||
|
||||
public String getPath() {
|
||||
String os = System.getProperty("os.name");
|
||||
if (os == null) {
|
||||
// 默认使用 Linux 路径作为兜底方案
|
||||
return PATH_LINUX.replace("${appName}", appName);
|
||||
return PATH_LINUX.replace("${appName}", SystemConst.CURRENT_APP_NAME);
|
||||
}
|
||||
String lowerOs = os.toLowerCase();
|
||||
if (lowerOs.startsWith(SystemConst.WIN)) {
|
||||
return PATH_WINDOWS.replace("${appName}", appName);
|
||||
return PATH_WINDOWS.replace("${appName}", SystemConst.CURRENT_APP_NAME);
|
||||
} else if (lowerOs.startsWith(SystemConst.MAC)) {
|
||||
String currentUserName = KitSystemUtil.getCurrentUserName();
|
||||
if (StrUtil.isBlank(currentUserName)) {
|
||||
return PATH_MAC.replace("${appName}", appName).replace("${username}", "");
|
||||
return PATH_MAC.replace("${appName}", SystemConst.CURRENT_APP_NAME).replace("${username}", "");
|
||||
}
|
||||
return PATH_MAC.replace("${appName}", appName).replace("${username}", "/" + currentUserName);
|
||||
return PATH_MAC.replace("${appName}", SystemConst.CURRENT_APP_NAME).replace("${username}", "/" + currentUserName);
|
||||
}
|
||||
return PATH_LINUX.replace("${appName}", appName);
|
||||
return PATH_LINUX.replace("${appName}", SystemConst.CURRENT_APP_NAME);
|
||||
}
|
||||
|
||||
public int getAvatarMaxSize() {
|
||||
|
||||
+3
-3
@@ -77,9 +77,9 @@ public class SystemQuartzJobController {
|
||||
@ApiOperation("查询定时任务执行日志")
|
||||
@PostMapping(value = "/searchQuartzLog")
|
||||
@PreAuthorize("@el.check('quartzJob:list')")
|
||||
public ResponseEntity<KitPageResult<SystemQuartzLogTb>> queryQuartzJobLog(SystemQueryQuartzJobArgs args) {
|
||||
Page<SystemQuartzLogTb> page = new Page<>(args.getPage(), args.getSize());
|
||||
return ResponseEntity.ok(systemQuartzJobService.searchQuartzLogByArgs(args, page));
|
||||
public ResponseEntity<KitPageResult<SystemQuartzLogTb>> queryQuartzJobLog(@Validated @RequestBody KitPageArgs<SystemQueryQuartzJobArgs> pageArgs) {
|
||||
Page<SystemQuartzLogTb> page = new Page<>(pageArgs.getPage(), pageArgs.getSize());
|
||||
return ResponseEntity.ok(systemQuartzJobService.searchQuartzLogByArgs(pageArgs.getArgs(), page));
|
||||
}
|
||||
|
||||
@OperationLog
|
||||
|
||||
+2
-3
@@ -72,9 +72,8 @@ public class SystemRoleController {
|
||||
@ApiOperation("查询角色")
|
||||
@PostMapping(value = "/searchRole")
|
||||
@PreAuthorize("@el.check('roles:list')")
|
||||
public ResponseEntity<KitPageResult<SystemRoleVo>> queryRoleByArgs(
|
||||
@Validated @RequestBody KitPageArgs<SystemQueryRoleArgs> pageArgs) {
|
||||
Page<Object> page = new Page<>(pageArgs.getPage(), pageArgs.getSize());
|
||||
public ResponseEntity<KitPageResult<SystemRoleVo>> queryRoleByArgs(@Validated @RequestBody KitPageArgs<SystemQueryRoleArgs> pageArgs) {
|
||||
Page<SystemRoleTb> page = new Page<>(pageArgs.getPage(), pageArgs.getSize());
|
||||
return ResponseEntity.ok(systemRoleService.searchRoleByArgs(pageArgs.getArgs(), page));
|
||||
}
|
||||
|
||||
|
||||
-4
@@ -23,8 +23,4 @@ public class SystemQueryDictArgs {
|
||||
|
||||
@ApiModelProperty(value = "模糊查询")
|
||||
private String blurry;
|
||||
@ApiModelProperty(value = "页码", example = "1")
|
||||
private Integer page = 1;
|
||||
@ApiModelProperty(value = "每页数据量", example = "10")
|
||||
private Integer size = 10;
|
||||
}
|
||||
|
||||
-4
@@ -31,8 +31,4 @@ public class SystemQueryJobArgs {
|
||||
private Boolean enabled;
|
||||
@ApiModelProperty(value = "创建时间")
|
||||
private List<Date> createTime;
|
||||
@ApiModelProperty(value = "页码", example = "1")
|
||||
private Integer page = 1;
|
||||
@ApiModelProperty(value = "每页数据量", example = "10")
|
||||
private Integer size = 10;
|
||||
}
|
||||
|
||||
-4
@@ -29,8 +29,4 @@ public class SystemQueryQuartzJobArgs {
|
||||
private Boolean isSuccess;
|
||||
@ApiModelProperty(value = "创建时间")
|
||||
private List<Date> createTime;
|
||||
@ApiModelProperty(value = "页码", example = "1")
|
||||
private Integer page = 1;
|
||||
@ApiModelProperty(value = "每页数据量", example = "10")
|
||||
private Integer size = 10;
|
||||
}
|
||||
|
||||
-6
@@ -27,10 +27,4 @@ public class SystemQueryRoleArgs {
|
||||
private String blurry;
|
||||
@ApiModelProperty(value = "创建时间")
|
||||
private List<Date> createTime;
|
||||
@ApiModelProperty(value = "页码", example = "1")
|
||||
private Integer page = 1;
|
||||
@ApiModelProperty(value = "每页数据量", example = "10")
|
||||
private Integer size = 10;
|
||||
@ApiModelProperty(value = "偏移量", hidden = true)
|
||||
private long offset;
|
||||
}
|
||||
|
||||
-4
@@ -40,8 +40,4 @@ public class SystemQueryUserArgs extends KitObject {
|
||||
private Long deptId;
|
||||
@ApiModelProperty(value = "创建时间")
|
||||
private List<Date> createTime;
|
||||
@ApiModelProperty(value = "页码", example = "1")
|
||||
private Integer page = 1;
|
||||
@ApiModelProperty(value = "每页数据量", example = "10")
|
||||
private Integer size = 10;
|
||||
}
|
||||
|
||||
-5
@@ -18,7 +18,6 @@ package cn.odboy.system.dal.mysql;
|
||||
import cn.odboy.system.dal.dataobject.SystemDictTb;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import java.util.List;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
/**
|
||||
@@ -29,10 +28,6 @@ import org.apache.ibatis.annotations.Mapper;
|
||||
@Mapper
|
||||
public interface SystemDictMapper extends BaseMapper<SystemDictTb> {
|
||||
|
||||
default List<SystemDictTb> listAll() {
|
||||
return selectList(null);
|
||||
}
|
||||
|
||||
default SystemDictTb getByName(String dictName) {
|
||||
LambdaQueryWrapper<SystemDictTb> wrapper = new LambdaQueryWrapper<>();
|
||||
wrapper.eq(SystemDictTb::getName, dictName);
|
||||
|
||||
+2
-2
@@ -43,8 +43,8 @@ public class BizLockAspect {
|
||||
public Object around(ProceedingJoinPoint joinPoint, BizLock bizLock) throws Throwable {
|
||||
// 解析SpEL表达式生成最终的lockKey
|
||||
String lockKey = parseLockKey(joinPoint, bizLock);
|
||||
Boolean success = redisHelper.setIfAbsent(lockKey, lockKey, bizLock.leaseTime(), bizLock.timeUnit());
|
||||
if (success == null || !success) {
|
||||
boolean success = redisHelper.setIfAbsent(lockKey, lockKey, bizLock.leaseTime(), bizLock.timeUnit());
|
||||
if (!success) {
|
||||
throw new BadRequestException(bizLock.errorMessage());
|
||||
}
|
||||
try {
|
||||
|
||||
+2
-4
@@ -15,6 +15,7 @@
|
||||
*/
|
||||
package cn.odboy.system.framework.storage.local;
|
||||
|
||||
import cn.odboy.constant.SystemConst;
|
||||
import cn.odboy.framework.exception.BadRequestException;
|
||||
import cn.odboy.framework.properties.AppProperties;
|
||||
import java.io.File;
|
||||
@@ -30,9 +31,6 @@ import org.springframework.util.unit.DataSize;
|
||||
@Slf4j
|
||||
@Configuration
|
||||
public class MultipartConfig {
|
||||
|
||||
@Value("${spring.application.name}")
|
||||
private String name;
|
||||
@Autowired
|
||||
private AppProperties properties;
|
||||
|
||||
@@ -44,7 +42,7 @@ public class MultipartConfig {
|
||||
MultipartConfigFactory factory = new MultipartConfigFactory();
|
||||
factory.setMaxFileSize(DataSize.ofMegabytes(properties.getOss().getMaxSize()));
|
||||
factory.setMaxRequestSize(DataSize.ofMegabytes(properties.getOss().getMaxSize()));
|
||||
String location = System.getProperty("user.home") + "/" + name + "/tmp";
|
||||
String location = System.getProperty("user.home") + "/" + SystemConst.CURRENT_APP_NAME + "/tmp";
|
||||
File tmpFile = new File(location);
|
||||
if (!tmpFile.exists()) {
|
||||
if (!tmpFile.mkdirs()) {
|
||||
|
||||
+6
-6
@@ -26,7 +26,6 @@ import cn.odboy.system.dal.model.response.SystemDictDetailVo;
|
||||
import cn.odboy.system.dal.mysql.SystemDictMapper;
|
||||
import cn.odboy.util.KitBeanUtil;
|
||||
import cn.odboy.util.KitPageUtil;
|
||||
import cn.odboy.util.KitValidUtil;
|
||||
import cn.odboy.util.xlsx.KitExcelExporter;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
@@ -92,20 +91,21 @@ public class SystemDictService {
|
||||
*/
|
||||
public KitPageResult<SystemDictTb> searchDict(SystemQueryDictArgs args, Page<SystemDictTb> page) {
|
||||
LambdaQueryWrapper<SystemDictTb> wrapper = new LambdaQueryWrapper<>();
|
||||
injectQueryParams(args, wrapper);
|
||||
this.injectQueryParams(args, wrapper);
|
||||
Page<SystemDictTb> selectPage = systemDictMapper.selectPage(page, wrapper);
|
||||
return KitPageUtil.toPage(selectPage);
|
||||
}
|
||||
|
||||
private void injectQueryParams(SystemQueryDictArgs args, LambdaQueryWrapper<SystemDictTb> wrapper) {
|
||||
KitValidUtil.notNull(args);
|
||||
wrapper.and(StrUtil.isNotBlank(args.getBlurry()), c -> c.like(SystemDictTb::getName, args.getBlurry()).or()
|
||||
.like(SystemDictTb::getDescription, args.getBlurry()));
|
||||
if (args != null) {
|
||||
wrapper.and(StrUtil.isNotBlank(args.getBlurry()), c -> c.like(SystemDictTb::getName, args.getBlurry()).or()
|
||||
.like(SystemDictTb::getDescription, args.getBlurry()));
|
||||
}
|
||||
}
|
||||
|
||||
public List<SystemDictTb> queryDictByArgs(SystemQueryDictArgs args) {
|
||||
LambdaQueryWrapper<SystemDictTb> wrapper = new LambdaQueryWrapper<>();
|
||||
injectQueryParams(args, wrapper);
|
||||
this.injectQueryParams(args, wrapper);
|
||||
return systemDictMapper.selectList(wrapper);
|
||||
}
|
||||
|
||||
|
||||
+2
-4
@@ -19,6 +19,7 @@ import cn.hutool.core.lang.Dict;
|
||||
import cn.hutool.core.util.RandomUtil;
|
||||
import cn.hutool.extra.mail.Mail;
|
||||
import cn.hutool.extra.mail.MailAccount;
|
||||
import cn.odboy.constant.SystemConst;
|
||||
import cn.odboy.framework.exception.BadRequestException;
|
||||
import cn.odboy.framework.properties.AppProperties;
|
||||
import cn.odboy.framework.redis.KitRedisHelper;
|
||||
@@ -32,7 +33,6 @@ import cn.odboy.util.KitResourceTemplateUtil;
|
||||
import java.util.Collections;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
@@ -46,8 +46,6 @@ public class SystemEmailService {
|
||||
private KitRedisHelper redisHelper;
|
||||
@Autowired
|
||||
private AppProperties properties;
|
||||
@Value("${spring.application.title}")
|
||||
private String applicationTitle;
|
||||
|
||||
/**
|
||||
* 更新邮件配置
|
||||
@@ -146,7 +144,7 @@ public class SystemEmailService {
|
||||
KitResourceTemplateUtil.render(null, biEnum.getTemplateName(), Dict.create().set("code", oldCode));
|
||||
}
|
||||
SystemSendEmailArgs sendEmailRequest =
|
||||
new SystemSendEmailArgs(Collections.singletonList(email), applicationTitle, content);
|
||||
new SystemSendEmailArgs(Collections.singletonList(email), SystemConst.CURRENT_APP_TITLE, content);
|
||||
sendEmail(sendEmailRequest);
|
||||
}
|
||||
|
||||
|
||||
+7
-7
@@ -26,7 +26,6 @@ import cn.odboy.system.dal.model.request.SystemQueryJobArgs;
|
||||
import cn.odboy.system.dal.mysql.SystemJobMapper;
|
||||
import cn.odboy.util.KitBeanUtil;
|
||||
import cn.odboy.util.KitPageUtil;
|
||||
import cn.odboy.util.KitValidUtil;
|
||||
import cn.odboy.util.xlsx.KitExcelExporter;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
@@ -129,12 +128,13 @@ public class SystemJobService {
|
||||
}
|
||||
|
||||
public void injectQueryParams(SystemQueryJobArgs args, LambdaQueryWrapper<SystemJobTb> wrapper) {
|
||||
KitValidUtil.notNull(args);
|
||||
wrapper.like(StrUtil.isNotBlank(args.getName()), SystemJobTb::getName, args.getName());
|
||||
wrapper.eq(args.getEnabled() != null, SystemJobTb::getEnabled, args.getEnabled());
|
||||
if (CollUtil.isNotEmpty(args.getCreateTime()) && args.getCreateTime().size() >= 2) {
|
||||
wrapper.between(SystemJobTb::getCreateTime, args.getCreateTime().get(0),
|
||||
args.getCreateTime().get(1));
|
||||
if (args != null) {
|
||||
wrapper.like(StrUtil.isNotBlank(args.getName()), SystemJobTb::getName, args.getName());
|
||||
wrapper.eq(args.getEnabled() != null, SystemJobTb::getEnabled, args.getEnabled());
|
||||
if (CollUtil.isNotEmpty(args.getCreateTime()) && args.getCreateTime().size() >= 2) {
|
||||
wrapper.between(SystemJobTb::getCreateTime, args.getCreateTime().get(0),
|
||||
args.getCreateTime().get(1));
|
||||
}
|
||||
}
|
||||
wrapper.orderByDesc(SystemJobTb::getJobSort, SystemJobTb::getId);
|
||||
}
|
||||
|
||||
+10
-10
@@ -33,7 +33,6 @@ import cn.odboy.system.dal.mysql.SystemLocalStorageMapper;
|
||||
import cn.odboy.util.KitBeanUtil;
|
||||
import cn.odboy.util.KitFileUtil;
|
||||
import cn.odboy.util.KitPageUtil;
|
||||
import cn.odboy.util.KitValidUtil;
|
||||
import cn.odboy.util.xlsx.KitExcelExporter;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
@@ -140,15 +139,16 @@ public class SystemLocalStorageService {
|
||||
}
|
||||
|
||||
private void injectQueryParams(SystemQueryStorageArgs args, LambdaQueryWrapper<SystemLocalStorageTb> wrapper) {
|
||||
KitValidUtil.notNull(args);
|
||||
wrapper.and(StrUtil.isNotBlank(args.getBlurry()),
|
||||
c -> c.like(SystemLocalStorageTb::getName, args.getBlurry()).or()
|
||||
.like(SystemLocalStorageTb::getSuffix, args.getBlurry()).or()
|
||||
.like(SystemLocalStorageTb::getType, args.getBlurry()).or()
|
||||
.like(SystemLocalStorageTb::getCreateBy, args.getBlurry()));
|
||||
if (CollUtil.isNotEmpty(args.getCreateTime()) && args.getCreateTime().size() >= 2) {
|
||||
wrapper.between(SystemLocalStorageTb::getUpdateTime, args.getCreateTime().get(0),
|
||||
args.getCreateTime().get(1));
|
||||
if (args != null) {
|
||||
wrapper.and(StrUtil.isNotBlank(args.getBlurry()),
|
||||
c -> c.like(SystemLocalStorageTb::getName, args.getBlurry()).or()
|
||||
.like(SystemLocalStorageTb::getSuffix, args.getBlurry()).or()
|
||||
.like(SystemLocalStorageTb::getType, args.getBlurry()).or()
|
||||
.like(SystemLocalStorageTb::getCreateBy, args.getBlurry()));
|
||||
if (CollUtil.isNotEmpty(args.getCreateTime()) && args.getCreateTime().size() >= 2) {
|
||||
wrapper.between(SystemLocalStorageTb::getUpdateTime, args.getCreateTime().get(0),
|
||||
args.getCreateTime().get(1));
|
||||
}
|
||||
}
|
||||
wrapper.orderByDesc(SystemLocalStorageTb::getId);
|
||||
}
|
||||
|
||||
+6
-5
@@ -219,11 +219,12 @@ public class SystemQuartzJobService {
|
||||
}
|
||||
|
||||
private void injectQuartzLogQueryParams(SystemQueryQuartzJobArgs args, LambdaQueryWrapper<SystemQuartzLogTb> wrapper) {
|
||||
KitValidUtil.notNull(args);
|
||||
wrapper.like(StrUtil.isNotBlank(args.getJobName()), SystemQuartzLogTb::getJobName, args.getJobName());
|
||||
wrapper.eq(args.getIsSuccess() != null, SystemQuartzLogTb::getIsSuccess, args.getIsSuccess());
|
||||
if (CollUtil.isNotEmpty(args.getCreateTime()) && args.getCreateTime().size() >= 2) {
|
||||
wrapper.between(SystemQuartzLogTb::getCreateTime, args.getCreateTime().get(0), args.getCreateTime().get(1));
|
||||
if (args != null) {
|
||||
wrapper.like(StrUtil.isNotBlank(args.getJobName()), SystemQuartzLogTb::getJobName, args.getJobName());
|
||||
wrapper.eq(args.getIsSuccess() != null, SystemQuartzLogTb::getIsSuccess, args.getIsSuccess());
|
||||
if (CollUtil.isNotEmpty(args.getCreateTime()) && args.getCreateTime().size() >= 2) {
|
||||
wrapper.between(SystemQuartzLogTb::getCreateTime, args.getCreateTime().get(0), args.getCreateTime().get(1));
|
||||
}
|
||||
}
|
||||
wrapper.orderByDesc(SystemQuartzLogTb::getId);
|
||||
}
|
||||
|
||||
+20
-15
@@ -68,7 +68,7 @@ public class SystemRoleService {
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void saveRole(SystemCreateRoleArgs args) {
|
||||
checkRoleLevels(args.getLevel());
|
||||
if (this.getRoleByName(args.getName()) != null) {
|
||||
if (this.countRoleByName(args.getName()) > 0) {
|
||||
throw new BadRequestException("角色名称已存在");
|
||||
}
|
||||
SystemRoleTb roleTb = KitBeanUtil.copyToClass(args, SystemRoleTb.class);
|
||||
@@ -85,6 +85,12 @@ public class SystemRoleService {
|
||||
return systemRoleMapper.selectOne(wrapper);
|
||||
}
|
||||
|
||||
private long countRoleByName(String name) {
|
||||
LambdaQueryWrapper<SystemRoleTb> wrapper = new LambdaQueryWrapper<>();
|
||||
wrapper.eq(SystemRoleTb::getName, name);
|
||||
return systemRoleMapper.selectCount(wrapper);
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改
|
||||
*
|
||||
@@ -166,10 +172,11 @@ public class SystemRoleService {
|
||||
/**
|
||||
* 根据条件查询全部角色
|
||||
*
|
||||
* @param args 条件
|
||||
* @param args 条件
|
||||
* @param rolePage 分页参数
|
||||
* @return /
|
||||
*/
|
||||
public List<SystemRoleVo> queryRoleByArgs(SystemQueryRoleArgs args) {
|
||||
public List<SystemRoleVo> queryRoleByArgs(SystemQueryRoleArgs args, Page<SystemRoleTb> rolePage) {
|
||||
KitValidUtil.notNull(args);
|
||||
// 查询角色基本信息
|
||||
LambdaQueryWrapper<SystemRoleTb> wrapper = new LambdaQueryWrapper<>();
|
||||
@@ -181,27 +188,25 @@ public class SystemRoleService {
|
||||
args.getCreateTime().get(1));
|
||||
}
|
||||
wrapper.orderByAsc(SystemRoleTb::getLevel);
|
||||
if (args.getSize() != null) {
|
||||
Page<SystemRoleTb> rolePage = new Page<>(args.getPage(), args.getSize());
|
||||
Page<SystemRoleTb> page = systemRoleMapper.selectPage(rolePage, wrapper);
|
||||
List<SystemRoleTb> roles = page.getRecords();
|
||||
return roles.stream().map(systemUserRoleService::convertToRoleVo).collect(Collectors.toList());
|
||||
List<SystemRoleTb> roles;
|
||||
if (rolePage == null) {
|
||||
roles = systemRoleMapper.selectList(wrapper);
|
||||
} else {
|
||||
List<SystemRoleTb> roles = systemRoleMapper.selectList(wrapper);
|
||||
return roles.stream().map(systemUserRoleService::convertToRoleVo).collect(Collectors.toList());
|
||||
Page<SystemRoleTb> page = systemRoleMapper.selectPage(rolePage, wrapper);
|
||||
roles = page.getRecords();
|
||||
}
|
||||
return roles.stream().map(systemUserRoleService::convertToRoleVo).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
/**
|
||||
* 分页查询角色
|
||||
*
|
||||
* @param args 条件
|
||||
* @param page 分页参数
|
||||
* @param page 分页条件
|
||||
* @return /
|
||||
*/
|
||||
public KitPageResult<SystemRoleVo> searchRoleByArgs(SystemQueryRoleArgs args, Page<Object> page) {
|
||||
args.setOffset(page.offset());
|
||||
List<SystemRoleVo> roles = this.queryRoleByArgs(args);
|
||||
public KitPageResult<SystemRoleVo> searchRoleByArgs(SystemQueryRoleArgs args, Page<SystemRoleTb> page) {
|
||||
List<SystemRoleVo> roles = this.queryRoleByArgs(args, page);
|
||||
Long total = this.countRoleByArgs(args);
|
||||
return KitPageUtil.toPage(roles, total);
|
||||
}
|
||||
@@ -280,7 +285,7 @@ public class SystemRoleService {
|
||||
}
|
||||
|
||||
public void exportRoleXlsx(HttpServletResponse response, SystemQueryRoleArgs args) {
|
||||
List<SystemRoleVo> systemRoleVos = this.queryRoleByArgs(args);
|
||||
List<SystemRoleVo> systemRoleVos = this.queryRoleByArgs(args, null);
|
||||
List<SystemRoleExportRowVo> rowVos = new ArrayList<>();
|
||||
for (SystemRoleVo dataObject : systemRoleVos) {
|
||||
SystemRoleExportRowVo rowVo = new SystemRoleExportRowVo();
|
||||
|
||||
+1
-1
@@ -371,7 +371,7 @@ public class SystemUserService {
|
||||
c.or();
|
||||
c.like(SystemUserTb::getNickName, args.getBlurry());
|
||||
});
|
||||
return systemUserMapper.selectPage(new Page<>(args.getPage(), 50), wrapper).getRecords().stream().map(m -> {
|
||||
return systemUserMapper.selectPage(new Page<>(pageArgs.getPage(), 50), wrapper).getRecords().stream().map(m -> {
|
||||
Map<String, Object> ext = new HashMap<>(1);
|
||||
ext.put("id", m.getId());
|
||||
ext.put("deptId", m.getDeptId());
|
||||
|
||||
@@ -54,12 +54,12 @@ public final class KitSqlUtil {
|
||||
try {
|
||||
className = DriverManager.getDriver(jdbcUrl.trim()).getClass().getName();
|
||||
} catch (SQLException e) {
|
||||
throw new BadRequestException("Get class name error: =" + jdbcUrl);
|
||||
throw new BadRequestException("获取驱动类名失败,jdbcUrl=" + jdbcUrl);
|
||||
}
|
||||
if (StringUtils.isEmpty(className)) {
|
||||
DataTypeEnum dataTypeEnum = DataTypeEnum.urlOf(jdbcUrl);
|
||||
if (null == dataTypeEnum) {
|
||||
throw new BadRequestException("Not supported data type: jdbcUrl=" + jdbcUrl);
|
||||
throw new BadRequestException("不支持的数据库类型,jdbcUrl=" + jdbcUrl);
|
||||
}
|
||||
druidDataSource.setDriverClassName(dataTypeEnum.getDriver());
|
||||
} else {
|
||||
@@ -82,12 +82,12 @@ public final class KitSqlUtil {
|
||||
try {
|
||||
int timeOut = 5;
|
||||
if (null == connection || connection.isClosed() || !connection.isValid(timeOut)) {
|
||||
log.info("connection is closed or invalid, retry get connection!");
|
||||
log.info("连接已关闭或者错误,重试获取连接");
|
||||
connection = dataSource.getConnection();
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error("create connection error, jdbcUrl: {}", jdbcUrl);
|
||||
throw new BadRequestException("create connection error, jdbcUrl: " + jdbcUrl);
|
||||
log.error("创建连接失败, jdbcUrl={}", jdbcUrl);
|
||||
throw new BadRequestException("创建连接失败, jdbcUrl=" + jdbcUrl);
|
||||
} finally {
|
||||
KitCloseUtil.close(connection);
|
||||
}
|
||||
|
||||
+25
-34
@@ -55,8 +55,7 @@ public class TaskJobBean extends QuartzJobBean {
|
||||
public void executeInternal(JobExecutionContext context) {
|
||||
// ========================== 获取代理类 ==========================
|
||||
TaskInstanceInfoService taskInstanceInfoService = KitSpringBeanHolder.getBean(TaskInstanceInfoService.class);
|
||||
TaskInstanceDetailService taskInstanceDetailService =
|
||||
KitSpringBeanHolder.getBean(TaskInstanceDetailService.class);
|
||||
TaskInstanceDetailService taskInstanceDetailService = KitSpringBeanHolder.getBean(TaskInstanceDetailService.class);
|
||||
// ========================== 获取参数 ==========================
|
||||
JobDataMap dataMap = context.getMergedJobDataMap();
|
||||
long id = dataMap.getLong(TaskJobKeys.ID);
|
||||
@@ -69,8 +68,7 @@ public class TaskJobBean extends QuartzJobBean {
|
||||
if (StrUtil.isBlank(retryNodeCode)) {
|
||||
executeNormalTask(taskInstanceInfoService, taskInstanceDetailService, id, dataMap, taskTemplateNodeVos);
|
||||
} else {
|
||||
executeRetryTask(taskInstanceInfoService, taskInstanceDetailService, id, dataMap, taskTemplateNodeVos,
|
||||
retryNodeCode);
|
||||
executeRetryTask(taskInstanceInfoService, taskInstanceDetailService, id, dataMap, taskTemplateNodeVos, retryNodeCode);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -83,19 +81,14 @@ public class TaskJobBean extends QuartzJobBean {
|
||||
* @param dataMap 数据映射
|
||||
* @param taskTemplateNodeVos 模板节点列表
|
||||
*/
|
||||
private void executeNormalTask(TaskInstanceInfoService taskInstanceInfoService,
|
||||
TaskInstanceDetailService taskInstanceDetailService, long id, JobDataMap dataMap,
|
||||
List<TaskTemplateNodeVo> taskTemplateNodeVos) {
|
||||
private void executeNormalTask(TaskInstanceInfoService taskInstanceInfoService, TaskInstanceDetailService taskInstanceDetailService, long id, JobDataMap dataMap, List<TaskTemplateNodeVo> taskTemplateNodeVos) {
|
||||
// ========================== 初始化执行明细 ==========================
|
||||
List<TaskInstanceDetailTb> taskInstanceDetails =
|
||||
taskTemplateNodeVos.stream().map(taskTemplateNodeVo -> buildTaskInstanceDetail(id, taskTemplateNodeVo))
|
||||
.collect(Collectors.toList());
|
||||
List<TaskInstanceDetailTb> taskInstanceDetails = taskTemplateNodeVos.stream().map(taskTemplateNodeVo -> buildTaskInstanceDetail(id, taskTemplateNodeVo))
|
||||
.collect(Collectors.toList());
|
||||
taskInstanceDetailService.saveBatch(taskInstanceDetails);
|
||||
Map<String, Long> codeIdMap = taskInstanceDetails.stream()
|
||||
.collect(Collectors.toMap(TaskInstanceDetailTb::getBizCode, TaskInstanceDetailTb::getId));
|
||||
Map<String, Long> codeIdMap = taskInstanceDetails.stream().collect(Collectors.toMap(TaskInstanceDetailTb::getBizCode, TaskInstanceDetailTb::getId));
|
||||
// ========================== 顺序执行 ==========================
|
||||
executeTaskSteps(taskInstanceInfoService, taskInstanceDetailService, id, dataMap, taskTemplateNodeVos,
|
||||
codeIdMap);
|
||||
executeTaskSteps(taskInstanceInfoService, taskInstanceDetailService, id, dataMap, taskTemplateNodeVos, codeIdMap);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -178,16 +171,14 @@ public class TaskJobBean extends QuartzJobBean {
|
||||
* @param taskTemplateNodes 需要执行的任务节点列表
|
||||
* @param codeIdMap 节点编码与明细ID映射
|
||||
*/
|
||||
private void executeTaskSteps(TaskInstanceInfoService taskInstanceInfoService,
|
||||
TaskInstanceDetailService taskInstanceDetailService, Long id, JobDataMap dataMap,
|
||||
List<TaskTemplateNodeVo> taskTemplateNodes, Map<String, Long> codeIdMap) {
|
||||
private void executeTaskSteps(TaskInstanceInfoService taskInstanceInfoService, TaskInstanceDetailService taskInstanceDetailService, Long id, JobDataMap dataMap, List<TaskTemplateNodeVo> taskTemplateNodes, Map<String, Long> codeIdMap) {
|
||||
try {
|
||||
boolean isTerminate = false;
|
||||
for (TaskTemplateNodeVo taskTemplateNodeVo : taskTemplateNodes) {
|
||||
String code = taskTemplateNodeVo.getCode();
|
||||
while (true) {
|
||||
TaskInstanceDetailTb currentTaskInstanceNode =
|
||||
taskInstanceDetailService.getOneByInstanceIdAndCode(id, code);
|
||||
ThreadUtil.safeSleep(5000);
|
||||
TaskInstanceDetailTb currentTaskInstanceNode = taskInstanceDetailService.getOneByInstanceIdAndCode(id, code);
|
||||
if (TaskStatusEnum.Fail.getCode().equals(currentTaskInstanceNode.getExecuteStatus())) {
|
||||
log.info("任务节点执行失败, instanceId={}, bizCode={}", id, code);
|
||||
isTerminate = true;
|
||||
@@ -197,30 +188,30 @@ public class TaskJobBean extends QuartzJobBean {
|
||||
break;
|
||||
} else if (TaskStatusEnum.Pending.getCode().equals(currentTaskInstanceNode.getExecuteStatus())) {
|
||||
log.info("任务节点由待执行变更为执行中, instanceId={}, bizCode={}", id, code);
|
||||
try {
|
||||
TaskStepExecutor executor = KitSpringBeanHolder.getBean("taskStep" + getBeanAlias(code));
|
||||
taskInstanceDetailService.fastStart(id, code, dataMap);
|
||||
executor.execute(codeIdMap.getOrDefault(code, null), dataMap, taskTemplateNodeVo);
|
||||
taskInstanceDetailService.fastSuccessWithInfo(id, code, null);
|
||||
} catch (Exception e) {
|
||||
log.error("任务节点执行失败", e);
|
||||
taskInstanceDetailService.fastFailWithInfo(id, code, e.getMessage());
|
||||
throw new ServerException(e);
|
||||
}
|
||||
break;
|
||||
ThreadUtil.execAsync(() -> {
|
||||
try {
|
||||
TaskStepExecutor executor = KitSpringBeanHolder.getBean("taskStep" + getBeanAlias(code));
|
||||
taskInstanceDetailService.fastStart(id, code, dataMap);
|
||||
executor.execute(codeIdMap.getOrDefault(code, null), dataMap, taskTemplateNodeVo);
|
||||
taskInstanceDetailService.fastSuccessWithInfo(id, code, null);
|
||||
} catch (Exception e) {
|
||||
log.error("任务节点执行失败", e);
|
||||
taskInstanceDetailService.fastFailWithInfo(id, code, e.getMessage());
|
||||
}
|
||||
});
|
||||
} else if (TaskStatusEnum.Running.getCode().equals(currentTaskInstanceNode.getExecuteStatus())) {
|
||||
ThreadUtil.safeSleep(5000);
|
||||
log.info("任务节点执行中, instanceId={}, bizCode={}", id, code);
|
||||
} else {
|
||||
// 处理未知状态
|
||||
log.warn("任务节点处于未知状态, instanceId={}, bizCode={}, status={}", id, code,
|
||||
currentTaskInstanceNode.getExecuteStatus());
|
||||
ThreadUtil.safeSleep(5000);
|
||||
log.warn("任务节点处于未知状态, instanceId={}, bizCode={}, status={}", id, code, currentTaskInstanceNode.getExecuteStatus());
|
||||
}
|
||||
}
|
||||
if (isTerminate) {
|
||||
// 跳出任务线
|
||||
break;
|
||||
}
|
||||
}
|
||||
// 主动终止 或者 被动退出的
|
||||
if (isTerminate) {
|
||||
taskInstanceInfoService.fastFailWithMessageData(id, "任务执行失败", dataMap);
|
||||
} else {
|
||||
|
||||
+1
-2
@@ -26,6 +26,5 @@ public interface TaskStepExecutor {
|
||||
* @param jobDataMap 执行参数
|
||||
* @param taskTemplateNode 任务节点信息
|
||||
*/
|
||||
void execute(Long instanceDetailId, JobDataMap jobDataMap, TaskTemplateNodeVo taskTemplateNode)
|
||||
throws BadRequestException;
|
||||
void execute(Long instanceDetailId, JobDataMap jobDataMap, TaskTemplateNodeVo taskTemplateNode) throws BadRequestException;
|
||||
}
|
||||
|
||||
@@ -30,9 +30,6 @@ server:
|
||||
# IMMEDIATE(立即): 当应用程序以"IMMEDIATE"模式关闭时,它会立即终止,而不管当前是否有任何活动任务或请求。这种方式适用于那些可以立即停止而不会造成严重问题的情况。
|
||||
shutdown: graceful
|
||||
spring:
|
||||
application:
|
||||
name: cutejava
|
||||
title: CuteJava
|
||||
lifecycle:
|
||||
# 采用java.time.Duration格式的值,如果在这个时间内,优雅停机没有停掉应用,超过这个时间就会强制停止应用
|
||||
timeout-per-shutdown-phase: 30s
|
||||
@@ -160,7 +157,7 @@ mybatis-plus:
|
||||
app:
|
||||
# 密码加密传输,前端公钥加密,后端私钥解密
|
||||
rsa:
|
||||
private-key: MIIBUwIBADANBgkqhkiG9w0BAQEFAASCAT0wggE5AgEAAkEA0vfvyTdGJkdbHkB8mp0f3FE0GYP3AYPaJF7jUd1M0XxFSE2ceK3k2kw20YvQ09NJKk+OMjWQl9WitG9pB6tSCQIDAQABAkA2SimBrWC2/wvauBuYqjCFwLvYiRYqZKThUS3MZlebXJiLB+Ue/gUifAAKIg1avttUZsHBHrop4qfJCwAI0+YRAiEA+W3NK/RaXtnRqmoUUkb59zsZUBLpvZgQPfj1MhyHDz0CIQDYhsAhPJ3mgS64NbUZmGWuuNKp5coY2GIj/zYDMJp6vQIgUueLFXv/eZ1ekgz2Oi67MNCk5jeTF2BurZqNLR3MSmUCIFT3Q6uHMtsB9Eha4u7hS31tj1UWE+D+ADzp59MGnoftAiBeHT7gDMuqeJHPL4b+kC+gzV4FGTfhR9q3tTbklZkD2A==
|
||||
private-key: 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
|
||||
# 鉴权
|
||||
jwt:
|
||||
# 必须使用最少88位的Base64对该令牌进行编码 cn.odboy.util.CsBase64SecretUtil
|
||||
@@ -225,4 +222,4 @@ logging:
|
||||
total-size-cap: 1GB
|
||||
level:
|
||||
# root: debug
|
||||
cn.odboy: info
|
||||
cn.odboy: info
|
||||
|
||||
@@ -30,9 +30,6 @@ server:
|
||||
# IMMEDIATE(立即): 当应用程序以"IMMEDIATE"模式关闭时,它会立即终止,而不管当前是否有任何活动任务或请求。这种方式适用于那些可以立即停止而不会造成严重问题的情况。
|
||||
shutdown: graceful
|
||||
spring:
|
||||
application:
|
||||
name: cutejava
|
||||
title: CuteJava
|
||||
lifecycle:
|
||||
# 采用java.time.Duration格式的值,如果在这个时间内,优雅停机没有停掉应用,超过这个时间就会强制停止应用
|
||||
timeout-per-shutdown-phase: 30s
|
||||
@@ -159,11 +156,11 @@ mybatis-plus:
|
||||
app:
|
||||
# 密码加密传输,前端公钥加密,后端私钥解密
|
||||
rsa:
|
||||
private-key: MIIBUwIBADANBgkqhkiG9w0BAQEFAASCAT0wggE5AgEAAkEA0vfvyTdGJkdbHkB8mp0f3FE0GYP3AYPaJF7jUd1M0XxFSE2ceK3k2kw20YvQ09NJKk+OMjWQl9WitG9pB6tSCQIDAQABAkA2SimBrWC2/wvauBuYqjCFwLvYiRYqZKThUS3MZlebXJiLB+Ue/gUifAAKIg1avttUZsHBHrop4qfJCwAI0+YRAiEA+W3NK/RaXtnRqmoUUkb59zsZUBLpvZgQPfj1MhyHDz0CIQDYhsAhPJ3mgS64NbUZmGWuuNKp5coY2GIj/zYDMJp6vQIgUueLFXv/eZ1ekgz2Oi67MNCk5jeTF2BurZqNLR3MSmUCIFT3Q6uHMtsB9Eha4u7hS31tj1UWE+D+ADzp59MGnoftAiBeHT7gDMuqeJHPL4b+kC+gzV4FGTfhR9q3tTbklZkD2A==
|
||||
private-key: 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
|
||||
# 鉴权
|
||||
jwt:
|
||||
# 必须使用最少88位的Base64对该令牌进行编码
|
||||
base64-secret: ZmQ0ZGI5NjQ0MDQwY2I4MjMxY2Y3ZmI3MjdhN2ZmMjNhODViOTg1ZGE0NTBjMGM4NDA5NzYxMjdjOWMwYWRmZTBlZjlhNGY3ZTg4Y2U3YTE1ODVkZDU5Y2Y3OGYwZWE1NzUzNWQ2YjFjZDc0NGMxZWU2MmQ3MjY1NzJmNTE0MzI=
|
||||
# 必须使用最少88位的Base64对该令牌进行编码 cn.odboy.util.CsBase64SecretUtil
|
||||
base64-secret: YzE5ZWNjMjlkMGY4NDc4MDlmYzE0Y2I0MTk4YTQ4YjY5NTU0OGQxODNjNjQ0MmU1YjBmZTYwYjljYzI0M2M4MTJkZjk3Y2ZlYjg3ZTQxMjM4MjEwY2ZiYzE4YmFiYmZlZDVhM2M1YmI3M2FmNDFmNWJmM2MyMTM1ZDNhMmRmYzY=
|
||||
# 令牌过期时间 此处单位/毫秒 ,默认4小时,可在此网站生成 https://www.convertworld.com/zh-hans/time/milliseconds.html
|
||||
token-validity-in-seconds: 14400000
|
||||
# token 续期检查时间范围(默认30分钟,单位毫秒),在token即将过期的一段时间内用户操作了,则给用户的token续期
|
||||
@@ -224,4 +221,4 @@ logging:
|
||||
total-size-cap: 1GB
|
||||
level:
|
||||
# root: debug
|
||||
cn.odboy: info
|
||||
cn.odboy: info
|
||||
|
||||
@@ -9,7 +9,7 @@ spring:
|
||||
quartz:
|
||||
scheduler:
|
||||
# 必需,指定调度器实例的名称
|
||||
instanceName: ${spring.application.name}
|
||||
instanceName: cutejava
|
||||
# 必需,指定调度器实例的 ID
|
||||
instanceId: auto
|
||||
threadPool:
|
||||
|
||||
Reference in New Issue
Block a user