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<RentingHourseOrderDao, RentingHourseOrder> 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<RentingHourseOrder>().lambda().eq(RentingHourseOrder::getOrderSn,wxPayNotifyOrderVO.getOrderSn()));
|
RentingHoursePreOrder rentingHoursePreOrder=rentingHoursePreOrderDao.selectOne(new QueryWrapper<RentingHoursePreOrder>().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<RentingHourseOrder>().lambda().eq(RentingHourseOrder::getOrderSn,wxPayOrderVO.getOrderSn()));
|
RentingHoursePreOrder rentingHoursePreOrder=rentingHoursePreOrderDao.selectOne(new QueryWrapper<RentingHoursePreOrder>().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);
|
}
|
}
|