Bläddra i källkod

Merge remote-tracking branch 'origin/master'

Joburgess 5 år sedan
förälder
incheckning
ee420869b9

+ 12 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentManageAccountBaseInfoDto.java

@@ -12,6 +12,9 @@ public class StudentManageAccountBaseInfoDto {
 
     @ApiModelProperty(value = "账户余额",required = false)
     private BigDecimal balance;
+    
+    @ApiModelProperty(value = "课程余额",required = false)
+    private BigDecimal courseBalance;
 
     @ApiModelProperty(value = "银行名称",required = false)
     private String bankName;
@@ -27,7 +30,15 @@ public class StudentManageAccountBaseInfoDto {
         this.balance = balance;
     }
 
-    public String getBankName() {
+    public BigDecimal getCourseBalance() {
+		return courseBalance;
+	}
+
+	public void setCourseBalance(BigDecimal courseBalance) {
+		this.courseBalance = courseBalance;
+	}
+
+	public String getBankName() {
         return bankName;
     }
 

+ 12 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/SysUserCashAccount.java

@@ -33,6 +33,10 @@ public class SysUserCashAccount {
 	@ApiModelProperty(value = "保证金余额",required = false)
 	private BigDecimal marginBalance;
 	
+	/** 课程余额余额 */
+	@ApiModelProperty(value = "课程余额",required = false)
+	private BigDecimal courseBalance;
+	
 	/** 账户状态(0,冻结,1,正常;-1,注销;) */
 	@ApiModelProperty(value = "账户状态",required = false)
 	private PlatformCashAccountStatusEnum status;
@@ -93,6 +97,14 @@ public class SysUserCashAccount {
 		this.marginBalance = marginBalance;
 	}
 
+	public BigDecimal getCourseBalance() {
+		return courseBalance;
+	}
+
+	public void setCourseBalance(BigDecimal courseBalance) {
+		this.courseBalance = courseBalance;
+	}
+
 	public PlatformCashAccountStatusEnum getStatus() {
 		return status;
 	}

+ 8 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/StudentPaymentOrderDetailService.java

@@ -48,4 +48,12 @@ public interface StudentPaymentOrderDetailService extends BaseService<Long, Stud
      */
     List<Goods> findApplyOrderGoods(Long orderId);
 
+    /**
+     * 获取订单详情
+     * @param userId
+     * @param status
+     * @return
+     */
+    List<StudentPaymentOrderDetail>findUserApplyOrder(Integer userId,DealStatusEnum status);
+
 }

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

@@ -14,4 +14,11 @@ public interface SysUserCashAccountService extends BaseService<Integer, SysUserC
 	 * @return
 	 */
 	boolean updateBalance(Integer userId, BigDecimal decimal);
+
+	/**
+	 * 将课程余额转入到可用余额
+	 * @param userId
+	 * @return
+	 */
+	boolean transferCourseBalanceToBalance(Integer userId);
 }

+ 24 - 7
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupSubjectPlanServiceImpl.java

@@ -7,6 +7,7 @@ import com.ym.mec.biz.dal.dto.MusicGroupSubjectGoodsAndInfoDto;
 import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.enums.DealStatusEnum;
 import com.ym.mec.biz.dal.enums.GoodsType;
+import com.ym.mec.biz.dal.enums.OrderDetailTypeEnum;
 import com.ym.mec.biz.service.*;
 import com.ym.mec.util.collection.MapUtil;
 import org.snaker.engine.core.OrderService;
@@ -18,6 +19,7 @@ import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 import java.util.Map;
@@ -142,13 +144,28 @@ public class MusicGroupSubjectPlanServiceImpl extends BaseServiceImpl<Integer, M
         //乐团计划及收费信息
         MusicGroupSubjectPlan musicOneSubjectClassPlan = this.getMusicOneSubjectClassPlan(musicGroupId, subjectId);
         musicOneSubjectClassPlan.setFee(studentRegistration.getTemporaryCourseFee());
+        
+        //乐团乐器及辅件信息
+        List<MusicGroupSubjectGoodsGroup> goodsGroups = new ArrayList<>();
 
         List<StudentPaymentOrderDetail> orderDetails = studentPaymentOrderDetailDao.findUserApplyOrder(studentRegistration.getUserId(), DealStatusEnum.WAIT_PAY);
-
-        String goodsIds = orderDetails.stream().filter(orderDetail -> orderDetail.getGoodsIdList() != null).map(orderDetail -> orderDetail.getGoodsIdList()).collect(Collectors.joining(","));
-
-        List<Goods> goodies = goodsService.findGoodsByIds(goodsIds);
-
+        for (StudentPaymentOrderDetail orderDetail : orderDetails) {
+            if (orderDetail.getGoodsIdList() == null || orderDetail.getGoodsIdList().isEmpty()) continue;
+            MusicGroupSubjectGoodsGroup musicGroupSubjectGoodsGroup = new MusicGroupSubjectGoodsGroup();
+            if (orderDetail.getType().equals(OrderDetailTypeEnum.MUSICAL)) {
+                musicGroupSubjectGoodsGroup.setName("乐器");
+                musicGroupSubjectGoodsGroup.setType(GoodsType.INSTRUMENT);
+            } else {
+                musicGroupSubjectGoodsGroup.setName("辅件");
+                musicGroupSubjectGoodsGroup.setType(GoodsType.ACCESSORIES);
+            }
+            musicGroupSubjectGoodsGroup.setId(orderDetail.getId());
+            musicGroupSubjectGoodsGroup.setMusicGroupId(musicGroupId);
+            musicGroupSubjectGoodsGroup.setPrice(orderDetail.getPrice());
+            List<Goods> goodies = goodsService.findGoodsByIds(orderDetail.getGoodsIdList());
+            musicGroupSubjectGoodsGroup.setGoodsList(goodies);
+            goodsGroups.add(musicGroupSubjectGoodsGroup);
+        }
 
         //获取声部(科目)下其他商品
         List<Goods> otherGoods = goodsService.findTypeGoods("OTHER");
@@ -156,7 +173,7 @@ public class MusicGroupSubjectPlanServiceImpl extends BaseServiceImpl<Integer, M
         MusicGroupSubjectGoodsAndInfoDto musicGroupSubjectGoodsAndInfo = new MusicGroupSubjectGoodsAndInfoDto();
         musicGroupSubjectGoodsAndInfo.setMusicGroupSubjectPlan(musicOneSubjectClassPlan);
         musicGroupSubjectGoodsAndInfo.setCourseScheduleInfo(courseForm);
-        musicGroupSubjectGoodsAndInfo.setStudentGoods(goodies);
+        musicGroupSubjectGoodsAndInfo.setMusicGroupSubjectGoodsGroupList(goodsGroups);
         musicGroupSubjectGoodsAndInfo.setOtherGoods(otherGoods);
         return musicGroupSubjectGoodsAndInfo;
     }
