Jelajahi Sumber

Merge remote-tracking branch 'origin/master'

周箭河 5 tahun lalu
induk
melakukan
6b27473a2f

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

@@ -54,5 +54,16 @@ public interface SysConfigService extends BaseService<Long, SysConfig> {
 	 * 密码重置后的默认密码为{}
 	 */
 	public static final String DEFAULT_PASSWORD = "default_password";
-	
+
+	/**
+	 * 梯度结算规则设置
+	 */
+	public static final String MUSIC_GRADIENT_SETTLEMENT_RULE = "music_gradient_settlement_rule";
+
+	/**
+	 * @params paramName
+	 * @return com.ym.mec.biz.dal.entity.SysConfig
+	 * @describe 根据配置名称获取配置信息
+	 */
+	SysConfig findByParamName(String paramName);
 }

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

@@ -1,10 +1,30 @@
 package com.ym.mec.biz.service;
 
+import java.math.BigDecimal;
+
 import com.ym.mec.biz.dal.entity.SysUserCashAccountDetail;
+import com.ym.mec.biz.dal.enums.DealStatusEnum;
+import com.ym.mec.biz.dal.enums.PlatformCashAccountDetailTypeEnum;
+import com.ym.mec.biz.dal.enums.TransTypeEnum;
 import com.ym.mec.common.service.BaseService;
 
 public interface SysUserCashAccountDetailService extends BaseService<Long, SysUserCashAccountDetail> {
 
-    SysUserCashAccountDetail selectDetailByTransNo(String transNo);
+	SysUserCashAccountDetail queryDetailByTransNo(String transNo);
+
+	/**
+	 * 添加流水信息(若成功会更新账户余额)
+	 * @param userId 用户编号
+	 * @param amount 金额
+	 * @param origOrderId 原始订单号
+	 * @param transNo 交易流水号
+	 * @param type 交易类型
+	 * @param transType 交易渠道
+	 * @param status 交易状态
+	 * @param comment 备注
+	 * @return
+	 */
+	boolean addCashAccountDetail(Integer userId, BigDecimal amount, String origOrderId, String transNo, PlatformCashAccountDetailTypeEnum type,
+			TransTypeEnum transType, DealStatusEnum status, String comment);
 
 }

+ 80 - 43
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java

@@ -43,14 +43,18 @@ import com.ym.mec.biz.dal.entity.MusicGroupStudentFee.PaymentStatus;
 import com.ym.mec.biz.dal.entity.MusicGroupSubjectGoodsGroup;
 import com.ym.mec.biz.dal.entity.MusicGroupSubjectPlan;
 import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
+import com.ym.mec.biz.dal.entity.StudentRegistration;
 import com.ym.mec.biz.dal.enums.ClassGroupStudentStatusEnum;
 import com.ym.mec.biz.dal.enums.ClassGroupTypeEnum;
 import com.ym.mec.biz.dal.enums.DealStatusEnum;
 import com.ym.mec.biz.dal.enums.MusicGroupStatusEnum;
 import com.ym.mec.biz.dal.enums.OrderTypeEnum;
+import com.ym.mec.biz.dal.enums.PlatformCashAccountDetailTypeEnum;
 import com.ym.mec.biz.dal.page.MusicGroupQueryInfo;
 import com.ym.mec.biz.service.MusicGroupService;
 import com.ym.mec.biz.service.PayService;
+import com.ym.mec.biz.service.StudentRegistrationService;
+import com.ym.mec.biz.service.SysUserCashAccountDetailService;
 import com.ym.mec.biz.service.SysUserCashAccountService;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.entity.ImGroupMember;
@@ -90,22 +94,28 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 
 	@Autowired
 	private MusicGroupStudentFeeDao musicGroupStudentFeeDao;
-	
+
 	@Autowired
 	private ClassGroupStudentMapperDao classGroupStudentMapperDao;
-	
+
 	@Autowired
 	private StudentPaymentOrderDao studentPaymentOrderDao;
-	
+
 	@Autowired
 	private SysUserCashAccountService sysUserCashAccountService;
-	
+
+	@Autowired
+	private SysUserCashAccountDetailService sysUserCashAccountDetailService;
+
 	@Autowired
 	private MusicGroupQuitDao musicGroupQuitDao;
