lyx 4 ماه پیش
والد
کامیت
59209a43eb

+ 60 - 0
alien-entity/src/main/java/shop/alien/entity/store/OrderCouponMiddle.java

@@ -0,0 +1,60 @@
+package shop.alien.entity.store;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+@Data
+@JsonInclude
+@TableName("order_coupon_middle")
+public class OrderCouponMiddle {
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    private String couponCode; // 券编号
+
+    private String orderId; // 订单id
+
+    private Integer status; // 订单状态,0.待使用, 1.已核销, 2.已过期, 3.待退款,4.已退款,5.退款失败,6.已取消,
+
+    private BigDecimal price; // 券价格
+
+    private String refundReason; // 退款原因
+
+    @TableField(exist = false)
+    private Integer count;
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Long usedTime; // 使用时间
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Long refundTime; // 退款时间
+    private Integer couponId; // 团购/代金券id
+    @ApiModelProperty(value = "删除标记, 0:未删除, 1:已删除")
+    @TableField("delete_flag")
+    @TableLogic
+    private Integer deleteFlag;
+
+    @ApiModelProperty(value = "创建时间")
+    @TableField(value = "created_time", fill = FieldFill.INSERT)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date createdTime;
+
+    @ApiModelProperty(value = "创建人ID")
+    @TableField("created_user_id")
+    private Integer createdUserId;
+
+    @ApiModelProperty(value = "修改时间")
+    @TableField(value = "updated_time", fill = FieldFill.UPDATE)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date updatedTime;
+
+    @ApiModelProperty(value = "修改人ID")
+    @TableField("updated_user_id")
+    private Integer updatedUserId;
+}

+ 82 - 0
alien-entity/src/main/java/shop/alien/entity/store/dto/LifeUserOrderDto.java

@@ -0,0 +1,82 @@
+package shop.alien.entity.store.dto;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 用户订单
+ */
+@Data
+@JsonInclude
+@ApiModel(description = "订单接收参数用")
+public class LifeUserOrderDto {
+
+    @TableId(value = "id", type = IdType.AUTO)
+    @ApiModelProperty(value = "订单id")
+    private Integer id;
+
+    @ApiModelProperty(value = "用户id")
+    private String userId;
+
+    @ApiModelProperty(value = "商户id")
+    private String storeId;
+
+    @ApiModelProperty(value = "订单编号")
+    private String orderNo;
+
+    @ApiModelProperty(value = "优惠券id")
+    private String yhquanId;
+
+    @ApiModelProperty(value = "优惠券码(没用)")
+    private String couponCode;
+
+    @ApiModelProperty(value = "订单状态")
+    private Integer status;
+
+    @ApiModelProperty(value = "团购/代金券id")
+    private Integer couponId;
+
+    @ApiModelProperty(value = "购买类型(订单类型,1,代金券;2,团购订单)")
+    private Integer couponType;
+
+    @ApiModelProperty(value = "原价")
+    private String price;
+
+    @ApiModelProperty(value = "付款金额")
+    private String finalPrice;
+
+    @ApiModelProperty(value = "购买数量")
+    private Integer count;
+
+    @ApiModelProperty(value = "付款方式")
+    private String payMethod;
+
+    @ApiModelProperty(value = "删除标记, 0:未删除, 1:已删除")
+    @TableField("delete_flag")
+    @TableLogic
+    private Integer deleteFlag;
+
+    @ApiModelProperty(value = "创建时间")
+    @TableField(value = "created_time", fill = FieldFill.INSERT)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date createdTime;
+
+    @ApiModelProperty(value = "创建人ID")
+    @TableField("created_user_id")
+    private Integer createdUserId;
+
+    @ApiModelProperty(value = "修改时间")
+    @TableField(value = "updated_time", fill = FieldFill.UPDATE)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date updatedTime;
+
+    @ApiModelProperty(value = "修改人ID")
+    @TableField("updated_user_id")
+    private Integer updatedUserId;
+}

