ソースを参照

Merge branch 'master' of http://git.dayaedu.com/yonge/mec

zouxuan 5 年 前
コミット
4b17094901
84 ファイル変更3261 行追加1092 行削除
  1. 4 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/MusicGroupPurchaseListDao.java
  2. 6 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentDao.java
  3. 11 4
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentPaymentOrderDao.java
  4. 47 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentPaymentRouteOrderDao.java
  5. 7 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/SysPaymentConfigDao.java
  6. 3 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TeacherDao.java
  7. 58 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/AmountChannelDto.java
  8. 11 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/ExportTeacherSalaryDto.java
  9. 71 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/HfMemberDto.java
  10. 69 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/RouteScaleDto.java
  11. 33 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentPaymentOrderExportDto.java
  12. 73 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentPaymentRouteOrderDto.java
  13. 326 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/TeacherDefaultSalaryDto.java
  14. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/DegreeRegistration.java
  15. 19 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/MusicGroup.java
  16. 20 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/SporadicChargeInfo.java
  17. 94 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/StudentPaymentRouteOrder.java
  18. 58 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/SysPaymentConfig.java
  19. 21 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/VipGroup.java
  20. 8 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/GroupType.java
  21. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/SporadicChargeTypeEnum.java
  22. 15 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/DegreeQueryInfo.java
  23. 12 3
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/ExportTeacherSalaryQueryInfo.java
  24. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/CoursesGroupService.java
  25. 8 1
      mec-biz/src/main/java/com/ym/mec/biz/service/MusicGroupService.java
  26. 6 0
      mec-biz/src/main/java/com/ym/mec/biz/service/NotifyCallback.java
  27. 9 46
      mec-biz/src/main/java/com/ym/mec/biz/service/PayService.java
  28. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/PracticeGroupService.java
  29. 3 0
      mec-biz/src/main/java/com/ym/mec/biz/service/StudentManageService.java
  30. 15 0
      mec-biz/src/main/java/com/ym/mec/biz/service/StudentPaymentOrderService.java
  31. 33 0
      mec-biz/src/main/java/com/ym/mec/biz/service/StudentPaymentRouteOrderService.java
  32. 0 3
      mec-biz/src/main/java/com/ym/mec/biz/service/SysConfigService.java
  33. 25 0
      mec-biz/src/main/java/com/ym/mec/biz/service/SysPaymentConfigService.java
  34. 8 0
      mec-biz/src/main/java/com/ym/mec/biz/service/TeacherService.java
  35. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java
  36. 144 146
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CoursesGroupServiceImpl.java
  37. 26 26
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/DegreeRegistrationServiceImpl.java
  38. 4 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/EduPracticeGroupServiceImpl.java
  39. 86 60
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java
  40. 268 298
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/PayServiceImpl.java
  41. 247 245
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/PracticeGroupServiceImpl.java
  42. 42 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentManageServiceImpl.java
  43. 56 10
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentOrderServiceImpl.java
  44. 113 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentRouteOrderServiceImpl.java
  45. 2 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRechargeServiceImpl.java
  46. 5 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRegistrationServiceImpl.java
  47. 14 16
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRepairServiceImpl.java
  48. 13 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysPaymentConfigServiceImpl.java
  49. 4 3
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherDefaultVipGroupSalaryServiceImpl.java
  50. 6 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherServiceImpl.java
  51. 12 7
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TenantPaymentOrderServiceImpl.java
  52. 43 33
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java
  53. 15 4
      mec-biz/src/main/resources/config/mybatis/CourseScheduleTeacherSalaryMapper.xml
  54. 9 2
      mec-biz/src/main/resources/config/mybatis/DegreeRegistrationMapper.xml
  55. 7 2
      mec-biz/src/main/resources/config/mybatis/MusicGroupMapper.xml
  56. 27 9
      mec-biz/src/main/resources/config/mybatis/MusicGroupPurchaseListMapper.xml
  57. 48 0
      mec-biz/src/main/resources/config/mybatis/StudentMapper.xml
  58. 4 0
      mec-biz/src/main/resources/config/mybatis/StudentPaymentOrderDetailMapper.xml
  59. 32 15
      mec-biz/src/main/resources/config/mybatis/StudentPaymentOrderMapper.xml
  60. 206 0
      mec-biz/src/main/resources/config/mybatis/StudentPaymentRouteOrderMapper.xml
  61. 87 73
      mec-biz/src/main/resources/config/mybatis/SysPaymentConfigMapper.xml
  62. 80 0
      mec-biz/src/main/resources/config/mybatis/TeacherMapper.xml
  63. 3 0
      mec-biz/src/main/resources/config/mybatis/VipGroupActivityMapper.xml
  64. 10 3
      mec-biz/src/main/resources/config/mybatis/VipGroupMapper.xml
  65. 2 1
      mec-student/src/main/java/com/ym/mec/student/config/ResourceServerConfig.java
  66. 1 1
      mec-student/src/main/java/com/ym/mec/student/controller/CourseGroupController.java
  67. 1 1
      mec-student/src/main/java/com/ym/mec/student/controller/DegreeController.java
  68. 29 0
      mec-student/src/main/java/com/ym/mec/student/controller/OrganizationController.java
  69. 1 1
      mec-student/src/main/java/com/ym/mec/student/controller/PracticeGroupController.java
  70. 3 3
      mec-student/src/main/java/com/ym/mec/student/controller/SporadicChargeInfoController.java
  71. 34 14
      mec-student/src/main/java/com/ym/mec/student/controller/StudentOrderController.java
  72. 18 4
      mec-teacher/src/main/java/com/ym/mec/teacher/controller/TeacherVipGroupController.java
  73. 4 4
      mec-thirdparty/src/main/java/com/ym/mec/thirdparty/adapay/ConfigInit.java
  74. 26 2
      mec-thirdparty/src/main/java/com/ym/mec/thirdparty/adapay/CorpMember.java
  75. 24 23
      mec-thirdparty/src/main/java/com/ym/mec/thirdparty/adapay/MainDemo.java
  76. 4 7
      mec-thirdparty/src/main/java/com/ym/mec/thirdparty/adapay/Payment.java
  77. 2 2
      mec-thirdparty/src/main/java/com/ym/mec/thirdparty/yqpay/YqPayUtil.java
  78. 39 0
      mec-web/src/main/java/com/ym/mec/web/controller/AdapayController.java
  79. 29 0
      mec-web/src/main/java/com/ym/mec/web/controller/DegreeController.java
  80. 233 9
      mec-web/src/main/java/com/ym/mec/web/controller/ExportController.java
  81. 9 0
      mec-web/src/main/java/com/ym/mec/web/controller/MusicGroupController.java
  82. 10 0
      mec-web/src/main/java/com/ym/mec/web/controller/StudentPaymentOrderController.java
  83. 83 0
      mec-web/src/main/java/com/ym/mec/web/controller/StudentPaymentRouteOrderController.java
  84. 9 0
      mec-web/src/main/java/com/ym/mec/web/controller/SysPaymentConfigController.java

+ 4 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/MusicGroupPurchaseListDao.java

@@ -5,9 +5,13 @@ import com.ym.mec.common.dal.BaseDAO;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
+import java.util.Set;
 
 public interface MusicGroupPurchaseListDao extends BaseDAO<Integer, MusicGroupPurchaseList> {
 
 
     int batchInsert(@Param("musicGroupPurchaseLists") List<MusicGroupPurchaseList> MusicGroupPurchaseLists);
+
+
+    List<MusicGroupPurchaseList> getCount(@Param("musicGroupIds") Set<String> musicGroupIds);
 }

+ 6 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentDao.java

@@ -1,6 +1,7 @@
 package com.ym.mec.biz.dal.dao;
 
 import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.dto.SimpleUserDto;
 import com.ym.mec.biz.dal.dto.Student4operating;
 import com.ym.mec.biz.dal.dto.StudentServeCourseDto;
 import com.ym.mec.biz.dal.dto.StudentServeDto;
@@ -50,6 +51,11 @@ public interface StudentDao extends com.ym.mec.common.dal.BaseDAO<Integer, Stude
      */
     List<Map<Integer,Integer>> getTeacherOperatingStudentsNum(@Param("teacherIds") String teacherIds);
 
+    List<String> getStudentNames(@Param("studentIds") List<Integer> studentIds);
+
+    List<SimpleUserDto> getStudentsWithOrgan(Map<String, Object> params);
+    int countStudentsWithOrgan(Map<String, Object> params);
+
     /**
      * 根据类型批量获取老师转化
      * @param teacherIds

+ 11 - 4
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentPaymentOrderDao.java

@@ -275,6 +275,7 @@ public interface StudentPaymentOrderDao extends BaseDAO<Long, StudentPaymentOrde
 
     /**
      * 统计商户当月收款金额
+     *
      * @param merNo
      * @param firstDate
      * @return
@@ -282,20 +283,26 @@ public interface StudentPaymentOrderDao extends BaseDAO<Long, StudentPaymentOrde
     BigDecimal sumAccountAmount(@Param("merNo") String merNo, @Param("firstDate") Date firstDate);
 
     /**
-     * @describe 统计课程组非失败订单数量
-     * @author Joburgess
-     * @date 2020.06.22
      * @param groupId:
      * @param groupType:
      * @return int
+     * @describe 统计课程组非失败订单数量
+     * @author Joburgess
+     * @date 2020.06.22
      */
     int countGroupOrderWithoutFailed(@Param("groupId") String groupId,
-                                       @Param("groupType") GroupType groupType);
+                                     @Param("groupType") GroupType groupType);
 
     /**
      * 统计
+     *
      * @param sporadicId
      * @return
      */
     Integer countSporadicOrder(Integer sporadicId);
+
+    /*
+
+     */
+    Integer findOrganPayOrderNum(@Param("organId") Integer organId);
 }

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

@@ -0,0 +1,47 @@
+package com.ym.mec.biz.dal.dao;
+
+
+import com.ym.mec.biz.dal.dto.StudentPaymentOrderExportDto;
+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
+    );
+
+    List<StudentPaymentOrderExportDto> ExportQueryPage(Map<String, Object> params);
+}

+ 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);
 }

+ 3 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TeacherDao.java

@@ -6,6 +6,7 @@ import com.ym.mec.biz.dal.entity.CourseHomework;
 import com.ym.mec.biz.dal.entity.Teacher;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.entity.ImUserModel;
+
 import org.apache.ibatis.annotations.Param;
 
 import java.math.BigDecimal;
@@ -471,4 +472,6 @@ public interface TeacherDao extends BaseDAO<Integer, Teacher> {
      * @return
      */
     int countStudent(Map<String, Object> params);
+    
+    List<TeacherDefaultSalaryDto> queryTeacherDefaultSalary(@Param("organIdList") String organIdList);
 }

+ 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;
+    }
+}

+ 11 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/ExportTeacherSalaryDto.java

@@ -34,6 +34,8 @@ public class ExportTeacherSalaryDto{
 
     //vip活动名称
     private String vipActiveName;
+    
+    private String vipCategoryName;
 
     //线上课/线下课
     private String teachMode;
@@ -127,7 +129,15 @@ public class ExportTeacherSalaryDto{
         this.vipActiveName = vipActiveName;
     }
 
-    public double getOfflineClassesUnitPrice() {
+    public String getVipCategoryName() {
+		return vipCategoryName;
+	}
+
+	public void setVipCategoryName(String vipCategoryName) {
+		this.vipCategoryName = vipCategoryName;
+	}
+
+	public double getOfflineClassesUnitPrice() {
         return offlineClassesUnitPrice;
     }
 

+ 71 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/HfMemberDto.java

@@ -0,0 +1,71 @@
+package com.ym.mec.biz.dal.dto;
+
+import org.apache.poi.ss.formula.functions.T;
+import org.springframework.web.multipart.MultipartFile;
+
+public class HfMemberDto {
+    //商户号
+    private String memberId;
+    //公司名称
+    private String name;
+    //省份编号
+    private String provCode;
+    //城市编号
+    private String areaCode;
+    //统一社会信用码
+    private String socialCreditCode;
+    //统一社会信用码有效期
+    private String socialCreditCodeExpires;
+    //经营范围
+    private String businessScope;
+    //法人
+    private String legalPerson;
+    //法人身份证号
+    private String legalCertId;
+    //身份证有效期
+    private String legalCertIdExpires;
+    //法人手机号
+    private String legalMp;
+    //公司地址
+    private String address;
+    //邮编
+    private String zipCode;
+    //银行卡号
+    private String cardNo;
+    //银行编码
+    private String bankCode;
+    //文件
+    private MultipartFile path;
+
+    public String getMemberId() {
+        return memberId;
+    }
+
+    public void setMemberId(String memberId) {
+        this.memberId = memberId;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getProvCode() {
+        return provCode;
+    }
+
+    public void setProvCode(String provCode) {
+        this.provCode = provCode;
+    }
+
+    public String getAreaCode() {
+        return areaCode;
+    }
+
+    public void setAreaCode(String areaCode) {
+        this.areaCode = areaCode;
+    }
+}

+ 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;
+    }
+}

+ 33 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentPaymentOrderExportDto.java

@@ -39,6 +39,15 @@ public class StudentPaymentOrderExportDto extends StudentPaymentOrder {
 
     private List<Goods> goodsList;
 
+    //收款账户
+    private String routeMerNo;
+
+    //分润金额
+    private BigDecimal routeAmount;
+
+    //分润余额
+    private BigDecimal routeBalance;
+
     public BigDecimal getSporadicAmount() {
         return sporadicAmount;
     }
@@ -150,4 +159,28 @@ public class StudentPaymentOrderExportDto extends StudentPaymentOrder {
     public void setCooperationOrganName(String cooperationOrganName) {
         this.cooperationOrganName = cooperationOrganName;
     }
+
+    public String getRouteMerNo() {
+        return routeMerNo;
+    }
+
+    public void setRouteMerNo(String routeMerNo) {
+        this.routeMerNo = routeMerNo;
+    }
+
+    public BigDecimal getRouteAmount() {
+        return routeAmount;
+    }
+
+    public void setRouteAmount(BigDecimal routeAmount) {
+        this.routeAmount = routeAmount;
+    }
+
+    public BigDecimal getRouteBalance() {
+        return routeBalance;
+    }
+
+    public void setRouteBalance(BigDecimal routeBalance) {
+        this.routeBalance = routeBalance;
+    }
 }

+ 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;
+    }
+}

+ 326 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/TeacherDefaultSalaryDto.java

@@ -0,0 +1,326 @@
+package com.ym.mec.biz.dal.dto;
+
+import java.math.BigDecimal;
+
+public class TeacherDefaultSalaryDto {
+
+	private Integer userId;
+	
+	private String realName;
+	
+	private String organName;
+	
+	private String jobNature;
+	
+	private String demissionStatus;
+	
+	private String status;
+	
+	private BigDecimal vip1 = new BigDecimal(0);
+	
+	private BigDecimal vip2 = new BigDecimal(0);
+	
+	private BigDecimal vip3 = new BigDecimal(0);
+	
+	private BigDecimal vip4 = new BigDecimal(0);
+	
+	private BigDecimal vip5 = new BigDecimal(0);
+	
+	private BigDecimal vip6 = new BigDecimal(0);
+	
+	private BigDecimal vip7 = new BigDecimal(0);
+	
+	private BigDecimal practiceSalary = new BigDecimal(0);
+	
+	private BigDecimal singleSalary2 = new BigDecimal(0);
+	
+	private BigDecimal mixSalary2 = new BigDecimal(0);
+	
+	private BigDecimal comprehensiveSalary2 = new BigDecimal(0);
+	
+	private BigDecimal traningSigleSalary2 = new BigDecimal(0);
+	
+	private BigDecimal traningMixSalary2 = new BigDecimal(0);
+	
+	private BigDecimal highSalary2 = new BigDecimal(0);
+	
+	private BigDecimal classroomSalary2 = new BigDecimal(0);
+	
+	private BigDecimal singleSalary = new BigDecimal(0);
+	
+	private BigDecimal mixSalary = new BigDecimal(0);
+	
+	private BigDecimal comprehensiveSalary = new BigDecimal(0);
+	
+	private BigDecimal traningSigleSalary = new BigDecimal(0);
+	
+	private BigDecimal traningMixSalary = new BigDecimal(0);
+	
+	private BigDecimal highSalary = new BigDecimal(0);
+	
+	private BigDecimal classroomSalary = new BigDecimal(0);
+	
+	private BigDecimal highOnline3Salary = new BigDecimal(0);
+	
+	private BigDecimal highOnline4Salary = new BigDecimal(0);
+	
+	private BigDecimal highOnline5Salary = new BigDecimal(0);
+	
+	private BigDecimal musicNetwork1Salary = new BigDecimal(0);
+
+	public Integer getUserId() {
+		return userId;
+	}
+
+	public void setUserId(Integer userId) {
+		this.userId = userId;
+	}
+
+	public String getRealName() {
+		return realName;
+	}
+
+	public void setRealName(String realName) {
+		this.realName = realName;
+	}
+
+	public String getOrganName() {
+		return organName;
+	}
+
+	public void setOrganName(String organName) {
+		this.organName = organName;
+	}
+
+	public String getJobNature() {
+		return jobNature;
+	}
+
+	public void setJobNature(String jobNature) {
+		this.jobNature = jobNature;
+	}
+
+	public String getDemissionStatus() {
+		return demissionStatus;
+	}
+
+	public void setDemissionStatus(String demissionStatus) {
+		this.demissionStatus = demissionStatus;
+	}
+
+	public String getStatus() {
+		return status;
+	}
+
+	public void setStatus(String status) {
+		this.status = status;
+	}
+
+	public BigDecimal getVip1() {
+		return vip1;
+	}
+
+	public void setVip1(BigDecimal vip1) {
+		this.vip1 = vip1;
+	}
+
+	public BigDecimal getVip2() {
+		return vip2;
+	}
+
+	public void setVip2(BigDecimal vip2) {
+		this.vip2 = vip2;
+	}
+
+	public BigDecimal getVip3() {
+		return vip3;
+	}
+
+	public void setVip3(BigDecimal vip3) {
+		this.vip3 = vip3;
+	}
+
+	public BigDecimal getVip4() {
+		return vip4;
+	}
+
+	public void setVip4(BigDecimal vip4) {
+		this.vip4 = vip4;
+	}
+
+	public BigDecimal getVip5() {
+		return vip5;
+	}
+
+	public void setVip5(BigDecimal vip5) {
+		this.vip5 = vip5;
+	}
+
+	public BigDecimal getPracticeSalary() {
+		return practiceSalary;
+	}
+
+	public void setPracticeSalary(BigDecimal practiceSalary) {
+		this.practiceSalary = practiceSalary;
+	}
+
+	public BigDecimal getSingleSalary() {
+		return singleSalary;
+	}
+
+	public void setSingleSalary(BigDecimal singleSalary) {
+		this.singleSalary = singleSalary;
+	}
+
+	public BigDecimal getMixSalary() {
+		return mixSalary;
+	}
+
+	public void setMixSalary(BigDecimal mixSalary) {
+		this.mixSalary = mixSalary;
+	}
+
+	public BigDecimal getComprehensiveSalary() {
+		return comprehensiveSalary;
+	}
+
+	public void setComprehensiveSalary(BigDecimal comprehensiveSalary) {
+		this.comprehensiveSalary = comprehensiveSalary;
+	}
+
+	public BigDecimal getTraningSigleSalary() {
+		return traningSigleSalary;
+	}
+
+	public void setTraningSigleSalary(BigDecimal traningSigleSalary) {
+		this.traningSigleSalary = traningSigleSalary;
+	}
+
+	public BigDecimal getTraningMixSalary() {
+		return traningMixSalary;
+	}
+
+	public void setTraningMixSalary(BigDecimal traningMixSalary) {
+		this.traningMixSalary = traningMixSalary;
+	}
+
+	public BigDecimal getHighSalary() {
+		return highSalary;
+	}
+
+	public void setHighSalary(BigDecimal highSalary) {
+		this.highSalary = highSalary;
+	}
+
+	public BigDecimal getClassroomSalary() {
+		return classroomSalary;
+	}
+
+	public void setClassroomSalary(BigDecimal classroomSalary) {
+		this.classroomSalary = classroomSalary;
+	}
+
+	public BigDecimal getHighOnline3Salary() {
+		return highOnline3Salary;
+	}
+
+	public void setHighOnline3Salary(BigDecimal highOnline3Salary) {
+		this.highOnline3Salary = highOnline3Salary;
+	}
+
+	public BigDecimal getHighOnline4Salary() {
+		return highOnline4Salary;
+	}
+
+	public void setHighOnline4Salary(BigDecimal highOnline4Salary) {
+		this.highOnline4Salary = highOnline4Salary;
+	}
+
+	public BigDecimal getHighOnline5Salary() {
+		return highOnline5Salary;
+	}
+
+	public void setHighOnline5Salary(BigDecimal highOnline5Salary) {
+		this.highOnline5Salary = highOnline5Salary;
+	}
+
+	public BigDecimal getMusicNetwork1Salary() {
+		return musicNetwork1Salary;
+	}
+
+	public void setMusicNetwork1Salary(BigDecimal musicNetwork1Salary) {
+		this.musicNetwork1Salary = musicNetwork1Salary;
+	}
+
+	public BigDecimal getSingleSalary2() {
+		return singleSalary2;
+	}
+
+	public void setSingleSalary2(BigDecimal singleSalary2) {
+		this.singleSalary2 = singleSalary2;
+	}
+
+	public BigDecimal getMixSalary2() {
+		return mixSalary2;
+	}
+
+	public void setMixSalary2(BigDecimal mixSalary2) {
+		this.mixSalary2 = mixSalary2;
+	}
+
+	public BigDecimal getComprehensiveSalary2() {
+		return comprehensiveSalary2;
+	}
+
+	public void setComprehensiveSalary2(BigDecimal comprehensiveSalary2) {
+		this.comprehensiveSalary2 = comprehensiveSalary2;
+	}
+
+	public BigDecimal getTraningSigleSalary2() {
+		return traningSigleSalary2;
+	}
+
+	public void setTraningSigleSalary2(BigDecimal traningSigleSalary2) {
+		this.traningSigleSalary2 = traningSigleSalary2;
+	}
+
+	public BigDecimal getTraningMixSalary2() {
+		return traningMixSalary2;
+	}
+
+	public void setTraningMixSalary2(BigDecimal traningMixSalary2) {
+		this.traningMixSalary2 = traningMixSalary2;
+	}
+
+	public BigDecimal getHighSalary2() {
+		return highSalary2;
+	}
+
+	public void setHighSalary2(BigDecimal highSalary2) {
+		this.highSalary2 = highSalary2;
+	}
+
+	public BigDecimal getClassroomSalary2() {
+		return classroomSalary2;
+	}
+
+	public void setClassroomSalary2(BigDecimal classroomSalary2) {
+		this.classroomSalary2 = classroomSalary2;
+	}
+
+	public BigDecimal getVip6() {
+		return vip6;
+	}
+
+	public void setVip6(BigDecimal vip6) {
+		this.vip6 = vip6;
+	}
+
+	public BigDecimal getVip7() {
+		return vip7;
+	}
+
+	public void setVip7(BigDecimal vip7) {
+		this.vip7 = vip7;
+	}
+}

