仓库管理修改

master
wusiyu 3 days ago
parent 1808fc8e1c
commit b09758e64c
  1. 39
      blade-ops/blade-job/src/main/java/org/springblade/job/processor/wms/ExecuteStGoodsExtUpdateProcessor.java
  2. 10
      blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpDataWmsClient.java
  3. 8
      blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpDataWmsClientFallback.java
  4. 29
      blade-service-api/blade-wms-api/src/main/java/org/springblade/wms/feign/WmsTaskClient.java
  5. 7
      blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/feign/ErpDataWmsClient.java
  6. 21
      blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpDataWmsMapper.java
  7. 51
      blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpDataWmsMapper.xml
  8. 4
      blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/IErpDataWmsService.java
  9. 12
      blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/impl/ErpDataWmsServiceImpl.java
  10. 32
      blade-service/blade-wms/src/main/java/org/springblade/wms/feign/WmsTaskClientImpl.java
  11. 2
      blade-service/blade-wms/src/main/java/org/springblade/wms/mapper/StExpireSubmissionMapper.xml
  12. 2
      blade-service/blade-wms/src/main/java/org/springblade/wms/service/IStGoodsExtService.java
  13. 2
      blade-service/blade-wms/src/main/java/org/springblade/wms/service/impl/StExpireSubmissionServiceImpl.java
  14. 35
      blade-service/blade-wms/src/main/java/org/springblade/wms/service/impl/StGoodsExtServiceImpl.java

@ -0,0 +1,39 @@
package org.springblade.job.processor.wms;
import jakarta.annotation.Resource;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springblade.wms.feign.WmsTaskClient;
import org.springframework.stereotype.Component;
import tech.powerjob.worker.core.processor.ProcessResult;
import tech.powerjob.worker.core.processor.TaskContext;
import tech.powerjob.worker.core.processor.sdk.BasicProcessor;
/**
* @version 1.0
* @program: jonhon-mes-svr
* @ClassName ExecuteStGoodsExtUpdateProcessor
* @description:
* @autor: WuSiYu
* @create 2026-04-30 10:08
**/
@Component
@Data
@Slf4j
public class ExecuteStGoodsExtUpdateProcessor implements BasicProcessor {
@Resource
WmsTaskClient wmsTaskClient;
@Override
public ProcessResult process(TaskContext context) throws Exception {
log.info("开始执行物料状态同步erp");
try {
boolean result = wmsTaskClient.executeGoodsStatusUpdate();
log.info("===== 物料状态定时更新完成 =====");
return new ProcessResult(result);
} catch (Exception e) {
log.error("===== 物料状态定时更新异常 =====", e);
return new ProcessResult(false, e.getMessage());
}
}
}

@ -3,6 +3,7 @@ package org.springblade.erpdata.feign;
import org.springblade.common.constant.LauncherConstant;
import org.springblade.common.exception.BusinessException;
import org.springblade.core.tool.api.R;
import org.springblade.erpdata.pojo.vo.StGoodsExtStatusVO;
import org.springblade.wms.pojo.entity.StRealtimeStock;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
@ -10,6 +11,7 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.Date;
import java.util.List;
/**
* @version 1.0
@ -34,6 +36,8 @@ public interface IErpDataWmsClient {
String DELETE_MOLD_PLAN = API_PREFIX + "/deleteMoldPlan";
String GET_GOODS_EXT_STATUS = API_PREFIX + "/getGoodsExtStatus";
/**
* 到期送检发送erp
*/
@ -60,4 +64,10 @@ public interface IErpDataWmsClient {
@PostMapping(DELETE_MOLD_PLAN)
R<String> deleteMoldPlan(@RequestParam("erpWoCode")String erpWoCode) throws BusinessException;
/**
* 物料状态监控同步
*/
@PostMapping(GET_GOODS_EXT_STATUS)
R<List<StGoodsExtStatusVO>> getGoodsExtStatus();
}

@ -1,12 +1,14 @@
package org.springblade.erpdata.feign;
import org.springblade.core.tool.api.R;
import org.springblade.erpdata.pojo.vo.StGoodsExtStatusVO;
import org.springblade.wms.pojo.entity.StRealtimeStock;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.Date;
import java.util.List;
/**
* @version 1.0
@ -39,4 +41,10 @@ public class IErpDataWmsClientFallback implements IErpDataWmsClient{
public R<String> deleteMoldPlan(@RequestParam("erpWoCode")String erpWoCode) {
return R.fail("获取数据失败");
}
@Override
public R<List<StGoodsExtStatusVO>> getGoodsExtStatus() {
return R.fail("获取数据失败");
}
}

@ -0,0 +1,29 @@
package org.springblade.wms.feign;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
/**
* @version 1.0
* @program: jonhon-mes-svr
* @ClassName WmsTaskClient
* @description:
* @autor: WuSiYu
* @create 2026-04-30 10:21
**/
@FeignClient(
value = "blade-wms"
)
public interface WmsTaskClient {
String API_PREFIX = "/feign/client/wms";
String EXECUTE_GOODS_STATUS_UPDATE = API_PREFIX + "/executeGoodsStatusUpdate";
/**
* 物料状态监控同步erp
*/
@PostMapping(EXECUTE_GOODS_STATUS_UPDATE)
boolean executeGoodsStatusUpdate();
}