+ 6 - 0
alien-entity/src/main/java/shop/alien/entity/store/vo/OrderCouponMiddleVo.java

@@ -0,0 +1,6 @@
+package shop.alien.entity.store.vo;
+
+import shop.alien.entity.store.OrderCouponMiddle;
+
+public class OrderCouponMiddleVo extends OrderCouponMiddle {
+}

+ 8 - 0
alien-entity/src/main/java/shop/alien/mapper/OrderCouponMiddleMapper.java

@@ -0,0 +1,8 @@
+package shop.alien.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import shop.alien.entity.store.OrderCouponMiddle;
+import shop.alien.entity.store.StoreMenu;
+
+public interface OrderCouponMiddleMapper extends BaseMapper<OrderCouponMiddle> {
+}

+ 97 - 0
alien-entity/src/main/resources/mapper/LifeUserOrderMapper.xml

@@ -0,0 +1,97 @@
+<?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="shop.alien.mapper.LifeUserOrderMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="shop.alien.entity.store.vo.LifeUserOrderVo">
+        <id column="id" property="id" />
+        <result column="order_no" property="orderNo"/>
+        <result column="created_time" property="createdTime"/>
+        <result column="price" property="price"/>
+        <result column="final_price" property="finalPrice"/>
+        <result column="coupon_name" property="couponName"/>
+        <result column="nominal_value" property="nominalValue"/>
+        <result column="user_phone" property="userPhone"/>
+        <result column="commission_rate" property="commissionRate"/>
+        <result column="img_url" property="imgUrl"/>
+        <result column="pay_method" property="payMethod"/>
+        <result column="buy_time" property="buyTime"/>
+        <result column="cancel_time" property="cancelTime"/>
+        <result column="pay_time" property="payTime"/>
+        <result column="finish_time" property="finishTime"/>
+        <result column="coupon_type" property="couponType"/>
+        <result column="offprice" property="finalPrice"/>
+        <result column="store_id" property="storeId"/>
+        <result column="store_name" property="storeName"/>
+        <result column="commission_rate" property="commissionRate"/>
+        <result column="img_url" property="imgUrl"/>
+        <result column="user_name" property="userName"/>
+        <result column="order_status" property="status"/>
+        <result column="dist" property="dist"/>
+        <result column="store_address" property="storeAddress"/>
+        <result column="effective_date_type" property="effectiveDateType"/>
+        <result column="effective_date_value" property="effectiveDateValue"/>
+        <result column="use_rules" property="useRules"/>
+        <result column="applicable_num" property="applicableNum"/>
+        <result column="quota_type" property="quotaType"/>
+        <result column="quota_value" property="quotaValue"/>
+
+        <result column="business_type" property="businessType"/>
+        <result column="business_date" property="businessDate"/>
+        <result column="start_time" property="startTime"/>
+        <result column="end_time" property="endTime"/>
+
+        <collection property="orderCouponMiddleList" ofType="shop.alien.entity.store.vo.OrderCouponMiddleVo">
+            <id column="ocmId" property="id" />
+            <result column="status" property="status"/>
+            <result column="coupon_code" property="couponCode"/>
+            <result column="refund_time" property="refundTime"/>
+            <result column="refund_reason" property="refundReason"/>
+            <result column="refundPrice" property="price"/>
+        </collection>
+    </resultMap>
+
+
+    <!-- 查询用户订单详情 -->
+    <select id="queryUserOrderDetail" resultMap="BaseResultMap">
+        with total_coupon as(
+        select id coupon_id,2 coupon_type,lgbm.group_name coupon_name,preferential_price offprice,SUBSTRING_INDEX(image_id, ',', 1) AS image_id,
+               effective_date_type,effective_date_value,use_rules,reservation_rules,applicable_num,quota_type,quota_value
+        from life_group_buy_main lgbm where lgbm.delete_flag = 0
+        union all
+        select id coupon_id,1 coupon_type,lc.name coupon_name,lc.offprice offprice,SUBSTRING_INDEX(image_path, ',', 1) AS image_id,
+               0 effective_date_type,expiration_date effective_date_value,use_rule use_rules,reservation_rules,applicable_num,1 quota_type,buy_limit quota_value
+        from life_coupon lc where lc.delete_flag = 0
+        )
+        select luo.id,luo.order_no,luo.created_time , luo.price ,luo.final_price
+        ,luo.pay_method,luo.buy_time,luo.cancel_time,luo.pay_time,luo.finish_time,luo.status order_status,
+        tc.*,
+        ldc.nominal_value,
+        lu.user_phone,lu.user_name,lu.id user_id,
+        ocm.id ocmId,ocm.status,ocm.coupon_code,ocm.refund_time,ocm.refund_reason,ocm.price refundPrice,
+        si.id store_id,si.store_name,si.commission_rate,si.store_address,
+        <if test="position != null and position != ''">
+            ROUND(
+            ST_Distance_Sphere(
+            ST_GeomFromText(CONCAT('POINT(', REPLACE(#{position}, ',', ' '), ')')),
+            ST_GeomFromText(CONCAT('POINT(', REPLACE(si.store_position, ',', ' '), ')'))
+            ) / 1000,
+            2
+            ) AS dist,
+        </if>
+        simg.img_url,
+        sbi.business_type,sbi.business_date,sbi.start_time,sbi.end_time
+        from life_user_order luo
+        left join store_info si on si.id = luo.store_id and si.delete_flag = 0
+        left join order_coupon_middle ocm on ocm.order_id = luo.id and ocm.delete_flag = 0
+        left join total_coupon tc on tc.coupon_id = ocm.coupon_id and tc.coupon_type = luo.coupon_type
+        left join life_discount_coupon ldc on ldc.id = luo.quan_id and ldc.delete_flag = 0
+        left join life_user lu on lu.id = luo.user_id and lu.delete_flag = 0
+        left join store_img simg on simg.id = tc.image_id and simg.delete_flag = 0
+        left join store_business_info sbi on sbi.store_id = si.id and sbi.delete_flag = 0
+        where luo.id = #{orderId}
+        order by luo.created_time desc
+    </select>
+</mapper>

+ 111 - 0
alien-job/src/main/java/shop/alien/job/store/LifeUserOrderJob.java

@@ -0,0 +1,111 @@
+package shop.alien.job.store;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.xxl.job.core.handler.annotation.XxlJob;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
+import shop.alien.entity.store.LifeCoupon;
+import shop.alien.entity.store.LifeGroupBuyMain;
+import shop.alien.entity.store.LifeUserOrder;
+import shop.alien.entity.store.OrderCouponMiddle;
+import shop.alien.mapper.LifeCouponMapper;
+import shop.alien.mapper.LifeGroupBuyMainMapper;
+import shop.alien.mapper.LifeUserOrderMapper;
+import shop.alien.mapper.OrderCouponMiddleMapper;
+import shop.alien.util.common.constant.OrderStatusEnum;
+
+import java.time.LocalDateTime;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * 用户订单任务
+ * 待支付订单超时处理
+ *
+ * @author lyx
+ * @date 2023/12/20 14:20
+ * @see shop.alien.entity.store.LifeUserOrder
+ */
+
+@Slf4j
+@Component
+@RequiredArgsConstructor
+public class LifeUserOrderJob {
+
+    private final LifeUserOrderMapper lifeUserOrderMapper;
+    private final OrderCouponMiddleMapper orderCouponMiddleMapper;
+    private final LifeCouponMapper lifeCouponMapper;
+    private final LifeGroupBuyMainMapper lifeGroupBuyMainMapper;
+    /**
+     * 待支付订单超时处理
+     */
+    @XxlJob("autoCancelUnpaidOrders")
+    @Transactional(rollbackFor = Exception.class)
+    public String autoCancelUnpaidOrders(){
+        //1.查询待支付超时订单
+        List<LifeUserOrder> lifeUserOrders = lifeUserOrderMapper.selectList(new LambdaQueryWrapper<LifeUserOrder>()
+                .eq(LifeUserOrder::getStatus, OrderStatusEnum.WAIT_PAY.getStatus())
+                .le(LifeUserOrder::getBuyTime, LocalDateTime.now().minusMinutes(15)));
+        if( CollectionUtils.isEmpty(lifeUserOrders) ){
+            return "无待支付超时订单";
+        }
+        //2.超时则取消订单id
+        List<String> orderIds = lifeUserOrders.stream().map(LifeUserOrder::getId).collect(Collectors.toList());
+        lifeUserOrderMapper.update(null,new LambdaUpdateWrapper<LifeUserOrder>()
+                .set(LifeUserOrder::getStatus,OrderStatusEnum.CANCEL.getStatus())
+                .set(LifeUserOrder::getCancelTime,LocalDateTime.now())
+                .set(LifeUserOrder::getCancelReason,"订单超时未支付")
+                .in(LifeUserOrder::getId,orderIds));
+        // 根据类型分组
+        Map<Integer, List<String>> collect = lifeUserOrders.stream()
+                .collect(Collectors.groupingBy(
+                        LifeUserOrder::getCouponType,  // 按订单类型分组
+                        Collectors.mapping(  // 对每个分组中的元素提取ID
+                                LifeUserOrder::getId,
+                                Collectors.toList()
+                        )
+                ));
+        int updateNum = 0;
+        if(collect.containsKey(0)){
+            //3.1代金券订单
+            List<String> couponOrderIds = collect.get(0);
+            QueryWrapper<OrderCouponMiddle> queryWrapper = new QueryWrapper<OrderCouponMiddle>().in("order_id", couponOrderIds)
+                    .eq("status", OrderStatusEnum.WAIT_PAY.getStatus())
+                    .groupBy("coupon_id")  // 按coupon_id分组
+                    .select("coupon_id, COUNT(*) as count");  // 选择分组字段和统计数量
+            List<OrderCouponMiddle> orderCouponMiddles = orderCouponMiddleMapper.selectList(queryWrapper);
+            for (OrderCouponMiddle orderCouponMiddle : orderCouponMiddles) {
+                // 恢复库存
+                lifeCouponMapper.update(null, new LambdaUpdateWrapper<LifeCoupon>()
+                        .setSql("stock_qty=stock_qty+" + orderCouponMiddle.getCount())
+                        .eq(LifeCoupon::getId, orderCouponMiddle.getCouponId()));
+            }
+        }
+        if(collect.containsKey(1)){
+            //3.2团购订单
+            List<String> groupOrderIds = collect.get(1);
+            QueryWrapper<OrderCouponMiddle> queryWrapper = new QueryWrapper<OrderCouponMiddle>().in("order_id", groupOrderIds)
+                    .eq("status", OrderStatusEnum.WAIT_PAY.getStatus())
+                    .groupBy("coupon_id")  // 按coupon_id分组
+                    .select("coupon_id, COUNT(*) as count");
+            List<OrderCouponMiddle> orderCouponMiddles = orderCouponMiddleMapper.selectList(queryWrapper);
+            for (OrderCouponMiddle orderCouponMiddle : orderCouponMiddles) {
+                // 恢复库存
+                lifeGroupBuyMainMapper.update(null,new LambdaUpdateWrapper<LifeGroupBuyMain>()
+                        .setSql("inventory_num=inventory_num+" + orderCouponMiddle.getCount())
+                        .eq(LifeGroupBuyMain::getId, orderCouponMiddle.getCouponId()));
+            }
+        }
+        // 更新券状态
+        orderCouponMiddleMapper.update(null,new LambdaUpdateWrapper<OrderCouponMiddle>()
+                .set(OrderCouponMiddle::getStatus,OrderStatusEnum.CANCEL.getStatus())
+                .in(OrderCouponMiddle::getOrderId,orderIds));
+        return "success";
+    }
+}

+ 162 - 0
alien-store/src/main/java/shop/alien/store/controller/LifeUserOrderController.java

@@ -0,0 +1,162 @@
+package shop.alien.store.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections4.map.HashedMap;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.springframework.web.bind.annotation.*;
+import shop.alien.entity.result.R;
+import shop.alien.entity.store.LifeRefundOrder;
+import shop.alien.entity.store.dto.LifeUserOrderDto;
+import shop.alien.entity.store.vo.LifeUserOrderVo;
+import shop.alien.store.service.LifeUserOrderService;
+import shop.alien.util.common.AlipayTradeAppPay;
+import shop.alien.util.common.UniqueRandomNumGenerator;
+
+import java.util.Map;
+
+@Api(tags = {"2.5期-订单"})
+@Slf4j
+@CrossOrigin
+@RestController
+@RequestMapping("/userOrder")
+@RequiredArgsConstructor
+public class LifeUserOrderController {
+
+    private final LifeUserOrderService lifeUserOrderService;
+
+    @ApiOperation("获取支付信息")
+    @ApiOperationSupport(order = 1)
+    @ApiImplicitParams({@ApiImplicitParam(name = "payPrice", value = "payPrice", dataType = "String", paramType = "query"),
+            @ApiImplicitParam(name = "quanName", value = "quanName", dataType = "String", paramType = "query")})
+    @GetMapping("/getOrderStrForPay")
+    public R<Map<String, Object>> getOrderStrForPay(@RequestParam("payPrice") String payPrice,
+                                                    @RequestParam("quanName") String quanName) {
+        log.info("LifeUserStoreController.getOrderStrForPay?payPrice={},quanName={}", payPrice, quanName);
+        String orderNo = UniqueRandomNumGenerator.generateUniqueCode(19);
+        String orderStr = AlipayTradeAppPay.executeAlipayPayment(orderNo, payPrice, quanName);
+        if (!orderStr.equals("调用失败") && !orderStr.isEmpty()) {
+            Map<String, Object> returnMap = new HashedMap<>();
+            returnMap.put("orderStr", orderStr);
+            returnMap.put("orderNo", orderNo);
+            return R.data(returnMap);
+        } else {
+            return R.fail("支付失败");
+        }
+    }
+
+
+    @ApiOperation("创建订单")
+    @ApiOperationSupport(order = 2)
+    @PostMapping("/createUserOrder")
+    public R<Map<String, Object>> createUserOrder(@RequestBody LifeUserOrderDto LifeUserOrderDto) {
+        log.info("userOrder.createUserOrder:{}", LifeUserOrderDto);
+        return R.data(lifeUserOrderService.createUserOrder(LifeUserOrderDto));
+    }
+
+    @ApiOperation("更新订单")
+    @ApiOperationSupport(order = 3)
+    @PostMapping("/updateUserOrder")
+    public R<Map<String, Object>> updateUserOrder(@RequestBody LifeUserOrderDto LifeUserOrderDto) {
+        log.info("userOrder.updateUserOrder:{}", LifeUserOrderDto);
+        if (!lifeUserOrderService.updateUserOrder(LifeUserOrderDto)) {
+            return R.fail("更新失败");
+        }
+        return R.success("更新成功");
+
+    }
+
+
+    @ApiOperation("删除订单")
+    @ApiOperationSupport(order = 4)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "orderId", value = "订单id", required = true)
+    })
+    @DeleteMapping("/deleteUserOrder")
+    public R<Map<String, Object>> deleteUserOrder(@RequestParam(value = "orderId") String orderId) {
+        log.info("userOrder.deleteUserOrder:{}", orderId);
+        if (!lifeUserOrderService.deleteUserOrder(orderId)) {
+            return R.fail("删除失败");
+        }
+        return R.success("删除成功");
+    }
+
+    @ApiOperation("查询订单列表")
+    @ApiOperationSupport(order = 5)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "page", value = "当前页", required = true),
+            @ApiImplicitParam(name = "size", value = "每页数量", required = true),
+            @ApiImplicitParam(name = "userId", value = "用户id", required = false),
+            @ApiImplicitParam(name = "storeId", value = "商户id", required = false),
+            @ApiImplicitParam(name = "couponType", value = "订单类型,-1,全部(可以不传),1,代金券;2,团购;", required = false),
+            @ApiImplicitParam(name = "orderStatus", value = "订单状态,-1,全部(可以不传);0,待支付;1,已支付/待使用;2,已核销;3,已过期;4,已取消;5.已退款,全退款了才算", required = false),
+            @ApiImplicitParam(name = "name", value = "订单名称", required = false)
+    })
+    @GetMapping("/queryUserOrderList")
+    public R<IPage<LifeUserOrderVo>> queryUserOrderList(@RequestParam(value = "page", defaultValue = "1") Integer page,
+                                                        @RequestParam(value = "size", defaultValue = "10") Integer size,
+                                                        @RequestParam(required = false) String userId,
+                                                        @RequestParam(required = false) String storeId,
+                                                        @RequestParam(required = false, defaultValue = "-1") String couponType,
+                                                        @RequestParam(required = false, defaultValue = "-1") String orderStatus,
+                                                        @RequestParam(required = false) String name,
+                                                        @RequestParam(value = "startTime", required = false) @DateTimeFormat(pattern = "yyyy-MM-dd 00:00:00") String startTime,
+                                                        @RequestParam(value = "endTime", required = false) @DateTimeFormat(pattern = "yyyy-MM-dd 23:59:59") String endTime) {
+        log.info("userOrder.queryUserOrderList:page={}&size={}&userId={}&storeId={}&orderType={}&orderStatus={}&name={}&startTime={}&endTime={}", page, size, userId, storeId, couponType, orderStatus, name, startTime, endTime);
+        if (StringUtils.isNotBlank(userId) && StringUtils.isNotBlank(storeId)) {
+            return R.fail("用户id和商户id不能同时为空");
+        }
+        return R.data(lifeUserOrderService.queryUserOrderList(page, size, userId, storeId, couponType, orderStatus, name, startTime, endTime));
+    }
+
+    @ApiOperation("查询订单详情")
+    @ApiOperationSupport(order = 6)
+    @ApiImplicitParams({@ApiImplicitParam(name = "longitude", value = "经度", dataType = "String", paramType = "query", required = false),
+            @ApiImplicitParam(name = "latitude", value = "纬度", dataType = "String", paramType = "query", required = false),
+            @ApiImplicitParam(name = "orderId", value = "订单id", dataType = "String", paramType = "query", required = true)})
+    @GetMapping("/queryUserOrderDetail")
+    public R queryUserOrderDetail(@RequestParam String orderId,
+                                  @RequestParam(value = "longitude", required = false) String longitude,
+                                  @RequestParam(value = "latitude", required = false) String latitude) {
+        log.info("userOrder.queryUserOrderDetail:orderId={}&longitude={}&latitude={}", orderId, longitude, latitude);
+        return lifeUserOrderService.queryUserOrderDetail(orderId, longitude, latitude);
+    }
+
+    @ApiOperation("提交支付团购套餐和代金券前检查")
+    @ApiOperationSupport(order = 7)
+    @ApiImplicitParams({@ApiImplicitParam(name = "couponId", value = "优惠券id", dataType = "String", paramType = "query", required = true),
+            @ApiImplicitParam(name = "couponType", value = "优惠券类型,1代金券;2团购券", dataType = "int", paramType = "query", required = true),
+            @ApiImplicitParam(name = "userId", value = "用户id", dataType = "String", paramType = "query", required = true),
+            @ApiImplicitParam(name = "storeId", value = "商户id", dataType = "String", paramType = "query", required = true),
+            @ApiImplicitParam(name = "count", value = "数量", dataType = "int", paramType = "query", required = true)})
+    @GetMapping("/buyCouponCheck")
+    public R<Map<String, Object>> buyCouponCheck(@RequestParam("couponId") String couponId,
+                                               @RequestParam("couponType") Integer couponType,
+                                               @RequestParam("userId") String userId,
+                                               @RequestParam("storeId") String storeId,
+                                               @RequestParam("count") int count) {
+        log.info("userOrder.buyCouponCheck:couponId={}&couponType={}&userId={}&storeId={}&count={}", couponId, couponType, userId, storeId, count);
+        return R.data(lifeUserOrderService.buyCouponCheck(couponId, couponType, userId, storeId, count));
+    }
+
+    @ApiOperation("订单是否可以退款")
+    @ApiOperationSupport(order = 4)
+    @PostMapping("/refundCfheck")
+    @Deprecated
+    public R<Map<String, Object>> refundCheck(LifeRefundOrder refundOrder) {
+        log.info("UserOrderController.refundCheck?refundOrder={}", refundOrder.toString());
+        return R.data(lifeUserOrderService.refundCheck(refundOrder));
+    }
+
+    @ApiOperation("订单退款")
+    @ApiOperationSupport(order = 5)
+    @PostMapping("/requestRefund")
+    @Deprecated
+    public R<Map<String, Object>> requestRefund(LifeRefundOrder refundOrder) {
+        log.info("UserOrderController.requestRefund?refundOrder={}", refundOrder.toString());
+        return R.data(lifeUserOrderService.requestRefund(refundOrder));
+    }
+}

