1732 lines
56 KiB
C
1732 lines
56 KiB
C
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <netinet/in.h>
|
|
#include <sys/socket.h>
|
|
#include <arpa/inet.h>
|
|
#include <sys/time.h>
|
|
#include <time.h>
|
|
#include <unistd.h>
|
|
|
|
#include "./include/db_adaptor.h"
|
|
|
|
extern _db_cfg db_cfg;
|
|
|
|
#define ARRAY_SIZE 1024
|
|
#define MAX_PREFIX_ROW 2048
|
|
|
|
#define PREFIX_TABLE_FILE "/usr/local/agt/etc/tariff/prefix_table.txt"
|
|
|
|
extern char *GetAsciiTime();
|
|
extern void crm_prov_hlr_auc_vms_account(char sub_data[][ARRAY_SIZE]);
|
|
extern int GetMonthDay();
|
|
extern int pstn_get_krone_pair_resource_id();
|
|
extern int pstn_get_ssentry_resource_id();
|
|
extern int dba_db_sql_query_only_execute_real(const char *sql, char result[][1024], int MAX_ROWS, int MAX_FIELDS);
|
|
|
|
typedef enum CRM_CLI_ST{
|
|
CRM_CLI_ST_READ_CMD,
|
|
CRM_CLI_ST_HSS_PROV,
|
|
CRM_CLI_ST_HSS_PROV_RES,
|
|
CRM_CLI_ST_AUC_PROV,
|
|
CRM_CLI_ST_AUC_PROV_RES,
|
|
CRM_CLI_ST_OCS_PROV,
|
|
CRM_CLI_ST_OCS_PROV_RES,
|
|
CRM_CLI_ST_VMS_PROV,
|
|
CRM_CLI_ST_VMS_PROV_RES,
|
|
CRM_CLI_ST_PCRF_PROV,
|
|
CRM_CLI_ST_PCRF_PROV_RES,
|
|
CRM_CLI_ST_PSTN_PROV,
|
|
CRM_CLI_ST_PSTN_PROV_RES,
|
|
}_CRM_CLI_ST;
|
|
|
|
typedef enum CRM_SCAN_ST{
|
|
CRM_SCAN_ST_NULL,
|
|
CRM_SCAN_ST_START,
|
|
CRM_SCAN_ST_END,
|
|
}_CRM_SCAN_ST;
|
|
|
|
typedef struct dba_crm_thread
|
|
{
|
|
int state;
|
|
int state_timer;
|
|
int sub_state;
|
|
int sub_state_timer;
|
|
int key_id;
|
|
int resend;
|
|
}_dba_crm_thread;
|
|
|
|
_dba_crm_thread crm_smcli_thread, crm_scan_bundle_thread;
|
|
|
|
/*---
|
|
to check if any pending subs, provisoning command
|
|
to AUC, HLR/HSS, OCS, VMS or PSTN
|
|
the cli command is configurable
|
|
-----*/
|
|
typedef enum cmd_type
|
|
{
|
|
CT_CREATE_NA,
|
|
CT_CREATE_SUB,
|
|
CT_REPLACE_SUB,
|
|
CT_SUSPEND_ACCOUNT,
|
|
CT_DISABLE_ACCOUNT,
|
|
CT_RESUME_ACCOUNT,
|
|
CT_DISCONNECT_ACCOUNT,
|
|
CT_UPDATE_SUB,
|
|
CT_MAX,
|
|
}cmd_type;
|
|
|
|
typedef enum node_type
|
|
{
|
|
NT_NA,
|
|
NT_OCS,
|
|
NT_HSS,
|
|
NT_AUC,
|
|
NT_VMS,
|
|
NT_PSTN,
|
|
NT_MSAN,
|
|
NT_ADSL,
|
|
NT_PCRF,
|
|
NT_MAX,
|
|
}node_type;
|
|
|
|
char node_name[NT_MAX][128]={"NULL","OCS","HSS","AUC","VMS","PSTN","MSAN","ADSL","PCRF"};
|
|
/*-------------------------------------------------*/
|
|
int dba_crm_dump_prefix_table_into_file()
|
|
{
|
|
char sql[256];
|
|
int rc;
|
|
FILE *fp=NULL;
|
|
|
|
sprintf(sql, "SELECT area_code, area_name FROM config_area");
|
|
|
|
fp = fopen(PREFIX_TABLE_FILE, "w");
|
|
|
|
rc = dba_db_sql_execute_crm(sql, NULL, MAX_PREFIX_ROW, 3, 1, fp);
|
|
|
|
if(rc != 0)
|
|
{
|
|
dba_crm_set_prefix_table_created();
|
|
}
|
|
|
|
if(fp != NULL)
|
|
fclose(fp);
|
|
|
|
return 1;
|
|
}
|
|
|
|
int dba_crm_get_product_rent(int from, int package_id)
|
|
{
|
|
char sql[1024];
|
|
char rent_des[1][ARRAY_SIZE];
|
|
int rent = 0;
|
|
int rc;
|
|
|
|
/*
|
|
sprintf(sql,
|
|
"SELECT f.FEE_VALUE rentValueFROM tb_prd_ofr_detail_inst_551 d, tb_prd_ofr_inst_551 i, tb_prd_ofr o, tb_prd_prd_once_fee f\
|
|
WHERE d.PRD_INST_ID = %d\
|
|
AND d.EXP_DATE > CURRENT_TIMESTAMP AND d.EFF_DATE <= CURRENT_TIMESTAMP AND i.OFR_INST_ID = d.OFR_INST_ID \
|
|
AND o.OFR_ID = i.OFR_ID AND o.OFR_TYPE_ID = 1 AND f.PRD_ID = o.OFR_ID AND f.TYPE = 2 AND f.FEE_TYPE = 5",
|
|
package_id);
|
|
*/
|
|
sprintf(sql,
|
|
"SELECT f.FEE_VALUE rentValue FROM tb_prd_prd_once_fee f WHERE f.PRD_ID = %d AND f.TYPE = 2 AND f.FEE_TYPE = 5", package_id);
|
|
|
|
if(from == 0)//crm
|
|
rc = dba_db_sql_execute_crm(sql, rent_des, 1, 1, 0, NULL);
|
|
else
|
|
rc = dba_db_sql_execute_ocs(sql, rent_des, 1, 1, 0, NULL);
|
|
|
|
if(rc != 0)
|
|
{
|
|
if(rent_des[0][0] == 0)
|
|
rent = 0;
|
|
else
|
|
rent = atoi(rent_des[0]);
|
|
}
|
|
|
|
return rent;
|
|
}
|
|
|
|
int dba_crm_get_vc_key_with_seq(int seq_id, char *result)
|
|
{
|
|
char sql[256];
|
|
char key[1][ARRAY_SIZE];
|
|
int rc;
|
|
|
|
sprintf(sql, "SELECT IMPORT_KEY from card_seq_info where SEQ_ID=%d", seq_id);
|
|
|
|
rc = dba_db_sql_execute_ocs(sql, key, 1, 1, 0, NULL);
|
|
|
|
if(rc != 0)
|
|
{
|
|
strcpy(result, key[0]);
|
|
}
|
|
|
|
return rc;
|
|
}
|
|
|
|
int dba_crm_get_vc_info_with_enc_pwd(const char *enc_vc_pwd, char result[][ARRAY_SIZE])
|
|
{
|
|
char sql[256];
|
|
int rc;
|
|
|
|
sprintf(sql, "SELECT BALANCE, STATE, UNIX_TIMESTAMP(EXP_DATE) from card_info_20c where PASSWD='%s'", enc_vc_pwd);
|
|
|
|
rc = dba_db_sql_execute_ocs(sql, result, 3, 64, 0, NULL);
|
|
|
|
return rc;
|
|
}
|
|
|
|
int dba_crm_get_vc_validity_days(int face_value)
|
|
{
|
|
char sql[256];
|
|
char valid_day_buf[1][ARRAY_SIZE];
|
|
int rc, valid_day=1;
|
|
|
|
sprintf(sql, "select VALID_EXTEND from tb_bil_recharge_valid where min_value=%d", face_value);
|
|
|
|
rc = dba_db_sql_execute_ocs(sql, valid_day_buf, 1, 1, 0, NULL);
|
|
|
|
if(rc != 0)
|
|
{
|
|
valid_day = atoi(valid_day_buf[0]);
|
|
}
|
|
|
|
return valid_day;
|
|
}
|
|
|
|
int dba_crm_update_vc_info_as_used_with_enc_pwd(const char *msisdn, const char *enc_vc_pwd, const char *status)
|
|
{
|
|
char sql[256];
|
|
int rc;
|
|
|
|
sprintf(sql, "UPDATE card_info_20c set STATE='%s', STATE_DATE=NOW() where PASSWD='%s'", status, enc_vc_pwd);
|
|
|
|
// sprintf(sql, "UPDATE card_info_20c set STATE='%s', STATE_DATE=NOW(), SERVICE_NBR='%s' where PASSWD='%s'", status, enc_vc_pwd, msisdn);
|
|
|
|
rc = dba_db_sql_execute_ocs(sql, NULL, 0, 0, 0, NULL);
|
|
|
|
return rc;
|
|
}
|
|
|
|
int dba_crm_insert_recharge_record_in_db(long account_id, const char *msisdn, int pay_amount, int balance)
|
|
{
|
|
char sql[512];
|
|
char acct_id[1][ARRAY_SIZE];
|
|
int op=17;
|
|
char state_done[]={"C0C"};
|
|
int rc;
|
|
|
|
sprintf(sql, "select acct_id from tb_prd_prd_inst_551 where PRD_INST_STAS_ID IN ('1001','1201') and service_nbr='%s'", msisdn);
|
|
rc = dba_db_sql_execute_ocs(sql, acct_id, 1, 1);
|
|
if(rc != 0)
|
|
sprintf(sql, "INSERT INTO tb_bil_pay_log_551 set OPER_LATN_ID=551, OPERATION_TYPE=%d, STATE='%s', CREATED_DATE=NOW(), STATE_DATE=NOW(), OBJ_ID='%s', OBJ_TYPE=0, \
|
|
PRE_BALANCE=%d, PAY_AMOUNT=%d, LEFT_BALANCE=%d, SERVICE_NBR='%s', PAY_METHOD=17",
|
|
op, state_done, acct_id[0], balance, pay_amount, balance+pay_amount, msisdn);
|
|
else
|
|
sprintf(sql, "INSERT INTO tb_bil_pay_log_551 set OPER_LATN_ID=551, OPERATION_TYPE=%d, STATE='%s', CREATED_DATE=NOW(), STATE_DATE=NOW(), OBJ_ID=%ld, OBJ_TYPE=0, \
|
|
PRE_BALANCE=%d, PAY_AMOUNT=%d, LEFT_BALANCE=%d, SERVICE_NBR='%s', PAY_METHOD=17",
|
|
op, state_done, account_id, balance, pay_amount, balance+pay_amount, msisdn);
|
|
|
|
rc = dba_db_sql_execute_ocs(sql, NULL, 0, 0, 0, NULL);
|
|
|
|
return rc;
|
|
}
|
|
|
|
int dba_verify_vc_with_pwd(const char *vc_pwd, char card_info[][ARRAY_SIZE], char *enc_password)
|
|
{
|
|
char enc_vc_pwd[ARRAY_SIZE], asc_vc_pwd_buf[ARRAY_SIZE];
|
|
char md5_key[ARRAY_SIZE]={"11111111"};
|
|
char vc_info[32][ARRAY_SIZE];
|
|
/* the MD5 key is fetch with vc sequnce info: 2/5/8/11 digits of the input PWD */
|
|
int seq_id = 0;
|
|
int len;
|
|
int i;
|
|
int rc = 0;
|
|
|
|
if(vc_pwd == NULL || enc_vc_pwd == NULL)
|
|
return 0;
|
|
len = strlen(vc_pwd);
|
|
if(len < 12)
|
|
return 0;
|
|
seq_id = (vc_pwd[2] - 0x30)*1000 +
|
|
(vc_pwd[5] - 0x30)*100 +
|
|
(vc_pwd[8] - 0x30)*10 +
|
|
(vc_pwd[11] - 0x30)*1;
|
|
|
|
if(dba_crm_get_vc_key_with_seq(seq_id, md5_key) == 0)
|
|
{
|
|
myLOG_D("DBA: Can't get key with seq_id=%d\n", seq_id);
|
|
return 0;
|
|
}
|
|
else
|
|
{
|
|
myLOG_D("DBA: Get key=%s with seq_id=%d\n", md5_key, seq_id) ;
|
|
}
|
|
|
|
hmac_md5(vc_pwd, strlen(vc_pwd), md5_key, 8, enc_vc_pwd);
|
|
len = 16;
|
|
BcdToAscii(asc_vc_pwd_buf, enc_vc_pwd, len*2);
|
|
printf("Enc pwd: %s\n", asc_vc_pwd_buf);
|
|
|
|
rc = dba_crm_get_vc_info_with_enc_pwd(asc_vc_pwd_buf, vc_info);
|
|
if(rc != 0)
|
|
{
|
|
strcpy(enc_password, asc_vc_pwd_buf);
|
|
if(card_info != NULL)
|
|
{
|
|
for(i=0; i<3; i++)
|
|
strcpy(card_info[i], vc_info[i]);
|
|
}
|
|
}
|
|
|
|
return rc;
|
|
}
|
|
|
|
static int log_file_counter=0;
|
|
static char sql_head_of_data[4096], sql_head_of_cs[4096];
|
|
static char date_time_str[24];
|
|
void get_cur_data_time_str()
|
|
{
|
|
time_t time_ptr;
|
|
struct tm *tmp_ptr = NULL;
|
|
int year,month,day,hour,minute,sec;
|
|
|
|
|
|
time(&time_ptr);
|
|
|
|
tmp_ptr = localtime(&time_ptr);
|
|
|
|
year = tmp_ptr->tm_year + 1900;
|
|
month = tmp_ptr->tm_mon + 1;
|
|
day = tmp_ptr->tm_mday;
|
|
|
|
hour = tmp_ptr->tm_hour;
|
|
minute = tmp_ptr->tm_min;
|
|
sec = tmp_ptr->tm_sec;
|
|
|
|
sprintf(date_time_str, "%04d%02d%02d%02d%02d%02d",year,month,day,hour,minute,sec);
|
|
return 0;
|
|
}
|
|
|
|
void dba_init_tariff_sql()
|
|
{
|
|
int holidy_benefis_support = 1;
|
|
|
|
if(holidy_benefis_support == 0)
|
|
{
|
|
strcpy(sql_head_of_data,
|
|
"SELECT \
|
|
IFNULL(hr.holiday_discount,100) as holiday_discount, \
|
|
g.TARIFF_ID, \
|
|
p.PRD_INST_ID, \
|
|
b.OFR_INST_ID, \
|
|
rr.FREE_VALUE AS ratableValue, \
|
|
rr.VALUE usedRatable, \
|
|
g.ACCT_ITEM_TYPE_ID acctItemType, \
|
|
g.SCALED_RATE_VALUE_ID fee, \
|
|
g.rate_unit rateUnit, \
|
|
IFNULL( rr.id, 0 ) \
|
|
FROM \
|
|
tb_prd_ofr_detail_inst_551 a \
|
|
INNER JOIN tb_prd_prd_inst_551 p ON a.ofr_detail_inst_ref_id = p.PRD_INST_ID \
|
|
INNER JOIN tb_prd_ofr_inst_551 b ON a.ofr_inst_id = b.ofr_inst_id \
|
|
INNER JOIN tb_prd_ofr c ON b.ofr_id = c.ofr_id \
|
|
INNER JOIN tb_bil_pricing_combine_group d ON c.pricing_plan_id = d.pricing_plan_id \
|
|
INNER JOIN tb_bil_pricing_combine_gp_list e ON d.pricing_combine_group_id = e.pricing_combine_group_id \
|
|
INNER JOIN tb_bil_pricing_section f ON e.event_pricing_strategy_id = f.event_pricing_strategy_id \
|
|
AND f.TARIFF_ID \
|
|
IS NOT NULL INNER JOIN tb_bil_tariff g ON f.pricing_section_id = g.pricing_section_id \
|
|
INNER JOIN tb_bil_evt_pricing_strategy h ON e.event_pricing_strategy_id = h.event_pricing_strategy_id \
|
|
LEFT JOIN ratable_history rr ON rr.OWNER_ID = p.PRD_INST_ID \
|
|
AND rr.PRICING_SUB_SECTION_ID = g.PRICING_SECTION_ID \
|
|
"
|
|
);
|
|
|
|
|
|
strcpy(sql_head_of_cs,
|
|
"SELECT \
|
|
IFNULL(hr.holiday_discount,100) as holiday_discount, \
|
|
g.TARIFF_ID, \
|
|
p.PRD_INST_ID, \
|
|
b.OFR_INST_ID, \
|
|
rr.FREE_VALUE AS ratableValue, \
|
|
rr.VALUE usedRatable, \
|
|
g.ACCT_ITEM_TYPE_ID acctItemType, \
|
|
g.SCALED_RATE_VALUE_ID fee, \
|
|
g.rate_unit rateUnit, \
|
|
IFNULL( rr.id, 0 ) \
|
|
FROM \
|
|
tb_prd_ofr_detail_inst_551 a \
|
|
INNER JOIN tb_prd_prd_inst_551 p ON a.ofr_detail_inst_ref_id = p.PRD_INST_ID \
|
|
INNER JOIN tb_prd_ofr_inst_551 b ON a.ofr_inst_id = b.ofr_inst_id \
|
|
INNER JOIN tb_prd_ofr c ON b.ofr_id = c.ofr_id \
|
|
INNER JOIN tb_bil_pricing_combine_group d ON c.pricing_plan_id = d.pricing_plan_id \
|
|
INNER JOIN tb_bil_pricing_combine_gp_list e ON d.pricing_combine_group_id = e.pricing_combine_group_id \
|
|
INNER JOIN tb_bil_pricing_section f ON e.event_pricing_strategy_id = f.event_pricing_strategy_id \
|
|
AND f.TARIFF_ID \
|
|
IS NOT NULL INNER JOIN tb_bil_tariff g ON f.pricing_section_id = g.pricing_section_id \
|
|
INNER JOIN tb_bil_evt_pricing_strategy h ON e.event_pricing_strategy_id = h.event_pricing_strategy_id \
|
|
INNER JOIN TB_BIL_PRICING_AREA ar ON ar.STRATEGY_ID = h.event_pricing_strategy_id \
|
|
INNER JOIN config_area ca ON ca.area_id = ar.area_id \
|
|
LEFT JOIN ratable_history rr ON rr.OWNER_ID = p.PRD_INST_ID \
|
|
AND rr.PRICING_SUB_SECTION_ID = g.PRICING_SECTION_ID \
|
|
"
|
|
);
|
|
}
|
|
else
|
|
{
|
|
strcpy(sql_head_of_data,
|
|
"SELECT \
|
|
IFNULL(hr.holiday_discount,100) as holiday_discount, \
|
|
g.TARIFF_ID, \
|
|
p.PRD_INST_ID, \
|
|
b.OFR_INST_ID, \
|
|
rr.FREE_VALUE AS ratableValue, \
|
|
rr.VALUE usedRatable, \
|
|
g.ACCT_ITEM_TYPE_ID acctItemType, \
|
|
g.SCALED_RATE_VALUE_ID fee, \
|
|
g.rate_unit rateUnit, \
|
|
IFNULL( rr.id, 0 ) \
|
|
FROM \
|
|
tb_prd_ofr_detail_inst_551 a \
|
|
INNER JOIN tb_prd_prd_inst_551 p ON a.ofr_detail_inst_ref_id = p.PRD_INST_ID \
|
|
INNER JOIN tb_prd_ofr_inst_551 b ON a.ofr_inst_id = b.ofr_inst_id \
|
|
INNER JOIN tb_prd_ofr c ON b.ofr_id = c.ofr_id \
|
|
INNER JOIN tb_bil_pricing_combine_group d ON c.pricing_plan_id = d.pricing_plan_id \
|
|
INNER JOIN tb_bil_pricing_combine_gp_list e ON d.pricing_combine_group_id = e.pricing_combine_group_id \
|
|
INNER JOIN tb_bil_pricing_section f ON e.event_pricing_strategy_id = f.event_pricing_strategy_id \
|
|
AND f.TARIFF_ID \
|
|
IS NOT NULL INNER JOIN tb_bil_tariff g ON f.pricing_section_id = g.pricing_section_id \
|
|
INNER JOIN tb_bil_evt_pricing_strategy h ON e.event_pricing_strategy_id = h.event_pricing_strategy_id \
|
|
LEFT JOIN ratable_history rr ON rr.OWNER_ID = p.PRD_INST_ID \
|
|
AND rr.PRICING_SUB_SECTION_ID = g.PRICING_SECTION_ID \
|
|
LEFT JOIN (SELECT t.HOLIDAY_GROUP FROM ( \
|
|
SELECT hd.HOLIDAY_GROUP, hd.HOLIDAY_PRIORITY, COUNT(1) AS HOLIDAY_COUNT FROM tb_bil_holiday hd \
|
|
WHERE ((hd.HOLIDAY_TYPE = '02' AND hd.HOLIDAY_BEGIN_DATE >= (WEEKDAY(SYSDATE()) + 1) AND hd.holiday_end_date <= (WEEKDAY(SYSDATE()) + 1)) \
|
|
OR (hd.holiday_type = '03' AND DATE_FORMAT(SYSDATE(),'%m%d') >= DATE_FORMAT(CONCAT('2020', hd.HOLIDAY_BEGIN_DATE), '%m%d') AND DATE_FORMAT(SYSDATE(),'%m%d') <= DATE_FORMAT(CONCAT('2020', hd.holiday_end_date), '%m%d')) \
|
|
OR (hd.holiday_type = '04' AND DATE_FORMAT(CURTIME(), '%H%i%s') >= DATE_FORMAT(STR_TO_DATE(CONCAT('20200101', hd.HOLIDAY_BEGIN_DATE), '%Y%m%d%H%i%s'),'%H%i%s') \
|
|
AND DATE_FORMAT(CURTIME(), '%H%i%s') <= DATE_FORMAT(STR_TO_DATE(CONCAT('20200101', hd.holiday_end_date), '%Y%m%d%H%i%s'),'%H%i%s')) \
|
|
and hd.STATE='L0R') \
|
|
GROUP BY hd.HOLIDAY_PRIORITY, hd.HOLIDAY_GROUP) t \
|
|
WHERE t.HOLIDAY_COUNT = (SELECT COUNT(1) FROM tb_bil_holiday w WHERE t.HOLIDAY_GROUP = w.HOLIDAY_GROUP) \
|
|
ORDER BY t.HOLIDAY_PRIORITY LIMIT 1) hd ON 1 = 1 \
|
|
LEFT JOIN tb_bil_holiday_rel hr ON ( hr.state='1' and hr.tariff_id = g.TARIFF_ID AND g.tariff_seq = hr.tariff_seq AND hd.HOLIDAY_GROUP = hr.holiday_group ) \ "
|
|
);
|
|
|
|
|
|
strcpy(sql_head_of_cs,
|
|
"SELECT \
|
|
IFNULL(hr.holiday_discount,100) as holiday_discount, \
|
|
g.TARIFF_ID, \
|
|
p.PRD_INST_ID, \
|
|
b.OFR_INST_ID, \
|
|
rr.FREE_VALUE AS ratableValue, \
|
|
rr.VALUE usedRatable, \
|
|
g.ACCT_ITEM_TYPE_ID acctItemType, \
|
|
g.SCALED_RATE_VALUE_ID fee, \
|
|
g.rate_unit rateUnit, \
|
|
IFNULL( rr.id, 0 ) \
|
|
FROM \
|
|
tb_prd_ofr_detail_inst_551 a \
|
|
INNER JOIN tb_prd_prd_inst_551 p ON a.ofr_detail_inst_ref_id = p.PRD_INST_ID \
|
|
INNER JOIN tb_prd_ofr_inst_551 b ON a.ofr_inst_id = b.ofr_inst_id \
|
|
INNER JOIN tb_prd_ofr c ON b.ofr_id = c.ofr_id \
|
|
INNER JOIN tb_bil_pricing_combine_group d ON c.pricing_plan_id = d.pricing_plan_id \
|
|
INNER JOIN tb_bil_pricing_combine_gp_list e ON d.pricing_combine_group_id = e.pricing_combine_group_id \
|
|
INNER JOIN tb_bil_pricing_section f ON e.event_pricing_strategy_id = f.event_pricing_strategy_id \
|
|
AND f.TARIFF_ID \
|
|
IS NOT NULL INNER JOIN tb_bil_tariff g ON f.pricing_section_id = g.pricing_section_id \
|
|
INNER JOIN tb_bil_evt_pricing_strategy h ON e.event_pricing_strategy_id = h.event_pricing_strategy_id \
|
|
INNER JOIN TB_BIL_PRICING_AREA ar ON ar.STRATEGY_ID = h.event_pricing_strategy_id \
|
|
INNER JOIN config_area ca ON ca.area_id = ar.area_id \
|
|
LEFT JOIN ratable_history rr ON rr.OWNER_ID = p.PRD_INST_ID \
|
|
AND rr.PRICING_SUB_SECTION_ID = g.PRICING_SECTION_ID \
|
|
LEFT JOIN (SELECT t.HOLIDAY_GROUP FROM ( \
|
|
SELECT hd.HOLIDAY_GROUP, hd.HOLIDAY_PRIORITY, COUNT(1) AS HOLIDAY_COUNT FROM tb_bil_holiday hd \
|
|
WHERE ((hd.HOLIDAY_TYPE = '02' AND hd.HOLIDAY_BEGIN_DATE >= (WEEKDAY(SYSDATE()) + 1) AND hd.holiday_end_date <= (WEEKDAY(SYSDATE()) + 1)) \
|
|
OR (hd.holiday_type = '03' AND DATE_FORMAT(SYSDATE(),'%m%d') >= DATE_FORMAT(CONCAT('2020', hd.HOLIDAY_BEGIN_DATE), '%m%d') AND DATE_FORMAT(SYSDATE(),'%m%d') <= DATE_FORMAT(CONCAT('2020', hd.holiday_end_date), '%m%d')) \
|
|
OR (hd.holiday_type = '04' AND DATE_FORMAT(CURTIME(), '%H%i%s') >= DATE_FORMAT(STR_TO_DATE(CONCAT('20200101', hd.HOLIDAY_BEGIN_DATE), '%Y%m%d%H%i%s'),'%H%i%s') \
|
|
AND DATE_FORMAT(CURTIME(), '%H%i%s') <= DATE_FORMAT(STR_TO_DATE(CONCAT('20200101', hd.holiday_end_date), '%Y%m%d%H%i%s'),'%H%i%s')) \
|
|
and hd.STATE='L0R') \
|
|
GROUP BY hd.HOLIDAY_PRIORITY, hd.HOLIDAY_GROUP) t \
|
|
WHERE t.HOLIDAY_COUNT = (SELECT COUNT(1) FROM tb_bil_holiday w WHERE t.HOLIDAY_GROUP = w.HOLIDAY_GROUP) \
|
|
ORDER BY t.HOLIDAY_PRIORITY LIMIT 1) hd ON 1 = 1 \
|
|
LEFT JOIN tb_bil_holiday_rel hr ON ( hr.state='1' and hr.tariff_id = g.TARIFF_ID AND g.tariff_seq = hr.tariff_seq AND hd.HOLIDAY_GROUP = hr.holiday_group ) \ "
|
|
);
|
|
}
|
|
|
|
}
|
|
|
|
int dba_query_tariff_record(char *msisdn, int call_type, char *called_number, char tariff[][1024])
|
|
{
|
|
char sql_head[4096], sql_tail[2048], sql_tail1[2048];
|
|
char sql[8192];
|
|
int rc;
|
|
int now_sec;
|
|
struct timeval tv;
|
|
|
|
gettimeofday(&tv, NULL);
|
|
now_sec = tv.tv_sec % 86400;
|
|
|
|
if(call_type==2)//data
|
|
{
|
|
|
|
sprintf(sql_tail,
|
|
" WHERE g.MEASURE_DOMAIN = '%02d' \
|
|
AND p.PRD_INST_STAS_ID = '1001' \
|
|
AND a.EXP_DATE > SYSDATE( ) \
|
|
AND ((c.OFR_TYPE_ID = '3' AND rr.OFR_INST_ID = b.OFR_INST_ID AND rr.ID > 0 ) OR ( c.ofr_type_id = '1' )) \
|
|
AND TIME_TO_SEC( g.START_REF_VALUE ) <= %d AND TIME_TO_SEC( g.END_REF_VALUE ) >= %d \
|
|
AND p.SERVICE_NBR = '%s' ",
|
|
call_type, now_sec, now_sec, msisdn);
|
|
|
|
strcpy(sql_tail1,
|
|
"AND ((rr.`ID` > 0 AND STR_TO_DATE(rr.END_TIME, '%Y%m%d%H%i%s') >= SYSDATE() AND rr.`FREE_VALUE` > rr.`VALUE`) OR (rr.`ID` IS NULL)) \
|
|
ORDER BY c.CALC_PRIORITY, c.OFR_TYPE_ID DESC,h.EVENT_PRIORITY DESC, a.CRT_DATE, rr.FREE_VALUE ASC \
|
|
LIMIT 1" );
|
|
|
|
sprintf(sql, "%s%s%s", sql_head_of_data, sql_tail, sql_tail1);
|
|
|
|
}
|
|
else
|
|
{
|
|
|
|
|
|
sprintf(sql_tail,
|
|
" WHERE ca.area_code = '%s' \
|
|
AND g.MEASURE_DOMAIN = '%02d' \
|
|
AND p.PRD_INST_STAS_ID = '1001' \
|
|
AND a.EXP_DATE > SYSDATE( ) \
|
|
AND ((c.OFR_TYPE_ID = '3' AND rr.OFR_INST_ID = b.OFR_INST_ID AND rr.ID > 0 ) OR ( c.ofr_type_id = '1' )) \
|
|
AND TIME_TO_SEC( g.START_REF_VALUE ) <= %d AND TIME_TO_SEC( g.END_REF_VALUE ) >= %d \
|
|
AND p.SERVICE_NBR = '%s' ",
|
|
called_number, call_type, now_sec, now_sec, msisdn);
|
|
|
|
strcpy(sql_tail1,
|
|
"AND ((rr.`ID` > 0 AND STR_TO_DATE(rr.END_TIME, '%Y%m%d%H%i%s') >= SYSDATE() AND rr.`FREE_VALUE` > rr.`VALUE`) OR (rr.`ID` IS NULL)) \
|
|
ORDER BY c.CALC_PRIORITY DESC,h.EVENT_PRIORITY DESC, a.CRT_DATE, rr.FREE_VALUE ASC \
|
|
LIMIT 1");
|
|
|
|
sprintf(sql, "%s%s%s", sql_head_of_cs, sql_tail, sql_tail1);
|
|
|
|
}
|
|
|
|
|
|
if(0)
|
|
{
|
|
FILE *fp=NULL;
|
|
char file_name[128];
|
|
|
|
sprintf(file_name,"./log/sql_%04d.txt", log_file_counter++%1000);
|
|
|
|
fp = fopen(file_name,"w");
|
|
fprintf(fp,"%s", sql);
|
|
|
|
fclose(fp);
|
|
}
|
|
|
|
if(0)
|
|
{
|
|
rc= dba_db_sql_query_only_execute_real(sql, tariff, 1, 10);
|
|
}
|
|
else
|
|
{
|
|
rc = dba_db_sql_execute_ocs(sql, tariff, 1, 10, 0, NULL);
|
|
}
|
|
|
|
return rc;
|
|
|
|
}
|
|
|
|
int dba_update_plan_info(int service_type, int plan_id, long long plan_used_value, int update_expiry_date, long long plan_total_value)
|
|
{
|
|
char sql[8192];
|
|
int rc;
|
|
|
|
if(update_expiry_date)
|
|
{
|
|
//get_cur_data_time_str();
|
|
//sprintf(sql, "UPDATE ratable_history SET `VALUE`=%lld, END_TIME='%s' WHERE ID=%d", plan_total_value, date_time_str, plan_id);// 20200831000000
|
|
sprintf(sql, "UPDATE ratable_history SET `VALUE`=%lld WHERE ID=%d", plan_total_value, plan_id);
|
|
}
|
|
else
|
|
{
|
|
sprintf(sql, "UPDATE ratable_history SET `VALUE`=%lld WHERE ID=%d", plan_used_value, plan_id);
|
|
}
|
|
|
|
|
|
rc = dba_db_sql_execute_ocs(sql, NULL, 0, 0, 0, NULL);
|
|
|
|
return rc;
|
|
}
|
|
|
|
int dba_update_plan_data_info(int plan_id, long long volume_used_value, int op_flag)
|
|
{
|
|
char sql[8192];
|
|
int rc;
|
|
|
|
if(op_flag == 0)
|
|
sprintf(sql, "UPDATE ratable_history SET `VALUE`= VALUE+%lld WHERE ID=%d", volume_used_value, plan_id);
|
|
else
|
|
sprintf(sql, "UPDATE ratable_history SET `VALUE`= VALUE-%lld WHERE ID=%d", volume_used_value, plan_id);
|
|
rc = dba_db_sql_execute_ocs(sql, NULL, 0, 0, 0, NULL);
|
|
|
|
return rc;
|
|
}
|
|
|
|
int dba_send_plan_notification_info(int account_id, int plan_id, int service_type, int update_expiry_date, int used_rate)
|
|
{
|
|
char sql[8192];
|
|
int rc;
|
|
int rate = used_rate;
|
|
int rate_type = service_type;
|
|
|
|
if(update_expiry_date)
|
|
{
|
|
rate = 100;
|
|
}
|
|
/*
|
|
if(rate_type == 2)
|
|
rate_type = 3;
|
|
else if(rate_type == 3)
|
|
rate_type = 2;
|
|
*/
|
|
|
|
sprintf(sql, "INSERT into tb_sync_msg SET msg_type=2, rate_type=%d, acct_id=%d, rate_value=%d, state=1, ofr_inst_id=%d" ,rate_type, account_id, rate,plan_id);
|
|
|
|
rc = dba_db_sql_execute_ocs(sql, NULL, 0, 0, 0, NULL);
|
|
|
|
return rc;
|
|
}
|
|
|
|
int dba_send_expired_notification_info(int account_id, int plan_id, long expired_date)
|
|
{
|
|
char sql[8192];
|
|
int rc;
|
|
|
|
sprintf(sql, "INSERT into tb_sync_msg SET msg_type=1, acct_id=%d, ofr_inst_id=%d, exp_date=FROM_UNIXTIME(%ld), state=1", account_id, plan_id, expired_date);
|
|
|
|
rc = dba_db_sql_execute_ocs(sql, NULL, 0, 0, 0, NULL);
|
|
|
|
return rc;
|
|
}
|
|
|
|
/*
|
|
typedef enum account_status {
|
|
T_FRESH=0,
|
|
T_NORMAL,
|
|
T_SUSPEND,
|
|
T_BLACKLIST,
|
|
T_RELEASED,
|
|
T_OPRTRIAL,
|
|
T_DISABLE,
|
|
MAX_USER_TYPE,
|
|
|
|
T_EXTERNAL=10,
|
|
} _account_status;
|
|
|
|
*/
|
|
int dba_update_user_status_in_crm(int account_id, int account_status)
|
|
{
|
|
char sql[1024];
|
|
int status_in_crm=1001;
|
|
int rc;
|
|
|
|
switch(account_status)
|
|
{
|
|
case 1:
|
|
status_in_crm = 1001;
|
|
break;
|
|
case 2:
|
|
status_in_crm = 1205;
|
|
break;
|
|
case 4:
|
|
status_in_crm = 1101;
|
|
break;
|
|
case 6:
|
|
status_in_crm = 1202;
|
|
break;
|
|
}
|
|
if(0)
|
|
{
|
|
sprintf(sql, "update tb_prd_prd_inst_551 set PRD_INST_STAS_ID=%d, MOD_DATE=NOW() where ACCT_ID=%d", status_in_crm, account_id);
|
|
rc = dba_db_sql_execute_ocs(sql, NULL, 0, 0, 0, NULL);
|
|
}
|
|
|
|
if(account_status == 4)//disconnection
|
|
{
|
|
if(1)
|
|
{
|
|
sprintf(sql, "INSERT INTO tb_mobile_disc_cmd set ACCT_ID=%d, ACCT_STATUS=0, UPDATE_DATE=NOW()", account_id);
|
|
rc = dba_db_sql_execute_ocs(sql, NULL, 0, 0, 0, NULL);
|
|
}
|
|
|
|
mobile_delete_handle(account_id);
|
|
}
|
|
|
|
}
|
|
|
|
int dba_send_update_hlr_tele_service(char *msisdn, int account_status)
|
|
{
|
|
char cmd_update_user[1024];
|
|
char sql[1024];
|
|
int rc;
|
|
|
|
switch(account_status)
|
|
{
|
|
case 1://normal
|
|
sprintf(cmd_update_user,"modify subscriber -msisdn %s -odb disable -telephony enable -sms Both", msisdn);
|
|
sprintf(sql, "INSERT INTO tb_sync_cn_cmd SET cmd_type=%d, node_type=%d, node_name='%s', srv_num='%s', command='%s', state=1, result=0, timestamp=NOW()",
|
|
CT_RESUME_ACCOUNT, NT_HSS, node_name[NT_HSS], msisdn,
|
|
cmd_update_user);
|
|
break;
|
|
case 2: //suspended
|
|
sprintf(cmd_update_user,"modify subscriber -msisdn %s -odb enable -baoc enable -telephony enable - sms Mobile_Term", msisdn);
|
|
sprintf(sql, "INSERT INTO tb_sync_cn_cmd SET cmd_type=%d, node_type=%d, node_name='%s', srv_num='%s', command='%s', state=1, result=0, timestamp=NOW()",
|
|
CT_SUSPEND_ACCOUNT, NT_HSS, node_name[NT_HSS], msisdn,
|
|
cmd_update_user);
|
|
break;
|
|
case 6://Disable
|
|
sprintf(cmd_update_user,"modify subscriber -msisdn %s-odb disable -telephony disable -sms Mobile_Term", msisdn);
|
|
sprintf(sql, "INSERT INTO tb_sync_cn_cmd SET cmd_type=%d, node_type=%d, node_name='%s', srv_num='%s', command='%s', state=1, result=0, timestamp=NOW()",
|
|
CT_DISABLE_ACCOUNT, NT_HSS, node_name[NT_HSS], msisdn,
|
|
cmd_update_user);
|
|
break;
|
|
case 4: //Disconnect
|
|
sprintf(cmd_update_user,"delete subscriber -msisdn %s ", msisdn);
|
|
sprintf(sql, "INSERT INTO tb_sync_cn_cmd SET cmd_type=%d, node_type=%d, node_name='%s', srv_num='%s', command='%s', state=1, result=0, timestamp=NOW()",
|
|
CT_DISCONNECT_ACCOUNT, NT_HSS, node_name[NT_HSS], msisdn,
|
|
cmd_update_user);
|
|
break;
|
|
}
|
|
|
|
rc = dba_db_sql_execute_ocs(sql, NULL, 0, 0, 0, NULL);
|
|
|
|
return rc;
|
|
}
|
|
|
|
|
|
|
|
int dba_crm_read_bundle_info(int sn)
|
|
{
|
|
char sql[8192];
|
|
int rc;
|
|
char bundle_info[20][1024];
|
|
|
|
sprintf(sql, "SELECT i.OFR_INST_ID, a.ACCT_ID, p.SERVICE_NBR, i.EXP_DATEFROM tb_prd_ofr_detail_inst_551 i, \
|
|
tb_prd_prd_inst_551 p, tb_prd_ofr o, tb_bil_acct_551 a WHERE o.OFR_TYPE_ID = 3 \
|
|
AND p.PRD_INST_STAS_ID='1001' AND p.PRD_INST_ID = i.OFR_DETAIL_INST_REF_ID \
|
|
AND a.ACCT_ID = p.ACCT_ID AND a.PREPAY = 1 AND o.OFR_ID = i.OFR_ID AND datediff( i.EXP_DATE, CURRENT_TIME)=3 limit %d,1", sn);
|
|
|
|
rc = dba_db_sql_execute_crm(sql, bundle_info, 1, 10, 0, NULL);
|
|
|
|
if(rc != 0)
|
|
{
|
|
sprintf(sql, "INSERT into tb_sync_msg SET msg_type=1, state=1, acct_id=%d, ofr_inst_id=%d" ,atoi(bundle_info[1]), atoi(bundle_info[0]));
|
|
dba_db_sql_execute_ocs(sql, NULL, 0, 0, 0, NULL);
|
|
}
|
|
|
|
return rc;
|
|
|
|
}
|
|
|
|
int dba_crm_scan_bundle_thread(unsigned int now_sec)
|
|
{
|
|
static int scan_limit_counter = 1;
|
|
int state = 0, timer = 0;
|
|
int rc=0;
|
|
char result[256];
|
|
|
|
state = crm_scan_bundle_thread.state;
|
|
|
|
switch(state)
|
|
{
|
|
case CRM_SCAN_ST_NULL:
|
|
if((now_sec-28800)%86400<20)//08:00:20 AM start to scan
|
|
{
|
|
crm_scan_bundle_thread.state = CRM_SCAN_ST_START;
|
|
scan_limit_counter = 1;
|
|
}
|
|
break;
|
|
case CRM_SCAN_ST_START:
|
|
rc = dba_crm_read_bundle_info(scan_limit_counter++);
|
|
if(rc == 0)
|
|
{
|
|
crm_scan_bundle_thread.state = CRM_SCAN_ST_END;
|
|
crm_scan_bundle_thread.state_timer = 0;
|
|
}
|
|
break;
|
|
case CRM_SCAN_ST_END:
|
|
if(crm_scan_bundle_thread.state_timer++>3600)//1hour later
|
|
{
|
|
crm_scan_bundle_thread.state = CRM_SCAN_ST_NULL;
|
|
}
|
|
break;
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
|
|
int dba_get_user_rent(char *msisdn)
|
|
{
|
|
char sql[8192];
|
|
int rc, rent_charge=0 ;
|
|
char rent[1][1024];
|
|
|
|
sprintf(sql, "SELECT f.prd_id, f.FEE_VALUE, 2 AS product_type, p.SERVICE_NBR, \
|
|
s.PRD_INST_ID, p.PRD_INST_ID MAIN_PRD_INST_ID, s.CRT_DATE \
|
|
FROM tb_prd_sub_prd_inst_551 s, tb_prd_prd_once_fee f, \
|
|
tb_prd_prd_inst_551 p WHERE s.MAIN_PRD_INST_ID = p.PRD_INST_ID \
|
|
AND f.PRD_ID = s.OFR_ID AND f.FEE_TYPE = 5 \
|
|
AND p.SERVICE_NBR = '%s' AND p.PRD_INST_STAS_ID = '1001' AND s.EXP_DATE > CURRENT_TIMESTAMP AND s.EFF_DATE <= CURRENT_TIMESTAMP", msisdn);
|
|
|
|
rc = dba_db_sql_execute_ocs(sql, rent, 1, 1, 0, NULL);
|
|
if(rent[0][0] != 0x00)
|
|
rent_charge = atoi(rent[0]);
|
|
|
|
return rent_charge;
|
|
}
|
|
|
|
|
|
|
|
int subs_provisioning_update_result(char *sql)
|
|
{
|
|
|
|
int rc;
|
|
|
|
rc = dba_db_sql_execute_crm(sql, NULL, 0, 0, 0, NULL);
|
|
|
|
return rc;
|
|
}
|
|
|
|
int mobile_provisioning_command_process()
|
|
{
|
|
char sql[8192];
|
|
char sub_data[32][ARRAY_SIZE];
|
|
int rc;
|
|
int mobile_type = 0;
|
|
int oper_type =0 ;
|
|
|
|
sprintf(sql,
|
|
"select PRE_ID, OPER_TYPE, IMSI, SERVICE_NBR, KI, OPC, CUST_ID, ACCT_ID, PRD_INST_ID, MOBILE_TYPE, VMS_FLAG, BIRTH_DATE, BALANCE, \
|
|
BALANCE_EXP_DATE, OFR_ID, EXP_DATE, CUG_ID from tb_sync_mobile where STATE=1 limit 1");
|
|
|
|
rc = dba_db_sql_execute_crm(sql, sub_data, 1, 32,0, NULL);
|
|
if(rc == 0)
|
|
return 0;
|
|
|
|
//if(rc != 0)
|
|
{
|
|
oper_type = atoi(sub_data[1]);
|
|
|
|
if(0)
|
|
{
|
|
sprintf(sql, "update tb_sync_mobile set STATE=3, UPDATE_DATE=NOW() where PRE_ID=%d", atoi(sub_data[0]));//treating to avoid re-create
|
|
subs_provisioning_update_result(sql);
|
|
|
|
if(1)//mobile
|
|
{
|
|
|
|
pthread_t tid;
|
|
pthread_create(&tid, NULL, (void *)crm_prov_hlr_auc_vms_account, sub_data);
|
|
|
|
//crm_prov_hlr_auc_vms_account(sub_data);
|
|
|
|
mobile_type = atoi(sub_data[9]);//0=postpaid, 1=prepaid
|
|
if(mobile_type == 1)
|
|
{
|
|
crm_prov_mobile_prepaid_account( sub_data);
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
char cmd_create_user[256];
|
|
|
|
oper_type = atoi(sub_data[1]);
|
|
|
|
|
|
if(oper_type == 2)//replace sim card
|
|
{//delete old imsi from HSS first , then add new IMSI in HSS/AUC..
|
|
char sql_tmp[1024];
|
|
char cmd_delete_user[1024];
|
|
char old_imsi_info[3][ARRAY_SIZE];
|
|
int rc0=0;
|
|
|
|
sprintf(sql_tmp,
|
|
"select PRE_ID, IMSI, PRD_INST_ID from tb_sync_mobile WHERE SERVICE_NBR='%s' and STATE>1 ORDER BY PRE_ID DESC limit 1", sub_data[3]);
|
|
rc0 = dba_db_sql_execute_crm(sql_tmp, old_imsi_info, 1, 32,2, NULL);
|
|
if(rc0==0) return 0;
|
|
|
|
//if(rc0 !=0)
|
|
{
|
|
sprintf(cmd_delete_user,"delete subscriber -imsi %s ", old_imsi_info[1]);
|
|
sprintf(sql_tmp, "INSERT INTO tb_sync_cn_cmd SET cmd_type=%d, node_type=%d, node_name='%s', srv_num='%s', command='%s', state=1, result=0, timestamp=NOW()",
|
|
CT_DISCONNECT_ACCOUNT, NT_HSS, node_name[NT_HSS], old_imsi_info[2],
|
|
cmd_delete_user);
|
|
dba_db_sql_execute_crm(sql_tmp, NULL, 0, 0, 0, NULL);
|
|
|
|
sprintf(cmd_delete_user,"delete aucSubscriber -imsi %s ", old_imsi_info[1]);
|
|
sprintf(sql_tmp, "INSERT INTO tb_sync_cn_cmd SET cmd_type=%d, node_type=%d, node_name='%s', srv_num='%s', command='%s', state=1, result=0, timestamp=NOW()",
|
|
CT_DISCONNECT_ACCOUNT, NT_AUC, node_name[NT_AUC], old_imsi_info[2],
|
|
cmd_delete_user);
|
|
dba_db_sql_execute_crm(sql_tmp, NULL, 0, 0, 0, NULL);
|
|
|
|
sprintf(sql_tmp, "UPDATE tb_sync_mobile set STATE=6 where PRE_ID=%d", atoi(old_imsi_info[0]));
|
|
dba_db_sql_execute_crm(sql_tmp, NULL, 0, 0, 0, NULL);
|
|
|
|
}
|
|
//create
|
|
sprintf(cmd_create_user,"create subscriber -imsi %s -msisdn %s -eps_user_tpl def_eps -impi %s@ims.mnc010.mcc505.3gppnetwork.org",
|
|
sub_data[2], sub_data[3], sub_data[2]);
|
|
sprintf(sql_tmp, "INSERT INTO tb_sync_cn_cmd SET cmd_type=%d, node_type=%d, node_name='%s', srv_num='%s', command='%s', state=1, result=0, timestamp=NOW()",
|
|
CT_CREATE_SUB, NT_HSS, node_name[NT_HSS], sub_data[8],
|
|
cmd_create_user);
|
|
dba_db_sql_execute_crm(sql_tmp, NULL, 0, 0, 0, NULL);
|
|
|
|
if(sub_data[5][0] == 0)
|
|
sprintf(cmd_create_user,"create aucSubscriber -imsi %s -ki %s", sub_data[2], sub_data[4]);
|
|
else
|
|
sprintf(cmd_create_user,"create aucSubscriber -imsi %s -ki %s -opc %s", sub_data[2], sub_data[4], sub_data[5]);
|
|
sprintf(sql_tmp, "INSERT INTO tb_sync_cn_cmd SET cmd_type=%d, node_type=%d, node_name='%s', srv_num='%s', command='%s', state=1, result=0, timestamp=NOW()",
|
|
CT_CREATE_SUB, NT_AUC, node_name[NT_AUC], sub_data[8],
|
|
cmd_create_user);
|
|
dba_db_sql_execute_crm(sql_tmp, NULL, 0, 0, 0, NULL);
|
|
|
|
goto prov_done;
|
|
}
|
|
|
|
sprintf(cmd_create_user,"create subscriber -imsi %s -msisdn %s -eps_user_tpl def_eps -impi %s@ims.mnc010.mcc505.3gppnetwork.org",
|
|
sub_data[2], sub_data[3], sub_data[2]);
|
|
sprintf(sql, "INSERT INTO tb_sync_cn_cmd SET cmd_type=%d, node_type=%d, node_name='%s', srv_num='%s', command='%s', state=1, result=0, timestamp=NOW()",
|
|
CT_CREATE_SUB, NT_HSS, node_name[NT_HSS], sub_data[8],
|
|
cmd_create_user);
|
|
dba_db_sql_execute_crm(sql, NULL, 0, 0, 0, NULL);
|
|
|
|
if(sub_data[5][0] == 0)
|
|
sprintf(cmd_create_user,"create aucSubscriber -imsi %s -ki %s", sub_data[2], sub_data[4]);
|
|
else
|
|
sprintf(cmd_create_user,"create aucSubscriber -imsi %s -ki %s -opc %s", sub_data[2], sub_data[4], sub_data[5]);
|
|
sprintf(sql, "INSERT INTO tb_sync_cn_cmd SET cmd_type=%d, node_type=%d, node_name='%s', srv_num='%s', command='%s', state=1, result=0, timestamp=NOW()",
|
|
CT_CREATE_SUB, NT_AUC, node_name[NT_AUC], sub_data[8],
|
|
cmd_create_user);
|
|
dba_db_sql_execute_crm(sql, NULL, 0, 0, 0, NULL);
|
|
|
|
if(atoi(sub_data[10]))//VMS enabled
|
|
{
|
|
sprintf(cmd_create_user,"create vmsSubscriber -msisdn %s", sub_data[3]);
|
|
sprintf(sql, "INSERT INTO tb_sync_cn_cmd SET cmd_type=%d, node_type=%d, node_name='%s', srv_num='%s', command='%s', state=1, result=0, timestamp=NOW()",
|
|
CT_CREATE_SUB, NT_VMS, node_name[NT_VMS], sub_data[8],
|
|
cmd_create_user);
|
|
dba_db_sql_execute_crm(sql, NULL, 0, 0, 0, NULL);
|
|
}
|
|
|
|
mobile_type = atoi(sub_data[9]);//0=postpaid, 1=prepaid
|
|
if(mobile_type == 1)
|
|
{
|
|
char rent_data[2][ARRAY_SIZE];
|
|
char user_class_data[2][ARRAY_SIZE];
|
|
int cug_id = 0, user_class=1;//local user default
|
|
int rc1=0;
|
|
|
|
sprintf(sql, "select OFR_ID from tb_prd_sub_prd_inst_551 where MAIN_PRD_INST_ID=%d limit 1", atoi(sub_data[8]));
|
|
rc1 = dba_db_sql_execute_crm(sql, rent_data, 1, 1,2, NULL);
|
|
|
|
if(rc1 != 0)
|
|
{
|
|
if(rent_data[0][0] !=0x00)
|
|
cug_id = atoi(rent_data[0]);
|
|
}
|
|
|
|
sprintf(sql, "select OFR_LEVEL from tb_prd_ofr where OFR_ID=%d limit 1", atoi(sub_data[14]));
|
|
rc1 = dba_db_sql_execute_crm(sql, user_class_data, 1, 1,2, NULL);
|
|
|
|
if(rc1 != 0)
|
|
{
|
|
if(user_class_data[0][0] !=0x00)
|
|
user_class = atoi(user_class_data[0]);
|
|
}
|
|
|
|
crm_prov_mobile_prepaid_account(sub_data, cug_id, user_class);
|
|
|
|
sprintf(cmd_create_user,"create ppsSubscriber -msisdn %s -PRE_ID %ld", sub_data[3]);
|
|
sprintf(sql, "INSERT INTO tb_sync_cn_cmd SET cmd_type=%d, node_type=%d, node_name='%s', srv_num='%s', command='%s', state=2, result=1, cause='000:Command Successful', timestamp=NOW()",
|
|
CT_CREATE_SUB, NT_OCS, node_name[NT_OCS], sub_data[8],
|
|
cmd_create_user);
|
|
dba_db_sql_execute_crm(sql, NULL, 0, 0, 0, NULL);
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
prov_done:
|
|
sprintf(sql, "update tb_sync_mobile set STATE=2, UPDATE_DATE=NOW() where PRE_ID=%d", atoi(sub_data[0]));
|
|
subs_provisioning_update_result(sql);
|
|
|
|
return rc;
|
|
}
|
|
|
|
int mobile_delete_handle(int account_id)
|
|
{
|
|
char sql[8192];
|
|
char sub_data[32][ARRAY_SIZE];
|
|
int rc;
|
|
int mobile_type = 0;
|
|
|
|
sprintf(sql,
|
|
"select PRE_ID, OPER_TYPE, IMSI, SERVICE_NBR, KI, OPC, CUST_ID, STATE, PRD_INST_ID, MOBILE_TYPE, VMS_FLAG, BIRTH_DATE, BALANCE, \
|
|
BALANCE_EXP_DATE, OFR_ID, EXP_DATE, CUG_ID from tb_sync_mobile where ACCT_ID=%d ORDER BY PRE_ID DESC limit 1", account_id);
|
|
|
|
rc = dba_db_sql_execute_ocs(sql, sub_data, 1, 32,0, NULL);
|
|
if(rc == 0)
|
|
return 0;
|
|
|
|
if(1)
|
|
{
|
|
char cmd_delete_user[256];
|
|
|
|
sprintf(cmd_delete_user,"delete subscriber -imsi %s ", sub_data[2]);
|
|
sprintf(sql, "INSERT INTO tb_sync_cn_cmd SET cmd_type=%d, node_type=%d, node_name='%s', srv_num='%s', command='%s', state=1, result=0, timestamp=NOW()",
|
|
CT_DISCONNECT_ACCOUNT, NT_HSS, node_name[NT_HSS], sub_data[8],
|
|
cmd_delete_user);
|
|
dba_db_sql_execute_ocs(sql, NULL, 0, 0, 0, NULL);
|
|
|
|
sprintf(cmd_delete_user,"delete aucSubscriber -imsi %s", sub_data[2]);
|
|
sprintf(sql, "INSERT INTO tb_sync_cn_cmd SET cmd_type=%d, node_type=%d, node_name='%s', srv_num='%s', command='%s', state=1, result=0, timestamp=NOW()",
|
|
CT_DISCONNECT_ACCOUNT, NT_AUC, node_name[NT_AUC], sub_data[8],
|
|
cmd_delete_user);
|
|
dba_db_sql_execute_ocs(sql, NULL, 0, 0, 0, NULL);
|
|
|
|
//if(atoi(sub_data[10]))//VMS enabled
|
|
if(1)//VMS enabled
|
|
{
|
|
sprintf(cmd_delete_user,"delete vmsSubscriber -msisdn %s", sub_data[3]);
|
|
sprintf(sql, "INSERT INTO tb_sync_cn_cmd SET cmd_type=%d, node_type=%d, node_name='%s', srv_num='%s', command='%s', state=1, result=0, timestamp=NOW()",
|
|
CT_DISCONNECT_ACCOUNT, NT_VMS, node_name[NT_VMS], sub_data[8],
|
|
cmd_delete_user);
|
|
dba_db_sql_execute_ocs(sql, NULL, 0, 0, 0, NULL);
|
|
}
|
|
|
|
mobile_type = atoi(sub_data[9]);//0=postpaid, 1=prepaid
|
|
if(0)//no smcli connection to OCS
|
|
{
|
|
if(mobile_type == 1)
|
|
{
|
|
sprintf(cmd_delete_user,"delete ppsSubscriber -msisdn %s", sub_data[3]);
|
|
sprintf(sql, "INSERT INTO tb_sync_cn_cmd SET cmd_type=%d, node_type=%d, node_name='%s', srv_num='%s', command='%s', state=2, result=1, cause='000:Command Successful', timestamp=NOW()",
|
|
CT_DISCONNECT_ACCOUNT, NT_OCS, node_name[NT_OCS], sub_data[8],
|
|
cmd_delete_user);
|
|
dba_db_sql_execute_ocs(sql, NULL, 0, 0, 0, NULL);
|
|
}
|
|
}
|
|
}
|
|
|
|
return rc;
|
|
}
|
|
|
|
void update_plan_quotation_when_on_boarding(int owner_id)
|
|
{
|
|
char sql[8192];
|
|
char cur_time[10];
|
|
|
|
int rate = 100;
|
|
int max_days = 31;
|
|
|
|
GetCurrentTime(cur_time);
|
|
switch(cur_time[1])
|
|
{
|
|
case 4:
|
|
case 6:
|
|
case 9:
|
|
case 11:
|
|
max_days = 30;
|
|
break;
|
|
case 2:
|
|
if(cur_time[0]%4 == 0)
|
|
{
|
|
max_days = 29;
|
|
}
|
|
else
|
|
{
|
|
max_days = 28;
|
|
}
|
|
break;
|
|
}
|
|
|
|
rate = ((max_days - cur_time[2])+1) * 100 / max_days;
|
|
|
|
sprintf(sql, "update ratable_history set FREE_VALUE=FREE_VALUE*%d/100 where OWNER_ID=%d", rate, owner_id);
|
|
|
|
subs_provisioning_update_result(sql);
|
|
|
|
}
|
|
|
|
void pstn_provisioning_command_process()
|
|
{
|
|
char sql[8192];
|
|
char cmd_create_user[256];
|
|
char sub_data[32][ARRAY_SIZE], sub_data1[32][ARRAY_SIZE];
|
|
int rc;
|
|
|
|
sprintf(sql,
|
|
"select POST_ID, SERVICE_NBR, CUST_NAME, VMS_FLAG, PRD_INST_ID,OFR_TYPE, ORDER_ID from tb_sync_pstn where STATE=1 limit 1");
|
|
|
|
rc = dba_db_sql_execute_crm(sql, sub_data, 1, 32, 2, NULL);
|
|
if(rc != 0)
|
|
{
|
|
int krone_pair_id=0, ssentry=1125;
|
|
char res_data[32][ARRAY_SIZE];
|
|
|
|
sprintf(sql, "update tb_sync_pstn set STATE=3, UPDATE_DATE=NOW() where POST_ID=%d", atoi(sub_data[0]));
|
|
subs_provisioning_update_result(sql);
|
|
|
|
sprintf(sql,
|
|
"SELECT C.RESOURCE_EXAM_NUM FROM TB_PRD_RES_INST_551 A, \
|
|
TB_PRD_RES_INST_DETAIL_551 B, \
|
|
TB_RESOURCE_EXAM C WHERE A.RES_INST_ID=B.RES_INST_ID AND B.RESOURCE_EXAM_ID=C.RESOURCE_EXAM_ID AND C.RESOURCE_ID=%d \
|
|
AND A.ORDER_ID=%s", pstn_get_krone_pair_resource_id(), sub_data[6]);
|
|
rc = dba_db_sql_execute_crm(sql, res_data, 1, 1, 2, NULL);
|
|
if(rc != 0)
|
|
krone_pair_id = atoi(res_data[0]);
|
|
|
|
sprintf(sql,
|
|
"SELECT C.RESOURCE_EXAM_NUM FROM TB_PRD_RES_INST_551 A, \
|
|
TB_PRD_RES_INST_DETAIL_551 B, \
|
|
TB_RESOURCE_EXAM C WHERE A.RES_INST_ID=B.RES_INST_ID AND B.RESOURCE_EXAM_ID=C.RESOURCE_EXAM_ID AND C.RESOURCE_ID=%d \
|
|
AND A.ORDER_ID=%s", pstn_get_ssentry_resource_id(), sub_data[6]);
|
|
rc = dba_db_sql_execute_crm(sql, res_data, 1, 1, 2, NULL);
|
|
if(rc != 0)
|
|
ssentry = atoi(res_data[0]);
|
|
|
|
if(1)
|
|
{
|
|
sprintf(cmd_create_user,"create pstn user isdn=%s, krone_pair_id=%d, ssentry=%d, user_name=%s", sub_data[1], krone_pair_id, ssentry, sub_data[2]);
|
|
sprintf(sql, "INSERT INTO tb_sync_cn_cmd SET cmd_type=%d, node_type=%d, node_name='%s', srv_num='%s', command='%s', state=1, result=0, timestamp=NOW()",
|
|
CT_CREATE_SUB, NT_PSTN, node_name[NT_PSTN], sub_data[4],
|
|
cmd_create_user);
|
|
dba_db_sql_execute_crm(sql, NULL, 0, 0, 0, NULL);
|
|
if(0)
|
|
{
|
|
sprintf(cmd_create_user,"create pstn user isdn=%s, krone_pair_id=%d, ssentry=%d, user_name=%s", sub_data[1], krone_pair_id, ssentry, sub_data[2]);
|
|
sprintf(sql, "INSERT INTO tb_sync_cn_cmd SET cmd_type=%d, node_type=%d, node_name='%s', srv_num='%s', command='%s', state=1, result=0, timestamp=NOW()",
|
|
CT_CREATE_SUB, NT_MSAN, node_name[NT_MSAN], sub_data[4],
|
|
cmd_create_user);
|
|
dba_db_sql_execute_crm(sql, NULL, 0, 0, 0, NULL);
|
|
}
|
|
}
|
|
|
|
//crm_prov_pstn_account(sub_data, ssentry, krone_pair_id);
|
|
|
|
if(atoi(sub_data[3]))//VMS enabled
|
|
{
|
|
sprintf(cmd_create_user,"create vmsSubscriber -msisdn %s", sub_data[1]);
|
|
sprintf(sql, "INSERT INTO tb_sync_cn_cmd SET cmd_type=%d, node_type=%d, node_name='%s', srv_num='%s', command='%s', state=1, result=0, timestamp=NOW()",
|
|
CT_CREATE_SUB, NT_VMS, node_name[NT_VMS], sub_data[4],
|
|
cmd_create_user);
|
|
dba_db_sql_execute_crm(sql, NULL, 0, 0, 0, NULL);
|
|
|
|
//crm_create_vms_account(sub_data[1]);
|
|
}
|
|
|
|
//update_plan_quotation_when_on_boarding(atoi(sub_data[4]));
|
|
}
|
|
else
|
|
{
|
|
sprintf(sql, "select cmd_id, acct_id from tb_pstn_disc_cmd where acct_status=0 limit 1");
|
|
|
|
rc = dba_db_sql_execute_crm(sql, sub_data, 1, 32, 2, NULL);
|
|
if(rc != 0)
|
|
{
|
|
sprintf(sql, "update tb_pstn_disc_cmd set acct_status=1 where cmd_id='%s'", sub_data[0]);
|
|
dba_db_sql_execute_crm(sql, NULL, 0, 0, 0, NULL);
|
|
|
|
sprintf(sql,"select SERVICE_NBR from tb_prd_prd_inst_551 WHERE acct_id='%s'", sub_data[1]);
|
|
rc = dba_db_sql_execute_crm(sql, sub_data1, 1, 32, 2, NULL);
|
|
if(rc != 0)
|
|
{
|
|
long account_id = atol(sub_data[1]);
|
|
crm_delete_subscriber_profile(sub_data1[0], 2, account_id);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
int pstn_provisioning_node_process()
|
|
{
|
|
char sql[8192];
|
|
char data[32][ARRAY_SIZE];
|
|
int rc;
|
|
int krone_pair_id, ss_entry, pre_id;
|
|
char isdn[32], user_name[64],state[64],buf[32];
|
|
char *ptr=NULL, *ptr1=NULL;
|
|
int cmd_type;
|
|
|
|
sprintf(sql, "select id, command, node_type,cmd_type from tb_sync_cn_cmd where state=1 and node_type=%d limit 1", NT_PSTN);
|
|
rc = dba_db_sql_execute_crm(sql, data, 1, 32, 0, NULL);
|
|
if(rc != 0)
|
|
{
|
|
pre_id = atoi(data[0]);
|
|
|
|
sprintf(sql, "update tb_sync_cn_cmd set state=3, timestamp=NOW() where id=%d", pre_id);
|
|
dba_db_sql_execute_crm(sql, NULL, 0, 0, 0, NULL);
|
|
cmd_type = atoi(data[3]);
|
|
if(1)//if(cmd_type == CT_CREATE_SUB || cmd_type == CT_UPDATE_SUB)
|
|
{
|
|
//command=create pstn user isdn=%s, krone_pair_id=%d, ss_entry=%d, user_name=
|
|
|
|
ptr = strstr(data[1], "isdn=");
|
|
if(ptr != NULL)
|
|
{
|
|
ptr1 = strstr(data[1], ", krone_pair_id=");
|
|
if(ptr1 != NULL)
|
|
{
|
|
memset(isdn, 0x00, 32);
|
|
memcpy(isdn,ptr+5, ptr1-ptr-5);
|
|
}
|
|
|
|
}
|
|
if(ptr1 != NULL)
|
|
{
|
|
ptr = ptr1;
|
|
ptr1 = strstr(data[1], ", ssentry=");
|
|
if(ptr1 != NULL)
|
|
{
|
|
memset(buf, 0x00, 32);
|
|
memcpy(buf,ptr+16, ptr1-ptr-16);
|
|
krone_pair_id = atoi(buf);
|
|
}
|
|
}
|
|
if(ptr1 != NULL)
|
|
{
|
|
ptr = ptr1;
|
|
if(cmd_type == CT_CREATE_SUB)
|
|
ptr1 = strstr(data[1], ", user_name=");
|
|
else
|
|
ptr1 = strstr(data[1], ", state=");
|
|
|
|
if(ptr1 != NULL)
|
|
{
|
|
memset(buf, 0x00, 32);
|
|
memcpy(buf,ptr+10, ptr1-ptr-10);
|
|
ss_entry = atoi(buf);
|
|
}
|
|
}
|
|
|
|
if(ptr1 != NULL)
|
|
{
|
|
if(cmd_type == CT_CREATE_SUB)
|
|
strcpy(state, ptr1+12);
|
|
else
|
|
strcpy(state, ptr1+8);
|
|
}
|
|
|
|
|
|
sprintf(data[1], "%s", isdn);
|
|
if(cmd_type == CT_CREATE_SUB)
|
|
sprintf(data[2], "%s", user_name);
|
|
else
|
|
sprintf(data[2], "%s", state);
|
|
|
|
sprintf(data[4], "%d", pre_id);
|
|
|
|
if(cmd_type == CT_CREATE_SUB)
|
|
sprintf(data[5], "%d", 1); //create
|
|
else
|
|
sprintf(data[5], "%d", 2); //update
|
|
|
|
crm_prov_pstn_account(data, ss_entry, krone_pair_id);
|
|
|
|
}
|
|
}
|
|
else
|
|
{
|
|
sprintf(sql, "select id, command from tb_sync_cn_cmd where result=3 and node_type=%d limit 1", NT_PSTN);
|
|
rc = dba_db_sql_execute_crm(sql, data, 1, 32, 0, NULL);
|
|
if(rc != 0)
|
|
{
|
|
pre_id = atoi(data[0]);
|
|
|
|
sprintf(sql, "update tb_sync_cn_cmd set state=3, result=4, timestamp=NOW() where id=%d", pre_id);
|
|
dba_db_sql_execute_crm(sql, NULL, 0, 0, 0, NULL);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return rc;
|
|
|
|
}
|
|
|
|
static char crm_user_prov_cmd[10][16]={"None","Create","Replace","Suspend","Disable","Resume","Disconnect"};
|
|
|
|
int pstn_service_control_process()
|
|
{
|
|
char sql[8192];
|
|
char cmd_update_user[1024];
|
|
char data[32][ARRAY_SIZE], sync_data[32][ARRAY_SIZE], tmp_data[32][ARRAY_SIZE];
|
|
int rc;
|
|
int node_type, pre_id;
|
|
int cmd_type;
|
|
int krone_pair_id, ssentry;
|
|
|
|
sprintf(sql, "select id, service_nbr, type, SERVICE_TYPE from tb_service_control where state=1 limit 1");
|
|
rc = dba_db_sql_execute_crm(sql, data, 1, 32, 0, NULL);
|
|
if(rc != 0)
|
|
{
|
|
pre_id = atoi(data[0]);
|
|
|
|
sprintf(sql, "update tb_service_control set state=2, update_date=NOW() where id=%d", pre_id);
|
|
dba_db_sql_execute_crm(sql, NULL, 0, 0, 0, NULL);
|
|
|
|
node_type = atoi(data[3]);
|
|
if(node_type == 1)//ADSL , do nothing
|
|
return 1;
|
|
|
|
cmd_type = atoi(data[2]);
|
|
if(cmd_type>=10)
|
|
return 0;
|
|
|
|
if(node_type == 2)//PSTN
|
|
{
|
|
|
|
sprintf(sql, "select PRD_INST_ID, CUST_ID from tb_sync_pstn where SERVICE_NBR='%s' ORDER BY POST_ID DESC limit 1", data[1]);
|
|
rc = dba_db_sql_execute_crm(sql, sync_data, 1, 32, 0, NULL);
|
|
if(rc == 0)//can't find on-boarding info
|
|
return 0;
|
|
|
|
sprintf(sql,
|
|
"SELECT C.RESOURCE_EXAM_NUM FROM TB_PRD_RES_INST_551 A, \
|
|
TB_PRD_RES_INST_DETAIL_551 B, \
|
|
TB_RESOURCE_EXAM C WHERE A.RES_INST_ID=B.RES_INST_ID AND B.RESOURCE_EXAM_ID=C.RESOURCE_EXAM_ID AND C.RESOURCE_ID=%d \
|
|
AND A.CUST_ID=%s", pstn_get_krone_pair_resource_id(), sync_data[1]);
|
|
rc = dba_db_sql_execute_crm(sql, tmp_data, 1, 1, 2, NULL);
|
|
if(rc != 0)
|
|
krone_pair_id = atoi(tmp_data[0]);
|
|
|
|
sprintf(sql,
|
|
"SELECT C.RESOURCE_EXAM_NUM FROM TB_PRD_RES_INST_551 A, \
|
|
TB_PRD_RES_INST_DETAIL_551 B, \
|
|
TB_RESOURCE_EXAM C WHERE A.RES_INST_ID=B.RES_INST_ID AND B.RESOURCE_EXAM_ID=C.RESOURCE_EXAM_ID AND C.RESOURCE_ID=%d \
|
|
AND A.CUST_ID=%s", pstn_get_ssentry_resource_id(), sync_data[1]);
|
|
rc = dba_db_sql_execute_crm(sql, tmp_data, 1, 1, 2, NULL);
|
|
if(rc != 0)
|
|
ssentry = atoi(tmp_data[0]);
|
|
|
|
sprintf(cmd_update_user,"update pstn user isdn=%s, krone_pair_id=%d, ssentry=%d, state=%s", data[1], krone_pair_id, ssentry, crm_user_prov_cmd[cmd_type]);
|
|
sprintf(sql, "INSERT INTO tb_sync_cn_cmd SET cmd_type=%d, node_type=%d, node_name='%s', srv_num='%s', command='%s', state=1, result=0, timestamp=NOW()",
|
|
cmd_type, NT_PSTN, node_name[NT_PSTN], sync_data[0],
|
|
cmd_update_user);
|
|
dba_db_sql_execute_crm(sql, NULL, 0, 0, 0, NULL);
|
|
}
|
|
|
|
}
|
|
|
|
return rc;
|
|
}
|
|
|
|
void pstn_update_provisiong_result(int result, int post_id, char *cause)
|
|
{
|
|
|
|
char sql[1024];
|
|
|
|
if(result == 1)
|
|
{
|
|
sprintf(sql, "update tb_sync_cn_cmd set state=2, result=5, timestamp=NOW() where id=%d", post_id);
|
|
}
|
|
else
|
|
{
|
|
sprintf(sql, "update tb_sync_cn_cmd set state=2, result=6, cause='%s', timestamp=NOW() where id=%d", cause, post_id);
|
|
}
|
|
|
|
subs_provisioning_update_result(sql);
|
|
|
|
}
|
|
|
|
void adsl_provisioning_command_process()
|
|
{
|
|
|
|
char sql[8192];
|
|
char sub_data[32][ARRAY_SIZE];
|
|
int rc;
|
|
|
|
sprintf(sql,
|
|
"select POST_ID, PRD_INST_ID from tb_sync_adsl where STATE=1 limit 1");
|
|
|
|
rc = dba_db_sql_execute_crm(sql, sub_data, 1, 32, 2, NULL);
|
|
if(rc != 0)
|
|
{
|
|
sprintf(sql, "update tb_sync_adsl set STATE=2, UPDATE_DATE=NOW() where POST_ID=%d", atoi(sub_data[0]));
|
|
subs_provisioning_update_result(sql);
|
|
|
|
//update_plan_quotation_when_on_boarding(atoi(sub_data[1]));
|
|
//CRM will assign plan benefits when do on-boarding
|
|
|
|
}
|
|
}
|
|
|
|
int mobile_provisioning_node_process(int nt_type)
|
|
{
|
|
char sql[8192];
|
|
char data[32][ARRAY_SIZE];
|
|
int rc;
|
|
|
|
sprintf(sql, "select id, command from tb_sync_cn_cmd where state=1 and node_type=%d limit 1", nt_type);
|
|
|
|
rc = dba_db_sql_execute_crm(sql, data, 1, 32, 0, NULL);
|
|
if(rc != 0)
|
|
{
|
|
sprintf(sql, "update tb_sync_cn_cmd set state=3, timestamp=NOW() where id=%d", atoi(data[0]));
|
|
dba_db_sql_execute_crm(sql, NULL, 0, 0, 0, NULL);
|
|
|
|
smcli_send_command(data[1]);
|
|
crm_smcli_thread.resend = 0;
|
|
crm_smcli_thread.key_id = atoi(data[0]);
|
|
}
|
|
else
|
|
{
|
|
sprintf(sql, "select id, command from tb_sync_cn_cmd where result=3 and node_type=%d limit 1", nt_type);
|
|
|
|
rc = dba_db_sql_execute_crm(sql, data, 1, 32, 0, NULL);
|
|
if(rc != 0)
|
|
{
|
|
sprintf(sql, "update tb_sync_cn_cmd set result=4, timestamp=NOW() where id=%d", atoi(data[0]));
|
|
dba_db_sql_execute_crm(sql, NULL, 0, 0, 0, NULL);
|
|
|
|
smcli_send_command(data[1]);
|
|
crm_smcli_thread.resend = 1;
|
|
crm_smcli_thread.key_id = atoi(data[0]);
|
|
}
|
|
|
|
}
|
|
|
|
return rc;
|
|
|
|
}
|
|
|
|
void mobile_provisioning_node_update_result(int nt_type, int result, char *result_des)
|
|
{
|
|
char sql[8192];
|
|
|
|
if(crm_smcli_thread.resend == 0)
|
|
{
|
|
sprintf(sql, "update tb_sync_cn_cmd set state=2, result=%d, cause='%s', timestamp=NOW() where id=%d", result, result_des, crm_smcli_thread.key_id);
|
|
}
|
|
else
|
|
{
|
|
if(result == 1)
|
|
sprintf(sql, "update tb_sync_cn_cmd set state=2, result=5, timestamp=NOW() where id=%d", crm_smcli_thread.key_id);
|
|
else
|
|
sprintf(sql, "update tb_sync_cn_cmd set state=2, result=6, cause='%s', timestamp=NOW() where id=%d", result_des, crm_smcli_thread.key_id);
|
|
|
|
}
|
|
dba_db_sql_execute_crm(sql, NULL, 0, 0, 0, NULL);
|
|
|
|
}
|
|
|
|
void crm_delete_subscriber_profile(char *service_num, int account_type, int account_id)
|
|
{//account_type=1/2/3 mobile/pstn/adsl
|
|
char sql[8192];
|
|
char sub_data[32][ARRAY_SIZE],sub_data1[32][ARRAY_SIZE],sub_data2[32][ARRAY_SIZE];
|
|
int rc;
|
|
int mobile_type = 0;
|
|
int vms_flag =0 ;
|
|
char cmd_delete_user[1024];
|
|
|
|
if(account_type == 1)//mobile
|
|
{
|
|
sprintf(sql,
|
|
"select PRE_ID, IMSI, SERVICE_NBR, MOBILE_TYPE, VMS_FLAG, PRD_INST_ID from tb_sync_mobile where ACCT_ID=%d limit 1", account_id);
|
|
//service number -> product_inst_id
|
|
rc = dba_db_sql_execute_crm(sql, sub_data, 1, 32,2, NULL);
|
|
if(rc != 0)
|
|
{
|
|
|
|
mobile_type = atoi(sub_data[3]);
|
|
vms_flag = atoi(sub_data[4]);
|
|
|
|
sprintf(cmd_delete_user,"delete subscriber -imsi %s ", sub_data[1]);
|
|
sprintf(sql, "INSERT INTO tb_sync_cn_cmd SET cmd_type=%d, node_type=%d, node_name='%s', srv_num='%s', command='%s', state=1, result=0, timestamp=NOW()",
|
|
CT_DISCONNECT_ACCOUNT, NT_HSS, node_name[NT_HSS], sub_data[5],
|
|
cmd_delete_user);
|
|
dba_db_sql_execute_crm(sql, NULL, 0, 0, 0, NULL);
|
|
|
|
sprintf(cmd_delete_user,"delete aucSubscriber -imsi %s ", sub_data[1]);
|
|
sprintf(sql, "INSERT INTO tb_sync_cn_cmd SET cmd_type=%d, node_type=%d, node_name='%s', srv_num='%s', command='%s', state=1, result=0, timestamp=NOW()",
|
|
CT_DISCONNECT_ACCOUNT, NT_AUC, node_name[NT_AUC], sub_data[5],
|
|
cmd_delete_user);
|
|
dba_db_sql_execute_crm(sql, NULL, 0, 0, 0, NULL);
|
|
|
|
if(mobile_type == 1)//prepaid to OCS
|
|
{
|
|
sprintf(cmd_delete_user,"delete ppsSubscriber -msisdn %s ", sub_data[2]);
|
|
sprintf(sql, "INSERT INTO tb_sync_cn_cmd SET cmd_type=%d, node_type=%d, node_name='%s', srv_num='%s', command='%s', state=2, result=1, cause='0000:Command successful', timestamp=NOW()",
|
|
CT_DISCONNECT_ACCOUNT, NT_OCS, node_name[NT_OCS], sub_data[5],
|
|
cmd_delete_user);
|
|
dba_db_sql_execute_crm(sql, NULL, 0, 0, 0, NULL);
|
|
}
|
|
|
|
if(vms_flag == 1)//VMS enabled to VMS
|
|
{
|
|
sprintf(cmd_delete_user,"delete vmsSubscriber -msisdn %s ", sub_data[2]);
|
|
sprintf(sql, "INSERT INTO tb_sync_cn_cmd SET cmd_type=%d, node_type=%d, node_name='%s', srv_num='%s', command='%s', state=1, result=0, timestamp=NOW()",
|
|
CT_DISCONNECT_ACCOUNT, NT_VMS, node_name[NT_VMS], sub_data[5],
|
|
cmd_delete_user);
|
|
dba_db_sql_execute_crm(sql, NULL, 0, 0, 0, NULL);
|
|
}
|
|
|
|
}
|
|
}
|
|
else if(account_type == 2)//pstn
|
|
{
|
|
int krone_pair_id=0,ssentry=0;
|
|
|
|
|
|
sprintf(sql,
|
|
"select ORDER_ID from tb_sync_pstn where SERVICE_NBR='%s' ORDER by ORDER_ID desc limit 1", service_num);
|
|
rc = dba_db_sql_execute_crm(sql, sub_data, 1, 1, 2, NULL);
|
|
|
|
sprintf(sql,
|
|
"SELECT C.RESOURCE_EXAM_NUM FROM TB_PRD_RES_INST_551 A, \
|
|
TB_PRD_RES_INST_DETAIL_551 B, \
|
|
TB_RESOURCE_EXAM C WHERE A.RES_INST_ID=B.RES_INST_ID AND B.RESOURCE_EXAM_ID=C.RESOURCE_EXAM_ID AND C.RESOURCE_ID=1046 \
|
|
AND A.ORDER_ID=%s", sub_data[0]);
|
|
rc = dba_db_sql_execute_crm(sql, sub_data1, 1, 1, 2, NULL);
|
|
if(rc != 0)
|
|
krone_pair_id = atoi(sub_data1[0]);
|
|
|
|
sprintf(sql,
|
|
"SELECT C.RESOURCE_EXAM_NUM FROM TB_PRD_RES_INST_551 A, \
|
|
TB_PRD_RES_INST_DETAIL_551 B, \
|
|
TB_RESOURCE_EXAM C WHERE A.RES_INST_ID=B.RES_INST_ID AND B.RESOURCE_EXAM_ID=C.RESOURCE_EXAM_ID AND C.RESOURCE_ID=%d \
|
|
AND A.ORDER_ID=%s", pstn_get_ssentry_resource_id(), sub_data[0]);
|
|
rc = dba_db_sql_execute_crm(sql, sub_data2, 1, 1, 2, NULL);
|
|
if(rc != 0)
|
|
ssentry = atoi(sub_data2[0]);
|
|
|
|
sprintf(cmd_delete_user,"delete pstn user isdn=%s, krone_pair_id=%d, ssentry=%d, state=Deleted, account_id=%d ", service_num,krone_pair_id, ssentry,account_id);
|
|
sprintf(sql, "INSERT INTO tb_sync_cn_cmd SET cmd_type=%d, node_type=%d, node_name='%s', srv_num='%s', command='%s', state=1, result=1, timestamp=NOW()",
|
|
CT_DISCONNECT_ACCOUNT, NT_PSTN, node_name[NT_PSTN], service_num,
|
|
cmd_delete_user);
|
|
dba_db_sql_execute_crm(sql, NULL, 0, 0, 0, NULL);
|
|
|
|
//crm_prov_pstn_account_delete(service_num, krone_pair_id);
|
|
|
|
}
|
|
}
|
|
|
|
void set_smcli_state(int new_state)
|
|
{
|
|
//printf("smcli thread state %d->%d\r\n", crm_smcli_thread.state, new_state);
|
|
|
|
crm_smcli_thread.state = new_state;
|
|
crm_smcli_thread.state_timer = 0;
|
|
}
|
|
|
|
static int smcli_timer = 16; //8seconds
|
|
int user_prov_smcli_thread()
|
|
{
|
|
int state = 0, timer = 0;
|
|
int rc=0;
|
|
char result[256];
|
|
|
|
state = crm_smcli_thread.state;
|
|
timer = crm_smcli_thread.state_timer ++;
|
|
|
|
switch(state)
|
|
{
|
|
case CRM_CLI_ST_READ_CMD:
|
|
rc = mobile_provisioning_command_process();
|
|
if(rc !=0 )
|
|
{
|
|
set_smcli_state(CRM_CLI_ST_HSS_PROV);
|
|
}
|
|
else
|
|
{
|
|
set_smcli_state(CRM_CLI_ST_HSS_PROV);
|
|
}
|
|
break;
|
|
case CRM_CLI_ST_HSS_PROV:
|
|
rc = mobile_provisioning_node_process(NT_HSS);
|
|
if(rc == 0)
|
|
{
|
|
set_smcli_state(CRM_CLI_ST_AUC_PROV);
|
|
}
|
|
else
|
|
{
|
|
set_smcli_state(CRM_CLI_ST_HSS_PROV_RES);
|
|
}
|
|
break;
|
|
case CRM_CLI_ST_HSS_PROV_RES:
|
|
if(timer>=smcli_timer)
|
|
{
|
|
mobile_provisioning_node_update_result(NT_HSS, 2, "timeout"); //failed
|
|
set_smcli_state(CRM_CLI_ST_AUC_PROV);
|
|
|
|
}
|
|
else
|
|
{
|
|
rc = smcli_get_result(result);
|
|
if(rc != 0)
|
|
{
|
|
mobile_provisioning_node_update_result(NT_HSS, rc, result);
|
|
set_smcli_state(CRM_CLI_ST_AUC_PROV);
|
|
}
|
|
|
|
|
|
}
|
|
break;
|
|
case CRM_CLI_ST_AUC_PROV:
|
|
rc = mobile_provisioning_node_process(NT_AUC);
|
|
if(rc == 0)
|
|
{
|
|
set_smcli_state(CRM_CLI_ST_OCS_PROV);
|
|
}
|
|
else
|
|
{
|
|
set_smcli_state(CRM_CLI_ST_AUC_PROV_RES);
|
|
}
|
|
break;
|
|
case CRM_CLI_ST_AUC_PROV_RES:
|
|
if(timer>=smcli_timer)
|
|
{
|
|
mobile_provisioning_node_update_result(NT_AUC, 2, "timeout"); //failed
|
|
set_smcli_state(CRM_CLI_ST_OCS_PROV);
|
|
|
|
}
|
|
else
|
|
{
|
|
rc = smcli_get_result(result);
|
|
if(rc != 0)
|
|
{
|
|
mobile_provisioning_node_update_result(NT_AUC, rc, result);
|
|
set_smcli_state(CRM_CLI_ST_OCS_PROV);
|
|
}
|
|
|
|
}
|
|
break;
|
|
case CRM_CLI_ST_OCS_PROV:
|
|
rc = mobile_provisioning_node_process(NT_OCS);
|
|
if(rc == 0)
|
|
{
|
|
set_smcli_state(CRM_CLI_ST_VMS_PROV);
|
|
}
|
|
else
|
|
{
|
|
set_smcli_state(CRM_CLI_ST_OCS_PROV_RES);
|
|
}
|
|
break;
|
|
case CRM_CLI_ST_OCS_PROV_RES:
|
|
if(timer>=smcli_timer)//
|
|
{
|
|
mobile_provisioning_node_update_result(NT_OCS, 2, "timeout"); //failed
|
|
set_smcli_state(CRM_CLI_ST_VMS_PROV);
|
|
|
|
}
|
|
else
|
|
{
|
|
rc = smcli_get_result(result);
|
|
if(rc != 0)
|
|
{
|
|
mobile_provisioning_node_update_result(NT_OCS, rc, result);
|
|
set_smcli_state(CRM_CLI_ST_VMS_PROV);
|
|
}
|
|
|
|
}
|
|
|
|
break;
|
|
case CRM_CLI_ST_VMS_PROV:
|
|
rc = mobile_provisioning_node_process(NT_VMS);
|
|
if(rc == 0)
|
|
{
|
|
set_smcli_state(CRM_CLI_ST_READ_CMD);
|
|
}
|
|
else
|
|
{
|
|
set_smcli_state(CRM_CLI_ST_VMS_PROV_RES);
|
|
}
|
|
break;
|
|
case CRM_CLI_ST_VMS_PROV_RES:
|
|
if(timer>=smcli_timer)
|
|
{
|
|
mobile_provisioning_node_update_result(NT_VMS, 2, "timeout"); //failed
|
|
set_smcli_state(CRM_CLI_ST_READ_CMD);
|
|
|
|
}
|
|
else
|
|
{
|
|
rc = smcli_get_result(result);
|
|
if(rc != 0)
|
|
{
|
|
mobile_provisioning_node_update_result(NT_VMS, rc, result);
|
|
set_smcli_state(CRM_CLI_ST_READ_CMD);
|
|
}
|
|
|
|
}
|
|
break;
|
|
case CRM_CLI_ST_PCRF_PROV:
|
|
break;
|
|
}
|
|
}
|
|
|
|
int subs_provisioning_command_process()
|
|
{
|
|
|
|
if(0)
|
|
mobile_provisioning_command_process();
|
|
else
|
|
user_prov_smcli_thread();
|
|
|
|
pstn_provisioning_command_process();
|
|
pstn_provisioning_node_process();
|
|
pstn_service_control_process();
|
|
|
|
adsl_provisioning_command_process();
|
|
|
|
return 1;
|
|
}
|
|
|
|
/*
|
|
+-------------------+--------------+------+-----+---------+--------------------------------+
|
|
| Field | Type | Null | Key | Default | Extra |
|
|
+-------------------+--------------+------+-----+---------+--------------------------------+
|
|
| sms_alert_id | int(11) | NO | PRI | NULL | auto_increment |
|
|
| sms_called_number | varchar(20) | YES | | NULL | |
|
|
| sms_content | varchar(500) | YES | | NULL | |
|
|
| sms_dcs | int(1) | YES | | 0 | |
|
|
| sms_state | int(1) | YES | | 1 | |
|
|
| sms_validity | datetime(6) | YES | | NULL | |
|
|
| sms_crt_date | datetime(6) | YES | | NULL | on update CURRENT_TIMESTAMP(6) |
|
|
| sms_module | int(1) | YES | | NULL | |
|
|
+-------------------+--------------+------+-----+---------+--------------------------------+
|
|
*/
|
|
void sms_notification_handle()
|
|
{
|
|
char sql[8192];
|
|
char sms_data[8][ARRAY_SIZE];
|
|
int rc;
|
|
|
|
sprintf(sql, "select * from tb_sms_info where sms_state=1 limit 1");
|
|
|
|
rc = dba_db_sql_execute_crm(sql, sms_data, 1, 32, 0, NULL);
|
|
if(rc != 0)
|
|
{
|
|
sprintf(sql, "update tb_sms_info set sms_state=2 where sms_alert_id=%d", atoi(sms_data[0]));
|
|
dba_db_sql_execute_crm(sql, NULL, 0, 0, 0, NULL);
|
|
|
|
rest_crm_send_sms_notification(sms_data);
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
int sms_notification_process()
|
|
{
|
|
sms_notification_handle();
|
|
|
|
return 1;
|
|
}
|
|
|