|
|
|
|
@ -5,6 +5,7 @@ import cn.hutool.core.util.StrUtil; |
|
|
|
|
import com.baomidou.mybatisplus.core.conditions.Wrapper; |
|
|
|
|
import com.baomidou.mybatisplus.core.metadata.IPage; |
|
|
|
|
import jakarta.annotation.Resource; |
|
|
|
|
import jakarta.servlet.http.HttpServletRequest; |
|
|
|
|
import lombok.extern.slf4j.Slf4j; |
|
|
|
|
import net.sourceforge.barbecue.Barcode; |
|
|
|
|
import net.sourceforge.barbecue.BarcodeFactory; |
|
|
|
|
@ -24,6 +25,8 @@ import org.springblade.wms.pojo.vo.*; |
|
|
|
|
import org.springblade.wms.service.*; |
|
|
|
|
import org.springframework.stereotype.Service; |
|
|
|
|
import org.springframework.transaction.annotation.Transactional; |
|
|
|
|
import org.springframework.web.context.request.RequestContextHolder; |
|
|
|
|
import org.springframework.web.context.request.ServletRequestAttributes; |
|
|
|
|
|
|
|
|
|
import javax.imageio.ImageIO; |
|
|
|
|
import java.awt.image.BufferedImage; |
|
|
|
|
@ -232,7 +235,7 @@ public class StRealtimeStockServiceImpl extends BaseServiceImpl<StRealtimeStockM |
|
|
|
|
|
|
|
|
|
// 初始化返回集合,收集批量处理的rlsId
|
|
|
|
|
List<Long> rlsIdList = new ArrayList<>(); |
|
|
|
|
|
|
|
|
|
List<String> warnMsgList = new ArrayList<>(); |
|
|
|
|
// 遍历出入库记录列表,批量执行核心业务逻辑
|
|
|
|
|
for (int i = 0; i < inoutList.size(); i++) { |
|
|
|
|
// 3.1 获取当前索引对应的单个对象
|
|
|
|
|
@ -357,9 +360,14 @@ public class StRealtimeStockServiceImpl extends BaseServiceImpl<StRealtimeStockM |
|
|
|
|
} |
|
|
|
|
stGoodsService.addCurQuantity(inout.getGoodsId(), BigDecimal.valueOf(0).subtract(BigDecimal.valueOf(quantity)).doubleValue()); |
|
|
|
|
// ========== 新增:其他/刀具出库后校验最低库存预警 ==========
|
|
|
|
|
checkAndWarnMinStock(stGoods, inout.getGoodsId(), quantity); |
|
|
|
|
checkAndTriggerReissue(stGoods, inout.getGoodsId(), quantity); |
|
|
|
|
|
|
|
|
|
String warnMsg = checkAndWarnMinStock(stGoods, inout.getGoodsId(), quantity); |
|
|
|
|
if (warnMsg != null) { |
|
|
|
|
warnMsgList.add(warnMsg); |
|
|
|
|
} |
|
|
|
|
String warnMsg2 = checkAndTriggerReissue(stGoods, inout.getGoodsId(), quantity); |
|
|
|
|
if (warnMsg2 != null) { |
|
|
|
|
warnMsgList.add(warnMsg2); |
|
|
|
|
} |
|
|
|
|
}// 新增:玻璃饼出库独立分支(与其他出库/刀具出库平级)
|
|
|
|
|
else if (StStockInoutRecord.INOUT_SOURCE_GLASS_CAKE_OUT.equals(inout.getInOutSource())) { |
|
|
|
|
// 玻璃饼出库专属:预占用校验(规则与原有一致)
|
|
|
|
|
@ -385,8 +393,14 @@ public class StRealtimeStockServiceImpl extends BaseServiceImpl<StRealtimeStockM |
|
|
|
|
// 玻璃饼出库:扣减库存(规则与其他出库一致,也可单独定制)
|
|
|
|
|
stGoodsService.addCurQuantity(inout.getGoodsId(), BigDecimal.valueOf(0).subtract(BigDecimal.valueOf(quantity)).doubleValue()); |
|
|
|
|
// ========== 新增:玻璃饼出库后校验最低库存预警 ==========
|
|
|
|
|
checkAndWarnMinStock(stGoods, inout.getGoodsId(), quantity); |
|
|
|
|
checkAndTriggerReissue(stGoods, inout.getGoodsId(), quantity); |
|
|
|
|
String warnMsg3 = checkAndWarnMinStock(stGoods, inout.getGoodsId(), quantity); |
|
|
|
|
if (warnMsg3 != null) { |
|
|
|
|
warnMsgList.add(warnMsg3); |
|
|
|
|
} |
|
|
|
|
String warnMsg4 = checkAndTriggerReissue(stGoods, inout.getGoodsId(), quantity); |
|
|
|
|
if (warnMsg4 != null) { |
|
|
|
|
warnMsgList.add(warnMsg4); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
// else if (StStockInoutRecord.INOUT_SOURCE_ASSIGN_OUT.equals(inout.getInOutSource())) {
|
|
|
|
|
// if (!stock.getMoldBaseMaterial()) {
|
|
|
|
|
@ -444,6 +458,11 @@ public class StRealtimeStockServiceImpl extends BaseServiceImpl<StRealtimeStockM |
|
|
|
|
rlsIdList.add(rlsId); |
|
|
|
|
} |
|
|
|
|
//
|
|
|
|
|
if (!warnMsgList.isEmpty()) { |
|
|
|
|
// 把消息存到 REQUEST,给前端展示
|
|
|
|
|
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); |
|
|
|
|
request.setAttribute("warnMsgList", warnMsgList); |
|
|
|
|
} |
|
|
|
|
// // 返回批量处理后的rlsId列表
|
|
|
|
|
return rlsIdList; |
|
|
|
|
} |
|
|
|
|
@ -526,7 +545,7 @@ public class StRealtimeStockServiceImpl extends BaseServiceImpl<StRealtimeStockM |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 2. 仅开启最低库存预警时,才执行校验
|
|
|
|
|
if (Boolean.TRUE.equals(stGoods.getMinWarning())) { |
|
|
|
|
if ("1".equals(stGoods.getMinWarning())) { |
|
|
|
|
// 3. 计算出库后库存,处理最低库存空值(默认0)
|
|
|
|
|
Double currentStock = stGoods.getCurrentQuantity() - outQuantity; |
|
|
|
|
Double minStock = stGoods.getMinNum() == null ? 0.0 : stGoods.getMinNum(); |
|
|
|
|
|