From f7d2f20365467a834188edd35c464d9fb9349214 Mon Sep 17 00:00:00 2001 From: zhangfeng <1603559716@qq.com> Date: 星期五, 23 十二月 2022 08:53:43 +0800 Subject: [PATCH] 安全物资和设备管理调整v2 --- equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/service/impl/SafeMaterialDetailServiceImpl.java | 776 +++++++++++++++++++++++++++++++++++++++++++++-------------- 1 files changed, 589 insertions(+), 187 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 09a01fe..cb8d742 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 @@ -4,32 +4,28 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.gkhy.safePlatform.account.rpc.apimodel.AccountUserService; import com.gkhy.safePlatform.account.rpc.apimodel.model.resp.UserInfoRPCRespDTO; +import com.gkhy.safePlatform.commons.co.ContextCacheUser; import com.gkhy.safePlatform.commons.enums.ResultCodes; import com.gkhy.safePlatform.commons.exception.BusinessException; import com.gkhy.safePlatform.commons.query.PageQuery; import com.gkhy.safePlatform.commons.utils.StringUtils; import com.gkhy.safePlatform.commons.vo.ResultVO; import com.gkhy.safePlatform.commons.vo.SearchResultVO; -import com.gkhy.safePlatform.equipment.common.RocketMQTemplateHelper; import com.gkhy.safePlatform.equipment.entity.*; 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.req.db.SafeMaterialDetailDBQuery; 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; -import com.gkhy.safePlatform.equipment.service.baseService.SafeMaterialDetailInfoService; -import com.gkhy.safePlatform.equipment.service.baseService.SafeMaterialInfoService; +import com.gkhy.safePlatform.equipment.service.baseService.*; import org.apache.dubbo.config.annotation.DubboReference; -import org.apache.rocketmq.spring.core.RocketMQTemplate; import org.redisson.api.RLock; import org.redisson.api.RedissonClient; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; @@ -51,22 +47,25 @@ @Autowired private SafeMaterialClassifyInfoService safeMaterialClassifyInfoService; - @Value("${rocketmq.topic.safeMaterialTopic}") - private String safeMaterialTopic; - @DubboReference(check = false) private AccountUserService accountUserService; @Autowired - private RocketMQTemplateHelper rocketMQTemplateHelper; + private RedissonClient redissonClient; @Autowired - private RedissonClient redissonClient; + private MaterialReceiveRecordsBaseInfoService materialReceiveRecordsBaseInfoService; + + @Autowired + private MaterialReceiveRecordsInfoService materialReceiveRecordsInfoService; + + @Override + @Transactional public ResultVO save(SafeMaterialDetailAddReq req) { //判断物资是否存在 - SafeMaterialInfo materialInfo = safeMaterialInfoService.queryById(req.getSmId()); - if(null == materialInfo){ + SafeMaterialDO safeMaterialDO = safeMaterialInfoService.queryById(req.getSmId()); + if(null == safeMaterialDO){ throw new EquipmentException(EquipmentResultCodes.DATA_NOT_EXIST,"该种物资不存在!"); } if(null == ValidTypeEnum.getByCode(req.getValidType())){ @@ -99,11 +98,13 @@ String rfid = "0000000".substring(0,(8 - countStr.length()))+countStr; SafeMaterialDetailInfo materialDetailInfo = new SafeMaterialDetailInfo(); materialDetailInfo.setId(IdUtil.getSnowflake(0,0).nextId()); - materialDetailInfo.setBigClassifyId(materialInfo.getBigClassifyId()); - materialDetailInfo.setSmallClassifyId(materialInfo.getSmallClassifyId()); - materialDetailInfo.setName(materialInfo.getMaterialName()); + materialDetailInfo.setBigClassifyId(safeMaterialDO.getBigClassifyId()); + materialDetailInfo.setSmallClassifyId(safeMaterialDO.getSmallClassifyId()); + materialDetailInfo.setName(safeMaterialDO.getMaterialName()); materialDetailInfo.setSmId(req.getSmId()); - materialDetailInfo.setConsumable(materialInfo.getConsumable()); + materialDetailInfo.setConsumable(safeMaterialDO.getConsumable()); + materialDetailInfo.setStatus(MaterialStatusEnum.INTACT.getCode()); + materialDetailInfo.setRemark(MaterialStatusEnum.INTACT.getValue()); materialDetailInfo.setValidType(req.getValidType()); if(req.getValidType().equals(ValidTypeEnum.SHORT_TERM.getCode())){ materialDetailInfo.setValidTime(req.getValidTime()); @@ -120,11 +121,13 @@ for(int i = 0;i < req.getWareHousingCount();i++){ SafeMaterialDetailInfo materialDetailInfo = new SafeMaterialDetailInfo(); materialDetailInfo.setId(IdUtil.getSnowflake(0,0).nextId()); - materialDetailInfo.setBigClassifyId(materialInfo.getBigClassifyId()); - materialDetailInfo.setSmallClassifyId(materialInfo.getSmallClassifyId()); - materialDetailInfo.setName(materialInfo.getMaterialName()); + materialDetailInfo.setBigClassifyId(safeMaterialDO.getBigClassifyId()); + materialDetailInfo.setSmallClassifyId(safeMaterialDO.getSmallClassifyId()); + materialDetailInfo.setName(safeMaterialDO.getMaterialName()); materialDetailInfo.setSmId(req.getSmId()); - materialDetailInfo.setConsumable(materialInfo.getConsumable()); + materialDetailInfo.setConsumable(safeMaterialDO.getConsumable()); + materialDetailInfo.setStatus(MaterialStatusEnum.INTACT.getCode()); + materialDetailInfo.setRemark(MaterialStatusEnum.INTACT.getValue()); materialDetailInfo.setValidType(req.getValidType()); if(req.getValidType().equals(ValidTypeEnum.SHORT_TERM.getCode())){ materialDetailInfo.setValidTime(req.getValidTime()); @@ -136,6 +139,11 @@ list.add(materialDetailInfo); } } + //填充物资管理数据 + SafeMaterialBO safeMaterialBO = new SafeMaterialBO(); + safeMaterialBO.setId(req.getSmId()); + safeMaterialBO.setStockCount(req.getWareHousingCount()); + safeMaterialBO.setTotalCount(req.getWareHousingCount()); //加分布式锁,防止重复创建规则 RLock lock = redissonClient.getLock("LOCK_SMD_SAVE"); @@ -143,16 +151,18 @@ lock.lock(10, TimeUnit.SECONDS); //批量入库 safeMaterialDetailInfoService.saveBatch(list); + //修改数量 + safeMaterialInfoService.updateCountById(safeMaterialBO); //发送消息 - if(req.getValidType().equals(ValidTypeEnum.SHORT_TERM.getCode()) && null != req.getValidTime()){ + /*if(req.getValidType().equals(ValidTypeEnum.SHORT_TERM.getCode()) && null != req.getValidTime()){ for(SafeMaterialDetailInfo materialDetailInfo:list){ SafeMaterialMsg safeMaterialMsg = new SafeMaterialMsg(); safeMaterialMsg.setId(materialDetailInfo.getId()); safeMaterialMsg.setValidTime(conversionTimeType(materialDetailInfo.getValidTime())); rocketMQTemplateHelper.syncSend(safeMaterialTopic,safeMaterialMsg); } - } + }*/ //创建成功,释放锁 lock.unlock(); }catch (EquipmentException e) { @@ -176,10 +186,11 @@ * @return */ @Override + @Transactional public ResultVO saveBatch(SafeMaterialDetailAddReq req) { //判断物资是否存在 - SafeMaterialInfo materialInfo = safeMaterialInfoService.queryById(req.getSmId()); - if(null == materialInfo){ + SafeMaterialDO safeMaterialDO = safeMaterialInfoService.queryById(req.getSmId()); + if(null == safeMaterialDO){ throw new EquipmentException(EquipmentResultCodes.DATA_NOT_EXIST,"该种物资不存在!"); } if(null == ValidTypeEnum.getByCode(req.getValidType())){ @@ -195,11 +206,13 @@ for(int i = 0;i < req.getWareHousingCount();i++){ SafeMaterialDetailInfo materialDetailInfo = new SafeMaterialDetailInfo(); materialDetailInfo.setId(IdUtil.getSnowflake(0,0).nextId()); - materialDetailInfo.setBigClassifyId(materialInfo.getBigClassifyId()); - materialDetailInfo.setSmallClassifyId(materialInfo.getSmallClassifyId()); - materialDetailInfo.setName(materialInfo.getMaterialName()); + materialDetailInfo.setBigClassifyId(safeMaterialDO.getBigClassifyId()); + materialDetailInfo.setSmallClassifyId(safeMaterialDO.getSmallClassifyId()); + materialDetailInfo.setName(safeMaterialDO.getMaterialName()); materialDetailInfo.setSmId(req.getSmId()); - materialDetailInfo.setConsumable(materialInfo.getConsumable()); + materialDetailInfo.setConsumable(safeMaterialDO.getConsumable()); + materialDetailInfo.setStatus(MaterialStatusEnum.INTACT.getCode()); + materialDetailInfo.setRemark(MaterialStatusEnum.INTACT.getValue()); materialDetailInfo.setValidType(req.getValidType()); if(req.getValidType().equals(ValidTypeEnum.SHORT_TERM.getCode())){ materialDetailInfo.setValidTime(req.getValidTime()); @@ -211,22 +224,22 @@ materialDetailInfo.setMaterialNo(generateMaterialNo(totalCount+i)); list.add(materialDetailInfo); } + //填充物资管理数据 + SafeMaterialBO safeMaterialBO = new SafeMaterialBO(); + safeMaterialBO.setId(req.getSmId()); + safeMaterialBO.setStockCount(req.getWareHousingCount()); + safeMaterialBO.setTotalCount(req.getWareHousingCount()); + //加分布式锁,防止重复创建规则 RLock lock = redissonClient.getLock("LOCK_SMD_SAVEBATCH"); try { lock.lock(10, TimeUnit.SECONDS); //批量入库 safeMaterialDetailInfoService.saveBatch(list); - //发送消息 - if(req.getValidType().equals(ValidTypeEnum.SHORT_TERM.getCode()) && null != req.getValidTime()){ - for(SafeMaterialDetailInfo materialDetailInfo:list){ - //发送消息 - SafeMaterialMsg safeMaterialMsg = new SafeMaterialMsg(); - safeMaterialMsg.setId(materialInfo.getId()); - safeMaterialMsg.setValidTime(conversionTimeType(materialDetailInfo.getValidTime())); - rocketMQTemplateHelper.syncSend(safeMaterialTopic,safeMaterialMsg); - } - } + //修改数量 + safeMaterialInfoService.updateCountById(safeMaterialBO); + //创建成功,释放锁 + lock.unlock(); }catch (EquipmentException e) { e.printStackTrace(); throw new EquipmentException(e.getCode(), e.getMessage()); @@ -261,9 +274,17 @@ }else{ if(req.getValidType().equals(ValidTypeEnum.SHORT_TERM.getCode()) && null == req.getValidTime()){ throw new EquipmentException(ResultCodes.CLIENT_PARAM_NULL,"有效期时间不可为空!"); + }else{ + if(req.getValidTime().before(new Date())){ + throw new EquipmentException(ResultCodes.CLIENT_PARAM_NULL,"有效期时间小于当前时间!"); + } } } } + //填充物资管理数据 + SafeMaterialBO safeMaterialBO = new SafeMaterialBO(); + safeMaterialBO.setId(vo.getSmId()); + safeMaterialBO.setStockCount(0); //填充数据 SafeMaterialDetailInfo safeMaterialDetailInfo = new SafeMaterialDetailInfo(); safeMaterialDetailInfo.setId(req.getId()); @@ -271,20 +292,29 @@ safeMaterialDetailInfo.setSmId(req.getSmId()); safeMaterialDetailInfo.setValidType(req.getValidType()); safeMaterialDetailInfo.setValidTime(req.getValidTime()); + if(ValidStatusEnum.NO.getCode().equals(vo.getValidStatus())){ + //无效情况 + if(vo.getStatus().equals(MaterialStatusEnum.OVERDUE.getCode())){ + //过期 + safeMaterialDetailInfo.setValidStatus(ValidStatusEnum.YES.getCode()); + safeMaterialDetailInfo.setStatus(MaterialStatusEnum.INTACT.getCode()); + safeMaterialDetailInfo.setRemark(MaterialStatusEnum.INTACT.getValue()); + safeMaterialBO.setStockCount(1); + } + } + + //加分布式锁,防止重复创建规则 RLock lock = redissonClient.getLock("LOCK_SMD_UPDATE"); try { lock.lock(10, TimeUnit.SECONDS); //修改 safeMaterialDetailInfoService.updateById(safeMaterialDetailInfo); - //如果是非常期 - if(req.getValidType().equals(ValidTypeEnum.SHORT_TERM.getCode()) && null != req.getValidTime()){ - //发送消息 - SafeMaterialMsg safeMaterialMsg = new SafeMaterialMsg(); - safeMaterialMsg.setId(req.getId()); - safeMaterialMsg.setValidTime(conversionTimeType(req.getValidTime())); - rocketMQTemplateHelper.syncSend(safeMaterialTopic,safeMaterialMsg); + if(null != safeMaterialBO){ + safeMaterialInfoService.updateCountById(safeMaterialBO); } + //创建成功,释放锁 + lock.unlock(); }catch (EquipmentException e) { e.printStackTrace(); throw new EquipmentException(e.getCode(), e.getMessage()); @@ -301,7 +331,7 @@ /** * 批量-重新入库 - * @param ids + * @param * @return */ @Override @@ -314,13 +344,15 @@ List<SafeMaterialDetailInfo> list = safeMaterialDetailInfoService.getListByIds(paramForm.getIds()); List<SafeMaterialDetailInfo> selectList = list .stream() - .filter(item -> item.getIrStatus().equals(IssueReceiptEnum.OUT_OF_LIBRARY.getCode()) && item.getConsumable().equals(ConsumableEnum.YES.getCode())) + .filter(item -> item.getIrStatus().equals(IssueReceiptEnum.OUT_OF_LIBRARY.getCode()) && item.getConsumable().equals(ConsumableEnum.NO.getCode())) .collect(Collectors.toList()); if(selectList.size() != paramForm.getIds().size()){ throw new EquipmentException(ResultCodes.CLIENT_PARAM_ILLEGAL,"已入库或耗材物资不可重复入库!"); } //修改为入库状态 safeMaterialDetailInfoService.updateReceiptStatusByIds(paramForm.getIds(),IssueReceiptEnum.IN_THE_LIBRARY.getCode()); + //创建成功,释放锁 + lock.unlock(); }catch (EquipmentException e) { e.printStackTrace(); throw new EquipmentException(e.getCode(), e.getMessage()); @@ -340,66 +372,39 @@ * @param * @return */ + @Transactional @Override - public ResultVO deleteBatch(ParamForm paramForm) { - safeMaterialDetailInfoService.deleteBatch(paramForm.getIds()); - return new ResultVO(ResultCodes.OK); - } - - /** - * 批量出库 - 根据ids - * @param req - * @return - */ - @Override - public ResultVO deliveryBatchByIds(MterialDeliveryReq req) { - //获取认领人信息 - UserInfoRPCRespDTO userInfo = getUserInfo(req.getClaimantId()); - //验证 - List<SafeMaterialDetailInfo> list = safeMaterialDetailInfoService.getListByIds(req.getIds()); - List<SafeMaterialDetailInfo> selectList = list - .stream() - .filter(item -> item.getIrStatus().equals(IssueReceiptEnum.IN_THE_LIBRARY.getCode()) && item.getValidStatus().equals(ValidStatusEnum.YES.getCode())) - .collect(Collectors.toList()); - if(selectList.size() != req.getIds().size()){ - throw new EquipmentException(ResultCodes.CLIENT_PARAM_ILLEGAL,"已出库物资或无效物资,不可出库!"); - } - SafeMaterialDetailBO detailBO = new SafeMaterialDetailBO(); - detailBO.setIds(req.getIds()); - detailBO.setClaimantName(userInfo.getUsername()); - detailBO.setClaimantId(req.getClaimantId()); - safeMaterialDetailInfoService.updateDeliveryStatusByIds(detailBO); - return new ResultVO(ResultCodes.OK); - } - - @Override - public ResultVO deliveryBatchRandom(MterialRandomDeliveryReq req) { - UserInfoRPCRespDTO userInfo = getUserInfo(req.getClaimantId()); - List<Long> idList = new ArrayList<>(); + public ResultVO deleteBatch(ContextCacheUser currentUser,ParamForm paramForm) { //加分布式锁,防止重复创建规则 - RLock lock = redissonClient.getLock("LOCK_SMD_DELIVERYBATCHRANDOM"); + RLock lock = redissonClient.getLock("LOCK_SMD_DELETEBATCH"); try { lock.lock(10, TimeUnit.SECONDS); - if(StringUtils.isNotBlank(req.getRfid())){ - idList = safeMaterialDetailInfoService.getIdListByRfid(req.getCount(),req.getSmId(),req.getRfid()); - - }else{ - idList = safeMaterialDetailInfoService.getRfidNullList(req.getCount(), req.getSmId()); - + //获取所有物资管理 + List<SafeMaterialInfo> safeMaterialInfoList = safeMaterialInfoService.listByDepId(currentUser.getDepId()); + List<Long> idList = paramForm.getIds(); + List<SafeMaterialDetailInfo> list = safeMaterialDetailInfoService.getListByIds(idList); + List<SafeMaterialDetailInfo> collect = list.stream().filter(item -> item.getIrStatus().equals(IssueReceiptEnum.OUT_OF_LIBRARY.getCode())).collect(Collectors.toList()); + if(collect.size()>0){ + throw new EquipmentException(ResultCodes.SERVER_DEL_ERROR,"出库物资不可删除!"); } - if(idList.size()< req.getCount()){ - throw new EquipmentException(ResultCodes.CLIENT_PARAM_ILLEGAL,"有效库存数量不足!"); + List<SafeMaterialBO> safeMaterialBOList = new ArrayList<>(); + for(SafeMaterialInfo materialInfo:safeMaterialInfoList){ + List<SafeMaterialDetailInfo> selectList = list.stream().filter(item -> item.getSmId().equals(materialInfo.getId())).collect(Collectors.toList()); + if(selectList.size()>0){ + //物资管理 + SafeMaterialBO safeMaterialBO = new SafeMaterialBO(); + safeMaterialBO.setId(materialInfo.getId()); + safeMaterialBO.setStockCount(-selectList.size()); + safeMaterialBO.setTotalCount(-selectList.size()); + safeMaterialBOList.add(safeMaterialBO); + } } - //获取有效数量 - Integer validStockCount = safeMaterialDetailInfoService.getValidStockCount(req.getSmId()); - if(req.getCount() > validStockCount){ - throw new EquipmentException(ResultCodes.CLIENT_PARAM_ILLEGAL,"出库数量不可大于有效库存数量!"); - } - SafeMaterialDetailBO detailBO = new SafeMaterialDetailBO(); - detailBO.setClaimantName(userInfo.getUsername()); - detailBO.setClaimantId(req.getClaimantId()); - detailBO.setIds(idList); - safeMaterialDetailInfoService.updateDeliveryStatusByIds(detailBO); + //删除 + safeMaterialDetailInfoService.deleteBatch(paramForm.getIds()); + //修改库存 + safeMaterialInfoService.updateStockCount(safeMaterialBOList); + //创建成功,释放锁 + lock.unlock(); }catch (EquipmentException e) { e.printStackTrace(); throw new EquipmentException(e.getCode(), e.getMessage()); @@ -412,6 +417,246 @@ } } return new ResultVO(ResultCodes.OK); + } + + /** + * 批量出库 - 根据ids + * @param req + * @return + */ + @Transactional + @Override + public void deliveryBatchByIds(MterialDeliveryReq req,ContextCacheUser currentUser) { + //获取认领人信息 + UserInfoRPCRespDTO userInfo = getUserInfo(req.getReceiveUid()); + //加分布式锁,防止重复创建规则 + RLock lock = redissonClient.getLock("LOCK_SMD_DELIVERYBATCHBYIDS"); + try { + lock.lock(10, TimeUnit.SECONDS); + //验证 + List<SafeMaterialDetailInfo> list = safeMaterialDetailInfoService.getListByIds(req.getIds()); + List<SafeMaterialDetailInfo> selectList = list + .stream() + .filter(item -> item.getIrStatus().equals(IssueReceiptEnum.IN_THE_LIBRARY.getCode()) && item.getValidStatus().equals(ValidStatusEnum.YES.getCode())) + .collect(Collectors.toList()); + if(selectList.size() != req.getIds().size()){ + throw new EquipmentException(ResultCodes.CLIENT_PARAM_ILLEGAL,"已出库物资或无效物资,不可出库!"); + } + //获取该部门的所管理物资 + List<SafeMaterialInfo> safeMaterialInfoList = safeMaterialInfoService.listByDepId(currentUser.getDepId()); + List<MaterialReceiveRecordsBaseInfo> receiveRecordsBaseInfoList = new ArrayList<>(); + List<MaterialReceiveRecordsInfo> receiveRecordsInfoList = new ArrayList<>(); + List<SafeMaterialBO> safeMaterialBOList = new ArrayList<>(); + List<SafeMaterialDetailInfo> safeMaterialDetailInfoList = new ArrayList<>(); + //循环 + for(SafeMaterialInfo safeMaterialInfo:safeMaterialInfoList){ + List<SafeMaterialDetailInfo> collectList = list.stream().filter(item -> safeMaterialInfo.getId().equals(item.getSmId())).collect(Collectors.toList()); + if(collectList.size()>0){ + //物资管理 + SafeMaterialBO safeMaterialBO = new SafeMaterialBO(); + safeMaterialBO.setId(safeMaterialInfo.getId()); + safeMaterialBO.setStockCount(-collectList.size()); + safeMaterialBOList.add(safeMaterialBO); + + //总记录 + MaterialReceiveRecordsBaseInfo receiveRecordsBaseInfo = new MaterialReceiveRecordsBaseInfo(); + receiveRecordsBaseInfo.setId(IdUtil.getSnowflake(0,0).nextId()); + receiveRecordsBaseInfo.setMaterialName(safeMaterialInfo.getMaterialName()); + receiveRecordsBaseInfo.setReceiveUid(userInfo.getUid()); + receiveRecordsBaseInfo.setReceiveUname(userInfo.getUsername()); + receiveRecordsBaseInfo.setReceiveCount(collectList.size()); + receiveRecordsBaseInfo.setRevertCount(0); + receiveRecordsBaseInfo.setConsumeCount(0); + if(ConsumableEnum.YES.getCode().equals(safeMaterialInfo.getConsumable())){ + receiveRecordsBaseInfo.setStatus(MaterialReceiveRecordsStatusEnum.CONSUMABLE_RETURN_NO.getCode()); + receiveRecordsBaseInfo.setConsumeCount(0); + }else{ + receiveRecordsBaseInfo.setStatus(MaterialReceiveRecordsStatusEnum.RETURN_NO.getCode()); + receiveRecordsBaseInfo.setConsumeCount(collectList.size()); + } + receiveRecordsBaseInfo.setSmId(safeMaterialInfo.getId()); + receiveRecordsBaseInfoList.add(receiveRecordsBaseInfo); + //循环详细物资 + for(SafeMaterialDetailInfo safeMaterialDetailInfo:collectList){ + //领取物资清单记录 + MaterialReceiveRecordsInfo materialReceiveRecordsInfo = new MaterialReceiveRecordsInfo(); + materialReceiveRecordsInfo.setId(IdUtil.getSnowflake(0,0).nextId()); + materialReceiveRecordsInfo.setMaterialName(safeMaterialDetailInfo.getName()); + materialReceiveRecordsInfo.setMaterialNo(safeMaterialDetailInfo.getMaterialNo()); + materialReceiveRecordsInfo.setReceiveBaseId(receiveRecordsBaseInfo.getId()); + if(ConsumableEnum.YES.getCode().equals(safeMaterialDetailInfo.getConsumable())){ + materialReceiveRecordsInfo.setRevertStatus(MaterialRevertStatusEnum.DEPLETION.getCode()); + materialReceiveRecordsInfo.setMaterialStatus(MaterialStatusEnum.OTHER.getCode()); + materialReceiveRecordsInfo.setRemark("耗材"); + }else{ + materialReceiveRecordsInfo.setRevertStatus(MaterialRevertStatusEnum.REVERT_NO.getCode()); + materialReceiveRecordsInfo.setMaterialStatus(MaterialStatusEnum.INTACT.getCode()); + materialReceiveRecordsInfo.setRemark(MaterialStatusEnum.INTACT.getValue()); + } + materialReceiveRecordsInfo.setReceiveTime(LocalDateTime.now()); + materialReceiveRecordsInfo.setReceiveUid(userInfo.getUid()); + materialReceiveRecordsInfo.setReceiveUname(userInfo.getUsername()); + materialReceiveRecordsInfo.setSmdId(safeMaterialDetailInfo.getId()); + materialReceiveRecordsInfo.setRfid(safeMaterialDetailInfo.getRfid()); + receiveRecordsInfoList.add(materialReceiveRecordsInfo); + //物资清单 + SafeMaterialDetailInfo materialDetailInfo = new SafeMaterialDetailInfo(); + materialDetailInfo.setId(safeMaterialDetailInfo.getId()); + materialDetailInfo.setReceiveUid(userInfo.getUid()); + materialDetailInfo.setReceiveUname(userInfo.getRealName()); + materialDetailInfo.setIrStatus(IssueReceiptEnum.OUT_OF_LIBRARY.getCode()); + materialDetailInfo.setDeliveryTime(LocalDateTime.now()); + if(ConsumableEnum.YES.getCode().equals(safeMaterialDetailInfo.getConsumable())){ + materialDetailInfo.setValidStatus(ValidStatusEnum.NO.getCode()); + materialDetailInfo.setStatus(MaterialStatusEnum.OTHER.getCode()); + materialDetailInfo.setRemark("耗材"); + } + safeMaterialDetailInfoList.add(materialDetailInfo); + } + + } + + } + //修改物资管理数量 + safeMaterialInfoService.updateStockCount(safeMaterialBOList); + //修改物资清单的状态 + safeMaterialDetailInfoService.updateBatchById(safeMaterialDetailInfoList); + //插入领取总记录 + materialReceiveRecordsBaseInfoService.saveBatch(receiveRecordsBaseInfoList); + //插入领取清单 + materialReceiveRecordsInfoService.saveBatch(receiveRecordsInfoList); + //创建成功,释放锁 + lock.unlock(); + }catch (EquipmentException e) { + e.printStackTrace(); + throw new EquipmentException(e.getCode(), e.getMessage()); + }catch (Exception e) { + e.printStackTrace(); + throw new BusinessException(ResultCodes.SERVER_ERROR); + }finally { + if(lock.isLocked()){ + lock.unlock(); + } + } + } + + + + @Transactional + @Override + public void deliveryBatchBySmId(MterialRandomDeliveryReq req,ContextCacheUser currentUser) { + SafeMaterialDO safeMaterialDO = safeMaterialInfoService.queryById(req.getSmId()); + if(null == safeMaterialDO){ + throw new EquipmentException(EquipmentResultCodes.DATA_NOT_EXIST,"物资不存在,无法出库!"); + } + SafeMaterialDetailDBQuery query = new SafeMaterialDetailDBQuery(); + query.setSmId(safeMaterialDO.getId()); + query.setCount(req.getCount()); + query.setRfid(req.getRfid()); + query.setIrStatus(IssueReceiptEnum.IN_THE_LIBRARY.getCode()); + query.setValidStatus(ValidStatusEnum.YES.getCode()); + UserInfoRPCRespDTO userInfo = getUserInfo(req.getReceiveUid()); + List<SafeMaterialDetailInfo> safeMaterialDetailInfoList = new ArrayList<>(); + //加分布式锁,防止重复创建规则 + RLock lock = redissonClient.getLock("LOCK_SMD_DELIVERYBATCHRANDOM"); + try { + lock.lock(10, TimeUnit.SECONDS); + //获取有效数量 + Integer validStockCount = safeMaterialDetailInfoService.getValidStockCount(req.getSmId()); + if(req.getCount() > validStockCount){ + throw new EquipmentException(ResultCodes.CLIENT_PARAM_ILLEGAL,"出库数量不可大于有效库存数量!"); + } + if(StringUtils.isNotBlank(req.getRfid())){ + safeMaterialDetailInfoList = safeMaterialDetailInfoService.getListBySmIdAndRfid(query); + }else{ + safeMaterialDetailInfoList = safeMaterialDetailInfoService.getListBySmId(query); + } + if(safeMaterialDetailInfoList.size()< req.getCount()){ + throw new EquipmentException(ResultCodes.CLIENT_PARAM_ILLEGAL,"库存数量不足!"); + } + //物资管理 + SafeMaterialBO safeMaterialBO = new SafeMaterialBO(); + safeMaterialBO.setId(req.getSmId()); + safeMaterialBO.setStockCount(-req.getCount()); + //领取记录 + MaterialReceiveRecordsBaseInfo receiveRecordsBaseInfo = new MaterialReceiveRecordsBaseInfo(); + receiveRecordsBaseInfo.setId(IdUtil.getSnowflake(0,0).nextId()); + receiveRecordsBaseInfo.setMaterialName(safeMaterialDO.getMaterialName()); + receiveRecordsBaseInfo.setReceiveUid(userInfo.getUid()); + receiveRecordsBaseInfo.setReceiveUname(userInfo.getUsername()); + receiveRecordsBaseInfo.setReceiveCount(req.getCount()); + receiveRecordsBaseInfo.setRevertCount(0); + receiveRecordsBaseInfo.setConsumeCount(0); + if(ConsumableEnum.YES.getCode().equals(safeMaterialDO.getConsumable())){ + receiveRecordsBaseInfo.setStatus(MaterialReceiveRecordsStatusEnum.CONSUMABLE_RETURN_NO.getCode()); + receiveRecordsBaseInfo.setConsumeCount(req.getCount()); + }else{ + receiveRecordsBaseInfo.setStatus(MaterialReceiveRecordsStatusEnum.RETURN_NO.getCode()); + receiveRecordsBaseInfo.setConsumeCount(0); + + } + receiveRecordsBaseInfo.setSmId(safeMaterialDO.getId()); + //物资领取清单 + List<MaterialReceiveRecordsInfo> receiveRecordsInfoList = new ArrayList<>(); + //物资清单 + List<SafeMaterialDetailInfo> updateDetailList = new ArrayList<>(); + for(SafeMaterialDetailInfo safeMaterialDetailInfo:safeMaterialDetailInfoList){ + //领取物资清单记录 + MaterialReceiveRecordsInfo materialReceiveRecordsInfo = new MaterialReceiveRecordsInfo(); + materialReceiveRecordsInfo.setId(IdUtil.getSnowflake(0,0).nextId()); + materialReceiveRecordsInfo.setMaterialName(safeMaterialDetailInfo.getName()); + materialReceiveRecordsInfo.setMaterialNo(safeMaterialDetailInfo.getMaterialNo()); + materialReceiveRecordsInfo.setReceiveBaseId(receiveRecordsBaseInfo.getId()); + if(ConsumableEnum.YES.getCode().equals(safeMaterialDetailInfo.getConsumable())){ + materialReceiveRecordsInfo.setRevertStatus(MaterialRevertStatusEnum.DEPLETION.getCode()); + materialReceiveRecordsInfo.setMaterialStatus(MaterialStatusEnum.OTHER.getCode()); + materialReceiveRecordsInfo.setRemark("耗材"); + }else{ + materialReceiveRecordsInfo.setRevertStatus(MaterialRevertStatusEnum.REVERT_NO.getCode()); + materialReceiveRecordsInfo.setMaterialStatus(MaterialStatusEnum.INTACT.getCode()); + materialReceiveRecordsInfo.setRemark(MaterialStatusEnum.INTACT.getValue()); + } + materialReceiveRecordsInfo.setReceiveTime(LocalDateTime.now()); + materialReceiveRecordsInfo.setReceiveUid(userInfo.getUid()); + materialReceiveRecordsInfo.setReceiveUname(userInfo.getUsername()); + materialReceiveRecordsInfo.setSmdId(safeMaterialDetailInfo.getId()); + materialReceiveRecordsInfo.setRfid(safeMaterialDetailInfo.getRfid()); + receiveRecordsInfoList.add(materialReceiveRecordsInfo); + //物资清单 + SafeMaterialDetailInfo materialDetailInfo = new SafeMaterialDetailInfo(); + materialDetailInfo.setId(safeMaterialDetailInfo.getId()); + materialDetailInfo.setReceiveUid(userInfo.getUid()); + materialDetailInfo.setReceiveUname(userInfo.getRealName()); + materialDetailInfo.setIrStatus(IssueReceiptEnum.OUT_OF_LIBRARY.getCode()); + materialDetailInfo.setDeliveryTime(LocalDateTime.now()); + if(ConsumableEnum.YES.getCode().equals(safeMaterialDetailInfo.getConsumable())){ + materialDetailInfo.setValidStatus(ValidStatusEnum.NO.getCode()); + materialDetailInfo.setStatus(MaterialStatusEnum.OTHER.getCode()); + materialDetailInfo.setRemark("耗材"); + } + updateDetailList.add(materialDetailInfo); + } + //修改物资清单状态 + safeMaterialDetailInfoService.updateBatchById(updateDetailList); + //修改物资管理库存 + safeMaterialInfoService.updateCountById(safeMaterialBO); + //插入领取总记录 + materialReceiveRecordsBaseInfoService.save(receiveRecordsBaseInfo); + //插入领取清单 + materialReceiveRecordsInfoService.saveBatch(receiveRecordsInfoList); + //创建成功,释放锁 + lock.unlock(); + }catch (EquipmentException e) { + e.printStackTrace(); + throw new EquipmentException(e.getCode(), e.getMessage()); + }catch (Exception e) { + e.printStackTrace(); + throw new BusinessException(ResultCodes.SERVER_ERROR); + }finally { + if(lock.isLocked()){ + lock.unlock(); + } + } } /** @@ -494,9 +739,9 @@ ids.addAll(collect); } } - SafeMaterialDetailBO detailBO = new SafeMaterialDetailBO(); - detailBO.setClaimantName(userInfo.getUsername()); - detailBO.setClaimantId(req.getClaimantId()); + SafeMaterialBatchDeliveryBO detailBO = new SafeMaterialBatchDeliveryBO(); + detailBO.setReceiveUname(userInfo.getUsername()); + detailBO.setReceiveUid(req.getClaimantId()); detailBO.setIds(ids); safeMaterialDetailInfoService.updateDeliveryStatusByIds(detailBO); @@ -528,9 +773,32 @@ } @Override - public SearchResultVO<List<SafeMaterialDetailDto>> listByPage(PageQuery<SafeMatetrialDetailQuery> pageQuery) { + @Transactional + public SearchResultVO<List<SafeMaterialDetailDto>> listByPage(ContextCacheUser currentUser,PageQuery<SafeMatetrialDetailQuery> pageQuery) { + SafeMaterialDetailDBQuery dbQuery = new SafeMaterialDetailDBQuery(); + if(null != pageQuery.getSearchParams()){ + BeanUtils.copyProperties(pageQuery.getSearchParams(),dbQuery); + dbQuery.setDepId(currentUser.getDepId()); + } + dbQuery.setDepId(currentUser.getDepId()); + //加分布式锁,防止重复创建规则 + RLock lock = redissonClient.getLock("LOCK_SMD_MATERIALEXPIRED"); + try { + lock.lock(10, TimeUnit.SECONDS); + //执行无效物资过期 + this.materialExpired(); + //创建成功,释放锁 + lock.unlock(); + }catch (Exception e) { + e.printStackTrace(); + throw new BusinessException(ResultCodes.SERVER_ERROR); + }finally { + if(lock.isLocked()){ + lock.unlock(); + } + } Page<SafeMaterialDetailInfo> page = new Page(pageQuery.getPageIndex(),pageQuery.getPageSize()); - List<SafeMaterialDetailInfoDO> safeMaterialDetailInfoDOS = safeMaterialDetailInfoService.listByPage(page, pageQuery.getSearchParams()); + List<SafeMaterialDetailInfoDO> safeMaterialDetailInfoDOS = safeMaterialDetailInfoService.listByPage(page, dbQuery); List<SafeMaterialDetailDto> detailDtoList = new ArrayList<>(); for(SafeMaterialDetailInfoDO materialDetailInfoDO : safeMaterialDetailInfoDOS){ SafeMaterialDetailDto materialDetailDto = new SafeMaterialDetailDto(); @@ -539,11 +807,53 @@ materialDetailDto.setValidStatusName(ValidStatusEnum.getByCode(materialDetailInfoDO.getValidStatus()).getValue()); materialDetailDto.setValidTypeName(ValidTypeEnum.getByCode(materialDetailInfoDO.getValidType()).getValue()); materialDetailDto.setIrStatusName(IssueReceiptEnum.getByCode(materialDetailInfoDO.getIrStatus()).getValue()); + materialDetailDto.setStatusName(MaterialStatusEnum.getByCode(materialDetailInfoDO.getStatus()).getValue()); detailDtoList.add(materialDetailDto); } return new SearchResultVO<>(true, page.getCurrent(),page.getSize(), page.getPages(),page.getTotal(),detailDtoList,ResultCodes.OK); } - + private void materialExpired(){ + //获取所有物资管理 + List<SafeMaterialInfo> list = safeMaterialInfoService.list(); + //获取在库有效物资 + List<SafeMaterialDetailInfo> unValidList = safeMaterialDetailInfoService.getUnValidList(); + if(unValidList.size()>0){ + List<SafeMaterialBO> safeMaterialBOList = new ArrayList<>(); + List<SafeMaterialDetailInfo> updateValidStatusList = new ArrayList<>(); + for(SafeMaterialInfo safeMaterialInfo:list){ + //过滤出该管理下过期物资 + List<SafeMaterialDetailInfo> expiredList = unValidList.stream().filter(item -> item.getSmId().equals(safeMaterialInfo.getId())).collect(Collectors.toList()); + if(expiredList.size()>0){ + //过滤非出库无效物资 + List<SafeMaterialDetailInfo> expiredAndInLibraryList = expiredList.stream().filter(item -> item.getIrStatus().equals(IssueReceiptEnum.IN_THE_LIBRARY.getCode())).collect(Collectors.toList()); + if(expiredAndInLibraryList.size()>0){ + //物资管理 + SafeMaterialBO safeMaterialBO = new SafeMaterialBO(); + safeMaterialBO.setId(safeMaterialInfo.getId()); + safeMaterialBO.setStockCount(-expiredAndInLibraryList.size()); + safeMaterialBOList.add(safeMaterialBO); + } + //物资清单 + for(SafeMaterialDetailInfo detailInfo:expiredList){ + SafeMaterialDetailInfo safeMaterialDetailInfo = new SafeMaterialDetailInfo(); + safeMaterialDetailInfo.setId(detailInfo.getId()); + safeMaterialDetailInfo.setValidStatus(ValidStatusEnum.NO.getCode()); + if(detailInfo.getStatus().equals(MaterialStatusEnum.INTACT.getCode())){ + safeMaterialDetailInfo.setStatus(MaterialStatusEnum.OVERDUE.getCode()); + safeMaterialDetailInfo.setRemark(MaterialStatusEnum.OVERDUE.getValue()); + } + updateValidStatusList.add(safeMaterialDetailInfo); + } + } + } + if(safeMaterialBOList.size()>0){ + safeMaterialInfoService.updateStockCount(safeMaterialBOList); + } + if(updateValidStatusList.size()>0){ + safeMaterialDetailInfoService.updateBatchById(updateValidStatusList); + } + } + } @Override public ResultVO queryById(Long id) { if(null == id){ @@ -552,18 +862,19 @@ SafeMaterialDetailInfo materialDetailInfo = safeMaterialDetailInfoService.queryById(id); SafeMaterialDetailDto detailDto = new SafeMaterialDetailDto(); if(materialDetailInfo != null){ - SafeMaterialInfo materialInfo = safeMaterialInfoService.queryById(materialDetailInfo.getSmId()); + SafeMaterialDO safeMaterialDO = safeMaterialInfoService.queryById(materialDetailInfo.getSmId()); SafeMaterialClassifyInfo classifyInfo = safeMaterialClassifyInfoService.queryById(materialDetailInfo.getBigClassifyId()); BeanUtils.copyProperties(materialDetailInfo,detailDto); detailDto.setConsumableName(ConsumableEnum.getByCode(materialDetailInfo.getConsumable()).getValue()); detailDto.setValidStatusName(ValidStatusEnum.getByCode(materialDetailInfo.getValidStatus()).getValue()); detailDto.setValidTypeName(ValidTypeEnum.getByCode(materialDetailInfo.getValidType()).getValue()); detailDto.setIrStatusName(IssueReceiptEnum.getByCode(materialDetailInfo.getIrStatus()).getValue()); - if(materialInfo != null){ - detailDto.setDepName(materialInfo.getDepName()); + detailDto.setStatusName(MaterialStatusEnum.getByCode(materialDetailInfo.getStatus()).getValue()); + if(safeMaterialDO != null){ + detailDto.setDepName(safeMaterialDO.getDepName()); } if(classifyInfo != null){ - detailDto.setMaterialClassifyName(classifyInfo.getMaterialClassifyName()); + detailDto.setBigClassifyName(classifyInfo.getMaterialClassifyName()); } } @@ -576,7 +887,11 @@ * @return */ @Override - public ResultVO singleDelivery(SafeMaterialDetailReq req) { + @Transactional + public void singleDelivery(ContextCacheUser currentUser,SafeMaterialDetailReq req) { + if(null == req.getReceiveUid()){ + throw new EquipmentException(ResultCodes.CLIENT_PARAM_NULL,"领取人不可为空!"); + } //加分布式锁,防止重复创建规则 RLock lock = redissonClient.getLock("LOCK_SMD_SINGLEDELIVERY"); try { @@ -593,15 +908,68 @@ throw new EquipmentException(EquipmentResultCodes.MATERIAL_OUT_OF_LIBRARY); } //检查认领人 - UserInfoRPCRespDTO userInfo = getUserInfo(req.getClaimantId()); + UserInfoRPCRespDTO userInfo = getUserInfo(req.getReceiveUid()); + //详细物资 SafeMaterialDetailInfo materialDetailInfo = new SafeMaterialDetailInfo(); materialDetailInfo.setId(req.getId()); materialDetailInfo.setIrStatus(IssueReceiptEnum.OUT_OF_LIBRARY.getCode()); - materialDetailInfo.setClaimantId(req.getClaimantId()); - materialDetailInfo.setClaimantName(userInfo.getUsername()); + materialDetailInfo.setReceiveUid(req.getReceiveUid()); + materialDetailInfo.setReceiveUname(userInfo.getUsername()); materialDetailInfo.setDeliveryTime(LocalDateTime.now()); + + //物资管理库存数量 + SafeMaterialBO safeMaterialBO = new SafeMaterialBO(); + safeMaterialBO.setId(vo.getSmId()); + safeMaterialBO.setStockCount(-1); + //出库记录 + MaterialReceiveRecordsBaseInfo receiveRecordsBaseInfo = new MaterialReceiveRecordsBaseInfo(); + receiveRecordsBaseInfo.setId(IdUtil.getSnowflake(0,0).nextId()); + receiveRecordsBaseInfo.setMaterialName(vo.getName()); + receiveRecordsBaseInfo.setReceiveCount(1); + receiveRecordsBaseInfo.setRevertCount(0); + receiveRecordsBaseInfo.setConsumeCount(0); + receiveRecordsBaseInfo.setReceiveUid(userInfo.getUid()); + receiveRecordsBaseInfo.setReceiveUname(userInfo.getUsername()); + receiveRecordsBaseInfo.setSmId(vo.getSmId()); + //出库物资记录 + MaterialReceiveRecordsInfo receiveRecordsInfo = new MaterialReceiveRecordsInfo(); + receiveRecordsInfo.setId(IdUtil.getSnowflake(0,0).nextId()); + receiveRecordsInfo.setMaterialName(vo.getName()); + receiveRecordsInfo.setMaterialNo(vo.getMaterialNo()); + receiveRecordsInfo.setRfid(vo.getRfid()); + receiveRecordsInfo.setReceiveTime(LocalDateTime.now()); + receiveRecordsInfo.setReceiveUid(userInfo.getUid()); + receiveRecordsInfo.setReceiveUname(userInfo.getUsername()); + receiveRecordsInfo.setReceiveBaseId(receiveRecordsBaseInfo.getId()); + receiveRecordsInfo.setSmdId(vo.getId()); + + if(vo.getConsumable().equals(ConsumableEnum.YES.getCode())){ + //耗材 + materialDetailInfo.setValidStatus(ValidStatusEnum.NO.getCode()); + materialDetailInfo.setStatus(MaterialStatusEnum.OTHER.getCode()); + materialDetailInfo.setRemark("耗材"); + receiveRecordsBaseInfo.setStatus(MaterialReceiveRecordsStatusEnum.CONSUMABLE_RETURN_NO.getCode()); + receiveRecordsInfo.setRevertStatus(MaterialRevertStatusEnum.DEPLETION.getCode()); + receiveRecordsInfo.setMaterialStatus(MaterialStatusEnum.OTHER.getCode()); + receiveRecordsInfo.setRemark("耗材"); + }else{ + //默认未归还 + receiveRecordsBaseInfo.setStatus(MaterialReceiveRecordsStatusEnum.RETURN_NO.getCode()); + receiveRecordsInfo.setRevertStatus(MaterialRevertStatusEnum.REVERT_NO.getCode()); + receiveRecordsInfo.setMaterialStatus(MaterialStatusEnum.INTACT.getCode()); + receiveRecordsInfo.setRemark(MaterialStatusEnum.INTACT.getValue()); + } + //修改出入库状态为出库 safeMaterialDetailInfoService.updateById(materialDetailInfo); + //修改物资管理库存 + safeMaterialInfoService.updateCountById(safeMaterialBO); + //物资领取总记录 + materialReceiveRecordsBaseInfoService.save(receiveRecordsBaseInfo); + //物资详细清单 + materialReceiveRecordsInfoService.save(receiveRecordsInfo); + //创建成功,释放锁 + lock.unlock(); }catch (EquipmentException e) { e.printStackTrace(); throw new EquipmentException(e.getCode(), e.getMessage()); @@ -613,7 +981,6 @@ lock.unlock(); } } - return new ResultVO<>(ResultCodes.OK); } /** @@ -623,7 +990,8 @@ */ @Override - public ResultVO singleReceipt(Long id) { + @Transactional + public void singleReceipt(Long id,ContextCacheUser currentUser) { if(null == id){ throw new EquipmentException(ResultCodes.CLIENT_PARAM_NULL); } @@ -634,7 +1002,7 @@ //获取该条数据 SafeMaterialDetailInfo vo = safeMaterialDetailInfoService.queryById(id); if(null == vo){ - throw new EquipmentException(EquipmentResultCodes.DATA_NOT_EXIST); + throw new EquipmentException(EquipmentResultCodes.DATA_NOT_EXIST,"未查询到该物资出库记录"); } //如果是耗材不可重新入库 if(vo.getConsumable().equals(ConsumableEnum.YES.getCode())){ @@ -643,8 +1011,60 @@ if(vo.getIrStatus().equals(IssueReceiptEnum.IN_THE_LIBRARY.getCode())){ throw new EquipmentException(EquipmentResultCodes.MATERIAL_IN_THE_LIBRARY); } + //物资管理库存数量 + SafeMaterialBO safeMaterialBO = new SafeMaterialBO(); + safeMaterialBO.setId(vo.getSmId()); + safeMaterialBO.setStockCount(1); + + //获取物资总记录数据 + MaterialDeliveryRecordDO deliveryRecordDO = materialReceiveRecordsInfoService.getRecordBySmdId(id); + SafeMaterialDetailInfo safeMaterialDetailInfo = new SafeMaterialDetailInfo(); + safeMaterialDetailInfo.setId(vo.getId()); + safeMaterialDetailInfo.setIrStatus(IssueReceiptEnum.IN_THE_LIBRARY.getCode()); + safeMaterialDetailInfo.setWareHousingTime(LocalDateTime.now()); + if(null == deliveryRecordDO){ + //无领取记录 + if (vo.getValidStatus().equals(ValidStatusEnum.NO.getCode())) {//无效 + if(vo.getStatus().equals(MaterialStatusEnum.OVERDUE.getCode())){//过期 + safeMaterialBO.setStockCount(0); + }else{ + //其他情况,重新入库则改成有效 + safeMaterialDetailInfo.setValidStatus(ValidStatusEnum.YES.getCode()); + safeMaterialDetailInfo.setStatus(MaterialStatusEnum.INTACT.getCode()); + safeMaterialDetailInfo.setRemark(MaterialStatusEnum.INTACT.getValue()); + } + } + + }else{ + //有领取记录,则归还 + //获取未归还物资详细记录 + List<MaterialReceiveRecordsInfo> recordsInfos = materialReceiveRecordsInfoService.getNoReturnRecordByReceiveBaseId(deliveryRecordDO.getReceiveBaseId()); + //领取总记录填充 + MaterialReceiveRecordsBaseInfo receiveRecordsBaseInfo = new MaterialReceiveRecordsBaseInfo(); + receiveRecordsBaseInfo.setId(deliveryRecordDO.getReceiveBaseId()); + if(recordsInfos.size() > 1) { + receiveRecordsBaseInfo.setStatus(MaterialReceiveRecordsStatusEnum.RETURN_PART.getCode()); + }else { + receiveRecordsBaseInfo.setStatus(MaterialReceiveRecordsStatusEnum.RETURN_COMPLETE.getCode()); + } + receiveRecordsBaseInfo.setRevertCount(deliveryRecordDO.getRevertCount()+1); + materialReceiveRecordsBaseInfoService.updateById(receiveRecordsBaseInfo); + //详细物资领取记录 + MaterialReceiveRecordsInfo receiveRecordsInfo = new MaterialReceiveRecordsInfo(); + receiveRecordsInfo.setId(deliveryRecordDO.getReceiveId()); + receiveRecordsInfo.setRevertStatus(MaterialRevertStatusEnum.REVERT_YES.getCode()); + receiveRecordsInfo.setRevertTime(LocalDateTime.now()); + receiveRecordsInfo.setMaterialStatus(MaterialStatusEnum.INTACT.getCode()); + receiveRecordsInfo.setRemark(MaterialStatusEnum.INTACT.getValue()); + materialReceiveRecordsInfoService.updateById(receiveRecordsInfo); + } + //修改出入库状态为入库 - safeMaterialDetailInfoService.updateReceiptStatus(id,IssueReceiptEnum.IN_THE_LIBRARY.getCode()); + safeMaterialDetailInfoService.updateById(safeMaterialDetailInfo); + //修改物资管理库存 + safeMaterialInfoService.updateCountById(safeMaterialBO); + //创建成功,释放锁 + lock.unlock(); }catch (EquipmentException e) { e.printStackTrace(); throw new EquipmentException(e.getCode(), e.getMessage()); @@ -656,62 +1076,8 @@ lock.unlock(); } } - return new ResultVO<>(ResultCodes.OK); + } - - @Override - public ResultVO singleDdelivery0rReceipt(SafeMaterialDetailReq req) { - if(null == IssueReceiptEnum.getByCode(req.getIrStatus())){ - throw new EquipmentException(ResultCodes.CLIENT_PARAM_ILLEGAL,"物资状态不合法"); - } - - //获取该条数据 - SafeMaterialDetailInfo vo = safeMaterialDetailInfoService.queryById(req.getId()); - if(null == vo){ - throw new EquipmentException(EquipmentResultCodes.DATA_NOT_EXIST); - } - if(null == IssueReceiptEnum.getByCode(req.getIrStatus())){ - throw new EquipmentException(ResultCodes.CLIENT_PARAM_ILLEGAL,"出入库状态不合法"); - } - - 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); - } - - //修改出入库状态为入库 - safeMaterialDetailInfoService.updateReceiptStatus(req.getId(), req.getIrStatus()); - }else{ - //出库 - if(vo.getValidStatus().equals(ValidStatusEnum.NO.getCode())){ - throw new EquipmentException(EquipmentResultCodes.MATERIAL_INVALID,"无效物资不可出库"); - } - if(vo.getIrStatus().equals(req.getIrStatus())){ - throw new EquipmentException(EquipmentResultCodes.MATERIAL_OUT_OF_LIBRARY); - } - if(null == req.getClaimantId()){ - throw new EquipmentException(ResultCodes.CLIENT_PARAM_NULL,"认领人不可为空!"); - } - //检查认领人 - UserInfoRPCRespDTO userInfo = getUserInfo(req.getClaimantId()); - //出库 - SafeMaterialDetailInfo materialDetailInfo = new SafeMaterialDetailInfo(); - materialDetailInfo.setId(req.getId()); - materialDetailInfo.setIrStatus(req.getIrStatus()); - materialDetailInfo.setClaimantId(req.getClaimantId()); - materialDetailInfo.setClaimantName(userInfo.getUsername()); - materialDetailInfo.setDeliveryTime(LocalDateTime.now()); - //修改出入库状态为入库 - safeMaterialDetailInfoService.updateById(materialDetailInfo); - } - return new ResultVO<>(ResultCodes.OK); - } - /** @@ -719,21 +1085,55 @@ * @param * @return */ + @Transactional + @Override public ResultVO delete(Long id){ if(null == id){ throw new EquipmentException(ResultCodes.CLIENT_PARAM_NULL); } - //获取该条数据 - SafeMaterialDetailInfo vo = safeMaterialDetailInfoService.queryById(id); - if(null == vo){ - throw new EquipmentException(EquipmentResultCodes.DATA_NOT_EXIST); - } - SafeMaterialDetailInfo materialDetailInfo = new SafeMaterialDetailInfo(); - materialDetailInfo.setId(id); - materialDetailInfo.setDelFlag(1); - //删除一条数据 - safeMaterialDetailInfoService.updateById(materialDetailInfo); + //加分布式锁,防止重复创建规则 + RLock lock = redissonClient.getLock("LOCK_SMD_DELETE"); + try { + //获取该条数据 + SafeMaterialDetailInfo vo = safeMaterialDetailInfoService.queryById(id); + if(null == vo){ + throw new EquipmentException(EquipmentResultCodes.DATA_NOT_EXIST); + } + if(vo.getIrStatus().equals(IssueReceiptEnum.OUT_OF_LIBRARY.getCode())){ + throw new EquipmentException(ResultCodes.SERVER_DEL_ERROR,"出库物资不可删除!"); + } + SafeMaterialDetailInfo materialDetailInfo = new SafeMaterialDetailInfo(); + materialDetailInfo.setId(id); + materialDetailInfo.setDelFlag(1); + //物资管理库存数量 + SafeMaterialBO safeMaterialBO = new SafeMaterialBO(); + safeMaterialBO.setId(vo.getSmId()); + if(vo.getValidStatus().equals(ValidStatusEnum.YES.getCode())){ + //有效 + safeMaterialBO.setStockCount(-1); + safeMaterialBO.setTotalCount(-1); + }else{ + //无效 + safeMaterialBO.setTotalCount(-1); + } + //删除一条数据 + safeMaterialDetailInfoService.updateById(materialDetailInfo); + //减少库存 + safeMaterialInfoService.updateCountById(safeMaterialBO); + //创建成功,释放锁 + lock.unlock(); + }catch (EquipmentException e) { + e.printStackTrace(); + throw new EquipmentException(e.getCode(), e.getMessage()); + }catch (Exception e) { + e.printStackTrace(); + throw new BusinessException(ResultCodes.SERVER_ERROR); + }finally { + if(lock.isLocked()){ + lock.unlock(); + } + } return new ResultVO<>(ResultCodes.OK); } @@ -764,7 +1164,7 @@ if (rpcResult.getData() != null) { userInfo = (UserInfoRPCRespDTO) rpcResult.getData(); }else { - throw new EquipmentException(EquipmentResultCodes.DATA_NOT_EXIST,"认领人员不存在!"); + throw new EquipmentException(EquipmentResultCodes.DATA_NOT_EXIST,"领取人员不存在!"); } } else { throw new EquipmentException(ResultCodes.RPC_RESULT_NULL); @@ -777,12 +1177,14 @@ return null; } String serialCode = null; + String prefix = "NO-"; if(count >= 10000){ serialCode = "" + (count+1); }else if(count >=0){ String countStr = String.valueOf(count+1); serialCode = "10000".substring(0,(5 - countStr.length()))+countStr; } + serialCode = prefix + serialCode; return serialCode; } private Date conversionTimeType(LocalDateTime localDateTime){ -- Gitblit v1.9.2