diff --git a/AIGenerate/AIGenerateNFT/__init__.py b/AIGenerate/AIGenerateNFT/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..063cd2cce274968ebd9ca0a741e2c4fa1740003f
--- /dev/null
+++ b/AIGenerate/AIGenerateNFT/__init__.py
@@ -0,0 +1,2 @@
+import pymysql
+pymysql.install_as_MySQLdb()
diff --git a/AIGenerate/AIGenerateNFT/__pycache__/__init__.cpython-39.pyc b/AIGenerate/AIGenerateNFT/__pycache__/__init__.cpython-39.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..5a9cc4cfa189553790e59236adf32b08781a95d6
Binary files /dev/null and b/AIGenerate/AIGenerateNFT/__pycache__/__init__.cpython-39.pyc differ
diff --git a/AIGenerate/AIGenerateNFT/__pycache__/settings.cpython-39.pyc b/AIGenerate/AIGenerateNFT/__pycache__/settings.cpython-39.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..7527c7e6f77cb41300aa9c215bed6390a533952f
Binary files /dev/null and b/AIGenerate/AIGenerateNFT/__pycache__/settings.cpython-39.pyc differ
diff --git a/AIGenerate/AIGenerateNFT/__pycache__/urls.cpython-39.pyc b/AIGenerate/AIGenerateNFT/__pycache__/urls.cpython-39.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..8b845eb26496b0e90694065d58dade920e39a016
Binary files /dev/null and b/AIGenerate/AIGenerateNFT/__pycache__/urls.cpython-39.pyc differ
diff --git a/AIGenerate/AIGenerateNFT/__pycache__/wsgi.cpython-39.pyc b/AIGenerate/AIGenerateNFT/__pycache__/wsgi.cpython-39.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..19466776d7eb6c488e30daf2608967f1b5af3a98
Binary files /dev/null and b/AIGenerate/AIGenerateNFT/__pycache__/wsgi.cpython-39.pyc differ
diff --git a/AIGenerate/AIGenerateNFT/asgi.py b/AIGenerate/AIGenerateNFT/asgi.py
new file mode 100644
index 0000000000000000000000000000000000000000..f9dd944c8bd2892b8147964afb54c90306ae13d9
--- /dev/null
+++ b/AIGenerate/AIGenerateNFT/asgi.py
@@ -0,0 +1,16 @@
+"""
+ASGI config for AIGenerateNFT project.
+
+It exposes the ASGI callable as a module-level variable named ``application``.
+
+For more information on this file, see
+https://docs.djangoproject.com/en/4.0/howto/deployment/asgi/
+"""
+
+import os
+
+from django.core.asgi import get_asgi_application
+
+os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'AIGenerateNFT.settings')
+
+application = get_asgi_application()
diff --git a/AIGenerate/AIGenerateNFT/settings.py b/AIGenerate/AIGenerateNFT/settings.py
new file mode 100644
index 0000000000000000000000000000000000000000..8eb695ebd4d4d3abd204f2e5f03995c355e26272
--- /dev/null
+++ b/AIGenerate/AIGenerateNFT/settings.py
@@ -0,0 +1,166 @@
+"""
+Django settings for AIGenerateNFT project.
+
+Generated by 'django-admin startproject' using Django 4.0.4.
+
+For more information on this file, see
+https://docs.djangoproject.com/en/4.0/topics/settings/
+
+For the full list of settings and their values, see
+https://docs.djangoproject.com/en/4.0/ref/settings/
+"""
+
+from pathlib import Path
+
+# Build paths inside the project like this: BASE_DIR / 'subdir'.
+BASE_DIR = Path(__file__).resolve().parent.parent
+
+
+# Quick-start development settings - unsuitable for production
+# See https://docs.djangoproject.com/en/4.0/howto/deployment/checklist/
+
+# SECURITY WARNING: keep the secret key used in production secret!
+SECRET_KEY = 'django-insecure-%071b&dm!kt6@2ak05%+y3tu3#*(%nn2mw=+u0pnn4rpr#(1fu'
+
+# SECURITY WARNING: don't run with debug turned on in production!
+DEBUG = True
+
+ALLOWED_HOSTS = ['*']
+
+
+# Application definition
+
+INSTALLED_APPS = [
+ 'django.contrib.admin',
+ 'django.contrib.auth',
+ 'django.contrib.contenttypes',
+ 'django.contrib.sessions',
+ 'django.contrib.messages',
+ 'django.contrib.staticfiles',
+ 'generate_pixel',
+ 'corsheaders',
+]
+
+MIDDLEWARE = [
+ 'django.middleware.security.SecurityMiddleware',
+ 'django.contrib.sessions.middleware.SessionMiddleware',
+ 'django.middleware.common.CommonMiddleware',
+ #'django.middleware.csrf.CsrfViewMiddleware',
+ 'corsheaders.middleware.CorsMiddleware', # 新加
+ 'django.middleware.common.CommonMiddleware', # 新加
+ 'django.contrib.auth.middleware.AuthenticationMiddleware',
+ 'django.contrib.messages.middleware.MessageMiddleware',
+ 'django.middleware.clickjacking.XFrameOptionsMiddleware',
+]
+
+ROOT_URLCONF = 'AIGenerateNFT.urls'
+
+TEMPLATES = [
+ {
+ 'BACKEND': 'django.template.backends.django.DjangoTemplates',
+ 'DIRS': [BASE_DIR / 'templates']
+ ,
+ 'APP_DIRS': True,
+ 'OPTIONS': {
+ 'context_processors': [
+ 'django.template.context_processors.debug',
+ 'django.template.context_processors.request',
+ 'django.contrib.auth.context_processors.auth',
+ 'django.contrib.messages.context_processors.messages',
+ ],
+ },
+ },
+]
+
+WSGI_APPLICATION = 'AIGenerateNFT.wsgi.application'
+
+
+# Database
+# https://docs.djangoproject.com/en/4.0/ref/settings/#databases
+
+DATABASES = {
+ 'default': {
+ #'ENGINE': 'django.db.backends.sqlite3',
+ #'NAME': BASE_DIR / 'db.sqlite3',
+ 'ENGINE': 'django.db.backends.mysql',
+ 'NAME': 'test',
+ 'USER': 'root',
+ 'PASSWORD': '827925',
+ 'HOST': 'localhost',
+ 'POST': '3306',
+ 'CHARSET': 'utf8'
+ }
+}
+
+
+# Password validation
+# https://docs.djangoproject.com/en/4.0/ref/settings/#auth-password-validators
+
+AUTH_PASSWORD_VALIDATORS = [
+ {
+ 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
+ },
+ {
+ 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
+ },
+ {
+ 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
+ },
+ {
+ 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
+ },
+]
+
+
+# Internationalization
+# https://docs.djangoproject.com/en/4.0/topics/i18n/
+
+#LANGUAGE_CODE = 'en-us'
+LANGUAGE_CODE = 'zh-hans'
+
+#TIME_ZONE = 'UTC'
+TIME_ZONE = 'Asia/Shanghai'
+
+USE_I18N = True
+
+USE_L10N = True
+
+USE_TZ = False
+
+
+# Static files (CSS, JavaScript, Images)
+# https://docs.djangoproject.com/en/4.0/howto/static-files/
+
+STATIC_URL = '/static/'
+
+# Default primary key field type
+# https://docs.djangoproject.com/en/4.0/ref/settings/#default-auto-field
+
+DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
+
+# 跨域增加忽略
+CORS_ALLOW_CREDENTIALS = True
+CORS_ORIGIN_ALLOW_ALL = True
+CORS_ORIGIN_WHITELIST = ()
+# 对应的发送的请求的跨域
+CORS_ALLOW_METHODS = (
+ 'DELETE',
+ 'GET',
+ 'OPTIONS',
+ 'PATCH',
+ 'POST',
+ 'PUT',
+ 'VIEW',
+)
+
+CORS_ALLOW_HEADERS = (
+ 'accept',
+ 'accept-encoding',
+ 'authorization',
+ 'content-type',
+ 'dnt',
+ 'origin',
+ 'user-agent',
+ 'x-csrftoken',
+ 'x-requested-with',
+)
\ No newline at end of file
diff --git a/AIGenerate/AIGenerateNFT/urls.py b/AIGenerate/AIGenerateNFT/urls.py
new file mode 100644
index 0000000000000000000000000000000000000000..b47f4c86f9c0512b840a8183e63b25b44cee9c60
--- /dev/null
+++ b/AIGenerate/AIGenerateNFT/urls.py
@@ -0,0 +1,26 @@
+"""AIGenerateNFT URL Configuration
+
+The `urlpatterns` list routes URLs to views. For more information please see:
+ https://docs.djangoproject.com/en/4.0/topics/http/urls/
+Examples:
+Function views
+ 1. Add an import: from my_app import views
+ 2. Add a URL to urlpatterns: path('', views.home, name='home')
+Class-based views
+ 1. Add an import: from other_app.views import Home
+ 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home')
+Including another URLconf
+ 1. Import the include() function: from django.urls import include, path
+ 2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
+"""
+from django.contrib import admin
+from django.urls import path
+
+import generate_pixel.views
+
+urlpatterns = [
+ path('admin/', admin.site.urls),
+ path('upload/', generate_pixel.views.imagesNeedTrian),
+ path('train/', generate_pixel.views.train),
+ path('test/', generate_pixel.views.generateByModel),
+]
diff --git a/AIGenerate/AIGenerateNFT/wsgi.py b/AIGenerate/AIGenerateNFT/wsgi.py
new file mode 100644
index 0000000000000000000000000000000000000000..b37a8c0fe1add0cf1582546ab4e44ea55510a85a
--- /dev/null
+++ b/AIGenerate/AIGenerateNFT/wsgi.py
@@ -0,0 +1,16 @@
+"""
+WSGI config for AIGenerateNFT project.
+
+It exposes the WSGI callable as a module-level variable named ``application``.
+
+For more information on this file, see
+https://docs.djangoproject.com/en/4.0/howto/deployment/wsgi/
+"""
+
+import os
+
+from django.core.wsgi import get_wsgi_application
+
+os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'AIGenerateNFT.settings')
+
+application = get_wsgi_application()
diff --git a/AIGenerate/function/__pycache__/exceptions.cpython-39.pyc b/AIGenerate/function/__pycache__/exceptions.cpython-39.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..c065fbad6ae99eeebb9fdbc63883fbe33c3e468e
Binary files /dev/null and b/AIGenerate/function/__pycache__/exceptions.cpython-39.pyc differ
diff --git a/AIGenerate/function/__pycache__/snowflake.cpython-39.pyc b/AIGenerate/function/__pycache__/snowflake.cpython-39.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..b5acfce66268d7c89b1d87bb040ef8cf44b09c70
Binary files /dev/null and b/AIGenerate/function/__pycache__/snowflake.cpython-39.pyc differ
diff --git a/AIGenerate/function/__pycache__/stickers.cpython-39.pyc b/AIGenerate/function/__pycache__/stickers.cpython-39.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..4eb007577a69a315509671054026147c1a6dd2d3
Binary files /dev/null and b/AIGenerate/function/__pycache__/stickers.cpython-39.pyc differ
diff --git a/AIGenerate/function/__pycache__/subject.cpython-39.pyc b/AIGenerate/function/__pycache__/subject.cpython-39.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..a31104d769c9a02cee20abe65845d30f4422f976
Binary files /dev/null and b/AIGenerate/function/__pycache__/subject.cpython-39.pyc differ
diff --git a/AIGenerate/function/exceptions.py b/AIGenerate/function/exceptions.py
new file mode 100644
index 0000000000000000000000000000000000000000..838416eae535312aeadff6b2e60595aaa81e3291
--- /dev/null
+++ b/AIGenerate/function/exceptions.py
@@ -0,0 +1,14 @@
+#!/usr/bin/env python
+# -*- coding: UTF-8 -*-
+'''=================================================
+@Project -> File :Master-art-punk -> exceptions
+@IDE :PyCharm
+@Author :蒋虎成
+@Date :2021/9/28 22:38
+@Desc :
+=================================================='''
+class InvalidSystemClock(Exception):
+ """
+ 时钟回拨异常
+ """
+ pass
\ No newline at end of file
diff --git a/AIGenerate/function/snowflake.py b/AIGenerate/function/snowflake.py
new file mode 100644
index 0000000000000000000000000000000000000000..682510d85b82ba48bc00d697b7d89131f19ed663
--- /dev/null
+++ b/AIGenerate/function/snowflake.py
@@ -0,0 +1,109 @@
+#!/usr/bin/env python
+# -*- coding: UTF-8 -*-
+'''=================================================
+@Project -> File :Master-art-punk -> snowflake
+@IDE :PyCharm
+@Author :蒋虎成
+@Date :2021/9/28 22:37
+@Desc :
+=================================================='''
+import time
+import logging
+
+from function.exceptions import InvalidSystemClock
+
+
+# 64位ID的划分
+WORKER_ID_BITS = 5
+DATACENTER_ID_BITS = 5
+SEQUENCE_BITS = 12
+
+# 最大取值计算
+MAX_WORKER_ID = -1 ^ (-1 << WORKER_ID_BITS) # 2**5-1 0b11111
+MAX_DATACENTER_ID = -1 ^ (-1 << DATACENTER_ID_BITS)
+
+# 移位偏移计算
+WOKER_ID_SHIFT = SEQUENCE_BITS
+DATACENTER_ID_SHIFT = SEQUENCE_BITS + WORKER_ID_BITS
+TIMESTAMP_LEFT_SHIFT = SEQUENCE_BITS + WORKER_ID_BITS + DATACENTER_ID_BITS
+
+# 序号循环掩码
+SEQUENCE_MASK = -1 ^ (-1 << SEQUENCE_BITS)
+
+# Twitter元年时间戳
+TWEPOCH = 1288834974657
+
+
+logger = logging.getLogger('flask.app')
+
+
+class IdWorker(object):
+ """
+ 用于生成IDs
+ """
+ def __init__(self, datacenter_id, worker_id, sequence=0):
+ """
+ 初始化
+ :param datacenter_id: 数据中心(机器区域)ID
+ :param worker_id: 机器ID
+ :param sequence: 其实序号
+ """
+ # sanity check
+ if worker_id > MAX_WORKER_ID or worker_id < 0:
+ raise ValueError('worker_id值越界')
+
+ if datacenter_id > MAX_DATACENTER_ID or datacenter_id < 0:
+ raise ValueError('datacenter_id值越界')
+
+ self.worker_id = worker_id
+ self.datacenter_id = datacenter_id
+ self.sequence = sequence
+
+ self.last_timestamp = -1 # 上次计算的时间戳
+
+ def _gen_timestamp(self):
+ """
+ 生成整数时间戳
+ :return:int timestamp
+ """
+ return int(time.time() * 1000)
+
+ def get_id(self):
+ """
+ 获取新ID
+ :return:
+ """
+ timestamp = self._gen_timestamp()
+
+ # 时钟回拨
+ if timestamp < self.last_timestamp:
+ logging.error('clock is moving backwards. Rejecting requests until {}'.format(self.last_timestamp))
+ raise InvalidSystemClock
+
+ if timestamp == self.last_timestamp:
+ self.sequence = (self.sequence + 1) & SEQUENCE_MASK
+ if self.sequence == 0:
+ timestamp = self._til_next_millis(self.last_timestamp)
+ else:
+ self.sequence = 0
+
+ self.last_timestamp = timestamp
+
+ new_id = ((timestamp - TWEPOCH) << TIMESTAMP_LEFT_SHIFT) | (self.datacenter_id << DATACENTER_ID_SHIFT) | \
+ (self.worker_id << WOKER_ID_SHIFT) | self.sequence
+ return new_id
+
+ def _til_next_millis(self, last_timestamp):
+ """
+ 等到下一毫秒
+ """
+ timestamp = self._gen_timestamp()
+ while timestamp <= last_timestamp:
+ timestamp = self._gen_timestamp()
+ return timestamp
+
+
+if __name__ == '__main__':
+ for i in range(0,9):
+ worker = IdWorker(1, 2, 0)
+ print(worker.get_id())
\ No newline at end of file
diff --git a/AIGenerate/function/stickers.py b/AIGenerate/function/stickers.py
new file mode 100644
index 0000000000000000000000000000000000000000..0bced985d35bf54c99ca69c94b1dfa99c8e904d7
--- /dev/null
+++ b/AIGenerate/function/stickers.py
@@ -0,0 +1,82 @@
+#!/usr/bin/env python
+# -*- coding: UTF-8 -*-
+"""=================================================
+@Author :蒋虎成
+@Date :2021/9/22 17:04
+@Desc :贴纸元素数据
+=================================================="""
+# 香烟贴纸
+cigarette = {
+ 'colors': [0, '000000', 'dddddd', 'c6c6c6', 'e25b26'],
+ 'data': [
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 3, 3, 3, 3, 4, 1, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0]
+ ]
+}
+# 男头发贴纸
+hairman = {
+ 'colors': [0, 'ed93f0'],
+ 'data': [
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
+ ]
+}
+# 女头发贴纸
+hairwoman = {
+ 'colors': [0, 'ed93f0'],
+ 'data': [
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
+ ]
+}
diff --git a/AIGenerate/function/subject.py b/AIGenerate/function/subject.py
new file mode 100644
index 0000000000000000000000000000000000000000..49a0771117868e1acee9d8cfe9d21e0b818d557d
--- /dev/null
+++ b/AIGenerate/function/subject.py
@@ -0,0 +1,181 @@
+#!/usr/bin/env python
+# -*- coding: UTF-8 -*-
+"""=================================================
+@Author :蒋虎成
+@Date :2021/9/22 17:05
+@Desc :绘图元素
+=================================================="""
+# 设置24*24的画布
+canvas = {
+ 'colors': [0],
+ 'data': [
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
+ ]
+}
+mouse = {
+ 'colors': [0, '000000', 'fe6f06', 'fbb988', 'd2d8db', 'ffffff', 'ecd993', '8af9ff', 'ff94f8', '998fff'],
+ 'data': [
+ [9, 9, 9, 1, 1, 1, 1, 1, 1, 9, 9, 9, 9, 9, 9, 1, 1, 1, 1, 1, 1, 9, 9, 9],
+ [9, 9, 1, 2, 2, 2, 2, 2, 2, 1, 9, 9, 9, 9, 9, 1, 3, 3, 3, 3, 3, 1, 9, 9],
+ [9, 1, 2, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 1, 1, 3, 1, 9],
+ [9, 1, 8, 8, 8, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 1, 8, 8, 8, 1, 9],
+ [9, 1, 8, 8, 8, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 1, 8, 8, 8, 1, 9],
+ [9, 1, 8, 8, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 5, 1, 8, 8, 1, 9],
+ [9, 9, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 5, 5, 5, 1, 1, 9, 9],
+ [9, 9, 9, 1, 2, 2, 1, 1, 1, 2, 2, 2, 4, 3, 3, 1, 1, 1, 5, 5, 1, 9, 9, 9],
+ [9, 9, 9, 1, 2, 1, 1, 7, 7, 1, 4, 4, 3, 3, 1, 7, 7, 1, 1, 5, 1, 9, 9, 9],
+ [9, 9, 1, 2, 2, 1, 1, 7, 7, 1, 4, 4, 3, 3, 1, 7, 7, 1, 1, 5, 5, 1, 9, 9],
+ [9, 9, 1, 4, 4, 1, 7, 1, 1, 1, 4, 4, 5, 5, 1, 1, 1, 7, 1, 5, 5, 1, 9, 9],
+ [9, 9, 1, 1, 4, 4, 1, 1, 1, 4, 4, 5, 5, 5, 5, 1, 1, 1, 5, 5, 5, 1, 9, 9],
+ [9, 9, 1, 4, 4, 4, 4, 4, 4, 4, 4, 5, 1, 5, 5, 5, 5, 5, 5, 5, 5, 1, 9, 9],
+ [9, 9, 1, 1, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 1, 9, 9],
+ [9, 9, 1, 4, 4, 4, 4, 4, 4, 1, 5, 5, 1, 5, 5, 1, 5, 5, 5, 5, 5, 1, 9, 9],
+ [9, 9, 9, 1, 4, 4, 4, 4, 5, 5, 1, 1, 5, 1, 1, 5, 5, 5, 5, 5, 1, 9, 9, 9],
+ [9, 9, 9, 1, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 1, 9, 9, 9],
+ [9, 9, 9, 1, 1, 2, 3, 5, 1, 5, 5, 5, 5, 5, 5, 1, 5, 3, 2, 1, 1, 9, 9, 9],
+ [9, 9, 9, 1, 2, 3, 5, 6, 6, 1, 5, 5, 5, 5, 1, 6, 6, 5, 3, 2, 1, 9, 9, 9],
+ [9, 9, 9, 1, 5, 5, 1, 6, 6, 1, 5, 5, 5, 5, 1, 6, 6, 1, 5, 5, 1, 9, 9, 9],
+ [9, 9, 9, 9, 1, 5, 5, 1, 1, 5, 5, 5, 5, 5, 5, 1, 1, 5, 5, 1, 9, 9, 9, 9],
+ [9, 9, 9, 9, 9, 1, 5, 5, 5, 1, 1, 1, 1, 1, 1, 5, 5, 5, 1, 9, 9, 9, 9, 9],
+ [9, 9, 9, 9, 1, 6, 6, 1, 1, 9, 9, 9, 9, 9, 9, 1, 1, 6, 6, 1, 9, 9, 9, 9],
+ [9, 9, 9, 9, 9, 1, 1, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 1, 1, 9, 9, 9, 9, 9]
+ ]
+}
+cattle = {
+ 'colors': [0, '000000', 'faf9d4', 'ffffff', 'fe6f06', 'fbb988', 'd2d8db', 'ecd993', '8af9ff', 'ff94f8'],
+ 'data': [
+ [9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9],
+ [9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9],
+ [9, 9, 9, 9, 9, 9, 4, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9],
+ [9, 9, 9, 9, 9, 4, 4, 4, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 4, 9, 9, 9, 9, 9],
+ [9, 9, 9, 9, 9, 4, 2, 4, 9, 9, 9, 9, 9, 9, 9, 9, 4, 4, 4, 9, 9, 9, 9, 9],
+ [9, 9, 9, 9, 9, 4, 2, 4, 9, 3, 3, 3, 3, 3, 9, 4, 2, 2, 4, 9, 9, 9, 9, 9],
+ [9, 9, 9, 9, 9, 9, 4, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 9, 9, 9, 9, 9, 9],
+ [9, 9, 9, 9, 9, 9, 3, 3, 4, 3, 3, 3, 5, 3, 3, 3, 3, 9, 9, 9, 9, 9, 9, 9],
+ [9, 9, 9, 9, 9, 3, 3, 4, 3, 3, 3, 5, 5, 3, 3, 4, 3, 3, 9, 9, 9, 9, 9, 9],
+ [9, 9, 9, 9, 9, 9, 4, 4, 3, 3, 3, 5, 5, 4, 3, 3, 4, 9, 3, 9, 9, 9, 9, 9],
+ [9, 9, 9, 9, 9, 9, 4, 3, 3, 3, 5, 5, 5, 4, 4, 4, 4, 9, 9, 9, 9, 9, 9, 9],
+ [9, 9, 9, 9, 9, 4, 3, 3, 4, 1, 5, 5, 5, 1, 4, 4, 4, 4, 9, 9, 9, 9, 9, 9],
+ [9, 9, 9, 9, 9, 4, 4, 4, 4, 4, 5, 5, 5, 4, 4, 4, 4, 4, 9, 9, 9, 9, 9, 9],
+ [9, 9, 9, 9, 9, 4, 4, 4, 4, 5, 5, 5, 5, 5, 4, 4, 4, 4, 9, 9, 9, 9, 9, 9],
+ [9, 9, 9, 9, 9, 4, 4, 4, 5, 5, 1, 5, 1, 5, 5, 4, 4, 4, 9, 9, 9, 9, 9, 9],
+ [9, 9, 9, 9, 9, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 4, 4, 4, 9, 9, 9, 9, 9, 9],
+ [9, 9, 9, 9, 9, 9, 4, 4, 5, 5, 5, 5, 5, 5, 5, 4, 4, 9, 9, 9, 9, 9, 9, 9],
+ [9, 9, 9, 9, 9, 9, 9, 4, 4, 5, 5, 5, 5, 5, 4, 4, 9, 8, 8, 9, 9, 9, 9, 9],
+ [9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 4, 4, 4, 9, 9, 9, 8, 8, 8, 8, 9, 9, 9, 9],
+ [9, 9, 9, 9, 9, 9, 9, 9, 9, 4, 4, 4, 4, 4, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9],
+ [9, 9, 9, 9, 9, 9, 9, 9, 4, 4, 6, 4, 6, 4, 4, 8, 8, 9, 9, 9, 9, 9, 9, 9],
+ [9, 9, 9, 9, 9, 9, 9, 9, 7, 4, 7, 4, 7, 4, 7, 9, 9, 9, 9, 9, 9, 9, 9, 9],
+ [9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9],
+ [9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9]
+ ]
+}
+man = {
+ 'colors': [0, '000000', 'e0c29e', '585858', 'fdfdfd'],
+ 'data': [
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 2, 2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 1, 2, 2, 3, 3, 2, 2, 2, 3, 3, 1, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 1, 2, 2, 2, 1, 4, 2, 2, 2, 1, 4, 1, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 2, 2, 1, 1, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 2, 1, 1, 1, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 2, 2, 2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
+ ]
+}
+woman = {
+ 'colors': [0, '000000', 'e0c29e', '585858', 'fdfdfd'],
+ 'data': [
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 2, 2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 1, 2, 3, 3, 2, 2, 2, 3, 3, 2, 1, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 1, 2, 2, 1, 4, 2, 2, 2, 1, 4, 2, 2, 1, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 2, 1, 2, 2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 1, 1, 1, 2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 2, 2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0]
+ ]
+}
+cattle_DC = {
+ 'colors': [0,"000000","81ffb7","ffffff","f0ff96","030500",'ecd993', '8af9ff',"fffeff","fafcfb"],
+ 'data': [
+ [7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 1, 1, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7],
+ [7, 7, 7, 7, 7, 7, 7, 7, 7, 1, 4, 4, 1, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7],
+ [7, 7, 7, 7, 7, 7, 1, 1, 1, 4, 4, 4, 4, 1, 1, 1, 7, 7, 7, 7, 7, 7, 7, 7],
+ [7, 1, 1, 7, 7, 1, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 1, 7, 7, 7, 7, 7, 7, 7],
+ [7, 1, 2, 1, 1, 2, 3, 3, 3, 3, 3, 4, 1, 1, 5, 5, 5, 1, 7, 7, 7, 7, 7, 7],
+ [7, 1, 2, 2, 1, 2, 2, 3, 1, 1, 1, 1, 7, 7, 1, 5, 5, 1, 7, 7, 7, 7, 7, 7],
+ [7, 7, 1, 2, 1, 2, 2, 1, 8, 8, 8, 8, 8, 8, 1, 5, 5, 1, 7, 7, 7, 7, 7, 7],
+ [7, 7, 1, 1, 2, 2, 1, 8, 8, 8, 8, 8, 8, 1, 5, 5, 5, 1, 7, 7, 7, 7, 7, 7],
+ [7, 7, 7, 1, 2, 2, 1, 8, 1, 1, 8, 8, 1, 5, 5, 5, 1, 7, 7, 7, 7, 7, 7, 7],
+ [7, 7, 7, 1, 2, 1, 8, 8, 1, 1, 8, 8, 8, 1, 1, 1, 6, 1, 7, 7, 1, 7, 7, 7],
+ [7, 7, 7, 7, 1, 8, 8, 8, 1, 1, 8, 8, 8, 1, 6, 6, 6, 1, 1, 1, 5, 1, 7, 7],
+ [7, 7, 7, 7, 1, 8, 8, 8, 8, 8, 8, 8, 1, 6, 6, 6, 1, 1, 3, 3, 2, 1, 7, 7],
+ [7, 7, 7, 7, 1, 8, 8, 8, 8, 8, 8, 8, 8, 1, 1, 1, 4, 4, 4, 3, 3, 1, 7, 7],
+ [7, 7, 7, 7, 7, 1, 8, 8, 8, 8, 8, 8, 1, 1, 8, 8, 8, 4, 4, 3, 1, 7, 7, 7],
+ [7, 7, 7, 7, 7, 7, 1, 1, 1, 1, 1, 1, 8, 8, 1, 1, 1, 1, 4, 1, 7, 7, 7, 7],
+ [7, 7, 7, 7, 7, 7, 7, 7, 7, 1, 8, 8, 8, 8, 8, 8, 8, 8, 1, 8, 1, 1, 7, 7],
+ [7, 7, 7, 7, 7, 7, 7, 7, 7, 1, 8, 8, 8, 8, 8, 8, 8, 8, 8, 1, 3, 3, 1, 7],
+ [7, 7, 7, 7, 7, 7, 7, 7, 1, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 1, 2, 2, 1, 7],
+ [7, 7, 7, 7, 7, 7, 7, 7, 1, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 1, 5, 1, 7],
+ [7, 7, 7, 7, 7, 7, 7, 1, 8, 1, 8, 8, 1, 1, 1, 1, 1, 1, 8, 8, 1, 6, 1, 7],
+ [7, 7, 7, 7, 7, 7, 7, 1, 2, 1, 5, 5, 1, 7, 7, 7, 1, 5, 1, 2, 2, 1, 1, 7],
+ [7, 7, 7, 7, 7, 7, 7, 1, 3, 1, 4, 4, 1, 7, 7, 7, 1, 4, 1, 3, 3, 1, 7, 7],
+ [7, 7, 7, 7, 7, 7, 7, 7, 1, 1, 1, 1, 7, 7, 7, 7, 1, 1, 1, 1, 1, 1, 7, 7],
+ [7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7]
+ ]
+}
+
diff --git a/AIGenerate/generate_pixel/__pycache__/admin.cpython-39.pyc b/AIGenerate/generate_pixel/__pycache__/admin.cpython-39.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..5aea87d59590d229158d3e5f9356e9e1520f7fe5
Binary files /dev/null and b/AIGenerate/generate_pixel/__pycache__/admin.cpython-39.pyc differ
diff --git a/AIGenerate/generate_pixel/__pycache__/apps.cpython-39.pyc b/AIGenerate/generate_pixel/__pycache__/apps.cpython-39.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..099c2439d6400f091c76b8ffc488ca951fb1dc02
Binary files /dev/null and b/AIGenerate/generate_pixel/__pycache__/apps.cpython-39.pyc differ
diff --git a/AIGenerate/generate_pixel/__pycache__/models.cpython-39.pyc b/AIGenerate/generate_pixel/__pycache__/models.cpython-39.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..3bd946605c607e730d67a1e7f20ee722003d5437
Binary files /dev/null and b/AIGenerate/generate_pixel/__pycache__/models.cpython-39.pyc differ
diff --git a/AIGenerate/generate_pixel/__pycache__/views.cpython-39.pyc b/AIGenerate/generate_pixel/__pycache__/views.cpython-39.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..6a4a936ec6268a79ee37fefec3c73dca288fc375
Binary files /dev/null and b/AIGenerate/generate_pixel/__pycache__/views.cpython-39.pyc differ
diff --git a/AIGenerate/generate_pixel/admin.py b/AIGenerate/generate_pixel/admin.py
new file mode 100644
index 0000000000000000000000000000000000000000..8c38f3f3dad51e4585f3984282c2a4bec5349c1e
--- /dev/null
+++ b/AIGenerate/generate_pixel/admin.py
@@ -0,0 +1,3 @@
+from django.contrib import admin
+
+# Register your models here.
diff --git a/AIGenerate/generate_pixel/apps.py b/AIGenerate/generate_pixel/apps.py
new file mode 100644
index 0000000000000000000000000000000000000000..484ed3e4d7e9d6773d9d3b6c295cb21ecfb14ee1
--- /dev/null
+++ b/AIGenerate/generate_pixel/apps.py
@@ -0,0 +1,6 @@
+from django.apps import AppConfig
+
+
+class GeneratePixelConfig(AppConfig):
+ default_auto_field = 'django.db.models.BigAutoField'
+ name = 'generate_pixel'
diff --git a/AIGenerate/generate_pixel/models.py b/AIGenerate/generate_pixel/models.py
new file mode 100644
index 0000000000000000000000000000000000000000..71a836239075aa6e6e4ecb700e9c42c95c022d91
--- /dev/null
+++ b/AIGenerate/generate_pixel/models.py
@@ -0,0 +1,3 @@
+from django.db import models
+
+# Create your models here.
diff --git a/AIGenerate/generate_pixel/tests.py b/AIGenerate/generate_pixel/tests.py
new file mode 100644
index 0000000000000000000000000000000000000000..7ce503c2dd97ba78597f6ff6e4393132753573f6
--- /dev/null
+++ b/AIGenerate/generate_pixel/tests.py
@@ -0,0 +1,3 @@
+from django.test import TestCase
+
+# Create your tests here.
diff --git a/AIGenerate/generate_pixel/views.py b/AIGenerate/generate_pixel/views.py
new file mode 100644
index 0000000000000000000000000000000000000000..3be722c23744ce7649045ab04a14d70732d0abf3
--- /dev/null
+++ b/AIGenerate/generate_pixel/views.py
@@ -0,0 +1,176 @@
+import base64
+import csv
+import os
+import random
+
+import cv2
+from django.http import HttpResponse
+from django.shortcuts import render
+from PIL import Image
+from PIL import ImageFile
+
+# Create your views here.
+import tools.config as config
+from function import subject
+from tools.colors import ColorMultiImage
+from tools.model import training
+
+
+def imagesNeedTrian(request):
+ if request.method == 'POST':
+ images = request.POST.getlist("images[]")
+ i = 1
+ print(images)
+ for image in images:
+ image_data = base64.b64decode(image.split('base64,')[1])
+ # destination = open('./data/' + str(i) + ".jpg", 'wb+')
+ # for chunk in image_data.chunks():
+ # destination.write(chunk)
+ # destination.close()
+ with open('./data/' + str(i) + ".jpg", 'wb+') as f:
+ f.write(image_data)
+ compress_image('./data/' + str(i) + ".jpg")
+ i = i + 1
+ return HttpResponse('上传成功,请等待训练', content_type="text/plain")
+ else:
+ return HttpResponse('上传失败,请重新上传', content_type="text/plain")
+
+
+# 压缩图片文件
+def compress_image(outfile, mb=15, quality=85, k=0.9):
+ """不改变图片尺寸压缩到指定大小
+ :param outfile: 压缩文件保存地址
+ :param mb: 压缩目标,KB
+ :param step: 每次调整的压缩比率
+ :param quality: 初始压缩比率
+ :return: 压缩文件地址,压缩文件大小
+ """
+ o_size = os.path.getsize(outfile) // 1024
+ print(o_size, mb)
+ if o_size <= mb:
+ return outfile
+
+ ImageFile.LOAD_TRUNCATED_IMAGES = True
+ while o_size > mb:
+ im = Image.open(outfile)
+ x, y = im.size
+ out = im.resize((int(x * k), int(y * k)), Image.ANTIALIAS)
+ try:
+ out.save(outfile, quality=quality)
+ except Exception as e:
+ print(e)
+ break
+ o_size = os.path.getsize(outfile) // 1024
+ return outfile
+
+
+# 训练生成颜色模型
+def train(request):
+ if request.method == 'GET':
+ color_model_path = training(config.color_data_path)
+ print("颜色模型生成路径:" + color_model_path)
+ modelName = color_model_path.split("csv\\")[1]
+ # with open(color_model_path, 'rb') as f:
+ # response = HttpResponse(f.read(), content_type="application/octet-stream")
+ # response['Content-Disposition'] = 'attachment; filename={0}'.format(modelName + '.csv')
+ # # 训练成功后删除data文件夹下的内容
+ del_files('./data/')
+
+ return HttpResponse(modelName, content_type="text/plain")
+
+
+# 删除文件夹下的文件
+def del_files(path_file):
+ ls = os.listdir(path_file)
+ for i in ls:
+ f_path = os.path.join(path_file, i)
+ # 判断是否是一个目录,若是,则递归删除
+ if os.path.isdir(f_path):
+ del_files(f_path)
+ else:
+ os.remove(f_path)
+
+
+# 根据用户训练生成的模型和源图片生成NFT
+def generateByModel(request):
+ if request.method == 'POST':
+ image = request.POST.get('image')
+ count = int(request.POST.get('count'))
+ image_data = base64.b64decode(image.split('base64,')[1])
+ i = random.randint(1,100)
+ with open('./rootPic/' +str(i)+".jpg", 'wb+') as f:
+ f.write(image_data)
+ # with open('./rootPic/' + image.name, 'wb+') as f:
+ # f.write(image.read())
+ # 转为24X24像素图
+ # convertPixel('./rootPic/'+image.name)
+ config.n = count
+ # 打开模型csv
+ f = open(config.color_model_path, "r+", encoding="utf-8-sig")
+ reader = csv.reader(f)
+ colors_max = len(list(reader))
+ print(f"当前为艺术家风格,当前模型可用颜色数为{colors_max}个")
+ generate_color = ColorMultiImage()
+ stickers = [subject.canvas, convertPixel('./rootPic/' + str(i)+".jpg")] # 选择模型
+ for amount in range(1, config.n+1): # 设置生成数量
+ pixel = generate_color.merges(stickers)
+ colors_number = generate_color.colors_number
+ generate_color.generate(pixel, config.color_output_name, str(amount), config.color_model_path, 1, colors_number)
+ print(f"INFO:生成第{str(amount)}个{config.color_output_name}")
+ # del_files('./output/'+config.color_output_name+"-output")
+ return HttpResponse('ok', content_type="text/plain")
+
+
+# 将用户上传的图片转为24X24并获取其矩阵值
+def convertPixel(file_path):
+ image = cv2.imread(file_path)
+
+ # crop_size = (24,24)
+ # image = cv2.resize(img, crop_size, interpolation=cv2.INTER_CUBIC)
+ # cv2.imwrite("1.png", image)
+
+ pixel_width, pixel_height = image.shape[0] // 24, image.shape[1] // 24
+ temp_width = int(round(image.shape[0] / pixel_width))
+ temp_height = int(round((image.shape[1] / pixel_height)))
+ tmp = cv2.resize(image, (temp_width, temp_height), interpolation=cv2.INTER_LINEAR)
+ image = cv2.resize(tmp, (image.shape[0], image.shape[1]), interpolation=cv2.INTER_NEAREST)
+ image = cv2.resize(image, (24, 24), interpolation=cv2.INTER_CUBIC)
+
+ # tmp = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
+ # alpha = cv2.threshold(tmp, 0, 255, cv2.THRESH_BINARY)
+ # b, g, r = cv2.split(image)
+ # rgba = [b, g, r, alpha]
+ # image = cv2.merge(rgba,4)
+
+ # cv2.imshow("image", image)
+ # cv2.imwrite("2.png", image)
+ cv2.waitKey(0)
+ shape = image.shape
+ print(shape)
+ data_list = image.data.tolist()
+ colors = []
+
+ rgb_to_hex = lambda r, g, b: '%02x%02x%02x' % (r, g, b)
+
+ for x in range(shape[0]):
+ for y in range(shape[1]):
+ color = data_list[x][y]
+ color = rgb_to_hex(*color)
+ colors.append(color)
+ colors_list = ['000000']
+ for color in colors:
+ if color not in colors_list:
+ colors_list.append(color)
+ model = {'colors': [0] + colors_list}
+ # print(model)
+ data = []
+ for x in range(shape[0]):
+ item = []
+ for y in range(shape[1]):
+ color = data_list[x][y]
+ color = rgb_to_hex(*color)
+ index = colors_list.index(color)
+ item.append(index + 1)
+ data.append(item)
+ model['data'] = data
+ return model
diff --git a/AIGenerate/manage.py b/AIGenerate/manage.py
new file mode 100644
index 0000000000000000000000000000000000000000..afa5bc31e69c2c4bce4a1ff1088bc66e7cb37e60
--- /dev/null
+++ b/AIGenerate/manage.py
@@ -0,0 +1,21 @@
+#!/usr/bin/env python
+"""Django's command-line utility for administrative tasks."""
+import os
+import sys
+
+
+def main():
+ """Run administrative tasks."""
+ os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'AIGenerateNFT.settings')
+ try:
+ from django.core.management import execute_from_command_line
+ except ImportError as exc:
+ raise ImportError(
+ "Couldn't import Django. Are you sure it's installed and "
+ "available on your PYTHONPATH environment variable? Did you "
+ "forget to activate a virtual environment?"
+ ) from exc
+ execute_from_command_line(sys.argv)
+
+if __name__ == '__main__':
+ main()
\ No newline at end of file
diff --git a/AIGenerate/output/csv/1442865660962013184.csv b/AIGenerate/output/csv/1442865660962013184.csv
new file mode 100644
index 0000000000000000000000000000000000000000..a089107edf18bdaf2e74151de70228e80cfe9aa5
--- /dev/null
+++ b/AIGenerate/output/csv/1442865660962013184.csv
@@ -0,0 +1,360 @@
+141,155,167
+160,176,176
+148,167,177
+154,180,191
+132,145,159
+154,164,163
+125,134,144
+146,145,149
+123,147,180
+167,188,189
+130,106,99
+141,130,132
+137,118,115
+136,161,190
+117,120,127
+103,140,189
+120,80,67
+131,94,82
+114,156,203
+172,199,204
+109,92,89
+109,132,166
+102,106,111
+81,131,194
+136,178,214
+104,65,54
+27,33,33
+191,216,218
+73,75,78
+46,80,207
+222,187,126
+216,178,109
+230,217,202
+78,127,106
+224,198,148
+66,134,127
+93,144,129
+81,149,148
+229,208,173
+217,206,189
+210,194,166
+100,161,163
+53,116,103
+112,146,154
+71,108,83
+38,64,44
+102,136,101
+235,226,222
+126,166,172
+123,148,126
+20,39,24
+44,94,73
+66,83,59
+158,160,134
+193,178,143
+194,162,97
+88,123,138
+106,111,78
+141,136,100
+150,186,189
+22,30,9
+36,52,9
+39,69,40
+43,83,9
+42,92,66
+53,99,33
+46,111,98
+27,41,34
+193,204,213
+43,131,133
+66,70,13
+153,190,215
+71,121,62
+62,155,163
+100,103,103
+81,138,109
+189,167,57
+148,142,119
+37,48,78
+85,110,12
+131,156,174
+194,178,122
+84,83,65
+101,123,155
+172,147,7
+178,177,167
+48,58,121
+89,179,198
+126,141,29
+45,53,175
+131,101,33
+160,150,149
+118,92,27
+136,108,49
+150,135,153
+158,139,137
+148,127,130
+160,138,116
+160,145,165
+148,124,110
+143,143,140
+127,91,14
+171,150,131
+143,117,66
+121,96,47
+112,80,11
+169,163,171
+145,158,157
+133,120,152
+137,108,100
+197,198,202
+180,163,151
+132,117,123
+176,182,198
+152,128,87
+142,134,174
+191,181,176
+159,150,193
+121,100,77
+203,216,229
+144,121,102
+60,80,69
+175,140,108
+205,187,162
+145,135,125
+54,107,106
+190,157,124
+51,67,54
+184,167,148
+40,90,88
+184,178,171
+71,93,84
+162,121,84
+158,164,167
+190,193,194
+36,53,43
+171,182,188
+205,176,141
+164,150,138
+90,106,101
+72,122,122
+28,70,68
+114,122,118
+201,211,215
+131,150,151
+125,106,88
+215,203,189
+20,39,25
+219,228,231
+96,142,140
+117,120,125
+110,110,115
+129,109,114
+91,106,110
+131,125,128
+97,114,121
+152,127,130
+162,138,141
+70,90,91
+121,98,105
+143,116,119
+78,100,103
+102,98,105
+88,91,94
+101,122,134
+118,130,141
+53,85,86
+171,149,153
+141,136,140
+43,74,74
+78,114,120
+110,85,96
+57,100,107
+135,106,100
+69,75,75
+28,61,63
+139,148,159
+183,165,170
+156,167,179
+197,191,199
+213,190,181
+115,111,119
+207,198,202
+212,179,165
+129,124,133
+150,133,145
+195,178,172
+170,167,189
+190,181,197
+105,122,145
+171,144,153
+154,150,169
+90,103,129
+180,158,171
+78,82,104
+100,97,107
+127,138,159
+202,161,151
+52,72,92
+60,99,121
+112,85,87
+76,122,149
+83,65,71
+98,138,176
+177,129,129
+147,109,112
+134,159,192
+169,194,220
+46,45,59
+212,214,225
+224,199,198
+217,214,216
+199,190,189
+196,206,208
+93,140,139
+177,175,174
+76,119,118
+214,174,171
+50,106,111
+46,83,85
+170,195,198
+197,153,149
+115,161,164
+238,223,223
+79,92,88
+137,182,189
+158,157,157
+56,130,143
+73,151,170
+108,115,112
+14,58,73
+31,144,173
+60,162,198
+129,138,136
+47,64,60
+18,117,144
+17,83,106
+97,176,202
+176,129,123
+10,35,38
+73,105,68
+59,89,52
+72,112,92
+91,119,83
+90,122,106
+45,54,22
+104,136,120
+45,73,36
+64,70,38
+60,90,78
+76,139,128
+126,148,129
+47,70,64
+61,122,114
+83,141,101
+78,87,54
+90,155,143
+107,170,157
+47,107,95
+142,165,145
+112,134,97
+106,161,118
+96,103,68
+27,34,9
+32,87,73
+122,186,179
+27,55,43
+142,209,205
+164,189,170
+179,231,224
+124,121,97
+168,134,110
+106,109,83
+187,142,115
+84,94,74
+85,107,94
+99,123,105
+66,91,95
+150,118,96
+143,135,114
+60,77,77
+208,154,125
+175,120,94
+119,136,119
+77,106,116
+77,74,60
+91,122,131
+162,150,130
+105,81,70
+187,160,142
+52,58,57
+137,152,140
+134,99,78
+104,142,149
+223,170,141
+160,168,165
+119,157,180
+208,198,183
+154,185,219
+228,229,233
+183,169,127
+196,194,172
+189,178,142
+190,184,158
+156,167,161
+144,155,151
+169,178,170
+153,147,127
+163,158,140
+133,143,140
+137,163,171
+175,169,151
+123,153,161
+142,134,113
+152,139,92
+173,158,120
+181,188,179
+150,174,181
+197,199,187
+111,140,148
+163,143,105
+121,129,128
+168,130,80
+144,120,87
+165,187,191
+127,120,100
+101,108,115
+97,125,133
+119,106,78
+84,91,98
+187,180,156
+95,133,154
+82,118,142
+102,125,135
+169,175,161
+196,189,166
+114,139,148
+146,168,170
+130,153,157
+109,148,167
+88,109,122
+125,163,179
+68,99,125
+56,79,107
+53,63,80
+174,167,140
+44,84,129
+151,158,147
+161,183,184
+140,183,197
+34,66,102
+58,102,147
+27,47,71
+43,43,44
+133,137,126
+77,90,101
+169,205,214
+171,149,113
+19,23,30
+169,128,79
diff --git a/AIGenerate/output/csv/1519858837211840512.csv b/AIGenerate/output/csv/1519858837211840512.csv
new file mode 100644
index 0000000000000000000000000000000000000000..a20818ae9c81f9f55874f2ee356db83816cd956c
--- /dev/null
+++ b/AIGenerate/output/csv/1519858837211840512.csv
@@ -0,0 +1,35 @@
+101.0,104.0,108.0,313.5663213590149
+54.0,100.0,145.0,326.97849699942043
+92.0,108.0,132.0,337.902260276548
+122.0,115.0,103.0,339.81202294430375
+63.0,113.0,160.0,364.7634480685736
+116.0,122.0,128.0,367.2500850918894
+138.0,134.0,125.0,397.0484758659829
+89.0,127.0,167.0,400.5559369098778
+69.0,125.0,176.0,401.6168810453876
+136.0,146.0,149.0,433.3452857926921
+76.0,137.0,190.0,436.217566845949
+135.0,145.0,155.0,437.037590452755
+159.0,150.0,138.0,446.71746130454204
+101.0,146.0,191.0,458.02003828298825
+82.0,148.0,203.0,467.98187898945406
+154.0,164.0,166.0,486.2317959317346
+90.0,158.0,213.0,495.4135504177293
+186.0,172.0,154.0,512.3825322695925
+119.0,169.0,214.0,521.9410343701431
+95.0,170.0,226.0,528.0871639553219
+178.0,180.0,179.0,537.4399748460287
+101.0,179.0,235.0,552.3980356986708
+161.0,194.0,188.0,552.5548350192269
+165.0,185.0,201.0,555.1117110264834
+109.0,189.0,243.0,577.5125235384511
+196.0,197.0,194.0,587.4755978974787
+119.0,198.0,250.0,600.9649060963335
+185.0,212.0,215.0,618.3724574184639
+134.0,209.0,252.0,623.6819476904875
+212.0,213.0,211.0,636.3397192390634
+210.0,223.0,231.0,665.7267469183583
+226.0,227.0,226.0,679.1881067679262
+205.0,234.0,234.0,679.7284283654208
+234.0,241.0,241.0,717.1697791928352
+247.0,251.0,250.0,748.7045935209527
diff --git a/AIGenerate/output/csv/1519859153118429184.csv b/AIGenerate/output/csv/1519859153118429184.csv
new file mode 100644
index 0000000000000000000000000000000000000000..a20818ae9c81f9f55874f2ee356db83816cd956c
--- /dev/null
+++ b/AIGenerate/output/csv/1519859153118429184.csv
@@ -0,0 +1,35 @@
+101.0,104.0,108.0,313.5663213590149
+54.0,100.0,145.0,326.97849699942043
+92.0,108.0,132.0,337.902260276548
+122.0,115.0,103.0,339.81202294430375
+63.0,113.0,160.0,364.7634480685736
+116.0,122.0,128.0,367.2500850918894
+138.0,134.0,125.0,397.0484758659829
+89.0,127.0,167.0,400.5559369098778
+69.0,125.0,176.0,401.6168810453876
+136.0,146.0,149.0,433.3452857926921
+76.0,137.0,190.0,436.217566845949
+135.0,145.0,155.0,437.037590452755
+159.0,150.0,138.0,446.71746130454204
+101.0,146.0,191.0,458.02003828298825
+82.0,148.0,203.0,467.98187898945406
+154.0,164.0,166.0,486.2317959317346
+90.0,158.0,213.0,495.4135504177293
+186.0,172.0,154.0,512.3825322695925
+119.0,169.0,214.0,521.9410343701431
+95.0,170.0,226.0,528.0871639553219
+178.0,180.0,179.0,537.4399748460287
+101.0,179.0,235.0,552.3980356986708
+161.0,194.0,188.0,552.5548350192269
+165.0,185.0,201.0,555.1117110264834
+109.0,189.0,243.0,577.5125235384511
+196.0,197.0,194.0,587.4755978974787
+119.0,198.0,250.0,600.9649060963335
+185.0,212.0,215.0,618.3724574184639
+134.0,209.0,252.0,623.6819476904875
+212.0,213.0,211.0,636.3397192390634
+210.0,223.0,231.0,665.7267469183583
+226.0,227.0,226.0,679.1881067679262
+205.0,234.0,234.0,679.7284283654208
+234.0,241.0,241.0,717.1697791928352
+247.0,251.0,250.0,748.7045935209527
diff --git a/AIGenerate/output/csv/1519859356684779520.csv b/AIGenerate/output/csv/1519859356684779520.csv
new file mode 100644
index 0000000000000000000000000000000000000000..a20818ae9c81f9f55874f2ee356db83816cd956c
--- /dev/null
+++ b/AIGenerate/output/csv/1519859356684779520.csv
@@ -0,0 +1,35 @@
+101.0,104.0,108.0,313.5663213590149
+54.0,100.0,145.0,326.97849699942043
+92.0,108.0,132.0,337.902260276548
+122.0,115.0,103.0,339.81202294430375
+63.0,113.0,160.0,364.7634480685736
+116.0,122.0,128.0,367.2500850918894
+138.0,134.0,125.0,397.0484758659829
+89.0,127.0,167.0,400.5559369098778
+69.0,125.0,176.0,401.6168810453876
+136.0,146.0,149.0,433.3452857926921
+76.0,137.0,190.0,436.217566845949
+135.0,145.0,155.0,437.037590452755
+159.0,150.0,138.0,446.71746130454204
+101.0,146.0,191.0,458.02003828298825
+82.0,148.0,203.0,467.98187898945406
+154.0,164.0,166.0,486.2317959317346
+90.0,158.0,213.0,495.4135504177293
+186.0,172.0,154.0,512.3825322695925
+119.0,169.0,214.0,521.9410343701431
+95.0,170.0,226.0,528.0871639553219
+178.0,180.0,179.0,537.4399748460287
+101.0,179.0,235.0,552.3980356986708
+161.0,194.0,188.0,552.5548350192269
+165.0,185.0,201.0,555.1117110264834
+109.0,189.0,243.0,577.5125235384511
+196.0,197.0,194.0,587.4755978974787
+119.0,198.0,250.0,600.9649060963335
+185.0,212.0,215.0,618.3724574184639
+134.0,209.0,252.0,623.6819476904875
+212.0,213.0,211.0,636.3397192390634
+210.0,223.0,231.0,665.7267469183583
+226.0,227.0,226.0,679.1881067679262
+205.0,234.0,234.0,679.7284283654208
+234.0,241.0,241.0,717.1697791928352
+247.0,251.0,250.0,748.7045935209527
diff --git a/AIGenerate/output/csv/1519860574308007936.csv b/AIGenerate/output/csv/1519860574308007936.csv
new file mode 100644
index 0000000000000000000000000000000000000000..a20818ae9c81f9f55874f2ee356db83816cd956c
--- /dev/null
+++ b/AIGenerate/output/csv/1519860574308007936.csv
@@ -0,0 +1,35 @@
+101.0,104.0,108.0,313.5663213590149
+54.0,100.0,145.0,326.97849699942043
+92.0,108.0,132.0,337.902260276548
+122.0,115.0,103.0,339.81202294430375
+63.0,113.0,160.0,364.7634480685736
+116.0,122.0,128.0,367.2500850918894
+138.0,134.0,125.0,397.0484758659829
+89.0,127.0,167.0,400.5559369098778
+69.0,125.0,176.0,401.6168810453876
+136.0,146.0,149.0,433.3452857926921
+76.0,137.0,190.0,436.217566845949
+135.0,145.0,155.0,437.037590452755
+159.0,150.0,138.0,446.71746130454204
+101.0,146.0,191.0,458.02003828298825
+82.0,148.0,203.0,467.98187898945406
+154.0,164.0,166.0,486.2317959317346
+90.0,158.0,213.0,495.4135504177293
+186.0,172.0,154.0,512.3825322695925
+119.0,169.0,214.0,521.9410343701431
+95.0,170.0,226.0,528.0871639553219
+178.0,180.0,179.0,537.4399748460287
+101.0,179.0,235.0,552.3980356986708
+161.0,194.0,188.0,552.5548350192269
+165.0,185.0,201.0,555.1117110264834
+109.0,189.0,243.0,577.5125235384511
+196.0,197.0,194.0,587.4755978974787
+119.0,198.0,250.0,600.9649060963335
+185.0,212.0,215.0,618.3724574184639
+134.0,209.0,252.0,623.6819476904875
+212.0,213.0,211.0,636.3397192390634
+210.0,223.0,231.0,665.7267469183583
+226.0,227.0,226.0,679.1881067679262
+205.0,234.0,234.0,679.7284283654208
+234.0,241.0,241.0,717.1697791928352
+247.0,251.0,250.0,748.7045935209527
diff --git a/AIGenerate/output/csv/1523319122841042944.csv b/AIGenerate/output/csv/1523319122841042944.csv
new file mode 100644
index 0000000000000000000000000000000000000000..bee71fe8a32e1f6bf790a67323ccf672e9299f27
--- /dev/null
+++ b/AIGenerate/output/csv/1523319122841042944.csv
@@ -0,0 +1,35 @@
+115.0,105.0,87.0,307.40498404995
+42.0,97.0,147.0,322.922095384475
+57.0,100.0,142.0,324.0804207918538
+101.0,110.0,113.0,326.4238700964591
+59.0,109.0,157.0,354.8202835151198
+126.0,122.0,112.0,360.12634501657885
+78.0,117.0,154.0,367.82228640336626
+66.0,119.0,169.0,384.45709489161464
+122.0,128.0,146.0,397.0341413216249
+145.0,138.0,126.0,408.9623421118685
+76.0,129.0,178.0,411.3374717005491
+123.0,156.0,140.0,430.4083521603351
+75.0,137.0,190.0,435.91383672335405
+100.0,148.0,190.0,458.9960001187374
+81.0,145.0,201.0,461.42560596888205
+161.0,156.0,148.0,464.8393224579059
+147.0,156.0,182.0,486.31116059769283
+87.0,155.0,210.0,486.98903309969415
+144.0,180.0,166.0,501.71130580743346
+93.0,164.0,219.0,511.30910034317793
+123.0,172.0,214.0,527.6702017329337
+179.0,178.0,173.0,530.3078962675834
+97.0,174.0,229.0,537.4826559701718
+103.0,182.0,237.0,559.3176192636435
+165.0,198.0,193.0,565.3645774796561
+111.0,191.0,245.0,583.1504516149756
+197.0,199.0,197.0,593.5464618239671
+121.0,200.0,252.0,606.6285818588875
+184.0,215.0,222.0,628.2730671252748
+141.0,213.0,253.0,633.1370525753093
+212.0,217.0,218.0,647.7361176628951
+196.0,225.0,243.0,669.5892543427276
+206.0,238.0,240.0,691.3189273953086
+229.0,233.0,234.0,696.4601133253253
+244.0,250.0,250.0,744.9263910783401
diff --git a/AIGenerate/output/csv/1523319142554271744.csv b/AIGenerate/output/csv/1523319142554271744.csv
new file mode 100644
index 0000000000000000000000000000000000000000..bee71fe8a32e1f6bf790a67323ccf672e9299f27
--- /dev/null
+++ b/AIGenerate/output/csv/1523319142554271744.csv
@@ -0,0 +1,35 @@
+115.0,105.0,87.0,307.40498404995
+42.0,97.0,147.0,322.922095384475
+57.0,100.0,142.0,324.0804207918538
+101.0,110.0,113.0,326.4238700964591
+59.0,109.0,157.0,354.8202835151198
+126.0,122.0,112.0,360.12634501657885
+78.0,117.0,154.0,367.82228640336626
+66.0,119.0,169.0,384.45709489161464
+122.0,128.0,146.0,397.0341413216249
+145.0,138.0,126.0,408.9623421118685
+76.0,129.0,178.0,411.3374717005491
+123.0,156.0,140.0,430.4083521603351
+75.0,137.0,190.0,435.91383672335405
+100.0,148.0,190.0,458.9960001187374
+81.0,145.0,201.0,461.42560596888205
+161.0,156.0,148.0,464.8393224579059
+147.0,156.0,182.0,486.31116059769283
+87.0,155.0,210.0,486.98903309969415
+144.0,180.0,166.0,501.71130580743346
+93.0,164.0,219.0,511.30910034317793
+123.0,172.0,214.0,527.6702017329337
+179.0,178.0,173.0,530.3078962675834
+97.0,174.0,229.0,537.4826559701718
+103.0,182.0,237.0,559.3176192636435
+165.0,198.0,193.0,565.3645774796561
+111.0,191.0,245.0,583.1504516149756
+197.0,199.0,197.0,593.5464618239671
+121.0,200.0,252.0,606.6285818588875
+184.0,215.0,222.0,628.2730671252748
+141.0,213.0,253.0,633.1370525753093
+212.0,217.0,218.0,647.7361176628951
+196.0,225.0,243.0,669.5892543427276
+206.0,238.0,240.0,691.3189273953086
+229.0,233.0,234.0,696.4601133253253
+244.0,250.0,250.0,744.9263910783401
diff --git a/AIGenerate/output/csv/1523319161168592896.csv b/AIGenerate/output/csv/1523319161168592896.csv
new file mode 100644
index 0000000000000000000000000000000000000000..bee71fe8a32e1f6bf790a67323ccf672e9299f27
--- /dev/null
+++ b/AIGenerate/output/csv/1523319161168592896.csv
@@ -0,0 +1,35 @@
+115.0,105.0,87.0,307.40498404995
+42.0,97.0,147.0,322.922095384475
+57.0,100.0,142.0,324.0804207918538
+101.0,110.0,113.0,326.4238700964591
+59.0,109.0,157.0,354.8202835151198
+126.0,122.0,112.0,360.12634501657885
+78.0,117.0,154.0,367.82228640336626
+66.0,119.0,169.0,384.45709489161464
+122.0,128.0,146.0,397.0341413216249
+145.0,138.0,126.0,408.9623421118685
+76.0,129.0,178.0,411.3374717005491
+123.0,156.0,140.0,430.4083521603351
+75.0,137.0,190.0,435.91383672335405
+100.0,148.0,190.0,458.9960001187374
+81.0,145.0,201.0,461.42560596888205
+161.0,156.0,148.0,464.8393224579059
+147.0,156.0,182.0,486.31116059769283
+87.0,155.0,210.0,486.98903309969415
+144.0,180.0,166.0,501.71130580743346
+93.0,164.0,219.0,511.30910034317793
+123.0,172.0,214.0,527.6702017329337
+179.0,178.0,173.0,530.3078962675834
+97.0,174.0,229.0,537.4826559701718
+103.0,182.0,237.0,559.3176192636435
+165.0,198.0,193.0,565.3645774796561
+111.0,191.0,245.0,583.1504516149756
+197.0,199.0,197.0,593.5464618239671
+121.0,200.0,252.0,606.6285818588875
+184.0,215.0,222.0,628.2730671252748
+141.0,213.0,253.0,633.1370525753093
+212.0,217.0,218.0,647.7361176628951
+196.0,225.0,243.0,669.5892543427276
+206.0,238.0,240.0,691.3189273953086
+229.0,233.0,234.0,696.4601133253253
+244.0,250.0,250.0,744.9263910783401
diff --git a/AIGenerate/output/csv/1523319179510284288.csv b/AIGenerate/output/csv/1523319179510284288.csv
new file mode 100644
index 0000000000000000000000000000000000000000..bee71fe8a32e1f6bf790a67323ccf672e9299f27
--- /dev/null
+++ b/AIGenerate/output/csv/1523319179510284288.csv
@@ -0,0 +1,35 @@
+115.0,105.0,87.0,307.40498404995
+42.0,97.0,147.0,322.922095384475
+57.0,100.0,142.0,324.0804207918538
+101.0,110.0,113.0,326.4238700964591
+59.0,109.0,157.0,354.8202835151198
+126.0,122.0,112.0,360.12634501657885
+78.0,117.0,154.0,367.82228640336626
+66.0,119.0,169.0,384.45709489161464
+122.0,128.0,146.0,397.0341413216249
+145.0,138.0,126.0,408.9623421118685
+76.0,129.0,178.0,411.3374717005491
+123.0,156.0,140.0,430.4083521603351
+75.0,137.0,190.0,435.91383672335405
+100.0,148.0,190.0,458.9960001187374
+81.0,145.0,201.0,461.42560596888205
+161.0,156.0,148.0,464.8393224579059
+147.0,156.0,182.0,486.31116059769283
+87.0,155.0,210.0,486.98903309969415
+144.0,180.0,166.0,501.71130580743346
+93.0,164.0,219.0,511.30910034317793
+123.0,172.0,214.0,527.6702017329337
+179.0,178.0,173.0,530.3078962675834
+97.0,174.0,229.0,537.4826559701718
+103.0,182.0,237.0,559.3176192636435
+165.0,198.0,193.0,565.3645774796561
+111.0,191.0,245.0,583.1504516149756
+197.0,199.0,197.0,593.5464618239671
+121.0,200.0,252.0,606.6285818588875
+184.0,215.0,222.0,628.2730671252748
+141.0,213.0,253.0,633.1370525753093
+212.0,217.0,218.0,647.7361176628951
+196.0,225.0,243.0,669.5892543427276
+206.0,238.0,240.0,691.3189273953086
+229.0,233.0,234.0,696.4601133253253
+244.0,250.0,250.0,744.9263910783401
diff --git a/AIGenerate/output/csv/1523319197768089600.csv b/AIGenerate/output/csv/1523319197768089600.csv
new file mode 100644
index 0000000000000000000000000000000000000000..bee71fe8a32e1f6bf790a67323ccf672e9299f27
--- /dev/null
+++ b/AIGenerate/output/csv/1523319197768089600.csv
@@ -0,0 +1,35 @@
+115.0,105.0,87.0,307.40498404995
+42.0,97.0,147.0,322.922095384475
+57.0,100.0,142.0,324.0804207918538
+101.0,110.0,113.0,326.4238700964591
+59.0,109.0,157.0,354.8202835151198
+126.0,122.0,112.0,360.12634501657885
+78.0,117.0,154.0,367.82228640336626
+66.0,119.0,169.0,384.45709489161464
+122.0,128.0,146.0,397.0341413216249
+145.0,138.0,126.0,408.9623421118685
+76.0,129.0,178.0,411.3374717005491
+123.0,156.0,140.0,430.4083521603351
+75.0,137.0,190.0,435.91383672335405
+100.0,148.0,190.0,458.9960001187374
+81.0,145.0,201.0,461.42560596888205
+161.0,156.0,148.0,464.8393224579059
+147.0,156.0,182.0,486.31116059769283
+87.0,155.0,210.0,486.98903309969415
+144.0,180.0,166.0,501.71130580743346
+93.0,164.0,219.0,511.30910034317793
+123.0,172.0,214.0,527.6702017329337
+179.0,178.0,173.0,530.3078962675834
+97.0,174.0,229.0,537.4826559701718
+103.0,182.0,237.0,559.3176192636435
+165.0,198.0,193.0,565.3645774796561
+111.0,191.0,245.0,583.1504516149756
+197.0,199.0,197.0,593.5464618239671
+121.0,200.0,252.0,606.6285818588875
+184.0,215.0,222.0,628.2730671252748
+141.0,213.0,253.0,633.1370525753093
+212.0,217.0,218.0,647.7361176628951
+196.0,225.0,243.0,669.5892543427276
+206.0,238.0,240.0,691.3189273953086
+229.0,233.0,234.0,696.4601133253253
+244.0,250.0,250.0,744.9263910783401
diff --git a/AIGenerate/output/csv/1523320878941601792.csv b/AIGenerate/output/csv/1523320878941601792.csv
new file mode 100644
index 0000000000000000000000000000000000000000..bee71fe8a32e1f6bf790a67323ccf672e9299f27
--- /dev/null
+++ b/AIGenerate/output/csv/1523320878941601792.csv
@@ -0,0 +1,35 @@
+115.0,105.0,87.0,307.40498404995
+42.0,97.0,147.0,322.922095384475
+57.0,100.0,142.0,324.0804207918538
+101.0,110.0,113.0,326.4238700964591
+59.0,109.0,157.0,354.8202835151198
+126.0,122.0,112.0,360.12634501657885
+78.0,117.0,154.0,367.82228640336626
+66.0,119.0,169.0,384.45709489161464
+122.0,128.0,146.0,397.0341413216249
+145.0,138.0,126.0,408.9623421118685
+76.0,129.0,178.0,411.3374717005491
+123.0,156.0,140.0,430.4083521603351
+75.0,137.0,190.0,435.91383672335405
+100.0,148.0,190.0,458.9960001187374
+81.0,145.0,201.0,461.42560596888205
+161.0,156.0,148.0,464.8393224579059
+147.0,156.0,182.0,486.31116059769283
+87.0,155.0,210.0,486.98903309969415
+144.0,180.0,166.0,501.71130580743346
+93.0,164.0,219.0,511.30910034317793
+123.0,172.0,214.0,527.6702017329337
+179.0,178.0,173.0,530.3078962675834
+97.0,174.0,229.0,537.4826559701718
+103.0,182.0,237.0,559.3176192636435
+165.0,198.0,193.0,565.3645774796561
+111.0,191.0,245.0,583.1504516149756
+197.0,199.0,197.0,593.5464618239671
+121.0,200.0,252.0,606.6285818588875
+184.0,215.0,222.0,628.2730671252748
+141.0,213.0,253.0,633.1370525753093
+212.0,217.0,218.0,647.7361176628951
+196.0,225.0,243.0,669.5892543427276
+206.0,238.0,240.0,691.3189273953086
+229.0,233.0,234.0,696.4601133253253
+244.0,250.0,250.0,744.9263910783401
diff --git a/AIGenerate/output/csv/1523336144400416768.csv b/AIGenerate/output/csv/1523336144400416768.csv
new file mode 100644
index 0000000000000000000000000000000000000000..bee71fe8a32e1f6bf790a67323ccf672e9299f27
--- /dev/null
+++ b/AIGenerate/output/csv/1523336144400416768.csv
@@ -0,0 +1,35 @@
+115.0,105.0,87.0,307.40498404995
+42.0,97.0,147.0,322.922095384475
+57.0,100.0,142.0,324.0804207918538
+101.0,110.0,113.0,326.4238700964591
+59.0,109.0,157.0,354.8202835151198
+126.0,122.0,112.0,360.12634501657885
+78.0,117.0,154.0,367.82228640336626
+66.0,119.0,169.0,384.45709489161464
+122.0,128.0,146.0,397.0341413216249
+145.0,138.0,126.0,408.9623421118685
+76.0,129.0,178.0,411.3374717005491
+123.0,156.0,140.0,430.4083521603351
+75.0,137.0,190.0,435.91383672335405
+100.0,148.0,190.0,458.9960001187374
+81.0,145.0,201.0,461.42560596888205
+161.0,156.0,148.0,464.8393224579059
+147.0,156.0,182.0,486.31116059769283
+87.0,155.0,210.0,486.98903309969415
+144.0,180.0,166.0,501.71130580743346
+93.0,164.0,219.0,511.30910034317793
+123.0,172.0,214.0,527.6702017329337
+179.0,178.0,173.0,530.3078962675834
+97.0,174.0,229.0,537.4826559701718
+103.0,182.0,237.0,559.3176192636435
+165.0,198.0,193.0,565.3645774796561
+111.0,191.0,245.0,583.1504516149756
+197.0,199.0,197.0,593.5464618239671
+121.0,200.0,252.0,606.6285818588875
+184.0,215.0,222.0,628.2730671252748
+141.0,213.0,253.0,633.1370525753093
+212.0,217.0,218.0,647.7361176628951
+196.0,225.0,243.0,669.5892543427276
+206.0,238.0,240.0,691.3189273953086
+229.0,233.0,234.0,696.4601133253253
+244.0,250.0,250.0,744.9263910783401
diff --git a/AIGenerate/tools/__pycache__/colors.cpython-39.pyc b/AIGenerate/tools/__pycache__/colors.cpython-39.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..98101623e7f146fbfb874b1a97e90e1859f65412
Binary files /dev/null and b/AIGenerate/tools/__pycache__/colors.cpython-39.pyc differ
diff --git a/AIGenerate/tools/__pycache__/config.cpython-39.pyc b/AIGenerate/tools/__pycache__/config.cpython-39.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..9cca97b51a6c81f3af8a401ff17cf85646bc95cc
Binary files /dev/null and b/AIGenerate/tools/__pycache__/config.cpython-39.pyc differ
diff --git a/AIGenerate/tools/__pycache__/configSetting.cpython-39.pyc b/AIGenerate/tools/__pycache__/configSetting.cpython-39.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..96bd2f5d07e476466917c4fc62e064ee53627a79
Binary files /dev/null and b/AIGenerate/tools/__pycache__/configSetting.cpython-39.pyc differ
diff --git a/AIGenerate/tools/__pycache__/model.cpython-39.pyc b/AIGenerate/tools/__pycache__/model.cpython-39.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..e29e5d1eaf35c49b40ef8482093c7ed448795583
Binary files /dev/null and b/AIGenerate/tools/__pycache__/model.cpython-39.pyc differ
diff --git a/AIGenerate/tools/colors.py b/AIGenerate/tools/colors.py
new file mode 100644
index 0000000000000000000000000000000000000000..f013e0c3ce1bccc8146bee08d60c489767ff70c8
--- /dev/null
+++ b/AIGenerate/tools/colors.py
@@ -0,0 +1,125 @@
+#!/usr/bin/env python
+# -*- coding: UTF-8 -*-
+
+import PIL
+import csv
+import cv2
+import math
+import random
+from PIL import Image
+import numpy as np
+from matplotlib import image
+from sklearn.cluster import KMeans
+from os import listdir
+from function.subject import canvas
+import os
+class ColorMultiImage(object):
+ def __init__(self,k = 30,init_method = 'random',random_state = 88):
+ self.k = k
+ self.init_method = init_method
+ self.random_state = random_state
+ self.color_number = 0
+ def box_method(self,color_data, group_distance,colors_number):
+ color_data_random_box = []
+ for i in range(0, colors_number):
+ color_data_random_box.append(
+ color_data[(len(color_data) - 1) - (i * group_distance + random.randint(0, group_distance - 1))])
+ return color_data_random_box
+
+ def rgb_to_hex(self,rgb):
+ color = ''
+ for i in rgb:
+ num = round(float(i))
+ color += str(hex(num))[-2:].replace('x', '0').lower()
+ return color
+
+ def get_all_colors_list(self,model, k):
+ colors = []
+ labels_list = np.arange(0, k + 1)
+ (proportion, _) = np.histogram(model.labels_, bins=labels_list)
+ proportion = proportion.astype("float")
+ proportion /= proportion.sum()
+ for (_, color) in sorted(zip(proportion, model.cluster_centers_), key=lambda x: x[0], reverse=True):
+ colors.append(list(map(int, color)))
+ return colors
+
+ def get_main_colors(self,directory):
+ colors_all_out = []
+ for filename in listdir(directory):
+ img = cv2.imread(directory + filename)
+ try:
+ PIL.Image.fromarray(image.imread(directory + filename))
+ except FileNotFoundError:
+ continue
+ img_data = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
+ r, g, _ = cv2.split(img_data)
+ img = img.reshape((img_data.shape[0] * img_data.shape[1], 3))
+ print("加载" + filename + "中......")
+ model = KMeans(n_clusters=self.k, init=self.init_method, random_state=self.random_state)
+ model.fit(img)
+ colors_all_out += self.get_all_colors_list(model, self.k)
+ print("完成" + filename + "提取!")
+ return colors_all_out
+
+ def get_color_data(self,color_distance_filepath,colors_number):
+ f = open(color_distance_filepath, "r+", encoding="utf-8-sig")
+ reader = csv.reader(f)
+ color_data_sort = list(reader)
+ box = self.box_method(color_data_sort, len(color_data_sort) // colors_number,colors_number)
+ return [self.rgb_to_hex(i[:3]) for i in box]
+
+ def colour_distance(self,rgb_1, rgb_2):
+ R_1, G_1, B_1 = rgb_1
+ R_2, G_2, B_2 = rgb_2
+ rmean = (R_1 + R_2) / 2
+ R = R_1 - R_2
+ G = G_1 - G_2
+ B = B_1 - B_2
+ return math.sqrt((2 + rmean / 256) * (R ** 2) + 4 * (G ** 2) + (2 + (255 - rmean) / 256) * (B ** 2))
+
+ def random_colors(self):
+ colorArr = ['1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f']
+ color = ""
+ for random_value in range(6):
+ color += colorArr[random.randint(0, 14)]
+ return color
+
+ def merge(self,sticker0, sticker1):
+ colors = sticker0['colors']
+ index = {}
+ for i, color in enumerate(sticker1['colors']):
+ if color not in colors:
+ colors.append(color)
+ index[i] = colors.index(color)
+ self.colors_number = colors.index(color)
+ else:
+ index[i] = colors.index(color)
+ for i, row in enumerate(sticker1['data']):
+ for j, color in enumerate(row):
+ if color > 0:
+ sticker0['data'][i][j] = index[color]
+ return sticker0
+
+ def merges(self,stickers):
+ if len(stickers) >= 2:
+ sticker = self.merge(stickers.pop(0), stickers.pop(0))
+ stickers.insert(0, sticker)
+ else:
+ return stickers[0]
+ return self.merges(stickers)
+
+ def generate(self,image_data, name,number,color_distance_filepath,coloring_style,colors_number):
+ palette = [(255, 255, 255,0)]
+ if coloring_style == 0:
+ colors = ['000000'] + [self.random_colors() for i in range(0,colors_number)] #随机颜色
+ if coloring_style == 1:
+ colors = ['000000'] + self.get_color_data(color_distance_filepath,colors_number) # 艺术家风格
+ for color in colors:
+ color = [int(c, 16) for c in (color[:2], color[2:4], color[4:])]
+ palette.append(tuple(color))
+ image = np.asarray([palette[np.asarray(image_data['data']).flatten()[x]] for x in range(0,len(np.asarray(image_data['data']).flatten()))]).flatten().reshape((24,24,3))
+ dirs = os.getcwd() + "\\output\\" + str(name) + "-output\\"
+ if not os.path.exists(dirs):
+ os.makedirs(dirs)
+ image = cv2.resize(image,(2500,2500),interpolation=cv2.INTER_NEAREST)
+ cv2.imwrite(dirs + name + number + ".png",image)
diff --git a/AIGenerate/tools/config.py b/AIGenerate/tools/config.py
new file mode 100644
index 0000000000000000000000000000000000000000..90fca1ec4c77683527d7ff3dff349c8d1ee59614
--- /dev/null
+++ b/AIGenerate/tools/config.py
@@ -0,0 +1,20 @@
+#!/usr/bin/env python
+# -*- coding: UTF-8 -*-
+
+import function.subject as subject
+import function.stickers as stickers
+color_data_path = './data/' # 这里填入训练集文件夹路径例如
+DATACENTER_ID = 0
+WORKER_ID = 0
+SEQUENCE = 0
+color_model_path = "./output/csv/1519858837211840512.csv"
+#module = [subject.canvas, subject.cattle_DC]
+n = 10 #生成数量
+color_output_name = 'cattle' #文件夹名字
+color_style = 1 #0为随机风格,1为艺术家风格
+k = 30 # K-Means算法分成K类
+init_method = 'random'
+random_state = 88 # 艺术家风格分箱颜色数
+color_distance = 300 #艺术家风格颜色差异距离检查
+train = True
+
diff --git a/AIGenerate/tools/model.py b/AIGenerate/tools/model.py
new file mode 100644
index 0000000000000000000000000000000000000000..7177f04b6eb75e61f213285d2ca7af865d1bce67
--- /dev/null
+++ b/AIGenerate/tools/model.py
@@ -0,0 +1,29 @@
+#!/usr/bin/env python
+# -*- coding: UTF-8 -*-
+#模型训练
+import csv
+import os
+from .config import DATACENTER_ID,WORKER_ID,SEQUENCE,color_distance
+from .colors import ColorMultiImage
+import numpy as np
+from function.snowflake import IdWorker
+def training(color_data_path):
+ black_rbg = [0, 0, 0]
+ color_data_distance = []
+ color_distance_filepath = os.getcwd() + "\\output\\csv\\" + str(IdWorker(DATACENTER_ID, WORKER_ID, SEQUENCE).get_id()) + ".csv"
+ get_model = ColorMultiImage()
+ color_distance_csv = open(color_distance_filepath, "a+", newline="", encoding="utf-8-sig")
+ color_data = get_model.get_main_colors(color_data_path)
+
+ writer = csv.writer(color_distance_csv)
+
+ for rbg in color_data:
+ color_data_distance.append(rbg + [get_model.colour_distance(rbg, black_rbg)])
+
+ color_data_sort = sorted(color_data_distance, key=lambda x: x[3])
+ color_data_sort = np.array(color_data_sort)
+ color_data_sort_index = (color_data_sort[:, 3] > color_distance)
+ color_data_sort = color_data_sort[color_data_sort_index]
+ for rbg in color_data_sort:
+ writer.writerow(tuple(rbg))
+ return color_distance_filepath
\ No newline at end of file
diff --git a/ArtPRTP b/ArtPRTP
new file mode 160000
index 0000000000000000000000000000000000000000..b47d4a5d6b6ee181591fe39ac5619d81f2b335ff
--- /dev/null
+++ b/ArtPRTP
@@ -0,0 +1 @@
+Subproject commit b47d4a5d6b6ee181591fe39ac5619d81f2b335ff
diff --git a/a.txt b/a.txt
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/artprtpdb.sql b/artprtpdb.sql
new file mode 100644
index 0000000000000000000000000000000000000000..8e92dc2950837d473d88f7922fdbca2637ec446f
--- /dev/null
+++ b/artprtpdb.sql
@@ -0,0 +1,367 @@
+/*
+SQLyog Community v13.1.6 (64 bit)
+MySQL - 8.0.20 : Database - artprtpdb
+*********************************************************************
+*/
+
+/*!40101 SET NAMES utf8 */;
+
+/*!40101 SET SQL_MODE=''*/;
+
+/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
+/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
+/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
+/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
+CREATE DATABASE /*!32312 IF NOT EXISTS*/`artprtpdb` /*!40100 DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci */ /*!80016 DEFAULT ENCRYPTION='N' */;
+
+USE `artprtpdb`;
+
+/*Table structure for table `account` */
+
+DROP TABLE IF EXISTS `account`;
+
+CREATE TABLE `account` (
+ `Id` int NOT NULL AUTO_INCREMENT,
+ `Uname` varchar(20) NOT NULL,
+ `Password` varchar(20) NOT NULL,
+ `Email` varchar(30) NOT NULL,
+ `PhoneNum` varchar(12) DEFAULT NULL,
+ `StateCode` varchar(8) DEFAULT NULL,
+ `HeadPicUrl` varchar(128) DEFAULT NULL,
+ `IsActive` tinyint(1) DEFAULT NULL,
+ `Sex` varchar(2) DEFAULT NULL,
+ `Age` int DEFAULT NULL,
+ `Token` int DEFAULT '0',
+ PRIMARY KEY (`Id`),
+ UNIQUE KEY `Uname` (`Uname`),
+ CONSTRAINT `account_chk_1` CHECK (((`Sex` = _utf8'男') or (`Sex` = _utf8'女') or (`Sex` = _utf8'')))
+) ENGINE=InnoDB AUTO_INCREMENT=19 DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci;
+
+/*Data for the table `account` */
+
+insert into `account`(`Id`,`Uname`,`Password`,`Email`,`PhoneNum`,`StateCode`,`HeadPicUrl`,`IsActive`,`Sex`,`Age`,`Token`) values
+(8,'QinZongwei','123456','2020302111312@whu.edu.cn','18283287044','4FMLPHWZ','/resources/images/head_pictures/8.jpg',1,'男',20,1099),
+(9,'zj','123456','26981881881@qq.com','182872662788',NULL,NULL,1,'男',19,0),
+(14,'qwqw','123456','','11221',NULL,NULL,0,'女',12,0),
+(15,'lh','123456','2695387020@qq.com','','','/resources/images/head_pictures/15.jpg',1,'男',21,2),
+(17,'zhangjian','123456','1973362793@qq.com','','ZEV5Q1EZ',NULL,1,NULL,NULL,90),
+(18,'七七','123456','1067550651@qq.com','','','/resources/images/head_pictures/18.jpg',1,NULL,NULL,1);
+
+/*Table structure for table `artwork` */
+
+DROP TABLE IF EXISTS `artwork`;
+
+CREATE TABLE `artwork` (
+ `id` int NOT NULL AUTO_INCREMENT,
+ `name` varchar(20) NOT NULL,
+ `url` varchar(50) NOT NULL,
+ `description` varchar(255) DEFAULT NULL,
+ `chainAddress` varchar(50) DEFAULT NULL,
+ `ownerId` int NOT NULL,
+ `typeId` int DEFAULT NULL,
+ `coverUrl` varchar(150) DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `name_constraint` (`name`),
+ KEY `ownerid_constraint` (`ownerId`),
+ KEY `typeId_constraint` (`typeId`),
+ CONSTRAINT `ownerid_constraint` FOREIGN KEY (`ownerId`) REFERENCES `account` (`Id`) ON DELETE CASCADE ON UPDATE CASCADE,
+ CONSTRAINT `typeId_constraint` FOREIGN KEY (`typeId`) REFERENCES `type` (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=38 DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci;
+
+/*Data for the table `artwork` */
+
+insert into `artwork`(`id`,`name`,`url`,`description`,`chainAddress`,`ownerId`,`typeId`,`coverUrl`) values
+(1,'蒙娜丽莎的微笑','images/product_thumb02.jpg','达芬奇名画','233qwqwwe',8,1,'images/product_thumb02.jpg'),
+(2,'向日葵','images/product_thumb01.jpg','梵高名画','232211112dd',8,1,'images/product_thumb01.jpg'),
+(3,'明天你好','images/product_thumb03.jpg','三小只','112211111',8,2,'images/product_thumb03.jpg'),
+(4,'战狼','images/product_thumb04.jpg','吴京拍的','12121hesds',8,3,'images/product_thumb04.jpg'),
+(5,'救世主','images/product_thumb05.jpg','达芬奇的画作真迹目前在市场上是非常稀少的,这幅《救世主》原本是查尔斯一世的私人藏品,后来在1763年被拍卖,直至20世纪初才再度问世,最终几经转手,以29.6亿人民币的价格被拍下,成为了世界上交易价格最高的一幅画作。','1w8qkwqkwq',9,1,'images/product_thumb05.jpg'),
+(6,'阿尔及尔女人','images/product_thumb06.jpg','《阿尔及尔的女人》是毕加索的系列画作,其中(O版)的拍卖价格是最高的,创下了11亿元人民币的记录。','1223233',15,1,'images/product_thumb06.jpg'),
+(7,'弗洛伊德肖像画习作','images/product_thumb01.jpg','《弗洛伊德肖像画习作》是一个三联画,这幅作品在2013年的纽约佳士得拍卖会上以1.42405亿美元的价格被拍下。','1232394ierdj',8,1,'images/product_thumb01.jpg'),
+(8,'奥特曼','images/product_thumb02.jpg','圆谷拍的','q2133132',15,1,'images/product_thumb02.jpg'),
+(9,'呐喊','images/product_thumb04.jpg','《呐喊》是画家蒙克最具代表性的作品,以独特的手法表现出了人物内心的恐惧,这幅作品在2015年的苏富比拍卖会上以1.199亿美元的价格成交。','13243re',9,1,'images/product_thumb04.jpg'),
+(10,'太行山','images/product_thumb06.jpg','其是一部非常红的抗战电视剧,经常在电视视台播出','12wdbsc',8,3,'images/product_thumb06.jpg'),
+(11,'初音未来','images/product_thumb01.jpg','人气偶像','yukllg',8,3,'images/product_thumb01.jpg'),
+(12,'泰罗奥特曼','images/product_thumb01.jpg','奥特曼系列的衍品','ewefe',8,3,'images/product_thumb01.jpg'),
+(13,'迪迦奥特曼','images/product_thumb04.jpg','奥特曼系列衍生品','ewe',8,3,'images/product_thumb04.jpg'),
+(19,'小喵咪','/resources/artworks/8__artwork__1650049908948.jpg','小喵咪啊啊啊',NULL,8,1,'/resources/images/covers/8__19__cover__1650049908972.jpg'),
+(20,'狗狗啊','/resources/artworks/8__artwork__1650050202496.jpg','无',NULL,15,1,'/resources/images/covers/8__20__cover__1650050202518.jpg'),
+(21,'小狗','/resources/artworks/8__artwork__1650086217961.jpg','修修狗',NULL,15,1,'/resources/images/covers/8__21__cover__1650086218017.jpg'),
+(22,'543','/resources/artworks/18__artwork__1650090362211.jpg','5451230',NULL,18,1,'/resources/images/covers/18__22__cover__1650090362259.jpg'),
+(26,'猫猫狗狗','/resources/artworks/15__artwork__1650137949299.jpg','猫猫和狗狗应当和谐相处',NULL,15,1,'/resources/images/covers/15__26__cover__1650137949328.jpg'),
+(27,'洗澡猫','/resources/artworks/15__artwork__1650138572808.jpg','你见过自己洗澡的猫猫吗?',NULL,8,1,'/resources/images/covers/15__27__cover__1650138572827.jpg'),
+(28,'狗儿','/resources/artworks/15__artwork__1650139840276.jpg','你猜我是不是狗',NULL,15,1,'/resources/images/covers/15__28__cover__1650139840301.jpg'),
+(29,'嘿嘿','/resources/artworks/15__artwork__1650140030090.jpg','吃狗不理包子喽',NULL,15,1,'/resources/images/covers/15__29__cover__1650140030144.jpg'),
+(30,'不是','/resources/artworks/15__artwork__1650140252256.jpg','其实我不是狗',NULL,15,1,'/resources/images/covers/15__30__cover__1650140252307.jpg'),
+(32,'小奶狗','/resources/artworks/8__artwork__1650178135891.jpg','小狗狗',NULL,8,1,'/resources/images/covers/8__32__cover__1650178135904.jpg'),
+(33,'小土狗','/resources/artworks/8__artwork__1650178920158.jpg','无',NULL,8,1,'/resources/images/covers/8__33__cover__1650178920166.jpg'),
+(37,'喵呀喵','/resources/artworks/8__artwork__1650181258085.jpg','无',NULL,8,1,'/resources/images/covers/8__37__cover__1650181258092.jpg');
+
+/*Table structure for table `collections` */
+
+DROP TABLE IF EXISTS `collections`;
+
+CREATE TABLE `collections` (
+ `uid` int NOT NULL,
+ `saleId` int NOT NULL,
+ PRIMARY KEY (`uid`,`saleId`),
+ KEY `saleId_constraint` (`saleId`),
+ CONSTRAINT `saleId_constraint` FOREIGN KEY (`saleId`) REFERENCES `saleitems` (`saleId`) ON DELETE CASCADE ON UPDATE CASCADE,
+ CONSTRAINT `uid_constraint` FOREIGN KEY (`uid`) REFERENCES `account` (`Id`) ON DELETE CASCADE ON UPDATE CASCADE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci;
+
+/*Data for the table `collections` */
+
+insert into `collections`(`uid`,`saleId`) values
+(8,2),
+(15,13),
+(15,14),
+(15,17),
+(15,19),
+(8,21),
+(15,21),
+(8,22),
+(15,26),
+(8,28);
+
+/*Table structure for table `label` */
+
+DROP TABLE IF EXISTS `label`;
+
+CREATE TABLE `label` (
+ `id` int NOT NULL AUTO_INCREMENT,
+ `content` varchar(20) NOT NULL,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `content_constraint` (`content`)
+) ENGINE=InnoDB AUTO_INCREMENT=35 DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci;
+
+/*Data for the table `label` */
+
+insert into `label`(`id`,`content`) values
+(24,'1453'),
+(23,'453'),
+(34,'二次元'),
+(15,'人'),
+(25,'修勾勾'),
+(32,'动漫'),
+(22,'动物'),
+(17,'可爱'),
+(1,'名画'),
+(19,'喵喵'),
+(12,'安装'),
+(26,'小喵喵'),
+(21,'小狗'),
+(4,'很贵'),
+(2,'有名影视'),
+(18,'毛'),
+(31,'油画'),
+(20,'狗'),
+(28,'狗子'),
+(29,'狗狗'),
+(16,'猫'),
+(27,'猫猫'),
+(3,'珍藏'),
+(14,'秦宗伟'),
+(11,'美丽'),
+(13,'蒙娜丽莎的微笑'),
+(33,'虚拟'),
+(30,'达芬奇'),
+(10,'高贵');
+
+/*Table structure for table `labelbelong` */
+
+DROP TABLE IF EXISTS `labelbelong`;
+
+CREATE TABLE `labelbelong` (
+ `workId` int DEFAULT NULL,
+ `labelId` int DEFAULT NULL,
+ KEY `workId` (`workId`),
+ KEY `labelId` (`labelId`),
+ CONSTRAINT `labelbelong_ibfk_1` FOREIGN KEY (`workId`) REFERENCES `artwork` (`id`),
+ CONSTRAINT `labelbelong_ibfk_2` FOREIGN KEY (`labelId`) REFERENCES `label` (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci;
+
+/*Data for the table `labelbelong` */
+
+insert into `labelbelong`(`workId`,`labelId`) values
+(3,3),
+(4,2),
+(20,21),
+(22,24),
+(26,25),
+(26,26),
+(27,27),
+(28,28),
+(29,29),
+(30,16),
+(2,31),
+(1,30),
+(1,31),
+(19,22),
+(21,22),
+(21,20),
+(11,32),
+(11,33),
+(8,32),
+(8,34),
+(32,22),
+(33,22),
+(37,22);
+
+/*Table structure for table `orders` */
+
+DROP TABLE IF EXISTS `orders`;
+
+CREATE TABLE `orders` (
+ `orderId` int NOT NULL AUTO_INCREMENT,
+ `salerId` int NOT NULL,
+ `buyerId` int NOT NULL,
+ `dealTime` bigint NOT NULL,
+ `saleId` int DEFAULT NULL,
+ `price` int NOT NULL,
+ PRIMARY KEY (`orderId`)
+) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci;
+
+/*Data for the table `orders` */
+
+insert into `orders`(`orderId`,`salerId`,`buyerId`,`dealTime`,`saleId`,`price`) values
+(1,8,9,211292,3,100),
+(3,8,15,1650144535868,13,10),
+(4,15,15,1650145080150,17,1),
+(5,15,15,1650160602390,27,1),
+(6,15,15,1650162953743,26,1),
+(7,8,8,1650173473099,19,1),
+(8,15,8,1650178216076,18,1),
+(10,15,8,1650181319149,25,1),
+(11,8,15,1650198122050,37,1);
+
+/*Table structure for table `recharge` */
+
+DROP TABLE IF EXISTS `recharge`;
+
+CREATE TABLE `recharge` (
+ `out_trade_no` varchar(40) NOT NULL,
+ `trade_no` varchar(40) DEFAULT NULL,
+ `amount` double DEFAULT NULL,
+ `gmt_create` bigint DEFAULT NULL,
+ `gmt_payment` bigint DEFAULT NULL,
+ `uid` int DEFAULT NULL,
+ `state` tinyint(1) DEFAULT '0',
+ PRIMARY KEY (`out_trade_no`),
+ KEY `uid` (`uid`),
+ CONSTRAINT `recharge_ibfk_1` FOREIGN KEY (`uid`) REFERENCES `account` (`Id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci;
+
+/*Data for the table `recharge` */
+
+insert into `recharge`(`out_trade_no`,`trade_no`,`amount`,`gmt_create`,`gmt_payment`,`uid`,`state`) values
+('1649707432643-8','2022041222001444180502859251',1,1649707432739,1649707455000,8,1),
+('1649707500303-8','2022041222001444180502859415',2,1649707500340,1649707513000,8,1),
+('1649831796158-8',NULL,1,1649831796302,NULL,8,0),
+('1649832835109-8','2022041322001444180502859841',1,1649832835290,1649832856000,8,1),
+('1649833010993-8','2022041322001444180502860166',2,1649833011041,1649833024000,8,1),
+('1649849266969-8',NULL,1,1649849267138,NULL,8,0),
+('1650033007644-8',NULL,5,1650033007711,NULL,8,0),
+('1650033212938-8',NULL,5,1650033213010,NULL,8,0),
+('1650033308921-8',NULL,5,1650033308983,NULL,8,0),
+('1650033720815-18',NULL,0,1650033720879,NULL,18,0),
+('1650033722268-18',NULL,0,1650033722285,NULL,18,0),
+('1650033740339-8',NULL,1,1650033740367,NULL,8,0),
+('1650033758719-18',NULL,0,1650033758737,NULL,18,0),
+('1650033855020-8',NULL,2,1650033855038,NULL,8,0),
+('1650034260611-8',NULL,2,1650034260631,NULL,8,0),
+('1650034391595-8',NULL,5,1650034391659,NULL,8,0),
+('1650034604109-8','2022041522001444180502861413',5,1650034604165,1650034633000,8,1),
+('1650034665946-8','2022041522001444180502861276',4,1650034665978,1650034679000,8,1),
+('1650036345038-18','2022041522001444180502861097',1,1650036345096,1650036367000,18,1),
+('1650173752936-8',NULL,1,1650173753030,NULL,8,0),
+('1650176108945-8',NULL,10,1650176109022,NULL,8,0),
+('1650176502296-8',NULL,10,1650176502315,NULL,8,0),
+('1650177262628-8',NULL,10,1650177262647,NULL,8,0),
+('1650177346725-8',NULL,10,1650177346744,NULL,8,0),
+('1650177481416-8',NULL,10,1650177481436,NULL,8,0),
+('1650177729203-8',NULL,10,1650177729221,NULL,8,0),
+('1650177814971-8',NULL,10,1650177814989,NULL,8,0),
+('1650177895431-8',NULL,10,1650177895448,NULL,8,0),
+('1650178103104-8',NULL,10,1650178103122,NULL,8,0),
+('1650178645503-8',NULL,10,1650178645525,NULL,8,0),
+('1650178788072-8',NULL,10,1650178788089,NULL,8,0),
+('1650178891374-8',NULL,10,1650178891391,NULL,8,0),
+('1650179819964-8',NULL,10,1650179819984,NULL,8,0),
+('1650180574566-8',NULL,10,1650180574585,NULL,8,0),
+('1650180665101-8',NULL,10,1650180665117,NULL,8,0),
+('1650180861487-8',NULL,10,1650180861506,NULL,8,0),
+('1650181105851-8',NULL,10,1650181105871,NULL,8,0),
+('1650181228397-8',NULL,10,1650181228416,NULL,8,0);
+
+/*Table structure for table `saleitems` */
+
+DROP TABLE IF EXISTS `saleitems`;
+
+CREATE TABLE `saleitems` (
+ `saleId` int NOT NULL AUTO_INCREMENT,
+ `productId` int NOT NULL,
+ `shelfTime` bigint NOT NULL,
+ `salerId` int NOT NULL,
+ `price` int NOT NULL,
+ `state` varchar(4) DEFAULT NULL,
+ `starCount` int DEFAULT '0',
+ `instruction` varchar(3000) DEFAULT '',
+ PRIMARY KEY (`saleId`),
+ KEY `productId_constraint` (`productId`),
+ CONSTRAINT `productId_constraint` FOREIGN KEY (`productId`) REFERENCES `artwork` (`id`),
+ CONSTRAINT `saleitems_chk_1` CHECK (((`state` = _utf8'已售') or (`state` = _utf8'在售') or (`state` = _utf8'已下架')))
+) ENGINE=InnoDB AUTO_INCREMENT=39 DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci;
+
+/*Data for the table `saleitems` */
+
+insert into `saleitems`(`saleId`,`productId`,`shelfTime`,`salerId`,`price`,`state`,`starCount`,`instruction`) values
+(2,4,221111,8,272,'已下架',1,''),
+(3,1,22221,8,2,'已售',1,''),
+(10,1,1649948652788,8,1292,'已下架',0,'NSA模块\n'),
+(11,1,1649959118075,8,1,'已下架',0,'一切解释权归商家所有'),
+(12,1,1650024516409,8,1222,'已下架',0,'无'),
+(13,20,1650085478239,8,10,'已售',1,'无'),
+(14,21,1650086313798,8,11,'已下架',1,'哈哈哈哈哈'),
+(15,22,1650090490245,18,100000000,'已下架',0,'111111111'),
+(16,22,1650090578799,18,1,'已下架',0,'33\n'),
+(17,6,1650121435592,15,1,'已售',1,'啊'),
+(18,7,1650123252388,15,1,'已售',0,'我去饿的出门'),
+(19,1,1650123292269,8,1,'已售',1,'一经售出概不退还'),
+(20,2,1650123305606,8,11,'已售',0,'小动物查看目录'),
+(21,10,1650123321913,8,2123,'在售',2,'无需额外的尺寸单位'),
+(22,11,1650123368336,8,12221,'在售',1,'22'),
+(25,27,1650138602412,15,1,'已售',0,''),
+(26,28,1650140069582,15,1,'已售',1,''),
+(27,26,1650140127508,15,1,'已售',0,''),
+(28,30,1650140278041,15,1,'在售',1,''),
+(29,29,1650140296422,15,1,'在售',2,''),
+(30,32,1650178164175,8,11,'已下架',0,'无'),
+(31,33,1650178948792,8,1,'已下架',0,'无'),
+(34,37,1650181280539,8,1,'已下架',0,'无'),
+(35,4,1650197191101,8,1,'在售',1,'无'),
+(36,6,1650197634131,15,1,'在售',0,'一经购买概不退还'),
+(37,21,1650198086716,8,1,'已售',0,'一经购买概不退还\n'),
+(38,1,1650386941147,8,1,'在售',0,'无');
+
+/*Table structure for table `type` */
+
+DROP TABLE IF EXISTS `type`;
+
+CREATE TABLE `type` (
+ `id` int NOT NULL AUTO_INCREMENT,
+ `content` varchar(20) NOT NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci;
+
+/*Data for the table `type` */
+
+insert into `type`(`id`,`content`) values
+(1,'绘画'),
+(2,'音乐'),
+(3,'视频');
+
+/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
+/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
+/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
+/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
diff --git a/nftmanageserver/.idea/.gitignore b/nftmanageserver/.idea/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..73f69e0958611ac6e00bde95641f6699030ad235
--- /dev/null
+++ b/nftmanageserver/.idea/.gitignore
@@ -0,0 +1,8 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
+# Editor-based HTTP Client requests
+/httpRequests/
diff --git a/nftmanageserver/.idea/compiler.xml b/nftmanageserver/.idea/compiler.xml
new file mode 100644
index 0000000000000000000000000000000000000000..9764a8c0b7488a8faefa2887001179d20e005396
--- /dev/null
+++ b/nftmanageserver/.idea/compiler.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/nftmanageserver/.idea/encodings.xml b/nftmanageserver/.idea/encodings.xml
new file mode 100644
index 0000000000000000000000000000000000000000..63e900193296f8ed911a1b9f5b051cf908099431
--- /dev/null
+++ b/nftmanageserver/.idea/encodings.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/nftmanageserver/.idea/jarRepositories.xml b/nftmanageserver/.idea/jarRepositories.xml
new file mode 100644
index 0000000000000000000000000000000000000000..712ab9d985c20018a0c97b93d2148ac1ffe588a5
--- /dev/null
+++ b/nftmanageserver/.idea/jarRepositories.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/nftmanageserver/.idea/libraries/Maven__ch_qos_logback_logback_classic_1_2_10.xml b/nftmanageserver/.idea/libraries/Maven__ch_qos_logback_logback_classic_1_2_10.xml
new file mode 100644
index 0000000000000000000000000000000000000000..5f36e1ceba9730d68b931d675a198cfa417570a4
--- /dev/null
+++ b/nftmanageserver/.idea/libraries/Maven__ch_qos_logback_logback_classic_1_2_10.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/nftmanageserver/.idea/libraries/Maven__ch_qos_logback_logback_core_1_2_10.xml b/nftmanageserver/.idea/libraries/Maven__ch_qos_logback_logback_core_1_2_10.xml
new file mode 100644
index 0000000000000000000000000000000000000000..2ff6de4bc633309899c9e326b8faec15492b1ffe
--- /dev/null
+++ b/nftmanageserver/.idea/libraries/Maven__ch_qos_logback_logback_core_1_2_10.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/nftmanageserver/.idea/libraries/Maven__com_alibaba_fastjson2_fastjson2_2_0_2_graal.xml b/nftmanageserver/.idea/libraries/Maven__com_alibaba_fastjson2_fastjson2_2_0_2_graal.xml
new file mode 100644
index 0000000000000000000000000000000000000000..35db60e509ec0023589a631848cc6f9940e05b42
--- /dev/null
+++ b/nftmanageserver/.idea/libraries/Maven__com_alibaba_fastjson2_fastjson2_2_0_2_graal.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/nftmanageserver/.idea/libraries/Maven__com_alibaba_fastjson2_fastjson2_extension_2_0_2_graal.xml b/nftmanageserver/.idea/libraries/Maven__com_alibaba_fastjson2_fastjson2_extension_2_0_2_graal.xml
new file mode 100644
index 0000000000000000000000000000000000000000..148076b3c1fcfc6f27efa7b4c8904a458bc121dd
--- /dev/null
+++ b/nftmanageserver/.idea/libraries/Maven__com_alibaba_fastjson2_fastjson2_extension_2_0_2_graal.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/nftmanageserver/.idea/libraries/Maven__com_alibaba_fastjson_2_0_2_graal.xml b/nftmanageserver/.idea/libraries/Maven__com_alibaba_fastjson_2_0_2_graal.xml
new file mode 100644
index 0000000000000000000000000000000000000000..6539bc88879f200b20b46e0d29076af7e50d75f7
--- /dev/null
+++ b/nftmanageserver/.idea/libraries/Maven__com_alibaba_fastjson_2_0_2_graal.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/nftmanageserver/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_annotations_2_13_1.xml b/nftmanageserver/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_annotations_2_13_1.xml
new file mode 100644
index 0000000000000000000000000000000000000000..3c6c6ee5e595278fc73f122fe91ce63906d237b8
--- /dev/null
+++ b/nftmanageserver/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_annotations_2_13_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/nftmanageserver/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_core_2_13_1.xml b/nftmanageserver/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_core_2_13_1.xml
new file mode 100644
index 0000000000000000000000000000000000000000..6e03d019a40a8d482d15d7f7e62dce9bfd4aa227
--- /dev/null
+++ b/nftmanageserver/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_core_2_13_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/nftmanageserver/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_databind_2_13_1.xml b/nftmanageserver/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_databind_2_13_1.xml
new file mode 100644
index 0000000000000000000000000000000000000000..1251c7764738488005847c997a0c9dd901f4e979
--- /dev/null
+++ b/nftmanageserver/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_databind_2_13_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/nftmanageserver/.idea/libraries/Maven__com_fasterxml_jackson_datatype_jackson_datatype_jdk8_2_13_1.xml b/nftmanageserver/.idea/libraries/Maven__com_fasterxml_jackson_datatype_jackson_datatype_jdk8_2_13_1.xml
new file mode 100644
index 0000000000000000000000000000000000000000..f6e5e789da2edf6a5f8d5ee5e34fd7bab47c0f71
--- /dev/null
+++ b/nftmanageserver/.idea/libraries/Maven__com_fasterxml_jackson_datatype_jackson_datatype_jdk8_2_13_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/nftmanageserver/.idea/libraries/Maven__com_fasterxml_jackson_datatype_jackson_datatype_jsr310_2_13_1.xml b/nftmanageserver/.idea/libraries/Maven__com_fasterxml_jackson_datatype_jackson_datatype_jsr310_2_13_1.xml
new file mode 100644
index 0000000000000000000000000000000000000000..55ad526906b0669e3b4216b2b2724879cb5d48a9
--- /dev/null
+++ b/nftmanageserver/.idea/libraries/Maven__com_fasterxml_jackson_datatype_jackson_datatype_jsr310_2_13_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/nftmanageserver/.idea/libraries/Maven__com_fasterxml_jackson_module_jackson_module_parameter_names_2_13_1.xml b/nftmanageserver/.idea/libraries/Maven__com_fasterxml_jackson_module_jackson_module_parameter_names_2_13_1.xml
new file mode 100644
index 0000000000000000000000000000000000000000..46f3cea46ec270263a2ec9c1337a58d542f7dbd4
--- /dev/null
+++ b/nftmanageserver/.idea/libraries/Maven__com_fasterxml_jackson_module_jackson_module_parameter_names_2_13_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/nftmanageserver/.idea/libraries/Maven__com_jayway_jsonpath_json_path_2_6_0.xml b/nftmanageserver/.idea/libraries/Maven__com_jayway_jsonpath_json_path_2_6_0.xml
new file mode 100644
index 0000000000000000000000000000000000000000..e0ce78c2082f8de3ddc161b97b52b888bc0fe443
--- /dev/null
+++ b/nftmanageserver/.idea/libraries/Maven__com_jayway_jsonpath_json_path_2_6_0.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/nftmanageserver/.idea/libraries/Maven__com_vaadin_external_google_android_json_0_0_20131108_vaadin1.xml b/nftmanageserver/.idea/libraries/Maven__com_vaadin_external_google_android_json_0_0_20131108_vaadin1.xml
new file mode 100644
index 0000000000000000000000000000000000000000..e80f629ee24cf055cc4d69f0eea026e8b399e245
--- /dev/null
+++ b/nftmanageserver/.idea/libraries/Maven__com_vaadin_external_google_android_json_0_0_20131108_vaadin1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/nftmanageserver/.idea/libraries/Maven__com_zaxxer_HikariCP_4_0_3.xml b/nftmanageserver/.idea/libraries/Maven__com_zaxxer_HikariCP_4_0_3.xml
new file mode 100644
index 0000000000000000000000000000000000000000..2df68c97f2111bf8411477944cd7ec9eed66af07
--- /dev/null
+++ b/nftmanageserver/.idea/libraries/Maven__com_zaxxer_HikariCP_4_0_3.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/nftmanageserver/.idea/libraries/Maven__jakarta_activation_jakarta_activation_api_1_2_2.xml b/nftmanageserver/.idea/libraries/Maven__jakarta_activation_jakarta_activation_api_1_2_2.xml
new file mode 100644
index 0000000000000000000000000000000000000000..94aca05abfbb2bdacb00a0bf00f12aa122b4b81a
--- /dev/null
+++ b/nftmanageserver/.idea/libraries/Maven__jakarta_activation_jakarta_activation_api_1_2_2.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/nftmanageserver/.idea/libraries/Maven__jakarta_annotation_jakarta_annotation_api_1_3_5.xml b/nftmanageserver/.idea/libraries/Maven__jakarta_annotation_jakarta_annotation_api_1_3_5.xml
new file mode 100644
index 0000000000000000000000000000000000000000..36c49a00643637e913972fdebe1d214e733f06a0
--- /dev/null
+++ b/nftmanageserver/.idea/libraries/Maven__jakarta_annotation_jakarta_annotation_api_1_3_5.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/nftmanageserver/.idea/libraries/Maven__jakarta_xml_bind_jakarta_xml_bind_api_2_3_3.xml b/nftmanageserver/.idea/libraries/Maven__jakarta_xml_bind_jakarta_xml_bind_api_2_3_3.xml
new file mode 100644
index 0000000000000000000000000000000000000000..7f11c3430db363d13d07e2653eef646f51e173a1
--- /dev/null
+++ b/nftmanageserver/.idea/libraries/Maven__jakarta_xml_bind_jakarta_xml_bind_api_2_3_3.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/nftmanageserver/.idea/libraries/Maven__mysql_mysql_connector_java_8_0_28.xml b/nftmanageserver/.idea/libraries/Maven__mysql_mysql_connector_java_8_0_28.xml
new file mode 100644
index 0000000000000000000000000000000000000000..87daa46d228735e5c95f738f4353933cb3b5c2ad
--- /dev/null
+++ b/nftmanageserver/.idea/libraries/Maven__mysql_mysql_connector_java_8_0_28.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/nftmanageserver/.idea/libraries/Maven__net_bytebuddy_byte_buddy_1_11_22.xml b/nftmanageserver/.idea/libraries/Maven__net_bytebuddy_byte_buddy_1_11_22.xml
new file mode 100644
index 0000000000000000000000000000000000000000..b8df8aeb533f1134cd58c193c657fe8a6f6a92e4
--- /dev/null
+++ b/nftmanageserver/.idea/libraries/Maven__net_bytebuddy_byte_buddy_1_11_22.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/nftmanageserver/.idea/libraries/Maven__net_bytebuddy_byte_buddy_agent_1_11_22.xml b/nftmanageserver/.idea/libraries/Maven__net_bytebuddy_byte_buddy_agent_1_11_22.xml
new file mode 100644
index 0000000000000000000000000000000000000000..81467e5da145e274d7afdbec9192280c3cbe271a
--- /dev/null
+++ b/nftmanageserver/.idea/libraries/Maven__net_bytebuddy_byte_buddy_agent_1_11_22.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/nftmanageserver/.idea/libraries/Maven__net_minidev_accessors_smart_2_4_8.xml b/nftmanageserver/.idea/libraries/Maven__net_minidev_accessors_smart_2_4_8.xml
new file mode 100644
index 0000000000000000000000000000000000000000..c6ca94f9d7091e41a1aa386ee57a6c88e5c7ca87
--- /dev/null
+++ b/nftmanageserver/.idea/libraries/Maven__net_minidev_accessors_smart_2_4_8.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/nftmanageserver/.idea/libraries/Maven__net_minidev_json_smart_2_4_8.xml b/nftmanageserver/.idea/libraries/Maven__net_minidev_json_smart_2_4_8.xml
new file mode 100644
index 0000000000000000000000000000000000000000..6bc485ffe3645014cd96402eadd2d743f2cbec64
--- /dev/null
+++ b/nftmanageserver/.idea/libraries/Maven__net_minidev_json_smart_2_4_8.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/nftmanageserver/.idea/libraries/Maven__org_apache_logging_log4j_log4j_api_2_17_1.xml b/nftmanageserver/.idea/libraries/Maven__org_apache_logging_log4j_log4j_api_2_17_1.xml
new file mode 100644
index 0000000000000000000000000000000000000000..0a586b25d748c59e8eca61a3cec77f80c15132e5
--- /dev/null
+++ b/nftmanageserver/.idea/libraries/Maven__org_apache_logging_log4j_log4j_api_2_17_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/nftmanageserver/.idea/libraries/Maven__org_apache_logging_log4j_log4j_to_slf4j_2_17_1.xml b/nftmanageserver/.idea/libraries/Maven__org_apache_logging_log4j_log4j_to_slf4j_2_17_1.xml
new file mode 100644
index 0000000000000000000000000000000000000000..127eaeb664ca7b78f5bc6f2c3812287c3e6005bb
--- /dev/null
+++ b/nftmanageserver/.idea/libraries/Maven__org_apache_logging_log4j_log4j_to_slf4j_2_17_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/nftmanageserver/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_core_9_0_58.xml b/nftmanageserver/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_core_9_0_58.xml
new file mode 100644
index 0000000000000000000000000000000000000000..2ef452f032e4beb5f4f17284cd29dd668c7d48f4
--- /dev/null
+++ b/nftmanageserver/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_core_9_0_58.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/nftmanageserver/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_el_9_0_58.xml b/nftmanageserver/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_el_9_0_58.xml
new file mode 100644
index 0000000000000000000000000000000000000000..dddf1fb2d90cebb748250c1d0399d908d3ea2740
--- /dev/null
+++ b/nftmanageserver/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_el_9_0_58.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/nftmanageserver/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_websocket_9_0_58.xml b/nftmanageserver/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_websocket_9_0_58.xml
new file mode 100644
index 0000000000000000000000000000000000000000..a54d0316fa8ff20a54580fcb63e14575c57ecba1
--- /dev/null
+++ b/nftmanageserver/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_websocket_9_0_58.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/nftmanageserver/.idea/libraries/Maven__org_apiguardian_apiguardian_api_1_1_2.xml b/nftmanageserver/.idea/libraries/Maven__org_apiguardian_apiguardian_api_1_1_2.xml
new file mode 100644
index 0000000000000000000000000000000000000000..46764e73bd1a7f2f6f82efef96341ee4b40f4c51
--- /dev/null
+++ b/nftmanageserver/.idea/libraries/Maven__org_apiguardian_apiguardian_api_1_1_2.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/nftmanageserver/.idea/libraries/Maven__org_assertj_assertj_core_3_21_0.xml b/nftmanageserver/.idea/libraries/Maven__org_assertj_assertj_core_3_21_0.xml
new file mode 100644
index 0000000000000000000000000000000000000000..b198709ce3f5cd6c4cdb8f855fd759acee93afb2
--- /dev/null
+++ b/nftmanageserver/.idea/libraries/Maven__org_assertj_assertj_core_3_21_0.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/nftmanageserver/.idea/libraries/Maven__org_hamcrest_hamcrest_2_2.xml b/nftmanageserver/.idea/libraries/Maven__org_hamcrest_hamcrest_2_2.xml
new file mode 100644
index 0000000000000000000000000000000000000000..44df19ebdc3a43ebf746f1683ab7027755060535
--- /dev/null
+++ b/nftmanageserver/.idea/libraries/Maven__org_hamcrest_hamcrest_2_2.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/nftmanageserver/.idea/libraries/Maven__org_json_json_20220320.xml b/nftmanageserver/.idea/libraries/Maven__org_json_json_20220320.xml
new file mode 100644
index 0000000000000000000000000000000000000000..2fead36fbc74975f44fb8150d335e478e49b2420
--- /dev/null
+++ b/nftmanageserver/.idea/libraries/Maven__org_json_json_20220320.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/nftmanageserver/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_5_8_2.xml b/nftmanageserver/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_5_8_2.xml
new file mode 100644
index 0000000000000000000000000000000000000000..a4c949c62e36ffa6510552039a1e038e8c0876e5
--- /dev/null
+++ b/nftmanageserver/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_5_8_2.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/nftmanageserver/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_api_5_8_2.xml b/nftmanageserver/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_api_5_8_2.xml
new file mode 100644
index 0000000000000000000000000000000000000000..ed6b71bb899589b4e14159eb78f69a93e7234fc2
--- /dev/null
+++ b/nftmanageserver/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_api_5_8_2.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/nftmanageserver/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_engine_5_8_2.xml b/nftmanageserver/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_engine_5_8_2.xml
new file mode 100644
index 0000000000000000000000000000000000000000..8c546ea4fbdf1f42edb3490a982c310b6ff50bf9
--- /dev/null
+++ b/nftmanageserver/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_engine_5_8_2.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/nftmanageserver/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_params_5_8_2.xml b/nftmanageserver/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_params_5_8_2.xml
new file mode 100644
index 0000000000000000000000000000000000000000..1a180c923a17e50f6f4198aa88f1cffe2bcfd1f0
--- /dev/null
+++ b/nftmanageserver/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_params_5_8_2.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/nftmanageserver/.idea/libraries/Maven__org_junit_platform_junit_platform_commons_1_8_2.xml b/nftmanageserver/.idea/libraries/Maven__org_junit_platform_junit_platform_commons_1_8_2.xml
new file mode 100644
index 0000000000000000000000000000000000000000..b414224ae6f50b140cf63f70eb9a7c5c9a3393bb
--- /dev/null
+++ b/nftmanageserver/.idea/libraries/Maven__org_junit_platform_junit_platform_commons_1_8_2.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/nftmanageserver/.idea/libraries/Maven__org_junit_platform_junit_platform_engine_1_8_2.xml b/nftmanageserver/.idea/libraries/Maven__org_junit_platform_junit_platform_engine_1_8_2.xml
new file mode 100644
index 0000000000000000000000000000000000000000..2ddf4c5cc853977440908eaa93a916640bc7ad2a
--- /dev/null
+++ b/nftmanageserver/.idea/libraries/Maven__org_junit_platform_junit_platform_engine_1_8_2.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/nftmanageserver/.idea/libraries/Maven__org_mockito_mockito_core_4_0_0.xml b/nftmanageserver/.idea/libraries/Maven__org_mockito_mockito_core_4_0_0.xml
new file mode 100644
index 0000000000000000000000000000000000000000..a71a9df0ad00dc89db2def74e56c7555ecf93167
--- /dev/null
+++ b/nftmanageserver/.idea/libraries/Maven__org_mockito_mockito_core_4_0_0.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/nftmanageserver/.idea/libraries/Maven__org_mockito_mockito_junit_jupiter_4_0_0.xml b/nftmanageserver/.idea/libraries/Maven__org_mockito_mockito_junit_jupiter_4_0_0.xml
new file mode 100644
index 0000000000000000000000000000000000000000..c8954fc42f90fb4c3f6f7735cd830cbdd49d4c1d
--- /dev/null
+++ b/nftmanageserver/.idea/libraries/Maven__org_mockito_mockito_junit_jupiter_4_0_0.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/nftmanageserver/.idea/libraries/Maven__org_mybatis_mybatis_3_5_9.xml b/nftmanageserver/.idea/libraries/Maven__org_mybatis_mybatis_3_5_9.xml
new file mode 100644
index 0000000000000000000000000000000000000000..945eca12bf37e479dd15c3e57ee9305a8f53c56c
--- /dev/null
+++ b/nftmanageserver/.idea/libraries/Maven__org_mybatis_mybatis_3_5_9.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/nftmanageserver/.idea/libraries/Maven__org_mybatis_mybatis_spring_2_0_7.xml b/nftmanageserver/.idea/libraries/Maven__org_mybatis_mybatis_spring_2_0_7.xml
new file mode 100644
index 0000000000000000000000000000000000000000..471e1391f52ac2b02590eee9c53105fac99dc89f
--- /dev/null
+++ b/nftmanageserver/.idea/libraries/Maven__org_mybatis_mybatis_spring_2_0_7.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/nftmanageserver/.idea/libraries/Maven__org_mybatis_spring_boot_mybatis_spring_boot_autoconfigure_2_2_2.xml b/nftmanageserver/.idea/libraries/Maven__org_mybatis_spring_boot_mybatis_spring_boot_autoconfigure_2_2_2.xml
new file mode 100644
index 0000000000000000000000000000000000000000..7d9d0b2931efef1989b72f3aa06429a5301613a4
--- /dev/null
+++ b/nftmanageserver/.idea/libraries/Maven__org_mybatis_spring_boot_mybatis_spring_boot_autoconfigure_2_2_2.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/nftmanageserver/.idea/libraries/Maven__org_mybatis_spring_boot_mybatis_spring_boot_starter_2_2_2.xml b/nftmanageserver/.idea/libraries/Maven__org_mybatis_spring_boot_mybatis_spring_boot_starter_2_2_2.xml
new file mode 100644
index 0000000000000000000000000000000000000000..ffa12633c87a50cabf644238c84c8a063c075101
--- /dev/null
+++ b/nftmanageserver/.idea/libraries/Maven__org_mybatis_spring_boot_mybatis_spring_boot_starter_2_2_2.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/nftmanageserver/.idea/libraries/Maven__org_objenesis_objenesis_3_2.xml b/nftmanageserver/.idea/libraries/Maven__org_objenesis_objenesis_3_2.xml
new file mode 100644
index 0000000000000000000000000000000000000000..070a5fd4480a2460afbbecb76b2ddc9bfd750cb4
--- /dev/null
+++ b/nftmanageserver/.idea/libraries/Maven__org_objenesis_objenesis_3_2.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/nftmanageserver/.idea/libraries/Maven__org_opentest4j_opentest4j_1_2_0.xml b/nftmanageserver/.idea/libraries/Maven__org_opentest4j_opentest4j_1_2_0.xml
new file mode 100644
index 0000000000000000000000000000000000000000..47b9ceff7622b8db99b03555fc6ee0e604b1a6bb
--- /dev/null
+++ b/nftmanageserver/.idea/libraries/Maven__org_opentest4j_opentest4j_1_2_0.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/nftmanageserver/.idea/libraries/Maven__org_ow2_asm_asm_9_1.xml b/nftmanageserver/.idea/libraries/Maven__org_ow2_asm_asm_9_1.xml
new file mode 100644
index 0000000000000000000000000000000000000000..0bfa78495899b98eaaeb66f6512c574c6d35a522
--- /dev/null
+++ b/nftmanageserver/.idea/libraries/Maven__org_ow2_asm_asm_9_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/nftmanageserver/.idea/libraries/Maven__org_skyscreamer_jsonassert_1_5_0.xml b/nftmanageserver/.idea/libraries/Maven__org_skyscreamer_jsonassert_1_5_0.xml
new file mode 100644
index 0000000000000000000000000000000000000000..fcf276f6178a365f9cec4143322e271738a45753
--- /dev/null
+++ b/nftmanageserver/.idea/libraries/Maven__org_skyscreamer_jsonassert_1_5_0.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/nftmanageserver/.idea/libraries/Maven__org_slf4j_jul_to_slf4j_1_7_36.xml b/nftmanageserver/.idea/libraries/Maven__org_slf4j_jul_to_slf4j_1_7_36.xml
new file mode 100644
index 0000000000000000000000000000000000000000..2b3c52ee3a15b95f84a1a2f8ff2c5566f6325925
--- /dev/null
+++ b/nftmanageserver/.idea/libraries/Maven__org_slf4j_jul_to_slf4j_1_7_36.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/nftmanageserver/.idea/libraries/Maven__org_slf4j_slf4j_api_1_7_36.xml b/nftmanageserver/.idea/libraries/Maven__org_slf4j_slf4j_api_1_7_36.xml
new file mode 100644
index 0000000000000000000000000000000000000000..f481ee613efee53af24dd6c78b3a4f9dd9761504
--- /dev/null
+++ b/nftmanageserver/.idea/libraries/Maven__org_slf4j_slf4j_api_1_7_36.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/nftmanageserver/.idea/libraries/Maven__org_springframework_boot_spring_boot_2_6_4.xml b/nftmanageserver/.idea/libraries/Maven__org_springframework_boot_spring_boot_2_6_4.xml
new file mode 100644
index 0000000000000000000000000000000000000000..4c4ad5ac8234b106c641e7583c30f21f0bb34084
--- /dev/null
+++ b/nftmanageserver/.idea/libraries/Maven__org_springframework_boot_spring_boot_2_6_4.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/nftmanageserver/.idea/libraries/Maven__org_springframework_boot_spring_boot_autoconfigure_2_6_4.xml b/nftmanageserver/.idea/libraries/Maven__org_springframework_boot_spring_boot_autoconfigure_2_6_4.xml
new file mode 100644
index 0000000000000000000000000000000000000000..20197f7005b37f990f7907dd0b53a75fd495d69f
--- /dev/null
+++ b/nftmanageserver/.idea/libraries/Maven__org_springframework_boot_spring_boot_autoconfigure_2_6_4.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/nftmanageserver/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_2_6_4.xml b/nftmanageserver/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_2_6_4.xml
new file mode 100644
index 0000000000000000000000000000000000000000..57fdbb232ab94e81336b1677f35e224be94e0503
--- /dev/null
+++ b/nftmanageserver/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_2_6_4.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/nftmanageserver/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_jdbc_2_6_4.xml b/nftmanageserver/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_jdbc_2_6_4.xml
new file mode 100644
index 0000000000000000000000000000000000000000..03489e11ddb886f0036de6adbb8f362816b83892
--- /dev/null
+++ b/nftmanageserver/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_jdbc_2_6_4.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/nftmanageserver/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_json_2_6_4.xml b/nftmanageserver/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_json_2_6_4.xml
new file mode 100644
index 0000000000000000000000000000000000000000..c5b7dfb1b15d99645b694d263121e0b8d3fe938e
--- /dev/null
+++ b/nftmanageserver/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_json_2_6_4.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/nftmanageserver/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_logging_2_6_4.xml b/nftmanageserver/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_logging_2_6_4.xml
new file mode 100644
index 0000000000000000000000000000000000000000..98a2ebf977f1c044d17e9d7cb5044618af425f01
--- /dev/null
+++ b/nftmanageserver/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_logging_2_6_4.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/nftmanageserver/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_test_2_6_4.xml b/nftmanageserver/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_test_2_6_4.xml
new file mode 100644
index 0000000000000000000000000000000000000000..ee7334e891b771fa11819b7b433539d7faf3c617
--- /dev/null
+++ b/nftmanageserver/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_test_2_6_4.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/nftmanageserver/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_tomcat_2_6_4.xml b/nftmanageserver/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_tomcat_2_6_4.xml
new file mode 100644
index 0000000000000000000000000000000000000000..e6b6b5213d2530903f37db0e2a758703c603dadb
--- /dev/null
+++ b/nftmanageserver/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_tomcat_2_6_4.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/nftmanageserver/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_web_2_6_4.xml b/nftmanageserver/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_web_2_6_4.xml
new file mode 100644
index 0000000000000000000000000000000000000000..695251f12beb64c2ed985113f423ec0688127422
--- /dev/null
+++ b/nftmanageserver/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_web_2_6_4.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/nftmanageserver/.idea/libraries/Maven__org_springframework_boot_spring_boot_test_2_6_4.xml b/nftmanageserver/.idea/libraries/Maven__org_springframework_boot_spring_boot_test_2_6_4.xml
new file mode 100644
index 0000000000000000000000000000000000000000..9011e4250c0dc8806e21018cfc3f81783887cabd
--- /dev/null
+++ b/nftmanageserver/.idea/libraries/Maven__org_springframework_boot_spring_boot_test_2_6_4.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/nftmanageserver/.idea/libraries/Maven__org_springframework_boot_spring_boot_test_autoconfigure_2_6_4.xml b/nftmanageserver/.idea/libraries/Maven__org_springframework_boot_spring_boot_test_autoconfigure_2_6_4.xml
new file mode 100644
index 0000000000000000000000000000000000000000..f149fb7f0de296b738d45dcfde1853b20ba6db78
--- /dev/null
+++ b/nftmanageserver/.idea/libraries/Maven__org_springframework_boot_spring_boot_test_autoconfigure_2_6_4.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/nftmanageserver/.idea/libraries/Maven__org_springframework_spring_aop_5_3_16.xml b/nftmanageserver/.idea/libraries/Maven__org_springframework_spring_aop_5_3_16.xml
new file mode 100644
index 0000000000000000000000000000000000000000..bfe5216933186e31f3bb11a2befb8deb560cc6e8
--- /dev/null
+++ b/nftmanageserver/.idea/libraries/Maven__org_springframework_spring_aop_5_3_16.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/nftmanageserver/.idea/libraries/Maven__org_springframework_spring_beans_5_3_16.xml b/nftmanageserver/.idea/libraries/Maven__org_springframework_spring_beans_5_3_16.xml
new file mode 100644
index 0000000000000000000000000000000000000000..c254739391e87c90b3f5ed732e45c78b21ecb4d3
--- /dev/null
+++ b/nftmanageserver/.idea/libraries/Maven__org_springframework_spring_beans_5_3_16.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/nftmanageserver/.idea/libraries/Maven__org_springframework_spring_context_5_3_16.xml b/nftmanageserver/.idea/libraries/Maven__org_springframework_spring_context_5_3_16.xml
new file mode 100644
index 0000000000000000000000000000000000000000..d3579c7f92e12da6e969d9b79c12ad06483f00c5
--- /dev/null
+++ b/nftmanageserver/.idea/libraries/Maven__org_springframework_spring_context_5_3_16.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/nftmanageserver/.idea/libraries/Maven__org_springframework_spring_core_5_3_16.xml b/nftmanageserver/.idea/libraries/Maven__org_springframework_spring_core_5_3_16.xml
new file mode 100644
index 0000000000000000000000000000000000000000..d0b60c5a275e31bbffd8914133b0f978e9faa50a
--- /dev/null
+++ b/nftmanageserver/.idea/libraries/Maven__org_springframework_spring_core_5_3_16.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/nftmanageserver/.idea/libraries/Maven__org_springframework_spring_expression_5_3_16.xml b/nftmanageserver/.idea/libraries/Maven__org_springframework_spring_expression_5_3_16.xml
new file mode 100644
index 0000000000000000000000000000000000000000..55c5c55adc801536c4be456f7cebe0ef08fc0aee
--- /dev/null
+++ b/nftmanageserver/.idea/libraries/Maven__org_springframework_spring_expression_5_3_16.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/nftmanageserver/.idea/libraries/Maven__org_springframework_spring_jcl_5_3_16.xml b/nftmanageserver/.idea/libraries/Maven__org_springframework_spring_jcl_5_3_16.xml
new file mode 100644
index 0000000000000000000000000000000000000000..7584faeec0b4d088b197922806f78d057a8ccbe7
--- /dev/null
+++ b/nftmanageserver/.idea/libraries/Maven__org_springframework_spring_jcl_5_3_16.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/nftmanageserver/.idea/libraries/Maven__org_springframework_spring_jdbc_5_3_16.xml b/nftmanageserver/.idea/libraries/Maven__org_springframework_spring_jdbc_5_3_16.xml
new file mode 100644
index 0000000000000000000000000000000000000000..468401dd3e0d6f973695c49ae40b19298f178963
--- /dev/null
+++ b/nftmanageserver/.idea/libraries/Maven__org_springframework_spring_jdbc_5_3_16.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/nftmanageserver/.idea/libraries/Maven__org_springframework_spring_test_5_3_16.xml b/nftmanageserver/.idea/libraries/Maven__org_springframework_spring_test_5_3_16.xml
new file mode 100644
index 0000000000000000000000000000000000000000..9cf3e5e51d8edb3b8738cd7b95c73fe52d0c59e1
--- /dev/null
+++ b/nftmanageserver/.idea/libraries/Maven__org_springframework_spring_test_5_3_16.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/nftmanageserver/.idea/libraries/Maven__org_springframework_spring_tx_5_3_16.xml b/nftmanageserver/.idea/libraries/Maven__org_springframework_spring_tx_5_3_16.xml
new file mode 100644
index 0000000000000000000000000000000000000000..9be959eecc4e2a5e366c5af0ee89fd48584e477b
--- /dev/null
+++ b/nftmanageserver/.idea/libraries/Maven__org_springframework_spring_tx_5_3_16.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/nftmanageserver/.idea/libraries/Maven__org_springframework_spring_web_5_3_16.xml b/nftmanageserver/.idea/libraries/Maven__org_springframework_spring_web_5_3_16.xml
new file mode 100644
index 0000000000000000000000000000000000000000..1f3ce8180e7f99c59ccde5b470848952c5e31f11
--- /dev/null
+++ b/nftmanageserver/.idea/libraries/Maven__org_springframework_spring_web_5_3_16.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/nftmanageserver/.idea/libraries/Maven__org_springframework_spring_webmvc_5_3_16.xml b/nftmanageserver/.idea/libraries/Maven__org_springframework_spring_webmvc_5_3_16.xml
new file mode 100644
index 0000000000000000000000000000000000000000..337b443cb5be80bc0455f6c65048bfbdeaa9208b
--- /dev/null
+++ b/nftmanageserver/.idea/libraries/Maven__org_springframework_spring_webmvc_5_3_16.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/nftmanageserver/.idea/libraries/Maven__org_xmlunit_xmlunit_core_2_8_4.xml b/nftmanageserver/.idea/libraries/Maven__org_xmlunit_xmlunit_core_2_8_4.xml
new file mode 100644
index 0000000000000000000000000000000000000000..a9102879527c2386d6f1ba99860a0707968d8a28
--- /dev/null
+++ b/nftmanageserver/.idea/libraries/Maven__org_xmlunit_xmlunit_core_2_8_4.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/nftmanageserver/.idea/libraries/Maven__org_yaml_snakeyaml_1_29.xml b/nftmanageserver/.idea/libraries/Maven__org_yaml_snakeyaml_1_29.xml
new file mode 100644
index 0000000000000000000000000000000000000000..0f00ca4e21e84e6ba3e7de2b3abe54378aec35c9
--- /dev/null
+++ b/nftmanageserver/.idea/libraries/Maven__org_yaml_snakeyaml_1_29.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/nftmanageserver/.idea/misc.xml b/nftmanageserver/.idea/misc.xml
new file mode 100644
index 0000000000000000000000000000000000000000..7ae16d647304df285312ec35390bd841c7f541e3
--- /dev/null
+++ b/nftmanageserver/.idea/misc.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/nftmanageserver/.idea/modules.xml b/nftmanageserver/.idea/modules.xml
new file mode 100644
index 0000000000000000000000000000000000000000..807c78b55dd97001c9a1d7910c474bc18a16f1ed
--- /dev/null
+++ b/nftmanageserver/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/nftmanageserver/.idea/runConfigurations.xml b/nftmanageserver/.idea/runConfigurations.xml
new file mode 100644
index 0000000000000000000000000000000000000000..797acea53eb091cf5b30518802c3073f544adeed
--- /dev/null
+++ b/nftmanageserver/.idea/runConfigurations.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/nftmanageserver/.idea/uiDesigner.xml b/nftmanageserver/.idea/uiDesigner.xml
new file mode 100644
index 0000000000000000000000000000000000000000..e96534fb27b68192f27f985d3879e173ec77adb8
--- /dev/null
+++ b/nftmanageserver/.idea/uiDesigner.xml
@@ -0,0 +1,124 @@
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+
\ No newline at end of file
diff --git a/nftmanageserver/.idea/vcs.xml b/nftmanageserver/.idea/vcs.xml
new file mode 100644
index 0000000000000000000000000000000000000000..4b54472534813bc9bc2698e1eeaa75cfa83f39a9
--- /dev/null
+++ b/nftmanageserver/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/nftmanageserver/HELP.md b/nftmanageserver/HELP.md
new file mode 100644
index 0000000000000000000000000000000000000000..d8aae29e64f496874d993b48880aa26c743d419e
--- /dev/null
+++ b/nftmanageserver/HELP.md
@@ -0,0 +1,22 @@
+# Getting Started
+
+### Reference Documentation
+
+For further reference, please consider the following sections:
+
+* [Official Apache Maven documentation](https://maven.apache.org/guides/index.html)
+* [Spring Boot Maven Plugin Reference Guide](https://docs.spring.io/spring-boot/docs/2.6.7/maven-plugin/reference/html/)
+* [Create an OCI image](https://docs.spring.io/spring-boot/docs/2.6.7/maven-plugin/reference/html/#build-image)
+* [MyBatis Framework](https://mybatis.org/spring-boot-starter/mybatis-spring-boot-autoconfigure/)
+* [Spring Web](https://docs.spring.io/spring-boot/docs/2.6.7/reference/htmlsingle/#boot-features-developing-web-applications)
+
+### Guides
+
+The following guides illustrate how to use some features concretely:
+
+* [MyBatis Quick Start](https://github.com/mybatis/spring-boot-starter/wiki/Quick-Start)
+* [Building a RESTful Web Service](https://spring.io/guides/gs/rest-service/)
+* [Serving Web Content with Spring MVC](https://spring.io/guides/gs/serving-web-content/)
+* [Building REST services with Spring](https://spring.io/guides/tutorials/bookmarks/)
+* [Accessing data with MySQL](https://spring.io/guides/gs/accessing-data-mysql/)
+
diff --git a/nftmanageserver/mvnw b/nftmanageserver/mvnw
new file mode 100644
index 0000000000000000000000000000000000000000..8a8fb2282df5b8f7263470a5a2dc0e196f35f35f
--- /dev/null
+++ b/nftmanageserver/mvnw
@@ -0,0 +1,316 @@
+#!/bin/sh
+# ----------------------------------------------------------------------------
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+# ----------------------------------------------------------------------------
+
+# ----------------------------------------------------------------------------
+# Maven Start Up Batch script
+#
+# Required ENV vars:
+# ------------------
+# JAVA_HOME - location of a JDK home dir
+#
+# Optional ENV vars
+# -----------------
+# M2_HOME - location of maven2's installed home dir
+# MAVEN_OPTS - parameters passed to the Java VM when running Maven
+# e.g. to debug Maven itself, use
+# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
+# MAVEN_SKIP_RC - flag to disable loading of mavenrc files
+# ----------------------------------------------------------------------------
+
+if [ -z "$MAVEN_SKIP_RC" ] ; then
+
+ if [ -f /usr/local/etc/mavenrc ] ; then
+ . /usr/local/etc/mavenrc
+ fi
+
+ if [ -f /etc/mavenrc ] ; then
+ . /etc/mavenrc
+ fi
+
+ if [ -f "$HOME/.mavenrc" ] ; then
+ . "$HOME/.mavenrc"
+ fi
+
+fi
+
+# OS specific support. $var _must_ be set to either true or false.
+cygwin=false;
+darwin=false;
+mingw=false
+case "`uname`" in
+ CYGWIN*) cygwin=true ;;
+ MINGW*) mingw=true;;
+ Darwin*) darwin=true
+ # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home
+ # See https://developer.apple.com/library/mac/qa/qa1170/_index.html
+ if [ -z "$JAVA_HOME" ]; then
+ if [ -x "/usr/libexec/java_home" ]; then
+ export JAVA_HOME="`/usr/libexec/java_home`"
+ else
+ export JAVA_HOME="/Library/Java/Home"
+ fi
+ fi
+ ;;
+esac
+
+if [ -z "$JAVA_HOME" ] ; then
+ if [ -r /etc/gentoo-release ] ; then
+ JAVA_HOME=`java-config --jre-home`
+ fi
+fi
+
+if [ -z "$M2_HOME" ] ; then
+ ## resolve links - $0 may be a link to maven's home
+ PRG="$0"
+
+ # need this for relative symlinks
+ while [ -h "$PRG" ] ; do
+ ls=`ls -ld "$PRG"`
+ link=`expr "$ls" : '.*-> \(.*\)$'`
+ if expr "$link" : '/.*' > /dev/null; then
+ PRG="$link"
+ else
+ PRG="`dirname "$PRG"`/$link"
+ fi
+ done
+
+ saveddir=`pwd`
+
+ M2_HOME=`dirname "$PRG"`/..
+
+ # make it fully qualified
+ M2_HOME=`cd "$M2_HOME" && pwd`
+
+ cd "$saveddir"
+ # echo Using m2 at $M2_HOME
+fi
+
+# For Cygwin, ensure paths are in UNIX format before anything is touched
+if $cygwin ; then
+ [ -n "$M2_HOME" ] &&
+ M2_HOME=`cygpath --unix "$M2_HOME"`
+ [ -n "$JAVA_HOME" ] &&
+ JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
+ [ -n "$CLASSPATH" ] &&
+ CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
+fi
+
+# For Mingw, ensure paths are in UNIX format before anything is touched
+if $mingw ; then
+ [ -n "$M2_HOME" ] &&
+ M2_HOME="`(cd "$M2_HOME"; pwd)`"
+ [ -n "$JAVA_HOME" ] &&
+ JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`"
+fi
+
+if [ -z "$JAVA_HOME" ]; then
+ javaExecutable="`which javac`"
+ if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then
+ # readlink(1) is not available as standard on Solaris 10.
+ readLink=`which readlink`
+ if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then
+ if $darwin ; then
+ javaHome="`dirname \"$javaExecutable\"`"
+ javaExecutable="`cd \"$javaHome\" && pwd -P`/javac"
+ else
+ javaExecutable="`readlink -f \"$javaExecutable\"`"
+ fi
+ javaHome="`dirname \"$javaExecutable\"`"
+ javaHome=`expr "$javaHome" : '\(.*\)/bin'`
+ JAVA_HOME="$javaHome"
+ export JAVA_HOME
+ fi
+ fi
+fi
+
+if [ -z "$JAVACMD" ] ; then
+ if [ -n "$JAVA_HOME" ] ; then
+ if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+ # IBM's JDK on AIX uses strange locations for the executables
+ JAVACMD="$JAVA_HOME/jre/sh/java"
+ else
+ JAVACMD="$JAVA_HOME/bin/java"
+ fi
+ else
+ JAVACMD="`\\unset -f command; \\command -v java`"
+ fi
+fi
+
+if [ ! -x "$JAVACMD" ] ; then
+ echo "Error: JAVA_HOME is not defined correctly." >&2
+ echo " We cannot execute $JAVACMD" >&2
+ exit 1
+fi
+
+if [ -z "$JAVA_HOME" ] ; then
+ echo "Warning: JAVA_HOME environment variable is not set."
+fi
+
+CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher
+
+# traverses directory structure from process work directory to filesystem root
+# first directory with .mvn subdirectory is considered project base directory
+find_maven_basedir() {
+
+ if [ -z "$1" ]
+ then
+ echo "Path not specified to find_maven_basedir"
+ return 1
+ fi
+
+ basedir="$1"
+ wdir="$1"
+ while [ "$wdir" != '/' ] ; do
+ if [ -d "$wdir"/.mvn ] ; then
+ basedir=$wdir
+ break
+ fi
+ # workaround for JBEAP-8937 (on Solaris 10/Sparc)
+ if [ -d "${wdir}" ]; then
+ wdir=`cd "$wdir/.."; pwd`
+ fi
+ # end of workaround
+ done
+ echo "${basedir}"
+}
+
+# concatenates all lines of a file
+concat_lines() {
+ if [ -f "$1" ]; then
+ echo "$(tr -s '\n' ' ' < "$1")"
+ fi
+}
+
+BASE_DIR=`find_maven_basedir "$(pwd)"`
+if [ -z "$BASE_DIR" ]; then
+ exit 1;
+fi
+
+##########################################################################################
+# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
+# This allows using the maven wrapper in projects that prohibit checking in binary data.
+##########################################################################################
+if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then
+ if [ "$MVNW_VERBOSE" = true ]; then
+ echo "Found .mvn/wrapper/maven-wrapper.jar"
+ fi
+else
+ if [ "$MVNW_VERBOSE" = true ]; then
+ echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..."
+ fi
+ if [ -n "$MVNW_REPOURL" ]; then
+ jarUrl="$MVNW_REPOURL/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar"
+ else
+ jarUrl="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar"
+ fi
+ while IFS="=" read key value; do
+ case "$key" in (wrapperUrl) jarUrl="$value"; break ;;
+ esac
+ done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties"
+ if [ "$MVNW_VERBOSE" = true ]; then
+ echo "Downloading from: $jarUrl"
+ fi
+ wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar"
+ if $cygwin; then
+ wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"`
+ fi
+
+ if command -v wget > /dev/null; then
+ if [ "$MVNW_VERBOSE" = true ]; then
+ echo "Found wget ... using wget"
+ fi
+ if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
+ wget "$jarUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath"
+ else
+ wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath"
+ fi
+ elif command -v curl > /dev/null; then
+ if [ "$MVNW_VERBOSE" = true ]; then
+ echo "Found curl ... using curl"
+ fi
+ if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
+ curl -o "$wrapperJarPath" "$jarUrl" -f
+ else
+ curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f
+ fi
+
+ else
+ if [ "$MVNW_VERBOSE" = true ]; then
+ echo "Falling back to using Java to download"
+ fi
+ javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java"
+ # For Cygwin, switch paths to Windows format before running javac
+ if $cygwin; then
+ javaClass=`cygpath --path --windows "$javaClass"`
+ fi
+ if [ -e "$javaClass" ]; then
+ if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
+ if [ "$MVNW_VERBOSE" = true ]; then
+ echo " - Compiling MavenWrapperDownloader.java ..."
+ fi
+ # Compiling the Java class
+ ("$JAVA_HOME/bin/javac" "$javaClass")
+ fi
+ if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
+ # Running the downloader
+ if [ "$MVNW_VERBOSE" = true ]; then
+ echo " - Running MavenWrapperDownloader.java ..."
+ fi
+ ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR")
+ fi
+ fi
+ fi
+fi
+##########################################################################################
+# End of extension
+##########################################################################################
+
+export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}
+if [ "$MVNW_VERBOSE" = true ]; then
+ echo $MAVEN_PROJECTBASEDIR
+fi
+MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS"
+
+# For Cygwin, switch paths to Windows format before running java
+if $cygwin; then
+ [ -n "$M2_HOME" ] &&
+ M2_HOME=`cygpath --path --windows "$M2_HOME"`
+ [ -n "$JAVA_HOME" ] &&
+ JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`
+ [ -n "$CLASSPATH" ] &&
+ CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
+ [ -n "$MAVEN_PROJECTBASEDIR" ] &&
+ MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"`
+fi
+
+# Provide a "standardized" way to retrieve the CLI args that will
+# work with both Windows and non-Windows executions.
+MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@"
+export MAVEN_CMD_LINE_ARGS
+
+WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
+
+exec "$JAVACMD" \
+ $MAVEN_OPTS \
+ $MAVEN_DEBUG_OPTS \
+ -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
+ "-Dmaven.home=${M2_HOME}" \
+ "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
+ ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@"
diff --git a/nftmanageserver/mvnw.cmd b/nftmanageserver/mvnw.cmd
new file mode 100644
index 0000000000000000000000000000000000000000..1d8ab018eaf11d9b3a4a90e7818ace373dfbb380
--- /dev/null
+++ b/nftmanageserver/mvnw.cmd
@@ -0,0 +1,188 @@
+@REM ----------------------------------------------------------------------------
+@REM Licensed to the Apache Software Foundation (ASF) under one
+@REM or more contributor license agreements. See the NOTICE file
+@REM distributed with this work for additional information
+@REM regarding copyright ownership. The ASF licenses this file
+@REM to you under the Apache License, Version 2.0 (the
+@REM "License"); you may not use this file except in compliance
+@REM with the License. You may obtain a copy of the License at
+@REM
+@REM https://www.apache.org/licenses/LICENSE-2.0
+@REM
+@REM Unless required by applicable law or agreed to in writing,
+@REM software distributed under the License is distributed on an
+@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+@REM KIND, either express or implied. See the License for the
+@REM specific language governing permissions and limitations
+@REM under the License.
+@REM ----------------------------------------------------------------------------
+
+@REM ----------------------------------------------------------------------------
+@REM Maven Start Up Batch script
+@REM
+@REM Required ENV vars:
+@REM JAVA_HOME - location of a JDK home dir
+@REM
+@REM Optional ENV vars
+@REM M2_HOME - location of maven2's installed home dir
+@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands
+@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending
+@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven
+@REM e.g. to debug Maven itself, use
+@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
+@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files
+@REM ----------------------------------------------------------------------------
+
+@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on'
+@echo off
+@REM set title of command window
+title %0
+@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on'
+@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO%
+
+@REM set %HOME% to equivalent of $HOME
+if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%")
+
+@REM Execute a user defined script before this one
+if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre
+@REM check for pre script, once with legacy .bat ending and once with .cmd ending
+if exist "%USERPROFILE%\mavenrc_pre.bat" call "%USERPROFILE%\mavenrc_pre.bat" %*
+if exist "%USERPROFILE%\mavenrc_pre.cmd" call "%USERPROFILE%\mavenrc_pre.cmd" %*
+:skipRcPre
+
+@setlocal
+
+set ERROR_CODE=0
+
+@REM To isolate internal variables from possible post scripts, we use another setlocal
+@setlocal
+
+@REM ==== START VALIDATION ====
+if not "%JAVA_HOME%" == "" goto OkJHome
+
+echo.
+echo Error: JAVA_HOME not found in your environment. >&2
+echo Please set the JAVA_HOME variable in your environment to match the >&2
+echo location of your Java installation. >&2
+echo.
+goto error
+
+:OkJHome
+if exist "%JAVA_HOME%\bin\java.exe" goto init
+
+echo.
+echo Error: JAVA_HOME is set to an invalid directory. >&2
+echo JAVA_HOME = "%JAVA_HOME%" >&2
+echo Please set the JAVA_HOME variable in your environment to match the >&2
+echo location of your Java installation. >&2
+echo.
+goto error
+
+@REM ==== END VALIDATION ====
+
+:init
+
+@REM Find the project base dir, i.e. the directory that contains the folder ".mvn".
+@REM Fallback to current working directory if not found.
+
+set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR%
+IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir
+
+set EXEC_DIR=%CD%
+set WDIR=%EXEC_DIR%
+:findBaseDir
+IF EXIST "%WDIR%"\.mvn goto baseDirFound
+cd ..
+IF "%WDIR%"=="%CD%" goto baseDirNotFound
+set WDIR=%CD%
+goto findBaseDir
+
+:baseDirFound
+set MAVEN_PROJECTBASEDIR=%WDIR%
+cd "%EXEC_DIR%"
+goto endDetectBaseDir
+
+:baseDirNotFound
+set MAVEN_PROJECTBASEDIR=%EXEC_DIR%
+cd "%EXEC_DIR%"
+
+:endDetectBaseDir
+
+IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig
+
+@setlocal EnableExtensions EnableDelayedExpansion
+for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a
+@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS%
+
+:endReadAdditionalConfig
+
+SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe"
+set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar"
+set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
+
+set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar"
+
+FOR /F "usebackq tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO (
+ IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B
+)
+
+@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
+@REM This allows using the maven wrapper in projects that prohibit checking in binary data.
+if exist %WRAPPER_JAR% (
+ if "%MVNW_VERBOSE%" == "true" (
+ echo Found %WRAPPER_JAR%
+ )
+) else (
+ if not "%MVNW_REPOURL%" == "" (
+ SET DOWNLOAD_URL="%MVNW_REPOURL%/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar"
+ )
+ if "%MVNW_VERBOSE%" == "true" (
+ echo Couldn't find %WRAPPER_JAR%, downloading it ...
+ echo Downloading from: %DOWNLOAD_URL%
+ )
+
+ powershell -Command "&{"^
+ "$webclient = new-object System.Net.WebClient;"^
+ "if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^
+ "$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^
+ "}"^
+ "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^
+ "}"
+ if "%MVNW_VERBOSE%" == "true" (
+ echo Finished downloading %WRAPPER_JAR%
+ )
+)
+@REM End of extension
+
+@REM Provide a "standardized" way to retrieve the CLI args that will
+@REM work with both Windows and non-Windows executions.
+set MAVEN_CMD_LINE_ARGS=%*
+
+%MAVEN_JAVA_EXE% ^
+ %JVM_CONFIG_MAVEN_PROPS% ^
+ %MAVEN_OPTS% ^
+ %MAVEN_DEBUG_OPTS% ^
+ -classpath %WRAPPER_JAR% ^
+ "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" ^
+ %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %*
+if ERRORLEVEL 1 goto error
+goto end
+
+:error
+set ERROR_CODE=1
+
+:end
+@endlocal & set ERROR_CODE=%ERROR_CODE%
+
+if not "%MAVEN_SKIP_RC%"=="" goto skipRcPost
+@REM check for post script, once with legacy .bat ending and once with .cmd ending
+if exist "%USERPROFILE%\mavenrc_post.bat" call "%USERPROFILE%\mavenrc_post.bat"
+if exist "%USERPROFILE%\mavenrc_post.cmd" call "%USERPROFILE%\mavenrc_post.cmd"
+:skipRcPost
+
+@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on'
+if "%MAVEN_BATCH_PAUSE%"=="on" pause
+
+if "%MAVEN_TERMINATE_CMD%"=="on" exit %ERROR_CODE%
+
+cmd /C exit /B %ERROR_CODE%
diff --git a/nftmanageserver/nftmana b/nftmanageserver/nftmana
new file mode 160000
index 0000000000000000000000000000000000000000..211f355027532d5ff78f0f767741ea21de35aa58
--- /dev/null
+++ b/nftmanageserver/nftmana
@@ -0,0 +1 @@
+Subproject commit 211f355027532d5ff78f0f767741ea21de35aa58
diff --git a/nftmanageserver/nftmanageserver.iml b/nftmanageserver/nftmanageserver.iml
new file mode 100644
index 0000000000000000000000000000000000000000..6c73615e331a7996c1d039ee0fb8e5ee4d45a992
--- /dev/null
+++ b/nftmanageserver/nftmanageserver.iml
@@ -0,0 +1,102 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/nftmanageserver/pom.xml b/nftmanageserver/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..38537f00c1f5e2af453fceb8fc0d5a85d09f9081
--- /dev/null
+++ b/nftmanageserver/pom.xml
@@ -0,0 +1,57 @@
+
+
+ 4.0.0
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 2.6.4
+
+
+ zhuluo.learning
+ nftmanageserver
+ 0.0.1-SNAPSHOT
+ nftmanageserver
+ nftmanageserver
+
+ 8
+
+
+
+ com.alibaba
+ fastjson
+ 2.0.2.graal
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+ org.mybatis.spring.boot
+ mybatis-spring-boot-starter
+ 2.2.2
+
+
+
+ mysql
+ mysql-connector-java
+ runtime
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+ 2.6.4
+
+
+
+
+
diff --git a/nftmanageserver/src/main/java/zhuluo/learning/nftmanageserver/NftmanageserverApplication.java b/nftmanageserver/src/main/java/zhuluo/learning/nftmanageserver/NftmanageserverApplication.java
new file mode 100644
index 0000000000000000000000000000000000000000..0180b80c336a510a472880fa3872815b383d94d4
--- /dev/null
+++ b/nftmanageserver/src/main/java/zhuluo/learning/nftmanageserver/NftmanageserverApplication.java
@@ -0,0 +1,13 @@
+package zhuluo.learning.nftmanageserver;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class NftmanageserverApplication {
+
+ public static void main(String[] args) {
+ SpringApplication.run(NftmanageserverApplication.class, args);
+ }
+
+}
diff --git a/nftmanageserver/src/main/java/zhuluo/learning/nftmanageserver/goods/controller/SaleItemsController.java b/nftmanageserver/src/main/java/zhuluo/learning/nftmanageserver/goods/controller/SaleItemsController.java
new file mode 100644
index 0000000000000000000000000000000000000000..8aa1c473cd9c7c66ff5c404e5ea76ffa0200d442
--- /dev/null
+++ b/nftmanageserver/src/main/java/zhuluo/learning/nftmanageserver/goods/controller/SaleItemsController.java
@@ -0,0 +1,53 @@
+package zhuluo.learning.nftmanageserver.goods.controller;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import zhuluo.learning.nftmanageserver.goods.pojo.Artwork;
+import zhuluo.learning.nftmanageserver.goods.pojo.SaleItems;
+import zhuluo.learning.nftmanageserver.goods.service.ArtworkService;
+import zhuluo.learning.nftmanageserver.goods.service.SaleItemsService;
+
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.List;
+
+@RequestMapping("/goods")
+@RestController
+public class SaleItemsController {
+
+ @Autowired
+ private SaleItemsService saleItemsService;
+ @Autowired
+ private ArtworkService artworkService;
+
+ @RequestMapping("/getAll")
+ public List getAll(){
+ //获取SalesItems列表
+ List saleItemsList = saleItemsService.selectAll();
+ //创建日期转化类
+ DateFormat df = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
+ for (SaleItems item:
+ saleItemsList) {//挨个查找固定的artwork合并
+ //先进行日期格式化
+ if(item.getShelfTime()!=null){
+ Date date = new Date(Long.parseLong(item.getShelfTime()));
+ item.setShelfTime(df.format(date));
+ }
+ Artwork artwork = artworkService.selectById(item.getProductId());
+ item.setArtwork(artwork);
+ }
+ return saleItemsList;
+ }
+
+ @RequestMapping("/getById")
+ public SaleItems getById(@RequestParam("saleId") int saleId){
+ SaleItems saleItems = saleItemsService.selectById(saleId);
+ Artwork artwork = artworkService.selectById(saleItems.getProductId());
+ saleItems.setArtwork(artwork);
+ return saleItems;
+ }
+
+}
diff --git a/nftmanageserver/src/main/java/zhuluo/learning/nftmanageserver/goods/mapper/ArtworkMapper.java b/nftmanageserver/src/main/java/zhuluo/learning/nftmanageserver/goods/mapper/ArtworkMapper.java
new file mode 100644
index 0000000000000000000000000000000000000000..ba4fd2c6006789ec01383d7edf9b29548d8bfba3
--- /dev/null
+++ b/nftmanageserver/src/main/java/zhuluo/learning/nftmanageserver/goods/mapper/ArtworkMapper.java
@@ -0,0 +1,15 @@
+package zhuluo.learning.nftmanageserver.goods.mapper;
+
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Select;
+import org.springframework.stereotype.Repository;
+import zhuluo.learning.nftmanageserver.goods.pojo.Artwork;
+
+@Mapper
+@Repository
+public interface ArtworkMapper {
+ final String selectById = "SELECT * FROM artwork WHERE id = #{id}";
+
+ @Select(selectById)
+ public Artwork selectById(int id);
+}
diff --git a/nftmanageserver/src/main/java/zhuluo/learning/nftmanageserver/goods/mapper/SaleItemsMapper.java b/nftmanageserver/src/main/java/zhuluo/learning/nftmanageserver/goods/mapper/SaleItemsMapper.java
new file mode 100644
index 0000000000000000000000000000000000000000..013906629cd2feb52b9f34ba8b7f22b8e00808ae
--- /dev/null
+++ b/nftmanageserver/src/main/java/zhuluo/learning/nftmanageserver/goods/mapper/SaleItemsMapper.java
@@ -0,0 +1,19 @@
+package zhuluo.learning.nftmanageserver.goods.mapper;
+
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Select;
+import org.springframework.stereotype.Repository;
+import zhuluo.learning.nftmanageserver.goods.pojo.SaleItems;
+
+import java.util.List;
+
+@Mapper
+@Repository
+public interface SaleItemsMapper {
+ final String selectAll = "SELECT * FROM saleItems";
+ final String selectById = "SELECT * FROM saleItems WHERE saleId = #{saleId}";
+ @Select(selectAll)
+ public List selectAll();
+ @Select(selectById)
+ public SaleItems selectById(int saleId);
+}
diff --git a/nftmanageserver/src/main/java/zhuluo/learning/nftmanageserver/goods/pojo/Artwork.java b/nftmanageserver/src/main/java/zhuluo/learning/nftmanageserver/goods/pojo/Artwork.java
new file mode 100644
index 0000000000000000000000000000000000000000..b8a2e9fd6a4bb104c31b13bb62cce66a4a6563d0
--- /dev/null
+++ b/nftmanageserver/src/main/java/zhuluo/learning/nftmanageserver/goods/pojo/Artwork.java
@@ -0,0 +1,90 @@
+package zhuluo.learning.nftmanageserver.goods.pojo;
+
+public class Artwork {
+ private int id;
+ private String name;
+ private String url;
+ private String description;
+ private String chainAddress;
+ private int ownerId;
+ private int typeId;
+ private String coverUrl;
+
+ @Override
+ public String toString() {
+ return "artwork{" +
+ "id=" + id +
+ ", name='" + name + '\'' +
+ ", url='" + url + '\'' +
+ ", description='" + description + '\'' +
+ ", chainAddress='" + chainAddress + '\'' +
+ ", ownerId=" + ownerId +
+ ", typeId=" + typeId +
+ ", coverUrl='" + coverUrl + '\'' +
+ '}';
+ }
+
+ public int getId() {
+ return id;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getUrl() {
+ return url;
+ }
+
+ public void setUrl(String url) {
+ this.url = url;
+ }
+
+ public String getDescription() {
+ return description;
+ }
+
+ public void setDescription(String description) {
+ this.description = description;
+ }
+
+ public String getChainAddress() {
+ return chainAddress;
+ }
+
+ public void setChainAddress(String chainAddress) {
+ this.chainAddress = chainAddress;
+ }
+
+ public int getOwnerId() {
+ return ownerId;
+ }
+
+ public void setOwnerId(int ownerId) {
+ this.ownerId = ownerId;
+ }
+
+ public int getTypeId() {
+ return typeId;
+ }
+
+ public void setTypeId(int typeId) {
+ this.typeId = typeId;
+ }
+
+ public String getCoverUrl() {
+ return coverUrl;
+ }
+
+ public void setCoverUrl(String coverUrl) {
+ this.coverUrl = coverUrl;
+ }
+}
diff --git a/nftmanageserver/src/main/java/zhuluo/learning/nftmanageserver/goods/pojo/SaleItems.java b/nftmanageserver/src/main/java/zhuluo/learning/nftmanageserver/goods/pojo/SaleItems.java
new file mode 100644
index 0000000000000000000000000000000000000000..de408f7012d44c3ca142de14348340f037bae305
--- /dev/null
+++ b/nftmanageserver/src/main/java/zhuluo/learning/nftmanageserver/goods/pojo/SaleItems.java
@@ -0,0 +1,100 @@
+package zhuluo.learning.nftmanageserver.goods.pojo;
+
+public class SaleItems {
+ private int saleId;
+ private int productId;
+ private String shelfTime;
+ private int salerId;
+ private int price;
+ private String state;
+ private int starCount;
+ private String instruction;
+ private Artwork artwork;
+
+ @Override
+ public String toString() {
+ return "SaleItems{" +
+ "saleId=" + saleId +
+ ", productId=" + productId +
+ ", shelfTime='" + shelfTime + '\'' +
+ ", salerId=" + salerId +
+ ", price=" + price +
+ ", state='" + state + '\'' +
+ ", starCount=" + starCount +
+ ", instruction='" + instruction + '\'' +
+ ", artwork=" + artwork +
+ '}';
+ }
+
+ public int getSaleId() {
+ return saleId;
+ }
+
+ public void setSaleId(int saleId) {
+ this.saleId = saleId;
+ }
+
+ public int getProductId() {
+ return productId;
+ }
+
+ public void setProductId(int productId) {
+ this.productId = productId;
+ }
+
+ public String getShelfTime() {
+ return shelfTime;
+ }
+
+ public void setShelfTime(String shelfTime) {
+ this.shelfTime = shelfTime;
+ }
+
+ public int getSalerId() {
+ return salerId;
+ }
+
+ public void setSalerId(int salerId) {
+ this.salerId = salerId;
+ }
+
+ public int getPrice() {
+ return price;
+ }
+
+ public void setPrice(int price) {
+ this.price = price;
+ }
+
+ public String getState() {
+ return state;
+ }
+
+ public void setState(String state) {
+ this.state = state;
+ }
+
+ public int getStarCount() {
+ return starCount;
+ }
+
+ public void setStarCount(int starCount) {
+ this.starCount = starCount;
+ }
+
+ public String getInstruction() {
+ return instruction;
+ }
+
+ public void setInstruction(String instruction) {
+ this.instruction = instruction;
+ }
+
+ public Artwork getArtwork() {
+ return artwork;
+ }
+
+ public void setArtwork(Artwork artwork) {
+ this.artwork = artwork;
+ }
+}
diff --git a/nftmanageserver/src/main/java/zhuluo/learning/nftmanageserver/goods/service/ArtworkService.java b/nftmanageserver/src/main/java/zhuluo/learning/nftmanageserver/goods/service/ArtworkService.java
new file mode 100644
index 0000000000000000000000000000000000000000..76494d72199884547a15e936fc8aec3355ce03ef
--- /dev/null
+++ b/nftmanageserver/src/main/java/zhuluo/learning/nftmanageserver/goods/service/ArtworkService.java
@@ -0,0 +1,16 @@
+package zhuluo.learning.nftmanageserver.goods.service;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import zhuluo.learning.nftmanageserver.goods.mapper.ArtworkMapper;
+import zhuluo.learning.nftmanageserver.goods.pojo.Artwork;
+
+@Service
+public class ArtworkService {
+ @Autowired
+ private ArtworkMapper artworkMapper;
+
+ public Artwork selectById(int id){
+ return artworkMapper.selectById(id);
+ }
+}
diff --git a/nftmanageserver/src/main/java/zhuluo/learning/nftmanageserver/goods/service/SaleItemsService.java b/nftmanageserver/src/main/java/zhuluo/learning/nftmanageserver/goods/service/SaleItemsService.java
new file mode 100644
index 0000000000000000000000000000000000000000..7107705a1100af4dc3655cbbe91cf803432fc9f4
--- /dev/null
+++ b/nftmanageserver/src/main/java/zhuluo/learning/nftmanageserver/goods/service/SaleItemsService.java
@@ -0,0 +1,22 @@
+package zhuluo.learning.nftmanageserver.goods.service;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import zhuluo.learning.nftmanageserver.goods.mapper.SaleItemsMapper;
+import zhuluo.learning.nftmanageserver.goods.pojo.SaleItems;
+
+import java.util.List;
+
+@Service
+public class SaleItemsService {
+ @Autowired
+ private SaleItemsMapper saleItemsMapper;
+
+ public List selectAll(){
+ return saleItemsMapper.selectAll();
+ }
+
+ public SaleItems selectById(int saleId){
+ return saleItemsMapper.selectById(saleId);
+ }
+}
diff --git a/nftmanageserver/src/main/java/zhuluo/learning/nftmanageserver/login/controller/UserController.java b/nftmanageserver/src/main/java/zhuluo/learning/nftmanageserver/login/controller/UserController.java
new file mode 100644
index 0000000000000000000000000000000000000000..6c5cf8ea098707687934e53f3da9539f0a649dfa
--- /dev/null
+++ b/nftmanageserver/src/main/java/zhuluo/learning/nftmanageserver/login/controller/UserController.java
@@ -0,0 +1,44 @@
+package zhuluo.learning.nftmanageserver.login.controller;
+
+import com.alibaba.fastjson.JSONObject;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+import zhuluo.learning.nftmanageserver.login.pojo.User;
+import zhuluo.learning.nftmanageserver.login.service.UserService;
+
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import java.util.List;
+
+@RestController
+@RequestMapping("/user")
+public class UserController {
+
+ @Autowired
+ private UserService userService;
+
+ //要接受前端发送的json数据,可以使用阿里巴巴的fastjson库进行解析
+ @RequestMapping("/canLogin")
+ public String canLogin(@RequestParam("username") String username,@RequestParam("password") String password){//可以接收json作为JSONObject类的对象
+ User user = userService.getByUserName(username);
+ //如果账号不可用,则返回false,不能登录
+ if(user.getIsActive()==0){
+ return "false";
+ }
+ if(user==null){
+ System.out.println("user == null");
+ return "false";
+ }
+ if(password.equals(user.getPassword())){
+ return "true";
+ }else{
+ return "false";
+ }
+ }
+
+ @RequestMapping("/getAll")
+ public List getAll(){
+ return userService.getAll();
+ }
+}
diff --git a/nftmanageserver/src/main/java/zhuluo/learning/nftmanageserver/login/mapper/UserMapper.java b/nftmanageserver/src/main/java/zhuluo/learning/nftmanageserver/login/mapper/UserMapper.java
new file mode 100644
index 0000000000000000000000000000000000000000..de8b5e952bf37e70a98070fd13067d583219b858
--- /dev/null
+++ b/nftmanageserver/src/main/java/zhuluo/learning/nftmanageserver/login/mapper/UserMapper.java
@@ -0,0 +1,42 @@
+package zhuluo.learning.nftmanageserver.login.mapper;
+
+
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Select;
+import org.apache.ibatis.annotations.Update;
+import org.springframework.stereotype.Repository;
+import zhuluo.learning.nftmanageserver.login.pojo.User;
+
+import java.util.List;
+
+@Mapper
+@Repository
+public interface UserMapper {
+ final String selectAll = "SELECT * FROM account";
+ final String selectByUserName = "SELECT * FROM account WHERE Uname = #{username}";
+ final String updateInfo = "UPDATE account SET Password = #{password},Email=#{email},PhoneNum=#{phoneNum} WHERE Uname = #{username}";
+ final String selectBySearchKey = "SELECT * FROM account WHERE Uname like #{searchKey}";
+ final String selectById = "SELECT * FROM account WHERE Id = #{id}";
+ final String updateActive = "UPDATE account SET IsActive = 0 WHERE Id = #{id}";
+ final String updateIsActive = "UPDATE account SET IsActive = 1 WHERE Id = #{id}";
+ @Select(selectAll)
+ List selectAll();
+
+ @Select(selectByUserName)
+ User selectByUserName(String username);
+
+ @Update(updateInfo)
+ int updateInfo(String password,String email,String phoneNum,String username);
+
+ @Select(selectBySearchKey)
+ List searchBySearchKey(String searchKey);
+
+ @Select(selectById)
+ User selectByUserId(int id);
+
+ @Update(updateActive)
+ int updateActive(int id);
+
+ @Update(updateIsActive)
+ int updateIsActive(int id);
+}
diff --git a/nftmanageserver/src/main/java/zhuluo/learning/nftmanageserver/login/pojo/User.java b/nftmanageserver/src/main/java/zhuluo/learning/nftmanageserver/login/pojo/User.java
new file mode 100644
index 0000000000000000000000000000000000000000..2a3cd7462cbfd3b8be07723c3dce7e79bf199223
--- /dev/null
+++ b/nftmanageserver/src/main/java/zhuluo/learning/nftmanageserver/login/pojo/User.java
@@ -0,0 +1,120 @@
+package zhuluo.learning.nftmanageserver.login.pojo;
+
+public class User {
+ private int Id;
+ private String Uname;
+ private String Password;
+ private String Email;
+ private String PhoneNum;
+ private String StateCode;
+ private String HeadPicUrl;
+ private int IsActive;
+ private String Sex;
+ private int Age;
+ private int token;
+
+ @Override
+ public String toString() {
+ return "User{" +
+ "Id=" + Id +
+ ", Uname='" + Uname + '\'' +
+ ", Password='" + Password + '\'' +
+ ", Email='" + Email + '\'' +
+ ", PhoneNum='" + PhoneNum + '\'' +
+ ", StateCode='" + StateCode + '\'' +
+ ", HeadPicUrl='" + HeadPicUrl + '\'' +
+ ", IsActive=" + IsActive +
+ ", Sex='" + Sex + '\'' +
+ ", Age=" + Age +
+ ", token=" + token +
+ '}';
+ }
+
+ public int getId() {
+ return Id;
+ }
+
+ public void setId(int id) {
+ Id = id;
+ }
+
+ public String getUname() {
+ return Uname;
+ }
+
+ public void setUname(String uname) {
+ Uname = uname;
+ }
+
+ public String getPassword() {
+ return Password;
+ }
+
+ public void setPassword(String password) {
+ Password = password;
+ }
+
+ public String getEmail() {
+ return Email;
+ }
+
+ public void setEmail(String email) {
+ Email = email;
+ }
+
+ public String getPhoneNum() {
+ return PhoneNum;
+ }
+
+ public void setPhoneNum(String phoneNum) {
+ PhoneNum = phoneNum;
+ }
+
+ public String getStateCode() {
+ return StateCode;
+ }
+
+ public void setStateCode(String stateCode) {
+ StateCode = stateCode;
+ }
+
+ public String getHeadPicUrl() {
+ return HeadPicUrl;
+ }
+
+ public void setHeadPicUrl(String headPicUrl) {
+ HeadPicUrl = headPicUrl;
+ }
+
+ public int getIsActive() {
+ return IsActive;
+ }
+
+ public void setIsActive(int isActive) {
+ IsActive = isActive;
+ }
+
+ public String getSex() {
+ return Sex;
+ }
+
+ public void setSex(String sex) {
+ Sex = sex;
+ }
+
+ public int getAge() {
+ return Age;
+ }
+
+ public void setAge(int age) {
+ Age = age;
+ }
+
+ public int getToken() {
+ return token;
+ }
+
+ public void setToken(int token) {
+ this.token = token;
+ }
+}
diff --git a/nftmanageserver/src/main/java/zhuluo/learning/nftmanageserver/login/service/UserService.java b/nftmanageserver/src/main/java/zhuluo/learning/nftmanageserver/login/service/UserService.java
new file mode 100644
index 0000000000000000000000000000000000000000..0b56a3ff813906c6219bee555911d4e8e184ea21
--- /dev/null
+++ b/nftmanageserver/src/main/java/zhuluo/learning/nftmanageserver/login/service/UserService.java
@@ -0,0 +1,42 @@
+package zhuluo.learning.nftmanageserver.login.service;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import zhuluo.learning.nftmanageserver.login.mapper.UserMapper;
+import zhuluo.learning.nftmanageserver.login.pojo.User;
+
+import java.util.List;
+
+@Service
+public class UserService {
+ @Autowired
+ private UserMapper userMapper;
+
+ public List getAll(){
+ return userMapper.selectAll();
+ }
+
+ public User getByUserName(String username){
+ return userMapper.selectByUserName(username);
+ }
+
+ public int update(String password,String email,String phoneNum,String username){
+ return userMapper.updateInfo(password, email, phoneNum, username);
+ }
+
+ public List searchBySearchKey(String searchKey){
+ return userMapper.searchBySearchKey(searchKey);
+ }
+
+ public User getByUserId(int id){
+ return userMapper.selectByUserId(id);
+ }
+
+ public int updateActive(int id){
+ return userMapper.updateActive(id);
+ }
+
+ public int updateIsActive(int id){
+ return userMapper.updateIsActive(id);
+ }
+}
diff --git a/nftmanageserver/src/main/java/zhuluo/learning/nftmanageserver/orders/controller/OrdersController.java b/nftmanageserver/src/main/java/zhuluo/learning/nftmanageserver/orders/controller/OrdersController.java
new file mode 100644
index 0000000000000000000000000000000000000000..899e609d59d67e0e237d04792fb6570c5ffbbd71
--- /dev/null
+++ b/nftmanageserver/src/main/java/zhuluo/learning/nftmanageserver/orders/controller/OrdersController.java
@@ -0,0 +1,53 @@
+package zhuluo.learning.nftmanageserver.orders.controller;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import zhuluo.learning.nftmanageserver.goods.pojo.Artwork;
+import zhuluo.learning.nftmanageserver.goods.pojo.SaleItems;
+import zhuluo.learning.nftmanageserver.goods.service.ArtworkService;
+import zhuluo.learning.nftmanageserver.goods.service.SaleItemsService;
+import zhuluo.learning.nftmanageserver.login.pojo.User;
+import zhuluo.learning.nftmanageserver.login.service.UserService;
+import zhuluo.learning.nftmanageserver.orders.pojo.Orders;
+import zhuluo.learning.nftmanageserver.orders.service.OrdersService;
+
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.List;
+
+@RestController
+@RequestMapping("/orders")
+public class OrdersController {
+ @Autowired
+ private OrdersService ordersService;
+ @Autowired
+ private UserService userService;
+ @Autowired
+ private SaleItemsService saleItemsService;
+ @Autowired
+ private ArtworkService artworkService;
+
+ @RequestMapping("/getAll")
+ public List selectAll(){
+ List list = ordersService.selectAll();
+ DateFormat df = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
+ for (Orders order:
+ list) {
+ if(order.getDealTime()!=null){
+ Date date = new Date(Long.parseLong(order.getDealTime()));
+ order.setDealTime(df.format(date));
+ }
+ User buyerUser = userService.getByUserId(order.getBuyerId());
+ User salerUser = userService.getByUserId(order.getSalerId());
+ SaleItems saleItems = saleItemsService.selectById(order.getSaleId());
+ Artwork artwork = artworkService.selectById(saleItems.getProductId());
+ saleItems.setArtwork(artwork);
+ order.setBuyer(buyerUser);
+ order.setSaler(salerUser);
+ order.setSaleItems(saleItems);
+ }
+ return list;
+ }
+}
diff --git a/nftmanageserver/src/main/java/zhuluo/learning/nftmanageserver/orders/mapper/OrdersMapper.java b/nftmanageserver/src/main/java/zhuluo/learning/nftmanageserver/orders/mapper/OrdersMapper.java
new file mode 100644
index 0000000000000000000000000000000000000000..3fe4c81f55b64f05e0b852fcd74b15687ef72d59
--- /dev/null
+++ b/nftmanageserver/src/main/java/zhuluo/learning/nftmanageserver/orders/mapper/OrdersMapper.java
@@ -0,0 +1,16 @@
+package zhuluo.learning.nftmanageserver.orders.mapper;
+
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Select;
+import org.springframework.stereotype.Repository;
+import zhuluo.learning.nftmanageserver.orders.pojo.Orders;
+
+import java.util.List;
+
+@Mapper
+@Repository
+public interface OrdersMapper {
+ final String selectAll = "SELECT * FROM orders";
+ @Select(selectAll)
+ public List selectAll();
+}
diff --git a/nftmanageserver/src/main/java/zhuluo/learning/nftmanageserver/orders/pojo/Orders.java b/nftmanageserver/src/main/java/zhuluo/learning/nftmanageserver/orders/pojo/Orders.java
new file mode 100644
index 0000000000000000000000000000000000000000..b46cfc10cfb463b274e2ce0eb73f0f1c63d44203
--- /dev/null
+++ b/nftmanageserver/src/main/java/zhuluo/learning/nftmanageserver/orders/pojo/Orders.java
@@ -0,0 +1,103 @@
+package zhuluo.learning.nftmanageserver.orders.pojo;
+
+import zhuluo.learning.nftmanageserver.goods.pojo.SaleItems;
+import zhuluo.learning.nftmanageserver.login.pojo.User;
+
+public class Orders {
+ private int orderId;
+ private int salerId;
+ private int buyerId;
+ private String dealTime;
+ private int saleId;
+ private int price;
+ private User buyer;
+ private User saler;
+ private SaleItems saleItems;
+
+ @Override
+ public String toString() {
+ return "Orders{" +
+ "orderId=" + orderId +
+ ", salerId=" + salerId +
+ ", buyerId=" + buyerId +
+ ", dealTime='" + dealTime + '\'' +
+ ", saleId=" + saleId +
+ ", price=" + price +
+ ", buyer=" + buyer +
+ ", saler=" + saler +
+ ", saleItems=" + saleItems +
+ '}';
+ }
+
+ public int getOrderId() {
+ return orderId;
+ }
+
+ public void setOrderId(int orderId) {
+ this.orderId = orderId;
+ }
+
+ public int getSalerId() {
+ return salerId;
+ }
+
+ public void setSalerId(int salerId) {
+ this.salerId = salerId;
+ }
+
+ public int getBuyerId() {
+ return buyerId;
+ }
+
+ public void setBuyerId(int buyerId) {
+ this.buyerId = buyerId;
+ }
+
+ public String getDealTime() {
+ return dealTime;
+ }
+
+ public void setDealTime(String dealTime) {
+ this.dealTime = dealTime;
+ }
+
+ public int getSaleId() {
+ return saleId;
+ }
+
+ public void setSaleId(int saleId) {
+ this.saleId = saleId;
+ }
+
+ public int getPrice() {
+ return price;
+ }
+
+ public void setPrice(int price) {
+ this.price = price;
+ }
+
+ public User getBuyer() {
+ return buyer;
+ }
+
+ public void setBuyer(User buyer) {
+ this.buyer = buyer;
+ }
+
+ public User getSaler() {
+ return saler;
+ }
+
+ public void setSaler(User saler) {
+ this.saler = saler;
+ }
+
+ public SaleItems getSaleItems() {
+ return saleItems;
+ }
+
+ public void setSaleItems(SaleItems saleItems) {
+ this.saleItems = saleItems;
+ }
+}
diff --git a/nftmanageserver/src/main/java/zhuluo/learning/nftmanageserver/orders/service/OrdersService.java b/nftmanageserver/src/main/java/zhuluo/learning/nftmanageserver/orders/service/OrdersService.java
new file mode 100644
index 0000000000000000000000000000000000000000..713a9651335a9e66fe0d7414fecaf847f7deb2b7
--- /dev/null
+++ b/nftmanageserver/src/main/java/zhuluo/learning/nftmanageserver/orders/service/OrdersService.java
@@ -0,0 +1,18 @@
+package zhuluo.learning.nftmanageserver.orders.service;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import zhuluo.learning.nftmanageserver.orders.mapper.OrdersMapper;
+import zhuluo.learning.nftmanageserver.orders.pojo.Orders;
+
+import java.util.List;
+
+@Service
+public class OrdersService {
+ @Autowired
+ private OrdersMapper ordersMapper;
+
+ public List selectAll(){
+ return ordersMapper.selectAll();
+ }
+}
diff --git a/nftmanageserver/src/main/java/zhuluo/learning/nftmanageserver/recharge/controller/RechargeController.java b/nftmanageserver/src/main/java/zhuluo/learning/nftmanageserver/recharge/controller/RechargeController.java
new file mode 100644
index 0000000000000000000000000000000000000000..7e98b3b79170e32cbd2bde5bbb6225e061da15e7
--- /dev/null
+++ b/nftmanageserver/src/main/java/zhuluo/learning/nftmanageserver/recharge/controller/RechargeController.java
@@ -0,0 +1,41 @@
+package zhuluo.learning.nftmanageserver.recharge.controller;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import zhuluo.learning.nftmanageserver.recharge.pojo.Recharge;
+import zhuluo.learning.nftmanageserver.recharge.service.RechargeService;
+
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.List;
+
+@RestController
+@RequestMapping("/recharge")
+public class RechargeController {
+
+ @Autowired
+ private RechargeService rechargeService;
+
+ @RequestMapping("/getAll")
+ public List getAll(){
+ List rechargeList = rechargeService.getAll();
+ //这样返回的话,日期是gmt毫秒值
+ //return rechargeService.getAll();
+ //需要先进行转化
+ DateFormat df = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
+ for (Recharge rec:
+ rechargeList) {
+ if(rec.getGmt_Create()!=null){
+ Date date1 = new Date(Long.parseLong(rec.getGmt_Create()));
+ rec.setGmt_Create(df.format(date1));
+ }
+ if(rec.getGmt_payment()!=null){
+ Date date2 = new Date(Long.parseLong(rec.getGmt_payment()));
+ rec.setGmt_payment(df.format(date2));
+ }
+ }
+ return rechargeList;
+ }
+}
diff --git a/nftmanageserver/src/main/java/zhuluo/learning/nftmanageserver/recharge/mapper/RechargeMapper.java b/nftmanageserver/src/main/java/zhuluo/learning/nftmanageserver/recharge/mapper/RechargeMapper.java
new file mode 100644
index 0000000000000000000000000000000000000000..f328404428e8f1c57f8ba3ca33a4e8e6d749ed47
--- /dev/null
+++ b/nftmanageserver/src/main/java/zhuluo/learning/nftmanageserver/recharge/mapper/RechargeMapper.java
@@ -0,0 +1,16 @@
+package zhuluo.learning.nftmanageserver.recharge.mapper;
+
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Select;
+import org.springframework.stereotype.Repository;
+import zhuluo.learning.nftmanageserver.recharge.pojo.Recharge;
+
+import java.util.List;
+
+@Mapper
+@Repository
+public interface RechargeMapper {
+ final String selectAll = "SELECT * FROM recharge";
+ @Select(selectAll)
+ public List getAll();
+}
diff --git a/nftmanageserver/src/main/java/zhuluo/learning/nftmanageserver/recharge/pojo/Recharge.java b/nftmanageserver/src/main/java/zhuluo/learning/nftmanageserver/recharge/pojo/Recharge.java
new file mode 100644
index 0000000000000000000000000000000000000000..30c0be31a61a2696cb7e90df863a469126b86fbb
--- /dev/null
+++ b/nftmanageserver/src/main/java/zhuluo/learning/nftmanageserver/recharge/pojo/Recharge.java
@@ -0,0 +1,82 @@
+package zhuluo.learning.nftmanageserver.recharge.pojo;
+
+import java.math.BigInteger;
+
+public class Recharge {
+ private String out_trade_no;
+ private String trade_no;
+ private double amount;
+ private String gmt_Create;
+ private String gmt_payment;
+ private int uid;
+ private int state;
+
+ @Override
+ public String toString() {
+ return "recharge{" +
+ "out_trade_no='" + out_trade_no + '\'' +
+ ", trade_no='" + trade_no + '\'' +
+ ", amount=" + amount +
+ ", gmt_Create='" + gmt_Create + '\'' +
+ ", gmt_payment='" + gmt_payment + '\'' +
+ ", uid=" + uid +
+ ", state=" + state +
+ '}';
+ }
+
+ public String getOut_trade_no() {
+ return out_trade_no;
+ }
+
+ public void setOut_trade_no(String out_trade_no) {
+ this.out_trade_no = out_trade_no;
+ }
+
+ public String getTrade_no() {
+ return trade_no;
+ }
+
+ public void setTrade_no(String trade_no) {
+ this.trade_no = trade_no;
+ }
+
+ public double getAmount() {
+ return amount;
+ }
+
+ public void setAmount(double amount) {
+ this.amount = amount;
+ }
+
+ public String getGmt_Create() {
+ return gmt_Create;
+ }
+
+ public void setGmt_Create(String gmt_Create) {
+ this.gmt_Create = gmt_Create;
+ }
+
+ public String getGmt_payment() {
+ return gmt_payment;
+ }
+
+ public void setGmt_payment(String gmt_payment) {
+ this.gmt_payment = gmt_payment;
+ }
+
+ public int getUid() {
+ return uid;
+ }
+
+ public void setUid(int uid) {
+ this.uid = uid;
+ }
+
+ public int getState() {
+ return state;
+ }
+
+ public void setState(int state) {
+ this.state = state;
+ }
+}
diff --git a/nftmanageserver/src/main/java/zhuluo/learning/nftmanageserver/recharge/service/RechargeService.java b/nftmanageserver/src/main/java/zhuluo/learning/nftmanageserver/recharge/service/RechargeService.java
new file mode 100644
index 0000000000000000000000000000000000000000..4a31295bf02f6057d3e5a1502685ce4a716620d1
--- /dev/null
+++ b/nftmanageserver/src/main/java/zhuluo/learning/nftmanageserver/recharge/service/RechargeService.java
@@ -0,0 +1,19 @@
+package zhuluo.learning.nftmanageserver.recharge.service;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import zhuluo.learning.nftmanageserver.recharge.mapper.RechargeMapper;
+import zhuluo.learning.nftmanageserver.recharge.pojo.Recharge;
+
+import java.util.List;
+
+@Service
+public class RechargeService {
+
+ @Autowired
+ private RechargeMapper rechargeMapper;
+
+ public List getAll(){
+ return rechargeMapper.getAll();
+ }
+}
diff --git a/nftmanageserver/src/main/java/zhuluo/learning/nftmanageserver/report/controller/ReportController.java b/nftmanageserver/src/main/java/zhuluo/learning/nftmanageserver/report/controller/ReportController.java
new file mode 100644
index 0000000000000000000000000000000000000000..8e760c78ec5020d0d2a22626e2f2266add27f905
--- /dev/null
+++ b/nftmanageserver/src/main/java/zhuluo/learning/nftmanageserver/report/controller/ReportController.java
@@ -0,0 +1,60 @@
+package zhuluo.learning.nftmanageserver.report.controller;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import zhuluo.learning.nftmanageserver.login.pojo.User;
+import zhuluo.learning.nftmanageserver.login.service.UserService;
+import zhuluo.learning.nftmanageserver.report.pojo.Report;
+import zhuluo.learning.nftmanageserver.report.service.ReportService;
+
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.List;
+
+@RequestMapping("/report")
+@RestController
+public class ReportController {
+ @Autowired
+ private ReportService reportService;
+ @Autowired
+ private UserService userService;
+
+ @RequestMapping("/getAll")
+ public List getAll(){
+ List reports = reportService.selectAll();
+ DateFormat df = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
+ for (Report report:
+ reports) {
+ if(report.getReportTime()!=null){
+ Date date = new Date(Long.parseLong(report.getReportTime()));
+ report.setReportTime(df.format(date));
+ }
+ User accuser = userService.getByUserId(report.getAccuserId());
+ User informant = userService.getByUserId(report.getInformantId());
+ report.setAccuser(accuser);
+ report.setInformant(informant);
+ }
+ return reports;
+ }
+ @RequestMapping("/deleteOne")
+ public int DeleteOne(@RequestParam("reportId")int id){
+ return reportService.deleteOne(id);
+ }
+ @RequestMapping("/selectOne")
+ public Report selectOne(@RequestParam("reportId")int id){
+ Report report = reportService.selectOne(id);
+ DateFormat df = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
+ if(report.getReportTime()!=null){
+ Date date = new Date(Long.parseLong(report.getReportTime()));
+ report.setReportTime(df.format(date));
+ }
+ User accuser = userService.getByUserId(report.getAccuserId());
+ User informant = userService.getByUserId(report.getInformantId());
+ report.setAccuser(accuser);
+ report.setInformant(informant);
+ return report;
+ }
+}
diff --git a/nftmanageserver/src/main/java/zhuluo/learning/nftmanageserver/report/mapper/ReportMapper.java b/nftmanageserver/src/main/java/zhuluo/learning/nftmanageserver/report/mapper/ReportMapper.java
new file mode 100644
index 0000000000000000000000000000000000000000..295022ede87d511f17c2c1456df4c2373ec43952
--- /dev/null
+++ b/nftmanageserver/src/main/java/zhuluo/learning/nftmanageserver/report/mapper/ReportMapper.java
@@ -0,0 +1,23 @@
+package zhuluo.learning.nftmanageserver.report.mapper;
+
+import org.apache.ibatis.annotations.Delete;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Select;
+import org.springframework.stereotype.Repository;
+import zhuluo.learning.nftmanageserver.report.pojo.Report;
+
+import java.util.List;
+
+@Mapper
+@Repository
+public interface ReportMapper {
+ final String selectAll = "SELECT * FROM report";
+ final String deleteOne = "DELETE FROM report WHERE reportId = #{id}";
+ final String selectOne = "SELECT * FROM report WHERE reportId = #{id}";
+ @Select(selectAll)
+ public List selectAll();
+ @Delete(deleteOne)
+ public int deleteOne(int id);
+ @Select(selectOne)
+ public Report selectOne(int id);
+}
diff --git a/nftmanageserver/src/main/java/zhuluo/learning/nftmanageserver/report/pojo/Report.java b/nftmanageserver/src/main/java/zhuluo/learning/nftmanageserver/report/pojo/Report.java
new file mode 100644
index 0000000000000000000000000000000000000000..7ea7f2f616b951fdb782bdab20931c38676afe11
--- /dev/null
+++ b/nftmanageserver/src/main/java/zhuluo/learning/nftmanageserver/report/pojo/Report.java
@@ -0,0 +1,92 @@
+package zhuluo.learning.nftmanageserver.report.pojo;
+
+import zhuluo.learning.nftmanageserver.login.pojo.User;
+
+public class Report {
+ private int reportId;
+ private int accuserId;
+ private int informantId;
+ private String reportMessage;
+ private String reportType;
+ private String reportTime;
+ private User accuser;
+ private User informant;
+
+ @Override
+ public String toString() {
+ return "Report{" +
+ "reportId=" + reportId +
+ ", accuserId=" + accuserId +
+ ", informantId=" + informantId +
+ ", reportMessage='" + reportMessage + '\'' +
+ ", reportType='" + reportType + '\'' +
+ ", reportTime='" + reportTime + '\'' +
+ ", accuser=" + accuser +
+ ", informant=" + informant +
+ '}';
+ }
+
+ public int getReportId() {
+ return reportId;
+ }
+
+ public void setReportId(int reportId) {
+ this.reportId = reportId;
+ }
+
+ public int getAccuserId() {
+ return accuserId;
+ }
+
+ public void setAccuserId(int accuserId) {
+ this.accuserId = accuserId;
+ }
+
+ public int getInformantId() {
+ return informantId;
+ }
+
+ public void setInformantId(int informantId) {
+ this.informantId = informantId;
+ }
+
+ public String getReportMessage() {
+ return reportMessage;
+ }
+
+ public void setReportMessage(String reportMessage) {
+ this.reportMessage = reportMessage;
+ }
+
+ public String getReportType() {
+ return reportType;
+ }
+
+ public void setReportType(String reportType) {
+ this.reportType = reportType;
+ }
+
+ public String getReportTime() {
+ return reportTime;
+ }
+
+ public void setReportTime(String reportTime) {
+ this.reportTime = reportTime;
+ }
+
+ public User getAccuser() {
+ return accuser;
+ }
+
+ public void setAccuser(User accuser) {
+ this.accuser = accuser;
+ }
+
+ public User getInformant() {
+ return informant;
+ }
+
+ public void setInformant(User informant) {
+ this.informant = informant;
+ }
+}
diff --git a/nftmanageserver/src/main/java/zhuluo/learning/nftmanageserver/report/service/ReportService.java b/nftmanageserver/src/main/java/zhuluo/learning/nftmanageserver/report/service/ReportService.java
new file mode 100644
index 0000000000000000000000000000000000000000..db9949e372887acb1fa1ef9bf5a3850a01dd3711
--- /dev/null
+++ b/nftmanageserver/src/main/java/zhuluo/learning/nftmanageserver/report/service/ReportService.java
@@ -0,0 +1,25 @@
+package zhuluo.learning.nftmanageserver.report.service;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import zhuluo.learning.nftmanageserver.report.mapper.ReportMapper;
+import zhuluo.learning.nftmanageserver.report.pojo.Report;
+
+import java.util.List;
+
+@Service
+public class ReportService {
+
+ @Autowired
+ private ReportMapper reportMapper;
+
+ public List selectAll(){
+ return reportMapper.selectAll();
+ }
+ public int deleteOne(int id){
+ return reportMapper.deleteOne(id);
+ }
+ public Report selectOne(int id){
+ return reportMapper.selectOne(id);
+ }
+}
diff --git a/nftmanageserver/src/main/java/zhuluo/learning/nftmanageserver/user/controller/UserChangeController.java b/nftmanageserver/src/main/java/zhuluo/learning/nftmanageserver/user/controller/UserChangeController.java
new file mode 100644
index 0000000000000000000000000000000000000000..bae1d2971a57ca71fcc69b79f6287e556bec4013
--- /dev/null
+++ b/nftmanageserver/src/main/java/zhuluo/learning/nftmanageserver/user/controller/UserChangeController.java
@@ -0,0 +1,17 @@
+package zhuluo.learning.nftmanageserver.user.controller;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import zhuluo.learning.nftmanageserver.login.service.UserService;
+
+@RestController
+public class UserChangeController {
+ @Autowired
+ private UserService userService;
+ @RequestMapping("/changeInfo")
+ public int changeInfo(@RequestParam("password") String password,@RequestParam("email") String email,@RequestParam("phoneNum") String phoneNum,@RequestParam("username") String username){
+ return userService.update(password, email, phoneNum, username);
+ }
+}
diff --git a/nftmanageserver/src/main/java/zhuluo/learning/nftmanageserver/user/controller/UserGetController.java b/nftmanageserver/src/main/java/zhuluo/learning/nftmanageserver/user/controller/UserGetController.java
new file mode 100644
index 0000000000000000000000000000000000000000..03c3132ce146d1a2bc66be821da5e1f8f4f5f0b7
--- /dev/null
+++ b/nftmanageserver/src/main/java/zhuluo/learning/nftmanageserver/user/controller/UserGetController.java
@@ -0,0 +1,30 @@
+package zhuluo.learning.nftmanageserver.user.controller;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import zhuluo.learning.nftmanageserver.login.pojo.User;
+import zhuluo.learning.nftmanageserver.login.service.UserService;
+
+import java.util.List;
+
+//添加了RestController即可返回JSON类型的数据
+@RestController
+public class UserGetController {
+ @Autowired
+ private UserService userService;
+
+ //根据用户名精确搜索
+ @RequestMapping("/getByUsername")
+ public User getByUsername(@RequestParam("username")String username){
+ User user = userService.getByUserName(username);
+ return user;
+ }
+
+ //根据用户名模糊搜索
+ @RequestMapping("/searchUser")
+ public List searchBySearchKey(@RequestParam("searchKey")String searchKey){
+ return userService.searchBySearchKey("%"+searchKey+"%");
+ }
+}
diff --git a/nftmanageserver/src/main/java/zhuluo/learning/nftmanageserver/user/controller/UserUpdateActive.java b/nftmanageserver/src/main/java/zhuluo/learning/nftmanageserver/user/controller/UserUpdateActive.java
new file mode 100644
index 0000000000000000000000000000000000000000..0716915b988b21a46a9d1521a49691797b17e7e1
--- /dev/null
+++ b/nftmanageserver/src/main/java/zhuluo/learning/nftmanageserver/user/controller/UserUpdateActive.java
@@ -0,0 +1,25 @@
+package zhuluo.learning.nftmanageserver.user.controller;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import zhuluo.learning.nftmanageserver.login.service.UserService;
+
+@RestController
+public class UserUpdateActive {
+ @Autowired
+ private UserService userService;
+
+ //这是将IsActive字段设为0,冻结账号的方法
+ @RequestMapping("/userUpdateActive")
+ public int updateActive(@RequestParam("id")int id){
+ return userService.updateActive(id);
+ }
+
+ //这是将IsActive字段设为1,激活账号的方法
+ @RequestMapping("/userUpdateIsActive")
+ public int updateIsActive(@RequestParam("id")int id){
+ return userService.updateIsActive(id);
+ }
+}
diff --git a/nftmanageserver/src/main/resources/application.properties b/nftmanageserver/src/main/resources/application.properties
new file mode 100644
index 0000000000000000000000000000000000000000..8b137891791fe96927ad78e64b0aad7bded08bdc
--- /dev/null
+++ b/nftmanageserver/src/main/resources/application.properties
@@ -0,0 +1 @@
+
diff --git a/nftmanageserver/src/main/resources/application.yml b/nftmanageserver/src/main/resources/application.yml
new file mode 100644
index 0000000000000000000000000000000000000000..b1be061a0ee6eb4489dd2ca25d434d5ef8517ddb
--- /dev/null
+++ b/nftmanageserver/src/main/resources/application.yml
@@ -0,0 +1,9 @@
+spring:
+ datasource:
+ username: loho
+ password: 827925
+ url: jdbc:mysql://121.5.151.240:3306/artprtpdb?useSSL=false
+ #url: jdbc:mysql:///artprtpdb?useSSL=false
+ driver‐class‐name: com.mysql.jdbc.Driver
+server:
+ port: 8081
diff --git a/nftmanageserver/src/main/resources/static/test.html b/nftmanageserver/src/main/resources/static/test.html
new file mode 100644
index 0000000000000000000000000000000000000000..c4c71c2398ef81a7f7042f38da20c2fa02b4ba60
--- /dev/null
+++ b/nftmanageserver/src/main/resources/static/test.html
@@ -0,0 +1,14 @@
+
+
+
+
+ Title
+
+
+
+
+
\ No newline at end of file
diff --git a/nftmanageserver/src/test/java/zhuluo/learning/nftmanageserver/NftmanageserverApplicationTests.java b/nftmanageserver/src/test/java/zhuluo/learning/nftmanageserver/NftmanageserverApplicationTests.java
new file mode 100644
index 0000000000000000000000000000000000000000..c41eecdf8f947af8ec0623d8a38cc886a0204948
--- /dev/null
+++ b/nftmanageserver/src/test/java/zhuluo/learning/nftmanageserver/NftmanageserverApplicationTests.java
@@ -0,0 +1,20 @@
+package zhuluo.learning.nftmanageserver;
+
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import zhuluo.learning.nftmanageserver.login.controller.UserController;
+
+@SpringBootTest
+class NftmanageserverApplicationTests {
+
+ @Autowired
+ UserController userController;
+
+
+ @Test
+ void contextLoads() {
+
+ }
+
+}
diff --git a/readme.txt b/readme.txt
new file mode 100644
index 0000000000000000000000000000000000000000..0b0cc791861684a00a23abcbce47aaa8a7efce79
--- /dev/null
+++ b/readme.txt
@@ -0,0 +1,5 @@
+文件夹作用介绍
+1、AIGenerate——项目主体源码
+2、AIGenerate——项目算法和部分后端源码
+3、nftmanageserver——后台管理系统
+4、artprtpdb.sql——数据库文件