first commit
This commit is contained in:
commit
c9b01deca2
|
@ -0,0 +1,162 @@
|
||||||
|
### Python template
|
||||||
|
# Byte-compiled / optimized / DLL files
|
||||||
|
__pycache__/
|
||||||
|
*.py[cod]
|
||||||
|
*$py.class
|
||||||
|
|
||||||
|
# C extensions
|
||||||
|
*.so
|
||||||
|
|
||||||
|
# Distribution / packaging
|
||||||
|
.Python
|
||||||
|
build/
|
||||||
|
develop-eggs/
|
||||||
|
dist/
|
||||||
|
downloads/
|
||||||
|
eggs/
|
||||||
|
.eggs/
|
||||||
|
lib/
|
||||||
|
lib64/
|
||||||
|
parts/
|
||||||
|
sdist/
|
||||||
|
var/
|
||||||
|
wheels/
|
||||||
|
share/python-wheels/
|
||||||
|
*.egg-info/
|
||||||
|
.installed.cfg
|
||||||
|
*.egg
|
||||||
|
MANIFEST
|
||||||
|
|
||||||
|
# PyInstaller
|
||||||
|
# Usually these files are written by a python script from a template
|
||||||
|
# before PyInstaller builds the exe, so as to inject date/other infos into it.
|
||||||
|
*.manifest
|
||||||
|
*.spec
|
||||||
|
|
||||||
|
# Installer logs
|
||||||
|
pip-log.txt
|
||||||
|
pip-delete-this-directory.txt
|
||||||
|
|
||||||
|
# Unit test / coverage reports
|
||||||
|
htmlcov/
|
||||||
|
.tox/
|
||||||
|
.nox/
|
||||||
|
.coverage
|
||||||
|
.coverage.*
|
||||||
|
.cache
|
||||||
|
nosetests.xml
|
||||||
|
coverage.xml
|
||||||
|
*.cover
|
||||||
|
*.py,cover
|
||||||
|
.hypothesis/
|
||||||
|
.pytest_cache/
|
||||||
|
cover/
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
*.mo
|
||||||
|
*.pot
|
||||||
|
|
||||||
|
# Django stuff:
|
||||||
|
*.log
|
||||||
|
local_settings.py
|
||||||
|
db.sqlite3
|
||||||
|
db.sqlite3-journal
|
||||||
|
|
||||||
|
# Flask stuff:
|
||||||
|
instance/
|
||||||
|
.webassets-cache
|
||||||
|
|
||||||
|
# Scrapy stuff:
|
||||||
|
.scrapy
|
||||||
|
|
||||||
|
# Sphinx documentation
|
||||||
|
docs/_build/
|
||||||
|
|
||||||
|
# PyBuilder
|
||||||
|
.pybuilder/
|
||||||
|
target/
|
||||||
|
|
||||||
|
# Jupyter Notebook
|
||||||
|
.ipynb_checkpoints
|
||||||
|
|
||||||
|
# IPython
|
||||||
|
profile_default/
|
||||||
|
ipython_config.py
|
||||||
|
|
||||||
|
# pyenv
|
||||||
|
# For a library or package, you might want to ignore these files since the code is
|
||||||
|
# intended to run in multiple environments; otherwise, check them in:
|
||||||
|
# .python-version
|
||||||
|
|
||||||
|
# pipenv
|
||||||
|
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
|
||||||
|
# However, in case of collaboration, if having platform-specific dependencies or dependencies
|
||||||
|
# having no cross-platform support, pipenv may install dependencies that don't work, or not
|
||||||
|
# install all needed dependencies.
|
||||||
|
#Pipfile.lock
|
||||||
|
|
||||||
|
# poetry
|
||||||
|
# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
|
||||||
|
# This is especially recommended for binary packages to ensure reproducibility, and is more
|
||||||
|
# commonly ignored for libraries.
|
||||||
|
# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
|
||||||
|
#poetry.lock
|
||||||
|
|
||||||
|
# pdm
|
||||||
|
# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
|
||||||
|
#pdm.lock
|
||||||
|
# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
|
||||||
|
# in version control.
|
||||||
|
# https://pdm.fming.dev/#use-with-ide
|
||||||
|
.pdm.toml
|
||||||
|
|
||||||
|
# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
|
||||||
|
__pypackages__/
|
||||||
|
|
||||||
|
# Celery stuff
|
||||||
|
celerybeat-schedule
|
||||||
|
celerybeat.pid
|
||||||
|
|
||||||
|
# SageMath parsed files
|
||||||
|
*.sage.py
|
||||||
|
|
||||||
|
# Environments
|
||||||
|
.env
|
||||||
|
.venv
|
||||||
|
env/
|
||||||
|
venv/
|
||||||
|
ENV/
|
||||||
|
env.bak/
|
||||||
|
venv.bak/
|
||||||
|
|
||||||
|
# Spyder project settings
|
||||||
|
.spyderproject
|
||||||
|
.spyproject
|
||||||
|
|
||||||
|
# Rope project settings
|
||||||
|
.ropeproject
|
||||||
|
|
||||||
|
# mkdocs documentation
|
||||||
|
/site
|
||||||
|
|
||||||
|
# mypy
|
||||||
|
.mypy_cache/
|
||||||
|
.dmypy.json
|
||||||
|
dmypy.json
|
||||||
|
|
||||||
|
# Pyre type checker
|
||||||
|
.pyre/
|
||||||
|
|
||||||
|
# pytype static type analyzer
|
||||||
|
.pytype/
|
||||||
|
|
||||||
|
# Cython debug symbols
|
||||||
|
cython_debug/
|
||||||
|
|
||||||
|
# PyCharm
|
||||||
|
# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
|
||||||
|
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
|
||||||
|
# and can be added to the global gitignore or merged into this file. For a more nuclear
|
||||||
|
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
|
||||||
|
.idea/
|
||||||
|
|
|
@ -0,0 +1,16 @@
|
||||||
|
"""
|
||||||
|
ASGI config for WideRating2024 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/5.0/howto/deployment/asgi/
|
||||||
|
"""
|
||||||
|
|
||||||
|
import os
|
||||||
|
|
||||||
|
from django.core.asgi import get_asgi_application
|
||||||
|
|
||||||
|
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "WideRating2024.settings")
|
||||||
|
|
||||||
|
application = get_asgi_application()
|
|
@ -0,0 +1,125 @@
|
||||||
|
"""
|
||||||
|
Django settings for WideRating2024 project.
|
||||||
|
|
||||||
|
Generated by 'django-admin startproject' using Django 5.0.2.
|
||||||
|
|
||||||
|
For more information on this file, see
|
||||||
|
https://docs.djangoproject.com/en/5.0/topics/settings/
|
||||||
|
|
||||||
|
For the full list of settings and their values, see
|
||||||
|
https://docs.djangoproject.com/en/5.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/5.0/howto/deployment/checklist/
|
||||||
|
|
||||||
|
# SECURITY WARNING: keep the secret key used in production secret!
|
||||||
|
SECRET_KEY = "django-insecure-3yw3as8#vy_^y$hwijoerwvxk9^etsb2&_eyp$vxwh@6#o2dq2"
|
||||||
|
|
||||||
|
# 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",
|
||||||
|
"company_data",
|
||||||
|
]
|
||||||
|
|
||||||
|
MIDDLEWARE = [
|
||||||
|
"django.middleware.security.SecurityMiddleware",
|
||||||
|
"django.contrib.sessions.middleware.SessionMiddleware",
|
||||||
|
"django.middleware.common.CommonMiddleware",
|
||||||
|
"django.middleware.csrf.CsrfViewMiddleware",
|
||||||
|
"django.contrib.auth.middleware.AuthenticationMiddleware",
|
||||||
|
"django.contrib.messages.middleware.MessageMiddleware",
|
||||||
|
"django.middleware.clickjacking.XFrameOptionsMiddleware",
|
||||||
|
]
|
||||||
|
|
||||||
|
ROOT_URLCONF = "WideRating2024.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 = "WideRating2024.wsgi.application"
|
||||||
|
|
||||||
|
|
||||||
|
# Database
|
||||||
|
# https://docs.djangoproject.com/en/5.0/ref/settings/#databases
|
||||||
|
|
||||||
|
DATABASES = {
|
||||||
|
"default": {
|
||||||
|
"ENGINE": "django.db.backends.sqlite3",
|
||||||
|
"NAME": BASE_DIR / "db.sqlite3",
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# Password validation
|
||||||
|
# https://docs.djangoproject.com/en/5.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/5.0/topics/i18n/
|
||||||
|
|
||||||
|
LANGUAGE_CODE = "zh-hans" # 将语言代码更改为中文简体
|
||||||
|
|
||||||
|
TIME_ZONE = "Asia/Shanghai" # 将时区更改为中国上海时区
|
||||||
|
|
||||||
|
USE_I18N = True # 开启国际化支持,以便支持多语言
|
||||||
|
|
||||||
|
USE_TZ = False # 关闭时区支持,因为中国没有夏令时,所以不需要时区转换
|
||||||
|
|
||||||
|
|
||||||
|
# Static files (CSS, JavaScript, Images)
|
||||||
|
# https://docs.djangoproject.com/en/5.0/howto/static-files/
|
||||||
|
|
||||||
|
STATIC_URL = "static/"
|
||||||
|
|
||||||
|
# Default primary key field type
|
||||||
|
# https://docs.djangoproject.com/en/5.0/ref/settings/#default-auto-field
|
||||||
|
|
||||||
|
DEFAULT_AUTO_FIELD = "django.db.models.BigAutoField"
|
|
@ -0,0 +1,22 @@
|
||||||
|
"""
|
||||||
|
URL configuration for WideRating2024 project.
|
||||||
|
|
||||||
|
The `urlpatterns` list routes URLs to views. For more information please see:
|
||||||
|
https://docs.djangoproject.com/en/5.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
|
||||||
|
|
||||||
|
urlpatterns = [
|
||||||
|
path("admin/", admin.site.urls),
|
||||||
|
]
|
|
@ -0,0 +1,16 @@
|
||||||
|
"""
|
||||||
|
WSGI config for WideRating2024 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/5.0/howto/deployment/wsgi/
|
||||||
|
"""
|
||||||
|
|
||||||
|
import os
|
||||||
|
|
||||||
|
from django.core.wsgi import get_wsgi_application
|
||||||
|
|
||||||
|
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "WideRating2024.settings")
|
||||||
|
|
||||||
|
application = get_wsgi_application()
|
|
@ -0,0 +1,60 @@
|
||||||
|
from django.contrib import admin
|
||||||
|
from django.urls import reverse
|
||||||
|
from django.utils.html import format_html
|
||||||
|
|
||||||
|
from company_data.models import CompanyResearchInfo
|
||||||
|
|
||||||
|
|
||||||
|
class CompanyResearchInfoAdmin(admin.ModelAdmin):
|
||||||
|
list_display = ['company_name', 'legal_entity_name', 'shareholder_nature', 'action_buttons']
|
||||||
|
search_fields = ['company_name'] # 根据问卷名称进行搜索
|
||||||
|
list_filter = ['shareholder_nature'] # 添加过滤器
|
||||||
|
|
||||||
|
def action_buttons(self, obj):
|
||||||
|
view_name = 'admin:company_data_companyresearchinfo_change'
|
||||||
|
format_string = '<a class="button" href="{}">编辑</a> ''<a class="button" href="{}">删除</a>'
|
||||||
|
url = reverse(view_name, args=[obj.pk])
|
||||||
|
return format_html(format_string, url, url)
|
||||||
|
action_buttons.short_description = '操作'
|
||||||
|
|
||||||
|
# 编辑页属性
|
||||||
|
fieldsets = (
|
||||||
|
('工商信息', {'fields': (
|
||||||
|
("company_name", "legal_entity_name", "shareholder_nature"),
|
||||||
|
'main_business',
|
||||||
|
)}),
|
||||||
|
('股东及董监高', {'fields': (
|
||||||
|
("senior_management_experience", "has_board", "board_members_count"),
|
||||||
|
("has_supervisory_board", "supervisory_members_count", "annual_support_funds"),
|
||||||
|
)}),
|
||||||
|
('人员信息', {'fields': (
|
||||||
|
("management_staff_count", "functional_staff_count", "sales_staff_count"),
|
||||||
|
("technical_service_staff_count", "bachelors_or_above_count", "below_bachelors_count"),
|
||||||
|
("year_end_total_employees", "annual_resignation_count", "training_participation_count"),
|
||||||
|
("average_weekly_working_days", "average_daily_working_hours", "work_related_casualties")
|
||||||
|
)}),
|
||||||
|
('经营情况', {'fields': (
|
||||||
|
("sales_amount", "returns_amount", "privacy_breach_incidents"),
|
||||||
|
("total_service_times", "valid_customer_complaints", "complaints_resolved", "complaint_response_time"),
|
||||||
|
)}),
|
||||||
|
('经营场所信息', {'fields': (
|
||||||
|
("operating_site_area", "operating_site_location", "operating_site_ownership")
|
||||||
|
)}),
|
||||||
|
('银行账户信息', {'fields': (
|
||||||
|
("rmb_account_bank_name", "rmb_bank_account"),
|
||||||
|
("foreign_currency_bank_name", "foreign_currency_bank_account"),
|
||||||
|
"loan_card_number"
|
||||||
|
)}),
|
||||||
|
('公司制度', {'fields': (
|
||||||
|
("has_quality_management_system", "has_financial_management_system", "has_contract_management_system",
|
||||||
|
"has_hr_management_system"),
|
||||||
|
)}),
|
||||||
|
('补充信息', {'fields': (
|
||||||
|
("social_responsibility_implementation", "business_credit_record"),
|
||||||
|
("customs_credit_record", "bank_credit_record"),
|
||||||
|
("court_credit_record", "production_safety_information")
|
||||||
|
)}),
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
admin.site.register(CompanyResearchInfo, CompanyResearchInfoAdmin)
|
|
@ -0,0 +1,6 @@
|
||||||
|
from django.apps import AppConfig
|
||||||
|
|
||||||
|
|
||||||
|
class CompanyDataConfig(AppConfig):
|
||||||
|
default_auto_field = "django.db.models.BigAutoField"
|
||||||
|
name = "company_data"
|
|
@ -0,0 +1,396 @@
|
||||||
|
# Generated by Django 5.0.2 on 2024-02-21 14:05
|
||||||
|
|
||||||
|
import django.db.models.deletion
|
||||||
|
import shortuuid.main
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
initial = True
|
||||||
|
|
||||||
|
dependencies = []
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.CreateModel(
|
||||||
|
name="CompanyResearchInfo",
|
||||||
|
fields=[
|
||||||
|
(
|
||||||
|
"company_id",
|
||||||
|
models.CharField(
|
||||||
|
default=shortuuid.main.ShortUUID.uuid,
|
||||||
|
editable=False,
|
||||||
|
max_length=22,
|
||||||
|
primary_key=True,
|
||||||
|
serialize=False,
|
||||||
|
verbose_name="企业ID",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
("company_name", models.CharField(max_length=255, verbose_name="企业名称")),
|
||||||
|
(
|
||||||
|
"legal_entity_name",
|
||||||
|
models.CharField(max_length=255, verbose_name="法人名称"),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"shareholder_nature",
|
||||||
|
models.CharField(
|
||||||
|
choices=[
|
||||||
|
("个人", "个人"),
|
||||||
|
("私企", "私企"),
|
||||||
|
("国企", "国企"),
|
||||||
|
("政府", "政府"),
|
||||||
|
],
|
||||||
|
max_length=255,
|
||||||
|
verbose_name="股东性质",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"main_business",
|
||||||
|
models.TextField(max_length=255, verbose_name="主营业务"),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"senior_management_experience",
|
||||||
|
models.FloatField(verbose_name="高管平均从业年限"),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"has_board",
|
||||||
|
models.CharField(
|
||||||
|
choices=[("是", "是"), ("否", "否")],
|
||||||
|
max_length=255,
|
||||||
|
verbose_name="是否设置董事会",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
("board_members_count", models.IntegerField(verbose_name="董事会人数")),
|
||||||
|
(
|
||||||
|
"has_supervisory_board",
|
||||||
|
models.CharField(
|
||||||
|
choices=[("是", "是"), ("否", "否")],
|
||||||
|
max_length=255,
|
||||||
|
verbose_name="是否设置监事会",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
("supervisory_members_count", models.IntegerField(verbose_name="监事人数")),
|
||||||
|
(
|
||||||
|
"annual_support_funds",
|
||||||
|
models.FloatField(verbose_name="年度公司股东或关联方给予公司的资金支持金额"),
|
||||||
|
),
|
||||||
|
("management_staff_count", models.IntegerField(verbose_name="管理人员人数")),
|
||||||
|
("functional_staff_count", models.IntegerField(verbose_name="职能人员人数")),
|
||||||
|
("sales_staff_count", models.IntegerField(verbose_name="销售人员人数")),
|
||||||
|
(
|
||||||
|
"technical_service_staff_count",
|
||||||
|
models.IntegerField(verbose_name="技术服务人员人数"),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"bachelors_or_above_count",
|
||||||
|
models.IntegerField(verbose_name="本科及以上人员人数"),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"below_bachelors_count",
|
||||||
|
models.IntegerField(verbose_name="专科及以下人员人数"),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"year_end_total_employees",
|
||||||
|
models.IntegerField(verbose_name="年末员工总数"),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"annual_resignation_count",
|
||||||
|
models.IntegerField(verbose_name="年度离职人数"),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"training_participation_count",
|
||||||
|
models.IntegerField(verbose_name="年度员工培训总次数"),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"average_weekly_working_days",
|
||||||
|
models.FloatField(verbose_name="员工周均工作天数"),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"average_daily_working_hours",
|
||||||
|
models.FloatField(verbose_name="员工日均工作时长"),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"work_related_casualties",
|
||||||
|
models.IntegerField(verbose_name="年度因公伤亡人次"),
|
||||||
|
),
|
||||||
|
("sales_amount", models.FloatField(verbose_name="销售产品金额")),
|
||||||
|
("returns_amount", models.FloatField(verbose_name="退回产品金额")),
|
||||||
|
(
|
||||||
|
"privacy_breach_incidents",
|
||||||
|
models.CharField(
|
||||||
|
choices=[("是", "是"), ("否", "否")],
|
||||||
|
max_length=8,
|
||||||
|
verbose_name="发生过客户隐私泄露",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
("total_service_times", models.IntegerField(verbose_name="对外服务总次数")),
|
||||||
|
(
|
||||||
|
"valid_customer_complaints",
|
||||||
|
models.IntegerField(verbose_name="客户有效投诉次数"),
|
||||||
|
),
|
||||||
|
("complaints_resolved", models.IntegerField(verbose_name="投诉解决次数")),
|
||||||
|
("complaint_response_time", models.FloatField(verbose_name="投诉响应时间")),
|
||||||
|
(
|
||||||
|
"rmb_account_bank_name",
|
||||||
|
models.CharField(max_length=255, verbose_name="人民币开户银行名称"),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"rmb_bank_account",
|
||||||
|
models.CharField(max_length=255, verbose_name="人民币开户银行账号"),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"foreign_currency_bank_name",
|
||||||
|
models.CharField(max_length=255, verbose_name="外币开户银行名称"),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"foreign_currency_bank_account",
|
||||||
|
models.CharField(max_length=255, verbose_name="外币开户银行账号"),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"loan_card_number",
|
||||||
|
models.CharField(max_length=255, verbose_name="贷款卡编号"),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"operating_site_area",
|
||||||
|
models.FloatField(max_length=255, verbose_name="经营场所建筑面积"),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"operating_site_location",
|
||||||
|
models.CharField(max_length=255, verbose_name="经营场所位置"),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"operating_site_ownership",
|
||||||
|
models.CharField(
|
||||||
|
choices=[("自有", "自有"), ("租赁", "租赁")],
|
||||||
|
max_length=255,
|
||||||
|
verbose_name="经营场所权属关系",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"has_quality_management_system",
|
||||||
|
models.CharField(
|
||||||
|
choices=[("是", "是"), ("否", "否")],
|
||||||
|
max_length=8,
|
||||||
|
verbose_name="拥有质量管理制度",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"has_financial_management_system",
|
||||||
|
models.CharField(
|
||||||
|
choices=[("是", "是"), ("否", "否")],
|
||||||
|
max_length=8,
|
||||||
|
verbose_name="拥有财务管理制度",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"has_contract_management_system",
|
||||||
|
models.CharField(
|
||||||
|
choices=[("是", "是"), ("否", "否")],
|
||||||
|
max_length=8,
|
||||||
|
verbose_name="拥有合同管理制度",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"has_hr_management_system",
|
||||||
|
models.CharField(
|
||||||
|
choices=[("是", "是"), ("否", "否")],
|
||||||
|
max_length=8,
|
||||||
|
verbose_name="拥有人力资源管理制度",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"business_credit_record",
|
||||||
|
models.TextField(max_length=255, verbose_name="工商信用记录"),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"customs_credit_record",
|
||||||
|
models.TextField(max_length=255, verbose_name="海关信用记录"),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"bank_credit_record",
|
||||||
|
models.TextField(max_length=255, verbose_name="银行信用记录"),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"court_credit_record",
|
||||||
|
models.TextField(max_length=255, verbose_name="法院信用记录"),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"production_safety_information",
|
||||||
|
models.TextField(max_length=255, verbose_name="生产安全信息"),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"social_responsibility_implementation",
|
||||||
|
models.TextField(max_length=255, verbose_name="社会责任实施"),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
options={
|
||||||
|
"verbose_name": "企业调研信息",
|
||||||
|
"verbose_name_plural": "企业调研信息",
|
||||||
|
},
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name="CompanyCreditData",
|
||||||
|
fields=[
|
||||||
|
(
|
||||||
|
"company_credit_data_id",
|
||||||
|
models.CharField(
|
||||||
|
default=shortuuid.main.ShortUUID.uuid,
|
||||||
|
editable=False,
|
||||||
|
max_length=22,
|
||||||
|
primary_key=True,
|
||||||
|
serialize=False,
|
||||||
|
verbose_name="企业信用数据ID",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
("company_name", models.CharField(max_length=255, verbose_name="企业名称")),
|
||||||
|
("years_in_operation", models.IntegerField(verbose_name="成立年限")),
|
||||||
|
(
|
||||||
|
"shareholder_changes_last_three_years",
|
||||||
|
models.IntegerField(verbose_name="近三年股东变更次数"),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"negative_public_opinions_ratio",
|
||||||
|
models.FloatField(
|
||||||
|
help_text="与企业相关的最近1000条新闻", verbose_name="企业舆情负面占比"
|
||||||
|
),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"litigation_announcements",
|
||||||
|
models.IntegerField(
|
||||||
|
help_text="被告,类型为合同纠纷或劳动争议", verbose_name="开庭公告"
|
||||||
|
),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"tax_credit_rating",
|
||||||
|
models.CharField(
|
||||||
|
choices=[("A", "A"), ("B", "B"), ("C", "C"), ("D", "D")],
|
||||||
|
default="",
|
||||||
|
max_length=8,
|
||||||
|
verbose_name="纳税信用等级",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"double_random_check_result",
|
||||||
|
models.CharField(max_length=100, verbose_name="双随机抽查结果"),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"abnormal_business_operations",
|
||||||
|
models.IntegerField(verbose_name="经营异常"),
|
||||||
|
),
|
||||||
|
("tax_notice", models.IntegerField(verbose_name="欠税公告")),
|
||||||
|
(
|
||||||
|
"admin_penalty_warnings",
|
||||||
|
models.IntegerField(
|
||||||
|
help_text="最近3年累计的行政处罚的罚款数额", verbose_name="罚款数额"
|
||||||
|
),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"admin_penalty_confiscation",
|
||||||
|
models.IntegerField(
|
||||||
|
help_text="最近3年行政处罚所没收的违法所得", verbose_name="没收违法所得"
|
||||||
|
),
|
||||||
|
),
|
||||||
|
("judgment_debtor", models.IntegerField(verbose_name="被执行人")),
|
||||||
|
(
|
||||||
|
"dishonest_judgment_debtor",
|
||||||
|
models.IntegerField(verbose_name="失信被执行人"),
|
||||||
|
),
|
||||||
|
("tax_violations", models.IntegerField(verbose_name="税收违法")),
|
||||||
|
("serious_violations", models.IntegerField(verbose_name="严重违法")),
|
||||||
|
(
|
||||||
|
"company",
|
||||||
|
models.OneToOneField(
|
||||||
|
on_delete=django.db.models.deletion.CASCADE,
|
||||||
|
related_name="company_credit_data",
|
||||||
|
to="company_data.companyresearchinfo",
|
||||||
|
verbose_name="企业ID",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
options={
|
||||||
|
"verbose_name": "企业信用数据",
|
||||||
|
"verbose_name_plural": "企业信用数据",
|
||||||
|
},
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name="SimpleFinancialReport",
|
||||||
|
fields=[
|
||||||
|
(
|
||||||
|
"financial_report_id",
|
||||||
|
models.CharField(
|
||||||
|
default=shortuuid.main.ShortUUID.uuid,
|
||||||
|
editable=False,
|
||||||
|
max_length=22,
|
||||||
|
primary_key=True,
|
||||||
|
serialize=False,
|
||||||
|
verbose_name="财务报表ID",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
("company_name", models.CharField(max_length=255, verbose_name="企业名称")),
|
||||||
|
("report_date", models.DateField(verbose_name="报告期")),
|
||||||
|
("currency_funds", models.FloatField(verbose_name="货币资金")),
|
||||||
|
("accounts_receivable", models.FloatField(verbose_name="应收账款")),
|
||||||
|
("other_receivables", models.FloatField(verbose_name="其他应收款")),
|
||||||
|
("prepayments", models.FloatField(verbose_name="预付款项")),
|
||||||
|
("inventory", models.FloatField(verbose_name="存货")),
|
||||||
|
("total_current_assets", models.FloatField(verbose_name="流动资产合计")),
|
||||||
|
("total_non_current_assets", models.FloatField(verbose_name="非流动资产合计")),
|
||||||
|
(
|
||||||
|
"original_value_fixed_assets",
|
||||||
|
models.FloatField(verbose_name="固定资产原价"),
|
||||||
|
),
|
||||||
|
("accumulated_depreciation", models.FloatField(verbose_name="累计折旧")),
|
||||||
|
("net_value_fixed_assets", models.FloatField(verbose_name="固定资产净额")),
|
||||||
|
("total_fixed_assets", models.FloatField(verbose_name="固定资产总计")),
|
||||||
|
(
|
||||||
|
"total_intangible_and_other_assets",
|
||||||
|
models.FloatField(verbose_name="无形资产及其他资产合计"),
|
||||||
|
),
|
||||||
|
("total_assets", models.FloatField(verbose_name="资产总计")),
|
||||||
|
("short_term_loans", models.FloatField(verbose_name="短期借款")),
|
||||||
|
("notes_payable", models.FloatField(verbose_name="应付票据")),
|
||||||
|
("accounts_payable", models.FloatField(verbose_name="应付账款")),
|
||||||
|
("advance_payments", models.FloatField(verbose_name="预收账款")),
|
||||||
|
("interest_payable", models.FloatField(verbose_name="应付利息")),
|
||||||
|
("other_payables", models.FloatField(verbose_name="其他应付款")),
|
||||||
|
("total_current_liabilities", models.FloatField(verbose_name="流动负债合计")),
|
||||||
|
("long_term_loans", models.FloatField(verbose_name="长期借款")),
|
||||||
|
("bonds_payable", models.FloatField(verbose_name="应付债券")),
|
||||||
|
(
|
||||||
|
"total_non_current_liabilities",
|
||||||
|
models.FloatField(verbose_name="非流动负债合计"),
|
||||||
|
),
|
||||||
|
("total_liabilities", models.FloatField(verbose_name="负债合计")),
|
||||||
|
("undistributed_profit", models.FloatField(verbose_name="未分配利润")),
|
||||||
|
("total_equity", models.FloatField(verbose_name="所有者权益合计")),
|
||||||
|
("operating_income", models.FloatField(verbose_name="营业收入")),
|
||||||
|
("operating_costs", models.FloatField(verbose_name="营业成本")),
|
||||||
|
("interest_expense", models.FloatField(verbose_name="利息费用")),
|
||||||
|
("net_profit", models.FloatField(verbose_name="净利润")),
|
||||||
|
(
|
||||||
|
"audited",
|
||||||
|
models.CharField(
|
||||||
|
choices=[("是", "是"), ("否", "否")],
|
||||||
|
max_length=8,
|
||||||
|
verbose_name="是否审计",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"accounting_firm",
|
||||||
|
models.CharField(max_length=100, verbose_name="会计事务所"),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"company",
|
||||||
|
models.ForeignKey(
|
||||||
|
on_delete=django.db.models.deletion.CASCADE,
|
||||||
|
related_name="simple_financial_reports",
|
||||||
|
to="company_data.companyresearchinfo",
|
||||||
|
verbose_name="企业ID",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
options={
|
||||||
|
"verbose_name": "简易财务报表",
|
||||||
|
"verbose_name_plural": "简易财务报表",
|
||||||
|
},
|
||||||
|
),
|
||||||
|
]
|
|
@ -0,0 +1,146 @@
|
||||||
|
import shortuuid
|
||||||
|
from django.db import models
|
||||||
|
|
||||||
|
|
||||||
|
# 企业调研信息
|
||||||
|
class CompanyResearchInfo(models.Model):
|
||||||
|
# 选项
|
||||||
|
SHAREHOLDER_NATURE_CHOICES = [('个人', '个人'), ('私企', '私企'), ('国企', '国企'), ('政府', '政府'), ]
|
||||||
|
YES_OR_NO_CHOICES = [('是', '是'), ('否', '否')]
|
||||||
|
OPERATING_SITE_OWNERSHIP_CHOICES = [('自有', '自有'), ('租赁', '租赁')]
|
||||||
|
|
||||||
|
# 企业ID
|
||||||
|
company_id = models.CharField(max_length=22, primary_key=True, default=shortuuid.uuid, editable=False, verbose_name='企业ID')
|
||||||
|
|
||||||
|
# 工商信息
|
||||||
|
company_name = models.CharField(max_length=255, verbose_name='企业名称')
|
||||||
|
legal_entity_name = models.CharField(max_length=255, verbose_name='法人名称')
|
||||||
|
shareholder_nature = models.CharField(max_length=255, choices=SHAREHOLDER_NATURE_CHOICES, verbose_name='股东性质')
|
||||||
|
main_business = models.TextField(max_length=255, verbose_name='主营业务')
|
||||||
|
# 股东及董监高
|
||||||
|
senior_management_experience = models.FloatField(verbose_name='高管平均从业年限')
|
||||||
|
has_board = models.CharField(max_length=255, choices=YES_OR_NO_CHOICES, verbose_name='是否设置董事会')
|
||||||
|
board_members_count = models.IntegerField(verbose_name='董事会人数')
|
||||||
|
has_supervisory_board = models.CharField(max_length=255, choices=YES_OR_NO_CHOICES, verbose_name='是否设置监事会')
|
||||||
|
supervisory_members_count = models.IntegerField(verbose_name='监事人数')
|
||||||
|
annual_support_funds = models.FloatField(verbose_name='年度公司股东或关联方给予公司的资金支持金额')
|
||||||
|
# 人员信息
|
||||||
|
management_staff_count = models.IntegerField(verbose_name='管理人员人数')
|
||||||
|
functional_staff_count = models.IntegerField(verbose_name='职能人员人数')
|
||||||
|
sales_staff_count = models.IntegerField(verbose_name='销售人员人数')
|
||||||
|
technical_service_staff_count = models.IntegerField(verbose_name='技术服务人员人数')
|
||||||
|
bachelors_or_above_count = models.IntegerField(verbose_name='本科及以上人员人数')
|
||||||
|
below_bachelors_count = models.IntegerField(verbose_name='专科及以下人员人数')
|
||||||
|
year_end_total_employees = models.IntegerField(verbose_name='年末员工总数')
|
||||||
|
annual_resignation_count = models.IntegerField(verbose_name='年度离职人数')
|
||||||
|
training_participation_count = models.IntegerField(verbose_name='年度员工培训总次数')
|
||||||
|
average_weekly_working_days = models.FloatField(verbose_name='员工周均工作天数')
|
||||||
|
average_daily_working_hours = models.FloatField(verbose_name='员工日均工作时长')
|
||||||
|
work_related_casualties = models.IntegerField(verbose_name='年度因公伤亡人次')
|
||||||
|
# 经营情况
|
||||||
|
sales_amount = models.FloatField(verbose_name='销售产品金额')
|
||||||
|
returns_amount = models.FloatField(verbose_name='退回产品金额')
|
||||||
|
privacy_breach_incidents = models.CharField(max_length=8, choices=YES_OR_NO_CHOICES, verbose_name='发生过客户隐私泄露')
|
||||||
|
total_service_times = models.IntegerField(verbose_name='对外服务总次数')
|
||||||
|
valid_customer_complaints = models.IntegerField(verbose_name='客户有效投诉次数')
|
||||||
|
complaints_resolved = models.IntegerField(verbose_name='投诉解决次数')
|
||||||
|
complaint_response_time = models.FloatField(verbose_name='投诉响应时间')
|
||||||
|
# 银行账户信息
|
||||||
|
rmb_account_bank_name = models.CharField(max_length=255, verbose_name='人民币开户银行名称')
|
||||||
|
rmb_bank_account = models.CharField(max_length=255, verbose_name='人民币开户银行账号')
|
||||||
|
foreign_currency_bank_name = models.CharField(max_length=255, verbose_name='外币开户银行名称')
|
||||||
|
foreign_currency_bank_account = models.CharField(max_length=255, verbose_name='外币开户银行账号')
|
||||||
|
loan_card_number = models.CharField(max_length=255, verbose_name='贷款卡编号')
|
||||||
|
# 经营场所信息
|
||||||
|
operating_site_area = models.FloatField(max_length=255, verbose_name='经营场所建筑面积')
|
||||||
|
operating_site_location = models.CharField(max_length=255, verbose_name='经营场所位置')
|
||||||
|
operating_site_ownership = models.CharField(max_length=255, choices=OPERATING_SITE_OWNERSHIP_CHOICES, verbose_name='经营场所权属关系')
|
||||||
|
# 公司制度
|
||||||
|
has_quality_management_system = models.CharField(max_length=8, choices=YES_OR_NO_CHOICES, verbose_name='拥有质量管理制度')
|
||||||
|
has_financial_management_system = models.CharField(max_length=8, choices=YES_OR_NO_CHOICES, verbose_name='拥有财务管理制度')
|
||||||
|
has_contract_management_system = models.CharField(max_length=8, choices=YES_OR_NO_CHOICES, verbose_name='拥有合同管理制度')
|
||||||
|
has_hr_management_system = models.CharField(max_length=8, choices=YES_OR_NO_CHOICES, verbose_name='拥有人力资源管理制度')
|
||||||
|
|
||||||
|
# 补充信息
|
||||||
|
business_credit_record = models.TextField(max_length=255, verbose_name='工商信用记录')
|
||||||
|
customs_credit_record = models.TextField(max_length=255, verbose_name='海关信用记录')
|
||||||
|
bank_credit_record = models.TextField(max_length=255, verbose_name='银行信用记录')
|
||||||
|
court_credit_record = models.TextField(max_length=255, verbose_name='法院信用记录')
|
||||||
|
production_safety_information = models.TextField(max_length=255, verbose_name='生产安全信息')
|
||||||
|
social_responsibility_implementation = models.TextField(max_length=255, verbose_name='社会责任实施')
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
verbose_name = "企业调研信息"
|
||||||
|
verbose_name_plural = "企业调研信息"
|
||||||
|
|
||||||
|
|
||||||
|
# 简易财务报表
|
||||||
|
class SimpleFinancialReport(models.Model):
|
||||||
|
financial_report_id = models.CharField(max_length=22, primary_key=True, default=shortuuid.uuid, editable=False, verbose_name='财务报表ID')
|
||||||
|
company = models.ForeignKey(CompanyResearchInfo, on_delete=models.CASCADE, related_name='simple_financial_reports', verbose_name='企业ID')
|
||||||
|
company_name = models.CharField(max_length=255, verbose_name='企业名称')
|
||||||
|
report_date = models.DateField(verbose_name="报告期")
|
||||||
|
currency_funds = models.FloatField(verbose_name="货币资金")
|
||||||
|
accounts_receivable = models.FloatField(verbose_name="应收账款")
|
||||||
|
other_receivables = models.FloatField(verbose_name="其他应收款")
|
||||||
|
prepayments = models.FloatField(verbose_name="预付款项")
|
||||||
|
inventory = models.FloatField(verbose_name="存货")
|
||||||
|
total_current_assets = models.FloatField(verbose_name="流动资产合计")
|
||||||
|
total_non_current_assets = models.FloatField(verbose_name="非流动资产合计")
|
||||||
|
original_value_fixed_assets = models.FloatField(verbose_name="固定资产原价")
|
||||||
|
accumulated_depreciation = models.FloatField(verbose_name="累计折旧")
|
||||||
|
net_value_fixed_assets = models.FloatField(verbose_name="固定资产净额")
|
||||||
|
total_fixed_assets = models.FloatField(verbose_name="固定资产总计")
|
||||||
|
total_intangible_and_other_assets = models.FloatField(verbose_name="无形资产及其他资产合计")
|
||||||
|
total_assets = models.FloatField(verbose_name="资产总计")
|
||||||
|
short_term_loans = models.FloatField(verbose_name="短期借款")
|
||||||
|
notes_payable = models.FloatField(verbose_name="应付票据")
|
||||||
|
accounts_payable = models.FloatField(verbose_name="应付账款")
|
||||||
|
advance_payments = models.FloatField(verbose_name="预收账款")
|
||||||
|
interest_payable = models.FloatField(verbose_name="应付利息")
|
||||||
|
other_payables = models.FloatField(verbose_name="其他应付款")
|
||||||
|
total_current_liabilities = models.FloatField(verbose_name="流动负债合计")
|
||||||
|
long_term_loans = models.FloatField(verbose_name="长期借款")
|
||||||
|
bonds_payable = models.FloatField(verbose_name="应付债券")
|
||||||
|
total_non_current_liabilities = models.FloatField(verbose_name="非流动负债合计")
|
||||||
|
total_liabilities = models.FloatField(verbose_name="负债合计")
|
||||||
|
undistributed_profit = models.FloatField(verbose_name="未分配利润")
|
||||||
|
total_equity = models.FloatField(verbose_name="所有者权益合计")
|
||||||
|
operating_income = models.FloatField(verbose_name="营业收入")
|
||||||
|
operating_costs = models.FloatField(verbose_name="营业成本")
|
||||||
|
interest_expense = models.FloatField(verbose_name="利息费用")
|
||||||
|
net_profit = models.FloatField(verbose_name="净利润")
|
||||||
|
audited = models.CharField(max_length=8, choices=[("是", "是"), ("否", "否")], verbose_name="是否审计")
|
||||||
|
accounting_firm = models.CharField(max_length=100, verbose_name="会计事务所")
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
verbose_name = "简易财务报表"
|
||||||
|
verbose_name_plural = "简易财务报表"
|
||||||
|
|
||||||
|
|
||||||
|
class CompanyCreditData(models.Model):
|
||||||
|
TAX_CREDIT_RATING_CHOICES = [('A', 'A'), ('B', 'B'), ('C', 'C'), ('D', 'D')]
|
||||||
|
|
||||||
|
company_credit_data_id = models.CharField(max_length=22, primary_key=True, default=shortuuid.uuid, editable=False, verbose_name='企业信用数据ID')
|
||||||
|
company = models.OneToOneField(CompanyResearchInfo, on_delete=models.CASCADE, related_name='company_credit_data', verbose_name='企业ID')
|
||||||
|
company_name = models.CharField(max_length=255, verbose_name='企业名称')
|
||||||
|
|
||||||
|
# 企业信用数据
|
||||||
|
years_in_operation = models.IntegerField(verbose_name="成立年限")
|
||||||
|
shareholder_changes_last_three_years = models.IntegerField(verbose_name="近三年股东变更次数")
|
||||||
|
negative_public_opinions_ratio = models.FloatField(verbose_name="企业舆情负面占比", help_text="与企业相关的最近1000条新闻")
|
||||||
|
litigation_announcements = models.IntegerField(verbose_name="开庭公告", help_text='被告,类型为合同纠纷或劳动争议')
|
||||||
|
tax_credit_rating = models.CharField(max_length=8, default="", choices=TAX_CREDIT_RATING_CHOICES, verbose_name="纳税信用等级")
|
||||||
|
double_random_check_result = models.CharField(max_length=100, verbose_name="双随机抽查结果")
|
||||||
|
abnormal_business_operations = models.IntegerField(verbose_name="经营异常")
|
||||||
|
tax_notice = models.IntegerField(verbose_name="欠税公告")
|
||||||
|
admin_penalty_warnings = models.IntegerField(verbose_name="罚款数额", help_text="最近3年累计的行政处罚的罚款数额")
|
||||||
|
admin_penalty_confiscation = models.IntegerField(verbose_name="没收违法所得", help_text="最近3年行政处罚所没收的违法所得")
|
||||||
|
judgment_debtor = models.IntegerField(verbose_name="被执行人")
|
||||||
|
dishonest_judgment_debtor = models.IntegerField(verbose_name="失信被执行人")
|
||||||
|
tax_violations = models.IntegerField(verbose_name="税收违法")
|
||||||
|
serious_violations = models.IntegerField(verbose_name="严重违法")
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
verbose_name = "企业信用数据"
|
||||||
|
verbose_name_plural = "企业信用数据"
|
|
@ -0,0 +1,3 @@
|
||||||
|
from django.test import TestCase
|
||||||
|
|
||||||
|
# Create your tests here.
|
|
@ -0,0 +1,3 @@
|
||||||
|
from django.shortcuts import render
|
||||||
|
|
||||||
|
# Create your views here.
|
|
@ -0,0 +1,22 @@
|
||||||
|
#!/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", "WideRating2024.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()
|
|
@ -0,0 +1,153 @@
|
||||||
|
import os
|
||||||
|
from datetime import datetime
|
||||||
|
|
||||||
|
import django
|
||||||
|
import random
|
||||||
|
import string
|
||||||
|
import shortuuid
|
||||||
|
from faker import Faker
|
||||||
|
|
||||||
|
# 设置 DJANGO_SETTINGS_MODULE 环境变量
|
||||||
|
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "WideRating2024.settings")
|
||||||
|
|
||||||
|
# 初始化 Django 配置
|
||||||
|
django.setup()
|
||||||
|
|
||||||
|
from company_data.models import CompanyResearchInfo, SimpleFinancialReport, CompanyCreditData
|
||||||
|
|
||||||
|
fake = Faker('zh_CN')
|
||||||
|
|
||||||
|
|
||||||
|
def generate_company_research_info():
|
||||||
|
company_research_info = CompanyResearchInfo(
|
||||||
|
company_id=shortuuid.uuid(),
|
||||||
|
company_name=fake.company(),
|
||||||
|
legal_entity_name=fake.name(),
|
||||||
|
shareholder_nature=random.choice(['个人', '私企', '国企', '政府']),
|
||||||
|
main_business=fake.catch_phrase(),
|
||||||
|
senior_management_experience=round(random.uniform(1, 20), 2),
|
||||||
|
has_board=random.choice(['是', '否']),
|
||||||
|
board_members_count=random.randint(1, 10),
|
||||||
|
has_supervisory_board=random.choice(['是', '否']),
|
||||||
|
supervisory_members_count=random.randint(1, 10),
|
||||||
|
annual_support_funds=round(random.uniform(100000, 1000000), 2),
|
||||||
|
management_staff_count=random.randint(10, 100),
|
||||||
|
functional_staff_count=random.randint(10, 100),
|
||||||
|
sales_staff_count=random.randint(10, 100),
|
||||||
|
technical_service_staff_count=random.randint(10, 100),
|
||||||
|
bachelors_or_above_count=random.randint(10, 50),
|
||||||
|
below_bachelors_count=random.randint(10, 50),
|
||||||
|
year_end_total_employees=random.randint(50, 200),
|
||||||
|
annual_resignation_count=random.randint(1, 10),
|
||||||
|
training_participation_count=random.randint(100, 500),
|
||||||
|
average_weekly_working_days=round(random.uniform(4, 7), 2),
|
||||||
|
average_daily_working_hours=round(random.uniform(6, 10), 2),
|
||||||
|
work_related_casualties=random.randint(0, 10),
|
||||||
|
sales_amount=round(random.uniform(100000, 1000000), 2),
|
||||||
|
returns_amount=round(random.uniform(10000, 100000), 2),
|
||||||
|
privacy_breach_incidents=random.choice(['是', '否']),
|
||||||
|
total_service_times=random.randint(100, 500),
|
||||||
|
valid_customer_complaints=random.randint(0, 20),
|
||||||
|
complaints_resolved=random.randint(0, 20),
|
||||||
|
complaint_response_time=round(random.uniform(0.5, 24), 2),
|
||||||
|
rmb_account_bank_name=random.choice(['天朝银行', '天朝商业银行', '天朝建设银行', '天朝农业银行', '天朝邮政储蓄银行']),
|
||||||
|
rmb_bank_account=''.join(random.choices(string.digits, k=16)),
|
||||||
|
foreign_currency_bank_name=random.choice(['鹰酱银行', '龟谷银行', '棒子银行', '小日子银行', '骆驼银行']),
|
||||||
|
foreign_currency_bank_account=''.join(random.choices(string.ascii_uppercase + string.digits, k=18)),
|
||||||
|
loan_card_number=''.join(random.choices(string.ascii_uppercase + string.digits, k=16)),
|
||||||
|
operating_site_area=round(random.uniform(100, 1000), 2),
|
||||||
|
operating_site_location=fake.address(),
|
||||||
|
operating_site_ownership=random.choice(['自有', '租赁']),
|
||||||
|
has_quality_management_system=random.choice(['是', '否']),
|
||||||
|
has_financial_management_system=random.choice(['是', '否']),
|
||||||
|
has_contract_management_system=random.choice(['是', '否']),
|
||||||
|
has_hr_management_system=random.choice(['是', '否']),
|
||||||
|
business_credit_record=fake.paragraph(),
|
||||||
|
customs_credit_record=fake.paragraph(),
|
||||||
|
bank_credit_record=fake.paragraph(),
|
||||||
|
court_credit_record=fake.paragraph(),
|
||||||
|
production_safety_information=fake.paragraph(),
|
||||||
|
social_responsibility_implementation=fake.paragraph(),
|
||||||
|
)
|
||||||
|
company_research_info.save()
|
||||||
|
return company_research_info
|
||||||
|
|
||||||
|
|
||||||
|
def generate_simple_financial_report(company, year):
|
||||||
|
|
||||||
|
simple_financial_report = SimpleFinancialReport(
|
||||||
|
financial_report_id=shortuuid.uuid(),
|
||||||
|
company=company,
|
||||||
|
company_name=company.company_name,
|
||||||
|
report_date=datetime(year, 12, 31),
|
||||||
|
currency_funds=round(random.uniform(10000, 100000), 2),
|
||||||
|
accounts_receivable=round(random.uniform(10000, 100000), 2),
|
||||||
|
other_receivables=round(random.uniform(10000, 100000), 2),
|
||||||
|
prepayments=round(random.uniform(10000, 100000), 2),
|
||||||
|
inventory=round(random.uniform(10000, 100000), 2),
|
||||||
|
total_current_assets=round(random.uniform(100000, 1000000), 2),
|
||||||
|
total_non_current_assets=round(random.uniform(100000, 1000000), 2),
|
||||||
|
original_value_fixed_assets=round(random.uniform(100000, 1000000), 2),
|
||||||
|
accumulated_depreciation=round(random.uniform(10000, 100000), 2),
|
||||||
|
net_value_fixed_assets=round(random.uniform(100000, 1000000), 2),
|
||||||
|
total_fixed_assets=round(random.uniform(100000, 1000000), 2),
|
||||||
|
total_intangible_and_other_assets=round(random.uniform(10000, 100000), 2),
|
||||||
|
total_assets=round(random.uniform(1000000, 10000000), 2),
|
||||||
|
short_term_loans=round(random.uniform(10000, 100000), 2),
|
||||||
|
notes_payable=round(random.uniform(10000, 100000), 2),
|
||||||
|
accounts_payable=round(random.uniform(10000, 100000), 2),
|
||||||
|
advance_payments=round(random.uniform(10000, 100000), 2),
|
||||||
|
interest_payable=round(random.uniform(1000, 10000), 2),
|
||||||
|
other_payables=round(random.uniform(1000, 10000), 2),
|
||||||
|
total_current_liabilities=round(random.uniform(100000, 1000000), 2),
|
||||||
|
long_term_loans=round(random.uniform(10000, 100000), 2),
|
||||||
|
bonds_payable=round(random.uniform(10000, 100000), 2),
|
||||||
|
total_non_current_liabilities=round(random.uniform(100000, 1000000), 2),
|
||||||
|
total_liabilities=round(random.uniform(1000000, 10000000), 2),
|
||||||
|
undistributed_profit=round(random.uniform(10000, 100000), 2),
|
||||||
|
total_equity=round(random.uniform(100000, 1000000), 2),
|
||||||
|
operating_income=round(random.uniform(100000, 1000000), 2),
|
||||||
|
operating_costs=round(random.uniform(10000, 100000), 2),
|
||||||
|
interest_expense=round(random.uniform(1000, 10000), 2),
|
||||||
|
net_profit=round(random.uniform(10000, 100000), 2),
|
||||||
|
audited=random.choice(['是', '否']),
|
||||||
|
accounting_firm=random.choice(['普华永道中天会计师事务所(特殊普通合伙)', '安永华明会计师事务所(特殊普通合伙)', '毕马威华振会计师事务所(特殊普通合伙)', '德勤华永会计师事务所(特殊普通合伙)']),
|
||||||
|
)
|
||||||
|
simple_financial_report.save()
|
||||||
|
|
||||||
|
|
||||||
|
# 创建企业信用数据
|
||||||
|
def generate_company_credit_data(company):
|
||||||
|
company_credit_data = CompanyCreditData(
|
||||||
|
company_credit_data_id=shortuuid.uuid(),
|
||||||
|
company=company,
|
||||||
|
company_name=company.company_name,
|
||||||
|
years_in_operation=random.randint(1, 30),
|
||||||
|
shareholder_changes_last_three_years=random.randint(0, 5),
|
||||||
|
negative_public_opinions_ratio=round(random.uniform(0, 1), 2),
|
||||||
|
litigation_announcements=random.randint(0, 10),
|
||||||
|
tax_credit_rating=random.choice(['A', 'B', 'C', 'D']),
|
||||||
|
double_random_check_result=fake.sentence(),
|
||||||
|
abnormal_business_operations=random.randint(0, 10),
|
||||||
|
tax_notice=random.randint(0, 10),
|
||||||
|
admin_penalty_warnings=random.randint(0, 10),
|
||||||
|
admin_penalty_confiscation=random.randint(0, 10),
|
||||||
|
judgment_debtor=random.randint(0, 10),
|
||||||
|
dishonest_judgment_debtor=random.randint(0, 10),
|
||||||
|
tax_violations=random.randint(0, 10),
|
||||||
|
serious_violations=random.randint(0, 10),
|
||||||
|
)
|
||||||
|
company_credit_data.save()
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
# 生成30条模拟数据
|
||||||
|
for _ in range(30):
|
||||||
|
company = generate_company_research_info()
|
||||||
|
generate_company_credit_data(company)
|
||||||
|
for year in range(2019, 2024):
|
||||||
|
generate_simple_financial_report(company, year)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
|
@ -0,0 +1,3 @@
|
||||||
|
Django==5.0.2
|
||||||
|
shortuuid==1.0.11
|
||||||
|
Faker==23.2.1
|
Loading…
Reference in New Issue