瀏覽代碼

feat(app):
1.用户端小程序订单列表,订单取消,订单是否成功接口

wzq 5 天之前
父節點
當前提交
7138053587
共有 11 個文件被更改,包括 241 次插入11 次删除
  1. 36 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/controller/OrderController.java
  2. 27 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/form/PageOrdersForm.java
  3. 9 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/service/IOrderService.java
  4. 86 7
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/service/impl/OrderServiceImpl.java
  5. 37 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/vo/PageOrdersVO.java
  6. 7 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/pay/config/PayConstant.java
  7. 2 2
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/redission/RedissonDelayQueue.java
  8. 2 2
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/dto/BasePageDTO.java
  9. 4 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/entity/AppOrder.java
  10. 5 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/mapper/AppOrderMapper.java
  11. 26 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/mapper/xml/AppOrderMapper.xml

+ 36 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/controller/OrderController.java

@@ -1,5 +1,6 @@
 package org.jeecg.modules.app.controller;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.media.Schema;
@@ -8,9 +9,11 @@ import lombok.extern.slf4j.Slf4j;
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.modules.app.dto.AppOrderInfoDTO;
 import org.jeecg.modules.app.form.CreateOrderForm;
+import org.jeecg.modules.app.form.PageOrdersForm;
 import org.jeecg.modules.app.form.UserPayForm;
 import org.jeecg.modules.app.service.IOrderService;
 import org.jeecg.modules.app.vo.OrderVO;
+import org.jeecg.modules.app.vo.PageOrdersVO;
 import org.jeecg.modules.app.vo.QueryOrderVerifyRecordsVO;
 import org.jeecg.modules.pay.vo.NotifyRequest;
 import org.jeecg.modules.pay.vo.NotifyResponse;
@@ -135,6 +138,39 @@ public class OrderController {
         return appOrderService.orderNotify(notifyRequestForm);
     }
 
