Browse Source

Merge remote-tracking branch 'origin/online1' into online1

Joburgess 4 years ago
parent
commit
9babf07012
19 changed files with 688 additions and 49 deletions
  1. 2 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentPaymentOrderDetailDao.java
  2. 21 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/RouteScaleDto.java
  3. 14 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/SysPaymentConfig.java
  4. 27 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/FeeTypeEnum.java
  5. 45 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/SysPaymentConfigQueryInfo.java
  6. 9 0
      mec-biz/src/main/java/com/ym/mec/biz/service/SellOrderService.java
  7. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/StudentPaymentOrderDetailService.java
  8. 5 15
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java
  9. 16 3
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java
  10. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupSubjectPlanServiceImpl.java
  11. 138 3
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/PayServiceImpl.java
  12. 87 4
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SellOrderServiceImpl.java
  13. 2 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentOrderDetailServiceImpl.java
  14. 2 1
      mec-biz/src/main/resources/config/mybatis/StudentPaymentOrderDetailMapper.xml
  15. 13 13
      mec-biz/src/main/resources/config/mybatis/StudentPaymentRouteOrderMapper.xml
  16. 34 3
      mec-biz/src/main/resources/config/mybatis/SysPaymentConfigMapper.xml
  17. 177 0
      mec-thirdparty/src/main/java/com/ym/mec/thirdparty/eseal/provider/BytedancePlugin.java
  18. 24 0
      mec-util/src/main/java/com/ym/mec/util/sort/SortUtil.java
  19. 70 2
      mec-web/src/main/java/com/ym/mec/web/controller/SysPaymentConfigController.java

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

@@ -45,7 +45,7 @@ public interface StudentPaymentOrderDetailDao extends BaseDAO<Long, StudentPayme
      * @param status
      * @return
      */
-    List<StudentPaymentOrderDetail> findUserApplyOrder(@Param("userId") Integer userId, @Param("status") DealStatusEnum status);
+    List<StudentPaymentOrderDetail> findUserApplyOrder(@Param("userId") Integer userId, @Param("musicGroupId") String musicGroupId, @Param("status") DealStatusEnum status);
 
     /**
      * 乐器采购清单明细
@@ -113,6 +113,7 @@ public interface StudentPaymentOrderDetailDao extends BaseDAO<Long, StudentPayme
 
     /**
      * 获取订单的商品
+     *
      * @param orderIds
      * @return
      */

+ 21 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/RouteScaleDto.java

@@ -1,5 +1,6 @@
 package com.ym.mec.biz.dal.dto;
 
+import com.ym.mec.biz.dal.enums.FeeTypeEnum;
 import com.ym.mec.biz.dal.enums.PaymentChannelEnum;
 
 import java.math.BigDecimal;
