zouxuan 3 years ago
parent
commit
5d2a2df92b

+ 2 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/ReturnFeeEnum.java

@@ -9,7 +9,8 @@ public enum ReturnFeeEnum implements BaseEnum<String, ReturnFeeEnum> {
 	VIP("VIP", "VIP退学"),
 	PRACTICE("PRACTICE", "网管课关闭"),
 	MUSIC("MUSIC", "乐团退团"),
-	GOODS("GOODS", "商品退费");
+	GOODS("GOODS", "商品退费"),
+	SUBJECT_CHANGE("SUBJECT_CHANGE", "声部更换");
 
 	private String code;
 

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

@@ -1,6 +1,8 @@
 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;
@@ -82,6 +84,8 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
     private MusicGroupSubjectPlanService musicGroupSubjectPlanService;
     @Autowired
     private SysCouponCodeService sysCouponCodeService;
+    @Autowired
+    private SysUserCashAccountLogDao sysUserCashAccountLogDao;
 
     private final Logger logger = LoggerFactory.getLogger(this.getClass());
 
@@ -175,7 +179,7 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
         StudentPaymentOrder studentPaymentOrder = sysCouponCodeService.use(subjectChangeParamDto.getCouponIdList(),amount,true);
         amount = studentPaymentOrder.getActualAmount();
         studentPaymentOrder.setUserId(subjectChange.getStudentId());
-        studentPaymentOrder.setGroupType(GroupType.SUBJECT_CHANGE);
+        studentPaymentOrder.setGroupType(SUBJECT_CHANGE);
         studentPaymentOrder.setOrderNo(orderNo);
         studentPaymentOrder.setType(OrderTypeEnum.SUBJECT_CHANGE);
         studentPaymentOrder.setStatus(DealStatusEnum.ING);
@@ -337,21 +341,30 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
             subjectChange.setSellAmount(BigDecimal.ZERO);
             subjectChange.setSellTime(nowDate);
         }
-        //差价小于0退到余额
-        if (amountMargin.compareTo(BigDecimal.ZERO) <= 0) {
-            sysUserCashAccountService.updateBalance(subjectChange.getStudentId(), amountMargin.negate(), PlatformCashAccountDetailTypeEnum.REFUNDS, "声部更换退还");
-            studentRegistrationService.changeStudentSubject(subjectChange.getStudentId(), subjectChange.getMusicGroupId(), subjectChange.getOriginalSubjectId(), subjectChange.getChangeSubjectId());
-        }
         subjectChange.setCreateTime(nowDate);
         subjectChange.setUpdateTime(nowDate);
         subjectChange.setVersion(0);
         subjectChangeDao.insert(subjectChange);
