zoukankan      html  css  js  c++  java
  • 存储过程 正式课和迈向课的

    ESI_QIANDAO4MAIXIANG
      1 CREATE OR REPLACE PROCEDURE "ESI_QIANDAO5MAIXIANG" (qdQRcode in varchar2, -- 签到二维码
      2 out_Course out varchar2, -- 课程期次
      3 out_Student out varchar2, -- 学员姓名
      4 out_Group out varchar2, -- 所属小组
      5 out_Tutor out varchar2, -- 助教老师
      6 out_Flag out int, -- 是否成功flag
      7 out_sqlcode out int,
      8 out_sqlerrm out varchar2,
      9 in_UserID in int, -- 用户id
     10 in_Status in int,
     11 out_SGroup out varchar2, -- 大组
     12 out_Customer out varchar2,
     13 in_AppID in varchar2) AS
     14 -- 客户名称
     15 
     16 qdID varchar2(22); --签到ID
     17 xxjhID varchar2(22); --学习计划ID
     18 jxjhID varchar2(22); --教学计划ID
     19 ddID varchar2(22); --订单ID
     20 xxjhPlanNumber int; -- 学习计划表中计划人数
     21 xxjhAlreadyCourse int; -- 学习计划中已签到人数
     22 qdAccountid int; -- 客户ID
     23 qdAccountBaohuYigou int; -- 客户池:保护池/已购池
     24 ddIDCreateTime varchar2(22); -- 签到表对应订单的创建时间
     25 khStatePrew int; -- 客户原来的状态(更新前的状态)
     26 
     27 out_unpayed_amount int; -- 订单中未收款金额
     28 
     29 out_org_id varchar2(22);
     30 out_yckb_id int;
     31 
     32 in_the_AppID varchar2(22); --签到的AppID
     33 
     34 out_the_Flag int; --先查询二维码是否过期,即以签到表对应的教学计划中课程的开始和结束日期作为条件
     35 
     36 begin
     37 begin
     38 
     39 /* 
     40 ----------------------------------------------------------------------
     41 先进行7项检查
     42 1 非法的二维码 
     43 2 签到二维码已过期 
     44 3 未到签到时间 
     45 4 签到状态为是,即已签到
     46 5 签到表类型为正式课
     47 6 签到表的参课判定不是参加
     48 7 未收款金额是否>0, >0则需要先收款,才可以签到
     49 ----------------------------------------------------------------------
     50 */
     51 
     52 -- 1 非法的二维码
     53 select count(yckb_id)
     54 into out_the_Flag
     55 from tcu_yckb
     56 where qrcode = qdQRcode;
     57 
     58 if out_the_Flag = 0 then
     59 out_the_Flag := null;
     60 goto InvalidQrCode;
     61 end if;
     62 
     63 -- 2 签到表类型为正式课
     64 SELECT count(t.yckb_id)
     65 into out_the_Flag
     66 FROM tcu_yckb t
     67 inner join tc_contact tc
     68 on t.yckb_refid01 = tc.contact_id
     69 and tc.org_id = t.org_id
     70 inner join tcu_jiaoxplan jp
     71 on t.yckb_refid02 = jp.jiaoxplan_id
     72 and t.org_id = jp.org_id
     73 inner join tc_account khb
     74 on tc.account_id = khb.account_id
     75 and khb.org_id = tc.org_id
     76 where t.yckb_type = 2132 -- 迈向课
     77 and t.qrcode = qdQRcode;
     78 
     79 if out_the_Flag = 0 then
     80 out_the_Flag := null;
     81 goto TheQrCodeTypeIsZhengShi;
     82 end if;
     83 
     84 -- 3 签到二维码已过期
     85 SELECT count(t.yckb_id)
     86 into out_the_Flag
     87 FROM tcu_yckb t
     88 inner join tc_contact tc
     89 on t.yckb_refid01 = tc.contact_id
     90 and tc.org_id = t.org_id
     91 inner join tcu_jiaoxplan jp
     92 on t.yckb_refid02 = jp.jiaoxplan_id
     93 and t.org_id = jp.org_id
     94 inner join tc_account khb
     95 on tc.account_id = khb.account_id
     96 and khb.org_id = tc.org_id
     97 where (trunc(jp.jiaoxplan_date02 + 1) - 1 / 24 / 60 / 60) < sysdate -- 当前时间>结课日期的23:59:59
     98 and t.qrcode = qdQRcode;
     99 
    100 if out_the_Flag = 1 then
    101 out_the_Flag := null;
    102 goto TheCourceIsOver;
    103 end if;
    104 
    105 -- 4 未到签到时间
    106 SELECT count(t.yckb_id)
    107 into out_the_Flag
    108 FROM tcu_yckb t
    109 inner join tc_contact tc
    110 on t.yckb_refid01 = tc.contact_id
    111 and t.org_id = tc.org_id
    112 inner join tcu_jiaoxplan jp
    113 on t.yckb_refid02 = jp.jiaoxplan_id
    114 and t.org_id = jp.org_id
    115 inner join tc_account khb
    116 on tc.account_id = khb.account_id
    117 and tc.org_id = khb.org_id
    118 where jp.jiaoxplan_date01 - 1 > trunc(sysdate) -- 当前时间<报到日(开课日期前一天)0点,即未到可签到时间
    119 and t.qrcode = qdQRcode;
    120 
    121 if out_the_Flag = 1 then
    122 out_the_Flag := null;
    123 goto CantQianDao;
    124 end if;
    125 
    126 -- 5 签到状态为是,即已签到 
    127 SELECT count(t.yckb_id)
    128 into out_the_Flag
    129 FROM tcu_yckb t
    130 inner join tc_contact tc
    131 on t.yckb_refid01 = tc.contact_id
    132 and tc.org_id = t.org_id
    133 inner join tcu_jiaoxplan jp
    134 on t.yckb_refid02 = jp.jiaoxplan_id
    135 and t.org_id = jp.org_id
    136 inner join tc_account khb
    137 on tc.account_id = khb.account_id
    138 and khb.org_id = tc.org_id
    139 where t.yckb_int03 = 1001 -- 签到状态:否
    140 and t.qrcode = qdQRcode;
    141 
    142 if out_the_Flag = 0 then
    143 out_the_Flag := null;
    144 goto TheQrCodeAlreadySigned;
    145 end if;
    146 
    147 -- 6 签到表的参课判定不是参加
    148 SELECT count(t.yckb_id)
    149 into out_the_Flag
    150 FROM tcu_yckb t
    151 inner join tc_contact tc
    152 on t.yckb_refid01 = tc.contact_id
    153 and tc.org_id = t.org_id
    154 inner join tcu_jiaoxplan jp
    155 on t.yckb_refid02 = jp.jiaoxplan_id
    156 and t.org_id = jp.org_id
    157 inner join tc_account khb
    158 on tc.account_id = khb.account_id
    159 and khb.org_id = tc.org_id
    160 where t.yckb_int05 = 1001 -- 参课判定:参加
    161 and t.qrcode = qdQRcode;
    162 
    163 if out_the_Flag = 0 then
    164 out_the_Flag := null;
    165 goto TheQrCodeTypeIsnotCanjia;
    166 end if;
    167 
    168 -- 7 查询未收款金额
    169 select contract_unpayed_amount
    170 into out_unpayed_amount
    171 from tc_contract
    172 where contract_id =
    173 (select ref_3 from tcu_yckb where qrcode = qdQRcode);
    174 
    175 -- 未收款金额>0 ,需要先缴费
    176 if out_unpayed_amount > 0 then
    177 out_the_Flag := null;
    178 goto PayFirst;
    179 end if;
    180 
    181 /* 
    182 
    183 改造选“没查到符合条件的签到表”中的逻辑,继续细化成几种情况
    184 没查到符合条件的签到表,
    185 可能情况:
    186 1 签到表的参课判定为 不参加; 
    187 2 签到表的类型为:迈向课签到表;
    188 3 签到表的签到状态为:是
    189 
    190 SELECT count(t.yckb_id)
    191 into out_the_Flag
    192 FROM tcu_yckb t
    193 inner join tc_contact tc
    194 on t.yckb_refid01 = tc.contact_id
    195 and tc.org_id = t.org_id
    196 inner join tcu_jiaoxplan jp
    197 on t.yckb_refid02 = jp.jiaoxplan_id
    198 and t.org_id = jp.org_id
    199 inner join tc_account khb
    200 on tc.account_id = khb.account_id
    201 and khb.org_id = tc.org_id
    202 where
    203 -- jp.jiaoxplan_date01 >= trunc(sysdate)
    204 -- and (trunc(jp.jiaoxplan_date02 + 1) - 1 / 24 / 60 / 60) > sysdate
    205 
    206 -- 当前日期>=报到日(开课日期前一天)0点,其当前日期<=结课日期的23:59:59
    207 jp.jiaoxplan_date01 - 1 <= trunc(sysdate)
    208 and trunc(jp.jiaoxplan_date02 + 1) - 1 / 24 / 60 / 60 >= sysdate
    209 and t.yckb_int03 = 1001 -- 签到状态:否
    210 -- and t.yckb_type = 2136 -- 正式课
    211 and t.yckb_int05 = 1001 -- 参课判定:参加
    212 and t.qrcode = qdQRcode;
    213 
    214 -- 没查到符合条件的签到表
    215 if out_the_Flag = 0 then
    216 out_the_Flag := null;
    217 goto NoRecordddd;
    218 end if;
    219 
    220 */
    221 
    222 -- 1 签到动作本身
    223 -- 获取签到表相关信息
    224 -- 获取签到表ID
    225 select tb.yckb_id,
    226 tb.ref_3,
    227 tb.yckb_refid02,
    228 tb.account_id,
    229 tc.create_time -- 签到表对应订单的创建时间
    230 into qdID, ddID, jxjhID, qdAccountid,ddIDCreateTime
    231 from tcu_yckb tb
    232 inner join tc_contract tc
    233 on tb.ref_3 = tc.contract_id
    234 where tb.qrcode = qdQRcode;
    235 
    236 -- 获取学习计划ID
    237 -- 先查询
    238 SELECT count(t.ref_1)
    239 into out_the_Flag
    240 from tcu_yckb_1_1 t
    241 where yckb_id = qdID;
    242 
    243 if out_the_Flag = 0 then
    244 goto NoXueXiPlan;
    245 end if;
    246 
    247 -- 再获取
    248 select ref_1 into xxjhID from tcu_yckb_1_1 where yckb_id = qdID;
    249 
    250 -- 更新签到表 更新字段:是否签到,有效到场/合格总裁,签到时间,是否电子签到
    251 update tcu_yckb
    252 set yckb_int03 = '1001',
    253 -- set yckb_int03 = '1002', -- lgy eidt @2015-5-12 for 可以多次签到
    254 yckb_int06 = '1002', -- 先默认是否,签到更新的时候再更新此字段
    255 yckb_date01 = sysdate - 1 / 3,
    256 IsESI = 1
    257 where yckb_id = qdID;
    258 
    259 -- 更新签到表扩展表 更新字段:yckb_refid06 签到人
    260 update tcu_yckb_xattr
    261 set yckb_refid06 = in_UserID
    262 where yckb_id = qdID;
    263 
    264 -- 更新学习计划表
    265 update tcu_learnplan
    266 set learnplan_dec04 = learnplan_dec04 + 1,
    267 learnplan_dec05 = learnplan_dec05 - 1
    268 where learnplan_id = xxjhID;
    269 -- 获取学习计划中的计划人数,已签到人数
    270 select learnplan_dec04, learnplan_dec01
    271 into xxjhPlanNumber, xxjhAlreadyCourse
    272 from tcu_learnplan
    273 where learnplan_id = xxjhID;
    274 -- 如果学习计划中的计划人数=已签到人数,则此学习计划的状态设置为完成
    275 if (xxjhPlanNumber = xxjhAlreadyCourse) then
    276 update tcu_learnplan
    277 set learnplan_int03 = 1003
    278 where learnplan_id = xxjhID;
    279 end if;
    280 
    281 -- 更新订单表
    282 update tc_contract tct
    283 set cntrt_dec03 = cntrt_dec03 + 1, cntrt_dec09 = cntrt_dec09 - 1
    284 where tct.contract_id = ddID;
    285 
    286 -- 更新客户状态 :如果客户所在客户池,不是已购池,则 1 把客户状态改为:迈向签到状态 2 记录客户状态变更表
    287 select acct_int02, acct_int03
    288 into qdAccountBaohuYigou, khStatePrew
    289 from tc_account
    290 where account_id = qdAccountid;
    291 
    292 if (qdAccountBaohuYigou <> 1004) then
    293 -- 1 更改客户状态
    294 update tc_account
    295 set acct_int03 = 1010
    296 where account_id = qdAccountid;
    297 -- 2 写更改客户状态日志表及相关
    298 -- 2.1 写更改客户状态日志表
    299 insert into tcu_cuschange
    300 (ORG_ID,
    301 cuschange_id,
    302 account_id,
    303 owner_user_id,
    304 create_user_id,
    305 create_time,
    306 modify_user_id,
    307 modify_time,
    308 dept_id,
    309 cuschange_int03,
    310 cuschange_int04)
    311 values
    312 (1,
    313 (select max(cuschange_id) + 1 from tcu_cuschange),
    314 qdAccountid,
    315 in_UserID,
    316 in_UserID,
    317 ddIDCreateTime, -- 签到表对应订单的创建时间
    318 in_UserID,
    319 sysdate,
    320 (select dept_id from tc_user where user_id = in_UserID), -- 用户所在的部门ID
    321 khStatePrew,
    322 1010);
    323 
    324 -- 2.2 写更改客户状态日志表 tcu_cuschange_attr 表
    325 insert into tcu_cuschange_attr
    326 (org_id, cuschange_ID, cuschange_refid03, cuschange_refid04)
    327 values
    328 (1, (select max(cuschange_id) from tcu_cuschange), in_UserID, 0);
    329 
    330 -- 2.3 写更改客户状态日志表 tcu_cuschange_xattr 表 
    331 insert into tcu_cuschange_xattr
    332 (org_id,
    333 cuschange_ID,
    334 cuschange_refid05,
    335 cuschange_refid06,
    336 cuschange_refid07,
    337 cuschange_refid08)
    338 values
    339 (1, (select max(cuschange_id) from tcu_cuschange), 0, 0, 0, 0);
    340 
    341 end if;
    342 
    343 -- 获取要返回的信息
    344 SELECT tat.account_name,
    345 t.yckb_int01, -- 大组
    346 tc.contact_name,
    347 ub.user_name,
    348 -- substr(to_char(t.yckb_int09), 3, 2),
    349 t.yckb_int09, -- 小组
    350 jp.jiaoxplan_name,
    351 t.org_id,
    352 t.yckb_id
    353 into out_Customer,
    354 out_SGroup,
    355 out_Student,
    356 out_Tutor,
    357 out_Group,
    358 out_Course,
    359 out_org_id,
    360 out_yckb_id
    361 FROM tcu_yckb t
    362 left join tc_account tat
    363 on tat.account_id = t.account_id
    364 left join tcu_yckb_attr b
    365 on t.yckb_id = b.yckb_id
    366 and b.org_id = t.org_id
    367 left join tcu_yckb_1_1 c
    368 on t.yckb_id = c.yckb_id
    369 and c.org_id = t.org_id
    370 left join tc_user ub
    371 on b.yckb_refid04 = ub.user_id
    372 and ub.org_id = b.org_id
    373 left join tc_contact tc
    374 on t.yckb_refid01 = tc.contact_id
    375 and tc.org_id = t.org_id
    376 left join tcu_jiaoxplan jp
    377 on t.yckb_refid02 = jp.jiaoxplan_id
    378 and jp.org_id = t.org_id
    379 WHERE QRCODE = qdQRcode
    380 and t.yckb_id = qdID
    381 and rownum = 1;
    382 
    383 -- 得到大组信息 
    384 if out_SGroup <> '0' then
    385 select distinct enum_value
    386 into out_SGroup
    387 from tc_enum_str
    388 where attr_name = 'yckb.newdazu'
    389 and enum_key = out_SGroup
    390 order by enum_key desc;
    391 end if;
    392 
    393 -- 得到小组信息 
    394 if out_Group <> '0' then
    395 out_Group := substr(out_Group, 3, 2);
    396 end if;
    397 
    398 -- 获取到实际的appID
    399 select appid into in_the_AppID from ESI_Client where authno = in_AppID;
    400 -- 2 写签到日志表
    401 
    402 insert into esi_signinlog
    403 (org_id,
    404 yckb_id,
    405 appid,
    406 userid,
    407 qrcode,
    408 course,
    409 student,
    410 tutor,
    411 learninggroup,
    412 signintime,
    413 status)
    414 values
    415 (out_org_id,
    416 out_yckb_id,
    417 in_the_AppID,
    418 in_UserID,
    419 qdQRcode,
    420 out_Course,
    421 out_Student,
    422 out_Tutor,
    423 out_Group,
    424 sysdate() - 1 / 3,
    425 in_Status);
    426 
    427 commit;
    428 out_Flag := 100;
    429 exception
    430 when others then
    431 
    432 out_sqlcode := sqlcode;
    433 out_sqlerrm := sqlerrm;
    434 
    435 rollback;
    436 out_Flag := 999;
    437 
    438 end;
    439 
    440 <<NoXueXiPlan>>
    441 if (out_Flag is null) then
    442 out_Flag := 101; -- 没找到对应的学习计划
    443 out_sqlerrm := '没找到对应的学习计划。';
    444 end if;
    445 
    446 <<TheCourceIsOver>>
    447 if (out_Flag is null) then
    448 out_Flag := 103; -- 当前课程已结束
    449 out_sqlerrm := '该课程已结束,请确认。';
    450 end if;
    451 
    452 <<CantQianDao>>
    453 if (out_Flag is null) then
    454 out_Flag := 104; -- 未到签到时间
    455 out_sqlerrm := '该课程尚未开始签到,请确认。';
    456 end if;
    457 
    458 <<PayFirst>>
    459 if (out_Flag is null) then
    460 out_Flag := 105; -- 有未收款金额
    461 out_sqlerrm := '未收款金额:¥' || to_char(out_unpayed_amount) || '';
    462 end if;
    463 
    464 <<TheQrCodeAlreadySigned>>
    465 if (out_Flag is null) then
    466 out_Flag := 106; -- 此二维码已经签到过
    467 out_sqlerrm := '此二维码已经签到过,请确认。';
    468 end if;
    469 
    470 <<TheQrCodeTypeIsnotCanjia>>
    471 if (out_Flag is null) then
    472 out_Flag := 108; -- 此签到表的参课判定不是参加
    473 out_sqlerrm := '此签到表的参课判定不是参加,请确认。';
    474 end if;
    475 
    476 <<TheQrCodeTypeIsZhengShi>>
    477 if (out_Flag is null) then
    478 out_Flag := 107; -- 此签到表的类型为正式课
    479 out_sqlerrm := '此签到表的类型为正式课,请确认。';
    480 end if;
    481 
    482 <<InvalidQrCode>>
    483 if (out_Flag is null) then
    484 out_Flag := 102; -- 非法的签到二维码
    485 out_sqlerrm := '不可识别的签到二维码,请确认。';
    486 end if;
    487 
    488 end;
    View Code
    ESI_GETLEARNPLAN
     1 create or replace procedure ESI_GetLearnPlan(
     2           in_phone_number in varchar2, 
     3           in_company_name in varchar2, 
     4           in_status in int,  
     5           out_learnPlanId out int,        --学习计划ID
     6           out_course_name out varchar2,   --课程名称
     7           out_status out int,             --0:未开课、1:已开课、2:全部
     8           out_start_date out varchar2,    --课程开始日期
     9           out_end_date out varchar2,      --课程结束日期
    10           out_students out varchar2,      --已签到学员姓名数组
    11           out_plan_count out int,         --签到人数
    12           out_is_confirm out int ,    --是否确认 (true或false)
    13           out_is_manager out boolean  --是否为确认人
    14           ) as 
    15           tc_account_id       varchar2(22); --客户Id     
    16 begin
    17   
    18 
    19 
    20 --获取客户Id
    21 
    22 select a.account_id into tc_account_id  from tc_account a left join tc_account_attr b on a.account_id=b.account_id
    23 where a.org_id=1 and a.org_id=b.org_id and a.account_id=b.account_id
    24 and a.account_name= in_company_name
    25 and (
    26 a.account_mobile_phone = in_phone_number
    27 or a.account_phone=in_phone_number
    28 or b.acct_char14= in_phone_number
    29 
    30 or exists(
    31 select 1 from tc_contact c where c.org_id=1 and (c.mobile= in_phone_number or c.cnct_char03= in_phone_number) and c.account_id=a.account_id
    32 )
    33 );
    34 
    35 /*if tc_account_id = null then   
    36 tc_account_id := 0; 
    37 end if;
    38 */
    39 --根据客户取学习计划
    40 select l.learnplan_id ,                     --学习计划ID
    41        l.learnplan_int01 ,                  --是否确认 (true或false)
    42        l.learnplan_dec04 ,                  --签到人数       
    43        l.learnplan_start_date,              --开始时间
    44        l.learnplan_end_date,                --结束日期 
    45        l.learnplan_name,                    --课程名称
    46        
    47        CASE WHEN in_status=0 then 1 else   l.learnplan_stage                    --状态0:未开课、1:已开课、2:全部
    48       into out_learnPlanId ,out_is_confirm , out_plan_count ,out_start_date, out_end_date ,out_course_name,out_status
    49       from tcu_learnplan l
    50       where l.org_id=1 
    51       and l.account_id=tc_account_id
    52       and l.learnplan_type='2151';             --正式学习计划
    53 
    54 
    55 
    56 
    57   
    58  if in_status=0 then --未开课 加下面条件
    59 
    60 
    61  and  if then
    62       exists(
    63       select 1 from tcu_jiaoxplan j where j.org_id=1 and  j.jiaoxplan_date01 > sysdate  and j.jiaoxplan_id=a.learnplan_refid02
    64       )     
    65       end if
    66 
    67 
    68 
    69 end if
    70 
    71 --去签到表里获取
    72 
    73 
    74 
    75 
    76 
    77 
    78 
    79 
    80 
    81 
    82 
    83 end ESI_GetLearnPlan;
    View Code

    ESI_MARKSTATE

     1 CREATE OR REPLACE PROCEDURE "ESI_MARKSTATE" (in_QRCode   in varchar2,
     2                                           in_State    in int,
     3                                           out_Flag    out number,
     4                                           out_sqlcode out int,
     5                                           out_sqlerrm out varchar2) as
     6   /*
     7        范  围:和微众对接
     8        作  用:更新迈向签到课程的“有效到场/合格总裁 "1001:是;1002:否;1003:无名片"”
     9      发生时间:微众调用我们更新签到接口后
    10      最后更新:2015-05-08 pm
    11   */
    12   the_State    int;
    13   out_the_Flag int;
    14 begin
    15 
    16   if in_State = 0 then
    17     the_State := 1001;
    18   elsif in_State = 1 then
    19     the_State := 1002;
    20   elsif in_State = 2 then
    21     the_State := 1003;
    22   end if;
    23 
    24   begin
    25   
    26     select count(yckb_id)
    27       into out_the_Flag
    28       from tcu_yckb
    29      where yckb_int03 = 1001 -- 已签到
    30        and qrcode = in_QRCode;
    31   
    32     if out_the_Flag = 0 then
    33       out_the_Flag := null;
    34       goto InvalidQrCode;
    35     end if;
    36   
    37     update tcu_yckb set yckb_int06 = the_State where qrcode = in_QRCode;
    38   
    39     out_Flag := 100;
    40     commit;
    41   exception
    42     when others then
    43       out_sqlcode := sqlcode;
    44     
    45       out_sqlerrm := sqlerrm;
    46     
    47       rollback;
    48       out_Flag := 999;
    49     
    50   end;
    51 
    52   <<InvalidQrCode>>
    53   if (out_Flag is null) then
    54     out_Flag    := 105; -- 非法的签到二维码
    55     out_sqlerrm := '不可识别的签到二维码,请确认。';
    56   end if;
    57 
    58 end;
    View Code
  • 相关阅读:
    MySQL(十五)之数据备份中mysqldump详解
    MySQL(十四)之数据备份与还原
    MySQL(十三)之MySQL事务
    Flink MysqlSink 简单样例
    Flink FileSink 自定义输出路径——StreamingFileSink、BucketingSink 和 StreamingFileSink简单比较
    Flink FileSink 自定义输出路径——BucketingSink
    【翻译】Flink Joining
    Flink 异步IO访问外部数据(mysql篇)
    【翻译】Flink 异步I / O访问外部数据
    Flink 自定义source和sink,获取kafka的key,输出指定key
  • 原文地址:https://www.cnblogs.com/mazida6/p/4949246.html
Copyright © 2011-2022 走看看