+ 10 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/DegreeRegistration.java

@@ -134,6 +134,8 @@ public class DegreeRegistration {
     @ApiModelProperty(value = "是否重新支付",required = false)
     private Boolean isRepay = false;
 
+    private Integer organId;
+
     public Integer getId() {
         return id;
     }
@@ -309,4 +311,12 @@ public class DegreeRegistration {
     public void setTransNo(String transNo) {
         this.transNo = transNo;
     }
+
+    public Integer getOrganId() {
+        return organId;
+    }
+
+    public void setOrganId(Integer organId) {
+        this.organId = organId;
+    }
 }

+ 19 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/MusicGroup.java

@@ -151,9 +151,13 @@ public class MusicGroup {
 	private OwnershipType ownershipType;
 	
 	private FeeType feeType;
+	
+	private Boolean delFlag;
 
 	private String subjectName;
 
+	private Boolean hasVerifyMusicalList = false;
+
 	public String getSubjectName() {
 		return subjectName;
 	}
@@ -490,9 +494,24 @@ public class MusicGroup {
 		this.feeType = feeType;
 	}
 
+	public Boolean getDelFlag() {
+		return delFlag;
+	}
+
+	public void setDelFlag(Boolean delFlag) {
+		this.delFlag = delFlag;
+	}
+
 	@Override
 	public String toString() {
 		return ToStringBuilder.reflectionToString(this);
 	}
 
+	public Boolean getHasVerifyMusicalList() {
+		return hasVerifyMusicalList;
+	}
+
+	public void setHasVerifyMusicalList(Boolean hasVerifyMusicalList) {
+		this.hasVerifyMusicalList = hasVerifyMusicalList;
+	}
 }

+ 20 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/SporadicChargeInfo.java

@@ -53,6 +53,10 @@ public class SporadicChargeInfo {
 	@ApiModelProperty(value = "是否删除", required = true)
 	private Integer delFlag;
 
+	private String openFlagStr;
+
+	private String orderType;
+
 	public Integer getOpenFlag() {
 		return openFlag;
 	}
@@ -188,4 +192,20 @@ public class SporadicChargeInfo {
 	public void setDiscountAmount(BigDecimal discountAmount) {
 		this.discountAmount = discountAmount;
 	}
+
+	public String getOpenFlagStr() {
+		return openFlagStr;
+	}
+
+	public void setOpenFlagStr(String openFlagStr) {
+		this.openFlagStr = openFlagStr;
+	}
+
+	public String getOrderType() {
+		return orderType;
+	}
+
+	public void setOrderType(String orderType) {
+		this.orderType = orderType;
+	}
 }

+ 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;
+    }
 }
 

+ 21 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/VipGroup.java

