int dmdb_query_fetch_scroll(dmdb_query_t *query, int move_type, int offset) { dm_bool ret; ret = dm_fetch_scroll(query->stmt, move_type, offset); return (ret == DM_FALSE) ? -1 : 0; }
//====================================================================================== int get_unit_info( cost_collect_stru **cost_collect17, char *month, long long* plant_num) { char sql_string[256]; char plant_name[256]; long plant_name_size; long long i, j, row_num; int flag; //判断dm_fetch_scroll()是否成功 print_curtline("get_unit_info() start"); sprintf(sql_string, "%s", "select distinct sname from plan.plan.station_info"); if (exec_sql(sql_string) != 0) PERROR_CLOSEDATABASE_EXIT(-1, "get_unit_info()中exec_sql()") if (DM_FALSE == dm_bind_column(hsmt, 1, DM_DATA_CHAR, TYPE_DEFAULT, plant_name, sizeof(plant_name), &plant_name_size, DM_DESC_PTR_LEN_DEFAULT)) PERROR_CLOSEDATABASE_EXIT(-1,"get_unit_info()中dm_bind_column()") if(DM_FALSE == dm_describe_row_num(hsmt, plant_num) ) PERROR_CLOSEDATABASE_EXIT(-1, "get_unit_info()中dm_describe_row_num()") if(0 >= (*plant_num)) PERROR_CLOSEDATABASE_EXIT(-1, "no plant find, get 0 items from data from unit_info") *cost_collect17 = (cost_collect_stru*)malloc( (*plant_num)*sizeof(cost_collect_stru) ); if(cost_collect17==NULL) PERROR_CLOSEDATABASE_EXIT(-1, "get_unit_info()中malloc()") else { for(i=0; i<*plant_num; i++) { for(j= 0;j<COLLECT_NUM;j++) (*cost_collect17)[i].value[j] = 0; } } for(i=0;i<*plant_num;i++) { flag = dm_fetch_scroll(hsmt,DM_FETCH_NEXT,0); if(DM_FALSE == flag) PERROR_CLOSEDATABASE_EXIT(-1, "get_unit_info()中dm_fetch_scroll()") else if(DM_NO_DATA_FOUND == flag) PERROR_CLOSEDATABASE_EXIT(-1,"select distinct sname from " "plan.plan.month_electricity执行时,数据表中没有数据,get_unit_info()中dm_fetch_scroll()") strcpy((*cost_collect17)[i].plant_name, plant_name); } print_info(-1 ,cost_collect17,plant_num); print_curtline("get_unit_info() end"); return 0; }
//====================================================================================== int get_cost_result(char *month,cost_collect_stru **cost_collect17, long long* plant_num) { long long i,j,k; long long row_num; char sql_string[512]; char plant_name[256]; long plant_name_size; char check_cost[20]; long check_cost_size; int flag; char field[22]; long field_size; //=================================================================================== /*取得计划考核结果 */ //================================================================================ printf("\n===================================================get_cost_result()开始=======\n\n"); sprintf(sql_string,"select sname,sum(result_num) " "from plan.plan.plan_check_result " "where sstyle='厂站' and " "sdate like '%s-%%%%' group by sname " "union all " "select sstation,sum(result_num) from " "plan.plan.unit_info, plan.plan.plan_check_result " "where plan.plan.unit_info.sname=plan.plan.plan_check_result.sname " "and sdate like '%s-%%%%' and sstyle = '机组' " "group by plan.plan.unit_info.sstation",month,month); /*sprintf(sql_string,"select sstation,sum(result_num) from\ plan.plan.unit_info,plan.plan.plan_check_result\ where plan.plan.unit_info.sname=plan.plan.plan_check_result.sname\ and ('%s-00'< sdate and sdate < '%s-32')\ group by plan.plan.unit_info.sstation",month,month);*/ printf("sql_string: %s\n",sql_string); if (exec_sql(sql_string) != 0) PERROR_CLOSEDATABASE_EXIT(-1,"get_cost_result()中exec_sql()") if(DM_FALSE==dm_bind_column(hsmt,1,DM_DATA_CHAR,TYPE_DEFAULT, plant_name,sizeof(plant_name),&plant_name_size,DM_DESC_PTR_LEN_DEFAULT)) PERROR_CLOSEDATABASE_EXIT(-1,"get_cost_result()中dm_bind_column()") if(DM_FALSE==dm_bind_column(hsmt,2,DM_DATA_DOUBLE,TYPE_DEFAULT, check_cost,sizeof(check_cost),&check_cost_size,DM_DESC_PTR_LEN_DEFAULT)) PERROR_CLOSEDATABASE_EXIT(-1,"get_cost_result()中dm_bind_column()") if(DM_FALSE==dm_describe_row_num(hsmt,&row_num)) PERROR_CLOSEDATABASE_EXIT(-1,"get_cost_result()中dm_describe_row_num()") if(0 >= row_num) { printf("my_Worning:get_cost_result()中返回结果集(曲线考核,扣分电场为0)出错,结果条目为0\n"); } for(i=0;i<row_num;i++) { flag = dm_fetch_scroll(hsmt,DM_FETCH_NEXT,0); if(DM_FALSE==flag) PERROR_CLOSEDATABASE_EXIT(-1,"get_cost_result()中dm_fetch_scroll()") else if(DM_NO_DATA_FOUND==flag) { PERROR_CLOSEDATABASE_EXIT(-1,"执行sql时,数据表中没有数据,get_cost_result()中dm_fetch_scroll()") } for(j=0;j<*plant_num;j++) { if(0 == strcmp(plant_name,(*cost_collect17)[j].plant_name)) { (*cost_collect17)[j].value[11] += (atof(check_cost))*COST_PER_MARK; break; } } } printf("只有计划曲线考核时:工厂的数目%lld\n",*plant_num); print_info(11, cost_collect17, plant_num); print_curtline("曲线违约考核计算完毕"); //=================================================================================== /*取得非停考核结果 */ //================================================================================ print_curtline("非计划停机考核开始"); sprintf(sql_string,"select sstation,sum(result_num) from\ plan.plan.unit_info,plan.plan.unplan_shutdown_result\ where plan.plan.unit_info.sname=plan.plan.unplan_shutdown_result.sname\ and ('%s-00'< sdate and sdate < '%s-32')\ group by plan.plan.unit_info.sstation",month,month); printf("\nsql_string: %s\n",sql_string); if (exec_sql(sql_string) != 0) PERROR_CLOSEDATABASE_EXIT(-1,"get_unplan_shutdown_result()中exec_sql()") if(DM_FALSE==dm_bind_column(hsmt,1,DM_DATA_CHAR,TYPE_DEFAULT, plant_name,sizeof(plant_name),&plant_name_size,DM_DESC_PTR_LEN_DEFAULT)) PERROR_CLOSEDATABASE_EXIT(-1,"get_cost_result()中dm_bind_column()") if(DM_FALSE==dm_bind_column(hsmt,2,DM_DATA_DOUBLE,TYPE_DEFAULT, check_cost,sizeof(check_cost),&check_cost_size,DM_DESC_PTR_LEN_DEFAULT)) PERROR_CLOSEDATABASE_EXIT(-1,"get_cost_result()中dm_bind_column()") if(DM_FALSE==dm_describe_row_num(hsmt,&row_num)) PERROR_CLOSEDATABASE_EXIT(-1,"get_cost_result()中dm_describe_row_num()") if(0 >= row_num) { printf("my_Worning:get_cost_result()中非停考核结果集返回条目为0\n"); } for(i=0;i<row_num;i++) { flag = dm_fetch_scroll(hsmt,DM_FETCH_NEXT,0); if(DM_FALSE==flag) PERROR_CLOSEDATABASE_EXIT(-1,"get_cost_result()中dm_fetch_scroll()") else if(DM_NO_DATA_FOUND==flag) { PERROR_CLOSEDATABASE_EXIT(-1,"执行sql时,数据表中没有数据,get_cost_result()中dm_fetch_scroll()") } for(j=0;j<*plant_num;j++) { if(0==strcmp(plant_name,(*cost_collect17)[j].plant_name)) { (*cost_collect17)[j].value[5] += (atof(check_cost))*COST_PER_MARK; break; } } } printf("加入非停考核结果后:工厂的数目%lld\n",*plant_num); print_info(5, cost_collect17, plant_num); print_curtline("非计划停机考核计算完毕"); //========================================================================================= //获得运行管理评分中十五项,并写cost_collect_stru结构数组 //select sname ,sum(svalue)from plan.plan.run_manage_check where sdate<'2013-05-32'and sdate>'2013-05-00' group by sname //========================================================================================= print_curtline("运行管理评分中十五项计算开始"); sprintf(sql_string, "select sname,sfield,sum(svalue)" " from plan.plan.run_manage_check " "where sdate < '%s-32' and sdate> '%s-00' " "group by sname,sfield",month,month); printf("\n\nsql_string: %s\n",sql_string); if (exec_sql(sql_string) != 0) PERROR_CLOSEDATABASE_EXIT(-1,"执行sql时,数据表中没有数据,get_cost_result()中exec_sql()") if(DM_FALSE==dm_bind_column(hsmt,1,DM_DATA_CHAR,TYPE_DEFAULT, plant_name,sizeof(plant_name),&plant_name_size,DM_DESC_PTR_LEN_DEFAULT)) PERROR_CLOSEDATABASE_EXIT(-1,"get_cost_result()中dm_bind_column()") if(DM_FALSE==dm_bind_column(hsmt,2,DM_DATA_CHAR,TYPE_DEFAULT, field,sizeof(field),&field_size,DM_DESC_PTR_LEN_DEFAULT)) PERROR_CLOSEDATABASE_EXIT(-1,"get_cost_result()中dm_bind_column()") if(DM_FALSE==dm_bind_column(hsmt,3,DM_DATA_DOUBLE,TYPE_DEFAULT, check_cost,sizeof(check_cost),&check_cost_size,DM_DESC_PTR_LEN_DEFAULT)) PERROR_CLOSEDATABASE_EXIT(-1,"get_cost_result()中dm_bind_column()") if(DM_FALSE==dm_describe_row_num(hsmt,&row_num)) PERROR_CLOSEDATABASE_EXIT(-1,"get_cost_result()中dm_describe_row_num()") if(0 >= row_num) printf("my_Wornding:运送考核汇总时运行管理考核费用返回条目为0\n"); for(i=0;i<row_num;i++) { flag=dm_fetch_scroll(hsmt,DM_FETCH_NEXT,0); if(DM_FALSE==flag) PERROR_CLOSEDATABASE_EXIT(-1,"get_cost_result()中dm_fetch_scroll()") else if(DM_NO_DATA_FOUND==flag) { PERROR_CLOSEDATABASE_EXIT(-1,"执行sql时,数据表中没有数据,get_cost_result()中dm_fetch_scroll()") } printf("%-20s %-20s %-16.6f\n",plant_name,field,atof(check_cost)); for(j=0;j<*plant_num;j++) { if(0==strcmp(plant_name,(*cost_collect17)[j].plant_name)) { for(k=0;k<COLLECT_NUM;k++) { if(!strcmp(cost_collect_order[k],field)) { (*cost_collect17)[j].value[k] += atof(check_cost)*COST_PER_MARK; } } break; } } } print_curtline("运行管理考核十五项显示开始"); printf("加入非停考核结果和计划曲线考核结果和十五项后,工厂的数目%lld\n",*plant_num); print_info(-2, cost_collect17,plant_num); print_curtline("运行管理考核十五项显示结束"); print_curtline("运行管理考核十五项计算结束"); return 0; }