package com.ese.service; import com.ese.model.TableValue; import com.ese.model.dao.*; import com.ese.model.db.*; import com.ese.model.view.*; import com.ese.model.view.report.ConfirmationPackingViewModel; import com.ese.model.view.report.StickerWorkLoadViewReport; import com.ese.model.view.report.SubPickingOrderWithBarcodeViewReport; import com.ese.service.security.UserDetail; import com.ese.transform.PickingOrderLineTransform; import com.ese.transform.PickingOrderTransform; import com.ese.utils.FacesUtil; import com.ese.utils.Utils; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.util.HashMap; import java.util.List; @Component @Transactional public class PickingOrderService extends Service { @Resource private PickingOrderDAO pickingOrderDAO; @Resource private UserAccessDAO userAccessDAO; @Resource private StatusDAO statusDAO; @Resource private AXCustomerConfirmJourDAO axCustomerConfirmJourDAO; @Resource private AXCustomerConfirmTransDAO axCustomerConfirmTransDAO; @Resource private AXCustomerTableDAO axCustomerTableDAO; @Resource private PickingOrderTransform pickingOrderTransform; @Resource private PickingOrderLineDAO pickingOrderLineDAO; @Resource private PickingOrderLineTransform pickingOrderLineTransform; @Resource private ReportService reportService; @Resource private ItemDAO itemDAO; @Resource private ReservedOrderDAO reservedOrderDAO; @Resource private InvOnHandDAO invOnHandDAO; @Value("#{config['report.stikerworkload']}") private String pathStikerWorkLoad; @Value("#{config['report.confirmationpacking']}") private String pathConfirmationPacking; @Value("#{config['report.pickingorder']}") private String pathPickingOrderWithItemBarcode; @Value("#{config['report.pickingorder.sub']}") private String pathPickingOrderWithItemBarcodeSub; private static final String A031 ="031A"; private static final String B031 ="031B"; private static final String ALL ="All"; public String getTypeBeforeOnLoaf(long staffId){ List<UserAccessModel> userAccessModelList = userAccessDAO.findByPickingOrder(Utils.parseInt(staffId)); String mode = ALL; final int SEARCH_ALL = 2; if(SEARCH_ALL != userAccessModelList.size()){ for(UserAccessModel model : userAccessModelList){ if (A031.equals(model.getMenuObjectModel().getCode())){ mode = A031; } else if (B031.equals(model.getMenuObjectModel().getCode())){ mode = B031; } } } return mode; } public List<PickingOrderModel> getPickingOrderByOverSeaOrder(String modeFind){ List<PickingOrderModel> pickingOrderModelList = Utils.getEmptyList(); log.debug("getPickingOrderByOverSeaOrder : {}", modeFind); if (A031.equals(modeFind)){ pickingOrderModelList = pickingOrderDAO.findByOverSeaOrder(); } else if (B031.equals(modeFind)){ pickingOrderModelList = pickingOrderDAO.findByDomesticOrder(); } else if (ALL.equals(modeFind)){ pickingOrderModelList = pickingOrderDAO.findByOverSeaAndDomesticOrder(); } return pickingOrderModelList; } public List<StatusModel> getStatusAll(){ List<StatusModel> statusModelList = Utils.getEmptyList(); try { statusModelList = statusDAO.findByTablePickingOrder(TableValue.PICKING_ORDER.getId()); } catch (Exception e) { log.debug("Exception error getStatusAll", e); } return statusModelList; } public List<PickingOrderModel> getPickingOnSearch(PickingOrderView pickingOrderView){ List<PickingOrderModel> pickingOrderModelList = Utils.getEmptyList(); if (!Utils.isNull(pickingOrderView)){ pickingOrderModelList = pickingOrderDAO.findByPickingView(pickingOrderView); } return pickingOrderModelList; } public List<DataSyncConfirmOrderView> getDataOnSync(){ return axCustomerConfirmJourDAO.genSQLSyncData(); } public void updateStatus(List<DataSyncConfirmOrderView> viewList){ for (DataSyncConfirmOrderView view : viewList){ axCustomerConfirmJourDAO.updateStatusRunning(view.getConfirmId(), view.getConfirmDate(), view.getSaleId()); axCustomerConfirmTransDAO.updateStatusRunning(view.getSaleId(), view.getConfirmId(), view.getConfirmDate()); } } public void rollbackStatus(){ axCustomerConfirmJourDAO.rollbackStatus(); axCustomerConfirmTransDAO.rollbackStatus(); } public void syncOrder(List<DataSyncConfirmOrderView> viewList, UserDetail userDetail){ for (DataSyncConfirmOrderView view : viewList){ try { AXCustomerTableModel customerTableModel = axCustomerTableDAO.findByAccountNum(view.getCustomerCode()); StatusModel statusModel = statusDAO.findByStatusSeqTablePickingOrder(TableValue.PICKING_ORDER.getId()); String group = ""; if ("OVS".equals(view.getCustomerGroup())){ group = "OverSeaOrder"; } else { group = "DomesticOrder"; } PickingOrderModel model = pickingOrderTransform.tranformToModel(view, customerTableModel, statusModel, userDetail, group); log.debug("model : {}" ,model.toString()); pickingOrderDAO.persist(model); onSavePickingOrderLine(view, userDetail); } catch (Exception e) { log.debug("Exception error syncOrder : ", e); } axCustomerConfirmJourDAO.updateStatusFinish(view.getConfirmId(), view.getConfirmDate(), view.getSaleId()); axCustomerConfirmTransDAO.updateStatusFinish(view.getSaleId(), view.getConfirmId(), view.getConfirmDate()); } axCustomerConfirmJourDAO.rollbackStatus(); axCustomerConfirmTransDAO.rollbackStatus(); } private void onSavePickingOrderLine(DataSyncConfirmOrderView view, UserDetail userDetail){ List<CustomerConfirmTransView> confirmTransModelList = axCustomerConfirmTransDAO.findByPrimaryKey(view.getSaleId(), view.getConfirmId(), view.getConfirmDate()); PickingOrderModel model = pickingOrderDAO.findByCustomerCode(view.getCustomerCode()); StatusModel statusModel = statusDAO.findByStatusSeqTablePickingOrder(TableValue.PICKING_LINE.getId()); PickingOrderLineModel pickingOrderLineModel; for (CustomerConfirmTransView axCustomerConfirmTransModel : confirmTransModelList){ log.debug("-----------axCustomerConfirmTransModel : {}", axCustomerConfirmTransModel.getItemId()); pickingOrderLineModel = pickingOrderLineTransform.transformToModel(axCustomerConfirmTransModel, model, statusModel, userDetail); try { log.debug("---pickingOrderLineModel {}", pickingOrderLineModel.toString()); pickingOrderLineDAO.persist(pickingOrderLineModel); } catch (Exception e) { log.debug("Exception error onSavePickingOrderLine : ", e); } } } public void getStikerWorkLoadReport(int pickingId, UserDetail user){ String nameReport = Utils.genReportName("_StikerWorkLoad"); List<StickerWorkLoadViewReport> viewReports = axCustomerConfirmJourDAO.genStikerWorkLoadReport(pickingId); HashMap map = new HashMap(); map.put("userPrint", user.getUserName()); map.put("printDate", Utils.convertCurrentDateToStringDDMMYYYY()); try { reportService.exportPDF(pathStikerWorkLoad, map, nameReport, viewReports); } catch (Exception e) { log.debug("Exception Report : ", e); } } public void getConfirmationPackingReport(int pickingId, UserDetail user){ String nameReport = Utils.genReportName("_ConfirmationPacking"); List<ConfirmationPackingViewModel> viewReports = axCustomerConfirmJourDAO.genConfirmationPackingReport(pickingId); HashMap map = new HashMap<String, Object>(); map.put("userPrint", user.getUserName()); map.put("printDate", Utils.convertCurrentDateToStringDDMMYYYY()); try { reportService.exportPDF(pathConfirmationPacking, map, nameReport, viewReports); } catch (Exception e) { log.debug("Exception Report : ", e); } } public void updateOnCancel(int pickindId){ pickingOrderDAO.updateStatus(pickindId, 6); //Status Cancle = 6 in mst_status on picking order pickingOrderLineDAO.cancelByPickingOrder(pickindId); } public void cancel(PickingOrderModel pickingModel){ try { List<PickingOrderLineModel> pickingOrderLineModelList = pickingOrderLineDAO.findByPickingId(pickingModel.getId()); for (PickingOrderLineModel lineModel : pickingOrderLineModelList){ List<ReservedOrderModel> reservedOrderModelList = reservedOrderDAO.findByLineId(lineModel.getId()); for (ReservedOrderModel reservedOrderModel : reservedOrderModelList){ updateLocationQtyOnRemove(reservedOrderModel.getLocationId(), reservedOrderModel.getBatchNo(), lineModel.getItemId(), reservedOrderModel.getReservedQty()); reservedOrderDAO.delete(reservedOrderDAO.remove(reservedOrderModel.getId())); } } } catch (Exception e) { log.debug("Exception error cancel : ", e); } } public void updateLocationQtyOnRemove(int locationId, String batchNo, String itemId, int reservedQty){ MSItemModel model = itemDAO.findByItemId(itemId); LocationQtyView locationQtyView = pickingOrderLineDAO.findLocationQtyByRemoveShowItem(locationId, batchNo, model.getId()); pickingOrderLineDAO.updateLocationQtyByRemoveShowItem(locationQtyView.getId(), locationQtyView.getReservedQty() - reservedQty); } public void getPickingOrderWithItemBarcodeReport(int pickingId, UserDetail user){ String nameReport = Utils.genReportName("_PickingOrderWithItemBarcode"); List<PickingOrderWithItemBarcodeReport> viewReports = axCustomerConfirmJourDAO.getPcikingOrderWithItemBarcodeReport(pickingId); HashMap map = new HashMap<String, Object>(); map.put("userPrint", user.getUserName()); map.put("printDate", Utils.convertCurrentDateToStringDDMMYYYY()); map.put("path", FacesUtil.getRealPath(pathPickingOrderWithItemBarcodeSub)); map.put("subreport", getBySubReport(pickingId)); try { reportService.exportPDF(pathPickingOrderWithItemBarcode, map, nameReport, viewReports); } catch (Exception e) { log.debug("Exception Report : ", e); } } private List<SubPickingOrderWithBarcodeViewReport> getBySubReport(int pickingId){ // List<InvOnHandModel> invOnHandModelList = invOnHandDAO.findByPickingId(pickingId); // List<InventoryOnHandViewReport> reportList = new ArrayList<InventoryOnHandViewReport>(); // int i = 1; // // for (InvOnHandModel model : invOnHandModelList){ // InventoryOnHandViewReport report = new InventoryOnHandViewReport(); // report.setNo(i); // // if (!Utils.isNull(model.getPalletModel()) && !Utils.isZero(model.getPalletModel().getPalletBarcode().length())){ // report.setPalletBarcode(model.getPalletModel().getPalletBarcode()); // } else { // report.setPalletBarcode(""); // } // // report.setSnBarcode(model.getSnBarcode()); // i++; // reportList.add(report); // } return invOnHandDAO.findByPickingIdOnReport(pickingId); } public boolean checkPost(int pickingOrderId){ List<InvOnhandPostView> invOnhandViewList = invOnHandDAO.findCountInvOnhand(pickingOrderId); List<PickingOrderLinePostView> pickingOrderLinePostViewList = pickingOrderLineDAO.findOnPostStatus(pickingOrderId); log.debug("invOnhandViewList size {}", invOnhandViewList.size()); log.debug("pickingOrderLinePostViewList size {}", pickingOrderLinePostViewList.size()); if (!Utils.isSafetyList(invOnhandViewList) || !Utils.isSafetyList(pickingOrderLinePostViewList)){ return false; } if (invOnhandViewList.size() != pickingOrderLinePostViewList.size()){ return false; } for (int i=0; i<invOnhandViewList.size(); i++){ if (invOnhandViewList.get(i).getItemId() == pickingOrderLinePostViewList.get(i).getItemId() && invOnhandViewList.get(i).getCountId() != pickingOrderLinePostViewList.get(i).getPickingQty()){ return false; } } return updateStatusPost(pickingOrderId); } public boolean authorize(int userId, int pickingOrderId){ UserAccessModel userAccessModel = userAccessDAO.findPostPickByPickingOrder(Utils.parseInt(userId)); if (Utils.isNull(userAccessModel)){ return false; } return updateStatusPost(pickingOrderId); } public boolean updateStatusPost(int pickingOrderId){ pickingOrderDAO.updateStatus(pickingOrderId, 5); //Status Post = 5 in mst_status on picking order return true; } }