diff --git a/coolstore-partner-common/src/main/java/com/cool/store/utils/SignatureUtils.java b/coolstore-partner-common/src/main/java/com/cool/store/utils/SignatureUtils.java index 17708e109..59ddc6576 100644 --- a/coolstore-partner-common/src/main/java/com/cool/store/utils/SignatureUtils.java +++ b/coolstore-partner-common/src/main/java/com/cool/store/utils/SignatureUtils.java @@ -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("&"); diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/oppty/AddInspectionRecordRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/oppty/AddInspectionRecordRequest.java new file mode 100644 index 000000000..8bbd215ad --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/oppty/AddInspectionRecordRequest.java @@ -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 images; +} \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/oppty/ListInspectionRecordRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/oppty/ListInspectionRecordRequest.java new file mode 100644 index 000000000..fc224f77d --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/oppty/ListInspectionRecordRequest.java @@ -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; +} \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/oppty/SaveAdjustLocationRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/oppty/SaveAdjustLocationRequest.java new file mode 100644 index 000000000..3db9aa7f0 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/oppty/SaveAdjustLocationRequest.java @@ -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; +} \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/response/oppty/InspectionRecordPageResponse.java b/coolstore-partner-model/src/main/java/com/cool/store/response/oppty/InspectionRecordPageResponse.java new file mode 100644 index 000000000..915a1a7e3 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/response/oppty/InspectionRecordPageResponse.java @@ -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 pageData; +} \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/response/oppty/InspectionRecordResponse.java b/coolstore-partner-model/src/main/java/com/cool/store/response/oppty/InspectionRecordResponse.java new file mode 100644 index 000000000..fb8333f6d --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/response/oppty/InspectionRecordResponse.java @@ -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 images; + + @Data + public static class ImageInfo { + private String path; + private String url; + } +} \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/response/oppty/OpportunityInfoResponse.java b/coolstore-partner-model/src/main/java/com/cool/store/response/oppty/OpportunityInfoResponse.java index 9149f1576..d9f70ad9f 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/response/oppty/OpportunityInfoResponse.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/response/oppty/OpportunityInfoResponse.java @@ -34,4 +34,6 @@ public class OpportunityInfoResponse { private Integer berthNum; @ApiModelProperty("关注人用户信息 ,如有") private List atUsers; + @ApiModelProperty("是否合格,1:合格,2:不合格,0|null:未考察") + private Integer qualified; } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/ThirdOpportunityService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/ThirdOpportunityService.java index baeef4fde..76d3eb325 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/ThirdOpportunityService.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/ThirdOpportunityService.java @@ -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 cityList(CityRequest request); + /** + * 添加考察记录 + * @param request + * @return + */ + String addInspectionRecord(AddInspectionRecordRequest request); + /** + * 考察列表 + */ + InspectionRecordPageResponse listInspectionRecord(ListInspectionRecordRequest request); + + /** + * 更改机会点坐标 + * @param request + * @return + */ + String saveAdjustLocation(SaveAdjustLocationRequest request); } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/ThirdOpportunityServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/ThirdOpportunityServiceImpl.java index fa5019c32..09ed1a3d7 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/ThirdOpportunityServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/ThirdOpportunityServiceImpl.java @@ -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 executeApiCall(String url, Object requestBody, Class responseType) { // 1. 打印请求前日志 diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/ThirdApiController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/ThirdApiController.java index 5dbe451f0..e7ca47094 100644 --- a/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/ThirdApiController.java +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/ThirdApiController.java @@ -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 addInspectionRecord(@Valid @RequestBody AddInspectionRecordRequest request) { + return ResponseResult.success(thirdOpportunityService.addInspectionRecord(request)); + } + @PostMapping("/listInspectionRecord") + @ApiOperation("分页查询机会点考察记录") + public ResponseResult listInspectionRecord(@Valid @RequestBody ListInspectionRecordRequest request) { + return ResponseResult.success(thirdOpportunityService.listInspectionRecord(request)); + } + + @PostMapping("/saveAdjustLocation") + @ApiOperation("设置机会点调整后坐标") + public ResponseResult saveAdjustLocation(@Valid @RequestBody SaveAdjustLocationRequest request) { + return ResponseResult.success(thirdOpportunityService.saveAdjustLocation(request)); + } }