@ -5,11 +5,13 @@ import lombok.AllArgsConstructor;
import org.springblade.common.exception.BusinessException;
import org.springblade.core.tenant.annotation.NonDS;
import org.springblade.core.tool.api.R;
import org.springblade.erpdata.pojo.vo.StGoodsExtStatusVO;
import org.springblade.erpdata.service.IErpDataWmsService;
import org.springblade.wms.pojo.entity.StRealtimeStock;
import org.springframework.web.bind.annotation.RestController;
import java.util.Date;
import java.util.List;
/**
* @version 1.0
@ -47,4 +49,9 @@ public class ErpDataWmsClient implements IErpDataWmsClient{
public R<String> deleteMoldPlan(String erpWoCode) throws BusinessException {
return R.data(erpDataWmsService.deleteMoldPlan(erpWoCode));
}
@Override
public R<List<StGoodsExtStatusVO>> getGoodsExtStatus() {
return R.data(erpDataWmsService.getGoodsExtStatus());
}
}

@ -0,0 +1,21 @@
package org.springblade.erpdata.mapper;
import com.baomidou.mybatisplus.core.mapper.Mapper;
import org.springblade.erpdata.pojo.vo.StGoodsExtStatusVO;
import java.util.List;
/**
* @version 1.0
* @program: jonhon-mes-svr
* @ClassName ErpDataWmsMapper
* @description:
* @autor: WuSiYu
* @create 2026-04-29 16:52
**/
public interface ErpDataWmsMapper extends Mapper {
List<StGoodsExtStatusVO> getGoodsExtStatus();
}

@ -0,0 +1,51 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace = "org.springblade.erpdata.mapper.ErpDataWmsMapper">
<select id="getGoodsExtStatus" resultType="org.springblade.erpdata.pojo.vo.StGoodsExtStatusVO">
SELECT
g.goods_code,
g.id AS goods_id,
ge.use_average,
ge.id,
-- ERP 一级库存、计划数量
NVL(erp.invqty1j, 0) AS invqty1j,
NVL(erp.planqty, 0) AS planqty,
-- MES 二级库存
NVL(mes.last_qty, 0) AS last_qty,
-- 计算状态 1/2/3/4/5
CASE
WHEN NVL(erp.planqty, 0) + NVL(mes.last_qty, 0) &lt;= NVL(ge.use_average, 0)
THEN 1 -- 需报料
WHEN (NVL(erp.invqty1j, 0) + NVL(mes.last_qty, 0)) &lt; NVL(ge.use_average, 0) AND NVL(erp.planqty, 0) &gt; 0
THEN 2 -- 需跟踪
WHEN NVL(mes.last_qty, 0) &lt; NVL(ge.use_average, 0) AND NVL(erp.planqty, 0) &gt; 0
THEN 3 -- 待领料
WHEN NVL(ge.use_average, 0) = 0
THEN 5 -- 长期未使用
ELSE 4
END AS goods_status
FROM st_goods_ext ge
INNER JOIN st_goods g ON g.id = ge.goods_id
-- 关联 ERP 视图(一级库存 + 计划数量)
LEFT JOIN (
SELECT prtno, MAX(invqty1j) invqty1j, MAX(planqty) planqty
FROM dba_mgr.v_mes_rb_prtstuff
GROUP BY prtno
) erp ON g.goods_code = erp.prtno
-- 关联 MES 二级库存
LEFT JOIN (
SELECT b.goods_code, SUM(a.quantity - a.occupy_quantity) last_qty
FROM st_realtime_stock a
INNER JOIN st_goods b ON a.goods_id = b.id
GROUP BY b.goods_code
) mes ON g.goods_code = mes.goods_code
</select>
</mapper>

