| | |
| | | import java.sql.ResultSet;
|
| | | import java.sql.SQLException;
|
| | | import java.util.ArrayList;
|
| | | import java.util.Date;
|
| | | import java.util.List;
|
| | | import com.fgkj.dao.BaseDAO;
|
| | | import com.fgkj.dao.CallBack;
|
| | |
| | | import com.fgkj.dto.ram.Fbs9600_state;
|
| | | import com.fgkj.services.User_logService;
|
| | | import com.sun.corba.se.spi.orbutil.fsm.FSM;
|
| | | import com.sun.org.apache.bcel.internal.generic.LSTORE;
|
| | |
|
| | | public class Fbs9100_stateImpl implements BaseDAO,CallBack{
|
| | | public List getResults(ResultSet rs) {
|
| | |
| | | }
|
| | | return list;
|
| | | }
|
| | | //11.1FBS9100设备通信状态查询<-------跨域----------->
|
| | | public List serchByCondition_ky() {
|
| | | String sql="";
|
| | | String baseSql="select distinct tb_fbs9100_state.num,tb_fbs9100_state.dev_ip,tb_fbs9100_state.dev_version,record_datetime,tb_fbs9100_state.dev_id,op_cmd,dev_datetime,dev_testtype,dev_testgroupnum," +
|
| | | "dev_workstate,dev_alarmstate,dev_res_test_state,dev_onlinevollow,dev_eachgroup_battsum,dev_captest_onlinevol,dev_captest_groupvol,dev_captest_curr," +
|
| | | "dev_captest_cap,dev_captest_timelong,dev_restest_moncount,dev_restest_monindex,dev_commcount,dev_errcommcount,db_ram_db.tb_fbs9100_state.dev_61850alarms,dev_last_captest_stop_type, " +
|
| | | "db_battinf.tb_battinf.StationName,db_battinf.tb_battinf.FbsDeviceName," +
|
| | | "COUNT(DISTINCT db_battinf.tb_battinf.BattGroupId) as cnt," +
|
| | | "group_CONCAT(db_ram_db.tb_batt_rtstate.online_vol ORDER BY db_ram_db.tb_batt_rtstate.BattGroupId separator '/') as online_vols,group_CONCAT(db_ram_db.tb_batt_rtstate.group_vol ORDER BY db_ram_db.tb_batt_rtstate.BattGroupId separator '/') as group_vols,group_CONCAT(db_ram_db.tb_batt_rtstate.group_curr ORDER BY db_ram_db.tb_batt_rtstate.BattGroupId separator '/') as group_currs " +
|
| | | "from db_ram_db.tb_Fbs9100_state " +
|
| | | "left outer join db_battinf.tb_battinf ON tb_fbs9100_state.dev_id=db_battinf.tb_battinf.FBSDeviceId " +
|
| | | "LEFT OUTER JOIN db_ram_db.tb_batt_rtstate ON db_battinf.tb_battinf.battgroupid=db_ram_db.tb_batt_rtstate.battgroupid ";
|
| | | //分组
|
| | | String groupSql=" GROUP BY tb_fbs9100_state.dev_id ";
|
| | | //最后结果
|
| | | sql=baseSql+groupSql;
|
| | | //System.out.println(sql);
|
| | | List<Fbs9100_state> list=DAOHelper.executeQueryLimit(sql, DBUtil.getConn(), null, new CallBack() {
|
| | | List list=new ArrayList();
|
| | | public List getResults(ResultSet rs) {
|
| | | try {
|
| | | while(rs.next()){
|
| | | Fbs9100_state fstate=new Fbs9100_state();
|
| | | fstate.setNum(rs.getInt("cnt"));//关联电池组个数
|
| | | fstate.setDev_ip(rs.getString("dev_ip"));
|
| | | fstate.setDev_version(rs.getString("dev_version"));
|
| | | fstate.setDev_id(rs.getInt("dev_id"));
|
| | | fstate.setOp_cmd(rs.getInt("op_cmd"));
|
| | | fstate.setRecord_datetime(rs.getString("record_datetime"));
|
| | | fstate.setDev_datetime(rs.getString("dev_datetime"));
|
| | | fstate.setDev_testtype(rs.getInt("dev_testtype"));
|
| | | fstate.setDev_testgroupnum(rs.getInt("dev_testgroupnum"));
|
| | | fstate.setDev_workstate(rs.getInt("dev_workstate"));
|
| | | fstate.setDev_alarmstate(rs.getInt("dev_alarmstate"));
|
| | | fstate.setDev_res_test_state(rs.getInt("dev_res_test_state"));
|
| | | fstate.setDev_onlinevollow(rs.getInt("dev_onlinevollow"));
|
| | | fstate.setDev_eachgroup_battsum(rs.getInt("dev_eachgroup_battsum"));
|
| | | fstate.setDev_captest_onlinevol(rs.getFloat("dev_captest_onlinevol"));
|
| | | fstate.setDev_captest_groupvol(rs.getFloat("dev_captest_groupvol"));
|
| | | fstate.setDev_captest_curr(rs.getFloat("dev_captest_curr"));
|
| | | fstate.setDev_captest_cap(rs.getFloat("dev_captest_cap"));
|
| | | fstate.setDev_captest_timelong(rs.getInt("dev_captest_timelong"));
|
| | | fstate.setDev_restest_moncount(rs.getInt("dev_restest_moncount"));
|
| | | fstate.setDev_restest_monindex(rs.getInt("dev_restest_monindex"));
|
| | | fstate.setDev_commcount(rs.getInt("dev_commcount"));
|
| | | fstate.setDev_errcommcount(rs.getInt("dev_errcommcount"));
|
| | | |
| | | fstate.setStationName(rs.getString("stationName"));
|
| | | fstate.setDeviceName(rs.getString("FbsDeviceName"));
|
| | | fstate.setOnline_vols(rs.getString("online_vols"));
|
| | | fstate.setGroup_vols(rs.getString("group_vols"));
|
| | | fstate.setGroup_currs(rs.getString("group_currs"));
|
| | | fstate.setDev_61850alarms(rs.getString("dev_61850alarms"));
|
| | | fstate.setDev_last_captest_stop_type(rs.getInt("dev_last_captest_stop_type"));
|
| | | //System.out.println(fstate);
|
| | | list.add(fstate);
|
| | | }
|
| | | } catch (SQLException e) {
|
| | | // TODO Auto-generated catch block
|
| | | e.printStackTrace();
|
| | | }
|
| | | return list;
|
| | | }
|
| | | });
|
| | | return list;
|
| | | }
|
| | | |
| | | //判断机房实时数据中该机房有没有连接到服务器
|
| | | public int judgeSatationInState(int dev_id) {
|
| | | String sql=" SELECT count(num) as nums from db_ram_db.tb_fbs9100_state where dev_id=? LIMIT 1 ";
|
| | |
| | | //实时监测界面根据dev_alarmstate状态判断接触器状态
|
| | | public List serchContactorState(Object obj) {
|
| | | Fbs9100_state fs=(Fbs9100_state) obj;
|
| | | String sql="select dev_id,dev_alarmstate,dev_workstate,record_datetime,dev_temp,dev_res_test_state,dev_testtype,dev_testgroupnum,dev_conresist,dev_concurr,dev_condvoldp,dev_condcurr,dev_61850alarms,dev_last_captest_stop_type,batt_online_state from db_ram_db.tb_fbs9100_state where dev_id=? limit 1";
|
| | | String sql="select dev_id,dev_version,dev_alarmstate,dev_workstate,record_datetime,dev_temp,dev_res_test_state,dev_testtype,dev_testgroupnum,dev_conresist,dev_concurr,dev_condvoldp,dev_condcurr,dev_61850alarms,dev_last_captest_stop_type,batt_online_state,dev_commcount,dev_errcommcount from db_ram_db.tb_fbs9100_state where dev_id=? limit 1";
|
| | | List list=DAOHelper.executeQuery(sql, DBUtil.getConn(), new Object[]{fs.getDev_id()},new CallBack() {
|
| | |
|
| | | public List getResults(ResultSet rs) {
|
| | |
| | | }else{
|
| | | ContactorState="开关闭合";
|
| | | }
|
| | | fstate.setDev_version(rs.getString("dev_version"));
|
| | | fstate.setRecord_datetime(rs.getString("record_datetime"));
|
| | | fstate.setDev_testgroupnum(rs.getInt("dev_testgroupnum")); //被测电池组号
|
| | | fstate.setDev_alarmstate(rs.getInt("dev_alarmstate"));
|
| | |
| | | fstate.setDev_last_captest_stop_type(rs.getInt("dev_last_captest_stop_type"));
|
| | | fstate.setDev_temp(rs.getFloat("dev_temp"));
|
| | | fstate.setBatt_online_state(rs.getInt("batt_online_state"));
|
| | | fstate.setDev_commcount(rs.getInt("dev_commcount"));
|
| | | fstate.setDev_errcommcount(rs.getInt("dev_errcommcount"));
|
| | | fstate.setNote(DAOHelper.sdf.format(new Date()));
|
| | | list.add(fstate);
|
| | | }
|
| | | } catch (SQLException e) {
|
| | |
| | | String sql="select distinct dev_id,dev_alarmstate,dev_workstate,dev_temp,dev_res_test_state,dev_testtype,dev_testgroupnum " +
|
| | | " ,dev_captest_onlinevol,dev_captest_groupvol,dev_captest_curr,dev_captest_cap,dev_captest_timelong" +
|
| | | " ,dev_conresist,dev_concurr,dev_condvoldp,dev_condcurr,dev_61850alarms,dev_last_captest_stop_type " +
|
| | | " ,db_battinf.tb_battinf.StationName,db_battinf.tb_battinf.FbsDeviceName " +
|
| | | " ,db_battinf.tb_battinf.StationName,db_battinf.tb_battinf.StationName1,db_battinf.tb_battinf.StationName2,db_battinf.tb_battinf.StationName3,db_battinf.tb_battinf.StationName5,db_battinf.tb_battinf.FbsDeviceName " +
|
| | | //" ,db_ram_db.tb_batt_rtstate.batt_test_tlong " +
|
| | | " from db_ram_db.tb_fbs9100_state,db_battinf.tb_battinf " +//,db_ram_db.tb_batt_rtstate
|
| | | " where dev_workstate="+FBS9100_ComBase.DISCHARGE+" "+
|
| | |
| | | fstate.setDev_last_captest_stop_type(rs.getInt("dev_last_captest_stop_type"));
|
| | | fstate.setDev_temp(rs.getFloat("dev_temp"));
|
| | | fstate.setStationName(rs.getString("stationName"));
|
| | | fstate.setStationName1(rs.getString("stationName1"));
|
| | | fstate.setStationName2(rs.getString("stationName2"));
|
| | | fstate.setStationName3(rs.getString("stationName3"));
|
| | | fstate.setStationName5(rs.getString("stationName5"));
|
| | | fstate.setDeviceName(rs.getString("FbsDeviceName"));
|
| | | /*fstate.setOnline_vols(((Float)rs.getFloat("online_vol")).toString());
|
| | | fstate.setGroup_vols(((Float)rs.getFloat("group_vol")).toString());
|
| | |
| | |
|
| | | return list;
|
| | | }
|
| | | //批量设置放电参数时查询出当前放电的电池组(1u/2u分开)
|
| | | public List seachDischarge(Object obj) {
|
| | | BattInf binf=(BattInf) obj;
|
| | | String sql="select distinct dev_id,dev_alarmstate,dev_workstate,dev_temp,dev_version,dev_res_test_state,dev_testtype,dev_testgroupnum "
|
| | | + ",dev_captest_onlinevol,dev_captest_groupvol,dev_captest_curr,dev_captest_cap,dev_captest_timelong "
|
| | | + ",dev_conresist,dev_concurr,dev_condvoldp,dev_condcurr,dev_61850alarms,dev_last_captest_stop_type "
|
| | | + ",db_battinf.tb_battinf.battgroupid,db_battinf.tb_battinf.StationName,db_battinf.tb_battinf.StationName1,db_battinf.tb_battinf.StationName2,db_battinf.tb_battinf.StationName3,db_battinf.tb_battinf.StationName5 "
|
| | | + ",db_battinf.tb_battinf.MonVolStd,db_battinf.tb_battinf.BattGroupId,db_battinf.tb_battinf.battgroupname,db_battinf.tb_battinf.moncapstd,db_battinf.tb_battinf.moncount "
|
| | | + " from db_ram_db.tb_fbs9100_state,db_battinf.tb_battinf,db_user.tb_user_battgroup_baojigroup_battgroup,db_user.tb_user_battgroup_baojigroup_usr "
|
| | | + " where dev_workstate="+FBS9100_ComBase.DISCHARGE
|
| | | + " and db_battinf.tb_battinf.fbsdeviceId=db_ram_db.tb_fbs9100_state.dev_id "
|
| | | + " and (db_battinf.tb_battinf.GroupIndexInFBSDevice+1)=db_ram_db.tb_fbs9100_state.dev_testgroupnum "
|
| | | + " and db_user.tb_user_battgroup_baojigroup_battgroup.BattGroupId=db_battinf.tb_battinf.BattGroupId "
|
| | | + " and db_user.tb_user_battgroup_baojigroup_usr.baoji_group_id=db_user.tb_user_battgroup_baojigroup_battgroup.baoji_group_id "
|
| | | + " and db_user.tb_user_battgroup_baojigroup_usr.uId=? "
|
| | | + " and db_battinf.tb_battinf.MonVolStd=? ";
|
| | | //条件
|
| | | String sql0=" and db_battinf.tb_battinf.stationid=? "; //具体机房
|
| | | String sql1=" and db_battinf.tb_battinf.stationname1=? ";//省
|
| | | String sql2=" and db_battinf.tb_battinf.stationname2=? ";//市
|
| | | String sql5=" and db_battinf.tb_battinf.stationname5=? ";//区县
|
| | | switch (binf.getNum()) {
|
| | | case 0:
|
| | | sql+=sql0;
|
| | | break;
|
| | | case 1:
|
| | | sql+=sql1;
|
| | | break;
|
| | | case 2:
|
| | | sql+=sql2;
|
| | | break;
|
| | | case 5:
|
| | | sql+=sql5;
|
| | | break;
|
| | | default:
|
| | | return null;
|
| | | }
|
| | | List list=DAOHelper.executeQuery(sql, DBUtil.getConn(), new Object[] {binf.getBattGroupId(),binf.getMonVolStd(),binf.getStationName()}, new CallBack() {
|
| | | |
| | | @Override
|
| | | public List getResults(ResultSet rs) {
|
| | | List list=new ArrayList();
|
| | | try {
|
| | | while(rs.next()){
|
| | | Fbs9100_state fstate=new Fbs9100_state();
|
| | | int dev_alarmstate=rs.getInt("dev_alarmstate");
|
| | | |
| | | fstate.setDev_testgroupnum(rs.getInt("dev_testgroupnum")); //被测电池组号
|
| | | fstate.setDev_alarmstate(rs.getInt("dev_alarmstate"));
|
| | | fstate.setDev_res_test_state(rs.getInt("dev_res_test_state"));
|
| | | fstate.setDev_testtype(rs.getInt("dev_testtype"));
|
| | | fstate.setDev_workstate(rs.getInt("dev_workstate"));
|
| | | fstate.setDev_id(rs.getInt("dev_id"));
|
| | | fstate.setDev_version(rs.getString("dev_version"));
|
| | | fstate.setDev_captest_onlinevol(rs.getFloat("dev_captest_onlinevol"));
|
| | | fstate.setDev_captest_groupvol(rs.getFloat("dev_captest_groupvol"));
|
| | | fstate.setDev_captest_curr(rs.getFloat("dev_captest_curr"));
|
| | | fstate.setDev_captest_cap(rs.getFloat("dev_captest_cap"));
|
| | | fstate.setDev_captest_timelong(rs.getInt("dev_captest_timelong"));
|
| | | fstate.setBattgroupid(rs.getInt("battgroupid"));
|
| | | fstate.setDev_conresist(rs.getFloat("dev_conresist"));
|
| | | fstate.setDev_concurr(rs.getFloat("dev_concurr"));
|
| | | fstate.setDev_condcurr(rs.getFloat("dev_condcurr"));
|
| | | fstate.setDev_condvoldp(rs.getFloat("dev_condvoldp"));
|
| | | fstate.setDev_61850alarms(rs.getString("dev_61850alarms"));
|
| | | fstate.setDev_last_captest_stop_type(rs.getInt("dev_last_captest_stop_type"));
|
| | | fstate.setDev_temp(rs.getFloat("dev_temp"));
|
| | | fstate.setStationName(rs.getString("stationName"));
|
| | | fstate.setStationName1(rs.getString("stationName1"));
|
| | | fstate.setStationName2(rs.getString("stationName2"));
|
| | | fstate.setStationName3(rs.getString("stationName3"));
|
| | | fstate.setStationName5(rs.getString("stationName5"));
|
| | | fstate.setBattgroupid(rs.getInt("battgroupid"));
|
| | | fstate.setMonvolstd(rs.getInt("monvolstd"));
|
| | | fstate.setMoncapstd(rs.getInt("moncapstd"));
|
| | | fstate.setMoncount(rs.getInt("moncount"));
|
| | | fstate.setNote(rs.getString("battgroupname"));
|
| | | list.add(fstate);
|
| | | }
|
| | | } catch (SQLException e) {
|
| | | // TODO Auto-generated catch block
|
| | | e.printStackTrace();
|
| | | }
|
| | | return list;
|
| | | }
|
| | | });
|
| | | return list;
|
| | | }
|
| | | //实时刷新批量设置放电参数
|
| | | public List freshenDischarge(Object obj) {
|
| | | List<BattInf> list=(List<BattInf>) obj;
|
| | | List listAll=new ArrayList();
|
| | | for (int i = 0; i < list.size(); i++) {
|
| | | BattInf binf=list.get(i);
|
| | | String sql="select distinct dev_id,dev_alarmstate,dev_workstate,dev_temp,dev_res_test_state,dev_testtype,dev_testgroupnum " +
|
| | | " ,dev_captest_onlinevol,dev_captest_groupvol,dev_captest_curr,dev_captest_cap,dev_captest_timelong,dev_commcount" +
|
| | | " ,dev_conresist,dev_concurr,dev_condvoldp,dev_condcurr,dev_61850alarms,dev_last_captest_stop_type " +
|
| | | " ,db_battinf.tb_battinf.StationName,db_battinf.tb_battinf.StationName1,db_battinf.tb_battinf.StationName2,db_battinf.tb_battinf.StationName3,db_battinf.tb_battinf.StationName5,db_battinf.tb_battinf.FbsDeviceName " +
|
| | | " ,db_ram_db.tb_batt_rtstate.batt_test_tlong,db_ram_db.tb_batt_rtstate.online_vol,db_ram_db.tb_batt_rtstate.group_curr,db_ram_db.tb_batt_rtstate.group_vol,db_ram_db.tb_batt_rtstate.batt_test_cap " +
|
| | | " from db_ram_db.tb_fbs9100_state,db_battinf.tb_battinf ,db_ram_db.tb_batt_rtstate"+
|
| | | " where db_battinf.tb_battinf.battgroupid=? "+
|
| | | " and db_battinf.tb_battinf.fbsdeviceId=db_ram_db.tb_fbs9100_state.dev_id " +
|
| | | " and db_battinf.tb_battinf.battgroupid=db_ram_db.tb_batt_rtstate.battgroupid limit 1";
|
| | | List listB=DAOHelper.executeQuery(sql, DBUtil.getConn(), new Object[]{binf.getBattGroupId()}, new CallBack() {
|
| | | |
| | | public List getResults(ResultSet rs) {
|
| | | List list=new ArrayList();
|
| | | try {
|
| | | while(rs.next()){
|
| | | Fbs9100_state fstate=new Fbs9100_state();
|
| | | int dev_alarmstate=rs.getInt("dev_alarmstate");
|
| | | String ContactorState="开关闭合";
|
| | | if(dev_alarmstate==1 ||
|
| | | dev_alarmstate==2 ||
|
| | | dev_alarmstate==3 ||
|
| | | dev_alarmstate==4 ||
|
| | | dev_alarmstate==6 ){
|
| | | ContactorState="开关断开";
|
| | | }else{
|
| | | ContactorState="开关闭合";
|
| | | }
|
| | | fstate.setDev_testgroupnum(rs.getInt("dev_testgroupnum")); //被测电池组号
|
| | | fstate.setDev_alarmstate(rs.getInt("dev_alarmstate"));
|
| | | fstate.setDev_res_test_state(rs.getInt("dev_res_test_state"));
|
| | | fstate.setDev_testtype(rs.getInt("dev_testtype"));
|
| | | fstate.setNote(ContactorState);
|
| | | fstate.setDev_workstate(rs.getInt("dev_workstate"));
|
| | | fstate.setDev_id(rs.getInt("dev_id"));
|
| | | //这五个参数都是batt_rtstate中的数据
|
| | | fstate.setDev_captest_onlinevol(rs.getFloat("online_vol"));
|
| | | fstate.setDev_captest_groupvol(rs.getFloat("group_vol"));
|
| | | fstate.setDev_captest_curr(rs.getFloat("group_curr"));
|
| | | fstate.setDev_captest_cap(rs.getFloat("batt_test_cap"));
|
| | | fstate.setDev_captest_timelong(rs.getInt("batt_test_tlong"));//实际放电时常
|
| | | |
| | | fstate.setDev_commcount(rs.getInt("dev_commcount"));
|
| | | fstate.setDev_conresist(rs.getFloat("dev_conresist"));
|
| | | fstate.setDev_concurr(rs.getFloat("dev_concurr"));
|
| | | fstate.setDev_condcurr(rs.getFloat("dev_condcurr"));
|
| | | fstate.setDev_condvoldp(rs.getFloat("dev_condvoldp"));
|
| | | fstate.setDev_61850alarms(rs.getString("dev_61850alarms"));
|
| | | fstate.setDev_last_captest_stop_type(rs.getInt("dev_last_captest_stop_type"));
|
| | | fstate.setDev_temp(rs.getFloat("dev_temp"));
|
| | | fstate.setStationName(rs.getString("stationName"));
|
| | | fstate.setStationName1(rs.getString("stationName1"));
|
| | | fstate.setStationName2(rs.getString("stationName2"));
|
| | | fstate.setStationName3(rs.getString("stationName3"));
|
| | | fstate.setStationName5(rs.getString("stationName5"));
|
| | | fstate.setDeviceName(rs.getString("FbsDeviceName"));
|
| | | |
| | | list.add(fstate);
|
| | | }
|
| | | } catch (SQLException e) {
|
| | | // TODO Auto-generated catch block
|
| | | e.printStackTrace();
|
| | | }
|
| | | return list;
|
| | | }
|
| | | });
|
| | | if(listB!=null&&listB.size()>0) {
|
| | | listAll.add(listB);
|
| | | }
|
| | | }
|
| | | return listAll;
|
| | | |
| | | }
|
| | | public static void main(String[] args) {
|
| | | Fbs9100_stateImpl fi=new Fbs9100_stateImpl();
|
| | | /*List<Fbs9100_state> list=fi.searchAll();
|
| | |
| | | p.setPageSize(20);
|
| | | p.setPageCurr(1);
|
| | | fs.setPage(p);
|
| | | BattInf binf=new BattInf();
|
| | | binf.setNum(1);
|
| | | binf.setBattGroupId(1001879);
|
| | | binf.setStationName("广西省");
|
| | | binf.setMonVolStd(2f);
|
| | | /*List<Fbs9100_state> list=fi.serchByCondition(fs);
|
| | | System.out.println(list.size());
|
| | | for(Fbs9100_state f:list){
|
| | | System.out.println(f);
|
| | | }*/
|
| | | /*List<Fbs9100_state> list=fi.serchByCondition_ky();
|
| | | System.out.println(list.size());
|
| | | for(Fbs9100_state f:list){
|
| | | System.out.println(f);
|
| | |
| | | //List<Fbs9100_state> list=fi.searchByUid(uinf);
|
| | | // List<Fbs9100_state> list=fi.searchDevWorkstate(fs);
|
| | | // List<Fbs9100_state> list=fi.seach6185Nuclear_cap(uinf);
|
| | | List<Fbs9100_state> list=fi.seachNuclear_cap(uinf);
|
| | | /* List<Fbs9100_state> list=fi.seachNuclear_cap(uinf);
|
| | | System.out.println(list.size());
|
| | | for(Fbs9100_state f:list){
|
| | | System.out.println(f);
|
| | | }
|
| | | }*/
|
| | | /*List<Fbs9100_state> list=fi.seachDischarge(binf);
|
| | | System.out.println(list.size());
|
| | | for(Fbs9100_state f:list){
|
| | | System.out.println(f);
|
| | | }*/
|
| | | List listb=new ArrayList();
|
| | | listb.add(binf);
|
| | | List listAll=fi.freshenDischarge(listb);
|
| | | System.out.println(listAll.size());
|
| | | }
|
| | |
|
| | | }
|