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.
udi-wms-java/src/main/java/com/glxp/api/service/inout/IoSplitFifoInvService.java

323 lines
18 KiB
Java

10 months ago
package com.glxp.api.service.inout;
import cn.hutool.core.collection.CollUtil;
10 months ago
import cn.hutool.core.lang.Assert;
import cn.hutool.core.thread.ThreadUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.StrUtil;
10 months ago
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
10 months ago
import com.github.pagehelper.PageHelper;
10 months ago
import com.glxp.api.entity.basic.SysWorkplaceDocumentEntity;
import com.glxp.api.entity.basic.SysWorkplaceLayer;
import com.glxp.api.entity.basic.SysWorkplacePutRel;
import com.glxp.api.entity.basic.SysWorkplaceQueue;
import com.glxp.api.entity.collect.IoSplitFifoInvRel;
import com.glxp.api.entity.inout.IoCodeEntity;
import com.glxp.api.entity.inout.IoOrderEntity;
import com.glxp.api.entity.inout.IoSplitFifoCodeEntity;
8 months ago
import com.glxp.api.exception.JsonException;
import com.glxp.api.req.basic.SysWorkplaceLayerRequest;
10 months ago
import com.glxp.api.req.inout.IoSplitFifoInvRequest;
import com.glxp.api.res.inout.IoSplitInvResponse;
10 months ago
import com.glxp.api.service.basic.SysWorkplaceDocumentService;
import com.glxp.api.service.basic.SysWorkplaceLayerService;
import com.glxp.api.service.basic.SysWorkplaceQueueService;
import com.glxp.api.service.collect.IoSplitFifoInvRelService;
import com.glxp.api.service.thrsys.SysWorkplacePutRelService;
import com.glxp.api.util.IntUtil;
10 months ago
import org.apache.xpath.operations.Bool;
import org.springframework.beans.BeanUtils;
10 months ago
import org.springframework.stereotype.Service;
10 months ago
import javax.annotation.Resource;
import java.util.ArrayList;
10 months ago
import java.util.Collections;
import java.util.Date;
10 months ago
import java.util.List;
import java.util.stream.Collectors;
10 months ago
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.glxp.api.entity.inout.IoSplitFifoInv;
import com.glxp.api.dao.inout.IoSplitFifoInvMapper;
10 months ago
import org.springframework.transaction.annotation.Transactional;
10 months ago
@Service
public class IoSplitFifoInvService extends ServiceImpl<IoSplitFifoInvMapper, IoSplitFifoInv> {
@Resource
IoSplitFifoCodeService splitFifoCodeService;
10 months ago
@Resource
SysWorkplaceDocumentService sysWorkplaceDocumentService;
10 months ago
/**
*
*
* @param codeList
*/
10 months ago
@Transactional(rollbackFor = Exception.class)
public void insertInv(List<IoCodeEntity> codeList, IoOrderEntity orderEntity) {
List<IoSplitFifoCodeEntity> splitCodeEntities = new ArrayList<>();
if (CollUtil.isNotEmpty(codeList)) {
long index = 1;
for (IoCodeEntity codeEntity : codeList) {
IoSplitFifoCodeEntity ioSplitFifoCodeEntity = null;
if (StrUtil.isEmpty(codeEntity.getSerialNo())) {
ioSplitFifoCodeEntity = splitFifoCodeService.findByCode(codeEntity.getCode(), orderEntity.getWorkPlaceCode());
}
if (ioSplitFifoCodeEntity != null) {
ioSplitFifoCodeEntity.setScanCount(IntUtil.value(ioSplitFifoCodeEntity.getScanCount()) + IntUtil.value(codeEntity.getCount()));
ioSplitFifoCodeEntity.setTotalCount(ioSplitFifoCodeEntity.getTotalCount() + codeEntity.getReCount());
ioSplitFifoCodeEntity.setUpdateTime(new Date());
ioSplitFifoCodeEntity.setBusType(orderEntity.getSplitBusType());
ioSplitFifoCodeEntity.setWorkPlaceQueueCode(orderEntity.getWorkPlaceQueueCode());
splitFifoCodeService.updateById(ioSplitFifoCodeEntity);
IoSplitFifoInv splitFifoInv = findByFifoCode(ioSplitFifoCodeEntity);
if (splitFifoInv != null) {
splitFifoInv.setInCount(IntUtil.value(splitFifoInv.getInCount()) + IntUtil.value(codeEntity.getReCount()));
// splitFifoInv.setReCount(IntUtil.value(splitFifoInv.getInCount()) - IntUtil.value(codeEntity.getReCount()));
splitFifoInv.setReCount(IntUtil.value(splitFifoInv.getInCount()) - IntUtil.value(splitFifoInv.getOutCount()));
//入库 - 出库 - 锁定
splitFifoInv.setAvailableCount(IntUtil.value(splitFifoInv.getInCount()) - IntUtil.value(splitFifoInv.getOutCount()) - IntUtil.value(splitFifoInv.getLockCount()));
// splitFifoInv.setAvailableCount(IntUtil.value(splitFifoInv.getInCount()) + IntUtil.value(ioSplitFifoCodeEntity.getTotalCount()));
updateById(splitFifoInv);
}
} else {
IoSplitFifoCodeEntity splitCodeEntity = new IoSplitFifoCodeEntity();
BeanUtils.copyProperties(codeEntity, splitCodeEntity);
splitCodeEntity.setInBactchNo(codeEntity.getInBatchNo());
splitCodeEntity.setScanCount(codeEntity.getCount());
splitCodeEntity.setTotalCount(IntUtil.value(splitCodeEntity.getTotalCount()) + codeEntity.getReCount());
if (StrUtil.isNotEmpty(codeEntity.getSupId()))
splitCodeEntity.setSupId(Long.parseLong(codeEntity.getSupId()));
splitCodeEntity.setWorkPlaceCode(orderEntity.getWorkPlaceCode());
splitCodeEntity.setWorkPlaceQueueCode(orderEntity.getWorkPlaceQueueCode());
splitCodeEntity.setFifoSplit(codeEntity.getFifoSplit());
splitCodeEntity.setBusType(orderEntity.getSplitBusType());
index++;
splitCodeEntity.setInBactchNo(System.currentTimeMillis() + index + "");
splitCodeEntity.setId(null);
splitCodeEntities.add(splitCodeEntity);
}
}
}
10 months ago
for (IoSplitFifoCodeEntity ioSplitFifoCodeEntity : splitCodeEntities) {
// Boolean isOnlyInv = sysWorkplaceDocumentService.isOnlyInv(ioSplitFifoCodeEntity.getWorkPlaceCode(), ioSplitFifoCodeEntity.getBusType());
IoSplitFifoInv splitFifoInv = findByFifoCode(ioSplitFifoCodeEntity);
10 months ago
if (splitFifoInv != null) {
splitFifoInv.setInCount(IntUtil.value(splitFifoInv.getInCount()) + IntUtil.value(ioSplitFifoCodeEntity.getTotalCount()));
splitFifoInv.setReCount(IntUtil.value(splitFifoInv.getInCount()) - IntUtil.value(splitFifoInv.getOutCount()));
splitFifoInv.setAvailableCount(IntUtil.value(splitFifoInv.getAvailableCount()) + IntUtil.value(ioSplitFifoCodeEntity.getTotalCount()));
updateById(splitFifoInv);
} else {
splitFifoInv = IoSplitFifoInv.builder()
.id(IdUtil.getSnowflakeNextId())
.workPlaceCode(ioSplitFifoCodeEntity.getWorkPlaceCode())
.deptCode(ioSplitFifoCodeEntity.getDeptCode())
.invCode(ioSplitFifoCodeEntity.getInvCode())
.productType(ioSplitFifoCodeEntity.getProductType())
.fifoSplit(ioSplitFifoCodeEntity.getFifoSplit())
.relId(ioSplitFifoCodeEntity.getRelId())
.batchNo(ioSplitFifoCodeEntity.getBatchNo())
.produceDate(ioSplitFifoCodeEntity.getProduceDate())
.expireDate(ioSplitFifoCodeEntity.getExpireDate())
.supId(ioSplitFifoCodeEntity.getSupId())
.inCount(ioSplitFifoCodeEntity.getTotalCount())
.outCount(0)
.reCount(IntUtil.value(ioSplitFifoCodeEntity.getTotalCount()))
10 months ago
.availableCount(IntUtil.value(ioSplitFifoCodeEntity.getTotalCount()))
.lockCount(0)
.createTime(new Date())
.updateTime(new Date())
.remark(null)
.enableRemind(false)
.invRemindCount(0)
.workPlaceQueueCode(orderEntity.getWorkPlaceQueueCode() == null ? setQueueCode(ioSplitFifoCodeEntity.getWorkPlaceCode(), orderEntity.getCreateUser()) : orderEntity.getWorkPlaceQueueCode()).build();
// if (isOnlyInv) {
// splitFifoInv.setBusType(ioSplitFifoCodeEntity.getBusType());
// }
save(splitFifoInv);
//更新库存工位关联
List<SysWorkplacePutRel> sysWorkplacePutRels = sysWorkplacePutRelService.selectByWorkPutCode(orderEntity.getWorkPlaceCode());
if (CollUtil.isNotEmpty(sysWorkplacePutRels)) {
for (SysWorkplacePutRel sysWorkplacePutRel : sysWorkplacePutRels) {
IoSplitFifoInvRel splitFifoInvRel = new IoSplitFifoInvRel();
splitFifoInvRel.setInvIdFk(splitFifoInv.getId());
splitFifoInvRel.setPutWorkCode(orderEntity.getWorkPlaceCode());
splitFifoInvRel.setCollectWorkCode(sysWorkplacePutRel.getCollectWorkCode());
splitFifoInvRel.setBusType(sysWorkplacePutRel.getCollectBusType());
splitFifoInvRel.setCreateTime(new Date());
splitFifoInvRel.setUpdateTime(new Date());
splitFifoInvRelService.saveOrUpdate(splitFifoInvRel);
}
}
10 months ago
}
ioSplitFifoCodeEntity.setInvIdFk(splitFifoInv.getId());
10 months ago
}
splitFifoCodeService.saveBatch(splitCodeEntities);
}
@Resource
SysWorkplaceQueueService sysWorkplaceQueueService;
@Resource
SysWorkplaceLayerService sysWorkplaceLayerService;
public String setQueueCode(Long workPlaceCode, String userId) {
List<SysWorkplaceQueue> queues = sysWorkplaceQueueService.list(new LambdaQueryWrapper<SysWorkplaceQueue>().eq(SysWorkplaceQueue::getWorkPlaceIdFk, workPlaceCode));
if (queues.size() == 0) {
throw new JsonException(500, "请增加取货槽");
8 months ago
}
SysWorkplaceQueue workplaceQueue = queues.get(0);
// 使用流来过滤掉匹配的元素
List<SysWorkplaceQueue> filteredQueues = queues.stream()
.filter(queue -> {
IoSplitFifoInv one = getOne(
new LambdaQueryWrapper<IoSplitFifoInv>()
.eq(IoSplitFifoInv::getWorkPlaceQueueCode, queue.getCode())
);
return one == null; // 只保留那些没有匹配的槽位
})
.sorted((queue1, queue2) -> queue1.getCode().compareTo(queue2.getCode()))
.collect(Collectors.toList());
if (filteredQueues.size() > 0) {
//还有剩余的槽位 可分配
SysWorkplaceQueue sysWorkplaceQueue = filteredQueues.get(0);
return sysWorkplaceQueue.getCode();
} else {
//增加一个槽位
SysWorkplaceLayer layer = sysWorkplaceLayerService.getOne(new LambdaQueryWrapper<SysWorkplaceLayer>().eq(SysWorkplaceLayer::getCode, workplaceQueue.getLayerCode()));
SysWorkplaceLayerRequest sysWorkplaceLayerRequest = new SysWorkplaceLayerRequest();
sysWorkplaceLayerRequest.setFreightCode(workplaceQueue.getFreightCode());
sysWorkplaceLayerRequest.setCode(workplaceQueue.getLayerCode());
sysWorkplaceLayerRequest.setWorkPlaceIdFk(workPlaceCode);
sysWorkplaceLayerRequest.setQueueNum(layer.getQueueNum() + 1);
sysWorkplaceLayerService.addSysWorkplaceLayer(sysWorkplaceLayerRequest, Long.valueOf(userId));
}
return setQueueCode(workPlaceCode, userId);
}
@Resource
SysWorkplacePutRelService sysWorkplacePutRelService;
@Resource
IoSplitFifoInvRelService splitFifoInvRelService;
10 months ago
/**
*
*
* @param codeList
* @param workPlaceCode
*/
10 months ago
@Transactional(rollbackFor = Exception.class)
public void removeInv(List<IoCodeEntity> codeList, Long workPlaceCode) {
List<IoSplitFifoCodeEntity> splitCodeEntities = new ArrayList<>();
if (CollUtil.isNotEmpty(codeList)) {
for (IoCodeEntity codeEntity : codeList) {
IoSplitFifoCodeEntity ioSplitFifoCodeEntity = splitFifoCodeService.findByCode(codeEntity.getCode(), workPlaceCode);
if (StrUtil.isEmpty(codeEntity.getSerialNo())) {
if (ioSplitFifoCodeEntity != null) {
ioSplitFifoCodeEntity.setScanCount(IntUtil.value(ioSplitFifoCodeEntity.getScanCount()) - IntUtil.value(codeEntity.getCount()));
ioSplitFifoCodeEntity.setTotalCount(IntUtil.value(ioSplitFifoCodeEntity.getTotalCount()) - IntUtil.value(codeEntity.getReCount()));
ioSplitFifoCodeEntity.setUpdateTime(new Date());
splitFifoCodeService.updateById(ioSplitFifoCodeEntity);
IoSplitFifoInv splitFifoInv = findByFifoCode(ioSplitFifoCodeEntity);
if (splitFifoInv != null) {
splitFifoInv.setOutCount(IntUtil.value(splitFifoInv.getOutCount()) + IntUtil.value(codeEntity.getReCount()));
splitFifoInv.setReCount(IntUtil.value(splitFifoInv.getInCount()) - IntUtil.value(codeEntity.getReCount()));
splitFifoInv.setAvailableCount(IntUtil.value(splitFifoInv.getInCount()) - IntUtil.value(splitFifoInv.getOutCount()) - IntUtil.value(splitFifoInv.getLockCount()));
updateById(splitFifoInv);
}
if (ioSplitFifoCodeEntity.getScanCount() == 0) {
splitFifoCodeService.removeById(ioSplitFifoCodeEntity);
}
}
} else {
if (ioSplitFifoCodeEntity != null)
splitCodeEntities.add(ioSplitFifoCodeEntity);
}
}
}
splitFifoCodeService.removeBatchByIds(splitCodeEntities);
for (IoSplitFifoCodeEntity ioSplitFifoCodeEntity : splitCodeEntities) {
IoSplitFifoInv splitFifoInv = findByFifoCode(ioSplitFifoCodeEntity);
if (splitFifoInv != null) {
splitFifoInv.setOutCount(IntUtil.value(splitFifoInv.getOutCount()) + IntUtil.value(ioSplitFifoCodeEntity.getTotalCount()));
splitFifoInv.setReCount(IntUtil.value(splitFifoInv.getInCount()) - IntUtil.value(splitFifoInv.getOutCount()));
splitFifoInv.setAvailableCount(IntUtil.value(splitFifoInv.getInCount()) - IntUtil.value(splitFifoInv.getOutCount()) - IntUtil.value(splitFifoInv.getLockCount()));
updateById(splitFifoInv);
}
}
}
public IoSplitFifoInv findByFifoCode(IoSplitFifoCodeEntity ioSplitFifoCodeEntity) {
// Boolean isOnlyInv = sysWorkplaceDocumentService.isOnlyInv(ioSplitFifoCodeEntity.getWorkPlaceCode(), ioSplitFifoCodeEntity.getBusType());
IoSplitFifoInv splitFifoInv = getOne(new LambdaQueryWrapper<IoSplitFifoInv>()
.eq(IoSplitFifoInv::getRelId, ioSplitFifoCodeEntity.getRelId())
.eq(IoSplitFifoInv::getWorkPlaceCode, ioSplitFifoCodeEntity.getWorkPlaceCode())
.eq(StrUtil.isNotEmpty(ioSplitFifoCodeEntity.getBatchNo()), IoSplitFifoInv::getBatchNo, ioSplitFifoCodeEntity.getBatchNo())
.eq(ioSplitFifoCodeEntity.getSupId() != null, IoSplitFifoInv::getSupId, ioSplitFifoCodeEntity.getSupId()).last("limit 1"));
// .eq(StrUtil.isNotEmpty(ioSplitFifoCodeEntity.getBusType()) && isOnlyInv, IoSplitFifoInv::getBusType, ioSplitFifoCodeEntity.getBusType())
return splitFifoInv;
}
10 months ago
/**
*
10 months ago
* 1:2:3:
*
10 months ago
* @param ioSplitFifoInvRequest
* @return
*/
public List<IoSplitInvResponse> filterList(IoSplitFifoInvRequest ioSplitFifoInvRequest) {
if (ioSplitFifoInvRequest == null) {
return Collections.emptyList();
}
if (ioSplitFifoInvRequest.getPage() != null) {
int offset = (ioSplitFifoInvRequest.getPage() - 1) * ioSplitFifoInvRequest.getLimit();
PageHelper.offsetPage(offset, ioSplitFifoInvRequest.getLimit());
}
10 months ago
List<IoSplitInvResponse> ioSplitInvResponses = this.baseMapper.filterList(ioSplitFifoInvRequest);
if (CollUtil.isNotEmpty(ioSplitInvResponses)) {
ioSplitInvResponses.forEach(t -> {
if (t.getEnableRemind()) {
10 months ago
int count = t.getReCount() - t.getInvRemindCount();
if (count >= 0) {
10 months ago
t.setRemindState(1);
} else {
10 months ago
t.setRemindState(2);
10 months ago
}
} else {
10 months ago
t.setRemindState(1);
}
});
return ioSplitInvResponses;
} else {
10 months ago
return Collections.emptyList();
}
10 months ago
}
/**
*
*
10 months ago
* @param ioSplitFifoInvRequest
*/
@Transactional(rollbackFor = Exception.class)
public void remindSet(IoSplitFifoInvRequest ioSplitFifoInvRequest) {
Assert.notNull(ioSplitFifoInvRequest.getId(), "Id不能为空");
10 months ago
IoSplitFifoInv old = this.getById(ioSplitFifoInvRequest.getId());
Assert.notNull(old, "不存在该库存预警设置");
10 months ago
this.lambdaUpdate()
.set(ioSplitFifoInvRequest.getEnableRemind() != null, IoSplitFifoInv::getEnableRemind, ioSplitFifoInvRequest.getEnableRemind() ? 1 : 0)
.set(ioSplitFifoInvRequest.getInvRemindCount() != null, IoSplitFifoInv::getInvRemindCount, ioSplitFifoInvRequest.getInvRemindCount())
.set(IoSplitFifoInv::getUpdateTime, new Date())
.eq(IoSplitFifoInv::getId, ioSplitFifoInvRequest.getId())
10 months ago
.update();
}
10 months ago
}