Browse Source

first commit

felixyin 7 months ago
commit
279296f57d
76 changed files with 3186 additions and 0 deletions
  1. 33 0
      .gitignore
  2. 52 0
      pom.xml
  3. 24 0
      src/main/java/com/jzo2o/api/customer/CommonUserApi.java
  4. 10 0
      src/main/java/com/jzo2o/api/customer/CustomerApi.java
  5. 35 0
      src/main/java/com/jzo2o/api/customer/EvaluationApi.java
  6. 24 0
      src/main/java/com/jzo2o/api/customer/InstitutionApi.java
  7. 56 0
      src/main/java/com/jzo2o/api/customer/InstitutionStaffApi.java
  8. 47 0
      src/main/java/com/jzo2o/api/customer/ServeProviderApi.java
  9. 21 0
      src/main/java/com/jzo2o/api/customer/ServeSkillApi.java
  10. 24 0
      src/main/java/com/jzo2o/api/customer/dto/InstitutionUserPageDTO.java
  11. 13 0
      src/main/java/com/jzo2o/api/customer/dto/InstitutionUserPageQueryDTO.java
  12. 22 0
      src/main/java/com/jzo2o/api/customer/dto/request/CommonUserPageQueryReqDTO.java
  13. 33 0
      src/main/java/com/jzo2o/api/customer/dto/request/CommonUserUpdateReqDTO.java
  14. 53 0
      src/main/java/com/jzo2o/api/customer/dto/request/EvaluationSubmitReqDTO.java
  15. 42 0
      src/main/java/com/jzo2o/api/customer/dto/request/InstitutionStaffAddReqDTO.java
  16. 34 0
      src/main/java/com/jzo2o/api/customer/dto/request/InstitutionStaffPageQueryReqDTO.java
  17. 47 0
      src/main/java/com/jzo2o/api/customer/dto/request/ScoreItem.java
  18. 33 0
      src/main/java/com/jzo2o/api/customer/dto/request/ServerProviderUpdateStatusReqDTO.java
  19. 98 0
      src/main/java/com/jzo2o/api/customer/dto/response/AddressBookResDTO.java
  20. 72 0
      src/main/java/com/jzo2o/api/customer/dto/response/CommonUserResDTO.java
  21. 23 0
      src/main/java/com/jzo2o/api/customer/dto/response/EvaluationScoreResDTO.java
  22. 72 0
      src/main/java/com/jzo2o/api/customer/dto/response/InstitutionStaffResDTO.java
  23. 101 0
      src/main/java/com/jzo2o/api/customer/dto/response/ServeProviderResDTO.java
  24. 16 0
      src/main/java/com/jzo2o/api/customer/dto/response/ServeProviderSimpleResDTO.java
  25. 46 0
      src/main/java/com/jzo2o/api/foundations/RegionApi.java
  26. 17 0
      src/main/java/com/jzo2o/api/foundations/ServeApi.java
  27. 34 0
      src/main/java/com/jzo2o/api/foundations/ServeItemApi.java
  28. 20 0
      src/main/java/com/jzo2o/api/foundations/ServeTypeApi.java
  29. 28 0
      src/main/java/com/jzo2o/api/foundations/dto/ServeItemSimpleDTO.java
  30. 48 0
      src/main/java/com/jzo2o/api/foundations/dto/request/RegionBusinessSettingReqDTO.java
  31. 68 0
      src/main/java/com/jzo2o/api/foundations/dto/response/ConfigRegionInnerResDTO.java
  32. 54 0
      src/main/java/com/jzo2o/api/foundations/dto/response/RegionServeInfoResDTO.java
  33. 33 0
      src/main/java/com/jzo2o/api/foundations/dto/response/RegionSimpleResDTO.java
  34. 98 0
      src/main/java/com/jzo2o/api/foundations/dto/response/ServeAggregationResDTO.java
  35. 109 0
      src/main/java/com/jzo2o/api/foundations/dto/response/ServeItemResDTO.java
  36. 28 0
      src/main/java/com/jzo2o/api/foundations/dto/response/ServeItemSimpleResDTO.java
  37. 36 0
      src/main/java/com/jzo2o/api/foundations/dto/response/ServeTypeCategoryResDTO.java
  38. 27 0
      src/main/java/com/jzo2o/api/foundations/dto/response/ServeTypeSimpleResDTO.java
  39. 16 0
      src/main/java/com/jzo2o/api/market/dto/request/CouponUseBackReqDTO.java
  40. 18 0
      src/main/java/com/jzo2o/api/market/dto/request/CouponUseReqDTO.java
  41. 54 0
      src/main/java/com/jzo2o/api/market/dto/response/AvailableCouponsResDTO.java
  42. 14 0
      src/main/java/com/jzo2o/api/market/dto/response/CouponUseResDTO.java
  43. 29 0
      src/main/java/com/jzo2o/api/operation/utils/RegionUtils.java
  44. 47 0
      src/main/java/com/jzo2o/api/orders/OrdersApi.java
  45. 28 0
      src/main/java/com/jzo2o/api/orders/OrdersHistoryApi.java
  46. 23 0
      src/main/java/com/jzo2o/api/orders/OrdersSeizeApi.java
  47. 36 0
      src/main/java/com/jzo2o/api/orders/OrdersServeApi.java
  48. 22 0
      src/main/java/com/jzo2o/api/orders/dto/request/OrderCancelReqDTO.java
  49. 64 0
      src/main/java/com/jzo2o/api/orders/dto/request/OrderPageQueryReqDTO.java
  50. 16 0
      src/main/java/com/jzo2o/api/orders/dto/request/OrderSeizeReqDTO.java
  51. 18 0
      src/main/java/com/jzo2o/api/orders/dto/response/InstitutionStaffServeCountResDTO.java
  52. 200 0
      src/main/java/com/jzo2o/api/orders/dto/response/OrderAggregationResDTO.java
  53. 191 0
      src/main/java/com/jzo2o/api/orders/dto/response/OrderResDTO.java
  54. 142 0
      src/main/java/com/jzo2o/api/orders/dto/response/OrderSimpleResDTO.java
  55. 22 0
      src/main/java/com/jzo2o/api/orders/dto/response/ServeProviderIdResDTO.java
  56. 16 0
      src/main/java/com/jzo2o/api/publics/MapApi.java
  57. 27 0
      src/main/java/com/jzo2o/api/publics/SmsCodeApi.java
  58. 20 0
      src/main/java/com/jzo2o/api/publics/WechatApi.java
  59. 26 0
      src/main/java/com/jzo2o/api/publics/dto/response/BooleanResDTO.java
  60. 21 0
      src/main/java/com/jzo2o/api/publics/dto/response/LocationResDTO.java
  61. 16 0
      src/main/java/com/jzo2o/api/publics/dto/response/OpenIdResDTO.java
  62. 19 0
      src/main/java/com/jzo2o/api/publics/dto/response/PhoneResDTO.java
  63. 37 0
      src/main/java/com/jzo2o/api/trade/NativePayApi.java
  64. 27 0
      src/main/java/com/jzo2o/api/trade/RefundRecordApi.java
  65. 22 0
      src/main/java/com/jzo2o/api/trade/TradingApi.java
  66. 31 0
      src/main/java/com/jzo2o/api/trade/dto/request/NativePayReqDTO.java
  67. 36 0
      src/main/java/com/jzo2o/api/trade/dto/response/ExecutionResultResDTO.java
  68. 24 0
      src/main/java/com/jzo2o/api/trade/dto/response/NativePayResDTO.java
  69. 80 0
      src/main/java/com/jzo2o/api/trade/dto/response/TradingResDTO.java
  70. 27 0
      src/main/java/com/jzo2o/api/trade/enums/PayChannelEnum.java
  71. 34 0
      src/main/java/com/jzo2o/api/trade/enums/RefundStatusEnum.java
  72. 37 0
      src/main/java/com/jzo2o/api/trade/enums/TradingStateEnum.java
  73. 26 0
      src/main/java/com/jzo2o/config/ClientScanConfiguration.java
  74. 49 0
      src/main/java/com/jzo2o/interceptor/FeignInterceptor.java
  75. 38 0
      src/main/java/com/jzo2o/utils/MyQueryMapEncoder.java
  76. 2 0
      src/main/resources/META-INF/spring.factories

+ 33 - 0
.gitignore

@@ -0,0 +1,33 @@
+HELP.md
+target/
+!.mvn/wrapper/maven-wrapper.jar
+!**/src/main/**/target/
+!**/src/test/**/target/
+
+### STS ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+
+### IntelliJ IDEA ###
+.idea
+*.iws
+*.iml
+*.ipr
+
+### NetBeans ###
+/nbproject/private/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
+build/
+!**/src/main/**/build/
+!**/src/test/**/build/
+
+### VS Code ###
+.vscode/

+ 52 - 0
pom.xml

@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>jzo2o-parent</artifactId>
+        <groupId>com.jzo2o</groupId>
+        <version>1.0-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>jzo2o-api</artifactId>
+
+<!--    <version>1.0-SNAPSHOT</version>-->
+
+    <properties>
+        <maven.compiler.source>11</maven.compiler.source>
+        <maven.compiler.target>11</maven.compiler.target>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-openfeign</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.jzo2o</groupId>
+            <artifactId>jzo2o-common</artifactId>
+        </dependency>
+
+        <!--httpClient的依赖 -->
+        <dependency>
+            <groupId>io.github.openfeign</groupId>
+            <artifactId>feign-httpclient</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-loadbalancer</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.fasterxml.jackson.core</groupId>
+            <artifactId>jackson-databind</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.fasterxml.jackson.datatype</groupId>
+            <artifactId>jackson-datatype-jsr310</artifactId>
+        </dependency>
+
+    </dependencies>
+
+</project>

+ 24 - 0
src/main/java/com/jzo2o/api/customer/CommonUserApi.java

@@ -0,0 +1,24 @@
+package com.jzo2o.api.customer;
+
+import com.jzo2o.api.customer.dto.request.CommonUserPageQueryReqDTO;
+import com.jzo2o.api.customer.dto.request.CommonUserUpdateReqDTO;
+import com.jzo2o.api.customer.dto.response.CommonUserResDTO;
+import com.jzo2o.common.model.PageResult;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.cloud.openfeign.SpringQueryMap;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+
+/**
+ * 内部接口 - 普通用户相关接口
+ *
+ * @author itcast
+ */
+@FeignClient(contextId = "jzo2o-customer", value = "jzo2o-customer", path = "/customer/inner/common-user")
+public interface CommonUserApi {
+
+    @GetMapping("/{id}")
+    CommonUserResDTO findById(@PathVariable("id") Long id);
+}

+ 10 - 0
src/main/java/com/jzo2o/api/customer/CustomerApi.java

@@ -0,0 +1,10 @@
+package com.jzo2o.api.customer;
+
+import org.springframework.cloud.openfeign.FeignClient;
+
+@FeignClient(contextId = "customer", value = "jzo2o-customer")
+public interface CustomerApi {
+
+
+
+}

+ 35 - 0
src/main/java/com/jzo2o/api/customer/EvaluationApi.java

@@ -0,0 +1,35 @@
+package com.jzo2o.api.customer;
+
+import com.jzo2o.api.customer.dto.request.EvaluationSubmitReqDTO;
+import com.jzo2o.api.customer.dto.response.EvaluationScoreResDTO;
+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.RequestBody;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import java.util.List;
+
+/**
+ * @author itcast
+ */
+@FeignClient(contextId = "jzo2o-customer", value = "jzo2o-customer", path = "/customer/inner/evaluation")
+public interface EvaluationApi {
+
+    /**
+     * 根据订单id列表查询师傅评分
+     *
+     * @param orderIds 订单id列表
+     * @return 评分
+     */
+    @GetMapping("/queryServeProviderScoreByOrdersId")
+    EvaluationScoreResDTO queryServeProviderScoreByOrdersId(@RequestParam("orderIds") List<Long> orderIds);
+
+    /**
+     * 自动评价
+     *
+     * @param evaluationSubmitReqDTO 评价信息
+     */
+    @PostMapping("/autoEvaluate")
+    void autoEvaluate(@RequestBody EvaluationSubmitReqDTO evaluationSubmitReqDTO);
+}

