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/service/OpeApplyService.java | 2
src/main/webapp/warehouse_reagent_use.xhtml | 33
src/main/java/com/nanometer/smartlab/dao/OpeWarehouseReserveDao.xml | 64 ++
src/main/java/com/nanometer/smartlab/dao/OpeUseFlowDao.xml | 25
src/main/webapp/resources/template/试剂导入模板.xlsx | 0
src/main/java/com/nanometer/smartlab/dao/OpeApplyDao.xml | 11
src/main/webapp/reagent_mng.xhtml | 4
src/main/java/com/nanometer/smartlab/controller/OpeUseFlowInfoController.java | 67 ++
src/main/java/com/nanometer/smartlab/entity/OpeWarehouseReserve.java | 15
src/main/webapp/WEB-INF/config-mybatis.xml | 2
src/main/java/com/nanometer/smartlab/entity/OpeApply.java | 10
src/main/java/com/nanometer/smartlab/entity/OpeApplyReserve.java | 45
src/main/java/com/nanometer/smartlab/entity/OpeUseFlow.java | 9
src/main/webapp/order_mng_ruku.xhtml | 2
src/main/java/com/nanometer/smartlab/controller/WarehouseStockMngController.java | 617 ++++++++++++++-----
src/main/webapp/resources/css/default.css | 8
src/main/java/com/nanometer/smartlab/dao/OpeReagentStatusDao.java | 2
src/main/webapp/project_mng.xhtml | 6
src/main/java/com/nanometer/smartlab/dao/OpeReagentStatusDao.xml | 14
src/main/java/com/nanometer/smartlab/exception/ExceptionEnumCode.java | 3
src/main/webapp/reagent_user_flow_info.xhtml | 127 +++
src/main/webapp/order_input_warehouse.xhtml | 2
src/main/java/com/nanometer/smartlab/service/OpeReagentStatusServiceImpl.java | 135 +++
src/main/java/com/nanometer/smartlab/service/OpeApplyServiceImpl.java | 7
src/main/webapp/resources/template/耗材导入模板.xlsx | 0
src/main/java/com/nanometer/smartlab/dao/OpeWarehouseReserveDao.java | 8
src/main/java/com/nanometer/smartlab/service/OpeUseFlowService.java | 13
src/main/webapp/warehouse_reagent_use_person.xhtml | 231 ++++++
src/main/java/com/nanometer/smartlab/service/OpeWarehouseReserveService.java | 16
src/main/java/com/nanometer/smartlab/dao/OpeUseFlowDao.java | 6
src/main/java/com/nanometer/smartlab/service/OpeUseFlowServiceImpl.java | 99 ++
src/main/java/com/nanometer/smartlab/service/OpeReagentStatusService.java | 5
src/main/java/com/nanometer/smartlab/service/OpeWarehouseReserveServiceImpl.java | 325 +++++++++
33 files changed, 1,648 insertions(+), 265 deletions(-)
diff --git a/src/main/java/com/nanometer/smartlab/controller/OpeUseFlowInfoController.java b/src/main/java/com/nanometer/smartlab/controller/OpeUseFlowInfoController.java
index fb59033..989d1a1 100644
--- a/src/main/java/com/nanometer/smartlab/controller/OpeUseFlowInfoController.java
+++ b/src/main/java/com/nanometer/smartlab/controller/OpeUseFlowInfoController.java
@@ -1,13 +1,21 @@
package com.nanometer.smartlab.controller;
+import java.text.SimpleDateFormat;
import java.util.*;
import javax.annotation.Resource;
+import com.nanometer.smartlab.entity.SysUser;
+import com.nanometer.smartlab.entity.dto.ApplyListDto;
+import com.nanometer.smartlab.service.SysUserService;
+import com.nanometer.smartlab.util.Utils;
import org.apache.log4j.Logger;
+import org.primefaces.context.RequestContext;
import org.primefaces.model.LazyDataModel;
import org.primefaces.model.SortOrder;
+import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Scope;
+import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Controller;
import com.nanometer.smartlab.entity.OpeUseFlow;
@@ -37,6 +45,8 @@
private Date endDate;
+ private Hashtable printTable;
+
public String getHouseName() {
return houseName;
}
@@ -45,11 +55,18 @@
this.houseName = houseName;
}
+ @Value("${institute.name}")
+ String instituteName;
+
@Resource
private OpeUseFlowService opeUseFlowService;
@Resource
private SysReagentService sysReagentService;
+
+ @Resource
+ private SysUserService sysUserService;
+
private List<SysReagent> reagentSelectList;
@@ -132,7 +149,48 @@
this.reagentCode = reagentCode;
}
+ /**
+ * 生成领用单
+ */
+ public void generateRecipients(OpeUseFlow ouf) {
+ String receiptNumber = ouf.getReceiptNumber();
+ String code = ouf.getReagentCode();
+ //id:个数
+ Map<String, Integer> printInfo = opeUseFlowService.getRegentInfoFromReceiptNumber(receiptNumber);
+ //无法得到当时的领用单的领用人,试剂状态表没有存入,userId会随时变化
+ printTable = null;
+ Integer sum = 0;
+ printTable = new Hashtable();
+ List<ApplyListDto> applyList = new ArrayList<>();
+ //获取当时操作状态为领取的人员
+ Map<String,String> info= opeUseFlowService.getApplyUserByReagentCode(code);
+ Map applyPersonInfo = sysUserService.getUser(info.get("user_id"));
+ printTable.put("head", instituteName);
+ printTable.put("title", "领用单");
+ printTable.put("applyPerson", applyPersonInfo.get("name"));
+ printTable.put("department", applyPersonInfo.get("meta_value"));
+ String time = new SimpleDateFormat("yyyy-MM-dd").format(info.get("create_time"));
+ printTable.put("date", time);
+ printTable.put("phone", applyPersonInfo.get("phone"));
+ printTable.put("receiptNumber", receiptNumber);
+ for (Map.Entry<String, Integer> map : printInfo.entrySet()) {
+ ApplyListDto lis = new ApplyListDto();
+ Map reagentDetail = sysReagentService.getReagentDetail(map.getKey());
+ lis.setNum(map.getValue().toString()); //数量
+ 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 += map.getValue();
+ }
+ applyList.add(new ApplyListDto("合计", "", "", "", "", String.valueOf(sum), ""));
+ printTable.put("applyList", applyList);
+
+ }
public Date getStartDate() {
if (null == startDate){
Date now = new Date();
@@ -160,4 +218,13 @@
public void setEndDate(Date endDate) {
this.endDate = endDate;
}
+
+
+ public Hashtable getPrintTable() {
+ return printTable;
+ }
+
+ public void setPrintTable(Hashtable printTable) {
+ this.printTable = printTable;
+ }
}
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;
+ }
}
diff --git a/src/main/java/com/nanometer/smartlab/dao/OpeApplyDao.xml b/src/main/java/com/nanometer/smartlab/dao/OpeApplyDao.xml
index 38cef0d..b55d128 100644
--- a/src/main/java/com/nanometer/smartlab/dao/OpeApplyDao.xml
+++ b/src/main/java/com/nanometer/smartlab/dao/OpeApplyDao.xml
@@ -64,6 +64,7 @@
<result property="status" column="status" typeHandler="com.nanometer.smartlab.entity.handler.ApplyStatusHandler"></result>
<result property="applyUserId" column="apply_user_id"></result>
<result property="arrivalTime" column="arrival_time"></result>
+ <result property="articleNumber" column="articleNumber"></result>
<result property="projectManage" column="projectManage"/>
<result property="project" column="project"/>
<association property="reagent" javaType="com.nanometer.smartlab.entity.SysReagent">
@@ -470,9 +471,13 @@
<update id="updateOpeApplyInfo" parameterType="java.util.Map">
update
ope_apply
- set status = #{status},
- arrival_time = #{arrivalTime},
- consignee_id = #{consigneeId}
+ set status = #{status}
+ <if test="arrivalTime!=null" >
+ ,arrival_time = #{arrivalTime}
+ </if>
+ <if test="consigneeId!=null" >
+ ,consignee_id = #{consigneeId}
+ </if>
where valid_flag = 1
and id = #{applyId}
</update>
diff --git a/src/main/java/com/nanometer/smartlab/dao/OpeReagentStatusDao.java b/src/main/java/com/nanometer/smartlab/dao/OpeReagentStatusDao.java
index 3804a20..b2dc7b2 100644
--- a/src/main/java/com/nanometer/smartlab/dao/OpeReagentStatusDao.java
+++ b/src/main/java/com/nanometer/smartlab/dao/OpeReagentStatusDao.java
@@ -53,4 +53,6 @@
List<String> selectReagentCodesByReId(String reagentId);
void insertOpeReagentStatus2(OpeReagentStatus ors);
+
+ int countReagentByArticleAndWarehouse(Map params);
}
diff --git a/src/main/java/com/nanometer/smartlab/dao/OpeReagentStatusDao.xml b/src/main/java/com/nanometer/smartlab/dao/OpeReagentStatusDao.xml
index 5025194..e1e86dc 100644
--- a/src/main/java/com/nanometer/smartlab/dao/OpeReagentStatusDao.xml
+++ b/src/main/java/com/nanometer/smartlab/dao/OpeReagentStatusDao.xml
@@ -434,4 +434,18 @@
and valid_flag = 1
ORDER BY update_time
</select>
+ <select id="countReagentByArticleAndWarehouse" resultType="java.lang.Integer">
+ select count(*)
+ from ope_reagent_status
+ WHERE status = 1
+ <if test="reagentId != null and reagentId !=''">
+ and reagent_id = #{reagentId}
+ </if>
+ <if test="articleNumber != null and articleNumber !=''">
+ and article_number = #{articleNumber}
+ </if>
+ <if test="warehouseId != null and warehouseId !=''">
+ and house_id = #{warehouseId}
+ </if>
+ </select>
</mapper>
diff --git a/src/main/java/com/nanometer/smartlab/dao/OpeUseFlowDao.java b/src/main/java/com/nanometer/smartlab/dao/OpeUseFlowDao.java
index 5dbf82c..3b913f9 100644
--- a/src/main/java/com/nanometer/smartlab/dao/OpeUseFlowDao.java
+++ b/src/main/java/com/nanometer/smartlab/dao/OpeUseFlowDao.java
@@ -29,4 +29,10 @@
int updateTimeByCode(Map params);
OpeUseFlow getOpeUseFlowByCode(@Param("reagentCode") String reagentCode);
+
+ void updateReceiptNumber(String code, String receiptNumber);
+
+ List<Map> getRegentInfoFromReceiptNumber(String receiptNumber);
+
+ Map getUserIdByReagentCode(String reagentCode, String id);
}
diff --git a/src/main/java/com/nanometer/smartlab/dao/OpeUseFlowDao.xml b/src/main/java/com/nanometer/smartlab/dao/OpeUseFlowDao.xml
index 6fb9af4..533c5fd 100644
--- a/src/main/java/com/nanometer/smartlab/dao/OpeUseFlowDao.xml
+++ b/src/main/java/com/nanometer/smartlab/dao/OpeUseFlowDao.xml
@@ -24,6 +24,7 @@
<result column="laboratoryContainerName" jdbcType="VARCHAR" property="laboratoryContainerName" />
<result column="laboratoryContainerCode" jdbcType="VARCHAR" property="laboratoryContainerCode" />
<result column="operatestateName" jdbcType="VARCHAR" property="operatestateName" />
+ <result column="receipt_number" jdbcType="VARCHAR" property="receiptNumber" />
<association property="reagent" javaType="com.nanometer.smartlab.entity.SysReagent">
<id property="id" column="reagentId"/>
@@ -48,7 +49,12 @@
<update id="updateTimeByCode" parameterType="java.util.Map">
update ope_use_flow set create_time=now() where reagent_code=#{code} and status=#{status}
</update>
- <sql id="queryWhereSql">
+ <update id="updateReceiptNumber">
+ update ope_use_flow
+ set receipt_number = #{1}
+ where reagent_code = #{0}
+ </update>
+ <sql id="queryWhereSql">
<if test="reagentId != null and reagentId != ''">
and ors.reagent_id = #{reagentId}
</if>
@@ -138,7 +144,22 @@
ORDER BY create_time DESC
LIMIT 1
</select>
- <insert id="insertOpeUseFlow" parameterType="com.nanometer.smartlab.entity.OpeUseFlow">
+ <select id="getRegentInfoFromReceiptNumber" resultType="java.util.Map">
+ SELECT ors.reagent_id reagentId,count(ors.reagent_id) count
+ from ope_use_flow ouf
+ LEFT JOIN ope_reagent_status ors on ors.reagent_code = ouf.reagent_code
+ WHERE ouf.receipt_number = #{0}
+ GROUP BY ors.reagent_id
+ </select>
+ <select id="getUserIdByReagentCode" resultType="java.util.Map">
+ select user_id,create_time
+ from ope_use_flow
+ where reagent_code =#{0}
+ and operatestate =#{1}
+ and valid_flag = 1
+ limit 1
+ </select>
+ <insert id="insertOpeUseFlow" parameterType="com.nanometer.smartlab.entity.OpeUseFlow">
insert into ope_use_flow(id, reagent_code, status, house_id, container_id, user_id, remainder, place, store_type, valid_flag, create_time, realstatus, operatestate)
values (#{id}, #{reagentCode}, #{status}, #{houseId}, #{containerId}, #{userId}, #{remainder}, #{place}, #{storeType}, 1, #{createTime}, #{realstatus},#{operateState})
</insert>
diff --git a/src/main/java/com/nanometer/smartlab/dao/OpeWarehouseReserveDao.java b/src/main/java/com/nanometer/smartlab/dao/OpeWarehouseReserveDao.java
index 52d826e..b8b67db 100644
--- a/src/main/java/com/nanometer/smartlab/dao/OpeWarehouseReserveDao.java
+++ b/src/main/java/com/nanometer/smartlab/dao/OpeWarehouseReserveDao.java
@@ -18,6 +18,8 @@
@SuppressWarnings("rawtypes")
int getOpeWarehouseReserveTotalCount(Map params) throws DataAccessException;
+ List<OpeWarehouseReserve> getOpeWarehouseReserveList2(Map params) throws DataAccessException;
+
void insertOpeWarehouseReserve(OpeWarehouseReserve opeWarehouseReserve);
int updateOpeWarehouseReserve(OpeWarehouseReserve opeWarehouseReserve);
@@ -31,4 +33,10 @@
void updateCount(Map<String ,Object> params);
void insertOpeWarehouseReserve2(OpeWarehouseReserve ope);
+
+ List<OpeWarehouseReserve> selectWarehouseByReagentIdAndArticleNumber(Map params);
+
+ List<OpeWarehouseReserve> selectWarehouseByRidAndArtiNumberAndWid(Map params);
+
+ void updateBtReserve(String id, Integer useNum);
}
diff --git a/src/main/java/com/nanometer/smartlab/dao/OpeWarehouseReserveDao.xml b/src/main/java/com/nanometer/smartlab/dao/OpeWarehouseReserveDao.xml
index c55af0e..1993ced 100644
--- a/src/main/java/com/nanometer/smartlab/dao/OpeWarehouseReserveDao.xml
+++ b/src/main/java/com/nanometer/smartlab/dao/OpeWarehouseReserveDao.xml
@@ -118,6 +118,65 @@
<select id="selectByReId" resultMap="OpeWarehouseReserve">
select * from ope_warehouse_reserve where reagent_id=#{id}
</select>
+ <select id="selectWarehouseByReagentIdAndArticleNumber" resultMap="OpeWarehouseReserve" parameterType="java.util.Map">
+ SELECT
+ owr.id,
+ owr.reagent_id,
+ owr.warehouseId,
+ sw.NAME warehouseName,
+ sum( owr.reserve ) reserve
+ FROM
+ ope_warehouse_reserve owr
+ LEFT JOIN sys_warehouse sw ON sw.id = owr.warehouseId
+ WHERE
+ sw.valid_flag = 1
+ AND owr.valid_flag = 1
+ and owr.reserve > 0
+ and owr.reagent_id = #{reagentId}
+ <if test="articleNumber != null and articleNumber != ''">
+ and owr.article_number = #{articleNumber}
+ </if>
+ GROUP BY
+ reagent_id,
+ warehouseId
+ HAVING
+ reserve > 0
+ </select>
+
+ <select id="selectWarehouseByRidAndArtiNumberAndWid" resultMap="OpeWarehouseReserve" parameterType="java.util.Map">
+ SELECT
+ owr.id,
+ owr.reagent_id,
+ owr.warehouseId,
+ sw.NAME warehouseName,
+ owr.reserve,
+ owr.article_number
+ FROM
+ ope_warehouse_reserve owr
+ LEFT JOIN sys_warehouse sw ON sw.id = owr.warehouseId
+ WHERE
+ sw.valid_flag = 1
+ AND owr.valid_flag = 1
+ and owr.reserve > 0
+ and owr.reagent_id = #{reagentId}
+ <if test="articleNumber != null and articleNumber != ''">
+ and owr.article_number = #{articleNumber}
+ </if>
+ <if test="warehouseId != null and warehouseId != ''">
+ and owr.warehouseId = #{warehouseId}
+ </if>
+ </select>
+
+ <select id="getOpeWarehouseReserveList2" resultMap="OpeWarehouseReserve" parameterType="java.util.Map">
+
+ <include refid="queryColumns"/>
+ from ope_warehouse_reserve as oa
+ <include refid="queryJoins"/>
+ where oa.valid_flag = 1 and oa.reserve > 0
+ <include refid="queryWhereSql"/>
+
+ order by oa.update_time,oa.reserve
+ </select>
<update id="updateByReId" parameterType="java.util.Map">
update ope_warehouse_reserve set reagent_id=#{newReId} where reagent_id=#{oldReId}
@@ -127,6 +186,11 @@
<update id="updateCount" parameterType="java.util.Map">
update ope_warehouse_reserve set reserve=reserve+1 where reagent_id=#{reagentId} and article_number=#{articleNumber}
</update>
+ <update id="updateBtReserve">
+ UPDATE ope_warehouse_reserve
+ set reserve = reserve - #{1}
+ where id = #{0}
+ </update>
</mapper>
diff --git a/src/main/java/com/nanometer/smartlab/entity/OpeApply.java b/src/main/java/com/nanometer/smartlab/entity/OpeApply.java
index 2e35b5c..c35ed83 100644
--- a/src/main/java/com/nanometer/smartlab/entity/OpeApply.java
+++ b/src/main/java/com/nanometer/smartlab/entity/OpeApply.java
@@ -6,6 +6,7 @@
import java.io.Serializable;
import java.math.BigDecimal;
import java.sql.Timestamp;
+import java.util.*;
/**
* Created by johnny on 17/11/23.
@@ -84,6 +85,7 @@
private String articleNumber;
private String startReagentCode;
private String endReagentCode;
+ private List<String> reagentCodeList;
private String houseId;
private String containerId;
private String placeId;
@@ -328,9 +330,15 @@
this.projectId = projectId;
}
+ public List<String> getReagentCodeList() {
+ return reagentCodeList;
+ }
+ public void setReagentCodeList(List<String> reagentCodeList) {
+ this.reagentCodeList = reagentCodeList;
+ }
- public String getProjectOwner() {
+ public String getProjectOwner() {
return projectOwner;
}
diff --git a/src/main/java/com/nanometer/smartlab/entity/OpeApplyReserve.java b/src/main/java/com/nanometer/smartlab/entity/OpeApplyReserve.java
index c9e9a18..389d25d 100644
--- a/src/main/java/com/nanometer/smartlab/entity/OpeApplyReserve.java
+++ b/src/main/java/com/nanometer/smartlab/entity/OpeApplyReserve.java
@@ -7,29 +7,30 @@
import java.math.BigDecimal;
import java.sql.Timestamp;
import java.util.List;
+import java.util.Map;
/**
* Created by johnny on 17/11/23.
*/
-public class OpeApplyReserve implements Serializable,Comparable<OpeApplyReserve> {
+public class OpeApplyReserve implements Serializable, Comparable<OpeApplyReserve> {
- private String id;
- // 申购编号
- private String applyCode;
- // 申请数量
- private Integer num;
- // 已领用数量
- private Integer used;
- // 申购试剂
- private SysReagent reagent;
- // 申购者
- private String applyUserId;
- // 批号
- private String articleNumber;
- //领用数量
- private Integer selectNum;
+ private String id;
+ // 申购编号
+ private String applyCode;
+ // 申请数量
+ private Integer num;
+ // 已领用数量
+ private Integer used;
+ // 申购试剂
+ private SysReagent reagent;
+ // 申购者
+ private String applyUserId;
+ // 批号
+ private String articleNumber;
+ //领用数量
+ private Integer selectNum;
- private Integer flag;
+ private Integer flag;
private ApplyStatus status;
private Integer arrivalNum;
private String containerId;
@@ -52,6 +53,7 @@
private String startReagentCode2;
private String endReagentCode2;
+ private List<OpeWarehouseReserve> cacheUpdateList;
public String getStartReagentCode2() {
return startReagentCode2;
@@ -220,4 +222,13 @@
public void setProjectManage(String projectManage) {
this.projectManage = projectManage;
}
+
+
+ public List<OpeWarehouseReserve> getCacheUpdateList() {
+ return cacheUpdateList;
+ }
+
+ public void setCacheUpdateList(List<OpeWarehouseReserve> cacheUpdateList) {
+ this.cacheUpdateList = cacheUpdateList;
+ }
}
diff --git a/src/main/java/com/nanometer/smartlab/entity/OpeUseFlow.java b/src/main/java/com/nanometer/smartlab/entity/OpeUseFlow.java
index 108a403..f6dd09a 100644
--- a/src/main/java/com/nanometer/smartlab/entity/OpeUseFlow.java
+++ b/src/main/java/com/nanometer/smartlab/entity/OpeUseFlow.java
@@ -41,6 +41,7 @@
private String operatestateName;
private String operateState;
+ private String receiptNumber;
@@ -229,4 +230,12 @@
public void setStoreType(StoreType storeType) {
this.storeType = storeType;
}
+
+ public String getReceiptNumber() {
+ return receiptNumber;
+ }
+
+ public void setReceiptNumber(String receiptNumber) {
+ this.receiptNumber = receiptNumber;
+ }
}
diff --git a/src/main/java/com/nanometer/smartlab/entity/OpeWarehouseReserve.java b/src/main/java/com/nanometer/smartlab/entity/OpeWarehouseReserve.java
index 02c1481..84f2322 100644
--- a/src/main/java/com/nanometer/smartlab/entity/OpeWarehouseReserve.java
+++ b/src/main/java/com/nanometer/smartlab/entity/OpeWarehouseReserve.java
@@ -31,7 +31,10 @@
private String applyCode;
private String orderCode;
-
+ /**
+ * 补贴条码的暂存领用数量
+ */
+ public Integer useNum;
public String getWarehouseId() {
return warehouseId;
}
@@ -177,4 +180,14 @@
public void setOrderCode(String orderCode) {
this.orderCode = orderCode;
}
+
+ public Integer getUseNum() {
+ return useNum;
+ }
+
+ public void setUseNum(Integer useNum) {
+ this.useNum = useNum;
+ }
+
+
}
diff --git a/src/main/java/com/nanometer/smartlab/exception/ExceptionEnumCode.java b/src/main/java/com/nanometer/smartlab/exception/ExceptionEnumCode.java
index e23f12e..0acb3c4 100644
--- a/src/main/java/com/nanometer/smartlab/exception/ExceptionEnumCode.java
+++ b/src/main/java/com/nanometer/smartlab/exception/ExceptionEnumCode.java
@@ -13,7 +13,8 @@
REAGENT_CODE_EXIST("2001"),
REAGENT_CODE_INVALID("2002"),
MAIL_SEND_FAIL("3001"),
- ORDER_ERROR("4001");
+ ORDER_ERROR("4001"),
+ APPLY_NUM_OVER("55555");
private String code;
diff --git a/src/main/java/com/nanometer/smartlab/service/OpeApplyService.java b/src/main/java/com/nanometer/smartlab/service/OpeApplyService.java
index 083cd89..7369cb2 100644
--- a/src/main/java/com/nanometer/smartlab/service/OpeApplyService.java
+++ b/src/main/java/com/nanometer/smartlab/service/OpeApplyService.java
@@ -71,4 +71,6 @@
void updateOpeApplyInfo(ApplyStatus storage, String consigneeId, Timestamp arrivalTime, String applyId);
void orderInputWarehouse(List<OpeApplyReserve> opeApplyList,String consigneeId,Timestamp arrivalTime) throws BusinessException,Exception;
+
+ void btUpdateApplyAndOrder(List<OpeApply> opeList);
}
diff --git a/src/main/java/com/nanometer/smartlab/service/OpeApplyServiceImpl.java b/src/main/java/com/nanometer/smartlab/service/OpeApplyServiceImpl.java
index 90690cd..4f09cda 100644
--- a/src/main/java/com/nanometer/smartlab/service/OpeApplyServiceImpl.java
+++ b/src/main/java/com/nanometer/smartlab/service/OpeApplyServiceImpl.java
@@ -707,5 +707,12 @@
}
}
+ /**
+ * 补贴条码更新订单的领用数量
+ */
+ @Override
+ public void btUpdateApplyAndOrder(List<OpeApply> opeList) {
+
+ }
}
diff --git a/src/main/java/com/nanometer/smartlab/service/OpeReagentStatusService.java b/src/main/java/com/nanometer/smartlab/service/OpeReagentStatusService.java
index a96607c..da2cb69 100644
--- a/src/main/java/com/nanometer/smartlab/service/OpeReagentStatusService.java
+++ b/src/main/java/com/nanometer/smartlab/service/OpeReagentStatusService.java
@@ -67,6 +67,8 @@
boolean updateReagentStatus(OpeReagentStatus opeReagentStatus);
boolean updateReagentStatus2(OpeReagentStatus opeReagentStatus);
+ boolean updateReagentStatus3(OpeReagentStatus opeReagentStatus);
+
int getLogOpeReagentStatusTotalCount(String reagentLogId, Integer status, String userLogId, String loginId);
List<OpeReagentStatus> getLogOpeReagentStatusList(String reagentLogId, Integer status, String userLogId,
@@ -98,6 +100,9 @@
List<String> checkReagentCode(String startReagentCode2, String endReagentCode2,Integer arrivalNum) throws BusinessException;
+ List<String> generateReagentCode(String startReagentCode2, String endReagentCode2);
void updateOpeReagentStatus(OpeReagentStatus opeReagentStatus);
+
+ int getReagentNumInWarehouse(String id, String articleNumber, String warehouseId);
}
diff --git a/src/main/java/com/nanometer/smartlab/service/OpeReagentStatusServiceImpl.java b/src/main/java/com/nanometer/smartlab/service/OpeReagentStatusServiceImpl.java
index 923413f..30b76c3 100644
--- a/src/main/java/com/nanometer/smartlab/service/OpeReagentStatusServiceImpl.java
+++ b/src/main/java/com/nanometer/smartlab/service/OpeReagentStatusServiceImpl.java
@@ -472,27 +472,28 @@
}
}
+ @Override
@Transactional(propagation = Propagation.REQUIRED)
- public boolean updateReagentStatus(OpeReagentStatus opeReagentStatus) {
+ public boolean updateReagentStatus3(OpeReagentStatus opeReagentStatus) {
try {
-
+ //1.判断->试剂状态是否为在仓库
if (isAllowWarehouseUse(opeReagentStatus)) {
- // 减少库存
- OpeWarehouseReserve opeWarehouseReserve = this.opeWarehouseReserveService.getOpeWarehouseReserve(
- opeReagentStatus.getReagent().getId(), opeReagentStatus.getArticleNumber());
- opeWarehouseReserve.setReserve(opeWarehouseReserve.getReserve() - 1);
- this.opeWarehouseReserveService.updateOpeWarehouseReserve(opeWarehouseReserve);
+ //1.1获得 试剂的库存选择批次
+ List<OpeWarehouseReserve> owrList = this.opeWarehouseReserveService
+ .getOpeWarehouseReserveList(opeReagentStatus.getReagent().getId(), opeReagentStatus.getArticleNumber(),opeReagentStatus.getHouseId());
+ //在同一个仓库有相同批次的试剂,根据时间早的,个数少的先扣除库存
+ owrList.get(0).setReserve(owrList.get(0).getReserve() - 1);
+ this.opeWarehouseReserveService.updateOpeWarehouseReserve(owrList.get(0));
}
-
+ //设置 试剂状态->领用待入库
opeReagentStatus.setStatus(ArrivalStatus.NOREGISTER);
-
-// opeReagentStatus.setHouseId(null);
-// opeReagentStatus.setContainerId(null);
int row = this.opeReagentStatusDao.updateOpeReagentStatusDao(opeReagentStatus);
if (row == 0) {
return false;
}
+
+
OpeUseFlow opeUseFlow = new OpeUseFlow();
opeUseFlow.setReagentCode(opeReagentStatus.getReagentCode());
@@ -511,6 +512,52 @@
this.opeUseFlowService.insertOpeUseFlow(opeUseFlow);
+ return true;
+ } catch (DuplicateKeyException ex) {
+ logger.warn(ex.getMessage(), ex);
+ throw new AlarmException(AlarmCode.DATA_DUPLICATE,
+ MessageUtil.getMessage(AlarmCode.DATA_DUPLICATE.getCode()));
+ } catch (DataIntegrityViolationException ex) {
+ logger.warn(ex.getMessage(), ex);
+ throw new AlarmException(AlarmCode.DATA_CONFICT, MessageUtil.getMessage(AlarmCode.DATA_CONFICT.getCode()));
+ } catch (DataAccessException ex) {
+ logger.error(ex.getMessage(), ex);
+ throw new BusinessException(ExceptionEnumCode.DB_ERR,
+ MessageUtil.getMessageByCode(ExceptionEnumCode.DB_ERR.getCode()), ex);
+ }
+ }
+
+ @Transactional(propagation = Propagation.REQUIRED)
+ public boolean updateReagentStatus(OpeReagentStatus opeReagentStatus) {
+ try {
+
+ if (isAllowWarehouseUse(opeReagentStatus)) {
+ // 减少库存
+ OpeWarehouseReserve opeWarehouseReserve = this.opeWarehouseReserveService.getOpeWarehouseReserve(
+ opeReagentStatus.getReagent().getId(), opeReagentStatus.getArticleNumber());
+ opeWarehouseReserve.setReserve(opeWarehouseReserve.getReserve() - 1);
+ this.opeWarehouseReserveService.updateOpeWarehouseReserve(opeWarehouseReserve);
+ }
+ opeReagentStatus.setStatus(ArrivalStatus.NOREGISTER);
+ int row = this.opeReagentStatusDao.updateOpeReagentStatusDao(opeReagentStatus);
+ if (row == 0) {
+ return false;
+ }
+ OpeUseFlow opeUseFlow = new OpeUseFlow();
+ opeUseFlow.setReagentCode(opeReagentStatus.getReagentCode());
+ opeUseFlow.setStatus(opeReagentStatus.getStatus());
+ opeUseFlow.setHouseId(opeReagentStatus.getHouseId());
+ opeUseFlow.setContainerId(opeReagentStatus.getContainerId());
+ opeUseFlow.setUserId(opeReagentStatus.getUserId());
+ opeUseFlow.setPlace(opeReagentStatus.getPlace());
+ opeUseFlow.setRemainder(opeReagentStatus.getRemainder());
+
+ Map<String, String> metaMap = new HashMap<>();
+ metaMap.put("groupId", "operate_status");
+ metaMap.put("metaKey", String.valueOf(OperateStatus.WAREHOUSEOUT.getKey()));
+ List<BaseMeta> baseMetaList = baseMetaDao.getBaseMetaList(metaMap);
+ opeUseFlow.setOperateState(baseMetaList.get(0).getId());
+ this.opeUseFlowService.insertOpeUseFlow(opeUseFlow);
return true;
} catch (DuplicateKeyException ex) {
logger.warn(ex.getMessage(), ex);
@@ -884,11 +931,12 @@
List<String> codeList= new ArrayList<>();
//1.做24位的字母判断否则就是纯数字
- if (startReagentCode2.matches(".*[A-F]+.*")) {
+ if (startReagentCode2.matches(".*\\D+.*")) {
//长度为24并且后5位随机码得是数字
if (startReagentCode2.length() == 24 &&
endReagentCode2.length() == 24 &&
- startReagentCode2.substring(startReagentCode2.length()-5).matches("/d{5}")) {
+ startReagentCode2.matches(".*([A-F]|\\d)+.*") &&
+ startReagentCode2.substring(startReagentCode2.length()-5).matches("\\d{5}")) {
//24位指定编码生成
Integer randomStart = Integer.valueOf(startReagentCode2.substring(startReagentCode2.length() - 5));
Integer randomEnd = Integer.valueOf(endReagentCode2.substring(endReagentCode2.length() - 5));
@@ -898,7 +946,7 @@
if (randomEnd - randomStart + 1 != arrivalNum||!regentPrefix2.equals(regentPrefix)) {
throw new BusinessException(ExceptionEnumCode.PARAM_EXIST,"试剂的开始结束条码有问题");
}
- for (int random = randomStart; random < randomEnd; random++) {
+ for (int random = randomStart; random <= randomEnd; random++) {
String random5 = String.format("%0" + 5 + "d", random);
String reagentCode = regentPrefix + random5;
OpeReagentStatus opeReagentStatus = this.getOpeReagentStatusByReagentCode(reagentCode);
@@ -940,10 +988,69 @@
return codeList;
}
+
+ @Override
+ public List<String> generateReagentCode(String startReagentCode2, String endReagentCode2) {
+ if (startReagentCode2 == null || startReagentCode2.length() < 1) {
+ throw new BusinessException(ExceptionEnumCode.REAGENT_CODE_INVALID,"试剂条码不合法");
+ }
+
+ if (endReagentCode2 == null || endReagentCode2.length() < 1) {
+ throw new BusinessException(ExceptionEnumCode.REAGENT_CODE_INVALID,"试剂条码不合法");
+ }
+
+
+
+ List<String> codeList= new ArrayList<>();
+ //1.做24位的字母判断否则就是纯数字
+ if (startReagentCode2.matches(".*\\D+.*")) {
+ //长度为24并且后5位随机码得是数字
+ if (startReagentCode2.length() == 24 &&
+ endReagentCode2.length() == 24 &&
+ startReagentCode2.matches(".*([A-F]|\\d)+.*") &&
+ startReagentCode2.substring(startReagentCode2.length()-5).matches("\\d{5}")) {
+ //24位指定编码生成
+ Integer randomStart = Integer.valueOf(startReagentCode2.substring(startReagentCode2.length() - 5));
+ Integer randomEnd = Integer.valueOf(endReagentCode2.substring(endReagentCode2.length() - 5));
+ String regentPrefix = startReagentCode2.substring(0, startReagentCode2.length() - 5);
+
+ for (int random = randomStart; random <= randomEnd; random++) {
+ String random5 = String.format("%0" + 5 + "d", random);
+ String reagentCode = regentPrefix + random5;
+ codeList.add(reagentCode);
+ }
+ return codeList;
+ }else{
+ throw new BusinessException(ExceptionEnumCode.REAGENT_CODE_INVALID,"试剂条码不合法");
+ }
+ }
+
+ //2.纯数字编码列表生成
+ BigInteger reagentCode= new BigInteger(startReagentCode2);
+ BigInteger endReagentCode = new BigInteger(endReagentCode2);
+
+ while (reagentCode.compareTo(endReagentCode) <= 0) {
+ String reagentCodeStr = String.format("%0" + startReagentCode2.length() + "d", reagentCode);
+ codeList.add(reagentCodeStr);
+ reagentCode = reagentCode.add(BigInteger.ONE);
+ }
+
+ return codeList;
+ }
+
@Override
public void updateOpeReagentStatus(OpeReagentStatus opeReagentStatus) {
opeReagentStatusDao.updateOpeReagentStatusDao(opeReagentStatus);
}
+ @Override
+ public int getReagentNumInWarehouse(String id, String articleNumber, String warehouseId) {
+ Map<String, Object> params = new HashMap<>();
+ params.put("reagentId", id);
+ params.put("articleNumber", articleNumber);
+ params.put("warehouseId", warehouseId);
+ return opeReagentStatusDao.countReagentByArticleAndWarehouse(params);
+ }
+
}
diff --git a/src/main/java/com/nanometer/smartlab/service/OpeUseFlowService.java b/src/main/java/com/nanometer/smartlab/service/OpeUseFlowService.java
index 1f93c1d..8c8242d 100644
--- a/src/main/java/com/nanometer/smartlab/service/OpeUseFlowService.java
+++ b/src/main/java/com/nanometer/smartlab/service/OpeUseFlowService.java
@@ -1,6 +1,9 @@
package com.nanometer.smartlab.service;
+import com.nanometer.smartlab.entity.OpeApplyReserve;
import com.nanometer.smartlab.entity.OpeUseFlow;
+import com.nanometer.smartlab.entity.OpeWarehouseReserve;
+import com.nanometer.smartlab.entity.SysReagent;
import java.text.ParseException;
import java.util.Date;
@@ -34,4 +37,14 @@
void updateTimeByCode(String code);
OpeUseFlow getOpeUseFlowByCode(String reagentCode);
+
+ void updateReceiptNumber(String code, String receiptNumber);
+
+ void updateReceiptNumberByCode(List<OpeApplyReserve> codeTmp,String receiptNumber);
+
+ Map<String, Integer> getRegentInfoFromReceiptNumber(String receiptNumber);
+
+ Map<String,String> getApplyUserByReagentCode(String reagentCode);
+
+ void updateReceiptNumberByCode2(List<OpeWarehouseReserve> codeTmp, String receiptNumber);
}
diff --git a/src/main/java/com/nanometer/smartlab/service/OpeUseFlowServiceImpl.java b/src/main/java/com/nanometer/smartlab/service/OpeUseFlowServiceImpl.java
index bcd04a3..2d7ab3e 100644
--- a/src/main/java/com/nanometer/smartlab/service/OpeUseFlowServiceImpl.java
+++ b/src/main/java/com/nanometer/smartlab/service/OpeUseFlowServiceImpl.java
@@ -1,21 +1,19 @@
package com.nanometer.smartlab.service;
import java.math.BigDecimal;
-import java.sql.Time;
import java.sql.Timestamp;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
import javax.annotation.Resource;
-import javax.ejb.EJB;
+import com.nanometer.smartlab.dao.BaseMetaDao;
import com.nanometer.smartlab.dao.SysLaboratoryContainerDao;
import com.nanometer.smartlab.dao.SysWarehouseContainerDao;
import com.nanometer.smartlab.entity.*;
+import com.nanometer.smartlab.entity.enumtype.OperateStatus;
import com.nanometer.smartlab.util.Constants;
-import com.nanometer.smartlab.util.Utils;
-import com.sun.org.apache.regexp.internal.RE;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang3.time.DateUtils;
import org.apache.log4j.Logger;
@@ -54,6 +52,14 @@
@Resource
private SysUserService sysUserService;
+ @Resource
+ private OpeReagentStatusService opeReagentStatusService;
+ @Resource
+ private OpeUseFlowService opeUseFlowService;
+ @Resource
+ private SysReagentService sysReagentService;
+ @Resource
+ private BaseMetaDao baseMetaDao;
@Transactional(propagation = Propagation.REQUIRED)
@@ -363,4 +369,89 @@
public OpeUseFlow getOpeUseFlowByCode(String reagentCode) {
return opeUseFlowDao.getOpeUseFlowByCode(reagentCode);
}
+
+ @Override
+ public void updateReceiptNumber(String code, String receiptNumber) {
+ opeUseFlowDao.updateReceiptNumber(code, receiptNumber);
+ }
+
+ @Transactional
+ public void updateReceiptNumberByCode(List<OpeApplyReserve> selectedTmpOrderList,String receiptNumber) {
+
+ for (OpeApplyReserve oar : selectedTmpOrderList) {
+ //根据id或者试剂的条码直接查找 状态表单 查询订单所有的流向
+ List<String> codeTmp = opeReagentStatusService
+ .generateReagentCode(oar.getStartReagentCode2(), oar.getEndReagentCode2());
+ assert codeTmp.size() > 0;
+
+ if (oar.getFlag() == 1) {
+ //库中领取 code存的是 试剂状态的id
+ for (String statusId : codeTmp) {
+ String code = opeReagentStatusService.getOpeReagentStatus(statusId).getReagentCode();
+ //此时状态为领用待入库
+ opeUseFlowService.updateReceiptNumber(code, receiptNumber);
+ }
+ }else{
+ for (String code : codeTmp) {
+ opeUseFlowService.updateReceiptNumber(code, receiptNumber);
+ }
+ }
+
+ }
+
+
+ }
+
+ @Override
+ public Map<String, Integer> getRegentInfoFromReceiptNumber(String receiptNumber) {
+ List<Map> maps = opeUseFlowDao.getRegentInfoFromReceiptNumber(receiptNumber);
+ if (maps.size() > 0) {
+ Map<String, Integer> printInfo = new HashMap<>();
+ for (Map map : maps) {
+ Integer count =Integer.parseInt(String.valueOf(map.get("count")));;
+ String reagentId = (String) map.get("reagentId");
+ SysReagent reagent = sysReagentService.getSysReagent(reagentId);
+ printInfo.put(reagent.getId(), count);
+ }
+ return printInfo;
+ }
+
+ return null;
+ }
+
+ @Override
+ public Map getApplyUserByReagentCode(String reagentCode) {
+
+ Map<String, String> metaMap2 = new HashMap<>();
+ metaMap2.put("groupId", "operate_status");
+ metaMap2.put("metaKey", String.valueOf(OperateStatus.WAREHOUSEOUT.getKey()));
+ List<BaseMeta> baseMetaList2 = baseMetaDao.getBaseMetaList(metaMap2);
+ String id = baseMetaList2.get(0).getId();
+ return opeUseFlowDao.getUserIdByReagentCode(reagentCode, id);
+ }
+
+ @Override
+ public void updateReceiptNumberByCode2(List<OpeWarehouseReserve> selectTmpList, String receiptNumber) {
+ for (OpeWarehouseReserve owr : selectTmpList) {
+ //根据id或者试剂的条码直接查找 状态表单 查询订单所有的流向
+ List<String> codeTmp = opeReagentStatusService
+ .generateReagentCode(owr.getStartReagentCode2(), owr.getEndReagentCode2());
+ assert codeTmp.size() > 0;
+
+ if (owr.getFlag() == 1) {
+ //库中领取 code存的是 试剂状态的id
+ for (String statusId : codeTmp) {
+ String code = opeReagentStatusService.getOpeReagentStatus(statusId).getReagentCode();
+ //此时状态为领用待入库
+ opeUseFlowService.updateReceiptNumber(code, receiptNumber);
+ }
+ }else{
+ for (String code : codeTmp) {
+ opeUseFlowService.updateReceiptNumber(code, receiptNumber);
+ }
+ }
+
+ }
+
+ }
}
diff --git a/src/main/java/com/nanometer/smartlab/service/OpeWarehouseReserveService.java b/src/main/java/com/nanometer/smartlab/service/OpeWarehouseReserveService.java
index d7f1d38..71b4738 100644
--- a/src/main/java/com/nanometer/smartlab/service/OpeWarehouseReserveService.java
+++ b/src/main/java/com/nanometer/smartlab/service/OpeWarehouseReserveService.java
@@ -20,17 +20,31 @@
int getOpeWarehouseReserveTotalCountByName(String reagentId, String supplierId,String productSn);
OpeWarehouseReserve getOpeWarehouseReserve(String reagentId, String articleNumber);
OpeWarehouseReserve getOpeWarehouseReserve2(String reagentId, String articleNumber,String warehouseId);
+
+ List<OpeWarehouseReserve> getOpeWarehouseReserveList(String reagentId, String articleNumber,String warehouseId);
OpeWarehouseReserve getOpeWarehouseReserveBy(String reagentId, String articleNumber);
OpeWarehouseReserve insertOpeWarehouseReserve(OpeWarehouseReserve opeWarehouseReserve);
boolean updateOpeWarehouseReserve(OpeWarehouseReserve opeWarehouseReserve);
void claim(List<OpeWarehouseReserve> selectedList, String userId,String projectNum);
- void claimForPerson(List<OpeApplyReserve> selectedListForPerson, String userId,String projectNum);
+ void claimForPerson(List<OpeApplyReserve> selectedListForPerson, String userId,String projectNum,String laboratoryId,String laboratoryContainerId);
void reagentDStore(List<OpeApply> reagentDStoreList, String loginUserId);
void reagentDStore2(List<OpeApply> reagentDStoreList, String loginUserId);
+
+ void reagentDStore3(List<OpeApply> reagentDStoreList, String loginUserId);
+
+ void reagentDStore4(List<OpeApply> reagentDStoreList, String loginUserId);
public List<OpeWarehouseReserve> selectByReId(String id);
public void updateByReId(String newReId,String oldReId);
void insertOpeWarehouseReserve2(OpeApplyReserve opeApplyReserve, OpeOrder oo);
+
+ List<OpeWarehouseReserve> selectWarehouseByReagentIdAndArticleNumber(String id,String articleNumber,boolean flag);
+
+ void btWarehouseReserveReduce(List<OpeApplyReserve> opeList);
+
+ List<OpeWarehouseReserve> selectWarehouseByRidAndArticleNumberAndWarehouse(String id, String articleNumber, String warehouseId);
+
+ void updateBtReserve(String id,Integer useNum);
}
diff --git a/src/main/java/com/nanometer/smartlab/service/OpeWarehouseReserveServiceImpl.java b/src/main/java/com/nanometer/smartlab/service/OpeWarehouseReserveServiceImpl.java
index 5a3b5b5..a0deb2c 100644
--- a/src/main/java/com/nanometer/smartlab/service/OpeWarehouseReserveServiceImpl.java
+++ b/src/main/java/com/nanometer/smartlab/service/OpeWarehouseReserveServiceImpl.java
@@ -7,6 +7,7 @@
import javax.annotation.Resource;
import com.nanometer.smartlab.dao.OpeApplyDao;
+import com.nanometer.smartlab.dao.OpeReagentStatusDao;
import com.nanometer.smartlab.entity.*;
import com.nanometer.smartlab.entity.enumtype.ValidFlag;
import com.nanometer.smartlab.exception.AlarmCode;
@@ -55,6 +56,10 @@
@Resource(name="opeApplyDao")
private OpeApplyDao opeApplyDao;
+ @Resource
+ private OpeReagentStatusDao opeReagentStatusDao;
+ @Resource
+ private OpeLaboratoryReserveService opeLaboratoryReserveService;
@Transactional(propagation = Propagation.REQUIRED)
public List<OpeWarehouseReserve> getOpeWarehouseReserveList(String reagentId, String supplierId, Integer first,
@@ -165,6 +170,17 @@
MessageUtil.getMessageByCode(ExceptionEnumCode.DB_ERR.getCode()), e);
}
}
+
+ @Override
+ public List<OpeWarehouseReserve> getOpeWarehouseReserveList(String reagentId, String articleNumber,String warehouseId) {
+ Map<String, String> params = new HashMap<>();
+ params.put("reagentId", reagentId);
+ params.put("warehouseId", warehouseId);
+ params.put("articleNumber", articleNumber);
+
+ return this.opeWarehouseReserveDao.getOpeWarehouseReserveList2(params);
+ }
+
@Transactional(propagation = Propagation.REQUIRED)
public OpeWarehouseReserve insertOpeWarehouseReserve(OpeWarehouseReserve opeWarehouseReserve) {
try {
@@ -208,7 +224,7 @@
}
@Transactional(propagation = Propagation.REQUIRED)
- public void claimForPerson(List<OpeApplyReserve> selectedListForPerson,String userId,String projectNum){
+ public void claimForPerson(List<OpeApplyReserve> selectedListForPerson,String userId,String projectNum,String laboratoryId,String laboratoryContainerId){
try{
for(OpeApplyReserve app:selectedListForPerson){
List<String> reagentCodes = app.getReagentCode();
@@ -219,9 +235,23 @@
opeReagentStatus.setUserId(userId);
opeReagentStatus.setProjectNum(projectNum);
//boolean flag = this.opeReagentStatusService.updateReagentStatus(opeReagentStatus);
- this.opeReagentStatusService.updateReagentStatus(opeReagentStatus);
+ this.opeReagentStatusService.updateReagentStatus3(opeReagentStatus);
ss.add(opeReagentStatus);
+ //更新试剂状态和
+ 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);
/*HashSet<String> set=new HashSet<>();//存放批号
for(int i=0;i<ss.size();i++){
set.add(ss.get(i).getArticleNumber());
@@ -420,6 +450,167 @@
}
}
+ public void reagentDStore4(List<OpeApply> reagentDStoreList, String loginUserId){
+ if (reagentDStoreList == null) {
+ return;
+ }
+ OpeReagentStatus opeReagentStatus = null;
+ for (OpeApply opeApply : reagentDStoreList) {
+ List<String> codeList = opeApply.getReagentCodeList();
+ for (String reagentCode:codeList) {
+ if (this.opeReagentStatusService.isOpeReagentStatusExist(reagentCode)) {//条码存在
+ //throw new BusinessException(ExceptionEnumCode.REAGENT_CODE_EXIST, "入库试剂:" + opeApply.getReagent().getName() + "的试剂条形码[" + reagentCode + "]已存在。");
+ // 试剂最新状态update
+ opeReagentStatus=this.opeReagentStatusService.getOpeReagentStatusByReagentCode(reagentCode);
+ //opeReagentStatus = new OpeReagentStatus();
+ //opeReagentStatus.setId(id);
+ //opeReagentStatus.setReagentId(opeApply.getReagent().getId());
+ opeReagentStatus.setArticleNumber(opeApply.getArticleNumber());
+ opeReagentStatus.setReagentCode(reagentCode);
+ opeReagentStatus.setStatus(ArrivalStatus.NOREGISTER);
+ opeReagentStatus.setHouseId(opeApply.getHouseId());
+ opeReagentStatus.setContainerId(opeApply.getContainerId());
+ opeReagentStatus.setUserId(loginUserId);
+ //opeReagentStatus.setPlace(opeApply.getPlaceId());
+ //opeReagentStatus.setRemainder(opeApply.getReagent().getMainMetering()!=null?(new BigDecimal(opeApply.getReagent().getMainMetering())):new BigDecimal(0));
+ //opeReagentStatus.setStoreType(StoreType.DIRECTSTORE);
+ this.opeReagentStatusService.updateReagentStatus2(opeReagentStatus);
+
+ // 试剂使用情况领用insert
+ /*OpeUseFlow ouf=new OpeUseFlow();
+ ouf.setReagentCode(opeReagentStatus.getReagentCode());
+ ouf.setStatus(opeReagentStatus.getStatus());
+ ouf.setHouseId(opeReagentStatus.getHouseId());
+ ouf.setContainerId(opeReagentStatus.getContainerId());
+ ouf.setUserId(opeReagentStatus.getUserId());
+ ouf.setPlace(opeReagentStatus.getPlace());
+ ouf.setRemainder(opeApply.getReagent().getMainMetering()!=null?(new BigDecimal(opeApply.getReagent().getMainMetering())):new BigDecimal(0));
+ ouf.setStoreType(StoreType.DIRECTSTORE);
+
+ Map<String, String> metaMap2 = new HashMap<>();
+ metaMap2.put("groupId", "operate_status");
+ metaMap2.put("metaKey", String.valueOf(OperateStatus.WAREHOUSEOUT.getKey()));
+ List<BaseMeta> baseMetaList2 = baseMetaDao.getBaseMetaList(metaMap2);
+ ouf.setOperateState(baseMetaList2.get(0).getId());
+ this.opeUseFlowService.insertOpeUseFlow(ouf);*/
+ }else{//条码不存在
+ // 试剂最新状态insert
+ opeReagentStatus = new OpeReagentStatus();
+ opeReagentStatus.setReagentId(opeApply.getReagent().getId());
+ opeReagentStatus.setArticleNumber(opeApply.getArticleNumber());
+ opeReagentStatus.setReagentCode(reagentCode);
+ opeReagentStatus.setStatus(ArrivalStatus.NOREGISTER);
+ opeReagentStatus.setHouseId(opeApply.getHouseId());
+ opeReagentStatus.setContainerId(opeApply.getContainerId());
+ opeReagentStatus.setUserId(loginUserId);
+ //opeReagentStatus.setPlace(opeApply.getPlaceId());
+ //opeReagentStatus.setRemainder(opeApply.getReagent().getMainMetering()!=null?(new BigDecimal(opeApply.getReagent().getMainMetering())):new BigDecimal(0));
+ opeReagentStatus.setStoreType(StoreType.DIRECTSTORE);
+ this.opeReagentStatusService.insertOpeReagentStatus(opeReagentStatus);
+
+ // 试剂使用情况入库insert
+ OpeUseFlow opeUseFlow = new OpeUseFlow();
+ opeUseFlow.setReagentCode(opeReagentStatus.getReagentCode());
+ opeUseFlow.setStatus(opeReagentStatus.getStatus());
+ opeUseFlow.setHouseId(opeReagentStatus.getHouseId());
+ opeUseFlow.setContainerId(opeReagentStatus.getContainerId());
+ opeUseFlow.setUserId(opeReagentStatus.getUserId());
+ opeUseFlow.setPlace(opeReagentStatus.getPlace());
+ opeUseFlow.setRemainder(opeApply.getReagent().getMainMetering()!=null?opeApply.getReagent().getMainMetering():new BigDecimal(0));
+ opeUseFlow.setStoreType(StoreType.DIRECTSTORE);
+
+ Map<String, String> metaMap = new HashMap<>();
+ metaMap.put("groupId", "operate_status");
+ metaMap.put("metaKey", String.valueOf(OperateStatus.WAREHOUSEIN.getKey()));
+ List<BaseMeta> baseMetaList = baseMetaDao.getBaseMetaList(metaMap);
+ opeUseFlow.setOperateState(baseMetaList.get(0).getId());
+ this.opeUseFlowService.insertOpeUseFlow(opeUseFlow);
+ // 试剂使用情况领用insert
+ OpeUseFlow ouf=new OpeUseFlow();
+ ouf.setReagentCode(opeReagentStatus.getReagentCode());
+ ouf.setStatus(opeReagentStatus.getStatus());
+ ouf.setHouseId(opeReagentStatus.getHouseId());
+ ouf.setContainerId(opeReagentStatus.getContainerId());
+ ouf.setUserId(opeReagentStatus.getUserId());
+ ouf.setPlace(opeReagentStatus.getPlace());
+ ouf.setRemainder(opeApply.getReagent().getMainMetering()!=null?opeApply.getReagent().getMainMetering():new BigDecimal(0));
+ ouf.setStoreType(StoreType.DIRECTSTORE);
+
+ Map<String, String> metaMap2 = new HashMap<>();
+ metaMap2.put("groupId", "operate_status");
+ metaMap2.put("metaKey", String.valueOf(OperateStatus.WAREHOUSEOUT.getKey()));
+ List<BaseMeta> baseMetaList2 = baseMetaDao.getBaseMetaList(metaMap2);
+ ouf.setOperateState(baseMetaList2.get(0).getId());
+ this.opeUseFlowService.insertOpeUseFlow(ouf);
+ }
+ }
+
+ }
+ }
+ public void reagentDStore3(List<OpeApply> reagentDStoreList, String loginUserId){
+ if (reagentDStoreList == null) {
+ return;
+ }
+ for (OpeApply opeApply : reagentDStoreList) {
+
+ for (String reagentCode:opeApply.getReagentCodeList()) {
+ if (this.opeReagentStatusService.isOpeReagentStatusExist(reagentCode)) {
+ //条码存在
+ throw new BusinessException(ExceptionEnumCode.REAGENT_CODE_EXIST, "入库试剂:" + opeApply.getReagent().getName() + "的试剂条形码[" + reagentCode + "]已存在。");
+
+ }else{
+ //条码不存在
+ // 试剂状态insert
+ OpeReagentStatus opeReagentStatus = new OpeReagentStatus();
+ opeReagentStatus.setReagentId(opeApply.getReagent().getId());
+ opeReagentStatus.setArticleNumber(opeApply.getArticleNumber());
+ opeReagentStatus.setReagentCode(reagentCode);
+ opeReagentStatus.setStatus(ArrivalStatus.NOREGISTER);
+ opeReagentStatus.setHouseId(opeApply.getHouseId());
+ opeReagentStatus.setContainerId(opeApply.getContainerId());
+ opeReagentStatus.setUserId(loginUserId);
+ opeReagentStatus.setStoreType(StoreType.DIRECTSTORE);
+ this.opeReagentStatusService.insertOpeReagentStatus(opeReagentStatus);
+
+ // 试剂使用情况入库insert
+ OpeUseFlow opeUseFlow = new OpeUseFlow();
+ opeUseFlow.setReagentCode(opeReagentStatus.getReagentCode());
+ opeUseFlow.setStatus(opeReagentStatus.getStatus());
+ opeUseFlow.setHouseId(opeReagentStatus.getHouseId());
+ opeUseFlow.setContainerId(opeReagentStatus.getContainerId());
+ opeUseFlow.setUserId(opeReagentStatus.getUserId());
+ opeUseFlow.setPlace(opeReagentStatus.getPlace());
+ opeUseFlow.setRemainder(opeApply.getReagent().getMainMetering()!=null?opeApply.getReagent().getMainMetering():new BigDecimal(0));
+ opeUseFlow.setStoreType(StoreType.DIRECTSTORE);
+
+ Map<String, String> metaMap = new HashMap<>();
+ metaMap.put("groupId", "operate_status");
+ metaMap.put("metaKey", String.valueOf(OperateStatus.WAREHOUSEIN.getKey()));
+ List<BaseMeta> baseMetaList = baseMetaDao.getBaseMetaList(metaMap);
+ opeUseFlow.setOperateState(baseMetaList.get(0).getId());
+ this.opeUseFlowService.insertOpeUseFlow(opeUseFlow);
+ // 试剂使用情况领用insert
+ OpeUseFlow ouf=new OpeUseFlow();
+ ouf.setReagentCode(opeReagentStatus.getReagentCode());
+ ouf.setStatus(opeReagentStatus.getStatus());
+ ouf.setHouseId(opeReagentStatus.getHouseId());
+ ouf.setContainerId(opeReagentStatus.getContainerId());
+ ouf.setUserId(opeReagentStatus.getUserId());
+ ouf.setPlace(opeReagentStatus.getPlace());
+ ouf.setRemainder(opeApply.getReagent().getMainMetering()!=null?opeApply.getReagent().getMainMetering():new BigDecimal(0));
+ ouf.setStoreType(StoreType.DIRECTSTORE);
+
+ Map<String, String> metaMap2 = new HashMap<>();
+ metaMap2.put("groupId", "operate_status");
+ metaMap2.put("metaKey", String.valueOf(OperateStatus.WAREHOUSEOUT.getKey()));
+ List<BaseMeta> baseMetaList2 = baseMetaDao.getBaseMetaList(metaMap2);
+ ouf.setOperateState(baseMetaList2.get(0).getId());
+ this.opeUseFlowService.insertOpeUseFlow(ouf);
+ }
+ }
+
+ }
+ }
@Override
public List<OpeWarehouseReserve> selectByReId(String id) {
return this.opeWarehouseReserveDao.selectByReId(id);
@@ -437,25 +628,123 @@
@Transactional
public void insertOpeWarehouseReserve2(OpeApplyReserve opeApplyReserve, OpeOrder oo) {
- OpeWarehouseReserve ope = new OpeWarehouseReserve();
- //库存为到货数量
- ope.setReserve(opeApplyReserve.getArrivalNum());
- //仓库
- ope.setWarehouseId(opeApplyReserve.getHouseId());
- //试剂
- ope.setReagentId(opeApplyReserve.getReagent().getId());
- //订单编号
- ope.setOrderCode(oo.getOrderCode());
- // 申购编号
- ope.setApplyCode(opeApplyReserve.getApplyCode());
- //批号
- ope.setArticleNumber(opeApplyReserve.getArticleNumber());
- ope.setId(IDUtils.uuid());
- opeWarehouseReserveDao.insertOpeWarehouseReserve2(ope);
+ OpeWarehouseReserve ope = this.opeWarehouseReserveService
+ .getOpeWarehouseReserve2(opeApplyReserve.getReagent().getId(), opeApplyReserve.getArticleNumber(),opeApplyReserve.getHouseId());
+ if (ope == null) {
+
+ ope = new OpeWarehouseReserve();
+ //库存为到货数量
+ ope.setReserve(opeApplyReserve.getArrivalNum());
+ //仓库
+ ope.setWarehouseId(opeApplyReserve.getHouseId());
+ //试剂
+ ope.setReagentId(opeApplyReserve.getReagent().getId());
+ //订单编号
+ ope.setOrderCode(oo.getOrderCode());
+ // 申购编号
+ ope.setApplyCode(opeApplyReserve.getApplyCode());
+ //批号
+ ope.setArticleNumber(opeApplyReserve.getArticleNumber());
+ ope.setId(IDUtils.uuid());
+ opeWarehouseReserveDao.insertOpeWarehouseReserve2(ope);
+ }else {
+ ope.setReserve(ope.getReserve() + opeApplyReserve.getArrivalNum());
+ this.opeWarehouseReserveService.updateOpeWarehouseReserve(ope);
+ }
+
+
+
}
- @Transactional(propagation = Propagation.REQUIRED)
+ @Override
+ public List<OpeWarehouseReserve> selectWarehouseByReagentIdAndArticleNumber(String id,String articleNumber,boolean flag) {
+ Map<String, String> params = new HashMap<>();
+ params.put("reagentId", id);
+ params.put("articleNumber", articleNumber);
+ List<OpeWarehouseReserve> reserveList = opeWarehouseReserveDao.selectWarehouseByReagentIdAndArticleNumber(params);
+ //减去 每个仓库中的试剂有条码的个数
+ //count(reagent_id,warehouseId,1)
+ if (reserveList.size() > 0) {
+ for (OpeWarehouseReserve owr : reserveList) {
+ //根据批次号 仓库名和试剂 得到在仓库有条码的试剂总数
+ if (flag) {
+ int numOfReagentHasCode = opeReagentStatusService.getReagentNumInWarehouse(id, articleNumber, owr.getWarehouseId());
+ //仓库显示 可以补贴条码的试剂总数
+ owr.setReserve(owr.getReserve()-numOfReagentHasCode);
+ }
+ }
+ }
+ return reserveList;
+ }
+ /**
+ * 补贴扣库存去除有条码的数据
+ */
+ public List<OpeWarehouseReserve> selectWarehouseByRidAndArticleNumberAndWarehouse(String id,String articleNumber,String warehouseId) {
+ Map<String, String> params = new HashMap<>();
+ params.put("reagentId", id);
+ params.put("articleNumber", articleNumber);
+ params.put("warehouseId", warehouseId);
+ List<OpeWarehouseReserve> reserveList = opeWarehouseReserveDao.selectWarehouseByRidAndArtiNumberAndWid(params);
+ //减去 每个仓库中的试剂有条码的个数
+ //count(reagent_id,warehouseId,1)
+ if (reserveList.size() > 0) {
+ for (OpeWarehouseReserve owr : reserveList) {
+ //根据批次号 仓库名和试剂 得到在仓库有条码的试剂总数
+ int numOfReagentHasCode = opeReagentStatusService.getReagentNumInWarehouse(id, owr.getArticleNumber(), owr.getWarehouseId());
+ //仓库显示 可以补贴条码的试剂总数
+ owr.setReserve(owr.getReserve()-numOfReagentHasCode);
+ }
+ }
+ return reserveList;
+ }
+
+ @Override
+ public void updateBtReserve(String id, Integer useNum) {
+ opeWarehouseReserveDao.updateBtReserve(id, useNum);
+ }
+
+ @Override
+ public void btWarehouseReserveReduce(List<OpeApplyReserve> opeList) {
+ if (opeList.size() < 1) {
+ return;
+ }
+ for (OpeApplyReserve oar : opeList) {
+ String reagentId = oar.getReagent().getId();
+
+ //开始库存扣除
+ List<OpeWarehouseReserve> cacheUpdateList = oar.getCacheUpdateList();
+ for (OpeWarehouseReserve owr : cacheUpdateList) {
+ //1.根据仓库id和试剂id搜索不同批号的试剂库存
+ List<OpeWarehouseReserve> reserveList = opeWarehouseReserveService
+ .selectWarehouseByRidAndArticleNumberAndWarehouse(reagentId, owr.getArticleNumber(), owr.getWarehouseId());
+ Integer numLeave = owr.getUseNum();
+ for (OpeWarehouseReserve warehouseReserve:reserveList){
+ //库存大于剩余领用-》直接扣完
+ int usedNum = 0;
+ if (warehouseReserve.getReserve() > numLeave) {
+ // warehouseReserve.setReserve(warehouseReserve.getReserve() - numLeave);
+ usedNum = numLeave;
+ numLeave = 0;
+ } else {
+ numLeave = numLeave - warehouseReserve.getReserve();
+ // warehouseReserve.setReserve(0);
+ usedNum = warehouseReserve.getReserve();
+ }
+ //更新库存
+ opeWarehouseReserveService.updateBtReserve(warehouseReserve.getId(),usedNum);
+ if (numLeave < 1) {
+ break;
+ }
+ }
+
+
+
+ }
+ }
+ }
+
+ @Transactional(propagation = Propagation.REQUIRED)
public void reagentDStore(List<OpeApply> reagentDStoreList, String loginUserId) {
if (reagentDStoreList == null) {
diff --git a/src/main/webapp/WEB-INF/config-mybatis.xml b/src/main/webapp/WEB-INF/config-mybatis.xml
index 861a53f..365d9cd 100644
--- a/src/main/webapp/WEB-INF/config-mybatis.xml
+++ b/src/main/webapp/WEB-INF/config-mybatis.xml
@@ -15,7 +15,7 @@
<setting name="useGeneratedKeys" value="false"/>
<setting name="defaultExecutorType" value="SIMPLE"/>
<setting name="defaultStatementTimeout" value="25000"/>
- <setting name="logImpl" value="LOG4J" />
+ <setting name="logImpl" value="STDOUT_LOGGING" />
</settings>
<typeHandlers>
diff --git a/src/main/webapp/order_input_warehouse.xhtml b/src/main/webapp/order_input_warehouse.xhtml
index 060e5a4..ee15bf2 100644
--- a/src/main/webapp/order_input_warehouse.xhtml
+++ b/src/main/webapp/order_input_warehouse.xhtml
@@ -46,7 +46,7 @@
actionListener="#{warehouseStockMngController.onCancelBtnClick}"
styleClass="cancel-btn"/>
- <p:commandButton value="确定"
+ <p:commandButton value="保存"
process="@form"
update=":centerRootPanel"
actionListener="#{warehouseStockMngController.onSaveInputWarehouseClick}"
diff --git a/src/main/webapp/order_mng_ruku.xhtml b/src/main/webapp/order_mng_ruku.xhtml
index fe90a89..fad8cbd 100644
--- a/src/main/webapp/order_mng_ruku.xhtml
+++ b/src/main/webapp/order_mng_ruku.xhtml
@@ -118,7 +118,7 @@
<h:outputText value="#{row.articleNumber}" />
</f:facet>
<f:facet name="input">
- <p:inputText value="#{row.articleNumber}" maxlength="32" style="width: 100%"/>
+ <p:inputText value="#{row.articleNumber}" maxlength="32" style="width: 100%" required="true" requiredMessage="请输入批号"/>
</f:facet>
</p:cellEditor>
</p:column>
diff --git a/src/main/webapp/project_mng.xhtml b/src/main/webapp/project_mng.xhtml
index d859bb3..238c70e 100644
--- a/src/main/webapp/project_mng.xhtml
+++ b/src/main/webapp/project_mng.xhtml
@@ -96,7 +96,7 @@
<p:outputLabel value="课题编号"></p:outputLabel>
</p:column>
<p:column>
- <p:inputText value="#{projectMngController.sysProject.projectId}"></p:inputText>
+ <p:inputText value="#{projectMngController.sysProject.projectId}" required="true" requiredMessage="请填写课题编号"></p:inputText>
</p:column>
</p:row>
<p:row>
@@ -104,7 +104,7 @@
<p:outputLabel value="课题名称"></p:outputLabel>
</p:column>
<p:column>
- <p:inputText value="#{projectMngController.sysProject.projectName}"></p:inputText>
+ <p:inputText value="#{projectMngController.sysProject.projectName}" required="true" requiredMessage="请填写课题名称"></p:inputText>
</p:column>
</p:row>
<p:row>
@@ -120,7 +120,7 @@
itemValue="#{item.id}" forceSelection="true">
<p:ajax event="itemSelect" process="@this" update="@this" />
<p:column>
- <h:outputText value="#{item.name}" />
+ <h:outputText value="#{item.name}" required="true" requiredMessage="请填写课题负责人"/>
</p:column>
</p:autoComplete>
</p:column>
diff --git a/src/main/webapp/reagent_mng.xhtml b/src/main/webapp/reagent_mng.xhtml
index 93964e3..5c0222d 100644
--- a/src/main/webapp/reagent_mng.xhtml
+++ b/src/main/webapp/reagent_mng.xhtml
@@ -39,7 +39,7 @@
</p:panelGrid>
</p:panel>
<p:panel styleClass="center-body">
- <p:panelGrid columns="5" styleClass="btn">
+ <p:panelGrid columns="7" styleClass="btn">
<p:commandButton value="新建" styleClass="new-btn"
process="@this"
actionListener="#{reagentMngController.onNewBtnClick}"
@@ -57,8 +57,10 @@
</p:commandButton>
<p:commandButton value="试剂导入" styleClass="import-btn" onclick="importReagent()"
></p:commandButton>
+ <a href="resources/template/试剂导入模板.xlsx" style="display: inline-block;"><img src="resources/images/xlsx.png" width="30px;" alt=""/></a>
<p:commandButton value="耗材导入" styleClass="import-btn" onclick="importReagent2()"
></p:commandButton>
+ <a href="resources/template/耗材导入模板.xlsx" style="display: inline-block;"><img src="resources/images/xlsx.png" width="30px;" alt=""/></a>
<script>
function importReagent(){
$("#reagentMngForm\\:importReagentBtn_input").click();
diff --git a/src/main/webapp/reagent_user_flow_info.xhtml b/src/main/webapp/reagent_user_flow_info.xhtml
index 91e413b..02ca1f0 100644
--- a/src/main/webapp/reagent_user_flow_info.xhtml
+++ b/src/main/webapp/reagent_user_flow_info.xhtml
@@ -33,7 +33,118 @@
</p:panelGrid>
</p:panel>
</p:panel>
+
<p:panel styleClass="center-body">
+ <p:dialog id="apply-ui" header="领用单" widgetVar="printDialog" appendTo="@(body)" modal="true" resizable="false"
+ width="1000">
+ <div id="printTarget">
+ <div style=" margin: 10mm 10mm 0mm 2mm;">
+ <h:form id="printDialog">
+
+ <p:outputPanel style="text-align: center;font-size: 14px;font-weight: 700;">#{opeUseFlowInfoController.printTable['head']}</p:outputPanel>
+ <p:outputPanel style="text-align: center;font-size: 15px;margin: 20px;font-weight: 700;">#{opeUseFlowInfoController.printTable['title']}</p:outputPanel>
+ <div>
+ <div style="display: flex;flex-direction: row;justify-content: flex-end;">
+ <div style="width: 100px;">单据编号:</div>
+ <div style="width: 300px;">#{opeUseFlowInfoController.printTable['receiptNumber']}</div>
+ </div>
+ </div>
+
+ <div style="margin: 10px 0;">
+ <div style="display: inline-flex;">
+ <div style="width: 100px;margin-left: 10px;">部门:</div>
+ <div style="width: 300px;">#{opeUseFlowInfoController.printTable['department']}</div>
+ </div>
+ <div style="display: inline-flex;float: right;">
+ <div style="width: 100px;">日期:</div>
+ <div style="width: 300px;padding-top: 1px;">
+ <div>#{opeUseFlowInfoController.printTable['date']}</div>
+ </div>
+ </div>
+ </div>
+
+ <div style="margin-bottom: 20px;">
+ <div style="display: inline-flex;">
+ <div style="width: 100px;margin-left: 10px;">申购人:</div>
+ <div style="width: 300px;">#{opeUseFlowInfoController.printTable['applyPerson']}</div>
+ </div>
+ <div style="display: inline-flex;float: right;">
+ <div style="width: 100px;">联系方式:</div>
+ <div style="width: 300px;">
+ <div >#{opeUseFlowInfoController.printTable['phone']}</div>
+ </div>
+ </div>
+ </div>
+
+
+
+
+ <p:dataTable id="printTB" styleClass="apply-list"
+ value="#{opeUseFlowInfoController.printTable['applyList']}" var="row" >
+ <p:column headerText="产品编号" width="150px;" style="text-align: center;">
+ <h:outputText value="#{row.productCode}" />
+ </p:column>
+ <p:column headerText="产品名称" width="150px;" style="text-align: center;">
+ <h:outputText value="#{row.productName}" />
+ </p:column>
+
+ <p:column headerText="管制品" width="100px;" style="text-align: center;">
+ <h:outputText value="#{row.controlProducts}" />
+ </p:column>
+
+ <p:column headerText="规格型号" width="160px;" style="text-align: center;">
+ <h:outputText value="#{row.reagentFormat}" />
+ </p:column>
+
+ <p:column headerText="包装" width="90px;" style="text-align: center;">
+ <h:outputText value="#{row.mainMetering==null?'':row.mainMetering}" />
+ </p:column>
+
+ <p:column headerText="数量" width="90px;" style="text-align: center;">
+ <h:outputText value="#{row.num}" />
+ </p:column>
+
+ <p:column headerText="备注" width="170px;" style="text-align: center;">
+ <h:outputText value="#{row.memo}" />
+ </p:column>
+ </p:dataTable>
+
+ <div style="margin-top: 20px;">
+ <div style="display: flex;flex-direction: row;justify-content: flex-end;">
+ <div style="width: 100px">签收人:</div>
+ <div style="width: 300px"></div>
+ </div>
+ </div>
+
+ <div style="margin: 10px 0">
+ <div style="display: flex;flex-direction: row;justify-content: flex-end;">
+ <div style="width: 100px">日期:</div>
+ <div style="width: 300px"></div>
+ </div>
+ </div>
+
+ <p:panel styleClass="btn no-print">
+ <div class="div-btn cancel" id="cancel">关闭</div>
+ <div class="div-btn print" id="print">打印</div>
+ </p:panel>
+ </h:form>
+ </div>
+ </div>
+ <script type="text/javascript" src="resources/js/print.js"/>
+ <script type="text/javascript">
+ $(function () {
+ $("#print").on("click", function () {
+ jQuery.print('#printTarget');
+ });
+ $("#cancel").on("click", function () {
+ $("#reagentUseFlowInfoForm\\:apply-ui a").click();
+ })
+ })
+
+
+ </script>
+ </p:dialog>
+
<p:dataTable id="reagentUseFlowInfoDataTable" styleClass="data-table"
paginator="true" paginatorAlwaysVisible="false" paginatorPosition="bottom"
lazy="true" value="#{opeUseFlowInfoController.dataModel}" var="row"
@@ -80,6 +191,22 @@
<h:outputText value="#{row.warehouseName}" rendered="#{!empty row.warehouseName}"/>
</p:column>
+<!-- <p:column headerText="领用单号">-->
+<!-- <h:outputText value="#{row.receiptNumber}"/>-->
+<!-- </p:column>-->
+
+
+<!-- <p:column headerText="操作" style="text-align: center">-->
+<!-- <p:commandButton value="生成领用单"-->
+<!-- actionListener="#{opeUseFlowInfoController.generateRecipients(row)}"-->
+<!-- rendered="#{row.receiptNumber != null}"-->
+<!-- update="reagentUseFlowInfoForm:apply-ui"-->
+<!-- oncomplete="PF('printDialog').show()"-->
+<!-- async="true"-->
+<!-- >-->
+<!-- </p:commandButton>-->
+<!-- </p:column>-->
+
</p:dataTable>
</p:panel>
</h:form>
diff --git a/src/main/webapp/resources/css/default.css b/src/main/webapp/resources/css/default.css
index b35cb19..04dcbe4 100644
--- a/src/main/webapp/resources/css/default.css
+++ b/src/main/webapp/resources/css/default.css
@@ -1107,4 +1107,10 @@
#tabView\:putInStorageTmpOrder th{
background: #1c427b !important;
-}
\ No newline at end of file
+}
+
+.reagentCode th{
+ background: #64a9cb !important;
+ border-radius: 0 !important;
+ color: #ffffff !important;
+}
diff --git "a/src/main/webapp/resources/template/\350\200\227\346\235\220\345\257\274\345\205\245\346\250\241\346\235\277.xlsx" "b/src/main/webapp/resources/template/\350\200\227\346\235\220\345\257\274\345\205\245\346\250\241\346\235\277.xlsx"
new file mode 100644
index 0000000..65be38e
--- /dev/null
+++ "b/src/main/webapp/resources/template/\350\200\227\346\235\220\345\257\274\345\205\245\346\250\241\346\235\277.xlsx"
Binary files differ
diff --git "a/src/main/webapp/resources/template/\350\257\225\345\211\202\345\257\274\345\205\245\346\250\241\346\235\277.xlsx" "b/src/main/webapp/resources/template/\350\257\225\345\211\202\345\257\274\345\205\245\346\250\241\346\235\277.xlsx"
new file mode 100644
index 0000000..b0aa021
--- /dev/null
+++ "b/src/main/webapp/resources/template/\350\257\225\345\211\202\345\257\274\345\205\245\346\250\241\346\235\277.xlsx"
Binary files differ
diff --git a/src/main/webapp/warehouse_reagent_use.xhtml b/src/main/webapp/warehouse_reagent_use.xhtml
index 744234c..504a5eb 100644
--- a/src/main/webapp/warehouse_reagent_use.xhtml
+++ b/src/main/webapp/warehouse_reagent_use.xhtml
@@ -213,7 +213,10 @@
<div>
<div style="display: flex;flex-direction: row;justify-content: flex-end;">
<div style="width: 100px;">单据编号:</div>
- <div style="width: 300px;"><input style="border: 0;" value=""/></div>
+ <div style="width: 300px;">
+ <p:inputText value="#{warehouseStockMngController.receiptNumber}" valueChangeListener="#{warehouseStockMngController.receiptNumberChange}">
+ <p:ajax event="valueChange" listener="#{warehouseStockMngController.receiptNumberChange()}" />
+ </p:inputText></div>
</div>
</div>
@@ -288,8 +291,32 @@
</div>
<p:panel styleClass="btn no-print">
- <div class="div-btn cancel" id="cancel">关闭</div>
- <div class="div-btn print" id="print">打印</div>
+ <p:commandButton value="关闭"
+ process="@this"
+ styleClass="yes-btn"
+ actionListener="#{warehouseStockMngController.onCancelBtnClick}"
+ style="position: relative;left: 20px;"
+ update=":centerRootPanel"
+ oncomplete="PF('printDialog').hide()">
+ </p:commandButton>
+ <div style="display: none" id="indirectPrint"></div>
+ <p:commandButton value="打印"
+ styleClass="yes-btn"
+ actionListener="#{warehouseStockMngController.associatedFlowReceiptNumber2()}"
+ style="position: relative;left: 20px;"
+ >
+ </p:commandButton>
+
+ <script type="text/javascript" src="resources/js/print.js"/>
+ <script type="text/javascript">
+ $(function () {
+ $("#indirectPrint").on("click", function () {
+ jQuery.print('#printTarget')
+ })
+ })
+
+
+ </script>
</p:panel>
</h:form>
</div>
diff --git a/src/main/webapp/warehouse_reagent_use_person.xhtml b/src/main/webapp/warehouse_reagent_use_person.xhtml
index a3073a5..9214833 100644
--- a/src/main/webapp/warehouse_reagent_use_person.xhtml
+++ b/src/main/webapp/warehouse_reagent_use_person.xhtml
@@ -107,41 +107,222 @@
<p:column headerText="条形码">
<p:commandButton value="操作" styleClass="edit-btn" process="@form"
actionListener="#{warehouseStockMngController.onReagentCodeBtnClickForPerson(row)}"
- update=":reagentCodeDialogForPerson">
+ update=":reagentCodeDialogForPerson,@(.startReagentCode),@(.endReagentCode)">
</p:commandButton>
</p:column>
</p:dataTable>
</p:panel>
</h:form>
+ <p:dialog id="apply-ui" header="领用单" widgetVar="printDialog" appendTo="@(body)" modal="true" resizable="false">
+ <div id="printTarget">
+ <div style=" margin: 10mm 10mm 0mm 2mm;">
+ <h:form id="printDialog">
+ <p:outputPanel style="text-align: center;font-size: 14px;font-weight: 700;">#{warehouseStockMngController.printTable['head']}</p:outputPanel>
+ <p:outputPanel style="text-align: center;font-size: 15px;margin: 20px;font-weight: 700;">#{warehouseStockMngController.printTable['title']}</p:outputPanel>
+ <div>
+ <div style="display: flex;flex-direction: row;justify-content: flex-end;">
+ <div style="width: 100px;">单据编号:</div>
+ <div style="width: 300px;">
+<!-- <input style="border: 0;" value="#{warehouseStockMngController.printTable['receiptNumber']}"/>-->
+ <p:inputText value="#{warehouseStockMngController.receiptNumber}" valueChangeListener="#{warehouseStockMngController.receiptNumberChange}">
+ <p:ajax event="valueChange" listener="#{warehouseStockMngController.receiptNumberChange()}" />
+ </p:inputText>
+ </div>
+ </div>
+ </div>
+
+ <div style="margin: 10px 0;">
+ <div style="display: inline-flex;">
+ <div style="width: 100px;margin-left: 10px;">部门:</div>
+ <div style="width: 300px;">#{warehouseStockMngController.printTable['department']}</div>
+ </div>
+ <div style="display: inline-flex;float: right;">
+ <div style="width: 100px;">日期:</div>
+ <div style="width: 300px;padding-top: 1px;"><input style="border: 0;" value="#{warehouseStockMngController.printTable['date']}"/></div>
+ </div>
+ </div>
+
+ <div style="margin-bottom: 20px;">
+ <div style="display: inline-flex;">
+ <div style="width: 100px;margin-left: 10px;">申购人:</div>
+ <div style="width: 300px;">#{warehouseStockMngController.printTable['applyPerson']}</div>
+ </div>
+ <div style="display: inline-flex;float: right;">
+ <div style="width: 100px;">联系方式:</div>
+ <div style="width: 300px;">
+ <input style="border: 0;" value="#{warehouseStockMngController.printTable['phone']}"/></div>
+ </div>
+ </div>
+
+
+
+
+ <p:dataTable id="printTB" styleClass="apply-list"
+ value="#{warehouseStockMngController.printTable['applyList']}" var="row" >
+ <p:column headerText="产品编号" width="150px;" style="text-align: center;">
+ <h:outputText value="#{row.productCode}" />
+ </p:column>
+ <p:column headerText="产品名称" width="150px;" style="text-align: center;">
+ <h:outputText value="#{row.productName}" />
+ </p:column>
+
+ <p:column headerText="管制品" width="100px;" style="text-align: center;">
+ <h:outputText value="#{row.controlProducts}" />
+ </p:column>
+
+ <p:column headerText="规格型号" width="160px;" style="text-align: center;">
+ <h:outputText value="#{row.reagentFormat}" />
+ </p:column>
+
+ <p:column headerText="包装" width="90px;" style="text-align: center;">
+ <h:outputText value="#{row.mainMetering==null?'':row.mainMetering}" />
+ </p:column>
+
+ <p:column headerText="数量" width="90px;" style="text-align: center;">
+ <h:outputText value="#{row.num}" />
+ </p:column>
+
+ <p:column headerText="备注" width="170px;" style="text-align: center;">
+ <h:outputText value="#{row.memo}" />
+ </p:column>
+ </p:dataTable>
+
+ <div style="margin-top: 20px;">
+ <div style="display: flex;flex-direction: row;justify-content: flex-end;">
+ <div style="width: 100px">签收人:</div>
+ <div style="width: 300px"></div>
+ </div>
+ </div>
+
+ <div style="margin: 10px 0">
+ <div style="display: flex;flex-direction: row;justify-content: flex-end;">
+ <div style="width: 100px">日期:</div>
+ <div style="width: 300px"></div>
+ </div>
+ </div>
+
+
+
+ <p:panel styleClass="btn no-print">
+ <p:commandButton value="关闭"
+ process="@this"
+ styleClass="yes-btn"
+ actionListener="#{warehouseStockMngController.onCancelBtnClick}"
+ style="position: relative;left: 20px;"
+ update=":centerRootPanel"
+ oncomplete="PF('printDialog').hide()">
+ </p:commandButton>
+ <div style="display: none" id="indirectPrint"></div>
+ <p:commandButton value="打印"
+ styleClass="yes-btn"
+ actionListener="#{warehouseStockMngController.associatedFlowReceiptNumber()}"
+ style="position: relative;left: 20px;"
+ >
+ </p:commandButton>
+
+ <script type="text/javascript" src="resources/js/print.js"/>
+ <script type="text/javascript">
+ $(function () {
+ $("#indirectPrint").on("click", function () {
+ jQuery.print('#printTarget')
+ })
+ })
+
+
+ </script>
+ </p:panel>
+ </h:form>
+ </div>
+ </div>
+ </p:dialog>
<p:dialog modal="true" header="领用详情" appendTo="@(body)" id="reagentCodeDialogForPerson"
- widgetVar="reagentCodeDialogForPerson" resizable="false" width="800" class="ui-dialog">
+ widgetVar="reagentCodeDialogForPerson" resizable="false" width="930" class="ui-dialog">
<p:tabView dynamic="true" style="margin-left: 26px">
- <p:tab title="补贴条码">
+ <p:tab title="补贴条码" id="applyInOrder">
<h:form id="reagentCodeDialogForm2">
- <!--<p:panel styleClass="center-header content2">-->
- <p:panelGrid styleClass="center-header content2">
- <p:row>
- <p:column><p:outputLabel value="领用数量:"></p:outputLabel></p:column>
- <p:column><p:inputNumber value="#{warehouseStockMngController.useNum}"
+ <p:panelGrid styleClass="center-header content2" columns="6">
+ <p:column style="width: 60px !important;"><p:outputLabel value="仓库名:"/></p:column>
+ <p:selectOneMenu value="#{warehouseStockMngController.opeWarehouseReserve.warehouseId}" >
+ <p:ajax event="change" process="@this" listener="#{warehouseStockMngController.selectChangeReserve(warehouseStockMngController.opeWarehouseReserve.warehouseId)}"
+ update="reserve"/>
+ <f:selectItems value="#{warehouseStockMngController.warehouseReserveList}"
+ var="item"
+ itemValue="#{item.warehouseId}"
+ itemLabel="#{item.warehouseName}"/>
+ </p:selectOneMenu>
+
+
+ <p:column>
+ <p:outputLabel id="reserve" value="可供库存:" style="width: 100px;">
+ <span style="color: #1c427b;font-weight: bolder;font-size: 20px">#{warehouseStockMngController.opeWarehouseReserve.reserve}</span>
+ </p:outputLabel>
+ </p:column>
+
+
+ <p:outputLabel value="领用数量:" style="width: 80px;"/>
+ <p:inputNumber value="#{warehouseStockMngController.useNum}"
minValue="0" decimalPlaces="0"
- required="true" requiredMessage="请输入领用数量" id="useNum"/></p:column>
- <p:column></p:column>
- <p:column></p:column>
- </p:row>
- <p:row>
- <p:column><p:outputLabel value="条形码开始">
- <p:commandLink value="自动生成" process="@this useNum startReagentCode" action="#{warehouseStockMngController.handleEventForPerson}" update="endReagentCode" >
-
- </p:commandLink>
- </p:outputLabel></p:column>
- <p:column><p:inputText id="startReagentCode" value="#{warehouseStockMngController.startReagentCodeForPerson}" maxlength="32" required="true" requiredMessage="请输入条形码开始"/></p:column>
- <p:column><p:outputLabel value="条形码结束"></p:outputLabel></p:column>
- <p:column><p:inputText id="endReagentCode" value="#{warehouseStockMngController.endReagentCodeForPerson}" maxlength="32" required="true" requiredMessage="请输入条形码结束"/></p:column>
- </p:row>
-
-
+ required="true" requiredMessage="请输入领用数量" id="useNum"/>
+ <p:column>
+ <p:commandButton value="添加"
+ process="@this,useNum"
+ styleClass="yes-btn"
+ actionListener="#{warehouseStockMngController.add2()}"
+ update="@(.reagentCode),endReagentCode"
+ style="position: relative;left: 20px;width: 58px;height: 34px;">
+ </p:commandButton>
+ </p:column>
</p:panelGrid>
+ <p:separator style="margin: 15px"/>
+ <p:dataTable id="reagentCode" styleClass="reagentCode"
+ paginatorPosition="bottom"
+ lazy="true"
+ value="#{warehouseStockMngController.getDataTmp()}"
+ var="row"
+ rowKey="#{row.id}"
+ scrollable="false"
+ rows="5" pageLinks="5"
+ emptyMessage="无领用数据">
+
+ <p:column headerText="操作" style="text-align: center;">
+ <p:commandButton style="background: #e68280; border: 1px solid #e68280;color: white;" styleClass="store-btn"
+ value="取消"
+ actionListener="#{warehouseStockMngController.remove2(row)}"
+ process="@this"
+ update="@(.reagentCode),@(.endReagentCode)">
+ </p:commandButton>
+ </p:column>
+
+ <p:column headerText="仓库名" style="text-align: center;">
+ <h:outputText value="#{row.warehouseName}" />
+ </p:column>
+ <p:column headerText="试剂名称" style="text-align: center;">
+ <h:outputText value="#{sysReagentService.getSysReagent(row.reagentId).name}" />
+ </p:column>
+
+ <p:column headerText="库存" style="text-align: center;">
+ <h:outputText value="#{row.reserve}" />
+ </p:column>
+
+ <p:column headerText="领用数量" style="text-align: center;">
+ <h:outputText value="#{row.useNum}" />
+ </p:column>
+ </p:dataTable>
+
+ <p:panelGrid styleClass="center-header content2" columns="4" id="code" style="margin-top:20px;">
+
+ <p:outputLabel value="条形码开始"/>
+ <p:inputText id="startReagentCode" styleClass="startReagentCode" value="#{warehouseStockMngController.startReagentCodeForPerson}" maxlength="32" required="true" requiredMessage="请输入条形码开始">
+ <p:ajax event="change" listener="#{warehouseStockMngController.btCodeChange()}" update="endReagentCode"/>
+ </p:inputText>
+
+ <p:outputLabel value="条形码结束"/>
+ <p:inputText id="endReagentCode" styleClass="endReagentCode" value="#{warehouseStockMngController.endReagentCodeForPerson}" maxlength="32" required="true" requiredMessage="请输入条形码结束"/>
+ </p:panelGrid>
+
+
+
<!--</p:panel>-->
<p:panel styleClass="btn" style="text-align: right">
<p:commandButton value="确定"
@@ -153,7 +334,7 @@
</p:panel>
</h:form>
</p:tab>
- <p:tab title="库中领取">
+ <p:tab title="库中领取" id="applyInWarehouse">
<h:form id="reagentCodeDialogForm">
<p:panel styleClass="center-header content2">
<p:panelGrid styleClass="filter" columns="6">
--
Gitblit v1.9.2