+    /**
+     * 订单支付是否成功查询
+     * @param orderCode
+     * @return
+     */
+    @Operation(summary = "订单支付是否成功查询")
+    @GetMapping("/orderQuery")
+    public Result<String> orderQuery(@RequestParam(name = "orderCode")String orderCode) throws IOException {
+        return Result.OK(appOrderService.orderQuery(orderCode));
+    }
+
+    /**
+     * 分页查询我的订单列表
+     * @param pageOrdersForm
+     * @return
+     */
+    @Operation(summary = "分页查询我的订单列表")
+    @PostMapping("/pageOrders")
+    public Result<IPage<PageOrdersVO>> pageOrders(@RequestBody PageOrdersForm pageOrdersForm){
+        return Result.OK(appOrderService.pageOrders(pageOrdersForm));
+    }
+
+    /**
+     * 订单主动取消
+     * @param orderId
+     * @return
+     */
+    @Operation(summary = "订单主动取消")
+    @PutMapping("/cancelOrder")
+    public Result<String> cancelOrder(@RequestParam(name = "orderCode")String orderId) throws IOException {
+        return Result.OK(appOrderService.cancelOrder(orderId));
+    }
+
     /**
      * 订单-小程序支付后回显信息
      *

+ 27 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/form/PageOrdersForm.java

@@ -0,0 +1,27 @@
+package org.jeecg.modules.app.form;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import org.jeecg.modules.system.app.dto.BasePageDTO;
+
+import java.io.Serializable;
+
+@Data
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@Schema(description = "我的订单分页表单对象")
+public class PageOrdersForm extends BasePageDTO implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @Schema(description = "订单状态:0-待付款 1-待使用 2-已使用 3-已到期 4-已取消 5-退款中 6已退款")
+    private Integer orderStatus;
+
+    @Schema(description = "是否售后 0-否 1-是",required = true)
+    private Integer orAfterSale;
+
+    @Schema(description = "当前用户userId",hidden = true)
+    private String userId;
+
+}

+ 9 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/service/IOrderService.java

@@ -1,9 +1,12 @@
 package org.jeecg.modules.app.service;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.jeecg.modules.app.dto.AppOrderInfoDTO;
 import org.jeecg.modules.app.form.CreateOrderForm;
+import org.jeecg.modules.app.form.PageOrdersForm;
 import org.jeecg.modules.app.form.UserPayForm;
 import org.jeecg.modules.app.vo.OrderVO;
+import org.jeecg.modules.app.vo.PageOrdersVO;
 import org.jeecg.modules.app.vo.QueryOrderVerifyRecordsVO;
 import org.jeecg.modules.pay.vo.NotifyRequest;
 import org.jeecg.modules.pay.vo.NotifyResponse;
@@ -84,4 +87,10 @@ public interface IOrderService {
     List<QueryOrderVerifyRecordsVO> queryOrderVerifyRecords(String orderId, String ticketNo);
 
     NotifyResponse orderNotify(NotifyRequest notifyRequestForm);
+
+    String orderQuery(String orderCode) throws IOException;
+
+    String cancelOrder(String orderId);
+
+    IPage<PageOrdersVO> pageOrders(PageOrdersForm pageOrdersForm);
 }

+ 86 - 7
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/service/impl/OrderServiceImpl.java

@@ -7,9 +7,12 @@ import cn.hutool.core.util.RandomUtil;
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
+import com.google.gson.Gson;
 import com.google.gson.JsonObject;
 import com.google.gson.JsonParser;
 import lombok.extern.log4j.Log4j2;
@@ -23,17 +26,21 @@ import org.jeecg.common.util.DictAnnotationUtil;
 import org.jeecg.modules.app.dto.AppOrderInfoDTO;
 import org.jeecg.modules.app.form.CreateOrderForm;
 import org.jeecg.modules.app.form.InsureOrderInfoForm;
+import org.jeecg.modules.app.form.PageOrdersForm;
 import org.jeecg.modules.app.form.UserPayForm;
 import org.jeecg.modules.app.service.IOrderService;
 import org.jeecg.modules.app.vo.AppGameScheduleVO;
 import org.jeecg.modules.app.vo.OrderVO;
+import org.jeecg.modules.app.vo.PageOrdersVO;
 import org.jeecg.modules.app.vo.QueryOrderVerifyRecordsVO;
+import org.jeecg.modules.pay.request.v3.labs.TradeQueryRequest;
 import org.jeecg.modules.pay.vo.NotifyRequest;
 import org.jeecg.modules.pay.vo.NotifyResponse;
 import org.jeecg.modules.redission.RedissonDelayQueue;
 import org.jeecg.modules.system.app.entity.*;
 import org.jeecg.modules.system.app.mapper.*;
-import org.jeecg.modules.system.mapper.SysDepartMapper;
+import org.jeecg.modules.system.entity.SysUser;
+import org.jeecg.modules.system.mapper.SysUserMapper;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -65,7 +72,7 @@ public class OrderServiceImpl implements IOrderService {
     @Resource
     private AppOrderMapper appOrderMapper;
     @Resource
-    private SysDepartMapper sysDepartMapper;
+    private SysUserMapper sysUserMapper;
     @Resource
     private AppSiteMapper appSiteMapper;
     @Resource
@@ -372,6 +379,8 @@ public class OrderServiceImpl implements IOrderService {
         //获取登录用户
         LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
 
+        SysUser sysUser = sysUserMapper.selectById(user.getId());
+
         String orderCode = generateOrderNumber(0);
 
         //创建订单
@@ -380,6 +389,7 @@ public class OrderServiceImpl implements IOrderService {
                 .setOrderType(createOrderForm.getOrderType())
                 .setOrderCode(orderCode)
                 .setUserId(user.getId())
+                .setUserOpenId(sysUser.getOpenid())
                 .setUserPhone(user.getPhone())
                 .setOrderStatus(0)
                 .setProductIds(createOrderForm.getProductIds())
@@ -656,7 +666,7 @@ public class OrderServiceImpl implements IOrderService {
                     appOrderProInfo.setProductName(appCourse.getName());
                     appOrderProInfo.setAddress(appSite.getAddress());
                     appOrderProInfo.setType(CommonConstant.ORDER_PRO_INFO_TYPE_6);
-                    appOrderProInfo.setFrameTimeStr(DateUtil.format(appCourse.getStartTime(), "yyyy-MM-dd") + "-" + DateUtil.format(appCourse.getEndTime(), "yyyy-MM-dd"));
+                    appOrderProInfo.setFrameTimeStr(DateUtil.format(appCourse.getStartTime(), "yyyy-MM-dd") + "-" + DateUtil.format(appCourse.getEndTime(), "MM-dd"));
                     appOrderProInfo.setExpireTime(DateUtil.format(appCourse.getEndTime(), "yyyy-MM-dd"));
                     appOrderProInfo.setOriginalPrice(appCourse.getOriginalPrice());
                     appOrderProInfo.setPrice(appCourse.getSellingPrice());
@@ -822,10 +832,12 @@ public class OrderServiceImpl implements IOrderService {
             }
         }
         //保存核销记录
-        for (AppCoursesVerificationRecord appCoursesVerificationRecord : appCoursesVerificationRecordList) {
-            appCoursesVerificationRecord.setOrderId(appOrder.getId());
-            appCoursesVerificationRecord.setOrderCode(appOrder.getOrderCode());
-            appCoursesVerificationRecordMapper.insert(appCoursesVerificationRecord);
+        if (CollUtil.isNotEmpty(proInfoList)) {
+            for (AppCoursesVerificationRecord appCoursesVerificationRecord : appCoursesVerificationRecordList) {
+                appCoursesVerificationRecord.setOrderId(appOrder.getId());
+                appCoursesVerificationRecord.setOrderCode(appOrder.getOrderCode());
+                appCoursesVerificationRecordMapper.insert(appCoursesVerificationRecord);
+            }
         }
 
         //构建支付表单返回给前端支撑JsApi支付调用
@@ -1261,11 +1273,78 @@ public class OrderServiceImpl implements IOrderService {
                     .setPayTime(DateUtil.parse(notifyRequestForm.getTrade_time(),"yyyyMMddHHmmss"))
                     .setCallbackStatus(1);
         }
+
         NotifyResponse notifyResponse = new NotifyResponse();
         notifyResponse.setCode("SUCCESS").setMessage("执行成功");
+
         return notifyResponse;
     }
 
+    @Override
+    public String orderQuery(String orderCode) throws IOException {
+
+        // 初始化查询交易接口请求报文
+        TradeQueryRequest request = new TradeQueryRequest();
+        // 商户交易流水号
+        request.setOut_trade_no(orderCode);
+//        String res = V3LabsApi.queryTradeQuery(request);
+        String res = "";
+        Gson gson = new Gson();
+        NotifyRequest notifyRequest = gson.fromJson(res, NotifyRequest.class);
+
+        //查询订单
+        AppOrder appOrder = appOrderMapper.selectOne(Wrappers.<AppOrder>lambdaQuery().eq(AppOrder::getOrderCode, notifyRequest.getOut_trade_no()).last("limit 1"));
+        if (ObjectUtil.isNotEmpty(appOrder)) {
+            appOrder
+                    .setPayId(notifyRequest.getAcc_trade_no())
+                    .setOrderStatus(2)
+                    .setPayStatus(2)
+                    .setPayTime(DateUtil.parse(notifyRequest.getTrade_time(),"yyyyMMddHHmmss"))
+                    .setCallbackStatus(1);
+        }
+
+        return "支付成功!";
+    }
+
+    @Override
+    public String cancelOrder(String orderId) {
+        AppOrder appOrder = appOrderMapper.selectById(orderId);
+        if(ObjectUtil.isNotEmpty(appOrder)){
+            if (appOrder.getOrderStatus() == 0){
+                log.info("修改订单:{},支付状态为已取消", orderId);
+                appOrder.setOrderStatus(4);
+                appOrderMapper.updateById(appOrder);
+                List<AppOrderProInfo> appOrderProInfoList = appOrderProInfoMapper.selectList(Wrappers.<AppOrderProInfo>lambdaQuery().eq(AppOrderProInfo::getOrderId, orderId));
+                for (AppOrderProInfo appOrderProInfo : appOrderProInfoList) {
+                    appOrderProInfo.setOrderStatus(2);
+                    appOrderProInfoMapper.updateById(appOrderProInfo);
+                }
+            }
+            return "取消成功!";
+        }
+        return "取消失败!未查询到订单!";
+    }
+
+    @Override
+    public IPage<PageOrdersVO> pageOrders(PageOrdersForm pageOrdersForm) {
+
+        LoginUser loginUser = (LoginUser)SecurityUtils.getSubject().getPrincipal();
+        pageOrdersForm.setUserId(loginUser.getId());
+
+        Page<PageOrdersVO> page = new Page<>(pageOrdersForm.getPageNum(), pageOrdersForm.getPageSize());
+
+        IPage<PageOrdersVO> pageOrders = appOrderMapper.pageOrders(page,pageOrdersForm);
+
+        pageOrders.getRecords().forEach(record -> {
+            List<AppOrderProInfo> proInfoList = appOrderProInfoMapper.selectList(Wrappers.<AppOrderProInfo>lambdaQuery().eq(AppOrderProInfo::getOrderId, record.getOrderId()));
+            if (CollUtil.isNotEmpty(proInfoList)) {
+                record.setOrderProInfoList(proInfoList);
+            }
+        });
+
+        return pageOrders;
+    }
+
     /**
      * @return String 订单号
      * @Author SheepHy

+ 37 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/vo/PageOrdersVO.java

@@ -0,0 +1,37 @@
+package org.jeecg.modules.app.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import org.jeecg.modules.system.app.entity.AppOrderProInfo;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.List;
+
+@Data
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@Schema(description = "我的订单分页响应对象")
+public class PageOrdersVO implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    private String orderId;
+
+    private String orderCode;
+
+    private Integer orderStatus;
+
+    private String originalPrice;
+
+    private BigDecimal price;
+
+    private BigDecimal amount;
+
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Data createTime;
+
+    private List<AppOrderProInfo>  orderProInfoList;
+}

+ 7 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/pay/config/PayConstant.java

@@ -0,0 +1,7 @@
+package org.jeecg.modules.pay.config;
+
+/**
+ * 拉卡拉支付相关配置
+ */
+public interface PayConstant {
+}