@@ -164,6 +181,6 @@ public class MusicGroupSubjectPlanServiceImpl extends BaseServiceImpl<Integer, M
 
     @Override
     public MusicGroupSubjectPlan findSubjectPlan(String musicGroupId, Integer subjectId) {
-        return musicGroupSubjectPlanDao.findSubjectPlan(musicGroupId,subjectId);
+        return musicGroupSubjectPlanDao.findSubjectPlan(musicGroupId, subjectId);
     }
 }

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

@@ -120,4 +120,9 @@ public class StudentPaymentOrderDetailServiceImpl extends BaseServiceImpl<Long,
         }
         return goodies;
     }
+
+    @Override
+    public List<StudentPaymentOrderDetail> findUserApplyOrder(Integer userId, DealStatusEnum status) {
+        return studentPaymentOrderDetailDao.findUserApplyOrder(userId,status);
+    }
 }

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

@@ -191,8 +191,6 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
             userId = sysUser.getId();
             //添加用户现金账户
             sysUserCashAccountDao.insert(new SysUserCashAccount(userId, "CNY"));
-            // 添加用户电子签章账户
-            //contractService.register(userId, sysUser.getRealName(), sysUser.getIdCardNo(), sysUser.getPhone());
             //注册到融云
             if (StringUtils.isEmpty(sysUser.getAvatar())) {
                 sysUser.setAvatar(sysConfigDao.findConfigValue(SysConfigService.USER_DEFAULT_HEAD_URL));
@@ -729,6 +727,8 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
         student.setIdCardNo(studentRegistration.getIdCardNo());
         update(student);
         studentRegistrationDao.updateUser(student.getUserId(), student.getParentsName(), student.getIdCardNo());
+        // 添加用户电子签章账户
+        contractService.register(student.getUserId(),student.getParentsName(), student.getIdCardNo(), student.getParentsPhone());
         return student;
     }
 }

+ 41 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysUserCashAccountServiceImpl.java

@@ -9,7 +9,11 @@ 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.PlatformCashAccountStatusEnum;
 import com.ym.mec.biz.service.SysUserCashAccountService;
 import com.ym.mec.common.dal.BaseDAO;
@@ -22,6 +26,9 @@ public class SysUserCashAccountServiceImpl extends BaseServiceImpl<Integer, SysU
 	@Autowired
 	private SysUserCashAccountDao sysUserCashAccountDao;
 