@@ -80,6 +80,8 @@ public class VipGroup {
 
 	@ApiModelProperty(value = "课程类型ID",required = false)
 	private Integer vipGroupCategoryId;
+
+	private String vipGroupCategoryName;
 	
 	@ApiModelProperty(value = "所属分部列表",required = false)
 	private String organIdList;
@@ -113,6 +115,9 @@ public class VipGroup {
 	@ApiModelProperty(value = "取消原因")
 	private String stopReason;
 
+	@ApiModelProperty(value = "备注")
+	private String memo;
+
 	@ApiModelProperty(value = "月度消耗百分数")
 	private Integer monthConsumeRate;
 
@@ -144,6 +149,14 @@ public class VipGroup {
 		this.enableDelete = enableDelete;
 	}
 
+	public String getVipGroupCategoryName() {
+		return vipGroupCategoryName;
+	}
+
+	public void setVipGroupCategoryName(String vipGroupCategoryName) {
+		this.vipGroupCategoryName = vipGroupCategoryName;
+	}
+
 	public BigDecimal getCourseUnitPrice() {
 		return courseUnitPrice;
 	}
@@ -232,6 +245,14 @@ public class VipGroup {
 		this.stopReason = stopReason;
 	}
 
+	public String getMemo() {
+		return memo;
+	}
+
+	public void setMemo(String memo) {
+		this.memo = memo;
+	}
+
 	public String getVipGroupActivityName() {
 		return vipGroupActivityName;
 	}

+ 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/dal/enums/SporadicChargeTypeEnum.java

@@ -11,7 +11,7 @@ public enum SporadicChargeTypeEnum implements BaseEnum<Integer, SporadicChargeTy
     LUCKY_BAG_ACTIVE(6,"福袋活动"),
     VISITING_FEE(7,"上门费"),
     VIP_BUY(8,"VIP课购买"),
-    RECHARGE(9,"账户余额"),
+    RECHARGE(9,"账户充值"),
     MUSIC_UPKEEP(10,"乐保服务"),
     OTHER(11,"其他");
 

+ 15 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/page/DegreeQueryInfo.java

@@ -1,6 +1,5 @@
 package com.ym.mec.biz.dal.page;
 
-import com.ym.mec.biz.dal.enums.SporadicChargeTypeEnum;
 import com.ym.mec.common.page.QueryInfo;
 import io.swagger.annotations.ApiModelProperty;
 
@@ -108,6 +107,13 @@ public class DegreeQueryInfo extends QueryInfo {
     @ApiModelProperty(value = "乐理费用", required = true)
     private BigDecimal theoryMoney;
 
+
+    /**
+     * 分部id
+     */
+    @ApiModelProperty(value = "分部id", required = true)
+    private String organId;
+
     /**
      * 报名时间
      */
@@ -304,4 +310,12 @@ public class DegreeQueryInfo extends QueryInfo {
     public void setTransNo(String transNo) {
         this.transNo = transNo;
     }
+
+    public String getOrganId() {
+        return organId;
+    }
+
+    public void setOrganId(String organId) {
+        this.organId = organId;
+    }
 }

+ 12 - 3
mec-biz/src/main/java/com/ym/mec/biz/dal/page/ExportTeacherSalaryQueryInfo.java

@@ -1,15 +1,16 @@
 package com.ym.mec.biz.dal.page;
 
-import com.ym.mec.common.page.QueryInfo;
-
-import javax.xml.crypto.Data;
 import java.util.Date;
 
+import com.ym.mec.common.page.QueryInfo;
+
 public class ExportTeacherSalaryQueryInfo extends QueryInfo {
 
     private Boolean isExport = false;
 
     private Date date;
+    
+    private String courseTypeList;
 
     public Date getDate() {
         return date;
@@ -26,4 +27,12 @@ public class ExportTeacherSalaryQueryInfo extends QueryInfo {
     public void setIsExport(Boolean export) {
         isExport = export;
     }
+
+	public String getCourseTypeList() {
+		return courseTypeList;
+	}
+
+	public void setCourseTypeList(String courseTypeList) {
+		this.courseTypeList = courseTypeList;
+	}
 }

+ 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);
 

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

@@ -76,6 +76,13 @@ public interface MusicGroupService extends BaseService<String, MusicGroup> {
 	 * @param musicGroupId 乐团编号
 	 */
 	boolean cancelMusicGroup(String musicGroupId);
+	
+	/**
+	 * 删除乐团
+	 * @param musicGroupId 乐团编号
+	 * @return
+	 */
+	boolean deleteMusicGroup(String musicGroupId);
 
 	/**
 	 * 暂停乐团
@@ -137,7 +144,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);
     }
 
     /**

+ 9 - 46
mec-biz/src/main/java/com/ym/mec/biz/service/PayService.java

@@ -9,55 +9,18 @@ import java.util.Map;
  */
 
 public interface PayService {
-
-
-    /**
-     * 返回订单提交数据
-     *
-     * @param amount       金额
-     * @param orderNo      订单编号
-     * @param notifyUrl    异步通知地址
-     * @param returnUrl    支付返回地址
-     * @param orderSubject 订单标题
-     * @param orderBody    订单内容
-     * @return
-     * @throws Exception
-     */
-    Map<String, Object> getPayMap(BigDecimal amount, String orderNo, String notifyUrl, String returnUrl, String orderSubject, String orderBody, Integer userId) throws Exception;
-
-
     /**
      *
-     * @param amount BigDecimal 支付金额
-     * @param orderNo String 订单号
-     * @param notifyUrl String 异步通知地址
-     * @param returnUrl string 支付返回地址
-     * @param orderSubject String 订单标题
-     * @param orderBody String 订单内容
-     * @param userId int 用户id
-     * @param fee 各种费用
-     * @param organId 机构id
+     * @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, String orderNo, String notifyUrl, String returnUrl, String orderSubject, String orderBody, Integer userId,Map<String,BigDecimal> fee,Integer organId) throws Exception;
-
-    /**
-     *
-     * @param amount BigDecimal 支付金额
-     * @param orderNo String 订单号
-     * @param notifyUrl String 异步通知地址
-     * @param returnUrl string 支付返回地址
-     * @param orderSubject String 订单标题
-     * @param orderBody String 订单内容
-     * @param userId int 用户id
-     * @param fee Map 各种费用
-     * @param organId int 机构id
-     * @return
-     * @throws Exception
-     */
-    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;
-
-    Map query(String orderNo) 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;
 }

+ 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 更新历史陪练课程组状态

+ 3 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/StudentManageService.java

@@ -28,6 +28,9 @@ public interface StudentManageService {
      */
     PageInfo<StudentManageListDto> findStudentsByOrganId(StudentManageQueryInfo queryInfo);
 
+
+    PageInfo<SimpleUserDto> queryStudentsWithTeacher(StudentManageQueryInfo queryInfo);
+
     /**
      * @Author: Joburgess
      * @Date: 2019/9/20

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

@@ -107,4 +107,19 @@ public interface StudentPaymentOrderService extends BaseService<Long, StudentPay
 
 	PageInfoOrder<StudentPaymentOrder> OrderQueryPage(StudentPaymentOrderQueryInfo queryInfo);
 
+
+	/**
+	 * 获取订单第三方状态
+	 * @param id
+	 * @return
+	 */
+	Boolean getOrderStatus(Long id) throws Exception;
+
+	/**
+	 * 获取分部支付成功支付中订单数量
+	 * @param organId
+	 * @return
+	 */
+	Integer findOrganPayOrderNum(Integer organId);
+
 }

+ 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);
+
+}

+ 0 - 3
mec-biz/src/main/java/com/ym/mec/biz/service/SysConfigService.java

@@ -189,9 +189,6 @@ public interface SysConfigService extends BaseService<Long, SysConfig> {
 
     String PRACTICE_FREE_APPLY_EXPIRE_DATE = "practice_free_apply_expire_date";
 
-    //零星支付收到深圳大雅的分部
-    public static final String SZ_DA_YA_ORGAN_IDS = "sz_da_ya_organ_ids";
-
     /**
      * @return com.ym.mec.biz.dal.entity.SysConfig
      * @params paramName

+ 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);
+
+
+
 }

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

@@ -8,6 +8,7 @@ import com.ym.mec.common.entity.ImGroupModel;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.page.QueryInfo;
 import com.ym.mec.common.service.BaseService;
+
 import org.apache.ibatis.annotations.Param;
 
 import java.math.BigDecimal;
@@ -186,4 +187,11 @@ public interface TeacherService extends BaseService<Integer, Teacher> {
      * @return
      */
     PageInfo<BasicUserDto> queryStudent(QueryInfo queryInfo);
+    
+    /**
+     * 查询老师默认课酬
+     * @param organIdList
+     * @return
+     */
+    List<TeacherDefaultSalaryDto> queryTeacherDefaultSalary(String organIdList);
 }

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

@@ -2941,7 +2941,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
                     if (teacherIsChange) {
                         TeacherDefaultVipGroupSalary byTeacherAndCategory = teacherDefaultVipGroupSalaryDao.findByTeacherAndCategory(newCourseSchedule.getActualTeacherId(), byCourseSchedule.getVipGroupCategoryId());
                         if (Objects.nonNull(byTeacherAndCategory)) {
-                            onlineTeacherSalary = byTeacherAndCategory.getOnlineClassesSalary();
+                            onlineTeacherSalary = byTeacherAndCategory.getOfflineClassesSalary();
                             offlineTeacherSalary = byTeacherAndCategory.getOfflineClassesSalary();
                         }
                     } else {

+ 144 - 146
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,36 +516,40 @@ 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());
                     studentPaymentOrder.setStatus(DealStatusEnum.SUCCESS);
                     studentPaymentOrder.setUpdateTime(now);
-                    studentPaymentOrder.setRoutingOrganId(42);
+                    studentPaymentOrder.setRoutingOrganId(coursesGroup.getOrganId());
 
-                    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,48 @@ 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"
+            );
+
+            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 +610,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 +657,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 +668,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 +690,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 +719,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 +750,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 +764,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());

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

@@ -7,15 +7,13 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
-import com.ym.mec.biz.dal.dao.StudentPaymentOrderDao;
+import com.ym.mec.biz.dal.dao.*;
+import com.ym.mec.biz.dal.entity.Organization;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import com.ym.mec.biz.dal.dao.DegreeRegistrationDao;
-import com.ym.mec.biz.dal.dao.SporadicChargeInfoDao;
-import com.ym.mec.biz.dal.dao.SysConfigDao;
 import com.ym.mec.biz.dal.dto.PageInfoDegree;
 import com.ym.mec.biz.dal.entity.DegreeRegistration;
 import com.ym.mec.biz.dal.entity.SporadicChargeInfo;
@@ -54,6 +52,9 @@ public class DegreeRegistrationServiceImpl extends BaseServiceImpl<Integer, Degr
     @Autowired
     private PayService payService;
 
+    @Autowired
+    private OrganizationDao organizationDao;
+
     @Override
     public BaseDAO<Integer, DegreeRegistration> getDAO() {
         return degreeRegistrationDao;
@@ -69,15 +70,25 @@ public class DegreeRegistrationServiceImpl extends BaseServiceImpl<Integer, Degr
             throw new BizException("你选的考试级别不存在");
         }
 
-		if (!chargeInfo.getTitle().equals("一级") && !chargeInfo.getTitle().equals("二级") && StringUtils.equals("免考", degreeRegistration.getTheoryLevel())
-				&& StringUtils.isBlank(degreeRegistration.getTheoryCert())) {
-			throw new BizException("报考级别为“" + chargeInfo.getTitle() + "”且乐理级别是“免考”时,必须上传证书");
-		}
+        if (!chargeInfo.getTitle().equals("一级") && !chargeInfo.getTitle().equals("二级") && StringUtils.equals("免考", degreeRegistration.getTheoryLevel())
+                && StringUtils.isBlank(degreeRegistration.getTheoryCert())) {
+            throw new BizException("报考级别为“" + chargeInfo.getTitle() + "”且乐理级别是“免考”时,必须上传证书");
+        }
+
+        List<Organization> organs = organizationDao.findAllOrgans();
+        Integer organId = chargeInfo.getOrganId();
+        for (Organization organ : organs) {
+            if (degreeRegistration.getCity().contains(organ.getName())) {
+                organId = organ.getId();
+                break;
+            }
+        }
 
         String orderNo = idGeneratorService.generatorId("payment") + "";
 
         degreeRegistration.setLevel(chargeInfo.getTitle());
         degreeRegistration.setOrderNo(orderNo);
+        degreeRegistration.setOrganId(organId);
         BigDecimal theoryMoney = BigDecimal.ZERO;
         switch (degreeRegistration.getTheoryLevel()) {
             case "一级":
@@ -133,8 +144,8 @@ public class DegreeRegistrationServiceImpl extends BaseServiceImpl<Integer, Degr
         studentPaymentOrder.setActualAmount(amount);
         studentPaymentOrder.setStatus(DealStatusEnum.ING);
         studentPaymentOrder.setMusicGroupId(degreeRegistration.getSporadicId().toString());
-        studentPaymentOrder.setOrganId(chargeInfo.getOrganId());
-        studentPaymentOrder.setRoutingOrganId(chargeInfo.getOrganId());
+        studentPaymentOrder.setOrganId(organId);
+        studentPaymentOrder.setRoutingOrganId(organId);
         if (theoryMoney.compareTo(BigDecimal.ZERO) > 0) {
             studentPaymentOrder.setMemo("乐理" + degreeRegistration.getTheoryLevel() + ",费用:" + theoryMoney);
         }
@@ -153,31 +164,20 @@ public class DegreeRegistrationServiceImpl extends BaseServiceImpl<Integer, Degr
 
         String baseApiUrl = sysConfigDao.findConfigValue("base_api_url");
 
-        Map<String, BigDecimal> classFee = new HashMap<>();
-        classFee.put("course", BigDecimal.ZERO);
-        classFee.put("instrument", BigDecimal.ZERO);
-        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(),
+                organId,
                 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.setOrganId(organId);
         studentPaymentOrder.setMerNos((String) payMap.get("routingMerNos"));
         studentPaymentOrder.setPaymentChannel((String) payMap.get("type"));
         studentPaymentOrder.setUpdateTime(nowDate);
@@ -186,7 +186,7 @@ public class DegreeRegistrationServiceImpl extends BaseServiceImpl<Integer, Degr
     }
 
     @Override
-    public Boolean updateStatus(Integer id, Integer status,String orderNo) {
+    public Boolean updateStatus(Integer id, Integer status, String orderNo) {
         DegreeRegistration degree = degreeRegistrationDao.getLock(id);
         if (degree == null || degree.getStatus().equals(2)) {
             return true;

+ 4 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/impl/EduPracticeGroupServiceImpl.java

@@ -105,6 +105,8 @@ public class EduPracticeGroupServiceImpl implements EduPracticeGroupService{
     private StudentDao studentDao;
     @Autowired
     private TeacherCourseRewardService teacherCourseRewardService;
+    @Autowired
+    private StudentPaymentRouteOrderService studentPaymentRouteOrderService;
 
     private static final Logger LOGGER = LoggerFactory
             .getLogger(EduPracticeGroupService.class);
@@ -455,13 +457,14 @@ public class EduPracticeGroupServiceImpl implements EduPracticeGroupService{
             }
             studentPaymentOrder.setPaymentChannel("BALANCE");
             if(userCashAccount.getBalance().subtract(studentPaymentOrder.getExpectAmount()).doubleValue() >= 0){
+                studentPaymentRouteOrderService.addRouteOrder(orderNo, practiceGroupBuyParams.getOrganId(), studentPaymentOrder.getExpectAmount());
                 // 更新订单信息
                 studentPaymentOrder.setActualAmount(new BigDecimal(0));
                 studentPaymentOrder.setBalancePaymentAmount(studentPaymentOrder.getExpectAmount());
                 studentPaymentOrder.setStatus(DealStatusEnum.SUCCESS);
                 studentPaymentOrder.setUpdateTime(now);
                 studentPaymentOrder.setOrganId(practiceGroupBuyParams.getOrganId());
-                studentPaymentOrder.setRoutingOrganId(42);
+                studentPaymentOrder.setRoutingOrganId(practiceGroupBuyParams.getOrganId());
 
                 sysUserCashAccountService.updateBalance(practiceGroupBuyParams.getStudentId(), studentPaymentOrder.getExpectAmount().negate(),PlatformCashAccountDetailTypeEnum.PAY_FEE,operatorInfo+",教务代买");
 

+ 86 - 60
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java

@@ -25,6 +25,7 @@ import com.ym.mec.thirdparty.message.MessageSenderPluginContext.MessageSender;
 import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.date.DateUtil;
 import com.ym.mec.util.http.HttpUtil;
+
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -152,6 +153,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");
 
@@ -178,6 +181,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         if (musicGroup.getStatus() != MusicGroupStatusEnum.DRAFT && musicGroup.getStatus() != MusicGroupStatusEnum.AUDIT) {
             throw new BizException("乐团初始状态错误");
         }
+        musicGroup.setDelFlag(false);
         // 保存乐团基本信息
         musicGroupDao.insert(musicGroup);
 
@@ -309,6 +313,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 +324,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 +341,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 +359,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 +537,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 +545,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 +556,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 +594,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 +776,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 +784,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 +795,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 +832,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);
@@ -1260,6 +1258,30 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
     }
 
     @Override
+	public boolean deleteMusicGroup(String musicGroupId) {
+
+        MusicGroup musicGroup = musicGroupDao.get(musicGroupId);
+        
+        if(musicGroup == null){
+        	throw new BizException("乐团不存在");
+        }
+        
+        if(musicGroup.getDelFlag() == true){
+        	throw new BizException("乐团已删除");
+        }
+        
+        if (musicGroup.getStatus() != MusicGroupStatusEnum.CANCELED) {
+            throw new BizException("乐团当前状态是{},不能删除", musicGroup.getStatus().getMsg());
+        }
+        
+        musicGroup.setUpdateTime(new Date());
+        musicGroup.setDelFlag(true);
+        musicGroupDao.update(musicGroup);
+        
+		return true;
+	}
+
+	@Override
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
     public boolean pauseMusicGroup(String musicGroupId) {
         SysUser sysUser = sysUserFeignService.queryUserInfo();
@@ -1594,7 +1616,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 +1644,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 +1656,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 +1678,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 +1686,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 +1727,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 +1746,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
@@ -1834,8 +1854,6 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
             paymentDetail.setUpdateTime(date);
             paymentDetail.setUserId(userId);
             paymentDetail.setChannel(studentPaymentOrder.getPaymentChannel());
-            paymentDetail.setComAmount(studentPaymentOrder.getComAmount().negate());
-            paymentDetail.setPerAmount(studentPaymentOrder.getPerAmount().negate());
             sysUserCashAccountDetailService.insert(paymentDetail);
             MusicGroup musicGroup = musicGroupDao.get(musicGroupId);
             if (musicGroup.getOwnershipType() != null && musicGroup.getOwnershipType() == CooperationOrgan.OwnershipType.OWN) {
@@ -1926,6 +1944,10 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
             musicGroupPageInfo = queryPage(queryInfo);
         }
         List<MusicGroup> musicGroupList = musicGroupPageInfo.getRows();
+        
+        if(musicGroupList == null || musicGroupList.size() == 0){
+        	return musicGroupPageInfo;
+        }
         // 获取学校编号列表
 //        Set<Integer> schoolIds = musicGroupList.stream().map(e -> e.getSchoolId()).collect(Collectors.toSet());
 //        List<Map<Integer, String>> schoolNames = schoolDao.queryNameByIds(StringUtils.join(schoolIds,","));
@@ -1965,6 +1987,9 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 //        Set<Integer> organIds = musicGroupList.stream().map(e -> e.getOrganId()).collect(Collectors.toSet());
 //        Map<Integer,String> organNames = MapUtil.convertMybatisMap(organizationDao.findOrganNameMap(StringUtils.join(organIds,",")));
 
+        List<MusicGroupPurchaseList> musicGroupPurchaseListCount = musicGroupPurchaseListDao.getCount(musicGroupIds);
+        Map<String, Integer> purchaseListMap = musicGroupPurchaseListCount.stream().collect(Collectors.toMap(MusicGroupPurchaseList::getMusicGroupId, MusicGroupPurchaseList::getPurchaseNum));
+
         //获取分部名称map
         musicGroupList.forEach(e -> {
 //            e.setSchoolName(schoolNameMap.get(e.getSchoolId()));
@@ -1974,6 +1999,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
             e.setTeamTeacherName(teamTeacherNameMap.get(e.getTeamTeacherId()));
             e.setPayNum(payNumMap.get(e.getId()) == null ? 0 : payNumMap.get(e.getId()));
             e.setChargeTypeName(chargeTypeNameMap.get(e.getChargeTypeId()));
+            e.setHasVerifyMusicalList(purchaseListMap.get(e.getId()) != null);
         });
         return musicGroupPageInfo;
     }

+ 268 - 298
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;
@@ -24,373 +33,334 @@ import java.util.stream.Collectors;
  */
 @Service
 public class PayServiceImpl implements PayService {
-
-    @Autowired
-    private UnionPayFeignService unionPayFeignService;
     @Autowired
     private StudentPaymentOrderService studentPaymentOrderService;
     @Autowired
-    private SysAccountService sysAccountService;
-    @Autowired
-    private MusicGroupDao musicGroupDao;
-    @Autowired
     private SysConfigDao sysConfigDao;
     @Autowired
     private SysPaymentConfigService sysPaymentConfigService;
+    @Autowired
+    private StudentPaymentRouteOrderDao studentPaymentRouteOrderDao;
 
-
-    /**
-     * 返回订单提交数据
-     *
-     * @param amount       金额
-     * @param orderNo      订单编号
-     * @param notifyUrl    异步通知地址
-     * @param returnUrl    支付返回地址
-     * @param orderSubject 订单标题
-     * @param orderBody    订单内容
-     * @return
-     * @throws Exception
-     */
     @Override
-    public Map<String, Object> getPayMap(BigDecimal amount, String orderNo, String notifyUrl, String returnUrl, String orderSubject, String orderBody, Integer userId) throws Exception {
-
-        String company = "daya";
-
-        //支付通道决策
-        Map<String, Object> unionPay = new HashMap<>();
-        SysAccount routingAccount = getRoutingAccount(company, amount);
-        PaymentChannelTypeEnum paymentChannelType = PaymentChannelTypeEnum.COM;
-        if (routingAccount.getType().equals("PER")) {
-            paymentChannelType = PaymentChannelTypeEnum.PER;
-        }
-        Map<String, Object> payMap = null;
-        String type = null;
-        if (routingAccount.getChannel().equals("YQPAY")) {
-            payMap = YqPayUtil.getPayMap(amount, orderNo, notifyUrl, returnUrl, orderSubject, orderBody, routingAccount.getMerNo(), routingAccount.getRoutingMerNo());
-            type = "YQPAY";
-        } else {
-            payMap = Payment.getPayMap(amount, orderNo, notifyUrl, returnUrl, orderSubject, orderBody, routingAccount.getMerNo(), null);
-            type = "ADAPAY";
+    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 {
+        String usePaymentConfig = sysConfigDao.findConfigValue("use_payment_config");
+        List<RouteScaleDto> routeScaleDtos = null;
+        //使用配置开关
+        if (usePaymentConfig.equals("0")) {
+            routeScaleDtos = noUsePaymentConfig(amount);
         }
 
-        unionPay.put("orderNo", orderNo);
-        unionPay.put("type", type);
-        unionPay.put("paymentChannelType", paymentChannelType);
-        unionPay.put("payMap", payMap);
-        return unionPay;
-    }
-
-    @Override
-    public Map<String, Object> getPayMap(BigDecimal amount, String orderNo, String notifyUrl, String returnUrl, String orderSubject, String orderBody, Integer userId, Map<String, BigDecimal> fee, Integer organId) throws Exception {
-        String company = "daya";
-        //直接收到深圳的分部
-        String sDaYaOrganIds = sysConfigDao.findConfigValue(SysConfigService.SZ_DA_YA_ORGAN_IDS);
-        if (StringUtils.isNotBlank(sDaYaOrganIds)) {
-            List<String> sDaYaOrganIdList = Arrays.asList(sDaYaOrganIds.split(","));
-            if (sDaYaOrganIdList.contains(organId.toString())) {
-                company = "sdaya";
-            }
+        //根据金额获取分润
+        if (routeScaleDtos == null) {
+            routeScaleDtos = getAmountChannel(organId, amount, receiver);
         }
-        //支付通道决策
-        Map<String, Object> unionPay = new HashMap<>();
-        Map<String, BigDecimal> routingFee = getRoutingFee(company, amount, fee, organId);
-        List<SysAccount> accounts = getRoutingAccount(routingFee, company, organId);
-        SysAccount routingAccount = accounts.get(0);
-
-        Map<String, Object> payMap = null;
-        String type = null;
-        List<Map<String, Object>> tempRoutingList = new ArrayList();
-        for (SysAccount account : accounts) {
-            Map<String, Object> routingList = new HashMap<>();
-            if (account.getChannel().equals("YQPAY")) {
-                routingList.put("routingMerNo", account.getRoutingMerNo());//分佣账户
-                routingList.put("routingFee", account.getRoutingFee().subtract((account.getRoutingFee().multiply(new BigDecimal("0.28")).divide(new BigDecimal(100))).setScale(2, BigDecimal.ROUND_HALF_UP))); //分佣金额
-            } else {
-                routingList.put("member_id", account.getMerNo());//分佣账户
-                routingList.put("amount", amount);//分佣金额
-                routingList.put("fee_flag", "Y"); //承担手续费
-            }
-            tempRoutingList.add(routingList);
+        //零星支付,收到指定
+        if (routeScaleDtos == null) {
+            routeScaleDtos = getSporadicChannel(amount, receiver);
         }
-
-        String routingMerNos;
-        if (routingAccount.getChannel().equals("YQPAY")) {
-            if (accounts.size() == 1 && routingAccount.getMerNo().equals(routingAccount.getRoutingMerNo())) {
-                tempRoutingList = null;
-            }
-            payMap = YqPayUtil.getPayMap(amount, orderNo, notifyUrl, returnUrl, orderSubject, orderBody, routingAccount.getMerNo(), tempRoutingList);
-            type = "YQPAY";
-            routingMerNos = accounts.stream().map(sysAccount -> sysAccount.getRoutingMerNo()).collect(Collectors.joining(","));
-        } else {
-            if (accounts.size() == 1 && routingAccount.getRoutingOrganId().equals(organId)) {
-                tempRoutingList = null;
-            }
-            payMap = Payment.getPayMap(amount, orderNo, notifyUrl, returnUrl, orderSubject, orderBody, routingAccount.getMerNo(), tempRoutingList);
-            type = "ADAPAY";
-            routingMerNos = accounts.stream().map(SysAccount::getMerNo).collect(Collectors.joining(","));
+        //比例或者笔数分佣
+        if (routeScaleDtos == null) {
+            routeScaleDtos = getPaymentConfigChannel(organId, amount);
         }
 
-
-        unionPay.put("orderNo", orderNo);
-        unionPay.put("type", type);
-        unionPay.put("payMap", payMap);
-        unionPay.put("routingFee", routingFee);
-        unionPay.put("routingMerNos", routingMerNos);
-        unionPay.put("routingOrganId", accounts.get(0).getRoutingOrganId());
-        return unionPay;
+        return getPayRoute(amount, balanceAmount, orderNo, notifyUrl, returnUrl, orderSubject, orderBody, routeScaleDtos);
     }
 
-    @Override
-    public 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 {
-        String company = "daya";
-        //指定收款方
-        Set<String> companies = new HashSet<>();
-        companies.add("sdaya");
-        companies.add("tq");
-        if (companies.contains(receiver)) {
-            company = receiver;
-            receiver = null;
+    private List<RouteScaleDto> noUsePaymentConfig(BigDecimal amount) {
+        String paymentChannel = sysConfigDao.findConfigValue("payment_channel");
+        List<RouteScaleDto> routeScaleDtos = new ArrayList<>();
+        RouteScaleDto routeScaleDto = new RouteScaleDto();
+        routeScaleDto.setAmount(amount);
+        routeScaleDto.setOrganId(ConfigInit.organId);
+        routeScaleDto.setScale(100);
+        if (paymentChannel.equals("YQPAY")) {
+            routeScaleDto.setMerNo(YqPayUtil.merNo);
+            routeScaleDto.setPayType(PaymentChannelEnum.YQPAY);
         } else {
-            receiver = null;
+            routeScaleDto.setMerNo(ConfigInit.merNo);
+            routeScaleDto.setPayType(PaymentChannelEnum.ADAPAY);
         }
+        routeScaleDto.setFeeFlag("Y");
+        routeScaleDtos.add(routeScaleDto);
+        return routeScaleDtos;
+    }
 
-        //直接收到深圳的分部
-        String sDaYaOrganIds = sysConfigDao.findConfigValue(SysConfigService.SZ_DA_YA_ORGAN_IDS);
-        if (StringUtils.isNotBlank(sDaYaOrganIds)) {
-            List<String> sDaYaOrganIdList = Arrays.asList(sDaYaOrganIds.split(","));
-            if (sDaYaOrganIdList.contains(organId.toString())) {
-                company = "sdaya";
-            }
+    private List<RouteScaleDto> getPaymentConfigChannel(Integer organId, BigDecimal amount) {
+        SysPaymentConfig paymentConfig = sysPaymentConfigService.findPaymentConfigByOrganId(organId);
+        if (paymentConfig == null) {
+            return noUsePaymentConfig(amount);
         }
-
-        //支付通道决策
-        Map<String, Object> unionPay = new HashMap<>();
-        Map<String, BigDecimal> routingFee = getRoutingFee(company, amount, fee, organId, receiver);
-        List<SysAccount> accounts = getRoutingAccount(routingFee, company, organId);
-        SysAccount routingAccount = accounts.get(0);
-
-        Map<String, Object> payMap = null;
-        String type = null;
-        List<Map<String, Object>> tempRoutingList = new ArrayList();
-        for (SysAccount account : accounts) {
-            Map<String, Object> routingList = new HashMap<>();
-            if (account.getChannel().equals("YQPAY")) {
-                routingList.put("routingMerNo", account.getRoutingMerNo());//分佣账户
-                routingList.put("routingFee", account.getRoutingFee().subtract((account.getRoutingFee().multiply(new BigDecimal("0.28")).divide(new BigDecimal(100))).setScale(2, BigDecimal.ROUND_HALF_UP))); //分佣金额
+        if (StringUtils.isBlank(paymentConfig.getRouteScale())) {
+            List<RouteScaleDto> routeScaleDtos = new ArrayList<>();
+            RouteScaleDto routeScaleDto = new RouteScaleDto();
+            routeScaleDto.setAmount(amount);
+            routeScaleDto.setOrganId(organId);
+            routeScaleDto.setScale(100);
+            routeScaleDto.setPayType(paymentConfig.getPayType());
+            if (paymentConfig.getPayType().equals(PaymentChannelEnum.YQPAY)) {
+                routeScaleDto.setMerNo(paymentConfig.getYqMerNo());
             } else {
-                routingList.put("member_id", account.getMerNo());//分佣账户
-                routingList.put("amount", account.getRoutingFee());//分佣金额
-                routingList.put("fee_flag", "Y"); //承担手续费
+                routeScaleDto.setMerNo(paymentConfig.getHfMerNo());
             }
-            tempRoutingList.add(routingList);
+            routeScaleDto.setFeeFlag("Y");
+            routeScaleDtos.add(routeScaleDto);
+            return routeScaleDtos;
         }
 
-        String routingMerNos;
-        if (routingAccount.getChannel().equals("YQPAY")) {
-            if (accounts.size() == 1 && routingAccount.getMerNo().equals(routingAccount.getRoutingMerNo())) {
-                tempRoutingList = null;
+        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());
+                }
             }
-            payMap = YqPayUtil.getPayMap(amount, orderNo, notifyUrl, returnUrl, orderSubject, orderBody, routingAccount.getMerNo(), tempRoutingList);
-            type = "YQPAY";
-            routingMerNos = accounts.stream().map(SysAccount::getRoutingMerNo).collect(Collectors.joining(","));
-        } else {
-            if (accounts.size() == 1 && routingAccount.getRoutingOrganId().equals(organId)) {
-                tempRoutingList = null;
+        }
+
+        //笔数比例
+        if (paymentConfig.getType().equals(1)) {
+            int payOrderNums = studentPaymentOrderService.findOrganPayOrderNum(organId); //获取支付中和成功的订单数
+            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();
+                boolean flag = false;
+                if (rem > scale && rem <= scale + num) {
+                    routeScaleDto.setScale(100);
+                    flag = true;
+                }
+                scale += num;
+                if (!flag) {
+                    iterator.remove();
+                }
             }
-            payMap = Payment.getPayMap(amount, orderNo, notifyUrl, returnUrl, orderSubject, orderBody, routingAccount.getMerNo(), tempRoutingList);
-            type = "ADAPAY";
-            routingMerNos = accounts.stream().map(SysAccount::getMerNo).collect(Collectors.joining(","));
         }
-        unionPay.put("orderNo", orderNo);
-        unionPay.put("type", type);
-        unionPay.put("payMap", payMap);
-        unionPay.put("routingFee", routingFee);
-        unionPay.put("routingMerNos", routingMerNos);
-        unionPay.put("routingOrganId", accounts.get(0).getRoutingOrganId());
-        return unionPay;
+        return routeScaleDtos;
     }
 
-    @Override
-    public Map<String, Object> query(String orderNo) throws Exception {
-        return new UnionPay(unionPayFeignService).query(orderNo);
-    }
 
     /**
-     * 获取收款账户
+     * 根据金额获取渠道
      *
-     * @param company
-     * @param money
-     * @return
+     * @param amount 金额
      */
-    private SysAccount getRoutingAccount(String company, BigDecimal money) {
-        SysAccount routingAccount = null;
-        int payOrderNums = studentPaymentOrderService.findPayOrderNum(); //获取支付中和成功的订单数
-        //前几笔收入私户
-        int nums = Integer.parseInt(sysConfigDao.findConfigValue("per_account_nums"));
-
-        String type = null;
-        String channel = null;
-        int rem = (payOrderNums + 1) % 10;
-        if (rem > 0 && rem <= nums) { //私人账户
-            channel = sysConfigDao.findConfigValue("per_account_channel");
-            type = "PER";
-        } else {
-            channel = sysConfigDao.findConfigValue("com_account_channel");
-            type = "COM";
+    private List<RouteScaleDto> getAmountChannel(Integer organId, BigDecimal amount, String receiver) {
+        String amountChannel = sysConfigDao.findConfigValue("amount_channel");
+        if (StringUtils.isBlank(amountChannel)) {
+            return null;
         }
-        if (company.equals("yaming")) {
-            type = "PER";
+        Set<String> musicGroupType = new HashSet<>();
+        musicGroupType.add("renew");
+        musicGroupType.add("register");
+        if (musicGroupType.contains(receiver)) {
+            receiver = "musicGroupBuy";
         }
-        SysAccount account = sysAccountService.getOneAccount(company, channel, type, null);
 
-        return account;
-    }
+        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;
+            }
+        }
 
-    /**
-     * 获取收款账户
-     *
-     * @param routingFee
-     * @param company
-     * @return
-     */
-    private List<SysAccount> getRoutingAccount(Map<String, BigDecimal> routingFee, String company, Integer organId) {
-        String type = "";
-        if (routingFee.get("COM").compareTo(BigDecimal.ZERO) > 0 && routingFee.get("PER").compareTo(BigDecimal.ZERO) > 0) {
-            type = "COM,PER";
-        } else if (routingFee.get("COM").compareTo(BigDecimal.ZERO) > 0 && routingFee.get("PER").compareTo(BigDecimal.ZERO) == 0) {
-            type = "COM";
-        } else if (routingFee.get("COM").compareTo(BigDecimal.ZERO) == 0 && routingFee.get("PER").compareTo(BigDecimal.ZERO) > 0) {
-            type = "PER";
+        if (routeOrganId == null) {
+            return null;
         }
-        List<SysAccount> accounts = new ArrayList<>();
-        if (sysConfigDao.findConfigValue("payment_channel").equals("ADAPAY")) {
-            BigDecimal amount = routingFee.get("COM").add(routingFee.get("PER"));
-            routingFee.put("COM", amount);
-            routingFee.put("PER", BigDecimal.ZERO);
-            accounts = sysAccountService.getAdaAccount(organId, "ADAPAY", amount);
-        } else {
-            accounts = sysAccountService.getAccount(company, "YQPAY", type, null);
+
+        //调度到 鎏逸乐器经营部 检测限定金额
+        if (checkHasMaxReceipt(routeOrganId, amount)) {
+            return null;
         }
 
-        for (SysAccount account : accounts) {
-            if (account.getType().equals("COM")) {
-                account.setRoutingFee(routingFee.get("COM"));
-            } else {
-                account.setRoutingFee(routingFee.get("PER"));
-            }
+        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());
         }
-        return accounts;
+        routeScaleDto.setFeeFlag("Y");
+        routeScaleDtos.add(routeScaleDto);
+        return routeScaleDtos;
     }
 
     /**
-     * 获取分佣金额
+     * 零星支付获取渠道
      *
-     * @param fee
-     * @param organId
+     * @param amount
      * @return
      */
-    private Map<String, BigDecimal> getRoutingFee(String company, BigDecimal amount, Map<String, BigDecimal> fee, Integer organId) {
-        Map<String, BigDecimal> routingFee = new HashMap<>(2);
-        routingFee.put("COM", BigDecimal.ZERO);
-        routingFee.put("PER", BigDecimal.ZERO);
-        if (company.equals("yaming")) {
-            routingFee.put("PER", amount);
-            return routingFee;
+    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;
         }
 
-        SysPaymentConfig paymentConfig = sysPaymentConfigService.findPaymentConfigByOrganId(organId);
+        Map<String, Object> channel = (Map<String, Object>) JSON.parseObject(SporadicChannel, Map.class);
 
-        int payOrderNums = studentPaymentOrderService.findPayOrderNum(); //获取支付中和成功的订单数
-        //前几笔收入私户
-        Integer nums = Integer.parseInt(sysConfigDao.findConfigValue("per_account_nums"));
-        if (paymentConfig != null && paymentConfig.getType().equals(1)) {
-            nums = paymentConfig.getPerScale();
+        BigDecimal minReceiptMoney = new BigDecimal(channel.get("minReceipt").toString()); //最小接收的金额(不包含)
+        if (amount.compareTo(minReceiptMoney) <= 0) {
+            return null;
         }
 
-        String type = null;
-        int rem = (payOrderNums + 1) % 10;
-        if (rem > 0 && rem <= nums) { //私人账户
-            type = "PER";
-        } else {
-            type = "COM";
+        Integer organId = Integer.parseInt(channel.get("organId").toString());
+        if (checkHasMaxReceipt(organId, amount)) {
+            return null;
         }
-        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);
-            }
+        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());
         }
-        return routingFee;
+        routeScaleDto.setFeeFlag("Y");
+        routeScaleDtos.add(routeScaleDto);
+        return routeScaleDtos;
     }
 
+    //按金额和零星支付(调度到 鎏逸乐器经营部 检测限定金额)
+    private Boolean checkHasMaxReceipt(Integer organId, BigDecimal amount) {
+        SysPaymentConfig paymentConfig = sysPaymentConfigService.findPaymentConfigByOrganId(organId);
 
-    private Map<String, BigDecimal> getRoutingFee(String company, BigDecimal amount, Map<String, BigDecimal> fee, Integer organId, String receiver) {
-        Map<String, BigDecimal> routingFee = new HashMap<>(2);
-        routingFee.put("COM", BigDecimal.ZERO);
-        routingFee.put("PER", BigDecimal.ZERO);
-        if (company.equals("yaming")) {
-            routingFee.put("PER", amount);
-            return routingFee;
+        if (!paymentConfig.getHfMerNo().equals("H004217")) {
+            return false;
         }
+        BigDecimal monthMaxReceipt = new BigDecimal(75000); //每月限定金额
+        BigDecimal totalMaxReceipt = new BigDecimal(5000000); //总限定金额(500W)
 
-        if (receiver != null) {
-            routingFee.put(receiver, amount);
-            return routingFee;
-        }
+        Date monthStartTime = DateUtil.getFirstDayOfMonth(new Date());
 
-        SysPaymentConfig paymentConfig = sysPaymentConfigService.findPaymentConfigByOrganId(organId);
+        //已收金额
+        List<PaymentChannelEnum> paymentChannelList = new ArrayList<>();
+        paymentChannelList.add(PaymentChannelEnum.YQPAY);
+        paymentChannelList.add(PaymentChannelEnum.ADAPAY);
 
-        int payOrderNums = studentPaymentOrderService.findPayOrderNum(); //获取支付中和成功的订单数
-        //前几笔收入私户
-        Integer nums = Integer.parseInt(sysConfigDao.findConfigValue("per_account_nums"));
-        if (paymentConfig != null && paymentConfig.getType().equals(1)) {
-            nums = paymentConfig.getPerScale();
+        BigDecimal monthHasReceipt = studentPaymentRouteOrderDao.getRouteOrderAmount(organId, paymentChannelList, monthStartTime);
+        monthHasReceipt = monthHasReceipt == null ? BigDecimal.ZERO : monthHasReceipt;
+        if (amount.add(monthHasReceipt).compareTo(monthMaxReceipt) >= 0) {
+            return true;
         }
+        BigDecimal totalHasReceipt = studentPaymentRouteOrderDao.getRouteOrderAmount(organId, paymentChannelList, null);
+        totalHasReceipt = totalHasReceipt == null ? BigDecimal.ZERO : totalHasReceipt;
+        return amount.add(totalHasReceipt).compareTo(totalMaxReceipt) >= 0;
+    }
 
-        String type = null;
-        int rem = (payOrderNums + 1) % 10;
-        if (rem > 0 && rem <= nums) { //私人账户
-            type = "PER";
-        } else {
-            type = "COM";
+    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;
+
+        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;
+        BigDecimal hasRouteMoney = BigDecimal.ZERO;
+        List<Map<String, Object>> tempRoutingList = new ArrayList<>();
+
+        PaymentChannelEnum patType = null;
+        boolean feeFlag = false;
+        Set<String> routingMerNoSet = new HashSet<>();
+        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);
+            BigDecimal routingMoney = amount.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);
+                routingMoney = amount.subtract(hasRouteMoney).setScale(2, BigDecimal.ROUND_HALF_UP);
+            }
+
+            if (routingFee.compareTo(BigDecimal.ZERO) <= 0) {
+                continue;
+            }
+
+            hasRouteAmount = hasRouteAmount.add(routingFee);
+            hasRouteBalanceAmount = hasRouteBalanceAmount.add(routeBalanceAmount);
+            hasRouteMoney = hasRouteMoney.add(routingMoney);
+
+            routingList.put("routingMerNo", routeScaleDto.getMerNo());//分佣账户
+            routingList.put("routingFee", routingFee); //分佣金额
+            tempRoutingList.add(routingList);
+            if (routeScaleDto.getFeeFlag().equals("Y")) {
+                feeFlag = true;
+            }
+            if (i == routeScaleDtos.size() && !feeFlag) {
+                routeScaleDto.setFeeFlag("Y");
+            }
+
+            StudentPaymentRouteOrder studentPaymentRouteOrder = new StudentPaymentRouteOrder();
+            studentPaymentRouteOrder.setOrderNo(orderNo);
+            studentPaymentRouteOrder.setRouteOrganId(routeScaleDto.getOrganId());
+            studentPaymentRouteOrder.setFeeFlag(routeScaleDto.getFeeFlag());
+            studentPaymentRouteOrder.setRouteAmount(routingMoney);
+            studentPaymentRouteOrder.setRouteBalanceAmount(routeBalanceAmount);
+            studentPaymentRouteOrder.setMerNo(routeScaleDto.getMerNo());
+            RouteOrders.add(studentPaymentRouteOrder);
+            routingMerNoSet.add(routeScaleDto.getMerNo());
         }
-        routingFee.put(type, amount);
 
-        if (paymentConfig == null || !paymentConfig.getType().equals(2)) {
-            return routingFee;
+        if (studentPaymentRouteOrderDao.batchAdd(RouteOrders) <= 0) {
+            throw new BizException("调用支付接口失败");
         }
-        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);
+
+        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);
         }
-        return routingFee;
+        String routingMerNos = String.join(",", routingMerNoSet);
+
+        unionPay.put("orderNo", orderNo);
+        unionPay.put("type", patType.getCode());
+        unionPay.put("payMap", payMap);
+        unionPay.put("routingMerNos", routingMerNos);
+        return unionPay;
     }
 
 }

ファイルの差分が大きいため隠しています
+ 247 - 245
mec-biz/src/main/java/com/ym/mec/biz/service/impl/PracticeGroupServiceImpl.java


+ 42 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentManageServiceImpl.java

@@ -7,6 +7,7 @@ import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.dal.entity.Student;
 import com.ym.mec.biz.dal.entity.StudentRegistration;
 import com.ym.mec.biz.dal.entity.SysUserCashAccount;
+import com.ym.mec.biz.dal.entity.Teacher;
 import com.ym.mec.biz.dal.enums.YesOrNoEnum;
 import com.ym.mec.biz.dal.page.*;
 import com.ym.mec.biz.service.StudentManageService;
@@ -18,9 +19,11 @@ import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.im.ImFeignService;
 import com.ym.mec.util.collection.MapUtil;
 import org.apache.commons.lang3.StringUtils;
+import org.apache.poi.ss.formula.functions.T;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
 
 import java.util.*;
 import java.util.stream.Collectors;
@@ -162,6 +165,45 @@ public class StudentManageServiceImpl implements StudentManageService {
     }
 
     @Override
+    public PageInfo<SimpleUserDto> queryStudentsWithTeacher(StudentManageQueryInfo queryInfo) {
+        PageInfo<SimpleUserDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
+        Map<String, Object> params = new HashMap<String, Object>();
+        MapUtil.populateMap(params, queryInfo);
+
+        Teacher teacher = teacherDao.get(queryInfo.getTeacherId());
+        if(Objects.isNull(teacher)){
+            return null;
+        }
+        List<Integer> organIds=new ArrayList<>();
+        if(Objects.nonNull(teacher.getTeacherOrganId())){
+            organIds.add(teacher.getTeacherOrganId());
+        }
+        if(StringUtils.isNotBlank(teacher.getFlowOrganRange())){
+            List<Integer> flowOrganRangeIds = Arrays.stream(teacher.getFlowOrganRange().split(",")).map(e -> Integer.valueOf(e)).collect(Collectors.toList());
+            organIds.addAll(flowOrganRangeIds);
+        }
+
+        if(CollectionUtils.isEmpty(organIds)){
+            return null;
+        }
+
+        params.put("organIds", organIds);
+
+        List<SimpleUserDto> dataList = null;
+        int count = studentDao.countStudentsWithOrgan(params);
+        if (count > 0) {
+            pageInfo.setTotal(count);
+            params.put("offset", pageInfo.getOffset());
+            dataList = studentDao.getStudentsWithOrgan(params);
+        }
+        if (count == 0) {
+            dataList = new ArrayList<>();
+        }
+        pageInfo.setRows(dataList);
+        return pageInfo;
+    }
+
+    @Override
     public StudentManageListDto findStudentManageBaseInfo(Integer userId) {
         return studentManageDao.findStudentBaseInfoByUserID(userId);
     }

+ 56 - 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;
@@ -25,6 +26,7 @@ import com.ym.mec.util.collection.MapUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
 import java.util.*;
@@ -52,6 +54,8 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
     private SysUserCashAccountDao sysUserCashAccountDao;
     @Autowired
     private StudentRepairService studentRepairService;
+    @Autowired
+    private SysUserCashAccountService sysUserCashAccountService;
 
     @Override
     public BaseDAO<Long, StudentPaymentOrder> getDAO() {
@@ -95,13 +99,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 +149,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 +170,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")) {
@@ -189,9 +196,30 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
         closeOrders(orderNoList);
     }
 
+    @Transactional(rollbackFor = Exception.class)
     public void updateOrder(Map<String, String> rpMap) throws Exception {
         DealStatusEnum status = rpMap.get("tradeState").equals("1") ? DealStatusEnum.SUCCESS : DealStatusEnum.FAILED;
         StudentPaymentOrder order = findOrderByOrderNo(rpMap.get("merOrderNo"));
+        //关闭或失败的订单查询订单成功,订单改成成功,钱退到余额
+        if (order != null && (order.getStatus().equals(DealStatusEnum.CLOSE) || order.getStatus().equals(DealStatusEnum.FAILED)) && status.equals(DealStatusEnum.SUCCESS)) {
+            String memo = order.getStatus().equals(DealStatusEnum.CLOSE) ? "关闭订单" : "失败订单";
+            memo = memo+",实际支付成功,退到用户余额";
+            //更新订单状态
+            order.setStatus(status);
+            order.setTransNo(rpMap.get("orderNo"));
+            order.setPaymentBusinessChannel(rpMap.get("channelType"));
+            order.setPayTime(new Date());
+            order.setMemo(memo);
+            int updateCount = this.update(order);
+            if (updateCount <= 0) {
+                throw new BizException("订单更新失败");
+            }
+            //增加用户余额
+            sysUserCashAccountService.updateBalance(order.getUserId(), order.getActualAmount(),
+                    PlatformCashAccountDetailTypeEnum.REFUNDS, memo+",订单号:"+order.getOrderNo());
+            return;
+        }
+
         if (order == null || !order.getStatus().equals(DealStatusEnum.ING)) {
             return;
         }
@@ -215,7 +243,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 +278,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 +355,22 @@ 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);
+        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;
+    }
+
+    @Override
+    public Integer findOrganPayOrderNum(Integer organId) {
+        return studentPaymentOrderDao.findOrganPayOrderNum(organId);
+    }
 }

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

@@ -0,0 +1,113 @@
+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 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.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);
 		}

+ 5 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRegistrationServiceImpl.java

@@ -593,7 +593,7 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
             studentPaymentOrder.setMusicGroupId(musicGroupId);
             studentPaymentOrder.setClassGroupId(studentAddDto.getSignClassId());
             studentPaymentOrder.setOrganId(musicGroup.getOrganId());
-            studentPaymentOrder.setRoutingOrganId(42);
+            studentPaymentOrder.setRoutingOrganId(musicGroup.getOrganId());
 
             //生成订单明细
             List<StudentPaymentOrderDetail> studentPaymentOrderDetails = studentAddDto.getStudentPaymentOrderDetails();
@@ -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);
+    }
 }

+ 4 - 3
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherDefaultVipGroupSalaryServiceImpl.java

@@ -63,6 +63,7 @@ public class TeacherDefaultVipGroupSalaryServiceImpl extends BaseServiceImpl<Lon
 	public TeacherDefaultVipGroupSalary findByTeacherAndCategory(Integer userId, Integer categoryId) {
 		TeacherDefaultVipGroupSalary byTeacherAndCategory = teacherDefaultVipGroupSalaryDao.findByTeacherAndCategory(userId, categoryId);
 		if (Objects.isNull(byTeacherAndCategory)) {
+			byTeacherAndCategory = new TeacherDefaultVipGroupSalary();
 			byTeacherAndCategory.setOfflineClassesSalary(new BigDecimal(0));
 			byTeacherAndCategory.setOnlineClassesSalary(new BigDecimal(0));
 		}
@@ -160,9 +161,9 @@ public class TeacherDefaultVipGroupSalaryServiceImpl extends BaseServiceImpl<Lon
 										&& vipGroupSalarySettlementDto.getOnlineSalarySettlement().getSalarySettlementType() == SalarySettlementTypeEnum.TEACHER_DEFAULT
 										&& (ts.getCourseSchedule().getTeachMode() == TeachModeEnum.ONLINE)) {// 线上课
 									if (teacher.getJobNature() != JobNatureEnum.FULL_TIME
-											&& ts.getExpectSalary().compareTo(origTdms.getOnlineClassesSalary()) == 0
-											&& tdms.getOnlineClassesSalary().compareTo(origTdms.getOnlineClassesSalary()) != 0) {
-										ts.setExpectSalary(tdms.getOnlineClassesSalary());
+											&& ts.getExpectSalary().compareTo(origTdms.getOfflineClassesSalary()) == 0
+											&& tdms.getOfflineClassesSalary().compareTo(origTdms.getOfflineClassesSalary()) != 0) {
+										ts.setExpectSalary(tdms.getOfflineClassesSalary());
 										list.add(ts);
 									}
 								} else if (vipGroupSalarySettlementDto.getOfflineSalarySettlement() != null

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

@@ -24,6 +24,7 @@ import com.ym.mec.im.ImFeignService;
 import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.date.DateUtil;
 import com.ym.mec.util.idcard.IdcardValidator;
+
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -581,4 +582,9 @@ public class TeacherServiceImpl extends BaseServiceImpl<Integer, Teacher>  imple
 		return pageInfo;
 	}
 
+	@Override
+	public List<TeacherDefaultSalaryDto> queryTeacherDefaultSalary(String organIdList) {
+		return teacherDao.queryTeacherDefaultSalary(organIdList);
+	}
+
 }

+ 12 - 7
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,13 +168,18 @@ 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"));
-            tenantPaymentOrder.setPerAmount(routingFee.get("PER"));
             tenantPaymentOrder.setMerNos((String) payMap.get("routingMerNos"));
             tenantPaymentOrder.setPaymentChannel(PaymentChannelEnum.valueOf(payMap.get("type").toString()));
             tenantPaymentOrder.setUpdateTime(date);

+ 43 - 33
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);
@@ -196,6 +198,10 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
             throw new BizException("请设置教师课酬");
         }
 
