Browse Source

用户自充值消费分

Yangzw 6 months ago
parent
commit
33a431606a
20 changed files with 281 additions and 35 deletions
  1. 1 0
      feifan-module-distri/feifan-module-distri-api/src/main/java/cn/newfeifan/mall/module/distri/enums/ConsumptionEnum.java
  2. 1 0
      feifan-module-distri/feifan-module-distri-api/src/main/java/cn/newfeifan/mall/module/distri/enums/ErrorCodeConstants.java
  3. 6 0
      feifan-module-distri/feifan-module-distri-biz/pom.xml
  4. 47 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/config/OrderProperties.java
  5. 3 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/app/orderpercentage/vo/OrderPercentagePageReqVO.java
  6. 8 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/app/orderpercentage/vo/OrderPercentageRespVO.java
  7. 2 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/app/orderpercentage/vo/OrderPercentageSaveReqVO.java
  8. 12 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/app/usertopupconsumptionpointsorder/vo/UserTopUpConsumptionPointsOrderInfoRespVO.java
  9. 35 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/convert/usertopupconsumptionpointsorder/UserTopUpConsumptionPointsOrderConvert.java
  10. 18 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/dataobject/orderpercentage/OrderPercentageDO.java
  11. 24 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/redis/RedisKeyConstants.java
  12. 44 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/redis/no/OrderNoRedisDAO.java
  13. 30 20
      feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/controller/app/order/AppTradeOrderController.java
  14. 2 1
      feifan-module-pay/feifan-module-pay-api/src/main/java/cn/newfeifan/mall/module/pay/enums/DictTypeConstants.java
  15. 16 0
      feifan-module-pay/feifan-module-pay-api/src/main/java/cn/newfeifan/mall/module/pay/enums/fuyouorder/OrderTypeEnum.java
  16. 4 0
      feifan-module-pay/feifan-module-pay-biz/src/main/java/cn/newfeifan/mall/module/pay/controller/admin/order/vo/PayOrderSubmitReqVO.java
  17. 6 6
      feifan-module-pay/feifan-module-pay-biz/src/main/java/cn/newfeifan/mall/module/pay/fuiou/client/WxPreCreateClient.java
  18. 4 0
      feifan-module-pay/feifan-module-pay-biz/src/main/java/cn/newfeifan/mall/module/pay/fuiou/reqvo/SubmitOrderRequestVO.java
  19. 6 1
      feifan-module-pay/feifan-module-pay-biz/src/main/java/cn/newfeifan/mall/module/pay/service/fuyouorder/FiYouPayOrderServiceImpl.java
  20. 12 7
      feifan-module-pay/feifan-module-pay-biz/src/main/java/cn/newfeifan/mall/module/pay/service/order/PayOrderServiceImpl.java

+ 1 - 0
feifan-module-distri/feifan-module-distri-api/src/main/java/cn/newfeifan/mall/module/distri/enums/ConsumptionEnum.java

