init
This commit is contained in:
@@ -0,0 +1,56 @@
|
||||
server:
|
||||
port: 8000
|
||||
|
||||
spring:
|
||||
application:
|
||||
name: service-system
|
||||
profiles:
|
||||
active: dev
|
||||
cloud:
|
||||
config:
|
||||
label: druid
|
||||
name: ${spring.application.name}
|
||||
profile: ${spring.profiles.active}
|
||||
discovery:
|
||||
enabled: true
|
||||
service-id: config
|
||||
main:
|
||||
allow-bean-definition-overriding: true
|
||||
|
||||
task:
|
||||
pool:
|
||||
# 核心线程池大小
|
||||
core-pool-size: 10
|
||||
# 最大线程数
|
||||
max-pool-size: 30
|
||||
# 活跃时间
|
||||
keep-alive-seconds: 60
|
||||
# 队列容量
|
||||
queue-capacity: 50
|
||||
|
||||
#七牛云
|
||||
qiniu:
|
||||
# 文件大小 /M
|
||||
max-size: 15
|
||||
|
||||
#邮箱验证码有效时间/秒
|
||||
code:
|
||||
expiration: 300
|
||||
|
||||
#密码加密传输,前端公钥加密,后端私钥解密
|
||||
rsa:
|
||||
private_key: MIIBUwIBADANBgkqhkiG9w0BAQEFAASCAT0wggE5AgEAAkEA0vfvyTdGJkdbHkB8mp0f3FE0GYP3AYPaJF7jUd1M0XxFSE2ceK3k2kw20YvQ09NJKk+OMjWQl9WitG9pB6tSCQIDAQABAkA2SimBrWC2/wvauBuYqjCFwLvYiRYqZKThUS3MZlebXJiLB+Ue/gUifAAKIg1avttUZsHBHrop4qfJCwAI0+YRAiEA+W3NK/RaXtnRqmoUUkb59zsZUBLpvZgQPfj1MhyHDz0CIQDYhsAhPJ3mgS64NbUZmGWuuNKp5coY2GIj/zYDMJp6vQIgUueLFXv/eZ1ekgz2Oi67MNCk5jeTF2BurZqNLR3MSmUCIFT3Q6uHMtsB9Eha4u7hS31tj1UWE+D+ADzp59MGnoftAiBeHT7gDMuqeJHPL4b+kC+gzV4FGTfhR9q3tTbklZkD2A==
|
||||
|
||||
# 注册中心配置
|
||||
eureka:
|
||||
instance:
|
||||
lease-renewal-interval-in-seconds: 20
|
||||
prefer-ip-address: true
|
||||
ip-address: 192.168.1.169
|
||||
client:
|
||||
register-with-eureka: true
|
||||
fetch-registry: true
|
||||
instance-info-replication-interval-seconds: 30
|
||||
registry-fetch-interval-seconds: 3
|
||||
service-url:
|
||||
defaultZone: http://192.168.1.169:8610/eureka/
|
||||
@@ -0,0 +1,18 @@
|
||||
# environment variables
|
||||
|
||||
#JAVA_HOME=""
|
||||
|
||||
WEB_LOG_PATH=${BIN}/../logs
|
||||
WEB_CONF_PATH=${BIN}/../conf
|
||||
|
||||
DATA_PATH=${BIN}/../data
|
||||
SERVER_PORT=8000
|
||||
|
||||
# mail account
|
||||
MAIL_USERNAME=""
|
||||
MAIL_PASSWORD=""
|
||||
|
||||
|
||||
#debug
|
||||
#REMOTE_DEBUG_SWITCH=true
|
||||
#REMOTE_DEBUG_PORT=7003
|
||||
@@ -0,0 +1,27 @@
|
||||
#数据库类型转Java类型
|
||||
tinyint=Integer
|
||||
smallint=Integer
|
||||
mediumint=Integer
|
||||
int=Integer
|
||||
integer=Integer
|
||||
|
||||
bigint=Long
|
||||
|
||||
float=Float
|
||||
|
||||
double=Double
|
||||
|
||||
decimal=BigDecimal
|
||||
|
||||
bit=Boolean
|
||||
|
||||
char=String
|
||||
varchar=String
|
||||
tinytext=String
|
||||
text=String
|
||||
mediumtext=String
|
||||
longtext=String
|
||||
|
||||
date=Timestamp
|
||||
datetime=Timestamp
|
||||
timestamp=Timestamp
|
||||
@@ -0,0 +1,274 @@
|
||||
admin_name=任务调度中心
|
||||
admin_name_full=分布式任务调度平台XXL-JOB
|
||||
admin_version=2.1.1
|
||||
admin_i18n=
|
||||
|
||||
## system
|
||||
system_tips=系统提示
|
||||
system_ok=确定
|
||||
system_close=关闭
|
||||
system_save=保存
|
||||
system_cancel=取消
|
||||
system_search=搜索
|
||||
system_status=状态
|
||||
system_opt=操作
|
||||
system_please_input=请输入
|
||||
system_please_choose=请选择
|
||||
system_success=成功
|
||||
system_fail=失败
|
||||
system_add_suc=新增成功
|
||||
system_add_fail=新增失败
|
||||
system_update_suc=更新成功
|
||||
system_update_fail=更新失败
|
||||
system_all=全部
|
||||
system_api_error=接口异常
|
||||
system_show=查看
|
||||
system_empty=无
|
||||
system_opt_suc=操作成功
|
||||
system_opt_fail=操作失败
|
||||
system_opt_edit=编辑
|
||||
system_opt_del=删除
|
||||
system_invalid=非法
|
||||
system_not_found=不存在
|
||||
system_nav=导航
|
||||
system_digits=整数
|
||||
system_length_limit=长度限制
|
||||
system_no_blank=不能为空
|
||||
system_type_error=类型错误
|
||||
system_permission_limit=权限拦截
|
||||
system_welcome=欢迎
|
||||
|
||||
## daterangepicker
|
||||
daterangepicker_ranges_recent_hour=最近一小时
|
||||
daterangepicker_ranges_today=今日
|
||||
daterangepicker_ranges_yesterday=昨日
|
||||
daterangepicker_ranges_this_month=本月
|
||||
daterangepicker_ranges_last_month=上个月
|
||||
daterangepicker_ranges_recent_week=最近一周
|
||||
daterangepicker_ranges_recent_month=最近一月
|
||||
daterangepicker_custom_name=自定义
|
||||
daterangepicker_custom_starttime=起始时间
|
||||
daterangepicker_custom_endtime=结束时间
|
||||
daterangepicker_custom_daysofweek=日,一,二,三,四,五,六
|
||||
daterangepicker_custom_monthnames=一月,二月,三月,四月,五月,六月,七月,八月,九月,十月,十一月,十二月
|
||||
|
||||
## dataTable
|
||||
dataTable_sProcessing=处理中...
|
||||
dataTable_sLengthMenu=每页 _MENU_ 条记录
|
||||
dataTable_sZeroRecords=没有匹配结果
|
||||
dataTable_sInfo=第 _PAGE_ 页 ( 总共 _PAGES_ 页,_TOTAL_ 条记录 )
|
||||
dataTable_sInfoEmpty=无记录
|
||||
dataTable_sInfoFiltered=(由 _MAX_ 项结果过滤)
|
||||
dataTable_sSearch=搜索
|
||||
dataTable_sEmptyTable=表中数据为空
|
||||
dataTable_sLoadingRecords=载入中...
|
||||
dataTable_sFirst=首页
|
||||
dataTable_sPrevious=上页
|
||||
dataTable_sNext=下页
|
||||
dataTable_sLast=末页
|
||||
dataTable_sSortAscending=: 以升序排列此列
|
||||
dataTable_sSortDescending=: 以降序排列此列
|
||||
|
||||
## login
|
||||
login_btn=登录
|
||||
login_remember_me=记住密码
|
||||
login_username_placeholder=请输入登录账号
|
||||
login_password_placeholder=请输入登录密码
|
||||
login_username_empty=请输入登录账号
|
||||
login_username_lt_4=登录账号不应低于4位
|
||||
login_password_empty=请输入登录密码
|
||||
login_password_lt_4=登录密码不应低于4位
|
||||
login_success=登录成功
|
||||
login_fail=登录失败
|
||||
login_param_empty=账号或密码为空
|
||||
login_param_invalid=账号或密码错误
|
||||
|
||||
## logout
|
||||
logout_btn=注销
|
||||
logout_confirm=确认注销登录?
|
||||
logout_success=注销成功
|
||||
logout_fail=注销失败
|
||||
|
||||
## change pwd
|
||||
change_pwd=修改密码
|
||||
change_pwd_suc_to_logout=修改密码成功,即将注销登陆
|
||||
change_pwd_field_newpwd=新密码
|
||||
|
||||
## dashboard
|
||||
job_dashboard_name=运行报表
|
||||
job_dashboard_job_num=任务数量
|
||||
job_dashboard_job_num_tip=调度中心运行的任务数量
|
||||
job_dashboard_trigger_num=调度次数
|
||||
job_dashboard_trigger_num_tip=调度中心触发的调度次数
|
||||
job_dashboard_jobgroup_num=执行器数量
|
||||
job_dashboard_jobgroup_num_tip=调度中心在线的执行器机器数量
|
||||
job_dashboard_report=调度报表
|
||||
job_dashboard_report_loaddata_fail=调度报表数据加载异常
|
||||
job_dashboard_date_report=日期分布图
|
||||
job_dashboard_rate_report=成功比例图
|
||||
|
||||
## job info
|
||||
jobinfo_name=任务管理
|
||||
jobinfo_job=任务
|
||||
jobinfo_field_add=新增
|
||||
jobinfo_field_update=更新任务
|
||||
jobinfo_field_id=任务ID
|
||||
jobinfo_field_jobgroup=执行器
|
||||
jobinfo_field_jobgproject=所属项目
|
||||
jobinfo_field_temp=模板
|
||||
jobinfo_field_jobdesc=任务描述
|
||||
jobinfo_field_jobjson=任务JSON
|
||||
jobinfo_field_readerDataSource=Reader数据源
|
||||
jobinfo_field_writerDataSource=Writer数据源
|
||||
jobinfo_field_readerColumns=源端字段
|
||||
jobinfo_field_writerColumns=目标字段
|
||||
jobinfo_field_gluetype=运行模式
|
||||
jobinfo_field_executorparam=任务参数
|
||||
jobinfo_field_cron_invalid=Cron格式非法
|
||||
jobinfo_field_cron_never_fire=Cron非法,永远不会触发
|
||||
jobinfo_field_author=负责人
|
||||
jobinfo_field_timeout=任务超时时间
|
||||
jobinfo_field_alarmemail=报警邮件
|
||||
jobinfo_field_alarmemail_placeholder=请输入报警邮件,多个邮件地址则逗号分隔
|
||||
jobinfo_field_executorRouteStrategy=路由策略
|
||||
jobinfo_field_childJobId=子任务ID
|
||||
jobinfo_field_childJobId_placeholder=请输入子任务的任务ID,如存在多个则逗号分隔
|
||||
jobinfo_field_executorBlockStrategy=阻塞处理策略
|
||||
jobinfo_field_executorFailRetryCount=失败重试次数
|
||||
jobinfo_field_executorFailRetryCount_placeholder=失败重试次数,大于零时生效
|
||||
jobinfo_script_location=脚本位置
|
||||
jobinfo_shard_index=分片序号
|
||||
jobinfo_shard_total=分片总数
|
||||
jobinfo_opt_stop=停止
|
||||
jobinfo_opt_start=启动
|
||||
jobinfo_opt_log=查询日志
|
||||
jobinfo_opt_run=执行一次
|
||||
jobinfo_opt_registryinfo=注册节点
|
||||
jobinfo_opt_next_time=下次执行时间
|
||||
jobinfo_glue_remark=源码备注
|
||||
jobinfo_glue_remark_limit=源码备注长度限制为4~100
|
||||
jobinfo_glue_rollback=版本回溯
|
||||
jobinfo_glue_jobid_invalid=任务ID非法
|
||||
jobinfo_glue_gluetype_invalid=该任务非GLUE模式
|
||||
jobinfo_field_executorTimeout_placeholder=任务超时时间,单位秒,大于零时生效
|
||||
|
||||
## job log
|
||||
joblog_name=调度日志
|
||||
joblog_status=状态
|
||||
joblog_status_all=全部
|
||||
joblog_status_suc=成功
|
||||
joblog_status_fail=失败
|
||||
joblog_status_running=进行中
|
||||
joblog_field_triggerTime=调度时间
|
||||
joblog_field_triggerCode=调度结果
|
||||
joblog_field_triggerMsg=调度备注
|
||||
joblog_field_handleTime=执行时间
|
||||
joblog_field_handleCode=执行结果
|
||||
joblog_field_handleMsg=执行备注
|
||||
joblog_field_executorAddress=执行器地址
|
||||
joblog_clean=清理
|
||||
joblog_clean_log=日志清理
|
||||
joblog_clean_type=清理方式
|
||||
joblog_clean_type_1=清理一个月之前日志数据
|
||||
joblog_clean_type_2=清理三个月之前日志数据
|
||||
joblog_clean_type_3=清理六个月之前日志数据
|
||||
joblog_clean_type_4=清理一年之前日志数据
|
||||
joblog_clean_type_5=清理一千条以前日志数据
|
||||
joblog_clean_type_6=清理一万条以前日志数据
|
||||
joblog_clean_type_7=清理三万条以前日志数据
|
||||
joblog_clean_type_8=清理十万条以前日志数据
|
||||
joblog_clean_type_9=清理所有日志数据
|
||||
joblog_clean_type_invalid=清理类型参数异常
|
||||
joblog_handleCode_200=成功
|
||||
joblog_handleCode_500=失败
|
||||
joblog_handleCode_502=失败(超时)
|
||||
joblog_kill_log=终止任务
|
||||
joblog_kill_log_limit=调度失败,无法终止日志
|
||||
joblog_kill_log_byman=人为操作主动终止
|
||||
joblog_rolling_log=执行日志
|
||||
joblog_rolling_log_refresh=刷新
|
||||
joblog_rolling_log_triggerfail=任务发起调度失败,无法查看执行日志
|
||||
joblog_rolling_log_failoften=终止请求Rolling日志,请求失败次数超上限,可刷新页面重新加载日志
|
||||
joblog_logid_invalid=日志ID非法
|
||||
|
||||
## job group
|
||||
jobgroup_name=执行器管理
|
||||
jobgroup_list=执行器列表
|
||||
jobgroup_add=新增执行器
|
||||
jobgroup_edit=编辑执行器
|
||||
jobgroup_del=删除执行器
|
||||
jobgroup_field_order=排序
|
||||
jobgroup_field_title=名称
|
||||
jobgroup_field_addressType=注册方式
|
||||
jobgroup_field_addressType_0=自动注册
|
||||
jobgroup_field_addressType_1=手动录入
|
||||
jobgroup_field_addressType_limit=手动录入注册方式,机器地址不可为空
|
||||
jobgroup_field_registryList=机器地址
|
||||
jobgroup_field_registryList_invalid=机器地址格式非法
|
||||
jobgroup_field_registryList_placeholder=请输入执行器地址列表,多地址逗号分隔
|
||||
jobgroup_field_appName_limit=限制以小写字母开头,由小写字母、数字和中划线组成
|
||||
jobgroup_field_appName_length=分组标识长度限制为4~64
|
||||
jobgroup_field_title_length=名称长度限制为4~12
|
||||
jobgroup_field_order_digits=请输入整数
|
||||
jobgroup_field_orderrange=取值范围为1~1000
|
||||
jobgroup_del_limit_0=拒绝删除,该执行器使用中
|
||||
jobgroup_del_limit_1=拒绝删除, 系统至少保留一个执行器
|
||||
jobgroup_empty=不存在有效执行器,请联系管理员
|
||||
|
||||
## job conf
|
||||
jobconf_block_SERIAL_EXECUTION=单机串行
|
||||
jobconf_block_DISCARD_LATER=丢弃后续调度
|
||||
jobconf_block_COVER_EARLY=覆盖之前调度
|
||||
jobconf_route_first=第一个
|
||||
jobconf_route_last=最后一个
|
||||
jobconf_route_round=轮询
|
||||
jobconf_route_random=随机
|
||||
jobconf_route_consistenthash=一致性HASH
|
||||
jobconf_route_lfu=最不经常使用
|
||||
jobconf_route_lru=最近最久未使用
|
||||
jobconf_route_failover=故障转移
|
||||
jobconf_route_busyover=忙碌转移
|
||||
jobconf_route_shard=分片广播
|
||||
jobconf_idleBeat=空闲检测
|
||||
jobconf_beat=心跳检测
|
||||
jobconf_monitor=任务调度中心监控报警
|
||||
jobconf_monitor_detail=监控告警明细
|
||||
jobconf_monitor_alarm_title=告警类型
|
||||
jobconf_monitor_alarm_type=调度失败
|
||||
jobconf_monitor_alarm_content=告警内容
|
||||
jobconf_trigger_admin_adress=调度机器
|
||||
jobconf_trigger_exe_regtype=执行器-注册方式
|
||||
jobconf_trigger_exe_regaddress=执行器-地址列表
|
||||
jobconf_trigger_address_empty=调度失败:执行器地址为空
|
||||
jobconf_trigger_run=触发调度
|
||||
jobconf_trigger_child_run=触发子任务
|
||||
jobconf_callback_child_msg1={0}/{1} [任务ID={2}], 触发{3}, 触发备注: {4} <br>
|
||||
jobconf_callback_child_msg2={0}/{1} [任务ID={2}], 触发失败, 触发备注: 任务ID格式错误 <br>
|
||||
jobconf_trigger_type=任务触发类型
|
||||
jobconf_trigger_type_cron=Cron触发
|
||||
jobconf_trigger_type_manual=手动触发
|
||||
jobconf_trigger_type_parent=父任务触发
|
||||
jobconf_trigger_type_api=API触发
|
||||
jobconf_trigger_type_retry=失败重试触发
|
||||
|
||||
## user
|
||||
user_manage=用户管理
|
||||
user_username=账号
|
||||
user_password=密码
|
||||
user_role=角色
|
||||
user_role_admin=管理员
|
||||
user_role_normal=普通用户
|
||||
user_permission=权限
|
||||
user_add=新增用户
|
||||
user_update=更新用户
|
||||
user_username_repeat=账号重复
|
||||
user_username_valid=限制以小写字母开头,由小写字母、数字组成
|
||||
user_password_update_placeholder=请输入新密码,为空则不更新密码
|
||||
user_update_loginuser_limit=禁止操作当前登录账号
|
||||
|
||||
## help
|
||||
job_help=使用教程
|
||||
job_help_document=官方文档
|
||||
|
||||
##json build
|
||||
json_build_inconsistent_number_r_w_tables=读写表数量不一致
|
||||
@@ -0,0 +1,264 @@
|
||||
admin_name=Scheduling Center
|
||||
admin_name_full=Distributed Task Scheduling Platform XXL-JOB
|
||||
admin_version=2.1.1
|
||||
admin_i18n=en
|
||||
|
||||
## system
|
||||
system_tips=System message
|
||||
system_ok=Confirm
|
||||
system_close=Close
|
||||
system_save=Save
|
||||
system_cancel=Cancel
|
||||
system_search=Search
|
||||
system_status=Status
|
||||
system_opt=Operate
|
||||
system_please_input=please input
|
||||
system_please_choose=please choose
|
||||
system_success=success
|
||||
system_fail=fail
|
||||
system_add_suc=add success
|
||||
system_add_fail=add fail
|
||||
system_update_suc=update success
|
||||
system_update_fail=update fail
|
||||
system_all=All
|
||||
system_api_error=net error
|
||||
system_show=Show
|
||||
system_empty=Empty
|
||||
system_opt_suc=operate success
|
||||
system_opt_fail=operate fail
|
||||
system_opt_edit=Edit
|
||||
system_opt_del=Delete
|
||||
system_invalid=illegal
|
||||
system_not_found=not exist
|
||||
system_nav=Navigation
|
||||
system_digits=digits
|
||||
system_length_limit=Length limit
|
||||
system_permission_limit=Permission limit
|
||||
system_welcome=Welcome
|
||||
|
||||
## daterangepicker
|
||||
daterangepicker_ranges_recent_hour=recent one hour
|
||||
daterangepicker_ranges_today=today
|
||||
daterangepicker_ranges_yesterday=yesterday
|
||||
daterangepicker_ranges_this_month=this month
|
||||
daterangepicker_ranges_last_month=last month
|
||||
daterangepicker_ranges_recent_week=recent one week
|
||||
daterangepicker_ranges_recent_month=recent one month
|
||||
daterangepicker_custom_name=custom
|
||||
daterangepicker_custom_starttime=start time
|
||||
daterangepicker_custom_endtime=end time
|
||||
daterangepicker_custom_daysofweek=Sun,Mon,Tue,Wed,Thu,Fri,Sat
|
||||
daterangepicker_custom_monthnames=Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec
|
||||
|
||||
## dataTable
|
||||
dataTable_sProcessing=processing...
|
||||
dataTable_sLengthMenu= _MENU_ records per page
|
||||
dataTable_sZeroRecords=No matching results
|
||||
dataTable_sInfo=page _PAGE_ ( Total _PAGES_ pages,_TOTAL_ records )
|
||||
dataTable_sInfoEmpty=No Record
|
||||
dataTable_sInfoFiltered=(Filtered by _MAX_ results)
|
||||
dataTable_sSearch=Search
|
||||
dataTable_sEmptyTable=Table data is empty
|
||||
dataTable_sLoadingRecords=Loading...
|
||||
dataTable_sFirst=FIRST PAGE
|
||||
dataTable_sPrevious=Previous Page
|
||||
dataTable_sNext=Next Page
|
||||
dataTable_sLast=LAST PAGE
|
||||
dataTable_sSortAscending=: Rank this column in ascending order
|
||||
dataTable_sSortDescending=: Rank this column in descending order
|
||||
|
||||
## login
|
||||
login_btn=Login
|
||||
login_remember_me=Remember Me
|
||||
login_username_placeholder=Please enter username
|
||||
login_password_placeholder=Please enter password
|
||||
login_username_empty=Please enter username
|
||||
login_username_lt_4=Username length should not be less than 4
|
||||
login_password_empty=Please enter password
|
||||
login_password_lt_4=Password length should not be less than 4
|
||||
login_success=Login success
|
||||
login_fail=Login fail
|
||||
login_param_empty=Username or password is empty
|
||||
login_param_invalid=Username or password error
|
||||
|
||||
## logout
|
||||
logout_btn=Logout
|
||||
logout_confirm=Confirm logout?
|
||||
logout_success=Logout success
|
||||
logout_fail=Logout fail
|
||||
|
||||
## change pwd
|
||||
change_pwd=Change password
|
||||
change_pwd_suc_to_logout=Change password successful, about to log out login
|
||||
change_pwd_field_newpwd=new password
|
||||
|
||||
## dashboard
|
||||
job_dashboard_name=Run report
|
||||
job_dashboard_job_num=Job number
|
||||
job_dashboard_job_num_tip=The number of tasks running in the scheduling center
|
||||
job_dashboard_trigger_num=trigger number
|
||||
job_dashboard_trigger_num_tip=The number of trigger record scheduled by the scheduling center
|
||||
job_dashboard_jobgroup_num=Executor number
|
||||
job_dashboard_jobgroup_num_tip=The number of online executor machines perceived by the scheduling center
|
||||
job_dashboard_report=Scheduling report
|
||||
job_dashboard_report_loaddata_fail=Scheduling report load data error
|
||||
job_dashboard_date_report=Date distribution
|
||||
job_dashboard_rate_report=Percentage distribution
|
||||
|
||||
## job info
|
||||
jobinfo_name=Job Manage
|
||||
jobinfo_job=Job
|
||||
jobinfo_field_add=Add Job
|
||||
jobinfo_field_update=Edit Job
|
||||
jobinfo_field_id=Job ID
|
||||
jobinfo_field_jobgroup=Executor
|
||||
jobinfo_field_jobproject=job Project
|
||||
jobinfo_field_jobdesc=Job description
|
||||
jobinfo_field_jobJSON=Job JSON
|
||||
jobinfo_field_timeout=Job timeout period
|
||||
jobinfo_field_gluetype=GLUE Type
|
||||
jobinfo_field_executorparam=Param
|
||||
jobinfo_field_cron_invalid=The Cron is illegal
|
||||
jobinfo_field_cron_never_fire=The Cron will never fire
|
||||
jobinfo_field_author=Author
|
||||
jobinfo_field_alarmemail=Alarm email
|
||||
jobinfo_field_alarmemail_placeholder=Please enter alarm mail, if there are more than one comma separated
|
||||
jobinfo_field_executorRouteStrategy=Route Strategy
|
||||
jobinfo_field_childJobId=Child Job ID
|
||||
jobinfo_field_childJobId_placeholder=Please enter the Child job ID, if there are more than one comma separated
|
||||
jobinfo_field_executorBlockStrategy=Block Strategy
|
||||
jobinfo_field_executorFailRetryCount=Fail Retry Count
|
||||
jobinfo_field_executorFailRetryCount_placeholder=Fail Retry Count. effect if greater than zero
|
||||
jobinfo_script_location=Script location
|
||||
jobinfo_shard_index=Shard index
|
||||
jobinfo_shard_total=Shard total
|
||||
jobinfo_opt_stop=Stop
|
||||
jobinfo_opt_start=Start
|
||||
jobinfo_opt_log=Query Log
|
||||
jobinfo_opt_run=Run Once
|
||||
jobinfo_opt_registryinfo=Registry Info
|
||||
jobinfo_opt_next_time=Next trigger time
|
||||
jobinfo_glue_remark=Resource Remark
|
||||
jobinfo_glue_remark_limit=Resource Remark length is limited to 4~100
|
||||
jobinfo_glue_rollback=Version Backtrack
|
||||
jobinfo_glue_jobid_invalid=Job ID is illegal
|
||||
jobinfo_glue_gluetype_invalid=The job is not GLUE Type
|
||||
jobinfo_field_executorTimeout_placeholder=Job Timeout period,in seconds. effect if greater than zero
|
||||
|
||||
## job log
|
||||
joblog_name=Trigger Log
|
||||
joblog_status=Status
|
||||
joblog_status_all=All
|
||||
joblog_status_suc=Success
|
||||
joblog_status_fail=Fail
|
||||
joblog_status_running=Running
|
||||
joblog_field_triggerTime=Trigger Time
|
||||
joblog_field_triggerCode=Trigger Result
|
||||
joblog_field_triggerMsg=Trigger Msg
|
||||
joblog_field_handleTime=Handle Time
|
||||
joblog_field_handleCode=Handle Result
|
||||
joblog_field_handleMsg=Trigger Msg
|
||||
joblog_field_executorAddress=Executor Address
|
||||
joblog_clean=Clean
|
||||
joblog_clean_log=Clean Log
|
||||
joblog_clean_type=Clean Type
|
||||
joblog_clean_type_1=Clean up log data a month ago
|
||||
joblog_clean_type_2=Clean up log data three month ago
|
||||
joblog_clean_type_3=Clean up log data six month ago
|
||||
joblog_clean_type_4=Clean up log data a year ago
|
||||
joblog_clean_type_5=Clean up log data a thousand record ago
|
||||
joblog_clean_type_6=Clean up log data ten thousand record ago
|
||||
joblog_clean_type_7=Clean up log data thirty thousand record ago
|
||||
joblog_clean_type_8=Clean up log data hundred thousand record ago
|
||||
joblog_clean_type_9=Clean up all log data
|
||||
joblog_clean_type_invalid=Clean type is illegal
|
||||
joblog_handleCode_200=Success
|
||||
joblog_handleCode_500=Fail
|
||||
joblog_handleCode_502=Timeout
|
||||
joblog_kill_log=Kill Job
|
||||
joblog_kill_log_limit=Trigger Fail, can not kill job
|
||||
joblog_kill_log_byman=Manual operation to active kill job
|
||||
joblog_rolling_log=Rolling log
|
||||
joblog_rolling_log_refresh=Refresh
|
||||
joblog_rolling_log_triggerfail=The job trigger fail, can not view the rolling log
|
||||
joblog_rolling_log_failoften=The request for the Rolling log is terminated, the number of failed requests exceeds the limit, Reload the log on the refresh page
|
||||
joblog_logid_invalid=Log ID is illegal
|
||||
|
||||
## job group
|
||||
jobgroup_name=Executor Manage
|
||||
jobgroup_list=Executor List
|
||||
jobgroup_add=Add Executor
|
||||
jobgroup_edit=Edit Executor
|
||||
jobgroup_del=Delete Executor
|
||||
jobgroup_field_order=Order
|
||||
jobgroup_field_title=Title
|
||||
jobgroup_field_addressType=Registry Type
|
||||
jobgroup_field_addressType_0=Automatic registration
|
||||
jobgroup_field_addressType_1=Manual registration
|
||||
jobgroup_field_addressType_limit=Manually registration type, the machine address must not be empty
|
||||
jobgroup_field_registryList=machine address
|
||||
jobgroup_field_registryList_invalid=registry machine address is illegal
|
||||
jobgroup_field_registryList_placeholder=Please enter the machine address, if there are more than one comma separated
|
||||
jobgroup_field_appName_limit=Limit the beginning of a lowercase letter, consists of lowercase letters、number and hyphen.
|
||||
jobgroup_field_appName_length=AppName length is limited to 4~64
|
||||
jobgroup_field_title_length=Title length is limited to 4~12
|
||||
jobgroup_field_order_digits=Please enter a positive integer
|
||||
jobgroup_field_orderrange=Order is limited to 1~1000
|
||||
jobgroup_del_limit_0=Refuse to delete, the executor is being used
|
||||
jobgroup_del_limit_1=Refuses to delete, the system retains at least one executor
|
||||
jobgroup_empty=There is no valid executor. Please contact the administrator
|
||||
|
||||
## job conf
|
||||
jobconf_block_SERIAL_EXECUTION=Serial execution
|
||||
jobconf_block_DISCARD_LATER=Discard Later
|
||||
jobconf_block_COVER_EARLY=Cover Early
|
||||
jobconf_route_first=First
|
||||
jobconf_route_last=Last
|
||||
jobconf_route_round=Round
|
||||
jobconf_route_random=Random
|
||||
jobconf_route_consistenthash=Consistent Hash
|
||||
jobconf_route_lfu=Least Frequently Used
|
||||
jobconf_route_lru=Least Recently Used
|
||||
jobconf_route_failover=Failover
|
||||
jobconf_route_busyover=Busyover
|
||||
jobconf_route_shard=Sharding Broadcast
|
||||
jobconf_idleBeat=Idle check
|
||||
jobconf_beat=Heartbeats
|
||||
jobconf_monitor=Task Scheduling Center monitor alarm
|
||||
jobconf_monitor_detail=monitor alarm details
|
||||
jobconf_monitor_alarm_title=Alarm Type
|
||||
jobconf_monitor_alarm_type=Trigger Fail
|
||||
jobconf_monitor_alarm_content=Alarm Content
|
||||
jobconf_trigger_admin_adress=Trigger machine address
|
||||
jobconf_trigger_exe_regtype=Execotor-Registry Type
|
||||
jobconf_trigger_exe_regaddress=Execotor-Registry Address
|
||||
jobconf_trigger_address_empty=Trigger Fail:registry address is empty
|
||||
jobconf_trigger_run=Trigger Job
|
||||
jobconf_trigger_child_run=Trigger child job
|
||||
jobconf_callback_child_msg1={0}/{1} [Job ID={2}], Trigger {3}, Trigger msg: {4} <br>
|
||||
jobconf_callback_child_msg2={0}/{1} [Job ID={2}], Trigger Fail, Trigger msg: Job ID is illegal <br>
|
||||
jobconf_trigger_type=Job trigger type
|
||||
jobconf_trigger_type_cron=Cron trigger
|
||||
jobconf_trigger_type_manual=Manual trigger
|
||||
jobconf_trigger_type_parent=Parent job trigger
|
||||
jobconf_trigger_type_api=Api trigger
|
||||
jobconf_trigger_type_retry=Fail retry trigger
|
||||
|
||||
## user
|
||||
user_manage=User Manage
|
||||
user_username=Username
|
||||
user_password=Password
|
||||
user_role=Role
|
||||
user_role_admin=Admin User
|
||||
user_role_normal=Normal User
|
||||
user_permission=Permission
|
||||
user_add=Add User
|
||||
user_update=Edit User
|
||||
user_username_repeat=Username Repeat
|
||||
user_username_valid=Restrictions start with a lowercase letter and consist of lowercase letters and Numbers
|
||||
user_password_update_placeholder=Please input password, empty means not update
|
||||
user_update_loginuser_limit=Operation of current login account is not allowed
|
||||
|
||||
## help
|
||||
job_help=Tutorial
|
||||
job_help_document=Official Document
|
||||
@@ -0,0 +1,260 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!-- Created with Jaspersoft Studio version 6.9.0.final using JasperReports Library version 6.9.0-cb8f9004be492ccc537180b49c026951f4220bf3 -->
|
||||
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="Blank_A4" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="38344e02-d6c7-4511-b933-c2fd86a66ab6">
|
||||
<property name="com.jaspersoft.studio.data.defaultdataadapter" value="One Empty Record"/>
|
||||
<style name="Table_TH" mode="Opaque" backcolor="#F0F8FF">
|
||||
<box>
|
||||
<pen lineWidth="0.5" lineColor="#000000"/>
|
||||
<topPen lineWidth="0.5" lineColor="#000000"/>
|
||||
<leftPen lineWidth="0.5" lineColor="#000000"/>
|
||||
<bottomPen lineWidth="0.5" lineColor="#000000"/>
|
||||
<rightPen lineWidth="0.5" lineColor="#000000"/>
|
||||
</box>
|
||||
</style>
|
||||
<style name="Table_CH" mode="Opaque" backcolor="#BFE1FF">
|
||||
<box>
|
||||
<pen lineWidth="0.5" lineColor="#000000"/>
|
||||
<topPen lineWidth="0.5" lineColor="#000000"/>
|
||||
<leftPen lineWidth="0.5" lineColor="#000000"/>
|
||||
<bottomPen lineWidth="0.5" lineColor="#000000"/>
|
||||
<rightPen lineWidth="0.5" lineColor="#000000"/>
|
||||
</box>
|
||||
</style>
|
||||
<style name="Table_TD" mode="Opaque" backcolor="#FFFFFF">
|
||||
<box>
|
||||
<pen lineWidth="0.5" lineColor="#000000"/>
|
||||
<topPen lineWidth="0.5" lineColor="#000000"/>
|
||||
<leftPen lineWidth="0.5" lineColor="#000000"/>
|
||||
<bottomPen lineWidth="0.5" lineColor="#000000"/>
|
||||
<rightPen lineWidth="0.5" lineColor="#000000"/>
|
||||
</box>
|
||||
</style>
|
||||
<style name="Table 1_TH" mode="Opaque" backcolor="#F0F8FF">
|
||||
<box>
|
||||
<pen lineWidth="0.5" lineColor="#000000"/>
|
||||
<topPen lineWidth="0.5" lineColor="#000000"/>
|
||||
<leftPen lineWidth="0.5" lineColor="#000000"/>
|
||||
<bottomPen lineWidth="0.5" lineColor="#000000"/>
|
||||
<rightPen lineWidth="0.5" lineColor="#000000"/>
|
||||
</box>
|
||||
</style>
|
||||
<style name="Table 1_CH" mode="Opaque" backcolor="#BFE1FF">
|
||||
<box>
|
||||
<pen lineWidth="0.5" lineColor="#000000"/>
|
||||
<topPen lineWidth="0.5" lineColor="#000000"/>
|
||||
<leftPen lineWidth="0.5" lineColor="#000000"/>
|
||||
<bottomPen lineWidth="0.5" lineColor="#000000"/>
|
||||
<rightPen lineWidth="0.5" lineColor="#000000"/>
|
||||
</box>
|
||||
</style>
|
||||
<style name="Table 1_TD" mode="Opaque" backcolor="#FFFFFF">
|
||||
<box>
|
||||
<pen lineWidth="0.5" lineColor="#000000"/>
|
||||
<topPen lineWidth="0.5" lineColor="#000000"/>
|
||||
<leftPen lineWidth="0.5" lineColor="#000000"/>
|
||||
<bottomPen lineWidth="0.5" lineColor="#000000"/>
|
||||
<rightPen lineWidth="0.5" lineColor="#000000"/>
|
||||
</box>
|
||||
</style>
|
||||
<subDataset name="teachDataset" uuid="61f09c4c-6208-4e8e-91ec-58ea808b15d2">
|
||||
<queryString>
|
||||
<![CDATA[]]>
|
||||
</queryString>
|
||||
<field name="name" class="java.lang.String"/>
|
||||
<field name="job" class="java.lang.String"/>
|
||||
</subDataset>
|
||||
<subDataset name="studentDataset" uuid="a4321f7a-4629-42f5-86ea-942290d71273">
|
||||
<queryString>
|
||||
<![CDATA[]]>
|
||||
</queryString>
|
||||
<field name="name" class="java.lang.String"/>
|
||||
<field name="age" class="java.lang.String"/>
|
||||
<field name="sex" class="java.lang.String"/>
|
||||
</subDataset>
|
||||
<parameter name="teachList" class="java.util.List"/>
|
||||
<queryString>
|
||||
<![CDATA[]]>
|
||||
</queryString>
|
||||
<field name="grade" class="java.lang.String"/>
|
||||
<field name="studentList" class="java.util.List"/>
|
||||
<background>
|
||||
<band splitType="Stretch"/>
|
||||
</background>
|
||||
<title>
|
||||
<band height="100" splitType="Stretch">
|
||||
<staticText>
|
||||
<reportElement x="152" y="30" width="250" height="30" uuid="8bf85237-ab47-4d67-a6cb-9d8ba52749d7"/>
|
||||
<textElement textAlignment="Center" verticalAlignment="Middle">
|
||||
<font size="18" isBold="true"/>
|
||||
</textElement>
|
||||
<text><![CDATA[this is a title]]></text>
|
||||
</staticText>
|
||||
</band>
|
||||
</title>
|
||||
<pageHeader>
|
||||
<band height="110" splitType="Stretch">
|
||||
<componentElement>
|
||||
<reportElement x="10" y="40" width="410" height="60" uuid="2e1994ce-15a4-42c5-ac3f-67e6fb6c4a4e">
|
||||
<property name="com.jaspersoft.studio.layout" value="com.jaspersoft.studio.editor.layout.VerticalRowLayout"/>
|
||||
<property name="com.jaspersoft.studio.table.style.table_header" value="Table_TH"/>
|
||||
<property name="com.jaspersoft.studio.table.style.column_header" value="Table_CH"/>
|
||||
<property name="com.jaspersoft.studio.table.style.detail" value="Table_TD"/>
|
||||
</reportElement>
|
||||
<jr:table xmlns:jr="http://jasperreports.sourceforge.net/jasperreports/components" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/components http://jasperreports.sourceforge.net/xsd/components.xsd">
|
||||
<datasetRun subDataset="teachDataset" uuid="c9528920-36a7-4ff0-8bae-17543c2d6e43">
|
||||
<dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{teachList})]]></dataSourceExpression>
|
||||
</datasetRun>
|
||||
<jr:column width="200" uuid="c288893e-544d-42ee-9ace-4561619ee17a">
|
||||
<jr:columnHeader style="Table_CH" height="30">
|
||||
<staticText>
|
||||
<reportElement x="0" y="0" width="200" height="30" uuid="1eb4a56e-1c0b-4826-bb71-b087090b5405"/>
|
||||
<textElement>
|
||||
<font fontName="微软雅黑" size="16"/>
|
||||
</textElement>
|
||||
<text><![CDATA[name]]></text>
|
||||
</staticText>
|
||||
</jr:columnHeader>
|
||||
<jr:detailCell style="Table_TD" height="30">
|
||||
<textField>
|
||||
<reportElement x="0" y="0" width="200" height="30" uuid="3b533ed6-eaf9-45a9-a8d8-83b5bec89a40"/>
|
||||
<textElement>
|
||||
<font fontName="微软雅黑" size="16"/>
|
||||
</textElement>
|
||||
<textFieldExpression><![CDATA[$F{name}]]></textFieldExpression>
|
||||
</textField>
|
||||
</jr:detailCell>
|
||||
</jr:column>
|
||||
<jr:column width="200" uuid="05c82473-70e0-4ae1-b62e-1d6c56f6526e">
|
||||
<jr:columnHeader style="Table_CH" height="30">
|
||||
<staticText>
|
||||
<reportElement x="0" y="0" width="200" height="30" uuid="0c644eb6-98e0-4313-a6e2-f66e3dfa1c7b"/>
|
||||
<textElement>
|
||||
<font fontName="微软雅黑" size="16"/>
|
||||
</textElement>
|
||||
<text><![CDATA[job]]></text>
|
||||
</staticText>
|
||||
</jr:columnHeader>
|
||||
<jr:detailCell style="Table_TD" height="30">
|
||||
<textField>
|
||||
<reportElement x="0" y="0" width="200" height="30" uuid="c93b1e9c-a2c0-4057-b78f-9f7128f00f82"/>
|
||||
<textElement>
|
||||
<font fontName="微软雅黑" size="16"/>
|
||||
</textElement>
|
||||
<textFieldExpression><![CDATA[$F{job}]]></textFieldExpression>
|
||||
</textField>
|
||||
</jr:detailCell>
|
||||
</jr:column>
|
||||
</jr:table>
|
||||
</componentElement>
|
||||
<staticText>
|
||||
<reportElement x="10" y="5" width="120" height="30" uuid="74f13250-da6c-4161-82a9-1c78ad0cc711"/>
|
||||
<textElement>
|
||||
<font fontName="微软雅黑" size="18"/>
|
||||
</textElement>
|
||||
<text><![CDATA[教师信息:]]></text>
|
||||
</staticText>
|
||||
</band>
|
||||
</pageHeader>
|
||||
<detail>
|
||||
<band height="124" splitType="Stretch">
|
||||
<componentElement>
|
||||
<reportElement x="10" y="48" width="555" height="70" uuid="3978dd9b-61f1-4d9f-a193-a9440617a405">
|
||||
<property name="com.jaspersoft.studio.layout" value="com.jaspersoft.studio.editor.layout.VerticalRowLayout"/>
|
||||
<property name="com.jaspersoft.studio.table.style.table_header" value="Table 1_TH"/>
|
||||
<property name="com.jaspersoft.studio.table.style.column_header" value="Table 1_CH"/>
|
||||
<property name="com.jaspersoft.studio.table.style.detail" value="Table 1_TD"/>
|
||||
</reportElement>
|
||||
<jr:table xmlns:jr="http://jasperreports.sourceforge.net/jasperreports/components" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/components http://jasperreports.sourceforge.net/xsd/components.xsd">
|
||||
<datasetRun subDataset="studentDataset" uuid="1b899de9-4598-4e98-bb1d-5ccca8806500">
|
||||
<dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{studentList})]]></dataSourceExpression>
|
||||
</datasetRun>
|
||||
<jr:column width="150" uuid="d1d6b41e-2f6c-448e-8e69-91d90af3ef35">
|
||||
<jr:columnHeader style="Table 1_CH" height="30">
|
||||
<staticText>
|
||||
<reportElement x="0" y="0" width="150" height="30" uuid="d4afdf7e-c21f-465d-aa89-b7a5bd6cfbba"/>
|
||||
<textElement>
|
||||
<font fontName="微软雅黑" size="16"/>
|
||||
</textElement>
|
||||
<text><![CDATA[name]]></text>
|
||||
</staticText>
|
||||
</jr:columnHeader>
|
||||
<jr:detailCell style="Table 1_TD" height="30">
|
||||
<textField>
|
||||
<reportElement x="0" y="0" width="150" height="30" uuid="1125b5da-51c5-4788-862e-c1bcf44ba925"/>
|
||||
<textElement>
|
||||
<font fontName="微软雅黑" size="16"/>
|
||||
</textElement>
|
||||
<textFieldExpression><![CDATA[$F{name}]]></textFieldExpression>
|
||||
</textField>
|
||||
</jr:detailCell>
|
||||
</jr:column>
|
||||
<jr:column width="150" uuid="c2436b06-a277-4734-b20f-9267abd4fbc1">
|
||||
<jr:columnHeader style="Table 1_CH" height="30">
|
||||
<staticText>
|
||||
<reportElement x="0" y="0" width="150" height="30" uuid="c96df6f3-a619-40c1-800b-7c2da2d2b213"/>
|
||||
<textElement>
|
||||
<font fontName="微软雅黑" size="16"/>
|
||||
</textElement>
|
||||
<text><![CDATA[age]]></text>
|
||||
</staticText>
|
||||
</jr:columnHeader>
|
||||
<jr:detailCell style="Table 1_TD" height="30">
|
||||
<textField>
|
||||
<reportElement x="0" y="0" width="150" height="30" uuid="5f2b3646-1123-483a-ad59-88861acd135a"/>
|
||||
<textElement>
|
||||
<font fontName="微软雅黑" size="16"/>
|
||||
</textElement>
|
||||
<textFieldExpression><![CDATA[$F{age}]]></textFieldExpression>
|
||||
</textField>
|
||||
</jr:detailCell>
|
||||
</jr:column>
|
||||
<jr:column width="150" uuid="deaa1801-4fde-4772-aec8-51d400cd1586">
|
||||
<jr:columnHeader style="Table 1_CH" height="30">
|
||||
<staticText>
|
||||
<reportElement x="0" y="0" width="150" height="30" uuid="7c1afdae-8253-47c4-b9bd-5109db184890"/>
|
||||
<textElement>
|
||||
<font fontName="微软雅黑" size="16"/>
|
||||
</textElement>
|
||||
<text><![CDATA[sex]]></text>
|
||||
</staticText>
|
||||
</jr:columnHeader>
|
||||
<jr:detailCell style="Table 1_TD" height="30">
|
||||
<textField>
|
||||
<reportElement x="0" y="0" width="150" height="30" uuid="85644613-99dc-4f84-ae2e-079a67fbebc5"/>
|
||||
<textElement>
|
||||
<font fontName="微软雅黑" size="16"/>
|
||||
</textElement>
|
||||
<textFieldExpression><![CDATA[$F{sex}]]></textFieldExpression>
|
||||
</textField>
|
||||
</jr:detailCell>
|
||||
</jr:column>
|
||||
</jr:table>
|
||||
</componentElement>
|
||||
<textField>
|
||||
<reportElement x="10" y="10" width="180" height="30" uuid="ee364a60-3c8a-46b4-80f1-7dd628c0085e"/>
|
||||
<textElement>
|
||||
<font fontName="微软雅黑" size="18"/>
|
||||
</textElement>
|
||||
<textFieldExpression><![CDATA[$F{grade}]]></textFieldExpression>
|
||||
</textField>
|
||||
</band>
|
||||
</detail>
|
||||
<pageFooter>
|
||||
<band height="52" splitType="Stretch">
|
||||
<textField>
|
||||
<reportElement x="360" y="12" width="87" height="30" uuid="ab37f0ef-5d4e-42d4-b86e-e1b0196951d3"/>
|
||||
<textElement textAlignment="Right">
|
||||
<font size="14"/>
|
||||
</textElement>
|
||||
<textFieldExpression><![CDATA["Page " + $V{PAGE_NUMBER}]]></textFieldExpression>
|
||||
</textField>
|
||||
<textField evaluationTime="Report">
|
||||
<reportElement x="447" y="12" width="83" height="30" uuid="e0459980-6d52-4d16-adda-b63d5bc4423b"/>
|
||||
<textElement textAlignment="Left">
|
||||
<font size="14"/>
|
||||
</textElement>
|
||||
<textFieldExpression><![CDATA[" of " + $V{PAGE_NUMBER}]]></textFieldExpression>
|
||||
</textField>
|
||||
</band>
|
||||
</pageFooter>
|
||||
</jasperReport>
|
||||
@@ -0,0 +1,4 @@
|
||||
# If you use SLF4J. First, you need to tell log4jdbc-log4j2 that you want to use the SLF4J logger
|
||||
log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator
|
||||
log4jdbc.auto.load.popular.drivers=false
|
||||
log4jdbc.drivers=com.mysql.cj.jdbc.Driver
|
||||
@@ -0,0 +1,78 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<configuration scan="true" scanPeriod="60 seconds" debug="false">
|
||||
<springProperty scope="context" name="springAppName" source="spring.application.name"/>
|
||||
<property name="log.path" value="logs/service-system"/>
|
||||
<property name="log.maxHistory" value="15"/>
|
||||
<property name="log.totalSizeCap" value="500MB"/>
|
||||
<property name="log.maxFileSize" value="10MB"/>
|
||||
<property name="log.colorPattern"
|
||||
value="%magenta(%d{yyyy-MM-dd HH:mm:ss}) %highlight(%-5level) %boldCyan(${springAppName:-}) %yellow(%thread) %green(%logger) %msg%n"/>
|
||||
<property name="log.pattern" value="%d{yyyy-MM-dd HH:mm:ss} %-5level ${springAppName:-} %thread %logger %msg%n"/>
|
||||
|
||||
<!--输出到控制台-->
|
||||
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
|
||||
<encoder>
|
||||
<pattern>${log.colorPattern}</pattern>
|
||||
</encoder>
|
||||
</appender>
|
||||
|
||||
<!--输出到文件-->
|
||||
<!-- RollingFileAppender:滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件 -->
|
||||
<!-- 以下的大概意思是:1.先按日期存日志,日期变了,将前一天的日志文件名重命名为XXX%日期%索引,新的日志仍然是project_info.log -->
|
||||
<!-- 2.如果日期没有发生变化,但是当前日志的文件大小超过10MB时,对当前日志进行分割 重命名-->
|
||||
<appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||
<!--日志文件路径和名称-->
|
||||
<File>${log.path}/info/info.log</File>
|
||||
<!--是否追加到文件末尾,默认为true-->
|
||||
<append>true</append>
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
|
||||
<!-- 日志文件的名字会根据fileNamePattern的值,每隔一段时间改变一次 -->
|
||||
<!-- 文件名:logs/project_info.2017-12-05.0.log -->
|
||||
<!-- 注意:SizeAndTimeBasedRollingPolicy中 %i和%d令牌都是强制性的,必须存在,要不会报错 -->
|
||||
<fileNamePattern>${log.path}/info/info.%d.%i.log</fileNamePattern>
|
||||
<!-- 每产生一个日志文件,该日志文件的保存期限为30天, ps:maxHistory的单位是根据fileNamePattern中的翻转策略自动推算出来的,例如上面选用了yyyy-MM-dd,则单位为天
|
||||
如果上面选用了yyyy-MM,则单位为月,另外上面的单位默认为yyyy-MM-dd-->
|
||||
<MaxHistory>${log.maxHistory}</MaxHistory>
|
||||
<!-- 每个日志文件到2mb的时候开始切分,最多保留30天,但最大到500MB,哪怕没到30天也要删除多余的日志 -->
|
||||
<totalSizeCap>${log.totalSizeCap}</totalSizeCap>
|
||||
<!-- maxFileSize:这是活动文件的大小,默认值是10MB,测试时可改成5KB看效果 -->
|
||||
<maxFileSize>${log.maxFileSize}</maxFileSize>
|
||||
</rollingPolicy>
|
||||
<encoder>
|
||||
<pattern>${log.pattern}</pattern>
|
||||
</encoder>
|
||||
<filter class="ch.qos.logback.classic.filter.LevelFilter">
|
||||
<level>INFO</level>
|
||||
<onMatch>ACCEPT</onMatch>
|
||||
<onMismatch>DENY</onMismatch>
|
||||
</filter>
|
||||
</appender>
|
||||
|
||||
<appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||
<File>${log.path}/error/error.log</File>
|
||||
<append>true</append>
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
|
||||
<fileNamePattern>${log.path}/error/error.%d.%i.log</fileNamePattern>
|
||||
<MaxHistory>${log.maxHistory}</MaxHistory>
|
||||
<totalSizeCap>${log.totalSizeCap}</totalSizeCap>
|
||||
<maxFileSize>${log.maxFileSize}</maxFileSize>
|
||||
</rollingPolicy>
|
||||
<encoder>
|
||||
<pattern>${log.pattern}</pattern>
|
||||
</encoder>
|
||||
<filter class="ch.qos.logback.classic.filter.LevelFilter">
|
||||
<level>ERROR</level>
|
||||
<onMatch>ACCEPT</onMatch>
|
||||
<onMismatch>DENY</onMismatch>
|
||||
</filter>
|
||||
</appender>
|
||||
|
||||
<root level="debug">
|
||||
<appender-ref ref="console"/>
|
||||
</root>
|
||||
|
||||
<root level="info">
|
||||
<appender-ref ref="file_info"/>
|
||||
<appender-ref ref="file_error"/>
|
||||
</root>
|
||||
</configuration>
|
||||
@@ -0,0 +1,45 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<configuration scan="true" scanPeriod="30 seconds" debug="false">
|
||||
<contextName>studio</contextName>
|
||||
<property name="log.charset" value="utf-8" />
|
||||
<property name="log.pattern" value="%contextName- %red(%d{yyyy-MM-dd HH:mm:ss}) %green([%thread]) %highlight(%-5level) %boldMagenta(%logger{36}) - %msg%n" />
|
||||
|
||||
<!--输出到控制台-->
|
||||
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
|
||||
<encoder>
|
||||
<pattern>${log.pattern}</pattern>
|
||||
<charset>${log.charset}</charset>
|
||||
</encoder>
|
||||
</appender>
|
||||
|
||||
<!--普通日志输出到控制台-->
|
||||
<root level="info">
|
||||
<appender-ref ref="console" />
|
||||
</root>
|
||||
|
||||
<!--监控sql日志输出,如需监控 Sql 打印,请设置为 INFO -->
|
||||
<logger name="jdbc.sqlonly" level="ERROR" additivity="false">
|
||||
<appender-ref ref="console" />
|
||||
</logger>
|
||||
|
||||
<logger name="jdbc.resultset" level="ERROR" additivity="false">
|
||||
<appender-ref ref="console" />
|
||||
</logger>
|
||||
|
||||
<!-- 如想看到表格数据,将OFF改为INFO -->
|
||||
<logger name="jdbc.resultsettable" level="OFF" additivity="false">
|
||||
<appender-ref ref="console" />
|
||||
</logger>
|
||||
|
||||
<logger name="jdbc.connection" level="OFF" additivity="false">
|
||||
<appender-ref ref="console" />
|
||||
</logger>
|
||||
|
||||
<logger name="jdbc.sqltiming" level="OFF" additivity="false">
|
||||
<appender-ref ref="console" />
|
||||
</logger>
|
||||
|
||||
<logger name="jdbc.audit" level="OFF" additivity="false">
|
||||
<appender-ref ref="console" />
|
||||
</logger>
|
||||
</configuration>
|
||||
@@ -0,0 +1,25 @@
|
||||
module.log=com.p6spy.engine.logging.P6LogFactory,com.p6spy.engine.outage.P6OutageFactory
|
||||
# 自定义日志打印
|
||||
logMessageFormat=com.baomidou.mybatisplus.extension.p6spy.P6SpyLogger
|
||||
#日志输出到控制台
|
||||
appender=com.baomidou.mybatisplus.extension.p6spy.StdoutLogger
|
||||
# 使用日志系统记录 sql
|
||||
#appender=com.p6spy.engine.spy.appender.Slf4JLogger
|
||||
# 设置 p6spy driver 代理
|
||||
deregisterdrivers=true
|
||||
# 取消JDBC URL前缀
|
||||
useprefix=true
|
||||
# 配置记录 Log 例外,可去掉的结果集有error,info,batch,debug,statement,commit,rollback,result,resultset.
|
||||
excludecategories=info,debug,result,batch,resultset
|
||||
# 日期格式
|
||||
dateformat=yyyy-MM-dd HH:mm:ss
|
||||
# 实际驱动可多个
|
||||
#driverlist=org.h2.Driver
|
||||
# 是否开启慢SQL记录
|
||||
outagedetection=true
|
||||
# 慢SQL记录标准 2 秒
|
||||
outagedetectioninterval=2
|
||||
# 开启过滤
|
||||
filter=true
|
||||
# 配置不打印的内容
|
||||
exclude=select 1
|
||||
@@ -0,0 +1,48 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
|
||||
<style>
|
||||
@page {
|
||||
margin: 0;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body style="margin: 0px;
|
||||
padding: 0px;
|
||||
font: 100% SimSun, Microsoft YaHei, Times New Roman, Verdana, Arial, Helvetica, sans-serif;
|
||||
color: #000;">
|
||||
<div style="height: auto;
|
||||
width: 820px;
|
||||
min-width: 820px;
|
||||
margin: 0 auto;
|
||||
margin-top: 20px;
|
||||
border: 1px solid #eee;">
|
||||
<div style="padding: 10px;padding-bottom: 0px;">
|
||||
<p style="margin-bottom: 10px;padding-bottom: 0px;">尊敬的用户,您好:</p>
|
||||
<p style="text-indent: 2em; margin-bottom: 10px;">您正在申请邮箱验证,您的验证码为:</p>
|
||||
<p style="text-align: center;
|
||||
font-family: Times New Roman;
|
||||
font-size: 22px;
|
||||
color: #C60024;
|
||||
padding: 20px 0px;
|
||||
margin-bottom: 10px;
|
||||
font-weight: bold;
|
||||
background: #ebebeb;">${code}</p>
|
||||
<div class="foot-hr hr" style="margin: 0 auto;
|
||||
z-index: 111;
|
||||
width: 800px;
|
||||
margin-top: 30px;
|
||||
border-top: 1px solid #DA251D;">
|
||||
</div>
|
||||
<div style="text-align: center;
|
||||
font-size: 12px;
|
||||
padding: 20px 0px;
|
||||
font-family: Microsoft YaHei;">
|
||||
Copyright ©${.now?string("yyyy")} <a hover="color: #DA251D;" style="color: #999;" href="https://github.com/alldatacenter/alldata" target="_blank">AllData</a> 科学护城河 All Rights Reserved.
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,69 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
|
||||
<style>
|
||||
@page {
|
||||
margin: 0;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body style="margin: 0px;
|
||||
padding: 0px;
|
||||
font: 100% SimSun, Microsoft YaHei, Times New Roman, Verdana, Arial, Helvetica, sans-serif;
|
||||
color: #000;">
|
||||
<div style="height: auto;
|
||||
margin: 0 auto;
|
||||
margin-top: 20px;
|
||||
padding: 20px;
|
||||
border: 1px solid #eee;">
|
||||
<div>
|
||||
<p style="margin-bottom: 10px;">任务信息:</p>
|
||||
<table style="border-collapse: collapse;">
|
||||
<tr>
|
||||
<th style="padding: .65em;background: #666;border: 1px solid #777;color: #fff;">任务名称</th>
|
||||
<th style="padding: .65em;background: #666;border: 1px solid #777;color: #fff;">Bean名称</th>
|
||||
<th style="padding: .65em;background: #666;border: 1px solid #777;color: #fff;">执行方法</th>
|
||||
<th style="padding: .65em;background: #666;border: 1px solid #777;color: #fff;">参数内容</th>
|
||||
<th style="padding: .65em;background: #666;border: 1px solid #777;color: #fff;">Cron表达式</th>
|
||||
<th style="padding: .65em;background: #666;border: 1px solid #777;color: #fff;">描述内容</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="padding: .65em;border: 1px solid#777;">${task.jobName}</td>
|
||||
<td style="padding: .65em;border: 1px solid#777;">${task.beanName}</td>
|
||||
<td style="padding: .65em;border: 1px solid#777;">${task.methodName}</td>
|
||||
<td style="padding: .65em;border: 1px solid#777;">${(task.params)!""}</td>
|
||||
<td style="padding: .65em;border: 1px solid#777;">${task.cronExpression}</td>
|
||||
<td style="padding: .65em;border: 1px solid#777;">${(task.description)!""}</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div>
|
||||
<p style="margin-bottom: 10px;">异常信息:</p>
|
||||
<pre style="position: relative;
|
||||
padding: 15px;
|
||||
line-height: 20px;
|
||||
border-left: 5px solid #ddd;
|
||||
color: #333;
|
||||
font-family: Courier New, serif;
|
||||
font-size: 12px">
|
||||
${msg}
|
||||
</pre>
|
||||
</div>
|
||||
<div class="foot-hr hr" style="margin: 0 auto;
|
||||
z-index: 111;
|
||||
width: 800px;
|
||||
margin-top: 30px;
|
||||
border-top: 1px solid #DA251D;">
|
||||
</div>
|
||||
<div style="text-align: center;
|
||||
font-size: 12px;
|
||||
padding: 20px 0px;
|
||||
font-family: Microsoft YaHei;">
|
||||
Copyright ©${.now?string("yyyy")} <a hover="color: #DA251D;" style="color: #999;" href="https://github.com/alldatacenter/alldata" target="_blank">AllData</a> 科学护城河 All Rights Reserved.
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,72 @@
|
||||
|
||||
package ${package}.rest;
|
||||
|
||||
import com.platform.annotation.Log;
|
||||
import ${package}.domain.${className};
|
||||
import ${package}.service.${className}Service;
|
||||
import ${package}.service.dto.${className}QueryCriteria;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import io.swagger.annotations.*;
|
||||
import java.io.IOException;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
/**
|
||||
* @author ${author}
|
||||
* @date ${date}
|
||||
**/
|
||||
@RestController
|
||||
@RequiredArgsConstructor
|
||||
@Api(tags = "${apiAlias}管理")
|
||||
@RequestMapping("/api/${changeClassName}")
|
||||
public class ${className}Controller {
|
||||
|
||||
private final ${className}Service ${changeClassName}Service;
|
||||
|
||||
@Log("导出数据")
|
||||
@ApiOperation("导出数据")
|
||||
@GetMapping(value = "/download")
|
||||
@PreAuthorize("@el.check('${changeClassName}:list')")
|
||||
public void export${className}(HttpServletResponse response, ${className}QueryCriteria criteria) throws IOException {
|
||||
${changeClassName}Service.download(${changeClassName}Service.queryAll(criteria), response);
|
||||
}
|
||||
|
||||
@GetMapping
|
||||
@Log("查询${apiAlias}")
|
||||
@ApiOperation("查询${apiAlias}")
|
||||
@PreAuthorize("@el.check('${changeClassName}:list')")
|
||||
public ResponseEntity<Object> query${className}(${className}QueryCriteria criteria, Pageable pageable){
|
||||
return new ResponseEntity<>(${changeClassName}Service.queryAll(criteria,pageable),HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping
|
||||
@Log("新增${apiAlias}")
|
||||
@ApiOperation("新增${apiAlias}")
|
||||
@PreAuthorize("@el.check('${changeClassName}:add')")
|
||||
public ResponseEntity<Object> create${className}(@Validated @RequestBody ${className} resources){
|
||||
return new ResponseEntity<>(${changeClassName}Service.create(resources),HttpStatus.CREATED);
|
||||
}
|
||||
|
||||
@PutMapping
|
||||
@Log("修改${apiAlias}")
|
||||
@ApiOperation("修改${apiAlias}")
|
||||
@PreAuthorize("@el.check('${changeClassName}:edit')")
|
||||
public ResponseEntity<Object> update${className}(@Validated @RequestBody ${className} resources){
|
||||
${changeClassName}Service.update(resources);
|
||||
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
|
||||
}
|
||||
|
||||
@DeleteMapping
|
||||
@Log("删除${apiAlias}")
|
||||
@ApiOperation("删除${apiAlias}")
|
||||
@PreAuthorize("@el.check('${changeClassName}:del')")
|
||||
public ResponseEntity<Object> delete${className}(@RequestBody ${pkColumnType}[] ids) {
|
||||
${changeClassName}Service.deleteAll(ids);
|
||||
return new ResponseEntity<>(HttpStatus.OK);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
|
||||
package ${package}.service.dto;
|
||||
|
||||
import lombok.Data;
|
||||
<#if hasTimestamp>
|
||||
import java.sql.Timestamp;
|
||||
</#if>
|
||||
<#if hasBigDecimal>
|
||||
import java.math.BigDecimal;
|
||||
</#if>
|
||||
import java.io.Serializable;
|
||||
<#if !auto && pkColumnType = 'Long'>
|
||||
import com.alibaba.fastjson.annotation.JSONField;
|
||||
import com.alibaba.fastjson.serializer.ToStringSerializer;
|
||||
</#if>
|
||||
|
||||
/**
|
||||
* @description /
|
||||
* @author ${author}
|
||||
* @date ${date}
|
||||
**/
|
||||
@Data
|
||||
public class ${className}Dto implements Serializable {
|
||||
<#if columns??>
|
||||
<#list columns as column>
|
||||
|
||||
<#if column.remark != ''>
|
||||
/** ${column.remark} */
|
||||
</#if>
|
||||
<#if column.columnKey = 'PRI'>
|
||||
<#if !auto && pkColumnType = 'Long'>
|
||||
/** 防止精度丢失 */
|
||||
@JSONField(serializeUsing = ToStringSerializer.class)
|
||||
</#if>
|
||||
</#if>
|
||||
private ${column.columnType} ${column.changeColumnName};
|
||||
</#list>
|
||||
</#if>
|
||||
}
|
||||
@@ -0,0 +1,70 @@
|
||||
|
||||
package ${package}.domain;
|
||||
|
||||
import lombok.Data;
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import cn.hutool.core.bean.copier.CopyOptions;
|
||||
import javax.persistence.*;
|
||||
<#if isNotNullColumns??>
|
||||
import javax.validation.constraints.*;
|
||||
</#if>
|
||||
<#if hasDateAnnotation>
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.Table;
|
||||
import org.hibernate.annotations.*;
|
||||
</#if>
|
||||
<#if hasTimestamp>
|
||||
import java.sql.Timestamp;
|
||||
</#if>
|
||||
<#if hasBigDecimal>
|
||||
import java.math.BigDecimal;
|
||||
</#if>
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* @description /
|
||||
* @author ${author}
|
||||
* @date ${date}
|
||||
**/
|
||||
@Entity
|
||||
@Data
|
||||
@Table(name="${tableName}")
|
||||
public class ${className} implements Serializable {
|
||||
<#if columns??>
|
||||
<#list columns as column>
|
||||
|
||||
<#if column.columnKey = 'PRI'>
|
||||
@Id
|
||||
<#if auto>
|
||||
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||
</#if>
|
||||
</#if>
|
||||
@Column(name = "`${column.columnName}`"<#if column.columnKey = 'UNI'>,unique = true</#if><#if column.istNotNull && column.columnKey != 'PRI'>,nullable = false</#if>)
|
||||
<#if column.istNotNull && column.columnKey != 'PRI'>
|
||||
<#if column.columnType = 'String'>
|
||||
@NotBlank
|
||||
<#else>
|
||||
@NotNull
|
||||
</#if>
|
||||
</#if>
|
||||
<#if (column.dateAnnotation)?? && column.dateAnnotation != ''>
|
||||
<#if column.dateAnnotation = 'CreationTimestamp'>
|
||||
@CreationTimestamp
|
||||
<#else>
|
||||
@UpdateTimestamp
|
||||
</#if>
|
||||
</#if>
|
||||
<#if column.remark != ''>
|
||||
@ApiModelProperty(value = "${column.remark}")
|
||||
<#else>
|
||||
@ApiModelProperty(value = "${column.changeColumnName}")
|
||||
</#if>
|
||||
private ${column.columnType} ${column.changeColumnName};
|
||||
</#list>
|
||||
</#if>
|
||||
|
||||
public void copy(${className} source){
|
||||
BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
|
||||
package ${package}.service.mapstruct;
|
||||
|
||||
import com.platform.base.BaseMapper;
|
||||
import ${package}.domain.${className};
|
||||
import ${package}.service.dto.${className}Dto;
|
||||
import org.mapstruct.Mapper;
|
||||
import org.mapstruct.ReportingPolicy;
|
||||
|
||||
/**
|
||||
* @author ${author}
|
||||
* @date ${date}
|
||||
**/
|
||||
@Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.IGNORE)
|
||||
public interface ${className}Mapper extends BaseMapper<${className}Dto, ${className}> {
|
||||
|
||||
}
|
||||
@@ -0,0 +1,66 @@
|
||||
|
||||
package ${package}.service.dto;
|
||||
|
||||
import lombok.Data;
|
||||
<#if queryHasTimestamp>
|
||||
import java.sql.Timestamp;
|
||||
</#if>
|
||||
<#if queryHasBigDecimal>
|
||||
import java.math.BigDecimal;
|
||||
</#if>
|
||||
<#if betweens??>
|
||||
import java.util.List;
|
||||
</#if>
|
||||
<#if queryColumns??>
|
||||
import com.platform.annotation.Query;
|
||||
</#if>
|
||||
|
||||
/**
|
||||
* @author ${author}
|
||||
* @date ${date}
|
||||
**/
|
||||
@Data
|
||||
public class ${className}QueryCriteria{
|
||||
<#if queryColumns??>
|
||||
<#list queryColumns as column>
|
||||
|
||||
<#if column.queryType = '='>
|
||||
/** 精确 */
|
||||
@Query
|
||||
private ${column.columnType} ${column.changeColumnName};
|
||||
</#if>
|
||||
<#if column.queryType = 'Like'>
|
||||
/** 模糊 */
|
||||
@Query(type = Query.Type.INNER_LIKE)
|
||||
private ${column.columnType} ${column.changeColumnName};
|
||||
</#if>
|
||||
<#if column.queryType = '!='>
|
||||
/** 不等于 */
|
||||
@Query(type = Query.Type.NOT_EQUAL)
|
||||
private ${column.columnType} ${column.changeColumnName};
|
||||
</#if>
|
||||
<#if column.queryType = 'NotNull'>
|
||||
/** 不为空 */
|
||||
@Query(type = Query.Type.NOT_NULL)
|
||||
private ${column.columnType} ${column.changeColumnName};
|
||||
</#if>
|
||||
<#if column.queryType = '>='>
|
||||
/** 大于等于 */
|
||||
@Query(type = Query.Type.GREATER_THAN)
|
||||
private ${column.columnType} ${column.changeColumnName};
|
||||
</#if>
|
||||
<#if column.queryType = '<='>
|
||||
/** 小于等于 */
|
||||
@Query(type = Query.Type.LESS_THAN)
|
||||
private ${column.columnType} ${column.changeColumnName};
|
||||
</#if>
|
||||
</#list>
|
||||
</#if>
|
||||
<#if betweens??>
|
||||
<#list betweens as column>
|
||||
/** BETWEEN */
|
||||
@Query(type = Query.Type.BETWEEN)
|
||||
private List<${column.columnType}> ${column.changeColumnName};
|
||||
</#list>
|
||||
</#if>
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
|
||||
package ${package}.repository;
|
||||
|
||||
import ${package}.domain.${className};
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
|
||||
|
||||
/**
|
||||
* @author ${author}
|
||||
* @date ${date}
|
||||
**/
|
||||
public interface ${className}Repository extends JpaRepository<${className}, ${pkColumnType}>, JpaSpecificationExecutor<${className}> {
|
||||
<#if columns??>
|
||||
<#list columns as column>
|
||||
<#if column.columnKey = 'UNI'>
|
||||
/**
|
||||
* 根据 ${column.capitalColumnName} 查询
|
||||
* @param ${column.columnName} /
|
||||
* @return /
|
||||
*/
|
||||
${className} findBy${column.capitalColumnName}(${column.columnType} ${column.columnName});
|
||||
</#if>
|
||||
</#list>
|
||||
</#if>
|
||||
}
|
||||
@@ -0,0 +1,68 @@
|
||||
|
||||
package ${package}.service;
|
||||
|
||||
import ${package}.domain.${className};
|
||||
import ${package}.service.dto.${className}Dto;
|
||||
import ${package}.service.dto.${className}QueryCriteria;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import java.util.Map;
|
||||
import java.util.List;
|
||||
import java.io.IOException;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
/**
|
||||
* @description 服务接口
|
||||
* @author ${author}
|
||||
* @date ${date}
|
||||
**/
|
||||
public interface ${className}Service {
|
||||
|
||||
/**
|
||||
* 查询数据分页
|
||||
* @param criteria 条件
|
||||
* @param pageable 分页参数
|
||||
* @return Map<String,Object>
|
||||
*/
|
||||
Map<String,Object> queryAll(${className}QueryCriteria criteria, Pageable pageable);
|
||||
|
||||
/**
|
||||
* 查询所有数据不分页
|
||||
* @param criteria 条件参数
|
||||
* @return List<${className}Dto>
|
||||
*/
|
||||
List<${className}Dto> queryAll(${className}QueryCriteria criteria);
|
||||
|
||||
/**
|
||||
* 根据ID查询
|
||||
* @param ${pkChangeColName} ID
|
||||
* @return ${className}Dto
|
||||
*/
|
||||
${className}Dto findById(${pkColumnType} ${pkChangeColName});
|
||||
|
||||
/**
|
||||
* 创建
|
||||
* @param resources /
|
||||
* @return ${className}Dto
|
||||
*/
|
||||
${className}Dto create(${className} resources);
|
||||
|
||||
/**
|
||||
* 编辑
|
||||
* @param resources /
|
||||
*/
|
||||
void update(${className} resources);
|
||||
|
||||
/**
|
||||
* 多选删除
|
||||
* @param ids /
|
||||
*/
|
||||
void deleteAll(${pkColumnType}[] ids);
|
||||
|
||||
/**
|
||||
* 导出数据
|
||||
* @param all 待导出的数据
|
||||
* @param response /
|
||||
* @throws IOException /
|
||||
*/
|
||||
void download(List<${className}Dto> all, HttpServletResponse response) throws IOException;
|
||||
}
|
||||
@@ -0,0 +1,142 @@
|
||||
|
||||
package ${package}.service.impl;
|
||||
|
||||
import ${package}.domain.${className};
|
||||
<#if columns??>
|
||||
<#list columns as column>
|
||||
<#if column.columnKey = 'UNI'>
|
||||
<#if column_index = 1>
|
||||
import com.platform.exception.EntityExistException;
|
||||
</#if>
|
||||
</#if>
|
||||
</#list>
|
||||
</#if>
|
||||
import com.platform.utils.ValidationUtil;
|
||||
import com.platform.utils.FileUtil;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import ${package}.repository.${className}Repository;
|
||||
import ${package}.service.${className}Service;
|
||||
import ${package}.service.dto.${className}Dto;
|
||||
import ${package}.service.dto.${className}QueryCriteria;
|
||||
import ${package}.service.mapstruct.${className}Mapper;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
<#if !auto && pkColumnType = 'Long'>
|
||||
import cn.hutool.core.lang.Snowflake;
|
||||
import cn.hutool.core.util.IdUtil;
|
||||
</#if>
|
||||
<#if !auto && pkColumnType = 'String'>
|
||||
import cn.hutool.core.util.IdUtil;
|
||||
</#if>
|
||||
import org.springframework.data.domain.Page;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import com.platform.utils.PageUtil;
|
||||
import com.platform.utils.QueryHelp;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.io.IOException;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.util.ArrayList;
|
||||
import java.util.LinkedHashMap;
|
||||
|
||||
/**
|
||||
* @description 服务实现
|
||||
* @author ${author}
|
||||
* @date ${date}
|
||||
**/
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class ${className}ServiceImpl implements ${className}Service {
|
||||
|
||||
private final ${className}Repository ${changeClassName}Repository;
|
||||
private final ${className}Mapper ${changeClassName}Mapper;
|
||||
|
||||
@Override
|
||||
public Map<String,Object> queryAll(${className}QueryCriteria criteria, Pageable pageable){
|
||||
Page<${className}> page = ${changeClassName}Repository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder),pageable);
|
||||
return PageUtil.toPage(page.map(${changeClassName}Mapper::toDto));
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<${className}Dto> queryAll(${className}QueryCriteria criteria){
|
||||
return ${changeClassName}Mapper.toDto(${changeClassName}Repository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder)));
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public ${className}Dto findById(${pkColumnType} ${pkChangeColName}) {
|
||||
${className} ${changeClassName} = ${changeClassName}Repository.findById(${pkChangeColName}).orElseGet(${className}::new);
|
||||
ValidationUtil.isNull(${changeClassName}.get${pkCapitalColName}(),"${className}","${pkChangeColName}",${pkChangeColName});
|
||||
return ${changeClassName}Mapper.toDto(${changeClassName});
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public ${className}Dto create(${className} resources) {
|
||||
<#if !auto && pkColumnType = 'Long'>
|
||||
Snowflake snowflake = IdUtil.createSnowflake(1, 1);
|
||||
resources.set${pkCapitalColName}(snowflake.nextId());
|
||||
</#if>
|
||||
<#if !auto && pkColumnType = 'String'>
|
||||
resources.set${pkCapitalColName}(IdUtil.simpleUUID());
|
||||
</#if>
|
||||
<#if columns??>
|
||||
<#list columns as column>
|
||||
<#if column.columnKey = 'UNI'>
|
||||
if(${changeClassName}Repository.findBy${column.capitalColumnName}(resources.get${column.capitalColumnName}()) != null){
|
||||
throw new EntityExistException(${className}.class,"${column.columnName}",resources.get${column.capitalColumnName}());
|
||||
}
|
||||
</#if>
|
||||
</#list>
|
||||
</#if>
|
||||
return ${changeClassName}Mapper.toDto(${changeClassName}Repository.save(resources));
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void update(${className} resources) {
|
||||
${className} ${changeClassName} = ${changeClassName}Repository.findById(resources.get${pkCapitalColName}()).orElseGet(${className}::new);
|
||||
ValidationUtil.isNull( ${changeClassName}.get${pkCapitalColName}(),"${className}","id",resources.get${pkCapitalColName}());
|
||||
<#if columns??>
|
||||
<#list columns as column>
|
||||
<#if column.columnKey = 'UNI'>
|
||||
<#if column_index = 1>
|
||||
${className} ${changeClassName}1 = null;
|
||||
</#if>
|
||||
${changeClassName}1 = ${changeClassName}Repository.findBy${column.capitalColumnName}(resources.get${column.capitalColumnName}());
|
||||
if(${changeClassName}1 != null && !${changeClassName}1.get${pkCapitalColName}().equals(${changeClassName}.get${pkCapitalColName}())){
|
||||
throw new EntityExistException(${className}.class,"${column.columnName}",resources.get${column.capitalColumnName}());
|
||||
}
|
||||
</#if>
|
||||
</#list>
|
||||
</#if>
|
||||
${changeClassName}.copy(resources);
|
||||
${changeClassName}Repository.save(${changeClassName});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteAll(${pkColumnType}[] ids) {
|
||||
for (${pkColumnType} ${pkChangeColName} : ids) {
|
||||
${changeClassName}Repository.deleteById(${pkChangeColName});
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void download(List<${className}Dto> all, HttpServletResponse response) throws IOException {
|
||||
List<Map<String, Object>> list = new ArrayList<>();
|
||||
for (${className}Dto ${changeClassName} : all) {
|
||||
Map<String,Object> map = new LinkedHashMap<>();
|
||||
<#list columns as column>
|
||||
<#if column.columnKey != 'PRI'>
|
||||
<#if column.remark != ''>
|
||||
map.put("${column.remark}", ${changeClassName}.get${column.capitalColumnName}());
|
||||
<#else>
|
||||
map.put(" ${column.changeColumnName}", ${changeClassName}.get${column.capitalColumnName}());
|
||||
</#if>
|
||||
</#if>
|
||||
</#list>
|
||||
list.add(map);
|
||||
}
|
||||
FileUtil.downloadExcel(list, response);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
import request from '@/utils/request'
|
||||
|
||||
export function add(data) {
|
||||
return request({
|
||||
url: 'api/${changeClassName}',
|
||||
method: 'post',
|
||||
data
|
||||
})
|
||||
}
|
||||
|
||||
export function del(ids) {
|
||||
return request({
|
||||
url: 'api/${changeClassName}/',
|
||||
method: 'delete',
|
||||
data: ids
|
||||
})
|
||||
}
|
||||
|
||||
export function edit(data) {
|
||||
return request({
|
||||
url: 'api/${changeClassName}',
|
||||
method: 'put',
|
||||
data
|
||||
})
|
||||
}
|
||||
|
||||
export default { add, edit, del }
|
||||
@@ -0,0 +1,169 @@
|
||||
<#--noinspection ALL-->
|
||||
<template>
|
||||
<div class="app-container">
|
||||
<!--工具栏-->
|
||||
<div class="head-container">
|
||||
<#if hasQuery>
|
||||
<div v-if="crud.props.searchToggle">
|
||||
<!-- 搜索 -->
|
||||
<#if queryColumns??>
|
||||
<#list queryColumns as column>
|
||||
<#if column.queryType != 'BetWeen'>
|
||||
<label class="el-form-item-label"><#if column.remark != ''>${column.remark}<#else>${column.changeColumnName}</#if></label>
|
||||
<el-input v-model="query.${column.changeColumnName}" clearable placeholder="<#if column.remark != ''>${column.remark}<#else>${column.changeColumnName}</#if>" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
|
||||
</#if>
|
||||
</#list>
|
||||
</#if>
|
||||
<#if betweens??>
|
||||
<#list betweens as column>
|
||||
<#if column.queryType = 'BetWeen'>
|
||||
<date-range-picker
|
||||
v-model="query.${column.changeColumnName}"
|
||||
start-placeholder="${column.changeColumnName}Start"
|
||||
end-placeholder="${column.changeColumnName}Start"
|
||||
class="date-item"
|
||||
/>
|
||||
</#if>
|
||||
</#list>
|
||||
</#if>
|
||||
<rrOperation :crud="crud" />
|
||||
</div>
|
||||
</#if>
|
||||
<!--如果想在工具栏加入更多按钮,可以使用插槽方式, slot = 'left' or 'right'-->
|
||||
<crudOperation :permission="permission" />
|
||||
<!--表单组件-->
|
||||
<el-dialog :close-on-click-modal="false" :before-close="crud.cancelCU" :visible.sync="crud.status.cu > 0" :title="crud.status.title" width="500px">
|
||||
<el-form ref="form" :model="form" <#if isNotNullColumns??>:rules="rules"</#if> size="small" label-width="80px">
|
||||
<#if columns??>
|
||||
<#list columns as column>
|
||||
<#if column.formShow>
|
||||
<el-form-item label="<#if column.remark != ''>${column.remark}<#else>${column.changeColumnName}</#if>"<#if column.istNotNull> prop="${column.changeColumnName}"</#if>>
|
||||
<#if column.formType = 'Input'>
|
||||
<el-input v-model="form.${column.changeColumnName}" style="width: 370px;" />
|
||||
<#elseif column.formType = 'Textarea'>
|
||||
<el-input v-model="form.${column.changeColumnName}" :rows="3" type="textarea" style="width: 370px;" />
|
||||
<#elseif column.formType = 'Radio'>
|
||||
<#if (column.dictName)?? && (column.dictName)!="">
|
||||
<el-radio v-model="form.${column.changeColumnName}" v-for="item in dict.${column.dictName}" :key="item.id" :label="item.value">{{ item.label }}</el-radio>
|
||||
<#else>
|
||||
未设置字典,请手动设置 Radio
|
||||
</#if>
|
||||
<#elseif column.formType = 'Select'>
|
||||
<#if (column.dictName)?? && (column.dictName)!="">
|
||||
<el-select v-model="form.${column.changeColumnName}" filterable placeholder="请选择">
|
||||
<el-option
|
||||
v-for="item in dict.${column.dictName}"
|
||||
:key="item.id"
|
||||
:label="item.label"
|
||||
:value="item.value" />
|
||||
</el-select>
|
||||
<#else>
|
||||
未设置字典,请手动设置 Select
|
||||
</#if>
|
||||
<#else>
|
||||
<el-date-picker v-model="form.${column.changeColumnName}" type="datetime" style="width: 370px;" />
|
||||
</#if>
|
||||
</el-form-item>
|
||||
</#if>
|
||||
</#list>
|
||||
</#if>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="text" @click="crud.cancelCU">取消</el-button>
|
||||
<el-button :loading="crud.status.cu === 2" type="primary" @click="crud.submitCU">确认</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
<!--表格渲染-->
|
||||
<el-table ref="table" v-loading="crud.loading" :data="crud.data" size="small" style="width: 100%;" @selection-change="crud.selectionChangeHandler">
|
||||
<el-table-column type="selection" width="55" />
|
||||
<#if columns??>
|
||||
<#list columns as column>
|
||||
<#if column.columnShow>
|
||||
<#if (column.dictName)?? && (column.dictName)!="">
|
||||
<el-table-column prop="${column.changeColumnName}" label="<#if column.remark != ''>${column.remark}<#else>${column.changeColumnName}</#if>">
|
||||
<template slot-scope="scope">
|
||||
{{ dict.label.${column.dictName}[scope.row.${column.changeColumnName}] }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<#else>
|
||||
<el-table-column prop="${column.changeColumnName}" label="<#if column.remark != ''>${column.remark}<#else>${column.changeColumnName}</#if>" />
|
||||
</#if>
|
||||
</#if>
|
||||
</#list>
|
||||
</#if>
|
||||
<el-table-column v-if="checkPer(['admin','${changeClassName}:edit','${changeClassName}:del'])" label="操作" width="150px" align="center">
|
||||
<template slot-scope="scope">
|
||||
<udOperation
|
||||
:data="scope.row"
|
||||
:permission="permission"
|
||||
/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--分页组件-->
|
||||
<pagination />
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import crud${className} from '@/api/${changeClassName}'
|
||||
import CRUD, { presenter, header, form, crud } from '@crud/crud'
|
||||
import rrOperation from '@crud/RR.operation'
|
||||
import crudOperation from '@crud/CRUD.operation'
|
||||
import udOperation from '@crud/UD.operation'
|
||||
import pagination from '@crud/Pagination'
|
||||
|
||||
const defaultForm = { <#if columns??><#list columns as column>${column.changeColumnName}: null<#if column_has_next>, </#if></#list></#if> }
|
||||
export default {
|
||||
name: '${className}',
|
||||
components: { pagination, crudOperation, rrOperation, udOperation },
|
||||
mixins: [presenter(), header(), form(defaultForm), crud()],
|
||||
<#if hasDict>
|
||||
dicts: [<#if hasDict??><#list dicts as dict>'${dict}'<#if dict_has_next>, </#if></#list></#if>],
|
||||
</#if>
|
||||
cruds() {
|
||||
return CRUD({ title: '${apiAlias}', url: 'api/${changeClassName}', idField: '${pkChangeColName}', sort: '${pkChangeColName},desc', crudMethod: { ...crud${className} }})
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
permission: {
|
||||
add: ['admin', '${changeClassName}:add'],
|
||||
edit: ['admin', '${changeClassName}:edit'],
|
||||
del: ['admin', '${changeClassName}:del']
|
||||
},
|
||||
rules: {
|
||||
<#if isNotNullColumns??>
|
||||
<#list isNotNullColumns as column>
|
||||
<#if column.istNotNull>
|
||||
${column.changeColumnName}: [
|
||||
{ required: true, message: '<#if column.remark != ''>${column.remark}</#if>不能为空', trigger: 'blur' }
|
||||
]<#if column_has_next>,</#if>
|
||||
</#if>
|
||||
</#list>
|
||||
</#if>
|
||||
}<#if hasQuery>,
|
||||
queryTypeOptions: [
|
||||
<#if queryColumns??>
|
||||
<#list queryColumns as column>
|
||||
<#if column.queryType != 'BetWeen'>
|
||||
{ key: '${column.changeColumnName}', display_name: '<#if column.remark != ''>${column.remark}<#else>${column.changeColumnName}</#if>' }<#if column_has_next>,</#if>
|
||||
</#if>
|
||||
</#list>
|
||||
</#if>
|
||||
]
|
||||
</#if>
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
// 钩子:在获取表格数据之前执行,false 则代表不获取数据
|
||||
[CRUD.HOOK.beforeRefresh]() {
|
||||
return true
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
||||
</style>
|
||||
Reference in New Issue
Block a user