+		if(StringUtils.isBlank(vipGroupApplyBaseInfoDto.getStudentIdList())){
+			throw new BizException("请选择学员");
+		}
+
         if(Objects.isNull(vipGroupApplyBaseInfoDto.getOnlineTeacherSalary())){
         	vipGroupApplyBaseInfoDto.setOnlineTeacherSalary(new BigDecimal(0));
 		}
@@ -233,7 +239,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()) {
@@ -247,11 +253,20 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 			throw new BizException("请勿重复提交");
 		}
 
+		VipGroupCategory vipGroupCategory = vipGroupCategoryDao.get(vipGroupApplyBaseInfoDto.getVipGroupCategoryId());
+		if(Objects.isNull(vipGroupCategory)){
+			throw new BizException("课程形式不存在");
+		}
+
+		List<Integer> canBuyStudentIds = Arrays.stream(vipGroupApplyBaseInfoDto.getStudentIdList().split(",")).map(e -> Integer.valueOf(e)).collect(Collectors.toList());
+
+		List<String> studentNames = studentDao.getStudentNames(canBuyStudentIds);
+
 		//生成vip课信息
 		List<String> bySubIds = subjectDao.findBySubIds(vipGroupApplyBaseInfoDto.getSubjectIdList());
 		StringBuffer className=new StringBuffer(StringUtils.join(bySubIds,","));
