package com.chinaztt.mes.warehouse.service.impl;
|
|
import cn.hutool.core.collection.CollectionUtil;
|
import com.baomidou.mybatisplus.core.injector.methods.DeleteById;
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.toolkit.SqlHelper;
|
import com.chinaztt.mes.warehouse.entity.ReverseStockApply;
|
import com.chinaztt.mes.warehouse.entity.ReverseStockApplyDetail;
|
import com.chinaztt.mes.warehouse.entity.Stock;
|
import com.chinaztt.mes.warehouse.mapper.ReverseStockApplyDetailMapper;
|
import com.chinaztt.mes.warehouse.mapper.ReverseStockApplyMapper;
|
import com.chinaztt.mes.warehouse.mapper.StockMapper;
|
import com.chinaztt.mes.warehouse.service.ReverseStockApplyDetailService;
|
import com.chinaztt.mes.warehouse.state.constant.ReverseApplyState;
|
import org.apache.commons.lang3.StringUtils;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import java.util.List;
|
|
/**
|
* @Author: Zero
|
* @Date: 2022/9/19 13:47
|
* @Description:
|
*/
|
@Service
|
@Transactional(rollbackFor = Exception.class)
|
public class ReverseStockApplyDetailServiceImpl extends ServiceImpl<ReverseStockApplyDetailMapper,
|
ReverseStockApplyDetail> implements ReverseStockApplyDetailService {
|
|
@Autowired
|
private ReverseStockApplyDetailMapper reverseStockApplyDetailMapper;
|
|
@Autowired
|
private StockMapper stockMapper;
|
|
@Autowired
|
private ReverseStockApplyMapper reverseStockApplyMapper;
|
|
@Override
|
public Boolean insertApplyDetail(List<ReverseStockApplyDetail> applyDetailList) {
|
applyDetailList.forEach(applyDetail -> applyDetail.setState(ReverseApplyState.NEW.getCode()));
|
return saveBatch(applyDetailList);
|
}
|
|
@Override
|
public Boolean updateApplyDetail(ReverseStockApplyDetail applyDetail) {
|
Stock stock = stockMapper.selectById(applyDetail.getStockId());
|
if (stock.getAvailableStockQuantity().compareTo(applyDetail.getReverseQuantity()) < 0) {
|
throw new RuntimeException("退料数量不能大于剩余可用库存数量");
|
}
|
return updateById(applyDetail);
|
}
|
|
@Override
|
public Boolean batchUpdateDetail(List<ReverseStockApplyDetail> applyDetailList) {
|
return updateBatchById(applyDetailList);
|
}
|
|
@Override
|
public List<Long> getLockStockIds() {
|
return reverseStockApplyDetailMapper.getLockStockIds(ReverseApplyState.NEW.getCode());
|
}
|
|
@Override
|
public String deleteApplyDetail(Long id) {
|
ReverseStockApplyDetail applyDetail = getById(id);
|
if (!StringUtils.equals(ReverseApplyState.NEW.getCode(), applyDetail.getState())) {
|
throw new RuntimeException("只能删除新建状态的退料详情");
|
}
|
reverseStockApplyDetailMapper.deleteById(id);
|
List<ReverseStockApplyDetail> applyDetailList =
|
reverseStockApplyDetailMapper.selectList(Wrappers.<ReverseStockApplyDetail>lambdaQuery()
|
.eq(ReverseStockApplyDetail::getReverseApplyId, applyDetail.getReverseApplyId()));
|
long newStateDetailCount = applyDetailList.stream().filter(d -> StringUtils.equals(ReverseApplyState.NEW.getCode(),
|
d.getState())).count();
|
String state = ReverseApplyState.DRAFT.getCode();
|
// 当前申请单下仍然有退料详情
|
if (CollectionUtil.isNotEmpty(applyDetailList)) {
|
// 有退料详情,无新建状态详情,说明全部都为已执行
|
if (newStateDetailCount == 0) {
|
state = ReverseApplyState.PROCESSED.getCode();
|
}else if (newStateDetailCount < applyDetailList.size()) {
|
// 退料详情新建条数小于总条数,说明此时已执行和新建状态详情都有,则主表为执行中
|
state = ReverseApplyState.PROCESSING.getCode();
|
}
|
}
|
reverseStockApplyMapper.update(null, Wrappers.<ReverseStockApply>lambdaUpdate().eq(ReverseStockApply::getId,
|
applyDetail.getReverseApplyId()).set(ReverseStockApply::getState, state));
|
return state;
|
}
|
|
}
|