+ 2 - 2
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/redission/RedissonDelayQueue.java

@@ -57,8 +57,8 @@ public class RedissonDelayQueue {
         if (StrUtil.isNotEmpty(password)){
             serverConfig.setPassword(password);
         }
-        //设置连接redis的心跳间隔(10s/次)
-        serverConfig.setPingConnectionInterval(10000);
+        //设置连接redis的心跳间隔(30s/次)
+        serverConfig.setPingConnectionInterval(30000);
         redissonClient = Redisson.create(config);
 
         blockingQueue = redissonClient.getBlockingQueue("OrderTimeOutTask");

+ 2 - 2
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/dto/BasePageDTO.java

@@ -19,9 +19,9 @@ import lombok.experimental.Accessors;
 @NoArgsConstructor
 @Schema(description="分页入参DTO")
 public class BasePageDTO {
-    @Schema(description = "当前页码", example = "1")
+    @Schema(description = "当前页码", example = "1", required = true)
     private Long pageNum = 1L;
 
-    @Schema(description = "每页条数", example = "10")
+    @Schema(description = "每页条数", example = "10", required = true)
     private Long pageSize = 10L;
 }

+ 4 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/entity/AppOrder.java

@@ -67,6 +67,10 @@ public class AppOrder implements Serializable {
 	@Excel(name = "用户id", width = 15)
     @Schema(description = "用户id")
     private String userId;
+    /**用户id*/
+    @Excel(name = "用户OpenId", width = 15)
+    @Schema(description = "用户OpenId")
+    private String userOpenId;
     /**
      * 用户手机号
      */

+ 5 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/mapper/AppOrderMapper.java

@@ -1,8 +1,11 @@
 package org.jeecg.modules.system.app.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.app.form.PageOrdersForm;
+import org.jeecg.modules.app.vo.PageOrdersVO;
 import org.jeecg.modules.app.vo.game.GameOrderVo;
 import org.jeecg.modules.system.app.entity.AppOrder;
 import org.jeecg.modules.system.app.form.AppOrderPageForm;
@@ -38,4 +41,6 @@ public interface AppOrderMapper extends BaseMapper<AppOrder> {
                          @Param("date") String date,
                          @Param("startTime") String startTime,
                          @Param("endTime") String endTime);
+
+    IPage<PageOrdersVO> pageOrders(Page<PageOrdersVO> page, @Param("pageOrdersForm") PageOrdersForm pageOrdersForm);
 }

+ 26 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/mapper/xml/AppOrderMapper.xml

@@ -81,4 +81,30 @@
           AND b.start_time = #{startTime}
           AND b.end_time = #{endTime}
     </select>
+    <select id="pageOrders" resultType="org.jeecg.modules.app.vo.PageOrdersVO">
+        SELECT
+            o.id AS orderId,
+            o.order_code,
+            o.order_status,
+            o.original_price,
+            o.price,
+            o.amount
+        FROM
+            nm_order o
+        <where>
+            del_flag = 0
+            <if test="pageOrdersForm.orAfterSale != null and pageOrdersForm.orAfterSale == 0">
+                <if test="pageOrdersForm.orderStatus != null ">
+                    and o.order_status = #{pageOrdersForm.orderStatus}
+                </if>
+            </if>
+            <if test="pageOrdersForm.orAfterSale != null and pageOrdersForm.orAfterSale == 1">
+                and (o.order_status = 5 or o.order_status = 6)
+            </if>
+            <if test="pageOrdersForm.userId != null and pageOrdersForm.userId != ''">
+                and o.user_id = #{pageOrdersForm.userId}
+            </if>
+        </where>
+          ORDER BY o.create_time DESC
+    </select>
 </mapper>