-		className.append("•");
-		className.append(vipGroupApplyBaseInfoDto.getName());
+		className.append(vipGroupCategory.getName());
+		className.append(StringUtils.join(studentNames, ","));
 		vipGroupApplyBaseInfoDto.setName(className.toString());
 
 		//计算课程相关费用信息
@@ -316,9 +331,6 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 
 		vipGroupApplyBaseInfoDto.setPaymentExpireDate(DateUtil.getLastSecondWithDay(vipGroupApplyBaseInfoDto.getPaymentExpireDate()));
 
-        //获取vip课类型信息
-        VipGroupCategory vipGroupCategory = vipGroupCategoryDao.get(vipGroup.getVipGroupApplyBaseInfo().getVipGroupCategoryId().intValue());
-
         VipGroupDefaultClassesUnitPrice vipGroupDefaultClassesUnitPrice = vipGroupDefaultClassesUnitPriceDao.getByVipGroupCategory(vipGroup.getVipGroupApplyBaseInfo().getVipGroupCategoryId(), vipGroup.getVipGroupApplyBaseInfo().getOrganId());
 
         if(Objects.isNull(vipGroupDefaultClassesUnitPrice)){
@@ -591,7 +603,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 			imFeignService.groupCreate(new ImGroupModel(vipGroupId.toString(), imGroupMembers, vipGroup.getName()));
 		}*/
 		vipGroup.setAuditStatus(auditStatus);
-		vipGroup.setStopReason(reason);
+		vipGroup.setMemo(reason);
 		vipGroupDao.update(vipGroup);
 		//给老师推送审批短信
 		Teacher teacher = teacherDao.get(vipGroup.getUserId());
@@ -932,7 +944,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
         BigDecimal teacherOnlineSalary,teacherOfflineSalary,teacherSalary;
         switch (vipGroupSalarySettlementDto.getOnlineSalarySettlement().getSalarySettlementType()){
             case TEACHER_DEFAULT:
-                teacherOnlineSalary=teacherDefaultVipGroupSalary.getOnlineClassesSalary().multiply(onlineClassNum);
+                teacherOnlineSalary=teacherDefaultVipGroupSalary.getOfflineClassesSalary().multiply(onlineClassNum);
                 break;
             case RATIO_DISCOUNT:
                 teacherOnlineSalary=vipGroupDefaultClassesUnitPrice.getOnlineClassesUnitPrice().multiply(vipGroupSalarySettlementDto.getOnlineSalarySettlement().getSettlementValue()).multiply(onlineClassNum);
@@ -1243,7 +1255,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 +1334,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,13 +1358,14 @@ 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);
 				studentPaymentOrder.setStatus(DealStatusEnum.SUCCESS);
 				studentPaymentOrder.setUpdateTime(date);
 				studentPaymentOrder.setOrganId(vipGroup.getOrganId());
-		        studentPaymentOrder.setRoutingOrganId(42);
+		        studentPaymentOrder.setRoutingOrganId(vipGroup.getOrganId());
 
 				this.orderCallback(studentPaymentOrder);
 
@@ -1361,7 +1377,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,33 +1402,26 @@ 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");
 			studentPaymentOrder.setOrganId(vipGroup.getOrganId());
-			studentPaymentOrder.setRoutingOrganId((Integer) payMap.get("routingOrganId"));
-			studentPaymentOrder.setComAmount(routingFee.get("COM"));
-			studentPaymentOrder.setPerAmount(routingFee.get("PER"));
+			studentPaymentOrder.setRoutingOrganId(vipGroup.getOrganId());
 			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);
-		}
 
 	}
 
@@ -1886,7 +1896,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 			//创建老师单节课课酬信息
 			courseScheduleTeacherSalaryService.createCourseScheduleTeacherVipSalary(vipGroup,
 					newCourseSchedules,
-					teacherDefaultVipGroupSalary.getOnlineClassesSalary(),
+					teacherDefaultVipGroupSalary.getOfflineClassesSalary(),
 					teacherDefaultVipGroupSalary.getOfflineClassesSalary());
 		}
 
@@ -2060,7 +2070,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 		if (null == studentPaymentOrder) {
 			throw new BizException("未找到原订单信息!");
 		}
-		
+
 		if(status ==StudentApplyRefundsStatus.ING){
 			throw new BizException("状态不正确");
 		}
@@ -2258,12 +2268,12 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 //			stopVipPush(vipGroup.getId(),vipGroup.getName());
     		return;
 		}
