districtList = platformDictMapper.queryAllByType("homeDistrict",environment);
+ homeUpVO.setDistrict(districtList);
+ return Result.success(CodeEnum.SUCCESS,homeUpVO);
+ }
+}
diff --git a/src/main/resources/mapper/TbPlatformDictMapper.xml b/src/main/resources/mapper/TbPlatformDictMapper.xml
new file mode 100644
index 0000000..fa4182b
--- /dev/null
+++ b/src/main/resources/mapper/TbPlatformDictMapper.xml
@@ -0,0 +1,248 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ insert into tb_platform_dict(name, type, cover_img, share_img, video, video_cover_img, rel_url, abs_url, created_at, updated_at, is_show_cash, is_show_mall, is_show_app, sort)
+ values (#{name}, #{type}, #{coverImg}, #{shareImg}, #{video}, #{videoCoverImg}, #{relUrl}, #{absUrl}, #{createdAt}, #{updatedAt}, #{isShowCash}, #{isShowMall}, #{isShowApp}, #{sort})
+
+
+
+ insert into tb_platform_dict(name, type, cover_img, share_img, video, video_cover_img, rel_url, abs_url, created_at, updated_at, is_show_cash, is_show_mall, is_show_app, sort)
+ values
+
+ (#{entity.name}, #{entity.type}, #{entity.coverImg}, #{entity.shareImg}, #{entity.video}, #{entity.videoCoverImg}, #{entity.relUrl}, #{entity.absUrl}, #{entity.createdAt}, #{entity.updatedAt}, #{entity.isShowCash}, #{entity.isShowMall}, #{entity.isShowApp}, #{entity.sort})
+
+
+
+
+ insert into tb_platform_dict(name, type, cover_img, share_img, video, video_cover_img, rel_url, abs_url, created_at, updated_at, is_show_cash, is_show_mall, is_show_app, sort)
+ values
+
+ (#{entity.name}, #{entity.type}, #{entity.coverImg}, #{entity.shareImg}, #{entity.video}, #{entity.videoCoverImg}, #{entity.relUrl}, #{entity.absUrl}, #{entity.createdAt}, #{entity.updatedAt}, #{entity.isShowCash}, #{entity.isShowMall}, #{entity.isShowApp}, #{entity.sort})
+
+ on duplicate key update
+ name = values(name),
+ type = values(type),
+ cover_img = values(cover_img),
+ share_img = values(share_img),
+ video = values(video),
+ video_cover_img = values(video_cover_img),
+ rel_url = values(rel_url),
+ abs_url = values(abs_url),
+ created_at = values(created_at),
+ updated_at = values(updated_at),
+ is_show_cash = values(is_show_cash),
+ is_show_mall = values(is_show_mall),
+ is_show_app = values(is_show_app),
+ sort = values(sort)
+
+
+
+
+ update tb_platform_dict
+
+
+ name = #{name},
+
+
+ type = #{type},
+
+
+ cover_img = #{coverImg},
+
+
+ share_img = #{shareImg},
+
+
+ video = #{video},
+
+
+ video_cover_img = #{videoCoverImg},
+
+
+ rel_url = #{relUrl},
+
+
+ abs_url = #{absUrl},
+
+
+ created_at = #{createdAt},
+
+
+ updated_at = #{updatedAt},
+
+
+ is_show_cash = #{isShowCash},
+
+
+ is_show_mall = #{isShowMall},
+
+
+ is_show_app = #{isShowApp},
+
+
+ sort = #{sort},
+
+
+ where id = #{id}
+
+
+
+
+ delete from tb_platform_dict where id = #{id}
+
+
+
+
diff --git a/src/main/resources/mapper/TbProductSkuMapper.xml b/src/main/resources/mapper/TbProductSkuMapper.xml
index 6ba93af..969e918 100644
--- a/src/main/resources/mapper/TbProductSkuMapper.xml
+++ b/src/main/resources/mapper/TbProductSkuMapper.xml
@@ -355,4 +355,19 @@
+
+
+
\ No newline at end of file
diff --git a/src/main/resources/mapper/TbShopInfoMapper.xml b/src/main/resources/mapper/TbShopInfoMapper.xml
index bad0fbf..0634beb 100644
--- a/src/main/resources/mapper/TbShopInfoMapper.xml
+++ b/src/main/resources/mapper/TbShopInfoMapper.xml
@@ -617,4 +617,31 @@
+
+
\ No newline at end of file
From 976f63d09c1850530a41a5256248fc1ed70bd42e Mon Sep 17 00:00:00 2001
From: wangw <1594593906@qq.com>
Date: Wed, 3 Apr 2024 10:51:46 +0800
Subject: [PATCH 05/10] =?UTF-8?q?app=20=E7=94=A8=E6=88=B7=E7=99=BB?=
=?UTF-8?q?=E5=BD=95=20=E7=94=A8=E6=88=B7=E6=B3=A8=E5=86=8C=20=E9=80=80?=
=?UTF-8?q?=E5=87=BA=20=20redis=205=E5=BA=93=20token=E7=9A=84key=E4=B8=BAO?=
=?UTF-8?q?NLINE=5FAPP=5FUSER:=E7=94=A8=E6=88=B7id=20app=E7=AB=AF=20?=
=?UTF-8?q?=E7=99=BB=E5=BD=95=E6=A0=A1=E9=AA=8C=20code=20-4=20=E8=B4=A6?=
=?UTF-8?q?=E5=8F=B7=E8=BF=87=E6=9C=9F=20app=E7=AB=AF=20=E7=89=88=E6=9C=AC?=
=?UTF-8?q?=E6=98=AF=E5=90=A6=E6=9B=B4=E6=96=B0=E6=A0=A1=E9=AA=8C=20=20red?=
=?UTF-8?q?is=205=E5=BA=93=20=E7=89=88=E6=9C=AC=E6=98=AF=E5=90=A6=E6=9B=B4?=
=?UTF-8?q?=E6=96=B0=E7=9A=84key=E4=B8=BALDBL=5FAPP=5FVERSION:android/ios:?=
=?UTF-8?q?=E7=89=88=E6=9C=AC=E5=8F=B7=20=E5=85=A8=E5=B1=80=E8=B7=A8?=
=?UTF-8?q?=E5=9F=9F=E6=94=BE=E8=A1=8C=E5=A4=84=E7=90=86=20=E7=BB=8F?=
=?UTF-8?q?=E7=BA=AC=E5=BA=A6=E8=AE=A1=E7=AE=97=E8=B7=9D=E7=A6=BB=E5=B7=A5?=
=?UTF-8?q?=E4=BD=9C=E7=B1=BB?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../cashierservice/auth/LoginFilter.java | 11 +--
.../config/AppApiMethodAspect.java | 61 ++++++++++++++++
.../cashierservice/config/CorsFilter.java | 35 ++++++++++
.../controller/LoginContoller.java | 66 +++++++++++-------
.../system/cashierservice/redis/RedisCst.java | 1 +
.../cashierservice/service/LoginService.java | 69 +++++++++----------
.../system/cashierservice/sign/CodeEnum.java | 1 +
.../cashierservice/util/LocationUtils.java | 55 +++++++++++++++
8 files changed, 231 insertions(+), 68 deletions(-)
create mode 100644 src/main/java/com/chaozhanggui/system/cashierservice/config/AppApiMethodAspect.java
create mode 100644 src/main/java/com/chaozhanggui/system/cashierservice/config/CorsFilter.java
create mode 100644 src/main/java/com/chaozhanggui/system/cashierservice/util/LocationUtils.java
diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/auth/LoginFilter.java b/src/main/java/com/chaozhanggui/system/cashierservice/auth/LoginFilter.java
index 19b5294..ce5ae7e 100644
--- a/src/main/java/com/chaozhanggui/system/cashierservice/auth/LoginFilter.java
+++ b/src/main/java/com/chaozhanggui/system/cashierservice/auth/LoginFilter.java
@@ -37,6 +37,7 @@ public class LoginFilter implements Filter {
"css/**",
"js/**",
"cashierService/phoneValidateCode",//验证码
+ "cashierService/tbPlatformDict",//
"cashierService/home/homePageUp",//首页上半
"cashierService/home",//首页
"cashierService/login/**"//登录部分接口不校验
@@ -68,14 +69,14 @@ public class LoginFilter implements Filter {
}
String environment = request.getHeader("environment");
//token校验目前只对app生效
- if(!environment.equals("app")){
+ if (StringUtils.isNotBlank(environment) || !environment.equals("app")) {
chain.doFilter(req, resp);
return;
}
// 判断用户TOKEN是否存在
String token = request.getHeader("token");
if (StringUtils.isBlank(token)) {
- Result result = new Result(CodeEnum.TOKEN_EXEIST);
+ Result result = new Result(CodeEnum.TOKEN_EXEIST);
String jsonString = JSONObject.toJSONString(result);
JSONObject jsonObject = JSONObject.parseObject(jsonString, JSONObject.class);
response.getWriter().print(jsonObject);
@@ -86,8 +87,8 @@ public class LoginFilter implements Filter {
String loginName = TokenUtil.parseParamFromToken(token, "userId").toString();
//获取redis中的token
String message = redisUtil.getMessage(RedisCst.ONLINE_APP_USER.concat(loginName));
- if(StringUtils.isBlank(message)){
- Result result = new Result(CodeEnum.TOKEN_EXPIRED);
+ if (StringUtils.isBlank(message)) {
+ Result result = new Result(CodeEnum.TOKEN_EXPIRED);
String jsonString = JSONObject.toJSONString(result);
JSONObject jsonObject = JSONObject.parseObject(jsonString, JSONObject.class);
response.getWriter().print(jsonObject);
@@ -96,7 +97,7 @@ public class LoginFilter implements Filter {
}
String redisToken = JSON.parseObject(message).getString("token");
if (!token.equals(redisToken)) {
- Result result = new Result(CodeEnum.TOKEN_EXPIRED);
+ Result result = new Result(CodeEnum.TOKEN_EXPIRED);
String jsonString = JSONObject.toJSONString(result);
JSONObject jsonObject = JSONObject.parseObject(jsonString, JSONObject.class);
response.getWriter().print(jsonObject);
diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/config/AppApiMethodAspect.java b/src/main/java/com/chaozhanggui/system/cashierservice/config/AppApiMethodAspect.java
new file mode 100644
index 0000000..5a08f2f
--- /dev/null
+++ b/src/main/java/com/chaozhanggui/system/cashierservice/config/AppApiMethodAspect.java
@@ -0,0 +1,61 @@
+package com.chaozhanggui.system.cashierservice.config;
+
+import com.chaozhanggui.system.cashierservice.redis.RedisCst;
+import com.chaozhanggui.system.cashierservice.redis.RedisUtil;
+import com.chaozhanggui.system.cashierservice.sign.CodeEnum;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.annotation.Around;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Pointcut;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import com.chaozhanggui.system.cashierservice.sign.Result;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.Objects;
+
+/**
+ * 方法调用统一切面处理
+ */
+@Aspect
+@Component
+@Slf4j
+public class AppApiMethodAspect {
+
+ @Autowired
+ RedisUtil redisUtil;
+
+ @Pointcut("execution(public * (" +
+ "com.chaozhanggui.system.cashierservice.controller.* " +
+ ").*(..))")
+ public void pkg() {
+ }
+
+ @Around("pkg()")
+ public Object around(ProceedingJoinPoint pjp) throws Throwable {
+ HttpServletRequest request = ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest();
+ HttpServletRequest req = request;
+ //version:版本号
+ //type: ios; android;
+ //environment:app;wx
+ String environment = req.getHeader("environment");
+ if (StringUtils.isNotBlank(environment) && environment.equals("app")) {
+ String type = req.getHeader("type");
+ String version = req.getHeader("version");
+ //LDBL_APP_VERSION:ios:version 存在即需要强制更新
+ String message = redisUtil.getMessage(RedisCst.LDBL_APP_VERSION + type + ":" + version);
+ if (StringUtils.isNotBlank(message)) {
+ return Result.success(CodeEnum.UPGRADE_REQUIRED, message);
+ }
+ }
+
+ // 执行被拦截的方法
+ Object result = pjp.proceed();
+ return result;
+
+ }
+}
diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/config/CorsFilter.java b/src/main/java/com/chaozhanggui/system/cashierservice/config/CorsFilter.java
new file mode 100644
index 0000000..31e33e6
--- /dev/null
+++ b/src/main/java/com/chaozhanggui/system/cashierservice/config/CorsFilter.java
@@ -0,0 +1,35 @@
+package com.chaozhanggui.system.cashierservice.config;
+
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.core.annotation.Order;
+import org.springframework.stereotype.Component;
+
+import javax.servlet.*;
+import javax.servlet.annotation.WebFilter;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+/**
+ * 跨域过滤器
+ */
+@Slf4j
+@Component
+@Order(1)
+@WebFilter(filterName = "CorsFilter", urlPatterns = "/*")
+public class CorsFilter implements Filter {
+
+ @Override
+ public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)
+ throws IOException, ServletException {
+ HttpServletResponse response = (HttpServletResponse) resp;
+ HttpServletRequest reqs = (HttpServletRequest) req;
+ String curOrigin = reqs.getHeader("Origin");
+ response.setHeader("Access-Control-Allow-Origin", curOrigin == null ? "true" : curOrigin);
+ response.setHeader("Access-Control-Allow-Methods", "*");
+ response.setHeader("Access-Control-Max-Age", "3600");
+ response.setHeader("Access-Control-Allow-Headers", "x-requested-with,signature");
+ response.setHeader("Access-Control-Allow-Credentials", "true");
+ chain.doFilter(req, resp);
+ }
+}
diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/controller/LoginContoller.java b/src/main/java/com/chaozhanggui/system/cashierservice/controller/LoginContoller.java
index 4a9a57d..a5e2af1 100644
--- a/src/main/java/com/chaozhanggui/system/cashierservice/controller/LoginContoller.java
+++ b/src/main/java/com/chaozhanggui/system/cashierservice/controller/LoginContoller.java
@@ -1,36 +1,35 @@
package com.chaozhanggui.system.cashierservice.controller;
-
-import cn.binarywang.wx.miniapp.api.WxMaService;
-import cn.binarywang.wx.miniapp.api.impl.WxMaServiceImpl;
-import cn.binarywang.wx.miniapp.bean.WxMaPhoneNumberInfo;
import cn.binarywang.wx.miniapp.util.crypt.WxMaCryptUtils;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.chaozhanggui.system.cashierservice.dao.TbMerchantAccountMapper;
import com.chaozhanggui.system.cashierservice.entity.TbMerchantAccount;
-import com.chaozhanggui.system.cashierservice.entity.TbUserInfo;
import com.chaozhanggui.system.cashierservice.entity.dto.AuthUserDto;
import com.chaozhanggui.system.cashierservice.entity.dto.OnlineUserDto;
+import com.chaozhanggui.system.cashierservice.redis.RedisCst;
+import com.chaozhanggui.system.cashierservice.redis.RedisUtil;
import com.chaozhanggui.system.cashierservice.service.LoginService;
import com.chaozhanggui.system.cashierservice.service.OnlineUserService;
import com.chaozhanggui.system.cashierservice.sign.CodeEnum;
import com.chaozhanggui.system.cashierservice.sign.Result;
import com.chaozhanggui.system.cashierservice.util.IpUtil;
-import com.chaozhanggui.system.cashierservice.util.JSONUtil;
import com.chaozhanggui.system.cashierservice.util.MD5Utils;
import com.chaozhanggui.system.cashierservice.util.StringUtil;
+import com.chaozhanggui.system.cashierservice.util.TokenUtil;
import com.chaozhanggui.system.cashierservice.wxUtil.WechatUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.digest.DigestUtils;
+import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
-import java.util.*;
+import java.util.HashMap;
+import java.util.Map;
@CrossOrigin(origins = "*")
@RestController
@@ -58,6 +57,8 @@ public class LoginContoller {
@Resource
TbMerchantAccountMapper merchantAccountMapper;
+ @Autowired
+ RedisUtil redisUtil;
@RequestMapping("/wx/business/login")
@@ -223,35 +224,37 @@ public class LoginContoller {
/**
* 用户注册
- *
- * @param phone 手机号
- * @param nickName 用户昵称
- * @param password 密码
- * @param code 验证码
+ * phone 手机号
+ * nickName 用户昵称
+ * password 密码
+ * code 验证码
* @return
*/
- @PostMapping("register")
- public Result register(@RequestBody TbUserInfo userInfo) {
- boolean tf = loginService.validate(userInfo.getCode(), userInfo.getTelephone());
- if (tf) {
- return loginService.register(userInfo.getTelephone(), userInfo.getPassword(), userInfo.getNickName());
- } else {
- return Result.fail("验证码校验失败");
- }
- }
+// @PostMapping("register")
+// public Result register(@RequestBody TbUserInfo userInfo) {
+// boolean tf = loginService.validate(userInfo.getCode(), userInfo.getTelephone());
+// if (tf) {
+// return loginService.register(userInfo.getTelephone(), userInfo.getPassword(), userInfo.getNickName());
+// } else {
+// return Result.fail("验证码校验失败");
+// }
+// }
/**
- * App登录用户端的请求接口
- *
- * @param username 手机号
- * @param password 密码登录时使用
- * @param code 验证码登录时使用
+ * App登录用户端的请求接口 登录即注册
+ * 查看 {@link com.chaozhanggui.system.cashierservice.entity.dto.AuthUserDto}
+ * username 手机号
+ * password 密码登录时使用
+ * code 验证码登录时使用
* @return
*/
@PostMapping("/app/login")
public Result applogin(@RequestBody AuthUserDto authUserDto) {
if (ObjectUtil.isNull(authUserDto.getCode())) {
+ if(StringUtils.isBlank(authUserDto.getPassword())){
+ return Result.fail("请输入密码,或使用验证码登录");
+ }
//验证密码
String mdPasswordString = MD5Utils.MD5Encode(authUserDto.getPassword(), "utf-8");
return loginService.appLogin(authUserDto.getUsername(), mdPasswordString);
@@ -266,4 +269,15 @@ public class LoginContoller {
}
+ //退出登录的接口
+ @PostMapping("/loginOut")
+ public Result loginOut(HttpServletRequest request) {
+ String token = request.getHeader("token");
+ //获取当前登录人的账号
+ String userId = TokenUtil.parseParamFromToken(token, "userId").toString();
+ redisUtil.deleteByKey(RedisCst.ONLINE_APP_USER.concat(userId));
+ return Result.success(CodeEnum.SUCCESS);
+ }
+
+
}
diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/redis/RedisCst.java b/src/main/java/com/chaozhanggui/system/cashierservice/redis/RedisCst.java
index 26353e2..00513a8 100644
--- a/src/main/java/com/chaozhanggui/system/cashierservice/redis/RedisCst.java
+++ b/src/main/java/com/chaozhanggui/system/cashierservice/redis/RedisCst.java
@@ -11,6 +11,7 @@ public class RedisCst {
//在线用户
public static final String ONLINE_USER = "ONLINE_USER:";
public static final String ONLINE_APP_USER = "ONLINE_APP_USER:";
+ public static final String LDBL_APP_VERSION = "LDBL_APP_VERSION:";
public static final String TABLE_CART = "TABLE:CART:";
public static final String PRODUCT = "PRODUCT:";
diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/service/LoginService.java b/src/main/java/com/chaozhanggui/system/cashierservice/service/LoginService.java
index c8251d5..0e9532c 100644
--- a/src/main/java/com/chaozhanggui/system/cashierservice/service/LoginService.java
+++ b/src/main/java/com/chaozhanggui/system/cashierservice/service/LoginService.java
@@ -45,7 +45,6 @@ public class LoginService {
TbTokenMapper tbTokenMapper;
-
@Autowired
RedisUtil redisUtil;
@@ -158,49 +157,44 @@ public class LoginService {
return Result.fail("登录失败");
}
- public Result register(String phone, String password, String nickName) {
- TbUserInfo userInfo = tbUserInfoMapper.selectByPhone(phone);
- if (ObjectUtil.isNull(userInfo)) {
- userInfo = new TbUserInfo();
- userInfo.setAmount(BigDecimal.ZERO);
- userInfo.setChargeAmount(BigDecimal.ZERO);
- userInfo.setLineOfCredit(BigDecimal.ZERO);
- userInfo.setConsumeNumber(0);
- userInfo.setConsumeAmount(BigDecimal.ZERO);
- userInfo.setTotalScore(0);
- userInfo.setLockScore(0);
- userInfo.setHeadImg("");
- userInfo.setNickName(nickName);
- userInfo.setTelephone(phone);
- userInfo.setStatus(Byte.parseByte("1"));
- userInfo.setParentType("PERSON");
- userInfo.setIsResource(Byte.parseByte("0"));
- userInfo.setIsOnline(Byte.parseByte("0"));
- userInfo.setIsVip(Byte.parseByte("0"));
- userInfo.setSourcePath("APP");
- userInfo.setIsAttentionMp(Byte.parseByte("0"));
- userInfo.setSearchWord("||移动端用户");
- userInfo.setLastLogInAt(System.currentTimeMillis());
- userInfo.setCreatedAt(System.currentTimeMillis());
- userInfo.setUpdatedAt(System.currentTimeMillis());
+ public TbUserInfo register(String phone, String password, String nickName) {
+
+ TbUserInfo userInfo = new TbUserInfo();
+ userInfo.setAmount(BigDecimal.ZERO);
+ userInfo.setChargeAmount(BigDecimal.ZERO);
+ userInfo.setLineOfCredit(BigDecimal.ZERO);
+ userInfo.setConsumeNumber(0);
+ userInfo.setConsumeAmount(BigDecimal.ZERO);
+ userInfo.setTotalScore(0);
+ userInfo.setLockScore(0);
+ userInfo.setHeadImg("");
+ userInfo.setNickName(nickName);
+ userInfo.setTelephone(phone);
+ userInfo.setStatus(Byte.parseByte("1"));
+ userInfo.setParentType("PERSON");
+ userInfo.setIsResource(Byte.parseByte("0"));
+ userInfo.setIsOnline(Byte.parseByte("0"));
+ userInfo.setIsVip(Byte.parseByte("0"));
+ userInfo.setSourcePath("APP");
+ userInfo.setIsAttentionMp(Byte.parseByte("0"));
+ userInfo.setSearchWord("||移动端用户");
+ userInfo.setLastLogInAt(System.currentTimeMillis());
+ userInfo.setCreatedAt(System.currentTimeMillis());
+ userInfo.setUpdatedAt(System.currentTimeMillis());
+ if(StringUtils.isNotBlank(password)){
userInfo.setPassword(MD5Utils.MD5Encode(password, "UTF-8"));
- tbUserInfoMapper.insert(userInfo);
-
- } else {
- return Result.fail("用户已注册");
}
- //app与微信小程序用户关联
-
+ tbUserInfoMapper.insert(userInfo);
+ //注册时 app与微信小程序用户关联
TbUserInfo wechatUser = tbUserInfoMapper.selectUserByPhone(phone, "WECHAT-APP");
+ TbUserInfo appUser = tbUserInfoMapper.selectByPhone(phone);
if (wechatUser != null) {
- TbUserInfo appUser = tbUserInfoMapper.selectByPhone(phone);
appUser.setUserId(wechatUser.getId());
tbUserInfoMapper.updateByPrimaryKey(appUser);
wechatUser.setUserId(appUser.getId());
tbUserInfoMapper.updateByPrimaryKey(wechatUser);
}
-
- return Result.success(CodeEnum.SUCCESS);
+ return appUser;
}
/**
@@ -226,7 +220,8 @@ public class LoginService {
public Result appLogin(String username, String password) {
TbUserInfo userInfo = tbUserInfoMapper.selectUserByPhone(username, "APP");
if (ObjectUtil.isNull(userInfo)) {
- return Result.fail("用户未注册");
+ //注册
+ userInfo=register(username, password, username);
}
if (StringUtils.isNotBlank(password) && !password.equalsIgnoreCase(userInfo.getPassword())) {
return Result.fail("密码错误");
@@ -242,7 +237,7 @@ public class LoginService {
try {
map.put("token", token);
map.put("userInfo", userInfo);
- redisUtil.saveMessage(RedisCst.ONLINE_APP_USER.concat(userInfo.getId()+""), JSON.toJSONString(map));
+ redisUtil.saveMessage(RedisCst.ONLINE_APP_USER.concat(userInfo.getId() + ""), JSON.toJSONString(map));
return Result.success(CodeEnum.SUCCESS, map);
} catch (Exception e) {
e.printStackTrace();
diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/sign/CodeEnum.java b/src/main/java/com/chaozhanggui/system/cashierservice/sign/CodeEnum.java
index dd1a367..0eda53e 100644
--- a/src/main/java/com/chaozhanggui/system/cashierservice/sign/CodeEnum.java
+++ b/src/main/java/com/chaozhanggui/system/cashierservice/sign/CodeEnum.java
@@ -5,6 +5,7 @@ public enum CodeEnum {
//系统编码
SYS_EXCEPTION("999",false,"系统异常","fail"),
SUCCESS("0",false,"成功","success"),
+ UPGRADE_REQUIRED("426",true,"成功","success"),
ENCRYPT("0",true,"成功","success"),
FAIL("1",false,"失败","fail"),
TOKEN_EXEIST("-2",false,"token不能为空","fail"),
diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/util/LocationUtils.java b/src/main/java/com/chaozhanggui/system/cashierservice/util/LocationUtils.java
new file mode 100644
index 0000000..18d224f
--- /dev/null
+++ b/src/main/java/com/chaozhanggui/system/cashierservice/util/LocationUtils.java
@@ -0,0 +1,55 @@
+package com.chaozhanggui.system.cashierservice.util;
+
+import static java.lang.Math.*;
+import static java.lang.Math.sin;
+
+public class LocationUtils {
+
+ /**
+ * 将角度转化为弧度
+ */
+ public static double radians(double d) {
+ return d * Math.PI / 180.0;
+ }
+ /**
+ * 根据两点经纬度坐标计算直线距离
+ *
+ * S = 2arcsin√sin²(a/2)+cos(lat1)*cos(lat2)*sin²(b/2) ̄*6378.137
+ *
+ * 1. lng1 lat1 表示A点经纬度,lng2 lat2 表示B点经纬度;
+ * 2. a=lat1 – lat2 为两点纬度之差 b=lng1 -lng2 为两点经度之差;
+ * 3. 6378.137为地球赤道半径,单位为千米;
+ *
+ * @param lng1 点1经度
+ * @param lat1 点1纬度
+ * @param lng2 点2经度
+ * @param lat2 点2纬度
+ * @return 距离,单位千米(KM)
+ * @see 半正矢(Haversine)公式
+ */
+ public static double getDistanceFrom2LngLat(double lng1, double lat1, double lng2, double lat2) {
+ //将角度转化为弧度
+ double radLng1 = radians(lng1);
+ double radLat1 = radians(lat1);
+ double radLng2 = radians(lng2);
+ double radLat2 = radians(lat2);
+
+ double a = radLat1 - radLat2;
+ double b = radLng1 - radLng2;
+
+ return 2 * asin(sqrt(sin(a / 2) * sin(a / 2) + cos(radLat1) * cos(radLat2) * sin(b / 2) * sin(b / 2))) * 6378.137;
+ }
+
+// public static void main(String[] args) {
+// // 示例经纬度坐标
+// double lat1 = 108.954398;
+// double lon1 = 34.308687;
+//
+// double lat2 = 108.953555;
+// double lon2 = 34.276169;
+//
+// // 计算距离
+// double distance = getDistanceFrom2LngLat(lat1, lon1, lat2, lon2);
+// System.out.println("Distance between the two points is: " + distance + " km");
+// }
+}
From 106288497ea0cd759543816de51902734bc86172 Mon Sep 17 00:00:00 2001
From: wangw <1594593906@qq.com>
Date: Wed, 3 Apr 2024 15:28:50 +0800
Subject: [PATCH 06/10] =?UTF-8?q?=E9=AB=98=E5=BE=B7=E8=A1=8C=E6=94=BF?=
=?UTF-8?q?=E5=8C=BA=E6=8E=A5=E5=85=A5?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../cashierservice/auth/LoginFilter.java | 2 +-
.../controller/LocationController.java | 37 +++++++++++++++++++
.../cashierservice/util/LocationUtils.java | 14 +++++++
3 files changed, 52 insertions(+), 1 deletion(-)
create mode 100644 src/main/java/com/chaozhanggui/system/cashierservice/controller/LocationController.java
diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/auth/LoginFilter.java b/src/main/java/com/chaozhanggui/system/cashierservice/auth/LoginFilter.java
index ce5ae7e..8960af6 100644
--- a/src/main/java/com/chaozhanggui/system/cashierservice/auth/LoginFilter.java
+++ b/src/main/java/com/chaozhanggui/system/cashierservice/auth/LoginFilter.java
@@ -37,7 +37,7 @@ public class LoginFilter implements Filter {
"css/**",
"js/**",
"cashierService/phoneValidateCode",//验证码
- "cashierService/tbPlatformDict",//
+ "cashierService/location/**",//
"cashierService/home/homePageUp",//首页上半
"cashierService/home",//首页
"cashierService/login/**"//登录部分接口不校验
diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/controller/LocationController.java b/src/main/java/com/chaozhanggui/system/cashierservice/controller/LocationController.java
new file mode 100644
index 0000000..0f4be0a
--- /dev/null
+++ b/src/main/java/com/chaozhanggui/system/cashierservice/controller/LocationController.java
@@ -0,0 +1,37 @@
+package com.chaozhanggui.system.cashierservice.controller;
+
+import com.chaozhanggui.system.cashierservice.sign.CodeEnum;
+import com.chaozhanggui.system.cashierservice.sign.Result;
+import com.chaozhanggui.system.cashierservice.util.LocationUtils;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.*;
+
+@CrossOrigin(origins = "*")
+@RestController
+@Slf4j
+@RequestMapping("/location")
+public class LocationController {
+
+
+ /**
+ * 行政区域查询
+ *
+ * @param keywords citycode市、adcode区
+ * @return
+ */
+ @GetMapping("/district")
+ public Result createOrder(String keywords) throws JsonProcessingException {
+ String district = LocationUtils.district(keywords);
+ ObjectMapper mapper = new ObjectMapper();
+ // 将 JSON 字符串解析为 JsonNode 对象
+ JsonNode jsonNode = mapper.readTree(district);
+ JsonNode districts = jsonNode.get("districts");
+
+
+ return Result.success(CodeEnum.SUCCESS, districts);
+ }
+}
diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/util/LocationUtils.java b/src/main/java/com/chaozhanggui/system/cashierservice/util/LocationUtils.java
index 18d224f..ad4ccb9 100644
--- a/src/main/java/com/chaozhanggui/system/cashierservice/util/LocationUtils.java
+++ b/src/main/java/com/chaozhanggui/system/cashierservice/util/LocationUtils.java
@@ -1,10 +1,24 @@
package com.chaozhanggui.system.cashierservice.util;
+import java.util.HashMap;
+import java.util.Map;
+
import static java.lang.Math.*;
import static java.lang.Math.sin;
public class LocationUtils {
+ public static String district(String keywords) {
+ Map param=new HashMap<>();
+ //超掌柜生活-用户端
+ param.put("key","7a7f2e4790ea222660a027352ee3af39");
+ param.put("keywords",keywords);
+ param.put("subdistrict","1");
+ param.put("extensions","base");
+ String s = HttpClientUtil.doGet("https://restapi.amap.com/v3/config/district", param);
+ return s;
+ }
+
/**
* 将角度转化为弧度
*/
From acfe518420defeed64615191c3c9153c0415c058 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E9=9F=A9=E9=B9=8F=E8=BE=89?= <18322780655@163.com>
Date: Wed, 3 Apr 2024 17:32:50 +0800
Subject: [PATCH 07/10] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E9=A3=9E=E8=9B=BE?=
=?UTF-8?q?=E6=89=93=E5=8D=B0=E6=9C=BA?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../cashierservice/model/OrderDetailPO.java | 7 +-
.../rabbit/PrintMechineConsumer.java | 139 ++++++++++-
.../service/CloudPrinterService.java | 137 ++++++++++-
.../cashierservice/service/PayService.java | 6 +-
.../cashierservice/util/FeieyunPrintUtil.java | 220 ++++++++++++++++++
.../cashierservice/util/PrinterUtils.java | 4 +-
6 files changed, 502 insertions(+), 11 deletions(-)
diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/model/OrderDetailPO.java b/src/main/java/com/chaozhanggui/system/cashierservice/model/OrderDetailPO.java
index 4366113..1a2b8cb 100644
--- a/src/main/java/com/chaozhanggui/system/cashierservice/model/OrderDetailPO.java
+++ b/src/main/java/com/chaozhanggui/system/cashierservice/model/OrderDetailPO.java
@@ -30,6 +30,8 @@ public class OrderDetailPO implements Serializable {
List detailList;
+ private String remark;
+
@Data
public static class Detail implements Serializable{
@@ -41,6 +43,8 @@ public class OrderDetailPO implements Serializable {
private String remark;
+ private String spec;
+
public Detail(String productName, String number, String amount, String remark) {
this.productName = productName;
this.number = number;
@@ -51,7 +55,7 @@ public class OrderDetailPO implements Serializable {
}
- public OrderDetailPO(String merchantName, String printType, String masterId, String orderNo, String tradeDate, String operator, String receiptsAmount, String balance, String payType, String integral, List detailList) {
+ public OrderDetailPO(String merchantName, String printType, String masterId, String orderNo, String tradeDate, String operator, String receiptsAmount, String balance, String payType, String integral, List detailList,String remark) {
this.merchantName = merchantName;
this.printType = printType;
this.masterId = masterId;
@@ -63,5 +67,6 @@ public class OrderDetailPO implements Serializable {
this.payType = payType;
this.integral = integral;
this.detailList = detailList;
+ this.remark=remark;
}
}
diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/rabbit/PrintMechineConsumer.java b/src/main/java/com/chaozhanggui/system/cashierservice/rabbit/PrintMechineConsumer.java
index d285d1e..26b1f66 100644
--- a/src/main/java/com/chaozhanggui/system/cashierservice/rabbit/PrintMechineConsumer.java
+++ b/src/main/java/com/chaozhanggui/system/cashierservice/rabbit/PrintMechineConsumer.java
@@ -44,6 +44,10 @@ public class PrintMechineConsumer {
@Autowired
private TbProductMapper tbProductMapper;
+
+ @Autowired
+ private TbOrderDetailMapper tbOrderDetailMapper;
+
@RabbitHandler
public void listener(String message) {
String orderId = message;
@@ -167,7 +171,7 @@ public class PrintMechineConsumer {
}
if(ObjectUtil.isNotEmpty(detailList)&&detailList.size()>0){
- OrderDetailPO detailPO = new OrderDetailPO(shopInfo.getShopName(), "普通打印", orderInfo.getTableName(), orderInfo.getOrderNo(), DateUtils.getTime(new Date(orderInfo.getCreatedAt())), "【POS-1】001", orderInfo.getOrderAmount().toPlainString(), balance, orderInfo.getPayType(), "0", detailList);
+ OrderDetailPO detailPO = new OrderDetailPO(shopInfo.getShopName(), "普通打印", orderInfo.getTableName(), orderInfo.getOrderNo(), DateUtils.getTime(new Date(orderInfo.getCreatedAt())), "【POS-1】001", orderInfo.getOrderAmount().toPlainString(), balance, orderInfo.getPayType(), "0", detailList,orderInfo.getRemark());
String data= PrinterUtils.getCashPrintData(detailPO,"结算单");
PrinterUtils.printTickets(1, Integer.valueOf(printerNum), tbPrintMachineWithBLOBs.getAddress(), data);
}
@@ -256,7 +260,138 @@ public class PrintMechineConsumer {
break;
case "cash": //小票打印机
- break;
+ switch (model) {
+ case "normal": //普通出单
+
+ if ("return".equals(orderInfo.getOrderType())) {
+ List tbOrderDetails = tbOrderDetailMapper.selectAllByOrderId(Integer.valueOf(orderId));
+ if (ObjectUtil.isNotEmpty(tbOrderDetails) && tbOrderDetails.size() > 0) {
+ List detailList = new ArrayList<>();
+ tbOrderDetails.parallelStream().forEach(it -> {
+ String categoryId = tbProductMapper.selectByPrimaryKey(Integer.valueOf(it.getProductId())).getCategoryId();
+
+ Long count = categoryInfos.stream().filter(c ->
+ c.getId().toString().equals(categoryId)
+ ).count();
+ log.info("获取当前类别是否未打印类别:{}", count);
+
+
+ TbProductSkuWithBLOBs tbProductSkuWithBLOBs = tbProductSkuMapper.selectByPrimaryKey(Integer.valueOf(it.getProductSkuId()));
+ String remark = "";
+ if (ObjectUtil.isNotEmpty(tbProductSkuWithBLOBs) && ObjectUtil.isNotEmpty(tbProductSkuWithBLOBs.getSpecSnap())) {
+ remark = tbProductSkuWithBLOBs.getSpecSnap();
+ }
+ OrderDetailPO.Detail detail = new OrderDetailPO.Detail(it.getProductName(), it.getNum().toString(), it.getPriceAmount().toPlainString(), remark);
+ detailList.add(detail);
+
+ });
+ String balance = "0";
+
+ if ("deposit".equals(orderInfo.getPayType())) {
+ TbShopUser user = tbShopUserMapper.selectByPrimaryKey(orderInfo.getMemberId());
+ if (ObjectUtil.isNotEmpty(user) && ObjectUtil.isNotEmpty(user.getAmount())) {
+ balance = user.getAmount().toPlainString();
+ }
+ }
+
+
+ if (ObjectUtil.isNotEmpty(detailList) && detailList.size() > 0) {
+// OrderDetailPO detailPO = new OrderDetailPO(shopInfo.getShopName(), "普通打印", orderInfo.getMasterId(), orderInfo.getOrderNo(), DateUtils.getTime(new Date(orderInfo.getCreatedAt())), "【POS-1】001", orderInfo.getOrderAmount().toPlainString(), balance, orderInfo.getPayType(), "0", detailList);
+ OrderDetailPO detailPO = new OrderDetailPO(shopInfo.getShopName(), "普通打印", ObjectUtil.isEmpty(orderInfo.getMasterId()) || ObjectUtil.isNull(orderInfo.getMasterId()) ? orderInfo.getTableName() : orderInfo.getMasterId(), orderInfo.getOrderNo(), DateUtils.getTime(new Date(orderInfo.getCreatedAt())), "【POS-1】001", orderInfo.getOrderAmount().toPlainString(), balance, orderInfo.getPayType(), "0", detailList, orderInfo.getRemark());
+
+ String printType = "退款单";
+
+ String data = PrinterUtils.getCashPrintData(detailPO, printType);
+ PrinterUtils.printTickets(1, Integer.valueOf(printerNum), tbPrintMachineWithBLOBs.getAddress(), data);
+ }
+ }
+
+
+ } else {
+ cashierCarts = cashierCarts = tbCashierCartMapper.selectByOrderId(orderInfo.getId().toString(), "final");
+
+ if (ObjectUtil.isNotEmpty(cashierCarts) && cashierCarts.size() > 0) {
+ List detailList = new ArrayList<>();
+ cashierCarts.parallelStream().forEach(it -> {
+ String categoryId;
+ if (ObjectUtil.isEmpty(it.getCategoryId())) {
+ categoryId = tbProductMapper.selectByPrimaryKey(Integer.valueOf(it.getProductId())).getCategoryId();
+ } else {
+ categoryId = it.getCategoryId();
+ }
+
+
+ Long count = categoryInfos.stream().filter(c ->
+ c.getId().toString().equals(categoryId)
+ ).count();
+
+ if (count > 0) {
+ TbProductSkuWithBLOBs tbProductSkuWithBLOBs = tbProductSkuMapper.selectByPrimaryKey(Integer.valueOf(it.getSkuId()));
+ String remark = "";
+ if (ObjectUtil.isNotEmpty(tbProductSkuWithBLOBs) && ObjectUtil.isNotEmpty(tbProductSkuWithBLOBs.getSpecSnap())) {
+ remark = tbProductSkuWithBLOBs.getSpecSnap();
+ }
+ OrderDetailPO.Detail detail = new OrderDetailPO.Detail(it.getName(), it.getNumber().toString(), it.getTotalAmount().toPlainString(), remark);
+ detailList.add(detail);
+ }
+
+ });
+
+ String balance = "0";
+
+ if ("deposit".equals(orderInfo.getPayType())) {
+ TbShopUser user = tbShopUserMapper.selectByPrimaryKey(orderInfo.getMemberId());
+ if (ObjectUtil.isNotEmpty(user) && ObjectUtil.isNotEmpty(user.getAmount())) {
+ balance = user.getAmount().toPlainString();
+ }
+ }
+ if (ObjectUtil.isNotEmpty(detailList) && detailList.size() > 0) {
+ OrderDetailPO detailPO = new OrderDetailPO(shopInfo.getShopName(), "普通打印", orderInfo.getOrderType().equals("miniapp") ? orderInfo.getTableName() : orderInfo.getMasterId(), orderInfo.getOrderNo(), DateUtils.getTime(new Date(orderInfo.getCreatedAt())), "【POS-1】001", orderInfo.getOrderAmount().toPlainString(), balance, (ObjectUtil.isEmpty(orderInfo.getPayType()) || ObjectUtil.isNull(orderInfo.getPayType()) ? "" : orderInfo.getPayType()), "0", detailList, orderInfo.getRemark());
+ String printType = "结算单";
+
+ if ("return".equals(orderInfo.getOrderType())) {
+ printType = "退款单";
+ }
+
+
+ FeieyunPrintUtil.getCashPrintData(detailPO, tbPrintMachineWithBLOBs.getAddress(), printType, printType);
+ }
+
+ }
+ }
+
+ break;
+ case "one": //一菜一品
+
+ cashierCarts = tbCashierCartMapper.selectByOrderId(orderId, "final");
+ if (ObjectUtil.isNotEmpty(cashierCarts) && cashierCarts.size() > 0) {
+
+ cashierCarts.parallelStream().forEach(it -> {
+
+ String categoryId;
+ if (ObjectUtil.isEmpty(it.getCategoryId())) {
+ categoryId = tbProductMapper.selectByPrimaryKey(Integer.valueOf(it.getProductId())).getCategoryId();
+ } else {
+ categoryId = it.getCategoryId();
+ }
+
+
+ Long count = categoryInfos.stream().filter(c ->
+ c.getId().toString().equals(categoryId)
+ ).count();
+
+ if (count > 0) {
+ TbProductSkuWithBLOBs tbProductSkuWithBLOBs = tbProductSkuMapper.selectByPrimaryKey(Integer.valueOf(it.getSkuId()));
+ String remark = "";
+ if (ObjectUtil.isNotEmpty(tbProductSkuWithBLOBs) && ObjectUtil.isNotEmpty(tbProductSkuWithBLOBs.getSpecSnap())) {
+ remark = tbProductSkuWithBLOBs.getSpecSnap();
+ }
+ FeieyunPrintUtil.getPrintData(tbPrintMachineWithBLOBs.getAddress(), orderInfo.getTableName(), DateUtils.getTime(new Date(orderInfo.getCreatedAt())), it.getName(), it.getNumber(), remark);
+ }
+ });
+ }
+ }
+ break;
case "kitchen": //出品打印机
break;
}
diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/service/CloudPrinterService.java b/src/main/java/com/chaozhanggui/system/cashierservice/service/CloudPrinterService.java
index 0833316..0c560ce 100644
--- a/src/main/java/com/chaozhanggui/system/cashierservice/service/CloudPrinterService.java
+++ b/src/main/java/com/chaozhanggui/system/cashierservice/service/CloudPrinterService.java
@@ -42,6 +42,10 @@ public class CloudPrinterService {
private TbProductMapper tbProductMapper;
+ @Autowired
+ private TbOrderDetailMapper tbOrderDetailMapper;
+
+
public Result printReceipt(String type,String orderId,Boolean ispre){
@@ -167,7 +171,7 @@ public class CloudPrinterService {
}
if(ObjectUtil.isNotEmpty(detailList)&&detailList.size()>0){
- OrderDetailPO detailPO = new OrderDetailPO(shopInfo.getShopName(), "普通打印", orderInfo.getTableName(), orderInfo.getOrderNo(), DateUtils.getTime(new Date(orderInfo.getCreatedAt())), "【POS-1】001", orderInfo.getOrderAmount().toPlainString(), balance, orderInfo.getPayType(), "0", detailList);
+ OrderDetailPO detailPO = new OrderDetailPO(shopInfo.getShopName(), "普通打印", orderInfo.getTableName(), orderInfo.getOrderNo(), DateUtils.getTime(new Date(orderInfo.getCreatedAt())), "【POS-1】001", orderInfo.getOrderAmount().toPlainString(), balance, orderInfo.getPayType(), "0", detailList,orderInfo.getRemark());
String data= PrinterUtils.getCashPrintData(detailPO,"结算单");
PrinterUtils.printTickets(1, Integer.valueOf(printerNum), tbPrintMachineWithBLOBs.getAddress(), data);
}
@@ -256,6 +260,137 @@ public class CloudPrinterService {
break;
case "cash": //小票打印机
+ switch (model) {
+ case "normal": //普通出单
+
+ if ("return".equals(orderInfo.getOrderType())) {
+ List tbOrderDetails = tbOrderDetailMapper.selectAllByOrderId(Integer.valueOf(orderId));
+ if (ObjectUtil.isNotEmpty(tbOrderDetails) && tbOrderDetails.size() > 0) {
+ List detailList = new ArrayList<>();
+ tbOrderDetails.parallelStream().forEach(it -> {
+ String categoryId = tbProductMapper.selectByPrimaryKey(Integer.valueOf(it.getProductId())).getCategoryId();
+
+ Long count = categoryInfos.stream().filter(c ->
+ c.getId().toString().equals(categoryId)
+ ).count();
+ log.info("获取当前类别是否未打印类别:{}", count);
+
+
+ TbProductSkuWithBLOBs tbProductSkuWithBLOBs = tbProductSkuMapper.selectByPrimaryKey(Integer.valueOf(it.getProductSkuId()));
+ String remark = "";
+ if (ObjectUtil.isNotEmpty(tbProductSkuWithBLOBs) && ObjectUtil.isNotEmpty(tbProductSkuWithBLOBs.getSpecSnap())) {
+ remark = tbProductSkuWithBLOBs.getSpecSnap();
+ }
+ OrderDetailPO.Detail detail = new OrderDetailPO.Detail(it.getProductName(), it.getNum().toString(), it.getPriceAmount().toPlainString(), remark);
+ detailList.add(detail);
+
+ });
+ String balance = "0";
+
+ if ("deposit".equals(orderInfo.getPayType())) {
+ TbShopUser user = tbShopUserMapper.selectByPrimaryKey(orderInfo.getMemberId());
+ if (ObjectUtil.isNotEmpty(user) && ObjectUtil.isNotEmpty(user.getAmount())) {
+ balance = user.getAmount().toPlainString();
+ }
+ }
+
+
+ if (ObjectUtil.isNotEmpty(detailList) && detailList.size() > 0) {
+// OrderDetailPO detailPO = new OrderDetailPO(shopInfo.getShopName(), "普通打印", orderInfo.getMasterId(), orderInfo.getOrderNo(), DateUtils.getTime(new Date(orderInfo.getCreatedAt())), "【POS-1】001", orderInfo.getOrderAmount().toPlainString(), balance, orderInfo.getPayType(), "0", detailList);
+ OrderDetailPO detailPO = new OrderDetailPO(shopInfo.getShopName(), "普通打印", ObjectUtil.isEmpty(orderInfo.getMasterId()) || ObjectUtil.isNull(orderInfo.getMasterId()) ? orderInfo.getTableName() : orderInfo.getMasterId(), orderInfo.getOrderNo(), DateUtils.getTime(new Date(orderInfo.getCreatedAt())), "【POS-1】001", orderInfo.getOrderAmount().toPlainString(), balance, orderInfo.getPayType(), "0", detailList, orderInfo.getRemark());
+
+ String printType = "退款单";
+
+ String data = PrinterUtils.getCashPrintData(detailPO, printType);
+ PrinterUtils.printTickets(1, Integer.valueOf(printerNum), tbPrintMachineWithBLOBs.getAddress(), data);
+ }
+ }
+
+
+ } else {
+ cashierCarts = cashierCarts = tbCashierCartMapper.selectByOrderId(orderInfo.getId().toString(), "final");
+
+ if (ObjectUtil.isNotEmpty(cashierCarts) && cashierCarts.size() > 0) {
+ List detailList = new ArrayList<>();
+ cashierCarts.parallelStream().forEach(it -> {
+ String categoryId;
+ if (ObjectUtil.isEmpty(it.getCategoryId())) {
+ categoryId = tbProductMapper.selectByPrimaryKey(Integer.valueOf(it.getProductId())).getCategoryId();
+ } else {
+ categoryId = it.getCategoryId();
+ }
+
+
+ Long count = categoryInfos.stream().filter(c ->
+ c.getId().toString().equals(categoryId)
+ ).count();
+
+ if (count > 0) {
+ TbProductSkuWithBLOBs tbProductSkuWithBLOBs = tbProductSkuMapper.selectByPrimaryKey(Integer.valueOf(it.getSkuId()));
+ String remark = "";
+ if (ObjectUtil.isNotEmpty(tbProductSkuWithBLOBs) && ObjectUtil.isNotEmpty(tbProductSkuWithBLOBs.getSpecSnap())) {
+ remark = tbProductSkuWithBLOBs.getSpecSnap();
+ }
+ OrderDetailPO.Detail detail = new OrderDetailPO.Detail(it.getName(), it.getNumber().toString(), it.getTotalAmount().toPlainString(), remark);
+ detailList.add(detail);
+ }
+
+ });
+
+ String balance = "0";
+
+ if ("deposit".equals(orderInfo.getPayType())) {
+ TbShopUser user = tbShopUserMapper.selectByPrimaryKey(orderInfo.getMemberId());
+ if (ObjectUtil.isNotEmpty(user) && ObjectUtil.isNotEmpty(user.getAmount())) {
+ balance = user.getAmount().toPlainString();
+ }
+ }
+ if (ObjectUtil.isNotEmpty(detailList) && detailList.size() > 0) {
+ OrderDetailPO detailPO = new OrderDetailPO(shopInfo.getShopName(), "普通打印", orderInfo.getOrderType().equals("miniapp") ? orderInfo.getTableName() : orderInfo.getMasterId(), orderInfo.getOrderNo(), DateUtils.getTime(new Date(orderInfo.getCreatedAt())), "【POS-1】001", orderInfo.getOrderAmount().toPlainString(), balance, (ObjectUtil.isEmpty(orderInfo.getPayType()) || ObjectUtil.isNull(orderInfo.getPayType()) ? "" : orderInfo.getPayType()), "0", detailList, orderInfo.getRemark());
+ String printType = "结算单";
+
+ if ("return".equals(orderInfo.getOrderType())) {
+ printType = "退款单";
+ }
+
+
+ FeieyunPrintUtil.getCashPrintData(detailPO, tbPrintMachineWithBLOBs.getAddress(), printType, printType);
+ }
+
+ }
+ }
+
+ break;
+ case "one": //一菜一品
+
+ cashierCarts = tbCashierCartMapper.selectByOrderId(orderId, "final");
+ if (ObjectUtil.isNotEmpty(cashierCarts) && cashierCarts.size() > 0) {
+
+ cashierCarts.parallelStream().forEach(it -> {
+
+ String categoryId;
+ if (ObjectUtil.isEmpty(it.getCategoryId())) {
+ categoryId = tbProductMapper.selectByPrimaryKey(Integer.valueOf(it.getProductId())).getCategoryId();
+ } else {
+ categoryId = it.getCategoryId();
+ }
+
+
+ Long count = categoryInfos.stream().filter(c ->
+ c.getId().toString().equals(categoryId)
+ ).count();
+
+ if (count > 0) {
+ TbProductSkuWithBLOBs tbProductSkuWithBLOBs = tbProductSkuMapper.selectByPrimaryKey(Integer.valueOf(it.getSkuId()));
+ String remark = "";
+ if (ObjectUtil.isNotEmpty(tbProductSkuWithBLOBs) && ObjectUtil.isNotEmpty(tbProductSkuWithBLOBs.getSpecSnap())) {
+ remark = tbProductSkuWithBLOBs.getSpecSnap();
+ }
+ FeieyunPrintUtil.getPrintData(tbPrintMachineWithBLOBs.getAddress(), orderInfo.getTableName(), DateUtils.getTime(new Date(orderInfo.getCreatedAt())), it.getName(), it.getNumber(), remark);
+ }
+ });
+ }
+ }
break;
case "kitchen": //出品打印机
break;
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 c693a60..1dcefcb 100644
--- a/src/main/java/com/chaozhanggui/system/cashierservice/service/PayService.java
+++ b/src/main/java/com/chaozhanggui/system/cashierservice/service/PayService.java
@@ -152,13 +152,13 @@ public class PayService {
if(response.getStatusCodeValue()==200&&ObjectUtil.isNotEmpty(response.getBody())){
JSONObject object=JSONObject.parseObject(response.getBody());
if(object.get("code").equals("0")){
-
payment.setTradeNumber(object.getJSONObject("data").get("orderNumber").toString());
payment.setUpdatedAt(System.currentTimeMillis());
tbOrderPaymentMapper.updateByPrimaryKeySelective(payment);
orderInfo.setStatus("paying");
orderInfo.setPayOrderNo(payment.getTradeNumber());
+
tbOrderInfoMapper.updateByPrimaryKey(orderInfo);
String key= RedisCst.TABLE_CART.concat(orderInfo.getTableId()).concat("-").concat(orderInfo.getShopId());
//清除缓存购物车数据
@@ -190,7 +190,6 @@ public class PayService {
}
if("paying".equals(orderInfo.getStatus())){
-
TbOrderPayment payment= tbOrderPaymentMapper.selectByOrderId(orderInfo.getId().toString());
if(ObjectUtil.isNotEmpty(payment)&&ObjectUtil.isNotEmpty(payment.getTradeNumber())){
@@ -199,8 +198,6 @@ public class PayService {
if(ObjectUtil.isEmpty(thirdApply)||ObjectUtil.isNull(thirdApply)){
return Result.fail("支付通道不存在");
}
-
-
TradeQueryReq req=new TradeQueryReq();
req.setAppId(thirdApply.getAppId());
req.setTimestamp(System.currentTimeMillis());
@@ -301,7 +298,6 @@ public class PayService {
TbMerchantThirdApply thirdApply= tbMerchantThirdApplyMapper.selectByPrimaryKey(Integer.valueOf(shopInfo.getMerchantId()));
-
if(ObjectUtil.isEmpty(thirdApply)||ObjectUtil.isNull(thirdApply)){
return Result.fail("支付通道不存在");
}
diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/util/FeieyunPrintUtil.java b/src/main/java/com/chaozhanggui/system/cashierservice/util/FeieyunPrintUtil.java
index 17ba159..a9a89a2 100644
--- a/src/main/java/com/chaozhanggui/system/cashierservice/util/FeieyunPrintUtil.java
+++ b/src/main/java/com/chaozhanggui/system/cashierservice/util/FeieyunPrintUtil.java
@@ -1,6 +1,8 @@
package com.chaozhanggui.system.cashierservice.util;
+import cn.hutool.core.util.ObjectUtil;
+import com.chaozhanggui.system.cashierservice.model.OrderDetailPO;
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.http.HttpEntity;
import org.apache.http.NameValuePair;
@@ -15,6 +17,7 @@ import org.apache.http.util.EntityUtils;
import java.io.IOException;
import java.util.ArrayList;
+import java.util.Date;
import java.util.List;
public class FeieyunPrintUtil {
@@ -114,6 +117,223 @@ public class FeieyunPrintUtil {
}
+ public static String getPrintData(String sn,String pickupNumber,String date,String productName,Integer number,String remark) {
+ StringBuilder builder = new StringBuilder();
+
+ 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+"
");
+ }
+ builder.append("");
+
+ String content=builder.toString();
+
+ System.out.println("content:".concat(content));
+
+ //通过POST请求,发送打印信息到服务器
+ RequestConfig requestConfig = RequestConfig.custom()
+ .setSocketTimeout(30000)//读取超时
+ .setConnectTimeout(30000)//连接超时
+ .build();
+
+ CloseableHttpClient httpClient = HttpClients.custom()
+ .setDefaultRequestConfig(requestConfig)
+ .build();
+
+ 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"));//打印联数
+
+ CloseableHttpResponse response = null;
+ String result = null;
+ try
+ {
+ post.setEntity(new UrlEncodedFormEntity(nvps,"utf-8"));
+ response = httpClient.execute(post);
+ int statecode = response.getStatusLine().getStatusCode();
+ if(statecode == 200){
+ HttpEntity httpentity = response.getEntity();
+ if (httpentity != null){
+ //服务器返回的JSON字符串,建议要当做日志记录起来
+ result = EntityUtils.toString(httpentity);
+ System.out.println("result:".concat(result));
+ }
+ }
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+ finally{
+ try {
+ if(response!=null){
+ response.close();
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ try {
+ post.abort();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ try {
+ httpClient.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ return result;
+
+ }
+
+
+
+
+
+
+
+
+ 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("------------------------
");
+ char 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){
+
+ 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)+"
");
+ }
+
+ 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+"
");
+ }
+ 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.getBalance()+"
");
+ sb.append("------------------------
");
+
+ if(ObjectUtil.isNotEmpty(detailPO.getRemark())&&ObjectUtil.isNotNull(detailPO.getRemark())){
+ sb.append("备注:"+detailPO.getRemark()+"
");
+ }
+
+
+
+ sb.append("打印时间:"+DateUtils.getTime(new Date())+"
");
+
+ sb.append("");
+
+ String content=sb.toString();
+
+ //通过POST请求,发送打印信息到服务器
+ RequestConfig requestConfig = RequestConfig.custom()
+ .setSocketTimeout(30000)//读取超时
+ .setConnectTimeout(30000)//连接超时
+ .build();
+
+ CloseableHttpClient httpClient = HttpClients.custom()
+ .setDefaultRequestConfig(requestConfig)
+ .build();
+
+ 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"));//打印联数
+
+ CloseableHttpResponse response = null;
+ String result = null;
+ try
+ {
+ post.setEntity(new UrlEncodedFormEntity(nvps,"utf-8"));
+ response = httpClient.execute(post);
+ int statecode = response.getStatusLine().getStatusCode();
+ if(statecode == 200){
+ HttpEntity httpentity = response.getEntity();
+ if (httpentity != null){
+ //服务器返回的JSON字符串,建议要当做日志记录起来
+ result = EntityUtils.toString(httpentity);
+ }
+ }
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+ finally{
+ try {
+ if(response!=null){
+ response.close();
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ try {
+ post.abort();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ try {
+ httpClient.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ return result;
+
+ }
+
+
+
public static int getProducrName(String str){
diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/util/PrinterUtils.java b/src/main/java/com/chaozhanggui/system/cashierservice/util/PrinterUtils.java
index ffab9ab..66145ee 100644
--- a/src/main/java/com/chaozhanggui/system/cashierservice/util/PrinterUtils.java
+++ b/src/main/java/com/chaozhanggui/system/cashierservice/util/PrinterUtils.java
@@ -217,9 +217,9 @@ public class PrinterUtils {
detailList.add(detail);
detailList.add(detail3);
detailList.add(detail4);
- OrderDetailPO detailPO=new OrderDetailPO("牛叉闪闪","普通打印","#365","DD20240306134718468","2024-03-06 15:00:00","【POS-1】001","79000.80","5049758.96","deposit","0",detailList);
+// OrderDetailPO detailPO=new OrderDetailPO("牛叉闪闪","普通打印","#365","DD20240306134718468","2024-03-06 15:00:00","【POS-1】001","79000.80","5049758.96","deposit","0",detailList);
- printTickets(1,1,"ZF544PG03W00001",getCashPrintData(detailPO,"结算单"));
+// printTickets(1,1,"ZF544PG03W00001",getCashPrintData(detailPO,"结算单"));
}
}
From 56c034aff80bf7c430570d1279d9d2e6cc14f9ad Mon Sep 17 00:00:00 2001
From: wangw <1594593906@qq.com>
Date: Wed, 3 Apr 2024 18:04:47 +0800
Subject: [PATCH 08/10] =?UTF-8?q?=E9=85=8D=E7=BD=AE=E6=96=87=E4=BB=B6?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/main/resources/application-prod.yml | 2 +
src/main/resources/application-prod2.yml | 61 ++++++++++++++++++++++++
2 files changed, 63 insertions(+)
create mode 100644 src/main/resources/application-prod2.yml
diff --git a/src/main/resources/application-prod.yml b/src/main/resources/application-prod.yml
index 701eaf7..f8e8e1d 100644
--- a/src/main/resources/application-prod.yml
+++ b/src/main/resources/application-prod.yml
@@ -1,3 +1,5 @@
+server:
+ port: 9888
spring:
datasource:
url: jdbc:mysql://rm-bp1b572nblln4jho2.mysql.rds.aliyuncs.com/fycashier?useUnicode=true&characterEncoding=utf8&characterSetResults=utf8&useJDBCCompliantTimezoneShift=true&serverTimezone=Asia/Shanghai&useSSL=false
diff --git a/src/main/resources/application-prod2.yml b/src/main/resources/application-prod2.yml
new file mode 100644
index 0000000..f8e8e1d
--- /dev/null
+++ b/src/main/resources/application-prod2.yml
@@ -0,0 +1,61 @@
+server:
+ port: 9888
+spring:
+ datasource:
+ url: jdbc:mysql://rm-bp1b572nblln4jho2.mysql.rds.aliyuncs.com/fycashier?useUnicode=true&characterEncoding=utf8&characterSetResults=utf8&useJDBCCompliantTimezoneShift=true&serverTimezone=Asia/Shanghai&useSSL=false
+ username: root
+ password: Czg666888
+ driver-class-name: com.mysql.cj.jdbc.Driver
+ initialSize: 5
+ minIdle: 5
+ maxActive: 20
+ maxWait: 60000
+ logging:
+ level:
+ com.chaozhanggui.system.openness: info
+ redis:
+ # redis数据库索引(默认为0),我们使用索引为3的数据库,避免和其他数据库冲突
+ database: 0
+ # redis服务器地址(默认为localhost)
+ host: 127.0.0.1
+ # redis端口(默认为6379)
+ port: 6379
+ # redis访问密码(默认为空)
+ password: 111111
+ # redis连接超时时间(单位为毫秒)
+ timeout: 1000
+ block-when-exhausted: true
+ # redis连接池配置
+ jedis:
+ pool:
+ max-active: 8
+ max-idle: 1024
+ min-idle: 0
+ max-wait: -1
+ main:
+ allow-circular-references: true
+ rabbitmq:
+ host: 127.0.0.1
+ port: 5672
+ username: admin
+ password: Czg666888
+#分页配置
+pagehelper:
+ supportMethodsArguments: true
+ reasonable: true
+ helperDialect: mysql
+ params: count=countSql
+
+mybatis:
+ configuration:
+ map-underscore-to-camel-case: true
+ log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
+ mapper-locations: classpath:mapper/*.xml
+ysk:
+ url: https://gatewaytestapi.sxczgkj.cn/gate-service/
+ callBackurl: https://cashier.sxczgkj.cn/cashierService/notify/notifyCallBack
+ callBackIn: https://cashier.sxczgkj.cn/cashierService/notify/memberInCallBack
+ default: 19191703856
+
+
+
From a07b70d86c5ed11150098d1bfb03ec3c1bdbea19 Mon Sep 17 00:00:00 2001
From: wangw <1594593906@qq.com>
Date: Wed, 3 Apr 2024 18:39:30 +0800
Subject: [PATCH 09/10] =?UTF-8?q?=E5=85=A8=E5=B1=80=E6=8B=A6=E6=88=AA=20?=
=?UTF-8?q?=E8=AF=B7=E6=B1=82=E5=A4=B4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../cashierservice/auth/LoginFilter.java | 74 +++++------
.../config/AppApiMethodAspect.java | 122 +++++++++---------
2 files changed, 98 insertions(+), 98 deletions(-)
diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/auth/LoginFilter.java b/src/main/java/com/chaozhanggui/system/cashierservice/auth/LoginFilter.java
index 8960af6..083bda5 100644
--- a/src/main/java/com/chaozhanggui/system/cashierservice/auth/LoginFilter.java
+++ b/src/main/java/com/chaozhanggui/system/cashierservice/auth/LoginFilter.java
@@ -67,43 +67,43 @@ public class LoginFilter implements Filter {
chain.doFilter(req, resp);
return;
}
- String environment = request.getHeader("environment");
- //token校验目前只对app生效
- if (StringUtils.isNotBlank(environment) || !environment.equals("app")) {
- chain.doFilter(req, resp);
- return;
- }
- // 判断用户TOKEN是否存在
- String token = request.getHeader("token");
- if (StringUtils.isBlank(token)) {
- Result result = new Result(CodeEnum.TOKEN_EXEIST);
- String jsonString = JSONObject.toJSONString(result);
- JSONObject jsonObject = JSONObject.parseObject(jsonString, JSONObject.class);
- response.getWriter().print(jsonObject);
- response.getWriter().flush();//流里边的缓存刷出
- return;
- }
- //获取当前登录人的用户id
- String loginName = TokenUtil.parseParamFromToken(token, "userId").toString();
- //获取redis中的token
- String message = redisUtil.getMessage(RedisCst.ONLINE_APP_USER.concat(loginName));
- if (StringUtils.isBlank(message)) {
- Result result = new Result(CodeEnum.TOKEN_EXPIRED);
- String jsonString = JSONObject.toJSONString(result);
- JSONObject jsonObject = JSONObject.parseObject(jsonString, JSONObject.class);
- response.getWriter().print(jsonObject);
- response.getWriter().flush();//流里边的缓存刷出
- return;
- }
- String redisToken = JSON.parseObject(message).getString("token");
- if (!token.equals(redisToken)) {
- Result result = new Result(CodeEnum.TOKEN_EXPIRED);
- String jsonString = JSONObject.toJSONString(result);
- JSONObject jsonObject = JSONObject.parseObject(jsonString, JSONObject.class);
- response.getWriter().print(jsonObject);
- response.getWriter().flush();//流里边的缓存刷出
- return;
- }
+// String environment = request.getHeader("environment");
+// //token校验目前只对app生效
+// if (StringUtils.isNotBlank(environment) || !environment.equals("app")) {
+// chain.doFilter(req, resp);
+// return;
+// }
+// // 判断用户TOKEN是否存在
+// String token = request.getHeader("token");
+// if (StringUtils.isBlank(token)) {
+// Result result = new Result(CodeEnum.TOKEN_EXEIST);
+// String jsonString = JSONObject.toJSONString(result);
+// JSONObject jsonObject = JSONObject.parseObject(jsonString, JSONObject.class);
+// response.getWriter().print(jsonObject);
+// response.getWriter().flush();//流里边的缓存刷出
+// return;
+// }
+// //获取当前登录人的用户id
+// String loginName = TokenUtil.parseParamFromToken(token, "userId").toString();
+// //获取redis中的token
+// String message = redisUtil.getMessage(RedisCst.ONLINE_APP_USER.concat(loginName));
+// if (StringUtils.isBlank(message)) {
+// Result result = new Result(CodeEnum.TOKEN_EXPIRED);
+// String jsonString = JSONObject.toJSONString(result);
+// JSONObject jsonObject = JSONObject.parseObject(jsonString, JSONObject.class);
+// response.getWriter().print(jsonObject);
+// response.getWriter().flush();//流里边的缓存刷出
+// return;
+// }
+// String redisToken = JSON.parseObject(message).getString("token");
+// if (!token.equals(redisToken)) {
+// Result result = new Result(CodeEnum.TOKEN_EXPIRED);
+// String jsonString = JSONObject.toJSONString(result);
+// JSONObject jsonObject = JSONObject.parseObject(jsonString, JSONObject.class);
+// response.getWriter().print(jsonObject);
+// response.getWriter().flush();//流里边的缓存刷出
+// return;
+// }
chain.doFilter(req, resp);
}
diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/config/AppApiMethodAspect.java b/src/main/java/com/chaozhanggui/system/cashierservice/config/AppApiMethodAspect.java
index 5a08f2f..32afb42 100644
--- a/src/main/java/com/chaozhanggui/system/cashierservice/config/AppApiMethodAspect.java
+++ b/src/main/java/com/chaozhanggui/system/cashierservice/config/AppApiMethodAspect.java
@@ -1,61 +1,61 @@
-package com.chaozhanggui.system.cashierservice.config;
-
-import com.chaozhanggui.system.cashierservice.redis.RedisCst;
-import com.chaozhanggui.system.cashierservice.redis.RedisUtil;
-import com.chaozhanggui.system.cashierservice.sign.CodeEnum;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.lang3.StringUtils;
-import org.aspectj.lang.ProceedingJoinPoint;
-import org.aspectj.lang.annotation.Around;
-import org.aspectj.lang.annotation.Aspect;
-import org.aspectj.lang.annotation.Pointcut;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-import com.chaozhanggui.system.cashierservice.sign.Result;
-import org.springframework.web.context.request.RequestContextHolder;
-import org.springframework.web.context.request.ServletRequestAttributes;
-
-import javax.servlet.http.HttpServletRequest;
-import java.util.Objects;
-
-/**
- * 方法调用统一切面处理
- */
-@Aspect
-@Component
-@Slf4j
-public class AppApiMethodAspect {
-
- @Autowired
- RedisUtil redisUtil;
-
- @Pointcut("execution(public * (" +
- "com.chaozhanggui.system.cashierservice.controller.* " +
- ").*(..))")
- public void pkg() {
- }
-
- @Around("pkg()")
- public Object around(ProceedingJoinPoint pjp) throws Throwable {
- HttpServletRequest request = ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest();
- HttpServletRequest req = request;
- //version:版本号
- //type: ios; android;
- //environment:app;wx
- String environment = req.getHeader("environment");
- if (StringUtils.isNotBlank(environment) && environment.equals("app")) {
- String type = req.getHeader("type");
- String version = req.getHeader("version");
- //LDBL_APP_VERSION:ios:version 存在即需要强制更新
- String message = redisUtil.getMessage(RedisCst.LDBL_APP_VERSION + type + ":" + version);
- if (StringUtils.isNotBlank(message)) {
- return Result.success(CodeEnum.UPGRADE_REQUIRED, message);
- }
- }
-
- // 执行被拦截的方法
- Object result = pjp.proceed();
- return result;
-
- }
-}
+//package com.chaozhanggui.system.cashierservice.config;
+//
+//import com.chaozhanggui.system.cashierservice.redis.RedisCst;
+//import com.chaozhanggui.system.cashierservice.redis.RedisUtil;
+//import com.chaozhanggui.system.cashierservice.sign.CodeEnum;
+//import lombok.extern.slf4j.Slf4j;
+//import org.apache.commons.lang3.StringUtils;
+//import org.aspectj.lang.ProceedingJoinPoint;
+//import org.aspectj.lang.annotation.Around;
+//import org.aspectj.lang.annotation.Aspect;
+//import org.aspectj.lang.annotation.Pointcut;
+//import org.springframework.beans.factory.annotation.Autowired;
+//import org.springframework.stereotype.Component;
+//import com.chaozhanggui.system.cashierservice.sign.Result;
+//import org.springframework.web.context.request.RequestContextHolder;
+//import org.springframework.web.context.request.ServletRequestAttributes;
+//
+//import javax.servlet.http.HttpServletRequest;
+//import java.util.Objects;
+//
+///**
+// * 方法调用统一切面处理
+// */
+//@Aspect
+//@Component
+//@Slf4j
+//public class AppApiMethodAspect {
+//
+// @Autowired
+// RedisUtil redisUtil;
+//
+// @Pointcut("execution(public * (" +
+// "com.chaozhanggui.system.cashierservice.controller.* " +
+// ").*(..))")
+// public void pkg() {
+// }
+//
+// @Around("pkg()")
+// public Object around(ProceedingJoinPoint pjp) throws Throwable {
+// HttpServletRequest request = ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest();
+// HttpServletRequest req = request;
+// //version:版本号
+// //type: ios; android;
+// //environment:app;wx
+//// String environment = req.getHeader("environment");
+//// if (StringUtils.isNotBlank(environment) && environment.equals("app")) {
+//// String type = req.getHeader("type");
+//// String version = req.getHeader("version");
+//// //LDBL_APP_VERSION:ios:version 存在即需要强制更新
+//// String message = redisUtil.getMessage(RedisCst.LDBL_APP_VERSION + type + ":" + version);
+//// if (StringUtils.isNotBlank(message)) {
+//// return Result.success(CodeEnum.UPGRADE_REQUIRED, message);
+//// }
+//// }
+//
+// // 执行被拦截的方法
+// Object result = pjp.proceed();
+// return result;
+//
+// }
+//}
From 74f2f9e789c44699bd4f86643bf555d90ecce13b Mon Sep 17 00:00:00 2001
From: wangw <1594593906@qq.com>
Date: Mon, 8 Apr 2024 09:13:31 +0800
Subject: [PATCH 10/10] =?UTF-8?q?=E7=89=88=E6=9C=AC=E6=8E=A7=E5=88=B6=20to?=
=?UTF-8?q?ken=E6=A0=A1=E9=AA=8C?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../cashierservice/auth/LoginFilter.java | 78 ++++++++++---------
.../config/AppApiMethodAspect.java | 61 ---------------
.../interceptor/SignInterceptor.java | 54 +++++++++----
.../system/cashierservice/sign/CodeEnum.java | 2 +-
4 files changed, 78 insertions(+), 117 deletions(-)
delete mode 100644 src/main/java/com/chaozhanggui/system/cashierservice/config/AppApiMethodAspect.java
diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/auth/LoginFilter.java b/src/main/java/com/chaozhanggui/system/cashierservice/auth/LoginFilter.java
index 083bda5..d030a65 100644
--- a/src/main/java/com/chaozhanggui/system/cashierservice/auth/LoginFilter.java
+++ b/src/main/java/com/chaozhanggui/system/cashierservice/auth/LoginFilter.java
@@ -37,7 +37,7 @@ public class LoginFilter implements Filter {
"css/**",
"js/**",
"cashierService/phoneValidateCode",//验证码
- "cashierService/location/**",//
+ "cashierService/location/**",//高德 获取行政区域
"cashierService/home/homePageUp",//首页上半
"cashierService/home",//首页
"cashierService/login/**"//登录部分接口不校验
@@ -67,43 +67,45 @@ public class LoginFilter implements Filter {
chain.doFilter(req, resp);
return;
}
-// String environment = request.getHeader("environment");
-// //token校验目前只对app生效
-// if (StringUtils.isNotBlank(environment) || !environment.equals("app")) {
-// chain.doFilter(req, resp);
-// return;
-// }
-// // 判断用户TOKEN是否存在
-// String token = request.getHeader("token");
-// if (StringUtils.isBlank(token)) {
-// Result result = new Result(CodeEnum.TOKEN_EXEIST);
-// String jsonString = JSONObject.toJSONString(result);
-// JSONObject jsonObject = JSONObject.parseObject(jsonString, JSONObject.class);
-// response.getWriter().print(jsonObject);
-// response.getWriter().flush();//流里边的缓存刷出
-// return;
-// }
-// //获取当前登录人的用户id
-// String loginName = TokenUtil.parseParamFromToken(token, "userId").toString();
-// //获取redis中的token
-// String message = redisUtil.getMessage(RedisCst.ONLINE_APP_USER.concat(loginName));
-// if (StringUtils.isBlank(message)) {
-// Result result = new Result(CodeEnum.TOKEN_EXPIRED);
-// String jsonString = JSONObject.toJSONString(result);
-// JSONObject jsonObject = JSONObject.parseObject(jsonString, JSONObject.class);
-// response.getWriter().print(jsonObject);
-// response.getWriter().flush();//流里边的缓存刷出
-// return;
-// }
-// String redisToken = JSON.parseObject(message).getString("token");
-// if (!token.equals(redisToken)) {
-// Result result = new Result(CodeEnum.TOKEN_EXPIRED);
-// String jsonString = JSONObject.toJSONString(result);
-// JSONObject jsonObject = JSONObject.parseObject(jsonString, JSONObject.class);
-// response.getWriter().print(jsonObject);
-// response.getWriter().flush();//流里边的缓存刷出
-// return;
-// }
+ //environment 环境标识 wx app 后续environment不可为空
+ String environment = request.getHeader("environment");
+ //token校验目前只对app生效
+ if (StringUtils.isBlank(environment) || !environment.equals("app")) {
+ chain.doFilter(req, resp);
+ return;
+ }
+
+ // 判断用户TOKEN是否存在
+ String token = request.getHeader("token");
+ if (StringUtils.isBlank(token)) {
+ Result result = new Result(CodeEnum.TOKEN_EXEIST);
+ String jsonString = JSONObject.toJSONString(result);
+ JSONObject jsonObject = JSONObject.parseObject(jsonString, JSONObject.class);
+ response.getWriter().print(jsonObject);
+ response.getWriter().flush();//流里边的缓存刷出
+ return;
+ }
+ //获取当前登录人的用户id
+ String loginName = TokenUtil.parseParamFromToken(token, "userId").toString();
+ //获取redis中的token
+ String message = redisUtil.getMessage(RedisCst.ONLINE_APP_USER.concat(loginName));
+ if (StringUtils.isBlank(message)) {
+ Result result = new Result(CodeEnum.TOKEN_EXPIRED);
+ String jsonString = JSONObject.toJSONString(result);
+ JSONObject jsonObject = JSONObject.parseObject(jsonString, JSONObject.class);
+ response.getWriter().print(jsonObject);
+ response.getWriter().flush();//流里边的缓存刷出
+ return;
+ }
+ String redisToken = JSON.parseObject(message).getString("token");
+ if (!token.equals(redisToken)) {
+ Result result = new Result(CodeEnum.TOKEN_EXPIRED);
+ String jsonString = JSONObject.toJSONString(result);
+ JSONObject jsonObject = JSONObject.parseObject(jsonString, JSONObject.class);
+ response.getWriter().print(jsonObject);
+ response.getWriter().flush();//流里边的缓存刷出
+ return;
+ }
chain.doFilter(req, resp);
}
diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/config/AppApiMethodAspect.java b/src/main/java/com/chaozhanggui/system/cashierservice/config/AppApiMethodAspect.java
deleted file mode 100644
index 32afb42..0000000
--- a/src/main/java/com/chaozhanggui/system/cashierservice/config/AppApiMethodAspect.java
+++ /dev/null
@@ -1,61 +0,0 @@
-//package com.chaozhanggui.system.cashierservice.config;
-//
-//import com.chaozhanggui.system.cashierservice.redis.RedisCst;
-//import com.chaozhanggui.system.cashierservice.redis.RedisUtil;
-//import com.chaozhanggui.system.cashierservice.sign.CodeEnum;
-//import lombok.extern.slf4j.Slf4j;
-//import org.apache.commons.lang3.StringUtils;
-//import org.aspectj.lang.ProceedingJoinPoint;
-//import org.aspectj.lang.annotation.Around;
-//import org.aspectj.lang.annotation.Aspect;
-//import org.aspectj.lang.annotation.Pointcut;
-//import org.springframework.beans.factory.annotation.Autowired;
-//import org.springframework.stereotype.Component;
-//import com.chaozhanggui.system.cashierservice.sign.Result;
-//import org.springframework.web.context.request.RequestContextHolder;
-//import org.springframework.web.context.request.ServletRequestAttributes;
-//
-//import javax.servlet.http.HttpServletRequest;
-//import java.util.Objects;
-//
-///**
-// * 方法调用统一切面处理
-// */
-//@Aspect
-//@Component
-//@Slf4j
-//public class AppApiMethodAspect {
-//
-// @Autowired
-// RedisUtil redisUtil;
-//
-// @Pointcut("execution(public * (" +
-// "com.chaozhanggui.system.cashierservice.controller.* " +
-// ").*(..))")
-// public void pkg() {
-// }
-//
-// @Around("pkg()")
-// public Object around(ProceedingJoinPoint pjp) throws Throwable {
-// HttpServletRequest request = ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest();
-// HttpServletRequest req = request;
-// //version:版本号
-// //type: ios; android;
-// //environment:app;wx
-//// String environment = req.getHeader("environment");
-//// if (StringUtils.isNotBlank(environment) && environment.equals("app")) {
-//// String type = req.getHeader("type");
-//// String version = req.getHeader("version");
-//// //LDBL_APP_VERSION:ios:version 存在即需要强制更新
-//// String message = redisUtil.getMessage(RedisCst.LDBL_APP_VERSION + type + ":" + version);
-//// if (StringUtils.isNotBlank(message)) {
-//// return Result.success(CodeEnum.UPGRADE_REQUIRED, message);
-//// }
-//// }
-//
-// // 执行被拦截的方法
-// Object result = pjp.proceed();
-// return result;
-//
-// }
-//}
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 b00edbf..783eb80 100644
--- a/src/main/java/com/chaozhanggui/system/cashierservice/interceptor/SignInterceptor.java
+++ b/src/main/java/com/chaozhanggui/system/cashierservice/interceptor/SignInterceptor.java
@@ -2,10 +2,14 @@ package com.chaozhanggui.system.cashierservice.interceptor;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.json.JSONUtil;
+import com.chaozhanggui.system.cashierservice.redis.RedisCst;
import com.chaozhanggui.system.cashierservice.redis.RedisUtil;
+import com.chaozhanggui.system.cashierservice.sign.CodeEnum;
+import com.chaozhanggui.system.cashierservice.sign.Result;
import com.chaozhanggui.system.cashierservice.sign.SginAnot;
import com.chaozhanggui.system.cashierservice.sign.SignEnum;
import com.chaozhanggui.system.cashierservice.util.*;
+import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -42,16 +46,31 @@ public class SignInterceptor implements HandlerInterceptor {
String requestURI = request.getRequestURI();
- String token=request.getHeader("token");
+ String token = request.getHeader("token");
- String type=request.getHeader("type");
+// String type=request.getHeader("type");
-
- if(ignoreUrl.contains(requestURI)){
+ if (ignoreUrl.contains(requestURI)) {
return true;
}
+// version:版本号
+// type: ios; android;
+// environment:app;wx
+ String environment = request.getHeader("environment");
+ if (StringUtils.isNotBlank(environment) && environment.equals("app")) {
+ String type = request.getHeader("type");
+ String version = request.getHeader("version");
+ //LDBL_APP_VERSION:ios:version 存在即需要强制更新
+ String message = redisUtil.getMessage(RedisCst.LDBL_APP_VERSION + type + ":" + version);
+ // 返回false表示拦截器的处理已完成,请求不再继续向下执行
+ if (StringUtils.isNotBlank(message)) {
+ response.getWriter().write(JSONUtil.toJsonStr(Result.success(CodeEnum.UPGRADE_REQUIRED, message.replaceAll("\"", ""))));
+ response.getWriter().flush();
+ return false;
+ }
+ }
String ip = IpUtil.getIpAddr(request);
@@ -63,9 +82,9 @@ public class SignInterceptor implements HandlerInterceptor {
}
- if("C".equals(type)){
- String openId=request.getHeader("openId");
- }
+// if("C".equals(type)){
+// String openId=request.getHeader("openId");
+// }
return true;
@@ -79,27 +98,27 @@ public class SignInterceptor implements HandlerInterceptor {
} else if (enumm == SignEnum.SHA1) {
return SHA1Util.check(map);
} else if (enumm == SignEnum.RSA) {
- Map data=(HashMap)map;
- String sign=data.get("sign").toString();
- return RSAUtils.verify(JSONUtil.toJsonStr(data.get("data")),RSAUtils.getPublicKey(publicKey),sign);
+ Map data = (HashMap) map;
+ String sign = data.get("sign").toString();
+ return RSAUtils.verify(JSONUtil.toJsonStr(data.get("data")), RSAUtils.getPublicKey(publicKey), sign);
}
return false;
}
- public Map getMap(Object obj){
- Map map=new HashMap();
- if(obj==null){
+ public Map getMap(Object obj) {
+ Map map = new HashMap();
+ if (obj == null) {
return null;
}
- if(obj instanceof Map){
- map=(Map) obj;
- }else{
+ if (obj instanceof Map) {
+ map = (Map) obj;
+ } else {
map = BeanUtil.transBean2Map(obj);
}
- if(map.containsKey("sign")){
+ if (map.containsKey("sign")) {
map.remove("sign");
}
return map;
@@ -108,6 +127,7 @@ public class SignInterceptor implements HandlerInterceptor {
/**
* 把request转为map
+ *
* @param request
* @return
*/
diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/sign/CodeEnum.java b/src/main/java/com/chaozhanggui/system/cashierservice/sign/CodeEnum.java
index 0eda53e..ba24a7b 100644
--- a/src/main/java/com/chaozhanggui/system/cashierservice/sign/CodeEnum.java
+++ b/src/main/java/com/chaozhanggui/system/cashierservice/sign/CodeEnum.java
@@ -5,7 +5,7 @@ public enum CodeEnum {
//系统编码
SYS_EXCEPTION("999",false,"系统异常","fail"),
SUCCESS("0",false,"成功","success"),
- UPGRADE_REQUIRED("426",true,"成功","success"),
+ UPGRADE_REQUIRED("426",false,"成功","success"),
ENCRYPT("0",true,"成功","success"),
FAIL("1",false,"失败","fail"),
TOKEN_EXEIST("-2",false,"token不能为空","fail"),