Forráskód Böngészése

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

yonge 3 éve
szülő
commit
7ac5026673
58 módosított fájl, 1517 hozzáadás és 894 törlés
  1. 6 11
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CloudTeacherOrderDao.java
  2. 0 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleEvaluateDao.java
  3. 4 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/MusicGroupPaymentCalenderActivityDao.java
  4. 0 2
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/OrganizationDao.java
  5. 20 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TenantAssetsInfoDao.java
  6. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/CalenderMemberDto.java
  7. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/MusicGroupPaymentBaseCalender.java
  8. 0 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/MusicGroupPaymentCalenderAddStudentDto.java
  9. 0 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/TenantInfoDto.java
  10. 4 3
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CloudTeacherOrder.java
  11. 23 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/MusicGroupPaymentCalender.java
  12. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/MusicGroupPaymentCalenderCourseSettings.java
  13. 99 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/TenantAssetsInfo.java
  14. 108 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/TenantConfigDetail.java
  15. 12 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/TenantOrderRecord.java
  16. 2 2
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/VipGroupActivity.java
  17. 22 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/CalenderBaseServiceEnum.java
  18. 12 5
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/PeriodEnum.java
  19. 4 3
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/CloudTeacherAddQueryInfo.java
  20. 7 0
      mec-biz/src/main/java/com/ym/mec/biz/service/MusicGroupPaymentCalenderActivityService.java
  21. 15 1
      mec-biz/src/main/java/com/ym/mec/biz/service/MusicGroupPaymentCalenderBaseService.java
  22. 9 0
      mec-biz/src/main/java/com/ym/mec/biz/service/OrderPayOpsService.java
  23. 12 1
      mec-biz/src/main/java/com/ym/mec/biz/service/StudentService.java
  24. 19 0
      mec-biz/src/main/java/com/ym/mec/biz/service/TenantAssetsInfoService.java
  25. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/TenantInfoService.java
  26. 0 9
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ActivityPlanServiceImpl.java
  27. 12 35
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CloudTeacherOrderServiceImpl.java
  28. 4 4
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/EmployeeServiceImpl.java
  29. 25 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MemberPaymentCalenderServiceImpl.java
  30. 5 40
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MemberRankSettingServiceImpl.java
  31. 36 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupPaymentCalenderActivityServiceImpl.java
  32. 36 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupPaymentCalenderCourseSettingsServiceImpl.java
  33. 36 75
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupPaymentCalenderDetailServiceImpl.java
  34. 53 72
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupPaymentCalenderServiceImpl.java
  35. 12 45
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java
  36. 22 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicRepairPaymentCalenderServiceImpl.java
  37. 303 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/OrderPayOpsServiceImpl.java
  38. 0 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/PlatformServeServiceImpl.java
  39. 11 61
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/PracticeGroupServiceImpl.java
  40. 6 43
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentOrderServiceImpl.java
  41. 20 89
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentServiceImpl.java
  42. 95 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TenantAssetsInfoServiceImpl.java
  43. 65 41
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TenantInfoServiceImpl.java
  44. 49 9
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TenantOrderRecordServiceImpl.java
  45. 4 4
      mec-biz/src/main/resources/config/mybatis/CloudTeacherOrderMapper.xml
  46. 6 0
      mec-biz/src/main/resources/config/mybatis/MusicGroupPaymentCalenderActivityDao.xml
  47. 22 7
      mec-biz/src/main/resources/config/mybatis/MusicGroupPaymentCalenderMapper.xml
  48. 0 4
      mec-biz/src/main/resources/config/mybatis/OrganizationMapper.xml
  49. 28 0
      mec-biz/src/main/resources/config/mybatis/TenantAssetsInfoMapper.xml
  50. 2 1
      mec-biz/src/main/resources/config/mybatis/VipGroupActivityMapper.xml
  51. 16 0
      mec-biz/src/main/resources/rebel.xml
  52. 137 106
      mec-common/audit-log/src/main/java/com/yonge/log/interceptor/AuditLogInterceptor.java
  53. 7 1
      mec-student/src/main/java/com/ym/mec/student/controller/MusicGroupPaymentCalenderController.java
  54. 33 201
      mec-student/src/main/java/com/ym/mec/student/controller/StudentOrderController.java
  55. 40 0
      mec-web/src/main/java/com/ym/mec/web/controller/TenantAssetsInfoController.java
  56. 7 2
      mec-web/src/main/java/com/ym/mec/web/controller/TenantInfoController.java
  57. 30 1
      mec-web/src/main/java/com/ym/mec/web/controller/TenantOrderRecordController.java
  58. 3 3
      mec-web/src/main/resources/logback-spring.xml

+ 6 - 11
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CloudTeacherOrderDao.java

@@ -1,20 +1,15 @@
 package com.ym.mec.biz.dal.dao;
 
-import java.math.BigDecimal;
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
 import com.ym.mec.biz.dal.dto.CloudTeacherActiveTargetDetailDto;
-import com.ym.mec.biz.dal.entity.CloudTeacherStudent;
-import com.ym.mec.biz.dal.page.CloudTeacherActiveQueryInfo;
-import com.ym.mec.biz.dal.page.CloudTeacherOrderQueryInfo;
-import org.apache.ibatis.annotations.Param;
-
 import com.ym.mec.biz.dal.dto.CloudTeacherOrderDto;
 import com.ym.mec.biz.dal.entity.CloudTeacherOrder;
+import com.ym.mec.biz.dal.entity.CloudTeacherStudent;
 import com.ym.mec.common.dal.BaseDAO;