-    	if(VipGroupStatusEnum.APPLYING.equals(vipGroup.getStatus())){
-			Integer studentNum = classGroupStudentMapperDao.countClassGroupStudentNum(classGroup.getId());
-			if(studentNum>0){
-				throw new BizException("无法停止课程,需要全部学员退学后,才能停止,请先操作学员退学。");
-			}
+
+		Integer studentNum = classGroupStudentMapperDao.countClassGroupStudentNum(classGroup.getId());
+		if(studentNum>0){
+			throw new BizException("无法停止课程,需要全部学员退学后,才能停止,请先操作学员退学。");
 		}
+
 		List<Map<Integer, BigDecimal>> maps = vipGroupDao.countSurplusCourseFee(vipGroupId);
     	if(CollectionUtils.isEmpty(maps)||(maps.size()==1&&Objects.isNull(maps.get(0)))){
 			if(courseScheduleIds != null && courseScheduleIds.size() > 0){
@@ -2534,7 +2544,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 
 		if(onlineTeacherSalary.compareTo(zero)<=0){
             if(Objects.nonNull(byTeacherAndCategory)){
-                onlineTeacherSalary=byTeacherAndCategory.getOnlineClassesSalary();
+                onlineTeacherSalary=byTeacherAndCategory.getOfflineClassesSalary();
             }
 		}
 		if(offlineTeacherSalary.compareTo(zero)<=0){
@@ -2926,7 +2936,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)) {
@@ -3052,7 +3062,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 				TeacherDefaultVipGroupSalary tdvs = teacherDefaultVipGroupSalaryDao.findByTeacherAndCategory(ts.getUserId(), ts.getVipGroupCategoryId());
 				if (tdvs != null) {
 					if (ts.getTeachMode() == TeachModeEnum.ONLINE) {
-						ts.setExpectSalary(tdvs.getOnlineClassesSalary());
+						ts.setExpectSalary(tdvs.getOfflineClassesSalary());
 					} else {
 						ts.setExpectSalary(tdvs.getOfflineClassesSalary());
 					}

+ 15 - 4
mec-biz/src/main/resources/config/mybatis/CourseScheduleTeacherSalaryMapper.xml

@@ -611,6 +611,7 @@
 		<result property="teacherId" column="teacherId"/>
 		<result property="activeName" column="activeName"/>
 		<result property="vipActiveName" column="vip_active_name_"/>
+		<result property="vipCategoryName" column="vip_category_name_"/>
 		<result property="courseScheduleType" column="courseScheduleType"/>
 		<result property="signOutStatus" column="signOutStatus"/>
 		<result property="signInStatus" column="signInStatus"/>
@@ -632,7 +633,7 @@
 		<result property="offlineClassesUnitPrice" column="offline_classes_unit_price_"/>
  	</resultMap>
     <select id="exportMusicTeacherSalary" resultMap="ExportTeacherSalaryDtoMap">
-		SELECT cs.`id_` courseScheduleId,u.id_ teacherId,mgo.name_ courseScheduleOrganName,mg.name_ groupName,
+		SELECT cs.`id_` courseScheduleId,ts.user_id_ teacherId,mgo.name_ courseScheduleOrganName,mg.name_ groupName,
 		ct.name_ changeType,u.real_name_ teacherName,o.name_ teacherOrganName,cs.music_group_id_ group_id_,
 		CASE WHEN cs.teach_mode_ = 'OFFLINE' THEN '线下' WHEN cs.teach_mode_ = 'ONLINE' THEN '线上' END teach_mode_,
 		CASE WHEN t.job_nature_ = 'PART_TIME' THEN '兼职' WHEN t.job_nature_ = 'FULL_TIME' THEN '全职' ELSE '零时工' END jobType,
@@ -661,17 +662,20 @@
 		LEFT JOIN organization mgo ON mgo.id_ = mg.organ_id_
 		LEFT JOIN charge_type ct ON ct.id_ = mg.charge_type_id_
 		WHERE cs.class_date_ BETWEEN #{firstDayOfMonth} AND #{lastDayOfMonth} AND cs.`del_flag_` != 1 AND cs.group_type_ = 'MUSIC' AND ts.settlement_time_ IS NOT NULL
+		<if test="courseTypeList != null">
+			and cs.type_ in (#{courseTypeList})
+		</if>
 		GROUP BY ts.id_,ta.id_
 	</select>
 	<select id="exportVipTeacherSalary" resultMap="ExportTeacherSalaryDtoMap">
-		SELECT cs.`id_` courseScheduleId,u.id_ teacherId,vgo.name_ courseScheduleOrganName,vg.name_ groupName,
+		SELECT cs.`id_` courseScheduleId,ts.user_id_ teacherId,vgo.name_ courseScheduleOrganName,vg.name_ groupName,
 		u.real_name_ teacherName,o.name_ teacherOrganName,cs.music_group_id_ group_id_,
 		CASE WHEN cs.teach_mode_ = 'OFFLINE' THEN '线下' WHEN cs.teach_mode_ = 'ONLINE' THEN '线上' END teach_mode_,
 		CASE WHEN t.job_nature_ = 'PART_TIME' THEN '兼职' WHEN t.job_nature_ = 'FULL_TIME' THEN '全职' ELSE '零时工' END jobType,
 		'vip课' courseScheduleType,
 		cs.class_date_ classDate,cs.start_class_time_ courseScheduleStartTime,cs.end_class_time_ courseScheduleEndTime,
 		ROUND((UNIX_TIMESTAMP(cs.end_class_time_)-UNIX_TIMESTAMP(cs.start_class_time_))/60) signCourseScheduleTime,
-		ts.actual_salary_ price,vga.name_ vip_active_name_,
+		ts.actual_salary_ price,vga.name_ vip_active_name_,vgc.name_ vip_category_name_,
 		CASE WHEN s.name_ IS NULL THEN '网络教室' ELSE s.name_ END address,
 		CASE WHEN ts.teacher_role_ = 'TEACHING' THEN '助教' ELSE '主教' END teacherRole,
 		CASE WHEN ta.sign_in_status_ = 0 THEN '异常' WHEN ta.sign_in_status_ = 1 THEN '正常' END signInStatus,
@@ -693,8 +697,12 @@
 		LEFT JOIN vip_group vg ON (vg.id_ = ts.music_group_id_ AND ts.group_type_ = 'VIP')
 		LEFT JOIN vip_group_activity vga ON vg.vip_group_activity_id_ = vga.id_
 		LEFT JOIN organization vgo ON vgo.id_ = vg.organ_id_
+		left join vip_group_category vgc on vgc.id_ = vg.vip_group_category_id_
 		WHERE vg.organ_id_ != 41 AND cs.class_date_ BETWEEN #{firstDayOfMonth} AND #{lastDayOfMonth} AND cs.`del_flag_` != 1
 		AND cs.group_type_ = 'VIP' AND ts.settlement_time_ IS NOT NULL
+		<if test="courseTypeList != null">
+			and cs.type_ in (#{courseTypeList})
+		</if>
 		GROUP BY ts.id_,ta.id_
 	</select>
 	<select id="querySettlementScheduleId" resultType="java.lang.Long">
@@ -702,7 +710,7 @@
 		WHERE csts.settlement_time_ IS NULL AND FIND_IN_SET(csts.course_schedule_id_,#{courseScheduleIds})
 	</select>
 	<select id="exportPracticeTeacherSalary" resultMap="ExportTeacherSalaryDtoMap">
-		SELECT cs.`id_` courseScheduleId,u.id_ teacherId,pgo.name_ courseScheduleOrganName,pg.name_ groupName,
+		SELECT cs.`id_` courseScheduleId,ts.user_id_ teacherId,pgo.name_ courseScheduleOrganName,pg.name_ groupName,
 		u.real_name_ teacherName,o.name_ teacherOrganName,cs.music_group_id_ group_id_,
 		CASE WHEN cs.teach_mode_ = 'OFFLINE' THEN '线下' WHEN cs.teach_mode_ = 'ONLINE' THEN '线上' END teach_mode_,
 		CASE WHEN t.job_nature_ = 'PART_TIME' THEN '兼职' WHEN t.job_nature_ = 'FULL_TIME' THEN '全职' ELSE '零时工' END jobType,
@@ -729,6 +737,9 @@
 		LEFT JOIN practice_group pg ON (pg.id_ = ts.music_group_id_ AND ts.group_type_ = 'PRACTICE')
 		LEFT JOIN organization pgo ON pgo.id_ = pg.organ_id_
 		WHERE cs.class_date_ BETWEEN #{firstDayOfMonth} AND #{lastDayOfMonth} AND cs.`del_flag_` != 1 AND cs.group_type_ = 'PRACTICE' AND ts.settlement_time_ IS NOT NULL
+		<if test="courseTypeList != null">
+			and cs.type_ in (#{courseTypeList})
+		</if>
 		GROUP BY ts.id_,ta.id_
 	</select>
 	

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

@@ -6,6 +6,7 @@
         <!--@Table degree_registration-->
         <id column="id_" jdbcType="INTEGER" property="id"/>
         <result column="sporadic_id_" jdbcType="INTEGER" property="sporadicId"/>
+        <result column="organ_id_" jdbcType="INTEGER" property="organId"/>
         <result column="order_no_" jdbcType="VARCHAR" property="orderNo"/>
         <result column="trans_no_" jdbcType="VARCHAR" property="transNo"/>
         <result column="name_" jdbcType="VARCHAR" property="name"/>
@@ -41,6 +42,9 @@
 
     <sql id="queryPageSql">
         <where>
+            <if test="organId != null">
+                AND FIND_IN_SET(organ_id_,#{organId})
+            </if>
             <if test="status != null and status=='reg'">
                 AND <![CDATA[status_ <= 1]]>
             </if>
@@ -117,12 +121,12 @@
     <insert id="insert" keyColumn="id_" keyProperty="id" parameterType="com.ym.mec.biz.dal.entity.DegreeRegistration"
             useGeneratedKeys="true">
         <!--@mbg.generated-->
-        insert into degree_registration (sporadic_id_,order_no_, name_, gender_,
+        insert into degree_registration (sporadic_id_,organ_id_,order_no_, name_, gender_,
         idcard_, city_, school_,
         subject_,level_, theory_level_,theory_money_, theory_cert_,mobile_,
         money_, memo_, create_time_,
         update_time_, status_)
-        values (#{sporadicId,jdbcType=INTEGER}, #{orderNo,jdbcType=VARCHAR}, #{name,jdbcType=VARCHAR}, #{gender,jdbcType=VARCHAR},
+        values (#{sporadicId,jdbcType=INTEGER},#{organId,jdbcType=INTEGER}, #{orderNo,jdbcType=VARCHAR}, #{name,jdbcType=VARCHAR}, #{gender,jdbcType=VARCHAR},
         #{idcard,jdbcType=VARCHAR}, #{city,jdbcType=VARCHAR}, #{school,jdbcType=VARCHAR},
         #{subject,jdbcType=VARCHAR},#{level,jdbcType=VARCHAR},
         #{theoryLevel,jdbcType=VARCHAR},#{theoryMoney,jdbcType=DECIMAL},
@@ -133,6 +137,9 @@
         <!--@mbg.generated-->
         update degree_registration
         <set>
+            <if test="organId != null">
+                organ_id_ = #{organId,jdbcType=INTEGER},
+            </if>
             <if test="sporadicId != null">
                 sporadic_id_ = #{sporadicId,jdbcType=INTEGER},
             </if>

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

@@ -35,6 +35,7 @@
         <result column="ownership_type_" property="ownershipType"
                 typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
         <result column="fee_type_" property="feeType" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
+        <result column="del_flag_" property="delFlag"/>
     </resultMap>
 
     <!-- 根据主键查询一条记录 -->
@@ -67,7 +68,7 @@
          bill_start_date_, improvent_classes_num_, enroll_classes_, payment_expire_date_, is_extra_class_,
          settlement_type_, cooperation_organ_id_, enlightenment_course_time_,
          parent_meeting_time_, img_, director_user_id_, is_classroom_lessons_, memo_, expect_start_group_date_,
-         ownership_type_, repair_user_id_, fee_type_)
+         ownership_type_, repair_user_id_, fee_type_,del_flag_)
         VALUES (#{id}, #{name}, #{organId}, #{schoolId}, #{applyExpireDate}, #{teamTeacherId}, #{educationalTeacherId},
                 #{chargeTypeId}, #{courseForm}, now(), now(),
                 #{status, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}, #{billStartDate},
@@ -77,7 +78,7 @@
                 #{cooperationOrganId}, #{enlightenmentCourseTime}, #{parentMeetingTime}, #{img}, #{directorUserId},
                 #{isClassroomLessons}, #{memo}, #{expectStartGroupDate},
                 #{ownershipType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}, #{repairUserId},
-                #{feeType, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler})
+                #{feeType, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{delFlag})
     </insert>
 
     <!-- 根据主键查询一条记录 -->
@@ -163,6 +164,9 @@
             <if test="memo != null">
                 memo_ = #{memo},
             </if>
+            <if test="delFlag != null">
+                del_flag_ = #{delFlag},
+            </if>
         </set>
         WHERE id_ = #{id}
     </update>
@@ -183,6 +187,7 @@
 
     <sql id="musicGroupQueryPageSql">
         <where>
+        	del_flag_ = 0
             <if test="organId != null">
                 AND FIND_IN_SET(organ_id_,#{organId})
             </if>

+ 27 - 9
mec-biz/src/main/resources/config/mybatis/MusicGroupPurchaseListMapper.xml

@@ -17,13 +17,17 @@
 
     <!-- 根据主键查询一条记录 -->
     <select id="get" resultMap="MusicGroupPurchaseList">
-		SELECT * FROM music_group_purchase_list WHERE id_ = #{id} 
-	</select>
+        SELECT *
+        FROM music_group_purchase_list
+        WHERE id_ = #{id}
+    </select>
 
     <!-- 全查询 -->
     <select id="findAll" resultMap="MusicGroupPurchaseList">
-		SELECT * FROM music_group_purchase_list ORDER BY id_
-	</select>
+        SELECT *
+        FROM music_group_purchase_list
+        ORDER BY id_
+    </select>
 
     <!-- 向数据库增加一条记录 -->
     <insert id="insert" parameterType="com.ym.mec.biz.dal.entity.MusicGroupPurchaseList" useGeneratedKeys="true"
@@ -59,8 +63,10 @@
 
     <!-- 根据主键删除一条记录 -->
     <delete id="delete">
-		DELETE FROM music_group_purchase_list WHERE id_ = #{id} 
-	</delete>
+        DELETE
+        FROM music_group_purchase_list
+        WHERE id_ = #{id}
+    </delete>
 
     <!-- 分页查询 -->
     <select id="queryPage" resultMap="MusicGroupPurchaseList" parameterType="map">
@@ -76,20 +82,32 @@
 
     <!-- 查询当前表的总记录数 -->
     <select id="queryCount" resultType="int">
-		SELECT COUNT(*) FROM music_group_purchase_list
+        SELECT COUNT(*) FROM music_group_purchase_list
         <where>
             <if test="musicGroupId != null">
                 music_group_id_ = #{musicGroupId}
             </if>
         </where>
-	</select>
+    </select>
 
     <insert id="batchInsert" parameterType="com.ym.mec.biz.dal.entity.MusicGroupPurchaseList" useGeneratedKeys="true"
             keyColumn="id" keyProperty="id">
         INSERT INTO music_group_purchase_list (id_,music_group_id_,goods_id_,purchase_num_,create_time_,update_time_)
         VALUES
         <foreach collection="musicGroupPurchaseLists" item="item" index="index" separator=",">
-        (#{item.id},#{item.musicGroupId},#{item.goodsId},#{item.purchaseNum},now(),now())
+            (#{item.id},#{item.musicGroupId},#{item.goodsId},#{item.purchaseNum},now(),now())
         </foreach>
     </insert>
+
+    <!-- 查询当前表的总记录数 -->
+    <select id="getCount" resultMap="MusicGroupPurchaseList">
+        SELECT music_group_id_, COUNT(*) purchase_num_ FROM music_group_purchase_list
+        <where>
+            music_group_id_ IN
+            <foreach collection="musicGroupIds" item="musicGroupId" open="(" close=")" separator=",">
+                #{musicGroupId}
+            </foreach>
+        </where>
+        GROUP BY music_group_id_
+    </select>
 </mapper>

+ 48 - 0
mec-biz/src/main/resources/config/mybatis/StudentMapper.xml

@@ -462,4 +462,52 @@
             LEFT JOIN student stu ON cssp.user_id_ = stu.user_id_
         WHERE stu.service_tag_=1 AND class_date_&gt;=#{monday}
     </select>
+
+    <select id="getStudentNames" resultType="string">
+        SELECT username_ FROM sys_user WHERE id_ IN
+        <foreach collection="studentIds" item="studentId" separator="," open="(" close=")">
+            #{studentId}
+        </foreach>
+    </select>
+    <select id="getStudentsWithOrgan" resultType="com.ym.mec.biz.dal.dto.SimpleUserDto">
+        SELECT
+            su.id_ userId,su.username_ userName, su.avatar_ avatar, su.phone_ phone
+        FROM
+            sys_user su
+        WHERE
+            1=1
+            AND su.del_flag_=0 AND su.lock_flag_=0
+            AND FIND_IN_SET('STUDENT',su.user_type_)
+            <if test="organIds!=null">
+                AND su.organ_id_ IN
+                <foreach collection="organIds" item="organId" open="(" close=")" separator=",">
+                    #{organId}
+                </foreach>
+            </if>
+            <if test="search != null">
+                AND (su.username_ LIKE CONCAT('%', #{search}, '%') OR su.phone_ LIKE CONCAT('%', #{search}, '%'))
+            </if>
+        ORDER BY su.id_
+        <include refid="global.limit"/>
+    </select>
+
+    <select id="countStudentsWithOrgan" resultType="int">
+        SELECT
+            COUNT(su.id_)
+        FROM
+            sys_user su
+        WHERE
+            1=1
+            AND su.del_flag_=0 AND su.lock_flag_=0
+            AND FIND_IN_SET('STUDENT',su.user_type_)
+            <if test="organIds!=null">
+                AND su.organ_id_ IN
+                <foreach collection="organIds" item="organId" open="(" close=")" separator=",">
+                    #{organId}
+                </foreach>
+            </if>
+            <if test="search != null">
+                AND (su.username_ LIKE CONCAT('%', #{search}, '%') OR su.phone_ LIKE CONCAT('%', #{search}, '%'))
+            </if>
+    </select>
 </mapper>

+ 4 - 0
mec-biz/src/main/resources/config/mybatis/StudentPaymentOrderDetailMapper.xml

@@ -101,9 +101,11 @@
     <select id="findApplyOrderSuccess" resultMap="StudentPaymentOrderDetail">
         SELECT spod.* FROM student_payment_order spo
         LEFT JOIN student_payment_order_detail spod ON spo.id_ = spod.payment_order_id_
+        LEFT JOIN student_registration sr ON spo.user_id_ = sr.user_id_
         WHERE spo.music_group_id_ = #{musicGroupId}
         AND spo.status_=#{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
         AND spo.type_ = 'APPLY'
+        AND sr.music_group_id_=#{musicGroupId} AND sr.music_group_status_ != 'QUIT'
     </select>
 
     <!-- 查询订单详情 -->
@@ -134,7 +136,9 @@
     </resultMap>
     <select id="getMusicalListDetail" resultMap="musicalListDetailDtoMap">
         SELECT MAX(spo.id_) payment_order_id_,spo.user_id_  FROM student_payment_order spo
+        LEFT JOIN student_registration sr ON spo.user_id_ = sr.user_id_
         WHERE spo.music_group_id_ = #{musicGroupId}
+        AND sr.music_group_id_ = #{musicGroupId} AND sr.music_group_status_!='QUIT'
         GROUP BY spo.user_id_
     </select>
     <select id="queryGoodsNames" resultType="java.util.Map">

+ 32 - 15
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>
 
     <!-- 根据主键查询一条记录 -->
@@ -248,7 +248,7 @@
                 AND spo.order_no_ = #{orderNo}
             </if>
             <if test="merNos != null">
-                AND spo.mer_nos_ = #{merNos}
+                AND FIND_IN_SET(#{merNos},spo.mer_nos_)
             </if>
             <if test="transNo != null">
                 AND spo.trans_no_ = #{transNo}
@@ -316,8 +316,7 @@
         FROM student_payment_order
         WHERE music_group_id_ = #{musicGroupId}
           AND user_id_ = #{userId}
-          AND type_ =
-              'APPLY'
+          AND type_ = 'APPLY'
           AND status_ = #{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
         ORDER BY id_ DESC
         LIMIT 1
@@ -454,6 +453,9 @@
         <result column="organ_name" property="organName"/>
         <result column="username_" property="user.username"/>
         <result column="charge_type_" property="chargeType"/>
+        <result column="routeMerNo" property="routeMerNo"/>
+        <result column="routeAmount" property="routeAmount"/>
+        <result column="routeBalance" property="routeBalance"/>
         <collection property="orderDetailList" ofType="com.ym.mec.biz.dal.entity.StudentPaymentOrderDetail">
             <result column="detail_id_" property="id"/>
             <result column="detail_type_" property="type"/>
@@ -585,7 +587,8 @@
     </select>
 
     <select id="getOrderMoneyAmount" parameterType="map" resultMap="StudentPaymentOrder">
-        SELECT SUM(spo.expect_amount_) expect_amount_,SUM(actual_amount_) actual_amount_,SUM(balance_payment_amount_) balance_payment_amount_ FROM student_payment_order spo
+        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>
 
@@ -626,22 +629,36 @@
         <![CDATA[
         SELECT SUM(actual_amount_)
         FROM student_payment_order
-        WHERE status_ IN ('SUCCESS','ING')
+        WHERE status_ IN ('SUCCESS', 'ING')
           AND create_time_ >= #{firstDate}
           AND create_time_ <= NOW()
-          AND  mer_nos_ = #{merNo}
-    ]]></select>
+          AND mer_nos_ = #{merNo}
+        ]]></select>
     <select id="countGroupOrderWithoutFailed" resultType="int">
         SELECT COUNT(*)
         FROM student_payment_order spo
-        LEFT JOIN class_group_student_mapper cgsm ON spo.music_group_id_=cgsm.music_group_id_ AND spo.user_id_=cgsm.user_id_
+                 LEFT JOIN class_group_student_mapper cgsm
+                           ON spo.music_group_id_ = cgsm.music_group_id_ AND spo.user_id_ = cgsm.user_id_
         WHERE spo.music_group_id_ = #{groupId}
-        AND spo.status_ != 'FAILED'
-        AND cgsm.status_!= 'QUIT'
-        AND spo.group_type_ = #{groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler }
-        AND cgsm.group_type_ = #{groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler }
+          AND spo.status_ != 'FAILED'
+          AND cgsm.status_ != 'QUIT'
+          AND spo.group_type_ = #{groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler }
+          AND cgsm.group_type_ = #{groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler }
     </select>
     <select id="countSporadicOrder" resultType="java.lang.Integer">
-        SELECT COUNT(id_) FROM student_payment_order spo WHERE spo.group_type_ = 'SPORADIC' AND spo.music_group_id_ = #{sporadicId}
+        SELECT COUNT(id_)
+        FROM student_payment_order spo
+        WHERE spo.group_type_ = 'SPORADIC'
+          AND spo.music_group_id_ = #{sporadicId}
+    </select>
+
+    <!-- 查找支付成功和支付中订单 -->
+    <select id="findOrganPayOrderNum" resultType="int">
+        <![CDATA[
+        SELECT COUNT(*)
+        FROM student_payment_order
+        WHERE organ_id_ = #{organId}
+          AND status_ IN ('SUCCESS', 'ING')
+        ]]>
     </select>
 </mapper>

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

@@ -0,0 +1,206 @@
+<?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(spro.route_amount_) actual_amount_,SUM(spro.route_balance_amount_)
+        balance_payment_amount_ FROM student_payment_route_order spro
+        LEFT JOIN student_payment_order spo on spo.order_no_ = spro.order_no_
+        <include refid="queryPaymentOrder"/>
+    </select>
+
+    <select id="getChargeAmount" parameterType="map" resultType="java.math.BigDecimal">
+        SELECT SUM(spro.route_amount_) FROM student_payment_route_order spro
+        LEFT JOIN student_payment_order spo ON spo.order_no_=spro.order_no_
+        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>
+
+    <select id="ExportQueryPage" resultMap="com.ym.mec.biz.dal.dao.StudentPaymentOrderDao.orderAndDetail"
+            parameterType="map">
+        SELECT spo.*,u.username_,spod.id_ detail_id_,spod.type_ detail_type_,spod.price_
+        detail_price_,spod.kit_group_purchase_type_ detail_kit_group_purchase_type_,
+        sci.charge_type_,g.id_ goods_id, g.name_ goods_name,o.name_ organ_name,spro.route_amount_
+        routeAmount,spro.route_balance_amount_ routeBalance,
+        spro.mer_no_ routeMerNo
+        FROM student_payment_order spo
+        LEFT JOIN student_payment_route_order spro ON spro.order_no_ = spo.order_no_
+        LEFT JOIN sys_user u on spo.user_id_ = u.id_
+        LEFT JOIN student_payment_order_detail spod on spo.id_ = spod.payment_order_id_
+        LEFT JOIN organization o on spro.route_organ_id_ = o.id_
+        LEFT JOIN sporadic_charge_info sci on spo.music_group_id_ = sci.id_
+        LEFT JOIN goods g on FIND_IN_SET(g.id_,spod.goods_id_list_)
+        <include refid="queryPaymentOrder"/>
+        ORDER BY spo.id_ ASC
+    </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_ !='' OR spc.hf_mer_no_ !='')
+            </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_ != ''
+            </if>
+            <if test='payType != null and payType.code.equals("ADAPAY")'>
+                AND spc.hf_mer_no_ !=''
+            </if>
+        </where>
+
     </select>
 </mapper>

+ 80 - 0
mec-biz/src/main/resources/config/mybatis/TeacherMapper.xml

@@ -55,6 +55,41 @@
         <result column="subject_name_" property="splitSubjectName"/>
         <result column="id_card_no_" property="idCardNo"/>
     </resultMap>
+    
+    <resultMap type="com.ym.mec.biz.dal.dto.TeacherDefaultSalaryDto" id="TeacherDefaultSalaryDto">
+        <result column="id_" property="userId"/>
+        <result column="real_name_" property="realName"/>
+        <result column="name_" property="organName"/>
+        <result column="job_nature" property="jobNature"/>
+        <result column="demisson_status" property="demissionStatus" />
+        <result column="status_" property="status"/>
+        <result column="vip1" property="vip1"/>
+        <result column="vip2" property="vip2"/>
+        <result column="vip3" property="vip3"/>
+        <result column="vip4" property="vip4"/>
+        <result column="vip5" property="vip5"/>
+        <result column="vip6" property="vip6"/>
+        <result column="vip7" property="vip7"/>
+        <result column="practice" property="practiceSalary"/>
+        <result column="single2" property="singleSalary2"/>
+        <result column="mix2" property="mixSalary2"/>
+        <result column="comprehensive2" property="comprehensiveSalary2"/>
+        <result column="training_single2" property="traningSigleSalary2"/>
+        <result column="training_mix2" property="traningMixSalary2"/>
+        <result column="high2" property="highSalary2"/>
+        <result column="classroom2" property="classroomSalary2"/>
+        <result column="single" property="singleSalary"/>
+        <result column="mix" property="mixSalary"/>
+        <result column="comprehensive" property="comprehensiveSalary"/>
+        <result column="training_single" property="traningSigleSalary"/>
+        <result column="training_mix" property="traningMixSalary"/>
+        <result column="high" property="highSalary"/>
+        <result column="classroom" property="classroomSalary"/>
+        <result column="high_online3" property="highOnline3Salary"/>
+        <result column="high_online4" property="highOnline4Salary"/>
+        <result column="high_online5" property="highOnline5Salary"/>
+        <result column="music_network1" property="musicNetwork1Salary"/>
+    </resultMap>
 
     <!-- 根据主键查询一条记录 -->
     <select id="get" resultMap="Teacher">
@@ -1108,4 +1143,49 @@
         SELECT COUNT(s.user_id_) FROM student s
         WHERE s.teacher_id_ = #{search}
     </select>
+    
+    <select id="queryTeacherDefaultSalary" resultMap="TeacherDefaultSalaryDto">
+    	SELECT t.`id_` ,su.`real_name_` ,o.`name_` ,
+		case when t.`job_nature_` = 'PART_TIME' then '兼职' when  t.`job_nature_` = 'FULL_TIME' then '全职' else '临时工' end job_nature,
+		case when t.`demission_date_` IS NULL then '在职' else '离职' end demisson_status,
+		case when su.`lock_flag_` = 1 then '冻结' WHEN su.`lock_flag_` = 9 then '锁定' else '正常' end status_,
+		max(case when gc.`name_` = '1V1' then gs.`offline_classes_salary_` else 0 end) vip1,
+		max(case when gc.`name_` = '1V2' then gs.`offline_classes_salary_` else 0 end) vip2,
+		max(case when gc.`name_` = '1V3' then gs.`offline_classes_salary_` else 0 end) vip3,
+		max(case when gc.`name_` = '1V4' then gs.`offline_classes_salary_` else 0 end) vip4,
+		max(case when gc.`name_` = '1V5' then gs.`offline_classes_salary_` else 0 end) vip5,
+		max(case when gc.`name_` = '1V6' then gs.`offline_classes_salary_` else 0 end) vip6,
+		max(case when gc.`name_` = '1V7' then gs.`offline_classes_salary_` else 0 end) vip7,
+		max(pgs.main_teacher_salary_) practice,
+		MAX(case when mgs.course_schedule_type_ = 'SINGLE' then mgs.main_teacher_30min_salary_ ELSE 0 END) single2,
+		MAX(case when mgs.course_schedule_type_ = 'MIX' then mgs.main_teacher_30min_salary_ ELSE 0 END) mix2,
+		MAX(case when mgs.course_schedule_type_ = 'COMPREHENSIVE' then mgs.main_teacher_30min_salary_ ELSE 0 END) comprehensive2,
+		MAX(case when mgs.course_schedule_type_ = 'TRAINING_SINGLE' then mgs.main_teacher_30min_salary_ ELSE 0 END) training_single2,
+		MAX(case when mgs.course_schedule_type_ = 'TRAINING_MIX' then mgs.main_teacher_30min_salary_ ELSE 0 END) training_mix2,
+		MAX(case when mgs.course_schedule_type_ = 'HIGH' then mgs.main_teacher_30min_salary_ ELSE 0 END) high2,
+		MAX(case when mgs.course_schedule_type_ = 'CLASSROOM' then mgs.main_teacher_30min_salary_ ELSE 0 END) classroom2,
+		MAX(case when mgs.course_schedule_type_ = 'SINGLE' then mgs.main_teacher_90min_salary_ ELSE 0 END) single,
+		MAX(case when mgs.course_schedule_type_ = 'MIX' then mgs.main_teacher_90min_salary_ ELSE 0 END) mix,
+		MAX(case when mgs.course_schedule_type_ = 'COMPREHENSIVE' then mgs.main_teacher_90min_salary_ ELSE 0 END) comprehensive,
+		MAX(case when mgs.course_schedule_type_ = 'TRAINING_SINGLE' then mgs.main_teacher_90min_salary_ ELSE 0 END) training_single,
+		MAX(case when mgs.course_schedule_type_ = 'TRAINING_MIX' then mgs.main_teacher_90min_salary_ ELSE 0 END) training_mix,
+		MAX(case when mgs.course_schedule_type_ = 'HIGH' then mgs.main_teacher_90min_salary_ ELSE 0 END) high,
+		MAX(case when mgs.course_schedule_type_ = 'CLASSROOM' then mgs.main_teacher_90min_salary_ ELSE 0 END) classroom,
+		MAX(case when mgs.course_schedule_type_ = 'HIGH_ONLINE' then CONVERT(JSON_EXTRACT(mgs.salary_rule_json_,'$."3"'),DECIMAL) END) high_online3,
+		MAX(case when mgs.course_schedule_type_ = 'HIGH_ONLINE' then CONVERT(JSON_EXTRACT(mgs.salary_rule_json_,'$."4"'),DECIMAL) END) high_online4,
+		MAX(case when mgs.course_schedule_type_ = 'HIGH_ONLINE' then CONVERT(JSON_EXTRACT(mgs.salary_rule_json_,'$."5"'),DECIMAL) END) high_online5,
+		MAX(case when mgs.course_schedule_type_ = 'MUSIC_NETWORK' then CONVERT(JSON_EXTRACT(mgs.salary_rule_json_,'$."1"'),DECIMAL) END) music_network1
+		FROM `teacher` t LEFT JOIN `sys_user` su on t.`id_` = su.`id_` 
+		LEFT JOIN `organization` o on o.`id_` = t.`organ_id_` 
+		LEFT JOIN `teacher_default_vip_group_salary` gs on gs.`user_id_` = t.`id_`
+		LEFT JOIN `vip_group_category` gc on gc.`id_` = gs.`vip_group_category_id_`
+		LEFT JOIN teacher_default_practice_group_salary pgs ON pgs.user_id_ = t.id_
+		LEFT JOIN teacher_default_music_group_salary mgs ON mgs.user_id_ = t.id_
+		<where>
+			<if test="organIdList != null">
+                AND find_in_set(t.organ_id_,#{organIdList})
+            </if>
+		</where>
+		GROUP BY t.`id_` 
+    </select>
 </mapper>

+ 3 - 0
mec-biz/src/main/resources/config/mybatis/VipGroupActivityMapper.xml

@@ -143,6 +143,9 @@
 			<if test="enable != null and enable == false">
 				AND (NOW() >= end_time_ OR NOW() &lt;= start_time_)
 			</if>
+			<if test="search != null and search != ''">
+				AND (vga.id_=#{search} OR vga.name_ LIKE CONCAT('%', #{search}, '%'))
+			</if>
 		</where>
 	</sql>
 

+ 10 - 3
mec-biz/src/main/resources/config/mybatis/VipGroupMapper.xml

@@ -35,6 +35,7 @@
         <result column="give_teach_mode_" property="giveTeachMode" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
         <result column="organ_id_" property="organId"/>
         <result column="stop_reason_" property="stopReason"/>
+        <result column="memo_" property="memo"/>
         <result column="courses_start_date" property="courseStartDate"/>
         <result column="course_schedules_json_" property="courseSchedulesJson"/>
         <result column="student_id_list_" property="studentIdList"/>
@@ -42,6 +43,7 @@
         <result column="school_name_" property="schoolName" />
         <result column="subject_name_" property="subjectName" />
         <result column="educational_teacher_id_" property="educationalTeacherId" />
+        <result column="vip_group_category_name_" property="vipGroupCategoryName"/>
     </resultMap>
     
     <resultMap type="com.ym.mec.biz.dal.entity.School" id="School">
@@ -196,11 +198,13 @@
 		SELECT
             vg.*,
             vga.name_ vip_group_activity_name_,
-            su.real_name_ username_
+            su.real_name_ username_,
+            vgc.name_ vip_group_category_name_
         FROM
             vip_group vg
             LEFT JOIN sys_user su ON vg.user_id_=su.id_
             LEFT JOIN vip_group_activity vga ON vg.vip_group_activity_id_=vga.id_
+            LEFT JOIN vip_group_category vgc ON vgc.id_=vg.vip_group_category_id_
         <include refid="vipGroupQueryCondition"/>
         ORDER BY vg.id_ DESC
         <include refid="global.limit"/>
@@ -223,8 +227,8 @@
         </selectKey>
         -->
         INSERT INTO vip_group
-        (id_,user_id_,single_class_minutes_,payment_expire_date_,courses_expire_date_,create_time_,update_time_,teacher_school_id_,online_classes_num_,offline_classes_num_,registration_start_time_,name_,organ_id_list_,vip_group_activity_id_,group_status_,online_classes_unit_price_,offline_classes_unit_price_,total_price_,give_teach_mode_,vip_group_category_id_,organ_id_,stop_reason_,audit_status_,courses_start_date,course_schedules_json_,student_id_list_)
-        VALUES(#{id},#{userId},#{singleClassMinutes},#{paymentExpireDate},#{coursesExpireDate},now(),now(),#{teacherSchoolId},#{onlineClassesNum},#{offlineClassesNum},#{registrationStartTime},#{name},#{organIdList},#{vipGroupActivityId},#{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{onlineClassesUnitPrice},#{offlineClassesUnitPrice},#{totalPrice},#{giveTeachMode},#{vipGroupCategoryId},#{organId},#{stopReason},#{auditStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{courseStartDate},#{courseSchedulesJson},#{studentIdList})
+        (id_,user_id_,single_class_minutes_,payment_expire_date_,courses_expire_date_,create_time_,update_time_,teacher_school_id_,online_classes_num_,offline_classes_num_,registration_start_time_,name_,organ_id_list_,vip_group_activity_id_,group_status_,online_classes_unit_price_,offline_classes_unit_price_,total_price_,give_teach_mode_,vip_group_category_id_,organ_id_,stop_reason_,memo_,audit_status_,courses_start_date,course_schedules_json_,student_id_list_)
+        VALUES(#{id},#{userId},#{singleClassMinutes},#{paymentExpireDate},#{coursesExpireDate},now(),now(),#{teacherSchoolId},#{onlineClassesNum},#{offlineClassesNum},#{registrationStartTime},#{name},#{organIdList},#{vipGroupActivityId},#{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{onlineClassesUnitPrice},#{offlineClassesUnitPrice},#{totalPrice},#{giveTeachMode},#{vipGroupCategoryId},#{organId},#{stopReason},#{memo},#{auditStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{courseStartDate},#{courseSchedulesJson},#{studentIdList})
     </insert>
 
     <!-- 根据主键查询一条记录 -->
@@ -286,6 +290,9 @@
             <if test="stopReason!=null">
                 stop_reason_=#{stopReason},
             </if>
+            <if test="memo!=null">
+                memo_=#{memo},
+            </if>
             <if test="courseSchedulesJson!=null">
                 course_schedules_json_=#{courseSchedulesJson},
             </if>

+ 2 - 1
mec-student/src/main/java/com/ym/mec/student/config/ResourceServerConfig.java

@@ -35,7 +35,8 @@ public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
 				"/repair/getRepairInfo",
 				"/repair/payRepair",
 				"/degree/*",
-				"/practiceGroup/queryOrderInfo").permitAll().anyRequest().authenticated().and().httpBasic();
+				"/practiceGroup/queryOrderInfo",
+				"/organization/getOrgans").permitAll().anyRequest().authenticated().and().httpBasic();
 	}
 
 	@Override

+ 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/DegreeController.java

@@ -32,7 +32,7 @@ import java.util.List;
 import java.util.Map;
 
 @RequestMapping("degree")
-@Api(tags = "级报名服务")
+@Api(tags = "级报名服务")
 @RestController
 public class DegreeController extends BaseController {
 

+ 29 - 0
mec-student/src/main/java/com/ym/mec/student/controller/OrganizationController.java

@@ -0,0 +1,29 @@
+package com.ym.mec.student.controller;
+
+
+import com.ym.mec.biz.dal.dao.OrganizationDao;
+import com.ym.mec.biz.dal.entity.Organization;
+import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.common.entity.HttpResponseResult;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+
+@RequestMapping("organization")
+@Api(tags = "分部服务")
+@RestController
+public class OrganizationController extends BaseController {
+
+    @Autowired
+    private OrganizationDao organizationDao;
+
+    @ApiOperation(value = "获取分部列表")
+    @GetMapping("/getOrgans")
+    public HttpResponseResult<List<Organization>> getOrgans() {
+        return succeed(organizationDao.findAllOrgans());
+    }
+}

+ 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) {

+ 34 - 14
mec-student/src/main/java/com/ym/mec/student/controller/StudentOrderController.java

@@ -1,9 +1,12 @@
 package com.ym.mec.student.controller;
 
+import com.alibaba.fastjson.JSONObject;
+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;
@@ -26,6 +29,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.util.DigestUtils;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.ModelAttribute;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -34,11 +38,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 +80,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 {
@@ -151,6 +152,22 @@ public class StudentOrderController extends BaseController {
             @ApiImplicitParam(name = "payChannel", value = "支付方式(alipay-支付宝app支付)", required = true, dataType = "String"),
     })
     public Object executePayment(BigDecimal amount, String orderNo, String payChannel, String notifyUrl, String returnUrl, String orderSubject, String orderBody, String sign, String code, String platform) throws Exception {
+        Map<String, Object> signParams = new LinkedHashMap<>();
+        signParams.put("appId", ConfigInit.appId);
+        signParams.put("amount", amount.setScale(2,BigDecimal.ROUND_HALF_UP));
+        signParams.put("orderNo", orderNo);
+//        signParams.put("notifyUrl", notifyUrl);
+//        signParams.put("returnUrl", returnUrl);
+        signParams.put("orderSubject", orderSubject);
+        signParams.put("orderBody", orderBody);
+        signParams.put("wxAppId", ConfigInit.wxAppId);
+
+        String originalStr = JSONObject.toJSONString(signParams);
+        String mewSign = DigestUtils.md5DigestAsHex(originalStr.getBytes());
+        if (!mewSign.equals(sign)) {
+            return failed("请勿非法请求");
+        }
+
         String openId = "";
         if (payChannel.equals("wx_pub")) {
             if (code == null || code.isEmpty()) {
@@ -165,7 +182,6 @@ public class StudentOrderController extends BaseController {
         }
 
         Date createTime = null;
-        String merNos = null;
         TenantPaymentOrder tenantPaymentOrder = null;
         StudentPaymentOrder studentPaymentOrder = null;
         if (platform != null && platform.equals("teacher")) {
@@ -179,10 +195,8 @@ public class StudentOrderController extends BaseController {
         }
         if (studentPaymentOrder != null) {
             createTime = studentPaymentOrder.getCreateTime();
-            merNos = studentPaymentOrder.getMerNos();
         } else {
             createTime = tenantPaymentOrder.getCreateTime();
-            merNos = tenantPaymentOrder.getMerNos();
         }
 
         Calendar beforeTime = Calendar.getInstance();
@@ -199,18 +213,24 @@ public class StudentOrderController extends BaseController {
         paymentParams.put("app_id", ConfigInit.appId);
         paymentParams.put("order_no", orderNo);
         paymentParams.put("pay_channel", payChannel);
-        paymentParams.put("pay_amt", amount);
+        paymentParams.put("pay_amt", amount.setScale(2,BigDecimal.ROUND_HALF_UP));
         paymentParams.put("goods_title", orderSubject);
         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().setScale(2, BigDecimal.ROUND_HALF_UP));//分佣金额
+            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));
         }
 

+ 18 - 4
mec-teacher/src/main/java/com/ym/mec/teacher/controller/TeacherVipGroupController.java

@@ -6,16 +6,17 @@ import com.ym.mec.biz.dal.dao.TeacherDao;
 import com.ym.mec.biz.dal.dto.VipGroupApplyDto;
 import com.ym.mec.biz.dal.dto.VipGroupCostCountParamsDto;
 import com.ym.mec.biz.dal.entity.Teacher;
+import com.ym.mec.biz.dal.page.StudentManageQueryInfo;
+import com.ym.mec.biz.service.StudentManageService;
 import com.ym.mec.biz.service.VipGroupService;
 import com.ym.mec.common.controller.BaseController;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
 
 import java.util.Objects;
 
@@ -34,6 +35,8 @@ public class TeacherVipGroupController extends BaseController {
 	private SysUserFeignService sysUserFeignService;
 	@Autowired
 	private TeacherDao teacherDao;
+	@Autowired
+	private StudentManageService studentManageService;
 
 	@ApiOperation("vip课申请")
 	@PostMapping("/vipGroupApply")
@@ -69,4 +72,15 @@ public class TeacherVipGroupController extends BaseController {
 		return succeed(vipGroupService.querySchoolByUserId(user.getId()));
 	}
 
+	@ApiOperation(value = "获取教师所在分部学生列表")
+	@GetMapping("/queryStudentsWithTeacher")
+	public Object queryStudentsWithTeacher(StudentManageQueryInfo queryInfo){
+		SysUser user = sysUserFeignService.queryUserInfo();
+		if (Objects.isNull(user)) {
+			return failed(HttpStatus.FORBIDDEN, "请登录");
+		}
+		queryInfo.setTeacherId(user.getId());
+		return succeed(studentManageService.queryStudentsWithTeacher(queryInfo));
+	}
+
 }

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

@@ -8,9 +8,9 @@ public class ConfigInit {
 
 
     private static ConfigInit instance;
-    public final static Integer organId = 46; //商户对应的分部
+    public final static Integer organId = 16; //商户对应的分部
     public final static String merNo = "B09767221"; //商户对应的分部
-    public final static String appId = "app_f0ebdd29-046f-4b60-bd50-92e2c1285c02";
+    public final static String appId = "app_756972d1-882e-44c6-9f52-e6a6b93c8756";
 
     public final static String wxAppId = "wx751141096e75a4ee";
     public final static String wxAppSecret = "e882d76c95d1613607a85338b1bed3ff";
@@ -44,8 +44,8 @@ public class ConfigInit {
          *添加商户配置,一个商户只需要 添加一次,添加以后在内存中。
          */
 
-        String apiKey = "api_live_8dd6fba0-59ca-45f7-8e82-0b3ae7bd7907";
-        String mockApiKey = "api_test_193c8f6a-514f-4d95-a26b-2861c7971105";
+        String apiKey = "api_live_bfc3c02f-657b-4731-9fcd-ea9503aa3bb9";
+        String mockApiKey = "api_test_d09b9f68-9798-43b3-93b7-a22ef406a20c";
         String rsaPrivateKey = "MIICeAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBAL3zHDr2s5Lp3b9FKAD4vB3Y2MyOypv68mKFi8uPznO9JkzBhwYLYRC8mnP+W7tw5Q7Yuf5Szhn8Mo9KZ8Bsv6S6iz3BtXzeHb/8nyeBAH2m477bJzwmapZPhPSroR8md1dnNI+4NttM/0Cn/rdAySzQn+IPHLPxWFwQw+y6FFi7AgMBAAECgYEAkuUBPfAvKzxEyng22ZmCESrzbi43La1B6UMRuxi5NfRfPBilzNzb8c+JOo7Ibgp+eZ7NJ4rt7FaG2x1VYxA2m151I86e6TlgPYNjjj56RpkrD9/LrDqePFE4AlrwO5802fK4X/iac1MCpEhaiVNQ3x6ikwcKWzKmMV/EpdijIcECQQDlt+ou3L5M2TQW8YYg9zA9TKRd+M/Xs0tPLJLE+W6m0+dmyeHBErMW6X874qhmIc3F8HYIW+O51GMy6KDgQ7PrAkEA065ujs1ZkwIPMopgIoqlRi8JDvAxgEZqktDDMMg0o2XZP6J7C5suf2BsrhKnjLlxII7dQPxDfPDiRz4jYpBKcQJBAKd77ev42W5iNk48DdTfJHas+HHjRHY5rMCu+NtQGNLdUKtqqYQBRD2CRFe/K5Q7NTIJ3aS+ikwkg6bMYO7hrb0CQDesuC1c+0M8Fm0vketj1eZotpQ0PoDDhIJK4BuzfIzBW+ttu7kovokH/m2mQGU13Pg4Ox89ei6hWJJuWHYzBzECQQDexzziaTpHMy3achL2M2pOSdaSLYoesmPTmVZ3kOZf82FpRlfxVGUs0nKpEEgagUkiHUQHAu5RVkxIiDqMYrQp";
 
         merConfig.setApiKey(apiKey);

+ 26 - 2
mec-thirdparty/src/main/java/com/ym/mec/thirdparty/adapay/CorpMember.java

@@ -7,9 +7,9 @@ import java.util.Map;
 import com.alibaba.fastjson.JSON;
 
 /**
- * @author yingyong.wang
+ * @author 
  */
-class CorpMember extends ConfigInit {
+public class CorpMember extends ConfigInit {
 
     /**
      * 运行 CorpMember 类接口
@@ -129,6 +129,30 @@ class CorpMember extends ConfigInit {
     }
 
     /**
+     * 创建 CorpMember
+     *
+     * @return 创建的CorpMember 对象
+     * @throws Exception 异常
+     */
+    public Map<String, Object> executeCreateMember( Map<String,Object> info,String path) throws Exception {
+        System.out.println("=======execute Create CorpMember begin=======");
+        Map<String, Object> memberParams = new HashMap<String, Object>();
+        memberParams.put("app_id", appId);
+        memberParams.putAll(info);
+
+        File file = new File(path);
+        System.out.println("创建企业用户,请求参数:" + JSON.toJSONString(memberParams) );
+        Map<String, Object> member = com.huifu.adapay.model.CorpMember.create(memberParams, file);
+        System.out.println("创建企业用户,返回参数:" + JSON.toJSONString(member) );
+
+
+        System.out.println("=======execute Create CorpMember end=======");
+
+        return member;
+
+    }
+
+    /**
      * 查询 CorpMember
      *
      * @param member_id 待查询的member_id

+ 24 - 23
mec-thirdparty/src/main/java/com/ym/mec/thirdparty/adapay/MainDemo.java

@@ -1,5 +1,6 @@
 package com.ym.mec.thirdparty.adapay;
 
+import java.util.HashMap;
 import java.util.Map;
 
 
@@ -17,29 +18,29 @@ public class MainDemo {
 
     public static void testMerchant() throws Exception {
 
-//        HashMap<String, Object> memberParams = new HashMap<>();
-//        memberParams.put("member_id", "W004201");
-//        memberParams.put("order_no", "corp_mem_" + System.currentTimeMillis());
-//
-//        memberParams.put("social_credit_code", "91420106303461541T");
-//        memberParams.put("social_credit_code_expires", "20440730");
-//        memberParams.put("business_scope", "教育资讯、投资资讯");
-//        memberParams.put("name", "武汉大雅乐盟教育咨询有限公司");
-//        memberParams.put("prov_code", "0042");
-//        memberParams.put("area_code", "4201");
-//        memberParams.put("legal_person", "李松");
-//        memberParams.put("legal_cert_id", "420106196811210837");
-//        memberParams.put("legal_cert_id_expires", "20990730");
-//        memberParams.put("legal_mp", "13958465215");//法人手机号
-//        memberParams.put("address", "武昌区水果湖汉街武汉中央文化旅游区K3地块第2幢34层2号");
-//        memberParams.put("zip_code", "430000");
-//        //memberParams.put("telphone", "41164452");
-//       // memberParams.put("email", "ceshi@qq.com");
-//        memberParams.put("bank_code", "03020000");
-//        memberParams.put("bank_acct_type", "1");
-//        memberParams.put("card_no", "‘8111501011700649152");
-//        memberParams.put("card_name", "武汉大雅");
-//        new CorpMember().executeCreateMember(memberParams);
+        HashMap<String, Object> memberParams = new HashMap<>();
+        memberParams.put("member_id", "W004201");
+        memberParams.put("order_no", "corp_mem_" + System.currentTimeMillis());
+
+        memberParams.put("social_credit_code", "91420106303461541T");
+        memberParams.put("social_credit_code_expires", "20440730");
+        memberParams.put("business_scope", "教育资讯、投资资讯");
+        memberParams.put("name", "武汉大雅乐盟教育咨询有限公司");
+        memberParams.put("prov_code", "0042");
+        memberParams.put("area_code", "4201");
+        memberParams.put("legal_person", "李松");
+        memberParams.put("legal_cert_id", "420106196811210837");
+        memberParams.put("legal_cert_id_expires", "20990730");
+        memberParams.put("legal_mp", "13958465215");//法人手机号
+        memberParams.put("address", "武昌区水果湖汉街武汉中央文化旅游区K3地块第2幢34层2号");
+        memberParams.put("zip_code", "430000");
+        //memberParams.put("telphone", "41164452");
+       // memberParams.put("email", "ceshi@qq.com");
+        memberParams.put("bank_code", "03020000");
+        memberParams.put("bank_acct_type", "1");
+        memberParams.put("card_no", "‘8111501011700649152");
+        memberParams.put("card_name", "武汉大雅");
+        new CorpMember().executeCreateMember(memberParams);
 
 //        new CorpMember().executeQueryMember("W004201");
 

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

@@ -175,18 +175,15 @@ 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 LinkedHashMap<>();
         paymentParams.put("appId", appId);
-        paymentParams.put("amount", amount);
+        paymentParams.put("amount", amount.setScale(2, BigDecimal.ROUND_HALF_UP));
         paymentParams.put("orderNo", orderNo);
-        paymentParams.put("notifyUrl", notifyUrl);
-        paymentParams.put("returnUrl", returnUrl);
+//        paymentParams.put("notifyUrl", notifyUrl);
+//        paymentParams.put("returnUrl", returnUrl);
         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))); //分佣金额

+ 39 - 0
mec-web/src/main/java/com/ym/mec/web/controller/AdapayController.java

@@ -0,0 +1,39 @@
+package com.ym.mec.web.controller;
+
+import com.ym.mec.thirdparty.adapay.CorpMember;
+import com.ym.mec.common.controller.BaseController;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.HashMap;
+
+@RequestMapping("adapay")
+@Api(tags = "汇付服务")
+@RestController
+public class AdapayController extends BaseController {
+
+
+    @ApiOperation("新建企业用户")
+    @PostMapping(value = "createMember")
+    public Object queryRegisterContract(MultipartFile file) throws Exception {
+
+        HashMap<String, Object> memberParams = new HashMap<>();
+        memberParams.put("order_no", "corp_mem_" + System.currentTimeMillis());
+
+        memberParams.put("bank_acct_type", "1");
+        memberParams.put("card_name", "武汉大雅乐盟教育咨询有限公司");
+
+        String path = "C:/Users/river/Desktop/imgzip/武汉大雅乐盟教育咨询有限公司.zip";
+
+        new CorpMember().executeCreateMember(memberParams,path);
+        return true;
+    }
+
+
+}

+ 29 - 0
mec-web/src/main/java/com/ym/mec/web/controller/DegreeController.java

@@ -1,18 +1,26 @@
 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.entity.Employee;
 import com.ym.mec.biz.dal.page.DegreeQueryInfo;
 import com.ym.mec.biz.service.DegreeRegistrationService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
 import io.swagger.annotations.Api;
 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.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.Arrays;
+import java.util.List;
+
 @RequestMapping("degree")
 @Api(tags = "考级报名服务")
 @RestController
@@ -20,12 +28,33 @@ public class DegreeController extends BaseController { ;
 
     @Autowired
     private DegreeRegistrationService degreeRegistrationService;
+    @Autowired
+    private EmployeeDao employeeDao;
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
 
 
     @ApiOperation(value = "查询收费列表")
     @GetMapping("/queryPage")
     @PreAuthorize("@pcs.hasPermissions('degree/queryPage')")
     public HttpResponseResult queryPage(DegreeQueryInfo queryInfo) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            return failed("用户信息获取失败");
+        }
+        if(!sysUser.getIsSuperAdmin()){
+            Employee employee = employeeDao.get(sysUser.getId());
+            if (StringUtils.isEmpty(queryInfo.getOrganId())) {
+                queryInfo.setOrganId(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.getOrganId().split(",")))){
+                    return failed("非法请求");
+                }
+            }
+        }
         queryInfo.setSort("create_time_");
         queryInfo.setOrder("DESC");
         return succeed(degreeRegistrationService.getPageList(queryInfo));

+ 233 - 9
mec-web/src/main/java/com/ym/mec/web/controller/ExportController.java

@@ -92,6 +92,11 @@ public class ExportController extends BaseController {
 
     @Autowired
     private CooperationOrganService cooperationOrganService;
+    @Autowired
+    private StudentPaymentRouteOrderDao studentPaymentRouteOrderDao;
+
+    @Autowired
+    private TeacherService teacherService;
 
     @ApiOperation(value = "导出教师考勤列表")
     @PostMapping("export/queryTeacherAttendances")
@@ -274,12 +279,12 @@ public class ExportController extends BaseController {
         OutputStream outputStream = response.getOutputStream();
         try {
             HSSFWorkbook workbook = POIUtil.exportExcel(new String[]{"课时编号", "老师编号", "老师姓名", "老师分部", "工作类别",
-                    "课程分部", "课程组编号", "课程班名称", "乐团模式", "vip活动名称", "阶梯奖励名称", "线上课/线下课", "线上课单价", "线下课单价",
+                    "课程分部", "课程组编号", "课程班名称", "乐团模式", "vip活动名称","Vip课程类型", "阶梯奖励名称", "线上课/线下课", "线上课单价", "线下课单价",
                     "课程类别", "课时时长", "实际上课时长", "上课日期",
                     "上课时间", "教师签到状态", "教师签退状态", "教师签到时间", "教师签退时间",
                     "主辅", "上课地点", "应到学员", "学员签到时间", "学员签退时间", "课时课酬", "阶梯奖励"}, new String[]{
                     "courseScheduleId", "teacherId", "teacherName", "teacherOrganName", "jobType",
-                    "courseScheduleOrganName", "groupId", "groupName", "changeType", "vipActiveName", "activeName", "teachMode", "onlineClassesUnitPrice", "offlineClassesUnitPrice",
+                    "courseScheduleOrganName", "groupId", "groupName", "changeType", "vipActiveName", "vipCategoryName", "activeName", "teachMode", "onlineClassesUnitPrice", "offlineClassesUnitPrice",
                     "courseScheduleType", "signCourseScheduleTime", "currentTime", "classDate", "courseScheduleStartTime", "signInStatus",
                     "signOutStatus", "signInTime", "signOutTime", "teacherRole", "address", "studentNum", "studentSignInTime", "studentSignOutTime", "price", "rewards"}, rows);
             response.setContentType("application/octet-stream");
@@ -489,16 +494,16 @@ public class ExportController extends BaseController {
         List<VipGroup> rows = vipGroupService.findVipGroups(queryInfo).getRows();
         OutputStream outputStream = response.getOutputStream();
         if (rows != null && rows.size() > 0) {
-            rows.forEach(e -> {
+            for (VipGroup e : rows) {
                 e.setSubClassTimes(e.getTotalClassTimes() == null ? 0 : e.getTotalClassTimes() - (e.getCurrentClassTimes() == null ? 0 : e.getCurrentClassTimes()));
-            });
+            }
         }
         try {
-            HSSFWorkbook workbook = POIUtil.exportExcel(new String[]{"VIP编号", "课程名称", "课程状态", "指导老师", "指导老师", "班级人数", "课程单价",
-                    "活动方案", "当前课次", "总课次", "剩余课次", "月消耗", "上次课时间", "开课时间", "结束时间", "申请时间", "学生姓名"}, new String[]{
+            HSSFWorkbook workbook = POIUtil.exportExcel(new String[]{"VIP编号", "课程名称", "课程状态", "指导老师", "教务老师", "班级人数", "课程单价",
+                    "活动方案", "当前课次", "总课次", "剩余课次", "月消耗", "上次课时间", "开课时间", "结束时间", "申请时间", "学生姓名", "课程形式", "备注"}, new String[]{
                     "id", "name", "status.msg", "userName", "educationalTeacherName", "studentNum", "courseUnitPrice",
                     "vipGroupActivityName", "currentClassTimes", "totalClassTimes", "subClassTimes", "monthConsumeRate", "lastOverTime",
-                    "courseStartDate", "coursesExpireDate", "registrationStartTime", "userInfo"}, rows);
+                    "courseStartDate", "coursesExpireDate", "registrationStartTime", "userInfo", "vipGroupCategoryName", "stopReason"}, rows);
             response.setContentType("application/octet-stream");
             response.setHeader("Content-Disposition", "attachment;filename=lender-" + DateUtil.getDate(new Date()) + ".xls");
             response.flushBuffer();
@@ -594,10 +599,14 @@ public class ExportController extends BaseController {
             }
         }
         List<SporadicChargeInfo> rows = sporadicChargeInfoService.queryDetailPage(queryInfo).getRows();
+        for (SporadicChargeInfo row : rows) {
+            row.setOpenFlagStr(row.getOpenFlag().equals(0) ? "开启" : "关闭");
+            row.setOrderType(row.getUserId() ==null ? "公用" : "个人");
+        }
         OutputStream outputStream = response.getOutputStream();
         try {
-            HSSFWorkbook workbook = POIUtil.exportExcel(new String[]{"分部", "收费类型", "标题", "金额", "时间", "学生姓名", "创建人"}, new String[]{
-                    "organName", "chargeType.msg", "title", "amount", "updateTime", "userName", "operatorName"}, rows);
+            HSSFWorkbook workbook = POIUtil.exportExcel(new String[]{"分部", "收费类型", "标题", "收费状态", "金额", "时间", "学生姓名","订单类型", "创建人"}, new String[]{
+                    "organName", "chargeType.msg", "title", "openFlagStr", "amount", "createTime", "userName", "orderType","operatorName"}, rows);
             response.setContentType("application/octet-stream");
             response.setHeader("Content-Disposition", "attachment;filename=lender-" + DateUtil.getDate(new Date()) + ".xls");
             response.flushBuffer();
@@ -1798,4 +1807,219 @@ public class ExportController extends BaseController {
             }
         }
     }
+
+
+    @ApiOperation(value = "财务管理导出")
+    @RequestMapping("export/routeOrderList")
+    @PreAuthorize("@pcs.hasPermissions('export/routeOrderList')")
+    public void routeOrderList(StudentPaymentOrderQueryInfo queryInfo, HttpServletResponse response) throws IOException {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (!sysUser.getIsSuperAdmin()) {
+            Employee employee = employeeDao.get(sysUser.getId());
+            if (StringUtils.isEmpty(queryInfo.getRoutingOrganId()) && queryInfo.getOrderType().equals("3")) {
+                queryInfo.setRoutingOrganId(employee.getOrganIdList());
+            } else if (StringUtils.isEmpty(queryInfo.getOrganId())) {
+                queryInfo.setOrganId(employee.getOrganIdList());
+            }
+        }
+        queryInfo.setPage(1);
+        queryInfo.setRows(49999);
+        queryInfo.setIsExport(true);
+        queryInfo.setOrderType("3");
+        Map<String, Object> params = new HashMap<String, Object>();
+        MapUtil.populateMap(params, queryInfo);
+        List<StudentPaymentOrderExportDto> studentPaymentOrderExportDtos = studentPaymentRouteOrderDao.ExportQueryPage(params);
+        if (studentPaymentOrderExportDtos.size() > 50000) {
+            throw new BizException("数据集太大,不能导出.最大数据集不能超过50000");
+        }
+        OutputStream outputStream = response.getOutputStream();
+        long i = 1;
+        for (StudentPaymentOrderExportDto row : studentPaymentOrderExportDtos) {
+            if (queryInfo.getOrderType().equals("1")) {
+                BigDecimal comAmount = row.getComAmount() == null ? BigDecimal.ZERO : row.getComAmount();
+                row.setActualAmount(comAmount);
+            } else if (queryInfo.getOrderType().equals("2")) {
+                BigDecimal perAmount = row.getPerAmount() == null ? BigDecimal.ZERO : row.getPerAmount();
+                row.setActualAmount(perAmount);
+            }
+            if (row.getActualAmount() == null) {
+                row.setActualAmount(BigDecimal.ZERO);
+            }
+            if (row.getBalancePaymentAmount() == null) {
+                row.setBalancePaymentAmount(BigDecimal.ZERO);
+            }
+            BigDecimal transferFee = (row.getActualAmount().multiply(new BigDecimal("0.28")).divide(new BigDecimal(100))).setScale(2, BigDecimal.ROUND_HALF_UP);
+            row.setTransferFee(transferFee);
+            BigDecimal musicalFee = BigDecimal.ZERO;
+            BigDecimal teachingFee = BigDecimal.ZERO;
+            BigDecimal courseFee = BigDecimal.ZERO;
+            BigDecimal leaseFee = BigDecimal.ZERO;
+            String goodsName = "";
+            if (row.getOrderDetailList() != null) {
+                for (StudentPaymentOrderDetail orderDetail : row.getOrderDetailList()) {
+                    if (orderDetail.getType().equals(OrderDetailTypeEnum.MUSICAL)) {
+                        if (orderDetail.getKitGroupPurchaseType() != null && orderDetail.getKitGroupPurchaseType().equals(KitGroupPurchaseTypeEnum.LEASE)) {
+                            leaseFee = orderDetail.getPrice();
+                        } else {
+                            musicalFee = orderDetail.getPrice();
+                        }
+                    } else if (orderDetail.getType().equals(OrderDetailTypeEnum.COURSE)) {
+                        courseFee = courseFee.add(orderDetail.getPrice());
+                    } else if (orderDetail.getType().equals(OrderDetailTypeEnum.ACCESSORIES) || orderDetail.getType().equals(OrderDetailTypeEnum.TEACHING) || orderDetail.getType().equals(OrderDetailTypeEnum.OTHER)) {
+                        teachingFee = teachingFee.add(orderDetail.getPrice());
+                    }
+                }
+            }
+            if (row.getGoodsList() != null) {
+                goodsName = row.getGoodsList().stream().map(Goods::getName).collect(Collectors.joining("|"));
+            }
+            row.setCourseFee(courseFee);
+            row.setMusicalFee(musicalFee);
+            row.setTeachingFee(teachingFee);
+            row.setLeaseFee(leaseFee);
+            row.setMemo(goodsName);
+            //专业
+            if (row.getGroupType().equals(GroupType.MUSIC)) {
+                StudentRegistration studentRegistration = studentRegistrationDao.findStudentByMusicGroupIdAndUserId(row.getMusicGroupId(), row.getUserId());
+                if (studentRegistration != null) {
+                    row.setSubjectName(studentRegistration.getSubjectName());
+                    row.setSchoolName(studentRegistration.getSchoolName());
+                    row.setCooperationOrganName(studentRegistration.getRemark());
+                }
+            } else if (row.getGroupType().equals(GroupType.VIP)) {
+                row.setCourseFee(row.getActualAmount());
+                VipGroup vipGroupInfo = vipGroupDao.findVipGroupInfo(Integer.parseInt(row.getMusicGroupId()), row.getClassGroupId());
+                if (vipGroupInfo != null) {
+                    row.setSchoolName(vipGroupInfo.getSchoolName());
+                    row.setSubjectName(vipGroupInfo.getSubjectName());
+                }
+
+            } else if (row.getGroupType().equals(GroupType.SPORADIC)) {
+                row.setSporadicAmount(row.getActualAmount());
+                row.setMusicalFee(BigDecimal.ZERO);
+                row.setTeachingFee(BigDecimal.ZERO);
+                if (row.getChargeType() != null) {
+
+                    if (row.getChargeType().equals(1)) {
+                        row.setSporadicType("考级");
+                    } else if (row.getChargeType().equals(2)) {
+                        row.setSporadicType("声部更改");
+                    } else if (row.getChargeType().equals(3)) {
+                        row.setSporadicType("乐器更换");
+                    } else if (row.getChargeType().equals(4)) {
+                        row.setSporadicType("配件销售");
+                    } else if (row.getChargeType().equals(5)) {
+                        row.setSporadicType("维修费");
+                    } else if (row.getChargeType().equals(6)) {
+                        row.setSporadicType("福袋活动");
+                    } else if (row.getChargeType().equals(7)) {
+                        row.setSporadicType("上门费");
+                    } else if (row.getChargeType().equals(9)) {
+                        row.setSporadicType("账户充值");
+                    } else if (row.getChargeType().equals(10)) {
+                        row.setSporadicType("乐保服务");
+                    } else if (row.getChargeType().equals(11)) {
+                        row.setSporadicType("其他");
+                    }
+                }
+                School userSchool = musicGroupDao.findUserSchool(row.getUserId());
+                if (userSchool != null) {
+                    row.setSchoolName(userSchool.getName());
+                }
+            } else if (row.getGroupType().equals(GroupType.PRACTICE)) {
+                row.setCourseFee(row.getActualAmount());
+                School userSchool = musicGroupDao.findUserSchool(row.getUserId());
+                if (userSchool != null) {
+                    row.setSchoolName(userSchool.getName());
+                }
+                PracticeCourseDto practiceGroup = practiceGroupDao.findByGroupId(Integer.parseInt(row.getMusicGroupId()));
+                if (practiceGroup != null) {
+                    row.setSubjectName(practiceGroup.getSubjectName());
+                }
+            }
+            String paymentChannel = "";
+            if (row.getPaymentChannel() == null) {
+            } else if (row.getPaymentChannel().equals("YQPAY")) {
+                paymentChannel = "双乾";
+            } else if (row.getPaymentChannel().equals("ADAPAY")) {
+                paymentChannel = "汇付";
+            } else if (row.getPaymentChannel().equals("BALANCE")) {
+                paymentChannel = "余额";
+            }
+            row.setPaymentChannel(paymentChannel);
+            row.setId(i);
+            i++;
+        }
+
+        try {
+            String[] header = {"序号", "学生姓名", "交易流水号", "订单编号", "收款渠道", "收款账户", "应付金额", "现金支付", "余额支付", "分润账户", "分润金额", "分润余额", "到账时间",
+                    "关联乐团ID/VIP课ID", "课程形态", "课程费用", "减免费用", "押金", "乐器", "教辅费用", "零星收款费用", "零星收款类别", "手续费", "专业", "分部", "单位/学校", "合作机构", "备注"};
+            String[] body = {"id", "user.username", "transNo", "orderNo", "paymentChannel", "merNos", "expectAmount", "actualAmount", "balancePaymentAmount", "routeMerNo", "routeAmount", "routeBalance", "payTime", "musicGroupId",
+                    "groupType.desc", "courseFee", "remitFee", "leaseFee", "musicalFee", "teachingFee", "sporadicAmount", "sporadicType", "transferFee", "subjectName", "organName", "schoolName", "cooperationOrganName", "memo"};
+            HSSFWorkbook workbook = POIUtil.exportExcel(header, body, studentPaymentOrderExportDtos);
+            response.setContentType("application/octet-stream");
+            response.setHeader("Content-Disposition", "attachment;filename=lender-" + DateUtil.getDate(new Date()) + ".xls"); //    //收款账户
+            response.flushBuffer();
+            outputStream = response.getOutputStream();
+            workbook.write(outputStream);
+            outputStream.flush();
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            if (outputStream != null) {
+                try {
+                    outputStream.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+    }
+
+
+    @ApiOperation(value = "老师默认课酬导出")
+    @RequestMapping("export/teacherDefaultSalary")
+    @PreAuthorize("@pcs.hasPermissions('export/teacherDefaultSalary')")
+	public void exportTeacherDefaultSalary(String organIdList, HttpServletResponse response) throws IOException {
+		SysUser sysUser = sysUserFeignService.queryUserInfo();
+		if (sysUser == null) {
+			throw new IOException("用户信息获取失败");
+		}
+		List<TeacherDefaultSalaryDto> pageList = teacherService.queryTeacherDefaultSalary(organIdList);
+		if (pageList.size() <= 0) {
+			response.setStatus(200);
+			response.setContentType("Content-Type: application/json;charset=UTF-8");
+			response.getOutputStream().write("{\"data\": null, \"code\": 500, \"status\": false, \"msg\": \"没有可导出的记录\"}".getBytes());
+			response.flushBuffer();
+			return;
+		}
+		OutputStream outputStream = response.getOutputStream();
+		try {
+
+			String[] header = { "老师编号", "姓名", "分部", "工作类型", "在职状态", "老师状态", "1v1", "1v2", "1v3", "1v4", "1v5", "1v6", "1v7", "网管课", "单技课2.0", "合奏课2.0", "综合课2.0", "集训单技课2.0", "集训合奏课2.0",
+					"基础技能课2.0", "课堂课2.0", "单技课3.0", "合奏课3.0", "综合课3.0", "集训单技课3.0", "集训合奏课3.0",
+					"基础技能课3.0", "课堂课3.0", "线上基础技能课1v3", "线上基础技能课1v4", "线上基础技能课1v5", "乐团网管课1v1" };
+			String[] body = { "userId", "realName", "organName", "jobNature", "demissionStatus", "status", "vip1", "vip2", "vip3", "vip4", "vip5", "vip6", "vip7",
+					"practiceSalary", "singleSalary2", "mixSalary2", "comprehensiveSalary2", "traningSigleSalary2", "traningMixSalary2", "highSalary2",
+					"classroomSalary2", "singleSalary", "mixSalary", "comprehensiveSalary", "traningSigleSalary", "traningMixSalary", "highSalary",
+					"classroomSalary", "highOnline3Salary", "highOnline4Salary", "highOnline5Salary", "musicNetwork1Salary" };
+			HSSFWorkbook workbook = POIUtil.exportExcel(header, body, pageList);
+			response.setContentType("application/octet-stream");
+			response.setHeader("Content-Disposition", "attachment;filename=teacherDefaultSalary-" + DateUtil.getDate(new Date()) + ".xls");
+			response.flushBuffer();
+			outputStream = response.getOutputStream();
+			workbook.write(outputStream);
+			outputStream.flush();
+		} catch (Exception e) {
+			e.printStackTrace();
+		} finally {
+			if (outputStream != null) {
+				try {
+					outputStream.close();
+				} catch (IOException e) {
+					e.printStackTrace();
+				}
+			}
+		}
+	}
 }

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

@@ -222,6 +222,15 @@ public class MusicGroupController extends BaseController {
 		return succeed();
 	}
 
+	@ApiOperation(value = "删除乐团")
+	@PostMapping("/deleteMusicGroup")
+	@PreAuthorize("@pcs.hasPermissions('musicGroup/deleteMusicGroup')")
+	@ApiImplicitParams({ @ApiImplicitParam(name = "musicGroupId", value = "乐团编号", required = true, dataType = "String") })
+	public Object deleteMusicGroup(String musicGroupId) {
+		musicGroupService.deleteMusicGroup(musicGroupId);
+		return succeed();
+	}
+
 	@ApiOperation(value = "暂停乐团")
 	@PostMapping("/pauseMusicGroup")
 	@PreAuthorize("@pcs.hasPermissions('musicGroup/pauseMusicGroup')")

+ 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));
+    }
+
 }

この差分においてかなりの量のファイルが変更されているため、一部のファイルを表示していません