From c3510da29a7974c6af7ff3de1ade3db429d6f848 Mon Sep 17 00:00:00 2001 From: 李宇 <986321569@qq.com> Date: 星期三, 18 八月 2021 14:27:59 +0800 Subject: [PATCH] 申购管理申请履历显示所有历史单据,提交时如有无效试剂耗材报错 --- src/main/java/com/nanometer/smartlab/service/OpeWarehouseReserveServiceImpl.java | 368 +++++++++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 348 insertions(+), 20 deletions(-) diff --git a/src/main/java/com/nanometer/smartlab/service/OpeWarehouseReserveServiceImpl.java b/src/main/java/com/nanometer/smartlab/service/OpeWarehouseReserveServiceImpl.java index 9086784..a37acb1 100644 --- a/src/main/java/com/nanometer/smartlab/service/OpeWarehouseReserveServiceImpl.java +++ b/src/main/java/com/nanometer/smartlab/service/OpeWarehouseReserveServiceImpl.java @@ -7,13 +7,16 @@ 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; import com.nanometer.smartlab.exception.AlarmException; import com.nanometer.smartlab.util.IDUtils; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; +import org.springframework.context.annotation.Lazy; import org.springframework.dao.DataAccessException; import org.springframework.dao.DataIntegrityViolationException; import org.springframework.dao.DuplicateKeyException; @@ -44,16 +47,19 @@ @Resource private OpeReagentStatusService opeReagentStatusService; + @Lazy @Resource private OpeUseFlowService opeUseFlowService; - @Resource - private OpeWarehouseReserveService opeWarehouseReserveService; @Resource(name="baseMetaDao") private BaseMetaDao baseMetaDao; @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, @@ -88,13 +94,15 @@ @Transactional(propagation = Propagation.REQUIRED) public List<OpeWarehouseReserve> getOpeWarehouseReserveListByName(String reagentId, String supplierId, Integer first, - Integer pageSize) { + Integer pageSize,String productSn,String warehouseName) { try { Map<String, Object> params = new HashMap<String, Object>(); params.put("reagentName", reagentId); params.put("supplierId", supplierId); params.put("first", first); params.put("pageSize", pageSize); + params.put("productSn", productSn); + params.put("warehouseName", warehouseName); return this.opeWarehouseReserveDao.getOpeWarehouseReserveList(params); } catch (DataAccessException e) { logger.error(e.getMessage(), e); @@ -104,11 +112,13 @@ } @Transactional(propagation = Propagation.REQUIRED) - public int getOpeWarehouseReserveTotalCountByName(String reagentId, String supplierId) { + public int getOpeWarehouseReserveTotalCountByName(String reagentId, String supplierId,String productSn,String warehouseName) { try { Map<String, Object> params = new HashMap<String, Object>(); params.put("reagentName", reagentId); params.put("supplierId", supplierId); + params.put("productSn", productSn); + params.put("warehouseName", warehouseName); return this.opeWarehouseReserveDao.getOpeWarehouseReserveTotalCount(params); } catch (DataAccessException e) { logger.error(e.getMessage(), e); @@ -162,6 +172,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 { @@ -184,7 +205,7 @@ } } - @Transactional(propagation = Propagation.REQUIRED) + @Transactional(rollbackFor = Exception.class,propagation = Propagation.REQUIRED) public boolean updateOpeWarehouseReserve(OpeWarehouseReserve opeWarehouseReserve) { try { int row = this.opeWarehouseReserveDao.updateOpeWarehouseReserve(opeWarehouseReserve); @@ -204,21 +225,23 @@ } } - @Transactional(propagation = Propagation.REQUIRED) - public void claimForPerson(List<OpeApplyReserve> selectedListForPerson,String userId,String projectNum){ + @Transactional(rollbackFor = Exception.class,propagation = Propagation.REQUIRED) + public void claimForPerson(List<OpeApplyReserve> selectedListForPerson,String userId,String projectNum,String laboratoryId,String laboratoryContainerId){ try{ for(OpeApplyReserve app:selectedListForPerson){ List<String> reagentCodes = app.getReagentCode(); if (reagentCodes != null && reagentCodes.size() > 0) { - List<OpeReagentStatus> ss=new ArrayList<>(); - for (String opeReagentStatusId : reagentCodes) { - OpeReagentStatus opeReagentStatus = this.opeReagentStatusService.getOpeReagentStatus(opeReagentStatusId); - opeReagentStatus.setUserId(userId); - opeReagentStatus.setProjectNum(projectNum); - //boolean flag = this.opeReagentStatusService.updateReagentStatus(opeReagentStatus); - this.opeReagentStatusService.updateReagentStatus(opeReagentStatus); - ss.add(opeReagentStatus); - } + this.opeReagentStatusService.updateReagentStatus3(reagentCodes,userId,projectNum,laboratoryId,laboratoryContainerId); + + //更新是现实库存 + 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()); @@ -260,6 +283,9 @@ logger.error(ex.getMessage(), ex); throw new BusinessException(ExceptionEnumCode.DB_ERR, MessageUtil.getMessageByCode(ExceptionEnumCode.DB_ERR.getCode()), ex); + }catch(Exception e){ + e.printStackTrace(); + throw new RuntimeException(e); } } @@ -325,7 +351,7 @@ for (int i = 0; i < len; i++) { temp += "0"; } - for (BigInteger i = startReagentCode; i.compareTo(endReagentCode) < 1; i = i.add(BigInteger.ONE)) { + for (BigInteger i = startReagentCode; i.compareTo(endReagentCode) < 1; i = i.add(BigInteger.ONE)) { reagentCode = temp + String.valueOf(i); if (this.opeReagentStatusService.isOpeReagentStatusExist(reagentCode)) {//条码存在 //throw new BusinessException(ExceptionEnumCode.REAGENT_CODE_EXIST, "入库试剂:" + opeApply.getReagent().getName() + "的试剂条形码[" + reagentCode + "]已存在。"); @@ -417,6 +443,135 @@ } } + 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 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 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); @@ -428,6 +583,177 @@ params.put("newReId",newReId); params.put("oldReId",oldReId); this.opeWarehouseReserveDao.updateByReId(params); + } + + @Override + @Transactional + public void insertOpeWarehouseReserve2(OpeApplyReserve opeApplyReserve, OpeOrder oo,String consigneeId) { + + OpeWarehouseReserve ope = this.getOpeWarehouseReserve2(opeApplyReserve.getReagent().getId(), opeApplyReserve.getArticleNumber(),opeApplyReserve.getHouseId()); + if (ope == null) { + + ope = new OpeWarehouseReserve(); + //库存为到货数量 + ope.setReserve(opeApplyReserve.getArrivalNum()); + //仓库 + ope.setWarehouseId(opeApplyReserve.getHouseId()); + //仓库的货柜号 + ope.setContainerId(opeApplyReserve.getContainerId()); + //试剂 + ope.setReagentId(opeApplyReserve.getReagent().getId()); + //订单编号 + ope.setOrderCode(oo.getOrderCode()); + // 申购编号 + ope.setApplyCode(opeApplyReserve.getApplyCode()); + //批号 + ope.setArticleNumber(opeApplyReserve.getArticleNumber()); + ope.setId(IDUtils.uuid()); + //新增收货人 保存在仓库库存表 + ope.setUserId(consigneeId); + opeWarehouseReserveDao.insertOpeWarehouseReserve2(ope); + }else { + ope.setReserve(ope.getReserve() + opeApplyReserve.getArrivalNum()); + this.updateOpeWarehouseReserve(ope); + } + + + + + } + + @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 int countByReagentId(String id) { + int num = 0; + if (opeWarehouseReserveDao.countByReagentId(id) != null) { + num = opeWarehouseReserveDao.countByReagentId(id); + } + return num; + } + + @Override + public OpeWarehouseReserve getRowData(String rowKey) { + return opeWarehouseReserveDao.getRowData(rowKey); + } + + @Override + public void btWarehouseReserveReduce(List<OpeApplyReserve> opeList) { + if (opeList.size() < 1) { + return; + } + for (OpeApplyReserve oar : opeList) { + String reagentId = oar.getReagent().getId(); + List<String> reagentCodes = new ArrayList<>(oar.getReagentCode()); + //开始库存扣除 + List<OpeWarehouseReserve> cacheUpdateList = oar.getCacheUpdateList(); + for (OpeWarehouseReserve owr : cacheUpdateList) { + //1.根据仓库id和试剂id搜索不同批号的试剂库存 + List<OpeWarehouseReserve> reserveList = this + .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(); + } + + //更新流向,加入一条 + if (usedNum > 0) { + for (int i = 0; i < usedNum; i++) { + // 试剂使用情况入库insert TODO 流向需要当时的时间和地点 + OpeUseFlow opeUseFlow = new OpeUseFlow(); + opeUseFlow.setReagentCode(reagentCodes.get(0)); + opeUseFlow.setStatus(ArrivalStatus.WAREHOUSE); + opeUseFlow.setUserId(warehouseReserve.getUserId()); + //仓库地点 + opeUseFlow.setHouseId(warehouseReserve.getWarehouseId()); + opeUseFlow.setContainerId(warehouseReserve.getContainerId()); + opeUseFlow.setRemainder(oar.getReagent().getMainMetering()!=null?oar.getReagent().getMainMetering():new BigDecimal(0)); + //入库时间 + opeUseFlow.setCreateTime(warehouseReserve.getUpdateTime()); + 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); + //更新试剂状态表 :批号 + opeReagentStatusDao.updateArticleNumberByRCode(reagentCodes.get(0),warehouseReserve.getArticleNumber()); + + reagentCodes.remove(0); + + } + + } + + + //更新库存 + this.updateBtReserve(warehouseReserve.getId(),usedNum); + if (numLeave < 1) { + break; + } + } + + + + } + } } @Transactional(propagation = Propagation.REQUIRED) @@ -505,19 +831,21 @@ // 仓库库存update - opeWarehouseReserve = this.opeWarehouseReserveService.getOpeWarehouseReserve2(opeApply.getReagent().getId(), opeApply.getArticleNumber(),opeApply.getHouseId()); + opeWarehouseReserve = this.getOpeWarehouseReserve2(opeApply.getReagent().getId(), opeApply.getArticleNumber(),opeApply.getHouseId()); if (opeWarehouseReserve == null) { opeWarehouseReserve = new OpeWarehouseReserve(); opeWarehouseReserve.setReagentId(opeApply.getReagent().getId()); opeWarehouseReserve.setArticleNumber(opeApply.getArticleNumber()); opeWarehouseReserve.setReserve(0); opeWarehouseReserve.setWarehouseId(opeApply.getHouseId()); + opeWarehouseReserve.setContainerId(opeApply.getContainerId()); + opeWarehouseReserve.setUserId(loginUserId); } opeWarehouseReserve.setReserve(opeWarehouseReserve.getReserve() + opeApply.getArrivalNum()); if (StringUtils.isBlank(opeWarehouseReserve.getId())) { - this.opeWarehouseReserveService.insertOpeWarehouseReserve(opeWarehouseReserve); + this.insertOpeWarehouseReserve(opeWarehouseReserve); } else { - this.opeWarehouseReserveService.updateOpeWarehouseReserve(opeWarehouseReserve); + this.updateOpeWarehouseReserve(opeWarehouseReserve); } } } -- Gitblit v1.9.2