提交 d7256abe authored 作者: 刘擎阳's avatar 刘擎阳

1.增加附件识别

上级 51805629
...@@ -29,3 +29,599 @@ class CommonCommon(models.Model): ...@@ -29,3 +29,599 @@ class CommonCommon(models.Model):
:return: :return:
""" """
return r return r
def init_timezone_data(self, name):
timezone_data = {}
timezone_data['Africa/Abidjan'] = 0
timezone_data['Africa/Accra'] = 0
timezone_data['Africa/Addis_Ababa'] = 3
timezone_data['Africa/Algiers'] = 1
timezone_data['Africa/Asmara'] = 3
timezone_data['Africa/Asmera'] = 3
timezone_data['Africa/Bamako'] = 0
timezone_data['Africa/Bangui'] = 1
timezone_data['Africa/Banjul'] = 0
timezone_data['Africa/Bissau'] = 0
timezone_data['Africa/Blantyre'] = 2
timezone_data['Africa/Brazzaville'] = 1
timezone_data['Africa/Bujumbura'] = 2
timezone_data['Africa/Cairo'] = 2
timezone_data['Africa/Casablanca'] = 1
timezone_data['Africa/Ceuta'] = 2
timezone_data['Africa/Conakry'] = 0
timezone_data['Africa/Dakar'] = 0
timezone_data['Africa/Dar_es_Salaam'] = 3
timezone_data['Africa/Djibouti'] = 3
timezone_data['Africa/Douala'] = 1
timezone_data['Africa/El_Aaiun'] = 1
timezone_data['Africa/Freetown'] = 0
timezone_data['Africa/Gaborone'] = 2
timezone_data['Africa/Harare'] = 2
timezone_data['Africa/Johannesburg'] = 2
timezone_data['Africa/Juba'] = 3
timezone_data['Africa/Kampala'] = 3
timezone_data['Africa/Khartoum'] = 2
timezone_data['Africa/Kigali'] = 2
timezone_data['Africa/Kinshasa'] = 1
timezone_data['Africa/Lagos'] = 1
timezone_data['Africa/Libreville'] = 1
timezone_data['Africa/Lome'] = 0
timezone_data['Africa/Luanda'] = 1
timezone_data['Africa/Lubumbashi'] = 2
timezone_data['Africa/Lusaka'] = 2
timezone_data['Africa/Malabo'] = 1
timezone_data['Africa/Maputo'] = 2
timezone_data['Africa/Maseru'] = 2
timezone_data['Africa/Mbabane'] = 2
timezone_data['Africa/Mogadishu'] = 3
timezone_data['Africa/Monrovia'] = 0
timezone_data['Africa/Nairobi'] = 3
timezone_data['Africa/Ndjamena'] = 1
timezone_data['Africa/Niamey'] = 1
timezone_data['Africa/Nouakchott'] = 0
timezone_data['Africa/Ouagadougou'] = 0
timezone_data['Africa/Porto-Novo'] = 1
timezone_data['Africa/Sao_Tome'] = 0
timezone_data['Africa/Timbuktu'] = 0
timezone_data['Africa/Tripoli'] = 2
timezone_data['Africa/Tunis'] = 1
timezone_data['Africa/Windhoek'] = 2
timezone_data['America/Adak'] = -9
timezone_data['America/Anchorage'] = -8
timezone_data['America/Anguilla'] = -4
timezone_data['America/Antigua'] = -4
timezone_data['America/Araguaina'] = -3
timezone_data['America/Argentina/Buenos_Aires'] = -3
timezone_data['America/Argentina/Catamarca'] = -3
timezone_data['America/Argentina/ComodRivadavia'] = -3
timezone_data['America/Argentina/Cordoba'] = -3
timezone_data['America/Argentina/Jujuy'] = -3
timezone_data['America/Argentina/La_Rioja'] = -3
timezone_data['America/Argentina/Mendoza'] = -3
timezone_data['America/Argentina/Rio_Gallegos'] = -3
timezone_data['America/Argentina/Salta'] = -3
timezone_data['America/Argentina/San_Juan'] = -3
timezone_data['America/Argentina/San_Luis'] = -3
timezone_data['America/Argentina/Tucuman'] = -3
timezone_data['America/Argentina/Ushuaia'] = -3
timezone_data['America/Aruba'] = -4
timezone_data['America/Asuncion'] = -4
timezone_data['America/Atikokan'] = -5
timezone_data['America/Atka'] = -9
timezone_data['America/Bahia'] = -3
timezone_data['America/Bahia_Banderas'] = -5
timezone_data['America/Barbados'] = -4
timezone_data['America/Belem'] = -3
timezone_data['America/Belize'] = -6
timezone_data['America/Blanc-Sablon'] = -4
timezone_data['America/Boa_Vista'] = -4
timezone_data['America/Bogota'] = -5
timezone_data['America/Boise'] = -6
timezone_data['America/Buenos_Aires'] = -3
timezone_data['America/Cambridge_Bay'] = -6
timezone_data['America/Campo_Grande'] = -4
timezone_data['America/Cancun'] = -5
timezone_data['America/Caracas'] = -4
timezone_data['America/Catamarca'] = -3
timezone_data['America/Cayenne'] = -3
timezone_data['America/Cayman'] = -5
timezone_data['America/Chicago'] = -5
timezone_data['America/Chihuahua'] = -6
timezone_data['America/Coral_Harbour'] = -5
timezone_data['America/Cordoba'] = -3
timezone_data['America/Costa_Rica'] = -6
timezone_data['America/Creston'] = -7
timezone_data['America/Cuiaba'] = -4
timezone_data['America/Curacao'] = -4
timezone_data['America/Danmarkshavn'] = 0
timezone_data['America/Dawson'] = -7
timezone_data['America/Dawson_Creek'] = -7
timezone_data['America/Denver'] = -6
timezone_data['America/Detroit'] = -4
timezone_data['America/Dominica'] = -4
timezone_data['America/Edmonton'] = -6
timezone_data['America/Eirunepe'] = -5
timezone_data['America/El_Salvador'] = -6
timezone_data['America/Ensenada'] = -7
timezone_data['America/Fort_Nelson'] = -7
timezone_data['America/Fort_Wayne'] = -4
timezone_data['America/Fortaleza'] = -3
timezone_data['America/Glace_Bay'] = -3
timezone_data['America/Godthab'] = -2
timezone_data['America/Goose_Bay'] = -3
timezone_data['America/Grand_Turk'] = -4
timezone_data['America/Grenada'] = -4
timezone_data['America/Guadeloupe'] = -4
timezone_data['America/Guatemala'] = -6
timezone_data['America/Guayaquil'] = -5
timezone_data['America/Guyana'] = -4
timezone_data['America/Halifax'] = -3
timezone_data['America/Havana'] = -4
timezone_data['America/Hermosillo'] = -7
timezone_data['America/Indiana/Indianapolis'] = -4
timezone_data['America/Indiana/Knox'] = -5
timezone_data['America/Indiana/Marengo'] = -4
timezone_data['America/Indiana/Petersburg'] = -4
timezone_data['America/Indiana/Tell_City'] = -5
timezone_data['America/Indiana/Vevay'] = -4
timezone_data['America/Indiana/Vincennes'] = -4
timezone_data['America/Indiana/Winamac'] = -4
timezone_data['America/Indianapolis'] = -4
timezone_data['America/Inuvik'] = -6
timezone_data['America/Iqaluit'] = -4
timezone_data['America/Jamaica'] = -5
timezone_data['America/Jujuy'] = -3
timezone_data['America/Juneau'] = -8
timezone_data['America/Kentucky/Louisville'] = -4
timezone_data['America/Kentucky/Monticello'] = -4
timezone_data['America/Knox_IN'] = -5
timezone_data['America/Kralendijk'] = -4
timezone_data['America/La_Paz'] = -4
timezone_data['America/Lima'] = -5
timezone_data['America/Los_Angeles'] = -7
timezone_data['America/Louisville'] = -4
timezone_data['America/Lower_Princes'] = -4
timezone_data['America/Maceio'] = -3
timezone_data['America/Managua'] = -6
timezone_data['America/Manaus'] = -4
timezone_data['America/Marigot'] = -4
timezone_data['America/Martinique'] = -4
timezone_data['America/Matamoros'] = -5
timezone_data['America/Mazatlan'] = -6
timezone_data['America/Mendoza'] = -3
timezone_data['America/Menominee'] = -5
timezone_data['America/Merida'] = -5
timezone_data['America/Metlakatla'] = -8
timezone_data['America/Mexico_City'] = -5
timezone_data['America/Miquelon'] = -2
timezone_data['America/Moncton'] = -3
timezone_data['America/Monterrey'] = -5
timezone_data['America/Montevideo'] = -3
timezone_data['America/Montreal'] = -4
timezone_data['America/Montserrat'] = -4
timezone_data['America/Nassau'] = -4
timezone_data['America/New_York'] = -4
timezone_data['America/Nipigon'] = -4
timezone_data['America/Nome'] = -8
timezone_data['America/Noronha'] = -2
timezone_data['America/North_Dakota/Beulah'] = -5
timezone_data['America/North_Dakota/Center'] = -5
timezone_data['America/North_Dakota/New_Salem'] = -5
timezone_data['America/Ojinaga'] = -6
timezone_data['America/Panama'] = -5
timezone_data['America/Pangnirtung'] = -4
timezone_data['America/Paramaribo'] = -3
timezone_data['America/Phoenix'] = -7
timezone_data['America/Port-au-Prince'] = -4
timezone_data['America/Port_of_Spain'] = -4
timezone_data['America/Porto_Acre'] = -5
timezone_data['America/Porto_Velho'] = -4
timezone_data['America/Puerto_Rico'] = -4
timezone_data['America/Punta_Arenas'] = -3
timezone_data['America/Rainy_River'] = -5
timezone_data['America/Rankin_Inlet'] = -5
timezone_data['America/Recife'] = -3
timezone_data['America/Regina'] = -6
timezone_data['America/Resolute'] = -5
timezone_data['America/Rio_Branco'] = -5
timezone_data['America/Rosario'] = -3
timezone_data['America/Santa_Isabel'] = -7
timezone_data['America/Santarem'] = -3
timezone_data['America/Santiago'] = -3
timezone_data['America/Santo_Domingo'] = -4
timezone_data['America/Sao_Paulo'] = -3
timezone_data['America/Scoresbysund'] = 0
timezone_data['America/Shiprock'] = -6
timezone_data['America/Sitka'] = -8
timezone_data['America/St_Barthelemy'] = -4
timezone_data['America/St_Johns'] = -3
timezone_data['America/St_Kitts'] = -4
timezone_data['America/St_Lucia'] = -4
timezone_data['America/St_Thomas'] = -4
timezone_data['America/St_Vincent'] = -4
timezone_data['America/Swift_Current'] = -6
timezone_data['America/Tegucigalpa'] = -6
timezone_data['America/Thule'] = -3
timezone_data['America/Thunder_Bay'] = -4
timezone_data['America/Tijuana'] = -7
timezone_data['America/Toronto'] = -4
timezone_data['America/Tortola'] = -4
timezone_data['America/Vancouver'] = -7
timezone_data['America/Virgin'] = -4
timezone_data['America/Whitehorse'] = -7
timezone_data['America/Winnipeg'] = -5
timezone_data['America/Yakutat'] = -8
timezone_data['America/Yellowknife'] = -6
timezone_data['Antarctica/Casey'] = 8
timezone_data['Antarctica/Davis'] = 7
timezone_data['Antarctica/DumontDUrville'] = 10
timezone_data['Antarctica/Macquarie'] = 11
timezone_data['Antarctica/Mawson'] = 5
timezone_data['Antarctica/McMurdo'] = 12
timezone_data['Antarctica/Palmer'] = -3
timezone_data['Antarctica/Rothera'] = -3
timezone_data['Antarctica/South_Pole'] = 12
timezone_data['Antarctica/Syowa'] = 3
timezone_data['Antarctica/Troll'] = 2
timezone_data['Antarctica/Vostok'] = 6
timezone_data['Arctic/Longyearbyen'] = 2
timezone_data['Asia/Aden'] = 3
timezone_data['Asia/Almaty'] = 6
timezone_data['Asia/Amman'] = 3
timezone_data['Asia/Anadyr'] = 12
timezone_data['Asia/Aqtau'] = 5
timezone_data['Asia/Aqtobe'] = 5
timezone_data['Asia/Ashgabat'] = 5
timezone_data['Asia/Ashkhabad'] = 5
timezone_data['Asia/Atyrau'] = 5
timezone_data['Asia/Baghdad'] = 3
timezone_data['Asia/Bahrain'] = 3
timezone_data['Asia/Baku'] = 4
timezone_data['Asia/Bangkok'] = 7
timezone_data['Asia/Barnaul'] = 7
timezone_data['Asia/Beirut'] = 3
timezone_data['Asia/Bishkek'] = 6
timezone_data['Asia/Brunei'] = 8
timezone_data['Asia/Calcutta'] = 5
timezone_data['Asia/Chita'] = 9
timezone_data['Asia/Choibalsan'] = 8
timezone_data['Asia/Chongqing'] = 8
timezone_data['Asia/Chungking'] = 8
timezone_data['Asia/Colombo'] = 5
timezone_data['Asia/Dacca'] = 6
timezone_data['Asia/Damascus'] = 3
timezone_data['Asia/Dhaka'] = 6
timezone_data['Asia/Dili'] = 9
timezone_data['Asia/Dubai'] = 4
timezone_data['Asia/Dushanbe'] = 5
timezone_data['Asia/Famagusta'] = 3
timezone_data['Asia/Gaza'] = 3
timezone_data['Asia/Harbin'] = 8
timezone_data['Asia/Hebron'] = 3
timezone_data['Asia/Ho_Chi_Minh'] = 7
timezone_data['Asia/Hong_Kong'] = 8
timezone_data['Asia/Hovd'] = 7
timezone_data['Asia/Irkutsk'] = 8
timezone_data['Asia/Istanbul'] = 3
timezone_data['Asia/Jakarta'] = 7
timezone_data['Asia/Jayapura'] = 9
timezone_data['Asia/Jerusalem'] = 3
timezone_data['Asia/Kabul'] = 4
timezone_data['Asia/Kamchatka'] = 12
timezone_data['Asia/Karachi'] = 5
timezone_data['Asia/Kashgar'] = 6
timezone_data['Asia/Kathmandu'] = 5
timezone_data['Asia/Katmandu'] = 5
timezone_data['Asia/Khandyga'] = 9
timezone_data['Asia/Kolkata'] = 5
timezone_data['Asia/Krasnoyarsk'] = 7
timezone_data['Asia/Kuala_Lumpur'] = 8
timezone_data['Asia/Kuching'] = 8
timezone_data['Asia/Kuwait'] = 3
timezone_data['Asia/Macao'] = 8
timezone_data['Asia/Macau'] = 8
timezone_data['Asia/Magadan'] = 11
timezone_data['Asia/Makassar'] = 8
timezone_data['Asia/Manila'] = 8
timezone_data['Asia/Muscat'] = 4
timezone_data['Asia/Nicosia'] = 3
timezone_data['Asia/Novokuznetsk'] = 7
timezone_data['Asia/Novosibirsk'] = 7
timezone_data['Asia/Omsk'] = 6
timezone_data['Asia/Oral'] = 5
timezone_data['Asia/Phnom_Penh'] = 7
timezone_data['Asia/Pontianak'] = 7
timezone_data['Asia/Pyongyang'] = 9
timezone_data['Asia/Qatar'] = 3
timezone_data['Asia/Qostanay'] = 6
timezone_data['Asia/Qyzylorda'] = 5
timezone_data['Asia/Rangoon'] = 6
timezone_data['Asia/Riyadh'] = 3
timezone_data['Asia/Saigon'] = 7
timezone_data['Asia/Sakhalin'] = 11
timezone_data['Asia/Samarkand'] = 5
timezone_data['Asia/Seoul'] = 9
timezone_data['Asia/Shanghai'] = 8
timezone_data['Asia/Singapore'] = 8
timezone_data['Asia/Srednekolymsk'] = 11
timezone_data['Asia/Taipei'] = 8
timezone_data['Asia/Tashkent'] = 5
timezone_data['Asia/Tbilisi'] = 4
timezone_data['Asia/Tehran'] = 4
timezone_data['Asia/Tel_Aviv'] = 3
timezone_data['Asia/Thimbu'] = 6
timezone_data['Asia/Thimphu'] = 6
timezone_data['Asia/Tokyo'] = 9
timezone_data['Asia/Tomsk'] = 7
timezone_data['Asia/Ujung_Pandang'] = 8
timezone_data['Asia/Ulaanbaatar'] = 8
timezone_data['Asia/Ulan_Bator'] = 8
timezone_data['Asia/Urumqi'] = 6
timezone_data['Asia/Ust-Nera'] = 10
timezone_data['Asia/Vientiane'] = 7
timezone_data['Asia/Vladivostok'] = 10
timezone_data['Asia/Yakutsk'] = 9
timezone_data['Asia/Yangon'] = 6
timezone_data['Asia/Yekaterinburg'] = 5
timezone_data['Asia/Yerevan'] = 4
timezone_data['Atlantic/Azores'] = 0
timezone_data['Atlantic/Bermuda'] = -3
timezone_data['Atlantic/Canary'] = 1
timezone_data['Atlantic/Cape_Verde'] = -1
timezone_data['Atlantic/Faeroe'] = 1
timezone_data['Atlantic/Faroe'] = 1
timezone_data['Atlantic/Jan_Mayen'] = 2
timezone_data['Atlantic/Madeira'] = 1
timezone_data['Atlantic/Reykjavik'] = 0
timezone_data['Atlantic/South_Georgia'] = -2
timezone_data['Atlantic/St_Helena'] = 0
timezone_data['Atlantic/Stanley'] = -3
timezone_data['Australia/ACT'] = 10
timezone_data['Australia/Adelaide'] = 9
timezone_data['Australia/Brisbane'] = 10
timezone_data['Australia/Broken_Hill'] = 9
timezone_data['Australia/Canberra'] = 10
timezone_data['Australia/Currie'] = 10
timezone_data['Australia/Darwin'] = 9
timezone_data['Australia/Eucla'] = 8
timezone_data['Australia/Hobart'] = 10
timezone_data['Australia/LHI'] = 10
timezone_data['Australia/Lindeman'] = 10
timezone_data['Australia/Lord_Howe'] = 10
timezone_data['Australia/Melbourne'] = 10
timezone_data['Australia/NSW'] = 10
timezone_data['Australia/North'] = 9
timezone_data['Australia/Perth'] = 8
timezone_data['Australia/Queensland'] = 10
timezone_data['Australia/South'] = 9
timezone_data['Australia/Sydney'] = 10
timezone_data['Australia/Tasmania'] = 10
timezone_data['Australia/Victoria'] = 10
timezone_data['Australia/West'] = 8
timezone_data['Australia/Yancowinna'] = 9
timezone_data['Brazil/Acre'] = -5
timezone_data['Brazil/DeNoronha'] = -2
timezone_data['Brazil/East'] = -3
timezone_data['Brazil/West'] = -4
timezone_data['CET'] = 2
timezone_data['CST6CDT'] = -5
timezone_data['Canada/Atlantic'] = -3
timezone_data['Canada/Central'] = -5
timezone_data['Canada/Eastern'] = -4
timezone_data['Canada/Mountain'] = -6
timezone_data['Canada/Newfoundland'] = -3
timezone_data['Canada/Pacific'] = -7
timezone_data['Canada/Saskatchewan'] = -6
timezone_data['Canada/Yukon'] = -7
timezone_data['Chile/Continental'] = -3
timezone_data['Chile/EasterIsland'] = -5
timezone_data['Cuba'] = -4
timezone_data['EET'] = 3
timezone_data['EST'] = -5
timezone_data['EST5EDT'] = -4
timezone_data['Egypt'] = 2
timezone_data['Eire'] = 1
timezone_data['Europe/Amsterdam'] = 2
timezone_data['Europe/Andorra'] = 2
timezone_data['Europe/Astrakhan'] = 4
timezone_data['Europe/Athens'] = 3
timezone_data['Europe/Belfast'] = 1
timezone_data['Europe/Belgrade'] = 2
timezone_data['Europe/Berlin'] = 2
timezone_data['Europe/Bratislava'] = 2
timezone_data['Europe/Brussels'] = 2
timezone_data['Europe/Bucharest'] = 3
timezone_data['Europe/Budapest'] = 2
timezone_data['Europe/Busingen'] = 2
timezone_data['Europe/Chisinau'] = 3
timezone_data['Europe/Copenhagen'] = 2
timezone_data['Europe/Dublin'] = 1
timezone_data['Europe/Gibraltar'] = 2
timezone_data['Europe/Guernsey'] = 1
timezone_data['Europe/Helsinki'] = 3
timezone_data['Europe/Isle_of_Man'] = 1
timezone_data['Europe/Istanbul'] = 3
timezone_data['Europe/Jersey'] = 1
timezone_data['Europe/Kaliningrad'] = 2
timezone_data['Europe/Kiev'] = 3
timezone_data['Europe/Kirov'] = 3
timezone_data['Europe/Lisbon'] = 1
timezone_data['Europe/Ljubljana'] = 2
timezone_data['Europe/London'] = 1
timezone_data['Europe/Luxembourg'] = 2
timezone_data['Europe/Madrid'] = 2
timezone_data['Europe/Malta'] = 2
timezone_data['Europe/Mariehamn'] = 3
timezone_data['Europe/Minsk'] = 3
timezone_data['Europe/Monaco'] = 2
timezone_data['Europe/Moscow'] = 3
timezone_data['Europe/Nicosia'] = 3
timezone_data['Europe/Oslo'] = 2
timezone_data['Europe/Paris'] = 2
timezone_data['Europe/Podgorica'] = 2
timezone_data['Europe/Prague'] = 2
timezone_data['Europe/Riga'] = 3
timezone_data['Europe/Rome'] = 2
timezone_data['Europe/Samara'] = 4
timezone_data['Europe/San_Marino'] = 2
timezone_data['Europe/Sarajevo'] = 2
timezone_data['Europe/Saratov'] = 4
timezone_data['Europe/Simferopol'] = 3
timezone_data['Europe/Skopje'] = 2
timezone_data['Europe/Sofia'] = 3
timezone_data['Europe/Stockholm'] = 2
timezone_data['Europe/Tallinn'] = 3
timezone_data['Europe/Tirane'] = 2
timezone_data['Europe/Tiraspol'] = 3
timezone_data['Europe/Ulyanovsk'] = 4
timezone_data['Europe/Uzhgorod'] = 3
timezone_data['Europe/Vaduz'] = 2
timezone_data['Europe/Vatican'] = 2
timezone_data['Europe/Vienna'] = 2
timezone_data['Europe/Vilnius'] = 3
timezone_data['Europe/Volgograd'] = 4
timezone_data['Europe/Warsaw'] = 2
timezone_data['Europe/Zagreb'] = 2
timezone_data['Europe/Zaporozhye'] = 3
timezone_data['Europe/Zurich'] = 2
timezone_data['GB'] = 1
timezone_data['GB-Eire'] = 1
timezone_data['GMT'] = 0
timezone_data['GMT+0'] = 0
timezone_data['GMT-0'] = 0
timezone_data['GMT0'] = 0
timezone_data['Greenwich'] = 0
timezone_data['HST'] = -10
timezone_data['Hongkong'] = 8
timezone_data['Iceland'] = 0
timezone_data['Indian/Antananarivo'] = 3
timezone_data['Indian/Chagos'] = 6
timezone_data['Indian/Christmas'] = 7
timezone_data['Indian/Cocos'] = 6
timezone_data['Indian/Comoro'] = 3
timezone_data['Indian/Kerguelen'] = 5
timezone_data['Indian/Mahe'] = 4
timezone_data['Indian/Maldives'] = 5
timezone_data['Indian/Mauritius'] = 4
timezone_data['Indian/Mayotte'] = 3
timezone_data['Indian/Reunion'] = 4
timezone_data['Iran'] = 4
timezone_data['Israel'] = 3
timezone_data['Jamaica'] = -5
timezone_data['Japan'] = 9
timezone_data['Kwajalein'] = 12
timezone_data['Libya'] = 2
timezone_data['MET'] = 2
timezone_data['MST'] = -7
timezone_data['MST7MDT'] = -6
timezone_data['Mexico/BajaNorte'] = -7
timezone_data['Mexico/BajaSur'] = -6
timezone_data['Mexico/General'] = -5
timezone_data['NZ'] = 12
timezone_data['NZ-CHAT'] = 12
timezone_data['Navajo'] = -6
timezone_data['PRC'] = 8
timezone_data['PST8PDT'] = -7
timezone_data['Pacific/Apia'] = 13
timezone_data['Pacific/Auckland'] = 12
timezone_data['Pacific/Bougainville'] = 11
timezone_data['Pacific/Chatham'] = 12
timezone_data['Pacific/Chuuk'] = 10
timezone_data['Pacific/Easter'] = -5
timezone_data['Pacific/Efate'] = 11
timezone_data['Pacific/Enderbury'] = 13
timezone_data['Pacific/Fakaofo'] = 13
timezone_data['Pacific/Fiji'] = 12
timezone_data['Pacific/Funafuti'] = 12
timezone_data['Pacific/Galapagos'] = -6
timezone_data['Pacific/Gambier'] = -9
timezone_data['Pacific/Guadalcanal'] = 11
timezone_data['Pacific/Guam'] = 10
timezone_data['Pacific/Honolulu'] = -10
timezone_data['Pacific/Johnston'] = -10
timezone_data['Pacific/Kiritimati'] = 14
timezone_data['Pacific/Kosrae'] = 11
timezone_data['Pacific/Kwajalein'] = 12
timezone_data['Pacific/Majuro'] = 12
timezone_data['Pacific/Marquesas'] = -10
timezone_data['Pacific/Midway'] = -11
timezone_data['Pacific/Nauru'] = 12
timezone_data['Pacific/Niue'] = -11
timezone_data['Pacific/Norfolk'] = 11
timezone_data['Pacific/Noumea'] = 11
timezone_data['Pacific/Pago_Pago'] = -11
timezone_data['Pacific/Palau'] = 9
timezone_data['Pacific/Pitcairn'] = -8
timezone_data['Pacific/Pohnpei'] = 11
timezone_data['Pacific/Ponape'] = 11
timezone_data['Pacific/Port_Moresby'] = 10
timezone_data['Pacific/Rarotonga'] = -10
timezone_data['Pacific/Saipan'] = 10
timezone_data['Pacific/Samoa'] = -11
timezone_data['Pacific/Tahiti'] = -10
timezone_data['Pacific/Tarawa'] = 12
timezone_data['Pacific/Tongatapu'] = 13
timezone_data['Pacific/Truk'] = 10
timezone_data['Pacific/Wake'] = 12
timezone_data['Pacific/Wallis'] = 12
timezone_data['Pacific/Yap'] = 10
timezone_data['Poland'] = 2
timezone_data['Portugal'] = 1
timezone_data['ROC'] = 8
timezone_data['ROK'] = 9
timezone_data['Singapore'] = 8
timezone_data['Turkey'] = 3
timezone_data['UCT'] = 0
timezone_data['US/Alaska'] = -8
timezone_data['US/Aleutian'] = -9
timezone_data['US/Arizona'] = -7
timezone_data['US/Central'] = -5
timezone_data['US/East-Indiana'] = -4
timezone_data['US/Eastern'] = -4
timezone_data['US/Hawaii'] = -10
timezone_data['US/Indiana-Starke'] = -5
timezone_data['US/Michigan'] = -4
timezone_data['US/Mountain'] = -6
timezone_data['US/Pacific'] = -7
timezone_data['US/Samoa'] = -11
timezone_data['UTC'] = 0
timezone_data['Universal'] = 0
timezone_data['W-SU'] = 3
timezone_data['WET'] = 1
timezone_data['Zulu'] = 0
timezone_data['Etc/GMT'] = 0
timezone_data['Etc/GMT+0'] = 0
timezone_data['Etc/GMT+1'] = -1
timezone_data['Etc/GMT+10'] = -10
timezone_data['Etc/GMT+11'] = -11
timezone_data['Etc/GMT+12'] = -12
timezone_data['Etc/GMT+2'] = -2
timezone_data['Etc/GMT+3'] = -3
timezone_data['Etc/GMT+4'] = -4
timezone_data['Etc/GMT+5'] = -5
timezone_data['Etc/GMT+6'] = -6
timezone_data['Etc/GMT+7'] = -7
timezone_data['Etc/GMT+8'] = -8
timezone_data['Etc/GMT+9'] = -9
timezone_data['Etc/GMT-0'] = 0
timezone_data['Etc/GMT-1'] = 1
timezone_data['Etc/GMT-10'] = 10
timezone_data['Etc/GMT-11'] = 11
timezone_data['Etc/GMT-12'] = 12
timezone_data['Etc/GMT-13'] = 13
timezone_data['Etc/GMT-14'] = 14
timezone_data['Etc/GMT-2'] = 2
timezone_data['Etc/GMT-3'] = 3
timezone_data['Etc/GMT-4'] = 4
timezone_data['Etc/GMT-5'] = 5
timezone_data['Etc/GMT-6'] = 6
timezone_data['Etc/GMT-7'] = 7
timezone_data['Etc/GMT-8'] = 8
timezone_data['Etc/GMT-9'] = 9
timezone_data['Etc/GMT0'] = 0
timezone_data['Etc/Greenwich'] = 0
timezone_data['Etc/UCT'] = 0
timezone_data['Etc/UTC'] = 0
timezone_data['Etc/Universal'] = 0
timezone_data['Etc/Zulu'] = 0
return '+%s' % timezone_data[name] if timezone_data[name] > 0 else str(timezone_data[name])
\ No newline at end of file
...@@ -8,6 +8,7 @@ from ssl import SSLError ...@@ -8,6 +8,7 @@ from ssl import SSLError
from socket import gaierror, timeout from socket import gaierror, timeout
from imaplib import IMAP4, IMAP4_SSL from imaplib import IMAP4, IMAP4_SSL
from poplib import POP3, POP3_SSL from poplib import POP3, POP3_SSL
from email.header import decode_header
import email import email
from odoo import api, fields, models, tools, _ from odoo import api, fields, models, tools, _
from odoo.exceptions import UserError from odoo.exceptions import UserError
...@@ -122,6 +123,20 @@ class FetchmailServer(models.Model): ...@@ -122,6 +123,20 @@ class FetchmailServer(models.Model):
if a_time > before_now: if a_time > before_now:
hdr, sender_email = parseaddr(msg.get('From')) # 获取发件人邮箱 hdr, sender_email = parseaddr(msg.get('From')) # 获取发件人邮箱
email_body = '' email_body = ''
attachment_arr = []
if msg.is_multipart():
for part in msg.walk():
# 检查邮件每个部分的内容类型
content_disposition = str(part.get("Content-Disposition"))
if "attachment" in content_disposition:
# 获取附件的文件名
filename = part.get_filename()
if filename:
# 解码文件名
filename, encoding = decode_header(filename)[0]
if isinstance(filename, bytes):
filename = filename.decode(encoding if encoding else "utf-8")
attachment_arr.append(part.get_payload(decode=True))
for part in msg.walk(): for part in msg.walk():
# 如果ture的话内容是没用的 # 如果ture的话内容是没用的
if not part.is_multipart(): if not part.is_multipart():
...@@ -129,8 +144,11 @@ class FetchmailServer(models.Model): ...@@ -129,8 +144,11 @@ class FetchmailServer(models.Model):
# email_body = part.get_payload(decode=True).decode('utf-8', 'ignore') # email_body = part.get_payload(decode=True).decode('utf-8', 'ignore')
email_body = part.get_payload(decode=True).decode('gbk', 'ignore') email_body = part.get_payload(decode=True).decode('gbk', 'ignore')
break break
if email_body: if 'CDS REPORT' in subject.upper():
if 'CDS REPORT' in subject.upper(): if attachment_arr:
rule_obj = self.env['order.state.change.rule'].sudo()
rule_obj.fetch_mail_dlv_attachment(attachment_arr=attachment_arr)
elif email_body:
rule_obj = self.env['order.state.change.rule'].sudo() rule_obj = self.env['order.state.change.rule'].sudo()
rule_obj.fetch_mail_dlv(email_body=email_body, year=year) rule_obj.fetch_mail_dlv(email_body=email_body, year=year)
imap_server.store(num, '-FLAGS', '\\Seen') imap_server.store(num, '-FLAGS', '\\Seen')
......
...@@ -6,8 +6,11 @@ from odoo import models, fields, api, _ ...@@ -6,8 +6,11 @@ from odoo import models, fields, api, _
from odoo.exceptions import ValidationError, Warning from odoo.exceptions import ValidationError, Warning
import logging import logging
import json import json
import re import xlrd
import base64
import pdfplumber
import demjson import demjson
from io import BytesIO
from datetime import datetime, timedelta from datetime import datetime, timedelta
import re import re
_logger = logging.getLogger(__name__) _logger = logging.getLogger(__name__)
...@@ -42,6 +45,51 @@ class OrderStateChangeRule(models.Model): ...@@ -42,6 +45,51 @@ class OrderStateChangeRule(models.Model):
# regular_expression = fields.Char('正则表达式') # regular_expression = fields.Char('正则表达式')
# active = fields.Boolean('有效性', default=True) # active = fields.Boolean('有效性', default=True)
def get_file_path(self, report_file_ids):
"""
得到excel表格的内容
:return:
"""
report_path = report_file_ids._full_path(report_file_ids.store_fname)
try:
if report_file_ids.name[-3:] == 'xls':
data = xlrd.open_workbook(report_path, formatting_info=True)
elif report_file_ids.name[-3:] in ['pdf', 'PDF']:
data = pdfplumber.open(report_path)
else:
data = xlrd.open_workbook(report_path)
except Exception as e:
logging.info('解析错误%s' % str(e))
f = open(report_path, 'rb')
data = f.readlines()
return data
def read_pdf(self, pdf_data):
"""
:param pdf: pdf数据
:return:
"""
order_no = ''
date_arr = []
pdf_data = BytesIO(pdf_data)
pdf = pdfplumber.open(pdf_data)
for page in pdf.pages:
# 获取当前页面的全部文本信息,包括表格中的文字
text_p = page.extract_text()
text_lines = text_p.split('\n')
ze_2 = re.compile("\\d{3}-\\d{8,}")
pattern = r'\d{2}/\d{2}/\d{4} \d{2}:\d{2}:\d{2}'
# date_obj = datetime.strptime(date_str, '%d/%m/%Y %H:%M:%S')
if text_lines:
for line in text_lines:
if ze_2.findall(line):
order_no = ze_2.findall(line)[0]
matches = re.findall(pattern, line)
if matches:
date_arr = matches[0]
pdf.close()
return order_no, date_arr
# 函数处理输出 # 函数处理输出
def print_match(self, text): def print_match(self, text):
# 正则表达式 # 正则表达式
...@@ -58,6 +106,42 @@ class OrderStateChangeRule(models.Model): ...@@ -58,6 +106,42 @@ class OrderStateChangeRule(models.Model):
data_arr = data_re.findall(email_body) data_arr = data_re.findall(email_body)
return data_arr return data_arr
def upload_cds_attachment(self, bl_obj, data):
file_obj = self.env['cc.clearance.file'].sudo().search([('file_name', '=', '海关CDS申报单(import和授权方式检查拉齐等)'),
('bl_id', '=', bl_obj.id)], limit=1)
file_obj.file = base64.encodebytes(data)
file_obj.is_upload = False
file_obj.action_sync()
def fetch_mail_dlv_attachment(self, **kwargs):
attachment_arr = kwargs['attachment_arr']
for attachment in attachment_arr:
try:
order_no, date_str = self.read_pdf(attachment)
if order_no:
# 转换为 datetime 对象
local_time = datetime.strptime(date_str, '%d/%m/%Y %H:%M:%S')
# 调整时区
users_obj = self.env['res.users'].search([('name', '=', '邮件接收')], limit=1)
tz = users_obj.tz or 'UTC'
timezone_offset = self.env['common.common'].sudo().init_timezone_data(tz)
utc_time = local_time - timedelta(hours=int(timezone_offset))
sql = "select id from cc_bl where UPPER(REPLACE(REPLACE(REPLACE(bl_no, ' ', ''), '-', ''), '/', '')) = '{0}' order by create_date desc limit 1".format(order_no.replace(' ', '').replace('-', '').replace('/', ''))
self._cr.execute(sql)
result = self._cr.fetchall()
bl_obj = self.env['cc.bl'].sudo().search([('id', '=', result[0][0])]) if result else False
logging.info('order_no:%s, bl_obj: %s' % (order_no, bl_obj))
if bl_obj:
self.upload_cds_attachment(bl_obj, attachment)
if bl_obj and bl_obj.state != 'done':
redis_conn = self.env['common.common'].sudo().get_redis()
if redis_conn == 'no':
raise ValidationError('未连接redis')
else:
redis_conn.lpush('mail_push_package_list', json.dumps({'id': bl_obj.id, 'utc_time': utc_time.strftime("%Y-%m-%d %H:%M:%S")}))
except Exception as err:
logging.error('fetch_mail_dlv_attachment--error:%s' % str(err))
def fetch_mail_dlv(self, **kwargs): def fetch_mail_dlv(self, **kwargs):
email_body = kwargs['email_body'] email_body = kwargs['email_body']
year = kwargs['year'] year = kwargs['year']
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论