Advertisement
Guest User

Untitled

a guest
Jan 18th, 2018
334
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.99 KB | None | 0 0
  1. package com.diplomtime.datafetchers.intex
  2.  
  3. import com.diplomtime.enums.MailingType
  4. import groovy.sql.Sql
  5. import org.springframework.beans.factory.annotation.Autowired
  6. import org.springframework.stereotype.Component
  7.  
  8. import javax.sql.DataSource
  9.  
  10. @Component
  11. class IntexDataFetcher {
  12. @Autowired
  13. DataSource intexDataSource
  14.  
  15. Map<String, Object> fetchOrderData(Long orderId, MailingType mailingType) {
  16. Sql sql = new Sql(intexDataSource)
  17. def query = """
  18. SELECT T.*,
  19. CASE
  20. WHEN T.order_count >= 8 THEN 15
  21. WHEN T.order_count >= 5 THEN 10
  22. WHEN T.order_count >= 3 THEN 5
  23. ELSE 0
  24. END as discount,
  25. CASE
  26. WHEN T.last_order_date is null OR DATEDIFF(day, T.last_order_date, GETDATE()) > 7 THEN 1 ELSE -1
  27. END as welcome
  28. FROM (
  29. SELECT
  30. log.time,
  31. e.[Name] AS manager_name,
  32. e.[E-mail] AS manager_email,
  33. c.[KlName] as client_name,
  34. c.[Email] AS client_email,
  35. c.[PhoneMobile] AS client_phone,
  36. (SELECT str.[E-mail] FROM intexOrder.dbo.Сотрудники as str WHERE str.КодСотрудника = o.AdminPrinimatorID) as admin_email,
  37. (SELECT count(ord.[Key]) as cnt FROM intexOrder.dbo.Заказы as ord
  38. WHERE ord.KlientID = o.KlientID
  39. and ord.Data_priema >= '2017-01-01'
  40. and ord.MicroStad >= 1300 and ord.MicroStad < 3150 and ord.MicroStad != 2600 and ord.PredvaritZakaz = 0) as order_count,
  41. (SELECT TOP 1 ord.[Time_priem] FROM intexOrder.dbo.Заказы as ord
  42. WHERE ord.[Key] != ${orderId}
  43. and ord.KlientID = o.KlientID
  44. and ord.Data_priema >= '2017-01-01'
  45. ORDER BY ord.[Key] DESC) as last_order_date,
  46. o.[Kod_posrednika] AS kod_posrednika,
  47. o.[StoimonstOnRegPosrKoef] AS order_price,
  48. CAST(o.Data_priema as date) as dt
  49. FROM [intexOrder].[dbo].[Сотрудники] AS e
  50. LEFT JOIN [intexOrder].[dbo].[Заказы] AS o ON o.[Prinimator] = e.[КодСотрудника]
  51. LEFT JOIN [intexOrder].[dbo].[Klient] AS c ON c.[KlientID] = o.[KlientID]
  52. LEFT JOIN intexOrder.dbo.mass_mailer_log as log ON log.email_to = c.[Email]
  53. AND log.type = '${mailingType}'
  54. AND CAST(log.time as date) = CAST(GETDATE() as date)
  55. WHERE o.[Key] = ${orderId}
  56. and log.time is null
  57. and c.[Email] != 'test@diplomtime.ru')
  58. AS T
  59. """
  60. def row = sql.firstRow(query as String)
  61. if (row) {
  62. return [
  63. orderId: orderId,
  64. adminEmail: row.admin_email,
  65. clientName: row.client_name,
  66. clientEmail: row.client_email,
  67. clientPhone: row.client_phone,
  68. managerName: row.manager_name,
  69. managerEmail: row.manager_email,
  70. orderCount: row.order_count,
  71. orderPrice: row.order_price,
  72. discount: row.discount,
  73. welcome: row.welcome,
  74. kodPosrednika: row.kod_posrednika,
  75. dt: row.dt
  76. ]
  77. } else {
  78. return [:]
  79. }
  80. }
  81.  
  82. List<Map<String, Object>> fetchOrdersReadyPayOffData() {
  83. Sql sql = new Sql(intexDataSource)
  84.  
  85. def query = """
  86. SELECT kl.Email as client_email,
  87. log.time,
  88. CAST(intexOrder.dbo.getAmountOrder(ord.[Key]) as INT) as opl,
  89. ord.StoimonstOnRegPosrKoef as fc,
  90. ord.StoimonstOnRegPosrKoef - intexOrder.dbo.getAmountOrder(ord.[Key]) as ost,
  91. ord.Kod_posrednika as middleman_code,
  92. ctr.Obrashenie as manager_name,
  93. ctr.[E-mail] as manager_email
  94. FROM intexOrder.dbo.Заказы as ord
  95. LEFT JOIN intexOrder.dbo.Klient as kl ON kl.KlientID = ord.KlientID
  96. LEFT JOIN intexOrder.dbo.order_clones as oc ON oc.[order_id] = ord.[Key]
  97. LEFT JOIN intexOrder.dbo.mass_mailer_log as log ON log.email_to = kl.Email
  98. AND log.type = '${MailingType.ORDER_READY_PAY_OFF}'
  99. AND CAST(log.time as date) = CAST(GETDATE() as date)
  100. LEFT JOIN intexOrder.dbo.Сотрудники as ctr ON ctr.[КодСотрудника] = ord.Prinimator
  101. WHERE ord.MicroStad = 2400 and ord.StoimonstOnRegPosrKoef > intexOrder.dbo.getAmountOrder (ord.[Key])
  102. and ord.Posrednik != 67
  103. and (SELECT TOP 1
  104. DATEDIFF(day, CAST(ohots.TransferData as date), CAST(GETDATE() as date)) % 3 as td
  105. FROM intexOrder.dbo.OrderHistoryOfTranserStadia as ohots
  106. WHERE ohots.OrderID = ord.[Key] and ohots.NewStadidID = 2400
  107. ORDER BY ohots.OrderHistoryOfTranserStadiaID DESC ) = 0
  108. and log.time is null
  109. and oc.sotr_id is null
  110. """
  111.  
  112. return sql.rows(query.toString()).collect {
  113. return [
  114. paid: it.opl,
  115. price: it.fc,
  116. residual: it.ost,
  117. orderId: it.middleman_code,
  118. clientEmail: it.client_email,
  119. managerName: it.manager_name,
  120. managerEmail: it.manager_email,
  121. managerNumber: it.manager_email.split("@")[0]
  122. ]
  123. }
  124. }
  125.  
  126. List<Map<String, Object>> fetchOrdersSuspendedData() {
  127. Sql sql = new Sql(intexDataSource)
  128.  
  129. def query = """
  130. SELECT kl.Email as client_email,
  131. log.time,
  132. kl.Pass as client_password,
  133. ord.Kod_posrednika as middleman_code,
  134. ctr.Name as manager_name,
  135. ctr.[E-mail] as manager_email,
  136. REPLACE(ctr.[E-mail], '@diplomtime.ru', '') as manager_number
  137. FROM intexOrder.dbo.Заказы as ord
  138. LEFT JOIN intexOrder.dbo.Klient as kl ON kl.KlientID = ord.KlientID
  139. LEFT JOIN intexOrder.dbo.mass_mailer_log as log ON log.email_to = kl.Email
  140. AND log.type = '${MailingType.ORDER_SUSPENDED}'
  141. AND CAST(log.time as date) = CAST(GETDATE() as date)
  142. LEFT JOIN intexOrder.dbo.Сотрудники as ctr ON ctr.[КодСотрудника] = ord.Prinimator
  143. WHERE ord.MicroStad = 1400
  144. and ord.Posrednik != 67
  145. and (SELECT TOP 1
  146. DATEDIFF(day, CAST(ohots.TransferData as date), CAST(GETDATE() as date)) % 2 as td
  147. FROM intexOrder.dbo.OrderHistoryOfTranserStadia as ohots
  148. WHERE ohots.OrderID = ord.[Key] and ohots.NewStadidID = 1400 ORDER BY ohots.OrderHistoryOfTranserStadiaID DESC ) = 0
  149. and log.time is null
  150. """
  151.  
  152. return sql.rows(query.toString()).collect {
  153. return [
  154. orderId: it.middleman_code,
  155. clientEmail: it.client_email,
  156. clientPassword: it.client_password,
  157. managerName: it.manager_name,
  158. managerEmail: it.manager_email,
  159. managerNumber: it.manager_number
  160. ]
  161. }
  162. }
  163.  
  164. List<Map<String, Object>> fetchOrdersFrostData() {
  165. Sql sql = new Sql(intexDataSource)
  166.  
  167. def query = """
  168. SELECT kl.Email as client_email,
  169. log.time,
  170. ord.Kod_posrednika as middleman_code,
  171. ctr.Name as manager_name,
  172. ctr.[E-mail] as manager_email,
  173. REPLACE(ctr.[E-mail], '@diplomtime.ru', '') as manager_number
  174. FROM intexOrder.dbo.Заказы as ord
  175. LEFT JOIN intexOrder.dbo.Klient as kl ON kl.KlientID = ord.KlientID
  176. LEFT JOIN intexOrder.dbo.mass_mailer_log as log ON log.email_to = kl.Email
  177. AND log.type = '${MailingType.ORDER_FROST}'
  178. AND CAST(log.time as date) = CAST(GETDATE() as date)
  179. LEFT JOIN intexOrder.dbo.Сотрудники as ctr ON ctr.[КодСотрудника] = ord.Prinimator
  180. WHERE ord.MicroStad = 1900
  181. and ord.Posrednik != 67
  182. and (SELECT TOP 1
  183. (DATEDIFF(day, CAST(ohots.TransferData as date), CAST(GETDATE() as date)) + 3) % 5 as td
  184. FROM intexOrder.dbo.OrderHistoryOfTranserStadia as ohots
  185. WHERE ohots.OrderID = ord.[Key] and ohots.NewStadidID = 1900 ORDER BY ohots.OrderHistoryOfTranserStadiaID DESC ) = 0
  186. and log.time is null
  187. """
  188.  
  189. return sql.rows(query.toString()).collect {
  190. return [
  191. orderId: it.middleman_code,
  192. clientEmail: it.client_email,
  193. managerName: it.manager_name,
  194. managerEmail: it.manager_email,
  195. managerNumber: it.manager_number
  196. ]
  197. }
  198. }
  199.  
  200. List<Map<String, Object>> fetchLifehackForAuthorsData() {
  201. Sql sql = new Sql(intexDataSource)
  202.  
  203. def query = """
  204. SELECT TOP 1
  205. ctr.[E-mail] AS eml
  206. FROM intexOrder.dbo.Сотрудники AS ctr
  207. WHERE ctr.Группа = 4
  208. AND ctr.Status_sub <= 3
  209. """
  210.  
  211. return sql.rows(query.toString()).collect {
  212. return [
  213. authorEmail: it.eml
  214. ]
  215. }
  216. }
  217. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement