Merge #110 into master from cc_2026_0422_feat_miniMap

三方接口

* cc_2026_0422_feat_miniMap: (5 commits squashed)

  - feat: 添加机会点考察记录及相关请求和响应类

  - feat: 更新考察记录响应类,添加机会点信息及图片信息结构

  - feat:验签对于List的特殊处理

  - feat: 添加qualified字段到OpportunityInfoResponse以表示考察合格状态

  - Merge branch 'master' into cc_2026_0422_feat_miniMap

Signed-off-by: 王非凡 <accounts_67eba0c5fee9c49c80c8e2b4@mail.teambition.com>
Merged-by: 正新 <accounts_6964c7bcd2a2c377c5bbd01b@mail.teambition.com>

CR-link: https://codeup.aliyun.com/692ea314dec569489f6f167c/hangzhou/java/custom_zxjp/change/110
This commit is contained in:
王非凡
2026-04-27 10:12:33 +00:00
committed by 正新
parent 19f119bbc6
commit 97f8a8669c
10 changed files with 234 additions and 1 deletions

View File

@@ -13,6 +13,7 @@ import java.security.*;
import java.security.spec.InvalidKeySpecException;
import java.security.spec.PKCS8EncodedKeySpec;
import java.util.*;
import java.util.stream.Collectors;
/**
* @Author suzhuhong
@@ -101,7 +102,14 @@ public class SignatureUtils {
if (Objects.isNull(value)|| (value instanceof String && StringUtil.isBlank(value.toString())) || (value instanceof Double &&((Double) value).intValue()==0)){
log.info("0或者空值不参与签名");
}else {
if (value instanceof Double){
if (value instanceof List) {
// 处理 List 类型,生成 ["item1","item2"] 格式
List<?> list = (List<?>) value;
String listStr = list.stream()
.map(item -> "\"" + item.toString() + "\"") // 每个元素加双引号
.collect(Collectors.joining(",", "[", "]")); // 用方括号包裹,逗号分隔
sb.append(key).append("=").append(listStr).append("&");
} else if (value instanceof Double){
sb.append(key).append("=").append(((Double) value).intValue()).append("&");
}else {
sb.append(key).append("=").append(value).append("&");

View File

@@ -0,0 +1,40 @@
package com.cool.store.request.oppty;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.List;
/** * 添加机会点考察记录 */
@Data
public class AddInspectionRecordRequest {
@ApiModelProperty("机会点编号")
@NotBlank
private String code;
@ApiModelProperty("考察人姓名")
@NotBlank
private String name;
@ApiModelProperty("考察人手机号")
@NotBlank
private String mobile;
@ApiModelProperty("考察时间格式yyyy-MM-dd HH:mm:ss")
@NotBlank
private String inspectionTime;
@ApiModelProperty("是否合格,兼容 1/2 或 true/false")
@NotNull
private Object qualified;
@ApiModelProperty("备注")
private String remark;
@ApiModelProperty("考察图片兼容对象数组或字符串URL数组")
private List<Object> images;
}

View File

@@ -0,0 +1,29 @@
package com.cool.store.request.oppty;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
/**
* 查询机会点考察记录列表
*/
@Data
public class ListInspectionRecordRequest {
@ApiModelProperty("机会点编号")
@NotBlank
private String code;
@ApiModelProperty("考察人手机号")
private String mobile;
@ApiModelProperty("是否合格,兼容 1/2 或 true/false")
private Object qualified;
@ApiModelProperty("页码默认1")
private Integer pageNum;
@ApiModelProperty("每页条数默认20最大50")
private Integer pageSize;
}

View File

@@ -0,0 +1,21 @@
package com.cool.store.request.oppty;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
/**
* 设置机会点调整后坐标
*/
@Data
public class SaveAdjustLocationRequest {
@ApiModelProperty("机会点编号")
@NotBlank
private String code;
@ApiModelProperty("调整后坐标 GEOHASH")
@NotBlank
private String location;
}

View File

@@ -0,0 +1,17 @@
package com.cool.store.response.oppty;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;
import java.util.List;
/**
* 机会点考察记录分页响应
*/
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class InspectionRecordPageResponse {
private PageResponse page;
private List<InspectionRecordResponse> pageData;
}

View File

@@ -0,0 +1,64 @@
package com.cool.store.response.oppty;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;
import java.util.List;
import java.util.Map;
/**
* 机会点考察记录
*/
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class InspectionRecordResponse {
/**
* 主键ID
*/
private Long iid;
/**
* 机会点ID
*/
private Long oid;
/**
* 机会点编号
*/
private String code;
/**
* 机会点名称
*/
private String opptyName;
/**
* 考察人姓名
*/
private String name;
/**
* 考察人手机号
*/
private String mobile;
/**
* 考察时间,格式为 `yyyy-MM-dd HH:mm:ss`
*/
private String inspectionTime;
/**
* 是否合格:`1` 合格,`2` 不合格
*/
private Integer qualified;
/**
* 备注
*/
private String remark;
/**
* 保持兼容,先用通用结构承接第三方返回
* 每项通常包含 path/url
*/
private List<ImageInfo> images;
@Data
public static class ImageInfo {
private String path;
private String url;
}
}

View File

@@ -34,4 +34,6 @@ public class OpportunityInfoResponse {
private Integer berthNum;
@ApiModelProperty("关注人用户信息 ,如有")
private List<UserResponse> atUsers;
@ApiModelProperty("是否合格1合格2不合格0|null未考察")
private Integer qualified;
}

View File

@@ -4,6 +4,7 @@ import com.cool.store.request.oppty.*;
import com.cool.store.response.oppty.CityResponse;
import com.cool.store.response.oppty.OpportunityDetailResponse;
import com.cool.store.response.oppty.OpportunityInfoPageResponse;
import com.cool.store.response.oppty.InspectionRecordPageResponse;
import java.util.List;
@@ -66,5 +67,22 @@ public interface ThirdOpportunityService {
*/
List<CityResponse> cityList(CityRequest request);
/**
* 添加考察记录
* @param request
* @return
*/
String addInspectionRecord(AddInspectionRecordRequest request);
/**
* 考察列表
*/
InspectionRecordPageResponse listInspectionRecord(ListInspectionRecordRequest request);
/**
* 更改机会点坐标
* @param request
* @return
*/
String saveAdjustLocation(SaveAdjustLocationRequest request);
}

View File

@@ -96,6 +96,23 @@ public class ThirdOpportunityServiceImpl implements ThirdOpportunityService {
return executeApiCall(url, requestBody, List.class);
}
@Override
public String addInspectionRecord(AddInspectionRecordRequest requestBody) {
String url = apiUrl + "open/oppty/v1/addInspectionRecord";;
return executeApiCall(url, requestBody, String.class);
}
@Override
public InspectionRecordPageResponse listInspectionRecord(ListInspectionRecordRequest requestBody) {
String url = apiUrl + "open/oppty/v1/listInspectionRecord";
return executeApiCall(url, requestBody, InspectionRecordPageResponse.class);
}
@Override
public String saveAdjustLocation(SaveAdjustLocationRequest requestBody) {
String url = apiUrl + "open/oppty/v1/saveAdjustLocation";
return executeApiCall(url, requestBody, String.class);
}
private <T> T executeApiCall(String url, Object requestBody, Class<T> responseType) {
// 1. 打印请求前日志

View File

@@ -15,6 +15,7 @@ import com.cool.store.response.huoma.ShopBaseInfoResponse;
import com.cool.store.response.oppty.CityResponse;
import com.cool.store.response.oppty.OpportunityDetailResponse;
import com.cool.store.response.oppty.OpportunityInfoPageResponse;
import com.cool.store.response.oppty.InspectionRecordPageResponse;
import com.cool.store.service.HuoMaService;
import com.cool.store.service.ThirdBigDataService;
import com.cool.store.service.ThirdOpportunityService;
@@ -171,5 +172,21 @@ public class ThirdApiController {
return ResponseResult.success(huoMaService.getIncomeSummary(request));
}
@PostMapping("/addInspectionRecord")
@ApiOperation("新增机会点考察记录")
public ResponseResult<String> addInspectionRecord(@Valid @RequestBody AddInspectionRecordRequest request) {
return ResponseResult.success(thirdOpportunityService.addInspectionRecord(request));
}
@PostMapping("/listInspectionRecord")
@ApiOperation("分页查询机会点考察记录")
public ResponseResult<InspectionRecordPageResponse> listInspectionRecord(@Valid @RequestBody ListInspectionRecordRequest request) {
return ResponseResult.success(thirdOpportunityService.listInspectionRecord(request));
}
@PostMapping("/saveAdjustLocation")
@ApiOperation("设置机会点调整后坐标")
public ResponseResult<String> saveAdjustLocation(@Valid @RequestBody SaveAdjustLocationRequest request) {
return ResponseResult.success(thirdOpportunityService.saveAdjustLocation(request));
}
}