From 12714c71c7737e21c3268b44a39f8f02befc5cb5 Mon Sep 17 00:00:00 2001 From: gdg <764716047@qq.com> Date: 星期一, 18 一月 2021 09:55:45 +0800 Subject: [PATCH] 模块:仓库库存管理 修改:订单入库流程 提出:秦老师 --- src/main/java/com/nanometer/smartlab/controller/WarehouseStockMngController.java | 453 +++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 426 insertions(+), 27 deletions(-) diff --git a/src/main/java/com/nanometer/smartlab/controller/WarehouseStockMngController.java b/src/main/java/com/nanometer/smartlab/controller/WarehouseStockMngController.java index e9cc241..314fe5a 100644 --- a/src/main/java/com/nanometer/smartlab/controller/WarehouseStockMngController.java +++ b/src/main/java/com/nanometer/smartlab/controller/WarehouseStockMngController.java @@ -5,10 +5,12 @@ import com.nanometer.smartlab.dao.OpeWarehouseReserveDao; import com.nanometer.smartlab.entity.*; import com.nanometer.smartlab.entity.dto.ApplyListDto; +import com.nanometer.smartlab.entity.enumtype.ApplyStatus; import com.nanometer.smartlab.entity.enumtype.ArrivalStatus; import com.nanometer.smartlab.entity.enumtype.SeeFlag; import com.nanometer.smartlab.entity.enumtype.ValidFlag; import com.nanometer.smartlab.exception.BusinessException; +import com.nanometer.smartlab.exception.ExceptionEnumCode; import com.nanometer.smartlab.service.*; import com.nanometer.smartlab.util.*; import org.apache.commons.lang.StringUtils; @@ -18,6 +20,7 @@ import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.primefaces.context.RequestContext; import org.primefaces.event.SelectEvent; +import org.primefaces.event.TabChangeEvent; import org.primefaces.model.LazyDataModel; import org.primefaces.model.SortOrder; import org.primefaces.model.StreamedContent; @@ -25,6 +28,7 @@ import org.springframework.context.annotation.PropertySource; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Controller; +import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import javax.faces.context.ExternalContext; @@ -36,6 +40,7 @@ import java.math.BigDecimal; import java.math.BigInteger; import java.net.URLEncoder; +import java.sql.Timestamp; import java.util.*; import java.util.concurrent.atomic.AtomicBoolean; import java.util.stream.Collectors; @@ -65,6 +70,8 @@ private SysUserService sysUserService; @Resource private SysSupplierService sysSupplierService; + @Resource + private OpeOrderService opeOrderService; @Resource private MenuController menuController; @@ -82,6 +89,8 @@ @Resource(name = "opeReagentStatusDao") OpeReagentStatusDao opeReagentStatusDao; + @Resource + OpeUseFlowService opeUseFlowService; @Resource OpeWarehouseReserveDao opeWarehouseReserveDao; @@ -126,6 +135,7 @@ private String reagentLogId; private String userName; + private Integer tabValue = 0; private List<SysReagent> reagentSelectList; private List<String> showCodes; @@ -229,7 +239,22 @@ * 选中的list */ private List<OpeApplyReserve> selectedListForPerson; - + private List<OpeApplyReserve> selectedTmpOrderList; + private List<OpeApplyReserve> trulySelectedOrderList; + /** + * 入库车 + */ + private List<OpeApplyReserve> selectedInputStorageTmpOrderList; + private List<OpeApplyReserve> trulyInputStorageTmpSelectedOrderList; + /** + * 订单入库变量 + */ + //到货时间 + private Timestamp arrivalTime; + //收货人 + private String consigneeId; + //OpeApply + private List<OpeApplyReserve> opeApplyList; /** * 条形码对话框中选择的条形码集合 */ @@ -292,6 +317,33 @@ } this.onWarehouseSelectChange(null); + } + + public void initInputWarehouse() { + logger.info("WarehouseStockMngController initInputWarehouse start"); + this.warehouseList = this.sysWarehouseService.getSysWarehouseList(null, null, null, null); + this.warehouseNameMap = new HashMap<String, String>(); + if (this.warehouseList != null && this.warehouseList.size() > 0) { + for (SysWarehouse house : this.warehouseList) { + this.warehouseNameMap.put(house.getId(), house.getName()); + } + } + this.warehouseContainerMap = new HashMap<String, SysWarehouseContainer>(); + this.warehouseIdContainerMap = new HashMap<String, List<SysWarehouseContainer>>(); + List<SysWarehouseContainer> warehouseContainerList = this.sysWarehouseContainerService.getSysWarehouseContainerList(null, null, null, null, null); + if (warehouseContainerList != null && warehouseContainerList.size() > 0) { + for (SysWarehouseContainer container : warehouseContainerList) { + warehouseContainerMap.put(container.getId(), container); + + if (!warehouseIdContainerMap.containsKey(container.getWarehouseId()) + || warehouseIdContainerMap.get(container.getWarehouseId()) == null) { + warehouseIdContainerMap.put(container.getWarehouseId(), new ArrayList<SysWarehouseContainer>()); + } + warehouseIdContainerMap.get(container.getWarehouseId()).add(container); + } + } + + this.onWarehouseSelectChange(null); } private void initReagentSelectList() { @@ -387,9 +439,78 @@ } } + public void addOrder() { + logger.info("WarehouseStockMngController onUseBtnClick start"); + if (this.selectedListForPerson == null || this.selectedListForPerson.size() == 0) { + FacesUtils.warn("请选择数据。"); + return; + } + if (selectedTmpOrderList !=null && selectedTmpOrderList.size()>0){ + ArrayList<OpeApplyReserve> tmp = new ArrayList<>(); + selectedListForPerson.forEach(opeApplyReserve -> { + AtomicBoolean flag = new AtomicBoolean(false); + selectedTmpOrderList.forEach(opeApplyReserve1 -> { + if (opeApplyReserve.getId().equals(opeApplyReserve1.getId())){ + flag.set(true); + } + + }); + if(!flag.get()) { + tmp.add(opeApplyReserve); + } + }); + selectedTmpOrderList.addAll(tmp); + }else{ + selectedTmpOrderList = new ArrayList<>(); + selectedTmpOrderList.addAll(selectedListForPerson); + } + } + + public void addInputStorageOrder() { + if (this.selectedListForPerson == null || this.selectedListForPerson.size() == 0) { + FacesUtils.warn("请选择数据。"); + return; + } + //1.判断非状态为确认的申购单不能入库 + for (OpeApplyReserve opeApplyReserve : this.selectedListForPerson) { + if (opeApplyReserve.getStatus() != ApplyStatus.SUPPLIER_CONFIRM) { + FacesUtils.warn("非已确认的数据不能入库。"); + return; + } + } + //2.加入暂存 + if (selectedInputStorageTmpOrderList !=null && selectedInputStorageTmpOrderList.size()>0){ + ArrayList<OpeApplyReserve> tmp = new ArrayList<>(); + selectedListForPerson.forEach(opeApplyReserve -> { + AtomicBoolean flag = new AtomicBoolean(false); + selectedInputStorageTmpOrderList.forEach(opeApplyReserve1 -> { + if (opeApplyReserve.getId().equals(opeApplyReserve1.getId())){ + flag.set(true); + } + + }); + if(!flag.get()) { + tmp.add(opeApplyReserve); + } + }); + selectedInputStorageTmpOrderList.addAll(tmp); + }else{ + selectedInputStorageTmpOrderList = new ArrayList<>(); + selectedInputStorageTmpOrderList.addAll(selectedListForPerson); + } + } + public void clear(){ selectedTmpList = null; + } + + public void clearOrderTmp(){ + selectedTmpOrderList = null; + } + + public void clearInputStorageTmp(){ + selectedInputStorageTmpOrderList = null; } public void cancel(){ @@ -403,19 +524,74 @@ return; } - ArrayList<Integer> indexs = new ArrayList<>(); - for (int i =0;i<trulySelectedList.size();i++){ - for (int j = 0; j < selectedTmpList.size(); j++) { - if(trulySelectedList.get(i).getId().equals(selectedTmpList.get(j).getId())) - { - indexs.add(i); + ArrayList<Object> indexs = new ArrayList<>(); + for (OpeWarehouseReserve warehouseReserve : trulySelectedList) { + for (OpeWarehouseReserve opeWarehouseReserve : selectedTmpList) { + if (warehouseReserve.getId().equals(opeWarehouseReserve.getId())) { + indexs.add(warehouseReserve); + } + } + } + + if (indexs.size()>0){ + indexs.forEach(obj -> { + selectedTmpList.remove(obj); + }); + } + + } + + public void cancelOrderTmp(){ + if (trulySelectedOrderList == null || trulySelectedOrderList.size()<=0){ + FacesUtils.info("至少选择一个"); + return; + } + + if (selectedTmpOrderList == null || selectedTmpOrderList.size()<=0){ + FacesUtils.info("至少选择一个"); + return; + } + + ArrayList<Object> indexs = new ArrayList<>(); + for (OpeApplyReserve opeApplyReserve : trulySelectedOrderList) { + for (OpeApplyReserve applyReserve : selectedTmpOrderList) { + if (opeApplyReserve.getId().equals(applyReserve.getId())) { + indexs.add(opeApplyReserve); + } + } + } + + if (indexs.size()>0){ + indexs.forEach(obj -> { + selectedTmpOrderList.remove(obj); + }); + } + + } + + public void cancelInputStorageTmp(){ + if (trulyInputStorageTmpSelectedOrderList == null || trulyInputStorageTmpSelectedOrderList.size()<=0){ + FacesUtils.info("至少选择一个"); + return; + } + + if (selectedInputStorageTmpOrderList == null || selectedInputStorageTmpOrderList.size()<=0){ + FacesUtils.info("至少选择一个"); + return; + } + + ArrayList<Object> indexs = new ArrayList<>(); + for (OpeApplyReserve opeApplyReserve : trulyInputStorageTmpSelectedOrderList) { + for (OpeApplyReserve applyReserve : selectedInputStorageTmpOrderList) { + if (opeApplyReserve.getId().equals(applyReserve.getId())) { + indexs.add(opeApplyReserve); } } } if (indexs.size()>0){ - indexs.forEach(index -> { - selectedTmpList.remove(selectedTmpList.get(index)); + indexs.forEach(obj -> { + selectedInputStorageTmpOrderList.remove(obj); }); } @@ -430,6 +606,29 @@ this.menuController.goToPage(Constants.PAGE_WAREHOUSE_REAGENT_USE_NEW, Constants.PAGE_WAREHOUSE_STOCK_MNG); } // + public void onUseBtnClickOrderTmp(){ + if (selectedTmpOrderList == null || selectedTmpOrderList.size()<=0){ + FacesUtils.info("至少选择一个"); + return; + } + + this.menuController.goToPage(Constants.PAGE_WAREHOUSE_REAGENT_USE_NEW_PERSON, Constants.PAGE_WAREHOUSE_STOCK_MNG); + } + + public void onUseBtnClickInputStorageTmp(){ + if (selectedInputStorageTmpOrderList == null || selectedInputStorageTmpOrderList.size()<=0){ + FacesUtils.info("至少选择一个"); + return; + } + opeApplyList = new ArrayList<>(); + selectedInputStorageTmpOrderList.forEach(opeApplyReserve -> { + OpeApplyReserve applyDetail = opeApplyService.getOpeApplyDetail(opeApplyReserve.getId()); + opeApplyList.add(applyDetail); + + }); + //跳转编辑页面 + this.menuController.goToPage(Constants.PAGE_ORDER_INPUT_WAREHOUSE, Constants.PAGE_WAREHOUSE_STOCK_MNG); + } public void onUseBtnClickForPerson() { logger.info("WarehouseStockMngController onUseBtnClickForPerson start"); @@ -496,7 +695,7 @@ } } // 将当前选择条形码保存到库存中 - for (OpeApplyReserve opeApplyReserve : this.selectedListForPerson) { + for (OpeApplyReserve opeApplyReserve : this.selectedTmpOrderList) { if (opeApplyReserve.getId().equals(this.selectedOpeApplyReserve.getId())) { OpeWarehouseReserve wa=opeWarehouseReserveService.getOpeWarehouseReserve(opeApplyReserve.getReagent().getId(),opeApplyReserve.getArticleNumber()); if(this.useNum > wa.getReserve()) @@ -578,16 +777,20 @@ // 将当前选择条形码保存到库存中 List<String> codeList=new ArrayList<>(); - for (OpeApplyReserve opeApplyReserve : this.selectedListForPerson) { + for (OpeApplyReserve opeApplyReserve : this.selectedTmpOrderList) { if (opeApplyReserve.getId().equals(this.selectedOpeApplyReserve.getId())) { - OpeWarehouseReserve wa=opeWarehouseReserveService.getOpeWarehouseReserve(opeApplyReserve.getReagent().getId(),opeApplyReserve.getArticleNumber()); - if(wa==null){ - wa=new OpeWarehouseReserve(); - wa.setReserve(0); - } - if(this.useNum > wa.getReserve()) - { - FacesUtils.warn("库存不够,请确认或申购!"); +// OpeWarehouseReserve wa=opeWarehouseReserveService.getOpeWarehouseReserve(opeApplyReserve.getReagent().getId(),opeApplyReserve.getArticleNumber()); +// if(wa==null){ +// wa=new OpeWarehouseReserve(); +// wa.setReserve(0); +// } +// if(this.useNum > wa.getReserve()) +// { +// FacesUtils.warn("库存不够,请确认或申购!"); +// return; +// } + if (this.useNum+opeApplyReserve.getUsed() > opeApplyReserve.getNum()){ + FacesUtils.warn("领用数量超出申请数量!"); return; } opeApplyReserve.setSelectNum(useNum); @@ -665,7 +868,7 @@ } List<String> codeList=new ArrayList<>(); - for (OpeWarehouseReserve opeWarehouseReserve : this.selectedList) { + for (OpeWarehouseReserve opeWarehouseReserve : this.selectedTmpList) { if (opeWarehouseReserve.getId().equals(this.selectedOpeWarehouseReserve.getId())) { if(this.useNum > opeWarehouseReserve.getReserve()) { @@ -713,7 +916,7 @@ System.out.println("====onYesBtnClick======"); // 将当前选择条形码保存到库存中 - for (OpeWarehouseReserve opeWarehouseReserve : this.selectedList) { + for (OpeWarehouseReserve opeWarehouseReserve : this.selectedTmpList) { if (opeWarehouseReserve.getId().equals(this.selectedOpeWarehouseReserve.getId())) { if(this.useNum > opeWarehouseReserve.getReserve()) { @@ -737,11 +940,24 @@ } } + public void onTabChange(TabChangeEvent event) { + if ("firstTab".equals(event.getTab().getId())) { + tabValue = 0; + }else{ + tabValue = 1; + } + } + + public void onCancelBtnClick() { + this.selectedTmpOrderList = null; + this.selectedTmpList = null; + this.selectedInputStorageTmpOrderList = null; this.menuController.backToPage(); } public void onClose(){ + this.selectedTmpOrderList = null; this.selectedTmpList = null; this.menuController.backToPage(); } @@ -754,7 +970,7 @@ public void onSaveBtnClickForPerson(){ try { - if (this.selectedListForPerson == null || this.selectedListForPerson.size() == 0) { + if (this.selectedTmpOrderList == null || this.selectedTmpOrderList.size() == 0) { FacesUtils.warn("请选择申领试剂。"); return; } @@ -766,7 +982,7 @@ List<OpeApplyReserve> list=new ArrayList<>(); List<OpeApplyReserve> list2=new ArrayList<>(); //int size = 0; - for(OpeApplyReserve app:this.selectedListForPerson){ + for(OpeApplyReserve app:this.selectedTmpOrderList){ if(app.getFlag()==1){ list.add(app); }else { @@ -970,7 +1186,7 @@ } public void onSaveBtnClick() { try { - if (this.selectedList == null || this.selectedList.size() == 0) { + if (this.selectedTmpList == null || this.selectedTmpList.size() == 0) { FacesUtils.warn("请选择申领试剂。"); return; } @@ -995,7 +1211,7 @@ int sum = 0; List<OpeWarehouseReserve> list=new ArrayList<>(); List<OpeWarehouseReserve> list2=new ArrayList<>(); - for (OpeWarehouseReserve selectWarehouseReserve : this.selectedList) { + for (OpeWarehouseReserve selectWarehouseReserve : this.selectedTmpList) { if(selectWarehouseReserve.getFlag()==1){ list.add(selectWarehouseReserve); }else{ @@ -1106,6 +1322,52 @@ logger.error(e.getMessage(), e); FacesUtils.warn("操作失败。"); } + } + /** + * @Description: 订单入库保存 + */ + public void onSaveInputWarehouseClick(){ + try{ + //用来检验提交表单得试剂条码是否重复 + Map<String,Boolean> checkTable= new HashMap<>(); + if (opeApplyList != null && opeApplyList.size() > 0) { + for (OpeApplyReserve opeApplyReserve:opeApplyList) { + //0.1获取该申购单的订单 + OpeOrder oo = opeOrderService.getOrder(opeApplyReserve.getId()); + if (oo == null) { + throw new BusinessException(ExceptionEnumCode.ORDER_ERROR,"订单不存在"); + } + //0.2检查条码->得到试剂条码列表 + List<String> codeList = opeReagentStatusService + .checkReagentCode(opeApplyReserve.getStartReagentCode2(), opeApplyReserve.getEndReagentCode2(), opeApplyReserve.getArrivalNum()); + if (codeList != null && codeList.size() > 0) { + for (String code:codeList) { + if (checkTable.get(code) == null) { + checkTable.put(code, true); + }else{ + throw new BusinessException(ExceptionEnumCode.PARAM_EXIST, "当前订单条码重复,"+code); + } + } + } + } + + + checkTable = null; + opeApplyService.orderInputWarehouse(opeApplyList,consigneeId,arrivalTime); + } + + FacesUtils.info("入库完成"); + //返回 + this.onCancelBtnClick(); + }catch (BusinessException e){ + e.printStackTrace(); + FacesUtils.warn(e.getMessage()); + + } catch (Exception e) { + e.printStackTrace(); + FacesUtils.warn("系统异常,操作失败"); + } + } @SuppressWarnings("serial") @@ -1880,10 +2142,10 @@ public List<SysReagent> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String, Object> filters) { List<SysReagent> list = null; try { - int count = sysReagentService.getSysReagentTotalCount(applyNewReagentName, applyNewCas, null,null); + int count = sysReagentService.getSysReagentTotalCountNew(applyNewReagentName, applyNewCas, null,null); this.setRowCount(count); if (count > 0) { - list = sysReagentService.getSysReagentList(applyNewReagentName, applyNewCas, null,null, first, pageSize); + list = sysReagentService.getSysReagentListNew(applyNewReagentName, applyNewCas, null,null, first, pageSize); } } catch (Exception e) { logger.error(e); @@ -2120,4 +2382,141 @@ public void setShowCodes(List<String> showCodes) { this.showCodes = showCodes; } + + public List<OpeApplyReserve> getSelectedTmpOrderList() { + return selectedTmpOrderList; + } + + public void setSelectedTmpOrderList(List<OpeApplyReserve> selectedTmpOrderList) { + this.selectedTmpOrderList = selectedTmpOrderList; + } + + public List<OpeApplyReserve> getTrulySelectedOrderList() { + return trulySelectedOrderList; + } + + public void setTrulySelectedOrderList(List<OpeApplyReserve> trulySelectedOrderList) { + this.trulySelectedOrderList = trulySelectedOrderList; + } + + + public Integer getTabValue() { + return tabValue; + } + + public void setTabValue(Integer tabValue) { + this.tabValue = tabValue; + } + + + public List<OpeApplyReserve> getSelectedInputStorageTmpOrderList() { + return selectedInputStorageTmpOrderList; + } + + public void setSelectedInputStorageTmpOrderList(List<OpeApplyReserve> selectedInputStorageTmpOrderList) { + this.selectedInputStorageTmpOrderList = selectedInputStorageTmpOrderList; + } + + public List<OpeApplyReserve> getTrulyInputStorageTmpSelectedOrderList() { + return trulyInputStorageTmpSelectedOrderList; + } + + public void setTrulyInputStorageTmpSelectedOrderList(List<OpeApplyReserve> trulyInputStorageTmpSelectedOrderList) { + this.trulyInputStorageTmpSelectedOrderList = trulyInputStorageTmpSelectedOrderList; + } + + public Timestamp getArrivalTime() { + return arrivalTime; + } + + public void setArrivalTime(Timestamp arrivalTime) { + this.arrivalTime = arrivalTime; + } + + public String getConsigneeId() { + return consigneeId; + } + + public void setConsigneeId(String consigneeId) { + this.consigneeId = consigneeId; + } + + public List getConsignee() { + List<SysUser> dataList = this.sysUserService.getSysUserList(null, null, null, null, null); + //将admin置于首位 + for (int i = 0; i < dataList.size(); i++) { + if ("admin".equals(dataList.get(i).getAccount())){ + dataList.add(0, dataList.remove(i)); + } + } + return dataList; + } + + public List<OpeApplyReserve> getOpeApplyList() { + return opeApplyList; + } + + public void setOpeApplyList(List<OpeApplyReserve> opeApplyList) { + this.opeApplyList = opeApplyList; + } + + + public void setArrival(OpeApplyReserve oar) { + //强制-》全到货 + oar.setArrivalNum(oar.getNum()); + } + + public void reagentStartCodeChange(OpeApplyReserve oar) { + //先输入条形码,到货数量帮填 + oar.setArrivalNum(oar.getNum()); + String startReagentCode2 = oar.getStartReagentCode2(); + String endReagentCode2 = oar.getEndReagentCode2(); + //1.如果开始条码为空,条码就为空,或者没有到货 + if (StringUtils.isBlank(startReagentCode2) + || oar.getArrivalNum() == null || oar.getArrivalNum() < 1) { + + oar.setStartReagentCode2(""); + oar.setEndReagentCode2(""); + return; + } + //2如果开始条码不为空 + //2.0如果包含字母不等于24位的直接不管 + if (startReagentCode2.matches(".*[A-F]+.*")) { + if (startReagentCode2.length() ==24){ + //2.2长度为24位编码的 + BigInteger arrNum = BigInteger.valueOf(oar.getArrivalNum().longValue()); + //后5位随机码 + String randomCode = startReagentCode2.substring(startReagentCode2.length() - 5); + String reagentCodePrefix = startReagentCode2.substring(0,startReagentCode2.length() - 5); + + BigInteger startReagentCodeSuffix = new BigInteger(randomCode); + BigInteger endReagentCodeSuffix = startReagentCodeSuffix.add(arrNum).subtract((new BigInteger("1"))); + String reagentCodeSuffix= autoGenericCode(randomCode, endReagentCodeSuffix); + oar.setEndReagentCode2(reagentCodePrefix + reagentCodeSuffix); + }else{ + oar.setEndReagentCode2(""); + } + }else{ + + BigInteger startReagentCode = new BigInteger(startReagentCode2); + //2.1长度不为24位编码 + //数据1 + BigInteger arrNum = BigInteger.valueOf(oar.getArrivalNum().longValue()); + BigInteger code1 = startReagentCode.add(arrNum).subtract(BigInteger.ONE); + oar.setEndReagentCode2(autoGenericCode(startReagentCode2, code1)); + } + } + + + + + private String autoGenericCode(String code, BigInteger code1) { + String result = ""; + //补充位数 + result = String.format("%0" + code.length() + "d", code1); + + return result; + } + + } -- Gitblit v1.9.2