Przeglądaj źródła

团练宝审核

zouxuan 3 lat temu
rodzic
commit
bce098e3ba

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

@@ -5,5 +5,6 @@ import com.ym.mec.biz.dal.entity.CloudCoachPaymentProgram;
 
 public interface CloudCoachPaymentProgramDao extends BaseDAO<Long, CloudCoachPaymentProgram> {
 
-	
+
+    CloudCoachPaymentProgram getLock(Long id);
 }

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

@@ -10,9 +10,19 @@ public interface StudentCloudCoachPaymentDetailsDao extends BaseDAO<Long, Studen
 
 
     void batchInsert(@Param("cloudCoachPaymentProgramId") Long cloudCoachPaymentProgramId,
-                     @Param("paymentStatus") Integer paymentStatus,
                      @Param("userIds") List<Integer> userIds,
                      @Param("tenantId") Integer tenantId);
 
     StudentCloudCoachPaymentDetails findByUserId(@Param("paymentId") Long paymentId, @Param("userId") Integer userId);
+
+    /**
+    * @description: 修改学员为已缴费
+     * @param cloudCoachPaymentProgramId
+    * @return void
+    * @author zx
+    * @date 2022/3/2 19:35
+    */
+    void updatePaymentStatus(Long cloudCoachPaymentProgramId);
+
+    List<Integer> findUserByProgramId(Long programId);
 }

+ 43 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CloudCoachPaymentProgram.java

@@ -2,6 +2,8 @@ package com.ym.mec.biz.dal.entity;
 
 import com.ym.mec.biz.dal.enums.PeriodEnum;
 import com.ym.mec.common.entity.BaseEntity;
+import com.ym.mec.common.enums.BaseEnum;
+import io.swagger.annotations.ApiModelProperty;
 import org.apache.commons.lang3.builder.ToStringBuilder;
 
 import java.math.BigDecimal;