+ 24 - 0
src/main/java/com/jzo2o/api/customer/InstitutionApi.java

@@ -0,0 +1,24 @@
+package com.jzo2o.api.customer;
+
+import com.jzo2o.api.customer.dto.InstitutionUserPageQueryDTO;
+import com.jzo2o.common.model.PageResult;
+import com.jzo2o.api.customer.dto.InstitutionUserPageDTO;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.cloud.openfeign.SpringQueryMap;
+import org.springframework.web.bind.annotation.GetMapping;
+
+/**
+ * 机构相关列表
+ */
+@FeignClient(contextId = "jzo2o-customer", value = "jzo2o-customer", path = "/customer/inner/institutions/user")
+public interface InstitutionApi {
+
+    /**
+     * 分页查询机构用户信息
+     *
+     * @param institutionUserPageQueryDTO 查询条件
+     * @return
+     */
+    @GetMapping("")
+    PageResult<InstitutionUserPageDTO> queryForAdmin(@SpringQueryMap InstitutionUserPageQueryDTO institutionUserPageQueryDTO);
+}

+ 56 - 0
src/main/java/com/jzo2o/api/customer/InstitutionStaffApi.java

@@ -0,0 +1,56 @@
+package com.jzo2o.api.customer;
+
+import com.jzo2o.api.customer.dto.request.InstitutionStaffAddReqDTO;
+import com.jzo2o.api.customer.dto.request.InstitutionStaffPageQueryReqDTO;
+import com.jzo2o.api.customer.dto.response.InstitutionStaffResDTO;
+import com.jzo2o.common.model.PageResult;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.cloud.openfeign.SpringQueryMap;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 内部接口 - 机构下属服务人员相关接口
+ *
+ * @author itcast
+ */
+@FeignClient(contextId = "jzo2o-customer", value = "jzo2o-customer", path = "/customer/inner/institution-staff")
+public interface InstitutionStaffApi {
+
+    /**
+     * 根据多个id查询机构下的服务人员
+     * @param ids
+     * @return
+     */
+    @GetMapping("/findByIds")
+    List<InstitutionStaffResDTO> findByIds(@RequestParam("ids") List<Long> ids);
+
+    /**
+     * 根据id查询机构下的服务人员
+     * @param id
+     * @return
+     */
+    @GetMapping("/findById")
+    InstitutionStaffResDTO findById(@RequestParam("id") Long id);
+
+    /**
+     * 根据机构id和机构人员id查询机构下服务人员,加上机构id目的是了确定该人员归属于该机构
+     * @param id
+     * @param institutionId
+     * @return
+     */
+    @GetMapping("/findByIdAndInstitutionId/{id}")
+    InstitutionStaffResDTO findByIdAndInstitutionId(@PathVariable("id") Long id, @RequestParam("institutionId") Long institutionId);
+
+    /**
+     * 根据机构id查询机构下服务人员列表
+     * @param institutionId
+     * @return
+     */
+    @GetMapping("/findByInstitutionId")
+    List<InstitutionStaffResDTO> findByInstitutionId(@RequestParam("institutionId") Long institutionId);
+
+    @PostMapping("/add")
+    void add(@RequestBody InstitutionStaffAddReqDTO institutionStaffAddReqDTO);
+}

+ 47 - 0
src/main/java/com/jzo2o/api/customer/ServeProviderApi.java

@@ -0,0 +1,47 @@
+package com.jzo2o.api.customer;
+
+import com.jzo2o.api.customer.dto.response.ServeProviderResDTO;
+import com.jzo2o.api.customer.dto.response.ServeProviderSimpleResDTO;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 内部接口 - 服务人员/机构相关接口
+ *
+ * @author itcast
+ */
+@FeignClient(contextId = "jzo2o-customer", value = "jzo2o-customer", path = "/customer/inner/serve-provider", qualifiers = "customerServeProviderApi")
+public interface ServeProviderApi {
+
+    @GetMapping("/{id}")
+    ServeProviderResDTO getDetail(@PathVariable("id") Long id);
+
+    /**
+     * 批量获取服务人员/机构所在城市编码
+     * @param ids
+     * @return
+     */
+    @GetMapping("/batchCityCode")
+    Map<Long, String> batchCityCode(@RequestParam("ids") List<Long> ids);
+
+    /**
+     * 根据服务人员id或机构id获取服务人员或机构的类型
+     * @param ids 服务人员或机构id列表
+     * @return 服务人员或机构id和对应的服务人员或机构类型
+     */
+    @GetMapping("/batchGetProviderType")
+    Map<Long, Integer> batchGetProviderType(@RequestParam("ids") List<Long> ids);
+
+    /**
+     * 批量获取服务人员/机构信息
+     * @param ids id列表
+     * @return 批量获取服务
+     */
+    @GetMapping("/batchGet")
+    List<ServeProviderSimpleResDTO> batchGet(@RequestParam("ids") List<Long> ids);
+}

+ 21 - 0
src/main/java/com/jzo2o/api/customer/ServeSkillApi.java

@@ -0,0 +1,21 @@
+package com.jzo2o.api.customer;
+
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import java.util.List;
+
+/**
+ * 内部接口 - 服务技能相关接口
+ *
+ * @author itcast
+ */
+@FeignClient(contextId = "jzo2o-customer", value = "jzo2o-customer", path = "/customer/inner/serve-skill")
+public interface ServeSkillApi {
+
+    @GetMapping("/queryServeSkillListByServeProvider")
+    List<Long> queryServeSkillListByServeProvider(@RequestParam("providerId") Long providerId,
+                             @RequestParam("providerType") Integer providerType,
+                             @RequestParam("cityCode") String cityCode);
+}

+ 24 - 0
src/main/java/com/jzo2o/api/customer/dto/InstitutionUserPageDTO.java

@@ -0,0 +1,24 @@
+package com.jzo2o.api.customer.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Data
+public class InstitutionUserPageDTO {
+    @ApiModelProperty("机构用户id")
+    private Long id;
+    @ApiModelProperty("账号")
+    private String username;
+    @ApiModelProperty("姓名")
+    private String name;
+    @ApiModelProperty("手机号")
+    private String phone;
+    @ApiModelProperty("上次活跃时间")
+    private LocalDateTime lastLoginTime;
+    @ApiModelProperty("账号状态")
+    private Integer status;
+    @ApiModelProperty("认证状态")
+    private Integer authStatus;
+}

+ 13 - 0
src/main/java/com/jzo2o/api/customer/dto/InstitutionUserPageQueryDTO.java

@@ -0,0 +1,13 @@
+package com.jzo2o.api.customer.dto;
+
+import com.jzo2o.common.model.dto.PageQueryDTO;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+@Data
+@ApiModel("机构用户查询条件模型")
+public class InstitutionUserPageQueryDTO extends PageQueryDTO {
+    private String name;
+    private String phone;
+    private Integer status;
+}

+ 22 - 0
src/main/java/com/jzo2o/api/customer/dto/request/CommonUserPageQueryReqDTO.java

@@ -0,0 +1,22 @@
+package com.jzo2o.api.customer.dto.request;
+
+import com.jzo2o.common.model.dto.PageQueryDTO;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel("用户分页查询请求")
+public class CommonUserPageQueryReqDTO extends PageQueryDTO {
+    /**
+     * 昵称
+     */
+    @ApiModelProperty("昵称")
+    private String nickname;
+
+    /**
+     * 电话
+     */
+    @ApiModelProperty("电话")
+    private String phone;
+}

+ 33 - 0
src/main/java/com/jzo2o/api/customer/dto/request/CommonUserUpdateReqDTO.java

@@ -0,0 +1,33 @@
+package com.jzo2o.api.customer.dto.request;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 更新用户请求
+ *
+ * @author itcast
+ * @create 2023/7/17 17:10
+ **/
+@Data
+@ApiModel("更新用户请求")
+public class CommonUserUpdateReqDTO {
+    /**
+     * 用户id
+     */
+    @ApiModelProperty("用户id")
+    private Long id;
+
+    /**
+     * 状态,0:正常,1:冻结
+     */
+    @ApiModelProperty(value = "状态,0:正常,1:冻结", required = true)
+    private Integer status;
+
+    /**
+     * 账号冻结原因
+     */
+    @ApiModelProperty("账号冻结原因")
+    private String accountLockReason;
+}

+ 53 - 0
src/main/java/com/jzo2o/api/customer/dto/request/EvaluationSubmitReqDTO.java

@@ -0,0 +1,53 @@
+package com.jzo2o.api.customer.dto.request;
+
+import com.jzo2o.common.model.CurrentUserInfo;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 发表评价请求体
+ *
+ * @author itcast
+ * @create 2023/9/11 16:22
+ **/
+@Data
+@ApiModel("发表评价请求体")
+public class EvaluationSubmitReqDTO {
+
+    @ApiModelProperty(value = "当前用户信息", hidden = true)
+    private CurrentUserInfo currentUserInfo;
+
+    /**
+     * 用户类型
+     */
+    @ApiModelProperty(value = "用户类型", hidden = true)
+    private Integer userType;
+
+    /**
+     * 用户id
+     */
+    @ApiModelProperty(value = "用户id", hidden = true)
+    private Long userId;
+
+    @ApiModelProperty("订单id")
+    private Long ordersId;
+
+    @ApiModelProperty("服务项评价内容")
+    private String serveItemEvaluationContent;
+
+    @ApiModelProperty("服务项评价图片列表")
+    private String[] serveItemPictureArray;
+
+    @ApiModelProperty("服务项评分项列表")
+    private ScoreItem[] serveItemScoreItems;
+
+    @ApiModelProperty("师傅评价内容")
+    private String serveProviderEvaluationContent;
+
+    @ApiModelProperty("师傅评分项列表")
+    private ScoreItem[] serveProviderScoreItems;
+
+    @ApiModelProperty(value = "是否匿名,0为未匿名,1为匿名", required = true)
+    private Integer isAnonymous;
+}

+ 42 - 0
src/main/java/com/jzo2o/api/customer/dto/request/InstitutionStaffAddReqDTO.java

@@ -0,0 +1,42 @@
+package com.jzo2o.api.customer.dto.request;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+@ApiModel("机构服务人员添加接口")
+public class InstitutionStaffAddReqDTO {
+
+    @ApiModelProperty("机构服务人员id")
+    private Long id;
+
+    @ApiModelProperty("机构id")
+    private Long institutionId;
+
+    /**
+     * 名称
+     */
+    @ApiModelProperty(value = "名称", required = true)
+    private String name;
+
+    /**
+     * 电话
+     */
+    @ApiModelProperty(value = "电话", required = true)
+    private String phone;
+
+    /**
+     * 身份证号
+     */
+    @ApiModelProperty(value = "身份证号", required = true)
+    private String idCardNo;
+
+    /**
+     * 证明资料列表
+     */
+    @ApiModelProperty("证明资料列表")
+    private List<String> certificationImgs;
+}

+ 34 - 0
src/main/java/com/jzo2o/api/customer/dto/request/InstitutionStaffPageQueryReqDTO.java

@@ -0,0 +1,34 @@
+package com.jzo2o.api.customer.dto.request;
+
+import com.jzo2o.common.model.dto.PageQueryDTO;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 机构下属服务人员分页查询
+ *
+ * @author itcast
+ * @create 2023/7/18 20:42
+ **/
+@Data
+@ApiModel("机构下属服务人员分页查询请求")
+public class InstitutionStaffPageQueryReqDTO extends PageQueryDTO {
+    /**
+     * 机构id
+     */
+    @ApiModelProperty("机构id")
+    private Long institutionId;
+
+    /**
+     * 姓名
+     */
+    @ApiModelProperty("姓名")
+    private String name;
+
+    /**
+     * 手机号
+     */
+    @ApiModelProperty("手机号")
+    private String phone;
+}

+ 47 - 0
src/main/java/com/jzo2o/api/customer/dto/request/ScoreItem.java

