Advertisement
Guest User

Untitled

a guest
Nov 20th, 2019
126
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
T-SQL 15.26 KB | None | 0 0
  1. USE [RUSCAN]
  2. GO
  3. /****** Object:  StoredProcedure [dbo].[Mailstats]    Script Date: 20.11.2019 21:15:48 ******/
  4. SET ANSI_NULLS ON
  5. GO
  6. SET QUOTED_IDENTIFIER ON
  7. GO
  8. -- =============================================
  9. -- Author:      <Author,,Name>
  10. -- Create date: <Create Date,,>
  11. -- Description: <Description,,>
  12. -- =============================================
  13. ALTER PROCEDURE [dbo].[Mailstats]
  14.    
  15. AS
  16. BEGIN
  17.     -- SET NOCOUNT ON added to prevent extra result sets from
  18.     -- interfering with SELECT statements.
  19.     SET NOCOUNT ON;
  20.  
  21.     -- Insert statements for procedure here
  22. declare @d datetime set @d=convert(datetime,getdate(),121)
  23. declare @t datetime set @t=convert(datetime,convert(varchar(10),@d,121)+' 21:00',121)
  24.  
  25. declare @d1 datetime-- set @d1=convert(datetime,'2019-01-01 15:00',121)
  26. declare @d2 datetime-- set @d2=convert(datetime,'2019-01-01 15:00',121)
  27.  
  28. if @D>@t
  29.     begin
  30.         set @d1=convert(datetime,convert(varchar(10),@d,121)+' 21:00',121)
  31.         set @d2=convert(datetime,convert(varchar(10),@d+1,121)+' 08:59:59',121)
  32.     end
  33. else
  34.     begin
  35.         set @d1=convert(datetime,convert(varchar(10),@d,121)+' 09:00',121)
  36.         set @d2=convert(datetime,convert(varchar(10),@d,121)+' 20:59:59',121)
  37.     end
  38.  
  39. declare @dd1 datetime-- set @d1=convert(datetime,'2019-01-01 15:00',121)
  40. declare @dd2 datetime-- set @d2=convert(datetime,'2019-01-01 15:00',121)
  41. declare @td datetime set @td=convert(datetime,convert(varchar(10),@d,121)+' 20:50',121)
  42. if @D>@td
  43.     begin
  44.         set @dd1=convert(datetime,convert(varchar(10),@d,121)+' 20:50',121)
  45.         set @dd2=convert(datetime,convert(varchar(10),@d+1,121)+' 08:49:59',121)
  46.     end
  47. else
  48.     begin
  49.         set @dd1=convert(datetime,convert(varchar(10),@d,121)+' 08:50',121)
  50.         set @dd2=convert(datetime,convert(varchar(10),@d,121)+' 20:49:59',121)
  51.     end
  52.  
  53.  
  54. declare @out table  
  55.          ( ID int  identity (1, 1)     not null,
  56.            pr int default 0,
  57.            CREATEDATE datetime,
  58.            l_id int default 0,
  59.            PLAN_START_DATE datetime,
  60.            PLAN_end_date datetime,
  61.            START_DATE datetime,
  62.            end_date datetime,
  63.            job_type int default 0,
  64.            status_job int default 0,
  65.            [Подразделение-исполнитель] varchar(255) default '',
  66.            [Запланировано работ] decimal(19,9) default 0,
  67.            [Выполнено работ] decimal(19,9) default 0,
  68.            [Процент выполнения] decimal(19,9) default 0 ,
  69.            [Участок] varchar(255) default '',
  70.            [Зарегистрировал] varchar(255) default '',
  71.            [Наименование тех. места] varchar(255) default '',
  72.            [Описание дефекта] varchar(255) default '',
  73.  
  74.            s_id int default 0,
  75.            [Наименование номенклатуры] varchar(255) default '',
  76.            [Производитель] varchar(255) default '' not null,
  77.            [Ед. изм.] varchar(55) default '',
  78.            [Расход] decimal(19,9) default 0 ,
  79.            [Остатки] decimal(19,9) default 0 ,
  80.             primary key (id))
  81. --insert into @out (pr,l_id,PLAN_START_DATE,PLAN_end_date,START_DATE,end_date,job_type,status_job,[Подразделение-исполнитель])
  82. --select distinct  10,
  83. --l.id as l_id,l.plan_start_date,l.plan_end_date,l.start_date,l.end_date,l.JOB_TYPE,l.status_job
  84. ----,r.name
  85. --,r0.name
  86. --from mnt_log l
  87. --join MNT_LOG_RESOURCE lr on lr.log_id=l.id and lr.deleted<100 and lr.res_type=2 and l.JOB_TYPE<>4
  88. --join mnt_resource r on r.id=lr.RESOURCE_ID
  89. --left join mnt_resource r0 on r0.id=r.parent_ID and r0.deleted<100
  90. --where l.plan_start_date between @d1 and @d2 and l.deleted<100
  91. --order by l.id
  92.  
  93. insert into @out (pr,[Подразделение-исполнитель],[Запланировано работ])
  94. select 0,mr.name, COUNT(l.id)
  95. from mnt_log l
  96. --join MNT_LOG_RESOURCE lr on lr.log_id=l.id and lr.deleted<100 and lr.res_type=2 --and l.JOB_TYPE<>4
  97. --join mnt_resource r on r.id=lr.RESOURCE_ID
  98. --left join mnt_resource r0 on r0.id=r.parent_ID and r0.deleted<100
  99. join mnt_resource mr on mr.ID = l.resp_group_id
  100. where l.plan_start_date between @d1 and @d2 and l.deleted<100
  101. group by mr.name
  102.  
  103. --select r0.name, --COUNT(l.id) as ss
  104. --l.status_job,l.*
  105. --from mnt_log l
  106. --join MNT_LOG_RESOURCE lr on lr.log_id=l.id and lr.deleted<100 and lr.res_type=2 and l.JOB_TYPE<>4 and l.status_job=8 and l.plan_start_date between @d1 and @d2 and l.deleted<100
  107. --join mnt_resource r on r.id=lr.RESOURCE_ID
  108. --left join mnt_resource r0 on r0.id=r.parent_ID and r0.deleted<100
  109. --where
  110. --group by r0.name
  111. update @out set [Выполнено работ]=sss.ss
  112. from @out o
  113. join (select r0.name, COUNT(l.id) as ss
  114. from mnt_log l
  115. join MNT_LOG_RESOURCE lr on lr.log_id=l.id and lr.deleted<100 and lr.res_type=2 and l.status_job in (6,8) --and l.JOB_TYPE<>4 --l.status_job in (6,8)
  116. join mnt_resource r on r.id=lr.RESOURCE_ID
  117. left join mnt_resource r0 on r0.id=r.parent_ID and r0.deleted<100
  118. where l.plan_start_date between @d1 and @d2 and l.deleted<100
  119. group by r0.name) sss on sss.NAME=o.[Подразделение-исполнитель]
  120.  
  121. update @out set [Процент выполнения]=[Выполнено работ]/[Запланировано работ]*100 where  [Запланировано работ]>0
  122.  
  123.  
  124. insert into @out (pr,l_id,CREATEDATE,PLAN_START_DATE,PLAN_end_date,START_DATE,end_date,job_type,status_job,[Участок],[Наименование тех. места],[Зарегистрировал],[Описание дефекта])
  125. select 1,
  126. l.id as l_id,l.CREATE_DATE,l.plan_start_date,l.plan_end_date,l.start_date,l.end_date,l.status_job,l.JOB_TYPE,
  127. sub.NAME_MENU,c.name,l.CREATE_USER AS ACT_USER,l.[UNDERTAKE]--,l.[UNDERTAKE_ADD],l.COMMENT_
  128. --,l.*
  129. from mnt_log l
  130. join mnt_log_defect df on df.log_id=l.id and l.deleted<100
  131. join MNT_LOG_SUBTYPE sub on sub.ID=l.SUBTYPE_ID
  132. left join MNT_COMPONENT c on c.id=l.techspace_id
  133. where l.CREATE_DATE between @dd1 and @dd2 and l.deleted<100
  134. --l.plan_start_date between @dd1 and @dd2 and l.deleted<100
  135.  
  136. insert into @out (pr,[Производитель],s_id,[Наименование номенклатуры],[Ед. изм.],[Расход])
  137. select 2,
  138. --l.id as l_id,l.plan_start_date,l.plan_end_date,l.start_date,l.end_date,l.status_job,l.JOB_TYPE,
  139. --coalesce(f.name, 'QEWTASWFAS') as f_name,
  140. case when f.name is null
  141. then
  142. 'Не указано'
  143. else
  144. f.NAME end as F_NAME,
  145. s.id,
  146. s.name,
  147. s.[UNIT]
  148. --,sum(ls.PLAN_SPARES_VALUE)
  149. ,sum(SPARES_VALUE)
  150. --,ls.[PLAN_UNIT_ID],ls.[FACT_UNIT_ID]
  151. from mnt_log l
  152. join mnt_log_spares ls on ls.log_id=l.id and ls.deleted<100 and ls.[FLAG_STOCK]<11
  153. join spares s on s.id=ls.spares_id
  154. left join firms f on f.id=s.[MAKERS_ID]
  155. where l.plan_start_date between @d1 and @d2 and l.deleted<100
  156. group by f.name,s.id,s.name,ls.[PLAN_UNIT_ID],ls.[FACT_UNIT_ID],s.[UNIT]
  157.  
  158. update @out set [Остатки]=ost.COUNT_
  159. from @out o
  160. join (select spares_id,sum(COUNT_) COUNT_ from [dbo].[SKLCARDVIEW]
  161. group by spares_id) ost on ost.SPARES_ID=o.s_id
  162. where o.pr=2
  163.  
  164.  
  165.  
  166. --select  [Подразделение-исполнитель],count(l_id) from @out
  167. --where pr=0
  168. --group by [Подразделение-исполнитель]
  169. --select  [Подразделение-исполнитель],count(l_id) from @out
  170. --where pr=0 and status_job=8
  171. --group by [Подразделение-исполнитель]
  172.  
  173. --select [Подразделение-исполнитель], [Запланировано работ],[Выполнено работ],[Процент выполнения]--@d1,@d2,@dd1,@dd2,
  174. -- from @out
  175. -- where [Подразделение-исполнитель]<>''
  176.  
  177. --  order by [Подразделение-исполнитель] asc
  178.  
  179. select * from @out
  180.  
  181.  
  182. declare @HTMLbody nvarchar(max),
  183.     @isp varchar(100),
  184.     @plancount varchar(100),
  185.     @donecount varchar(100),
  186.     @percentcount varchar(100),
  187.     @uch varchar(100),
  188.     @reg varchar(100),
  189.     @tmname varchar(max),
  190.     @defdesc varchar(max),
  191.     @statusj varchar(100),
  192.     @sparname varchar(max),
  193.     @maker varchar(max),
  194.     @unit varchar(100),
  195.     @consump varchar(100),
  196.     @balance varchar(100),
  197.     @SQL nvarchar(max),
  198.     @SQL2 nvarchar(max),
  199.     @SQL3 nvarchar(max)
  200.  
  201.     SET @SQL = ''
  202.     SET @SQL2 = ''
  203.     SET @SQL3 = ''
  204.  
  205. set @HTMLbody = '<html><head><title>Статистика за смену</title></head><body>'
  206. set @HTMLbody = @HTMLbody + '<center><h1 style="color:#008954;">PREVENTIVE MAINTENANCE COMPLETION RATIO</h1></center>'
  207.  
  208.  
  209. set @HTMLbody = @HTMLbody + '<center><table><th style="background-color:#EDEDED;color:#000;">Подразделение-исполнитель</th><th style="background-color:#EDEDED;color:#000;">Запланировано работ</th><th style="background-color:#EDEDED;color:#000;">Выполнено работ</th><th style="background-color:#EDEDED;color:#000;">Процент выполнения</th>'
  210. --select @HTMLbody
  211. --Таблица 1. Работы
  212.  
  213. declare stat cursor
  214. read_only
  215. for
  216. select
  217. [Подразделение-исполнитель] as isp,
  218. cast(round([Запланировано работ], 0) as int) as plancount,
  219. cast(round([Выполнено работ], 0) as int) as donecount,
  220. cast(ROUND([Процент выполнения], 1) as decimal(6,1)) as percentcount --[Процент выполнения] as percentcount --@d1,@d2,@dd1,@dd2,
  221. from @out
  222. where [Подразделение-исполнитель]<>''
  223. order by [Подразделение-исполнитель] asc
  224.  
  225. open stat
  226. Fetch next from stat into @isp, @plancount, @donecount, @percentcount
  227.  
  228. While (@@FETCH_STATUS <> -1)
  229. Begin
  230. DECLARE @percent_done_color char(6)
  231. SET @percent_done_color=(CASE
  232. WHEN CAST(@percentcount as float) >= 95 THEN '80ff80'
  233. WHEN CAST(@percentcount as float) >= 80 THEN 'ffff80'
  234. ELSE 'ff8080' END)
  235. Set @SQL = @SQL + '<TR><TD style="border:1; border-style:solid">'
  236. + @isp + '</TD><TD style="border:1; border-style:solid; text-align:center">'
  237. + @plancount + '</TD><TD style="border:1; border-style:solid; text-align:center">'
  238. + @donecount + '</TD><TD style="border:1; border-style:solid; text-align:center;background-color:#' + @percent_done_color + '">'
  239. + @percentcount + ' %' + '</TD></TR>'
  240. Fetch next from stat into @isp, @plancount, @donecount, @percentcount
  241. End
  242.  
  243. Close stat
  244. Deallocate stat
  245. --select @HTMLbody
  246. --Таблица 2. Дефекты
  247.  
  248. declare def cursor
  249. read_only
  250. for
  251. select [Участок] as uch,
  252. [Зарегистрировал] as reg,
  253. [Наименование тех. места] as tmname,
  254. [Описание дефекта] as defdesc,
  255. --[status_job] as statusj--@d1,@d2,@dd1,@dd2,
  256. (CASE WHEN  [status_job] = 0 THEN 'Создание работы'
  257. WHEN  [status_job] = 1 THEN 'Не запланировано'
  258. WHEN  [status_job] = 2 THEN 'Одобрено'
  259. WHEN  [status_job] = 3 THEN 'Запланировано'
  260. WHEN  [status_job] = 4 THEN 'Начато'
  261. WHEN  [status_job] = 5 THEN 'Не принято'
  262. WHEN  [status_job] = 6 THEN 'Выполнено'
  263. WHEN  [status_job] = 7 THEN 'Принято'
  264. WHEN  [status_job] = 8 THEN 'Архив'
  265. WHEN  [status_job] = 9 THEN 'Отменено'
  266. WHEN  [status_job] = 10 THEN 'Приостановлено'
  267. ELSE 'Неизвестный статус' END) as statusj     --Статус работы 0;'Создание работы'; 1;'Не запланировано'; 2;'Одобрено'; 3;'Запланировано'; 4;'Начато'; 5;'Не принято'; 6;'Выполнено'; 7;'Принято'; 8;'Архив'; 9;'Отменено'; 10;'Приостановлено';
  268. from @out
  269. where [Участок]<>''
  270. order by CREATEDATE asc
  271.  
  272. set @HTMLbody = @HTMLbody + @SQL --+  --'</center>'--</body></html>'
  273.  
  274. open def
  275. Fetch next from def into @uch, @reg, @tmname, @defdesc, @statusj
  276.  
  277. While (@@FETCH_STATUS <> -1)
  278. Begin
  279. DECLARE @defect_status_color char(6)
  280. SET @defect_status_color=(CASE
  281. WHEN @statusj in ('Архив','Отменено') THEN '80ff80'
  282. ELSE 'ff8080' END)
  283. Set @SQL2 = @SQL2 + '<TR><TD style="border:1; border-style:solid">'
  284. + @uch + '</TD><TD style="border:1; border-style:solid">'
  285. + @reg + '</TD><TD style="border:1; border-style:solid">'
  286. + @tmname + '</TD><TD style="border:1; border-style:solid">'
  287. + @defdesc + '</TD><TD style="border:1; border-style:solid;background-color:#' + @defect_status_color + '">'
  288. + @statusj + '</TD></TR>'
  289. Fetch next from def into @uch, @reg, @tmname, @defdesc, @statusj
  290. End
  291.  
  292. Close def
  293. Deallocate def
  294.  
  295.  
  296. Set @SQL2 = '<center>' +  @SQL2
  297.  
  298. --select @HTMLbody
  299. ---Таблица 3. МТР
  300.  
  301.  
  302. declare spar cursor
  303. read_only
  304. for
  305. select
  306. [Наименование номенклатуры] as sparname,
  307. [Производитель] as maker,
  308. [Ед. изм.] as unit,
  309. cast(round([Расход], 3, 0) as numeric(10,4)) as consump,
  310. cast(round([Остатки], 3, 0) as numeric(10,4)) as balance --@d1,@d2,@dd1,@dd2, cast(round([Остатки], 0) as int) as balance
  311. from @out
  312. where [Ед. изм.]<>''
  313. order by CREATEDATE asc
  314.  
  315. --set @HTMLbody = @HTMLbody + @SQL --+  --'</center>'--</body></html>'
  316.  
  317. open spar
  318. Fetch next from spar into @sparname, @maker, @unit, @consump, @balance
  319.  
  320. While (@@FETCH_STATUS <> -1)
  321. Begin
  322. Set @SQL3 = @SQL3 + '<TR><TD style="border:1; border-style:solid">'
  323. + @sparname + '</TD><TD style="border:1; border-style:solid">'
  324. + @maker + '</TD><TD style="border:1; border-style:solid">'
  325. + @unit + '</TD><TD style="border:1; border-style:solid; text-align:center">'
  326. + @consump + '</TD><TD style="border:1; border-style:solid; text-align:center">'
  327. + @balance + '</TD></TR>'
  328.  
  329. Fetch next from spar into @sparname, @maker, @unit, @consump, @balance
  330. End
  331.  
  332. Close spar
  333. Deallocate spar
  334. select @SQL3
  335. --select @HTMLbody
  336.  
  337. set @HTMLbody = @HTMLbody + '</table><h1 style="color:#008954;">Дефектов зарегистрировано</h1><br><center><table><th style="background-color:#EDEDED;color:#000;">Участок</th><th style="background-color:#EDEDED;color:#000;">Зарегистрировал</th><th style="background-color:#EDEDED;color:#000;">Наименование тех.места</th><th style="background-color:#EDEDED;color:#000;">Описание дефекта</th><th style="background-color:#EDEDED;color:#000;">Статус</th>'
  338. --select @HTMLbody
  339.  
  340. set @HTMLbody = @HTMLbody + @SQL2 + '</table></center>'--</body></html>'
  341. --select @HTMLbody
  342. set @HTMLbody = @HTMLbody + '<h1 style="color:#008954;">МТР израсходовано</h1><br><center><table><th style="background-color:#EDEDED;color:#000;">Наименование номенклатуры</th><th style="background-color:#EDEDED;color:#000;">Производитель</th><th style="background-color:#EDEDED;color:#000;">Ед. изм.</th><th style="background-color:#EDEDED;color:#000;">Расход</th><th style="background-color:#EDEDED;color:#000;">Остатки</th>'
  343. --select @HTMLbody
  344. --set @HTMLbody = @HTMLbody + @SQL3 + '</table></center></body></html>'
  345. set @HTMLbody = @HTMLbody + @SQL3  
  346. --select @HTMLbody
  347. set @HTMLbody = @HTMLbody + '</table></center></body></html>'
  348. --select @HTMLbody
  349.  
  350.   /* Send a test email */
  351. EXECUTE msdb.dbo.sp_send_dbmail
  352. @profile_name = 'RUSCAN_MAIL_PROFILE',
  353. @recipients = 'matveycep@spectec.ru;sergey.pinchuk@royalcanin.com;yulia.shagimurdanova@royalcanin.com;romani@spectec.ru',
  354. --@recipients = 'matveycep@spectec.ru',
  355. @subject = 'Статистика за смену',
  356. @body = @HTMLbody,
  357. @body_format='HTML'
  358. END
  359.  
  360. --exec Mailstats
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement