Exemple #1
0
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;
}