hr~ 1 ヶ月 前
コミット
fc36155d3c

+ 1 - 2
py-base/src/main/java/com/poyee/common/dict/controller/DictController.java

@@ -4,7 +4,6 @@ package com.poyee.common.dict.controller;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.poyee.base.controller.BaseController;
 import com.poyee.base.dto.Result;
 import com.poyee.common.dict.domain.DictData;
 import com.poyee.common.dict.domain.DictType;
@@ -36,7 +35,7 @@ import java.util.Map;
 @RequestMapping("/dict")
 @Slf4j
 @Api(tags = "字典表管理")
-public class DictController extends BaseController {
+public class DictController {
 
     @Resource
     private IDictDataService dictDataService;

+ 45 - 0
py-order/src/main/java/com/poyee/controller/LotOrderController.java

@@ -0,0 +1,45 @@
+package com.poyee.controller;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.poyee.base.controller.BaseController;
+import com.poyee.base.dto.Result;
+import com.poyee.domain.LotOrder;
+import com.poyee.dto.LotOrderDetailDTO;
+import com.poyee.dto.LotOrderListDTO;
+import com.poyee.req.LotOrderDelivery;
+import com.poyee.service.LotOrderService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.*;
+
+@Api(tags = "拍品订单管理")
+@RestController
+@RequestMapping("/lot/order")
+public class LotOrderController extends BaseController<LotOrderService, LotOrder, LotOrderDetailDTO> {
+
+    @PostMapping("/list")
+    @ApiOperation("拍品订单列表")
+    public Result<LotOrderListDTO> list(@RequestBody LotOrder lotOrder) {
+//        checkAndSetMerchantId(lotOrder);
+        Page<LotOrderListDTO> page = baseService.selectList(lotOrder);
+        return Result.iPage(page);
+    }
+
+    @GetMapping("/detail/{orderNo}")
+    @ApiOperation("拍品订单详情")
+    public Result<LotOrderDetailDTO> detail(@PathVariable("orderNo") String orderNo) {
+//        checkAndSetMerchantId(lotOrder);
+        LotOrderDetailDTO detail = baseService.selectDetail(orderNo, null);
+        if (detail == null) {
+            return Result.error("订单不存在");
+        }
+        return Result.success(detail);
+    }
+
+    @PostMapping("/delivery")
+    @ApiOperation("发货")
+    public Result<Boolean> delivery(@RequestBody LotOrderDelivery lotOrderDelivery) {
+        LotOrderDelivery.checkParam(lotOrderDelivery);
+        return Result.success(baseService.delivery(lotOrderDelivery));
+    }
+}

+ 28 - 0
py-order/src/main/java/com/poyee/domain/GroupOrderExpress.java

@@ -0,0 +1,28 @@
+package com.poyee.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @author huang_run
+ * @date 2026/5/6 18:16
+ */
+
+@Data
+@TableName("group_order_express")
+@ApiModel("拍品订单查询入参")
+public class GroupOrderExpress {
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+    private String orderNo;
+    private String courierNo;
+    private String signStatus;
+    private String result;
+    private Date syncTime;
+    private String logisticsCompany;
+}

+ 48 - 0
py-order/src/main/java/com/poyee/domain/LotOrder.java

@@ -0,0 +1,48 @@
+package com.poyee.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.poyee.base.dto.BaseReq;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+@EqualsAndHashCode(callSuper = true)
+@Data
+@TableName("lot_order_info")
+@ApiModel("拍品订单查询入参")
+public class LotOrder extends BaseReq {
+
+    @TableId(value = "id", type = IdType.AUTO)
+    @ApiModelProperty("订单id")
+    private Long id;
+
+    @ApiModelProperty("订单编号")
+    private String orderNo;
+
+    @ApiModelProperty("拍卖会id")
+    private Long auctionId;
+
+    @ApiModelProperty("拍卖会名称")
+    private String auctionName;
+
+    @ApiModelProperty("拍品id")
+    private Long lotId;
+
+    @ApiModelProperty("拍品名称")
+    private String lotName;
+
+    @ApiModelProperty("商品id")
+    private Long spuId;
+
+    @ApiModelProperty("用户id")
+    private Long userId;
+
+    @ApiModelProperty("商户id")
+    private Long merchantId;
+
+    @ApiModelProperty("订单状态")
+    private Integer status;
+}

+ 82 - 0
py-order/src/main/java/com/poyee/dto/LotOrderDetailDTO.java

@@ -0,0 +1,82 @@
+package com.poyee.dto;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.poyee.base.dto.BaseDto;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+@EqualsAndHashCode(callSuper = true)
+@Data
+@ApiModel("拍品订单详情")
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+public class LotOrderDetailDTO extends BaseDto {
+
+    @ApiModelProperty("拍卖会名称")
+    private String auctionName;
+
+    @ApiModelProperty("拍卖会开始时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date auctionStartTime;
+
+    @ApiModelProperty("拍卖会结束时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date auctionEndTime;
+
+    @ApiModelProperty("拍卖会描述")
+    private String auctionDesc;
+
+    @ApiModelProperty("拍品名称")
+    private String lotName;
+
+    @ApiModelProperty("拍品开始时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date lotStartTime;
+
+    @ApiModelProperty("拍品结束时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date lotEndTime;
+
+    @ApiModelProperty("保证金")
+    private BigDecimal marginDeposit;
+
+    @ApiModelProperty("服务费")
+    private BigDecimal serviceFee;
+
+    @ApiModelProperty("订单id")
+    private Long orderId;
+
+    @ApiModelProperty("订单编号")
+    private String orderNo;
+
+    @ApiModelProperty("成交金额")
+    private BigDecimal transactionAmount;
+
+    @ApiModelProperty("付款时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date paymentTime;
+
+    @ApiModelProperty("用户昵称")
+    private String nickname;
+
+    @ApiModelProperty("用户手机")
+    private String phone;
+
+    @ApiModelProperty("收货人姓名")
+    private String buyerName;
+
+    @ApiModelProperty("收货人手机")
+    private String buyerPhone;
+
+    @ApiModelProperty("收货人地址")
+    private String buyerAddress;
+}

+ 92 - 0
py-order/src/main/java/com/poyee/dto/LotOrderListDTO.java

@@ -0,0 +1,92 @@
+package com.poyee.dto;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.poyee.base.dto.BaseDto;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.*;
+
+import java.util.Date;
+
+@Data
+@ApiModel("拍品订单列表项")
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class LotOrderListDTO extends BaseDto {
+
+    @ApiModelProperty("订单id")
+    private Long id;
+
+    @ApiModelProperty("订单编号")
+    private String orderNo;
+
+    @ApiModelProperty("拍卖会名称")
+    private String auctionName;
+
+    @ApiModelProperty("拍品名称")
+    private String lotName;
+
+    @ApiModelProperty("订单状态")
+    private Integer status;
+
+    @ApiModelProperty("支付金额")
+    private Long paymentAmount;
+
+    @ApiModelProperty("用户信息")
+    private BuyerUserInfo buyerUserInfo;
+
+    @ApiModelProperty("收货信息")
+    private BuyerShippingAddressInfo buyerShippingAddress;
+
+    @ApiModelProperty("快递信息")
+    private LogisticsInfo logisticsInfo;
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @ApiModelProperty("创建时间")
+    private Date createTime;
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @ApiModelProperty("支付时间")
+    private Date payTime;
+
+
+    @ApiModel("用户信息")
+    @Data
+    @Builder
+    @NoArgsConstructor
+    @AllArgsConstructor
+    public static class BuyerUserInfo {
+        @ApiModelProperty("用户昵称")
+        private String nickname;
+        @ApiModelProperty("用户手机号")
+        private String phone;
+    }
+
+    @ApiModel("用户信息")
+    @Data
+    @Builder
+    @NoArgsConstructor
+    @AllArgsConstructor
+    public static class BuyerShippingAddressInfo {
+        @ApiModelProperty("收货人姓名")
+        private String linkName;
+        @ApiModelProperty("收货人手机号")
+        private String phone;
+        @ApiModelProperty("收货人地址")
+        private String address;
+    }
+
+    @ApiModel("快递信息")
+    @Data
+    @Builder
+    @NoArgsConstructor
+    @AllArgsConstructor
+    public static class LogisticsInfo {
+        @ApiModelProperty("快递公司")
+        private String logisticsName;
+        @ApiModelProperty("快递单号")
+        private String trackingNo;
+    }
+}

+ 9 - 0
py-order/src/main/java/com/poyee/mapper/GroupOrderExpressMapper.java

@@ -0,0 +1,9 @@
+package com.poyee.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.poyee.domain.GroupOrderExpress;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface GroupOrderExpressMapper extends BaseMapper<GroupOrderExpress> {
+}

+ 24 - 0
py-order/src/main/java/com/poyee/mapper/LotOrderMapper.java

@@ -0,0 +1,24 @@
+package com.poyee.mapper;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.poyee.base.mapper.IBaseMapper;
+import com.poyee.domain.LotOrder;
+import com.poyee.dto.LotOrderDetailDTO;
+import com.poyee.dto.LotOrderListDTO;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+@Mapper
+public interface LotOrderMapper extends IBaseMapper<LotOrderDetailDTO> {
+
+    Page<LotOrderListDTO> selectList(IPage<LotOrderListDTO> page, @Param("lotOrder") LotOrder lotOrder);
+
+    LotOrderDetailDTO selectDetail(@Param("orderNo")String  orderNo, @Param("merchantId") Long merchantId);
+
+    LotOrder selectByOrderNo(@Param("orderNo") String orderNo);
+
+    int updateStatusByOrderNo(@Param("orderNo") String orderNo,
+                              @Param("sourceStatus") Integer sourceStatus,
+                              @Param("targetStatus") Integer targetStatus);
+}

+ 49 - 0
py-order/src/main/java/com/poyee/req/LotOrderDelivery.java

@@ -0,0 +1,49 @@
+package com.poyee.req;
+
+import cn.hutool.core.util.StrUtil;
+import com.poyee.common.exception.BusinessException;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author huang_run
+ * @date 2026/5/6 18:12
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@ApiModel("发货Request")
+public class LotOrderDelivery {
+    @ApiModelProperty("订单号")
+    private String orderNo;
+    @ApiModelProperty("物流公司编码")
+    private String logisticsCompanyCode;
+    @ApiModelProperty("物流公司名称")
+    private String logisticsCompanyName;
+    @ApiModelProperty("物流单号")
+    private String trackingNo;
+
+
+    public static void checkParam(LotOrderDelivery lotOrderDelivery) {
+        if (lotOrderDelivery == null ) {
+            throw new BusinessException("参数错误");
+        }
+        if(StrUtil.isBlank(lotOrderDelivery.getOrderNo())){
+            throw new BusinessException("订单号不能为空");
+        }
+        if(StrUtil.isBlank(lotOrderDelivery.getLogisticsCompanyCode())){
+            throw new BusinessException("物流公司编码不能为空");
+        }
+        if(StrUtil.isBlank(lotOrderDelivery.getLogisticsCompanyName())){
+            throw new BusinessException("物流公司名称不能为空");
+        }
+        if(StrUtil.isBlank(lotOrderDelivery.getTrackingNo())){
+            throw new BusinessException("物流单号不能为空");
+        }
+    }
+}

+ 18 - 0
py-order/src/main/java/com/poyee/service/LotOrderService.java

@@ -0,0 +1,18 @@
+package com.poyee.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.poyee.base.service.BaseService;
+import com.poyee.domain.LotOrder;
+import com.poyee.dto.LotOrderDetailDTO;
+import com.poyee.dto.LotOrderListDTO;
+import com.poyee.req.LotOrderDelivery;
+
+public interface LotOrderService extends BaseService<LotOrder, LotOrderDetailDTO> {
+
+    Page<LotOrderListDTO> selectList(LotOrder lotOrder);
+
+    LotOrderDetailDTO selectDetail(String orderNo, Long merchantId);
+
+    Boolean delivery(LotOrderDelivery lotOrderDelivery);
+
+}

+ 85 - 0
py-order/src/main/java/com/poyee/service/impl/LotOrderServiceImpl.java

@@ -0,0 +1,85 @@
+package com.poyee.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.poyee.base.service.impl.BaseServiceImpl;
+import com.poyee.common.exception.BusinessException;
+import com.poyee.domain.GroupOrderExpress;
+import com.poyee.domain.LotOrder;
+import com.poyee.dto.LotOrderDetailDTO;
+import com.poyee.dto.LotOrderListDTO;
+import com.poyee.mapper.GroupOrderExpressMapper;
+import com.poyee.mapper.LotOrderMapper;
+import com.poyee.req.LotOrderDelivery;
+import com.poyee.service.LotOrderService;
+import org.apache.commons.lang.StringUtils;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.util.Date;
+
+@Service
+public class LotOrderServiceImpl extends BaseServiceImpl<LotOrderMapper, LotOrder, LotOrderDetailDTO> implements LotOrderService {
+
+    private static final int WAIT_DELIVERY_STATUS = 103;
+    private static final int DELIVERED_STATUS = 104;
+
+    @Resource
+    private GroupOrderExpressMapper groupOrderExpressMapper;
+
+    @Override
+    public Page<LotOrderListDTO> selectList(LotOrder lotOrder) {
+        Page<LotOrderListDTO> page = new Page<>(lotOrder.getPageNo(), lotOrder.getPageSize());
+        return baseMapper.selectList(page, lotOrder);
+    }
+
+    @Override
+    public LotOrderDetailDTO selectDetail(String orderNo, Long merchantId) {
+        return baseMapper.selectDetail(orderNo, merchantId);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean delivery(LotOrderDelivery lotOrderDelivery) {
+        if (lotOrderDelivery == null || StringUtils.isBlank(lotOrderDelivery.getOrderNo())) {
+            throw new BusinessException("订单号不能为空");
+        }
+        LotOrder lotOrder = baseMapper.selectByOrderNo(lotOrderDelivery.getOrderNo());
+        if (lotOrder == null) {
+            throw new BusinessException("订单不存在");
+        }
+        if (!Integer.valueOf(WAIT_DELIVERY_STATUS).equals(lotOrder.getStatus())) {
+            throw new BusinessException("只有待发货订单才能发货");
+        }
+
+        GroupOrderExpress groupOrderExpress = groupOrderExpressMapper.selectOne(
+                new QueryWrapper<GroupOrderExpress>()
+                        .eq("order_no", lotOrderDelivery.getOrderNo())
+                        .last("limit 1")
+        );
+        if (groupOrderExpress == null) {
+            groupOrderExpress = new GroupOrderExpress();
+            groupOrderExpress.setOrderNo(lotOrderDelivery.getOrderNo());
+        }
+        groupOrderExpress.setCourierNo(lotOrderDelivery.getTrackingNo());
+        groupOrderExpress.setLogisticsCompany(lotOrderDelivery.getLogisticsCompanyName());
+        groupOrderExpress.setSyncTime(new Date());
+
+        if (groupOrderExpress.getId() == null) {
+            groupOrderExpressMapper.insert(groupOrderExpress);
+        } else {
+            groupOrderExpressMapper.updateById(groupOrderExpress);
+        }
+
+        int updated = baseMapper.updateStatusByOrderNo(
+                lotOrderDelivery.getOrderNo(),
+                WAIT_DELIVERY_STATUS,
+                DELIVERED_STATUS
+        );
+        if (updated <= 0) {
+            throw new BusinessException("订单状态更新失败");
+        }
+        return true;
+    }
+}

+ 140 - 0
py-order/src/main/resources/mapper/LotOrderMapper.xml

@@ -0,0 +1,140 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.poyee.mapper.LotOrderMapper">
+
+    <resultMap id="lotOrderListMap" type="com.poyee.dto.LotOrderListDTO">
+        <id column="id" property="id"/>
+        <result column="order_no" property="orderNo"/>
+        <result column="auction_name" property="auctionName"/>
+        <result column="lot_name" property="lotName"/>
+        <result column="status" property="status"/>
+        <result column="payment_amount" property="paymentAmount"/>
+        <result column="create_time" property="createTime"/>
+        <result column="pay_time" property="payTime"/>
+        <association property="buyerUserInfo" javaType="com.poyee.dto.LotOrderListDTO$BuyerUserInfo">
+            <result column="buyer_nickname" property="nickname"/>
+            <result column="buyer_phone" property="phone"/>
+        </association>
+        <association property="buyerShippingAddress" javaType="com.poyee.dto.LotOrderListDTO$BuyerShippingAddressInfo">
+            <result column="shipping_link_name" property="linkName"/>
+            <result column="shipping_phone" property="phone"/>
+            <result column="shipping_address" property="address"/>
+        </association>
+        <association property="logisticsInfo" javaType="com.poyee.dto.LotOrderListDTO$LogisticsInfo">
+            <result column="logistics_name" property="logisticsName"/>
+            <result column="tracking_no" property="trackingNo"/>
+        </association>
+    </resultMap>
+
+    <resultMap id="lotOrderDetailMap" type="com.poyee.dto.LotOrderDetailDTO">
+        <id column="order_id" property="orderId"/>
+        <result column="auction_name" property="auctionName"/>
+        <result column="auction_start_time" property="auctionStartTime"/>
+        <result column="auction_end_time" property="auctionEndTime"/>
+        <result column="auction_desc" property="auctionDesc"/>
+        <result column="lot_name" property="lotName"/>
+        <result column="lot_start_time" property="lotStartTime"/>
+        <result column="lot_end_time" property="lotEndTime"/>
+        <result column="margin_deposit" property="marginDeposit"/>
+        <result column="service_fee" property="serviceFee"/>
+        <result column="order_no" property="orderNo"/>
+        <result column="transaction_amount" property="transactionAmount"/>
+        <result column="payment_time" property="paymentTime"/>
+        <result column="nickname" property="nickname"/>
+        <result column="phone" property="phone"/>
+        <result column="buyer_name" property="buyerName"/>
+        <result column="buyer_phone" property="buyerPhone"/>
+        <result column="buyer_address" property="buyerAddress"/>
+    </resultMap>
+
+    <sql id="listSelect">
+        select
+        lo.id,
+        lo.order_no,
+        lo.auction_name,
+        lo.lot_name,
+        lo.status,
+        lo.payment_amount,
+        lo.create_time,
+        lo.pay_time,
+        abu.nickname as buyer_nickname,
+        aa.phone as buyer_phone,
+        lo.shipping_address_likename as shipping_link_name,
+        lo.shipping_address_phone as shipping_phone,
+        lo.shipping_address,
+        goe.logistics_company as logistics_name,
+        goe.courier_no tracking_no
+        from lot_order_info lo
+        left join app_base_user abu on abu.id = lo.user_id
+        left join app_account aa on aa.account = abu.username and aa.status = 0
+        left join group_order_express goe on lo.order_no=goe.order_no
+    </sql>
+
+    <sql id="detailSelect">
+        select lo.auction_name              as auction_name,
+        lo.lot_name                  as lot_name,
+        lo.service_expense           as service_fee,
+        lo.id                        as order_id,
+        lo.order_no,
+        lo.payment_amount            as transaction_amount,
+        lo.pay_time                  as payment_time,
+        abu.nickname,
+        aa.phone,
+        lo.shipping_address_likename as buyer_name,
+        lo.shipping_address_phone    as buyer_phone,
+        lo.shipping_address          as buyer_address,
+        l.start_time                 as lot_start_time,
+        l.end_time                   as lot_end_time,
+        auc.start_time               as auction_start_time,
+        auc.end_time                 as auction_end_time,
+        auc.description              as auction_desc,
+        coalesce(l.deposit, auc.deposit) as margin_deposit
+        from lot_order_info lo
+        left join app_base_user abu on abu.id = lo.user_id
+        left join app_account aa on aa.account = abu.username and aa.status = 0
+        left join lot l on lo.lot_id = l.id
+        left join auction auc on auc.id = l.auction_id
+    </sql>
+
+    <select id="selectList" resultMap="lotOrderListMap">
+        <include refid="listSelect"/>
+        <where>
+            <if test="lotOrder.orderNo != null and lotOrder.orderNo != ''">
+                and lo.order_no = #{lotOrder.orderNo}
+            </if>
+            <if test="lotOrder.status != null">
+                and lo.status = #{lotOrder.status}
+            </if>
+            <if test="lotOrder.merchantId != null">
+                and lo.merchant_id = #{lotOrder.merchantId}
+            </if>
+        </where>
+        order by lo.create_time desc
+    </select>
+
+    <select id="selectDetail" resultMap="lotOrderDetailMap">
+        <include refid="detailSelect"/>
+        <where>
+            and lo.order_no = #{orderNo}
+            <if test="merchantId != null">
+                and lo.merchant_id = #{merchantId}
+            </if>
+        </where>
+    </select>
+
+    <select id="selectByOrderNo" resultType="com.poyee.domain.LotOrder">
+        select id, order_no, status
+        from lot_order_info
+        where order_no = #{orderNo}
+        limit 1
+    </select>
+
+    <update id="updateStatusByOrderNo">
+        update lot_order_info
+        set status = #{targetStatus}
+        where order_no = #{orderNo}
+          and status = #{sourceStatus}
+    </update>
+</mapper>

+ 5 - 1
py-starter/pom.xml

@@ -46,6 +46,10 @@
             <groupId>com.poyee</groupId>
             <artifactId>py-goods</artifactId>
         </dependency>
+        <dependency>
+            <groupId>com.poyee</groupId>
+            <artifactId>py-order</artifactId>
+        </dependency>
 
     </dependencies>
 
@@ -81,4 +85,4 @@
     </build>
 
 
-</project>
+</project>