@@ -14,6 +14,7 @@ public enum ConsumptionEnum {
     COMMISSION_WITHDRAWAL(5,"佣金提现"),
     PAY_ORDER(6,"购物支付"),
     REFUND_ORDER(7,"退回退款返回"),
+    TOP_UP_GET(8,"充值获得"),
     ;
 
     private final Integer type;

+ 1 - 0
feifan-module-distri/feifan-module-distri-api/src/main/java/cn/newfeifan/mall/module/distri/enums/ErrorCodeConstants.java

@@ -38,6 +38,7 @@ public interface ErrorCodeConstants {
     ErrorCode CONSUMPTION_TOP_UP_LOG_NOT_EXISTS = new ErrorCode(1_002_030_035, "充值消费分记录不存在");
     ErrorCode CONSUMPTION_CHANGE_LOG_NOT_EXISTS = new ErrorCode(1_002_030_036, "消费分变动记录不存在");
     ErrorCode CONSUMPTION_TRANSFER_LOG_NOT_EXISTS = new ErrorCode(1_002_030_037, "消费分转让记录不存在");
+    ErrorCode USER_TOP_UP_CONSUMPTION_POINTS_ORDER_NOT_EXISTS = new ErrorCode(1_002_030_038, "用户充值消费分订单不存在");
 
 
 }

+ 6 - 0
feifan-module-distri/feifan-module-distri-biz/pom.xml

@@ -119,5 +119,11 @@
             <version>2.0.0-jdk8-snapshot</version>
             <scope>compile</scope>
         </dependency>
+        <dependency>
+            <groupId>cn.newfeifan.zx</groupId>
+            <artifactId>feifan-module-pay-biz</artifactId>
+            <version>2.0.0-jdk8-snapshot</version>
+            <scope>compile</scope>
+        </dependency>
     </dependencies>
 </project>

+ 47 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/config/OrderProperties.java

@@ -0,0 +1,47 @@
+package cn.newfeifan.mall.module.distri.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.validation.annotation.Validated;
+
+import javax.validation.constraints.NotNull;
+import java.time.Duration;
+
+/**
+ * 交易订单的配置项
+ *
+ * @author LeeYan9
+ * @since 2022-09-15
+ */
+@ConfigurationProperties(prefix = "feifan.trade.order")
+@Configuration
+@Data
+@Validated
+public class OrderProperties {
+
+    /**
+     * 应用编号
+     */
+    @NotNull(message = "应用编号不能为空")
+    private Long appId;
+
+    /**
+     * 支付超时时间
+     */
+    @NotNull(message = "支付超时时间不能为空")
+    private Duration payExpireTime;
+
+    /**
+     * 收货超时时间
+     */
+    @NotNull(message = "收货超时时间不能为空")
+    private Duration receiveExpireTime;
+
+    /**
+     * 评论超时时间
+     */
+    @NotNull(message = "评论超时时间不能为空")
+    private Duration commentExpireTime;
+
+}

+ 3 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/app/orderpercentage/vo/OrderPercentagePageReqVO.java

@@ -61,4 +61,7 @@ public class OrderPercentagePageReqVO extends PageParam {
 
     @Schema(description = "提现佣金百分比")
     private String withdrawCommission;
+
+    @Schema(description = "用户充值消费分的额度")
+    private String userTopUpConsumptionPoints;
 }

+ 8 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/app/orderpercentage/vo/OrderPercentageRespVO.java

@@ -8,6 +8,10 @@ import com.alibaba.excel.annotation.*;
 @Data
 @ExcelIgnoreUnannotated
 public class OrderPercentageRespVO {
+    @Schema(description = "充值消费分的倍率")
+    @ExcelProperty("充值消费分的倍率")
+    private String consumptionMagnification;
+
     @Schema(description = "提现消费分百分比")
     @ExcelProperty("提现消费分百分比")
     private String withdrawConsumption;
@@ -15,4 +19,8 @@ public class OrderPercentageRespVO {
     @Schema(description = "提现佣金百分比")
     @ExcelProperty("提现佣金百分比")
     private String withdrawCommission;
+
+    @Schema(description = "用户充值消费分的额度")
+    @ExcelProperty("用户充值消费分的额度")
+    private String userTopUpConsumptionPoints;
 }

+ 2 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/app/orderpercentage/vo/OrderPercentageSaveReqVO.java

@@ -56,4 +56,6 @@ public class OrderPercentageSaveReqVO {
     @Schema(description = "提现佣金百分比")
     private String withdrawCommission;
 
+    @Schema(description = "用户充值消费分的额度")
+    private String userTopUpConsumptionPoints;
 }

+ 12 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/app/usertopupconsumptionpointsorder/vo/UserTopUpConsumptionPointsOrderInfoRespVO.java

@@ -0,0 +1,12 @@
+package cn.newfeifan.mall.module.distri.controller.app.usertopupconsumptionpointsorder.vo;
+
+import lombok.Builder;
+import lombok.Data;
+
+@Data
+@Builder
+public class UserTopUpConsumptionPointsOrderInfoRespVO {
+
+    private Long id;
+    private Long payOrderId;
+}

+ 35 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/convert/usertopupconsumptionpointsorder/UserTopUpConsumptionPointsOrderConvert.java

@@ -0,0 +1,35 @@
+package cn.newfeifan.mall.module.distri.convert.usertopupconsumptionpointsorder;
+
+import cn.newfeifan.mall.framework.common.util.string.StrUtils;
+import cn.newfeifan.mall.module.distri.config.OrderProperties;
+import cn.newfeifan.mall.module.distri.dal.dataobject.usertopupconsumptionpointsorder.UserTopUpConsumptionPointsOrderDO;
+import cn.newfeifan.mall.module.pay.api.order.dto.PayOrderCreateReqDTO;
+import cn.newfeifan.mall.module.pay.dal.dataobject.order.PayOrderDO;
+import cn.newfeifan.mall.module.pay.enums.order.PayOrderStatusEnum;
+import org.mapstruct.Mapper;
+import org.mapstruct.factory.Mappers;
+
+import static cn.newfeifan.mall.framework.common.util.date.LocalDateTimeUtils.addTime;
+
+@Mapper
+public interface UserTopUpConsumptionPointsOrderConvert {
+
+    UserTopUpConsumptionPointsOrderConvert INSTANCE = Mappers.getMapper(UserTopUpConsumptionPointsOrderConvert.class);
+    default PayOrderDO convert(UserTopUpConsumptionPointsOrderDO saveReqVO, OrderProperties orderProperties)
+    {
+        PayOrderDO payOrderDO = new PayOrderDO()
+                .setAppId(orderProperties.getAppId()).setUserIp(saveReqVO.getUserIp());
+        // 商户相关字段
+        payOrderDO.setMerchantOrderId(String.valueOf(saveReqVO.getId()));
+        String subject = saveReqVO.getSubject();
+        subject = StrUtils.maxLength(subject, PayOrderCreateReqDTO.SUBJECT_MAX_LENGTH); // 避免超过 32 位
+        payOrderDO.setSubject(subject);
+        payOrderDO.setBody(subject);
+        payOrderDO.setStatus(PayOrderStatusEnum.WAITING.getStatus()).setRefundPrice(0);
+        payOrderDO.setMerchantOrderId(saveReqVO.getId().toString());
+
+        // 订单相关字段
+        payOrderDO.setPrice(saveReqVO.getPayPrice().intValue()).setExpireTime(addTime(orderProperties.getPayExpireTime()));
+        return payOrderDO;
+    }
+}

+ 18 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/dataobject/orderpercentage/OrderPercentageDO.java

@@ -87,6 +87,19 @@ public class OrderPercentageDO extends BaseDO {
      */
     private String signInSocialStatus;
 
+    /**
+     * 充值消费分的倍率
+     */
+    private String consumptionMagnification;
+    /**
+     * 首次充值消费分的额度
+     */
+    private String firstTopUpConsumption;
+    /**
+     * 后续充值消费分的额度
+     */
+    private String followUpConsumption;
+
     /**
      * 提现佣金百分比
      */
@@ -96,4 +109,9 @@ public class OrderPercentageDO extends BaseDO {
      */
     private String withdrawConsumption;
 
+    /**
+     * 用户充值消费分的额度
+     */
+    private String userTopUpConsumptionPoints;
+
 }

+ 24 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/redis/RedisKeyConstants.java

@@ -0,0 +1,24 @@
+package cn.newfeifan.mall.module.distri.dal.redis;
+
+/**
+ * 交易 Redis Key 枚举类
+ *
+ * @author 非繁源码
+ */
+public interface RedisKeyConstants {
+
+    /**
+     * 交易序号的缓存
+     * KEY 格式:trade_no:{prefix}
+     * VALUE 数据格式:编号自增
+     */
+    String TRADE_NO = "trade_no:";
+
+    /**
+     * 交易序号的缓存
+     * KEY 格式:express_track:{code-logisticsNo-receiverMobile}
+     * VALUE 数据格式 String, 物流信息集合
+     */
+    String EXPRESS_TRACK = "express_track";
+
+}

+ 44 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/redis/no/OrderNoRedisDAO.java

@@ -0,0 +1,44 @@
+package cn.newfeifan.mall.module.distri.dal.redis.no;
+
+import cn.hutool.core.date.DatePattern;
+import cn.hutool.core.date.DateUtil;
+import cn.newfeifan.mall.module.distri.dal.redis.RedisKeyConstants;
+import org.springframework.data.redis.core.StringRedisTemplate;
+import org.springframework.stereotype.Repository;
+
+import javax.annotation.Resource;
+import java.time.Duration;
+import java.time.LocalDateTime;
+
+/**
+ * 订单序号的 Redis DAO
+ *
+ * @author HUIHUI
+ */
+@Repository
+public class OrderNoRedisDAO {
+
+    public static final String TRADE_ORDER_NO_PREFIX = "o";
+
+    public static final String AFTER_SALE_NO_PREFIX = "r";
+
+    @Resource
+    private StringRedisTemplate stringRedisTemplate;
+
+    /**
+     * 生成序号
+     *
+     * @param prefix 前缀
+     * @return 序号
+     */
+    public String generate(String prefix) {
+        // 递增序号
+        String noPrefix = prefix + DateUtil.format(LocalDateTime.now(), DatePattern.PURE_DATETIME_PATTERN);
+        String key = RedisKeyConstants.TRADE_NO + noPrefix;
+        Long no = stringRedisTemplate.opsForValue().increment(key);
+        // 设置过期时间
+        stringRedisTemplate.expire(key, Duration.ofMinutes(1L));
+        return noPrefix + no;
+    }
+
+}

+ 30 - 20
feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/controller/app/order/AppTradeOrderController.java

@@ -3,12 +3,14 @@ package cn.newfeifan.mall.module.trade.controller.app.order;
 import cn.newfeifan.mall.framework.common.pojo.CommonResult;
 import cn.newfeifan.mall.framework.common.pojo.PageResult;
 import cn.newfeifan.mall.framework.security.core.annotations.PreAuthenticated;
+import cn.newfeifan.mall.module.distri.service.usertopupconsumptionpointsorder.UserTopUpConsumptionPointsOrderService;
 import cn.newfeifan.mall.module.pay.api.notify.dto.PayOrderNotifyReqDTO;
 import cn.newfeifan.mall.module.pay.controller.admin.order.vo.PayOrderRespVO;
 import cn.newfeifan.mall.module.pay.controller.app.order.vo.AppPayOrderSubmitZeroPurchaseReqVO;
 import cn.newfeifan.mall.module.pay.convert.order.PayOrderConvert;
 import cn.newfeifan.mall.module.pay.dal.dataobject.order.PayOrderDO;
 import cn.newfeifan.mall.module.pay.dal.mysql.order.PayOrderMapper;
+import cn.newfeifan.mall.module.pay.enums.DictTypeConstants;
 import cn.newfeifan.mall.module.pay.enums.order.PayOrderStatusEnum;
 import cn.newfeifan.mall.module.pay.service.fuyouorder.FuYouPayOrderService;
 import cn.newfeifan.mall.module.pay.service.order.PayOrderService;
@@ -74,14 +76,16 @@ public class AppTradeOrderController {
 
     @Resource
     private FuYouPayOrderService fuYouPayOrderService;
+    @Resource
+    private UserTopUpConsumptionPointsOrderService userTopUpConsumptionPointsOrderService;
 
     @GetMapping("/getPayOrderByStatus2")
     @Operation(summary = "获得支付订单2")
     @Parameter(name = "id", description = "支付订单编号", required = true, example = "1024")
     public CommonResult<PayOrderRespVO> getPayOrderByStatus2(@RequestParam("id") Long id) {
-        log.info("getPayOrderByStatus2:=========id:{}",id);
+        log.info("getPayOrderByStatus2:=========id:{}", id);
         PayOrderDO oldPayOrderDO = payOrderMapper.selectById(id);
-        log.info("getPayOrderByStatus2:oldPayOrderDO===========:{}",oldPayOrderDO);
+        log.info("getPayOrderByStatus2:oldPayOrderDO===========:{}", oldPayOrderDO);
         PayOrderDO newPayOrderDO = payOrderService.getOrderByStatus(oldPayOrderDO);
 
         return getPayOrderRespVOCommonResult(id, newPayOrderDO, oldPayOrderDO);
@@ -91,11 +95,11 @@ public class AppTradeOrderController {
     @Operation(summary = "查询富友支付订单状态")
     @Parameter(name = "payOrderNo", description = "支付订单编号", required = true, example = "16103-202407151500201")
     public CommonResult<PayOrderRespVO> getFuYouPayOrderByStatus(@RequestParam("payOrderNo") String payOrderNo) {
-        log.info("getPayOrderByStatus2:=========id:{}",payOrderNo);
+        log.info("getPayOrderByStatus2:=========id:{}", payOrderNo);
         PayOrderDO oldPayOrderDO = payOrderMapper.selectByPayOrderNo(payOrderNo);
 
         // 若查无此订单
-        if(oldPayOrderDO == null){
+        if (oldPayOrderDO == null) {
             throw exception(PAY_ORDER_NOT_FOUND);
         }
 
@@ -109,24 +113,28 @@ public class AppTradeOrderController {
         CommonResult<PayOrderRespVO> success = success(PayOrderConvert.INSTANCE.convert(newPayOrderDO));
 
         //如果在上一行代码,把支付订单状态从“待支付”,改为“已支付”,则证明订单支付成功,则改trade_order表状态为待发货,并且分配积分
-        if(oldPayOrderDO.getStatus().equals(PayOrderStatusEnum.WAITING.getStatus())
+        if (oldPayOrderDO.getStatus().equals(PayOrderStatusEnum.WAITING.getStatus())
                 &&
                 newPayOrderDO.getStatus().equals(PayOrderStatusEnum.SUCCESS.getStatus())
-        )
-        {
-            //只有支付订单id参数payOrderId是有用的。
-            List list = tradeOrderUpdateService.updateOrderPaid(id);
-            Object jfObj = list.get(0);
-            Object sjObj = list.get(1);
-
-            Long jf = (Long)jfObj;//待确权积分
-            Double sj = (Double)sjObj;//待确权身价
-
-            success.getData().setJf(jf);
-            success.getData().setSj(sj);
+        ) {
+            // 判断是否是商品订单
+            if (newPayOrderDO.getNo().contains(DictTypeConstants.TUP_UP_NO) || (newPayOrderDO.getPayOrderNo() != null && newPayOrderDO.getPayOrderNo().contains(DictTypeConstants.TUP_UP_NO))) {
+                userTopUpConsumptionPointsOrderService.topUpConsumptionPoints(newPayOrderDO);
+            } else {
+                //只有支付订单id参数payOrderId是有用的。
+                List list = tradeOrderUpdateService.updateOrderPaid(id);
+                Object jfObj = list.get(0);
+                Object sjObj = list.get(1);
+
+                Long jf = (Long) jfObj;//待确权积分
+                Double sj = (Double) sjObj;//待确权身价
+
+                success.getData().setJf(jf);
+                success.getData().setSj(sj);
+            }
         }
 
-        log.info("getPayOrderByStatus2:success===========:{}",success);
+        log.info("getPayOrderByStatus2:success===========:{}", success);
         return success;
     }
 
@@ -134,6 +142,7 @@ public class AppTradeOrderController {
     /**
      * add by Ben
      * 待支付订单,点支付时的新增方法
+     *
      * @param tradeOrderId 订单id
      * @return 支付订单
      */
@@ -188,10 +197,11 @@ public class AppTradeOrderController {
         DeliveryExpressDO express = order.getLogisticsId() != null && order.getLogisticsId() > 0 ?
                 deliveryExpressService.getDeliveryExpress(order.getLogisticsId()) : null;
         // 最终组合
-        CommonResult<AppTradeOrderDetailRespVO> rs=
+        CommonResult<AppTradeOrderDetailRespVO> rs =
                 success(TradeOrderConvert.INSTANCE.convert02(order, orderItems, tradeOrderProperties, express));
         for (AppTradeOrderItemRespVO item : rs.getData().getItems()) {
-            if(item.getAfterSaleId() != null) item.setRefundStatus(afterSaleService.getAfterSale(item.getAfterSaleId()).getStatus());
+            if (item.getAfterSaleId() != null)
+                item.setRefundStatus(afterSaleService.getAfterSale(item.getAfterSaleId()).getStatus());
         }
 
         //设置订单支付的积分

+ 2 - 1
feifan-module-pay/feifan-module-pay-api/src/main/java/cn/newfeifan/mall/module/pay/enums/DictTypeConstants.java

@@ -36,7 +36,8 @@ public interface DictTypeConstants {
 
     String ORDER_NO_PREFIX = "P";
 
-
     String TRADE_NO = "trade_no:";
 
+    String TUP_UP_NO = "-top-up";
+
 }

+ 16 - 0
feifan-module-pay/feifan-module-pay-api/src/main/java/cn/newfeifan/mall/module/pay/enums/fuyouorder/OrderTypeEnum.java

@@ -0,0 +1,16 @@
+package cn.newfeifan.mall.module.pay.enums.fuyouorder;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@Getter
+@AllArgsConstructor
+public enum OrderTypeEnum {
+
+    PRODUCT_ORDER(1,"商品订单"),
+    CONSUMPTION_POINTS_ORDER(2,"充值消费分订单"),
+    ;
+
+    private final Integer type;
+    private final String mark;
+}

+ 4 - 0
feifan-module-pay/feifan-module-pay-biz/src/main/java/cn/newfeifan/mall/module/pay/controller/admin/order/vo/PayOrderSubmitReqVO.java

@@ -30,4 +30,8 @@ public class PayOrderSubmitReqVO {
     @URL(message = "回跳地址的格式必须是 URL")
     private String returnUrl;
 
+    @Schema(description = "订单类型")
+    @NotNull(message = "订单类型不能为空")
+    private Integer orderType;
+
 }

+ 6 - 6
feifan-module-pay/feifan-module-pay-biz/src/main/java/cn/newfeifan/mall/module/pay/fuiou/client/WxPreCreateClient.java

@@ -24,21 +24,21 @@ public class WxPreCreateClient {
 	public static void main(String[] args) throws Exception {
 		FuiouHttpPoster http = new FuiouHttpPoster();
 		http.setCharset("utf-8");
-		http.setUrl("http://192.168.8.45:45002/aggregatePay/wxPreCreate");
+		http.setUrl("https://aipay.fuioupay.com/aggregatePay/wxPreCreate");
 		WxPreCreateDataReq req = new WxPreCreateDataReq();
 		req.setTerm_id("88888888");
 		req.setTerm_ip("192.168.8.8");
 		req.setRandom_str(DateUtils.getCurrentDate("yyyyMMddHHmmss")
 					+ "568974");
-		req.setMchnt_cd("0002900F0370586");
-		req.setTrade_type("FWC");
-		req.setOpenid("oDax96l0bZdXqRQ2uVfn_2LV-DxM");//微信支付此字段必填
+		req.setMchnt_cd("0006420F7357129");
+		req.setTrade_type("JSAPI");
+//		req.setOpenid("osMm86Ggu3iLCkdCO2j4Zan-fHOQ");//微信支付此字段必填
 //		req.setSub_openid("221122121");//支付宝支付此字段必填
 		req.setOrder_amt("1");
 		req.setGoods_des("测试订单");
-		req.setMchnt_order_no("201707191000000000011");//不能重复
+		req.setMchnt_order_no("16103-202407102054211-top-up");//不能重复
 		req.setTxn_begin_ts(DateUtils.getCurrentDate("yyyyMMddHHmmss"));
-		req.setNotify_url("wwww.baidu.com");
+		req.setNotify_url("https://zxgz.newfeifan.cn/fuYou/pay/order/notify");
 		req.setVersion("1.0");
 		StringBuilder sb = new StringBuilder();
 		sb.append(req.getMchnt_cd().trim()).append("|")

+ 4 - 0
feifan-module-pay/feifan-module-pay-biz/src/main/java/cn/newfeifan/mall/module/pay/fuiou/reqvo/SubmitOrderRequestVO.java

@@ -23,6 +23,10 @@ public class SubmitOrderRequestVO {
     @NotEmpty(message = "支付渠道不能为空")
     private String channelCode;
 
+    @Schema
+    @NotNull(message = "订单类型不能为空")
+    private Integer orderType;
+
     @Schema(description = "支付渠道的额外参数", requiredMode = Schema.RequiredMode.REQUIRED, example = "wx_pub")
     private WxPreCreateDataReq req;
 }

+ 6 - 1
feifan-module-pay/feifan-module-pay-biz/src/main/java/cn/newfeifan/mall/module/pay/service/fuyouorder/FiYouPayOrderServiceImpl.java

@@ -10,6 +10,7 @@ import cn.newfeifan.mall.module.pay.dal.dataobject.order.PayOrderDO;
 import cn.newfeifan.mall.module.pay.dal.dataobject.order.PayOrderExtensionDO;
 import cn.newfeifan.mall.module.pay.dal.mysql.order.PayOrderExtensionMapper;
 import cn.newfeifan.mall.module.pay.dal.mysql.order.PayOrderMapper;
+import cn.newfeifan.mall.module.pay.enums.fuyouorder.OrderTypeEnum;
 import cn.newfeifan.mall.module.pay.enums.order.PayOrderStatusEnum;
 import cn.newfeifan.mall.module.pay.fuiou.reqdata.CommonQueryDataReq;
 import cn.newfeifan.mall.module.pay.fuiou.reqdata.WxPreCreateDataReq;
@@ -81,7 +82,11 @@ public class FiYouPayOrderServiceImpl implements FuYouPayOrderService {
 
         PayAppDO app = appService.validPayApp(payOrder.getAppId());
 
-        payOrder.setPayOrderNo(generate(FUYOU_TRADE_ORDER_NO_PREFIX));
+        if (requestVO.getOrderType().equals(OrderTypeEnum.PRODUCT_ORDER.getType())) {
+            payOrder.setPayOrderNo(generate(FUYOU_TRADE_ORDER_NO_PREFIX));
+        } else {
+            payOrder.setPayOrderNo(generate(FUYOU_TRADE_ORDER_NO_PREFIX) + TUP_UP_NO);
+        }
         payOrder.setNotifyUrl(app.getFuyouOrderNotifyUrl());
         payOrderService.updatePayOrder(payOrder);
 

+ 12 - 7
feifan-module-pay/feifan-module-pay-biz/src/main/java/cn/newfeifan/mall/module/pay/service/order/PayOrderServiceImpl.java

@@ -22,7 +22,9 @@ import cn.newfeifan.mall.module.pay.dal.dataobject.order.PayOrderExtensionDO;
 import cn.newfeifan.mall.module.pay.dal.mysql.order.PayOrderExtensionMapper;
 import cn.newfeifan.mall.module.pay.dal.mysql.order.PayOrderMapper;
 import cn.newfeifan.mall.module.pay.dal.redis.no.PayNoRedisDAO;
+import cn.newfeifan.mall.module.pay.enums.DictTypeConstants;
 import cn.newfeifan.mall.module.pay.enums.fuyouorder.FuYouPayOrderTypeEnum;
+import cn.newfeifan.mall.module.pay.enums.fuyouorder.OrderTypeEnum;
 import cn.newfeifan.mall.module.pay.enums.notify.PayNotifyTypeEnum;
 import cn.newfeifan.mall.module.pay.enums.order.PayOrderStatusEnum;
 import cn.newfeifan.mall.module.pay.framework.pay.config.PayProperties;
@@ -81,8 +83,8 @@ public class PayOrderServiceImpl implements PayOrderService {
 
     @Override
     public PayOrderDO getOrderByStatus(PayOrderDO payOrderDO) {
-        log.info("getOrderByStatus:oldPayOrderDO===========:{}",payOrderDO);
-        log.info("getOrderByStatus:WAITING===========:{}",PayOrderStatusEnum.WAITING.getStatus());
+        log.info("getOrderByStatus:oldPayOrderDO===========:{}", payOrderDO);
+        log.info("getOrderByStatus:WAITING===========:{}", PayOrderStatusEnum.WAITING.getStatus());
 
         //添加验证是否支付成功
         if (payOrderDO.getStatus().equals(PayOrderStatusEnum.WAITING.getStatus())) {
@@ -93,9 +95,7 @@ public class PayOrderServiceImpl implements PayOrderService {
             syncOrder(payOrderExtensionDO);
         }
 
-        PayOrderDO newPayOrderDO = orderMapper.selectById(payOrderDO.getId());
-
-        return newPayOrderDO;
+        return orderMapper.selectById(payOrderDO.getId());
     }
 
     @Override
@@ -186,7 +186,12 @@ public class PayOrderServiceImpl implements PayOrderService {
         log.warn("[submitOrder--------->unifiedOrderResp][订单id({})1111111支付渠道校验通过]", order.getId());
 
         // 2. 插入 PayOrderExtensionDO
-        String no = noRedisDAO.generate(payProperties.getOrderNoPrefix());
+        String no;
+        if (reqVO.getOrderType().equals(OrderTypeEnum.CONSUMPTION_POINTS_ORDER.getType())) {
+            no = noRedisDAO.generate(payProperties.getOrderNoPrefix()) + DictTypeConstants.TUP_UP_NO;
+        } else {
+            no = noRedisDAO.generate(payProperties.getOrderNoPrefix());
+        }
         PayOrderExtensionDO orderExtension = PayOrderConvert.INSTANCE.convert(reqVO, userIp)
                 .setOrderId(order.getId()).setNo(no)
                 .setChannelId(channel.getId()).setChannelCode(channel.getCode())
@@ -261,7 +266,7 @@ public class PayOrderServiceImpl implements PayOrderService {
             }
 
             // 如果支付渠道是从富友对接的那就不用往下继续了
-            if(FuYouPayOrderTypeEnum.getCode(orderExtension.getChannelCode()) != null){
+            if (FuYouPayOrderTypeEnum.getCode(orderExtension.getChannelCode()) != null) {
                 return;
             }