Browse Source

Merge remote-tracking branch 'origin/master'

周箭河 4 năm trước cách đây
mục cha
commit
d429c1b70f

+ 5 - 5
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/StudentPaymentOrder.java

@@ -43,22 +43,22 @@ public class StudentPaymentOrder {
 	
 	/** 预计金额 */
 	@ApiModelProperty(value = "预计金额",required = true)
-	private BigDecimal expectAmount;
+	private BigDecimal expectAmount = BigDecimal.ZERO;
 	
 	/** 实际金额 */
 	@ApiModelProperty(value = "实际金额",required = true)
-	private BigDecimal actualAmount;
+	private BigDecimal actualAmount = BigDecimal.ZERO;
 
 	/** 公户金额 */
 	@ApiModelProperty(value = "公户金额",required = true)
-	private BigDecimal comAmount;
+	private BigDecimal comAmount = BigDecimal.ZERO;
 
 	/** 私户金额 */
 	@ApiModelProperty(value = "私户金额",required = true)
-	private BigDecimal perAmount;
+	private BigDecimal perAmount = BigDecimal.ZERO;
 	
 	@ApiModelProperty(value = "余额付款金额",required = true)
-	private BigDecimal balancePaymentAmount;
+	private BigDecimal balancePaymentAmount = BigDecimal.ZERO;
 	
 	/** 交易流水号 */
 	@ApiModelProperty(value = "交易流水号",required = true)

+ 34 - 12
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRepairServiceImpl.java

@@ -701,7 +701,6 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
                 rechargeDetail.setComAmount(studentPaymentOrder.getComAmount().negate());
                 rechargeDetail.setPerAmount(studentPaymentOrder.getPerAmount().negate());
             }
