public class MyThread extends JFrame{
// Local onde atualizaremos a hora
private JLabel lblHora;
private Date recepcao;
private Integer IdCor = 0;
private Integer IdFabricante = 0;
private Integer IdProtese = 0;
private Integer IdTipodePreco = 0;
private Integer IdPreco = 0;
private Integer IdFormadePagamento = 0;
private String jTextAreaObs = null;
private String prova = null;
private Date jfdchegada = null;
private Date jFdPrevisaoEntrega = null;
private Double Qtdeprot = 0.0;
private String spreco = null;
String Preco = null;
private int IdOs = 0;
private int IdFicha = 0;
ConvData convdata = new ConvData();
Feriado f = new Feriado();
Fichas ficha = new Fichas();
FaseExecucao fase = new FaseExecucao();
private ArrayList<FaseExecucao> listaFaseExecucao = new ArrayList<FaseExecucao>();
private ArrayList<Feriado> listaFeriado = new ArrayList<Feriado>();
private ArrayList<Fichas> listaFichas = new ArrayList<Fichas>();
Date datahoje = null;
// Formatador da hora
private static final DateFormat FORMATO = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
private Double valor;
Dao<Fichas> daoFicha = null;
private Integer diasUteis;
public MyThread() {
// Construímos nosso frame
super("Exemplo de Thread Horas");
// setLayout(new FlowLayout());
getContentPane().add(getLblHora());
// datahoje.setTime(getLblHora());
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(200, 75);
setVisible(true);
// Iniciamos a thread do relógio. Tornei uma deamon thread para que seja
// automaticamente finalizada caso a aplicação feche.
Thread clockThread = new Thread(new ClockRunnable(), "Clock thread");
clockThread.setDaemon(true);
clockThread.start();
atualizarFaseExecucaoRecepcao();
}
private JLabel getLblHora() {
if (lblHora == null) {
lblHora = new JLabel();
}
return lblHora;
}
/**
* Método para atualizar a hora no formulário. Não é thread-safe, portanto,
* se o utilizado fora da thread da AWT, deve-se utilizar um dos comandos da
* EventQueue (invokeLater ou invokeAndWait).
*/
public void setHora(Date date) {
getLblHora().setText(FORMATO.format(date));
}
/**
* Runnable que contém o código que atuará na nossa thread. Basicamente, ele
* chama o método setHora de segundo em segundo, passando a data atual.
*/
private class ClockRunnable implements Runnable {
public void run() {
try {
while (true) {
// Aqui chamamos o setHora através da EventQueue da AWT.
// Conforme dito, isso garante Thread safety para o Swing.
EventQueue.invokeLater(new Runnable() {
public void run() {
// Só podemos chamar setHora diretamente dessa
// forma, pois esse Runnable é uma InnerClass não
// estática.
setHora(new Date());
}
});
// Fazemos nossa thread dormir por um segundo, liberando o
// processador para outras threads processarem.
Thread.sleep(1000);
}
}
catch (InterruptedException e) {
}
}
}
//Aqui começa a atualização das tabelas de Fichas de clientes e Fase de Execução.
private void atualizarFaseExecucaoRecepcao() {
// System.out.println("passou em atualiza FaseExecucao!");
Date dataHoje = new Date();
// System.out.println("passou dataHoje="+dataHoje);
int identificador = 0;
int diasUteis = 0;
// Percorrer atraves de um laço os registros de fichas de clientes
// preciso ler cada registro na base de dados do Postgres e executar cada registro de fichas.
try {
daoFicha = new FichasDao();
listaFichas = (ArrayList<Fichas>) daoFicha.findbyname("CONCLUIDA");
for (Iterator iterator = listaFichas.iterator(); iterator.hasNext(); ) {
Fichas ficha = (Fichas) iterator.next();
//faz verificação se for o caso.
if(iterator != null){
IdOs = ficha.getIdos();
IdFicha = ficha.getId();
IdCor = ficha.getIdcor();
IdFabricante = ficha.getIdfabricante();
IdProtese = ficha.getIdprotese();
IdTipodePreco = ficha.getIdtipopreco();
IdPreco = ficha.getIdpreco();
IdFormadePagamento = ficha.getIdformadepagamento();
jTextAreaObs = ficha.getObservacao();
prova = ficha.getProva();
jfdchegada = ficha.getChegada();
jFdPrevisaoEntrega = ficha.getVencendo();
Qtdeprot = ficha.getPreco();
Preco = (String.valueOf(ficha.getPreco()));
System.out.println("situacao="+ficha.getSituacao()+" idos="+ficha.getIdos().toString()+"+ ficha="+ficha.getId().toString());
// Percorrer atraves de outro laço os registros de fase de execução de clientes
// preciso ler cada registro na base de dados do Postgres e executar cada registro de fase pela data de recepção.
FaseExecucaoDao dao = null;
try {
dao = new FaseExecucaoDao();
listaFaseExecucao = (ArrayList<FaseExecucao>)(dao.findbyfiltrochaves(IdOs, IdFicha, identificador));
// System.out.println("passou atualizarsituacao");
Iterator<FaseExecucao> it = listaFaseExecucao.iterator();
//Enquanto temos fase de execucao
while (it.hasNext()) {
//faz verificação se for o caso.
if (it != null){
FaseExecucao fas = (FaseExecucao)it.next();
if(fas.getIdos().equals(IdOs) && (fas.getIdficha().equals(IdFicha))){
recepcao = fas.getRecepcao();
Long dias = ConvData.nDias(recepcao);
Calendar cal = Calendar.getInstance();
cal.setTime(recepcao);
cal.add(Calendar.DAY_OF_MONTH, 1);
recepcao = (java.util.Date)(cal.getTime());
// System.out.println("Data Chegada ="+recepcao+" os="+fas.getIdos().toString()+" ficha="+fas.getIdficha().toString()+" id="+fas.getId().toString());
// System.out.println("Numero de Dias ="+dias);
diasUteis = 0;
for (int i = 0; i < dias; i++) {
Date dataAgenda = (ConvData.adicionarDiasUteis(recepcao, Integer.valueOf(dias.toString())));
java.util.Date d = new java.util.Date(dataAgenda.getTime());
String s = new SimpleDateFormat("dd/MM/yyyy").format(d);
// System.out.println("Data Agenda ="+dataAgenda + " data transformada date="+d +" data string ="+s);
// metodo para validar se o dia considerado util é feriado ou não, atraves da consulta da tabela de feriados do estado.
boolean feriado = validarDiaUtil(d);
if (!feriado){
diasUteis++;
int resultData = (ConvData.comparaData(d,dataHoje));
if((resultData == 0) ||(resultData > 0)){
i=(Integer.valueOf(dias.toString()));
// metodo para gravar a quantidade de dias uteis na ficha do cliente
gravarDiasUteis();
// System.out.println("passou em gravaDiasUteis ="+diasUteis);
}
// System.out.println("diasUteis ="+diasUteis);
}
cal.setTime(d);
cal.add(Calendar.DAY_OF_MONTH, 1);
recepcao = (java.util.Date)(cal.getTime());
String str = new SimpleDateFormat("dd/MM/yyyy").format(recepcao);
// System.out.println("Data recepcao + 1 ="+recepcao+" recepcao string ="+str);
}
// System.out.println("Dias uteis="+diasUteis);
// bypassa ficha ou sai do loop
}else{
JOptionPane.showMessageDialog(null, "ERRO. Fase de Execução Vazia!(MyTread)");
return;
}
// }
}
} catch (SQLException e) {
Logger.getLogger(jIFOs.class.getName()).log(Level.SEVERE, null, e);
} // até aqui fase de execucao
// aqui é a ficha
}
// }
else{
JOptionPane.showMessageDialog(null, "ERRO. Ficha de ordem de serviço Vazia!(MyTread)");
return;
}
}
} catch (SQLException ex) {
Logger.getLogger(jIFOs.class.getName()).log(Level.SEVERE, null, ex);
System.out.println("1. catch exception");
}
try {
daoFicha.closeConnection();
} catch (SQLException e) {
Logger.getLogger(jIFOs.class.getName()).log(Level.SEVERE, null, e);
System.out.println("2. catch exception");
}
}
private boolean validarDiaUtil(Date data) {
boolean feriado = false;
Dao<Feriado> dao = null;
try {
dao = new FeriadoDao();
listaFeriado = (ArrayList<Feriado>) dao.listAll();
for (Feriado fs1 : listaFeriado) {
if(fs1 instanceof Feriado){
//aqui é feito um cast
Feriado fer = (Feriado)fs1;
//faz verificação se for o caso.
if (listaFeriado != null){
if((fer.getDataferiado().equals(data))){
// System.out.println("passou no if validarDiaUtil= true"+fer.getDataferiado().toString() );
feriado = true;
}else{
// System.out.println("passou no else validarDiaUtil= false"+fer.getDataferiado().toString());
feriado = false;
}
}else{
JOptionPane.showMessageDialog(null, "Erro! Lista de Feriados Vazia!!!");
}
}else{
JOptionPane.showMessageDialog(null, "Erro! Lista de Feriados Vazia!!!");
}
}
} catch (SQLException ex) {
Logger.getLogger(jIFOs.class.getName()).log(Level.SEVERE, null, ex);
}
try {
dao.closeConnection();
} catch (SQLException e) {
Logger.getLogger(jIFOs.class.getName()).log(Level.SEVERE, null, e);
}
return feriado;
}
private void editaCamposOsFichas() {
ficha.setIdcor(IdCor);
ficha.setIdfabricante(IdFabricante);
ficha.setIdprotese(IdProtese);
System.out.println("IdProtese= true"+IdProtese );
ficha.setIdtipopreco(IdTipodePreco);
ficha.setIdpreco(IdPreco);
ficha.setIdformadepagamento(IdFormadePagamento);
ficha.setObservacao(jTextAreaObs);
ficha.setProva (prova);
Date chegada;
try {
chegada = (jfdchegada);
ficha.setChegada(chegada);
} catch (Exception ex) {
Logger.getLogger(jIFOs.class.getName()).log(Level.SEVERE, null, ex);
}
Date vencendo;
try {
vencendo = (jFdPrevisaoEntrega);
ficha.setVencendo(vencendo);
} catch (Exception ex) {
Logger.getLogger(jIFOs.class.getName()).log(Level.SEVERE, null, ex);
}
try{
// spreco = (Preco);
// spreco = spreco.replace("R$", "");
spreco = Preco.replace(",", ".");
valor = new Double(spreco);
ficha.setPreco(valor);
}catch (Exception e){
JOptionPane.showMessageDialog(null, "Erro! Lista de Feriados VaziPreço não alterado!!!");
}
try{
ficha.setQuantidade(Qtdeprot);
}catch (Exception e){
JOptionPane.showMessageDialog(null, "Erro! Quantidade não alterada!!!");
}
try{
ficha.setDias(diasUteis);
}catch (Exception e){
JOptionPane.showMessageDialog(null, "ERRO: Não entrou no try setDiasUteis(MyTread)!");
}
}
private void gravarDiasUteis() {
// Aqui está me parece que está meu problema em relação a esse processo. È que na hora de fazer a atualização dos dados ele dá essa mensagem de erro no catch(exception).
try {
daoFicha = new FichasDao();
// chamar edita fichas
editaCamposOsFichas(); // chama a edição de campos para alteração de fichas.
ficha.setIdos(IdOs);
ficha.setId (IdFicha);
daoFicha.update(ficha);
System.out.println("diasUteis alterado=" +diasUteis + " Idos="+IdOs+" ficha Id=" + IdFicha);
JOptionPane.showMessageDialog(null, "Ficha de ordem de serviço (MyTread) ALTERADA com sucesso!");
// }catch (Exception e){
// JOptionPane.showMessageDialog(null, "ERRO: Não entrou no try da Alteração da ficha de ordem de serviço(MyTread)!");
// }
} catch (SQLException ex) {
Logger.getLogger(jFOs.class.getName()).log(Level.SEVERE, null, ex);
JOptionPane.showMessageDialog(null, "ERRO: Não entrou no 1o. Try. (Alteração da ficha de ordem de serviço(MyTread)!)");
}
try {
daoFicha.closeConnection();
} catch (SQLException ex) {
Logger.getLogger(jFOs.class.getName()).log(Level.SEVERE, null, ex);
JOptionPane.showMessageDialog(null, " ERRO: Fechamento da ficha de ordem de serviço!(MyTread)!)");
}
}
}
// aqui é o meu Dao de alteração das fichas - a minha duvida é que somente preciso alterar o campo em destaque - quantidade de dias. Será que preciso editar todos esses campos para se fazer uma alteração de um só campo no banco?
@Override
public void update(Fichas obj) throws SQLException {
PreparedStatement stmt = getConnection().prepareStatement(
"UPDATE Fichas "
+ "SET"
+ " idprotese = ?,"
+ "idfabricante = ?, "
+ "idcor = ?, "
+ "idtipopreco = ?, "
+ "idpreco = ?, "
+ "idformadepagamento = ?, "
+ "quantidade = ?, "
+ "preco = ?, "
+ "vencendo = ?, "
+ "conclusao = ?, "
+ "dias = ?, "
+ "selecao = ?, "
+ "prova = ?, "
+ "situacao = ?, "
+ "observacao = ?, "
+ " ultfase = ?, "
+ " dias = ? "
+ "WHERE"
+ " (fichas.idos = ? ) and (fichas.id = ? );" );
stmt.setInt( 1, obj.getIdprotese());
stmt.setInt( 2, obj.getIdfabricante() );
stmt.setInt( 3, obj.getIdcor() );
stmt.setInt( 4, obj.getIdtipopreco() );
stmt.setInt( 5, obj.getIdpreco() );
stmt.setInt( 6, obj.getIdformadepagamento() );
stmt.setDouble( 7, obj.getQuantidade() );
stmt.setDouble( 8, obj.getPreco() );
stmt.setDate( 9, new java.sql.Date(obj.getVencendo().getTime()));
stmt.setDate( 10, new java.sql.Date(obj.getConclusao().getTime()));
stmt.setInt( 11, obj.getDias() );
stmt.setBoolean(12, obj.isSelecao());
stmt.setString(13, obj.getProva() );
stmt.setString( 14, obj.getSituacao() );
stmt.setString( 15, obj.getObservacao() );
stmt.setInt( 16, obj.getUltfase() );
[b] stmt.setInt( 17, obj.getDias() );[/b]
stmt.setInt( 18, obj.getIdos() );
stmt.setInt( 19, obj.getId() );
stmt.executeUpdate();
stmt.close();
}