81 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			81 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Python
		
	
	
	
from apps.wpm.models import Mlog, BatchSt, Handover
 | 
						|
from apps.mtm.models import Mgroup
 | 
						|
from apps.system.models import Dept
 | 
						|
from apps.inm.models import MIOItem
 | 
						|
from apps.qm.models import FtestWork
 | 
						|
from datetime import datetime
 | 
						|
from django.conf import settings
 | 
						|
import json
 | 
						|
from apps.utils.tools import MyJSONEncoder
 | 
						|
import decimal
 | 
						|
from apps.utils.thread import MyThread
 | 
						|
import logging
 | 
						|
import time
 | 
						|
from zoneinfo import ZoneInfo
 | 
						|
import importlib
 | 
						|
 | 
						|
myLogger = logging.getLogger('log')
 | 
						|
tz_shanghai = ZoneInfo("Asia/Shanghai")
 | 
						|
 | 
						|
# 批次统计分析
 | 
						|
 | 
						|
def ana_batch_thread(xbatchs: list, mgroup=None):
 | 
						|
    MyThread(target=ana_batch, args=(xbatchs, mgroup)).start()
 | 
						|
 | 
						|
def ana_wpr_thread(wprIds: list, mgroup):
 | 
						|
    MyThread(target=ana_wpr, args=(wprIds, mgroup)).start()
 | 
						|
 | 
						|
def ana_batch(xbatchs: list, mgroup):
 | 
						|
    """
 | 
						|
    批次统计分析
 | 
						|
    """
 | 
						|
    time.sleep(10)
 | 
						|
    xbatchs = list(set(xbatchs))
 | 
						|
    BASE_PROJECT_CODE = getattr(settings, "BASE_PROJECT_CODE", None)
 | 
						|
    try:
 | 
						|
        m = importlib.import_module(f"apps.wpm.scripts.batch_{BASE_PROJECT_CODE}")
 | 
						|
    except ModuleNotFoundError:
 | 
						|
        # myLogger.error(f"ana_batch {BASE_PROJECT_CODE} not found")
 | 
						|
        return
 | 
						|
    f = getattr(m, "main")
 | 
						|
    for xbatch in xbatchs:
 | 
						|
        f(xbatch, mgroup)
 | 
						|
 | 
						|
def ana_wpr(wprIds: list, mgroup):
 | 
						|
    """
 | 
						|
    单个统计分析
 | 
						|
    """
 | 
						|
    time.sleep(10)
 | 
						|
    wprIds = list(set(wprIds))
 | 
						|
    BASE_PROJECT_CODE = getattr(settings, "BASE_PROJECT_CODE", None)
 | 
						|
    try:
 | 
						|
        m = importlib.import_module(f"apps.wpm.scripts.wpr_{BASE_PROJECT_CODE}")
 | 
						|
    except ModuleNotFoundError:
 | 
						|
        return
 | 
						|
    f = getattr(m, "main")
 | 
						|
    for wprId in wprIds:
 | 
						|
        f(wprId, mgroup)
 | 
						|
 | 
						|
 | 
						|
def get_f_l_date(data):
 | 
						|
    first_date = None
 | 
						|
    last_date = None
 | 
						|
    for k, v in data.items():
 | 
						|
        if k.endswith("_日期"):
 | 
						|
            if v:
 | 
						|
                if isinstance(v, list):
 | 
						|
                    myLogger.error(f"get_f_l_date {k} {v}")
 | 
						|
                v = v.split(";")
 | 
						|
                if first_date is None:
 | 
						|
                    first_date = min(v)
 | 
						|
                else:
 | 
						|
                    first_date = min(first_date, min(v))
 | 
						|
                if last_date is None:
 | 
						|
                    last_date = max(v)
 | 
						|
                else:
 | 
						|
                    last_date = max(last_date, max(v))
 | 
						|
    return {"first_date": first_date, 
 | 
						|
            "last_date": last_date, 
 | 
						|
            "first_time": datetime.strptime(f"{first_date} 00:00:00", "%Y-%m-%d %H:%M:%S").replace(tzinfo=tz_shanghai) if first_date else None, 
 | 
						|
            "last_time": datetime.strptime(f"{last_date} 23:59:59", "%Y-%m-%d %H:%M:%S").replace(tzinfo=tz_shanghai) if last_date else None}
 |