@@ -18,6 +19,10 @@ public class RouteScaleDto {
 
     private String feeFlag;
 
+    private FeeTypeEnum feeType;
+
+    private BigDecimal balance = BigDecimal.ZERO;
+
     public Integer getOrganId() {
         return organId;
     }
@@ -66,4 +71,20 @@ public class RouteScaleDto {
     public void setPayType(PaymentChannelEnum payType) {
         this.payType = payType;
     }
+
+    public FeeTypeEnum getFeeType() {
+        return feeType;
+    }
+
+    public void setFeeType(FeeTypeEnum feeType) {
+        this.feeType = feeType;
+    }
+
+    public BigDecimal getBalance() {
+        return balance;
+    }
+
+    public void setBalance(BigDecimal balance) {
+        this.balance = balance;
+    }
 }

+ 14 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/SysPaymentConfig.java

@@ -44,6 +44,12 @@ public class SysPaymentConfig {
     private String routeScale;
 
     /**
+     * 根据费用分配规则
+     */
+    @ApiModelProperty(value = "根据费用分配规则")
+    private String typeRouteScale;
+
+    /**
      * 分部id
      */
     @ApiModelProperty(value = "分部id")
@@ -247,5 +253,13 @@ public class SysPaymentConfig {
     public void setAccountType(AccountType accountType) {
         this.accountType = accountType;
     }
+
+    public String getTypeRouteScale() {
+        return typeRouteScale;
+    }
+
+    public void setTypeRouteScale(String typeRouteScale) {
+        this.typeRouteScale = typeRouteScale;
+    }
 }
 

+ 27 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/FeeTypeEnum.java

@@ -0,0 +1,27 @@
+package com.ym.mec.biz.dal.enums;
+
+import com.ym.mec.common.enums.BaseEnum;
+
+public enum FeeTypeEnum implements BaseEnum<String, FeeTypeEnum> {
+    SERVICE("SERVICE", "服务"),
+    SELL("SELL", "销售");
+
+    private String code;
+
+    private String desc;
+
+    private FeeTypeEnum(String code, String desc) {
+        this.code = code;
+        this.desc = desc;
+    }
+
+    @Override
+    public String getCode() {
+        return code;
+    }
+
+    public String getDesc() {
+        return desc;
+    }
+
+}

+ 45 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/SysPaymentConfigQueryInfo.java

@@ -0,0 +1,45 @@
+package com.ym.mec.biz.dal.page;
+
+import com.ym.mec.common.page.QueryInfo;
+import io.swagger.annotations.ApiModelProperty;
+
+public class SysPaymentConfigQueryInfo extends QueryInfo {
+
+    /**
+     * 分部id
+     */
+    @ApiModelProperty(value = "分部id", required = true)
+    private Integer organId;
+
+    /**
+     * 是否设置按费用类型分润
+     */
+    @ApiModelProperty(value = "是否设置按费用类型分润 1-是 0 -否", required = true)
+    private Integer hasTypeRoute;
+
+    private Integer hasRouteScale;
+
+    public Integer getOrganId() {
+        return organId;
+    }
+
+    public void setOrganId(Integer organId) {
+        this.organId = organId;
+    }
+
+    public Integer getHasTypeRoute() {
+        return hasTypeRoute;
+    }
+
+    public void setHasTypeRoute(Integer hasTypeRoute) {
+        this.hasTypeRoute = hasTypeRoute;
+    }
+
+    public Integer getHasRouteScale() {
+        return hasRouteScale;
+    }
+
+    public void setHasRouteScale(Integer hasRouteScale) {
+        this.hasRouteScale = hasRouteScale;
+    }
+}

+ 9 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/SellOrderService.java

@@ -9,6 +9,7 @@ import com.ym.mec.common.service.BaseService;
 
 import java.math.BigDecimal;
 import java.util.List;
+import java.util.Map;
 
 
 public interface SellOrderService extends BaseService<Integer, SellOrder> {
@@ -69,4 +70,12 @@ public interface SellOrderService extends BaseService<Integer, SellOrder> {
      */
     List<SellOrder> getRefundSellOrder(Long orderId);
 
+
+    /**
+     * 获取订单的实际销售金额(除去余额部分)
+     * @param orderNo
+     * @return
+     */
+    Map<String,BigDecimal> getSellAmount(String orderNo);
+
 }

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

@@ -55,7 +55,7 @@ public interface StudentPaymentOrderDetailService extends BaseService<Long, Stud
      * @param status
      * @return
      */
-    List<StudentPaymentOrderDetail>findUserApplyOrder(Integer userId,DealStatusEnum status);
+    List<StudentPaymentOrderDetail>findUserApplyOrder(Integer userId,String musicGroupId,DealStatusEnum status);
 
     /**
      * 乐器采购清单明细

+ 5 - 15
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java

@@ -29,6 +29,7 @@ import java.util.TreeSet;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
+import com.ym.mec.biz.dal.enums.*;
 import org.apache.commons.collections.ListUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
@@ -120,20 +121,6 @@ import com.ym.mec.biz.dal.entity.TeacherDefaultMusicGroupSalary;
 import com.ym.mec.biz.dal.entity.TeacherDefaultPracticeGroupSalary;
 import com.ym.mec.biz.dal.entity.TeacherDefaultVipGroupSalary;
 import com.ym.mec.biz.dal.entity.VipGroup;
-import com.ym.mec.biz.dal.enums.AuditStatusEnum;
-import com.ym.mec.biz.dal.enums.ClassGroupStudentStatusEnum;
-import com.ym.mec.biz.dal.enums.ClassGroupTypeEnum;
-import com.ym.mec.biz.dal.enums.CourseStatusEnum;
-import com.ym.mec.biz.dal.enums.GroupType;
-import com.ym.mec.biz.dal.enums.MessageTypeEnum;
-import com.ym.mec.biz.dal.enums.MusicGroupStatusEnum;
-import com.ym.mec.biz.dal.enums.ParamEnum;
-import com.ym.mec.biz.dal.enums.SalarySettlementTypeEnum;
-import com.ym.mec.biz.dal.enums.StudentAttendanceStatusEnum;
-import com.ym.mec.biz.dal.enums.TeachModeEnum;
-import com.ym.mec.biz.dal.enums.TeachTypeEnum;
-import com.ym.mec.biz.dal.enums.VipGroupStatusEnum;
-import com.ym.mec.biz.dal.enums.YesOrNoEnum;
 import com.ym.mec.biz.dal.page.CourseScheduleQueryInfo;
 import com.ym.mec.biz.dal.page.EndCourseScheduleQueryInfo;
 import com.ym.mec.biz.dal.page.StudentCourseScheduleRecordQueryInfo;
@@ -522,6 +509,9 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 			if(Objects.isNull(practiceGroup)){
 				throw new BizException("找不到网管课信息");
 			}
+			if(!GroupStatusEnum.NORMAL.equals(practiceGroup.getGroupStatus())){
+				throw new BizException("非进行中网管课不支持加课");
+			}
 			organId=practiceGroup.getOrganId();
 
 			List<TeacherDefaultPracticeGroupSalary> teacherDefaultPracticeGroupSalaryList = teacherDefaultPracticeGroupSalaryDao
@@ -1220,7 +1210,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 //                String[] studentNames = classGroupStudentMapperDao.findCourseStudentName(courseScheduleDto.getId().intValue());
                 List<StudentNameAndPhoneDto> courseStudentNameAndPhone = classGroupStudentMapperDao.findCourseStudentNameAndPhone(courseScheduleDto.getId().intValue());
                 if(!CollectionUtils.isEmpty(courseStudentNameAndPhone)){
-                    List<String> studentNames = courseStudentNameAndPhone.stream().map(StudentNameAndPhoneDto::getUserName).collect(Collectors.toList());
+                    List<String> studentNames = courseStudentNameAndPhone.stream().filter(s->Objects.nonNull(s)&&Objects.nonNull(s.getUserName())).map(StudentNameAndPhoneDto::getUserName).collect(Collectors.toList());
                     courseScheduleDto.setStudentNames(org.apache.commons.lang3.StringUtils.join(studentNames, ","));
                     courseScheduleDto.setStudents(courseStudentNameAndPhone);
                 }

+ 16 - 3
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java

@@ -448,7 +448,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         //乐器及打包辅件
         List<MusicGroupSubjectGoodsGroup> goodsGroups = new ArrayList<>();
         if (studentRegistration.getTemporaryCourseFee() != null) {
-            List<StudentPaymentOrderDetail> orderDetails = studentPaymentOrderDetailService.findUserApplyOrder(studentRegistration.getUserId(), DealStatusEnum.WAIT_PAY);
+            List<StudentPaymentOrderDetail> orderDetails = studentPaymentOrderDetailService.findUserApplyOrder(studentRegistration.getUserId(),studentRegistration.getMusicGroupId(), DealStatusEnum.WAIT_PAY);
             for (StudentPaymentOrderDetail orderDetail : orderDetails) {
                 if (orderDetail == null || orderDetail.getPrice() == null || orderDetail.getGoodsIdList() == null) {
                     continue;
@@ -654,7 +654,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         //乐器及打包辅件
         List<MusicGroupSubjectGoodsGroup> goodsGroups = new ArrayList<>();
         if (studentRegistration.getTemporaryCourseFee() != null) {
-            List<StudentPaymentOrderDetail> orderDetails = studentPaymentOrderDetailService.findUserApplyOrder(studentRegistration.getUserId(), DealStatusEnum.WAIT_PAY);
+            List<StudentPaymentOrderDetail> orderDetails = studentPaymentOrderDetailService.findUserApplyOrder(studentRegistration.getUserId(),studentRegistration.getMusicGroupId(), DealStatusEnum.WAIT_PAY);
             for (StudentPaymentOrderDetail orderDetail : orderDetails) {
                 if (orderDetail == null || orderDetail.getPrice() == null || orderDetail.getGoodsIdList() == null) {
                     continue;
@@ -1510,6 +1510,14 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
                     }
                 }
             }
+            
+            MusicGroupSubjectPlan musicGroupSubjectPlan = musicGroupSubjectPlanDao.getMusicOneSubjectClassPlan(musicGroupId, studentRegistration.getActualSubjectId());
+            if(musicGroupSubjectPlan != null){
+            	musicGroupSubjectPlan.setPaidStudentNum(musicGroupSubjectPlan.getPaidStudentNum() - 1);
+            	musicGroupSubjectPlan.setUpdateTime(date);
+            	musicGroupSubjectPlanDao.update(musicGroupSubjectPlan);
+            }
+            
             if (amount.doubleValue() > 0) {
                 // 增加交易流水
                 sysUserCashAccountDetailService.addCashAccountDetail(userId, amount, SysUserCashAccountDetailService.MUSIC_GROUP + musicGroupId, "",
@@ -1572,7 +1580,12 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         BigDecimal amount = new BigDecimal(0);
 
         // 判断乐器是否是租赁
-        // MusicGroupSubjectPlan musicGroupSubjectPlan = musicGroupSubjectPlanDao.getMusicOneSubjectClassPlan(musicGroupId, subjectId);
+        MusicGroupSubjectPlan musicGroupSubjectPlan = musicGroupSubjectPlanDao.getMusicOneSubjectClassPlan(musicGroupId, studentRegistration.getActualSubjectId());
+        if(musicGroupSubjectPlan != null){
+        	musicGroupSubjectPlan.setPaidStudentNum(musicGroupSubjectPlan.getPaidStudentNum() - 1);
+        	musicGroupSubjectPlan.setUpdateTime(date);
+        	musicGroupSubjectPlanDao.update(musicGroupSubjectPlan);
+        }
 
         StudentPaymentOrder studentPaymentOrder = studentPaymentOrderService.findMusicGroupApplyOrderByStatus(userId, musicGroupId, DealStatusEnum.SUCCESS);
 

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

@@ -175,7 +175,7 @@ public class MusicGroupSubjectPlanServiceImpl extends BaseServiceImpl<Integer, M
         //乐团乐器及辅件信息
         List<MusicGroupSubjectGoodsGroup> goodsGroups = new ArrayList<>();
 
-        List<StudentPaymentOrderDetail> orderDetails = studentPaymentOrderDetailDao.findUserApplyOrder(studentRegistration.getUserId(), DealStatusEnum.WAIT_PAY);
+        List<StudentPaymentOrderDetail> orderDetails = studentPaymentOrderDetailDao.findUserApplyOrder(studentRegistration.getUserId(),musicGroupId, DealStatusEnum.WAIT_PAY);
         for (StudentPaymentOrderDetail orderDetail : orderDetails) {
             if (orderDetail == null || orderDetail.getGoodsIdList() == null || orderDetail.getGoodsIdList().isEmpty())
                 continue;

+ 138 - 3
mec-biz/src/main/java/com/ym/mec/biz/service/impl/PayServiceImpl.java

@@ -6,9 +6,11 @@ import com.ym.mec.biz.dal.dao.StudentPaymentRouteOrderDao;
 import com.ym.mec.biz.dal.dao.SysConfigDao;
 import com.ym.mec.biz.dal.dto.AmountChannelDto;
 import com.ym.mec.biz.dal.dto.RouteScaleDto;
+import com.ym.mec.biz.dal.entity.Group;
 import com.ym.mec.biz.dal.entity.StudentPaymentRouteOrder;
 import com.ym.mec.biz.dal.entity.SysAccount;
 import com.ym.mec.biz.dal.entity.SysPaymentConfig;
+import com.ym.mec.biz.dal.enums.FeeTypeEnum;
 import com.ym.mec.biz.dal.enums.PaymentChannelEnum;
 import com.ym.mec.biz.dal.enums.PaymentChannelTypeEnum;
 import com.ym.mec.biz.service.*;
@@ -41,6 +43,8 @@ public class PayServiceImpl implements PayService {
     private SysPaymentConfigService sysPaymentConfigService;
     @Autowired
     private StudentPaymentRouteOrderDao studentPaymentRouteOrderDao;
+    @Autowired
+    private SellOrderService sellOrderService;
 
     @Override
     public Map<String, Object> getPayMap(BigDecimal amount, BigDecimal balanceAmount, String orderNo, String notifyUrl, String returnUrl, String orderSubject, String orderBody, Integer organId, String receiver) throws Exception {
@@ -51,6 +55,11 @@ public class PayServiceImpl implements PayService {
             routeScaleDtos = noUsePaymentConfig(amount);
         }
 
+        //根据费用类型
+        if (routeScaleDtos == null) {
+            routeScaleDtos = getTypeRouteChannel(organId, orderNo, amount, balanceAmount);
+        }
+
         //根据金额获取分润
         if (routeScaleDtos == null) {
             routeScaleDtos = getAmountChannel(organId, amount, receiver);
@@ -305,9 +314,20 @@ public class PayServiceImpl implements PayService {
             if (routeScaleDto.getPayType().equals(PaymentChannelEnum.YQPAY)) {
                 routingAmount = yqAmount;
             }
-            BigDecimal routingFee = routingAmount.multiply(new BigDecimal(routeScaleDto.getScale())).divide(new BigDecimal(100), 2, BigDecimal.ROUND_HALF_UP);
-            BigDecimal routeBalanceAmount = balanceAmount.multiply(new BigDecimal(routeScaleDto.getScale())).divide(new BigDecimal(100), 2, BigDecimal.ROUND_HALF_UP);
-            BigDecimal routingMoney = amount.multiply(new BigDecimal(routeScaleDto.getScale())).divide(new BigDecimal(100), 2, BigDecimal.ROUND_HALF_UP);
+
+            BigDecimal routingFee = null;
+            BigDecimal routeBalanceAmount = null;
+            BigDecimal routingMoney = null;
+
+            if (routeScaleDto.getFeeType() == null) {
+                routingFee = routingAmount.multiply(new BigDecimal(routeScaleDto.getScale())).divide(new BigDecimal(100), 2, BigDecimal.ROUND_HALF_UP);
+                routeBalanceAmount = balanceAmount.multiply(new BigDecimal(routeScaleDto.getScale())).divide(new BigDecimal(100), 2, BigDecimal.ROUND_HALF_UP);
+                routingMoney = amount.multiply(new BigDecimal(routeScaleDto.getScale())).divide(new BigDecimal(100), 2, BigDecimal.ROUND_HALF_UP);
+            } else {
+                routingFee = routeScaleDto.getAmount();
+                routeBalanceAmount = routeScaleDto.getBalance();
+                routingMoney = routeScaleDto.getAmount();
+            }
             if (i == routeScaleDtos.size()) {
                 routingFee = routingAmount.subtract(hasRouteAmount).setScale(2, BigDecimal.ROUND_HALF_UP);
                 routeBalanceAmount = balanceAmount.subtract(hasRouteBalanceAmount).setScale(2, BigDecimal.ROUND_HALF_UP);
@@ -364,4 +384,119 @@ public class PayServiceImpl implements PayService {
         return unionPay;
     }
 
+    /**
+     * @param organId
+     * @param orderNo
+     * @param amount
+     * @return
+     */
+    private List<RouteScaleDto> getTypeRouteChannel(Integer organId, String orderNo, BigDecimal amount, BigDecimal balanceAmount) {
+        SysPaymentConfig paymentConfig = sysPaymentConfigService.findPaymentConfigByOrganId(organId);
+        if (paymentConfig == null || StringUtils.isBlank(paymentConfig.getTypeRouteScale())) {
+            return null;
+        }
+
+        Map<String, BigDecimal> sellAmount = sellOrderService.getSellAmount(orderNo);
+        if (sellAmount == null) {
+            return null;
+        }
+
+        String typeRouteScale = paymentConfig.getTypeRouteScale();
+        List<RouteScaleDto> routeScaleDtos = JSON.parseArray(typeRouteScale, RouteScaleDto.class);
+        List<Integer> organIds = routeScaleDtos.stream().map(RouteScaleDto::getOrganId).collect(Collectors.toList());
+        List<SysPaymentConfig> paymentConfigByOrganIds = sysPaymentConfigService.findPaymentConfigByOrganIds(organIds);
+
+        long serviceCount = routeScaleDtos.stream().filter(e -> e.getFeeType().equals(FeeTypeEnum.SERVICE)).count();
+        long sellCount = routeScaleDtos.stream().filter(e -> e.getFeeType().equals(FeeTypeEnum.SELL)).count();
+
+        BigDecimal routeAmount = sellAmount.get("actualAmount");
+        BigDecimal routeBalance = sellAmount.get("balance");
+
+        BigDecimal serviceHasRouteMoney = BigDecimal.ZERO;
+        BigDecimal serviceHasRouteBalance = BigDecimal.ZERO;
+        BigDecimal sellHasRouteMoney = BigDecimal.ZERO;
+        BigDecimal sellHasRouteBalance = BigDecimal.ZERO;
+
+        Iterator<RouteScaleDto> iterator = routeScaleDtos.iterator();
+        while (iterator.hasNext()) {
+            RouteScaleDto routeScaleDto = iterator.next();
+            routeScaleDto.setPayType(paymentConfig.getPayType());
+            if (routeScaleDto.getFeeType().equals(FeeTypeEnum.SERVICE)) {
+                routeAmount = amount.subtract(sellAmount.get("actualAmount"));
+                routeBalance = balanceAmount.subtract(sellAmount.get("balance"));
+                serviceCount--;
+            } else {
+                routeAmount = sellAmount.get("actualAmount");
+                routeBalance = sellAmount.get("balance");
+                sellCount--;
+            }
+
+            BigDecimal routingMoney = routeAmount.multiply(new BigDecimal(routeScaleDto.getScale())).divide(new BigDecimal(100), 2, BigDecimal.ROUND_DOWN);
+            BigDecimal routingBalance = routeBalance.multiply(new BigDecimal(routeScaleDto.getScale())).divide(new BigDecimal(100), 2, BigDecimal.ROUND_DOWN);
+
+            if (routeScaleDto.getFeeType().equals(FeeTypeEnum.SERVICE) && serviceCount == 0) {
+                routingMoney = routeAmount.subtract(serviceHasRouteMoney);
+                routingBalance = routeBalance.subtract(serviceHasRouteBalance);
+            } else if (routeScaleDto.getFeeType().equals(FeeTypeEnum.SELL) && sellCount == 0) {
+                routingMoney = routeAmount.subtract(sellHasRouteMoney);
+                routingBalance = routeBalance.subtract(sellHasRouteBalance);
+            }
+            routeScaleDto.setAmount(routingMoney);
+            routeScaleDto.setBalance(routingBalance);
+
+            if (routeScaleDto.getFeeType().equals(FeeTypeEnum.SERVICE)) {
+                serviceHasRouteMoney = serviceHasRouteMoney.add(routingMoney);
+                serviceHasRouteBalance = serviceHasRouteBalance.add(routingBalance);
+            } else {
+                sellHasRouteMoney = sellHasRouteMoney.add(routingMoney);
+                sellHasRouteBalance = sellHasRouteBalance.add(routingBalance);
+            }
+
+            if (routeScaleDto.getAmount().compareTo(BigDecimal.ZERO) <= 0) {
+                iterator.remove();
+                continue;
+            }
+
+            for (SysPaymentConfig paymentConfigByOrganId : paymentConfigByOrganIds) {
+                if (!paymentConfigByOrganId.getOrganId().equals(routeScaleDto.getOrganId())) continue;
+                if (paymentConfig.getPayType().equals(PaymentChannelEnum.YQPAY)) {
+                    routeScaleDto.setMerNo(paymentConfigByOrganId.getYqMerNo());
+                } else {
+                    routeScaleDto.setMerNo(paymentConfigByOrganId.getHfMerNo());
+                }
+            }
+        }
+        Map<String, List<RouteScaleDto>> routeScaleDtosMap = routeScaleDtos.stream().collect(Collectors.groupingBy(RouteScaleDto::getMerNo));
+
+        //合并同账号的数据
+        BigDecimal maxAmount = BigDecimal.ZERO;
+        List<RouteScaleDto> newRouteScaleDtos = new ArrayList<>();
+        for (Map.Entry<String, List<RouteScaleDto>> groupRouteScaleDtos : routeScaleDtosMap.entrySet()) {
+            RouteScaleDto routeScaleDto = null;
+            for (RouteScaleDto scaleDto : groupRouteScaleDtos.getValue()) {
+                if(routeScaleDto == null){
+                    routeScaleDto = scaleDto;
+                }else {
+                    routeScaleDto.setAmount(routeScaleDto.getAmount().add(scaleDto.getAmount()));
+                    routeScaleDto.setBalance(routeScaleDto.getBalance().add(scaleDto.getBalance()));
+                }
+            }
+            if (routeScaleDto != null && routeScaleDto.getAmount().compareTo(maxAmount) > 0) {
+                maxAmount = routeScaleDto.getAmount();
+            }
+            newRouteScaleDtos.add(routeScaleDto);
+        }
+
+        //金额最大的账号承担手续费
+        boolean hasFeeFlag = false;
+        for (RouteScaleDto routeScaleDto : newRouteScaleDtos) {
+            if (!hasFeeFlag && routeScaleDto.getAmount().compareTo(maxAmount) == 0) {
+                routeScaleDto.setFeeFlag("Y");
+                hasFeeFlag = true;
+            } else {
+                routeScaleDto.setFeeFlag("N");
+            }
+        }
+        return newRouteScaleDtos;
+    }
 }

+ 87 - 4
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SellOrderServiceImpl.java

@@ -1,10 +1,8 @@
 package com.ym.mec.biz.service.impl;
 
 
-import com.ym.mec.biz.dal.dao.GoodsDao;
-import com.ym.mec.biz.dal.dao.MusicGroupDao;
-import com.ym.mec.biz.dal.dao.SellOrderDao;
-import com.ym.mec.biz.dal.dao.StudentPaymentOrderDao;
+import com.alibaba.fastjson.JSONObject;
+import com.ym.mec.biz.dal.dao.*;
 import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.enums.*;
 import com.ym.mec.biz.service.*;
@@ -35,6 +33,12 @@ public class SellOrderServiceImpl extends BaseServiceImpl<Integer, SellOrder> im
     private SysUserCashAccountService sysUserCashAccountService;
     @Autowired
     private GoodsService goodsService;
+    @Autowired
+    private StudentPaymentOrderDetailDao studentPaymentOrderDetailDao;
+    @Autowired
+    private SporadicChargeInfoDao sporadicChargeInfoDao;
+    @Autowired
+    private StudentRepairDao studentRepairDao;
 
     @Override
     public BaseDAO<Integer, SellOrder> getDAO() {
@@ -335,4 +339,83 @@ public class SellOrderServiceImpl extends BaseServiceImpl<Integer, SellOrder> im
         return sellOrderDao.getRefundSellOrder(orderId);
     }
 
+    @Override
+    public Map<String, BigDecimal> getSellAmount(String orderNo) {
+        StudentPaymentOrder order = studentPaymentOrderDao.findOrderByOrderNo(orderNo);
+        if (order == null) {
+            return null;
+        }
+
+        //零星支付除了充值其他都是服务费用
+        if (order.getType().equals(OrderTypeEnum.SPORADIC)) {
+            SporadicChargeInfo info = sporadicChargeInfoDao.get(Integer.parseInt(order.getMusicGroupId()));
+            if (info.getChargeType().equals(SporadicChargeTypeEnum.RECHARGE)) {
+                return null;
+            }
+        }
+        Map<String, BigDecimal> sellAmount = new HashMap<>();
+        //乐器销售,声部更改
+        if (order.getType().equals(OrderTypeEnum.GOODS_SELL) || order.getType().equals(OrderTypeEnum.SUBJECT_CHANGE)) {
+            sellAmount.put("actualAmount", order.getActualAmount());
+            sellAmount.put("balance", order.getBalancePaymentAmount() == null ? BigDecimal.ZERO : order.getBalancePaymentAmount());
+            return sellAmount;
+        }
+
+        //乐器维修
+        if (order.getType().equals(OrderTypeEnum.REPAIR)) {
+            StudentRepair repairInfo = studentRepairDao.getRepairInfo(Integer.parseInt(order.getMusicGroupId()));
+
+            if (StringUtils.isBlank(repairInfo.getGoodsJson())) {
+                sellAmount.put("actualAmount", BigDecimal.ZERO);
+                sellAmount.put("balance", BigDecimal.ZERO);
+                return sellAmount;
+            }
+            List<Goods> goodies = JSONObject.parseArray(repairInfo.getGoodsJson(), Goods.class);
+            List<Integer> goodsIds = goodies.stream().map(Goods::getId).collect(Collectors.toList());
+            if (goodsIds.size() <= 0) {
+                sellAmount.put("actualAmount", BigDecimal.ZERO);
+                sellAmount.put("balance", BigDecimal.ZERO);
+                return sellAmount;
+            }
+
+            BigDecimal goodsTotalPrice = BigDecimal.ZERO;
+            goodies = goodsDao.getGoodies(goodsIds);
+            int i = 1;
+            for (Integer goodsId : goodsIds) {
+                for (Goods goods : goodies) {
+                    if (goods.getId().equals(goodsId)) {
+                        goodsTotalPrice = goodsTotalPrice.add(goods.getDiscountPrice());
+                        break;
+                    }
+                }
+            }
+            BigDecimal balance = order.getBalancePaymentAmount() == null ? BigDecimal.ZERO : order.getBalancePaymentAmount();
+            BigDecimal goodsTotalBalance = goodsTotalPrice.multiply(balance).divide(order.getExpectAmount(), 2, BigDecimal.ROUND_HALF_UP);
+            sellAmount.put("actualAmount", goodsTotalPrice.subtract(goodsTotalBalance));
+            sellAmount.put("balance", goodsTotalBalance);
+            return sellAmount;
+        }
+
+        //乐团报名
+        if (order.getType().equals(OrderTypeEnum.APPLY)) {
+            List<StudentPaymentOrderDetail> orderDetails = studentPaymentOrderDetailDao.getOrderDetail(order.getId());
+            //总余额支付
+            BigDecimal totalBalance = order.getBalancePaymentAmount() != null ? order.getBalancePaymentAmount() : BigDecimal.ZERO;
+            //总价格
+            BigDecimal totalPrice = order.getExpectAmount();
+            //商品总付款
+            BigDecimal detailTotalPrice = orderDetails.stream().map(StudentPaymentOrderDetail::getPrice).reduce(BigDecimal.ZERO, BigDecimal::add);
+            //商品销售占的余额
+            BigDecimal detailTotalBalance = detailTotalPrice.multiply(totalBalance).divide(totalPrice, 2, BigDecimal.ROUND_HALF_UP);
+
+            sellAmount.put("actualAmount", detailTotalPrice.subtract(detailTotalBalance));
+            sellAmount.put("balance", detailTotalBalance);
+            return sellAmount;
+        }
+
+        sellAmount.put("actualAmount", BigDecimal.ZERO);
+        sellAmount.put("balance", BigDecimal.ZERO);
+        return sellAmount;
+    }
+
 }

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

@@ -231,8 +231,8 @@ public class StudentPaymentOrderDetailServiceImpl extends BaseServiceImpl<Long,
     }
 
     @Override
