From 56dfe0d4bf81262622a1919cceb2b039fd356209 Mon Sep 17 00:00:00 2001 From: 无关风月 <443237572@qq.com> Date: 星期二, 03 九月 2024 16:52:49 +0800 Subject: [PATCH] 代码提交 bug解决 --- ruoyi-modules/ruoyi-management/src/main/java/com/ruoyi/management/service/impl/HomeStatisticsServiceImpl.java | 277 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 276 insertions(+), 1 deletions(-) diff --git a/ruoyi-modules/ruoyi-management/src/main/java/com/ruoyi/management/service/impl/HomeStatisticsServiceImpl.java b/ruoyi-modules/ruoyi-management/src/main/java/com/ruoyi/management/service/impl/HomeStatisticsServiceImpl.java index ec0b7fd..ef1ad64 100644 --- a/ruoyi-modules/ruoyi-management/src/main/java/com/ruoyi/management/service/impl/HomeStatisticsServiceImpl.java +++ b/ruoyi-modules/ruoyi-management/src/main/java/com/ruoyi/management/service/impl/HomeStatisticsServiceImpl.java @@ -1,6 +1,281 @@ package com.ruoyi.management.service.impl; -import com.ruoyi.management.service.HomeStatisticsService; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.ruoyi.common.security.utils.SecurityUtils; +import com.ruoyi.management.domain.*; +import com.ruoyi.management.domain.dto.HomeStatisticsQuery; +import com.ruoyi.management.domain.vo.HomeStatisticsVO; +import com.ruoyi.management.domain.vo.goodsMaterialsNmVO; +import com.ruoyi.management.domain.vo.homeVO; +import com.ruoyi.management.service.*; +import com.ruoyi.system.api.domain.SysUser; +import com.ruoyi.system.api.feignClient.SysUserClient; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; +import javax.annotation.Resource; +import java.math.BigDecimal; +import java.util.*; +import java.util.stream.Collectors; + +@Service public class HomeStatisticsServiceImpl implements HomeStatisticsService { + + @Resource + private SlVolumeProductionRkService slVolumeProductionRkService; + + @Resource + private SlGoodsMaterialsService slGoodsMaterialsService; + + @Resource + private SlStoreManagementService slStoreManagementService; + + @Resource + private SlVolumeProductionCkService slVolumeProductionCkService; + @Resource + private SysUserClient sysUserClient; + @Resource + private ManagementGoodsMaterialsService managementGoodsMaterialsService; + @Resource + private SlVolumeProductionZyService slVolumeProductionZyService; + + + @Override + public HomeStatisticsVO getHomeStatistics(HomeStatisticsQuery homeStatisticsQuery) { + + LambdaQueryWrapper<SlStoreManagement> wrapper= Wrappers.lambdaQuery(); + if (homeStatisticsQuery.getStoreManagementName()!=null&&homeStatisticsQuery.getStoreManagementName()!=""){ + wrapper.eq(SlStoreManagement::getId,homeStatisticsQuery.getStoreManagementName()); + } + if(homeStatisticsQuery.getStoreManagementNo()!=null&&homeStatisticsQuery.getStoreManagementNo()!=""){ + wrapper.eq(SlStoreManagement::getStoreManagementNo,homeStatisticsQuery.getStoreManagementNo()); + } + if (StringUtils.hasLength(homeStatisticsQuery.getStoreManagementGrade())&& !homeStatisticsQuery.getStoreManagementGrade().equals("0")){ + String[] split = homeStatisticsQuery.getStoreManagementGrade().split(","); + if (split.length>0){ + wrapper.in(SlStoreManagement::getStoreManagementGrade,split); + } + } + if ( homeStatisticsQuery.getStoreManagementNumber()!=null&& homeStatisticsQuery.getStoreManagementNumber()!=0 ){ + wrapper.eq(SlStoreManagement::getStoreManagementNumber,homeStatisticsQuery.getStoreManagementNumber()); + } + if (homeStatisticsQuery.getCityCode()!=null){ + wrapper.eq(SlStoreManagement::getCityCode,homeStatisticsQuery.getCityCode()); + } + if (homeStatisticsQuery.getCountyCode()!=null){ + wrapper.eq(SlStoreManagement::getCountyCode,homeStatisticsQuery.getCountyCode()); + } + if (homeStatisticsQuery.getTownCode()!=null){ + wrapper.eq(SlStoreManagement::getTownCode,homeStatisticsQuery.getTownCode()); + } + wrapper.eq(SlStoreManagement::getDelFlag,"0"); + List<SlStoreManagement> list = slStoreManagementService.list(wrapper); + Set<Long> slStoreManagementIdList = null; + slStoreManagementIdList = list.stream().map(SlStoreManagement::getId) + .collect(Collectors.toSet()); + LambdaQueryWrapper<SlGoodsMaterials> wrapper1= Wrappers.lambdaQuery(); + if (homeStatisticsQuery.getGoodsMaterialsName()!=null&&homeStatisticsQuery.getStoreManagementName()!=""){ + wrapper1.like(SlGoodsMaterials::getGoodsMaterialsName,homeStatisticsQuery.getGoodsMaterialsName()); + } + List<SlGoodsMaterials> list1 = slGoodsMaterialsService.list(wrapper1); + + Set<Long> SlGoodsMaterialsList = null; + SlGoodsMaterialsList = list1.stream().map(SlGoodsMaterials::getId) + .collect(Collectors.toSet()); + + LambdaQueryWrapper<SlVolumeProductionRk> wrapper2= Wrappers.lambdaQuery(); + if (slStoreManagementIdList.size()>0){ + wrapper2.in(SlVolumeProductionRk::getManagementId,slStoreManagementIdList); + }else{ + slStoreManagementIdList=new HashSet<>(); + slStoreManagementIdList.add(0L); + wrapper2.in(SlVolumeProductionRk::getManagementId,slStoreManagementIdList); + } + + if (SlGoodsMaterialsList.size()>0){ + wrapper2.in(SlVolumeProductionRk::getMaterialsId,SlGoodsMaterialsList); + }else{ + SlGoodsMaterialsList=new HashSet<>(); + SlGoodsMaterialsList.add(0L); + wrapper2.in(SlVolumeProductionRk::getMaterialsId,SlGoodsMaterialsList); + } + if (homeStatisticsQuery.getShelfId()!=null){ + wrapper2.eq(SlVolumeProductionRk::getShelfId,homeStatisticsQuery.getShelfId()); + } + wrapper2.isNotNull(SlVolumeProductionRk::getNewAddTime); + Long userId = SecurityUtils.getUserId(); + SysUser data = sysUserClient.getSysUser(userId).getData(); + List<Long> collect = new ArrayList<>(); + if (data!=null){ + if (!data.getUserType().equals("00")){ + switch (data.getRoleType()){ + case 3: + collect = slStoreManagementService.lambdaQuery().eq(SlStoreManagement::getDelFlag, "0") + .ge(SlStoreManagement::getStoreManagementGrade, 3).eq(SlStoreManagement::getCityCode, data.getCityCode()) + .list().stream().map(SlStoreManagement::getId).collect(Collectors.toList()); + wrapper2.in(SlVolumeProductionRk::getManagementId, collect); + break; + case 4: + collect = slStoreManagementService.lambdaQuery().eq(SlStoreManagement::getDelFlag, "0") + .ge(SlStoreManagement::getStoreManagementGrade, 4).eq(SlStoreManagement::getCountyCode, data.getCountyCode()) + .list().stream().map(SlStoreManagement::getId).collect(Collectors.toList()); + wrapper2.in(SlVolumeProductionRk::getManagementId, collect); + break; + case 5: + collect = slStoreManagementService.lambdaQuery().eq(SlStoreManagement::getDelFlag, "0") + .ge(SlStoreManagement::getStoreManagementGrade, 5).eq(SlStoreManagement::getTownCode, data.getTownCode()) + .list().stream().map(SlStoreManagement::getId).collect(Collectors.toList()); + wrapper2.in(SlVolumeProductionRk::getManagementId, collect); + break; + case 6: + collect = slStoreManagementService.lambdaQuery().eq(SlStoreManagement::getDelFlag, "0") + .ge(SlStoreManagement::getStoreManagementGrade, 6).eq(SlStoreManagement::getTownCode, data.getTownCode()) + .list().stream().map(SlStoreManagement::getId).collect(Collectors.toList()); + wrapper2.in(SlVolumeProductionRk::getManagementId, collect); + break; + } + } + } + List<SlVolumeProductionRk> list2 = slVolumeProductionRkService.list(wrapper2); + + + Map<Long, List<SlVolumeProductionRk>> groupByUserNameMap = list2.stream().collect(Collectors.groupingBy(SlVolumeProductionRk::getMaterialsId)); + + HomeStatisticsVO homeStatisticsVO=new HomeStatisticsVO(); + // 物资总数 + Long temp = 0L; + // 将list2中的在库数量累加起来 + Double d=0.0; + List<String> longs = new ArrayList<>(); + for (SlVolumeProductionRk li:list2){ + Long repertoryZhai = li.getRepertoryZhai(); + li.setRepertoryZhai(repertoryZhai); + if (longs.isEmpty()){ + longs.add(li.getManagementId()+"-"+li.getMaterialsId()); + // 根据仓库id和物资id 查询遗失数量 + ManagementGoodsMaterials one = managementGoodsMaterialsService.lambdaQuery().eq(ManagementGoodsMaterials::getGoodsMaterialsId, li.getMaterialsId()) + .eq(ManagementGoodsMaterials::getManagementId, li.getManagementId()) + .eq(ManagementGoodsMaterials::getDelFlag, "0").one(); + if (one!=null){ + d=d+li.getRkPice().multiply(new BigDecimal(li.getRkNum()-one.getRepertoryYishi())).doubleValue(); + temp+=li.getRkNum()-one.getRepertoryYishi(); + li.setRepertoryZhai(li.getRkNum()-one.getRepertoryYishi()); + }else{ + d=d+li.getRkPice().multiply(new BigDecimal(li.getRkNum())).doubleValue(); + temp+=li.getRkNum(); + } + }else if(longs.contains(li.getManagementId()+"-"+li.getMaterialsId())){ + d=d+li.getRkPice().multiply(new BigDecimal(li.getRkNum())).doubleValue(); + temp+=li.getRkNum(); + }else{ + longs.add(li.getManagementId()+"-"+li.getMaterialsId()); + // 根据仓库id和物资id 查询遗失数量 + ManagementGoodsMaterials one = managementGoodsMaterialsService.lambdaQuery().eq(ManagementGoodsMaterials::getGoodsMaterialsId, li.getMaterialsId()) + .eq(ManagementGoodsMaterials::getManagementId, li.getManagementId()) + .eq(ManagementGoodsMaterials::getDelFlag, "0").one(); + if (one!=null){ + d=d+li.getRkPice().multiply(new BigDecimal(li.getRkNum()-one.getRepertoryYishi())).doubleValue(); + temp+=li.getRkNum()-one.getRepertoryYishi(); + li.setRepertoryZhai(li.getRkNum()-one.getRepertoryYishi()); + }else{ + d=d+li.getRkPice().multiply(new BigDecimal(li.getRkNum())).doubleValue(); + temp+=li.getRkNum(); + } + } + // 查询这个入库记录有没有转移 转移了的话 需要扣去转移数量 + Long tem = 0L; + List<SlVolumeProductionZy> list3 = slVolumeProductionZyService.lambdaQuery().eq(SlVolumeProductionZy::getRkId, li.getId()) + .eq(SlVolumeProductionZy::getDelFlag, "0").list(); + if (!list3.isEmpty()){ + tem+= list3.stream().map(SlVolumeProductionZy::getZyNum).reduce(0, Integer::sum); + } + temp-=tem; + LambdaQueryWrapper<SlVolumeProductionCk> wrapper3= Wrappers.lambdaQuery(); + wrapper3.eq(SlVolumeProductionCk::getRkId,li.getId()); + wrapper3.eq(SlVolumeProductionCk::getIsGh,1); + if (li.getRkPice() == null){ + li.setRkPice(BigDecimal.ZERO); + } + } + homeStatisticsVO.setGoodsMaterialsSumNum(temp); + homeStatisticsVO.setGoodsMaterialsSumPice(d); + + //非消耗 + List<homeVO> arr=new ArrayList<>(); + //消耗 + List<homeVO> arr1=new ArrayList<>(); + for (SlVolumeProductionRk l:list2){ + homeVO h=new homeVO(); + SlGoodsMaterials byId = slGoodsMaterialsService.getById(l.getMaterialsId()); + h.setIsConsume(byId.getIsConsume()); + h.setId(byId.getId()); + h.setGoodsMaterialsName(byId.getGoodsMaterialsName()); + h.setGoodsMaterialsNum(l.getRepertoryZhai()); + // 判断物资预警库存 + if (byId.getRepertory()==null || byId.getRepertory() == 0){ + h.setColor(1); + }else{ + if (l.getRepertoryZhai()<=byId.getRepertory()){ + h.setColor(2); + }else{ + h.setColor(1); + } + } + + if (byId.getIsConsume()==1){ + arr.add(h); + }else{ + arr1.add(h); + } + + } + + List<goodsMaterialsNmVO> goodsMaterialsNmVOS=new ArrayList<>(); + Map<String, List<homeVO>> groupByUserNameMap1 = arr.stream().collect(Collectors.groupingBy(homeVO::getGoodsMaterialsName)); + for (Map.Entry<String, List<homeVO>> entry : groupByUserNameMap1.entrySet()) { + goodsMaterialsNmVO goodsMaterialsNmVO=new goodsMaterialsNmVO(); + String key = entry.getKey(); + goodsMaterialsNmVO.setGoodsMaterialsName(key); + goodsMaterialsNmVO.setGoodsMaterialsId(entry.getValue().get(0).getId()); + List<homeVO> value = entry.getValue(); + goodsMaterialsNmVO.setColor(entry.getValue().get(0).getColor()); + // 处理键和值 + int a=0; + for (homeVO vo : value) { + if (vo.getGoodsMaterialsNum()== null){ + vo.setGoodsMaterialsNum(0L); + } + a=a+vo.getGoodsMaterialsNum().intValue(); + } + goodsMaterialsNmVO.setGoodsMaterialsNum(a); + goodsMaterialsNmVOS.add(goodsMaterialsNmVO); + } + + homeStatisticsVO.setGoodsMaterialsfxiaohao(goodsMaterialsNmVOS); + + + List<goodsMaterialsNmVO> goodsMaterialsNmVOS1=new ArrayList<>(); + Map<String, List<homeVO>> groupByUserNameMap2 = arr1.stream().collect(Collectors.groupingBy(homeVO::getGoodsMaterialsName)); + for (Map.Entry<String, List<homeVO>> entry : groupByUserNameMap2.entrySet()) { + goodsMaterialsNmVO goodsMaterialsNmVO1=new goodsMaterialsNmVO(); + String key = entry.getKey(); + goodsMaterialsNmVO1.setGoodsMaterialsName(key); + goodsMaterialsNmVO1.setGoodsMaterialsId(entry.getValue().get(0).getId()); + goodsMaterialsNmVO1.setColor(entry.getValue().get(0).getColor()); + List<homeVO> value = entry.getValue(); + // 处理键和值 + int a=0; + for (homeVO vo : value) { + if (vo.getGoodsMaterialsNum()== null){ + vo.setGoodsMaterialsNum(0L); + } + a=a+vo.getGoodsMaterialsNum().intValue(); + } + goodsMaterialsNmVO1.setGoodsMaterialsNum(a); + goodsMaterialsNmVOS1.add(goodsMaterialsNmVO1); + } + homeStatisticsVO.setGoodsMaterialsxiaohao(goodsMaterialsNmVOS1); + return homeStatisticsVO; + } } -- Gitblit v1.7.1