浏览代码

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

zouxuan 5 年之前
父节点
当前提交
7df94e8ebb

+ 23 - 5
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/MusicGroupPaymentCalenderDao.java

@@ -1,12 +1,13 @@
 package com.ym.mec.biz.dal.dao;
 
-import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender;
-import com.ym.mec.biz.dal.enums.PaymentStatusEnum;
-import com.ym.mec.common.dal.BaseDAO;
+import java.util.Date;
+import java.util.List;
 
 import org.apache.ibatis.annotations.Param;
 
-import java.util.List;
+import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender;
+import com.ym.mec.biz.dal.enums.PaymentStatusEnum;
+import com.ym.mec.common.dal.BaseDAO;
 
 public interface MusicGroupPaymentCalenderDao extends BaseDAO<Long, MusicGroupPaymentCalender> {
 
@@ -29,7 +30,7 @@ public interface MusicGroupPaymentCalenderDao extends BaseDAO<Long, MusicGroupPa
 	 * @param musicGroupId
 	 */
 	void batchAdd(@Param("calender") List<Integer> calender, @Param("musicGroupId") String musicGroupId);
-	
+
 	/**
 	 * 批量修改
 	 * @param musicGroupPaymentCalenderList
@@ -43,4 +44,21 @@ public interface MusicGroupPaymentCalenderDao extends BaseDAO<Long, MusicGroupPa
 	 * @return
 	 */
 	List<MusicGroupPaymentCalender> queryByPaymentStatus(List<PaymentStatusEnum> status);
+	
+	/**
+	 * 获取缴费信息锁
+	 * @param id
+	 * @return
+	 */
+	MusicGroupPaymentCalender getForLock(@Param("id") Long id);
+
+	/**
+	 * 根据指定乐团的缴费日期查询交集
+	 * @param musicGroupId 乐团编号
+	 * @param startPaymentDate 开始缴费日期
+	 * @param deadlinePaymentDate 截止缴费日期
+	 * @return
+	 */
+	int queryIntersectionByPaymentDate(@Param("musicGroupId") String musicGroupId, @Param("startPaymentDate") Date startPaymentDate,
+			@Param("deadlinePaymentDate") Date deadlinePaymentDate);
 }

+ 9 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/MusicGroupPaymentCalenderDetailDao.java

@@ -52,4 +52,13 @@ public interface MusicGroupPaymentCalenderDetailDao extends BaseDAO<Long, MusicG
 	 * @return
 	 */
 	BigDecimal sumActualAmount(@Param("id") Long id);
+
+	/**
+	 * 获取学生最后一期续费记录
+	 * @param musicGroupId
+	 * @param userId
+	 * @return
+	 */
+	MusicGroupPaymentCalenderDetail getUserLastCalenderDetail(@Param("musicGroupId") String musicGroupId, @Param("userId") Integer userId);
+
 }

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

