Merge branch 'master' of http://gitea.xxhhcty.xyz:8080/zcdsj/factory
This commit is contained in:
commit
95037d2f49
|
|
@ -74,4 +74,4 @@ def clean_timescaledb_job_his(num: int = 30):
|
|||
RAISE NOTICE 'Table _timescaledb_internal.bgw_job_stat_history not found.';
|
||||
END IF;
|
||||
END$$;
|
||||
""", timeout=300)
|
||||
""", timeout=None)
|
||||
|
|
@ -10,7 +10,8 @@ def execute_raw_sql(sql: str, params=None, timeout=30):
|
|||
params (_type_, optional): 参数列表. Defaults to None.
|
||||
"""
|
||||
with connection.cursor() as cursor:
|
||||
cursor.execute(f"SET statement_timeout TO '{int(timeout*1000)}ms';")
|
||||
if timeout:
|
||||
cursor.execute(f"SET statement_timeout TO '{int(timeout*1000)}ms';")
|
||||
if params:
|
||||
cursor.execute(sql, params=params)
|
||||
else:
|
||||
|
|
|
|||
|
|
@ -9,27 +9,28 @@ def main(wprId, mgroup:Mgroup):
|
|||
data = {}
|
||||
mgroup_name = mgroup.name
|
||||
mlogbw = Mlogbw.objects.filter(wpr=wpr, mlogb__mlog__submit_time__isnull=False).order_by("-update_time").first()
|
||||
data[f"{mgroup_name}_批次号"] = mlogbw.mlogb.batch
|
||||
data[f"{mgroup_name}_日期"] = mlogbw.mlogb.mlog.handle_date.strftime("%Y-%m-%d")
|
||||
ftestitems = FtestItem.objects.filter(ftest__mlogbw_ftest__wpr=wpr,
|
||||
ftest__mlogbw_ftest__mlogb__mlog__mgroup=mgroup,
|
||||
ftest__mlogbw_ftest__mlogb__mlog__submit_time__isnull=False,
|
||||
ftest__mlogbw_ftest__mlogb__mlog__is_fix=False)
|
||||
for ftestitem in ftestitems:
|
||||
data[f"{mgroup_name}_检测项_{ftestitem.testitem.name}"] = ftestitem.test_val_json
|
||||
|
||||
ftestdefects = FtestDefect.objects.filter(ftest__mlogbw_ftest__wpr=wpr,
|
||||
ftest__mlogbw_ftest__mlogb__mlog__mgroup=mgroup,
|
||||
ftest__mlogbw_ftest__mlogb__mlog__submit_time__isnull=False,
|
||||
ftest__mlogbw_ftest__mlogb__mlog__is_fix=False)
|
||||
for ftestdefect in ftestdefects:
|
||||
data[f"{mgroup_name}_缺陷项_{ftestdefect.defect.name}"] = 1 if ftestdefect.has is True else 0
|
||||
|
||||
old_data:dict = wpr.data
|
||||
if old_data:
|
||||
for item in list(old_data.keys()):
|
||||
if f'{mgroup_name}_' in item:
|
||||
del old_data[item]
|
||||
old_data.update(data)
|
||||
wpr.data = old_data
|
||||
wpr.save(update_fields=["data"])
|
||||
if mlogbw:
|
||||
data[f"{mgroup_name}_批次号"] = mlogbw.mlogb.batch
|
||||
data[f"{mgroup_name}_日期"] = mlogbw.mlogb.mlog.handle_date.strftime("%Y-%m-%d")
|
||||
ftestitems = FtestItem.objects.filter(ftest__mlogbw_ftest__wpr=wpr,
|
||||
ftest__mlogbw_ftest__mlogb__mlog__mgroup=mgroup,
|
||||
ftest__mlogbw_ftest__mlogb__mlog__submit_time__isnull=False,
|
||||
ftest__mlogbw_ftest__mlogb__mlog__is_fix=False)
|
||||
for ftestitem in ftestitems:
|
||||
data[f"{mgroup_name}_检测项_{ftestitem.testitem.name}"] = ftestitem.test_val_json
|
||||
|
||||
ftestdefects = FtestDefect.objects.filter(ftest__mlogbw_ftest__wpr=wpr,
|
||||
ftest__mlogbw_ftest__mlogb__mlog__mgroup=mgroup,
|
||||
ftest__mlogbw_ftest__mlogb__mlog__submit_time__isnull=False,
|
||||
ftest__mlogbw_ftest__mlogb__mlog__is_fix=False)
|
||||
for ftestdefect in ftestdefects:
|
||||
data[f"{mgroup_name}_缺陷项_{ftestdefect.defect.name}"] = 1 if ftestdefect.has is True else 0
|
||||
|
||||
old_data:dict = wpr.data
|
||||
if old_data:
|
||||
for item in list(old_data.keys()):
|
||||
if f'{mgroup_name}_' in item:
|
||||
del old_data[item]
|
||||
old_data.update(data)
|
||||
wpr.data = old_data
|
||||
wpr.save(update_fields=["data"])
|
||||
|
|
@ -28,6 +28,11 @@ from apps.utils.lock import lock_model_record_d_func
|
|||
|
||||
myLogger = logging.getLogger('log')
|
||||
|
||||
def check_wpr_number(number: str):
|
||||
return (len(number) >= 5 and
|
||||
number[-4:].isdigit() and
|
||||
not any(char.islower() for char in number))
|
||||
|
||||
def generate_new_batch(old_batch: str, mlog: Mlog):
|
||||
new_batch = old_batch
|
||||
supplier = mlog.supplier
|
||||
|
|
@ -372,6 +377,8 @@ def mlog_submit(mlog: Mlog, user: User, now: Union[datetime.datetime, None]):
|
|||
if item.wpr:
|
||||
Wpr.change_or_new(wpr=item.wpr, wm=wm, ftest=item.ftest)
|
||||
else:
|
||||
if not check_wpr_number(item.number):
|
||||
raise ParseError(f'{item.number} 该编号格式有误')
|
||||
wpr_from = None
|
||||
if item.mlogbw_from:
|
||||
wpr_from = item.mlogbw_from.wpr
|
||||
|
|
|
|||
|
|
@ -65,6 +65,7 @@ from django.db.models import Prefetch
|
|||
from drf_yasg.utils import swagger_auto_schema
|
||||
from drf_yasg import openapi
|
||||
from django.db import connection
|
||||
from django.db.models.functions import Substr, Length
|
||||
|
||||
|
||||
# Create your views here.
|
||||
|
|
@ -948,6 +949,10 @@ class MlogbInViewSet(BulkCreateModelMixin, BulkUpdateModelMixin, BulkDestroyMode
|
|||
c_year2 = str(c_year)[-2:]
|
||||
c_month = handle_date.month
|
||||
m_model = material_out.model
|
||||
if m_model is None:
|
||||
raise ParseError("生成编号出错:产品型号不能为空")
|
||||
elif m_model and m_model.islower():
|
||||
raise ParseError("生成编号出错:产品型号不能为小写")
|
||||
# 按生产日志查询
|
||||
wpr = (
|
||||
Wpr.objects.filter(
|
||||
|
|
@ -958,7 +963,8 @@ class MlogbInViewSet(BulkCreateModelMixin, BulkUpdateModelMixin, BulkDestroyMode
|
|||
wpr_mlogbw__mlogb__mlog__handle_date__year=c_year,
|
||||
wpr_mlogbw__mlogb__mlog__handle_date__month=c_month,
|
||||
)
|
||||
.order_by("number")
|
||||
.annotate(last_four=Substr("number", Length("number")-3))
|
||||
.order_by("last_four")
|
||||
.last()
|
||||
)
|
||||
cq_w = 4
|
||||
|
|
|
|||
|
|
@ -51,3 +51,7 @@ class WproutSerializer(serializers.Serializer):
|
|||
class WproutListSerializer(serializers.Serializer):
|
||||
items = WproutSerializer(many=True)
|
||||
|
||||
|
||||
class WprChangeNumberSerializer(serializers.Serializer):
|
||||
old_number = serializers.CharField(label="原编号")
|
||||
new_number = serializers.CharField(label="新编号")
|
||||
|
|
@ -3,7 +3,7 @@ from apps.utils.viewsets import CustomModelViewSet, CustomGenericViewSet
|
|||
from apps.utils.mixins import CustomListModelMixin, RetrieveModelMixin, ComplexQueryMixin
|
||||
|
||||
from apps.wpmw.models import Wpr, WprDefect
|
||||
from apps.wpmw.serializers import WprSerializer, WprNewSerializer, WprDetailSerializer, WproutListSerializer
|
||||
from apps.wpmw.serializers import WprSerializer, WprNewSerializer, WprDetailSerializer, WproutListSerializer, WprChangeNumberSerializer
|
||||
from rest_framework.response import Response
|
||||
from apps.mtm.models import Material
|
||||
from rest_framework.exceptions import ParseError
|
||||
|
|
@ -41,6 +41,26 @@ class WprViewSet(CustomListModelMixin, RetrieveModelMixin, ComplexQueryMixin, Cu
|
|||
else:
|
||||
qs.exclude(mb=None, wm=None)
|
||||
return qs
|
||||
|
||||
@action(methods=["post"], detail=False, perms_map={"post": "*"}, serializer_class=WprChangeNumberSerializer)
|
||||
@transaction.atomic
|
||||
def change_number(self, request, *args, **kwargs):
|
||||
"""修改编号"""
|
||||
sr = WprChangeNumberSerializer(data=request.data)
|
||||
sr.is_valid(raise_exception=True)
|
||||
vdata = sr.validated_data
|
||||
new_number = vdata["new_number"]
|
||||
old_number = vdata["old_number"]
|
||||
if Wpr.objects.filter(number=new_number).exists():
|
||||
raise ParseError("新编号已存在,不可使用")
|
||||
wpr = Wpr.objects.get(number=old_number)
|
||||
from apps.wpm.models import Mlogbw, Handoverbw
|
||||
from apps.inm.models import MIOItemw
|
||||
Wpr.objects.filter(id=wpr.id).update(number=new_number)
|
||||
Mlogbw.objects.filter(wpr=wpr).update(number=new_number)
|
||||
Handoverbw.objects.filter(wpr=wpr).update(number=new_number)
|
||||
MIOItemw.objects.filter(wpr=wpr).update(number=new_number)
|
||||
return Response()
|
||||
|
||||
@action(methods=["post"], detail=False, perms_map={"post": "*"}, serializer_class=WprNewSerializer)
|
||||
def new_number(self, request, *args, **kwargs):
|
||||
|
|
|
|||
Loading…
Reference in New Issue