/* * Copyright (c) 2018-2025, ztt All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * Neither the name of the pig4cloud.com developer nor the names of its * contributors may be used to endorse or promote products derived from * this software without specific prior written permission. * Author: ztt */ package com.chinaztt.mes.warehouse.service.impl; import cn.hutool.core.collection.CollectionUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.chinaztt.mes.basic.entity.Location; import com.chinaztt.mes.basic.entity.Part; import com.chinaztt.mes.basic.mapper.LocationMapper; import com.chinaztt.mes.basic.mapper.PartMapper; import com.chinaztt.mes.common.numgen.NumberGenerator; import com.chinaztt.mes.warehouse.dto.ScrapDTO; import com.chinaztt.mes.warehouse.dto.ScrapDetailDTO; import com.chinaztt.mes.warehouse.dto.ScrapMainDTO; import com.chinaztt.mes.warehouse.entity.ScrapDetail; import com.chinaztt.mes.warehouse.entity.ScrapMain; import com.chinaztt.mes.warehouse.entity.Stock; import com.chinaztt.mes.warehouse.mapper.ScrapDetailMapper; import com.chinaztt.mes.warehouse.mapper.ScrapMainMapper; import com.chinaztt.mes.warehouse.mapper.StockMapper; import com.chinaztt.mes.warehouse.service.ScrapMainService; import com.chinaztt.mes.warehouse.util.StockUtils; import lombok.AllArgsConstructor; import org.springframework.stereotype.Service; import java.math.BigDecimal; import java.time.LocalDateTime; import java.util.*; import java.util.stream.Collectors; /** * 报废主表 * * @author sunxl * @date 2020-12-07 10:07:26 */ @AllArgsConstructor @Service public class ScrapMainServiceImpl extends ServiceImpl implements ScrapMainService { private NumberGenerator numberGenerator; private ScrapDetailMapper scrapDetailMapper; private StockMapper stockMapper; private PartMapper partMapper; private LocationMapper locationMapper; private StockUtils stockUtils; @Override public boolean fullSave(ScrapMain scrapMain) { scrapMain.setScrapNo(numberGenerator.generateNumberWithPrefix(ScrapMain.DIGIT,ScrapMain.PREFIX,ScrapMain::getScrapNo)); baseMapper.insert(scrapMain); return true; } @Override public boolean fullDetailSave(ScrapDetail scrapDetail) { //判断是否重复 determine(scrapDetail); if (scrapDetail.getLocQty().compareTo(scrapDetail.getScrapQty())==-1){ throw new RuntimeException("库存零件报废数量超过了库存数量,请重新填写"); } scrapDetail.setScrapTime(LocalDateTime.now()); scrapDetailMapper.insert(scrapDetail); return false; } @Override public IPage> getScrapMainPage(Page page, QueryWrapper gen) { return baseMapper.getScrapMainPage(page,gen); } @Override public IPage> getScrapPage(Page page, QueryWrapper gen) { return baseMapper.getScrapPage(page,gen); } @Override public ScrapDetailDTO getScrapDetailById(Long id) { return baseMapper.getScrapDetailById(id); } @Override public boolean fullDelete(ScrapMainDTO scrapMainDTO) { if (scrapMainDTO.getPartNo() != null) { ScrapDetail newScrapDetails =getScrapDetail(scrapMainDTO); if (newScrapDetails!=null) { scrapDetailMapper.deleteById(newScrapDetails); } } List newScrapDetail = scrapDetailMapper.selectList(Wrappers.lambdaQuery().eq(ScrapDetail::getScrapMainId,scrapMainDTO.getId())); if (newScrapDetail.size() == 0){ baseMapper.deleteById(scrapMainDTO); } return true; } @Override public boolean submitScrapMain(List scrapMainDTO) { for (ScrapMainDTO newScrapMainDTO:scrapMainDTO){ if (newScrapMainDTO.getScrapQty()==null&&newScrapMainDTO.getScrapQty().compareTo(BigDecimal.ZERO)==0){ throw new RuntimeException("报废数量为空或为0,请检查"); } if (newScrapMainDTO.getScrapQty()!=null){ ScrapDetail newScrapDetail =getScrapDetail(newScrapMainDTO); newScrapDetail.setStatus("已下发"); scrapDetailMapper.updateById(newScrapDetail); Stock stock = stockMapper.selectOne(Wrappers.lambdaQuery().eq(Stock::getPartId,newScrapDetail.getPartId()) .eq(Stock::getLocationId,newScrapDetail.getLocationId()).eq(Stock::getPartBatchNo,newScrapDetail.getPartBatchNo()).eq(Stock::getSystemNo,newScrapDetail.getSystemNo())); stockUtils.updateById(stock.getId(),newScrapMainDTO.getScrapQty().negate(),BigDecimal.ZERO, BigDecimal.ZERO, BigDecimal.ZERO,newScrapMainDTO.getScrapNo(),"SCRAP"); } } return false; } @Override public boolean updateScrapById(ScrapDetail scrapDetail) { if (scrapDetail.getLocQty().compareTo(scrapDetail.getScrapQty())==-1){ throw new RuntimeException("库存零件报废数量超过了库存数量,请重新填写"); } determine(scrapDetail); scrapDetailMapper.updateById(scrapDetail); return false; } @Override public boolean removeScrapDetailById(Long id) { scrapDetailMapper.deleteById(id); return false; } @Override public List getPicture(QueryWrapper gen) { List scrapMainDTO= baseMapper.getPicture(gen); //先按类型进行分组 Map> stringListMap = scrapMainDTO.stream().collect(Collectors.groupingBy(ScrapMainDTO::getScrapType)); List dataList = Arrays.asList( "日期", "1月", "2月","3月", "4月", "5月","6月", "7月", "8月","9月", "10月", "11月","12月"); List> scrapList = new ArrayList<>(); scrapList.add(dataList); if (CollectionUtil.isNotEmpty(stringListMap)){ for(String key : stringListMap.keySet()) { List scrapMainList = new ArrayList<>(); scrapMainList.add(key); List scrapDetailList = stringListMap.get(key); A:for (int i = 1; i <=dataList.size()-1; i++) { for (int j = 0; j getPie(QueryWrapper gen) { List scrapMainDTO= baseMapper.getPie(gen); return scrapMainDTO; } @Override public List getStatement(QueryWrapper gen) { List scrapDTOList= baseMapper.getScrapPie(gen); for (ScrapDTO scrapDTO:scrapDTOList) { List scrapMain = baseMapper.getScrapDetail(scrapDTO.getName()); scrapDTO.setList(scrapMain); } return scrapDTOList; } public ScrapDetail getScrapDetail(ScrapMainDTO scrapMainDTO){ Part part =partMapper.selectOne(Wrappers.lambdaQuery().eq(Part::getPartNo,scrapMainDTO.getPartNo())); Location location =locationMapper.selectOne(Wrappers.lambdaQuery().eq(Location::getLocNo,scrapMainDTO.getLocationNo())); ScrapDetail scrapDetail = scrapDetailMapper.selectOne(Wrappers.lambdaQuery().eq(ScrapDetail::getLocationId,location.getId()).eq(ScrapDetail::getPartId,part.getId()) .eq(ScrapDetail::getPartBatchNo,scrapMainDTO.getPartBatchNo()).eq(ScrapDetail::getScrapMainId,scrapMainDTO.getId())); return scrapDetail; } public void determine(ScrapDetail scrapDetail){ ScrapDetail scrapDetail1 = scrapDetailMapper.selectOne(Wrappers.lambdaQuery().eq(ScrapDetail::getPartId,scrapDetail.getPartId()) .eq(ScrapDetail::getLocationId,scrapDetail.getLocationId()).eq(ScrapDetail::getPartBatchNo,scrapDetail.getPartBatchNo()).eq(ScrapDetail::getScrapMainId,scrapDetail.getScrapMainId())); if (scrapDetail1!=null){ throw new RuntimeException("库存零件重复:"+scrapDetail1.getPartId()); } } }