package com.doumee.service.business.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; 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.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.vo.GoodsorderExportVO; import com.doumee.dao.business.vo.GoodsorderTotalDataVO; 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 { @Autowired private GoodsorderMapper goodsorderMapper; @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 private AdMapper adMapper; @Autowired private TransactionsMapper transactionsMapper; @Autowired PricingRuleService pricingRuleService; @Override public String create(Goodsorder goodsorder) { goodsorderMapper.insert(goodsorder); return goodsorder.getId(); } @Override public void deleteById(String id) { goodsorderMapper.deleteById(id); } @Override public void delete(Goodsorder goodsorder) { UpdateWrapper deleteWrapper = new UpdateWrapper<>(goodsorder); goodsorderMapper.delete(deleteWrapper); } @Override public void deleteByIdInBatch(List ids) { if (CollectionUtils.isEmpty(ids)) { return; } goodsorderMapper.deleteBatchIds(ids); } @Override public void updateById(Goodsorder goodsorder) { goodsorderMapper.updateById(goodsorder); } @Override public void updateByIdInBatch(List goodsorders) { if (CollectionUtils.isEmpty(goodsorders)) { return; } for (Goodsorder goodsorder: goodsorders) { this.updateById(goodsorder); } } @Override public Goodsorder findById(String id) { return goodsorderMapper.selectById(id); } @Override public Goodsorder findOne(Goodsorder goodsorder) { QueryWrapper wrapper = new QueryWrapper<>(goodsorder); return goodsorderMapper.selectOne(wrapper); } @Override public List findList(Goodsorder goodsorder) { QueryWrapper wrapper = new QueryWrapper<>(goodsorder); return goodsorderMapper.selectList(wrapper); } @Override public List findExportNotBikPage(Goodsorder model){ List list = new ArrayList<>(); model.setPayStatus(Constants.ONE); //只查询支付成功的 MPJLambdaWrapper queryWrapper = initQueryParamByModel(model); List goodsorderList = goodsorderJoinMapper.selectJoinList(Goodsorder.class,queryWrapper); if(goodsorderList!=null){ for(Goodsorder order : goodsorderList){ GoodsorderExportVO vo = new GoodsorderExportVO(); vo.setId(order.getId()); vo.setOpenid(order.getMemberOpenid()); vo.setPayDate(order.getPayDate()); vo.setCloseDate(order.getCloseDate()); vo.setCloseDate(order.getCloseDate()); vo.setCloseMoney(Constants.formatDecimalNum(order.getCloseMoney()).divide(new BigDecimal(100), 2, BigDecimal.ROUND_UP)); vo.setRefundDate(order.getRefundDate()); vo.setRefundMoney(Constants.formatDecimalNum(order.getRefundMoney()).divide(new BigDecimal(100), 2, BigDecimal.ROUND_UP)); list.add(vo); } } return list; } private MPJLambdaWrapper initQueryParamByModel(Goodsorder model) { MPJLambdaWrapper queryWrapper = new MPJLambdaWrapper<>(); Utils.MP.blankToNull(model); queryWrapper.selectAll(Goodsorder.class); queryWrapper.selectAs(Member::getOpenid, Goodsorder::getMemberOpenid); queryWrapper.leftJoin(Member.class, Member::getId ,Goodsorder::getMemberId); queryWrapper.select("select max(r.done_date) from refund r where t1.obj_id=t.id and r.status=2 ) as refund_date"); queryWrapper.select("select sum(r.money) from refund r where t1.obj_id=t.id and r.status=2) as refund_money"); //时间段筛选 queryWrapper.ge(model.getStartDate()!=null, Goodsorder::getPayDate, model.getStartDate()); queryWrapper.le(model.getEndDate()!=null, Goodsorder::getPayDate, model.getEndDate()); queryWrapper.eq(model.getPayStatus() !=null,Goodsorder::getPayStatus,model.getPayStatus()); queryWrapper.eq(model.getCode() !=null,Goodsorder::getCode,model.getCode()); queryWrapper.eq(model.getStatus() !=null,Goodsorder::getStatus,model.getStatus()); queryWrapper.eq(model.getOnlineOrderid() !=null,Goodsorder::getOnlineOrderid,model.getOnlineOrderid()); queryWrapper.like(model.getMemberOpenid() !=null,Member::getOpenid,model.getMemberOpenid()); queryWrapper.eq(Goodsorder::getIsdeleted,Constants.ZERO); queryWrapper.orderByDesc(Goodsorder::getPayDate); return queryWrapper; } @Override public PageData findPage(PageWrap pageWrap) { IPage page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity()); MPJLambdaWrapper queryWrapper = initQueryParamByModel(pageWrap.getModel()); return PageData.from(goodsorderJoinMapper.selectJoinPage(page, Goodsorder.class,queryWrapper)); } @Override public long count(Goodsorder goodsorder) { QueryWrapper 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()); homeResponse.setStopServeTips(systemDictDataBiz.queryByCode(Constants.MINI_PROGRAMME,Constants.STOP_SERVE_TIPS).getCode()); homeResponse.setIsStopServe(Constants.ZERO); homeResponse.setAdList(adMapper.selectList(new QueryWrapper() .eq("isdeleted",Constants.ZERO) .eq("status",Constants.ZERO) .orderByDesc("create_date") )); 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()){ homeResponse.setIsStopServe(Constants.ONE); } } //查询是否存在 已支付的 押金订单 Integer status = this.goodsorderMapper.selectCount(new QueryWrapper() .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().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; } @Override public GoodsorderDetailDTO getGoodsorderDetailDTO(String id) { List payOrderDTOList = new ArrayList<>(); Goodsorder goodsorder = goodsorderMapper.selectById(id); QueryWrapper refundQuery = new QueryWrapper<>(); refundQuery.lambda() .eq(Refund::getObjId,id); List 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 wrapper = new MPJLambdaWrapper<>(); wrapper.leftJoin(BaseParam.class,BaseParam::getId,MemberRides::getParamId) .eq(BaseParam::getType, Constants.THREE); List 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 wrapper = new QueryWrapper<>(); wrapper.lambda() .eq(MemberRides::getOrdreId,id); List 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 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 GoodsorderTotalDataVO getTotalData(Goodsorder param){ GoodsorderTotalDataVO model = new GoodsorderTotalDataVO(); model.setPayMoney(new BigDecimal(0.00)); model.setRefundMoney(new BigDecimal(0.00)); model.setClosedMoney(new BigDecimal(0.00)); model.setUnClosedMoney(new BigDecimal(0.00)); model.setClosedNum(0); model.setUnClosedNum(0); model.setPayNum(0); model.setRefundNum(0); QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.lambda().ge(param.getStartDate() !=null,Goodsorder::getPayDate,DateUtil.getShortDateStr(param.getStartDate())); queryWrapper.lambda().le(param.getEndDate() !=null,Goodsorder::getPayDate,DateUtil.getShortDateStr(param.getEndDate())); queryWrapper.lambda().eq(Goodsorder::getPayStatus, Constants.ONE);//已支付 queryWrapper.lambda().eq(Goodsorder::getIsdeleted, Constants.ZERO); queryWrapper.lambda().groupBy(Goodsorder::getStatus); queryWrapper.select( "count(id) as count_num" ,"sum(money) as money" ); //按订单状态分组统计 List detailList = goodsorderMapper.selectList(queryWrapper); for(Goodsorder goodsorder : detailList){ if(Constants.formatIntegerNum(goodsorder.getStatus()) == Constants.GOODSORDER_STATUS.CLOSE.getKey()){ //已结算 model.setClosedNum(model.getClosedNum()+goodsorder.getCountNum()); model.setClosedMoney(model.getClosedMoney().add(Constants.formatDecimalNum(goodsorder.getCloseMoney()))); model.setPayNum(model.getPayNum()+goodsorder.getCountNum()); model.setPayMoney(model.getPayMoney().add(Constants.formatDecimalNum(goodsorder.getMoney()))); }else if(Constants.formatIntegerNum(goodsorder.getStatus()) == Constants.GOODSORDER_STATUS.HAVING_PAY.getKey()){ //已支付未结算 model.setUnClosedNum(model.getUnClosedNum()+goodsorder.getCountNum()); model.setUnClosedMoney(model.getUnClosedMoney().add(Constants.formatDecimalNum(goodsorder.getMoney()))); model.setPayNum(model.getPayNum()+goodsorder.getCountNum()); model.setPayMoney(model.getPayMoney().add(Constants.formatDecimalNum(goodsorder.getMoney()))); } } QueryWrapper queryWrapper2 = new QueryWrapper<>(); queryWrapper2.lambda().ge(param.getStartDate() !=null,Refund::getDoneDate,DateUtil.getShortDateStr(param.getStartDate())); queryWrapper2.lambda().le(param.getEndDate() !=null,Refund::getDoneDate,DateUtil.getShortDateStr(param.getEndDate())); queryWrapper2.lambda().eq(Refund::getIsdeleted, Constants.ZERO); queryWrapper2.select( "count(id) as count_num" ,"sum(money) as money" ); //统计退款数据 Refund refund = refundMapper.selectOne(queryWrapper2.last("limit 1")); if(refund !=null){ model.setRefundNum(Constants.formatIntegerNum(refund.getCountNum())); model.setRefundMoney( Constants.formatDecimalNum(refund.getMoney())); } return model; } @Override public RidesDetailResponse getRidesDetailResponse(String id) { QueryWrapper wrapper = new QueryWrapper<>(); wrapper.lambda() .eq(MemberRides::getOrdreId,id); List memberRides = memberRidesMapper.selectList(wrapper); if (!CollectionUtils.isEmpty(memberRides)){ PricingRuleDTO pricingRule = pricingRuleService.getPricingRule(memberRides); RidesDetailResponse ridesDetailResponse = new RidesDetailResponse(); List 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(),"已支付过定金,无法重复该操作"); } //是否处于小程序停止服务时间内 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(),"当前小程序停止服务,请注意查看公告"); } } //是否处于营业时间 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(),"当前时间暂未营业服务,请注意查看营业时间"); } 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(); } } // 对于通过多个代理的情况,第一个IP为客户端真实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; } }