@@ -0,0 +1,47 @@
+package com.jzo2o.api.customer.dto.request;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * 评分项
+ *
+ * @author itcast
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@ApiModel("评价发表评分")
+public class ScoreItem {
+    /**
+     * 评分项id
+     */
+    @ApiModelProperty(value = "评分项id", required = true)
+    private String itemId;
+
+    /**
+     * 评分项名称
+     */
+    @ApiModelProperty(value = "评分项名称", required = true)
+    private String itemName;
+
+    /**
+     * 分数
+     */
+    @ApiModelProperty(value = "分数", required = true)
+    private Double score;
+
+    /**
+     * 获取默认评分项
+     *
+     * @param itemId   评分项id
+     * @param itemName 评分项名称
+     * @return 评分项
+     */
+    public static ScoreItem defaultScoreItem(String itemId, String itemName) {
+        return new ScoreItem(itemId, itemName, 5.0);
+    }
+}

+ 33 - 0
src/main/java/com/jzo2o/api/customer/dto/request/ServerProviderUpdateStatusReqDTO.java

@@ -0,0 +1,33 @@
+package com.jzo2o.api.customer.dto.request;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 服务人员/机构更新状态请求
+ *
+ * @author itcast
+ * @create 2023/7/18 21:34
+ **/
+@Data
+@ApiModel("服务人员/机构更新状态请求")
+public class ServerProviderUpdateStatusReqDTO {
+    /**
+     * 服务人员/机构id
+     */
+    @ApiModelProperty(value = "服务人员/机构id", required = true)
+    private Long id;
+
+    /**
+     * 状态,0:正常,1:冻结
+     */
+    @ApiModelProperty(value = "状态,0:正常,1:冻结", required = true)
+    private Integer status;
+
+    /**
+     * 账号冻结原因
+     */
+    @ApiModelProperty("账号冻结原因")
+    private String accountLockReason;
+}

+ 98 - 0
src/main/java/com/jzo2o/api/customer/dto/response/AddressBookResDTO.java

@@ -0,0 +1,98 @@
+package com.jzo2o.api.customer.dto.response;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 地址薄
+ * </p>
+ *
+ * @author itcast
+ * @since 2023-07-06
+ */
+@Data
+@ApiModel("地址薄详情")
+public class AddressBookResDTO {
+
+    /**
+     * 主键
+     */
+    @ApiModelProperty("地址薄id")
+    private Long id;
+
+    /**
+     * 用户id
+     */
+    @ApiModelProperty("用户id")
+    private Long userId;
+
+    /**
+     * 名称
+     */
+    @ApiModelProperty("名称")
+    private String name;
+
+    /**
+     * 电话
+     */
+    @ApiModelProperty("电话")
+    private String phone;
+
+    /**
+     * 省份
+     */
+    @ApiModelProperty("省份")
+    private String province;
+
+    /**
+     * 市级
+     */
+    @ApiModelProperty("市级")
+    private String city;
+
+    /**
+     * 区/县
+     */
+    @ApiModelProperty("区/县")
+    private String county;
+
+    /**
+     * 详细地址
+     */
+    @ApiModelProperty("详细地址")
+    private String address;
+
+    /**
+     * 经度
+     */
+    @ApiModelProperty("经度")
+    private Double lon;
+
+    /**
+     * 纬度
+     */
+    @ApiModelProperty("纬度")
+    private Double lat;
+
+    /**
+     * 是否为默认地址,0:否,1:是
+     */
+    @ApiModelProperty("是否为默认地址,0:否,1:是")
+    private Integer isDefault;
+
+    /**
+     * 创建时间
+     */
+    @ApiModelProperty("创建时间")
+    private LocalDateTime createTime;
+
+    /**
+     * 更新时间
+     */
+    @ApiModelProperty("更新时间")
+    private LocalDateTime updateTime;
+}

+ 72 - 0
src/main/java/com/jzo2o/api/customer/dto/response/CommonUserResDTO.java

@@ -0,0 +1,72 @@
+package com.jzo2o.api.customer.dto.response;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * 用户信息响应
+ *
+ * @author itcast
+ * @since 2023-07-04
+ */
+@Data
+@ApiModel("用户信息响应")
+public class CommonUserResDTO {
+
+    /**
+     * 用户id
+     */
+    @ApiModelProperty("用户id")
+    private Long id;
+
+    /**
+     * 昵称
+     */
+    @ApiModelProperty("昵称")
+    private String nickname;
+
+    /**
+     * 电话
+     */
+    @ApiModelProperty("电话")
+    private String phone;
+
+    /**
+     * 头像
+     */
+    @ApiModelProperty("头像")
+    private String avatar;
+
+    /**
+     * 状态,0:正常,1:冻结
+     */
+    @ApiModelProperty("状态,0:正常,1:冻结")
+    private Integer status;
+
+    /**
+     * 账号冻结原因
+     */
+    @ApiModelProperty("账号冻结原因")
+    private String accountLockReason;
+
+    /**
+     * 下单次数
+     */
+    @ApiModelProperty("下单次数")
+    private Integer orderNumber;
+
+    /**
+     * 创建时间
+     */
+    @ApiModelProperty("创建时间")
+    private LocalDateTime createTime;
+
+    /**
+     * 更新时间
+     */
+    @ApiModelProperty("更新时间")
+    private LocalDateTime updateTime;
+}

+ 23 - 0
src/main/java/com/jzo2o/api/customer/dto/response/EvaluationScoreResDTO.java

@@ -0,0 +1,23 @@
+package com.jzo2o.api.customer.dto.response;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.Map;
+
+/**
+ * 评价评分
+ *
+ * @author itcast
+ * @create 2023/9/16 09:59
+ **/
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class EvaluationScoreResDTO {
+    /**
+     * 评分,key为订单id,value为分数
+     */
+    private Map<String, Double> scoreMap;
+}

+ 72 - 0
src/main/java/com/jzo2o/api/customer/dto/response/InstitutionStaffResDTO.java

@@ -0,0 +1,72 @@
+package com.jzo2o.api.customer.dto.response;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * 机构下属服务人员响应数据
+ *
+ * @author itcast
+ * @create 2023/7/18 20:45
+ **/
+@Data
+@ApiModel("机构下属服务人员响应数据")
+public class InstitutionStaffResDTO {
+    /**
+     * 服务人员id
+     */
+    @ApiModelProperty("服务人员id")
+    private Long id;
+
+    /**
+     * 编号
+     */
+    @ApiModelProperty("编号")
+    private String code;
+
+    /**
+     * 名称
+     */
+    @ApiModelProperty("名称")
+    private String name;
+
+    /**
+     * 电话
+     */
+    @ApiModelProperty("电话")
+    private String phone;
+
+    /**
+     * 综合评分
+     */
+    @ApiModelProperty("综合评分")
+    private Double score;
+
+    /**
+     * 身份证号
+     */
+    @ApiModelProperty("身份证号")
+    private String idCardNo;
+
+    /**
+     * 证明资料列表
+     */
+    @ApiModelProperty("证明资料列表")
+    private List<String> certificationImgs;
+
+    /**
+     * 创建时间
+     */
+    @ApiModelProperty("创建时间")
+    private LocalDateTime createTime;
+
+    /**
+     * 更新时间
+     */
+    @ApiModelProperty("更新时间")
+    private LocalDateTime updateTime;
+}

+ 101 - 0
src/main/java/com/jzo2o/api/customer/dto/response/ServeProviderResDTO.java

@@ -0,0 +1,101 @@
+package com.jzo2o.api.customer.dto.response;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 服务人员/机构响应数据
+ * </p>
+ *
+ * @author itcast
+ * @since 2023-07-17
+ */
+@Data
+@ApiModel("服务人员或机构响应数据")
+public class ServeProviderResDTO {
+
+    /**
+     * 主键
+     */
+    @ApiModelProperty("服务人员/机构id")
+    private Long id;
+
+    /**
+     * 编号
+     */
+    @ApiModelProperty("编号")
+    private String code;
+
+    /**
+     * 类型,2:服务人员,3:服务机构
+     */
+    @ApiModelProperty("类型,2:服务人员,3:服务机构")
+    private Integer type;
+
+    /**
+     * 姓名
+     */
+    @ApiModelProperty("姓名")
+    private String name;
+
+    /**
+     * 头像
+     */
+    @ApiModelProperty("头像")
+    private String avatar;
+
+    /**
+     * 电话
+     */
+    @ApiModelProperty("电话")
+    private String phone;
+
+    /**
+     * 状态,0:正常,1:冻结
+     */
+    @ApiModelProperty("状态,0:正常,1:冻结")
+    private Integer status;
+
+    /**
+     * 认证状态,0:未认证,1:认证中,2:认证通过。3:认证失败
+     */
+    @ApiModelProperty("认证状态,0:未认证,1:认证中,2:认证通过。3:认证失败")
+    private Integer verifyStatus;
+
+    @ApiModelProperty("经度")
+    private Double lon;
+
+    @ApiModelProperty("纬度")
+    private Double lat;
+
+    @ApiModelProperty("所在城市编码")
+    private String cityCode;
+
+    @ApiModelProperty("设置状态,0:未完成首次设置,1:已完成首次设置")
+    private Integer settingsStatus;
+
+    @ApiModelProperty("当前是否可以接单")
+    private Boolean canPickUp;
+
+    /**
+     * 账号冻结原因
+     */
+    @ApiModelProperty("账号冻结原因")
+    private String accountLockReason;
+
+    /**
+     * 创建时间
+     */
+    @ApiModelProperty("创建时间")
+    private LocalDateTime createTime;
+
+    /**
+     * 更新时间
+     */
+    @ApiModelProperty("更新时间")
+    private LocalDateTime updateTime;
+}

+ 16 - 0
src/main/java/com/jzo2o/api/customer/dto/response/ServeProviderSimpleResDTO.java

@@ -0,0 +1,16 @@
+package com.jzo2o.api.customer.dto.response;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel("服务人员或机构简单信息模型")
+public class ServeProviderSimpleResDTO {
+    @ApiModelProperty("服务人员或机构id")
+    private Long id;
+    @ApiModelProperty("服务人员姓名")
+    private String name;
+    @ApiModelProperty("服务人员或机构手机号")
+    private String phone;
+}

+ 46 - 0
src/main/java/com/jzo2o/api/foundations/RegionApi.java

@@ -0,0 +1,46 @@
+package com.jzo2o.api.foundations;
+
+import com.jzo2o.api.foundations.dto.response.ConfigRegionInnerResDTO;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import java.util.List;
+
+/**
+ * 内部接口 - 区域相关接口
+ *
+ * @author itcast
+ */
+@FeignClient(contextId = "jzo2o-foundations", value = "jzo2o-foundations", path = "/foundations/inner/region")
+public interface RegionApi {
+
+    /**
+     * 获取所有区域的业务调度配置
+     *
+     * @return 业务调度配置
+     */
+    @GetMapping("/findAllConfigRegion")
+    List<ConfigRegionInnerResDTO> findAll();
+
+    /**
+     * 根据区域id获取区域调度配置
+     *
+     * @param id 区域id
+     * @return 区域调度配置
+     */
+    @GetMapping("/findConfigRegionById/{id}")
+    ConfigRegionInnerResDTO findConfigRegionById(@PathVariable("id") Long id);
+
+    /**
+     * 根据城市编码获取区域配置
+     *
+     * @param cityCode 城市编码
+     * @return
+     */
+    @GetMapping("/findConfigRegionByCityCode")
+    ConfigRegionInnerResDTO findConfigRegionByCityCode(@RequestParam("cityCode") String cityCode);
+
+
+}

+ 17 - 0
src/main/java/com/jzo2o/api/foundations/ServeApi.java

@@ -0,0 +1,17 @@
+package com.jzo2o.api.foundations;
+
+import com.jzo2o.api.foundations.dto.response.ServeAggregationResDTO;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import java.util.List;
+
+@FeignClient(contextId = "jzo2o-foundations", value = "jzo2o-foundations", path = "/foundations/inner/serve")
+public interface ServeApi {
+
+    @GetMapping("/{id}")
+    ServeAggregationResDTO findById(@PathVariable("id") Long id);
+
+}

+ 34 - 0
src/main/java/com/jzo2o/api/foundations/ServeItemApi.java

