From 95d3f1671b5a27bb811a374d7c06df5e2dc9035b Mon Sep 17 00:00:00 2001 From: jiangping <jp@doumee.com> Date: 星期二, 17 十月 2023 09:41:34 +0800 Subject: [PATCH] 价格配置 --- server/services/src/main/java/com/doumee/service/business/impl/GoodsorderServiceImpl.java | 164 +++++++++++++++++++++++++++++++----------------------- 1 files changed, 95 insertions(+), 69 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 f9ae8c4..2929f7e 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 @@ -243,7 +243,6 @@ homeResponse.setDeposit(new BigDecimal(systemDictDataBiz.queryByCode(Constants.MINI_PROGRAMME,Constants.RENT_DEPOSIT).getCode())); homeResponse.setTips(systemDictDataBiz.queryByCode(Constants.MINI_PROGRAMME,Constants.TIPS).getCode()); homeResponse.setLeaseVideoUrl(systemDictDataBiz.queryByCode(Constants.MINI_PROGRAMME,Constants.RENT_TIPS_VIDEO).getCode()); - homeResponse.setPricingRules(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.PRICING_RULE).getCode()); homeResponse.setStopServeTips(systemDictDataBiz.queryByCode(Constants.MINI_PROGRAMME,Constants.STOP_SERVE_TIPS).getCode()); homeResponse.setIsStopServe(this.checkTemporaryStop()?1:0); homeResponse.setIsBusiness(this.checkBusiness()?0:1); @@ -252,17 +251,21 @@ .eq("isdeleted",Constants.ZERO) .eq("status",Constants.ZERO) .orderByDesc("create_date") - )); - //鏌ヨ鏄惁瀛樺湪 宸叉敮浠樼殑 鎶奸噾璁㈠崟 - Integer status = this.goodsorderMapper.selectCount(new QueryWrapper<Goodsorder>() - .eq("member_id",memberId) - .eq("status",Constants.goodsorderStatus.pay)); - homeResponse.setDepositStatus(status); + ));; homeResponse.setRideStatus(-1); - if(homeResponse.getDepositStatus()==Constants.goodsorderStatus.pay) { + //鏌ヨ鏄惁瀛樺湪 宸叉敮浠樼殑 鎶奸噾璁㈠崟 + Goodsorder goodsorder = this.goodsorderMapper.selectOne(new QueryWrapper<Goodsorder>() + .eq("member_id",memberId) + .eq("status",Constants.goodsorderStatus.pay) + .last(" limit 1 ")); + if(!Objects.isNull(goodsorder)&&goodsorder.getStatus().equals(Constants.goodsorderStatus.pay)){ + homeResponse.setDepositStatus(Constants.goodsorderStatus.pay); + homeResponse.setGoodsOrderId(goodsorder.getId()); //鏌ヨ褰撳墠楠戣鐘舵�� - MemberRides memberRides = memberRidesJoinMapper.selectOne(new QueryWrapper<MemberRides>().eq("member_id", memberId) - .orderByDesc(" create_date ") + MemberRides memberRides = memberRidesJoinMapper.selectOne(new QueryWrapper<MemberRides>().lambda() + .eq(MemberRides::getMemberId, memberId) + .eq(MemberRides::getOrdreId,goodsorder.getId()) + .orderByDesc(MemberRides::getCreateDate) .last(" limit 1 ")); if (!Objects.isNull(memberRides)) { homeResponse.setRideStatus(memberRides.getStatus()); @@ -271,14 +274,15 @@ if(!Objects.isNull(baseParam)){ memberRidesResponse.setBikeType(baseParam.getName()); } + memberRidesResponse.setRideId(memberRides.getId()); memberRidesResponse.setRideStartTime(memberRides.getRentDate()); memberRidesResponse.setRideEndTime(memberRides.getBackDate()); memberRidesResponse.setRideTime(DateUtil.betweenMin(memberRidesResponse.getRideStartTime(),memberRidesResponse.getRideEndTime())); memberRidesResponse.setBikeCode(memberRides.getBikeCode()); memberRidesResponse.setBasePrice(memberRides.getBasePrice()); memberRidesResponse.setBaseTime(memberRides.getBaseTime()); - memberRidesResponse.setUnitTime(memberRidesResponse.getUnitTime()); - memberRidesResponse.setUnitPrice(memberRidesResponse.getUnitPrice()); + memberRidesResponse.setUnitTime(memberRides.getUnitTime()); + memberRidesResponse.setUnitPrice(memberRides.getUnitPrice()); homeResponse.setMemberRidesResponse(memberRidesResponse); } } @@ -332,12 +336,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 ); } @@ -355,44 +353,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()); @@ -442,7 +414,7 @@ transactions.setCreateDate(new Date()); transactions.setIsdeleted(Constants.ZERO); transactions.setOrderId(goodsorder.getId()); - transactions.setMoney(goodsorder.getMoney()); + transactions.setMoney(goodsorder.getMoney().subtract(new BigDecimal(refundMoney))); transactions.setType(Constants.TRANSACTIONS_TYPE.CONSUMPTION.getKey()); transactions.setDoneDate(new Date()); transactions.setTitle(Constants.TRANSACTIONS_TYPE.CONSUMPTION.getName()); @@ -455,6 +427,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; + //鍙栨渶楂樿溅鍨嬭绠楁柟妗堢粨绠楄鍗� + 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());//绱楠戣锛堣璐癸級鏃堕暱 + } + MemberRides topRides =memberRides.get(0); + 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(); @@ -485,8 +501,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) @@ -562,38 +580,46 @@ } @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 =s.getBackDate(); + 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()); memberRidesResponse.setBasePrice(s.getBasePrice()); memberRidesResponse.setBaseTime(s.getBaseTime()); - memberRidesResponse.setUnitPrice(s.getUnitTime()); + memberRidesResponse.setUnitPrice(s.getUnitPrice()); 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