From 26d9ec6a6ccfac35a2d2efa95ba75657d7689633 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B0=AD=E5=87=AF=E5=87=AF?= Date: Thu, 10 Oct 2024 14:40:06 +0800 Subject: [PATCH 1/6] =?UTF-8?q?=E9=85=8D=E7=BD=AE=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=E7=8E=AF=E5=A2=83=E6=94=AF=E4=BB=98=E6=88=90=E5=8A=9F=E5=9B=9E?= =?UTF-8?q?=E8=B0=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../system/cashierservice/controller/NotifyController.java | 5 ++++- .../system/cashierservice/interceptor/CustomFilter.java | 7 +++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/controller/NotifyController.java b/src/main/java/com/chaozhanggui/system/cashierservice/controller/NotifyController.java index 16647b9..135f76a 100644 --- a/src/main/java/com/chaozhanggui/system/cashierservice/controller/NotifyController.java +++ b/src/main/java/com/chaozhanggui/system/cashierservice/controller/NotifyController.java @@ -25,8 +25,11 @@ public class NotifyController { } @RequestMapping("notifyPay") - public String notifyPay(@RequestBody Map map){ + public String notifyPay(@RequestParam Map map){ log.info("notifyPay:{}", JSON.toJSONString(map)); + log.error("notifyPay:{}", JSON.toJSONString(map)); + log.debug("notifyPay:{}", JSON.toJSONString(map)); + log.warn("notifyPay:{}", JSON.toJSONString(map)); return null; } diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/interceptor/CustomFilter.java b/src/main/java/com/chaozhanggui/system/cashierservice/interceptor/CustomFilter.java index 0cdd811..969c1e9 100644 --- a/src/main/java/com/chaozhanggui/system/cashierservice/interceptor/CustomFilter.java +++ b/src/main/java/com/chaozhanggui/system/cashierservice/interceptor/CustomFilter.java @@ -1,5 +1,7 @@ package com.chaozhanggui.system.cashierservice.interceptor; +import cn.hutool.extra.servlet.ServletUtil; +import com.alibaba.fastjson.JSON; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; @@ -7,6 +9,7 @@ import javax.servlet.*; import javax.servlet.annotation.WebFilter; import javax.servlet.http.HttpServletRequest; import java.io.IOException; +import java.util.Map; @Slf4j @Component @@ -20,6 +23,10 @@ public class CustomFilter implements Filter { @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { log.info(">>>> customFilter doFilter start <<<<"); + log.info("request ip:{}", servletRequest.getRemoteAddr()); + Map params = ServletUtil.getParams(servletRequest); + log.info("request params:{}", params); + log.info("request params:{}", JSON.toJSONString(params)); RequestWrapper requestWapper = null; if (servletRequest instanceof HttpServletRequest) { requestWapper = new RequestWrapper((HttpServletRequest) servletRequest); From 67910debe414154891bb079599194dd163e97895 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B0=AD=E5=87=AF=E5=87=AF?= Date: Thu, 10 Oct 2024 14:53:14 +0800 Subject: [PATCH 2/6] =?UTF-8?q?=E9=85=8D=E7=BD=AE=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=E7=8E=AF=E5=A2=83=E6=94=AF=E4=BB=98=E6=88=90=E5=8A=9F=E5=9B=9E?= =?UTF-8?q?=E8=B0=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cashierservice/controller/NotifyController.java | 13 ++++++++----- .../cashierservice/interceptor/CustomFilter.java | 7 ------- .../cashierservice/interceptor/SignInterceptor.java | 4 ++++ 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/controller/NotifyController.java b/src/main/java/com/chaozhanggui/system/cashierservice/controller/NotifyController.java index 135f76a..ab910e2 100644 --- a/src/main/java/com/chaozhanggui/system/cashierservice/controller/NotifyController.java +++ b/src/main/java/com/chaozhanggui/system/cashierservice/controller/NotifyController.java @@ -1,6 +1,7 @@ package com.chaozhanggui.system.cashierservice.controller; +import cn.hutool.extra.servlet.ServletUtil; import com.alibaba.fastjson.JSON; import com.chaozhanggui.system.cashierservice.service.OrderService; import com.chaozhanggui.system.cashierservice.sign.CodeEnum; @@ -8,6 +9,7 @@ import com.chaozhanggui.system.cashierservice.sign.Result; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.*; +import javax.servlet.http.HttpServletRequest; import java.util.HashMap; import java.util.Map; @@ -25,11 +27,12 @@ public class NotifyController { } @RequestMapping("notifyPay") - public String notifyPay(@RequestParam Map map){ - log.info("notifyPay:{}", JSON.toJSONString(map)); - log.error("notifyPay:{}", JSON.toJSONString(map)); - log.debug("notifyPay:{}", JSON.toJSONString(map)); - log.warn("notifyPay:{}", JSON.toJSONString(map)); + public String notifyPay(HttpServletRequest request,@RequestParam Map map){ + log.info("request ip:{}", request.getRemoteAddr()); + Map params = ServletUtil.getParams(request); + String body = ServletUtil.getBody(request); + log.info("notifyPay params:{}", JSON.toJSONString(params)); + log.info("notifyPay body:{}", body); return null; } diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/interceptor/CustomFilter.java b/src/main/java/com/chaozhanggui/system/cashierservice/interceptor/CustomFilter.java index 969c1e9..0cdd811 100644 --- a/src/main/java/com/chaozhanggui/system/cashierservice/interceptor/CustomFilter.java +++ b/src/main/java/com/chaozhanggui/system/cashierservice/interceptor/CustomFilter.java @@ -1,7 +1,5 @@ package com.chaozhanggui.system.cashierservice.interceptor; -import cn.hutool.extra.servlet.ServletUtil; -import com.alibaba.fastjson.JSON; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; @@ -9,7 +7,6 @@ import javax.servlet.*; import javax.servlet.annotation.WebFilter; import javax.servlet.http.HttpServletRequest; import java.io.IOException; -import java.util.Map; @Slf4j @Component @@ -23,10 +20,6 @@ public class CustomFilter implements Filter { @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { log.info(">>>> customFilter doFilter start <<<<"); - log.info("request ip:{}", servletRequest.getRemoteAddr()); - Map params = ServletUtil.getParams(servletRequest); - log.info("request params:{}", params); - log.info("request params:{}", JSON.toJSONString(params)); RequestWrapper requestWapper = null; if (servletRequest instanceof HttpServletRequest) { requestWapper = new RequestWrapper((HttpServletRequest) servletRequest); diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/interceptor/SignInterceptor.java b/src/main/java/com/chaozhanggui/system/cashierservice/interceptor/SignInterceptor.java index 12b8d3e..a908a8a 100644 --- a/src/main/java/com/chaozhanggui/system/cashierservice/interceptor/SignInterceptor.java +++ b/src/main/java/com/chaozhanggui/system/cashierservice/interceptor/SignInterceptor.java @@ -49,6 +49,10 @@ public class SignInterceptor implements HandlerInterceptor { return true; } + if (requestUri.contains("/notify/notifyPay")) { + return true; + } + if (requestUri.contains("/notify/cancel")) { return true; } From 4cb65ae32d907df7241c489550c43fc30bc51a88 Mon Sep 17 00:00:00 2001 From: Tankaikai Date: Thu, 10 Oct 2024 15:16:49 +0800 Subject: [PATCH 3/6] =?UTF-8?q?=E9=85=8D=E7=BD=AE=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=E7=8E=AF=E5=A2=83=E6=94=AF=E4=BB=98=E6=88=90=E5=8A=9F=E5=9B=9E?= =?UTF-8?q?=E8=B0=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../system/cashierservice/service/PayService.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/service/PayService.java b/src/main/java/com/chaozhanggui/system/cashierservice/service/PayService.java index 4dbabe1..da3dd4b 100644 --- a/src/main/java/com/chaozhanggui/system/cashierservice/service/PayService.java +++ b/src/main/java/com/chaozhanggui/system/cashierservice/service/PayService.java @@ -4,6 +4,7 @@ import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONUtil; +import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; @@ -328,12 +329,12 @@ public class PayService { } else { String status = ObjectUtil.isNotEmpty(object.getJSONObject("data")) ? object.getJSONObject("data").getString("status") : null; if (ObjectUtil.isNotNull(status) && "7".equals(status)) { - + payment.setTradeNumber(object.getJSONObject("data").get("orderNumber").toString()); + log.info("支付中4:{}", JSON.toJSONString(payment)); 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); @@ -437,6 +438,7 @@ public class PayService { return Result.success(CodeEnum.SUCCESS, mainScanResp); } else if ("TRADE_AWAIT".equals(mainScanResp.getState())) { + log.info("支付中2:{}", JSON.toJSONString(payment)); orderInfo.setStatus("paying"); orderInfo.setPayOrderNo(payment.getTradeNumber()); tbOrderInfoMapper.updateByPrimaryKeySelective(orderInfo); @@ -1923,6 +1925,7 @@ public class PayService { return Result.success(CodeEnum.SUCCESS, mapper.readTree(scanpayResp.getPayInfo())); } else if ("TRADE_AWAIT".equals(scanpayResp.getState())) { + log.info("支付中3:{}", JSON.toJSONString(payment)); orderInfo.setStatus("paying"); orderInfo.setPayOrderNo(payment.getTradeNumber()); tbOrderInfoMapper.updateByPrimaryKeySelective(orderInfo); @@ -2067,6 +2070,7 @@ public class PayService { return Result.success(CodeEnum.SUCCESS, mapper.readTree(scanpayResp.getPayInfo())); } else if ("TRADE_AWAIT".equals(scanpayResp.getState())) { + log.info("支付中1:{}", JSON.toJSONString(payment)); orderInfo.setStatus("paying"); orderInfo.setPayOrderNo(payment.getTradeNumber()); tbOrderInfoMapper.updateByPrimaryKeySelective(orderInfo); From c9da82824618cdb8e4a54657cf217c1c2cda1234 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B0=AD=E5=87=AF=E5=87=AF?= Date: Thu, 10 Oct 2024 15:28:29 +0800 Subject: [PATCH 4/6] =?UTF-8?q?=E9=85=8D=E7=BD=AE=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=E7=8E=AF=E5=A2=83=E6=94=AF=E4=BB=98=E6=88=90=E5=8A=9F=E5=9B=9E?= =?UTF-8?q?=E8=B0=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../system/cashierservice/service/PayService.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/service/PayService.java b/src/main/java/com/chaozhanggui/system/cashierservice/service/PayService.java index da3dd4b..28fa3c5 100644 --- a/src/main/java/com/chaozhanggui/system/cashierservice/service/PayService.java +++ b/src/main/java/com/chaozhanggui/system/cashierservice/service/PayService.java @@ -438,12 +438,13 @@ public class PayService { return Result.success(CodeEnum.SUCCESS, mainScanResp); } else if ("TRADE_AWAIT".equals(mainScanResp.getState())) { + payment.setTradeNumber(mainScanResp.getPayOrderId()); log.info("支付中2:{}", JSON.toJSONString(payment)); orderInfo.setStatus("paying"); orderInfo.setPayOrderNo(payment.getTradeNumber()); tbOrderInfoMapper.updateByPrimaryKeySelective(orderInfo); - payment.setTradeNumber(mainScanResp.getPayOrderId()); + payment.setUpdatedAt(System.currentTimeMillis()); tbOrderPaymentMapper.updateByPrimaryKeySelective(payment); // 修改台桌状态 @@ -1925,12 +1926,12 @@ public class PayService { return Result.success(CodeEnum.SUCCESS, mapper.readTree(scanpayResp.getPayInfo())); } else if ("TRADE_AWAIT".equals(scanpayResp.getState())) { + payment.setTradeNumber(scanpayResp.getPayOrderId()); log.info("支付中3:{}", JSON.toJSONString(payment)); orderInfo.setStatus("paying"); orderInfo.setPayOrderNo(payment.getTradeNumber()); tbOrderInfoMapper.updateByPrimaryKeySelective(orderInfo); - payment.setTradeNumber(scanpayResp.getPayOrderId()); payment.setUpdatedAt(System.currentTimeMillis()); tbOrderPaymentMapper.updateByPrimaryKeySelective(payment); @@ -2070,12 +2071,12 @@ public class PayService { return Result.success(CodeEnum.SUCCESS, mapper.readTree(scanpayResp.getPayInfo())); } else if ("TRADE_AWAIT".equals(scanpayResp.getState())) { + payment.setTradeNumber(scanpayResp.getPayOrderId()); log.info("支付中1:{}", JSON.toJSONString(payment)); orderInfo.setStatus("paying"); orderInfo.setPayOrderNo(payment.getTradeNumber()); tbOrderInfoMapper.updateByPrimaryKeySelective(orderInfo); - payment.setTradeNumber(scanpayResp.getPayOrderId()); payment.setUpdatedAt(System.currentTimeMillis()); tbOrderPaymentMapper.updateByPrimaryKeySelective(payment); From ba710c854e5eb606545c6164c2c840b3c9d99a6e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B0=AD=E5=87=AF=E5=87=AF?= Date: Thu, 10 Oct 2024 16:46:34 +0800 Subject: [PATCH 5/6] =?UTF-8?q?=E9=85=8D=E7=BD=AE=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=E7=8E=AF=E5=A2=83=E6=94=AF=E4=BB=98=E6=88=90=E5=8A=9F=E5=9B=9E?= =?UTF-8?q?=E8=B0=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/NotifyController.java | 45 ++++++++++++----- .../dao/TbOrderPaymentMapper.java | 7 ++- .../cashierservice/service/OrderService.java | 49 +++++++++++++++++-- .../resources/mapper/TbOrderPaymentMapper.xml | 4 ++ 4 files changed, 87 insertions(+), 18 deletions(-) diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/controller/NotifyController.java b/src/main/java/com/chaozhanggui/system/cashierservice/controller/NotifyController.java index ab910e2..3e7f9fc 100644 --- a/src/main/java/com/chaozhanggui/system/cashierservice/controller/NotifyController.java +++ b/src/main/java/com/chaozhanggui/system/cashierservice/controller/NotifyController.java @@ -1,17 +1,20 @@ package com.chaozhanggui.system.cashierservice.controller; +import cn.hutool.core.date.DateUtil; import cn.hutool.extra.servlet.ServletUtil; import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.chaozhanggui.system.cashierservice.entity.TbOrderInfo; import com.chaozhanggui.system.cashierservice.service.OrderService; import com.chaozhanggui.system.cashierservice.sign.CodeEnum; import com.chaozhanggui.system.cashierservice.sign.Result; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.*; +import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import java.util.HashMap; -import java.util.Map; @CrossOrigin(origins = "*") @RestController @@ -20,24 +23,44 @@ import java.util.Map; public class NotifyController { - private final OrderService orderService; - - public NotifyController(OrderService orderService) { - this.orderService = orderService; - } + @Resource + private OrderService orderService; @RequestMapping("notifyPay") - public String notifyPay(HttpServletRequest request,@RequestParam Map map){ - log.info("request ip:{}", request.getRemoteAddr()); - Map params = ServletUtil.getParams(request); + public Result notifyPay(HttpServletRequest request) { String body = ServletUtil.getBody(request); - log.info("notifyPay params:{}", JSON.toJSONString(params)); log.info("notifyPay body:{}", body); - return null; + JSONObject resp = JSON.parseObject(body); + + String code = resp.getString("code"); + String msg = resp.getString("msg"); + if (!"000000".equals(code)) { + log.error("支付失败:{}", resp.getString("msg")); + return Result.fail(msg); + } + JSONObject bizData = JSON.parseObject(resp.getString("bizData")); + String state = bizData.getString("state"); + String note = bizData.getString("note"); + String payOrderId = bizData.getString("payOrderId"); + String payType = bizData.getString("payType"); + String payTime = bizData.getString("payTime"); + long paidTime = DateUtil.parseDateTime(payTime).getTime(); + if (!"TRADE_SUCCESS".equals(state)) { + log.error("支付失败:{},{}", state, note); + return Result.fail(state + ":" + note); + } + TbOrderInfo entity = orderService.selectByPayOrderNo(payOrderId); + if (entity == null) { + return Result.fail("订单不存在"); + } + entity.setPaidTime(paidTime); + orderService.payCallbackCloseOrder(entity, payType); + return Result.success(CodeEnum.SUCCESS); } /** * 支付取消 + * * @return 影响数量 */ @PostMapping("cancel") diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/dao/TbOrderPaymentMapper.java b/src/main/java/com/chaozhanggui/system/cashierservice/dao/TbOrderPaymentMapper.java index d2449f9..d8b746c 100644 --- a/src/main/java/com/chaozhanggui/system/cashierservice/dao/TbOrderPaymentMapper.java +++ b/src/main/java/com/chaozhanggui/system/cashierservice/dao/TbOrderPaymentMapper.java @@ -1,8 +1,9 @@ package com.chaozhanggui.system.cashierservice.dao; import com.chaozhanggui.system.cashierservice.entity.TbOrderPayment; -import org.apache.ibatis.annotations.Mapper; -import org.springframework.stereotype.Component; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface TbOrderPaymentMapper { int deleteByPrimaryKey(Integer id); @@ -18,4 +19,6 @@ public interface TbOrderPaymentMapper { int updateByPrimaryKey(TbOrderPayment record); TbOrderPayment selectByOrderId(String orderId); + + List selectListByOrderId(@Param("orderId") String orderId); } diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/service/OrderService.java b/src/main/java/com/chaozhanggui/system/cashierservice/service/OrderService.java index 5f0ced3..e73289e 100644 --- a/src/main/java/com/chaozhanggui/system/cashierservice/service/OrderService.java +++ b/src/main/java/com/chaozhanggui/system/cashierservice/service/OrderService.java @@ -1,5 +1,6 @@ package com.chaozhanggui.system.cashierservice.service; +import cn.hutool.core.convert.Convert; import cn.hutool.core.date.DateUtil; import cn.hutool.core.thread.ThreadUtil; import cn.hutool.core.util.ObjectUtil; @@ -18,7 +19,10 @@ import com.chaozhanggui.system.cashierservice.entity.dto.ChoseCountDTO; import com.chaozhanggui.system.cashierservice.entity.dto.ReturnCartDTO; import com.chaozhanggui.system.cashierservice.entity.dto.ShopEatTypeInfoDTO; import com.chaozhanggui.system.cashierservice.entity.dto.UpdateVipDTO; -import com.chaozhanggui.system.cashierservice.entity.po.*; +import com.chaozhanggui.system.cashierservice.entity.po.CartPo; +import com.chaozhanggui.system.cashierservice.entity.po.OrderPo; +import com.chaozhanggui.system.cashierservice.entity.po.QueryCartPo; +import com.chaozhanggui.system.cashierservice.entity.po.SkuInfoPo; import com.chaozhanggui.system.cashierservice.entity.vo.CartVo; import com.chaozhanggui.system.cashierservice.exception.MsgException; import com.chaozhanggui.system.cashierservice.exception.NotPrintException; @@ -39,6 +43,7 @@ import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import javax.annotation.Resource; import java.math.BigDecimal; import java.util.*; import java.util.concurrent.CompletableFuture; @@ -117,6 +122,9 @@ public class OrderService { @Autowired private RabbitMsgUtils rabbitMsgUtils; + @Resource + private TbOrderPaymentMapper tbOrderPaymentMapper; + public OrderService(WxAccountUtil wxAccountUtil, MPCashierCartMapper mpCashierCartMapper, TbShopOpenIdMapper shopOpenIdMapper, MpShopTableMapper mpShopTableMapper, @@ -401,7 +409,7 @@ public class OrderService { if (shopEatTypeInfoDTO.isTakeout()) { query.eq(TbCashierCart::getTradeDay, DateUtils.getDay()) .eq(TbCashierCart::getMasterId, MasterId); - }else { + } else { query.eq(TbCashierCart::getTableId, tableId).and(query2 -> query2.and(query3 -> query3.eq(TbCashierCart::getTradeDay, DateUtils.getDay()) .eq(TbCashierCart::getMasterId, MasterId)) .or(query4 -> query4.isNull(TbCashierCart::getTradeDay) @@ -464,7 +472,7 @@ public class OrderService { List shopOpenIds = shopOpenIdMapper.selectStateByShopIdAndType(product.getShopId(), ShopWxMsgTypeEnum.STOCK_MSG.getType()); shopOpenIds.forEach(item -> { wxAccountUtil.sendStockWarnMsg("商品库存不足", product.getName(), - product.getStockNumber() - num , item.getOpenId(), ShopWxMsgTypeEnum.STOCK_MSG, shopId); + product.getStockNumber() - num, item.getOpenId(), ShopWxMsgTypeEnum.STOCK_MSG, shopId); }); } } @@ -852,7 +860,6 @@ public class OrderService { orderDetails.add(orderDetail); - // 库存预警校验 if (TableConstant.CART_SEAT_ID.equals(cashierCart.getProductId())) { CompletableFuture.runAsync(() -> checkWarnLineAndSendMsg(tbProduct, product, Integer.valueOf(cashierCart.getShopId()), cashierCart.getNumber())); @@ -1112,7 +1119,7 @@ public class OrderService { mpCashierCartMapper.update(null, new LambdaUpdateWrapper() .eq(TbCashierCart::getOrderId, tbOrderInfo.getId()) .eq(TbCashierCart::getShopId, shopId) - .eq(TbCashierCart::getStatus, "create") + .eq(TbCashierCart::getStatus, "create") .set(TbCashierCart::getStatus, "refund")); mpOrderDetailService.update(null, new LambdaUpdateWrapper() @@ -1857,4 +1864,36 @@ public class OrderService { .eq(TbOrderInfo::getStatus, "paying") .set(TbOrderInfo::getStatus, "unpaid")); } + + public TbOrderInfo selectByPayOrderNo(String payOrderNo) { + return mPOrderInfoMapper.selectOne(new LambdaQueryWrapper() + .eq(TbOrderInfo::getPayOrderNo, payOrderNo)); + } + + @Transactional(rollbackFor = Exception.class) + public void payCallbackCloseOrder(TbOrderInfo entity, String payType) { + mPOrderInfoMapper.update(null, new LambdaUpdateWrapper() + .eq(TbOrderInfo::getId, entity.getId()) + .eq(TbOrderInfo::getStatus, "paying") + .set(TbOrderInfo::getStatus, "closed") + .set(TbOrderInfo::getPaidTime, entity.getPaidTime()) + .set(TbOrderInfo::getUpdatedAt, System.currentTimeMillis()) + ); + List list = tbOrderPaymentMapper.selectListByOrderId(Convert.toStr(entity.getId())); + for (TbOrderPayment payment : list) { + payment.setTradeNumber(entity.getPayOrderNo()); + payment.setUpdatedAt(System.currentTimeMillis()); + if ("WECHAT".equals(payType)) { + payment.setPayName("微信支付"); + payment.setPayType("wechatPay"); + } else if ("ALIPAY".equals(payType)) { + payment.setPayName("支付宝支付"); + payment.setPayType("aliPay"); + } else { + payment.setPayName(payType); + payment.setPayType(payType); + } + tbOrderPaymentMapper.updateByPrimaryKey(payment); + } + } } diff --git a/src/main/resources/mapper/TbOrderPaymentMapper.xml b/src/main/resources/mapper/TbOrderPaymentMapper.xml index 9e85d21..f015a3d 100644 --- a/src/main/resources/mapper/TbOrderPaymentMapper.xml +++ b/src/main/resources/mapper/TbOrderPaymentMapper.xml @@ -260,4 +260,8 @@ + + \ No newline at end of file From ed2f5763ceadf2b316c6bbea3aa0df856b2cb581 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B0=AD=E5=87=AF=E5=87=AF?= Date: Thu, 10 Oct 2024 18:28:48 +0800 Subject: [PATCH 6/6] =?UTF-8?q?=E5=BA=97=E9=93=BA=E5=B0=8F=E7=A5=A8?= =?UTF-8?q?=E6=89=93=E5=8D=B0=E8=AE=B0=E5=BD=95=E9=9C=80=E6=B1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../rabbit/print/FeiPrinter.java | 15 +- .../rabbit/print/LocalLabelPrinter.java | 15 +- .../service/impl/ShopPrintLogServiceImpl.java | 42 ++- .../cashierservice/util/FeieyunPrintUtil.java | 355 +++++++++++------- 4 files changed, 282 insertions(+), 145 deletions(-) diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/rabbit/print/FeiPrinter.java b/src/main/java/com/chaozhanggui/system/cashierservice/rabbit/print/FeiPrinter.java index 8139b6e..3e539c0 100644 --- a/src/main/java/com/chaozhanggui/system/cashierservice/rabbit/print/FeiPrinter.java +++ b/src/main/java/com/chaozhanggui/system/cashierservice/rabbit/print/FeiPrinter.java @@ -10,11 +10,13 @@ import com.chaozhanggui.system.cashierservice.model.OrderDetailPO; import com.chaozhanggui.system.cashierservice.mybatis.MPOrderDetailMapper; import com.chaozhanggui.system.cashierservice.mybatis.MPOrderInfoMapper; import com.chaozhanggui.system.cashierservice.mybatis.MpShopInfoMapper; +import com.chaozhanggui.system.cashierservice.service.ShopPrintLogService; import com.chaozhanggui.system.cashierservice.util.DateUtils; import com.chaozhanggui.system.cashierservice.util.FeieyunPrintUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; +import javax.annotation.Resource; import java.util.Date; import java.util.List; @@ -27,6 +29,9 @@ public class FeiPrinter extends PrinterHandler{ private final MPOrderDetailMapper mPOrderDetailMapper; private final TbProductSkuMapper tbProductSkuMapper; + @Resource + private ShopPrintLogService shopPrintLogService; + public FeiPrinter(TbProductMapper productMapper, TbProductSkuMapper tbProductSkuMapper, TbShopUserMapper tbShopUserMapper, MPOrderInfoMapper mPOrderInfoMapper, MpShopInfoMapper mpShopInfoMapper, MpShopInfoMapper mpShopInfoMapper1, MPOrderDetailMapper mPOrderDetailMapper) { super("fePrinter", productMapper, tbProductSkuMapper, tbShopUserMapper); this.mPOrderInfoMapper = mPOrderInfoMapper; @@ -49,9 +54,9 @@ public class FeiPrinter extends PrinterHandler{ return; } String remark = sku.getSpecSnap(); - FeieyunPrintUtil.getPrintData(machine.getAddress(), orderInfo.getMasterId(), + String[] resp = FeieyunPrintUtil.getPrintData(machine.getAddress(), orderInfo.getMasterId(), DateUtils.getTime(new Date(orderInfo.getCreatedAt())), orderDetail.getProductName(), orderDetail.getNum(), remark); - + shopPrintLogService.save(machine, "新订单", resp[0], resp[1]); } @Override @@ -64,7 +69,8 @@ public class FeiPrinter extends PrinterHandler{ (ObjectUtil.isEmpty(orderInfo.getPayType()) || ObjectUtil.isNull(orderInfo.getPayType()) ? "" : orderInfo.getPayType()), "0", detailList, orderInfo.getRemark(), null, null); String printType = "退款单"; - FeieyunPrintUtil.getCashPrintData(detailPO, machine.getAddress(), printType, printType); + String[] resp = FeieyunPrintUtil.getCashPrintData(detailPO, machine.getAddress(), printType, printType); + shopPrintLogService.save(machine, "退款单", resp[0], resp[1]); } @Override @@ -77,7 +83,8 @@ public class FeiPrinter extends PrinterHandler{ (ObjectUtil.isEmpty(orderInfo.getPayType()) || ObjectUtil.isNull(orderInfo.getPayType()) ? "" : orderInfo.getPayType()), "0", detailList, orderInfo.getRemark(), null, null); String printType = "结算单"; - FeieyunPrintUtil.getCashPrintData(detailPO, machine.getAddress(), printType, printType); + String[] resp = FeieyunPrintUtil.getCashPrintData(detailPO, machine.getAddress(), printType, printType); + shopPrintLogService.save(machine, "结算单", resp[0], resp[1]); } @Override diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/rabbit/print/LocalLabelPrinter.java b/src/main/java/com/chaozhanggui/system/cashierservice/rabbit/print/LocalLabelPrinter.java index 679c70b..5985e43 100644 --- a/src/main/java/com/chaozhanggui/system/cashierservice/rabbit/print/LocalLabelPrinter.java +++ b/src/main/java/com/chaozhanggui/system/cashierservice/rabbit/print/LocalLabelPrinter.java @@ -1,20 +1,22 @@ package com.chaozhanggui.system.cashierservice.rabbit.print; -import cn.hutool.core.util.ObjectUtil; import com.chaozhanggui.system.cashierservice.dao.TbProductMapper; import com.chaozhanggui.system.cashierservice.dao.TbProductSkuMapper; import com.chaozhanggui.system.cashierservice.dao.TbShopUserMapper; -import com.chaozhanggui.system.cashierservice.entity.*; +import com.chaozhanggui.system.cashierservice.entity.TbOrderDetail; +import com.chaozhanggui.system.cashierservice.entity.TbOrderInfo; +import com.chaozhanggui.system.cashierservice.entity.TbPrintMachine; +import com.chaozhanggui.system.cashierservice.entity.TbProductSkuWithBLOBs; import com.chaozhanggui.system.cashierservice.entity.dto.CallNumPrintDTO; import com.chaozhanggui.system.cashierservice.model.OrderDetailPO; import com.chaozhanggui.system.cashierservice.mybatis.MPOrderDetailMapper; -import com.chaozhanggui.system.cashierservice.mybatis.MPOrderInfoMapper; -import com.chaozhanggui.system.cashierservice.mybatis.MpShopInfoMapper; +import com.chaozhanggui.system.cashierservice.service.ShopPrintLogService; import com.chaozhanggui.system.cashierservice.util.DateUtils; import com.chaozhanggui.system.cashierservice.util.FeieyunPrintUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; +import javax.annotation.Resource; import java.util.Date; import java.util.List; @@ -24,6 +26,8 @@ public class LocalLabelPrinter extends PrinterHandler{ private final MPOrderDetailMapper mPOrderDetailMapper; private final TbProductSkuMapper tbProductSkuMapper; + @Resource + private ShopPrintLogService shopPrintLogService; public LocalLabelPrinter(TbProductMapper productMapper, TbProductSkuMapper tbProductSkuMapper, TbShopUserMapper tbShopUserMapper, MPOrderDetailMapper mPOrderDetailMapper) { super("local", productMapper, tbProductSkuMapper, tbShopUserMapper); @@ -44,8 +48,9 @@ public class LocalLabelPrinter extends PrinterHandler{ return; } for (int i = 0; i < orderDetail.getNum(); i++) { - FeieyunPrintUtil.printLabelMsg(machine.getAddress(), orderInfo.getTableName(), orderDetail.getProductName(), + String[] resp = FeieyunPrintUtil.printLabelMsg(machine.getAddress(), orderInfo.getTableName(), orderDetail.getProductName(), 1, DateUtils.getTimes(new Date(orderInfo.getCreatedAt())), sku.getSalePrice().toPlainString(), sku.getSpecSnap()); + shopPrintLogService.save(machine, "新订单", resp[0], resp[1]); } } diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/service/impl/ShopPrintLogServiceImpl.java b/src/main/java/com/chaozhanggui/system/cashierservice/service/impl/ShopPrintLogServiceImpl.java index f260bec..1a7f938 100644 --- a/src/main/java/com/chaozhanggui/system/cashierservice/service/impl/ShopPrintLogServiceImpl.java +++ b/src/main/java/com/chaozhanggui/system/cashierservice/service/impl/ShopPrintLogServiceImpl.java @@ -13,6 +13,7 @@ import com.chaozhanggui.system.cashierservice.entity.TbPrintMachine; import com.chaozhanggui.system.cashierservice.entity.TbPrintMachineLog; import com.chaozhanggui.system.cashierservice.entity.dto.ShopPrintLogDTO; import com.chaozhanggui.system.cashierservice.service.ShopPrintLogService; +import com.chaozhanggui.system.cashierservice.util.FeieyunPrintUtil; import com.chaozhanggui.system.cashierservice.util.PrinterUtils; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; @@ -94,6 +95,7 @@ public class ShopPrintLogServiceImpl extends ServiceImpl yxxStatusMap = MapUtil.builder(0, "离线(设备上线后自动补打)").put(1, "在线").put(2, "获取失败").put(3, "未激活").put(4, "设备已禁用").build(); // 云想印 if ("yxyPrinter".equals(config.getContentType())) { @@ -110,12 +112,26 @@ public class ShopPrintLogServiceImpl extends ServiceImpl1"); sb.append(""); sb.append(masterId); @@ -50,7 +51,7 @@ public class FeieyunPrintUtil { sb.append("¥"); sb.append(money); - String content=sb.toString(); + String content = sb.toString(); //通过POST请求,发送打印信息到服务器 RequestConfig requestConfig = RequestConfig.custom() @@ -64,37 +65,33 @@ public class FeieyunPrintUtil { HttpPost post = new HttpPost(URL); List nvps = new ArrayList(); - nvps.add(new BasicNameValuePair("user",USER)); - String STIME = String.valueOf(System.currentTimeMillis()/1000); - nvps.add(new BasicNameValuePair("stime",STIME)); - nvps.add(new BasicNameValuePair("sig",signature(USER,UKEY,STIME))); - nvps.add(new BasicNameValuePair("apiname","Open_printLabelMsg"));//固定值,不需要修改 - nvps.add(new BasicNameValuePair("sn",sn)); - nvps.add(new BasicNameValuePair("content",content)); - nvps.add(new BasicNameValuePair("times","1"));//打印联数 + nvps.add(new BasicNameValuePair("user", USER)); + String STIME = String.valueOf(System.currentTimeMillis() / 1000); + nvps.add(new BasicNameValuePair("stime", STIME)); + nvps.add(new BasicNameValuePair("sig", signature(USER, UKEY, STIME))); + nvps.add(new BasicNameValuePair("apiname", "Open_printLabelMsg"));//固定值,不需要修改 + nvps.add(new BasicNameValuePair("sn", sn)); + nvps.add(new BasicNameValuePair("content", content)); + nvps.add(new BasicNameValuePair("times", "1"));//打印联数 CloseableHttpResponse response = null; String result = null; - try - { - post.setEntity(new UrlEncodedFormEntity(nvps,"utf-8")); + try { + post.setEntity(new UrlEncodedFormEntity(nvps, "utf-8")); response = httpClient.execute(post); int statecode = response.getStatusLine().getStatusCode(); - if(statecode == 200){ + if (statecode == 200) { HttpEntity httpentity = response.getEntity(); - if (httpentity != null){ + if (httpentity != null) { //服务器返回的JSON字符串,建议要当做日志记录起来 result = EntityUtils.toString(httpentity); } } - } - catch (Exception e) - { + } catch (Exception e) { e.printStackTrace(); - } - finally{ + } finally { try { - if(response!=null){ + if (response != null) { response.close(); } } catch (IOException e) { @@ -111,31 +108,32 @@ public class FeieyunPrintUtil { e.printStackTrace(); } } - return result; + return new String[]{content, result}; } - - - public static String getPrintData(String sn,String pickupNumber,String date,String productName,Integer number,String remark) { + public static String buildPrintContent(String pickupNumber, String date, String productName, Integer number, String remark) { StringBuilder builder = new StringBuilder(); - builder.append(""+pickupNumber+"

"); - builder.append("时间: "+date+"


"); + builder.append("" + pickupNumber + "

"); + builder.append("时间: " + date + "


"); - if(productName.length()>4||remark.length()>4){ - builder.append(""+productName+" "+number+"

"); - builder.append(""+remark+"
"); - }else { - builder.append(""+productName+" "+number+"

"); - builder.append(""+remark+"
"); + if (productName.length() > 4 || remark.length() > 4) { + builder.append("" + productName + " " + number + "

"); + builder.append("" + remark + "
"); + } else { + builder.append("" + productName + " " + number + "

"); + builder.append("" + remark + "
"); } builder.append("





"); builder.append(""); + return builder.toString(); + } - String content=builder.toString(); + public static String[] getPrintData(String sn, String pickupNumber, String date, String productName, Integer number, String remark) { + String content = buildPrintContent(pickupNumber, date, productName, number, remark); System.out.println("content:".concat(content)); @@ -151,38 +149,34 @@ public class FeieyunPrintUtil { HttpPost post = new HttpPost(URL); List nvps = new ArrayList(); - nvps.add(new BasicNameValuePair("user",USER)); - String STIME = String.valueOf(System.currentTimeMillis()/1000); - nvps.add(new BasicNameValuePair("stime",STIME)); - nvps.add(new BasicNameValuePair("sig",signature(USER,UKEY,STIME))); - nvps.add(new BasicNameValuePair("apiname","Open_printMsg"));//固定值,不需要修改 - nvps.add(new BasicNameValuePair("sn",sn)); - nvps.add(new BasicNameValuePair("content",content)); - nvps.add(new BasicNameValuePair("times","1"));//打印联数 + nvps.add(new BasicNameValuePair("user", USER)); + String STIME = String.valueOf(System.currentTimeMillis() / 1000); + nvps.add(new BasicNameValuePair("stime", STIME)); + nvps.add(new BasicNameValuePair("sig", signature(USER, UKEY, STIME))); + nvps.add(new BasicNameValuePair("apiname", "Open_printMsg"));//固定值,不需要修改 + nvps.add(new BasicNameValuePair("sn", sn)); + nvps.add(new BasicNameValuePair("content", content)); + nvps.add(new BasicNameValuePair("times", "1"));//打印联数 CloseableHttpResponse response = null; String result = null; - try - { - post.setEntity(new UrlEncodedFormEntity(nvps,"utf-8")); + try { + post.setEntity(new UrlEncodedFormEntity(nvps, "utf-8")); response = httpClient.execute(post); int statecode = response.getStatusLine().getStatusCode(); - if(statecode == 200){ + if (statecode == 200) { HttpEntity httpentity = response.getEntity(); - if (httpentity != null){ + if (httpentity != null) { //服务器返回的JSON字符串,建议要当做日志记录起来 result = EntityUtils.toString(httpentity); System.out.println("result:".concat(result)); } } - } - catch (Exception e) - { + } catch (Exception e) { e.printStackTrace(); - } - finally{ + } finally { try { - if(response!=null){ + if (response != null) { response.close(); } } catch (IOException e) { @@ -199,78 +193,71 @@ public class FeieyunPrintUtil { e.printStackTrace(); } } - return result; + return new String[]{content, result}; } - - - - - - - public static String getCashPrintData(OrderDetailPO detailPO,String sn, String type, String orderType){ + public static String[] getCashPrintData(OrderDetailPO detailPO, String sn, String type, String orderType) { StringBuilder sb = new StringBuilder(); - sb.append(""+detailPO.getMerchantName()+"

"); - sb.append(""+type+"【"+detailPO.getMasterId()+"】

"); - sb.append("订单号: "+detailPO.getOrderNo()+"
"); - sb.append("交易时间: "+detailPO.getTradeDate()+"
"); - sb.append("收银员: "+detailPO.getOperator()+"


"); + sb.append("" + detailPO.getMerchantName() + "

"); + sb.append("" + type + "【" + detailPO.getMasterId() + "】

"); + sb.append("订单号: " + detailPO.getOrderNo() + "
"); + sb.append("交易时间: " + detailPO.getTradeDate() + "
"); + sb.append("收银员: " + detailPO.getOperator() + "


"); sb.append("------------------------
"); char paddingCharacter = ' '; - sb.append(""+String.format("%-15s","品名").replace(' ', paddingCharacter)+String.format("%-4s","数量").replace(' ', paddingCharacter)+String.format("%4s","小计").replace(' ', paddingCharacter)+"
"); + sb.append("" + String.format("%-15s", "品名").replace(' ', paddingCharacter) + String.format("%-4s", "数量").replace(' ', paddingCharacter) + String.format("%4s", "小计").replace(' ', paddingCharacter) + "
"); for (OrderDetailPO.Detail detail : detailPO.getDetailList()) { - if(detail.getProductName().length()>4){ + if (detail.getProductName().length() > 4) { - int count=getProducrName(detail.getProductName()); - if(count<=0){ - int length=15-(detail.getProductName().length()-4); - sb.append(""+String.format("%-"+length+"s",detail.getProductName()).replace(' ', paddingCharacter)+String.format("%-4s",detail.getNumber()).replace(' ', paddingCharacter)+String.format("%8s",detail.getAmount()).replace(' ', paddingCharacter)+"
"); - }else { - int length=15+count-(detail.getProductName().length()-4); - sb.append(""+String.format("%-"+length+"s",detail.getProductName()).replace(' ', paddingCharacter)+String.format("%-4s",detail.getNumber()).replace(' ', paddingCharacter)+String.format("%8s",detail.getAmount()).replace(' ', paddingCharacter)+"
"); + int count = getProducrName(detail.getProductName()); + if (count <= 0) { + int length = 15 - (detail.getProductName().length() - 4); + sb.append("" + String.format("%-" + length + "s", detail.getProductName()).replace(' ', paddingCharacter) + String.format("%-4s", detail.getNumber()).replace(' ', paddingCharacter) + String.format("%8s", detail.getAmount()).replace(' ', paddingCharacter) + "
"); + } else { + int length = 15 + count - (detail.getProductName().length() - 4); + sb.append("" + String.format("%-" + length + "s", detail.getProductName()).replace(' ', paddingCharacter) + String.format("%-4s", detail.getNumber()).replace(' ', paddingCharacter) + String.format("%8s", detail.getAmount()).replace(' ', paddingCharacter) + "
"); } - }else { - sb.append(""+String.format("%-15s",detail.getProductName()).replace(' ', paddingCharacter)+String.format("%-4s",detail.getNumber()).replace(' ', paddingCharacter)+String.format("%8s",detail.getAmount()).replace(' ', paddingCharacter)+"
"); + } else { + sb.append("" + String.format("%-15s", detail.getProductName()).replace(' ', paddingCharacter) + String.format("%-4s", detail.getNumber()).replace(' ', paddingCharacter) + String.format("%8s", detail.getAmount()).replace(' ', paddingCharacter) + "
"); } - if(detail.getSpec()!=null&& ObjectUtil.isNotEmpty(detail.getSpec())){ - sb.append("规格:"+detail.getSpec()+"
"); + if (detail.getSpec() != null && ObjectUtil.isNotEmpty(detail.getSpec())) { + sb.append("规格:" + detail.getSpec() + "
"); } sb.append("
"); } sb.append("------------------------
"); - String t="¥"+detailPO.getReceiptsAmount(); - t=String.format("%11s",t).replace(' ', paddingCharacter); - if(orderType.equals("return")){ - sb.append("应退"+t+"
"); - }else { - sb.append("应收"+t+"
"); + String t = "¥" + detailPO.getReceiptsAmount(); + t = String.format("%11s", t).replace(' ', paddingCharacter); + if (orderType.equals("return")) { + sb.append("应退" + t + "
"); + } else { + sb.append("应收" + t + "
"); } - if(ObjectUtil.isNotEmpty(detailPO.getPayType())&&ObjectUtil.isNotNull(detailPO.getPayType())&&detailPO.getPayType().equals("deposit")){ - sb.append("储值¥"+detailPO.getReceiptsAmount()+"
"); + if (ObjectUtil.isNotEmpty(detailPO.getPayType()) && ObjectUtil.isNotNull(detailPO.getPayType()) && detailPO.getPayType().equals("deposit")) { + sb.append("储值¥" + detailPO.getReceiptsAmount() + "
"); sb.append("------------------------
"); - sb.append("积分:"+detailPO.getIntegral()+"
"); + sb.append("积分:" + detailPO.getIntegral() + "
"); } - sb.append("余额:"+detailPO.getBalance()+"
"); + sb.append("余额:" + detailPO.getBalance() + "
"); sb.append("------------------------
"); - if(ObjectUtil.isNotEmpty(detailPO.getRemark())&&ObjectUtil.isNotNull(detailPO.getRemark())){ - sb.append("备注:"+detailPO.getRemark()+"
"); + if (ObjectUtil.isNotEmpty(detailPO.getRemark()) && ObjectUtil.isNotNull(detailPO.getRemark())) { + sb.append("备注:" + detailPO.getRemark() + "
"); } - - sb.append("打印时间:"+DateUtils.getTime(new Date())+"
"); + sb.append("打印时间:" + DateUtils.getTime(new Date()) + "
"); sb.append(""); - String content=sb.toString(); + String content = sb.toString(); //通过POST请求,发送打印信息到服务器 RequestConfig requestConfig = RequestConfig.custom() @@ -284,37 +271,33 @@ public class FeieyunPrintUtil { HttpPost post = new HttpPost(URL); List nvps = new ArrayList(); - nvps.add(new BasicNameValuePair("user",USER)); - String STIME = String.valueOf(System.currentTimeMillis()/1000); - nvps.add(new BasicNameValuePair("stime",STIME)); - nvps.add(new BasicNameValuePair("sig",signature(USER,UKEY,STIME))); - nvps.add(new BasicNameValuePair("apiname","Open_printMsg"));//固定值,不需要修改 - nvps.add(new BasicNameValuePair("sn",sn)); - nvps.add(new BasicNameValuePair("content",content)); - nvps.add(new BasicNameValuePair("times","1"));//打印联数 + nvps.add(new BasicNameValuePair("user", USER)); + String STIME = String.valueOf(System.currentTimeMillis() / 1000); + nvps.add(new BasicNameValuePair("stime", STIME)); + nvps.add(new BasicNameValuePair("sig", signature(USER, UKEY, STIME))); + nvps.add(new BasicNameValuePair("apiname", "Open_printMsg"));//固定值,不需要修改 + nvps.add(new BasicNameValuePair("sn", sn)); + nvps.add(new BasicNameValuePair("content", content)); + nvps.add(new BasicNameValuePair("times", "1"));//打印联数 CloseableHttpResponse response = null; String result = null; - try - { - post.setEntity(new UrlEncodedFormEntity(nvps,"utf-8")); + try { + post.setEntity(new UrlEncodedFormEntity(nvps, "utf-8")); response = httpClient.execute(post); int statecode = response.getStatusLine().getStatusCode(); - if(statecode == 200){ + if (statecode == 200) { HttpEntity httpentity = response.getEntity(); - if (httpentity != null){ + if (httpentity != null) { //服务器返回的JSON字符串,建议要当做日志记录起来 result = EntityUtils.toString(httpentity); } } - } - catch (Exception e) - { + } catch (Exception e) { e.printStackTrace(); - } - finally{ + } finally { try { - if(response!=null){ + if (response != null) { response.close(); } } catch (IOException e) { @@ -331,18 +314,16 @@ public class FeieyunPrintUtil { e.printStackTrace(); } } - return result; + return new String[]{content, result}; } - - - public static int getProducrName(String str){ + public static int getProducrName(String str) { int count = 0; - int digitCount=0; - for (int i=0;i='a' && str.charAt(i)<='z') || (str.charAt(i)>='A' && str.charAt(i)<='Z')){ + int digitCount = 0; + for (int i = 0; i < str.length(); i++) { + if ((str.charAt(i) >= 'a' && str.charAt(i) <= 'z') || (str.charAt(i) >= 'A' && str.charAt(i) <= 'Z')) { count++; } @@ -350,20 +331,130 @@ public class FeieyunPrintUtil { digitCount++; } } - return count+digitCount; + return count + digitCount; } - private static String signature(String USER,String UKEY,String STIME){ - String s = DigestUtils.sha1Hex(USER+UKEY+STIME); + private static String signature(String USER, String UKEY, String STIME) { + String s = DigestUtils.sha1Hex(USER + UKEY + STIME); return s; } + /** + * 检查飞鹅打印机是否在线 + * @param sn 设备编号 + * @return 在线,工作状态正常。/离线。/未知错误 + */ + public static String checkOnline(String sn){ + String STIME = String.valueOf(System.currentTimeMillis() / 1000); + Map paramMap = new HashMap<>(); + paramMap.put("user", USER); + paramMap.put("stime", STIME); + paramMap.put("sig", signature(USER, UKEY, STIME)); + paramMap.put("apiname", "Open_queryPrinterStatus"); + paramMap.put("sn", sn); + String msg; + try { + String resp = HttpUtil.post(URL, paramMap, 1000 * 5); + //成功 开机 {"msg":"ok","ret":0,"data":"在线,工作状态正常。","serverExecutedTime":4} + //成功 离线 {"msg":"ok","ret":0,"data":"离线。","serverExecutedTime":7} + JSONObject json = JSONUtil.parseObj(UnicodeUtil.toString(resp)); + msg = json.getStr("data"); + }catch (Exception e){ + msg = "未知错误"; + } + return msg; + } - public static void main(String[] args){ - -// OrderDetailPO detailPO=new OrderDetailPO("牛叉闪闪",null,null,"DD20240312142156962",null,null,null,null,null,null,null,null); -// getCashPrintData(detailPO,"922690786","结算单",null); + /** + * 检查飞鹅打印机打印任务是否已打印 + * @param printOrderId 打印订单编号 + * @return null-未知错误,true-已打印,false-未打印 + */ + public static Boolean checkPrintStatus(String printOrderId){ + String STIME = String.valueOf(System.currentTimeMillis() / 1000); + Map paramMap = new HashMap<>(); + paramMap.put("user", USER); + paramMap.put("stime", STIME); + paramMap.put("sig", signature(USER, UKEY, STIME)); + paramMap.put("apiname", "Open_queryOrderState"); + paramMap.put("orderid", printOrderId); + Boolean ret; + try { + String resp = HttpUtil.post(URL, paramMap, 1000 * 5); + //成功 {"msg":"ok","ret":0,"data":true,"serverExecutedTime":4} + //失败 {"msg":"ok","ret":0,"data":false,"serverExecutedTime":4} + JSONObject json = JSONUtil.parseObj(UnicodeUtil.toString(resp)); + ret = json.getBool("data"); + }catch (Exception e){ + ret = null; + } + return ret; } + public static void main(String[] args) { + //testPrint(); + //testPrint2(); + testPrint3(); + } + + public static void testPrint(){ + String STIME = String.valueOf(System.currentTimeMillis() / 1000); + String content = buildPrintContent("123456789", "2024-10-10 18:11:11", "澳洲大龙虾", 1, "一只吃爽爽"); + Map paramMap = new HashMap<>(); + // 参考文档:https://help.feieyun.com/home/doc/zh;nav=0-2 + paramMap.put("user", USER); + paramMap.put("stime", STIME); + paramMap.put("sig", signature("chaozhanggui2022@163.com", "UfWkhXxSkeSSscsU", STIME)); + paramMap.put("apiname", "Open_printMsg"); + paramMap.put("sn", "922690786"); + paramMap.put("content", content); + paramMap.put("times", 1); + //paramMap.put("debug", "1"); + String resp = HttpUtil.post(URL, paramMap, 1000 * 5); + //成功 开机和关机都会响应成功,只是打印任务已正确下发,不代表打印成功 + //{"msg":"ok","ret":0,"data":"922690786_20241010174146_2050070451","serverExecutedTime":4} data是打印订单id + //失败1 {"msg":"参数错误 : 该帐号未注册.","ret":-2,"data":null,"serverExecutedTime":37} + System.out.println(UnicodeUtil.toString(resp)); + } + + /** + * 查询打印机状态 + */ + public static void testPrint2(){ + String STIME = String.valueOf(System.currentTimeMillis() / 1000); + String content = buildPrintContent("123456789", "2024-10-10 18:11:11", "澳洲大龙虾", 1, "一只吃爽爽"); + Map paramMap = new HashMap<>(); + // 参考文档:https://help.feieyun.com/home/doc/zh;nav=0-2 + paramMap.put("user", USER); + paramMap.put("stime", STIME); + paramMap.put("sig", signature("chaozhanggui2022@163.com", "UfWkhXxSkeSSscsU", STIME)); + paramMap.put("apiname", "Open_queryPrinterStatus"); + paramMap.put("sn", "922690786"); + //paramMap.put("debug", "1"); + String resp = HttpUtil.post(URL, paramMap, 1000 * 5); + //成功 开机 {"msg":"ok","ret":0,"data":"在线,工作状态正常。","serverExecutedTime":4} + //成功 离线 {"msg":"ok","ret":0,"data":"离线。","serverExecutedTime":7} + System.out.println(UnicodeUtil.toString(resp)); + } + + /** + * 查询打印任务是否打印成功 + */ + public static void testPrint3(){ + String STIME = String.valueOf(System.currentTimeMillis() / 1000); + String content = buildPrintContent("123456789", "2024-10-10 18:11:11", "澳洲大龙虾", 1, "一只吃爽爽"); + Map paramMap = new HashMap<>(); + // 参考文档:https://help.feieyun.com/home/doc/zh;nav=0-2 + paramMap.put("user", USER); + paramMap.put("stime", STIME); + paramMap.put("sig", signature("chaozhanggui2022@163.com", "UfWkhXxSkeSSscsU", STIME)); + paramMap.put("apiname", "Open_queryOrderState"); + paramMap.put("orderid", "922690786_20241010175946_1576957351x"); + //paramMap.put("debug", "1"); + String resp = HttpUtil.post(URL, paramMap, 1000 * 5); + //成功 {"msg":"ok","ret":0,"data":true,"serverExecutedTime":4} + //失败 {"msg":"ok","ret":0,"data":false,"serverExecutedTime":4} + System.out.println(UnicodeUtil.toString(resp)); + } }