Browse Source

Merge remote-tracking branch 'origin/master'

Joburgess 4 years ago
parent
commit
0ab82537c1

+ 11 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/StudentRepairService.java

@@ -79,6 +79,17 @@ public interface StudentRepairService extends BaseService<Integer, StudentRepair
     Map addGoodsSellOrder(StudentGoodsSell studentGoodsSell) throws Exception;
 
     /**
+     * @describe 学员扫码支付
+     * @apiNote 时光荏苒,认真工作的时间总是过得很快,而我、享受这一刻!
+     * @author zouxuan
+     * @date 2020/9/16
+     * @time 13:47
+     * @param goodsSellId:
+     * @return java.util.Map
+     */
+    Map studentPaymentGoodsOrder(Integer goodsSellId) throws Exception;
+
+    /**
      * @describe 商品销售订单回调
      * @apiNote 时光荏苒,认真工作的时间总是过得很快,而我、享受这一刻!
      * @author zouxuan

+ 108 - 27
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRepairServiceImpl.java

@@ -130,8 +130,6 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
         }
         studentDao.lockUser(studentId);
         SysUser student = sysUserFeignService.queryUserById(studentId);
-        String orderNo = idGeneratorService.generatorId("payment") + "";
-        studentGoodsSell.setOrderNo(orderNo);
         if(studentGoodsSell.getTeacherId() == null){
             //获取学员第一个教务老师
             studentGoodsSell.setTeacherId(musicGroupDao.getFirstEduTeacherId(studentGoodsSell.getUserId()));
@@ -164,9 +162,7 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
             MapUtil.populateMap(repairInfoMap, studentGoodsSell);
             return repairInfoMap;
         }
-
-//        List<Goods> goods = goodsService.findGoodsByIds(StringUtils.join(goodsIds,","));
-
+        String orderNo = idGeneratorService.generatorId("payment") + "";
         StudentPaymentOrder studentPaymentOrder = new StudentPaymentOrder();
         studentPaymentOrder.setUserId(studentId);
         studentPaymentOrder.setGroupType(GroupType.GOODS_SELL);
@@ -179,28 +175,113 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
         studentPaymentOrder.setRoutingOrganId(student.getOrganId());
         studentPaymentOrderService.insert(studentPaymentOrder);
 
-        /*Map<Integer, List<Goods>> collect = goods.stream().collect(Collectors.groupingBy(Goods::getId));
-        List<StudentPaymentOrderDetail> studentPaymentOrderDetailList = new ArrayList<>();
-        for (String id : goodsIds) {
-            Goods e = collect.get(id).get(0);
-            StudentPaymentOrderDetail studentPaymentOrderDetail = new StudentPaymentOrderDetail();
-            studentPaymentOrderDetail.setRemitFee(BigDecimal.ZERO);
-            OrderDetailTypeEnum type = null;
-            if (e.getType() == GoodsType.INSTRUMENT) {
-                type = OrderDetailTypeEnum.MUSICAL;
-            } else if (e.getType() == GoodsType.ACCESSORIES) {
-                type = OrderDetailTypeEnum.ACCESSORIES;
-            } else if (e.getType() == GoodsType.OTHER) {
-                type = OrderDetailTypeEnum.TEACHING;
+        studentPaymentOrder.setVersion(0);
+        BigDecimal balance = BigDecimal.ZERO;
+        if (studentGoodsSell.getIsUseBalancePayment() && amount.compareTo(BigDecimal.ZERO) > 0) {
+            SysUserCashAccount userCashAccount = sysUserCashAccountService.getLocked(studentId);
+            if (userCashAccount == null) {
+                throw new BizException("用户账户不存在");
+            }
+            if (userCashAccount.getBalance() != null && userCashAccount.getBalance().compareTo(BigDecimal.ZERO) > 0) {
+                balance = amount.compareTo(userCashAccount.getBalance()) >= 0 ? userCashAccount.getBalance() : amount;
+                amount = amount.subtract(balance);
+                studentPaymentOrder.setActualAmount(amount);
+                studentPaymentOrder.setBalancePaymentAmount(balance);
+                sysUserCashAccountService.updateBalance(studentId, balance.negate(), PlatformCashAccountDetailTypeEnum.PAY_FEE, "商品销售");
             }
-            studentPaymentOrderDetail.setType(type);
-            studentPaymentOrderDetail.setPrice(e.getGroupPurchasePrice());
-            studentPaymentOrderDetail.setGoodsIdList(id);
-            studentPaymentOrderDetail.setPaymentOrderId(studentPaymentOrder.getId());
-            studentPaymentOrderDetail.setKitGroupPurchaseType(KitGroupPurchaseTypeEnum.GROUP);
-            studentPaymentOrderDetailList.add(studentPaymentOrderDetail);
         }
-        studentPaymentOrderDetailService.batchAdd(studentPaymentOrderDetailList);*/
+        studentPaymentOrderService.update(studentPaymentOrder);
+        studentPaymentOrder.setVersion(studentPaymentOrder.getVersion() + 1);
+
+        if (amount.compareTo(BigDecimal.ZERO) == 0) {
+            studentPaymentRouteOrderService.addRouteOrder(orderNo, student.getOrganId(), balance);
+            Map<String, String> notifyMap = new HashMap<>();
+            notifyMap.put("tradeState", "1");
+            notifyMap.put("merOrderNo", studentPaymentOrder.getOrderNo());
+            studentPaymentOrderService.updateOrder(notifyMap);
+            notifyMap.put("orderNo", orderNo);
+            return notifyMap;
+        }
+
+        String baseApiUrl = sysConfigDao.findConfigValue(SysConfigService.BASE_API_URL);
+
+        Map payMap = payService.getPayMap(
+                amount,
+                balance,
+                orderNo,
+                baseApiUrl + "/api-student/studentOrder/notify",
+                baseApiUrl + "/api-student/studentOrder/paymentResult?type=edu&orderNo=" + orderNo,
+                "商品销售",
+                "商品销售",
+                student.getOrganId(),
+                "goodsSell"
+        );
+
+        studentPaymentOrder.setMerNos((String) payMap.get("routingMerNos"));
+        studentPaymentOrder.setPaymentChannel((String) payMap.get("type"));
+        studentPaymentOrderService.update(studentPaymentOrder);
+        return payMap;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class,isolation = Isolation.SERIALIZABLE)
+    public Map studentPaymentGoodsOrder(Integer goodsSellId) throws Exception {
+        StudentGoodsSell studentGoodsSell = studentGoodsSellDao.get(goodsSellId);
+        Integer studentId = studentGoodsSell.getUserId();
+        studentDao.lockUser(studentId);
+//        SysUser student = sysUserFeignService.queryUserById(studentId);
+        List<GoodsSellDto> goodsSellDtos = JSONObject.parseArray(studentGoodsSell.getGoodsJson(),GoodsSellDto.class);
+        List<Integer> goodsIds = goodsSellDtos.stream().map(e -> e.getGoodsId()).collect(Collectors.toList());
+
+        Map<Integer, BigDecimal> map = getMap("goods", "id_", "market_price_", goodsIds, Integer.class, BigDecimal.class);
+        for (GoodsSellDto goodsSellDto : goodsSellDtos) {
+            goodsSellDto.setGoodsPrice(map.get(goodsSellDto.getGoodsId()));
+            goodsSellDto.setTotalGoodsPrice(map.get(goodsSellDto.getGoodsId()).multiply(new BigDecimal(goodsSellDto.getGoodsNum())));
+        }
+        Map<Integer, List<GoodsSellDto>> goodsMap = goodsSellDtos.stream().collect(Collectors.groupingBy(GoodsSellDto::getGoodsId));
+        BigDecimal amount = BigDecimal.ZERO;
+        for (Integer id : goodsIds) {
+            GoodsSellDto goodsSellDto = goodsMap.get(id).get(0);
+            amount = amount.add(goodsSellDto.getTotalGoodsPrice());
+        }
+        amount = amount.subtract(studentGoodsSell.getMarketAmount());
+        if(amount.signum() < 0){
+            throw new BizException("操作失败:订单金额异常");
+        }
+        String orderNo1 = studentGoodsSell.getOrderNo();
+        String orderNo = idGeneratorService.generatorId("payment") + "";
+
+        studentGoodsSell.setOrderNo(orderNo);
+        StudentPaymentOrder studentPaymentOrder = null;
+        if(StringUtils.isNotEmpty(orderNo1)){
+            studentPaymentOrder = studentPaymentOrderService.findOrderByOrderNo(orderNo1);
+            if(studentPaymentOrder.getStatus() == DealStatusEnum.SUCCESS){
+                throw new BizException("该订单已支付");
+            }
+            //关闭老订单
+            if(studentPaymentOrder.getBalancePaymentAmount() != null){
+                studentGoodsSell.setIsUseBalancePayment(true);
+            }else {
+                studentGoodsSell.setIsUseBalancePayment(false);
+            }
+            studentPaymentOrder.setStatus(DealStatusEnum.CLOSE);
+            studentPaymentOrderService.update(studentPaymentOrder);
+            if (studentPaymentOrder.getBalancePaymentAmount() != null && studentPaymentOrder.getBalancePaymentAmount().compareTo(BigDecimal.ZERO) > 0) {
+                sysUserCashAccountService.updateBalance(studentPaymentOrder.getUserId(), studentPaymentOrder.getBalancePaymentAmount(), PlatformCashAccountDetailTypeEnum.REFUNDS, "关闭订单");
+            }
+        }
+        studentGoodsSellDao.update(studentGoodsSell);
+        studentPaymentOrder = new StudentPaymentOrder();
+        studentPaymentOrder.setUserId(studentId);
+        studentPaymentOrder.setGroupType(GroupType.GOODS_SELL);
+        studentPaymentOrder.setOrderNo(orderNo);
+        studentPaymentOrder.setType(OrderTypeEnum.GOODS_SELL);
+        studentPaymentOrder.setExpectAmount(amount);
+        studentPaymentOrder.setActualAmount(amount);
+        studentPaymentOrder.setStatus(DealStatusEnum.ING);
+        studentPaymentOrder.setOrganId(studentGoodsSell.getOrganId());
+        studentPaymentOrder.setRoutingOrganId(studentGoodsSell.getOrganId());
+        studentPaymentOrderService.insert(studentPaymentOrder);
 
         studentPaymentOrder.setVersion(0);
         BigDecimal balance = BigDecimal.ZERO;
@@ -221,7 +302,7 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
         studentPaymentOrder.setVersion(studentPaymentOrder.getVersion() + 1);
 
         if (amount.compareTo(BigDecimal.ZERO) == 0) {
-            studentPaymentRouteOrderService.addRouteOrder(orderNo, student.getOrganId(), balance);
+            studentPaymentRouteOrderService.addRouteOrder(orderNo, studentGoodsSell.getOrganId(), balance);
             Map<String, String> notifyMap = new HashMap<>();
             notifyMap.put("tradeState", "1");
             notifyMap.put("merOrderNo", studentPaymentOrder.getOrderNo());
@@ -240,7 +321,7 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
                 baseApiUrl + "/api-student/studentOrder/paymentResult?type=edu&orderNo=" + orderNo,
                 "商品销售",
                 "商品销售",
-                student.getOrganId(),
+                studentGoodsSell.getOrganId(),
                 "goodsSell"
         );
 

+ 10 - 4
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SubjectChangeServiceImpl.java

@@ -96,6 +96,10 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
     @Override
     public Map payChange(Integer id, BigDecimal viewAmount, Boolean isUseBalancePayment) throws Exception {
         SubjectChange subjectChange = subjectChangeDao.get(id);
+        MusicGroup musicGroup = musicGroupDao.get(subjectChange.getMusicGroupId());
+        if (musicGroup.getStatus().equals(MusicGroupStatusEnum.APPLY) && musicGroup.getStatus().equals(MusicGroupStatusEnum.PAY)) {
+            throw new BizException("乐团当前状态不能缴费");
+        }
         BigDecimal amount = subjectChange.getGoodsMargin().add(subjectChange.getCourseMargin());
 
         Date date = new Date();
@@ -187,6 +191,8 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
     @Transactional(rollbackFor = Exception.class)
     public SubjectChange addChange(SubjectChange subjectChange) {
         Date nowDate = new Date();
+        SubjectChange studentOriginal = getStudentOriginal(subjectChange.getStudentId(), subjectChange.getMusicGroupId());
+        subjectChange.setOriginalCost(studentOriginal.getOriginalCost());
         subjectChange.setStatus(SubjectChangeStatusEnum.WAIT_PAY);
         MusicGroup musicGroup = musicGroupDao.get(subjectChange.getMusicGroupId());
         subjectChange.setOrganId(musicGroup.getOrganId());
@@ -197,9 +203,9 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
         subjectChange.setGoodsMargin(goodsMargin);
         String goodsIds = "";
         if (subjectChange.getChangeMusical() != null) {
-            goodsIds += subjectChange.getMusicGroupId() + "";
+            goodsIds += subjectChange.getChangeMusical() + "";
         }
-        if (subjectChange.getChangeMusical() != null) {
+        if (subjectChange.getChangeAccessories() != null) {
             goodsIds += StringUtils.isNotBlank(goodsIds) ? "," + subjectChange.getChangeAccessories() : subjectChange.getChangeAccessories();
         }
         BigDecimal goodsPrice = BigDecimal.ZERO;
@@ -219,7 +225,7 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
         //差价小于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());
+            studentRegistrationService.changeStudentSubject(subjectChange.getStudentId(), subjectChange.getMusicGroupId(), subjectChange.getOriginalSubjectId(), subjectChange.getChangeSubjectId());
         }
         subjectChange.setCreateTime(nowDate);
         subjectChange.setUpdateTime(nowDate);
@@ -331,7 +337,7 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
         Integer userId = studentPaymentOrder.getUserId();
 
         //更新声部信息报名数量
-        studentRegistrationService.changeStudentSubject(subjectChange.getStudentId(),subjectChange.getMusicGroupId(),subjectChange.getOriginalSubjectId(),subjectChange.getChangeSubjectId());
+        studentRegistrationService.changeStudentSubject(subjectChange.getStudentId(), subjectChange.getMusicGroupId(), subjectChange.getOriginalSubjectId(), subjectChange.getChangeSubjectId());
 
         Map<Integer, String> map = new HashMap<>();
         map.put(userId, userId.toString());

+ 4 - 0
mec-im/src/main/java/com/ym/service/Impl/HereWhiteServiceImpl.java

@@ -6,6 +6,7 @@ import com.ym.mec.common.exception.BizException;
 import com.ym.mec.util.http.HttpUtil;
 import com.ym.pojo.HereWhite;
 import com.ym.service.HereWhiteService;
+import com.ym.service.RoomService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
@@ -25,10 +26,13 @@ public class HereWhiteServiceImpl implements HereWhiteService {
 
     @Autowired
     private HereWhiteDao hereWhiteDao;
+    @Autowired
+    private RoomService roomService;
 
     @Override
     @Transactional(rollbackFor = Exception.class)
     public HereWhite create(String name, Integer userNum,Integer courseScheduleId) throws Exception {
+        courseScheduleId = roomService.getCurrentCourseId(courseScheduleId.toString());
         JSONObject json = new JSONObject();
         json.put("name",name);
         json.put("limit",userNum);

+ 23 - 0
mec-im/src/main/java/com/ym/service/Impl/RoomServiceImpl.java

@@ -39,6 +39,7 @@ import com.ym.utils.CodeUtil;
 import com.ym.utils.DateTimeUtils;
 import com.ym.utils.IdentifierUtils;
 import com.ym.whiteboard.WhiteBoardHelper;
+import io.swagger.models.auth.In;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -94,6 +95,28 @@ public class RoomServiceImpl implements RoomService {
     @Autowired
     private RedisTemplate<String,String> redisTemplate;
 
+    @Override
+    public Integer getCurrentCourseId(String roomId){
+        String continueCourseTime = sysConfigDao.findConfigValue(SysConfigService.ONLINE_CONTINUE_COURSE_TIME);
+        if(StringUtils.isEmpty(continueCourseTime)){
+            continueCourseTime = "5";
+        }
+        CourseSchedule courseSchedule = courseScheduleDao.get(Long.parseLong(roomId));
+        CourseSchedule schedule = courseSchedule;
+        //如果当前课程是连堂课,那么获取第一节课的课程编号
+        while (true){
+            String classDate = DateUtil.format(schedule.getClassDate(), DateUtil.DEFAULT_PATTERN);
+            String startClassTime = DateUtil.format(schedule.getStartClassTime(), DateUtil.EXPANDED_TIME_FORMAT);
+            schedule = courseScheduleDao.getLastCourse(schedule.getClassGroupId(),classDate + " " + startClassTime,schedule.getActualTeacherId(),continueCourseTime);
+            if(schedule != null){
+                roomId = schedule.getId().toString();
+            }else {
+                break;
+            }
+        }
+        return Integer.parseInt(roomId);
+    }
+
     @Transactional(rollbackFor = Exception.class, isolation = Isolation.SERIALIZABLE)
     @Override
     public RoomResult joinRoom(String roomId) throws Exception {

+ 2 - 0
mec-im/src/main/java/com/ym/service/RoomService.java

@@ -12,6 +12,8 @@ public interface RoomService {
     //everyone
     RoomResult joinRoom(String roomId) throws Exception;
 
+    Integer getCurrentCourseId(String roomId);
+
     //only host
     Boolean downgrade(String roomId, List<ReqChangeUserRoleData.ChangedUser> users) throws Exception;
 

+ 2 - 1
mec-student/src/main/java/com/ym/mec/student/config/ResourceServerConfig.java

@@ -41,7 +41,8 @@ public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
                 "/repair/getStudentGoodsOrder",
                 "/subjectChange/getChangeInfo",
                 "/subjectChange/payChange",
-                "/contracts/queryProduceContract").permitAll().anyRequest().authenticated().and().httpBasic();
+                "/contracts/queryProduceContract",
+                "/repair/studentPaymentGoodsOrder").permitAll().anyRequest().authenticated().and().httpBasic();
     }
 
     @Override

+ 12 - 0
mec-student/src/main/java/com/ym/mec/student/controller/RepairController.java

@@ -69,6 +69,18 @@ public class RepairController extends BaseController {
         return succeed(map);
     }
 
+    @ApiOperation("学员扫码支付")
+    @PostMapping(value = "/studentPaymentGoodsOrder")
+    public HttpResponseResult studentPaymentGoodsOrder(Integer goodsSellId) throws Exception {
+        Map map = studentRepairService.studentPaymentGoodsOrder(goodsSellId);
+        if(map.containsKey("tradeState")){
+            return failed(HttpStatus.CREATED, "恭喜您,购买成功!");
+        }
+        return succeed(map);
+    }
+
+
+
     @ApiOperation("获取维修记录")
     @GetMapping(value = "/getStudentRepairList")
     public HttpResponseResult getStudentRepairList(RepairStudentQueryInfo queryInfo) {