From be4a0fdd19ca88265ab287eb9dd80380c1b3179d Mon Sep 17 00:00:00 2001 From: jiangping <jp@doumee.com> Date: 星期四, 09 十一月 2023 10:14:46 +0800 Subject: [PATCH] bug --- server/services/src/main/java/com/doumee/service/business/impl/MemberRidesServiceImpl.java | 152 ++++++++++++++++++++++++++++---------------------- 1 files changed, 85 insertions(+), 67 deletions(-) diff --git a/server/services/src/main/java/com/doumee/service/business/impl/MemberRidesServiceImpl.java b/server/services/src/main/java/com/doumee/service/business/impl/MemberRidesServiceImpl.java index 31bab54..448d72e 100644 --- a/server/services/src/main/java/com/doumee/service/business/impl/MemberRidesServiceImpl.java +++ b/server/services/src/main/java/com/doumee/service/business/impl/MemberRidesServiceImpl.java @@ -40,9 +40,11 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; +import org.springframework.util.ConcurrentReferenceHashMap; import java.math.BigDecimal; import java.util.*; +import java.util.concurrent.ConcurrentMap; import java.util.stream.Collectors; /** @@ -418,83 +420,99 @@ } + public ConcurrentMap<String,Integer> cacheOpenLock = new ConcurrentReferenceHashMap<>(); @Override public MemberRidesDetailResponse openLock(String code,String memberId) { - if(StringUtils.isBlank(code) || code.split("/").length != 2){ - throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀵逛笉璧凤紝璇ョ珯鐐圭紪鍙蜂笉瀛樺湪锛岃灏濊瘯鏇存崲杞﹁締锛�"); + if(Constants.formatIntegerNum(cacheOpenLock.get(code)) == 1){ + throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀵逛笉璧凤紝璇ヨ溅杈嗗凡琚攣瀹氬�熺敤锛岃灏濊瘯鏇存崲鍏朵粬杞﹁締锛�"); } - //鍒ゆ柇褰撳墠鏄惁宸叉敮浠樻娂閲� - Goodsorder goodsorder = goodsorderService.findOneByWrapper(new QueryWrapper<Goodsorder>() - .eq("isdeleted", Constants.ZERO) - .eq("status", Constants.goodsorderStatus.pay) - .eq("member_id", memberId) - .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(), "闈炰粖鏃ユ娂閲戣鍗曪紝璇风粨绠楀悗閲嶆柊鏀粯锛�"); - } - //鍒ゆ柇鏄惁澶勪簬钀ヤ笟鏃堕棿 - goodsorderService.checkBusiness(); - //鏌ヨ鏄惁澶勪簬楠戣涓� - if (memberRidesMapper.selectCount(new QueryWrapper<MemberRides>().eq("member_id", memberId).in("status", 0, 1)) > Constants.ZERO) { - throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "瀛樺湪楠戣涓溅杈嗭紝鏃犳硶鎵爜"); - } - 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)) { + cacheOpenLock.put(code, 1); + try { + if(StringUtils.isBlank(code) || code.split("/").length != 2){ + throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀵逛笉璧凤紝璇ョ珯鐐圭紪鍙蜂笉瀛樺湪锛岃灏濊瘯鏇存崲杞﹁締锛�"); + } + //鍒ゆ柇褰撳墠鏄惁宸叉敮浠樻娂閲� + Goodsorder goodsorder = goodsorderService.findOneByWrapper(new QueryWrapper<Goodsorder>() + .eq("isdeleted", Constants.ZERO) + .eq("status", Constants.goodsorderStatus.pay) + .eq("member_id", memberId) + .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(), "闈炰粖鏃ユ娂閲戣鍗曪紝璇风粨绠楀悗閲嶆柊鏀粯锛�"); + } + //鍒ゆ柇鏄惁澶勪簬钀ヤ笟鏃堕棿 + goodsorderService.checkBusiness(); + //鏌ヨ鏄惁澶勪簬楠戣涓� + if (memberRidesMapper.selectCount(new QueryWrapper<MemberRides>().eq("member_id", memberId).in("status", 0, 1)) > Constants.ZERO) { + throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "瀛樺湪楠戣涓溅杈嗭紝鏃犳硶鎵爜"); + } + 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)) { // locks =new Locks(); // locks.setCode(codes[1]); // locks.setSiteId(codes[0]); // deviceService.getLockInfo(locks); - throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "鎵爜鏃犳晥锛岃绔欑偣閿佸ご鏆備笉鏀寔鍊熷嚭涓氬姟鍝︼紒"); - } - //鏌ヨ閿佸ご鏄惁瀛樺湪杞﹁締 浠ュ強鏄惁姝e父 - 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]); - deviceService.getLockInfo(locks); - throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "褰撳墠杞﹁締鏆傛椂鏃犳硶浣跨敤锛岃绋嶅悗閲嶈瘯鎴栨洿鎹㈠叾瀹冭溅杈嗭紒"); - } - MemberRides memberRides = new MemberRides(); - //鏍规嵁杞﹀瀷鏌ヨ璁′环鏂规 - isValidePricingType(locks,memberRides) ; - MqttLog flag = deviceService.openLock(locks); - MemberRidesDetailResponse memberRidesDetailResponse = new MemberRidesDetailResponse(); - if (flag.getResult() == 0) { - //瀛樺偍楠戣璁板綍 - memberRides.setId(Constants.getUUID()); - memberRides.setIsdeleted(Constants.ZERO); - memberRides.setMemberId(memberId); - memberRides.setCreateDate(new Date()); - memberRides.setRentSiteId(locks.getSiteId()); - memberRides.setRentLockId(locks.getCode()); - memberRides.setOrdreId(goodsorder.getId()); - memberRides.setRentDate(new Date()); - memberRides.setBalance(new BigDecimal(systemDictDataBiz.queryByCode(Constants.MINI_PROGRAMME,Constants.RENT_DEPOSIT).getCode())); - memberRides.setStatus(Constants.MEMBER_RIDES_STATUS.LOCKING.getKey()); - memberRides.setCloseStatus(Constants.ZERO); + throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "鎵爜鏃犳晥锛岃绔欑偣閿佸ご鏆備笉鏀寔鍊熷嚭涓氬姟鍝︼紒"); + } + //鏌ヨ閿佸ご鏄惁瀛樺湪杞﹁締 浠ュ強鏄惁姝e父 + 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]); + deviceService.getLockInfo(locks); + throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "褰撳墠杞﹁締鏆傛椂鏃犳硶浣跨敤锛岃绋嶅悗閲嶈瘯鎴栨洿鎹㈠叾瀹冭溅杈嗭紒"); + } + MemberRides memberRides = new MemberRides(); + //鏍规嵁杞﹀瀷鏌ヨ璁′环鏂规 + isValidePricingType(locks,memberRides) ; + MqttLog flag = deviceService.openLock(locks); + MemberRidesDetailResponse memberRidesDetailResponse = new MemberRidesDetailResponse(); + if (flag.getResult() == 0) { + //瀛樺偍楠戣璁板綍 + memberRides.setId(Constants.getUUID()); + memberRides.setIsdeleted(Constants.ZERO); + memberRides.setMemberId(memberId); + memberRides.setCreateDate(new Date()); + memberRides.setRentSiteId(locks.getSiteId()); + memberRides.setRentLockId(locks.getCode()); + memberRides.setOrdreId(goodsorder.getId()); + memberRides.setRentDate(new Date()); + memberRides.setBalance(new BigDecimal(systemDictDataBiz.queryByCode(Constants.MINI_PROGRAMME,Constants.RENT_DEPOSIT).getCode())); + memberRides.setStatus(Constants.MEMBER_RIDES_STATUS.LOCKING.getKey()); + memberRides.setCloseStatus(Constants.ZERO); - memberRidesMapper.insert(memberRides); - BeanUtils.copyProperties(memberRides, memberRidesDetailResponse); + memberRidesMapper.insert(memberRides); + BeanUtils.copyProperties(memberRides, memberRidesDetailResponse); + }else{ + throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "褰撳墠杞﹁締鏆傛椂鏃犳硶浣跨敤锛岃绋嶅悗閲嶈瘯鎴栨洿鎹㈠叾瀹冭溅杈唦"); + } + return memberRidesDetailResponse; + }catch (BusinessException biz){ + throw biz; + }catch (Exception biz){ + throw new BusinessException(ResponseStatus.SERVER_ERROR); + }finally { + cacheOpenLock.remove(code); } - return memberRidesDetailResponse; + } private boolean isValidePricingType(Locks locks,MemberRides memberRides ) { -- Gitblit v1.9.3