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