Browse Source

Merge remote-tracking branch 'origin/saas' into saas

zouxuan 3 years ago
parent
commit
6235dcfb35
65 changed files with 4689 additions and 4121 deletions
  1. 25 24
      cms/src/main/java/com/ym/mec/cms/controller/NewsController.java
  2. 10 10
      cms/src/main/java/com/ym/mec/cms/service/impl/SysNewsInformationServiceImpl.java
  3. 3 12
      cms/src/main/resources/config/mybatis/SysNewsInformationMapper.xml
  4. 4 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CloudTeacherOrderDao.java
  5. 3 4
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/SubjectDao.java
  6. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/SysCouponIssueRecordDao.java
  7. 2 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/SysEmailDao.java
  8. 4 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/SysMusicScoreCategoriesDao.java
  9. 3 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TenantInfoDao.java
  10. 11 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/Subject.java
  11. 2 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/SysMusicScoreCategories.java
  12. 144 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/TenantProductSumm.java
  13. 31 2
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/CouponDetailTypeEnum.java
  14. 24 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/SubjectQueryInfo.java
  15. 1 0
      mec-biz/src/main/java/com/ym/mec/biz/service/CloudTeacherOrderService.java
  16. 0 9
      mec-biz/src/main/java/com/ym/mec/biz/service/MusicGroupService.java
  17. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/SubjectService.java
  18. 24 1
      mec-biz/src/main/java/com/ym/mec/biz/service/SysCouponCodeService.java
  19. 1 0
      mec-biz/src/main/java/com/ym/mec/biz/service/SysEmailService.java
  20. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/service/SysMusicScoreCategoriesService.java
  21. 3 0
      mec-biz/src/main/java/com/ym/mec/biz/service/TenantInfoService.java
  22. 12 3
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CloudTeacherOrderServiceImpl.java
  23. 3 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/EduPracticeGroupServiceImpl.java
  24. 4 59
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java
  25. 7 4
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/OrderPayOpsServiceImpl.java
  26. 196 199
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/PracticeGroupServiceImpl.java
  27. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRegistrationServiceImpl.java
  28. 29 26
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRepairServiceImpl.java
  29. 98 98
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SubjectChangeServiceImpl.java
  30. 18 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SubjectServiceImpl.java
  31. 93 7
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysCouponCodeServiceImpl.java
  32. 2 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysCouponIssueRecordServiceImpl.java
  33. 4 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysCouponServiceImpl.java
  34. 4 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysEmailServiceImpl.java
  35. 16 14
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysMessageServiceImpl.java
  36. 79 11
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysMusicScoreCategoriesServiceImpl.java
  37. 21 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TenantInfoServiceImpl.java
  38. 7 6
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TenantOrderRecordServiceImpl.java
  39. 3518 3513
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java
  40. 21 3
      mec-biz/src/main/resources/config/mybatis/CloudTeacherOrderMapper.xml
  41. 1 1
      mec-biz/src/main/resources/config/mybatis/IndexBaseMonthDataMapper.xml
  42. 2 2
      mec-biz/src/main/resources/config/mybatis/IndexErrDataRecordMapper.xml
  43. 1 1
      mec-biz/src/main/resources/config/mybatis/StudentMapper.xml
  44. 3 2
      mec-biz/src/main/resources/config/mybatis/StudentRegistrationMapper.xml
  45. 18 3
      mec-biz/src/main/resources/config/mybatis/SubjectMapper.xml
  46. 1 0
      mec-biz/src/main/resources/config/mybatis/SysCouponCodeMapper.xml
  47. 48 35
      mec-biz/src/main/resources/config/mybatis/SysCouponIssueRecordMapper.xml
  48. 2 5
      mec-biz/src/main/resources/config/mybatis/SysCouponMapper.xml
  49. 27 22
      mec-biz/src/main/resources/config/mybatis/SysEmailMapper.xml
  50. 8 0
      mec-biz/src/main/resources/config/mybatis/SysMusicScoreCategoriesMapper.xml
  51. 16 0
      mec-biz/src/main/resources/config/mybatis/TenantInfoMapper.xml
  52. 10 6
      mec-biz/src/main/resources/config/mybatis/TenantOrderRecordMapper.xml
  53. 12 0
      mec-common/common-core/src/main/java/com/ym/mec/common/page/WrapperUtil.java
  54. 12 2
      mec-student/src/main/java/com/ym/mec/student/controller/StudentManageController.java
  55. 2 0
      mec-student/src/main/java/com/ym/mec/student/controller/StudentOrderController.java
  56. 2 2
      mec-student/src/main/java/com/ym/mec/student/controller/SysMusicScoreAccompanimentController.java
  57. 23 11
      mec-student/src/main/java/com/ym/mec/student/controller/SysMusicScoreCategoriesController.java
  58. 1 1
      mec-web/src/main/java/com/ym/mec/web/controller/AppRedemptionCodeController.java
  59. 14 0
      mec-web/src/main/java/com/ym/mec/web/controller/CloudTeacherOrderController.java
  60. 13 0
      mec-web/src/main/java/com/ym/mec/web/controller/EmployeeController.java
  61. 5 4
      mec-web/src/main/java/com/ym/mec/web/controller/SubjectController.java
  62. 22 3
      mec-web/src/main/java/com/ym/mec/web/controller/SysEmailController.java
  63. 1 1
      mec-web/src/main/java/com/ym/mec/web/controller/TenantAssetsInfoController.java
  64. 11 3
      mec-web/src/main/java/com/ym/mec/web/controller/TenantInfoController.java
  65. 1 1
      mec-web/src/main/java/com/ym/mec/web/controller/TenantOrderRecordController.java

+ 25 - 24
cms/src/main/java/com/ym/mec/cms/controller/NewsController.java

@@ -1,15 +1,16 @@
 package com.ym.mec.cms.controller;
 
-import com.ym.mec.cms.dal.dao.StudentRegistrationDao;
-import com.ym.mec.cms.dal.entity.SysConfig;
-import com.ym.mec.cms.service.SysConfigService;
-import com.ym.mec.util.date.DateUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiOperation;
 
-import java.time.LocalDate;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
 import java.util.stream.Collectors;
 
 import org.apache.commons.lang3.StringUtils;
@@ -25,8 +26,11 @@ import org.springframework.web.bind.annotation.RestController;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.cms.controller.queryinfo.NewsInformationQueryInfo;
+import com.ym.mec.cms.dal.dao.StudentRegistrationDao;
 import com.ym.mec.cms.dal.dao.SysNewsInformationDao;
+import com.ym.mec.cms.dal.entity.SysConfig;
 import com.ym.mec.cms.dal.entity.SysNewsInformation;
+import com.ym.mec.cms.service.SysConfigService;
 import com.ym.mec.cms.service.SysNewsInformationService;
 import com.ym.mec.cms.service.SysNewsTypeService;
 import com.ym.mec.common.controller.BaseController;
@@ -34,8 +38,6 @@ import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.web.WebFeignService;
 import com.yonge.log.model.AuditLogAnnotation;
 
-import javax.servlet.http.HttpServletRequest;
-
 @RestController
 @RequestMapping("news")
 @Api(tags = "资讯服务")
