diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/controller/TbPayController.java b/eladmin-system/src/main/java/cn/ysk/cashier/controller/TbPayController.java new file mode 100644 index 00000000..01cb486d --- /dev/null +++ b/eladmin-system/src/main/java/cn/ysk/cashier/controller/TbPayController.java @@ -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; + } +} diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/dto/ScanPayDTO.java b/eladmin-system/src/main/java/cn/ysk/cashier/dto/ScanPayDTO.java new file mode 100644 index 00000000..e526a9d5 --- /dev/null +++ b/eladmin-system/src/main/java/cn/ysk/cashier/dto/ScanPayDTO.java @@ -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; +} diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/dto/shoptable/UpdateVipDTO.java b/eladmin-system/src/main/java/cn/ysk/cashier/dto/shoptable/UpdateVipDTO.java new file mode 100644 index 00000000..a0de0032 --- /dev/null +++ b/eladmin-system/src/main/java/cn/ysk/cashier/dto/shoptable/UpdateVipDTO.java @@ -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; +} diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/mapper/TbShopPayTypeMapper.java b/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/mapper/TbShopPayTypeMapper.java new file mode 100644 index 00000000..38b1dfb3 --- /dev/null +++ b/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/mapper/TbShopPayTypeMapper.java @@ -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 { +} diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/vo/pay/BaseRequest.java b/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/vo/pay/BaseRequest.java new file mode 100644 index 00000000..8e5dd850 --- /dev/null +++ b/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/vo/pay/BaseRequest.java @@ -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; + +} diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/vo/pay/PayReq.java b/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/vo/pay/PayReq.java new file mode 100644 index 00000000..0056e373 --- /dev/null +++ b/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/vo/pay/PayReq.java @@ -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 map= BeanUtil.transBean2Map(req); + + req.setSign(MD5Util.encrypt(map,privateKey)); + System.out.println(JSONUtil.toJsonStr(req)); + } + + +} diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/vo/pay/ScanPayReq.java b/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/vo/pay/ScanPayReq.java new file mode 100644 index 00000000..8a3de20a --- /dev/null +++ b/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/vo/pay/ScanPayReq.java @@ -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 map= BeanUtil.transBean2Map(req); +// req.setSign(MD5Util.encrypt(map,privateKey,true)); +// +// +// System.out.println(MD5Util.check(req,privateKey)); +// +// System.out.println(JSONUtil.toJsonStr(req)); + + } +} diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/service/TbPayService.java b/eladmin-system/src/main/java/cn/ysk/cashier/service/TbPayService.java new file mode 100644 index 00000000..aebeb931 --- /dev/null +++ b/eladmin-system/src/main/java/cn/ysk/cashier/service/TbPayService.java @@ -0,0 +1,7 @@ +package cn.ysk.cashier.service; + +import cn.ysk.cashier.dto.ScanPayDTO; + +public interface TbPayService { + void scanPay(ScanPayDTO scanPayDTO); +} diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/TbPayServiceImpl.java b/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/TbPayServiceImpl.java new file mode 100644 index 00000000..3b2eca65 --- /dev/null +++ b/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/TbPayServiceImpl.java @@ -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() + .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 cashierCarts = cashierCartMapper.selectList(new LambdaUpdateWrapper() + .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() + .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() + .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 map = BeanUtil.transBean2Map(scanPayReq); +// scanPayReq.setSign(MD5Util.encrypt(map, thirdApply.getAppToken(), true)); +// +// +// ResponseEntity 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() +// .eq(TbOrderInfo::getId, scanPayDTO.getOrderId())); +// +// //更新购物车状态 +// TbCashierCart cashierCart = new TbCashierCart(); +// cashierCart.setStatus("final"); +// int cartCount = cashierCartMapper.update(cashierCart, new LambdaQueryWrapper() +// .eq(TbCashierCart::getOrderId, scanPayDTO.getOrderId())); +// log.info("更新购物车:{}", cartCount); +// +// //更新子单状态 +// TbOrderDetail orderDetail = new TbOrderDetail(); +// orderDetail.setStatus("closed"); +// orderDetailMapper.update(orderDetail, new LambdaQueryWrapper() +// .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 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); +// } +// } +// } +// +// } + + } +} diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/shopimpl/TbShopTableServiceImpl.java b/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/shopimpl/TbShopTableServiceImpl.java index 5379a252..c14352b7 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/shopimpl/TbShopTableServiceImpl.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/shopimpl/TbShopTableServiceImpl.java @@ -669,7 +669,7 @@ public class TbShopTableServiceImpl implements TbShopTableService { TbMerchantAccount merchantAccount = merchantAccountMapper.selectOne(new LambdaQueryWrapper().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); } // 推送耗材信息 diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/utils/MD5Util.java b/eladmin-system/src/main/java/cn/ysk/cashier/utils/MD5Util.java new file mode 100644 index 00000000..3afde0a5 --- /dev/null +++ b/eladmin-system/src/main/java/cn/ysk/cashier/utils/MD5Util.java @@ -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 map = new HashMap(); + if(obj instanceof Map){ + map=(Map) 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 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 resultMap = new HashMap(); + @SuppressWarnings("unchecked") + public static Map mapFn(Map 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) map.get(key)); + } + } else { + resultMap.put(key, map.get(key)); + } + } + } + return resultMap; + } + + @SuppressWarnings("unchecked") + public static boolean check(Object obj,String privateKey){ + Map map=new HashMap(); + if(obj==null){ + return false; + } + if(obj instanceof Map){ + map=(Map) 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]; + } + + + +} diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/utils/RabbitMsgUtils.java b/eladmin-system/src/main/java/cn/ysk/cashier/utils/RabbitMsgUtils.java new file mode 100644 index 00000000..029f3c89 --- /dev/null +++ b/eladmin-system/src/main/java/cn/ysk/cashier/utils/RabbitMsgUtils.java @@ -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 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 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); + } + +}