1.代客下单 会员点单 取消点单
This commit is contained in:
parent
15de68b704
commit
d6bbe73d58
|
|
@ -0,0 +1,26 @@
|
|||
package cn.ysk.cashier.controller;
|
||||
|
||||
import cn.ysk.cashier.dto.ScanPayDTO;
|
||||
import cn.ysk.cashier.service.TbPayService;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/pay")
|
||||
public class TbPayController {
|
||||
|
||||
private final TbPayService payService;
|
||||
|
||||
public TbPayController(TbPayService payService) {
|
||||
this.payService = payService;
|
||||
}
|
||||
|
||||
@PostMapping("/scanPay")
|
||||
public ResponseEntity<?> scanPay(
|
||||
@RequestBody @Validated ScanPayDTO scanPayDTO
|
||||
) {
|
||||
payService.scanPay(scanPayDTO);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
package cn.ysk.cashier.dto;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class ScanPayDTO {
|
||||
private Integer shopId;
|
||||
private Integer orderId;
|
||||
private String authCode;
|
||||
}
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
package cn.ysk.cashier.dto.shoptable;
|
||||
|
||||
import lombok.Data;
|
||||
import org.hibernate.validator.constraints.Range;
|
||||
|
||||
import javax.validation.constraints.NotEmpty;
|
||||
import javax.validation.constraints.NotNull;
|
||||
|
||||
@Data
|
||||
public class UpdateVipDTO {
|
||||
@NotNull
|
||||
private Integer shopId;
|
||||
@NotEmpty
|
||||
private String tableId;
|
||||
@NotNull
|
||||
private String masterId;
|
||||
|
||||
private Integer vipUserId;
|
||||
@NotNull
|
||||
@Range(min = 0, max = 1)
|
||||
private Integer type;
|
||||
}
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
package cn.ysk.cashier.mybatis.mapper;
|
||||
|
||||
import cn.ysk.cashier.mybatis.entity.TbShopOpenId;
|
||||
import cn.ysk.cashier.pojo.TbShopPayType;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
|
||||
public interface TbShopPayTypeMapper extends BaseMapper<TbShopPayType> {
|
||||
}
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
package cn.ysk.cashier.mybatis.vo.pay;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
@Data
|
||||
public class BaseRequest implements Serializable {
|
||||
|
||||
private String appId;
|
||||
|
||||
private String sign;
|
||||
|
||||
private Long timestamp;
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,51 @@
|
|||
package cn.ysk.cashier.mybatis.vo.pay;
|
||||
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import cn.ysk.cashier.utils.BeanUtil;
|
||||
import cn.ysk.cashier.utils.MD5Util;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
@Data
|
||||
public class PayReq extends BaseRequest{
|
||||
|
||||
private String ip;
|
||||
private String mercOrderNo;
|
||||
|
||||
private String notifyUrl;
|
||||
|
||||
private String payAmt;
|
||||
|
||||
private String payType;
|
||||
|
||||
private String payWay;
|
||||
|
||||
private String subject;
|
||||
|
||||
private String userId;
|
||||
|
||||
|
||||
public static void main(String[] args){
|
||||
PayReq req=new PayReq();
|
||||
String privateKey="MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAIqNqTqhN8zE7eFZnwKcyBTENce2wdAtl/gaDHNuNVgg33dS27Jx0fKl9QSHXyzyxbAdG8F94niYbRBstrMymFRjuO72jH+rIH62Ym1k7l8JSLVK2dKHXt8lHDaQGUP10q0EEocnDQ9cL93oBNG1ttsV6vOAu1TPvRK9TGihRAe1AgMBAAECgYBmI8KCl0DkcrSOsRvYuC2DqZWf8el1B3eFjeZp3e/zVOCIPYv6Q5ArWg6DVSxjnWEA0KSagqvGjU+xkQMqnXzPcPMhsIS+1wyR/pP+pwiatO2ioHaQpEqHg9eXhxrgA477/xuKVw9zl5GNqaIgd++2NDXnqLh0Y6OR73f0OB5eDQJBAPihEm+UWLOam/Q/k2+k4Lm2dvxJTBur1fslBiJpgMhgcz/PlwRwpL7aPD0AuPv0NqLouuoTiKpq9icnUv12tgsCQQCOqTANw0IErCHUNdinjXewmG3ui1j9XgM41rSn5ZeTrPL4GhZc2zbS/pZT4PBKUL6NLGkfPHmw4rOmNL/Xc5E/AkBqAwQBX5eSvVHSC2mqKPtJNGv3lqlFAzfyJg8/jQzEY5vAkZsq4Xzdg+A7gptdkvvY6rMIK9wSDhl3CGVyfbORAkA1N+g1OiHmnFACWhP4bU25EyPvWQxZeDi7e1zpRTzGWj5JT3IIMb7B9zcdE0yQbI6pG2gbvvOmiOt7lTH7raEBAkBas2gugvR3f0aGqQcqMpyM627pyRppQ2h58/7KBylP3oR2BReqMUcXeiJ8TuBXzbRXpeVQ0DWOva5CWZJmBMdz";
|
||||
|
||||
req.setAppId("M800202305094c170c");
|
||||
req.setTimestamp(1693966210242l);
|
||||
req.setIp("47.97.26.47");
|
||||
req.setMercOrderNo("bb243a4731234f19af7734350fad19a4");
|
||||
req.setNotifyUrl("https://cashier.machine.sxczgkj.cn/web-custom/custom/third/ysk/wx-pay-notify/bb243a4731234f19af7734350fad19a4");
|
||||
req.setPayAmt("20.00");
|
||||
req.setPayType("03");
|
||||
req.setPayWay("WXZF");
|
||||
req.setSubject("描述");
|
||||
req.setUserId("o5Fun5XQAaAhf00hB9qBNnel9vYQ");
|
||||
|
||||
Map<String,Object> map= BeanUtil.transBean2Map(req);
|
||||
|
||||
req.setSign(MD5Util.encrypt(map,privateKey));
|
||||
System.out.println(JSONUtil.toJsonStr(req));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,36 @@
|
|||
package cn.ysk.cashier.mybatis.vo.pay;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class ScanPayReq extends BaseRequest{
|
||||
|
||||
private String consumeFee;
|
||||
|
||||
private String authCode;
|
||||
|
||||
private String notifyUrl;
|
||||
|
||||
|
||||
|
||||
|
||||
public static void main(String[] args){
|
||||
// String privateKey="MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBALqNx7fzuGjrBFBxbLHOy3SPdVXacVShGAQbpjBP9C+64iQfMnGUUTSTU1IOCY+KTirgE1tZ9oDGYd6bXZcvoMvTheP1rjBlvPxeyolaK0w72bufEcr3TyiZwSEjDzvl0dnj1kUmZTnyImvQeLptVKTPbtdc0ak6ebBB61FuHvPFAgMBAAECgYAYWLKM7lDN2IYanYLq/asNzj8o8jZCLjf9KUKaIYUjyYcD4dJqgknKy8Ne/RgAVLN44v+Dt4z1J27UZ4BiX8PjPIb1MfLnQtNBQf+gITXy6+vRILK7K5js4c23BWHlmxpjsFQjVIN57/d3/eZHY8+wiSCi63fudIEWQcy7xY9BTQJBAPZj8AMSbD89D6iPbB9K5CoqpbWY1XOrbtPdG43FVEcz3Mx45U5Z7pfTuHACsTEkMBB5DjNQavZK5ZIc/mtvtqcCQQDB1GjzaeUVJ3nb4zudaDrB5UoJUsVgFCHZ7TdEB0dWyGg5CtW5Au4auMcHzBvozJDbTLQ8uZsKGbKQ09/TwHuzAkAMsELY9abrbsqSpKgtyF6NqVqVSoSbi1WOxZE4sNPRQuN5CDTO3yTBXt7drdXQMQvknUdU7yxC+MJvztxvTfZ7AkBEkK37hTcrL4a02QIKoYc/daul9qipXxXGcFp/bw+2TDhKDWIjCz1NKJYHVRV+WXbYjJ6paILGpOZ8wuZHkqxvAkAfX4h0XMyastZHj7BNB2rPHYcX8DjThRKNgSKPI5X8Ld0LCssuhkyjwv8qI3jO0+P0yXWqw4T8xZ+fqSmw1eS4";
|
||||
// ScanPayReq req=new ScanPayReq();
|
||||
//
|
||||
// req.setAppId("M800202307127ae681");
|
||||
// req.setTimestamp(1692929677702L);
|
||||
// req.setAuthCode("133423954644827557");
|
||||
// req.setNotifyUrl("https://cashier.machine.sxczgkj.cn/web-netty/netty/third-pay/third-pay-notify/ef554b58bf3a487eabe277c3f16e7200");
|
||||
// req.setConsumeFee(N.mul(new BigDecimal(0.01),BigDecimal.ONE));
|
||||
//
|
||||
// Map<String,Object> map= BeanUtil.transBean2Map(req);
|
||||
// req.setSign(MD5Util.encrypt(map,privateKey,true));
|
||||
//
|
||||
//
|
||||
// System.out.println(MD5Util.check(req,privateKey));
|
||||
//
|
||||
// System.out.println(JSONUtil.toJsonStr(req));
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
package cn.ysk.cashier.service;
|
||||
|
||||
import cn.ysk.cashier.dto.ScanPayDTO;
|
||||
|
||||
public interface TbPayService {
|
||||
void scanPay(ScanPayDTO scanPayDTO);
|
||||
}
|
||||
|
|
@ -0,0 +1,296 @@
|
|||
package cn.ysk.cashier.service.impl;
|
||||
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.ysk.cashier.dto.ScanPayDTO;
|
||||
import cn.ysk.cashier.exception.BadRequestException;
|
||||
import cn.ysk.cashier.mybatis.entity.TbOrderPayment;
|
||||
import cn.ysk.cashier.mybatis.mapper.TbCashierCartMapper;
|
||||
import cn.ysk.cashier.mybatis.mapper.TbOrderDetailMapper;
|
||||
import cn.ysk.cashier.mybatis.mapper.TbOrderInfoMapper;
|
||||
import cn.ysk.cashier.mybatis.mapper.TbShopPayTypeMapper;
|
||||
import cn.ysk.cashier.mybatis.service.TbOrderPaymentService;
|
||||
import cn.ysk.cashier.mybatis.vo.pay.ScanPayReq;
|
||||
import cn.ysk.cashier.pojo.TbShopPayType;
|
||||
import cn.ysk.cashier.pojo.order.TbCashierCart;
|
||||
import cn.ysk.cashier.pojo.order.TbOrderDetail;
|
||||
import cn.ysk.cashier.pojo.order.TbOrderInfo;
|
||||
import cn.ysk.cashier.pojo.shop.TbMerchantThirdApply;
|
||||
import cn.ysk.cashier.repository.shop.TbMerchantThirdApplyRepository;
|
||||
import cn.ysk.cashier.service.TbPayService;
|
||||
import cn.ysk.cashier.utils.BeanUtil;
|
||||
import cn.ysk.cashier.utils.MD5Util;
|
||||
import cn.ysk.cashier.utils.RabbitMsgUtils;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.amqp.rabbit.core.RabbitTemplate;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.web.client.RestTemplate;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.math.RoundingMode;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@Service
|
||||
@Slf4j
|
||||
public class TbPayServiceImpl implements TbPayService {
|
||||
|
||||
// @Value("${gateway.url}")
|
||||
// private String gateWayUrl;
|
||||
// @Value("${client.backUrl}")
|
||||
// private String backUrl;
|
||||
// @Value("${thirdPay.payType}")
|
||||
// private String thirdPayType;
|
||||
// @Value("${thirdPay.url}")
|
||||
// private String url;
|
||||
// @Value("${thirdPay.callBack}")
|
||||
// private String callBack;
|
||||
|
||||
private final TbOrderInfoMapper orderInfoMapper;
|
||||
private final TbCashierCartMapper cashierCartMapper;
|
||||
private final TbMerchantThirdApplyRepository merchantThirdApplyRepository;
|
||||
private final TbOrderPaymentService orderPaymentService;
|
||||
private final TbShopPayTypeMapper shopPayTypeMapper;
|
||||
private final TbOrderDetailMapper orderDetailMapper;
|
||||
private final RabbitTemplate rabbitTemplate;
|
||||
private final RabbitMsgUtils rabbitMsgUtils;
|
||||
|
||||
|
||||
public TbPayServiceImpl(TbOrderInfoMapper orderInfoMapper, TbCashierCartMapper cashierCartMapper, TbMerchantThirdApplyRepository merchantThirdApplyRepository, TbOrderPaymentService orderPaymentService, TbShopPayTypeMapper shopPayTypeMapper, TbOrderDetailMapper orderDetailMapper,RabbitTemplate rabbitTemplate, RabbitMsgUtils rabbitMsgUtils) {
|
||||
this.orderInfoMapper = orderInfoMapper;
|
||||
this.cashierCartMapper = cashierCartMapper;
|
||||
this.merchantThirdApplyRepository = merchantThirdApplyRepository;
|
||||
this.orderPaymentService = orderPaymentService;
|
||||
this.shopPayTypeMapper = shopPayTypeMapper;
|
||||
this.orderDetailMapper = orderDetailMapper;
|
||||
this.rabbitTemplate = rabbitTemplate;
|
||||
this.rabbitMsgUtils = rabbitMsgUtils;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void scanPay(ScanPayDTO scanPayDTO) {
|
||||
TbOrderInfo orderInfo = orderInfoMapper.selectOne(new LambdaUpdateWrapper<TbOrderInfo>()
|
||||
.in(TbOrderInfo::getStatus, "unpaid", "paying")
|
||||
.eq(TbOrderInfo::getId, scanPayDTO.getOrderId())
|
||||
.eq(TbOrderInfo::getShopId, scanPayDTO.getShopId()));
|
||||
|
||||
if (orderInfo == null) {
|
||||
throw new BadRequestException("订单不存在或已支付");
|
||||
}
|
||||
|
||||
|
||||
if (ObjectUtil.isNull(orderInfo.getMerchantId()) || ObjectUtil.isEmpty(orderInfo.getMerchantId())) {
|
||||
throw new BadRequestException("订单商户id为空");
|
||||
}
|
||||
|
||||
|
||||
List<TbCashierCart> cashierCarts = cashierCartMapper.selectList(new LambdaUpdateWrapper<TbCashierCart>()
|
||||
.eq(TbCashierCart::getShopId, scanPayDTO.getShopId())
|
||||
.eq(TbCashierCart::getOrderId, scanPayDTO.getOrderId()));
|
||||
if (cashierCarts.isEmpty()) {
|
||||
throw new BadRequestException("购物车为空");
|
||||
}
|
||||
|
||||
StringBuilder body = new StringBuilder();
|
||||
for (TbCashierCart cashierCart : cashierCarts) {
|
||||
body.append(cashierCart.getName());
|
||||
}
|
||||
|
||||
|
||||
TbMerchantThirdApply thirdApply = merchantThirdApplyRepository.getById(Integer.valueOf(orderInfo.getMerchantId()));
|
||||
if (ObjectUtil.isEmpty(thirdApply) || ObjectUtil.isNull(thirdApply)) {
|
||||
throw new BadRequestException("三方支付信息不存在");
|
||||
}
|
||||
|
||||
String payType;
|
||||
String payName;
|
||||
String qpay;
|
||||
String payTypeCode = scanPayDTO.getAuthCode().substring(0, 2);// 判断收款码
|
||||
|
||||
if(Integer.parseInt(payTypeCode) >=25 && Integer.parseInt(payTypeCode) <= 30){
|
||||
payType = "aliPay";
|
||||
payName = "支付宝支付";
|
||||
qpay = "scanCode";
|
||||
}else if(Integer.parseInt(payTypeCode) >=10 &&Integer.parseInt(payTypeCode) <=19){
|
||||
payType = "wechatPay";
|
||||
payName = "微信支付";
|
||||
qpay = "scanCode";
|
||||
}else if("62".equals(payTypeCode)){
|
||||
throw new BadRequestException("错误码");
|
||||
}else if("01".equals(payTypeCode)){
|
||||
throw new BadRequestException("错误码");
|
||||
}else {
|
||||
throw new BadRequestException("错误码");
|
||||
}
|
||||
|
||||
long count = shopPayTypeMapper.selectCount(new LambdaUpdateWrapper<TbShopPayType>()
|
||||
.eq(TbShopPayType::getShopId, scanPayDTO.getShopId())
|
||||
.eq(TbShopPayType::getIsDisplay, 1)
|
||||
.eq(TbShopPayType::getPayType, qpay));
|
||||
if (count < 1) {
|
||||
throw new BadRequestException("未到找支付方式");
|
||||
}
|
||||
|
||||
TbOrderPayment payment = orderPaymentService.getById(scanPayDTO.getOrderId());
|
||||
if (ObjectUtil.isEmpty(payment) || payment == null) {
|
||||
payment = new TbOrderPayment();
|
||||
payment.setPayTypeId("ysk");
|
||||
payment.setAmount(orderInfo.getOrderAmount().doubleValue());
|
||||
payment.setPaidAmount(orderInfo.getPayAmount().doubleValue());
|
||||
payment.setHasRefundAmount((double) 0);
|
||||
payment.setPayName(payName);
|
||||
payment.setPayType(payType);
|
||||
payment.setReceived(payment.getAmount());
|
||||
payment.setChangeFee((double) 0);
|
||||
payment.setMemberId(orderInfo.getMemberId());
|
||||
payment.setShopId(orderInfo.getShopId());
|
||||
payment.setOrderId(orderInfo.getId().toString());
|
||||
payment.setCreatedAt(System.currentTimeMillis());
|
||||
payment.setAuthCode(scanPayDTO.getAuthCode());
|
||||
orderPaymentService.save(payment);
|
||||
} else {
|
||||
payment.setAuthCode(scanPayDTO.getAuthCode());
|
||||
payment.setUpdatedAt(System.currentTimeMillis());
|
||||
orderPaymentService.updateById(payment);
|
||||
}
|
||||
|
||||
|
||||
orderInfo.setPayAmount(orderInfo.getOrderAmount());
|
||||
orderInfo.setPayType(qpay);
|
||||
orderInfo.setUpdatedAt(System.currentTimeMillis());
|
||||
orderInfoMapper.update(orderInfo, new LambdaUpdateWrapper<TbOrderInfo>()
|
||||
.eq(TbOrderInfo::getId, scanPayDTO.getOrderId()));
|
||||
|
||||
// if ("ysk".equals(thirdPayType)) {
|
||||
//
|
||||
// ScanPayReq scanPayReq = new ScanPayReq();
|
||||
// scanPayReq.setAppId(thirdApply.getAppId());
|
||||
// scanPayReq.setTimestamp(System.currentTimeMillis());
|
||||
// scanPayReq.setAuthCode(scanPayDTO.getAuthCode());
|
||||
// scanPayReq.setNotifyUrl(backUrl);
|
||||
// scanPayReq.setConsumeFee(BigDecimal.valueOf(payment.getAmount()).setScale(2, RoundingMode.DOWN).toPlainString());
|
||||
//
|
||||
// Map<String, Object> map = BeanUtil.transBean2Map(scanPayReq);
|
||||
// scanPayReq.setSign(MD5Util.encrypt(map, thirdApply.getAppToken(), true));
|
||||
//
|
||||
//
|
||||
// ResponseEntity<String> response = restTemplate.postForEntity(gateWayUrl.concat("merchantOrder/scanPay"), scanPayReq, String.class);
|
||||
// if (response.getStatusCodeValue() == 200 && ObjectUtil.isNotEmpty(response.getBody())) {
|
||||
// JSONObject object = JSONObject.parseObject(response.getBody());
|
||||
// if (object.get("code").equals("0")) {
|
||||
// payment.setTradeNumber(object.getJSONObject("data").get("orderNumber").toString());
|
||||
// payment.setUpdatedAt(System.currentTimeMillis());
|
||||
// orderPaymentService.saveOrUpdate(payment);
|
||||
//
|
||||
// //处理支付成功的订单
|
||||
// orderInfo.setStatus("closed");
|
||||
// orderInfo.setPayOrderNo(object.getJSONObject("data").get("orderNumber").toString());
|
||||
// orderInfoMapper.update(orderInfo, new LambdaQueryWrapper<TbOrderInfo>()
|
||||
// .eq(TbOrderInfo::getId, scanPayDTO.getOrderId()));
|
||||
//
|
||||
// //更新购物车状态
|
||||
// TbCashierCart cashierCart = new TbCashierCart();
|
||||
// cashierCart.setStatus("final");
|
||||
// int cartCount = cashierCartMapper.update(cashierCart, new LambdaQueryWrapper<TbCashierCart>()
|
||||
// .eq(TbCashierCart::getOrderId, scanPayDTO.getOrderId()));
|
||||
// log.info("更新购物车:{}", cartCount);
|
||||
//
|
||||
// //更新子单状态
|
||||
// TbOrderDetail orderDetail = new TbOrderDetail();
|
||||
// orderDetail.setStatus("closed");
|
||||
// orderDetailMapper.update(orderDetail, new LambdaQueryWrapper<TbOrderDetail>()
|
||||
// .eq(TbOrderDetail::getOrderId, scanPayDTO.getOrderId()));
|
||||
//
|
||||
// JSONObject jsonObject = new JSONObject();
|
||||
// jsonObject.put("type", "create");
|
||||
// jsonObject.put("orderId", scanPayDTO.getOrderId());
|
||||
//
|
||||
// rabbitMsgUtils.sendOrderCollectMsg(jsonObject);
|
||||
//
|
||||
//
|
||||
// producer.printMechine(orderId);
|
||||
//
|
||||
// return Result.success(CodeEnum.SUCCESS, object.getJSONObject("data"));
|
||||
// } else {
|
||||
// String status = ObjectUtil.isNotEmpty(object.getJSONObject("data")) ? object.getJSONObject("data").getString("status") : null;
|
||||
// if (ObjectUtil.isNotNull(status) && "7".equals(status)) {
|
||||
//
|
||||
// orderInfo.setStatus("paying");
|
||||
// orderInfo.setPayOrderNo(payment.getTradeNumber());
|
||||
// tbOrderInfoMapper.updateByPrimaryKeySelective(orderInfo);
|
||||
//
|
||||
// payment.setTradeNumber(object.getJSONObject("data").get("orderNumber").toString());
|
||||
// payment.setUpdatedAt(System.currentTimeMillis());
|
||||
// tbOrderPaymentMapper.updateByPrimaryKeySelective(payment);
|
||||
// return Result.success(CodeEnum.PAYING);
|
||||
// }
|
||||
//// orderInfo.setStatus("fail");
|
||||
//// orderInfo.setPayOrderNo(payment.getTradeNumber());
|
||||
//// tbOrderInfoMapper.updateByPrimaryKeySelective(orderInfo);
|
||||
//
|
||||
// return Result.fail(object.getString("msg"));
|
||||
// }
|
||||
// }
|
||||
// } else {
|
||||
//
|
||||
// String reqbody = "";
|
||||
//
|
||||
// if (body.length() > 15) {
|
||||
// reqbody = body.substring(0, 6).concat("....").concat(body.substring(body.length() - 6, body.length()));
|
||||
// } else {
|
||||
// reqbody = body.toString();
|
||||
// }
|
||||
//
|
||||
// PublicResp<MainScanResp> publicResp = thirdPayService.mainScan(url, thirdApply.getAppId(), reqbody, reqbody, payment.getAmount().setScale(2, RoundingMode.DOWN).multiply(new BigDecimal(100)).longValue(), payType.equals("wechatPay") ? thirdApply.getSmallAppid() : null, authCode, DateUtils.getSsdfTimes(), thirdApply.getStoreId(), callBack, thirdApply.getAppToken());
|
||||
// if (ObjectUtil.isNotNull(publicResp) && ObjectUtil.isNotEmpty(publicResp)) {
|
||||
// if ("000000".equals(publicResp.getCode())) {
|
||||
// MainScanResp mainScanResp = publicResp.getObjData();
|
||||
// if ("TRADE_SUCCESS".equals(mainScanResp.getState())) {
|
||||
// payment.setTradeNumber(mainScanResp.getPayOrderId());
|
||||
// payment.setUpdatedAt(System.currentTimeMillis());
|
||||
// tbOrderPaymentMapper.updateByPrimaryKeySelective(payment);
|
||||
//
|
||||
// //处理支付成功的订单
|
||||
// orderInfo.setStatus("closed");
|
||||
// orderInfo.setPayOrderNo(mainScanResp.getPayOrderId());
|
||||
// tbOrderInfoMapper.updateByPrimaryKeySelective(orderInfo);
|
||||
//
|
||||
// //更新购物车状态
|
||||
// int cartCount = tbCashierCartMapper.updateByOrderId(orderId, "final");
|
||||
// log.info("更新购物车:{}", cartCount);
|
||||
//
|
||||
// //更新子单状态
|
||||
// tbOrderDetailMapper.updateStatusByOrderIdAndStatus(Integer.valueOf(orderId), "closed");
|
||||
//
|
||||
// JSONObject jsonObject = new JSONObject();
|
||||
// jsonObject.put("token", token);
|
||||
// jsonObject.put("type", "create");
|
||||
// jsonObject.put("orderId", orderId);
|
||||
//
|
||||
// producer.putOrderCollect(jsonObject.toJSONString());
|
||||
//
|
||||
// producer.printMechine(orderId);
|
||||
//
|
||||
// return Result.success(CodeEnum.SUCCESS, mainScanResp);
|
||||
// } else if ("TRADE_AWAIT".equals(mainScanResp.getState())) {
|
||||
// orderInfo.setStatus("paying");
|
||||
// orderInfo.setPayOrderNo(payment.getTradeNumber());
|
||||
// tbOrderInfoMapper.updateByPrimaryKeySelective(orderInfo);
|
||||
//
|
||||
// payment.setTradeNumber(mainScanResp.getPayOrderId());
|
||||
// payment.setUpdatedAt(System.currentTimeMillis());
|
||||
// tbOrderPaymentMapper.updateByPrimaryKeySelective(payment);
|
||||
// return Result.success(CodeEnum.PAYING);
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// }
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -669,7 +669,7 @@ public class TbShopTableServiceImpl implements TbShopTableService {
|
|||
TbMerchantAccount merchantAccount = merchantAccountMapper.selectOne(new LambdaQueryWrapper<TbMerchantAccount>().eq(TbMerchantAccount::getAccount, account));
|
||||
String day = DateUtils.getDay();
|
||||
JSONObject jsonObject = new JSONObject();
|
||||
String key = "SHOP:CODE:USER:pc" + ":" + shopId + ":" + day + ":" + tableId + ":" + (vipUserId == null ? "" : vipUserId);
|
||||
String key = "SHOP:CODE:USER:pc" + ":" + shopId + ":" + day + ":" + tableId;
|
||||
String userCode = redisTemplate.opsForValue().get(key);
|
||||
|
||||
if (StringUtils.isEmpty(userCode) || "null".equals(userCode) || "#null".equals(userCode)) {
|
||||
|
|
@ -809,8 +809,9 @@ public class TbShopTableServiceImpl implements TbShopTableService {
|
|||
cashierCartMapper.updateById(cashierCart);
|
||||
}
|
||||
if (isFirst) {
|
||||
redisTemplate.delete("SHOP:CODE:USER:pc:" + createOrderDTO.getShopId() + ":"
|
||||
+ day + ":" + createOrderDTO.getTableId() + ":" + (createOrderDTO.getVipUserId() == null ? "" : createOrderDTO.getVipUserId()));
|
||||
String key = "SHOP:CODE:USER:pc" + ":" + createOrderDTO.getShopId() + ":" + day + ":" + createOrderDTO.getTableId();
|
||||
|
||||
redisTemplate.delete(key);
|
||||
}
|
||||
|
||||
// 推送耗材信息
|
||||
|
|
|
|||
|
|
@ -0,0 +1,158 @@
|
|||
package cn.ysk.cashier.utils;
|
||||
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.security.MessageDigest;
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public class MD5Util {
|
||||
|
||||
|
||||
private static final Logger log = LoggerFactory.getLogger(MD5Util.class);
|
||||
|
||||
private static final String hexDigIts[] = {"0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"};
|
||||
|
||||
public static String encrypt(String plainText) {
|
||||
try {
|
||||
return encrypt(plainText,true);
|
||||
} catch (UnsupportedEncodingException e) {
|
||||
e.printStackTrace();
|
||||
log.error("MD5加密异常:",e);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @Title: encrypt
|
||||
* @Description: TODO(16位或32位密码)
|
||||
* @param @param
|
||||
* plainText
|
||||
* @param @param
|
||||
* flag true为32位,false为16位
|
||||
* @throws UnsupportedEncodingException
|
||||
*/
|
||||
public static String encrypt(String plainText, boolean flag) throws UnsupportedEncodingException {
|
||||
try {
|
||||
if (ObjectUtil.isEmpty(plainText)) {
|
||||
return null;
|
||||
}
|
||||
MessageDigest md = MessageDigest.getInstance("MD5");
|
||||
String encrStr = byteArrayToHexString(md.digest(plainText.getBytes("UTF-8")));
|
||||
if (flag)
|
||||
return encrStr;
|
||||
else
|
||||
return encrStr.substring(8, 24);
|
||||
} catch (NoSuchAlgorithmException e) {
|
||||
e.printStackTrace();
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public static String encrypt(Object obj,String privateKey){
|
||||
if(obj==null){
|
||||
return null;
|
||||
}
|
||||
Map<String, Object> map = new HashMap<String,Object>();
|
||||
if(obj instanceof Map){
|
||||
map=(Map<String, Object>) obj;
|
||||
}else{
|
||||
map = BeanUtil.transBean2Map(obj);
|
||||
}
|
||||
return encrypt(map,privateKey,true);
|
||||
}
|
||||
|
||||
/**
|
||||
* @Title: encrypt
|
||||
* @Description: TODO(16位或32位密码)
|
||||
* @param @param
|
||||
* plainText
|
||||
* @param @param
|
||||
* flag true为32位,false为16位
|
||||
* @throws UnsupportedEncodingException
|
||||
*/
|
||||
public static String encrypt(Map<String, Object> map, String privateKey,boolean flag) {
|
||||
String param = null;
|
||||
map.remove("sign");
|
||||
map.remove("encrypt");
|
||||
String result = BeanUtil.mapOrderStr(map);
|
||||
if (StringUtils.isEmpty(result)) {
|
||||
return null;
|
||||
}
|
||||
param = encrypt(encrypt(result)+privateKey);
|
||||
if (flag) {
|
||||
return param;
|
||||
} else {
|
||||
param = param.substring(8, 24);
|
||||
}
|
||||
return param;
|
||||
}
|
||||
|
||||
public static Map<String, Object> resultMap = new HashMap<String, Object>();
|
||||
@SuppressWarnings("unchecked")
|
||||
public static Map<String, Object> mapFn(Map<String, Object> map) {
|
||||
for (String key : map.keySet()) {
|
||||
if (map.get(key) != null && map.get(key) != "" && (!key.equals("BTYPE") && !key.equals("SIGN"))) {
|
||||
if (key.equals("INPUT")) {
|
||||
if (map.get(key) != null) {
|
||||
mapFn((Map<String, Object>) map.get(key));
|
||||
}
|
||||
} else {
|
||||
resultMap.put(key, map.get(key));
|
||||
}
|
||||
}
|
||||
}
|
||||
return resultMap;
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public static boolean check(Object obj,String privateKey){
|
||||
Map<String,Object> map=new HashMap<String,Object>();
|
||||
if(obj==null){
|
||||
return false;
|
||||
}
|
||||
if(obj instanceof Map){
|
||||
map=(Map<String, Object>) obj;
|
||||
}else{
|
||||
map = BeanUtil.transBean2Map(obj);
|
||||
}
|
||||
System.out.println("check:"+ JSONUtil.toJsonStr(map));
|
||||
String sign=(String)map.get("sign");
|
||||
if(sign==null){
|
||||
return false;
|
||||
}
|
||||
String str=encrypt(obj,privateKey);
|
||||
System.out.println("check: "+str);
|
||||
|
||||
return sign.equals(str)?true:false;
|
||||
}
|
||||
|
||||
public static String byteArrayToHexString(byte b[]){
|
||||
StringBuffer resultSb = new StringBuffer();
|
||||
for(int i = 0; i < b.length; i++){
|
||||
resultSb.append(byteToHexString(b[i]));
|
||||
}
|
||||
return resultSb.toString();
|
||||
}
|
||||
|
||||
public static String byteToHexString(byte b){
|
||||
int n = b;
|
||||
if(n < 0){
|
||||
n += 256;
|
||||
}
|
||||
int d1 = n / 16;
|
||||
int d2 = n % 16;
|
||||
return hexDigIts[d1] + hexDigIts[d2];
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,46 @@
|
|||
package cn.ysk.cashier.utils;
|
||||
|
||||
import cn.ysk.cashier.cons.rabbit.RabbitConstants;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.amqp.rabbit.connection.CorrelationData;
|
||||
import org.springframework.amqp.rabbit.core.RabbitTemplate;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
@Component
|
||||
@Slf4j
|
||||
public class RabbitMsgUtils implements RabbitTemplate.ConfirmCallback {
|
||||
private final RabbitTemplate rabbitTemplate;
|
||||
|
||||
public RabbitMsgUtils(RabbitTemplate rabbitTemplate) {
|
||||
this.rabbitTemplate = rabbitTemplate;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void confirm(CorrelationData correlationData, boolean ack, String cause) {
|
||||
log.info(" 回调id:{}", correlationData);
|
||||
if (ack) {
|
||||
log.info("消息成功消费");
|
||||
} else {
|
||||
log.info("消息消费失败:{}", cause);
|
||||
}
|
||||
}
|
||||
|
||||
private <T> void sendMsg(String exchange, String routingKey, T data, String note) {
|
||||
CorrelationData correlationId = new CorrelationData(UUID.randomUUID().toString());
|
||||
log.info("开始发送{}mq消息, msgId: {}, exchange: {}, routingKey: {}, data: {}", correlationId.getId(), note, exchange, routingKey, data);
|
||||
rabbitTemplate.convertAndSend(exchange, routingKey, JSONObject.toJSONString(data), correlationId);
|
||||
}
|
||||
|
||||
public <T> void sendOrderCollectMsg(T data) {
|
||||
sendMsg(RabbitConstants.CART_ORDER_COLLECT_PUT, RabbitConstants.CART_ORDER_COLLECT_ROUTINGKEY_PUT, data, "订单信息收集");
|
||||
}
|
||||
|
||||
public void printTicket(String content){
|
||||
CorrelationData correlationId = new CorrelationData(UUID.randomUUID().toString());
|
||||
rabbitTemplate.convertAndSend(RabbitConstants.PRINT_MECHINE_COLLECT_PUT, RabbitConstants.PRINT_MECHINE_COLLECT_ROUTINGKEY_PUT, content, correlationId);
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
Reference in New Issue