+	@Autowired
+	private SysUserCashAccountDetailDao sysUserCashAccountDetailDao;
+
 	@Override
 	public BaseDAO<Integer, SysUserCashAccount> getDAO() {
 		return sysUserCashAccountDao;
@@ -52,4 +59,38 @@ public class SysUserCashAccountServiceImpl extends BaseServiceImpl<Integer, SysU
 		return true;
 	}
 
+	@Override
+	@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
+	public boolean transferCourseBalanceToBalance(Integer userId) {
+		SysUserCashAccount cashAccount = sysUserCashAccountDao.getLocked(userId);
+		if (cashAccount == null) {
+			throw new BizException("用户[{}]现金账户不存在", userId);
+		}
+
+		if (cashAccount.getStatus() != PlatformCashAccountStatusEnum.NORMAL) {
+			throw new BizException("账户不可用");
+		}
+
+		Date date = new Date();
+
+		SysUserCashAccountDetail detail = new SysUserCashAccountDetail();
+		detail.setAmount(cashAccount.getCourseBalance());
+		detail.setBalance(cashAccount.getBalance().add(cashAccount.getCourseBalance()));
+		detail.setComment("课程余额转账");
+		detail.setCreateTime(date);
+		detail.setStatus(DealStatusEnum.SUCCESS);
+		detail.setType(PlatformCashAccountDetailTypeEnum.FILL_ACCOUNT);
+		detail.setUpdateTime(date);
+		detail.setUserId(userId);
+
+		sysUserCashAccountDetailDao.insert(detail);
+
+		cashAccount.setBalance(cashAccount.getBalance().add(cashAccount.getCourseBalance()));
+		cashAccount.setCourseBalance(new BigDecimal(0));
+		cashAccount.setUpdateTime(date);
+
+		sysUserCashAccountDao.update(cashAccount);
+		return true;
+	}
+
 }

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

@@ -27,6 +27,7 @@
 
     <resultMap id="studentManageAccountBaseInfo" type="com.ym.mec.biz.dal.dto.StudentManageAccountBaseInfoDto">
         <result property="balance" column="balance_"/>
+        <result property="courseBalance" column="course_balance_"/>
         <result property="bankName" column="bank_name_"/>
         <result property="cardNo" column="card_no_"/>
     </resultMap>
@@ -292,6 +293,7 @@
     <select id="getStudentAccountBaseInfo" resultMap="studentManageAccountBaseInfo">
         SELECT
             suca.balance_,
+            suca.course_balance_,
             subc.bank_name_,
             subc.card_no_
         FROM

+ 4 - 0
mec-biz/src/main/resources/config/mybatis/SysUserCashAccountMapper.xml

@@ -12,6 +12,7 @@
         <result column="balance_" property="balance"/>
         <result column="frozen_amount_" property="frozenAmount"/>
         <result column="margin_balance_" property="marginBalance"/>
+        <result column="course_balance_" property="courseBalance"/>
         <result column="status_" property="status" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
         <result column="create_time_" property="createTime"/>
         <result column="update_time" property="updateTime"/>
@@ -61,6 +62,9 @@
             <if test="marginBalance != null">
                 margin_balance_ = #{marginBalance},
             </if>
+            <if test="courseBalance != null">
+                course_balance_ = #{courseBalance},
+            </if>
             <if test="currency != null">
                 currency_ = #{currency},
             </if>

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