@@ -0,0 +1,34 @@
+package com.jzo2o.api.foundations;
+
+import com.jzo2o.api.foundations.dto.response.ServeItemResDTO;
+import com.jzo2o.api.foundations.dto.response.ServeItemSimpleResDTO;
+import com.jzo2o.api.foundations.dto.response.ServeTypeCategoryResDTO;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import java.util.List;
+
+/**
+ * 内部接口 - 服务项相关接口
+ *
+ * @author itcast
+ */
+@FeignClient(contextId = "jzo2o-foundations", value = "jzo2o-foundations", path = "/foundations/inner/serve-item")
+public interface ServeItemApi {
+
+    @GetMapping("/{id}")
+    ServeItemResDTO findById(@PathVariable("id") Long id);
+
+    @GetMapping("/listByIds")
+    List<ServeItemSimpleResDTO> listByIds(@RequestParam("ids") List<Long> ids);
+
+    /**
+     * 查询启用状态的服务项目录
+     *
+     * @return 服务项目录
+     */
+    @GetMapping("/queryActiveServeItemCategory")
+    List<ServeTypeCategoryResDTO> queryActiveServeItemCategory();
+}

+ 20 - 0
src/main/java/com/jzo2o/api/foundations/ServeTypeApi.java

@@ -0,0 +1,20 @@
+package com.jzo2o.api.foundations;
+
+import com.jzo2o.api.foundations.dto.response.ServeTypeSimpleResDTO;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import java.util.List;
+
+/**
+ * 内部接口 - 服务类型相关接口
+ *
+ * @author itcast
+ */
+@FeignClient(contextId = "jzo2o-foundations", value = "jzo2o-foundations", path = "/foundations/inner/serve-type")
+public interface ServeTypeApi {
+
+    @GetMapping("/listByIds")
+    List<ServeTypeSimpleResDTO> listByIds(@RequestParam("ids") List<Long> ids);
+}

+ 28 - 0
src/main/java/com/jzo2o/api/foundations/dto/ServeItemSimpleDTO.java

@@ -0,0 +1,28 @@
+package com.jzo2o.api.foundations.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 服务项简略响应值
+ *
+ * @author itcast
+ * @create 2023/7/4 11:53
+ **/
+@Data
+@ApiModel("服务项简略响应值")
+public class ServeItemSimpleDTO {
+
+    /**
+     * 主键
+     */
+    @ApiModelProperty("主键")
+    private Long serveItemId;
+
+    /**
+     * 服务名称
+     */
+    @ApiModelProperty("服务名称")
+    private String serveItemName;
+}

+ 48 - 0
src/main/java/com/jzo2o/api/foundations/dto/request/RegionBusinessSettingReqDTO.java

@@ -0,0 +1,48 @@
+package com.jzo2o.api.foundations.dto.request;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel("区域业务设置请求DTO")
+public class RegionBusinessSettingReqDTO {
+    @ApiModelProperty("区域id")
+    private Long id;
+    /**
+     * 机构佣金比例
+     */
+    @ApiModelProperty("机构佣金人员比例")
+    private Double institutionStaffCommissionRate;
+
+    /**
+     * 服务人员佣金比例
+     */
+    @ApiModelProperty("服务人员佣金比例")
+    private Double serveStaffCommissionRate;
+
+    /**
+     * 机构人员服务范围距离
+     */
+    @ApiModelProperty("机构人员服务范围距离")
+    private Double institutionStaffServeDistance;
+
+    /**
+     * 服务人员服务范围距离
+     */
+    @ApiModelProperty("服务人员服务范围距离")
+    private Double serveStaffServeDistance;
+
+    /**
+     * 派单间距时间
+     */
+    @ApiModelProperty("抢单转派单时间,单位分钟")
+    private Integer dispatchOrdersDuration;
+
+    /**
+     * 未接单用户提醒间隔时间
+     */
+    @ApiModelProperty("未接单用户提醒间隔时间")
+    private Integer noPickUpOrdersWarnDuration;
+
+}

+ 68 - 0
src/main/java/com/jzo2o/api/foundations/dto/response/ConfigRegionInnerResDTO.java

@@ -0,0 +1,68 @@
+package com.jzo2o.api.foundations.dto.response;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@ApiModel("区域配置")
+@Data
+public class ConfigRegionInnerResDTO {
+    /**
+     * 区域id
+     */
+    @ApiModelProperty(value = "区域id",required = true)
+    private Long id;
+    /**
+     * 城市编码
+     */
+    @ApiModelProperty(value = "区域编码",required = true)
+    private String cityCode;
+
+    /**
+     * (个体)接单量限制
+     */
+    @ApiModelProperty(value = "区域个人接单数量限制(单位个)",required = true)
+    private Integer staffReceiveOrderMax;
+
+    /**
+     * (企业)接单量限制值
+     */
+    @ApiModelProperty(value = "区域企业接单数量限制,(单位个)",required = true)
+    private Integer institutionReceiveOrderMax;
+
+    /**
+     * (个体)服务范围半径
+     */
+    @ApiModelProperty(value = "个人服务半径,(单位km)",required = true)
+    private Integer staffServeRadius;
+
+    /**
+     * (企业)服务范围半径
+     */
+    @ApiModelProperty(value = "企业服务半径(单位km)",required = true)
+    private Integer institutionServeRadius;
+
+    /**
+     * 分流间隔(单位分钟),即当前时间距离服务开始时间的间隔
+     */
+    @ApiModelProperty(value = "分流间隔(单位分钟),即当前时间距离服务开始时间的间隔",required = true)
+    private Integer diversionInterval;
+
+    /**
+     * 抢单超时时间间隔(单位分钟),从支付成功进入抢单后超过当前时间抢单派单同步进行
+     */
+    @ApiModelProperty(value = "抢单超时时间间隔(单位分钟)",required = true)
+    private Integer seizeTimeoutInterval;
+
+    /**
+     * 派单策略,1:距离优先策略,2:评分优先策略,3:接单量优先策略
+     */
+    @ApiModelProperty(value = "派单策略,1:距离优先策略,2:评分优先策略,3:接单量优先策略",required = true)
+    private Integer dispatchStrategy;
+
+    /**
+     * 派单每轮时间间隔,(单位s)
+     */
+    @ApiModelProperty(value = "派单每轮时间间隔,(单位s)",required = true)
+    private Integer dispatchPerRoundInterval;
+}

+ 54 - 0
src/main/java/com/jzo2o/api/foundations/dto/response/RegionServeInfoResDTO.java

@@ -0,0 +1,54 @@
+package com.jzo2o.api.foundations.dto.response;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author 86188
+ */
+@ApiModel("区域服务信息")
+@Data
+public class RegionServeInfoResDTO {
+    /**
+     * 机构佣金比例
+     */
+    @ApiModelProperty("机构佣金人员比例")
+    private Double institutionStaffCommissionRate;
+
+    /**
+     * 服务人员佣金比例
+     */
+    @ApiModelProperty("服务人员佣金比例")
+    private Double serveStaffCommissionRate;
+
+    /**
+     * 机构人员服务范围距离
+     */
+    @ApiModelProperty("机构人员服务范围距离")
+    private Double institutionStaffServeDistance;
+
+    /**
+     * 服务人员服务范围距离
+     */
+    @ApiModelProperty("服务人员服务范围距离")
+    private Double serveStaffServeDistance;
+
+    /**
+     * 派单间距时间
+     */
+    @ApiModelProperty("抢单转派单时间,单位分钟")
+    private Integer dispatchOrdersDuration;
+
+    @ApiModelProperty("抢单超时时间")
+    private Integer seizeTimeoutMinutes;
+
+    @ApiModelProperty("派单策略,1:距离优先策略,2:评分优先策略,3:最少接单优先策略")
+    private Integer dispatchStrategy;
+
+    /**
+     * 未接单用户提醒间隔时间
+     */
+    @ApiModelProperty("未接单用户提醒间隔时间")
+    private Integer noPickUpOrdersWarnDuration;
+}

+ 33 - 0
src/main/java/com/jzo2o/api/foundations/dto/response/RegionSimpleResDTO.java

@@ -0,0 +1,33 @@
+package com.jzo2o.api.foundations.dto.response;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 区域简略响应值
+ *
+ * @author itcast
+ * @create 2023/7/4 11:53
+ **/
+@Data
+@ApiModel("区域简略响应值")
+public class RegionSimpleResDTO {
+    /**
+     * 主键
+     */
+    @ApiModelProperty("主键")
+    private Long id;
+
+    /**
+     * 区域名称
+     */
+    @ApiModelProperty("区域名称")
+    private String name;
+
+    /**
+     * 城市编码
+     */
+    @ApiModelProperty("城市编码")
+    private String cityCode;
+}

+ 98 - 0
src/main/java/com/jzo2o/api/foundations/dto/response/ServeAggregationResDTO.java

@@ -0,0 +1,98 @@
+package com.jzo2o.api.foundations.dto.response;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class ServeAggregationResDTO {
+    /**
+     * 服务id
+     */
+    private Long id;
+
+    /**
+     * 服务项名称
+     */
+    private String serveItemName;
+
+    /**
+     * 服务类型id
+     */
+    private Long serveTypeId;
+
+    /**
+     * 服务项id
+     */
+    private Long serveItemId;
+
+    /**
+     * 售卖状态,0:草稿,1下架,2上架
+     */
+    private Integer saleStatus;
+
+    /**
+     * 城市代码
+     */
+    private String cityCode;
+
+    /**
+     * 价格
+     */
+    private BigDecimal price;
+
+    /**
+     * 是否是热门
+     */
+    private Integer isHot;
+
+    /**
+     * 更新为热门的时间戳
+     */
+    private Long hotTimeStamp;
+
+    /**
+     * 服务项排序字段
+     */
+    private Integer serveItemSortNum;
+
+    /**
+     * 服务类型排序字段
+     */
+    private Integer serveTypeSortNum;
+
+    /**
+     * 服务类型名称
+     */
+    private String serveTypeName;
+
+    /**
+     * 服务类型图片
+     */
+    private String serveTypeImg;
+
+    /**
+     * 服务类型icon
+     */
+    private String serveTypeIcon;
+
+    /**
+     * 服务收费价格单位
+     */
+    private Integer unit;
+
+    /**
+     * 服务详情图片
+     */
+    private String detailImg;
+
+    /**
+     * 服务项图片
+     */
+    private String serveItemImg;
+
+    /**
+     * 服务图标
+     */
+    private String serveItemIcon;
+}

+ 109 - 0
src/main/java/com/jzo2o/api/foundations/dto/response/ServeItemResDTO.java

@@ -0,0 +1,109 @@
+package com.jzo2o.api.foundations.dto.response;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+/**
+ * 服务项响应值
+ *
+ * @author itcast
+ * @create 2023/7/4 11:53
+ **/
+@Data
+@ApiModel("服务项响应值")
+public class ServeItemResDTO {
+
+    /**
+     * 主键
+     */
+    @ApiModelProperty("主键")
+    private Long id;
+
+    /**
+     * 服务编码
+     */
+    @ApiModelProperty("服务编码")
+    private String code;
+
+    /**
+     * 服务类型id
+     */
+    @ApiModelProperty("服务类型id")
+    private Long serveTypeId;
+
+    /**
+     * 服务类型名称
+     */
+    @ApiModelProperty("服务类型名称")
+    private String serveTypeName;
+
+    /**
+     * 服务名称
+     */
+    @ApiModelProperty("服务名称")
+    private String name;
+
+    /**
+     * 服务图标
+     */
+    @ApiModelProperty("服务图标")
+    private String serveItemIcon;
+
+    /**
+     * 服务图片
+     */
+    @ApiModelProperty("服务图片")
+    private String img;
+
+    /**
+     * 服务单位
+     */
+    @ApiModelProperty("服务单位")
+    private Integer unit;
+
+    /**
+     * 服务描述
+     */
+    @ApiModelProperty("服务描述")
+    private String description;
+
+    /**
+     * 服务详图
+     */
+    @ApiModelProperty("服务详图")
+    private String detailImg;
+
+    /**
+     * 参考价格
+     */
+    @ApiModelProperty("参考价格")
+    private BigDecimal referencePrice;
+
+    /**
+     * 排序字段
+     */
+    @ApiModelProperty("排序字段")
+    private Integer sortNum;
+
+    /**
+     * 活动状态,0:草稿,1禁用,2启用
+     */
+    @ApiModelProperty("活动状态,0:草稿,1禁用,2启用")
+    private Integer activeStatus;
+
+    /**
+     * 创建时间
+     */
+    @ApiModelProperty("创建时间")
+    private LocalDateTime createTime;
+
+    /**
+     * 更新时间
+     */
+    @ApiModelProperty("更新时间")
+    private LocalDateTime updateTime;
+}

