functions.py 8.2 KB

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