From 99968f83982943669af3829ea6bc3bbe745cada4 Mon Sep 17 00:00:00 2001 From: zhangfeng <1603559716@qq.com> Date: 星期一, 21 十一月 2022 08:41:48 +0800 Subject: [PATCH] 安全物资和设备管理相关rpc接口 --- equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/service/impl/SafeMaterialDetailServiceImpl.java | 189 ++++++++++++++++++++++++++++++++++++++++++----- 1 files changed, 168 insertions(+), 21 deletions(-) diff --git a/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/service/impl/SafeMaterialDetailServiceImpl.java b/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/service/impl/SafeMaterialDetailServiceImpl.java index 72cc374..ff396c5 100644 --- a/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/service/impl/SafeMaterialDetailServiceImpl.java +++ b/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/service/impl/SafeMaterialDetailServiceImpl.java @@ -14,7 +14,9 @@ import com.gkhy.safePlatform.equipment.enums.*; import com.gkhy.safePlatform.equipment.excepiton.EquipmentException; import com.gkhy.safePlatform.equipment.model.dto.req.*; +import com.gkhy.safePlatform.equipment.model.dto.resp.SafeMaterialClassifyStockDto; import com.gkhy.safePlatform.equipment.model.dto.resp.SafeMaterialDetailDto; +import com.gkhy.safePlatform.equipment.model.dto.resp.SafeRfidMaterialDetailDto; import com.gkhy.safePlatform.equipment.mq.msg.SafeMaterialMsg; import com.gkhy.safePlatform.equipment.service.SafeMaterialDetailService; import com.gkhy.safePlatform.equipment.service.baseService.SafeMaterialClassifyInfoService; @@ -27,14 +29,12 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; import java.time.LocalDateTime; import java.time.ZoneId; import java.time.ZonedDateTime; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Date; -import java.util.List; +import java.util.*; import java.util.stream.Collectors; @Service("SafeMaterialDetailService") @@ -93,8 +93,9 @@ String rfid = "0000000".substring(0,(8 - countStr.length()))+countStr; SafeMaterialDetailInfo materialDetailInfo = new SafeMaterialDetailInfo(); materialDetailInfo.setId(IdUtil.getSnowflake(0,0).nextId()); - materialDetailInfo.setMaterialClassifyId(materialInfo.getMaterialClassifyId()); - materialDetailInfo.setName(materialInfo.getMaterialName()+"(ID"+materialInfo.getId()+")"); + materialDetailInfo.setBigClassifyId(materialInfo.getBigClassifyId()); + materialDetailInfo.setSmallClassifyId(materialInfo.getSmallClassifyId()); + materialDetailInfo.setName(materialInfo.getMaterialName()); materialDetailInfo.setSmId(req.getSmId()); materialDetailInfo.setConsumable(materialInfo.getConsumable()); materialDetailInfo.setValidType(req.getValidType()); @@ -113,8 +114,9 @@ for(int i = 0;i < req.getWareHousingCount();i++){ SafeMaterialDetailInfo materialDetailInfo = new SafeMaterialDetailInfo(); materialDetailInfo.setId(IdUtil.getSnowflake(0,0).nextId()); - materialDetailInfo.setMaterialClassifyId(materialInfo.getMaterialClassifyId()); - materialDetailInfo.setName(materialInfo.getMaterialName()+"(ID"+materialInfo.getId()+")"); + materialDetailInfo.setBigClassifyId(materialInfo.getBigClassifyId()); + materialDetailInfo.setSmallClassifyId(materialInfo.getSmallClassifyId()); + materialDetailInfo.setName(materialInfo.getMaterialName()); materialDetailInfo.setSmId(req.getSmId()); materialDetailInfo.setConsumable(materialInfo.getConsumable()); materialDetailInfo.setValidType(req.getValidType()); @@ -169,8 +171,9 @@ for(int i = 0;i < req.getWareHousingCount();i++){ SafeMaterialDetailInfo materialDetailInfo = new SafeMaterialDetailInfo(); materialDetailInfo.setId(IdUtil.getSnowflake(0,0).nextId()); - materialDetailInfo.setMaterialClassifyId(materialInfo.getMaterialClassifyId()); - materialDetailInfo.setName(materialInfo.getMaterialName()+"(ID"+materialInfo.getId()+")"); + materialDetailInfo.setBigClassifyId(materialInfo.getBigClassifyId()); + materialDetailInfo.setSmallClassifyId(materialInfo.getSmallClassifyId()); + materialDetailInfo.setName(materialInfo.getMaterialName()); materialDetailInfo.setSmId(req.getSmId()); materialDetailInfo.setConsumable(materialInfo.getConsumable()); materialDetailInfo.setValidType(req.getValidType()); @@ -258,10 +261,10 @@ List<SafeMaterialDetailInfo> list = safeMaterialDetailInfoService.getListByIds(idList); List<SafeMaterialDetailInfo> selectList = list .stream() - .filter(item -> item.getIrStatus().equals(IssueReceiptEnum.OUT_OF_LIBRARY.getCode())) + .filter(item -> item.getIrStatus().equals(IssueReceiptEnum.OUT_OF_LIBRARY.getCode()) && item.getConsumable().equals(ConsumableEnum.YES.getCode())) .collect(Collectors.toList()); if(selectList.size() != ids.length){ - throw new EquipmentException(ResultCodes.CLIENT_PARAM_ILLEGAL,"已入库物资不可重复入库!"); + throw new EquipmentException(ResultCodes.CLIENT_PARAM_ILLEGAL,"已入库或耗材物资不可重复入库!"); } //修改为入库状态 safeMaterialDetailInfoService.updateReceiptStatusByIds(idList,IssueReceiptEnum.IN_THE_LIBRARY.getCode()); @@ -311,18 +314,141 @@ @Override public ResultVO deliveryBatchRandom(MterialRandomDeliveryReq req) { UserInfoRPCRespDTO userInfo = getUserInfo(req.getClaimantId()); + List<Long> idList = new ArrayList<>(); + if(StringUtils.isNotBlank(req.getRfid())){ + idList = safeMaterialDetailInfoService.getIdListByRfid(req.getCount(),req.getSmId(),req.getRfid()); + + }else{ + idList = safeMaterialDetailInfoService.getRfidNullList(req.getCount(), req.getSmId()); + + } + if(idList.size()< req.getCount()){ + throw new EquipmentException(ResultCodes.CLIENT_PARAM_ILLEGAL,"有效库存数量不足!"); + } //获取有效数量 Integer validStockCount = safeMaterialDetailInfoService.getValidStockCount(req.getSmId()); if(req.getCount() > validStockCount){ throw new EquipmentException(ResultCodes.CLIENT_PARAM_ILLEGAL,"出库数量不可大于有效库存数量!"); } - SafeMaterialDetailBO detailBO = new SafeMaterialDetailBO(); - detailBO.setCount(req.getCount()); detailBO.setClaimantName(userInfo.getUsername()); detailBO.setClaimantId(req.getClaimantId()); - safeMaterialDetailInfoService.deliveryBatchRandom(detailBO); + detailBO.setIds(idList); + safeMaterialDetailInfoService.updateDeliveryStatusByIds(detailBO); return new ResultVO(ResultCodes.OK); + } + + /** + * 特殊作业物资出库 + * @param req + * @return + */ + @Override + public void deliveryBatchSpw(MaterialSpwReq req) { + //验证 + if(null == req.getClaimantId()){ + throw new EquipmentException(ResultCodes.CLIENT_PARAM_NULL,"认领人不可为空!"); + } + List<MaterialSpwDeliveryReq> deliveryReqList = req.getDeliveryReqList(); + if(CollectionUtils.isEmpty(deliveryReqList)){ + throw new EquipmentException(ResultCodes.CLIENT_PARAM_NULL,"出库物资不可为空!"); + } + //获取小类物资 + List<Long> smallClassifyIds = deliveryReqList + .stream() + .map(MaterialSpwDeliveryReq::getSmallClassifyId) + .collect(Collectors.toList()); + List<Long> depIds = deliveryReqList + .stream() + .map(MaterialSpwDeliveryReq::getDepId) + .collect(Collectors.toList()); + if(smallClassifyIds.size() == 0 || depIds.size() == 0){ + throw new EquipmentException(ResultCodes.CLIENT_PARAM_NULL,"部门/仓库或者物资类型(小类)不可为空!"); + } + + List<SafeMaterialClassifyStockDO> classifyStockList= safeMaterialDetailInfoService.getSmallClassifyStockByIds(smallClassifyIds); + //根据物资种类获取有效在库物资 + List<SafeMaterialDetailDO> listBySmallClassifyIds = safeMaterialDetailInfoService.getListBySmallClassifyIds(smallClassifyIds,depIds); + + for(MaterialSpwDeliveryReq deliveryReq:deliveryReqList){ + if(null == deliveryReq.getDepId()){ + throw new EquipmentException(ResultCodes.CLIENT_PARAM_NULL,"部门或仓库不可为空!"); + } + if(null == deliveryReq.getCount()){ + throw new EquipmentException(ResultCodes.CLIENT_PARAM_ILLEGAL,"出库数量不可为空!"); + } + if(null == deliveryReq.getSmallClassifyId()){ + throw new EquipmentException(ResultCodes.CLIENT_PARAM_NULL,"物资类型(小类)不可为空!"); + } + List<SafeMaterialClassifyStockDO> collect = classifyStockList + .stream() + .filter(cs -> cs.getSmallClassifyId().equals(deliveryReq.getSmallClassifyId()) && cs.getDepId().equals(deliveryReq.getDepId()) && cs.getStockCount() >= deliveryReq.getCount()) + .collect(Collectors.toList()); + if(collect.size() == 0){ + throw new EquipmentException(ResultCodes.CLIENT_PARAM_ILLEGAL,"库存不足!"); + } + } + UserInfoRPCRespDTO userInfo = getUserInfo(req.getClaimantId()); + List<Long> ids = new ArrayList<>(); + //循环数据 + for(MaterialSpwDeliveryReq deliveryReq:deliveryReqList){ + //过滤出rfid存在的数据 + List<SafeMaterialDetailDO> selectRfidNotNull = listBySmallClassifyIds + .stream() + .filter(item -> null != item.getRfid() && item.getSmallClassifyId().equals(deliveryReq.getSmallClassifyId()) && item.getDepId().equals(deliveryReq.getDepId())) + .collect(Collectors.toList()); + List<Long> selectIds = new ArrayList<>(); + if(selectRfidNotNull.size()>0){ + selectIds = selectRfidNotNull + .stream() + .map(SafeMaterialDetailDO::getId) + .collect(Collectors.toList()); + } + if(selectRfidNotNull.size() >= deliveryReq.getCount()){ + ids.addAll(selectIds.subList(0,deliveryReq.getCount())); + }else{ + ids.addAll(selectIds); + List<SafeMaterialDetailDO> selectRfidIsNull = listBySmallClassifyIds + .stream() + .filter(item -> null == item.getRfid() && item.getSmallClassifyId().equals(deliveryReq.getSmallClassifyId()) && item.getDepId().equals(deliveryReq.getDepId())) + .collect(Collectors.toList()); + + List<Long> collect = selectRfidIsNull.subList(0,deliveryReq.getCount()-selectRfidNotNull.size()).stream().map(SafeMaterialDetailDO::getId) + .collect(Collectors.toList()); + ids.addAll(collect); + } + } + SafeMaterialDetailBO detailBO = new SafeMaterialDetailBO(); + detailBO.setClaimantName(userInfo.getUsername()); + detailBO.setClaimantId(req.getClaimantId()); + detailBO.setIds(ids); + safeMaterialDetailInfoService.updateDeliveryStatusByIds(detailBO); + + } + + + /** + * 根据rfid获取数据信息 + * @param rfids + * @return + */ + @Override + public List<SafeRfidMaterialDetailDto> getListByRfids(List<String> rfids) { + if(CollectionUtils.isEmpty(rfids)){ + throw new EquipmentException(ResultCodes.CLIENT_PARAM_NULL); + } + List<SafeMaterialDetailInfoDO> listByRfid = safeMaterialDetailInfoService.getListByRfids(rfids); + List<SafeRfidMaterialDetailDto> rfidMaterialDetailDtoList = new ArrayList<>(); + for (SafeMaterialDetailInfoDO detailInfoDO:listByRfid){ + SafeRfidMaterialDetailDto detailDto = new SafeRfidMaterialDetailDto(); + detailDto.setId(detailInfoDO.getId()); + detailDto.setName(detailInfoDO.getName()); + detailDto.setBigClassifyId(detailInfoDO.getBigClassifyId()); + detailDto.setSmallClassifyId(detailInfoDO.getSmallClassifyId()); + detailDto.setDepId(detailInfoDO.getDepId()); + rfidMaterialDetailDtoList.add(detailDto); + } + return rfidMaterialDetailDtoList; } @Override @@ -337,7 +463,6 @@ materialDetailDto.setValidStatusName(ValidStatusEnum.getByCode(materialDetailInfoDO.getValidStatus()).getValue()); materialDetailDto.setValidTypeName(ValidTypeEnum.getByCode(materialDetailInfoDO.getValidType()).getValue()); materialDetailDto.setIrStatusName(IssueReceiptEnum.getByCode(materialDetailInfoDO.getIrStatus()).getValue()); - detailDtoList.add(materialDetailDto); } return new SearchResultVO<>(true, page.getCurrent(),page.getSize(), page.getPages(),page.getTotal(),detailDtoList,ResultCodes.OK); @@ -352,7 +477,7 @@ SafeMaterialDetailDto detailDto = new SafeMaterialDetailDto(); if(materialDetailInfo != null){ SafeMaterialInfo materialInfo = safeMaterialInfoService.queryById(materialDetailInfo.getSmId()); - SafeMaterialClassifyInfo classifyInfo = safeMaterialClassifyInfoService.queryById(materialDetailInfo.getMaterialClassifyId()); + SafeMaterialClassifyInfo classifyInfo = safeMaterialClassifyInfoService.queryById(materialDetailInfo.getBigClassifyId()); BeanUtils.copyProperties(materialDetailInfo,detailDto); detailDto.setConsumableName(ConsumableEnum.getByCode(materialDetailInfo.getConsumable()).getValue()); detailDto.setValidStatusName(ValidStatusEnum.getByCode(materialDetailInfo.getValidStatus()).getValue()); @@ -416,6 +541,10 @@ if(null == vo){ throw new EquipmentException(EquipmentResultCodes.DATA_NOT_EXIST); } + //如果是耗材不可重新入库 + if(vo.getConsumable().equals(ConsumableEnum.YES.getCode())){ + throw new EquipmentException(EquipmentResultCodes.MATERIAL_CONSUMABLE); + } if(vo.getIrStatus().equals(IssueReceiptEnum.IN_THE_LIBRARY.getCode())){ throw new EquipmentException(EquipmentResultCodes.MATERIAL_IN_THE_LIBRARY); } @@ -440,6 +569,10 @@ } if(IssueReceiptEnum.IN_THE_LIBRARY.getCode().equals(req.getIrStatus())){ + //如果是耗材不可重新入库 + if(vo.getConsumable().equals(ConsumableEnum.YES.getCode())){ + throw new EquipmentException(EquipmentResultCodes.MATERIAL_CONSUMABLE); + } //重新入库 if(vo.getIrStatus().equals(req.getIrStatus())){ throw new EquipmentException(EquipmentResultCodes.MATERIAL_IN_THE_LIBRARY); @@ -498,9 +631,24 @@ return new ResultVO<>(ResultCodes.OK); } - - - + /** + * 根据小类id(物资种类)获取库存数量 + * @param smallClassifyIds + * @return + */ + public List<SafeMaterialClassifyStockDto> getSmallClassifyStockByIds(List<Long> smallClassifyIds) { + if(CollectionUtils.isEmpty(smallClassifyIds)){ + throw new EquipmentException(ResultCodes.CLIENT_PARAM_NULL); + } + List<SafeMaterialClassifyStockDO> classifyStockList= safeMaterialDetailInfoService.getSmallClassifyStockByIds(smallClassifyIds); + List<SafeMaterialClassifyStockDto> classifyStockDtoList = new ArrayList<>(); + for (SafeMaterialClassifyStockDO classifyStockDO:classifyStockList){ + SafeMaterialClassifyStockDto classifyStockDto = new SafeMaterialClassifyStockDto(); + BeanUtils.copyProperties(classifyStockDO,classifyStockDto); + classifyStockDtoList.add(classifyStockDto); + } + return classifyStockDtoList; + } private UserInfoRPCRespDTO getUserInfo(Long uid) { @@ -537,5 +685,4 @@ Date date = Date.from(zdt.toInstant()); return date; } - } -- Gitblit v1.9.2