+ 28 - 0
src/main/java/com/jzo2o/api/foundations/dto/response/ServeItemSimpleResDTO.java

@@ -0,0 +1,28 @@
+package com.jzo2o.api.foundations.dto.response;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 服务项简略响应值
+ *
+ * @author itcast
+ * @create 2023/7/4 11:53
+ **/
+@Data
+@ApiModel("服务项简略响应值")
+public class ServeItemSimpleResDTO {
+
+    /**
+     * 主键
+     */
+    @ApiModelProperty("主键")
+    private Long id;
+
+    /**
+     * 服务名称
+     */
+    @ApiModelProperty("服务名称")
+    private String name;
+}

+ 36 - 0
src/main/java/com/jzo2o/api/foundations/dto/response/ServeTypeCategoryResDTO.java

@@ -0,0 +1,36 @@
+package com.jzo2o.api.foundations.dto.response;
+
+import com.jzo2o.api.foundations.dto.ServeItemSimpleDTO;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 服务技能目录响应结果
+ *
+ * @author itcast
+ * @create 2023/7/18 19:16
+ **/
+@Data
+@ApiModel("服务技能目录响应结果")
+public class ServeTypeCategoryResDTO {
+    /**
+     * 服务类型d
+     */
+    @ApiModelProperty("服务类型id")
+    private Long serveTypeId;
+
+    /**
+     * 服务类型名称
+     */
+    @ApiModelProperty("服务类型名称")
+    private String serveTypeName;
+
+    /**
+     * 服务项列表
+     */
+    @ApiModelProperty("服务项列表")
+    private List<ServeItemSimpleDTO> serveItemList;
+}

+ 27 - 0
src/main/java/com/jzo2o/api/foundations/dto/response/ServeTypeSimpleResDTO.java

@@ -0,0 +1,27 @@
+package com.jzo2o.api.foundations.dto.response;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 服务类型简略响应值
+ *
+ * @author itcast
+ * @create 2023/7/4 11:53
+ **/
+@Data
+@ApiModel("服务类型简略响应值")
+public class ServeTypeSimpleResDTO {
+    /**
+     * 主键
+     */
+    @ApiModelProperty("主键")
+    private Long id;
+
+    /**
+     * 服务类型名称
+     */
+    @ApiModelProperty("服务类型名称")
+    private String name;
+}

+ 16 - 0
src/main/java/com/jzo2o/api/market/dto/request/CouponUseBackReqDTO.java

@@ -0,0 +1,16 @@
+package com.jzo2o.api.market.dto.request;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@ApiModel("优惠券使用退回请求模型")
+@Data
+public class CouponUseBackReqDTO {
+    @ApiModelProperty("优惠券id")
+    private Long id;
+    @ApiModelProperty("订单id")
+    private Long ordersId;
+    @ApiModelProperty("用户id")
+    private Long userId;
+}

+ 18 - 0
src/main/java/com/jzo2o/api/market/dto/request/CouponUseReqDTO.java

@@ -0,0 +1,18 @@
+package com.jzo2o.api.market.dto.request;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+@ApiModel("优惠券使用模型")
+public class CouponUseReqDTO {
+    @ApiModelProperty("优惠券id")
+    private Long id;
+    @ApiModelProperty("订单id")
+    private Long ordersId;
+    @ApiModelProperty("总金额")
+    private BigDecimal totalAmount;
+}

+ 54 - 0
src/main/java/com/jzo2o/api/market/dto/response/AvailableCouponsResDTO.java

@@ -0,0 +1,54 @@
+package com.jzo2o.api.market.dto.response;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+@Data
+@ApiModel("优惠券信息")
+public class AvailableCouponsResDTO {
+    @ApiModelProperty("优惠券id")
+    private Long id;
+
+    /**
+     * 优惠券名称
+     */
+    @ApiModelProperty(value = "活动名称",required = true)
+    private String name;
+
+    /**
+     * 活动id
+     */
+    @ApiModelProperty(value = "活动id",required = true)
+    private Long activityId;
+
+    @ApiModelProperty(value = "使用类型,1:满减,2:折扣",required = true)
+    private Integer type;
+
+    /**
+     * 折扣
+     */
+    @ApiModelProperty(value = "折扣",required = false)
+    private Integer discountRate;
+
+    /**
+     * 优惠金额
+     */
+    @ApiModelProperty(value = "优惠金额",required = false)
+    private BigDecimal discountAmount;
+
+    /**
+     * 满减金额
+     */
+    @ApiModelProperty(value = "满减条件,0:表示无门槛",required = true)
+    private BigDecimal amountCondition;
+
+    /**
+     * 有效期
+     */
+    @ApiModelProperty("优惠券过期时间")
+    private LocalDateTime validityTime;
+}

+ 14 - 0
src/main/java/com/jzo2o/api/market/dto/response/CouponUseResDTO.java

@@ -0,0 +1,14 @@
+package com.jzo2o.api.market.dto.response;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+@ApiModel("优惠券使用返回信息模型")
+public class CouponUseResDTO {
+    @ApiModelProperty("优惠金额")
+    private BigDecimal discountAmount;
+}

+ 29 - 0
src/main/java/com/jzo2o/api/operation/utils/RegionUtils.java

@@ -0,0 +1,29 @@
+package com.jzo2o.api.operation.utils;
+
+import com.jzo2o.common.constants.UserType;
+
+import java.math.BigDecimal;
+
+/**
+ * 区域相关的工具
+ */
+public class RegionUtils {
+
+    /**
+     * 根据用户计算拥挤比例
+     *
+     * @param userType
+     * @param institutionStaffCommissionRate
+     * @param serveStaffCommissionRate
+     * @return
+     */
+    public static BigDecimal calculateCommissionRate(Integer userType, Double institutionStaffCommissionRate, Double serveStaffCommissionRate) {
+        if (userType.equals(UserType.INSTITUTION) && institutionStaffCommissionRate != null) {
+            return new BigDecimal(institutionStaffCommissionRate / 100);
+        } else if (userType.equals(UserType.WORKER) && serveStaffCommissionRate != null) {
+            return new BigDecimal(serveStaffCommissionRate / 100);
+        } else {
+            return BigDecimal.ZERO;
+        }
+    }
+}

+ 47 - 0
src/main/java/com/jzo2o/api/orders/OrdersApi.java

@@ -0,0 +1,47 @@
+package com.jzo2o.api.orders;
+
+import com.jzo2o.api.orders.dto.response.OrderResDTO;
+import com.jzo2o.utils.MyQueryMapEncoder;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import java.util.List;
+
+/**
+ * 内部接口 - 订单相关接口
+ *
+ * @author itcast
+ */
+@FeignClient(contextId = "jzo2o-orders-manager", value = "jzo2o-orders-manager", path = "/orders-manager/inner/orders", configuration = MyQueryMapEncoder.class)
+public interface OrdersApi {
+
+
+    /**
+     * 根据id查询订单详情
+     *
+     * @param id 订单id
+     * @return 订单详情
+     */
+    @GetMapping("/{id}")
+    OrderResDTO queryById(@PathVariable("id") Long id);
+
+    /**
+     * 根据订单id列表批量查询
+     *
+     * @param ids 订单id列表
+     * @return 订单列表
+     */
+    @GetMapping("queryByIds")
+    List<OrderResDTO> queryByIds(@RequestParam("ids") List<Long> ids);
+
+    /**
+     * 根据订单id评价
+     *
+     * @param id 订单id
+     */
+    @PutMapping("evaluate/{id}")
+    void evaluate(@PathVariable("id") Long id);
+}

+ 28 - 0
src/main/java/com/jzo2o/api/orders/OrdersHistoryApi.java

@@ -0,0 +1,28 @@
+package com.jzo2o.api.orders;
+
+import com.jzo2o.utils.MyQueryMapEncoder;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import java.util.List;
+
+@FeignClient(contextId = "jzo2o-orders-history", value = "jzo2o-orders-history", path = "/orders-history/inner/orders", configuration = MyQueryMapEncoder.class)
+public interface OrdersHistoryApi {
+
+    /**
+     * 批量获取已经同步的历史订单id列表
+     * @param ids 查询的订单id列表
+     * @return 已经同步完成的订单id列表
+     */
+    @GetMapping("/batchGetSyncedOrdersIds")
+    List<Long> batchGetSyncedOrdersIds(@RequestParam("ids") List<Long> ids);
+
+    /**
+     * 批量获取已经同步的历史服务单id列表
+     * @param ids 查询的服务单id列表
+     * @return 已经同步完成的服务单id列表
+     */
+    @GetMapping("/batchGetSyncedOrdersServeIds")
+    List<Long> batchGetSyncedOrdersServeIds(@RequestParam("ids") List<Long> ids);
+}

+ 23 - 0
src/main/java/com/jzo2o/api/orders/OrdersSeizeApi.java

@@ -0,0 +1,23 @@
+package com.jzo2o.api.orders;
+
+import com.jzo2o.api.orders.dto.request.OrderSeizeReqDTO;
+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.RequestBody;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import java.util.List;
+
+@FeignClient(contextId = "jzo2o-orders-seize", value = "jzo2o-orders-seize", path = "/orders-seize/inner/seize")
+public interface OrdersSeizeApi {
+
+    /**
+     * 机器抢单
+     *
+     * @param orderSeizeReqDTO
+     */
+    @PostMapping("")
+    void machineSeize(@RequestBody OrderSeizeReqDTO orderSeizeReqDTO);
+
+}

+ 36 - 0
src/main/java/com/jzo2o/api/orders/OrdersServeApi.java

@@ -0,0 +1,36 @@
+package com.jzo2o.api.orders;
+
+import com.jzo2o.api.orders.dto.response.InstitutionStaffServeCountResDTO;
+import com.jzo2o.api.orders.dto.response.ServeProviderIdResDTO;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import java.util.List;
+import java.util.Map;
+
+@FeignClient(contextId = "jzo2o-orders-manager", value = "jzo2o-orders-manager", path = "/orders-manager/inner/orders-serve")
+public interface OrdersServeApi {
+
+    /**
+     * 根据订单id查询服务人员/机构id
+     *
+     * @param id 订单id
+     * @return 服务人员/机构id
+     */
+    @GetMapping("/queryServeProviderIdByOrderId/{id}")
+    ServeProviderIdResDTO queryServeProviderIdByOrderId(@PathVariable("id") Long id);
+
+    /**
+     * 根据机构服务人员id查询服务数量
+     *
+     * @param institutionStaffId 机构服务人员id
+     * @return 服务数量
+     */
+    @GetMapping("/countByInstitutionStaffId")
+    InstitutionStaffServeCountResDTO countByInstitutionStaffId(@RequestParam("institutionStaffId") Long institutionStaffId);
+}

+ 22 - 0
src/main/java/com/jzo2o/api/orders/dto/request/OrderCancelReqDTO.java

@@ -0,0 +1,22 @@
+package com.jzo2o.api.orders.dto.request;
+
+import lombok.Data;
+
+/**
+ * 订单取消请求
+ *
+ * @author itcast
+ * @create 2023/8/7 08:59
+ **/
+@Data
+public class OrderCancelReqDTO {
+    /**
+     * 订单id
+     */
+    private Long id;
+
+    /**
+     * 取消/退款原因
+     */
+    private String cancelReason;
+}

+ 64 - 0
src/main/java/com/jzo2o/api/orders/dto/request/OrderPageQueryReqDTO.java

