From 2c33de81d301818aea8c7210b384545dbc8d2e39 Mon Sep 17 00:00:00 2001 From: k94314517 <8417338+k94314517@user.noreply.gitee.com> Date: 星期二, 10 十月 2023 16:41:35 +0800 Subject: [PATCH] 111 --- server/services/src/main/java/com/doumee/service/business/impl/GoodsorderServiceImpl.java | 143 ++++++++++++++++++++++++++++++++++++++++++----- 1 files changed, 126 insertions(+), 17 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 9af2579..28599f9 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 @@ -16,6 +16,7 @@ import com.doumee.core.utils.ID; import com.doumee.core.utils.Utils; import com.doumee.core.wx.WxMiniConfig; +import com.doumee.core.wx.WxMiniUtilService; import com.doumee.dao.business.*; import com.doumee.dao.business.MemberRidesMapper; import com.doumee.dao.business.join.GoodsorderJoinMapper; @@ -25,6 +26,7 @@ import com.doumee.dao.business.model.MemberRides; import com.doumee.dao.business.vo.GoodsorderExportVO; import com.doumee.dao.business.vo.GoodsorderTotalDataVO; +import com.doumee.dao.business.web.request.RefundDTO; import com.doumee.dao.business.web.response.*; import com.doumee.dao.business.join.MemberRidesJoinMapper; import com.doumee.dao.business.model.*; @@ -40,6 +42,7 @@ import org.checkerframework.checker.units.qual.A; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; @@ -88,6 +91,9 @@ @Autowired private TransactionsMapper transactionsMapper; + + @Autowired + private WxMiniUtilService wxMiniUtilService; @Autowired PricingRuleService pricingRuleService; @@ -140,6 +146,11 @@ @Override public Goodsorder findOne(Goodsorder goodsorder) { QueryWrapper<Goodsorder> wrapper = new QueryWrapper<>(goodsorder); + return goodsorderMapper.selectOne(wrapper); + } + + @Override + public Goodsorder findOneByWrapper(QueryWrapper<Goodsorder> wrapper) { return goodsorderMapper.selectOne(wrapper); } @@ -492,24 +503,9 @@ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"宸叉敮浠樿繃瀹氶噾锛屾棤娉曢噸澶嶈鎿嶄綔"); } //鏄惁澶勪簬灏忕▼搴忓仠姝㈡湇鍔℃椂闂村唴 - if(systemDictDataBiz.queryByCode(Constants.MINI_PROGRAMME,Constants.IS_STOP_SERVE).getCode().equals(Constants.ONE)){ - String stopServeStartTime = systemDictDataBiz.queryByCode(Constants.MINI_PROGRAMME,Constants.STOP_SERVE_STARTTIME).getCode(); - String stopServeEndTime = systemDictDataBiz.queryByCode(Constants.MINI_PROGRAMME,Constants.STOP_SERVE_ENDTIME).getCode(); - //鏌ヨ褰撳墠鏃堕棿鏄惁鍦ㄥ仠姝腑 - long s = DateUtil.StringToDate(stopServeStartTime).getTime(); - long e = DateUtil.StringToDate(stopServeEndTime).getTime(); - if(e>System.currentTimeMillis()&&s<=System.currentTimeMillis()){ - throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"褰撳墠灏忕▼搴忓仠姝㈡湇鍔★紝璇锋敞鎰忔煡鐪嬪叕鍛�"); - } - } + this.checkTemporaryStop(); //鏄惁澶勪簬钀ヤ笟鏃堕棿 - String businessStartTime = systemDictDataBiz.queryByCode(Constants.MINI_PROGRAMME,Constants.BUSINESS_STARTTIME).getCode(); - String businessEndTime = systemDictDataBiz.queryByCode(Constants.MINI_PROGRAMME,Constants.BUSINESS_ENDTIME).getCode(); - String nowTime = DateUtil.getDate(new Date(),"HH:mm"); - if(Integer.valueOf(nowTime.replace(":",""))<= Integer.valueOf(businessStartTime.replace(":","")) - ||Integer.valueOf(nowTime.replace(":","")) > Integer.valueOf(businessEndTime.replace(":",""))){ - throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"褰撳墠鏃堕棿鏆傛湭钀ヤ笟鏈嶅姟锛岃娉ㄦ剰鏌ョ湅钀ヤ笟鏃堕棿"); - } + this.checkBusiness(); Goodsorder goodsorder = new Goodsorder(); goodsorder.setId(Constants.getUUID()); goodsorder.setCreateDate(new Date()); @@ -541,6 +537,119 @@ } } + /** + * 楠岃瘉钀ヤ笟鏃堕棿 + */ + @Override + public void checkBusiness(){ + String businessStartTime = systemDictDataBiz.queryByCode(Constants.MINI_PROGRAMME,Constants.BUSINESS_STARTTIME).getCode(); + String businessEndTime = systemDictDataBiz.queryByCode(Constants.MINI_PROGRAMME,Constants.BUSINESS_ENDTIME).getCode(); + String nowTime = DateUtil.getDate(new Date(),"HH:mm"); + if(Integer.valueOf(nowTime.replace(":",""))<= Integer.valueOf(businessStartTime.replace(":","")) + ||Integer.valueOf(nowTime.replace(":","")) > Integer.valueOf(businessEndTime.replace(":",""))){ + throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"褰撳墠鏃堕棿鏆傛湭钀ヤ笟鏈嶅姟锛岃娉ㄦ剰鏌ョ湅钀ヤ笟鏃堕棿"); + } + } + + /** + * 涓存椂鍋滄鏈嶅姟 鏈氦鎶奸噾鐨勭敤鎴凤紝鏃犳硶鎵溅浣跨敤锛涘凡缁忎氦杩囨娂閲戠殑鐢ㄦ埛鍙互缁х画鎵爜楠戣锛� + */ + @Override + public void checkTemporaryStop(){ + if(systemDictDataBiz.queryByCode(Constants.MINI_PROGRAMME,Constants.IS_STOP_SERVE).getCode().equals(Constants.ONE)){ + String stopServeStartTime = systemDictDataBiz.queryByCode(Constants.MINI_PROGRAMME,Constants.STOP_SERVE_STARTTIME).getCode(); + String stopServeEndTime = systemDictDataBiz.queryByCode(Constants.MINI_PROGRAMME,Constants.STOP_SERVE_ENDTIME).getCode(); + //鏌ヨ褰撳墠鏃堕棿鏄惁鍦ㄥ仠姝腑 + long s = DateUtil.StringToDate(stopServeStartTime).getTime(); + long e = DateUtil.StringToDate(stopServeEndTime).getTime(); + if(e>System.currentTimeMillis()&&s<=System.currentTimeMillis()){ + throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"褰撳墠灏忕▼搴忓仠姝㈡湇鍔★紝璇锋敞鎰忔煡鐪嬪叕鍛�"); + } + } + } + + + + @Override + @Transactional(rollbackFor = {Exception.class,BusinessException.class}) + public void goodsOrderSettlement(String orderId) { + Goodsorder goodsorder = goodsorderMapper.selectById(orderId); + QueryWrapper<MemberRides> wrapper = new QueryWrapper<>(); + wrapper.lambda().eq(MemberRides::getOrdreId,orderId); + List<MemberRides> memberRides = memberRidesMapper.selectList(wrapper); + if (!CollectionUtils.isEmpty(memberRides)){ + boolean exitUnBack = memberRides.stream().anyMatch(s -> !Constants.MEMBER_RIDES_STATUS.BACK_CYCLING.getKey().equals(s.getStatus())); + if (exitUnBack){ + throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"褰撳墠璁㈠崟鏈夋湭瀹屾垚鐨勯獞琛岋紝鏃犳硶寮哄埗缁撶畻"); + } + PricingRuleDTO pricingRule = pricingRuleService.getPricingRule(memberRides); + RidesDetailResponse ridesDetailResponse = new RidesDetailResponse(); + List<MemberRidesResponse> collect = memberRides.stream().map(s -> { + MemberRidesResponse memberRidesResponse = new MemberRidesResponse(); + memberRidesResponse.setRideStartTime(s.getRentDate()); + memberRidesResponse.setRideEndTime(s.getBackDate()); + memberRidesResponse.setRideTime(DateUtil.betweenMin(memberRidesResponse.getRideStartTime(), memberRidesResponse.getRideEndTime())); + 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.setUnitTime(s.getUnitTime()); + 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())).divide(new BigDecimal(pricingRule.getMemberRides().getUnitTime())).setScale(0,BigDecimal.ROUND_CEILING)); + ridesDetailResponse.setAmount(basePrice.add(multiply)); + }else { + ridesDetailResponse.setAmount(pricingRule.getMemberRides().getBasePrice()); + } + ridesDetailResponse.setBikeType(pricingRule.getBikeType()); + ridesDetailResponse.setDuration(durationSum); + ridesDetailResponse.setMemberRidesResponseList(collect); + + RefundDTO refundDTO = new RefundDTO(); + refundDTO.setOrderId(orderId); + refundDTO.setCanBalance(goodsorder.getMoney()); + refundDTO.setRefundAmount(goodsorder.getMoney().subtract(ridesDetailResponse.getAmount())); + refundDTO.setTotalAmount(goodsorder.getMoney()); + refundDTO.setMemberId(goodsorder.getMemberId()); + refundDTO.setReason("鐢ㄦ埛涓诲姩閫�娆�"); + refundDTO.setType(Constants.REFUND_TYPE.NORMAL.getKey()); + Refund refund = wxMiniUtilService.wxRefund(refundDTO); + //瀛樺偍 娑堣垂 浜ゆ槗娴佹按 + + Transactions transactions = new Transactions(); + transactions.setMemberId(refundDTO.getMemberId()); + transactions.setCreateDate(new Date()); + transactions.setIsdeleted(Constants.ZERO); + transactions.setOrderId(refundDTO.getOrderId()); + transactions.setMoney(ridesDetailResponse.getAmount()); + transactions.setType(Constants.transactionsType.consumption); + transactions.setDoneDate(new Date()); + transactions.setTitle("娑堣垂缁撶畻"); + transactions.setContent("缁撶畻瀹為檯娑堣垂"); + transactions.setBalance(BigDecimal.ZERO); + transactions.setObjId(refund.getId()); + transactions.setObjType(Constants.ONE); + transactionsMapper.insert(transactions); + + Goodsorder update = new Goodsorder(); + update.setId(goodsorder.getId()); + update.setStatus(Constants.GOODSORDER_STATUS.CLOSE.getKey()); + update.setCloseMoney(goodsorder.getMoney().subtract(ridesDetailResponse.getAmount())); + update.setCloseId(refund.getId()); + update.setCloseDate(refund.getDoneDate()); + update.setCloseInfo(refund.getInfo()); + update.setCloseType(Constants.ONE); + goodsorderMapper.updateById(update); + } + } + + @Override public String payNotify(String preOrderId,String paymentNo){ Goodsorder goodsorder = this.goodsorderMapper.selectById(preOrderId); -- Gitblit v1.9.3