-	
-    @Autowired
-    private PayService payService;
-	
+
+	@Autowired
+	private StudentRegistrationService studentRegistrationService;
+
+	@Autowired
+	private PayService payService;
+
 	@Override
 	public BaseDAO<String, MusicGroup> getDAO() {
 		return musicGroupDao;
@@ -118,7 +128,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 		List<MusicGroupPaymentEntities> musicGroupPaymentEntities = subFeeSettingDto.getMusicGroupPaymentEntities();
 		List<MusicGroupSubjectGoodsGroup> musicGroupSubjectGoodsGroups = subFeeSettingDto.getMusicGroupSubjectGoodsGroups();
 		List<MusicGroupSubjectPlan> musicGroupSubjectPlans = subFeeSettingDto.getMusicGroupSubjectPlans();
-		String musicGroupId = idGeneratorService.generatorId()+"";
+		String musicGroupId = idGeneratorService.generatorId() + "";
 		musicGroup.setId(musicGroupId);
 		// 保存乐团基本信息
 		musicGroupDao.insert(musicGroup);
@@ -155,7 +165,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 			musicGroupSubjectGoodsGroupDao.insert(e);
 		});
 		// 新增聊天群
-//			ImGroupModel imGroupModel = new ImGroupModel(musicGroupId, musicGroup.getName());
+		// ImGroupModel imGroupModel = new ImGroupModel(musicGroupId, musicGroup.getName());
 		// 教务老师和运营主管加入群组
 		ImGroupMember[] imGroupMembers = { new ImGroupMember(musicGroup.getTeamTeacherId().toString()),
 				new ImGroupMember(musicGroup.getEducationalTeacherId().toString()) };
@@ -199,22 +209,25 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 		} else {
 			throw new BizException("乐团当前状态是{},不能取消", musicGroup.getStatus().getMsg());
 		}
-		
-		//查询是否有中间状态的缴费信息
+
+		// 查询是否有中间状态的缴费信息
 		List<StudentPaymentOrder> studentPaymentOrders = studentPaymentOrderDao.queryByDealStatus(musicGroupId, OrderTypeEnum.APPLY, DealStatusEnum.ING);
-		
-		if(studentPaymentOrders != null && studentPaymentOrders.size()>0){
+
+		if (studentPaymentOrders != null && studentPaymentOrders.size() > 0) {
 			throw new BizException("缴费存在交易中的数据,不能取消乐团");
 		}
-		
-		//查询已缴费信息
+
+		// 查询已缴费信息
 		studentPaymentOrders = studentPaymentOrderDao.queryByDealStatus(musicGroupId, OrderTypeEnum.APPLY, DealStatusEnum.SUCCESS);
 
 		// 退费
-		for(StudentPaymentOrder order : studentPaymentOrders){
+		for (StudentPaymentOrder order : studentPaymentOrders) {
 			sysUserCashAccountService.updateBalance(order.getUserId(), order.getActualAmount());
+			// 增加交易流水
+			sysUserCashAccountDetailService.addCashAccountDetail(order.getUserId(), order.getActualAmount(), "", "", PlatformCashAccountDetailTypeEnum.REFUNDS,
+					null, DealStatusEnum.SUCCESS, "取消乐团");
 		}
-		
+
 		return true;
 	}
 
@@ -312,14 +325,14 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 		if (musicGroup == null) {
 			throw new BizException("乐团不存在");
 		}
-		
+
 		MusicGroupQuit musicGroupQuit = new MusicGroupQuit();
 		musicGroupQuit.setCreateTime(new Date());
 		musicGroupQuit.setJoinDate(sysUser.getCreateTime());
 		musicGroupQuit.setMusicGroupId(musicGroupId);
 		musicGroupQuit.setUserId(sysUser.getId());
 		musicGroupQuit.setStatus(ApprovalStatus.PROCESSING);
-		
+
 		musicGroupQuitDao.insert(musicGroupQuit);
 		return true;
 	}
