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 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().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().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(); } }