package com.panzhihua.service_community.service.impl; import cn.hutool.core.date.DateUnit; import cn.hutool.core.date.DateUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.panzhihua.common.model.dtos.property.CommonPage; import com.panzhihua.common.model.vos.R; import com.panzhihua.common.model.vos.community.rentHouse.RentingHourseOrderVO; import com.panzhihua.common.model.vos.community.rentHouse.WxPayNotifyOrderVO; import com.panzhihua.common.model.vos.community.rentHouse.WxPayOrderVO; import com.panzhihua.common.utlis.DateUtils; import com.panzhihua.common.utlis.Snowflake; import com.panzhihua.common.utlis.WxPayUtils; import com.panzhihua.common.utlis.WxUtil; import com.panzhihua.service_community.dao.RentingHoursePayingOrderDao; import com.panzhihua.service_community.dao.RentingHoursePreOrderDao; import com.panzhihua.service_community.dao.RentingHourseRegisterDao; import com.panzhihua.service_community.entity.RentingHourseOrder; import com.panzhihua.service_community.dao.RentingHourseOrderDao; import com.panzhihua.service_community.entity.RentingHoursePayingOrder; import com.panzhihua.service_community.entity.RentingHoursePreOrder; import com.panzhihua.service_community.entity.RentingHourseRegister; import com.panzhihua.service_community.service.RentingHourseOrderService; import lombok.extern.slf4j.Slf4j; import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.math.BigDecimal; import java.util.Date; import java.util.List; /** * 房屋租赁-房屋订单表(RentingHourseOrder)表服务实现类 * * @author makejava * @since 2021-11-23 10:46:57 */ @Slf4j @Service public class RentingHourseOrderServiceImpl extends ServiceImpl implements RentingHourseOrderService { @Resource private RentingHoursePreOrderDao rentingHoursePreOrderDao; @Resource private RentingHourseOrderDao rentingHourseOrderDao; @Resource private RentingHoursePayingOrderDao rentingHoursePayingOrderDao; @Resource private RentingHourseRegisterDao rentingHourseRegisterDao; @Resource private RabbitTemplate rabbitTemplate; @Value("${min.app.isTest}") private Boolean isTest; @Value("${min.app.appid}") private String appid; @Value("${min.app.payKey}") private String payKey; @Value("${min.app.mchId}") private String mchId; @Value("${min.app.notifyUrl}") private String notifyUrl; @Override public R pageList(CommonPage commonPage) { return R.ok(rentingHourseOrderDao.pageList(new Page(commonPage.getPage(), commonPage.getSize()),commonPage)); } @Override public R createOrder(RentingHourseOrderVO rentingHourseOrderVO) { RentingHourseOrder rentingHourseOrder=new RentingHourseOrder(); BeanUtils.copyProperties(rentingHourseOrderVO,rentingHourseOrder); RentingHourseRegister rentingHourseRegister=rentingHourseRegisterDao.selectById(rentingHourseOrderVO.getRegisterId()); if(rentingHourseRegister==null){ return R.fail("未查询到该租房信息"); } if(rentingHourseRegister.getStatus()!=RentingHourseRegister.Status.dcz&&rentingHourseRegister.getDetailStatus()!=3){ return R.fail("该房屋状态不可出租"); } rentingHourseOrder.setVillageId(rentingHourseRegister.getVillageId()); rentingHourseOrder.setVillageName(rentingHourseRegister.getVillageName()); rentingHourseOrder.setStreetId(rentingHourseRegister.getStreetId()); rentingHourseOrder.setCreateDate(new Date()); rentingHourseOrder.setId(Snowflake.getId()); rentingHourseOrder.setOrderSn(DateUtils.getCurrentDateTimeStamp()+""); rentingHourseOrder.setStatus(RentingHourseOrder.status.wzf); rentingHourseOrder.setOrderType(RentingHourseOrder.orderType.pt); if(rentingHourseOrderDao.insert(rentingHourseOrder)>0){ return R.ok(rentingHourseOrder.getOrderSn()); } return R.fail("添加失败"); } /** * 支付回调 判断订单类型并进行相应的逻辑处理 * @param wxPayNotifyOrderVO * @return */ @Override public R wxPayNotify(WxPayNotifyOrderVO wxPayNotifyOrderVO) { RentingHoursePayingOrder rentingHoursePayingOrder=new RentingHoursePayingOrder(); BeanUtils.copyProperties(wxPayNotifyOrderVO,rentingHoursePayingOrder); rentingHoursePayingOrder.setId(Snowflake.getId()); rentingHoursePayingOrderDao.insert(rentingHoursePayingOrder); RentingHourseOrder rentingHourseOrder=rentingHourseOrderDao.selectOne(new QueryWrapper().lambda().eq(RentingHourseOrder::getOrderSn,wxPayNotifyOrderVO.getOrderSn())); RentingHoursePreOrder rentingHoursePreOrder=rentingHoursePreOrderDao.selectOne(new QueryWrapper().lambda().eq(RentingHoursePreOrder::getOrderSn,wxPayNotifyOrderVO.getOrderSn())); if(rentingHourseOrder!=null){ rentingHourseOrder.setStatus(RentingHourseOrder.status.yzf); rentingHourseOrder.setPaySn(rentingHoursePayingOrder.getId()); rentingHourseOrderDao.updateById(rentingHourseOrder); RentingHourseRegister rentingHourseRegister=rentingHourseRegisterDao.selectById(rentingHourseOrder.getRegisterId()); rentingHourseRegister.setStatus(2); rentingHourseRegister.setDetailStatus(4); rentingHourseRegisterDao.updateById(rentingHourseRegister); rabbitTemplate.convertAndSend("huacheng.order.exchange", "huacheng.order.key", rentingHourseOrder, message -> { message.getMessageProperties().setHeader("x-delay", dateToSecond(DateUtil.endOfDay(DateUtil.date())) * 1000 * 3600); return message; }); } if(rentingHoursePreOrder!=null){ rentingHoursePreOrder.setStatus(RentingHoursePreOrder.status.yjl); rentingHoursePreOrder.setPaySn(rentingHoursePayingOrder.getId()); rentingHoursePreOrderDao.updateById(rentingHoursePreOrder); RentingHourseRegister rentingHourseRegister=rentingHourseRegisterDao.selectById(rentingHourseOrder.getRegisterId()); rentingHourseRegister.setStatus(2); rentingHourseRegister.setDetailStatus(4); rentingHourseRegisterDao.updateById(rentingHourseRegister); rabbitTemplate.convertAndSend("huacheng.preOrder.exchange", "huacheng.preOrder.key", rentingHoursePreOrder, message -> { message.getMessageProperties().setHeader("x-delay", dateToSecond(rentingHoursePreOrder.getExpireDate()) * 1000 * 3600); return message; }); } return R.ok(); } @Override public R wxPay(WxPayOrderVO wxPayOrderVO) { RentingHourseOrder rentingHourseOrder=rentingHourseOrderDao.selectOne(new QueryWrapper().lambda().eq(RentingHourseOrder::getOrderSn,wxPayOrderVO.getOrderSn())); RentingHoursePreOrder rentingHoursePreOrder=rentingHoursePreOrderDao.selectOne(new QueryWrapper().lambda().eq(RentingHoursePreOrder::getOrderSn,wxPayOrderVO.getOrderSn())); if(rentingHourseOrder!=null){ try { BigDecimal money = rentingHourseOrder.getTotalAccount(); if (isTest) { money = BigDecimal.valueOf(0.01); } // 调用wx支付 WxPayUtils.getUnifiedorder(appid, mchId, payKey, notifyUrl, "签订租房合同", wxPayOrderVO.getOpenId(), wxPayOrderVO.getOrderSn(), money,null); return R.ok(); } catch (Exception e) { log.error("调用微信支付异常,异常原因:" + e.getMessage()); } } if(rentingHoursePreOrder!=null){ try { BigDecimal money = rentingHoursePreOrder.getDingMoney(); if (isTest) { money = BigDecimal.valueOf(0.01); } // 调用wx支付 WxPayUtils.getUnifiedorder(appid, mchId, payKey, notifyUrl, "定金支付", wxPayOrderVO.getOpenId(), wxPayOrderVO.getOrderSn(), money,null); return R.ok(); } catch (Exception e) { log.error("调用微信支付异常,异常原因:" + e.getMessage()); } } return R.fail("订单信息异常"); } @Override public R statics(RentingHourseOrderVO rentingHourseOrderVO) { return R.ok(this.rentingHourseOrderDao.orderStatics(rentingHourseOrderVO)); } private Long dateToSecond(Date expireTime){ return DateUtil.between(new Date(),expireTime, DateUnit.MS); } }