package com.panzhihua.service_community.service.impl;
|
|
import com.alibaba.fastjson.JSONObject;
|
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.microCommercialStreet.McsOrderVO;
|
import com.panzhihua.common.utlis.DateUtils;
|
import com.panzhihua.common.utlis.SmsUtil;
|
import com.panzhihua.common.utlis.StringUtils;
|
import com.panzhihua.common.utlis.WxPayUtils;
|
import com.panzhihua.service_community.dao.McsMerchantDAO;
|
import com.panzhihua.service_community.entity.McsMerchant;
|
import com.panzhihua.service_community.entity.McsOrder;
|
import com.panzhihua.service_community.dao.McsOrderDao;
|
import com.panzhihua.service_community.service.McsMerchantService;
|
import com.panzhihua.service_community.service.McsOrderService;
|
import com.panzhihua.service_community.util.QRCodeUtil;
|
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 org.springframework.transaction.annotation.Transactional;
|
|
import javax.annotation.Resource;
|
import java.math.BigDecimal;
|
import java.util.Date;
|
|
import static java.util.Objects.nonNull;
|
|
/**
|
* 商业街订单表(McsOrder)表服务实现类
|
*
|
* @author makejava
|
* @since 2022-01-04 16:10:07
|
*/
|
@Slf4j
|
@Service
|
public class McsOrderServiceImpl extends ServiceImpl<McsOrderDao, McsOrder> implements McsOrderService {
|
@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("${mcs.notifyUrl}")
|
private String notifyUrl;
|
@Resource
|
private RabbitTemplate rabbitTemplate;
|
@Resource
|
private McsMerchantService mcsMerchantService;
|
@Resource
|
private McsMerchantDAO mcsMerchantDAO;
|
|
private static String H5_LOGIN_APPID="wx475fcd33c8030df8";
|
@Override
|
public R pageList(CommonPage commonPage) {
|
return R.ok(this.baseMapper.pageList(new Page(commonPage.getPage(),commonPage.getSize()),commonPage));
|
}
|
|
@Override
|
public R insert(McsOrderVO mcsOrderVO) {
|
McsMerchant mcsMerchant = mcsMerchantDAO.selectOne(new QueryWrapper<McsMerchant>().lambda()
|
.eq(McsMerchant::getUserId, mcsOrderVO.getUserId()));
|
McsOrder mcsOrder=new McsOrder();
|
BeanUtils.copyProperties(mcsOrderVO,mcsOrder);
|
if (nonNull(mcsMerchant)) {
|
if (mcsMerchant.getIsDel()) {
|
mcsMerchantDAO.deleteById(mcsMerchant.getId());
|
} else {
|
mcsOrder.setMerchantId(mcsMerchant.getId());
|
}
|
}
|
mcsOrder.setStatus(0);
|
mcsOrder.setCreateTime(new Date());
|
mcsOrder.setOrderNo(DateUtils.getCurrentDateStrNoSignal());
|
this.baseMapper.insert(mcsOrder);
|
rabbitTemplate.convertAndSend("huacheng.mcsOrder.exchange", "huacheng.mcsOrder.key", mcsOrder, message -> {
|
message.getMessageProperties().setHeader("x-delay", 1000 * 1800);
|
return message;
|
});
|
return R.ok(mcsOrder);
|
}
|
|
@Override
|
public R detail(Long id) {
|
McsOrderVO detail = this.baseMapper.detail(id);
|
Date cancelAt = DateUtils.addMinutes(detail.getCreateTime(), 30);
|
Date nowDate = new Date();
|
detail.setCancelCountdown(cancelAt.getTime() - nowDate.getTime());
|
return R.ok(detail);
|
}
|
|
@Override
|
public R wxPay(McsOrderVO mcsOrderVO) {
|
McsOrder mcsOrder=this.baseMapper.selectById(mcsOrderVO.getId());
|
if(mcsOrder!=null&&mcsOrder.getStatus()==0){
|
try {
|
BigDecimal money = mcsOrder.getMoney();
|
if (isTest) {
|
money = BigDecimal.valueOf(0.01);
|
}
|
// 调用wx支付
|
String realAppId=appid;
|
if(mcsOrderVO.getTradeType().equals("JSAPI")){
|
realAppId=H5_LOGIN_APPID;
|
}
|
String result = WxPayUtils.h5pay(realAppId, mchId, payKey, notifyUrl, "点亮支付", mcsOrderVO.getOpenId(),
|
mcsOrder.getOrderNo(), money,mcsOrderVO.getTradeType(), mcsOrderVO.getClientIp());
|
if (mcsOrderVO.getTradeType().equals("NATIVE")) {
|
JSONObject jsonObjectResult = JSONObject.parseObject(result);
|
result = QRCodeUtil.getBase64QRCode(jsonObjectResult.get("codeUrl").toString());
|
}
|
return R.ok(result);
|
} catch (Exception e) {
|
log.error("调用微信支付异常,异常原因:" + e.getMessage());
|
}
|
}
|
return R.fail("订单状态异常");
|
}
|
|
@Override
|
public R sendContent(Long id) {
|
String phone=this.baseMapper.selectPhone(id);
|
if(StringUtils.isNotEmpty(phone)){
|
SmsUtil smsUtil=new SmsUtil();
|
int result=smsUtil.sendContent(phone);
|
if(result>0){
|
return R.ok();
|
}
|
}
|
return R.fail("短信发送异常");
|
}
|
|
@Override
|
@Transactional
|
public R notify(McsOrderVO mcsOrderVO) {
|
McsOrder mcsOrderBase=this.baseMapper.selectOne(new QueryWrapper<McsOrder>().lambda().eq(McsOrder::getOrderNo,mcsOrderVO.getOrderNo()));
|
mcsOrderBase.setStatus(1);
|
mcsOrderBase.setPayNo(mcsOrderVO.getPayNo());
|
mcsOrderBase.setPayTime(mcsOrderVO.getPayTime());
|
mcsOrderBase.setPaymentMethod("微信支付");
|
int i=this.baseMapper.updateById(mcsOrderBase);
|
if(i>0){
|
R r = mcsMerchantService.updateOrAddMcsMerchantAfterOrder(mcsOrderBase.getOrderNo(), mcsOrderBase.getConfigId(), mcsOrderBase.getUserId());
|
if (R.isOk(r) && nonNull(r.getData())) {
|
mcsOrderBase.setMerchantId(JSONObject.parseObject(JSONObject.toJSONString(r.getData()), Long.class));
|
this.baseMapper.updateById(mcsOrderBase);
|
}
|
}
|
return R.ok();
|
}
|
}
|