+import org.apache.ibatis.annotations.Param;
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
 
 public interface CloudTeacherOrderDao extends BaseDAO<Long, CloudTeacherOrder> {
 	

+ 0 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleEvaluateDao.java

@@ -7,7 +7,6 @@ import com.ym.mec.biz.dal.enums.OrderTypeEnum;
 import com.ym.mec.common.dal.BaseDAO;
 
 import org.apache.ibatis.annotations.Param;
-import org.junit.runners.Parameterized.Parameters;
 
 import java.util.Date;
 import java.util.List;

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

@@ -9,4 +9,8 @@ import java.util.List;
 public interface MusicGroupPaymentCalenderActivityDao extends BaseMapper<MusicGroupPaymentCalenderActivity> {
 
     void insertBatch(@Param("calenderActivityList") List<MusicGroupPaymentCalenderActivity> musicGroupPaymentCalenderActivities);
+
+    void delByCalenderId(@Param("calenderId") Long calenderId);
+
+    List<MusicGroupPaymentCalenderActivity> findByCalenderId(Long calenderId);
 }

+ 0 - 2
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/OrganizationDao.java

@@ -9,8 +9,6 @@ import java.util.Set;
 
 public interface OrganizationDao extends BaseDAO<Integer, Organization> {
 
-    Organization getByName(@Param("name") String name,@Param("tenantId") Integer tenantId);
-
     /**
      * 根据父级id查询子级列表
      * @param parentId

+ 20 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TenantAssetsInfoDao.java

@@ -0,0 +1,20 @@
+package com.ym.mec.biz.dal.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ym.mec.biz.dal.entity.TenantAssetsInfo;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 机构资产信息(TenantAssetsInfo)表数据库访问层
+ *
+ * @author hgw
+ * @since 2021-12-22 14:27:02
+ */
+public interface TenantAssetsInfoDao extends BaseMapper<TenantAssetsInfo> {
+
+    int insertBatch(@Param("entities") List<TenantAssetsInfo> entities);
+
+}
+

+ 11 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/CalenderMemberDto.java

@@ -17,12 +17,23 @@ public class CalenderMemberDto {
     @ApiModelProperty(value = "会员现价", required = false)
     private BigDecimal actualAmount = BigDecimal.ZERO;
 
+    @ApiModelProperty(value = "会员原价", required = false)
+    private BigDecimal originalAmount = BigDecimal.ZERO;
+
     @ApiModelProperty(value = "会员等级编号", required = false)
     private Integer memberRankSettingId = 1;
 
     @ApiModelProperty(value = "是否必选", required = false)
     private Boolean optionalFlag = false;
 
+    public BigDecimal getOriginalAmount() {
+        return originalAmount;
+    }
+
+    public void setOriginalAmount(BigDecimal originalAmount) {
+        this.originalAmount = originalAmount;
+    }
+
     public PeriodEnum getPeriodEnum() {
         return periodEnum;
     }

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

@@ -23,7 +23,7 @@ public class MusicGroupPaymentBaseCalender {
 	@ApiModelProperty(value = "学校缴费、个人缴费", required = true)
 	private PayUserType payUserType;
 
-	@ApiModelProperty(value = "缴费类型", required = true)
+	@ApiModelProperty(value = "缴费类型", required = false)
 	private PaymentType paymentType;
 
 	@ApiModelProperty(value = "缴费开始时间", required = true)

+ 0 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/MusicGroupPaymentCalenderAddStudentDto.java

@@ -1,6 +1,5 @@
 package com.ym.mec.biz.dal.dto;
 
-import java.util.List;
 import java.util.Set;
 
 public class MusicGroupPaymentCalenderAddStudentDto {

+ 0 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/TenantInfoDto.java

@@ -49,7 +49,6 @@ public class TenantInfoDto implements Serializable {
     /**
      * 地址
      */
-    @NotBlank(message = "地址不能为空!")
     @Size(max = 200, message = "地址不能超过200个字!")
     @ApiModelProperty(value = "地址")
     private String address;

+ 4 - 3
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CloudTeacherOrder.java

@@ -1,5 +1,6 @@
 package com.ym.mec.biz.dal.entity;
 
+import com.ym.mec.biz.dal.enums.PeriodEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
@@ -29,7 +30,7 @@ public class CloudTeacherOrder extends BaseEntity {
      * 时长类型 1-天 2-月 3-年
      */
     @ApiModelProperty(value = "时长类型 1-天 2-月 3-年")
-    private Integer type;
+    private PeriodEnum type;
 
     /**
      * 时长类型 1-天 2-月 3-年
@@ -137,11 +138,11 @@ public class CloudTeacherOrder extends BaseEntity {
         this.studentId = studentId;
     }
 
-    public Integer getType() {
+    public PeriodEnum getType() {
         return type;
     }
 
-    public void setType(Integer type) {
+    public void setType(PeriodEnum type) {
         this.type = type;
     }
 

+ 23 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/MusicGroupPaymentCalender.java

@@ -171,7 +171,7 @@ public class MusicGroupPaymentCalender extends BaseEntity {
 	private CourseViewTypeEnum courseViewType;
 
 	//会员周期
-	private PeriodEnum memberPeriod = MONTH;
+	private PeriodEnum memberPeriod;
 
 	//会员有效期(月)
 	private Integer memberValidDate;
@@ -200,6 +200,28 @@ public class MusicGroupPaymentCalender extends BaseEntity {
 	//乐保是否必选
 	private Boolean musicRepairOptionalFlag = false;
 
+	//申请价格
+	private BigDecimal currentTotalAmount;
+
+	//原价
+	private BigDecimal originalTotalAmount;
+
+	public BigDecimal getCurrentTotalAmount() {
+		return currentTotalAmount;
+	}
+
+	public void setCurrentTotalAmount(BigDecimal currentTotalAmount) {
+		this.currentTotalAmount = currentTotalAmount;
+	}
+
+	public BigDecimal getOriginalTotalAmount() {
+		return originalTotalAmount;
+	}
+
+	public void setOriginalTotalAmount(BigDecimal originalTotalAmount) {
+		this.originalTotalAmount = originalTotalAmount;
+	}
+
 	public Boolean getMemberOptionalFlag() {
 		return memberOptionalFlag;
 	}

+ 1 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/MusicGroupPaymentCalenderCourseSettings.java

@@ -35,7 +35,7 @@ public class MusicGroupPaymentCalenderCourseSettings extends BaseEntity {
 	private java.math.BigDecimal courseCurrentPrice;
 	
 	/** 是否学生可选 */
-	private boolean isStudentOptional = false;
+	private boolean isStudentOptional = true;
 	
 	/**  */
 	private java.util.Date createTime;

+ 99 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/TenantAssetsInfo.java

@@ -0,0 +1,99 @@
+package com.ym.mec.biz.dal.entity;
+
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import com.baomidou.mybatisplus.annotation.TableId;
+
+import java.io.Serializable;
+
+/**
+ * 机构资产信息(TenantAssetsInfo)表实体类
+ *
+ * @author hgw
+ * @since 2021-12-22 14:27:02
+ */
+@ApiModel(value = "tenant_assets_info-机构资产信息")
+public class TenantAssetsInfo implements Serializable {
+    @TableId(value = "id_", type = IdType.AUTO)
+    @ApiModelProperty(value = "主键")
+    private Integer id;
+
+    @TableField("tenant_id_")
+    @ApiModelProperty(value = "机构id")
+    private Integer tenantId;
+
+    @TableField("balance_")
+    @ApiModelProperty(value = "余额")
+    private BigDecimal balance;
+
+    @TableField("frozen_amount_")
+    @ApiModelProperty(value = "冻结金额")
+    private BigDecimal frozenAmount;
+
+    @TableField("created_time_")
+    @ApiModelProperty(value = "创建时间")
+    private Date createdTime;
+
+    @TableField("updated_time_")
+    @ApiModelProperty(value = "更新时间")
+    private Date updatedTime;
+
+    private static final long serialVersionUID = 1L;
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public Integer getTenantId() {
+        return tenantId;
+    }
+
+    public void setTenantId(Integer tenantId) {
+        this.tenantId = tenantId;
+    }
+
+    public BigDecimal getBalance() {
+        return balance;
+    }
+
+    public void setBalance(BigDecimal balance) {
+        this.balance = balance;
+    }
+
+    public BigDecimal getFrozenAmount() {
+        return frozenAmount;
+    }
+
+    public void setFrozenAmount(BigDecimal frozenAmount) {
+        this.frozenAmount = frozenAmount;
+    }
+
+    public Date getCreatedTime() {
+        return createdTime;
+    }
+
+    public void setCreatedTime(Date createdTime) {
+        this.createdTime = createdTime;
+    }
+
+    public Date getUpdatedTime() {
+        return updatedTime;
+    }
+
+    public void setUpdatedTime(Date updatedTime) {
+        this.updatedTime = updatedTime;
+    }
+
+
+}
+

+ 108 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/TenantConfigDetail.java

@@ -0,0 +1,108 @@
+package com.ym.mec.biz.dal.entity;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * TenantConfig表config字段,该字段是动态
+ * @author hgw
+ * Created by 2021-12-22
+ */
+public class TenantConfigDetail implements Serializable {
+
+    /**
+     * 会员设置-分润金额
+     */
+    private MemberConfig member_config;
+
+    /**
+     * 云教室规则
+     */
+    private CloudRoomRule cloud_room_rule;
+
+    public static class MemberConfig implements Serializable {
+        private BigDecimal month_divide;
+        private BigDecimal quarter_divide;
+        private BigDecimal half_year_divide;
+        private BigDecimal year_divide;
+
+        public BigDecimal getMonth_divide() {
+            return month_divide;
+        }
+
+        public void setMonth_divide(BigDecimal month_divide) {
+            this.month_divide = month_divide;
+        }
+
+        public BigDecimal getQuarter_divide() {
+            return quarter_divide;
+        }
+
+        public void setQuarter_divide(BigDecimal quarter_divide) {
+            this.quarter_divide = quarter_divide;
+        }
+
+        public BigDecimal getHalf_year_divide() {
+            return half_year_divide;
+        }
+
+        public void setHalf_year_divide(BigDecimal half_year_divide) {
+            this.half_year_divide = half_year_divide;
+        }
+
+        public BigDecimal getYear_divide() {
+            return year_divide;
+        }
+
+        public void setYear_divide(BigDecimal year_divide) {
+            this.year_divide = year_divide;
+        }
+    }
+
+    public static class CloudRoomRule implements Serializable {
+
+        /**
+         * 云教室人数上限(含老师)
+         */
+        private Integer cloud_room_up_limit;
+
+        /**
+         * String人数-BigDecimal每分钟扣费标准
+         */
+        private Map<String, BigDecimal> cloud_room_config;
+
+        public Integer getCloud_room_up_limit() {
+            return cloud_room_up_limit;
+        }
+
+        public void setCloud_room_up_limit(Integer cloud_room_up_limit) {
+            this.cloud_room_up_limit = cloud_room_up_limit;
+        }
+
+        public Map<String, BigDecimal> getCloud_room_config() {
+            return cloud_room_config;
+        }
+
+        public void setCloud_room_config(Map<String, BigDecimal> cloud_room_config) {
+            this.cloud_room_config = cloud_room_config;
+        }
+    }
+
+    public MemberConfig getMember_config() {
+        return member_config;
+    }
+
+    public void setMember_config(MemberConfig member_config) {
+        this.member_config = member_config;
+    }
+
+    public CloudRoomRule getCloud_room_rule() {
+        return cloud_room_rule;
+    }
+
+    public void setCloud_room_rule(CloudRoomRule cloud_room_rule) {
+        this.cloud_room_rule = cloud_room_rule;
+    }
+}

+ 12 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/TenantOrderRecord.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ym.mec.biz.dal.enums.DealStatusEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
@@ -75,6 +76,17 @@ public class TenantOrderRecord implements Serializable {
     @ApiModelProperty(value = "订单创建时间")
     private Date createdTime;
 
+    public DealStatusEnum getEnumOrderState() {
+        switch (orderState) {
+            case 0:
+                return DealStatusEnum.ING;
+            case 1:
+                return DealStatusEnum.SUCCESS;
+            default:
+                return DealStatusEnum.FAILED;
+        }
+    }
+
     private static final long serialVersionUID = 1L;
 
     public Integer getId() {

+ 2 - 2
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/VipGroupActivity.java

@@ -147,9 +147,9 @@ public class VipGroupActivity extends BaseEntity {
 	@ApiModelProperty(value = "-1:所有;0:线上;1:线下")
 	private Integer giveTeachMode = -1;
 
-	private PeriodEnum periodEnum = MONTH;
+	private PeriodEnum periodEnum;
 
-	private PeriodEnum givePeriodEnum = DAY;
+	private PeriodEnum givePeriodEnum;
 
 	private String status = "DRAFT";
 

+ 22 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/CalenderBaseServiceEnum.java

@@ -0,0 +1,22 @@
+package com.ym.mec.biz.dal.enums;
+
+import com.ym.mec.common.enums.BaseEnum;
+
+public enum CalenderBaseServiceEnum implements BaseEnum<String, CalenderBaseServiceEnum> {
+	COURSE("课程"), MEMBER("会员"), MUSIC_REPAIR("乐保"), ACTIVITY("活动");
+
+	private String code;
+
+	CalenderBaseServiceEnum(String code) {
+		this.code = code;
+	}
+
+	public void setCode(String code) {
+		this.code = code;
+	}
+
+	@Override
+	public String getCode() {
+		return code;
+	}
+}

+ 12 - 5
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/PeriodEnum.java

@@ -5,15 +5,22 @@ import com.ym.mec.common.enums.BaseEnum;
 /**
  * 周期
  */
-public enum PeriodEnum implements BaseEnum<String, PeriodEnum> {
-	DAY("日"), MONTH("月"), QUARTERLY("季度"), YEAR_HALF("半年"), YEAR("年");
+public enum PeriodEnum implements BaseEnum<Integer, PeriodEnum> {
+	DAY(1,"日"), MONTH(2,"月"), QUARTERLY(3,"季度"), YEAR_HALF(4,"半年"), YEAR(5,"年");
+
+	private Integer code;
 
 	private String msg;
 
-	PeriodEnum(String msg) {
+	PeriodEnum(Integer code,String msg) {
+		this.code = code;
 		this.msg = msg;
 	}
 
+	public void setCode(Integer code) {
+		this.code = code;
+	}
+
 	public String getMsg() {
 		return msg;
 	}
@@ -23,7 +30,7 @@ public enum PeriodEnum implements BaseEnum<String, PeriodEnum> {
 	}
 
 	@Override
-	public String getCode() {
-		return this.name();
+	public Integer getCode() {
+		return this.code;
 	}
 }

+ 4 - 3
mec-biz/src/main/java/com/ym/mec/biz/dal/page/CloudTeacherAddQueryInfo.java

@@ -1,5 +1,6 @@
 package com.ym.mec.biz.dal.page;
 
+import com.ym.mec.biz.dal.enums.PeriodEnum;
 import com.ym.mec.common.page.QueryInfo;
 import io.swagger.annotations.ApiModelProperty;
 
@@ -12,7 +13,7 @@ public class CloudTeacherAddQueryInfo extends QueryInfo {
 	private List<Integer> studentIds;
 
 	@ApiModelProperty(value = "类型 1-天, 2-月 3-季, 4-半年, 5-年")
-	private Integer addType;
+	private PeriodEnum addType;
 
 	@ApiModelProperty(value = "数量")
 	private Integer times;
@@ -25,11 +26,11 @@ public class CloudTeacherAddQueryInfo extends QueryInfo {
 		this.studentIds = studentIds;
 	}
 
-	public Integer getAddType() {
+	public PeriodEnum getAddType() {
 		return addType;
 	}
 
-	public void setAddType(Integer addType) {
+	public void setAddType(PeriodEnum addType) {
 		this.addType = addType;
 	}
 

+ 7 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/MusicGroupPaymentCalenderActivityService.java

@@ -1,6 +1,9 @@
 package com.ym.mec.biz.service;
 
 import com.ym.mec.biz.dal.dto.MusicGroupPaymentBaseCalender;
+import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalenderActivity;
+
+import java.util.List;
 
 public interface MusicGroupPaymentCalenderActivityService {
     /**
@@ -12,4 +15,8 @@ public interface MusicGroupPaymentCalenderActivityService {
     * @date 2021/12/22 15:31
     */
     void batchInsert(MusicGroupPaymentBaseCalender musicGroupPaymentBaseCalender, Long calenderId);
+
+    void delByCalenderId(Long calenderId);
+
+    List<MusicGroupPaymentCalenderActivity> findByCalenderId(Long calenderId);
 }

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

@@ -2,11 +2,16 @@ package com.ym.mec.biz.service;
 
 import com.ym.mec.biz.dal.dto.MusicGroupPaymentBaseCalender;
 import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender;
+import com.ym.mec.biz.dal.enums.CalenderBaseServiceEnum;
 
 import java.math.BigDecimal;
+import java.util.HashMap;
+import java.util.Map;
 
 public interface MusicGroupPaymentCalenderBaseService {
 
+    Map<CalenderBaseServiceEnum,MusicGroupPaymentCalenderBaseService> calenderBaseServiceMap = new HashMap<>();
+
     /**
     * @description: 缴费项目组件
      * @param baseCalender
@@ -26,11 +31,20 @@ public interface MusicGroupPaymentCalenderBaseService {
     MusicGroupPaymentCalender.PaymentCalenderStatusEnum checkComponentAmount(MusicGroupPaymentBaseCalender baseCalender);
 
     /**
-    * @description: 获取实际金额
+    * @description: 获取申请价格
      * @param baseCalender
     * @return java.math.BigDecimal
     * @author zx
     * @date 2021/12/21 23:35
     */
     BigDecimal getActualAmount(MusicGroupPaymentBaseCalender baseCalender);
+
+    /**
+    * @description: 获取原价
+     * @param baseCalender
+    * @return java.math.BigDecimal
+    * @author zx
+    * @date 2021/12/21 23:35
+    */
+    BigDecimal getOriginalAmount(MusicGroupPaymentBaseCalender baseCalender);
 }

+ 9 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/OrderPayOpsService.java

@@ -0,0 +1,9 @@
+package com.ym.mec.biz.service;
+
+import java.math.BigDecimal;
+import java.util.Map;
+
+public interface OrderPayOpsService {
+
+    Map<String, Object> executePayment(BigDecimal amount, String orderNo, String payChannel, String returnUrl, String orderSubject, String orderBody, String sign, String code, String platform) throws Exception;
+}

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

@@ -80,9 +80,20 @@ public interface StudentService extends BaseService<Integer, Student> {
     CooperationOrgan getStudentEduTeacher(Integer userId);
 
     /**
+    * @description: 根据开始时间和周期计算会员截止日期
+     * @param periodEnum
+     * @param endTime
+     * @param memberNum
+    * @return java.util.Date
+    * @author zx
+    * @date 2021/12/23 14:07
+    */
+    Date getMembershipEndTime(PeriodEnum periodEnum,Date endTime,Integer memberNum);
+
+    /**
      * 更新学员会员信息
      */
-    void updateMemberRank(CloudTeacherOrder cloudTeacherOrder, PeriodEnum periodEnum);
+    void updateMemberRank(CloudTeacherOrder cloudTeacherOrder);
     
     void updateMemberRank(Integer userId, PeriodEnum periodEnum, int times, Integer memberRankSettingId);
 

+ 19 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/TenantAssetsInfoService.java

@@ -0,0 +1,19 @@
+package com.ym.mec.biz.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ym.mec.biz.dal.entity.CourseSchedule;
+import com.ym.mec.biz.dal.entity.TenantAssetsInfo;
+
+import java.util.List;
+
+/**
+ * 机构资产信息(TenantAssetsInfo)表服务接口
+ *
+ * @author hgw
+ * @since 2021-12-22 14:27:02
+ */
+public interface TenantAssetsInfoService extends IService<TenantAssetsInfo> {
+
+    void courseDeductionRules(List<CourseSchedule> dto);
+}
+

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

@@ -23,7 +23,7 @@ public interface TenantInfoService extends IService<TenantInfo> {
 
     TenantInfo get(Integer tenantId);
 
-    Map<String, Object> pay(Integer tenantId) throws Exception;
+    Map<String, Object> tenantOpenPay(Integer tenantId) throws Exception;
 
     Msg orderNotify(Msg msg);
 

+ 0 - 9
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ActivityPlanServiceImpl.java

@@ -1,15 +1,11 @@
 package com.ym.mec.biz.service.impl;
 
 import com.alibaba.fastjson.JSON;
-import com.ym.mec.auth.api.client.SysUserFeignService;
-import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.ActivityPlanDao;
 import com.ym.mec.biz.dal.dto.ActivityPlanAddDto;
 import com.ym.mec.biz.dal.dto.SalarySettlementDto;
 import com.ym.mec.biz.dal.dto.SalarySettlementTypeDto;
 import com.ym.mec.biz.dal.entity.ActivityPlan;
-import com.ym.mec.biz.dal.entity.VipGroupActivity;
-import com.ym.mec.biz.event.source.EntityChangeEventSource;
 import com.ym.mec.biz.service.ActivityPlanService;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.exception.BizException;
@@ -20,16 +16,11 @@ import org.springframework.transaction.annotation.Transactional;
 
 import java.util.Objects;
 
-import static com.ym.mec.biz.dal.enums.SalarySettlementTypeEnum.RATIO_DISCOUNT;
-import static com.ym.mec.biz.dal.enums.SalarySettlementTypeEnum.TEACHER_DEFAULT;
-
 @Service
 public class ActivityPlanServiceImpl extends BaseServiceImpl<Integer, ActivityPlan>  implements ActivityPlanService {
 	
 	@Autowired
 	private ActivityPlanDao activityPlanDao;
-//	@Autowired
-//	private SysUserFeignService sysUserFeignService;
 
 	@Override
 	public BaseDAO<Integer, ActivityPlan> getDAO() {

+ 12 - 35
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CloudTeacherOrderServiceImpl.java

@@ -1,23 +1,27 @@
 package com.ym.mec.biz.service.impl;
 
-import java.math.BigDecimal;
-import java.util.*;
-import java.util.stream.Collectors;
-
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.ym.mec.biz.dal.dao.*;
+import com.ym.mec.biz.dal.dao.CloudTeacherDao;
+import com.ym.mec.biz.dal.dao.CloudTeacherOrderDao;
+import com.ym.mec.biz.dal.dao.SysConfigDao;
+import com.ym.mec.biz.dal.dto.CloudTeacherOrderDto;
 import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.enums.PaymentChannelEnum;
+import com.ym.mec.biz.dal.enums.PeriodEnum;
 import com.ym.mec.biz.dal.enums.TenantOrderRecordEnum;
 import com.ym.mec.biz.dal.page.CloudTeacherAddQueryInfo;
 import com.ym.mec.biz.dal.page.CloudTeacherOrderQueryInfo;
 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.IdGeneratorService;
+import com.ym.mec.common.service.impl.BaseServiceImpl;
 import com.ym.mec.thirdparty.yqpay.Msg;
 import com.ym.mec.util.collection.MapUtil;
+import com.ym.mec.util.date.DateUtil;
 import org.joda.time.LocalDateTime;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -25,12 +29,8 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import com.ym.mec.biz.dal.dto.CloudTeacherOrderDto;
-import com.ym.mec.biz.dal.enums.PeriodEnum;
-import com.ym.mec.common.dal.BaseDAO;
-import com.ym.mec.common.exception.BizException;
-import com.ym.mec.common.service.impl.BaseServiceImpl;
-import com.ym.mec.util.date.DateUtil;
+import java.math.BigDecimal;
+import java.util.*;
 
 @Service
 public class CloudTeacherOrderServiceImpl extends BaseServiceImpl<Long, CloudTeacherOrder> implements CloudTeacherOrderService {
@@ -38,8 +38,6 @@ public class CloudTeacherOrderServiceImpl extends BaseServiceImpl<Long, CloudTea
     @Autowired
     private CloudTeacherOrderDao cloudTeacherOrderDao;
     @Autowired
-    private CourseScheduleDao courseScheduleDao;
-    @Autowired
     private CloudTeacherDao cloudTeacherDao;
     @Autowired
     private StudentService studentService;
@@ -292,29 +290,8 @@ public class CloudTeacherOrderServiceImpl extends BaseServiceImpl<Long, CloudTea
         Date endTime = null;
         Date endBaseTime = null;
         
-        PeriodEnum periodEnum = PeriodEnum.MONTH;
-		switch (cloudTeacherOrder.getType()) {
-		case 1:
-			periodEnum = PeriodEnum.DAY;
-			break;
-		case 2:
-			periodEnum = PeriodEnum.MONTH;
-			break;
-		case 3:
-			periodEnum = PeriodEnum.QUARTERLY;
-			break;
-        case 4:
-            periodEnum = PeriodEnum.YEAR_HALF;
-            break;
-        case 5:
-            periodEnum = PeriodEnum.YEAR;
-            break;
-
-		default:
-			break;
-		}
         //更新student表信息
-        studentService.updateMemberRank(cloudTeacherOrder,periodEnum);
+        studentService.updateMemberRank(cloudTeacherOrder);
         
         if (cloudTeacher == null) {
             cloudTeacher = new CloudTeacher();

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

@@ -88,7 +88,7 @@ public class EmployeeServiceImpl extends BaseServiceImpl<Integer, Employee>  imp
 				employee.setId(user.getId());
 				employeeDao.insert(employee);
 				//新增用户角色
-				employeeDao.batchAddEmployeeRole(user.getId(),employee.getRoleIds(), user.getTeacherId());
+				employeeDao.batchAddEmployeeRole(user.getId(),employee.getRoleIds(), user.getTenantId());
 				employee.setUserType(user.getUserType() + ",SYSTEM");
 				teacherDao.updateUser(employee);
 				return;
@@ -102,7 +102,7 @@ public class EmployeeServiceImpl extends BaseServiceImpl<Integer, Employee>  imp
 		employee.setUserId(employee.getId());
         employeeDao.insert(employee);
 		//新增用户角色
-		employeeDao.batchAddEmployeeRole(employee.getId(),employee.getRoleIds(), user.getTeacherId());
+		employeeDao.batchAddEmployeeRole(employee.getId(),employee.getRoleIds(), employee.getTenantId());
 		//添加用户现金账户
 		sysUserCashAccountDao.insert(new SysUserCashAccount(employee.getId(),"CNY"));
 		ImResult imResult = imFeignService.register(new ImUserModel(employee.getId().toString(), employee.getUsername(),null));
@@ -112,8 +112,8 @@ public class EmployeeServiceImpl extends BaseServiceImpl<Integer, Employee>  imp
 			employee.setAvatar(user.getAvatar());
 		}
 
-		//添加到OA
-		oaUserService.addOaUser(employee);
+		//todo 添加到OA 临时注释
+//		oaUserService.addOaUser(employee);
 	}
 
 	@Override

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

@@ -6,6 +6,7 @@ import com.ym.mec.biz.dal.dto.MusicGroupPaymentBaseCalender;
 import com.ym.mec.biz.dal.entity.MemberFeeSetting;
 import com.ym.mec.biz.dal.entity.MusicGroup;
 import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender;
+import com.ym.mec.biz.dal.enums.CalenderBaseServiceEnum;
 import com.ym.mec.biz.dal.enums.PeriodEnum;
 import com.ym.mec.biz.service.MusicGroupPaymentCalenderBaseService;
 import com.ym.mec.common.exception.BizException;
@@ -18,12 +19,16 @@ import java.math.BigDecimal;
 import static com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender.PaymentCalenderStatusEnum.AUDITING;
 import static com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender.PaymentCalenderStatusEnum.NO;
 
-@Service(value = "memberCalenderService")
+@Service
 public class MemberPaymentCalenderServiceImpl implements MusicGroupPaymentCalenderBaseService {
 
     @Autowired
     private MemberFeeSettingDao memberFeeSettingDao;
 
+    public MemberPaymentCalenderServiceImpl() {
+        MusicGroupPaymentCalenderBaseService.calenderBaseServiceMap.put(CalenderBaseServiceEnum.MEMBER,this);
+    }
+
     @Override
     public void createComponent(MusicGroupPaymentBaseCalender baseCalender) {
 
@@ -57,8 +62,27 @@ public class MemberPaymentCalenderServiceImpl implements MusicGroupPaymentCalend
         return BigDecimal.ZERO;
     }
 
+    @Override
+    public BigDecimal getOriginalAmount(MusicGroupPaymentBaseCalender baseCalender) {
+        CalenderMemberDto calenderMember = baseCalender.getCalenderMember();
+        if(calenderMember != null){
+            MusicGroup musicGroup = baseCalender.getMusicGroup();
+            //会员价格是否变动
+            MemberFeeSetting memberFee = memberFeeSettingDao.findByRankIdAndOrganId(musicGroup.getOrganId(), calenderMember.getMemberRankSettingId());
+            if(memberFee == null){
+                throw new BizException("操作失败:请配置当前分部会员收费标准");
+            }
+            //获取会员总价
+            return getGroupPurchaseFee(calenderMember.getPeriodEnum(),memberFee).
+                    multiply(new BigDecimal(calenderMember.getMemberNum())).setScale(0, BigDecimal.ROUND_HALF_UP);
+        }
+        return BigDecimal.ZERO;
+    }
+
     private BigDecimal getGroupPurchaseFee(PeriodEnum periodEnum,MemberFeeSetting memberFee){
         switch (periodEnum){
+            case DAY :
+                return memberFee.getGroupPurchaseDayFee();
             case MONTH :
                 return memberFee.getGroupPurchaseMonthFee();
             case QUARTERLY :

+ 5 - 40
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MemberRankSettingServiceImpl.java

@@ -177,32 +177,27 @@ public class MemberRankSettingServiceImpl extends BaseServiceImpl<Integer, Membe
 		CloudTeacherOrder cloudTeacherOrder = new CloudTeacherOrder();
 
 		BigDecimal actualAmount = BigDecimal.ZERO;
-
+		cloudTeacherOrder.setType(memberPayParamDto.getPeriodEnum());
 		switch (memberPayParamDto.getPeriodEnum()) {
 			case DAY:
 				actualAmount = memberFeeSetting.getCurrentDayFee();
-				cloudTeacherOrder.setType(1);
 				cloudTeacherOrder.setTime(1);
 				break;
 			case MONTH:
 				actualAmount = memberFeeSetting.getCurrentMonthFee().multiply(new BigDecimal(memberPayParamDto.getBuyNum()));
-				cloudTeacherOrder.setType(2);
 				//购买月份加上赠送月份,目前只有按月购买的活动,其他的暂不处理
 				cloudTeacherOrder.setTime(memberPayParamDto.getBuyNum() + memberPayParamDto.getGiveNum());
 				break;
 			case QUARTERLY:
 				actualAmount = memberFeeSetting.getCurrentQuarterlyFee();
-				cloudTeacherOrder.setType(2);
 				cloudTeacherOrder.setTime(3);
 				break;
 			case YEAR_HALF:
 				actualAmount = memberFeeSetting.getCurrentHalfYearFee();
-				cloudTeacherOrder.setType(2);
 				cloudTeacherOrder.setTime(6);
 				break;
 			case YEAR:
 				actualAmount = memberFeeSetting.getCurrentYearFee();
-				cloudTeacherOrder.setType(3);
 				cloudTeacherOrder.setTime(1);
 				break;
 
@@ -321,49 +316,19 @@ public class MemberRankSettingServiceImpl extends BaseServiceImpl<Integer, Membe
 			cloudTeacherOrder.setStatus(2);
 			cloudTeacherOrder.setUpdateTime(nowDate);
 
-			PeriodEnum periodEnum = PeriodEnum.MONTH;
-			switch (cloudTeacherOrder.getType()) {
-			case 1:
-				periodEnum = PeriodEnum.DAY;
-				break;
-			case 2:
-				periodEnum = PeriodEnum.MONTH;
-				break;
-			case 3:
-				periodEnum = PeriodEnum.YEAR;
-				break;
-
-			default:
-				break;
-			}
+			PeriodEnum periodEnum = cloudTeacherOrder.getType();
 
 			if (student.getMemberRankSettingId() == null || nowDate.after(student.getMembershipEndTime())) {
 				cloudTeacherOrder.setStartTime(nowDate);
-				if (cloudTeacherOrder.getType() == 1) {
-					cloudTeacherOrder.setEndTime(DateUtil.addDays(nowDate, cloudTeacherOrder.getTime()));
-				} else if (cloudTeacherOrder.getType() == 2) {
-					cloudTeacherOrder.setEndTime(DateUtil.addMonths(nowDate, cloudTeacherOrder.getTime()));
-				} else if (cloudTeacherOrder.getType() == 3) {
-					cloudTeacherOrder.setEndTime(DateUtil.addYears(nowDate, cloudTeacherOrder.getTime()));
-				} else {
-					throw new BizException("不支持的周期类型");
-				}
+				cloudTeacherOrder.setEndTime(studentService.getMembershipEndTime(periodEnum,nowDate,cloudTeacherOrder.getTime()));
 			} else {
 				cloudTeacherOrder.setStartTime(DateUtil.addDays(student.getMembershipEndTime(), 1));
-				if (cloudTeacherOrder.getType() == 1) {
-					cloudTeacherOrder.setEndTime(DateUtil.addDays(student.getMembershipEndTime(), cloudTeacherOrder.getTime()));
-				} else if (cloudTeacherOrder.getType() == 2) {
-					cloudTeacherOrder.setEndTime(DateUtil.addMonths(student.getMembershipEndTime(), cloudTeacherOrder.getTime()));
-				} else if (cloudTeacherOrder.getType() == 3) {
-					cloudTeacherOrder.setEndTime(DateUtil.addYears(student.getMembershipEndTime(), cloudTeacherOrder.getTime()));
-				} else {
-					throw new BizException("不支持的周期类型");
-				}
+				cloudTeacherOrder.setEndTime(studentService.getMembershipEndTime(periodEnum,student.getMembershipEndTime(),cloudTeacherOrder.getTime()));
 			}
 
 			cloudTeacherOrderService.update(cloudTeacherOrder);
 			// 添加会员有效时长
-			studentService.updateMemberRank(cloudTeacherOrder, periodEnum);
+//			studentService.updateMemberRank(cloudTeacherOrder);
 			//云教练活动赠送优惠券
 			cloudTeacherActiveGiveCoupon(cloudTeacherOrder);
 //			// 插入交易明细

+ 36 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupPaymentCalenderActivityServiceImpl.java

@@ -2,19 +2,34 @@ package com.ym.mec.biz.service.impl;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ym.mec.biz.dal.dao.MusicGroupPaymentCalenderActivityDao;
+import com.ym.mec.biz.dal.dao.VipGroupActivityDao;
 import com.ym.mec.biz.dal.dto.MusicGroupPaymentBaseCalender;
 import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender;
 import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalenderActivity;
+import com.ym.mec.biz.dal.entity.VipGroupActivity;
+import com.ym.mec.biz.dal.enums.CalenderBaseServiceEnum;
 import com.ym.mec.biz.service.MusicGroupPaymentCalenderActivityService;
 import com.ym.mec.biz.service.MusicGroupPaymentCalenderBaseService;
+import com.ym.mec.biz.service.VipGroupActivityService;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+
 import java.math.BigDecimal;
 import java.util.List;
+import java.util.stream.Collectors;
 
 @Service
 public class MusicGroupPaymentCalenderActivityServiceImpl extends ServiceImpl<MusicGroupPaymentCalenderActivityDao, MusicGroupPaymentCalenderActivity>
         implements MusicGroupPaymentCalenderActivityService, MusicGroupPaymentCalenderBaseService {
 
+    @Autowired
+    private VipGroupActivityDao vipGroupActivityDao;
+
+    public MusicGroupPaymentCalenderActivityServiceImpl() {
+        MusicGroupPaymentCalenderBaseService.calenderBaseServiceMap.put(CalenderBaseServiceEnum.ACTIVITY,this);
+    }
+
     @Override
     public void createComponent(MusicGroupPaymentBaseCalender baseCalender) {
 
@@ -35,6 +50,17 @@ public class MusicGroupPaymentCalenderActivityServiceImpl extends ServiceImpl<Mu
     }
 
     @Override
+    public BigDecimal getOriginalAmount(MusicGroupPaymentBaseCalender baseCalender) {
+        List<MusicGroupPaymentCalenderActivity> calenderActivityList = baseCalender.getCalenderActivityList();
+        if(calenderActivityList != null && calenderActivityList.size() > 0){
+            List<Integer> collect = calenderActivityList.stream().map(e -> e.getActivityId()).collect(Collectors.toList());
+            List<VipGroupActivity> vipGroupActivities = vipGroupActivityDao.queryByIds(StringUtils.join(collect, ","));
+            return vipGroupActivities.stream().map(e->e.getMarketPrice()).reduce(BigDecimal.ZERO,BigDecimal::add);
+        }
+        return BigDecimal.ZERO;
+    }
+
+    @Override
     public void batchInsert(MusicGroupPaymentBaseCalender musicGroupPaymentBaseCalender, Long calenderId) {
         List<MusicGroupPaymentCalenderActivity> calenderActivityList = musicGroupPaymentBaseCalender.getCalenderActivityList();
         if(calenderActivityList != null && calenderActivityList.size() > 0){
@@ -42,4 +68,14 @@ public class MusicGroupPaymentCalenderActivityServiceImpl extends ServiceImpl<Mu
             baseMapper.insertBatch(calenderActivityList);
         }
     }
+
+    @Override
+    public void delByCalenderId(Long calenderId) {
+        baseMapper.delByCalenderId(calenderId);
+    }
+
+    @Override
+    public List<MusicGroupPaymentCalenderActivity> findByCalenderId(Long calenderId) {
+        return baseMapper.findByCalenderId(calenderId);
+    }
 }

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

@@ -5,6 +5,7 @@ import com.ym.mec.biz.dal.dao.MusicGroupPaymentStudentCourseDetailDao;
 import com.ym.mec.biz.dal.dao.OrganizationCourseUnitPriceSettingsDao;
 import com.ym.mec.biz.dal.dto.MusicGroupPaymentBaseCalender;
 import com.ym.mec.biz.dal.entity.*;
+import com.ym.mec.biz.dal.enums.CalenderBaseServiceEnum;
 import com.ym.mec.biz.service.MusicGroupOrganizationCourseSettingsService;
 import com.ym.mec.biz.service.MusicGroupPaymentCalenderBaseService;
 import com.ym.mec.common.exception.BizException;
@@ -39,6 +40,10 @@ public class MusicGroupPaymentCalenderCourseSettingsServiceImpl extends BaseServ
 	@Autowired
 	private MusicGroupOrganizationCourseSettingsService musicGroupOrganizationCourseSettingsService;
 
+	public MusicGroupPaymentCalenderCourseSettingsServiceImpl() {
+		MusicGroupPaymentCalenderBaseService.calenderBaseServiceMap.put(CalenderBaseServiceEnum.COURSE,this);
+	}
+
 	@Override
 	public BaseDAO<Integer, MusicGroupPaymentCalenderCourseSettings> getDAO() {
 		return musicGroupPaymentCalenderCourseSettingsDao;
@@ -97,7 +102,7 @@ public class MusicGroupPaymentCalenderCourseSettingsServiceImpl extends BaseServ
 		return musicGroupPaymentCalenderCourseSettingsDao.queryCalenderCourseSettingsByBatchNo(batchNo);
 	}
 
-	@Override
+    @Override
 	public void createComponent(MusicGroupPaymentBaseCalender baseCalender) {
 
 	}
@@ -158,4 +163,34 @@ public class MusicGroupPaymentCalenderCourseSettingsServiceImpl extends BaseServ
 		}
 		return BigDecimal.ZERO;
 	}
+
+    @Override
+    public BigDecimal getOriginalAmount(MusicGroupPaymentBaseCalender baseCalender) {
+		List<MusicGroupPaymentCalenderCourseSettings> musicGroupPaymentCalenderCourseSettingsList = baseCalender.getMusicGroupPaymentCalenderCourseSettingsList();
+		if(musicGroupPaymentCalenderCourseSettingsList != null && musicGroupPaymentCalenderCourseSettingsList.size() > 0){
+			if (baseCalender.getPaymentType() == MUSIC_APPLY || baseCalender.getPaymentType() == MUSIC_RENEW) {
+				// 查询默认课程费用
+				Integer musicGroupOrganizationCourseSettingId = baseCalender.getMusicGroupOrganizationCourseSettingId();
+				List<MusicGroupOrganizationCourseSettingsDetail> musicGroupOrganizationCourseSettingsDetails = musicGroupOrganizationCourseSettingsDetailDao.queryByMusicGroupOrganizationCourseSettingsId(musicGroupOrganizationCourseSettingId);
+				return musicGroupOrganizationCourseSettingsDetails.stream().map(e -> e.getCourseCurrentPrice()).reduce(BigDecimal.ZERO, BigDecimal::add);
+
+			} else if (baseCalender.getPaymentType() == MusicGroupPaymentCalender.PaymentType.ADD_COURSE) {
+				MusicGroup musicGroup = baseCalender.getMusicGroup();
+				BigDecimal totalAmount = BigDecimal.ZERO;
+				// 如果是课程收费,判断是否审核
+				for (MusicGroupPaymentCalenderCourseSettings courseSettings : musicGroupPaymentCalenderCourseSettingsList) {
+					OrganizationCourseUnitPriceSettings defaultUnitPrice = organizationCourseUnitPriceSettingsDao.queryByOrganIdAndCourseTypeAndChargeType(
+							musicGroup.getOrganId(), courseSettings.getCourseType(), musicGroup.getChargeTypeId());
+					if (defaultUnitPrice == null) {
+						throw new BizException("请先设置分部课程类型单价");
+					}
+					totalAmount = totalAmount.add(defaultUnitPrice.getUnitPrice().multiply(new BigDecimal(courseSettings.getCourseTotalMinuties())));
+				}
+				return totalAmount;
+			}else {
+				throw new BizException("错误的缴费类型");
+			}
+		}
+        return BigDecimal.ZERO;
+    }
 }

+ 36 - 75
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupPaymentCalenderDetailServiceImpl.java

@@ -51,16 +51,12 @@ public class MusicGroupPaymentCalenderDetailServiceImpl extends BaseServiceImpl<
 	private MusicGroupPaymentCalenderDao musicGroupPaymentCalenderDao;
 	@Autowired
 	private MusicGroupPaymentCalenderService musicGroupPaymentCalenderService;
-	
 	@Autowired
 	private MusicGroupPaymentCalenderCourseSettingsDao musicGroupPaymentCalenderCourseSettingsDao;
-	
 	@Autowired
 	private MusicGroupPaymentStudentCourseDetailDao musicGroupPaymentStudentCourseDetailDao;
-
 	@Autowired
 	private MusicGroupPaymentCalenderStudentDetailDao musicGroupPaymentCalenderStudentDetailDao;
-	
 	@Autowired
 	private MusicGroupDao musicGroupDao;
 	@Autowired
@@ -77,6 +73,8 @@ public class MusicGroupPaymentCalenderDetailServiceImpl extends BaseServiceImpl<
 	private StudentService studentService;
 	@Autowired
 	private CloudTeacherOrderDao cloudTeacherOrderDao;
+	@Autowired
+	private MusicGroupPaymentCalenderActivityService musicGroupPaymentCalenderActivityService;
 
 	@Override
 	public BaseDAO<Long, MusicGroupPaymentCalenderDetail> getDAO() {
@@ -103,13 +101,7 @@ public class MusicGroupPaymentCalenderDetailServiceImpl extends BaseServiceImpl<
 		Date date = new Date();
 		MusicGroupPaymentCalender calender = musicGroupPaymentCalenderService.get(calenderDetails.get(0).getMusicGroupPaymentCalenderId());
 		MusicGroup musicGroup = musicGroupDao.get(calender.getMusicGroupId());
-		//缴费项目已结束,并且没有单独开启缴费的学员,不能修改缴费金额
-//		if(calender.getStatus() == OVER){
-//			List<MusicGroupPaymentCalenderDetail> paymentCalenderDetails = calenderDetails.stream().filter(e -> e.getOpenFlag() == YesOrNoEnum.NO).collect(Collectors.toList());
-//			if(paymentCalenderDetails != null && paymentCalenderDetails.size() > 0){
-//				throw new BizException("修改失败:存在未开启缴费的学员");
-//			}
-//		}
+
 		if(calender.getPaymentAmount().doubleValue() > 0d){
 			BigDecimal totalAmount = calender.getPaymentAmount();
 			BigDecimal subExpectAmount = expectAmount;
@@ -167,15 +159,13 @@ public class MusicGroupPaymentCalenderDetailServiceImpl extends BaseServiceImpl<
 				if(calender.getMemberRankSettingId() != null){
 					CloudTeacherOrder cloudTeacherOrder = new CloudTeacherOrder();
 					cloudTeacherOrder.setOrganId(musicGroup.getOrganId());
-					cloudTeacherOrder.setType(2);
+					cloudTeacherOrder.setType(calender.getMemberPeriod());
 					cloudTeacherOrder.setTime(calender.getMemberValidDate());
 					//只用会员价格
 					cloudTeacherOrder.setAmount(expectMemberAmount);
 					cloudTeacherOrder.setStudentId(e.getUserId());
 					cloudTeacherOrder.setLevel(calender.getMemberRankSettingId());
-					cloudTeacherOrder.setStatus(2);
-					cloudTeacherOrder.setStartTime(date);
-					cloudTeacherOrder.setEndTime(DateUtil.addMonths(date,calender.getMemberValidDate()));
+					cloudTeacherOrder.setStatus(1);
 					if(calender.getPaymentType() == MusicGroupPaymentCalender.PaymentType.ADD_STUDENT){
 						cloudTeacherOrder.setRemark("进行中乐团加学生,缴费金额改为0元");
 					}else {
@@ -183,7 +173,7 @@ public class MusicGroupPaymentCalenderDetailServiceImpl extends BaseServiceImpl<
 					}
 					cloudTeacherOrder.setMusicGroupId(calender.getMusicGroupId());
 					cloudTeacherOrderDao.insert(cloudTeacherOrder);
-					studentService.updateMemberRank(cloudTeacherOrder,PeriodEnum.MONTH);
+//					studentService.updateMemberRank(cloudTeacherOrder);
 				}
 				calender.setActualNum((calender.getActualNum()==null?0:calender.getActualNum()) + 1);
 				e.setPaymentStatus(PAID_COMPLETED);
@@ -469,11 +459,8 @@ public class MusicGroupPaymentCalenderDetailServiceImpl extends BaseServiceImpl<
 				}
 			}
 		}
-		List<MusicGroupPaymentStudentCourseDetail> musicGroupPaymentStudentCourseDetailList = new ArrayList<MusicGroupPaymentStudentCourseDetail>();
-		
-		Long musicGroupPaymentCalenderId = null;
 		for(MusicGroupPaymentCalender musicGroupPaymentCalender : musicGroupPaymentCalenderList){
-			musicGroupPaymentCalenderId = musicGroupPaymentCalender.getId();
+			Long musicGroupPaymentCalenderId = musicGroupPaymentCalender.getId();
 			
 			if(musicGroupPaymentCalender.getPaymentType() == MusicGroupPaymentCalender.PaymentType.MUSIC_APPLY){
 				throw new BizException("操作失败:报名缴费项不允许添加学员");
@@ -482,31 +469,15 @@ public class MusicGroupPaymentCalenderDetailServiceImpl extends BaseServiceImpl<
 					|| musicGroupPaymentCalender.getStatus() == PaymentCalenderStatusEnum.REJECT) {
 				throw new BizException("当前缴费状态不能添加学生");
 			}
-			
 			//判断学生是否已存在
 			Set<Integer> userList = musicGroupPaymentCalenderDetailDao.queryStudentIds(musicGroupPaymentCalenderId);
-
 			if(Collections.disjoint(userList, userIdList) == false){
 				throw new BizException("操作失败:包含已存在的学员");
 			}
 			
-			List<MusicGroupPaymentCalenderCourseSettings> courseSettingsList = musicGroupPaymentCalenderCourseSettingsDao.getWithPaymentCalender(musicGroupPaymentCalenderId);
-			
-			BigDecimal expectAmount = BigDecimal.ZERO;
-			BigDecimal expectMemberAmount = musicGroupPaymentCalender.getMemberPaymentAmount();
-
-			if (musicGroupPaymentCalender.getPayUserType() == STUDENT) {
-				for (MusicGroupPaymentCalenderCourseSettings courseSettings : courseSettingsList) {
-					// 剔除可选课程
-					if (courseSettings.getIsStudentOptional() == false) {
-						expectAmount = expectAmount.add(courseSettings.getCourseCurrentPrice());
-					}
-				}
-			}
-			
 			Date date = new Date();
 			MusicGroupPaymentCalenderDetail musicGroupPaymentCalenderDetail = null;
-			Map<Integer,MusicGroupPaymentCalenderDetail> userMap = new HashMap<Integer, MusicGroupPaymentCalenderDetail>();
+			Map<Integer,Long> userMap = new HashMap<>();
 			List<MusicGroupPaymentCalenderDetail> musicGroupPaymentCalenderDetailList = new ArrayList<MusicGroupPaymentCalenderDetail>();
 			//创建缴费明细
 			MusicGroup musicGroup = musicGroupDao.get(musicGroupId);
@@ -514,9 +485,7 @@ public class MusicGroupPaymentCalenderDetailServiceImpl extends BaseServiceImpl<
 				musicGroupPaymentCalenderDetail = new MusicGroupPaymentCalenderDetail();
 				musicGroupPaymentCalenderDetail.setMusicGroupPaymentCalenderId(musicGroupPaymentCalenderId);
 				musicGroupPaymentCalenderDetail.setCreateTime(date);
-				musicGroupPaymentCalenderDetail.setExpectAmount(expectAmount);
-				musicGroupPaymentCalenderDetail.setExpectMemberAmount(expectMemberAmount);
-				if (expectAmount.doubleValue() == 0d && expectMemberAmount.doubleValue() == 0d) {
+				if (musicGroupPaymentCalender.getPaymentAmount().compareTo(BigDecimal.ZERO) == 0) {
 					musicGroupPaymentCalenderDetail.setPaymentStatus(PaymentStatus.PAID_COMPLETED);
 				} else {
 					musicGroupPaymentCalenderDetail.setPaymentStatus(PaymentStatus.NON_PAYMENT);
@@ -526,70 +495,62 @@ public class MusicGroupPaymentCalenderDetailServiceImpl extends BaseServiceImpl<
 				musicGroupPaymentCalenderDetail.setStartPaymentDate(musicGroupPaymentCalender.getStartPaymentDate());
 				musicGroupPaymentCalenderDetail.setDeadlinePaymentDate(musicGroupPaymentCalender.getDeadlinePaymentDate());
 				musicGroupPaymentCalenderDetail.setResponsibleUserId(musicGroupPaymentCalender.getOperator());
-				
+
 				musicGroupPaymentCalenderDetailList.add(musicGroupPaymentCalenderDetail);
-				if (expectAmount.doubleValue() == 0d && expectMemberAmount.doubleValue() == 0d) {
+				if (musicGroupPaymentCalender.getPaymentAmount().compareTo(BigDecimal.ZERO) == 0) {
 					// 添加会员有效时长
 					if(musicGroupPaymentCalender.getMemberRankSettingId() != null){
 						CloudTeacherOrder cloudTeacherOrder = new CloudTeacherOrder();
 						cloudTeacherOrder.setOrganId(musicGroup.getOrganId());
-						cloudTeacherOrder.setType(2);
+						cloudTeacherOrder.setType(musicGroupPaymentCalender.getMemberPeriod());
 						cloudTeacherOrder.setTime(musicGroupPaymentCalender.getMemberValidDate());
-						cloudTeacherOrder.setAmount(expectMemberAmount);
+						cloudTeacherOrder.setAmount(BigDecimal.ZERO);
 						cloudTeacherOrder.setStudentId(studentId);
 						cloudTeacherOrder.setLevel(musicGroupPaymentCalender.getMemberRankSettingId());
-						cloudTeacherOrder.setStatus(2);
-						cloudTeacherOrder.setStartTime(date);
-						cloudTeacherOrder.setEndTime(DateUtil.addMonths(date,musicGroupPaymentCalender.getMemberValidDate()));
+						cloudTeacherOrder.setStatus(1);
 						cloudTeacherOrder.setRemark("缴费项目0元新增学员");
 						cloudTeacherOrder.setMusicGroupId(musicGroupId);
 						cloudTeacherOrderDao.insert(cloudTeacherOrder);
-						studentService.updateMemberRank(cloudTeacherOrder,PeriodEnum.MONTH);
 					}
 				}
 			}
 
 			if (musicGroupPaymentCalenderDetailList.size() > 0) {
 				musicGroupPaymentCalenderDetailDao.batchInsert(musicGroupPaymentCalenderDetailList);
-				for(MusicGroupPaymentCalenderDetail cd : musicGroupPaymentCalenderDetailList){
-					userMap.put(cd.getUserId(), cd);
-				}
+				musicGroupPaymentCalenderDetailList.stream().map(e-> userMap.put(e.getUserId(),e.getId()));
 			}
 			//更新预计缴费人数
 			musicGroupPaymentCalender.setExpectNum(musicGroupPaymentCalender.getExpectNum() + userIdList.size());
 			musicGroupPaymentCalender.setUpdateTime(date);
-			if (expectAmount.doubleValue() == 0d && expectMemberAmount.doubleValue() == 0d) {
+			if (musicGroupPaymentCalender.getPaymentAmount().compareTo(BigDecimal.ZERO) == 0) {
 				musicGroupPaymentCalender.setActualNum(musicGroupPaymentCalender.getActualNum() + userIdList.size());
 			}
 			musicGroupPaymentCalenderService.update(musicGroupPaymentCalender);
-			
-			MusicGroupPaymentStudentCourseDetail musicGroupPaymentStudentCourseDetail = null;
+
 			//创建学生课排课分钟数
-			for(Integer studentId : userIdList){
-				for(MusicGroupPaymentCalenderCourseSettings courseSettings : courseSettingsList){
-					if (courseSettings.getIsStudentOptional() == true || courseSettings.getCourseTotalMinuties() == null || courseSettings.getCourseTotalMinuties() == 0) {
-						continue;
+			List<MusicGroupPaymentCalenderCourseSettings> courseSettingsList = musicGroupPaymentCalenderCourseSettingsDao.getWithPaymentCalender(musicGroupPaymentCalenderId);
+			if(courseSettingsList != null && courseSettingsList.size() > 0){
+				List<MusicGroupPaymentStudentCourseDetail> musicGroupPaymentStudentCourseDetailList = new ArrayList<>();
+				MusicGroupPaymentStudentCourseDetail musicGroupPaymentStudentCourseDetail = null;
+				for(Integer studentId : userIdList){
+					for(MusicGroupPaymentCalenderCourseSettings courseSettings : courseSettingsList){
+						musicGroupPaymentStudentCourseDetail = new MusicGroupPaymentStudentCourseDetail();
+						musicGroupPaymentStudentCourseDetail.setCourseType(courseSettings.getCourseType());
+						musicGroupPaymentStudentCourseDetail.setCreateTime(date);
+						musicGroupPaymentStudentCourseDetail.setMusicGroupPaymentCalenderId(musicGroupPaymentCalenderId);
+						musicGroupPaymentStudentCourseDetail.setMusicGroupPaymentCalenderDetailId(userMap.get(studentId));
+						musicGroupPaymentStudentCourseDetail.setTotalCourseMinutes(courseSettings.getCourseTotalMinuties());
+						musicGroupPaymentStudentCourseDetail.setCourseOriginalPrice(courseSettings.getCourseOriginalPrice());
+						musicGroupPaymentStudentCourseDetail.setCourseCurrentPrice(courseSettings.getCourseCurrentPrice());
+						musicGroupPaymentStudentCourseDetail.setUpdateTime(date);
+						musicGroupPaymentStudentCourseDetail.setUsedCourseMinutes(0);
+						musicGroupPaymentStudentCourseDetail.setUserId(studentId);
+						musicGroupPaymentStudentCourseDetailList.add(musicGroupPaymentStudentCourseDetail);
 					}
-					musicGroupPaymentStudentCourseDetail = new MusicGroupPaymentStudentCourseDetail();
-					musicGroupPaymentStudentCourseDetail.setCourseType(courseSettings.getCourseType());
-					musicGroupPaymentStudentCourseDetail.setCreateTime(date);
-					musicGroupPaymentStudentCourseDetail.setMusicGroupPaymentCalenderId(musicGroupPaymentCalenderId);
-					musicGroupPaymentStudentCourseDetail.setMusicGroupPaymentCalenderDetailId(userMap.get(studentId).getId());
-					musicGroupPaymentStudentCourseDetail.setTotalCourseMinutes(courseSettings.getCourseTotalMinuties());
-					musicGroupPaymentStudentCourseDetail.setCourseOriginalPrice(courseSettings.getCourseOriginalPrice());
-					musicGroupPaymentStudentCourseDetail.setCourseCurrentPrice(courseSettings.getCourseCurrentPrice());
-					musicGroupPaymentStudentCourseDetail.setUpdateTime(date);
-					musicGroupPaymentStudentCourseDetail.setUsedCourseMinutes(0);
-					musicGroupPaymentStudentCourseDetail.setUserId(studentId);
-					
-					musicGroupPaymentStudentCourseDetailList.add(musicGroupPaymentStudentCourseDetail);
 				}
+				musicGroupPaymentStudentCourseDetailDao.batchInsert(musicGroupPaymentStudentCourseDetailList);
 			}
 		}
-		
-		if(musicGroupPaymentStudentCourseDetailList.size() > 0){
-			musicGroupPaymentStudentCourseDetailDao.batchInsert(musicGroupPaymentStudentCourseDetailList);
-		}
 		//给学员推送缴费通知
 		for (MusicGroupPaymentCalender musicGroupPaymentCalender : musicGroupPaymentCalenderList) {
 			if (musicGroupPaymentCalender.getPayUserType() == STUDENT && musicGroupPaymentCalender.getStatus() == PaymentCalenderStatusEnum.OPEN) {

+ 53 - 72
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupPaymentCalenderServiceImpl.java

@@ -13,6 +13,7 @@ import static com.ym.mec.biz.dal.enums.PaymentStatusEnum.YES;
 import java.math.BigDecimal;
 import java.util.*;
 import java.util.Map.Entry;
+import java.util.function.Consumer;
 import java.util.stream.Collectors;
 
 import com.alibaba.fastjson.JSONObject;
@@ -68,8 +69,6 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
 	@Autowired
 	private MusicGroupOrganizationCourseSettingsDetailDao musicGroupOrganizationCourseSettingsDetailDao;
 	@Autowired
-	private MusicGroupOrganizationCourseSettingsService musicGroupOrganizationCourseSettingsService;
-	@Autowired
 	private OrganizationCourseUnitPriceSettingsDao organizationCourseUnitPriceSettingsDao;
 	@Autowired
 	private MusicGroupPaymentStudentCourseDetailDao musicGroupPaymentStudentCourseDetailDao;
@@ -129,10 +128,6 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
 	private CloudTeacherOrderDao cloudTeacherOrderDao;
 	@Autowired
 	private MusicGroupPaymentCalenderActivityService musicGroupPaymentCalenderActivityService;
-	@Resource(name = "musicRepairService")
-	private MusicGroupPaymentCalenderBaseService musicRepairService;
-	@Resource(name = "memberCalenderService")
-	private MusicGroupPaymentCalenderBaseService memberCalenderService;
 
 	@Override
 	public BaseDAO<Long, MusicGroupPaymentCalender> getDAO() {
@@ -550,10 +545,10 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
 			throw new BizException("请登录");
 		}
 		// 所有缴费项目已完成排课才能创建下一个缴费项目
-//		String orignBatchNo = musicGroupPaymentStudentCourseDetailDao.getUnUseBatchNoWithStudentAndCourseTypeAndCourseMinutes(musicGroupId, null, null,null);
-//		if (StringUtils.isNoneBlank(orignBatchNo)) {
-//			throw new BizException("当前乐团存在未排课的缴费项目,请先完成排课再操作");
-//		}
+		String orignBatchNo = musicGroupPaymentStudentCourseDetailDao.getUnUseBatchNoWithStudentAndCourseTypeAndCourseMinutes(musicGroupId, null, null,null);
+		if (StringUtils.isNoneBlank(orignBatchNo)) {
+			throw new BizException("当前乐团存在未排课的缴费项目,请先完成排课再操作");
+		}
 
 		// 不是进行中,只能创建一次缴费
 		if (musicGroup.getStatus() != MusicGroupStatusEnum.PROGRESS) {
@@ -562,28 +557,52 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
 				throw new BizException("创建失败,已经存在缴费信息");
 			}
 		}
+		if(musicGroup.getStatus() == MusicGroupStatusEnum.PRE_BUILD_FEE){
+			musicGroupPaymentBaseCalender.setPaymentType(MUSIC_APPLY);
+		}else {
+			if(musicGroupPaymentBaseCalender.getMusicGroupOrganizationCourseSettingId() != null){
+				musicGroupPaymentBaseCalender.setPaymentType(MUSIC_RENEW);
+			}else {
+				musicGroupPaymentBaseCalender.setPaymentType(ADD_COURSE);
+			}
+		}
 		musicGroupPaymentBaseCalender.setMusicGroup(musicGroup);
 
-		PaymentCalenderStatusEnum status = PaymentCalenderStatusEnum.NO;
+		//检测缴费项目是否有费用变更
+		Map<CalenderBaseServiceEnum, MusicGroupPaymentCalenderBaseService> calenderBaseServiceMap = MusicGroupPaymentCalenderBaseService.calenderBaseServiceMap;
 
-		Date date = new Date();
-		String batchNo = idGeneratorService.generatorId() + "";
+		//计算缴费项目总金额
+		BigDecimal courseActualAmount = ((MusicGroupPaymentCalenderCourseSettingsServiceImpl) musicGroupPaymentCalenderCourseSettingsService).getActualAmount(musicGroupPaymentBaseCalender);
+		BigDecimal currentTotalAmount = calenderBaseServiceMap.get(CalenderBaseServiceEnum.MEMBER).getActualAmount(musicGroupPaymentBaseCalender);
+		currentTotalAmount = currentTotalAmount.add(courseActualAmount);
+		currentTotalAmount = currentTotalAmount.add(calenderBaseServiceMap.get(CalenderBaseServiceEnum.MUSIC_REPAIR).getActualAmount(musicGroupPaymentBaseCalender));
+		currentTotalAmount = currentTotalAmount.add(calenderBaseServiceMap.get(CalenderBaseServiceEnum.ACTIVITY).getActualAmount(musicGroupPaymentBaseCalender));
 
-		BigDecimal originalMemberPaymentAmount = BigDecimal.ZERO;
+		//计算缴费项目原价
+		BigDecimal memberOriginalAmount = calenderBaseServiceMap.get(CalenderBaseServiceEnum.MEMBER).getOriginalAmount(musicGroupPaymentBaseCalender);
+		BigDecimal originalTotalAmount = memberOriginalAmount;
+		originalTotalAmount = originalTotalAmount.add(((MusicGroupPaymentCalenderCourseSettingsServiceImpl)musicGroupPaymentCalenderCourseSettingsService).getOriginalAmount(musicGroupPaymentBaseCalender));
+		originalTotalAmount = originalTotalAmount.add(calenderBaseServiceMap.get(CalenderBaseServiceEnum.MUSIC_REPAIR).getOriginalAmount(musicGroupPaymentBaseCalender));
+		originalTotalAmount = originalTotalAmount.add(calenderBaseServiceMap.get(CalenderBaseServiceEnum.ACTIVITY).getOriginalAmount(musicGroupPaymentBaseCalender));
+
+		PaymentCalenderStatusEnum status;
 		if (musicGroupPaymentBaseCalender.getPayUserType() == SCHOOL) {
 			status = AUDITING;
 		} else {
-			status = memberCalenderService.checkComponentAmount(musicGroupPaymentBaseCalender);
-			if(status != AUDITING){
-				status = ((MusicGroupPaymentCalenderCourseSettingsServiceImpl)musicGroupPaymentCalenderCourseSettingsService).checkComponentAmount(musicGroupPaymentBaseCalender);
-			}
-			if(status != AUDITING){
-				status = musicRepairService.checkComponentAmount(musicGroupPaymentBaseCalender);
-			}
+			int compare = currentTotalAmount.setScale(0, BigDecimal.ROUND_HALF_UP).compareTo(originalTotalAmount.setScale(0, BigDecimal.ROUND_HALF_UP));
+			status = compare == 0?NO:AUDITING;
+//			status = calenderBaseServiceMap.get(CalenderBaseServiceEnum.MEMBER).checkComponentAmount(musicGroupPaymentBaseCalender);
+//			if(status != AUDITING){
+//				status = calenderBaseServiceMap.get(CalenderBaseServiceEnum.COURSE).checkComponentAmount(musicGroupPaymentBaseCalender);
+//			}
+//			if(status != AUDITING){
+//				status = calenderBaseServiceMap.get(CalenderBaseServiceEnum.MUSIC_REPAIR).checkComponentAmount(musicGroupPaymentBaseCalender);
+//			}
 		}
 
+		Date date = new Date();
+
 		MusicGroupPaymentCalender musicGroupPaymentCalender = new MusicGroupPaymentCalender();
-		musicGroupPaymentCalender.setOriginalMemberPaymentAmount(originalMemberPaymentAmount);
 		musicGroupPaymentCalender.setDeadlinePaymentDate(musicGroupPaymentBaseCalender.getDeadlinePaymentDate());
 		musicGroupPaymentCalender.setMemo(musicGroupPaymentBaseCalender.getMemo());
 		musicGroupPaymentCalender.setMusicGroupId(musicGroupId);
@@ -593,15 +612,10 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
 		musicGroupPaymentCalender.setOperator(sysUser.getId());
 		musicGroupPaymentCalender.setCreateTime(date);
 		musicGroupPaymentCalender.setUpdateTime(date);
-		musicGroupPaymentCalender.setStatus(status);
 		musicGroupPaymentCalender.setPaymentType(musicGroupPaymentBaseCalender.getPaymentType());
-
-		BigDecimal totalPaymentAmount = BigDecimal.ZERO;
-		totalPaymentAmount = totalPaymentAmount.add(memberCalenderService.getActualAmount(musicGroupPaymentBaseCalender));
-		totalPaymentAmount = totalPaymentAmount.add(((MusicGroupPaymentCalenderCourseSettingsServiceImpl)musicGroupPaymentCalenderCourseSettingsService).getActualAmount(musicGroupPaymentBaseCalender));
-		totalPaymentAmount = totalPaymentAmount.add(musicRepairService.getActualAmount(musicGroupPaymentBaseCalender));
-		totalPaymentAmount = totalPaymentAmount.add(((MusicGroupPaymentCalenderActivityServiceImpl)musicGroupPaymentCalenderActivityService).getActualAmount(musicGroupPaymentBaseCalender));
-		musicGroupPaymentCalender.setPaymentAmount(totalPaymentAmount);
+		musicGroupPaymentCalender.setPaymentAmount(courseActualAmount);
+		musicGroupPaymentCalender.setCurrentTotalAmount(currentTotalAmount);
+		musicGroupPaymentCalender.setOriginalTotalAmount(originalTotalAmount);
 
 		//会员缴费信息
 		CalenderMemberDto calenderMember = musicGroupPaymentBaseCalender.getCalenderMember();
@@ -612,6 +626,7 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
 			musicGroupPaymentCalender.setMemberValidDate(calenderMember.getMemberNum());
 			musicGroupPaymentCalender.setMemberPeriod(calenderMember.getPeriodEnum());
 			musicGroupPaymentCalender.setMemberOptionalFlag(calenderMember.getOptionalFlag());
+			musicGroupPaymentCalender.setOriginalMemberPaymentAmount(memberOriginalAmount);
 		}
 		//乐保缴费信息
 		MusicRepairDto musicRepair = musicGroupPaymentBaseCalender.getMusicRepair();
@@ -620,37 +635,7 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
 			musicGroupPaymentCalender.setMusicRepairActualPrice(musicRepair.getActualAmount());
 			musicGroupPaymentCalender.setMusicRepairOptionalFlag(musicRepair.getOptionalFlag());
 		}
-
-//		BigDecimal totalPaymentAmount = musicGroupPaymentCalenderDto.getMasterTotalPrice();
-//		if(musicGroupPaymentCalenderCourseSettingsList != null){
-//			List<MusicGroupPaymentCalenderCourseSettings> newCSList = new ArrayList<MusicGroupPaymentCalenderCourseSettings>(
-//					musicGroupPaymentCalenderCourseSettingsList.size());
-//			for (MusicGroupPaymentCalenderCourseSettings pccs : musicGroupPaymentCalenderCourseSettingsList) {
-//				MusicGroupPaymentCalenderCourseSettings tempPccs = new MusicGroupPaymentCalenderCourseSettings();
-//				try {
-//					BeanUtils.copyProperties(tempPccs, pccs);
-//				} catch (Exception e) {
-//					throw new BizException("克隆对象出错", e);
-//				}
-//				if (pccs.getIsStudentOptional()) {
-//					tempPccs.setCourseCurrentPrice(pccs.getCourseCurrentPrice());
-//					tempPccs.setCourseOriginalPrice(pccs.getCourseOriginalPrice());
-//					tempPccs.setCourseTotalMinuties(pccs.getCourseTotalMinuties());
-//				} else {
-//					tempPccs.setCourseCurrentPrice(BigDecimal.ZERO);
-//					tempPccs.setCourseOriginalPrice(BigDecimal.ZERO);
-//					tempPccs.setCourseTotalMinuties(pccs.getCourseTotalMinuties());
-//				}
-//				totalPaymentAmount = totalPaymentAmount.add(tempPccs.getCourseCurrentPrice());
-//				newCSList.add(tempPccs);
-//			}
-//			musicGroupPaymentCalender.setMusicGroupPaymentCalenderCourseSettingsList(newCSList);
-//		}
-
-		//缴费截止日期默认三天后
-//		if (musicGroupPaymentCalender.getDeadlinePaymentDate() == null && payUserType == PayUserType.STUDENT) {
-//			musicGroupPaymentCalender.setDeadlinePaymentDate(DateUtil.addDays(musicGroupPaymentCalender.getStartPaymentDate(), 3));
-//		}
+		musicGroupPaymentCalender.setStatus(status);
 
 		if (musicGroupPaymentCalender.getStatus() != AUDITING) {
 			if (date.after(musicGroupPaymentCalender.getStartPaymentDate())) {
@@ -663,10 +648,12 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
 		}
 
 		// 设置批次号
+		String batchNo = idGeneratorService.generatorId() + "";
 		musicGroupPaymentCalender.setBatchNo(batchNo);
 		musicGroupPaymentCalenderDao.insert(musicGroupPaymentCalender);
 
 		//课程费用列表
+		musicGroupPaymentCalender.setMusicGroupPaymentCalenderCourseSettingsList(musicGroupPaymentBaseCalender.getMusicGroupPaymentCalenderCourseSettingsList());
 		musicGroupPaymentCalenderCourseSettingsService.batchInsert(musicGroupPaymentCalender);
 		//活动费用列表
 		musicGroupPaymentCalenderActivityService.batchInsert(musicGroupPaymentBaseCalender,musicGroupPaymentCalender.getId());
@@ -1178,18 +1165,16 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
 						CloudTeacherOrder cloudTeacherOrder = new CloudTeacherOrder();
 						cloudTeacherOrder.setLevel(musicGroupPaymentCalender.getMemberRankSettingId());
 						cloudTeacherOrder.setOrganId(musicGroup.getOrganId());
-						cloudTeacherOrder.setType(2);
+						cloudTeacherOrder.setType(musicGroupPaymentCalender.getMemberPeriod());
 						cloudTeacherOrder.setStudentId(Integer.parseInt(studentId));
 						cloudTeacherOrder.setOrderId(musicGroup.getOrganId().longValue());
 						cloudTeacherOrder.setTime(musicGroupPaymentCalender.getMemberValidDate());
 						cloudTeacherOrder.setAmount(expectMemberAmount);
-						cloudTeacherOrder.setStatus(2);
-						cloudTeacherOrder.setStartTime(date);
-						cloudTeacherOrder.setEndTime(DateUtil.addMonths(date,musicGroupPaymentCalender.getMemberValidDate()));
+						cloudTeacherOrder.setStatus(1);
 						cloudTeacherOrder.setRemark("进行中乐团0元加学生");
 						cloudTeacherOrder.setMusicGroupId(musicGroup.getId());
 						cloudTeacherOrderDao.insert(cloudTeacherOrder);
-						studentService.updateMemberRank(cloudTeacherOrder,PeriodEnum.MONTH);
+//						studentService.updateMemberRank(cloudTeacherOrder);
 					}
 					MusicGroupStudentFee musicGroupStudentFee = musicGroupStudentFeeDao.findByUser(Integer.parseInt(studentId), musicGroupPaymentCalender.getMusicGroupId());
 					if (musicGroupStudentFee != null) {
@@ -1705,16 +1690,12 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
 		if (calender == null) {
 			throw new BizException("缴费信息不存在");
 		}
-		
+
 		//缴费项目中没有学生即可删除缴费项目
 		List<MusicGroupPaymentCalenderDetail> musicGroupPaymentCalenderDetailList = musicGroupPaymentCalenderDetailDao.queryByCalenderId(id, null);
 		if (musicGroupPaymentCalenderDetailList != null && musicGroupPaymentCalenderDetailList.size() > 0) {
 			throw new BizException("缴费项目中已存在学员,不能删除");
 		}
-//		if (calender.getStatus() != PaymentCalenderStatusEnum.AUDITING && calender.getStatus() != PaymentCalenderStatusEnum.NO
-//				&& calender.getStatus() != PaymentCalenderStatusEnum.REJECT && calender.getStatus() != DRAFT) {
-//			throw new BizException("删除失败,{} 的缴费项目不允许删除",calender.getStatus().getDesc());
-//		}
 		MusicGroupStudentClassAdjust byBatchNo = musicGroupStudentClassAdjustDao.findByBatchNo(calender.getBatchNo());
 		if(byBatchNo != null){
 			throw new BizException("删除失败,班级调整的缴费项目不允许删除");
@@ -1732,7 +1713,7 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
 		musicGroupPaymentCalenderDao.delete(id);
 		musicGroupPaymentCalenderDetailDao.deleteByCalenderId(id);
 		musicGroupPaymentStudentCourseDetailDao.deleteByMusicGroupPaymentCalenderId(id);
-		
+		musicGroupPaymentCalenderActivityService.delByCalenderId(id);
 		List<Long> calenderIds = new ArrayList<Long>();
 		calenderIds.add(id);
 		musicGroupPaymentCalenderCourseSettingsService.deleteByMusicGroupPaymentCalenderId(calenderIds);

+ 12 - 45
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java

@@ -787,7 +787,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
             //创建订单
             cloudTeacherOrder = new CloudTeacherOrder();
 
-    		cloudTeacherOrder.setType(2);//月
+    		cloudTeacherOrder.setType(PeriodEnum.MONTH);//月
 			cloudTeacherOrder.setTime(musicGroupRegCalender.getMemberValidDate() == null ? 6 : musicGroupRegCalender.getMemberValidDate());
     		
     		cloudTeacherOrder.setOrganId(musicGroup.getOrganId());
@@ -1072,7 +1072,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
             //创建订单
             cloudTeacherOrder = new CloudTeacherOrder();
 
-    		cloudTeacherOrder.setType(2);//月
+    		cloudTeacherOrder.setType(PeriodEnum.MONTH);//月
 			cloudTeacherOrder.setTime(musicGroupRegCalender.getMemberValidDate() == null ? 6 : musicGroupRegCalender.getMemberValidDate());
     		
     		cloudTeacherOrder.setOrganId(musicGroup.getOrganId());
@@ -3036,7 +3036,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
             //创建订单
             cloudTeacherOrder = new CloudTeacherOrder();
 
-    		cloudTeacherOrder.setType(2);//月
+    		cloudTeacherOrder.setType(PeriodEnum.MONTH);//月
 			cloudTeacherOrder.setTime(calender.getMemberValidDate());
     		cloudTeacherOrder.setOrganId(organId);
     		cloudTeacherOrder.setStudentId(studentRegistration.getUserId());
@@ -3166,53 +3166,20 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 				if (student == null) {
 					throw new BizException("学员信息不存在");
 				}
-				cloudTeacherOrder.setStatus(2);
+				cloudTeacherOrder.setStatus(1);
 				cloudTeacherOrder.setUpdateTime(date);
-
-				PeriodEnum periodEnum = PeriodEnum.MONTH;
-				switch (cloudTeacherOrder.getType()) {
-				case 1:
-					periodEnum = PeriodEnum.DAY;
-					break;
-				case 2:
-					periodEnum = PeriodEnum.MONTH;
-					break;
-				case 3:
-					periodEnum = PeriodEnum.YEAR;
-					break;
-
-				default:
-					break;
-				}
-
-				if (student.getMemberRankSettingId() == null || date.after(student.getMembershipEndTime())) {
-					cloudTeacherOrder.setStartTime(date);
-					if (cloudTeacherOrder.getType() == 1) {
-						cloudTeacherOrder.setEndTime(DateUtil.addDays(date, cloudTeacherOrder.getTime()));
-					} else if (cloudTeacherOrder.getType() == 2) {
-						cloudTeacherOrder.setEndTime(DateUtil.addMonths(date, cloudTeacherOrder.getTime()));
-					} else if (cloudTeacherOrder.getType() == 3) {
-						cloudTeacherOrder.setEndTime(DateUtil.addYears(date, cloudTeacherOrder.getTime()));
-					} else {
-						throw new BizException("不支持的周期类型");
-					}
-				} else {
-					cloudTeacherOrder.setStartTime(DateUtil.addDays(student.getMembershipEndTime(), 1));
-					if (cloudTeacherOrder.getType() == 1) {
-						cloudTeacherOrder.setEndTime(DateUtil.addDays(student.getMembershipEndTime(), cloudTeacherOrder.getTime()));
-					} else if (cloudTeacherOrder.getType() == 2) {
-						cloudTeacherOrder.setEndTime(DateUtil.addMonths(student.getMembershipEndTime(), cloudTeacherOrder.getTime()));
-					} else if (cloudTeacherOrder.getType() == 3) {
-						cloudTeacherOrder.setEndTime(DateUtil.addYears(student.getMembershipEndTime(), cloudTeacherOrder.getTime()));
-					} else {
-						throw new BizException("不支持的周期类型");
-					}
-				}
+//				if (student.getMemberRankSettingId() == null || date.after(student.getMembershipEndTime())) {
+//					cloudTeacherOrder.setStartTime(date);
+//                    cloudTeacherOrder.setEndTime(studentService.getMembershipEndTime(cloudTeacherOrder.getType(),date, cloudTeacherOrder.getTime()));
+//				} else {
+//					cloudTeacherOrder.setStartTime(DateUtil.addDays(student.getMembershipEndTime(), 1));
+//                    cloudTeacherOrder.setEndTime(studentService.getMembershipEndTime(cloudTeacherOrder.getType(),student.getMembershipEndTime(), cloudTeacherOrder.getTime()));
+//				}
 
                 cloudTeacherOrder.setAmount(calenderDetail.getExpectMemberAmount());
 				cloudTeacherOrderService.update(cloudTeacherOrder);
 				// 添加会员有效时长
-				studentService.updateMemberRank(cloudTeacherOrder, periodEnum);
+//				studentService.updateMemberRank(cloudTeacherOrder);
 				
 				//添加订单明细
 				StudentPaymentOrderDetail studentPaymentOrderDetail = new StudentPaymentOrderDetail();

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

@@ -3,6 +3,7 @@ package com.ym.mec.biz.service.impl;
 import com.ym.mec.biz.dal.dto.MusicGroupPaymentBaseCalender;
 import com.ym.mec.biz.dal.dto.MusicRepairDto;
 import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender;
+import com.ym.mec.biz.dal.enums.CalenderBaseServiceEnum;
 import com.ym.mec.biz.service.MusicGroupPaymentCalenderBaseService;
 import com.ym.mec.biz.service.SysConfigService;
 import com.ym.mec.biz.service.SysTenantConfigService;
@@ -17,12 +18,16 @@ import java.math.BigDecimal;
 import static com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender.PaymentCalenderStatusEnum.AUDITING;
 import static com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender.PaymentCalenderStatusEnum.NO;
 
-@Service(value = "musicRepairService")
+@Service
 public class MusicRepairPaymentCalenderServiceImpl implements MusicGroupPaymentCalenderBaseService {
 
     @Autowired
     private SysTenantConfigService sysTenantConfigService;
 
+    public MusicRepairPaymentCalenderServiceImpl() {
+        MusicGroupPaymentCalenderBaseService.calenderBaseServiceMap.put(CalenderBaseServiceEnum.MUSIC_REPAIR,this);
+    }
+
     @Override
     public void createComponent(MusicGroupPaymentBaseCalender baseCalender) {
 
@@ -50,7 +55,22 @@ public class MusicRepairPaymentCalenderServiceImpl implements MusicGroupPaymentC
     public BigDecimal getActualAmount(MusicGroupPaymentBaseCalender baseCalender) {
         MusicRepairDto musicRepair = baseCalender.getMusicRepair();
         if(musicRepair != null){
-            return musicRepair.getActualAmount().multiply(musicRepair.getNum());
+            return musicRepair.getActualAmount();
+        }
+        return BigDecimal.ZERO;
+    }
+
+    @Override
+    public BigDecimal getOriginalAmount(MusicGroupPaymentBaseCalender baseCalender) {
+        MusicRepairDto musicRepair = baseCalender.getMusicRepair();
+        if(musicRepair != null){
+            Integer tenantId = TenantContextHolder.getTenantId();
+            String configValue = sysTenantConfigService.getTenantConfigValue(SysConfigService.ONE_YEAR_MUSICAL_REPAIR_AMOUNT, tenantId);
+            if(StringUtils.isEmpty(configValue)){
+                throw new BizException("操作失败:请配置乐保零售价");
+            }
+            //获取会员总价
+            return new BigDecimal(configValue).multiply(musicRepair.getNum()).setScale(0, BigDecimal.ROUND_HALF_UP);
         }
         return BigDecimal.ZERO;
     }

+ 303 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/OrderPayOpsServiceImpl.java

@@ -0,0 +1,303 @@
+package com.ym.mec.biz.service.impl;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
+import com.ym.mec.biz.dal.entity.TenantOrderRecord;
+import com.ym.mec.biz.dal.entity.TenantPaymentOrder;
+import com.ym.mec.biz.dal.enums.DealStatusEnum;
+import com.ym.mec.biz.service.OrderPayOpsService;
+import com.ym.mec.biz.service.StudentPaymentOrderService;
+import com.ym.mec.biz.service.TenantOrderRecordService;
+import com.ym.mec.biz.service.TenantPaymentOrderService;
+import com.ym.mec.common.exception.BizException;
+import com.ym.mec.common.page.WrapperUtil;
+import com.ym.mec.thirdparty.adapay.ConfigInit;
+import com.ym.mec.thirdparty.adapay.Payment;
+import com.ym.mec.util.date.DateUtil;
+import com.ym.mec.util.http.HttpUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.DigestUtils;
+
+import java.math.BigDecimal;
+import java.text.SimpleDateFormat;
+import java.util.*;
+import java.util.function.BiPredicate;
+import java.util.function.Consumer;
+import java.util.function.Function;
+
+/**
+ * @author hgw
+ * Created by 2021-12-22
+ */
+@Service
+public class OrderPayOpsServiceImpl implements OrderPayOpsService {
+    private static final Logger log = LoggerFactory.getLogger(OrderPayOpsServiceImpl.class);
+
+    @Autowired
+    private StudentPaymentOrderService studentPaymentOrderService;
+    @Autowired
+    private TenantPaymentOrderService tenantPaymentOrderService;
+    @Autowired
+    private TenantOrderRecordService tenantOrderRecordService;
+
+    @Override
+    public Map<String, Object> executePayment(BigDecimal amount, String orderNo, String payChannel, String returnUrl, String orderSubject, String orderBody, String sign, String code, String platform) throws Exception {
+        PaymentParam payParam = new PaymentParam(amount, orderNo, payChannel, returnUrl,
+                orderSubject, orderBody, sign, code, platform);
+        log.info("executePayment >>>>> {}", JSON.toJSONString(payParam));
+        //签名验证
+        checkSing(payParam);
+
+        Map<String, Object> payment = new HashMap<>();
+        if (platform != null) {
+            if (platform.equals("tenant")) {
+                //机构开通付款
+                TenantOrderRecord tenantOrderRecord = tenantOrderRecordService.getOne(new WrapperUtil<TenantOrderRecord>()
+                        .hasEq("order_no_", payParam.getOrderNo()).queryWrapper());
+                payment = checkOrderAndGetParam(payParam,
+                        tenantOrderRecord,
+                        TenantOrderRecord::getEnumOrderState,
+                        TenantOrderRecord::getCreatedTime,
+                        tenantOrderRecord::setTransNo,
+                        tenantOrderRecordService::updateById
+                );
+            } else if (platform.equals("teacher")) {
+                TenantPaymentOrder tenantPaymentOrder = tenantPaymentOrderService.queryByOrderNo(payParam.getOrderNo());
+                payment = checkOrderAndGetParam(payParam,
+                        tenantPaymentOrder,
+                        TenantPaymentOrder::getStatus,
+                        TenantPaymentOrder::getCreateTime,
+                        tenantPaymentOrder::setTransNo,
+                        tenantPaymentOrderService::update
+                );
+            } else {
+                StudentPaymentOrder studentPaymentOrder = studentPaymentOrderService.findOrderByOrderNo(payParam.getOrderNo());
+                payment = checkOrderAndGetParam(payParam,
+                        studentPaymentOrder,
+                        StudentPaymentOrder::getStatus,
+                        StudentPaymentOrder::getCreateTime,
+                        studentPaymentOrder::setTransNo,
+                        studentPaymentOrderService::update
+                );
+            }
+        }
+
+        return payment;
+    }
+
+    private void checkSing(PaymentParam param) {
+        Map<String, Object> signParams = new LinkedHashMap<>();
+        signParams.put("appId", ConfigInit.appId);
+        signParams.put("amount", param.getAmount().setScale(2, BigDecimal.ROUND_HALF_UP));
+        signParams.put("orderNo", param.getOrderNo());
+        signParams.put("orderSubject", param.getOrderSubject());
+        signParams.put("orderBody", param.getOrderBody());
+        signParams.put("wxAppId", ConfigInit.wxAppId);
+        String originalStr = JSONObject.toJSONString(signParams);
+        String newSign = DigestUtils.md5DigestAsHex(originalStr.getBytes());
+        if (!newSign.equals(param.getSign())) {
+            log.info("executePayment >>>>>> checkSing : {}", newSign);
+            throw new BizException("请勿非法请求");
+        }
+    }
+
+    private <T> Map<String, Object> checkOrderAndGetParam(PaymentParam payParam, T clazz,
+                                                          Function<T, DealStatusEnum> enumFunc, Function<T, Date> dateFunc,
+                                                          Consumer<String> setOption, Consumer<T> action) throws Exception {
+        if (Objects.isNull(clazz)) {
+            throw new BizException("订单不存在");
+        }
+        checkOrderState(clazz, enumFunc);
+        Date createTime = dateFunc.apply(clazz);
+        //校验订单是否超时
+        String timeExpire = checkOrderTimeOut(createTime);
+        //初始化支付数据
+        Map<String, Object> paymentParams = getPaymentParam(payParam);
+        paymentParams.put("time_expire", timeExpire);
+        paymentParams.put("expend", getExpend(payParam));
+        //获取第三方的支付的信息
+        Map<String, Object> payment = Payment.executePayment(paymentParams);
+        log.info("executePayment create order param >>>>> {}", JSON.toJSONString(payment));
+        String transNo = (String) payment.get("id");
+        //修改流水
+        setTransNoByApply(transNo, clazz, setOption, action);
+
+        return payment;
+    }
+
+    private <T> void checkOrderState(T obj, Function<T, DealStatusEnum> func) {
+        BiPredicate<Object, DealStatusEnum> predicate = (o, s) -> Objects.nonNull(o) && !DealStatusEnum.ING.equals(s);
+        DealStatusEnum em = func.apply(obj);
+        if (predicate.test(obj, em)) {
+            String msg = em.equals(DealStatusEnum.SUCCESS) ? "订单已支付,请勿重复支付" : "订单已关闭,不能支付";
+            throw new BizException(msg);
+        }
+    }
+
+    private String checkOrderTimeOut(Date createTime) {
+        Calendar beforeTime = Calendar.getInstance();
+        beforeTime.add(Calendar.MINUTE, -28);// 28 分钟之前的时间
+        Date beforeDate = beforeTime.getTime();
+        if (createTime.before(beforeDate)) {
+            throw new BizException("订单已超时,请重新下单");
+        }
+        Date expireDate = DateUtil.addMinutes(createTime, 30);
+        return new SimpleDateFormat("yyyyMMddHHmmss").format(expireDate);
+    }
+
+    private <T> void setTransNoByApply(String TransNo, T clazz, Consumer<String> setOption, Consumer<T> action) {
+        Optional.ofNullable(clazz)
+                .filter(c -> Objects.nonNull(setOption))
+                .filter(c -> Objects.nonNull(action))
+                .filter(c -> StringUtils.isNotBlank(TransNo))
+                .map(c -> {
+                    setOption.accept(TransNo);
+                    return c;
+                })
+                .ifPresent(action);
+    }
+
+
+    private Map<String, Object> getExpend(PaymentParam payParam) throws Exception {
+        Map<String, Object> expendParams = new HashMap<>(5);
+        String openId = "";
+        if (payParam.getPayChannel().equals("wx_pub")) {
+            //微信支付则获取openId
+            openId = getOpenId(payParam.getCode());
+        }
+        expendParams.put("open_id", openId);
+        expendParams.put("is_raw", "1");
+        expendParams.put("callback_url", payParam.getReturnUrl());
+        expendParams.put("limit_pay", "1");
+        return expendParams;
+    }
+
+    private String getOpenId(String code) throws Exception {
+        String openId;
+        if (code == null || code.isEmpty()) {
+            throw new BizException("微信支付请先授权");
+        }
+        String wxMpOAuth2AccessTokenUrl = String.format(ConfigInit.wxMpOAuth2AccessTokenUrl, ConfigInit.wxAppId, ConfigInit.wxAppSecret, code);
+        Map<String, String> weChatRes = JSON.parseObject(HttpUtil.get(wxMpOAuth2AccessTokenUrl, new HashMap<>()), Map.class);
+        if (!weChatRes.containsKey("openid")) {
+            throw new BizException("授权失败,请重新授权");
+        }
+        openId = weChatRes.get("openid");
+        return openId;
+    }
+
+    private Map<String, Object> getPaymentParam(PaymentParam payParam) {
+        Map<String, Object> paymentParams = new HashMap<>();
+        paymentParams.put("app_id", ConfigInit.appId);
+        paymentParams.put("order_no", payParam.getOrderNo());
+        paymentParams.put("pay_channel", payParam.getPayChannel());
+        paymentParams.put("pay_amt", payParam.getAmount().setScale(2, BigDecimal.ROUND_HALF_UP));
+        paymentParams.put("goods_title", payParam.getOrderSubject());
+        paymentParams.put("goods_desc", payParam.getOrderBody());
+        paymentParams.put("pay_mode", "delay");
+        return paymentParams;
+    }
+
+    static class PaymentParam {
+        private BigDecimal amount;
+        private String orderNo;
+        private String payChannel;
+        private String returnUrl;
+        private String orderSubject;
+        private String orderBody;
+        private String sign;
+        private String code;
+        private String platform;
+
+        PaymentParam(BigDecimal amount, String orderNo, String payChannel, String returnUrl, String orderSubject,
+                     String orderBody, String sign, String code, String platform) {
+            this.amount = amount;
+            this.orderNo = orderNo;
+            this.payChannel = payChannel;
+            this.returnUrl = returnUrl;
+            this.orderSubject = orderSubject;
+            this.orderBody = orderBody;
+            this.sign = sign;
+            this.code = code;
+            this.platform = platform;
+        }
+
+        public BigDecimal getAmount() {
+            return amount;
+        }
+
+        public void setAmount(BigDecimal amount) {
+            this.amount = amount;
+        }
+
+        public String getOrderNo() {
+            return orderNo;
+        }
+
+        public void setOrderNo(String orderNo) {
+            this.orderNo = orderNo;
+        }
+
+        public String getPayChannel() {
+            return payChannel;
+        }
+
+        public void setPayChannel(String payChannel) {
+            this.payChannel = payChannel;
+        }
+
+        public String getReturnUrl() {
+            return returnUrl;
+        }
+
+        public void setReturnUrl(String returnUrl) {
+            this.returnUrl = returnUrl;
+        }
+
+        public String getOrderSubject() {
+            return orderSubject;
+        }
+
+        public void setOrderSubject(String orderSubject) {
+            this.orderSubject = orderSubject;
+        }
+
+        public String getOrderBody() {
+            return orderBody;
+        }
+
+        public void setOrderBody(String orderBody) {
+            this.orderBody = orderBody;
+        }
+
+        public String getSign() {
+            return sign;
+        }
+
+        public void setSign(String sign) {
+            this.sign = sign;
+        }
+
+        public String getCode() {
+            return code;
+        }
+
+        public void setCode(String code) {
+            this.code = code;
+        }
+
+        public String getPlatform() {
+            return platform;
+        }
+
+        public void setPlatform(String platform) {
+            this.platform = platform;
+        }
+    }
+
+}

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

@@ -127,7 +127,6 @@ public class PlatformServeServiceImpl extends ServiceImpl<PlatformServeDao, Plat
         return platformServeDetailDao.queryDetailById(id);
     }
 
-
     private PlatformServeServiceInfo getServeInfo(PlatformServeDto obj) {
         List<PlatformServeDetail> detailList = getDetailList(obj);
 
@@ -177,7 +176,6 @@ public class PlatformServeServiceImpl extends ServiceImpl<PlatformServeDao, Plat
         }
     }
 
-
     private List<PlatformServeDetail> getDetailList(PlatformServeDto obj) {
         return Optional.ofNullable(obj)
                 .filter(o -> CollectionUtils.isNotEmpty(obj.getDetailList()))

+ 11 - 61
mec-biz/src/main/java/com/ym/mec/biz/service/impl/PracticeGroupServiceImpl.java

@@ -3988,43 +3988,18 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
                     addDate = student.getMembershipEndTime();
                     cloudTeacherOrder.setStartTime(DateUtil.addDays(addDate, 1));
                 }
-                switch (periodEnum){
-                    case DAY:
-                        cloudTeacherOrder.setEndTime(DateUtil.addDays(addDate, cloudTime));
-                        cloudTeacherType = 1;
-                        break;
-                    case MONTH:
-                        cloudTeacherType = 2;
-                        cloudTeacherOrder.setEndTime(DateUtil.addMonths(addDate, cloudTime));
-                        break;
-                    case QUARTERLY:
-                        cloudTeacherType = 2;
-                        cloudTime = cloudTime * 3;
-                        cloudTeacherOrder.setEndTime(DateUtil.addMonths(addDate, cloudTime * 3));
-                        break;
-                    case YEAR_HALF:
-                        cloudTime = cloudTime * 6;
-                        cloudTeacherOrder.setEndTime(DateUtil.addMonths(addDate, cloudTime * 6));
-                        cloudTeacherType = 2;
-                        break;
-                    case YEAR:
-                        cloudTeacherOrder.setEndTime(DateUtil.addYears(addDate, cloudTime));
-                        cloudTeacherType = 3;
-                        break;
-                    default:
-                        throw new BizException("不支持的周期类型");
-                }
+                cloudTeacherOrder.setEndTime(studentService.getMembershipEndTime(periodEnum,addDate, cloudTime));
                 cloudTeacherOrder.setRemark("营销活动购买会员");
-                cloudTeacherOrder.setStatus(2);
+                cloudTeacherOrder.setStatus(1);
                 cloudTeacherOrder.setOrderId(order.getId());
-                cloudTeacherOrder.setType(cloudTeacherType);
+                cloudTeacherOrder.setType(periodEnum);
                 cloudTeacherOrder.setAmount(order.getActualAmount());
                 cloudTeacherOrder.setLevel(activity.getMemberRankId());
                 cloudTeacherOrder.setStudentId(userId);
                 cloudTeacherOrder.setOrganId(order.getOrganId());
                 cloudTeacherOrder.setTime(cloudTime);
                 cloudTeacherOrderDao.insert(cloudTeacherOrder);
-                studentService.updateMemberRank(cloudTeacherOrder,periodEnum);
+//                studentService.updateMemberRank(cloudTeacherOrder);
                 activityUserMapper.setMemberFlag(2);
                 activityUserMapper.setMemberOrderId(cloudTeacherOrder.getId());
             }else {
@@ -4054,43 +4029,18 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
                         addDate = student.getMembershipEndTime();
                         cloudTeacherOrder.setStartTime(DateUtil.addDays(addDate, 1));
                     }
-                    switch (periodEnum){
-                        case DAY:
-                            cloudTeacherOrder.setEndTime(DateUtil.addDays(addDate, cloudTime));
-                            cloudTeacherType = 1;
-                            break;
-                        case MONTH:
-                            cloudTeacherType = 2;
-                            cloudTeacherOrder.setEndTime(DateUtil.addMonths(addDate, cloudTime));
-                            break;
-                        case QUARTERLY:
-                            cloudTeacherType = 2;
-                            cloudTime = cloudTime * 3;
-                            cloudTeacherOrder.setEndTime(DateUtil.addMonths(addDate, cloudTime * 3));
-                            break;
-                        case YEAR_HALF:
-                            cloudTime = cloudTime * 6;
-                            cloudTeacherOrder.setEndTime(DateUtil.addMonths(addDate, cloudTime * 6));
-                            cloudTeacherType = 2;
-                            break;
-                        case YEAR:
-                            cloudTeacherOrder.setEndTime(DateUtil.addYears(addDate, cloudTime));
-                            cloudTeacherType = 3;
-                            break;
-                        default:
-                            throw new BizException("不支持的周期类型");
-                    }
+                    cloudTeacherOrder.setEndTime(studentService.getMembershipEndTime(periodEnum,addDate, cloudTime));
                     cloudTeacherOrder.setRemark("营销活动赠送会员");
-                    cloudTeacherOrder.setStatus(2);
+                    cloudTeacherOrder.setStatus(1);
                     cloudTeacherOrder.setOrderId(order.getId());
-                    cloudTeacherOrder.setType(cloudTeacherType);
+                    cloudTeacherOrder.setType(periodEnum);
                     cloudTeacherOrder.setAmount(BigDecimal.ZERO);
                     cloudTeacherOrder.setLevel(activity.getGiveMemberRankId());
                     cloudTeacherOrder.setStudentId(userId);
                     cloudTeacherOrder.setOrganId(order.getOrganId());
                     cloudTeacherOrder.setTime(cloudTime);
                     cloudTeacherOrderDao.insert(cloudTeacherOrder);
-                    studentService.updateMemberRank(cloudTeacherOrder,periodEnum);
+//                    studentService.updateMemberRank(cloudTeacherOrder);
                     activityUserMapper.setGiveMemberFlag(2);
                     activityUserMapper.setGiveMemberOrderId(cloudTeacherOrder.getId());
                 }else if(activity.getGiveCourseNum() > 0){
@@ -4278,16 +4228,16 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
                     }
                     cloudTeacherOrder.setEndTime(DateUtil.addDays(DateUtil.addMonths(addDate, 1),1));
                     cloudTeacherOrder.setRemark("双十一活动赠送会员");
-                    cloudTeacherOrder.setStatus(2);
+                    cloudTeacherOrder.setStatus(1);
                     cloudTeacherOrder.setOrderId(order.getId());
-                    cloudTeacherOrder.setType(2);
+                    cloudTeacherOrder.setType(PeriodEnum.MONTH);
                     cloudTeacherOrder.setAmount(BigDecimal.ZERO);
                     cloudTeacherOrder.setLevel(1);
                     cloudTeacherOrder.setStudentId(userId);
                     cloudTeacherOrder.setOrganId(order.getOrganId());
                     cloudTeacherOrder.setTime(1);
                     cloudTeacherOrderDao.insert(cloudTeacherOrder);
-                    studentService.updateMemberRank(cloudTeacherOrder,PeriodEnum.MONTH);
+//                    studentService.updateMemberRank(cloudTeacherOrder);
                     redisCache.put(memberKey,userId);
                 }
             }

+ 6 - 43
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentOrderServiceImpl.java

@@ -763,31 +763,16 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
                 Date now = new Date();
                 // 查询会员订单信息
                 CloudTeacherOrder cloudTeacherOrder = new CloudTeacherOrder();
-                cloudTeacherOrder.setStatus(2);
+                cloudTeacherOrder.setStatus(1);
                 cloudTeacherOrder.setUpdateTime(now);
                 cloudTeacherOrder.setAmount(BigDecimal.ZERO);
                 cloudTeacherOrder.setOrderId(studentPaymentOrder.getId());
                 cloudTeacherOrder.setRemark("购买vip活动赠送会员");
                 cloudTeacherOrder.setLevel(activity.getGiveMemberRankId());
                 cloudTeacherOrder.setStudentId(studentPaymentOrder.getUserId());
-                cloudTeacherOrder.setType(2);
+                cloudTeacherOrder.setType(activity.getGivePeriodEnum());
                 cloudTeacherOrder.setOrganId(studentPaymentOrder.getOrganId());
-                PeriodEnum periodEnum = activity.getGivePeriodEnum();
-                switch (periodEnum){
-                    case DAY:
-                        cloudTeacherOrder.setType(1);
-                        break;
-                    case MONTH:
-                    case QUARTERLY:
-                    case YEAR_HALF:
-                        cloudTeacherOrder.setType(2);
-                        break;
-                    case YEAR:
-                        cloudTeacherOrder.setType(3);
-                        break;
-                    default:
-                        throw new BizException("不支持的周期类型");
-                }
+
                 Student student = studentService.get(studentPaymentOrder.getUserId());
                 Date startDate = now;
                 if (student.getMemberRankSettingId() == null || now.after(student.getMembershipEndTime())) {
@@ -796,33 +781,11 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
                     cloudTeacherOrder.setStartTime(DateUtil.addDays(student.getMembershipEndTime(), 1));
                     startDate = student.getMembershipEndTime();
                 }
-                switch (periodEnum){
-                    case DAY:
-                        cloudTeacherOrder.setEndTime(DateUtil.addDays(startDate, activity.getGiveMemberTime()));
-                        cloudTeacherOrder.setTime(activity.getGiveMemberTime());
-                        break;
-                    case MONTH:
-                        cloudTeacherOrder.setEndTime(DateUtil.addMonths(startDate, activity.getGiveMemberTime()));
-                        cloudTeacherOrder.setTime(activity.getGiveMemberTime());
-                        break;
-                    case QUARTERLY:
-                        cloudTeacherOrder.setEndTime(DateUtil.addMonths(startDate, activity.getGiveMemberTime() * 3));
-                        cloudTeacherOrder.setTime(activity.getGiveMemberTime() * 3);
-                        break;
-                    case YEAR_HALF:
-                        cloudTeacherOrder.setEndTime(DateUtil.addMonths(startDate, activity.getGiveMemberTime() * 6));
-                        cloudTeacherOrder.setTime(activity.getGiveMemberTime() * 6);
-                        break;
-                    case YEAR:
-                        cloudTeacherOrder.setEndTime(DateUtil.addYears(startDate, activity.getGiveMemberTime()));
-                        cloudTeacherOrder.setTime(activity.getGiveMemberTime());
-                        break;
-                    default:
-                        throw new BizException("不支持的周期类型");
-                }
+                cloudTeacherOrder.setEndTime(studentService.getMembershipEndTime(activity.getGivePeriodEnum(),startDate,activity.getGiveMemberTime()));
+                cloudTeacherOrder.setTime(activity.getGiveMemberTime());
                 cloudTeacherOrderService.insert(cloudTeacherOrder);
                 // 添加会员有效时长
-                studentService.updateMemberRank(cloudTeacherOrder, periodEnum);
+//                studentService.updateMemberRank(cloudTeacherOrder);
                 activityUserMapper.setGiveMemberFlag(2);
                 activityUserMapper.setGiveMemberOrderId(cloudTeacherOrder.getId());
             }

+ 20 - 89
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentServiceImpl.java

@@ -398,106 +398,37 @@ public class StudentServiceImpl extends BaseServiceImpl<Integer, Student> implem
         return cooperationOrgan;
     }
 
+    public Date getMembershipEndTime(PeriodEnum periodEnum,Date endTime,Integer memberNum){
+        switch (periodEnum) {
+            case DAY:
+                return DateUtil.addDays(endTime,memberNum);
+            case MONTH:
+                return DateUtil.addMonths(endTime,memberNum);
+            case QUARTERLY:
+                return DateUtil.addMonths(endTime,memberNum * 3);
+            case YEAR_HALF:
+                return DateUtil.addMonths(endTime,memberNum * 6);
+            case YEAR:
+                return DateUtil.addYears(endTime,memberNum);
+            default:
+                throw new BizException("错误的会员时长单位");
+        }
+    }
+
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public void updateMemberRank(CloudTeacherOrder cloudTeacherOrder, PeriodEnum periodEnum) {
+    public void updateMemberRank(CloudTeacherOrder cloudTeacherOrder) {
         // 添加会员有效时长
         Student student = this.get(cloudTeacherOrder.getStudentId());
         if (student == null) {
             throw new BizException("学员信息不存在");
         }
-
         Date nowDate = new Date();
         if (student.getMemberRankSettingId() == null || nowDate.after(student.getMembershipEndTime())) {
-        	switch (periodEnum) {
-    		case DAY:
-                student.setMembershipEndTime(DateUtil.addDays(nowDate, cloudTeacherOrder.getTime()));
-    			break;
-    		case MONTH:
-                student.setMembershipEndTime(DateUtil.addMonths(nowDate, cloudTeacherOrder.getTime()));
-                break;
-    		case QUARTERLY:
-                student.setMembershipEndTime(DateUtil.addMonths(nowDate, cloudTeacherOrder.getTime() * 3));
-                break;
-    		case YEAR_HALF:
-                student.setMembershipEndTime(DateUtil.addMonths(nowDate, cloudTeacherOrder.getTime() * 6));
-    			break;
-    		case YEAR:
-                student.setMembershipEndTime(DateUtil.addYears(nowDate, cloudTeacherOrder.getTime()));
-    			break;
-    		default:
-    			break;
-    		}
-            student.setMembershipStartTime(nowDate);
+            student.setMembershipStartTime(getMembershipEndTime(cloudTeacherOrder.getType(),nowDate, cloudTeacherOrder.getTime()));
         } else {
-        	switch (periodEnum) {
-    		case DAY:
-            	student.setMembershipEndTime(DateUtil.addDays(student.getMembershipEndTime(), cloudTeacherOrder.getTime()));
-    			break;
-    		case MONTH:
-                student.setMembershipEndTime(DateUtil.addMonths(student.getMembershipEndTime(), cloudTeacherOrder.getTime()));
-                break;
-            case QUARTERLY:
-                student.setMembershipEndTime(DateUtil.addMonths(student.getMembershipEndTime(), cloudTeacherOrder.getTime() * 3 ));
-                break;
-    		case YEAR_HALF:
-            	student.setMembershipEndTime(DateUtil.addMonths(student.getMembershipEndTime(), cloudTeacherOrder.getTime() * 6 ));
-    			break;
-    		case YEAR:
-            	student.setMembershipEndTime(DateUtil.addYears(student.getMembershipEndTime(), cloudTeacherOrder.getTime()));
-    			break;
-    		default:
-    			break;
-    		}
-        }
-        if(StringUtils.isNotEmpty(cloudTeacherOrder.getMusicGroupId())){
-            StudentRegistration registration = studentRegistrationDao.getByUserIdAndMusicGroupId(cloudTeacherOrder.getMusicGroupId(), cloudTeacherOrder.getStudentId());
-            if(registration != null && (registration.getMusicGroupStatus() == StudentMusicGroupStatusEnum.NORMAL || registration.getMusicGroupStatus() == StudentMusicGroupStatusEnum.APPLY)){
-                if (registration.getMembershipEndTime() == null || nowDate.after(registration.getMembershipEndTime())) {
-                    switch (periodEnum) {
-                        case DAY:
-                            registration.setMembershipEndTime(DateUtil.addDays(nowDate, cloudTeacherOrder.getTime()));
-                            break;
-                        case MONTH:
-                            registration.setMembershipEndTime(DateUtil.addMonths(nowDate, cloudTeacherOrder.getTime()));
-                            break;
-                        case QUARTERLY:
-                            registration.setMembershipEndTime(DateUtil.addMonths(nowDate, cloudTeacherOrder.getTime() * 3));
-                            break;
-                        case YEAR_HALF:
-                            registration.setMembershipEndTime(DateUtil.addMonths(nowDate, cloudTeacherOrder.getTime() * 6));
-                            break;
-                        case YEAR:
-                            registration.setMembershipEndTime(DateUtil.addYears(nowDate, cloudTeacherOrder.getTime()));
-                            break;
-                        default:
-                            break;
-                    }
-                } else {
-                    switch (periodEnum) {
-                        case DAY:
-                            registration.setMembershipEndTime(DateUtil.addDays(registration.getMembershipEndTime(), cloudTeacherOrder.getTime()));
-                            break;
-                        case MONTH:
-                            registration.setMembershipEndTime(DateUtil.addMonths(registration.getMembershipEndTime(), cloudTeacherOrder.getTime()));
-                            break;
-                        case QUARTERLY:
-                            registration.setMembershipEndTime(DateUtil.addMonths(registration.getMembershipEndTime(), cloudTeacherOrder.getTime() * 3));
-                            break;
-                        case YEAR_HALF:
-                            registration.setMembershipEndTime(DateUtil.addMonths(registration.getMembershipEndTime(), cloudTeacherOrder.getTime() * 6 ));
-                            break;
-                        case YEAR:
-                            registration.setMembershipEndTime(DateUtil.addYears(registration.getMembershipEndTime(), cloudTeacherOrder.getTime()));
-                            break;
-                        default:
-                            break;
-                    }
-                }
-                studentRegistrationDao.update(registration);
-            }
+            student.setMembershipStartTime(getMembershipEndTime(cloudTeacherOrder.getType(),student.getMembershipEndTime(), cloudTeacherOrder.getTime()));
         }
-
         student.setMemberRankSettingId(cloudTeacherOrder.getLevel());
         student.setUpdateTime(nowDate);
         this.update(student);

+ 95 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TenantAssetsInfoServiceImpl.java

@@ -0,0 +1,95 @@
+package com.ym.mec.biz.service.impl;
+
+import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ym.mec.biz.dal.dao.TenantAssetsInfoDao;
+import com.ym.mec.biz.dal.entity.CourseSchedule;
+import com.ym.mec.biz.dal.entity.TenantAssetsInfo;
+import com.ym.mec.biz.dal.entity.TenantConfig;
+import com.ym.mec.biz.dal.entity.TenantConfigDetail;
+import com.ym.mec.biz.dal.entity.TenantConfigDetail.CloudRoomRule;
+import com.ym.mec.biz.dal.enums.TeachModeEnum;
+import com.ym.mec.biz.service.TenantAssetsInfoService;
+import com.ym.mec.biz.service.TenantConfigService;
+import com.ym.mec.common.exception.BizException;
+import com.ym.mec.common.filters.TenantIdThreadLocal;
+import com.ym.mec.common.page.WrapperUtil;
+import com.ym.mec.common.tenant.TenantContextHolder;
+import org.apache.commons.collections.CollectionUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.math.BigDecimal;
+import java.math.MathContext;
+import java.math.RoundingMode;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Optional;
+import java.util.stream.Collectors;
+
+/**
+ * 机构资产信息(TenantAssetsInfo)表服务实现类
+ *
+ * @author hgw
+ * @since 2021-12-22 14:27:02
+ */
+@Service("tenantAssetsInfoService")
+public class TenantAssetsInfoServiceImpl extends ServiceImpl<TenantAssetsInfoDao, TenantAssetsInfo> implements TenantAssetsInfoService {
+
+    private final static Logger log = LoggerFactory.getLogger(TenantAssetsInfoServiceImpl.class);
+
+    @Autowired
+    private TenantConfigService tenantConfigService;
+
+    /**
+     * 排课扣费计算
+     * 1.线上排课计算出的总价格不能超过账户余额(注意多人同时操作账户余额多扣问题)
+     * 2.若符合规则冻结部分账户
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void courseDeductionRules(List<CourseSchedule> dto) {
+        dto = Optional.ofNullable(dto)
+                .filter(CollectionUtils::isNotEmpty)
+                .orElseThrow(() -> new BizException("请传入课程表参数!"))
+                .stream()
+                .filter(c -> c.getTeachMode().equals(TeachModeEnum.ONLINE))
+                .collect(Collectors.toList());
+
+        Integer tenantId = TenantContextHolder.getTenantId();
+        TenantConfig tenantConfig = tenantConfigService.getOne(new WrapperUtil<TenantConfig>()
+                .hasEq("tenant_id_", tenantId).queryWrapper());
+        if (Objects.isNull(tenantConfig)) {
+            throw new BizException("未查询到机构云教室规则信息!");
+        }
+        //获取云教室规则
+        Map<String, BigDecimal> rule = Optional.ofNullable(tenantConfig.getConfig())
+                .map(c -> JSON.parseObject(c, TenantConfigDetail.class))
+                .map(TenantConfigDetail::getCloud_room_rule)
+                .map(CloudRoomRule::getCloud_room_config)
+                .orElseThrow(() -> new BizException("未查询到机构云教室规则!"));
+        BigDecimal total = BigDecimal.ZERO;
+//        dto.forEach(course -> {
+//            Integer peopleNum = course.getPeopleNum();
+//            BigDecimal minutePrice = rule.get(String.valueOf(peopleNum));
+//            BigDecimal duration = BigDecimal.valueOf(course.getCourseDuration());
+//            BigDecimal coursePrice = minutePrice.multiply(duration, new MathContext(2, RoundingMode.HALF_UP));
+//
+//        });
+
+        System.out.println(1);
+
+        TenantAssetsInfo assetsInfo = this.getOne(new WrapperUtil<TenantAssetsInfo>()
+                .hasEq("tenant_id_", tenantId).queryWrapper());
+        if (Objects.isNull(assetsInfo)) {
+            throw new BizException("未查询到该机构的账户资产信息!");
+        }
+    }
+
+
+}
+

+ 65 - 41
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TenantInfoServiceImpl.java

@@ -8,6 +8,7 @@ import com.google.common.collect.Lists;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysRole;
 import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.auth.api.enums.SysUserType;
 import com.ym.mec.biz.dal.dao.OrganizationDao;
 import com.ym.mec.biz.dal.dao.SysConfigDao;
 import com.ym.mec.biz.dal.dao.TenantInfoDao;
@@ -74,6 +75,8 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoDao, TenantInfo
     private SysConfigDao sysConfigDao;
     @Autowired
     private TenantOrderRecordService tenantOrderRecordService;
+    @Autowired
+    private TenantAssetsInfoService assetsInfoService;
 
     /**
      * 新增机构
@@ -103,20 +106,6 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoDao, TenantInfo
                 tenantProductInfoService::addTenantProduct);
         //添加机构配置
         setIdByApply(tenantId, dto.getConfig(), dto.getConfig()::setTenantId, tenantConfigService::addConfig);
-        //创建一个和机构同名称的“分部”
-        createOrg(tenantInfo, dto.getAreaId());
-    }
-
-    //创建一个和机构同名称的“分部”
-    private void createOrg(TenantInfo tenantInfo, Integer areaId) {
-        Organization organization = new Organization();
-        organization.setName(tenantInfo.getName());
-        organization.setDelFlag(YesOrNoEnum.NO);
-        organization.setGradeType(GradeTypeEnum.SIX_PLUS);
-        organization.setCreateTime(new Date());
-        organization.setTenantId(tenantInfo.getId());
-        organization.setAreaId(areaId);
-        organizationDao.insert(organization);
     }
 
     /**
@@ -246,13 +235,16 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoDao, TenantInfo
         Integer tenantId = tenantInfo.getId();
         SysUser user = sysUserFeignService.queryUserByMobile(tenantInfo.getPhone());
         if (Objects.nonNull(user)) {
-            return;
+            if (user.getUserType().contains(SysUserType.SYSTEM.getCode())) {
+                return;
+            }
         }
+
         //防止重复点击 加锁
         String key = "Tenant_First_Open:" + tenantId;
         RBucket<Object> bucket = redissonClient.getBucket(key);
         //原子操作 抢锁成功为true
-        if (!bucket.trySet(tenantId, 3L, TimeUnit.MINUTES)) {
+        if (!bucket.trySet(tenantId, 1L, TimeUnit.MINUTES)) {
             throw new BizException("机构正在开通中请勿频繁操作");
         }
         //获取产品信息得到服务id
@@ -268,12 +260,22 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoDao, TenantInfo
         }
         //拆分菜单获取菜单ID
         List<Integer> collectMenuId = getMenuId(menuIdList);
+        //创建一个和机构同名称的“分部”
+        Integer orgId = createOrg(tenantInfo);
         //建立角色
         Integer roleId = createRole(tenantInfo);
-        //建立角色和菜单关系数据
-        employeeService.batchInsertRoleMenu(roleId, collectMenuId, tenantId);
         // 创建账号、用户信息、用户和角色关系
-        createUser(tenantInfo, Lists.newArrayList(roleId));
+        createUser(tenantInfo, orgId, Lists.newArrayList(roleId));
+        //建立角色和菜单关系数据
+         Lists.partition(collectMenuId, 200)
+                         .forEach(idList -> employeeService.batchInsertRoleMenu(roleId, idList, tenantId));
+        //创建资产信息
+        TenantAssetsInfo assetsInfo = new TenantAssetsInfo();
+        assetsInfo.setTenantId(tenantId);
+        assetsInfo.setBalance(BigDecimal.ZERO);
+        assetsInfo.setFrozenAmount(BigDecimal.ZERO);
+        assetsInfo.setCreatedTime(new Date());
+        assetsInfoService.save(assetsInfo);
     }
 
     //拆分菜单获取菜单ID
@@ -294,28 +296,42 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoDao, TenantInfo
         sysRole.setCreateTime(new Date());
         sysRole.setDelFlag("0");
         sysRole.setTenantId(tenantInfo.getId());
-        Organization organization = organizationDao.getByName(tenantInfo.getName(), tenantInfo.getId());
-        sysRole.setOrganId(organization.getId());
         employeeService.insertSysRole(sysRole);
         return sysRole.getId();
     }
 
     //创建账号、用户信息、用户和角色关系
-    private void createUser(TenantInfo tenantInfo, List<Integer> roles) {
+    private void createUser(TenantInfo tenantInfo, Integer orgId, List<Integer> roles) {
         Employee e = new Employee();
+        e.setTenantId(tenantInfo.getId());
         e.setPhone(tenantInfo.getPhone());
         e.setRealName(tenantInfo.getContacts());
         e.setJobNature(JobNatureEnum.FULL_TIME);
         e.setEntryDate(LocalDate.now().toDate());
         e.setRoles(roles);
         e.setRoleIds(roles);
+        e.setOrganIdList(String.valueOf(orgId));
         try {
+            log.info("createUser >>>> {}", e);
             employeeService.add(e);
         } catch (Exception ex) {
             throw new BizException("开通账号信息异常!");
         }
     }
 
+    //创建一个和机构同名称的“分部”
+    private Integer createOrg(TenantInfo tenantInfo) {
+        Organization organization = new Organization();
+        organization.setName(tenantInfo.getName());
+        organization.setDelFlag(YesOrNoEnum.NO);
+        organization.setGradeType(GradeTypeEnum.SIX_PLUS);
+        organization.setCreateTime(new Date());
+        organization.setTenantId(tenantInfo.getId());
+        organization.setAreaId(tenantInfo.getAreaId());
+        organizationDao.insert(organization);
+        return organization.getId();
+    }
+
     /**
      * 分页查询
      *
@@ -335,9 +351,9 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoDao, TenantInfo
     }
 
     /**
-     * 机构缴费
+     * 机构开通缴费
      */
-    public Map<String, Object> pay(Integer tenantId) throws Exception {
+    public Map<String, Object> tenantOpenPay(Integer tenantId) throws Exception {
         TenantInfo tenantInfo = Optional.ofNullable(tenantId)
                 .map(baseMapper::selectById)
                 .orElseThrow(() -> new BizException("未查询到机构信息!"));
@@ -345,7 +361,7 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoDao, TenantInfo
         RBucket<Object> bucket = redissonClient.getBucket(key);
         //原子操作 抢锁成功为true
         if (!bucket.trySet(tenantId, 10, TimeUnit.SECONDS)) {
-            if(tenantInfo.getPayState() == 1){
+            if (tenantInfo.getPayState() == 1) {
                 throw new BizException("已缴费请勿重复缴费!");
             }
             throw new BizException("该机构数正在缴费中请勿频繁操作");
@@ -357,11 +373,6 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoDao, TenantInfo
         String orderNo = idGenerator.generatorId("payment") + "";
         String baseApiUrl = sysConfigDao.findConfigValue("base_api_url");
         TenantOrderRecordEnum tenantEnum = TenantOrderRecordEnum.TENANT_OPEN;
-        //获取分部信息
-        Organization organization = organizationDao.getByName(tenantInfo.getName(), tenantId);
-        if (Objects.isNull(organization)) {
-            throw new BizException("未查询到机构分部信息!");
-        }
         Map<String, Object> result = new HashMap<>();
         int orderState = 0;
         //消费大于0元则拉起支付
@@ -386,13 +397,12 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoDao, TenantInfo
             result.put("payMap", payMap);
         }
         createOrderRecord(tenantId, productInfo.getPayAmount(), orderNo, tenantEnum, orderState);
-        log.info("tenant pay >>>>> " + JSON.toJSONString(result));
+        log.info("tenant pay >>>>> {} ", result);
         return result;
     }
 
     //生成订单
     private void createOrderRecord(Integer tenantId, BigDecimal payAmount, String orderNo, TenantOrderRecordEnum tenantEnum, Integer orderState) {
-        LocalDateTime now = LocalDateTime.now();
         TenantOrderRecord record = new TenantOrderRecord();
         record.setTenantId(tenantId);
         record.setOrderNo(orderNo);
@@ -401,8 +411,11 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoDao, TenantInfo
         record.setExpectAmount(payAmount);
         record.setActualAmount(payAmount);
         record.setOrderState(orderState);
-        record.setPayDate(now.toLocalDate().toDate());
-        record.setPayTime(now.toDate());
+        LocalDateTime now = LocalDateTime.now();
+        if (orderState == 1) {
+            record.setPayDate(now.toLocalDate().toDate());
+            record.setPayTime(now.toDate());
+        }
         record.setCreatedTime(now.toDate());
         tenantOrderRecordService.save(record);
     }
@@ -415,19 +428,21 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoDao, TenantInfo
      */
     @Override
     public Msg orderNotify(Msg msg) {
-        log.info("tenant orderNotify >>>>> " + msg.toString());
+        log.info("tenant orderNotify >>>>> {}", msg);
         msg.setMsg("fail");
         Map<String, String> notifyMap = JSON.parseObject(msg.getResponseParameters(), Map.class);
         String orderNo = notifyMap.get("merMerOrderNo");
         TenantOrderRecord record = tenantOrderRecordService.getOne(new WrapperUtil<TenantOrderRecord>()
                 .hasEq("order_no_", orderNo).queryWrapper());
-        record.setTransNo(notifyMap.get("orderNo"));
         String channelType = notifyMap.get("channelType").equals("1") ? "WXPay" : (notifyMap.get("channelType").equals("2") ? "Alipay" : "quickPay");
         record.setPayChannel(channelType);
         //支付中订单存在,更新状态 tradeState 88就是正确的 其他错误的
         if (msg.getResponseType().equals("1") && notifyMap.size() > 0 && msg.getCode().equals("88")) {
             // notifyMap.put("totalMoney", notifyMap.get("payAmount"));
+            LocalDateTime now = LocalDateTime.now();
             record.setOrderState(1);
+            record.setPayDate(now.toLocalDate().toDate());
+            record.setPayTime(now.toDate());
             msg.setCode("000000");
             msg.setMsg("success");
             if (TenantOrderRecordEnum.TENANT_OPEN.getCode().equals(record.getOrderType())) {
@@ -437,9 +452,9 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoDao, TenantInfo
             //支付失败
             record.setOrderState(2);
         }
-        tenantOrderRecordService.update(record, new QueryWrapper<TenantOrderRecord>()
-                .eq("order_no_", record.getOrderNo()));
-        log.info("tenant orderNotify return>>>>> " + msg.toString());
+        log.info("tenant orderNotify return>>>>> {}", record);
+        tenantOrderRecordService.updateById(record);
+        log.info("tenant orderNotify return>>>>> {}", msg);
         return msg;
     }
 
@@ -447,12 +462,21 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoDao, TenantInfo
      * 校验手机号
      */
     private void checkPhone(TenantInfoDto dto) {
-        SysUser sysUser = Optional.ofNullable(dto)
+        //防止重复点击 加锁
+        String key = "Tenant_First_Add:" + dto.getPhone();
+        RBucket<Object> bucket = redissonClient.getBucket(key);
+        //原子操作 抢锁成功为true
+        if (!bucket.trySet(dto.getPhone(), 1L, TimeUnit.MINUTES)) {
+            throw new BizException("同一个手机号请勿频繁操作!");
+        }
+        SysUser sysUser = Optional.of(dto)
                 .map(TenantInfoDto::getPhone)
                 .map(sysUserFeignService::queryUserByMobile)
                 .orElse(null);
         if (Objects.nonNull(sysUser)) {
-            throw new BizException("该手机号已被注册!");
+            if (sysUser.getUserType().contains(SysUserType.SYSTEM.getCode())) {
+                throw new BizException("该手机号已被注册!");
+            }
         }
     }
 

+ 49 - 9
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TenantOrderRecordServiceImpl.java

@@ -1,29 +1,30 @@
 package com.ym.mec.biz.service.impl;
 
+import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ym.mec.biz.dal.dao.TenantOrderRecordDao;
 import com.ym.mec.biz.dal.dto.TenantOrderRecordDto;
-import com.ym.mec.biz.dal.entity.PlatformServe;
-import com.ym.mec.biz.dal.entity.PlatformServeDetail;
-import com.ym.mec.biz.dal.entity.TenantOrderRecord;
-import com.ym.mec.biz.dal.entity.TenantProductInfo;
+import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.enums.DealStatusEnum;
+import com.ym.mec.biz.dal.enums.PaymentChannelEnum;
 import com.ym.mec.biz.dal.enums.TenantOrderRecordEnum;
-import com.ym.mec.biz.service.PlatformServeDetailService;
-import com.ym.mec.biz.service.PlatformServeService;
-import com.ym.mec.biz.service.TenantOrderRecordService;
-import com.ym.mec.biz.service.TenantProductInfoService;
+import com.ym.mec.biz.service.*;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.page.PageUtil;
 import com.ym.mec.common.page.WrapperUtil;
+import com.ym.mec.thirdparty.adapay.Payment;
+import org.apache.commons.lang3.StringUtils;
+import org.joda.time.LocalDateTime;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.Date;
 import java.util.HashMap;
 import java.util.Map;
+import java.util.Objects;
 
 /**
  * 机构付款记录表(TenantOrderRecord)表服务实现类
@@ -41,6 +42,8 @@ public class TenantOrderRecordServiceImpl extends ServiceImpl<TenantOrderRecordD
     private PlatformServeService platformServeService;
     @Autowired
     private PlatformServeDetailService platformServeDetailService;
+    @Autowired
+    private TenantInfoService tenantInfoService;
 
     @Override
     public PageInfo<TenantOrderRecord> queryPage(TenantOrderRecordDto dto) {
@@ -55,6 +58,25 @@ public class TenantOrderRecordServiceImpl extends ServiceImpl<TenantOrderRecordD
     public Map<String, Object> checkTenantOrder(String orderNo) {
         TenantOrderRecord orderRecord = this.getOne(new WrapperUtil<TenantOrderRecord>()
                 .hasEq("order_no_", orderNo).queryWrapper());
+        if (StringUtils.equals(orderRecord.getPaymentChannel(), PaymentChannelEnum.ADAPAY.getCode())) {
+            Map<String, Object> payment;
+            try {
+                payment = Payment.queryPayment(orderRecord.getTransNo());
+                log.info("checkTenantOrder  payment >>>>> {}", payment);
+                if (Objects.nonNull(payment.get("status"))) {
+                    String status = (String) payment.get("status");
+                    if (status.equals("succeeded")) {
+                        orderRecord.setOrderState(1);
+                    } else if (status.equals("failed")) {
+                        orderRecord.setOrderState(2);
+                    }
+                }
+                log.info("checkTenantOrder  orderRecord >>>>> {}", JSON.toJSONString(orderRecord));
+            } catch (Exception e) {
+                log.error("checkTenantOrder  payment error>>>>> {}", JSON.toJSONString(orderRecord));
+            }
+        }
+
         //返回
         Map<String, Object> result = new HashMap<>();
         result.put("groupType", orderRecord.getOrderType());
@@ -68,7 +90,9 @@ public class TenantOrderRecordServiceImpl extends ServiceImpl<TenantOrderRecordD
         Map<String, Object> detail = new HashMap<>();
         result.put("detail", detail);
 
+        log.info("checkTenantOrder  getOrderState>>>>> {}", JSON.toJSONString(orderRecord));
         getOrderState(orderRecord, result);
+        log.info("checkTenantOrder  result >>>>> {}", result);
         return result;
     }
 
@@ -83,9 +107,16 @@ public class TenantOrderRecordServiceImpl extends ServiceImpl<TenantOrderRecordD
                     tenantOrderSuccess(orderRecord, detail);
                 }
                 code = DealStatusEnum.SUCCESS.getCode();
+                LocalDateTime now = LocalDateTime.now();
+                orderRecord.setPayDate(now.toLocalDate().toDate());
+                orderRecord.setPayTime(now.toDate());
+                //修改流水
+                baseMapper.updateById(orderRecord);
                 break;
             case 2:
                 code = DealStatusEnum.FAILED.getCode();
+                //修改流水
+                baseMapper.updateById(orderRecord);
                 break;
             default:
                 code = DealStatusEnum.ING.getCode();
@@ -105,7 +136,16 @@ public class TenantOrderRecordServiceImpl extends ServiceImpl<TenantOrderRecordD
                 .hasEq("id_", productInfo.getServeDetailId()).queryWrapper());
         detail.put("platformServeName", platformServe.getName());
         detail.put("mode", serveDetail.getMode());
-        detail.put("num",productInfo.getExpiryCount());
+        detail.put("num", productInfo.getExpiryCount());
+
+        TenantInfo tenantInfo = new TenantInfo();
+        tenantInfo.setId(orderRecord.getTenantId());
+        tenantInfo.setPayState(1);
+        tenantInfoService.updateById(tenantInfo);
+
+        productInfo.setPayDate(new Date());
+        productInfo.setTenantId(orderRecord.getTenantId());
+        tenantProductInfoService.updateById(productInfo);
     }
 
 }

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

@@ -7,7 +7,7 @@
         <id column="id_" property="id"/>
         <result column="organ_id_" property="organId"/>
         <result column="student_id_" property="studentId"/>
-        <result column="type_" property="type"/>
+        <result column="type_" property="type" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
         <result column="level_" property="level"/>
         <result column="time_" property="time"/>
         <result column="amount_" property="amount"/>
@@ -29,7 +29,7 @@
     	<id column="id_" property="cloudTeacherOrder.id"/>
         <result column="organ_id_" property="cloudTeacherOrder.organId"/>
         <result column="student_id_" property="cloudTeacherOrder.studentId"/>
-        <result column="type_" property="cloudTeacherOrder.type"/>
+        <result column="type_" property="cloudTeacherOrder.type" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
         <result column="level_" property="cloudTeacherOrder.level"/>
         <result column="time_" property="cloudTeacherOrder.time"/>
         <result column="amount_" property="cloudTeacherOrder.amount"/>
@@ -61,7 +61,7 @@
         <!--@mbg.generated-->
         insert into cloud_teacher_order (organ_id_,student_id_, type_, level_, time_, amount_, refund_amount_, status_,
         order_id_,start_time_,end_time_,remark_, create_time_, update_time_,music_group_id_,active_remark_,tenant_id_)
-        values (#{organId},#{studentId}, #{type},#{level}, #{time}, #{amount}, #{refundAmount},
+        values (#{organId},#{studentId}, #{type,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{level}, #{time}, #{amount}, #{refundAmount},
         #{status},#{orderId},#{startTime},#{endTime}, #{remark}, NOW(), NOW(),#{musicGroupId},#{activeRemark},#{tenantId})
     </insert>
     <update id="update" parameterType="com.ym.mec.biz.dal.entity.CloudTeacherOrder">
@@ -81,7 +81,7 @@
                 student_id_ = #{studentId},
             </if>
             <if test="type != null">
-                type_ = #{type},
+                type_ = #{type,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
             </if>
             <if test="level != null">
                 level_ = #{level},

+ 6 - 0
mec-biz/src/main/resources/config/mybatis/MusicGroupPaymentCalenderActivityDao.xml

@@ -24,4 +24,10 @@
       #{entity.originalAmount}, NOW(), NOW())
     </foreach>
   </insert>
+  <delete id="delByCalenderId">
+    DELETE FROM music_group_payment_calender_activity WHERE calender_id_ = #{calenderId}
+  </delete>
+    <select id="findByCalenderId" resultType="com.ym.mec.biz.dal.entity.MusicGroupPaymentCalenderActivity">
+      SELECT <include refid="Base_Column_List"/> FROM music_group_payment_calender_activity WHERE calender_id_ = #{calenderId}
+    </select>
 </mapper>

+ 22 - 7
mec-biz/src/main/resources/config/mybatis/MusicGroupPaymentCalenderMapper.xml

@@ -40,6 +40,8 @@
         <result column="music_repair_num_" property="musicRepairNum"/>
         <result column="music_repair_actual_price_" property="musicRepairActualPrice"/>
         <result column="music_repair_optional_flag_" property="musicRepairOptionalFlag"/>
+        <result column="current_total_amount_" property="currentTotalAmount"/>
+        <result column="original_total_amount_" property="originalTotalAmount"/>
     </resultMap>
 
     <!-- 根据主键查询一条记录 -->
@@ -60,14 +62,15 @@
         actual_num_,memo_,is_give_music_network_,create_time_,update_time_,payment_valid_start_date_,payment_valid_end_date_,
         payment_pattern_,payment_type_,payment_amount_,batch_no_,audit_memo_,operator_,attribute1_,
          attribute2_,student_ids_,member_payment_amount_,member_rank_setting_id_,member_valid_date_
-         ,original_member_payment_amount_,member_period_,member_optional_flag_,music_repair_num_,music_repair_actual_price_,music_repair_optional_flag_)
+         ,original_member_payment_amount_,member_period_,member_optional_flag_,
+         music_repair_num_,music_repair_actual_price_,music_repair_optional_flag_,current_total_amount_,original_total_amount_)
         VALUES(#{musicGroupId},#{musicGroupOrganizationCourseSettingId},#{payUserType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
         #{rejectReason},#{startPaymentDate},#{deadlinePaymentDate},#{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
         #{expectNum},#{actualNum},#{memo},#{isGiveMusicNetwork},now(),now(),
         #{paymentValidStartDate},#{paymentValidEndDate},#{paymentPattern},#{paymentType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
         #{paymentAmount},#{batchNo},#{auditMemo},#{operator},#{attribute1},#{attribute2},#{studentIds},
-               #{memberPaymentAmount},#{memberRankSettingId},#{memberValidDate},#{originalMemberPaymentAmount},#{memberPeriod},
-               #{memberOptionalFlag},#{musicRepairNum},#{musicRepairActualPrice},#{musicRepairOptionalFlag})
+               #{memberPaymentAmount},#{memberRankSettingId},#{memberValidDate},#{originalMemberPaymentAmount},#{memberPeriod,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
+               #{memberOptionalFlag},#{musicRepairNum},#{musicRepairActualPrice},#{musicRepairOptionalFlag},#{currentTotalAmount},#{originalTotalAmount})
     </insert>
 
     <insert id="batchInsert" parameterType="com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender" useGeneratedKeys="true"
@@ -77,15 +80,15 @@
         actual_num_,memo_,is_give_music_network_,create_time_,update_time_,payment_valid_start_date_,payment_valid_end_date_,payment_pattern_,payment_amount_,
         payment_type_,batch_no_,audit_memo_,operator_,attribute1_,attribute2_,student_ids_,
          member_payment_amount_,member_rank_setting_id_,member_valid_date_,original_member_payment_amount_,member_period_
-        ,member_optional_flag_,music_repair_num_,music_repair_actual_price_,music_repair_optional_flag_)
+        ,member_optional_flag_,music_repair_num_,music_repair_actual_price_,music_repair_optional_flag_,current_total_amount_,original_total_amount_)
         VALUES
         <foreach collection="list" item="item" index="index" separator=",">
         (#{item.musicGroupId},#{item.musicGroupOrganizationCourseSettingId},#{item.payUserType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{item.rejectReason},#{item.startPaymentDate},#{item.deadlinePaymentDate},#{item.status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
         #{item.expectNum},#{item.actualNum},#{item.memo},#{item.isGiveMusicNetwork},now(),now(),
         #{item.paymentValidStartDate},#{item.paymentValidEndDate},#{item.paymentPattern},#{item.paymentAmount},#{item.paymentType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
         #{item.batchNo},#{item.auditMemo},#{item.operator},#{item.attribute1},#{item.attribute2},
-         #{item.studentIds},#{item.memberPaymentAmount},#{item.memberRankSettingId},#{item.memberValidDate},#{item.originalMemberPaymentAmount},#{item.memberPeriod},
-            #{item.memberOptionalFlag},#{item.musicRepairNum},#{item.musicRepairActualPrice},#{item.musicRepairOptionalFlag})
+         #{item.studentIds},#{item.memberPaymentAmount},#{item.memberRankSettingId},#{item.memberValidDate},#{item.originalMemberPaymentAmount},#{item.memberPeriod,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
+            #{item.memberOptionalFlag},#{item.musicRepairNum},#{item.musicRepairActualPrice},#{item.musicRepairOptionalFlag},#{item.currentTotalAmount},#{item.originalTotalAmount})
         </foreach>
     </insert>
 
@@ -93,6 +96,12 @@
     <update id="update" parameterType="com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender">
         UPDATE music_group_payment_calender
         <set>
+            <if test="currentTotalAmount != null">
+                current_total_amount_ = #{currentTotalAmount},
+            </if>
+            <if test="originalTotalAmount != null">
+                original_total_amount_ = #{originalTotalAmount},
+            </if>
             <if test="memberOptionalFlag != null">
                 member_optional_flag_ = #{memberOptionalFlag},
             </if>
@@ -106,7 +115,7 @@
                 music_repair_optional_flag_ = #{musicRepairOptionalFlag},
             </if>
             <if test="memberPeriod != null">
-                member_period_ = #{memberPeriod},
+                member_period_ = #{memberPeriod,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
             </if>
             <if test="originalMemberPaymentAmount != null">
                 original_member_payment_amount_ = #{originalMemberPaymentAmount},
@@ -192,6 +201,12 @@
 	    <foreach collection="list" item="item" index="index" open="" close="" separator=";">
 	        UPDATE music_group_payment_calender
 	        <set>
+                <if test="item.currentTotalAmount != null">
+                    current_total_amount_ = #{item.currentTotalAmount},
+                </if>
+                <if test="item.originalTotalAmount != null">
+                    original_total_amount_ = #{item.originalTotalAmount},
+                </if>
                 <if test="item.originalMemberPaymentAmount != null">
                     original_member_payment_amount_ = #{item.originalMemberPaymentAmount},
                 </if>

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

@@ -35,10 +35,6 @@
 		SELECT * FROM organization WHERE id_ = #{id} 
 	</select>
 
-    <select id="getByName" parameterType="object" resultMap="Organization">
-        SELECT * FROM organization WHERE name_ = #{name} and tenant_id_ = #{tenantId}
-    </select>
-
     <!-- 全查询 -->
     <select id="findAll" resultMap="Organization">
 		SELECT * FROM organization ORDER BY id_

+ 28 - 0
mec-biz/src/main/resources/config/mybatis/TenantAssetsInfoMapper.xml

@@ -0,0 +1,28 @@
+<?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.TenantAssetsInfoDao">
+    <resultMap id="BaseResultMap" type="com.ym.mec.biz.dal.entity.TenantAssetsInfo">
+        <id column="id_" jdbcType="INTEGER" property="id"/>
+        <result column="tenant_id_" jdbcType="INTEGER" property="tenantId"/>
+        <result column="balance_" jdbcType="VARCHAR" property="balance"/>
+        <result column="frozen_amount_" jdbcType="VARCHAR" property="frozenAmount"/>
+        <result column="created_time_" jdbcType="TIMESTAMP" property="createdTime"/>
+        <result column="updated_time_" jdbcType="TIMESTAMP" property="updatedTime"/>
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        id_
+        , tenant_id_, balance_, frozen_amount_, created_time_, updated_time_
+    </sql>
+
+    <insert id="insertBatch" keyColumn="id_" keyProperty="id" useGeneratedKeys="true"
+            parameterType="com.ym.mec.biz.dal.entity.TenantAssetsInfo">
+        insert into tenant_assets_info(tenant_id_, balance_, frozen_amount_, created_time_, updated_time_)
+        values
+        <foreach collection="entities" item="entity" separator=",">
+            (#{entity.tenantId}, #{entity.balance}, #{entity.frozenAmount}, #{entity.createdTime},
+            #{entity.updatedTime})
+        </foreach>
+    </insert>
+
+</mapper>

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

@@ -169,9 +169,10 @@
 	<!-- 分页查询 -->
 	<select id="queryPage" resultMap="VipGroupActivity" parameterType="map">
 		SELECT
-		vga.*,((NOW() &lt; end_time_ AND NOW() > start_time_) OR end_time_ IS NULL) enable_
+		vga.*,((NOW() &lt; end_time_ AND NOW() > start_time_) OR end_time_ IS NULL) enable_,GROUP_CONCAT(vgc.name_) vip_group_category_names_
 		FROM vip_group_activity vga
 		LEFT JOIN activity_apply_student_type aps ON vga.id_ = aps.activity_id_
+		LEFT JOIN vip_group_category vgc ON FIND_IN_SET(vgc.id_,vga.vip_group_category_id_list_)
 		<include refid="queryCondition"/>
 		GROUP BY vga.id_
 		ORDER BY id_ DESC

+ 16 - 0
mec-biz/src/main/resources/rebel.xml

@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+  This is the JRebel configuration file. It maps the running application to your IDE workspace, enabling JRebel reloading for this project.
+  Refer to https://manuals.jrebel.com/jrebel/standalone/config.html for more information.
+-->
+<application generated-by="intellij" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.zeroturnaround.com" xsi:schemaLocation="http://www.zeroturnaround.com http://update.zeroturnaround.com/jrebel/rebel-2_3.xsd">
+
+	<id>mec-biz</id>
+
+	<classpath>
+		<dir name="E:/hgw/DYYM/项目/mec/mec-biz/target/classes">
+		</dir>
+	</classpath>
+
+</application>

+ 137 - 106
mec-common/audit-log/src/main/java/com/yonge/log/interceptor/AuditLogInterceptor.java

@@ -1,123 +1,154 @@
 package com.yonge.log.interceptor;
 
-import java.io.IOException;
-import java.nio.charset.Charset;
-import java.text.SimpleDateFormat;
-import java.util.*;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
+import com.ym.mec.util.json.JsonUtil;
+import com.ym.mec.util.web.WebUtil;
+import com.yonge.log.dal.model.AuditLog;
+import com.yonge.log.model.AuditLogAnnotation;
+import com.yonge.log.service.AuditLogService;
 import io.swagger.annotations.ApiOperation;
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
 import org.springframework.scheduling.annotation.Async;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
 import org.springframework.web.method.HandlerMethod;
 import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
-import com.ym.mec.util.json.JsonUtil;
-import com.ym.mec.util.web.WebUtil;
-import com.yonge.log.dal.model.AuditLog;
-import com.yonge.log.model.AuditLogAnnotation;
-import com.yonge.log.service.AuditLogService;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.nio.charset.Charset;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.Executor;
+import java.util.concurrent.ThreadPoolExecutor;
 
 /**
  * 日志审计的拦截器
  */
 public class AuditLogInterceptor extends HandlerInterceptorAdapter {
 
-	@Autowired
-	private AuditLogService auditLogService;
-
-	@Value("${spring.application.name}")
-	private String clientName;
-
-	private String username;
-
-	private Integer userId;
-
-	private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-
-	private static List<String> ignoreLogUrl;
-
-
-
-	@Override
-	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws ServletException, IOException {
-		return true;
-	}
-
-	@Override
-	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
-		syncSaveLog(request,handler);
-	}
-
-	@Async
-	private void syncSaveLog(HttpServletRequest request, Object handler){
-		try {
-			String servletPath = request.getServletPath();
-			HandlerMethod handlerMethod = (HandlerMethod) handler;
-			AuditLogAnnotation anno = handlerMethod.getMethodAnnotation(AuditLogAnnotation.class);
-			ApiOperation apiOperation = handlerMethod.getMethodAnnotation(ApiOperation.class);
-			String operateName = null;
-			if(StringUtils.isEmpty(operateName) && apiOperation != null){
-				operateName = apiOperation.value();
-			}
-			if(StringUtils.isEmpty(operateName) && anno != null){
-				operateName = anno.operateName();
-			}
-			if(anno != null){
-				saveLog(operateName,servletPath,request);
-				return;
-			}
-			if(servletPath.contains("/task/") || servletPath.contains("/import/") ){
-				return;
-			}
-			String substring = servletPath.substring(servletPath.lastIndexOf("/") + 1).toLowerCase();
-			if(ignoreLogUrl == null){
-				ignoreLogUrl = new ArrayList<>();
-				ignoreLogUrl.add("query");
-				ignoreLogUrl.add("get");
-				ignoreLogUrl.add("find");
-				ignoreLogUrl.add("list");
-				ignoreLogUrl.add("detail");
-				ignoreLogUrl.add("hasindexerrdata");
-				ignoreLogUrl.add("newindex");
-			}
-			for (String e : ignoreLogUrl) {
-				if(substring.contains(e)){
-					return;
-				}
-			}
-			saveLog(operateName,servletPath,request);
-		}catch (Exception e){
-			e.printStackTrace();
-		}
-	}
-
-	private void saveLog(String operateName,String servletPath,HttpServletRequest request) throws IOException {
-		AuditLog auditLog = new AuditLog();
-		auditLog.setOperateName(operateName);
-		auditLog.setInterfaceUrl(servletPath);
-		auditLog.setToken(request.getHeader("Authorization"));
-		auditLog.setService(clientName);
-		auditLog.setUserIp(WebUtil.getRemoteIp(request));
-
-		Map<String, Object> params = WebUtil.getParameterMap(request);
-		if (params == null || params.size() == 0) {
-			auditLog.setInputParams(IOUtils.toString(request.getInputStream(), Charset.defaultCharset()));
-		} else {
-			auditLog.setInputParams(JsonUtil.toJSONString(WebUtil.getParameterMap(request)));
-		}
-		// 操作人
-		auditLog.setUsername(username);
-		auditLog.setUserId(userId);
-		auditLog.setOperateTime(sdf.format(new Date()));
-		auditLogService.insert(auditLog);
-	}
-
-	public void setUsername(String username,Integer userId) {
-		this.username = username;
-		this.userId = userId;
-	}
+    @Autowired
+    private AuditLogService auditLogService;
+
+    @Value("${spring.application.name}")
+    private String clientName;
+
+    private String username;
+
+    private Integer userId;
+
+    private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+
+    private static List<String> ignoreLogUrl;
+
+    /**
+     * 异步线程池配置
+     */
+    @Bean("syncSaveLog")
+    public Executor asyncExecutor() {
+        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
+        // 设置核心线程数
+        executor.setCorePoolSize(10);
+        // 设置最大线程数
+        executor.setMaxPoolSize(100);
+        // 设置队列容量
+        executor.setQueueCapacity(1000);
+        // 设置线程活跃时间(秒)
+        executor.setKeepAliveSeconds(60);
+        // 设置默认线程名称
+        executor.setThreadNamePrefix("syncSaveLog-");
+        // 设置拒绝策略
+        executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
+        // 等待所有任务结束后再关闭线程池
+        executor.setWaitForTasksToCompleteOnShutdown(true);
+        executor.initialize();
+        return executor;
+    }
+
+
+    @Override
+    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws ServletException, IOException {
+        return true;
+    }
+
+    @Override
+    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
+        syncSaveLog(request, handler);
+    }
+
+    @Async("syncSaveLog")
+    public void syncSaveLog(HttpServletRequest request, Object handler) {
+        try {
+            String servletPath = request.getServletPath();
+            HandlerMethod handlerMethod = (HandlerMethod) handler;
+            AuditLogAnnotation anno = handlerMethod.getMethodAnnotation(AuditLogAnnotation.class);
+            ApiOperation apiOperation = handlerMethod.getMethodAnnotation(ApiOperation.class);
+            String operateName = null;
+            if (StringUtils.isEmpty(operateName) && apiOperation != null) {
+                operateName = apiOperation.value();
+            }
+            if (StringUtils.isEmpty(operateName) && anno != null) {
+                operateName = anno.operateName();
+            }
+            if (anno != null) {
+                saveLog(operateName, servletPath, request);
+                return;
+            }
+            if (servletPath.contains("/task/") || servletPath.contains("/import/")) {
+                return;
+            }
+            String substring = servletPath.substring(servletPath.lastIndexOf("/") + 1).toLowerCase();
+            if (ignoreLogUrl == null) {
+                ignoreLogUrl = new ArrayList<>();
+                ignoreLogUrl.add("query");
+                ignoreLogUrl.add("get");
+                ignoreLogUrl.add("find");
+                ignoreLogUrl.add("list");
+                ignoreLogUrl.add("detail");
+                ignoreLogUrl.add("hasindexerrdata");
+                ignoreLogUrl.add("newindex");
+            }
+            for (String e : ignoreLogUrl) {
+                if (substring.contains(e)) {
+                    return;
+                }
+            }
+            saveLog(operateName, servletPath, request);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    private void saveLog(String operateName, String servletPath, HttpServletRequest request) throws IOException {
+        AuditLog auditLog = new AuditLog();
+        auditLog.setOperateName(operateName);
+        auditLog.setInterfaceUrl(servletPath);
+        auditLog.setToken(request.getHeader("Authorization"));
+        auditLog.setService(clientName);
+        auditLog.setUserIp(WebUtil.getRemoteIp(request));
+
+        Map<String, Object> params = WebUtil.getParameterMap(request);
+        if (params == null || params.size() == 0) {
+            auditLog.setInputParams(IOUtils.toString(request.getInputStream(), Charset.defaultCharset()));
+        } else {
+            auditLog.setInputParams(JsonUtil.toJSONString(WebUtil.getParameterMap(request)));
+        }
+        // 操作人
+        auditLog.setUsername(username);
+        auditLog.setUserId(userId);
+        auditLog.setOperateTime(sdf.format(new Date()));
+        auditLogService.insert(auditLog);
+    }
+
+    public void setUsername(String username, Integer userId) {
+        this.username = username;
+        this.userId = userId;
+    }
 }

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

@@ -12,6 +12,7 @@ import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalenderDetail;
 import com.ym.mec.biz.dal.entity.MusicGroupStudentFee.PaymentStatus;
 import com.ym.mec.biz.dal.entity.StudentRegistration;
 import com.ym.mec.biz.service.MemberRankPrivilegesService;
+import com.ym.mec.biz.service.MusicGroupPaymentCalenderActivityService;
 import com.ym.mec.biz.service.MusicGroupPaymentCalenderService;
 import com.ym.mec.biz.service.StudentRegistrationService;
 import com.ym.mec.common.controller.BaseController;
@@ -48,6 +49,8 @@ public class MusicGroupPaymentCalenderController extends BaseController {
     private MusicGroupPaymentCalenderStudentDetailDao musicGroupPaymentCalenderStudentDetailDao;
     @Autowired
     private MusicGroupPaymentStudentCourseDetailDao musicGroupPaymentStudentCourseDetailDao;
+    @Autowired
+    private MusicGroupPaymentCalenderActivityService musicGroupPaymentCalenderActivityService;
 	@Autowired
 	private MemberRankPrivilegesService memberRankPrivilegesService;
 
@@ -76,14 +79,17 @@ public class MusicGroupPaymentCalenderController extends BaseController {
                 return failed("乐团报名信息不存在");
             }
             ModelMap model = new ModelMap();
+            //课程相关信息
             if(calender.getPaymentType() == MusicGroupPaymentCalender.PaymentType.SPAN_GROUP_CLASS_ADJUST){
                 model.put("musicGroupPaymentCalenderStudentDetails",musicGroupPaymentCalenderStudentDetailDao.findByBatchNoAndUserId(calender.getBatchNo(),userId));
             }else {
                 model.put("calenderCourseSettings", musicGroupPaymentStudentCourseDetailDao.findByCalenderAndUserId(calenderId,userId));
             }
+            //活动相关信息
+            model.put("activity",musicGroupPaymentCalenderActivityService.findByCalenderId(calenderId));
             calender.setMemberPaymentAmount(calenderDetail.getExpectMemberAmount());
             model.put("musicGroup",musicGroupDao.get(musicGroupId));
-            model.put("amount", calenderDetail.getExpectAmount().add(calenderDetail.getExpectMemberAmount()));
+            model.put("amount", calender.getPaymentAmount());
             model.put("balance",studentRegistration.getBalance());
             model.put("calender",calender);
             model.put("memberPrivilegesItemList", memberRankPrivilegesService.queryByMemberRankId(calender.getMemberRankSettingId()));

+ 33 - 201
mec-student/src/main/java/com/ym/mec/student/controller/StudentOrderController.java

@@ -1,109 +1,45 @@
 package com.ym.mec.student.controller;
 
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiImplicitParams;
-import io.swagger.annotations.ApiOperation;
-
-import java.io.IOException;
-import java.math.BigDecimal;
-import java.net.URLEncoder;
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Calendar;
-import java.util.Comparator;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.stream.Collectors;
-
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.commons.collections.CollectionUtils;
-import org.apache.commons.lang.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.http.HttpStatus;
-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;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
-
 import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONObject;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
-import com.ym.mec.biz.dal.dao.ChildrenDayDegreeDetailDao;
-import com.ym.mec.biz.dal.dao.CourseScheduleEvaluateDao;
-import com.ym.mec.biz.dal.dao.DegreeRegistrationDao;
-import com.ym.mec.biz.dal.dao.MusicGroupPaymentCalenderCourseSettingsDao;
-import com.ym.mec.biz.dal.dao.MusicGroupPaymentCalenderDao;
-import com.ym.mec.biz.dal.dao.OrganizationDao;
-import com.ym.mec.biz.dal.dao.ReplacementInstrumentActivityDao;
-import com.ym.mec.biz.dal.dao.StudentGoodsSellDao;
-import com.ym.mec.biz.dal.dao.StudentPaymentOrderDao;
-import com.ym.mec.biz.dal.dao.StudentRegistrationDao;
-import com.ym.mec.biz.dal.dao.SysConfigDao;
-import com.ym.mec.biz.dal.dao.SysCouponCodeDao;
-import com.ym.mec.biz.dal.dao.VipGroupActivityDao;
-import com.ym.mec.biz.dal.dto.CloudTeacherOrderDto;
-import com.ym.mec.biz.dal.dto.LuckStatisDto;
-import com.ym.mec.biz.dal.dto.OrderStatisDto;
-import com.ym.mec.biz.dal.dto.Practice4OrganDto;
-import com.ym.mec.biz.dal.dto.PracticeGroupStatisDto;
-import com.ym.mec.biz.dal.dto.PracticeGroupsDto;
-import com.ym.mec.biz.dal.dto.StudentPaymentOrderDto;
-import com.ym.mec.biz.dal.dto.StudentPaymentOrderExportDto;
-import com.ym.mec.biz.dal.dto.VipBuyResultDto;
-import com.ym.mec.biz.dal.entity.DegreeRegistration;
-import com.ym.mec.biz.dal.entity.Goods;
-import com.ym.mec.biz.dal.entity.LuckDrawCount;
-import com.ym.mec.biz.dal.entity.MusicGroup;
-import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender;
-import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalenderCourseSettings;
-import com.ym.mec.biz.dal.entity.Organization;
-import com.ym.mec.biz.dal.entity.SellOrder;
-import com.ym.mec.biz.dal.entity.SporadicChargeInfo;
-import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
-import com.ym.mec.biz.dal.entity.StudentPaymentOrderDetail;
-import com.ym.mec.biz.dal.entity.StudentRegistration;
-import com.ym.mec.biz.dal.entity.TenantPaymentOrder;
+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.CourseViewTypeEnum;
 import com.ym.mec.biz.dal.enums.DealStatusEnum;
 import com.ym.mec.biz.dal.enums.GroupType;
 import com.ym.mec.biz.dal.enums.OrderTypeEnum;
 import com.ym.mec.biz.dal.page.StudentPaymentOrderQueryInfo;
-import com.ym.mec.biz.service.CloudTeacherOrderService;
-import com.ym.mec.biz.service.LuckDrawCountService;
-import com.ym.mec.biz.service.MusicGroupService;
-import com.ym.mec.biz.service.SellOrderService;
-import com.ym.mec.biz.service.SporadicChargeInfoService;
-import com.ym.mec.biz.service.StudentPaymentOrderDetailService;
-import com.ym.mec.biz.service.StudentPaymentOrderService;
-import com.ym.mec.biz.service.SysConfigService;
-import com.ym.mec.biz.service.TenantOrderRecordService;
-import com.ym.mec.biz.service.TenantPaymentOrderService;
-import com.ym.mec.biz.service.VipGroupService;
+import com.ym.mec.biz.service.*;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.tenant.TenantContextHolder;
-import com.ym.mec.thirdparty.adapay.ConfigInit;
 import com.ym.mec.thirdparty.adapay.Payment;
 import com.ym.mec.thirdparty.yqpay.Msg;
 import com.ym.mec.util.date.DateUtil;
 import com.ym.mec.util.http.HttpUtil;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.lang.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.http.HttpStatus;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.math.BigDecimal;
+import java.net.URLEncoder;
+import java.util.*;
+import java.util.stream.Collectors;
 
 @RequestMapping("studentOrder")
 @Api(tags = "订单回调")
@@ -159,6 +95,8 @@ public class StudentOrderController extends BaseController {
     private SellOrderService sellOrderService;
     @Autowired
     private TenantOrderRecordService tenantOrderRecordService;
+    @Autowired
+    private OrderPayOpsService orderPayOpsService;
 
     @Value("${spring.profiles.active:dev}")
     private String profiles;
@@ -214,6 +152,7 @@ public class StudentOrderController extends BaseController {
         }
         StudentPaymentOrder orderByOrderNo = studentPaymentOrderService.findOrderByOrderNo(orderNo);
         if (Objects.isNull(orderByOrderNo)) {
+            logger.info("checkOrderStatus >>>> tenantOrder {}", orderNo);
             Map<String, Object> tenantOrder = tenantOrderRecordService.checkTenantOrder(orderNo);
             if (Objects.nonNull(tenantOrder)) {
                 return succeed(tenantOrder);
@@ -304,120 +243,13 @@ public class StudentOrderController extends BaseController {
             @ApiImplicitParam(name = "orderNo", value = "订单号", required = true, dataType = "String"),
             @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()) {
-                return failed("微信支付请先授权");
-            }
-            String wxMpOAuth2AccessTokenUrl = String.format(ConfigInit.wxMpOAuth2AccessTokenUrl, ConfigInit.wxAppId, ConfigInit.wxAppSecret, code);
-            Map<String, String> weChatRes = JSON.parseObject(HttpUtil.get(wxMpOAuth2AccessTokenUrl, new HashMap<>()), Map.class);
-            if (!weChatRes.containsKey("openid")) {
-                return failed("授权失败,请重新授权");
-            }
-            openId = weChatRes.get("openid");
-        }
-
-        Date createTime = null;
-        TenantPaymentOrder tenantPaymentOrder = null;
-        StudentPaymentOrder studentPaymentOrder = null;
-        if (platform != null && platform.equals("teacher")) {
-            tenantPaymentOrder = tenantPaymentOrderService.queryByOrderNo(orderNo);
-        } else {
-            studentPaymentOrder = studentPaymentOrderService.findOrderByOrderNo(orderNo);
-        }
-
-        if (studentPaymentOrder == null && tenantPaymentOrder == null) {
-            return failed("订单不存在");
-        }
-        if (studentPaymentOrder != null && !studentPaymentOrder.getStatus().equals(DealStatusEnum.ING)) {
-            String msg = studentPaymentOrder.getStatus().equals(DealStatusEnum.SUCCESS) ? "订单已支付,请勿重复支付" : "订单已关闭,不能支付";
-            return failed(msg);
-        }
-        if (tenantPaymentOrder != null && !tenantPaymentOrder.getStatus().equals(DealStatusEnum.ING)) {
-            String msg = tenantPaymentOrder.getStatus().equals(DealStatusEnum.SUCCESS) ? "订单已支付,请勿重复支付" : "订单已关闭,不能支付";
-            return failed(msg);
-        }
-
-        if (studentPaymentOrder != null) {
-            createTime = studentPaymentOrder.getCreateTime();
-        } else {
-            createTime = tenantPaymentOrder.getCreateTime();
-        }
-
-        Calendar beforeTime = Calendar.getInstance();
-        beforeTime.add(Calendar.MINUTE, -28);// 28 分钟之前的时间
-        Date beforeDate = beforeTime.getTime();
-        if (createTime.before(beforeDate)) {
-            return failed("订单已超时,请重新下单");
-        }
-
-        Date expireDate = DateUtil.addMinutes(createTime, 30);
-        String timeExpire = new SimpleDateFormat("yyyyMMddHHmmss").format(expireDate);
-
-        Map<String, Object> paymentParams = new HashMap<>();
-        paymentParams.put("app_id", ConfigInit.appId);
-        paymentParams.put("order_no", orderNo);
-        paymentParams.put("pay_channel", payChannel);
-        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);
-        paymentParams.put("pay_mode", "delay");
-
-        //延时分账时不需要
-//        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", 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));
-//        }
-
-        Map<String, Object> expendParams = new HashMap<>(5);
-
-        expendParams.put("open_id", openId);
-        expendParams.put("is_raw", "1");
-        expendParams.put("callback_url", returnUrl);
-        expendParams.put("limit_pay", "1");
-
-        paymentParams.put("expend", expendParams);
-
-        Map<String, Object> payment = Payment.executePayment(paymentParams);
-
-        if (studentPaymentOrder != null) {
-            studentPaymentOrder.setTransNo((String) payment.get("id"));
-            studentPaymentOrderService.update(studentPaymentOrder);
-        } else {
-            tenantPaymentOrder.setTransNo((String) payment.get("id"));
-            tenantPaymentOrderService.update(tenantPaymentOrder);
+    public Object executePayment(BigDecimal amount, String orderNo, String payChannel, String notifyUrl, String returnUrl, String orderSubject, String orderBody, String sign, String code, String platform) {
+        try {
+            Map<String, Object> payment = orderPayOpsService.executePayment(amount, orderNo, payChannel, returnUrl, orderSubject, orderBody, sign, code, platform);
+            return succeed(payment);
+        } catch (Exception e) {
+            return failed(e.getMessage());
         }
-
-        return succeed(payment);
     }
 
     @GetMapping("/authorize")

+ 40 - 0
mec-web/src/main/java/com/ym/mec/web/controller/TenantAssetsInfoController.java

@@ -0,0 +1,40 @@
+package com.ym.mec.web.controller;
+
+
+import com.ym.mec.biz.dal.entity.CourseSchedule;
+import com.ym.mec.biz.dal.entity.TenantAssetsInfo;
+import com.ym.mec.biz.service.TenantAssetsInfoService;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import org.springframework.web.bind.annotation.*;
+import com.ym.mec.common.controller.BaseController;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * 机构资产信息(TenantAssetsInfo)表控制层
+ *
+ * @author hgw
+ * @since 2021-12-22 14:27:02
+ */
+@RestController
+@RequestMapping("/tenantAssetsInfo")
+public class TenantAssetsInfoController extends BaseController {
+    /**
+     * 服务对象
+     */
+    @Resource
+    private TenantAssetsInfoService tenantAssetsInfoService;
+
+    @ApiOperation("修改机构启用停用状态")
+    @GetMapping(value = "/ops/{id}")
+//    @PreAuthorize("@pcs.hasPermissions('tenantInfo/opsState')")
+    public Object opsState() {
+        tenantAssetsInfoService.courseDeductionRules(null);
+        return succeed();
+    }
+
+
+}
+

+ 7 - 2
mec-web/src/main/java/com/ym/mec/web/controller/TenantInfoController.java

@@ -77,11 +77,16 @@ public class TenantInfoController extends BaseController {
     @ApiOperation("机构支付")
     @GetMapping(value = "/pay/{id}")
     public Object pay(@ApiParam(value = "机构ID", required = true) @PathVariable("id") Integer id) throws Exception {
-        return succeed(tenantInfoService.pay(id));
+        return succeed(tenantInfoService.tenantOpenPay(id));
     }
 
+    /**
+     * 支付回调-第三方回调地址
+     * @param msg
+     * @return
+     */
     @PostMapping("/notify")
-    public Msg notify(@ModelAttribute Msg msg) throws Exception {
+    public Msg notify(@ModelAttribute Msg msg) {
         return tenantInfoService.orderNotify(msg);
     }
 

+ 30 - 1
mec-web/src/main/java/com/ym/mec/web/controller/TenantOrderRecordController.java

@@ -2,17 +2,22 @@ package com.ym.mec.web.controller;
 
 
 import com.ym.mec.biz.dal.dto.TenantOrderRecordDto;
-import com.ym.mec.biz.dal.entity.TenantOrderRecord;
+import com.ym.mec.biz.service.OrderPayOpsService;
 import com.ym.mec.biz.service.TenantOrderRecordService;
 import com.ym.mec.common.controller.BaseController;
 import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
 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 javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.util.Map;
 
 /**
  * 机构付款记录表(TenantOrderRecord)表控制层
@@ -29,6 +34,8 @@ public class TenantOrderRecordController extends BaseController {
      */
     @Resource
     private TenantOrderRecordService tenantOrderRecordService;
+    @Autowired
+    private OrderPayOpsService orderPayOpsService;
 
     @ApiOperation("分页查询")
     @PostMapping(value = "/queryPage")
@@ -36,5 +43,27 @@ public class TenantOrderRecordController extends BaseController {
         return tenantOrderRecordService.queryPage(dto);
     }
 
+    @ApiOperation(value = "自测用的")
+    @PostMapping("/executePayment")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "amount", value = "支付金额", required = true, dataType = "BigDecimal"),
+            @ApiImplicitParam(name = "orderNo", value = "订单号", required = true, dataType = "String"),
+            @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) {
+        try {
+            Map<String, Object> payment = orderPayOpsService.executePayment(amount, orderNo, payChannel, returnUrl, orderSubject, orderBody, sign, code, platform);
+            return succeed(payment);
+        } catch (Exception e) {
+            return failed(e.getMessage());
+        }
+    }
+
+    @ApiOperation(value = "自测用的")
+    @PostMapping("/checkTenantOrder")
+    public Object checkTenantOrder(String orderNo) {
+        return succeed(tenantOrderRecordService.checkTenantOrder(orderNo));
+    }
+
 }
 

+ 3 - 3
mec-web/src/main/resources/logback-spring.xml

@@ -43,7 +43,7 @@
 		</encoder>
 	</appender>
 
-	<logger name="com.ym.mec" level="WARN" />
+	<logger name="com.ym.mec" level="INFO" />
 
 	<logger name="com.ym.mec.thirdparty" level="INFO"
 			additivity="false">
@@ -52,14 +52,14 @@
 
 	<!--开发环境:打印控制台 -->
 	<springProfile name="dev">
-		<root level="WARN">
+		<root level="INFO">
 			<appender-ref ref="stdout" />
 			<appender-ref ref="file" />
 		</root>
 	</springProfile>
 
 	<springProfile name="test">
-		<root level="WARN">
+		<root level="INFO">
 			<appender-ref ref="stdout" />
 			<appender-ref ref="file" />
 		</root>