From b22f741e6918c675fabe5aabc688d2f52858319a Mon Sep 17 00:00:00 2001 From: jiaosong <jiaosong6760@dingtalk.com> Date: 星期一, 09 十月 2023 09:46:43 +0800 Subject: [PATCH] #pgsql 退款 结算 --- server/services/src/main/java/com/doumee/service/business/impl/GoodsorderServiceImpl.java | 141 +++++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 129 insertions(+), 12 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 888b31f..4a7c2cf 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 @@ -9,6 +9,7 @@ import com.doumee.core.constants.Constants; import com.doumee.core.constants.ResponseStatus; import com.doumee.core.exception.BusinessException; +import com.doumee.core.model.LoginUserInfo; import com.doumee.core.model.PageData; import com.doumee.core.model.PageWrap; import com.doumee.core.utils.DateUtil; @@ -22,19 +23,18 @@ import com.doumee.dao.business.model.Goodsorder; import com.doumee.dao.business.model.Member; import com.doumee.dao.business.model.MemberRides; -import com.doumee.dao.business.web.response.HomeResponse; +import com.doumee.dao.business.web.response.*; import com.doumee.dao.business.join.MemberRidesJoinMapper; import com.doumee.dao.business.model.*; -import com.doumee.dao.business.web.response.GoodsorderDetailDTO; -import com.doumee.dao.business.web.response.MemberRidesResponse; -import com.doumee.dao.business.web.response.PayOrderDTO; import com.doumee.service.business.GoodsorderService; +import com.doumee.service.business.PricingRuleService; import com.github.binarywang.wxpay.bean.notify.WxPayNotifyResponse; import com.github.binarywang.wxpay.bean.request.BaseWxPayRequest; import com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderRequest; import com.github.binarywang.wxpay.exception.WxPayException; import com.github.yulichang.wrapper.MPJLambdaWrapper; import org.apache.commons.lang3.StringUtils; +import org.apache.shiro.SecurityUtils; import org.checkerframework.checker.units.qual.A; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -51,6 +51,7 @@ import java.util.Date; import java.util.List; import java.util.Objects; +import java.util.stream.Collectors; @Service public class GoodsorderServiceImpl implements GoodsorderService { @@ -74,14 +75,14 @@ @Autowired private BaseParamMapper baseParamMapper; - - - @Autowired private RefundMapper refundMapper; @Autowired private MemberRidesJoinMapper memberRidesJoinMapper; + + @Autowired + PricingRuleService pricingRuleService; @Override public String create(Goodsorder goodsorder) { @@ -237,7 +238,7 @@ PayOrderDTO payOrderDTO = new PayOrderDTO(); payOrderDTO.setOrderCode(goodsorder.getCode()); - payOrderDTO.setPayType(goodsorder.getPayWay()); + payOrderDTO.setPayWay(goodsorder.getPayWay()); payOrderDTO.setMoney(goodsorder.getMoney()); payOrderDTO.setPayDate(goodsorder.getPayDate()); payOrderDTOList.add(0,payOrderDTO); @@ -245,7 +246,8 @@ refunds.forEach(s->{ PayOrderDTO refundOrderDTO = new PayOrderDTO(); refundOrderDTO.setOrderCode(s.getCode()); - refundOrderDTO.setPayType(s.getPayWay()); + refundOrderDTO.setPayWay(s.getPayWay()); + refundOrderDTO.setRefundType(s.getType()); refundOrderDTO.setMoney(s.getMoney()); refundOrderDTO.setPayDate(s.getDoneDate()); payOrderDTOList.add(refundOrderDTO); @@ -262,17 +264,132 @@ } @Override - public Goodsorder closerGoodsorder(String id) { + public void closerGoodsorder(String id) { + + LoginUserInfo principal = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); Goodsorder goodsorder = goodsorderMapper.selectById(id); + QueryWrapper<MemberRides> wrapper = new QueryWrapper<>(); + wrapper.lambda() + .eq(MemberRides::getOrdreId,id); + 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()))); + ridesDetailResponse.setAmount(basePrice.add(multiply)); + }else { + ridesDetailResponse.setAmount(pricingRule.getMemberRides().getBasePrice()); + } + ridesDetailResponse.setBikeType(pricingRule.getBikeType()); + ridesDetailResponse.setDuration(durationSum); + ridesDetailResponse.setMemberRidesResponseList(collect); - - return null; + Refund refund = new Refund(); + refund.setCreateDate(new Date()); + refund.setCreator(principal.getId()); + refund.setEditDate(new Date()); + refund.setEditor(principal.getId()); + refund.setIsdeleted(Constants.ZERO); + refund.setInfo("绯荤粺缁撶畻鍚庤鍗曡嚜鍔ㄥ畬缁�"); +// refund.setCode(); + refund.setMemberId(goodsorder.getMemberId()); + refund.setMoney(goodsorder.getMoney().subtract(ridesDetailResponse.getAmount())); +// refund.setStatus(); +// refund.setPreOrderid(); +// refund.setOnlineOrderid(); + refund.setPayWay(goodsorder.getPayWay()); + refund.setDoneDate(new Date()); + refund.setType(Constants.ONE); + refund.setObjId(goodsorder.getId()); + refund.setReason("纭畾寮哄埗缁撶畻鍚楋紵缁撶畻鍚庤鍗曡嚜鍔ㄥ畬缁�"); + refundMapper.insert(refund); + 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.setCloseUserId(principal.getId()); + update.setCloseType(Constants.ONE); + goodsorderMapper.updateById(update); + } } @Override + public RidesDetailResponse getRidesDetailResponse(String id) { + + QueryWrapper<MemberRides> wrapper = new QueryWrapper<>(); + wrapper.lambda() + .eq(MemberRides::getOrdreId,id); + 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()))); + ridesDetailResponse.setAmount(basePrice.add(multiply)); + }else { + ridesDetailResponse.setAmount(pricingRule.getMemberRides().getBasePrice()); + } + ridesDetailResponse.setBikeType(pricingRule.getBikeType()); + ridesDetailResponse.setDuration(durationSum); + ridesDetailResponse.setMemberRidesResponseList(collect); + return ridesDetailResponse; + } + + return new RidesDetailResponse(); + } + + @Override public Object createGoodsOrderPay(String memberId){ Member member = memberMapper.selectById(memberId); if(Objects.isNull(member)){ -- Gitblit v1.9.3