package com.ese.model.dao; import com.ese.model.db.MSLocationItemsModel; import com.ese.model.db.StaffModel; import com.ese.model.view.LocationItemView; import com.ese.utils.Utils; import org.hibernate.Criteria; import org.hibernate.SQLQuery; import org.hibernate.criterion.CriteriaSpecification; import org.hibernate.criterion.Order; import org.hibernate.criterion.Restrictions; import org.springframework.stereotype.Repository; import java.util.ArrayList; import java.util.Collections; import java.util.List; @Repository public class MSLocationItemsDAO extends GenericDAO<MSLocationItemsModel, Integer> { public List<LocationItemView> findLocationByItemId(int itemId) throws Exception { StringBuilder stringBuilder = new StringBuilder(); stringBuilder.append(" SELECT ").append(getPrefix()).append(".location.id, ").append(getPrefix()).append(".warehouse.warehouse_code, ").append(getPrefix()).append(".location.location_barcode, ").append(getPrefix()).append(".location.capacity, (").append(getPrefix()).append(".location.capacity - ").append(getPrefix()).append(".location.qty - ").append(getPrefix()).append(".location.reserved_qty) as avaliable"); stringBuilder.append(" FROM ").append(getPrefix()).append(".location_items"); stringBuilder.append(" LEFT JOIN ").append(getPrefix()).append(".location on ").append(getPrefix()).append(".location_items.location_id = location.id"); stringBuilder.append(" LEFT JOIN ").append(getPrefix()).append(".warehouse on ").append(getPrefix()).append(".location.warehouse_id = warehouse.id"); stringBuilder.append(" WHERE ").append(getPrefix()).append(".location_items.item_id = " + itemId); stringBuilder.append(" AND ").append(getPrefix()).append(".location.status < 2"); stringBuilder.append(" AND ").append(getPrefix()).append(".location.qty - ").append(getPrefix()).append(".location.reserved_qty < ").append(getPrefix()).append(".location.capacity"); stringBuilder.append(" AND ").append(getPrefix()).append(".location.capacity - ").append(getPrefix()).append(".location.qty - ").append(getPrefix()).append(".location.reserved_qty > 0"); stringBuilder.append(" ORDER BY (").append(getPrefix()).append(".location.capacity - ").append(getPrefix()).append(".location.qty - ").append(getPrefix()).append(".location.reserved_qty), ").append(getPrefix()).append(".location.ismix"); log.debug("{}", stringBuilder.toString()); SQLQuery q = getSession().createSQLQuery(stringBuilder.toString()); List<Object[]> objects = q.list(); List<LocationItemView> locationItemViewList = new ArrayList<LocationItemView>(); for (Object[] entity : objects) { LocationItemView locationItemView = new LocationItemView(); locationItemView.setId(Utils.parseInt(entity[0], 0)); locationItemView.setWarehouse(Utils.parseString(entity[1], "")); locationItemView.setLocation(Utils.parseString(entity[2], "")); locationItemView.setCapacity(Utils.parseInt(entity[3], 0)); locationItemView.setAvaliable(Utils.parseInt(entity[4], 0)); locationItemViewList.add(locationItemView); } return locationItemViewList; } public List<MSLocationItemsModel> findByLocationId(int locationId){ log.debug("findByLocationId(). {}", locationId); List<MSLocationItemsModel> msLocationItemsModels = new ArrayList<MSLocationItemsModel>(); try { Criteria criteria = getCriteria(); criteria.add(Restrictions.eq("msLocationModel.id", locationId)); criteria.add(Restrictions.eq("isValid", 1)); criteria.addOrder(Order.desc("updateDate")); msLocationItemsModels = Utils.safetyList(criteria.list()); } catch (Exception e) { log.debug("Exception Error findByLocationIf : ", e); } return msLocationItemsModels; } public void deleteByUpdate(final MSLocationItemsModel model) throws Exception { model.setIsValid(0); //0 is flag for delete model.setUpdateDate(Utils.currentDate()); update(model); } }