花田厝 2 місяців тому
батько
коміт
07d1230333
22 змінених файлів з 826 додано та 62 видалено
  1. 47 5
      jsjp-admin/src/main/java/com/miaxis/app/controller/userInfo/UserVipController.java
  2. 23 51
      jsjp-admin/src/main/java/com/miaxis/app/controller/wx/WxJsjpController.java
  3. 9 1
      jsjp-admin/src/main/resources/application-dev.yml
  4. 9 3
      jsjp-admin/src/main/resources/application-prod.yml
  5. 11 0
      jsjp-admin/src/main/resources/application-prodtest.yml
  6. 11 0
      jsjp-admin/src/test/java/com/miaxis/test/Test08.java
  7. 1 0
      jsjp-common/src/main/java/com/miaxis/common/config/WxpayConfig.java
  8. 77 0
      jsjp-service/src/main/java/com/miaxis/job/AppAdJob.java
  9. 20 0
      jsjp-service/src/main/java/com/miaxis/order/domain/OrderInfo.java
  10. 73 0
      jsjp-service/src/main/java/com/miaxis/order/domain/OrderSplit.java
  11. 19 0
      jsjp-service/src/main/java/com/miaxis/order/dto/FzConfig.java
  12. 2 0
      jsjp-service/src/main/java/com/miaxis/order/mapper/OrderInfoMapper.java
  13. 23 0
      jsjp-service/src/main/java/com/miaxis/order/mapper/OrderSplitMapper.java
  14. 10 0
      jsjp-service/src/main/java/com/miaxis/order/service/IOrderInfoService.java
  15. 25 0
      jsjp-service/src/main/java/com/miaxis/order/service/IOrderSplitService.java
  16. 352 1
      jsjp-service/src/main/java/com/miaxis/order/service/impl/OrderInfoServiceImpl.java
  17. 33 0
      jsjp-service/src/main/java/com/miaxis/order/service/impl/OrderSplitServiceImpl.java
  18. 14 0
      jsjp-service/src/main/java/com/miaxis/userInfo/domain/UserVip.java
  19. 13 0
      jsjp-service/src/main/java/com/miaxis/userInfo/vo/UserVipTFVO.java
  20. 8 0
      jsjp-service/src/main/java/com/miaxis/userInfo/vo/UserVipVO.java
  21. 8 1
      jsjp-service/src/main/resources/mapper/order/OrderInfoMapper.xml
  22. 38 0
      jsjp-service/src/main/resources/mapper/order/OrderSplitMapper.xml

+ 47 - 5
jsjp-admin/src/main/java/com/miaxis/app/controller/userInfo/UserVipController.java

