rsf-open-api/src/main/java/com/vincent/rsf/openApi/service/impl/WmsRcsServiceImpl.java
@@ -1,15 +1,22 @@
package com.vincent.rsf.openApi.service.impl;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.cfg.CoercionAction;
import com.fasterxml.jackson.databind.cfg.CoercionInputShape;
import com.vincent.rsf.framework.common.R;
import com.vincent.rsf.framework.exception.CoolException;
import com.vincent.rsf.openApi.entity.CommonResponse;
import com.vincent.rsf.openApi.config.PlatformProperties;
import com.vincent.rsf.openApi.entity.Loc;
import com.vincent.rsf.openApi.entity.dto.CommonResponse;
import com.vincent.rsf.openApi.entity.constant.RcsConstant;
import com.vincent.rsf.openApi.entity.dto.SyncLocsDto;
import com.vincent.rsf.openApi.entity.params.RcsPubTaskParams;
import com.vincent.rsf.openApi.entity.params.SyncRcsLocsParam;
import com.vincent.rsf.openApi.mapper.LocMapper;
import com.vincent.rsf.openApi.service.WmsRcsService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
@@ -21,24 +28,21 @@
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.client.RestTemplate;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
@Slf4j
@Service("wmsRcsServiceImpl")
public class WmsRcsServiceImpl implements WmsRcsService {
@Service("wmsRcsService")
public class WmsRcsServiceImpl extends ServiceImpl<LocMapper, Loc> implements WmsRcsService {
//    @Autowired
//    private RemotesInfoProperties.RcsApi rcsApi;
    @Autowired
    private PlatformProperties rcsApi;
    @Autowired
    private RestTemplate restTemplate;
    /**RCS基础配置链接*/
//    private final String rcsUrl =  rcsApi.getHost() + rcsApi.getPort();
    /**
     * @author Ryan
@@ -47,14 +51,16 @@
     * @version 1.0
     */
    @Override
    @Transactional(timeout = 60, rollbackFor = Exception.class)
    @Transactional(rollbackFor = Exception.class)
    public R pubTasks(RcsPubTaskParams params)  {
        log.info("任务下发,请求地址: {}, 请求参数: {}", "" + RcsConstant.pubTask, JSONObject.toJSONString(params));
        /**RCS基础配置链接*/
        String rcsUrl =  rcsApi.getHost() + ":" + rcsApi.getPort() + RcsConstant.pubTask;
        log.info("任务下发,请求地址: {}, 请求参数: {}", rcsUrl , JSONObject.toJSONString(params));
        HttpHeaders headers = new HttpHeaders();
        headers.add("Content-Type", "application/json");
        headers.add("api-version", "v2.0");
        HttpEntity httpEntity = new HttpEntity(params, headers);
        ResponseEntity<String> exchange = restTemplate.exchange("rcsUrl" + RcsConstant.pubTask, HttpMethod.POST, httpEntity, String.class);
        ResponseEntity<String> exchange = restTemplate.exchange(rcsUrl, HttpMethod.POST, httpEntity, String.class);
        log.info("任务下发后,响应结果: {}", exchange);
        if (Objects.isNull(exchange.getBody())) {
            throw new CoolException("任务下发失败!!");
@@ -65,7 +71,7 @@
            try {
                CommonResponse result = objectMapper.readValue(exchange.getBody(), CommonResponse.class);
                if (result.getCode() == 200) {
                    return R.ok(result);
                    return R.ok();
                } else {
                    throw new CoolException("任务下发失败!!");
                }
@@ -83,7 +89,7 @@
     */
    @Override
    public R cancelTasks(Map<String, Object> params) {
        return null;
        return  R.ok();
    }
    /**
@@ -94,7 +100,7 @@
     */
    @Override
    public R callBackEvent(Map<String, Object> params) {
        return null;
        return R.ok();
    }
    /**
@@ -104,16 +110,46 @@
     * @version 1.0
     */
    @Override
    public void syncLocs() {
        ScheduledExecutorService scheduled = Executors.newScheduledThreadPool(1);
        scheduled.scheduleWithFixedDelay(new Runnable() {
            int current = 1;
            @Override
            public void run() {
                log.info("<UNK>{}<UNK>", current);
                current ++;
                log.info("{}", current);
    public List<SyncLocsDto> syncLocs(SyncRcsLocsParam params) {
         return syncRcsLocs(params);
    }
    /**
     * @author Ryan
     * @date 2025/8/28
     * @description: 拉取RCS库位,同步至本地
     * @version 1.0
     */
    @Transactional(rollbackFor = Exception.class)
    public List<SyncLocsDto> syncRcsLocs(SyncRcsLocsParam  params) {
        /**RCS基础配置链接*/
        String rcsUrl =  rcsApi.getHost() + ":" + rcsApi.getPort() + RcsConstant.syncLocs;
        log.info("任务下发,请求地址: {}, 请求参数: {}", rcsUrl , JSONObject.toJSONString(params));
        HttpHeaders headers = new HttpHeaders();
        headers.add("Content-Type", "application/json");
        headers.add("api-version", "v2.0");
        HttpEntity httpEntity = new HttpEntity(params, headers);
        ResponseEntity<String> exchange = restTemplate.exchange(rcsUrl, HttpMethod.POST, httpEntity, String.class);
        log.info("任务下发后,响应结果: {}", exchange);
        if (Objects.isNull(exchange.getBody())) {
            throw new CoolException("任务下发失败!!");
        } else {
            ObjectMapper objectMapper = new ObjectMapper();
            objectMapper.coercionConfigDefaults()
                    .setCoercion(CoercionInputShape.EmptyString, CoercionAction.AsEmpty);
            try {
                CommonResponse result = objectMapper.readValue(exchange.getBody(), CommonResponse.class);
                if (result.getCode() == 200) {
                    JSONObject jsonObject = JSONObject.parseObject(exchange.getBody()).getJSONObject("data");
                    List<SyncLocsDto> array =  JSONArray.parseArray(jsonObject.getJSONArray("records").toJSONString(), SyncLocsDto.class);
                    log.info("records结果: {}",  array);
                    return array;
                } else {
                    throw new CoolException("任务下发失败!!");
                }
            } catch (JsonProcessingException e) {
                throw new CoolException(e.getMessage());
            }
        }, 3, 3, TimeUnit.SECONDS);
        }
    }
}