create or replace procedure APP_0200000100(p_in_str in varchar2, p_out_str out varchar2) is /******************************************************************************* -- 函数名称 APP_0200000100 in 入参参数 out 返回结果 -- 功能描述 消费组包接口 ********************************************************************************/ -- Private exception declarations 定义异常信息 scanner_exception exception; pragma exception_init(scanner_exception, -20100); parser_exception exception; pragma exception_init(parser_exception, -20101); -- Private variable declarations 定义变量 j_param json; --v_user_id number; v_query_id VARCHAR2(32); v_swap_date varchar2(32); v_ret varchar2(2); -- 返回值 2位 v_des varchar2(32); --v_source varchar2(20); --v_logid varchar2(20); v_str varchar2(1024); v_card_no varchar2(20); v_amount varchar2(12); v_track2 varchar2(38); v_market_id varchar2(15); v_pos_water_num number; v_pos_code varchar2(8); --edit by ws 160624, v_pos_code varchar2(6); v_order_id varchar2(64); v_count number; begin -- 创建json对象 j_param := json(p_in_str); /* -- 校验param域是否缺少必填参数 jl_keys := json_list('["userId", "openId", "queryId", "reqSource","swapdate","productid","amount"]'); if false = json_util_extra.containKeys(j_param, jl_keys) then p_out_str := '{"resultCode":"30", "resultMsg":"param域Json缺少必填参数"}'; return; end if; */ -- 获取用户ID := 赋值操作 --v_user_id := json_ext.get_number(j_param, 'userId'); v_query_id := json_ext.get_string(j_param, 'queryId'); v_swap_date := json_ext.get_string(j_param, 'timespan'); --v_source := json_ext.get_string(j_param, 'reqSource'); v_card_no := json_ext.get_string(j_param, 'cardNo'); --v_logid := json_ext.get_string(j_param, 'log_id'); --受赠LOG id v_amount := json_ext.get_string(j_param, 'amount'); v_track2 := json_ext.get_string(j_param, 'track2'); v_market_id := json_ext.get_string(j_param, 'marketId'); --需要写进去实际生产的POS v_pos_code := '10598501'; --针对充值开的虚拟的商户号 4000105985 POS号 10598501 20160719 该生成的商户号需要给用 --v_pos_code := '10599602'; --测试和生产混合了,现在用测试的POS号 --增加订单 现校验数据库中是否有该订单,如果有,则返回错误 20160715 v_order_id := json_ext.get_string(j_param, 'orderNo'); select count(*) into v_count from xshe_app_wb where order_id = v_order_id; if v_count > 0 then v_ret := '22'; --订单号重复 v_des := '订单重复'; p_out_str := '{"resultCode":"' || v_ret || '", "resultMsg":"' || v_des || '"}'; return; end if; --赠送去重表,根据发送来的请求号来做 query_id begin insert into xshe_query_id (query_id) values (v_query_id); commit; exception when others then v_ret := '20'; --订单号重复 v_des := '请求重复'; p_out_str := '{"resultCode":"' || v_ret || '", "resultMsg":"' || v_des || '"}'; return; end; v_pos_water_num := app_pos_waste_num_seq.nextval; --600000000002000001007320023500160411 13D23BC8D41C751A 000000000001000023030516163121105990014000105990 599001000023 092099 AS7320023500160411=9909525724 --组包 v_str := '60000000000200000100'; v_str := v_str || rpad(v_card_no, 20, ' '); v_str := v_str || ' '; v_str := v_str || lpad(v_amount, 12, '0'); v_str := v_str || lpad(v_pos_water_num, 6, '0'); v_str := v_str || substr(v_swap_date, 5); --不需要年份中的2016的20 v_str := v_str || ' '; --input_type v_str := v_str || v_pos_code; --'10599605'; --pos_code --针对4000105996在测试上的值 v_str := v_str || rpad(v_market_id, 15, ' '); --market_id v_str := v_str || substr(v_pos_code, 3) || lpad(v_pos_water_num, 6, '0'); --'trace_code '; --trace_code v_str := v_str || ' '; --return_code v_str := v_str || ' '; --auth_code v_str := v_str || ' '; --auth_code v_str := v_str || 'AP'; --version AS CP v_str := v_str || lpad(v_track2, 38, ' '); --track_2 p_out_str := v_str; return; ----------------------------------------------------------*/ exception when scanner_exception then p_out_str := '{"resultCode":"94", "resultMsg":"Json扫描器异常"}'; when parser_exception then p_out_str := '{"resultCode":"95", "resultMsg":"Json解析器异常"}'; when others then p_out_str := '{"resultCode":"96", "resultMsg":"运行时异常"}'; end;