From f48c38125956578611832f6017b0cb2ffdbe3725 Mon Sep 17 00:00:00 2001 From: 吴健 <14790700720@163.com> Date: 星期二, 15 四月 2025 09:00:32 +0800 Subject: [PATCH] add --- billion-main/src/main/java/com/billion/main/plc/sub/OPCUaSubscription.java | 523 +++++------ billion-ui/src/assets/logo/logo.png | 0 billion-ui/src/api/main/da/stationCollection.js | 25 billion-ui/src/assets/logo/logo2.png | 0 billion-admin/src/main/resources/application.yml | 17 billion-generator/src/main/resources/mapper/generator/GenTableMapper.xml | 285 +++-- billion-ui/src/router/index.js | 24 billion-ui/src/views/index.vue | 1138 ++--------------------- billion-main/src/main/java/com/billion/main/plc/sub/OPCUaSubscriptionTemp.java | 332 +++--- billion-ui/src/views/login.vue | 4 billion-quartz/src/main/resources/mapper/quartz/SysJobLogMapper.xml | 2 billion-quartz/src/main/java/com/billion/quartz/util/AbstractQuartzJob.java | 2 billion-main/src/main/java/com/billion/main/da/domain/DaStationCollection.java | 3 billion-quartz/src/main/java/com/billion/quartz/task/RyTask.java | 8 billion-quartz/src/main/resources/mapper/quartz/SysJobMapper.xml | 4 billion-generator/src/main/resources/mapper/generator/GenTableColumnMapper.xml | 132 +- billion-main/pom.xml | 23 billion-main/src/main/java/com/billion/main/da/controller/DaStationCollectionController.java | 142 ++ billion-quartz/pom.xml | 4 billion-admin/src/main/resources/application-druid.yml | 4 billion-main/src/main/java/com/billion/main/plc/CustomRunner.java | 122 +- 21 files changed, 1,044 insertions(+), 1,750 deletions(-) diff --git a/billion-admin/src/main/resources/application-druid.yml b/billion-admin/src/main/resources/application-druid.yml index 4ccf385..237395c 100644 --- a/billion-admin/src/main/resources/application-druid.yml +++ b/billion-admin/src/main/resources/application-druid.yml @@ -6,9 +6,9 @@ druid: # 涓诲簱鏁版嵁婧� master: - url: jdbc:sqlserver://127.0.0.1:1433;DataBaseName=billion-db-bq + url: jdbc:sqlserver://127.0.0.1:1433;DataBaseName=billion-db-063 username: sa - password: admin@123 + password: 123456 # datasource: # type: com.alibaba.druid.pool.DruidDataSource # driverClassName: com.mysql.cj.jdbc.Driver diff --git a/billion-admin/src/main/resources/application.yml b/billion-admin/src/main/resources/application.yml index d88b10f..4215a72 100644 --- a/billion-admin/src/main/resources/application.yml +++ b/billion-admin/src/main/resources/application.yml @@ -171,9 +171,14 @@ # 鍖归厤閾炬帴 urlPatterns: /system/*,/monitor/*,/tool/* -kangaroohy: - milo: - config: - default: - endpoint: opc.tcp://127.0.0.1:49320 - security-policy: none +tcp: + server: + ip: 127.0.0.1 + port: 1000 + +#kangaroohy: +# milo: +# config: +# default: +# endpoint: opc.tcp://127.0.0.1:49320 +# security-policy: none diff --git a/billion-generator/src/main/resources/mapper/generator/GenTableColumnMapper.xml b/billion-generator/src/main/resources/mapper/generator/GenTableColumnMapper.xml index f60cb7b..63a2902 100644 --- a/billion-generator/src/main/resources/mapper/generator/GenTableColumnMapper.xml +++ b/billion-generator/src/main/resources/mapper/generator/GenTableColumnMapper.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper -PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" -"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> + PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.billion.generator.mapper.GenTableColumnMapper"> <resultMap type="GenTableColumn" id="GenTableColumnResult"> @@ -29,7 +29,7 @@ <result property="updateTime" column="update_time" /> </resultMap> - <sql id="selectGenTableColumnVo"> + <sql id="selectGenTableColumnVo"> select column_id, table_id, column_name, column_comment, column_type, java_type, java_field, is_pk, is_increment, is_required, is_insert, is_edit, is_list, is_query, query_type, html_type, dict_type, sort, create_by, create_time, update_by, update_time from gen_table_column </sql> @@ -40,72 +40,98 @@ </select> <select id="selectDbTableColumnsByName" parameterType="String" resultMap="GenTableColumnResult"> - select column_name, (case when (is_nullable = 'no' <![CDATA[ && ]]> column_key != 'PRI') then '1' else '0' end) as is_required, (case when column_key = 'PRI' then '1' else '0' end) as is_pk, ordinal_position as sort, column_comment, (case when extra = 'auto_increment' then '1' else '0' end) as is_increment, column_type - from information_schema.columns where table_schema = (select database()) and table_name = (#{tableName}) - order by ordinal_position - </select> + SELECT a.name AS column_name, + (CASE WHEN a.isnullable = 1 THEN 0 ELSE 1 END) AS is_required, + (CASE WHEN ( + SELECT COUNT(*) FROM sysobjects + WHERE (name IN ( + SELECT name FROM sysindexes + WHERE (id = a.id) + AND (indid IN ( + SELECT indid FROM sysindexkeys + WHERE (id = a.id) + AND (colid IN (SELECT colid FROM syscolumns WHERE (id = a.id) AND (name = a.name))) + )))) + AND (xtype = 'PK') + ) > 0 THEN 1 + ELSE 0 END) AS is_pk, + a.colorder AS sort, + isnull(g.[value], ' ') AS column_comment, + (CASE WHEN COLUMNPROPERTY(a.id, a.name, 'IsIdentity') = 1 THEN 1 ELSE 0 END) AS is_increment, + b.name AS column_type + FROM syscolumns as a + LEFT JOIN systypes b ON a.xtype = b.xusertype + INNER JOIN sysobjects d ON a.id = d.id AND d.xtype = 'U' AND d.name <![CDATA[<>]]> 'dtproperties' + LEFT JOIN syscomments e ON a.cdefault = e.id + LEFT JOIN sys.extended_properties g ON a.id = g.major_id AND a.colid = g.minor_id + LEFT JOIN sys.extended_properties f ON d.id = f.class AND f.minor_id = 0 + LEFT JOIN sys.objects h ON a.id = h.object_id + LEFT JOIN sys.schemas i ON h.schema_id = i.schema_id + WHERE d.name = #{tableName} + ORDER BY a.colorder + </select> <insert id="insertGenTableColumn" parameterType="GenTableColumn" useGeneratedKeys="true" keyProperty="columnId"> insert into gen_table_column ( - <if test="tableId != null and tableId != ''">table_id,</if> - <if test="columnName != null and columnName != ''">column_name,</if> - <if test="columnComment != null and columnComment != ''">column_comment,</if> - <if test="columnType != null and columnType != ''">column_type,</if> - <if test="javaType != null and javaType != ''">java_type,</if> - <if test="javaField != null and javaField != ''">java_field,</if> - <if test="isPk != null and isPk != ''">is_pk,</if> - <if test="isIncrement != null and isIncrement != ''">is_increment,</if> - <if test="isRequired != null and isRequired != ''">is_required,</if> - <if test="isInsert != null and isInsert != ''">is_insert,</if> - <if test="isEdit != null and isEdit != ''">is_edit,</if> - <if test="isList != null and isList != ''">is_list,</if> - <if test="isQuery != null and isQuery != ''">is_query,</if> - <if test="queryType != null and queryType != ''">query_type,</if> - <if test="htmlType != null and htmlType != ''">html_type,</if> - <if test="dictType != null and dictType != ''">dict_type,</if> - <if test="sort != null">sort,</if> - <if test="createBy != null and createBy != ''">create_by,</if> - create_time - )values( - <if test="tableId != null and tableId != ''">#{tableId},</if> - <if test="columnName != null and columnName != ''">#{columnName},</if> - <if test="columnComment != null and columnComment != ''">#{columnComment},</if> - <if test="columnType != null and columnType != ''">#{columnType},</if> - <if test="javaType != null and javaType != ''">#{javaType},</if> - <if test="javaField != null and javaField != ''">#{javaField},</if> - <if test="isPk != null and isPk != ''">#{isPk},</if> - <if test="isIncrement != null and isIncrement != ''">#{isIncrement},</if> - <if test="isRequired != null and isRequired != ''">#{isRequired},</if> - <if test="isInsert != null and isInsert != ''">#{isInsert},</if> - <if test="isEdit != null and isEdit != ''">#{isEdit},</if> - <if test="isList != null and isList != ''">#{isList},</if> - <if test="isQuery != null and isQuery != ''">#{isQuery},</if> - <if test="queryType != null and queryType != ''">#{queryType},</if> - <if test="htmlType != null and htmlType != ''">#{htmlType},</if> - <if test="dictType != null and dictType != ''">#{dictType},</if> - <if test="sort != null">#{sort},</if> - <if test="createBy != null and createBy != ''">#{createBy},</if> - sysdate() - ) + <if test="tableId != null and tableId != ''">table_id,</if> + <if test="columnName != null and columnName != ''">column_name,</if> + <if test="columnComment != null and columnComment != ''">column_comment,</if> + <if test="columnType != null and columnType != ''">column_type,</if> + <if test="javaType != null and javaType != ''">java_type,</if> + <if test="javaField != null and javaField != ''">java_field,</if> + <if test="isPk != null and isPk != ''">is_pk,</if> + <if test="isIncrement != null and isIncrement != ''">is_increment,</if> + <if test="isRequired != null and isRequired != ''">is_required,</if> + <if test="isInsert != null and isInsert != ''">is_insert,</if> + <if test="isEdit != null and isEdit != ''">is_edit,</if> + <if test="isList != null and isList != ''">is_list,</if> + <if test="isQuery != null and isQuery != ''">is_query,</if> + <if test="queryType != null and queryType != ''">query_type,</if> + <if test="htmlType != null and htmlType != ''">html_type,</if> + <if test="dictType != null and dictType != ''">dict_type,</if> + <if test="sort != null">sort,</if> + <if test="createBy != null and createBy != ''">create_by,</if> + create_time + )values( + <if test="tableId != null and tableId != ''">#{tableId},</if> + <if test="columnName != null and columnName != ''">#{columnName},</if> + <if test="columnComment != null and columnComment != ''">#{columnComment},</if> + <if test="columnType != null and columnType != ''">#{columnType},</if> + <if test="javaType != null and javaType != ''">#{javaType},</if> + <if test="javaField != null and javaField != ''">#{javaField},</if> + <if test="isPk != null and isPk != ''">#{isPk},</if> + <if test="isIncrement != null and isIncrement != ''">#{isIncrement},</if> + <if test="isRequired != null and isRequired != ''">#{isRequired},</if> + <if test="isInsert != null and isInsert != ''">#{isInsert},</if> + <if test="isEdit != null and isEdit != ''">#{isEdit},</if> + <if test="isList != null and isList != ''">#{isList},</if> + <if test="isQuery != null and isQuery != ''">#{isQuery},</if> + <if test="queryType != null and queryType != ''">#{queryType},</if> + <if test="htmlType != null and htmlType != ''">#{htmlType},</if> + <if test="dictType != null and dictType != ''">#{dictType},</if> + <if test="sort != null">#{sort},</if> + <if test="createBy != null and createBy != ''">#{createBy},</if> + getdate() + ) </insert> <update id="updateGenTableColumn" parameterType="GenTableColumn"> update gen_table_column <set> + is_insert = #{isInsert}, + is_edit = #{isEdit}, + is_list = #{isList}, + is_query = #{isQuery}, + is_required = #{isRequired}, <if test="columnComment != null">column_comment = #{columnComment},</if> <if test="javaType != null">java_type = #{javaType},</if> <if test="javaField != null">java_field = #{javaField},</if> - <if test="isInsert != null">is_insert = #{isInsert},</if> - <if test="isEdit != null">is_edit = #{isEdit},</if> - <if test="isList != null">is_list = #{isList},</if> - <if test="isQuery != null">is_query = #{isQuery},</if> - <if test="isRequired != null">is_required = #{isRequired},</if> <if test="queryType != null">query_type = #{queryType},</if> <if test="htmlType != null">html_type = #{htmlType},</if> <if test="dictType != null">dict_type = #{dictType},</if> <if test="sort != null">sort = #{sort},</if> <if test="updateBy != null">update_by = #{updateBy},</if> - update_time = sysdate() + update_time = getdate() </set> where column_id = #{columnId} </update> diff --git a/billion-generator/src/main/resources/mapper/generator/GenTableMapper.xml b/billion-generator/src/main/resources/mapper/generator/GenTableMapper.xml index 7ea43b9..3ed6d56 100644 --- a/billion-generator/src/main/resources/mapper/generator/GenTableMapper.xml +++ b/billion-generator/src/main/resources/mapper/generator/GenTableMapper.xml @@ -1,18 +1,17 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper -PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" -"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> + PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.billion.generator.mapper.GenTableMapper"> <resultMap type="GenTable" id="GenTableResult"> - <id property="tableId" column="table_id" /> + <id property="tableId" column="table_id" /> <result property="tableName" column="table_name" /> <result property="tableComment" column="table_comment" /> <result property="subTableName" column="sub_table_name" /> <result property="subTableFkName" column="sub_table_fk_name" /> <result property="className" column="class_name" /> <result property="tplCategory" column="tpl_category" /> - <result property="tplWebType" column="tpl_web_type" /> <result property="packageName" column="package_name" /> <result property="moduleName" column="module_name" /> <result property="businessName" column="business_name" /> @@ -26,39 +25,39 @@ <result property="updateBy" column="update_by" /> <result property="updateTime" column="update_time" /> <result property="remark" column="remark" /> - <collection property="columns" javaType="java.util.List" resultMap="GenTableColumnResult" /> + <collection property="columns" javaType="java.util.List" resultMap="GenTableColumnResult" /> </resultMap> - + <resultMap type="GenTableColumn" id="GenTableColumnResult"> - <id property="columnId" column="column_id" /> - <result property="tableId" column="table_id" /> - <result property="columnName" column="column_name" /> - <result property="columnComment" column="column_comment" /> - <result property="columnType" column="column_type" /> - <result property="javaType" column="java_type" /> - <result property="javaField" column="java_field" /> - <result property="isPk" column="is_pk" /> - <result property="isIncrement" column="is_increment" /> - <result property="isRequired" column="is_required" /> - <result property="isInsert" column="is_insert" /> - <result property="isEdit" column="is_edit" /> - <result property="isList" column="is_list" /> - <result property="isQuery" column="is_query" /> - <result property="queryType" column="query_type" /> - <result property="htmlType" column="html_type" /> - <result property="dictType" column="dict_type" /> - <result property="sort" column="sort" /> - <result property="createBy" column="create_by" /> - <result property="createTime" column="create_time" /> - <result property="updateBy" column="update_by" /> - <result property="updateTime" column="update_time" /> - </resultMap> - + <id property="columnId" column="column_id" /> + <result property="tableId" column="table_id" /> + <result property="columnName" column="column_name" /> + <result property="columnComment" column="column_comment" /> + <result property="columnType" column="column_type" /> + <result property="javaType" column="java_type" /> + <result property="javaField" column="java_field" /> + <result property="isPk" column="is_pk" /> + <result property="isIncrement" column="is_increment" /> + <result property="isRequired" column="is_required" /> + <result property="isInsert" column="is_insert" /> + <result property="isEdit" column="is_edit" /> + <result property="isList" column="is_list" /> + <result property="isQuery" column="is_query" /> + <result property="queryType" column="query_type" /> + <result property="htmlType" column="html_type" /> + <result property="dictType" column="dict_type" /> + <result property="sort" column="sort" /> + <result property="createBy" column="create_by" /> + <result property="createTime" column="create_time" /> + <result property="updateBy" column="update_by" /> + <result property="updateTime" column="update_time" /> + </resultMap> + <sql id="selectGenTableVo"> - select table_id, table_name, table_comment, sub_table_name, sub_table_fk_name, class_name, tpl_category, tpl_web_type, package_name, module_name, business_name, function_name, function_author, gen_type, gen_path, options, create_by, create_time, update_by, update_time, remark from gen_table - </sql> - - <select id="selectGenTableList" parameterType="GenTable" resultMap="GenTableResult"> + select table_id, table_name, table_comment, sub_table_name, sub_table_fk_name, class_name, tpl_category, package_name, module_name, business_name, function_name, function_author, gen_type, gen_path, options, create_by, create_time, update_by, update_time, remark from gen_table + </sql> + + <select id="selectGenTableList" parameterType="GenTable" resultMap="GenTableResult"> <include refid="selectGenTableVo"/> <where> <if test="tableName != null and tableName != ''"> @@ -68,143 +67,161 @@ AND lower(table_comment) like lower(concat('%', #{tableComment}, '%')) </if> <if test="params.beginTime != null and params.beginTime != ''"><!-- 寮�濮嬫椂闂存绱� --> - AND date_format(create_time,'%Y%m%d') >= date_format(#{params.beginTime},'%Y%m%d') + <!-- and <![CDATA[ create_time >= convert(datetime, #{params.beginTime}, 20)]]>--> + and datediff(d, create_time, #{params.beginTime}) <![CDATA[<=]]> 0 </if> <if test="params.endTime != null and params.endTime != ''"><!-- 缁撴潫鏃堕棿妫�绱� --> - AND date_format(create_time,'%Y%m%d') <= date_format(#{params.endTime},'%Y%m%d') + <!-- and <![CDATA[ create_time <= convert(datetime, #{params.endTime}, 20)]]>--> + and datediff(d, create_time, #{params.endTime}) <![CDATA[>=]]> 0 </if> </where> </select> <select id="selectDbTableList" parameterType="GenTable" resultMap="GenTableResult"> - select table_name, table_comment, create_time, update_time from information_schema.tables - where table_schema = (select database()) - AND table_name NOT LIKE 'qrtz\_%' AND table_name NOT LIKE 'gen\_%' - AND table_name NOT IN (select table_name from gen_table) + SELECT + so.name as table_name, + sep.value as table_comment, + so.create_date as create_time, + so.modify_date as update_time + FROM + sys.objects as so + LEFT JOIN sys.extended_properties as sep on so.object_id = sep.major_id + WHERE + so.type = 'U' + AND sep.minor_id = 0 + AND so.name NOT LIKE 'qrtz_%' AND so.name NOT LIKE 'gen_%' + AND so.name NOT LIKE 'act_%' AND so.name NOT LIKE 'flw_%' + AND so.name NOT IN (select table_name from gen_table) <if test="tableName != null and tableName != ''"> - AND lower(table_name) like lower(concat('%', #{tableName}, '%')) + AND lower(so.name) like lower(concat('%', #{tableName}, '%')) </if> <if test="tableComment != null and tableComment != ''"> - AND lower(table_comment) like lower(concat('%', #{tableComment}, '%')) + AND lower(cast(sep.value as nvarchar)) like lower(concat('%', #{tableComment}, '%')) </if> <if test="params.beginTime != null and params.beginTime != ''"><!-- 寮�濮嬫椂闂存绱� --> - AND date_format(create_time,'%Y%m%d') >= date_format(#{params.beginTime},'%Y%m%d') + <!-- and <![CDATA[ create_time >= convert(datetime, #{params.beginTime}, 20)]]>--> + and datediff(d, so.create_date, #{params.beginTime}) <![CDATA[<=]]> 0 </if> <if test="params.endTime != null and params.endTime != ''"><!-- 缁撴潫鏃堕棿妫�绱� --> - AND date_format(create_time,'%Y%m%d') <= date_format(#{params.endTime},'%Y%m%d') + <!-- and <![CDATA[ create_time <= convert(datetime, #{params.endTime}, 20)]]>--> + and datediff(d, so.create_date, #{params.endTime}) <![CDATA[>=]]> 0 </if> - order by create_time desc + order by so.create_date desc </select> - + <select id="selectDbTableListByNames" resultMap="GenTableResult"> - select table_name, table_comment, create_time, update_time from information_schema.tables - where table_name NOT LIKE 'qrtz\_%' and table_name NOT LIKE 'gen\_%' and table_schema = (select database()) - and table_name in - <foreach collection="array" item="name" open="(" separator="," close=")"> - #{name} - </foreach> + SELECT + SO.name table_name, + SEP.VALUE table_comment, + SO.create_date create_time, + SO.modify_date update_time + FROM + sys.objects AS SO + LEFT JOIN sys.extended_properties AS SEP ON SO.object_id = SEP.major_id + WHERE + SO.type = 'U' + AND SEP.minor_id = 0 + and SO.name NOT LIKE 'qrtz_%' and SO.name NOT LIKE 'gen_%' + AND so.name NOT LIKE 'act_%' AND so.name NOT LIKE 'flw_%' + and SO.name in + <foreach collection="array" item="name" open="(" separator="," close=")"> + #{name} + </foreach> </select> - + <select id="selectTableByName" parameterType="String" resultMap="GenTableResult"> select table_name, table_comment, create_time, update_time from information_schema.tables where table_comment <![CDATA[ <> ]]> '' and table_schema = (select database()) - and table_name = #{tableName} + and table_name = #{tableName} </select> - + <select id="selectGenTableById" parameterType="Long" resultMap="GenTableResult"> - SELECT t.table_id, t.table_name, t.table_comment, t.sub_table_name, t.sub_table_fk_name, t.class_name, t.tpl_category, t.tpl_web_type, t.package_name, t.module_name, t.business_name, t.function_name, t.function_author, t.gen_type, t.gen_path, t.options, t.remark, + SELECT t.table_id, t.table_name, t.table_comment, t.sub_table_name, t.sub_table_fk_name, t.class_name, t.tpl_category, t.package_name, t.module_name, t.business_name, t.function_name, t.function_author, t.gen_type, t.gen_path, t.options, t.remark, c.column_id, c.column_name, c.column_comment, c.column_type, c.java_type, c.java_field, c.is_pk, c.is_increment, c.is_required, c.is_insert, c.is_edit, c.is_list, c.is_query, c.query_type, c.html_type, c.dict_type, c.sort FROM gen_table t - LEFT JOIN gen_table_column c ON t.table_id = c.table_id + LEFT JOIN gen_table_column c ON t.table_id = c.table_id where t.table_id = #{tableId} order by c.sort </select> - + <select id="selectGenTableByName" parameterType="String" resultMap="GenTableResult"> - SELECT t.table_id, t.table_name, t.table_comment, t.sub_table_name, t.sub_table_fk_name, t.class_name, t.tpl_category, t.tpl_web_type, t.package_name, t.module_name, t.business_name, t.function_name, t.function_author, t.gen_type, t.gen_path, t.options, t.remark, + SELECT t.table_id, t.table_name, t.table_comment, t.sub_table_name, t.sub_table_fk_name, t.class_name, t.tpl_category, t.package_name, t.module_name, t.business_name, t.function_name, t.function_author, t.gen_type, t.gen_path, t.options, t.remark, c.column_id, c.column_name, c.column_comment, c.column_type, c.java_type, c.java_field, c.is_pk, c.is_increment, c.is_required, c.is_insert, c.is_edit, c.is_list, c.is_query, c.query_type, c.html_type, c.dict_type, c.sort FROM gen_table t - LEFT JOIN gen_table_column c ON t.table_id = c.table_id + LEFT JOIN gen_table_column c ON t.table_id = c.table_id where t.table_name = #{tableName} order by c.sort </select> - + <select id="selectGenTableAll" parameterType="String" resultMap="GenTableResult"> - SELECT t.table_id, t.table_name, t.table_comment, t.sub_table_name, t.sub_table_fk_name, t.class_name, t.tpl_category, t.tpl_web_type, t.package_name, t.module_name, t.business_name, t.function_name, t.function_author, t.options, t.remark, + SELECT t.table_id, t.table_name, t.table_comment, t.sub_table_name, t.sub_table_fk_name, t.class_name, t.tpl_category, t.package_name, t.module_name, t.business_name, t.function_name, t.function_author, t.options, t.remark, c.column_id, c.column_name, c.column_comment, c.column_type, c.java_type, c.java_field, c.is_pk, c.is_increment, c.is_required, c.is_insert, c.is_edit, c.is_list, c.is_query, c.query_type, c.html_type, c.dict_type, c.sort FROM gen_table t - LEFT JOIN gen_table_column c ON t.table_id = c.table_id + LEFT JOIN gen_table_column c ON t.table_id = c.table_id order by c.sort </select> - + <insert id="insertGenTable" parameterType="GenTable" useGeneratedKeys="true" keyProperty="tableId"> - insert into gen_table ( - <if test="tableName != null">table_name,</if> - <if test="tableComment != null and tableComment != ''">table_comment,</if> - <if test="className != null and className != ''">class_name,</if> - <if test="tplCategory != null and tplCategory != ''">tpl_category,</if> - <if test="tplWebType != null and tplWebType != ''">tpl_web_type,</if> - <if test="packageName != null and packageName != ''">package_name,</if> - <if test="moduleName != null and moduleName != ''">module_name,</if> - <if test="businessName != null and businessName != ''">business_name,</if> - <if test="functionName != null and functionName != ''">function_name,</if> - <if test="functionAuthor != null and functionAuthor != ''">function_author,</if> - <if test="genType != null and genType != ''">gen_type,</if> - <if test="genPath != null and genPath != ''">gen_path,</if> - <if test="remark != null and remark != ''">remark,</if> - <if test="createBy != null and createBy != ''">create_by,</if> - create_time - )values( - <if test="tableName != null">#{tableName},</if> - <if test="tableComment != null and tableComment != ''">#{tableComment},</if> - <if test="className != null and className != ''">#{className},</if> - <if test="tplCategory != null and tplCategory != ''">#{tplCategory},</if> - <if test="tplWebType != null and tplWebType != ''">#{tplWebType},</if> - <if test="packageName != null and packageName != ''">#{packageName},</if> - <if test="moduleName != null and moduleName != ''">#{moduleName},</if> - <if test="businessName != null and businessName != ''">#{businessName},</if> - <if test="functionName != null and functionName != ''">#{functionName},</if> - <if test="functionAuthor != null and functionAuthor != ''">#{functionAuthor},</if> - <if test="genType != null and genType != ''">#{genType},</if> - <if test="genPath != null and genPath != ''">#{genPath},</if> - <if test="remark != null and remark != ''">#{remark},</if> - <if test="createBy != null and createBy != ''">#{createBy},</if> - sysdate() - ) - </insert> - - <update id="createTable"> - ${sql} - </update> - - <update id="updateGenTable" parameterType="GenTable"> - update gen_table - <set> - <if test="tableName != null">table_name = #{tableName},</if> - <if test="tableComment != null and tableComment != ''">table_comment = #{tableComment},</if> - <if test="subTableName != null">sub_table_name = #{subTableName},</if> - <if test="subTableFkName != null">sub_table_fk_name = #{subTableFkName},</if> - <if test="className != null and className != ''">class_name = #{className},</if> - <if test="functionAuthor != null and functionAuthor != ''">function_author = #{functionAuthor},</if> - <if test="genType != null and genType != ''">gen_type = #{genType},</if> - <if test="genPath != null and genPath != ''">gen_path = #{genPath},</if> - <if test="tplCategory != null and tplCategory != ''">tpl_category = #{tplCategory},</if> - <if test="tplWebType != null and tplWebType != ''">tpl_web_type = #{tplWebType},</if> - <if test="packageName != null and packageName != ''">package_name = #{packageName},</if> - <if test="moduleName != null and moduleName != ''">module_name = #{moduleName},</if> - <if test="businessName != null and businessName != ''">business_name = #{businessName},</if> - <if test="functionName != null and functionName != ''">function_name = #{functionName},</if> - <if test="options != null and options != ''">options = #{options},</if> - <if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if> - <if test="remark != null">remark = #{remark},</if> - update_time = sysdate() - </set> - where table_id = #{tableId} - </update> - - <delete id="deleteGenTableByIds" parameterType="Long"> - delete from gen_table where table_id in - <foreach collection="array" item="tableId" open="(" separator="," close=")"> - #{tableId} - </foreach> - </delete> + insert into gen_table ( + <if test="tableName != null">table_name,</if> + <if test="tableComment != null and tableComment != ''">table_comment,</if> + <if test="className != null and className != ''">class_name,</if> + <if test="tplCategory != null and tplCategory != ''">tpl_category,</if> + <if test="packageName != null and packageName != ''">package_name,</if> + <if test="moduleName != null and moduleName != ''">module_name,</if> + <if test="businessName != null and businessName != ''">business_name,</if> + <if test="functionName != null and functionName != ''">function_name,</if> + <if test="functionAuthor != null and functionAuthor != ''">function_author,</if> + <if test="genType != null and genType != ''">gen_type,</if> + <if test="genPath != null and genPath != ''">gen_path,</if> + <if test="remark != null and remark != ''">remark,</if> + <if test="createBy != null and createBy != ''">create_by,</if> + create_time + )values( + <if test="tableName != null">#{tableName},</if> + <if test="tableComment != null and tableComment != ''">#{tableComment},</if> + <if test="className != null and className != ''">#{className},</if> + <if test="tplCategory != null and tplCategory != ''">#{tplCategory},</if> + <if test="packageName != null and packageName != ''">#{packageName},</if> + <if test="moduleName != null and moduleName != ''">#{moduleName},</if> + <if test="businessName != null and businessName != ''">#{businessName},</if> + <if test="functionName != null and functionName != ''">#{functionName},</if> + <if test="functionAuthor != null and functionAuthor != ''">#{functionAuthor},</if> + <if test="genType != null and genType != ''">#{genType},</if> + <if test="genPath != null and genPath != ''">#{genPath},</if> + <if test="remark != null and remark != ''">#{remark},</if> + <if test="createBy != null and createBy != ''">#{createBy},</if> + getdate() + ) + </insert> + + <update id="updateGenTable" parameterType="GenTable"> + update gen_table + <set> + <if test="tableName != null">table_name = #{tableName},</if> + <if test="tableComment != null and tableComment != ''">table_comment = #{tableComment},</if> + <if test="subTableName != null">sub_table_name = #{subTableName},</if> + <if test="subTableFkName != null">sub_table_fk_name = #{subTableFkName},</if> + <if test="className != null and className != ''">class_name = #{className},</if> + <if test="functionAuthor != null and functionAuthor != ''">function_author = #{functionAuthor},</if> + <if test="genType != null and genType != ''">gen_type = #{genType},</if> + <if test="genPath != null and genPath != ''">gen_path = #{genPath},</if> + <if test="tplCategory != null and tplCategory != ''">tpl_category = #{tplCategory},</if> + <if test="packageName != null and packageName != ''">package_name = #{packageName},</if> + <if test="moduleName != null and moduleName != ''">module_name = #{moduleName},</if> + <if test="businessName != null and businessName != ''">business_name = #{businessName},</if> + <if test="functionName != null and functionName != ''">function_name = #{functionName},</if> + <if test="options != null and options != ''">options = #{options},</if> + <if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if> + <if test="remark != null">remark = #{remark},</if> + update_time = getdate() + </set> + where table_id = #{tableId} + </update> + + <delete id="deleteGenTableByIds" parameterType="Long"> + delete from gen_table where table_id in + <foreach collection="array" item="tableId" open="(" separator="," close=")"> + #{tableId} + </foreach> + </delete> </mapper> \ No newline at end of file diff --git a/billion-main/pom.xml b/billion-main/pom.xml index 2676c97..8062eac 100644 --- a/billion-main/pom.xml +++ b/billion-main/pom.xml @@ -60,17 +60,17 @@ </dependency> <!-- opc start--> - <dependency> - <groupId>com.kangaroohy</groupId> - <artifactId>milo-spring-boot-starter</artifactId> - <version>3.0.4</version> - </dependency> +<!-- <dependency>--> +<!-- <groupId>com.kangaroohy</groupId>--> +<!-- <artifactId>milo-spring-boot-starter</artifactId>--> +<!-- <version>3.0.4</version>--> +<!-- </dependency>--> <!-- opc end--> - <dependency> - <groupId>com.billion</groupId> - <artifactId>billion-quartz</artifactId> - </dependency> +<!-- <dependency>--> +<!-- <groupId>com.billion</groupId>--> +<!-- <artifactId>billion-quartz</artifactId>--> +<!-- </dependency>--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> @@ -87,6 +87,11 @@ <artifactId>hutool-all</artifactId> <version>5.8.22</version> </dependency> + <dependency> + <groupId>com.alibaba</groupId> + <artifactId>fastjson</artifactId> + <version>2.0.22</version> + </dependency> </dependencies> </project> \ No newline at end of file diff --git a/billion-main/src/main/java/com/billion/main/da/controller/DaStationCollectionController.java b/billion-main/src/main/java/com/billion/main/da/controller/DaStationCollectionController.java index dae407a..2d46f00 100644 --- a/billion-main/src/main/java/com/billion/main/da/controller/DaStationCollectionController.java +++ b/billion-main/src/main/java/com/billion/main/da/controller/DaStationCollectionController.java @@ -1,18 +1,30 @@ package com.billion.main.da.controller; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.collection.ListUtil; +import cn.hutool.core.util.ObjUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.billion.common.annotation.Log; import com.billion.common.core.controller.BaseController; import com.billion.common.core.domain.AjaxResult; +import com.billion.common.core.domain.R; import com.billion.common.core.page.TableDataInfo; import com.billion.common.enums.BusinessType; +import com.billion.common.exception.ServiceException; import com.billion.common.utils.poi.ExcelUtil; import com.billion.main.da.domain.DaStationCollection; -import com.billion.main.da.service.IDaStationCollectionService; +import com.billion.main.da.service.impl.DaStationCollectionServiceImpl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.rmi.ServerError; +import java.util.ArrayList; +import java.util.Date; import java.util.List; /** @@ -26,7 +38,7 @@ public class DaStationCollectionController extends BaseController { @Autowired - private IDaStationCollectionService daStationCollectionService; + private DaStationCollectionServiceImpl daStationCollectionService; /** * 鏌ヨ杩囩珯閲囬泦鍒楄〃 @@ -38,6 +50,13 @@ startPage(); List<DaStationCollection> list = daStationCollectionService.selectDaStationCollectionList(daStationCollection); return getDataTable(list); + } + + @GetMapping("/printList") + public R printList() + { + List<DaStationCollection> list = daStationCollectionService.list(new LambdaQueryWrapper<DaStationCollection>().eq(DaStationCollection::getStatus,"0")); + return R.ok(list); } /** @@ -90,9 +109,122 @@ */ @PreAuthorize("@ss.hasPermi('da:stationCollection:remove')") @Log(title = "杩囩珯閲囬泦", businessType = BusinessType.DELETE) - @DeleteMapping("/{ids}") - public AjaxResult remove(@PathVariable Long[] ids) + @DeleteMapping("/{id}") + public R remove(@PathVariable Long id) { - return toAjax(daStationCollectionService.deleteDaStationCollectionByIds(ids)); + if (ObjUtil.isNull(id)){ + throw new ServiceException("id涓嶈兘涓虹┖"); + } + List<DaStationCollection> list = daStationCollectionService.list(new LambdaQueryWrapper<DaStationCollection>().eq(DaStationCollection::getId, id)); + if (CollUtil.isEmpty(list)){ + throw new ServiceException("鏁版嵁涓嶅瓨鍦紝璇峰埛鏂板悗閲嶈瘯"); + } + daStationCollectionService.removeById(id); + return R.ok(); } + + + @GetMapping("/crave") + public R crave(String sfcCode) throws IOException { + if (StrUtil.isBlank(sfcCode)){ + throw new ServiceException("搴忓垪鍙蜂笉鑳戒负绌�"); + } + if (!sfcCode.contains(StrUtil.SPACE)){ + throw new ServiceException("杈撳叆鐨勫簭鍒楀彿闇�瑕佸寘鍚┖鏍硷紒"); + } + + List<DaStationCollection> list = daStationCollectionService.list(new LambdaQueryWrapper<DaStationCollection>() + .eq(DaStationCollection::getSfcCode, sfcCode) + .eq(DaStationCollection::getLocationCode,"OP001")); + if (CollUtil.isNotEmpty(list)){ + DaStationCollection daStationCollection = list.get(0); + //閲嶅鍒荤爜 + return R.ok(303,"姝ゅ簭鍒楀彿宸插埢鐮�"); + } else { +// //棣栨鍒荤爜-鍙戦�佸埢鐮佷俊鍙风粰涓嬩綅鏈� +// TcpClient tcpClient = new TcpClient(); +// byte[] bytes = sfcCode.getBytes(StandardCharsets.UTF_8); +// tcpClient.sendData(bytes); + //鏌ヨ鏁版嵁涓姸鎬佷负0鐨勬暟鎹� + List<DaStationCollection> collect = daStationCollectionService.list(new LambdaQueryWrapper<DaStationCollection>() + .eq(DaStationCollection::getStatus, "0")); + if (CollUtil.isNotEmpty(collect)) { + //娓呴櫎 + daStationCollectionService.update(new LambdaUpdateWrapper<DaStationCollection>() + .eq(DaStationCollection::getStatus,"0") + .set(DaStationCollection::getStatus,"1")); + } + + //淇濆瓨鏁版嵁 + DaStationCollection daStationCollection = new DaStationCollection(); + Date date = new Date(); + daStationCollection.setSfcCode(sfcCode); + List<String> split = ListUtil.toList(sfcCode.split(StrUtil.SPACE)); + if (CollUtil.isNotEmpty(split)){ + if (split.size() > 1){ + daStationCollection.setPrintCode(split.get(1)); + } + } + daStationCollection.setLocationCode("OP001"); + daStationCollection.setCollectTime(date); + daStationCollection.setInboundTime(date); + daStationCollection.setOutboundTime(date); + daStationCollection.setStatus("0"); + daStationCollectionService.save(daStationCollection); + return R.ok(200); + + } + + } + + + @GetMapping("/reCrave") + public R reCrave(String sfcCode) throws IOException { + if (StrUtil.isBlank(sfcCode)){ + throw new ServiceException("搴忓垪鍙蜂笉鑳戒负绌�"); + } + if (!sfcCode.contains(StrUtil.SPACE)){ + throw new ServiceException("杈撳叆鐨勫簭鍒楀彿闇�瑕佸寘鍚┖鏍硷紒"); + } +// //鍙戦�佸埢鐮佷俊鍙风粰涓嬩綅鏈� +// TcpClient tcpClient = new TcpClient(); +// byte[] bytes = sfcCode.getBytes(StandardCharsets.UTF_8); +// tcpClient.sendData(bytes); + + List<DaStationCollection> collect = daStationCollectionService.list(new LambdaQueryWrapper<DaStationCollection>() + .eq(DaStationCollection::getStatus, "0")); + if (CollUtil.isNotEmpty(collect)) { + //娓呴櫎 + daStationCollectionService.update(new LambdaUpdateWrapper<DaStationCollection>() + .eq(DaStationCollection::getStatus,"0") + .set(DaStationCollection::getStatus,"1")); + } + + //淇濆瓨鏁版嵁 + DaStationCollection daStationCollection = new DaStationCollection(); + Date date = new Date(); + daStationCollection.setSfcCode(sfcCode); + List<String> split = ListUtil.toList(sfcCode.split(StrUtil.SPACE)); + if (CollUtil.isNotEmpty(split)){ + if (split.size() > 1){ + daStationCollection.setPrintCode(split.get(1)); + } + } + daStationCollection.setLocationCode("OP001"); + daStationCollection.setCollectTime(date); + daStationCollection.setInboundTime(date); + daStationCollection.setOutboundTime(date); + daStationCollection.setStatus("0"); + daStationCollectionService.save(daStationCollection); + return R.ok(200); + + + } + + +// @GetMapping("/testSend") +// public void test(){ +// TcpClient tcpClient = new TcpClient(); +// tcpClient.receiveData(); +// } } diff --git a/billion-main/src/main/java/com/billion/main/da/domain/DaStationCollection.java b/billion-main/src/main/java/com/billion/main/da/domain/DaStationCollection.java index 176d4a1..a59d7b8 100644 --- a/billion-main/src/main/java/com/billion/main/da/domain/DaStationCollection.java +++ b/billion-main/src/main/java/com/billion/main/da/domain/DaStationCollection.java @@ -48,4 +48,7 @@ private Date collectTime; + private String printCode; + + } diff --git a/billion-main/src/main/java/com/billion/main/plc/CustomRunner.java b/billion-main/src/main/java/com/billion/main/plc/CustomRunner.java index 3adedfa..3abd2bc 100644 --- a/billion-main/src/main/java/com/billion/main/plc/CustomRunner.java +++ b/billion-main/src/main/java/com/billion/main/plc/CustomRunner.java @@ -1,61 +1,61 @@ -package com.billion.main.plc; - - -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; -import com.billion.main.da.service.IDaParamCollectionService; -import com.billion.main.da.service.IDaStationCollectionService; -import com.billion.main.plc.constant.Constants; -import com.billion.main.plc.sub.OPCUaSubscription; -import com.billion.main.sc.domain.ScOpcConf; -import com.billion.main.sc.service.IScCollectionParamConfService; -import com.billion.main.sc.service.IScOpcConfService; -import com.kangaroohy.milo.service.MiloService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.ApplicationArguments; -import org.springframework.boot.ApplicationRunner; -import org.springframework.stereotype.Component; - -import java.util.List; -import java.util.stream.Collectors; - -@Component -public class CustomRunner implements ApplicationRunner { - - @Autowired - private MiloService miloService; - @Autowired - private IScOpcConfService opcConfService; - @Autowired - private IScCollectionParamConfService collectionParamConfService; - @Autowired - private IDaParamCollectionService paramCollectionService; - @Autowired - private IDaStationCollectionService stationCollectionService; - - @Override - public void run(ApplicationArguments args) throws Exception { - - OPCUaSubscription opcUaSubscription = new OPCUaSubscription( - miloService, - collectionParamConfService, - paramCollectionService, - stationCollectionService); - - List<String> lists = getSubList(); - System.out.println("璁㈤槄鍐呭锛�"+lists); - miloService.subscriptionFromOpcUa(lists,50,opcUaSubscription); - - } - - /** - * 璁㈤槄鍐呭 - */ - public List<String> getSubList(){ - List<String> lists = opcConfService.list(new LambdaQueryWrapper<ScOpcConf>() - .eq(ScOpcConf::getSubscribe,Constants.YES)) - .stream().map(ScOpcConf::getNode).collect(Collectors.toList()); - return lists; - } -} - +//package com.billion.main.plc; +// +// +//import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +//import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; +//import com.billion.main.da.service.IDaParamCollectionService; +//import com.billion.main.da.service.IDaStationCollectionService; +//import com.billion.main.plc.constant.Constants; +//import com.billion.main.plc.sub.OPCUaSubscription; +//import com.billion.main.sc.domain.ScOpcConf; +//import com.billion.main.sc.service.IScCollectionParamConfService; +//import com.billion.main.sc.service.IScOpcConfService; +//import com.kangaroohy.milo.service.MiloService; +//import org.springframework.beans.factory.annotation.Autowired; +//import org.springframework.boot.ApplicationArguments; +//import org.springframework.boot.ApplicationRunner; +//import org.springframework.stereotype.Component; +// +//import java.util.List; +//import java.util.stream.Collectors; +// +//@Component +//public class CustomRunner implements ApplicationRunner { +// +// @Autowired +// private MiloService miloService; +// @Autowired +// private IScOpcConfService opcConfService; +// @Autowired +// private IScCollectionParamConfService collectionParamConfService; +// @Autowired +// private IDaParamCollectionService paramCollectionService; +// @Autowired +// private IDaStationCollectionService stationCollectionService; +// +// @Override +// public void run(ApplicationArguments args) throws Exception { +// +// OPCUaSubscription opcUaSubscription = new OPCUaSubscription( +// miloService, +// collectionParamConfService, +// paramCollectionService, +// stationCollectionService); +// +// List<String> lists = getSubList(); +// System.out.println("璁㈤槄鍐呭锛�"+lists); +// miloService.subscriptionFromOpcUa(lists,50,opcUaSubscription); +// +// } +// +// /** +// * 璁㈤槄鍐呭 +// */ +// public List<String> getSubList(){ +// List<String> lists = opcConfService.list(new LambdaQueryWrapper<ScOpcConf>() +// .eq(ScOpcConf::getSubscribe,Constants.YES)) +// .stream().map(ScOpcConf::getNode).collect(Collectors.toList()); +// return lists; +// } +//} +// diff --git a/billion-main/src/main/java/com/billion/main/plc/sub/OPCUaSubscription.java b/billion-main/src/main/java/com/billion/main/plc/sub/OPCUaSubscription.java index 5deb902..b777540 100644 --- a/billion-main/src/main/java/com/billion/main/plc/sub/OPCUaSubscription.java +++ b/billion-main/src/main/java/com/billion/main/plc/sub/OPCUaSubscription.java @@ -1,286 +1,237 @@ -package com.billion.main.plc.sub; - - -import cn.hutool.core.collection.CollUtil; -import cn.hutool.core.util.ObjectUtil; -import cn.hutool.http.HttpRequest; -import cn.hutool.http.HttpResponse; -import cn.hutool.json.JSONUtil; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.billion.main.api.domain.StationST180; -import com.billion.main.da.domain.DaParamCollection; -import com.billion.main.da.service.IDaParamCollectionService; -import com.billion.main.da.service.IDaStationCollectionService; -import com.billion.main.plc.constant.Constants; -import com.billion.main.sc.domain.ScCollectionParamConf; -import com.billion.main.sc.service.IScCollectionParamConfService; -import com.kangaroohy.milo.model.ReadWriteEntity; -import com.kangaroohy.milo.runner.subscription.SubscriptionCallback; -import com.kangaroohy.milo.service.MiloService; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; -import com.alibaba.fastjson.JSONObject; - -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.util.*; -import java.util.concurrent.CompletableFuture; -import java.util.stream.Collectors; -import java.lang.reflect.Field; - - -@Slf4j -@Component -public class OPCUaSubscription implements SubscriptionCallback { - - public static MiloService miloService; - public static IScCollectionParamConfService collectionParamConfService; - public static IDaParamCollectionService paramCollectionService; - public static IDaStationCollectionService stationCollectionService; - - public OPCUaSubscription(MiloService miloService, IScCollectionParamConfService collectionParamConfService - ,IDaParamCollectionService paramCollectionService,IDaStationCollectionService stationCollectionService) { - OPCUaSubscription.miloService = miloService; - OPCUaSubscription.collectionParamConfService = collectionParamConfService; - OPCUaSubscription.paramCollectionService = paramCollectionService; - OPCUaSubscription.stationCollectionService = stationCollectionService; - } - - @Override - public void onSubscribe(String identifier, Object value) { - log.info("鍦板潃锛�"+identifier+"鍊硷細"+value); - try { - if(null != value && !Constants.ZERO.equals(value.toString())) { - String[] nodes = identifier.split("[.]"); - String thoroughfare = nodes[0];//閫氶亾 - String device = nodes[1];//璁惧 - String tab = nodes[2];//鏍囪 - String valueString = value.toString();//鍦板潃鍊� - - CompletableFuture<Void> cp1 = CompletableFuture.runAsync(() -> { - subHandle(thoroughfare,device,tab,valueString); - }); - - } - } catch (Exception e) { - log.error(e.getMessage()); - } - } - - public void subHandle(String thoroughfare,String device,String tab,String valueString){ - try{ - //鐩戝惉recordData - if(tab.equals(Constants.RECORD_DATA)){ - //濡傛灉鏄�2鍋氬嚭绔欏鐞� - if(valueString.equals(Constants.TWO)){ - Integer result = Constants.INTEGER_TWO_ONE; - result = saveParamCollection(device, "snCode", "stationStatus"); - miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".RecordDataDone").value(result).build()); - } - } - }catch (Exception e) { - log.error(e.getMessage()); - } - } - - /** - * 淇濆瓨杩囩珯鏁版嵁 - * - * @param device 宸ヤ綅 - * @param snCode 浜у搧搴忓垪鍙� - * @return Integer - * @throws Exception e - */ - private static Integer savePassingStation(String device, String snCode,String stationStatus){ - Integer result = 21; - try { - - - } catch (Exception e) { - throw new RuntimeException(e); - } - - return result; - } - - /** - * 淇濆瓨鍙傛暟鏁版嵁鍜屽彂閫佸伐鍘侻ES - * @param device 宸ヤ綅 - * @param snCode 浜у搧SN - * @param stationStatus 绔欑姸鎬� - * @return result - * @throws Exception e - */ - private static Integer saveParamCollection(String device, String snCode, String stationStatus) { - Integer result = Constants.INTEGER_TWO_ONE; - try { - // 鏌ヨ鍙傛暟閰嶇疆琛� - List<ScCollectionParamConf> list = collectionParamConfService.list(new LambdaQueryWrapper<ScCollectionParamConf>() - .eq(ScCollectionParamConf::getLocationCode, device) - .eq(ScCollectionParamConf::getSubscribe, Constants.ONE) - .orderByDesc(ScCollectionParamConf::getOrderNum) - ); - - if (CollUtil.isNotEmpty(list)) { - // 鑾峰彇鍙傛暟鍊� - List<String> collect = list.stream() - .map(ScCollectionParamConf::getNode) - .collect(Collectors.toList()); - List<ReadWriteEntity> readWriteEntityList = miloService.readFromOpcUa(collect); - - // 淇濆瓨閲囬泦鏁版嵁 - saveCollectionData(device, snCode, list, readWriteEntityList); - - // 鍒涘缓宸ヤ綅瀵硅薄骞惰祴鍊� - Object stationObject = createStationObject(device, list, readWriteEntityList); - if (stationObject != null) { - System.out.println("宸ヤ綅" + device + "瀵硅薄鍒涘缓鎴愬姛锛�" + stationObject); - // 杩欓噷鍙互瀵瑰垱寤虹殑瀵硅薄杩涜杩涗竴姝ュ鐞� - handleMesRequest(stationObject, device); - } - } - - } catch (Exception e) { - log.error("淇濆瓨鏁版嵁寮傚父", e); - throw new RuntimeException("淇濆瓨鏁版嵁鍙戦�佸伐鍘侻ES寮傚父"); - } - return result; - } - - /** - * 淇濆瓨閲囬泦鏁版嵁 - */ - private static void saveCollectionData(String device, String snCode, - List<ScCollectionParamConf> list, List<ReadWriteEntity> readWriteEntityList) { - ArrayList<DaParamCollection> collectionList = new ArrayList<>(); - for (int i = 0; i < readWriteEntityList.size(); i++) { - DaParamCollection daParamCollection = new DaParamCollection(); - daParamCollection.setSfcCode(snCode); - daParamCollection.setLocationCode(device); - daParamCollection.setParamCode(list.get(i).getParamCode()); - daParamCollection.setParamName(list.get(i).getParamName()); - daParamCollection.setParamValue(readWriteEntityList.get(i).getValue().toString()); - daParamCollection.setCollectTime(new Date()); - collectionList.add(daParamCollection); - } - paramCollectionService.insertBatch(collectionList); - } - - /** - * 鍒涘缓宸ヤ綅瀵硅薄骞惰祴鍊� - */ - private static Object createStationObject(String device, - List<ScCollectionParamConf> list, List<ReadWriteEntity> readWriteEntityList) { - try { - // 鏋勫缓瀹屾暣鐨勭被鍚� - String className = "com.billion.main.api.domain.Station" + device; - Class<?> stationClass = Class.forName(className); - Object stationObject = stationClass.newInstance(); - - // 鑾峰彇鎵�鏈夊睘鎬� - Field[] fields = stationClass.getDeclaredFields(); - - // 鍒涘缓鍙傛暟鍊糓ap锛屾柟渚挎煡鎵� - Map<String, String> paramValueMap = new HashMap<>(); - for (int i = 0; i < list.size(); i++) { - paramValueMap.put(list.get(i).getParamCode(), - readWriteEntityList.get(i).getValue().toString()); - } - - // 鎸夐『搴忕粰灞炴�ц祴鍊� - for (Field field : fields) { - field.setAccessible(true); - String paramCode = field.getName(); // 鍋囪灞炴�у悕涓庡弬鏁扮紪鐮佷竴鑷� - String value = paramValueMap.get(paramCode); - - if (value != null) { - // 鏍规嵁瀛楁绫诲瀷杞崲鍊� - Object convertedValue = convertValue(value, field.getType()); - field.set(stationObject, convertedValue); - } - } - - return stationObject; - } catch (Exception e) { - log.error("鍒涘缓宸ヤ綅瀵硅薄澶辫触锛�" + device, e); - return null; - } - } - - /** - * 鏍规嵁瀛楁绫诲瀷杞崲鍊� - */ - private static Object convertValue(String value, Class<?> type) { - if (type == String.class) { - return value; - } else if (type == Integer.class || type == int.class) { - return Integer.parseInt(value); - } else if (type == Double.class || type == double.class) { - return Double.parseDouble(value); - } else if (type == Float.class || type == float.class) { - return Float.parseFloat(value); - } else if (type == Long.class || type == long.class) { - return Long.parseLong(value); - } else if (type == Boolean.class || type == boolean.class) { - return Boolean.parseBoolean(value); - } else if (type == Date.class) { - try { - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - return sdf.parse(value); - } catch (ParseException e) { - return null; - } - } - return value; - } - - private static void handleMesRequest(Object stationObject, String device) { - try { - // 鍙戦�丠TTP璇锋眰 - HttpResponse response = HttpRequest.post(Constants.SY_MES_URL) - .body(JSONUtil.toJsonStr(stationObject)) - .timeout(5000) // 璁剧疆瓒呮椂鏃堕棿 - .execute(); - - // 瑙f瀽鍝嶅簲 - if (response.isOk()) { // 璇锋眰鎴愬姛 - JSONObject jsonResponse = JSONUtil.parseObj(response.body()); - String message = jsonResponse.getStr("message"); - - if (!"ok".equals(message)) { - // 鍝嶅簲涓嶆槸ok锛屼繚瀛樺け璐ヨ褰� - saveMesFailRecord(stationObject, device, "鍝嶅簲寮傚父锛�" + message); - } - } else { - // HTTP璇锋眰澶辫触锛屼繚瀛樺け璐ヨ褰� - saveMesFailRecord(stationObject, device, "HTTP鐘舵�佺爜锛�" + response.getStatus()); - } - } catch (Exception e) { - // 鍙戠敓寮傚父锛堟瘮濡傝繛鎺ヨ秴鏃躲�佹湇鍔′笉鍙敤绛夛級锛屼繚瀛樺け璐ヨ褰� - saveMesFailRecord(stationObject, device, "璇锋眰寮傚父锛�" + e.getMessage()); - } - } - - /** - * 淇濆瓨MES鎺ㄩ�佸け璐ヨ褰� - */ - private static void saveMesFailRecord(Object stationObject, String device, String errorMsg) { - try { - MesFailRecord failRecord = new MesFailRecord(); - failRecord.setDeviceCode(device); - failRecord.setRequestData(JSONUtil.toJsonStr(stationObject)); - failRecord.setErrorMsg(errorMsg); - failRecord.setCreateTime(new Date()); - failRecord.setStatus(0); // 0:鏈鐞� 1:宸插鐞� - failRecord.setRetryCount(0); // 閲嶈瘯娆℃暟 - - // 淇濆瓨鍒版暟鎹簱 - mesFailRecordService.save(failRecord); - - log.error("MES鎺ㄩ�佸け璐ワ紝宸蹭繚瀛樺け璐ヨ褰曘�傝澶囷細{}锛岄敊璇細{}", device, errorMsg); - } catch (Exception e) { - log.error("淇濆瓨MES澶辫触璁板綍鏃跺彂鐢熼敊璇�", e); - } - } - -} +//package com.billion.main.plc.sub; +// +// +//import cn.hutool.core.collection.CollUtil; +//import cn.hutool.core.util.ObjectUtil; +//import cn.hutool.http.HttpRequest; +//import cn.hutool.http.HttpResponse; +//import cn.hutool.json.JSONUtil; +//import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +//import com.billion.main.api.domain.StationST180; +//import com.billion.main.da.domain.DaParamCollection; +//import com.billion.main.da.service.IDaParamCollectionService; +//import com.billion.main.da.service.IDaStationCollectionService; +//import com.billion.main.plc.constant.Constants; +//import com.billion.main.sc.domain.ScCollectionParamConf; +//import com.billion.main.sc.service.IScCollectionParamConfService; +//import com.kangaroohy.milo.model.ReadWriteEntity; +//import com.kangaroohy.milo.runner.subscription.SubscriptionCallback; +//import com.kangaroohy.milo.service.MiloService; +//import lombok.extern.slf4j.Slf4j; +//import org.springframework.stereotype.Component; +//import com.alibaba.fastjson.JSONObject; +// +//import java.text.ParseException; +//import java.text.SimpleDateFormat; +//import java.util.*; +//import java.util.concurrent.CompletableFuture; +//import java.util.stream.Collectors; +//import java.lang.reflect.Field; +// +// +//@Slf4j +//@Component +//public class OPCUaSubscription implements SubscriptionCallback { +// +// public static MiloService miloService; +// public static IScCollectionParamConfService collectionParamConfService; +// public static IDaParamCollectionService paramCollectionService; +// public static IDaStationCollectionService stationCollectionService; +// +// public OPCUaSubscription(MiloService miloService, IScCollectionParamConfService collectionParamConfService +// ,IDaParamCollectionService paramCollectionService,IDaStationCollectionService stationCollectionService) { +// OPCUaSubscription.miloService = miloService; +// OPCUaSubscription.collectionParamConfService = collectionParamConfService; +// OPCUaSubscription.paramCollectionService = paramCollectionService; +// OPCUaSubscription.stationCollectionService = stationCollectionService; +// } +// +// @Override +// public void onSubscribe(String identifier, Object value) { +// log.info("鍦板潃锛�"+identifier+"鍊硷細"+value); +// try { +// if(null != value && !Constants.ZERO.equals(value.toString())) { +// String[] nodes = identifier.split("[.]"); +// String thoroughfare = nodes[0];//閫氶亾 +// String device = nodes[1];//璁惧 +// String tab = nodes[2];//鏍囪 +// String valueString = value.toString();//鍦板潃鍊� +// +// CompletableFuture<Void> cp1 = CompletableFuture.runAsync(() -> { +// subHandle(thoroughfare,device,tab,valueString); +// }); +// +// } +// } catch (Exception e) { +// log.error(e.getMessage()); +// } +// } +// +// public void subHandle(String thoroughfare,String device,String tab,String valueString){ +// try{ +// //鐩戝惉recordData +// if(tab.equals(Constants.RECORD_DATA)){ +// //濡傛灉鏄�2鍋氬嚭绔欏鐞� +// if(valueString.equals(Constants.TWO)){ +// Integer result = Constants.INTEGER_TWO_ONE; +// result = saveParamCollection(device, "snCode", "stationStatus"); +// miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".RecordDataDone").value(result).build()); +// } +// } +// }catch (Exception e) { +// log.error(e.getMessage()); +// } +// } +// +// /** +// * 淇濆瓨杩囩珯鏁版嵁 +// * +// * @param device 宸ヤ綅 +// * @param snCode 浜у搧搴忓垪鍙� +// * @return Integer +// * @throws Exception e +// */ +// private static Integer savePassingStation(String device, String snCode,String stationStatus){ +// Integer result = 21; +// try { +// +// +// } catch (Exception e) { +// throw new RuntimeException(e); +// } +// +// return result; +// } +// +// /** +// * 淇濆瓨鍙傛暟鏁版嵁鍜屽彂閫佸伐鍘侻ES +// * @param device 宸ヤ綅 +// * @param snCode 浜у搧SN +// * @param stationStatus 绔欑姸鎬� +// * @return result +// * @throws Exception e +// */ +// private static Integer saveParamCollection(String device, String snCode, String stationStatus) { +// Integer result = Constants.INTEGER_TWO_ONE; +// try { +// // 鏌ヨ鍙傛暟閰嶇疆琛� +// List<ScCollectionParamConf> list = collectionParamConfService.list(new LambdaQueryWrapper<ScCollectionParamConf>() +// .eq(ScCollectionParamConf::getLocationCode, device) +// .eq(ScCollectionParamConf::getSubscribe, Constants.ONE) +// .orderByDesc(ScCollectionParamConf::getOrderNum) +// ); +// +// if (CollUtil.isNotEmpty(list)) { +// // 鑾峰彇鍙傛暟鍊� +// List<String> collect = list.stream() +// .map(ScCollectionParamConf::getNode) +// .collect(Collectors.toList()); +// List<ReadWriteEntity> readWriteEntityList = miloService.readFromOpcUa(collect); +// +// // 淇濆瓨閲囬泦鏁版嵁 +// saveCollectionData(device, snCode, list, readWriteEntityList); +// +// // 鍒涘缓宸ヤ綅瀵硅薄骞惰祴鍊� +// Object stationObject = createStationObject(device, list, readWriteEntityList); +// if (stationObject != null) { +// System.out.println("宸ヤ綅" + device + "瀵硅薄鍒涘缓鎴愬姛锛�" + stationObject); +// // 杩欓噷鍙互瀵瑰垱寤虹殑瀵硅薄杩涜杩涗竴姝ュ鐞� +// +// } +// } +// +// } catch (Exception e) { +// log.error("淇濆瓨鏁版嵁寮傚父", e); +// throw new RuntimeException("淇濆瓨鏁版嵁鍙戦�佸伐鍘侻ES寮傚父"); +// } +// return result; +// } +// +// /** +// * 淇濆瓨閲囬泦鏁版嵁 +// */ +// private static void saveCollectionData(String device, String snCode, +// List<ScCollectionParamConf> list, List<ReadWriteEntity> readWriteEntityList) { +// ArrayList<DaParamCollection> collectionList = new ArrayList<>(); +// for (int i = 0; i < readWriteEntityList.size(); i++) { +// DaParamCollection daParamCollection = new DaParamCollection(); +// daParamCollection.setSfcCode(snCode); +// daParamCollection.setLocationCode(device); +// daParamCollection.setParamCode(list.get(i).getParamCode()); +// daParamCollection.setParamName(list.get(i).getParamName()); +// daParamCollection.setParamValue(readWriteEntityList.get(i).getValue().toString()); +// daParamCollection.setCollectTime(new Date()); +// collectionList.add(daParamCollection); +// } +// paramCollectionService.insertBatch(collectionList); +// } +// +// /** +// * 鍒涘缓宸ヤ綅瀵硅薄骞惰祴鍊� +// */ +// private static Object createStationObject(String device, +// List<ScCollectionParamConf> list, List<ReadWriteEntity> readWriteEntityList) { +// try { +// // 鏋勫缓瀹屾暣鐨勭被鍚� +// String className = "com.billion.main.api.domain.Station" + device; +// Class<?> stationClass = Class.forName(className); +// Object stationObject = stationClass.newInstance(); +// +// // 鑾峰彇鎵�鏈夊睘鎬� +// Field[] fields = stationClass.getDeclaredFields(); +// +// // 鍒涘缓鍙傛暟鍊糓ap锛屾柟渚挎煡鎵� +// Map<String, String> paramValueMap = new HashMap<>(); +// for (int i = 0; i < list.size(); i++) { +// paramValueMap.put(list.get(i).getParamCode(), +// readWriteEntityList.get(i).getValue().toString()); +// } +// +// // 鎸夐『搴忕粰灞炴�ц祴鍊� +// for (Field field : fields) { +// field.setAccessible(true); +// String paramCode = field.getName(); // 鍋囪灞炴�у悕涓庡弬鏁扮紪鐮佷竴鑷� +// String value = paramValueMap.get(paramCode); +// +// if (value != null) { +// // 鏍规嵁瀛楁绫诲瀷杞崲鍊� +// Object convertedValue = convertValue(value, field.getType()); +// field.set(stationObject, convertedValue); +// } +// } +// +// return stationObject; +// } catch (Exception e) { +// log.error("鍒涘缓宸ヤ綅瀵硅薄澶辫触锛�" + device, e); +// return null; +// } +// } +// +// /** +// * 鏍规嵁瀛楁绫诲瀷杞崲鍊� +// */ +// private static Object convertValue(String value, Class<?> type) { +// if (type == String.class) { +// return value; +// } else if (type == Integer.class || type == int.class) { +// return Integer.parseInt(value); +// } else if (type == Double.class || type == double.class) { +// return Double.parseDouble(value); +// } else if (type == Float.class || type == float.class) { +// return Float.parseFloat(value); +// } else if (type == Long.class || type == long.class) { +// return Long.parseLong(value); +// } else if (type == Boolean.class || type == boolean.class) { +// return Boolean.parseBoolean(value); +// } else if (type == Date.class) { +// try { +// SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); +// return sdf.parse(value); +// } catch (ParseException e) { +// return null; +// } +// } +// return value; +// } +// +//} diff --git a/billion-main/src/main/java/com/billion/main/plc/sub/OPCUaSubscriptionTemp.java b/billion-main/src/main/java/com/billion/main/plc/sub/OPCUaSubscriptionTemp.java index 1a5b98f..51adbee 100644 --- a/billion-main/src/main/java/com/billion/main/plc/sub/OPCUaSubscriptionTemp.java +++ b/billion-main/src/main/java/com/billion/main/plc/sub/OPCUaSubscriptionTemp.java @@ -1,166 +1,166 @@ -package com.billion.main.plc.sub; - - -import cn.hutool.core.collection.CollUtil; -import cn.hutool.core.util.ObjectUtil; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.billion.main.da.domain.DaParamCollection; -import com.billion.main.da.service.IDaParamCollectionService; -import com.billion.main.da.service.IDaStationCollectionService; -import com.billion.main.plc.constant.Constants; -import com.billion.main.sc.domain.ScCollectionParamConf; -import com.billion.main.sc.service.IScCollectionParamConfService; -import com.kangaroohy.milo.model.ReadWriteEntity; -import com.kangaroohy.milo.runner.subscription.SubscriptionCallback; -import com.kangaroohy.milo.service.MiloService; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.util.ArrayList; -import java.util.Date; -import java.util.List; -import java.util.concurrent.CompletableFuture; -import java.util.stream.Collectors; - - -@Slf4j -public class OPCUaSubscriptionTemp implements SubscriptionCallback { - - public static MiloService miloService; - public static IScCollectionParamConfService collectionParamConfService; - public static IDaParamCollectionService paramCollectionService; - public static IDaStationCollectionService stationCollectionService; - - public OPCUaSubscriptionTemp(MiloService miloService, IScCollectionParamConfService collectionParamConfService - , IDaParamCollectionService paramCollectionService, IDaStationCollectionService stationCollectionService) { - OPCUaSubscriptionTemp.miloService = miloService; - OPCUaSubscriptionTemp.collectionParamConfService = collectionParamConfService; - OPCUaSubscriptionTemp.paramCollectionService = paramCollectionService; - OPCUaSubscriptionTemp.stationCollectionService = stationCollectionService; - } - - @Override - public void onSubscribe(String identifier, Object value) { - log.info("鍦板潃锛�"+identifier+"鍊硷細"+value); - try { - if(null != value && !Constants.ZERO.equals(value.toString())) { - String[] nodes = identifier.split("[.]"); - String thoroughfare = nodes[0];//閫氶亾 - String device = nodes[1];//璁惧 - String tab = nodes[2];//鏍囪 - String valueString = value.toString();//鍦板潃鍊� - - CompletableFuture<Void> cp1 = CompletableFuture.runAsync(() -> { - subHandle(thoroughfare,device,tab,valueString); - }); - - } - } catch (Exception e) { - log.error(e.getMessage()); - } - } - - public void subHandle(String thoroughfare,String device,String tab,String valueString){ - try{ - //鐩戝惉recordData - if(tab.equals(Constants.RECORD_DATA)){ - //濡傛灉鏄�1鍋氳繘绔欏鐞� - if(valueString.equals(Constants.ONE)){ - Object sfcCodeObject = miloService.readFromOpcUa(thoroughfare + "." + device + ".sfcCode").getValue(); - if(ObjectUtil.isNotNull(sfcCodeObject)){ - miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".RecordDataDone").value(Constants.STRING_ONE_ONE).build()); - }else { - miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".RecordDataDone").value(Constants.STRING_ONE_TWO).build()); - } - //濡傛灉鏄�2鍋氬嚭绔欏鐞嗗鐞� - }else if(valueString.equals(Constants.TWO)){ - String result = Constants.STRING_TWO_ONE; - //璇诲彉閫熺鎬绘垚鐮� - Object sfcCodeObject = miloService.readFromOpcUa(thoroughfare + "." + device + ".sfcCode").getValue(); - //涓虹┖鏃讹紝杩斿洖5 - if (ObjectUtil.isNull(sfcCodeObject)){ - miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".RecordDataDone").value(Constants.STRING_TWO_FIVE).build()); - }else { - String snCode = sfcCodeObject.toString().trim();//浜у搧SN - Object stationStatusObjcet = miloService.readFromOpcUa(thoroughfare + "." + device + ".StationStatus").getValue();//绔欑姸鎬佸湴鍧� - String stationStatus = stationStatusObjcet.toString(); - if (ObjectUtil.isNotNull(stationStatusObjcet)) { - //淇濆瓨鍙傛暟锛屽彂閫佸伐鍘侻ES - result = saveParamCollection(device, snCode, stationStatus); - //淇濆瓨杩囩珯璁板綍 - savePassingStation(device,snCode,stationStatus); - }else { - result = Constants.STRING_TWO_THREE; - log.info("璇诲彇鍒板伐浣峽}StationStatus鏁版嵁锛歿},杩斿洖RecordDataDone鐨勫�间负{}", device, "IS NULL锛�", result); - } - } - miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".RecordDataDone").value(result).build()); - } - } - }catch (Exception e) { - log.error(e.getMessage()); - } - } - - /** - * 淇濆瓨杩囩珯鏁版嵁 - * - * @param device 宸ヤ綅 - * @param snCode 浜у搧搴忓垪鍙� - * @return Integer - * @throws Exception e - */ - private static Integer savePassingStation(String device, String snCode,String stationStatus){ - Integer result = 21; - try { - - - } catch (Exception e) { - throw new RuntimeException(e); - } - - return result; - } - - /** - * 淇濆瓨鍙傛暟鏁版嵁鍜屽彂閫佸伐鍘侻ES - * @param device 宸ヤ綅 - * @param snCode 浜у搧SN - * @param stationStatus 绔欑姸鎬� - * @return result - * @throws Exception e - */ - private static String saveParamCollection(String device,String snCode,String stationStatus){ - String result = Constants.STRING_TWO_ONE;//杩斿洖缁撴灉 - try { - //鏌ヨ鍙傛暟閰嶇疆琛� - List<ScCollectionParamConf> list = collectionParamConfService.list(new LambdaQueryWrapper<ScCollectionParamConf>() - .eq(ScCollectionParamConf::getLocationCode, device)//宸ヤ綅 - .eq(ScCollectionParamConf::getSubscribe, Constants.ONE)//鏄惁閲囬泦 - ); - if (CollUtil.isNotEmpty(list)){ - List<String> collect = list.stream() - .map(ScCollectionParamConf::getNode).collect(Collectors.toList()); - List<ReadWriteEntity> readWriteEntityList = miloService.readFromOpcUa(collect); - ArrayList<DaParamCollection> collectionList = new ArrayList<>(); - for (int i = 0; i < readWriteEntityList.size(); i++) { - DaParamCollection daParamCollection = new DaParamCollection(); - daParamCollection.setSfcCode(snCode); - daParamCollection.setLocationCode(device); - daParamCollection.setParamCode(list.get(i).getParamCode());//鍙傛暟缂栫爜 - daParamCollection.setParamName(list.get(i).getParamName());//鍙傛暟鍚嶇О - daParamCollection.setParamValue(readWriteEntityList.get(i).getValue().toString()); - daParamCollection.setCollectTime(new Date()); - collectionList.add(daParamCollection); - } - paramCollectionService.saveBatch(collectionList); - } - - }catch (Exception e) { - throw new RuntimeException("淇濆瓨鏁版嵁鍙戦�佸伐鍘侻ES寮傚父"); - } - return result; - } - - -} +//package com.billion.main.plc.sub; +// +// +//import cn.hutool.core.collection.CollUtil; +//import cn.hutool.core.util.ObjectUtil; +//import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +//import com.billion.main.da.domain.DaParamCollection; +//import com.billion.main.da.service.IDaParamCollectionService; +//import com.billion.main.da.service.IDaStationCollectionService; +//import com.billion.main.plc.constant.Constants; +//import com.billion.main.sc.domain.ScCollectionParamConf; +//import com.billion.main.sc.service.IScCollectionParamConfService; +//import com.kangaroohy.milo.model.ReadWriteEntity; +//import com.kangaroohy.milo.runner.subscription.SubscriptionCallback; +//import com.kangaroohy.milo.service.MiloService; +//import lombok.extern.slf4j.Slf4j; +//import org.springframework.stereotype.Component; +// +//import java.util.ArrayList; +//import java.util.Date; +//import java.util.List; +//import java.util.concurrent.CompletableFuture; +//import java.util.stream.Collectors; +// +// +//@Slf4j +//public class OPCUaSubscriptionTemp implements SubscriptionCallback { +// +// public static MiloService miloService; +// public static IScCollectionParamConfService collectionParamConfService; +// public static IDaParamCollectionService paramCollectionService; +// public static IDaStationCollectionService stationCollectionService; +// +// public OPCUaSubscriptionTemp(MiloService miloService, IScCollectionParamConfService collectionParamConfService +// , IDaParamCollectionService paramCollectionService, IDaStationCollectionService stationCollectionService) { +// OPCUaSubscriptionTemp.miloService = miloService; +// OPCUaSubscriptionTemp.collectionParamConfService = collectionParamConfService; +// OPCUaSubscriptionTemp.paramCollectionService = paramCollectionService; +// OPCUaSubscriptionTemp.stationCollectionService = stationCollectionService; +// } +// +// @Override +// public void onSubscribe(String identifier, Object value) { +// log.info("鍦板潃锛�"+identifier+"鍊硷細"+value); +// try { +// if(null != value && !Constants.ZERO.equals(value.toString())) { +// String[] nodes = identifier.split("[.]"); +// String thoroughfare = nodes[0];//閫氶亾 +// String device = nodes[1];//璁惧 +// String tab = nodes[2];//鏍囪 +// String valueString = value.toString();//鍦板潃鍊� +// +// CompletableFuture<Void> cp1 = CompletableFuture.runAsync(() -> { +// subHandle(thoroughfare,device,tab,valueString); +// }); +// +// } +// } catch (Exception e) { +// log.error(e.getMessage()); +// } +// } +// +// public void subHandle(String thoroughfare,String device,String tab,String valueString){ +// try{ +// //鐩戝惉recordData +// if(tab.equals(Constants.RECORD_DATA)){ +// //濡傛灉鏄�1鍋氳繘绔欏鐞� +// if(valueString.equals(Constants.ONE)){ +// Object sfcCodeObject = miloService.readFromOpcUa(thoroughfare + "." + device + ".sfcCode").getValue(); +// if(ObjectUtil.isNotNull(sfcCodeObject)){ +// miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".RecordDataDone").value(Constants.STRING_ONE_ONE).build()); +// }else { +// miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".RecordDataDone").value(Constants.STRING_ONE_TWO).build()); +// } +// //濡傛灉鏄�2鍋氬嚭绔欏鐞嗗鐞� +// }else if(valueString.equals(Constants.TWO)){ +// String result = Constants.STRING_TWO_ONE; +// //璇诲彉閫熺鎬绘垚鐮� +// Object sfcCodeObject = miloService.readFromOpcUa(thoroughfare + "." + device + ".sfcCode").getValue(); +// //涓虹┖鏃讹紝杩斿洖5 +// if (ObjectUtil.isNull(sfcCodeObject)){ +// miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".RecordDataDone").value(Constants.STRING_TWO_FIVE).build()); +// }else { +// String snCode = sfcCodeObject.toString().trim();//浜у搧SN +// Object stationStatusObjcet = miloService.readFromOpcUa(thoroughfare + "." + device + ".StationStatus").getValue();//绔欑姸鎬佸湴鍧� +// String stationStatus = stationStatusObjcet.toString(); +// if (ObjectUtil.isNotNull(stationStatusObjcet)) { +// //淇濆瓨鍙傛暟锛屽彂閫佸伐鍘侻ES +// result = saveParamCollection(device, snCode, stationStatus); +// //淇濆瓨杩囩珯璁板綍 +// savePassingStation(device,snCode,stationStatus); +// }else { +// result = Constants.STRING_TWO_THREE; +// log.info("璇诲彇鍒板伐浣峽}StationStatus鏁版嵁锛歿},杩斿洖RecordDataDone鐨勫�间负{}", device, "IS NULL锛�", result); +// } +// } +// miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".RecordDataDone").value(result).build()); +// } +// } +// }catch (Exception e) { +// log.error(e.getMessage()); +// } +// } +// +// /** +// * 淇濆瓨杩囩珯鏁版嵁 +// * +// * @param device 宸ヤ綅 +// * @param snCode 浜у搧搴忓垪鍙� +// * @return Integer +// * @throws Exception e +// */ +// private static Integer savePassingStation(String device, String snCode,String stationStatus){ +// Integer result = 21; +// try { +// +// +// } catch (Exception e) { +// throw new RuntimeException(e); +// } +// +// return result; +// } +// +// /** +// * 淇濆瓨鍙傛暟鏁版嵁鍜屽彂閫佸伐鍘侻ES +// * @param device 宸ヤ綅 +// * @param snCode 浜у搧SN +// * @param stationStatus 绔欑姸鎬� +// * @return result +// * @throws Exception e +// */ +// private static String saveParamCollection(String device,String snCode,String stationStatus){ +// String result = Constants.STRING_TWO_ONE;//杩斿洖缁撴灉 +// try { +// //鏌ヨ鍙傛暟閰嶇疆琛� +// List<ScCollectionParamConf> list = collectionParamConfService.list(new LambdaQueryWrapper<ScCollectionParamConf>() +// .eq(ScCollectionParamConf::getLocationCode, device)//宸ヤ綅 +// .eq(ScCollectionParamConf::getSubscribe, Constants.ONE)//鏄惁閲囬泦 +// ); +// if (CollUtil.isNotEmpty(list)){ +// List<String> collect = list.stream() +// .map(ScCollectionParamConf::getNode).collect(Collectors.toList()); +// List<ReadWriteEntity> readWriteEntityList = miloService.readFromOpcUa(collect); +// ArrayList<DaParamCollection> collectionList = new ArrayList<>(); +// for (int i = 0; i < readWriteEntityList.size(); i++) { +// DaParamCollection daParamCollection = new DaParamCollection(); +// daParamCollection.setSfcCode(snCode); +// daParamCollection.setLocationCode(device); +// daParamCollection.setParamCode(list.get(i).getParamCode());//鍙傛暟缂栫爜 +// daParamCollection.setParamName(list.get(i).getParamName());//鍙傛暟鍚嶇О +// daParamCollection.setParamValue(readWriteEntityList.get(i).getValue().toString()); +// daParamCollection.setCollectTime(new Date()); +// collectionList.add(daParamCollection); +// } +// paramCollectionService.saveBatch(collectionList); +// } +// +// }catch (Exception e) { +// throw new RuntimeException("淇濆瓨鏁版嵁鍙戦�佸伐鍘侻ES寮傚父"); +// } +// return result; +// } +// +// +//} diff --git a/billion-quartz/pom.xml b/billion-quartz/pom.xml index 8204f14..825e1a7 100644 --- a/billion-quartz/pom.xml +++ b/billion-quartz/pom.xml @@ -34,6 +34,10 @@ <groupId>com.billion</groupId> <artifactId>billion-common</artifactId> </dependency> + <dependency> + <groupId>com.billion</groupId> + <artifactId>billion-main</artifactId> + </dependency> </dependencies> diff --git a/billion-quartz/src/main/java/com/billion/quartz/task/RyTask.java b/billion-quartz/src/main/java/com/billion/quartz/task/RyTask.java index 8884a4f..b3fcf87 100644 --- a/billion-quartz/src/main/java/com/billion/quartz/task/RyTask.java +++ b/billion-quartz/src/main/java/com/billion/quartz/task/RyTask.java @@ -1,7 +1,10 @@ package com.billion.quartz.task; + import org.springframework.stereotype.Component; import com.billion.common.utils.StringUtils; + +import javax.annotation.Resource; /** * 瀹氭椂浠诲姟璋冨害娴嬭瘯 @@ -11,6 +14,10 @@ @Component("ryTask") public class RyTask { + +// @Resource +// private TcpClient tcpClient; + public void ryMultipleParams(String s, Boolean b, Long l, Double d, Integer i) { System.out.println(StringUtils.format("鎵ц澶氬弬鏂规硶锛� 瀛楃涓茬被鍨媨}锛屽竷灏旂被鍨媨}锛岄暱鏁村瀷{}锛屾诞鐐瑰瀷{}锛屾暣褰}", s, b, l, d, i)); @@ -24,5 +31,6 @@ public void ryNoParams() { System.out.println("鎵ц鏃犲弬鏂规硶"); +// tcpClient.receiveData(); } } diff --git a/billion-quartz/src/main/java/com/billion/quartz/util/AbstractQuartzJob.java b/billion-quartz/src/main/java/com/billion/quartz/util/AbstractQuartzJob.java index fe86481..3ae41c5 100644 --- a/billion-quartz/src/main/java/com/billion/quartz/util/AbstractQuartzJob.java +++ b/billion-quartz/src/main/java/com/billion/quartz/util/AbstractQuartzJob.java @@ -93,7 +93,7 @@ } // 鍐欏叆鏁版嵁搴撳綋涓� - SpringUtils.getBean(ISysJobLogService.class).addJobLog(sysJobLog); +// SpringUtils.getBean(ISysJobLogService.class).addJobLog(sysJobLog); } /** diff --git a/billion-quartz/src/main/resources/mapper/quartz/SysJobLogMapper.xml b/billion-quartz/src/main/resources/mapper/quartz/SysJobLogMapper.xml index 25336d6..ae31ec7 100644 --- a/billion-quartz/src/main/resources/mapper/quartz/SysJobLogMapper.xml +++ b/billion-quartz/src/main/resources/mapper/quartz/SysJobLogMapper.xml @@ -87,7 +87,7 @@ <if test="jobMessage != null and jobMessage != ''">#{jobMessage},</if> <if test="status != null and status != ''">#{status},</if> <if test="exceptionInfo != null and exceptionInfo != ''">#{exceptionInfo},</if> - sysdate() + GETDATE() ) </insert> diff --git a/billion-quartz/src/main/resources/mapper/quartz/SysJobMapper.xml b/billion-quartz/src/main/resources/mapper/quartz/SysJobMapper.xml index 590c335..d7f0a5c 100644 --- a/billion-quartz/src/main/resources/mapper/quartz/SysJobMapper.xml +++ b/billion-quartz/src/main/resources/mapper/quartz/SysJobMapper.xml @@ -75,7 +75,7 @@ <if test="status !=null">status = #{status},</if> <if test="remark != null and remark != ''">remark = #{remark},</if> <if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if> - update_time = sysdate() + update_time = GETDATE() </set> where job_id = #{jobId} </update> @@ -104,7 +104,7 @@ <if test="status != null and status != ''">#{status},</if> <if test="remark != null and remark != ''">#{remark},</if> <if test="createBy != null and createBy != ''">#{createBy},</if> - sysdate() + GETDATE() ) </insert> diff --git a/billion-ui/src/api/main/da/stationCollection.js b/billion-ui/src/api/main/da/stationCollection.js index ab5cad2..559c191 100644 --- a/billion-ui/src/api/main/da/stationCollection.js +++ b/billion-ui/src/api/main/da/stationCollection.js @@ -8,7 +8,14 @@ params: query }) } - +export function printList(query) { + return request({ + url: '/da/stationCollection/printList', + method: 'get', + params: query + }) +} +printList // 鏌ヨ杩囩珯閲囬泦璇︾粏 export function getStationCollection(id) { return request({ @@ -42,3 +49,19 @@ method: 'delete' }) } + +export function crave(param) { + return request({ + url: '/da/stationCollection/crave', + method: 'get', + params: param + }) +} + +export function reCrave(param) { + return request({ + url: '/da/stationCollection/reCrave', + method: 'get', + params: param + }) +} diff --git a/billion-ui/src/assets/logo/logo.png b/billion-ui/src/assets/logo/logo.png index e263760..93ac3d5 100644 --- a/billion-ui/src/assets/logo/logo.png +++ b/billion-ui/src/assets/logo/logo.png Binary files differ diff --git a/billion-ui/src/assets/logo/logo2.png b/billion-ui/src/assets/logo/logo2.png new file mode 100644 index 0000000..e263760 --- /dev/null +++ b/billion-ui/src/assets/logo/logo2.png Binary files differ diff --git a/billion-ui/src/router/index.js b/billion-ui/src/router/index.js index f849ea2..75197ca 100644 --- a/billion-ui/src/router/index.js +++ b/billion-ui/src/router/index.js @@ -89,18 +89,18 @@ ] }, // 鏍锋満鏍囩鎵撳嵃璺敱 - { - path: '/main/bq', - component: Layout, - children: [ - { - path: 'prototypeLabelPrinting', - component: () => import('@/views/main/bq/prototypeLabelPrinting'), - name: 'PrototypeLabelPrinting', - meta: { title: '鏍锋満鏍囩鎵撳嵃', icon: 'printer' } - } - ] - }, + // { + // path: '/main/bq', + // component: Layout, + // children: [ + // { + // path: 'prototypeLabelPrinting', + // component: () => import('@/views/main/bq/prototypeLabelPrinting'), + // name: 'PrototypeLabelPrinting', + // meta: { title: '鏍锋満鏍囩鎵撳嵃', icon: 'printer' } + // } + // ] + // }, // 鍖归厤鎵�鏈夎矾寰� { path: '*', diff --git a/billion-ui/src/views/index.vue b/billion-ui/src/views/index.vue index 8081a92..be35c65 100644 --- a/billion-ui/src/views/index.vue +++ b/billion-ui/src/views/index.vue @@ -1,1037 +1,157 @@ <template> <div class="app-container home"> - <el-row :gutter="20"> - <el-col :sm="24" :lg="24"> - <blockquote class="text-warning" style="font-size: 14px"> - 棰嗗彇闃块噷浜戦�氱敤浜戜骇鍝�1888浼樻儬鍒� - <br /> - <el-link - href="https://www.aliyun.com/minisite/goods?userCode=brki8iof" - type="primary" - target="_blank" - >https://www.aliyun.com/minisite/goods?userCode=brki8iof</el-link - > - <br /> - 棰嗗彇鑵捐浜戦�氱敤浜戜骇鍝�2860浼樻儬鍒� - <br /> - <el-link - href="https://cloud.tencent.com/redirect.php?redirect=1025&cps_key=198c8df2ed259157187173bc7f4f32fd&from=console" - type="primary" - target="_blank" - >https://cloud.tencent.com/redirect.php?redirect=1025&cps_key=198c8df2ed259157187173bc7f4f32fd&from=console</el-link - > - <br /> - 闃块噷浜戞湇鍔″櫒鎶樻墸鍖� - <el-link href="http://aly.ruoyi.vip" type="primary" target="_blank" - >>鈽涒槢鐐规垜杩涘叆鈽氣槡</el-link - > - 鑵捐浜戞湇鍔″櫒绉掓潃鍖� - <el-link href="http://txy.ruoyi.vip" type="primary" target="_blank" - >>鈽涒槢鐐规垜杩涘叆鈽氣槡</el-link - ><br /> - <h4 class="text-danger"> - 浜戜骇鍝侀�氱敤绾㈠寘锛屽彲鍙犲姞瀹樼綉甯歌浼樻儬浣跨敤銆�(浠呴檺鏂扮敤鎴�) - </h4> - </blockquote> - - <hr /> + <el-row> + <el-col :span="24"> + <div class="grid-content bg-purple-dark" + style="font-size: 50px; font-weight: bolder; align-content: center"> + <div style="width:100%; margin-left: 300px"> + <span style="text-align: center">寰风帥鏅烘帶-绠变綋鍒荤爜</span> + </div> + </div> </el-col> </el-row> - <el-row :gutter="20"> - <el-col :sm="24" :lg="12" style="padding-left: 20px"> - <h2>鑻ヤ緷鍚庡彴绠$悊妗嗘灦</h2> - <p> - 涓�鐩存兂鍋氫竴娆惧悗鍙扮鐞嗙郴缁燂紝鐪嬩簡寰堝浼樼鐨勫紑婧愰」鐩絾鏄彂鐜版病鏈夊悎閫傝嚜宸辩殑銆備簬鏄埄鐢ㄧ┖闂蹭紤鎭椂闂村紑濮嬭嚜宸卞啓涓�濂楀悗鍙扮郴缁熴�傚姝ゆ湁浜嗚嫢渚濈鐞嗙郴缁燂紝濂瑰彲浠ョ敤浜庢墍鏈夌殑Web搴旂敤绋嬪簭锛屽缃戠珯绠$悊鍚庡彴锛岀綉绔欎細鍛樹腑蹇冿紝CMS锛孋RM锛孫A绛夌瓑锛屽綋鐒讹紝鎮ㄤ篃鍙互瀵瑰ス杩涜娣卞害瀹氬埗锛屼互鍋氬嚭鏇村己绯荤粺銆傛墍鏈夊墠绔悗鍙颁唬鐮佸皝瑁呰繃鍚庡崄鍒嗙簿绠�鏄撲笂鎵嬶紝鍑洪敊姒傜巼浣庛�傚悓鏃舵敮鎸佺Щ鍔ㄥ鎴风璁块棶銆傜郴缁熶細闄嗙画鏇存柊涓�浜涘疄鐢ㄥ姛鑳姐�� - </p> - <p> - <b>褰撳墠鐗堟湰:</b> <span>v{{ version }}</span> - </p> - <p> - <el-tag type="danger">¥鍏嶈垂寮�婧�</el-tag> - </p> - <p> - <el-button - type="primary" - size="mini" - icon="el-icon-cloudy" - plain - @click="goTarget('https://gitee.com/y_project/RuoYi-Vue')" - >璁块棶鐮佷簯</el-button - > - <el-button - size="mini" - icon="el-icon-s-home" - plain - @click="goTarget('http://ruoyi.vip')" - >璁块棶涓婚〉</el-button - > - </p> - </el-col> - - <el-col :sm="24" :lg="12" style="padding-left: 50px"> - <el-row> - <el-col :span="12"> - <h2>鎶�鏈�夊瀷</h2> - </el-col> - </el-row> - <el-row> - <el-col :span="6"> - <h4>鍚庣鎶�鏈�</h4> - <ul> - <li>SpringBoot</li> - <li>Spring Security</li> - <li>JWT</li> - <li>MyBatis</li> - <li>Druid</li> - <li>Fastjson</li> - <li>...</li> - </ul> - </el-col> - <el-col :span="6"> - <h4>鍓嶇鎶�鏈�</h4> - <ul> - <li>Vue</li> - <li>Vuex</li> - <li>Element-ui</li> - <li>Axios</li> - <li>Sass</li> - <li>Quill</li> - <li>...</li> - </ul> - </el-col> - </el-row> - </el-col> + <el-row :gutter="20" style="margin-top: 50px"> + <el-input + class="myinput" + placeholder="璇疯緭鍏ュ簭鍒楀彿" + v-model="sfcCode" + clearable + style="width: 60%; height: 50px; font-size: 34px"> + </el-input> + <el-button type="primary" style=" margin-left: 20px; width: 12%; height: 50px; font-size: 28px; " @click="carveMethod()">纭</el-button> + <el-button type="success" style=" margin-left: 20px; width: 12%; height: 50px; font-size: 28px;" @click="flushMethod()">鍒锋柊</el-button> </el-row> <el-divider /> <el-row :gutter="20"> - <el-col :xs="24" :sm="24" :md="12" :lg="8"> - <el-card class="update-log"> - <div slot="header" class="clearfix"> - <span>鑱旂郴淇℃伅</span> - </div> - <div class="body"> - <p> - <i class="el-icon-s-promotion"></i> 瀹樼綉锛�<el-link - href="http://www.ruoyi.vip" - target="_blank" - >http://www.ruoyi.vip</el-link - > - </p> - <p> - <i class="el-icon-user-solid"></i> QQ缇わ細<s> 婊�937441 </s> <s> 婊�887144332 </s> - <s> 婊�180251782 </s> <s> 婊�104180207 </s> <s> 婊�186866453 </s> <s> 婊�201396349 </s> - <s> 婊�101456076 </s> <s> 婊�101539465 </s> <s> 婊�264312783 </s> <s> 婊�167385320 </s> - <s> 婊�104748341 </s> <s> 婊�160110482 </s> <s> 婊�170801498 </s> <s> 婊�108482800 </s> - <s> 婊�101046199 </s> <s> 婊�136919097 </s> <s> 婊�143961921 </s> <s> 婊�174951577 </s> - <s> 婊�161281055 </s> <s> 婊�138988063 </s> <a href="http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=SUc-msaypcqB2UTFif4eqGlBHkKcvMNP&authKey=JdQBouY2PG%2BS%2BCzAfIgbCGNgxyahpfh24IW%2F03rPxGilhqVbisLma%2FFFnt79DHNh&noverify=0&group_code=151450850" target="_blank">151450850</a> - </p> - <p> - <i class="el-icon-chat-dot-round"></i> 寰俊锛�<a - href="javascript:;" - >/ *鑻ヤ緷</a - > - </p> - <p> - <i class="el-icon-money"></i> 鏀粯瀹濓細<a - href="javascript:;" - class="鏀粯瀹濅俊鎭�" - >/ *鑻ヤ緷</a - > - </p> - </div> - </el-card> - </el-col> - <el-col :xs="24" :sm="24" :md="12" :lg="8"> - <el-card class="update-log"> - <div slot="header" class="clearfix"> - <span>鏇存柊鏃ュ織</span> - </div> - <el-collapse accordion> - <el-collapse-item title="v3.8.8 - 2024-06-30"> - <ol> - <li>鑿滃崟绠$悊鏂板璺敱鍚嶇О</li> - <li>鏂板鏁版嵁鑴辨晱杩囨护娉ㄨВ</li> - <li>鐢ㄦ埛瀵嗙爜鏂板闈炴硶瀛楃楠岃瘉</li> - <li>闄愬埗鐢ㄦ埛鎿嶄綔鏁版嵁鏉冮檺鑼冨洿</li> - <li>浠g爜鐢熸垚鏂板鍒涘缓琛ㄧ粨鏋勫姛鑳�</li> - <li>瀹氭椂浠诲姟鐧藉悕鍗曢厤缃寖鍥寸缉灏�</li> - <li>浼樺寲浠g爜鐢熸垚涓诲瓙琛ㄥ叧鑱旀煡璇㈡柟寮�</li> - <li>Excel娉ㄨВ鏂板灞炴�omboReadDict</li> - <li>Excel娉ㄨВColumnType绫诲瀷鏂板鏂囨湰</li> - <li>鏂板鍥介檯鍖栬祫婧愭枃浠堕厤缃�</li> - <li>鍗囩骇oshi鍒版渶鏂扮増鏈�6.6.1</li> - <li>鍗囩骇druid鍒版渶鏂扮増鏈�1.2.23</li> - <li>鍗囩骇core-js鍒版渶鏂扮増鏈�3.37.1</li> - <li>鏇存柊HttpUtils涓殑User-Agent</li> - <li>鏇存柊compressionPlugin鍒�6.1.2浠ュ吋瀹筺ode18+</li> - <li>鍗囩骇spring-security鍒板畨鍏ㄧ増鏈紝闃叉婕忔礊椋庨櫓</li> - <li>鍗囩骇spring-framework鍒板畨鍏ㄧ増鏈紝闃叉婕忔礊椋庨櫓</li> - <li>浼樺寲鑷畾涔塜SS娉ㄨВ鍖归厤鏂瑰紡</li> - <li>浼樺寲缂撳瓨鐩戞帶閿悕鍒楄〃鎺掑簭鏄剧ず</li> - <li>浼樺寲瀹氭椂浠诲姟鏃ュ織榛樿鎸夋椂闂存帓搴�</li> - <li>浼樺寲榛樿鏂囦欢澶у皬瓒呰繃2G鏃犳晥鐨勯棶棰�</li> - <li>浼樺寲鏌ヨ〃鐗规畩瀛楃浣跨敤鍙嶆枩鏉犺繘琛岃浆涔�</li> - <li>浼樺寲瀹氭椂浠诲姟cron琛ㄨ揪寮忓皬鏃堕厤缃樉绀洪敊璇棶棰�</li> - <li>浼樺寲澶氫釜鑷畾鏁版嵁鏉冮檺浣跨敤in鏌ヨ,閬垮厤澶氭鎷兼帴</li> - <li>浼樺寲瀵煎叆Excel鏃惰缃甦ictType灞炴�ч噸澶嶆煡缂撳瓨闂</li> - <li>鍏朵粬缁嗚妭浼樺寲</li> - </ol> - </el-collapse-item> - <el-collapse-item title="v3.8.7 - 2023-12-08"> - <ol> - <li>鎿嶄綔鏃ュ織璁板綍閮ㄩ棬鍚嶇О</li> - <li>鍏ㄥ眬鏁版嵁瀛樺偍鐢ㄦ埛缂栧彿</li> - <li>鏂板缂栫▼寮忓垽鏂祫婧愯闂潈闄�</li> - <li>鎿嶄綔鏃ュ織鍒楄〃鏂板IP鍦板潃鏌ヨ</li> - <li>瀹氭椂浠诲姟鏂板椤靛幓闄ょ姸鎬侀�夐」</li> - <li>浠g爜鐢熸垚鏀寔閫夋嫨鍓嶇妯℃澘绫诲瀷</li> - <li>鏄鹃殣鍒楃粍浠舵敮鎸佸閫夋寮瑰嚭绫诲瀷</li> - <li>閫氱敤鎺掑簭灞炴�rderBy鍙傛暟闄愬埗闀垮害</li> - <li>Excel鑷畾涔夋暟鎹鐞嗗櫒澧炲姞鍗曞厓鏍�/宸ヤ綔绨垮璞�</li> - <li>鍗囩骇oshi鍒版渶鏂扮増鏈�6.4.8</li> - <li>鍗囩骇druid鍒版渶鏂扮増鏈�1.2.20</li> - <li>鍗囩骇fastjson鍒版渶鏂扮増2.0.43</li> - <li>鍗囩骇pagehelper鍒版渶鏂扮増1.4.7</li> - <li>鍗囩骇commons.io鍒版渶鏂扮増鏈�2.13.0</li> - <li>鍗囩骇element-ui鍒版渶鏂扮増鏈�2.15.14</li> - <li>淇浜旂骇璺敱缂撳瓨鏃犳晥闂</li> - <li>淇澶栭摼甯︾鍙e嚭鐜扮殑寮傚父</li> - <li>淇鏍戞ā鏉跨埗绾х紪鐮佸彉閲忛敊璇�</li> - <li>淇瀛楀吀琛ㄨ鎯呴〉闈㈡悳绱㈤棶棰�</li> - <li>淇鍐呴摼iframe娌℃湁浼犻�掑弬鏁伴棶棰�</li> - <li>淇鑷畾涔夊瓧鍏告牱寮忎笉鐢熸晥鐨勯棶棰�</li> - <li>淇瀛楀吀缂撳瓨鍒犻櫎鏂规硶鍙傛暟閿欒闂</li> - <li>淇Excel瀵煎叆鏁版嵁涓存椂鏂囦欢鏃犳硶鍒犻櫎闂</li> - <li>淇鏈櫥褰曞甫鍙傛暟璁块棶鎴愬姛鍚庡弬鏁颁涪澶遍棶棰�</li> - <li>淇HeaderSearch缁勪欢璺宠浆query鍙傛暟涓㈠け闂</li> - <li>淇浠g爜鐢熸垚瀵煎叆鍚庡繀濉」涓庢暟鎹簱涓嶅尮閰嶉棶棰�</li> - <li>淇Excels瀵煎叆鏃舵棤娉曡幏鍙栧埌dictType瀛楀吀鍊奸棶棰�</li> - <li>浼樺寲涓嬭浇zip鏂规硶鏂板閬僵灞�</li> - <li>浼樺寲澶村儚涓婁紶鍙傛暟鏂板鏂囦欢鍚嶇О</li> - <li>浼樺寲瀛楀吀鏍囩鏀寔鑷畾涔夊垎闅旂</li> - <li>浼樺寲鑿滃崟绠$悊绫诲瀷涓烘寜閽姸鎬佸彲閫�</li> - <li>浼樺寲鍓嶇闃查噸澶嶆彁浜ゆ暟鎹ぇ灏忛檺鍒�</li> - <li>浼樺寲TopNav鑿滃崟娌℃湁鍥炬爣svg涓嶆樉绀�</li> - <li>浼樺寲鏁板瓧閲戦澶у啓杞崲绮惧害涓㈠け闂</li> - <li>浼樺寲瀵屾枃鏈珽ditor缁勪欢妫�楠屽浘鐗囨牸寮�</li> - <li>浼樺寲椤电鍦‵irefox娴忚鍣ㄨ閬尅鐨勯棶棰�</li> - <li>浼樺寲涓汉涓績/鍩烘湰璧勬枡淇敼鏃舵暟鎹樉绀洪棶棰�</li> - <li>浼樺寲缂撳瓨鐩戞帶鍥捐〃鏀寔璺熼殢灞忓箷澶у皬鑷�傚簲璋冩暣</li> - <li>鍏朵粬缁嗚妭浼樺寲</li> - </ol> - </el-collapse-item> - <el-collapse-item title="v3.8.6 - 2023-06-30"> - <ol> - <li>鏀寔鐧诲綍IP榛戝悕鍗曢檺鍒�</li> - <li>鏂板鐩戞帶椤甸潰鍥炬爣鏄剧ず</li> - <li>鎿嶄綔鏃ュ織鏂板娑堣�楁椂闂村睘鎬�</li> - <li>灞忚斀瀹氭椂浠诲姟bean杩濊鐨勫瓧绗�</li> - <li>鏃ュ織绠$悊浣跨敤绱㈠紩鎻愬崌鏌ヨ鎬ц兘</li> - <li>鏃ュ織娉ㄨВ鏀寔鎺掗櫎鎸囧畾鐨勮姹傚弬鏁�</li> - <li>鏀寔鑷畾涔夐殣钘忓睘鎬у垪杩囨护瀛愬璞�</li> - <li>鍗囩骇oshi鍒版渶鏂扮増鏈�6.4.3</li> - <li>鍗囩骇druid鍒版渶鏂扮増鏈�1.2.16</li> - <li>鍗囩骇fastjson鍒版渶鏂扮増2.0.34</li> - <li>鍗囩骇spring-boot鍒版渶鏂扮増鏈�2.5.15</li> - <li>鍗囩骇element-ui鍒版渶鏂扮増鏈�2.15.13</li> - <li>绉婚櫎apache/commons-fileupload渚濊禆</li> - <li>淇椤甸潰鍒囨崲鏃跺竷灞�閿欎贡鐨勯棶棰�</li> - <li>淇鍖垮悕娉ㄨВAnonymous绌烘寚閽堥棶棰�</li> - <li>淇璺敱璺宠浆琚樆姝㈡椂鍐呴儴浜х敓鎶ラ敊淇℃伅闂</li> - <li>淇isMatchedIp鐨勫弬鏁板垽鏂骇鐢熺┖鎸囬拡鐨勯棶棰�</li> - <li>淇鐢ㄦ埛澶氳鑹叉暟鎹潈闄愬彲鑳藉嚭鐜版潈闄愭姮鍗囩殑鎯呭喌</li> - <li>淇寮�鍚疶opNav鍚庝竴绾ц彍鍗曡矾鐢卞弬鏁拌缃棤鏁堥棶棰�</li> - <li>淇DictTag缁勪欢value娌℃湁鍖归厤鐨勫�兼椂鍒欏睍绀簐alue</li> - <li>浼樺寲鏂囦欢涓嬭浇鍑虹幇鐨勫紓甯�</li> - <li>浼樺寲閫夋嫨鍥炬爣缁勪欢楂樹寒鍥炴樉</li> - <li>浼樺寲寮圭獥鍚庡鑸爮鍋忕Щ鐨勯棶棰�</li> - <li>浼樺寲淇敼瀵嗙爜鏃ュ織瀛樺偍鏄庢枃闂</li> - <li>浼樺寲椤电鏍忓叧闂叾浠栧嚭鐜扮殑寮傚父闂</li> - <li>浼樺寲椤电鍏抽棴宸︿晶閫夐」鎺掗櫎棣栭〉閫夐」</li> - <li>浼樺寲鍏抽棴褰撳墠tab椤佃烦杞渶鍙充晶tab椤�</li> - <li>浼樺寲缂撳瓨鍒楄〃娓呴櫎鎿嶄綔鎻愮ず涓嶅彉鐨勯棶棰�</li> - <li>浼樺寲瀛楃鏈娇鐢ㄤ笅鍒掔嚎涓嶈繘琛岄┘宄板紡澶勭悊</li> - <li>浼樺寲鐢ㄦ埛瀵煎叆鏇存柊鏃堕渶鑾峰彇鐢ㄦ埛缂栧彿闂</li> - <li>浼樺寲渚ц竟鏍忕殑骞冲彴鏍囬涓嶸UE_APP_TITLE淇濇寔鍚屾</li> - <li>浼樺寲瀵煎嚭Excel鏃惰缃甦ictType灞炴�ч噸澶嶆煡缂撳瓨闂</li> - <li>杩炴帴姹燚ruid鏀寔鏂扮殑閰嶇疆connectTimeout鍜宻ocketTimeout</li> - <li>鍏朵粬缁嗚妭浼樺寲</li> - </ol> - </el-collapse-item> - <el-collapse-item title="v3.8.5 - 2023-01-01"> - <ol> - <li>瀹氭椂浠诲姟杩濊鐨勫瓧绗�</li> - <li>閲嶇疆鏃跺彇娑堥儴闂ㄩ�変腑</li> - <li>鏂板杩斿洖璀﹀憡娑堟伅鎻愮ず</li> - <li>蹇界暐涓嶅繀瑕佺殑灞炴�ф暟鎹繑鍥�</li> - <li>淇敼鍙傛暟閿悕鏃剁Щ闄ゅ墠缂撳瓨閰嶇疆</li> - <li>瀵煎叆鏇存柊鐢ㄦ埛鏁版嵁鍓嶆牎楠屾暟鎹潈闄�</li> - <li>鍏煎Excel涓嬫媺妗嗗唴瀹硅繃澶氭棤娉曟樉绀虹殑闂</li> - <li>鍗囩骇echarts鍒版渶鏂扮増鏈�5.4.0</li> - <li>鍗囩骇core-js鍒版渶鏂扮増鏈�3.25.3</li> - <li>鍗囩骇oshi鍒版渶鏂扮増鏈�6.4.0</li> - <li>鍗囩骇kaptcha鍒版渶鏂扮増2.3.3</li> - <li>鍗囩骇druid鍒版渶鏂扮増鏈�1.2.15</li> - <li>鍗囩骇fastjson鍒版渶鏂扮増2.0.20</li> - <li>鍗囩骇pagehelper鍒版渶鏂扮増1.4.6</li> - <li>浼樺寲寮圭獥鍐呭杩囧灞曠ず涓嶅叏闂</li> - <li>浼樺寲swagger-ui闈欐�佽祫婧愪娇鐢ㄧ紦瀛�</li> - <li>寮�鍚疶opNav娌℃湁瀛愯彍鍗曢殣钘忎晶杈规爮</li> - <li>鍒犻櫎fuse鏃犳晥閫夐」maxPatternLength</li> - <li>浼樺寲瀵煎嚭瀵硅薄鐨勫瓙鍒楄〃涓虹┖浼氬嚭鐜癧]闂</li> - <li>浼樺寲缂栬緫澶村儚鏃堕�忔槑閮ㄥ垎浼氬彉鎴愰粦鑹查棶棰�</li> - <li>浼樺寲灏忓睆骞曚笂淇敼澶村儚鐣岄潰甯冨眬閿欎綅鐨勯棶棰�</li> - <li>淇浠g爜鐢熸垚鍕鹃�夊睘鎬ф棤鏁堥棶棰�</li> - <li>淇鏂囦欢涓婁紶缁勪欢鏍煎紡楠岃瘉闂</li> - <li>淇鍥炴樉鏁版嵁瀛楀吀鏁扮粍寮傚父闂</li> - <li>淇sheet瓒呭嚭鏈�澶ц鏁板紓甯搁棶棰�</li> - <li>淇Log娉ㄨВGET璇锋眰璁板綍涓嶅埌鍙傛暟闂</li> - <li>淇璋冨害鏃ュ織鐐瑰嚮澶氭鏁版嵁涓嶅彉鍖栫殑闂</li> - <li>淇涓婚棰滆壊鍦―rawer缁勪欢涓嶄細鍔犺浇闂</li> - <li>淇鏂囦欢鍚嶅寘鍚壒娈婂瓧绗︾殑鏂囦欢鏃犳硶涓嬭浇闂</li> - <li>淇table涓洿澶氭寜閽垏鎹富棰樿壊鏈敓鏁堜慨澶嶉棶棰�</li> - <li>淇鏌愪簺鐗规�х殑鐜鐢熸垚浠g爜鍙樹贡鐮乀XT鏂囦欢闂</li> - <li>淇浠g爜鐢熸垚鍥剧墖/鏂囦欢/鍗曢�夋椂閫夋嫨蹇呭~鏃犳硶鏍¢獙闂</li> - <li>淇鏌愪簺鐗规�х殑鎯呭喌鐢ㄦ埛缂栬緫瀵硅瘽妗嗕腑瑙掕壊鍜岄儴闂ㄦ棤娉曚慨鏀归棶棰�</li> - <li>鍏朵粬缁嗚妭浼樺寲</li> - </ol> - </el-collapse-item> - <el-collapse-item title="v3.8.4 - 2022-09-26"> - <ol> - <li>鏁版嵁閫昏緫鍒犻櫎涓嶈繘琛屽敮涓�楠岃瘉</li> - <li>Excel娉ㄨВ鏀寔瀵煎嚭瀵硅薄鐨勫瓙鍒楄〃鏂规硶</li> - <li>Excel娉ㄨВ鏀寔鑷畾涔夐殣钘忓睘鎬у垪</li> - <li>Excel娉ㄨВ鏀寔backgroundColor灞炴�ц缃儗鏅壊</li> - <li>鏀寔閰嶇疆瀵嗙爜鏈�澶ч敊璇鏁�/閿佸畾鏃堕棿</li> - <li>鐧诲綍鏃ュ織鏂板瑙i攣璐︽埛鍔熻兘</li> - <li>閫氱敤涓嬭浇鏂规硶鏂板config閰嶇疆閫夐」</li> - <li>鏀寔澶氭潈闄愬瓧绗﹀尮閰嶈鑹叉暟鎹潈闄�</li> - <li>椤甸潰鍐呭祵iframe鍒囨崲tab涓嶅埛鏂版暟鎹�</li> - <li>鎿嶄綔鏃ュ織璁板綍鏀寔鎺掗櫎鏁忔劅灞炴�у瓧娈�</li> - <li>淇澶氭枃浠朵笂浼犳姤閿欏嚭鐜扮殑寮傚父闂</li> - <li>淇鍥剧墖棰勮缁勪欢src灞炴�т负null鍊兼帶鍒跺彴鎶ラ敊闂</li> - <li>鍗囩骇oshi鍒版渶鏂扮増鏈�6.2.2</li> - <li>鍗囩骇fastjson鍒版渶鏂扮増2.0.14</li> - <li>鍗囩骇pagehelper鍒版渶鏂扮増1.4.3</li> - <li>鍗囩骇core-js鍒版渶鏂扮増鏈�3.25.2</li> - <li>鍗囩骇element-ui鍒版渶鏂扮増鏈�2.15.10</li> - <li>浼樺寲浠诲姟杩囨湡涓嶆墽琛岃皟搴�</li> - <li>浼樺寲瀛楀吀鏁版嵁浣跨敤store瀛樺彇</li> - <li>浼樺寲淇敼璧勬枡澶村儚琚鐩栫殑闂</li> - <li>浼樺寲淇敼鐢ㄦ埛鐧诲綍璐﹀彿閲嶅楠岃瘉</li> - <li>浼樺寲浠g爜鐢熸垚鍚屾鍚庡�糔ULL闂</li> - <li>浼樺寲瀹氭椂浠诲姟鏀寔鎵ц鐖剁被鏂规硶</li> - <li>浼樺寲鐢ㄦ埛涓汉淇℃伅鎺ュ彛闃叉淇敼閮ㄩ棬</li> - <li>浼樺寲甯冨眬璁剧疆浣跨敤el-drawer鎶藉眽鏄剧ず</li> - <li>浼樺寲娌℃湁鏉冮檺鐨勭敤鎴风紪杈戦儴闂ㄧ己灏戞暟鎹�</li> - <li>浼樺寲鏃ュ織娉ㄨВ璁板綍闄愬埗璇锋眰鍦板潃鐨勯暱搴�</li> - <li>浼樺寲excel/scale灞炴�у鍑哄崟鍏冩牸鏁板�肩被鍨�</li> - <li>浼樺寲鏃ュ織鎿嶄綔涓噸缃寜閽椂閲嶅鏌ヨ鐨勯棶棰�</li> - <li>浼樺寲澶氫釜鐩稿悓瑙掕壊鏁版嵁瀵艰嚧鏉冮檺SQL閲嶅闂</li> - <li>浼樺寲琛ㄦ牸涓婂彸渚у伐鍏锋潯锛堟悳绱㈡寜閽樉闅�&鍙充晶鏍峰紡鍑稿嚭锛�</li> - <li>鍏朵粬缁嗚妭浼樺寲</li> - </ol> - </el-collapse-item> - <el-collapse-item title="v3.8.3 - 2022-06-27"> - <ol> - <li>鏂板缂撳瓨鍒楄〃鑿滃崟鍔熻兘</li> - <li>浠g爜鐢熸垚鏍戣〃鏂板(灞曞紑/鎶樺彔)</li> - <li>Excel娉ㄨВ鏀寔color瀛椾綋棰滆壊</li> - <li>鏂板Anonymous鍖垮悕璁块棶涓嶉壌鏉冩敞瑙�</li> - <li>鐢ㄦ埛澶村儚涓婁紶闄愬埗鍙兘涓哄浘鐗囨牸寮�</li> - <li>鎺ュ彛浣跨敤娉涘瀷浣垮叾鐪嬪埌鍝嶅簲灞炴�у瓧娈�</li> - <li>妫�鏌ュ畾鏃朵换鍔ean鎵�鍦ㄥ寘鍚嶆槸鍚︿负鐧藉悕鍗曢厤缃�</li> - <li>娣诲姞椤电openPage鏀寔浼犻�掑弬鏁�</li> - <li>鐢ㄦ埛缂撳瓨淇℃伅娣诲姞閮ㄩ棬ancestors绁栫骇鍒楄〃</li> - <li>鍗囩骇element-ui鍒版渶鏂扮増鏈�2.15.8</li> - <li>鍗囩骇oshi鍒版渶鏂扮増鏈�6.1.6</li> - <li>鍗囩骇druid鍒版渶鏂扮増鏈�1.2.11</li> - <li>鍗囩骇fastjson鍒版渶鏂扮増2.0.8</li> - <li>鍗囩骇spring-boot鍒版渶鏂扮増鏈�2.5.14</li> - <li>闄嶇骇jsencrypt鐗堟湰鍏煎IE娴忚鍣�</li> - <li>鍒犻櫎澶氫綑鐨剆alt瀛楁</li> - <li>鏂板鑾峰彇涓嶅甫鍚庣紑鏂囦欢鍚嶇О鏂规硶</li> - <li>鏂板鑾峰彇閰嶇疆鏂囦欢涓殑灞炴�у�兼柟娉�</li> - <li>鏂板鍐呭缂栫爜/瑙g爜鏂逛究鎻掍欢闆嗘垚浣跨敤</li> - <li>瀛楀吀绫诲瀷蹇呴』浠ュ瓧姣嶅紑澶达紝涓斿彧鑳戒负锛堝皬鍐欏瓧姣嶏紝鏁板瓧锛屼笅婊戠嚎锛�</li> - <li>浼樺寲璁剧疆鍒嗛〉鍙傛暟榛樿鍊�</li> - <li>浼樺寲瀵圭┖瀛楃涓插弬鏁板鐞嗙殑杩囨护</li> - <li>浼樺寲鏄剧ず椤哄簭orderNum绫诲瀷涓烘暣鍨�</li> - <li>浼樺寲琛ㄥ崟鏋勫缓鎸夐挳涓嶆樉绀烘鍒欐牎楠�</li> - <li>浼樺寲瀛楀吀鏁版嵁鍥炴樉鏍峰紡涓嬫媺妗嗘樉绀哄��</li> - <li>浼樺寲R鍝嶅簲鎴愬姛鐘舵�佺爜涓庡叏灞�淇濇寔涓�鑷�</li> - <li>浼樺寲druid寮�鍚痺all杩囨护鍣ㄥ嚭鐜扮殑寮傚父闂</li> - <li>浼樺寲鐢ㄦ埛绠$悊宸︿晶鏍戝瀷缁勪欢澧炲姞閫変腑楂樹寒淇濇寔</li> - <li>浼樺寲鏂板鐢ㄦ埛涓庤鑹蹭俊鎭�&鐢ㄦ埛涓庡矖浣嶄俊鎭�昏緫</li> - <li>浼樺寲榛樿涓嶅惎鐢ㄥ帇缂╂枃浠剁紦瀛橀槻姝ode_modules杩囧ぇ</li> - <li>淇瀛楀吀鏁版嵁鏄剧ず涓嶅叏闂</li> - <li>淇鎿嶄綔鏃ュ織鏌ヨ绫诲瀷鏉′欢涓�0鏃朵細鏌ュ埌鎵�鏈夋暟鎹�</li> - <li>淇Excel娉ㄨВprompt/combo鍚屾椂浣跨敤涓嶇敓鏁堥棶棰�</li> - <li>鍏朵粬缁嗚妭浼樺寲</li> - </ol> - </el-collapse-item> - <el-collapse-item title="v3.8.2 - 2022-04-01"> - <ol> - <li>鍓嶇鏀寔璁剧疆鏄惁闇�瑕侀槻姝㈡暟鎹噸澶嶆彁浜�</li> - <li>寮�鍚疶opNav娌℃湁瀛愯彍鍗曟儏鍐甸殣钘忎晶杈规爮</li> - <li>渚ц竟鏍忚彍鍗曞悕绉拌繃闀挎偓鍋滄樉绀烘爣棰�</li> - <li>鐢ㄦ埛璁块棶鎺у埗鏃舵牎楠屾暟鎹潈闄愶紝闃叉瓒婃潈</li> - <li>瀵煎嚭Excel鏃跺睆钄藉叕寮忥紝闃叉CSV娉ㄥ叆椋庨櫓</li> - <li>缁勪欢ImagePreview鏀寔澶氬浘棰勮鏄剧ず</li> - <li>缁勪欢ImageUpload鏀寔澶氬浘鍚屾椂閫夋嫨涓婁紶</li> - <li>缁勪欢FileUpload鏀寔澶氭枃浠跺悓鏃堕�夋嫨涓婁紶</li> - <li>鏈嶅姟鐩戞帶鏂板杩愯鍙傛暟淇℃伅鏄剧ず</li> - <li>瀹氭椂浠诲姟鐩爣瀛楃涓茶繃婊ょ壒娈婂瓧绗�</li> - <li>瀹氭椂浠诲姟鐩爣瀛楃涓查獙璇佸寘鍚嶇櫧鍚嶅崟</li> - <li>浠g爜鐢熸垚鍒楄〃鍥剧墖鏀寔棰勮</li> - <li>浠g爜鐢熸垚缂栬緫淇敼鎵撳紑鏂伴〉绛�</li> - <li>浠g爜鐢熸垚鏂板Java绫诲瀷Boolean</li> - <li>浠g爜鐢熸垚瀛愯〃鏀寔鏃ユ湡/瀛楀吀閰嶇疆</li> - <li>浠g爜鐢熸垚鍚屾淇濈暀蹇呭~/绫诲瀷閫夐」</li> - <li>鍗囩骇oshi鍒版渶鏂扮増鏈�6.1.2</li> - <li>鍗囩骇fastjson鍒版渶鏂扮増1.2.80</li> - <li>鍗囩骇pagehelper鍒版渶鏂扮増1.4.1</li> - <li>鍗囩骇spring-boot鍒版渶鏂扮増鏈�2.5.11</li> - <li>鍗囩骇spring-boot-mybatis鍒版渶鏂扮増2.2.2</li> - <li>娣诲姞閬楁紡鐨勫垎椤靛弬鏁板悎鐞嗗寲灞炴��</li> - <li>淇敼npm鍗冲皢杩囨湡鐨勬敞鍐屾簮鍦板潃</li> - <li>淇鍒嗛〉缁勪欢璇锋眰涓ゆ闂</li> - <li>淇閫氱敤鏂囦欢涓嬭浇鎺ュ彛璺ㄥ煙闂</li> - <li>淇Xss娉ㄨВ瀛楁鍊间负绌烘椂鐨勫紓甯搁棶棰�</li> - <li>淇閫夐」鍗$偣鍑诲彸閿埛鏂颁涪澶卞弬鏁伴棶棰�</li> - <li>淇琛ㄥ崟娓呴櫎鍏冪礌浣嶇疆鏈瀭鐩村眳涓棶棰�</li> - <li>淇鏈嶅姟鐩戞帶涓繍琛屽弬鏁版樉绀烘潯浠堕敊璇�</li> - <li>淇瀵煎叆Excel鏃跺瓧鍏稿瓧娈电被鍨嬩负Long杞箟涓虹┖闂</li> - <li>淇鐧诲綍瓒呮椂鍒锋柊椤甸潰璺宠浆鐧诲綍椤甸潰杩樻彁绀洪噸鏂扮櫥褰曢棶棰�</li> - <li>浼樺寲鍔犺浇瀛楀吀缂撳瓨鏁版嵁</li> - <li>浼樺寲IP鍦板潃鑾峰彇鍒板涓殑闂</li> - <li>浼樺寲浠诲姟闃熷垪婊℃椂浠诲姟鎷掔粷绛栫暐</li> - <li>浼樺寲鏂囦欢涓婁紶鍏煎Weblogic鐜</li> - <li>浼樺寲瀹氭椂浠诲姟榛樿淇濆瓨鍒板唴瀛樹腑鎵ц</li> - <li>浼樺寲閮ㄩ棬淇敼缂╂斁鍚庡嚭鐜扮殑閿欎綅闂</li> - <li>浼樺寲Excel鏍煎紡鍖栦笉鍚岀被鍨嬬殑鏃ユ湡瀵硅薄</li> - <li>浼樺寲鑿滃崟琛ㄥ叧閿瓧瀵艰嚧鐨勬彃浠舵姤閿欓棶棰�</li> - <li>浼樺寲Oracle鐢ㄦ埛澶村儚鍒椾负绌烘椂涓嶆樉绀洪棶棰�</li> - <li>浼樺寲椤甸潰鑻ユ湭鍖归厤鍒板瓧鍏告爣绛惧垯杩斿洖鍘熷瓧鍏稿��</li> - <li>浼樺寲淇鐧诲綍澶辨晥鍚庡娆¤姹傛彁绀哄娆″脊绐楅棶棰�</li> - <li>鍏朵粬缁嗚妭浼樺寲</li> - </ol> - </el-collapse-item> - <el-collapse-item title="v3.8.1 - 2022-01-01"> - <ol> - <li>鏂板Vue3鍓嶇浠g爜鐢熸垚妯℃澘</li> - <li>鏂板鍥剧墖棰勮缁勪欢</li> - <li>鏂板鍘嬬缉鎻掍欢瀹炵幇鎵撳寘Gzip</li> - <li>鑷畾涔墄ss鏍¢獙娉ㄨВ瀹炵幇</li> - <li>鑷畾涔夋枃瀛楀鍒跺壀璐存寚浠�</li> - <li>浠g爜鐢熸垚棰勮鏀寔澶嶅埗鍐呭</li> - <li>璺敱鏀寔鍗曠嫭閰嶇疆鑿滃崟鎴栬鑹叉潈闄�</li> - <li>鐢ㄦ埛绠$悊閮ㄩ棬鏌ヨ閫夋嫨鑺傜偣鍚庡垎椤靛弬鏁板垵濮�</li> - <li>淇鐢ㄦ埛鍒嗛厤瑙掕壊灞炴�ч敊璇�</li> - <li>淇鎵撳寘鍚庡瓧浣撳浘鏍囧伓鐜扮殑涔辩爜闂</li> - <li>淇鑿滃崟绠$悊閲嶇疆琛ㄥ崟鍑虹幇鐨勯敊璇�</li> - <li>淇鐗堟湰宸紓瀵艰嚧鐨勬噿鍔犺浇鎶ラ敊闂</li> - <li>淇Cron缁勪欢涓懆鍥炴樉闂</li> - <li>淇瀹氭椂浠诲姟澶氬弬鏁伴�楀彿鍒嗛殧鐨勯棶棰�</li> - <li>淇鏍规嵁ID鏌ヨ鍒楄〃鍙兘鍑虹幇鐨勪富閿孩鍑洪棶棰�</li> - <li>淇tomcat閰嶇疆鍙傛暟宸茶繃鏈熼棶棰�</li> - <li>鍗囩骇clipboard鍒版渶鏂扮増鏈�2.0.8</li> - <li>鍗囩骇oshi鍒版渶鏂扮増鏈瑅5.8.6</li> - <li>鍗囩骇fastjson鍒版渶鏂扮増1.2.79</li> - <li>鍗囩骇spring-boot鍒版渶鏂扮増鏈�2.5.8</li> - <li>鍗囩骇log4j2鍒�2.17.1锛岄槻姝㈡紡娲為闄�</li> - <li>浼樺寲涓嬭浇瑙f瀽blob寮傚父鎻愮ず</li> - <li>浼樺寲浠g爜鐢熸垚瀛楀吀缁勯噸澶嶉棶棰�</li> - <li>浼樺寲鏌ヨ鐢ㄦ埛鐨勮鑹茬粍&宀椾綅缁勪唬鐮�</li> - <li>浼樺寲瀹氭椂浠诲姟cron琛ㄨ揪寮忓皬鏃惰缃�24</li> - <li>浼樺寲鐢ㄦ埛瀵煎叆鎻愮ず婧㈠嚭鍒欐樉绀烘粴鍔ㄦ潯</li> - <li>浼樺寲闃查噸澶嶆彁浜ゆ爣璇嗙粍鍚堜负(key+url+header)</li> - <li>浼樺寲鍒嗛〉鏂规硶璁剧疆鎴愰�氱敤鏂逛究鐏垫椿璋冪敤</li> - <li>鍏朵粬缁嗚妭浼樺寲</li> - </ol> - </el-collapse-item> - <el-collapse-item title="v3.8.0 - 2021-12-01"> - <ol> - <li>鏂板閰嶅骞跺悓姝ョ殑Vue3鍓嶇鐗堟湰</li> - <li>鏂板閫氱敤鏂规硶绠�鍖栨ā鎬�/缂撳瓨/涓嬭浇/鏉冮檺/椤电浣跨敤</li> - <li>浼樺寲瀵煎嚭鏁版嵁/浣跨敤閫氱敤涓嬭浇鏂规硶</li> - <li>Excel娉ㄨВ鏀寔鑷畾涔夋暟鎹鐞嗗櫒</li> - <li>Excel娉ㄨВ鏀寔瀵煎叆瀵煎嚭鏍囬淇℃伅</li> - <li>Excel瀵煎叆鏀寔@Excels娉ㄨВ</li> - <li>鏂板缁勪欢data-dict锛岀畝鍖栨暟鎹瓧鍏镐娇鐢�</li> - <li>鏂板Jaxb渚濊禆锛岄槻姝dk8浠ヤ笂鍑虹幇鐨勫吋瀹归敊璇�</li> - <li>鐢熶骇鐜浣跨敤璺敱鎳掑姞杞芥彁鍗囬〉闈㈠搷搴旈�熷害</li> - <li>淇浜旂骇浠ヤ笂鑿滃崟鍑虹幇鐨�404闂</li> - <li>闃查噸鎻愪氦娉ㄨВ鏀寔閰嶇疆闂撮殧鏃堕棿/鎻愮ず娑堟伅</li> - <li>鏃ュ織娉ㄨВ鏂板鏄惁淇濆瓨鍝嶅簲鍙傛暟</li> - <li>浠诲姟灞忚斀杩濊瀛楃&鍙傛暟蹇界暐鍙屽紩鍙蜂腑鐨勯�楀彿</li> - <li>鍗囩骇SpringBoot鍒版渶鏂扮増鏈�2.5.6</li> - <li>鍗囩骇pagehelper鍒版渶鏂扮増1.4.0</li> - <li>鍗囩骇spring-boot-mybatis鍒版渶鏂扮増2.2.0</li> - <li>鍗囩骇oshi鍒版渶鏂扮増鏈瑅5.8.2</li> - <li>鍗囩骇druid鍒版渶鏂扮増1.2.8</li> - <li>鍗囩骇velocity鍒版渶鏂扮増鏈�2.3</li> - <li>鍗囩骇fastjson鍒版渶鏂扮増1.2.78</li> - <li>鍗囩骇axios鍒版渶鏂扮増鏈�0.24.0</li> - <li>鍗囩骇dart-sass鍒扮増鏈�1.32.13</li> - <li>鍗囩骇core-js鍒版渶鏂扮増鏈�3.19.1</li> - <li>鍗囩骇jsencrypt鍒版渶鏂扮増鏈�3.2.1</li> - <li>鍗囩骇js-cookie鍒版渶鏂扮増鏈�3.0.1</li> - <li>鍗囩骇file-saver鍒版渶鏂扮増鏈�2.0.5</li> - <li>鍗囩骇sass-loader鍒版渶鏂扮増鏈�10.1.1</li> - <li>鍗囩骇element-ui鍒版渶鏂扮増鏈�2.15.6</li> - <li>鏂板sendGet鏃犲弬璇锋眰鏂规硶</li> - <li>绂佺敤el-tag缁勪欢鐨勬笎鍙樺姩鐢�</li> - <li>浠g爜鐢熸垚鐐瑰嚮棰勮閲嶇疆婵�娲籺ab</li> - <li>AjaxResult閲嶅啓put鏂规硶锛屼互鏂逛究閾惧紡璋冪敤</li> - <li>浼樺寲鐧诲綍/楠岃瘉鐮佽姹俬eaders涓嶈缃畉oken</li> - <li>浼樺寲鐢ㄦ埛涓汉淇℃伅鎺ュ彛闃叉淇敼鐢ㄦ埛鍚�</li> - <li>浼樺寲Cron琛ㄨ揪寮忕敓鎴愬櫒鍏抽棴鏃堕攢姣侀伩鍏嶇紦瀛�</li> - <li>浼樺寲娉ㄥ唽鎴愬姛鎻愮ず娑堟伅绫诲瀷success</li> - <li>浼樺寲aop璇硶锛屼娇鐢╯pring鑷姩娉ㄥ叆娉ㄨВ</li> - <li>浼樺寲璁板綍鐧诲綍淇℃伅锛岀Щ闄や笉蹇呰鐨勪慨鏀�</li> - <li>浼樺寲mybatis鍏ㄥ眬榛樿鐨勬墽琛屽櫒</li> - <li>浼樺寲Excel瀵煎叆鍥剧墖鍙兘鍑虹幇鐨勫紓甯�</li> - <li>淇浠g爜鐢熸垚妯℃澘涓诲瓙琛ㄥ垹闄ょ己灏戜簨鍔�</li> - <li>淇鏃ュ織璁板綍鍙兘鍑虹幇鐨勮浆鎹㈠紓甯�</li> - <li>淇浠g爜鐢熸垚澶嶉�夋瀛楀吀閬楁紡闂</li> - <li>淇鍏抽棴xss鍔熻兘瀵艰嚧鍙噸澶嶈RepeatableFilter澶辨晥</li> - <li>淇瀛楃涓叉棤娉曡鍙嶈浆涔夐棶棰�</li> - <li>淇鍚庣涓诲瓙琛ㄤ唬鐮佹ā鏉挎柟娉曞悕鐢熸垚閿欒闂</li> - <li>淇xss杩囨护鍚庢牸寮忓嚭鐜扮殑寮傚父</li> - <li>淇swagger娌℃湁鎸囧畾dataTypeClass瀵艰嚧鍚姩鍑虹幇warn鏃ュ織</li> - <li>鍏朵粬缁嗚妭浼樺寲</li> - </ol> - </el-collapse-item> - <el-collapse-item title="v3.7.0 - 2021-09-13"> - <ol> - <li>鍙傛暟绠$悊鏀寔閰嶇疆楠岃瘉鐮佸紑鍏�</li> - <li>鏂板鏄惁寮�鍚敤鎴锋敞鍐屽姛鑳�</li> - <li>瀹氭椂浠诲姟鏀寔鍦ㄧ嚎鐢熸垚cron琛ㄨ揪寮�</li> - <li>鑿滃崟绠$悊鏀寔閰嶇疆璺敱鍙傛暟</li> - <li>鏀寔鑷畾涔夋敞瑙e疄鐜版帴鍙i檺娴�</li> - <li>Excel娉ㄨВ鏀寔Image鍥剧墖瀵煎叆</li> - <li>鑷畾涔夊脊灞傛孩鍑烘粴鍔ㄦ牱寮�</li> - <li>鑷畾涔夊彲鎷栧姩寮圭獥瀹藉害鎸囦护</li> - <li>鑷畾涔夊彲鎷栧姩寮圭獥楂樺害鎸囦护</li> - <li>淇浠绘剰璐︽埛瓒婃潈闂</li> - <li>淇敼鏃舵鏌ョ敤鎴锋暟鎹潈闄愯寖鍥�</li> - <li>淇淇濆瓨閰嶇疆涓婚棰滆壊澶辨晥闂</li> - <li>鏂板鏆楄壊鑿滃崟椋庢牸涓婚</li> - <li>鑿滃崟&閮ㄩ棬鏂板灞曞紑/鎶樺彔鍔熻兘</li> - <li>椤电鏂板鍏抽棴宸︿晶&娣诲姞鍥炬爣</li> - <li>椤堕儴鑿滃崟鎺掗櫎闅愯棌鐨勯粯璁よ矾鐢�</li> - <li>椤堕儴鑿滃崟鍚屾绯荤粺涓婚鏍峰紡</li> - <li>璺宠浆璺敱楂樹寒鐩稿搴旂殑鑿滃崟鏍�</li> - <li>浠g爜鐢熸垚涓诲瓙琛ㄥ閫夎鏁版嵁</li> - <li>鏃ユ湡鑼冨洿鏀寔娣诲姞澶氱粍</li> - <li>鍗囩骇element-ui鍒版渶鏂扮増鏈�2.15.5</li> - <li>鍗囩骇oshi鍒版渶鏂扮増鏈瑅5.8.0</li> - <li>鍗囩骇commons.io鍒版渶鏂扮増鏈瑅2.11.0</li> - <li>瀹氭椂浠诲姟灞忚斀ldap杩滅▼璋冪敤</li> - <li>瀹氭椂浠诲姟灞忚斀http(s)杩滅▼璋冪敤</li> - <li>琛ュ厖瀹氭椂浠诲姟琛ㄥ瓧娈垫敞閲�</li> - <li>瀹氭椂浠诲姟瀵规鏌ュ紓甯歌繘琛屼簨鍔″洖婊�</li> - <li>鍚敤鐖堕儴闂ㄧ姸鎬佹帓闄ら《绾ц妭鐐�</li> - <li>瀵屾枃鏈柊澧炰笂浼犳枃浠跺ぇ灏忛檺鍒�</li> - <li>榛樿棣栭〉浣跨敤keep-alive缂撳瓨</li> - <li>淇敼浠g爜鐢熸垚瀛楀吀鍥炴樉鏍峰紡</li> - <li>鑷畾涔夊垎椤靛悎鐞嗗寲浼犲叆鍙傛暟</li> - <li>淇瀛楀吀缁勪欢鍊间负鏁村舰涓嶆樉绀洪棶棰�</li> - <li>淇瀹氭椂浠诲姟鏃ュ織鎵ц鐘舵�佹樉绀�</li> - <li>瑙掕壊&鑿滃崟鏂板瀛楁灞炴�ф彁绀轰俊鎭�</li> - <li>淇瑙掕壊鍒嗛厤鐢ㄦ埛椤甸潰鍙傛暟绫诲瀷閿欒鎻愰啋</li> - <li>浼樺寲甯冨眬璁剧疆鍔ㄧ敾鐗规晥</li> - <li>浼樺寲寮傚父澶勭悊淇℃伅</li> - <li>浼樺寲閿欒token瀵艰嚧鐨勮В鏋愬紓甯�</li> - <li>瀵嗙爜妗嗘柊澧炴樉绀哄垏鎹㈠瘑鐮佸浘鏍�</li> - <li>瀹氭椂浠诲姟鏂板鏇村鎿嶄綔</li> - <li>鏇村鎿嶄綔鎸夐挳娣诲姞鏉冮檺鎺у埗</li> - <li>瀵煎叆鐢ㄦ埛鏍峰紡浼樺寲</li> - <li>鎻愬彇閫氱敤鏂规硶鍒板熀绫绘帶鍒跺櫒</li> - <li>浼樺寲浣跨敤鏉冮檺宸ュ叿鑾峰彇鐢ㄦ埛淇℃伅</li> - <li>浼樺寲鐢ㄦ埛涓嶈兘鍒犻櫎鑷繁</li> - <li>浼樺寲XSS璺ㄧ珯鑴氭湰杩囨护</li> - <li>浼樺寲浠g爜鐢熸垚妯℃澘</li> - <li>楠岃瘉鐮侀粯璁�20s瓒呮椂</li> - <li>BLOB涓嬭浇鏃舵竻闄RL瀵硅薄寮曠敤</li> - <li>浠g爜鐢熸垚瀵煎叆琛ㄦ寜鍒涘缓鏃堕棿鎺掑簭</li> - <li>淇浠g爜鐢熸垚椤甸潰鏁版嵁缂栬緫淇濆瓨涔嬪悗鎬绘槸璺宠浆绗竴椤电殑闂</li> - <li>淇甯afari娴忚鍣ㄦ棤娉曟牸寮忓寲utc鏃ユ湡鏍煎紡yyyy-MM-dd'T'HH:mm:ss.SSS闂</li> - <li>澶氬浘涓婁紶缁勪欢绉婚櫎澶氫綑鐨刟pi鍦板潃&楠岃瘉澶辫触瀵艰嚧鍥剧墖鍒犻櫎闂&鏃犳硶鍒犻櫎鐩稿簲鍥剧墖淇</li> - <li>鍏朵粬缁嗚妭浼樺寲</li> - </ol> - </el-collapse-item> - <el-collapse-item title="v3.6.0 - 2021-07-12"> - <ol> - <li>瑙掕壊绠$悊鏂板鍒嗛厤鐢ㄦ埛鍔熻兘</li> - <li>鐢ㄦ埛绠$悊鏂板鍒嗛厤瑙掕壊鍔熻兘</li> - <li>鏃ュ織鍒楄〃鏀寔鎺掑簭鎿嶄綔</li> - <li>浼樺寲鍙傛暟&瀛楀吀缂撳瓨鎿嶄綔</li> - <li>绯荤粺甯冨眬閰嶇疆鏀寔鍔ㄦ�佹爣棰樺紑鍏�</li> - <li>鑿滃崟璺敱閰嶇疆鏀寔鍐呴摼璁块棶</li> - <li>榛樿璁块棶鍚庣棣栭〉鏂板鎻愮ず璇�</li> - <li>瀵屾枃鏈粯璁や笂浼犺繑鍥瀠rl绫诲瀷</li> - <li>鏂板鑷畾涔夊脊绐楁嫋鎷芥寚浠�</li> - <li>鍏ㄥ眬娉ㄥ唽甯哥敤閫氱敤缁勪欢</li> - <li>鍏ㄥ眬鎸傝浇瀛楀吀鏍囩缁勪欢</li> - <li>ImageUpload缁勪欢鏀寔澶氬浘鐗囦笂浼�</li> - <li>FileUpload缁勪欢鏀寔澶氭枃浠朵笂浼�</li> - <li>鏂囦欢涓婁紶缁勪欢娣诲姞鏁伴噺闄愬埗灞炴��</li> - <li>瀵屾枃鏈紪杈戠粍浠舵坊鍔犵被鍨嬪睘鎬�</li> - <li>瀵屾枃鏈粍浠跺伐鍏锋爮閰嶇疆瑙嗛</li> - <li>灏佽閫氱敤iframe缁勪欢</li> - <li>闄愬埗瓒呯骇绠$悊鍛樹笉鍏佽鎿嶄綔</li> - <li>鐢ㄦ埛淇℃伅闀垮害鏍¢獙闄愬埗</li> - <li>鍒嗛〉缁勪欢鏂板pagerCount灞炴��</li> - <li>娣诲姞bat鑴氭湰鎵ц搴旂敤</li> - <li>鍗囩骇oshi鍒版渶鏂扮増鏈瑅5.7.4</li> - <li>鍗囩骇element-ui鍒版渶鏂扮増鏈�2.15.2</li> - <li>鍗囩骇pagehelper鍒版渶鏂扮増1.3.1</li> - <li>鍗囩骇commons.io鍒版渶鏂扮増鏈瑅2.10.0</li> - <li>鍗囩骇commons.fileupload鍒版渶鏂扮増鏈瑅1.4</li> - <li>鍗囩骇swagger鍒版渶鏂扮増鏈瑅3.0.0</li> - <li>淇鍏抽棴confirm鎻愮ず妗嗘帶鍒跺彴鎶ラ敊闂</li> - <li>淇瀛樺湪鐨凷QL娉ㄥ叆婕忔礊闂</li> - <li>瀹氭椂浠诲姟灞忚斀rmi杩滅▼璋冪敤</li> - <li>淇鐢ㄦ埛鎼滅储鍒嗛〉鍙橀噺閿欒</li> - <li>淇瀵煎嚭瑙掕壊鏁版嵁鑼冨洿缈昏瘧缂哄皯浠呮湰浜�</li> - <li>淇琛ㄥ崟鏋勫缓閫夋嫨涓嬫媺閫夋嫨鎺у埗鍙版姤閿欓棶棰�</li> - <li>浼樺寲鍥剧墖宸ュ叿绫昏鍙栨枃浠�</li> - <li>鍏朵粬缁嗚妭浼樺寲</li> - </ol> - </el-collapse-item> - <el-collapse-item title="v3.5.0 - 2021-05-25"> - <ol> - <li>鏂板鑿滃崟瀵艰埅鏄剧ず椋庢牸TopNav锛坒alse涓哄乏渚у鑸彍鍗曪紝true涓洪《閮ㄥ鑸彍鍗曪級</li> - <li>甯冨眬璁剧疆鏀寔淇濆瓨&閲嶇疆閰嶇疆</li> - <li>淇鏍戣〃鏁版嵁鏄剧ず涓嶅叏&鍔犺浇鎱㈤棶棰�</li> - <li>鏂板IE娴忚鍣ㄧ増鏈繃浣庢彁绀洪〉闈�</li> - <li>鐢ㄦ埛鐧诲綍鍚庤褰曟渶鍚庣櫥褰旾P&鏃堕棿</li> - <li>椤甸潰瀵煎嚭鎸夐挳鐐瑰嚮涔嬪悗娣诲姞閬僵</li> - <li>瀵屾枃鏈紪杈戝櫒鏀寔鑷畾涔変笂浼犲湴鍧�</li> - <li>瀵屾枃鏈紪杈戠粍浠舵柊澧瀝eadOnly灞炴��</li> - <li>椤电TagsView鏂板鍏抽棴鍙充晶鍔熻兘</li> - <li>鏄鹃殣鍒楃粍浠跺姞杞藉垵濮嬮粯璁ら殣钘忓垪</li> - <li>鍏抽棴澶村儚涓婁紶绐楀彛杩樺師榛樿鍥剧墖</li> - <li>涓汉淇℃伅娣诲姞鎵嬫満&閭閲嶅楠岃瘉</li> - <li>浠g爜鐢熸垚妯℃澘瀵煎嚭鎸夐挳鐐瑰嚮鍚庢坊鍔犻伄缃�</li> - <li>浠g爜鐢熸垚妯℃澘鏍戣〃鎿嶄綔鍒楁坊鍔犳柊澧炴寜閽�</li> - <li>浠g爜鐢熸垚妯℃澘淇涓诲瓙琛ㄥ瓧娈甸噸鍚嶉棶棰�</li> - <li>鍗囩骇fastjson鍒版渶鏂扮増1.2.76</li> - <li>鍗囩骇druid鍒版渶鏂扮増鏈瑅1.2.6</li> - <li>鍗囩骇mybatis鍒版渶鏂扮増3.5.6 闃绘杩滅▼浠g爜鎵ц婕忔礊</li> - <li>鍗囩骇oshi鍒版渶鏂扮増鏈瑅5.6.0</li> - <li>velocity鍓旈櫎commons-collections鐗堟湰锛岄槻姝�3.2.1鐗堟湰鐨勫弽搴忓垪鍖栨紡娲�</li> - <li>鏁版嵁鐩戞帶椤甸粯璁よ处鎴峰瘑鐮侀槻姝㈣秺鏉冭闂�</li> - <li>淇firefox涓嬭〃鍗曟瀯寤烘嫋鎷戒細鏂版墦鍗′竴涓�夐」鍗�</li> - <li>淇鍚庣瀵煎叆琛ㄦ潈闄愭爣璇�</li> - <li>淇鍓嶇鎿嶄綔鏃ュ織&鐧诲綍鏃ュ織鏉冮檺鏍囪瘑</li> - <li>璁剧疆Redis閰嶇疆HashKey搴忓垪鍖�</li> - <li>鍒犻櫎鎿嶄綔鏃ュ織璁板綍淇℃伅</li> - <li>涓婁紶濯掍綋绫诲瀷娣诲姞瑙嗛鏍煎紡</li> - <li>淇璇锋眰褰㈠弬鏈紶鍊艰褰曟棩蹇楀紓甯搁棶棰�</li> - <li>浼樺寲xss鏍¢獙json璇锋眰鏉′欢</li> - <li>鏍戠骇缁撴瀯鏇存柊瀛愯妭鐐逛娇鐢╮eplaceFirst</li> - <li>浼樺寲ExcelUtil绌哄�煎鐞�</li> - <li>鏃ュ織璁板綍杩囨护BindingResult瀵硅薄锛岄槻姝㈠紓甯�</li> - <li>淇敼涓婚鍚巑ini绫诲瀷鎸夐挳鏃犳晥闂</li> - <li>浼樺寲閫氱敤涓嬭浇瀹屾垚鍚庡垹闄よ妭鐐�</li> - <li>閫氱敤Controller娣诲姞鍝嶅簲杩斿洖娑堟伅</li> - <li>鍏朵粬缁嗚妭浼樺寲</li> - </ol> - </el-collapse-item> - <el-collapse-item title="v3.4.0 - 2021-02-22"> - <ol> - <li>浠g爜鐢熸垚妯℃澘鏀寔涓诲瓙琛�</li> - <li>琛ㄦ牸鍙充晶宸ュ叿鏍忕粍浠舵敮鎸佹樉闅愬垪</li> - <li>鍥剧墖缁勪欢娣诲姞棰勮&绉婚櫎鍔熻兘</li> - <li>Excel娉ㄨВ鏀寔Image鍥剧墖瀵煎嚭</li> - <li>鎿嶄綔鎸夐挳缁勮皟鏁翠负鏈寸礌鎸夐挳鏍峰紡</li> - <li>浠g爜鐢熸垚鏀寔鏂囦欢涓婁紶缁勪欢</li> - <li>浠g爜鐢熸垚鏃ユ湡鎺т欢鍖哄垎鑼冨洿</li> - <li>浠g爜鐢熸垚鏁版嵁搴撴枃鏈被鍨嬬敓鎴愯〃鍗曟枃鏈煙</li> - <li>鐢ㄦ埛鎵嬫満閭&鑿滃崟缁勪欢淇敼鍏佽绌哄瓧绗︿覆</li> - <li>鍗囩骇SpringBoot鍒版渶鏂扮増鏈�2.2.13 鎻愬崌鍚姩閫熷害</li> - <li>鍗囩骇druid鍒版渶鏂扮増鏈瑅1.2.4</li> - <li>鍗囩骇fastjson鍒版渶鏂扮増1.2.75</li> - <li>鍗囩骇element-ui鍒版渶鏂扮増鏈�2.15.0</li> - <li>淇IE11娴忚鍣ㄦ姤閿欓棶棰�</li> - <li>浼樺寲澶氱骇鑿滃崟涔嬮棿鍒囨崲鏃犳硶缂撳瓨鐨勯棶棰�</li> - <li>淇鍥涚骇鑿滃崟鏃犳硶鏄剧ず闂</li> - <li>淇渚ц竟鏍忛潤鎬佽矾鐢变涪澶遍棶棰�</li> - <li>淇瑙掕壊绠$悊-缂栬緫瑙掕壊-鍔熻兘鏉冮檺鏄剧ず寮傚父</li> - <li>閰嶇疆鏂囦欢鏂板redis鏁版嵁搴撶储寮曞睘鎬�</li> - <li>鏉冮檺宸ュ叿绫诲鍔燼dmin鍒ゆ柇</li> - <li>瑙掕壊闈炶嚜瀹氫箟鏉冮檺鑼冨洿娓呯┖閫夋嫨鍊�</li> - <li>淇瀵煎叆鏁版嵁涓鸿礋娴偣鏁版椂涓㈠け绮惧害闂</li> - <li>绉婚櫎path-to-regexp姝e垯鍖归厤鎻掍欢</li> - <li>淇鐢熸垚鏍戣〃浠g爜寮傚父</li> - <li>淇敼ip瀛楁闀垮害闃叉ipv6鍦板潃闀垮害涓嶅</li> - <li>闃叉get璇锋眰鍙傛暟鍊间负false鎴�0绛夌壒娈婂�间細瀵艰嚧鏃犳硶姝g‘鐨勪紶鍙�</li> - <li>鐧诲綍鍚巔ush娣诲姞catch闃叉鍑虹幇妫�鏌ラ敊璇�</li> - <li>鍏朵粬缁嗚妭浼樺寲</li> - </ol> - </el-collapse-item> - <el-collapse-item title="v3.3.0 - 2020-12-14"> - <ol> - <li>鏂板缂撳瓨鐩戞帶鍔熻兘</li> - <li>鏀寔涓婚椋庢牸閰嶇疆</li> - <li>淇澶氱骇鑿滃崟涔嬮棿鍒囨崲鏃犳硶缂撳瓨鐨勯棶棰�</li> - <li>澶氱骇鑿滃崟鑷姩閰嶇疆缁勪欢</li> - <li>浠g爜鐢熸垚棰勮鏀寔楂樹寒鏄剧ず</li> - <li>鏀寔Get璇锋眰鏄犲皠Params鍙傛暟</li> - <li>鍒犻櫎鐢ㄦ埛鍜岃鑹茶В缁戝叧鑱�</li> - <li>鍘婚櫎鐢ㄦ埛鎵嬫満閭閮ㄩ棬蹇呭~楠岃瘉</li> - <li>Excel鏀寔娉ㄨВalign瀵归綈鏂瑰紡</li> - <li>Excel鏀寔瀵煎叆Boolean鍨嬫暟鎹�</li> - <li>浼樺寲澶村儚鏍峰紡锛岄紶鏍囩Щ鍏ユ偓鍋滈伄缃�</li> - <li>浠g爜鐢熸垚棰勮鎻愪緵婊氬姩鏈哄埗</li> - <li>浠g爜鐢熸垚鍒犻櫎澶氫綑鐨勬暟瀛梖loat绫诲瀷</li> - <li>淇杞崲瀛楃涓茬殑鐩爣瀛楃闆嗗睘鎬�</li> - <li>鍥炴樉鏁版嵁瀛楀吀闃叉绌哄�兼姤閿�</li> - <li>鏃ュ織璁板綍澧炲姞杩囨护澶氭枃浠跺満鏅�</li> - <li>淇敼缂撳瓨Set鏂规硶鍙兘瀵艰嚧宓屽鐨勯棶棰�</li> - <li>绉婚櫎鍓嶇涓�浜涘浣欑殑渚濊禆</li> - <li>闃叉瀹夊叏鎵弿YUI鍑虹幇鐨勯闄╂彁绀�</li> - <li>淇敼node-sass涓篸art-sass</li> - <li>鍗囩骇SpringBoot鍒版渶鏂扮増鏈�2.1.18</li> - <li>鍗囩骇poi鍒版渶鏂扮増鏈�4.1.2</li> - <li>鍗囩骇oshi鍒版渶鏂扮増鏈瑅5.3.6</li> - <li>鍗囩骇bitwalker鍒版渶鏂扮増鏈�1.21</li> - <li>鍗囩骇axios鍒版渶鏂扮増鏈�0.21.0</li> - <li>鍗囩骇element-ui鍒版渶鏂扮増鏈�2.14.1</li> - <li>鍗囩骇vue鍒版渶鏂扮増鏈�2.6.12</li> - <li>鍗囩骇vuex鍒版渶鏂扮増鏈�3.6.0</li> - <li>鍗囩骇vue-cli鍒扮増鏈�4.5.9</li> - <li>鍗囩骇vue-router鍒版渶鏂扮増鏈�3.4.9</li> - <li>鍗囩骇vue-cli鍒版渶鏂扮増鏈�4.4.6</li> - <li>鍗囩骇vue-cropper鍒版渶鏂扮増鏈�0.5.5</li> - <li>鍗囩骇clipboard鍒版渶鏂扮増鏈�2.0.6</li> - <li>鍗囩骇core-js鍒版渶鏂扮増鏈�3.8.1</li> - <li>鍗囩骇echarts鍒版渶鏂扮増鏈�4.9.0</li> - <li>鍗囩骇file-saver鍒版渶鏂扮増鏈�2.0.4</li> - <li>鍗囩骇fuse.js鍒版渶鏂扮増鏈�6.4.3</li> - <li>鍗囩骇js-beautify鍒版渶鏂扮増鏈�1.13.0</li> - <li>鍗囩骇js-cookie鍒版渶鏂扮増鏈�2.2.1</li> - <li>鍗囩骇path-to-regexp鍒版渶鏂扮増鏈�6.2.0</li> - <li>鍗囩骇quill鍒版渶鏂扮増鏈�1.3.7</li> - <li>鍗囩骇screenfull鍒版渶鏂扮増鏈�5.0.2</li> - <li>鍗囩骇sortablejs鍒版渶鏂扮増鏈�1.10.2</li> - <li>鍗囩骇vuedraggable鍒版渶鏂扮増鏈�2.24.3</li> - <li>鍗囩骇chalk鍒版渶鏂扮増鏈�4.1.0</li> - <li>鍗囩骇eslint鍒版渶鏂扮増鏈�7.15.0</li> - <li>鍗囩骇eslint-plugin-vue鍒版渶鏂扮増鏈�7.2.0</li> - <li>鍗囩骇lint-staged鍒版渶鏂扮増鏈�10.5.3</li> - <li>鍗囩骇runjs鍒版渶鏂扮増鏈�4.4.2</li> - <li>鍗囩骇sass-loader鍒版渶鏂扮増鏈�10.1.0</li> - <li>鍗囩骇script-ext-html-webpack-plugin鍒版渶鏂扮増鏈�2.1.5</li> - <li>鍗囩骇svg-sprite-loader鍒版渶鏂扮増鏈�5.1.1</li> - <li>鍗囩骇vue-template-compiler鍒版渶鏂扮増鏈�2.6.12</li> - <li>鍏朵粬缁嗚妭浼樺寲</li> - </ol> - </el-collapse-item> - <el-collapse-item title="v3.2.1 - 2020-11-18"> - <ol> - <li>闃绘浠绘剰鏂囦欢涓嬭浇婕忔礊</li> - <li>浠g爜鐢熸垚鏀寔涓婁紶鎺т欢</li> - <li>鏂板鍥剧墖涓婁紶缁勪欢</li> - <li>璋冩暣榛樿棣栭〉</li> - <li>鍗囩骇druid鍒版渶鏂扮増鏈瑅1.2.2</li> - <li>mapperLocations閰嶇疆鏀寔鍒嗛殧绗�</li> - <li>鏉冮檺淇℃伅璋冩暣</li> - <li>璋冩暣sql榛樿鏃堕棿</li> - <li>瑙e喅浠g爜鐢熸垚娌℃湁bit绫诲瀷鐨勯棶棰�</li> - <li>鍗囩骇pagehelper鍒版渶鏂扮増1.3.0</li> - </ol> - </el-collapse-item> - <el-collapse-item title="v3.2.0 - 2020-10-10"> - <ol> - <li>鍗囩骇springboot鐗堟湰鍒�2.1.17 鎻愬崌瀹夊叏鎬�</li> - <li>鍗囩骇oshi鍒版渶鏂扮増鏈瑅5.2.5</li> - <li>鍗囩骇druid鍒版渶鏂扮増鏈瑅1.2.1</li> - <li>鍗囩骇jjwt鍒扮増鏈�0.9.1</li> - <li>鍗囩骇fastjson鍒版渶鏂扮増1.2.74</li> - <li>淇敼sass涓簄ode-sass锛岄伩鍏峞l-icon鍥炬爣涔辩爜</li> - <li>浠g爜鐢熸垚鏀寔鍚屾鏁版嵁搴�</li> - <li>浠g爜鐢熸垚鏀寔瀵屾枃鏈帶浠�</li> - <li>浠g爜鐢熸垚椤甸潰鏃朵笉蹇界暐remark灞炴��</li> - <li>浠g爜鐢熸垚娣诲姞select蹇呭~閫夐」</li> - <li>Excel瀵煎嚭绫诲瀷NUMERIC鏀寔绮惧害娴偣绫诲瀷</li> - <li>Excel瀵煎嚭targetAttr浼樺寲鑾峰彇鍊硷紝闃叉get鏂规硶涓嶈鑼�</li> - <li>Excel娉ㄨВ鏀寔鑷姩缁熻鏁版嵁鎬诲拰</li> - <li>Excel娉ㄨВ鏀寔璁剧疆BigDecimal绮惧害&鑸嶅叆瑙勫垯</li> - <li>鑿滃崟&鏁版嵁鏉冮檺鏂板锛堝睍寮�/鎶樺彔 鍏ㄩ��/鍏ㄤ笉閫� 鐖跺瓙鑱斿姩锛�</li> - <li>鍏佽鐢ㄦ埛鍒嗛厤鍒伴儴闂ㄧ埗鑺傜偣</li> - <li>鑿滃崟鏂板鏄惁缂撳瓨keep-alive</li> - <li>琛ㄦ牸鎿嶄綔鍒楅棿璺濊皟鏁�</li> - <li>闄愬埗绯荤粺鍐呯疆鍙傛暟涓嶅厑璁稿垹闄�</li> - <li>瀵屾枃鏈粍浠朵紭鍖栵紝鏀寔鑷畾涔夐珮搴�&鍥剧墖鍐茬獊闂</li> - <li>瀵屾枃鏈伐鍏锋爮鏍峰紡瀵归綈</li> - <li>瀵煎叆excel鏁村舰鍊兼牎楠屼紭鍖�</li> - <li>淇椤电鍏抽棴鎵�鏈夋椂鍥哄畾鏍囩璺敱涓嶅埛鏂伴棶棰�</li> - <li>琛ㄥ崟鏋勫缓甯冨眬鍨嬬粍浠舵柊澧炴寜閽�</li> - <li>宸︿晶鑿滃崟鏂囧瓧杩囬暱鏄剧ず鐪佺暐鍙�</li> - <li>淇鏍硅妭鐐逛负瀛愰儴闂ㄦ椂锛屾爲鐘剁粨鏋勬樉绀洪棶棰�</li> - <li>淇璋冪敤鐩爣瀛楃涓叉渶澶ч暱搴�</li> - <li>淇鑿滃崟鎻愮ず淇℃伅閿欒</li> - <li>淇瀹氭椂浠诲姟鎵ц涓�娆℃潈闄愭爣璇�</li> - <li>淇鏁版嵁搴撳瓧绗︿覆绫诲瀷nvarchar</li> - <li>浼樺寲閫掑綊瀛愯妭鐐�</li> - <li>浼樺寲鏁版嵁鏉冮檺鍒ゆ柇</li> - <li>鍏朵粬缁嗚妭浼樺寲</li> - </ol> - </el-collapse-item> - - <el-collapse-item title="v3.1.0 - 2020-08-13"> - <ol> - <li>琛ㄦ牸宸ュ叿鏍忓彸渚ф坊鍔犲埛鏂�&鏄鹃殣鏌ヨ缁勪欢</li> - <li>鍚庣鏀寔CORS璺ㄥ煙璇锋眰</li> - <li>浠g爜鐢熸垚鏀寔閫夋嫨涓婄骇鑿滃崟</li> - <li>浠g爜鐢熸垚鏀寔鑷畾涔夎矾寰�</li> - <li>浠g爜鐢熸垚鏀寔澶嶉�夋</li> - <li>Excel瀵煎嚭瀵煎叆鏀寔dictType瀛楀吀绫诲瀷</li> - <li>Excel鏀寔鍒嗗壊瀛楃涓茬粍鍐呭</li> - <li>楠岃瘉鐮佺被鍨嬫敮鎸侊紙鏁扮粍璁$畻銆佸瓧绗﹂獙璇侊級</li> - <li>鍗囩骇vue-cli鐗堟湰鍒�4.4.4</li> - <li>淇敼 node-sass 涓� dart-sass</li> - <li>琛ㄥ崟绫诲瀷涓篒nteger/Long璁剧疆鏁村舰榛樿鍊�</li> - <li>浠g爜鐢熸垚鍣ㄩ粯璁apper璺緞涓庨粯璁apperScan璺緞涓嶄竴鑷�</li> - <li>浼樺寲闃查噸澶嶆彁浜ゆ嫤鎴櫒</li> - <li>浼樺寲涓婄骇鑿滃崟涓嶈兘閫夋嫨鑷繁</li> - <li>淇瑙掕壊鐨勬潈闄愬垎閰嶅悗锛屾湭瀹炴椂鐢熸晥闂</li> - <li>淇鍦ㄧ嚎鐢ㄦ埛鏃ュ織璁板綍绫诲瀷</li> - <li>淇瀵屾枃鏈┖鏍煎拰缂╄繘淇濆瓨鍚庝笉鐢熸晥闂</li> - <li>淇鍦ㄧ嚎鐢ㄦ埛鍒ゆ柇閫昏緫</li> - <li>鍞竴闄愬埗鏉′欢鍙繑鍥炲崟鏉℃暟鎹�</li> - <li>娣诲姞鑾峰彇褰撳墠鐨勭幆澧冮厤缃柟娉�</li> - <li>瓒呮椂鐧诲綍鍚庨〉闈㈣烦杞埌棣栭〉</li> - <li>鍏ㄥ眬寮傚父鐘舵�佹眽鍖栨嫤鎴鐞�</li> - <li>HTML杩囨护鍣ㄦ敼涓哄皢html杞箟</li> - <li>妫�鏌ュ瓧绗︽敮鎸佸皬鏁扮偣&闄嶇骇鏀规垚寮傚父鎻愰啋</li> - <li>鍏朵粬缁嗚妭浼樺寲</li> - </ol> - </el-collapse-item> - - <el-collapse-item title="v3.0.0 - 2020-07-20"> - <ol> - <li>鍗曞簲鐢ㄨ皟鏁翠负澶氭ā鍧楅」鐩�</li> - <li>鍗囩骇element-ui鐗堟湰鍒�2.13.2</li> - <li>鍒犻櫎babel锛屾彁楂樼紪璇戦�熷害銆�</li> - <li>鏂板鑿滃崟榛樿涓荤被鐩�</li> - <li>缂栫爜鏂囦欢鍚嶄慨鏀逛负uuid鏂瑰紡</li> - <li>瀹氭椂浠诲姟cron琛ㄨ揪寮忛獙璇�</li> - <li>瑙掕壊鏉冮檺淇敼鏃跺凡鏈夋潈闄愭湭鑷姩鍕鹃�夊紓甯镐慨澶�</li> - <li>闃叉鍒囨崲鏉冮檺鐢ㄦ埛鍚庣櫥褰曞嚭鐜�404</li> - <li>Excel鏀寔sort瀵煎嚭鎺掑簭</li> - <li>鍒涘缓鐢ㄦ埛涓嶅厑璁搁�夋嫨瓒呯骇绠$悊鍛樿鑹�</li> - <li>淇浠g爜鐢熸垚瀵煎叆琛ㄧ粨鏋勫嚭鐜板紓甯搁〉闈笉鎻愰啋闂</li> - <li>淇浠g爜鐢熸垚鐐瑰嚮澶氭琛ㄤ慨鏀规暟鎹笉鍙樺寲鐨勯棶棰�</li> - <li>淇澶村儚涓婁紶鎴愬姛浜屾鎵撳紑鏃犳硶鏀瑰彉瑁佸壀妗嗗ぇ灏忓拰浣嶇疆闂</li> - <li>淇甯冨眬涓簊mall鑰卪ini鐢ㄦ埛琛ㄥ崟鏄剧ず閿欎綅闂</li> - <li>淇鐑儴缃插鑷寸殑寮烘崲寮傚父闂</li> - <li>淇敼鐢ㄦ埛绠$悊澶嶉�夋瀹藉害锛岄槻姝㈤儴鍒嗘祻瑙堝櫒鍑虹幇鐪佺暐鍙�</li> - <li>IpUtils宸ュ叿锛屾竻闄ss鐗规畩瀛楃锛岄槻姝ff娉ㄥ叆鏀诲嚮</li> - <li>鐢熸垚domain 濡傛灉鏄诞鐐瑰瀷 缁熶竴鐢˙igDecimal</li> - <li>瀹氭椂浠诲姟璋冩暣label-width锛岄槻姝㈤儴缃插嚭鐜伴敊浣�</li> - <li>璋冩暣琛ㄥご鍥哄畾鍒楅粯璁ゆ牱寮�</li> - <li>浠g爜鐢熸垚妯℃澘璋冩暣锛屽瓧娈典负String骞朵笖蹇呭~鍒欏姞绌轰覆鏉′欢</li> - <li>浠g爜鐢熸垚瀛楀吀Integer/Long浣跨敤parseInt</li> - <li> - 淇dict_sort涓嶅彲update涓�0鐨勯棶棰�&鏌ヨ杩斿洖澧炲姞dict_sort鍗囧簭鎺掑簭 - </li> - <li>淇宀椾綅瀵煎嚭鏉冮檺娉ㄨВ</li> - <li>绂佹鍔犲瘑瀵嗘枃杩斿洖鍓嶇</li> - <li>淇浠g爜鐢熸垚椤甸潰涓殑鏌ヨ鏉′欢鍒涘缓鏃堕棿鏈敓鏁堢殑闂</li> - <li>淇棣栭〉鎼滅储鑿滃崟澶栭摼鏃犳硶鐐瑰嚮璺宠浆闂</li> - <li>淇鑿滃崟绠$悊閫夋嫨鍥炬爣锛宐ackspace鍒犻櫎鏃朵笉杩囨护鏁版嵁</li> - <li>鐢ㄦ埛绠$悊閮ㄩ棬鍒嗘敮鑺傜偣涓嶅彲妫�鏌�&鏄剧ず璁℃暟</li> - <li>鏁版嵁鑼冨洿杩囨护灞炴�ц皟鏁�</li> - <li>鍏朵粬缁嗚妭浼樺寲</li> - </ol> - </el-collapse-item> - - <el-collapse-item title="v2.3.0 - 2020-06-01"> - <ol> - <li>鍗囩骇fastjson鍒版渶鏂扮増1.2.70 淇楂樺嵄瀹夊叏婕忔礊</li> - <li>dev鍚姩榛樿鎵撳紑娴忚鍣�</li> - <li>vue-cli浣跨敤榛樿source-map</li> - <li>slidebar eslint鎶ラ敊浼樺寲</li> - <li>褰搕ags-view婊氬姩鍏抽棴鍙抽敭鑿滃崟</li> - <li>瀛楀吀绠$悊娣诲姞缂撳瓨璇诲彇</li> - <li>鍙傛暟绠$悊鏀寔缂撳瓨鎿嶄綔</li> - <li>鏀寔涓�绾ц彍鍗曪紙鍜屼富椤靛悓绾э級鍦╩ain鍖哄煙鏄剧ず</li> - <li>闄愬埗澶栭摼鍦板潃蹇呴』浠ttp(s)寮�澶�</li> - <li>tagview & sidebar 涓婚棰滆壊涓巈lement ui(鍏ㄥ眬)鍚屾</li> - <li>淇敼鏁版嵁婧愮被鍨嬩紭鍏堢骇锛屽厛鏍规嵁鏂规硶锛屽啀鏍规嵁绫�</li> - <li>鏀寔鏄惁闇�瑕佽缃畉oken灞炴�э紝鑷畾涔夎繑鍥炵爜娑堟伅銆�</li> - <li>swagger璇锋眰鍓嶇紑鍔犲叆閰嶇疆銆�</li> - <li>鐧诲綍鍦扮偣璁剧疆鍐呭杩囬暱鍒欓殣钘忔樉绀�</li> - <li>淇瀹氭椂浠诲姟鎵ц涓�娆℃寜閽悗涓嶆彁绀烘秷鎭棶棰�</li> - <li>淇敼涓婄骇閮ㄩ棬锛堥�夋嫨椤规帓闄ゆ湰韬拰涓嬬骇锛�</li> - <li>閫氱敤http鍙戦�佹柟娉曞鍔犲弬鏁� contentType 缂栫爜绫诲瀷</li> - <li>鏇存崲IP鍦板潃鏌ヨ鎺ュ彛</li> - <li>淇椤电鍙橀噺undefined</li> - <li>娣诲姞鏍¢獙閮ㄩ棬鍖呭惈鏈仠鐢ㄧ殑瀛愰儴闂�</li> - <li>淇敼瀹氭椂浠诲姟璇︽儏涓嬫鎵ц鏃堕棿鏃ユ湡鏄剧ず閿欒</li> - <li>瑙掕壊绠$悊鏌ヨ璁剧疆榛樿鎺掑簭瀛楁</li> - <li>swagger娣诲姞enable鍙傛暟鎺у埗鏄惁鍚敤</li> - <li>鍙json绫诲瀷璇锋眰鏋勫缓鍙噸澶嶈鍙杋nputStream鐨剅equest</li> - <li>淇敼浠g爜鐢熸垚瀛楀吀瀛楁int绫诲瀷娌℃湁鑷姩閫変腑闂</li> - <li>vuex鐢ㄦ埛鍚嶅彇鍊间慨姝�</li> - <li>琛ㄦ牸鏍戞ā鏉垮幓鎺夊浣欑殑)</li> - <li>浠g爜鐢熸垚搴忓彿淇</li> - <li>鍏ㄥ睆鎯呭喌涓嬩笉璋冩暣涓婂杈硅窛</li> - <li>浠g爜鐢熸垚Date瀛楁娣诲姞榛樿鏍煎紡</li> - <li>鐢ㄦ埛绠$悊瑙掕壊閫夋嫨鏉冮檺鎺у埗</li> - <li>淇璺敱鎳掑姞杞芥姤閿欓棶棰�</li> - <li>妯℃澘sql.vm娣诲姞鑿滃崟鐘舵��</li> - <li>璁剧疆鐢ㄦ埛鍚嶇О涓嶈兘淇敼</li> - <li>dialog娣诲姞append-to-body灞炴�э紝闃叉ie閬僵</li> - <li>鑿滃崟鍖哄垎鐘舵�佸拰鏄剧ず闅愯棌鍔熻兘</li> - <li>鍗囩骇fastjson鍒版渶鏂扮増1.2.68 淇瀹夊叏鍔犲浐</li> - <li>淇浠g爜鐢熸垚濡傛灉閫夋嫨瀛楀吀绫诲瀷缂哄け閫楀彿闂</li> - <li>鐧诲綍璇锋眰params鏇存崲涓篸ata锛岄槻姝㈡毚闇瞮rl</li> - <li>鏃ュ織杩斿洖鏃堕棿鏍煎紡澶勭悊</li> - <li>娣诲姞handle鎺у埗鍏佽鎷栧姩鐨勫厓绱�</li> - <li>甯冨眬璁剧疆鐐瑰嚮鎵╁ぇ鑼冨洿</li> - <li>浠g爜鐢熸垚鍒楀睘鎬ф帓搴忔煡璇�</li> - <li>浠g爜鐢熸垚鍒楁敮鎸佹嫋鍔ㄦ帓搴�</li> - <li>淇鏃堕棿鏍煎紡涓嶆敮鎸乮os闂</li> - <li>琛ㄥ崟鏋勫缓娣诲姞鐖剁骇class锛岄槻姝㈠啿绐�</li> - <li>瀹氭椂浠诲姟骞跺彂灞炴�т慨姝�</li> - <li>瑙掕壊绂佺敤&鑿滃崟闅愯棌涓嶆煡璇㈡潈闄�</li> - <li>鍏朵粬缁嗚妭浼樺寲</li> - </ol> - </el-collapse-item> - - <el-collapse-item title="v2.2.0 - 2020-03-18"> - <ol> - <li>绯荤粺鐩戞帶鏂板瀹氭椂浠诲姟鍔熻兘</li> - <li>娣诲姞涓�涓墦鍖匴eb宸ョ▼bat</li> - <li>淇椤电榧犳爣婊氳疆鎸変笅鐨勬椂鍊欙紝鍙互鍏抽棴涓嶅彲鍏抽棴鐨則ag</li> - <li>淇鐐瑰嚮閫�鍑虹櫥褰曟湁鏃朵細鏃犳彁绀洪棶棰�</li> - <li>淇闃查噸澶嶆彁浜ゆ敞瑙f棤鏁堥棶棰�</li> - <li>淇閫氱煡鍏憡鎵归噺鍒犻櫎寮傚父闂</li> - <li>娣诲姞鑿滃崟鏃惰矾鐢卞湴鍧�蹇呭~闄愬埗</li> - <li>浠g爜鐢熸垚瀛楁鎻忚堪鍙紪杈�</li> - <li>淇鐢ㄦ埛淇敼涓汉淇℃伅瀵艰嚧缂撳瓨涓嶈繃鏈熼棶棰�</li> - <li>涓汉淇℃伅鍒涘缓鏃堕棿鑾峰彇姝g‘灞炴�у��</li> - <li>鎿嶄綔鏃ュ織璇︾粏鏄剧ず姝g‘绫诲瀷</li> - <li>瀵煎叆琛ㄥ崟鍑昏鏁版嵁鏃堕�変腑瀵瑰簲鐨勫閫夋</li> - <li>鎵归噺鏇挎崲琛ㄥ墠缂�閫昏緫璋冩暣</li> - <li>鍥哄畾閲嶅畾鍚戣矾寰勮〃杈惧紡</li> - <li>鍗囩骇element-ui鐗堟湰鍒�2.13.0</li> - <li>鎿嶄綔鏃ュ織鎺掑簭璋冩暣</li> - <li>淇charts鍒囨崲渚ц竟鏍忔垨鑰呯缉鏀剧獥鍙f樉绀篵ug</li> - <li>鍏朵粬缁嗚妭浼樺寲</li> - </ol> - </el-collapse-item> - - <el-collapse-item title="v2.1.0 - 2020-02-24"> - <ol> - <li>鏂板琛ㄥ崟鏋勫缓</li> - <li>浠g爜鐢熸垚鏀寔鏍戣〃缁撴瀯</li> - <li>鏂板鐢ㄦ埛瀵煎叆</li> - <li>淇鍔ㄦ�佸姞杞借矾鐢遍〉闈㈠埛鏂伴棶棰�</li> - <li>淇鍦板潃寮�鍏虫棤鏁堥棶棰�</li> - <li>姹夊寲閿欒鎻愮ず椤甸潰</li> - <li>浠g爜鐢熸垚宸茬煡闂淇敼</li> - <li>淇澶氭暟鎹簮涓嬮厤缃叧闂嚭鐜板紓甯稿鐞�</li> - <li>娣诲姞HTML杩囨护鍣紝鐢ㄤ簬鍘婚櫎XSS婕忔礊闅愭偅</li> - <li>淇涓婁紶澶村儚鎺у埗鍙板嚭鐜板紓甯�</li> - <li>淇敼鐢ㄦ埛绠$悊鍒嗛〉涓嶆纭殑闂</li> - <li>淇楠岃瘉鐮佽褰曟彁绀洪敊璇�</li> - <li>淇request.js缂哄皯Message寮曠敤</li> - <li>淇琛ㄦ牸鏃堕棿涓虹┖鍑虹幇鐨勫紓甯�</li> - <li>娣诲姞Jackson鏃ユ湡鍙嶅簭鍒楀寲鏃跺尯閰嶇疆</li> - <li>璋冩暣鏍规嵁鐢ㄦ埛鏉冮檺鍔犺浇鑿滃崟鏁版嵁鏍戝舰缁撴瀯</li> - <li>璋冩暣鎴愬姛鐧诲綍涓嶆仮澶嶆寜閽紝闃叉澶氭鐐瑰嚮</li> - <li>淇敼鐢ㄦ埛涓汉璧勬枡鍚屾缂撳瓨淇℃伅</li> - <li>淇椤甸潰鍚屾椂鍑虹幇el-upload鍜孍ditor涓嶆樉绀哄鐞�</li> - <li>淇鍦ㄨ鑹茬鐞嗛〉淇敼鑿滃崟鏉冮檺鍋跺皵鏈�変腑闂</li> - <li>閰嶇疆鏂囦欢鏂板redis瀵嗙爜灞炴��</li> - <li>璁剧疆mybatis鍏ㄥ眬鐨勯厤缃枃浠�</li> - <li>鍏朵粬缁嗚妭浼樺寲</li> - </ol> - </el-collapse-item> - - <el-collapse-item title="v2.0.0 - 2019-12-02"> - <ol> - <li>鏂板浠g爜鐢熸垚</li> - <li>鏂板@RepeatSubmit娉ㄨВ锛岄槻姝㈤噸澶嶆彁浜�</li> - <li>鏂板鑿滃崟涓荤洰褰曟坊鍔�/鍒犻櫎鎿嶄綔</li> - <li>鏃ュ織璁板綍杩囨护鐗规畩瀵硅薄锛岄槻姝㈣浆鎹㈠紓甯�</li> - <li>淇敼浠g爜鐢熸垚璺敱鑴氭湰閿欒</li> - <li>鐢ㄦ埛涓婁紶澶村儚瀹炴椂鍚屾缂撳瓨锛屾棤闇�閲嶆柊鐧诲綍</li> - <li>璋冩暣鍒囨崲椤电鍚庝笉閲嶆柊鍔犺浇鏁版嵁</li> - <li>娣诲姞jsencrypt瀹炵幇鍙傛暟鐨勫墠绔姞瀵�</li> - <li>绯荤粺閫�鍑哄垹闄ょ敤鎴风紦瀛樿褰�</li> - <li>鍏朵粬缁嗚妭浼樺寲</li> - </ol> - </el-collapse-item> - <el-collapse-item title="v1.1.0 - 2019-11-11"> - <ol> - <li>鏂板鍦ㄧ嚎鐢ㄦ埛绠$悊</li> - <li>鏂板鎸夐挳缁勫姛鑳藉疄鐜帮紙鎵归噺鍒犻櫎銆佸鍑恒�佹竻绌猴級</li> - <li>鏂板鏌ヨ鏉′欢閲嶇疆鎸夐挳</li> - <li>鏂板Swagger鍏ㄥ眬Token閰嶇疆</li> - <li>鏂板鍚庣鍙傛暟鏍¢獙</li> - <li>淇瀛楀吀绠$悊椤甸潰鐨勬棩鏈熸煡璇㈠紓甯�</li> - <li>淇敼鏃堕棿鍑芥暟鍛藉悕闃叉鍐茬獊</li> - <li>鍘婚櫎鑿滃崟涓婄骇鏍¢獙锛岄粯璁や负椤剁骇</li> - <li>淇鐢ㄦ埛瀵嗙爜鏃犳硶淇敼闂</li> - <li>淇鑿滃崟绫诲瀷涓烘寜閽椂涓嶆樉绀烘潈闄愭爣璇�</li> - <li>鍏朵粬缁嗚妭浼樺寲</li> - </ol> - </el-collapse-item> - <el-collapse-item title="v1.0.0 - 2019-10-08"> - <ol> - <li>鑻ヤ緷鍓嶅悗绔垎绂荤郴缁熸寮忓彂甯�</li> - </ol> - </el-collapse-item> - </el-collapse> - </el-card> - </el-col> - <el-col :xs="24" :sm="24" :md="12" :lg="8"> - <el-card class="update-log"> - <div slot="header" class="clearfix"> - <span>鎹愯禒鏀寔</span> - </div> - <div class="body"> - <img - src="@/assets/images/pay.png" - alt="donate" - width="100%" - /> - <span style="display: inline-block; height: 30px; line-height: 30px" - >浣犲彲浠ヨ浣滆�呭枬鏉挅鍟¤〃绀洪紦鍔�</span - > - </div> - </el-card> - </el-col> </el-row> + + <div> + <el-table + :data="tableData" + border + style="width: 750px; font-size: x-large; font-weight: bolder"> + <el-table-column + class="fontHead" + fixed + prop="sfcCode" + label="绛夊緟鎵撴爣淇℃伅" + width="550" + > + </el-table-column> + + <el-table-column + fixed="right" + label="鎿嶄綔" + width="200" + > + <template slot-scope="scope"> + <el-button @click="deleteRow(scope.row)" type="text" size="small">鍒犻櫎</el-button> + </template> + </el-table-column> + </el-table> + </div> </div> + </template> <script> +import {crave, reCrave, printList, delStationCollection} from "../api/main/da/stationCollection"; + export default { name: "Index", data() { return { // 鐗堟湰鍙� - version: "3.8.8" + version: "3.8.8", + sfcCode: '', + tableData: [], }; }, methods: { - goTarget(href) { - window.open(href, "_blank"); - } + + //鍏充簬姝ら〉闈㈣繕闇�瑕侀獙璇侊紝 + //濡傛灉鎵撴爣杞欢鑳藉鎵ц涓ゆ潯sql璇彞锛岀浜屾潯sql璇彞涓鸿揪鏍囧畬鎴愮殑鏍囪瘑淇敼,姝ゆ椂椤甸潰鍙樉绀哄鏉″緟鎵撴爣鏁版嵁锛屾鏃跺彲浠ユ湁鍒犻櫎鎸夐挳 + //濡傛灉涓嶆敮鎸佸鏉ql璇彞锛屼笉闇�瑕佸垹闄ゆ搷浣滐紝閫昏緫涓鸿緭鍏ヤ竴鏉℃墦涓�鏉� + deleteRow(row){ + delStationCollection(row.id).then(res => { + console.log("res",res) + this.flushMethod() + }) + }, + open() { + this.$confirm('姝ゅ簭鍒楀彿宸插埢鐮侊紝鏄惁闇�瑕侀噸鏂板埢鐮�?', '鎻愮ず', { + confirmButtonText: '纭畾', + cancelButtonText: '鍙栨秷', + type: 'warning' + }).then(() => { + console.log('111111') + reCrave({sfcCode:this.sfcCode}).then(res => { + console.log('res',res) + this.flushMethod() + }) + this.$message({ + type: 'success', + message: '纭閲嶆柊鍒荤爜!' + }); + }).catch(() => { + console.log('222222') + this.$message({ + type: 'info', + message: '宸插彇娑�' + }); + }); + }, + carveMethod(){ + crave({sfcCode:this.sfcCode}).then(res => { + console.log('res',res) + if (res.code === 200) { + if (res.data === 200){ + this.$message({ + message: '鍒荤爜淇℃伅鍙戦�佹垚鍔�', + type: 'success' + }); + this.flushMethod() + } else if (res.data === 303){ + this.open() + } + } + }) + }, + flushMethod(){ + printList().then(res => { + console.log(res) + if (res.code === 200){ + this.tableData = res.data + } else { + this.$message({ + message: '鏌ヨ澶辫触锛岃鑱旂郴绠$悊鍛�', + type: 'info' + }); + } + + }) + }, + + + }, + mounted(){ + this.interval = setInterval(() => { + this.flushMethod() + }, 3000); + }, + beforeDestroy() { + clearInterval(this.interval); // 娓呴櫎瀹氭椂鍣紝闃叉鍐呭瓨娉勬紡 } }; </script> <style scoped lang="scss"> +::v-deep .el-input__inner{ + height: 50px; +} +//::v-deep .el-table--border .el-table__cell:first-child .cell{ +// font-size: x-large; +//} .home { blockquote { padding: 10px 20px; diff --git a/billion-ui/src/views/login.vue b/billion-ui/src/views/login.vue index 8758305..56f92e2 100644 --- a/billion-ui/src/views/login.vue +++ b/billion-ui/src/views/login.vue @@ -72,8 +72,8 @@ return { codeUrl: "", loginForm: { - username: "admin", - password: "admin123", + username: "", + password: "", rememberMe: false, code: "", uuid: "" -- Gitblit v1.9.3