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