- 修改订单展示

- 增加实付金额修改功能
pull/1/head
sin 2019-03-29 17:14:53 +08:00
parent 3cbe0ba3b6
commit 0d14138ef2
27 changed files with 665 additions and 349 deletions

View File

@ -1,9 +1,9 @@
package cn.iocoder.common.framework.util;
import org.springframework.util.ReflectionUtils;
import java.lang.reflect.Field;
import java.util.*;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;
public class CollectionUtil {
@ -14,54 +14,4 @@ public class CollectionUtil {
public static <T> Set<T> asSet(T... objs) {
return new HashSet<>(Arrays.asList(objs));
}
/**
* KEY, objsMultimapMap
*
* @param objs
* @param keyClazz {@code property}
* @param valClazz
* @param property
* @param <K>
* @param <V>
* @return Map
*/
@SuppressWarnings("unchecked")
public static <K, V> Map<K, List<V>> buildMultimap(List<V> objs, Class<K> keyClazz, Class<V> valClazz,
String property) {
if (objs.isEmpty()) {
return Collections.EMPTY_MAP;
}
Map<K, List<V>> results = new HashMap<>(objs.size());
try {
Field field = getField(objs, property);
for (V obj : objs) {
K key = (K) field.get(obj);
List<V> value = results.get(key);
if (value == null) {
results.put(key, value = new ArrayList<>());
}
value.add(obj);
}
} catch (Exception e) {
throw new RuntimeException(e);
}
return results;
}
/**
* object field
*
* @param objs
* @param property
* @return Field, field访
*/
public static Field getField(List<?> objs, String property) {
Field field = ReflectionUtils.findField(objs.get(0).getClass(), property);
if (!field.isAccessible()) {
field.setAccessible(true);
}
return field;
}
}

View File

@ -2,20 +2,19 @@ package cn.iocoder.mall.order.application.controller.admins;
import cn.iocoder.common.framework.vo.CommonResult;
import cn.iocoder.mall.order.api.OrderService;
import cn.iocoder.mall.order.api.bo.OrderPageBO;
import cn.iocoder.mall.order.api.dto.*;
import cn.iocoder.mall.order.application.convert.OrderConvertAPP;
import cn.iocoder.mall.order.application.vo.OrderItemUpdateVO;
import cn.iocoder.mall.order.application.vo.OrderLogisticsVO;
import cn.iocoder.mall.order.application.vo.OrderPageQueryVO;
import cn.iocoder.mall.order.application.vo.OrderPageVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.ibatis.annotations.Param;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* API(admins)
*
@ -37,15 +36,23 @@ public class AdminsOrderController {
return orderService.getOrderPage(orderQueryDTO);
}
@PutMapping("order_item/update_pay_amount")
@ApiOperation("更新-订单item实付金额")
public CommonResult updateOrderItemPayAmount(@RequestParam("orderId") Integer orderId,
@RequestParam("orderItemId") Integer orderItemId,
@RequestParam("payAmount") Integer payAmount) {
return orderService.updateOrderItemPayAmount(orderId, orderItemId, payAmount);
}
@PutMapping("order_item/update")
@ApiOperation("订单item更新")
@ApiOperation("更新-订单item")
public CommonResult updateOrderItem(@RequestBody @Validated OrderItemUpdateVO orderItemUpdateVO) {
OrderItemUpdateDTO dto = OrderConvertAPP.INSTANCE.convertPageBO(orderItemUpdateVO);
return orderService.updateOrderItem(dto);
}
@PutMapping("logistics/update")
@ApiOperation("订单物流更新")
@ApiOperation("更新-订单物流")
public CommonResult updateLogistics(@RequestBody @Validated OrderLogisticsVO orderLogisticsVO) {
OrderLogisticsUpdateDTO dto = OrderConvertAPP.INSTANCE.convertPageBO(orderLogisticsVO);
return orderService.updateLogistics(dto);

View File

@ -1,6 +1,6 @@
package cn.iocoder.mall.order.application.vo;
import cn.iocoder.mall.order.api.dto.OrderBO;
import cn.iocoder.mall.order.api.bo.OrderBO;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;

View File

@ -1,10 +1,10 @@
package cn.iocoder.mall.order.api;
import cn.iocoder.common.framework.vo.CommonResult;
import cn.iocoder.mall.order.api.bo.OrderCreateBO;
import cn.iocoder.mall.order.api.bo.OrderPageBO;
import cn.iocoder.mall.order.api.dto.*;
import java.util.List;
/**
* service
*
@ -28,7 +28,7 @@ public interface OrderService {
* @param orderCreateDTO
* @return
*/
CommonResult<cn.iocoder.mall.order.api.bo.OrderBO> createOrder(Integer userId, OrderCreateDTO orderCreateDTO);
CommonResult<OrderCreateBO> createOrder(Integer userId, OrderCreateDTO orderCreateDTO);
/**
* item -
@ -38,6 +38,16 @@ public interface OrderService {
*/
CommonResult updateOrderItem(OrderItemUpdateDTO orderItemUpdateDTO);
/**
* item - payAmount()
*
* @param orderId
* @param orderItemId
* @param payAmount
* @return
*/
CommonResult updateOrderItemPayAmount(Integer orderId, Integer orderItemId, Integer payAmount);
/**
* item -
*

View File

@ -1,34 +1,114 @@
package cn.iocoder.mall.order.api.bo;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
/**
* BO
* page
*
* @author Sin
* @time 2019-03-16 14:38
* @time 2019-03-23 14:30
*/
public class OrderBO implements Serializable {
/**
*
* id
*/
private Integer id;
/**
*
*/
private Integer userId;
/**
* id
*/
private Integer orderLogisticsId;
/**
*
*/
private String orderNo;
/**
*
*
*/
private Integer money;
private Integer payAmount;
///
/// 时间信息
/**
*
*/
private Date paymentTime;
/**
*
*/
private Date deliveryTime;
/**
*
*/
private Date receiverTime;
/**
* -> status =
*/
private Date closingTime;
///
/// 其他
/**
* 退
*
* - 0
* - 1
* - 2退
* - 3 + 退
*/
private Integer hasReturnExchange;
/**
* ()
*
* - 0
* - 1
* - 2
* - 3
* - 4
*/
private Integer status;
/**
*
*/
private String remark;
///
/// 关联信息
/**
* orderItem
*/
private List<OrderItemBO> orderItems;
/**
*
*/
private OrderLogisticsBO orderLogistics;
@Override
public String toString() {
return "OrderBO{" +
"id=" + id +
", userId=" + userId +
", orderLogisticsId=" + orderLogisticsId +
", orderNo='" + orderNo + '\'' +
", money=" + money +
", payAmount=" + payAmount +
", paymentTime=" + paymentTime +
", deliveryTime=" + deliveryTime +
", receiverTime=" + receiverTime +
", closingTime=" + closingTime +
", hasReturnExchange=" + hasReturnExchange +
", status=" + status +
", remark='" + remark + '\'' +
", orderItems=" + orderItems +
", orderLogistics=" + orderLogistics +
'}';
}
@ -41,6 +121,24 @@ public class OrderBO implements Serializable {
return this;
}
public Integer getUserId() {
return userId;
}
public OrderBO setUserId(Integer userId) {
this.userId = userId;
return this;
}
public Integer getOrderLogisticsId() {
return orderLogisticsId;
}
public OrderBO setOrderLogisticsId(Integer orderLogisticsId) {
this.orderLogisticsId = orderLogisticsId;
return this;
}
public String getOrderNo() {
return orderNo;
}
@ -50,12 +148,93 @@ public class OrderBO implements Serializable {
return this;
}
public Integer getMoney() {
return money;
public Integer getPayAmount() {
return payAmount;
}
public OrderBO setMoney(Integer money) {
this.money = money;
public OrderBO setPayAmount(Integer payAmount) {
this.payAmount = payAmount;
return this;
}
public Date getPaymentTime() {
return paymentTime;
}
public OrderBO setPaymentTime(Date paymentTime) {
this.paymentTime = paymentTime;
return this;
}
public Date getDeliveryTime() {
return deliveryTime;
}
public OrderBO setDeliveryTime(Date deliveryTime) {
this.deliveryTime = deliveryTime;
return this;
}
public Date getReceiverTime() {
return receiverTime;
}
public OrderBO setReceiverTime(Date receiverTime) {
this.receiverTime = receiverTime;
return this;
}
public Date getClosingTime() {
return closingTime;
}
public OrderBO setClosingTime(Date closingTime) {
this.closingTime = closingTime;
return this;
}
public Integer getHasReturnExchange() {
return hasReturnExchange;
}
public OrderBO setHasReturnExchange(Integer hasReturnExchange) {
this.hasReturnExchange = hasReturnExchange;
return this;
}
public Integer getStatus() {
return status;
}
public OrderBO setStatus(Integer status) {
this.status = status;
return this;
}
public String getRemark() {
return remark;
}
public OrderBO setRemark(String remark) {
this.remark = remark;
return this;
}
public List<OrderItemBO> getOrderItems() {
return orderItems;
}
public OrderBO setOrderItems(List<OrderItemBO> orderItems) {
this.orderItems = orderItems;
return this;
}
public OrderLogisticsBO getOrderLogistics() {
return orderLogistics;
}
public OrderBO setOrderLogistics(OrderLogisticsBO orderLogistics) {
this.orderLogistics = orderLogistics;
return this;
}
}

View File

@ -0,0 +1,61 @@
package cn.iocoder.mall.order.api.bo;
import java.io.Serializable;
/**
* BO
*
* @author Sin
* @time 2019-03-16 14:38
*/
public class OrderCreateBO implements Serializable {
/**
*
*/
private Integer id;
/**
*
*/
private String orderNo;
/**
*
*/
private Integer payAmount;
@Override
public String toString() {
return "OrderCreateBO{" +
"id=" + id +
", orderNo='" + orderNo + '\'' +
", payAmount=" + payAmount +
'}';
}
public Integer getId() {
return id;
}
public OrderCreateBO setId(Integer id) {
this.id = id;
return this;
}
public String getOrderNo() {
return orderNo;
}
public OrderCreateBO setOrderNo(String orderNo) {
this.orderNo = orderNo;
return this;
}
public Integer getPayAmount() {
return payAmount;
}
public OrderCreateBO setPayAmount(Integer payAmount) {
this.payAmount = payAmount;
return this;
}
}

View File

@ -1,4 +1,4 @@
package cn.iocoder.mall.order.api.dto;
package cn.iocoder.mall.order.api.bo;
import java.io.Serializable;
import java.util.Date;
@ -27,14 +27,26 @@ public class OrderItemBO implements Serializable {
*
*/
private Integer skuId;
/**
*
*/
private String skuName;
/**
*
*/
private String skuImage;
/**
*
*/
private Integer quantity;
/**
* ()
* ()
*/
private Integer price;
/**
*
*/
private Integer payAmount;
///
/// 时间信息
@ -79,21 +91,40 @@ public class OrderItemBO implements Serializable {
*/
private Integer status;
/**
*
*/
private Date createTime;
/**
*
*/
private Date updateTime;
/**
*
*/
private Integer deleted;
@Override
public String toString() {
return "OrderItemDO{" +
return "OrderItemBO{" +
"id=" + id +
", orderId=" + orderId +
", orderNo='" + orderNo + '\'' +
", skuId='" + skuId + '\'' +
", skuId=" + skuId +
", skuName='" + skuName + '\'' +
", skuImage='" + skuImage + '\'' +
", quantity=" + quantity +
", price=" + price +
", payAmount=" + payAmount +
", paymentTime=" + paymentTime +
", deliveryTime=" + deliveryTime +
", receiverTime=" + receiverTime +
", closingTime=" + closingTime +
", hasReturnExchange=" + hasReturnExchange +
", status=" + status +
", createTime=" + createTime +
", updateTime=" + updateTime +
", deleted=" + deleted +
'}';
}
@ -133,6 +164,24 @@ public class OrderItemBO implements Serializable {
return this;
}
public String getSkuName() {
return skuName;
}
public OrderItemBO setSkuName(String skuName) {
this.skuName = skuName;
return this;
}
public String getSkuImage() {
return skuImage;
}
public OrderItemBO setSkuImage(String skuImage) {
this.skuImage = skuImage;
return this;
}
public Integer getQuantity() {
return quantity;
}
@ -151,6 +200,15 @@ public class OrderItemBO implements Serializable {
return this;
}
public Integer getPayAmount() {
return payAmount;
}
public OrderItemBO setPayAmount(Integer payAmount) {
this.payAmount = payAmount;
return this;
}
public Date getPaymentTime() {
return paymentTime;
}
@ -204,4 +262,31 @@ public class OrderItemBO implements Serializable {
this.status = status;
return this;
}
public Date getCreateTime() {
return createTime;
}
public OrderItemBO setCreateTime(Date createTime) {
this.createTime = createTime;
return this;
}
public Date getUpdateTime() {
return updateTime;
}
public OrderItemBO setUpdateTime(Date updateTime) {
this.updateTime = updateTime;
return this;
}
public Integer getDeleted() {
return deleted;
}
public OrderItemBO setDeleted(Integer deleted) {
this.deleted = deleted;
return this;
}
}

View File

@ -0,0 +1,103 @@
package cn.iocoder.mall.order.api.bo;
import cn.iocoder.common.framework.dataobject.BaseDO;
/**
*
*
* @author Sin
* @time 2019-03-19 20:47
*/
public class OrderLogisticsBO extends BaseDO {
/**
* id
*/
private Integer id;
/**
*
*/
private String areaNo;
/**
*
*/
private String name;
/**
*
*/
private String mobile;
/**
*
*/
private String address;
/**
*
*/
private String logisticsNo;
@Override
public String toString() {
return "OrderLogisticsDO{" +
"id=" + id +
", areaNo='" + areaNo + '\'' +
", name='" + name + '\'' +
", mobile='" + mobile + '\'' +
", address='" + address + '\'' +
", logisticsNo='" + logisticsNo + '\'' +
'}';
}
public Integer getId() {
return id;
}
public OrderLogisticsBO setId(Integer id) {
this.id = id;
return this;
}
public String getAreaNo() {
return areaNo;
}
public OrderLogisticsBO setAreaNo(String areaNo) {
this.areaNo = areaNo;
return this;
}
public String getName() {
return name;
}
public OrderLogisticsBO setName(String name) {
this.name = name;
return this;
}
public String getMobile() {
return mobile;
}
public OrderLogisticsBO setMobile(String mobile) {
this.mobile = mobile;
return this;
}
public String getAddress() {
return address;
}
public OrderLogisticsBO setAddress(String address) {
this.address = address;
return this;
}
public String getLogisticsNo() {
return logisticsNo;
}
public OrderLogisticsBO setLogisticsNo(String logisticsNo) {
this.logisticsNo = logisticsNo;
return this;
}
}

View File

@ -1,4 +1,4 @@
package cn.iocoder.mall.order.api.dto;
package cn.iocoder.mall.order.api.bo;
import java.io.Serializable;
import java.util.List;

View File

@ -13,6 +13,7 @@ public enum OrderErrorCodeEnum {
ORDER_ITEM_ONLY_ONE(1000001000, "订单Item只有一个!"),
ORDER_GET_SKU_FAIL(1000001001, "获取商品失败!"),
ORDER_GET_SKU_NOT_EXISTENT(1000001002, "获取的商品不存在!"),
ORDER_PAY_AMOUNT_NOT_NEGATIVE(1000001002, "支付金额不能为负数!"),
;
private final int code;

View File

@ -1,226 +0,0 @@
package cn.iocoder.mall.order.api.dto;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
/**
* page
*
* @author Sin
* @time 2019-03-23 14:30
*/
public class OrderBO implements Serializable {
/**
* id
*/
private Integer id;
/**
*
*/
private Integer userId;
/**
* id
*/
private Integer orderLogisticsId;
/**
*
*/
private String orderNo;
/**
*
*/
private Integer price;
///
/// 时间信息
/**
*
*/
private Date paymentTime;
/**
*
*/
private Date deliveryTime;
/**
*
*/
private Date receiverTime;
/**
* -> status =
*/
private Date closingTime;
///
/// 其他
/**
* 退
*
* - 0
* - 1
* - 2退
* - 3 + 退
*/
private Integer hasReturnExchange;
/**
* ()
*
* - 0
* - 1
* - 2
* - 3
* - 4
*/
private Integer status;
/**
*
*/
private String remark;
///
/// 关联信息
/**
* orderItem
*/
private List<OrderItemBO> orderItems;
@Override
public String toString() {
return "OrderBO{" +
"id=" + id +
", userId=" + userId +
", orderLogisticsId=" + orderLogisticsId +
", orderNo='" + orderNo + '\'' +
", price=" + price +
", paymentTime=" + paymentTime +
", deliveryTime=" + deliveryTime +
", receiverTime=" + receiverTime +
", closingTime=" + closingTime +
", hasReturnExchange=" + hasReturnExchange +
", status=" + status +
", remark='" + remark + '\'' +
", orderItems=" + orderItems +
'}';
}
public Integer getId() {
return id;
}
public OrderBO setId(Integer id) {
this.id = id;
return this;
}
public Integer getUserId() {
return userId;
}
public OrderBO setUserId(Integer userId) {
this.userId = userId;
return this;
}
public Integer getOrderLogisticsId() {
return orderLogisticsId;
}
public OrderBO setOrderLogisticsId(Integer orderLogisticsId) {
this.orderLogisticsId = orderLogisticsId;
return this;
}
public String getOrderNo() {
return orderNo;
}
public OrderBO setOrderNo(String orderNo) {
this.orderNo = orderNo;
return this;
}
public Integer getPrice() {
return price;
}
public OrderBO setPrice(Integer price) {
this.price = price;
return this;
}
public Date getPaymentTime() {
return paymentTime;
}
public OrderBO setPaymentTime(Date paymentTime) {
this.paymentTime = paymentTime;
return this;
}
public Date getDeliveryTime() {
return deliveryTime;
}
public OrderBO setDeliveryTime(Date deliveryTime) {
this.deliveryTime = deliveryTime;
return this;
}
public Date getReceiverTime() {
return receiverTime;
}
public OrderBO setReceiverTime(Date receiverTime) {
this.receiverTime = receiverTime;
return this;
}
public Date getClosingTime() {
return closingTime;
}
public OrderBO setClosingTime(Date closingTime) {
this.closingTime = closingTime;
return this;
}
public Integer getHasReturnExchange() {
return hasReturnExchange;
}
public OrderBO setHasReturnExchange(Integer hasReturnExchange) {
this.hasReturnExchange = hasReturnExchange;
return this;
}
public Integer getStatus() {
return status;
}
public OrderBO setStatus(Integer status) {
this.status = status;
return this;
}
public String getRemark() {
return remark;
}
public OrderBO setRemark(String remark) {
this.remark = remark;
return this;
}
public List<OrderItemBO> getOrderItems() {
return orderItems;
}
public OrderBO setOrderItems(List<OrderItemBO> orderItems) {
this.orderItems = orderItems;
return this;
}
}

View File

@ -32,6 +32,11 @@
<artifactId>dubbo</artifactId>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>27.0.1-jre</version>
</dependency>
<dependency>
<groupId>mysql</groupId>

View File

@ -1,6 +1,6 @@
package cn.iocoder.mall.order.application.convert;
package cn.iocoder.mall.order.convert;
import cn.iocoder.mall.order.api.dto.OrderBO;
import cn.iocoder.mall.order.api.bo.OrderBO;
import cn.iocoder.mall.order.dataobject.OrderDO;
import org.mapstruct.Mapper;
import org.mapstruct.Mappings;

View File

@ -1,7 +1,7 @@
package cn.iocoder.mall.order.application.convert;
package cn.iocoder.mall.order.convert;
import cn.iocoder.mall.order.api.dto.OrderCreateItemDTO;
import cn.iocoder.mall.order.api.dto.OrderItemBO;
import cn.iocoder.mall.order.api.bo.OrderItemBO;
import cn.iocoder.mall.order.api.dto.OrderItemUpdateDTO;
import cn.iocoder.mall.order.dataobject.OrderItemDO;
import org.mapstruct.Mapper;

View File

@ -1,5 +1,6 @@
package cn.iocoder.mall.order.application.convert;
package cn.iocoder.mall.order.convert;
import cn.iocoder.mall.order.api.bo.OrderLogisticsBO;
import cn.iocoder.mall.order.api.dto.OrderCreateDTO;
import cn.iocoder.mall.order.api.dto.OrderLogisticsUpdateDTO;
import cn.iocoder.mall.order.dataobject.OrderLogisticsDO;
@ -7,6 +8,8 @@ import org.mapstruct.Mapper;
import org.mapstruct.Mappings;
import org.mapstruct.factory.Mappers;
import java.util.List;
/**
* convert
*
@ -23,4 +26,7 @@ public interface OrderLogisticsConvert {
@Mappings({})
OrderLogisticsDO convert(OrderLogisticsUpdateDTO orderLogisticsDTO);
@Mappings({})
List<OrderLogisticsBO> convertOrderLogisticsBO(List<OrderLogisticsDO> orderLogisticsDOList);
}

View File

@ -46,12 +46,12 @@ public interface OrderItemMapper {
* - orderIds status
*
* @param orderIds
* @param status
* @param deleted
* @return
*/
List<OrderItemDO> selectByOrderIdsAndStatus(
List<OrderItemDO> selectByOrderIdsAndDeleted(
@Param("orderIds") Collection<Integer> orderIds,
@Param("status") Integer status
@Param("deleted") Integer deleted
);
/**

View File

@ -1,8 +1,12 @@
package cn.iocoder.mall.order.dao;
import cn.iocoder.mall.order.dataobject.OrderLogisticsDO;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import java.util.Collection;
import java.util.List;
/**
* item mapper
*
@ -25,4 +29,14 @@ public interface OrderLogisticsMapper {
* @param orderLogisticsDO
*/
void updateById(OrderLogisticsDO orderLogisticsDO);
/**
* - orderId
*
* @param ids
* @return
*/
List<OrderLogisticsDO> selectByIds(
@Param("ids") Collection<Integer> ids
);
}

View File

@ -31,7 +31,7 @@ public class OrderDO extends DeletableDO {
/**
*
*/
private Integer price;
private Integer payAmount;
///
/// 时间信息
@ -87,7 +87,7 @@ public class OrderDO extends DeletableDO {
", userId=" + userId +
", orderLogisticsId=" + orderLogisticsId +
", orderNo='" + orderNo + '\'' +
", price=" + price +
", payAmount=" + payAmount +
", paymentTime=" + paymentTime +
", deliveryTime=" + deliveryTime +
", receiverTime=" + receiverTime +
@ -134,12 +134,12 @@ public class OrderDO extends DeletableDO {
return this;
}
public Integer getPrice() {
return price;
public Integer getPayAmount() {
return payAmount;
}
public OrderDO setPrice(Integer price) {
this.price = price;
public OrderDO setPayAmount(Integer payAmount) {
this.payAmount = payAmount;
return this;
}

View File

@ -28,14 +28,26 @@ public class OrderItemDO extends DeletableDO {
*
*/
private Integer skuId;
/**
*
*/
private String skuName;
/**
*
*/
private String skuImage;
/**
*
*/
private Integer quantity;
/**
* ()
* ()
*/
private Integer price;
/**
*
*/
private Integer payAmount;
///
/// 时间信息
@ -86,9 +98,12 @@ public class OrderItemDO extends DeletableDO {
"id=" + id +
", orderId=" + orderId +
", orderNo='" + orderNo + '\'' +
", skuId='" + skuId + '\'' +
", skuId=" + skuId +
", skuName=" + skuName +
", skuImage=" + skuImage +
", quantity=" + quantity +
", price=" + price +
", payAmount=" + payAmount +
", paymentTime=" + paymentTime +
", deliveryTime=" + deliveryTime +
", receiverTime=" + receiverTime +
@ -134,6 +149,24 @@ public class OrderItemDO extends DeletableDO {
return this;
}
public String getSkuName() {
return skuName;
}
public OrderItemDO setSkuName(String skuName) {
this.skuName = skuName;
return this;
}
public String getSkuImage() {
return skuImage;
}
public OrderItemDO setSkuImage(String skuImage) {
this.skuImage = skuImage;
return this;
}
public Integer getQuantity() {
return quantity;
}
@ -152,6 +185,15 @@ public class OrderItemDO extends DeletableDO {
return this;
}
public Integer getPayAmount() {
return payAmount;
}
public OrderItemDO setPayAmount(Integer payAmount) {
this.payAmount = payAmount;
return this;
}
public Date getPaymentTime() {
return paymentTime;
}

View File

@ -15,6 +15,10 @@ public class OrderLogisticsDO extends BaseDO {
* id
*/
private Integer id;
/**
*
*/
private Integer orderId;
/**
*
*/
@ -40,6 +44,7 @@ public class OrderLogisticsDO extends BaseDO {
public String toString() {
return "OrderLogisticsDO{" +
"id=" + id +
", orderId=" + orderId +
", areaNo='" + areaNo + '\'' +
", name='" + name + '\'' +
", mobile='" + mobile + '\'' +
@ -57,6 +62,15 @@ public class OrderLogisticsDO extends BaseDO {
return this;
}
public Integer getOrderId() {
return orderId;
}
public OrderLogisticsDO setOrderId(Integer orderId) {
this.orderId = orderId;
return this;
}
public String getAreaNo() {
return areaNo;
}

View File

@ -1,24 +1,25 @@
package cn.iocoder.mall.order.service;
import cn.iocoder.common.framework.constant.DeletedStatusEnum;
import cn.iocoder.common.framework.util.CollectionUtil;
import cn.iocoder.common.framework.util.ServiceExceptionUtil;
import cn.iocoder.common.framework.vo.CommonResult;
import cn.iocoder.mall.order.OrderCommon;
import cn.iocoder.mall.order.api.OrderService;
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.dto.*;
import cn.iocoder.mall.order.application.convert.OrderConvert;
import cn.iocoder.mall.order.application.convert.OrderItemConvert;
import cn.iocoder.mall.order.application.convert.OrderLogisticsConvert;
import cn.iocoder.mall.order.convert.OrderConvert;
import cn.iocoder.mall.order.convert.OrderItemConvert;
import cn.iocoder.mall.order.convert.OrderLogisticsConvert;
import cn.iocoder.mall.order.dao.OrderItemMapper;
import cn.iocoder.mall.order.dao.OrderLogisticsMapper;
import cn.iocoder.mall.order.dao.OrderMapper;
import cn.iocoder.mall.order.dataobject.OrderDO;
import cn.iocoder.mall.order.dataobject.OrderItemDO;
import cn.iocoder.mall.order.dataobject.OrderLogisticsDO;
import com.google.common.collect.Lists;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -58,15 +59,36 @@ public class OrderServiceImpl implements OrderService {
List<OrderDO> orderDOList = orderMapper.selectPage(orderQueryDTO);
// 获取订单 id
Set<Integer> orderIds = orderDOList.stream().map(orderDO -> orderDO.getId()).collect(Collectors.toSet());
Set<Integer> orderIds = orderDOList.stream()
.map(orderDO -> orderDO.getId())
.collect(Collectors.toSet());
Set<Integer> orderLogisticsIds = orderDOList.stream()
.map(orderDO -> orderDO.getOrderLogisticsId())
.collect(Collectors.toSet());
// 获取物流信息
List<OrderLogisticsDO> orderLogisticsDOList = orderLogisticsMapper.selectByIds(orderLogisticsIds);
List<OrderLogisticsBO> orderLogisticsBOList
= OrderLogisticsConvert.INSTANCE.convertOrderLogisticsBO(orderLogisticsDOList);
Map<Integer, OrderLogisticsBO> orderLogisticsDOMap
= orderLogisticsBOList.stream().collect(Collectors.toMap(OrderLogisticsBO::getId, obj -> obj));
// 获取 订单的 items
List<OrderItemDO> orderItemDOList = orderItemMapper
.selectByOrderIdsAndStatus(orderIds, DeletedStatusEnum.DELETED_NO.getValue());
.selectByOrderIdsAndDeleted(orderIds, DeletedStatusEnum.DELETED_NO.getValue());
List<OrderItemBO> orderItemBOList = OrderItemConvert.INSTANCE.convertOrderItemDO(orderItemDOList);
Map<Integer, List<OrderItemBO>> orderItemBOMultimap = CollectionUtil
.buildMultimap(orderItemBOList, Integer.class, OrderItemBO.class, "orderId");
Map<Integer, List<OrderItemBO>> orderItemBOMultimap = orderItemBOList.stream().collect(
Collectors.toMap(
OrderItemBO::getOrderId,
item -> Lists.newArrayList(item),
(oldVal, newVal) -> {
oldVal.addAll(newVal);
return oldVal;
}
)
);
// 转换 orderDO 为 OrderBO并设置 item
List<OrderBO> orderPageBOList = OrderConvert.INSTANCE.convertPageBO(orderDOList);
@ -74,6 +96,9 @@ public class OrderServiceImpl implements OrderService {
if (orderItemBOMultimap.containsKey(orderBO.getId())) {
orderBO.setOrderItems(orderItemBOMultimap.get(orderBO.getId()));
}
if (orderLogisticsDOMap.containsKey(orderBO.getOrderLogisticsId())) {
orderBO.setOrderLogistics(orderLogisticsDOMap.get(orderBO.getOrderLogisticsId()));
}
return orderBO;
}).collect(Collectors.toList());
@ -86,7 +111,7 @@ public class OrderServiceImpl implements OrderService {
@Override
@Transactional
public CommonResult<cn.iocoder.mall.order.api.bo.OrderBO> createOrder(Integer userId, OrderCreateDTO orderCreateDTO) {
public CommonResult<OrderCreateBO> createOrder(Integer userId, OrderCreateDTO orderCreateDTO) {
List<OrderCreateItemDTO> orderItemDTOList = orderCreateDTO.getOrderItems();
OrderLogisticsDO orderLogisticsDO = OrderLogisticsConvert.INSTANCE.convert(orderCreateDTO);
List<OrderItemDO> orderItemDOList = OrderItemConvert.INSTANCE.convert(orderItemDTOList);
@ -120,7 +145,7 @@ public class OrderServiceImpl implements OrderService {
.setUserId(userId)
.setOrderLogisticsId(orderLogisticsDO.getId())
.setOrderNo(UUID.randomUUID().toString().replace("-", ""))
.setPrice(-1) // 先设置一个默认值,金额在下面计算
.setPayAmount(-1) // 先设置一个默认值,金额在下面计算
.setClosingTime(null)
.setDeliveryTime(null)
.setPaymentTime(null)
@ -140,6 +165,9 @@ public class OrderServiceImpl implements OrderService {
.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)
@ -158,16 +186,16 @@ public class OrderServiceImpl implements OrderService {
orderMapper.updateById(
new OrderDO()
.setId(orderDO.getId())
.setPrice(totalAmount)
.setPayAmount(totalAmount)
);
// TODO: 2019-03-17 Sin 需要发送 创建成果 MQ 消息
return CommonResult.success(
new cn.iocoder.mall.order.api.bo.OrderBO()
new OrderCreateBO()
.setId(orderDO.getId())
.setOrderNo(orderDO.getOrderNo())
.setMoney(orderDO.getPrice())
.setPayAmount(orderDO.getPayAmount())
);
}
@ -181,6 +209,19 @@ public class OrderServiceImpl implements OrderService {
return CommonResult.success(null);
}
@Override
@Transactional
public CommonResult updateOrderItemPayAmount(Integer orderId, Integer orderItemId, Integer payAmount) {
if (payAmount < 0) {
return ServiceExceptionUtil.error(OrderErrorCodeEnum.ORDER_PAY_AMOUNT_NOT_NEGATIVE.getCode());
}
orderItemMapper.updateById(new OrderItemDO().setId(orderItemId).setPayAmount(payAmount));
List<OrderItemDO> orderItemDOList = orderItemMapper.selectByOrderIdAndDeleted(orderId, DeletedStatusEnum.DELETED_NO.getValue());
Integer orderPayAmount = orderCommon.calculatedAmount(orderItemDOList);
orderMapper.updateById(new OrderDO().setId(orderId).setPayAmount(orderPayAmount));
return CommonResult.success(null);
}
@Override
public CommonResult deleteOrderItem(OrderItemDeletedDTO orderItemDeletedDTO) {
Integer orderId = orderItemDeletedDTO.getOrderId();
@ -211,7 +252,7 @@ public class OrderServiceImpl implements OrderService {
orderMapper.updateById(
new OrderDO()
.setId(orderId)
.setPrice(totalAmount)
.setPayAmount(totalAmount)
);
return CommonResult.success(null);
}

View File

@ -3,7 +3,7 @@
<mapper namespace="cn.iocoder.mall.order.dao.OrderItemMapper">
<sql id="FIELDS">
id, order_id, order_no, sku_id, quantity, price,
id, order_id, order_no, sku_id, sku_name, sku_image, quantity, price, pay_amount,
payment_time, delivery_time, receiver_time, closing_time,
has_return_exchange, status, create_time, update_time, deleted
</sql>
@ -13,7 +13,7 @@
-->
<insert id="insert" parameterType="OrderItemDO" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
INSERT INTO `order_item` (
order_id, order_no, sku_id, quantity, price,
order_id, order_no, sku_id, sku_name, sku_image, quantity, price, pay_amount,
payment_time, delivery_time, receiver_time, closing_time,
has_return_exchange, status, create_time, update_time, deleted
) VALUES (
@ -38,13 +38,22 @@
<if test="skuId != null">
, sku_id = #{skuId}
</if>
<if test="skuName != null">
, sku_name = #{skuName}
</if>
<if test="skuImage != null">
, sku_image = #{skuImage}
</if>
<if test="quantity != null">
, quantity = #{quantity}
</if>
<if test="price != null">
, price = #{price}
</if>
-- time
<if test="payAmount != null">
, pay_amount = #{payAmount}
</if>
<if test="paymentTime != null">
, payment_time = #{paymentTime}
</if>
@ -57,7 +66,7 @@
<if test="closingTime != null">
, closing_time = #{closingTime}
</if>
-- other
<if test="hasReturnExchange != null">
, has_return_exchange = #{hasReturnExchange}
</if>
@ -114,12 +123,14 @@
<!--
查询 - 根据 orderIds 和 status
-->
<select id="selectByOrderIdsAndStatus" resultType="cn.iocoder.mall.order.dataobject.OrderItemDO">
SELECT * FROM `order_item`
WHERE `status` = #{status}
<select id="selectByOrderIdsAndDeleted" resultType="cn.iocoder.mall.order.dataobject.OrderItemDO">
SELECT
<include refid="FIELDS" />
FROM `order_item`
WHERE `deleted` = #{deleted}
AND `order_id`
IN
<foreach collection="orderIds" index="orderId" open="(" close=")" separator=",">
<foreach collection="orderIds" item="orderId" open="(" close=")" separator=",">
#{orderId}
</foreach>
</select>

View File

@ -3,7 +3,7 @@
<mapper namespace="cn.iocoder.mall.order.dao.OrderLogisticsMapper">
<sql id="FIELDS">
id, area_no, `name`, mobile, address, logistics_no
id, area_no, `name`, mobile, address, logistics_no, create_time, update_time
</sql>
<!--
@ -49,4 +49,18 @@
<include refid="updateFieldSql" />
WHERE id = #{id}
</update>
<!--
查询 - 根据 orderId
-->
<select id="selectByIds" resultType="cn.iocoder.mall.order.dataobject.OrderLogisticsDO">
SELECT
<include refid="FIELDS" />
FROM `order_logistics`
WHERE `id`
IN
<foreach collection="ids" item="id" separator="," open="(" close=")">
#{id}
</foreach>
</select>
</mapper>

View File

@ -3,7 +3,7 @@
<mapper namespace="cn.iocoder.mall.order.dao.OrderMapper">
<sql id="FIELDS">
id, user_id, order_logistics_id, order_no, price, payment_time,
id, user_id, order_logistics_id, order_no, pay_amount, payment_time,
delivery_time, receiver_time, closing_time, has_return_exchange,
status, remark, create_time, update_time, `deleted`
</sql>
@ -36,8 +36,8 @@
<if test="orderNo != null">
, order_no = #{orderNo}
</if>
<if test="price != null">
, price = #{price}
<if test="payAmount != null">
, pay_amount = #{payAmount}
</if>
-- time
<if test="paymentTime != null">

View File

@ -3,12 +3,11 @@ package cn.iocoder.mall.order.service;
import cn.iocoder.common.framework.vo.CommonResult;
import cn.iocoder.mall.order.OrderApplicationTest;
import cn.iocoder.mall.order.api.OrderService;
import cn.iocoder.mall.order.api.bo.OrderBO;
import cn.iocoder.mall.order.api.bo.OrderCreateBO;
import cn.iocoder.mall.order.api.dto.OrderCreateDTO;
import cn.iocoder.mall.order.api.dto.OrderCreateItemDTO;
import cn.iocoder.mall.order.dao.OrderMapper;
import cn.iocoder.mall.order.dataobject.OrderDO;
import org.checkerframework.checker.units.qual.A;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
@ -44,7 +43,7 @@ public class OrderServiceImplTest {
.setSkuId(1)
.setQuantity(1);
CommonResult<OrderBO> result = orderService.createOrder(
CommonResult<OrderCreateBO> result = orderService.createOrder(
userId,
new OrderCreateDTO()
.setRemark("")