| | |
| | | private MemberMapper memberMapper; |
| | | @Autowired |
| | | private BaseParamMapper baseParamMapper; |
| | | |
| | | @Autowired |
| | | private RefundMapper refundMapper; |
| | | |
| | | @Autowired |
| | | private RefundJoinMapper refundJoinMapper; |
| | | |
| | |
| | | IPage<Goodsorder> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity()); |
| | | MPJLambdaWrapper<Goodsorder> queryWrapper = initQueryParamByModel(pageWrap.getModel()); |
| | | queryWrapper.orderByDesc(Goodsorder::getPayDate); |
| | | queryWrapper.select("(select er.status from member_rides er where er.ordre_id=t.id order by er.create_date desc limit 1) as memberRidesStatus"); |
| | | queryWrapper.select("(select sum(er.discount_price) from member_rides er where er.ordre_id=t.id and er.isdeleted=0) as discountMoney," + |
| | | "(select er.status from member_rides er where er.ordre_id=t.id order by er.create_date desc limit 1) as memberRidesStatus"); |
| | | if(Objects.nonNull(pageWrap.getModel().getCloseStatus()) && pageWrap.getModel().getCloseStatus().equals(Constants.ZERO)){ |
| | | queryWrapper.ne(Goodsorder::getStatus,Constants.GOODSORDER_STATUS.CLOSE.getKey()); |
| | | } |
| | |
| | | s.setMoney(Constants.translateMoney(s.getMoney())); |
| | | s.setCloseMoney(Constants.translateMoney(s.getCloseMoney())); |
| | | s.setRefundMoney(Constants.translateMoney(s.getRefundMoney())); |
| | | s.setDiscountMoney(Constants.translateMoney(s.getDiscountMoney())); |
| | | }); |
| | | } |
| | | return PageData.from(goodsorderIPage); |
| | |
| | | GoodsorderDetailDTO goodsorderDetailDTO = new GoodsorderDetailDTO(); |
| | | goodsorderDetailDTO.setPayOrderDTOList(payOrderDTOList);//交易明细 |
| | | goodsorderDetailDTO.setMemberRidesList(memberRides);//骑行记录 |
| | | if(memberRides!=null){ |
| | | for(BikeLogDTO dd: memberRides){ |
| | | goodsorder.setDiscountMoney(Constants.formatDecimalNum(goodsorder.getDiscountMoney()).add(Constants.formatDecimalNum(dd.getDiscountPrice()))); |
| | | } |
| | | goodsorder.setDiscountMoney(Constants.translateMoney(goodsorder.getDiscountMoney())); |
| | | } |
| | | goodsorderDetailDTO.setModel(goodsorder);//订单对象 |
| | | return goodsorderDetailDTO; |
| | | } |
| | |
| | | BigDecimal closeMoney = new BigDecimal(0.00); |
| | | if (!CollectionUtils.isEmpty(memberRides)){ |
| | | //骑行总时长 |
| | | closeMoney = getCloseMoneyByRides(memberRides,true,goodsorder.getMoney()).getAmount(); |
| | | //预计结算价格和计算时长 |
| | | int freeTime = 0; |
| | | try { |
| | | freeTime = Integer.parseInt(systemDictDataBiz.queryByCode(Constants.MINI_PROGRAMME, Constants.FREE_RENT_TIME).getCode()); |
| | | }catch (Exception e){ |
| | | } |
| | | closeMoney = getCloseMoneyByRides(memberRides,freeTime,true,goodsorder.getMoney()).getAmount(); |
| | | //实际结算价格,记录在最高车型记录上 |
| | | memberRides.get(0).setActualPrice(closeMoney); |
| | | // memberRides.get(0).setActualPrice(closeMoney); |
| | | } |
| | | int refundMoney =( Constants.formatDecimalNum(goodsorder.getMoney()).subtract(closeMoney)).intValue();//计算价格 |
| | | if(refundMoney>0){ |
| | |
| | | boolean res = wxMiniUtilService.wxRefund(refundDTO); |
| | | }else{ |
| | | //无退款结算 |
| | | closeGoodsorderDoneNoRefund(goodsorder,type,new BigDecimal(0),null); |
| | | closeGoodsorderDoneNoRefund(goodsorder,type,new BigDecimal(0),null,memberRides); |
| | | } |
| | | } |
| | | public void closeGoodsorderDoneNoRefund(Goodsorder goodsorder,int type,BigDecimal refundMoney,String closeId) { |
| | | public void closeGoodsorderDoneNoRefund(Goodsorder goodsorder,int type,BigDecimal refundMoney,String closeId,List<MemberRides> memberRides ) { |
| | | log.error("========================================"+JSONObject.toJSONString(goodsorder)); |
| | | if(goodsorder ==null || Constants.formatIntegerNum(goodsorder.getStatus()) != Constants.GOODSORDER_STATUS.HAVING_PAY.getKey()){ |
| | | return; |
| | | } |
| | | BigDecimal closeMoney =( Constants.formatDecimalNum(goodsorder.getMoney()).subtract(refundMoney)); |
| | | //进行订单结算业务处理 |
| | | List<MemberRides> memberRides = getMemberRidesForClose(goodsorder.getId()); |
| | | if(memberRides == null){ |
| | | memberRides = getMemberRidesForClose(goodsorder.getId()); |
| | | } |
| | | //默认结算为押金金额 |
| | | if (!CollectionUtils.isEmpty(memberRides)){ |
| | | //骑行总时长 |
| | |
| | | //退款乐行 |
| | | int type =Constants.formatIntegerNum(refund.getType()); |
| | | Goodsorder goodsorder = goodsorderMapper.selectById(refund.getObjId()); |
| | | closeGoodsorderDoneNoRefund(goodsorder,refund.getType(),refund.getMoney(),refund.getId()); |
| | | closeGoodsorderDoneNoRefund(goodsorder,refund.getType(),refund.getMoney(),refund.getId(),null); |
| | | /* log.error("========================================"+JSONObject.toJSONString(goodsorder)); |
| | | if(goodsorder ==null || Constants.formatIntegerNum(goodsorder.getStatus()) != Constants.GOODSORDER_STATUS.HAVING_PAY.getKey()){ |
| | | return; |
| | |
| | | transactionsMapper.insert(transactions); |
| | | } |
| | | |
| | | private RidesDetailResponse getCloseMoneyByRides(List<MemberRides> memberRides,boolean isClose,BigDecimal yjMoney) { |
| | | private RidesDetailResponse getCloseMoneyByRides(List<MemberRides> memberRides,int freeTime,boolean isClose,BigDecimal yjMoney) { |
| | | RidesDetailResponse ridesDetailResponse = new RidesDetailResponse(); |
| | | BigDecimal closeMoney = new BigDecimal(0.00); |
| | | int durationSum = 0; |
| | | MemberRides topRides =memberRides.get(0); |
| | | MemberRides topRides =null; |
| | | //取最高车型计算方案结算订单 |
| | | for(MemberRides rides : memberRides){ |
| | | if ( isClose && Constants.MEMBER_RIDES_STATUS.BACK_CYCLING.getKey()!=(Constants.formatIntegerNum(rides.getStatus()))){ |
| | | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"当前订单有未完成的骑行,无法强制结算"); |
| | | } |
| | | durationSum += Constants.formatIntegerNum(rides.getDuration());//累计骑行(计费)时长 |
| | | if(Constants.formatIntegerNum(topRides.getSortnum())<Constants.formatIntegerNum(rides.getSortnum())){ |
| | | topRides = rides; |
| | | if(durationSum-freeTime > 0 ){//只算超出免费时长的数据 |
| | | if(topRides == null ||( Constants.formatIntegerNum(topRides.getSortnum())<Constants.formatIntegerNum(rides.getSortnum()) |
| | | && Constants.formatIntegerNum(rides.getDuration())>0)){ |
| | | topRides = rides; |
| | | } |
| | | } |
| | | } |
| | | // MemberRides topRides =memberRides.get(0); |
| | | if(durationSum > 0 && topRides != null){ |
| | | if( topRides != null){ |
| | | int baseTime =Constants.formatIntegerNum(topRides.getBaseTime()); |
| | | closeMoney = Constants.formatDecimalNum(topRides.getBasePrice()); |
| | | //如果是一口价方式,价格直接为一口价baseMoney,如果不是计算正常价格 |
| | |
| | | closeMoney = closeMoney.add(unit.multiply(Constants.formatDecimalNum(topRides.getUnitPrice()))); |
| | | } |
| | | } |
| | | topRides.setActualPrice(closeMoney); |
| | | } |
| | | //如果订单价格封顶了,取订单 价格 |
| | | if(Constants.compareBigdecimal(closeMoney, yjMoney) ==1){ |
| | |
| | | } |
| | | ridesDetailResponse.setDuration(durationSum); |
| | | ridesDetailResponse.setAmount(closeMoney); |
| | | ridesDetailResponse.setBikeType(topRides.getParamName()); |
| | | ridesDetailResponse.setBikeType(topRides!=null?topRides.getParamName():"-"); |
| | | return ridesDetailResponse; |
| | | } |
| | | |
| | |
| | | return memberRidesResponse; |
| | | }).collect(Collectors.toList()); |
| | | //累计和预算结算金额 |
| | | RidesDetailResponse ridesDetailResponse = getCloseMoneyByRides(memberRides,false,goodsorder.getMoney()); |
| | | RidesDetailResponse ridesDetailResponse = getCloseMoneyByRides(memberRides,freeTime,false,goodsorder.getMoney()); |
| | | if(Constants.formatIntegerNum(goodsorder.getStatus())!= Constants.goodsorderStatus.pay){ |
| | | //如果非已支付但未结算,使用订单金额 |
| | | ridesDetailResponse.setAmount(goodsorder.getCloseMoney()); |