From 8563e7dbb77a03ec9a3370cf942cdbbfbb151c0c Mon Sep 17 00:00:00 2001 From: feijinping Date: Mon, 27 Feb 2023 17:05:56 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=8B=E5=8D=95=E6=94=AF=E4=BB=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cyl/h5/controller/OrderController.java | 22 ++++ .../com/cyl/h5/controller/UserController.java | 47 ++++++++ .../cyl/h5/pojo/vo/form/OrderSubmitForm.java | 21 ++++ .../com/cyl/oms/convert/OrderConvert.java | 2 + .../java/com/cyl/oms/pojo/vo/OrderVO.java | 7 ++ .../com/cyl/oms/service/OrderService.java | 101 ++++++++++++++++++ .../java/com/cyl/pay/domain/PayOrder.java | 4 + .../java/com/cyl/pay/pojo/vo/PayOrderVO.java | 4 + .../cyl/ums/mapper/MemberAddressMapper.java | 2 + .../cyl/ums/service/MemberAddressService.java | 37 +++++-- .../mapper/ums/MemberAddressMapper.xml | 49 +++++++++ 11 files changed, 287 insertions(+), 9 deletions(-) create mode 100644 ruoyi-mall/src/main/java/com/cyl/h5/controller/OrderController.java create mode 100644 ruoyi-mall/src/main/java/com/cyl/h5/controller/UserController.java create mode 100644 ruoyi-mall/src/main/java/com/cyl/h5/pojo/vo/form/OrderSubmitForm.java create mode 100644 ruoyi-mall/src/main/java/com/cyl/pay/domain/PayOrder.java create mode 100644 ruoyi-mall/src/main/java/com/cyl/pay/pojo/vo/PayOrderVO.java diff --git a/ruoyi-mall/src/main/java/com/cyl/h5/controller/OrderController.java b/ruoyi-mall/src/main/java/com/cyl/h5/controller/OrderController.java new file mode 100644 index 0000000..6447c96 --- /dev/null +++ b/ruoyi-mall/src/main/java/com/cyl/h5/controller/OrderController.java @@ -0,0 +1,22 @@ +package com.cyl.h5.controller; + +import com.cyl.h5.pojo.vo.form.OrderSubmitForm; +import com.cyl.oms.pojo.vo.OrderVO; +import com.cyl.oms.service.OrderService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/order") +public class OrderController { + @Autowired + private OrderService orderService; + @PostMapping("submit") + public ResponseEntity submit(@RequestBody OrderSubmitForm form) { + return ResponseEntity.ok(orderService.submit(form)); + } +} diff --git a/ruoyi-mall/src/main/java/com/cyl/h5/controller/UserController.java b/ruoyi-mall/src/main/java/com/cyl/h5/controller/UserController.java new file mode 100644 index 0000000..219e8dc --- /dev/null +++ b/ruoyi-mall/src/main/java/com/cyl/h5/controller/UserController.java @@ -0,0 +1,47 @@ +package com.cyl.h5.controller; + +import com.cyl.ums.domain.MemberAddress; +import com.cyl.ums.pojo.query.MemberAddressQuery; +import com.cyl.ums.service.MemberAddressService; +import com.ruoyi.common.utils.SecurityUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@RequestMapping("ucenter") +@RestController +public class UserController { + @Autowired + private MemberAddressService memberAddressService; + + @GetMapping("user-address") + public ResponseEntity> queryPageOfAddress() { + MemberAddressQuery q = new MemberAddressQuery(); + q.setMemberId(SecurityUtils.getUserId()); + return ResponseEntity.ok(memberAddressService.selectList(q, null)); + } + + @PostMapping("add-update-user-address") + public ResponseEntity addOrUpdateAddress(@RequestBody MemberAddress address) { + if (address.getId() != null) { + address.setMemberId(null); + memberAddressService.updateSelective(address); + } else { + address.setMemberId(SecurityUtils.getUserId()); + memberAddressService.insert(address); + } + return ResponseEntity.ok(address); + } + + @DeleteMapping("delete-user-address") + public ResponseEntity deleteUserAddress(@RequestBody List ids) { + return ResponseEntity.ok(memberAddressService.deleteUserIds(ids)); + } + + @GetMapping("detail-user-address") + public ResponseEntity detailUserAddress(@RequestParam("id") Long id) { + return ResponseEntity.ok(memberAddressService.selectByUserAndId(id)); + } +} diff --git a/ruoyi-mall/src/main/java/com/cyl/h5/pojo/vo/form/OrderSubmitForm.java b/ruoyi-mall/src/main/java/com/cyl/h5/pojo/vo/form/OrderSubmitForm.java new file mode 100644 index 0000000..7230cc1 --- /dev/null +++ b/ruoyi-mall/src/main/java/com/cyl/h5/pojo/vo/form/OrderSubmitForm.java @@ -0,0 +1,21 @@ +package com.cyl.h5.pojo.vo.form; + +import lombok.Data; + +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; +import java.util.List; + +@Data +public class OrderSubmitForm { + @NotNull + private Long addressId; + private String note; + @NotEmpty + private List skus; + @Data + public static class SkuParam { + private Long skuId; + private Integer quantity; + } +} diff --git a/ruoyi-mall/src/main/java/com/cyl/oms/convert/OrderConvert.java b/ruoyi-mall/src/main/java/com/cyl/oms/convert/OrderConvert.java index 5a33e92..1874554 100644 --- a/ruoyi-mall/src/main/java/com/cyl/oms/convert/OrderConvert.java +++ b/ruoyi-mall/src/main/java/com/cyl/oms/convert/OrderConvert.java @@ -13,4 +13,6 @@ import java.util.List; public interface OrderConvert { List dos2vos(List list); + + OrderVO do2vo(Order order); } diff --git a/ruoyi-mall/src/main/java/com/cyl/oms/pojo/vo/OrderVO.java b/ruoyi-mall/src/main/java/com/cyl/oms/pojo/vo/OrderVO.java index 6f260a2..6bf29cc 100644 --- a/ruoyi-mall/src/main/java/com/cyl/oms/pojo/vo/OrderVO.java +++ b/ruoyi-mall/src/main/java/com/cyl/oms/pojo/vo/OrderVO.java @@ -2,6 +2,11 @@ package com.cyl.oms.pojo.vo; import java.math.BigDecimal; import java.time.LocalDateTime; +import java.util.List; + +import com.cyl.oms.domain.OrderItem; +import com.cyl.pay.domain.PayOrder; +import com.cyl.pay.pojo.vo.PayOrderVO; import com.ruoyi.common.annotation.Excel; import com.fasterxml.jackson.annotation.JsonFormat; import com.ruoyi.common.core.domain.BaseAudit; @@ -102,4 +107,6 @@ public class OrderVO extends BaseAudit { @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @Excel(name = "确认收货时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") private LocalDateTime receiveTime; + private List items; + private PayOrderVO payOrder; } diff --git a/ruoyi-mall/src/main/java/com/cyl/oms/service/OrderService.java b/ruoyi-mall/src/main/java/com/cyl/oms/service/OrderService.java index 87c161b..ac2a16e 100644 --- a/ruoyi-mall/src/main/java/com/cyl/oms/service/OrderService.java +++ b/ruoyi-mall/src/main/java/com/cyl/oms/service/OrderService.java @@ -2,11 +2,33 @@ package com.cyl.oms.service; import java.math.BigDecimal; import java.time.LocalDateTime; +import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.time.LocalDateTime; +import java.util.Map; +import java.util.stream.Collectors; + +import cn.hutool.core.util.StrUtil; +import cn.hutool.crypto.SecureUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.cyl.h5.pojo.vo.form.OrderSubmitForm; +import com.cyl.oms.convert.OrderConvert; +import com.cyl.oms.domain.OrderItem; +import com.cyl.oms.mapper.OrderItemMapper; +import com.cyl.oms.pojo.vo.OrderVO; +import com.cyl.pms.domain.Product; +import com.cyl.pms.domain.Sku; +import com.cyl.pms.mapper.ProductMapper; +import com.cyl.pms.mapper.SkuMapper; +import com.cyl.ums.domain.MemberAddress; +import com.cyl.ums.mapper.MemberAddressMapper; import com.github.pagehelper.PageHelper; +import com.ruoyi.common.core.domain.entity.SysUser; +import com.ruoyi.common.core.domain.model.LoginUser; +import com.ruoyi.common.exception.base.BaseException; +import com.ruoyi.common.utils.SecurityUtils; +import com.ruoyi.system.mapper.SysUserMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Pageable; import org.apache.commons.lang3.StringUtils; @@ -25,6 +47,16 @@ import com.cyl.oms.pojo.query.OrderQuery; public class OrderService { @Autowired private OrderMapper orderMapper; + @Autowired + private OrderConvert orderConvert; + @Autowired + private OrderItemMapper orderItemMapper; + @Autowired + private MemberAddressMapper memberAddressMapper; + @Autowired + private SkuMapper skuMapper; + @Autowired + private ProductMapper productMapper; /** * 查询订单表 @@ -193,4 +225,73 @@ public class OrderService { public int deleteById(Long id) { return orderMapper.deleteById(id); } + + public OrderVO submit(OrderSubmitForm form) { + MemberAddress addr = memberAddressMapper.selectById(form.getAddressId()); + if (addr == null) { + throw new BaseException("参数错误"); + } + List skuIds = form.getSkus().stream().map(OrderSubmitForm.SkuParam::getSkuId).distinct().collect(Collectors.toList()); + List skus = skuMapper.selectBatchIds(skuIds); + if (skuIds.size() != skus.size()) { + throw new BaseException("参数错误"); + } + Map id2sku = skus.stream().collect(Collectors.toMap(Sku::getId, it -> it)); + + Map id2Product = productMapper.selectBatchIds( + skus.stream().map(Sku::getProductId).distinct().collect(Collectors.toList()) + ).stream().collect(Collectors.toMap(Product::getId, it -> it)); + + // 1. 生成订单商品快照 + Order order = new Order(); + order.setTotalAmount(BigDecimal.ZERO); + List items = new ArrayList<>(); + form.getSkus().forEach(it -> { + Sku s = id2sku.get(it.getSkuId()); + Product p = id2Product.get(s.getProductId()); + + OrderItem item = new OrderItem(); + item.setProductId(s.getProductId()); + item.setOutProductId(p.getOutProductId()); + item.setSkuId(it.getSkuId()); + item.setOutSkuId(s.getOutSkuId()); + item.setProductSnapshotId(p.getId()); + item.setSkuSnapshotId(s.getId()); + item.setPic(StrUtil.isNotEmpty(s.getPic()) ? s.getPic() : p.getPic()); + item.setProductName(p.getName()); + item.setSalePrice(s.getPrice()); + item.setQuantity(it.getQuantity()); + item.setProductCategoryId(p.getCategoryId()); + item.setSpData(s.getSpData()); + items.add(item); + order.setTotalAmount(order.getTotalAmount().add(s.getPrice().multiply(BigDecimal.valueOf(it.getQuantity())))); + }); + LoginUser user = SecurityUtils.getLoginUser(); + + // 2. 生成订单 + order.setMemberId(user.getUserId()); + order.setMemberUsername(user.getUsername()); + order.setStatus(0); + order.setAftersaleStatus(1); + order.setAutoConfirmDay(7); + order.setReceiverName(addr.getName()); + order.setReceiverPhone(addr.getPhone()); + order.setReceiverProvince(addr.getProvince()); + order.setReceiverDistrict(addr.getDistrict()); + order.setReceiverDetailAddress(addr.getDetailAddress()); + order.setNote(form.getNote()); + order.setConfirmStatus(0); + order.setDeleteStatus(0); + orderMapper.insert(order); + items.forEach(it -> it.setOrderId(order.getId())); + items.forEach(orderItemMapper::insert); + + // 3. 判断是否付费,生成支付订单 + if (BigDecimal.ZERO.compareTo(order.getTotalAmount()) > 0) { + // todo 生成支付订单 + } + OrderVO vo = orderConvert.do2vo(order); + vo.setItems(items); + return vo; + } } diff --git a/ruoyi-mall/src/main/java/com/cyl/pay/domain/PayOrder.java b/ruoyi-mall/src/main/java/com/cyl/pay/domain/PayOrder.java new file mode 100644 index 0000000..5b384b8 --- /dev/null +++ b/ruoyi-mall/src/main/java/com/cyl/pay/domain/PayOrder.java @@ -0,0 +1,4 @@ +package com.cyl.pay.domain; + +public class PayOrder { +} diff --git a/ruoyi-mall/src/main/java/com/cyl/pay/pojo/vo/PayOrderVO.java b/ruoyi-mall/src/main/java/com/cyl/pay/pojo/vo/PayOrderVO.java new file mode 100644 index 0000000..0a51c00 --- /dev/null +++ b/ruoyi-mall/src/main/java/com/cyl/pay/pojo/vo/PayOrderVO.java @@ -0,0 +1,4 @@ +package com.cyl.pay.pojo.vo; + +public class PayOrderVO { +} diff --git a/ruoyi-mall/src/main/java/com/cyl/ums/mapper/MemberAddressMapper.java b/ruoyi-mall/src/main/java/com/cyl/ums/mapper/MemberAddressMapper.java index 0296927..a42f48c 100644 --- a/ruoyi-mall/src/main/java/com/cyl/ums/mapper/MemberAddressMapper.java +++ b/ruoyi-mall/src/main/java/com/cyl/ums/mapper/MemberAddressMapper.java @@ -18,4 +18,6 @@ public interface MemberAddressMapper extends BaseMapper { * @return 会员收货地址集合 */ List selectByEntity(MemberAddress memberAddress); + + int updateByPrimaryKeySelective(MemberAddress address); } diff --git a/ruoyi-mall/src/main/java/com/cyl/ums/service/MemberAddressService.java b/ruoyi-mall/src/main/java/com/cyl/ums/service/MemberAddressService.java index e1666f3..1983dde 100644 --- a/ruoyi-mall/src/main/java/com/cyl/ums/service/MemberAddressService.java +++ b/ruoyi-mall/src/main/java/com/cyl/ums/service/MemberAddressService.java @@ -1,22 +1,23 @@ package com.cyl.ums.service; -import java.util.Arrays; -import java.util.List; -import java.time.LocalDateTime; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.cyl.ums.domain.MemberAddress; +import com.cyl.ums.mapper.MemberAddressMapper; +import com.cyl.ums.pojo.query.MemberAddressQuery; import com.github.pagehelper.PageHelper; +import com.ruoyi.common.utils.SecurityUtils; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Pageable; -import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; -import com.cyl.ums.mapper.MemberAddressMapper; -import com.cyl.ums.domain.MemberAddress; -import com.cyl.ums.pojo.query.MemberAddressQuery; + +import java.time.LocalDateTime; +import java.util.List; /** * 会员收货地址Service业务层处理 * - * * @author zcc */ @Service @@ -38,7 +39,7 @@ public class MemberAddressService { * 查询会员收货地址列表 * * @param query 查询条件 - * @param page 分页条件 + * @param page 分页条件 * @return 会员收货地址 */ public List selectList(MemberAddressQuery query, Pageable page) { @@ -119,4 +120,22 @@ public class MemberAddressService { public int deleteById(Long id) { return memberAddressMapper.deleteById(id); } + + public Integer deleteUserIds(List ids) { + LambdaQueryWrapper qw = new LambdaQueryWrapper<>(); + qw.eq(MemberAddress::getMemberId, SecurityUtils.getUserId()); + qw.in(MemberAddress::getId, ids); + return memberAddressMapper.delete(qw); + } + + public MemberAddress selectByUserAndId(Long id) { + LambdaQueryWrapper qw = new LambdaQueryWrapper<>(); + qw.eq(MemberAddress::getMemberId, SecurityUtils.getUserId()); + qw.eq(MemberAddress::getId, id); + return memberAddressMapper.selectOne(qw); + } + + public int updateSelective(MemberAddress address) { + return memberAddressMapper.updateByPrimaryKeySelective(address); + } } diff --git a/ruoyi-mall/src/main/resources/mapper/ums/MemberAddressMapper.xml b/ruoyi-mall/src/main/resources/mapper/ums/MemberAddressMapper.xml index d883136..1cce875 100644 --- a/ruoyi-mall/src/main/resources/mapper/ums/MemberAddressMapper.xml +++ b/ruoyi-mall/src/main/resources/mapper/ums/MemberAddressMapper.xml @@ -45,4 +45,53 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and is_default = #{isDefault} + + + update ums_member_address + + + member_id = #{memberId, jdbcType=BIGINT}, + + + name = #{name, jdbcType=BIGINT}, + + + phone = #{phone, jdbcType=BIGINT}, + + + default_status = #{defaultStatus, jdbcType=BIGINT}, + + + post_code = #{postCode, jdbcType=BIGINT}, + + + province = #{province, jdbcType=BIGINT}, + + + city = #{city, jdbcType=BIGINT}, + + + district = #{district, jdbcType=BIGINT}, + + + detail_address = #{detailAddress, jdbcType=BIGINT}, + + + is_default = #{isDefault, jdbcType=BIGINT}, + + + create_by = #{createBy, jdbcType=BIGINT}, + + + create_time = #{createTime, jdbcType=BIGINT}, + + + update_by = #{updateBy, jdbcType=BIGINT}, + + + update_time = #{updateTime, jdbcType=BIGINT}, + + + where id = #{id, jdbcType=BIGINT} +