@@ -0,0 +1,64 @@
+package com.jzo2o.api.orders.dto.request;
+
+import com.jzo2o.common.model.dto.PageQueryDTO;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * 订单分页查询请求
+ *
+ * @author itcast
+ * @create 2023/7/20 21:17
+ **/
+@Data
+@ApiModel("订单分页查询请求")
+public class OrderPageQueryReqDTO extends PageQueryDTO {
+    /**
+     * 订单状态,0:待支付,100:派单中,200:待服务,300:服务中,400:待评价,500:订单完成,600:订单取消
+     */
+    @ApiModelProperty("订单状态,0:待支付,100:派单中,200:待服务,300:服务中,400:待评价,500:订单完成,600:订单取消")
+    private Integer ordersStatus;
+
+    /**
+     * 用户id
+     */
+    @ApiModelProperty("用户id")
+    private Long userId;
+
+    /**
+     * 订单id
+     */
+    @ApiModelProperty("订单id")
+    private Long ordersId;
+
+    /**
+     * 客户电话
+     */
+    @ApiModelProperty("客户电话")
+    private String contactsPhone;
+
+    /**
+     * 最小创建时间
+     */
+    @ApiModelProperty("最小创建时间")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime minCreateTime;
+
+    /**
+     * 最大创建时间
+     */
+    @ApiModelProperty("最大创建时间")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime maxCreateTime;
+
+    /**
+     * 订单id列表
+     */
+    @ApiModelProperty("订单id列表")
+    private List<Long> ordersIdList;
+}

+ 16 - 0
src/main/java/com/jzo2o/api/orders/dto/request/OrderSeizeReqDTO.java

@@ -0,0 +1,16 @@
+package com.jzo2o.api.orders.dto.request;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel("抢单模型")
+public class OrderSeizeReqDTO {
+    @ApiModelProperty("抢单id")
+    private Long seizeId;
+    @ApiModelProperty("服务人员或机构id")
+    private Long serveProviderId;
+    @ApiModelProperty("服务人员或机构类型,2:服务人员,3:机构")
+    private Integer serveProviderType;
+}

+ 18 - 0
src/main/java/com/jzo2o/api/orders/dto/response/InstitutionStaffServeCountResDTO.java

@@ -0,0 +1,18 @@
+package com.jzo2o.api.orders.dto.response;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * 机构服务人员服务次数
+ *
+ * @author itcast
+ * @create 2023/9/20 10:38
+ **/
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class InstitutionStaffServeCountResDTO {
+    private Integer count;
+}

+ 200 - 0
src/main/java/com/jzo2o/api/orders/dto/response/OrderAggregationResDTO.java

@@ -0,0 +1,200 @@
+package com.jzo2o.api.orders.dto.response;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * 订单聚合响应数据
+ *
+ * @author itcast
+ * @create 2023/7/20 21:19
+ **/
+@Data
+@ApiModel("订单聚合响应数据")
+public class OrderAggregationResDTO {
+    /**
+     * 订单id
+     */
+    @ApiModelProperty("订单id")
+    private Long id;
+
+    /**
+     * 订单编码
+     */
+    @Deprecated
+    @ApiModelProperty("订单编码")
+    private String ordersCode;
+
+    /**
+     * 服务项id
+     */
+    @ApiModelProperty("服务项id")
+    private Long serveItemId;
+
+    /**
+     * 服务项名称
+     */
+    @ApiModelProperty("服务项名称")
+    private String serveItemName;
+
+    /**
+     * 服务单位
+     */
+    @ApiModelProperty("服务单位")
+    private Integer unit;
+
+    /**
+     * 服务id
+     */
+    @ApiModelProperty("服务id")
+    private Long serveId;
+
+    /**
+     * 订单状态,0:待支付,100:派单中,200:待服务,300:服务中,400:待评价,500:订单完成,600:订单取消,700已退单
+     */
+    @ApiModelProperty("订单状态,0:待支付,100:派单中,200:待服务,300:服务中,400:待评价,500:订单完成,600:订单取消,700已退单")
+    private Integer ordersStatus;
+
+    @ApiModelProperty("支付状态,0:待支付,1:支付成功")
+    private Integer payStatus;
+
+    @ApiModelProperty("退款状态,0:发起退款,1:退款中,2:退款成功  3:退款失败")
+    private Integer refundStatus;
+    /**
+     * 单价
+     */
+    @ApiModelProperty("单价")
+    private BigDecimal price;
+
+    /**
+     * 购买数量
+     */
+    @ApiModelProperty("购买数量")
+    private Integer purNum;
+
+    /**
+     * 实际支付金额
+     */
+    @ApiModelProperty("实际支付金额")
+    private BigDecimal realPayAmount;
+
+    /**
+     * 服务详细地址
+     */
+    @ApiModelProperty("服务详细地址")
+    private String serveAddress;
+
+    /**
+     * 联系人手机号
+     */
+    @ApiModelProperty("联系人手机号")
+    private String contactsPhone;
+
+    /**
+     * 联系人姓名
+     */
+    @ApiModelProperty("联系人姓名")
+    private String contactsName;
+
+    /**
+     * 服务人id,机构接单则该id为机构下属服务人员
+     */
+    @ApiModelProperty("服务人id,机构接单则该id为机构下属服务人员")
+    private String serverId;
+
+    /**
+     * 服务人姓名
+     */
+    @ApiModelProperty("服务人姓名")
+    private String serverName;
+
+    /**
+     * 服务开始时间
+     */
+    @ApiModelProperty("服务开始时间")
+    private LocalDateTime serveStartTime;
+
+    /**
+     * 服务结束时间
+     */
+    @ApiModelProperty("服务结束时间")
+    private LocalDateTime serveEndTime;
+
+    /**
+     * 服务实际开始时间
+     */
+    @ApiModelProperty("服务实际开始时间")
+    private LocalDateTime realServeStartTime;
+
+    /**
+     * 服务实际结束时间
+     */
+    @ApiModelProperty("服务实际结束时间")
+    private LocalDateTime realServeEndTime;
+
+    /**
+     * 服务前照片
+     */
+    @ApiModelProperty("服务前照片")
+    private List<String> serveBeforeImgs;
+
+    /**
+     * 服务后照片
+     */
+    @ApiModelProperty("服务后照片")
+    private List<String> serveAfterImgs;
+
+    /**
+     * 服务前说明
+     */
+    @ApiModelProperty("服务前说明")
+    private String serveBeforeIllustrate;
+
+    /**
+     * 服务后说明
+     */
+    @ApiModelProperty("服务后说明")
+    private String serveAfterIllustrate;
+
+    /**
+     * 创建时间
+     */
+    @ApiModelProperty("创建时间")
+    private LocalDateTime createTime;
+
+    /**
+     * 更新时间
+     */
+    @ApiModelProperty("更新时间")
+    private LocalDateTime updateTime;
+
+    /**
+     * 订单进度条
+     */
+    @ApiModelProperty("订单进度条")
+    private List<OrderProgress> orderProgressList;
+
+    @Data
+    @NoArgsConstructor
+    @AllArgsConstructor
+    public static class OrderProgress {
+        /**
+         * 订单状态,0:待支付,100:派单中,200:待服务,300:服务中,400:待评价,500:订单完成,600:订单取消,700已退单
+         */
+        @ApiModelProperty("订单状态,0:待支付,100:派单中,200:待服务,300:服务中,400:待评价,500:订单完成,600:订单取消,700已退单")
+        private Integer status;
+
+        /**
+         * 时间
+         */
+        @ApiModelProperty("时间")
+        private LocalDateTime dateTime;
+    }
+}

+ 191 - 0
src/main/java/com/jzo2o/api/orders/dto/response/OrderResDTO.java

@@ -0,0 +1,191 @@
+package com.jzo2o.api.orders.dto.response;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+/**
+ * 订单响应数据
+ *
+ * @author itcast
+ * @create 2023/7/20 21:19
+ **/
+@Data
+@ApiModel("订单响应数据")
+public class OrderResDTO {
+    /**
+     * 订单id
+     */
+    @ApiModelProperty("订单id")
+    private Long id;
+
+    /**
+     * 订单编码
+     */
+    @Deprecated
+    @ApiModelProperty("订单编码")
+    private String ordersCode;
+
+    /**
+     * 服务类型id
+     */
+    @ApiModelProperty("服务类型id")
+    private Long serveTypeId;
+
+    /**
+     * 服务类型名称
+     */
+    @ApiModelProperty("服务类型名称")
+    private String serveTypeName;
+
+    /**
+     * 服务项id
+     */
+    @ApiModelProperty("服务项id")
+    private Long serveItemId;
+
+    /**
+     * 服务项名称
+     */
+    @ApiModelProperty("服务项名称")
+    private String serveItemName;
+
+    /**
+     * 服务项图片
+     */
+    @ApiModelProperty("服务项图片")
+    private String serveItemImg;
+
+    /**
+     * 服务单位
+     */
+    @ApiModelProperty("服务单位")
+    private Integer unit;
+
+    /**
+     * 服务id
+     */
+    @ApiModelProperty("服务id")
+    private Long serveId;
+
+    /**
+     * 订单状态,0:待支付,100:派单中,200:待服务,300:服务中,400:待评价,500:订单完成,600:订单取消
+     */
+    @ApiModelProperty("订单状态,0:待支付,100:派单中,200:待服务,300:服务中,400:待评价,500:订单完成,600:订单取消")
+    private Integer ordersStatus;
+
+    @ApiModelProperty("支付状态,0:待支付,1:支付成功")
+    private Integer payStatus;
+
+    @ApiModelProperty("退款状态,0:发起退款,1:退款中,2:退款成功  3:退款失败")
+    private Integer refundStatus;
+    /**
+     * 评价状态,0:待评价,1:已评价
+     */
+    @ApiModelProperty("评价状态,0:待评价,1:已评价")
+    private Integer evaluationStatus;
+    /**
+     * 单价
+     */
+    @ApiModelProperty("单价")
+    private BigDecimal price;
+
+    /**
+     * 购买数量
+     */
+    @ApiModelProperty("购买数量")
+    private Integer purNum;
+
+    /**
+     * 实际支付金额
+     */
+    @ApiModelProperty("实际支付金额")
+    private BigDecimal realPayAmount;
+
+    /**
+     * 服务详细地址
+     */
+    @ApiModelProperty("服务详细地址")
+    private String serveAddress;
+
+    /**
+     * 联系人手机号
+     */
+    @ApiModelProperty("联系人手机号")
+    private String contactsPhone;
+
+    /**
+     * 联系人姓名
+     */
+    @ApiModelProperty("联系人姓名")
+    private String contactsName;
+
+    /**
+     * 服务人id,机构接单则该id为机构下属服务人员
+     */
+    @ApiModelProperty("服务人id,机构接单则该id为机构下属服务人员")
+    private Long serverId;
+
+    /**
+     * 服务人姓名
+     */
+    @ApiModelProperty("服务人姓名")
+    private String serverName;
+
+    /**
+     * 支付超时时间,该时间只对待支付有意义
+     */
+    @ApiModelProperty("支付超时时间,该时间只对待支付有意义")
+    private LocalDateTime paymentTimeout;
+
+    /**
+     * 服务开始时间
+     */
+    @ApiModelProperty("服务开始时间")
+    private LocalDateTime serveStartTime;
+
+    /**
+     * 服务结束时间
+     */
+    @ApiModelProperty("服务结束时间")
+    private LocalDateTime serveEndTime;
+
+    /**
+     * 服务实际开始时间
+     */
+    @ApiModelProperty("服务实际开始时间")
+    private LocalDateTime serveActualStartTime;
+
+    /**
+     * 服务实际结束时间
+     */
+    @ApiModelProperty("服务实际结束时间")
+    private LocalDateTime serveActualEndTime;
+
+    /**
+     * 取消/关闭原因
+     */
+    @ApiModelProperty("取消/关闭原因")
+    private String cancelReason;
+
+    /**
+     * 取消时间
+     */
+    @ApiModelProperty("取消/退款时间")
+    private LocalDateTime cancelTime;
+
+    /**
+     * 创建时间
+     */
+    @ApiModelProperty("创建时间")
+    private LocalDateTime createTime;
+
+    /**
+     * 更新时间
+     */
+    @ApiModelProperty("更新时间")
+    private LocalDateTime updateTime;
+}

+ 142 - 0
src/main/java/com/jzo2o/api/orders/dto/response/OrderSimpleResDTO.java

