From 8fca402ad743c884d106c0977cb792ca26bd5617 Mon Sep 17 00:00:00 2001 From: gdg <764716047@qq.com> Date: 星期一, 25 一月 2021 11:11:43 +0800 Subject: [PATCH] add --- src/main/java/com/nanometer/smartlab/controller/WarehouseStockMngController.java | 617 ++++++++++++++++++++++++++++++++++++++++--------------- 1 files changed, 450 insertions(+), 167 deletions(-) diff --git a/src/main/java/com/nanometer/smartlab/controller/WarehouseStockMngController.java b/src/main/java/com/nanometer/smartlab/controller/WarehouseStockMngController.java index b4d60ae..c226a40 100644 --- a/src/main/java/com/nanometer/smartlab/controller/WarehouseStockMngController.java +++ b/src/main/java/com/nanometer/smartlab/controller/WarehouseStockMngController.java @@ -42,6 +42,7 @@ import java.math.BigInteger; import java.net.URLEncoder; import java.sql.Timestamp; +import java.text.SimpleDateFormat; import java.util.*; import java.util.concurrent.atomic.AtomicBoolean; import java.util.stream.Collectors; @@ -123,6 +124,20 @@ * 打开条形码对话框用 */ private List<OpeReagentStatus> reagentStatusSelectListForPerson; + /** + *打开条形码对话框用 + */ + private Map<String,Map<String,OpeWarehouseReserve>> warehouseReserveUseTmp=new HashMap<>(); + /** + * 打开条形码对话框用 + */ + private List<OpeWarehouseReserve> warehouseReserveList = new ArrayList<>(); + + /** + * 打开条形码对话框用 + */ + private OpeWarehouseReserve opeWarehouseReserve = new OpeWarehouseReserve(); + public List<OpeReagentStatus> getReagentStatusSelectListForPerson() { return reagentStatusSelectListForPerson; @@ -200,7 +215,8 @@ private String supplierId; private List<SysSupplier> supplierSelectList; //private boolean flag = false; - + //领用单号 + private String receiptNumber; // 试剂库 private LazyDataModel<SysReagent> reagentDataModel; // 直接入库试剂List @@ -612,10 +628,26 @@ } // public void onUseBtnClickOrderTmp(){ + warehouseReserveUseTmp = new HashMap<>(); + opeWarehouseReserve = new OpeWarehouseReserve(); if (selectedTmpOrderList == null || selectedTmpOrderList.size()<=0){ FacesUtils.info("至少选择一个"); return; } + + + //相同的试剂不能再多选 + Set<String> checkTable = new HashSet<>(); + for (OpeApplyReserve oar : selectedTmpOrderList) { + String reagentId = oar.getReagent().getId(); + if (!checkTable.contains(reagentId)) { + checkTable.add(reagentId); + }else{ + FacesUtils.info("相同试剂不能重复选择"); + return; + } + } + checkTable = null; this.menuController.goToPage(Constants.PAGE_WAREHOUSE_REAGENT_USE_NEW_PERSON, Constants.PAGE_WAREHOUSE_STOCK_MNG); } @@ -675,9 +707,161 @@ // 根据选择的试剂获取对应的条形码 initReagentStatusSelectListForPerson(); + //初始化试剂库存所在仓库仓库 + this.warehouseReserveList = opeWarehouseReserveService.selectWarehouseByReagentIdAndArticleNumber(selectedOpeApplyReserve.getReagent().getId(),selectedOpeApplyReserve.getArticleNumber(),true); + //初始化第一个库存 + if (warehouseReserveList.size()>0) + selectChangeReserve(warehouseReserveList.get(0).getWarehouseId()); + //初始化条形码,通过applyReserve保存的条码显示对应试剂的条码 + for (OpeApplyReserve oar : selectedTmpOrderList) { + if (oar.getReagent().getId().equals(opeWarehouseReserve.getReagentId())) { + this.endReagentCodeForPerson = oar.getEndReagentCode2(); + this.startReagentCodeForPerson = oar.getStartReagentCode2(); + } + } + if (warehouseReserveUseTmp.get(selectedOpeApplyReserve.getReagent().getId()) == null) { + //初始化库中领用和大小, + reagentCodeSelectedList = selectedOpeApplyReserve.getReagentCode(); + useNum = selectedOpeApplyReserve.getReagentCode() == null?0: selectedOpeApplyReserve.getReagentCode().size(); + this.endReagentCodeForPerson = null; + this.startReagentCodeForPerson = null; + } RequestContext.getCurrentInstance().execute("PF('reagentCodeDialogForPerson').show()"); } + /** + * 变换库存 + */ + public void selectChangeReserve(String id) { + if (warehouseReserveList.size() > 0) { + warehouseReserveList.forEach(owr -> { + if (owr.getWarehouseId().equals(id)){ + opeWarehouseReserve.setId(owr.getId()); + opeWarehouseReserve.setWarehouseId(id); + opeWarehouseReserve.setWarehouseName(owr.getWarehouseName()); + opeWarehouseReserve.setReserve(owr.getReserve()); + opeWarehouseReserve.setReagentId(owr.getReagentId()); + } + }); + } + } + + /** + * 补贴条码->添加x仓库的n个试剂 + */ + public void add2() { + + //0.判断该批次是否再仓库有库存 + if (opeWarehouseReserve.getId() == null) { + FacesUtils.warn("没有库存"); + return; + } + //1.判断领取数量 + if (useNum > opeWarehouseReserve.getReserve()) { + FacesUtils.warn("领用数量不能超过库存"); + return; + } + //2.加入Map + OpeWarehouseReserve owr = new OpeWarehouseReserve(); + owr.setId(opeWarehouseReserve.getId()); + owr.setWarehouseId(opeWarehouseReserve.getWarehouseId()); + owr.setWarehouseName(opeWarehouseReserve.getWarehouseName()); + owr.setReserve(opeWarehouseReserve.getReserve()); + owr.setReagentId(opeWarehouseReserve.getReagentId()); + owr.setUseNum(useNum); + if (warehouseReserveUseTmp.get(owr.getReagentId()) == null) { + Map<String, OpeWarehouseReserve> tmp = new HashMap<>(); + tmp.put(owr.getWarehouseId(), owr); + warehouseReserveUseTmp.put(owr.getReagentId(), tmp); + }else{ + warehouseReserveUseTmp.get(owr.getReagentId()).put(owr.getWarehouseId(), owr); + } + //变换条码 + btCodeChange(); + } + + /** + * 取消一个仓库领取 + */ + public void remove2(OpeWarehouseReserve owr) { + if (warehouseReserveUseTmp.get(owr.getReagentId()).size() > 0) { + warehouseReserveUseTmp.get(owr.getReagentId()).remove(owr.getWarehouseId()); + //变换条码 + btCodeChange(); + } + } + + /** + * 获取暂存表单 + */ + public List<OpeWarehouseReserve> getDataTmp() { + + List<OpeWarehouseReserve> list = new ArrayList<>(); + + + Map<String, OpeWarehouseReserve> dataMap = warehouseReserveUseTmp. + get(opeWarehouseReserve.getReagentId()); + if (dataMap ==null) { + return list; + } + Set<Map.Entry<String, OpeWarehouseReserve>> entries = dataMap.entrySet(); + for (Map.Entry<String, OpeWarehouseReserve> e : entries) { + list.add(e.getValue()); + } + return list; + } + /** + * @Description: 补贴结束条码的生成 + */ + public void btCodeChange(){ + //1.获取补贴试剂总数 + List<OpeWarehouseReserve> dataTmp = getDataTmp(); + int distance = dataTmp.stream().mapToInt(item -> item.getUseNum() == null ? 0 : item.getUseNum()).sum(); + + //1.如果开始条码为空,距离为0 + if (StringUtils.isBlank(startReagentCodeForPerson) + || distance < 1) { + return; + } + //2如果开始条码不为空 + //2.0如果包含字母不等于24位的直接不管 + if (startReagentCodeForPerson.matches(".*\\D+.*")) { + if (startReagentCodeForPerson.length() ==24 && + startReagentCodeForPerson.matches(".*([A-F]|\\d)+.*") && + startReagentCodeForPerson.substring(startReagentCodeForPerson.length() - 5).matches("\\d{5}")){ + //2.2长度为24位编码的 + BigInteger arrNum = BigInteger.valueOf(distance); + //后5位随机码 + String randomCode = startReagentCodeForPerson.substring(startReagentCodeForPerson.length() - 5); + String reagentCodePrefix = startReagentCodeForPerson.substring(0,startReagentCodeForPerson.length() - 5); + + BigInteger startReagentCodeSuffix = new BigInteger(randomCode); + BigInteger endReagentCodeSuffix = startReagentCodeSuffix.add(arrNum).subtract((new BigInteger("1"))); + String reagentCodeSuffix= autoGenericCode(randomCode, endReagentCodeSuffix); + endReagentCodeForPerson = (reagentCodePrefix + reagentCodeSuffix); + }else{ + endReagentCodeForPerson = (""); + } + }else{ + + BigInteger startReagentCode = new BigInteger(startReagentCodeForPerson); + //2.1长度不为24位编码 + //数据1 + BigInteger arrNum = BigInteger.valueOf(distance); + BigInteger code1 = startReagentCode.add(arrNum).subtract(BigInteger.ONE); + endReagentCodeForPerson = (autoGenericCode(startReagentCodeForPerson, code1)); + } + //把数据放入applyReserve + for (OpeApplyReserve oar : selectedTmpOrderList) { + if (oar.getReagent().getId().equals(this.opeWarehouseReserve.getReagentId())) { + oar.setEndReagentCode2(endReagentCodeForPerson); + oar.setStartReagentCode2(startReagentCodeForPerson); + } + } + } + + + public void onYesBtnClickForPerson() { try { @@ -702,6 +886,9 @@ // 将当前选择条形码保存到库存中 for (OpeApplyReserve opeApplyReserve : this.selectedTmpOrderList) { if (opeApplyReserve.getId().equals(this.selectedOpeApplyReserve.getId())) { + //list OpeWarehouseReserve + //getReserve 总数小于 useNum 报错 + OpeWarehouseReserve wa=opeWarehouseReserveService.getOpeWarehouseReserve(opeApplyReserve.getReagent().getId(),opeApplyReserve.getArticleNumber()); if(this.useNum > wa.getReserve()) { @@ -714,9 +901,15 @@ opeApplyReserve.setReagentCode(this.reagentCodeSelectedList); } opeApplyReserve.setFlag(1); + //删除前面部分的补贴条码领用显示 + warehouseReserveUseTmp.remove(opeApplyReserve.getReagent().getId()); + endReagentCodeForPerson = null; + startReagentCodeForPerson = null; break; } } + + //FacesUtils.info("选择条形码个数为" + this.reagentCodeSelectedList.size()); RequestContext.getCurrentInstance().execute("PF('reagentCodeDialogForPerson').hide()"); @@ -728,98 +921,43 @@ public void onYesBtnClickForPerson2() { try { - //if (this.reagentCodeSelectedList == null || this.reagentCodeSelectedList.size() == 0) { - //FacesUtils.warn("请选择条形码。"); - //return; - //} - if(this.useNum == null || this.useNum <= 0) - { - FacesUtils.warn("请输入大于0的领用数量!"); + //1.获取补贴试剂总数,判断数量 + List<OpeWarehouseReserve> dataTmp = getDataTmp(); + //distance为领用总数 + int distance = dataTmp.stream().mapToInt(item -> item.getUseNum() == null ? 0 : item.getUseNum()).sum(); + if (distance < 1) { + FacesUtils.warn("请领取试剂"); return; } - System.out.println("====onYesBtnClick======"); - BigDecimal startReagentCode2 = new BigDecimal(startReagentCodeForPerson); - BigDecimal endReagentCode2 = new BigDecimal(endReagentCodeForPerson); - // 检查条形码结束要大于条形码开始 - if (endReagentCode2.compareTo(startReagentCode2) == -1) { - FacesUtils.warn("条形码开始必须小于条形码结束。"); + //2.申购单已经领用的数量+当前准备领用的数量不能超过 单子的申请数量 + if (selectedOpeApplyReserve.getNum() < selectedOpeApplyReserve.getUsed() + distance) { + FacesUtils.warn("当前领用数量超过订单的申请数量"); return; } - // 检查条形码和到货数量是否匹配 - if (endReagentCode2.subtract(startReagentCode2).intValue() != (useNum - 1)) { - FacesUtils.warn("条形码数量和领用数量不一致。"); - return; - } - - BigInteger startReagentCode3=new BigInteger(startReagentCodeForPerson); - BigInteger endReagentCode3=new BigInteger(endReagentCodeForPerson); - int len = startReagentCodeForPerson.length() - String.valueOf(startReagentCode3).length(); - String temp = ""; - for (int i = 0; i < len; i++) { - temp += "0"; - } - String str=""; - for (BigInteger i = startReagentCode3; i.compareTo(endReagentCode3) < 1; i = i.add(BigInteger.ONE)) { - String code = temp + String.valueOf(i); - OpeReagentStatus status=this.opeReagentStatusService.getOpeReagentStatusByReagentCode(code); - if(status==null){ - - }else{ - if(status.getStatus()==ArrivalStatus.WAREHOUSE){ - - }else{ - str+=code+","; - } - } - } - if(str!=null && !str.equals("")){ - FacesUtils.info("条形码"+str.substring(0,str.length()-1)+"已被领用"); - return; - } - + List<String> codeList = opeReagentStatusService + .checkReagentCode(startReagentCodeForPerson, endReagentCodeForPerson, distance); // 将当前选择条形码保存到库存中 - List<String> codeList=new ArrayList<>(); 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("库存不够,请确认或申购!"); -// return; -// } - if (this.useNum+opeApplyReserve.getUsed() > opeApplyReserve.getNum()){ - FacesUtils.warn("领用数量超出申请数量!"); - return; - } - opeApplyReserve.setSelectNum(useNum); - opeApplyReserve.setStartReagentCode(startReagentCode2); - opeApplyReserve.setEndReagentCode(endReagentCode2); - opeApplyReserve.setStartReagentCode2(temp+startReagentCode2.toString()); - opeApplyReserve.setEndReagentCode2(temp+endReagentCode2.toString()); - for (BigInteger i = new BigInteger(startReagentCodeForPerson); i.compareTo(new BigInteger(endReagentCodeForPerson)) < 1; i = i.add(BigInteger.ONE)) { - codeList.add(i.toString()); - } - /*for(int i=Integer.parseInt(startReagentCodeForPerson);i<=Integer.parseInt(endReagentCodeForPerson);i++){ - codeList.add(Integer.toString(i)); - }*/ - if(codeList != null) - { - opeApplyReserve.setReagentCode(codeList); - } + opeApplyReserve.setSelectNum(distance); + opeApplyReserve.setStartReagentCode2(this.startReagentCodeForPerson); + opeApplyReserve.setEndReagentCode2(this.endReagentCodeForPerson); + opeApplyReserve.setReagentCode(codeList); + opeApplyReserve.setCacheUpdateList(getDataTmp()); opeApplyReserve.setFlag(0); + reagentCodeSelectedList = null; break; } } //FacesUtils.info("选择条形码个数为" + codeList.size()); RequestContext.getCurrentInstance().execute("PF('reagentCodeDialogForPerson').hide()"); + } catch (BusinessException e) { + logger.error("操作失败。", e); + FacesUtils.warn(e.getMessage()); } catch (Exception e) { logger.error("操作失败。", e); FacesUtils.warn("操作失败。"); @@ -827,72 +965,25 @@ } public void onYesBtnClick2(){ - try{ - if(this.useNum == null || this.useNum <= 0) - { + try { + if (this.useNum == null || this.useNum <= 0) { FacesUtils.warn("请输入大于0的领用数量!"); return; } - BigDecimal startReagentCode2 = new BigDecimal(startReagentCode); - BigDecimal endReagentCode2 = new BigDecimal(endReagentCode); - // 检查条形码结束要大于条形码开始 - if (endReagentCode2.compareTo(startReagentCode2) == -1) { - FacesUtils.warn("条形码开始必须小于条形码结束。"); - return; - } - // 检查条形码和到货数量是否匹配 - if (endReagentCode2.subtract(startReagentCode2).intValue() != (useNum - 1)) { - FacesUtils.warn("条形码数量和领用数量不一致。"); - return; - } - BigInteger startReagentCode3=new BigInteger(startReagentCode); - BigInteger endReagentCode3=new BigInteger(endReagentCode); - int len = startReagentCode.length() - String.valueOf(startReagentCode3).length(); + List<String> codeList = opeReagentStatusService + .checkReagentCode(startReagentCode, endReagentCode, useNum); - String temp = ""; - for (int i = 0; i < len; i++) { - temp += "0"; - } - String str=""; - for (BigInteger i = startReagentCode3; i.compareTo(endReagentCode3) < 1; i = i.add(BigInteger.ONE)) { - String code = temp + String.valueOf(i); - OpeReagentStatus status=this.opeReagentStatusService.getOpeReagentStatusByReagentCode(code); - if(status==null){ - - }else{ - if(status.getStatus()==ArrivalStatus.WAREHOUSE){ - - }else{ - str+=code+","; - } - } - } - if(str!=null && !str.equals("")){ - FacesUtils.info("条形码"+str.substring(0,str.length()-1)+"已被领用"); - return; - } - - List<String> codeList=new ArrayList<>(); for (OpeWarehouseReserve opeWarehouseReserve : this.selectedTmpList) { if (opeWarehouseReserve.getId().equals(this.selectedOpeWarehouseReserve.getId())) { - if(this.useNum > opeWarehouseReserve.getReserve()) - { + if (this.useNum > opeWarehouseReserve.getReserve()) { FacesUtils.warn("库存不够,请确认或申购!"); return; } opeWarehouseReserve.setSelectNum(useNum); - opeWarehouseReserve.setStartReagentCode(startReagentCode2); - opeWarehouseReserve.setEndReagentCode(endReagentCode2); - opeWarehouseReserve.setStartReagentCode2(temp+startReagentCode2.toString()); - opeWarehouseReserve.setEndReagentCode2(temp+endReagentCode2.toString()); - for (BigInteger i = new BigInteger(startReagentCode); i.compareTo(new BigInteger(endReagentCode)) < 1; i = i.add(BigInteger.ONE)) { - codeList.add(i.toString()); - } - /*for(int i=Integer.parseInt(startReagentCode);i<=Integer.parseInt(endReagentCode);i++){ - codeList.add(Integer.toString(i)); - }*/ - if(codeList != null) - { + opeWarehouseReserve.setStartReagentCode2(startReagentCode); + opeWarehouseReserve.setEndReagentCode2(endReagentCode); + + if (codeList != null) { opeWarehouseReserve.setReagentCodes(codeList); } opeWarehouseReserve.setFlag(0); @@ -902,10 +993,13 @@ } //FacesUtils.info("选择条形码个数为" + codeList.size()); RequestContext.getCurrentInstance().execute("PF('reagentCodeDialog').hide()"); - } catch (Exception e) { - logger.error("操作失败。", e); - FacesUtils.warn("操作失败。"); - } + } catch (BusinessException e) { + logger.error(e.getMessage()); + FacesUtils.warn(e.getMessage()); + } catch (Exception e) { + logger.error("操作失败。", e); + FacesUtils.warn("操作失败。"); + } } public void onYesBtnClick() { @@ -958,6 +1052,9 @@ this.selectedTmpOrderList = null; this.selectedTmpList = null; this.selectedInputStorageTmpOrderList = null; + this.endReagentCodeForPerson = null; + this.startReagentCodeForPerson = null; + this.useNum = null; this.menuController.backToPage(); } @@ -984,18 +1081,31 @@ FacesUtils.warn("请选择申领人。"); return; } + List<OpeApplyReserve> list=new ArrayList<>(); List<OpeApplyReserve> list2=new ArrayList<>(); //int size = 0; for(OpeApplyReserve app:this.selectedTmpOrderList){ + if (app.getFlag() == null) { + FacesUtils.warn("请选择。"); + return; + } if(app.getFlag()==1){ list.add(app); }else { list2.add(app); } - } + + //1.1判断库存 + checkReserve(list); + checkReserve(list2); + //1.2判断提交的条码是否重复(只有补贴条码需要判断) + checkReagentCode(list2); + //库中领取 if(list.size()>0&&list!=null){ + //扣库存 对象中的reagentCode存的是id + for(OpeApplyReserve app:list){ List<String> reagentCode=app.getReagentCode(); if(reagentCode!=null && reagentCode.size()>0){ @@ -1004,25 +1114,15 @@ if (!this.opeReagentStatusService.isAllowWarehouseUse(opeReagentStatus)) { FacesUtils.warn("只能申领在仓库的试剂。"); return; - }else { - opeReagentStatus.setHouseId(laboratoryId); - opeReagentStatus.setContainerId(laboratoryContainerId); - this.opeReagentStatusDao.updateOpeReagentStatusDao(opeReagentStatus); - OpeLaboratoryReserve lr=new OpeLaboratoryReserve(); - lr.setReagentId(app.getReagent().getId()); - lr.setHouseId(laboratoryId); - lr.setContainerId(laboratoryContainerId); - lr.setReserve(app.getSelectNum()); - lr.setUserId(userId); - lr.setValidFlag(ValidFlag.VALID); - this.opeLaboratoryReserveService.insert(lr); } } } } - this.opeWarehouseReserveService.claimForPerson(list, userId,projectNum); + this.opeWarehouseReserveService.claimForPerson(list, userId,projectNum,laboratoryId,laboratoryContainerId); } + + //补贴条码 if(list2.size()>0&&list!=null){ List<OpeApply> opeList=new ArrayList<>(); for(int i=0;i<list2.size();i++){ @@ -1033,6 +1133,8 @@ opeApply.setReagent(list2.get(i).getReagent()); opeApply.setStartReagentCode(list2.get(i).getStartReagentCode2()); opeApply.setEndReagentCode(list2.get(i).getEndReagentCode2()); + opeApply.setReagentCodeList(list2.get(i).getReagentCode()); + opeApply.setId(list2.get(i).getId()); opeList.add(opeApply); OpeLaboratoryReserve lr=new OpeLaboratoryReserve(); lr.setReagentId(list2.get(i).getReagent().getId()); @@ -1043,21 +1145,153 @@ lr.setValidFlag(ValidFlag.VALID); this.opeLaboratoryReserveService.insert(lr); } - this.opeWarehouseReserveService.reagentDStore2(opeList,userId); + this.opeWarehouseReserveService.reagentDStore3(opeList,userId); + + //扣库存 + opeWarehouseReserveService.btWarehouseReserveReduce(list2); } + for(int i=0;i<list2.size();i++){ OpeWarehouseReserve opeWarehouseReserve=new OpeWarehouseReserve(); - OpeApplyReserve re=new OpeApplyReserve(); re.setUsed(list2.get(i).getSelectNum()+list2.get(i).getUsed()); re.setId(list2.get(i).getId()); opeApplyDao.updateOpeApplyUsed(re);//修改已领数量 } + + //更新申购单状态 + for (OpeApplyReserve oar : selectedTmpOrderList) { + //确认 + if (oar.getStatus() == ApplyStatus.SUPPLIER_CONFIRM) { + //领用完 就改成已经入库 + if (oar.getNum() == oar.getUsed() + oar.getSelectNum()) { + opeApplyService.updateOpeApplyInfo(ApplyStatus.STORAGE,null,null, oar.getId()); + //2.2更改订单状态 + OpeOrder oo = opeOrderService.getOrder(oar.getId()); + List<OpeApply> oas = opeOrderService.getOpeApplyListByOrder(oo.getId()); + assert oas.size() > 0; + //子订单是否全部入库,是则父单为已入库,否则未完成 + boolean flag = oas.stream().allMatch(oa -> oa.getStatus() == ApplyStatus.STORAGE); + oo.setArrivalTime(arrivalTime); + if (flag){ + oo.setStatus(ApplyStatus.STORAGE); + opeOrderService.updateOpeOrderStatus(oo); + }else{ + oo.setStatus(ApplyStatus.UNCOMPLETED); + opeOrderService.updateOpeOrder(oo); + } + } + } + } + FacesUtils.info("申领成功。"); - this.menuController.goToPage(Constants.PAGE_WAREHOUSE_STOCK_MNG, Constants.PAGE_WAREHOUSE_REAGENT_USE_NEW); - } catch (Exception e) { + //领用单生成 + printTable = null; + printTable = new Hashtable(); + int sum = 0; + List<ApplyListDto> applyList = new ArrayList<>(); + Map applyPersonInfo = sysUserService.getUser(userId); + printTable.put("head", instituteName); + printTable.put("title", "领用单"); + printTable.put("applyPerson", applyPersonInfo.get("name")); + printTable.put("department", applyPersonInfo.get("meta_value")); + printTable.put("date", Utils.now("yyyy-MM-dd")); + printTable.put("phone", applyPersonInfo.get("phone")); + String receiptNum = new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date()); + printTable.put("receiptNumber", receiptNum); + this.receiptNumber = receiptNum; + for (OpeApplyReserve oar : selectedTmpOrderList) { + ApplyListDto lis = new ApplyListDto(); + Map reagentDetail = sysReagentService.getReagentDetail(oar.getReagent().getId()); + lis.setNum(String.valueOf(oar.getSelectNum())); //数量 + lis.setMainMetering(String.format("%s%s", reagentDetail.get("main_metering"), reagentDetail.get("unit"))); + lis.setControlProducts((String) reagentDetail.get("controlProducts")); + lis.setProductName((String) reagentDetail.get("name")); + lis.setReagentFormat((String) reagentDetail.get("reagentFormat")); + lis.setProductCode((String)reagentDetail.get("productCode")); + lis.setMemo((String)reagentDetail.get("memo")); + applyList.add(lis); + sum += oar.getSelectNum(); + } + applyList.add(new ApplyListDto("合计", "", "", "", "", String.valueOf(sum), "")); + printTable.put("applyList", applyList); + //返回 +// onCancelBtnClick(); + RequestContext.getCurrentInstance().execute("PF('printDialog').show()"); + } catch (BusinessException e){ + logger.info(e.getMessage()); + FacesUtils.warn(e.getMessage()); + } + catch (Exception e) { logger.error("操作失败。", e); FacesUtils.warn("操作失败。"); + } + } + + public void receiptNumberChange( ){ + } + + /** + * 点击打印 关联所有流向和领用单号e + */ + public void associatedFlowReceiptNumber() { + try { + opeUseFlowService.updateReceiptNumberByCode(selectedTmpOrderList, receiptNumber); + //弹出打印窗口 + RequestContext.getCurrentInstance().execute("document.getElementById('indirectPrint').click()"); + } catch (Exception e) { + logger.info(e.getMessage()); + } + + } + + public void associatedFlowReceiptNumber2() { + try { + opeUseFlowService.updateReceiptNumberByCode2(selectedTmpList, receiptNumber); + //弹出打印窗口 + RequestContext.getCurrentInstance().execute("document.getElementById('indirectPrint').click()"); + } catch (Exception e) { + logger.info(e.getMessage()); + } + + } + + + private void checkReserve(List<OpeApplyReserve> list) { + if (list == null || list.size() < 1) { + return; + } + for (OpeApplyReserve oar : list) { + + boolean flag = (oar.getFlag() != 1); + List<OpeWarehouseReserve> owr = opeWarehouseReserveService + .selectWarehouseByReagentIdAndArticleNumber(oar.getReagent().getId(), oar.getArticleNumber(),flag); + int sum = owr.stream().mapToInt(item -> item.getReserve() == null ? 0 : item.getReserve()).sum(); + //剩余库存不足领取数量 + if (sum < oar.getSelectNum()) { + throw new BusinessException(ExceptionEnumCode.APPLY_NUM_OVER, "库存已经不够"); + } + } + } + + private void checkReagentCode(List<OpeApplyReserve> list){ + if (list == null || list.size() < 1) { + return; + } + Set<String> checkSet = new HashSet<>(); + for (OpeApplyReserve oar : list) { + List<String> codeList = opeReagentStatusService + .checkReagentCode(oar.getStartReagentCode2(), oar.getEndReagentCode2(), oar.getSelectNum()); + oar.setReagentCode(codeList); + if (codeList != null && codeList.size() > 0) { + for (String code:codeList) { + if (!checkSet.contains(code)) { + checkSet.add(code); + }else{ + throw new BusinessException(ExceptionEnumCode.PARAM_EXIST, "当前订单条码重复,"+code); + } + } + } } } @@ -1212,6 +1446,10 @@ printTable.put("date", Utils.now("yyyy-MM-dd")); printTable.put("phone", applyPersonInfo.get("phone")); + String receiptNum = new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date()); + printTable.put("receiptNumber", receiptNum); + this.receiptNumber = receiptNum; + //int size = 0; int sum = 0; List<OpeWarehouseReserve> list=new ArrayList<>(); @@ -1280,6 +1518,7 @@ opeApply.setReagent(this.sysReagentService.getSysReagent(list2.get(i).getReagentId())); opeApply.setStartReagentCode(list2.get(i).getStartReagentCode2()); opeApply.setEndReagentCode(list2.get(i).getEndReagentCode2()); + opeApply.setReagentCodeList(list2.get(i).getReagentCodes()); opeList.add(opeApply); OpeLaboratoryReserve lr=new OpeLaboratoryReserve(); lr.setReagentId(list2.get(i).getReagentId()); @@ -1304,7 +1543,7 @@ sum += list2.get(i).getSelectNum(); } - this.opeWarehouseReserveService.reagentDStore2(opeList,userId); + this.opeWarehouseReserveService.reagentDStore4(opeList,userId); for(int i=0;i<list2.size();i++){ list2.get(i).setReserve(list2.get(i).getReserve()-list2.get(i).getSelectNum()); opeWarehouseReserveDao.updateOpeWarehouseReserve(list2.get(i)); @@ -2173,18 +2412,33 @@ System.out.println("==============================="); if(useNum!=null && useNum>0){ if(startReagentCode!=null && !startReagentCode.equals("")){ + if (startReagentCode.matches(".*\\D+.*")) { + if (startReagentCode.length() ==24 && + startReagentCode.matches(".*([A-F]|\\d)+.*") && + startReagentCode.substring(startReagentCode.length() - 5).matches("\\d{5}")){ - BigDecimal start=new BigDecimal(startReagentCode.trim()); - String str=startReagentCode; - String up=""; - int len = startReagentCode.length() - String.valueOf(start).length(); - String temp = ""; - for (int i = 0; i < len; i++) { - temp += "0"; + //2.2长度为24位编码的 + BigInteger arrNum = BigInteger.valueOf((long)useNum); + //后5位随机码 + String randomCode = startReagentCode.substring(startReagentCode.length() - 5); + String reagentCodePrefix = startReagentCode.substring(0,startReagentCode.length() - 5); + + BigInteger startReagentCodeSuffix = new BigInteger(randomCode); + BigInteger endReagentCodeSuffix = startReagentCodeSuffix.add(arrNum).subtract((new BigInteger("1"))); + String reagentCodeSuffix= autoGenericCode(randomCode, endReagentCodeSuffix); + endReagentCode= (reagentCodePrefix + reagentCodeSuffix); + }else{ + endReagentCode = (""); + } + }else{ + + BigInteger startReagentCode2 = new BigInteger(startReagentCode); + //2.1长度不为24位编码 + //数据1 + BigInteger arrNum = BigInteger.valueOf((long)useNum); + BigInteger code1 = startReagentCode2.add(arrNum).subtract(BigInteger.ONE); + endReagentCode=(autoGenericCode(startReagentCode, code1)); } - BigDecimal end = start.add(new BigDecimal(useNum-1)); - endReagentCode=temp+end.toString(); - //endReagentCode=Integer.toString(useNum-1+Integer.parseInt(startReagentCode)); }else{ FacesUtils.info("请输入条形码开始"); } @@ -2611,8 +2865,11 @@ } //2如果开始条码不为空 //2.0如果包含字母不等于24位的直接不管 - if (startReagentCode2.matches(".*[A-F]+.*")) { - if (startReagentCode2.length() ==24){ + + if (startReagentCode2.matches(".*\\D+.*")) { + if (startReagentCode2.length() ==24 && + startReagentCode2.matches(".*([A-F]|\\d)+.*") && + startReagentCode2.substring(startReagentCode2.length() - 5).matches("\\d{5}")){ //2.2长度为24位编码的 BigInteger arrNum = BigInteger.valueOf(oar.getArrivalNum().longValue()); //后5位随机码 @@ -2681,4 +2938,30 @@ return statusSelectList; } + + + + public List<OpeWarehouseReserve> getWarehouseReserveList() { + return warehouseReserveList; + } + + public void setWarehouseReserveList(List<OpeWarehouseReserve> warehouseReserveList) { + this.warehouseReserveList = warehouseReserveList; + } + + public OpeWarehouseReserve getOpeWarehouseReserve() { + return opeWarehouseReserve; + } + + public void setOpeWarehouseReserve(OpeWarehouseReserve opeWarehouseReserve) { + this.opeWarehouseReserve = opeWarehouseReserve; + } + + public String getReceiptNumber() { + return receiptNumber; + } + + public void setReceiptNumber(String receiptNumber) { + this.receiptNumber = receiptNumber; + } } -- Gitblit v1.9.2