#
vincentlu
9 天以前 d0b25091a0c2dbef45299e152078f858d6d4039e
#
13个文件已修改
150 ■■■■ 已修改文件
version/doc/AGV-RCS 通信协议 V1.1.xlsx 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-common/src/main/java/com/zy/acs/common/domain/HeightDepthDto.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-flow/src/page/sta/StaCreate.jsx 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-flow/src/page/sta/StaEdit.jsx 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-flow/src/page/sta/StaList.jsx 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MainService.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-manager/src/main/java/com/zy/acs/manager/manager/entity/StaReserve.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-manager/src/main/java/com/zy/acs/manager/manager/mapper/StaReserveMapper.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/StaReserveService.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/StaReserveServiceImpl.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/StaServiceImpl.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-manager/src/main/java/com/zy/acs/manager/system/service/impl/ConfigServiceImpl.java 85 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-manager/src/main/resources/mapper/manager/StaReserveMapper.xml 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
version/doc/AGV-RCS ͨÐÅЭÒé V1.1.xlsx
Binary files differ
zy-acs-common/src/main/java/com/zy/acs/common/domain/HeightDepthDto.java
@@ -19,6 +19,10 @@
    public HeightDepthDto() {
    }
    public HeightDepthDto(Number height) {
        this.height = toShort(height);
    }
    public HeightDepthDto(Number height, Number depth) {
        this.height = toShort(height);
        this.depth  = toShort(depth);
zy-acs-flow/src/page/sta/StaCreate.jsx
@@ -152,7 +152,7 @@
                                        />
                                    </ReferenceInput>
                                </Grid>
                                <Grid item xs={6} display="flex" gap={1}>
                                <Grid item xs={4} display="flex" gap={1}>
                                    <NumberInput
                                        label="table.field.sta.capacity"
                                        source="capacity"
@@ -166,22 +166,22 @@
                                        validate={required()}
                                    />
                                </Grid> */}
                                <Grid item xs={6} display="flex" gap={1}>
                                <Grid item xs={4} display="flex" gap={1}>
                                    <NumberInput
                                        label="table.field.sta.height"
                                        source="height"
                                        validate={[required(), greaterThanZero]}
                                    />
                                </Grid>
                                <Grid item xs={6} display="flex" gap={1}>
                                {/* <Grid item xs={6} display="flex" gap={1}>
                                    <NumberInput
                                        label="table.field.sta.depth"
                                        source="depth"
                                        helperText={translate('page.sta.depthHint')}
                                        validate={[required(), greaterThanZero]}
                                    />
                                </Grid>
                                <Grid item xs={6} display="flex" gap={1}>
                                </Grid> */}
                                <Grid item xs={4} display="flex" gap={1}>
                                    <NumberInput
                                        label="table.field.sta.angle"
                                        source="angle"
zy-acs-flow/src/page/sta/StaEdit.jsx
@@ -145,19 +145,19 @@
                                source="offset"
                                validate={required()}
                            /> */}
                        </Stack>
                        <Stack direction='row' gap={2}>
                            <NumberInput
                                label="table.field.sta.height"
                                source="height"
                                validate={[required(), greaterThanZero]}
                            />
                            <NumberInput
                        </Stack>
                        <Stack direction='row' gap={2}>
                            {/* <NumberInput
                                label="table.field.sta.depth"
                                source="depth"
                                helperText={translate('page.sta.depthHint')}
                                validate={[required(), greaterThanZero]}
                            />
                            /> */}
                        </Stack>
                        <Stack direction='row' gap={2}>
                            <NumberInput
