From e17708f51dcc212112d1143e3b7aa9e594691597 Mon Sep 17 00:00:00 2001 From: wangw <1594593906@qq.com> Date: Thu, 20 Mar 2025 09:15:21 +0800 Subject: [PATCH 01/23] pom --- cash-dependencies/pom.xml | 8 ++++---- cash-service/pom.xml | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/cash-dependencies/pom.xml b/cash-dependencies/pom.xml index 5422a425d..f5bf5ea64 100644 --- a/cash-dependencies/pom.xml +++ b/cash-dependencies/pom.xml @@ -163,11 +163,11 @@ dubbo-spring-boot-starter ${dubbo-spring.version} - + - com.alibaba.cloud - spring-cloud-starter-alibaba-seata - 2023.0.3.2 + io.seata + seata-spring-boot-starter + ${seata.version} diff --git a/cash-service/pom.xml b/cash-service/pom.xml index 6d7114ef3..a7ee2b7e1 100644 --- a/cash-service/pom.xml +++ b/cash-service/pom.xml @@ -78,8 +78,8 @@ spring-cloud-starter-alibaba-nacos-config - com.alibaba.cloud - spring-cloud-starter-alibaba-seata + io.seata + seata-spring-boot-starter From 2dcb3a273ed6b019692162072551fcdf51c4c6cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=9D=BE?= <8605635+zhang3064194730@user.noreply.gitee.com> Date: Thu, 20 Mar 2025 09:17:31 +0800 Subject: [PATCH 02/23] =?UTF-8?q?=E5=B7=A5=E5=85=B7=E7=B1=BB=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../czg/service/account/util/AlipayUtil.java | 88 +++++-------------- .../service/account/util/WechatAuthUtil.java | 40 +++------ 2 files changed, 36 insertions(+), 92 deletions(-) diff --git a/cash-service/account-service/src/main/java/com/czg/service/account/util/AlipayUtil.java b/cash-service/account-service/src/main/java/com/czg/service/account/util/AlipayUtil.java index b07bf7a8c..cbe452409 100644 --- a/cash-service/account-service/src/main/java/com/czg/service/account/util/AlipayUtil.java +++ b/cash-service/account-service/src/main/java/com/czg/service/account/util/AlipayUtil.java @@ -10,16 +10,12 @@ import com.alipay.api.DefaultAlipayClient; import com.alipay.api.internal.util.AlipayEncrypt; import com.alipay.api.request.AlipaySystemOauthTokenRequest; import com.alipay.api.response.AlipaySystemOauthTokenResponse; -import com.czg.exception.ApiNotPrintException; import com.czg.resp.CzgResult; import com.czg.system.dto.SysParamsDTO; import com.czg.system.service.SysParamsService; -import jakarta.annotation.PostConstruct; -import jakarta.annotation.Resource; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.apache.dubbo.config.annotation.DubboReference; -import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; /** @@ -35,61 +31,6 @@ public class AlipayUtil { @DubboReference private SysParamsService sysParamsService; - /** - * 网关地址 线上:https://openapi.alipay.com/gateway.do 沙箱:https://openapi.alipaydev.com/gateway.do - */ -// @Value("${alipay.serverUrl}") - private String serverUrl; - /** - * 应用ID - */ -// @Value("${alipay.appId}") - private String appId; - - /** - * 应用私钥 - */ -// @Value("${alipay.privateKey}") - private String privateKey; - /** - * 支付宝公钥 - */ -// @Value("${alipay.alipayPublicKey}") - private String alipayPublicKey; - /** - * 支付宝公钥 - */ -// @Value("${alipay.encryptKey}") - private String encryptKey; - -// @Value("${alipay.account.appId}") - private String accountAppId; -// @Value("${alipay.account.privateKey}") - private String accountPrivateKey; -// @Value("${alipay.account.publicKey}") - private String accountPublicKey; - -// @PostConstruct -// private void init() { -// CzgResult aliGateway = sysParamsService.getParamsByCode("ali_gateway"); -// CzgResult aliMiniAppId = sysParamsService.getParamsByCode("ali_mini_app_id"); -// CzgResult aliMiniPrivateKey = sysParamsService.getParamsByCode("ali_mini_private_key"); -// CzgResult aliMiniPublicKey = sysParamsService.getParamsByCode("ali_mini_public_key"); -// CzgResult aliAccountAppId = sysParamsService.getParamsByCode("ali_account_app_id"); -// CzgResult aliAccountPrivateKey = sysParamsService.getParamsByCode("ali_account_private_key"); -// CzgResult aliAccountPublicKey = sysParamsService.getParamsByCode("ali_account_public_key"); -// CzgResult aliEncryptKey = sysParamsService.getParamsByCode("ali_encrypt_key"); -// serverUrl = aliGateway.getData().getParamValue(); -// appId = aliMiniAppId.getData().getParamValue(); -// privateKey = aliMiniPrivateKey.getData().getParamValue(); -// alipayPublicKey = aliMiniPublicKey.getData().getParamValue(); -// encryptKey = aliEncryptKey.getData().getParamValue(); -// accountAppId = aliAccountAppId.getData().getParamValue(); -// accountPrivateKey = aliAccountPrivateKey.getData().getParamValue(); -// accountPublicKey = aliAccountPublicKey.getData().getParamValue(); -// log.info("支付宝工具类初始化成功, {}", this); -// } - /** * 创建支付宝客户端 * @@ -97,6 +38,20 @@ public class AlipayUtil { */ @SneakyThrows public AlipayClient createClient(boolean isAccount) { + CzgResult aliGateway = sysParamsService.getParamsByCode("ali_gateway"); + CzgResult aliMiniAppId = sysParamsService.getParamsByCode("ali_mini_app_id"); + CzgResult aliMiniPrivateKey = sysParamsService.getParamsByCode("ali_mini_private_key"); + CzgResult aliMiniPublicKey = sysParamsService.getParamsByCode("ali_mini_public_key"); + CzgResult aliAccountAppId = sysParamsService.getParamsByCode("ali_account_app_id"); + CzgResult aliAccountPrivateKey = sysParamsService.getParamsByCode("ali_account_private_key"); + CzgResult aliAccountPublicKey = sysParamsService.getParamsByCode("ali_account_public_key"); + String serverUrl = aliGateway.getData().getParamValue(); + String appId = aliMiniAppId.getData().getParamValue(); + String privateKey = aliMiniPrivateKey.getData().getParamValue(); + String alipayPublicKey = aliMiniPublicKey.getData().getParamValue(); + String accountAppId = aliAccountAppId.getData().getParamValue(); + String accountPrivateKey = aliAccountPrivateKey.getData().getParamValue(); + String accountPublicKey = aliAccountPublicKey.getData().getParamValue(); AlipayConfig alipayConfig = new AlipayConfig(); //设置网关地址 alipayConfig.setServerUrl(serverUrl); @@ -141,27 +96,30 @@ public class AlipayUtil { } public String getMobile(String encryptedData) { - if(StrUtil.isEmpty(encryptedData)){ + if (StrUtil.isEmpty(encryptedData)) { throw new RuntimeException("加密数据不能为空"); } try { + CzgResult aliEncryptKey = sysParamsService.getParamsByCode("ali_encrypt_key"); + String encryptKey = aliEncryptKey.getData().getParamValue(); + log.info("解密前的数据,返回结果:{}", encryptedData); String resp = AlipayEncrypt.decryptContent(encryptedData, "AES", encryptKey, "UTF-8"); log.info("解密后的数据,返回结果:{}", resp); boolean isJson = JSONUtil.isTypeJSON(resp); - if(!isJson){ + if (!isJson) { throw new AlipayApiException("解密后的数据不是json格式"); } JSONObject jsonObject = JSONUtil.parseObj(resp); String code = jsonObject.getStr("code"); String msg = jsonObject.getStr("msg"); String mobile = jsonObject.getStr("mobile"); - if("10000".equals(code)){ + if ("10000".equals(code)) { return mobile; - }else{ - throw new AlipayApiException(code,msg); + } else { + throw new AlipayApiException(code, msg); } - }catch (AlipayApiException e){ + } catch (AlipayApiException e) { log.error("获取支付宝用户的手机号码失败,错误码:{},错误信息:{}", e.getErrCode(), e.getErrMsg()); throw new RuntimeException(e); } diff --git a/cash-service/account-service/src/main/java/com/czg/service/account/util/WechatAuthUtil.java b/cash-service/account-service/src/main/java/com/czg/service/account/util/WechatAuthUtil.java index 6af586598..ede411b10 100644 --- a/cash-service/account-service/src/main/java/com/czg/service/account/util/WechatAuthUtil.java +++ b/cash-service/account-service/src/main/java/com/czg/service/account/util/WechatAuthUtil.java @@ -13,7 +13,6 @@ import com.czg.system.dto.SysParamsDTO; import com.czg.system.enums.SysParamCodeEnum; import com.czg.system.service.SysParamsService; import com.google.gson.JsonObject; -import jakarta.annotation.PostConstruct; import jakarta.annotation.Resource; import jakarta.validation.constraints.NotBlank; import lombok.extern.slf4j.Slf4j; @@ -38,16 +37,6 @@ public class WechatAuthUtil { @Resource private AliOssUtil aliOssUtil; - // @Value("${wx.appId}") - private String appId; - // @Value("${wx.secrete}") - private String secrete; - - // @Value("${wx.account.appId}") - private String accountAppId; - // @Value("${wx.account.secrete}") - private String accountSecrete; - private static final String TOKEN_URL = "https://api.weixin.qq.com/cgi-bin/token"; private static final String QR_CODE_URL = "https://api.weixin.qq.com/wxa/getwxacode"; @@ -68,20 +57,11 @@ public class WechatAuthUtil { } -// @PostConstruct -// public void init() { -// CzgResult wxMiniAppId = sysParamsService.getParamsByCode("wx_mini_app_id"); -// CzgResult wxMiniSecrete = sysParamsService.getParamsByCode("wx_mini_secrete"); -// CzgResult wxAccountAppId = sysParamsService.getParamsByCode("wx_account_app_id"); -// CzgResult wxAccountSecrete = sysParamsService.getParamsByCode("wx_account_secrete"); -// appId = wxMiniAppId.getData().getParamValue(); -// secrete = wxMiniSecrete.getData().getParamValue(); -// accountAppId = wxAccountAppId.getData().getParamValue(); -// accountSecrete = wxAccountSecrete.getData().getParamValue(); -// log.info("微信工具类初始化成功, appId: {}, secrete: {}, accountAppId: {}, accountSecrete: {}", appId, secrete, accountAppId, accountSecrete); -// } - public String getAccountOpenId(String code) { + CzgResult wxAccountAppId = sysParamsService.getParamsByCode("wx_account_app_id"); + CzgResult wxAccountSecrete = sysParamsService.getParamsByCode("wx_account_secrete"); + String accountAppId = wxAccountAppId.getData().getParamValue(); + String accountSecrete = wxAccountSecrete.getData().getParamValue(); String requestUrl = "https://api.weixin.qq.com/sns/oauth2/access_token?"; Map requestUrlParam = new HashMap<>(); // https://mp.weixin.qq.com/wxopen/devprofile?action=get_profile&token=164113089&lang=zh_CN @@ -102,6 +82,10 @@ public class WechatAuthUtil { //获取小程序token private String getAccessToken() { + CzgResult wxMiniAppId = sysParamsService.getParamsByCode("wx_mini_app_id"); + CzgResult wxMiniSecrete = sysParamsService.getParamsByCode("wx_mini_secrete"); + String appId = wxMiniAppId.getData().getParamValue(); + String secrete = wxMiniSecrete.getData().getParamValue(); String url = String.format("%s?grant_type=client_credential&appid=%s&secret=%s", TOKEN_URL, appId, secrete); String response = HttpUtil.get(url); com.alibaba.fastjson.JSONObject jsonResponse = com.alibaba.fastjson.JSONObject.parseObject(response); @@ -114,8 +98,6 @@ public class WechatAuthUtil { /** * 生成 小程序码 跳转对应页面 * - * @param params - * @return */ public String getFetchQrCode(Map params) throws Exception { String url = aliOssUtil.upload(fetchQrCode(params), aliOssUtil.getPath("shopVip", "png")); @@ -127,7 +109,7 @@ public class WechatAuthUtil { private InputStream fetchQrCode(Map params) { JsonObject jsonObject = new JsonObject(); //路径 - jsonObject.addProperty("path", sysParamsService.getSysParamValue(SysParamCodeEnum.WX_MINI_VIP_URL.getCode())+"?shopId="+params.get("shopId")); + jsonObject.addProperty("path", sysParamsService.getSysParamValue(SysParamCodeEnum.WX_MINI_VIP_URL.getCode()) + "?shopId=" + params.get("shopId")); //是否需要透明底色,为 true 时,生成透明底色的小程序码 jsonObject.addProperty("is_hyaline", true); //正式版为 release,体验版为 trial,开发版为 develop @@ -144,6 +126,10 @@ public class WechatAuthUtil { public JSONObject getSession(String code) { + CzgResult wxMiniSecrete = sysParamsService.getParamsByCode("wx_mini_secrete"); + CzgResult wxMiniAppId = sysParamsService.getParamsByCode("wx_mini_app_id"); + String appId = wxMiniAppId.getData().getParamValue(); + String secrete = wxMiniSecrete.getData().getParamValue(); String requestUrl = "https://api.weixin.qq.com/sns/jscode2session"; Map requestUrlParam = new HashMap<>(); // https://mp.weixin.qq.com/wxopen/devprofile?action=get_profile&token=164113089&lang=zh_CN From 825a0711043fa7c47f60de946f750ea818084201 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=9D=BE?= <8605635+zhang3064194730@user.noreply.gitee.com> Date: Thu, 20 Mar 2025 09:36:45 +0800 Subject: [PATCH 03/23] =?UTF-8?q?=E6=BF=80=E6=B4=BB=E7=A0=81=E6=8E=92?= =?UTF-8?q?=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/mapper/MerchantRegisterMapper.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/cash-service/account-service/src/main/resources/mapper/MerchantRegisterMapper.xml b/cash-service/account-service/src/main/resources/mapper/MerchantRegisterMapper.xml index 25868338e..3b06ed81e 100644 --- a/cash-service/account-service/src/main/resources/mapper/MerchantRegisterMapper.xml +++ b/cash-service/account-service/src/main/resources/mapper/MerchantRegisterMapper.xml @@ -20,5 +20,6 @@ a.create_time <= #{endTime} + order by a.create_time desc From 1b10a9fb3af1903be1eca9b0ca071d7c5fd5c407 Mon Sep 17 00:00:00 2001 From: wangw <1594593906@qq.com> Date: Thu, 20 Mar 2025 09:38:41 +0800 Subject: [PATCH 04/23] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=AF=86=E7=A0=81=20?= =?UTF-8?q?=E6=8F=90=E5=87=BA=E7=94=A8=E6=88=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/czg/sa/MyStpLogic.java | 9 ++++++++- .../account/service/impl/SysUserServiceImpl.java | 10 ++++++++-- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/cash-common/cash-common-sa-token/src/main/java/com/czg/sa/MyStpLogic.java b/cash-common/cash-common-sa-token/src/main/java/com/czg/sa/MyStpLogic.java index 080a4ed87..43e9728b0 100644 --- a/cash-common/cash-common-sa-token/src/main/java/com/czg/sa/MyStpLogic.java +++ b/cash-common/cash-common-sa-token/src/main/java/com/czg/sa/MyStpLogic.java @@ -15,6 +15,7 @@ import cn.dev33.satoken.stp.SaTokenInfo; import cn.dev33.satoken.stp.StpLogic; import cn.hutool.core.util.StrUtil; import com.czg.exception.ApiNotPrintException; +import com.czg.exception.CzgException; import lombok.Getter; import java.util.List; @@ -43,6 +44,7 @@ public class MyStpLogic { /** * 校验员工权限 + * * @param code 权限码 */ public void checkStaffPermission(String code) { @@ -53,7 +55,7 @@ public class MyStpLogic { /** * @param id 登录账号id - * @param shopName 店铺名称 + * @param shopName 店铺名称 * @param shopId 店铺id * @param loginType 登录类型枚举 * @param isAdmin 是否为管理员账号 @@ -93,6 +95,7 @@ public class MyStpLogic { /** * 获取当前店铺用户名,仅后台可用 + * * @return 店铺名称 */ public String getShopName() { @@ -113,6 +116,10 @@ public class MyStpLogic { Long shopId; int errType; if ("admin".equals(logic.getLoginType())) { + if (logic.getSession() == null) { + logout(); + throw new CzgException("请重新登录"); + } Object info = logic.getSession().get("shopId"); shopId = info instanceof Long l ? l : null; errType = 0; diff --git a/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/SysUserServiceImpl.java b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/SysUserServiceImpl.java index 4653c433c..5cf8e52b4 100644 --- a/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/SysUserServiceImpl.java +++ b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/SysUserServiceImpl.java @@ -17,6 +17,7 @@ import com.czg.account.vo.SysUserDetailVO; import com.czg.exception.ApiNotPrintException; import com.czg.exception.CzgException; import com.czg.sa.StpKit; +import com.czg.service.RedisService; import com.czg.service.account.mapper.SysRoleMapper; import com.czg.service.account.mapper.SysUserMapper; import com.czg.service.account.mapper.SysUsersRolesMapper; @@ -47,6 +48,8 @@ public class SysUserServiceImpl extends ServiceImpl impl private SysRoleMapper sysRoleMapper; @Resource private SysUsersRolesMapper sysUsersRolesMapper; + @Resource + private RedisService redisService; @Override public SysUser addUser(String nickname, String accountName, String accountPwd, String phone, Long roleId) { @@ -232,7 +235,10 @@ public class SysUserServiceImpl extends ServiceImpl impl } sysUser.setPassword(SecureUtil.md5(sysUser.getId() + sysUserEditPwdDTO.getPassword())); - - return updateById(sysUser); + boolean isUp = updateById(sysUser); + if (isUp) { + redisService.del(STR."token:admin:session:\{sysUser.getId()}"); + } + return isUp; } } From 95175c98d5765d49381ee6a86e520f54b688cf6e Mon Sep 17 00:00:00 2001 From: wangw <1594593906@qq.com> Date: Thu, 20 Mar 2025 09:42:21 +0800 Subject: [PATCH 05/23] =?UTF-8?q?GlobalTransactional=20=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/czg/service/order/service/impl/PayServiceImpl.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/cash-service/order-service/src/main/java/com/czg/service/order/service/impl/PayServiceImpl.java b/cash-service/order-service/src/main/java/com/czg/service/order/service/impl/PayServiceImpl.java index 9ec7c9992..1c348c46c 100644 --- a/cash-service/order-service/src/main/java/com/czg/service/order/service/impl/PayServiceImpl.java +++ b/cash-service/order-service/src/main/java/com/czg/service/order/service/impl/PayServiceImpl.java @@ -44,7 +44,6 @@ import com.czg.utils.AssertUtil; import com.czg.utils.MD5Util; import com.mybatisflex.core.query.QueryWrapper; import com.mybatisflex.core.update.UpdateChain; -import io.seata.spring.annotation.GlobalTransactional; import jakarta.annotation.Resource; import jakarta.validation.constraints.NotBlank; import lombok.NonNull; @@ -557,8 +556,7 @@ public class PayServiceImpl implements PayService { } @Override - @GlobalTransactional -// @Transactional + @Transactional public CzgResult refundOrderBefore(OrderInfoRefundDTO param) { OrderInfo orderInfo = orderInfoService.getById(param.getOrderId()); ShopInfo shopInfo = shopInfoService.getById(orderInfo.getShopId()); From b1e12922cb6c1cae56c84ba43cdfb8a014561e74 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=9D=BE?= <8605635+zhang3064194730@user.noreply.gitee.com> Date: Thu, 20 Mar 2025 09:57:14 +0800 Subject: [PATCH 06/23] =?UTF-8?q?=E5=BA=97=E9=93=BA=E5=81=9C=E4=B8=9A?= =?UTF-8?q?=E5=88=A4=E6=96=AD=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../czg/service/account/service/impl/ShopInfoServiceImpl.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopInfoServiceImpl.java b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopInfoServiceImpl.java index 05adeb746..37933b288 100644 --- a/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopInfoServiceImpl.java +++ b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopInfoServiceImpl.java @@ -66,10 +66,10 @@ public class ShopInfoServiceImpl extends ServiceImpl i if (shopInfo == null) { throw new ApiNotPrintException("店铺不存在"); } - if ((DateUtil.date().toLocalDateTime().isAfter(shopInfo.getExpireTime())) || shopInfo.getStatus() != StatusEnum.ENABLED.value()) { + if ((DateUtil.date().toLocalDateTime().isAfter(shopInfo.getExpireTime()))) { throw new ApiNotPrintException("店铺已过期,请联系商家"); } - if (StatusEnum.DISABLE.value() == shopInfo.getOnSale()) { + if (StatusEnum.DISABLE.value() == shopInfo.getOnSale() || shopInfo.getStatus() != StatusEnum.ENABLED.value()) { throw new ApiNotPrintException("店铺已停业,请联系商家"); } From 3cc937f46b58775b2bb1e997912ed115e3f436bc Mon Sep 17 00:00:00 2001 From: wangw <1594593906@qq.com> Date: Thu, 20 Mar 2025 09:57:38 +0800 Subject: [PATCH 07/23] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=AF=86=E7=A0=81=20?= =?UTF-8?q?=E5=8F=82=E6=95=B0=E5=88=A4=E7=A9=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/czg/account/dto/user/SysUserEditPwdDTO.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cash-common/cash-common-service/src/main/java/com/czg/account/dto/user/SysUserEditPwdDTO.java b/cash-common/cash-common-service/src/main/java/com/czg/account/dto/user/SysUserEditPwdDTO.java index 96f5ffda4..0fc2fb4f0 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/account/dto/user/SysUserEditPwdDTO.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/account/dto/user/SysUserEditPwdDTO.java @@ -32,7 +32,7 @@ public class SysUserEditPwdDTO { /** * 密码 */ - @Size(min = 1, message = "密码不为空") + @NotBlank(message = "确认密码不为空") private String password; From 1f23043b12eb6e9e4e66f40a11b93c59daa7ee74 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=9D=BE?= <8605635+zhang3064194730@user.noreply.gitee.com> Date: Thu, 20 Mar 2025 10:05:24 +0800 Subject: [PATCH 08/23] =?UTF-8?q?=E4=BC=98=E6=83=A0=E5=88=B8=E6=95=B0?= =?UTF-8?q?=E9=87=8F=E4=B8=8D=E5=87=86=E7=A1=AE=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/mapper/ShopUserMapper.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cash-service/account-service/src/main/resources/mapper/ShopUserMapper.xml b/cash-service/account-service/src/main/resources/mapper/ShopUserMapper.xml index b09c42a1d..181ddbb5a 100644 --- a/cash-service/account-service/src/main/resources/mapper/ShopUserMapper.xml +++ b/cash-service/account-service/src/main/resources/mapper/ShopUserMapper.xml @@ -41,7 +41,7 @@ + select a.*, b.role_id from sys_user as a + left join sys_users_roles as b on a.id=b.user_id + + + and (a.nick_name like concat('%', #{key}, '%') or a.account like concat('%', #{key}, '%')) + + + and a.create_time >= #{startTime} + + + + and a.create_time <= #{endTime} + + + + and a.status=#{status} + + + order by a.create_time desc + From 403cd2647cba7aaeca1b78f8832049fca364199f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=9D=BE?= <8605635+zhang3064194730@user.noreply.gitee.com> Date: Thu, 20 Mar 2025 11:05:50 +0800 Subject: [PATCH 13/23] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=9C=B8=E7=8E=8B?= =?UTF-8?q?=E9=A4=90=E8=A1=A8=E4=B8=BB=E9=94=AEid=E4=B8=BAshopId?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/czg/account/entity/FreeDineConfig.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/cash-common/cash-common-service/src/main/java/com/czg/account/entity/FreeDineConfig.java b/cash-common/cash-common-service/src/main/java/com/czg/account/entity/FreeDineConfig.java index 041b44846..b6b26abc6 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/account/entity/FreeDineConfig.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/account/entity/FreeDineConfig.java @@ -30,9 +30,6 @@ public class FreeDineConfig implements Serializable { @Serial private static final long serialVersionUID = 1L; - @Id(keyType = KeyType.Auto) - private Long id; - /** * 是否启用 */ @@ -71,6 +68,7 @@ public class FreeDineConfig implements Serializable { /** * 门店id */ + @Id private Long shopId; /** From 4ecbeb030b214973bb8b0700fdaa00f519701313 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=9D=BE?= <8605635+zhang3064194730@user.noreply.gitee.com> Date: Thu, 20 Mar 2025 11:15:46 +0800 Subject: [PATCH 14/23] =?UTF-8?q?=E4=BA=A4=E7=8F=AD=E6=89=93=E5=8D=B0?= =?UTF-8?q?=E4=B8=A4=E6=AC=A1=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/czg/controller/admin/HandoverRecordController.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/cash-api/account-server/src/main/java/com/czg/controller/admin/HandoverRecordController.java b/cash-api/account-server/src/main/java/com/czg/controller/admin/HandoverRecordController.java index ad41e5abc..c4e57c9bf 100644 --- a/cash-api/account-server/src/main/java/com/czg/controller/admin/HandoverRecordController.java +++ b/cash-api/account-server/src/main/java/com/czg/controller/admin/HandoverRecordController.java @@ -100,9 +100,6 @@ public class HandoverRecordController { //@SaAdminCheckPermission("handoverRecord:handover") public CzgResult handover(@RequestParam Integer isPrint) { Long id = handoverRecordService.handover(); - if (isPrint == 1){ - rabbitPublisher.sendHandoverPrintMsg(id.toString()); - } return CzgResult.success(id); } From 239acdffaf6425312305baf7b2190307802f555d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=9D=BE?= <8605635+zhang3064194730@user.noreply.gitee.com> Date: Thu, 20 Mar 2025 11:17:11 +0800 Subject: [PATCH 15/23] =?UTF-8?q?=E4=BA=A4=E7=8F=AD=E6=97=B6=E9=97=B4?= =?UTF-8?q?=E6=98=BE=E7=A4=BA=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/czg/service/order/print/PrinterImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cash-service/order-service/src/main/java/com/czg/service/order/print/PrinterImpl.java b/cash-service/order-service/src/main/java/com/czg/service/order/print/PrinterImpl.java index 4b084b457..97f4d5dfc 100644 --- a/cash-service/order-service/src/main/java/com/czg/service/order/print/PrinterImpl.java +++ b/cash-service/order-service/src/main/java/com/czg/service/order/print/PrinterImpl.java @@ -162,7 +162,7 @@ public interface PrinterImpl { StringBuilder builder = new StringBuilder() .append(getFormatLabel(handoverRecord.getShopName(), signLabelInfo.center, signLabelInfo.f)).append(signLabelInfo.br) .append(getFormatLabel("交班小票", signLabelInfo.l,signLabelInfo.center)).append(signLabelInfo.br) - .append("交班时间: ").append(handoverRecord.getHandoverTime()).append(signLabelInfo.br) + .append("交班时间: ").append(DateUtil.format(handoverRecord.getHandoverTime(), "yyyy-MM-dd HH:mm:ss")).append(signLabelInfo.br) .append("收银员: ").append(handoverRecord.getStaffName()).append(signLabelInfo.br) .append("当班总收入: ").append(handoverRecord.getHandAmount()).append(signLabelInfo.br) .append("现金收入: ").append(handoverRecord.getCashAmount()).append(signLabelInfo.br) From c0eda91329aee912c8c8ae505668fc00b9187a4d Mon Sep 17 00:00:00 2001 From: wangw <1594593906@qq.com> Date: Thu, 20 Mar 2025 11:21:22 +0800 Subject: [PATCH 16/23] =?UTF-8?q?=E9=9C=B8=E7=8E=8B=E9=A4=90=20=E9=87=91?= =?UTF-8?q?=E9=A2=9D=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../czg/account/entity/FreeDineConfig.java | 4 +++ .../order/service/impl/PayServiceImpl.java | 36 +++++++++---------- 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/cash-common/cash-common-service/src/main/java/com/czg/account/entity/FreeDineConfig.java b/cash-common/cash-common-service/src/main/java/com/czg/account/entity/FreeDineConfig.java index b6b26abc6..e650cd7f4 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/account/entity/FreeDineConfig.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/account/entity/FreeDineConfig.java @@ -4,6 +4,7 @@ import com.mybatisflex.annotation.Column; import com.mybatisflex.annotation.Id; import com.mybatisflex.annotation.KeyType; import com.mybatisflex.annotation.Table; + import java.io.Serializable; import java.math.BigDecimal; import java.time.LocalDateTime; @@ -88,4 +89,7 @@ public class FreeDineConfig implements Serializable { */ private String childShopIdList; + public Integer getMultiple() { + return rechargeTimes == null ? 2 : rechargeTimes; + } } diff --git a/cash-service/order-service/src/main/java/com/czg/service/order/service/impl/PayServiceImpl.java b/cash-service/order-service/src/main/java/com/czg/service/order/service/impl/PayServiceImpl.java index 1c348c46c..10fd8eb17 100644 --- a/cash-service/order-service/src/main/java/com/czg/service/order/service/impl/PayServiceImpl.java +++ b/cash-service/order-service/src/main/java/com/czg/service/order/service/impl/PayServiceImpl.java @@ -86,6 +86,8 @@ public class PayServiceImpl implements PayService { private ShopCouponService couponService; @DubboReference private MemberPointsService pointsService; + @DubboReference + private FreeDineConfigService freeConfigService; @Resource private CzgPayService czgPayService; @Resource @@ -146,6 +148,11 @@ public class PayServiceImpl implements PayService { throw new ValidateException("充值金额不正确"); } if (payParam.getOrderId() != null) { + FreeDineConfig freeConfig = freeConfigService.getById(payParam.getShopId()); + AssertUtil.isNull(freeConfig, "该店铺未启用霸王餐"); + if (!freeConfig.getEnable()) { + throw new CzgException("该店铺未启用霸王餐"); + } OrderInfo orderInfo = orderInfoService.getById(payParam.getOrderId()); AssertUtil.isNull(orderInfo, "订单不存在"); //获取商品信息 计算金额 需要传入优惠券 减去优惠券 @@ -155,7 +162,12 @@ public class PayServiceImpl implements PayService { //最终打包费 BigDecimalDTO packAmount = new BigDecimalDTO(BigDecimal.ZERO); orderInfoService.processOrderDetails2(orderDetails, null, null, totalAmount, packAmount, payParam.isAllPack(), null, true); - BigDecimal payAmount = (totalAmount.getPrice().add(packAmount.getPrice())).multiply(BigDecimal.TWO); + BigDecimal total = totalAmount.getPrice().add(packAmount.getPrice()); + if (total.compareTo(freeConfig.getRechargeThreshold()) < 0) { + throw new CzgException("霸王餐满" + freeConfig.getRechargeThreshold() + "可用,当前订单金额为" + total); + } + BigDecimal payAmount = (totalAmount.getPrice().add(packAmount.getPrice())).multiply(new BigDecimal(freeConfig.getMultiple())); + log.info("霸王餐应支付金额:{},充值金额为:{}", payAmount, payParam.getAmount()); if (payAmount.compareTo(payParam.getAmount()) != 0) { throw new ValidateException("霸王餐支付金额不正确"); } @@ -340,7 +352,6 @@ public class PayServiceImpl implements PayService { @Override @Transactional public CzgResult cashPayVip(VipPayParamDTO payParam) { - boolean isFree = checkPayVip(payParam); ShopUser shopUser = shopUserService.getById(payParam.getShopUserId()); AssertUtil.isNull(shopUser, "充值失败 该店铺用户不存在"); ShopInfo shopInfo = shopInfoService.getById(payParam.getShopId()); @@ -359,11 +370,6 @@ public class PayServiceImpl implements PayService { updateInfo.setJoinTime(LocalDateTime.now()); updateInfo.setId(payParam.getShopUserId()); shopUserService.updateById(updateInfo); -// UpdateChain.of(ShopUser.class) -// .set(ShopUser::getIsVip, 1) -// .set(ShopUser::getJoinTime, LocalDateTime.now()) -// .eq(ShopUser::getId, payParam.getShopUserId()) -// .update(); } ShopUserMoneyEditDTO shopUserMoneyEditDTO = new ShopUserMoneyEditDTO() .setId(shopUser.getId()) @@ -371,20 +377,10 @@ public class PayServiceImpl implements PayService { .setType(1) .setRemark("现金充值") .setBizEnum(ShopUserFlowBizEnum.CASH_IN); - if (isFree) { - shopUserMoneyEditDTO.setBizEnum(ShopUserFlowBizEnum.FREE_IN); - UpdateChain.of(OrderInfo.class).eq(OrderInfo::getId, payParam.getOrderId()) - .set(OrderInfo::getStatus, OrderStatusEnums.DONE.getCode()) - .set(OrderInfo::getIsFreeDine, 1) - .set(OrderInfo::getPayAmount, 0) - .update(); - } //更新会员余额 并生成流水 Long flowId = shopUserService.updateMoney(shopUser.getShopId(), shopUserMoneyEditDTO); - if (!isFree) { - //会员活动 - shopActivateService.giveActivate(shopUser, payParam.getAmount(), payParam.getActivateId(), flowId); - } + //会员活动 + shopActivateService.giveActivate(shopUser, payParam.getAmount(), payParam.getActivateId(), flowId); return CzgResult.success(); } @@ -567,7 +563,7 @@ public class PayServiceImpl implements PayService { isPay = false; refPayOrderNo = ""; } - if(isPay){ + if (isPay) { if (shopInfo.getIsReturnPwd().equals(1)) { AssertUtil.isBlank(shopInfo.getOperationPwd(), "请设置操作密码后使用"); if (!SecureUtil.md5(param.getPwd()).equals(shopInfo.getOperationPwd())) { From ec92575a0b0dd9d98a938400e107b3d4752c2e6a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=9D=BE?= <8605635+zhang3064194730@user.noreply.gitee.com> Date: Thu, 20 Mar 2025 11:27:32 +0800 Subject: [PATCH 17/23] =?UTF-8?q?=E7=94=A8=E6=88=B7=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E6=8A=A5=E9=94=99=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/czg/account/entity/SysUsersRoles.java | 1 - 1 file changed, 1 deletion(-) diff --git a/cash-common/cash-common-service/src/main/java/com/czg/account/entity/SysUsersRoles.java b/cash-common/cash-common-service/src/main/java/com/czg/account/entity/SysUsersRoles.java index 49bd9cc71..5ed761232 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/account/entity/SysUsersRoles.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/account/entity/SysUsersRoles.java @@ -34,7 +34,6 @@ public class SysUsersRoles implements Serializable { /** * 角色ID */ - @Id private Long roleId; } From c1f45abcb168341bb66c56271679c4e784e24b47 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=9D=BE?= <8605635+zhang3064194730@user.noreply.gitee.com> Date: Thu, 20 Mar 2025 11:28:37 +0800 Subject: [PATCH 18/23] =?UTF-8?q?=E9=9C=B8=E7=8E=8B=E9=A4=90=E5=85=85?= =?UTF-8?q?=E5=80=BC=E5=80=8D=E6=95=B0=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/czg/account/dto/freeding/FreeDineConfigEditDTO.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cash-common/cash-common-service/src/main/java/com/czg/account/dto/freeding/FreeDineConfigEditDTO.java b/cash-common/cash-common-service/src/main/java/com/czg/account/dto/freeding/FreeDineConfigEditDTO.java index e5854ffdb..04538b717 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/account/dto/freeding/FreeDineConfigEditDTO.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/account/dto/freeding/FreeDineConfigEditDTO.java @@ -24,7 +24,7 @@ public class FreeDineConfigEditDTO { /** * 充值倍数 */ - @Min(1) + @Min(value = 2, message = "充值倍数不能小于2") private Integer rechargeTimes; /** * 满多少可用 From fc5106387275a56946b72dd1d071d0f360c840c6 Mon Sep 17 00:00:00 2001 From: wangw <1594593906@qq.com> Date: Thu, 20 Mar 2025 11:43:46 +0800 Subject: [PATCH 19/23] =?UTF-8?q?=E6=97=A5=E5=BF=97=E6=89=93=E5=8D=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/order/service/impl/OrderInfoServiceImpl.java | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/cash-service/order-service/src/main/java/com/czg/service/order/service/impl/OrderInfoServiceImpl.java b/cash-service/order-service/src/main/java/com/czg/service/order/service/impl/OrderInfoServiceImpl.java index b7882fc7d..071116b48 100644 --- a/cash-service/order-service/src/main/java/com/czg/service/order/service/impl/OrderInfoServiceImpl.java +++ b/cash-service/order-service/src/main/java/com/czg/service/order/service/impl/OrderInfoServiceImpl.java @@ -319,8 +319,8 @@ public class OrderInfoServiceImpl extends ServiceImpl Date: Thu, 20 Mar 2025 14:30:33 +0800 Subject: [PATCH 20/23] =?UTF-8?q?=E5=8F=AB=E5=8F=B7=E6=B6=88=E6=81=AF?= =?UTF-8?q?=E8=AE=A2=E9=98=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/admin/CallTableController.java | 12 + .../account/dto/calltable/CallSubMsgDTO.java | 27 ++ .../dto/calltable/CallTableNumDTO.java | 1 + .../czg/account/service/CallTableService.java | 2 + .../service/impl/CallTableServiceImpl.java | 58 +++- .../account/util/WechatMiniMsgUtil.java | 256 ++++++++++++++++++ 6 files changed, 351 insertions(+), 5 deletions(-) create mode 100644 cash-common/cash-common-service/src/main/java/com/czg/account/dto/calltable/CallSubMsgDTO.java create mode 100644 cash-service/account-service/src/main/java/com/czg/service/account/util/WechatMiniMsgUtil.java diff --git a/cash-api/account-server/src/main/java/com/czg/controller/admin/CallTableController.java b/cash-api/account-server/src/main/java/com/czg/controller/admin/CallTableController.java index d76569858..36f0b75a6 100644 --- a/cash-api/account-server/src/main/java/com/czg/controller/admin/CallTableController.java +++ b/cash-api/account-server/src/main/java/com/czg/controller/admin/CallTableController.java @@ -1,5 +1,6 @@ package com.czg.controller.admin; +import com.czg.account.dto.WxMsgSubDTO; import com.czg.account.dto.calltable.*; import com.czg.account.entity.CallConfig; import com.czg.account.entity.CallQueue; @@ -173,4 +174,15 @@ public class CallTableController { public CzgResult updateConfig(@RequestBody UpdateConfigDTO configDTO) { return CzgResult.success(callTableService.updateConfig(StpKit.USER.getShopId(), configDTO)); } + + /** + * 消息订阅 + * @return 是否成功 + */ + @PostMapping("subMsg") + public CzgResult subMsg( + @Validated @RequestBody CallSubMsgDTO subMsgDTO + ) { + return CzgResult.success(callTableService.subMsg(subMsgDTO)); + } } diff --git a/cash-common/cash-common-service/src/main/java/com/czg/account/dto/calltable/CallSubMsgDTO.java b/cash-common/cash-common-service/src/main/java/com/czg/account/dto/calltable/CallSubMsgDTO.java new file mode 100644 index 000000000..976a5599b --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/account/dto/calltable/CallSubMsgDTO.java @@ -0,0 +1,27 @@ +package com.czg.account.dto.calltable; + +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +/** + * @author Administrator + */ +@Data +public class CallSubMsgDTO { + /** + * 店铺id + */ + @NotNull + private Long shopId; + /** + * 队列id + */ + @NotNull + private Long queueId; + /** + * openId + */ + @NotEmpty + private String openId; +} diff --git a/cash-common/cash-common-service/src/main/java/com/czg/account/dto/calltable/CallTableNumDTO.java b/cash-common/cash-common-service/src/main/java/com/czg/account/dto/calltable/CallTableNumDTO.java index 3f66d6ef6..b539961a6 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/account/dto/calltable/CallTableNumDTO.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/account/dto/calltable/CallTableNumDTO.java @@ -21,4 +21,5 @@ public class CallTableNumDTO { * 号码 */ private String callNum; + private Long queueId; } diff --git a/cash-common/cash-common-service/src/main/java/com/czg/account/service/CallTableService.java b/cash-common/cash-common-service/src/main/java/com/czg/account/service/CallTableService.java index c077d4939..02535e144 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/account/service/CallTableService.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/account/service/CallTableService.java @@ -36,4 +36,6 @@ public interface CallTableService extends IService { CallConfig getConfig(Long shopId); boolean updateConfig(Long shopId, UpdateConfigDTO configDTO); + + boolean subMsg(CallSubMsgDTO subMsgDTO); } diff --git a/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/CallTableServiceImpl.java b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/CallTableServiceImpl.java index c70291137..d98af9726 100644 --- a/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/CallTableServiceImpl.java +++ b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/CallTableServiceImpl.java @@ -15,6 +15,7 @@ import com.czg.resp.CzgResult; import com.czg.service.account.mapper.CallQueueMapper; import com.czg.service.account.mapper.CallTableMapper; import com.czg.service.account.util.FunUtil; +import com.czg.service.account.util.WechatMiniMsgUtil; import com.czg.system.dto.SysParamsDTO; import com.czg.system.service.SysParamsService; import com.czg.utils.JoinQueryWrapper; @@ -62,6 +63,8 @@ public class CallTableServiceImpl extends ServiceImpl(config.getNearNum(), 1)).getRecords(); if (!nearList.isEmpty()) { CallQueue nearQueue = nearList.getFirst(); -// wxMiniUtils.sendCurrentOrNearCallMsg(shopInfo.getShopName(), getStrByState(Integer.valueOf(nearQueue.getState())), -// nearQueue.getCallNum(), current.isEmpty() ? "" : current.get(0).getCallNum(), "排号信息", nearQueue.getOpenId(), true); + miniMsgUtil.sendCurrentOrNearCallMsg(shopInfo.getShopName(), getStrByState(nearQueue.getState()), + nearQueue.getCallNum(), current.isEmpty() ? "" : current.getFirst().getCallNum(), "排号信息", nearQueue.getOpenId(), true); } return 1; } + private String getStrByState(Integer state) { + return switch (state) { + case -1 -> "已取消"; + case 0 -> "排队中"; + case 1 -> "已到号"; + case 3 -> "已过号"; + default -> ""; + }; + } @Override public boolean updateInfo(Long shopId, UpdateCallQueueDTO updateCallQueueDTO) { @@ -543,4 +555,40 @@ public class CallTableServiceImpl extends ServiceImpl 0) { + throw new ApiNotPrintException("您已订阅其他号码,请勿重复订阅"); + } + } + + queue.setSubState(1); + queue.setOpenId(subMsgDTO.getOpenId()); + return callQueueService.updateById(queue); + } } diff --git a/cash-service/account-service/src/main/java/com/czg/service/account/util/WechatMiniMsgUtil.java b/cash-service/account-service/src/main/java/com/czg/service/account/util/WechatMiniMsgUtil.java new file mode 100644 index 000000000..f68dbf1e5 --- /dev/null +++ b/cash-service/account-service/src/main/java/com/czg/service/account/util/WechatMiniMsgUtil.java @@ -0,0 +1,256 @@ +package com.czg.service.account.util; + +import cn.hutool.core.codec.Base64; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.crypto.symmetric.AES; +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpUtil; +import com.alibaba.fastjson2.JSON; +import com.alibaba.fastjson2.JSONObject; +import com.czg.config.RedisCst; +import com.czg.resp.CzgResult; +import com.czg.service.RedisService; +import com.czg.system.dto.SysParamsDTO; +import com.czg.system.enums.SysParamCodeEnum; +import com.czg.system.service.SysParamsService; +import com.google.gson.JsonObject; +import jakarta.annotation.Resource; +import jakarta.validation.constraints.NotBlank; +import lombok.extern.slf4j.Slf4j; +import org.apache.dubbo.config.annotation.DubboReference; +import org.springframework.stereotype.Component; + +import java.io.InputStream; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.Map; + +/** + * @author Administrator + */ +@Slf4j +@Component +public class WechatMiniMsgUtil { + @DubboReference(check = false) + private SysParamsService sysParamsService; + @Resource + private RedisService redisService; + @Resource + private AliOssUtil aliOssUtil; + + private static final String TOKEN_URL = "https://api.weixin.qq.com/cgi-bin/token"; + private static final String QR_CODE_URL = "https://api.weixin.qq.com/wxa/getwxacode"; + + + static LinkedHashMap linkedHashMap = new LinkedHashMap<>(); + + static { + + linkedHashMap.put("40001", "获取 access_token 时 AppSecret 错误,或者 access_token 无效。请开发者认真比对 AppSecret 的正确性,或查看是否正在为恰当的公众号调用接口"); + linkedHashMap.put("40003", "不合法的 OpenID ,请开发者确认 OpenID (该用户)是否已关注公众号,或是否是其他公众号的 OpenID"); + linkedHashMap.put("40014", "不合法的 access_token ,请开发者认真比对 access_token 的有效性(如是否过期),或查看是否正在为恰当的公众号调用接口"); + linkedHashMap.put("40037", "不合法的 template_id"); + linkedHashMap.put("43101", "用户未订阅消息"); + linkedHashMap.put("43107", "订阅消息能力封禁"); + linkedHashMap.put("43108", "并发下发消息给同一个粉丝"); + linkedHashMap.put("45168", "命中敏感词"); + linkedHashMap.put("47003", "参数错误"); + + } + + public JSONObject sendTempMsg(String tempId, String toUserOpenId, Map data, String note) { + log.info("开始发送" + note + "模板消息, 接收用户openId: {}, 消息数据: {}", toUserOpenId, data); + String token= getAccessToken(); + + JSONObject object1=new JSONObject(); + + object1.put("template_id", tempId); + object1.put("touser", toUserOpenId); + object1.put("data",data); + + object1.put("miniprogram_state","trial"); + object1.put("lang","zh_CN"); + + String response= HttpRequest.post("https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=".concat(token)).body(object1.toString()).execute().body(); + log.info("微信模板消息发送成功,相应内容:{}",response); + JSONObject resObj= JSONObject.parseObject(response); + if(ObjectUtil.isNotEmpty(resObj)&&ObjectUtil.isNotNull(resObj)&&"0".equals(resObj.get("errcode")+"")){ + return resObj; + } + + throw new RuntimeException(linkedHashMap.getOrDefault(resObj.get("errcode") + "", "未知错误")); + } + + public void sendCurrentOrNearCallMsg(String shopName, String state, String callNum, String currentNum, String note, String openId, boolean isNear) { + CzgResult callNear = sysParamsService.getParamsByCode("wx_mini_msg_call_near"); + CzgResult callCurrent = sysParamsService.getParamsByCode("wx_mini_msg_call_current"); + + Map data = new HashMap() {{ + put("thing1", new HashMap() {{ + put("value", shopName); + }}); + put("phrase2", new HashMap() {{ + put("value", state); + }}); + put("character_string3", new HashMap() {{ + put("value", callNum); + }}); + put("character_string4", new HashMap() {{ + put("value", currentNum); + }}); + put("thing5", new HashMap() {{ + put("value", note); + }}); + }}; + try { + sendTempMsg(isNear ? callNear.getData().getParamValue() : callCurrent.getData().getParamValue(), openId, data, "排队到号"); + } catch (Exception e) { + log.error("发送失败, openId:{}, msg: {}", openId, e.getMessage()); + } + } + + public void sendPassCallMsg(String shopName, String state, String callNum, String currentNum, String note, String openId) { + CzgResult callPass = sysParamsService.getParamsByCode("wx_mini_msg_call_pass"); + + Map data = new HashMap() {{ + put("thing1", new HashMap() {{ + put("value", shopName); + }}); + put("character_string2", new HashMap() {{ + put("value", callNum); + }}); + put("character_string3", new HashMap() {{ + put("value", currentNum); + }}); + put("phrase4", new HashMap() {{ + put("value", state); + }}); + put("thing5", new HashMap() {{ + put("value", note); + }}); + }}; + try { + sendTempMsg(callPass.getData().getParamValue(), openId, data, "过号"); + } catch (Exception e) { + log.error("发送失败, openId:{}, msg: {}", openId, e.getMessage()); + } + } + + public String getAccountOpenId(String code) { + CzgResult wxAccountAppId = sysParamsService.getParamsByCode("wx_account_app_id"); + CzgResult wxAccountSecrete = sysParamsService.getParamsByCode("wx_account_secrete"); + String accountAppId = wxAccountAppId.getData().getParamValue(); + String accountSecrete = wxAccountSecrete.getData().getParamValue(); + String requestUrl = "https://api.weixin.qq.com/sns/oauth2/access_token?"; + Map requestUrlParam = new HashMap<>(); + // https://mp.weixin.qq.com/wxopen/devprofile?action=get_profile&token=164113089&lang=zh_CN + //小程序appId + requestUrlParam.put("appid", accountAppId); + //小程序secret + requestUrlParam.put("secret", accountSecrete); + //小程序端返回的code + requestUrlParam.put("code", code); + //默认参数 + requestUrlParam.put("grant_type", "authorization_code"); + log.info("微信获取openid请求报文:{}", requestUrlParam); + //发送post请求读取调用微信接口获取openid用户唯一标识 + String resp = HttpUtil.post(requestUrl, requestUrlParam); + log.info("响应报文{}", resp); + return JSONObject.parseObject(resp).getString("openid"); + } + + //获取小程序token + private String getAccessToken() { + CzgResult wxMiniAppId = sysParamsService.getParamsByCode("wx_mini_app_id"); + CzgResult wxMiniSecrete = sysParamsService.getParamsByCode("wx_mini_secrete"); + String appId = wxMiniAppId.getData().getParamValue(); + String secrete = wxMiniSecrete.getData().getParamValue(); + String url = String.format("%s?grant_type=client_credential&appid=%s&secret=%s", TOKEN_URL, appId, secrete); + String response = HttpUtil.get(url); + JSONObject jsonResponse = JSONObject.parseObject(response); + if (!jsonResponse.containsKey("access_token")) { + throw new RuntimeException("Failed to retrieve access token: " + response); + } + return jsonResponse.getString("access_token"); + } + + /** + * 生成 小程序码 跳转对应页面 + * + */ + public String getFetchQrCode(Map params) throws Exception { + String url = aliOssUtil.upload(fetchQrCode(params), aliOssUtil.getPath("shopVip", "png")); + redisService.set(RedisCst.SHOP_VIP_CODE + params.get("shopId"), url); + return url; + } + + //生成页面地址 + private InputStream fetchQrCode(Map params) { + JsonObject jsonObject = new JsonObject(); + //路径 + jsonObject.addProperty("path", sysParamsService.getSysParamValue(SysParamCodeEnum.WX_MINI_VIP_URL.getCode()) + "?shopId=" + params.get("shopId")); + //是否需要透明底色,为 true 时,生成透明底色的小程序码 + jsonObject.addProperty("is_hyaline", true); + //正式版为 release,体验版为 trial,开发版为 develop + if (params.containsKey("env_version")) { + jsonObject.addProperty("env_version", "trial"); + } + String accessToken = getAccessToken(); + String url = String.format("%s?access_token=%s", QR_CODE_URL, accessToken); + return HttpUtil.createPost(url) + .body(jsonObject.toString(), "application/json") + .execute() + .bodyStream(); + } + + + public JSONObject getSession(String code) { + CzgResult wxMiniSecrete = sysParamsService.getParamsByCode("wx_mini_secrete"); + CzgResult wxMiniAppId = sysParamsService.getParamsByCode("wx_mini_app_id"); + String appId = wxMiniAppId.getData().getParamValue(); + String secrete = wxMiniSecrete.getData().getParamValue(); + String requestUrl = "https://api.weixin.qq.com/sns/jscode2session"; + Map requestUrlParam = new HashMap<>(); + // https://mp.weixin.qq.com/wxopen/devprofile?action=get_profile&token=164113089&lang=zh_CN + //小程序appId + requestUrlParam.put("appid", appId); + //小程序secret + requestUrlParam.put("secret", secrete); + //小程序端返回的code + requestUrlParam.put("js_code", code); + //默认参数 + requestUrlParam.put("grant_type", "authorization_code"); + //发送post请求读取调用微信接口获取openid用户唯一标识 + String resp = HttpUtil.post(requestUrl, requestUrlParam); + JSONObject jsonObject = JSON.parseObject(resp); + log.info("微信获取openid响应报文:{}", resp); + return jsonObject; + } + + public String getSessionKey(String code, String key) { + JSONObject session = getSession(code); + String info = session.getString(key); + if (StrUtil.isBlank(info)) { + throw new RuntimeException(key + "获取失败"); + } + return info; + } + + public String getSessionKeyOrOpenId(String code, boolean isAccount) { + return getSessionKey(code, "openid"); + } + + public static String decrypt(String sessionKey, @NotBlank(message = "数据不能为空") String encryptedData, String iv) { + // Base64 解码 + byte[] keyBytes = Base64.decode(sessionKey); + byte[] encryptedBytes = Base64.decode(encryptedData); + byte[] ivBytes = Base64.decode(iv); + + // 使用 Hutool 进行 AES-CBC 解密 + AES aes = new AES("CBC", "PKCS5Padding", keyBytes, ivBytes); + byte[] decryptedBytes = aes.decrypt(encryptedBytes); + + return new String(decryptedBytes, java.nio.charset.StandardCharsets.UTF_8); + } +} From baabf01e5129397d040af430040b94454f8e9c31 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=9D=BE?= <8605635+zhang3064194730@user.noreply.gitee.com> Date: Thu, 20 Mar 2025 14:53:08 +0800 Subject: [PATCH 21/23] =?UTF-8?q?=E5=B0=8F=E7=A8=8B=E5=BA=8F=E5=8F=AB?= =?UTF-8?q?=E5=8F=B7=E7=9B=B8=E5=85=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/admin/CallTableController.java | 4 +- .../controller/user/UCallTableController.java | 77 +++++++++++++++++++ .../account/dto/calltable/TakeNumberDTO.java | 4 + .../czg/account/service/CallTableService.java | 4 +- .../com/czg/account/vo/CallQueueInfoVO.java | 47 +++++++++++ .../account/mapper/CallQueueMapper.java | 5 ++ .../service/impl/CallTableServiceImpl.java | 32 ++++++-- .../main/resources/mapper/CallQueueMapper.xml | 55 +++++++++++++ 8 files changed, 220 insertions(+), 8 deletions(-) create mode 100644 cash-api/account-server/src/main/java/com/czg/controller/user/UCallTableController.java create mode 100644 cash-common/cash-common-service/src/main/java/com/czg/account/vo/CallQueueInfoVO.java diff --git a/cash-api/account-server/src/main/java/com/czg/controller/admin/CallTableController.java b/cash-api/account-server/src/main/java/com/czg/controller/admin/CallTableController.java index 36f0b75a6..d28aeb9b9 100644 --- a/cash-api/account-server/src/main/java/com/czg/controller/admin/CallTableController.java +++ b/cash-api/account-server/src/main/java/com/czg/controller/admin/CallTableController.java @@ -136,8 +136,8 @@ public class CallTableController { */ @SaAdminCheckPermission(value = "callTable:queue:list", name = "获取叫号队列") @GetMapping("queue") - public CzgResult> getQueue(Long callTableId, Integer state) { - return CzgResult.success(callTableService.getQueue(StpKit.USER.getShopId(), callTableId, state)); + public CzgResult> getQueue(Long callTableId, Integer state, String openId) { + return CzgResult.success(callTableService.getQueue(StpKit.USER.getShopId(), openId, callTableId, state)); } diff --git a/cash-api/account-server/src/main/java/com/czg/controller/user/UCallTableController.java b/cash-api/account-server/src/main/java/com/czg/controller/user/UCallTableController.java new file mode 100644 index 000000000..4541a6541 --- /dev/null +++ b/cash-api/account-server/src/main/java/com/czg/controller/user/UCallTableController.java @@ -0,0 +1,77 @@ +package com.czg.controller.user; + + +import com.czg.account.dto.calltable.CallSubMsgDTO; +import com.czg.account.dto.calltable.CallTableNumDTO; +import com.czg.account.dto.calltable.CallTablePage; +import com.czg.account.dto.calltable.TakeNumberDTO; +import com.czg.account.entity.CallQueue; +import com.czg.account.service.CallTableService; +import com.czg.annotation.SaAdminCheckPermission; +import com.czg.resp.CzgResult; +import com.czg.sa.StpKit; +import com.mybatisflex.core.paginate.Page; +import jakarta.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +/** + * 小程序叫号管理 + * @author Administrator + */ +@RestController +@RequestMapping("/user/callTable") +public class UCallTableController { + @Resource + private CallTableService callTableService; + /** + * 获取叫号号码 + */ + @PostMapping("takeNumber") + public CzgResult takeNumber(@Validated @RequestBody TakeNumberDTO takeNumberDTO) { + return CzgResult.success(callTableService.takeNumber(StpKit.USER.getShopId(), takeNumberDTO)); + } + + /** + * 获取叫号队列 + * + * @param callTableId 桌型id + * @param state 状态 -1已取消 0排队中 1叫号中 2已入座 3 已过号 + * @return 分页数据 + */ +// @GetMapping("queue") + public CzgResult> getQueue(@RequestParam String openId, Long callTableId, Integer state) { + return CzgResult.success(callTableService.getQueue(StpKit.USER.getShopId(), openId, callTableId, state)); + } + + /** + * 叫号桌型获取 + * + * @param callTableId 叫号桌型id + * @param state 0禁用 1使用 + * @return 分页数据 + */ + @GetMapping + public CzgResult get(Long callTableId, Integer state) { + return CzgResult.success(callTableService.get(StpKit.USER.getShopId(), callTableId, state)); + } + + /** + * 根据店铺id和openId获取当前叫号号码 + * @param queueId 队列id + * @return 状态 + */ + @GetMapping("status") + public CzgResult getStatus(@RequestParam String openId, @RequestParam(required = false) Long queueId) { + return CzgResult.success(callTableService.getStatus(StpKit.USER.getShopId(), openId, queueId)); + } + + @PostMapping("subMsg") + public CzgResult subMsg( + @Validated @RequestBody CallSubMsgDTO subMsgDTO + ) { + return CzgResult.success(callTableService.subMsg(subMsgDTO)); + } + + +} diff --git a/cash-common/cash-common-service/src/main/java/com/czg/account/dto/calltable/TakeNumberDTO.java b/cash-common/cash-common-service/src/main/java/com/czg/account/dto/calltable/TakeNumberDTO.java index ef7fbd7d7..13813f5d6 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/account/dto/calltable/TakeNumberDTO.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/account/dto/calltable/TakeNumberDTO.java @@ -30,4 +30,8 @@ public class TakeNumberDTO extends BaseCallTableDTO{ * 姓名 */ private String name; + /** + * openId + */ + private String openId; } diff --git a/cash-common/cash-common-service/src/main/java/com/czg/account/service/CallTableService.java b/cash-common/cash-common-service/src/main/java/com/czg/account/service/CallTableService.java index 02535e144..5a6948d2f 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/account/service/CallTableService.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/account/service/CallTableService.java @@ -29,7 +29,7 @@ public interface CallTableService extends IService { boolean updateInfo(Long shopId, UpdateCallQueueDTO updateCallQueueDTO); - Page getQueue(Long shopId, Long callTableId, Integer state); + Page getQueue(Long shopId, String openId, Long callTableId, Integer state); Page getCallRecord(Long shopId, Integer callTableId); @@ -38,4 +38,6 @@ public interface CallTableService extends IService { boolean updateConfig(Long shopId, UpdateConfigDTO configDTO); boolean subMsg(CallSubMsgDTO subMsgDTO); + + Object getStatus(Long shopId, String openId, Long queueId); } diff --git a/cash-common/cash-common-service/src/main/java/com/czg/account/vo/CallQueueInfoVO.java b/cash-common/cash-common-service/src/main/java/com/czg/account/vo/CallQueueInfoVO.java new file mode 100644 index 000000000..03aa8f9ff --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/account/vo/CallQueueInfoVO.java @@ -0,0 +1,47 @@ +package com.czg.account.vo; + +import lombok.Data; + +/** + * @author Administrator + */ +@Data +public class CallQueueInfoVO { + /** + * 叫号队列id,queueId + */ + private Long id; + /** + * 桌型名称 + */ + private String tableName; + /** + * 桌型备注 + */ + private String tableNote; + /** + * 等待人数 + */ + private Integer waitingCount; + /** + * 等待时间 + */ + private Integer waitTime; + /** + * -1已取消 0排队中 1叫号中 2已入座 3 已过号 + */ + private Integer state; + /** + * 叫号号码 + */ + private String callNum; + private String shopState; + /** + * 店铺名称 + */ + private String shopName; + /** + * logo + */ + private String logo; +} diff --git a/cash-service/account-service/src/main/java/com/czg/service/account/mapper/CallQueueMapper.java b/cash-service/account-service/src/main/java/com/czg/service/account/mapper/CallQueueMapper.java index d407403fd..6575da383 100644 --- a/cash-service/account-service/src/main/java/com/czg/service/account/mapper/CallQueueMapper.java +++ b/cash-service/account-service/src/main/java/com/czg/service/account/mapper/CallQueueMapper.java @@ -1,9 +1,13 @@ package com.czg.service.account.mapper; import com.czg.account.dto.calltable.CallRecordVO; +import com.czg.account.vo.CallQueueInfoVO; import com.mybatisflex.core.BaseMapper; import com.czg.account.entity.CallQueue; import com.mybatisflex.core.paginate.Page; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** * 叫号排号队列表 映射层。 @@ -16,4 +20,5 @@ public interface CallQueueMapper extends BaseMapper { Page selectCallRecord(); long selectCallRecord_COUNT(); + List selectInfoByOpenId(@Param("shopId") Long shopId, @Param("openId") String openId, @Param("today") String today, @Param("queueId") Long queueId); } diff --git a/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/CallTableServiceImpl.java b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/CallTableServiceImpl.java index d98af9726..3d81f7088 100644 --- a/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/CallTableServiceImpl.java +++ b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/CallTableServiceImpl.java @@ -8,6 +8,7 @@ import cn.hutool.extra.qrcode.QrConfig; import com.czg.account.dto.calltable.*; import com.czg.account.entity.*; import com.czg.account.service.*; +import com.czg.account.vo.CallQueueInfoVO; import com.czg.config.RabbitPublisher; import com.czg.config.RedisCst; import com.czg.exception.ApiNotPrintException; @@ -29,10 +30,7 @@ import org.apache.dubbo.config.annotation.DubboService; import org.springframework.data.redis.core.StringRedisTemplate; import java.io.ByteArrayOutputStream; -import java.util.ArrayList; -import java.util.Base64; -import java.util.Collections; -import java.util.List; +import java.util.*; import java.util.concurrent.atomic.AtomicReference; import java.util.stream.Collectors; @@ -467,7 +465,7 @@ public class CallTableServiceImpl extends ServiceImpl getQueue(Long shopId, Long callTableId, Integer state) { + public Page getQueue(Long shopId, String openId, Long callTableId, Integer state) { List tableIds; if (callTableId != null) { tableIds = Collections.singletonList(callTableId); @@ -491,6 +489,10 @@ public class CallTableServiceImpl extends ServiceImpl pageInfo = callQueueService.page(PageUtil.buildPage(), query .orderBy(CallQueue::getCreateTime, true) .orderBy(CallQueue::getState, false)); @@ -591,4 +593,24 @@ public class CallTableServiceImpl extends ServiceImpl callQueueInfoVOS = callQueueMapper.selectInfoByOpenId(shopId, openId, DateUtil.date().toString("yyyy-MM-dd"), null); + if (callQueueInfoVOS.isEmpty()) { + callQueueInfoVOS = callQueueMapper.selectInfoByOpenId(shopId, openId, DateUtil.date().toString("yyyy-MM-dd"), queueId); + } + if (!callQueueInfoVOS.isEmpty()) { + CallQueueInfoVO callQueueInfoVO = callQueueInfoVOS.getFirst(); + CallQueue callQueue = new CallQueue(); + callQueue.setOpenId(openId); + callQueue.setId(callQueueInfoVO.getId()); + callQueueService.updateById(callQueue); + } + ShopInfo shopInfo = shopInfoService.getById(shopId); + HashMap data = new HashMap<>(); + data.put("shopInfo", shopInfo); + data.put("queueInfo", callQueueInfoVOS.isEmpty() ? null : callQueueInfoVOS.getFirst()); + return data; + } } diff --git a/cash-service/account-service/src/main/resources/mapper/CallQueueMapper.xml b/cash-service/account-service/src/main/resources/mapper/CallQueueMapper.xml index e0caf88ed..aec1d8a69 100644 --- a/cash-service/account-service/src/main/resources/mapper/CallQueueMapper.xml +++ b/cash-service/account-service/src/main/resources/mapper/CallQueueMapper.xml @@ -17,4 +17,59 @@ left join tb_call_table on tb_call_queue.call_table_id = tb_call_table.id ${qwSql} + From 6adef2ddffa5216e4b21956a5eab235f43601163 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=9D=BE?= <8605635+zhang3064194730@user.noreply.gitee.com> Date: Thu, 20 Mar 2025 15:02:53 +0800 Subject: [PATCH 22/23] =?UTF-8?q?=E5=B0=8F=E7=A8=8B=E5=BA=8F=E5=8F=AB?= =?UTF-8?q?=E5=8F=B7=E7=9B=B8=E5=85=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/czg/controller/user/UCallTableController.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/cash-api/account-server/src/main/java/com/czg/controller/user/UCallTableController.java b/cash-api/account-server/src/main/java/com/czg/controller/user/UCallTableController.java index 4541a6541..27a7ab00f 100644 --- a/cash-api/account-server/src/main/java/com/czg/controller/user/UCallTableController.java +++ b/cash-api/account-server/src/main/java/com/czg/controller/user/UCallTableController.java @@ -39,7 +39,7 @@ public class UCallTableController { * @param state 状态 -1已取消 0排队中 1叫号中 2已入座 3 已过号 * @return 分页数据 */ -// @GetMapping("queue") + @GetMapping("queue") public CzgResult> getQueue(@RequestParam String openId, Long callTableId, Integer state) { return CzgResult.success(callTableService.getQueue(StpKit.USER.getShopId(), openId, callTableId, state)); } @@ -61,11 +61,15 @@ public class UCallTableController { * @param queueId 队列id * @return 状态 */ - @GetMapping("status") + @GetMapping("/queue/detail") public CzgResult getStatus(@RequestParam String openId, @RequestParam(required = false) Long queueId) { return CzgResult.success(callTableService.getStatus(StpKit.USER.getShopId(), openId, queueId)); } + /** + * 消息订阅 + * @return 是否成功 + */ @PostMapping("subMsg") public CzgResult subMsg( @Validated @RequestBody CallSubMsgDTO subMsgDTO From f0405e6b71ab31e6df10f0f249f0ef5bf59dd462 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=9D=BE?= <8605635+zhang3064194730@user.noreply.gitee.com> Date: Thu, 20 Mar 2025 15:34:22 +0800 Subject: [PATCH 23/23] =?UTF-8?q?=E6=89=93=E5=8D=B0=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/czg/service/order/print/PrinterImpl.java | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/cash-service/order-service/src/main/java/com/czg/service/order/print/PrinterImpl.java b/cash-service/order-service/src/main/java/com/czg/service/order/print/PrinterImpl.java index 97f4d5dfc..71ae5d155 100644 --- a/cash-service/order-service/src/main/java/com/czg/service/order/print/PrinterImpl.java +++ b/cash-service/order-service/src/main/java/com/czg/service/order/print/PrinterImpl.java @@ -303,7 +303,7 @@ public interface PrinterImpl { data.append(getFormatLabel(StrUtil.format("原价:{}", toPlainStr(printInfoDTO.getOriginalAmount())), signLabelInfo.s)) .append(signLabelInfo.br); // data.append(StrUtil.format("原价:{}
", toPlainStr(printInfoDTO.getOriginalAmount()))); - data.append(getFormatLabel(StrUtil.format("折扣:-{}", toPlainStr(printInfoDTO.getDiscountAmount())), signLabelInfo.s)) + data.append(getFormatLabel(StrUtil.format("优惠:-{}", toPlainStr(printInfoDTO.getDiscountAmount())), signLabelInfo.s)) .append(signLabelInfo.br); // data.append(StrUtil.format("折扣:-{}
", toPlainStr(printInfoDTO.getDiscountAmount()))); } @@ -330,12 +330,13 @@ public interface PrinterImpl { data.append(getFormatLabel(StrUtil.format("积分:{}", printInfoDTO.getIntegral()), signLabelInfo.s)) .append(signLabelInfo.br); // data.append(StrUtil.format("积分:{}
", printInfoDTO.getIntegral())); - } - data.append(getFormatLabel(StrUtil.format("余额:{}", toPlainStr(printInfoDTO.getBalance())), signLabelInfo.s)) - .append(signLabelInfo.br); + data.append(getFormatLabel(StrUtil.format("余额:{}", toPlainStr(printInfoDTO.getBalance())), signLabelInfo.s)) + .append(signLabelInfo.br); // data.append(StrUtil.format("余额:{}
", toPlainStr(printInfoDTO.getBalance()))); - data.append(getFormatLabel("--------------------------------", signLabelInfo.s)) - .append(signLabelInfo.br); + data.append(getFormatLabel("--------------------------------", signLabelInfo.s)) + .append(signLabelInfo.br); + } + // data.append("--------------------------------
"); if (StrUtil.isNotBlank(printInfoDTO.getRemark())) { data.append(getFormatLabel(StrUtil.format("备注:{}", printInfoDTO.getRemark()), signLabelInfo.l, signLabelInfo.bold))