-    public List<StudentPaymentOrderDetail> findUserApplyOrder(Integer userId, DealStatusEnum status) {
-        return studentPaymentOrderDetailDao.findUserApplyOrder(userId, status);
+    public List<StudentPaymentOrderDetail> findUserApplyOrder(Integer userId, String musicGroupId, DealStatusEnum status) {
+        return studentPaymentOrderDetailDao.findUserApplyOrder(userId, musicGroupId, status);
     }
 
     @Override

+ 2 - 1
mec-biz/src/main/resources/config/mybatis/StudentPaymentOrderDetailMapper.xml

@@ -138,6 +138,7 @@
         FROM student_payment_order spo
                  LEFT JOIN student_payment_order_detail spod ON spo.id_ = spod.payment_order_id_
         WHERE spo.user_id_ = #{userId}
+          AND spo.music_group_id_ = #{musicGroupId}
           AND spo.status_ = #{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
           AND spo.type_ = 'APPLY'
     </select>
@@ -242,7 +243,7 @@
 
     <select id="getOrderGoodies" resultMap="StudentPaymentOrderDetail">
         SELECT spod.*,
-        g.id_   goods_id_,
+        g.id_ goods_id_,
         g.name_ goods_name_,
         g.group_purchase_price_,
         g.discount_price_,

+ 13 - 13
mec-biz/src/main/resources/config/mybatis/StudentPaymentRouteOrderMapper.xml

@@ -188,7 +188,7 @@
         SELECT SUM(route_amount_)
         FROM student_payment_order spo
         LEFT JOIN student_payment_route_order spro ON spo.order_no_ = spro.order_no_
-        WHERE spro.route_organ_id_ = #{routeOrganId} AND spo.payment_channel_ IN
+        WHERE spro.route_organ_id_ = #{routeOrganId} AND spo.status_ IN ('SUCCESS','ING') AND spo.payment_channel_ IN
         <foreach collection="paymentChannelEnumList" item="paymentChannel" open="(" close=")" separator=",">
             #{paymentChannel,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
         </foreach>
@@ -226,19 +226,19 @@
             keyColumn="id" keyProperty="id">
         INSERT INTO student_payment_order
         (id_, group_type_, user_id_, organ_id_, routing_organ_id_, type_, expect_amount_, actual_amount_, com_amount_,
-        per_amount_,
-        balance_payment_amount_, remit_fee_, course_remit_fee_, trans_no_,
-        status_, memo_, create_time_, update_time_, payment_channel_, payment_business_channel_,
-        payment_account_no_, mer_nos_, order_no_, music_group_id_, class_group_id_, pay_time_)
+         per_amount_,
+         balance_payment_amount_, remit_fee_, course_remit_fee_, trans_no_,
+         status_, memo_, create_time_, update_time_, payment_channel_, payment_business_channel_,
+         payment_account_no_, mer_nos_, order_no_, music_group_id_, class_group_id_, pay_time_)
         VALUES (#{id}, #{groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
-        #{userId}, #{organId}, #{routingOrganId},
-        #{type,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
-        #{expectAmount}, #{actualAmount}, #{comAmount}, #{perAmount}, #{balancePaymentAmount},
-        #{remitFee}, #{courseRemitFee}, #{transNo},
-        #{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}, #{memo}, #{createTime}, now(),
-        #{paymentChannel}, #{paymentBusinessChannel}, #{paymentAccountNo}, #{merNos}, #{orderNo},
-        #{musicGroupId},
-        #{classGroupId}, #{payTime})
+                #{userId}, #{organId}, #{routingOrganId},
+                #{type,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
+                #{expectAmount}, #{actualAmount}, #{comAmount}, #{perAmount}, #{balancePaymentAmount},
+                #{remitFee}, #{courseRemitFee}, #{transNo},
+                #{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}, #{memo}, #{createTime}, now(),
+                #{paymentChannel}, #{paymentBusinessChannel}, #{paymentAccountNo}, #{merNos}, #{orderNo},
+                #{musicGroupId},
+                #{classGroupId}, #{payTime})
     </insert>
 
 </mapper>

+ 34 - 3
mec-biz/src/main/resources/config/mybatis/SysPaymentConfigMapper.xml

@@ -5,12 +5,14 @@
         <!--@Table sys_payment_config-->
         <id column="id_" jdbcType="INTEGER" property="id"/>
         <result column="organ_id_" property="organId"/>
-        <result column="account_type_" property="accountType" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
+        <result column="account_type_" property="accountType"
+                typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
         <result column="pay_type_" property="payType" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
         <result column="yq_mer_no_" property="yqMerNo"/>
         <result column="hf_mer_no_" property="hfMerNo"/>
         <result column="type_" property="type"/>
         <result column="route_scale_" property="routeScale"/>
+        <result column="type_route_scale_" property="typeRouteScale"/>
         <result column="organ_name" property="organName"/>
         <result column="per_scale_" property="perScale"/>
         <result column="com_scale_" property="comScale"/>
@@ -23,7 +25,8 @@
     </resultMap>
     <sql id="Base_Column_List">
         <!--@mbg.generated-->
-        id_, organ_id_,account_type_,pay_type_,yq_mer_no_,hf_mer_no_,type_,route_scale_,create_time_, update_time_
+        id_, organ_id_,account_type_,pay_type_,yq_mer_no_,hf_mer_no_,type_,route_scale_,type_route_scale_,create_time_,
+        update_time_
     </sql>
     <select id="get" parameterType="java.lang.Integer" resultMap="SysPaymentConfig">
         <!--@mbg.generated-->
@@ -60,6 +63,9 @@
             <if test="routeScale != null">
                 route_scale_,
             </if>
+            <if test="typeRouteScale != null">
+                type_route_scale_,
+            </if>
             <if test="type != null">
                 type_,
             </if>
@@ -89,6 +95,9 @@
             <if test="routeScale != null">
                 #{routeScale},
             </if>
+            <if test="typeRouteScale != null">
+                #{typeRouteScale},
+            </if>
             <if test="type != null">
                 #{type},
             </if>
@@ -122,6 +131,9 @@
             <if test="routeScale != null">
                 route_scale_ = #{routeScale},
             </if>
+            <if test="typeRouteScale != null">
+                type_route_scale_ = #{typeRouteScale},
+            </if>
             <if test="type != null">
                 type_ = #{type},
             </if>
@@ -137,15 +149,34 @@
         ORDER BY id_
     </select>
 
+    <sql id="queryCondition">
+        <where>
+            <if test="organId!=null">
+                AND spc.organ_id_=#{organId}
+            </if>
+            <if test='hasTypeRoute != null and hasTypeRoute.toString()=="1".toString()'>
+                AND spc.type_route_scale_ != ''
+            </if>
+            <if test='hasTypeRoute != null and hasTypeRoute.toString()=="0".toString()'>
+                AND spc.type_route_scale_ = ''
+            </if>
+            <if test='hasRouteScale != null and hasRouteScale.toString()=="1".toString()'>
+                AND (spc.hf_mer_no_ !='' || spc.route_scale_ != '')
+            </if>
+        </where>
+    </sql>
+
     <!-- 分页查询 -->
     <select id="queryPage" resultMap="SysPaymentConfig" parameterType="map">
         SELECT spc.*,o.name_ organ_name FROM sys_payment_config spc LEFT JOIN organization o on spc.organ_id_ = o.id_
+        <include refid="queryCondition"/>
         <include refid="global.limit"/>
     </select>
 
     <!-- 查询当前表的总记录数 -->
     <select id="queryCount" resultType="int">
-        SELECT COUNT(*) FROM sys_payment_config
+        SELECT COUNT(*) FROM sys_payment_config spc
+        <include refid="queryCondition"/>
         <include refid="global.limit"/>
     </select>
 

+ 177 - 0
mec-thirdparty/src/main/java/com/ym/mec/thirdparty/eseal/provider/BytedancePlugin.java

@@ -0,0 +1,177 @@
+package com.ym.mec.thirdparty.eseal.provider;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.commons.codec.digest.DigestUtils;
+import org.springframework.beans.factory.DisposableBean;
+import org.springframework.beans.factory.InitializingBean;
+import org.springframework.beans.factory.annotation.Value;
+
+import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.JSONPath;
+import com.ym.mec.thirdparty.exception.ThirdpartyException;
+import com.ym.mec.util.http.HttpUtil;
+import com.ym.mec.util.sort.SortUtil;
+import com.ym.mec.util.string.ValueUtil;
+
+public class BytedancePlugin implements InitializingBean, DisposableBean {
+
+	@Value("${eseal.bytedance.projectid:E6894439939350463244}")
+	public String projectId = "E6894439939350463244";
+
+	@Value("${eseal.bytedance.projectSecret:F%#1*#3^z61GEvH0Nf2N1u68v!vvU5n9C^3RE!z3Q^H$UD3521625&&q!H43QnNf}")
+	public String projectSecret = "F%#1*#3^z61GEvH0Nf2N1u68v!vvU5n9C^3RE!z3Q^H$UD3521625&&q!H43QnNf";
+
+	@Value("${eseal.bytedance.apisUrl:http://sandbox.letsign.com}")
+	public String apisUrl = "http://sandbox.letsign.com";
+
+	public static String getName() {
+		return "ByteDance";
+	}
+
+	@Override
+	public void afterPropertiesSet() throws Exception {
+
+	}
+
+	@Override
+	public void destroy() throws Exception {
+
+	}
+
+	/**
+	 * 创建用户账户(个人)
+	 * @param userId 用户编号
+	 * @param realName 姓名
+	 * @param idcard 身份证号码
+	 * @param mobile 手机号码
+	 * @return 账户唯一标识
+	 * @throws IOException 
+	 */
+	public String createUserAccount(String userId, String realName, String idcard, String mobile) throws IOException {
+		String path = "/open-api/certification/noUser/person3/";
+		String url = apisUrl + path;
+		Map<String, Object> params = new HashMap<String, Object>();
+
+		// 基础参数
+		params.put("appCode", projectId);
+		params.put("timestamp", "" + System.currentTimeMillis());
+		params.put("version", "v1");
+
+		// 业务参数
+		params.put("personOpenCode", userId);
+		params.put("personMobile", mobile);
+		params.put("personName", realName);
+		params.put("personIdCard", idcard);
+
+		// token
+		String token = generateToken(params, projectSecret);
+		params.put("token", token);
+
+		params.put("personIdCardFrontFile", "");
+		params.put("personIdCardBackFile", "");
+
+		String result = HttpUtil.postForHttp(url, params);
+		System.out.println(result);
+
+		JSONObject jsonObject = JSONObject.parseObject(result);
+		if (jsonObject.getInteger("code") == 0) {
+			return userId;
+		}
+		throw new ThirdpartyException("创建个人账户失败:{}", jsonObject.getString("description"));
+	}
+
+	/**
+	 * 创建用户账户(企业)
+	 * @param orgName  机构名称
+	 * @param organCode 统一社会信用代码
+	 * @return e签宝账户唯一标识
+	 */
+	public String createOrganAccount(String orgName, String organCode) {
+
+		return null;
+	}
+
+	/**
+	 * 文件上传
+	 * @param contractFile 协议文件
+	 * @param userId 用户账号
+	 * @return
+	 * @throws IOException
+	 */
+	public String uploadFile(File contractFile, String userId) throws IOException {
+		String path = "/open-api/contract/opt/upload";
+		String url = apisUrl + path;
+		Map<String, Object> params = new HashMap<String, Object>();
+
+		// 基础参数
+		params.put("appCode", projectId);
+		params.put("timestamp", "" + System.currentTimeMillis());
+		params.put("version", "v1");
+
+		// 业务参数
+		params.put("companyOpenCode", "");
+		params.put("personOpenCode", userId);
+		params.put("signType", 1);
+		params.put("canRefuse", 0);
+
+		// token
+		String token = generateToken(params, projectSecret);
+		params.put("token", token);
+
+		params.put("contractFile", contractFile);
+
+		String result = HttpUtil.postForHttp(url, params);
+		System.out.println(result);
+
+		JSONObject jsonObject = JSONObject.parseObject(result);
+		if (jsonObject.getInteger("code") == 0) {
+			return (String) JSONPath.eval(jsonObject, "$.data.contractCode");
+		}
+		throw new ThirdpartyException("上传文件失败:{}", jsonObject.getString("description"));
+	}
+
+	/**
+	 * 企业PDF摘要签署(印章图片)
+	 * @param sealData 电子印章数据
+	 * @param srcPdfPath 源文件
+	 * @param destPdfPath 签名后的目标文件
+	 * @return
+	 */
+	public boolean organSign(String sealData, String srcPdfPath, String destPdfPath) {
+		return true;
+	}
+
+	/**
+	 * 用户签名
+	 * @param accountId e签宝账户唯一标识
+	 * @param sealData 电子印章数据
+	 * @param srcPdfPath 平台签名后的源文件
+	 * @param destPdfPath 平台、用户都签名后的文件地址
+	 * @return
+	 */
+	public boolean userSign(String accountId, String sealData, String srcPdfPath, String destPdfPath) {
+
+		return true;
+	}
+
+	private String generateToken(Map<String, Object> params, String secret) {
+
+		params = SortUtil.sortWithAscII(params);
+		String paramsStr = ValueUtil.joinKeyValue(params, "", "", "", true);
+		String md5Str = new String(DigestUtils.md5(paramsStr.getBytes()));
+
+		paramsStr = md5Str + secret;
+
+		return DigestUtils.sha1Hex(paramsStr);
+	}
+
+	public static void main(String[] args) throws IOException {
+		BytedancePlugin plugin = new BytedancePlugin();
+		plugin.createUserAccount("1", "高勇", "421125198708123313", "13720176797");
+	}
+
+}

+ 24 - 0
mec-util/src/main/java/com/ym/mec/util/sort/SortUtil.java

@@ -0,0 +1,24 @@
+package com.ym.mec.util.sort;
+
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.TreeSet;
+
+public class SortUtil {
+
+	/**
+	 * 按照ASCII码表顺序排序
+	 * @param srcMap
+	 * @return
+	 */
+	public static Map<String, Object> sortWithAscII(Map<String, Object> srcMap) {
+
+		LinkedHashMap<String, Object> targetMap = new LinkedHashMap<String, Object>();
+
+		TreeSet<String> sortedKey = new TreeSet<String>(srcMap.keySet());
+		for (String key : sortedKey) {
+			targetMap.put(key, srcMap.get(key));
+		}
+		return targetMap;
+	}
+}

+ 70 - 2
mec-web/src/main/java/com/ym/mec/web/controller/SysPaymentConfigController.java

@@ -1,12 +1,14 @@
 package com.ym.mec.web.controller;
 
 import com.ym.mec.biz.dal.entity.SysPaymentConfig;
+import com.ym.mec.biz.dal.enums.AccountType;
 import com.ym.mec.biz.dal.enums.PaymentChannelEnum;
+import com.ym.mec.biz.dal.page.SysPaymentConfigQueryInfo;
 import com.ym.mec.biz.service.SysPaymentConfigService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
-import com.ym.mec.common.page.QueryInfo;
 import io.swagger.annotations.*;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
@@ -69,7 +71,10 @@ public class SysPaymentConfigController extends BaseController {
     @ApiOperation(value = "分页查询支付配置列表")
     @GetMapping("/queryPage")
     @PreAuthorize("@pcs.hasPermissions('paymentConfig/queryPage')")
-    public Object queryPage(QueryInfo queryInfo) {
+    public Object queryPage(SysPaymentConfigQueryInfo queryInfo) {
+        if (queryInfo.getHasTypeRoute() == null) {
+            queryInfo.setHasRouteScale(1);
+        }
         return succeed(sysPaymentConfigService.queryPage(queryInfo));
     }
 
@@ -80,4 +85,67 @@ public class SysPaymentConfigController extends BaseController {
         return succeed(sysPaymentConfigService.getPaymentConfigs(payType));
     }
 
+
+    @ApiOperation(value = "新增按费用类型配置")
+    @PostMapping("/addTypeRoute")
+    @PreAuthorize("@pcs.hasPermissions('paymentConfig/addTypeRoute')")
+    public HttpResponseResult<SysPaymentConfig> addTypeRoute(SysPaymentConfig config) {
+        if (StringUtils.isBlank(config.getTypeRouteScale())) {
+            return failed("分润配置不能为空");
+        }
+        SysPaymentConfig paymentConfig = sysPaymentConfigService.findPaymentConfigByOrganId(config.getOrganId());
+        if (paymentConfig != null && StringUtils.isNotBlank(paymentConfig.getTypeRouteScale())) {
+            return failed("此分部配置存在,请核查");
+        }
+        Date nowDate = new Date();
+        if (paymentConfig != null) {
+            paymentConfig.setTypeRouteScale(config.getTypeRouteScale());
+            paymentConfig.setUpdateTime(nowDate);
+            sysPaymentConfigService.update(paymentConfig);
+        } else {
+            config.setPayType(PaymentChannelEnum.ADAPAY);
+            config.setType(2);
+            config.setCreateTime(nowDate);
+            config.setUpdateTime(nowDate);
+            sysPaymentConfigService.insert(config);
+            paymentConfig = config;
+        }
+        return succeed(paymentConfig);
+    }
+
+    @ApiOperation(value = "更新按费用类型配置")
+    @PostMapping("/updateTypeRoute")
+    @PreAuthorize("@pcs.hasPermissions('paymentConfig/updateTypeRoute')")
+    public HttpResponseResult<SysPaymentConfig> updateTypeRoute(SysPaymentConfig config) {
+        if (StringUtils.isBlank(config.getTypeRouteScale())) {
+            return failed("分润配置不能为空");
+        }
+        SysPaymentConfig paymentConfig = sysPaymentConfigService.get(config.getId());
+        Date nowDate = new Date();
+        paymentConfig.setTypeRouteScale(config.getTypeRouteScale());
+        paymentConfig.setUpdateTime(nowDate);
+        sysPaymentConfigService.update(paymentConfig);
+        return succeed(paymentConfig);
+    }
+
+    @ApiOperation(value = "删除按费用类型配置")
+    @PostMapping("/delTypeRoute")
+    @PreAuthorize("@pcs.hasPermissions('paymentConfig/delTypeRoute')")
+    public HttpResponseResult<SysPaymentConfig> delTypeRoute(Integer id) {
+        SysPaymentConfig paymentConfig = sysPaymentConfigService.get(id);
+        if (paymentConfig == null) {
+            return failed("此分部配置不存在");
+        }
+
+        if (StringUtils.isBlank(paymentConfig.getHfMerNo()) && StringUtils.isBlank(paymentConfig.getRouteScale())) {
+            sysPaymentConfigService.delete(id);
+        } else {
+            Date nowDate = new Date();
+            paymentConfig.setTypeRouteScale("");
+            paymentConfig.setUpdateTime(nowDate);
+            sysPaymentConfigService.update(paymentConfig);
+        }
+        return succeed(paymentConfig);
+    }
+
 }