diff --git a/pom.xml b/pom.xml index a5ffd5019853ba8906378ebc98fbe6b9f2c98eae..6a3c156b57d92449bc655c5a0aec308948d72df1 100644 --- a/pom.xml +++ b/pom.xml @@ -133,8 +133,6 @@ 2.0.1 - - commons-codec @@ -146,11 +144,7 @@ commons-configuration 1.10 - - commons-lang - commons-lang - 2.6 - + commons-logging commons-logging @@ -161,6 +155,11 @@ core 2.1 + + com.google.code.gson + gson + 2.6.2 + org.hamcrest hamcrest-core diff --git a/src/main/java/com/mark/controller/portal/OrderController.java b/src/main/java/com/mark/controller/portal/OrderController.java index d7388be22b8889b6debc75a682f9f4511372ab30..ec1696750f0841860e97bb3471c8a1c01fd2e071 100644 --- a/src/main/java/com/mark/controller/portal/OrderController.java +++ b/src/main/java/com/mark/controller/portal/OrderController.java @@ -27,8 +27,12 @@ public class OrderController { @Autowired private CurrentUser currentUser; - //1.创建订单 - @RequestMapping("create") + /** + * 1.创建订单 + * @param shippingId:收货地址id + * @return : + */ + @PostMapping(value = "create.do") @ResponseBody public ServerResponse create(HttpServletRequest httpServletRequest, Integer shippingId){ ServerResponse response = currentUser.getCurrentUser(httpServletRequest); @@ -52,8 +56,11 @@ public class OrderController { return iOrderService.cancelOrder(currentUser.getId(),orderNo); } - //3.获取购物车中已经选中的商品详情提交订单时候调用 - @RequestMapping("get_order_cart_product.do") + /** + * 3.获取购物车中已经选中的商品详情提交订单时候调用 + * @return : + */ + @PostMapping(value = "get_order_cart_product.do") @ResponseBody public ServerResponse getOrderCartProduct(HttpServletRequest httpServletRequest){ ServerResponse response = currentUser.getCurrentUser(httpServletRequest); @@ -76,10 +83,17 @@ public class OrderController { return iOrderService.getOrderDetail(currentUser.getId(),orderNo,null); } - //5.分页 - @RequestMapping("list.do") + /** + * 分页查看订单列表 + * @param pageNum:当前页数 + * @param pageSize:页面大小 + * @return : + */ @ResponseBody - public ServerResponse list(HttpServletRequest httpServletRequest, @RequestParam(value = "pageNum",defaultValue = "1") int pageNum, @RequestParam(value = "pageSize",defaultValue = "10") int pageSize){ + @PostMapping(value = "list.do") + public ServerResponse list(HttpServletRequest httpServletRequest, + @RequestParam(value = "pageNum",defaultValue = "1") int pageNum, + @RequestParam(value = "pageSize",defaultValue = "10") int pageSize){ ServerResponse response = currentUser.getCurrentUser(httpServletRequest); if (!response.isSuccess()){ return response; diff --git a/src/main/java/com/mark/controller/portal/PayController.java b/src/main/java/com/mark/controller/portal/PayController.java index a365f9c429101e91d6fdb63769b2239e5cb92532..511c3daf3607c23ed4026c3c0c5d608e6d182238 100644 --- a/src/main/java/com/mark/controller/portal/PayController.java +++ b/src/main/java/com/mark/controller/portal/PayController.java @@ -11,6 +11,8 @@ import com.mark.pojo.User; import com.mark.service.IPayService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -34,7 +36,7 @@ public class PayController { @Autowired private CurrentUser currentUser; - @RequestMapping("pay") + @PostMapping(value = "pay.do") public ServerResponse pay(HttpServletRequest httpServletRequest, String orderNo, HttpServletRequest request){ ServerResponse response = currentUser.getCurrentUser(httpServletRequest); if (!response.isSuccess()){ @@ -45,8 +47,13 @@ public class PayController { return iPayService.pay(orderNo,currentUser.getId(),path); } - //返回的是一个字符串 - @RequestMapping("alipay_callback.do") + + /** + * 支付回调 + * @param request + * @return + */ + @RequestMapping(value = "alipay_callback.do") public Object alipayCallback(HttpServletRequest request){ Map params = Maps.newHashMap(); Map requestParams = request.getParameterMap(); @@ -81,8 +88,14 @@ public class PayController { } - //检查是否付款成功 - @RequestMapping("query_order_pay_status.do") + /** + * 前端校验是够支付成功 + * 检查是否付款成功 + * @param httpServletRequest: + * @param orderNo:订单号 + * @return: + */ + @PostMapping(value = "query_order_pay_status.do") public ServerResponse queryOrderPayStatus(HttpServletRequest httpServletRequest, String orderNo){ ServerResponse response = currentUser.getCurrentUser(httpServletRequest); diff --git a/src/main/java/com/mark/controller/portal/ShippingController.java b/src/main/java/com/mark/controller/portal/ShippingController.java index 4e4e755f8ea067e2c6294de1a8b82677cec4c80c..b24f645ae0079f9a7f5105802b8fc116433670cf 100644 --- a/src/main/java/com/mark/controller/portal/ShippingController.java +++ b/src/main/java/com/mark/controller/portal/ShippingController.java @@ -2,13 +2,19 @@ package com.mark.controller.portal; import com.mark.common.ServerResponse; import com.mark.controller.common.CurrentUser; +import com.mark.from.ShippingAddFrom; +import com.mark.from.ShippingEditFrom; import com.mark.pojo.Shipping; import com.mark.pojo.User; import com.mark.service.IShippingService; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; +import javax.validation.Valid; +import java.util.Objects; /** * @Description: 地址模块控制器 @@ -25,19 +31,36 @@ public class ShippingController { @Autowired private CurrentUser currentUser; - //1.用户添加收货地址 + + /** + * 1.用户添加收货地址 + * + * @param shippingAddFrom :新增收货地址的表单 + * @param bindingResult:验证结果 + * @return + */ @PostMapping(value = "add.do") - public ServerResponse add(HttpServletRequest httpServletRequest, Shipping shipping){ + public ServerResponse add(@Valid ShippingAddFrom shippingAddFrom ,BindingResult bindingResult , + HttpServletRequest httpServletRequest){ + if (bindingResult.hasErrors()) { + return ServerResponse.createByErrorMessage(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage()); + } ServerResponse response = currentUser.getCurrentUser(httpServletRequest); if (!response.isSuccess()){ return response; } User currentUser = (User) response.getData(); + Shipping shipping = new Shipping(); + BeanUtils.copyProperties(shippingAddFrom,shipping); return iShippingService.addShipping(currentUser.getId(), shipping); } - //2.用户删除收货地址 - @GetMapping(value = "delete.do") + /** + * 2.用户删除收货地址 + * @param shippingId:收货地址id + * @return + */ + @PostMapping(value = "delete.do") public ServerResponse delete(HttpServletRequest httpServletRequest,Integer shippingId){ ServerResponse response = currentUser.getCurrentUser(httpServletRequest); if (!response.isSuccess()){ @@ -47,13 +70,24 @@ public class ShippingController { return iShippingService.deleteShipping(currentUser.getId(), shippingId); } - //3.用户更新收货地址 + /** + * 3.用户编辑收货地址 + * @param shippingEditFrom:编辑收货地址的表单 + * @param bindingResult:验证的结果 + * @return + */ @PostMapping(value = "update.do") - public ServerResponse update(HttpServletRequest httpServletRequest,Shipping shipping){ + public ServerResponse update(@Valid ShippingEditFrom shippingEditFrom , BindingResult bindingResult , + HttpServletRequest httpServletRequest){ + if (bindingResult.hasErrors()) { + return ServerResponse.createByErrorMessage(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage()); + } ServerResponse response = currentUser.getCurrentUser(httpServletRequest); if (!response.isSuccess()){ return response; } + Shipping shipping = new Shipping(); + BeanUtils.copyProperties(shippingEditFrom,shipping); User currentUser = (User) response.getData(); return iShippingService.updateShipping(currentUser.getId(), shipping); } @@ -69,9 +103,13 @@ public class ShippingController { return iShippingService.selectShipping(currentUser.getId(), shippingId); } - - //5.分页查看 - @GetMapping(value = "list.do") + /** + * 5.分页查看 + * @param pageNum:页数 + * @param pageSize:页面大小 + * @return + */ + @PostMapping(value = "list.do") public ServerResponse list(@RequestParam(value = "pageNum",defaultValue = "1") int pageNum, @RequestParam(value = "pageSize",defaultValue = "10")int pageSize, HttpServletRequest httpServletRequest){ diff --git a/src/main/java/com/mark/dao/CartMapper.java b/src/main/java/com/mark/dao/CartMapper.java index 354fd281c3b58c5062e5ce72054a1a9f373d6602..2f78527844c3635d175440831aa85d01695152b7 100644 --- a/src/main/java/com/mark/dao/CartMapper.java +++ b/src/main/java/com/mark/dao/CartMapper.java @@ -5,6 +5,7 @@ import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import java.util.List; +import java.util.Map; /** * @Description: 购物车dao接口,用于购物车的数据库操作 @@ -16,6 +17,11 @@ import java.util.List; @Mapper public interface CartMapper { + /** + * 新增 + * @param record + * @return + */ int insert(Cart record); int insertSelective(Cart record); @@ -86,4 +92,11 @@ public interface CartMapper { */ List selectCheckedCartByUserId(@Param("currentUserId") Integer currentUserId, @Param("sellerId") Integer sellerId); + + /** + * 查找购物车中当前用户选中商品的对应的sellerId + * @param currentUserId:当前用户id + * @return + */ + List selectSellerIds(Integer currentUserId); } \ No newline at end of file diff --git a/src/main/java/com/mark/dao/OrderMapper.java b/src/main/java/com/mark/dao/OrderMapper.java index c799f7e6caa649c67f1c5110e08a937bf2d8a328..59d2b66bfaacb958d51340407e9b86be3828da28 100644 --- a/src/main/java/com/mark/dao/OrderMapper.java +++ b/src/main/java/com/mark/dao/OrderMapper.java @@ -1,10 +1,12 @@ package com.mark.dao; import com.mark.pojo.Order; +import io.swagger.models.auth.In; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import java.util.List; +import java.util.Map; /** @@ -110,4 +112,5 @@ public interface OrderMapper { @Param("date") String date); + } \ No newline at end of file diff --git a/src/main/java/com/mark/exception/Campuso2oException.java b/src/main/java/com/mark/exception/Campuso2oException.java index 422c1b68a8b37d7013f8de4036706bab34c7b087..215369fcbee326febd0d7da769014b8ad7f44dbc 100644 --- a/src/main/java/com/mark/exception/Campuso2oException.java +++ b/src/main/java/com/mark/exception/Campuso2oException.java @@ -8,6 +8,9 @@ package com.mark.exception; * @Copyright : 豆浆油条个人非正式工作室 */ public class Campuso2oException extends RuntimeException{ + public Campuso2oException(String origin){ + super("{"+origin+"}发生了异常:"); + } public Campuso2oException(String origin,Exception ex){ super("{"+origin+"}发生了异常:"+parseErrMsg(ex)); diff --git a/src/main/java/com/mark/from/ShippingAddFrom.java b/src/main/java/com/mark/from/ShippingAddFrom.java new file mode 100644 index 0000000000000000000000000000000000000000..bace2c38bb6eaae939b72b4cee89deabb7efeabc --- /dev/null +++ b/src/main/java/com/mark/from/ShippingAddFrom.java @@ -0,0 +1,47 @@ +package com.mark.from; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Pattern; + +/** + * @Description: 新增收货时的验证表单 + * @Author: Kingsley + * @CreateDate: 2018/10/23 23:07 + * @Version: 2.0 + * @Copyright : 豆浆油条个人非正式工作室 + */ +@Data +@ApiModel(value = "收货地址新增表单") +public class ShippingAddFrom { + private static final String PHONE_REGEXP = "^(((13[0-9])|(15([0-3]|[5-9]))|(18[0,5-9]))\\d{8})|(0\\d{2}-\\d{8})|(0\\d{3}-\\d{7})$"; + + @ApiModelProperty(value = "收件人名名称",required = true) + @NotBlank(message = "收件人名称必填") + private String receiverName; + + @ApiModelProperty(value = "收件人联系电话", required = true) + @NotBlank(message = "收件人联系电话必填") + @Pattern(regexp = PHONE_REGEXP,message = "手机号格式不正确(13位有效数字)") + private String receiverPhone; + + @ApiModelProperty(value = "省份",required = true) + @NotBlank(message = "省份不能为空") + private String receiverProvince; + + @ApiModelProperty(value = "城市",required = true) + @NotBlank(message = "城市不能为空") + private String receiverCity; + + @ApiModelProperty(value = "详细地址(具体到门牌号)",required = true) + @NotBlank(message = "详细地址不能为空") + private String receiverAddress; + + @ApiModelProperty(value = "邮政编码",required = true) + @NotBlank(message = "邮政编码不能为空") + private String receiverZip; + +} diff --git a/src/main/java/com/mark/from/ShippingEditFrom.java b/src/main/java/com/mark/from/ShippingEditFrom.java new file mode 100644 index 0000000000000000000000000000000000000000..3f03f14d77a2daae759d084191ace1b7e49343fc --- /dev/null +++ b/src/main/java/com/mark/from/ShippingEditFrom.java @@ -0,0 +1,51 @@ +package com.mark.from; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Pattern; + +/** + * @Description: + * @Author: Kingsley + * @CreateDate: 2018/10/24 22:53 + * @Version: 2.0 + * @Copyright : 豆浆油条个人非正式工作室 + */ +@Data +@ApiModel(value = "收货地址新增表单") +public class ShippingEditFrom { + private static final String PHONE_REGEXP = "^(((13[0-9])|(15([0-3]|[5-9]))|(18[0,5-9]))\\d{8})|(0\\d{2}-\\d{8})|(0\\d{3}-\\d{7})$"; + + @ApiModelProperty(value = "收货地址id",required = true) + @NotNull + private Integer id; + + @ApiModelProperty(value = "收件人名名称",required = true) + @NotBlank(message = "收件人名称必填") + private String receiverName; + + @ApiModelProperty(value = "收件人联系电话", required = true) + @NotBlank(message = "收件人联系电话必填") + @Pattern(regexp = PHONE_REGEXP,message = "手机号格式不正确(13位有效数字)") + private String receiverPhone; + + @ApiModelProperty(value = "省份",required = true) + @NotBlank(message = "省份不能为空") + private String receiverProvince; + + @ApiModelProperty(value = "城市",required = true) + @NotBlank(message = "城市不能为空") + private String receiverCity; + + @ApiModelProperty(value = "详细地址(具体到门牌号)",required = true) + @NotBlank(message = "详细地址不能为空") + private String receiverAddress; + + @ApiModelProperty(value = "邮政编码",required = true) + @NotBlank(message = "邮政编码不能为空") + private String receiverZip; +} diff --git a/src/main/java/com/mark/from/UserUpdateFrom.java b/src/main/java/com/mark/from/UserUpdateFrom.java index 01753adf199f05e17bcc3e3b68062b38f652fdcc..da26709abcfbbdbb2464181db77a686f9d7dd166 100644 --- a/src/main/java/com/mark/from/UserUpdateFrom.java +++ b/src/main/java/com/mark/from/UserUpdateFrom.java @@ -36,7 +36,7 @@ public class UserUpdateFrom { @ApiModelProperty(value = "手机号码") @NotBlank(message = "手机必填") - @Pattern(regexp = PHONE_REGEXP) + @Pattern(regexp = PHONE_REGEXP,message = "手机号格式不正确(13位有效数字)") private String phone; @ApiModelProperty(value = "问题") diff --git a/src/main/java/com/mark/pojo/OrderItem.java b/src/main/java/com/mark/pojo/OrderItem.java index 994137f97960674006b91379dd85a7585859124d..3ddae304ac47c1f62a92219f88c324d0057d34fc 100644 --- a/src/main/java/com/mark/pojo/OrderItem.java +++ b/src/main/java/com/mark/pojo/OrderItem.java @@ -1,5 +1,10 @@ package com.mark.pojo; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + import java.math.BigDecimal; import java.util.Date; /** @@ -9,220 +14,104 @@ import java.util.Date; * @Version: 2.0 * @Copyright : 豆浆油条个人非正式工作室 */ +@Getter +@Setter +@NoArgsConstructor +@AllArgsConstructor public class OrderItem { + /** + * 订单子明细id + */ private Integer id; + /** + * 用户id + */ private Integer userId; + /** + * 订单号 + */ private Long orderNo; + /** + * 商品id(尚用不到) + */ private Integer shopId; + /** + * 店铺名称 + */ private String shopName; + /** + * 商品id + */ private Integer productId; + /** + * 商品名称 + */ private String productName; + /** + * 商品主图 + */ private String productImg; + /** + * 当前单价 + */ private BigDecimal currentUnitPrice; + /** + * 数量 + */ private Integer quantity; + /** + * 总价 + */ private BigDecimal totalPrice; + /** + * 创建时间 + */ private Date createTime; + /** + * 最后一次更新时间 + */ private Date lastEditTime; + /*** + * 状态 + */ private Integer enableStatus; + /** + * 支付时间 + */ private Date paymentTime; + /** + * 发货时间 + */ private Date sendTime; + /** + * 结束时间 + */ private Date endTime; + /** + * 关闭时间 + */ private Date closeTime; + /** + * 卖家id + */ private Integer sellerId; - public OrderItem(Integer id, Integer userId, Long orderNo, Integer shopId, String shopName, Integer productId, String productName, String productImg, BigDecimal currentUnitPrice, Integer quantity, BigDecimal totalPrice, Date createTime, Date lastEditTime, Integer enableStatus, Date paymentTime, Date sendTime, Date endTime, Date closeTime, Integer sellerId) { - this.id = id; - this.userId = userId; - this.orderNo = orderNo; - this.shopId = shopId; - this.shopName = shopName; - this.productId = productId; - this.productName = productName; - this.productImg = productImg; - this.currentUnitPrice = currentUnitPrice; - this.quantity = quantity; - this.totalPrice = totalPrice; - this.createTime = createTime; - this.lastEditTime = lastEditTime; - this.enableStatus = enableStatus; - this.paymentTime = paymentTime; - this.sendTime = sendTime; - this.endTime = endTime; - this.closeTime = closeTime; - this.sellerId = sellerId; - } - - public OrderItem() { - super(); - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public Integer getUserId() { - return userId; - } - - public void setUserId(Integer userId) { - this.userId = userId; - } - - public Long getOrderNo() { - return orderNo; - } - - public void setOrderNo(Long orderNo) { - this.orderNo = orderNo; - } - - public Integer getShopId() { - return shopId; - } - - public void setShopId(Integer shopId) { - this.shopId = shopId; - } - - public String getShopName() { - return shopName; - } - - public void setShopName(String shopName) { - this.shopName = shopName == null ? null : shopName.trim(); - } - - public Integer getProductId() { - return productId; - } - - public void setProductId(Integer productId) { - this.productId = productId; - } - - public String getProductName() { - return productName; - } - - public void setProductName(String productName) { - this.productName = productName == null ? null : productName.trim(); - } - - public String getProductImg() { - return productImg; - } - - public void setProductImg(String productImg) { - this.productImg = productImg == null ? null : productImg.trim(); - } - - public BigDecimal getCurrentUnitPrice() { - return currentUnitPrice; - } - - public void setCurrentUnitPrice(BigDecimal currentUnitPrice) { - this.currentUnitPrice = currentUnitPrice; - } - - public Integer getQuantity() { - return quantity; - } - - public void setQuantity(Integer quantity) { - this.quantity = quantity; - } - - public BigDecimal getTotalPrice() { - return totalPrice; - } - - public void setTotalPrice(BigDecimal totalPrice) { - this.totalPrice = totalPrice; - } - - public Date getCreateTime() { - return createTime; - } - - public void setCreateTime(Date createTime) { - this.createTime = createTime; - } - - public Date getLastEditTime() { - return lastEditTime; - } - - public void setLastEditTime(Date lastEditTime) { - this.lastEditTime = lastEditTime; - } - - public Integer getEnableStatus() { - return enableStatus; - } - - public void setEnableStatus(Integer enableStatus) { - this.enableStatus = enableStatus; - } - - public Date getPaymentTime() { - return paymentTime; - } - - public void setPaymentTime(Date paymentTime) { - this.paymentTime = paymentTime; - } - - public Date getSendTime() { - return sendTime; - } - - public void setSendTime(Date sendTime) { - this.sendTime = sendTime; - } - - public Date getEndTime() { - return endTime; - } - - public void setEndTime(Date endTime) { - this.endTime = endTime; - } - - public Date getCloseTime() { - return closeTime; - } - - public void setCloseTime(Date closeTime) { - this.closeTime = closeTime; - } - - public Integer getSellerId() { - return sellerId; - } - - public void setSellerId(Integer sellerId) { - this.sellerId = sellerId; - } } \ No newline at end of file diff --git a/src/main/java/com/mark/service/IOrderService.java b/src/main/java/com/mark/service/IOrderService.java index 61e3ecb1885be4ddd117348f87b21c28a4ac8715..d67217945e4b4408fd4a5d092718675a687a8ff8 100644 --- a/src/main/java/com/mark/service/IOrderService.java +++ b/src/main/java/com/mark/service/IOrderService.java @@ -12,14 +12,32 @@ import com.mark.vo.OrderVo; * @Copyright : 豆浆油条个人非正式工作室 */ public interface IOrderService { + /** + * 创建订单 + * @param currentUserId:当前的用户id + * @param shippingId:订单的收货地址id + * @return :返回订单列表(根据卖家进行分组)如:订单列表中的商品包含了3个卖家,那么应该返回三个订单号 + */ ServerResponse createOrder(Integer currentUserId, Integer shippingId); ServerResponse cancelOrder(Integer currentUserId, Long orderNo); + /** + * 3.获取购物车中已经选中的商品详情提交订单时候调用 + * @param currentUserId:当前的用户id + * @return : + */ ServerResponse getOrderCartProduct(Integer currentUserId); ServerResponse getOrderDetail(Integer currentUserId, Long orderNo, Integer sellerId); + /** + * 查看订单列表 + * @param currentUserId :当前的用户id + * @param pageNum:页数 + * @param pageSize:页面大小 + * @return : + */ ServerResponse getOrderList(Integer currentUserId, int pageNum, int pageSize); ServerResponse manageList(int pageNum, int pageSize); diff --git a/src/main/java/com/mark/service/IPayService.java b/src/main/java/com/mark/service/IPayService.java index 0a1f7c386ce1affc4659e56956f088e34a618e91..4edc71a842058bf5c2d675cd084f3682d1b385f3 100644 --- a/src/main/java/com/mark/service/IPayService.java +++ b/src/main/java/com/mark/service/IPayService.java @@ -12,6 +12,13 @@ import java.util.Map; * @Copyright : 豆浆油条个人非正式工作室 */ public interface IPayService { + /** + * 生成支付订单,并且保存支付宝回调生成的二维码 + * @param orderNo + * @param currentUserId + * @param path + * @return + */ ServerResponse pay(String orderNo, Integer currentUserId, String path); ServerResponse aliCallback(Map params); diff --git a/src/main/java/com/mark/service/IShippingService.java b/src/main/java/com/mark/service/IShippingService.java index 54202e6bf3a784928c6ce0f3b713515f462cd58f..48f23ebb2eac22e398b056eb3c2cb828d89ce21a 100644 --- a/src/main/java/com/mark/service/IShippingService.java +++ b/src/main/java/com/mark/service/IShippingService.java @@ -11,13 +11,38 @@ import com.mark.pojo.Shipping; * @Copyright : 豆浆油条个人非正式工作室 */ public interface IShippingService { + /** + * 新增收货地址 + * @param currentUserId:当前用户id + * @param shipping:新增的收货地址实例 + * @return + */ ServerResponse addShipping(Integer currentUserId, Shipping shipping); + /** + * 删除收货地址 + * @param currentUserId:当前用户id + * @param shippingId:地址id + * @return + */ ServerResponse deleteShipping(Integer currentUserId, Integer shippingId); + /** + * 更新收货地址 + * @param currentUserId:当前用户id + * @param shipping:待更新的实例 + * @return + */ ServerResponse updateShipping(Integer currentUserId, Shipping shipping); ServerResponse selectShipping(Integer currentUserId, Integer shippingId); + /** + * 获取当前用户地收货地址列表 + * @param currentUserId:当前用户id + * @param pageNum:页数大小 + * @param pageSize:页面大小 + * @return + */ ServerResponse listShipping(Integer currentUserId, int pageNum, int pageSize); } diff --git a/src/main/java/com/mark/service/impl/OrderServiceImpl.java b/src/main/java/com/mark/service/impl/OrderServiceImpl.java index 7d6cae89680412d9b4a18a0352d8c85a1f0e6562..9635129373f7f124be4659b8fd24c75f3c5ec24c 100644 --- a/src/main/java/com/mark/service/impl/OrderServiceImpl.java +++ b/src/main/java/com/mark/service/impl/OrderServiceImpl.java @@ -4,6 +4,7 @@ import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.google.common.collect.Lists; import com.google.common.collect.Maps; +import com.google.common.collect.Sets; import com.mark.common.Const; import com.mark.common.ServerResponse; import com.mark.dao.*; @@ -11,6 +12,7 @@ import com.mark.enums.OrderStatusEnum; import com.mark.enums.PaymentTypeEnum; import com.mark.enums.ProductStatusEnum; import com.mark.enums.PropertiesEnum; +import com.mark.exception.Campuso2oException; import com.mark.exception.OrderException; import com.mark.pojo.*; import com.mark.service.IOrderService; @@ -29,6 +31,8 @@ import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; import java.util.*; +import static com.mark.enums.PropertiesEnum.FTP_SERVICE_HTTP_PREFIX; + /** * @Description: 订单模块业务逻辑实现 * @Author: Mark @@ -39,6 +43,10 @@ import java.util.*; @Service("orderServiceImpl") @Slf4j public class OrderServiceImpl implements IOrderService { + private static final String IMAGES_HOST_URL; + static { + IMAGES_HOST_URL = PropertiesUtil.getProperty(FTP_SERVICE_HTTP_PREFIX.getPropertiesName()); + } @Autowired private OrderMapper orderMapper; @Autowired @@ -52,29 +60,18 @@ public class OrderServiceImpl implements IOrderService { @Autowired private UserMapper userMapper; - //1.创建订单 @Override + @SuppressWarnings("unchecked") + @Transactional(value = "mySysDataSourceTransactionManager", rollbackFor = Campuso2oException.class) public ServerResponse createOrder(Integer currentUserId, Integer shippingId) { try { - //从购物车获取勾选的数据 - List cartList = cartMapper.selectCheckedCartByUserId(currentUserId, null); - Map> productMap = Maps.newHashMap(); - for (Cart car : cartList) { - Product product = productMapper.selectByPrimaryKey(car.getProductId()); - int sellerId = product.getOwnerId(); - if (productMap.containsKey(sellerId)) { - } else { - productMap.put(sellerId, null); - } - } - Iterator it = productMap.entrySet().iterator(); - + //订单号列表 List orderNumberList = Lists.newArrayList(); - while (it.hasNext()) { - Map.Entry entry = (Map.Entry) it.next(); - Integer sellerId = (Integer) entry.getKey(); - cartList = cartMapper.selectCheckedCartByUserId(currentUserId, sellerId); + //该订单对应的卖家id列表 + List sellerIds = cartMapper.selectSellerIds(currentUserId); + for (int sellerId : sellerIds) { + List cartList = cartMapper.selectCheckedCartByUserId(currentUserId, sellerId); //构建订单明细 ServerResponse response = this.getCartOrderItem(currentUserId, cartList); if (!response.isSuccess()) { @@ -83,30 +80,28 @@ public class OrderServiceImpl implements IOrderService { List orderItemList = (List) response.getData(); //计算总价 BigDecimal payment = this.getOrderTotalPrice(orderItemList); - //构建订单实例 Order order = this.assembleOrder(currentUserId, shippingId, payment, sellerId); - - if (order == null) { - return ServerResponse.createByErrorMessage("生成订单错误"); - } - for (OrderItem orderItem : orderItemList) {//订单子明细添加OrderNo属性,状态属性 + //订单子明细添加OrderNo属性,状态属性 + for (OrderItem orderItem : orderItemList) { orderItem.setOrderNo(order.getOrderNo()); orderItem.setEnableStatus(order.getEnableStatus()); } - orderItemMapper.batchInsert(orderItemList); - - this.reduceProductStock(orderItemList);//生成成功,减少产品的库存 + int effectNum = orderItemMapper.batchInsert(orderItemList); + if (effectNum != orderItemList.size()) { + throw new Campuso2oException("批量保存订单子明细异常"); + } + //生成订单成功,减少产品的库存 + this.reduceProductStock(orderItemList); //清空一下购物车 this.cleanCart(cartList); - //封装返回给前端的Vo OrderVo orderVo = assembleOrderVo(order, orderItemList); orderNumberList.add(orderVo.getOrderNo()); } return ServerResponse.createBySuccess("新建订单成功!!", orderNumberList); - }catch (Exception e){ - throw new OrderException("createOrder",e.getClass()+e.getMessage()); + } catch (Exception e) { + throw new Campuso2oException("新增订单", e); } } @@ -114,125 +109,123 @@ public class OrderServiceImpl implements IOrderService { @Transactional @Override public ServerResponse cancelOrder(Integer currentUserId, Long orderNo) { - try{ - Order order = orderMapper.selectOrder(currentUserId,orderNo,null); - if(order ==null){ - return ServerResponse.createByErrorMessage("改用户订单不存在"); + try { + Order order = orderMapper.selectOrder(currentUserId, orderNo, null); + if (order == null) { + return ServerResponse.createByErrorMessage("改用户订单不存在"); } - if (order.getEnableStatus() != OrderStatusEnum.NO_PAY.getCode()){ - return ServerResponse.createByErrorMessage("取消清单失败:因为订单已经"+ Const.OrderStatusEnum.codeOf(order.getEnableStatus()).getValue()); + if (order.getEnableStatus() != OrderStatusEnum.NO_PAY.getCode()) { + return ServerResponse.createByErrorMessage("取消清单失败:因为订单已经" + Const.OrderStatusEnum.codeOf(order.getEnableStatus()).getValue()); } Order updateOrder = new Order(); updateOrder.setId(order.getId()); updateOrder.setEnableStatus(OrderStatusEnum.CANCELED.getCode()); updateOrder.setCloseTime(new Date()); //设置关闭时间 int rowCount = orderMapper.updateByPrimaryKeySelective(updateOrder); - if (rowCount > 0){ + if (rowCount > 0) { return ServerResponse.createBySuccessMessage("取消订单成功"); } return ServerResponse.createByErrorMessage("取消订单失败"); - }catch (Exception e){ - throw new OrderException("cancelOrder",e.getClass()+e.getMessage()); + } catch (Exception e) { + throw new OrderException("cancelOrder", e.getClass() + e.getMessage()); } } - //3.获取购物车中的商品 @Override + @SuppressWarnings("unchecked") public ServerResponse getOrderCartProduct(Integer currentUserId) { - try{ - List cartList = cartMapper.selectCheckedCartByUserId(currentUserId,null); - ServerResponse response = this.getCartOrderItem(currentUserId,cartList); - if(!response.isSuccess()){ - return response; - } - List orderItemList = (List) response.getData(); - List orderItemVoList = Lists.newArrayList(); - BigDecimal payment = new BigDecimal("0"); - for (OrderItem orderItem:orderItemList){ - payment = BigDecimalUtil.add(payment.doubleValue(),orderItem.getTotalPrice().doubleValue());//计算总价 - OrderItemVo orderItemVo = new OrderItemVo(); - orderItemVo = orderItemVo.assembleOrderItemVo(orderItem); - orderItemVoList.add(orderItemVo); - } - OrderProductVo orderProductVo = new OrderProductVo(); - orderProductVo.setProductTotalPrice(payment); - orderProductVo.setOrderItemVoList(orderItemVoList); - orderProductVo.setImageHost(PropertiesUtil.getProperty(PropertiesEnum.FTP_SERVICE_HTTP_PREFIX.getPropertiesName())); - return ServerResponse.createBySuccess(orderProductVo); - }catch (Exception e){ - throw new OrderException("getOrderCartProduct",e.getClass()+e.getMessage()); + List cartList = cartMapper.selectCheckedCartByUserId(currentUserId, null); + ServerResponse response = this.getCartOrderItem(currentUserId, cartList); + if (!response.isSuccess()) { + return response; } + List orderItemList = (List) response.getData(); + List orderItemVoList = Lists.newArrayList(); + BigDecimal payment = new BigDecimal("0"); + //订单子明细总价 + for (OrderItem orderItem : orderItemList) { + //计算总价 + payment = BigDecimalUtil.add(payment.doubleValue(), orderItem.getTotalPrice().doubleValue()); + //构建订单子明细VO对象 + OrderItemVo orderItemVo = assembleOrderItemVo(orderItem); + orderItemVoList.add(orderItemVo); + } + OrderProductVo orderProductVo = new OrderProductVo(); + orderProductVo.setProductTotalPrice(payment); + orderProductVo.setOrderItemVoList(orderItemVoList); + orderProductVo.setImageHost(PropertiesUtil.getProperty(FTP_SERVICE_HTTP_PREFIX.getPropertiesName())); + return ServerResponse.createBySuccess(orderProductVo); } //4.订单详情 @Override - public ServerResponse getOrderDetail(Integer currentUserId, Long orderNo,Integer sellerId) { - try{ - Order order = orderMapper.selectOrder(currentUserId,orderNo,sellerId); - if (order == null){ - return ServerResponse.createByErrorMessage("该用户订单不存在"); + public ServerResponse getOrderDetail(Integer currentUserId, Long orderNo, Integer sellerId) { + try { + Order order = orderMapper.selectOrder(currentUserId, orderNo, sellerId); + if (order == null) { + return ServerResponse.createByErrorMessage("该用户订单不存在"); } - List orderItemList = orderItemMapper.getByOrderNoUserId(orderNo,currentUserId,sellerId); - OrderVo orderVo = assembleOrderVo(order,orderItemList); + List orderItemList = orderItemMapper.getByOrderNoUserId(orderNo, currentUserId, sellerId); + OrderVo orderVo = assembleOrderVo(order, orderItemList); return ServerResponse.createBySuccess(orderVo); - }catch (Exception e){ - throw new OrderException("getOrderDetail",e.getClass()+e.getMessage()); + } catch (Exception e) { + throw new OrderException("getOrderDetail", e.getClass() + e.getMessage()); } } - //5.分页获取订单 @Override + @SuppressWarnings("unchecked") public ServerResponse getOrderList(Integer currentUserId, int pageNum, int pageSize) { - try{ - PageHelper.startPage(pageNum,pageSize); + try { + PageHelper.startPage(pageNum, pageSize); List orderList = orderMapper.selectByUserId(currentUserId); - List orderVoList = assembleOrderVoList(orderList,currentUserId); + List orderVoList = assembleOrderVoList(orderList, currentUserId); PageInfo pageResult = new PageInfo(orderList); pageResult.setList(orderVoList); return ServerResponse.createBySuccess(pageResult); - }catch (Exception e){ - throw new OrderException("getOrderList",e.getClass()+e.getMessage()); + } catch (Exception e) { + throw new OrderException("getOrderList", e.getClass() + e.getMessage()); } } //admin @Override public ServerResponse manageList(int pageNum, int pageSize) { - try{ - PageHelper.startPage(pageNum,pageSize); + try { + PageHelper.startPage(pageNum, pageSize); List orderList = orderMapper.selectAllOrder(); - List orderVoList = this.assembleOrderVoList(orderList,null); + List orderVoList = this.assembleOrderVoList(orderList, null); PageInfo pageResult = new PageInfo(orderList); pageResult.setList(orderVoList); return ServerResponse.createBySuccess(pageResult); - }catch (Exception e){ - throw new OrderException("manageList",e.getClass()+e.getMessage()); + } catch (Exception e) { + throw new OrderException("manageList", e.getClass() + e.getMessage()); } } @Override public ServerResponse manageDetail(Long orderNo) { - try{ + try { Order order = orderMapper.selectByOrderNo(orderNo); - if(order != null){ + if (order != null) { List orderItemList = orderItemMapper.getByOrderNo(orderNo); - OrderVo orderVo = assembleOrderVo(order,orderItemList); + OrderVo orderVo = assembleOrderVo(order, orderItemList); return ServerResponse.createBySuccess(orderVo); } return ServerResponse.createByErrorMessage("订单不存在"); - }catch (Exception e){ - throw new OrderException("manageDetail",e.getClass()+e.getMessage()); + } catch (Exception e) { + throw new OrderException("manageDetail", e.getClass() + e.getMessage()); } } @Override public ServerResponse manageSearch(Long orderNo, int pageNum, int pageSize) { - try{ - PageHelper.startPage(pageNum,pageSize); + try { + PageHelper.startPage(pageNum, pageSize); Order order = orderMapper.selectByOrderNo(orderNo); - if(order != null){ + if (order != null) { List orderItemList = orderItemMapper.getByOrderNo(orderNo); - OrderVo orderVo = assembleOrderVo(order,orderItemList); + OrderVo orderVo = assembleOrderVo(order, orderItemList); List orderList = Lists.newArrayList(); orderList.add(order); List orderVoList = Lists.newArrayList(); @@ -242,100 +235,100 @@ public class OrderServiceImpl implements IOrderService { return ServerResponse.createBySuccess(pageResult); } return ServerResponse.createByErrorMessage("订单不存在"); - }catch (Exception e){ - throw new OrderException("manageSearch",e.getClass()+e.getMessage()); + } catch (Exception e) { + throw new OrderException("manageSearch", e.getClass() + e.getMessage()); } } //发货 @Override public ServerResponse manageSendGoods(Long orderNo) { - try{ - Order order= orderMapper.selectByOrderNo(orderNo); - if(order != null){ - if(order.getEnableStatus() == OrderStatusEnum.PAID.getCode()){//订单转态为已支付 + try { + Order order = orderMapper.selectByOrderNo(orderNo); + if (order != null) { + if (order.getEnableStatus() == OrderStatusEnum.PAID.getCode()) {//订单转态为已支付 order.setEnableStatus(OrderStatusEnum.SHIPPED.getCode()); order.setSendTime(new Date()); orderMapper.updateByPrimaryKeySelective(order); return ServerResponse.createBySuccessMessage("发货成功"); - }else{ - return ServerResponse.createByErrorMessage("发货失败:以为该订单的状态为"+ Const.OrderStatusEnum.codeOf(order.getEnableStatus()).getValue()); + } else { + return ServerResponse.createByErrorMessage("发货失败:以为该订单的状态为" + Const.OrderStatusEnum.codeOf(order.getEnableStatus()).getValue()); } } return ServerResponse.createByErrorMessage("订单不存在"); - }catch (Exception e){ - throw new OrderException("manageSendGoods",e.getClass()+e.getMessage()); + } catch (Exception e) { + throw new OrderException("manageSendGoods", e.getClass() + e.getMessage()); } } @Override public ServerResponse getSellerOrderList(Integer sellerId, int pageNum, int pageSize) { - try{ - PageHelper.startPage(pageNum,pageSize); + try { + PageHelper.startPage(pageNum, pageSize); List orderList = orderMapper.selectSellerOrders(sellerId); - List orderVoList = this.assembleOrderVoList(orderList,null); + List orderVoList = this.assembleOrderVoList(orderList, null); PageInfo pageResult = new PageInfo(orderList); pageResult.setList(orderVoList); return ServerResponse.createBySuccess(pageResult); - }catch (Exception e){ - throw new OrderException("getSellerOrderList",e.getClass()+e.getMessage()); + } catch (Exception e) { + throw new OrderException("getSellerOrderList", e.getClass() + e.getMessage()); } } @Override public ServerResponse sellerSendGoods(Long orderNo, Integer sellerId) { - try{ - Order order= orderMapper.selectByOrderNo(orderNo); - if(order != null){ - if(order.getEnableStatus() == OrderStatusEnum.PAID.getCode()){//订单转态为已支付 + try { + Order order = orderMapper.selectByOrderNo(orderNo); + if (order != null) { + if (order.getEnableStatus() == OrderStatusEnum.PAID.getCode()) {//订单转态为已支付 order.setEnableStatus(OrderStatusEnum.SHIPPED.getCode()); order.setSendTime(new Date()); orderMapper.updateByPrimaryKeySelective(order); return ServerResponse.createBySuccess("发货成功"); - }else{ - return ServerResponse.createByErrorMessage("发货失败:因为该订单的状态为"+ Const.OrderStatusEnum.codeOf(order.getEnableStatus()).getValue()); + } else { + return ServerResponse.createByErrorMessage("发货失败:因为该订单的状态为" + Const.OrderStatusEnum.codeOf(order.getEnableStatus()).getValue()); } } return ServerResponse.createByErrorMessage("订单不存在"); - }catch (Exception e){ - throw new OrderException("sellerSendGoods",e.getClass()+e.getMessage()); + } catch (Exception e) { + throw new OrderException("sellerSendGoods", e.getClass() + e.getMessage()); } } //用户确认收货 @Override public ServerResponse getGoods(Integer currentUserId, Long orderNo) { - try{ - Order order = orderMapper.selectOrder(currentUserId,orderNo,null); - if(order ==null){ - return ServerResponse.createByErrorMessage("该用户订单不存在"); + try { + Order order = orderMapper.selectOrder(currentUserId, orderNo, null); + if (order == null) { + return ServerResponse.createByErrorMessage("该用户订单不存在"); } //判断订单的状态是否为发货的状态 - if (order.getEnableStatus() != OrderStatusEnum.SHIPPED.getCode()){ - return ServerResponse.createByErrorMessage("确认收货失败:因为订单已经"+ Const.OrderStatusEnum.codeOf(order.getEnableStatus()).getValue()); + if (order.getEnableStatus() != OrderStatusEnum.SHIPPED.getCode()) { + return ServerResponse.createByErrorMessage("确认收货失败:因为订单已经" + Const.OrderStatusEnum.codeOf(order.getEnableStatus()).getValue()); } Order updateOrder = new Order(); updateOrder.setId(order.getId()); updateOrder.setEnableStatus(OrderStatusEnum.ORDER_SUCCESS.getCode()); updateOrder.setEndTime(new Date()); //设置完成时间 int rowCount = orderMapper.updateByPrimaryKeySelective(updateOrder); - if (rowCount > 0){ + if (rowCount > 0) { return ServerResponse.createBySuccess("谢谢惠顾!"); } return ServerResponse.createByErrorMessage("订单确认收货失败!!!"); - }catch (Exception e){ - throw new OrderException("getGoods",e.getClass()+e.getMessage()); + } catch (Exception e) { + throw new OrderException("getGoods", e.getClass() + e.getMessage()); } } @Override public ServerResponse sellerSearchOrder(Long orderNo, int pageNum, int pageSize, Integer sellerId) { - try{ - PageHelper.startPage(pageNum,pageSize); - Order order = orderMapper.selectByOrderNoAndSellerId(sellerId,orderNo); - if(order != null){ + try { + PageHelper.startPage(pageNum, pageSize); + Order order = orderMapper.selectByOrderNoAndSellerId(sellerId, orderNo); + if (order != null) { List orderItemList = orderItemMapper.getByOrderNo(orderNo); - OrderVo orderVo = assembleOrderVo(order,orderItemList); + OrderVo orderVo = assembleOrderVo(order, orderItemList); List orderList = Lists.newArrayList(); orderList.add(order); List orderVoList = Lists.newArrayList(); @@ -345,89 +338,27 @@ public class OrderServiceImpl implements IOrderService { return ServerResponse.createBySuccess(pageResult); } return ServerResponse.createByErrorMessage("订单不存在"); - }catch (Exception e){ - throw new OrderException("sellerSearchOrder",e.getClass()+e.getMessage()); + } catch (Exception e) { + throw new OrderException("sellerSearchOrder", e.getClass() + e.getMessage()); } } @Override - public ServerResponse searchOrderPayed( int pageNum, int pageSize, Integer sellerId) { - try{ - PageHelper.startPage(pageNum,pageSize); - List orderList = orderMapper.selectSellerOrdersPayed(sellerId,OrderStatusEnum.PAID.getCode()); - List orderVoList = this.assembleOrderVoList(orderList,null); + public ServerResponse searchOrderPayed(int pageNum, int pageSize, Integer sellerId) { + try { + PageHelper.startPage(pageNum, pageSize); + List orderList = orderMapper.selectSellerOrdersPayed(sellerId, OrderStatusEnum.PAID.getCode()); + List orderVoList = this.assembleOrderVoList(orderList, null); PageInfo pageResult = new PageInfo(orderList); pageResult.setList(orderVoList); return ServerResponse.createBySuccess(pageResult); - }catch (Exception e){ - throw new OrderException("searchOrderPayed",e.getClass()+e.getMessage()); - } - } - - private List assembleOrderVoList(List orderList, Integer currentUserId) { - try{ - List orderVoList = Lists.newArrayList(); - for(Order order : orderList){ - List orderItemList =Lists.newArrayList(); - if(currentUserId == null){//管理员 - orderItemList = orderItemMapper.getByOrderNo(order.getOrderNo()); - }else{ - orderItemList = orderItemMapper.getByOrderNoUserId(order.getOrderNo(),currentUserId,null); - } - OrderVo orderVo = assembleOrderVo(order,orderItemList); - orderVoList.add(orderVo); - } - return orderVoList; - }catch (Exception e){ - throw new OrderException("assembleOrderVoList",e.getClass()+e.getMessage()); - } - } - - //封装返回前端的VO - private OrderVo assembleOrderVo(Order order, List orderItemList) { - try{ - OrderVo orderVo = new OrderVo(); - orderVo.setShippingId(order.getShippingId()); - orderVo.setOrderNo(order.getOrderNo()); - orderVo.setPayment(order.getPayment()); - orderVo.setPostage(order.getPostage()); - orderVo.setPaymentType(order.getPaymentType()); - orderVo.setPaymentTypeDesc(PaymentTypeEnum.CodeOf(order.getPaymentType()).getInformation()); - orderVo.setStatus(order.getEnableStatus()); - orderVo.setStatusDesc(OrderStatusEnum.codeOf(order.getEnableStatus()).getInformation()); - - Shipping shipping = shippingMapper.selectByPrimaryKey(order.getShippingId()); - if (shipping != null){ - orderVo.setReceiverName(shipping.getReceiverName()); - ShippingVo shippingVo = this.assembleShippingVo(shipping); - orderVo.setShippingVo(shippingVo); - } - orderVo.setPaymentTime(DateTimeUtil.dateToStr(order.getPaymentTime())); - orderVo.setSendTime(DateTimeUtil.dateToStr(order.getSendTime())); - orderVo.setEndTime(DateTimeUtil.dateToStr(order.getEndTime())); - orderVo.setCreateTime(DateTimeUtil.dateToStr(order.getCreateTime())); - orderVo.setCloseTime(DateTimeUtil.dateToStr(order.getCloseTime())); - orderVo.setImageHost(PropertiesUtil.getProperty(PropertiesEnum.FTP_SERVICE_HTTP_PREFIX.getPropertiesName())); - - List orderItemVoList = Lists.newArrayList(); - for(OrderItem orderItem:orderItemList){ - OrderItemVo orderItemVo = new OrderItemVo(); - orderItemVo = orderItemVo.assembleOrderItemVo(orderItem); - User seller = userMapper.selectByPrimaryKey(orderItem.getSellerId()); - if(seller != null){ - orderItemVo.setSellerName(seller.getUsername()); - } - orderItemVoList.add(orderItemVo); - } - orderVo.setOrderItemVoList(orderItemVoList); - return orderVo; - }catch (Exception e){ - throw new OrderException("assembleOrderVo",e.getClass()+e.getMessage()); + } catch (Exception e) { + throw new OrderException("searchOrderPayed", e.getClass() + e.getMessage()); } } private ShippingVo assembleShippingVo(Shipping shipping) { - try{ + try { ShippingVo shippingVo = new ShippingVo(); shippingVo.setReceiverName(shipping.getReceiverName()); shippingVo.setReceiverAddress(shipping.getReceiverAddress()); @@ -437,94 +368,239 @@ public class OrderServiceImpl implements IOrderService { shippingVo.setReceiverZip(shipping.getReceiverZip()); shippingVo.setReceiverPhone(shipping.getReceiverPhone()); return shippingVo; - }catch (Exception e){ - throw new OrderException("assembleShippingVo",e.getClass()+e.getMessage()); + } catch (Exception e) { + throw new OrderException("assembleShippingVo", e.getClass() + e.getMessage()); } } //下单完成后清空购物车中相应的商品 private void cleanCart(List cartList) { - for (Cart cart:cartList){ + for (Cart cart : cartList) { cartMapper.deleteByPrimaryKey(cart.getId()); } } - //下单完成后减少库存量 + /** + * 下单完成后减少库存量 + * + * @param orderItemList: + */ private void reduceProductStock(List orderItemList) { - for(OrderItem orderItem:orderItemList){ + for (OrderItem orderItem : orderItemList) { Product product = productMapper.selectByPrimaryKey(orderItem.getProductId()); - Integer newProductStock = product.getProductStock()-orderItem.getQuantity(); + Integer newProductStock = product.getProductStock() - orderItem.getQuantity(); product.setProductStock(newProductStock); int resultRow = productMapper.updateByPrimaryKeySelective(product); } } - //构建订单实例 + + /**** 私有方法 *******************************************************************************/ + /** + * 根据购物车中勾选的商品构建确认订单的选项 + * + * @param currentUserId:当前的用户id + * @param cartList:购物车列表 + * @return : + */ + private ServerResponse getCartOrderItem(Integer currentUserId, List cartList) { + List orderItemList = Lists.newArrayList(); + for (Cart car : cartList) { + Product product = productMapper.selectByPrimaryKey(car.getProductId()); + //检验商品的转态是否在售 + if (ProductStatusEnum.ON_SALE.getStatus() != product.getEnableStatus()) { + return ServerResponse.createByErrorMessage("商品" + product.getProductName() + "不是在售状态!"); + } + //检查库存量是否大于等于购买量 + if (car.getQuantity() > product.getProductStock()) { + return ServerResponse.createByErrorMessage("您选择的商品" + product.getProductName() + "的库存量不足!"); + } + //构建orderItem实例 + OrderItem orderItem = new OrderItem(); + orderItem.setUserId(currentUserId); + orderItem.setProductId(product.getId()); + orderItem.setSellerId(product.getOwnerId()); + orderItem.setProductName(product.getProductName()); + orderItem.setProductImg(product.getMainImgAddr()); + //如果有现价 + if (product.getPromotionPrice() != null) { + orderItem.setCurrentUnitPrice(product.getPromotionPrice()); + } else { + orderItem.setCurrentUnitPrice(product.getNormalPrice()); + } + orderItem.setQuantity(car.getQuantity()); + orderItem.setTotalPrice(BigDecimalUtil.mul(orderItem.getCurrentUnitPrice().doubleValue(), car.getQuantity())); + orderItemList.add(orderItem); + } + return ServerResponse.createBySuccess(orderItemList); + } + + private OrderItemVo assembleOrderItemVo(OrderItem orderItem) { + OrderItemVo orderItemVo = new OrderItemVo(); + orderItemVo.setId(orderItem.getId()); + orderItemVo.setOrderNo(orderItem.getOrderNo()); + orderItemVo.setProductId(orderItem.getProductId()); + orderItemVo.setSellerId(orderItem.getSellerId()); + orderItemVo.setProductName(orderItem.getProductName()); + orderItemVo.setProductImage(IMAGES_HOST_URL+orderItem.getProductImg()); + orderItemVo.setCurrentUnitPrice(orderItem.getCurrentUnitPrice()); + orderItemVo.setQuantity(orderItem.getQuantity()); + orderItemVo.setTotalPrice(orderItem.getTotalPrice()); + orderItemVo.setEnableStatus(orderItem.getEnableStatus()); + if (orderItem.getEnableStatus() != null) { + orderItemVo.setEnableStatusDes(OrderStatusEnum.codeOf(orderItem.getEnableStatus()).getInformation()); + orderItemVo.setOperation(assembleOperation(orderItem.getEnableStatus())); + } + orderItemVo.setCreateTime(DateTimeUtil.dateToStr(orderItem.getCreateTime())); + orderItemVo.setPaymentTime(DateTimeUtil.dateToStr(orderItem.getPaymentTime())); + orderItemVo.setSendTime(DateTimeUtil.dateToStr(orderItem.getSendTime())); + orderItemVo.setEndTime(DateTimeUtil.dateToStr(orderItem.getEndTime())); + User seller = userMapper.selectByPrimaryKey(orderItem.getSellerId()); + if (seller != null) { + orderItemVo.setSellerName(seller.getUsername()); + } + return orderItemVo; + } + + /** + * 组装订单的状态 + * + * @param enableStatus:订单状态 + * @return : + */ + private String assembleOperation(Integer enableStatus) { + switch (enableStatus) { + case 0: + return "已取消"; + case 10: + return "去取消"; + case 20: + return "等待发货"; + case 40: + return "确认收货"; + case 50: + return "去评论"; + case 60: + return "去评论"; + default: + return "不明确"; + } + } + private Order assembleOrder(Integer currentUserId, Integer shippingId, BigDecimal payment, Integer sellerId) { Order order = new Order(); - long orderNo = this.generateOrderNo();//生成订单号 + //生成订单号 + long orderNo = this.generateOrderNo(); order.setUserId(currentUserId); order.setShippingId(shippingId); order.setSellerId(sellerId); order.setOrderNo(orderNo); order.setPayment(payment); - order.setPostage(0);//运费 - order.setEnableStatus(OrderStatusEnum.NO_PAY.getCode());//状态(未支付) + //运费 + order.setPostage(0); + //状态(未支付) + order.setEnableStatus(OrderStatusEnum.NO_PAY.getCode()); order.setPaymentType(Const.PaymentTypeEnum.ONLINE_PAY.getCode()); - int rowCount = orderMapper.insert(order); - if (rowCount > 0){ + if (rowCount > 0) { return order; + } else { + throw new Campuso2oException("保存订单失败"); } - return null; } - //自动生成订单号 - private long generateOrderNo() { + /** + * 自动生成订单号 + * + * @return : + */ + private synchronized long generateOrderNo() { long currentTime = System.currentTimeMillis(); return currentTime + new Random().nextInt(100); } - //计算订单总价 + /** + * 计算订单总价 + * + * @param orderItemList : + * @return : + */ private BigDecimal getOrderTotalPrice(List orderItemList) { BigDecimal payment = new BigDecimal("0"); - for(OrderItem orderItem:orderItemList){ - payment = BigDecimalUtil.add(payment.doubleValue(),orderItem.getCurrentUnitPrice().doubleValue()); + for (OrderItem orderItem : orderItemList) { + payment = BigDecimalUtil.add(payment.doubleValue(), orderItem.getCurrentUnitPrice().doubleValue()); } - return payment; + return payment; } - private ServerResponse getCartOrderItem(Integer currentUserId, List cartList) { - List orderItemList = Lists.newArrayList(); - for (Cart car:cartList){ - Product product = productMapper.selectByPrimaryKey(car.getProductId()); - //检验商品的转态是否在售 - if(ProductStatusEnum.ON_SALE.getStatus() != product.getEnableStatus()){ - return ServerResponse.createByErrorMessage("商品"+product.getProductName()+"不是在售状态!"); - } - //检查库存量是否大于等于购买量 - if(car.getQuantity()> product.getProductStock()){ - return ServerResponse.createByErrorMessage("您选择的商品"+product.getProductName()+"的库存量不足!"); - } - //构建orderItem实例 - OrderItem orderItem = new OrderItem(); - orderItem.setUserId(currentUserId); - orderItem.setProductId(product.getId()); - orderItem.setSellerId(product.getOwnerId()); - orderItem.setProductName(product.getProductName()); - orderItem.setProductImg(product.getMainImgAddr()); - //如果有现价 - if (product.getPromotionPrice() != null){ - orderItem.setCurrentUnitPrice(product.getPromotionPrice()); - }else{ - orderItem.setCurrentUnitPrice(product.getNormalPrice()); + /** + * 根据order订单列表构建orderVo列表信息 + * + * @param orderList:订单列表 + * @param currentUserId:当前的用户id + * @return : + */ + private List assembleOrderVoList(List orderList, Integer currentUserId) { + try { + List orderVoList = Lists.newArrayList(); + for (Order order : orderList) { + List orderItemList; + //管理员 + if (currentUserId == null) { + orderItemList = orderItemMapper.getByOrderNo(order.getOrderNo()); + } else { + orderItemList = orderItemMapper.getByOrderNoUserId(order.getOrderNo(), currentUserId, null); + } + OrderVo orderVo = assembleOrderVo(order, orderItemList); + orderVoList.add(orderVo); } - orderItem.setQuantity(car.getQuantity()); - orderItem.setTotalPrice(BigDecimalUtil.mul(orderItem.getCurrentUnitPrice().doubleValue(),car.getQuantity())); - orderItemList.add(orderItem); + return orderVoList; + } catch (Exception e) { + throw new OrderException("assembleOrderVoList", e.getClass() + e.getMessage()); } - return ServerResponse.createBySuccess(orderItemList); } + /** + * 封装返回前端的VO + * + * @param order:订单实例 + * @param orderItemList:订单实例对应的订单子明细列表 + * @return :orderVo对象 + */ + private OrderVo assembleOrderVo(Order order, List orderItemList) { + try { + OrderVo orderVo = new OrderVo(); + orderVo.setShippingId(order.getShippingId()); + orderVo.setOrderNo(order.getOrderNo()); + orderVo.setPayment(order.getPayment()); + orderVo.setPostage(order.getPostage()); + orderVo.setPaymentType(order.getPaymentType()); + orderVo.setPaymentTypeDesc(PaymentTypeEnum.CodeOf(order.getPaymentType()).getInformation()); + orderVo.setStatus(order.getEnableStatus()); + orderVo.setStatusDesc(OrderStatusEnum.codeOf(order.getEnableStatus()).getInformation()); + + Shipping shipping = shippingMapper.selectByPrimaryKey(order.getShippingId()); + if (shipping != null) { + orderVo.setReceiverName(shipping.getReceiverName()); + ShippingVo shippingVo = this.assembleShippingVo(shipping); + orderVo.setShippingVo(shippingVo); + } + orderVo.setPaymentTime(DateTimeUtil.dateToStr(order.getPaymentTime())); + orderVo.setSendTime(DateTimeUtil.dateToStr(order.getSendTime())); + orderVo.setEndTime(DateTimeUtil.dateToStr(order.getEndTime())); + orderVo.setCreateTime(DateTimeUtil.dateToStr(order.getCreateTime())); + orderVo.setCloseTime(DateTimeUtil.dateToStr(order.getCloseTime())); + orderVo.setImageHost(IMAGES_HOST_URL); + List orderItemVoList = Lists.newArrayList(); + for (OrderItem orderItem : orderItemList) { + OrderItemVo orderItemVo = assembleOrderItemVo(orderItem); + orderItemVoList.add(orderItemVo); + } + orderVo.setOrderItemVoList(orderItemVoList); + return orderVo; + } catch (Exception e) { + throw new OrderException("assembleOrderVo", e.getClass() + e.getMessage()); + } + } } diff --git a/src/main/java/com/mark/service/impl/PayServiceImpl.java b/src/main/java/com/mark/service/impl/PayServiceImpl.java index 84076da7c3840ae1f341dcad6efdbcdbbe1bfb50..8acb48a39696a5bc59979868dcaa606fa2ee4fe2 100644 --- a/src/main/java/com/mark/service/impl/PayServiceImpl.java +++ b/src/main/java/com/mark/service/impl/PayServiceImpl.java @@ -27,9 +27,12 @@ import com.mark.util.*; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.StringUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.mock.web.MockMultipartFile; import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; import java.io.File; +import java.io.FileInputStream; import java.math.BigDecimal; import java.util.List; import java.util.Map; @@ -64,25 +67,28 @@ public class PayServiceImpl implements IPayService{ @Autowired private PayInfoMapper payInfoMapper; - //生成支付订单,并且保存支付宝回调生成的二维码 + @Override public ServerResponse pay(String orderNo, Integer currentUserId, String path) { + File targetFile = null; try { Map resultMap = Maps.newHashMap(); String[] arrOrderNo = orderNo.split(","); StringBuilder payOrderNo = new StringBuilder(); - BigDecimal tatal = new BigDecimal(0.0); + BigDecimal total = new BigDecimal(0.0); List orderItemLists = Lists.newArrayList(); for (int i = 0; i < arrOrderNo.length; i++) { String orders = arrOrderNo[i]; Long orderValue = Long.parseLong(orders); - Order order = orderMapper.selectOrder(currentUserId, orderValue, null);//根据用户Id和订单号查找订单 + //根据用户Id和订单号查找订单 + Order order = orderMapper.selectOrder(currentUserId, orderValue, null); if (order == null) { return ServerResponse.createByErrorMessage("用户没有该订单!"); } - tatal = BigDecimalUtil.add(tatal.doubleValue(), order.getPayment().doubleValue()); - List orderItemList = orderItemMapper.getOrderListByOrderAndUserId(orderValue, currentUserId);//根据用户ID和订单号到订单明细表中查找相关信息 + total = BigDecimalUtil.add(total.doubleValue(), order.getPayment().doubleValue()); + //根据用户ID和订单号到订单明细表中查找相关信息 + List orderItemList = orderItemMapper.getOrderListByOrderAndUserId(orderValue, currentUserId); for (OrderItem orderItem : orderItemList) { orderItemLists.add(orderItem); } @@ -104,7 +110,7 @@ public class PayServiceImpl implements IPayService{ // (必填) 订单总金额,单位为元,不能超过1亿元 // 如果同时传入了【打折金额】,【不可打折金额】,【订单总金额】三者,则必须满足如下条件:【订单总金额】=【打折金额】+【不可打折金额】 - String totalAmount = tatal.toString(); + String totalAmount = total.toString(); // (可选) 订单不可打折金额,可以配合商家平台配置折扣活动,如果酒水不参与打折,则将对应金额填写至此字段 // 如果该值未传入,但传入了【订单总金额】,【打折金额】,则该值默认为【订单总金额】-【打折金额】 @@ -133,14 +139,17 @@ public class PayServiceImpl implements IPayService{ // 商品明细列表,需填写购买商品详细信息, // List orderItemList = orderItemMapper.getOrderListByOrderAndUserId(orderNo,currentUserId);//根据用户ID和订单号到订单明细表中查找相关信息 List goodsDetailList = Lists.newArrayList(); - for (OrderItem orderItem : orderItemLists) {//遍历 + //遍历 + for (OrderItem orderItem : orderItemLists) { // 创建商品信息,参数含义分别为商品id(使用国标)、商品名称、商品价格(单位为分)、商品数量 - GoodsDetail goodsDetail = GoodsDetail.newInstance(//构建GoodsDetail实例 + //构建GoodsDetail实例 + GoodsDetail goodsDetail = GoodsDetail.newInstance( orderItem.getProductId().toString(), orderItem.getProductName(), BigDecimalUtil.mul(orderItem.getCurrentUnitPrice().doubleValue(), new Double(100).doubleValue()).longValue(), orderItem.getQuantity()); - goodsDetailList.add(goodsDetail);//加到List中 + //加到List中 + goodsDetailList.add(goodsDetail); } //创建扫码支付请求builder,设置请求参数 @@ -149,10 +158,11 @@ public class PayServiceImpl implements IPayService{ .setUndiscountableAmount(undiscountableAmount).setSellerId(sellerId).setBody(body) .setOperatorId(operatorId).setStoreId(storeId).setExtendParams(extendParams) .setTimeoutExpress(timeoutExpress) - .setNotifyUrl(PropertiesUtil.getProperty(PropertiesEnum.ALIPAY_CALLBACK_URL.getPropertiesName()))//支付宝服务器主动通知商户服务器里指定的页面http路径,根据需要设置 + //支付宝服务器主动通知商户服务器里指定的页面http路径,根据需要设置 + .setNotifyUrl(PropertiesUtil.getProperty(PropertiesEnum.ALIPAY_CALLBACK_URL.getPropertiesName())) .setGoodsDetailList(goodsDetailList); - - AlipayF2FPrecreateResult result = tradeService.tradePrecreate(builder);//调用支付宝API大气预支付 + //调用支付宝API大气预支付 + AlipayF2FPrecreateResult result = tradeService.tradePrecreate(builder); switch (result.getTradeStatus()) { case SUCCESS: log.info("支付宝预下单成功"); @@ -161,28 +171,32 @@ public class PayServiceImpl implements IPayService{ dumpResponse(response); File folder = null; try { - folder = new File(path);//创建路径中的文件夹 + //创建路径中的文件夹 + folder = new File(path); } catch (Exception e) { log.error("在路径{}中创建文件夹失败!请检查文件夹是否可读", path); } - if (!folder.exists()) { + if (folder!=null && !folder.exists()) { folder.setWritable(true); folder.mkdirs(); } //需要修改为运行机器上的路径(注意这里的path后面要加上/) - String qrPath = String.format(path + "/qr-%s.png", response.getOutTradeNo());//二维码的的本地相对路径 - String qrFileName = String.format("qr-%s.png", response.getOutTradeNo());//文件名 - ZxingUtils.getQRCodeImge(response.getQrCode(), 256, qrPath);//在本地的upload文件夹上生成二维码图片 + //二维码的的本地相对路径 + String qrPath = String.format(path + "/qr-%s.png", response.getOutTradeNo()); + //文件名 + String qrFileName = String.format("qr-%s.png", response.getOutTradeNo()); + //在本地的upload文件夹上生成二维码图片 + ZxingUtils.getQRCodeImge(response.getQrCode(), 256, qrPath); - File targetFile = new File(path, qrFileName); - //// TODO: 2018/4/26 - // String remotePath = PathUtil.getQrPath(currentUserId.toString(),operatorId); - // FTPUtil.uploadFile(Lists.newArrayList(targetFile),"");//使用FTP服务器上传图片 - ImageUtil.generateThumbnail(targetFile, PathUtil.getQrPath()); + targetFile = new File(path, qrFileName); + MultipartFile multipartFile = FileUtil.fileToMultipartFile(targetFile); + String qrUrl = OSSClientUtil.uploadImg2Oss(multipartFile, "qr", currentUserId); + + //ImageUtil.generateThumbnail(targetFile, PathUtil.getQrPath()); log.info("qrPath:" + qrPath); - String qrUrl = PropertiesUtil.getProperty(PropertiesEnum.FTP_SERVICE_HTTP_PREFIX.getPropertiesName()) + PathUtil.getQrPath() + targetFile.getName(); + //String qrUrl = PropertiesUtil.getProperty(PropertiesEnum.FTP_SERVICE_HTTP_PREFIX.getPropertiesName()) + PathUtil.getQrPath() + targetFile.getName(); log.info("qrUrl:" + qrUrl); resultMap.put("qrUrl", qrUrl); @@ -200,9 +214,18 @@ public class PayServiceImpl implements IPayService{ } }catch (Exception e){ throw new PayException("pay",e.getClass()+e.getMessage()); + }finally { + if(targetFile != null){ + boolean delete = targetFile.delete(); + if(!delete){ + log.warn("删除文件失败:"); + } + } } } + + @Override public ServerResponse aliCallback(Map params){ try { diff --git a/src/main/java/com/mark/service/impl/ShippingServiceImpl.java b/src/main/java/com/mark/service/impl/ShippingServiceImpl.java index df64589aa8db85d0e84a107406e2716ae7e525b6..273ce00b1160288816caeb5a96783d9e87399303 100644 --- a/src/main/java/com/mark/service/impl/ShippingServiceImpl.java +++ b/src/main/java/com/mark/service/impl/ShippingServiceImpl.java @@ -10,6 +10,7 @@ import com.mark.exception.ShippingException; import com.mark.pojo.Shipping; import com.mark.service.IShippingService; import com.mark.vo.ShippingVo; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -62,16 +63,16 @@ public class ShippingServiceImpl implements IShippingService{ } } - //3.用户更新收货地址的业务逻辑 @Override public ServerResponse updateShipping(Integer currentUserId, Shipping shipping) { try { - shipping.setUserId(currentUserId);//用户的ID要设置为当前的用户id + //用户的ID要设置为当前的用户id + shipping.setUserId(currentUserId); int resultCount = shippingMapper.updateByShipping(shipping); if (resultCount > 0) { return ServerResponse.createBySuccessMessage("更新地址成功"); } else { - return ServerResponse.createByErrorMessage("删除地址失败"); + return ServerResponse.createByErrorMessage("更新地址失败"); } }catch (Exception e){ throw new ShippingException("updateShipping",e.getClass()+e.getMessage()); @@ -93,7 +94,13 @@ public class ShippingServiceImpl implements IShippingService{ } } - //5.分页查看所有的收货地址 + /** + * 5.分页查看所有的收货地址 + * @param currentUserId + * @param pageNum + * @param pageSize + * @return + */ @Override public ServerResponse listShipping(Integer currentUserId, int pageNum, int pageSize) { try { @@ -113,16 +120,10 @@ public class ShippingServiceImpl implements IShippingService{ private ShippingVo assembleShippingVo(Shipping shipping) { ShippingVo shippingVo = new ShippingVo(); - shippingVo.setId(shipping.getId()); - shippingVo.setReceiverName(shipping.getReceiverName()); - shippingVo.setReceiverAddress(shipping.getReceiverAddress()); - shippingVo.setReceiverProvince(shipping.getReceiverProvince()); - shippingVo.setReceiverCity(shipping.getReceiverCity()); - shippingVo.setReceiverDistrict(shipping.getReceiverDistrict()); - shippingVo.setReceiverZip(shipping.getReceiverZip()); + BeanUtils.copyProperties(shipping,shippingVo); String phone = shipping.getReceiverPhone(); int phoneLength = phone.length(); - phone = phone.substring(0,3)+"XXXX"+phone.substring(phoneLength-4,phoneLength); + phone = phone.substring(0,3)+"...."+phone.substring(phoneLength-4,phoneLength); shippingVo.setReceiverPhone(phone); return shippingVo; } diff --git a/src/main/java/com/mark/util/FileUtil.java b/src/main/java/com/mark/util/FileUtil.java new file mode 100644 index 0000000000000000000000000000000000000000..7098e0a1e0e14dbc590ef8d5a2adb827e981ccc6 --- /dev/null +++ b/src/main/java/com/mark/util/FileUtil.java @@ -0,0 +1,34 @@ +package com.mark.util; + +import org.springframework.mock.web.MockMultipartFile; +import org.springframework.web.multipart.MultipartFile; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; + +/** + * @Description :文件转换的工具类 + * @Author: Kingsley + * @CreateDate: 2018/10/28 19:04 + * @Version: 2.0 + * @Copyright : 豆浆油条个人非正式工作室 + */ +public class FileUtil { + + public static MultipartFile fileToMultipartFile(File targetFile){ + + FileInputStream inputStream = null; + MultipartFile multipartFile = null; + try { + inputStream = new FileInputStream(targetFile); + multipartFile = new MockMultipartFile(targetFile.getName(),targetFile.getName(),"image/jpeg", inputStream); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + return multipartFile; + } +} diff --git a/src/main/java/com/mark/util/OSSClientUtil.java b/src/main/java/com/mark/util/OSSClientUtil.java index 97d219cd9c398460370880739f9b3217e0aaca58..5c9edddc6d0d3fdb3c52f801d34860d9dfd57533 100644 --- a/src/main/java/com/mark/util/OSSClientUtil.java +++ b/src/main/java/com/mark/util/OSSClientUtil.java @@ -3,9 +3,11 @@ package com.mark.util; import com.aliyun.oss.OSSClient; import com.aliyun.oss.model.ObjectMetadata; import com.aliyun.oss.model.PutObjectResult; +import com.mark.exception.Campuso2oException; import com.mark.exception.ImageException; import lombok.extern.slf4j.Slf4j; import net.coobird.thumbnailator.Thumbnails; +import org.apache.commons.lang3.StringUtils; import org.springframework.mock.web.MockMultipartFile; import org.springframework.web.multipart.MultipartFile; @@ -92,9 +94,13 @@ public class OSSClientUtil { */ private static String getNewName(MultipartFile multipartFile, String imageRole, Integer roleId) { //对待上传的文件进行压缩处理 - multipartFile = ImageUtil.generateThumbnail(multipartFile, imageRole); - + if(!StringUtils.equals("qr",imageRole)){ + multipartFile = ImageUtil.generateThumbnail(multipartFile, imageRole); + } String originalFilename = multipartFile.getOriginalFilename(); + if (StringUtils.isBlank(originalFilename)) { + throw new Campuso2oException("上传文件的原文件名不能为空"); + } String fileExtensionName = originalFilename.substring(originalFilename.lastIndexOf(".")).toLowerCase(); Random random = new Random(); String newName = random.nextInt(10000) + System.currentTimeMillis() + fileExtensionName; diff --git a/src/main/java/com/mark/vo/OrderItemVo.java b/src/main/java/com/mark/vo/OrderItemVo.java index 573611a0ab8ecdb05af6fe26057c311988922e6d..b041ddf1e47049eadeb7573649d394140c863dcc 100644 --- a/src/main/java/com/mark/vo/OrderItemVo.java +++ b/src/main/java/com/mark/vo/OrderItemVo.java @@ -1,8 +1,5 @@ package com.mark.vo; -import com.mark.enums.OrderStatusEnum; -import com.mark.pojo.OrderItem; -import com.mark.util.DateTimeUtil; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; @@ -23,57 +20,92 @@ import java.math.BigDecimal; @AllArgsConstructor public class OrderItemVo { - private Integer id; //ID - private Long orderNo; //订单号 - private Integer productId; //商品ID - private Integer sellerId; //卖家ID - private String sellerName; //卖家姓名 - private String productName; //产品的名称 - private String productImage; //主图 - private BigDecimal currentUnitPrice; //价格 - private Integer quantity; //数量 - private BigDecimal totalPrice; //总价 - private Integer enableStatus; //订单的状态 - private String enableStatusDes; //订单的状态描述 - private String operation; //操作 - private String createTime; //创建时间 - private String paymentTime; //支付时间 - private String sendTime; //发货时间 - private String endTime; //结束时间 - - - public OrderItemVo assembleOrderItemVo(OrderItem orderItem) { - OrderItemVo orderItemVo = new OrderItemVo(); - orderItemVo.setId(orderItem.getId()); - orderItemVo.setOrderNo(orderItem.getOrderNo()); - orderItemVo.setProductId(orderItem.getProductId()); - orderItemVo.setSellerId(orderItem.getSellerId()); - orderItemVo.setProductName(orderItem.getProductName()); - orderItemVo.setProductImage(orderItem.getProductImg()); - orderItemVo.setCurrentUnitPrice(orderItem.getCurrentUnitPrice()); - orderItemVo.setQuantity(orderItem.getQuantity()); - orderItemVo.setTotalPrice(orderItem.getTotalPrice()); - orderItemVo.setEnableStatus(orderItem.getEnableStatus()); - if(orderItem.getEnableStatus() != null){ - orderItemVo.setEnableStatusDes(OrderStatusEnum.codeOf(orderItem.getEnableStatus()).getInformation()); - orderItemVo.setOperation(assembleOperation(orderItem.getEnableStatus())); - } - orderItemVo.setCreateTime(DateTimeUtil.dateToStr(orderItem.getCreateTime())); - orderItemVo.setPaymentTime(DateTimeUtil.dateToStr(orderItem.getPaymentTime())); - orderItemVo.setSendTime(DateTimeUtil.dateToStr(orderItem.getSendTime())); - orderItemVo.setEndTime(DateTimeUtil.dateToStr(orderItem.getEndTime())); - return orderItemVo; - } - - private String assembleOperation(Integer enableStatus) {//组装订单的状态 - switch (enableStatus){ - case 0: return "已取消"; - case 10 : return "去取消"; - case 20 : return "等待发货"; - case 40 : return "确认收货"; - case 50 : return "去评论"; - case 60 : return "去评论"; - default: return "不明确"; - } - } + /** + * ID + */ + private Integer id; + + /** + * 订单号 + */ + private Long orderNo; + + /** + * 商品ID + */ + private Integer productId; + + /** + * 卖家ID + */ + private Integer sellerId; + + /** + * 卖家姓名 + */ + private String sellerName; + + /** + * 产品的名称 + */ + private String productName; + + /** + * 商品的主图 + */ + private String productImage; + + /** + * 价格 + */ + private BigDecimal currentUnitPrice; + + /** + * 数量 + */ + private Integer quantity; + + /** + * 总价 + */ + private BigDecimal totalPrice; + + /** + * 订单的状态 + */ + private Integer enableStatus; + + /** + * 订单的状态描述 + */ + private String enableStatusDes; + + /** + * 操作 + */ + private String operation; + + + /** + * 创建时间 + */ + private String createTime; + + /** + * 支付时间 + */ + private String paymentTime; + + /** + * 发货时间 + */ + private String sendTime; + + /** + * 结束时间 + */ + private String endTime; + + + } diff --git a/src/main/java/com/mark/vo/OrderProductVo.java b/src/main/java/com/mark/vo/OrderProductVo.java index 42ba45045df425b587d395f10a9eeb0f4c4b5967..ed70ea27dd6cf8fd3219d7705711c561097192cf 100644 --- a/src/main/java/com/mark/vo/OrderProductVo.java +++ b/src/main/java/com/mark/vo/OrderProductVo.java @@ -21,7 +21,18 @@ import java.util.List; @AllArgsConstructor public class OrderProductVo { + /** + * 订单子明细 + */ private List orderItemVoList; - private BigDecimal productTotalPrice;//总价 + + /** + * 总价 + */ + private BigDecimal productTotalPrice; + + /** + * 图片资源的主机地址 + */ private String imageHost; } diff --git a/src/main/java/com/mark/vo/OrderVo.java b/src/main/java/com/mark/vo/OrderVo.java index 7644343d6df479204634e3649f961ec635cb35bd..cf6415a72f7a4872ee62b803d48b1613bb366618 100644 --- a/src/main/java/com/mark/vo/OrderVo.java +++ b/src/main/java/com/mark/vo/OrderVo.java @@ -21,7 +21,6 @@ import java.util.List; @AllArgsConstructor public class OrderVo { - private Long orderNo;//订单号 private BigDecimal payment;//付款金额 diff --git a/src/main/java/com/mark/vo/ShippingVo.java b/src/main/java/com/mark/vo/ShippingVo.java index fabbb146ba2776adbeeed136ac98548c6918cfcd..a0c4bc810adc44f3717a590a77c3fe81dfc9fd5c 100644 --- a/src/main/java/com/mark/vo/ShippingVo.java +++ b/src/main/java/com/mark/vo/ShippingVo.java @@ -20,9 +20,9 @@ public class ShippingVo { private Integer id; - private String receiverName;//收货人 + private String receiverName; - private String receiverPhone;//电话 + private String receiverPhone; private String receiverProvince; diff --git a/src/main/resources.dev/campus.properties b/src/main/resources.dev/campus.properties index c39266d2de650233837b9e334d4cb5fe1be22408..22f272df30bedae9e11f8fe9ccc9f0544f0ae7c7 100644 --- a/src/main/resources.dev/campus.properties +++ b/src/main/resources.dev/campus.properties @@ -45,7 +45,7 @@ redis.test.return=false #redis config end==================================================== #\u652F\u4ED8\u5B9D\u56DE\u5230\u8BBF\u95EE\u672C\u5730\u7684URL -alipay.callback.url= http://choisaaaa.s3.natapp.cc/pay/alipay_callback.do +alipay.callback.url= http://choisaaaa.s1.natapp.cc/pay/alipay_callback.do #MD5\u52A0\u5BC6\u81EA\u5B9A\u76D0\u503C password.salt = CampusO@O diff --git a/src/main/resources/mappers/CartMapper.xml b/src/main/resources/mappers/CartMapper.xml index 4bf95f0b6afed2ef222797607cb3931a78adf6e2..551b67a5c78c79737fb09fbbe48fb6bb91f19e74 100644 --- a/src/main/resources/mappers/CartMapper.xml +++ b/src/main/resources/mappers/CartMapper.xml @@ -195,4 +195,14 @@ AND checked =1 + + + + + \ No newline at end of file diff --git a/src/test/java/com/mark/dao/CartMapperTest.java b/src/test/java/com/mark/dao/CartMapperTest.java index a80e594b6beccbca0413d0cd9aafbeb8668e61b3..46abb589a0eb5fca918c5b673444a24736777b4c 100644 --- a/src/test/java/com/mark/dao/CartMapperTest.java +++ b/src/test/java/com/mark/dao/CartMapperTest.java @@ -9,6 +9,7 @@ import org.springframework.beans.factory.annotation.Autowired; import java.util.Date; import java.util.List; +import java.util.Map; import static org.junit.Assert.assertEquals; @@ -104,4 +105,14 @@ public class CartMapperTest extends BaseTest{ List cartList = cartMapper.selectCheckedCartByUserId(currentUserId,null); System.out.println(cartList.size()); } + + /** + * 根据卖家分组查询 + */ + @Test + public void testSelectCartGroupBySeller(){ + int userId = 254; + List sellerIds = cartMapper.selectSellerIds(userId); + System.out.println(sellerIds); + } } \ No newline at end of file diff --git a/src/test/java/com/mark/dao/OrderMapperTest.java b/src/test/java/com/mark/dao/OrderMapperTest.java index 3eb92cb0124d6db2bbb98f1440ef7ea2d83d180d..275d28f79118445a0c0bd2ddd18810e5fe27bc39 100644 --- a/src/test/java/com/mark/dao/OrderMapperTest.java +++ b/src/test/java/com/mark/dao/OrderMapperTest.java @@ -76,4 +76,6 @@ public class OrderMapperTest extends BaseTest{ public void testSelectAllOrder() throws Exception { } + + } \ No newline at end of file diff --git a/src/test/java/com/mark/service/impl/OrderServiceImplTest.java b/src/test/java/com/mark/service/impl/OrderServiceImplTest.java index aabf7b6d7e3fbf10e0c1b31b409100b31675d9c3..3415ad2f15bda2d8b4f607a717c9510a8dbc7642 100644 --- a/src/test/java/com/mark/service/impl/OrderServiceImplTest.java +++ b/src/test/java/com/mark/service/impl/OrderServiceImplTest.java @@ -14,10 +14,14 @@ public class OrderServiceImplTest extends BaseTest { @Autowired private IOrderService iOrderService; + /** + * 创建订单 + * @throws Exception + */ @Test - public void testCreateOrder() throws Exception { //1.创建订单 - Integer currentUserId =1; - Integer shippingId =1; + public void testCreateOrder() throws Exception { + Integer currentUserId =254; + Integer shippingId =234; ServerResponse response = iOrderService.createOrder(currentUserId,shippingId); System.out.println(response.getMsg()); }