@@ -63,6 +65,47 @@ public class CloudCoachPaymentProgram extends BaseEntity {
 
 	private List<Integer> userIds;
 
+	@ApiModelProperty(value = "审核备注", required = false)
+	private String memo;
+
+	@ApiModelProperty(value = "状态", required = false)
+	private CloudCoachPaymentProgram.StatusEnum status;
+
+	public enum StatusEnum implements BaseEnum<String, CloudCoachPaymentProgram.StatusEnum> {
+		AUDITING("审核中"), REJECT("审核拒绝"), OPEN("审核通过");
+
+		private String desc;
+
+		StatusEnum(String desc) {
+			this.desc = desc;
+		}
+
+		@Override
+		public String getCode() {
+			return this.name();
+		}
+
+		public String getDesc() {
+			return desc;
+		}
+	}
+
+	public StatusEnum getStatus() {
+		return status;
+	}
+
+	public void setStatus(StatusEnum status) {
+		this.status = status;
+	}
+
+	public String getMemo() {
+		return memo;
+	}
+
+	public void setMemo(String memo) {
+		this.memo = memo;
+	}
+
 	public String getMemberIntro() {
 		return memberIntro;
 	}

+ 10 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/CloudCoachPaymentProgramQueryInfo.java

@@ -10,6 +10,16 @@ public class CloudCoachPaymentProgramQueryInfo extends QueryInfo {
 
     private String endTime;
 
+    private String status;
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+
     public String getPeriod() {
         return period;
     }

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

@@ -2,6 +2,7 @@ package com.ym.mec.biz.service;
 
 import com.ym.mec.biz.dal.entity.CloudCoachPaymentProgram;
 import com.ym.mec.common.service.BaseService;
+import org.springframework.transaction.annotation.Transactional;
 
 public interface CloudCoachPaymentProgramService extends BaseService<Long, CloudCoachPaymentProgram> {
 
@@ -13,4 +14,10 @@ public interface CloudCoachPaymentProgramService extends BaseService<Long, Cloud
     * @date 2022/1/14 15:52
     */
     void add(CloudCoachPaymentProgram cloudCoachPaymentProgram);
+
+    void auditPass(CloudCoachPaymentProgram cloudCoachPaymentProgram);
+
+    void modify(CloudCoachPaymentProgram cloudCoachPaymentProgram);
+
+    void audit(CloudCoachPaymentProgram cloudCoachPaymentProgram);
 }

+ 71 - 5
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CloudCoachPaymentProgramServiceImpl.java

@@ -23,6 +23,8 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
+import java.time.Instant;
+import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -74,15 +76,41 @@ public class CloudCoachPaymentProgramServiceImpl extends BaseServiceImpl<Long, C
 		cloudCoachPaymentProgram.setName(memberRankSetting.getName());
 		cloudCoachPaymentProgram.setUserNum(userIds.size());
 		cloudCoachPaymentProgram.setTenantId(tenantId);
-		//是否0元购买
-		Boolean isFree = cloudCoachPaymentProgram.getActualAmount().compareTo(BigDecimal.ZERO) == 0;
-		if(isFree){cloudCoachPaymentProgram.setPaymentUserNum(userIds.size());}
+		//获取缴费状态
+		cloudCoachPaymentProgram.setStatus(getStatus(cloudCoachPaymentProgram));
 		cloudCoachPaymentProgramDao.insert(cloudCoachPaymentProgram);
+		studentCloudCoachPaymentDetailsDao.batchInsert(cloudCoachPaymentProgram.getId(),userIds,tenantId);
+		if(cloudCoachPaymentProgram.getStatus() == CloudCoachPaymentProgram.StatusEnum.OPEN){
+			this.auditPass(cloudCoachPaymentProgram);
+		}
+	}
 
-		//批量插入学员缴费项目
-		studentCloudCoachPaymentDetailsDao.batchInsert(cloudCoachPaymentProgram.getId(),isFree?1:0,userIds,tenantId);
+	private CloudCoachPaymentProgram.StatusEnum getStatus(CloudCoachPaymentProgram cloudCoachPaymentProgram){
+		//价格是否变动
+		//获取现价
+		BigDecimal groupPurchaseFee = memberFeeSettingService.getAmount(cloudCoachPaymentProgram.getOrganId(),
+				cloudCoachPaymentProgram.getMemberRankSettingId(),
+				cloudCoachPaymentProgram.getPeriod(),
+				cloudCoachPaymentProgram.getMemberNum(),
+				MemberFeeSettingServiceImpl::getGroupPurchaseFee);
+		if(cloudCoachPaymentProgram.getActualAmount().compareTo(groupPurchaseFee) == 0){
+			return CloudCoachPaymentProgram.StatusEnum.OPEN;
+		}else {
+			return CloudCoachPaymentProgram.StatusEnum.AUDITING;
+		}
+	}
+
+	@Transactional(rollbackFor = Exception.class)
+	@Override
+	public void auditPass(CloudCoachPaymentProgram cloudCoachPaymentProgram){
+		List<Integer> userIds = cloudCoachPaymentProgram.getUserIds();
+		//是否0元购买
+		Boolean isFree = cloudCoachPaymentProgram.getActualAmount().compareTo(BigDecimal.ZERO) == 0;
 		//如果是0元订单,保存为待激活的云教练订单
 		if(isFree){
+			cloudCoachPaymentProgram.setPaymentUserNum(userIds.size());
+			cloudCoachPaymentProgramDao.update(cloudCoachPaymentProgram);
+			studentCloudCoachPaymentDetailsDao.updatePaymentStatus(cloudCoachPaymentProgram.getId());
 			CloudTeacherOrder cloudTeacherOrder = new CloudTeacherOrder();
 			cloudTeacherOrder.setTime(cloudCoachPaymentProgram.getMemberNum().intValue());
 			cloudTeacherOrder.setOrganId(cloudCoachPaymentProgram.getOrganId());
@@ -108,4 +136,42 @@ public class CloudCoachPaymentProgramServiceImpl extends BaseServiceImpl<Long, C
 					null,0,notifyUrl.toString(),"STUDENT",tenantInfo.getName());
 		}
 	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public void modify(CloudCoachPaymentProgram cloudCoachPaymentProgram) {
+		CloudCoachPaymentProgram paymentProgram = cloudCoachPaymentProgramDao.getLock(cloudCoachPaymentProgram.getId());
+		if(paymentProgram.getStatus() != CloudCoachPaymentProgram.StatusEnum.REJECT){
+			throw new BizException("当前状态缴费项目不可编辑");
+		}
+		cloudCoachPaymentProgram.setStatus(getStatus(cloudCoachPaymentProgram));
+		cloudCoachPaymentProgramDao.update(cloudCoachPaymentProgram);
+		if(cloudCoachPaymentProgram.getStatus() == CloudCoachPaymentProgram.StatusEnum.OPEN){
+			List<Integer> userIds = studentCloudCoachPaymentDetailsDao.findUserByProgramId(cloudCoachPaymentProgram.getId());
+			cloudCoachPaymentProgram.setUserIds(userIds);
+			this.auditPass(cloudCoachPaymentProgram);
+		}
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public void audit(CloudCoachPaymentProgram cloudCoachPaymentProgram) {
+		CloudCoachPaymentProgram paymentProgram = cloudCoachPaymentProgramDao.getLock(cloudCoachPaymentProgram.getId());
+		if(paymentProgram.getStatus() != CloudCoachPaymentProgram.StatusEnum.AUDITING){
+			throw new BizException("当前状态缴费项目不可审核");
+		}
+		CloudCoachPaymentProgram.StatusEnum status = cloudCoachPaymentProgram.getStatus();
+		if(status == CloudCoachPaymentProgram.StatusEnum.AUDITING){
+			throw new BizException("审核状态异常");
+		}
+		paymentProgram.setStatus(status);
+		paymentProgram.setMemo(cloudCoachPaymentProgram.getMemo());
+		paymentProgram.setUpdateTime(new Date());
+		cloudCoachPaymentProgramDao.update(cloudCoachPaymentProgram);
+		if(status == CloudCoachPaymentProgram.StatusEnum.OPEN){
+			List<Integer> userIds = studentCloudCoachPaymentDetailsDao.findUserByProgramId(cloudCoachPaymentProgram.getId());
+			cloudCoachPaymentProgram.setUserIds(userIds);
+			this.auditPass(cloudCoachPaymentProgram);
+		}
+	}
 }

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

@@ -131,6 +131,9 @@ public class MemberRankSettingServiceImpl extends BaseServiceImpl<Integer, Membe
         if (cloudCoachPaymentProgram == null) {
             throw new BizException("团练宝缴费订单不存在,请联系指导老师");
         }
+        if (cloudCoachPaymentProgram.getStatus() != CloudCoachPaymentProgram.StatusEnum.OPEN) {
+            throw new BizException("当前团练宝缴费订单状态不允许缴费");
+        }
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         StudentCloudCoachPaymentDetails cloudCoachPaymentDetails = studentCloudCoachPaymentDetailsService.findByUserId(paymentId, sysUser.getId());
         if (cloudCoachPaymentDetails == null) {

+ 28 - 14
mec-biz/src/main/resources/config/mybatis/CloudCoachPaymentProgramMapper.xml

@@ -22,6 +22,8 @@
 		<result column="create_time_" property="createTime" />
 		<result column="update_time_" property="updateTime" />
 		<result column="tenant_id_" property="tenantId" />
+		<result column="memo_" property="memo" />
+		<result column="status_" property="status" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
 	</resultMap>
 	
 	<!-- 根据主键查询一条记录 -->
@@ -38,49 +40,55 @@
 	<insert id="insert" parameterType="com.ym.mec.biz.dal.entity.CloudCoachPaymentProgram" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
 		INSERT INTO cloud_coach_payment_program (name_,remark_,member_num_,user_num_,
 		payment_user_num_,period_,member_rank_setting_id_,actual_amount_,original_amount_,
-		operator_,create_time_,update_time_,tenant_id_)
+		operator_,create_time_,update_time_,tenant_id_,memo_,status_)
 		VALUES(#{name},#{remark},#{memberNum},#{userNum},#{paymentUserNum},#{period,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
-		#{memberRankSettingId},#{actualAmount},#{originalAmount},#{operator},NOW(),NOW(),#{tenantId})
+		#{memberRankSettingId},#{actualAmount},#{originalAmount},#{operator},NOW(),NOW(),#{tenantId},#{memo},#{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler})
 	</insert>
 	
 	<!-- 根据主键查询一条记录 -->
 	<update id="update" parameterType="com.ym.mec.biz.dal.entity.CloudCoachPaymentProgram">
 		UPDATE cloud_coach_payment_program <set>
+		<if test="status != null">
+			status_ = #{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
+		</if>
+		<if test="memo != null">
+			memo_ = #{memo},
+		</if>
 		<if test="operator != null">
-		operator_ = #{operator},
+			operator_ = #{operator},
 		</if>
 		<if test="memberNum != null">
-		member_num_ = #{memberNum},
+			member_num_ = #{memberNum},
 		</if>
 		<if test="tenantId != null">
-		tenant_id_ = #{tenantId},
+			tenant_id_ = #{tenantId},
 		</if>
 		<if test="paymentUserNum != null">
-		payment_user_num_ = #{paymentUserNum},
+			payment_user_num_ = #{paymentUserNum},
 		</if>
 		<if test="originalAmount != null">
-		original_amount_ = #{originalAmount},
+			original_amount_ = #{originalAmount},
 		</if>
 		<if test="name != null">
-		name_ = #{name},
+			name_ = #{name},
 		</if>
 		<if test="remark != null">
-		remark_ = #{remark},
+			remark_ = #{remark},
 		</if>
 		<if test="period != null">
-		period_ = #{period,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
+			period_ = #{period,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
 		</if>
 		<if test="userNum != null">
-		user_num_ = #{userNum},
+			user_num_ = #{userNum},
 		</if>
 		<if test="updateTime != null">
-		update_time_ = #{updateTime},
+			update_time_ = #{updateTime},
 		</if>
 		<if test="memberRankSettingId != null">
-		member_rank_setting_id_ = #{memberRankSettingId},
+			member_rank_setting_id_ = #{memberRankSettingId},
 		</if>
 		<if test="actualAmount != null">
-		actual_amount_ = #{actualAmount},
+			actual_amount_ = #{actualAmount},
 		</if>
 		</set> WHERE id_ = #{id}
 	</update>
@@ -98,6 +106,9 @@
 			<if test="period != null and period != ''">
 				AND ccpp.period_ = #{period}
 			</if>
+			<if test="status != null and status != ''">
+				AND ccpp.status_ = #{status}
+			</if>
 			<if test="startTime != null and startTime != ''">
 				AND DATE_FORMAT(ccpp.create_time_,"%Y-%m-%d") >= #{startTime}
 			</if>
@@ -121,4 +132,7 @@
 		SELECT COUNT(DISTINCT ccpp.id_) FROM cloud_coach_payment_program ccpp
 		<include refid="queryPageSql"/>
 	</select>
+	<select id="getLock" resultMap="CloudCoachPaymentProgram">
+		SELECT * FROM cloud_coach_payment_program WHERE id_ = #{id} FOR UPDATE
+	</select>
 </mapper>

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

@@ -39,7 +39,7 @@
 	<insert id="batchInsert">
 		INSERT INTO student_cloud_coach_payment_details (user_id_,payment_status_,create_time_,update_time_,tenant_id_,cloud_coach_payment_program_id_)VALUES
 		<foreach collection="userIds" separator="," item="userId">
-			(#{userId},#{paymentStatus},NOW(),NOW(),#{tenantId},#{cloudCoachPaymentProgramId})
+			(#{userId},0,NOW(),NOW(),#{tenantId},#{cloudCoachPaymentProgramId})
 		</foreach>
 	</insert>
 
@@ -64,7 +64,11 @@
 		update_time_ = NOW()
 		</set> WHERE id_ = #{id}
 	</update>
-	
+	<update id="updatePaymentStatus">
+		UPDATE student_cloud_coach_payment_details SET payment_status_ = 1,update_time_ = NOW()
+		WHERE cloud_coach_payment_program_id_ = #{cloudCoachPaymentProgramId}
+	</update>
+
 	<!-- 根据主键删除一条记录 -->
 	<delete id="delete" >
 		DELETE FROM student_cloud_coach_payment_details WHERE id_ = #{id} 
@@ -100,4 +104,7 @@
 	<select id="findByUserId" resultMap="StudentCloudCoachPaymentDetails">
 		SELECT * FROM student_cloud_coach_payment_details WHERE cloud_coach_payment_program_id_ = #{paymentId} AND user_id_ = #{userId} LIMIT 1
 	</select>
+	<select id="findUserByProgramId" resultType="java.lang.Integer">
+		SELECT user_id_ FROM student_cloud_coach_payment_details WHERE cloud_coach_payment_program_id_ = #{programId}
+	</select>
 </mapper>

+ 16 - 0
mec-web/src/main/java/com/ym/mec/web/controller/CloudCoachPaymentProgramController.java

@@ -32,6 +32,22 @@ public class CloudCoachPaymentProgramController extends BaseController {
         return succeed();
     }
 
+    @ApiOperation(value = "修改")
+    @PostMapping("/update")
+    @PreAuthorize("@pcs.hasPermissions('cloudCoachPaymentProgram/update')")
+    public Object update(@RequestBody CloudCoachPaymentProgram cloudCoachPaymentProgram){
+        cloudCoachPaymentProgramService.modify(cloudCoachPaymentProgram);
+        return succeed();
+    }
+
+    @ApiOperation(value = "审核")
+    @PostMapping("/audit")
+    @PreAuthorize("@pcs.hasPermissions('cloudCoachPaymentProgram/audit')")
+    public Object audit(@RequestBody CloudCoachPaymentProgram cloudCoachPaymentProgram){
+        cloudCoachPaymentProgramService.audit(cloudCoachPaymentProgram);
+        return succeed();
+    }
+
     @ApiOperation(value = "分页查询")
     @GetMapping("/queryPage")
     @PreAuthorize("@pcs.hasPermissions('cloudCoachPaymentProgram/queryPage')")