@@ -0,0 +1,142 @@
+package com.jzo2o.api.orders.dto.response;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+/**
+ * 订单响应数据
+ *
+ * @author itcast
+ * @create 2023/7/20 21:19
+ **/
+@Data
+@ApiModel("订单简略响应数据")
+public class OrderSimpleResDTO {
+    /**
+     * 订单id
+     */
+    @ApiModelProperty("订单id")
+    private Long id;
+
+    /**
+     * 订单编码
+     */
+    @ApiModelProperty("订单编码")
+    private String ordersCode;
+
+    /**
+     * 服务项id
+     */
+    @ApiModelProperty("服务项id")
+    private Long serveItemId;
+
+    /**
+     * 服务项名称
+     */
+    @ApiModelProperty("服务项名称")
+    private String serveItemName;
+
+    /**
+     * 服务项图片
+     */
+    @ApiModelProperty("服务项图片")
+    private String serveItemImg;
+
+    /**
+     * 服务id
+     */
+    @ApiModelProperty("服务id")
+    private Long serveId;
+
+    /**
+     * 订单状态,0:待支付,100:派单中,200:待服务,300:服务中,400:待评价,500:订单完成,600:订单取消,700:已关闭
+     */
+    @ApiModelProperty("订单状态,0:待支付,100:派单中,200:待服务,300:服务中,400:待评价,500:订单完成,600:订单取消,700:已关闭")
+    private Integer ordersStatus;
+
+    @ApiModelProperty("支付状态,0:待支付,1:支付成功")
+    private Integer payStatus;
+
+    @ApiModelProperty("退款状态,0:发起退款,1:退款中,2:退款成功  3:退款失败")
+    private Integer refundStatus;
+    /**
+     * 评价状态,0:待评价,1:已评价
+     */
+    @ApiModelProperty("评价状态,0:待评价,1:已评价")
+    private Integer evaluationStatus;
+    /**
+     * 单价
+     */
+    @ApiModelProperty("单价")
+    private BigDecimal price;
+
+    /**
+     * 购买数量
+     */
+    @ApiModelProperty("购买数量")
+    private Integer purNum;
+
+    /**
+     * 订单总金额
+     */
+    @ApiModelProperty("订单总金额")
+    private BigDecimal totalAmount;
+
+    /**
+     * 实际支付金额
+     */
+    @ApiModelProperty("实际支付金额")
+    private BigDecimal realPayAmount;
+
+    /**
+     * 服务详细地址
+     */
+    @ApiModelProperty("服务详细地址")
+    private String serveAddress;
+
+    /**
+     * 联系人手机号
+     */
+    @ApiModelProperty("联系人手机号")
+    private String contactsPhone;
+
+    /**
+     * 联系人姓名
+     */
+    @ApiModelProperty("联系人姓名")
+    private String contactsName;
+
+    /**
+     * 服务开始时间
+     */
+    @ApiModelProperty("服务开始时间")
+    private LocalDateTime serveStartTime;
+
+    /**
+     * 服务结束时间
+     */
+    @ApiModelProperty("服务结束时间")
+    private LocalDateTime serveEndTime;
+
+    /**
+     * 排序字段(serve_start_time秒级时间戳+订单id后6位)
+     */
+    @ApiModelProperty("排序字段(serve_start_time秒级时间戳+订单id后6位)")
+    private Long sortBy;
+
+    /**
+     * 创建时间
+     */
+    @ApiModelProperty("创建时间")
+    private LocalDateTime createTime;
+
+    /**
+     * 更新时间
+     */
+    @ApiModelProperty("更新时间")
+    private LocalDateTime updateTime;
+}

+ 22 - 0
src/main/java/com/jzo2o/api/orders/dto/response/ServeProviderIdResDTO.java

@@ -0,0 +1,22 @@
+package com.jzo2o.api.orders.dto.response;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * 服务人员/机构id
+ *
+ * @author itcast
+ * @create 2023/9/11 19:19
+ **/
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class ServeProviderIdResDTO {
+
+    /**
+     * 服务人员/机构id
+     */
+    private Long serveProviderId;
+}

+ 16 - 0
src/main/java/com/jzo2o/api/publics/MapApi.java

@@ -0,0 +1,16 @@
+package com.jzo2o.api.publics;
+
+import com.jzo2o.api.publics.dto.response.LocationResDTO;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+
+/**
+ * @author itcast
+ */
+@FeignClient(contextId = "jzo2o-publics", value = "jzo2o-publics", path = "/publics/inner/map")
+public interface MapApi {
+
+    @GetMapping("/getLocationByAddress")
+    LocationResDTO getLocationByAddress(@RequestParam("address") String address);
+}

+ 27 - 0
src/main/java/com/jzo2o/api/publics/SmsCodeApi.java

@@ -0,0 +1,27 @@
+package com.jzo2o.api.publics;
+
+import com.jzo2o.api.publics.dto.response.BooleanResDTO;
+import com.jzo2o.common.enums.SmsBussinessTypeEnum;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+
+/**
+ * @author itcast
+ */
+@FeignClient(contextId = "jzo2o-publics", value = "jzo2o-publics", path = "/publics/inner/sms-code")
+public interface SmsCodeApi {
+
+    /**
+     * 校验短信验证码
+     *
+     * @param phone         验证手机号
+     * @param bussinessType 业务类型
+     * @param verifyCode    验证码
+     * @return 验证结果
+     */
+    @GetMapping("/verify")
+    BooleanResDTO verify(@RequestParam("phone") String phone,
+                         @RequestParam("bussinessType") SmsBussinessTypeEnum bussinessType,
+                         @RequestParam("verifyCode") String verifyCode);
+}

+ 20 - 0
src/main/java/com/jzo2o/api/publics/WechatApi.java

@@ -0,0 +1,20 @@
+package com.jzo2o.api.publics;
+
+import com.jzo2o.api.publics.dto.response.OpenIdResDTO;
+import com.jzo2o.api.publics.dto.response.PhoneResDTO;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+
+/**
+ * @author itcast
+ */
+@FeignClient(contextId = "jzo2o-publics", value = "jzo2o-publics", path = "/publics/inner/wechat")
+public interface WechatApi {
+
+    @GetMapping("/getOpenId")
+    OpenIdResDTO getOpenId(@RequestParam("code") String code);
+
+    @GetMapping("/getPhone")
+    PhoneResDTO getPhone(@RequestParam("code") String code);
+}

+ 26 - 0
src/main/java/com/jzo2o/api/publics/dto/response/BooleanResDTO.java

@@ -0,0 +1,26 @@
+package com.jzo2o.api.publics.dto.response;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * 布尔值响应
+ *
+ * @author itcast
+ * @create 2023/9/22 21:40
+ **/
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@ApiModel("布尔值响应")
+public class BooleanResDTO {
+
+    /**
+     * 是否成功
+     */
+    @ApiModelProperty("是否成功")
+    private Boolean isSuccess = false;
+}

+ 21 - 0
src/main/java/com/jzo2o/api/publics/dto/response/LocationResDTO.java

@@ -0,0 +1,21 @@
+package com.jzo2o.api.publics.dto.response;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * 经纬度
+ *
+ * @author itcast
+ * @create 2023/8/25 20:01
+ **/
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class LocationResDTO {
+    /**
+     * 经纬度
+     */
+    private String location;
+}

+ 16 - 0
src/main/java/com/jzo2o/api/publics/dto/response/OpenIdResDTO.java

@@ -0,0 +1,16 @@
+package com.jzo2o.api.publics.dto.response;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author itcast
+ * @create 2023/8/23 20:29
+ **/
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class OpenIdResDTO {
+    private String openId;
+}

+ 19 - 0
src/main/java/com/jzo2o/api/publics/dto/response/PhoneResDTO.java

@@ -0,0 +1,19 @@
+package com.jzo2o.api.publics.dto.response;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author itcast
+ * @create 2023/8/23 20:30
+ **/
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class PhoneResDTO {
+    /**
+     * 手机号
+     */
+    private String phone;
+}

+ 37 - 0
src/main/java/com/jzo2o/api/trade/NativePayApi.java

@@ -0,0 +1,37 @@
+package com.jzo2o.api.trade;
+
+import com.jzo2o.api.trade.dto.request.NativePayReqDTO;
+import com.jzo2o.api.trade.dto.response.NativePayResDTO;
+import com.jzo2o.api.trade.enums.PayChannelEnum;
+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.RequestBody;
+import org.springframework.web.bind.annotation.RequestParam;
+
+/**
+ * @author itcast
+ */
+@FeignClient(contextId = "jzo2o-trade", value = "jzo2o-trade", path = "/trade/inner/native")
+public interface NativePayApi {
+
+    /***
+     * 扫码支付,收银员通过收银台或商户后台调用此接口,生成二维码后,展示给用户,由用户扫描二维码完成订单支付。
+     *
+     * @param nativePayDTO 扫码支付提交参数
+     * @return 扫码支付响应数据,其中包含二维码路径
+     */
+    @PostMapping
+    NativePayResDTO createDownLineTrading(@RequestBody NativePayReqDTO nativePayDTO);
+
+//    /**
+//     * 根据订单id和支付方式查询交易单
+//     *
+//     * @param productOrderNo 订单号
+//     * @param payChannelEnum 支付方式
+//     * @return 交易单
+//     */
+//    @GetMapping("queryByProductOrderNoAndTradingChannel")
+//    NativePayResDTO queryByProductOrderNoAndTradingChannel(@RequestParam("productOrderNo") Long productOrderNo,
+//                                                           @RequestParam("payChannelEnum") PayChannelEnum payChannelEnum);
+}

+ 27 - 0
src/main/java/com/jzo2o/api/trade/RefundRecordApi.java

@@ -0,0 +1,27 @@
+package com.jzo2o.api.trade;
+
+import com.jzo2o.api.trade.dto.response.ExecutionResultResDTO;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import java.math.BigDecimal;
+
+/**
+ * @author itcast
+ */
+@FeignClient(contextId = "jzo2o-trade", value = "jzo2o-trade", path = "/trade/inner/refund-record")
+public interface RefundRecordApi {
+
+    /***
+     * 统一收单交易退款接口
+     * 当交易发生之后一段时间内,由于买家或者卖家的原因需要退款时,卖家可以通过退款接口将支付款退还给买家,
+     * 将在收到退款请求并且验证成功之后,按照退款规则将支付款按原路退到买家帐号上。
+     * @param tradingOrderNo 支付单号
+     * @param refundAmount 退款金额
+     * @return
+     */
+    @PostMapping("refund")
+    ExecutionResultResDTO refundTrading(@RequestParam("tradingOrderNo") Long tradingOrderNo,
+                                        @RequestParam("refundAmount") BigDecimal refundAmount);
+}

+ 22 - 0
src/main/java/com/jzo2o/api/trade/TradingApi.java

@@ -0,0 +1,22 @@
+package com.jzo2o.api.trade;
+
+import com.jzo2o.api.trade.dto.response.TradingResDTO;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+
+/**
+ * @author itcast
+ */
+@FeignClient(contextId = "jzo2o-trade", value = "jzo2o-trade", path = "/trade/inner/tradings")
+public interface TradingApi {
+
+    /**
+     * 根据交易单号查询交易单的交易结果,与findTradByTradingOrderNo不同的是当支付中时会立即调用第三方支付系统查询支付结果
+     *
+     * @param tradingOrderNo 订单号
+     * @return 交易单数据
+     */
+    @GetMapping("/findTradResultByTradingOrderNo")
+    TradingResDTO findTradResultByTradingOrderNo(@RequestParam("tradingOrderNo") Long tradingOrderNo);
+}

+ 31 - 0
src/main/java/com/jzo2o/api/trade/dto/request/NativePayReqDTO.java

@@ -0,0 +1,31 @@
+package com.jzo2o.api.trade.dto.request;
+
+import com.jzo2o.api.trade.enums.PayChannelEnum;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class NativePayReqDTO {
+
+    @ApiModelProperty(value = "商户号", required = true)
+    private Long enterpriseId;
+    @ApiModelProperty(value = "业务系统标识", required = true)
+    private String productAppId;
+    @ApiModelProperty(value = "业务系统订单号", required = true)
+    private Long productOrderNo;
+
+    @ApiModelProperty(value = "支付渠道", required = true)
+    private PayChannelEnum tradingChannel;
+
+    @ApiModelProperty(value = "交易金额,单位:元", required = true)
+    private BigDecimal tradingAmount;
+
+    @ApiModelProperty(value = "备注,如:运费", required = true)
+    private String memo;
+
+    @ApiModelProperty(value = "是否切换支付渠道", required = true)
+    private boolean changeChannel=false;
+
+}

