自动化立体仓库 - WMS系统
zwl
21 小时以前 6e18b1e086f202512eeb9aa988a8b9026cfccec3
修复
6个文件已修改
160 ■■■■ 已修改文件
src/main/java/com/zy/api/controller/HmesApiController.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/api/service/HmesApiService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/api/service/impl/HmesApiServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/api/service/impl/WcsApiServiceImpl.java 36 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/OrderMoveHistoryScheduler.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/handler/OrderMoveHistoryHandler.java 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/api/controller/HmesApiController.java
@@ -80,6 +80,19 @@
    }
    /**
     * 解冻所有机台工位
     * @author Ryan
     * @date 2026/3/28 20:45
     * @return com.core.common.R
     */
//    @ManagerAuth
    @ApiOperation("解冻所有机台工位")
    @PostMapping("/work/release/lock/all")
    public R releaseAllLocks() {
        return hmesApiService.releaseAllLocks();
    }
    /**
     * 获取机台及对应工位冻结情况
     * @author Ryan
     * @date 2026/3/20 11:06
src/main/java/com/zy/api/service/HmesApiService.java
@@ -11,6 +11,8 @@
    R releaseLock(ReceviceTaskParams params);
    R releaseAllLocks();
    R getDeviceFreezeStatus(String devNo);
    R backLoc(HmesBackLocParams params);
src/main/java/com/zy/api/service/impl/HmesApiServiceImpl.java
@@ -251,6 +251,26 @@
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public R releaseAllLocks() {
        EntityWrapper<LocAroundBind> frozenWrapper = new EntityWrapper<>();
        frozenWrapper.eq("freeze", 1);
        int frozenCount = locAroundBindService.selectCount(frozenWrapper);
        if (frozenCount <= 0) {
            return R.ok("全部机台工位均未冻结");
        }
        LocAroundBind updateEntity = new LocAroundBind();
        updateEntity.setFreeze(0);
        EntityWrapper<LocAroundBind> updateWrapper = new EntityWrapper<>();
        updateWrapper.eq("freeze", 1);
        if (!locAroundBindService.update(updateEntity, updateWrapper)) {
            throw new CoolException("全部机台工位解冻失败,请检查后再操作!!");
        }
        return R.ok("全部机台工位解冻成功,共处理" + frozenCount + "个工位");
    }
    @Override
    public R getDeviceFreezeStatus(String devNo) {
        EntityWrapper<BasDevice> deviceWrapper = new EntityWrapper<>();
        deviceWrapper.eq("status", 1);
src/main/java/com/zy/api/service/impl/WcsApiServiceImpl.java
@@ -207,23 +207,25 @@
                        wrkMastService.updateById(wrkMast);
                        //出库为机台工位时,冻结相对有的库位,及相邻库位
                        String s = Utils.convertLocFormat(params.getLocNo());
                        LocAroundBind bind = locAroundBindService.selectOne(new EntityWrapper<LocAroundBind>()
                                .eq("b_loc_no", s));
                        if (!Objects.isNull(bind)) {
                            bind.setFreeze(1);
                            locAroundBindService.updateById(bind);
                            //冻结相邻库位
                            Integer[] aroundIds = freezeLocAround(bind.getOrderNo());
                            if (aroundIds != null) {
                                for (Integer id : aroundIds) {
                                    if (id != null && id > 0) {
                                        LocAroundBind aroundBind = locAroundBindService.selectOne(
                                                new EntityWrapper<LocAroundBind>()
                                                        .eq("dev_id", bind.getDevId())
                                                        .eq("order_no", id));
                                        if (aroundBind != null) {
                                            aroundBind.setFreeze(1);
                                            locAroundBindService.updateById(aroundBind);
                        if(Cools.isEmpty(wrkMast.getLocNo())){
                            LocAroundBind bind = locAroundBindService.selectOne(new EntityWrapper<LocAroundBind>()
                                    .eq("b_loc_no", s));
                            if (!Objects.isNull(bind)) {
                                bind.setFreeze(1);
                                locAroundBindService.updateById(bind);
                                //冻结相邻库位
                                Integer[] aroundIds = freezeLocAround(bind.getOrderNo());
                                if (aroundIds != null) {
                                    for (Integer id : aroundIds) {
                                        if (id != null && id > 0) {
                                            LocAroundBind aroundBind = locAroundBindService.selectOne(
                                                    new EntityWrapper<LocAroundBind>()
                                                            .eq("dev_id", bind.getDevId())
                                                            .eq("order_no", id));
                                            if (aroundBind != null) {
                                                aroundBind.setFreeze(1);
                                                locAroundBindService.updateById(aroundBind);
                                            }
                                        }
                                    }
                                }
src/main/java/com/zy/asrs/task/OrderMoveHistoryScheduler.java
@@ -26,4 +26,12 @@
    public void executeOrder(){
        orderMoveHistoryHandler.startOrder();
    }
    /**
     * 每天 0 点将未执行的出库单转入历史档,并打上系统自动删除标记
     */
    @Scheduled(cron = "0 0 0 * * ?", zone = "Asia/Shanghai")
    public void executePakoutAutoArchive() {
        orderMoveHistoryHandler.startPakoutAutoArchive();
    }
}
src/main/java/com/zy/asrs/task/handler/OrderMoveHistoryHandler.java
@@ -11,7 +11,10 @@
import com.zy.asrs.utils.OrderInAndOutUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
import java.util.Date;
import java.util.List;
@@ -31,6 +34,8 @@
    private OrderDetlPakinServiceImpl orderDetlPakinService;
    @Autowired
    private OrderDetlPakoutService orderDetlPakoutService;
    @Autowired
    private JdbcTemplate jdbcTemplate;
    public ReturnT<String> start(){
//        List<Order> settleEqual6 = orderService.selectList(new EntityWrapper<Order>()
@@ -60,6 +65,82 @@
        return SUCCESS;
    }
    /**
     * 每天 0 点将未执行的出库单转入历史档,并标记为系统自动删除。
     */
    @Transactional(rollbackFor = Exception.class)
    public ReturnT<String> startPakoutAutoArchive() {
        try {
            Integer orderCount = jdbcTemplate.queryForObject(
                    "select count(1) from man_order_pakout where settle = 1",
                    Integer.class
            );
            if (orderCount == null || orderCount == 0) {
                return SUCCESS;
            }
            int detailLogCount = jdbcTemplate.update(
                    "insert into man_order_detl_log_pakout " +
                            "select * from man_order_detl_pakout " +
                            "where order_id in (select id from man_order_pakout where settle = 1)"
            );
            jdbcTemplate.update(
                    "update logDetl " +
                            "set logDetl.memo = case " +
                            "when logDetl.memo is null or logDetl.memo = '' " +
                            "then '系统0点自动删除迁移[' + convert(varchar(19), getdate(), 120) + ']' " +
                            "else logDetl.memo + ';系统0点自动删除迁移[' + convert(varchar(19), getdate(), 120) + ']' " +
                            "end, " +
                            "logDetl.update_by = 0, " +
                            "logDetl.update_time = getdate() " +
                            "from man_order_detl_log_pakout logDetl " +
                            "where exists (" +
                            "select 1 " +
                            "from man_order_detl_pakout detl " +
                            "inner join man_order_pakout pakout on detl.order_id = pakout.id " +
                            "where pakout.settle = 1 and detl.id = logDetl.id)"
            );
            int detailDeleteCount = jdbcTemplate.update(
                    "delete from man_order_detl_pakout " +
                            "where order_id in (select id from man_order_pakout where settle = 1)"
            );
            int orderLogCount = jdbcTemplate.update(
                    "insert into man_order_log_pakout " +
                            "select * from man_order_pakout " +
                            "where settle = 1"
            );
            jdbcTemplate.update(
                    "update logOrder " +
                            "set logOrder.memo = case " +
                            "when logOrder.memo is null or logOrder.memo = '' " +
                            "then '系统0点自动删除迁移[' + convert(varchar(19), getdate(), 120) + ']' " +
                            "else logOrder.memo + ';系统0点自动删除迁移[' + convert(varchar(19), getdate(), 120) + ']' " +
                            "end, " +
                            "logOrder.update_by = 0, " +
                            "logOrder.update_time = getdate() " +
                            "from man_order_log_pakout logOrder " +
                            "where exists (" +
                            "select 1 " +
                            "from man_order_pakout pakout " +
                            "where pakout.settle = 1 and pakout.id = logOrder.id)"
            );
            int orderDeleteCount = jdbcTemplate.update(
                    "delete from man_order_pakout where settle = 1"
            );
            log.info(
                    "0点自动迁移出库单至历史档完成, 订单数={}, 订单历史数={}, 明细历史数={}, 订单删除数={}, 明细删除数={}",
                    orderCount, orderLogCount, detailLogCount, orderDeleteCount, detailDeleteCount
            );
            return SUCCESS;
        } catch (Exception e) {
            log.error("0点自动迁移出库单至历史档失败", e);
            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
            return FAIL.setMsg(e.getMessage());
        }
    }
    private void moveBoth(Order order, List<OrderDetl> orderDetls){
        Date now = new Date();
        if (!Cools.isEmpty(orderDetls)) {