仓库管理修改

liweidong
wusiyu 3 days ago
parent 4a11bcdefd
commit 7a0cab5efa
  1. 2
      blade-service-api/blade-wms-api/src/main/java/org/springblade/wms/pojo/entity/StBuyOrder.java
  2. 5
      blade-service-api/blade-wms-api/src/main/java/org/springblade/wms/pojo/entity/StOtherOutRecord.java
  3. 3
      blade-service/blade-wms/src/main/java/org/springblade/wms/controller/StBuyOrderController.java
  4. 3
      blade-service/blade-wms/src/main/java/org/springblade/wms/mapper/StAllotRecordMapper.xml
  5. 12
      blade-service/blade-wms/src/main/java/org/springblade/wms/service/impl/StBuyOrderServiceImpl.java
  6. 7
      blade-service/blade-wms/src/main/java/org/springblade/wms/service/impl/StOtherOutRecordServiceImpl.java
  7. 33
      blade-service/blade-wms/src/main/java/org/springblade/wms/service/impl/StRealtimeStockServiceImpl.java

@ -138,7 +138,7 @@ public class StBuyOrder extends TenantEntity {
* 检查人
*/
@Schema(description = "检查人")
private String checkMan;
private Long checkMan;
/**
* 检查时间
*/

@ -115,6 +115,11 @@ public class StOtherOutRecord extends TenantEntity {
*/
@Schema(description = "领料人ID")
private Long picker;
/**
* 借用报废记录ID
*/
@Schema(description = "借用报废记录ID")
private Long rrId;
/*0:报废出库,1:料头出库,2.超额出库,3复检出库,4领用出库,5库转移,6退货出库,11不合格退库*/
public static final Short OUT_TYPE_SCRAP = 0;

@ -105,9 +105,8 @@ public class StBuyOrderController extends BladeController {
stBuyOrder.setApprovalStatus(StBuyOrder.APPROVAL_STATUS_CHECKING);
}
/* 2. 默认排序:boCode 升序(*/
if (StrUtil.isBlank(query.getAscs()) && StrUtil.isBlank(query.getDescs())) {
query.setAscs("bo_code");
query.setDescs("create_time");
}
IPage<StBuyOrderVO> pages = stBuyOrderService.selectStBuyOrderPage(Condition.getPage(query), stBuyOrder);

@ -51,7 +51,7 @@
AND g.goods_code LIKE CONCAT('%', #{ew.entity.goodsCode}, '%')
</if>
</if>
ORDER BY a.create_time DESC
</select>
<select id="selectStAllotRecordPage" resultType="org.springblade.wms.pojo.vo.StAllotRecordVO">
@ -80,6 +80,7 @@
<if test="param2.goodsCode != null and param2.goodsCode != ''">
AND g.goods_code = #{param2.goodsCode}
</if>
ORDER BY a.create_time DESC
</select>

@ -226,7 +226,7 @@ public class StBuyOrderServiceImpl extends BaseServiceImpl<StBuyOrderMapper, StB
// 3. 更新审批状态
buyOrder.setApprovalStatus(approvalResult);
buyOrder.setCheckMan(approver.getNickName());
buyOrder.setCheckMan(approver.getUserId());
buyOrder.setCheckDate(new Date());
baseMapper.updateById(buyOrder);
@ -277,14 +277,18 @@ public class StBuyOrderServiceImpl extends BaseServiceImpl<StBuyOrderMapper, StB
StGoods goods = stGoodsService.getById(bo.getGoodsId());
dto.setPrtno(goods.getGoodsCode());
dto.setPrtlotno(StrUtil.blankToDefault(bo.getGrade(), " "));
dto.setReqdept(AuthUtil.getUser().getDeptId().toString()); // 当前人部门
dto.setReqdept(AuthUtil.getUser().getDeptId().toString()); // 当前人部门"3400"
dto.setReqdat(bo.getNeedDate() == null ? "" : DateUtil.format(bo.getNeedDate(), "yyyy-MM-dd"));
dto.setReqqty(BigDecimal.valueOf(Optional.ofNullable(bo.getBuyQty()).orElse(0D)));
dto.setReqdate(bo.getDeclareDate() == null ? "" : DateUtil.format(bo.getDeclareDate(), "yyyy-MM-dd"));
dto.setPlnarea(bo.getPlanArea());
dto.setReqctlr(String.valueOf(AuthUtil.getUser().getUserId())); // 当前登录人
R<User> ruser = userClient.userInfoById(bo.getDeclareMan());
User declareMan = ruser.getData();
dto.setReqctlr(declareMan.getAccount()); // 当前登录人
dto.setCheckdate(bo.getCheckDate() == null ? "" : DateUtil.format(bo.getCheckDate(), "yyyy-MM-dd"));
dto.setCheckman(bo.getCheckMan() == null ? "" : bo.getCheckMan());
R<User> userR = userClient.userInfoById(bo.getCheckMan());
User checkMan = userR.getData();
dto.setCheckman(checkMan.getAccount() == null ? "" : checkMan.getAccount());
pdList.add(dto);
}

@ -73,6 +73,7 @@ public class StOtherOutRecordServiceImpl extends BaseServiceImpl<StOtherOutRecor
stOtherOutRecord.setCreateTime(new Date());
stOtherOutRecord.setUpdateUser(user.getUserId());
stOtherOutRecord.setUpdateTime(new Date());
stOtherOutRecord.setRrId(rrId);
// 3. 先保存出库单基础记录(获取ID)
this.save(stOtherOutRecord);
@ -184,6 +185,12 @@ public class StOtherOutRecordServiceImpl extends BaseServiceImpl<StOtherOutRecor
stOtherOutRecord.setUpdateUser(user.getUserId());
stOtherOutRecord.setUpdateTime(new Date());
this.updateById(stOtherOutRecord);
if(stOtherOutRecord.getBfType() == 2 && stOtherOutRecord.getRrId() != null){
StReturnRecord stReturnRecord = stReturnRecordMapper.selectById(stOtherOutRecord.getRrId());
stReturnRecord.setBfCode(detail.getSirCode());
stReturnRecordMapper.updateById(stReturnRecord);
}
}
stRealtimeStockService.reviseRealTimeStock(Collections.singletonList(detail), Collections.singletonList(stock), null);

@ -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();

Loading…
Cancel
Save