@@ -64,7 +64,7 @@ public class UserVipController extends BaseController {
         UserVipVO vo = new UserVipVO();
         if (userVip != null) {
             BeanUtils.copyProperties(userVip, vo);
-            String sign = getSign(vo.getUserId(),vo.getSubject1(), vo.getSubject2(), vo.getSubject3(),vo.getSubject4());
+            String sign = getSign(vo.getUserId(),vo.getSubject1(), vo.getSubject2(), vo.getSubject3(),vo.getSubject4(),vo.getSpSubject1(),vo.getSpSubject4());
             vo.setSign(sign);
             return Response.success(vo);
         } else {
@@ -128,8 +128,30 @@ public class UserVipController extends BaseController {
                 vo.setSubject4Int(0);
             }
 
-            String sign = getSignInt(vo.getUserId(),vo.getSubject1(), vo.getSubject2(), vo.getSubject3(),vo.getSubject4(),
-                    vo.getSubject1Int(),vo.getSubject2Int(),vo.getSubject3Int(),vo.getSubject4Int());
+           //科一特训包
+            if(vo.getSpSubject1()!=null){
+                if(now.compareTo(vo.getSpSubject1())>0) {  //如果过期
+                    vo.setSpSubject1Int(0);
+                } else {
+                    vo.setSpSubject1Int(1);
+                }
+            } else {
+                vo.setSpSubject1Int(0);
+            }
+
+            //科四特训包
+            if(vo.getSpSubject4()!=null){
+                if(now.compareTo(vo.getSpSubject4())>0) {  //如果过期
+                    vo.setSpSubject4Int(0);
+                } else {
+                    vo.setSpSubject4Int(1);
+                }
+            } else {
+                vo.setSpSubject4Int(0);
+            }
+
+            String sign = getSignInt(vo.getUserId(),vo.getSubject1(), vo.getSubject2(), vo.getSubject3(),vo.getSubject4(),vo.getSpSubject1(),vo.getSpSubject4(),
+                    vo.getSubject1Int(),vo.getSubject2Int(),vo.getSubject3Int(),vo.getSubject4Int(),vo.getSpSubject1Int(),vo.getSpSubject4Int());
             vo.setSign(sign);
             return Response.success(vo);
         } else {
@@ -155,7 +177,7 @@ public class UserVipController extends BaseController {
     }
 
 
-    private String getSign(Long userId, Date subject1, Date subject2, Date subject3, Date subject4) throws Exception {
+    private String getSign(Long userId, Date subject1, Date subject2, Date subject3, Date subject4, Date spSubject1, Date spSubject4) throws Exception {
         String str = userId + "";
 
         if (subject1 != null) {
@@ -170,6 +192,13 @@ public class UserVipController extends BaseController {
         if (subject4 != null) {
             str += subject4.getTime() + "";
         }
+        if (spSubject1 != null) {
+            str += spSubject1.getTime() + "";
+        }
+        if (subject4 != null) {
+            str += spSubject4.getTime() + "";
+        }
+
         // 进行签名服务
         Signature signature = Signature.getInstance("SHA256withRSA");
         KeyFactory kf = KeyFactory.getInstance("RSA");
@@ -181,7 +210,7 @@ public class UserVipController extends BaseController {
 
     }
 
-    private String getSignInt(Long userId, Date subject1, Date subject2, Date subject3, Date subject4, Integer subject1Int, Integer subject2Int, Integer subject3Int,  Integer subject4Int) throws Exception {
+    private String getSignInt(Long userId, Date subject1, Date subject2, Date subject3, Date subject4, Date spSubject1, Date spSubject4, Integer subject1Int, Integer subject2Int, Integer subject3Int, Integer subject4Int, Integer spSubject1Int, Integer spSubject4Int) throws Exception {
         String str = userId + "";
         if (subject1 != null) {
             str += subject1.getTime() + "";
@@ -195,6 +224,12 @@ public class UserVipController extends BaseController {
         if (subject4 != null) {
             str += subject4.getTime() + "";
         }
+        if (spSubject1 != null) {
+            str += spSubject1.getTime() + "";
+        }
+        if (spSubject4 != null) {
+            str += spSubject4.getTime() + "";
+        }
         if (subject1Int != null) {
             str += subject1Int + "";
         }
@@ -207,6 +242,13 @@ public class UserVipController extends BaseController {
         if (subject4Int != null) {
             str += subject4Int + "";
         }
+        if (spSubject1Int != null) {
+            str += spSubject1Int + "";
+        }
+        if (spSubject4Int != null) {
+            str += spSubject4Int + "";
+        }
+
         // 进行签名服务
         Signature signature = Signature.getInstance("SHA256withRSA");
         KeyFactory kf = KeyFactory.getInstance("RSA");

+ 23 - 51
jsjp-admin/src/main/java/com/miaxis/app/controller/wx/WxJsjpController.java

@@ -133,7 +133,7 @@ public class WxJsjpController extends BaseController {
         order.setLogincode(gzptUserInfo.getLogincode());
         order.setGoodsName(sysDictData.getDictLabel());
 
-        if("特训包".equals(sysDictData.getDictLabel())){
+        if(sysDictData.getDictLabel().contains("特训包")){
             order.setIsFz(1); //分账
         } else {
             order.setIsFz(0); //不分账
@@ -156,36 +156,16 @@ public class WxJsjpController extends BaseController {
         int b = new Double(price).intValue();
         order.setTotal(b);
 
-        if (isShare == 1) {
-
-            //营口学员已绑定教练员
-            if ("2108".equals(gzptUserInfo.getCity()) && gzptUserInfo.getIsBindCoach() == 1) {
-                //如果是合作驾校
-                if (wxOrderDTO.getPhoneType() != null && wxOrderDTO.getPhoneType() == 1) { //苹果
-                    int priceApple = Integer.parseInt(values[3]);   //订单总额
-                    order.setSchoolCommission(priceApple);
-                    order.setIsShare(1);
-                } else if (wxOrderDTO.getPhoneType() != null && wxOrderDTO.getPhoneType() == 2) { //安卓
-                    int priceAndroid = Integer.parseInt(values[2]);   //订单总额
-                    order.setSchoolCommission(priceAndroid);
-                    order.setIsShare(1);
-                }
-            } else if ("2108".equals(gzptUserInfo.getCity()) && gzptUserInfo.getIsBindCoach() != 1) {
-                order.setIsShare(0); //如果2108地区 没绑定教练,不算合作订单
-            }
-
-            //非营口只判断有合作
-            if (!"2108".equals(gzptUserInfo.getCity())) {
-                //如果是合作驾校
-                if (wxOrderDTO.getPhoneType() != null && wxOrderDTO.getPhoneType() == 1) { //苹果
-                    int priceApple = Integer.parseInt(values[3]);   //订单总额
-                    order.setSchoolCommission(priceApple);
-                    order.setIsShare(1);
-                } else if (wxOrderDTO.getPhoneType() != null && wxOrderDTO.getPhoneType() == 2) { //安卓
-                    int priceAndroid = Integer.parseInt(values[2]);   //订单总额
-                    order.setSchoolCommission(priceAndroid);
-                    order.setIsShare(1);
-                }
+        if (isShare == 1 && order.getIsFz()!=1) {
+            //如果是合作驾校
+            if (wxOrderDTO.getPhoneType() != null && wxOrderDTO.getPhoneType() == 1) { //苹果
+                int priceApple = Integer.parseInt(values[3]);   //订单总额
+                order.setSchoolCommission(priceApple);
+                order.setIsShare(1);
+            } else if (wxOrderDTO.getPhoneType() != null && wxOrderDTO.getPhoneType() == 2) { //安卓
+                int priceAndroid = Integer.parseInt(values[2]);   //订单总额
+                order.setSchoolCommission(priceAndroid);
+                order.setIsShare(1);
             }
         }
 
@@ -411,6 +391,13 @@ public class WxJsjpController extends BaseController {
         order.setUserName(gzptUserInfo.getUserName());
         order.setLogincode(gzptUserInfo.getLogincode());
         order.setGoodsName(sysDictData.getDictLabel());
+
+        if(sysDictData.getDictLabel().contains("特训包")){
+            order.setIsFz(1); //分账
+        } else {
+            order.setIsFz(0); //不分账
+        }
+
         order.setGoodsType(1);
         order.setPhoneType(wxOrderDTO.getPhoneType());  //手机类型
         if ("yntms".equals(gzptUserInfo.getCity())) { //如果是一诺地市
@@ -428,10 +415,8 @@ public class WxJsjpController extends BaseController {
         int b = new Double(price).intValue();
         order.setTotal(b);
 
-        if (isShare == 1) {
 
-            //营口学员已绑定教练员
-            if ("2108".equals(gzptUserInfo.getCity()) && gzptUserInfo.getIsBindCoach() == 1) {
+        if (isShare == 1 && order.getIsFz()!=1) {
                 //如果是合作驾校
                 if (wxOrderDTO.getPhoneType() != null && wxOrderDTO.getPhoneType() == 1) { //苹果
                     int priceApple = Integer.parseInt(values[3]);   //订单总额
@@ -442,23 +427,6 @@ public class WxJsjpController extends BaseController {
                     order.setSchoolCommission(priceAndroid);
                     order.setIsShare(1);
                 }
-            } else if ("2108".equals(gzptUserInfo.getCity()) && gzptUserInfo.getIsBindCoach() != 1) {
-                order.setIsShare(0); //如果2108地区 没绑定教练,不算合作订单
-            }
-
-            //非营口只判断有合作
-            if (!"2108".equals(gzptUserInfo.getCity())) {
-                //如果是合作驾校
-                if (wxOrderDTO.getPhoneType() != null && wxOrderDTO.getPhoneType() == 1) { //苹果
-                    int priceApple = Integer.parseInt(values[3]);   //订单总额
-                    order.setSchoolCommission(priceApple);
-                    order.setIsShare(1);
-                } else if (wxOrderDTO.getPhoneType() != null && wxOrderDTO.getPhoneType() == 2) { //安卓
-                    int priceAndroid = Integer.parseInt(values[2]);   //订单总额
-                    order.setSchoolCommission(priceAndroid);
-                    order.setIsShare(1);
-                }
-            }
         }
 
         if (sysDictData.getDictLabel().indexOf("计时") != -1) {
@@ -514,6 +482,10 @@ public class WxJsjpController extends BaseController {
         sceneInfoNode.put("payer_client_ip", ipAddr)
                 .set("h5_info", h5InfoNode);
         rootNode.set("scene_info", sceneInfoNode);
+        if (order.getIsFz() == 1) {
+            rootNode.putObject("settle_info").put("profit_sharing", true);
+        }
+
         objectMapper.writeValue(bos, rootNode);
         httpPost.setEntity(new StringEntity(rootNode.toString(), "utf-8"));
 

+ 9 - 1
jsjp-admin/src/main/resources/application-dev.yml

@@ -145,6 +145,7 @@ wxpay:
     v3urlRefund: https://api.mch.weixin.qq.com/v3/refund/domestic/refunds
     merchantId: 1611324484
     serialNumber: 53EBF541F383371B121D7B57B25305FC0BB04F42
+    platformSerialNumber: 3BC2D5BB3089545297F9CC9BFF94FA4EE7602B69
     v3key: 7hM14893GvG3JK05575jk1l6P4tF042B
     notifyUrl: https://jsjp-admin1.zzxcx.net/stage-api/open-api/wx/notify/wxpay
     notifyUrlRefund: https://jsjp-admin1.zzxcx.net/stage-api/wx/notify/refund
@@ -160,5 +161,12 @@ applepay:
 
 
 
-
+#分账设置 version 正式版为 "release",体验版为 "trial",开发版为 "develop"。默认是正式版。
+fz:
+    type: "MERCHANT_ID"
+    account: "account"
+    relationType: "PARTNER"
+    name: "闽侯县上街逗趣乐工作室"
+    description: "主播授权视频分账30%"
+    version: "develop"
 

+ 9 - 3
jsjp-admin/src/main/resources/application-prod.yml

@@ -144,6 +144,7 @@ wxpay:
     v3urlRefund: https://api.mch.weixin.qq.com/v3/refund/domestic/refunds
     merchantId: 1611324484
     serialNumber: 53EBF541F383371B121D7B57B25305FC0BB04F42
+    platformSerialNumber: 3BC2D5BB3089545297F9CC9BFF94FA4EE7602B69
     v3key: 7hM14893GvG3JK05575jk1l6P4tF042B
     notifyUrl: https://jsjp-admin.zzxcx.net/prod-api/open-api/wx/notify/wxpay
     notifyUrlRefund: https://jsjp-admin.zzxcx.net/prod-api/open-api/wx/notify/refund
@@ -170,9 +171,14 @@ wai:
     appid: "7629"
     secret: "cce08fcab10ff96a863892bb6e396a9e"
 
-
-
-
+#分账设置 version 正式版为 "release",体验版为 "trial",开发版为 "develop"。默认是正式版。
+fz:
+    type: "MERCHANT_ID"
+    account: "account"
+    relationType: "PARTNER"
+    name: "闽侯县上街逗趣乐工作室"
+    description: "主播授权视频分账30%"
+    version: "release"
 
 # 苹果支付
 applepay:

+ 11 - 0
jsjp-admin/src/main/resources/application-prodtest.yml

@@ -132,6 +132,7 @@ wxpay:
     v3urlRefund: https://api.mch.weixin.qq.com/v3/refund/domestic/refunds
     merchantId: 1611324484
     serialNumber: 53EBF541F383371B121D7B57B25305FC0BB04F42
+    platformSerialNumber: 3BC2D5BB3089545297F9CC9BFF94FA4EE7602B69
     v3key: 7hM14893GvG3JK05575jk1l6P4tF042B
     notifyUrl: http://218.85.55.253:8888/open-api/wx/notify/wxpay
     notifyUrlRefund: http://218.85.55.253:8888/open-api/wx/notify/refund
@@ -141,3 +142,13 @@ wxpay:
 applepay:
     verifyUrl: https://buy.itunes.apple.com/verifyReceipt
     verifyTestUrl: https://sandbox.itunes.apple.com/verifyReceipt
+
+
+#分账设置 version 正式版为 "release",体验版为 "trial",开发版为 "develop"。默认是正式版。
+fz:
+    type: "MERCHANT_ID"
+    account: "account"
+    relationType: "PARTNER"
+    name: "闽侯县上街逗趣乐工作室"
+    description: "主播授权视频分账30%"
+    version: "trial"

+ 11 - 0
jsjp-admin/src/test/java/com/miaxis/test/Test08.java

@@ -7,6 +7,17 @@ public class Test08 {
         System.out.println(System.currentTimeMillis()/100);
 
 
+        String km = "123123特1训包";
+
+
+        if(km.contains("特训包")) {
+
+            System.out.println("存在");
+        } else {
+            System.out.println("不存在");
+        }
+
+
     }
 
 }

+ 1 - 0
jsjp-common/src/main/java/com/miaxis/common/config/WxpayConfig.java

@@ -23,6 +23,7 @@ public class WxpayConfig {
     //商户id
     private String merchantId;
     private String serialNumber;
+    private String platformSerialNumber;
     private String v3key;
 
 

+ 77 - 0
jsjp-service/src/main/java/com/miaxis/job/AppAdJob.java

@@ -0,0 +1,77 @@
+package com.miaxis.job;
+
+import com.miaxis.common.core.domain.entity.SysDictData;
+import com.miaxis.order.domain.OrderInfo;
+import com.miaxis.order.service.IOrderInfoService;
+import com.miaxis.system.service.ISysDictDataService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import java.util.Date;
+import java.util.List;
+
+@Slf4j
+@Component
+public class AppAdJob {
+
+
+    @Autowired
+    private ISysDictDataService dictDataService;
+    @Autowired
+    private IOrderInfoService orderInfoService;
+
+    @Value("${fz.version}")
+    private String envVersion;
+
+
+
+
+
+    //@Scheduled(cron = "0 30 6 * * ?")
+    public void closeAd2()  {
+        log.info("--------现在是6点半!~---------------");
+    }
+
+
+    @Scheduled(cron = "0 0 14 * * ?")
+    public void wxProfitsharing() throws Exception {
+        if("release".equals(envVersion)){
+            log.info("--------现在开始执行每天下午2点执行一次的微信分帐!~---------------");
+            List<OrderInfo> orderInfoList = orderInfoService.selectOrderInfoByWaitProfit();
+            int s = 0;
+            int f = 0;
+            int z = 0;
+
+            for (int i = 0; i < orderInfoList.size(); i++) {
+                OrderInfo orderInfo = orderInfoList.get(i);
+
+                // 获取当前时间
+                Date currentDate = new Date();
+                // 添加2分钟
+                long fiveMinutesInMillis = 2 * 60 * 1000; // 1分钟的毫秒数
+                Date nowDate = new Date(currentDate.getTime() - fiveMinutesInMillis); //当前时间减掉2分钟
+                if (nowDate.compareTo(orderInfo.getSuccessTime()) < 0) {   //当前时间如果还小于 支付成功时间就不能分账
+                    z++;
+                    continue;
+                }
+
+                boolean addFlag = orderInfoService.wxAddFenZhang(orderInfo);
+                boolean flag = orderInfoService.wxProfitsharing(orderInfo);
+                if (flag && addFlag) {
+                    s++;
+                } else {
+                    f++;
+                }
+                log.info("系统定时自动:分账成功"+s+"条,分账失败"+f+"条,分账时间不足"+z+"条,总计"+orderInfoList.size()+"条。");
+            }
+        } else {
+            log.info("测试服不执行分账操作");
+        }
+
+    }
+
+
+}

+ 20 - 0
jsjp-service/src/main/java/com/miaxis/order/domain/OrderInfo.java

@@ -64,6 +64,10 @@ public class OrderInfo extends BaseBusinessEntity{
     @ApiModelProperty(value = "用户登录名")
     private String logincode;
 
+    /** 微信支付系统生成的订单号 */
+    @TableField("transaction_id")
+    @ApiModelProperty(value = "微信支付系统生成的订单号")
+    private String transactionId;
 
     /** 极速驾培订单ID */
     @Excel(name = "极速驾培订单ID")
@@ -138,6 +142,22 @@ public class OrderInfo extends BaseBusinessEntity{
     @ApiModelProperty(value = "驾校提成")
     private Integer schoolCommission;
 
+
+    /** 是否状态 0不分账 1未分账 2分账成功 3分账失败 */
+    @Excel(name = "是否状态 0不分账 1未分账 2分账成功 3分账失败")
+    @TableField("is_fz")
+    @ApiModelProperty(value = "是否状态 0不分账 1未分账 2分账成功 3分账失败")
+    private Integer isFz;
+
+
+    /** 分账金额(单位分) */
+    @Excel(name = "分账金额(单位分)")
+    @TableField("fz_price")
+    @ApiModelProperty(value = "分账金额(单位分)")
+    private Integer fzPrice;
+
+
+
     /** 手机类型 1:苹果 2:安卓 */
     @Excel(name = "手机类型 1:苹果 2:安卓")
     @TableField("phone_type")

+ 73 - 0
jsjp-service/src/main/java/com/miaxis/order/domain/OrderSplit.java

@@ -0,0 +1,73 @@
+package com.miaxis.order.domain;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.miaxis.common.annotation.Excel;
+import com.miaxis.common.core.domain.BaseBusinessEntity;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 分账记录对象 order_split
+ *
+ * @author miaxis
+ * @date 2024-01-31
+ */
+@Data
+@TableName("order_split")
+@ApiModel(value = "OrderSplit", description = "分账记录对象 order_split")
+public class OrderSplit extends BaseBusinessEntity {
+    private static final long serialVersionUID = 1L;
+
+    /** ID */
+    @TableId(value = "id")
+    @ApiModelProperty(value = "ID")
+    private Long id;
+
+
+    /** 微信支付系统生成的订单号 */
+    @TableField("transaction_id")
+    @ApiModelProperty(value = "微信支付系统生成的订单号")
+    private String transactionId;
+
+    /** 商户内部分账订单ID */
+    @Excel(name = "商户内部分账订单ID")
+    @TableField("out_split_no")
+    @ApiModelProperty(value = "商户内部分账订单ID")
+    private String outSplitNo;
+
+    /** 商户内部订单ID */
+    @Excel(name = "商户内部订单ID")
+    @TableField("out_trade_no")
+    @ApiModelProperty(value = "商户内部订单ID")
+    private String outTradeNo;
+
+    /** 分账金额 */
+    @Excel(name = "分账金额")
+    @TableField("amount")
+    @ApiModelProperty(value = "分账金额")
+    private Integer amount;
+
+    /** 分账到openid或商户号 */
+    @Excel(name = "分账到openid或商户号")
+    @TableField("open_id")
+    @ApiModelProperty(value = "分账到openid或商户号")
+    private String openId;
+
+    /** 前端类型 1:app 2:小程序 3:公众号 */
+    @Excel(name = "前端类型 1:app 2:小程序 3:公众号")
+    @TableField("open_id_type")
+    @ApiModelProperty(value = "前端类型 1:app 2:小程序 3:公众号")
+    private Integer openIdType;
+
+
+    /** 描述 */
+    @Excel(name = "描述")
+    @TableField("description")
+    @ApiModelProperty(value = "描述")
+    private String description;
+
+
+}

+ 19 - 0
jsjp-service/src/main/java/com/miaxis/order/dto/FzConfig.java

@@ -0,0 +1,19 @@
+package com.miaxis.order.dto;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "fz")
+public class FzConfig {
+
+    //公共参数
+    private String type;  //商户类型
+    private String account; //账号
+    private String relationType;
+    private String name;  //接收人名字
+    private String description; //描述
+
+}

+ 2 - 0
jsjp-service/src/main/java/com/miaxis/order/mapper/OrderInfoMapper.java

@@ -39,4 +39,6 @@ public interface OrderInfoMapper extends BaseMapper<OrderInfo> {
     List<QuerySchoolOrderDetailedVo> selectSchoolOrderDetailedExcel(QuerySchoolOrderListDTO schoolOrderListDTO);
 
     List<OrderIncomeVo> getIncomeList(QuerySchoolOrderListDTO schoolOrderListDTO);
+
+    List<OrderInfo> selectOrderInfoByWaitProfit();
 }

+ 23 - 0
jsjp-service/src/main/java/com/miaxis/order/mapper/OrderSplitMapper.java

@@ -0,0 +1,23 @@
+package com.miaxis.order.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.miaxis.order.domain.OrderSplit;
+
+import java.util.List;
+
+/**
+ * 分账记录Mapper接口
+ *
+ * @author miaxis
+ * @date 2024-01-31
+ */
+public interface OrderSplitMapper extends BaseMapper<OrderSplit> {
+    /**
+     * 查询分账记录列表
+     *
+     * @param orderSplit 分账记录
+     * @return 分账记录集合
+     */
+    public List<OrderSplit> selectOrderSplitList(OrderSplit orderSplit);
+
+}

+ 10 - 0
jsjp-service/src/main/java/com/miaxis/order/service/IOrderInfoService.java

@@ -7,6 +7,7 @@ import com.miaxis.order.vo.OrderIncomeVo;
 import com.miaxis.order.vo.QuerySchoolOrderDetailedVo;
 import com.miaxis.order.vo.QuerySchoolOrderListVo;
 import com.miaxis.wx.domain.WxJsOrder;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.List;
 
@@ -48,4 +49,13 @@ public interface IOrderInfoService extends IService<OrderInfo> {
     List<QuerySchoolOrderListVo> selectSchoolOrderInfoExcel(QuerySchoolOrderListDTO schoolOrderListDTO);
 
     List<OrderIncomeVo> getIncomeList(QuerySchoolOrderListDTO schoolOrderListDTO);
+
+    List<OrderInfo> selectOrderInfoByWaitProfit();
+
+    @Transactional
+    boolean wxAddFenZhang(OrderInfo orderInfo) throws Exception;
+
+    @Transactional
+    boolean wxProfitsharing(OrderInfo orderInfo) throws Exception;
+
 }

+ 25 - 0
jsjp-service/src/main/java/com/miaxis/order/service/IOrderSplitService.java

@@ -0,0 +1,25 @@
+package com.miaxis.order.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.miaxis.order.domain.OrderSplit;
+
+import java.util.List;
+
+/**
+ * 分账记录Service接口
+ *
+ * @author miaxis
+ * @date 2024-01-31
+ */
+public interface IOrderSplitService extends IService<OrderSplit>{
+    /**
+     * 查询分账记录列表
+     *
+     * @param orderSplit 分账记录
+     * @return 分账记录集合
+     */
+     List<OrderSplit> selectOrderSplitList(OrderSplit orderSplit);
+
+
+
+}

+ 352 - 1
jsjp-service/src/main/java/com/miaxis/order/service/impl/OrderInfoServiceImpl.java

@@ -1,6 +1,15 @@
 package com.miaxis.order.service.impl;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.github.wxpay.sdk.WXPay;
+import com.github.wxpay.sdk.WXPayConfig;
+import com.github.wxpay.sdk.WXPayConstants;
+import com.github.wxpay.sdk.WXPayUtil;
+import com.miaxis.common.config.AppConfig;
+import com.miaxis.common.config.WxPayConfigImpl;
+import com.miaxis.common.config.WxpayConfig;
+import com.miaxis.common.utils.XmlUtil;
 import com.miaxis.exam.domain.ExamInfo;
 import com.miaxis.exam.service.IExamInfoService;
 import com.miaxis.examvip.domain.VipUserExam;
@@ -11,21 +20,31 @@ import com.miaxis.newgzpt.domain.GzptUserInfo;
 import com.miaxis.newgzpt.domain.GzptUserInfoDel;
 import com.miaxis.newgzpt.service.*;
 import com.miaxis.order.domain.OrderInfo;
+import com.miaxis.order.domain.OrderSplit;
+import com.miaxis.order.dto.FzConfig;
 import com.miaxis.order.dto.QuerySchoolOrderListDTO;
 import com.miaxis.order.mapper.OrderInfoMapper;
 import com.miaxis.order.service.IOrderInfoService;
+import com.miaxis.order.service.IOrderSplitService;
 import com.miaxis.order.vo.OrderIncomeVo;
 import com.miaxis.order.vo.QuerySchoolOrderDetailedVo;
 import com.miaxis.order.vo.QuerySchoolOrderListVo;
 import com.miaxis.userInfo.domain.UserVip;
 import com.miaxis.userInfo.service.IUserVipService;
 import com.miaxis.wx.domain.WxJsOrder;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.RandomStringUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.Date;
 import java.util.List;
+import java.util.Map;
+import java.util.TreeMap;
+
+import static com.miaxis.common.utils.OrderCodeFactory.getOrderCode;
 
 /**
  * 订单信息Service业务层处理
@@ -34,6 +53,7 @@ import java.util.List;
  * @date 2022-06-01
  */
 @Service
+@Slf4j
 public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo> implements IOrderInfoService {
     @Autowired
     private OrderInfoMapper orderInfoMapper;
@@ -47,6 +67,8 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
     @Autowired
     private IGzptUserInfoDelService userInfoDelService;
 
+    @Autowired
+    private IOrderSplitService orderSplitService;
 
     @Autowired
     private IGzptSchActivationService schActivationService;
@@ -63,6 +85,16 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
     @Autowired
     private IVipUserExamService vipUserExamService;
 
+    @Autowired
+    private WxpayConfig wxpayConfig;
+
+    @Autowired
+    private AppConfig appConfig;
+
+
+    @Autowired
+    private FzConfig fzConfig;
+
     /**
      * 查询订单信息列表
      *
@@ -95,6 +127,11 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
         orderInfo.setLogincode(order.getLogincode());
         orderInfo.setOutTradeNo(order.getOutTradeNo());
         orderInfo.setTotal(order.getTotal());
+        orderInfo.setIsFz(order.getIsFz());
+        if(order.getIsFz()==1) { //需要分账
+            int amount = (int) Math.floor(orderInfo.getTotal() * 0.3);
+            orderInfo.setFzPrice(amount);
+        }
         orderInfo.setTradeType(1);
         orderInfo.setSuccessTime(order.getSuccessTime());
         orderInfo.setPayType(payType);
@@ -896,6 +933,98 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
                 userVipService.save(uv);
                 this.save(orderInfo);
             }
+        } else if ("科一特训包".equals(order.getGoodsName())) {
+            UserVip userVip = userVipService.getUserVipByUserId(order.getUserId());
+            if (userVip != null) {
+                //修改会员信息
+                Date km1SpDate = userVip.getSpSubject1();
+                if (km1SpDate != null && now.compareTo(km1SpDate)<0) { //科目一处理
+                    long x = km1SpDate.getTime() + oneYearLong;
+                    Date km1oneYear = new Date(x);
+                    userVip.setSpSubject1(km1oneYear);
+                } else {
+                    long x = now.getTime() + oneYearLong;
+                    Date km1oneYear = new Date(x);
+                    userVip.setSpSubject1(km1oneYear);
+                }
+                userVipService.updateById(userVip);
+                this.save(orderInfo);
+            } else {
+                //新增会员信息
+                UserVip uv = new UserVip();
+                uv.setUserId(order.getUserId());
+                uv.setUserName(order.getUserName());
+                long x = now.getTime() + oneYearLong;
+                Date oneYear = new Date(x);
+                uv.setSpSubject1(oneYear);
+                userVipService.save(uv);
+                this.save(orderInfo);
+            }
+        } else if ("科四特训包".equals(order.getGoodsName())) {
+            UserVip userVip = userVipService.getUserVipByUserId(order.getUserId());
+            if (userVip != null) {
+                //修改会员信息
+                Date km4SpDate = userVip.getSpSubject4();
+                if (km4SpDate != null && now.compareTo(km4SpDate)<0) { //科目一处理
+                    long x = km4SpDate.getTime() + oneYearLong;
+                    Date km4oneYear = new Date(x);
+                    userVip.setSpSubject4(km4oneYear);
+                } else {
+                    long x = now.getTime() + oneYearLong;
+                    Date km4oneYear = new Date(x);
+                    userVip.setSpSubject4(km4oneYear);
+                }
+                userVipService.updateById(userVip);
+                this.save(orderInfo);
+            } else {
+                //新增会员信息
+                UserVip uv = new UserVip();
+                uv.setUserId(order.getUserId());
+                uv.setUserName(order.getUserName());
+                long x = now.getTime() + oneYearLong;
+                Date oneYear = new Date(x);
+                uv.setSpSubject4(oneYear);
+                userVipService.save(uv);
+                this.save(orderInfo);
+            }
+        } else if ("科一科四特训包".equals(order.getGoodsName())) {
+            UserVip userVip = userVipService.getUserVipByUserId(order.getUserId());
+            if (userVip != null) {
+                //修改会员信息
+                Date km1Date = userVip.getSpSubject1();
+                Date km4Date = userVip.getSpSubject4();
+                if (km1Date != null && now.compareTo(km1Date)<0) { //科目一处理
+                    long x = km1Date.getTime() + oneYearLong;
+                    Date km1oneYear = new Date(x);
+                    userVip.setSpSubject1(km1oneYear);
+                } else {
+                    long x = now.getTime() + oneYearLong;
+                    Date km1oneYear = new Date(x);
+                    userVip.setSpSubject1(km1oneYear);
+                }
+                if (km4Date != null && now.compareTo(km4Date)<0) { //科目四处理
+                    long x = km4Date.getTime() + oneYearLong;
+                    Date km4oneYear = new Date(x);
+                    userVip.setSpSubject4(km4oneYear);
+                } else {
+                    long x = now.getTime() + oneYearLong;
+                    Date km4oneYear = new Date(x);
+                    userVip.setSpSubject4(km4oneYear);
+                }
+                userVipService.updateById(userVip);
+                this.save(orderInfo);
+            } else {
+                //新增会员信息
+                UserVip uv = new UserVip();
+                uv.setUserId(order.getUserId());
+                uv.setUserName(order.getUserName());
+                long x = now.getTime() + oneYearLong;
+                Date oneYear = new Date(x);
+                uv.setSpSubject1(oneYear);
+                uv.setSpSubject4(oneYear);
+                userVipService.save(uv);
+                this.save(orderInfo);
+            }
         }
         //如果是合作驾校插入消费记录表
         int isShare = schPayConfigService.isSchPayConfigByUser(userInfo);
@@ -966,7 +1095,15 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
         }
     }
 
-
+    /**
+     * 目前这个方法苹果支付用
+     * @param goodsName
+     * @param userId
+     * @param userName
+     * @param outTrandeNo
+     * @param total
+     * @param payType
+     */
     @Override
     public void writeVipDataToDb(String goodsName, Long userId, String userName, String outTrandeNo, Integer total, Integer payType) {
         long oneYearLong = 1000 * 60 * 60 * 24 * 365l;
@@ -1384,6 +1521,98 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
                 userVipService.save(uv);
                 this.save(orderInfo);
             }
+        } else if ("科一特训包".equals(goodsName)) {
+            UserVip userVip = userVipService.getUserVipByUserId(userId);
+            if (userVip != null) {
+                //修改会员信息
+                Date km1SpDate = userVip.getSpSubject1();
+                if (km1SpDate != null && now.compareTo(km1SpDate)<0) { //科目一处理
+                    long x = km1SpDate.getTime() + oneYearLong;
+                    Date km1oneYear = new Date(x);
+                    userVip.setSpSubject1(km1oneYear);
+                } else {
+                    long x = now.getTime() + oneYearLong;
+                    Date km1oneYear = new Date(x);
+                    userVip.setSpSubject1(km1oneYear);
+                }
+                userVipService.updateById(userVip);
+                this.save(orderInfo);
+            } else {
+                //新增会员信息
+                UserVip uv = new UserVip();
+                uv.setUserId(userId);
+                uv.setUserName(userName);
+                long x = now.getTime() + oneYearLong;
+                Date oneYear = new Date(x);
+                uv.setSpSubject1(oneYear);
+                userVipService.save(uv);
+                this.save(orderInfo);
+            }
+        } else if ("科四特训包".equals(goodsName)) {
+            UserVip userVip = userVipService.getUserVipByUserId(userId);
+            if (userVip != null) {
+                //修改会员信息
+                Date km4SpDate = userVip.getSpSubject4();
+                if (km4SpDate != null && now.compareTo(km4SpDate)<0) { //科目一处理
+                    long x = km4SpDate.getTime() + oneYearLong;
+                    Date km4oneYear = new Date(x);
+                    userVip.setSpSubject4(km4oneYear);
+                } else {
+                    long x = now.getTime() + oneYearLong;
+                    Date km4oneYear = new Date(x);
+                    userVip.setSpSubject4(km4oneYear);
+                }
+                userVipService.updateById(userVip);
+                this.save(orderInfo);
+            } else {
+                //新增会员信息
+                UserVip uv = new UserVip();
+                uv.setUserId(userId);
+                uv.setUserName(userName);
+                long x = now.getTime() + oneYearLong;
+                Date oneYear = new Date(x);
+                uv.setSpSubject4(oneYear);
+                userVipService.save(uv);
+                this.save(orderInfo);
+            }
+        } else if ("科一科四特训包".equals(goodsName)) {
+            UserVip userVip = userVipService.getUserVipByUserId(userId);
+            if (userVip != null) {
+                //修改会员信息
+                Date km1Date = userVip.getSpSubject1();
+                Date km4Date = userVip.getSpSubject4();
+                if (km1Date != null && now.compareTo(km1Date)<0) { //科目一处理
+                    long x = km1Date.getTime() + oneYearLong;
+                    Date km1oneYear = new Date(x);
+                    userVip.setSpSubject1(km1oneYear);
+                } else {
+                    long x = now.getTime() + oneYearLong;
+                    Date km1oneYear = new Date(x);
+                    userVip.setSpSubject1(km1oneYear);
+                }
+                if (km4Date != null && now.compareTo(km4Date)<0) { //科目四处理
+                    long x = km4Date.getTime() + oneYearLong;
+                    Date km4oneYear = new Date(x);
+                    userVip.setSpSubject4(km4oneYear);
+                } else {
+                    long x = now.getTime() + oneYearLong;
+                    Date km4oneYear = new Date(x);
+                    userVip.setSpSubject4(km4oneYear);
+                }
+                userVipService.updateById(userVip);
+                this.save(orderInfo);
+            } else {
+                //新增会员信息
+                UserVip uv = new UserVip();
+                uv.setUserId(userId);
+                uv.setUserName(userName);
+                long x = now.getTime() + oneYearLong;
+                Date oneYear = new Date(x);
+                uv.setSpSubject1(oneYear);
+                uv.setSpSubject4(oneYear);
+                userVipService.save(uv);
+                this.save(orderInfo);
+            }
         }
 
     }
@@ -1424,6 +1653,8 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
         return orderInfoMapper.getIncomeList(schoolOrderListDTO);
     }
 
+
+
     /**
      * 退款方法
      * @param order
@@ -1891,4 +2122,124 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
         schActivationService.delSchActivationByUserId(userId);
     }
 
+    @Override
+    public List<OrderInfo> selectOrderInfoByWaitProfit() {
+        List<OrderInfo> orderList = orderInfoMapper.selectOrderInfoByWaitProfit();
+        return orderList;
+    }
+
+
+    @Override
+    @Transactional
+    public boolean wxAddFenZhang(OrderInfo orderInfo) throws Exception {
+        //查询上级
+        String url = "https://api.mch.weixin.qq.com/pay/profitsharingaddreceiver";
+
+        String nonceStr = RandomStringUtils.randomAlphanumeric(32);
+        //获取本店铺信息
+
+        //用于签名
+        Map<String, String> sortMap = new TreeMap<String, String>();
+        sortMap.put("mch_id", wxpayConfig.getMerchantId());
+        sortMap.put("appid", appConfig.getAppid());
+        sortMap.put("nonce_str", nonceStr);
+        sortMap.put("sign_type", "HMAC-SHA256");
+        Map<String, String> receiverMap = new TreeMap<String, String>();
+
+
+        //分给固定的
+        receiverMap.put("type", fzConfig.getType());  //分帐给个人
+        receiverMap.put("account", fzConfig.getAccount());
+        receiverMap.put("relation_type", fzConfig.getRelationType());  //合作合伙
+        receiverMap.put("name", fzConfig.getName());
+
+        ObjectMapper objectMapper = new ObjectMapper();
+        String receiverMapJson = objectMapper.writeValueAsString(receiverMap);
+        sortMap.put("receiver", receiverMapJson);
+
+        WXPayConfig config = new WxPayConfigImpl();
+        String sign = WXPayUtil.generateSignature(sortMap, config.getKey(), WXPayConstants.SignType.HMACSHA256);
+        sortMap.put("sign", sign);
+
+        WXPay pay = new WXPay(config);
+        String xmlStr = pay.requestWithoutCert(url, sortMap, config.getHttpConnectTimeoutMs(), config.getHttpReadTimeoutMs());
+
+        Map<String, String> resMap = XmlUtil.xmlToMap(xmlStr);
+        if (!"SUCCESS".equals(resMap.get("return_code")) || !"SUCCESS".equals(resMap.get("result_code"))) {
+            // throw new CustomException("微信添加分账出错");
+            log.info("微信添加分账信息出错");
+            log.info(resMap.toString());
+            orderInfo.setIsFz(3);
+            this.updateById(orderInfo);
+            return false;
+        } else {
+            return true;
+        }
+
+    }
+
+
+    /**
+     * 调用微信分账
+     *
+     * @return
+     * @throws Exception
+     */
+    @Override
+    @Transactional
+    public boolean wxProfitsharing(OrderInfo orderInfo) throws Exception {
+        String url = "https://api.mch.weixin.qq.com/secapi/pay/profitsharing";
+        String nonceStr = RandomStringUtils.randomAlphanumeric(32);
+        //用于签名
+        Map<String, String> sortMap = new TreeMap<String, String>();
+        sortMap.put("mch_id", wxpayConfig.getMerchantId());
+        sortMap.put("appid", appConfig.getAppid());
+        sortMap.put("nonce_str", nonceStr);
+        sortMap.put("sign_type", "HMAC-SHA256");
+        sortMap.put("transaction_id", orderInfo.getTransactionId());
+        String orderCode = getOrderCode(orderInfo.getUserId()); //商户分账单号
+        sortMap.put("out_order_no", orderCode);
+
+        Map<String, Object> receiverMap = new TreeMap<String, Object>();
+
+        receiverMap.put("type", "MERCHANT_ID");
+        receiverMap.put("account", "1616445600");
+        receiverMap.put("amount", orderInfo.getFzPrice());
+        receiverMap.put("description", "主播视频分账30%");
+
+        ObjectMapper objectMapper = new ObjectMapper();
+        String receiverMapJson = objectMapper.writeValueAsString(receiverMap);
+        sortMap.put("receivers", receiverMapJson);
+
+        WXPayConfig config = new WxPayConfigImpl();
+        String sign = WXPayUtil.generateSignature(sortMap, config.getKey(), WXPayConstants.SignType.HMACSHA256);
+        sortMap.put("sign", sign);
+
+        WXPay pay = new WXPay(config);
+        String xmlStr = pay.requestWithCert(url, sortMap, config.getHttpConnectTimeoutMs(), config.getHttpReadTimeoutMs());
+        Map<String, String> resMap = XmlUtil.xmlToMap(xmlStr);
+        if (!"SUCCESS".equals(resMap.get("return_code")) || !"SUCCESS".equals(resMap.get("result_code"))) {
+            //throw new CustomException("微信分账出错");
+            log.info("微信分账出错");
+            log.info(resMap.toString());
+            orderInfo.setIsFz(3);
+            this.updateById(orderInfo);
+            return false;
+        } else {
+            //更新成交订单表
+            orderInfo.setIsFz(2);
+            this.updateById(orderInfo);
+
+            OrderSplit orderSplit = new OrderSplit();
+            orderSplit.setOutSplitNo(orderCode);
+            orderSplit.setOutTradeNo(orderInfo.getOutTradeNo());
+            orderSplit.setAmount(orderInfo.getFzPrice());
+            orderSplit.setOpenId(fzConfig.getAccount());
+            orderSplit.setOpenIdType(1);
+            orderSplit.setDescription(fzConfig.getDescription());
+            return orderSplitService.save(orderSplit);
+        }
+
+    }
+
 }

+ 33 - 0
jsjp-service/src/main/java/com/miaxis/order/service/impl/OrderSplitServiceImpl.java

@@ -0,0 +1,33 @@
+package com.miaxis.order.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.miaxis.order.domain.OrderSplit;
+import com.miaxis.order.mapper.OrderSplitMapper;
+import com.miaxis.order.service.IOrderSplitService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * 分账记录Service业务层处理
+ *
+ * @author miaxis
+ * @date 2024-01-31
+ */
+@Service
+public class OrderSplitServiceImpl extends ServiceImpl<OrderSplitMapper, OrderSplit> implements IOrderSplitService {
+    @Autowired
+    private OrderSplitMapper orderSplitMapper;
+
+    /**
+     * 查询分账记录列表
+     *
+     * @param orderSplit 分账记录
+     * @return 分账记录
+     */
+    @Override
+    public List<OrderSplit> selectOrderSplitList(OrderSplit orderSplit){
+        return orderSplitMapper.selectOrderSplitList(orderSplit);
+    }
+}

+ 14 - 0
jsjp-service/src/main/java/com/miaxis/userInfo/domain/UserVip.java

@@ -70,5 +70,19 @@ public class UserVip extends BaseBusinessEntity{
     private Date subject4;
 
 
+    /** 科一特训包到时时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @Excel(name = "科一特训包到时时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
+    @TableField(value="sp_subject1",updateStrategy = FieldStrategy.IGNORED)
+    @ApiModelProperty(value = "科一特训包到时时间")
+    private Date spSubject1;
+
+
+    /** 科四特训包到时时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @Excel(name = "科四特训包到时时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
+    @TableField(value="sp_subject4",updateStrategy = FieldStrategy.IGNORED)
+    @ApiModelProperty(value = "科四特训包到时时间")
+    private Date spSubject4;
 
 }

+ 13 - 0
jsjp-service/src/main/java/com/miaxis/userInfo/vo/UserVipTFVO.java

@@ -43,6 +43,11 @@ public class UserVipTFVO implements Serializable {
     @ApiModelProperty(value = "科目4  0未开通 1已开通")
     private Integer subject4Int;
 
+    @ApiModelProperty(value = "科一特训包  0未开通 1已开通")
+    private Integer spSubject1Int;
+
+    @ApiModelProperty(value = "科四特训包  0未开通 1已开通")
+    private Integer spSubject4Int;
 
     @ApiModelProperty(value = "科目1  到期时间")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@@ -61,6 +66,14 @@ public class UserVipTFVO implements Serializable {
     private Date subject4;
 
 
+    @ApiModelProperty(value = "科一特训包  到期时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date spSubject1;
+
+    @ApiModelProperty(value = "科一特训包  到期时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date spSubject4;
+
     @ApiModelProperty(value = "签名")
     private String sign;
 

+ 8 - 0
jsjp-service/src/main/java/com/miaxis/userInfo/vo/UserVipVO.java

@@ -47,6 +47,14 @@ public class UserVipVO implements Serializable {
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date subject4;
 
+    @ApiModelProperty(value = "科一特训包  到期时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date spSubject1;
+
+    @ApiModelProperty(value = "科一特训包  到期时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date spSubject4;
+
     @ApiModelProperty(value = "签名")
     private String sign;
 

+ 8 - 1
jsjp-service/src/main/resources/mapper/order/OrderInfoMapper.xml

@@ -321,6 +321,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         select * from order_info where out_trade_no =#{outTradeNo}
     </select>
 
-
+    <select id="selectOrderInfoByWaitProfit" resultType="com.miaxis.order.domain.OrderInfo">
+        SELECT *
+        FROM order_info
+        WHERE trade_type = 1
+          AND profit_sharing = 1
+          AND success_time <![CDATA[ <= ]]> DATE_SUB(NOW(), INTERVAL 10 MINUTE)
+        ORDER BY success_time;
+    </select>
 
 </mapper>

+ 38 - 0
jsjp-service/src/main/resources/mapper/order/OrderSplitMapper.xml

@@ -0,0 +1,38 @@
+<?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="com.miaxis.order.mapper.OrderSplitMapper">
+
+    <resultMap type="OrderSplit" id="OrderSplitResult">
+        <result property="id"    column="id"    />
+        <result property="transactionId"    column="transaction_id"    />
+        <result property="outSplitNo"    column="out_split_no"    />
+        <result property="outTradeNo"    column="out_trade_no"    />
+        <result property="amount"    column="amount"    />
+        <result property="openId"    column="open_id"    />
+        <result property="description"    column="description"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="updateTime"    column="update_time"    />
+    </resultMap>
+
+    <sql id="selectOrderSplitVo">
+        select * from order_split
+    </sql>
+
+
+    <select id="selectOrderSplitList" parameterType="com.miaxis.order.domain.OrderSplit" resultType="com.miaxis.order.domain.OrderSplit">
+        select * from order_split
+        <where>
+            <if test="transactionId != null  and transactionId != ''"> and transaction_id = #{transactionId}</if>
+            <if test="outSplitNo != null  and outSplitNo != ''"> and out_split_no = #{outSplitNo}</if>
+            <if test="outTradeNo != null  and outTradeNo != ''"> and out_trade_no = #{outTradeNo}</if>
+            <if test="amount != null ">and amount = #{amount}</if>
+            <if test="shopId != null ">and shopId = #{shopId}</if>
+            <if test="openId != null  and openId != ''"> and open_id = #{openId}</if>
+            <if test="description != null  and description != ''"> and description = #{description}</if>
+        </where>
+    </select>
+
+
+</mapper>