浏览代码

Merge remote-tracking branch 'origin/master'

Joburgess 5 年之前
父节点
当前提交
660f9e7abc
共有 42 个文件被更改,包括 1906 次插入656 次删除
  1. 44 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentPaymentRouteOrderDao.java
  2. 7 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/SysPaymentConfigDao.java
  3. 58 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/AmountChannelDto.java
  4. 69 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/RouteScaleDto.java
  5. 73 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentPaymentRouteOrderDto.java
  6. 94 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/StudentPaymentRouteOrder.java
  7. 58 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/SysPaymentConfig.java
  8. 8 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/GroupType.java
  9. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/CoursesGroupService.java
  10. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/MusicGroupService.java
  11. 6 0
      mec-biz/src/main/java/com/ym/mec/biz/service/NotifyCallback.java
  12. 18 0
      mec-biz/src/main/java/com/ym/mec/biz/service/PayService.java
  13. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/PracticeGroupService.java
  14. 8 0
      mec-biz/src/main/java/com/ym/mec/biz/service/StudentPaymentOrderService.java
  15. 33 0
      mec-biz/src/main/java/com/ym/mec/biz/service/StudentPaymentRouteOrderService.java
  16. 25 0
      mec-biz/src/main/java/com/ym/mec/biz/service/SysPaymentConfigService.java
  17. 147 145
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CoursesGroupServiceImpl.java
  18. 2 7
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/DegreeRegistrationServiceImpl.java
  19. 52 58
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java
  20. 315 53
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/PayServiceImpl.java
  21. 246 244
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/PracticeGroupServiceImpl.java
  22. 31 10
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentOrderServiceImpl.java
  23. 115 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentRouteOrderServiceImpl.java
  24. 2 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRechargeServiceImpl.java
  25. 4 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRegistrationServiceImpl.java
  26. 14 16
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRepairServiceImpl.java
  27. 13 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysPaymentConfigServiceImpl.java
  28. 12 4
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TenantPaymentOrderServiceImpl.java
  29. 16 13
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java
  30. 7 4
      mec-biz/src/main/resources/config/mybatis/StudentManageDao.xml
  31. 2 2
      mec-biz/src/main/resources/config/mybatis/StudentPaymentOrderMapper.xml
  32. 186 0
      mec-biz/src/main/resources/config/mybatis/StudentPaymentRouteOrderMapper.xml
  33. 87 73
      mec-biz/src/main/resources/config/mybatis/SysPaymentConfigMapper.xml
  34. 1 1
      mec-student/src/main/java/com/ym/mec/student/controller/CourseGroupController.java
  35. 1 1
      mec-student/src/main/java/com/ym/mec/student/controller/PracticeGroupController.java
  36. 3 3
      mec-student/src/main/java/com/ym/mec/student/controller/SporadicChargeInfoController.java
  37. 41 10
      mec-student/src/main/java/com/ym/mec/student/controller/StudentOrderController.java
  38. 1 4
      mec-thirdparty/src/main/java/com/ym/mec/thirdparty/adapay/Payment.java
  39. 2 2
      mec-thirdparty/src/main/java/com/ym/mec/thirdparty/yqpay/YqPayUtil.java
  40. 10 0
      mec-web/src/main/java/com/ym/mec/web/controller/StudentPaymentOrderController.java
  41. 83 0
      mec-web/src/main/java/com/ym/mec/web/controller/StudentPaymentRouteOrderController.java
  42. 9 0
      mec-web/src/main/java/com/ym/mec/web/controller/SysPaymentConfigController.java

+ 44 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentPaymentRouteOrderDao.java

@@ -0,0 +1,44 @@
+package com.ym.mec.biz.dal.dao;
+
+
+import com.ym.mec.biz.dal.dto.StudentPaymentRouteOrderDto;
+import com.ym.mec.biz.dal.entity.StudentPaymentRouteOrder;
+import com.ym.mec.biz.dal.enums.PaymentChannelEnum;
+import com.ym.mec.common.dal.BaseDAO;
+import org.apache.ibatis.annotations.Param;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+public interface StudentPaymentRouteOrderDao extends BaseDAO<Long, StudentPaymentRouteOrder> {
+
+    List<StudentPaymentRouteOrderDto> queryPageOrder(Map<String, Object> params);
+
+    StudentPaymentRouteOrderDto getOrderMoneyAmount(Map<String, Object> params);
+
+    /**
+     * 统计充值金额
+     *
+     * @param params
+     * @return
+     */
+    BigDecimal getChargeAmount(Map<String, Object> params);
+
+    int batchAdd(@Param("routeOrders") List<StudentPaymentRouteOrder> routeOrders);
+
+    List<StudentPaymentRouteOrder> getRouteOrders(@Param("orderNo") String orderNo);
+
+    /**
+     * 获取分部分润金额
+     *
+     * @param routeOrganId
+     * @param paymentChannelEnumList
+     * @return
+     */
+    BigDecimal getRouteOrderAmount(@Param("routeOrganId") Integer routeOrganId,
+                                   @Param("paymentChannelEnumList") List<PaymentChannelEnum> paymentChannelEnumList,
+                                   @Param("startTime") Date startTime
+    );
+}

+ 7 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/SysPaymentConfigDao.java

@@ -1,9 +1,16 @@
 package com.ym.mec.biz.dal.dao;
 
 import com.ym.mec.biz.dal.entity.SysPaymentConfig;
+import com.ym.mec.biz.dal.enums.PaymentChannelEnum;
 import com.ym.mec.common.dal.BaseDAO;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.List;
+
 public interface SysPaymentConfigDao extends BaseDAO<Integer, SysPaymentConfig> {
     SysPaymentConfig findPaymentConfigByOrganId(@Param("organId") Integer organId);
+
+    List<SysPaymentConfig> findPaymentConfigByOrganIds(@Param("organIds") List<Integer> organIds);
+
+    List<SysPaymentConfig> getPaymentConfigs(@Param("payType") PaymentChannelEnum payType);
 }

+ 58 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/AmountChannelDto.java

@@ -0,0 +1,58 @@
+package com.ym.mec.biz.dal.dto;
+
+import java.math.BigDecimal;
+
+public class AmountChannelDto {
+
+    private Integer organId;
+
+    private Integer routeOrganId;
+
+    private String type;
+
+    private BigDecimal amount;
+
+    private String feeFlag;
+
+    public Integer getOrganId() {
+        return organId;
+    }
+
+    public void setOrganId(Integer organId) {
+        this.organId = organId;
+    }
+
+
+    public Integer getRouteOrganId() {
+        return routeOrganId;
+    }
+
+    public void setRouteOrganId(Integer routeOrganId) {
+        this.routeOrganId = routeOrganId;
+    }
+
+    public BigDecimal getAmount() {
+        return amount;
+    }
+
+    public void setAmount(BigDecimal amount) {
+        this.amount = amount;
+    }
+
+    public String getFeeFlag() {
+        return feeFlag;
+    }
+
+    public void setFeeFlag(String feeFlag) {
+        this.feeFlag = feeFlag;
+    }
+
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+}

+ 69 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/RouteScaleDto.java

@@ -0,0 +1,69 @@
+package com.ym.mec.biz.dal.dto;
+
+import com.ym.mec.biz.dal.enums.PaymentChannelEnum;
+
+import java.math.BigDecimal;
+
+public class RouteScaleDto {
+
+    private Integer organId;
+
+    private PaymentChannelEnum payType;
+
+    private Integer scale;
+
+    private String merNo;
+
+    private BigDecimal amount = BigDecimal.ONE;
+
+    private String feeFlag;
+
+    public Integer getOrganId() {
+        return organId;
+    }
+
+    public void setOrganId(Integer organId) {
+        this.organId = organId;
+    }
+
+    public String getMerNo() {
+        return merNo;
+    }
+
+    public void setMerNo(String merNo) {
+        this.merNo = merNo;
+    }
+
+    public BigDecimal getAmount() {
+        return amount;
+    }
+
+    public void setAmount(BigDecimal amount) {
+        this.amount = amount;
+    }
+
+    public String getFeeFlag() {
+        return feeFlag;
+    }
+
+    public void setFeeFlag(String feeFlag) {
+        this.feeFlag = feeFlag;
+    }
+
+
+    public Integer getScale() {
+        return scale;
+    }
+
+    public void setScale(Integer scale) {
+        this.scale = scale;
+    }
+
+    public PaymentChannelEnum getPayType() {
+        return payType;
+    }
+
+    public void setPayType(PaymentChannelEnum payType) {
+        this.payType = payType;
+    }
+}

+ 73 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentPaymentRouteOrderDto.java

@@ -0,0 +1,73 @@
+package com.ym.mec.biz.dal.dto;
+
+import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
+
+import java.math.BigDecimal;
+
+public class StudentPaymentRouteOrderDto extends StudentPaymentOrder {
+
+    /**
+     * 分配分部id
+     */
+    private Integer routeOrganId;
+
+    /**
+     * 分润金额
+     */
+    private BigDecimal routeAmount;
+
+    /**
+     * 分润余额
+     */
+    private BigDecimal routeBalanceAmount;
+
+    /**
+     * 渠道收款账户
+     */
+    private String merNo;
+
+    /**
+     * 备注
+     */
+    private String feeFlag;
+
+    public Integer getRouteOrganId() {
+        return routeOrganId;
+    }
+
+    public void setRouteOrganId(Integer routingOrganId) {
+        this.routeOrganId = routingOrganId;
+    }
+
+    public BigDecimal getRouteAmount() {
+        return routeAmount;
+    }
+
+    public void setRouteAmount(BigDecimal routeAmount) {
+        this.routeAmount = routeAmount;
+    }
+
+    public String getMerNo() {
+        return merNo;
+    }
+
+    public void setMerNo(String merNo) {
+        this.merNo = merNo;
+    }
+
+    public String getFeeFlag() {
+        return feeFlag;
+    }
+
+    public void setFeeFlag(String feeFlag) {
+        this.feeFlag = feeFlag;
+    }
+
+    public BigDecimal getRouteBalanceAmount() {
+        return routeBalanceAmount;
+    }
+
+    public void setRouteBalanceAmount(BigDecimal routeBalanceAmount) {
+        this.routeBalanceAmount = routeBalanceAmount;
+    }
+}

+ 94 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/StudentPaymentRouteOrder.java

@@ -0,0 +1,94 @@
+package com.ym.mec.biz.dal.entity;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+public class StudentPaymentRouteOrder {
+    private Long id;
+
+    /**
+    * 分配分部id
+    */
+    private Integer routeOrganId;
+
+    /**
+    * 分润金额
+    */
+    private BigDecimal routeAmount;
+
+    /**
+    * 分润余额
+    */
+    private BigDecimal routeBalanceAmount;
+
+    /**
+    * 渠道收款账户
+    */
+    private String merNo;
+
+    /**
+     * 原始订单号
+     */
+    private String orderNo;
+
+    /**
+    * 是否承担手续费Y-是 N-否
+    */
+    private String feeFlag;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Integer getRouteOrganId() {
+        return routeOrganId;
+    }
+
+    public void setRouteOrganId(Integer routeOrganId) {
+        this.routeOrganId = routeOrganId;
+    }
+
+    public BigDecimal getRouteAmount() {
+        return routeAmount;
+    }
+
+    public void setRouteAmount(BigDecimal routeAmount) {
+        this.routeAmount = routeAmount;
+    }
+
+    public String getMerNo() {
+        return merNo;
+    }
+
+    public void setMerNo(String merNo) {
+        this.merNo = merNo;
+    }
+
+    public String getFeeFlag() {
+        return feeFlag;
+    }
+
+    public void setFeeFlag(String feeFlag) {
+        this.feeFlag = feeFlag;
+    }
+
+    public String getOrderNo() {
+        return orderNo;
+    }
+
+    public void setOrderNo(String orderNo) {
+        this.orderNo = orderNo;
+    }
+
+    public BigDecimal getRouteBalanceAmount() {
+        return routeBalanceAmount;
+    }
+
+    public void setRouteBalanceAmount(BigDecimal routeBalanceAmount) {
+        this.routeBalanceAmount = routeBalanceAmount;
+    }
+}

+ 58 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/SysPaymentConfig.java

@@ -1,5 +1,6 @@
 package com.ym.mec.biz.dal.entity;
 
+import com.ym.mec.biz.dal.enums.PaymentChannelEnum;
 import io.swagger.annotations.ApiModelProperty;
 import java.util.Date;
 
