This commit is contained in:
liqiang
2025-09-19 10:49:07 +08:00
parent 2d36b4357e
commit ab1e0268d1
42 changed files with 2520 additions and 2582 deletions

View File

View File

@@ -0,0 +1,3 @@
from django.contrib import admin
# Register your models here.

View File

@@ -0,0 +1,6 @@
from django.apps import AppConfig
class CodeInfoConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'plugins.code_info'

View File

@@ -0,0 +1 @@
[]

View File

@@ -0,0 +1,49 @@
[ {
"name": "扫码信息",
"icon": "ele-Bell",
"sort": 8,
"is_link": false,
"is_catalog": true,
"web_path": "/releaseInfo",
"component": "",
"component_name": "",
"status": true,
"cache": true,
"visible": true,
"parent": null,
"children": [
{
"name": "扫码数据",
"icon": "ele-Bell",
"sort": 1,
"is_link": false,
"is_catalog": false,
"web_path": "/scanData",
"component": "plugins/scanInfo/src/scanData/index",
"component_name": "scanData",
"status": true,
"cache": false,
"visible": true,
"children": [],
"menu_button": [],
"menu_field": []
},{
"name": "异常扫码记录",
"icon": "ele-Bell",
"sort": 2,
"is_link": false,
"is_catalog": false,
"web_path": "/scanRecord",
"component": "plugins/scanInfo/src/scanRecord/index",
"component_name": "scanRecord",
"status": true,
"cache": false,
"visible": true,
"children": [],
"menu_button": [],
"menu_field": []
}
],
"menu_button": [],
"menu_field": []
}]

View File

@@ -0,0 +1,33 @@
# 初始化
import os
import django
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "application.settings")
django.setup()
from dvadmin.system.fixtures.initSerializer import MenuInitSerializer, SystemConfigInitSerializer, \
DictionaryInitSerializer
from dvadmin.utils.core_initialize import CoreInitialize
class Initialize(CoreInitialize):
def init_menu(self):
"""
初始化菜单信息
"""
self.init_base(MenuInitSerializer, unique_fields=['name', 'web_path', 'component', 'component_name'])
def init_dictionary(self):
"""
初始化字典表
"""
self.init_base(DictionaryInitSerializer, unique_fields=['value', 'parent', ])
def run(self):
self.init_menu()
self.init_dictionary()
print(22)
if __name__ == '__main__':
Initialize(app='release_info').run()

View File

@@ -0,0 +1,29 @@
from django.db import models
from django.db import models
from dvadmin.utils.models import CoreModel
table_prefix = "release_info_"
class ScanData(CoreModel):
# 产品件号、供应商代码、生产批次、产品序列码、版本号、扫码时间、班次和人员信息
code = models.CharField(null=True, blank=True, max_length=255, verbose_name='扫码值', help_text='扫码值')
product_code = models.CharField(null=True, blank=True, max_length=255, verbose_name='产品件号', help_text='产品件号')
supplier_code = models.CharField(null=True, blank=True, max_length=255, verbose_name='供应商代码', help_text='供应商代码')
production_batch = models.CharField(null=True, blank=True, max_length=255, verbose_name='生产批次', help_text='生产批次')
product_serial_number = models.CharField(null=True, blank=True, max_length=255, verbose_name='产品序列码', help_text='产品序列码')
version_number = models.CharField(null=True, blank=True, max_length=255, verbose_name='版本号', help_text='版本号')
shift = models.CharField(null=True, blank=True, max_length=255, verbose_name='班次', help_text='班次')
STATUS_EMU = (
(0, "重复扫码"),
(1, "正常"),
(2, "未识别码"),
)
status = models.IntegerField(default=1, choices=STATUS_EMU, verbose_name='状态', help_text='状态')
class Meta:
db_table = table_prefix + "scan_data"
verbose_name = "扫码数据"
verbose_name_plural = verbose_name
ordering = ('-create_datetime',)

View File

