parent
1808fc8e1c
commit
b09758e64c
14 changed files with 252 additions and 2 deletions
@ -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()); |
||||
} |
||||
} |
||||
} |
||||
@ -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(); |
||||
|
||||
} |
||||
@ -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) <= NVL(ge.use_average, 0) |
||||
THEN 1 -- 需报料 |
||||
WHEN (NVL(erp.invqty1j, 0) + NVL(mes.last_qty, 0)) < NVL(ge.use_average, 0) AND NVL(erp.planqty, 0) > 0 |
||||
THEN 2 -- 需跟踪 |
||||
WHEN NVL(mes.last_qty, 0) < NVL(ge.use_average, 0) AND NVL(erp.planqty, 0) > 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> |
||||
@ -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; |
||||
} |
||||
} |
||||
Loading…
Reference in new issue