-            sysUserCashAccountDetailService.insert(paymentDetail);
             saveSellOrder(studentPaymentOrder.getOrderNo());
         } else if (studentPaymentOrder.getStatus() == DealStatusEnum.CLOSE || studentPaymentOrder.getStatus() == DealStatusEnum.FAILED) {
             if (studentPaymentOrder.getBalancePaymentAmount() != null && studentPaymentOrder.getBalancePaymentAmount().compareTo(BigDecimal.ZERO) > 0) {
@@ -747,8 +746,15 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
         Map<String, BigDecimal> costMap = new HashMap<>(2);
         List<SellOrder> sellOrders = new ArrayList<>();
         BigDecimal balancePaymentAmount = orderByOrderNo.getBalancePaymentAmount();
-
-        for (Integer e : goodsId) {
+        //可用余额
+        BigDecimal usableBalance = balancePaymentAmount;
+        BigDecimal marketAmount = studentGoodsSell.getMarketAmount();
+        //可用减免金额
+        BigDecimal usableMarketAmount = marketAmount;
+
+        BigDecimal totalAmount = goodsSellDtos.stream().map(e -> e.getTotalGoodsPrice()).reduce(BigDecimal.ZERO, BigDecimal::add);
+        for (int i = 0; i < goodsId.size(); i++) {
+            Integer e = goodsId.get(i);
             GoodsSellDto goodsSellDto = collect.get(e).get(0);
             Goods goods = goodsMap.get(e).get(0);
 
@@ -761,22 +767,38 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
             sellOrder.setTransNo(orderByOrderNo.getTransNo());
             sellOrder.setOrderId(orderByOrderNo.getId());
             sellOrder.setOrderNo(orderByOrderNo.getOrderNo());
+            //如果没有减免金额
+            if(marketAmount.doubleValue() > 0l){
+                //如果是最后一件商品
+                if(i == goodsId.size() - 1){
+                    goodsSellDto.setTotalGoodsPrice(goodsSellDto.getTotalGoodsPrice().subtract(usableMarketAmount));
+                    totalAmount = totalAmount.subtract(usableMarketAmount);
+                }else {
+                    //获取分配的减免金额
+                    BigDecimal multiply = usableMarketAmount.multiply(goodsSellDto.getTotalGoodsPrice().divide(totalAmount, 2, BigDecimal.ROUND_HALF_UP));
+                    totalAmount = totalAmount.subtract(multiply);
+                    goodsSellDto.setTotalGoodsPrice(goodsSellDto.getTotalGoodsPrice().subtract(multiply));
+                    usableMarketAmount = usableMarketAmount.subtract(multiply);
+                }
+            }
+
             sellOrder.setExpectAmount(goodsSellDto.getTotalGoodsPrice());
             //如果没有使用余额,那么实际金额和预计金额一致
             if(balancePaymentAmount.doubleValue() == 0l){
                 sellOrder.setActualAmount(goodsSellDto.getTotalGoodsPrice());
                 sellOrder.setBalanceAmount(BigDecimal.ZERO);
             }else {
-                //余额大于等于商品总价
-                if(balancePaymentAmount.compareTo(goodsSellDto.getTotalGoodsPrice()) >= 1){
-                    sellOrder.setActualAmount(BigDecimal.ZERO);
-                    sellOrder.setBalanceAmount(goodsSellDto.getTotalGoodsPrice());
-                    balancePaymentAmount = balancePaymentAmount.subtract(goodsSellDto.getTotalGoodsPrice());
+                //如果是最后一件商品
+                if(i == goodsId.size() - 1){
+                    sellOrder.setActualAmount(goodsSellDto.getTotalGoodsPrice().subtract(usableBalance));
+                    sellOrder.setBalanceAmount(usableBalance);
                 }else {
-                    //余额小于商品总价
-                    sellOrder.setActualAmount(goodsSellDto.getTotalGoodsPrice().subtract(balancePaymentAmount));
-                    sellOrder.setBalanceAmount(balancePaymentAmount);
-                    balancePaymentAmount = BigDecimal.ZERO;
+                    //获取分配的余额
+                    BigDecimal multiply = balancePaymentAmount.multiply(goodsSellDto.getTotalGoodsPrice().divide(totalAmount, 2, BigDecimal.ROUND_HALF_UP));
+                    //余额大于等于商品总价
+                    sellOrder.setActualAmount(goodsSellDto.getTotalGoodsPrice().subtract(multiply));
+                    sellOrder.setBalanceAmount(multiply);
+                    usableBalance = usableBalance.subtract(multiply);
                 }
             }
             sellOrder.setSellCost(goods.getDiscountPrice());

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

@@ -206,13 +206,11 @@
             course_schedule_student_payment cssp
             LEFT JOIN sys_user su ON cssp.user_id_ = su.id_
             LEFT JOIN student_attendance sa ON cssp.course_schedule_id_ = sa.course_schedule_id_ AND cssp.user_id_ = sa.user_id_
-            LEFT JOIN class_group_student_mapper cgsm ON cssp.user_id_=cgsm.user_id_ AND cssp.class_group_id_=cgsm.class_group_id_
             LEFT JOIN student_registration sr ON sr.user_id_=cssp.user_id_ AND cssp.music_group_id_=sr.music_group_id_
             LEFT JOIN `subject` s ON sr.subject_id_=s.id_
         WHERE
             cssp.course_schedule_id_ =#{courseScheduleId}
             AND su.id_ IS NOT NULL
-            AND cgsm.status_!='QUIT' AND cgsm.status_!='QUIT_SCHOOL'
         ORDER BY cssp.user_id_
         <include refid="global.limit"/>
     </select>
@@ -224,11 +222,9 @@
             course_schedule_student_payment cssp
             LEFT JOIN sys_user su ON cssp.user_id_ = su.id_
             LEFT JOIN student_attendance sa ON cssp.course_schedule_id_ = sa.course_schedule_id_ AND cssp.user_id_ = sa.user_id_
-            LEFT JOIN class_group_student_mapper cgsm ON cssp.user_id_=cgsm.user_id_ AND cssp.class_group_id_=cgsm.class_group_id_
         WHERE
             cssp.course_schedule_id_ =#{courseScheduleId}
             AND su.id_ IS NOT NULL
-            AND cgsm.status_!='QUIT' AND cgsm.status_!='QUIT_SCHOOL'
     </select>
 
     <update id="deleteStudentByMusicGroupId" parameterType="map">