@@ -62,12 +64,14 @@ public class NewsController extends BaseController {
 	@Autowired
 	private SysConfigService sysConfigService;
 
-	private final LocalDate xiaMenBannerStartShowTime = LocalDate.parse("2021-10-10", DateUtil.dateFormatter);
-
 	@ApiOperation("资讯列表分页查询")
 	@GetMapping(value = "/list")
 	public Object getList(NewsInformationQueryInfo queryInfo) {
 		SysUser user = sysUserFeignService.queryUserInfo();
+		
+		if(queryInfo.getType() == 6 || queryInfo.getType() == 7){
+			queryInfo.setTenantId(-1);
+		}
 
 		String clientId = queryInfo.getClientId();
 		
@@ -92,13 +96,6 @@ public class NewsController extends BaseController {
 			queryInfo.setExcludeIds(excludeIds);
 		} else {
 			queryInfo.setOrganId(user.getOrganId());
-			int memberGroupNum = studentRegistrationDao.countStudentMemberGroupNum(user.getId());
-
-			//厦门学员
-			boolean xiaMenNotShow = (user.getOrganId()==40 || user.getOrganId() == 23 || user.getOrganId() == 25)&&LocalDate.now().compareTo(xiaMenBannerStartShowTime)<0;
-			if(memberGroupNum>0||xiaMenNotShow){
-				queryInfo.setExcludeIds(excludeIds);
-			}
 		}
 		
 		Map<String, Object> params = new HashMap<String, Object>();
@@ -114,6 +111,10 @@ public class NewsController extends BaseController {
 	@GetMapping(value = "/queryPage")
 	public Object queryPage(NewsInformationQueryInfo queryInfo) {
 		
+		if(queryInfo.getType() == 6 || queryInfo.getType() == 7){
+			queryInfo.setTenantId(-1);
+		}
+		
 		Map<String, Object> params = new HashMap<String, Object>();
 		MapUtil.populateMap(params, queryInfo);
 		int count = sysNewsInformationDao.queryCount(params);
@@ -144,12 +145,6 @@ public class NewsController extends BaseController {
 			queryInfo.setExcludeIds(excludeIds);
 		} else {
 			queryInfo.setOrganId(user.getOrganId());
-			int memberGroupNum = studentRegistrationDao.countStudentMemberGroupNum(user.getId());
-			//厦门学员
-			boolean xiaMenNotShow = (user.getOrganId()==40 || user.getOrganId() == 23 || user.getOrganId() == 25)&&LocalDate.now().compareTo(xiaMenBannerStartShowTime)<0;
-			if(memberGroupNum>0||xiaMenNotShow){
-				queryInfo.setExcludeIds(excludeIds);
-			}
 		}
 		return succeed(sysNewsInformationService.getHomeList(user, queryInfo));
 	}
@@ -167,6 +162,10 @@ public class NewsController extends BaseController {
 	@AuditLogAnnotation(operateName = "资讯新增",interfaceURL = "news/add")
 	@PreAuthorize("@pcs.hasPermissions('news/add')")
 	public Object add(SysNewsInformation newsInfo) {
+		
+		if(newsInfo.getType() == 6 || newsInfo.getType() == 7){
+			newsInfo.setTenantId(-1);
+		}
 		return succeed(sysNewsInformationService.insert(newsInfo));
 	}
 
@@ -177,7 +176,9 @@ public class NewsController extends BaseController {
 	public Object update(SysNewsInformation newsInfo) {
 		Date date = new Date();
 		newsInfo.setUpdateTime(date);
-
+		if(newsInfo.getType() == 6 || newsInfo.getType() == 7){
+			newsInfo.setTenantId(-1);
+		}
 		return succeed(sysNewsInformationService.update(newsInfo));
 	}
 

+ 10 - 10
cms/src/main/java/com/ym/mec/cms/service/impl/SysNewsInformationServiceImpl.java

@@ -1,6 +1,5 @@
 package com.ym.mec.cms.service.impl;
 
-import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Date;
@@ -116,15 +115,6 @@ public class SysNewsInformationServiceImpl extends BaseServiceImpl<Long, SysNews
 		}*/
 		homeList.put("banner",pageInfos);
 		
-		queryInfo.setMemo(memo);
-		queryInfo.setType(6);
-		MapUtil.populateMap(params, queryInfo);
-		count = sysNewsInformationDao.queryHomeCount(params);
-		if(count == 0){
-			queryInfo.setMemo(null);
-		}
-		homeList.put("app",queryHomePage(queryInfo));
-		
 		queryInfo.setMemo(null);
 		queryInfo.setType(1);
 		homeList.put("active",queryHomePage(queryInfo));
@@ -133,6 +123,16 @@ public class SysNewsInformationServiceImpl extends BaseServiceImpl<Long, SysNews
 		
 		queryInfo.setType(5);
 		homeList.put("flash",queryHomePage(queryInfo));
+		
+		queryInfo.setMemo(memo);
+		queryInfo.setType(6);
+		queryInfo.setTenantId(-1);
+		MapUtil.populateMap(params, queryInfo);
+		count = sysNewsInformationDao.queryHomeCount(params);
+		if(count == 0){
+			queryInfo.setMemo(null);
+		}
+		homeList.put("app",queryHomePage(queryInfo));
 		return homeList;
 	}
 	

+ 3 - 12
cms/src/main/resources/config/mybatis/SysNewsInformationMapper.xml

@@ -40,16 +40,13 @@
 	
 	<sql id="queryCondition">
 		<where>
-			sni.del_flag_=0 
+			sni.del_flag_=0 and sni.tenant_id_ = #{tenantId}
 			<if test="type != null">
 				and sni.type_ = #{type}
 			</if>
 			<if test="subType != null">
 				and sni.sub_type_ = #{subType}
 			</if>
-			<if test="tenantId != null">
-				and sni.tenant_id_ = #{tenantId}
-			</if>
 			<if test="status != null">
 				and sni.status_ = #{status, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
 			</if>
@@ -205,7 +202,7 @@
 	<!-- 分页查询 -->
 	<select id="queryHomePage" resultMap="SysNewsInformation"
 		parameterType="map">
-		SELECT sni.*,GROUP_CONCAT(s.name_) subject_name_ FROM sys_news_information sni left join subject s on find_in_set(s.id_,sni.subject_id_list_) where sni.del_flag_=0
+		SELECT sni.*,GROUP_CONCAT(s.name_) subject_name_ FROM sys_news_information sni left join subject s on find_in_set(s.id_,sni.subject_id_list_) where sni.del_flag_=0 and sni.tenant_id_ = #{tenantId}
 		<if test="type != null">
 			and sni.type_ = #{type}
 		</if>
@@ -222,9 +219,6 @@
 		<if test="search != null">
 			and sni.title_ like '%' #{search} '%'
 		</if>
-		<if test="tenantId != null">
-			and sni.tenant_id_ = #{tenantId}
-		</if>
 		<if test="excludeIds!=null and excludeIds.size()>0">
 			AND sni.id_ NOT IN
 			<foreach collection="excludeIds" item="excludeId" open="(" close=")" separator=",">
@@ -254,7 +248,7 @@
 
 	<!-- 查询当前表的总记录数 -->
 	<select id="queryHomeCount" resultType="int">
-		SELECT COUNT(sni.id_) FROM sys_news_information sni where sni.del_flag_=0
+		SELECT COUNT(sni.id_) FROM sys_news_information sni where sni.del_flag_=0 and sni.tenant_id_ = #{tenantId}
 		<if test="type != null">
 			and sni.type_ = #{type}
 		</if>
@@ -271,9 +265,6 @@
 		<if test="search != null">
 			and sni.title_ like '%' #{search} '%'
 		</if>
-		<if test="tenantId != null">
-			and sni.tenant_id_ = #{tenantId}
-		</if>
 			<if test="subjectId != null">
 				and find_in_set(#{subjectId},sni.subject_id_list_)
 			</if>

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

@@ -104,4 +104,8 @@ public interface CloudTeacherOrderDao extends BaseDAO<Long, CloudTeacherOrder> {
     List<CloudTeacherOrder> findByPlatformOrderId(Integer id);
 
     int checkOrdered(@Param("cloudTeacherStudentIds")String join);
+    
+    List<CloudTeacherOrder> queryByUserIdAndStatus(@Param("userId")Integer userId, @Param("status")Integer status);
+
+    List<String> findUserNameByOrderId(@Param("platformOrderId")Integer platformOrderId);
 }

+ 3 - 4
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/SubjectDao.java

@@ -165,10 +165,9 @@ public interface SubjectDao extends BaseDAO<Integer, Subject> {
 
     /**
      * 按id或名称模糊搜索
-     *
-     * @param parentSubjectId 按父Id查询
-     * @param search 搜索条件
      * @return 查询结果
      */
-    List<Subject> search(@Param("parentSubjectId")Integer parentSubjectId, @Param("search") String search);
+    List<Subject> queryPageByIdOrName(Map<String, Object> params);
+
+    int queryPageByIdOrNameCount(Map<String, Object> params);
 }

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

@@ -37,6 +37,6 @@ public interface SysCouponIssueRecordDao extends BaseMapper<SysCouponIssueRecord
      */
     void opsConsume(@Param("id") Integer id, @Param("consumeNum") Integer consumeNum);
 
-    List<SysCoupon> queryUserCanGetCoupon(@Param("userId") Integer userId);
+    List<SysCoupon> queryUserCanGetCoupon(@Param("userId") Integer userId,@Param("tenantId") Integer tenantId);
 }
 

+ 2 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/SysEmailDao.java

@@ -15,6 +15,7 @@ import java.util.List;
 public interface SysEmailDao extends BaseMapper<SysEmail> {
 
    int insertBatch(@Param("entities") List<SysEmail> entities);
-   
+
+    SysEmail query();
 }
 

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

@@ -24,4 +24,8 @@ public interface SysMusicScoreCategoriesDao extends BaseDAO<Integer, SysMusicSco
     void enable(@Param("categoriesIds") String categoriesIds, @Param("enable") boolean enable);
 
     List<Map<Integer, String>> queryOrganByIds(@Param("categoriesIds") Set<Integer> categoriesIds);
+    
+    List<SysMusicScoreCategories> queryByIds(String ids);
+    
+    SysMusicScoreCategories queryByParentId(Integer parentId);
 }

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

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ym.mec.biz.dal.entity.TenantInfo;
+import com.ym.mec.biz.dal.entity.TenantProductSumm;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.Map;
@@ -11,4 +12,6 @@ import java.util.Map;
 public interface TenantInfoDao extends BaseMapper<TenantInfo> {
 
     <T> IPage<T> queryPage(Page<T> page, @Param("param") Map<String, Object> param);
+
+    TenantProductSumm queryTenantInfoProductSumm(Integer tenantId);
 }

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

@@ -20,7 +20,10 @@ public class Subject {
 	/**  */
 	@ApiModelProperty(value = "科目名称",required = false)
 	private String name;
-	
+
+	@ApiModelProperty(value = "父类目录名")
+	private String parentSubjectName;
+
 	/**  */
 	@ApiModelProperty(value = "科目编号",required = false)
 	private String code;
@@ -147,4 +150,11 @@ public class Subject {
 		return ToStringBuilder.reflectionToString(this);
 	}
 
+	public String getParentSubjectName() {
+		return parentSubjectName;
+	}
+
+	public void setParentSubjectName(String parentSubjectName) {
+		this.parentSubjectName = parentSubjectName;
+	}
 }

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

@@ -2,6 +2,7 @@ package com.ym.mec.biz.dal.entity;
 
 import org.apache.commons.lang3.builder.ToStringBuilder;
 
+import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -86,7 +87,7 @@ public class SysMusicScoreCategories {
 		this.organId = organId;
 	}
 
-	private List<SysMusicScoreCategories> sysMusicScoreCategoriesList;
+	private List<SysMusicScoreCategories> sysMusicScoreCategoriesList = new ArrayList<SysMusicScoreCategories>();
 
 	public String getDelCategoriesIds() {
 		return delCategoriesIds;

+ 144 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/TenantProductSumm.java

@@ -0,0 +1,144 @@
+package com.ym.mec.biz.dal.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 机构表(TenantInfo)表实体类
+ *
+ * @author hgw
+ */
+@ApiModel(value = "tenant_info-机构表")
+public class TenantProductSumm extends TenantInfo implements Serializable  {
+
+    @ApiModelProperty(value = "当前版本")
+    private String serverName;
+
+    @ApiModelProperty(value = "服务有效期开始")
+    private Date expiryDate;
+
+    @ApiModelProperty(value = "服务有效期结束")
+    private Date expiryDateEnd;
+
+    @ApiModelProperty(value = "有效期(数字-结合有效期单位)")
+    private int expiryCount;
+
+    @ApiModelProperty(value = "有效期单位")
+    private String expiryUnit;
+
+    @ApiModelProperty(value = "可用余额")
+    private BigDecimal balance;
+
+    @ApiModelProperty(value = "冻结金额")
+    private BigDecimal frozenAmount;
+
+    @ApiModelProperty(value = "已有学员")
+    private Integer studentNum;
+
+    @ApiModelProperty(value = "学员上限")
+    private Integer studentUpLimit;
+
+    // ----------- 计算字段
+    @ApiModelProperty(value = "剩余天数")
+    private Integer validRemaining;
+
+    @ApiModelProperty(value = "总余额")
+    private BigDecimal sumBalance;
+
+    public String getServerName() {
+        return serverName;
+    }
+
+    public void setServerName(String serverName) {
+        this.serverName = serverName;
+    }
+
+    public Date getExpiryDate() {
+        return expiryDate;
+    }
+
+    public void setExpiryDate(Date expiryDate) {
+        this.expiryDate = expiryDate;
+    }
+
+    public int getExpiryCount() {
+        return expiryCount;
+    }
+
+    public void setExpiryCount(int expiryCount) {
+        this.expiryCount = expiryCount;
+    }
+
+    public String getExpiryUnit() {
+        return expiryUnit;
+    }
+
+    public void setExpiryUnit(String expiryUnit) {
+        this.expiryUnit = expiryUnit;
+    }
+
+    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 getExpiryDateEnd() {
+        return expiryDateEnd;
+    }
+
+    public void setExpiryDateEnd(Date expiryDateEnd) {
+        this.expiryDateEnd = expiryDateEnd;
+    }
+
+    public Integer getValidRemaining() {
+        return validRemaining;
+    }
+
+    public void setValidRemaining(Integer validRemaining) {
+        this.validRemaining = validRemaining;
+    }
+
+    public BigDecimal getSumBalance() {
+        return sumBalance;
+    }
+
+    public void setSumBalance(BigDecimal sumBalance) {
+        this.sumBalance = sumBalance;
+    }
+
+    public Integer getStudentNum() {
+        return studentNum;
+    }
+
+    public void setStudentNum(Integer studentNum) {
+        this.studentNum = studentNum;
+    }
+
+    public Integer getStudentUpLimit() {
+        return studentUpLimit;
+    }
+
+    public void setStudentUpLimit(Integer studentUpLimit) {
+        this.studentUpLimit = studentUpLimit;
+    }
+}
+

+ 31 - 2
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/CouponDetailTypeEnum.java

@@ -1,7 +1,12 @@
 package com.ym.mec.biz.dal.enums;
 
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.List;
 import java.util.Objects;
+import java.util.stream.Collectors;
 
 /**
  * 优惠券明细类型
@@ -59,8 +64,18 @@ public enum CouponDetailTypeEnum {
         this.msg = msg;
     }
 
-    //根据传入code找到对应的券类型,默认全类型
+    //根据传入code找到对应的券类型,如果不存在则返回 全类型
     public static String of(String code) {
+        String check = check(code);
+        return StringUtils.isBlank(check) ? FULLCOUPON.getCode() : check;
+    }
+
+    //如果不存在则返回 null
+    public static String ofNull(String code) {
+        return check(code);
+    }
+
+    private static String check(String code) {
         CouponDetailTypeEnum detailTypeEnum = Arrays.stream(CouponDetailTypeEnum.values())
                 .filter(e -> e.code.equalsIgnoreCase(code))
                 .findFirst()
@@ -69,6 +84,8 @@ public enum CouponDetailTypeEnum {
             return detailTypeEnum.getCode();
         }
         switch (code) {
+            case "INSTRUMENT":
+                return MUSICAL.getCode();
             case "TRAINING_SINGLE":
                 return SINGLE.getCode();
             case "THEORY_COURSE":
@@ -79,9 +96,21 @@ public enum CouponDetailTypeEnum {
             case "CLOUD_TEACHER_PLUS":
                 return MEMBER.getCode();
             default:
-                return FULLCOUPON.getCode();
+                return null;
         }
+    }
 
+    public static String[] getAllowType(CouponDetailTypeEnum... type) {
+        List<String> resultList = new ArrayList<>();
+        resultList.add(FULLCOUPON.getCode());
+        if (Objects.nonNull(type)) {
+            List<String> collect = Arrays.stream(type)
+                    .map(CouponDetailTypeEnum::getCode)
+                    .distinct()
+                    .collect(Collectors.toList());
+            resultList.addAll(collect);
+        }
+        return resultList.toArray(new String[0]);
     }
 
 }

+ 24 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/SubjectQueryInfo.java

@@ -15,6 +15,12 @@ public class SubjectQueryInfo extends QueryInfo {
     @ApiModelProperty(value = "对内1对外2",required = false)
     private Integer tenantId;
 
+    @ApiModelProperty(value = "查询父Id")
+    private Integer parentSubjectId;
+
+    @ApiModelProperty(value = "模糊查询id或者名称")
+    private String search;
+
     public Integer getTenantId() {
         return tenantId;
     }
@@ -38,4 +44,22 @@ public class SubjectQueryInfo extends QueryInfo {
     public void setParentId(Integer parentId) {
         this.parentId = parentId;
     }
+
+    public Integer getParentSubjectId() {
+        return parentSubjectId;
+    }
+
+    public void setParentSubjectId(Integer parentSubjectId) {
+        this.parentSubjectId = parentSubjectId;
+    }
+
+    @Override
+    public String getSearch() {
+        return search;
+    }
+
+    @Override
+    public void setSearch(String search) {
+        this.search = search;
+    }
 }

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

@@ -114,4 +114,5 @@ public interface CloudTeacherOrderService extends BaseService<Long, CloudTeacher
 
     boolean addStudents(CloudTeacherAddQueryInfo cloudTeacherAddQueryInfo);
 
+    int sendSms(TenantOrderRecord record);
 }

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

@@ -72,15 +72,6 @@ public interface MusicGroupService extends BaseService<String, MusicGroup> {
     HttpResponseResult pay(RegisterPayDto registerPayDto) throws Exception;
 
     /**
-     * 获取优惠券相关参数-校验优惠券和传入的支付金额是否合法
-     *
-     * @param couponIdList 优惠券集合
-     * @param total        本次订单所有商品的总数量
-     * @param payAmount    页面传入的本次支付的金额
-     */
-    CouponPayParam getCouponPayParam(List<Integer> couponIdList, AtomicInteger total, BigDecimal payAmount);
-
-    /**
      * 继续缴费
      * @param registerPayDto
      * @return

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

@@ -108,5 +108,5 @@ public interface SubjectService extends BaseService<Integer, Subject> {
      * @param search 搜索条件
      * @return 查询结果
      */
-    List<Subject> search(Integer parentSubjectId, String search);
+    PageInfo<Subject> queryPageByIdOrName(SubjectQueryInfo queryInfo);
 }

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

@@ -2,6 +2,7 @@ package com.ym.mec.biz.service;
 
 import com.ym.mec.biz.dal.dto.HorseRaceLampDto;
 import com.ym.mec.biz.dal.dto.SysCouponCodeDto;
+import com.ym.mec.biz.dal.entity.CouponPayParam;
 import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
 import com.ym.mec.biz.dal.entity.SysCouponCode;
 import com.ym.mec.biz.dal.page.SysCouponCodeQueryInfo;
@@ -11,6 +12,7 @@ import com.ym.mec.common.service.BaseService;
 
 import java.math.BigDecimal;
 import java.util.List;
+import java.util.concurrent.atomic.AtomicInteger;
 
 public interface SysCouponCodeService extends BaseService<Long, SysCouponCode> {
 
@@ -55,7 +57,28 @@ public interface SysCouponCodeService extends BaseService<Long, SysCouponCode> {
      */
     StudentPaymentOrder use(List<Integer> couponIdList, BigDecimal amount, Boolean useFlag);
 
-    List<SysCouponCodeDto> checkCoupon(List<Integer> couponIdList);
+    StudentPaymentOrder use(List<Integer> couponIdList, BigDecimal amount, Boolean useFlag, String... allowType);
+
+    List<SysCouponCodeDto> checkCoupon(List<Integer> couponIdList, String... allowType);
+
+    /**
+     * 获取优惠券相关参数-校验优惠券和传入的支付金额是否合法
+     *
+     * @param couponIdList 优惠券集合
+     * @param total        本次订单所有商品的总数量
+     * @param payAmount    页面传入的本次支付的金额
+     * @param allowType   本次允许使用的优惠券类型,null则不验证
+     */
+    CouponPayParam getCouponPayParam(List<Integer> couponIdList, Integer total, BigDecimal payAmount, String... allowType);
+
+    /**
+     * 获取优惠券相关参数-校验优惠券和传入的支付金额是否合法
+     *
+     * @param couponIdList 优惠券集合
+     * @param total        本次订单所有商品的总数量
+     * @param payAmount    页面传入的本次支付的金额
+     */
+    CouponPayParam getCouponPayParam(List<Integer> couponIdList, Integer total, BigDecimal payAmount);
 
     List<SysCouponCodeDto> findByIdList(List<Integer> couponIdList);
 

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

@@ -11,5 +11,6 @@ import com.ym.mec.biz.dal.entity.SysEmail;
  */
 public interface SysEmailService extends IService<SysEmail> {
 
+    SysEmail query();
 }
 

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

@@ -10,6 +10,8 @@ import java.util.List;
 public interface SysMusicScoreCategoriesService extends BaseService<Integer, SysMusicScoreCategories> {
 
     List<SysMusicScoreCategories> queryTree(MusicScoreQueryInfo menuQueryInfo);
+    
+    List<SysMusicScoreCategories> queryCategoriesTreeList(String categoryIdList);
 
     void save(SysMusicScoreCategories musicScoreCategories);
 

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

@@ -3,6 +3,7 @@ package com.ym.mec.biz.service;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.ym.mec.biz.dal.dto.TenantInfoDto;
 import com.ym.mec.biz.dal.entity.TenantInfo;
+import com.ym.mec.biz.dal.entity.TenantProductSumm;
 import com.ym.mec.biz.dal.vo.TenantInfoInfoPageVo;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.thirdparty.yqpay.Msg;
@@ -33,4 +34,6 @@ public interface TenantInfoService extends IService<TenantInfo> {
     Map<String, Object> recharge(Integer tenantId, BigDecimal amount) throws Exception;
 
     Boolean rechargeCheck(String orderNo) throws Exception;
+
+    TenantProductSumm queryTenantInfoProductSumm(Integer id);
 }

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

@@ -284,14 +284,23 @@ public class CloudTeacherOrderServiceImpl extends BaseServiceImpl<Long, CloudTea
                 e.printStackTrace();
                 return false;
             }
-            //TODO 发送短信
-            // Map<Integer, String> userPhone = new HashMap<>();
-            // sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.AWSMS, MessageTypeEnum.CLOUD_TEACHER_ORDER_SUCCESS, userPhone, null, 0, null, null);
         }
         bucket.delete();
         return false;
     }
 
+    @Override
+    public int sendSms(TenantOrderRecord record) {
+        List<String> orderUsers = cloudTeacherOrderDao.findUserNameByOrderId(record.getId());
+        Map<Integer, String> userPhones = new HashMap<>();
+        int i = 0;
+        for (String phone : orderUsers) {
+            userPhones.put(i++, phone);
+        }
+        sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.AWSMS, MessageTypeEnum.CLOUD_TEACHER_ORDER_SUCCESS, userPhones, null, 0, null, null);
+        return 0;
+    }
+
     //主动去第三方查询订单状态
     private void checkTransOrderState(TenantOrderRecord orderRecord) {
         if (StringUtils.equals(orderRecord.getPaymentChannel(), PaymentChannelEnum.ADAPAY.getCode())) {

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

@@ -733,8 +733,10 @@ public class EduPracticeGroupServiceImpl implements EduPracticeGroupService{
         
         BigDecimal studentSingleCourseOriginalCost = price.divide(new BigDecimal(practiceCourses.size()), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
 
+        //校验优惠券
+        String[] checkCoupon = CouponDetailTypeEnum.getAllowType(CouponDetailTypeEnum.PRACTICE);
         //使用优惠券
-        StudentPaymentOrder studentPaymentOrder = sysCouponCodeService.use(practiceGroupBuyParams.getCouponIdList(), price, true);
+        StudentPaymentOrder studentPaymentOrder = sysCouponCodeService.use(practiceGroupBuyParams.getCouponIdList(), price, true,checkCoupon);
         //实际支付金额,去除优惠券
         BigDecimal actualPrice = studentPaymentOrder.getExpectAmount();
         BigDecimal divide = actualPrice.divide(new BigDecimal(practiceCourses.size()), ROUND_DOWN);

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

@@ -531,7 +531,9 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         Integer userId = sporadicPayDto.getUserId();
         String orderNo = idGeneratorService.generatorId("payment") + "";
         String channelType = "";
-        StudentPaymentOrder studentPaymentOrder = sysCouponCodeService.use(sporadicPayDto.getCouponIdList(), amount, true);
+        StudentPaymentOrder studentPaymentOrder = sysCouponCodeService.use(sporadicPayDto.getCouponIdList(), amount,
+                true,
+                CouponDetailTypeEnum.getAllowType());
         amount = studentPaymentOrder.getActualAmount();
         if (!(amount.compareTo(sporadicPayDto.getAmount()) == 0)) {
             throw new BizException("订单金额异常");
@@ -861,7 +863,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
             //获取本次商品的总数
             AtomicInteger total = getTotalNum(registerPayDto);
             //校验优惠券的使用
-            couponPayParam = getCouponPayParam(registerPayDto.getCouponIdList(), total, registerPayDto.getAmount());
+            couponPayParam = sysCouponCodeService.getCouponPayParam(registerPayDto.getCouponIdList(), total.get(), registerPayDto.getAmount());
             studentPaymentOrder.setCouponCodeId(StringUtils.join(registerPayDto.getCouponIdList(), ","));
             studentPaymentOrder.setCouponRemitFee(couponPayParam.getCouponRemitTotal());
         }
@@ -870,63 +872,6 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         return couponPayParam;
     }
 
-    /**
-     * 获取优惠券相关参数-校验优惠券和传入的支付金额是否合法
-     *
-     * @param couponIdList 优惠券集合
-     * @param total        本次订单所有商品的总数量
-     * @param payAmount    页面传入的本次支付的金额
-     */
-    public CouponPayParam getCouponPayParam(List<Integer> couponIdList, AtomicInteger total, BigDecimal payAmount) {
-        //查询本次付款使用的优惠券
-        List<SysCouponCodeDto> sysCouponCodeDtoList = sysCouponCodeService.checkCoupon(couponIdList);
-        //全类型优惠券的总额度
-        BigDecimal fullTypeTotal = new BigDecimal(0);
-        //非全类型优惠券的总额度
-        BigDecimal notFullTypeTotal = new BigDecimal(0);
-        //非全类型优惠券的总数量
-        AtomicInteger notFullTypeTotalNum = new AtomicInteger(0);
-        //优惠券减免的总额度
-        BigDecimal couponRemitTotal = new BigDecimal(0);
-        //交易阈值 最后付款的金额大于该值就不对
-        BigDecimal threshold;
-
-        for (SysCouponCodeDto d : sysCouponCodeDtoList) {
-            if (d.getTypeDetail().equals(CouponDetailTypeEnum.FULLCOUPON.getCode())) {
-                fullTypeTotal = fullTypeTotal.add(d.getFullAmount());
-            } else {
-                notFullTypeTotal = notFullTypeTotal.add(d.getFullAmount());
-                notFullTypeTotalNum.set(notFullTypeTotalNum.incrementAndGet());
-            }
-            couponRemitTotal = couponRemitTotal.add(d.getFaceValue());
-        }
-        //阈值 = (全品类券总面值 ÷ 总商品数量) + (非全品类券总面值 ÷ 非全品类券的数量)
-        threshold = fullTypeTotal.divide(new BigDecimal(total.get()), 3, RoundingMode.HALF_UP)
-                .add(notFullTypeTotal.divide(new BigDecimal(notFullTypeTotalNum.get()), 3, RoundingMode.HALF_UP));
-
-        if (payAmount.compareTo(threshold) < 0) {
-            throw new BizException("优惠券使用错误,交易失败!");
-        }
-        //将各种类型的优惠券合并 算出总面试 总减免金额
-        Map<String, CouponPayTypeInfo> couponTypeInfo = new HashMap<>();
-        //根据CouponDetailTypeEnum 进行分组集合
-        WrapperUtil.groupList(sysCouponCodeDtoList, SysCouponCodeDto::getTypeDetail)
-                .forEach((typeDetail, list) -> {
-                    CouponPayTypeInfo coupon = new CouponPayTypeInfo();
-                    list.forEach(c -> {
-                        coupon.setCouponAmount(coupon.getCouponAmount().add(c.getFullAmount()));
-                        coupon.setFaceValue(coupon.getFaceValue().add(c.getFaceValue()));
-                    });
-                    coupon.setTypeDetail(typeDetail);
-                    couponTypeInfo.put(typeDetail, coupon);
-                });
-
-        CouponPayParam result = new CouponPayParam();
-        result.setCouponRemitTotal(couponRemitTotal);
-        result.setCouponTypeInfo(couponTypeInfo);
-        return result;
-    }
-
     @Override
     @Transactional(rollbackFor = Exception.class)
     public HttpResponseResult pay(RegisterPayDto registerPayDto) throws Exception {

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

@@ -74,10 +74,9 @@ public class OrderPayOpsServiceImpl implements OrderPayOpsService {
                         tenantOrderRecord::setTransNo,
                         tenantOrderRecordService::updateById
                 );
-                //主动延迟检查订单
+                //机构开通付款 主动延迟检查订单
                 delayCheckTenant();
             } else if (platform.equals("cloudTeacherOrder")) {
-
                 // 云教练支付
                 TenantOrderRecord tenantOrderRecord = tenantOrderRecordService.getOne(new WrapperUtil<TenantOrderRecord>()
                                                                                               .hasEq("order_no_", payParam.getOrderNo()).queryWrapper());
@@ -93,7 +92,7 @@ public class OrderPayOpsServiceImpl implements OrderPayOpsService {
                                                 tenantOrderRecord::setTransNo,
                                                 tenantOrderRecordService::updateById
                 );
-                //主动延迟检查订单
+                // 云教练支付 主动延迟检查订单
                 log.info("executePayment delayCheckCloudTeacherOrder >>>>> ");
                 delayCheckCloudTeacherOrder(tenantOrderRecord);
             } else if (platform.equals("tenantRecharge")) {
@@ -277,9 +276,10 @@ public class OrderPayOpsServiceImpl implements OrderPayOpsService {
         //异步
         CompletableFuture.runAsync(() -> {
             //检查5次
+            Boolean ret = false;
             for (int i = 0; i <= 5; i++) {
                 try {
-                    Boolean ret = cloudTeacherOrderService.payCheck(record);
+                    ret = cloudTeacherOrderService.payCheck(record);
                     if (ret) break;
                     Thread.sleep(3000);//每3秒触发一次
                     log.info("delayCheckCloudTeacherOrder >>>>>  start {}", i);
@@ -288,6 +288,9 @@ public class OrderPayOpsServiceImpl implements OrderPayOpsService {
                     e.printStackTrace();
                 }
             }
+            if (ret) {
+                cloudTeacherOrderService.sendSms(record);
+            }
             bucket.delete();
         });
     }

File diff suppressed because it is too large
+ 196 - 199
mec-biz/src/main/java/com/ym/mec/biz/service/impl/PracticeGroupServiceImpl.java


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

@@ -673,6 +673,8 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
             //获取使用了优惠券之后的总金额
             BigDecimal useCouponAmount = WrapperUtil.sumList(studentPaymentOrderDetailList, StudentPaymentOrderDetail::getRemitFee);
             studentPaymentOrder.setCouponRemitFee(useCouponAmount);
+            //核销优惠券
+            sysCouponCodeService.useCoupon(registerPayDto.getCouponIdList());
         }
         //添加订单明细
         studentPaymentOrderDetailService.batchAdd(studentPaymentOrderDetailList);

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

@@ -9,7 +9,6 @@ import com.ym.mec.biz.dal.dao.*;
 import com.ym.mec.biz.dal.dto.BasicUserDto;
 import com.ym.mec.biz.dal.dto.GoodsSellDto;
 import com.ym.mec.biz.dal.dto.RepairGoodsDto;
-import com.ym.mec.biz.dal.dto.SysCouponCodeDto;
 import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.enums.*;
 import com.ym.mec.biz.dal.page.RepairStudentQueryInfo;
@@ -22,7 +21,7 @@ import com.ym.mec.common.service.IdGeneratorService;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
 import com.ym.mec.thirdparty.message.MessageSenderPluginContext;
 import com.ym.mec.util.collection.MapUtil;
-
+import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -36,6 +35,7 @@ import java.math.BigDecimal;
 import java.util.*;
 import java.util.stream.Collectors;
 
+import static com.ym.mec.biz.dal.enums.CouponDetailTypeEnum.*;
 import static com.ym.mec.biz.dal.enums.DealStatusEnum.*;
 
 @Service
@@ -130,18 +130,18 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
 
             if (orderByOrderNo.getStatus() == SUCCESS) {
                 throw new BizException("您已支付请勿重复提交");
-            }else if(orderByOrderNo.getStatus() == ING){
-            	
-            	// 查询订单状态
+            } else if (orderByOrderNo.getStatus() == ING) {
+
+                // 查询订单状态
                 PayStatus payStatus = studentPaymentOrderService.queryPayStatus(orderByOrderNo.getPaymentChannel(), orderByOrderNo.getOrderNo(), orderByOrderNo.getTransNo());
-                if(payStatus != PayStatus.FAILED){
-                	if(payStatus == PayStatus.SUCCESSED){
-                		throw new BizException("订单已支付成功,请勿重复支付");
-                	}/*else if(payStatus == PayStatus.PAYING){
+                if (payStatus != PayStatus.FAILED) {
+                    if (payStatus == PayStatus.SUCCESSED) {
+                        throw new BizException("订单已支付成功,请勿重复支付");
+                    }/*else if(payStatus == PayStatus.PAYING){
                 		throw new BizException("订单还在交易中,请稍后重试");
                 	}*/
                 }
-                
+
                 orderByOrderNo.setStatus(CLOSE);
                 studentPaymentOrderService.update(orderByOrderNo);
                 if (orderByOrderNo.getBalancePaymentAmount() != null && orderByOrderNo.getBalancePaymentAmount().compareTo(BigDecimal.ZERO) > 0) {
@@ -158,7 +158,7 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
         }
         Integer studentId = studentGoodsSell.getUserId();
         List<GoodsSellDto> goodsSellDtos = studentGoodsSell.getGoodsSellDtos();
-        if (goodsSellDtos == null || goodsSellDtos.size() == 0) {
+        if (CollectionUtils.isEmpty(goodsSellDtos)) {
             throw new BizException("请选择需要购买的商品");
         }
         if (studentId == null) {
@@ -186,7 +186,7 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
                 studentGoodsSell.setCooperationOrganId(musicGroup.getCooperationOrganId());
             }
         }
-        List<Integer> goodsIds = goodsSellDtos.stream().map(e -> e.getGoodsId()).collect(Collectors.toList());
+        List<Integer> goodsIds = goodsSellDtos.stream().map(GoodsSellDto::getGoodsId).collect(Collectors.toList());
         Map<Integer, String> integerStringMap = getMap("goods", "id_", "type_", goodsIds, Integer.class, String.class);
         Map<Integer, BigDecimal> map = getMap("goods", "id_", "discount_price_", goodsIds, Integer.class, BigDecimal.class);
         Map<Integer, BigDecimal> groupPriceMap = getMap("goods", "id_", "group_purchase_price_", goodsIds, Integer.class, BigDecimal.class);
@@ -208,14 +208,17 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
             groupAmount = groupAmount.add(goodsSellDto.getGoodsGroupPrice());
         }
         amount = amount.subtract(studentGoodsSell.getMarketAmount());
-        if(amount.compareTo(groupAmount) < 0){
+        if (amount.compareTo(groupAmount) < 0) {
             throw new BizException("操作失败:该金额减免后商品价格不可低于商品团购价");
         }
         if (amount.signum() < 0) {
             throw new BizException("操作失败:订单金额异常");
         }
+        //优惠券使用范围
+        String[] checkCoupon = CouponDetailTypeEnum.getAllowType(ACCESSORIES, MUSICAL);
         //使用优惠券
-        StudentPaymentOrder studentPaymentOrder = sysCouponCodeService.use(studentGoodsSell.getCouponIdList(),amount,studentGoodsSell.getType() != 1);
+        StudentPaymentOrder studentPaymentOrder = sysCouponCodeService.use(studentGoodsSell.getCouponIdList(),
+                amount, studentGoodsSell.getType() != 1, checkCoupon);
         amount = studentPaymentOrder.getActualAmount();
         // 判断金额是否正确
 //        if (studentGoodsSell.getTotalAmount().compareTo(amount) != 0) {
@@ -228,8 +231,8 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
         String orderNo = idGeneratorService.generatorId("payment") + "";
         studentGoodsSell.setOrderNo(orderNo);
         List<Integer> couponIdList = studentGoodsSell.getCouponIdList();
-        if(couponIdList != null && couponIdList.size() > 0){
-            studentGoodsSell.setCouponIds(StringUtils.join(couponIdList,","));
+        if (couponIdList != null && couponIdList.size() > 0) {
+            studentGoodsSell.setCouponIds(StringUtils.join(couponIdList, ","));
         }
         studentGoodsSellDao.insert(studentGoodsSell);
 
@@ -352,10 +355,10 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
         studentGoodsSellDao.update(studentGoodsSell);
         String couponIds = studentGoodsSell.getCouponIds();
         List<Integer> couponIdList = new ArrayList<>();
-        if(StringUtils.isNotEmpty(couponIds)){
+        if (StringUtils.isNotEmpty(couponIds)) {
             couponIdList = Arrays.stream(couponIds.split(",")).mapToInt(Integer::valueOf).boxed().collect(Collectors.toList());
         }
-        studentPaymentOrder = sysCouponCodeService.use(couponIdList,amount,true);
+        studentPaymentOrder = sysCouponCodeService.use(couponIdList, amount, true);
         amount = studentPaymentOrder.getActualAmount();
         studentPaymentOrder.setUserId(studentId);
         studentPaymentOrder.setGroupType(GroupType.GOODS_SELL);
@@ -475,10 +478,10 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
         if (amount.compareTo(BigDecimal.ZERO) < 0) {
             throw new BizException("特权减免金额不能大于总金额");
         }
-        StudentPaymentOrder studentPaymentOrder = sysCouponCodeService.use(couponIdList,amount,repairInfo.getType() != 1);
+        StudentPaymentOrder studentPaymentOrder = sysCouponCodeService.use(couponIdList, amount, repairInfo.getType() != 1);
         amount = studentPaymentOrder.getActualAmount();
-        if(couponIdList != null && couponIdList.size() > 0){
-            repairInfo.setCouponIds(StringUtils.join(couponIdList,","));
+        if (couponIdList != null && couponIdList.size() > 0) {
+            repairInfo.setCouponIds(StringUtils.join(couponIdList, ","));
         }
         studentRepairDao.insert(repairInfo);
         if (repairInfo.getType() == 1) {
@@ -606,7 +609,7 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
     public StudentRepair getRepairInfo(Integer id) {
         StudentRepair repairInfo = studentRepairDao.getRepairInfo(id);
         String couponIds = repairInfo.getCouponIds();
-        if(StringUtils.isNotEmpty(couponIds)){
+        if (StringUtils.isNotEmpty(couponIds)) {
             List<Integer> collect = Arrays.stream(couponIds.split(",")).map(e -> Integer.valueOf(e)).collect(Collectors.toList());
             repairInfo.setCouponCodeDtos(sysCouponCodeService.findByIdList(collect));
         }
@@ -649,10 +652,10 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
 
         String channelType = "";
         List<Integer> couponIdList = new ArrayList<>();
-        if(StringUtils.isNotEmpty(studentRepair.getCouponIds())){
+        if (StringUtils.isNotEmpty(studentRepair.getCouponIds())) {
             couponIdList = Arrays.stream(studentRepair.getCouponIds().split(",")).mapToInt(Integer::valueOf).boxed().collect(Collectors.toList());
         }
-        StudentPaymentOrder studentPaymentOrder = sysCouponCodeService.use(couponIdList,amount,true);
+        StudentPaymentOrder studentPaymentOrder = sysCouponCodeService.use(couponIdList, amount, true);
         amount = studentPaymentOrder.getActualAmount();
         studentPaymentOrder.setUserId(studentRepair.getStudentId());
         studentPaymentOrder.setGroupType(GroupType.REPAIR);
@@ -1121,7 +1124,7 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
             sysUserCashAccountDetailService.insert(paymentDetail);
             //优惠券减免金额
             BigDecimal couponRemitFee = studentPaymentOrder.getCouponRemitFee();
-            if(couponRemitFee.compareTo(BigDecimal.ZERO) > 0 && repairInfo.getAmount().compareTo(BigDecimal.ZERO) > 0){
+            if (couponRemitFee.compareTo(BigDecimal.ZERO) > 0 && repairInfo.getAmount().compareTo(BigDecimal.ZERO) > 0) {
                 //获取维修金额
                 BigDecimal repairAmount = repairInfo.getAmount();
                 //获取比例
@@ -1140,7 +1143,7 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
                             null,
                             goodsIds,
                             studentPaymentOrder.getExpectAmount().add(repairInfo.getExemptionAmount()),
-                            studentPaymentOrder.getBalancePaymentAmount(),couponRemitFee);
+                            studentPaymentOrder.getBalancePaymentAmount(), couponRemitFee);
                 }
             }
 

+ 98 - 98
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SubjectChangeServiceImpl.java

@@ -1,9 +1,5 @@
 package com.ym.mec.biz.service.impl;
 
-import static com.ym.mec.biz.dal.enums.DealStatusEnum.SUCCESS;
-import static com.ym.mec.biz.dal.enums.GroupType.SUBJECT_CHANGE;
-import static com.ym.mec.biz.dal.enums.GroupType.VIP;
-
 import com.ym.mec.biz.dal.dao.*;
 import com.ym.mec.biz.dal.dto.SubjectChangeParamDto;
 import com.ym.mec.biz.dal.entity.*;
@@ -18,7 +14,6 @@ import com.ym.mec.common.service.impl.BaseServiceImpl;
 import com.ym.mec.thirdparty.message.MessageSenderPluginContext;
 import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.date.DateUtil;
-
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -31,6 +26,9 @@ import java.math.BigDecimal;
 import java.util.*;
 import java.util.stream.Collectors;
 
+import static com.ym.mec.biz.dal.enums.DealStatusEnum.SUCCESS;
+import static com.ym.mec.biz.dal.enums.GroupType.SUBJECT_CHANGE;
+
 @Service
 public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectChange> implements SubjectChangeService {
 
@@ -103,18 +101,18 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
         List<StudentPaymentOrder> orders = studentPaymentOrderDao.findMusicGroupApplyOrderByStatus(subjectChange.getStudentId(), subjectChange.getMusicGroupId(), SUCCESS);
         //获取原报名订单的乐器费用
         if (subjectChange.getOriginalMusical() != null) {
-            if(orders != null && orders.size() > 0){
+            if (orders != null && orders.size() > 0) {
                 List<Long> collect = orders.stream().map(e -> e.getId()).collect(Collectors.toList());
                 List<Goods> musical = studentPaymentOrderDetailDao.getGoodsSellPrice(collect, "MUSICAL");
-                if(musical != null && musical.size() > 0){
+                if (musical != null && musical.size() > 0) {
                     subjectChange.setOriginalMusicalGoods(musical.get(0));
                 }
             }
         }
         if (subjectChange.getOriginalAccessories() != null) {
-            if(orders != null && orders.size() > 0){
+            if (orders != null && orders.size() > 0) {
                 List<Long> collect = orders.stream().map(e -> e.getId()).collect(Collectors.toList());
-                subjectChange.setOriginalAccessoriesGoods(studentPaymentOrderDetailDao.getGoodsSellPrice(collect,"ACCESSORIES"));
+                subjectChange.setOriginalAccessoriesGoods(studentPaymentOrderDetailDao.getGoodsSellPrice(collect, "ACCESSORIES"));
             }
         }
 
@@ -135,19 +133,19 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
         SubjectChange subjectChange = subjectChangeDao.get(subjectChangeParamDto.getId());
         if (subjectChangeParamDto.getRepay()) {
             StudentPaymentOrder studentPaymentOrder = studentPaymentOrderService.get(subjectChange.getOrderId().longValue());
-            
-            if(studentPaymentOrder != null && studentPaymentOrder.getStatus() == DealStatusEnum.ING){
-                
+
+            if (studentPaymentOrder != null && studentPaymentOrder.getStatus() == DealStatusEnum.ING) {
+
                 // 查询订单状态
                 PayStatus payStatus = studentPaymentOrderService.queryPayStatus(studentPaymentOrder.getPaymentChannel(), studentPaymentOrder.getOrderNo(), studentPaymentOrder.getTransNo());
-                if(payStatus != PayStatus.FAILED){
-                	if(payStatus == PayStatus.SUCCESSED){
-                		throw new BizException("订单已支付成功,请勿重复支付");
-                	}/*else if(payStatus == PayStatus.PAYING){
+                if (payStatus != PayStatus.FAILED) {
+                    if (payStatus == PayStatus.SUCCESSED) {
+                        throw new BizException("订单已支付成功,请勿重复支付");
+                    }/*else if(payStatus == PayStatus.PAYING){
                 		throw new BizException("订单还在交易中,请稍后重试");
                 	}*/
                 }
-                
+
                 studentPaymentOrder.setStatus(DealStatusEnum.CLOSE);
                 studentPaymentOrder.setUpdateTime(date);
                 studentPaymentOrderService.update(studentPaymentOrder);
@@ -176,7 +174,9 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
 
         String channelType = "";
 
-        StudentPaymentOrder studentPaymentOrder = sysCouponCodeService.use(subjectChangeParamDto.getCouponIdList(),amount,true);
+        //只允许使用这类型的优惠券
+        String[] checkCoupon = CouponDetailTypeEnum.getAllowType(CouponDetailTypeEnum.ACCESSORIES, CouponDetailTypeEnum.MUSICAL);
+        StudentPaymentOrder studentPaymentOrder = sysCouponCodeService.use(subjectChangeParamDto.getCouponIdList(), amount, true, checkCoupon);
         amount = studentPaymentOrder.getActualAmount();
         studentPaymentOrder.setUserId(subjectChange.getStudentId());
         studentPaymentOrder.setGroupType(SUBJECT_CHANGE);
@@ -262,49 +262,49 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
     @Override
     @Transactional(rollbackFor = Exception.class)
     public SubjectChange addChange(SubjectChange subjectChange) {
-    	String musicGroupId = subjectChange.getMusicGroupId();
+        String musicGroupId = subjectChange.getMusicGroupId();
         SubjectChange studentWaitPay = subjectChangeDao.getStudentWaitPay(subjectChange.getStudentId(), musicGroupId);
         if (studentWaitPay != null) {
             throw new BizException("已有未支付的声部更改,请勿重复创建");
         }
-        
+
         studentWaitPay = subjectChangeDao.getStudentLastChange(subjectChange.getStudentId(), musicGroupId);
         if (studentWaitPay != null) {
             throw new BizException("声部更换只能操作一次,请勿重复操作");
         }
-        
+
         Set<String> musicGroupIds = new HashSet<String>();
         musicGroupIds.add(musicGroupId);
-        
+
         List<MusicGroupPurchaseList> musicGroupPurchaseListCount = musicGroupPurchaseListDao.getCount(musicGroupIds);
         if (musicGroupPurchaseListCount.size() > 0) {
             throw new BizException("乐器清单已确认,不能做声部更改");
         }
-        
+
         //判断新声部人数是否已满
         MusicGroupSubjectPlan changeSubjectPlan = musicGroupSubjectPlanService.getMusicOneSubjectClassPlan(musicGroupId, subjectChange.getChangeSubjectId());
-		if (changeSubjectPlan.getExpectedStudentNum() <= changeSubjectPlan.getPaidStudentNum()) {
-			throw new BizException("当前声部人数已满");
-		}
-		
-		StudentRegistration studentRegistration = studentRegistrationDao.getStudentRegister(musicGroupId, subjectChange.getStudentId());
-		if(studentRegistration == null){
-			throw new BizException("用户乐团报名信息查询失败");
-		}
-        
-        if(studentRegistration.getNoneNeedCloudTeacher() != null && studentRegistration.getNoneNeedCloudTeacher() == 1){
-        	if(changeSubjectPlan.getPaidZeroNum() != null && changeSubjectPlan.getPaidZeroNum() > 0){
-        		throw new BizException("声部更换失败,当前用户是0元入团,且当前声部已有0元入团学生");
-        	}
-        }        
+        if (changeSubjectPlan.getExpectedStudentNum() <= changeSubjectPlan.getPaidStudentNum()) {
+            throw new BizException("当前声部人数已满");
+        }
+
+        StudentRegistration studentRegistration = studentRegistrationDao.getStudentRegister(musicGroupId, subjectChange.getStudentId());
+        if (studentRegistration == null) {
+            throw new BizException("用户乐团报名信息查询失败");
+        }
+
+        if (studentRegistration.getNoneNeedCloudTeacher() != null && studentRegistration.getNoneNeedCloudTeacher() == 1) {
+            if (changeSubjectPlan.getPaidZeroNum() != null && changeSubjectPlan.getPaidZeroNum() > 0) {
+                throw new BizException("声部更换失败,当前用户是0元入团,且当前声部已有0元入团学生");
+            }
+        }
         Date nowDate = new Date();
         SubjectChange studentOriginal = getStudentOriginal(subjectChange.getStudentId(), subjectChange.getMusicGroupId());
-        if(studentOriginal != null){
-        	subjectChange.setOriginalOrderId(studentOriginal.getOrderId());
-        	subjectChange.setOriginalCost(studentOriginal.getOriginalCost());
-        	subjectChange.setOriginalAccessories(studentOriginal.getOriginalAccessories());
+        if (studentOriginal != null) {
+            subjectChange.setOriginalOrderId(studentOriginal.getOrderId());
+            subjectChange.setOriginalCost(studentOriginal.getOriginalCost());
+            subjectChange.setOriginalAccessories(studentOriginal.getOriginalAccessories());
             subjectChange.setOriginalKitGroupPurchaseType(
-            studentOriginal.getOriginalKitGroupPurchaseType() == null ? KitGroupPurchaseTypeEnum.OWNED : studentOriginal.getOriginalKitGroupPurchaseType());
+                    studentOriginal.getOriginalKitGroupPurchaseType() == null ? KitGroupPurchaseTypeEnum.OWNED : studentOriginal.getOriginalKitGroupPurchaseType());
         }
         subjectChange.setStatus(SubjectChangeStatusEnum.WAIT_PAY);
         MusicGroup musicGroup = musicGroupDao.get(subjectChange.getMusicGroupId());
@@ -348,7 +348,7 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
         //差价小于0退到余额
         if (amountMargin.compareTo(BigDecimal.ZERO) <= 0) {
 //            sysUserCashAccountService.updateBalance(subjectChange.getStudentId(), amountMargin.negate(), PlatformCashAccountDetailTypeEnum.REFUNDS, "声部更换退还");
-            if(amountMargin.compareTo(BigDecimal.ZERO) < 0){
+            if (amountMargin.compareTo(BigDecimal.ZERO) < 0) {
                 SysUserCashAccountLog sysUserCashAccountLog = new SysUserCashAccountLog();
                 sysUserCashAccountLog.setUserId(subjectChange.getStudentId());
                 sysUserCashAccountLog.setGroupType(SUBJECT_CHANGE);
@@ -395,7 +395,7 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
                         goodsIdList,
                         BigDecimal.ZERO,
                         BigDecimal.ZERO,
-                        subjectChange.getKitGroupPurchaseType(),BigDecimal.ZERO);
+                        subjectChange.getKitGroupPurchaseType(), BigDecimal.ZERO);
             }
             //乐保处理
             studentInstrumentService.subjectChangeUpdateInstrument(subjectChange);
@@ -419,12 +419,12 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
 
     @Override
     public SubjectChange getStudentOriginal(Integer studentId, String musicGroupId) {
-    	
+
         //1、存在历史的更换
         SubjectChange subjectChange = new SubjectChange();
         SubjectChange studentLastChange = subjectChangeDao.getStudentLastChange(studentId, musicGroupId);
         if (studentLastChange != null) {
-        	throw new BizException("声部更换只能操作一次,请勿重复操作");
+            throw new BizException("声部更换只能操作一次,请勿重复操作");
         	/*List<Long> orderIdList = new ArrayList<Long>();
         	orderIdList.add(studentLastChange.getOrderId().longValue());
         	Set<Integer> refundSellOrderGoodsIds = getRefundGoodsId(orderIdList);
@@ -467,51 +467,51 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
         if (studentRegistration == null) {
             throw new BizException("用户注册信息不存在");
         }
-        
+
         List<StudentPaymentOrder> studentPaymentOrderList = new ArrayList<StudentPaymentOrder>();
-        
-		if (studentRegistration.getMusicGroupPaymentCalenderId() == null) {
-			if(studentRegistration.getMusicGroupStatus() == StudentMusicGroupStatusEnum.NORMAL){
-				studentPaymentOrderList = studentPaymentOrderService.findMusicGroupApplyOrderByStatus(studentId, musicGroupId, SUCCESS);
-			}
-		} else {
-			studentPaymentOrderList = studentPaymentOrderService.queryByBatchNo(studentId, studentRegistration.getMusicGroupPaymentCalenderId() + "",
-					DealStatusEnum.SUCCESS);
-		}
-        
+
+        if (studentRegistration.getMusicGroupPaymentCalenderId() == null) {
+            if (studentRegistration.getMusicGroupStatus() == StudentMusicGroupStatusEnum.NORMAL) {
+                studentPaymentOrderList = studentPaymentOrderService.findMusicGroupApplyOrderByStatus(studentId, musicGroupId, SUCCESS);
+            }
+        } else {
+            studentPaymentOrderList = studentPaymentOrderService.queryByBatchNo(studentId, studentRegistration.getMusicGroupPaymentCalenderId() + "",
+                    DealStatusEnum.SUCCESS);
+        }
+
         List<Long> paymentOrderIdList = studentPaymentOrderList.stream().map(t -> t.getId()).collect(Collectors.toList());
 
         List<StudentPaymentOrderDetail> details = new ArrayList<StudentPaymentOrderDetail>();
-		if (paymentOrderIdList != null && paymentOrderIdList.size() > 0) {
-			details = studentPaymentOrderDetailDao.getWithIds(paymentOrderIdList);
-		}
+        if (paymentOrderIdList != null && paymentOrderIdList.size() > 0) {
+            details = studentPaymentOrderDetailDao.getWithIds(paymentOrderIdList);
+        }
 
         //查询乐器订单
         Long paymentOrderId = null;
-        		
-        for(StudentPaymentOrderDetail detail : details){
-        	if(detail.getType() == OrderDetailTypeEnum.ACCESSORIES || detail.getType() == OrderDetailTypeEnum.MUSICAL){
-	        	if(paymentOrderId == null || paymentOrderId < detail.getPaymentOrderId()){
-	    			paymentOrderId = detail.getPaymentOrderId();
-	    		}
-        	}
-        }
-
-		Set<Integer> refundSellOrderGoodsIds = new HashSet<Integer>();
-		if (details.size() > 0) {
-			refundSellOrderGoodsIds = getRefundGoodsId(details.stream().map(t -> t.getPaymentOrderId()).collect(Collectors.toList()));
-		}
-		
+
+        for (StudentPaymentOrderDetail detail : details) {
+            if (detail.getType() == OrderDetailTypeEnum.ACCESSORIES || detail.getType() == OrderDetailTypeEnum.MUSICAL) {
+                if (paymentOrderId == null || paymentOrderId < detail.getPaymentOrderId()) {
+                    paymentOrderId = detail.getPaymentOrderId();
+                }
+            }
+        }
+
+        Set<Integer> refundSellOrderGoodsIds = new HashSet<Integer>();
+        if (details.size() > 0) {
+            refundSellOrderGoodsIds = getRefundGoodsId(details.stream().map(t -> t.getPaymentOrderId()).collect(Collectors.toList()));
+        }
+
         MusicGroup musicGroup = musicGroupDao.get(musicGroupId);
         subjectChange.setStudentId(studentId);
         subjectChange.setOrganId(musicGroup.getOrganId());
         subjectChange.setCooperationOrganId(musicGroup.getCooperationOrganId());
         subjectChange.setMusicGroupId(musicGroupId);
 
-        if(paymentOrderId != null){
-        	subjectChange.setOrderId(paymentOrderId.intValue());
+        if (paymentOrderId != null) {
+            subjectChange.setOrderId(paymentOrderId.intValue());
         }
-		
+
         String accessoriesIds = "";
         BigDecimal accessoriesPrice = BigDecimal.ZERO;
         for (StudentPaymentOrderDetail detail : details) {
@@ -525,7 +525,7 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
                     subjectChange.setOriginalMusicalGoods(goodsDao.get(goodsId));
                     subjectChange.setOriginalMusicalPrice(detail.getPrice());
                 }
-            } else if (detail.getType().equals(OrderDetailTypeEnum.ACCESSORIES)){
+            } else if (detail.getType().equals(OrderDetailTypeEnum.ACCESSORIES)) {
                 if (StringUtils.isNotBlank(detail.getGoodsIdList())) {
                     accessoriesPrice = accessoriesPrice.add(detail.getPrice());
                     accessoriesIds = accessoriesIds.length() > 0 ? accessoriesIds + "," + detail.getGoodsIdList() : detail.getGoodsIdList();
@@ -543,29 +543,29 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
             }
 
             subjectChange.setOriginalAccessories(accessoriesId);
-            
+
             Map<Integer, Goods> goodsMap = goodsService.findGoodsByIds(accessoriesId).stream().collect(Collectors.toMap(Goods::getId, Goods -> Goods));
 
-			String[] accessoriesIdList = StringUtils.split(accessoriesId, ',');
-
-			for (String s : accessoriesIdList) {
-				if(StringUtils.isBlank(s)){
-					continue;
-				}
-				
-				if(subjectChange.getOriginalAccessoriesGoods() == null){
-					subjectChange.setOriginalAccessoriesGoods(new ArrayList<Goods>());
-				}
-				subjectChange.getOriginalAccessoriesGoods().add(goodsMap.get(Integer.parseInt(s)));
-			}
-            
+            String[] accessoriesIdList = StringUtils.split(accessoriesId, ',');
+
+            for (String s : accessoriesIdList) {
+                if (StringUtils.isBlank(s)) {
+                    continue;
+                }
+
+                if (subjectChange.getOriginalAccessoriesGoods() == null) {
+                    subjectChange.setOriginalAccessoriesGoods(new ArrayList<Goods>());
+                }
+                subjectChange.getOriginalAccessoriesGoods().add(goodsMap.get(Integer.parseInt(s)));
+            }
+
             //BigDecimal price = accessoriesGoods.stream().map(Goods::getGroupPurchasePrice).reduce(BigDecimal.ZERO, BigDecimal::add);
             subjectChange.setOriginalAccessoriesPrice(accessoriesPrice);
         }
         //2.2 计算销售成本
         BigDecimal orderSellCost = BigDecimal.ZERO;
         if (paymentOrderIdList != null && paymentOrderIdList.size() > 0) {
-        	orderSellCost = sellOrderDao.getOrderSellCost(paymentOrderIdList);
+            orderSellCost = sellOrderDao.getOrderSellCost(paymentOrderIdList);
         }
         subjectChange.setOriginalCost(orderSellCost == null ? BigDecimal.ZERO : orderSellCost);
         return subjectChange;
@@ -641,8 +641,8 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
             if (StringUtils.isNotBlank(goodsIds)) {
                 List<Integer> goodsIdList = Arrays.stream(goodsIds.split(",")).map(Integer::parseInt).collect(Collectors.toList());
                 //退原订单商品
-                if(subjectChange.getOriginalOrderId() != null){
-                	sellOrderService.refundByOrderId(subjectChange.getOriginalOrderId().longValue(), false);
+                if (subjectChange.getOriginalOrderId() != null) {
+                    sellOrderService.refundByOrderId(subjectChange.getOriginalOrderId().longValue(), false);
                 }
                 //添加新订单
                 List<SellOrder> sellOrders = this.addSellOrder(studentPaymentOrder.getId(),
@@ -650,8 +650,8 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
                         goodsIdList,
                         studentPaymentOrder.getExpectAmount(),
                         studentPaymentOrder.getBalancePaymentAmount(),
-                        subjectChange.getKitGroupPurchaseType(),studentPaymentOrder.getCouponRemitFee());
-                if(sellOrders != null && sellOrders.size() > 0){
+                        subjectChange.getKitGroupPurchaseType(), studentPaymentOrder.getCouponRemitFee());
+                if (sellOrders != null && sellOrders.size() > 0) {
                     SubjectChange change = subjectChangeDao.get(subjectChange.getId());
                     BigDecimal instrumentAmount = sellOrders.stream().filter(e -> e.getType() == SellTypeEnum.INSTRUMENT).map(e -> e.getExpectAmount()).reduce(BigDecimal.ZERO, BigDecimal::add);
                     BigDecimal accessoriesAmount = sellOrders.stream().filter(e -> e.getType() == SellTypeEnum.ACCESSORIES).map(e -> e.getExpectAmount()).reduce(BigDecimal.ZERO, BigDecimal::add);
@@ -772,7 +772,7 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
                                         List<Integer> goodsIds,
                                         BigDecimal totalAmount,
                                         BigDecimal balance,
-                                        KitGroupPurchaseTypeEnum kitGroupPurchaseType,BigDecimal couponRemitAmount) {
+                                        KitGroupPurchaseTypeEnum kitGroupPurchaseType, BigDecimal couponRemitAmount) {
         if (goodsIds == null || goodsIds.size() <= 0) {
             return null;
         }

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

@@ -221,7 +221,23 @@ public class SubjectServiceImpl extends BaseServiceImpl<Integer, Subject> implem
     }
 
     @Override
-    public List<Subject> search(Integer parentSubjectId, String search) {
-        return  subjectDao.search(parentSubjectId, search);
+    public PageInfo<Subject> queryPageByIdOrName(SubjectQueryInfo queryInfo) {
+        PageInfo<Subject> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
+        Map<String, Object> params = new HashMap<String, Object>();
+        MapUtil.populateMap(params, queryInfo);
+
+        List<Subject> dataList = null;
+        int count = subjectDao.queryPageByIdOrNameCount(params);
+        if (count > 0) {
+            pageInfo.setTotal(count);
+            params.put("offset", pageInfo.getOffset());
+            dataList = subjectDao.queryPageByIdOrName(params);
+        }
+        if (count == 0) {
+            dataList = new ArrayList<>();
+        }
+        pageInfo.setRows(dataList);
+        return pageInfo;
+
     }
 }

+ 93 - 7
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysCouponCodeServiceImpl.java

@@ -5,9 +5,8 @@ import com.ym.mec.biz.dal.dao.SysCouponCodeDao;
 import com.ym.mec.biz.dal.dao.SysCouponDao;
 import com.ym.mec.biz.dal.dto.HorseRaceLampDto;
 import com.ym.mec.biz.dal.dto.SysCouponCodeDto;
-import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
-import com.ym.mec.biz.dal.entity.SysCoupon;
-import com.ym.mec.biz.dal.entity.SysCouponCode;
+import com.ym.mec.biz.dal.entity.*;
+import com.ym.mec.biz.dal.enums.CouponDetailTypeEnum;
 import com.ym.mec.biz.dal.enums.CouponTypeEnum;
 import com.ym.mec.biz.dal.page.SysCouponCodeQueryInfo;
 import com.ym.mec.biz.service.SysCouponCodeService;
@@ -31,7 +30,9 @@ import org.springframework.transaction.annotation.Isolation;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.util.*;
+import java.util.concurrent.atomic.AtomicInteger;
 
 @Service
 public class SysCouponCodeServiceImpl extends BaseServiceImpl<Long, SysCouponCode> implements SysCouponCodeService {
@@ -156,7 +157,6 @@ public class SysCouponCodeServiceImpl extends BaseServiceImpl<Long, SysCouponCod
             SysCouponCode couponCode = new SysCouponCode();
             BeanUtils.copyProperties(sysCouponCode, couponCode);
             couponCode.setCode(String.valueOf(idGeneratorService.generatorId("coupon")));
-            couponCode.setTenantId(tenantId);
             couponCodes.add(couponCode);
         }
         sysCouponCodeDao.batchInsert(couponCodes);
@@ -217,12 +217,18 @@ public class SysCouponCodeServiceImpl extends BaseServiceImpl<Long, SysCouponCod
     @Override
     @Transactional(rollbackFor = Exception.class)
     public StudentPaymentOrder use(List<Integer> couponIdList, BigDecimal amount, Boolean useFlag) {
+        return use(couponIdList, amount, useFlag, null);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public StudentPaymentOrder use(List<Integer> couponIdList, BigDecimal amount, Boolean useFlag, String... allowType) {
         StudentPaymentOrder studentPaymentOrder = new StudentPaymentOrder();
         if (CollectionUtils.isNotEmpty(couponIdList)) {
             BigDecimal fullAmount = BigDecimal.ZERO;
             BigDecimal faceAmount = BigDecimal.ZERO;
             //校验优惠券
-            List<SysCouponCodeDto> couponCodeDtoList = checkCoupon(couponIdList);
+            List<SysCouponCodeDto> couponCodeDtoList = checkCoupon(couponIdList, allowType);
 
             for (SysCouponCodeDto sysCouponCodeDto : couponCodeDtoList) {
                 CouponTypeEnum couponType = sysCouponCodeDto.getCouponType();
@@ -258,9 +264,12 @@ public class SysCouponCodeServiceImpl extends BaseServiceImpl<Long, SysCouponCod
     }
 
     @Override
-    public List<SysCouponCodeDto> checkCoupon(List<Integer> couponIdList) {
+    public List<SysCouponCodeDto> checkCoupon(List<Integer> couponIdList, String... allowType) {
         Date date = new Date();
         List<SysCouponCodeDto> couponCodeDtoList = findByIdList(couponIdList);
+        if (CollectionUtils.isEmpty(couponCodeDtoList)) {
+            throw new BizException("操作失败:未查询到优惠券");
+        }
         if (couponIdList.size() != couponCodeDtoList.size()) {
             throw new BizException("操作失败:优惠券数据异常");
         }
@@ -275,11 +284,88 @@ public class SysCouponCodeServiceImpl extends BaseServiceImpl<Long, SysCouponCod
             if (date.after(sysCouponCodeDto.getUseDeadlineDate())) {
                 throw new BizException("操作失败:优惠券已过期");
             }
+            //该商品只允许使用 allowType参数内的优惠券类型,null则不验证
+            if (Objects.nonNull(allowType) && !WrapperUtil.checkStr(sysCouponCodeDto.getTypeDetail(), allowType)) {
+                throw new BizException("操作失败 : 优惠券类型使用错误");
+            }
         }
-
         return couponCodeDtoList;
     }
 
+    /**
+     * 获取优惠券相关参数-校验优惠券和传入的支付金额是否合法
+     *
+     * @param couponIdList 优惠券集合
+     * @param total        本次订单所有商品的总数量
+     * @param payAmount    页面传入的本次支付的金额
+     * @param allowType    本次允许使用的优惠券类型,null则不验证
+     */
+    @Override
+    public CouponPayParam getCouponPayParam(List<Integer> couponIdList, Integer total, BigDecimal payAmount, String... allowType) {
+        if (CollectionUtils.isEmpty(couponIdList)) {
+            return null;
+        }
+        //查询本次付款使用的优惠券
+        List<SysCouponCodeDto> sysCouponCodeDtoList = checkCoupon(couponIdList, allowType);
+        //全类型优惠券的总额度
+        BigDecimal fullTypeTotal = new BigDecimal(0);
+        //非全类型优惠券的总额度
+        BigDecimal notFullTypeTotal = new BigDecimal(0);
+        //非全类型优惠券的总数量
+        AtomicInteger notFullTypeTotalNum = new AtomicInteger(0);
+        //优惠券减免的总额度
+        BigDecimal couponRemitTotal = new BigDecimal(0);
+        //交易阈值 最后付款的金额大于该值就不对
+        BigDecimal threshold;
+
+        for (SysCouponCodeDto d : sysCouponCodeDtoList) {
+            if (d.getTypeDetail().equals(CouponDetailTypeEnum.FULLCOUPON.getCode())) {
+                fullTypeTotal = fullTypeTotal.add(d.getFullAmount());
+            } else {
+                notFullTypeTotal = notFullTypeTotal.add(d.getFullAmount());
+                notFullTypeTotalNum.set(notFullTypeTotalNum.incrementAndGet());
+            }
+            couponRemitTotal = couponRemitTotal.add(d.getFaceValue());
+        }
+        //阈值 = (全品类券总面值 ÷ 总商品数量) + (非全品类券总面值 ÷ 非全品类券的数量)
+        threshold = fullTypeTotal.divide(new BigDecimal(total), 3, RoundingMode.HALF_UP)
+                .add(notFullTypeTotal.divide(new BigDecimal(notFullTypeTotalNum.get()), 3, RoundingMode.HALF_UP));
+
+        if (payAmount.compareTo(threshold) < 0) {
+            throw new BizException("优惠券使用错误,交易失败!");
+        }
+        //将各种类型的优惠券合并 算出总面试 总减免金额
+        Map<String, CouponPayTypeInfo> couponTypeInfo = new HashMap<>();
+        //根据CouponDetailTypeEnum 进行分组集合
+        WrapperUtil.groupList(sysCouponCodeDtoList, SysCouponCodeDto::getTypeDetail)
+                .forEach((typeDetail, list) -> {
+                    CouponPayTypeInfo coupon = new CouponPayTypeInfo();
+                    list.forEach(c -> {
+                        coupon.setCouponAmount(coupon.getCouponAmount().add(c.getFullAmount()));
+                        coupon.setFaceValue(coupon.getFaceValue().add(c.getFaceValue()));
+                    });
+                    coupon.setTypeDetail(typeDetail);
+                    couponTypeInfo.put(typeDetail, coupon);
+                });
+
+        CouponPayParam result = new CouponPayParam();
+        result.setCouponRemitTotal(couponRemitTotal);
+        result.setCouponTypeInfo(couponTypeInfo);
+        return result;
+    }
+
+    /**
+     * 获取优惠券相关参数-校验优惠券和传入的支付金额是否合法
+     *
+     * @param couponIdList 优惠券集合
+     * @param total        本次订单所有商品的总数量
+     * @param payAmount    页面传入的本次支付的金额
+     */
+    @Override
+    public CouponPayParam getCouponPayParam(List<Integer> couponIdList, Integer total, BigDecimal payAmount) {
+        return getCouponPayParam(couponIdList, total, payAmount, null);
+    }
+
     @Override
     public List<SysCouponCodeDto> findByIdList(List<Integer> couponIdList) {
         return sysCouponCodeDao.findByIdList(couponIdList);

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

@@ -93,7 +93,7 @@ public class SysCouponIssueRecordServiceImpl extends ServiceImpl<SysCouponIssueR
     @Transactional(rollbackFor = Exception.class)
     public void manualIssueCoupon(Integer userId, Integer couponId) {
         sysCouponCodeService.exchangeCoupon(userId, couponId,
-                null, 1, 1, null);
+                null, 1, 0, null);
     }
 
     /**
@@ -153,7 +153,7 @@ public class SysCouponIssueRecordServiceImpl extends ServiceImpl<SysCouponIssueR
      */
     @Override
     public List<SysCoupon> queryCanBeGetCoupon(Integer userId) {
-        return baseMapper.queryUserCanGetCoupon(userId);
+        return baseMapper.queryUserCanGetCoupon(userId,TenantContextHolder.getTenantId());
     }
 
     /**

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

@@ -19,6 +19,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Isolation;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.math.BigDecimal;
 import java.util.*;
 
 @Service
@@ -153,6 +154,9 @@ public class SysCouponServiceImpl extends BaseServiceImpl<Integer, SysCoupon> im
                 if (Objects.isNull(sysCoupon.getFullAmount())) {
                     throw new BizException("请指定达标金额");
                 }
+                if (sysCoupon.getFaceValue().compareTo(sysCoupon.getFullAmount()) > 0) {
+                    throw new BizException("优惠的金额不能超过优惠券满减额度");
+                }
                 break;
             default:
                 throw new BizException("请指定优惠券类型");

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

@@ -20,6 +20,9 @@ public class SysEmailServiceImpl extends ServiceImpl<SysEmailDao, SysEmail> impl
 
     private final static Logger logger = LoggerFactory.getLogger(SysEmailServiceImpl.class);
 
-
+    @Override
+    public SysEmail query() {
+        return baseMapper.query();
+    }
 }
 

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

@@ -313,8 +313,9 @@ public class SysMessageServiceImpl extends BaseServiceImpl<Long, SysMessage> imp
 			throw new BizException("接收地址不能为空");
 		}
 		// email data from database load, 使用接收者 tenantId, 假设发送者和接收者为同一机构
-		Integer tenantId = getTenantIdByUser(null, String.valueOf(receivers.keySet().stream().findFirst()));
-		loadEmailInfo(messageSender, tenantId);
+		if (Objects.equals(messageSender.getSendMode(), "EMAIL")) {
+			loadEmailInfo(null, receivers.values().stream().findFirst().orElse(null));
+		}
 		if(StringUtils.isNotEmpty(jpushType) && jpushType == "STUDENT"){
 			//如果不是缴费信息
 			if(type != STUDENT_PUSH_VIP_BUY){
@@ -449,8 +450,9 @@ public class SysMessageServiceImpl extends BaseServiceImpl<Long, SysMessage> imp
 			throw new BizException("接收地址不能为空");
 		}
 		// email data from database load
-		Integer tenantId = getTenantIdByUser(userId, receiver);
-		loadEmailInfo(messageSender, tenantId);
+		if (Objects.equals(messageSender.getSendMode(), "EMAIL")) {
+			loadEmailInfo(userId, receiver);
+		}
 		Date date = new Date();
 		SendStatusEnum status = SendStatusEnum.WAIT;
 		String errorMsg = null;
@@ -497,16 +499,16 @@ public class SysMessageServiceImpl extends BaseServiceImpl<Long, SysMessage> imp
 		}
 	}
 
-	private void loadEmailInfo(MessageSender messageSender, Integer tenantId) {
-		if (Objects.equals(messageSender.getSendMode(), "EMAIL")) {
-			SysEmail email1 = sysEmailService.getOne(new WrapperUtil<SysEmail>().hasEq("tenant_id_", tenantId).queryWrapper());
-			messageSenderPluginContext.sysEmail.setHostName(email1.getHostName());
-			messageSenderPluginContext.sysEmail.setSmtpPort(email1.getSmtpPort());
-			messageSenderPluginContext.sysEmail.setUserName(email1.getUserName());
-			messageSenderPluginContext.sysEmail.setPassword(email1.getPassword());
-			messageSenderPluginContext.sysEmail.setFromName(email1.getFromName());
-			messageSenderPluginContext.sysEmail.setFrom(email1.getFrom());
-		}
+	private void loadEmailInfo(Integer userId,  String receiver) {
+		Integer tenantId = getTenantIdByUser(userId, receiver);
+		SysEmail email1 = sysEmailService.getOne(new WrapperUtil<SysEmail>().hasEq("tenant_id_", tenantId).queryWrapper());
+		messageSenderPluginContext.sysEmail.setHostName(email1.getHostName());
+		messageSenderPluginContext.sysEmail.setSmtpPort(email1.getSmtpPort());
+		messageSenderPluginContext.sysEmail.setUserName(email1.getUserName());
+		messageSenderPluginContext.sysEmail.setPassword(email1.getPassword());
+		messageSenderPluginContext.sysEmail.setFromName(email1.getFromName());
+		messageSenderPluginContext.sysEmail.setFrom(email1.getFrom());
+
 	}
 
 	@Override

+ 79 - 11
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysMusicScoreCategoriesServiceImpl.java

@@ -1,25 +1,23 @@
 package com.ym.mec.biz.service.impl;
 
 
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
 import com.ym.mec.auth.api.dto.MusicScoreQueryInfo;
-import com.ym.mec.auth.api.entity.SysMenu;
 import com.ym.mec.biz.dal.dao.SysMusicScoreCategoriesDao;
 import com.ym.mec.biz.dal.dao.SysMusicScoreDao;
 import com.ym.mec.biz.dal.entity.SysMusicScoreCategories;
-import com.ym.mec.biz.dal.page.SysExamSongQueryInfo;
 import com.ym.mec.biz.service.SysMusicScoreCategoriesService;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.exception.BizException;
-import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.stream.Collectors;
 
 @Service
 public class SysMusicScoreCategoriesServiceImpl extends BaseServiceImpl<Integer, SysMusicScoreCategories> implements SysMusicScoreCategoriesService {
@@ -47,6 +45,38 @@ public class SysMusicScoreCategoriesServiceImpl extends BaseServiceImpl<Integer,
 	}
 
 	@Override
+	public List<SysMusicScoreCategories> queryCategoriesTreeList(String categoryIds) {
+		
+		categoryIds = categoryIds.endsWith(",") ? categoryIds.substring(0, categoryIds.length() - 1) : categoryIds;
+
+		List<SysMusicScoreCategories> rows = new ArrayList<SysMusicScoreCategories>();
+		
+		List<SysMusicScoreCategories> categoryList = sysMusicScoreCategoriesDao.queryByIds(categoryIds);
+		
+		SysMusicScoreCategories parentCategory = null;
+		SysMusicScoreCategories subCategory = null;
+		for(SysMusicScoreCategories smsc : categoryList){
+			
+			if(smsc == null){
+				continue;
+			}
+			parentCategory = getParentTree(smsc);
+			subCategory = getChildTree(smsc);
+			
+			if(parentCategory == null){
+				insertSubToParent(rows, subCategory);
+			}else{
+				parentCategory.getSysMusicScoreCategoriesList().add(subCategory);
+				insertSubToParent(rows, parentCategory);
+			}
+			
+			
+		}
+		
+		return rows;
+	}
+
+	@Override
 	@Transactional(rollbackFor = Exception.class)
 	public void save(SysMusicScoreCategories musicScoreCategories) {
 		String organId = musicScoreCategories.getOrganId();
@@ -210,4 +240,42 @@ public class SysMusicScoreCategoriesServiceImpl extends BaseServiceImpl<Integer,
 		}
 		return categories;
 	}
+    
+    private SysMusicScoreCategories getChildTree(SysMusicScoreCategories sysMusicScoreCategories){
+    	
+    	List<SysMusicScoreCategories> subCategoryList = sysMusicScoreCategoriesDao.findByParentId(sysMusicScoreCategories.getId(), null, null);
+    	
+    	if(subCategoryList != null && subCategoryList.size() > 0){
+    		sysMusicScoreCategories.setSysMusicScoreCategoriesList(subCategoryList);
+    		for(SysMusicScoreCategories sc : subCategoryList){
+    			getChildTree(sc);
+    		}
+    	}
+    	
+    	return sysMusicScoreCategories;
+    }
+    
+	private SysMusicScoreCategories getParentTree(SysMusicScoreCategories sysMusicScoreCategories) {
+		if (sysMusicScoreCategories != null && sysMusicScoreCategories.getParentId() > 0) {
+			SysMusicScoreCategories parentCategories = sysMusicScoreCategoriesDao.queryByParentId(sysMusicScoreCategories.getParentId());
+			if (parentCategories != null) {
+				if(parentCategories.getParentId() > 0){
+					return getParentTree(parentCategories);
+				}
+				return parentCategories;
+			}
+		}
+
+		return null;
+	}
+	
+	private void insertSubToParent(List<SysMusicScoreCategories> parentTree, SysMusicScoreCategories targetCategory) {
+		for (SysMusicScoreCategories target : parentTree) {
+			if (targetCategory.getId().intValue() == target.getId()) {
+				insertSubToParent(target.getSysMusicScoreCategoriesList(),targetCategory.getSysMusicScoreCategoriesList().get(0));
+				return;
+			}
+		}
+		parentTree.add(targetCategory);
+	}
 }

+ 21 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TenantInfoServiceImpl.java

@@ -27,6 +27,7 @@ import com.ym.mec.common.service.IdGeneratorService;
 import com.ym.mec.thirdparty.adapay.Payment;
 import com.ym.mec.thirdparty.yqpay.DateUtils;
 import com.ym.mec.thirdparty.yqpay.Msg;
+import com.ym.mec.util.date.DateUtil;
 import org.apache.commons.collections.CollectionUtils;
 import org.joda.time.LocalDate;
 import org.joda.time.LocalDateTime;
@@ -80,6 +81,8 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoDao, TenantInfo
     private TenantOrderRecordService tenantOrderRecordService;
     @Autowired
     private TenantAssetsInfoService assetsInfoService;
+    @Autowired
+    private StudentService studentService;
 
     /**
      * 新增机构
@@ -644,5 +647,23 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoDao, TenantInfo
         return record.getOrderState() == 1;
     }
 
+    @Override
+    public TenantProductSumm queryTenantInfoProductSumm(Integer tenantId) {
+        TenantProductSumm tps = baseMapper.queryTenantInfoProductSumm(tenantId);
+
+        if (tps.getExpiryDateEnd() == null) {
+            tps.setValidRemaining(0);
+        } else {
+            tps.setValidRemaining(DateUtil.daysBetween(new Date(), tps.getExpiryDateEnd()));
+        }
+        tps.setSumBalance(tps.getBalance().add(tps.getFrozenAmount()));
+
+        Map<String, Object> params = new HashMap<>();
+        params.put("tenantId", tenantId);
+        int studentCount = studentService.findCount(params);
+        tps.setStudentNum(studentCount);
+        return tps;
+    }
+
 
 }

+ 7 - 6
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TenantOrderRecordServiceImpl.java

@@ -13,6 +13,7 @@ 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.common.tenant.TenantContextHolder;
 import com.ym.mec.thirdparty.adapay.Payment;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
@@ -55,6 +56,10 @@ public class TenantOrderRecordServiceImpl extends ServiceImpl<TenantOrderRecordD
 
     @Override
     public PageInfo<TenantOrderRecord> queryPage(TenantOrderRecordDto dto) {
+        Integer tenantId = TenantContextHolder.getTenantId();
+        if (dto.getTenantId() == null) {
+            dto.setTenantId(tenantId.toString());
+        }
         Page<TenantOrderRecord> pageInfo = PageUtil.getPage(dto.getPage(), dto.getRows());
         pageInfo.setDesc("a.created_time_ ");
         WrapperUtil.toListOptional(dto.getTenantId())
@@ -233,14 +238,13 @@ public class TenantOrderRecordServiceImpl extends ServiceImpl<TenantOrderRecordD
         tenantProductInfoService.updateById(productInfo);
     }
 
-    private int rechargeSuccess(TenantOrderRecord record) throws Exception {
+    private void rechargeSuccess(TenantOrderRecord record) throws Exception {
         // 更新 tenantAssetsInfo
         log.info("checkRechargeCheck  updateAmount>>>>>");
         int ret = assetsInfoService.updateAmount(record.getTenantId(), record.getExpectAmount());
         if (ret != 1) {
             throw new Exception("更新支付失败");
         }
-        return ret;
     }
 
     @Override
@@ -255,10 +259,7 @@ public class TenantOrderRecordServiceImpl extends ServiceImpl<TenantOrderRecordD
             baseMapper.updateById(record);
             try {
                 log.info("checkRechargeCheck  rechargeSuccess>>>>>");
-                int ret = this.rechargeSuccess(record); // 充值成功
-                if (ret == 0) {
-                    throw new Exception("更新失败");
-                }
+                this.rechargeSuccess(record); // 充值成功
                 return true;
             } catch (Exception e) {
                 e.printStackTrace();

File diff suppressed because it is too large
+ 3518 - 3513
mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java


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

@@ -119,7 +119,15 @@
     </update>
 
     <select id="findByPlatformOrderId" resultMap="CloudTeacherOrder">
-        select * from cloud_teacher_order where platform_order_id_ = #{platformOrderId}
+        select * from cloud_teacher_order cto
+        left join sys_user su on cto.student_id_ = su.id_
+        where cto.platform_order_id_ = #{platformOrderId} and su.del_flag_ = 0
+    </select>
+
+    <select id="findUserNameByOrderId" resultType="java.lang.String">
+        select su.phone_ as phone from cloud_teacher_order cto
+        left join sys_user su on cto.student_id_ = su.id_
+        where platform_order_id_ = #{platformOrderId} and su.del_flag_ = 0
     </select>
 
     <update id="updateOrderStatusOK">
@@ -337,7 +345,10 @@
         left join subject sj on s.subject_id_list_ = sj.id_
         left join student_registration sr ON cto.student_id_ = sr.user_id_
         <where>
-            cto.status_ = #{status} AND sr.music_group_id_ = #{musicGroupId} AND cto.tenant_id_ = #{tenantId}
+            cto.status_ = #{status} AND cto.tenant_id_ = #{tenantId}
+            <if test="musicGroupId != null and musicGroupId != ''">
+            	AND sr.music_group_id_ = #{musicGroupId}
+            </if>
             <if test="queryCondition != null and queryCondition != ''">
                 AND (u.username_ LIKE CONCAT('%', #{queryCondition}, '%') or u.phone_ = #{queryCondition} or u.id_ = #{queryCondition})
             </if>
@@ -355,7 +366,10 @@
         left join subject sj on s.subject_id_list_ = sj.id_
         left join student_registration sr ON cto.student_id_ = sr.user_id_
         <where>
-            cto.status_ = #{status} AND sr.music_group_id_ = #{musicGroupId} AND cto.tenant_id_ = #{tenantId}
+            cto.status_ = #{status} AND cto.tenant_id_ = #{tenantId}
+            <if test="musicGroupId != null and musicGroupId != ''">
+            	AND sr.music_group_id_ = #{musicGroupId}
+            </if>
             <if test="queryCondition != null and queryCondition != ''">
                 AND (u.username_ LIKE CONCAT('%', #{queryCondition}, '%') or u.phone_ = #{queryCondition} or u.id_ = #{queryCondition})
             </if>
@@ -464,5 +478,9 @@
             </if>
         </where>
     </sql>
+    
+    <select id="queryByUserIdAndStatus" resultMap="CloudTeacherOrder">
+        select cto.* from cloud_teacher_order cto where cto.student_id_ = #{userId} and cto.status_ = #{status}
+    </select>
 
 </mapper>

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

@@ -1722,7 +1722,7 @@
 		UNION ALL
 		(
 			SELECT
-				su.organ_id_,sr.tenant_id_,
+				su.organ_id_,cssp.tenant_id_,
 				cssp.user_id_
 			FROM
 				course_schedule_student_payment cssp

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

@@ -342,10 +342,10 @@
 			tenant_id_ = #{tenantId}
 			<if test="searchType != null and searchType != ''">
 				<if test="searchType == 'MUSIC_PATROL_ITEM'">
-					irdr.data_type_ = 'MUSIC_PATROL_ITEM'
+					and irdr.data_type_ = 'MUSIC_PATROL_ITEM'
 				</if>
 				<if test="searchType == 'INSPECTION_ITEM_PLAN'">
-					irdr.data_type_ = 'INSPECTION_ITEM_PLAN'
+					and irdr.data_type_ = 'INSPECTION_ITEM_PLAN'
 				</if>
 			</if>
 			<if test="hasDealTime!=null and hasDealTime">

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

@@ -194,7 +194,7 @@
     </select>
     <sql id="queryPageSql">
         <where>
-        	s.tenant_id_ = #{tenantId}
+        	s.tenant_id_ = #{tenantId} and su.del_flag_ = 0
             <if test="organId != null and organId != ''">
                 AND FIND_IN_SET(su.organ_id_,#{organId})
             </if>

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

@@ -1725,8 +1725,9 @@
           AND sr.user_id_ NOT IN (SELECT DISTINCT(cssp.`user_id_`)  FROM `course_schedule_student_payment` cssp
                                                  LEFT JOIN course_schedule cs on cssp.`course_schedule_id_` = cs.`id_`
                                                  LEFT JOIN `music_group` mg on mg.`id_` = cssp.`music_group_id_`
-      WHERE cs.`group_type_` = 'MUSIC' AND cs.`status_` = 'OVER' AND mg.`status_` = 'PROGRESS' and sr.tenant_id_ = #{tenantId}
-      GROUP BY cssp.`user_id_` HAVING COUNT(cs.`id_`) > 4) AND sr.user_id_ NOT IN (SELECT user_id_ FROM student WHERE subject_id_list_ REGEXP '21|25|26|27|28|29')
+      WHERE cs.`group_type_` = 'MUSIC' AND cs.`status_` = 'OVER' AND mg.`status_` = 'PROGRESS' and mg.tenant_id_ = #{tenantId}
+      GROUP BY cssp.`user_id_` HAVING COUNT(cs.`id_`) > 4) 
+      <!-- AND sr.user_id_ NOT IN (SELECT user_id_ FROM student WHERE subject_id_list_ REGEXP '21|25|26|27|28|29') -->
     </select>
     <resultMap id="CloudTeacherActiveTargetJsonDto" type="com.ym.mec.biz.dal.dto.CloudTeacherActiveTargetJsonDto">
         <result property="targetNum" column="target_num_"/>

+ 18 - 3
mec-biz/src/main/resources/config/mybatis/SubjectMapper.xml

@@ -144,10 +144,10 @@
         </where>
     </select>
 
-    <select id="search" resultMap="Subject">
-        SELECT * FROM `subject`
+    <select id="queryPageByIdOrNameCount" resultType="integer">
+        SELECT count(1) FROM `subject`
         <where>
-            del_flag_ = 0
+            del_flag_ = 0 AND parent_subject_id_  != 0
             <if test="parentSubjectId != null and parentSubjectId != ''">
                 AND parent_subject_id_ = #{parentSubjectId}
             </if>
@@ -156,6 +156,21 @@
             </if>
         </where>
     </select>
+    <select id="queryPageByIdOrName" resultMap="Subject">
+        SELECT *,
+               (select name_ from `subject` s1 where s.parent_subject_id_ = s1.id_) as parentSubjectName
+               FROM `subject` s
+        <where>
+            s.del_flag_ = 0 AND s.parent_subject_id_  != 0
+            <if test="parentSubjectId != null and parentSubjectId != ''">
+                AND s.parent_subject_id_ = #{parentSubjectId}
+            </if>
+            <if test="search != null and search != ''">
+                AND (s.id_ = #{search} or s.name_ like concat('%', #{search}, '%'))
+            </if>
+        </where>
+        <include refid="global.limit"/>
+    </select>
 
     <sql id="querySubPageSql">
         <where>

+ 1 - 0
mec-biz/src/main/resources/config/mybatis/SysCouponCodeMapper.xml

@@ -145,6 +145,7 @@
 
 	<select id="countWithUserAndCoupon" resultType="int">
 		SELECT COUNT(id_) FROM sys_coupon_code WHERE user_id_=#{userId} AND coupon_id_=#{couponId}
+		                                         AND usage_status_  <![CDATA[ <> ]]> 2
 	</select>
 
 	<sql id="querySysCouponUseListCondition">

+ 48 - 35
mec-biz/src/main/resources/config/mybatis/SysCouponIssueRecordMapper.xml

@@ -96,8 +96,7 @@
     <update id="opsConsume" parameterType="object">
         UPDATE sys_coupon
         SET
-            consume_num_ = consume_num_ - #{consumeNum},
-            stock_count_ = stock_count_ + #{consumeNum}
+            consume_num_ = consume_num_ - #{consumeNum}
         WHERE id_ = #{id}
     </update>
 
@@ -128,39 +127,53 @@
     </resultMap>
 
     <select id="queryUserCanGetCoupon" resultMap="SysCoupon">
-        select id_,
-               name_,
-               description_,
-               status_,
-               issuance_type_,
-               type_,
-               type_detail_,
-               face_value_,
-               full_amount_,
-               limit_exchange_num_,
-               effective_type_,
-               deadline_,
-               effective_start_time_,
-               effective_expire_time_,
-               end_date_,
-               start_date_,
-               stock_count_,
-               consume_num_,
-               warning_stock_num_,
-               warning_status_,
-               create_time_,
-               update_time_,
-               tenant_id_
-        from sys_coupon
-        where issuance_type_ = 0
-          and status_ = 1
-          and (effective_expire_time_ > now() or deadline_ > 0)
-          and (stock_count_ >= consume_num_ or stock_count_ = -1)
-          and id_ not in (
-            select distinct coupon_id_
-            from sys_coupon_code
-            where user_id_ = #{userId}
-        )
+        SELECT DISTINCT
+            id_,
+            name_,
+            description_,
+            status_,
+            issuance_type_,
+            type_,
+            type_detail_,
+            face_value_,
+            full_amount_,
+            limit_exchange_num_,
+            effective_type_,
+            deadline_,
+            effective_start_time_,
+            effective_expire_time_,
+            end_date_,
+            start_date_,
+            stock_count_,
+            consume_num_,
+            warning_stock_num_,
+            warning_status_,
+            create_time_,
+            update_time_,
+            tenant_id_
+        FROM
+            sys_coupon AS a
+                LEFT JOIN
+            (SELECT
+                 COUNT(coupon_id_) AS couponNum,
+                 coupon_id_
+             FROM
+                 sys_coupon_code
+             WHERE usage_status_  <![CDATA[ <> ]]> 2 AND user_id_ = #{userId}
+             GROUP BY coupon_id_) AS b
+            ON a.id_ = b.coupon_id_
+        WHERE issuance_type_ = 0
+          AND status_ = 1
+          AND tenant_id_ = #{tenantId}
+          AND a.`limit_exchange_num_` > IFNULL(b.couponNum,0)
+          AND (
+                    effective_expire_time_ > NOW()
+                OR deadline_ > 0
+            )
+          AND (
+                    stock_count_ > consume_num_
+                OR stock_count_ = - 1
+            )
     </select>
 
 </mapper>

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

@@ -111,10 +111,7 @@
     <update id="updateExchange" parameterType="map">
         UPDATE sys_coupon
         <set>
-            consume_num_ =consume_num_ + #{param.exchangeNum},
-            <if test="param.checkStock != null">
-                stock_count_ = stock_count_ - #{param.exchangeNum},
-            </if>
+            consume_num_ = consume_num_ + #{param.exchangeNum},
             <if test="param.warningStatus != null">
                 warning_status_ = #{param.warningStatus},
             </if>
@@ -123,7 +120,7 @@
         WHERE id_ = #{param.id}
         and tenant_id_ = #{param.tenantId}
         <if test="param.checkStock != null">
-           and stock_count_ >= #{param.exchangeNum}
+           and stock_count_ > (consume_num_ + #{param.exchangeNum})
         </if>
     </update>
 

+ 27 - 22
mec-biz/src/main/resources/config/mybatis/SysEmailMapper.xml

@@ -1,28 +1,33 @@
 <?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.SysEmailDao">
-  <resultMap id="BaseResultMap" type="com.ym.mec.biz.dal.entity.SysEmail">
-                       <id column="id_" jdbcType="INTEGER" property="id"/>
-                                  <result column="host_name_" jdbcType="VARCHAR" property="hostName"/>
-                                  <result column="smtp_port_" jdbcType="INTEGER" property="smtpPort"/>
-                                  <result column="user_name_" jdbcType="VARCHAR" property="userName"/>
-                                  <result column="password_" jdbcType="VARCHAR" property="password"/>
-                                  <result column="from_" jdbcType="VARCHAR" property="from"/>
-                                  <result column="from_name_" jdbcType="VARCHAR" property="fromName"/>
-                                  <result column="tenant_id_" jdbcType="INTEGER" property="tenantId"/>
-                </resultMap>
-  
-  <sql id="Base_Column_List">    
-                                            id_, host_name_, smtp_port_, user_name_, password_, from_, from_name_, tenant_id_
-  </sql>
-  
-   <insert id="insertBatch" keyColumn="id_" keyProperty="id" useGeneratedKeys="true"
+    <resultMap id="BaseResultMap" type="com.ym.mec.biz.dal.entity.SysEmail">
+        <id column="id_" jdbcType="INTEGER" property="id"/>
+        <result column="host_name_" jdbcType="VARCHAR" property="hostName"/>
+        <result column="smtp_port_" jdbcType="INTEGER" property="smtpPort"/>
+        <result column="user_name_" jdbcType="VARCHAR" property="userName"/>
+        <result column="password_" jdbcType="VARCHAR" property="password"/>
+        <result column="from_" jdbcType="VARCHAR" property="from"/>
+        <result column="from_name_" jdbcType="VARCHAR" property="fromName"/>
+        <result column="tenant_id_" jdbcType="INTEGER" property="tenantId"/>
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        id_, host_name_, smtp_port_, user_name_, password_, from_, from_name_, tenant_id_
+    </sql>
+
+    <insert id="insertBatch" keyColumn="id_" keyProperty="id" useGeneratedKeys="true"
             parameterType="com.ym.mec.biz.dal.entity.SysEmail">
-       insert into sys_email(host_name_, smtp_port_, user_name_, password_, from_, from_name_, tenant_id_)
-       values
-       <foreach collection="entities" item="entity" separator=",">
-       (#{entity.hostName}, #{entity.smtpPort}, #{entity.userName}, #{entity.password}, #{entity.from}, #{entity.fromName}, #{entity.tenantId})
-       </foreach>
-   </insert>
+        insert into sys_email(host_name_, smtp_port_, user_name_, password_, from_, from_name_, tenant_id_)
+        values
+        <foreach collection="entities" item="entity" separator=",">
+            (#{entity.hostName}, #{entity.smtpPort}, #{entity.userName}, #{entity.password}, #{entity.from},
+            #{entity.fromName}, #{entity.tenantId})
+        </foreach>
+    </insert>
+    <select id="query" resultType="com.ym.mec.biz.dal.entity.SysEmail">
+        select *
+        from sys_email
+    </select>
 
 </mapper>

+ 8 - 0
mec-biz/src/main/resources/config/mybatis/SysMusicScoreCategoriesMapper.xml

@@ -196,4 +196,12 @@
 			</if>
 		</where>
 	</sql>
+	
+    <select id="queryByIds" resultMap="SysMusicScoreCategories">
+		SELECT * from sys_music_score_categories smsc where find_in_set(smsc.id_, #{ids})
+	</select>
+	
+	<select id="queryByParentId" resultMap="SysMusicScoreCategories" >
+		SELECT categ.* FROM sys_music_score_categories categ WHERE categ.id_ = #{parentId}
+	</select>
 </mapper>

+ 16 - 0
mec-biz/src/main/resources/config/mybatis/TenantInfoMapper.xml

@@ -89,5 +89,21 @@
             </if>
         </where>
     </select>
+    <select id="queryTenantInfoProductSumm" resultType="com.ym.mec.biz.dal.entity.TenantProductSumm">
+            SELECT t.*, ps.name_ as serverName,
+                   tp.pay_date_ as expiryDate,
+                   tp.expiry_date_ as expiryDateEnd,
+                   tp.expiry_count_  as expiryCount,
+                   tp.expiry_unit_ as expiryUnit,
+                   ta.balance_ as balance,
+                   ta.frozen_amount_ as frozenAmount,
+                   psd.student_up_limit_ as studentUpLimit
+            FROM `tenant_info` t
+                     left join tenant_assets_info ta on ta.tenant_id_ = t.id_
+                     left join tenant_product_info tp on tp.tenant_id_ = t.id_
+                     left join platform_serve ps on tp.serve_id_ = ps.id_
+                     left join platform_serve_detail psd on tp.serve_detail_id_ = psd.id_
+            where t.id_ = #{tenantId}
+    </select>
 
 </mapper>

+ 10 - 6
mec-biz/src/main/resources/config/mybatis/TenantOrderRecordMapper.xml

@@ -54,6 +54,9 @@
                 LEFT JOIN tenant_info AS b
                           ON a.tenant_id_ = b.id_
     <where>
+        <if test="param.tenantId != null">
+            a.tenant_id_ = #{param.tenantId}
+        </if>
         <if test="param.orderNo != null ">
             AND a.`order_no_` = #{param.orderNo}
         </if>
@@ -66,12 +69,13 @@
         <if test="param.orderState != null ">
             AND a.`order_state_` = #{param.orderState}
         </if>
-        <if test="param.tenantIdList != null ">
-            AND a.`tenant_id_`  IN
-            <foreach collection="param.tenantIdList" item="id" open="(" close=")" separator=",">
-                #{id}
-            </foreach>
-        </if>
+<!--        前端去掉 tenantId 搜索 -->
+<!--        <if test="param.tenantIdList != null ">-->
+<!--            AND a.`tenant_id_`  IN-->
+<!--            <foreach collection="param.tenantIdList" item="id" open="(" close=")" separator=",">-->
+<!--                #{id}-->
+<!--            </foreach>-->
+<!--        </if>-->
         <if test="param.startDate != null">
             AND a.`created_time_` <![CDATA[ >= ]]>  #{param.startDate}
         </if>

+ 12 - 0
mec-common/common-core/src/main/java/com/ym/mec/common/page/WrapperUtil.java

@@ -158,6 +158,18 @@ public class WrapperUtil<T> {
     }
 
     /**
+     * 检查str中是否包含 o
+     * 包含返回true
+     */
+    public static boolean checkStr(String o, String... str) {
+        if (ObjPredicate.test(str)) {
+            return Arrays.asList(str).contains(o);
+        } else {
+            return false;
+        }
+    }
+
+    /**
      * 根据分组groupVal进行聚合分组
      *
      * @param list     待聚合的集合

+ 12 - 2
mec-student/src/main/java/com/ym/mec/student/controller/StudentManageController.java

@@ -1,6 +1,5 @@
 package com.ym.mec.student.controller;
 
-import com.ym.mec.common.tenant.TenantContextHolder;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
@@ -25,8 +24,10 @@ import org.springframework.web.multipart.MultipartFile;
 
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.dao.CloudTeacherOrderDao;
 import com.ym.mec.biz.dal.dto.CashAccountDetail;
 import com.ym.mec.biz.dal.entity.AppVersionInfo;
+import com.ym.mec.biz.dal.entity.CloudTeacherOrder;
 import com.ym.mec.biz.dal.entity.MemberRankSetting;
 import com.ym.mec.biz.dal.entity.Student;
 import com.ym.mec.biz.dal.entity.Subject;
@@ -51,7 +52,6 @@ import com.ym.mec.biz.service.UploadFileService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
 import com.ym.mec.common.entity.UploadReturnBean;
-import com.ym.mec.common.filters.TenantIdThreadLocal;
 import com.ym.mec.common.page.QueryInfo;
 import com.ym.mec.util.date.DateUtil;
 import com.ym.mec.util.http.HttpUtil;
@@ -95,6 +95,9 @@ public class StudentManageController extends BaseController {
     
     @Autowired
     private SysConfigService sysConfigService;
+    
+    @Autowired
+    private CloudTeacherOrderDao cloudTeacherOrderDao;
 
     private final static Logger LOGGER = LoggerFactory.getLogger(StudentManageController.class);
 
@@ -161,6 +164,13 @@ public class StudentManageController extends BaseController {
 
 		Map<String, Object> datas = new HashMap<String, Object>();
 		datas.put("student", student);
+		
+        List<CloudTeacherOrder> dataList = cloudTeacherOrderDao.queryByUserIdAndStatus(user.getId(),1);
+        if(dataList != null && dataList.size() > 0){
+        	datas.put("isExistPendingMember", true);
+        }else{
+        	datas.put("isExistPendingMember", false);
+        }
 
 		if (StringUtils.isNotBlank(platform)) {
 			AppVersionInfo appVersionInfo = null;

+ 2 - 0
mec-student/src/main/java/com/ym/mec/student/controller/StudentOrderController.java

@@ -253,7 +253,9 @@ public class StudentOrderController extends BaseController {
     })
     public Object executePayment(BigDecimal amount, String orderNo, String payChannel, String notifyUrl, String returnUrl, String orderSubject, String orderBody, String sign, String code, String platform) {
         try {
+            logger.info("=== 支付金额 {}, 订单号 {}, 支付通道 {} 订单主题 {} 订单Body {} 签名 {} Code {}, platform{}", amount, orderNo, payChannel, orderSubject, orderBody, sign, code, platform);
             Map<String, Object> payment = orderPayOpsService.executePayment(amount, orderNo, payChannel, returnUrl, orderSubject, orderBody, sign, code, platform);
+            logger.info("=== 支付完成");
             return succeed(payment);
         } catch (Exception e) {
             return failed(e.getMessage());

+ 2 - 2
mec-student/src/main/java/com/ym/mec/student/controller/SysMusicScoreAccompanimentController.java

@@ -28,7 +28,7 @@ public class SysMusicScoreAccompanimentController extends BaseController {
     public Object queryPage(SysExamSongQueryInfo queryInfo) {
         queryInfo.setType("COMMON");
         if(queryInfo.getClientType() == null){
-            queryInfo.setClientType(ClientTypeEnum.NETWORK_ROOM);
+            queryInfo.setClientType(ClientTypeEnum.SMART_PRACTICE);
         }
         queryInfo.setShowFlag(1);
         return succeed(sysMusicScoreAccompanimentService.queryAccPage(queryInfo));
@@ -40,7 +40,7 @@ public class SysMusicScoreAccompanimentController extends BaseController {
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         queryInfo.setType("COMMON");
         if(queryInfo.getClientType() == null){
-            queryInfo.setClientType(ClientTypeEnum.NETWORK_ROOM);
+            queryInfo.setClientType(ClientTypeEnum.SMART_PRACTICE);
         }
         queryInfo.setShowFlag(1);
         queryInfo.setOrganId(sysUser.getOrganId().toString());

+ 23 - 11
mec-student/src/main/java/com/ym/mec/student/controller/SysMusicScoreCategoriesController.java

@@ -1,19 +1,24 @@
 package com.ym.mec.student.controller;
 
-import com.ym.mec.auth.api.client.SysUserFeignService;
-import com.ym.mec.auth.api.dto.MusicScoreQueryInfo;
-import com.ym.mec.auth.api.entity.SysUser;
-import com.ym.mec.biz.dal.page.SysExamSongQueryInfo;
-import com.ym.mec.biz.service.SysMusicScoreCategoriesService;
-import com.ym.mec.common.controller.BaseController;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.http.HttpStatus;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.ym.mec.auth.api.client.SysUserFeignService;
+import com.ym.mec.auth.api.dto.MusicScoreQueryInfo;
+import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.entity.TenantConfig;
+import com.ym.mec.biz.dal.page.SysExamSongQueryInfo;
+import com.ym.mec.biz.service.SysMusicScoreCategoriesService;
+import com.ym.mec.biz.service.TenantConfigService;
+import com.ym.mec.common.controller.BaseController;
+
 @RequestMapping("sysMusicScoreCategories")
 @Api(tags = "曲库分类服务")
 @RestController
@@ -23,6 +28,9 @@ public class SysMusicScoreCategoriesController extends BaseController {
     private SysMusicScoreCategoriesService sysMusicScoreCategoriesService;
     @Autowired
     private SysUserFeignService sysUserFeignService;
+    
+    @Autowired
+    private TenantConfigService tenantConfigService;
 
 
     @ApiOperation(value = "分页查询")
@@ -33,11 +41,15 @@ public class SysMusicScoreCategoriesController extends BaseController {
 
     @ApiOperation(value = "树状列表")
     @GetMapping("/queryTree")
-    public Object queryTree(MusicScoreQueryInfo queryInfo) {
+    public Object queryTree() {
         SysUser sysUser = sysUserFeignService.queryUserInfo();
-        queryInfo.setOrganId(sysUser.getOrganId().toString());
-        queryInfo.setEnable(true);
-        return succeed(sysMusicScoreCategoriesService.queryTree(queryInfo));
+        if(sysUser == null || sysUser.getId() == null){
+        	return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+        
+        TenantConfig tenantConfig = tenantConfigService.getOne(new QueryWrapper<TenantConfig>().eq("tenant_id_", sysUser.getTenantId()));
+        
+        return succeed(sysMusicScoreCategoriesService.queryCategoriesTreeList(tenantConfig.getTeachingMaterialId()));
     }
 
     @ApiOperation(value = "获取分类详情")

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

@@ -20,7 +20,7 @@ import javax.annotation.Resource;
  * @since 2021-12-27 14:27:56
  */
 @RestController
-@RequestMapping("/appRedemptionCode")
+@RequestMapping("appRedemptionCode")
 public class AppRedemptionCodeController extends BaseController {
     /**
      * 服务对象

+ 14 - 0
mec-web/src/main/java/com/ym/mec/web/controller/CloudTeacherOrderController.java

@@ -1,13 +1,17 @@
 package com.ym.mec.web.controller;
 
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.ym.mec.biz.dal.entity.CloudTeacherStudent;
+import com.ym.mec.biz.dal.entity.TenantOrderRecord;
 import com.ym.mec.biz.dal.page.CloudTeacherAddQueryInfo;
 import com.ym.mec.biz.dal.page.CloudTeacherOrderQueryInfo;
 import com.ym.mec.biz.service.CloudTeacherOrderService;
 import com.ym.mec.biz.service.OrderPayOpsService;
+import com.ym.mec.biz.service.TenantOrderRecordService;
 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.page.WrapperUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.slf4j.Logger;
@@ -33,6 +37,9 @@ public class CloudTeacherOrderController extends BaseController {
     @Autowired
     private CloudTeacherOrderService cloudTeacherOrderService;
 
+    @Autowired
+    private TenantOrderRecordService tenantOrderRecordService;
+
     @ApiOperation(value = "手动添加会员")
     @PostMapping("/addStudents")
     @PreAuthorize("@pcs.hasPermissions('cloudTeacherOrder/addStudents')")
@@ -79,4 +86,11 @@ public class CloudTeacherOrderController extends BaseController {
     public HttpResponseResult<Boolean> payCheck(@RequestParam String orderNo) throws Exception {
         return succeed(cloudTeacherOrderService.payCheck(orderNo));
     }
+
+    @ApiOperation(value = "测试短信")
+    @GetMapping("/testsms")
+    public HttpResponseResult<Integer> testsms(@RequestParam String orderNo) throws Exception {
+        TenantOrderRecord tor = tenantOrderRecordService.getOne(new WrapperUtil<TenantOrderRecord>().hasEq("order_no_", orderNo).queryWrapper());
+        return succeed(cloudTeacherOrderService.sendSms(tor));
+    }
 }

+ 13 - 0
mec-web/src/main/java/com/ym/mec/web/controller/EmployeeController.java

@@ -59,6 +59,19 @@ public class EmployeeController extends BaseController {
         return succeed(employeeService.queryEmployByOrganId(queryInfo));
     }
 
+    @ApiOperation(value = "获取平台的员工")
+    @GetMapping("/queryPlatformEmploy")
+    @PreAuthorize("@pcs.hasPermissions('employee/queryPlatformEmploy')")
+    public Object queryPlatformEmploy(EmployeeQueryInfo queryInfo) throws Exception {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            return failed("用户信息获取失败");
+        }
+        queryInfo.setOrganId(null);
+        queryInfo.setTenantId(-1);
+        return succeed(employeeService.queryEmployByOrganId(queryInfo));
+    }
+
     @ApiOperation(value = "员工操作")
     @PostMapping("/employeeOperate")
     @PreAuthorize("@pcs.hasPermissions('employee/employeeOperate')")

+ 5 - 4
mec-web/src/main/java/com/ym/mec/web/controller/SubjectController.java

@@ -102,9 +102,10 @@ public class SubjectController extends BaseController {
     }
 
     @ApiOperation(value = "搜索按Id和名称")
-    @GetMapping("/search")
-    // @PreAuthorize("@pcs.hasPermissions('subject/search')")
-    public Object search(Integer parentSubjectId, String search){
-        return succeed(subjectService.search(parentSubjectId, search));
+    @PostMapping("/queryPageByIdOrName")
+    // @PreAuthorize("@pcs.hasPermissions('subject/queryPageByIdOrName')")
+    public Object queryPageByIdOrName(SubjectQueryInfo queryInfo){
+        return succeed(subjectService.queryPageByIdOrName(queryInfo));
     }
+
 }

+ 22 - 3
mec-web/src/main/java/com/ym/mec/web/controller/SysEmailController.java

@@ -1,9 +1,11 @@
 package com.ym.mec.web.controller;
 
-
-
 import com.ym.mec.biz.dal.entity.SysEmail;
 import com.ym.mec.biz.service.SysEmailService;
+import com.ym.mec.common.entity.HttpResponseResult;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 import com.ym.mec.common.controller.BaseController;
 
@@ -16,7 +18,8 @@ import javax.annotation.Resource;
  * @since 2022-01-04 17:07:43
  */
 @RestController
-@RequestMapping("/sysEmail")
+@Api(tags = "系统邮件服务")
+@RequestMapping("sysEmail")
 public class SysEmailController extends BaseController {
     /**
      * 服务对象
@@ -24,5 +27,21 @@ public class SysEmailController extends BaseController {
     @Resource
     private SysEmailService sysEmailService;
 
+
+    @ApiOperation(value = "修改")
+    @PostMapping("/update")
+    @PreAuthorize("@pcs.hasPermissions('sysEmail/update')")
+    public HttpResponseResult<SysEmail> update(@RequestBody SysEmail sysEmail) {
+        sysEmailService.updateById(sysEmail);
+        return succeed(sysEmail);
+    }
+
+    @ApiOperation(value = "查询")
+    @GetMapping("/query")
+    @PreAuthorize("@pcs.hasPermissions('sysEmail/query')")
+    public HttpResponseResult<SysEmail> query() {
+        return succeed(sysEmailService.query());
+    }
+
 }
 

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

@@ -18,7 +18,7 @@ import java.util.List;
  * @since 2021-12-22 14:27:02
  */
 @RestController
-@RequestMapping("/tenantAssetsInfo")
+@RequestMapping("tenantAssetsInfo")
 public class TenantAssetsInfoController extends BaseController {
 
     /**

+ 11 - 3
mec-web/src/main/java/com/ym/mec/web/controller/TenantInfoController.java

@@ -4,6 +4,7 @@ import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dto.TenantInfoDto;
 import com.ym.mec.biz.dal.entity.CloudTeacherStudent;
+import com.ym.mec.biz.dal.entity.TenantProductSumm;
 import com.ym.mec.biz.service.TenantInfoService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
@@ -26,7 +27,7 @@ import java.util.Map;
  * @author hgw
  * Created by 2021-12-07
  */
-@RequestMapping("/tenantInfo")
+@RequestMapping("tenantInfo")
 @Api(tags = "机构管理")
 @RestController
 public class TenantInfoController extends BaseController {
@@ -74,6 +75,13 @@ public class TenantInfoController extends BaseController {
         return succeed(tenantInfoService.queryTenantInfoCheck(id));
     }
 
+    @ApiOperation("查询机构产品")
+    @GetMapping(value = "/queryTenantInfoSumm")
+    public HttpResponseResult<TenantProductSumm> queryTenantInfoProductSumm() {
+        Integer tenantId = TenantContextHolder.getTenantId();
+        return succeed(tenantInfoService.queryTenantInfoProductSumm(tenantId));
+    }
+
     @ApiImplicitParams({
             @ApiImplicitParam(name = "search", dataType = "String", value = "关键字"),
             @ApiImplicitParam(name = "createdName", dataType = "String", value = "创建人"),
@@ -109,7 +117,7 @@ public class TenantInfoController extends BaseController {
 
     @ApiOperation(value = "机构充值")
     @GetMapping("/recharge/{amount}")
-    // @PreAuthorize("@pcs.hasPermissions('tenantInfo/recharge')")
+    @PreAuthorize("@pcs.hasPermissions('tenantInfo/recharge')")
     public HttpResponseResult<Map<String, Object>> recharge(
             @ApiParam(value = "充值金额", required = true) @PathVariable("amount") Double amount
     ) throws Exception {
@@ -119,7 +127,7 @@ public class TenantInfoController extends BaseController {
 
     @ApiOperation(value = "轮询查询订单状态")
     @GetMapping("/rechargeCheck/{orderNo}")
-    // @PreAuthorize("@pcs.hasPermissions('tenantInfo/payCheck')")
+    @PreAuthorize("@pcs.hasPermissions('tenantInfo/payCheck')")
     public HttpResponseResult<Boolean> rechargeCheck(
             @ApiParam(value = "订单号", required = true) @PathVariable("orderNo") String orderNo
     ) throws Exception {

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

@@ -27,7 +27,7 @@ import java.util.Map;
  */
 @RestController
 @Api(tags = "机构付款记录")
-@RequestMapping("/tenantOrderRecord")
+@RequestMapping("tenantOrderRecord")
 public class TenantOrderRecordController extends BaseController {
     /**
      * 服务对象

Some files were not shown because too many files changed in this diff