|  | @@ -5,7 +5,6 @@ import com.alibaba.fastjson.JSONArray;
 | 
	
		
			
				|  |  |  import com.alibaba.fastjson.JSONObject;
 | 
	
		
			
				|  |  |  import com.ym.mec.auth.api.client.SysUserFeignService;
 | 
	
		
			
				|  |  |  import com.ym.mec.auth.api.entity.SysUser;
 | 
	
		
			
				|  |  | -import com.ym.mec.biz.dal.dao.SellOrderDao;
 | 
	
		
			
				|  |  |  import com.ym.mec.biz.dal.dao.StudentDao;
 | 
	
		
			
				|  |  |  import com.ym.mec.biz.dal.dao.StudentRepairDao;
 | 
	
		
			
				|  |  |  import com.ym.mec.biz.dal.dao.SysConfigDao;
 | 
	
	
		
			
				|  | @@ -66,8 +65,6 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
 | 
	
		
			
				|  |  |      private StudentPaymentRouteOrderService studentPaymentRouteOrderService;
 | 
	
		
			
				|  |  |      @Autowired
 | 
	
		
			
				|  |  |      private SellOrderService sellOrderService;
 | 
	
		
			
				|  |  | -    @Autowired
 | 
	
		
			
				|  |  | -    private SellOrderDao sellOrderDao;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      @Override
 | 
	
		
			
				|  |  |      public BaseDAO<Integer, StudentRepair> getDAO() {
 | 
	
	
		
			
				|  | @@ -110,17 +107,24 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          Integer studentId = sysUser.getId();
 | 
	
		
			
				|  |  |          String goodsId = goodsSellDto.getGoodsId();
 | 
	
		
			
				|  |  | -        if (StringUtils.isEmpty(goodsId)) {
 | 
	
		
			
				|  |  | +        if(StringUtils.isEmpty(goodsId)){
 | 
	
		
			
				|  |  |              throw new BizException("请选择需要购买的商品");
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | -        if (studentId == null) {
 | 
	
		
			
				|  |  | +        if(studentId == null){
 | 
	
		
			
				|  |  |              throw new BizException("请指定学员");
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          studentDao.lockUser(studentId);
 | 
	
		
			
				|  |  |          SysUser student = sysUserFeignService.queryUserById(studentId);
 | 
	
		
			
				|  |  |          String orderNo = idGeneratorService.generatorId("payment") + "";
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        String[] goodsIds = goodsId.split(",");
 | 
	
		
			
				|  |  | +        Map<String, BigDecimal> map = getMap("goods", "id_", "group_purchase_price_", goodsId, String.class, BigDecimal.class);
 | 
	
		
			
				|  |  | +        BigDecimal amount = BigDecimal.ZERO;
 | 
	
		
			
				|  |  | +        for (String id : goodsIds) {
 | 
	
		
			
				|  |  | +            amount.add(map.get(id));
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  |          List<Goods> goods = goodsService.findGoodsByIds(goodsId);
 | 
	
		
			
				|  |  | -        BigDecimal amount = goods.stream().map(e -> e.getGroupPurchasePrice()).reduce(BigDecimal.ZERO, BigDecimal::add);
 | 
	
		
			
				|  |  | +//        BigDecimal amount = goods.stream().map(e -> e.getGroupPurchasePrice()).reduce(BigDecimal.ZERO, BigDecimal::add);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          StudentPaymentOrder studentPaymentOrder = new StudentPaymentOrder();
 | 
	
		
			
				|  |  |          studentPaymentOrder.setUserId(studentId);
 | 
	
	
		
			
				|  | @@ -134,9 +138,11 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
 | 
	
		
			
				|  |  |          studentPaymentOrder.setRoutingOrganId(student.getOrganId());
 | 
	
		
			
				|  |  |          studentPaymentOrderService.insert(studentPaymentOrder);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        Map<GoodsType, List<Goods>> collect = goods.stream().collect(Collectors.groupingBy(Goods::getType));
 | 
	
		
			
				|  |  | +//        Map<GoodsType, List<Goods>> collect = goods.stream().collect(Collectors.groupingBy(Goods::getType));
 | 
	
		
			
				|  |  | +        Map<Integer, List<Goods>> collect = goods.stream().collect(Collectors.groupingBy(Goods::getId));
 | 
	
		
			
				|  |  |          List<StudentPaymentOrderDetail> studentPaymentOrderDetailList = new ArrayList<>();
 | 
	
		
			
				|  |  | -        goods.forEach(e -> {
 | 
	
		
			
				|  |  | +        for (String id : goodsIds) {
 | 
	
		
			
				|  |  | +            Goods e = collect.get(id).get(0);
 | 
	
		
			
				|  |  |              StudentPaymentOrderDetail studentPaymentOrderDetail = new StudentPaymentOrderDetail();
 | 
	
		
			
				|  |  |              studentPaymentOrderDetail.setRemitFee(BigDecimal.ZERO);
 | 
	
		
			
				|  |  |              OrderDetailTypeEnum type = null;
 | 
	
	
		
			
				|  | @@ -149,12 +155,11 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |              studentPaymentOrderDetail.setType(type);
 | 
	
		
			
				|  |  |              studentPaymentOrderDetail.setPrice(e.getGroupPurchasePrice());
 | 
	
		
			
				|  |  | -            String join = StringUtils.join(collect.get(e.getType()).stream().map(g -> g.getId()).collect(Collectors.toList()), ",");
 | 
	
		
			
				|  |  | -            studentPaymentOrderDetail.setGoodsIdList(join);
 | 
	
		
			
				|  |  | +            studentPaymentOrderDetail.setGoodsIdList(id);
 | 
	
		
			
				|  |  |              studentPaymentOrderDetail.setPaymentOrderId(studentPaymentOrder.getId());
 | 
	
		
			
				|  |  |              studentPaymentOrderDetail.setKitGroupPurchaseType(KitGroupPurchaseTypeEnum.GROUP);
 | 
	
		
			
				|  |  |              studentPaymentOrderDetailList.add(studentPaymentOrderDetail);
 | 
	
		
			
				|  |  | -        });
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  |          studentPaymentOrderDetailService.batchAdd(studentPaymentOrderDetailList);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          studentPaymentOrder.setVersion(0);
 | 
	
	
		
			
				|  | @@ -228,11 +233,11 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
 | 
	
		
			
				|  |  |          repairInfo.setCreateTime(date);
 | 
	
		
			
				|  |  |          repairInfo.setUpdateTime(date);
 | 
	
		
			
				|  |  |          String goodsJson = repairInfo.getGoodsJson();
 | 
	
		
			
				|  |  | -        if (StringUtils.isNotEmpty(goodsJson)) {
 | 
	
		
			
				|  |  | +        if(StringUtils.isNotEmpty(goodsJson)){
 | 
	
		
			
				|  |  |              List<RepairGoodsDto> repairGoodsDtos = JSONObject.parseArray(goodsJson, RepairGoodsDto.class);
 | 
	
		
			
				|  |  |              List<Integer> goodsIds = repairGoodsDtos.stream().map(e -> e.getId()).collect(Collectors.toList());
 | 
	
		
			
				|  |  |              Map<Integer, BigDecimal> map = getMap("goods", "id_", "group_purchase_price_", goodsIds, Integer.class, BigDecimal.class);
 | 
	
		
			
				|  |  | -            repairGoodsDtos.forEach(e -> {
 | 
	
		
			
				|  |  | +            repairGoodsDtos.forEach(e->{
 | 
	
		
			
				|  |  |                  e.setGroupPurchasePrice(map.get(e.getId()));
 | 
	
		
			
				|  |  |              });
 | 
	
		
			
				|  |  |              repairInfo.setGoodsJson(JSONObject.toJSONString(repairGoodsDtos));
 | 
	
	
		
			
				|  | @@ -244,13 +249,13 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
 | 
	
		
			
				|  |  |              return repairInfoMap;
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        if (StringUtils.isNoneBlank(repairInfo.getGoodsJson())) {
 | 
	
		
			
				|  |  | +        if(StringUtils.isNoneBlank(repairInfo.getGoodsJson())){
 | 
	
		
			
				|  |  |              JSONArray goods = JSON.parseArray(repairInfo.getGoodsJson());
 | 
	
		
			
				|  |  |              for (Object good : goods) {
 | 
	
		
			
				|  |  | -                JSONObject goodObject = (JSONObject) good;
 | 
	
		
			
				|  |  | +                JSONObject goodObject= (JSONObject) good;
 | 
	
		
			
				|  |  |                  BigDecimal groupPurchasePrice = goodObject.getBigDecimal("groupPurchasePrice");
 | 
	
		
			
				|  |  | -                if (Objects.nonNull(groupPurchasePrice)) {
 | 
	
		
			
				|  |  | -                    amount = amount.add(groupPurchasePrice);
 | 
	
		
			
				|  |  | +                if(Objects.nonNull(groupPurchasePrice)){
 | 
	
		
			
				|  |  | +                    amount=amount.add(groupPurchasePrice);
 | 
	
		
			
				|  |  |                  }
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |          }
 | 
	
	
		
			
				|  | @@ -399,7 +404,7 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
 | 
	
		
			
				|  |  |          studentDao.lockUser(studentRepair.getStudentId());
 | 
	
		
			
				|  |  |          BigDecimal amount = studentRepair.getAmount();
 | 
	
		
			
				|  |  |          String goodsJson = studentRepair.getGoodsJson();
 | 
	
		
			
				|  |  | -        if (StringUtils.isNotEmpty(goodsJson)) {
 | 
	
		
			
				|  |  | +        if(StringUtils.isNotEmpty(goodsJson)){
 | 
	
		
			
				|  |  |              List<RepairGoodsDto> repairGoodsDtos = JSONObject.parseArray(goodsJson, RepairGoodsDto.class);
 | 
	
		
			
				|  |  |              BigDecimal reduce = repairGoodsDtos.stream().map(e -> e.getGroupPurchasePrice()).reduce(BigDecimal.ZERO, BigDecimal::add);
 | 
	
		
			
				|  |  |              amount = amount.add(reduce);
 | 
	
	
		
			
				|  | @@ -548,84 +553,7 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
 | 
	
		
			
				|  |  |                  rechargeDetail.setPerAmount(studentPaymentOrder.getPerAmount().negate());
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |              sysUserCashAccountDetailService.insert(paymentDetail);
 | 
	
		
			
				|  |  | -            //生成销售订单
 | 
	
		
			
				|  |  | -            List<StudentPaymentOrderDetail> orderDetails = studentPaymentOrderDetailService.getOrderDetail(studentPaymentOrder.getId());
 | 
	
		
			
				|  |  | -            if (orderDetails.size() > 0) {
 | 
	
		
			
				|  |  | -                List<SellOrder> sellOrders = new ArrayList<>();
 | 
	
		
			
				|  |  | -                //总余额支付
 | 
	
		
			
				|  |  | -                BigDecimal totalBalance = studentPaymentOrder.getBalancePaymentAmount() != null ? studentPaymentOrder.getBalancePaymentAmount() : BigDecimal.ZERO;
 | 
	
		
			
				|  |  | -                //总价格
 | 
	
		
			
				|  |  | -                BigDecimal totalPrice = studentPaymentOrder.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);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -                int i = 1;
 | 
	
		
			
				|  |  | -                BigDecimal detailRouteBalance = BigDecimal.ZERO;
 | 
	
		
			
				|  |  | -                for (StudentPaymentOrderDetail orderDetail : orderDetails) {
 | 
	
		
			
				|  |  | -                    BigDecimal detailBalance = orderDetail.getPrice().multiply(detailTotalBalance).divide(detailTotalPrice, 2, BigDecimal.ROUND_HALF_UP);
 | 
	
		
			
				|  |  | -                    if (i == orderDetails.size()) {
 | 
	
		
			
				|  |  | -                        detailBalance = detailTotalBalance.subtract(detailRouteBalance);
 | 
	
		
			
				|  |  | -                    }
 | 
	
		
			
				|  |  | -                    detailRouteBalance = detailRouteBalance.add(detailBalance);
 | 
	
		
			
				|  |  | -                    i++;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -                    if (orderDetail.getType().equals(OrderDetailTypeEnum.MUSICAL) && orderDetail.getKitGroupPurchaseType().equals(KitGroupPurchaseTypeEnum.LEASE)) {
 | 
	
		
			
				|  |  | -                        continue;
 | 
	
		
			
				|  |  | -                    }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -                    BigDecimal goodsTotalPrice = orderDetail.getGoodsList().stream().map(Goods::getGroupPurchasePrice).reduce(BigDecimal.ZERO, BigDecimal::add);
 | 
	
		
			
				|  |  | -                    BigDecimal routePrice = BigDecimal.ZERO;
 | 
	
		
			
				|  |  | -                    BigDecimal routeBalance = BigDecimal.ZERO;
 | 
	
		
			
				|  |  | -                    int j = 1;
 | 
	
		
			
				|  |  | -                    for (Goods goods : orderDetail.getGoodsList()) {
 | 
	
		
			
				|  |  | -                        BigDecimal expectAmount = goods.getGroupPurchasePrice().multiply(orderDetail.getPrice()).divide(goodsTotalPrice, 2, BigDecimal.ROUND_HALF_UP);
 | 
	
		
			
				|  |  | -                        BigDecimal balance = goods.getGroupPurchasePrice().multiply(detailBalance).divide(goodsTotalPrice, 2, BigDecimal.ROUND_HALF_UP);
 | 
	
		
			
				|  |  | -                        if (j == orderDetail.getGoodsList().size()) {
 | 
	
		
			
				|  |  | -                            expectAmount = orderDetail.getPrice().subtract(routePrice);
 | 
	
		
			
				|  |  | -                            balance = orderDetail.getPrice().subtract(routeBalance);
 | 
	
		
			
				|  |  | -                        }
 | 
	
		
			
				|  |  | -                        routePrice = routePrice.add(expectAmount);
 | 
	
		
			
				|  |  | -                        routeBalance = routeBalance.add(balance);
 | 
	
		
			
				|  |  | -                        j++;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -                        SellOrder sellOrder = new SellOrder();
 | 
	
		
			
				|  |  | -                        Map<String, BigDecimal> CostMap = new HashMap<>();
 | 
	
		
			
				|  |  | -                        CostMap.put("sellCost", goods.getDiscountPrice());
 | 
	
		
			
				|  |  | -                        if (goods.getAgreeCostPrice() != null) {
 | 
	
		
			
				|  |  | -                            CostMap.put("SellCost2", goods.getAgreeCostPrice());
 | 
	
		
			
				|  |  | -                        }
 | 
	
		
			
				|  |  | -                        sellOrder.setOrganId(studentPaymentOrder.getOrganId());
 | 
	
		
			
				|  |  | -                        sellOrder.setTransNo(studentPaymentOrder.getTransNo());
 | 
	
		
			
				|  |  | -                        sellOrder.setOrderId(studentPaymentOrder.getId());
 | 
	
		
			
				|  |  | -                        sellOrder.setOrderNo(studentPaymentOrder.getOrderNo());
 | 
	
		
			
				|  |  | -                        sellOrder.setActualAmount(expectAmount.subtract(balance));
 | 
	
		
			
				|  |  | -                        sellOrder.setBalanceAmount(balance);
 | 
	
		
			
				|  |  | -                        sellOrder.setExpectAmount(expectAmount);
 | 
	
		
			
				|  |  | -                        sellOrder.setSellCost(goods.getDiscountPrice());
 | 
	
		
			
				|  |  | -                        sellOrder.setSellCost2(JSON.toJSONString(CostMap));
 | 
	
		
			
				|  |  | -                        sellOrder.setNum(1);
 | 
	
		
			
				|  |  | -                        sellOrder.setUserId(studentPaymentOrder.getUserId());
 | 
	
		
			
				|  |  | -                        sellOrder.setPaymentChannel(studentPaymentOrder.getPaymentChannel());
 | 
	
		
			
				|  |  | -                        sellOrder.setMerNo(studentPaymentOrder.getMerNos());
 | 
	
		
			
				|  |  | -                        sellOrder.setSellTime(studentPaymentOrder.getCreateTime());
 | 
	
		
			
				|  |  | -                        sellOrder.setCreateIme(new Date());
 | 
	
		
			
				|  |  | -                        sellOrder.setUpdateTime(new Date());
 | 
	
		
			
				|  |  | -                        if (goods.getType().equals(GoodsType.INSTRUMENT)) {
 | 
	
		
			
				|  |  | -                            sellOrder.setType(SellTypeEnum.INSTRUMENT);
 | 
	
		
			
				|  |  | -                        } else if (goods.getType().equals(GoodsType.ACCESSORIES)) {
 | 
	
		
			
				|  |  | -                            sellOrder.setType(SellTypeEnum.ACCESSORIES);
 | 
	
		
			
				|  |  | -                        } else {
 | 
	
		
			
				|  |  | -                            sellOrder.setType(SellTypeEnum.OTHER);
 | 
	
		
			
				|  |  | -                        }
 | 
	
		
			
				|  |  | -                        sellOrders.add(sellOrder);
 | 
	
		
			
				|  |  | -                    }
 | 
	
		
			
				|  |  | -                }
 | 
	
		
			
				|  |  | -                sellOrderDao.batchInsert(sellOrders);
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        } else if (studentPaymentOrder.getStatus() == DealStatusEnum.CLOSE || studentPaymentOrder.getStatus() == DealStatusEnum.FAILED) {
 | 
	
		
			
				|  |  | +        }else if(studentPaymentOrder.getStatus() == DealStatusEnum.CLOSE || studentPaymentOrder.getStatus() == DealStatusEnum.FAILED){
 | 
	
		
			
				|  |  |              if (studentPaymentOrder.getBalancePaymentAmount() != null && studentPaymentOrder.getBalancePaymentAmount().compareTo(BigDecimal.ZERO) > 0) {
 | 
	
		
			
				|  |  |                  sysUserCashAccountService.updateBalance(studentPaymentOrder.getUserId(), studentPaymentOrder.getBalancePaymentAmount(), PlatformCashAccountDetailTypeEnum.REFUNDS, "乐器维修支付失败");
 | 
	
		
			
				|  |  |              }
 | 
	
	
		
			
				|  | @@ -647,7 +575,7 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
 | 
	
		
			
				|  |  |          if (repairInfo == null) {
 | 
	
		
			
				|  |  |              throw new BizException("维修单不存在");
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | -        if (repairInfo.getPayStatus().equals(2)) {
 | 
	
		
			
				|  |  | +        if(repairInfo.getPayStatus().equals(2)){
 | 
	
		
			
				|  |  |              return true;
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -701,14 +629,13 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
 | 
	
		
			
				|  |  |              sysUserCashAccountDetailService.insert(paymentDetail);
 | 
	
		
			
				|  |  |              //生成销售订单
 | 
	
		
			
				|  |  |              List<Integer> goodsIds = new ArrayList<>();
 | 
	
		
			
				|  |  | -            if (StringUtils.isNotBlank(repairInfo.getGoodsJson())) {
 | 
	
		
			
				|  |  | +            if(StringUtils.isNotBlank(repairInfo.getGoodsJson())){
 | 
	
		
			
				|  |  |                  List<Goods> goods = JSONObject.parseArray(repairInfo.getGoodsJson(), Goods.class);
 | 
	
		
			
				|  |  |                  goodsIds = goods.stream().map(Goods::getId).collect(Collectors.toList());
 | 
	
		
			
				|  |  | -                if (goodsIds.size() > 0) {
 | 
	
		
			
				|  |  | -                    sellOrderService.addSellOrder(studentPaymentOrder.getId(), repairInfo.getMusicGroupId(), goodsIds, studentPaymentOrder.getExpectAmount(), studentPaymentOrder.getBalancePaymentAmount());
 | 
	
		
			
				|  |  | -                }
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +            sellOrderService.addSellOrder(studentPaymentOrder.getId(),repairInfo.getMusicGroupId(),goodsIds,studentPaymentOrder.getExpectAmount(),studentPaymentOrder.getBalancePaymentAmount());
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |              String imContent = repairInfo.getStudentName() + "学员您好,您的乐器维修已受理,我们会尽快完成保养维修";
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |              if (repairInfo.getType().equals(1)) { //线上
 |