+ 36 - 0
src/main/java/com/jzo2o/api/trade/dto/response/ExecutionResultResDTO.java

@@ -0,0 +1,36 @@
+package com.jzo2o.api.trade.dto.response;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * 程序执行结果
+ *
+ * @author itcast
+ * @create 2023/9/7 15:41
+ **/
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class ExecutionResultResDTO {
+
+    /**
+     * 支付服务退款单号
+     */
+    @ApiModelProperty("退款单号")
+    private Long refundNo;
+
+    /**
+     * 第三方支付的退款单号
+     */
+    @ApiModelProperty("第三方支付的退款单号")
+    private String refundId;
+
+    /**
+     * 退款状态,1:退款中,2:退款成功,3:退款失败
+     */
+    @ApiModelProperty("退款状态 0:发起退款 1:退款中,2:退款成功,3:退款失败")
+    private Integer refundStatus;
+}

+ 24 - 0
src/main/java/com/jzo2o/api/trade/dto/response/NativePayResDTO.java

@@ -0,0 +1,24 @@
+package com.jzo2o.api.trade.dto.response;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 扫码支付响应数据
+ *
+ * @author zzj
+ * @version 1.0
+ */
+@Data
+public class NativePayResDTO {
+
+    @ApiModelProperty(value = "二维码base64数据")
+    private String qrCode;
+    @ApiModelProperty(value = "业务系统订单号")
+    private Long productOrderNo;
+    @ApiModelProperty(value = "交易系统订单号【对于三方来说:商户订单】")
+    private Long tradingOrderNo;
+    @ApiModelProperty(value = "支付渠道【支付宝、微信、现金、免单挂账】")
+    private String tradingChannel;
+
+}

+ 80 - 0
src/main/java/com/jzo2o/api/trade/dto/response/TradingResDTO.java

@@ -0,0 +1,80 @@
+package com.jzo2o.api.trade.dto.response;
+
+import com.jzo2o.api.trade.enums.TradingStateEnum;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@ApiModel("交易数据对象")
+public class TradingResDTO {
+
+    @ApiModelProperty(value = "主键")
+    private Long id;
+    @ApiModelProperty(value = "openId标识")
+    private String openId;
+    @ApiModelProperty(value = "业务系统订单号")
+    private Long productOrderNo;
+    @ApiModelProperty(value = "交易系统订单号【对于三方来说:商户订单】")
+    private Long tradingOrderNo;
+
+    @ApiModelProperty(value = "第三方支付的交易号")
+    private String transactionId;
+    @ApiModelProperty(value = "支付渠道【支付宝、微信、现金、免单挂账】")
+    private String tradingChannel;
+    @ApiModelProperty(value = "交易类型【付款、退款、免单、挂账】")
+    private String tradingType;
+    @ApiModelProperty(value = "收款人姓名")
+    private String payeeName;
+    @ApiModelProperty(value = "收款人账户ID")
+    private Long payeeId;
+    @ApiModelProperty(value = "付款人姓名")
+    private String payerName;
+    @ApiModelProperty(value = "付款人Id")
+    private Long payerId;
+    @ApiModelProperty(value = "交易金额,单位:元")
+    private BigDecimal tradingAmount;
+    @ApiModelProperty(value = "退款金额【付款后】,单位:元")
+    private BigDecimal refund;
+    @ApiModelProperty(value = "是否有退款:YES,NO")
+    private String isRefund;
+    @ApiModelProperty(value = "第三方交易返回编码【最终确认交易结果】")
+    private String resultCode;
+    @ApiModelProperty(value = "第三方交易返回提示消息【最终确认交易信息】")
+    private String resultMsg;
+    @ApiModelProperty(value = "第三方交易返回信息json【分析交易最终信息】")
+    private String resultJson;
+    @ApiModelProperty(value = "统一下单返回编码")
+    private String placeOrderCode;
+    @ApiModelProperty(value = "统一下单返回信息")
+    private String placeOrderMsg;
+    @ApiModelProperty(value = "统一下单返回信息json【用于生产二维码、Android ios唤醒支付等】")
+    private String placeOrderJson;
+    @ApiModelProperty(value = "商户号")
+    private Long enterpriseId;
+    @ApiModelProperty(value = "备注,如:运费")
+    private String memo;
+    @ApiModelProperty(value = "二维码base64数据")
+    private String qrCode;
+    @ApiModelProperty(value = "是否有效")
+    protected String enableFlag;
+    @ApiModelProperty(value = "退款请求号")
+    private String outRequestNo;
+    @ApiModelProperty(value = "操作退款金额")
+    private BigDecimal operTionRefund;
+    @ApiModelProperty(value = "创建时间")
+    protected LocalDateTime created;
+    @ApiModelProperty(value = "更新时间")
+    protected LocalDateTime updated;
+    @ApiModelProperty(value = "交易单状态【DFK待付款,FKZ付款中,QXDD取消订单,YJS已结算,MD免单,GZ挂账】")
+    private TradingStateEnum tradingState;
+}

+ 27 - 0
src/main/java/com/jzo2o/api/trade/enums/PayChannelEnum.java

@@ -0,0 +1,27 @@
+package com.jzo2o.api.trade.enums;
+
+import cn.hutool.core.util.ObjectUtil;
+
+/**
+ * 支付渠道枚举
+ *
+ * @author zzj
+ * @version 1.0
+ */
+public enum PayChannelEnum {
+
+    ALI_PAY( "支付宝"),
+    WECHAT_PAY( "微信支付");
+
+    private final String value;
+
+    PayChannelEnum( String value) {
+        this.value = value;
+    }
+
+
+    public String getValue() {
+        return this.value;
+    }
+
+}

+ 34 - 0
src/main/java/com/jzo2o/api/trade/enums/RefundStatusEnum.java

@@ -0,0 +1,34 @@
+package com.jzo2o.api.trade.enums;
+
+import com.fasterxml.jackson.annotation.JsonValue;
+
+/**
+ * 退款状态枚举
+ *
+ * @author zzj
+ * @version 1.0
+ */
+public enum RefundStatusEnum {
+
+    APPLY_REFUND(0, "发起退款"),
+    SENDING(1, "退款中"),
+    SUCCESS(2, "成功"),
+    FAIL(3, "失败");
+
+    @JsonValue
+    private final Integer code;
+    private final String value;
+
+    RefundStatusEnum(Integer code, String value) {
+        this.code = code;
+        this.value = value;
+    }
+
+    public Integer getCode() {
+        return this.code;
+    }
+
+    public String getValue() {
+        return this.value;
+    }
+}

+ 37 - 0
src/main/java/com/jzo2o/api/trade/enums/TradingStateEnum.java

@@ -0,0 +1,37 @@
+package com.jzo2o.api.trade.enums;
+
+import com.fasterxml.jackson.annotation.JsonValue;
+
+/**
+ * 交易单状态枚举
+ *
+ * @author zzj
+ * @version 1.0
+ */
+public enum TradingStateEnum {
+
+//    DFK(1, "待付款"),
+    FKZ(2, "付款中"),
+    FKSB(3, "付款失败"),
+    YJS(4, "已结算(已付款)"),
+    QXDD(5, "取消订单"),
+    MD(6, "免单"),
+    GZ(7, "挂账");
+
+    @JsonValue
+    private final Integer code;
+    private final String value;
+
+    TradingStateEnum(Integer code, String value) {
+        this.code = code;
+        this.value = value;
+    }
+
+    public Integer getCode() {
+        return this.code;
+    }
+
+    public String getValue() {
+        return this.value;
+    }
+}

+ 26 - 0
src/main/java/com/jzo2o/config/ClientScanConfiguration.java

@@ -0,0 +1,26 @@
+package com.jzo2o.config;
+
+import com.jzo2o.common.handler.RequestIdHandler;
+import com.jzo2o.common.handler.UserInfoHandler;
+import com.jzo2o.interceptor.FeignInterceptor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.cloud.openfeign.EnableFeignClients;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Import;
+
+@Slf4j
+@Configuration
+@EnableFeignClients(basePackages = "com.jzo2o.api")
+@Import({com.jzo2o.utils.MyQueryMapEncoder.class})
+@ConditionalOnProperty(prefix = "feign", name = "enable", havingValue = "true")
+public class ClientScanConfiguration {
+
+    @Bean
+    public FeignInterceptor feignInterceptor(UserInfoHandler userInfoHandler, RequestIdHandler requestIdHandler){
+        return new FeignInterceptor(userInfoHandler, requestIdHandler);
+    }
+
+
+}

+ 49 - 0
src/main/java/com/jzo2o/interceptor/FeignInterceptor.java

@@ -0,0 +1,49 @@
+package com.jzo2o.interceptor;
+
+import com.jzo2o.common.constants.HeaderConstants;
+import com.jzo2o.common.handler.RequestIdHandler;
+import com.jzo2o.common.handler.UserInfoHandler;
+import com.jzo2o.common.model.CurrentUserInfo;
+import com.jzo2o.common.utils.Base64Utils;
+import com.jzo2o.common.utils.CollUtils;
+import com.jzo2o.common.utils.JsonUtils;
+import feign.RequestInterceptor;
+import feign.RequestTemplate;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
+
+/**
+ * 向下一个服务传递参数,用户信息、访问来源、访问id
+ */import static com.jzo2o.common.constants.HeaderConstants.*;
+
+/**
+ * @author itcast
+ */
+@Slf4j
+@ConditionalOnBean(value = {UserInfoHandler.class, RequestIdHandler.class})
+public class FeignInterceptor implements RequestInterceptor {
+    private final UserInfoHandler userInfoHandler;
+    private final RequestIdHandler requestIdHandler;
+
+    public FeignInterceptor(UserInfoHandler userInfoHandler, RequestIdHandler requestIdHandler) {
+        this.userInfoHandler = userInfoHandler;
+        this.requestIdHandler = requestIdHandler;
+    }
+
+    /**
+     * 将用户信息base64格式编码,传递到下一个微服务
+     * @param requestTemplate
+     */
+    @Override
+    public void apply(RequestTemplate requestTemplate) {
+//         1.用户信息
+        CurrentUserInfo userInfo = userInfoHandler.currentUserInfo();
+        String userInfoStr = Base64Utils.encodeStr(JsonUtils.toJsonStr(userInfo));
+        requestTemplate.header(USER_INFO, userInfoStr);
+        // 2.访问来源信息
+        requestTemplate.header(HeaderConstants.REQUEST_ORIGIN_FLAG, REQUEST_ORIGIN_FLAG_INNER);
+        // 3.访问id
+        requestTemplate.header(REQUEST_ID, requestIdHandler.getRequestId());
+
+    }
+}

+ 38 - 0
src/main/java/com/jzo2o/utils/MyQueryMapEncoder.java

@@ -0,0 +1,38 @@
+package com.jzo2o.utils;
+
+import cn.hutool.core.date.DatePattern;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
+import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
+import feign.QueryMapEncoder;
+
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.Map;
+
+/**
+ * 请求参数序列化
+ * @author itcast
+ */
+public class MyQueryMapEncoder implements QueryMapEncoder {
+    private static final ObjectMapper objectMapper = new ObjectMapper();
+
+    @Override
+    public Map<String, Object> encode(Object o) {
+        try {
+            String s = objectMapper.writeValueAsString(o);
+            return objectMapper.readValue(s, Map.class);
+        } catch (JsonProcessingException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    static {
+        JavaTimeModule javaTimeModule = new JavaTimeModule();
+        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_PATTERN);
+        javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(dateTimeFormatter));
+
+        objectMapper.registerModule(javaTimeModule);
+    }
+}

+ 2 - 0
src/main/resources/META-INF/spring.factories

@@ -0,0 +1,2 @@
+org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
+  com.jzo2o.config.ClientScanConfiguration