+        //差价小于0退到余额
+        if (amountMargin.compareTo(BigDecimal.ZERO) <= 0) {
+//            sysUserCashAccountService.updateBalance(subjectChange.getStudentId(), amountMargin.negate(), PlatformCashAccountDetailTypeEnum.REFUNDS, "声部更换退还");
+            SysUserCashAccountLog sysUserCashAccountLog = new SysUserCashAccountLog();
+            sysUserCashAccountLog.setUserId(subjectChange.getStudentId());
+            sysUserCashAccountLog.setGroupType(SUBJECT_CHANGE);
+            sysUserCashAccountLog.setOrganId(subjectChange.getOrganId());
+            sysUserCashAccountLog.setGroupId(subjectChange.getId().toString());
+            sysUserCashAccountLog.setAmount(amountMargin);
+            sysUserCashAccountLog.setReturnFeeType(ReturnFeeEnum.SUBJECT_CHANGE);
+            sysUserCashAccountLog.setComment("声部更换退还");
+            sysUserCashAccountLogDao.insert(sysUserCashAccountLog);
+            studentRegistrationService.changeStudentSubject(subjectChange.getStudentId(), subjectChange.getMusicGroupId(), subjectChange.getOriginalSubjectId(), subjectChange.getChangeSubjectId());
+        }
 
         if (amountMargin.compareTo(BigDecimal.ZERO) <= 0) {
             String orderNo = idGeneratorService.generatorId("payment") + "";
             StudentPaymentOrder studentPaymentOrder = new StudentPaymentOrder();
             studentPaymentOrder.setUserId(subjectChange.getStudentId());
-            studentPaymentOrder.setGroupType(GroupType.SUBJECT_CHANGE);
+            studentPaymentOrder.setGroupType(SUBJECT_CHANGE);
             studentPaymentOrder.setOrderNo(orderNo);
             studentPaymentOrder.setType(OrderTypeEnum.SUBJECT_CHANGE);
             studentPaymentOrder.setExpectAmount(BigDecimal.ZERO);

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

@@ -572,7 +572,7 @@
         SELECT sr.user_id_ ,sum(case when sc.id_ is null then spo.expect_amount_ else (spo.expect_amount_ + sc.goods_margin_) end) expect_amount_,spo.pay_time_
         FROM student_payment_order spo
                  LEFT JOIN student_registration sr ON sr.user_id_ = spo.user_id_
-                 LEFT JOIN (SELECT * FROM subject_change WHERE id_ in
+                 LEFT JOIN (SELECT id_,music_group_id_,original_order_id_,CASE WHEN goods_margin_ &lt; 0 THEN goods_margin_ ELSE sell_amount_ END goods_margin_ FROM subject_change WHERE id_ in
                                                                (SELECT max(id_) id_ from subject_change WHERE status_ = 2 GROUP BY music_group_id_,student_id_ ORDER BY id_ desc)
         ) sc on spo.music_group_id_ = sc.music_group_id_ and spo.id_ = sc.original_order_id_
         WHERE spo.music_group_id_ = #{musicGroupId} AND sr.music_group_id_ = spo.music_group_id_ AND sr.music_group_status_ = 'NORMAL'
@@ -1006,17 +1006,18 @@
     </select>
 
     <select id="getMoneyInMusicApply" resultMap="Mapper">
-        SELECT spo.music_group_id_ key_, sum(case when a.id_ is null then spo.expect_amount_ else (spo.expect_amount_ + a.goods_margin_) end) value_
-        from student_payment_order spo
+        SELECT spo.music_group_id_ key_, SUM(CASE WHEN a.id_ IS NULL THEN spo.expect_amount_ ELSE (spo.expect_amount_ + a.goods_margin_) END) value_
+        FROM student_payment_order spo
         LEFT JOIN student_registration sr ON sr.user_id_ = spo.user_id_
-        LEFT JOIN (SELECT * FROM subject_change WHERE id_ in
-		(SELECT max(sc.id_) id_ from subject_change sc WHERE sc.status_ = 2 GROUP BY music_group_id_,student_id_ ORDER BY id_ desc)
+        LEFT JOIN (SELECT id_,music_group_id_,original_order_id_,CASE WHEN goods_margin_ &lt; 0 THEN goods_margin_ ELSE sell_amount_ END goods_margin_
+        FROM subject_change WHERE id_ in
+		(SELECT max(sc.id_) id_ from subject_change sc WHERE sc.status_ = 2 GROUP BY music_group_id_,student_id_ ORDER BY id_ DESC)
 		) a on spo.music_group_id_ = a.music_group_id_ and spo.id_ = a.original_order_id_
 		WHERE spo.music_group_id_ IN
         <foreach collection="musicGroupIds" item="musicGroupId" open="(" close=")" separator=",">
             #{musicGroupId}
         </foreach>
-        AND spo.type_ = 'APPLY' and spo.status_ = 'SUCCESS' AND sr.music_group_id_ = spo.music_group_id_ AND sr.music_group_status_ = 'NORMAL'
+        AND spo.type_ = 'APPLY' AND spo.status_ = 'SUCCESS' AND sr.music_group_id_ = spo.music_group_id_ AND sr.music_group_status_ = 'NORMAL'
 		GROUP BY spo.music_group_id_
     </select>
     <select id="findByUserAndActive" resultMap="StudentPaymentOrder">

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

@@ -1850,7 +1850,7 @@
         SELECT sr.actual_subject_id_ 'key', SUM(CASE WHEN sc.id_ IS NULL THEN spo.expect_amount_ ELSE (spo.expect_amount_ + sc.goods_margin_) END) 'value'
         FROM student_payment_order spo
         LEFT JOIN student_registration sr ON sr.user_id_ = spo.user_id_
-        LEFT JOIN (SELECT * FROM subject_change WHERE id_ IN (SELECT MAX(id_) id_ FROM subject_change WHERE status_ = 2 GROUP BY music_group_id_,student_id_ ORDER BY id_ DESC)) sc ON spo.music_group_id_ = sc.music_group_id_ AND spo.id_ = sc.original_order_id_
+        LEFT JOIN (SELECT id_,music_group_id_,original_order_id_,CASE WHEN goods_margin_ &lt; 0 THEN goods_margin_ ELSE sell_amount_ END goods_margin_ FROM subject_change WHERE id_ IN (SELECT MAX(id_) id_ FROM subject_change WHERE status_ = 2 GROUP BY music_group_id_,student_id_ ORDER BY id_ DESC)) sc ON spo.music_group_id_ = sc.music_group_id_ AND spo.id_ = sc.original_order_id_
         WHERE spo.music_group_id_ = #{musicGroupId} AND sr.music_group_id_ = spo.music_group_id_ AND sr.music_group_status_ = 'NORMAL'
         AND spo.type_ = 'APPLY' AND spo.status_ = 'SUCCESS'
         GROUP BY sr.actual_subject_id_