
    P1i9                     f    d dl mZ d dlmZ d dlmZ d dlZd dlm	Z	  G d dej                        Zy)    )modelsValidationError)gettext_lazyN)timezonec                   d   e Zd Zd Zg dZg dZg dZ ej                         Z	 ej                  d ed      ej                  dd      Z ej                  ddd	
      Z ej                   ej$                  d      Z ej&                  d      Z ej&                  deg      Z ej&                  deg      Z ej&                  deg      Z ej&                  deg      Z ej&                  deg      Z ej&                  deg      Z ej6                  dd      Z ej6                  dd      Z ej<                  dd      Z ej                  d      Z  ej                  d      Z! ej<                  ddd      Z" ej                  ddd      Z# ej&                  deddd      Z$ ejJ                  dd      Z& ej&                  deddd      Z' ej6                  dddd       Z( ej                  ddd!      Z) ej&                  deddd"      Z* ej6                  ddd#      Z+ ej                  dej                  ddd$d%&      Z, ej                  ddd'      Z- ejJ                  dd(      Z. ejJ                  dd)d*+      Z/d, Z0e1d-        Z2d. Z3d4d0Z4d1 Z5d5d2Z6d3 Z7y/)6liuyaoc                 "    | dvrt        d      y )N)11110000z8This field value must be '0', '000', '1', or '111' only.r   )values    //home/cursorai/projects/iching/liuyao/models.pyvalidateYaozliuyao.validateYao
   s    00!"\]] 1    ))pendingu	   处理中)	completedu	   已完成)erroru   错误))r   u	   待处理)resolvedu	   已解决)	dismissedu	   已忽略))inappropriate_contentu   内容不当)inaccurate_analysisu   分析不准确)offensive_languageu   语言冒犯)technical_erroru   技术错误)otheru   其他z	main.UserUserT)verbose_name	on_deletenullblankz Original user ID before deletion)r    r!   	help_textF)defaulteditable   )
max_length   )r&   
validators)r    r!   )auto_now_add)auto_nowu   六爻AI分析结果)r    r!   r   u   分析时间   u   分析状态)r&   choicesr    r!   r   u   六爻分析已举报)r#   r      u   六爻分析举报类别u   六爻分析举报留言i  )r    r!   r   r&   u   六爻分析举报时间u   分析举报状态u!   六爻分析举报管理员备注resolved_liuyao_reportsu   六爻分析举报处理人)r   r    r!   related_namer   u   六爻分析举报处理时间u'   六爻分析举报解决邮件已发送u   临时用户创建u'   标识此记录是由临时用户创建)r#   r   r"   c                     | j                   S N)questionselfs    r   __str__zliuyao.__str__K   s    }}r   c                 r    | j                   j                  |d      j                  |j                         y )NT)uuiduser_id__isnull)user_id)objectsfilterupdateid)clsuserr7   s      r   updateToUserWithUUIDzliuyao.updateToUserWithUUIDN   s+    d;BB477BSr   c                 8    d| _         | j                  dg       y)z'Mark this LiuYao chart for AI analysis.r   analysis_statusupdate_fieldsN)rB   saver3   s    r   request_analysiszliuyao.request_analysisR   s    (		!2 3	4r   Nc                     || _         |r || _        t        j                         | _        dg}|r|j                  ddg       | j                  |       y)z
        Update the analysis status and result.
        
        Args:
            status (str): The analysis status (pending, completed, error)
            result (dict): Optional analysis result dict to store
        rB   ai_analysisanalysis_timestamprC   N)rB   rH   r   nowrI   extendrE   )r4   statusresultfields_to_updates       r   update_analysis_statuszliuyao.update_analysis_statusW   sT      &%D&.llnD#-.##]4H$IJ		 0	1r   c                 t    | j                   r| j                  dk(  sy| j                  sy| j                  dv ryy)z)Check if LiuYao analysis can be reported.r   FTr   r   )rH   rB   analysis_reportedreport_statusr3   s    r   can_report_analysiszliuyao.can_report_analysisj   sD       T%9%9[%H %% !:: r   c                 $   | j                         sy| j                  r#| j                  dv rd| _        d| _        d| _        d| _        || _        || _        t        j                         | _
        d| _        d| _        | j                  g d       y)z(Report LiuYao analysis as inappropriate.FrQ   NTr   )	rR   report_categoryreport_messagereport_timestamprS   report_resolution_email_sentreport_admin_notesreport_resolved_byreport_resolved_atrC   )rT   rR   rS   rZ   r[   r\   rV   rW   r   rJ   rX   rY   rE   )r4   categoryuser_messagereported_bys       r   report_analysiszliuyao.report_analysis{   s    '') !!d&8&8<U&U&*D#&*D#&*D#!%'* (&,1)		 !
	 	
 r   c                     d| _         d| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _	        d| _
        d| _        | j                  g d       y)z1Reset LiuYao analysis and clear reporting status.NF)rH   rI   rB   rR   rV   rW   rX   rS   rZ   r[   r\   rY   rC   )rH   rI   rB   rR   rV   rW   rX   rS   rZ   r[   r\   rY   rE   r3   s    r   reset_analysiszliuyao.reset_analysis   su    "&#!&#" $!"&"&"&,1)		 !
	 	r   r1   )NN)8__name__
__module____qualname__r   ANALYSIS_STATUS_CHOICESREPORT_STATUS_CHOICESREPORT_CATEGORY_CHOICESr   DateTimeFieldqdate
ForeignKey_SET_NULLr?   IntegerFieldori_user	UUIDFieldr7   uuid4	CharFieldr2   y1y2y3y4y5y6	TextFieldreadingfeedback	JSONFielddata
created_atlast_modified_atrH   rI   rB   BooleanFieldrR   rV   rW   rX   rS   rZ   r[   r\   rY   created_by_temp_userr5   classmethodr@   rF   rO   rT   r`   rb    r   r   r	   r	   	   s.   ^ !F  "E6[qyFOObfnrsD"v""DDfgH6DJJ?Dv3/H			QK=	AB			QK=	AB			QK=	AB			QK=	AB			QK=	AB			QK=	ABfDt4GvT5H6D1D%%%48J+v++T: #&""DG]^K---4tR`a&f&&">U\`hl  |J  KO ,++EH_`&f&&">U\`hl  |V  WO%V%%4tJdquvN+v++TPjk$F$$<QX\dh  xL  MM)))t4Nqr***;&//X\dh  xQ  `}  ~---4tRrs#66#6#6uS|#}  /6..); T T5
2&"0r   r	   )	django.dbr   django.core.exceptionsr   django.utils.translationr   rl   r7   django.utilsr   Modelr	   r   r   r   <module>r      s&     2 6  !^V\\ ^r   