1 create or replace procedure P_TMP_PROJECT /*(P_SYNC_TYPE varchar2) */ 2 is 3 --目标表统计数 4 V_PROJECTCOUNT INTEGER; 5 V_PROJECTMEMBERCOUNT INTEGER; 6 V_ACCOUNTCOUNT INTEGER; 7 V_TYPE_PROJ_1 varchar2(40); 8 V_TYPE_PROJ_2 varchar2(40); 9 V_TYPE_PROJ_3 varchar2(40); 10 V_TYPE_PROJ_4 varchar2(40); 11 V_TYPE_PROJ_5 varchar2(40); 12 V_STATE_ALLOW varchar2(40); 13 V_STATE_NOTALLOW VARCHAR2(40); 14 V_ENDDATE DATE; 15 --v_err_msg varchar2(2000); 16 begin 17 18 V_TYPE_PROJ_1 := '1'; --工程项目 19 V_TYPE_PROJ_2 := '2'; --售前项目 20 V_TYPE_PROJ_3 := '3'; --C类行动项目 21 V_TYPE_PROJ_4 := '4'; --售后项目 22 V_TYPE_PROJ_5 := '5'; --售后非项目 23 V_STATE_ALLOW := '正常'; --允许 24 V_STATE_NOTALLOW := '结项'; --禁止 25 26 SELECT to_date((to_char(sysdate, 'yyyy') || '-' || '12' || '-' || '31'), 27 'yyyy-MM-dd') 28 INTO V_ENDDATE 29 FROM DUAL; 30 --//----------------处理工程项目信息 start ---------------------------------------// 31 select count(*) into V_PROJECTCOUNT from bx_project; 32 dbms_output.put_line('工程项目处理开始' || V_PROJECTCOUNT || 'date:' || sysdate); 33 if V_PROJECTCOUNT = 0 then 34 --首次插入所有在建和暂停的项目 35 insert into bx_project 36 (id, 37 project_code, 38 project_name, 39 project_type, 40 project_status, 41 project_manager, 42 PROJECT_DIRECTOR, 43 PROJECT_COSTSUM, 44 project_begindate, 45 project_enddate, 46 project_customerid, 47 project_departmentname) 48 select sys_guid(), 49 projectcode, 50 projectname, 51 case 52 when projecttype=1 then V_TYPE_PROJ_1 --工程项目 53 when projecttype=4 then V_TYPE_PROJ_4 --售后项目 54 when projecttype=5 then V_TYPE_PROJ_5 --售后非项目 55 end, 56 V_STATE_ALLOW, 57 projectmanagerid, 58 projectdirectorid, 59 PRESALESTOTALCOST, 60 startdate, 61 case 62 when to_char(enddate,'yyyy-MM-dd')='1900-01-01' then 63 null 64 else 65 enddate 66 end, 67 customerid, 68 departmentname 69 from bx_project_tmp t 70 where ((t.projecttype=1 and t.projectstate <> '终结') or t.projecttype=4 or t.projecttype=5); 71 end if; 72 73 --插入新增项目信息 74 insert into bx_project 75 (id, 76 project_code, 77 project_name, 78 project_type, 79 project_status, 80 project_manager, 81 PROJECT_DIRECTOR, 82 PROJECT_COSTSUM, 83 project_begindate, 84 project_enddate, 85 project_customerid, 86 project_departmentname) 87 select sys_guid(), 88 projectcode, 89 projectname, 90 case 91 when projecttype=1 then V_TYPE_PROJ_1 --工程项目 92 when projecttype=4 then V_TYPE_PROJ_4 --售后项目 93 when projecttype=5 then V_TYPE_PROJ_5 --售后非项目 94 end, 95 V_STATE_ALLOW, --项目状态:1正常;0禁止 96 projectmanagerid, 97 projectdirectorid, 98 PRESALESTOTALCOST, 99 startdate, 100 case 101 when to_char(enddate,'yyyy-MM-dd')='1900-01-01' then 102 null 103 else 104 enddate 105 end, 106 customerid, 107 departmentname 108 from bx_project_tmp t 109 where t.projectcode not in (select project_code from bx_project) 110 and ((t.projecttype=1 and t.projectstate <> '终结') or t.projecttype=4 or t.projecttype=5); 111 112 --更新项目状态,项目经理,项目总监,开始时间,结束时间 113 update bx_project p 114 set p.project_status = (select case 115 when t.projectstate = '终结' then 116 V_STATE_NOTALLOW 117 else 118 V_STATE_ALLOW 119 end 120 from bx_project_tmp t 121 where t.projectcode = p.project_code), 122 p.project_manager = (select t.projectmanagerid 123 from bx_project_tmp t 124 where t.projectcode = p.project_code), 125 p.project_director = (select t.projectdirectorid 126 from bx_project_tmp t 127 where t.projectcode = p.project_code), 128 p.project_customerid = (select t.CUSTOMERID 129 from bx_project_tmp t 130 where t.projectcode = p.project_code), 131 p.project_customername = null, 132 p.project_departmentname = (select t.departmentname 133 from bx_project_tmp t 134 where t.projectcode = p.project_code), 135 p.project_departmentid=null, 136 p.project_begindate = (select t.startdate 137 from bx_project_tmp t 138 where t.projectcode = p.project_code), 139 p.project_enddate = (select case 140 when to_char(enddate,'yyyy-MM-dd')='1900-01-01' then 141 null 142 else 143 enddate 144 end 145 from bx_project_tmp t 146 where t.projectcode = p.project_code), 147 p.project_costsum = (select t.projcostsum 148 from bx_project_tmp t 149 where t.projectcode = p.project_code) 150 where p.project_code in (select t.projectcode from bx_project_tmp t); 151 152 dbms_output.put_line('工程项目处理完毕' || sysdate); 153 --//售前项目-------------------------------------------------// 154 155 if V_PROJECTCOUNT = 0 then 156 --首次插入所有售前项目 157 insert into bx_project 158 (id, 159 project_code, 160 project_name, 161 project_type, 162 project_status, 163 project_manager, 164 project_begindate, 165 project_enddate, 166 project_CustomerName, 167 PROJECT_DEPARTMENTNAME 168 ) 169 select sys_guid(), 170 projectcode, 171 projectname, 172 case 173 when max(projecttype)=2 then V_TYPE_PROJ_2 --售前项目 174 when max(projecttype)=3 then V_TYPE_PROJ_3 --C类行动项目 175 end, 176 max(V_STATE_ALLOW), 177 case 178 when max(saleid) is null then 179 max(presaleid) 180 else 181 max(saleid) 182 end, 183 min(updatedate), 184 max(case 185 when projectstate = '放弃' then 186 case 187 when giveupdate is not null then 188 (giveupdate + 14) 189 END when projectstate = '败标或失败' then case 190 when faildate is not null then 191 (faildate + 14) 192 END when projectstate = '合同签署' then case 193 when submitdate is not null then 194 (submitdate + 14) 195 end else null end) as enddate, 196 max(CustomerName), 197 max(businesName) 198 from bx_sq_project_tmp t 199 group by projectcode, projectname; 200 end if; 201 202 --插入新增项目信息 203 insert into bx_project 204 (id, 205 project_code, 206 project_name, 207 project_type, 208 project_status, 209 project_manager, 210 project_begindate, 211 project_enddate, 212 project_CustomerName, 213 PROJECT_DEPARTMENTNAME 214 ) 215 select sys_guid(), 216 projectcode, 217 projectname, 218 case 219 when max(projecttype)=2 then V_TYPE_PROJ_2 --售前项目 220 when max(projecttype)=3 then V_TYPE_PROJ_3 --C类行动项目 221 end, 222 max(V_STATE_ALLOW), 223 case 224 when max(saleid) is null then 225 max(presaleid) 226 else 227 max(saleid) 228 end, 229 min(updatedate), 230 max(case 231 when projectstate = '放弃' 232 then 233 case 234 when giveupdate is not null then (giveupdate + 14) 235 end 236 when projectstate = '败标或失败' 237 then 238 case 239 when faildate is not null then (faildate + 14) 240 end 241 when projectstate = '合同签署' 242 then 243 case 244 when submitdate is not null then (submitdate + 14) 245 end 246 else null end) as enddate, 247 max(CustomerName), 248 max(businesName) 249 from bx_sq_project_tmp t 250 group by projectcode, projectname 251 having t.projectcode not in (select project_code from bx_project); 252 253 --更新售前项目状态,项目经理,开始时间,结束时间 254 update bx_project p 255 set p.project_status = (select max(case 256 when (t.projectstate = '放弃' or 257 t.projectstate = '败标或失败' or 258 t.projectstate = '合同签署') then 259 V_STATE_NOTALLOW 260 else 261 V_STATE_ALLOW 262 end) 263 from bx_sq_project_tmp t 264 group by t.projectcode 265 having t.projectcode = p.project_code), 266 p.project_manager = (select case 267 when max(t.saleid) is null then 268 max(t.presaleid) 269 else 270 max(t.saleid) 271 end 272 from bx_sq_project_tmp t 273 group by t.projectcode, t.projectname 274 having t.projectcode = p.project_code), 275 p.project_customername = (select max(t.CUSTOMERNAME) 276 from bx_sq_project_tmp t 277 group by t.projectcode, t.projectname 278 having t.projectcode = p.project_code), 279 p.project_customerid = null, 280 p.project_departmentname = (select max( t.businesname) 281 from bx_sq_project_tmp t 282 group by t.projectcode, t.projectname 283 having t.projectcode = p.project_code), 284 p.project_departmentid=null, 285 p.project_begindate = (select min(t.updatedate) 286 from bx_sq_project_tmp t 287 group by t.projectcode, t.projectname 288 having t.projectcode = p.project_code), 289 p.project_enddate = (select max(case 290 when projectstate = '放弃' then 291 case 292 when giveupdate is not null then (giveupdate + 14) 293 END 294 when projectstate = '败标或失败' then case 295 when faildate is not null then 296 (faildate + 14) 297 END 298 when projectstate = '合同签署' then case 299 when submitdate is not null then 300 (submitdate + 14) 301 end 302 else null end) as enddate 303 from bx_sq_project_tmp t 304 group by t.projectcode, t.projectname 305 having t.projectcode = p.project_code) 306 where p.project_code in (select t.projectcode from bx_sq_project_tmp t); 307 --更新项目户客户信息 308 update bx_project a 309 set a.project_customername = (select c.customer_name 310 from bx_customer c 311 where c.id = a.project_customerid) 312 where a.project_customerid is not null; 313 314 update bx_project a 315 set a.project_customerid = (select max(c.id) 316 from bx_customer c 317 where c.customer_name = 318 a.project_customername) 319 where a.project_customername is not null; 320 321 update bx_project a 322 set a.project_departmentid = (select max(o.id) 323 from org_group o 324 where o.grouptypeid='dept' and o.NAME=a.project_departmentname) 325 where a.project_departmentname is not null; 326 327 328 329 330 -- 更新项目经理,项目总监的id,为报销系统id 331 update bx_project p 332 set p.project_manager = (select distinct u.id 333 from org_user u 334 where upper(u.tel) = upper(p.project_manager) and u.attr2='0'), 335 p.project_director = (select distinct u.id 336 from org_user u 337 where upper(u.tel) = upper(p.project_director) and u.attr2='0'); 338 -- 更新项目经理为空的为部门经理 339 update bx_project p 340 set p.project_manager =(select distinct u.id 341 from org_user u 342 where u.tel = (select owner 343 from org_group 344 where grouptypeid = 'dept' 345 and id = p.project_departmentid) 346 and u.attr2 = '0') 347 where p.project_manager is null; 348 --更新项目总监name,为报销系统name 349 update bx_project p 350 set p.project_manager_name = (select distinct u.name 351 from org_user u 352 where u.id = p.project_manager and u.attr2='0'), 353 p.project_director_name = (select distinct u.name 354 from org_user u 355 where u.id = p.project_director and u.attr2='0'); 356 dbms_output.put_line('售前项目处理完毕' || sysdate); 357 --插入可报销账户信息------------------------------------ 358 SELECT COUNT(*) INTO V_ACCOUNTCOUNT FROM BX_ACCOUNT; 359 IF V_ACCOUNTCOUNT = 0 --判断可报销账户为空时根据BX_PROJECT全量插入 360 THEN 361 insert into bx_account 362 (ACC_ID, 363 ACC_CODE, 364 acc_project_code, 365 ACC_NAME, 366 ACC_OWNER, 367 acc_owner_name, 368 ACC_AMOUNT, 369 ACC_BALANCE, 370 ACC_VALID_STARTTIME, 371 ACC_VALID_ENDTIME, 372 ACC_STATUS, 373 acc_type, 374 acc_type_name, 375 ACC_SHARE_DEPT, 376 ACC_SHARE_USER, 377 acc_state, 378 acc_customerid, 379 acc_customername, 380 acc_departid, 381 acc_departname) 382 select sys_guid(), 383 project_code, 384 project_code, 385 CASE 386 WHEN p.project_type = '1' then 387 '[工程]'||project_name 388 when p.project_type = '2' then 389 '[售前]'||project_name 390 when p.project_type = '3' then 391 '[C类行动]'||project_name 392 when p.project_type = '4' then 393 '[售后]'||project_name 394 ELSE 395 project_name 396 end, 397 case when project_manager is null 398 then project_director else project_manager end, 399 case when project_manager is null 400 then project_director_name else project_manager_name end, 401 case when PROJECT_COSTSUM=0.000 then null 402 else PROJECT_COSTSUM end, 403 case when PROJECT_COSTSUM=0.000 then null 404 else PROJECT_COSTSUM end, 405 project_begindate, 406 project_enddate, 407 case 408 when project_status = '正常' then 409 1 410 else 411 0 412 end, 413 CASE 414 WHEN p.project_type = '1' then 415 '1374651194796ada2hnvzv2wo8veus4rm6zgmvw6739i0devx' 416 WHEN p.project_type = '2' then 417 '1374651255197yl0of6isz8g14bds7fwmqqow1524p9b3gw3f' 418 WHEN p.project_type = '3' then 419 '1381568247245as8ijsz4neo21v7xm7af2ssc9iqhtf3i2j2s' 420 WHEN p.project_type = '4' then 421 '1381823347964o9whw2n6r88bj1np2fq4b7yspbu50kqb8hds' 422 WHEN p.project_type = '5' then 423 '13819053219062i7sr087m30r9rrhwitykfm4gaq4upmpwtey' 424 END, 425 CASE 426 WHEN p.project_type = '1' then 427 '工程项目直接费用' 428 WHEN p.project_type = '2' then 429 '售前项目直接费用' 430 WHEN p.project_type = '3' then 431 'C类行动费用' 432 WHEN p.project_type = '4' then 433 '售后项目直接费用' 434 WHEN p.project_type = '5' then 435 '售后非项目费用' 436 END, 437 '0', 438 '0', 439 '0', 440 project_customerid, 441 project_customername, 442 project_departmentid, 443 project_departmentname 444 from bx_project p; 445 END IF; 446 447 448 --插入新增的可报销账户 449 insert into bx_account 450 (ACC_ID, 451 ACC_CODE, 452 acc_project_code, 453 ACC_NAME, 454 ACC_OWNER, 455 acc_owner_name, 456 ACC_AMOUNT, 457 ACC_BALANCE, 458 ACC_VALID_STARTTIME, 459 ACC_VALID_ENDTIME, 460 ACC_STATUS, 461 acc_type, 462 acc_type_name, 463 ACC_SHARE_DEPT, 464 ACC_SHARE_USER, 465 acc_state, 466 acc_customerid, 467 acc_customername, 468 acc_departid, 469 acc_departname) 470 select sys_guid(), 471 project_code, 472 project_code, 473 CASE 474 WHEN p.project_type = '1' then 475 '[工程]'||project_name 476 WHEN p.project_type = '2' then 477 '[售前]'||project_name 478 WHEN p.project_type = '3' then 479 '[C类行动]'||project_name 480 WHEN p.project_type = '4' then 481 '[售后]'||project_name 482 ELSE 483 project_name 484 end, 485 case when project_manager is null 486 then project_director else project_manager end, 487 case when project_manager is null 488 then project_director_name else project_manager_name end, 489 case when PROJECT_COSTSUM=0.000 then null 490 else PROJECT_COSTSUM end, 491 case when PROJECT_COSTSUM=0.000 then null 492 else PROJECT_COSTSUM end, 493 project_begindate, 494 project_enddate, 495 case 496 when project_status = '正常' then 497 1 498 else 499 0 500 end, 501 CASE 502 WHEN p.project_type = '1' then 503 '1374651194796ada2hnvzv2wo8veus4rm6zgmvw6739i0devx' 504 WHEN p.project_type = '2' then 505 '1374651255197yl0of6isz8g14bds7fwmqqow1524p9b3gw3f' 506 WHEN p.project_type = '3' then 507 '1381568247245as8ijsz4neo21v7xm7af2ssc9iqhtf3i2j2s' 508 WHEN p.project_type = '4' then 509 '1381823347964o9whw2n6r88bj1np2fq4b7yspbu50kqb8hds' 510 WHEN p.project_type = '5' then 511 '13819053219062i7sr087m30r9rrhwitykfm4gaq4upmpwtey' 512 END, 513 CASE 514 WHEN p.project_type = '1' then 515 '工程项目直接费用' 516 WHEN p.project_type = '2' then 517 '售前项目直接费用' 518 WHEN p.project_type = '3' then 519 'C类行动费用' 520 WHEN p.project_type = '4' then 521 '售后项目直接费用' 522 WHEN p.project_type = '5' then 523 '售后非项目费用' 524 END, 525 '0', 526 '0', 527 '0', 528 project_customerid, 529 project_customername, 530 project_departmentid, 531 project_departmentname 532 from bx_project p 533 where p.project_code not in (select c.acc_project_code from bx_account c where c.acc_project_code is not null); 534 535 --更新可报销账户状态,owner 536 update bx_account acc 537 set acc.ACC_STATUS = (select case 538 when p.project_status = '正常' then 539 1 540 else 541 0 542 end 543 from bx_project p 544 where p.project_code = 545 acc.acc_project_code), 546 acc.ACC_OWNER = 'user:' || 547 (select case 548 when p.project_manager is null then 549 p.project_director 550 else 551 p.project_manager 552 end 553 from bx_project p 554 where p.project_code = 555 acc.acc_project_code), 556 acc.ACC_OWNER_NAME = '用户:' || 557 (select case 558 when p.project_manager is null then 559 p.project_director_name 560 else 561 p.project_manager_name 562 end 563 from bx_project p 564 where p.project_code = 565 acc.acc_project_code), 566 acc.ACC_CUSTOMERID = (select p.project_customerid 567 from bx_project p 568 where p.project_code = 569 acc.acc_project_code), 570 acc.ACC_CUSTOMERNAME = (select p.project_customername 571 from bx_project p 572 where p.project_code = 573 acc.acc_project_code), 574 acc.acc_valid_starttime = (select p.project_begindate 575 from bx_project p 576 where p.project_code = 577 acc.acc_project_code), 578 acc.acc_valid_endtime = (select p.project_enddate 579 from bx_project p 580 where p.project_code = 581 acc.acc_project_code), 582 acc.acc_amount = (select p.project_costsum 583 from bx_project p 584 where p.project_code = 585 acc.acc_project_code 586 and p.project_type = '1') --只针对工程更新额度 587 where acc.acc_project_code in 588 (select p.project_code 589 from bx_project p 590 where p.project_code is not null); 591 update bx_account acc 592 set acc.acc_departid = (select p.project_departmentid 593 from bx_project p 594 where p.project_code = 595 acc.acc_project_code and p.project_departmentid is not null), 596 acc.acc_departname = (select p.project_departmentname 597 from bx_project p 598 where p.project_code = 599 acc.acc_project_code and p.project_departmentid is not null) 600 where acc.acc_project_code in (select p.project_code from bx_project p where p.project_code is not null); 601 --更新可报销账户余额 602 update bx_account acc 603 set acc.acc_balance = acc.acc_amount-acc.acc_usedamount 604 where acc.acc_amount is not null and acc.acc_usedamount is not null and acc.acc_project_code in (select p.project_code from bx_project p where p.project_code is not null); 605 dbms_output.put_line('报销账户处理完毕' || sysdate); 606 607 ------插入可报销账户与费用关系表--------------------------- 608 --工程项目与费用关系 609 insert into bx_acc_sub_relation r 610 (id, acc_id, acc_name, subject_id, subject_name) 611 select sys_guid(), acc_id, acc_name, id, sub_name 612 from (select acc_id, acc_name 613 from bx_account 614 where (acc_type = 615 '1374651194796ada2hnvzv2wo8veus4rm6zgmvw6739i0devx') 616 and acc_id not in 617 (select distinct acc_id from bx_acc_sub_relation)) a, 618 (select id, sub_name 619 from bx_subject 620 where sub_name in 621 ('电话费', '办公费', '邮运费', '飞机票', '火车票', '订票服务费', '汽车票', '住宿费', '房租', '中介费','物业费', 622 '上网费', '电费', '水费', '燃气费','有线电视费', '暖气费', '礼品','交通票','餐费')) b; 623 624 --售后项目与费用关系 625 insert into bx_acc_sub_relation r 626 (id, acc_id, acc_name, subject_id, subject_name) 627 select sys_guid(), acc_id, acc_name, id, sub_name 628 from (select acc_id, acc_name 629 from bx_account 630 where (acc_type = 631 '1381823347964o9whw2n6r88bj1np2fq4b7yspbu50kqb8hds') 632 and acc_id not in 633 (select distinct acc_id from bx_acc_sub_relation)) a, 634 (select id, sub_name 635 from bx_subject 636 where sub_name in 637 ('电话费', '办公费', '邮运费', '飞机票', '火车票', '交通票', 638 '订票服务费', '汽车票', '住宿费', '礼品','餐费')) b; 639 640 641 --售后非项目与费用关系 642 insert into bx_acc_sub_relation r 643 (id, acc_id, acc_name, subject_id, subject_name) 644 select sys_guid(), acc_id, acc_name, id, sub_name 645 from (select acc_id, acc_name 646 from bx_account 647 where (acc_type = 648 '13819053219062i7sr087m30r9rrhwitykfm4gaq4upmpwtey') 649 and acc_id not in 650 (select distinct acc_id from bx_acc_sub_relation)) a, 651 (select id, sub_name 652 from bx_subject 653 where sub_name in('电话费', '邮运费','餐费')) b; 654 655 --售前项目与费用关系 656 insert into bx_acc_sub_relation r 657 (id, acc_id, acc_name, subject_id, subject_name) 658 select sys_guid(), acc_id, acc_name, id, sub_name 659 from (select acc_id, acc_name 660 from bx_account 661 where (acc_type = 662 '1374651255197yl0of6isz8g14bds7fwmqqow1524p9b3gw3f') 663 and acc_id not in 664 (select distinct acc_id from bx_acc_sub_relation)) a, 665 (select id, sub_name 666 from bx_subject 667 where sub_name in 668 ('办公费', '邮运费', '印刷装订费', '飞机票', '火车票', '交通票','餐费', 669 '订票服务费', '汽车票', '住宿费', '租车费', '礼品', '会议费', '汽油费', '停车费', '招标服务费','餐费')) b; 670 671 --售前C类行到与费用类型关系 672 insert into bx_acc_sub_relation r 673 (id, acc_id, acc_name, subject_id, subject_name) 674 select sys_guid(), acc_id, acc_name, id, sub_name 675 from (select acc_id, acc_name 676 from bx_account 677 where (acc_type = 678 '1381568247245as8ijsz4neo21v7xm7af2ssc9iqhtf3i2j2s') 679 and acc_id not in 680 (select distinct acc_id from bx_acc_sub_relation)) a, 681 (select id, sub_name 682 from bx_subject 683 where sub_name in 684 ('办公费', '邮运费', '印刷装订费', '飞机票', '火车票', '交通票','餐费', 685 '订票服务费', '汽车票', '住宿费', '租车费', '礼品', '会议费', '汽油费', '停车费', '招标服务费')) b; 686 687 688 --插入工程项目成员信息------------------------------------- 689 SELECT COUNT(*) INTO V_PROJECTMEMBERCOUNT FROM bx_project_member; 690 IF V_PROJECTMEMBERCOUNT = 0 --判断是否全量插入 691 THEN 692 insert into bx_project_member 693 (id, 694 project_code, 695 project_name, 696 project_member, 697 project_member_startdate, 698 project_member_enddate, 699 sa_id) 700 select sys_guid(), 701 projectcode, 702 projectname, 703 userid, 704 startdate, 705 enddate, 706 resourceid 707 from bx_project_member_tmp mt 708 where mt.projectcode in (select p.project_code from bx_project p where p.project_code is not null) 709 and mt.userid is not null and mt.projecttype='1'; 710 END IF; 711 insert into bx_project_member 712 (id, 713 project_code, 714 project_name, 715 project_member, 716 project_member_startdate, 717 project_member_enddate, 718 sa_id) 719 select sys_guid(), 720 projectcode, 721 projectname, 722 userid, 723 startdate, 724 enddate, 725 resourceid 726 from bx_project_member_tmp mt 727 where mt.projectcode in (select p.project_code from bx_project p where p.project_code is not null) 728 and mt.userid is not null and mt.projecttype='1' 729 and mt.resourceid not in (select pm.sa_id from bx_project_member pm); 730 --更新成员,开始时间,结束时间 731 update bx_project_member m 732 set m.project_member = (select mt.userid 733 from bx_project_member_tmp mt 734 where mt.resourceid = m.sa_id), 735 m.project_member_startdate = (select mt.startdate 736 from bx_project_member_tmp mt 737 where mt.resourceid = m.sa_id), 738 m.project_member_enddate = (select mt.enddate 739 from bx_project_member_tmp mt 740 where mt.resourceid = m.sa_id) 741 where m.sa_id in (select mt.resourceid from bx_project_member_tmp mt where mt.resourceid is not null); 742 --更新成员信息为报销系统id 743 update bx_project_member m 744 set m.project_member = (select distinct u.id 745 from org_user u 746 where u.tel = m.project_member and u.attr2='0'); 747 748 update bx_project_member m 749 set m.project_member_name = (select distinct u.name 750 from org_user u 751 where u.id = m.project_member and u.attr2='0'); 752 dbms_output.put_line('工程项目成员处理完毕' || sysdate); 753 --插入可报销账户权限表 754 insert into bx_acc_limit 755 (limit_id, acc_id, acc_name, limit_user_id, limit_user_name) 756 select sys_guid(), 757 acc.acc_id, 758 acc.acc_name, 759 m.project_member, 760 m.project_member_name 761 from bx_account acc, bx_project_member m 762 where acc.acc_project_code = m.project_code 763 and m.project_member is not null 764 and (select count(*) 765 from bx_acc_limit l 766 where l.acc_id = acc.acc_id 767 and l.limit_user_id = m.project_member) <= 0; 768 dbms_output.put_line('工程项目权限处理完毕' || sysdate); 769 770 771 --//售前项目权限表----------------------------// 772 773 --插入可报销账户权限表 774 insert into bx_acc_limit 775 (limit_id, acc_id, acc_name, limit_user_id, limit_user_name) 776 select sys_guid(), 777 acc.acc_id, 778 acc.acc_name, 779 (select distinct u.id from org_user u where u.tel = t.saleid and u.attr2='0'), 780 (select distinct u.name 781 from org_user u 782 where substr(u.id, instr(u.id, '/') + 1) = t.saleid and u.attr2='0') 783 from bx_account acc, bx_sq_project_tmp t 784 where acc.acc_project_code = t.projectcode 785 and t.saleid is not null 786 and (select count(*) 787 from bx_acc_limit l 788 where substr(l.limit_user_id, instr(l.limit_user_id, '/') + 1) = 789 t.saleid 790 and l.acc_id = acc.acc_id) <= 0; 791 insert into bx_acc_limit 792 (limit_id, acc_id, acc_name, limit_user_id, limit_user_name) 793 select sys_guid(), 794 acc.acc_id, 795 acc.acc_name, 796 (select distinct u.id from org_user u where u.tel = t.saleid1 and u.attr2='0'), 797 (select distinct u.name 798 from org_user u 799 where substr(u.id, instr(u.id, '/') + 1) = t.saleid1 and u.attr2='0') 800 from bx_account acc, bx_sq_project_tmp t 801 where acc.acc_project_code = t.projectcode 802 and t.saleid1 is not null 803 and (select count(*) 804 from bx_acc_limit l 805 where substr(l.limit_user_id, instr(l.limit_user_id, '/') + 1) = 806 t.saleid1 807 and l.acc_id = acc.acc_id) <= 0; 808 insert into bx_acc_limit 809 (limit_id, acc_id, acc_name, limit_user_id, limit_user_name) 810 select sys_guid(), 811 acc.acc_id, 812 acc.acc_name, 813 (select distinct u.id from org_user u where u.tel = t.presaleid and u.attr2='0'), 814 (select distinct u.name 815 from org_user u 816 where substr(u.id, instr(u.id, '/') + 1) = t.presaleid and u.attr2='0') 817 from bx_account acc, bx_sq_project_tmp t 818 where acc.acc_project_code = t.projectcode 819 and t.presaleid is not null 820 and (select count(*) 821 from bx_acc_limit l 822 where substr(l.limit_user_id, instr(l.limit_user_id, '/') + 1) = 823 t.presaleid 824 and l.acc_id = acc.acc_id) <= 0; 825 insert into bx_acc_limit 826 (limit_id, acc_id, acc_name, limit_user_id, limit_user_name) 827 select sys_guid(), 828 acc.acc_id, 829 acc.acc_name, 830 (select distinct u.id from org_user u where u.tel = t.presaleid1 and u.attr2='0'), 831 (select distinct u.name 832 from org_user u 833 where substr(u.id, instr(u.id, '/') + 1) = t.presaleid1 and u.attr2='0') 834 from bx_account acc, bx_sq_project_tmp t 835 where acc.acc_project_code = t.projectcode 836 and t.presaleid1 is not null 837 and (select count(*) 838 from bx_acc_limit l 839 where substr(l.limit_user_id, instr(l.limit_user_id, '/') + 1) = 840 t.presaleid1 841 and l.acc_id = acc.acc_id) <= 0; 842 dbms_output.put_line('售前项目权限1处理完毕' || sysdate); 843 --根据售前行动报备插入可报销账户权限表 844 845 insert into bx_acc_limit l 846 (limit_id, acc_id, limit_user_name) 847 select sys_guid(), a.acc_id, pro.d 848 from (select p.projectcode, p.d 849 from (SELECT projectcode, 850 substr(t.ca, 851 instr(t.ca, ',', 1, d.lv) + 1, 852 instr(t.ca, ',', 1, d.lv + 1) - 853 (instr(t.ca, ',', 1, d.lv) + 1)) AS d 854 FROM (SELECT projectcode, 855 ',' || participants || ',' AS ca, 856 length(participants || ',') - 857 nvl(length(REPLACE(participants, ',')), 0) AS cnt 858 FROM bx_sq_report r 859 where r.participants is not null) t, 860 (SELECT LEVEL lv FROM dual CONNECT BY LEVEL <= 100) d 861 WHERE d.lv <= t.cnt 862 ORDER BY projectcode) p 863 where p.d is not null 864 group by p.projectcode, p.d 865 order by p.projectcode) pro, 866 bx_account a 867 where a.acc_project_code = pro.projectcode 868 and (select count(*) 869 from bx_acc_limit t 870 where t.acc_id = a.acc_id 871 and t.limit_user_name = pro.d) <= 0; 872 873 update bx_acc_limit l 874 set l.acc_name = (select a.acc_name 875 from bx_account a 876 where a.acc_id = l.acc_id) 877 where l.acc_name is null; 878 879 update bx_acc_limit l 880 set l.limit_user_id = (select distinct u.id 881 from org_user u 882 where u.name = l.limit_user_name and u.attr2='0') 883 where l.limit_user_id is null; 884 885 dbms_output.put_line('售前项目权限2处理完毕' || sysdate); 886 --// 售后项目权限---- 887 888 889 insert into bx_acc_limit l 890 (limit_id, acc_id, limit_user_id) 891 select sys_guid(), a.acc_id, pro.d 892 from (select p.projectcode, p.d 893 from (SELECT projectcode, 894 substr(t.ca, 895 instr(t.ca, ',', 1, d.lv) + 1, 896 instr(t.ca, ',', 1, d.lv + 1) - 897 (instr(t.ca, ',', 1, d.lv) + 1)) AS d 898 FROM (SELECT projectcode, 899 ',' || userid || ',' AS ca, 900 length(userid || ',') - 901 nvl(length(REPLACE(userid, ',')), 0) AS cnt 902 FROM bx_project_member_tmp r 903 where r.userid is not null and (r.projecttype='4')) t, 904 (SELECT LEVEL lv FROM dual CONNECT BY LEVEL <= 100) d 905 WHERE d.lv <= t.cnt 906 ORDER BY projectcode) p 907 where p.d is not null 908 group by p.projectcode, p.d 909 order by p.projectcode) pro, 910 bx_account a 911 where a.acc_project_code = pro.projectcode 912 and (select count(*) 913 from bx_acc_limit t 914 where t.acc_id = a.acc_id 915 and t.limit_user_name = pro.d) <= 0; 916 917 --更新账户名称 918 update bx_acc_limit l 919 set l.acc_name = (select a.acc_name 920 from bx_account a 921 where a.acc_id = l.acc_id) 922 where l.acc_name is null; 923 --更新人员id 924 update bx_acc_limit l 925 set l.limit_user_id = (select distinct u.id 926 from org_user u 927 where u.tel = substr(l.limit_user_id,instr(l.limit_user_id,'/')+1) and u.attr2='0') 928 where l.limit_user_id is not null; 929 --更新人员名称 930 update bx_acc_limit l 931 set l.limit_user_name = (select distinct u.name 932 from org_user u 933 where u.id = l.limit_user_id and u.attr2='0') 934 where l.limit_user_id is not null; 935 -- 插入售后非项目OWNER 报销权限 936 insert into bx_acc_limit l 937 (limit_id, acc_id, acc_name, limit_user_id, limit_user_name) 938 select sys_guid(), 939 a.acc_id, 940 a.acc_name, 941 replace(a.acc_owner, 'user:', ''), 942 replace(a.acc_owner_name, '用户:', '') 943 from bx_account a 944 where a.acc_type_name = '售后非项目费用' 945 and a.acc_owner not in (select 'user:' || limit_user_id 946 from bx_acc_limit 947 where acc_id = a.acc_id); 948 -- 插入售后项目OWNER 报销权限 949 insert into bx_acc_limit l 950 (limit_id, acc_id, acc_name, limit_user_id, limit_user_name) 951 select sys_guid(), 952 a.acc_id, 953 a.acc_name, 954 replace(a.acc_owner, 'user:', ''), 955 replace(a.acc_owner_name, '用户:', '') 956 from bx_account a 957 where a.acc_type_name = '售后项目直接费用' 958 and a.acc_owner not in (select 'user:' || limit_user_id 959 from bx_acc_limit 960 where acc_id = a.acc_id); 961 962 COMMIT; 963 --清理无用的表数据 964 --delete from bx_project p where p.project_type='1' and not exists( select 1 from bx_project_tmp t where p.project_code=t.projectcode) ; 965 --delete from bx_project_member m where not exists(select 1 from bx_project_tmp t where t.projectcode=m.project_code); 966 --delete from bx_project p where p.project_type='2' and not exists(select 1 from bx_sq_project_tmp t where p.project_code=t.projectcode); 967 --delete from bx_account a where a.acc_type_name='工程项目直接费用' and not exists (select 1 from bx_project_tmp t where t.projectcode=a.acc_project_code); 968 --delete from bx_account a where a.acc_type_name='售前项目直接费用' and not exists (select 1 from bx_sq_project_tmp t where t.projectcode=a.acc_project_code); 969 --清除无用的账户权限 970 delete from bx_acc_limit l 971 where not exists (select 1 from bx_account a where a.acc_id = l.acc_id); 972 --清除离职的人员账户权限表 973 delete from bx_acc_limit l where not exists (select 1 from org_user u where u.attr2='0' and u.tel = substr(l.limit_user_id,instr(l.limit_user_id,'/')+1)); 974 --清除没有人员的账户权限 975 delete from bx_acc_limit where limit_user_id is null ; 976 --清除无用的账户关系 977 delete from bx_acc_sub_relation r 978 where not exists (select 1 from bx_account a where a.acc_id = r.acc_id); 979 --清除无用的票据登记信息 980 delete from bx_invoice_info b where not exists (select 1 from bx_approval a where a.batch_code=b.batch); 981 --更新工程项目费用承担人为报销人 982 update bx_account a set a.acc_share_user='1' where a.acc_type_name='工程项目直接费用' and a.acc_share_user<>'1'; 983 --更新售前项目的费用承担方式为报销人和报销人所在部门承担 984 update bx_account a set a.acc_share_dept=1 ,a.acc_share_user=1 where a.acc_type_name='售前项目直接费用' or a.acc_type_name='C类行动费用'; 985 --更新售后项目和售后非项目的费用承担方式为报销人承担 986 update bx_account a set a.acc_share_user=1 where a.acc_type_name='售后项目直接费用' or a.acc_type_name='售后非项目费用'; 987 988 commit; 989 /* 990 Exception 991 WHEN OTHERS Then 992 ROLLBACK; 993 v_err_msg:=sqlcode||';'||sqlerrm; 994 INSERT INTO BX_SYNC_RESULT R( 995 id, 996 sync_date, 997 sync_type, 998 sync_state, 999 exception, 1000 sync_data 1001 ) 1002 SELECT sys_guid(),sysdate,P_SYNC_TYPE,'0',v_err_msg,'项目' from dual; 1003 commit; 1004 */ 1005 End P_TMP_PROJECT;