From 740abd06a1f0b1f599a0895d7c82fa22e429c22a Mon Sep 17 00:00:00 2001 From: jinye_huang Date: Mon, 28 Jul 2025 20:14:11 +0800 Subject: [PATCH] NENGYONGLE --- api/models/__pycache__/poster.cpython-312.pyc | Bin 5738 -> 5741 bytes api/models/poster.py | 12 +++--- .../__pycache__/poster.cpython-312.pyc | Bin 25406 -> 26354 bytes api/services/poster.py | 38 +++++++++++++++--- 4 files changed, 38 insertions(+), 12 deletions(-) diff --git a/api/models/__pycache__/poster.cpython-312.pyc b/api/models/__pycache__/poster.cpython-312.pyc index d70dcff1305dcdc7bc385591218fa2005b341814..a1f538f1f920b6b5f3fe4e9dc69817fb2fc05cf4 100644 GIT binary patch delta 1073 zcmZ{i%Wo1<6vpQT438O}6H5wWTdj^j1=GeVv>IcIwuVKO7`sDeqSPwMZC$v~8e`+a zmATvQU1(w|i946BTy^t`=)6j!TGeR zuOEEg)8?d8{}J81j)eJSUQQuIcel4EwfyC<1) zTD9;ES|KaED_N1eX-oF_~*n6xn3sM%S|3+ioI;($R|%EjtqTF zKa^wH(7u{xdFLQjbYLE1(}+(4XZX9o@+Fo+Yyjg9`f~g67Rw+~?sYmFEQ`!>00QhR zKzfC4UKK?#-z^50rLbG}W%%T_Yv146Yfc0gHdP0&gq~U4SEpUgrQFS-Y6dt5lmIx( zE&>$*QY-*00E>VETo#0qz^))H16P6bfOiBun`Kw2~?>3alMAh^QEqva5Fh;{32+~_`xE=gj6 ze~RBoB2hPeZU?!Z7&AOlWWZfsNo2N3iY`UWU4^qo`FduGA4>SP0fxcq3TU+c7 z)}uULMFP0#{5F|`9sWJR2L7x%{_M>E*X*G|o>`g@ZSrs`Gtg<0&r7N2;w}C)b)q&( zad??%6gbI-^LP%hkhOThDCuMt)^#(*<8`>XJypnuWzup~Y= zFTH&9;YeRnrj3k9ouD0E5&w$hsCK~C->GjEY?Gv|m=kgg{!p3l$0>THT<|3vqkE)S zzKm+)tJxtte5lxw!*EO9@;!-KI{)Lp(X9lQ; z`{KFqv6f*o;t*C4u+Fe)#ChN%e-o@N_kFG1eU`=p6F3WG1^ViPc6*!UkdFfpU=~1n zv)wsOmgSjlDO6J;ZrM&`>cF+{Z|!vv!GS$Z;Dyw)ipN^s)m+-$9IA@I954^SRaOR; zfh#}|fGAr9RG=bBC5c@{SOTsA3xIb7JX<92&FK38&9%tusSMBS&sSYDVGngf2T%#M zMEagttJqxS-}UnY!72$(8J|W9k^*Vbprr2+tU<8G$72g&>JWMJb;9iK#;S@u%ReU8 zQ&`xr{B8$%A~|Myq{x6xUP)#TNQy2+++BsUM)`gR3)Gz-Q2@9L;0^RuyVcxh_mPkC zxQ+$jmiX;4fe!zgWCMTd!kgm}_Oa1oW;+g+^>p1@Ny_Ut8H}+mE-M3TyG7 I=2I1Vrw%r>%>V!Z diff --git a/api/models/poster.py b/api/models/poster.py index cc19ceb..c955e02 100644 --- a/api/models/poster.py +++ b/api/models/poster.py @@ -16,9 +16,9 @@ class PosterGenerateRequest(BaseModel): templateId: str = Field("vibrant", description="模板ID") imagesBase64: Optional[str] = Field(None, description="图像base64编码") posterContent: Optional[Dict[str, Any]] = Field(None, description="海报内容,如果提供则直接使用此内容") - contentId: Optional[int] = Field(None, description="内容ID,用于AI生成内容") - productId: Optional[int] = Field(None, description="产品ID,用于AI生成内容") - scenicSpotId: Optional[int] = Field(None, description="景区ID,用于AI生成内容") + contentId: Optional[str] = Field(None, description="内容ID,用于AI生成内容") + productId: Optional[str] = Field(None, description="产品ID,用于AI生成内容") + scenicSpotId: Optional[str] = Field(None, description="景区ID,用于AI生成内容") numVariations: int = Field(3, description="要生成的海报变体数量, 默认为3", ge=1, le=5) forceLlmGeneration: bool = Field(False, description="是否强制使用LLM重新生成内容") generatePsd: bool = Field(False, description="是否生成PSD分层文件") @@ -33,9 +33,9 @@ class PosterGenerateRequest(BaseModel): "forceLlmGeneration":False, "generatePsd": True, "psdOutputPath": "custom_poster.psd", - "contentId":1, - "productId":1, - "scenicSpotId":1, + "contentId":"1", + "productId":"1", + "scenicSpotId":"1", "posterContent":{ "title":"天津冒险湾", "slogan":"天津冒险湾,让你体验不一样的冒险之旅" diff --git a/api/services/__pycache__/poster.cpython-312.pyc b/api/services/__pycache__/poster.cpython-312.pyc index 764275fc6701a55ad3214db450eeb983a2fa536c..d966d66f66e2dd6509bacac8cc60d2a41447b776 100644 GIT binary patch delta 2855 zcma)7eN0=|6~FgA8w36Xe;Y71BnBr7ga%0X2!W7>(xj9YQecAc^_&!kVft(u$le>3 zwx*r5twgseoibEtt2JwA7e+OqN&ASjRq3WKb|4E_Y-^>$`o}cUFjZ?OH9Pm&&o-(BUTGps{C}A%M58K34KDk*ocrsqfW6HQY~i`oaQ?UF+*VZ zVg?B?Uc)iFm?>oPP67F|W&h;pHtS6ry zs?i%|8%CT-)W$8HRbIO}X`$QD(uz9HBIwA}A#;|MW3Dl=BEdekIBMU4I^t-~4m3B8 z=Iub8aWsDi>WZW8RCGoIaT;p#^##cYxk6D-V^=3~<$q3n?7NaawB%A225z@tkh1Wk z@^VFSw0H;VjiY;ZpnGE|S*tN%iHqE?(JDA++_`jz^ZqzmmWs~kAY_`x1IZA%1EO?f z>cm0v9a0+QNgqfq6o{5j;Q zJhNUeWX)G!V`GOa8tMMpnowSB4t;MVSp_CCdst<3$yjnEQ;(TT(*z@Tc>Y0|@&qX|_Z3OVJKyAVGtn!rClr&cgsK{E`bS10#BhSI_MBeeg_dU=1I;p#^) z*8rBIk|o)hNlPQO^d}EHX*o8NE*iU_aH8p3rYZcrvY2)rpGV_t7dnp*B0#MWWw9Kk zf4{6HM~J*27WsjeSmbhi7|HAtDw%sn#=BzcDjxk`8UOcMIj*!|bdUkX1a?GjuSi-H^> zq29s3$kRSPbm1uZys3Dyq;@zk*gqVsEBUg+lW;)6F@}>$oL*7 z*={PwZ<6ANUYgueWM$;O-Z?)w*RzE{eP{f)?1H#W)lWP~V_D1Fch$d~SM_|$nm%u} z!1G4wTJOpr7pQ z!5=QZ+4(S=rh(=gWJq7RiRijF@E7Et-QMbS0Qvj$9A2PeFBSiwf?nw{0-F~%PT#<7&5Y8v)VPJ{c(XJ7MAv(8gmki6R<%^P zkhjH3lh)2~S9hefCq5nUhtCDVqrvdlczAR?a&96raA8~W-1@qLeAf4Z-46RlRl|X^ yXNN}4@;{;>Jx9ggUz_X41`CZ&dV^`B!-cajV8cb^_X9qCUpltkLsatghWQV>|Fy6H delta 1856 zcmaKtZA@EL7{|})?d!d5Z);onLR)Bgvk(HMFf0^07!FJ4gwf3*FS6~hXq}+76KC$7 zA53(fGd^IzEF%n4pWQ^zB_Ch<2_a@JM&hI(T zbN=Vv=j3kx06+f*8oxIfSU|3K!mmD&8ozG*o5B5zD_gIeXk({HBn}{W7vPK53OsAC zz$^RybPI}g@d2c7jKrYJo>x%l-IpuSaJV@1wV1#?uL_5gm}16)gnasI~O|T^cm=F2!aFmBOJRS8lKO~ru z2E|-}^y5%w_Y6UBPE!NY4mqlx!)k(VM^yynm9$h|1Ig4pYe_URd5>eXi^+GWDDTn}vaWU|>X`LvO4jRCgs9dV zNm_PwWsJOOv`vGI2JJAPw44R;nMCgHc)sfi&*O@0sHlmbt;Tk%(q z--X-wlj%U$U-Y%@P;-fzCTi|d(@af(nzxAws8ZF`r!@-G)tEam0=?PE6A-F4nI~t{ z_|(Y`sLNhGc>{*#pvtjwU<=Uat>bIQ#=e^@3^sz{m743GErv!mhL5j}P2`3r=@7q# zoEl2EPBZu#x Optional[Dict[str, Any]]: + async def _generate_content_with_llm(self, template_id: str, content_id: Optional[str], + product_id: Optional[str], scenic_spot_id: Optional[str]) -> Optional[Dict[str, Any]]: """使用LLM生成海报内容""" # 获取提示词 - 直接从数据库模板信息中获取 template_info = self._templates.get(template_id, {}) @@ -354,14 +354,40 @@ class PosterService: logger.info(f"成功加载模板 {template_id} 的提示词配置") - # 获取相关数据 + # 获取相关数据 - 将字符串ID转换为整数 data = {} + + def safe_int_convert(id_str: Optional[str]) -> Optional[int]: + """安全将字符串ID转换为整数""" + if not id_str: + return None + try: + # 如果ID包含非数字字符,只提取数字部分或返回None + if id_str.isdigit(): + return int(id_str) + else: + # 对于类似 "generated_note_1753693091224_0" 的ID,提取数字部分 + import re + numbers = re.findall(r'\d+', id_str) + if numbers: + return int(numbers[0]) # 使用第一个数字序列 + return None + except (ValueError, TypeError): + logger.warning(f"无法转换ID为整数: {id_str}") + return None + if content_id: - data['content'] = self.db_service.get_content_by_id(content_id) + content_id_int = safe_int_convert(content_id) + if content_id_int: + data['content'] = self.db_service.get_content_by_id(content_id_int) if product_id: - data['product'] = self.db_service.get_product_by_id(product_id) + product_id_int = safe_int_convert(product_id) + if product_id_int: + data['product'] = self.db_service.get_product_by_id(product_id_int) if scenic_spot_id: - data['scenic_spot'] = self.db_service.get_scenic_spot_by_id(scenic_spot_id) + scenic_spot_id_int = safe_int_convert(scenic_spot_id) + if scenic_spot_id_int: + data['scenic_spot'] = self.db_service.get_scenic_spot_by_id(scenic_spot_id_int) logger.info(f"获取到的数据: content={data.get('content') is not None}, product={data.get('product') is not None}, scenic_spot={data.get('scenic_spot') is not None}")