package com.glxp.api.service.inout; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.thread.ThreadUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.glxp.api.entity.inout.IoCodeEntity; import com.glxp.api.entity.inout.IoSplitFifoCodeEntity; import com.glxp.api.util.IntUtil; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.ArrayList; import java.util.Date; import java.util.List; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.glxp.api.entity.inout.IoSplitFifoInv; import com.glxp.api.dao.inout.IoSplitFifoInvMapper; import org.springframework.transaction.annotation.Transactional; @Service public class IoSplitFifoInvService extends ServiceImpl { @Resource IoSplitFifoCodeService splitFifoCodeService; @Transactional(rollbackFor = Exception.class) public void insertInv(List codeList, Long workPlaceCode) { List splitCodeEntities = new ArrayList<>(); if (CollUtil.isNotEmpty(codeList)) { for (IoCodeEntity codeEntity : codeList) { IoSplitFifoCodeEntity ioSplitFifoCodeEntity = null; if (StrUtil.isEmpty(codeEntity.getSerialNo())) { ioSplitFifoCodeEntity = splitFifoCodeService.findByCode(codeEntity.getCode(), workPlaceCode); } if (ioSplitFifoCodeEntity != null) { ioSplitFifoCodeEntity.setScanCount(IntUtil.value(ioSplitFifoCodeEntity.getScanCount()) + IntUtil.value(codeEntity.getCount())); ioSplitFifoCodeEntity.setTotalCount(ioSplitFifoCodeEntity.getTotalCount() + codeEntity.getReCount()); ioSplitFifoCodeEntity.setUpdateTime(new Date()); splitFifoCodeService.updateById(ioSplitFifoCodeEntity); } 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()); splitCodeEntity.setSupId(Long.parseLong(codeEntity.getSupId())); splitCodeEntity.setWorkPlaceCode(workPlaceCode); splitCodeEntity.setFifoSplit(codeEntity.getFifoSplit()); splitCodeEntity.setId(null); splitCodeEntities.add(splitCodeEntity); } } } splitFifoCodeService.saveBatch(splitCodeEntities); //todo 根据工位,产品ID,批次号,供应商 进行库存表新增或插入 for (IoSplitFifoCodeEntity ioSplitFifoCodeEntity : splitCodeEntities) { IoSplitFifoInv splitFifoInv = getOne(new LambdaQueryWrapper() .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")); if (splitFifoInv != null) { // splitFifoInv.setInCount(); } } ThreadUtil.execAsync(() -> { // splitFifoCodeService.preAllotInv(orderEntity.getWorkPlaceCode()); }); } @Transactional(rollbackFor = Exception.class) public void removeInv(List codeList, Long workPlaceCode) { List 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(ioSplitFifoCodeEntity.getTotalCount() + codeEntity.getReCount()); ioSplitFifoCodeEntity.setUpdateTime(new Date()); splitFifoCodeService.updateById(ioSplitFifoCodeEntity); } } else { splitCodeEntities.add(ioSplitFifoCodeEntity); } } } splitFifoCodeService.removeBatchByIds(splitCodeEntities); //todo 根据工位,产品ID,批次号,供应商 进行库存表进行移除 ThreadUtil.execAsync(() -> { // splitFifoCodeService.preAllotInv(orderEntity.getWorkPlaceCode()); }); } }