@@ -328,13 +341,37 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 	@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
 	public boolean approveQuitMusicGroup(Long id, ApprovalStatus status, String reason) {
 		MusicGroupQuit musicGroupQuit = musicGroupQuitDao.get(id);
-		if(musicGroupQuit != null){
+		if (musicGroupQuit != null) {
+
+			String musicGroupId = musicGroupQuit.getMusicGroupId();
+			Integer userId = musicGroupQuit.getUserId();
+
 			musicGroupQuit.setStatus(status);
 			musicGroupQuit.setReason(reason);
 			musicGroupQuit.setQuitDate(new Date());
-			classGroupStudentMapperDao.updateUserStatusByMusicGroupId(musicGroupQuit.getMusicGroupId(), musicGroupQuit.getUserId(), ClassGroupStudentStatusEnum.QUIT);
+			musicGroupQuitDao.update(musicGroupQuit);
+
+			if (status == ApprovalStatus.APPROVED) {
+				classGroupStudentMapperDao.updateUserStatusByMusicGroupId(musicGroupId, userId, ClassGroupStudentStatusEnum.QUIT);
+
+				// 判断乐器是否是租赁
+				StudentRegistration studentRegistration = studentRegistrationService.queryByUserIdAndMusicGroupId(userId, musicGroupId);
+				if (studentRegistration == null) {
+					throw new BizException("用户注册信息不存在");
+				}
+				Integer subjectId = studentRegistration.getActualSubjectId();
+				MusicGroupSubjectPlan musicGroupSubjectPlan = musicGroupSubjectPlanDao.getMusicOneSubjectClassPlan(musicGroupId, subjectId);
+				if (musicGroupSubjectPlan == null) {
+					throw new BizException("乐团声部费用设置不存在");
+				}
+				if (musicGroupSubjectPlan.getDepositFee().doubleValue() > 0) {
+					// 增加交易流水
+					sysUserCashAccountDetailService.addCashAccountDetail(userId, musicGroupSubjectPlan.getDepositFee(), "", "",
+							PlatformCashAccountDetailTypeEnum.REFUNDS, null, DealStatusEnum.SUCCESS, "退出乐团");
+				}
+			}
 		}
-		return false;
+		return true;
 	}
 
 	@Override
@@ -373,39 +410,39 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 	public PageInfo<MusicGroup> queryMusicGroupPage(MusicGroupQueryInfo queryInfo) {
 		PageInfo<MusicGroup> musicGroupPageInfo = queryPage(queryInfo);
 		List<MusicGroup> musicGroupList = musicGroupPageInfo.getRows();
-		//获取学校编号列表
+		// 获取学校编号列表
 		Set<Integer> schoolIds = musicGroupList.stream().map(e -> e.getSchoolId()).collect(Collectors.toSet());
-		List<Map<Integer,String>> schoolNames =  schoolDao.queryNameByIds(schoolIds);
-		//获取相关学校名称map
-		Map<Integer,String> schoolNameMap = MapUtil.convertMybatisMap(schoolNames);
+		List<Map<Integer, String>> schoolNames = schoolDao.queryNameByIds(schoolIds);
+		// 获取相关学校名称map
+		Map<Integer, String> schoolNameMap = MapUtil.convertMybatisMap(schoolNames);
 
-		//获取教务老师编号列表
+		// 获取教务老师编号列表
 		Set<Integer> educationalTeacherIds = musicGroupList.stream().map(e -> e.getEducationalTeacherId()).collect(Collectors.toSet());
-		//获取相关老师的名字
-		List<Map<Integer,String>> educationalTeacherNames =  teacherDao.queryNameByIds(educationalTeacherIds);
-		Map<Integer,String> educationalTeacherNameMap = MapUtil.convertMybatisMap(educationalTeacherNames);
+		// 获取相关老师的名字
+		List<Map<Integer, String>> educationalTeacherNames = teacherDao.queryNameByIds(educationalTeacherIds);
+		Map<Integer, String> educationalTeacherNameMap = MapUtil.convertMybatisMap(educationalTeacherNames);
 
-		//获取运营主管编号列表
+		// 获取运营主管编号列表
 		Set<Integer> teamTeacherIds = musicGroupList.stream().map(e -> e.getTeamTeacherId()).collect(Collectors.toSet());
-		List<Map<Integer,String>> teamTeacherNames =  teacherDao.queryNameByIds(teamTeacherIds);
-		Map<Integer,String> teamTeacherNameMap = MapUtil.convertMybatisMap(teamTeacherNames);
+		List<Map<Integer, String>> teamTeacherNames = teacherDao.queryNameByIds(teamTeacherIds);
+		Map<Integer, String> teamTeacherNameMap = MapUtil.convertMybatisMap(teamTeacherNames);
 
-		//获取乐团编号列表
+		// 获取乐团编号列表
 		Set<String> musicGroupIds = musicGroupList.stream().map(e -> e.getId()).collect(Collectors.toSet());
-		//统计乐团在读人数
-		List<Map<String,Long>> payNums =  musicGroupDao.countPayNum(musicGroupIds);
-		Map<String,Long> payNumMap = MapUtil.convertMybatisMap(payNums);
+		// 统计乐团在读人数
+		List<Map<String, Long>> payNums = musicGroupDao.countPayNum(musicGroupIds);
+		Map<String, Long> payNumMap = MapUtil.convertMybatisMap(payNums);
 
-		//获取收费类型编号列表
+		// 获取收费类型编号列表
 		Set<Integer> chargeTypeIds = musicGroupList.stream().map(e -> e.getChargeTypeId()).collect(Collectors.toSet());
-		List<Map<Integer,String>> chargeTypeNames =  chargeTypeDao.queryNameByIds(chargeTypeIds);
-		Map<Integer,String> chargeTypeNameMap = MapUtil.convertMybatisMap(chargeTypeNames);
+		List<Map<Integer, String>> chargeTypeNames = chargeTypeDao.queryNameByIds(chargeTypeIds);
+		Map<Integer, String> chargeTypeNameMap = MapUtil.convertMybatisMap(chargeTypeNames);
 
-		musicGroupList.forEach(e->{
+		musicGroupList.forEach(e -> {
 			e.setSchoolName(schoolNameMap.get(e.getSchoolId()));
 			e.setEducationalTeacherName(educationalTeacherNameMap.get(e.getEducationalTeacherId()));
 			e.setTeamTeacherName(teamTeacherNameMap.get(e.getTeamTeacherId()));
-			e.setPayNum(payNumMap.get(e.getId())==null?0:payNumMap.get(e.getId()).intValue());
+			e.setPayNum(payNumMap.get(e.getId()) == null ? 0 : payNumMap.get(e.getId()).intValue());
 			e.setChargeTypeName(chargeTypeNameMap.get(e.getChargeTypeId()));
 		});
 		return musicGroupPageInfo;

+ 5 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysConfigServiceImpl.java

@@ -19,5 +19,10 @@ public class SysConfigServiceImpl extends BaseServiceImpl<Long, SysConfig>  impl
 	public BaseDAO<Long, SysConfig> getDAO() {
 		return sysConfigDao;
 	}
+
+	@Override
+	public SysConfig findByParamName(String paramName) {
+		return sysConfigDao.findByParamName(paramName);
+	}
 	
 }

+ 53 - 3
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysUserCashAccountDetailServiceImpl.java

@@ -1,27 +1,77 @@
 package com.ym.mec.biz.service.impl;
 
+import java.math.BigDecimal;
+
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Propagation;
+import org.springframework.transaction.annotation.Transactional;
 
+import com.ym.mec.biz.dal.dao.SysUserCashAccountDao;
 import com.ym.mec.biz.dal.dao.SysUserCashAccountDetailDao;
+import com.ym.mec.biz.dal.entity.SysUserCashAccount;
 import com.ym.mec.biz.dal.entity.SysUserCashAccountDetail;
+import com.ym.mec.biz.dal.enums.DealStatusEnum;
+import com.ym.mec.biz.dal.enums.PlatformCashAccountDetailTypeEnum;
+import com.ym.mec.biz.dal.enums.TransTypeEnum;
 import com.ym.mec.biz.service.SysUserCashAccountDetailService;
+import com.ym.mec.biz.service.SysUserCashAccountService;
 import com.ym.mec.common.dal.BaseDAO;
+import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
 
 @Service
-public class SysUserCashAccountDetailServiceImpl extends BaseServiceImpl<Long, SysUserCashAccountDetail>  implements SysUserCashAccountDetailService {
-	
+public class SysUserCashAccountDetailServiceImpl extends BaseServiceImpl<Long, SysUserCashAccountDetail> implements SysUserCashAccountDetailService {
+
 	@Autowired
 	private SysUserCashAccountDetailDao sysUserCashAccountDetailDao;
 
+	@Autowired
+	private SysUserCashAccountDao sysUserCashAccountDao;
+
+	@Autowired
+	private SysUserCashAccountService sysUserCashAccountService;
+
 	@Override
 	public BaseDAO<Long, SysUserCashAccountDetail> getDAO() {
 		return sysUserCashAccountDetailDao;
 	}
 
 	@Override
-	public SysUserCashAccountDetail selectDetailByTransNo(String transNo) {
+	public SysUserCashAccountDetail queryDetailByTransNo(String transNo) {
 		return sysUserCashAccountDetailDao.selectDetailByTransNo(transNo);
 	}
+
+	@Override
+	@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
+	public boolean addCashAccountDetail(Integer userId, BigDecimal amount, String origOrderId, String transNo, PlatformCashAccountDetailTypeEnum type,
+			TransTypeEnum transType, DealStatusEnum status, String comment) {
+
+		SysUserCashAccountDetail sysUserCashAccountDetail = new SysUserCashAccountDetail();
+		sysUserCashAccountDetail.setUserId(userId);
+		sysUserCashAccountDetail.setType(type);
+		sysUserCashAccountDetail.setStatus(status);
+		sysUserCashAccountDetail.setAmount(amount);
+		sysUserCashAccountDetail.setAttribute(origOrderId);
+		sysUserCashAccountDetail.setComment(comment);
+		sysUserCashAccountDetail.setTransNo(transNo);
+		sysUserCashAccountDetail.setTransType(transType);
+
+		SysUserCashAccount cashAccount = sysUserCashAccountDao.getLocked(userId);
+		if (cashAccount == null) {
+			throw new BizException("用户[{}]现金账户不存在", userId);
+		}
+
+		if (DealStatusEnum.SUCCESS == status) {
+			sysUserCashAccountService.updateBalance(userId, amount);
+			sysUserCashAccountDetail.setBalance(cashAccount.getBalance().add(amount).doubleValue() > 0 ? cashAccount.getBalance().add(amount) : new BigDecimal(
+					0));
+		} else {
+			sysUserCashAccountDetail.setBalance(cashAccount.getBalance());
+		}
+
+		sysUserCashAccountDetailDao.insert(sysUserCashAccountDetail);
+
+		return true;
+	}
 }

+ 18 - 9
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysUserCashAccountServiceImpl.java

@@ -10,14 +10,15 @@ import org.springframework.transaction.annotation.Transactional;
 
 import com.ym.mec.biz.dal.dao.SysUserCashAccountDao;
 import com.ym.mec.biz.dal.entity.SysUserCashAccount;
+import com.ym.mec.biz.dal.enums.PlatformCashAccountStatusEnum;
 import com.ym.mec.biz.service.SysUserCashAccountService;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
 
 @Service
-public class SysUserCashAccountServiceImpl extends BaseServiceImpl<Integer, SysUserCashAccount>  implements SysUserCashAccountService {
-	
+public class SysUserCashAccountServiceImpl extends BaseServiceImpl<Integer, SysUserCashAccount> implements SysUserCashAccountService {
+
 	@Autowired
 	private SysUserCashAccountDao sysUserCashAccountDao;
 
@@ -29,17 +30,25 @@ public class SysUserCashAccountServiceImpl extends BaseServiceImpl<Integer, SysU
 	@Override
 	@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
 	public boolean updateBalance(Integer userId, BigDecimal decimal) {
-		
+
 		SysUserCashAccount cashAccount = sysUserCashAccountDao.getLocked(userId);
-		if(cashAccount == null){
-			throw new BizException("用户[{}]现金账户不存在",userId);
+		if (cashAccount == null) {
+			throw new BizException("用户[{}]现金账户不存在", userId);
+		}
+
+		if (cashAccount.getStatus() != PlatformCashAccountStatusEnum.NORMAL) {
+			throw new BizException("账户不可用");
 		}
-		
-		cashAccount.setBalance(cashAccount.getBalance().add(decimal));
+		BigDecimal balance = cashAccount.getBalance().add(decimal);
+		if (balance.doubleValue() < 0) {
+			throw new BizException("现金账户[{}]余额不足,可用余额剩{}元", userId, cashAccount.getBalance().doubleValue());
+		}
+
+		cashAccount.setBalance(balance);
 		cashAccount.setUpdateTime(new Date());
-		
+
 		sysUserCashAccountDao.update(cashAccount);
-		
+
 		return true;
 	}
 

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

@@ -66,4 +66,13 @@ public class SysConfigController extends BaseController {
 			return failed("请检查输入的ID");
 		return succeed(sysConfigService.get(id));
 	}
+
+	@ApiOperation(value = "查询参数")
+	@GetMapping(value = "queryByParamName")
+	public Object queryByParamName(String paramName) {
+		if(StringUtils.isBlank(paramName)){
+			return failed("参数不能为空");
+		}
+		return succeed(sysConfigService.findByParamName(paramName));
+	}
 }

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

@@ -60,7 +60,7 @@ public class StudentCashAccountDetailController extends BaseController {
         if(studentRecharge == null){
             return failed("交易不存在");
         }
-        SysUserCashAccountDetail sysUserCashAccountDetail = sysUserCashAccountDetailService.selectDetailByTransNo(transNo);
+        SysUserCashAccountDetail sysUserCashAccountDetail = sysUserCashAccountDetailService.queryDetailByTransNo(transNo);
         if(sysUserCashAccountDetail == null){
             return failed("交易不存在");
         }