You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
371 lines
18 KiB
Java
371 lines
18 KiB
Java
package com.glxp.api.service.collect;
|
|
|
|
import cn.hutool.core.bean.BeanUtil;
|
|
import cn.hutool.core.util.IdUtil;
|
|
import cn.hutool.core.util.StrUtil;
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
import com.github.pagehelper.PageHelper;
|
|
import com.glxp.api.constant.Constant;
|
|
import com.glxp.api.dao.collect.IoSplitDesOrderMapper;
|
|
import com.glxp.api.entity.collect.IoCollectOrderBiz;
|
|
import com.glxp.api.entity.collect.IoSplitDesOrder;
|
|
import com.glxp.api.entity.collect.IoSplitDesOrderCode;
|
|
import com.glxp.api.entity.collect.IoSplitDesOrderDetail;
|
|
import com.glxp.api.entity.inout.IoSplitCodeEntity;
|
|
import com.glxp.api.entity.inout.IoSplitFifoCodeEntity;
|
|
import com.glxp.api.entity.inout.IoSplitFifoInv;
|
|
import com.glxp.api.exception.JsonException;
|
|
import com.glxp.api.req.collect.AddInvDesDetaiRequest;
|
|
import com.glxp.api.req.collect.IoSplitDesOrderRequest;
|
|
import com.glxp.api.res.basic.UdiRelevanceResponse;
|
|
import com.glxp.api.res.collect.IoSplitDesOrderResponse;
|
|
import com.glxp.api.service.inout.IoSplitCodeService;
|
|
import com.glxp.api.service.inout.IoSplitFifoCodeService;
|
|
import com.glxp.api.service.inout.IoSplitFifoInvService;
|
|
import com.glxp.api.util.GennerOrderUtils;
|
|
import com.glxp.api.util.IntUtil;
|
|
import com.glxp.api.util.OrderNoTypeBean;
|
|
import okhttp3.internal.http2.ErrorCode;
|
|
import org.apache.poi.ss.formula.functions.Offset;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
import javax.annotation.Resource;
|
|
import java.util.Collections;
|
|
import java.util.Date;
|
|
import java.util.List;
|
|
|
|
@Service
|
|
public class IoSplitDesOrderService extends ServiceImpl<IoSplitDesOrderMapper, IoSplitDesOrder> {
|
|
|
|
@Resource
|
|
IoSplitDesOrderMapper splitDesOrderMapper;
|
|
@Resource
|
|
IoSplitDesOrderDetailService splitDesOrderDetailService;
|
|
@Resource
|
|
GennerOrderUtils gennerOrderUtils;
|
|
|
|
public List<IoSplitDesOrderResponse> filterList(IoSplitDesOrderRequest splitDesOrderRequest) {
|
|
if (splitDesOrderRequest == null) {
|
|
return Collections.emptyList();
|
|
}
|
|
if (splitDesOrderRequest.getPage() != null) {
|
|
int offset = (splitDesOrderRequest.getPage() - 1) * splitDesOrderRequest.getLimit();
|
|
PageHelper.offsetPage(offset, splitDesOrderRequest.getLimit());
|
|
}
|
|
List<IoSplitDesOrderResponse> data = splitDesOrderMapper.filterList(splitDesOrderRequest);
|
|
return data;
|
|
}
|
|
|
|
|
|
public IoSplitDesOrder getByBillNo(String billNo) {
|
|
return splitDesOrderMapper.selectOne(new LambdaQueryWrapper<IoSplitDesOrder>().eq(IoSplitDesOrder::getBillNo, billNo).last("limit 1"));
|
|
}
|
|
|
|
|
|
public IoSplitDesOrder addInv(AddInvDesDetaiRequest addInvDesDetaiRequest) {
|
|
|
|
IoSplitDesOrder collectOrder;
|
|
if (StrUtil.isNotEmpty(addInvDesDetaiRequest.getBillNo())) {
|
|
collectOrder = getByBillNo(addInvDesDetaiRequest.getBillNo());
|
|
} else {
|
|
collectOrder = IoSplitDesOrder.builder()
|
|
.billNo(gennerOrderUtils.createWdOrderNo(new OrderNoTypeBean(Constant.SPLIT_DES_ORDER, "yyyyMMdd")))
|
|
.busType("1")
|
|
.workPlaceCode(addInvDesDetaiRequest.getWorkPlaceCode())
|
|
.createTime(new Date())
|
|
.billTime(new Date())
|
|
.remark(addInvDesDetaiRequest.getRemark())
|
|
.status(1)
|
|
.createUser(addInvDesDetaiRequest.getCreateUser())
|
|
.updateTime(new Date())
|
|
.updateUser(addInvDesDetaiRequest.getUpdateUser())
|
|
.build();
|
|
save(collectOrder);
|
|
}
|
|
IoSplitFifoInv splitFifoInv = addInvDesDetaiRequest.getSplitFifoInv();
|
|
IoSplitDesOrderDetail splitDesOrderDetail = IoSplitDesOrderDetail.builder()
|
|
.id(IdUtil.getSnowflakeNextId())
|
|
.workPlaceCode(collectOrder.getWorkPlaceCode())
|
|
.orderIdFk(collectOrder.getBillNo())
|
|
.invId(splitFifoInv.getId())
|
|
.relId(splitFifoInv.getRelId())
|
|
.batchNo(splitFifoInv.getBatchNo())
|
|
.produceDate(splitFifoInv.getProduceDate())
|
|
.expireDate(splitFifoInv.getExpireDate())
|
|
.supId(splitFifoInv.getSupId())
|
|
.count(splitFifoInv.getReCount())
|
|
.reCount(splitFifoInv.getReCount())
|
|
.createTime(new Date())
|
|
.updateTime(new Date())
|
|
.remark("").build();
|
|
splitDesOrderDetailService.save(splitDesOrderDetail);
|
|
return collectOrder;
|
|
}
|
|
|
|
@Resource
|
|
IoSplitFifoCodeService splitFifoCodeService;
|
|
@Resource
|
|
IoSplitDesOrderCodeService ioSplitDesOrderCodeService;
|
|
|
|
public IoSplitDesOrder addCode(AddInvDesDetaiRequest addInvDesDetaiRequest) {
|
|
IoSplitFifoCodeEntity splitFifoCodeEntity = splitFifoCodeService.findByCode(addInvDesDetaiRequest.getCode(), addInvDesDetaiRequest.getWorkPlaceCode());
|
|
if (splitFifoCodeEntity == null) {
|
|
throw new JsonException("工位存量不存在,请检查后重试!");
|
|
}
|
|
|
|
IoSplitDesOrder collectOrder;
|
|
if (StrUtil.isNotEmpty(addInvDesDetaiRequest.getBillNo())) {
|
|
collectOrder = getByBillNo(addInvDesDetaiRequest.getBillNo());
|
|
} else {
|
|
collectOrder = IoSplitDesOrder.builder()
|
|
.billNo(gennerOrderUtils.createWdOrderNo(new OrderNoTypeBean(Constant.SPLIT_DES_ORDER, "yyyyMMdd")))
|
|
.busType("1")
|
|
.workPlaceCode(addInvDesDetaiRequest.getWorkPlaceCode())
|
|
.createTime(new Date())
|
|
.billTime(new Date())
|
|
.remark(addInvDesDetaiRequest.getRemark())
|
|
.status(1)
|
|
.createUser(addInvDesDetaiRequest.getCreateUser())
|
|
.updateTime(new Date())
|
|
.updateUser(addInvDesDetaiRequest.getUpdateUser())
|
|
.build();
|
|
save(collectOrder);
|
|
}
|
|
|
|
IoSplitDesOrderCode splitDesOrderCode = new IoSplitDesOrderCode();
|
|
BeanUtil.copyProperties(splitFifoCodeEntity, splitDesOrderCode);
|
|
splitDesOrderCode.setCount(0);
|
|
splitDesOrderCode.setReCount(0);
|
|
ioSplitDesOrderCodeService.save(splitDesOrderCode);
|
|
return collectOrder;
|
|
}
|
|
|
|
|
|
@Resource
|
|
IoSplitFifoInvService ioSplitFifoInvService;
|
|
@Resource
|
|
IoSplitCodeService splitCodeService;
|
|
|
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
public Boolean destroyOut(AddInvDesDetaiRequest addInvDesDetaiRequest) {
|
|
IoSplitDesOrder collectOrder;
|
|
collectOrder = IoSplitDesOrder.builder()
|
|
.id(IdUtil.getSnowflakeNextId())
|
|
.billNo(gennerOrderUtils.createWdOrderNo(new OrderNoTypeBean(Constant.SPLIT_DES_ORDER, "yyyyMMdd")))
|
|
.busType(addInvDesDetaiRequest.getSplitFifoInv().getBusType())
|
|
.orderType(1)
|
|
.workPlaceCode(addInvDesDetaiRequest.getSplitFifoInv().getWorkPlaceCode())
|
|
.createTime(new Date())
|
|
// .billTime(new Date())
|
|
.remark(addInvDesDetaiRequest.getRemark())
|
|
.status(2)
|
|
.createUser(addInvDesDetaiRequest.getCreateUser())
|
|
.updateTime(new Date())
|
|
.updateUser(addInvDesDetaiRequest.getUpdateUser())
|
|
.build();
|
|
boolean save = save(collectOrder);
|
|
if (!save) {
|
|
return false;
|
|
}
|
|
|
|
//拿到 产品库存
|
|
IoSplitFifoInv splitFifoInv = ioSplitFifoInvService.getById(addInvDesDetaiRequest.getSplitFifoInv().getId());
|
|
int count = splitFifoInv.getReCount() - addInvDesDetaiRequest.getOutCount();
|
|
if (count < 0) {
|
|
throw new JsonException(500, "库存不足");
|
|
}
|
|
//修改产品 库存 出库数量 可用数量 剩余数量
|
|
//入库数量是否需要更改?
|
|
splitFifoInv.setOutCount(splitFifoInv.getOutCount() + addInvDesDetaiRequest.getOutCount());//出库数量
|
|
splitFifoInv.setReCount(splitFifoInv.getInCount() - addInvDesDetaiRequest.getOutCount());//剩余数量
|
|
int availableCount = splitFifoInv.getInCount() - addInvDesDetaiRequest.getOutCount() - splitFifoInv.getLockCount();
|
|
if (availableCount <= -1) {
|
|
throw new JsonException(500, "可用数量库存不足");
|
|
}
|
|
//可用数量
|
|
splitFifoInv.setAvailableCount(availableCount);
|
|
// splitFifoInv.setInCount(splitFifoInv.getInCount() - addInvDesDetaiRequest.getOutCount());//入库数量
|
|
splitFifoInv.setUpdateTime(new Date());
|
|
//更改 库存
|
|
boolean update = ioSplitFifoInvService.updateById(splitFifoInv);
|
|
if (!update) {
|
|
return false;
|
|
}
|
|
//todo 码明细删减库存
|
|
IoSplitFifoCodeEntity splitFifoCodeEntity = splitFifoCodeService.getOne(new LambdaQueryWrapper<IoSplitFifoCodeEntity>()
|
|
.eq(IoSplitFifoCodeEntity::getWorkPlaceCode, splitFifoInv.getWorkPlaceCode())
|
|
// .eq(IoSplitFifoCodeEntity::getBatchNo, splitFifoInv.getBatchNo())
|
|
.eq(IoSplitFifoCodeEntity::getRelId, splitFifoInv.getRelId()));
|
|
if (splitFifoCodeEntity == null) {
|
|
throw new JsonException("该工位不存在,请检查后重试!");
|
|
}
|
|
splitFifoCodeEntity.setTotalCount(splitFifoCodeEntity.getTotalCount() - addInvDesDetaiRequest.getOutCount());
|
|
boolean b = splitFifoCodeService.updateById(splitFifoCodeEntity);
|
|
if (!b) {
|
|
throw new JsonException(500, "追溯码库存删减失败");
|
|
}
|
|
// IoSplitFifoInv splitFifoInv = addInvDesDetaiRequest.getSplitFifoInv();
|
|
IoSplitDesOrderDetail splitDesOrderDetail = IoSplitDesOrderDetail.builder()
|
|
.id(IdUtil.getSnowflakeNextId())
|
|
.workPlaceCode(collectOrder.getWorkPlaceCode())
|
|
.orderIdFk(collectOrder.getBillNo())
|
|
.invId(splitFifoInv.getId())
|
|
.relId(splitFifoInv.getRelId())
|
|
.batchNo(splitFifoInv.getBatchNo())
|
|
.produceDate(splitFifoInv.getProduceDate())
|
|
.expireDate(splitFifoInv.getExpireDate())
|
|
.supId(splitFifoInv.getSupId())
|
|
.count(addInvDesDetaiRequest.getOutCount())
|
|
.reCount(addInvDesDetaiRequest.getOutCount())
|
|
.createTime(new Date())
|
|
.updateTime(new Date())
|
|
.remark("").build();
|
|
boolean save1 = splitDesOrderDetailService.save(splitDesOrderDetail);
|
|
if (!save1) {
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
public Boolean destroyOutByCode(AddInvDesDetaiRequest addInvDesDetaiRequest) {
|
|
IoSplitFifoCodeEntity splitFifoCodeEntity = splitFifoCodeService.findByCode(addInvDesDetaiRequest.getCode(), addInvDesDetaiRequest.getSplitFifoInv().getWorkPlaceCode());
|
|
if (splitFifoCodeEntity == null) {
|
|
throw new JsonException("该工位不存在,请检查后重试!");
|
|
}
|
|
IoSplitDesOrder collectOrder;
|
|
collectOrder = IoSplitDesOrder.builder()
|
|
.id(IdUtil.getSnowflakeNextId())
|
|
.billNo(gennerOrderUtils.createWdOrderNo(new OrderNoTypeBean(Constant.SPLIT_DES_ORDER, "yyyyMMdd")))
|
|
.busType(addInvDesDetaiRequest.getSplitFifoInv().getBusType())
|
|
.orderType(1)
|
|
.workPlaceCode(addInvDesDetaiRequest.getSplitFifoInv().getWorkPlaceCode())
|
|
.createTime(new Date())
|
|
.billTime(new Date())
|
|
.remark(addInvDesDetaiRequest.getRemark())
|
|
.status(2)
|
|
.createUser(addInvDesDetaiRequest.getCreateUser())
|
|
.updateTime(new Date())
|
|
.updateUser(addInvDesDetaiRequest.getUpdateUser())
|
|
.build();
|
|
boolean save = save(collectOrder);
|
|
if (!save) {
|
|
return false;
|
|
}
|
|
splitFifoCodeEntity.setTotalCount(splitFifoCodeEntity.getTotalCount() - addInvDesDetaiRequest.getOutCount());
|
|
//是否在增加一个码字段 记录可用数量
|
|
splitFifoCodeEntity.setUpdateTime(new Date());
|
|
boolean b = splitFifoCodeService.updateById(splitFifoCodeEntity);
|
|
// boolean b = splitFifoCodeService.removeById(splitFifoCodeEntity);
|
|
if (!b) {
|
|
return false;
|
|
}
|
|
//拿到 产品库存
|
|
IoSplitFifoInv splitFifoInv = ioSplitFifoInvService.getOne(new LambdaQueryWrapper<IoSplitFifoInv>()
|
|
.eq(IoSplitFifoInv::getId, splitFifoCodeEntity.getInvIdFk()));
|
|
if (splitFifoInv == null) {
|
|
throw new JsonException(500, "未找到该产品!");
|
|
}
|
|
int count = splitFifoInv.getReCount() - addInvDesDetaiRequest.getOutCount();
|
|
if (count < 0) {
|
|
throw new JsonException(500, "库存不足");
|
|
}
|
|
//修改产品 库存 入库数
|
|
|
|
splitFifoInv.setOutCount(splitFifoInv.getOutCount() + addInvDesDetaiRequest.getOutCount());//出库数量
|
|
splitFifoInv.setReCount(splitFifoInv.getInCount() - splitFifoInv.getOutCount());//剩余数量
|
|
int availableCount = splitFifoInv.getInCount() - splitFifoInv.getOutCount() - splitFifoInv.getLockCount();
|
|
if (availableCount <= -1) {
|
|
throw new JsonException(500, "可用数量库存不足");
|
|
}
|
|
// int newAvailableCount = splitFifoInv.getAvailableCount() - availableCount;
|
|
splitFifoInv.setAvailableCount(availableCount);//可用数量
|
|
// splitFifoInv.setInCount(splitFifoInv.getInCount() - addInvDesDetaiRequest.getOutCount());
|
|
splitFifoInv.setUpdateTime(new Date());
|
|
//更改 库存
|
|
boolean update = ioSplitFifoInvService.updateById(splitFifoInv);
|
|
if (!update) {
|
|
return false;
|
|
}
|
|
IoSplitDesOrderDetail splitDesOrderDetail = IoSplitDesOrderDetail.builder()
|
|
.id(IdUtil.getSnowflakeNextId())
|
|
.workPlaceCode(collectOrder.getWorkPlaceCode())
|
|
.orderIdFk(collectOrder.getBillNo())
|
|
.invId(splitFifoInv.getId())
|
|
.relId(splitFifoInv.getRelId())
|
|
.batchNo(splitFifoInv.getBatchNo())
|
|
.produceDate(splitFifoInv.getProduceDate())
|
|
.expireDate(splitFifoInv.getExpireDate())
|
|
.supId(splitFifoInv.getSupId())
|
|
.count(addInvDesDetaiRequest.getOutCount())
|
|
.reCount(addInvDesDetaiRequest.getOutCount())
|
|
.createTime(new Date())
|
|
.updateTime(new Date())
|
|
.remark("").build();
|
|
boolean save1 = splitDesOrderDetailService.save(splitDesOrderDetail);
|
|
if (!save1) {
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
public void splitDesOrder(AddInvDesDetaiRequest addInvDesDetaiRequest) {
|
|
|
|
IoSplitDesOrder collectOrder;
|
|
collectOrder = IoSplitDesOrder.builder()
|
|
.id(IdUtil.getSnowflakeNextId())
|
|
.billNo(gennerOrderUtils.createWdOrderNo(new OrderNoTypeBean(Constant.SPLIT_DES_ORDER, "yyyyMMdd")))
|
|
.busType(addInvDesDetaiRequest.getSplitFifoInv().getBusType())
|
|
.workPlaceCode(addInvDesDetaiRequest.getSplitFifoInv().getWorkPlaceCode())
|
|
.createTime(new Date())
|
|
.billTime(new Date())
|
|
.remark(addInvDesDetaiRequest.getRemark())
|
|
.status(2)
|
|
.createUser(addInvDesDetaiRequest.getCreateUser())
|
|
.updateTime(new Date())
|
|
.updateUser(addInvDesDetaiRequest.getUpdateUser())
|
|
.build();
|
|
save(collectOrder);
|
|
IoSplitCodeEntity splitCodeEntity = splitCodeService.getById(addInvDesDetaiRequest.getSplitFifoInv().getId());
|
|
// IoSplitCodeEntity splitCodeEntity = splitCodeService.findByCode(addInvDesDetaiRequest.getCode(), addInvDesDetaiRequest.getSplitFifoInv().getWorkPlaceCode(), null);
|
|
if (splitCodeEntity == null) {
|
|
throw new JsonException(500, "该追溯码不存在!");
|
|
}
|
|
int count = IntUtil.value(splitCodeEntity.getRemainCount()) - IntUtil.value(addInvDesDetaiRequest.getOutCount());
|
|
if (count < 0) {
|
|
if (splitCodeEntity == null) {
|
|
throw new RuntimeException("存量不足!");
|
|
}
|
|
count = 0;
|
|
}
|
|
splitCodeEntity.setRemainCount(count);
|
|
// splitCodeService.updateById(splitCodeEntity);
|
|
splitCodeService.removeById(splitCodeEntity);
|
|
//损耗详细表
|
|
IoSplitDesOrderDetail splitDesOrderDetail = IoSplitDesOrderDetail.builder()
|
|
.id(IdUtil.getSnowflakeNextId())
|
|
.workPlaceCode(collectOrder.getWorkPlaceCode())
|
|
.orderIdFk(collectOrder.getBillNo())
|
|
// .invId(splitFifoInv.getId())
|
|
.relId(splitCodeEntity.getRelId())
|
|
.batchNo(splitCodeEntity.getBatchNo())
|
|
.produceDate(splitCodeEntity.getProduceDate())
|
|
.expireDate(splitCodeEntity.getExpireDate())
|
|
.supId(splitCodeEntity.getSupId())
|
|
.count(addInvDesDetaiRequest.getOutCount())
|
|
.reCount(addInvDesDetaiRequest.getOutCount())
|
|
.createTime(new Date())
|
|
.updateTime(new Date())
|
|
.remark("").build();
|
|
boolean save1 = splitDesOrderDetailService.save(splitDesOrderDetail);
|
|
if (!save1){
|
|
throw new JsonException(500,"单据明细保存错误");
|
|
}
|
|
}
|
|
}
|