@@ -232,7 +232,16 @@ public class MusicGroupController extends BaseController {
 
         //乐器及打包辅件
         List<MusicGroupSubjectGoodsGroup> goodsGroups = null;
-        if (registerPayDto.getGoodsGroupIds() != null && !registerPayDto.getGoodsGroupIds().equals("")) {
+        if (registerPayDto.getGoodsGroupIds() != null && !registerPayDto.getGoodsGroupIds().equals("")) GROUP: {
+            if(studentRegistration.getTemporaryCourseFee() != null){
+                List<StudentPaymentOrderDetail> orderDetails = studentPaymentOrderDetailService.findUserApplyOrder(studentRegistration.getUserId(), DealStatusEnum.WAIT_PAY);
+                for (StudentPaymentOrderDetail orderDetail : orderDetails) {
+                    orderAmount = orderAmount.add(orderDetail.getPrice());
+                    continue;
+                }
+                break GROUP;
+            }
+
             goodsGroups = musicGroupSubjectGoodsGroupService.findGoodsGroupByIds(registerPayDto.getGoodsGroupIds());
             for (MusicGroupSubjectGoodsGroup goodsGroup : goodsGroups) {
                 if (goodsGroup.getType().equals(GoodsType.INSTRUMENT) && musicOneSubjectClassPlan.getKitGroupPurchaseType().equals(KitGroupPurchaseTypeEnum.LEASE)) {
@@ -323,7 +332,15 @@ public class MusicGroupController extends BaseController {
 
         //乐器及打包辅件
         List<MusicGroupSubjectGoodsGroup> goodsGroups = null;
-        if (registerPayDto.getGoodsGroupIds() != null && !registerPayDto.getGoodsGroupIds().equals("")) {
+        if (registerPayDto.getGoodsGroupIds() != null && !registerPayDto.getGoodsGroupIds().equals("")) GROUP: {
+            if(studentRegistration.getTemporaryCourseFee() != null){
+                List<StudentPaymentOrderDetail> orderDetails = studentPaymentOrderDetailService.findUserApplyOrder(studentRegistration.getUserId(), DealStatusEnum.WAIT_PAY);
+                for (StudentPaymentOrderDetail orderDetail : orderDetails) {
+                    orderAmount = orderAmount.add(orderDetail.getPrice());
+                    continue;
+                }
+                break GROUP;
+            }
             goodsGroups = musicGroupSubjectGoodsGroupService.findGoodsGroupByIds(registerPayDto.getGoodsGroupIds());
             for (MusicGroupSubjectGoodsGroup goodsGroup : goodsGroups) {
                 if (goodsGroup.getType().equals(GoodsType.INSTRUMENT) && musicOneSubjectClassPlan.getKitGroupPurchaseType().equals(KitGroupPurchaseTypeEnum.LEASE)) {

+ 37 - 29
mec-web/src/main/java/com/ym/mec/web/controller/SysUserCashAccountController.java

@@ -1,46 +1,54 @@
 package com.ym.mec.web.controller;
 
-import com.ym.mec.auth.api.client.SysUserFeignService;
-import com.ym.mec.auth.api.entity.SysUser;
-import com.ym.mec.biz.service.SysUserCashAccountService;
-import com.ym.mec.common.controller.BaseController;
-import com.ym.mec.common.page.QueryInfo;
-
 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.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 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.biz.service.SysUserCashAccountService;
+import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.common.page.QueryInfo;
+
 @RequestMapping("userCashAccount")
 @Api(tags = "用户账户服务")
 @RestController
 public class SysUserCashAccountController extends BaseController {
 
-    @Autowired
-    private SysUserCashAccountService sysUserCashAccountService;
-    @Autowired
-    private SysUserFeignService sysUserFeignService;
-
-    @ApiOperation(value = "获取用户账户信息")
-    @GetMapping("/get")
-    @PreAuthorize("@pcs.hasPermissions('userCashAccount/get')")
-    public Object add() {
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-        if(sysUser == null){
-            return failed("请重新登录");
-        }
-        return succeed(sysUserCashAccountService.get(sysUser.getId()));
-    }
-
-    @ApiOperation(value = "分页查询收费类型列表")
-    @GetMapping("/queryPage")
-    @PreAuthorize("@pcs.hasPermissions('userCashAccount/queryPage')")
-    public Object queryPage(QueryInfo queryInfo) {
-        return succeed(sysUserCashAccountService.queryPage(queryInfo));
-    }
-
+	@Autowired
+	private SysUserCashAccountService sysUserCashAccountService;
+	@Autowired
+	private SysUserFeignService sysUserFeignService;
+
+	@ApiOperation(value = "获取用户账户信息")
+	@GetMapping("/get")
+	@PreAuthorize("@pcs.hasPermissions('userCashAccount/get')")
+	public Object add() {
+		SysUser sysUser = sysUserFeignService.queryUserInfo();
+		if (sysUser == null) {
+			return failed("请重新登录");
+		}
+		return succeed(sysUserCashAccountService.get(sysUser.getId()));
+	}
+
+	@ApiOperation(value = "分页查询收费类型列表")
+	@GetMapping("/queryPage")
+	@PreAuthorize("@pcs.hasPermissions('userCashAccount/queryPage')")
+	public Object queryPage(QueryInfo queryInfo) {
+		return succeed(sysUserCashAccountService.queryPage(queryInfo));
+	}
+
+	@ApiOperation(value = "分页查询收费类型列表")
+	@PostMapping("/transferCourseBalanceToBalance")
+	@PreAuthorize("@pcs.hasPermissions('userCashAccount/transferCourseBalanceToBalance')")
+	public Object transferCourseBalanceToBalance(Integer userId) {
+		sysUserCashAccountService.transferCourseBalanceToBalance(userId);
+		return succeed();
+	}
 }