From bb0a8ba2fba9f22d66a3db7f194493f7f0a96ae0 Mon Sep 17 00:00:00 2001 From: k94314517 <8417338+k94314517@user.noreply.gitee.com> Date: 星期一, 09 十月 2023 10:20:36 +0800 Subject: [PATCH] 111 --- server/services/src/main/java/com/doumee/service/business/impl/GoodsorderServiceImpl.java | 398 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 394 insertions(+), 4 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 1ec5fd0..9ad6314 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 @@ -4,21 +4,54 @@ import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.doumee.core.constants.Constants; +import com.doumee.biz.system.SystemDictDataBiz; +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; +import com.doumee.core.utils.ID; import com.doumee.core.utils.Utils; -import com.doumee.dao.business.GoodsorderMapper; +import com.doumee.core.wx.WxMiniConfig; +import com.doumee.dao.business.*; +import com.doumee.dao.business.MemberRidesMapper; import com.doumee.dao.business.join.GoodsorderJoinMapper; import com.doumee.dao.business.model.Bikes; 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.*; +import com.doumee.dao.business.join.MemberRidesJoinMapper; +import com.doumee.dao.business.model.*; 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; import org.springframework.util.CollectionUtils; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import javax.servlet.http.HttpServletRequest; +import java.math.BigDecimal; +import java.net.InetAddress; +import java.net.UnknownHostException; + +import java.util.ArrayList; +import java.util.Date; import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; @Service public class GoodsorderServiceImpl implements GoodsorderService { @@ -30,6 +63,26 @@ @Autowired GoodsorderJoinMapper goodsorderJoinMapper; + + @Autowired + private SystemDictDataBiz systemDictDataBiz; + + @Autowired + private MemberRidesMapper memberRidesMapper; + + @Autowired + private MemberMapper memberMapper; + @Autowired + private BaseParamMapper baseParamMapper; + + @Autowired + private RefundMapper refundMapper; + + @Autowired + private MemberRidesJoinMapper memberRidesJoinMapper; + + @Autowired + PricingRuleService pricingRuleService; @Override public String create(Goodsorder goodsorder) { @@ -94,7 +147,6 @@ MPJLambdaWrapper<Goodsorder> queryWrapper = new MPJLambdaWrapper<>(); Utils.MP.blankToNull(pageWrap.getModel()); - if (pageWrap.getModel().getCode() != null) { queryWrapper.like(Goodsorder::getCode, pageWrap.getModel().getCode()); } @@ -102,7 +154,6 @@ if (pageWrap.getModel().getStatus() != null) { queryWrapper.eq(Goodsorder::getStatus, pageWrap.getModel().getStatus()); } - if (pageWrap.getModel().getOnlineOrderid() != null) { queryWrapper.eq(Goodsorder::getOnlineOrderid, pageWrap.getModel().getOnlineOrderid()); @@ -118,7 +169,6 @@ .selectAs(Member::getName,Goodsorder::getMemberName) .leftJoin(Member.class,Member::getId,Goodsorder::getMemberId) .like(StringUtils.isNotBlank(pageWrap.getModel().getMemberName()),Member::getName,pageWrap.getModel().getMemberName()); - return PageData.from(goodsorderJoinMapper.selectJoinPage(page, Goodsorder.class,queryWrapper)); } @@ -127,4 +177,344 @@ QueryWrapper<Goodsorder> wrapper = new QueryWrapper<>(goodsorder); return goodsorderMapper.selectCount(wrapper); } + + + + @Override + public HomeResponse getHome(String memberId){ + HomeResponse homeResponse = new HomeResponse(); + homeResponse.setParkName(systemDictDataBiz.queryByCode(Constants.MINI_PROGRAMME,Constants.PROJECT_NAME).getCode()); + homeResponse.setServerPhone(systemDictDataBiz.queryByCode(Constants.MINI_PROGRAMME,Constants.SERVER_PHONE).getCode()); + homeResponse.setLeaseNoticeUrl(systemDictDataBiz.queryByCode(Constants.MINI_PROGRAMME,Constants.LEASE_NOTICE_URL).getCode()); + homeResponse.setLeaseNotice(systemDictDataBiz.queryByCode(Constants.MINI_PROGRAMME,Constants.LEASE_NOTICE).getCode()); + 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()); + //鏌ヨ鏄惁瀛樺湪 宸叉敮浠樼殑 鎶奸噾璁㈠崟 + 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) { + //鏌ヨ褰撳墠楠戣鐘舵�� + MemberRides memberRides = memberRidesMapper.selectOne(new QueryWrapper<MemberRides>().eq("member_id", memberId) + .orderByDesc(" create_date ") + .last(" limit 1 ")); + if (!Objects.isNull(memberRides)) { + homeResponse.setRideStatus(memberRides.getStatus()); + MemberRidesResponse memberRidesResponse = new MemberRidesResponse(); + BaseParam baseParam = baseParamMapper.selectById(memberRides.getParamId()); + if(!Objects.isNull(baseParam)){ + memberRidesResponse.setBikeType(baseParam.getName()); + } + 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()); + homeResponse.setMemberRidesResponse(memberRidesResponse); + } + } + return homeResponse; + } + @Autowired + private TransactionsMapper transactionsMapper; + + + @Override + public GoodsorderDetailDTO getGoodsorderDetailDTO(String id) { + + List<PayOrderDTO> payOrderDTOList = new ArrayList<>(); + Goodsorder goodsorder = goodsorderMapper.selectById(id); + QueryWrapper<Refund> refundQuery = new QueryWrapper<>(); + refundQuery.lambda() + .eq(Refund::getObjId,id); + List<Refund> refunds = refundMapper.selectList(refundQuery); + + PayOrderDTO payOrderDTO = new PayOrderDTO(); + payOrderDTO.setOrderCode(goodsorder.getCode()); + payOrderDTO.setPayWay(goodsorder.getPayWay()); + payOrderDTO.setMoney(goodsorder.getMoney()); + payOrderDTO.setPayDate(goodsorder.getPayDate()); + payOrderDTOList.add(0,payOrderDTO); + if (!CollectionUtils.isEmpty(refunds)){ + refunds.forEach(s->{ + PayOrderDTO refundOrderDTO = new PayOrderDTO(); + refundOrderDTO.setOrderCode(s.getCode()); + refundOrderDTO.setPayWay(s.getPayWay()); + refundOrderDTO.setRefundType(s.getType()); + refundOrderDTO.setMoney(s.getMoney()); + refundOrderDTO.setPayDate(s.getDoneDate()); + payOrderDTOList.add(refundOrderDTO); + }); + } + MPJLambdaWrapper<MemberRides> wrapper = new MPJLambdaWrapper<>(); + wrapper.leftJoin(BaseParam.class,BaseParam::getId,MemberRides::getParamId) + .eq(BaseParam::getType, Constants.THREE); + List<MemberRides> memberRides = memberRidesJoinMapper.selectJoinList(MemberRides.class, wrapper); + GoodsorderDetailDTO goodsorderDetailDTO = new GoodsorderDetailDTO(); + goodsorderDetailDTO.setPayOrderDTOList(payOrderDTOList); + goodsorderDetailDTO.setMemberRidesList(memberRides); + return goodsorderDetailDTO; + } + + @Override + 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); + + + 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)){ + throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈煡璇㈠埌鐢ㄦ埛瀵硅薄淇℃伅"); + } + Goodsorder qry = new Goodsorder(); + qry.setStatus(Constants.goodsorderStatus.pay); + qry.setMemberId(memberId); + qry.setIsdeleted(Constants.ZERO); + if(goodsorderMapper.selectCount(new QueryWrapper<>(qry))>Constants.ZERO){ + throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"宸叉敮浠樿繃瀹氶噾锛屾棤娉曢噸澶嶈鎿嶄綔"); + } + Goodsorder goodsorder = new Goodsorder(); + goodsorder.setId(Constants.getUUID()); + goodsorder.setCreateDate(new Date()); + goodsorder.setIsdeleted(Constants.ZERO); + goodsorder.setMemberId(memberId); + goodsorder.setMoney(new BigDecimal(systemDictDataBiz.queryByCode(Constants.MINI_PROGRAMME,Constants.RENT_DEPOSIT).getCode())); + goodsorder.setStatus(Constants.goodsorderStatus.waitPay); + goodsorder.setPreOrderid(goodsorder.getId()); + goodsorder.setPayStatus(Constants.goodsorderPayStatus.waitPay); + goodsorder.setPayWay(Constants.ZERO); + this.goodsorderMapper.insert(goodsorder); + //璋冭捣鏀粯 + try { + Object response = null; + WxPayUnifiedOrderRequest request = new WxPayUnifiedOrderRequest(); + request.setBody("鏀粯鎶奸噾"); + request.setAttach("createGoodsOrder"); + request.setOutTradeNo(goodsorder.getId()); +// request.setTotalFee(BaseWxPayRequest.yuanToFen(goodsorder.getMoney().toString())); + request.setTotalFee(1); + request.setSpbillCreateIp(this.getIpAddr()); + request.setTimeStart(DateUtil.DateToString(new Date(), "yyyyMMddHHmmss")); + request.setOpenid(member.getOpenid()); + response = WxMiniConfig.wxPayService.createOrder(request); + return response; + } catch (WxPayException e) { + e.printStackTrace(); + throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),e.getMessage()); + } + } + + @Override + public String payNotify(String preOrderId,String paymentNo){ + Goodsorder goodsorder = this.goodsorderMapper.selectById(preOrderId); + if(goodsorder.getStatus()==Constants.goodsorderStatus.pay){ + return WxPayNotifyResponse.success("澶勭悊鎴愬姛!"); + } + goodsorder.setOnlineOrderid(paymentNo); + goodsorder.setPayStatus(Constants.goodsorderPayStatus.pay); + goodsorder.setStatus(Constants.goodsorderStatus.pay); + goodsorder.setPayDate(new Date()); + goodsorder.setEditDate(new Date()); + goodsorderMapper.updateById(goodsorder); + //瀛樺偍浜ゆ槗娴佹按琛� + Transactions transactions = new Transactions(); + transactions.setMemberId(goodsorder.getMemberId()); + transactions.setCreateDate(new Date()); + transactions.setIsdeleted(Constants.ZERO); + transactions.setOrderId(goodsorder.getId()); + transactions.setMoney(goodsorder.getMoney()); + transactions.setType(Constants.transactionsType.deposit); + transactions.setPreOrderid(goodsorder.getPreOrderid()); + transactions.setOnlineOrderid(goodsorder.getOnlineOrderid()); + transactions.setDoneDate(new Date()); + transactions.setTitle("鏀粯"); + transactions.setContent("鎶奸噾鏀粯"); + transactions.setBalance(goodsorder.getMoney()); + transactions.setObjId(goodsorder.getId()); + transactions.setObjType(Constants.ZERO); + transactionsMapper.insert(transactions); + return WxPayNotifyResponse.success("澶勭悊鎴愬姛!"); + } + + + + /** + * 寰楀埌request瀵硅薄 + * + * @return + */ + public HttpServletRequest getRequest() { + HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); + return request; + } + + public String getIpAddr() { + HttpServletRequest request = this.getRequest(); + String ipAddress = null; + try { + ipAddress = request.getHeader("x-forwarded-for"); + if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) { + ipAddress = request.getHeader("Proxy-Client-IP"); + } + if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) { + ipAddress = request.getHeader("WL-Proxy-Client-IP"); + } + if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) { + ipAddress = request.getRemoteAddr(); + if (ipAddress.equals("127.0.0.1")) { + // 鏍规嵁缃戝崱鍙栨湰鏈洪厤缃殑IP + InetAddress inet = null; + try { + inet = InetAddress.getLocalHost(); + } catch (UnknownHostException e) { + e.printStackTrace(); + } + ipAddress = inet.getHostAddress(); + } + } + // 瀵逛簬閫氳繃澶氫釜浠g悊鐨勬儏鍐碉紝绗竴涓狪P涓哄鎴风鐪熷疄IP,澶氫釜IP鎸夌収','鍒嗗壊 + if (ipAddress != null && ipAddress.length() > 15) { // "***.***.***.***".length() + // = 15 + if (ipAddress.indexOf(",") > 0) { + ipAddress = ipAddress.substring(0, ipAddress.indexOf(",")); + } + } + } catch (Exception e) { + ipAddress = "47.111.178.164"; + } + // ipAddress = this.getRequest().getRemoteAddr(); + + return ipAddress; + } + + } -- Gitblit v1.9.3