/*
|
* 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<ScrapMainMapper, ScrapMain> implements ScrapMainService {
|
private NumberGenerator<ScrapMain> 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<List<ScrapMainDTO>> getScrapMainPage(Page page, QueryWrapper<ScrapMainDTO> gen) {
|
return baseMapper.getScrapMainPage(page,gen);
|
}
|
|
@Override
|
public IPage<List<ScrapDetailDTO>> getScrapPage(Page page, QueryWrapper<ScrapDetailDTO> 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<ScrapDetail> newScrapDetail = scrapDetailMapper.selectList(Wrappers.<ScrapDetail>lambdaQuery().eq(ScrapDetail::getScrapMainId,scrapMainDTO.getId()));
|
if (newScrapDetail.size() == 0){
|
baseMapper.deleteById(scrapMainDTO);
|
}
|
return true;
|
}
|
|
@Override
|
public boolean submitScrapMain(List<ScrapMainDTO> 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.<Stock>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<ScrapMainDTO> getPicture(QueryWrapper<ScrapMainDTO> gen) {
|
List<ScrapMainDTO> scrapMainDTO= baseMapper.getPicture(gen);
|
//先按类型进行分组
|
Map<String,List<ScrapMainDTO>> stringListMap = scrapMainDTO.stream().collect(Collectors.groupingBy(ScrapMainDTO::getScrapType));
|
List<Object> dataList = Arrays.asList( "日期", "1月", "2月","3月", "4月", "5月","6月", "7月", "8月","9月", "10月", "11月","12月");
|
List<List<Object>> scrapList = new ArrayList<>();
|
scrapList.add(dataList);
|
if (CollectionUtil.isNotEmpty(stringListMap)){
|
for(String key : stringListMap.keySet()) {
|
List<Object> scrapMainList = new ArrayList<>();
|
scrapMainList.add(key);
|
List<ScrapMainDTO> scrapDetailList = stringListMap.get(key);
|
A:for (int i = 1; i <=dataList.size()-1; i++) {
|
for (int j = 0; j <scrapDetailList.size(); j++) {
|
if (CollectionUtil.isNotEmpty(scrapDetailList)){
|
if (dataList.get(i) == scrapDetailList.get(j).getTime()) {
|
scrapMainList.add(scrapDetailList.get(j).getNumber());
|
continue A;
|
}
|
}
|
|
}
|
scrapMainList.add(0);
|
}
|
scrapList.add(scrapMainList);
|
}
|
}
|
scrapMainDTO.get(0).setScrapList(scrapList);
|
return scrapMainDTO;
|
}
|
|
@Override
|
public List<ScrapMainDTO> getPie(QueryWrapper<ScrapMainDTO> gen) {
|
List<ScrapMainDTO> scrapMainDTO= baseMapper.getPie(gen);
|
return scrapMainDTO;
|
}
|
|
@Override
|
public List<ScrapDTO> getStatement(QueryWrapper<ScrapMainDTO> gen) {
|
List<ScrapDTO> scrapDTOList= baseMapper.getScrapPie(gen);
|
for (ScrapDTO scrapDTO:scrapDTOList) {
|
List<ScrapDTO> scrapMain = baseMapper.getScrapDetail(scrapDTO.getName());
|
scrapDTO.setList(scrapMain);
|
}
|
return scrapDTOList;
|
}
|
|
|
public ScrapDetail getScrapDetail(ScrapMainDTO scrapMainDTO){
|
Part part =partMapper.selectOne(Wrappers.<Part>lambdaQuery().eq(Part::getPartNo,scrapMainDTO.getPartNo()));
|
Location location =locationMapper.selectOne(Wrappers.<Location>lambdaQuery().eq(Location::getLocNo,scrapMainDTO.getLocationNo()));
|
ScrapDetail scrapDetail = scrapDetailMapper.selectOne(Wrappers.<ScrapDetail>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.<ScrapDetail>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());
|
}
|
}
|
}
|