call java remote interface, get under way and post way spring boot

package net.vtstar.cloudmes.business.herc.service;

import com.alibaba.fastjson.JSONObject;
import net.vtstar.cloudmes.business.herc.domain.Oee;
import net.vtstar.cloudmes.business.herc.domain.OeeResult;
import net.vtstar.cloudmes.business.herc.domain.SyncProgram;
import net.vtstar.cloudmes.business.herc.properties.HercProperties;
import net.vtstar.cloudmes.business.mobileterminal.domain.ProductionCompleteVO;
import net.vtstar.utils.DateUtils;
import net.vtstar.utils.asserts.ParamAssert;
import net.vtstar.utils.domain.Return;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.FileSystemResource;
import org.springframework.http.*;
import org.springframework.stereotype.Service;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.util.UriComponentsBuilder;

import java.io.File;
import java.lang.reflect.Field;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;


@Service
public class HercService {

    @Autowired
    private HercProperties hercProperties;

    @Autowired
    private RestTemplate restTemplate;

    private static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";

    /**
     * @param syncProgram 同步程序需要的参数
     */
    public void syncProgram(SyncProgram syncProgram) {
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.MULTIPART_FORM_DATA);
        headers.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON_UTF8));

        MultiValueMap<String, Object> body = getMultiValueMap(syncProgram);

        HttpEntity<MultiValueMap<String, Object>> httpEntity = new HttpEntity<>(body, headers);
        ResponseEntity<Return> responseEntity = restTemplate.exchange(hercProperties.getSyncProgram(), HttpMethod.POST, httpEntity, Return.class);
        ParamAssert.state(responseEntity.getStatusCode() == HttpStatus.OK, "同步程序异常");
        Return r =responseEntity.getBody (); 
        ParamAssert.state ( 600 == r.getCode (), r.getMessage ()); 
    } 

    / ** 
     * OEE content acquisition system herc 
     * / 
    public OeeResult getTimePerformanceYieldRateOee (OEE OEE) {
         // URL using analytical parameters manner, the yield-reference-Performance-herc.url.time Rate-OEE 
        ResponseEntity <the Return> Response = restTemplate.getForEntity (hercProperties.getTimePerformanceYieldRateOee (), the Return. class , getValueMap (OEE)); 
        ParamAssert.state (response.getStatusCode () == HttpStatus.OK, "Get oee failed" ); 
        the Return R & lt = response.getBody (); 
        ParamAssert.state ( 600 == r.getCode(), r.getMessage());
        Map<String, Object> map = (Map<String, Object>) r.getData();
        return new JSONObject(map).toJavaObject(OeeResult.class);
    }

    /**
     * 将派工单报工同步到herc系统
     */
    public void syncDispatchListData(ProductionCompleteVO productionCompleteVO) {
        HttpHeaders httpHeaders = new HttpHeaders();
        httpHeaders.setContentType(MediaType.APPLICATION_JSON_UTF8);
        RequestEntity<ProductionCompleteVO> requestEntity;
        try {
            requestEntity = New new RequestEntity <> (productionCompleteVO, httpHeaders, HttpMethod.POST, new new the URI (hercProperties.getSyncDispatchListData ())); 
        } the catch (a URISyntaxException to E) { 
            e.printStackTrace (); 
            the throw  new new IllegalStateException ( "url synchronization procedure is misconfigured, Contact your administrator " ); 
        } 
        ResponseEntity <the Return> responseEntity = restTemplate.exchange (RequestEntity, the Return. class ); 
        ParamAssert.state (responseEntity.getStatusCode () == HttpStatus.OK," work order synchronization failure parameter " ); 
        the Return R & lt = responseEntity.getBody (); 
        ParamAssert.state (600 == r.getCode(), r.getMessage());
    }

    /**
     * 用户同步派工单接口
     */
    public Map getUserPlanning(String equipNo) {
        HttpHeaders httpHeaders = new HttpHeaders();
        httpHeaders.setContentType(MediaType.APPLICATION_JSON_UTF8);

        RequestEntity<MultiValueMap<String, Object>> requestEntity = null;

        UriComponentsBuilder requestUri = UriComponentsBuilder.fromUri(URI.create(hercProperties.getSyncWorkOrderCount()))
                .queryParam("empNo", equipNo);

        ResponseEntity<The Return> = R & lt restTemplate.getForEntity (. RequestUri.toUriString (), the Return class ); 
        the Map <String, Object> = Map (the Map <String, Object> .) R.getBody () the getData ();
         return Map; 
    } 


    / ** 
     * convert the object into an object package HashMap 
     * HTTP GET requests for use filling parameter 
     * HTTP GET request type uri / api / xxxx / {x1} / {x2}, or / api / xxxx? x1 = { X2 = {} & X1 X2} 
     * / 
    Private the Map <String, Object> getValueMap (Object Object) { 
        Class objclass = object.getClass (); 
        the Map <String, Object> = Result new new the HashMap <> (); 

        Field, [] Fields = objClass.getDeclaredFields();
        for (Field field : fields) {
            field.setAccessible(true);
            try {
                if (field.getType() == Date.class) {
                    result.put(field.getName(), DateUtils.parseDateToString((Date) field.get(object), DATE_FORMAT));
                } else {
                    result.put(field.getName(), field.get(object));
                }
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
        }
        return result;
    }

    /**
     * 将object转换成MultiValueMap封装的对象
     */
    private MultiValueMap<String, Object> getMultiValueMap(Object object) {
        Class objClass = object.getClass();
        MultiValueMap<String, Object> result = new LinkedMultiValueMap<>();

        Field[] fields = objClass.getDeclaredFields();
        for (Field field : fields) {
            field.setAccessible(true);
            try {
                if (field.getType() == File.class) {
                    FileSystemResource resource = new FileSystemResource((File) field.get(object));
                    result.add(field.getName(), resource);
                } else if (field.getType() == File[].class) {
                    File[] files = (File[]) field.get(object);
                    for (File file : files) {
                        FileSystemResource fileSystemResources = new FileSystemResource(file);
                        result.add(field.getName(), fileSystemResources);
                    }
                } else {
                    result.add(field.getName(), field.get(object));
                }
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
        }
        return result;
    }

}

These are the core business code,

restTemplate invoke remote java interfaces

Package net.vtstar.cloudmes.business.herc.properties; 

Import lombok.Getter;
 Import lombok.Setter;
 Import org.springframework.boot.context.properties.ConfigurationProperties; 

@ConfigurationProperties (prefix = "herc.url" )
 public  class HercProperties { 

    @Getter 
    @Setter 
    // program synchronization 
    Private String syncProgram; 

    @Getter 
    @Setter 
    // Get OEE, time utilization rate, performance, utilization rate, yield, the OEE 
    Private String timePerformanceYieldRateOee; 


    @Getter 
    @Setter 
    // submitted synchronization procedure herc system to 
    privateSyncDispatchListData String; 

    @Getter 
    @Setter 
    // user interface to send work orders 
    Private String syncWorkOrderCount; 

}

 

herc.url.sync-program=http://22b1964l16.iok.la/api/CNCSystem/ProgramSynchronization
herc.url.time-performance-yield-rate-oee=http://22b1964l16.iok.la/api/CNCSystem/OEE?processDur={processDur}&startTime={startTime}&endTime={endTime}&equipNo={equipNo}
herc.url.sync-dispatch-list-data=http://22b1964l16.iok.la/api/CNCSystem/WorkOrderData
herc.url.sync-work-order-count=http://22b1964l16.iok.la/api/CNCSystem/WorkOrderCount

 

These are the remote interface configuration

Guess you like

Origin www.cnblogs.com/xuehu666/p/12105658.html