Commit 94cf635c by 丁伟峰

Merge branch 'dev-order-saas'

2 parents 6b683b21 d615067a
package com.dituhui.pea.order.common;
import com.fasterxml.jackson.databind.JsonNode;
import com.dituhui.pea.common.Result;
import com.dituhui.pea.order.dto.SaasFendanDTO;
import com.dituhui.pea.order.dto.SaasXyFendanDTO;
import com.dituhui.pea.order.feign.ISaaSRemoteService;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.experimental.Accessors;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.http.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.stream.Collectors;
@Component
@Slf4j
public class SaasUtils {
@Value("${SaaS.ak}")
String ak;
@Value("${SaaS.url}")
String url;
@Autowired
ISaaSRemoteService saasRemoteService;
/**
* 根据提供的地址信息,获取对应的片区图层定义的工作队;如果没有找到,返回为空
*/
......@@ -29,45 +37,29 @@ public class SaasUtils {
// todo 由于saas的分单接口尚未完成,目前仅仅是调用分单获取图层、区块名称,对于我们的容量查询没有真正使用,目前采用随机返回方式
// 创建RestTemplate实例
log.info("===> queryBlocksByLocation({})", location);
RestTemplate restTemplate = new RestTemplate();
// 设置请求头
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
// 构建请求参数
String url;
MultiValueMap<String, Object> params = new LinkedMultiValueMap<>();
params.add("ak", "284c57cbabad4755a9c657885a8df3e2");
url = "https://pea-test.bshg.com.cn/v1/xyfendan";
String[] coordinates = location.split(",");
params.add("coordinate", String.format("{\"x\":%s, \"y\":%s}", coordinates[0], coordinates[1]));
params.add("need_district", "false");
params.add("need_layer", "true");
String coordinate = String.format("{\"x\":%s, \"y\":%s}", coordinates[0], coordinates[1]);
Boolean need_district = false;
Boolean need_layer = true;
// params.add("related_point_fields", "");
params.add("area_fields", "名称,唯一编号,区块");
log.info("request params ==> {}", params);
// 构建请求实体
HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(params, headers);
// 发送POST请求
ResponseEntity<String> responseEntity = restTemplate.exchange(url, HttpMethod.POST, requestEntity, String.class);
// 获取响应结果
String responseBody = responseEntity.getBody();
log.info("after call saas ==> {}", responseEntity.getBody());
String area_fields = "名称,唯一编号,区块";
String str = saasRemoteService.blockByLocation(ak, coordinate, need_district, need_layer, area_fields);
log.info("blockByLocation返回结果: ===> {}", str);
// 使用Jackson库解析JSON数据
List<BlockInfo> blocks = new ArrayList<>();
ObjectMapper objectMapper = new ObjectMapper();
try {
JsonNode responseJson = objectMapper.readTree(responseBody);
// 坐标模式
for (JsonNode r : responseJson.get("result")) {
// 发现下面的语句,二级dto总是被解析为LinkedTreeMap,导致后面逻辑处理失败,因此改为自己用ObjectMapper来解析
// Result<List<SaasXyFendanDTO.AreaInfo>> rs = TypeUtils.<List<SaasXyFendanDTO.AreaInfo>>convertResult(str);
Result<List<SaasXyFendanDTO.AreaInfo>> rs = (new ObjectMapper()).readValue(str, new TypeReference<Result<List<SaasXyFendanDTO.AreaInfo>>>() {
});
assert rs != null;
for (SaasXyFendanDTO.AreaInfo r : rs.getResult()) {
// 分单接口暂时无图层返回
if (r.get("field3") != null && r.get("field1") != null) {
blocks.add(new BlockInfo().setBlockId(r.get("field3").asText()).setBlockName(r.get("field1").asText()));
if (r.getField2() != null && r.getField1() != null) {
blocks.add(new BlockInfo()
.setBlockId(r.getField2())
.setBlockName(r.getField1()));
}
}
} catch (Exception e) {
......@@ -83,45 +75,30 @@ public class SaasUtils {
// todo 由于saas的分单接口尚未完成,目前仅仅是调用分单获取图层、区块名称,对于我们的容量查询没有真正使用,目前采用随机返回方式
// 创建RestTemplate实例
log.info("===> queryBlocksByAddress({})", address);
RestTemplate restTemplate = new RestTemplate();
// 设置请求头
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
String addresses = String.format("[{\"address\":\"%s\"}]", address);
Boolean need_district = false;
Boolean need_layer = true;
String area_fields = "名称,唯一编号,区块";
String str = saasRemoteService.blockByAddress(ak, addresses, need_district, need_layer, area_fields);
log.info("blockByAddress返回结果: ===> {}", str);
// 构建请求参数
String url;
MultiValueMap<String, Object> params = new LinkedMultiValueMap<>();
params.add("ak", "284c57cbabad4755a9c657885a8df3e2");
url = "https://pea-test.bshg.com.cn/v2/fendan";
params.add("addresses", String.format("[{\"address\":\"%s\"}]", address));
params.add("need_district", "false");
params.add("need_layer", "true");
// params.add("related_point_fields", "");
params.add("area_fields", "名称,唯一编号,区块");
log.info("request params ==> {}", params);
// 构建请求实体
HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(params, headers);
// 发送POST请求
ResponseEntity<String> responseEntity = restTemplate.exchange(url, HttpMethod.POST, requestEntity, String.class);
// 获取响应结果
String responseBody = responseEntity.getBody();
log.info("after call saas ==> {}", responseEntity.getBody());
// 使用Jackson库解析JSON数据
List<BlockInfo> blocks = new ArrayList<>();
ObjectMapper objectMapper = new ObjectMapper();
try {
JsonNode responseJson = objectMapper.readTree(responseBody);
// 地址模式
// 获取areaResults[0]的值
for (JsonNode r : responseJson.get("result").get(0).get("areaResults")) {
// 分单接口暂时无图层返回
if (r.get("field3") != null && r.get("field1") != null) {
blocks.add(new BlockInfo().setBlockId(r.get("field3").asText()).setBlockName(r.get("field1").asText()));
// Result<List<SaasFendanDTO.Result>> rs = TypeUtils.<List<SaasFendanDTO.Result>>convertResult(str);
Result<List<SaasFendanDTO.ResultDATA>> rs = new ObjectMapper().readValue(str, new TypeReference<Result<List<SaasFendanDTO.ResultDATA>>>() {
});
assert rs != null;
for (SaasFendanDTO.ResultDATA r : rs.getResult()) {
for (SaasFendanDTO.AreaResult ar : r.getAreaResults()) {
// 分单接口暂时无图层返回
if (ar.getField1() != null && ar.getField3() != null) {
blocks.add(new BlockInfo()
.setBlockId(ar.getField3())
.setBlockName(ar.getField1()));
}
}
}
} catch (Exception e) {
......
package com.dituhui.pea.order.dto;
import lombok.Data;
import java.util.List;
public class SaasFendanDTO {
@Data
public static class ResultDATA {
private List<AreaResult> areaResults;
}
@Data
public static class AreaResult {
private InnerPoint innerPoint;
private String field1;
private String field2;
private String field3;
private String field4;
private String field5;
private String areaName;
private String layer;
}
@Data
public static class InnerPoint {
private Float x;
private Float y;
}
}
package com.dituhui.pea.order.dto;
import lombok.Data;
public class SaasXyFendanDTO {
@Data
public static class AreaInfo {
private String areaName;
private String layer;
private String field1;
private String field2;
private String field3;
private String field4;
private String field5;
}
}
package com.dituhui.pea.order.feign;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
@FeignClient(url = "${SaaS.url}", name = "saasService")
public interface ISaaSRemoteService {
@PostMapping("/v1/area/add")
public String addArea(@RequestParam String ak, @RequestParam String name, @RequestParam String layerId,
@RequestParam String region, @RequestParam String coordType);
@PostMapping("/v1/area/add")
public String addArea(@RequestParam String ak, @RequestParam String name, @RequestParam String layerId,
@RequestParam String region, @RequestParam String coordType);
@PostMapping("/v1/area/delById")
public String deleteArea(@RequestParam String ak, @RequestParam String id);
@PostMapping("/v1/area/delById")
public String deleteArea(@RequestParam String ak, @RequestParam String id);
@PostMapping("/v1/layer/save")
public String addLayer(@RequestParam String ak, @RequestParam String layerName, @RequestParam Integer layerType,
@RequestParam Integer clipType);
@PostMapping("/v1/layer/save")
public String addLayer(@RequestParam String ak, @RequestParam String layerName, @RequestParam Integer layerType,
@RequestParam Integer clipType);
@PostMapping("/v1/layer/delete")
public String deleteLayer(@RequestParam String ak, @RequestParam String layerId);
@PostMapping("/v1/layer/delete")
public String deleteLayer(@RequestParam String ak, @RequestParam String layerId);
@GetMapping("/v1/xyfendan")
public String blockByLocation(@RequestParam String ak, @RequestParam String coordinate,
@RequestParam Boolean need_district, @RequestParam Boolean need_layer, @RequestParam String area_fields);
@GetMapping("/v2/fendan")
public String blockByAddress(@RequestParam String ak, @RequestParam String addresses,
@RequestParam Boolean need_district, @RequestParam Boolean need_layer, @RequestParam String area_fields);
}
......@@ -5,9 +5,13 @@ import com.dituhui.pea.order.common.CapacityUtils;
import com.dituhui.pea.order.common.DateUtils;
import com.dituhui.pea.order.common.EngineerUtils;
import com.dituhui.pea.order.common.SaasUtils;
import com.dituhui.pea.order.dao.*;
import com.dituhui.pea.order.dao.CapacityEngineerStatDao;
import com.dituhui.pea.order.dao.EngineerSkillDao;
import com.dituhui.pea.order.dao.OrgTeamDao;
import com.dituhui.pea.order.dao.SkillInfoDao;
import com.dituhui.pea.order.dto.CapacityOrderQueryDTO;
import com.dituhui.pea.order.entity.*;
import com.dituhui.pea.order.feign.ISaaSRemoteService;
import com.dituhui.pea.order.service.CapacityQueryService;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
......@@ -17,7 +21,8 @@ import org.springframework.stereotype.Service;
import java.time.LocalDate;
import java.time.temporal.ChronoUnit;
import java.util.*;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
......@@ -39,6 +44,8 @@ public class CapacityQueryServiceImpl implements CapacityQueryService {
private CapacityEngineerStatDao capacityEngineerStatDao;
@Autowired
private OrgTeamDao orgTeamDao;
@Autowired
ISaaSRemoteService saasRemoteService;
@Override
public Result<?> queryMatchCapacityData(CapacityOrderQueryDTO.Request reqDTO) {
......@@ -46,6 +53,8 @@ public class CapacityQueryServiceImpl implements CapacityQueryService {
log.info("===> queryMatchCapacityData()");
List<String> layerIds = capacityUtils.getLayers(reqDTO.getBrand(), reqDTO.getType(), reqDTO.getSkill());
// 同步到saas,返回blockId
List<String> blockIds = null;
if (StringUtils.isNotBlank(reqDTO.getLocation())) {
blockIds = saasUtils.queryBlocksByLocation(reqDTO.getLocation()).stream().map(SaasUtils.BlockInfo::getBlockId).collect(Collectors.toList());
......@@ -58,7 +67,7 @@ public class CapacityQueryServiceImpl implements CapacityQueryService {
}
List<String> teamIds = capacityUtils.getTeamIdsByBlockIdsAndLayerIds(blockIds, layerIds);
if (teamIds == null || teamIds.size() == 0) {
Result.failed("没有找到匹配的工作队");
return Result.failed("没有找到匹配的工作队");
}
// 选择一个工作队(理论上,只有1个合适的工作队),然后遍历下面的各个技术员,从符合技能的技术员中,汇总相关的容量
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!