package com.ese.model.dao;
import com.ese.model.db.LoadingOrderModel;
import com.ese.model.view.ItemSequenceView;
import com.ese.model.view.LoadingOrderView;
import com.ese.utils.Utils;
import org.hibernate.Criteria;
import org.hibernate.SQLQuery;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;
import org.hibernate.type.DateType;
import org.hibernate.type.IntegerType;
import org.hibernate.type.StringType;
import org.springframework.stereotype.Repository;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@Repository
public class LoadingOrderDAO extends GenericDAO<LoadingOrderModel, Integer>{
public List<LoadingOrderModel> findDomesticByStatusIs12(){
List<LoadingOrderModel> loadingOrderModelList = Utils.getEmptyList();
try{
Criteria criteria = getCriteria();
criteria.add(Restrictions.eq("statusModel.id", 12));
criteria.add(Restrictions.eq("category", "D"));
criteria.addOrder(Order.desc("createDate"));
loadingOrderModelList = Utils.safetyList(criteria.list());
} catch (Exception e){
log.debug("Exception error findByStatusIs12 : ", e);
}
return loadingOrderModelList;
}
public List<LoadingOrderView> findOverSeaByStatusIs12(){
List<LoadingOrderView> loadingOrderModelList = new ArrayList<LoadingOrderView>();
StringBuilder sqlBuilder = new StringBuilder();
sqlBuilder.append(" SELECT ");
sqlBuilder.append(" ").append(getPrefix()).append(".loading_order.id AS ID,");
sqlBuilder.append(" ").append(getPrefix()).append(".loading_order.create_by AS CREATE_BY,");
sqlBuilder.append(" ").append(getPrefix()).append(".loading_order.create_date AS CREATE_DATE,");
sqlBuilder.append(" ").append(getPrefix()).append(".loading_order.update_by AS UPDATE_BY,");
sqlBuilder.append(" ").append(getPrefix()).append(".loading_order.update_date AS UPDATE_DATE,");
sqlBuilder.append(" ").append(getPrefix()).append(".loading_order.docno AS DOCNO,");
sqlBuilder.append(" ").append(getPrefix()).append(".loading_order.loadingdate AS LOADING_DATE,");
sqlBuilder.append(" ").append(getPrefix()).append(".loading_order.remark AS REMARK,");
sqlBuilder.append(" ").append(getPrefix()).append(".loading_order.status AS STATUS_ID,");
sqlBuilder.append(" ").append(getPrefix()).append(".loading_order.category AS CATEGORY");
sqlBuilder.append(" FROM ").append(getPrefix()).append(".loading_order");
sqlBuilder.append(" WHERE ").append(getPrefix()).append(".loading_order.status = 12 ");
sqlBuilder.append(" AND ").append(getPrefix()).append(".loading_order.category = 'O' ");
sqlBuilder.append(" AND CONVERT(VARCHAR, ").append(getPrefix()).append(".loading_order.loadingdate, 110) = CONVERT(VARCHAR, GETDATE(), 110)");
sqlBuilder.append(" ORDER BY ").append(getPrefix()).append(".loading_order.create_date");
log.debug(sqlBuilder.toString());
try {
SQLQuery query = getSession().createSQLQuery(sqlBuilder.toString())
.addScalar("ID", IntegerType.INSTANCE)
.addScalar("CREATE_BY", IntegerType.INSTANCE)
.addScalar("CREATE_DATE", DateType.INSTANCE)
.addScalar("UPDATE_BY", IntegerType.INSTANCE)
.addScalar("UPDATE_DATE", DateType.INSTANCE)
.addScalar("DOCNO", StringType.INSTANCE)
.addScalar("LOADING_DATE", DateType.INSTANCE)
.addScalar("REMARK", StringType.INSTANCE)
.addScalar("STATUS_ID", IntegerType.INSTANCE)
.addScalar("CATEGORY", StringType.INSTANCE);
List<Object[]> objects = query.list();
for (Object[] entity : objects) {
LoadingOrderView loadingOrderModel = new LoadingOrderView();
loadingOrderModel.setId(Utils.parseInt(entity[0]));
loadingOrderModel.setCreateBy(Utils.parseInt(entity[1]));
loadingOrderModel.setCreateDate(Utils.parseDate(entity[2], null));
loadingOrderModel.setUpdateBy(Utils.parseInt(entity[3]));
loadingOrderModel.setUpdateDate(Utils.parseDate(entity[4], null));
loadingOrderModel.setDocNo(Utils.parseString(entity[5]));
loadingOrderModel.setLoadingDate(Utils.parseDate(entity[6], null));
loadingOrderModel.setRemark(Utils.parseString(entity[7]));
loadingOrderModel.setStatus(Utils.parseInt(entity[8]));
loadingOrderModel.setCategory(Utils.parseString(entity[9]));
loadingOrderModelList.add(loadingOrderModel);
}
} catch (Exception e) {
log.debug("Exception SQL findOverSeaByStatusIs12 : {}", e);
}
return loadingOrderModelList;
}
public List<LoadingOrderModel> findDomesticBySearch(int status){
List<LoadingOrderModel> loadingOrderModelList = Utils.getEmptyList();
// log.debug("docNo : {[]}, loadingDate : {[]}, status : {[]}", docNo.trim().length(), loadingDate.trim().length(), status);
try{
Criteria criteria = getCriteria();
//
// if (!Utils.isZero(docNo.trim().length())){
// criteria.add(Restrictions.like("docNo", "%" + docNo + "%"));
// }
//
// if (!Utils.isZero(loadingDate.trim().length())){
// criteria.add(Restrictions.like("loadingDate", "%" + loadingDate + "%"));
// }
if (!Utils.isZero(status)){
criteria.add(Restrictions.eq("statusModel.id", status));
} else {
criteria.add(Restrictions.eq("statusModel.id", 12));
}
criteria.add(Restrictions.eq("category", "D"));
criteria.addOrder(Order.desc("createDate"));
loadingOrderModelList = Utils.safetyList(criteria.list());
} catch (Exception e){
log.debug("Exception error findByStatusIs12 : ", e);
}
return loadingOrderModelList;
}
public List<LoadingOrderModel> findOverSeaBySearch(int status){
List<LoadingOrderModel> loadingOrderModelList = Utils.getEmptyList();
// log.debug("docNo : {[]}, loadingDate : {[]}, status : {[]}", docNo.trim().length(), loadingDate.trim().length(), status);
try{
Criteria criteria = getCriteria();
//
// if (!Utils.isZero(docNo.trim().length())){
// criteria.add(Restrictions.like("docNo", "%" + docNo + "%"));
// }
//
// if (!Utils.isZero(loadingDate.trim().length())){
// criteria.add(Restrictions.like("loadingDate", "%" + loadingDate + "%"));
// }
if (!Utils.isZero(status)){
criteria.add(Restrictions.eq("statusModel.id", status));
} else {
criteria.add(Restrictions.eq("statusModel.id", 12));
}
criteria.add(Restrictions.eq("category", "O"));
criteria.addOrder(Order.desc("createDate"));
loadingOrderModelList = Utils.safetyList(criteria.list());
} catch (Exception e){
log.debug("Exception error findByStatusIs12 : ", e);
}
return loadingOrderModelList;
}
public void updateStatus(int loadingOrderId, int statusId){
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append(" UPDATE ").append(getPrefix()).append(".loading_order SET ").append(getPrefix()).append(".loading_order.status = ").append(statusId);
stringBuilder.append(" WHERE ").append(getPrefix()).append(".loading_order.id = ").append("'").append(loadingOrderId).append("'");
log.debug("SQL updateToWrap : {}", stringBuilder.toString());
try {
SQLQuery q = getSession().createSQLQuery(stringBuilder.toString());
q.executeUpdate();
} catch (Exception e) {
log.debug("Exception error updateToWrap: ", e);
}
}
public List<ItemSequenceView> findByLoadingOrderId(int loadingOrderId){
List<ItemSequenceView> itemList =new ArrayList<ItemSequenceView>();
StringBuilder sqlBuilder = new StringBuilder();
sqlBuilder.append(" SELECT DISTINCT ");
sqlBuilder.append(" ").append(getPrefix()).append(".picking_order_line.ItemId AS ITEM_ID,");
sqlBuilder.append(" ").append(getPrefix()).append(".picking_order_line.id AS ID");
sqlBuilder.append(" FROM ").append(getPrefix()).append(".loading_order");
sqlBuilder.append(" INNER JOIN ").append(getPrefix()).append(".picking_order");
sqlBuilder.append(" ON ").append(getPrefix()).append(".loading_order.id = ").append(getPrefix()).append(".picking_order.loading_order_id");
sqlBuilder.append(" INNER JOIN ").append(getPrefix()).append(".picking_order_line");
sqlBuilder.append(" ON ").append(getPrefix()).append(".picking_order.id = ").append(getPrefix()).append(".picking_order_line.picking_order_id");
sqlBuilder.append(" WHERE ").append(getPrefix()).append(".loading_order.id = ").append(loadingOrderId);
log.debug(sqlBuilder.toString());
try {
SQLQuery query = getSession().createSQLQuery(sqlBuilder.toString())
.addScalar("ITEM_ID", StringType.INSTANCE)
.addScalar("ID", IntegerType.INSTANCE);
List<Object[]> objects = query.list();
for (Object[] entity : objects) {
ItemSequenceView itemSequenceView = new ItemSequenceView();
itemSequenceView.setItemName(Utils.parseString(entity[0]));
itemSequenceView.setId(Utils.parseInt(entity[1]));
itemList.add(itemSequenceView);
}
} catch (Exception e) {
log.debug("Exception SQL findByLoadingOrderId : {}", e);
}
return itemList;
}
}