@@ -11,12 +12,37 @@ public class SysPaymentConfig {
     private Integer id;
 
     /**
+     * 支付渠道
+     */
+    @ApiModelProperty(value = "支付渠道")
+    private PaymentChannelEnum payType;
+
+    /**
+     * 双乾商户号
+     */
+    @ApiModelProperty(value = "双乾商户号")
+    private String yqMerNo;
+
+
+    /**
+     * 双乾商户号
+     */
+    @ApiModelProperty(value = "汇付商户号")
+    private String hfMerNo;
+
+    /**
      * type
      */
     @ApiModelProperty(value = "type(1-比例 2-类型)")
     private Integer type;
 
     /**
+     * 分润规则
+     */
+    @ApiModelProperty(value = "分润规则")
+    private String routeScale;
+
+    /**
      * 分部id
      */
     @ApiModelProperty(value = "分部id")
@@ -86,6 +112,14 @@ public class SysPaymentConfig {
         this.id = id;
     }
 
+    public PaymentChannelEnum getPayType() {
+        return payType;
+    }
+
+    public void setPayType(PaymentChannelEnum payType) {
+        this.payType = payType;
+    }
+
     public Integer getOrganId() {
         return organId;
     }
@@ -173,5 +207,29 @@ public class SysPaymentConfig {
     public void setType(Integer type) {
         this.type = type;
     }
+
+    public String getYqMerNo() {
+        return yqMerNo;
+    }
+
+    public void setYqMerNo(String yqMerNo) {
+        this.yqMerNo = yqMerNo;
+    }
+
+    public String getHfMerNo() {
+        return hfMerNo;
+    }
+
+    public void setHfMerNo(String hfMerNo) {
+        this.hfMerNo = hfMerNo;
+    }
+
+    public String getRouteScale() {
+        return routeScale;
+    }
+
+    public void setRouteScale(String routeScale) {
+        this.routeScale = routeScale;
+    }
 }
 

+ 8 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/GroupType.java

@@ -3,7 +3,14 @@ package com.ym.mec.biz.dal.enums;
 import com.ym.mec.common.enums.BaseEnum;
 
 public enum GroupType implements BaseEnum<String, GroupType> {
-	MUSIC("乐团课"), VIP("VIP课"), DEMO("试听课"), SPORADIC("零星收费"), PRACTICE("网管课"), COMM("对外课程"),REPAIR("乐器维修");
+	MUSIC("乐团课"),
+	VIP("VIP课"),
+	DEMO("试听课"),
+	SPORADIC("零星收费"),
+	PRACTICE("网管课"),
+	COMM("对外课程"),
+	REPAIR("乐器维修"),
+	OUTORDER("外部订单");
 
 	private String desc;
 

+ 1 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/CoursesGroupService.java

@@ -76,7 +76,7 @@ public interface CoursesGroupService extends BaseService<Long, CoursesGroup> {
      * @param courseGroupId:
      * @return void
      */
-    HttpResponseResult buyCourseGroup(Integer userId, Long courseGroupId, boolean isUseBalancePayment);
+    HttpResponseResult buyCourseGroup(Integer userId, Long courseGroupId, boolean isUseBalancePayment) throws Exception;
 
     HttpResponseResult orderCallback(StudentPaymentOrder studentPaymentOrder);
 

+ 1 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/MusicGroupService.java

@@ -137,7 +137,7 @@ public interface MusicGroupService extends BaseService<String, MusicGroup> {
 	 * @param isUseBalancePayment 是否使用余额付款
 	 * @return
 	 */
-	Map renew(String musicGroupId, Integer userId, boolean isUseBalancePayment);
+	Map renew(String musicGroupId, Integer userId, boolean isUseBalancePayment) throws Exception;
 
 	/**
 	 * 学生支付订单

+ 6 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/NotifyCallback.java

@@ -2,7 +2,9 @@ package com.ym.mec.biz.service;
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
+import com.huifu.adapay.Adapay;
 import com.huifu.adapay.notify.MQTTCallbackHandler;
+import com.ym.mec.biz.dal.dao.SysConfigDao;
 import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
 import com.ym.mec.biz.dal.entity.TenantPaymentOrder;
 import com.ym.mec.biz.dal.enums.DealStatusEnum;
@@ -23,12 +25,16 @@ public class NotifyCallback implements MQTTCallbackHandler {
     private StudentPaymentOrderService studentPaymentOrderService;
     @Autowired
     private TenantPaymentOrderService tenantPaymentOrderService;
+    @Autowired
+    private SysConfigDao sysConfigDao;
 
     private static NotifyCallback notifyCallback;
 
     @PostConstruct
     public void init() {
         notifyCallback = this;
+        String baseUrl = notifyCallback.sysConfigDao.findConfigValue(SysConfigService.BASE_API_URL);
+        Adapay.setDeviceID(baseUrl);
     }
 
     /**

+ 18 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/PayService.java

@@ -58,6 +58,24 @@ public interface PayService {
      */
     Map<String, Object> getPayMap(BigDecimal amount, String orderNo, String notifyUrl, String returnUrl, String orderSubject, String orderBody, Integer userId,Map<String,BigDecimal> fee,Integer organId,String receiver) throws Exception;
 
+
+    /**
+     *
+     * @param amount 支付金额
+     * @param orderNo 订单编号
+     * @param notifyUrl 回调地址
+     * @param returnUrl 返回地址
+     * @param orderSubject 订单主题
+     * @param orderBody 订单内容
+     * @param organId 分部编号
+     * @param receiver 指定接收
+     * @return
+     * @throws Exception
+     */
+    Map<String, Object> getPayMap(BigDecimal amount,BigDecimal balanceAmount, String orderNo, String notifyUrl, String returnUrl, String orderSubject, String orderBody,Integer organId,String receiver) throws Exception;
+
+
+
     Map query(String orderNo) throws Exception;
 
 }

+ 1 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/PracticeGroupService.java

@@ -227,7 +227,7 @@ public interface PracticeGroupService extends BaseService<Long, PracticeGroup> {
 	 * @param practiceGroupId:
 	 * @return com.ym.mec.common.entity.HttpResponseResult
 	 */
-	HttpResponseResult repay(Integer userId,Integer practiceGroupId, boolean useBalancePayment);
+	HttpResponseResult repay(Integer userId,Integer practiceGroupId, boolean useBalancePayment) throws Exception;
 
 	/**
 	 * @describe 更新历史陪练课程组状态

+ 8 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/StudentPaymentOrderService.java

@@ -107,4 +107,12 @@ public interface StudentPaymentOrderService extends BaseService<Long, StudentPay
 
 	PageInfoOrder<StudentPaymentOrder> OrderQueryPage(StudentPaymentOrderQueryInfo queryInfo);
 
+
+	/**
+	 * 获取订单第三方状态
+	 * @param id
+	 * @return
+	 */
+	Boolean getOrderStatus(Long id) throws Exception;
+
 }

+ 33 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/StudentPaymentRouteOrderService.java

@@ -0,0 +1,33 @@
+package com.ym.mec.biz.service;
+
+
+import com.ym.mec.biz.dal.dto.PageInfoOrder;
+import com.ym.mec.biz.dal.dto.StudentPaymentRouteOrderDto;
+import com.ym.mec.biz.dal.entity.StudentPaymentRouteOrder;
+import com.ym.mec.biz.dal.page.StudentPaymentOrderQueryInfo;
+import com.ym.mec.common.service.BaseService;
+
+import java.math.BigDecimal;
+
+
+public interface StudentPaymentRouteOrderService extends BaseService<Long, StudentPaymentRouteOrder> {
+
+	PageInfoOrder<StudentPaymentRouteOrderDto> OrderQueryPage(StudentPaymentOrderQueryInfo queryInfo);
+
+	/**
+	 * 添加外部订单
+	 * @param studentPaymentRouteOrderDto
+	 * @return
+	 */
+	StudentPaymentRouteOrderDto addOutOrder(StudentPaymentRouteOrderDto studentPaymentRouteOrderDto);
+
+	/**
+	 * 添加分润订单
+	 * @param orderNo
+	 * @param routeOrganId
+	 * @param routeAmount
+	 * @return
+	 */
+	StudentPaymentRouteOrder addRouteOrder(String orderNo,Integer routeOrganId, BigDecimal routeAmount);
+
+}

+ 25 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/SysPaymentConfigService.java

@@ -1,10 +1,35 @@
 package com.ym.mec.biz.service;
 
 import com.ym.mec.biz.dal.entity.SysPaymentConfig;
+import com.ym.mec.biz.dal.enums.PaymentChannelEnum;
 import com.ym.mec.common.service.BaseService;
 
+import java.util.List;
+
 public interface SysPaymentConfigService extends BaseService<Integer, SysPaymentConfig> {
 
+    /**
+     * 根据分部id获取配置
+     * @param organId
+     * @return
+     */
     SysPaymentConfig findPaymentConfigByOrganId(Integer organId);
 
+    /**
+     * 根据分部ids获取配置
+     * @param organIds
+     * @return
+     */
+    List<SysPaymentConfig> findPaymentConfigByOrganIds(List<Integer> organIds);
+
+
+    /**
+     * 分解渠道类型获取配置
+     * @param payType
+     * @return
+     */
+    List<SysPaymentConfig> getPaymentConfigs(PaymentChannelEnum payType);
+
+
+
 }

+ 147 - 145
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CoursesGroupServiceImpl.java

@@ -89,6 +89,8 @@ public class CoursesGroupServiceImpl extends BaseServiceImpl<Long, CoursesGroup>
     private SysMessageService sysMessageService;
     @Autowired
     private GroupDao groupDao;
+    @Autowired
+    private StudentPaymentRouteOrderService studentPaymentRouteOrderService;
 
     private static final Logger LOGGER = LoggerFactory
             .getLogger(PracticeGroupService.class);
@@ -103,32 +105,32 @@ public class CoursesGroupServiceImpl extends BaseServiceImpl<Long, CoursesGroup>
     public HttpResponseResult createCourseGroup(CourseGroupCreateDto courseGroupCreateInfo) {
         CoursesGroup courseGroup = courseGroupCreateInfo.getCoursesGroup();
         CourseGenerateDto courseCycleInfo = courseGroupCreateInfo.getCourseCycleInfo();
-        if(Objects.isNull(courseGroup.getName())|| StringUtils.isBlank(courseGroup.getName())){
+        if (Objects.isNull(courseGroup.getName()) || StringUtils.isBlank(courseGroup.getName())) {
             throw new BizException("请填写课程名称");
         }
-        if(Objects.isNull(courseGroup.getSubjectId())){
+        if (Objects.isNull(courseGroup.getSubjectId())) {
             throw new BizException("请选择科目");
         }
-        if(Objects.isNull(courseGroup.getMaxStudentNum())){
+        if (Objects.isNull(courseGroup.getMaxStudentNum())) {
             throw new BizException("请填写班级人数");
         }
-        if(Objects.isNull(courseCycleInfo.getSingleClassMinutes())){
+        if (Objects.isNull(courseCycleInfo.getSingleClassMinutes())) {
             throw new BizException("请填写课程时长");
         }
-        if(Objects.isNull(courseCycleInfo.getCourseCreateStartTime())){
+        if (Objects.isNull(courseCycleInfo.getCourseCreateStartTime())) {
             throw new BizException("请填写课程开始时间");
         }
-        if(Objects.isNull(courseCycleInfo.getCourseCount())){
+        if (Objects.isNull(courseCycleInfo.getCourseCount())) {
             throw new BizException("请填写课程数量");
         }
 
         studentDao.lockUser(courseGroup.getTeacherId());
 
         //总课程时长
-        Integer totalCourseTime=courseCycleInfo.getCourseCount()*courseCycleInfo.getSingleClassMinutes();
+        Integer totalCourseTime = courseCycleInfo.getCourseCount() * courseCycleInfo.getSingleClassMinutes();
 
         try {
-            sysTenantAccountService.update(courseGroup.getTeacherId(), -totalCourseTime, "", SysTenantAccountDetail.TransType.CONSUME, "",BigDecimal.ZERO,"课程组创建");
+            sysTenantAccountService.update(courseGroup.getTeacherId(), -totalCourseTime, "", SysTenantAccountDetail.TransType.CONSUME, "", BigDecimal.ZERO, "课程组创建");
         } catch (Exception e) {
             TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
             return BaseController.failed("余额不足,请充值。");
@@ -136,11 +138,11 @@ public class CoursesGroupServiceImpl extends BaseServiceImpl<Long, CoursesGroup>
 
         Teacher teacher = teacherDao.get(courseGroup.getTeacherId());
 
-        Date now=new Date();
+        Date now = new Date();
         courseGroup.setSingleClassMinutes(courseCycleInfo.getSingleClassMinutes());
         courseGroup.setStatus(GroupStatusEnum.NORMAL);
         courseGroup.setOrganId(teacher.getTeacherOrganId());
-        List<CourseSchedule> newCourses = courseScheduleService.createCourses(courseGroupCreateInfo.getCourseCycleInfo(),true);
+        List<CourseSchedule> newCourses = courseScheduleService.createCourses(courseGroupCreateInfo.getCourseCycleInfo(), true);
         for (CourseSchedule newCourse : newCourses) {
             newCourse.setTeachMode(TeachModeEnum.ONLINE);
             newCourse.setGroupType(GroupType.COMM);
@@ -153,33 +155,33 @@ public class CoursesGroupServiceImpl extends BaseServiceImpl<Long, CoursesGroup>
             newCourse.setOrganId(courseGroup.getOrganId());
         }
         try {
-            courseScheduleService.checkNewCourseSchedules(newCourses,false);
+            courseScheduleService.checkNewCourseSchedules(newCourses, false);
         } catch (Exception e) {
             TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
             String errMessage;
-            String courseName=e.getMessage().substring(e.getMessage().indexOf(")-")+2);
-            courseName = courseName.substring(0,courseName.indexOf("("));
+            String courseName = e.getMessage().substring(e.getMessage().indexOf(")-") + 2);
+            courseName = courseName.substring(0, courseName.indexOf("("));
             String courseTime = e.getMessage().substring(e.getMessage().indexOf("在") + 1);
             courseTime = courseTime.substring(0, courseTime.indexOf("至"));
-            errMessage="现在课程:";
-            errMessage+=courseName;
-            errMessage+="<br/>冲突时间:";
-            errMessage+=courseTime;
+            errMessage = "现在课程:";
+            errMessage += courseName;
+            errMessage += "<br/>冲突时间:";
+            errMessage += courseTime;
             return BaseController.failed(HttpStatus.FOUND, errMessage);
         }
 
         CourseSchedule firstCourseSchedule = newCourses.stream().min(Comparator.comparing(CourseSchedule::getStartClassTime)).get();
-        if(firstCourseSchedule.getStartClassTime().before(now)){
+        if (firstCourseSchedule.getStartClassTime().before(now)) {
             throw new BizException("开课时间不可小于当前时间");
         }
         CourseSchedule latestCourseSchedule = newCourses.stream().max(Comparator.comparing(CourseSchedule::getEndClassTime)).get();
         courseGroup.setCoursesStartDate(firstCourseSchedule.getStartClassTime());
         courseGroup.setCoursesEndDate(latestCourseSchedule.getEndClassTime());
 
-        JSONArray courseTimesArray=new JSONArray();
+        JSONArray courseTimesArray = new JSONArray();
         for (CourseTimeDto courseTime : courseCycleInfo.getCourseTimes()) {
-            JSONObject courseTimeObject=new JSONObject();
-            courseTimeObject.put(String.valueOf(courseTime.getDayOfWeek()),courseTime.getStartClassTime());
+            JSONObject courseTimeObject = new JSONObject();
+            courseTimeObject.put(String.valueOf(courseTime.getDayOfWeek()), courseTime.getStartClassTime());
             courseTimesArray.add(courseTimeObject);
         }
 
@@ -252,7 +254,7 @@ public class CoursesGroupServiceImpl extends BaseServiceImpl<Long, CoursesGroup>
 
     @Override
     public PageInfo findTeacherCourseGroups(Integer teacherId, GroupCourseScheduleQueryInfo queryInfo) {
-        if(Objects.isNull(teacherId)){
+        if (Objects.isNull(teacherId)) {
             throw new BizException("请指定老师");
         }
 
@@ -261,7 +263,7 @@ public class CoursesGroupServiceImpl extends BaseServiceImpl<Long, CoursesGroup>
         MapUtil.populateMap(params, queryInfo);
         params.put("teacherId", teacherId);
 
-        List<CourseGroupTeacherCardDto> groupCards=new ArrayList<>();
+        List<CourseGroupTeacherCardDto> groupCards = new ArrayList<>();
         int count = coursesGroupDao.countTeacherGroups(params);
         if (count > 0) {
             pageInfo.setTotal(count);
@@ -283,9 +285,9 @@ public class CoursesGroupServiceImpl extends BaseServiceImpl<Long, CoursesGroup>
             List<GroupValidDateDto> groupsValidate = courseScheduleDao.findGroupsValidate(groupIds, GroupType.COMM);
             Map<String, GroupValidDateDto> groupValidateMap = groupsValidate.stream().collect(Collectors.toMap(GroupValidDateDto::getGroupId, e -> e));
 
-            groupCards=new ArrayList<>();
+            groupCards = new ArrayList<>();
             for (CoursesGroup teacherCourseGroup : teacherCourseGroups) {
-                CourseGroupTeacherCardDto groupCard=new CourseGroupTeacherCardDto();
+                CourseGroupTeacherCardDto groupCard = new CourseGroupTeacherCardDto();
                 groupCard.setId(teacherCourseGroup.getId());
                 groupCard.setGroupType(GroupType.COMM);
                 groupCard.setName(teacherCourseGroup.getName());
@@ -295,20 +297,20 @@ public class CoursesGroupServiceImpl extends BaseServiceImpl<Long, CoursesGroup>
                 groupCard.setSubjectName(idSubjectMap.get(teacherCourseGroup.getSubjectId()).getName());
                 GroupCourseTimesDto groupCourseTimesInfo = groupCourseTimesInfoMap.get(String.valueOf(teacherCourseGroup.getId()));
                 GroupValidDateDto groupValidDate = groupValidateMap.get(String.valueOf(teacherCourseGroup.getId()));
-                if(Objects.nonNull(groupValidDate)){
+                if (Objects.nonNull(groupValidDate)) {
                     groupCard.setCoursesStartDate(groupValidDate.getStartDate());
                     groupCard.setCoursesEndDate(groupValidDate.getEndDate());
                 }
                 groupCard.setClassGroupId(groupCourseTimesInfo.getClassGroupId());
                 groupCard.setTotalCourseTimes(groupCourseTimesInfo.getTotalCourseTimes());
                 groupCard.setSurplusClassTimes(groupCourseTimesInfo.getSurplusClassTimes());
-                groupCard.setCurrentClassTimes(groupCard.getTotalCourseTimes()-groupCard.getSurplusClassTimes());
+                groupCard.setCurrentClassTimes(groupCard.getTotalCourseTimes() - groupCard.getSurplusClassTimes());
                 List<ClassGroupStudentMapper> groupStudents = groupStudentsMap.get(String.valueOf(teacherCourseGroup.getId()));
-                if(!CollectionUtils.isEmpty(groupStudents)){
+                if (!CollectionUtils.isEmpty(groupStudents)) {
                     List<String> userNames = groupStudents.stream().map(ClassGroupStudentMapper::getUserName).collect(Collectors.toList());
-                    groupCard.setStudentNames(StringUtils.join(userNames,","));
-                    groupCard.setStudentIsFull(groupStudents.size()>=teacherCourseGroup.getMaxStudentNum()?1:0);
-                }else{
+                    groupCard.setStudentNames(StringUtils.join(userNames, ","));
+                    groupCard.setStudentIsFull(groupStudents.size() >= teacherCourseGroup.getMaxStudentNum() ? 1 : 0);
+                } else {
                     groupCard.setStudentIsFull(3);
                 }
                 groupCards.add(groupCard);
@@ -324,7 +326,7 @@ public class CoursesGroupServiceImpl extends BaseServiceImpl<Long, CoursesGroup>
         Map<String, Object> params = new HashMap<>();
         MapUtil.populateMap(params, queryInfo);
 
-        List<CourseGroupExtendDto> teacherCourseGroups=new ArrayList<>();
+        List<CourseGroupExtendDto> teacherCourseGroups = new ArrayList<>();
         int count = coursesGroupDao.countTeacherGroupsWithWeb(params);
         if (count > 0) {
             pageInfo.setTotal(count);
@@ -335,29 +337,29 @@ public class CoursesGroupServiceImpl extends BaseServiceImpl<Long, CoursesGroup>
             Map<String, Integer> groupStudentNumMap = groupStudentNums.stream().collect(Collectors.toMap(GroupBaseCourseInfoDto::getId, GroupBaseCourseInfoDto::getStudentNum));
 
             List<GroupBaseCourseInfoDto> groupTotalClassesTimes = groupDao.countGroupTotalClassesTimes(groupIds, GroupType.COMM);
-            Map<String, GroupBaseCourseInfoDto> groupBaseCourseInfoMap = groupTotalClassesTimes.stream().collect(Collectors.toMap(GroupBaseCourseInfoDto::getId, e->e));
+            Map<String, GroupBaseCourseInfoDto> groupBaseCourseInfoMap = groupTotalClassesTimes.stream().collect(Collectors.toMap(GroupBaseCourseInfoDto::getId, e -> e));
 
             List<GroupBaseCourseInfoDto> groupFinishedClassesTimes = groupDao.countGroupFinishedClassesTimes(groupIds, GroupType.COMM);
-            Map<String, Integer> groupFinishedClassesTimesMap = groupFinishedClassesTimes.stream().collect(Collectors.toMap(GroupBaseCourseInfoDto::getId, e->e.getCurrentClassTimes()));
+            Map<String, Integer> groupFinishedClassesTimesMap = groupFinishedClassesTimes.stream().collect(Collectors.toMap(GroupBaseCourseInfoDto::getId, e -> e.getCurrentClassTimes()));
 
             for (CourseGroupExtendDto teacherCourseGroup : teacherCourseGroups) {
-                if(Objects.nonNull(groupStudentNumMap.get(teacherCourseGroup.getId().toString()))) {
+                if (Objects.nonNull(groupStudentNumMap.get(teacherCourseGroup.getId().toString()))) {
                     teacherCourseGroup.setStudentNum(groupStudentNumMap.get(teacherCourseGroup.getId().toString()).intValue());
                 }
                 GroupBaseCourseInfoDto groupBaseCourseInfo = groupBaseCourseInfoMap.get(teacherCourseGroup.getId().toString());
-                if(Objects.nonNull(groupBaseCourseInfo)){
+                if (Objects.nonNull(groupBaseCourseInfo)) {
                     teacherCourseGroup.setTotalClassTimes(groupBaseCourseInfo.getTotalClassTimes());
                     teacherCourseGroup.setFirstClassesStartTime(groupBaseCourseInfo.getFirstClassesStartTime());
                     teacherCourseGroup.setLastClassesEndTime(groupBaseCourseInfo.getLastClassesEndTime());
                 }
-                if(Objects.nonNull(groupFinishedClassesTimesMap.get(teacherCourseGroup.getId().toString()))) {
+                if (Objects.nonNull(groupFinishedClassesTimesMap.get(teacherCourseGroup.getId().toString()))) {
                     teacherCourseGroup.setCurrentClassTimes(groupFinishedClassesTimesMap.get(teacherCourseGroup.getId().toString()).intValue());
                 }
-                if(Objects.nonNull(teacherCourseGroup.getTotalClassTimes())){
-                    teacherCourseGroup.setGroupClassesTotalDuration(teacherCourseGroup.getSingleClassMinutes()*teacherCourseGroup.getTotalClassTimes());
+                if (Objects.nonNull(teacherCourseGroup.getTotalClassTimes())) {
+                    teacherCourseGroup.setGroupClassesTotalDuration(teacherCourseGroup.getSingleClassMinutes() * teacherCourseGroup.getTotalClassTimes());
                 }
-                if(Objects.nonNull(teacherCourseGroup.getCurrentClassTimes())){
-                    teacherCourseGroup.setGroupClassesConsumeDuration(teacherCourseGroup.getSingleClassMinutes()*teacherCourseGroup.getCurrentClassTimes());
+                if (Objects.nonNull(teacherCourseGroup.getCurrentClassTimes())) {
+                    teacherCourseGroup.setGroupClassesConsumeDuration(teacherCourseGroup.getSingleClassMinutes() * teacherCourseGroup.getCurrentClassTimes());
                 }
             }
         }
@@ -371,7 +373,7 @@ public class CoursesGroupServiceImpl extends BaseServiceImpl<Long, CoursesGroup>
         Map<String, Object> params = new HashMap<>();
         MapUtil.populateMap(params, queryInfo);
 
-        List<CourseGroupExtendDto> teacherCourseGroups=new ArrayList<>();
+        List<CourseGroupExtendDto> teacherCourseGroups = new ArrayList<>();
         int count = coursesGroupDao.countStudentGroupsWithWeb(params);
         if (count > 0) {
             pageInfo.setTotal(count);
@@ -383,32 +385,32 @@ public class CoursesGroupServiceImpl extends BaseServiceImpl<Long, CoursesGroup>
             Map<String, Integer> groupStudentNumMap = groupStudentNums.stream().collect(Collectors.toMap(GroupBaseCourseInfoDto::getId, GroupBaseCourseInfoDto::getStudentNum));
 
             List<GroupBaseCourseInfoDto> groupTotalClassesTimes = groupDao.countGroupTotalClassesTimes(groupIds, GroupType.COMM);
-            Map<String, GroupBaseCourseInfoDto> groupBaseCourseInfoMap = groupTotalClassesTimes.stream().collect(Collectors.toMap(GroupBaseCourseInfoDto::getId, e->e));
+            Map<String, GroupBaseCourseInfoDto> groupBaseCourseInfoMap = groupTotalClassesTimes.stream().collect(Collectors.toMap(GroupBaseCourseInfoDto::getId, e -> e));
 
             List<GroupBaseCourseInfoDto> groupFinishedClassesTimes = groupDao.countGroupFinishedClassesTimes(groupIds, GroupType.COMM);
-            Map<String, Integer> groupFinishedClassesTimesMap = groupFinishedClassesTimes.stream().collect(Collectors.toMap(GroupBaseCourseInfoDto::getId, e->e.getCurrentClassTimes()));
+            Map<String, Integer> groupFinishedClassesTimesMap = groupFinishedClassesTimes.stream().collect(Collectors.toMap(GroupBaseCourseInfoDto::getId, e -> e.getCurrentClassTimes()));
 
             List<SimpleUserDto> teachers = teacherDao.findSimpleTeachers(teacherIds);
             Map<Integer, String> idNameMap = teachers.stream().collect(Collectors.toMap(SimpleUserDto::getUserId, SimpleUserDto::getUserName));
 
             for (CourseGroupExtendDto teacherCourseGroup : teacherCourseGroups) {
-                if(Objects.nonNull(groupStudentNumMap.get(teacherCourseGroup.getId().toString()))) {
+                if (Objects.nonNull(groupStudentNumMap.get(teacherCourseGroup.getId().toString()))) {
                     teacherCourseGroup.setStudentNum(groupStudentNumMap.get(teacherCourseGroup.getId().toString()).intValue());
                 }
                 GroupBaseCourseInfoDto groupBaseCourseInfo = groupBaseCourseInfoMap.get(teacherCourseGroup.getId().toString());
-                if(Objects.nonNull(groupBaseCourseInfo)){
+                if (Objects.nonNull(groupBaseCourseInfo)) {
                     teacherCourseGroup.setTotalClassTimes(groupBaseCourseInfo.getTotalClassTimes());
                     teacherCourseGroup.setFirstClassesStartTime(groupBaseCourseInfo.getFirstClassesStartTime());
                     teacherCourseGroup.setLastClassesEndTime(groupBaseCourseInfo.getLastClassesEndTime());
                 }
-                if(Objects.nonNull(groupFinishedClassesTimesMap.get(teacherCourseGroup.getId().toString()))) {
+                if (Objects.nonNull(groupFinishedClassesTimesMap.get(teacherCourseGroup.getId().toString()))) {
                     teacherCourseGroup.setCurrentClassTimes(groupFinishedClassesTimesMap.get(teacherCourseGroup.getId().toString()).intValue());
                 }
-                if(Objects.nonNull(teacherCourseGroup.getTotalClassTimes())){
-                    teacherCourseGroup.setGroupClassesTotalDuration(teacherCourseGroup.getSingleClassMinutes()*teacherCourseGroup.getTotalClassTimes());
+                if (Objects.nonNull(teacherCourseGroup.getTotalClassTimes())) {
+                    teacherCourseGroup.setGroupClassesTotalDuration(teacherCourseGroup.getSingleClassMinutes() * teacherCourseGroup.getTotalClassTimes());
                 }
-                if(Objects.nonNull(teacherCourseGroup.getCurrentClassTimes())){
-                    teacherCourseGroup.setGroupClassesConsumeDuration(teacherCourseGroup.getSingleClassMinutes()*teacherCourseGroup.getCurrentClassTimes());
+                if (Objects.nonNull(teacherCourseGroup.getCurrentClassTimes())) {
+                    teacherCourseGroup.setGroupClassesConsumeDuration(teacherCourseGroup.getSingleClassMinutes() * teacherCourseGroup.getCurrentClassTimes());
                 }
                 teacherCourseGroup.setTeacherName(idNameMap.get(teacherCourseGroup.getTeacherId()));
             }
@@ -419,17 +421,17 @@ public class CoursesGroupServiceImpl extends BaseServiceImpl<Long, CoursesGroup>
 
     @Override
     public GroupHeadInfoDto getGroupHeadInfo(Long courseScheduleId) {
-        if(Objects.isNull(courseScheduleId)){
+        if (Objects.isNull(courseScheduleId)) {
             throw new BizException("请选择课程");
         }
         CourseSchedule courseSchedule = courseScheduleDao.get(courseScheduleId);
-        if(Objects.isNull(courseSchedule)){
+        if (Objects.isNull(courseSchedule)) {
             throw new BizException("课程不存在");
         }
         CoursesGroup coursesGroup = coursesGroupDao.get(Long.valueOf(courseSchedule.getMusicGroupId()));
         Teacher teacher = teacherDao.get(courseSchedule.getActualTeacherId());
 
-        GroupHeadInfoDto groupHeadInfo=new GroupHeadInfoDto();
+        GroupHeadInfoDto groupHeadInfo = new GroupHeadInfoDto();
         groupHeadInfo.setGroupId(coursesGroup.getId().toString());
         groupHeadInfo.setGroupName(coursesGroup.getName());
         groupHeadInfo.setClassGroupId(courseSchedule.getClassGroupId());
@@ -445,66 +447,66 @@ public class CoursesGroupServiceImpl extends BaseServiceImpl<Long, CoursesGroup>
 
     @Override
     public Map<String, Object> getGroupDetail(Long groupId) {
-        if(Objects.isNull(groupId)){
+        if (Objects.isNull(groupId)) {
             throw new BizException("请指定课程组");
         }
         CoursesGroup coursesGroup = coursesGroupDao.get(groupId);
         Teacher teacher = teacherDao.get(coursesGroup.getTeacherId());
         List<String> subjectNames = subjectDao.findBySubIds(teacher.getSubjectId());
-        Map<String, Object> result=new HashMap<>();
+        Map<String, Object> result = new HashMap<>();
         result.put("groupId", groupId);
         result.put("groupName", coursesGroup.getName());
-        result.put("courseStartDate",coursesGroup.getCoursesStartDate());
+        result.put("courseStartDate", coursesGroup.getCoursesStartDate());
         result.put("courseEndDate", coursesGroup.getCoursesEndDate());
         result.put("teacherName", teacher.getRealName());
-        result.put("avatar",teacher.getAvatar());
+        result.put("avatar", teacher.getAvatar());
         result.put("introduction", teacher.getIntroduction());
         result.put("lectureNum", courseScheduleTeacherSalaryDao.countTeacherGiveLesson(coursesGroup.getTeacherId()));
-        result.put("subjectNames", StringUtils.join(subjectNames,","));
+        result.put("subjectNames", StringUtils.join(subjectNames, ","));
         List<CourseSchedule> groupNotStartCourses = courseScheduleDao.findGroupNotFinishCourses(groupId.toString(), GroupType.COMM);
-        result.put("courseSchedules",groupNotStartCourses);
+        result.put("courseSchedules", groupNotStartCourses);
         Map<TeachModeEnum, Long> collect = groupNotStartCourses.stream().collect(Collectors.groupingBy(CourseSchedule::getTeachMode, Collectors.counting()));
         result.put("totalClassesTimes", groupNotStartCourses.size());
-        result.put("onlineClassesTimes", Objects.isNull(collect.get(TeachModeEnum.ONLINE))?0:collect.get(TeachModeEnum.ONLINE));
-        result.put("offlineClassesTimes", Objects.isNull(collect.get(TeachModeEnum.OFFLINE))?0:collect.get(TeachModeEnum.OFFLINE));
+        result.put("onlineClassesTimes", Objects.isNull(collect.get(TeachModeEnum.ONLINE)) ? 0 : collect.get(TeachModeEnum.ONLINE));
+        result.put("offlineClassesTimes", Objects.isNull(collect.get(TeachModeEnum.OFFLINE)) ? 0 : collect.get(TeachModeEnum.OFFLINE));
         return result;
     }
 
     @Override
     @Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
-    public HttpResponseResult buyCourseGroup(Integer userId, Long courseGroupId, boolean isUseBalancePayment) {
-        if(Objects.isNull(courseGroupId)){
+    public HttpResponseResult buyCourseGroup(Integer userId, Long courseGroupId, boolean isUseBalancePayment) throws Exception {
+        if (Objects.isNull(courseGroupId)) {
             throw new BizException("请指定课程组");
         }
 
         CoursesGroup coursesGroup = coursesGroupDao.lockGroup(courseGroupId);
-        if(Objects.isNull(coursesGroup)){
+        if (Objects.isNull(coursesGroup)) {
             throw new BizException("此课程组不存在");
         }
-        if(coursesGroup.getStatus().equals(GroupStatusEnum.CANCEL)){
+        if (coursesGroup.getStatus().equals(GroupStatusEnum.CANCEL)) {
             throw new BizException("课程已关闭,请联系老师了解详细情况。");
         }
         List<ClassGroupStudentMapper> groupStudents = classGroupStudentMapperDao.findGroupStudents(courseGroupId.toString(), GroupType.COMM, userId, null);
-        if(!CollectionUtils.isEmpty(groupStudents)){
+        if (!CollectionUtils.isEmpty(groupStudents)) {
             throw new BizException("您完成此课程组报名,无需重复报名。");
         }
 
-        Date now=new Date();
+        Date now = new Date();
 
         ClassGroup classGroup = classGroupDao.findByMusicGroupAndType(courseGroupId.toString(), GroupType.COMM.getCode());
-        if(classGroup.getStudentNum()>=classGroup.getExpectStudentNum()){
+        if (classGroup.getStudentNum() >= classGroup.getExpectStudentNum()) {
             throw new BizException("课程人数已满");
         }
 
         BigDecimal amount = coursesGroup.getTotalCoursesPrice();
-        if(Objects.isNull(amount)){
-            amount=BigDecimal.ZERO;
+        if (Objects.isNull(amount)) {
+            amount = BigDecimal.ZERO;
         }
 
-        StudentPaymentOrder studentPaymentOrder=new StudentPaymentOrder();
+        StudentPaymentOrder studentPaymentOrder = new StudentPaymentOrder();
         studentPaymentOrder.setUserId(userId);
         studentPaymentOrder.setGroupType(GroupType.COMM);
-        String orderNo=idGeneratorService.generatorId("payment") + "";
+        String orderNo = idGeneratorService.generatorId("payment") + "";
         studentPaymentOrder.setOrderNo(orderNo);
         studentPaymentOrder.setStatus(DealStatusEnum.ING);
         studentPaymentOrder.setType(OrderTypeEnum.COURSE_GROUP_BUY);
@@ -514,18 +516,21 @@ public class CoursesGroupServiceImpl extends BaseServiceImpl<Long, CoursesGroup>
         studentPaymentOrder.setClassGroupId(classGroup.getId());
         studentPaymentOrder.setVersion(0);
 
-        if(amount.compareTo(BigDecimal.ZERO)<=0){
+        BigDecimal balance = BigDecimal.ZERO;
+        if (amount.compareTo(BigDecimal.ZERO) <= 0) {
             return this.orderCallback(studentPaymentOrder);
-        }else{
+        } else {
             studentPaymentOrderService.insert(studentPaymentOrder);
 
-            if(isUseBalancePayment || studentPaymentOrder.getExpectAmount().doubleValue() == 0){
+            if (isUseBalancePayment || studentPaymentOrder.getExpectAmount().doubleValue() == 0) {
                 SysUserCashAccount userCashAccount = sysUserCashAccountService.getLocked(userId);
-                if(userCashAccount == null){
+                if (userCashAccount == null) {
                     throw new BizException("用户账户找不到");
                 }
                 studentPaymentOrder.setPaymentChannel("BALANCE");
-                if(userCashAccount.getBalance().subtract(studentPaymentOrder.getExpectAmount()).doubleValue() >= 0){
+                if (userCashAccount.getBalance().subtract(studentPaymentOrder.getExpectAmount()).doubleValue() >= 0) {
+                    studentPaymentRouteOrderService.addRouteOrder(orderNo, coursesGroup.getOrganId(), studentPaymentOrder.getExpectAmount());
+
                     // 更新订单信息
                     studentPaymentOrder.setActualAmount(new BigDecimal(0));
                     studentPaymentOrder.setBalancePaymentAmount(studentPaymentOrder.getExpectAmount());
@@ -533,17 +538,18 @@ public class CoursesGroupServiceImpl extends BaseServiceImpl<Long, CoursesGroup>
                     studentPaymentOrder.setUpdateTime(now);
                     studentPaymentOrder.setRoutingOrganId(42);
 
-                    sysUserCashAccountService.updateBalance(userId, studentPaymentOrder.getExpectAmount().negate(),PlatformCashAccountDetailTypeEnum.PAY_FEE,"对外课程购买");
+                    sysUserCashAccountService.updateBalance(userId, studentPaymentOrder.getExpectAmount().negate(), PlatformCashAccountDetailTypeEnum.PAY_FEE, "对外课程购买");
 
                     this.orderCallback(studentPaymentOrder);
 
-                    Map<String,Object> result=new HashMap<>();
-                    result.put("orderNo",studentPaymentOrder.getOrderNo());
+                    Map<String, Object> result = new HashMap<>();
+                    result.put("orderNo", studentPaymentOrder.getOrderNo());
 
                     return BaseController.succeed(result);
-                }else{
+                } else {
                     if (userCashAccount.getBalance().doubleValue() > 0) {
-                        sysUserCashAccountService.updateBalance(userId, userCashAccount.getBalance().negate(), PlatformCashAccountDetailTypeEnum.PAY_FEE, "对外课程购买");
+                        balance = userCashAccount.getBalance();
+                        sysUserCashAccountService.updateBalance(userId, balance.negate(), PlatformCashAccountDetailTypeEnum.PAY_FEE, "对外课程购买");
                         amount = studentPaymentOrder.getExpectAmount().subtract(userCashAccount.getBalance());
                         studentPaymentOrder.setActualAmount(amount);
                         studentPaymentOrder.setBalancePaymentAmount(userCashAccount.getBalance());
@@ -555,56 +561,52 @@ public class CoursesGroupServiceImpl extends BaseServiceImpl<Long, CoursesGroup>
 
             String baseApiUrl = sysConfigDao.findConfigValue("base_api_url");
             Map<String, BigDecimal> classFee = new HashMap<>();
-            classFee.put("course",amount);
-            classFee.put("instrument",BigDecimal.ZERO);
-            classFee.put("accessories",BigDecimal.ZERO);
-            classFee.put("other",BigDecimal.ZERO);
-            try {
-                Map<String,Object> payMap = payService.getPayMap(
-                        amount,
-                        orderNo,
-                        baseApiUrl+"/api-student/studentOrder/notify",
-                        baseApiUrl+"/api-student/studentOrder/paymentResult?orderNo=" + orderNo,
-                        "对外课程组购买",
-                        coursesGroup.getName(),
-                        userId,
-                        classFee,
-                        null
-                );
-
-                Map<String,BigDecimal> routingFee = (Map<String,BigDecimal>)payMap.get("routingFee");
-                studentPaymentOrder.setRoutingOrganId((Integer) payMap.get("routingOrganId"));
-                studentPaymentOrder.setComAmount(routingFee.get("COM"));
-                studentPaymentOrder.setPerAmount(routingFee.get("PER"));
-                studentPaymentOrder.setMerNos((String) payMap.get("routingMerNos"));
-                studentPaymentOrder.setPaymentChannel((String) payMap.get("type"));
-                studentPaymentOrder.setUpdateTime(now);
-                studentPaymentOrderService.update(studentPaymentOrder);
-
-                return BaseController.succeed(payMap);
-            } catch (Exception e) {
-                throw new BizException("订单提交超时,请尝试重新提交购买");
-            }
+            classFee.put("course", amount);
+            classFee.put("instrument", BigDecimal.ZERO);
+            classFee.put("accessories", BigDecimal.ZERO);
+            classFee.put("other", BigDecimal.ZERO);
+            Map<String, Object> payMap = payService.getPayMap(
+                    amount,
+                    balance,
+                    orderNo,
+                    baseApiUrl + "/api-student/studentOrder/notify",
+                    baseApiUrl + "/api-student/studentOrder/paymentResult?orderNo=" + orderNo,
+                    "对外课程组购买",
+                    coursesGroup.getName(),
+                    coursesGroup.getOrganId(),
+                    "outGroupBuy"
+            );
+
+            Map<String, BigDecimal> routingFee = (Map<String, BigDecimal>) payMap.get("routingFee");
+            studentPaymentOrder.setRoutingOrganId((Integer) payMap.get("routingOrganId"));
+            studentPaymentOrder.setComAmount(routingFee.get("COM"));
+            studentPaymentOrder.setPerAmount(routingFee.get("PER"));
+            studentPaymentOrder.setMerNos((String) payMap.get("routingMerNos"));
+            studentPaymentOrder.setPaymentChannel((String) payMap.get("type"));
+            studentPaymentOrder.setUpdateTime(now);
+            studentPaymentOrderService.update(studentPaymentOrder);
+
+            return BaseController.succeed(payMap);
         }
     }
 
     @Override
-    @Transactional(rollbackFor = Exception.class,isolation = Isolation.READ_COMMITTED)
+    @Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
     public HttpResponseResult orderCallback(StudentPaymentOrder order) {
-        if(order.getExpectAmount().compareTo(BigDecimal.ZERO)>0){
+        if (order.getExpectAmount().compareTo(BigDecimal.ZERO) > 0) {
             StudentPaymentOrder studentPaymentOrder = studentPaymentOrderDao.get(order.getId());
-            if(!studentPaymentOrder.getStatus().equals(DealStatusEnum.ING)){
+            if (!studentPaymentOrder.getStatus().equals(DealStatusEnum.ING)) {
                 return BaseController.succeed();
             }
             SysUserCashAccount sysUserCashAccount = sysUserCashAccountService.get(order.getUserId());
-            List<StudentPaymentOrder> userGroupOrders = studentPaymentOrderDao.findUserGroupOrders(order.getUserId(), order.getMusicGroupId(), order.getGroupType(),null);
+            List<StudentPaymentOrder> userGroupOrders = studentPaymentOrderDao.findUserGroupOrders(order.getUserId(), order.getMusicGroupId(), order.getGroupType(), null);
             Map<DealStatusEnum, Long> statusOrderNumMap = userGroupOrders.stream().collect(Collectors.groupingBy(StudentPaymentOrder::getStatus, Collectors.counting()));
-            Long successOrderNum=statusOrderNumMap.get(DealStatusEnum.SUCCESS);
-            if(Objects.nonNull(successOrderNum)&&successOrderNum>0){
-                if(order.getStatus().equals(DealStatusEnum.FAILED)&&Objects.nonNull(order.getBalancePaymentAmount())&&order.getBalancePaymentAmount().compareTo(BigDecimal.ZERO)>0){
+            Long successOrderNum = statusOrderNumMap.get(DealStatusEnum.SUCCESS);
+            if (Objects.nonNull(successOrderNum) && successOrderNum > 0) {
+                if (order.getStatus().equals(DealStatusEnum.FAILED) && Objects.nonNull(order.getBalancePaymentAmount()) && order.getBalancePaymentAmount().compareTo(BigDecimal.ZERO) > 0) {
                     sysUserCashAccountService.updateBalance(order.getUserId(), order.getBalancePaymentAmount(), PlatformCashAccountDetailTypeEnum.REFUNDS, "网管课支付失败,退还余额");
                 }
-                if(order.getStatus().equals(DealStatusEnum.SUCCESS)){
+                if (order.getStatus().equals(DealStatusEnum.SUCCESS)) {
                     sysUserCashAccountService.updateBalance(order.getUserId(), order.getExpectAmount(), PlatformCashAccountDetailTypeEnum.REFUNDS, "重复支付,退还余额");
                     order.setMemo("重复支付,进入余额");
                 }
@@ -612,26 +614,26 @@ public class CoursesGroupServiceImpl extends BaseServiceImpl<Long, CoursesGroup>
                 return BaseController.succeed();
             }
 
-            Long ingOrderNum=statusOrderNumMap.get(DealStatusEnum.ING);
-            if(Objects.nonNull(ingOrderNum)&&ingOrderNum>1&&order.getStatus().equals(DealStatusEnum.FAILED)){
-                if(Objects.nonNull(order.getBalancePaymentAmount())&&order.getBalancePaymentAmount().compareTo(BigDecimal.ZERO)>0){
+            Long ingOrderNum = statusOrderNumMap.get(DealStatusEnum.ING);
+            if (Objects.nonNull(ingOrderNum) && ingOrderNum > 1 && order.getStatus().equals(DealStatusEnum.FAILED)) {
+                if (Objects.nonNull(order.getBalancePaymentAmount()) && order.getBalancePaymentAmount().compareTo(BigDecimal.ZERO) > 0) {
                     sysUserCashAccountService.updateBalance(order.getUserId(), order.getBalancePaymentAmount(), PlatformCashAccountDetailTypeEnum.REFUNDS, "网管课支付失败,退还余额");
                 }
                 studentPaymentOrderDao.update(order);
                 return BaseController.succeed();
             }
 
-            if(order.getStatus().equals(DealStatusEnum.SUCCESS)){
-                courseScheduleDao.updateGroupCourseLock(order.getMusicGroupId(),GroupType.PRACTICE,0);
-            }else{
-                if(Objects.nonNull(order.getBalancePaymentAmount())&&order.getBalancePaymentAmount().compareTo(BigDecimal.ZERO)>0){
+            if (order.getStatus().equals(DealStatusEnum.SUCCESS)) {
+                courseScheduleDao.updateGroupCourseLock(order.getMusicGroupId(), GroupType.PRACTICE, 0);
+            } else {
+                if (Objects.nonNull(order.getBalancePaymentAmount()) && order.getBalancePaymentAmount().compareTo(BigDecimal.ZERO) > 0) {
                     sysUserCashAccountService.updateBalance(order.getUserId(), order.getBalancePaymentAmount(), PlatformCashAccountDetailTypeEnum.REFUNDS, "网管课支付失败,退还余额");
                 }
                 studentPaymentOrderDao.update(order);
                 CoursesGroup coursesGroup = coursesGroupDao.get(Long.valueOf(order.getMusicGroupId()));
                 coursesGroup.setStatus(GroupStatusEnum.CANCEL);
                 coursesGroupDao.update(coursesGroup);
-                groupService.deleteGroupOtherInfo(order.getMusicGroupId(),GroupType.PRACTICE);
+                groupService.deleteGroupOtherInfo(order.getMusicGroupId(), GroupType.PRACTICE);
                 return BaseController.succeed();
             }
             studentPaymentOrderDao.update(order);
@@ -659,10 +661,10 @@ public class CoursesGroupServiceImpl extends BaseServiceImpl<Long, CoursesGroup>
             sysUserExpendCashAccountDetail.setAttribute(order.getTransNo());
             sysUserExpendCashAccountDetail.setChannel(studentPaymentOrder.getPaymentChannel());
 
-            if(studentPaymentOrder.getComAmount() != null){
+            if (studentPaymentOrder.getComAmount() != null) {
                 sysUserIncomeCashAccountDetail.setComAmount(studentPaymentOrder.getComAmount().negate());
             }
-            if(studentPaymentOrder.getPerAmount() != null){
+            if (studentPaymentOrder.getPerAmount() != null) {
                 sysUserExpendCashAccountDetail.setPerAmount(studentPaymentOrder.getPerAmount().negate());
             }
 
@@ -670,8 +672,8 @@ public class CoursesGroupServiceImpl extends BaseServiceImpl<Long, CoursesGroup>
             sysUserCashAccountDetailService.insert(sysUserExpendCashAccountDetail);
 
             CoursesGroup coursesGroup = coursesGroupDao.get(Long.valueOf(order.getMusicGroupId()));
-            if(!coursesGroup.getStatus().equals(GroupStatusEnum.NORMAL)){
-                order.setVersion(order.getVersion()+1);
+            if (!coursesGroup.getStatus().equals(GroupStatusEnum.NORMAL)) {
+                order.setVersion(order.getVersion() + 1);
                 order.setMemo("支付成功,但课程组不处于正常状态");
                 studentPaymentOrderDao.update(order);
 
@@ -692,18 +694,18 @@ public class CoursesGroupServiceImpl extends BaseServiceImpl<Long, CoursesGroup>
         classGroupStudentMapperDao.insert(classGroupStudentMapper);
 
         List<ClassGroupStudentMapper> classGroupStudents = classGroupStudentMapperDao.findByClassGroup(classGroup.getId());
-        if(!CollectionUtils.isEmpty(classGroupStudents)){
+        if (!CollectionUtils.isEmpty(classGroupStudents)) {
             classGroup.setStudentNum(classGroupStudents.size());
             classGroupDao.update(classGroup);
         }
-        if(!CollectionUtils.isEmpty(classGroupStudents)&&classGroupStudents.size()>=classGroup.getExpectStudentNum()){
+        if (!CollectionUtils.isEmpty(classGroupStudents) && classGroupStudents.size() >= classGroup.getExpectStudentNum()) {
             coursesGroup.setStatus(GroupStatusEnum.NORMAL);
             coursesGroupDao.update(coursesGroup);
         }
 
         List<CourseScheduleStudentPayment> courseScheduleStudentPayments = new ArrayList<>();
         List<CourseSchedule> groupNotStartCourses = courseScheduleDao.findGroupNotFinishCourses(order.getMusicGroupId(), GroupType.COMM);
-        if(CollectionUtils.isEmpty(groupNotStartCourses)){
+        if (CollectionUtils.isEmpty(groupNotStartCourses)) {
             throw new BizException("课程已关闭,请联系老师了解详细情况。");
         }
         BigDecimal singleCoursePrice = order.getExpectAmount().divide(new BigDecimal(groupNotStartCourses.size()), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
@@ -721,19 +723,19 @@ public class CoursesGroupServiceImpl extends BaseServiceImpl<Long, CoursesGroup>
         courseScheduleStudentPaymentDao.batchInsert(courseScheduleStudentPayments);
 
         try {
-            courseScheduleService.checkNewCourseSchedules(groupNotStartCourses,false);
+            courseScheduleService.checkNewCourseSchedules(groupNotStartCourses, false);
         } catch (Exception e) {
             TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
             String errMessage;
 
-            String courseName=e.getMessage().substring(e.getMessage().indexOf(")-")+2);
-            courseName = courseName.substring(0,courseName.indexOf("("));
+            String courseName = e.getMessage().substring(e.getMessage().indexOf(")-") + 2);
+            courseName = courseName.substring(0, courseName.indexOf("("));
             String courseTime = e.getMessage().substring(e.getMessage().indexOf("在") + 1);
             courseTime = courseTime.substring(0, courseTime.indexOf("至"));
-            errMessage="现在课程:";
-            errMessage+=courseName;
-            errMessage+="<br/>冲突时间:";
-            errMessage+=courseTime;
+            errMessage = "现在课程:";
+            errMessage += courseName;
+            errMessage += "<br/>冲突时间:";
+            errMessage += courseTime;
 
             return BaseController.failed(HttpStatus.FOUND, errMessage);
         }
@@ -752,7 +754,7 @@ public class CoursesGroupServiceImpl extends BaseServiceImpl<Long, CoursesGroup>
     public void noStudentsCourseGroupRemind() {
         Date startDate = DateUtil.addDays(new Date(), 1);
         List<CoursesGroup> noStudentsGroups = coursesGroupDao.findNoStudentsGroups(startDate);
-        if(CollectionUtils.isEmpty(noStudentsGroups)){
+        if (CollectionUtils.isEmpty(noStudentsGroups)) {
             return;
         }
         for (CoursesGroup noStudentsGroup : noStudentsGroups) {
@@ -766,7 +768,7 @@ public class CoursesGroupServiceImpl extends BaseServiceImpl<Long, CoursesGroup>
     @Override
     public void finishCourseGroup() {
         List<CoursesGroup> noCoursesGroups = coursesGroupDao.findNoCoursesGroups();
-        if(CollectionUtils.isEmpty(noCoursesGroups)){
+        if (CollectionUtils.isEmpty(noCoursesGroups)) {
             return;
         }
         List<Long> groupIds = noCoursesGroups.stream().map(CoursesGroup::getId).collect(Collectors.toList());

+ 2 - 7
mec-biz/src/main/java/com/ym/mec/biz/service/impl/DegreeRegistrationServiceImpl.java

@@ -159,25 +159,20 @@ public class DegreeRegistrationServiceImpl extends BaseServiceImpl<Integer, Degr
         classFee.put("accessories", BigDecimal.ZERO);
         classFee.put("other", amount);
 
-        String receiver = "daya";
+        String receiver = "kjRegister";
         Map payMap = payService.getPayMap(
                 amount,
+                BigDecimal.ZERO,
                 orderNo,
                 baseApiUrl + "/api-student/studentOrder/notify",
                 baseApiUrl + "/api-student/studentOrder/paymentResult?orderNo=" + orderNo,
                 chargeInfo.getDetail(),
                 chargeInfo.getDetail(),
-                userId,
-                classFee,
                 chargeInfo.getOrganId(),
                 receiver
         );
 
-        Map<String, BigDecimal> routingFee = (Map<String, BigDecimal>) payMap.get("routingFee");
         studentPaymentOrder.setOrganId(chargeInfo.getOrganId());
-        studentPaymentOrder.setRoutingOrganId((Integer) payMap.get("routingOrganId"));
-        studentPaymentOrder.setComAmount(routingFee.get("COM"));
-        studentPaymentOrder.setPerAmount(routingFee.get("PER"));
         studentPaymentOrder.setMerNos((String) payMap.get("routingMerNos"));
         studentPaymentOrder.setPaymentChannel((String) payMap.get("type"));
         studentPaymentOrder.setUpdateTime(nowDate);

+ 52 - 58
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java

@@ -152,6 +152,8 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 
     @Autowired
     private ImFeignService imFeignService;
+    @Autowired
+    private StudentPaymentRouteOrderService studentPaymentRouteOrderService;
 
     private SimpleDateFormat sdf_ymd = new SimpleDateFormat("yyyy-MM-dd");
 
@@ -309,6 +311,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 
         studentPaymentOrder.setVersion(0);
         Date date = new Date();
+        BigDecimal balance = BigDecimal.ZERO;
         if (sporadicPayDto.getUseBalancePayment() && amount.compareTo(BigDecimal.ZERO) > 0) {
             if (chargeInfo.getChargeType().getCode().equals(9)) {
                 throw new BizException("账户充值不支持余额支付");
@@ -319,7 +322,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
                 throw new BizException("用户账户找不到");
             }
             if (userCashAccount.getBalance() != null && userCashAccount.getBalance().compareTo(BigDecimal.ZERO) > 0) {
-                BigDecimal balance = amount.compareTo(userCashAccount.getBalance()) >= 0 ? userCashAccount.getBalance() : amount;
+                balance = amount.compareTo(userCashAccount.getBalance()) >= 0 ? userCashAccount.getBalance() : amount;
                 amount = amount.subtract(balance);
                 studentPaymentOrder.setPaymentChannel("BALANCE");
                 studentPaymentOrder.setActualAmount(amount);
@@ -336,6 +339,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         studentPaymentOrder.setVersion(studentPaymentOrder.getVersion() + 1);
 
         if (amount.compareTo(BigDecimal.ZERO) == 0) {
+            studentPaymentRouteOrderService.addRouteOrder(orderNo, chargeInfo.getOrganId(), balance);
             Map<String, String> notifyMap = new HashMap<>();
             notifyMap.put("tradeState", "1");
             notifyMap.put("merOrderNo", studentPaymentOrder.getOrderNo());
@@ -353,27 +357,26 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         classFee.put("accessories", BigDecimal.ZERO);
         classFee.put("other", amount);
 
-        String receiver = "daya";
+        String receiver = "sporadic";
 
         Map payMap = payService.getPayMap(
                 amount,
+                balance,
                 orderNo,
                 baseApiUrl + "/api-student/studentOrder/notify",
                 baseApiUrl + "/api-student/studentOrder/paymentResult?orderNo=" + orderNo,
                 chargeInfo.getTitle(),
                 chargeInfo.getTitle(),
-                userId,
-                classFee,
                 chargeInfo.getOrganId(),
                 receiver
         );
 
-        Map<String, BigDecimal> routingFee = (Map<String, BigDecimal>) payMap.get("routingFee");
+        //Map<String, BigDecimal> routingFee = (Map<String, BigDecimal>) payMap.get("routingFee");
         studentPaymentOrder.setOrganId(chargeInfo.getOrganId());
         //studentPaymentOrder.setRoutingOrganId(chargeInfo.getOrganId());
-        studentPaymentOrder.setRoutingOrganId((Integer) payMap.get("routingOrganId"));
-        studentPaymentOrder.setComAmount(routingFee.get("COM"));
-        studentPaymentOrder.setPerAmount(routingFee.get("PER"));
+        //studentPaymentOrder.setRoutingOrganId((Integer) payMap.get("routingOrganId"));
+        //studentPaymentOrder.setComAmount(routingFee.get("COM"));
+        //studentPaymentOrder.setPerAmount(routingFee.get("PER"));
         studentPaymentOrder.setMerNos((String) payMap.get("routingMerNos"));
         studentPaymentOrder.setPaymentChannel((String) payMap.get("type"));
         studentPaymentOrder.setUpdateTime(date);
@@ -532,6 +535,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         studentPaymentOrder.setVersion(0);
 
         Date date = new Date();
+        BigDecimal balance = BigDecimal.ZERO;
         MusicGroup musicGroup = musicGroupDao.get(studentRegistration.getMusicGroupId());
         if (registerPayDto.getIsUseBalancePayment() && amount.compareTo(BigDecimal.ZERO) > 0) {
             SysUserCashAccount userCashAccount = sysUserCashAccountService.getLocked(userId);
@@ -539,7 +543,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
                 throw new BizException("用户账户找不到");
             }
             if (userCashAccount.getBalance() != null && userCashAccount.getBalance().compareTo(BigDecimal.ZERO) > 0) {
-                BigDecimal balance = amount.compareTo(userCashAccount.getBalance()) >= 0 ? userCashAccount.getBalance() : amount;
+                balance = amount.compareTo(userCashAccount.getBalance()) >= 0 ? userCashAccount.getBalance() : amount;
                 amount = amount.subtract(balance);
                 studentPaymentOrder.setPaymentChannel("BALANCE");
                 studentPaymentOrder.setActualAmount(amount);
@@ -550,12 +554,13 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         studentPaymentOrder.setPaymentChannel("BALANCE");
         studentPaymentOrder.setRemitFee(remitFee);
         studentPaymentOrder.setOrganId(musicGroup.getOrganId());
-        studentPaymentOrder.setRoutingOrganId(42);
+        studentPaymentOrder.setRoutingOrganId(musicGroup.getOrganId());
         studentPaymentOrder.setUpdateTime(date);
         studentPaymentOrderService.update(studentPaymentOrder);
         studentPaymentOrder.setVersion(studentPaymentOrder.getVersion() + 1);
 
         if (amount.compareTo(BigDecimal.ZERO) == 0) {
+            studentPaymentRouteOrderService.addRouteOrder(orderNo, musicGroup.getOrganId(), balance);
             Map<String, String> notifyMap = new HashMap<>();
             notifyMap.put("tradeState", "1");
             notifyMap.put("merOrderNo", studentPaymentOrder.getOrderNo());
@@ -587,30 +592,25 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         }
 
         String orderSubject = "乐团报名";
-        String receiver = "daya";
+        String receiver = "register";
         if (musicGroup.getOwnershipType() != null && musicGroup.getOwnershipType().equals(CooperationOrgan.OwnershipType.COOPERATION)) {
             orderSubject = "乐团相关费用";
-            receiver = "tq";
         }
         String baseApiUrl = sysConfigDao.findConfigValue("base_api_url");
+
         Map payMap = payService.getPayMap(
                 amount,
+                balance,
                 orderNo,
                 baseApiUrl + "/api-student/studentOrder/notify",
                 baseApiUrl + "/api-student/studentOrder/paymentResult?orderNo=" + orderNo,
                 orderSubject,
                 orderSubject,
-                userId,
-                classFee,
                 musicGroup.getOrganId(),
                 receiver
         );
 
-        Map<String, BigDecimal> routingFee = (Map<String, BigDecimal>) payMap.get("routingFee");
         studentPaymentOrder.setOrganId(musicGroup.getOrganId());
-        studentPaymentOrder.setRoutingOrganId((Integer) payMap.get("routingOrganId"));
-        studentPaymentOrder.setComAmount(routingFee.get("COM"));
-        studentPaymentOrder.setPerAmount(routingFee.get("PER"));
         studentPaymentOrder.setMerNos((String) payMap.get("routingMerNos"));
         studentPaymentOrder.setPaymentChannel((String) payMap.get("type"));
         studentPaymentOrder.setUpdateTime(date);
@@ -774,6 +774,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         studentPaymentOrder.setVersion(0);
         Date date = new Date();
 
+        BigDecimal balance = BigDecimal.ZERO;
         MusicGroup musicGroup = musicGroupDao.get(studentRegistration.getMusicGroupId());
         if (registerPayDto.getIsUseBalancePayment() && amount.compareTo(BigDecimal.ZERO) > 0) {
             SysUserCashAccount userCashAccount = sysUserCashAccountService.get(userId);
@@ -781,7 +782,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
                 throw new BizException("用户账户找不到");
             }
             if (userCashAccount.getBalance() != null && userCashAccount.getBalance().compareTo(BigDecimal.ZERO) > 0) {
-                BigDecimal balance = amount.compareTo(userCashAccount.getBalance()) >= 0 ? userCashAccount.getBalance() : amount;
+                balance = amount.compareTo(userCashAccount.getBalance()) >= 0 ? userCashAccount.getBalance() : amount;
                 amount = amount.subtract(balance);
                 studentPaymentOrder.setPaymentChannel("BALANCE");
                 studentPaymentOrder.setActualAmount(amount);
@@ -792,12 +793,13 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         studentPaymentOrder.setPaymentChannel("BALANCE");
         studentPaymentOrder.setRemitFee(remitFee);
         studentPaymentOrder.setOrganId(musicGroup.getOrganId());
-        studentPaymentOrder.setRoutingOrganId(42);
+        studentPaymentOrder.setRoutingOrganId(musicGroup.getOrganId());
         studentPaymentOrder.setUpdateTime(date);
         studentPaymentOrderService.update(studentPaymentOrder);
         studentPaymentOrder.setVersion(studentPaymentOrder.getVersion() + 1);
 
         if (amount.compareTo(BigDecimal.ZERO) == 0) {
+            studentPaymentRouteOrderService.addRouteOrder(orderNo, musicGroup.getOrganId(), balance);
             Map<String, String> notifyMap = new HashMap<>();
             notifyMap.put("tradeState", "1");
             notifyMap.put("merOrderNo", studentPaymentOrder.getOrderNo());
@@ -828,30 +830,24 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
             }
         }
         String orderSubject = "乐团报名";
-        String receiver = "daya";
+        String receiver = "register";
         if (musicGroup.getOwnershipType() != null && musicGroup.getOwnershipType().equals(CooperationOrgan.OwnershipType.COOPERATION)) {
             orderSubject = "乐团相关费用";
-            receiver = "tq";
         }
         String baseApiUrl = sysConfigDao.findConfigValue("base_api_url");
         Map payMap = payService.getPayMap(
                 amount,
+                balance,
                 orderNo,
                 baseApiUrl + "/api-student/studentOrder/notify",
                 baseApiUrl + "/api-student/studentOrder/paymentResult?orderNo=" + orderNo,
                 orderSubject,
                 orderSubject,
-                userId,
-                classFee,
                 musicGroup.getOrganId(),
                 receiver
         );
 
-        Map<String, BigDecimal> routingFee = (Map<String, BigDecimal>) payMap.get("routingFee");
         studentPaymentOrder.setOrganId(musicGroup.getOrganId());
-        studentPaymentOrder.setRoutingOrganId((Integer) payMap.get("routingOrganId"));
-        studentPaymentOrder.setComAmount(routingFee.get("COM"));
-        studentPaymentOrder.setPerAmount(routingFee.get("PER"));
         studentPaymentOrder.setMerNos((String) payMap.get("routingMerNos"));
         studentPaymentOrder.setPaymentChannel((String) payMap.get("type"));
         studentPaymentOrder.setUpdateTime(date);
@@ -1594,7 +1590,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 
     @Override
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
-    public Map renew(String musicGroupId, Integer userId, boolean isUseBalancePayment) {
+    public Map renew(String musicGroupId, Integer userId, boolean isUseBalancePayment) throws Exception {
 
         MusicGroup musicGroup = this.get(musicGroupId);
         if (musicGroup == null) {
@@ -1622,6 +1618,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 			throw new BizException("请走报名缴费流程");
 		}*/
 
+        String orderNo = idGeneratorService.generatorId("payment") + "";
         // 判断当前是否是续费状态
         if (musicGroupStudentFee.getPaymentStatus() != PaymentStatus.NON_PAYMENT) {
             throw new BizException("已缴费");
@@ -1633,7 +1630,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         StudentPaymentOrder studentPaymentOrder = new StudentPaymentOrder();
         studentPaymentOrder.setGroupType(GroupType.MUSIC);
         studentPaymentOrder.setUserId(userId);
-        studentPaymentOrder.setOrderNo(idGeneratorService.generatorId("payment") + "");
+        studentPaymentOrder.setOrderNo(orderNo);
         studentPaymentOrder.setType(OrderTypeEnum.RENEW);
         studentPaymentOrder.setExpectAmount(amount);
         studentPaymentOrder.setActualAmount(amount);
@@ -1655,6 +1652,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 
         studentPaymentOrderDetailService.batchAdd(studentPaymentOrderDetailList);
 
+        BigDecimal balance = BigDecimal.ZERO;
         if (isUseBalancePayment || amount.doubleValue() == 0) {
             SysUserCashAccount userCashAccount = sysUserCashAccountService.getLocked(userId);
             if (userCashAccount == null) {
@@ -1662,6 +1660,8 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
             }
             studentPaymentOrder.setPaymentChannel("BALANCE");
             if (userCashAccount.getBalance().subtract(amount).doubleValue() >= 0) {
+                studentPaymentRouteOrderService.addRouteOrder(orderNo, musicGroup.getOrganId(), amount);
+
                 // 更新订单信息
                 studentPaymentOrder.setActualAmount(BigDecimal.ZERO);
                 studentPaymentOrder.setBalancePaymentAmount(amount);
@@ -1701,7 +1701,8 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
                 return null;
             } else {
                 if (userCashAccount.getBalance().doubleValue() > 0) {
-                    sysUserCashAccountService.updateBalance(userId, userCashAccount.getBalance().negate(), PlatformCashAccountDetailTypeEnum.PAY_FEE, "乐团续费");
+                    balance = userCashAccount.getBalance();
+                    sysUserCashAccountService.updateBalance(userId, balance.negate(), PlatformCashAccountDetailTypeEnum.PAY_FEE, "乐团续费");
                     amount = amount.subtract(userCashAccount.getBalance());
                     studentPaymentOrder.setBalancePaymentAmount(userCashAccount.getBalance());
                     studentPaymentOrder.setActualAmount(studentPaymentOrder.getActualAmount().subtract(userCashAccount.getBalance()));
@@ -1719,33 +1720,26 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         classFee.put("accessories", BigDecimal.ZERO);
         classFee.put("other", BigDecimal.ZERO);
 
-        try {
-
-            Map<String, Object> payMap = payService.getPayMap(amount, studentPaymentOrder.getOrderNo(),
-                    baseApiUrl + "/api-student/studentOrder/notify",
-                    baseApiUrl + "/api-student/studentOrder/paymentResult?orderNo=" + studentPaymentOrder.getOrderNo(),
-                    "续费",
-                    "乐团续费",
-                    userId,
-                    classFee,
-                    musicGroup.getOrganId()
-            );
-
-            Map<String, BigDecimal> routingFee = (Map<String, BigDecimal>) payMap.get("routingFee");
-            studentPaymentOrder.setActualAmount(amount);
-            studentPaymentOrder.setOrganId(musicGroup.getOrganId());
-            studentPaymentOrder.setRoutingOrganId((Integer) payMap.get("routingOrganId"));
-            studentPaymentOrder.setComAmount(routingFee.get("COM"));
-            studentPaymentOrder.setPerAmount(routingFee.get("PER"));
-            studentPaymentOrder.setMerNos((String) payMap.get("routingMerNos"));
-            studentPaymentOrder.setPaymentChannel((String) payMap.get("type"));
-            studentPaymentOrder.setUpdateTime(date);
-            studentPaymentOrderService.update(studentPaymentOrder);
-
-            return payMap;
-        } catch (Exception e) {
-            throw new BizException("调用支付接口出错", e);
-        }
+        Map<String, Object> payMap = payService.getPayMap(
+                amount,
+                balance,
+                orderNo,
+                baseApiUrl + "/api-student/studentOrder/notify",
+                baseApiUrl + "/api-student/studentOrder/paymentResult?orderNo=" + studentPaymentOrder.getOrderNo(),
+                "续费",
+                "乐团续费",
+                musicGroup.getOrganId(),
+                "renew"
+        );
+
+        studentPaymentOrder.setActualAmount(amount);
+        studentPaymentOrder.setOrganId(musicGroup.getOrganId());
+        studentPaymentOrder.setMerNos((String) payMap.get("routingMerNos"));
+        studentPaymentOrder.setPaymentChannel((String) payMap.get("type"));
+        studentPaymentOrder.setUpdateTime(date);
+        studentPaymentOrderService.update(studentPaymentOrder);
+
+        return payMap;
     }
 
     @Override

+ 315 - 53
mec-biz/src/main/java/com/ym/mec/biz/service/impl/PayServiceImpl.java

@@ -1,18 +1,27 @@
 package com.ym.mec.biz.service.impl;
 
+import com.alibaba.fastjson.JSON;
 import com.ym.mec.biz.dal.dao.MusicGroupDao;
+import com.ym.mec.biz.dal.dao.StudentPaymentRouteOrderDao;
 import com.ym.mec.biz.dal.dao.SysConfigDao;
+import com.ym.mec.biz.dal.dto.AmountChannelDto;
+import com.ym.mec.biz.dal.dto.RouteScaleDto;
+import com.ym.mec.biz.dal.entity.StudentPaymentRouteOrder;
 import com.ym.mec.biz.dal.entity.SysAccount;
 import com.ym.mec.biz.dal.entity.SysPaymentConfig;
+import com.ym.mec.biz.dal.enums.PaymentChannelEnum;
 import com.ym.mec.biz.dal.enums.PaymentChannelTypeEnum;
 import com.ym.mec.biz.service.*;
 import com.ym.mec.common.exception.BizException;
+import com.ym.mec.thirdparty.adapay.ConfigInit;
 import com.ym.mec.thirdparty.adapay.Payment;
 import com.ym.mec.thirdparty.union.UnionPay;
 import com.ym.mec.thirdparty.union.UnionPayFeignService;
 import com.ym.mec.thirdparty.yqpay.YqPayUtil;
+import com.ym.mec.util.date.DateUtil;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
@@ -37,7 +46,31 @@ public class PayServiceImpl implements PayService {
     private SysConfigDao sysConfigDao;
     @Autowired
     private SysPaymentConfigService sysPaymentConfigService;
-
+    @Autowired
+    private RedisTemplate<String, String> redisTemplate;
+    @Autowired
+    private StudentPaymentRouteOrderDao studentPaymentRouteOrderDao;
+
+
+    public static void main(String[] args) {
+        String baseApiUrl = "http://dev.dayaedu.com";
+
+        try {
+            Map<String, Object> payMap = new PayServiceImpl().getPayMap(
+                    BigDecimal.TEN,
+                    BigDecimal.ONE,
+                    "5435253245",
+                    baseApiUrl + "/api-student/studentOrder/notify",
+                    baseApiUrl + "/api-student/studentOrder/paymentResult?orderNo=5435253245",
+                    "对外课程组购买",
+                    "测试购买",
+                    1,
+                    null
+            );
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
 
     /**
      * 返回订单提交数据
@@ -99,7 +132,7 @@ public class PayServiceImpl implements PayService {
 
         Map<String, Object> payMap = null;
         String type = null;
-        List<Map<String, Object>> tempRoutingList = new ArrayList();
+        List<Map<String, Object>> tempRoutingList = new ArrayList<>();
         for (SysAccount account : accounts) {
             Map<String, Object> routingList = new HashMap<>();
             if (account.getChannel().equals("YQPAY")) {
@@ -171,7 +204,7 @@ public class PayServiceImpl implements PayService {
 
         Map<String, Object> payMap = null;
         String type = null;
-        List<Map<String, Object>> tempRoutingList = new ArrayList();
+        List<Map<String, Object>> tempRoutingList = new ArrayList<>();
         for (SysAccount account : accounts) {
             Map<String, Object> routingList = new HashMap<>();
             if (account.getChannel().equals("YQPAY")) {
@@ -211,6 +244,283 @@ public class PayServiceImpl implements PayService {
     }
 
     @Override
+    public Map<String, Object> getPayMap(BigDecimal amount, BigDecimal balanceAmount, String orderNo, String notifyUrl, String returnUrl, String orderSubject, String orderBody, Integer organId, String receiver) throws Exception {
+        //根据金额获取分润
+        List<RouteScaleDto> routeScaleDtos = getAmountChannel(organId, amount, receiver);
+        //零星支付,收到指定
+        if (routeScaleDtos == null) {
+            routeScaleDtos = getSporadicChannel(amount, receiver);
+        }
+        //比例或者笔数分佣
+        if (routeScaleDtos == null) {
+            routeScaleDtos = getPaymentConfigChannel(organId, amount);
+        }
+
+        return getPayRoute(amount, balanceAmount, orderNo, notifyUrl, returnUrl, orderSubject, orderBody, routeScaleDtos);
+    }
+
+    private List<RouteScaleDto> getPaymentConfigChannel(Integer organId, BigDecimal amount) {
+        SysPaymentConfig paymentConfig = sysPaymentConfigService.findPaymentConfigByOrganId(organId);
+        if (paymentConfig == null || StringUtils.isBlank(paymentConfig.getRouteScale())) {
+            String paymentChannel = sysConfigDao.findConfigValue("payment_channel");
+            List<RouteScaleDto> routeScaleDtos = new ArrayList<>();
+            RouteScaleDto routeScaleDto = new RouteScaleDto();
+            routeScaleDto.setAmount(amount);
+            routeScaleDto.setOrganId(organId);
+            routeScaleDto.setScale(100);
+            if (paymentChannel.equals("YQPAY")) {
+                routeScaleDto.setMerNo(YqPayUtil.merNo);
+                routeScaleDto.setPayType(PaymentChannelEnum.YQPAY);
+            } else {
+                routeScaleDto.setMerNo(ConfigInit.merNo);
+                routeScaleDto.setPayType(PaymentChannelEnum.ADAPAY);
+                routeScaleDto.setFeeFlag("Y");
+            }
+            routeScaleDtos.add(routeScaleDto);
+            return routeScaleDtos;
+        }
+
+        String routeScale = paymentConfig.getRouteScale();
+        List<RouteScaleDto> routeScaleDtos = JSON.parseArray(routeScale, RouteScaleDto.class);
+        List<Integer> organIds = routeScaleDtos.stream().map(RouteScaleDto::getOrganId).collect(Collectors.toList());
+        List<SysPaymentConfig> paymentConfigByOrganIds = sysPaymentConfigService.findPaymentConfigByOrganIds(organIds);
+        for (RouteScaleDto routeScaleDto : routeScaleDtos) {
+            routeScaleDto.setPayType(paymentConfig.getPayType());
+            routeScaleDto.setAmount(amount);
+            for (SysPaymentConfig paymentConfigByOrganId : paymentConfigByOrganIds) {
+                if (!paymentConfigByOrganId.getOrganId().equals(routeScaleDto.getOrganId())) continue;
+                if (paymentConfig.getPayType().equals(PaymentChannelEnum.YQPAY)) {
+                    routeScaleDto.setMerNo(paymentConfigByOrganId.getYqMerNo());
+                } else {
+                    routeScaleDto.setMerNo(paymentConfigByOrganId.getHfMerNo());
+                }
+            }
+        }
+
+        //笔数比例
+        if (paymentConfig.getType().equals(1)) {
+            int payOrderNums = studentPaymentOrderService.findPayOrderNum(); //获取支付中和成功的订单数
+            int rem = payOrderNums % 10;
+            rem = rem == 0 ? 10 : rem;
+
+            int scale = 0;
+            Iterator<RouteScaleDto> iterator = routeScaleDtos.iterator();
+            while (iterator.hasNext()) {
+                RouteScaleDto routeScaleDto = iterator.next();
+                Integer num = routeScaleDto.getScale();
+                if (rem > scale && rem <= scale + num) {
+                    routeScaleDto.setScale(100);
+                    continue;
+                }
+                scale += num;
+                iterator.remove();
+            }
+        }
+        return routeScaleDtos;
+    }
+
+
+    /**
+     * 根据金额获取渠道
+     *
+     * @param amount 金额
+     */
+    private List<RouteScaleDto> getAmountChannel(Integer organId, BigDecimal amount, String receiver) {
+        String amountChannel = sysConfigDao.findConfigValue("amount_channel");
+        if (StringUtils.isBlank(amountChannel)) {
+            return null;
+        }
+        Set<String> musicGroupType = new HashSet<>();
+        musicGroupType.add("renew");
+        musicGroupType.add("register");
+        if(musicGroupType.contains(receiver)){
+            receiver = "musicGroupBuy";
+        }
+
+        Integer routeOrganId = null;
+        List<AmountChannelDto> amountChannelDtoList = JSON.parseArray(amountChannel, AmountChannelDto.class);
+        for (AmountChannelDto amountChannelDto : amountChannelDtoList) {
+            if (amountChannelDto.getOrganId().equals(organId) &&
+                    amount.compareTo(amountChannelDto.getAmount()) == 0 &&
+                    receiver.equals(amountChannelDto.getType())
+            ) {
+                routeOrganId = amountChannelDto.getRouteOrganId();
+                break;
+            }
+        }
+
+        if (routeOrganId == null) {
+            return null;
+        }
+
+        //调度到 鎏逸乐器经营部 检测限定金额
+        if (checkHasMaxReceipt(routeOrganId, amount)) {
+            return null;
+        }
+
+        SysPaymentConfig paymentConfig = sysPaymentConfigService.findPaymentConfigByOrganId(routeOrganId);
+
+        RouteScaleDto routeScaleDto = new RouteScaleDto();
+        List<RouteScaleDto> routeScaleDtos = new ArrayList<>();
+        routeScaleDto.setAmount(amount);
+        routeScaleDto.setOrganId(paymentConfig.getOrganId());
+        routeScaleDto.setPayType(paymentConfig.getPayType());
+        routeScaleDto.setScale(100);
+        if (paymentConfig.getPayType().equals(PaymentChannelEnum.YQPAY)) {
+            routeScaleDto.setMerNo(paymentConfig.getYqMerNo());
+        } else {
+            routeScaleDto.setMerNo(paymentConfig.getHfMerNo());
+            routeScaleDto.setFeeFlag("Y");
+        }
+        routeScaleDtos.add(routeScaleDto);
+        return routeScaleDtos;
+    }
+
+    /**
+     * 零星支付获取渠道
+     *
+     * @param amount
+     * @return
+     */
+    private List<RouteScaleDto> getSporadicChannel(BigDecimal amount, String receiver) {
+        if (receiver == null || !receiver.equals("sporadic")) {
+            return null;
+        }
+        String SporadicChannel = sysConfigDao.findConfigValue("sporadic_channel");
+        if (StringUtils.isBlank(SporadicChannel)) {
+            return null;
+        }
+
+        Map<String, String> channel = (Map<String, String>) JSON.parseObject(SporadicChannel, Map.class);
+
+        BigDecimal minReceiptMoney = new BigDecimal(channel.get("minReceiptMoney")); //最小接收的金额(不包含)
+        if (amount.compareTo(minReceiptMoney) <= 0) {
+            return null;
+        }
+
+        Integer organId = Integer.parseInt(channel.get("organId"));
+        if (checkHasMaxReceipt(organId, amount)) {
+            return null;
+        }
+
+        SysPaymentConfig paymentConfig = sysPaymentConfigService.findPaymentConfigByOrganId(organId);
+
+        RouteScaleDto routeScaleDto = new RouteScaleDto();
+        List<RouteScaleDto> routeScaleDtos = new ArrayList<>();
+        routeScaleDto.setAmount(amount);
+        routeScaleDto.setOrganId(paymentConfig.getOrganId());
+        routeScaleDto.setPayType(paymentConfig.getPayType());
+        routeScaleDto.setScale(100);
+        if (paymentConfig.getPayType().equals(PaymentChannelEnum.YQPAY)) {
+            routeScaleDto.setMerNo(paymentConfig.getYqMerNo());
+        } else {
+            routeScaleDto.setMerNo(paymentConfig.getHfMerNo());
+            routeScaleDto.setFeeFlag("Y");
+        }
+        routeScaleDtos.add(routeScaleDto);
+        return routeScaleDtos;
+    }
+
+    //按金额和零星支付(调度到 鎏逸乐器经营部 检测限定金额)
+    private Boolean checkHasMaxReceipt(Integer organId, BigDecimal amount) {
+        SysPaymentConfig paymentConfig = sysPaymentConfigService.findPaymentConfigByOrganId(organId);
+
+        if (!paymentConfig.getHfMerNo().equals("H004218")) {
+            return false;
+        }
+        BigDecimal monthMaxReceipt = new BigDecimal(75000); //每月限定金额
+        BigDecimal totalMaxReceipt = new BigDecimal(5000000); //总限定金额(500W)
+
+        Date monthStartTime = DateUtil.getFirstDayOfMonth(new Date());
+
+        //已收金额
+        List<PaymentChannelEnum> paymentChannelList = new ArrayList<>();
+        paymentChannelList.add(PaymentChannelEnum.YQPAY);
+        paymentChannelList.add(PaymentChannelEnum.ADAPAY);
+
+        BigDecimal monthHasReceipt = studentPaymentRouteOrderDao.getRouteOrderAmount(organId, paymentChannelList, monthStartTime);
+        if (amount.add(monthHasReceipt).compareTo(monthMaxReceipt) >= 0) {
+            return true;
+        }
+        BigDecimal totalHasReceipt = studentPaymentRouteOrderDao.getRouteOrderAmount(organId, paymentChannelList, null);
+        if (amount.add(totalHasReceipt).compareTo(totalMaxReceipt) >= 0) {
+            return true;
+        }
+        return false;
+    }
+
+    private Map<String, Object> getPayRoute(BigDecimal amount, BigDecimal balanceAmount, String orderNo, String notifyUrl, String returnUrl, String orderSubject, String orderBody, List<RouteScaleDto> routeScaleDtos) throws Exception {
+        Map<String, Object> unionPay = new HashMap<>();
+        Map<String, Object> payMap = null;
+        String routingMerNos;
+
+        List<StudentPaymentRouteOrder> RouteOrders = new ArrayList<>();
+
+        BigDecimal yqAmount = amount.subtract((amount.multiply(new BigDecimal("0.28")).divide(new BigDecimal(100), 2, BigDecimal.ROUND_HALF_UP)));
+        int i = 0;
+        BigDecimal hasRouteAmount = BigDecimal.ZERO;
+        BigDecimal hasRouteBalanceAmount = BigDecimal.ZERO;
+        List<Map<String, Object>> tempRoutingList = new ArrayList<>();
+
+        PaymentChannelEnum patType = null;
+        for (RouteScaleDto routeScaleDto : routeScaleDtos) {
+            patType = routeScaleDto.getPayType();
+            Map<String, Object> routingList = new HashMap<>();
+            i++;
+
+            BigDecimal routingAmount = amount;
+            if (routeScaleDto.getPayType().equals(PaymentChannelEnum.YQPAY)) {
+                routingAmount = yqAmount;
+            }
+            BigDecimal routingFee = routingAmount.multiply(new BigDecimal(routeScaleDto.getScale())).divide(new BigDecimal(100), 2, BigDecimal.ROUND_HALF_UP);
+            BigDecimal routeBalanceAmount = balanceAmount.multiply(new BigDecimal(routeScaleDto.getScale())).divide(new BigDecimal(100), 2, BigDecimal.ROUND_HALF_UP);
+            if (i == routeScaleDtos.size()) {
+                routingFee = routingAmount.subtract(hasRouteAmount).setScale(2, BigDecimal.ROUND_HALF_UP);
+                routeBalanceAmount = balanceAmount.subtract(hasRouteBalanceAmount).setScale(2, BigDecimal.ROUND_HALF_UP);
+            }
+            hasRouteAmount = hasRouteAmount.add(routingFee);
+            hasRouteBalanceAmount = hasRouteBalanceAmount.add(routeBalanceAmount);
+
+            if (routingFee.compareTo(BigDecimal.ZERO) <= 0) {
+                continue;
+            }
+            routingList.put("routingMerNo", routeScaleDto.getMerNo());//分佣账户
+            routingList.put("routingFee", routingFee); //分佣金额
+
+            tempRoutingList.add(routingList);
+
+            StudentPaymentRouteOrder studentPaymentRouteOrder = new StudentPaymentRouteOrder();
+            studentPaymentRouteOrder.setOrderNo(orderNo);
+            studentPaymentRouteOrder.setRouteOrganId(routeScaleDto.getOrganId());
+            studentPaymentRouteOrder.setFeeFlag(routeScaleDto.getFeeFlag());
+            studentPaymentRouteOrder.setRouteAmount(routingFee);
+            studentPaymentRouteOrder.setRouteBalanceAmount(routeBalanceAmount);
+            studentPaymentRouteOrder.setMerNo(routeScaleDto.getMerNo());
+            RouteOrders.add(studentPaymentRouteOrder);
+        }
+
+        if (studentPaymentRouteOrderDao.batchAdd(RouteOrders) <= 0) {
+            throw new BizException("调用支付接口失败");
+        }
+
+        if (patType.equals(PaymentChannelEnum.YQPAY)) {
+            if (tempRoutingList.size() == 1 && YqPayUtil.merNo.equals(tempRoutingList.get(0).get("routingMerNo").toString())) {
+                tempRoutingList = null;
+            }
+            payMap = YqPayUtil.getPayMap(amount, orderNo, notifyUrl, returnUrl, orderSubject, orderBody, YqPayUtil.merNo, tempRoutingList);
+        } else {
+            payMap = Payment.getPayMap(amount, orderNo, notifyUrl, returnUrl, orderSubject, orderBody, ConfigInit.merNo, tempRoutingList);
+        }
+        routingMerNos = routeScaleDtos.stream().map(RouteScaleDto::getMerNo).collect(Collectors.joining(","));
+
+        unionPay.put("orderNo", orderNo);
+        unionPay.put("type", patType.getCode());
+        unionPay.put("payMap", payMap);
+        unionPay.put("routingMerNos", routingMerNos);
+        return unionPay;
+    }
+
+    @Override
     public Map<String, Object> query(String orderNo) throws Exception {
         return new UnionPay(unionPayFeignService).query(orderNo);
     }
@@ -298,14 +608,10 @@ public class PayServiceImpl implements PayService {
             return routingFee;
         }
 
-        SysPaymentConfig paymentConfig = sysPaymentConfigService.findPaymentConfigByOrganId(organId);
 
         int payOrderNums = studentPaymentOrderService.findPayOrderNum(); //获取支付中和成功的订单数
         //前几笔收入私户
-        Integer nums = Integer.parseInt(sysConfigDao.findConfigValue("per_account_nums"));
-        if (paymentConfig != null && paymentConfig.getType().equals(1)) {
-            nums = paymentConfig.getPerScale();
-        }
+        int nums = Integer.parseInt(sysConfigDao.findConfigValue("per_account_nums"));
 
         String type = null;
         int rem = (payOrderNums + 1) % 10;
@@ -315,26 +621,6 @@ public class PayServiceImpl implements PayService {
             type = "COM";
         }
         routingFee.put(type, amount);
-
-        if (paymentConfig == null || !paymentConfig.getType().equals(2)) {
-            return routingFee;
-        }
-        routingFee.put(type, BigDecimal.ZERO);
-        for (Map.Entry<String, BigDecimal> feeEntry : fee.entrySet()) {
-            if (feeEntry.getKey().equals("course")) {
-                BigDecimal RoutingFee = routingFee.get(paymentConfig.getCourseFee()).add(feeEntry.getValue());
-                routingFee.put(paymentConfig.getCourseFee(), RoutingFee);
-            } else if (feeEntry.getKey().equals("instrument")) {
-                BigDecimal RoutingFee = routingFee.get(paymentConfig.getInstrumentFee()).add(feeEntry.getValue());
-                routingFee.put(paymentConfig.getInstrumentFee(), RoutingFee);
-            } else if (feeEntry.getKey().equals("accessories")) {
-                BigDecimal RoutingFee = routingFee.get(paymentConfig.getAccessoriesFee()).add(feeEntry.getValue());
-                routingFee.put(paymentConfig.getAccessoriesFee(), RoutingFee);
-            } else if (feeEntry.getKey().equals("other")) {
-                BigDecimal RoutingFee = routingFee.get(paymentConfig.getOtherFee()).add(feeEntry.getValue());
-                routingFee.put(paymentConfig.getOtherFee(), RoutingFee);
-            }
-        }
         return routingFee;
     }
 
@@ -353,14 +639,9 @@ public class PayServiceImpl implements PayService {
             return routingFee;
         }
 
-        SysPaymentConfig paymentConfig = sysPaymentConfigService.findPaymentConfigByOrganId(organId);
-
         int payOrderNums = studentPaymentOrderService.findPayOrderNum(); //获取支付中和成功的订单数
         //前几笔收入私户
-        Integer nums = Integer.parseInt(sysConfigDao.findConfigValue("per_account_nums"));
-        if (paymentConfig != null && paymentConfig.getType().equals(1)) {
-            nums = paymentConfig.getPerScale();
-        }
+        int nums = Integer.parseInt(sysConfigDao.findConfigValue("per_account_nums"));
 
         String type = null;
         int rem = (payOrderNums + 1) % 10;
@@ -371,25 +652,6 @@ public class PayServiceImpl implements PayService {
         }
         routingFee.put(type, amount);
 
-        if (paymentConfig == null || !paymentConfig.getType().equals(2)) {
-            return routingFee;
-        }
-        routingFee.put(type, BigDecimal.ZERO);
-        for (Map.Entry<String, BigDecimal> feeEntry : fee.entrySet()) {
-            if (feeEntry.getKey().equals("course")) {
-                BigDecimal RoutingFee = routingFee.get(paymentConfig.getCourseFee()).add(feeEntry.getValue());
-                routingFee.put(paymentConfig.getCourseFee(), RoutingFee);
-            } else if (feeEntry.getKey().equals("instrument")) {
-                BigDecimal RoutingFee = routingFee.get(paymentConfig.getInstrumentFee()).add(feeEntry.getValue());
-                routingFee.put(paymentConfig.getInstrumentFee(), RoutingFee);
-            } else if (feeEntry.getKey().equals("accessories")) {
-                BigDecimal RoutingFee = routingFee.get(paymentConfig.getAccessoriesFee()).add(feeEntry.getValue());
-                routingFee.put(paymentConfig.getAccessoriesFee(), RoutingFee);
-            } else if (feeEntry.getKey().equals("other")) {
-                BigDecimal RoutingFee = routingFee.get(paymentConfig.getOtherFee()).add(feeEntry.getValue());
-                routingFee.put(paymentConfig.getOtherFee(), RoutingFee);
-            }
-        }
         return routingFee;
     }
 

文件差异内容过多而无法显示
+ 246 - 244
mec-biz/src/main/java/com/ym/mec/biz/service/impl/PracticeGroupServiceImpl.java


+ 31 - 10
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentOrderServiceImpl.java

@@ -13,6 +13,7 @@ import com.ym.mec.biz.dal.page.SporadicOrderQueryInfo;
 import com.ym.mec.biz.dal.page.StudentPaymentOrderQueryInfo;
 import com.ym.mec.biz.service.*;
 import com.ym.mec.common.dal.BaseDAO;
+import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
 import com.ym.mec.thirdparty.adapay.Payment;
@@ -95,13 +96,14 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
 
     @Override
     public void queryOrderStatus() throws Exception {
-        yqPayQuery();
-        adaPayQuery();
+        yqPayQuery(null);
+        adaPayQuery(null);
     }
 
-    private void yqPayQuery() throws Exception {
-        List<StudentPaymentOrder> payingOrders = findOrdersByStatus(DealStatusEnum.ING, "YQPAY");
-
+    private void yqPayQuery(List<StudentPaymentOrder> payingOrders) throws Exception {
+        if (payingOrders == null) {
+            payingOrders = findOrdersByStatus(DealStatusEnum.ING, "YQPAY");
+        }
         if (payingOrders.size() == 0) {
             return;
         }
@@ -144,8 +146,10 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
         }
     }
 
-    private void adaPayQuery() throws Exception {
-        List<StudentPaymentOrder> payingOrders = findOrdersByStatus(DealStatusEnum.ING, "ADAPAY");
+    private void adaPayQuery(List<StudentPaymentOrder> payingOrders) throws Exception {
+        if (payingOrders == null) {
+            payingOrders = findOrdersByStatus(DealStatusEnum.ING, "ADAPAY");
+        }
         if (payingOrders.size() == 0) {
             return;
         }
@@ -163,7 +167,7 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
             rpMap.put("orderNo", (String) payment.get("id"));
             rpMap.put("channelType", (String) payment.get("pay_channel"));
             String status = (String) payment.get("status");
-            if(payment.containsKey("error_msg")){
+            if (payment.containsKey("error_msg")) {
                 rpMap.put("remarks", (String) payment.get("error_msg"));
             }
             if (status.equals("succeeded")) {
@@ -215,7 +219,7 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
             sporadicChargeInfoService.renewForCallback(order);
         } else if (order.getType().equals(OrderTypeEnum.PRACTICE_GROUP_BUY) || order.getType().equals(OrderTypeEnum.PRACTICE_GROUP_RENEW)) {
             practiceGroupService.orderCallback(order);
-        }else if (order.getType().equals(OrderTypeEnum.REPAIR)) {
+        } else if (order.getType().equals(OrderTypeEnum.REPAIR)) {
             studentRepairService.orderCallback(order);
         }
     }
@@ -250,7 +254,7 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
                     sporadicChargeInfoService.renewForCallback(order);
                 } else if (order.getType().equals(OrderTypeEnum.PRACTICE_GROUP_BUY) || order.getType().equals(OrderTypeEnum.PRACTICE_GROUP_RENEW)) {
                     practiceGroupService.orderCallback(order);
-                }else if (order.getType().equals(OrderTypeEnum.REPAIR)) {
+                } else if (order.getType().equals(OrderTypeEnum.REPAIR)) {
                     studentRepairService.orderCallback(order);
                 }
             } catch (Exception e) {
@@ -327,4 +331,21 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
         pageInfo.setRows(dataList);
         return pageInfo;
     }
+
+    @Override
+    public Boolean getOrderStatus(Long id) throws Exception {
+        StudentPaymentOrder studentPaymentOrder = studentPaymentOrderDao.get(id);
+        studentPaymentOrder.setStatus(DealStatusEnum.ING);
+        if(studentPaymentOrderDao.update(studentPaymentOrder) <= 0){
+            throw new BizException("订单状态更新失败,请重试");
+        }
+        List<StudentPaymentOrder> orderList = new ArrayList<>();
+        orderList.add(studentPaymentOrder);
+        if (studentPaymentOrder.getPaymentChannel().equals("ADAPAY")) {
+            adaPayQuery(orderList);
+        } else if (studentPaymentOrder.getPaymentChannel().equals("YQPAY")) {
+            yqPayQuery(orderList);
+        }
+        return true;
+    }
 }

+ 115 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentRouteOrderServiceImpl.java

@@ -0,0 +1,115 @@
+package com.ym.mec.biz.service.impl;
+
+import com.ym.mec.biz.dal.dao.StudentPaymentOrderDao;
+import com.ym.mec.biz.dal.dao.StudentPaymentRouteOrderDao;
+import com.ym.mec.biz.dal.dao.SysUserCashAccountDao;
+import com.ym.mec.biz.dal.dto.PageInfoOrder;
+import com.ym.mec.biz.dal.dto.StudentPaymentRouteOrderDto;
+import com.ym.mec.biz.dal.entity.StudentPaymentRouteOrder;
+import com.ym.mec.biz.dal.enums.DealStatusEnum;
+import com.ym.mec.biz.dal.enums.GroupType;
+import com.ym.mec.biz.dal.enums.SporadicChargeTypeEnum;
+import com.ym.mec.biz.dal.page.StudentPaymentOrderQueryInfo;
+import com.ym.mec.biz.service.StudentPaymentRouteOrderService;
+import com.ym.mec.common.dal.BaseDAO;
+import com.ym.mec.common.exception.BizException;
+import com.ym.mec.common.service.IdGeneratorService;
+import com.ym.mec.common.service.impl.BaseServiceImpl;
+import com.ym.mec.util.collection.MapUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.math.BigDecimal;
+import java.util.*;
+
+@Service
+public class StudentPaymentRouteOrderServiceImpl extends BaseServiceImpl<Long, StudentPaymentRouteOrder> implements StudentPaymentRouteOrderService {
+
+    @Autowired
+    private StudentPaymentRouteOrderDao studentPaymentRouteOrderDao;
+    @Autowired
+    private SysUserCashAccountDao sysUserCashAccountDao;
+    @Autowired
+    private StudentPaymentOrderDao studentPaymentOrderDao;
+    @Autowired
+    private IdGeneratorService idGeneratorService;
+
+    @Override
+    public BaseDAO<Long, StudentPaymentRouteOrder> getDAO() {
+        return studentPaymentRouteOrderDao;
+    }
+
+    @Override
+    public PageInfoOrder<StudentPaymentRouteOrderDto> OrderQueryPage(StudentPaymentOrderQueryInfo queryInfo) {
+        PageInfoOrder<StudentPaymentRouteOrderDto> pageInfo = new PageInfoOrder<>(queryInfo.getPage(), queryInfo.getRows());
+        Map<String, Object> params = new HashMap<String, Object>();
+        MapUtil.populateMap(params, queryInfo);
+
+        List<StudentPaymentRouteOrderDto> dataList = new ArrayList<>();
+        int count = this.findCount(params);
+
+        BigDecimal totalUserBalance = sysUserCashAccountDao.getTotalUserBalance(params);
+        pageInfo.setTotalUserBalance(totalUserBalance);
+        if (count > 0) {
+            pageInfo.setTotal(count);
+            params.put("offset", pageInfo.getOffset());
+            dataList = studentPaymentRouteOrderDao.queryPageOrder(params);
+
+            StudentPaymentRouteOrderDto orderMoneyAmount = studentPaymentRouteOrderDao.getOrderMoneyAmount(params);
+            BigDecimal totalExpectAmount = orderMoneyAmount.getExpectAmount() != null ? orderMoneyAmount.getExpectAmount() : BigDecimal.ZERO;
+            BigDecimal totalActualAmount = orderMoneyAmount.getActualAmount() != null ? orderMoneyAmount.getActualAmount() : BigDecimal.ZERO;
+            BigDecimal totalBalancePaymentAmount = orderMoneyAmount.getBalancePaymentAmount() != null ? orderMoneyAmount.getBalancePaymentAmount() : BigDecimal.ZERO;
+
+            params.put("chargeType", SporadicChargeTypeEnum.RECHARGE);
+            BigDecimal totalChargeAmount = studentPaymentRouteOrderDao.getChargeAmount(params);
+            totalChargeAmount = totalChargeAmount != null ? totalChargeAmount : BigDecimal.ZERO;
+            BigDecimal totalAdvanceAmount = totalChargeAmount.subtract(totalBalancePaymentAmount);
+
+            pageInfo.setTotalAdvanceAmount(totalAdvanceAmount);
+            pageInfo.setTotalExpectAmount(totalExpectAmount);
+            pageInfo.setTotalActualAmount(totalActualAmount);
+            pageInfo.setTotalRevenueAmount(totalActualAmount.subtract(totalAdvanceAmount));
+        }
+        pageInfo.setRows(dataList);
+        return pageInfo;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public StudentPaymentRouteOrderDto addOutOrder(StudentPaymentRouteOrderDto studentPaymentRouteOrderDto) {
+        Date nowDate = new Date();
+        String orderNo = idGeneratorService.generatorId("payment") + "";
+
+        studentPaymentRouteOrderDto.setOrderNo(orderNo);
+        studentPaymentRouteOrderDto.setGroupType(GroupType.OUTORDER);
+        studentPaymentRouteOrderDto.setExpectAmount(studentPaymentRouteOrderDto.getActualAmount());
+        studentPaymentRouteOrderDto.setStatus(DealStatusEnum.SUCCESS);
+        studentPaymentRouteOrderDto.setCreateTime(nowDate);
+        studentPaymentRouteOrderDto.setUpdateTime(nowDate);
+        studentPaymentOrderDao.insert(studentPaymentRouteOrderDto);
+        StudentPaymentRouteOrder studentPaymentRouteOrder = new StudentPaymentRouteOrder();
+        studentPaymentRouteOrder.setOrderNo(orderNo);
+        studentPaymentRouteOrder.setRouteOrganId(studentPaymentRouteOrderDto.getOrganId());
+        studentPaymentRouteOrder.setRouteAmount(studentPaymentRouteOrderDto.getActualAmount());
+        studentPaymentRouteOrder.setRouteBalanceAmount(BigDecimal.ZERO);
+        studentPaymentRouteOrder.setFeeFlag("N");
+        studentPaymentRouteOrderDao.insert(studentPaymentRouteOrder);
+        return studentPaymentRouteOrderDto;
+    }
+
+    @Override
+    public StudentPaymentRouteOrder addRouteOrder(String orderNo, Integer routeOrganId, BigDecimal routeBalanceAmount) {
+        StudentPaymentRouteOrder studentPaymentRouteOrder = new StudentPaymentRouteOrder();
+        studentPaymentRouteOrder.setOrderNo(orderNo);
+        studentPaymentRouteOrder.setRouteOrganId(routeOrganId);
+        studentPaymentRouteOrder.setRouteAmount(BigDecimal.ZERO);
+        studentPaymentRouteOrder.setRouteBalanceAmount(routeBalanceAmount);
+        studentPaymentRouteOrder.setFeeFlag("N");
+        if (studentPaymentRouteOrderDao.insert(studentPaymentRouteOrder) <= 0) {
+            throw new BizException("插入订单失败");
+        }
+        return studentPaymentRouteOrder;
+    }
+
+}

+ 2 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRechargeServiceImpl.java

@@ -75,8 +75,8 @@ public class StudentRechargeServiceImpl extends BaseServiceImpl<String, StudentR
 		studentRechargeDao.insert(studentRecharge);
 
 		try {
-			return payService.getPayMap(amount, studentRecharge.getOrderNo(), "https://pay.dayaedu.com/api/yqpay/notify", "http://dev.dayaedu.com", "充值",
-					"充值",userId);
+			return payService.getPayMap(amount, BigDecimal.ZERO,studentRecharge.getOrderNo(), "https://pay.dayaedu.com/api/yqpay/notify", "http://dev.dayaedu.com", "充值",
+					"充值",userId,null);
 		} catch (Exception e) {
 			throw new BizException("调用支付接口出错", e);
 		}

+ 4 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRegistrationServiceImpl.java

@@ -763,6 +763,10 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
 
         //成功报名状态变更
         StudentRegistration studentRegistration = studentRegistrationDao.queryByUserIdAndMusicGroupId(studentPaymentOrder.getUserId(), studentPaymentOrder.getMusicGroupId());
+
+        if(studentRegistration.getPaymentStatus().equals(PaymentStatusEnum.YES)){
+            return studentPaymentOrder;
+        }
         MusicGroupSubjectPlan musicOneSubjectClassPlan = musicGroupSubjectPlanService.getMusicOneSubjectClassPlan(studentRegistration.getMusicGroupId(), studentRegistration.getActualSubjectId());
 
         if (studentPaymentOrder.getStatus().equals(DealStatusEnum.SUCCESS)) {

+ 14 - 16
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRepairServiceImpl.java

@@ -51,6 +51,8 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
     private SysMessageService sysMessageService;
     @Autowired
     private StudentDao studentDao;
+    @Autowired
+    private StudentPaymentRouteOrderService studentPaymentRouteOrderService;
 
     @Override
     public BaseDAO<Integer, StudentRepair> getDAO() {
@@ -132,13 +134,14 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
         studentPaymentOrderService.insert(studentPaymentOrder);
         studentPaymentOrder.setVersion(0);
 
+        BigDecimal balance = BigDecimal.ZERO;
         if (repairInfo.getIsUseBalancePayment() && amount.compareTo(BigDecimal.ZERO) > 0) {
             SysUserCashAccount userCashAccount = sysUserCashAccountService.getLocked(repairInfo.getStudentId());
             if (userCashAccount == null) {
                 throw new BizException("用户账户找不到");
             }
             if (userCashAccount.getBalance() != null && userCashAccount.getBalance().compareTo(BigDecimal.ZERO) > 0) {
-                BigDecimal balance = amount.compareTo(userCashAccount.getBalance()) >= 0 ? userCashAccount.getBalance() : amount;
+                balance = amount.compareTo(userCashAccount.getBalance()) >= 0 ? userCashAccount.getBalance() : amount;
                 amount = amount.subtract(balance);
                 studentPaymentOrder.setActualAmount(amount);
                 studentPaymentOrder.setBalancePaymentAmount(balance);
@@ -149,6 +152,7 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
         studentPaymentOrder.setVersion(studentPaymentOrder.getVersion() + 1);
 
         if (amount.compareTo(BigDecimal.ZERO) == 0) {
+            studentPaymentRouteOrderService.addRouteOrder(orderNo, repairInfo.getOrganId(), balance);
             Map<String, String> notifyMap = new HashMap<>();
             notifyMap.put("tradeState", "1");
             notifyMap.put("merOrderNo", studentPaymentOrder.getOrderNo());
@@ -169,20 +173,16 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
 
         Map payMap = payService.getPayMap(
                 amount,
+                balance,
                 orderNo,
                 baseApiUrl + "/api-student/studentOrder/notify",
                 baseApiUrl + "/api-student/studentOrder/paymentResult?type=edu&orderNo=" + orderNo,
                 "乐器维修",
                 "乐器维修",
-                repairInfo.getStudentId(),
-                classFee,
-                repairInfo.getOrganId()
+                repairInfo.getOrganId(),
+                "repair"
         );
 
-        Map<String, BigDecimal> routingFee = (Map<String, BigDecimal>) payMap.get("routingFee");
-        studentPaymentOrder.setRoutingOrganId((Integer) payMap.get("routingOrganId"));
-        studentPaymentOrder.setComAmount(routingFee.get("COM"));
-        studentPaymentOrder.setPerAmount(routingFee.get("PER"));
         studentPaymentOrder.setMerNos((String) payMap.get("routingMerNos"));
         studentPaymentOrder.setPaymentChannel((String) payMap.get("type"));
         studentPaymentOrder.setUpdateTime(date);
@@ -288,13 +288,14 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
         studentPaymentOrderService.insert(studentPaymentOrder);
         studentPaymentOrder.setVersion(0);
 
+        BigDecimal balance = BigDecimal.ZERO;
         if (studentRepair.getIsUseBalancePayment() && amount.compareTo(BigDecimal.ZERO) > 0) {
             SysUserCashAccount userCashAccount = sysUserCashAccountService.getLocked(studentRepair.getStudentId());
             if (userCashAccount == null) {
                 throw new BizException("用户账户找不到");
             }
             if (userCashAccount.getBalance() != null && userCashAccount.getBalance().compareTo(BigDecimal.ZERO) > 0) {
-                BigDecimal balance = amount.compareTo(userCashAccount.getBalance()) >= 0 ? userCashAccount.getBalance() : amount;
+                balance = amount.compareTo(userCashAccount.getBalance()) >= 0 ? userCashAccount.getBalance() : amount;
                 amount = amount.subtract(balance);
                 studentPaymentOrder.setActualAmount(amount);
                 studentPaymentOrder.setBalancePaymentAmount(balance);
@@ -305,6 +306,7 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
         studentPaymentOrder.setVersion(studentPaymentOrder.getVersion() + 1);
 
         if (amount.compareTo(BigDecimal.ZERO) == 0) {
+            studentPaymentRouteOrderService.addRouteOrder(orderNo, studentRepair.getOrganId(), studentPaymentOrder.getExpectAmount());
             Map<String, String> notifyMap = new HashMap<>();
             notifyMap.put("tradeState", "1");
             notifyMap.put("merOrderNo", studentPaymentOrder.getOrderNo());
@@ -325,20 +327,16 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
 
         Map payMap = payService.getPayMap(
                 amount,
+                balance,
                 orderNo,
                 baseApiUrl + "/api-student/studentOrder/notify",
                 baseApiUrl + "/api-student/studentOrder/paymentResult?orderNo=" + orderNo,
                 "乐器维修",
                 "乐器维修",
-                studentRepair.getStudentId(),
-                classFee,
-                studentRepair.getOrganId()
+                studentRepair.getOrganId(),
+                "repair"
         );
 
-        Map<String, BigDecimal> routingFee = (Map<String, BigDecimal>) payMap.get("routingFee");
-        studentPaymentOrder.setRoutingOrganId((Integer) payMap.get("routingOrganId"));
-        studentPaymentOrder.setComAmount(routingFee.get("COM"));
-        studentPaymentOrder.setPerAmount(routingFee.get("PER"));
         studentPaymentOrder.setMerNos((String) payMap.get("routingMerNos"));
         studentPaymentOrder.setPaymentChannel((String) payMap.get("type"));
         studentPaymentOrder.setUpdateTime(date);

+ 13 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysPaymentConfigServiceImpl.java

@@ -2,12 +2,15 @@ package com.ym.mec.biz.service.impl;
 
 import com.ym.mec.biz.dal.dao.SysPaymentConfigDao;
 import com.ym.mec.biz.dal.entity.SysPaymentConfig;
+import com.ym.mec.biz.dal.enums.PaymentChannelEnum;
 import com.ym.mec.biz.service.SysPaymentConfigService;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 @Service
 public class SysPaymentConfigServiceImpl extends BaseServiceImpl<Integer, SysPaymentConfig> implements SysPaymentConfigService {
     @Autowired
@@ -22,4 +25,14 @@ public class SysPaymentConfigServiceImpl extends BaseServiceImpl<Integer, SysPay
     public SysPaymentConfig findPaymentConfigByOrganId(Integer organId) {
         return sysPaymentConfigDao.findPaymentConfigByOrganId(organId);
     }
+
+    @Override
+    public List<SysPaymentConfig> findPaymentConfigByOrganIds(List<Integer> organIds) {
+        return sysPaymentConfigDao.findPaymentConfigByOrganIds(organIds);
+    }
+
+    @Override
+    public List<SysPaymentConfig> getPaymentConfigs(PaymentChannelEnum payType) {
+        return sysPaymentConfigDao.getPaymentConfigs(payType);
+    }
 }

+ 12 - 4
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TenantPaymentOrderServiceImpl.java

@@ -146,7 +146,7 @@ public class TenantPaymentOrderServiceImpl extends BaseServiceImpl<Long, TenantP
         tenantPaymentOrder.setUserId(userId);
         tenantPaymentOrder.setTransMinutes(tenantEntryActivities.getPurchaseMinutes());
         tenantPaymentOrder.setGiveMinutes(tenantEntryActivities.getGiveMinutes());
-        tenantPaymentOrder.setOrderNo(idGeneratorService.generatorId("tenant_payment") + "");
+        tenantPaymentOrder.setOrderNo(idGeneratorService.generatorId("payment") + "");
         tenantPaymentOrder.setType(TenantPaymentType.RECHARGE);
         tenantPaymentOrder.setExpectAmount(tenantEntryActivities.getDiscountPrice());
         tenantPaymentOrder.setStatus(DealStatusEnum.ING);
@@ -168,9 +168,17 @@ public class TenantPaymentOrderServiceImpl extends BaseServiceImpl<Long, TenantP
 
         try {
 
-            Map<String, Object> payMap = payService.getPayMap(tenantPaymentOrder.getExpectAmount(), tenantPaymentOrder.getOrderNo(), baseApiUrl
-                            + "/api-teacher/teacherOrder/notify", baseApiUrl + "/api-teacher/teacherOrder/paymentResult?orderNo=" + tenantPaymentOrder.getOrderNo(),
-                    "商户入驻", "商户充值", userId, classFee, organId, "sdaya");
+            Map<String, Object> payMap = payService.getPayMap(
+                    tenantPaymentOrder.getExpectAmount(),
+                    BigDecimal.ZERO,
+                    tenantPaymentOrder.getOrderNo(),
+                    baseApiUrl + "/api-teacher/teacherOrder/notify",
+                    baseApiUrl + "/api-teacher/teacherOrder/paymentResult?orderNo=" + tenantPaymentOrder.getOrderNo(),
+                    "商户入驻",
+                    "商户充值",
+                    organId,
+                    "tenantPayment"
+            );
 
             Map<String, BigDecimal> routingFee = (Map<String, BigDecimal>) payMap.get("routingFee");
             tenantPaymentOrder.setComAmount(routingFee.get("COM"));

+ 16 - 13
mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java

@@ -46,7 +46,7 @@ import java.util.stream.Collectors;
 
 @Service
 public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> implements VipGroupService {
-	
+
 	@Autowired
 	private VipGroupDao vipGroupDao;
 	@Autowired
@@ -137,6 +137,8 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 	private OrganizationDao organizationDao;
 	@Autowired
 	private GroupClassService groupClassService;
+	@Autowired
+	private StudentPaymentRouteOrderService studentPaymentRouteOrderService;
 
 	private static final Logger LOGGER = LoggerFactory
 			.getLogger(VipGroup.class);
@@ -233,7 +235,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 			}
 		}else{
 			VipGroupDefaultClassesCycle vipGroupDefaultClassesCycle = vipGroupDefaultClassesCycleDao.findByOrganAndClassTimes(totalClassTimes);
-			
+
 			if (vipGroupDefaultClassesCycle != null) {
 				int month = DateUtil.monthsBetween(firstCourseSchedule.getStartClassTime(), latestCourseSchedule.getEndClassTime());
 				if (month > vipGroupDefaultClassesCycle.getMonth()) {
@@ -1243,7 +1245,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 
 	@Override
 	@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
-	public Map buyVipGroup(VipGroupBuyParamsDto vipGroupBuyParams) {
+	public Map buyVipGroup(VipGroupBuyParamsDto vipGroupBuyParams) throws Exception {
 		SysUser user = sysUserFeignService.queryUserInfo();
 		if(user == null){
 			throw new BizException("用户信息获取失败");
@@ -1322,11 +1324,14 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 		studentPaymentOrder.setActualAmount(studentPaymentOrder.getExpectAmount());
 		studentPaymentOrder.setMusicGroupId(vipGroup.getId().toString());
 		studentPaymentOrder.setClassGroupId(classGroup.getId());
+		studentPaymentOrder.setOrganId(vipGroup.getOrganId());
 		studentPaymentOrder.setVersion(0);
 		studentPaymentOrderDao.insert(studentPaymentOrder);
 
 		BigDecimal amount=vipGroup.getTotalPrice();
+		BigDecimal balance = BigDecimal.ZERO;
 		if("36".equals(user.getOrganId())){
+			studentPaymentRouteOrderService.addRouteOrder(orderNo, vipGroup.getOrganId(), vipGroup.getTotalPrice());
 			studentPaymentOrder.setPaymentChannel("BALANCE");
 			studentPaymentOrder.setActualAmount(new BigDecimal(0));
 			studentPaymentOrder.setBalancePaymentAmount(amount);
@@ -1343,6 +1348,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 			}
 			studentPaymentOrder.setPaymentChannel("BALANCE");
 			if(userCashAccount.getBalance().subtract(vipGroup.getTotalPrice()).doubleValue() >= 0){
+				studentPaymentRouteOrderService.addRouteOrder(orderNo, vipGroup.getOrganId(), vipGroup.getTotalPrice());
 				// 更新订单信息
 				studentPaymentOrder.setActualAmount(new BigDecimal(0));
 				studentPaymentOrder.setBalancePaymentAmount(amount);
@@ -1361,7 +1367,8 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 				return result;
 			}else{
 				if (userCashAccount.getBalance().doubleValue() > 0) {
-					sysUserCashAccountService.updateBalance(user.getId(), userCashAccount.getBalance().negate(), PlatformCashAccountDetailTypeEnum.PAY_FEE, "VIP课购买");
+					balance = userCashAccount.getBalance();
+					sysUserCashAccountService.updateBalance(user.getId(), balance.negate(), PlatformCashAccountDetailTypeEnum.PAY_FEE, "VIP课购买");
 					amount = amount.subtract(userCashAccount.getBalance());
 					studentPaymentOrder.setActualAmount(amount);
 					studentPaymentOrder.setBalancePaymentAmount(userCashAccount.getBalance());
@@ -1385,17 +1392,16 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 		classFee.put("instrument",BigDecimal.ZERO);
 		classFee.put("accessories",BigDecimal.ZERO);
 		classFee.put("other",BigDecimal.ZERO);
-		try {
 			Map<String,Object> payMap = payService.getPayMap(
 					amount,
+					balance,
 					orderNo,
 					baseApiUrl+"/api-student/studentOrder/notify",
 					baseApiUrl+"/api-student/studentOrder/paymentResult?orderNo=" + orderNo,
 					"vip课购买",
 					vipGroup.getName(),
-					user.getId(),
-					classFee,
-					vipGroup.getOrganId()
+					vipGroup.getOrganId(),
+					"vipBuy"
 			);
 
 			Map<String,BigDecimal> routingFee = (Map<String,BigDecimal>)payMap.get("routingFee");
@@ -1409,9 +1415,6 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 			studentPaymentOrderService.update(studentPaymentOrder);
 
 			return payMap;
-		} catch (Exception e) {
-			throw new BizException("调用支付接口出错", e);
-		}
 
 	}
 
@@ -2060,7 +2063,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 		if (null == studentPaymentOrder) {
 			throw new BizException("未找到原订单信息!");
 		}
-		
+
 		if(status ==StudentApplyRefundsStatus.ING){
 			throw new BizException("状态不正确");
 		}
@@ -2926,7 +2929,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 		}
 		if(noCreateSuccessVipGroups != null && noCreateSuccessVipGroups.size() > 0){
 			vipGroupDao.batchUpdate(noCreateSuccessVipGroups);
-			
+
 			for (VipGroup noCreateSuccessVipGroup : noCreateSuccessVipGroups) {
 				//推送消息
 				if(noCreateSuccessVipGroup.getStatus().equals(VipGroupStatusEnum.CANCEL)) {

+ 7 - 4
mec-biz/src/main/resources/config/mybatis/StudentManageDao.xml

@@ -388,7 +388,7 @@
     <sql id="queryMusicGroupStudentSql">
         <where>
             <if test="search != null and search != ''">
-                AND (su.id_ = #{search} OR su.username_ like CONCAT("%",#{search},"%") OR su.phone_ like CONCAT("%",#{search},"%"))
+                AND (su.id_ = #{search} OR su.username_ LIKE CONCAT("%",#{search},"%") OR su.phone_ LIKE CONCAT("%",#{search},"%"))
             </if>
             <if test="subjectId != null">
                 AND sr.actual_subject_id_ = #{subjectId}
@@ -399,8 +399,11 @@
             <if test="studentStatus != null and studentStatus != ''">
                 AND sr.music_group_status_ = #{studentStatus}
             </if>
-            <if test="paymentStatus != null">
-                AND sr.payment_status_ = #{paymentStatus}
+            <if test="paymentStatus != null and paymentStatus == 1">
+                AND sr.payment_status_ = 2
+            </if>
+            <if test="paymentStatus != null and paymentStatus == 0">
+                AND sr.payment_status_ IN (0,1)
             </if>
             <if test="musicGroupId != null and musicGroupId != ''">
                 AND sr.music_group_id_ = #{musicGroupId}
@@ -433,7 +436,7 @@
     </resultMap>
     <select id="queryMusicGroupStudent" resultMap="MusicGroupStudentsDto">
         SELECT sr.user_id_,su.username_ real_name_,su.gender_,su.phone_ parents_phone_,sr.current_grade_,
-        sr.current_class_,sr.music_group_status_ student_status_,sr.payment_status_,
+        sr.current_class_,sr.music_group_status_ student_status_,CASE WHEN sr.payment_status_ = 2 THEN 1 ELSE 0 END payment_status_,
         s.name_ subject_name_,sr.music_group_id_,case when su.password_ is null then 0 else 1 end isActive_,
         IF(DATE_FORMAT(sr.create_time_,'%Y-%m-%d') > DATE_FORMAT(mg.payment_expire_date_,'%Y-%m-%d'),1,0) is_new_student_
         FROM student_registration sr

+ 2 - 2
mec-biz/src/main/resources/config/mybatis/StudentPaymentOrderMapper.xml

@@ -87,7 +87,7 @@
          per_amount_,
          balance_payment_amount_, remit_fee_, trans_no_,
          status_, memo_, create_time_, update_time_, payment_channel_, payment_business_channel_,
-         payment_account_no_, mer_nos_, order_no_, music_group_id_, class_group_id_)
+         payment_account_no_, mer_nos_, order_no_, music_group_id_, class_group_id_,pay_time_)
         VALUES (#{id}, #{groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
                 #{userId}, #{organId}, #{routingOrganId},
                 #{type,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
@@ -96,7 +96,7 @@
                 #{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}, #{memo}, now(), now(),
                 #{paymentChannel}, #{paymentBusinessChannel}, #{paymentAccountNo}, #{merNos}, #{orderNo},
                 #{musicGroupId},
-                #{classGroupId})
+                #{classGroupId},#{payTime})
     </insert>
 
     <!-- 根据主键查询一条记录 -->

+ 186 - 0
mec-biz/src/main/resources/config/mybatis/StudentPaymentRouteOrderMapper.xml

@@ -0,0 +1,186 @@
+<?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.ym.mec.biz.dal.dao.StudentPaymentRouteOrderDao">
+    <resultMap id="StudentPaymentRouteOrder" type="com.ym.mec.biz.dal.entity.StudentPaymentRouteOrder">
+        <!--@mbg.generated-->
+        <!--@Table student_payment_route_order-->
+        <id column="id_" property="id"/>
+        <result column="route_organ_id_" property="routeOrganId"/>
+        <result column="route_amount_" property="routeAmount"/>
+        <result column="route_balance_amount_" property="routeBalanceAmount"/>
+        <result column="mer_no_" property="merNo"/>
+        <result column="order_no_" property="orderNo"/>
+        <result column="fee_flag_" property="feeFlag"/>
+    </resultMap>
+
+    <resultMap id="StudentPaymentRouteOrderDto" type="com.ym.mec.biz.dal.dto.StudentPaymentRouteOrderDto"
+               extends="com.ym.mec.biz.dal.dao.StudentPaymentOrderDao.StudentPaymentOrder">
+        <result column="username_" property="user.username"/>
+        <result column="phone_" property="user.phone"/>
+        <result column="route_organ_id_" property="routeOrganId"/>
+        <result column="route_amount_" property="routeAmount"/>
+        <result column="route_balance_amount_" property="routeBalanceAmount"/>
+        <result column="mer_no_" property="merNo"/>
+        <result column="order_no_" property="orderNo"/>
+        <result column="fee_flag_" property="feeFlag"/>
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        <!--@mbg.generated-->
+        id_, route_organ_id_, route_amount_,route_balance_amount_, mer_no_, order_no_, fee_flag_
+    </sql>
+    <select id="get" parameterType="java.lang.Long" resultMap="StudentPaymentRouteOrder">
+        <!--@mbg.generated-->
+        select
+        <include refid="Base_Column_List"/>
+        from student_payment_route_order
+        where id_ = #{id}
+    </select>
+    <delete id="delete" parameterType="java.lang.Long">
+        <!--@mbg.generated-->
+        delete from student_payment_route_order
+        where id_ = #{id}
+    </delete>
+    <insert id="insert" keyColumn="id_" keyProperty="id"
+            parameterType="com.ym.mec.biz.dal.entity.StudentPaymentRouteOrder" useGeneratedKeys="true">
+        <!--@mbg.generated-->
+        insert into student_payment_route_order (route_organ_id_, route_amount_,route_balance_amount_, mer_no_,
+        order_no_, fee_flag_)
+        values (#{routeOrganId}, #{routeAmount},#{routeBalanceAmount}, #{merNo}, #{orderNo}, #{feeFlag})
+    </insert>
+    <update id="update" parameterType="com.ym.mec.biz.dal.entity.StudentPaymentRouteOrder">
+        <!--@mbg.generated-->
+        update student_payment_route_order
+        <set>
+            <if test="routeOrganId != null">
+                route_organ_id_ = #{routeOrganId},
+            </if>
+            <if test="routeAmount != null">
+                route_amount_ = #{routeAmount},
+            </if>
+            <if test="merNo != null">
+                mer_no_ = #{merNo},
+            </if>
+            <if test="orderNo != null">
+                order_no_ = #{orderNo},
+            </if>
+        </set>
+        where id_ = #{id}
+    </update>
+
+    <insert id="batchAdd" parameterType="java.util.List" useGeneratedKeys="true" keyColumn="id"
+            keyProperty="id">
+        INSERT INTO student_payment_route_order
+        (order_no_,route_organ_id_, route_amount_,route_balance_amount_, mer_no_,fee_flag_)
+        VALUE
+        <foreach collection="routeOrders" item="routeOrder" separator=",">
+            (#{routeOrder.orderNo},#{routeOrder.routeOrganId},#{routeOrder.routeAmount},#{routeOrder.routeBalanceAmount},#{routeOrder.merNo},#{routeOrder.feeFlag})
+        </foreach>
+    </insert>
+
+    <select id="queryPageOrder" parameterType="map" resultMap="StudentPaymentRouteOrderDto">
+        SELECT spo.*,spro.*,u.username_,u.phone_ FROM student_payment_order spo
+        LEFT JOIN student_payment_route_order spro ON spo.order_no_ = spro.order_no_
+        left join sys_user u on spo.user_id_ = u.id_
+        <include refid="queryPaymentOrder"/>
+        ORDER BY spo.id_ DESC
+        <include refid="global.limit"/>
+    </select>
+    <select id="getOrderMoneyAmount" parameterType="map" resultMap="StudentPaymentRouteOrderDto">
+        SELECT SUM(spo.expect_amount_) expect_amount_,SUM(actual_amount_) actual_amount_,SUM(balance_payment_amount_)
+        balance_payment_amount_ FROM student_payment_order spo
+        <include refid="queryPaymentOrder"/>
+    </select>
+
+    <select id="getChargeAmount" parameterType="map" resultType="java.math.BigDecimal">
+        SELECT SUM(actual_amount_) FROM student_payment_order spo
+        LEFT JOIN sporadic_charge_info sci ON spo.music_group_id_ = sci.id_
+        <include refid="queryPaymentOrder"/>
+    </select>
+
+    <!-- 查询当前表的总记录数 -->
+    <select id="queryCount" resultType="int" parameterType="map">
+        SELECT COUNT(spo.id_) FROM student_payment_order spo
+        LEFT JOIN student_payment_route_order spro ON spo.order_no_ = spro.order_no_
+        LEFT JOIN sys_user u on spo.user_id_ = u.id_
+        <include refid="queryPaymentOrder"/>
+    </select>
+
+    <sql id="queryPaymentOrder">
+        <where>
+            <if test="organId != null">
+                AND FIND_IN_SET(spo.organ_id_,#{organId})
+            </if>
+            <if test="orderStartDate != null">
+                AND DATE_FORMAT(spo.create_time_,'%Y-%m-%d') &gt;= #{orderStartDate}
+            </if>
+            <if test="orderEndDate != null">
+                AND DATE_FORMAT(spo.create_time_,'%Y-%m-%d') &lt;= #{orderEndDate}
+            </if>
+            <if test="paymentType != null">
+                AND spo.type_ = #{paymentType}
+            </if>
+            <if test="remark != null">
+                AND spo.memo_ LIKE CONCAT('%',#{remark},'%')
+            </if>
+            <if test="studentId != null">
+                AND spo.user_id_ = #{studentId}
+            </if>
+            <if test="paymentStatus != null">
+                AND spo.status_ = #{paymentStatus}
+            </if>
+            <if test="paymentChannel != null">
+                AND spo.payment_channel_ NOT IN (#{paymentChannel})
+            </if>
+            <if test='orderType != null and orderType.toString()=="1".toString()'>
+                AND spo.com_amount_ > 0
+            </if>
+            <if test='orderType != null and orderType.toString()=="2".toString()'>
+                AND spo.per_amount_ > 0
+            </if>
+            <if test="routingOrganId != null">
+                AND FIND_IN_SET(spro.route_organ_id_,#{routingOrganId})
+            </if>
+            <if test="actualAmount != null">
+                AND spo.actual_amount_ >= #{actualAmount}
+            </if>
+
+            <if test="balancePaymentAmount != null">
+                AND spo.balance_payment_amount_ >= #{balancePaymentAmount}
+            </if>
+            <if test="orderNo != null">
+                AND spo.order_no_ = #{orderNo}
+            </if>
+            <if test="merNos != null">
+                AND spro.mer_no_ = #{merNos}
+            </if>
+            <if test="transNo != null">
+                AND spo.trans_no_ = #{transNo}
+            </if>
+            <if test="chargeType != null">
+                AND spo.group_type_='SPORADIC'
+                AND sci.charge_type_ = #{chargeType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
+            </if>
+        </where>
+    </sql>
+    <select id="getRouteOrders" resultMap="StudentPaymentRouteOrder">
+        SELECT *
+        FROM student_payment_route_order
+        WHERE order_no_ = #{orderNo}
+    </select>
+
+    <!-- 统计已收款项 -->
+    <select id="getRouteOrderAmount" resultType="java.math.BigDecimal">
+        SELECT SUM(route_amount_)
+        FROM student_payment_order spo
+        LEFT JOIN student_payment_route_order spro ON spo.order_no_ = spro.order_no_
+        WHERE spro.route_organ_id_ = #{routeOrganId} AND spo.payment_channel_ IN
+        <foreach collection="paymentChannelEnumList" item="paymentChannel" open="(" close=")" separator=",">
+            #{paymentChannel,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
+        </foreach>
+        <if test="startTime != null">
+            AND spo.create_time_ >= #{startTime,jdbcType=DATE}
+        </if>
+    </select>
+
+</mapper>

+ 87 - 73
mec-biz/src/main/resources/config/mybatis/SysPaymentConfigMapper.xml

@@ -4,22 +4,25 @@
     <resultMap id="SysPaymentConfig" type="com.ym.mec.biz.dal.entity.SysPaymentConfig">
         <!--@Table sys_payment_config-->
         <id column="id_" jdbcType="INTEGER" property="id"/>
-        <result column="organ_id_" jdbcType="INTEGER" property="organId"/>
-        <result column="type_" jdbcType="INTEGER" property="type"/>
-        <result column="organ_name" jdbcType="VARCHAR" property="organName"/>
-        <result column="per_scale_" jdbcType="INTEGER" property="perScale"/>
-        <result column="com_scale_" jdbcType="INTEGER" property="comScale"/>
-        <result column="course_fee_" jdbcType="VARCHAR" property="courseFee"/>
-        <result column="instrument_fee_" jdbcType="VARCHAR" property="instrumentFee"/>
-        <result column="accessories_fee_" jdbcType="VARCHAR" property="accessoriesFee"/>
-        <result column="other_fee_" jdbcType="VARCHAR" property="otherFee"/>
-        <result column="create_time_" jdbcType="TIMESTAMP" property="createTime"/>
-        <result column="update_time_" jdbcType="TIMESTAMP" property="updateTime"/>
+        <result column="organ_id_" property="organId"/>
+        <result column="pay_type_" property="payType"/>
+        <result column="yq_mer_no_" property="yqMerNo"/>
+        <result column="hf_mer_no_" property="hfMerNo"/>
+        <result column="type_" property="type"/>
+        <result column="route_scale_" property="routeScale"/>
+        <result column="organ_name" property="organName"/>
+        <result column="per_scale_" property="perScale"/>
+        <result column="com_scale_" property="comScale"/>
+        <result column="course_fee_" property="courseFee"/>
+        <result column="instrument_fee_" property="instrumentFee"/>
+        <result column="accessories_fee_" property="accessoriesFee"/>
+        <result column="other_fee_" property="otherFee"/>
+        <result column="create_time_" property="createTime"/>
+        <result column="update_time_" property="updateTime"/>
     </resultMap>
     <sql id="Base_Column_List">
         <!--@mbg.generated-->
-        id_, organ_id_,type_, per_scale_, com_scale_, course_fee_, instrument_fee_, accessories_fee_,
-        other_fee_, create_time_, update_time_
+        id_, organ_id_,pay_type_,yq_mer_no_,hf_mer_no_,type_,route_scale_,create_time_, update_time_
     </sql>
     <select id="get" parameterType="java.lang.Integer" resultMap="SysPaymentConfig">
         <!--@mbg.generated-->
@@ -29,7 +32,8 @@
         where id_ = #{id,jdbcType=INTEGER}
     </select>
     <delete id="delete" parameterType="java.lang.Integer">
-        delete from sys_payment_config
+        delete
+        from sys_payment_config
         where id_ = #{id,jdbcType=INTEGER}
     </delete>
     <insert id="insert" keyColumn="id_" keyProperty="id" parameterType="com.ym.mec.biz.dal.entity.SysPaymentConfig"
@@ -37,29 +41,23 @@
         <!--@mbg.generated-->
         insert into sys_payment_config
         <trim prefix="(" suffix=")" suffixOverrides=",">
-            <if test="type != null">
-                type_,
-            </if>
             <if test="organId != null">
                 organ_id_,
             </if>
-            <if test="perScale != null">
-                per_scale_,
+            <if test="payType != null">
+                pay_type_,
             </if>
-            <if test="comScale != null">
-                com_scale_,
+            <if test="yqMerNo != null">
+                yq_mer_no_,
             </if>
-            <if test="courseFee != null">
-                course_fee_,
+            <if test="hfMerNo != null">
+                hf_mer_no_,
             </if>
-            <if test="instrumentFee != null">
-                instrument_fee_,
+            <if test="routeScale != null">
+                route_scale_,
             </if>
-            <if test="accessoriesFee != null">
-                accessories_fee_,
-            </if>
-            <if test="otherFee != null">
-                other_fee_,
+            <if test="type != null">
+                type_,
             </if>
             <if test="createTime != null">
                 create_time_,
@@ -69,35 +67,29 @@
             </if>
         </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
-            <if test="type != null">
-                #{type,jdbcType=INTEGER},
-            </if>
             <if test="organId != null">
-                #{organId,jdbcType=INTEGER},
+                #{organId},
             </if>
-            <if test="perScale != null">
-                #{perScale,jdbcType=INTEGER},
+            <if test="payType != null">
+                #{payType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
             </if>
-            <if test="comScale != null">
-                #{comScale,jdbcType=INTEGER},
+            <if test="yqMerNo != null">
+                #{yqMerNo},
             </if>
-            <if test="courseFee != null">
-                #{courseFee,jdbcType=VARCHAR},
+            <if test="hfMerNo != null">
+                #{hfMerNo},
             </if>
-            <if test="instrumentFee != null">
-                #{instrumentFee,jdbcType=VARCHAR},
+            <if test="routeScale != null">
+                #{routeScale},
             </if>
-            <if test="accessoriesFee != null">
-                #{accessoriesFee,jdbcType=VARCHAR},
-            </if>
-            <if test="otherFee != null">
-                #{otherFee,jdbcType=VARCHAR},
+            <if test="type != null">
+                #{type},
             </if>
             <if test="createTime != null">
-                #{createTime,jdbcType=TIMESTAMP},
+                #{createTime},
             </if>
             <if test="updateTime != null">
-                #{updateTime,jdbcType=TIMESTAMP},
+                #{updateTime},
             </if>
         </trim>
     </insert>
@@ -105,36 +97,25 @@
         <!--@mbg.generated-->
         update sys_payment_config
         <set>
-            <if test="type != null">
-                type_ = #{type,jdbcType=INTEGER},
-            </if>
             <if test="organId != null">
-                organ_id_ = #{organId,jdbcType=INTEGER},
-            </if>
-            <if test="perScale != null">
-                per_scale_ = #{perScale,jdbcType=INTEGER},
+                organ_id_ = #{organId},
             </if>
-            <if test="comScale != null">
-                com_scale_ = #{comScale,jdbcType=INTEGER},
+            <if test="payType != null">
+                pay_type_ = #{payType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
             </if>
-            <if test="courseFee != null">
-                course_fee_ = #{courseFee,jdbcType=VARCHAR},
+            <if test="yqMerNo != null">
+                yq_mer_no_ = #{yqMerNo},
             </if>
-            <if test="instrumentFee != null">
-                instrument_fee_ = #{instrumentFee,jdbcType=VARCHAR},
+            <if test="hfMerNo != null">
+                hf_mer_no_ = #{hfMerNo},
             </if>
-            <if test="accessoriesFee != null">
-                accessories_fee_ = #{accessoriesFee,jdbcType=VARCHAR},
+            <if test="routeScale != null">
+                route_scale_ = #{routeScale},
             </if>
-            <if test="otherFee != null">
-                other_fee_ = #{otherFee,jdbcType=VARCHAR},
-            </if>
-            <if test="createTime != null">
-                create_time_ = #{createTime,jdbcType=TIMESTAMP},
-            </if>
-            <if test="updateTime != null">
-                update_time_ = #{updateTime,jdbcType=TIMESTAMP},
+            <if test="type != null">
+                type_ = #{type},
             </if>
+            update_time_ = now()
         </set>
         where id_ = #{id,jdbcType=INTEGER}
     </update>
@@ -160,6 +141,39 @@
 
     <!-- 按分部编号查配置 -->
     <select id="findPaymentConfigByOrganId" resultMap="SysPaymentConfig">
-        SELECT * FROM sys_payment_config WHERE organ_id_ = #{organId}
+        SELECT *
+        FROM sys_payment_config
+        WHERE organ_id_ = #{organId}
+    </select>
+    <select id="findPaymentConfigByOrganIds" resultMap="SysPaymentConfig">
+        SELECT *
+        FROM sys_payment_config
+        WHERE organ_id_ IN
+        <foreach collection="organIds" item="organId" open="(" close=")" separator=",">
+            #{organId}
+        </foreach>
+    </select>
+
+    <!-- 根据支付类型获取支付配置 -->
+    <select id="getPaymentConfigs" resultMap="SysPaymentConfig">
+        SELECT spc.*, o.name_ organ_name
+        FROM sys_payment_config spc
+        LEFT JOIN organization o on spc.organ_id_ = o.id_
+        <where>
+            <if test="payType == null">
+                pay_type_ IS NOT NULL
+                AND (spc.yq_mer_no_ IS NOT NULL OR spc.hf_mer_no_ IS NOT NULL)
+            </if>
+            <if test="payType != null">
+                AND pay_type_ = #{payType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
+            </if>
+            <if test='payType != null and payType.code.equals("YQPAY")'>
+                AND spc.yq_mer_no_ IS NOT NULL
+            </if>
+            <if test='payType != null and payType.code.equals("ADAPAY")'>
+                AND spc.hf_mer_no_ IS NOT NULL
+            </if>
+        </where>
+
     </select>
 </mapper>

+ 1 - 1
mec-student/src/main/java/com/ym/mec/student/controller/CourseGroupController.java

@@ -38,7 +38,7 @@ public class CourseGroupController extends BaseController {
 
     @ApiOperation(value = "购买课程组")
     @PostMapping("/buyCourseGroup")
-    public HttpResponseResult buyCourseGroup(Long courseGroupId, boolean isUseBalancePayment){
+    public HttpResponseResult buyCourseGroup(Long courseGroupId, boolean isUseBalancePayment) throws Exception {
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         if(Objects.isNull(sysUser)){
             return failed(HttpStatus.FORBIDDEN,"请登录");

+ 1 - 1
mec-student/src/main/java/com/ym/mec/student/controller/PracticeGroupController.java

@@ -234,7 +234,7 @@ public class PracticeGroupController extends BaseController {
 
     @ApiOperation("重新支付")
     @PostMapping(value = "/repay")
-    public HttpResponseResult repay(Integer groupId, boolean useBalancePayment){
+    public HttpResponseResult repay(Integer groupId, boolean useBalancePayment) throws Exception {
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         if (sysUser == null) {
             return failed(HttpStatus.FORBIDDEN, "请登录");

+ 3 - 3
mec-student/src/main/java/com/ym/mec/student/controller/SporadicChargeInfoController.java

@@ -73,9 +73,9 @@ public class SporadicChargeInfoController extends BaseController {
             if (sysUser == null || sysUser.getId() == null) {
                 return failed("用户不存在");
             }
-            if (!sysUser.getUserType().contains("STUDENT")) {
-                return failed("用户信息异常");
-            }
+//            if (!sysUser.getUserType().contains("STUDENT")) {
+//                return failed("用户信息异常");
+//            }
             sporadicPayDto.setUserId(sysUser.getId());
         }
         if (sporadicPayDto.getIsRepeatPay() == false) {

+ 41 - 10
mec-student/src/main/java/com/ym/mec/student/controller/StudentOrderController.java

@@ -1,9 +1,11 @@
 package com.ym.mec.student.controller;
 
+import com.ym.mec.biz.dal.dao.*;
 import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.enums.OrderTypeEnum;
 import com.ym.mec.biz.service.*;
+import com.ym.mec.biz.service.impl.PayServiceImpl;
 import com.ym.mec.thirdparty.adapay.ConfigInit;
 import com.ym.mec.thirdparty.adapay.Payment;
 import com.ym.mec.util.date.DateUtil;
@@ -34,11 +36,6 @@ import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
 import com.alibaba.fastjson.JSON;
-import com.ym.mec.biz.dal.dao.CourseScheduleEvaluateDao;
-import com.ym.mec.biz.dal.dao.OrganizationDao;
-import com.ym.mec.biz.dal.dao.StudentPaymentOrderDao;
-import com.ym.mec.biz.dal.dao.SysConfigDao;
-import com.ym.mec.biz.dal.dao.TeacherCourseStatisticsDao;
 import com.ym.mec.biz.dal.enums.DealStatusEnum;
 import com.ym.mec.biz.dal.enums.GroupType;
 import com.ym.mec.common.controller.BaseController;
@@ -81,6 +78,8 @@ public class StudentOrderController extends BaseController {
     private CourseScheduleEvaluateDao courseScheduleEvaluateDao;
     @Autowired
     private TenantPaymentOrderService tenantPaymentOrderService;
+    @Autowired
+    private StudentPaymentRouteOrderDao studentPaymentRouteOrderDao;
 
     @PostMapping("/notify")
     public Msg notify(@ModelAttribute Msg msg) throws Exception {
@@ -204,13 +203,19 @@ public class StudentOrderController extends BaseController {
         paymentParams.put("goods_desc", orderBody);
         paymentParams.put("time_expire", timeExpire);
 
-        if(!merNos.equals(ConfigInit.merNo)) {
-            List<Map<String, Object>> divMembers = new ArrayList<>();
+        List<StudentPaymentRouteOrder> routeOrders = studentPaymentRouteOrderDao.getRouteOrders(orderNo);
+        List<Map<String, Object>> divMembers = new ArrayList<>();
+        for (StudentPaymentRouteOrder routeOrder : routeOrders) {
             Map<String, Object> divMember = new HashMap<>();
-            divMember.put("member_id", merNos);//分佣账户
-            divMember.put("amount", amount);//分佣金额
-            divMember.put("fee_flag", "Y"); //承担手续费
+            divMember.put("member_id", routeOrder.getMerNo());//分佣账户
+            divMember.put("amount", routeOrder.getRouteAmount());//分佣金额
+            divMember.put("fee_flag",routeOrder.getFeeFlag());
+            if (routeOrder.getMerNo().equals(ConfigInit.merNo)) {
+                divMember.put("member_id", 0);
+            }
             divMembers.add(divMember);
+        }
+        if (divMembers.size() > 0) {
             paymentParams.put("div_members", JSON.toJSONString(divMembers));
         }
 
@@ -693,4 +698,30 @@ public class StudentOrderController extends BaseController {
         practice4Organs = practice4Organs.stream().sorted(Comparator.comparingDouble(Practice4OrganDto::getScale).reversed()).collect(Collectors.toList());
         return succeed(practice4Organs);
     }
+
+    @Autowired
+    PayService payService;
+
+    @GetMapping("/test")
+    public HttpResponseResult test() {
+        String baseApiUrl = "http://dev.dayaedu.com";
+        Map<String, Object> payMap = new HashMap<>();
+        try {
+            payMap = payService.getPayMap(
+                    new BigDecimal("50"),
+                    BigDecimal.ZERO,
+                    "20070915150900001",
+                    baseApiUrl + "/api-student/studentOrder/notify",
+                    baseApiUrl + "/api-student/studentOrder/paymentResult?orderNo=5435253245",
+                    "对外课程组购买",
+                    "测试购买",
+                    2,
+                    null
+            );
+            return succeed(payMap);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return succeed(payMap);
+    }
 }

+ 1 - 4
mec-thirdparty/src/main/java/com/ym/mec/thirdparty/adapay/Payment.java

@@ -175,7 +175,7 @@ public class Payment extends ConfigInit {
 
 
     public static Map<String, Object> getPayMap(BigDecimal amount, String orderNo, String notifyUrl, String returnUrl, String orderSubject, String orderBody, String sellerNo, List<Map<String, Object>> tempRoutingList) throws Exception {
-        Map<String, Object> paymentParams = new HashMap<>(10);
+        Map<String, Object> paymentParams = new HashMap<>(9);
         paymentParams.put("appId", appId);
         paymentParams.put("amount", amount);
         paymentParams.put("orderNo", orderNo);
@@ -184,9 +184,6 @@ public class Payment extends ConfigInit {
         paymentParams.put("orderSubject", orderSubject);
         paymentParams.put("orderBody", orderBody);
         paymentParams.put("wxAppId", wxAppId);
-        if (tempRoutingList != null) {
-            paymentParams.put("div_members", JSONObject.toJSONString(tempRoutingList));
-        }
 
         String originalStr = JSONObject.toJSONString(paymentParams);
         String sign = DigestUtils.md5DigestAsHex(originalStr.getBytes());

+ 2 - 2
mec-thirdparty/src/main/java/com/ym/mec/thirdparty/yqpay/YqPayUtil.java

@@ -7,7 +7,7 @@ import java.util.*;
 
 public class YqPayUtil {
 
-    private static final String merNo = "0021677"; //商户号
+    public static final String merNo = "0021677"; //商户号
     private static final String version = "1.1";
     private static final String signType = "CFCA";
     private static final String payUrl = "https://qyfapi.95epay.com/api/api/hPay/toPayHtml";//支付提交地址
@@ -41,7 +41,7 @@ public class YqPayUtil {
      * @throws Exception
      */
     public static Map<String, Object> getPayMap(BigDecimal amount, String orderNo, String notifyUrl, String returnUrl, String orderSubject, String orderBody, String sellerNo, String routingMerNo) throws Exception {
-        List<Map> tempRoutingList = new ArrayList();
+        List<Map> tempRoutingList = new ArrayList<>();
         Map<String, Object> routingList = new HashMap<>();
         routingList.put("routingMerNo", routingMerNo);//分佣账户
         routingList.put("routingFee", amount.subtract((amount.multiply(new BigDecimal("0.28")).divide(new BigDecimal(100))).setScale(2, BigDecimal.ROUND_HALF_UP))); //分佣金额

+ 10 - 0
mec-web/src/main/java/com/ym/mec/web/controller/StudentPaymentOrderController.java

@@ -11,6 +11,7 @@ import com.ym.mec.biz.dal.page.StudentPaymentOrderQueryInfo;
 import com.ym.mec.biz.service.StudentPaymentOrderDetailService;
 import com.ym.mec.biz.service.StudentPaymentOrderService;
 import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.common.entity.HttpResponseResult;
 import com.ym.mec.common.page.PageInfo;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
@@ -221,4 +222,13 @@ public class StudentPaymentOrderController extends BaseController {
     }
 
 
+    @ApiOperation(value = "查询订单状态")
+    @GetMapping("/getOrderStatus")
+    @PreAuthorize("@pcs.hasPermissions('order/getOrderStatus')")
+    @ApiImplicitParams({@ApiImplicitParam(name = "id", value = "订单id", required = true, dataType = "int")})
+    public HttpResponseResult<Boolean> getOrderStatus(Long id) throws Exception {
+        return succeed(studentPaymentOrderService.getOrderStatus(id));
+    }
+
+
 }

+ 83 - 0
mec-web/src/main/java/com/ym/mec/web/controller/StudentPaymentRouteOrderController.java

@@ -0,0 +1,83 @@
+package com.ym.mec.web.controller;
+
+import com.ym.mec.auth.api.client.SysUserFeignService;
+import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.dao.EmployeeDao;
+import com.ym.mec.biz.dal.dao.SysConfigDao;
+import com.ym.mec.biz.dal.dto.StudentPaymentRouteOrderDto;
+import com.ym.mec.biz.dal.entity.Employee;
+import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
+import com.ym.mec.biz.dal.page.SporadicOrderQueryInfo;
+import com.ym.mec.biz.dal.page.StudentPaymentOrderQueryInfo;
+import com.ym.mec.biz.service.StudentPaymentOrderDetailService;
+import com.ym.mec.biz.service.StudentPaymentOrderService;
+import com.ym.mec.biz.service.StudentPaymentRouteOrderService;
+import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.common.entity.HttpResponseResult;
+import com.ym.mec.common.page.PageInfo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.math.BigDecimal;
+import java.util.Arrays;
+import java.util.List;
+
+@RequestMapping("routeOrder")
+@Api(tags = "分润订单服务")
+@RestController
+public class StudentPaymentRouteOrderController extends BaseController {
+
+    @Autowired
+    private StudentPaymentRouteOrderService studentPaymentRouteOrderService;
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
+    @Autowired
+    private EmployeeDao employeeDao;
+
+    @ApiOperation(value = "财务订单列表")
+    @GetMapping("/finance")
+    @PreAuthorize("@pcs.hasPermissions('routeOrder/finance')")
+    public HttpResponseResult<PageInfo<StudentPaymentRouteOrderDto>> queryOrderPage(StudentPaymentOrderQueryInfo queryInfo) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            return failed("用户信息获取失败");
+        }
+        if (!sysUser.getIsSuperAdmin()) {
+            Employee employee = employeeDao.get(sysUser.getId());
+            if (StringUtils.isEmpty(queryInfo.getRoutingOrganId())) {
+                queryInfo.setRoutingOrganId(employee.getOrganIdList());
+            } else if (StringUtils.isEmpty(employee.getOrganIdList())) {
+                return failed("用户所在分部异常");
+            } else {
+                List<String> list = Arrays.asList(employee.getOrganIdList().split(","));
+                if (!list.containsAll(Arrays.asList(queryInfo.getRoutingOrganId().split(",")))) {
+                    return failed("非法请求");
+                }
+            }
+        }
+
+        PageInfo<StudentPaymentRouteOrderDto> studentPaymentRouteOrderPageInfo = studentPaymentRouteOrderService.OrderQueryPage(queryInfo);
+        return succeed(studentPaymentRouteOrderPageInfo);
+    }
+
+
+    @ApiOperation(value = "添加订单")
+    @PostMapping("/add")
+    @PreAuthorize("@pcs.hasPermissions('routeOrder/add')")
+    public HttpResponseResult<StudentPaymentRouteOrderDto> add(StudentPaymentRouteOrderDto studentPaymentRouteOrderDto) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        studentPaymentRouteOrderDto.setUserId(sysUser.getId());
+        return succeed(studentPaymentRouteOrderService.addOutOrder(studentPaymentRouteOrderDto));
+    }
+
+
+}

+ 9 - 0
mec-web/src/main/java/com/ym/mec/web/controller/SysPaymentConfigController.java

@@ -1,6 +1,7 @@
 package com.ym.mec.web.controller;
 
 import com.ym.mec.biz.dal.entity.SysPaymentConfig;
+import com.ym.mec.biz.dal.enums.PaymentChannelEnum;
 import com.ym.mec.biz.service.SysPaymentConfigService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
@@ -71,4 +72,12 @@ public class SysPaymentConfigController extends BaseController {
     public Object queryPage(QueryInfo queryInfo) {
         return succeed(sysPaymentConfigService.queryPage(queryInfo));
     }
+
+    @ApiOperation(value = "根据类型获取获取配置列表")
+    @GetMapping("/getPaymentConfigs")
+    @PreAuthorize("@pcs.hasPermissions('paymentConfig/getPaymentConfigs')")
+    public HttpResponseResult getPaymentConfigs(PaymentChannelEnum payType) {
+        return succeed(sysPaymentConfigService.getPaymentConfigs(payType));
+    }
+
 }

部分文件因为文件数量过多而无法显示