From 7a9f4891bfe7ffff37f3578ff564ee5e24e8232d Mon Sep 17 00:00:00 2001 From: jiangping <jp@doumee.com> Date: 星期四, 12 十月 2023 12:14:24 +0800 Subject: [PATCH] 结算价格 --- server/services/src/main/java/com/doumee/service/business/impl/GoodsorderServiceImpl.java | 136 +++++++++++++++++++++++++++------------------ 1 files changed, 81 insertions(+), 55 deletions(-) diff --git a/server/services/src/main/java/com/doumee/service/business/impl/GoodsorderServiceImpl.java b/server/services/src/main/java/com/doumee/service/business/impl/GoodsorderServiceImpl.java index 72449ee..4630a8e 100644 --- a/server/services/src/main/java/com/doumee/service/business/impl/GoodsorderServiceImpl.java +++ b/server/services/src/main/java/com/doumee/service/business/impl/GoodsorderServiceImpl.java @@ -328,12 +328,6 @@ @Override public void forceCloseGoodsorder(String orderId) { //鏌ヨ璁㈠崟 淇℃伅 -// int freeTime = 0; -// try { -// freeTime = Integer.parseInt(systemDictDataBiz.queryByCode(Constants.MINI_PROGRAMME, Constants.FREE_RENT_TIME).getCode()); -// }catch (Exception e){ -// -// } if(StringUtils.isBlank(orderId)){ throw new BusinessException(ResponseStatus.BAD_REQUEST ); } @@ -351,44 +345,18 @@ goodsorder.setEditor(user.getId()); closeGoodsorder( goodsorder,Constants.REFUND_TYPE.PLAT_FORCE.getKey()); } + @Transactional(rollbackFor = {Exception.class,BusinessException.class}) @Override public void closeGoodsorder( Goodsorder goodsorder ,int type ) { - - MPJLambdaWrapper<MemberRides> wrapper = new MPJLambdaWrapper<>(); - wrapper.eq(MemberRides::getOrdreId,goodsorder.getId()); - wrapper.leftJoin(BaseParam.class, BaseParam::getId, MemberRides::getParamId); - wrapper.orderByDesc(BaseParam::getSortnum);//鍙栨渶楂樿溅鍨嬩綔涓鸿浠锋柟妗� - //鏌ヨ鎵�鏈夐獞琛岃褰� - List<MemberRides> memberRides = memberRidesJoinMapper.selectList(wrapper); + List<MemberRides> memberRides = getMemberRidesForClose(goodsorder.getId()); //榛樿缁撶畻涓烘娂閲戦噾棰� BigDecimal closeMoney = new BigDecimal(0.00); if (!CollectionUtils.isEmpty(memberRides)){ //楠戣鎬绘椂闀� - int durationSum = 0; - for(MemberRides rides : memberRides){ - if ( Constants.MEMBER_RIDES_STATUS.BACK_CYCLING.getKey()!=(Constants.formatIntegerNum(rides.getStatus()))){ - throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"褰撳墠璁㈠崟鏈夋湭瀹屾垚鐨勯獞琛岋紝鏃犳硶寮哄埗缁撶畻"); - } - durationSum += Constants.formatIntegerNum(rides.getDuration());//绱楠戣锛堣璐癸級鏃堕暱 - } - //鍙栨渶楂樿溅鍨嬭绠楁柟妗堢粨绠楄鍗� - MemberRides topRides = memberRides.get(0); - if(durationSum > 0){ - int baseTime =Constants.formatIntegerNum(topRides.getBaseTime()); - closeMoney = Constants.formatDecimalNum(topRides.getBasePrice()); - //濡傛灉鏄竴鍙d环鏂瑰紡锛屼环鏍肩洿鎺ヤ负涓�鍙d环baseMoney,濡傛灉涓嶆槸璁$畻姝e父浠锋牸 - if(baseTime != -1){//涓嶆槸涓�鍙d环 - if(durationSum > baseTime && Constants.formatIntegerNum(topRides.getUnitTime())>0){ - //濡傛灉瓒呭嚭浜嗚捣姝ヤ环鏍硷紝璁$畻瓒呭嚭浠锋牸 - BigDecimal unit = new BigDecimal(durationSum-baseTime).divide(new BigDecimal(topRides.getUnitTime()), 0, BigDecimal.ROUND_UP); - //璁$畻閲戦绱瓒呭嚭閮ㄩ棬浠锋牸锛堣秴鍑烘椂闂村崟浣�*瓒呭嚭鍗曚綅鏃堕棿浠锋牸锛� - closeMoney = closeMoney.add(unit.multiply(Constants.formatDecimalNum(topRides.getUnitPrice()))); - } - } - } + closeMoney = getCloseMoneyByRides(memberRides,true).getAmount(); //瀹為檯缁撶畻浠锋牸锛岃褰曞湪鏈�楂樿溅鍨嬭褰曚笂 - topRides.setActualPrice(closeMoney); + memberRides.get(0).setActualPrice(closeMoney); for(MemberRides model :memberRides){ MemberRides up = new MemberRides(); up.setId(model.getId()); @@ -451,6 +419,50 @@ //淇敼璁㈠崟淇℃伅 goodsorderMapper.updateById(update); } + + private RidesDetailResponse getCloseMoneyByRides(List<MemberRides> memberRides,boolean isClose) { + RidesDetailResponse ridesDetailResponse = new RidesDetailResponse(); + BigDecimal closeMoney = new BigDecimal(0.00); + int durationSum = 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(durationSum > 0 && topRides != null){ + int baseTime =Constants.formatIntegerNum(topRides.getBaseTime()); + closeMoney = Constants.formatDecimalNum(topRides.getBasePrice()); + //濡傛灉鏄竴鍙d环鏂瑰紡锛屼环鏍肩洿鎺ヤ负涓�鍙d环baseMoney,濡傛灉涓嶆槸璁$畻姝e父浠锋牸 + if(baseTime != -1){//涓嶆槸涓�鍙d环 + if(durationSum > baseTime && Constants.formatIntegerNum(topRides.getUnitTime())>0){ + //濡傛灉瓒呭嚭浜嗚捣姝ヤ环鏍硷紝璁$畻瓒呭嚭浠锋牸 + BigDecimal unit = new BigDecimal(durationSum-baseTime).divide(new BigDecimal(topRides.getUnitTime()), 0, BigDecimal.ROUND_UP); + //璁$畻閲戦绱瓒呭嚭閮ㄩ棬浠锋牸锛堣秴鍑烘椂闂村崟浣�*瓒呭嚭鍗曚綅鏃堕棿浠锋牸锛� + closeMoney = closeMoney.add(unit.multiply(Constants.formatDecimalNum(topRides.getUnitPrice()))); + } + } + } + ridesDetailResponse.setDuration(durationSum); + ridesDetailResponse.setAmount(closeMoney); + ridesDetailResponse.setBikeType(topRides.getParamName()); + return ridesDetailResponse; + } + + private List<MemberRides> getMemberRidesForClose(String id) { + + MPJLambdaWrapper<MemberRides> wrapper = new MPJLambdaWrapper<>(); + wrapper.eq(MemberRides::getOrdreId,id); + wrapper.selectAll(MemberRides.class).selectAs(BaseParam::getName, MemberRides::getParamName); + wrapper.leftJoin(BaseParam.class, BaseParam::getId, MemberRides::getParamId); + wrapper.orderByDesc(BaseParam::getSortnum);//鍙栨渶楂樿溅鍨嬩綔涓鸿浠锋柟妗� + //鏌ヨ鎵�鏈夐獞琛岃褰� + List<MemberRides> memberRides = memberRidesJoinMapper.selectList(wrapper); + return memberRides; + } + @Override public void backGoodsorder(String orderId, BigDecimal money,String reason) { LoginUserInfo principal = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); @@ -481,8 +493,10 @@ @Override public GoodsorderCanBanlanceDTO getGoodsorderCanBanlanceDTO(String orderId) { - Goodsorder goodsorder = goodsorderMapper.selectById(orderId); + if(goodsorder ==null){ + throw new BusinessException(ResponseStatus.DATA_EMPTY); + } QueryWrapper<Refund> wrapper = new QueryWrapper<>(); wrapper.lambda() .eq(Refund::getObjId,orderId) @@ -558,18 +572,30 @@ } @Override public RidesDetailResponse getRidesDetailResponse(String id) { - QueryWrapper<MemberRides> wrapper = new QueryWrapper<>(); - wrapper.lambda() - .eq(MemberRides::getOrdreId,id); - List<MemberRides> memberRides = memberRidesJoinMapper.selectList(wrapper); + Goodsorder goodsorder = goodsorderMapper.selectById(id); + if(goodsorder ==null){ + throw new BusinessException(ResponseStatus.DATA_EMPTY); + } + List<MemberRides> memberRides = getMemberRidesForClose(id); if (!CollectionUtils.isEmpty(memberRides)){ - PricingRuleDTO pricingRule = pricingRuleService.getPricingRule(memberRides); - RidesDetailResponse ridesDetailResponse = new RidesDetailResponse(); + //棰勮缁撶畻浠锋牸鍜岃绠楁椂闀� + int freeTime = 0; + try { + freeTime = Integer.parseInt(systemDictDataBiz.queryByCode(Constants.MINI_PROGRAMME, Constants.FREE_RENT_TIME).getCode()); + }catch (Exception e){ + } + int finalFreeTime = freeTime; List<MemberRidesResponse> collect = memberRides.stream().map(s -> { MemberRidesResponse memberRidesResponse = new MemberRidesResponse(); + Date endTime =memberRidesResponse.getRideEndTime(); + if ( Constants.MEMBER_RIDES_STATUS.BACK_CYCLING.getKey()!=(Constants.formatIntegerNum(s.getStatus()))){ + //濡傛灉鏄獞琛屼腑 + endTime = new Date(); + } + int rideTime =DateUtil.betweenMin(s.getRentDate(), endTime); memberRidesResponse.setRideStartTime(s.getRentDate()); - memberRidesResponse.setRideEndTime(s.getBackDate()); - memberRidesResponse.setRideTime(DateUtil.betweenMin(memberRidesResponse.getRideStartTime(), memberRidesResponse.getRideEndTime())); + memberRidesResponse.setRideEndTime(endTime); + memberRidesResponse.setRideTime(rideTime); memberRidesResponse.setDuration(s.getDuration()); memberRidesResponse.setBikeType(s.getParamName()); memberRidesResponse.setBikeCode(s.getBikeCode()); @@ -577,19 +603,19 @@ memberRidesResponse.setBaseTime(s.getBaseTime()); memberRidesResponse.setUnitPrice(s.getUnitTime()); memberRidesResponse.setUnitTime(s.getUnitTime()); + if ( Constants.MEMBER_RIDES_STATUS.BACK_CYCLING.getKey()!=(Constants.formatIntegerNum(s.getStatus()))){ + //濡傛灉鏄獞琛屼腑 + s.setDuration(rideTime> finalFreeTime ?(rideTime- finalFreeTime):0); + } + s.setRideTime(rideTime); return memberRidesResponse; }).collect(Collectors.toList()); - - Integer durationSum = memberRides.stream().filter(s -> s.getDuration() > 0).mapToInt(s -> s.getDuration()).sum(); - if (durationSum > pricingRule.getMemberRides().getBaseTime()){ - BigDecimal basePrice = pricingRule.getMemberRides().getBasePrice(); - BigDecimal multiply = pricingRule.getMemberRides().getUnitPrice().multiply(new BigDecimal((durationSum - pricingRule.getMemberRides().getBaseTime()))); - ridesDetailResponse.setAmount(basePrice.add(multiply)); - }else { - ridesDetailResponse.setAmount(pricingRule.getMemberRides().getBasePrice()); + //绱鍜岄绠楃粨绠楅噾棰� + RidesDetailResponse ridesDetailResponse = getCloseMoneyByRides(memberRides,false);; + if(Constants.formatIntegerNum(goodsorder.getStatus())!= Constants.goodsorderStatus.pay){ + //濡傛灉闈炲凡鏀粯浣嗘湭缁撶畻锛屼娇鐢ㄨ鍗曢噾棰� + ridesDetailResponse.setAmount(goodsorder.getCloseMoney()); } - ridesDetailResponse.setBikeType(pricingRule.getBikeType()); - ridesDetailResponse.setDuration(durationSum); ridesDetailResponse.setMemberRidesResponseList(collect); return ridesDetailResponse; } -- Gitblit v1.9.3