functions.py 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216
  1. from datetime import datetime
  2. import asyncio
  3. from fuzzywuzzy import process, fuzz
  4. async def generate_response(input_str):
  5. # 定义时间和店铺分类的字典
  6. responses = {
  7. ("2天前", "仓"): {
  8. "洗后泛白#洗后缩水#染色": "洗涤不当引起,修复不了",
  9. "脏污#破损#异味#香水味": "反馈超时",
  10. "起球": "摩擦引起,修复不了",
  11. "勾丝": "人为引起,修复不了",
  12. "勾线#漏针": "退回尝试维修",
  13. "打折#爆口#开线#拉链坏#脱线#散线#针孔": "退回维修",
  14. "扣子磨损#掉扣#掉珠#掉钻": "可以补发",
  15. "领子不对称":"对称熨烫一下即可",
  16. "线头": "修剪一下即可",
  17. "洗后掉色": "深颜色面料洗涤时,掉浮色属正常。",
  18. "模特图与实物图不同": "以实物图为准",
  19. "口袋有异物": "退回分析,需要拦截一下系统",
  20. "钻绒#跑绒": "羽绒缝线或车缝位置会轻微钻绒属正常,因为在缝制过程中有些绒毛就沾在针眼位置经挤压或穿着后经摩擦会跑出来,请知悉!",
  21. "裤子长短#袖子长短": "退回维修",
  22. "下摆前后长短":"工艺设计属正常",
  23. "过敏":"个人皮肤比较敏感",
  24. },
  25. ("2天内", "仓"): {
  26. "洗后泛白#洗后缩水#染色": "退回分析",
  27. "脏污#破损#异味#香水味": "退回分析",
  28. "起球": "衣服在穿着过程中,由于摩擦和压力,会产生起球属正常。",
  29. "勾丝": "退回分析",
  30. "勾线#漏针": "退回分析",
  31. "打折#爆口#开线#拉链坏#脱线#散线#针孔": "退回维修",
  32. "扣子磨损#掉扣#掉珠#掉钻": "可以补发",
  33. "领子不对称":"对称熨烫一下即可",
  34. "线头": "修剪一下即可",
  35. "洗后掉色": "深颜色面料洗涤时,掉浮色属正常。",
  36. "模特图与实物图不同": "以实物图为准",
  37. "口袋有异物": "退回分析,需要拦截一下系统",
  38. "钻绒#跑绒": "羽绒缝线或车缝位置会轻微钻绒属正常,因为在缝制过程中有些绒毛就沾在针眼位置经挤压或穿着后经摩擦会跑出来,请知悉!",
  39. "裤子长短#袖子长短": "退回维修",
  40. "下摆前后长短":"工艺设计属正常",
  41. "过敏":"个人皮肤比较敏感",
  42. },
  43. ("2天前", "门店"): {
  44. "洗后泛白#洗后缩水#染色": "洗涤不当引起,修复不了",
  45. "脏污#破损#异味#香水味": "反馈超时",
  46. "起球": "摩擦引起,修复不了",
  47. "勾丝": "人为引起,修复不了",
  48. "勾线#漏针": "退回尝试维修",
  49. "打折#爆口#开线#拉链坏#脱线#散线#针孔": "退回维修",
  50. "扣子磨损#掉扣#掉珠#掉钻": "可以补发",
  51. "领子不对称":"对称熨烫一下即可",
  52. "线头": "修剪一下即可",
  53. "洗后掉色": "深颜色面料洗涤时,掉浮色属正常。",
  54. "模特图与实物图不同": "以实物图为准",
  55. "口袋有异物": "退回分析,需要拦截一下系统",
  56. "钻绒#跑绒": "羽绒缝线或车缝位置会轻微钻绒属正常,因为在缝制过程中有些绒毛就沾在针眼位置经挤压或穿着后经摩擦会跑出来,请知悉!",
  57. "裤子长短#袖子长短": "退回维修",
  58. "下摆前后长短":"工艺设计属正常",
  59. "过敏":"个人皮肤比较敏感",
  60. },
  61. ("2天内", "门店"): {
  62. "洗后泛白#洗后缩水#染色": "退回分析",
  63. "脏污#破损#异味#香水味": "人为引起",
  64. "起球": "衣服在穿着过程中,由于摩擦和压力,会产生起球属正常。",
  65. "勾丝": "退回分析",
  66. "勾线#漏针": "退回分析",
  67. "打折#爆口#开线#拉链坏#脱线#散线#针孔": "退回维修",
  68. "扣子磨损#掉扣#掉珠#掉钻": "可以补发",
  69. "领子不对称":"对称熨烫一下即可",
  70. "线头": "修剪一下即可",
  71. "洗后掉色": "深颜色面料洗涤时,掉浮色属正常。",
  72. "模特图与实物图不同": "以实物图为准",
  73. "口袋有异物": "退回分析,需要拦截一下系统",
  74. "钻绒#跑绒": "羽绒缝线或车缝位置会轻微钻绒属正常,因为在缝制过程中有些绒毛就沾在针眼位置经挤压或穿着后经摩擦会跑出来,请知悉!",
  75. "裤子长短#袖子长短": "退回维修",
  76. "下摆前后长短":"工艺设计属正常",
  77. "过敏":"个人皮肤比较敏感",
  78. },
  79. }
  80. # 定义需要查找的关键字段
  81. key_fields = {
  82. "购买平台": None,
  83. "订单号": None,
  84. "款号": None,
  85. "发货时间": None,
  86. "签收时间": None,
  87. "发货店铺": None,
  88. "反馈": None
  89. }
  90. try:
  91. # 解析输入字符串
  92. lines = input_str.strip().split('\n')
  93. for line in lines:
  94. line = line.strip()
  95. if not line: # 跳过空行
  96. continue
  97. # 移除所有表情符号和多余的空格
  98. # print(line)
  99. line = ''.join(char for char in line if not (0x1F300 <= ord(char) <= 0x1F9FF))
  100. line = line.strip()
  101. # print(line)
  102. # 检查是否包含任何关键字段
  103. for field in key_fields:
  104. if field in line:
  105. # 尝试用中文冒号分割
  106. if ':' in line:
  107. value = line.split(':', 1)[1].strip()
  108. # 尝试用英文冒号分割
  109. elif ':' in line:
  110. value = line.split(':', 1)[1].strip()
  111. else:
  112. continue
  113. # 如果值包含@,只取@之前的部分
  114. if '@' in value:
  115. value = value.split('@')[0].strip()
  116. key_fields[field] = value
  117. break
  118. # 处理签收时间
  119. sign_time = None
  120. print(key_fields)
  121. if key_fields["签收时间"]:
  122. try:
  123. sign_date = datetime.strptime(key_fields["签收时间"], "%Y-%m-%d %H:%M:%S")
  124. days_diff = (datetime.now() - sign_date).days
  125. if days_diff <= 2:
  126. sign_time = "2天内"
  127. else:
  128. sign_time = "2天前"
  129. except ValueError:
  130. return "日期格式错误,请使用正确的日期格式(YYYY-MM-DD HH:MM:SS)"
  131. # 处理店铺类型
  132. shop_type = None
  133. if key_fields["发货店铺"]:
  134. shop_type = "仓" if "仓" in key_fields["发货店铺"] else "门店"
  135. # 获取反馈内容
  136. feedback = key_fields["反馈"]
  137. # 验证必要信息
  138. if not all([sign_time, shop_type, feedback]):
  139. return "缺少必要信息,请确保包含签收时间、发货店铺和反馈。"
  140. # 查找回复
  141. print(sign_time, shop_type)
  142. response_dict = responses.get((sign_time, shop_type))
  143. if not response_dict:
  144. return "无法处理该类型的响应。"
  145. matching = []
  146. # 查找匹配的反馈关键词
  147. for key, value in response_dict.items():
  148. map_temp = [i for i in key.split('#')]
  149. matching.extend(map_temp)
  150. if any(i in feedback for i in key.split('#')):
  151. return value
  152. top_2 = [x[0] for x in process.extract(feedback, matching, limit=2)] # 取相似性最大的2个
  153. return f"无法识别的反馈内容, 你可以这样提问试试: {top_2}"
  154. except Exception as e:
  155. return f"处理过程中出现错误:{str(e)}"
  156. # 测试代码
  157. if __name__ == "__main__":
  158. # 测试用例1:使用给定格式,包含表情符号
  159. input_str = """👉购买平台:微商城
  160. 👉订单号:4686380000181191
  161. 👉款号:1C8L6E55005WL0073
  162. 👉发货时间:2024-10-30 11:15:52
  163. 👉签收时间:2024-10-31 13:48:40
  164. 👉发货店铺:深圳君尚中航城 @宋丹丹 Stephanie Song-深圳
  165. 👉反馈:口袋有异物 @邹湖英 """
  166. print("测试结果:", asyncio.run(generate_response(input_str)))
  167. # 测试用例2:使用英文冒号,不同表情
  168. input_str2 = """⭐购买平台:微商城
  169. 📦订单号:4686380000181191
  170. 🔍款号:1C8L6E55005WL0073
  171. 📅发货时间:2024-10-30 11:15:52
  172. ⏰签收时间:2024-10-31 13:48:40
  173. 🏢发货店铺:北京仓 @宋丹丹
  174. ✍️反馈:勾了丝了都,行不行 @张三"""
  175. print("\n测试结果2:", asyncio.run(generate_response(input_str)))
  176. # 测试用例3:无表情符号
  177. input_str3 = """购买平台:微商城
  178. 订单号:4686380000181191
  179. 款号:1C8L6E55005WL0073
  180. 发货时间:2024-10-30 11:15:52
  181. 签收时间:2024-10-31 13:48:40
  182. 发货店铺:北京仓
  183. 反馈:起球了,tmd"""
  184. print("\n测试结果3:", asyncio.run(generate_response(input_str)))