package com.gkhy.safePlatform.equipment.service.impl; import cn.hutool.core.util.IdUtil; 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.enums.ResultCodes; 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.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 org.apache.dubbo.config.annotation.DubboReference; import org.apache.rocketmq.spring.core.RocketMQTemplate; 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; import java.time.LocalDateTime; import java.time.ZoneId; import java.time.ZonedDateTime; import java.util.*; import java.util.stream.Collectors; @Service("SafeMaterialDetailService") public class SafeMaterialDetailServiceImpl implements SafeMaterialDetailService { @Autowired private SafeMaterialInfoService safeMaterialInfoService; @Autowired private SafeMaterialDetailInfoService safeMaterialDetailInfoService; @Autowired private SafeMaterialClassifyInfoService safeMaterialClassifyInfoService; @Value("${rocketmq.topic.safeMaterialTopic}") private String safeMaterialTopic; @DubboReference(check = false) private AccountUserService accountUserService; @Autowired private RocketMQTemplateHelper rocketMQTemplateHelper; @Override public ResultVO save(SafeMaterialDetailAddReq req) { //判断物资是否存在 SafeMaterialInfo materialInfo = safeMaterialInfoService.queryById(req.getSmId()); if(null == materialInfo){ throw new EquipmentException(EquipmentResultCodes.DATA_NOT_EXIST,"该种物资不存在!"); } if(null == ValidTypeEnum.getByCode(req.getValidType())){ throw new EquipmentException(ResultCodes.CLIENT_PARAM_ILLEGAL,"有效期类型不合法!"); } if(req.getValidType().equals(ValidTypeEnum.SHORT_TERM.getCode()) && null == req.getValidTime()){ throw new EquipmentException(ResultCodes.CLIENT_PARAM_NULL,"有效期时间不可为空!"); } //获取数据量 Integer totalCount = safeMaterialDetailInfoService.getTotalCount(); List list = new ArrayList<>(); //RFID起始不为空计算一下 if(StringUtils.isNotBlank(req.getStartRfid()) && StringUtils.isNotBlank(req.getEndRfid())){ int start = 0; int end = 0; String prefix = ""; try{ prefix = req.getStartRfid().substring(0,req.getStartRfid().length()-8); start = Integer.parseInt(req.getStartRfid().substring(req.getStartRfid().length()-8)); end = Integer.parseInt(req.getEndRfid().substring(req.getEndRfid().length()-8)); }catch (Exception e){ throw new EquipmentException(ResultCodes.CLIENT_PARAM_ILLEGAL,"起始RFID不合法!"); } if((end-start+1) != req.getWareHousingCount()){ throw new EquipmentException(ResultCodes.CLIENT_PARAM_ILLEGAL,"RFID起始和入库数量不能对应!"); } for(int i = 0;i < req.getWareHousingCount();i++){ String countStr = String.valueOf(start+i); 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.setSmId(req.getSmId()); materialDetailInfo.setConsumable(materialInfo.getConsumable()); materialDetailInfo.setValidType(req.getValidType()); if(req.getValidType().equals(ValidTypeEnum.SHORT_TERM.getCode())){ materialDetailInfo.setValidTime(req.getValidTime()); } materialDetailInfo.setValidStatus(ValidStatusEnum.YES.getCode()); materialDetailInfo.setIrStatus(IssueReceiptEnum.IN_THE_LIBRARY.getCode()); materialDetailInfo.setWareHousingTime(LocalDateTime.now()); materialDetailInfo.setRfid(prefix+rfid); materialDetailInfo.setMaterialNo(generateMaterialNo(totalCount+i)); list.add(materialDetailInfo); } }else{ //不分配FRID 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.setSmId(req.getSmId()); materialDetailInfo.setConsumable(materialInfo.getConsumable()); materialDetailInfo.setValidType(req.getValidType()); if(req.getValidType().equals(ValidTypeEnum.SHORT_TERM.getCode())){ materialDetailInfo.setValidTime(req.getValidTime()); } materialDetailInfo.setValidStatus(ValidStatusEnum.YES.getCode()); materialDetailInfo.setIrStatus(IssueReceiptEnum.IN_THE_LIBRARY.getCode()); materialDetailInfo.setWareHousingTime(LocalDateTime.now()); materialDetailInfo.setMaterialNo(generateMaterialNo(totalCount+i)); list.add(materialDetailInfo); } } //批量入库 safeMaterialDetailInfoService.saveBatch(list); //发送消息 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); } } return new ResultVO<>(ResultCodes.OK); } /** * 批量入库 * @param req * @return */ @Override public ResultVO saveBatch(SafeMaterialDetailAddReq req) { //判断物资是否存在 SafeMaterialInfo materialInfo = safeMaterialInfoService.queryById(req.getSmId()); if(null == materialInfo){ throw new EquipmentException(EquipmentResultCodes.DATA_NOT_EXIST,"该种物资不存在!"); } if(null == ValidTypeEnum.getByCode(req.getValidType())){ throw new EquipmentException(ResultCodes.CLIENT_PARAM_ILLEGAL,"有效期类型不合法!"); } if(req.getValidType().equals(ValidTypeEnum.SHORT_TERM.getCode()) && null == req.getValidTime()){ throw new EquipmentException(ResultCodes.CLIENT_PARAM_NULL,"有效期时间不可为空!"); } //获取数据量 Integer totalCount = safeMaterialDetailInfoService.getTotalCount(); List list = new ArrayList<>(); 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.setSmId(req.getSmId()); materialDetailInfo.setConsumable(materialInfo.getConsumable()); materialDetailInfo.setValidType(req.getValidType()); if(req.getValidType().equals(ValidTypeEnum.SHORT_TERM.getCode())){ materialDetailInfo.setValidTime(req.getValidTime()); } materialDetailInfo.setValidStatus(ValidStatusEnum.YES.getCode()); materialDetailInfo.setIrStatus(IssueReceiptEnum.IN_THE_LIBRARY.getCode()); materialDetailInfo.setWareHousingTime(LocalDateTime.now()); materialDetailInfo.setRfid(req.getRfid()); materialDetailInfo.setMaterialNo(generateMaterialNo(totalCount+i)); list.add(materialDetailInfo); } //批量入库 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); } } return new ResultVO<>(ResultCodes.OK); } /** * 编辑 * @param req * @return */ @Transactional @Override public ResultVO update(SafeMaterialDetailReq req) { //获取该条数据 SafeMaterialDetailInfo vo = safeMaterialDetailInfoService.queryById(req.getId()); if(null == vo){ throw new EquipmentException(EquipmentResultCodes.DATA_NOT_EXIST); } //有效类型不为空 if(null != req.getValidType()){ if(null == ValidTypeEnum.getByCode(req.getValidType())){ throw new EquipmentException(ResultCodes.CLIENT_PARAM_ILLEGAL,"有效期类型不合法!"); }else{ if(req.getValidType().equals(ValidTypeEnum.SHORT_TERM.getCode()) && null == req.getValidTime()){ throw new EquipmentException(ResultCodes.CLIENT_PARAM_NULL,"有效期时间不可为空!"); } } } //填充数据 SafeMaterialDetailInfo safeMaterialDetailInfo = new SafeMaterialDetailInfo(); safeMaterialDetailInfo.setId(req.getId()); safeMaterialDetailInfo.setRfid(req.getRfid()); safeMaterialDetailInfo.setSmId(req.getSmId()); safeMaterialDetailInfo.setValidType(req.getValidType()); safeMaterialDetailInfo.setValidTime(req.getValidTime()); //修改 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); } return new ResultVO(ResultCodes.OK); } /** * 批量-重新入库 * @param ids * @return */ @Override public ResultVO receiptBatch(Long[] ids) { if (ids.length == 0) { throw new EquipmentException(ResultCodes.CLIENT_PARAM_NULL); } List idList = new ArrayList<>(); Collections.addAll(idList,ids); //验证 List list = safeMaterialDetailInfoService.getListByIds(idList); List selectList = list .stream() .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,"已入库或耗材物资不可重复入库!"); } //修改为入库状态 safeMaterialDetailInfoService.updateReceiptStatusByIds(idList,IssueReceiptEnum.IN_THE_LIBRARY.getCode()); return new ResultVO(ResultCodes.OK); } /** * 逻辑删除 -批量删除 * @param * @return */ @Override public ResultVO deleteBatch(Long[] ids) { if (ids.length == 0) { throw new EquipmentException(ResultCodes.CLIENT_PARAM_NULL); } safeMaterialDetailInfoService.deleteBatch(ids); return new ResultVO(ResultCodes.OK); } /** * 批量出库 - 根据ids * @param req * @return */ @Override public ResultVO deliveryBatchByIds(MterialDeliveryReq req) { //获取认领人信息 UserInfoRPCRespDTO userInfo = getUserInfo(req.getClaimantId()); //验证 List list = safeMaterialDetailInfoService.getListByIds(req.getIds()); List 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 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.setClaimantName(userInfo.getUsername()); detailBO.setClaimantId(req.getClaimantId()); 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 deliveryReqList = req.getDeliveryReqList(); if(CollectionUtils.isEmpty(deliveryReqList)){ throw new EquipmentException(ResultCodes.CLIENT_PARAM_NULL,"出库物资不可为空!"); } //获取小类物资 List smallClassifyIds = deliveryReqList .stream() .map(MaterialSpwDeliveryReq::getSmallClassifyId) .collect(Collectors.toList()); List depIds = deliveryReqList .stream() .map(MaterialSpwDeliveryReq::getDepId) .collect(Collectors.toList()); if(smallClassifyIds.size() == 0 || depIds.size() == 0){ throw new EquipmentException(ResultCodes.CLIENT_PARAM_NULL,"部门/仓库或者物资类型(小类)不可为空!"); } List classifyStockList= safeMaterialDetailInfoService.getSmallClassifyStockByIds(smallClassifyIds); //根据物资种类获取有效在库物资 List 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 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 ids = new ArrayList<>(); //循环数据 for(MaterialSpwDeliveryReq deliveryReq:deliveryReqList){ //过滤出rfid存在的数据 List selectRfidNotNull = listBySmallClassifyIds .stream() .filter(item -> null != item.getRfid() && item.getSmallClassifyId().equals(deliveryReq.getSmallClassifyId()) && item.getDepId().equals(deliveryReq.getDepId())) .collect(Collectors.toList()); List 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 selectRfidIsNull = listBySmallClassifyIds .stream() .filter(item -> null == item.getRfid() && item.getSmallClassifyId().equals(deliveryReq.getSmallClassifyId()) && item.getDepId().equals(deliveryReq.getDepId())) .collect(Collectors.toList()); List 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 getListByRfids(List rfids) { if(CollectionUtils.isEmpty(rfids)){ throw new EquipmentException(ResultCodes.CLIENT_PARAM_NULL); } List listByRfid = safeMaterialDetailInfoService.getListByRfids(rfids); List 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 public SearchResultVO> listByPage(PageQuery pageQuery) { Page page = new Page(pageQuery.getPageIndex(),pageQuery.getPageSize()); List safeMaterialDetailInfoDOS = safeMaterialDetailInfoService.listByPage(page, pageQuery.getSearchParams()); List detailDtoList = new ArrayList<>(); for(SafeMaterialDetailInfoDO materialDetailInfoDO : safeMaterialDetailInfoDOS){ SafeMaterialDetailDto materialDetailDto = new SafeMaterialDetailDto(); BeanUtils.copyProperties(materialDetailInfoDO,materialDetailDto); materialDetailDto.setConsumableName(ConsumableEnum.getByCode(materialDetailInfoDO.getConsumable()).getValue()); 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); } @Override public ResultVO queryById(Long id) { if(null == id){ throw new EquipmentException(ResultCodes.CLIENT_PARAM_NULL); } SafeMaterialDetailInfo materialDetailInfo = safeMaterialDetailInfoService.queryById(id); SafeMaterialDetailDto detailDto = new SafeMaterialDetailDto(); if(materialDetailInfo != null){ SafeMaterialInfo materialInfo = 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()); } if(classifyInfo != null){ detailDto.setMaterialClassifyName(classifyInfo.getMaterialClassifyName()); } } return new ResultVO(ResultCodes.OK,detailDto); } /** * 单条-出库 * @param req * @return */ @Override public ResultVO singleDelivery(SafeMaterialDetailReq req) { //获取该条数据 SafeMaterialDetailInfo vo = safeMaterialDetailInfoService.queryById(req.getId()); if(null == vo){ throw new EquipmentException(EquipmentResultCodes.DATA_NOT_EXIST); } if(vo.getValidStatus().equals(ValidStatusEnum.NO.getCode())){ throw new EquipmentException(EquipmentResultCodes.MATERIAL_INVALID,"无效物资不可出库"); } if(vo.getIrStatus().equals(IssueReceiptEnum.OUT_OF_LIBRARY.getCode())){ throw new EquipmentException(EquipmentResultCodes.MATERIAL_OUT_OF_LIBRARY); } //检查认领人 UserInfoRPCRespDTO userInfo = getUserInfo(req.getClaimantId()); SafeMaterialDetailInfo materialDetailInfo = new SafeMaterialDetailInfo(); materialDetailInfo.setId(req.getId()); materialDetailInfo.setIrStatus(IssueReceiptEnum.OUT_OF_LIBRARY.getCode()); materialDetailInfo.setClaimantId(req.getClaimantId()); materialDetailInfo.setClaimantName(userInfo.getUsername()); materialDetailInfo.setDeliveryTime(LocalDateTime.now()); //修改出入库状态为出库 safeMaterialDetailInfoService.updateById(materialDetailInfo); return new ResultVO<>(ResultCodes.OK); } /** * 单条-重新入库 * @param id * @return */ @Override public ResultVO singleReceipt(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); } //如果是耗材不可重新入库 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); } //修改出入库状态为入库 safeMaterialDetailInfoService.updateReceiptStatus(id,IssueReceiptEnum.IN_THE_LIBRARY.getCode()); 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); } /** * 逻辑删除 -单条 * @param * @return */ 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); return new ResultVO<>(ResultCodes.OK); } /** * 根据小类id(物资种类)获取库存数量 * @param smallClassifyIds * @return */ public List getSmallClassifyStockByIds(List smallClassifyIds) { if(CollectionUtils.isEmpty(smallClassifyIds)){ throw new EquipmentException(ResultCodes.CLIENT_PARAM_NULL); } List classifyStockList= safeMaterialDetailInfoService.getSmallClassifyStockByIds(smallClassifyIds); List 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) { UserInfoRPCRespDTO userInfo = new UserInfoRPCRespDTO(); ResultVO rpcResult = accountUserService.getUserInfoByUid(uid); if (rpcResult != null && rpcResult.getCode().equals(ResultCodes.OK.getCode())) { if (rpcResult.getData() != null) { userInfo = (UserInfoRPCRespDTO) rpcResult.getData(); }else { throw new EquipmentException(EquipmentResultCodes.DATA_NOT_EXIST,"认领人员不存在!"); } } else { throw new EquipmentException(ResultCodes.RPC_RESULT_NULL); } return userInfo; } private String generateMaterialNo(int count){ if(count < 0){ return null; } String serialCode = null; if(count >= 10000){ serialCode = "" + (count+1); }else if(count >=0){ String countStr = String.valueOf(count+1); serialCode = "10000".substring(0,(5 - countStr.length()))+countStr; } return serialCode; } private Date conversionTimeType(LocalDateTime localDateTime){ ZoneId zoneId = ZoneId.systemDefault(); ZonedDateTime zdt = localDateTime.atZone(zoneId); Date date = Date.from(zdt.toInstant()); return date; } }