zy-acs-flow/src/page/sta/StaList.jsx
@@ -134,7 +134,7 @@
                    expand={() => <StaPanel />}
                    expandSingle={true}
                    rowSx={rowSx(drawerVal || null)}
                    omit={['id', 'uuid', 'name', 'offset', 'zpallet'
                    omit={['id', 'uuid', 'name', 'offset', 'zpallet', 'depth'
                        , 'updateTime', 'updateBy', 'createTime', 'createBy', 'memo']}
                >
                    <NumberField source="id" />
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MainService.java
@@ -892,8 +892,8 @@
            long actionPrepareSts = ActionStsType.PREPARE.val();
//            JSONObject storeDirection = configService.getVal("storeDirection", JSONObject.class);
            int angleOffsetVal = configService.getVal("mapAngleOffsetVal", Integer.class);
            Double defaultShelfDepth = configService.getVal("defaultShelfDepth", Double.class);
            defaultShelfDepth = Optional.ofNullable(defaultShelfDepth).orElse((double) 0);
//            Double defaultShelfDepth = configService.getVal("defaultShelfDepth", Double.class);
//            defaultShelfDepth = Optional.ofNullable(defaultShelfDepth).orElse((double) 0);
            String agvNo = agvService.getAgvNo(agvId);
//            if (!agvService.judgeEnable(agvId)) {
//                throw new CoolException("AGV[" + agvNo + "]当前不可用...");
@@ -1170,7 +1170,7 @@
                                ActionTypeType.ReadyTakeFromShelvesLoc.desc,    // åç§°
                                (double) agvDirectionType.val,    // å±žæ€§å€¼
                                lastCode.getData(),    // åœ°é¢ç 
                                JSON.toJSONString(new HeightDepthDto(oriLoc.getOffset(), defaultShelfDepth)),   // åŠ¨ä½œå‚æ•°
                                JSON.toJSONString(new HeightDepthDto(oriLoc.getOffset())),   // åŠ¨ä½œå‚æ•°
                                ActionTypeType.ReadyTakeFromShelvesLoc.val(),    // åŠ¨ä½œç±»åž‹
                                actionPrepareSts,    // åŠ¨ä½œè¿›åº¦
                                agvId,    // AGV
@@ -1233,7 +1233,7 @@
                                ActionTypeType.ReadyReleaseToShelvesLoc.desc,    // åç§°
                                (double) agvDirectionType.val,    // å±žæ€§å€¼
                                lastCode.getData(),    // åœ°é¢ç 
                                JSON.toJSONString(new HeightDepthDto(destLoc.getOffset(), defaultShelfDepth)),   // åŠ¨ä½œå‚æ•°
                                JSON.toJSONString(new HeightDepthDto(destLoc.getOffset())),   // åŠ¨ä½œå‚æ•°
                                ActionTypeType.ReadyReleaseToShelvesLoc.val(),    // åŠ¨ä½œç±»åž‹
                                actionPrepareSts,    // åŠ¨ä½œè¿›åº¦
                                agvId,    // AGV
@@ -1869,7 +1869,7 @@
                                // load from sta
                                sta = staService.getById(currTask.getOriSta());
                                // reserve to be waiting
                                if (!staReserveService.waitingStaReserve(sta, currTask, 1, StaReserveType.OUT)) {
                                if (!staReserveService.waitingStaReserve(sta, currTask, currSeg, 1, StaReserveType.OUT)) {
                                    break;
                                }
                                // convey plc valid
@@ -1885,7 +1885,7 @@
                                // place to sta
                                sta = staService.getById(currTask.getDestSta());
                                // reserve to be waiting
                                if (!staReserveService.waitingStaReserve(sta, currTask, 1, StaReserveType.IN)) {
                                if (!staReserveService.waitingStaReserve(sta, currTask, currSeg, 1, StaReserveType.IN)) {
                                    break;
                                }
                                // convey plc valid
zy-acs-manager/src/main/java/com/zy/acs/manager/manager/entity/StaReserve.java
@@ -11,6 +11,10 @@
import java.io.Serializable;
import java.util.Date;
// create task - reserved
// agv load/unload request - waiting
// well done - confirmed
@Data
@TableName("man_sta_reserve")
public class StaReserve implements Serializable {
zy-acs-manager/src/main/java/com/zy/acs/manager/manager/mapper/StaReserveMapper.java
@@ -19,6 +19,7 @@
    int updateStateToWaiting(
            @Param("taskId") Long taskId
            , @Param("segmentId") Long segId
            , @Param("staId") Long staId
            , @Param("type") String type
            , @Param("state") String state
zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/StaReserveService.java
@@ -1,6 +1,7 @@
package com.zy.acs.manager.manager.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.zy.acs.manager.manager.entity.Segment;
import com.zy.acs.manager.manager.entity.Sta;
import com.zy.acs.manager.manager.entity.StaReserve;
import com.zy.acs.manager.manager.entity.Task;
@@ -13,7 +14,7 @@
    StaReserve reserveStaOut(Sta sta, Task task, Integer qty);
    Boolean waitingStaReserve(Sta sta, Task task, Integer qty, StaReserveType type);
    Boolean waitingStaReserve(Sta sta, Task task, Segment seg, Integer qty, StaReserveType type);
    Boolean rollbackWaitingToReserved(Sta sta, Task task, StaReserveType staReserveType);
zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/StaReserveServiceImpl.java
@@ -5,6 +5,7 @@
import com.zy.acs.framework.common.Cools;
import com.zy.acs.framework.exception.CoolException;
import com.zy.acs.manager.common.exception.BusinessException;
import com.zy.acs.manager.manager.entity.Segment;
import com.zy.acs.manager.manager.entity.Sta;
import com.zy.acs.manager.manager.entity.StaReserve;
import com.zy.acs.manager.manager.entity.Task;
@@ -109,11 +110,13 @@
    @Override
    @Transactional(rollbackFor = Exception.class)
    public Boolean waitingStaReserve(Sta sta, Task task, Integer qty, StaReserveType type) {
    public Boolean waitingStaReserve(Sta sta, Task task, Segment seg, Integer qty, StaReserveType type) {
        qty = Optional.ofNullable(qty).orElse(DEFAULT_QTY);
        // update reserve to be waiting state
        int changed = this.baseMapper.updateStateToWaiting(task.getId()
        int changed = this.baseMapper.updateStateToWaiting(
                task.getId()
                , seg.getId()
                , sta.getId()
                , type.toString()
                , StaReserveStateType.WAITING.toString()
zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/StaServiceImpl.java
@@ -113,7 +113,6 @@
                    .orderByDesc(Segment::getId).last("LIMIT 1"));
            if (null == lastSeg) {
                return false;
//                continue;
            }
            Travel travel = travelService.getById(lastSeg.getTravelId());
            if (travel.getState().equals(TravelStateType.FINISH.toString())) {
@@ -128,7 +127,16 @@
                        && (segment.getPosType().equals(TaskPosDto.PosType.ORI_STA.toString())
                            || segment.getPosType().equals(TaskPosDto.PosType.DEST_STA.toString()))
                ) {
                    return true;
                    return 0 < staReserveService.count(new LambdaQueryWrapper<StaReserve>()
                            .eq(StaReserve::getStaId, staId)
                            .eq(StaReserve::getTaskId, segment.getTaskId())
                            .eq(StaReserve::getSegmentId, segment.getId())
                            .eq(StaReserve::getState, StaReserveStateType.WAITING.toString())
//                            .eq(StaReserve::getType, StaReserveType.IN.toString())
                            .eq(StaReserve::getStatus, StatusType.ENABLE.val)
                            .orderByDesc(StaReserve::getUpdateTime)
//                            .last("limit 1")
                    );
                }
            }
        }
zy-acs-manager/src/main/java/com/zy/acs/manager/system/service/impl/ConfigServiceImpl.java
@@ -3,6 +3,7 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.zy.acs.common.utils.GsonUtils;
import com.zy.acs.framework.common.Cools;
import com.zy.acs.framework.common.DateUtils;
import com.zy.acs.manager.manager.enums.StatusType;
import com.zy.acs.manager.system.entity.Config;
@@ -12,7 +13,10 @@
import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct;
import java.util.*;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
/**
@@ -25,45 +29,71 @@
    @PostConstruct
    public void init() {
        CONFIG_CACHE.clear();
        List<Config> list = this.list(new LambdaQueryWrapper<Config>().eq(Config::getStatus, StatusType.ENABLE.val));
        for (Config config : list) {
            CONFIG_CACHE.put(config.getFlag(), config);
            if (null != config && !Cools.isEmpty(config.getFlag())) {
                CONFIG_CACHE.put(config.getFlag(), config);
            }
        }
    }
    @Override
    @SuppressWarnings("unchecked")
    public <T> T getVal(String key, Class<T> clazz) {
        if (Cools.isEmpty(key.trim(), clazz)) {
            return null;
        }
        Config config = CONFIG_CACHE.get(key);
        if (config == null) {
            List<Config> list = this.list(new LambdaQueryWrapper<Config>().eq(Config::getFlag, key));
            config = list.stream().findFirst().orElse(null);
            config = getOne(new LambdaQueryWrapper<Config>()
                    .eq(Config::getFlag, key)
                    .eq(Config::getStatus, StatusType.ENABLE.val), false);
            if (null == config) {
                return null;
            }
            if (!Cools.isEmpty(config.getFlag())) {
                CONFIG_CACHE.put(config.getFlag(), config);
            }
        }
        String val = config.getVal();
        switch (ConfigType.query(config.getType())) {
            case BOOLEAN:
                if (val.equals("1") || val.trim().equalsIgnoreCase("TRUE")) {
        String raw = config.getVal();
        String val = Cools.isEmpty(raw) ? "" : raw.trim();
        ConfigType type = ConfigType.query(config.getType());
        if (null == type) {
            return null;
        }
        switch (type) {
            case BOOLEAN: {
                if ("1".equals(val) || "true".equalsIgnoreCase(val) || "yes".equalsIgnoreCase(val)) {
                    return (T) Boolean.TRUE;
                }
                return (T) Boolean.FALSE;
            case NUMBER:
                if (clazz == Integer.class) {
            }
            case NUMBER: {
                if (clazz == Integer.class || clazz == int.class) {
                    return (T) Integer.valueOf(val);
                } else if (clazz == Short.class) {
                } else if (clazz == Short.class || clazz == short.class) {
                    return (T) Short.valueOf(val);
                } else if (clazz == Long.class) {
                } else if (clazz == Long.class || clazz == long.class) {
                    return (T) Long.valueOf(val);
                } else if (clazz == Double.class) {
                } else if (clazz == Double.class || clazz == double.class) {
                    return (T) Double.valueOf(val);
                } else if (clazz == Float.class || clazz == float.class) {
                    return (T) Float.valueOf(val);
                } else if (clazz == BigDecimal.class) {
                    return (T) new BigDecimal(val);
                }
                throw new UnsupportedOperationException("Unsupported type: " + clazz.getName());
                throw new UnsupportedOperationException("Unsupported number type: " + clazz.getName());
            }
            case STRING:
                return (T) val;
                return (T) raw;
            case JSON:
                return GsonUtils.fromJson(val, clazz);
                return GsonUtils.fromJson(raw, clazz);
            case DATE:
                return (T) DateUtils.convert(val);
            default:
@@ -73,11 +103,20 @@
    @Override
    public <T> boolean setVal(String key, T val) {
        if (key == null || key.trim().isEmpty()) {
            return false;
        }
        Config config = CONFIG_CACHE.get(key);
        if (config == null) {
            List<Config> list = this.list(new LambdaQueryWrapper<Config>().eq(Config::getFlag, key));
            config = list.stream().findFirst().orElse(null);
            if (null == config) {
            config = getOne(new LambdaQueryWrapper<Config>()
                    .eq(Config::getFlag, key)
                    .eq(Config::getStatus, StatusType.ENABLE.val), false);
            if (config == null) {
                return false;
            }
        } else {
            if (config.getStatus() == null || config.getStatus() != StatusType.ENABLE.val) {
                return false;
            }
        }
@@ -88,10 +127,11 @@
                if (!(val instanceof Boolean)) {
                    throw new IllegalArgumentException("Expected Boolean value for key: " + key);
                }
                config.setVal((Boolean) val ? "TRUE" : "FALSE");
                config.setVal(((Boolean) val) ? "TRUE" : "FALSE");
                break;
            case NUMBER:
                if (val instanceof Integer || val instanceof Short || val instanceof Long || val instanceof Double) {
                if (val instanceof Integer || val instanceof Short || val instanceof Long
                        || val instanceof Double || val instanceof Float || val instanceof BigDecimal) {
                    config.setVal(String.valueOf(val));
                } else {
                    throw new IllegalArgumentException("Expected a numeric value for key: " + key);
@@ -118,5 +158,4 @@
        return this.updateById(config);
    }
}
}
zy-acs-manager/src/main/resources/mapper/manager/StaReserveMapper.xml
@@ -18,6 +18,7 @@
    <update id="updateStateToWaiting">
        UPDATE man_sta_reserve
        SET state = #{state},
            segment_id = #{segmentId},
            waiting_at = IFNULL(waiting_at, NOW()),
            expire_time = DATE_ADD(NOW(), INTERVAL #{extendMs} SECOND),
            update_time = NOW()
@@ -31,6 +32,7 @@
    <update id="updateStateBackToWaiting">
        UPDATE man_sta_reserve
        SET state = #{state},
            segment_id = null,
            expire_time = DATE_ADD(NOW(), INTERVAL #{extendMs} SECOND),
            update_time = NOW()
        WHERE task_id = #{taskId}