1
4 小时以前 b2deb1cc93b3d2c3fb9dc795e3589e1c62329a8f
lsh#站点同步至MES
1个文件已添加
2个文件已修改
138 ■■■■■ 已修改文件
rsf-server/src/main/java/com/vincent/rsf/server/api/entity/constant/RcsConstant.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/SynchronizationToMESSchedules.java 131 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/system/constant/GlobalConfigCode.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/api/entity/constant/RcsConstant.java
@@ -18,5 +18,8 @@
    //待下发任务发送至中转站
    public static String MISSION_TRANSFER_STATION = "/rsf-open-api/mission/task/master/control";
    //站点信息同步至MES
    public static String SITE_SYNCHRONIZATION_TO_MES = "/rsf-open-api/mes/syncStationInfo";
}
rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/SynchronizationToMESSchedules.java
New file
@@ -0,0 +1,131 @@
package com.vincent.rsf.server.manager.schedules;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.vincent.rsf.framework.common.Cools;
import com.vincent.rsf.framework.exception.CoolException;
import com.vincent.rsf.server.api.config.RemotesInfoProperties;
import com.vincent.rsf.server.api.entity.CommonResponse;
import com.vincent.rsf.server.api.entity.constant.RcsConstant;
import com.vincent.rsf.server.manager.entity.BasStation;
import com.vincent.rsf.server.manager.service.impl.BasStationServiceImpl;
import com.vincent.rsf.server.system.constant.GlobalConfigCode;
import com.vincent.rsf.server.system.entity.Config;
import com.vincent.rsf.server.system.service.ConfigService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.client.RestTemplate;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
/**
 * @author Munch D. Luffy
 * @date 2026/03/23
 * 自动同步至MES
 */
@Slf4j
@Component
public class SynchronizationToMESSchedules {
    @Autowired
    private ConfigService configService;
    @Autowired
    private BasStationServiceImpl basStationService;
    @Autowired
    private RestTemplate restTemplate;
    @Autowired
    private RemotesInfoProperties.WmsOpenApi wmsOpenApi;
    /**
     * @author Munch D. Luffy
     * @date 2026/01/15
     * @description: 缓存区域自动生成移库任务
     * @version 1.0
     */
    @Scheduled(cron = "0 0/01 * * * ?  ")
    @Transactional(rollbackFor = Exception.class)
    public void siteSynchronizationToMES() throws Exception {
        Config config = configService.getOne(new LambdaQueryWrapper<Config>().eq(Config::getFlag, GlobalConfigCode.AUTO_SITE_SYNCHRONIZATION_TO_MES));
        if (Cools.isEmpty(config) || !Boolean.parseBoolean(config.getVal())) {
            return;
        }
        String autoSiteSynchronizationToMesValue = configService.getVal(GlobalConfigCode.AUTO_SITE_SYNCHRONIZATION_TO_MES_VALUE, String.class);
        if (Cools.isEmpty(autoSiteSynchronizationToMesValue)) {
            return;
        }
        Integer autoValue = Integer.parseInt(autoSiteSynchronizationToMesValue);
        if (autoValue < 0) {
            List<BasStation> basStationList = basStationService.list();
            syncStationsToMes(basStationList);
        } else if (autoValue > 0) {
            List<BasStation> basStationList = basStationService.list();
            syncStationsToMes(basStationList);
            autoValue = autoValue - 1;
            configService.setVal(GlobalConfigCode.AUTO_SITE_SYNCHRONIZATION_TO_MES_VALUE, String.valueOf(autoValue));
        } else {
            configService.setVal(GlobalConfigCode.AUTO_SITE_SYNCHRONIZATION_TO_MES, false);
        }
    }
    private void syncStationsToMes(List<BasStation> basStationList) {
        if (Cools.isEmpty(basStationList)) {
            log.info("站点同步至MES跳过:站点列表为空");
            return;
        }
        if (Cools.isEmpty(wmsOpenApi) || Cools.isEmpty(wmsOpenApi.getHost()) || Cools.isEmpty(wmsOpenApi.getPort())) {
            throw new CoolException("open-api配置缺失,无法同步站点信息到MES");
        }
        List<Map<String, Object>> params = new ArrayList<>();
        for (BasStation basStation : basStationList) {
            if (Cools.isEmpty(basStation) || Cools.isEmpty(basStation.getStationName())) {
                continue;
            }
            Map<String, Object> item = new HashMap<>();
            item.put("ConnPortCode", basStation.getStationName());
            item.put("ConnPortName", Cools.isEmpty(basStation.getStationId()) ? basStation.getStationName() : basStation.getStationId());
            item.put("WorkshopCode", "YZ");
            item.put("WorkshopName", "银座车间");
            item.put("ProductionLineCode", "YZ");
            item.put("ProductionLineName", "银座仓库");
            item.put("CreatedBy", "WMSSystem");
            item.put("IsValid", Objects.equals(basStation.getStatus(), 1));
            params.add(item);
        }
        if (params.isEmpty()) {
            log.info("站点同步至MES跳过:无可同步站点数据");
            return;
        }
        String url = wmsOpenApi.getHost() + ":" + wmsOpenApi.getPort() + RcsConstant.SITE_SYNCHRONIZATION_TO_MES;
        HttpHeaders headers = new HttpHeaders();
        headers.add("Content-Type", "application/json");
        headers.add("api-version", "v2.0");
        HttpEntity<List<Map<String, Object>>> httpEntity = new HttpEntity<>(params, headers);
        log.info("站点同步至MES开始,请求地址:{},请求参数条数:{}", url, params.size());
        ResponseEntity<CommonResponse> response = restTemplate.exchange(url, HttpMethod.POST, httpEntity, CommonResponse.class);
        CommonResponse body = response.getBody();
        log.info("站点同步至MES返回结果:{}", JSONObject.toJSONString(body));
        if (Cools.isEmpty(body)) {
            throw new CoolException("站点同步至MES失败:返回结果为空");
        }
        if (!Objects.equals(body.getCode(), 200)) {
            throw new CoolException("站点同步至MES失败:" + body.getMsg());
        }
    }
}
rsf-server/src/main/java/com/vincent/rsf/server/system/constant/GlobalConfigCode.java
@@ -30,6 +30,10 @@
    /*初始任务自动规划路径*/
    public final static String AUTO_TEMPLATE_PLANNING_STEP_FLOW = "AUTO_TEMPLATE_PLANNING_STEP_FLOW";
    /*站点同步至MES*/
    public final static String AUTO_SITE_SYNCHRONIZATION_TO_MES = "AUTO_SITE_SYNCHRONIZATION_TO_MES";
    public final static String AUTO_SITE_SYNCHRONIZATION_TO_MES_VALUE = "AUTO_SITE_SYNCHRONIZATION_TO_MES_VALUE";
}