From 092a98a583c4fe822a3eb4c4dac086f84b16189c Mon Sep 17 00:00:00 2001 From: xuhy <3313886187@qq.com> Date: 星期五, 26 九月 2025 17:58:32 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TErpClinicWarehousingServiceImpl.java | 345 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 343 insertions(+), 2 deletions(-) diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TErpClinicWarehousingServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TErpClinicWarehousingServiceImpl.java index 65a8f92..aafd7f6 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TErpClinicWarehousingServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TErpClinicWarehousingServiceImpl.java @@ -1,10 +1,30 @@ package com.ruoyi.system.service.impl; -import com.ruoyi.system.model.TErpClinicWarehousing; -import com.ruoyi.system.mapper.TErpClinicWarehousingMapper; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.ruoyi.common.basic.PageInfo; +import com.ruoyi.common.core.domain.entity.SysUser; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.system.dto.ClinicOutboundGoodsDto; +import com.ruoyi.system.dto.OutboundGoodsNextDto; +import com.ruoyi.system.dto.clinicWarehouseGoodsDto; +import com.ruoyi.system.mapper.*; +import com.ruoyi.system.model.*; +import com.ruoyi.system.query.*; import com.ruoyi.system.service.TErpClinicWarehousingService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.system.vo.*; import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; /** * <p> @@ -17,4 +37,325 @@ @Service public class TErpClinicWarehousingServiceImpl extends ServiceImpl<TErpClinicWarehousingMapper, TErpClinicWarehousing> implements TErpClinicWarehousingService { + + @Resource + private TCrmClinicMapper crmClinicMapper; + + @Resource + private TErpClinicInventoryGoodsMapper erpClinicInventoryGoodsMapper; + + @Resource + private TErpGoodsMapper erpGoodsMapper; + + @Resource + private TErpClinicWarehousingMapper erpClinicWarehousingMapper; + + @Resource + private TErpClinicWarehousingBatchMapper erpClinicWarehousingBatchMapper; + + @Resource + private TErpClinicOutboundGoodsMapper erpClinicOutboundGoodsMapper; + + + @Resource + private TErpClinicOutboundMapper erpClinicOutboundMapper; + + @Resource + private TErpGoodsUnitMapper erpGoodsUnitMapper; + + + @Resource + private TErpGoodsTypeMapper erpGoodsTypeMapper; + + + + @Override + public PageInfo<PageInventoryListVo> pageInventoryList(TErpInventoryQuery query, SysUser user) { + Integer roleType = user.getRoleType(); + String supplierClinicId = null; + if(roleType == 5){ + // 诊所 + TCrmClinic crmClinic = crmClinicMapper.selectOne(Wrappers.lambdaQuery(TCrmClinic.class) + .eq(TCrmClinic::getUserId, user.getUserId()) + .last("LIMIT 1")); + supplierClinicId =crmClinic.getId(); + } + String sTime=null; + String eTime =null; + if(query.getTime()!=null && !query.getTime().isEmpty()){ + String[] split = query.getTime().split(" - "); + sTime = split[0] + " 00:00:00"; + eTime = split[1] + " 23:59:59"; + } + PageInfo<PageInventoryListVo> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize()); + List<PageInventoryListVo> list = this.baseMapper.pageInventoryList(pageInfo,query,user,sTime,eTime,supplierClinicId); + if(list.isEmpty()){ + return pageInfo; + } + + + + List<String> collect = list.stream().map(PageInventoryListVo::getId).collect(Collectors.toList()); + List<TErpClinicInventoryGoods> tErpSupplierInventoryGoods = erpClinicInventoryGoodsMapper.selectList(new LambdaQueryWrapper<TErpClinicInventoryGoods>().in(TErpClinicInventoryGoods::getInventoryId,collect)); + for (PageInventoryListVo pageInventoryListVo : list) { + // 盘盈 + BigDecimal add = BigDecimal.ZERO; + + // 盘亏 + BigDecimal subtract = BigDecimal.ZERO; + List<TErpClinicInventoryGoods> tErpSupplierInventoryGoodsList = tErpSupplierInventoryGoods.stream().filter(t -> t.getInventoryId().equals(pageInventoryListVo.getId())).collect(Collectors.toList()); + for (TErpClinicInventoryGoods tErpSupplierInventoryGoods1 : tErpSupplierInventoryGoodsList) { + + + if(tErpSupplierInventoryGoods1!=null){ + // 盘盈 查入库 + if(tErpSupplierInventoryGoods1.getInventoryType()==1){ + TErpClinicWarehousing tErpSupplierWarehousing = erpClinicWarehousingMapper.selectById(tErpSupplierInventoryGoods1.getWarehousingId()); +// List<TErpSupplierWarehousingBatch> tErpSupplierWarehousingBatches = erpSupplierWarehousingBatchMapper.selectList(new LambdaQueryWrapper<TErpSupplierWarehousingBatch>().eq(TErpSupplierWarehousingBatch::getWarehousingId, tErpSupplierWarehousing.getId())); +// int sum = tErpSupplierWarehousingBatches.stream().mapToInt(TErpSupplierWarehousingBatch::getWarehousingNumber).sum(); + String goodsId = tErpSupplierInventoryGoods1.getGoodsId(); + TErpGoods goods = erpGoodsMapper.selectById(goodsId); + int count = tErpSupplierInventoryGoods1.getInventoryCount() - tErpSupplierInventoryGoods1.getDamagedCount(); + BigDecimal multiply = goods.getSalesAmount().multiply(new BigDecimal(count)); + add = add.add(multiply); + }else { + // 盘亏 查出库 + TErpClinicOutbound tErpSupplierOutbound = erpClinicOutboundMapper.selectById(tErpSupplierInventoryGoods1.getWarehousingId()); + + List<TErpClinicOutboundGoods> tErpSupplierOutboundGoods = erpClinicOutboundGoodsMapper.selectList(new LambdaQueryWrapper<TErpClinicOutboundGoods>().eq(TErpClinicOutboundGoods::getOutboundId, tErpSupplierOutbound.getId())); + for (TErpClinicOutboundGoods tErpSupplierOutboundGood : tErpSupplierOutboundGoods) { + TErpClinicWarehousing tErpSupplierWarehousing = erpClinicWarehousingMapper.selectById(tErpSupplierOutboundGood.getWarehousingId()); + String goodsId = tErpSupplierInventoryGoods1.getGoodsId(); + TErpGoods goods = erpGoodsMapper.selectById(goodsId); + int count = tErpSupplierInventoryGoods1.getInventoryCount() - tErpSupplierInventoryGoods1.getDamagedCount(); + BigDecimal multiply = goods.getSalesAmount().multiply(new BigDecimal(count)); + add = add.add(multiply); + } +// int sum = tErpSupplierOutboundGoods.stream().mapToInt(TErpSupplierOutboundGoods::getOutboundCount).sum(); +// String goodsId = tErpSupplierOutbound.getGoodsId(); +// TErpGoods goods = erpGoodsMapper.selectById(goodsId); +// BigDecimal multiply = goods.getSalesAmount().multiply(new BigDecimal(sum)); +// subtract = subtract.add(multiply); + } + } + } + int size = tErpSupplierInventoryGoodsList.stream().map(TErpClinicInventoryGoods::getGoodsId).collect(Collectors.toSet()).size(); + pageInventoryListVo.setNum(size); + pageInventoryListVo.setTotalPrice(add); + + } + + pageInfo.setRecords(list); + return pageInfo; + } + + @Override + public List<InventoryDetailVo> detailInventory(String id, SysUser user) { + ArrayList<InventoryDetailVo> inventoryDetailVos = new ArrayList<>(); + + List<TErpClinicInventoryGoods> tErpSupplierInventoryGoods = erpClinicInventoryGoodsMapper.selectList(new LambdaQueryWrapper<TErpClinicInventoryGoods>().eq(TErpClinicInventoryGoods::getInventoryId, id)); + if(tErpSupplierInventoryGoods!=null && !tErpSupplierInventoryGoods.isEmpty()){ + for (TErpClinicInventoryGoods tErpSupplierInventoryGood : tErpSupplierInventoryGoods) { + InventoryDetailVo inventoryDetailVo = new InventoryDetailVo(); + if(tErpSupplierInventoryGood.getInventoryType()==1){ + TErpClinicWarehousing tErpSupplierWarehousing = erpClinicWarehousingMapper.selectById(tErpSupplierInventoryGood.getWarehousingId()); + String goodsId = tErpSupplierInventoryGood.getGoodsId(); + TErpGoods goods = erpGoodsMapper.selectById(goodsId); + inventoryDetailVo.setGoodsName(goods.getGoodsName()); + TErpGoodsUnit tErpGoodsUnit = erpGoodsUnitMapper.selectById(goods.getPackingUnitId()); + inventoryDetailVo.setUnitName(tErpGoodsUnit.getUnitName()); + inventoryDetailVo.setWarehouseNo(tErpSupplierWarehousing.getWarehouseNo()); + TErpClinicWarehousingBatch tErpSupplierWarehousingBatch = erpClinicWarehousingBatchMapper.selectById(tErpSupplierInventoryGood.getWarehousingBatchId()); + inventoryDetailVo.setBatchNumber(tErpSupplierWarehousingBatch.getBatchNumber()); + + List<TErpClinicWarehousingBatch> tErpSupplierWarehousingBatches = erpClinicWarehousingBatchMapper.selectList(new LambdaQueryWrapper<TErpClinicWarehousingBatch>().eq(TErpClinicWarehousingBatch::getBatchNumber, tErpSupplierWarehousingBatch.getBatchNumber())); + int sum = tErpSupplierWarehousingBatches.stream().mapToInt(TErpClinicWarehousingBatch::getWarehousingNumber).sum(); + List<String> collect = tErpSupplierWarehousingBatches.stream().map(TErpClinicWarehousingBatch::getId).collect(Collectors.toList()); + if(!collect.isEmpty()){ + List<TErpClinicOutboundGoods> tErpSupplierOutboundGoods = erpClinicOutboundGoodsMapper.selectList(new LambdaQueryWrapper<TErpClinicOutboundGoods>().eq(TErpClinicOutboundGoods::getWarehousingBatchId, collect)); + int sum1 = tErpSupplierOutboundGoods.stream().mapToInt(TErpClinicOutboundGoods::getOutboundCount).sum(); + sum = sum-sum1; + } + + // sum = 剩余库存 + inventoryDetailVo.setNowCount(sum); + inventoryDetailVo.setInventoryCount(tErpSupplierInventoryGood.getInventoryCount()); + inventoryDetailVo.setInventoryType(tErpSupplierInventoryGood.getInventoryType()); + inventoryDetailVo.setDamagedCount(tErpSupplierInventoryGood.getDamagedCount()); + } + inventoryDetailVos.add(inventoryDetailVo); + + } + + return inventoryDetailVos; + + } + + + return Collections.emptyList(); + } + + + + @Override + public PageInfo<ValidityPeriodWarningVo> validityPeriodWarning(ValidityPeriodWarningQuery query, SysUser user) { + Integer roleType = user.getRoleType(); + String supplierClinicId = null; + if(roleType == 5){ + // 诊所 + TCrmClinic crmClinic = crmClinicMapper.selectOne(Wrappers.lambdaQuery(TCrmClinic.class) + .eq(TCrmClinic::getUserId, user.getUserId()) + .last("LIMIT 1")); + supplierClinicId =crmClinic.getId(); + } + // 获取当前时间后9个月的时间 + LocalDateTime nineMonthLater = LocalDateTime.now().plusMonths(9); + + PageInfo<ValidityPeriodWarningVo> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize()); + + + + return this.baseMapper.validityPeriodWarning(pageInfo,query,user,nineMonthLater,supplierClinicId); + } + + @Override + public PageInfo<TErpGoodsVO> pageList(TErpGoodsQuery query, SysUser user) { + PageInfo<TErpGoodsVO> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize()); + List<TErpGoodsVO> list = this.baseMapper.pageList(query,pageInfo,user); + if(list.isEmpty()){ + return pageInfo; + } + + + List<String> typeIds = list.stream().map(TErpGoods::getTypeId).collect(Collectors.toList()); + if(!typeIds.isEmpty()){ + List<TErpGoodsType> typeList = erpGoodsTypeMapper.selectBatchIds(typeIds); + for (TErpGoodsVO tErpGoodsVO : list) { + typeList.stream().filter(t -> t.getId().equals(tErpGoodsVO.getTypeId())).findFirst().ifPresent(t -> tErpGoodsVO.setTypeName(t.getTypeName())); + tErpGoodsVO.setTypeName(tErpGoodsVO.getTypeName()); + } + } + pageInfo.setRecords(list); + return pageInfo; + } + + @Override + public PageInfo<TErpClinicWarehousePageListVO> warehousePageList(TClinicWarehouseQuery query, SysUser user, String supplierClinicId) { + String time = query.getTime(); + String sTime =null; + String eTime = null; + if(time!=null && !time.isEmpty()){ + String[] split = time.split(" - "); + sTime = split[0] + " 00:00:00"; + eTime = split[1] + " 23:59:59"; + } + PageInfo<TErpClinicWarehousePageListVO> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize()); + List<TErpClinicWarehousePageListVO> list = this.baseMapper.warehousePageList(query,pageInfo,user,supplierClinicId,sTime,eTime); + if(list.isEmpty()){ + return pageInfo; + } + List<String> collect = list.stream().map(TErpClinicWarehousePageListVO::getId).collect(Collectors.toList()); + List<TErpClinicWarehousingBatch> tErpClinicWarehousingBatches = erpClinicWarehousingBatchMapper.selectList(new LambdaQueryWrapper<TErpClinicWarehousingBatch>().in(TErpClinicWarehousingBatch::getWarehousingId, collect)); + + for (TErpClinicWarehousePageListVO tErpClinicWarehousePageListVO : list) { + int size = tErpClinicWarehousingBatches.stream().filter(e -> e.getWarehousingId().equals(tErpClinicWarehousePageListVO.getId())).map(TErpClinicWarehousingBatch::getGoodsId).collect(Collectors.toSet()).size(); + tErpClinicWarehousePageListVO.setTypeNum(size); + } + pageInfo.setRecords(list); + return pageInfo; + } + + @Override + public PageInfo<TErpClinicOutboundPageListVO> outboundPageList(TClinicOutboundQuery query, SysUser user, String supplierClinicId) { + String time = query.getTime(); + String sTime =null; + String eTime = null; + if(time!=null && !time.isEmpty()){ + String[] split = time.split(" - "); + sTime = split[0] + " 00:00:00"; + eTime = split[1] + " 23:59:59"; + } + PageInfo<TErpClinicOutboundPageListVO> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize()); + List<TErpClinicOutboundPageListVO> list = this.baseMapper.outboundPageList(query,pageInfo,user,supplierClinicId,sTime,eTime); + pageInfo.setRecords(list); + return pageInfo; + } + + @Override + public void warehouseGoods(List<clinicWarehouseGoodsDto> dtos, SysUser user, String supplierClinicId) { + + // dtos根据供应商分组 + Map<String, List<clinicWarehouseGoodsDto>> collect = dtos.stream().collect(Collectors.groupingBy(clinicWarehouseGoodsDto::getSupplierId)); + + for (Map.Entry<String, List<clinicWarehouseGoodsDto>> stringListEntry : collect.entrySet()) { + String key = stringListEntry.getKey(); + List<clinicWarehouseGoodsDto> value = stringListEntry.getValue(); + TErpClinicWarehousing tErpClinicWarehousing = new TErpClinicWarehousing(); + tErpClinicWarehousing.setClinicId(supplierClinicId); + tErpClinicWarehousing.setCreateId(user.getUserId().toString()); + tErpClinicWarehousing.setWarehouseNo("G"+ DateUtils.dateTimeNow()); + tErpClinicWarehousing.setCreateTime(LocalDateTime.now()); + tErpClinicWarehousing.setSupplierId(key); + tErpClinicWarehousing.setType(3); + this.save(tErpClinicWarehousing); + + BigDecimal totalPrice = new BigDecimal(0); + for (clinicWarehouseGoodsDto dto : value) { + TErpClinicWarehousingBatch tErpClinicWarehousingBatch = new TErpClinicWarehousingBatch(); + tErpClinicWarehousingBatch.setWarehousingId(tErpClinicWarehousing.getId()); + tErpClinicWarehousingBatch.setWarehousingNumber(dto.getPurchaseCount()); + tErpClinicWarehousingBatch.setBatchNumber(dto.getBatchNumber()); + tErpClinicWarehousingBatch.setProductionDate(dto.getProductionDate()); + tErpClinicWarehousingBatch.setExpiryDate(dto.getExpiryDate()); + tErpClinicWarehousingBatch.setGoodsId(dto.getId()); + TErpGoods goods = erpGoodsMapper.selectById(dto.getId()); + tErpClinicWarehousingBatch.setGoodsName(goods.getGoodsName()); + tErpClinicWarehousingBatch.setQuasiNumber(goods.getQuasiNumber()); + tErpClinicWarehousingBatch.setUnitAmount(dto.getUnitAmount()); + tErpClinicWarehousingBatch.setSalesAmount(dto.getSalesAmount()); + if(dto.getSalesAmount()==null){ + tErpClinicWarehousingBatch.setSalesAmount(goods.getClinicPurchasePrice()); + } + tErpClinicWarehousingBatch.setPurchaseCount(dto.getPurchaseCount()); + erpClinicWarehousingBatchMapper.insert(tErpClinicWarehousingBatch); + + totalPrice = totalPrice.add(dto.getSalesAmount().multiply(new BigDecimal(dto.getPurchaseCount()))); + } + tErpClinicWarehousing.setTotalPrice(totalPrice); + this.updateById(tErpClinicWarehousing); + + } + + } + + @Override + public void outboundGoods(ClinicOutboundGoodsDto dto, SysUser user, String supplierClinicId) { + TErpClinicOutbound tErpClinicOutbound = new TErpClinicOutbound(); + tErpClinicOutbound.setClinicId(supplierClinicId); + tErpClinicOutbound.setCreateId(user.getUserId().toString()); + tErpClinicOutbound.setOutboundNumber("G"+ DateUtils.dateTimeNow()); + tErpClinicOutbound.setCreateTime(LocalDateTime.now()); + tErpClinicOutbound.setOutboundType(dto.getOutboundType()); + tErpClinicOutbound.setTotalMoney(dto.getTotalPrice()); + tErpClinicOutbound.setOutboundReason(dto.getOutboundReason()); + tErpClinicOutbound.setTypeNum(dto.getTypeNum()); + erpClinicOutboundMapper.insert(tErpClinicOutbound); + + List<TErpClinicOutboundGoods> tErpClinicOutboundGoods = new ArrayList<>(); + for (OutboundGoodsNextDto outboundGoodsNextDto : dto.getOutboundGoodsNextDtos()) { + TErpClinicOutboundGoods tErpClinicOutboundGoods1 = new TErpClinicOutboundGoods(); + tErpClinicOutboundGoods1.setOutboundId(tErpClinicOutbound.getId()); + String batchId = outboundGoodsNextDto.getBatchId(); + TErpClinicWarehousingBatch tErpClinicWarehousingBatch = erpClinicWarehousingBatchMapper.selectById(batchId); + tErpClinicOutboundGoods1.setWarehousingId(tErpClinicWarehousingBatch.getWarehousingId()); + tErpClinicOutboundGoods1.setWarehousingBatchId(batchId); + tErpClinicOutboundGoods1.setOutboundCount(outboundGoodsNextDto.getNum()); + tErpClinicOutboundGoods1.setTotalPrice(tErpClinicWarehousingBatch.getUnitAmount().multiply(BigDecimal.valueOf(outboundGoodsNextDto.getNum()))); + tErpClinicOutboundGoods1.setGoodsId(tErpClinicWarehousingBatch.getGoodsId()); + tErpClinicOutboundGoods.add(tErpClinicOutboundGoods1); + erpClinicOutboundGoodsMapper.insert(tErpClinicOutboundGoods1); + } + + } } + -- Gitblit v1.7.1