@@ -0,0 +1,22 @@
from application import settings
# ================================================= #
# ***************** 插件配置区开始 *******************
# ================================================= #
# 路由配置
plugins_url_patterns = [
{"re_path": r'api/code_info/', "include": "code_info.urls"},
]
# app 配置
apps = ['code_info']
# 租户模式中public模式共享app配置
tenant_shared_apps = ['code_info']
# ================================================= #
# ******************* 插件配置区结束 *****************
# ================================================= #
# ********** 赋值到 settings 中 **********
settings.INSTALLED_APPS += [app for app in apps if app not in settings.INSTALLED_APPS]
settings.TENANT_SHARED_APPS += tenant_shared_apps
# ********** 注册路由 **********
settings.PLUGINS_URL_PATTERNS += plugins_url_patterns

View File

@@ -0,0 +1,15 @@
from django.urls import path
from rest_framework import routers
from plugins.code_info.views.scan_data import ScanDataViewSet
from plugins.code_info.views.scan_record import ScanRecordViewSet
route_url = routers.SimpleRouter()
route_url.register(r'scan_data', ScanDataViewSet,basename='scan_data')
route_url.register(r'scan_record', ScanRecordViewSet)
urlpatterns = [
]
urlpatterns += route_url.urls

View File

@@ -0,0 +1,67 @@
from dvadmin.utils.field_permission import FieldPermissionMixin
from dvadmin.utils.serializers import CustomModelSerializer
from dvadmin.utils.validator import CustomValidationError
from dvadmin.utils.viewset import CustomModelViewSet
from plugins.code_info.models import ScanData
class ScanDataSerializer(CustomModelSerializer):
"""
扫码数据-序列化器
"""
class Meta:
model = ScanData
fields = "__all__"
read_only_fields = ["id"]
class CreateScanDataSerializer(CustomModelSerializer):
"""
扫码数据-序列化器
"""
def create(self, validated_data):
code = validated_data.get("code")
print(code)
code_list = code.split("/")
if len(code_list) == 5:
validated_data["product_code"] = code_list[0]
validated_data["supplier_code"] = code_list[1]
validated_data["production_batch"] = code_list[2]
validated_data["product_serial_number"] = code_list[3]
validated_data["version_number"] = code_list[4]
validated_data["shift"] = self.request.user.description
instance = super().create(validated_data)
# 1.格式错误
if len(code_list) != 5:
instance.status = 2
instance.save()
raise CustomValidationError("数据格式错误")
# 2.查询数据是否已存在数据库
print("ScanData.objects.filter(code=code, status=1)",ScanData.objects.filter(code=code, status=1))
if ScanData.objects.filter(code=code, status=1).exclude(id=instance.id).exists():
instance.status = 0
instance.save()
raise CustomValidationError("重复扫码")
return instance
class Meta:
model = ScanData
fields = "__all__"
read_only_fields = ["id"]
class ScanDataViewSet(CustomModelViewSet, FieldPermissionMixin):
"""
扫码数据接口
list:查询
create:新增
update:修改
retrieve:单例
destroy:删除
"""
queryset = ScanData.objects.filter(status=1)
serializer_class = ScanDataSerializer
create_serializer_class = CreateScanDataSerializer
extra_filter_class = []

View File

@@ -0,0 +1,29 @@
from dvadmin.utils.field_permission import FieldPermissionMixin
from dvadmin.utils.serializers import CustomModelSerializer
from dvadmin.utils.viewset import CustomModelViewSet
from plugins.code_info.models import ScanData
class ScanRecordSerializer(CustomModelSerializer):
"""
扫码数据-序列化器
"""
class Meta:
model = ScanData
fields = "__all__"
read_only_fields = ["id"]
class ScanRecordViewSet(CustomModelViewSet, FieldPermissionMixin):
"""
异常扫码数据记录接口
list:查询
create:新增
update:修改
retrieve:单例
destroy:删除
"""
queryset = ScanData.objects.exclude(status=1)
serializer_class = ScanRecordSerializer
extra_filter_class = []