@ -1,9 +1,11 @@
package org.springblade.erpdata.service;
import org.springblade.common.exception.BusinessException;
import org.springblade.erpdata.pojo.vo.StGoodsExtStatusVO;
import org.springblade.wms.pojo.entity.StRealtimeStock;
import java.util.Date;
import java.util.List;
/**
* @version 1.0
@ -23,4 +25,6 @@ public interface IErpDataWmsService {
String createMoldPlan(String partCode, String moCode, String plantype, Double quantity, Date needDate, String level, String keeper, String createMan, String memo, String urgentType, String erpWoCode) throws BusinessException;
String deleteMoldPlan(String erpWoCode) throws BusinessException;
List<StGoodsExtStatusVO> getGoodsExtStatus();
}

@ -1,9 +1,12 @@
package org.springblade.erpdata.service.impl;
import jakarta.annotation.Resource;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springblade.common.exception.BusinessException;
import org.springblade.erpdata.mapper.ErpDataWmsMapper;
import org.springblade.erpdata.pojo.vo.StGoodsExtStatusVO;
import org.springblade.erpdata.service.IErpDataWmsService;
import org.springblade.wms.pojo.entity.StRealtimeStock;
import org.springframework.jdbc.core.JdbcTemplate;
@ -15,6 +18,7 @@ import org.springframework.stereotype.Service;
import java.sql.Types;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
@ -31,6 +35,9 @@ import java.util.Map;
@Service
public class ErpDataWmsServiceImpl implements IErpDataWmsService {
@Resource
private final ErpDataWmsMapper erpDataWmsMapper;
private final JdbcTemplate jdbcTemplate;
@Override
@ -209,4 +216,9 @@ public class ErpDataWmsServiceImpl implements IErpDataWmsService {
return excflag;
}
@Override
public List<StGoodsExtStatusVO> getGoodsExtStatus(){
return erpDataWmsMapper.getGoodsExtStatus();
}
}

@ -0,0 +1,32 @@
package org.springblade.wms.feign;
import io.swagger.v3.oas.annotations.Hidden;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springblade.core.tenant.annotation.NonDS;
import org.springblade.wms.service.IStGoodsExtService;
import org.springframework.web.bind.annotation.RestController;
/**
* @version 1.0
* @program: jonhon-mes-svr
* @ClassName WmsTaskClient
* @description:
* @autor: WuSiYu
* @create 2026-04-30 10:20
**/
@NonDS
@Hidden
@RestController
@AllArgsConstructor
@Slf4j
public class WmsTaskClientImpl implements WmsTaskClient{
private final IStGoodsExtService stGoodsExtService;
@Override
public boolean executeGoodsStatusUpdate() {
stGoodsExtService.executeGoodsStatusUpdate();
return true;
}
}

@ -32,7 +32,7 @@
se.es_time AS esTime,
se.es_man AS esMan,
se.submit_status AS submitStatus,
NVL(se.es_qty, 0),
se.es_qty,
-- 物料表:物料编码、物料名称
g.goods_code AS goodsCode,
g.goods_name AS goodsName,

@ -41,5 +41,7 @@ public interface IStGoodsExtService extends BaseService<StGoodsExt> {
IPage<StGoodsExtVO> selectGoodsExtPage(IPage<StGoodsExtVO> page, Map<String, Object> stGoodsExt);
Boolean getSpecial(Long goodsId);
void executeGoodsStatusUpdate();
}

@ -71,6 +71,8 @@ public class StExpireSubmissionServiceImpl extends BaseServiceImpl<StExpireSubmi
throw new RuntimeException("到期送检发送失败: " + ex.getMessage());
}
e.setEsMan(user.getUserId());
e.setSubmitStatus(1);
e.setCreateUser(user.getUserId());
e.setEsTime(new Date());
// 保存送检记录

@ -3,8 +3,12 @@ package org.springblade.wms.service.impl;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.core.mp.support.Condition;
import org.springblade.erpdata.feign.IErpDataWmsClient;
import org.springblade.erpdata.pojo.vo.StGoodsExtStatusVO;
import org.springblade.wms.excel.StGoodsExtExcel;
import org.springblade.wms.mapper.StGoodsExtMapper;
import org.springblade.wms.pojo.entity.StGoodsExt;
@ -23,10 +27,13 @@ import java.util.Map;
* @autor: WuSiYu
* @create 2025-12-15 14:31
**/
@Slf4j
@Service
public class StGoodsExtServiceImpl extends BaseServiceImpl<StGoodsExtMapper, StGoodsExt> implements IStGoodsExtService {
@Resource
private IErpDataWmsClient erpDataWmsClient;
@Override
public IPage<StGoodsExtVO> selectStGoodsExtPage(IPage<StGoodsExtVO> page, StGoodsExtVO stGoodsExt) {
return page.setRecords(baseMapper.selectStGoodsExtPage(page, stGoodsExt));
@ -58,6 +65,32 @@ public class StGoodsExtServiceImpl extends BaseServiceImpl<StGoodsExtMapper, StG
return stGoodsExt.getSpecial() != null ? stGoodsExt.getSpecial() : false;
}
@Override
public void executeGoodsStatusUpdate() {
try {
// 1. 调用你的 Mapper 方法,查询所有商品计算后的状态
List<StGoodsExtStatusVO> statusList = erpDataWmsClient.getGoodsExtStatus().getData();
// 2. 遍历结果,更新到 st_goods_ext 表
for (StGoodsExtStatusVO vo : statusList) {
StGoodsExt ext = baseMapper.selectById(vo.getId());
ext.setGoodsId(vo.getGoodsId());
ext.setFirstStore(vo.getInvqty1j());
ext.setLastStore(vo.getLastQty());
ext.setPlanQty(vo.getPlanqty());
ext.setGoodsStatus(vo.getGoodsStatus());
// ext.setUpdateTime(new Date());
// ext.setUpdateUser(AuthUtil.getUserId());
this.updateById(ext);
}
log.info("===== 物料状态定时更新完成 =====", statusList.size());
} catch (Exception e) {
log.info("===== 物料状态定时更新异常 =====", e);
}
}
@Override
public List<StGoodsExtExcel> exportStGoodsExt(Wrapper<StGoodsExt> queryWrapper) {

Loading…
Cancel
Save