@@ -45,7 +45,6 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
 	@Override
 	@Transactional(rollbackFor = Exception.class)
 	public boolean create(MusicGroupPaymentCalender musicGroupPaymentCalender) {
-		//判断缴费开始时间、结束时间是否被其他缴费记录占用
 		
 		Date date = new Date();
 		List<MusicGroupStudentFee> list = null;
@@ -53,6 +52,11 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
 		musicGroupPaymentCalender.setCreateTime(date);
 		musicGroupPaymentCalender.setUpdateTime(date);
 		musicGroupPaymentCalender.setDeadlinePaymentDate(DateUtil.addDays(musicGroupPaymentCalender.getStartPaymentDate(), 3));
+		//判断缴费开始时间、结束时间是否被其他缴费记录占用
+		int count = musicGroupPaymentCalenderDao.queryIntersectionByPaymentDate(musicGroupPaymentCalender.getMusicGroupId(), musicGroupPaymentCalender.getStartPaymentDate(), musicGroupPaymentCalender.getDeadlinePaymentDate());
+		if(count > 0){
+			throw new BizException("缴费时间存在冲突,请修改缴费开始日期");
+		}
 		if (date.after(musicGroupPaymentCalender.getDeadlinePaymentDate())) {
 			musicGroupPaymentCalender.setPaymentStatus(PaymentStatusEnum.YES);
 		} else if (date.after(musicGroupPaymentCalender.getStartPaymentDate())) {

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

@@ -148,6 +148,8 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
     private GoodsService goodsService;
     @Autowired
     private ClassGroupStudentMapperService classGroupStudentMapperService;
+    @Autowired
+    private MusicGroupPaymentCalenderDetailDao musicGroupPaymentCalenderDetailDao;
 
     @Autowired
     private ImFeignService imFeignService;
@@ -1658,8 +1660,10 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
     public boolean renewForCallback(StudentPaymentOrder studentPaymentOrder) throws IOException {
 
-        studentPaymentOrderService.update(studentPaymentOrder);
-
+        int updateNum = studentPaymentOrderService.update(studentPaymentOrder);
+        if(updateNum <= 0){
+            throw new BizException("订单更新失败");
+        }
         Integer userId = studentPaymentOrder.getUserId();
         String musicGroupId = studentPaymentOrder.getMusicGroupId();
 
@@ -1683,6 +1687,24 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 //            musicGroupStudentFee.setNextPaymentDate(musicGroupPaymentCalenderService.getNextPaymentDate(musicGroupId, musicGroupStudentFee.getNextPaymentDate(), musicGroupStudentFee));
             musicGroupStudentFeeDao.update(musicGroupStudentFee);
 
+            MusicGroupPaymentCalenderDetail userLastCalenderDetail = musicGroupPaymentCalenderDetailDao.getUserLastCalenderDetail(musicGroupId, userId);
+            if(userLastCalenderDetail == null){
+                throw new BizException("学生没有续费中的记录");
+            }
+            //更新学生的缴费记录状态
+            userLastCalenderDetail.setPaymentStatus(PaymentStatus.PAID_COMPLETED);
+            userLastCalenderDetail.setActualAmount(userLastCalenderDetail.getExpectAmount());
+            userLastCalenderDetail.setPayTime(date);
+            userLastCalenderDetail.setUpdateTime(date);
+            musicGroupPaymentCalenderDetailDao.update(userLastCalenderDetail);
+
+            //更新实际缴费人数
+            MusicGroupPaymentCalender musicGroupPaymentCalender = musicGroupPaymentCalenderDao.getForLock(userLastCalenderDetail.getMusicGroupPaymentCalenderId());
+            Integer actualNum = musicGroupPaymentCalender.getActualNum() == null ? 0:musicGroupPaymentCalender.getActualNum();
+            musicGroupPaymentCalender.setActualNum(actualNum);
+            musicGroupPaymentCalender.setUpdateTime(date);
+            musicGroupPaymentCalenderDao.update(musicGroupPaymentCalender);
+
             //插入交易明细
             SysUserCashAccount cashAccount = sysUserCashAccountService.get(userId);
             BigDecimal amount = studentPaymentOrder.getActualAmount();

+ 7 - 0
mec-biz/src/main/resources/config/mybatis/MusicGroupPaymentCalenderDetailMapper.xml

@@ -214,4 +214,11 @@
 		SELECT SUM(mgpcd.actual_amount_) FROM music_group_payment_calender_detail mgpcd
 		WHERE mgpcd.music_group_payment_calender_id_ = #{id} AND mgpcd.payment_status_ = "PAID_COMPLETED"
 	</select>
+
+	<select id="getUserLastCalenderDetail" resultMap="MusicGroupPaymentCalenderDetail">
+		SELECT * FROM music_group_payment_calender_detail mgpcd
+		LEFT JOIN music_group_payment_calender mgpc ON mgpcd.music_group_payment_calender_id_ = mgpc.id_
+		WHERE mgpc.music_group_id_=#{musicGroupId} AND mgpcd.user_id_=#{userId} AND mgpcd.payment_status_ = 'PROCESSING'
+		ORDER BY mgpc.start_payment_date_ DESC
+	</select>
 </mapper>

+ 10 - 0
mec-biz/src/main/resources/config/mybatis/MusicGroupPaymentCalenderMapper.xml

@@ -165,4 +165,14 @@
         	</if>
         </where>
     </select>
+
+    <select id="getForLock" resultMap="MusicGroupPaymentCalender">
+        SELECT * FROM music_group_payment_calender WHERE id_ = #{id} FOR UPDATE
+    </select>
+	
+    <select id="queryIntersectionByPaymentDate" resultType="int" parameterType="map">
+        SELECT count(*) FROM music_group_payment_calender mgpc
+        WHERE music_group_id_ = #{musicGroupId} 
+        and (start_payment_date_ between #{startPaymentDate} and #{deadlinePaymentDate} or deadline_payment_date_ between #{startPaymentDate} and #{deadlinePaymentDate})
+    </select>
 </mapper>