Java tutorial
/** * Copyright(C) 2014 * NEC Corporation All rights reserved. * * No permission to use, copy, modify and distribute this software * and its documentation for any purpose is granted. * This software is provided under applicable license agreement only. */ package com.nec.harvest.service.impl; import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang.ArrayUtils; import org.apache.commons.lang.StringUtils; import org.hibernate.HibernateException; import org.hibernate.Query; import org.hibernate.Session; import org.hibernate.Transaction; import org.hibernate.exception.GenericJDBCException; import org.hibernate.exception.SQLGrammarException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.nec.core.exception.ObjectNotFoundException; import com.nec.crud.hibernate.HibernateSessionManager; import com.nec.harvest.bean.mapping.MoveTransferBean; import com.nec.harvest.bean.mapping.json.JSONBean; import com.nec.harvest.bean.mapping.json.JSONMoveTransfer; import com.nec.harvest.constant.Constants; import com.nec.harvest.constant.MsgConstants; import com.nec.harvest.exception.ServiceException; import com.nec.harvest.helper.MessageHelper; import com.nec.harvest.helper.ProductHelper; import com.nec.harvest.model.User; import com.nec.harvest.repository.MoveTransferRepository; import com.nec.harvest.service.MoveTransferService; import com.nec.harvest.service.SerialNumberService; import com.nec.harvest.userdetails.AuthenticatedUserDetails; /** * {@link MoveTransferService} * * @author QuanDK * */ public class MoveTransferServiceImpl implements MoveTransferService { private static final Logger logger = LoggerFactory.getLogger(MoveTransferServiceImpl.class); private final int STATE_DELETE = 1; private final int STATE_UPDATE = 2; private final int STATE_INSERT = 3; private final MoveTransferRepository repository; private final SerialNumberService serialNumberService; public MoveTransferServiceImpl(MoveTransferRepository moveTransferRepository, SerialNumberService serialNumberService) { this.repository = moveTransferRepository; this.serialNumberService = serialNumberService; } /** {@inheritDoc} */ @Override @SuppressWarnings("unchecked") public List<MoveTransferBean> findByOrgCodeAndMonthly(String orgCode, String monthly) throws ServiceException { if (StringUtils.isEmpty(orgCode)) { throw new IllegalArgumentException("Orginazation code must not be null or empty"); } if (StringUtils.isEmpty(monthly)) { throw new IllegalArgumentException("Month must not be null or empty"); } final Session session = HibernateSessionManager.getSession(); Transaction tx = null; List<MoveTransferBean> moveTransferes = new ArrayList<MoveTransferBean>(); try { tx = session.beginTransaction(); Query query = repository.getQuery(session, " SELECT " + " new com.nec.harvest.bean.mapping.MoveTransferBean(a.recID, a.srDate, " + " a.strCodeU, ( SELECT b.strNameR FROM Organization b WHERE b.kaisoBango = :kaisoBango AND b.delKbn = :delKbn AND b.strCode = a.strCodeU) as strNameRU, " + " a.account.kmkCode, a.account.kmkNameR, " + " a.strCodeH, ( SELECT c.strNameR FROM Organization c WHERE c.kaisoBango = :kaisoBango AND c.delKbn = :delKbn AND c.strCode = a.strCodeH) as strNameRH, " + " a.kmkCodeH, ( SELECT d.kmkNameR FROM Account d WHERE d.idoKbn = :idoKbn AND d.delKbn = :delKbn AND d.kmkCode = a.kmkCodeH) as kmkNameRH, " + " a.tekiyo, a.kingaku, a.updNo) " + " FROM MoveTransfer a " + " WHERE a.getSudo = :getSudo AND a.organization.strCode = :strCode AND a.delKbn = :delKbn " + " ORDER BY a.srDate ASC, a.strCodeU ASC, a.account.kmkCode ASC, a.strCodeH ASC, a.kmkCodeH ASC "); query.setParameter("strCode", orgCode); query.setParameter("getSudo", monthly); query.setParameter("kaisoBango", Constants.DEFAULT_KAISOBANGO); query.setParameter("idoKbn", Constants.DEFAULT_KBN); query.setParameter("delKbn", Constants.STATUS_ACTIVE); moveTransferes = query.list(); // Release transaction tx.commit(); if (CollectionUtils.isEmpty(moveTransferes)) { throw new ObjectNotFoundException( "Could not find any purchase by organization " + monthly + " and monthly " + monthly); } } catch (HibernateException ex) { if (tx != null) { tx.rollback(); } throw new ServiceException("An error occurred while finding the purchase by organization " + orgCode + " and monthly " + monthly); } finally { HibernateSessionManager.closeSession(session); } return moveTransferes; } /** {@inheritDoc} */ @Override public boolean updateMoveTransfer(JSONMoveTransfer jsonMoveTransfer) throws ServiceException { if (jsonMoveTransfer == null) { throw new IllegalArgumentException("MoveTransfer must not be null or empty"); } if (StringUtils.isEmpty(jsonMoveTransfer.getRecID())) { throw new IllegalArgumentException("MoveTransfer's ID must not be null or empty"); } User user = AuthenticatedUserDetails.getUserPrincipal(); if (user == null) { throw new IllegalArgumentException( "Sorry, you don't have a permission to use this. Please login with right permission"); } final Session session = HibernateSessionManager.getSession(); Transaction tx = null; int result = 0; try { StringBuilder sql = new StringBuilder(); sql.append(" UPDATE AT011 "); sql.append( " SET srDate=:srDate, strCodeU=:strCodeU, kmkCode=:kmkCode, strCodeH=:strCodeH, kmkCodeH=:kmkCodeH, "); sql.append(" tekiyo=:tekiyo, kingaku=:kingaku, tanCode=:tanCode, recCKbn=:recCKbn, aPInf2=:aPInf2,"); sql.append(" stfCodeU=:stfCodeU, prdNoU=:prdNoU, timeU=NOW(), updNo = (:updNo + 1) "); sql.append(" WHERE recID=:recID AND delKbn=:delKbn AND updNo=:updNo "); tx = session.beginTransaction(); Query query = repository.getSQLQuery(session, sql.toString()) .setParameter("srDate", jsonMoveTransfer.getSrDate()) .setParameter("strCodeU", jsonMoveTransfer.getStrCodeU()) .setParameter("strCodeH", jsonMoveTransfer.getStrCodeH()) .setParameter("kmkCode", jsonMoveTransfer.getKmkCode()) .setParameter("kmkCodeH", jsonMoveTransfer.getKmkCodeH()) .setParameter("tekiyo", jsonMoveTransfer.getTekiyo()) .setParameter("kingaku", jsonMoveTransfer.getKingaku()) .setParameter("tanCode", user.getUsrCode()).setParameter("aPInf2", user.getUsrCode()) .setParameter("stfCodeU", user.getUsrCode()).setParameter("recCKbn", Constants.DEFAULT_KBN); // try { query.setParameter("prdNoU", ProductHelper.getProductInfor().getVersion()); } catch (IOException ex) { logger.warn("Can not get product informations when update move transfer record"); } query.setParameter("recID", jsonMoveTransfer.getRecID()).setParameter("delKbn", Constants.STATUS_ACTIVE) .setParameter("updNo", jsonMoveTransfer.getUpdNo()); result = query.executeUpdate(); tx.commit(); } catch (SQLGrammarException | GenericJDBCException ex) { if (tx != null) { tx.rollback(); } throw new ServiceException( "An error occurred while update move transfer with id: " + jsonMoveTransfer.getRecID()); } finally { HibernateSessionManager.closeSession(session); } return result > 0; } /** {@inheritDoc} */ @Override public boolean deleteByIDs(String... Ids) throws ServiceException { if (ArrayUtils.isEmpty(Ids)) { throw new IllegalArgumentException("Array movetransfer must not be null or empty"); } final Session session = HibernateSessionManager.getSession(); Transaction tx = null; boolean isDeleted = false; try { tx = session.beginTransaction(); String sql = " DELETE FROM MoveTransfer a WHERE a.delKbn = :delKbn AND a.recID IN (:recIDs) "; Query query = repository.getQuery(session, sql).setParameterList("recIDs", Ids).setParameter("delKbn", Constants.STATUS_ACTIVE); isDeleted = (query.executeUpdate() > 0); tx.commit(); } catch (HibernateException ex) { if (tx != null) { tx.rollback(); } throw new ServiceException("An error occurred while delete MoveTransfer list"); } finally { HibernateSessionManager.closeSession(session); } return isDeleted; } /** {@inheritDoc} */ @Override public synchronized boolean insertMoveTransfer(String monthly, JSONMoveTransfer jsonMoveTransfer) throws ServiceException { if (StringUtils.isEmpty(monthly)) { throw new IllegalArgumentException("Monthly must not be null or empty"); } if (jsonMoveTransfer == null) { throw new IllegalArgumentException("MoveTransfer object must not be null"); } User user = AuthenticatedUserDetails.getUserPrincipal(); if (user == null) { throw new IllegalArgumentException( "Sorry, you don't have a permission to use this. Please login with right permission"); } final Session session = HibernateSessionManager.getSession(); Transaction tx = null; boolean isInserted = false; try { StringBuilder sql = new StringBuilder(); sql.append(" INSERT INTO at011 "); sql.append( " (RecID, StrCode, GetSudo, SrDate, StrCodeU, StrCodeH, Tekiyo, Kingaku, UpdNo, DelKbn, TanCode, "); sql.append( " APInf1, APInf2, RecCkbn, StfCodeC, StfCodeU, KmkCode, KmkCodeH, PrdNoC, TimeC, PrdNoU, TimeU) "); sql.append( " VALUES(:recID, :strCode, :getSudo, :srDate, :strCodeU, :strCodeH, :tekiyo, :kingaku, 1, 2, :tanCode, "); sql.append( " :aPInf1, :aPInf2, 1, :stfCodeC, :stfCodeU, :kmkCode, :kmkCodeH, :prdNoC, now(), :prdNoU, now()) "); tx = session.beginTransaction(); // Query query = repository.getSQLQuery(session, sql.toString()) .setParameter("recID", jsonMoveTransfer.getRecID()) .setParameter("strCode", user.getOrganization().getStrCode()).setParameter("getSudo", monthly) .setParameter("srDate", jsonMoveTransfer.getSrDate()) .setParameter("strCodeU", jsonMoveTransfer.getStrCodeU()) .setParameter("strCodeH", jsonMoveTransfer.getStrCodeH()) .setParameter("tekiyo", jsonMoveTransfer.getTekiyo()) .setParameter("kingaku", jsonMoveTransfer.getKingaku()) .setParameter("tanCode", user.getUsrCode()).setParameter("aPInf1", user.getUsrCode()) .setParameter("aPInf2", user.getUsrCode()).setParameter("stfCodeC", user.getUsrCode()) .setParameter("stfCodeU", user.getUsrCode()) .setParameter("kmkCode", jsonMoveTransfer.getKmkCode()) .setParameter("kmkCodeH", jsonMoveTransfer.getKmkCodeH()); try { String version = ProductHelper.getProductInfor().getVersion(); query.setParameter("prdNoC", version); query.setParameter("prdNoU", version); } catch (IOException ex) { logger.warn(ex.getMessage()); } int result = query.executeUpdate(); isInserted = (result > 0); tx.commit(); } catch (SQLGrammarException | GenericJDBCException ex) { if (tx != null) { tx.rollback(); } throw new ServiceException("An error occurred while create a new one move transfer record", ex); } finally { HibernateSessionManager.closeSession(session); } return isInserted; } /** {@inheritDoc} */ @Override public JSONBean handleMoveTransferes(String monthly, List<JSONMoveTransfer> moveTransfers) throws ServiceException { if (StringUtils.isEmpty(monthly)) { throw new IllegalArgumentException("Monthly must not be null or empty"); } if (CollectionUtils.isEmpty(moveTransfers)) { throw new IllegalArgumentException("MoveTransferes object must not be null"); } User user = AuthenticatedUserDetails.getUserPrincipal(); if (user == null) { throw new IllegalArgumentException( "Sorry, you don't have a permission to use this. Please login with right permission"); } try { for (int i = 0; i < moveTransfers.size(); i++) { JSONMoveTransfer moveTransfer = moveTransfers.get(i); int state = moveTransfer.getState(); switch (state) { case STATE_DELETE: { boolean deleteState = deleteByIDs(moveTransfer.getRecID()); if (!deleteState) { logger.warn("Could not delete the record with entity's code " + moveTransfer.getRecID() + " and updNo = " + moveTransfer.getUpdNo()); // Update not successful return new JSONBean(Boolean.FALSE, 2, MessageHelper.get(MsgConstants.CM_UPD_M03)); } break; } case STATE_UPDATE: { boolean updateState = updateMoveTransfer(moveTransfer); if (!updateState) { logger.warn("Could not update the record with entity's code " + moveTransfer.getRecID() + " and updNo = " + moveTransfer.getUpdNo()); // Update not successful return new JSONBean(Boolean.FALSE, 2, MessageHelper.get(MsgConstants.CM_UPD_M01)); } break; } case STATE_INSERT: { String maximumSeqNo = null; try { final String REC_CODE = "AT011.RecID"; maximumSeqNo = serialNumberService.generateUUIDByRecID(REC_CODE); } catch (ServiceException ex) { logger.error(ex.getMessage(), ex); // return new JSONBean(Boolean.FALSE, -1, MessageHelper.getSystemError()); } if (StringUtils.isEmpty(maximumSeqNo)) { logger.warn("Could not generate a sequence number at this time"); // return new JSONBean(Boolean.FALSE, 2, MessageHelper.get(MsgConstants.CM_UPD_M03)); } logger.info("Old serial number is {} and maximum serial number is {}", moveTransfer.getRecID(), maximumSeqNo); // Creating a new one move transfer for the given sequence number moveTransfer.setRecID(maximumSeqNo); insertMoveTransfer(monthly, moveTransfer); // logger.info("Successfully created a new one move transfer"); break; } default: { break; } } } logger.info("Handle submission data from client successfuly"); // Update successful return new JSONBean(Boolean.TRUE, 1, MessageHelper.get(MsgConstants.CM_UPD_M02)); } catch (IllegalArgumentException ex) { logger.warn(ex.getMessage()); // return new JSONBean(Boolean.FALSE, 2, MessageHelper.get(MsgConstants.CM_UPD_M03)); } catch (ServiceException ex) { logger.error(ex.getMessage(), ex); // return new JSONBean(Boolean.FALSE, -1, MessageHelper.getSystemError()); } } }