+ 70 - 0
alien-store/src/main/java/shop/alien/store/controller/PlatformOrderController.java

@@ -0,0 +1,70 @@
+package shop.alien.store.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.springframework.web.bind.annotation.*;
+import shop.alien.entity.result.R;
+import shop.alien.entity.store.vo.LifeUserOrderVo;
+import shop.alien.store.service.LifeUserOrderService;
+
+@Api(tags = {"二期平台-订单管理"})
+@Slf4j
+@RestController
+@CrossOrigin
+@RequestMapping("/platformLifeUserOrder")
+@RequiredArgsConstructor
+public class PlatformOrderController {
+
+    private final LifeUserOrderService lifeUserOrderService;
+
+
+
+    @ApiOperation("查询订单列表")
+    @ApiOperationSupport(order = 5)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "page", value = "当前页", required = true),
+            @ApiImplicitParam(name = "size", value = "每页数量", required = true),
+            @ApiImplicitParam(name = "orderStatus", value = "订单状态,-1,全部(可以不传);0,待支付;1,已支付/待使用;2,已核销;3,已过期;4,已取消;5.已退款,全退款了才算", required = false),
+            @ApiImplicitParam(name = "orderNo", value = "订单号", required = false),
+            @ApiImplicitParam(name = "couponName", value = "优惠券名称", required = false),
+            @ApiImplicitParam(name = "couponType", value = "优惠券类型", required = false),
+            @ApiImplicitParam(name = "storeName", value = "门店名称", required = false),
+            @ApiImplicitParam(name = "buyStartTime", value = "购买时间开始", required = false),
+            @ApiImplicitParam(name = "buyEndTime", value = "购买时间结束", required = false),
+            @ApiImplicitParam(name = "payStartTime", value = "支付时间开始", required = false),
+            @ApiImplicitParam(name = "payEndTime", value = "支付时间结束", required = false),
+            @ApiImplicitParam(name = "finishStartTime", value = "核销时间开始", required = false),
+            @ApiImplicitParam(name = "finishEndTime", value = "核销时间结束", required = false),
+    })
+    @GetMapping("/queryOrderList")
+    public R<IPage<LifeUserOrderVo>> queryOrderList(@RequestParam(value = "page", defaultValue = "1") Integer page,
+                                                        @RequestParam(value = "size", defaultValue = "10") Integer size,
+                                                        @RequestParam(value = "orderNo", required = false) String orderNo,
+                                                        @RequestParam(required = false, defaultValue = "-1") String orderStatus,
+                                                        @RequestParam(required = false) String couponName,
+                                                        @RequestParam(required = false) String couponType,
+                                                        @RequestParam(required = false) String storeName,
+                                                        @RequestParam(value = "buyStartTime", required = false) @DateTimeFormat(pattern = "yyyy-MM-dd 00:00:00")String buyStartTime,
+                                                        @RequestParam(value = "buyEndTime", required = false) @DateTimeFormat(pattern = "yyyy-MM-dd 23:59:59") String buyEndTime,
+                                                        @RequestParam(value = "payStartTime", required = false) @DateTimeFormat(pattern = "yyyy-MM-dd 00:00:00")String payStartTime,
+                                                        @RequestParam(value = "payEndTime", required = false) @DateTimeFormat(pattern = "yyyy-MM-dd 23:59:59") String payEndTime,
+                                                        @RequestParam(value = "finishStartTime", required = false) @DateTimeFormat(pattern = "yyyy-MM-dd 00:00:00")String finishStartTime,
+                                                        @RequestParam(value = "finishEndTime", required = false) @DateTimeFormat(pattern = "yyyy-MM-dd 23:59:59") String finishEndTime
+                                                        ) {
+            log.info("查询订单列表,page={},size={},orderNo={},orderStatus={},couponName={},couponType={},storeName={},buyStartTime={},buyEndTime={},payStartTime={},payEndTime={},finishStartTime={},finishEndTime={}",
+                    page, size, orderNo, orderStatus, couponName, couponType, storeName, buyStartTime, buyEndTime, payStartTime, payEndTime, finishStartTime, finishEndTime);
+        return R.data(lifeUserOrderService.queryOrderList(page, size, orderNo, orderStatus, couponName, couponType, storeName, buyStartTime, buyEndTime, payStartTime, payEndTime, finishStartTime, finishEndTime));
+    }
+
+    @ApiOperation("查询订单详情")
+    @ApiOperationSupport(order = 6)
+    @GetMapping("/queryOrderDetail")
+    public R queryOrderDetail(@RequestParam String orderId) {
+        log.info("userOrder.queryOrderDetail:{}", orderId);
+        return lifeUserOrderService.queryOrderDetail(orderId);
+    }
+}

+ 8 - 0
alien-store/src/main/java/shop/alien/store/service/OrderCouponMiddleService.java

@@ -0,0 +1,8 @@
+package shop.alien.store.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import shop.alien.entity.store.LifeReverseGroupBuying;
+import shop.alien.entity.store.OrderCouponMiddle;
+
+public interface OrderCouponMiddleService extends IService<OrderCouponMiddle> {
+}

+ 13 - 0
alien-store/src/main/java/shop/alien/store/service/impl/OrderCouponMiddleServiceImpl.java

@@ -0,0 +1,13 @@
+package shop.alien.store.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+import shop.alien.entity.store.OrderCouponMiddle;
+import shop.alien.mapper.OrderCouponMiddleMapper;
+import shop.alien.store.service.OrderCouponMiddleService;
+
+@Service
+@RequiredArgsConstructor
+public class OrderCouponMiddleServiceImpl extends ServiceImpl<OrderCouponMiddleMapper, OrderCouponMiddle> implements OrderCouponMiddleService {
+}

BIN
alien-store/src/main/resources/templates/clearing_receipt.xlsx