26 changed files with 818 additions and 89 deletions
@ -0,0 +1,23 @@ |
|||||
|
package cn.nla.coupon.controller; |
||||
|
|
||||
|
|
||||
|
import io.swagger.annotations.Api; |
||||
|
import org.springframework.web.bind.annotation.RequestMapping; |
||||
|
|
||||
|
import org.springframework.web.bind.annotation.RestController; |
||||
|
|
||||
|
/** |
||||
|
* <p> |
||||
|
* 优惠券记录锁定任务表 前端控制器 |
||||
|
* </p> |
||||
|
* |
||||
|
* @author YJs |
||||
|
* @since 2024-08-14 |
||||
|
*/ |
||||
|
@Api(tags = "优惠券记录锁定任务控制器") |
||||
|
@RestController |
||||
|
@RequestMapping("/cop/couponTask/v1") |
||||
|
public class CouponTaskController { |
||||
|
|
||||
|
} |
||||
|
|
@ -0,0 +1,23 @@ |
|||||
|
package cn.nla.coupon.mapper; |
||||
|
|
||||
|
import cn.nla.coupon.model.entity.CouponTaskEntity; |
||||
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
||||
|
import org.apache.ibatis.annotations.Param; |
||||
|
|
||||
|
import java.util.List; |
||||
|
|
||||
|
/** |
||||
|
* <p> |
||||
|
* 优惠券记录锁定任务表 Mapper 接口 |
||||
|
* </p> |
||||
|
* |
||||
|
* @author YJs |
||||
|
* @since 2024-08-14 |
||||
|
*/ |
||||
|
public interface CouponTaskMapper extends BaseMapper<CouponTaskEntity> { |
||||
|
|
||||
|
/** |
||||
|
* 批量插入 |
||||
|
*/ |
||||
|
int insertBatch(@Param("couponTaskList") List<CouponTaskEntity> couponTaskList); |
||||
|
} |
@ -0,0 +1,50 @@ |
|||||
|
package cn.nla.coupon.model.entity; |
||||
|
|
||||
|
import com.baomidou.mybatisplus.annotation.TableName; |
||||
|
import com.baomidou.mybatisplus.annotation.IdType; |
||||
|
import java.util.Date; |
||||
|
import com.baomidou.mybatisplus.annotation.TableId; |
||||
|
import java.io.Serializable; |
||||
|
import lombok.Data; |
||||
|
import lombok.EqualsAndHashCode; |
||||
|
|
||||
|
/** |
||||
|
* <p> |
||||
|
* 优惠券记录锁定任务表 |
||||
|
* </p> |
||||
|
* |
||||
|
* @author YJs |
||||
|
* @since 2024-08-14 |
||||
|
*/ |
||||
|
@Data |
||||
|
@EqualsAndHashCode(callSuper = false) |
||||
|
@TableName("coupon_task") |
||||
|
public class CouponTaskEntity implements Serializable { |
||||
|
|
||||
|
private static final long serialVersionUID = 1L; |
||||
|
|
||||
|
@TableId(value = "id", type = IdType.AUTO) |
||||
|
private Long id; |
||||
|
|
||||
|
/** |
||||
|
* 优惠券记录id |
||||
|
*/ |
||||
|
private Long couponRecordId; |
||||
|
|
||||
|
/** |
||||
|
* 创建时间 |
||||
|
*/ |
||||
|
private Date createTime; |
||||
|
|
||||
|
/** |
||||
|
* 订单号 |
||||
|
*/ |
||||
|
private String outTradeNo; |
||||
|
|
||||
|
/** |
||||
|
* 锁定状态 锁定LOCK-完成FINISH 取消CANCEL |
||||
|
*/ |
||||
|
private String lockState; |
||||
|
|
||||
|
|
||||
|
} |
@ -0,0 +1,16 @@ |
|||||
|
package cn.nla.coupon.service; |
||||
|
|
||||
|
import cn.nla.coupon.model.entity.CouponTaskEntity; |
||||
|
import com.baomidou.mybatisplus.extension.service.IService; |
||||
|
|
||||
|
/** |
||||
|
* <p> |
||||
|
* 优惠券记录锁定任务表 服务类 |
||||
|
* </p> |
||||
|
* |
||||
|
* @author YJs |
||||
|
* @since 2024-08-14 |
||||
|
*/ |
||||
|
public interface CouponTaskService extends IService<CouponTaskEntity> { |
||||
|
|
||||
|
} |
@ -0,0 +1,20 @@ |
|||||
|
package cn.nla.coupon.service.impl; |
||||
|
|
||||
|
import cn.nla.coupon.model.entity.CouponTaskEntity; |
||||
|
import cn.nla.coupon.mapper.CouponTaskMapper; |
||||
|
import cn.nla.coupon.service.CouponTaskService; |
||||
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
||||
|
import org.springframework.stereotype.Service; |
||||
|
|
||||
|
/** |
||||
|
* <p> |
||||
|
* 优惠券记录锁定任务表 服务实现类 |
||||
|
* </p> |
||||
|
* |
||||
|
* @author YJs |
||||
|
* @since 2024-08-14 |
||||
|
*/ |
||||
|
@Service |
||||
|
public class CouponTaskServiceImpl extends ServiceImpl<CouponTaskMapper, CouponTaskEntity> implements CouponTaskService { |
||||
|
|
||||
|
} |
@ -1,74 +0,0 @@ |
|||||
server: |
|
||||
port: 9002 |
|
||||
spring: |
|
||||
application: |
|
||||
name: nla-coupon-service |
|
||||
# 缓存 |
|
||||
redis: |
|
||||
host: 127.0.0.1 |
|
||||
port: 6379 |
|
||||
database: 0 |
|
||||
password: yuan123456 |
|
||||
#数据库配置 |
|
||||
datasource: |
|
||||
driver-class-name: com.mysql.cj.jdbc.Driver |
|
||||
url: jdbc:mysql://117.72.43.105:3306/p_nla_coupon?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai |
|
||||
username: root |
|
||||
password: Yuan625621105. |
|
||||
#注册中心地址 |
|
||||
cloud: |
|
||||
nacos: |
|
||||
discovery: |
|
||||
server-addr: 117.72.43.105:8848 |
|
||||
# username: nacos |
|
||||
# password: sW5U%pxecL#p |
|
||||
# namespace: yjs |
|
||||
|
|
||||
#消息队列 |
|
||||
rabbitmq: |
|
||||
host: 192.168.30.130 |
|
||||
port: 5672 |
|
||||
virtual-host: / |
|
||||
password: admin |
|
||||
username: admin |
|
||||
#开启手动确认消息 |
|
||||
listener: |
|
||||
simple: |
|
||||
acknowledge-mode: manual |
|
||||
|
|
||||
#配置plus打印sql⽇志 |
|
||||
mybatis-plus: |
|
||||
configuration: |
|
||||
log-impl: |
|
||||
org.apache.ibatis.logging.stdout.StdOutImpl |
|
||||
#设置⽇志级别,ERROR/WARN/INFO/DEBUG,默认是INFO以上才显示 |
|
||||
#logging: |
|
||||
# level: |
|
||||
# root: INFO |
|
||||
|
|
||||
|
|
||||
#seata配置 |
|
||||
#seata: |
|
||||
# tx-service-group: ${spring.application.name}-group |
|
||||
# service: |
|
||||
# grouplist: |
|
||||
# nla: 127.0.0.1:8091 |
|
||||
# vgroup-mapping: |
|
||||
# nla-coupon-service-group: nla |
|
||||
|
|
||||
|
|
||||
##自定义消息队列配置,发送锁定库存消息-》延迟exchange-》lock.queue-》死信exchange-》release.queue |
|
||||
mq: |
|
||||
config: |
|
||||
#延迟队列,不能被监听消费 |
|
||||
coupon_release_delay_queue: coupon.release.delay.queue |
|
||||
#延迟队列的消息过期后转发的队列 |
|
||||
coupon_release_queue: coupon.release.queue |
|
||||
#交换机 |
|
||||
coupon_event_exchange: coupon.event.exchange |
|
||||
#进入延迟队列的路由key |
|
||||
coupon_release_delay_routing_key: coupon.release.delay.routing.key |
|
||||
#消息过期,进入释放死信队列的key |
|
||||
coupon_release_routing_key: coupon.release.routing.key |
|
||||
#消息过期时间,毫秒,临时改为6分钟 |
|
||||
ttl: 360000 |
|
@ -0,0 +1,39 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> |
||||
|
<mapper namespace="cn.nla.coupon.mapper.CouponTaskMapper"> |
||||
|
|
||||
|
<!-- 通用查询映射结果 --> |
||||
|
<resultMap id="BaseResultMap" type="cn.nla.coupon.model.entity.CouponTaskEntity"> |
||||
|
<id column="id" property="id"/> |
||||
|
<result column="coupon_record_id" property="couponRecordId"/> |
||||
|
<result column="create_time" property="createTime"/> |
||||
|
<result column="out_trade_no" property="outTradeNo"/> |
||||
|
<result column="lock_state" property="lockState"/> |
||||
|
</resultMap> |
||||
|
|
||||
|
<!-- 通用查询结果列 --> |
||||
|
<sql id="Base_Column_List"> |
||||
|
id, coupon_record_id, create_time, out_trade_no, lock_state |
||||
|
</sql> |
||||
|
|
||||
|
<!-- 通用查询结果列 --> |
||||
|
<sql id="Base_Column_List_No_Id"> |
||||
|
coupon_record_id, create_time, out_trade_no, lock_state |
||||
|
</sql> |
||||
|
|
||||
|
<insert id="insertBatch" parameterType="java.util.List" useGeneratedKeys="true" keyProperty="id"> |
||||
|
insert into coupon_task |
||||
|
( |
||||
|
<include refid="Base_Column_List_No_Id"/> |
||||
|
) |
||||
|
values |
||||
|
<foreach collection="couponTaskList" item="item" index="index" separator=","> |
||||
|
( |
||||
|
#{item.couponRecordId}, |
||||
|
#{item.createTime}, |
||||
|
#{item.outTradeNo}, |
||||
|
#{item.lockState} |
||||
|
) |
||||
|
</foreach> |
||||
|
</insert> |
||||
|
</mapper> |
@ -0,0 +1,85 @@ |
|||||
|
package cn.nla.order.controller; |
||||
|
|
||||
|
|
||||
|
import cn.nla.common.enums.BizCodeEnum; |
||||
|
import cn.nla.common.enums.ClientType; |
||||
|
import cn.nla.common.enums.ProductOrderPayTypeEnum; |
||||
|
import cn.nla.common.util.JsonData; |
||||
|
import cn.nla.order.model.request.ConfirmOrderRequest; |
||||
|
import cn.nla.order.service.ProductOrderService; |
||||
|
import io.swagger.annotations.Api; |
||||
|
import io.swagger.annotations.ApiOperation; |
||||
|
import io.swagger.annotations.ApiParam; |
||||
|
import lombok.extern.slf4j.Slf4j; |
||||
|
import org.apache.commons.lang3.StringUtils; |
||||
|
import org.springframework.web.bind.annotation.*; |
||||
|
|
||||
|
import javax.annotation.Resource; |
||||
|
import javax.servlet.http.HttpServletResponse; |
||||
|
import java.io.IOException; |
||||
|
|
||||
|
/** |
||||
|
* <p> |
||||
|
* 订单表 前端控制器 |
||||
|
* </p> |
||||
|
* |
||||
|
* @author YJs |
||||
|
* @since 2024-08-13 |
||||
|
*/ |
||||
|
@Api(tags = "订单控制器") |
||||
|
@Slf4j |
||||
|
@RestController |
||||
|
@RequestMapping("/odr/product/v1") |
||||
|
public class ProductOrderController { |
||||
|
@Resource |
||||
|
private ProductOrderService orderService; |
||||
|
/** |
||||
|
* 查询订单状态 |
||||
|
* |
||||
|
* 此接口没有登录拦截,可以增加一个秘钥进行rpc通信 |
||||
|
*/ |
||||
|
@ApiOperation("查询订单状态") |
||||
|
@GetMapping("query_state") |
||||
|
public JsonData queryProductOrderState(@ApiParam("订单号") @RequestParam("out_trade_no")String outTradeNo){ |
||||
|
log.info("获取订单查询: {}",outTradeNo); |
||||
|
String state = orderService.queryProductOrderState(outTradeNo); |
||||
|
return StringUtils.isBlank(state)?JsonData.buildResult(BizCodeEnum.ORDER_CONFIRM_NOT_EXIST):JsonData.buildSuccess(state); |
||||
|
|
||||
|
} |
||||
|
|
||||
|
@ApiOperation("提交订单") |
||||
|
@PostMapping("confirm") |
||||
|
public void confirmOrder(@ApiParam("订单对象") @RequestBody ConfirmOrderRequest orderRequest, HttpServletResponse response) { |
||||
|
JsonData jsonData = orderService.confirmOrder(orderRequest); |
||||
|
if (jsonData.getCode() == 0) { |
||||
|
String client = orderRequest.getClientType(); |
||||
|
String payType = orderRequest.getPayType(); |
||||
|
//如果是支付宝网页支付,都是跳转网页,APP除外
|
||||
|
if (payType.equalsIgnoreCase(ProductOrderPayTypeEnum.ALIPAY.name())) { |
||||
|
log.info("创建支付宝订单成功:{}", orderRequest.toString()); |
||||
|
if (client.equalsIgnoreCase(ClientType.H5.name())) { |
||||
|
writeData(response, jsonData); |
||||
|
} else if (client.equalsIgnoreCase(ClientType.APP.name())) { |
||||
|
//APP SDK支付 TODO
|
||||
|
} |
||||
|
} else if (payType.equalsIgnoreCase(ProductOrderPayTypeEnum.WECHAT.name())) { |
||||
|
//微信支付 TODO
|
||||
|
} |
||||
|
} else { |
||||
|
log.error("创建订单失败{}", jsonData); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
|
private void writeData(HttpServletResponse response, JsonData jsonData) { |
||||
|
try { |
||||
|
response.setContentType("text/html;charset=UTF8"); |
||||
|
response.getWriter().write(jsonData.getData().toString()); |
||||
|
response.getWriter().flush(); |
||||
|
response.getWriter().close(); |
||||
|
} catch (IOException e) { |
||||
|
log.error("写出Html异常", e); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
@ -0,0 +1,23 @@ |
|||||
|
package cn.nla.order.controller; |
||||
|
|
||||
|
|
||||
|
import io.swagger.annotations.Api; |
||||
|
import org.springframework.web.bind.annotation.RequestMapping; |
||||
|
|
||||
|
import org.springframework.web.bind.annotation.RestController; |
||||
|
|
||||
|
/** |
||||
|
* <p> |
||||
|
* 订单项表 前端控制器 |
||||
|
* </p> |
||||
|
* |
||||
|
* @author YJs |
||||
|
* @since 2024-08-13 |
||||
|
*/ |
||||
|
@Api(tags = "订单项控制器") |
||||
|
@RestController |
||||
|
@RequestMapping("/odr/productItem") |
||||
|
public class ProductOrderItemController { |
||||
|
|
||||
|
} |
||||
|
|
@ -0,0 +1,16 @@ |
|||||
|
package cn.nla.order.mapper; |
||||
|
|
||||
|
import cn.nla.order.model.entity.ProductOrderItemEntity; |
||||
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
||||
|
|
||||
|
/** |
||||
|
* <p> |
||||
|
* 订单项表 Mapper 接口 |
||||
|
* </p> |
||||
|
* |
||||
|
* @author YJs |
||||
|
* @since 2024-08-13 |
||||
|
*/ |
||||
|
public interface ProductOrderItemMapper extends BaseMapper<ProductOrderItemEntity> { |
||||
|
|
||||
|
} |
@ -0,0 +1,16 @@ |
|||||
|
package cn.nla.order.mapper; |
||||
|
|
||||
|
import cn.nla.order.model.entity.ProductOrderEntity; |
||||
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
||||
|
|
||||
|
/** |
||||
|
* <p> |
||||
|
* 订单表 Mapper 接口 |
||||
|
* </p> |
||||
|
* |
||||
|
* @author YJs |
||||
|
* @since 2024-08-13 |
||||
|
*/ |
||||
|
public interface ProductOrderMapper extends BaseMapper<ProductOrderEntity> { |
||||
|
|
||||
|
} |
@ -0,0 +1,96 @@ |
|||||
|
package cn.nla.order.model.entity; |
||||
|
|
||||
|
import java.math.BigDecimal; |
||||
|
import com.baomidou.mybatisplus.annotation.TableName; |
||||
|
import com.baomidou.mybatisplus.annotation.IdType; |
||||
|
import java.util.Date; |
||||
|
import com.baomidou.mybatisplus.annotation.TableId; |
||||
|
import java.io.Serializable; |
||||
|
import lombok.Data; |
||||
|
import lombok.EqualsAndHashCode; |
||||
|
|
||||
|
/** |
||||
|
* <p> |
||||
|
* 订单表 |
||||
|
* </p> |
||||
|
* |
||||
|
* @author YJs |
||||
|
* @since 2024-08-13 |
||||
|
*/ |
||||
|
@Data |
||||
|
@EqualsAndHashCode(callSuper = false) |
||||
|
@TableName("product_order") |
||||
|
public class ProductOrderEntity implements Serializable { |
||||
|
|
||||
|
private static final long serialVersionUID = 1L; |
||||
|
|
||||
|
@TableId(value = "id", type = IdType.AUTO) |
||||
|
private Long id; |
||||
|
|
||||
|
/** |
||||
|
* 订单唯一标识 |
||||
|
*/ |
||||
|
private String outTradeNo; |
||||
|
|
||||
|
/** |
||||
|
* NEW 未支付订单,PAY已经支付订单,CANCEL超时取消订单 |
||||
|
*/ |
||||
|
private String state; |
||||
|
|
||||
|
/** |
||||
|
* 订单生成时间 |
||||
|
*/ |
||||
|
private Date createTime; |
||||
|
|
||||
|
/** |
||||
|
* 订单总金额 |
||||
|
*/ |
||||
|
private BigDecimal totalAmount; |
||||
|
|
||||
|
/** |
||||
|
* 订单实际支付价格 |
||||
|
*/ |
||||
|
private BigDecimal payAmount; |
||||
|
|
||||
|
/** |
||||
|
* 支付类型,微信-银行-支付宝 |
||||
|
*/ |
||||
|
private String payType; |
||||
|
|
||||
|
/** |
||||
|
* 昵称 |
||||
|
*/ |
||||
|
private String nickname; |
||||
|
|
||||
|
/** |
||||
|
* 头像 |
||||
|
*/ |
||||
|
private String headImg; |
||||
|
|
||||
|
/** |
||||
|
* 用户id |
||||
|
*/ |
||||
|
private Integer userId; |
||||
|
|
||||
|
/** |
||||
|
* 0表示未删除,1表示已经删除 |
||||
|
*/ |
||||
|
private Integer del; |
||||
|
|
||||
|
/** |
||||
|
* 更新时间 |
||||
|
*/ |
||||
|
private Date updateTime; |
||||
|
|
||||
|
/** |
||||
|
* 订单类型 DAILY普通单,PROMOTION促销订单 |
||||
|
*/ |
||||
|
private String orderType; |
||||
|
|
||||
|
/** |
||||
|
* 收货地址 json存储 |
||||
|
*/ |
||||
|
private String receiverAddress; |
||||
|
|
||||
|
|
||||
|
} |
@ -0,0 +1,70 @@ |
|||||
|
package cn.nla.order.model.entity; |
||||
|
|
||||
|
import java.math.BigDecimal; |
||||
|
import com.baomidou.mybatisplus.annotation.TableName; |
||||
|
import com.baomidou.mybatisplus.annotation.IdType; |
||||
|
import java.util.Date; |
||||
|
import com.baomidou.mybatisplus.annotation.TableId; |
||||
|
import java.io.Serializable; |
||||
|
import lombok.Data; |
||||
|
import lombok.EqualsAndHashCode; |
||||
|
|
||||
|
/** |
||||
|
* <p> |
||||
|
* 订单项表 |
||||
|
* </p> |
||||
|
* |
||||
|
* @author YJs |
||||
|
* @since 2024-08-13 |
||||
|
*/ |
||||
|
@Data |
||||
|
@EqualsAndHashCode(callSuper = false) |
||||
|
@TableName("product_order_item") |
||||
|
public class ProductOrderItemEntity implements Serializable { |
||||
|
|
||||
|
private static final long serialVersionUID = 1L; |
||||
|
|
||||
|
@TableId(value = "id", type = IdType.AUTO) |
||||
|
private Long id; |
||||
|
|
||||
|
/** |
||||
|
* 订单号 |
||||
|
*/ |
||||
|
private Long productOrderId; |
||||
|
|
||||
|
private String outTradeNo; |
||||
|
|
||||
|
/** |
||||
|
* 产品id |
||||
|
*/ |
||||
|
private Long productId; |
||||
|
|
||||
|
/** |
||||
|
* 商品名称 |
||||
|
*/ |
||||
|
private String productName; |
||||
|
|
||||
|
/** |
||||
|
* 商品图片 |
||||
|
*/ |
||||
|
private String productImg; |
||||
|
|
||||
|
/** |
||||
|
* 购买数量 |
||||
|
*/ |
||||
|
private Integer buyNum; |
||||
|
|
||||
|
private Date createTime; |
||||
|
|
||||
|
/** |
||||
|
* 购物项商品总价格 |
||||
|
*/ |
||||
|
private BigDecimal totalAmount; |
||||
|
|
||||
|
/** |
||||
|
* 购物项商品单价 |
||||
|
*/ |
||||
|
private BigDecimal amount; |
||||
|
|
||||
|
|
||||
|
} |
@ -0,0 +1,16 @@ |
|||||
|
package cn.nla.order.service; |
||||
|
|
||||
|
import cn.nla.order.model.entity.ProductOrderItemEntity; |
||||
|
import com.baomidou.mybatisplus.extension.service.IService; |
||||
|
|
||||
|
/** |
||||
|
* <p> |
||||
|
* 订单项表 服务类 |
||||
|
* </p> |
||||
|
* |
||||
|
* @author YJs |
||||
|
* @since 2024-08-13 |
||||
|
*/ |
||||
|
public interface ProductOrderItemService extends IService<ProductOrderItemEntity> { |
||||
|
|
||||
|
} |
@ -0,0 +1,35 @@ |
|||||
|
package cn.nla.order.service; |
||||
|
|
||||
|
import cn.nla.common.util.JsonData; |
||||
|
import cn.nla.order.model.entity.ProductOrderEntity; |
||||
|
import cn.nla.order.model.request.ConfirmOrderRequest; |
||||
|
import com.baomidou.mybatisplus.extension.service.IService; |
||||
|
|
||||
|
/** |
||||
|
* <p> |
||||
|
* 订单表 服务类 |
||||
|
* </p> |
||||
|
* |
||||
|
* @author YJs |
||||
|
* @since 2024-08-13 |
||||
|
*/ |
||||
|
public interface ProductOrderService extends IService<ProductOrderEntity> { |
||||
|
|
||||
|
/** |
||||
|
* 防重提交<br> |
||||
|
* 用户微服务-确认收货地址 <br> |
||||
|
* 商品微服务-获取最新购物项和价格<br> |
||||
|
* 订单验价<br> |
||||
|
* * 优惠券微服务-获取优惠券<br> |
||||
|
* * 验证价格<br> |
||||
|
* 锁定优惠券<br> |
||||
|
* 锁定商品库存<br> |
||||
|
* 创建订单对象<br> |
||||
|
* 创建子订单对象<br> |
||||
|
* 发送延迟消息-用于自动关单<br> |
||||
|
* 创建支付信息-对接三方支付 |
||||
|
*/ |
||||
|
JsonData confirmOrder(ConfirmOrderRequest request); |
||||
|
|
||||
|
String queryProductOrderState(String outTradeNo); |
||||
|
} |
@ -0,0 +1,20 @@ |
|||||
|
package cn.nla.order.service.impl; |
||||
|
|
||||
|
import cn.nla.order.model.entity.ProductOrderItemEntity; |
||||
|
import cn.nla.order.mapper.ProductOrderItemMapper; |
||||
|
import cn.nla.order.service.ProductOrderItemService; |
||||
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
||||
|
import org.springframework.stereotype.Service; |
||||
|
|
||||
|
/** |
||||
|
* <p> |
||||
|
* 订单项表 服务实现类 |
||||
|
* </p> |
||||
|
* |
||||
|
* @author YJs |
||||
|
* @since 2024-08-13 |
||||
|
*/ |
||||
|
@Service |
||||
|
public class ProductOrderItemServiceImpl extends ServiceImpl<ProductOrderItemMapper, ProductOrderItemEntity> implements ProductOrderItemService { |
||||
|
|
||||
|
} |
@ -0,0 +1,38 @@ |
|||||
|
package cn.nla.order.service.impl; |
||||
|
|
||||
|
import cn.nla.common.util.JsonData; |
||||
|
import cn.nla.order.model.entity.ProductOrderEntity; |
||||
|
import cn.nla.order.mapper.ProductOrderMapper; |
||||
|
import cn.nla.order.model.request.ConfirmOrderRequest; |
||||
|
import cn.nla.order.service.ProductOrderService; |
||||
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
||||
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
||||
|
import org.springframework.stereotype.Service; |
||||
|
|
||||
|
/** |
||||
|
* <p> |
||||
|
* 订单表 服务实现类 |
||||
|
* </p> |
||||
|
* |
||||
|
* @author YJs |
||||
|
* @since 2024-08-13 |
||||
|
*/ |
||||
|
@Service |
||||
|
public class ProductOrderServiceImpl extends ServiceImpl<ProductOrderMapper, ProductOrderEntity> implements ProductOrderService { |
||||
|
|
||||
|
@Override |
||||
|
public JsonData confirmOrder(ConfirmOrderRequest request) { |
||||
|
return null; |
||||
|
} |
||||
|
|
||||
|
@Override |
||||
|
public String queryProductOrderState(String outTradeNo) { |
||||
|
ProductOrderEntity productOrderDO = baseMapper.selectOne(new QueryWrapper<ProductOrderEntity>() |
||||
|
.eq("out_trade_no", outTradeNo)); |
||||
|
if (productOrderDO == null) { |
||||
|
return ""; |
||||
|
} else { |
||||
|
return productOrderDO.getState(); |
||||
|
} |
||||
|
} |
||||
|
} |
@ -0,0 +1,24 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> |
||||
|
<mapper namespace="cn.nla.order.mapper.ProductOrderItemMapper"> |
||||
|
|
||||
|
<!-- 通用查询映射结果 --> |
||||
|
<resultMap id="BaseResultMap" type="cn.nla.order.model.entity.ProductOrderItemEntity"> |
||||
|
<id column="id" property="id" /> |
||||
|
<result column="product_order_id" property="productOrderId" /> |
||||
|
<result column="out_trade_no" property="outTradeNo" /> |
||||
|
<result column="product_id" property="productId" /> |
||||
|
<result column="product_name" property="productName" /> |
||||
|
<result column="product_img" property="productImg" /> |
||||
|
<result column="buy_num" property="buyNum" /> |
||||
|
<result column="create_time" property="createTime" /> |
||||
|
<result column="total_amount" property="totalAmount" /> |
||||
|
<result column="amount" property="amount" /> |
||||
|
</resultMap> |
||||
|
|
||||
|
<!-- 通用查询结果列 --> |
||||
|
<sql id="Base_Column_List"> |
||||
|
id, product_order_id, out_trade_no, product_id, product_name, product_img, buy_num, create_time, total_amount, amount |
||||
|
</sql> |
||||
|
|
||||
|
</mapper> |
@ -0,0 +1,28 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> |
||||
|
<mapper namespace="cn.nla.order.mapper.ProductOrderMapper"> |
||||
|
|
||||
|
<!-- 通用查询映射结果 --> |
||||
|
<resultMap id="BaseResultMap" type="cn.nla.order.model.entity.ProductOrderEntity"> |
||||
|
<id column="id" property="id" /> |
||||
|
<result column="out_trade_no" property="outTradeNo" /> |
||||
|
<result column="state" property="state" /> |
||||
|
<result column="create_time" property="createTime" /> |
||||
|
<result column="total_amount" property="totalAmount" /> |
||||
|
<result column="pay_amount" property="payAmount" /> |
||||
|
<result column="pay_type" property="payType" /> |
||||
|
<result column="nickname" property="nickname" /> |
||||
|
<result column="head_img" property="headImg" /> |
||||
|
<result column="user_id" property="userId" /> |
||||
|
<result column="del" property="del" /> |
||||
|
<result column="update_time" property="updateTime" /> |
||||
|
<result column="order_type" property="orderType" /> |
||||
|
<result column="receiver_address" property="receiverAddress" /> |
||||
|
</resultMap> |
||||
|
|
||||
|
<!-- 通用查询结果列 --> |
||||
|
<sql id="Base_Column_List"> |
||||
|
id, out_trade_no, state, create_time, total_amount, pay_amount, pay_type, nickname, head_img, user_id, del, update_time, order_type, receiver_address |
||||
|
</sql> |
||||
|
|
||||
|
</mapper> |
@ -0,0 +1,23 @@ |
|||||
|
package cn.nla.product.controller; |
||||
|
|
||||
|
|
||||
|
import io.swagger.annotations.Api; |
||||
|
import org.springframework.web.bind.annotation.RequestMapping; |
||||
|
|
||||
|
import org.springframework.web.bind.annotation.RestController; |
||||
|
|
||||
|
/** |
||||
|
* <p> |
||||
|
* 下单锁库存任务表 前端控制器 |
||||
|
* </p> |
||||
|
* |
||||
|
* @author YJs |
||||
|
* @since 2024-08-14 |
||||
|
*/ |
||||
|
@Api(tags = "下单锁库存任务控制器") |
||||
|
@RestController |
||||
|
@RequestMapping("/pdt/productTask/v1") |
||||
|
public class ProductTaskController { |
||||
|
|
||||
|
} |
||||
|
|
@ -0,0 +1,16 @@ |
|||||
|
package cn.nla.product.mapper; |
||||
|
|
||||
|
import cn.nla.product.model.entity.ProductTaskEntity; |
||||
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
||||
|
|
||||
|
/** |
||||
|
* <p> |
||||
|
* 下单锁库存任务表 Mapper 接口 |
||||
|
* </p> |
||||
|
* |
||||
|
* @author YJs |
||||
|
* @since 2024-08-14 |
||||
|
*/ |
||||
|
public interface ProductTaskMapper extends BaseMapper<ProductTaskEntity> { |
||||
|
|
||||
|
} |
@ -0,0 +1,54 @@ |
|||||
|
package cn.nla.product.model.entity; |
||||
|
|
||||
|
import com.baomidou.mybatisplus.annotation.TableName; |
||||
|
import com.baomidou.mybatisplus.annotation.IdType; |
||||
|
import java.util.Date; |
||||
|
import com.baomidou.mybatisplus.annotation.TableId; |
||||
|
import java.io.Serializable; |
||||
|
import lombok.Data; |
||||
|
import lombok.EqualsAndHashCode; |
||||
|
|
||||
|
/** |
||||
|
* <p> |
||||
|
* 下单锁库存任务表 |
||||
|
* </p> |
||||
|
* |
||||
|
* @author YJs |
||||
|
* @since 2024-08-14 |
||||
|
*/ |
||||
|
@Data |
||||
|
@EqualsAndHashCode(callSuper = false) |
||||
|
@TableName("product_task") |
||||
|
public class ProductTaskEntity implements Serializable { |
||||
|
|
||||
|
private static final long serialVersionUID = 1L; |
||||
|
|
||||
|
@TableId(value = "id", type = IdType.AUTO) |
||||
|
private Long id; |
||||
|
|
||||
|
/** |
||||
|
* 商品id |
||||
|
*/ |
||||
|
private Long productId; |
||||
|
|
||||
|
/** |
||||
|
* 购买数量 |
||||
|
*/ |
||||
|
private Integer buyNum; |
||||
|
|
||||
|
/** |
||||
|
* 商品标题 |
||||
|
*/ |
||||
|
private String productName; |
||||
|
|
||||
|
/** |
||||
|
* 锁定状态锁定LOCK 完成FINISH-取消CANCEL |
||||
|
*/ |
||||
|
private String lockState; |
||||
|
|
||||
|
private String outTradeNo; |
||||
|
|
||||
|
private Date createTime; |
||||
|
|
||||
|
|
||||
|
} |
@ -0,0 +1,16 @@ |
|||||
|
package cn.nla.product.service; |
||||
|
|
||||
|
import cn.nla.product.model.entity.ProductTaskEntity; |
||||
|
import com.baomidou.mybatisplus.extension.service.IService; |
||||
|
|
||||
|
/** |
||||
|
* <p> |
||||
|
* 下单锁库存任务表 服务类 |
||||
|
* </p> |
||||
|
* |
||||
|
* @author YJs |
||||
|
* @since 2024-08-14 |
||||
|
*/ |
||||
|
public interface ProductTaskService extends IService<ProductTaskEntity> { |
||||
|
|
||||
|
} |
@ -0,0 +1,20 @@ |
|||||
|
package cn.nla.product.service.impl; |
||||
|
|
||||
|
import cn.nla.product.model.entity.ProductTaskEntity; |
||||
|
import cn.nla.product.mapper.ProductTaskMapper; |
||||
|
import cn.nla.product.service.ProductTaskService; |
||||
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
||||
|
import org.springframework.stereotype.Service; |
||||
|
|
||||
|
/** |
||||
|
* <p> |
||||
|
* 下单锁库存任务表 服务实现类 |
||||
|
* </p> |
||||
|
* |
||||
|
* @author YJs |
||||
|
* @since 2024-08-14 |
||||
|
*/ |
||||
|
@Service |
||||
|
public class ProductTaskServiceImpl extends ServiceImpl<ProductTaskMapper, ProductTaskEntity> implements ProductTaskService { |
||||
|
|
||||
|
} |
@ -0,0 +1,21 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> |
||||
|
<mapper namespace="cn.nla.product.mapper.ProductTaskMapper"> |
||||
|
|
||||
|
<!-- 通用查询映射结果 --> |
||||
|
<resultMap id="BaseResultMap" type="cn.nla.product.model.entity.ProductTaskEntity"> |
||||
|
<id column="id" property="id" /> |
||||
|
<result column="product_id" property="productId" /> |
||||
|
<result column="buy_num" property="buyNum" /> |
||||
|
<result column="product_name" property="productName" /> |
||||
|
<result column="lock_state" property="lockState" /> |
||||
|
<result column="out_trade_no" property="outTradeNo" /> |
||||
|
<result column="create_time" property="createTime" /> |
||||
|
</resultMap> |
||||
|
|
||||
|
<!-- 通用查询结果列 --> |
||||
|
<sql id="Base_Column_List"> |
||||
|
id, product_id, buy_num, product_name, lock_state, out_trade_no, create_time |
||||
|
</sql> |
||||
|
|
||||
|
</mapper> |
Loading…
Reference in new issue