server/platform/src/main/resources/application.yml
@@ -9,7 +9,7 @@ # application: # name: parkbike profiles: active: pro active: dev # JSONè¿åé ç½® jackson: # é»è®¤æ¶åº server/services/src/main/java/com/doumee/core/constants/Constants.java
@@ -34,6 +34,7 @@ public static final String MINI_PROGRAMME ="MINI_PROGRAMME" ; public static final String FREE_RENT_TIME ="FREE_RENT_TIME" ; public static final String LOW_VOLTAGE ="LOW_VOLTAGE" ; public static final String ACCESS_TOKEN ="ACCESS_TOKEN" ; public static final String IMG_DIR = "IMG_DIR"; public static final String FILE_DIR ="FILE_DIR" ; @@ -220,6 +221,8 @@ public static final String BUSINESS_STARTTIME = "BUSINESS_STARTTIME"; //å°ç¨åºæ¯æ¥æå¡ç»ææ¶é´ public static final String BUSINESS_ENDTIME = "BUSINESS_ENDTIME"; //çµè½¦äºç»´ç åç¼ public static final String ELECTRICITY_PREFIX = "ELECTRICITY_PREFIX"; //éééç¥å°å public static final String DINGDING_URL = "DINGDING_URL"; server/services/src/main/java/com/doumee/dao/business/DiscountMemberMapper.java
@@ -2,11 +2,12 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.doumee.dao.business.model.DiscountMember; import com.github.yulichang.base.mapper.MPJJoinMapper; /** * @author æ±è¹è¹ * @date 2025/02/17 09:43 */ public interface DiscountMemberMapper extends BaseMapper<DiscountMember> { public interface DiscountMemberMapper extends MPJJoinMapper<DiscountMember> { } server/services/src/main/java/com/doumee/dao/business/model/DiscountMember.java
@@ -146,6 +146,14 @@ @TableField(exist = false) private Integer useTimes; @ApiModelProperty(value = "ä½¿ç¨æ¶é¿") @TableField(exist = false) private Integer useTime; @ApiModelProperty(value = "å©ä½æ¶é¿",hidden = true) @TableField(exist = false) private Integer surplusTime; @ApiModelProperty(value = "éªè¡è®°å½") @TableField(exist = false) private List<DiscountLog> discountLogList; server/services/src/main/java/com/doumee/dao/business/web/request/OpenElecBikeRequest.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,23 @@ package com.doumee.dao.business.web.request; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; /** * Created by IntelliJ IDEA. * * @Author : Rk * @create 2023/10/9 11:04 */ @Data @ApiModel("çµè½¦å¼é请æ±åæ°") public class OpenElecBikeRequest { @ApiModelProperty(value = "ç¨æ·ç¼ç ï¼å ³èmember表ï¼",hidden = true) private String memberId; @ApiModelProperty(value = "车è¾ç¼å·") private String code; } server/services/src/main/java/com/doumee/dao/business/web/response/MemberRidesResponse.java
@@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.annotation.TableField; import com.doumee.core.annotation.excel.ExcelColumn; import com.doumee.dao.business.model.DiscountMember; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -43,11 +44,18 @@ @ApiModelProperty(value = "计价è§å") private String priceRole; @ApiModelProperty(value = "车å") private String bikeType; @ApiModelProperty(value = "ç¼å·") private String bikeCode; @ApiModelProperty(value = "订åç±»åï¼0=èªè¡è½¦è®¢åï¼1=çµè½¦è®¢å") private Integer ridesType; @ApiModelProperty(value = "çµéç¶æï¼0=çµéå è¶³ï¼1=çµéä½") private Integer voltageStatus; @ApiModelProperty(value = "èµ·æ¥ä»·", example = "1") private BigDecimal basePrice; @@ -63,4 +71,8 @@ @ApiModelProperty(value = "éªè¡è®°å½ä¸»é®") private String rideId; @ApiModelProperty(value = "å¥é¤å¡ä¿¡æ¯") private DiscountMember discountMember; } server/services/src/main/java/com/doumee/dao/business/web/response/RidesDetailResponse.java
@@ -29,6 +29,13 @@ @ApiModelProperty(value = "计费æ¶é¿") private Integer duration; @ApiModelProperty(value = "æ¯å¦åå¨éªè¡å¡æµæ£:0=å¦ï¼1=æ¯ï¼") private Integer haveDisCount; @ApiModelProperty(value = "æµæ£éé¢") private BigDecimal disCountMoney; @ApiModelProperty(value = "éªè¡è®°å½") private List<MemberRidesResponse> memberRidesResponseList; } server/services/src/main/java/com/doumee/service/business/GoodsorderService.java
@@ -151,6 +151,7 @@ */ GoodsorderDetailDTO getGoodsorderDetailDTO(String id); Integer getVoltageStatus(Bikes bikes); /** * å¥é¤å¡è®¢å详æ * @param id @@ -159,7 +160,6 @@ GoodsorderDetailVO getGoodsorderDetailForDisCount(String id); /** * 强å¶ç»ç®è®¢å * @param id * @return */ void closeGoodsorder(Goodsorder order,int type ); @@ -169,7 +169,6 @@ /** * 鿬¾ * @param orderId */ void backGoodsorder(GoodsorderBackDTO goodsorderBackDTO); List<MemberRides> getMemberRidesForClose(String orderid ); server/services/src/main/java/com/doumee/service/business/MemberRidesService.java
@@ -9,6 +9,7 @@ import com.doumee.dao.business.web.response.BikeLogDTO; import com.doumee.dao.business.web.response.MemberRidesDTO; import com.doumee.dao.business.web.response.MemberRidesDetailResponse; import com.doumee.dao.business.web.response.MemberRidesResponse; import java.util.List; @@ -132,6 +133,9 @@ * @return */ MemberRidesDetailResponse refreshLock(String id); MemberRidesResponse getBikeChargingRule(String code, String memberId); void updateDuration(MemberRides memberRides); void forceBack(MemberRides memberRides); server/services/src/main/java/com/doumee/service/business/impl/DiscountServiceImpl.java
@@ -73,7 +73,7 @@ || StringUtils.isBlank(discount.getName()) || Objects.isNull(discount.getType()) || Objects.isNull(discount.getLimitType()) || (Constants.equalsInteger(discount.getLimitTime(),Constants.ONE) && Objects.isNull(discount.getLimitTime())) || (Constants.equalsInteger(discount.getLimitTime(),Constants.ONE) && (Objects.isNull(discount.getLimitTime()) || discount.getLimitTime() > 1440)) || Objects.isNull(discount.getPrice()) || discount.getPrice().compareTo(BigDecimal.ZERO) <= Constants.ZERO || Objects.isNull(discount.getChannel()) || Objects.isNull(discount.getStartDate()) @@ -85,17 +85,14 @@ || (Objects.isNull(discount.getUseHoliday()) || Objects.isNull(discount.getUseWorkday()) ) || (Objects.isNull(discount.getIsbike()) || Objects.isNull(discount.getIselecbike()) ) ){ throw new BusinessException(ResponseStatus.SERVER_ERROR); throw new BusinessException(ResponseStatus.BAD_REQUEST); } if(discount.getStartDate().getTime()>discount.getEndDate().getTime()){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"é宿¶æ®µä¿¡æ¯é误"); } //åºå®æ¥æçæ if(Constants.equalsInteger(discount.getUseType(),Constants.ZERO) && ( discount.getUseStartDate().getTime()>discount.getUseEndDate().getTime() || discount.getUseStartDate().getTime() < discount.getStartDate().getTime() || discount.getUseEndDate().getTime() > discount.getEndDate().getTime() ) ){ ( discount.getUseStartDate().getTime()>discount.getUseEndDate().getTime()) ){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"ä½¿ç¨æ¶æ®µä¿¡æ¯é误"); } @@ -165,6 +162,7 @@ @Override public Discount findById(String id) { Discount discount = discountJoinMapper.selectOne(new MPJLambdaWrapper<Discount>() .selectAll(Discount.class) .select(" (select count(1) from goodsorder g where g.obj_type = 0 and g.obj_id = t.id and g.pay_status = 1 ) ",Discount::getSaleNum) .leftJoin(SystemUser.class,SystemUser::getId,Discount::getCreator) .eq(Discount::getId,id) server/services/src/main/java/com/doumee/service/business/impl/GoodsorderServiceImpl.java
@@ -92,6 +92,9 @@ @Autowired private SystemDictDataBiz systemDictDataBiz; @Autowired private BikesMapper bikesMapper; @Autowired @@ -121,6 +124,10 @@ @Autowired RefundService refundService; @Autowired private HolidaysMapper holidaysMapper; @Override public String create(Goodsorder goodsorder) { @@ -346,16 +353,11 @@ } @Override public long count(Goodsorder goodsorder) { QueryWrapper<Goodsorder> wrapper = new QueryWrapper<>(goodsorder); return goodsorderMapper.selectCount(wrapper); } @Override public HomeResponse getHome(String memberId){ @@ -373,6 +375,7 @@ homeResponse.setIsStopServe(this.checkTemporaryStop()?1:0); homeResponse.setIsBusiness(this.checkBusiness()?0:1); homeResponse.setUnBusinessTips("è¥ä¸æ¶é´ä¸º"+ systemDictDataBiz.queryByCode(Constants.MINI_PROGRAMME,Constants.BUSINESS_STARTTIME).getCode() +" ~ "+systemDictDataBiz.queryByCode(Constants.MINI_PROGRAMME,Constants.BUSINESS_ENDTIME).getCode()+"ï¼è¯·å¨è¥ä¸æ¶é´å ä½¿ç¨æ¬ç³»ç»"); homeResponse.setAdList(adMapper.selectList(new QueryWrapper<Ad>() .eq("isdeleted",Constants.ZERO) .eq("status",Constants.ZERO) @@ -423,13 +426,14 @@ .ne(MemberRides::getStatus,Constants.MEMBER_RIDES_STATUS.LOCKING_DEFEAT.getKey()) .orderByDesc(MemberRides::getCreateDate) .last(" limit 1 ")); if (!Objects.isNull(memberRides)) { if (Objects.nonNull(memberRides)) { homeResponse.setRideStatus(memberRides.getStatus()); MemberRidesResponse memberRidesResponse = new MemberRidesResponse(); BaseParam baseParam = baseParamMapper.selectById(memberRides.getParamId()); if(!Objects.isNull(baseParam)){ memberRidesResponse.setBikeType(baseParam.getName()); } memberRidesResponse.setRidesType(memberRides.getType()); memberRidesResponse.setRideId(memberRides.getId()); memberRidesResponse.setRideStartTime(memberRides.getRentDate()); memberRidesResponse.setRideStartTimeStr(DateUtil.DateToStr(memberRides.getRentDate(),"HH:mm")); @@ -445,13 +449,27 @@ memberRidesResponse.getBasePrice(),memberRidesResponse.getBaseTime(), memberRidesResponse.getUnitPrice() ,memberRidesResponse.getUnitTime())); if(Constants.equalsInteger(memberRides.getType(),Constants.ONE)){ Bikes bikes = bikesMapper.selectOne(new QueryWrapper<Bikes>().lambda().eq(Bikes::getCode,memberRides.getBikeCode()).eq(Bikes::getType,Constants.ONE).last("limit 1")); memberRidesResponse.setVoltageStatus(this.getVoltageStatus(bikes)); } //æ¥è¯¢å½åçéªè¡å¥é¤ memberRidesResponse.setDiscountMember(this.getUseDiscount(memberId,Constants.ZERO)); homeResponse.setMemberRidesResponse(memberRidesResponse); } } } return homeResponse; } @Override public Integer getVoltageStatus(Bikes bikes){ //ä½çµéçµå BigDecimal lowVoltage = new BigDecimal(systemDictDataBiz.queryByCode(Constants.MINI_PROGRAMME, Constants.LOW_VOLTAGE).getCode()); if(Objects.isNull(bikes)||Objects.isNull(bikes.getVoltage())||Objects.isNull(lowVoltage)){ return 0; } return bikes.getVoltage().compareTo(lowVoltage)>0?0:1; } @@ -596,7 +614,7 @@ freeTime = Integer.parseInt(systemDictDataBiz.queryByCode(Constants.MINI_PROGRAMME, Constants.FREE_RENT_TIME).getCode()); }catch (Exception e){ } closeMoney = getCloseMoneyByRides(memberRides,freeTime,true,goodsorder.getMoney()).getAmount(); closeMoney = getCloseMoneyByRides(memberRides,freeTime,true,goodsorder.getMoney(),goodsorder.getMemberId()).getAmount(); //å®é ç»ç®ä»·æ ¼ï¼è®°å½å¨æé«è½¦åè®°å½ä¸ // memberRides.get(0).setActualPrice(closeMoney); } @@ -818,11 +836,13 @@ transactionsMapper.insert(transactions); } private RidesDetailResponse getCloseMoneyByRides(List<MemberRides> memberRides,int freeTime,boolean isClose,BigDecimal yjMoney) { private RidesDetailResponse getCloseMoneyByRides(List<MemberRides> memberRides,int freeTime,boolean isClose,BigDecimal yjMoney,String memberId) { RidesDetailResponse ridesDetailResponse = new RidesDetailResponse(); ridesDetailResponse.setHaveDisCount(Constants.ZERO); 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()))){ @@ -836,7 +856,8 @@ } } } // MemberRides topRides =memberRides.get(0); //计ç®åºä»éé¢ if( topRides != null){ int baseTime =Constants.formatIntegerNum(topRides.getBaseTime()); closeMoney = Constants.formatDecimalNum(topRides.getBasePrice()); @@ -850,6 +871,49 @@ } } topRides.setActualPrice(closeMoney); } //æ¥è¯¢æ¯å¦åå¨å¥é¤ä¿¡æ¯ DiscountMember discountMember = this.getUseDiscount(memberId,durationSum); //è®¡ç®æµæ£éé¢ if(Objects.nonNull(discountMember) && discountMember.getSurplusTime() > Constants.ZERO && Objects.nonNull(topRides)){ //å卿µæ£è®°å½ DiscountLog discountLog = new DiscountLog(); discountLog.setIsdeleted(Constants.ZERO); discountLog.setCreator(memberId); discountLog.setCreateDate(new Date()); discountLog.setDiscountMemberId(discountMember.getId()); discountLog.setType(Constants.ZERO); discountLog.setInfo("éªè¡æµæ£"); discountLog.setEditInfo("éªè¡æµæ£"); discountLog.setGoodsorderId(topRides.getOrdreId()); //妿éªè¡æ¶é´å°äºçäºå©ä½æ¶é´ åç´æ¥æ·»å éªè¡å¡ä½¿ç¨æ°æ® ä¿®æ£å®é æ¯ä»éé¢ if(discountMember.getSurplusTime() >= durationSum){ discountLog.setRideTime(durationSum); discountLog.setRidePrice(closeMoney); discountLogMapper.insert(discountLog); topRides.setActualPrice(BigDecimal.ZERO); closeMoney = BigDecimal.ZERO; }else{ int baseTime =Constants.formatIntegerNum(topRides.getBaseTime()); BigDecimal closeDisCountMoney = Constants.formatDecimalNum(topRides.getBasePrice()); //妿æ¯ä¸å£ä»·æ¹å¼ï¼ä»·æ ¼ç´æ¥ä¸ºä¸å£ä»·baseMoney,妿䏿¯è®¡ç®æ£å¸¸ä»·æ ¼ Integer durationDisCountSum = durationSum - discountMember.getSurplusTime(); discountLog.setRideTime(discountMember.getSurplusTime()); if(baseTime != -1){//䏿¯ä¸å£ä»· if(durationDisCountSum > baseTime && Constants.formatIntegerNum(topRides.getUnitTime())>0){ //å¦æè¶ åºäºèµ·æ¥ä»·æ ¼ï¼è®¡ç®è¶ åºä»·æ ¼ BigDecimal unit = new BigDecimal(durationSum-baseTime).divide(new BigDecimal(topRides.getUnitTime()), 0, BigDecimal.ROUND_UP); //计ç®éé¢ç´¯è®¡è¶ åºé¨é¨ä»·æ ¼ï¼è¶ åºæ¶é´åä½*è¶ åºå使¶é´ä»·æ ¼ï¼ closeDisCountMoney = closeDisCountMoney.add(unit.multiply(Constants.formatDecimalNum(topRides.getUnitPrice()))); } discountLog.setRidePrice(closeMoney.subtract(closeDisCountMoney)); }else{ discountLog.setRidePrice(BigDecimal.ZERO); } } discountLogMapper.insert(discountLog); ridesDetailResponse.setHaveDisCount(Constants.ONE); ridesDetailResponse.setDisCountMoney(discountLog.getRidePrice()); } //å¦æè®¢åä»·æ ¼å°é¡¶äºï¼å订å ä»·æ ¼ if(Constants.compareBigdecimal(closeMoney, yjMoney) ==1){ @@ -1082,7 +1146,7 @@ return memberRidesResponse; }).collect(Collectors.toList()); //累计åé¢ç®ç»ç®éé¢ RidesDetailResponse ridesDetailResponse = getCloseMoneyByRides(memberRides,freeTime,false,goodsorder.getMoney()); RidesDetailResponse ridesDetailResponse = getCloseMoneyByRides(memberRides,freeTime,false,goodsorder.getMoney(),goodsorder.getMemberId()); if(Constants.formatIntegerNum(goodsorder.getStatus())!= Constants.goodsorderStatus.pay){ //妿éå·²æ¯ä»ä½æªç»ç®ï¼ä½¿ç¨è®¢åéé¢ ridesDetailResponse.setAmount(goodsorder.getCloseMoney()); @@ -1494,4 +1558,75 @@ } /** * è·åå½åå¯ä½¿ç¨çå¥é¤ * @param memberId */ public DiscountMember getUseDiscount(String memberId,Integer driveTime){ String today = DateUtil.getToday(); //夿ä»å¤©æ¯å¦ä¸ºè忥 Holidays holidays = new Holidays(); holidays.setHoliday(today); holidays.setIsdeleted(Constants.ZERO); //æ¯å¦æ¯è忥 1=æ¯ï¼0=å¦ Integer holiday = holidaysMapper.selectCount(new QueryWrapper<>(holidays))>0?1:0; List<DiscountMember> discountMemberList = discountMemberMapper.selectJoinList(DiscountMember.class,new MPJLambdaWrapper<DiscountMember>() .selectAll(DiscountMember.class) .select(" select sum(d.ride_time) from discount_log d where and d.discount_member_id = discount_member.id " + "and d.isdeleted = 0 and d.type = 0 and EXTRACT(DAY FROM d.create_date) = EXTRACT(DAY FROM CURRENT_DATE) " , DiscountMember::getUseTime)//æ¥è¯¢ä»æ¥å·²ä½¿ç¨æ¶é´ .eq(DiscountMember::getStatus,Constants.ZERO) .eq(DiscountMember::getMemberId,memberId) .ge(DiscountMember::getUseStartDate, Utils.Date.getStart(DateUtil.StringToDate(today))) .le(DiscountMember::getUseEndDate, Utils.Date.getEnd(DateUtil.StringToDate(today))) .eq(Constants.equalsInteger(holiday,Constants.ONE),DiscountMember::getUseHoliday,Constants.ONE) .orderByDesc(DiscountMember::getLimitType) .orderByDesc(DiscountMember::getLimitTime) ); if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(discountMemberList)){ //æ¥çæ¯å¦ææ æéçå¥é¤ 妿åå¨ åç´æ¥è¿åæ æéçå¥é¤ Optional<DiscountMember> optional = discountMemberList.stream().filter(i->Constants.equalsInteger(i.getLimitType(),Constants.ZERO)).findAny(); if(optional.isPresent()){ return optional.get(); } //å¤çå©ä½æ¶é´ for (DiscountMember discountMember:discountMemberList) { if(Objects.isNull(discountMember.getUseTime())){ discountMember.setSurplusTime(discountMember.getLimitTime()); }else if(discountMember.getUseTime()>=discountMember.getLimitTime()){ discountMember.setSurplusTime(0); }else{ discountMember.setSurplusTime(discountMember.getLimitTime() - discountMember.getUseTime()); } } //éªè¡ä¸ æ¾ç¤ºå©ä½æ¶é´æå¤§ç if(Constants.equalsInteger(driveTime,Constants.ZERO)){ List<DiscountMember> list = discountMemberList.stream().filter(i->i.getSurplusTime()>0).collect(Collectors.toList()); if(list.size()>Constants.ZERO){ //d1å¨ååååº åä¹éåº list.sort((d1,d2)-> Integer.compare(d2.getSurplusTime(),d1.getSurplusTime())); } return list.get(Constants.ZERO); }else{ //æ æ æéçå¥é¤ ä¼å æ¥è¯¢å©ä½æ¶é¿å¤§äºéªè¡æ¶é¿çä¿¡æ¯(åæ¶é´æå°çå¥é¤) åæ¥è¯¢å°äºéªè¡æ¶é¿çå¥é¤ List<DiscountMember> list = discountMemberList.stream().filter(i->i.getSurplusTime()>=driveTime).collect(Collectors.toList()); if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(list)){ if(list.size()>Constants.ZERO){ //d1å¨ååååº åä¹éåº list.sort((d1,d2)-> Integer.compare(d2.getSurplusTime(),d1.getSurplusTime())); } return list.get(Constants.ZERO); } list = discountMemberList.stream().filter(i->i.getSurplusTime()<driveTime).collect(Collectors.toList()); if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(list)){ if(list.size()>Constants.ZERO){ list.sort((d1,d2)-> Integer.compare(d1.getSurplusTime(),d2.getSurplusTime())); } return list.get(Constants.ZERO); } } } return null; } } server/services/src/main/java/com/doumee/service/business/impl/MemberRidesServiceImpl.java
@@ -27,6 +27,7 @@ import com.doumee.dao.business.web.response.BikeLogDTO; import com.doumee.dao.business.web.response.MemberRidesDTO; import com.doumee.dao.business.web.response.MemberRidesDetailResponse; import com.doumee.dao.business.web.response.MemberRidesResponse; import com.doumee.dao.system.SystemDictDataMapper; import com.doumee.dao.system.model.SystemDictData; import com.doumee.service.business.DeviceService; @@ -509,7 +510,7 @@ //夿æ¯å¦å¤äºè¥ä¸æ¶é´ goodsorderService.checkBusiness(); //æ¥è¯¢æ¯å¦å¤äºéªè¡ä¸ if (memberRidesMapper.selectCount(new QueryWrapper<MemberRides>().eq("member_id", memberId).in("status", 0, 1)) > Constants.ZERO) { if (memberRidesMapper.selectCount(new QueryWrapper<MemberRides>().eq("member_id", memberId).in("status", 0, 1, 4)) > Constants.ZERO) { throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "åå¨éªè¡ä¸è½¦è¾ï¼æ æ³æ«ç "); } String[] codes = code.split("/"); @@ -519,10 +520,6 @@ .eq(Locks::getIsdeleted, Constants.ZERO) .last("limit 1")); if (Objects.isNull(locks)) { // locks =new Locks(); // locks.setCode(codes[1]); // locks.setSiteId(codes[0]); // deviceService.getLockInfo(locks); throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "æ«ç æ æï¼è¯¥ç«ç¹é头æä¸æ¯æååºä¸å¡å¦ï¼"); } //æ¥è¯¢é头æ¯å¦åå¨è½¦è¾ 以忝妿£å¸¸ @@ -573,7 +570,6 @@ }finally { cacheOpenLock.remove(code); } } private boolean isValidePricingType(Locks locks,MemberRides memberRides ) { @@ -638,6 +634,54 @@ return true; } public void dealMemberRidesData(String paramId,MemberRides memberRides){ Date date =new Date(); QueryWrapper<PricingParam> param = new QueryWrapper<>(); param.lambda().eq(PricingParam::getStatus,Constants.ZERO); param.lambda().eq(PricingParam::getIsdeleted,Constants.ZERO); param.lambda().le(PricingParam::getStartDate,date); param.lambda().ge(PricingParam::getEndDate,date); param.lambda().last(" limit 1" ) ; param.lambda().orderByAsc(PricingParam::getSortnum); //æ¥è¯¢ä¼å 级æé«ï¼æåºç æå°çï¼å¯ç¨é ä»·æ¹æ¡ PricingParam pp = pricingParamMapper.selectOne(param); if(pp == null){ //å¦æè½¦è¾æªè®¾ç½®é ä»·æ¹æ¡ï¼æç¤ºå¼éå¤±è´¥ï¼ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), " è¯¥è½¦åææ¶ä¸è½å车æä½å¦ï¼è¯·æ´æ¢å ¶ä»è½¦åéè¯å¦ï¼"); } QueryWrapper<PricingDetail> detail = new QueryWrapper<>(); detail.lambda().eq(PricingDetail::getBikeTypeId,paramId); detail.lambda().eq(PricingDetail::getPricePramId,pp.getId()); detail.lambda().eq(PricingDetail::getIsdeleted,Constants.ZERO); detail.lambda().last(" limit 1" ) ; //æ¥è¯¢ä¼å 级æé«ï¼æåºç æå°çï¼å¯ç¨é ä»·æ¹æ¡ PricingDetail pricingDetail = pricingDetailMapper.selectOne(detail); if(pricingDetail == null){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), " è¯¥è½¦åææ¶ä¸è½å车æä½å¦ï¼è¯·æ´æ¢å ¶ä»è½¦åéè¯å¦~"); } String nowDate = DateUtil.getDateLong(date); Holidays holidays = new Holidays(); holidays.setHoliday(nowDate); holidays.setIsdeleted(Constants.ZERO); //æ£æ¥æ¯å¦è忥 if(holidaysMapper.selectCount(new QueryWrapper<>(holidays)) >0){ //妿æ¯è忥 memberRides.setBasePrice(pricingDetail.getHolidayBasePrice()); memberRides.setBaseTime(pricingDetail.getHolidayBaseTime()); memberRides.setUnitPrice(pricingDetail.getHolidayUnitPrice()); memberRides.setUnitTime(pricingDetail.getHolidayUnitTime()); memberRides.setIsHoliday(Constants.ONE); }else{ //妿æ¯å·¥ä½æ¥ memberRides.setBasePrice(pricingDetail.getBasePrice()); memberRides.setBaseTime(pricingDetail.getBaseTime()); memberRides.setUnitPrice(pricingDetail.getUnitPrice()); memberRides.setUnitTime(pricingDetail.getUnitTime()); memberRides.setIsHoliday(Constants.ZERO); } } @Override public MemberRidesDetailResponse refreshLock(String id){ MemberRides memberRides = memberRidesMapper.selectById(id); @@ -649,6 +693,99 @@ return memberRidesDetailResponse; } /** * è·å车è¾è½¦åçæ°æ®ä¿¡æ¯ */ @Override public MemberRidesResponse getBikeChargingRule(String code,String memberId){ if(StringUtils.isBlank(code)){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"è¯·æ«ææ£ç¡®ç车è¾ç "); } //æ¥è¯¢æ¯å¦å¤äºéªè¡ä¸ if (memberRidesMapper.selectCount(new QueryWrapper<MemberRides>().eq("member_id", memberId).in("status", 0, 1 ,4 )) > Constants.ZERO) { throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "åå¨éªè¡ä¸è½¦è¾ï¼æ æ³æ«ç "); } Integer bikeType = Constants.ZERO; //æ ¹æ®åç¼åºåæ¯å¦ä¸ºçµè½¦äºç»´ç if(code.startsWith(systemDictDataBiz.queryByCode(Constants.MINI_PROGRAMME,Constants.ELECTRICITY_PREFIX).getCode())){ bikeType = Constants.ONE; } MemberRidesResponse memberRidesResponse = new MemberRidesResponse(); Bikes bike= new Bikes(); if(Constants.equalsInteger(bikeType,Constants.ZERO)){ if(StringUtils.isBlank(code) || code.split("/").length != 2){ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "对ä¸èµ·ï¼è¯¥ç«ç¹ç¼å·ä¸åå¨ï¼è¯·å°è¯æ´æ¢è½¦è¾ï¼"); } //夿æ¯å¦å¤äºè¥ä¸æ¶é´ goodsorderService.checkBusiness(); String[] codes = code.split("/"); Locks locks = locksMapper.selectOne(new QueryWrapper<Locks>() .lambda().eq(Locks::getCode, codes[1]) .eq(Locks::getSiteId, codes[0]) .eq(Locks::getIsdeleted, Constants.ZERO) .last("limit 1")); if (Objects.isNull(locks)) { throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "æ«ç æ æï¼è¯¥ç«ç¹é头æä¸æ¯æååºä¸å¡å¦ï¼"); } //æ¥è¯¢é头æ¯å¦åå¨è½¦è¾ 以忝妿£å¸¸ if (Constants.formatIntegerNum(locks.getStatus())!=Constants.ZERO) { locks =new Locks(); locks.setCode(Constants.formatIntegerFromStr(codes[1])); locks.setSiteId(codes[0]); deviceService.getLockInfo(locks); throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "å½åè½¦è¾ææ¶æ æ³ä½¿ç¨ï¼è¯·ç¨åéè¯ææ´æ¢å ¶å®è½¦è¾~"); } if (StringUtils.isBlank(locks.getBikeCode())) { locks =new Locks(); locks.setCode(Constants.formatIntegerFromStr(codes[1])); locks.setSiteId(codes[0]); locks.setId(codes[1]); deviceService.getLockInfo(locks); throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "å½åè½¦è¾ææ¶æ æ³ä½¿ç¨ï¼è¯·ç¨åéè¯ææ´æ¢å ¶å®è½¦è¾ï¼"); } bike.setLockId(locks.getCode()); bike.setSiteId(locks.getSiteId()); //æ¥è¯¢è½¦è¾ä¿¡æ¯ bike = bikesMapper.selectOne(new QueryWrapper<>(bike).last("limit 1")); if(bike == null && StringUtils.isBlank(bike.getParamId())){ //å¦æè½¦è¾ç±»åæ¯ç©º throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), " è¯¥è½¦åææ¶ä¸è½å车æä½å¦ï¼è¯·æ´æ¢å ¶ä»è½¦åéè¯ï¼"); } }else{ //æ¥è¯¢è½¦è¾ç±»å bike = bikesMapper.selectOne(new QueryWrapper<Bikes>().lambda().eq(Bikes::getCode,code).eq(Bikes::getIsdeleted,Constants.ZERO).last(" limit 1 ")); if(Objects.isNull(bike)){ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"è¯·æ«ææ£ç¡®ç车è¾ç ï¼ãæªæ¥è¯¢å°è½¦è¾ä¿¡æ¯ã"); } if(StringUtils.isBlank(bike.getParamId())){ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"车è¾ç±»åå¼å¸¸ï¼è¯·è系管çåï¼"); } memberRidesResponse.setVoltageStatus(goodsorderService.getVoltageStatus(bike)); } BaseParam baseParam = baseParamMapper.selectById(bike.getParamId()); if(Objects.isNull(baseParam)){ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"å½å车è¾ç±»åæ æ³ç§èµï¼è¯·è系管çåï¼"); } MemberRides memberRides = new MemberRides(); this.dealMemberRidesData(baseParam.getId(),memberRides); memberRidesResponse.setBikeCode(memberRides.getBikeCode()); memberRidesResponse.setBasePrice(memberRides.getBasePrice()); memberRidesResponse.setBaseTime(memberRides.getBaseTime()); memberRidesResponse.setUnitTime(memberRides.getUnitTime()); memberRidesResponse.setUnitPrice(memberRides.getUnitPrice()); memberRidesResponse.setPriceRole(PricingDetailServiceImpl.getRoleNameByParam( memberRidesResponse.getBasePrice(),memberRidesResponse.getBaseTime(), memberRidesResponse.getUnitPrice() ,memberRidesResponse.getUnitTime())); return memberRidesResponse; } /** * é头信æ¯ä¸æ¥ * @param locks server/web/src/main/java/com/doumee/api/web/BusinessApi.java
@@ -11,9 +11,11 @@ import com.doumee.core.model.PageWrap; import com.doumee.dao.business.model.*; import com.doumee.dao.business.web.request.BackElecBikeRequest; import com.doumee.dao.business.web.request.OpenElecBikeRequest; import com.doumee.dao.business.web.request.RepairRequest; import com.doumee.dao.business.web.response.HomeResponse; import com.doumee.dao.business.web.response.MemberRidesDetailResponse; import com.doumee.dao.business.web.response.MemberRidesResponse; import com.doumee.dao.business.web.response.RidesDetailResponse; import com.doumee.dao.system.model.SystemDictData; import com.doumee.jtt808.web.service.Jtt808Service; @@ -185,6 +187,20 @@ return ApiResponse.success("æä½æå"); } @PreventRepeat @LoginRequired @ApiOperation(value = "æ«ç è·å车è¾ä¿¡æ¯", notes = "å°ç¨åºç«¯") @GetMapping("/getBikeChargingRule") @ApiImplicitParams({ @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "ç¨æ·tokenå¼", required = true), @ApiImplicitParam(paramType = "query", dataType = "String", name = "code", value = "é头ç ãçµè½¦ç ", required = true) }) public ApiResponse<MemberRidesResponse> getBikeChargingRule(@RequestParam String code) { return ApiResponse.success("æä½æå",memberRidesService.getBikeChargingRule(code,getMemberId())); } @PreventRepeat @LoginRequired @ApiOperation(value = "æ«ç è§£é", notes = "å°ç¨åºç«¯") @@ -232,6 +248,7 @@ return ApiResponse.success("æ¥è¯¢æå",systemDictDataBiz.queryByCode(dicCode,label)); } @LoginRequired @ApiOperation(value = "çµè½¦ç«ç¹è¿è½¦", notes = "çµè½¦ç«ç¹è¿è½¦") @PostMapping("/backElecBike") public ApiResponse backElecBike(@RequestBody BackElecBikeRequest param) { @@ -239,6 +256,8 @@ jtt808Service.backElecBike(param); return ApiResponse.success( null); } @LoginRequired @ApiOperation(value = "çµè½¦ä¸´æ¶å车", notes = "çµè½¦ä¸´æ¶å车") @PostMapping("/pauseElecBike") public ApiResponse pauseElecBike(@RequestBody BackElecBikeRequest param) { @@ -246,4 +265,25 @@ jtt808Service.pauseElecBike(param); return ApiResponse.success( null); } @LoginRequired @ApiOperation(value = "çµè½¦å¼é", notes = "çµè½¦å¼é") @PostMapping("/openElecBike") public ApiResponse openElecBike(@RequestBody OpenElecBikeRequest param) { param.setMemberId(getMemberId()); jtt808Service.openLock(param); return ApiResponse.success( null); } @LoginRequired @ApiOperation(value = "临åå¼é", notes = "临åå¼é") @PostMapping("/pauseOpenElecBike") public ApiResponse pauseOpenElecBike(@RequestBody BackElecBikeRequest param) { param.setMemberId(getMemberId()); jtt808Service.pauseOpenElecBike(param); return ApiResponse.success( null); } } server/web/src/main/java/com/doumee/jtt808/web/service/Jtt808Service.java
@@ -20,14 +20,18 @@ import com.doumee.dao.business.model.*; import com.doumee.dao.business.web.request.BackElecBikeRequest; import com.doumee.dao.business.web.request.LocaltionDTO; import com.doumee.dao.business.web.request.OpenElecBikeRequest; import com.doumee.dao.business.web.response.MemberRidesDetailResponse; import com.doumee.jtt808.web.endpoint.MessageManager; import com.doumee.service.business.GoodsorderService; import com.doumee.service.business.PricingRuleService; import com.github.yulichang.wrapper.MPJLambdaWrapper; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.ConcurrentReferenceHashMap; import org.springframework.web.bind.annotation.RequestBody; import org.yzh.commons.model.APIResult; import org.yzh.protocol.commons.transform.AttributeKey; @@ -42,6 +46,7 @@ import java.util.Date; import java.util.List; import java.util.Objects; import java.util.concurrent.ConcurrentMap; @Service public class Jtt808Service { @@ -53,40 +58,26 @@ private BikesMapper bikesMapper; @Autowired private DiscountMemberMapper discountMemberMapper; @Autowired private DiscountLogMapper discountLogMapper; @Autowired GoodsorderJoinMapper goodsorderJoinMapper; @Autowired private SystemDictDataBiz systemDictDataBiz; @Autowired private MemberMapper memberMapper; @Autowired private BaseParamMapper baseParamMapper; @Autowired private RefundMapper refundMapper; @Autowired private RefundJoinMapper refundJoinMapper; @Autowired private SitesMapper sitesMapper; @Autowired private MemberRidesJoinMapper memberRidesJoinMapper; @Autowired private AdMapper adMapper; @Autowired private TransactionsMapper transactionsMapper; private PricingParamMapper pricingParamMapper; @Autowired private WxMiniUtilService wxMiniUtilService; private PricingDetailMapper pricingDetailMapper; @Autowired private HolidaysMapper holidaysMapper; @Autowired PricingRuleService pricingRuleService; @@ -253,6 +244,7 @@ memberRidesJoinMapper.updateById(memberRides);//æ´æ°éªè¡ç¶æä¸ºä¸´åä¸ } private void checkPausePostionBiz(Bikes bike) { int ruleType = 0; try { @@ -326,4 +318,227 @@ .eq(Bikes::getId,bikes.getId())); } } public ConcurrentMap<String,Integer> cacheOpenLock = new ConcurrentReferenceHashMap<>(); @Transactional(rollbackFor = {BusinessException.class}) public MemberRidesDetailResponse openLock(OpenElecBikeRequest openElecBikeRequest){ Member member = memberMapper.selectById(openElecBikeRequest.getMemberId()); if (member == null) { throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "对ä¸èµ·ï¼æ¨çè´¦å·ä¿¡æ¯æ¥è¯¢å¤±è´¥ï¼è¯·è¿åéæ°è¿å ¥å°ç¨åºåè¯ï¼"); } if(Constants.formatIntegerNum(cacheOpenLock.get(openElecBikeRequest.getCode())) == 1){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对ä¸èµ·ï¼è¯¥è½¦è¾å·²è¢«éå®åç¨ï¼è¯·å°è¯æ´æ¢å ¶ä»è½¦è¾ï¼"); } Bikes bike = bikesMapper.selectOne(new QueryWrapper<Bikes>().lambda().eq(Bikes::getCode,openElecBikeRequest.getCode()).eq(Bikes::getIsdeleted,Constants.ZERO) .eq(Bikes::getType,Constants.ONE).last(" limit 1 ")); if(bike == null && StringUtils.isBlank(bike.getParamId())){ //å¦æè½¦è¾ç±»åæ¯ç©º throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), " è¯¥è½¦åææ¶ä¸è½å车æä½å¦ï¼è¯·æ´æ¢å ¶ä»è½¦åéè¯ï¼"); } cacheOpenLock.put(bike.getCode(), 1); try { //夿å½åæ¯å¦å·²æ¯ä»æ¼é Goodsorder goodsorder = goodsorderService.findOneByWrapper(new QueryWrapper<Goodsorder>() .eq("isdeleted", Constants.ZERO) .eq("status", Constants.goodsorderStatus.pay) .eq("member_id", member.getId()) .orderByDesc("create_date") .last("limit 1")); if (Objects.isNull(goodsorder)) { throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "æªæ¯ä»æ¼éï¼æ æ³è¿è¡è¯¥æä½ï¼"); } //夿å½åæ¼éè®¢åæ¯å¦ä¸ºä»æ¥æ¼é if (!DateUtil.DateToStr(goodsorder.getPayDate(), "yyyy-MM-dd").equals(DateUtil.getDate(new Date(), "yyyy-MM-dd"))) { throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "é仿¥æ¼é订åï¼è¯·ç»ç®åéæ°æ¯ä»ï¼"); } //æ¯å¦åå¨å ¶ä»éªè¡è®°å½ if (memberRidesJoinMapper.selectCount(new QueryWrapper<MemberRides>().lambda().eq(MemberRides::getOrdreId,goodsorder.getId())) > Constants.ZERO) { throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "å·²éªè¡å ¶ä»è½¦è¾ï¼æ æ³æ«ç ï¼è¯·ç»ç®åéæ°å°è¯"); } //夿æ¯å¦å¤äºè¥ä¸æ¶é´ goodsorderService.checkBusiness(); //æ¥è¯¢æ¯å¦å¤äºéªè¡ä¸ if (memberRidesJoinMapper.selectCount(new QueryWrapper<MemberRides>().eq("member_id", member.getId()).in("status", 0, 1, 4)) > Constants.ZERO) { throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "åå¨éªè¡ä¸è½¦è¾ï¼æ æ³æ«ç "); } MemberRides memberRides = new MemberRides(); //æ ¹æ®è½¦åæ¥è¯¢è®¡ä»·æ¹æ¡ isValidePricingType(bike,memberRides) ; MemberRidesDetailResponse memberRidesDetailResponse = new MemberRidesDetailResponse(); this.lockBikes(bike.getDeviceSn(),1); //åå¨éªè¡è®°å½ memberRides.setId(Constants.getUUID()); memberRides.setIsdeleted(Constants.ZERO); memberRides.setMemberId(member.getId()); memberRides.setCreateDate(new Date()); memberRides.setOrdreId(goodsorder.getId()); memberRides.setBikeCode(bike.getCode()); memberRides.setRentDate(new Date()); memberRides.setType(Constants.ZERO); memberRides.setBalance(new BigDecimal(systemDictDataBiz.queryByCode(Constants.MINI_PROGRAMME,Constants.RENT_DEPOSIT).getCode())); memberRides.setStatus(Constants.MEMBER_RIDES_STATUS.RIDES_RUNNING.getKey()); memberRides.setCloseStatus(Constants.ZERO); memberRidesJoinMapper.insert(memberRides); BeanUtils.copyProperties(memberRides, memberRidesDetailResponse); return memberRidesDetailResponse; }catch (Exception e){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "å¼é失败ï¼è¯·è系管çå"); }finally { cacheOpenLock.remove(bike.getCode()); } } @Transactional(rollbackFor = {BusinessException.class}) public void pauseOpenElecBike(BackElecBikeRequest param) { Member member = memberMapper.selectById(param.getMemberId()); if (member == null) { throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "对ä¸èµ·ï¼æ¨çè´¦å·ä¿¡æ¯æ¥è¯¢å¤±è´¥ï¼è¯·è¿åéæ°è¿å ¥å°ç¨åºåè¯ï¼"); } Goodsorder gparam = new Goodsorder(); gparam.setMemberId(param.getMemberId()); gparam.setStatus(Constants.goodsorderStatus.pay); Goodsorder goodsorder = goodsorderService.findOne(gparam); if(Objects.isNull(goodsorder)){ throw new BusinessException(ResponseStatus.NO_UNCLOSEED_ORDER.getCode(),"对ä¸èµ·ï¼æªæ¥è¯¢å°æ¨å½åæéªè¡ä¸è®¢åè®°å½"); } //æ¥è¯¢å½åæ£å¨ä¸´åä¸çéªè¡è®°å½ MemberRides memberRides = memberRidesJoinMapper.selectJoinOne(MemberRides.class,new MPJLambdaWrapper<MemberRides>() .eq(MemberRides::getOrdreId,goodsorder.getId()) .eq(MemberRides::getStatus,Constants.MEMBER_RIDES_STATUS.RIDES_PAUSING.getKey()) .selectAll(MemberRides.class) .last("limit 1")); if(memberRides ==null || memberRides.getBikeCode() == null){ throw new BusinessException(ResponseStatus.NO_UNCLOSEED_ORDER.getCode(),"对ä¸èµ·ï¼æªæ¥è¯¢å°æ¨å½åæä¸´åä¸è®°å½"); } Bikes bike = bikesMapper.selectOne(new QueryWrapper<Bikes>().lambda().eq(Bikes::getCode,memberRides.getBikeCode()) .eq(Bikes::getIsdeleted,Constants.ZERO) .eq(Bikes::getType,Constants.ONE) .last(" limit 1 ") ); if(bike == null && StringUtils.isBlank(bike.getParamId())){ //å¦æè½¦è¾ç±»åæ¯ç©º throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "车åä¿¡æ¯å¼å¸¸ï¼è¯·è系管çå"); } this.lockBikes(bike.getDeviceSn(),1); //æ´æ°éªè¡ç¶æä¸ºéªè¡ä¸ memberRides.setEditDate(memberRides.getBackDate()); memberRides.setStatus(Constants.MEMBER_RIDES_STATUS.RIDES_RUNNING.getKey()); memberRidesJoinMapper.updateById(memberRides); } private boolean isValidePricingType(Bikes bike,MemberRides memberRides ) { //æ¥è¯¢è½¦åçµéä¿¡æ¯ if(goodsorderService.getVoltageStatus(bike)>0){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"çµéä½ï¼è¯·æ«æå ¶å®è½¦è¾!"); }; Date date =new Date(); QueryWrapper<PricingParam> param = new QueryWrapper<>(); param.lambda().eq(PricingParam::getStatus,Constants.ZERO); param.lambda().eq(PricingParam::getIsdeleted,Constants.ZERO); param.lambda().le(PricingParam::getStartDate,date); param.lambda().ge(PricingParam::getEndDate,date); param.lambda().last(" limit 1" ) ; param.lambda().orderByAsc(PricingParam::getSortnum); //æ¥è¯¢ä¼å 级æé«ï¼æåºç æå°çï¼å¯ç¨é ä»·æ¹æ¡ PricingParam pp = pricingParamMapper.selectOne(param); if(pp == null){ //å¦æè½¦è¾æªè®¾ç½®é ä»·æ¹æ¡ï¼æç¤ºå¼éå¤±è´¥ï¼ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), " è¯¥è½¦åææ¶ä¸è½å车æä½å¦ï¼è¯·æ´æ¢å ¶ä»è½¦åéè¯å¦ï¼"); } QueryWrapper<PricingDetail> detail = new QueryWrapper<>(); detail.lambda().eq(PricingDetail::getBikeTypeId,bike.getParamId()); detail.lambda().eq(PricingDetail::getPricePramId,pp.getId()); detail.lambda().eq(PricingDetail::getIsdeleted,Constants.ZERO); detail.lambda().last(" limit 1" ) ; //æ¥è¯¢ä¼å 级æé«ï¼æåºç æå°çï¼å¯ç¨é ä»·æ¹æ¡ PricingDetail pricingDetail = pricingDetailMapper.selectOne(detail); if(pricingDetail == null){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), " è¯¥è½¦åææ¶ä¸è½å车æä½å¦ï¼è¯·æ´æ¢å ¶ä»è½¦åéè¯å¦~"); } String nowDate = DateUtil.getDateLong(date); Holidays holidays = new Holidays(); holidays.setHoliday(nowDate); holidays.setIsdeleted(Constants.ZERO); memberRides.setBikeCode(bike.getCode()); memberRides.setParamId(bike.getParamId()); bike.setLastRentDate(new Date()); bike.setStatus(Constants.ONE); bikesMapper.updateById(bike); //æ£æ¥æ¯å¦è忥 if(holidaysMapper.selectCount(new QueryWrapper<>(holidays)) >0){ //妿æ¯è忥 memberRides.setBasePrice(pricingDetail.getHolidayBasePrice()); memberRides.setBaseTime(pricingDetail.getHolidayBaseTime()); memberRides.setUnitPrice(pricingDetail.getHolidayUnitPrice()); memberRides.setUnitTime(pricingDetail.getHolidayUnitTime()); memberRides.setIsHoliday(Constants.ONE); }else{ //妿æ¯å·¥ä½æ¥ memberRides.setBasePrice(pricingDetail.getBasePrice()); memberRides.setBaseTime(pricingDetail.getBaseTime()); memberRides.setUnitPrice(pricingDetail.getUnitPrice()); memberRides.setUnitTime(pricingDetail.getUnitTime()); memberRides.setIsHoliday(Constants.ZERO); } return true; } /** * 临æ¶åè½¦è¶ æ¶ èªå¨è¿è½¦ */ public void autoBackBike(){ List<MemberRides> memberRidesList = memberRidesJoinMapper.selectJoinList(MemberRides.class,new MPJLambdaWrapper<MemberRides>() .selectAll(MemberRides.class) .leftJoin(Goodsorder.class,Goodsorder::getId,MemberRides::getOrdreId) .eq(Goodsorder::getStatus,Constants.ONE) .eq(MemberRides::getIsdeleted,Constants.ZERO) .eq(MemberRides::getType,Constants.ONE) .eq(MemberRides::getStatus,Constants.MEMBER_RIDES_STATUS.RIDES_PAUSING) .apply(" NOW() >= t.create_date + INTERVAL '2 hours' ") ); for (MemberRides timeOutRides:memberRidesList) { Goodsorder goodsorder = goodsorderService.findById(timeOutRides.getOrdreId()); //æ¥è¯¢éªè¡è®°å½ List<MemberRides> memberRides = goodsorderService.getMemberRidesForClose(goodsorder.getId()); if(memberRides!=null && memberRides.size()>0){ for (MemberRides rides : memberRides){ if(Constants.equalsInteger(rides.getStatus(),Constants.MEMBER_RIDES_STATUS.RIDES_PAUSING.getKey()) &&Constants.equalsInteger(rides.getType(),Constants.ONE)){ //妿æ¯çµè½¦å¹¶ä¸æ¯éªè¡ä¸ è¿è¡å ³éå¤ç Bikes bike = bikesMapper.selectOne(new QueryWrapper<Bikes>().lambda() .eq(Bikes::getType,Constants.ONE) .eq(Bikes::getIsdeleted,Constants.ZERO) .eq(Bikes::getCode,rides.getBikeCode()) ); lockBikes(bike.getDeviceSn(),Constants.ZERO);//åèµ·å ³éæä»¤è¯·æ± rides.setStatus(Constants.MEMBER_RIDES_STATUS.BACK_CYCLING.getKey());//å·²è¿è½¦ rides.setBackSiteId(bike.getSiteId());//è¿è½¦ç«ç¹ rides.setBackDate(new Date()); rides.setEditDate(rides.getBackDate()); memberRidesJoinMapper.updateById(rides);//æ´æ°éªè¡ç¶æä¸ºå·²è¿è½¦ } } } //订åç»ç® Date date = new Date(); goodsorder.setEditDate(date); goodsorder.setEditor(null); goodsorderService.dealCloseGoodsorderBiz( goodsorder,Constants.REFUND_TYPE.NORMAL.getKey(),memberRides); } } }