移动1099存储过程

时间:2022-06-14 18:34:33

移动1099存储过程   declare @phone_id as int declare @phone as varchar( 50) declare @province as varchar( 50) --号码归属省 declare @price as decimal( 10, 2 )   declare @cityareacode as varchar( 50) --号码归属市 declare @callerid as int --拨号机 declare @CenterId as int  --中心id declare @centerQueue as varchar( 1024) --中心队列 declare @msgqueue as varchar( 1024) --信息队列 declare @ccid as varchar( 50) --cid declare @yys int declare @owner_card_id as int --自己卡的ID declare @cardflag as varchar( 50) --卡类型 declare @cardwantmoney as int  --卡面额 declare @currentMinuteOfDay as int --已到账时间 --wzhadd 如果时间小于60秒就返回空 set @phone_id= 0     set @owner_card_id= 0 set @callerid= 0   set @cardflag= ‘‘ set @phone = ‘‘ set @province= ‘‘ set @price = 0 set @cityareacode= ‘‘ set @cardwantmoney= 0   set @centerQueue = ‘‘ set @msgqueue = ‘‘ set @ccid= ‘‘   set @currentMinuteOfDay = DATEPART( hour, getdate())*60 DATEPART( minute, getdate());   -- -100 ,-200不走卡密的 ----with(readpast):查询不到任何记录(记录被锁住将查询不到该记录);CROSS JOIN连接用于生成两张表的笛卡尔集。将两张表的情况全部列举出来 --isEnable激活的 select top 1 @yys=a .yys, @phone_id=a .id, @phone=phone ,@province= a.province , @cityareacode=a .cityareacode, @cardflag=b .CardFlag, @cardwantmoney=b .cardwantmoney from do_phone a with (readpast)   cross join Setting_Card_Alloc b where a. id=118109241 and a. yys=0 and a. currentmoney<a .wantmoney and a.dotype not in(- 100 ,-200 ) and a.isfinal =0 and a. del_flag=0 and a. isowner=0 and a. maxendtime<dateadd (minute, 10,getdate ()) and b.isEnable =1     --and dbo.isSTKCanProcess(a.province,a.cityareacode,a.yys,a.wantmoney-a.currentmoney)=0 --关键词 DISTINCT 用于返回唯一不同的值。 and b. cardflag in (select cardflag from Owner_CardFlag where cardmoney=b .cardwantmoney and isenable=1 and CardFlag in (select Distinct CardFlag from Owner_Card with( readpast) where state =0 and CardMoney=b. cardwantmoney)) and a. yys=b .yys and ( a.Province =b. Province or b .Province is NULL) and ( a.cityareacode =b. city or b .city is NULL) and ( a.wantmoney -a. currentmoney>=cardwantmoney ) and (           (                a .wantmoney- a.currentmoney =b. doPhoneWantmoneyDecCurrentmoney and                (                     (b. doPhoneWantmoneyLimit=1 and a. wantmoney=b .doPhoneWantmoneyDecCurrentmoney)                     or                     (b. doPhoneWantmoneyLimit=0 and a. wantmoney<>b .doPhoneWantmoneyDecCurrentmoney)                     or                     b .doPhoneWantmoneyLimit is NULL                )           )               or           b .doPhoneWantMoneyDecCurrentmoney is NULL )     --15 and ( a.province =b. Province or b .Province is null)   and ( b.splitflag is NULL or b .splitflag like ‘%‘ cast(a .splitflag as varchar( 10)) ‘,%‘ or b .splitflag like ‘%,‘ cast (a. splitflag as varchar(10 )) ‘‘ or b. splitflag like ‘%,‘ cast (a. splitflag as varchar(10 )) ‘,%‘) and (      b .CardFlag<> ‘chinaszx‘      or      (           b .CardFlag= ‘chinaszx‘ and           a .id not in           (           --DATEDIFF ( datepart , startdate , enddate )时间差                select phoneid from Setting_Card_PhoneDisable where datediff(s ,getdate(), MaxEnableTime)>0           )      ) ) and a. phone not in(SELECT phone FROM Do_Phone with (nolock) WHERE  state in( 1)) --控制dbo.Setting_Card_Alloc中卡的可用时间段2010-11-29 and ( datediff(minute ,CONVERT( varchar(100 ), GETDATE (), 23), getdate()) between b. TimeBegin and b.TimeEnd)     --14.[dbo].[Setting_Disable_City] 里面的城市不处理 移动的表 and   ( a.cityareacode not in( select city from [dbo].[Setting_Disable_City] where cardflag= ‘chinaszx‘) or a.yys<> 0)     --15 瀚鹏接口24小时内不准重复提交相同的号码 --and ((b.cardflag=‘HP_V_CARD‘ and a.phone not in (select distinct phone from do_log with(nolock) -- where createtime>dateadd(n,-1450,getdate()) and cardflag=‘HP_V_CARD‘ and province in(‘天津‘,‘浙江‘,‘广东‘))) --or b.cardflag<>‘HP_V_CARD‘) --错误次数大于0的不准走hp,jy,tl --and ((b.cardflag in (‘HP_V_CARD‘,‘JY_YD_CARD‘,‘TL_YD_CARD‘) and a.errcount=0) or b.cardflag not in (‘HP_V_CARD‘,‘JY_YD_CARD‘,‘TL_YD_CARD‘)) --dotype=-1003 and (( b.cardflag in ( ‘HP_V_CARD‘,‘JY_YD_CARD‘ ,‘TL_YD_CARD‘, ‘JY_DX_CARD‘,‘YX_YD_CARD‘ ) and a.errcount= 0) or ( b.cardflag not in (‘HP_V_CARD‘ ,‘JY_YD_CARD‘, ‘TL_YD_CARD‘,‘JY_DX_CARD‘ ,‘YX_YD_CARD‘))   or (b. cardflag in (‘HP_V_CARD‘, ‘JY_YD_CARD‘,‘TL_YD_CARD‘ ,‘JY_DX_CARD‘, ‘YX_YD_CARD‘)    and (a. dotype=-1003 or a. WantMoney-a .CurrentMoney= 5))) --and ((b.cardflag in (‘JY_YD_CARD‘,‘TL_YD_CARD‘) and a.errcount=0) or (b.cardflag not in (‘JY_YD_CARD‘,‘TL_YD_CARD‘)) --or (b.cardflag in (‘JY_YD_CARD‘,‘TL_YD_CARD‘) and a.dotype=-1003))   --17 --exists (sql 返回结果集为真) --not exists (sql 不返回结果集为真) and not exists(select 1 from dbo .Setting_CardFLag_Disable_PhoneChannel s where s.FromChannel= a.from_channel and s. FromChannelChild=a .from_channel_child and b.CardFlag =s. CardFlag and isEnable= 1) and not exists(select 1 from dbo .Setting_CardFLag_Disable_PhoneChannel s where s.FromChannel= a.from_channel and s. FromChannelChild is null and b.CardFlag =s. CardFlag and isEnable =1) and a. Province in (                SELECT PhoneProvince                         FROM Setting_Caller_PhoneProvinceCityArea_OperateFlag_Relate c                        WHERE (c .yys= a.yys ) and (c .isenable = 1) AND                (                (c. PhoneProvince c .OperateFlag IN                             (SELECT d .PhoneProvince d.OperateFlag                             FROM Setting_CardFlag_PhoneProvinceCityArea_OperateFlag_Relate d                             WHERE (d .yys= a.yys ) and (d .CardFlag = b.CardFlag ) AND (d .PhoneProvince = a.province ) AND  ( d.ProvinceOrCityAreaCode = 0)                     )                )                OR                        (c. PhoneCityAreaCode c .OperateFlag IN                             (SELECT e .PhoneCityAreaCode e.OperateFlag                             FROM Setting_CardFlag_PhoneProvinceCityArea_OperateFlag_Relate e                            WHERE  (e .yys= a.yys ) and( e.CardFlag = b. CardFlag) AND ( e.PhoneCityAreaCode = a.CityAreaCode) AND (e. ProvinceOrCityAreaCode = 1 )                     )                          )                )                                    and c. callerid in (select callerid from Setting_Caller where isenable=1 and activestate= 0 )                ) order by a.maxendtime ,b. Urgency desc print ‘@province=‘ @province; print ‘@cardflag=‘ @cardflag; print ‘@cardwantmoney=‘ cast( @cardwantmoney as varchar(20 )); return;   if(@phone_id <>0) begin      select TOP 1 @callerid=CallerID, @msgqueue=msgqueue ,@CenterId= Centerid,@centerQueue =CenterQueue, @ccid=ccid      from(      SELECT TOP 1 CASE province WHEN @province THEN 0 ELSE 1 END AS isThisProvince, *      FROM Setting_Caller z      WHERE (z .ActiveState = 0)  and           --(z.callerid<>1001) and             (z. isEnable = 1 ) and             (z. CallerID IN                  (                SELECT CallerID                         FROM Setting_Caller_PhoneProvinceCityArea_OperateFlag_Relate a                        WHERE (a .yys= @yys) and ( a.isenable = 1) AND                (                (a. PhoneProvince a .OperateFlag IN                             (SELECT b .PhoneProvince b.OperateFlag                             FROM Setting_CardFlag_PhoneProvinceCityArea_OperateFlag_Relate b                             WHERE  (b .yys= @yys) and ( b.CardFlag = @cardFlag) AND (b. PhoneProvince = @province) AND   (b .ProvinceOrCityAreaCode = 0)                     )                )                OR                        (a. PhoneCityAreaCode a .OperateFlag IN                             (SELECT c .PhoneCityAreaCode c.OperateFlag                             FROM Setting_CardFlag_PhoneProvinceCityArea_OperateFlag_Relate c                            WHERE  (c .yys= @yys) and(c. CardFlag = @cardFlag ) AND (c .PhoneCityAreaCode = @cityareacode) AND (c .ProvinceOrCityAreaCode = 1)                     )                          )                )                  )              )              and Centerid not in (                     select distinct Centerid from setting_centerid_disable_phoneseg where @phone like phoneseg ‘%‘              )      --ORDER BY CallerLevel,isThisProvince,ActiveTime      --张明峰临时修改      --ORDER BY case when callerid>=858 and callerid<866 then 1 else 2 end, CallerLevel,isThisProvince,ActiveTime      --20110921修改,超时的号码有限走中心12拨号机      ORDER BY case when Centerid= 3 then 1 else 2 end , CallerLevel, isThisProvince,ActiveTime      ) as z        if(@callerid <>0)      begin           if(@cardflag =‘chinaszx‘)                begin                --取一个字符串的前若干位 select left(‘abcdefg‘, 3) 输出: abc 也可以用select left(FIELD, 3) from TABLE                --输出这个表中所有数据FIELD列的前三个字符                     if(@cardwantmoney =20 and @yys=0 and left( @phone,2 )<>‘15‘ and @province<> ‘青海‘ and @province<>‘*‘ and @province<> ‘广东‘)                     begin                          select top 1 @owner_card_id=id ,@price= OurFeeMoney                          from owner_card                          where state =0 and cardflag=@cardflag and cardmoney= @cardwantmoney                          --zmf update 20110501                          --and left(cardpass,3)<>‘151‘                          and dbo.[isCardCanChangePhoneWithProvinceAndCity_2](cardflag ,cardid, cardpass,@phone ,@province, @cityareacode)=1                          and left( cardpass,2 ) not in                          (                               select passwordleft2 FROM Setting_CardGroup_SZX_ProvinceDisable with(nolock ) WHERE MaxEnableTime > dateadd( hour,1 ,getdate()) and isEnable = 1 and Disable_Province=@Province                          )                     end                     else                     begin                          select top 1 @owner_card_id=id ,@price= OurFeeMoney                          from owner_card                          where state =0 and cardflag=@cardflag and cardmoney= @cardwantmoney                          and dbo.[isCardCanChangePhoneWithProvinceAndCity_2](cardflag ,cardid, cardpass,@phone ,@province, @cityareacode)=1                          and left( cardpass,2 ) not in                          (                               select passwordleft2 FROM Setting_CardGroup_SZX_ProvinceDisable with(nolock ) WHERE MaxEnableTime > dateadd( hour,1 ,getdate()) and isEnable = 1 and Disable_Province=@Province                          )                     end                     --order by dbo.[isCardCanChangePhoneWithProvinceAndCity](cardpass,@phone,@province,@cityareacode) desc                                                             -- order by PhoneId desc                     if(@owner_card_id <=0)                     begin                          insert into Setting_Card_PhoneDisable( Phoneid,Phone ,MaxEnableTime, cardflag,cardwantmoney ) values (@phone_id, @phone,DATEADD ([minute], 1,GETDATE ()),‘chinaszx‘, @cardwantmoney)                     end                  end           else                begin                     print ‘‘                     select top 1 @owner_card_id=id ,@price= OurFeeMoney from owner_card where state =0 and cardflag=@cardflag and cardmoney=@cardwantmoney                                 end      end end   Print @phone_id Print @cardflag Print @cardwantmoney Print @callerid Print @owner_card_id Print @price