- 联调订单流程
This commit is contained in:
parent
77c6edefb3
commit
07e9ef260f
@ -109,29 +109,13 @@
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<version>3.5.1</version>
|
||||
<configuration>
|
||||
<source>1.8</source> <!-- or higher, depending on your project -->
|
||||
<target>1.8</target> <!-- or higher, depending on your project -->
|
||||
<annotationProcessorPaths>
|
||||
<path>
|
||||
<groupId>org.mapstruct</groupId>
|
||||
<artifactId>mapstruct-processor</artifactId>
|
||||
<version>${org.mapstruct.version}</version>
|
||||
</path>
|
||||
</annotationProcessorPaths>
|
||||
</configuration>
|
||||
</plugin>
|
||||
|
||||
<!-- 打包 -->
|
||||
<plugin>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-maven-plugin</artifactId>
|
||||
<configuration>
|
||||
<fork>true</fork>
|
||||
</configuration>
|
||||
</plugin>
|
||||
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
|
@ -33,4 +33,12 @@ public class MVCConfiguration implements WebMvcConfigurer {
|
||||
registry.addResourceHandler("webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
|
||||
}
|
||||
|
||||
// TODO 芋艿,允许跨域
|
||||
@Override
|
||||
public void addCorsMappings(CorsRegistry registry) {
|
||||
registry.addMapping("/**")
|
||||
.allowedHeaders("*")
|
||||
.allowedMethods("*")
|
||||
.allowedOrigins("*");
|
||||
}
|
||||
}
|
@ -8,10 +8,10 @@ import cn.iocoder.mall.order.api.bo.OrderRecipientBO;
|
||||
import cn.iocoder.mall.order.api.dto.*;
|
||||
import cn.iocoder.mall.order.application.convert.OrderConvertAPP;
|
||||
import cn.iocoder.mall.order.application.convert.OrderDeliveryConvert;
|
||||
import cn.iocoder.mall.order.application.po.OrderDeliverPO;
|
||||
import cn.iocoder.mall.order.application.po.OrderItemUpdatePO;
|
||||
import cn.iocoder.mall.order.application.po.OrderLogisticsPO;
|
||||
import cn.iocoder.mall.order.application.po.OrderPageQueryPO;
|
||||
import cn.iocoder.mall.order.application.po.admin.OrderDeliverPO;
|
||||
import cn.iocoder.mall.order.application.po.admin.OrderItemUpdatePO;
|
||||
import cn.iocoder.mall.order.application.po.admin.OrderLogisticsPO;
|
||||
import cn.iocoder.mall.order.application.po.admin.OrderPageQueryPO;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
@ -37,7 +37,7 @@ public class AdminsOrderController {
|
||||
@GetMapping("page")
|
||||
@ApiOperation("订单列表")
|
||||
public CommonResult<OrderPageBO> getOrderPage(@Validated OrderPageQueryPO orderPageQueryVO) {
|
||||
OrderQueryDTO orderQueryDTO = OrderConvertAPP.INSTANCE.convertPageBO(orderPageQueryVO);
|
||||
OrderQueryDTO orderQueryDTO = OrderConvertAPP.INSTANCE.convert(orderPageQueryVO);
|
||||
return orderService.getOrderPage(orderQueryDTO);
|
||||
}
|
||||
|
||||
@ -86,14 +86,14 @@ public class AdminsOrderController {
|
||||
@PutMapping("order_item/update")
|
||||
@ApiOperation("更新-订单item")
|
||||
public CommonResult updateOrderItem(@RequestBody @Validated OrderItemUpdatePO orderItemUpdateVO) {
|
||||
OrderItemUpdateDTO dto = OrderConvertAPP.INSTANCE.convertPageBO(orderItemUpdateVO);
|
||||
OrderItemUpdateDTO dto = OrderConvertAPP.INSTANCE.convert(orderItemUpdateVO);
|
||||
return orderService.updateOrderItem(dto);
|
||||
}
|
||||
|
||||
@PutMapping("logistics/update")
|
||||
@ApiOperation("更新-订单物流")
|
||||
public CommonResult updateLogistics(@RequestBody @Validated OrderLogisticsPO orderLogisticsVO) {
|
||||
OrderLogisticsUpdateDTO dto = OrderConvertAPP.INSTANCE.convertPageBO(orderLogisticsVO);
|
||||
OrderLogisticsUpdateDTO dto = OrderConvertAPP.INSTANCE.convert(orderLogisticsVO);
|
||||
return orderService.updateLogistics(dto);
|
||||
}
|
||||
}
|
||||
|
@ -1,7 +1,18 @@
|
||||
package cn.iocoder.mall.order.application.controller.users;
|
||||
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
import cn.iocoder.common.framework.vo.CommonResult;
|
||||
import cn.iocoder.mall.order.api.OrderService;
|
||||
import cn.iocoder.mall.order.api.bo.OrderCreateBO;
|
||||
import cn.iocoder.mall.order.api.bo.OrderPageBO;
|
||||
import cn.iocoder.mall.order.api.dto.OrderCreateDTO;
|
||||
import cn.iocoder.mall.order.api.dto.OrderQueryDTO;
|
||||
import cn.iocoder.mall.order.api.dto.OrderUserPageDTO;
|
||||
import cn.iocoder.mall.order.application.convert.OrderConvertAPP;
|
||||
import cn.iocoder.mall.order.application.po.user.OrderCreatePO;
|
||||
import cn.iocoder.mall.user.sdk.context.UserSecurityContextHolder;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
/**
|
||||
* 订单API(users)
|
||||
@ -12,4 +23,22 @@ import org.springframework.web.bind.annotation.RestController;
|
||||
@RestController
|
||||
@RequestMapping("users/order")
|
||||
public class UsersOrderController {
|
||||
|
||||
@Autowired
|
||||
private OrderService orderService;
|
||||
|
||||
@GetMapping("order_page")
|
||||
public CommonResult<OrderPageBO> getOrderPage(@Validated OrderQueryDTO orderQueryDTO) {
|
||||
Integer userId = UserSecurityContextHolder.getContext().getUserId();
|
||||
orderQueryDTO.setUserId(userId);
|
||||
return orderService.getOrderPage(orderQueryDTO);
|
||||
}
|
||||
|
||||
@PostMapping("create_order")
|
||||
public CommonResult<OrderCreateBO> createOrder(@RequestBody @Validated OrderCreatePO orderCreatePO) {
|
||||
Integer userId = UserSecurityContextHolder.getContext().getUserId();
|
||||
OrderCreateDTO orderCreateDTO = OrderConvertAPP.INSTANCE.convert(orderCreatePO);
|
||||
orderCreateDTO.setUserId(1);
|
||||
return orderService.createOrder(orderCreateDTO);
|
||||
}
|
||||
}
|
||||
|
@ -1,11 +1,13 @@
|
||||
package cn.iocoder.mall.order.application.convert;
|
||||
|
||||
import cn.iocoder.mall.order.api.dto.OrderCreateDTO;
|
||||
import cn.iocoder.mall.order.api.dto.OrderItemUpdateDTO;
|
||||
import cn.iocoder.mall.order.api.dto.OrderLogisticsUpdateDTO;
|
||||
import cn.iocoder.mall.order.api.dto.OrderQueryDTO;
|
||||
import cn.iocoder.mall.order.application.po.OrderItemUpdatePO;
|
||||
import cn.iocoder.mall.order.application.po.OrderPageQueryPO;
|
||||
import cn.iocoder.mall.order.application.po.OrderLogisticsPO;
|
||||
import cn.iocoder.mall.order.application.po.admin.OrderItemUpdatePO;
|
||||
import cn.iocoder.mall.order.application.po.admin.OrderLogisticsPO;
|
||||
import cn.iocoder.mall.order.application.po.admin.OrderPageQueryPO;
|
||||
import cn.iocoder.mall.order.application.po.user.OrderCreatePO;
|
||||
import org.mapstruct.Mapper;
|
||||
import org.mapstruct.Mappings;
|
||||
import org.mapstruct.factory.Mappers;
|
||||
@ -24,11 +26,14 @@ public interface OrderConvertAPP {
|
||||
OrderConvertAPP INSTANCE = Mappers.getMapper(OrderConvertAPP.class);
|
||||
|
||||
@Mappings({})
|
||||
OrderQueryDTO convertPageBO(OrderPageQueryPO orderPageQueryVO);
|
||||
OrderQueryDTO convert(OrderPageQueryPO orderPageQueryVO);
|
||||
|
||||
@Mappings({})
|
||||
OrderLogisticsUpdateDTO convertPageBO(OrderLogisticsPO orderLogisticsVO);
|
||||
OrderLogisticsUpdateDTO convert(OrderLogisticsPO orderLogisticsVO);
|
||||
|
||||
@Mappings({})
|
||||
OrderItemUpdateDTO convertPageBO(OrderItemUpdatePO orderItemUpdateVO);
|
||||
OrderItemUpdateDTO convert(OrderItemUpdatePO orderItemUpdateVO);
|
||||
|
||||
@Mappings({})
|
||||
OrderCreateDTO convert(OrderCreatePO orderCreatePO);
|
||||
}
|
||||
|
@ -1,7 +1,7 @@
|
||||
package cn.iocoder.mall.order.application.convert;
|
||||
|
||||
import cn.iocoder.mall.order.api.dto.OrderDeliveryDTO;
|
||||
import cn.iocoder.mall.order.application.po.OrderDeliverPO;
|
||||
import cn.iocoder.mall.order.application.po.admin.OrderDeliverPO;
|
||||
import org.mapstruct.Mapper;
|
||||
import org.mapstruct.Mappings;
|
||||
import org.mapstruct.factory.Mappers;
|
||||
|
@ -1,4 +1,4 @@
|
||||
package cn.iocoder.mall.order.application.po;
|
||||
package cn.iocoder.mall.order.application.po.admin;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
@ -1,4 +1,4 @@
|
||||
package cn.iocoder.mall.order.application.po;
|
||||
package cn.iocoder.mall.order.application.po.admin;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
@ -1,4 +1,4 @@
|
||||
package cn.iocoder.mall.order.application.po;
|
||||
package cn.iocoder.mall.order.application.po.admin;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
@ -1,4 +1,4 @@
|
||||
package cn.iocoder.mall.order.application.po;
|
||||
package cn.iocoder.mall.order.application.po.admin;
|
||||
|
||||
import cn.iocoder.mall.order.api.bo.OrderBO;
|
||||
import io.swagger.annotations.ApiModel;
|
@ -1,4 +1,4 @@
|
||||
package cn.iocoder.mall.order.application.po;
|
||||
package cn.iocoder.mall.order.application.po.admin;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
@ -0,0 +1,39 @@
|
||||
package cn.iocoder.mall.order.application.po.user;
|
||||
|
||||
import cn.iocoder.mall.order.api.dto.OrderCreateItemDTO;
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import javax.validation.constraints.NotNull;
|
||||
import javax.validation.constraints.Size;
|
||||
import java.io.Serializable;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 订单创建
|
||||
*
|
||||
* @author Sin
|
||||
* @time 2019-03-16 14:42
|
||||
*/
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
public class OrderCreatePO implements Serializable {
|
||||
|
||||
/**
|
||||
* 收件手机号
|
||||
*/
|
||||
@NotNull(message = "用户地址id不能为空!")
|
||||
private Integer userAddressId;
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
private String remark;
|
||||
|
||||
///
|
||||
/// order item
|
||||
|
||||
@NotNull()
|
||||
@Size(max = 1000, min = 1, message = "用户订单中没有商品!")
|
||||
private List<OrderCreateItemDTO> orderItems;
|
||||
|
||||
}
|
@ -11,10 +11,6 @@
|
||||
|
||||
<artifactId>order-service-api</artifactId>
|
||||
|
||||
<properties>
|
||||
<org.projectlombok.version>1.16.14</org.projectlombok.version>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>cn.iocoder.mall</groupId>
|
||||
@ -26,10 +22,17 @@
|
||||
<groupId>javax.validation</groupId>
|
||||
<artifactId>validation-api</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.mapstruct</groupId>
|
||||
<artifactId>mapstruct</artifactId> <!-- use mapstruct-jdk8 for Java 8 or higher -->
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.mapstruct</groupId>
|
||||
<artifactId>mapstruct-jdk8</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.projectlombok</groupId>
|
||||
<artifactId>lombok</artifactId>
|
||||
<version>${org.projectlombok.version}</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
@ -44,11 +44,10 @@ public interface OrderService {
|
||||
/**
|
||||
* 订单 - 创建
|
||||
*
|
||||
* @param userId
|
||||
* @param orderCreateDTO
|
||||
* @return
|
||||
*/
|
||||
CommonResult<OrderCreateBO> createOrder(Integer userId, OrderCreateDTO orderCreateDTO);
|
||||
CommonResult<OrderCreateBO> createOrder(OrderCreateDTO orderCreateDTO);
|
||||
|
||||
/**
|
||||
* 订单item - 更新
|
||||
|
@ -0,0 +1,12 @@
|
||||
package cn.iocoder.mall.order.api.bo;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 订单支付信息返回
|
||||
*
|
||||
* @author Sin
|
||||
* @time 2019-04-08 19:39
|
||||
*/
|
||||
public class OrderPayBO implements Serializable {
|
||||
}
|
@ -17,9 +17,16 @@ public enum OrderErrorCodeEnum {
|
||||
ORDER_PAY_AMOUNT_NOT_NEGATIVE(1008000003, "支付金额不能为负数!"),
|
||||
ORDER_STATUS_NOT_CANCEL(1008000004, "订单状态不能取消!"),
|
||||
ORDER_DELIVERY_INCORRECT_DATA(1008000005, "订单发货数据不正确!"),
|
||||
ORDER_INSUFFICIENT_INVENTORY(1008000006, "库存不足!"),
|
||||
ORDER_GOODS_AMOUNT_INCORRECT(1008000007, "商品金额非法!"),
|
||||
ORDER_GET_GOODS_INFO_INCORRECT(1008000008, "获取额商品信息不正确!"),
|
||||
ORDER_GET_USER_ADDRESS_FAIL(1008000009, "获取用户地址失败!"),
|
||||
ORDER_GET_PAY_FAIL(1008000009, "调用pay失败!"),
|
||||
|
||||
// order item
|
||||
ORDER_ITEM_ONLY_ONE(1008000004, "订单Item只有一个!"),
|
||||
|
||||
|
||||
;
|
||||
|
||||
private final int code;
|
||||
|
@ -6,7 +6,7 @@ package cn.iocoder.mall.order.api.constant;
|
||||
* @author Sin
|
||||
* @time 2019-03-16 14:32
|
||||
*/
|
||||
public enum OrderPayStatusEnum {
|
||||
public enum OrderPayStatus {
|
||||
|
||||
WAITING_PAYMENT(0, "等待支付"),
|
||||
SUCCESSFUL_PAYMENT(1, "支付成功"),
|
||||
@ -19,7 +19,7 @@ public enum OrderPayStatusEnum {
|
||||
|
||||
private final String name;
|
||||
|
||||
OrderPayStatusEnum(int value, String name) {
|
||||
OrderPayStatus(int value, String name) {
|
||||
this.value = value;
|
||||
this.name = name;
|
||||
}
|
@ -0,0 +1,16 @@
|
||||
package cn.iocoder.mall.order.api.constant;
|
||||
|
||||
/**
|
||||
* 支付 AppId
|
||||
*
|
||||
* @author Sin
|
||||
* @time 2019-04-08 19:54
|
||||
*/
|
||||
public class PayAppId {
|
||||
|
||||
/**
|
||||
* 电商
|
||||
*/
|
||||
public static final String APP_ID_1024 = "1024";
|
||||
|
||||
}
|
@ -3,8 +3,6 @@ package cn.iocoder.mall.order.api.dto;
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import javax.validation.constraints.NotNull;
|
||||
import javax.validation.constraints.Size;
|
||||
import java.io.Serializable;
|
||||
import java.util.List;
|
||||
|
||||
@ -23,34 +21,20 @@ public class OrderCreateDTO implements Serializable {
|
||||
*/
|
||||
private Integer userId;
|
||||
/**
|
||||
* 收件区域编号
|
||||
* 用户地址
|
||||
*/
|
||||
@NotNull
|
||||
private String areaNo;
|
||||
/**
|
||||
* 收件人名称
|
||||
*/
|
||||
@NotNull
|
||||
private String name;
|
||||
/**
|
||||
* 收件手机号
|
||||
*/
|
||||
@NotNull
|
||||
private String mobile;
|
||||
/**
|
||||
* 收件详细地址
|
||||
*/
|
||||
@NotNull
|
||||
private String address;
|
||||
private Integer userAddressId;
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
private String remark;
|
||||
/**
|
||||
* ip信息
|
||||
*/
|
||||
private String ip;
|
||||
|
||||
///
|
||||
/// order item
|
||||
|
||||
@NotNull
|
||||
@Size(max = 1000, min = 1)
|
||||
private List<OrderCreateItemDTO> orderItems;
|
||||
}
|
||||
|
@ -1,5 +1,8 @@
|
||||
package cn.iocoder.mall.order.api.dto;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import javax.validation.constraints.Max;
|
||||
import javax.validation.constraints.NotNull;
|
||||
|
||||
@ -7,6 +10,8 @@ import javax.validation.constraints.NotNull;
|
||||
* @author Sin
|
||||
* @time 2019-03-17 09:37
|
||||
*/
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
public class OrderCreateItemDTO {
|
||||
|
||||
/**
|
||||
|
@ -1,5 +1,8 @@
|
||||
package cn.iocoder.mall.order.api.dto;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.List;
|
||||
|
||||
@ -9,6 +12,8 @@ import java.util.List;
|
||||
* @author Sin
|
||||
* @time 2019-03-30 22:31
|
||||
*/
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
public class OrderDeliveryDTO implements Serializable {
|
||||
|
||||
/**
|
||||
|
@ -1,5 +1,8 @@
|
||||
package cn.iocoder.mall.order.api.dto;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.List;
|
||||
|
||||
@ -7,6 +10,8 @@ import java.util.List;
|
||||
* @author Sin
|
||||
* @time 2019-03-23 10:22
|
||||
*/
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
public class OrderItemDeletedDTO implements Serializable {
|
||||
|
||||
/**
|
||||
|
@ -1,5 +1,8 @@
|
||||
package cn.iocoder.mall.order.api.dto;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.io.Serializable;
|
||||
|
||||
@ -9,6 +12,8 @@ import java.io.Serializable;
|
||||
* @author Sin
|
||||
* @time 2019-03-16 14:46
|
||||
*/
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
public class OrderItemUpdateDTO implements Serializable {
|
||||
|
||||
/**
|
||||
|
@ -1,5 +1,8 @@
|
||||
package cn.iocoder.mall.order.api.dto;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import javax.validation.constraints.NotNull;
|
||||
import javax.validation.constraints.Size;
|
||||
import java.io.Serializable;
|
||||
@ -10,6 +13,8 @@ import java.io.Serializable;
|
||||
* @author Sin
|
||||
* @time 2019-03-17 20:22
|
||||
*/
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
public class OrderLogisticsUpdateDTO implements Serializable {
|
||||
|
||||
/**
|
||||
|
@ -1,5 +1,8 @@
|
||||
package cn.iocoder.mall.order.api.dto;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
@ -9,6 +12,8 @@ import java.util.Date;
|
||||
* @author Sin
|
||||
* @time 2019-03-23 14:15
|
||||
*/
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
public class OrderQueryDTO implements Serializable {
|
||||
|
||||
/**
|
||||
|
@ -1,5 +1,8 @@
|
||||
package cn.iocoder.mall.order.api.dto;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
@ -8,6 +11,8 @@ import java.io.Serializable;
|
||||
* @author Sin
|
||||
* @time 2019-03-30 15:34
|
||||
*/
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
public class OrderReturnCreateDTO implements Serializable {
|
||||
|
||||
/**
|
||||
|
@ -0,0 +1,45 @@
|
||||
package cn.iocoder.mall.order.api.dto;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 用户订单 page
|
||||
*
|
||||
* @author Sin
|
||||
* @time 2019-04-08 17:50
|
||||
*/
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
public class OrderUserPageDTO implements Serializable {
|
||||
|
||||
/**
|
||||
* id
|
||||
*/
|
||||
private Integer id;
|
||||
/**
|
||||
* 订单号
|
||||
*/
|
||||
private String orderNo;
|
||||
/**
|
||||
* 用户 id
|
||||
*/
|
||||
private Integer userId;
|
||||
/**
|
||||
* 付款时间(待发货)
|
||||
*/
|
||||
private Date startPaymentTime;
|
||||
private Date endPaymentTime;
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
private Date startCreateTime;
|
||||
private Date endCreateTime;
|
||||
/**
|
||||
* 状态
|
||||
*/
|
||||
private Integer status;
|
||||
}
|
@ -11,11 +11,6 @@
|
||||
|
||||
<artifactId>order-service-impl</artifactId>
|
||||
|
||||
<properties>
|
||||
<org.mapstruct.version>1.3.0.Final</org.mapstruct.version>
|
||||
<org.projectlombok.version>1.16.14</org.projectlombok.version>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>cn.iocoder.mall</groupId>
|
||||
@ -28,6 +23,19 @@
|
||||
<version>1.0-SNAPSHOT</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>cn.iocoder.mall</groupId>
|
||||
<artifactId>pay-service-api</artifactId>
|
||||
<version>1.0-SNAPSHOT</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>cn.iocoder.mall</groupId>
|
||||
<artifactId>user-service-api</artifactId>
|
||||
<version>1.0-SNAPSHOT</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.alibaba</groupId>
|
||||
<artifactId>dubbo</artifactId>
|
||||
@ -47,43 +55,27 @@
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-jdbc</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.mybatis.spring.boot</groupId>
|
||||
<artifactId>mybatis-spring-boot-starter</artifactId>
|
||||
<version>2.0.0</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.mapstruct</groupId>
|
||||
<artifactId>mapstruct</artifactId>
|
||||
<version>${org.mapstruct.version}</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.projectlombok</groupId>
|
||||
<artifactId>lombok</artifactId>
|
||||
<version>${org.projectlombok.version}</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.google.guava</groupId>
|
||||
<artifactId>guava</artifactId>
|
||||
<version>27.0.1-jre</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>Pingplusplus</groupId>
|
||||
<artifactId>pingpp-java</artifactId>
|
||||
<version>2.2.4</version>
|
||||
<type>jar</type>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.xuxueli</groupId>
|
||||
<artifactId>xxl-job-core</artifactId>
|
||||
<version>2.0.1</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.apache.rocketmq</groupId>
|
||||
<artifactId>rocketmq-spring-boot-starter</artifactId>
|
||||
@ -108,6 +100,12 @@
|
||||
<version>1.0-SNAPSHOT</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>cn.iocoder.mall</groupId>
|
||||
<artifactId>pay-service-api</artifactId>
|
||||
<version>1.0-SNAPSHOT</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
@ -116,23 +114,6 @@
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<version>3.5.1</version>
|
||||
<configuration>
|
||||
<source>1.8</source> <!-- or higher, depending on your project -->
|
||||
<target>1.8</target> <!-- or higher, depending on your project -->
|
||||
<annotationProcessorPaths>
|
||||
<path>
|
||||
<groupId>org.mapstruct</groupId>
|
||||
<artifactId>mapstruct-processor</artifactId>
|
||||
<version>${org.mapstruct.version}</version>
|
||||
</path>
|
||||
<path>
|
||||
<groupId>org.projectlombok</groupId>
|
||||
<artifactId>lombok</artifactId>
|
||||
<version>${org.projectlombok.version}</version>
|
||||
</path>
|
||||
</annotationProcessorPaths>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
@ -3,6 +3,7 @@ package cn.iocoder.mall.order.biz.convert;
|
||||
import cn.iocoder.mall.order.api.bo.OrderRecipientBO;
|
||||
import cn.iocoder.mall.order.api.dto.OrderCreateDTO;
|
||||
import cn.iocoder.mall.order.biz.dataobject.OrderRecipientDO;
|
||||
import cn.iocoder.mall.user.api.bo.UserAddressBO;
|
||||
import org.mapstruct.Mapper;
|
||||
import org.mapstruct.Mappings;
|
||||
import org.mapstruct.factory.Mappers;
|
||||
@ -23,6 +24,9 @@ public interface OrderRecipientConvert {
|
||||
@Mappings({})
|
||||
OrderRecipientDO convert(OrderCreateDTO orderCreateDTO);
|
||||
|
||||
@Mappings({})
|
||||
OrderRecipientDO convert(UserAddressBO userAddressBO);
|
||||
|
||||
@Mappings({})
|
||||
OrderRecipientBO convert(OrderRecipientDO orderRecipientDO);
|
||||
|
||||
|
@ -32,6 +32,10 @@ public class OrderItemDO extends DeletableDO {
|
||||
* 商品编号
|
||||
*/
|
||||
private Integer skuId;
|
||||
/**
|
||||
* 物流id
|
||||
*/
|
||||
private Integer orderLogisticsId;
|
||||
/**
|
||||
* 商品名称
|
||||
*/
|
||||
@ -52,10 +56,6 @@ public class OrderItemDO extends DeletableDO {
|
||||
* 支付金额(实付金额)
|
||||
*/
|
||||
private Integer payAmount;
|
||||
/**
|
||||
* 物流id
|
||||
*/
|
||||
private Integer orderLogisticsId;
|
||||
|
||||
///
|
||||
/// 时间信息
|
||||
|
@ -1,6 +1,7 @@
|
||||
package cn.iocoder.mall.order.biz.service;
|
||||
|
||||
import cn.iocoder.common.framework.constant.DeletedStatusEnum;
|
||||
import cn.iocoder.common.framework.util.DateUtil;
|
||||
import cn.iocoder.common.framework.util.ServiceExceptionUtil;
|
||||
import cn.iocoder.common.framework.vo.CommonResult;
|
||||
import cn.iocoder.mall.order.api.OrderService;
|
||||
@ -8,6 +9,7 @@ import cn.iocoder.mall.order.api.bo.*;
|
||||
import cn.iocoder.mall.order.api.constant.OrderErrorCodeEnum;
|
||||
import cn.iocoder.mall.order.api.constant.OrderHasReturnExchangeEnum;
|
||||
import cn.iocoder.mall.order.api.constant.OrderStatusEnum;
|
||||
import cn.iocoder.mall.order.api.constant.PayAppId;
|
||||
import cn.iocoder.mall.order.api.dto.*;
|
||||
import cn.iocoder.mall.order.biz.OrderCommon;
|
||||
import cn.iocoder.mall.order.biz.constants.OrderDeliveryTypeEnum;
|
||||
@ -18,10 +20,18 @@ import cn.iocoder.mall.order.biz.convert.OrderLogisticsConvert;
|
||||
import cn.iocoder.mall.order.biz.convert.OrderRecipientConvert;
|
||||
import cn.iocoder.mall.order.biz.dao.*;
|
||||
import cn.iocoder.mall.order.biz.dataobject.*;
|
||||
import cn.iocoder.mall.pay.api.PayTransactionService;
|
||||
import cn.iocoder.mall.pay.api.dto.PayTransactionCreateDTO;
|
||||
import cn.iocoder.mall.product.api.ProductSpuService;
|
||||
import cn.iocoder.mall.product.api.bo.ProductSpuBO;
|
||||
import cn.iocoder.mall.user.api.UserAddressService;
|
||||
import cn.iocoder.mall.user.api.bo.UserAddressBO;
|
||||
import com.alibaba.dubbo.config.annotation.Reference;
|
||||
import com.google.common.collect.Lists;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.transaction.interceptor.TransactionAspectSupport;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
|
||||
import java.util.*;
|
||||
@ -37,6 +47,11 @@ import java.util.stream.Collectors;
|
||||
@com.alibaba.dubbo.config.annotation.Service(validation = "true")
|
||||
public class OrderServiceImpl implements OrderService {
|
||||
|
||||
/**
|
||||
* 支付过期时间 15 分钟
|
||||
*/
|
||||
public static final int PAY_EXPIRE_TIME = 15;
|
||||
|
||||
@Autowired
|
||||
private OrderMapper orderMapper;
|
||||
@Autowired
|
||||
@ -50,6 +65,13 @@ public class OrderServiceImpl implements OrderService {
|
||||
@Autowired
|
||||
private OrderCommon orderCommon;
|
||||
|
||||
@Reference
|
||||
private ProductSpuService productSpuService;
|
||||
@Reference
|
||||
private UserAddressService userAddressService;
|
||||
@Reference
|
||||
private PayTransactionService payTransactionService;
|
||||
|
||||
@Override
|
||||
public CommonResult<OrderPageBO> getOrderPage(OrderQueryDTO orderQueryDTO) {
|
||||
|
||||
@ -61,6 +83,10 @@ public class OrderServiceImpl implements OrderService {
|
||||
// 获取订单数据
|
||||
List<OrderDO> orderDOList = orderMapper.selectPage(orderQueryDTO);
|
||||
|
||||
if (CollectionUtils.isEmpty(orderDOList)) {
|
||||
return CommonResult.success(new OrderPageBO().setOrders(Collections.EMPTY_LIST).setTotal(totalCount));
|
||||
}
|
||||
|
||||
// 获取订单 id
|
||||
Set<Integer> orderIds = orderDOList.stream()
|
||||
.map(orderDO -> orderDO.getId())
|
||||
@ -133,33 +159,59 @@ public class OrderServiceImpl implements OrderService {
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public CommonResult<OrderCreateBO> createOrder(Integer userId, OrderCreateDTO orderCreateDTO) {
|
||||
public CommonResult<OrderCreateBO> createOrder(OrderCreateDTO orderCreateDTO) {
|
||||
Integer userId = orderCreateDTO.getUserId();
|
||||
List<OrderCreateItemDTO> orderItemDTOList = orderCreateDTO.getOrderItems();
|
||||
OrderRecipientDO orderRecipientDO = OrderRecipientConvert.INSTANCE.convert(orderCreateDTO);
|
||||
List<OrderItemDO> orderItemDOList = OrderItemConvert.INSTANCE.convert(orderItemDTOList);
|
||||
|
||||
// TODO: 2019-03-24 sin 校验商品是否存在
|
||||
// for (OrderItemDO orderItemDO : orderItemDOList) {
|
||||
// CommonResult<ProductSpuDetailBO> result = productSpuService.getProductSpu(orderItemDO.getSkuId());
|
||||
//
|
||||
// // 有任何商品获取失败,或者为 null,都直接返回失败。
|
||||
// if (result.isError()) {
|
||||
// return ServiceExceptionUtil.error(OrderErrorCodeEnum.ORDER_GET_SKU_FAIL.getCode());
|
||||
// }
|
||||
//
|
||||
// if (result.getData() == null) {
|
||||
// return ServiceExceptionUtil.error(OrderErrorCodeEnum.ORDER_GET_SKU_NOT_EXISTENT.getCode());
|
||||
// }
|
||||
//
|
||||
// ProductSpuDetailBO spuDetailBO = result.getData();
|
||||
// orderItemDO.setPrice(1000);
|
||||
// }
|
||||
// 获取商品信息
|
||||
Set<Integer> skuIds = orderItemDOList.stream()
|
||||
.map(orderItemDO -> orderItemDO.getSkuId()).collect(Collectors.toSet());
|
||||
|
||||
CommonResult<List<ProductSpuBO>> result = productSpuService.getProductSpuList(skuIds);
|
||||
|
||||
// 校验商品信息
|
||||
if (result.isError()) {
|
||||
return ServiceExceptionUtil.error(OrderErrorCodeEnum.ORDER_GET_SKU_FAIL.getCode());
|
||||
}
|
||||
|
||||
if (result.getData() == null) {
|
||||
return ServiceExceptionUtil.error(OrderErrorCodeEnum.ORDER_GET_SKU_NOT_EXISTENT.getCode());
|
||||
}
|
||||
|
||||
if (orderItemDTOList.size() != result.getData().size()) {
|
||||
return ServiceExceptionUtil.error(OrderErrorCodeEnum.ORDER_GET_GOODS_INFO_INCORRECT.getCode());
|
||||
}
|
||||
|
||||
// 设置 orderItem
|
||||
|
||||
Map<Integer, ProductSpuBO> productSpuBOMap = result.getData()
|
||||
.stream().collect(Collectors.toMap(o -> o.getId(), o -> o));
|
||||
|
||||
for (OrderItemDO orderItemDO : orderItemDOList) {
|
||||
ProductSpuBO productSpuBO = productSpuBOMap.get(orderItemDO.getSkuId());
|
||||
if (productSpuBO.getQuantity() <= 0) {
|
||||
return ServiceExceptionUtil.error(OrderErrorCodeEnum.ORDER_INSUFFICIENT_INVENTORY.getCode());
|
||||
}
|
||||
|
||||
if (productSpuBO.getPrice() <= 0) {
|
||||
return ServiceExceptionUtil.error(OrderErrorCodeEnum.ORDER_GOODS_AMOUNT_INCORRECT.getCode());
|
||||
}
|
||||
|
||||
orderItemDO.setSkuImage(Optional.ofNullable(productSpuBO.getPicUrls().get(0)).get());
|
||||
orderItemDO.setSkuName(productSpuBO.getName());
|
||||
orderItemDO.setPrice(productSpuBO.getPrice());
|
||||
|
||||
int payAmount = orderItemDO.getQuantity() * orderItemDO.getPrice();
|
||||
orderItemDO.setPayAmount(payAmount);
|
||||
}
|
||||
|
||||
// order
|
||||
Integer totalAmount = orderCommon.calculatedAmount(orderItemDOList);
|
||||
OrderDO orderDO = new OrderDO()
|
||||
.setUserId(userId)
|
||||
.setOrderNo(UUID.randomUUID().toString().replace("-", ""))
|
||||
.setPayAmount(-1) // 先设置一个默认值,金额在下面计算
|
||||
.setPayAmount(totalAmount)
|
||||
.setClosingTime(null)
|
||||
.setDeliveryTime(null)
|
||||
.setPaymentTime(null)
|
||||
@ -173,6 +225,12 @@ public class OrderServiceImpl implements OrderService {
|
||||
orderMapper.insert(orderDO);
|
||||
|
||||
// 收件人信息
|
||||
CommonResult<UserAddressBO> userAddressResult = userAddressService.getAddress(userId, orderCreateDTO.getUserAddressId());
|
||||
if (userAddressResult.isError()) {
|
||||
return ServiceExceptionUtil.error(OrderErrorCodeEnum.ORDER_GET_USER_ADDRESS_FAIL.getCode());
|
||||
}
|
||||
UserAddressBO userAddressBO = userAddressResult.getData();
|
||||
OrderRecipientDO orderRecipientDO = OrderRecipientConvert.INSTANCE.convert(userAddressBO);
|
||||
orderRecipientDO
|
||||
.setOrderId(orderDO.getId())
|
||||
.setType(OrderRecipientTypeEnum.EXPRESS.getValue())
|
||||
@ -183,14 +241,9 @@ public class OrderServiceImpl implements OrderService {
|
||||
|
||||
// order item
|
||||
orderItemDOList.forEach(orderItemDO -> {
|
||||
int goodsPrice = 1000; // 商品单价
|
||||
orderItemDO
|
||||
.setOrderId(orderDO.getId())
|
||||
.setOrderNo(orderDO.getOrderNo())
|
||||
.setPrice(goodsPrice)
|
||||
.setPayAmount(orderItemDO.getQuantity() * orderItemDO.getPrice())
|
||||
.setSkuName("夏季衣服-默认数据")
|
||||
.setSkuImage("//img.alicdn.com/tps/i4/TB1TiGwKXXXXXXRXFXXqVMCNVXX-400-400.jpg_350x350q90.jpg_.webp")
|
||||
.setPaymentTime(null)
|
||||
.setDeliveryTime(null)
|
||||
.setReceiverTime(null)
|
||||
@ -201,20 +254,31 @@ public class OrderServiceImpl implements OrderService {
|
||||
.setDeleted(DeletedStatusEnum.DELETED_NO.getValue())
|
||||
.setCreateTime(new Date())
|
||||
.setUpdateTime(null);
|
||||
|
||||
orderItemMapper.insert(orderItemDO);
|
||||
});
|
||||
|
||||
// 更新订单金额
|
||||
Integer totalAmount = orderCommon.calculatedAmount(orderItemDOList);
|
||||
orderMapper.updateById(
|
||||
new OrderDO()
|
||||
.setId(orderDO.getId())
|
||||
.setPayAmount(totalAmount)
|
||||
// 创建预订单
|
||||
// TODO sin 支付订单 orderSubject 暂时取第一个子订单商品信息
|
||||
String orderSubject = orderItemDOList.get(0).getSkuName();
|
||||
Date expireTime = DateUtil.addDate(Calendar.MINUTE, PAY_EXPIRE_TIME);
|
||||
CommonResult commonResult = payTransactionService.createTransaction(
|
||||
new PayTransactionCreateDTO()
|
||||
.setCreateIp(orderCreateDTO.getIp())
|
||||
.setAppId(PayAppId.APP_ID_1024)
|
||||
.setExpireTime(expireTime)
|
||||
.setPrice(orderDO.getPayAmount())
|
||||
.setOrderSubject(orderSubject)
|
||||
.setOrderMemo(orderDO.getRemark())
|
||||
.setOrderDescription("")
|
||||
);
|
||||
|
||||
// TODO: 2019-03-17 Sin 需要发送 创建成果 MQ 消息
|
||||
if (commonResult.isError()) {
|
||||
//手动开启事务回滚
|
||||
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
|
||||
return ServiceExceptionUtil.error(OrderErrorCodeEnum.ORDER_GET_PAY_FAIL.getCode());
|
||||
}
|
||||
|
||||
// TODO: 2019-03-17 Sin 需要发送 创建成果 MQ 消息,业务扩展和统计
|
||||
return CommonResult.success(
|
||||
new OrderCreateBO()
|
||||
.setId(orderDO.getId())
|
||||
|
@ -3,9 +3,11 @@
|
||||
<mapper namespace="cn.iocoder.mall.order.biz.dao.OrderItemMapper">
|
||||
|
||||
<sql id="FIELDS">
|
||||
id, order_id, order_no, sku_id, sku_name, sku_image, quantity, price, pay_amount,
|
||||
id, order_id, order_no, sku_id, sku_name, sku_image, order_logistics_id,
|
||||
quantity, price, pay_amount,
|
||||
payment_time, delivery_time, receiver_time, closing_time,
|
||||
has_return_exchange, delivery_type, status, create_time, update_time, deleted
|
||||
has_return_exchange, delivery_type, status,
|
||||
create_time, update_time, deleted
|
||||
</sql>
|
||||
|
||||
<!--
|
||||
@ -13,11 +15,14 @@
|
||||
-->
|
||||
<insert id="insert" parameterType="OrderItemDO" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
|
||||
INSERT INTO `order_item` (
|
||||
order_id, order_no, sku_id, sku_name, sku_image, quantity, price, pay_amount,
|
||||
order_id, order_no, sku_id, sku_name, sku_image, order_logistics_id,
|
||||
quantity, price, pay_amount,
|
||||
payment_time, delivery_time, receiver_time, closing_time,
|
||||
has_return_exchange, delivery_type, status, create_time, update_time, deleted
|
||||
has_return_exchange, delivery_type, status,
|
||||
create_time, update_time, deleted
|
||||
) VALUES (
|
||||
#{orderId}, #{orderNo}, #{skuId}, #{quantity}, #{price},
|
||||
#{orderId}, #{orderNo}, #{skuId}, #{skuName}, #{skuImage}, #{orderLogisticsId},
|
||||
#{quantity}, #{price}, #{payAmount},
|
||||
#{paymentTime}, #{deliveryTime}, #{receiverTime}, #{closingTime},
|
||||
#{hasReturnExchange}, #{deliveryType}, #{status},
|
||||
#{createTime}, #{updateTime}, #{deleted}
|
||||
|
@ -14,15 +14,15 @@
|
||||
-->
|
||||
<insert id="insert" parameterType="OrderDO" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
|
||||
INSERT INTO `order` (
|
||||
user_id, order_no, price, payment_time,
|
||||
user_id, order_no, pay_amount, payment_time,
|
||||
delivery_time, receiver_time, closing_time,
|
||||
has_return_exchange, status, remark,
|
||||
create_time, update_time, `deleted`
|
||||
has_return_exchange,
|
||||
status, remark, create_time, update_time, `deleted`
|
||||
) VALUES (
|
||||
#{userId}, #{orderNo}, #{price}, #{paymentTime},
|
||||
#{userId}, #{orderNo}, #{payAmount}, #{paymentTime},
|
||||
#{deliveryTime}, #{receiverTime}, #{closingTime},
|
||||
#{hasReturnExchange}, #{status}, #{remark},
|
||||
#{createTime}, #{updateTime}, #{deleted}
|
||||
#{hasReturnExchange},
|
||||
#{status}, #{remark}, #{createTime}, #{updateTime}, #{deleted}
|
||||
)
|
||||
</insert>
|
||||
|
||||
|
@ -36,24 +36,24 @@ public class OrderServiceImplTest {
|
||||
|
||||
@Test
|
||||
public void createOrderTest() {
|
||||
|
||||
Integer userId = 1;
|
||||
OrderCreateItemDTO orderCreateItemDTO
|
||||
= new OrderCreateItemDTO()
|
||||
.setSkuId(1)
|
||||
.setQuantity(1);
|
||||
|
||||
CommonResult<OrderCreateBO> result = orderService.createOrder(
|
||||
userId,
|
||||
new OrderCreateDTO()
|
||||
.setRemark("")
|
||||
.setName("张三")
|
||||
.setMobile("13301926050")
|
||||
.setAddress("深圳市福田区")
|
||||
.setAreaNo("1000100")
|
||||
.setOrderItems(Arrays.asList(orderCreateItemDTO)));
|
||||
|
||||
OrderDO orderDO = orderMapper.selectById(result.getData().getId());
|
||||
Assert.assertNotNull("创建的订单不存在!", orderDO);
|
||||
//
|
||||
// Integer userId = 1;
|
||||
// OrderCreateItemDTO orderCreateItemDTO
|
||||
// = new OrderCreateItemDTO()
|
||||
// .setSkuId(1)
|
||||
// .setQuantity(1);
|
||||
//
|
||||
// CommonResult<OrderCreateBO> result = orderService.createOrder(
|
||||
// userId,
|
||||
// new OrderCreateDTO()
|
||||
// .setRemark("")
|
||||
// .setName("张三")
|
||||
// .setMobile("13301926050")
|
||||
// .setAddress("深圳市福田区")
|
||||
// .setAreaNo("1000100")
|
||||
// .setOrderItems(Arrays.asList(orderCreateItemDTO)));
|
||||
//
|
||||
// OrderDO orderDO = orderMapper.selectById(result.getData().getId());
|
||||
// Assert.assertNotNull("创建的订单不存在!", orderDO);
|
||||
}
|
||||
}
|
||||
|
@ -3,13 +3,15 @@ package cn.iocoder.mall.user.api.bo;
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* @author Sin
|
||||
* @time 2019-04-06 13:28
|
||||
*/
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
public class UserAddressBO {
|
||||
public class UserAddressBO implements Serializable {
|
||||
|
||||
|
||||
/**
|
||||
|
@ -3,11 +3,12 @@ package cn.iocoder.mall.user.api.bo;
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
public class UserBO {
|
||||
public class UserBO implements Serializable {
|
||||
|
||||
/**
|
||||
* 用户编号
|
||||
|
@ -3,11 +3,12 @@ package cn.iocoder.mall.user.api.bo;
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
public class UserPageBO {
|
||||
public class UserPageBO implements Serializable {
|
||||
|
||||
/**
|
||||
* 用户数组
|
||||
|
@ -24,6 +24,7 @@ import java.util.List;
|
||||
* @time 2019-04-06 13:26
|
||||
*/
|
||||
@Service
|
||||
@com.alibaba.dubbo.config.annotation.Service(validation = "true")
|
||||
public class UserAddressServiceImpl implements UserAddressService {
|
||||
|
||||
@Autowired
|
||||
|
Loading…
Reference in New Issue
Block a user