替换登陆用户信息;添加小程序商城:1.获取商品;2.获取订单;3.评价;4.退款;5.添加校区查询;6:添加品牌拓展;
This commit is contained in:
parent
105b9453bf
commit
51bf8bab32
@ -193,4 +193,9 @@ public interface Constants {
|
||||
* 用户类型
|
||||
*/
|
||||
String USER_TYPE = "UserType";
|
||||
|
||||
/**
|
||||
* 登陆查询用户字段
|
||||
*/
|
||||
String USERNAME = "UserName";
|
||||
}
|
||||
|
||||
@ -84,8 +84,9 @@ public class LoginUser implements UserDetails {
|
||||
public LoginUser() {
|
||||
}
|
||||
|
||||
public LoginUser(SysUser user, Set<String> permissions) {
|
||||
public LoginUser(SysUser user,String identification, Set<String> permissions) {
|
||||
this.user = user;
|
||||
this.identification = identification;
|
||||
this.permissions = permissions;
|
||||
}
|
||||
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package com.cpop.core.base.entity.loginInfo;
|
||||
|
||||
import com.cpop.core.base.enums.SourceType;
|
||||
import com.cpop.core.base.table.SysUser;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
@ -39,4 +40,9 @@ public class MallStaffLoginInfo extends SysUser {
|
||||
* 品牌id
|
||||
*/
|
||||
private String brandId;
|
||||
|
||||
/**
|
||||
* 用户来源
|
||||
*/
|
||||
private SourceType sourceType;
|
||||
}
|
||||
|
||||
@ -1,6 +1,8 @@
|
||||
package com.cpop.core.base.entity.loginInfo;
|
||||
|
||||
import com.cpop.core.base.enums.SourceType;
|
||||
import com.cpop.core.base.table.SysUser;
|
||||
import com.cpop.core.gateway.miniProgram.MiniUserLoginInfoBuild;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.experimental.Accessors;
|
||||
@ -49,4 +51,9 @@ public class MiniUserLoginInfo extends SysUser {
|
||||
* 头像
|
||||
*/
|
||||
private String avatar;
|
||||
|
||||
/**
|
||||
* 小程序用户来源
|
||||
*/
|
||||
private SourceType sourceType;
|
||||
}
|
||||
|
||||
@ -0,0 +1,27 @@
|
||||
package com.cpop.core.base.enums;
|
||||
|
||||
|
||||
import lombok.Getter;
|
||||
|
||||
@Getter
|
||||
public enum SourceType {
|
||||
|
||||
/**
|
||||
* 通用
|
||||
*/
|
||||
COMMON("Common"),
|
||||
/**
|
||||
* 果酱
|
||||
*/
|
||||
JAMBOX("Jambox");
|
||||
|
||||
private String name;
|
||||
|
||||
SourceType(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
}
|
||||
@ -18,7 +18,7 @@ public enum UserType {
|
||||
*/
|
||||
MINI_USER(1, "mini:loginUser:"),
|
||||
/**
|
||||
* 商城用户
|
||||
* 商城系统员工
|
||||
*/
|
||||
MALL_USER(2, "mall:loginUser:");
|
||||
|
||||
|
||||
@ -6,6 +6,7 @@ import com.cpop.common.utils.StringUtils;
|
||||
import com.cpop.common.utils.ip.IpUtils;
|
||||
import com.cpop.core.base.R;
|
||||
import com.cpop.core.base.entity.LoginUser;
|
||||
import com.cpop.core.base.entity.loginInfo.MiniUserLoginInfo;
|
||||
import com.cpop.core.base.enums.UserType;
|
||||
import com.cpop.core.gateway.miniProgram.MiniProgramAuthenticationToken;
|
||||
import com.cpop.core.gateway.sys.SysAuthenticationToken;
|
||||
@ -17,6 +18,8 @@ import io.jsonwebtoken.Claims;
|
||||
import io.jsonwebtoken.Jws;
|
||||
import io.jsonwebtoken.JwtException;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.lang.NonNull;
|
||||
import org.springframework.lang.NonNullApi;
|
||||
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
|
||||
import org.springframework.security.core.context.SecurityContextHolder;
|
||||
import org.springframework.stereotype.Component;
|
||||
@ -51,7 +54,7 @@ public class JwtAuthenticationFilter extends OncePerRequestFilter {
|
||||
private RedisService redisService;
|
||||
|
||||
@Override
|
||||
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException, ServletException {
|
||||
protected void doFilterInternal(HttpServletRequest request, @NonNull HttpServletResponse response,@NonNull FilterChain chain) throws IOException, ServletException {
|
||||
String jwt = request.getHeader(jwtUtils.getHeader());
|
||||
// 这里如果没有jwt,继续往后走,因为后面还有鉴权管理器等去判断是否拥有身份凭证,所以是可以放行的
|
||||
// 没有jwt相当于匿名访问,若有一些接口是需要权限的,则不能访问这些接口
|
||||
@ -73,15 +76,17 @@ public class JwtAuthenticationFilter extends OncePerRequestFilter {
|
||||
returnJwtException(response,"token 已过期");
|
||||
return;
|
||||
}
|
||||
String username = claim.getSubject();
|
||||
//当前用户类型下唯一
|
||||
String identification = claim.getSubject();
|
||||
String username = jws.getHeader().get(Constants.USERNAME).toString();
|
||||
UserType userType = UserType.valueOf(jws.getHeader().get(Constants.USER_TYPE).toString());
|
||||
//从缓存中获取
|
||||
JSONObject jsonObject = redisService.getCacheObject(userType.getKey() + username);
|
||||
JSONObject jsonObject = redisService.getCacheObject(userType.getKey() + identification);
|
||||
LoginUser loginUser;
|
||||
if (null == jsonObject){
|
||||
loginUser = multipleLoadUser(userType, username);
|
||||
//存入缓存
|
||||
redisService.setCacheObject(userType.getKey() + username, loginUser);
|
||||
redisService.setCacheObject(userType.getKey() + loginUser.getIdentification(), loginUser);
|
||||
} else {
|
||||
loginUser = jsonObject.toJavaObject(LoginUser.class);
|
||||
}
|
||||
@ -123,6 +128,8 @@ public class JwtAuthenticationFilter extends OncePerRequestFilter {
|
||||
loginUser = (LoginUser) oamStaffDetailsService.loadUserByUsername(username);
|
||||
break;
|
||||
case MINI_USER:
|
||||
// 获取用户的权限等信息
|
||||
loginUser = coreService.loadUserByPhone(username, userType, null);
|
||||
break;
|
||||
case MALL_USER:
|
||||
loginUser = coreService.loadUserByUsername(username, userType);
|
||||
@ -146,12 +153,12 @@ public class JwtAuthenticationFilter extends OncePerRequestFilter {
|
||||
break;
|
||||
case MINI_USER:
|
||||
// MiniProgramAuthenticationToken,实现自动登录
|
||||
MiniProgramAuthenticationToken miniProgramAuthenticationToken = new MiniProgramAuthenticationToken(username, loginUser);
|
||||
MiniProgramAuthenticationToken miniProgramAuthenticationToken = new MiniProgramAuthenticationToken(loginUser.getIdentification(), loginUser, null);
|
||||
SecurityContextHolder.getContext().setAuthentication(miniProgramAuthenticationToken);
|
||||
break;
|
||||
case MALL_USER:
|
||||
//构建通用系统用户登陆
|
||||
SysAuthenticationToken sysAuthenticationToken = new SysAuthenticationToken(username, loginUser,null);
|
||||
SysAuthenticationToken sysAuthenticationToken = new SysAuthenticationToken(loginUser.getIdentification(), loginUser, null);
|
||||
SecurityContextHolder.getContext().setAuthentication(sysAuthenticationToken);
|
||||
default:
|
||||
}
|
||||
|
||||
@ -23,7 +23,6 @@ import java.util.Map;
|
||||
*/
|
||||
public class MiniProgramAuthenticationFilter extends AbstractAuthenticationProcessingFilter {
|
||||
|
||||
|
||||
public MiniProgramAuthenticationFilter() {
|
||||
super(new AntPathRequestMatcher("/miniLogin", "POST"));
|
||||
}
|
||||
@ -49,6 +48,7 @@ public class MiniProgramAuthenticationFilter extends AbstractAuthenticationProce
|
||||
String brandId = (String) authenticationBean.get("brandId");
|
||||
String nickName = (String) authenticationBean.get("nickName");
|
||||
String avatar = (String) authenticationBean.get("avatar");
|
||||
String sourceType = (String) authenticationBean.get("sourceType");
|
||||
UserType userType = UserType.valueOf(authenticationBean.get("userType").toString());
|
||||
//传递信息
|
||||
HashMap<String, Object> credentials = new HashMap<>(2);
|
||||
@ -58,6 +58,7 @@ public class MiniProgramAuthenticationFilter extends AbstractAuthenticationProce
|
||||
credentials.put("brandId", brandId);
|
||||
credentials.put("nickName", nickName);
|
||||
credentials.put("avatar", avatar);
|
||||
credentials.put("sourceType", sourceType);
|
||||
principal = principal.trim();
|
||||
MiniProgramAuthenticationToken authRequest = new MiniProgramAuthenticationToken(principal, credentials);
|
||||
this.setDetails(request, authRequest);
|
||||
|
||||
@ -5,12 +5,15 @@ import com.cpop.common.utils.bean.BeanUtils;
|
||||
import com.cpop.core.abstracts.AbstractLoginInfoBuild;
|
||||
import com.cpop.core.base.entity.LoginUser;
|
||||
import com.cpop.core.base.entity.loginInfo.MiniUserLoginInfo;
|
||||
import com.cpop.core.base.enums.SourceType;
|
||||
import com.cpop.core.base.exception.CpopAuthenticationException;
|
||||
import com.cpop.core.base.exception.ServiceException;
|
||||
import com.cpop.core.base.table.SysUser;
|
||||
import com.mybatisflex.annotation.KeyType;
|
||||
import com.mybatisflex.core.row.DbChain;
|
||||
import com.mybatisflex.core.row.Row;
|
||||
import com.mybatisflex.core.row.RowKey;
|
||||
import lombok.Getter;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.Map;
|
||||
@ -35,27 +38,87 @@ public class MiniUserLoginInfoBuild extends AbstractLoginInfoBuild {
|
||||
private LoginUser getMiniUserInfo(SysUser sysUser, Map<String, Object> credentials) {
|
||||
MiniUserLoginInfo loginInfo = BeanUtils.mapToClass(sysUser, MiniUserLoginInfo.class);
|
||||
loginInfo.setUserId(sysUser.getId());
|
||||
//有用户信息
|
||||
if (credentials == null){
|
||||
//构建用户信息
|
||||
Row row = DbChain.table("cp_mini_user")
|
||||
.select("cmu.id","cmu.open_id","cmu.app_id","cmu.user_id","cmu.brand_id","cmu.nick_name","cmu.avatar","cmu.source_type")
|
||||
.from("cp_mini_user").as("cmu")
|
||||
.where("cmu.user_id = ?", loginInfo.getUserId())
|
||||
.and("cmu.is_delete = 0")
|
||||
.one();
|
||||
loginInfo.setOpenId(row.getString("openId"))
|
||||
.setAppId(row.getString("appId"))
|
||||
.setUserId(row.getString("userId"))
|
||||
.setBrandId(row.getString("brandId"))
|
||||
.setNickName(row.getString("nickName"))
|
||||
.setAvatar(row.getString("avatar"))
|
||||
.setId(row.getString("id"))
|
||||
.setSourceType(SourceType.valueOf(row.getString("sourceType")));
|
||||
} else {
|
||||
SourceType sourceType;
|
||||
//校验用户来源
|
||||
if (credentials.get("sourceType") == null) {
|
||||
sourceType = SourceType.COMMON;
|
||||
} else if (SourceType.JAMBOX == SourceType.valueOf(credentials.get("sourceType").toString())){
|
||||
//来源自果酱
|
||||
sourceType = SourceType.JAMBOX;
|
||||
//查询果酱用户
|
||||
changeJamboxUser(loginInfo, credentials ,sourceType);
|
||||
} else {
|
||||
//先用通用
|
||||
sourceType = SourceType.COMMON;
|
||||
}
|
||||
}
|
||||
return new LoginUser(loginInfo, loginInfo.getId(), null);
|
||||
}
|
||||
|
||||
/**
|
||||
* @descriptions 获取果酱小程序用户信息
|
||||
* @author DB
|
||||
* @date 2023/10/25 14:53
|
||||
* @param loginInfo 用户信息
|
||||
* @param credentials 请求参数
|
||||
* @param sourceType 来源类型
|
||||
* @return: void
|
||||
*/
|
||||
private void changeJamboxUser(MiniUserLoginInfo loginInfo, Map<String, Object> credentials, SourceType sourceType) {
|
||||
//构建用户信息
|
||||
Row row = DbChain.table("cp_mini_user")
|
||||
.select("id","open_id","app_id","user_id","brand_id","nick_name","avatar")
|
||||
.from("cp_mini_user")
|
||||
.where("user_id = ?", loginInfo.getUserId())
|
||||
.and("brand_id = ?",credentials.get("brandId"))
|
||||
.and("app_id = ?",credentials.get("appId"))
|
||||
.and("open_id = ?",credentials.get("openId"))
|
||||
.and("is_delete = 0")
|
||||
.select("cmu.id","cmu.open_id","cmu.app_id","cmu.user_id","cmu.brand_id","cmu.nick_name","cmu.avatar","cmu.source_type")
|
||||
.from("cp_mini_user").as("cmu")
|
||||
.leftJoin("cp_j_brand_extend").as("cjbe").on("cjbe.brand_id = cmu.brand_id")
|
||||
.where("cmu.user_id = ?", loginInfo.getUserId())
|
||||
.and("cjbe.brand_cloud_id = ?",credentials.get("brandId"))
|
||||
.and("cmu.app_id = ?",credentials.get("appId"))
|
||||
.and("cmu.open_id = ?",credentials.get("openId"))
|
||||
//用户来源
|
||||
.and("cmu.source_type = ?",sourceType)
|
||||
.and("cmu.is_delete = 0")
|
||||
.one();
|
||||
if (row == null) {
|
||||
//获取品牌表
|
||||
Row brand = DbChain.table("cp_sys_brand")
|
||||
.select("csb.id")
|
||||
.from("cp_sys_brand").as("csb")
|
||||
.leftJoin("cp_j_brand_extend").as("cjbe").on("cjbe.brand_id = csb.id")
|
||||
.and("cjbe.brand_cloud_id = ?", credentials.get("brandId"))
|
||||
.one();
|
||||
if (brand == null) {
|
||||
throw new ServiceException("用户登陆失败,果酱品牌暂未录入系统");
|
||||
}
|
||||
//保存小程序用户信息
|
||||
LocalDateTime now = LocalDateTime.now();
|
||||
RowKey snowFlakeId = RowKey.SNOW_FLAKE_ID;
|
||||
DbChain.table("cp_mini_user")
|
||||
.setId(RowKey.SNOW_FLAKE_ID)
|
||||
.setId(snowFlakeId)
|
||||
.set("user_id", loginInfo.getUserId())
|
||||
.set("open_id", credentials.get("openId"))
|
||||
.set("app_id", credentials.get("appId"))
|
||||
.set("brand_id", credentials.get("brandId"))
|
||||
.set("brand_id", brand.getString("id"))
|
||||
.set("nick_name", credentials.get("nickName"))
|
||||
.set("avatar", credentials.get("avatar"))
|
||||
.set("source_type", sourceType)
|
||||
.set("create_time", now)
|
||||
.set("update_time", now)
|
||||
.set("create_user_id", 1)
|
||||
@ -64,17 +127,21 @@ public class MiniUserLoginInfoBuild extends AbstractLoginInfoBuild {
|
||||
loginInfo.setOpenId((String) credentials.get("openId"))
|
||||
.setAppId((String) credentials.get("appId"))
|
||||
.setUserId(loginInfo.getUserId())
|
||||
.setBrandId((String) credentials.get("brandId"))
|
||||
.setBrandId(brand.getString("id"))
|
||||
.setNickName((String) credentials.get("nickName"))
|
||||
.setAvatar((String) credentials.get("avatar"));
|
||||
.setAvatar((String) credentials.get("avatar"))
|
||||
.setId(snowFlakeId.getValue())
|
||||
.setSourceType(sourceType);
|
||||
} else {
|
||||
loginInfo.setOpenId(row.getString("openId"))
|
||||
.setAppId(row.getString("appId"))
|
||||
.setUserId(row.getString("userId"))
|
||||
.setBrandId(row.getString("brandId"))
|
||||
.setNickName(row.getString("nickName"))
|
||||
.setAvatar(row.getString("avatar"));
|
||||
.setAvatar(row.getString("avatar"))
|
||||
.setId(row.getString("id"))
|
||||
.setSourceType(sourceType);
|
||||
}
|
||||
return new LoginUser(loginInfo, null);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -7,6 +7,7 @@ import com.cpop.core.base.entity.LoginUser;
|
||||
import com.cpop.core.base.entity.Permission;
|
||||
import com.cpop.core.base.entity.loginInfo.MallStaffLoginInfo;
|
||||
import com.cpop.core.base.entity.loginInfo.OamStaffLoginInfo;
|
||||
import com.cpop.core.base.enums.SourceType;
|
||||
import com.cpop.core.base.exception.CpopAuthenticationException;
|
||||
import com.cpop.core.base.table.SysUser;
|
||||
import com.mybatisflex.core.row.DbChain;
|
||||
@ -62,8 +63,9 @@ public class SysLoginInfoBuild extends AbstractLoginInfoBuild {
|
||||
staffLoginInfo.setId(row.getString("id"));
|
||||
}else {
|
||||
staffLoginInfo.setName(Constants.SUPER_ADMIN);
|
||||
staffLoginInfo.setId(Constants.SUPER_ADMIN);
|
||||
}
|
||||
return new LoginUser(staffLoginInfo, getPermissionSet(sysUser.getUserName(), staffLoginInfo.getRoleId()));
|
||||
return new LoginUser(staffLoginInfo, staffLoginInfo.getId(), getPermissionSet(sysUser.getUserName(), staffLoginInfo.getRoleId()));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -80,7 +82,7 @@ public class SysLoginInfoBuild extends AbstractLoginInfoBuild {
|
||||
//构建员工
|
||||
if (!staffLoginInfo.getUserName().equals(Constants.SUPER_ADMIN)) {
|
||||
Row row = DbChain.table("cp_mall_staff")
|
||||
.select("cms.id", "cms.name", "cms.user_id")
|
||||
.select("cms.id", "cms.name", "cms.user_id","cms.source_type")
|
||||
.select("cmrb.role_id", "cmrb.brand_id")
|
||||
.from("cp_mall_staff").as("cms")
|
||||
.leftJoin("cp_mall_role_brand").as("cmrb").on("cmrb.id = cms.role_brand_id")
|
||||
@ -94,10 +96,12 @@ public class SysLoginInfoBuild extends AbstractLoginInfoBuild {
|
||||
staffLoginInfo.setName(row.getString("name"));
|
||||
staffLoginInfo.setId(row.getString("id"));
|
||||
staffLoginInfo.setBrandId(row.getString("brandId"));
|
||||
staffLoginInfo.setSourceType(SourceType.valueOf(row.getString("sourceType")));
|
||||
} else {
|
||||
staffLoginInfo.setName(Constants.SUPER_ADMIN);
|
||||
staffLoginInfo.setName(Constants.SUPER_ADMIN)
|
||||
.setSourceType(SourceType.COMMON);
|
||||
}
|
||||
return new LoginUser(staffLoginInfo, getPermissionSet(sysUser.getUserName(), staffLoginInfo.getRoleId()));
|
||||
return new LoginUser(staffLoginInfo, staffLoginInfo.getId(), getPermissionSet(sysUser.getUserName(), staffLoginInfo.getRoleId()));
|
||||
}
|
||||
|
||||
private Set<String> getPermissionSet(String username, String roleId) {
|
||||
@ -107,7 +111,9 @@ public class SysLoginInfoBuild extends AbstractLoginInfoBuild {
|
||||
permissionSet.add(Constants.ALL_PERMISSION);
|
||||
}
|
||||
else {
|
||||
//查询员工信息
|
||||
permissionSet.add(Constants.ALL_PERMISSION);
|
||||
//TODO:测试中所有新建用户都是超级管理员
|
||||
/*//查询员工信息
|
||||
List<Row> list = DbChain.table("cp_sys_menu")
|
||||
.select("pom.permission")
|
||||
.from("cp_sys_menu").as("pom")
|
||||
@ -121,7 +127,7 @@ public class SysLoginInfoBuild extends AbstractLoginInfoBuild {
|
||||
} else {
|
||||
List<Permission> permissions = RowUtil.toEntityList(list, Permission.class);
|
||||
permissionSet = permissions.stream().map(Permission::getPermission).collect(Collectors.toSet());
|
||||
}
|
||||
}*/
|
||||
}
|
||||
return permissionSet;
|
||||
}
|
||||
|
||||
@ -54,16 +54,16 @@ public class JwtLogoutSuccessHandler implements LogoutSuccessHandler {
|
||||
if (jwtUtils.isTokenExpired(claim)) {
|
||||
throw new JwtException("token 已过期");
|
||||
}
|
||||
String username = claim.getSubject();
|
||||
String identification = claim.getSubject();
|
||||
UserType userType = UserType.valueOf(jws.getHeader().get(Constants.USER_TYPE).toString());
|
||||
//从缓存中获取
|
||||
JSONObject jsonObject = redisService.getCacheObject(userType.getKey() + username);
|
||||
JSONObject jsonObject = redisService.getCacheObject(userType.getKey() + identification);
|
||||
if (null != jsonObject) {
|
||||
LoginUser loginUser = jsonObject.toJavaObject(LoginUser.class);
|
||||
SpringUtils.getBean(CoreService.class).insertOperationLog(Constants.SUCCESS, OperationLogEnum.SYSTEM_LOGOUT, loginUser, MessageUtils.message("i18n_operationLog_systemLogout"));
|
||||
}
|
||||
//清除缓存
|
||||
redisService.deleteObject(userType.getKey() + username);
|
||||
redisService.deleteObject(userType.getKey() + identification);
|
||||
httpServletResponse.setContentType("application/json;charset=UTF-8");
|
||||
ServletOutputStream outputStream = httpServletResponse.getOutputStream();
|
||||
String header = jwtUtils.getHeader();
|
||||
|
||||
@ -8,6 +8,7 @@ import com.cpop.core.base.entity.LoginSuccess;
|
||||
import com.cpop.core.base.entity.LoginUser;
|
||||
import com.cpop.core.base.entity.loginInfo.MiniUserLoginInfo;
|
||||
import com.cpop.core.base.enums.OperationLogEnum;
|
||||
import com.cpop.core.base.enums.UserType;
|
||||
import com.cpop.core.service.CoreService;
|
||||
import com.cpop.core.service.RedisService;
|
||||
import com.cpop.core.utils.JwtUtils;
|
||||
@ -52,7 +53,7 @@ public class LoginSuccessHandler implements AuthenticationSuccessHandler {
|
||||
loginUser = (LoginUser) authentication.getDetails();
|
||||
}
|
||||
// 生成JWT,并放置到请求头中
|
||||
String jwt = jwtUtils.generateToken(authentication.getName(), loginUser.getUserType());
|
||||
String jwt = jwtUtils.generateToken(loginUser.getIdentification(), loginUser.getUsername(), loginUser.getUserType());
|
||||
loginSuccessVo.setToken(jwt).setUserId(loginUser.getUserId()).setRole(loginUser.getPermissions());
|
||||
String ipAddr = IpUtils.getIpAddr(httpServletRequest);
|
||||
loginUser.setIpAddr(ipAddr);
|
||||
@ -78,16 +79,12 @@ public class LoginSuccessHandler implements AuthenticationSuccessHandler {
|
||||
coreService.updateSysUserLoginIp(loginUser.getIpAddr(), loginUser.getUsername(), loginUser.getUserType());
|
||||
//添加登录成功日志
|
||||
coreService.insertOperationLog(Constants.SUCCESS, OperationLogEnum.SYSTEM_LOGIN, loginUser, MessageUtils.message("i18n_login_success"));
|
||||
//将登录成功用户存入缓存
|
||||
redisService.setCacheObject(loginUser.getUserType().getKey() + loginUser.getUsername(), loginUser);
|
||||
break;
|
||||
case MINI_USER:
|
||||
//将登录成功用户存入缓存
|
||||
MiniUserLoginInfo user = (MiniUserLoginInfo) loginUser.getUser();
|
||||
redisService.setCacheObject(loginUser.getUserType().getKey() + user.getBrandId() + "-" + user.getAppId() + "-" + user.getOpenId(), loginUser);
|
||||
break;
|
||||
default:
|
||||
}
|
||||
|
||||
//将登录成功用户存入缓存
|
||||
redisService.setCacheObject(loginUser.getUserType().getKey() + loginUser.getIdentification(), loginUser);
|
||||
}
|
||||
}
|
||||
|
||||
@ -47,12 +47,13 @@ public class JwtUtils {
|
||||
* @param username 用户名
|
||||
* @return {@link String}
|
||||
**/
|
||||
public String generateToken(String username, UserType userType) {
|
||||
public String generateToken(String identification, String username, UserType userType) {
|
||||
Date nowDate = new Date();
|
||||
Date expireDate = new Date(nowDate.getTime() + 1000 * expire);
|
||||
return Jwts.builder()
|
||||
.setHeaderParam(Constants.USERNAME, username)
|
||||
.setHeaderParam(Constants.USER_TYPE, userType)
|
||||
.setSubject(username)
|
||||
.setSubject(identification)
|
||||
.setIssuedAt(nowDate)
|
||||
// 7天过期
|
||||
.setExpiration(expireDate)
|
||||
|
||||
@ -50,16 +50,16 @@ public class SecurityUtils {
|
||||
}
|
||||
|
||||
/**
|
||||
* @descriptions 获取登陆员工信息
|
||||
* @descriptions 获取缓存用户信息
|
||||
* @author DB
|
||||
* @date 2023/09/21 16:00
|
||||
* @return com.cpop.core.base.entity.loginInfo.OamStaffLoginInfo
|
||||
*/
|
||||
public JSONObject getLoginStaffInfo() {
|
||||
public JSONObject getLoginUserInfo() {
|
||||
//获取当前登录用户信息
|
||||
LoginUser loginUser = SecurityUtils.getInstance().getLoginUser();
|
||||
//获取缓存信息
|
||||
JSONObject jsonObject = SpringUtils.getBean(RedisService.class).getCacheObject(loginUser.getUserType().getKey() + loginUser.getUsername());
|
||||
JSONObject jsonObject = SpringUtils.getBean(RedisService.class).getCacheObject(loginUser.getUserType().getKey() + loginUser.getIdentification());
|
||||
return jsonObject.getJSONObject("user");
|
||||
}
|
||||
|
||||
|
||||
@ -4,7 +4,7 @@ cpop:
|
||||
profile: E:/Cpop/uploadPath
|
||||
jwt:
|
||||
#白名单
|
||||
whiteList: /login,/getCaptcha,/profile/**,/doc.html,/webjars/**,/favicon.ico,/v2/api-docs/**,/swagger-resources
|
||||
whiteList: /login,/miniLogin,/getCaptcha,/profile/**,/doc.html,/webjars/**,/favicon.ico,/v2/api-docs/**,/swagger-resources
|
||||
gateway:
|
||||
rsa-keypair:
|
||||
# 公钥文件
|
||||
|
||||
@ -1,21 +1,23 @@
|
||||
package com.cpop.jambox.business.entity;
|
||||
|
||||
import com.mybatisflex.annotation.Column;
|
||||
import com.mybatisflex.annotation.Id;
|
||||
import com.mybatisflex.annotation.Table;
|
||||
import com.cpop.core.base.entity.BaseEntity;
|
||||
import com.cpop.core.base.entity.BaseInsertListener;
|
||||
import com.cpop.core.base.entity.BaseUpdateListener;
|
||||
import com.mybatisflex.annotation.Column;
|
||||
import com.mybatisflex.annotation.Id;
|
||||
import com.mybatisflex.annotation.Table;
|
||||
import java.io.Serializable;
|
||||
import java.time.LocalDateTime;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.*;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 品牌表 实体类。
|
||||
* 果酱品牌拓展表 实体类。
|
||||
*
|
||||
* @author DB
|
||||
* @since 2023-09-13
|
||||
* @since 2023-10-25
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper=false)
|
||||
@ -23,8 +25,8 @@ import java.io.Serializable;
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Accessors(chain = true)
|
||||
@Table(value = "cp_j_brand", onInsert = BaseInsertListener.class, onUpdate = BaseUpdateListener.class, mapperGenerateEnable = false)
|
||||
public class Brand extends BaseEntity implements Serializable {
|
||||
@Table(value = "cp_j_brand_extend", onInsert = BaseInsertListener.class, onUpdate = BaseUpdateListener.class, mapperGenerateEnable = false)
|
||||
public class BrandExtend extends BaseEntity implements Serializable {
|
||||
|
||||
/**
|
||||
* 主键
|
||||
@ -32,31 +34,21 @@ public class Brand extends BaseEntity implements Serializable {
|
||||
@Id
|
||||
private String id;
|
||||
|
||||
/**
|
||||
* 系统品牌id
|
||||
*/
|
||||
private String brandId;
|
||||
|
||||
/**
|
||||
* 云函数id
|
||||
*/
|
||||
private String brandCloudId;
|
||||
|
||||
/**
|
||||
* 品牌名
|
||||
*/
|
||||
private String name;
|
||||
|
||||
/**
|
||||
* 背景地址
|
||||
*/
|
||||
private String backgroundUrl;
|
||||
|
||||
/**
|
||||
* 顾问名
|
||||
*/
|
||||
private String consultantName;
|
||||
|
||||
/**
|
||||
* openId
|
||||
*/
|
||||
private String openId;
|
||||
|
||||
/**
|
||||
* 是否删除(0否1是)
|
||||
*/
|
||||
@ -34,6 +34,11 @@ public class CardTemplate extends BaseEntity implements Serializable {
|
||||
@Id
|
||||
private String id;
|
||||
|
||||
/**
|
||||
* 旧模板id
|
||||
*/
|
||||
private String oldTemplateId;
|
||||
|
||||
/**
|
||||
* 云品牌id
|
||||
*/
|
||||
|
||||
@ -0,0 +1,14 @@
|
||||
package com.cpop.jambox.business.mapper;
|
||||
|
||||
import com.mybatisflex.core.BaseMapper;
|
||||
import com.cpop.jambox.business.entity.BrandExtend;
|
||||
|
||||
/**
|
||||
* 果酱品牌拓展表 映射层。
|
||||
*
|
||||
* @author DB
|
||||
* @since 2023-10-25
|
||||
*/
|
||||
public interface BrandExtendMapper extends BaseMapper<BrandExtend> {
|
||||
|
||||
}
|
||||
@ -1,14 +0,0 @@
|
||||
package com.cpop.jambox.business.mapper;
|
||||
|
||||
import com.mybatisflex.core.BaseMapper;
|
||||
import com.cpop.jambox.business.entity.Brand;
|
||||
|
||||
/**
|
||||
* 品牌表 映射层。
|
||||
*
|
||||
* @author DB
|
||||
* @since 2023-09-13
|
||||
*/
|
||||
public interface BrandMapper extends BaseMapper<Brand> {
|
||||
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
package com.cpop.jambox.business.service;
|
||||
|
||||
import com.mybatisflex.core.service.IService;
|
||||
import com.cpop.jambox.business.entity.BrandExtend;
|
||||
|
||||
/**
|
||||
* 果酱品牌拓展表 服务层。
|
||||
*
|
||||
* @author DB
|
||||
* @since 2023-10-25
|
||||
*/
|
||||
public interface BrandExtendService extends IService<BrandExtend> {
|
||||
|
||||
}
|
||||
@ -1,34 +0,0 @@
|
||||
package com.cpop.jambox.business.service;
|
||||
|
||||
import com.mybatisflex.core.paginate.Page;
|
||||
import com.mybatisflex.core.service.IService;
|
||||
import com.cpop.jambox.business.bo.BrandBo;
|
||||
import com.cpop.jambox.business.bo.BrandPageBo;
|
||||
import com.cpop.jambox.business.entity.Brand;
|
||||
import com.cpop.jambox.business.vo.BrandPageVo;
|
||||
|
||||
/**
|
||||
* 品牌表 服务层。
|
||||
*
|
||||
* @author DB
|
||||
* @since 2023-09-13
|
||||
*/
|
||||
public interface BrandService extends IService<Brand> {
|
||||
|
||||
/**
|
||||
* @descriptions 查询品牌分页列表
|
||||
* @author DB
|
||||
* @date 2023/09/13 17:55
|
||||
* @param bo 请求参数
|
||||
* @return com.cpop.core.base.R<com.mybatisflex.core.paginate.Page<com.cpop.jambox.business.vo.BrandPageVo>>
|
||||
*/
|
||||
Page<BrandPageVo> getBrandPage(BrandPageBo bo);
|
||||
|
||||
/**
|
||||
* @descriptions 修改品牌表
|
||||
* @author DB
|
||||
* @date 2023/09/14 11:40
|
||||
* @param bo 请求参数
|
||||
*/
|
||||
void updateBrand(BrandBo bo);
|
||||
}
|
||||
@ -1,33 +1,19 @@
|
||||
package com.cpop.jambox.business.service.impl;
|
||||
|
||||
import com.mybatisflex.core.paginate.Page;
|
||||
import com.mybatisflex.core.query.QueryWrapper;
|
||||
import com.mybatisflex.spring.service.impl.ServiceImpl;
|
||||
import com.cpop.common.utils.bean.BeanUtils;
|
||||
import com.cpop.core.base.entity.PageDomain;
|
||||
import com.cpop.core.utils.sql.SqlUtils;
|
||||
import com.cpop.jambox.business.bo.BrandBo;
|
||||
import com.cpop.jambox.business.bo.BrandPageBo;
|
||||
import com.cpop.jambox.business.entity.Brand;
|
||||
import com.cpop.jambox.business.mapper.BrandMapper;
|
||||
import com.cpop.jambox.business.service.BrandService;
|
||||
import com.cpop.jambox.business.vo.BrandPageVo;
|
||||
import com.cpop.jambox.business.entity.BrandExtend;
|
||||
import com.cpop.jambox.business.mapper.BrandExtendMapper;
|
||||
import com.cpop.jambox.business.service.BrandExtendService;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import static com.mybatisflex.core.query.QueryMethods.groupConcat;
|
||||
import static com.cpop.jambox.business.entity.table.BrandStaffMidCampusTableDef.BRAND_STAFF_MID_CAMPUS;
|
||||
import static com.cpop.jambox.business.entity.table.BrandStaffTableDef.BRAND_STAFF;
|
||||
import static com.cpop.jambox.business.entity.table.BrandTableDef.BRAND;
|
||||
|
||||
/**
|
||||
* 品牌表 服务层实现。
|
||||
* 果酱品牌拓展表 服务层实现。
|
||||
*
|
||||
* @author DB
|
||||
* @since 2023-09-13
|
||||
* @since 2023-10-25
|
||||
*/
|
||||
@Service("brandService")
|
||||
public class BrandServiceImpl extends ServiceImpl<BrandMapper, Brand> implements BrandService {
|
||||
|
||||
@Service("brandExtendService")
|
||||
public class BrandExtendServiceImpl extends ServiceImpl<BrandExtendMapper, BrandExtend> implements BrandExtendService {
|
||||
/**
|
||||
* @descriptions 查询品牌分页列表
|
||||
* @author DB
|
||||
@ -35,7 +21,7 @@ public class BrandServiceImpl extends ServiceImpl<BrandMapper, Brand> implements
|
||||
* @param bo 请求参数
|
||||
* @return com.cpop.core.base.R<com.mybatisflex.core.paginate.Page<com.cpop.jambox.business.vo.BrandPageVo>>
|
||||
*/
|
||||
@Override
|
||||
/*@Override
|
||||
public Page<BrandPageVo> getBrandPage(BrandPageBo bo) {
|
||||
PageDomain pageDomain = SqlUtils.getInstance().getPageDomain();
|
||||
return this.mapper.paginateAs(pageDomain.getPageNum(),pageDomain.getPageSize(),
|
||||
@ -50,7 +36,7 @@ public class BrandServiceImpl extends ServiceImpl<BrandMapper, Brand> implements
|
||||
.and(BRAND.NAME.like(bo.getName()))
|
||||
.groupBy(BRAND.ID),
|
||||
BrandPageVo.class);
|
||||
}
|
||||
}*/
|
||||
|
||||
/**
|
||||
* @descriptions 修改品牌表
|
||||
@ -58,10 +44,10 @@ public class BrandServiceImpl extends ServiceImpl<BrandMapper, Brand> implements
|
||||
* @date 2023/09/14 11:40
|
||||
* @param bo 请求参数
|
||||
*/
|
||||
@Override
|
||||
/*@Override
|
||||
public void updateBrand(BrandBo bo) {
|
||||
Brand entity = BeanUtils.mapToClass(bo, Brand.class);
|
||||
this.updateById(entity);
|
||||
//TODO:可能需要通知到云库
|
||||
}
|
||||
}*/
|
||||
}
|
||||
@ -4,10 +4,8 @@ import com.mybatisflex.core.paginate.Page;
|
||||
import com.mybatisflex.core.query.QueryWrapper;
|
||||
import com.mybatisflex.spring.service.impl.ServiceImpl;
|
||||
import com.cpop.common.utils.bean.BeanUtils;
|
||||
import com.cpop.core.base.entity.PageDomain;
|
||||
import com.cpop.core.base.exception.ServiceException;
|
||||
import com.cpop.core.utils.SpringUtils;
|
||||
import com.cpop.core.utils.sql.SqlUtils;
|
||||
import com.cpop.jambox.business.bo.BrandStaffBo;
|
||||
import com.cpop.jambox.business.bo.BrandStaffPageBo;
|
||||
import com.cpop.jambox.business.entity.BrandStaff;
|
||||
@ -26,11 +24,7 @@ import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static com.mybatisflex.core.query.QueryMethods.distinct;
|
||||
import static com.mybatisflex.core.query.QueryMethods.groupConcat;
|
||||
import static com.cpop.jambox.business.entity.table.BrandStaffMidCampusTableDef.BRAND_STAFF_MID_CAMPUS;
|
||||
import static com.cpop.jambox.business.entity.table.BrandStaffTableDef.BRAND_STAFF;
|
||||
import static com.cpop.jambox.business.entity.table.BrandTableDef.BRAND;
|
||||
import static com.cpop.jambox.business.entity.table.CampusTableDef.CAMPUS;
|
||||
|
||||
/**
|
||||
@ -51,7 +45,7 @@ public class BrandStaffServiceImpl extends ServiceImpl<BrandStaffMapper, BrandSt
|
||||
**/
|
||||
@Override
|
||||
public Page<BrandStaffPageVo> getBrandStaffPage(BrandStaffPageBo bo) {
|
||||
PageDomain pageDomain = SqlUtils.getInstance().getPageDomain();
|
||||
/*PageDomain pageDomain = SqlUtils.getInstance().getPageDomain();
|
||||
return this.mapper.paginateAs(pageDomain.getPageNum(),pageDomain.getPageSize(),
|
||||
QueryWrapper.create()
|
||||
.select(BRAND_STAFF.ID,BRAND_STAFF.NAME,BRAND_STAFF.PHONE_NUMBER,BRAND_STAFF.CREATE_TIME)
|
||||
@ -70,7 +64,8 @@ public class BrandStaffServiceImpl extends ServiceImpl<BrandStaffMapper, BrandSt
|
||||
.and(BRAND_STAFF.PHONE_NUMBER.eq(bo.getPhoneNumber()))
|
||||
.and(BRAND.NAME.like(bo.getBrandName()))
|
||||
.groupBy(BRAND_STAFF.ID),
|
||||
BrandStaffPageVo.class);
|
||||
BrandStaffPageVo.class);*/
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@ -1,11 +1,8 @@
|
||||
package com.cpop.jambox.business.service.impl;
|
||||
|
||||
import com.mybatisflex.core.paginate.Page;
|
||||
import com.mybatisflex.core.query.QueryWrapper;
|
||||
import com.mybatisflex.spring.service.impl.ServiceImpl;
|
||||
import com.cpop.common.utils.bean.BeanUtils;
|
||||
import com.cpop.core.base.entity.PageDomain;
|
||||
import com.cpop.core.utils.sql.SqlUtils;
|
||||
import com.cpop.jambox.business.bo.CampusBo;
|
||||
import com.cpop.jambox.business.bo.CampusPageBo;
|
||||
import com.cpop.jambox.business.entity.Campus;
|
||||
@ -14,9 +11,6 @@ import com.cpop.jambox.business.service.CampusService;
|
||||
import com.cpop.jambox.business.vo.CampusPageVo;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import static com.cpop.jambox.business.entity.table.BrandTableDef.BRAND;
|
||||
import static com.cpop.jambox.business.entity.table.CampusTableDef.CAMPUS;
|
||||
|
||||
/**
|
||||
* 校区表 服务层实现。
|
||||
*
|
||||
@ -35,14 +29,15 @@ public class CampusServiceImpl extends ServiceImpl<CampusMapper, Campus> impleme
|
||||
*/
|
||||
@Override
|
||||
public Page<CampusPageVo> getCampusPage(CampusPageBo bo) {
|
||||
PageDomain pageDomain = SqlUtils.getInstance().getPageDomain();
|
||||
/*PageDomain pageDomain = SqlUtils.getInstance().getPageDomain();
|
||||
return this.mapper.paginateAs(pageDomain.getPageNum(),pageDomain.getPageSize(),
|
||||
QueryWrapper.create()
|
||||
.select(CAMPUS.ALL_COLUMNS)
|
||||
.select(BRAND.NAME.as(CampusPageVo::getBrandName))
|
||||
.leftJoin(BRAND).on(BRAND.ID.eq(CAMPUS.BRAND_ID))
|
||||
.and(CAMPUS.NAME.like(bo.getName())),
|
||||
CampusPageVo.class);
|
||||
CampusPageVo.class);*/
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.cpop.jambox.business.mapper.BrandExtendMapper">
|
||||
|
||||
</mapper>
|
||||
@ -23,12 +23,6 @@
|
||||
<groupId>com.cpop</groupId>
|
||||
<artifactId>Cpop-System</artifactId>
|
||||
</dependency>
|
||||
<!--系统包-->
|
||||
<dependency>
|
||||
<groupId>com.cpop</groupId>
|
||||
<artifactId>Cpop-System</artifactId>
|
||||
</dependency>
|
||||
<!--果酱包-->
|
||||
<dependency>
|
||||
<groupId>com.cpop</groupId>
|
||||
<artifactId>Cpop-Jambox</artifactId>
|
||||
|
||||
@ -0,0 +1,34 @@
|
||||
package com.cpop.mall.business.bo;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* @author DB
|
||||
* @createTime 2023/10/26 17:22
|
||||
* @description
|
||||
*/
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
@ApiModel(value = "用户申请退款对象")
|
||||
public class OrderApplyRefundBo implements Serializable {
|
||||
|
||||
/**
|
||||
* 订单id
|
||||
*/
|
||||
@NotBlank(message = "订单id不能为空")
|
||||
@ApiModelProperty(value = "订单id",required = true)
|
||||
private String orderId;
|
||||
|
||||
/**
|
||||
* 退款原因
|
||||
*/
|
||||
@NotBlank(message = "退款原因不能为空")
|
||||
@ApiModelProperty(value = "退款原因",required = true)
|
||||
private String refundReason;
|
||||
}
|
||||
@ -0,0 +1,54 @@
|
||||
package com.cpop.mall.business.bo;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* @author DB
|
||||
* @createTime 2023/10/26 17:13
|
||||
* @description
|
||||
*/
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
@ApiModel(value = "用户评价订单")
|
||||
public class OrderEvaluateBo implements Serializable {
|
||||
|
||||
/**
|
||||
* 主键
|
||||
*/
|
||||
@ApiModelProperty("主键")
|
||||
private String id;
|
||||
|
||||
/**
|
||||
* 产品id
|
||||
*/
|
||||
@NotBlank(message = "产品id不能为空")
|
||||
@ApiModelProperty(value = "产品id",required = true)
|
||||
private String productId;
|
||||
|
||||
/**
|
||||
* 订单id
|
||||
*/
|
||||
@NotBlank(message = "订单id不能为空")
|
||||
@ApiModelProperty(value = "订单id",required = true)
|
||||
private String orderId;
|
||||
|
||||
/**
|
||||
* 评价
|
||||
*/
|
||||
@NotBlank(message = "评价不能为空")
|
||||
@ApiModelProperty(value = "评价",required = true)
|
||||
private String evaluate;
|
||||
|
||||
/**
|
||||
* 星
|
||||
*/
|
||||
@NotBlank(message = "星不能为空")
|
||||
@ApiModelProperty(value = "星",required = true)
|
||||
private Double start;
|
||||
}
|
||||
@ -34,4 +34,10 @@ public class OrderPageBo implements Serializable {
|
||||
*/
|
||||
@ApiModelProperty("支付用户手机号")
|
||||
private String payUserPhone;
|
||||
|
||||
/**
|
||||
* 订单状态(0:待付款;1:待发货;2:待确认;3:已完成;4:退款/售后中)
|
||||
*/
|
||||
@ApiModelProperty("订单状态(0:待付款;1:待发货;2:待确认;3:已完成;4:退款/售后中)")
|
||||
private Integer orderStatus;
|
||||
}
|
||||
|
||||
@ -0,0 +1,133 @@
|
||||
package com.cpop.mall.business.bo;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import javax.validation.constraints.NotEmpty;
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author DB
|
||||
* @createTime 2023/10/25 9:21
|
||||
* @description
|
||||
*/
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
@ApiModel(value = "商城订单下单请求对象")
|
||||
public class PlaceOrderBo implements Serializable {
|
||||
|
||||
/**
|
||||
* 主键
|
||||
*/
|
||||
@ApiModelProperty("主键")
|
||||
private String id;
|
||||
|
||||
/**
|
||||
* 总金额
|
||||
*/
|
||||
@NotNull(message = "总金额不能为空")
|
||||
@ApiModelProperty(value = "总金额",required = true)
|
||||
private BigDecimal totalAmount;
|
||||
|
||||
/**
|
||||
* 总积分
|
||||
*/
|
||||
@NotNull(message = "总积分不能为空")
|
||||
@ApiModelProperty(value = "总积分",required = true)
|
||||
private Long totalPoint;
|
||||
|
||||
/**
|
||||
* 品牌id
|
||||
*/
|
||||
@NotBlank(message = "品牌id不能为空")
|
||||
@ApiModelProperty(value = "品牌id",required = true)
|
||||
private String brandId;
|
||||
|
||||
/**
|
||||
* 店铺(校区)id
|
||||
*/
|
||||
@ApiModelProperty("店铺(校区)id")
|
||||
private String storeId;
|
||||
|
||||
/**
|
||||
* 下单人真实姓名
|
||||
*/
|
||||
@ApiModelProperty("下单人真实姓名")
|
||||
private String payUserName;
|
||||
|
||||
/**
|
||||
* 收货人名
|
||||
*/
|
||||
@NotBlank(message = "收货人名不能为空")
|
||||
@ApiModelProperty(value = "收货人名",required = true)
|
||||
private String receiveName;
|
||||
|
||||
/**
|
||||
* 收货人电话
|
||||
*/
|
||||
@NotBlank(message = "收货人电话不能为空")
|
||||
@ApiModelProperty(value = "收货人电话",required = true)
|
||||
private String receivePhone;
|
||||
|
||||
/**
|
||||
* 收货地址
|
||||
*/
|
||||
@NotBlank(message = "收货地址不能为空")
|
||||
@ApiModelProperty(value = "收货地址",required = true)
|
||||
private String receiveAddress;
|
||||
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
@ApiModelProperty(value = "备注")
|
||||
private String remarks;
|
||||
|
||||
/**
|
||||
* 订单详情
|
||||
*/
|
||||
@NotEmpty(message = "订单详情不能为空")
|
||||
@ApiModelProperty(value = "订单详情",required = true)
|
||||
private List<PlaceOrderDetail> placeOrderDetailList;
|
||||
|
||||
/**
|
||||
* 下单详情
|
||||
*/
|
||||
@Data
|
||||
@ApiModel(value = "商城订单下单详情请求对象")
|
||||
public static class PlaceOrderDetail implements Serializable{
|
||||
|
||||
/**
|
||||
* 商品记录id
|
||||
*/
|
||||
@NotBlank(message = "商品规格记录id不能为空")
|
||||
@ApiModelProperty(value = "商品规格记录id",required = true)
|
||||
private String productRecordId;
|
||||
|
||||
/**
|
||||
* 金额
|
||||
*/
|
||||
@NotNull(message = "金额不能为空")
|
||||
@ApiModelProperty(value = "金额",required = true)
|
||||
private BigDecimal amount;
|
||||
|
||||
/**
|
||||
* 积分
|
||||
*/
|
||||
@NotNull(message = "积分不能为空")
|
||||
@ApiModelProperty(value = "积分",required = true)
|
||||
private Integer point;
|
||||
|
||||
/**
|
||||
* 下单数量
|
||||
*/
|
||||
@NotNull(message = "下单数量不能为空")
|
||||
@ApiModelProperty(value = "下单数量",required = true)
|
||||
private Integer number;
|
||||
}
|
||||
}
|
||||
@ -31,14 +31,14 @@ public class ProductBo implements Serializable {
|
||||
* 商品名
|
||||
*/
|
||||
@NotBlank(message = "商品名不能为空")
|
||||
@ApiModelProperty("商品名")
|
||||
@ApiModelProperty(value = "商品名",required = true)
|
||||
private String productName;
|
||||
|
||||
/**
|
||||
* 产品类型(0:课卡;1:周边;2:优惠卷:3:其他)
|
||||
*/
|
||||
@NotNull(message = "产品类型不能为空")
|
||||
@ApiModelProperty("产品类型(0:课卡;1:周边;2:优惠卷:3:其他)")
|
||||
@ApiModelProperty(value = "产品类型(0:课卡;1:周边;2:优惠卷:3:其他)",required = true)
|
||||
private Integer productType;
|
||||
|
||||
/**
|
||||
@ -57,33 +57,33 @@ public class ProductBo implements Serializable {
|
||||
* 描述
|
||||
*/
|
||||
@NotBlank(message = "描述不能为空")
|
||||
@ApiModelProperty("描述")
|
||||
@ApiModelProperty(value = "描述",required = true)
|
||||
private String description;
|
||||
|
||||
/**
|
||||
* 商品图地址
|
||||
*/
|
||||
@NotBlank(message = "商品图地址不能为空")
|
||||
@ApiModelProperty("商品图地址")
|
||||
//@NotBlank(message = "商品图地址不能为空")
|
||||
@ApiModelProperty(value = "商品图地址",required = true)
|
||||
private String picUrl;
|
||||
|
||||
/**
|
||||
* 购买限制(0:会员限制;1:新客限定;2:用户限购)
|
||||
*/
|
||||
@NotNull(message = "购买限制不能为空")
|
||||
@ApiModelProperty("购买限制(0:会员限制;1:新客限定;2:用户限购)")
|
||||
private Integer buyRestrict;
|
||||
|
||||
/**
|
||||
* 规格集合
|
||||
*/
|
||||
@ApiModelProperty("规格集合")
|
||||
@NotEmpty(message = "规格详情不能为空")
|
||||
@ApiModelProperty(value = "规格集合",required = true)
|
||||
private List<ProductSpecificationBo> specificationList;
|
||||
|
||||
/**
|
||||
* 规格详情
|
||||
*/
|
||||
@NotEmpty(message = "规格详情不能为空")
|
||||
@ApiModelProperty("规格详情")
|
||||
@ApiModelProperty(value = "规格详情",required = true)
|
||||
private List<ProductRecordBo> recordList;
|
||||
}
|
||||
|
||||
@ -28,6 +28,19 @@ public class ProductPageBo implements Serializable {
|
||||
/**
|
||||
* 产品类型(0:课卡;1:周边;2:优惠卷:3:其他
|
||||
*/
|
||||
@ApiModelProperty("产品类型(0:课卡;1:周边;2:优惠卷:3:其他")
|
||||
private Integer productType;
|
||||
|
||||
/**
|
||||
* 购买限制(0:会员限制;1:新客限定;2:用户限购)
|
||||
*/
|
||||
@ApiModelProperty("购买限制(0:会员限制;1:新客限定;2:用户限购)")
|
||||
private Integer buyRestrict;
|
||||
|
||||
/**
|
||||
* 价格排序
|
||||
*/
|
||||
@ApiModelProperty("价格排序(false:从低到高;true:从高到低)")
|
||||
private Boolean priceOrder;
|
||||
|
||||
}
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package com.cpop.mall.business.bo;
|
||||
|
||||
import com.cpop.core.annontation.StringArrayConvert;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
@ -27,6 +28,7 @@ public class ProductRecordBo implements Serializable {
|
||||
/**
|
||||
* 记录集合
|
||||
*/
|
||||
@StringArrayConvert
|
||||
@ApiModelProperty("记录集合")
|
||||
private String recordNames;
|
||||
|
||||
@ -36,7 +38,7 @@ public class ProductRecordBo implements Serializable {
|
||||
@ApiModelProperty("数量")
|
||||
private Integer recordNum;
|
||||
|
||||
/**
|
||||
/**关联
|
||||
* 记录消耗金额
|
||||
*/
|
||||
@ApiModelProperty("记录消耗金额")
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package com.cpop.mall.business.bo;
|
||||
|
||||
import com.cpop.core.annontation.StringArrayConvert;
|
||||
import com.mybatisflex.annotation.Id;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
@ -36,5 +37,6 @@ public class ProductSpecificationBo implements Serializable {
|
||||
* 规格名
|
||||
*/
|
||||
@ApiModelProperty("规格名")
|
||||
@StringArrayConvert
|
||||
private String specificationNames;
|
||||
}
|
||||
|
||||
@ -111,7 +111,7 @@ public class StaffBo implements Serializable {
|
||||
/**
|
||||
* 角色id
|
||||
*/
|
||||
@NotBlank(message = "角色id不能为空")
|
||||
//TODO:@NotBlank(message = "角色id不能为空")
|
||||
@ApiModelProperty(value = "角色id",required = true)
|
||||
private String roleId;
|
||||
|
||||
|
||||
@ -2,9 +2,7 @@ package com.cpop.mall.business.controller.backstage;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.cpop.common.constant.Constants;
|
||||
import com.cpop.core.annontation.OperationLog;
|
||||
import com.cpop.core.base.R;
|
||||
import com.cpop.core.base.enums.OperationLogEnum;
|
||||
import com.cpop.core.utils.SecurityUtils;
|
||||
import com.cpop.core.utils.SpringUtils;
|
||||
import com.cpop.mall.business.bo.ModifyUserPasswordBo;
|
||||
@ -12,9 +10,10 @@ import com.cpop.mall.business.bo.StaffBo;
|
||||
import com.cpop.mall.business.bo.StaffPageBo;
|
||||
import com.cpop.mall.business.entity.RoleBrand;
|
||||
import com.cpop.mall.business.service.RoleBrandService;
|
||||
import com.cpop.mall.business.vo.BrandListVo;
|
||||
import com.cpop.mall.business.vo.StaffInfoVo;
|
||||
import com.cpop.mall.business.vo.StaffPageVo;
|
||||
import com.cpop.system.business.service.RoleService;
|
||||
import com.cpop.system.business.service.BrandService;
|
||||
import com.cpop.system.business.vo.RoleVo;
|
||||
import com.mybatisflex.core.paginate.Page;
|
||||
import com.mybatisflex.core.query.QueryWrapper;
|
||||
@ -28,16 +27,15 @@ import org.springframework.web.bind.annotation.PutMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import com.cpop.mall.business.entity.Staff;
|
||||
import com.cpop.mall.business.service.StaffService;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import io.swagger.annotations.ApiParam;
|
||||
import java.io.Serializable;
|
||||
import java.util.List;
|
||||
|
||||
import static com.cpop.mall.business.entity.table.RoleBrandTableDef.ROLE_BRAND;
|
||||
import static com.cpop.system.business.entity.table.BrandTableDef.BRAND;
|
||||
import static com.cpop.system.business.entity.table.RoleTableDef.ROLE;
|
||||
|
||||
/**
|
||||
@ -54,6 +52,9 @@ public class BackstageStaffController {
|
||||
@Autowired
|
||||
private StaffService staffService;
|
||||
|
||||
@Autowired
|
||||
private BrandService brandService;
|
||||
|
||||
/**
|
||||
* @descriptions 查询员工分页列表
|
||||
* @author DB
|
||||
@ -121,7 +122,7 @@ public class BackstageStaffController {
|
||||
@GetMapping("/getAllRoleList")
|
||||
public R<List<RoleVo>> getAllSysRoleList() {
|
||||
//获取当前登陆用户所在品牌
|
||||
JSONObject loginStaffInfo = SecurityUtils.getInstance().getLoginStaffInfo();
|
||||
JSONObject loginStaffInfo = SecurityUtils.getInstance().getLoginUserInfo();
|
||||
String roleBrandId = loginStaffInfo.getString("roleBrandId");
|
||||
RoleBrandService roleBrandService = SpringUtils.getBean(RoleBrandService.class);
|
||||
RoleBrand roleBrand = roleBrandService.getById(roleBrandId);
|
||||
@ -181,4 +182,17 @@ public class BackstageStaffController {
|
||||
return R.ok();
|
||||
}
|
||||
|
||||
/**
|
||||
* @descriptions 查询员工分页列表
|
||||
* @author DB
|
||||
* @date 2023/09/07 18:07
|
||||
* @return R<Page<SysStaffPageVo>>
|
||||
*/
|
||||
@ApiOperation("查询品牌列表")
|
||||
@GetMapping("/getBrandList")
|
||||
public R<List<BrandListVo>> getBrandList(String query) {
|
||||
List<BrandListVo> list = brandService.listAs(QueryWrapper.create().and(BRAND.BRAND_NAME.like(query)), BrandListVo.class);
|
||||
return R.ok(list);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -0,0 +1,96 @@
|
||||
package com.cpop.mall.business.controller.mini;
|
||||
|
||||
import com.cpop.common.utils.bean.BeanUtils;
|
||||
import com.cpop.core.base.R;
|
||||
import com.cpop.core.utils.SpringUtils;
|
||||
import com.cpop.mall.business.bo.*;
|
||||
import com.cpop.mall.business.entity.OrderEvaluate;
|
||||
import com.cpop.mall.business.service.OrderEvaluateService;
|
||||
import com.cpop.mall.business.service.OrderService;
|
||||
import com.cpop.mall.business.vo.OrderPageVo;
|
||||
import com.cpop.mall.business.vo.ProductPageVo;
|
||||
import com.mybatisflex.core.paginate.Page;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import io.swagger.annotations.ApiParam;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import static com.cpop.mall.business.entity.table.OrderTableDef.ORDER;
|
||||
|
||||
/**
|
||||
* @author DB
|
||||
* @createTime 2023/10/25 9:19
|
||||
* @description
|
||||
*/
|
||||
@RestController
|
||||
@Api(tags = "小程序商城-订单管理")
|
||||
@RequestMapping("/mini/order")
|
||||
public class MiniOrderController {
|
||||
|
||||
@Autowired
|
||||
private OrderService orderService;
|
||||
|
||||
/**
|
||||
* @descriptions 分页查询商城-商品
|
||||
* @author DB
|
||||
* @date 2023/10/23 11:56
|
||||
* @param bo 分页参数
|
||||
* @return: com.cpop.core.base.R<com.mybatisflex.core.paginate.Page<com.cpop.mall.business.entity.Product>>
|
||||
*/
|
||||
@GetMapping("/getOrderPage")
|
||||
@ApiOperation("我的订单列表")
|
||||
public R<Page<OrderPageVo>> getOrderPage(@ApiParam("分页参数") OrderPageBo bo) {
|
||||
Page<OrderPageVo> page = orderService.getOrderPage(bo);
|
||||
return R.ok(page);
|
||||
}
|
||||
|
||||
/**
|
||||
* @descriptions 商城-订单-下单
|
||||
* @author DB
|
||||
* @date 2023/10/23 12:15
|
||||
* @param bo 下单请求对象
|
||||
* @return: com.cpop.core.base.R<java.lang.Void>
|
||||
*/
|
||||
@PostMapping("/placeOrder")
|
||||
@ApiOperation("商城-订单-下单")
|
||||
public R<Void> placeOrder(@RequestBody @Validated @ApiParam("商城-订单") PlaceOrderBo bo) {
|
||||
orderService.placeOrder(bo);
|
||||
return R.ok();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param bo 评价订单对象
|
||||
* @descriptions 评价订单
|
||||
* @author DB
|
||||
* @date 2023/10/23 12:15
|
||||
* @return: com.cpop.core.base.R<java.lang.Void>
|
||||
*/
|
||||
@PostMapping("/orderEvaluate")
|
||||
@ApiOperation("评价订单")
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public R<Void> orderEvaluate(@RequestBody @Validated @ApiParam("评价订单对象") OrderEvaluateBo bo) {
|
||||
SpringUtils.getBean(OrderEvaluateService.class).save(BeanUtils.mapToClass(bo, OrderEvaluate.class));
|
||||
//修改订单
|
||||
orderService.updateChain().set(ORDER.HAVE_EVALUATE, true).where(ORDER.ID.eq(bo.getOrderId())).update();
|
||||
return R.ok();
|
||||
}
|
||||
|
||||
/**
|
||||
* @descriptions 申请退款
|
||||
* @author DB
|
||||
* @date 2023/10/26 17:22
|
||||
* @param bo 申请退款对象
|
||||
* @return: com.cpop.core.base.R<java.lang.Void>
|
||||
*/
|
||||
@PostMapping("/applyRefund")
|
||||
@ApiOperation("申请退款")
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public R<Void> applyRefund(@RequestBody @Validated @ApiParam("申请退款对象") OrderApplyRefundBo bo) {
|
||||
orderService.applyRefund(bo);
|
||||
return R.ok();
|
||||
}
|
||||
|
||||
}
|
||||
@ -3,12 +3,15 @@ package com.cpop.mall.business.controller.mini;
|
||||
import com.cpop.core.base.R;
|
||||
import com.cpop.core.utils.SpringUtils;
|
||||
import com.cpop.jambox.business.vo.CardTemplateListVo;
|
||||
import com.cpop.mall.business.bo.PlaceOrderBo;
|
||||
import com.cpop.mall.business.bo.ProductBo;
|
||||
import com.cpop.mall.business.bo.ProductPageBo;
|
||||
import com.cpop.mall.business.service.ProductRecordService;
|
||||
import com.cpop.mall.business.service.ProductService;
|
||||
import com.cpop.mall.business.service.ProductSpecificationService;
|
||||
import com.cpop.mall.business.vo.ProductEvaluateVo;
|
||||
import com.cpop.mall.business.vo.ProductPageVo;
|
||||
import com.cpop.mall.business.vo.StoreListVo;
|
||||
import com.mybatisflex.core.paginate.Page;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
@ -31,7 +34,7 @@ import static com.cpop.mall.business.entity.table.ProductSpecificationTableDef.P
|
||||
* @since 2023-10-23
|
||||
*/
|
||||
@RestController
|
||||
@Api(tags = "商城-商品管理")
|
||||
@Api(tags = "小程序商城-商品管理")
|
||||
@RequestMapping("/mini/product")
|
||||
public class MiniProductController {
|
||||
|
||||
@ -53,94 +56,30 @@ public class MiniProductController {
|
||||
}
|
||||
|
||||
/**
|
||||
* @descriptions 获取果酱课卡模板
|
||||
* @descriptions 下单需要选择店铺/校区
|
||||
* @author DB
|
||||
* @date 2023/10/23 11:56
|
||||
* @return: com.cpop.core.base.R<com.mybatisflex.core.paginate.Page<com.cpop.mall.business.entity.Product>>
|
||||
*/
|
||||
@GetMapping("/getJamboxCardTemplate")
|
||||
@ApiOperation("获取果酱课卡模板")
|
||||
public R<List<CardTemplateListVo>> getJamboxCardTemplate() {
|
||||
List<CardTemplateListVo> list = productService.getJamboxCardTemplate();
|
||||
@GetMapping("/paySelectStore")
|
||||
@ApiOperation("下单需要选择店铺/校区")
|
||||
public R<List<StoreListVo>> paySelectStore() {
|
||||
List<StoreListVo> list = productService.paySelectStore();
|
||||
return R.ok(list);
|
||||
}
|
||||
|
||||
/**
|
||||
* @descriptions 创建规格
|
||||
* @descriptions 查询商品评价分页列表
|
||||
* @author DB
|
||||
* @date 2023/10/23 12:15
|
||||
* @param specificationGroups 规格集合
|
||||
* @return: com.cpop.core.base.R<java.lang.Void>
|
||||
* @date 2023/10/23 11:56
|
||||
* @param productId 商品id
|
||||
* @return: com.cpop.core.base.R<com.mybatisflex.core.paginate.Page<com.cpop.mall.business.entity.Product>>
|
||||
*/
|
||||
@PostMapping("/createSpecification")
|
||||
@ApiOperation("创建规格")
|
||||
public R<List<String>> createSpecification(@RequestBody @ApiParam("规格集合") List<List<String>> specificationGroups) {
|
||||
List<String> list = productService.createSpecification(specificationGroups);
|
||||
return R.ok(list);
|
||||
@GetMapping("/getOrderEvaluatePage/{productId}")
|
||||
@ApiOperation("查询商品评价分页列表")
|
||||
public R<Page<ProductEvaluateVo>> getOrderEvaluatePage(@PathVariable @ApiParam("商品id") String productId) {
|
||||
Page<ProductEvaluateVo> page = productService.getOrderEvaluatePage(productId);
|
||||
return R.ok(page);
|
||||
}
|
||||
|
||||
/**
|
||||
* @descriptions 保存商城-商品
|
||||
* @author DB
|
||||
* @date 2023/10/23 12:15
|
||||
* @param bo 商城-商品
|
||||
* @return: com.cpop.core.base.R<java.lang.Void>
|
||||
*/
|
||||
@PostMapping("/insertProduct")
|
||||
@ApiOperation("保存商城-商品")
|
||||
public R<Void> insertProduct(@RequestBody @Validated @ApiParam("商城-商品") ProductBo bo) {
|
||||
productService.insertProduct(bo);
|
||||
return R.ok();
|
||||
}
|
||||
|
||||
/**
|
||||
* @descriptions 根据主键重置商城商品
|
||||
* @author DB
|
||||
* @date 2023/10/23 12:15
|
||||
* @param id 商城-商品id
|
||||
* @return: com.cpop.core.base.R<java.lang.Void>
|
||||
*/
|
||||
@PutMapping("/resetProduct/{id}")
|
||||
@ApiOperation("根据主键重置商城商品")
|
||||
public R<Void> update(@PathVariable String id) {
|
||||
productService.resetProduct(id);
|
||||
return R.ok();
|
||||
}
|
||||
|
||||
/**
|
||||
* @descriptions 根据主键重置商城商品
|
||||
* @author DB
|
||||
* @date 2023/10/23 12:15
|
||||
* @param bo 商城-商品
|
||||
* @return: com.cpop.core.base.R<java.lang.Void>
|
||||
*/
|
||||
@PutMapping("/updateProduct")
|
||||
@ApiOperation("根据主键更新商城-商品")
|
||||
public R<Void> updateProduct(@RequestBody @Validated @ApiParam("商城-商品") ProductBo bo) {
|
||||
productService.updateProduct(bo);
|
||||
return R.ok();
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据主键删除商城-商品表。
|
||||
*
|
||||
* @param id 主键
|
||||
* @return {@code true} 删除成功,{@code false} 删除失败
|
||||
*/
|
||||
@DeleteMapping("/removeById/{id}")
|
||||
@ApiOperation("根据主键商城-商品表")
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public R<Void> removeById(@PathVariable @ApiParam("商城-商品主键") Serializable id) {
|
||||
productService.removeById(id);
|
||||
//删规格
|
||||
ProductSpecificationService productSpecificationService = SpringUtils.getBean(ProductSpecificationService.class);
|
||||
productSpecificationService.updateChain().where(PRODUCT_SPECIFICATION.PRODUCT_ID.eq(id)).remove();
|
||||
//删商品记录详情
|
||||
ProductRecordService specificationRecordService = SpringUtils.getBean(ProductRecordService.class);
|
||||
specificationRecordService.updateChain().where(PRODUCT_RECORD.PRODUCT_ID.eq(id)).remove();
|
||||
return R.ok();
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -65,6 +65,11 @@ public class Order extends BaseEntity implements Serializable {
|
||||
*/
|
||||
private String storeId;
|
||||
|
||||
/**
|
||||
* 模板id
|
||||
*/
|
||||
private String templateId;
|
||||
|
||||
/**
|
||||
* 产品名
|
||||
*/
|
||||
@ -105,6 +110,11 @@ public class Order extends BaseEntity implements Serializable {
|
||||
*/
|
||||
private String remarks;
|
||||
|
||||
/**
|
||||
* 是否评价(0否1是)
|
||||
*/
|
||||
private String haveEvaluate;
|
||||
|
||||
/**
|
||||
* 逻辑删除(0否1是)
|
||||
*/
|
||||
|
||||
@ -14,6 +14,8 @@ import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.*;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import javax.validation.constraints.NotNull;
|
||||
|
||||
/**
|
||||
* 商城订单详情表 实体类。
|
||||
*
|
||||
@ -50,6 +52,11 @@ public class OrderDetail extends BaseEntity implements Serializable {
|
||||
*/
|
||||
private Integer point;
|
||||
|
||||
/**
|
||||
* 下单数量
|
||||
*/
|
||||
private Integer number;
|
||||
|
||||
/**
|
||||
* 逻辑删除(0否1是)
|
||||
*/
|
||||
|
||||
@ -0,0 +1,63 @@
|
||||
package com.cpop.mall.business.entity;
|
||||
|
||||
import com.cpop.core.base.entity.BaseEntity;
|
||||
import com.cpop.core.base.entity.BaseInsertListener;
|
||||
import com.cpop.core.base.entity.BaseUpdateListener;
|
||||
import com.mybatisflex.annotation.Column;
|
||||
import com.mybatisflex.annotation.Id;
|
||||
import com.mybatisflex.annotation.Table;
|
||||
import java.io.Serializable;
|
||||
import java.time.LocalDateTime;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.*;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
/**
|
||||
* 商城-订单评价表 实体类。
|
||||
*
|
||||
* @author DB
|
||||
* @since 2023-10-26
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper=false)
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Accessors(chain = true)
|
||||
@Table(value = "cp_mall_order_evaluate", onInsert = BaseInsertListener.class, onUpdate = BaseUpdateListener.class, mapperGenerateEnable = false)
|
||||
public class OrderEvaluate extends BaseEntity implements Serializable {
|
||||
|
||||
/**
|
||||
* 主键
|
||||
*/
|
||||
@Id
|
||||
private String id;
|
||||
|
||||
/**
|
||||
* 产品id
|
||||
*/
|
||||
private String productId;
|
||||
|
||||
/**
|
||||
* 订单id
|
||||
*/
|
||||
private String orderId;
|
||||
|
||||
/**
|
||||
* 评价
|
||||
*/
|
||||
private String evaluate;
|
||||
|
||||
/**
|
||||
* 星
|
||||
*/
|
||||
private Double start;
|
||||
|
||||
/**
|
||||
* 逻辑删除(0否1是)
|
||||
*/
|
||||
@Column(isLogicDelete = true)
|
||||
private Boolean isDelete;
|
||||
|
||||
}
|
||||
@ -7,6 +7,7 @@ import com.mybatisflex.annotation.Column;
|
||||
import com.mybatisflex.annotation.Id;
|
||||
import com.mybatisflex.annotation.Table;
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDateTime;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
@ -69,9 +70,30 @@ public class Product extends BaseEntity implements Serializable {
|
||||
*/
|
||||
private Integer buyRestrict;
|
||||
|
||||
/**
|
||||
* 限购数量
|
||||
*/
|
||||
private Integer limitNum;
|
||||
|
||||
/**
|
||||
* 支付方式
|
||||
*/
|
||||
private Integer payType;
|
||||
|
||||
/**
|
||||
* 上下架
|
||||
*/
|
||||
private Boolean isUp;
|
||||
|
||||
/**
|
||||
* 最高价
|
||||
*/
|
||||
private BigDecimal maxPrice;
|
||||
|
||||
/**
|
||||
* 最低价
|
||||
*/
|
||||
private BigDecimal minPrice;
|
||||
|
||||
/**
|
||||
* 逻辑删除(0否1是)
|
||||
|
||||
@ -0,0 +1,40 @@
|
||||
package com.cpop.mall.business.entity;
|
||||
|
||||
import com.cpop.core.base.entity.BaseEntity;
|
||||
import com.cpop.core.base.entity.BaseInsertListener;
|
||||
import com.cpop.core.base.entity.BaseUpdateListener;
|
||||
import com.mybatisflex.annotation.Id;
|
||||
import com.mybatisflex.annotation.Table;
|
||||
import java.io.Serializable;
|
||||
import java.time.LocalDateTime;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.*;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
/**
|
||||
* 商城-商品外部拓展表 实体类。
|
||||
*
|
||||
* @author DB
|
||||
* @since 2023-10-26
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper=false)
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Accessors(chain = true)
|
||||
@Table(value = "cp_mall_product_out", onInsert = BaseInsertListener.class, onUpdate = BaseUpdateListener.class, mapperGenerateEnable = false)
|
||||
public class ProductOut extends BaseEntity implements Serializable {
|
||||
|
||||
/**
|
||||
* 商品id
|
||||
*/
|
||||
private String productId;
|
||||
|
||||
/**
|
||||
* 外部关联id
|
||||
*/
|
||||
private String outJoinId;
|
||||
|
||||
}
|
||||
@ -24,7 +24,7 @@ import lombok.experimental.Accessors;
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Accessors(chain = true)
|
||||
@Table(value = "cp_mall_product_specification_record", onInsert = BaseInsertListener.class, onUpdate = BaseUpdateListener.class, mapperGenerateEnable = false)
|
||||
@Table(value = "cp_mall_product_record", onInsert = BaseInsertListener.class, onUpdate = BaseUpdateListener.class, mapperGenerateEnable = false)
|
||||
public class ProductRecord extends BaseEntity implements Serializable {
|
||||
|
||||
/**
|
||||
@ -44,7 +44,7 @@ public class ProductRecord extends BaseEntity implements Serializable {
|
||||
private String recordNames;
|
||||
|
||||
/**
|
||||
* 数量
|
||||
* 数量(库存)
|
||||
*/
|
||||
private Integer recordNum;
|
||||
|
||||
|
||||
@ -3,6 +3,8 @@ package com.cpop.mall.business.entity;
|
||||
import com.cpop.core.base.entity.BaseEntity;
|
||||
import com.cpop.core.base.entity.BaseInsertListener;
|
||||
import com.cpop.core.base.entity.BaseUpdateListener;
|
||||
import com.cpop.core.base.enums.SourceType;
|
||||
import com.cpop.core.gateway.miniProgram.MiniUserLoginInfoBuild;
|
||||
import com.mybatisflex.annotation.Column;
|
||||
import com.mybatisflex.annotation.Id;
|
||||
import com.mybatisflex.annotation.Table;
|
||||
@ -44,15 +46,16 @@ public class Staff extends BaseEntity implements Serializable {
|
||||
*/
|
||||
private String userId;
|
||||
|
||||
/**
|
||||
* 用户来源
|
||||
*/
|
||||
private SourceType sourceType;
|
||||
|
||||
/**
|
||||
* 角色-品牌-id
|
||||
*/
|
||||
private String roleBrandId;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 逻辑删除(0否1是)
|
||||
*/
|
||||
|
||||
@ -0,0 +1,14 @@
|
||||
package com.cpop.mall.business.mapper;
|
||||
|
||||
import com.mybatisflex.core.BaseMapper;
|
||||
import com.cpop.mall.business.entity.OrderEvaluate;
|
||||
|
||||
/**
|
||||
* 商城-订单评价表 映射层。
|
||||
*
|
||||
* @author DB
|
||||
* @since 2023-10-26
|
||||
*/
|
||||
public interface OrderEvaluateMapper extends BaseMapper<OrderEvaluate> {
|
||||
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
package com.cpop.mall.business.mapper;
|
||||
|
||||
import com.mybatisflex.core.BaseMapper;
|
||||
import com.cpop.mall.business.entity.ProductOut;
|
||||
|
||||
/**
|
||||
* 商城-商品外部拓展表 映射层。
|
||||
*
|
||||
* @author DB
|
||||
* @since 2023-10-26
|
||||
*/
|
||||
public interface ProductOutMapper extends BaseMapper<ProductOut> {
|
||||
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
package com.cpop.mall.business.service;
|
||||
|
||||
import com.mybatisflex.core.service.IService;
|
||||
import com.cpop.mall.business.entity.OrderEvaluate;
|
||||
|
||||
/**
|
||||
* 商城-订单评价表 服务层。
|
||||
*
|
||||
* @author DB
|
||||
* @since 2023-10-26
|
||||
*/
|
||||
public interface OrderEvaluateService extends IService<OrderEvaluate> {
|
||||
|
||||
}
|
||||
@ -1,6 +1,8 @@
|
||||
package com.cpop.mall.business.service;
|
||||
|
||||
import com.cpop.mall.business.bo.OrderApplyRefundBo;
|
||||
import com.cpop.mall.business.bo.OrderPageBo;
|
||||
import com.cpop.mall.business.bo.PlaceOrderBo;
|
||||
import com.cpop.mall.business.vo.OrderPageVo;
|
||||
import com.mybatisflex.core.paginate.Page;
|
||||
import com.mybatisflex.core.service.IService;
|
||||
@ -22,4 +24,22 @@ public interface OrderService extends IService<Order> {
|
||||
* @return: com.mybatisflex.core.paginate.Page<com.cpop.mall.business.vo.OrderPageVo>
|
||||
*/
|
||||
Page<OrderPageVo> getOrderPage(OrderPageBo bo);
|
||||
|
||||
/**
|
||||
* @descriptions 商城-订单-下单
|
||||
* @author DB
|
||||
* @date 2023/10/25 9:32
|
||||
* @param bo 下单请求对象
|
||||
* @return: void
|
||||
*/
|
||||
void placeOrder(PlaceOrderBo bo);
|
||||
|
||||
/**
|
||||
* @descriptions 申请退款
|
||||
* @author DB
|
||||
* @date 2023/10/26 17:24
|
||||
* @param bo 申请退款对象
|
||||
* @return: void
|
||||
*/
|
||||
void applyRefund(OrderApplyRefundBo bo);
|
||||
}
|
||||
|
||||
@ -0,0 +1,14 @@
|
||||
package com.cpop.mall.business.service;
|
||||
|
||||
import com.mybatisflex.core.service.IService;
|
||||
import com.cpop.mall.business.entity.ProductOut;
|
||||
|
||||
/**
|
||||
* 商城-商品外部拓展表 服务层。
|
||||
*
|
||||
* @author DB
|
||||
* @since 2023-10-26
|
||||
*/
|
||||
public interface ProductOutService extends IService<ProductOut> {
|
||||
|
||||
}
|
||||
@ -4,7 +4,9 @@ import com.cpop.jambox.business.entity.CardTemplate;
|
||||
import com.cpop.jambox.business.vo.CardTemplateListVo;
|
||||
import com.cpop.mall.business.bo.ProductBo;
|
||||
import com.cpop.mall.business.bo.ProductPageBo;
|
||||
import com.cpop.mall.business.vo.ProductEvaluateVo;
|
||||
import com.cpop.mall.business.vo.ProductPageVo;
|
||||
import com.cpop.mall.business.vo.StoreListVo;
|
||||
import com.mybatisflex.core.paginate.Page;
|
||||
import com.mybatisflex.core.service.IService;
|
||||
import com.cpop.mall.business.entity.Product;
|
||||
@ -72,4 +74,21 @@ public interface ProductService extends IService<Product> {
|
||||
* @return: java.util.List<com.cpop.jambox.business.entity.CardTemplate>
|
||||
*/
|
||||
List<CardTemplateListVo> getJamboxCardTemplate();
|
||||
|
||||
/**
|
||||
* @descriptions 下单需要选择店铺/校区
|
||||
* @author DB
|
||||
* @date 2023/10/26 15:34
|
||||
* @return: java.util.List<com.cpop.mall.business.vo.StoreListVo>
|
||||
*/
|
||||
List<StoreListVo> paySelectStore();
|
||||
|
||||
/**
|
||||
* @descriptions 查询商品评价分页列表
|
||||
* @author DB
|
||||
* @date 2023/10/26 17:02
|
||||
* @param productId 商品id
|
||||
* @return: com.mybatisflex.core.paginate.Page<com.cpop.mall.business.vo.ProductEvaluateVo>
|
||||
*/
|
||||
Page<ProductEvaluateVo> getOrderEvaluatePage(String productId);
|
||||
}
|
||||
|
||||
@ -0,0 +1,18 @@
|
||||
package com.cpop.mall.business.service.impl;
|
||||
|
||||
import com.mybatisflex.spring.service.impl.ServiceImpl;
|
||||
import com.cpop.mall.business.entity.OrderEvaluate;
|
||||
import com.cpop.mall.business.mapper.OrderEvaluateMapper;
|
||||
import com.cpop.mall.business.service.OrderEvaluateService;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
/**
|
||||
* 商城-订单评价表 服务层实现。
|
||||
*
|
||||
* @author DB
|
||||
* @since 2023-10-26
|
||||
*/
|
||||
@Service("orderEvaluateService")
|
||||
public class OrderEvaluateServiceImpl extends ServiceImpl<OrderEvaluateMapper, OrderEvaluate> implements OrderEvaluateService {
|
||||
|
||||
}
|
||||
@ -1,11 +1,25 @@
|
||||
package com.cpop.mall.business.service.impl;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.cpop.common.utils.StringUtils;
|
||||
import com.cpop.common.utils.bean.BeanUtils;
|
||||
import com.cpop.core.base.entity.PageDomain;
|
||||
import com.cpop.core.base.enums.UserType;
|
||||
import com.cpop.core.service.RedisService;
|
||||
import com.cpop.core.utils.SecurityUtils;
|
||||
import com.cpop.core.utils.SpringUtils;
|
||||
import com.cpop.core.utils.sql.SqlUtils;
|
||||
import com.cpop.mall.business.bo.OrderApplyRefundBo;
|
||||
import com.cpop.mall.business.bo.OrderPageBo;
|
||||
import com.cpop.mall.business.bo.PlaceOrderBo;
|
||||
import com.cpop.mall.business.entity.OrderDetail;
|
||||
import com.cpop.mall.business.entity.OrderRefund;
|
||||
import com.cpop.mall.business.entity.Product;
|
||||
import com.cpop.mall.business.service.OrderDetailService;
|
||||
import com.cpop.mall.business.service.OrderRefundService;
|
||||
import com.cpop.mall.business.service.ProductService;
|
||||
import com.cpop.mall.business.vo.OrderPageVo;
|
||||
import com.cpop.mall.framework.constant.MallRedisConstant;
|
||||
import com.mybatisflex.core.paginate.Page;
|
||||
import com.mybatisflex.core.query.QueryWrapper;
|
||||
import com.mybatisflex.spring.service.impl.ServiceImpl;
|
||||
@ -13,9 +27,16 @@ import com.cpop.mall.business.entity.Order;
|
||||
import com.cpop.mall.business.mapper.OrderMapper;
|
||||
import com.cpop.mall.business.service.OrderService;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static com.cpop.core.base.table.table.SysUserTableDef.SYS_USER;
|
||||
import static com.cpop.mall.business.entity.table.OrderTableDef.ORDER;
|
||||
import static com.cpop.mall.business.entity.table.ProductRecordTableDef.PRODUCT_RECORD;
|
||||
import static com.cpop.mall.business.entity.table.ProductTableDef.PRODUCT;
|
||||
|
||||
|
||||
/**
|
||||
@ -37,18 +58,101 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
|
||||
@Override
|
||||
public Page<OrderPageVo> getOrderPage(OrderPageBo bo) {
|
||||
//获取当前登陆用户信息
|
||||
JSONObject loginStaffInfo = SecurityUtils.getInstance().getLoginStaffInfo();
|
||||
JSONObject loginUserInfo = SecurityUtils.getInstance().getLoginUserInfo();
|
||||
//如果是商城员工
|
||||
QueryWrapper queryWrapper = QueryWrapper.create();
|
||||
UserType userType = UserType.valueOf(loginUserInfo.getString("userType"));
|
||||
if (userType == UserType.MALL_USER){
|
||||
//只能查询当前用户品牌下所有订单
|
||||
queryWrapper.where(ORDER.BRAND_ID.eq(loginUserInfo.getString("brandId")));
|
||||
}
|
||||
//如果是小程序用户
|
||||
if (userType == UserType.MINI_USER) {
|
||||
//查询此用户订单
|
||||
queryWrapper.where(ORDER.PAY_USER_ID.eq(loginUserInfo.getString("userId")));
|
||||
}
|
||||
PageDomain pageDomain = SqlUtils.getInstance().getPageDomain();
|
||||
return this.mapper.paginateWithRelationsAs(pageDomain.getPageNum(), pageDomain.getPageSize(),
|
||||
QueryWrapper.create()
|
||||
queryWrapper
|
||||
.select(ORDER.ALL_COLUMNS)
|
||||
.from(ORDER)
|
||||
.leftJoin(SYS_USER).on(SYS_USER.ID.eq(ORDER.PAY_USER_ID))
|
||||
.where(ORDER.BRAND_ID.eq(loginStaffInfo.getString("brandId")))
|
||||
.and(ORDER.PAY_USER_NAME.like(bo.getPayUserName()))
|
||||
.and(SYS_USER.PHONE_NUMBER.eq(bo.getPayUserPhone()))
|
||||
.and(ORDER.PRODUCT_NAMES.like(bo.getProductName()))
|
||||
//订单状态
|
||||
.and(ORDER.ORDER_STATUS.eq(bo.getOrderStatus()))
|
||||
.orderBy(ORDER.CREATE_TIME.desc()),
|
||||
OrderPageVo.class);
|
||||
}
|
||||
|
||||
/**
|
||||
* @descriptions 商城-订单-下单
|
||||
* @author DB
|
||||
* @date 2023/10/25 9:32
|
||||
* @param bo 下单请求对象
|
||||
* @return: void
|
||||
*/
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void placeOrder(PlaceOrderBo bo) {
|
||||
Order order = BeanUtils.mapToClass(bo, Order.class);
|
||||
List<OrderDetail> orderDetails = BeanUtils.mapToList(bo.getPlaceOrderDetailList(), OrderDetail.class);
|
||||
//规格记录ids
|
||||
Set<String> recordIds = orderDetails.stream().map(OrderDetail::getProductRecordId).collect(Collectors.toSet());
|
||||
//获取涉及到的商品
|
||||
ProductService productService = SpringUtils.getBean(ProductService.class);
|
||||
List<Product> productList = productService.queryChain()
|
||||
.select(PRODUCT.ID, PRODUCT.PRODUCT_NAME)
|
||||
.from(PRODUCT)
|
||||
.leftJoin(PRODUCT_RECORD).on(PRODUCT_RECORD.PRODUCT_ID.eq(PRODUCT.ID))
|
||||
.where(PRODUCT_RECORD.ID.in(recordIds))
|
||||
.list();
|
||||
//获取当前下单用户信息
|
||||
JSONObject loginStaffInfo = SecurityUtils.getInstance().getLoginUserInfo();
|
||||
//设置待付款
|
||||
order.setOrderStatus(0)
|
||||
.setProductNames(productList.stream().map(Product::getProductName).collect(Collectors.joining(",")))
|
||||
.setPayUserId(loginStaffInfo.getString("userId"));
|
||||
if (StringUtils.isBlank(bo.getPayUserName())) {
|
||||
order.setPayUserName(loginStaffInfo.getString("nickName"));
|
||||
}
|
||||
this.save(order);
|
||||
//保存订单详情
|
||||
orderDetails.forEach(item -> {
|
||||
item.setOrderId(order.getId());
|
||||
});
|
||||
SpringUtils.getBean(OrderDetailService.class).saveBatch(orderDetails);
|
||||
}
|
||||
|
||||
/**
|
||||
* @descriptions 库存是否足够
|
||||
* @author DB
|
||||
* @date 2023/10/25 10:18
|
||||
* @param recordId 规格记录id
|
||||
* @param num 下单数量
|
||||
* @return: java.lang.Boolean
|
||||
*/
|
||||
private Boolean recordNumIsEnough(String recordId,Integer num) {
|
||||
RedisService redisService = SpringUtils.getBean(RedisService.class);
|
||||
//库存
|
||||
Integer stockNum = redisService.getCacheObject(MallRedisConstant.STOCK_RECORD_NUM + recordId);
|
||||
return stockNum - num >= 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* @descriptions 申请退款
|
||||
* @author DB
|
||||
* @date 2023/10/26 17:24
|
||||
* @param bo 申请退款对象
|
||||
* @return: void
|
||||
*/
|
||||
@Override
|
||||
public void applyRefund(OrderApplyRefundBo bo) {
|
||||
OrderRefund orderRefund = BeanUtils.mapToClass(bo, OrderRefund.class);
|
||||
orderRefund.setRefundStatus(0);
|
||||
SpringUtils.getBean(OrderRefundService.class).save(orderRefund);
|
||||
//修改订单状态
|
||||
this.updateChain().set(ORDER.ORDER_STATUS, 3).where(ORDER.ID.eq(bo.getOrderId())).update();
|
||||
}
|
||||
}
|
||||
|
||||
@ -0,0 +1,18 @@
|
||||
package com.cpop.mall.business.service.impl;
|
||||
|
||||
import com.mybatisflex.spring.service.impl.ServiceImpl;
|
||||
import com.cpop.mall.business.entity.ProductOut;
|
||||
import com.cpop.mall.business.mapper.ProductOutMapper;
|
||||
import com.cpop.mall.business.service.ProductOutService;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
/**
|
||||
* 商城-商品外部拓展表 服务层实现。
|
||||
*
|
||||
* @author DB
|
||||
* @since 2023-10-26
|
||||
*/
|
||||
@Service("productOutService")
|
||||
public class ProductOutServiceImpl extends ServiceImpl<ProductOutMapper, ProductOut> implements ProductOutService {
|
||||
|
||||
}
|
||||
@ -4,22 +4,32 @@ import com.alibaba.fastjson.JSONObject;
|
||||
import com.cpop.common.utils.StringUtils;
|
||||
import com.cpop.common.utils.bean.BeanUtils;
|
||||
import com.cpop.core.base.entity.PageDomain;
|
||||
import com.cpop.core.base.enums.SourceType;
|
||||
import com.cpop.core.gateway.miniProgram.MiniUserLoginInfoBuild;
|
||||
import com.cpop.core.utils.SecurityUtils;
|
||||
import com.cpop.core.utils.SpringUtils;
|
||||
import com.cpop.core.utils.sql.SqlUtils;
|
||||
import com.cpop.jambox.business.entity.CardTemplate;
|
||||
import com.cpop.jambox.business.entity.BrandExtend;
|
||||
import com.cpop.jambox.business.service.BrandExtendService;
|
||||
import com.cpop.jambox.business.vo.CardTemplateListVo;
|
||||
import com.cpop.mall.business.bo.ProductBo;
|
||||
import com.cpop.mall.business.bo.ProductPageBo;
|
||||
import com.cpop.mall.business.entity.ProductSpecification;
|
||||
import com.cpop.mall.business.entity.ProductRecord;
|
||||
import com.cpop.mall.business.service.OrderEvaluateService;
|
||||
import com.cpop.mall.business.service.ProductRecordService;
|
||||
import com.cpop.mall.business.service.ProductSpecificationService;
|
||||
import com.cpop.mall.business.vo.ProductEvaluateVo;
|
||||
import com.cpop.mall.business.vo.ProductPageVo;
|
||||
import com.cpop.mall.business.vo.ProductRecordVo;
|
||||
import com.cpop.mall.business.vo.StoreListVo;
|
||||
import com.cpop.system.business.entity.Brand;
|
||||
import com.cpop.system.business.service.BrandService;
|
||||
import com.mybatisflex.core.datasource.DataSourceKey;
|
||||
import com.mybatisflex.core.paginate.Page;
|
||||
import com.mybatisflex.core.query.QueryWrapper;
|
||||
import com.mybatisflex.core.row.Db;
|
||||
import com.mybatisflex.core.row.DbChain;
|
||||
import com.mybatisflex.core.row.Row;
|
||||
import com.mybatisflex.core.row.RowUtil;
|
||||
import com.mybatisflex.spring.service.impl.ServiceImpl;
|
||||
@ -29,12 +39,18 @@ import com.cpop.mall.business.service.ProductService;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
|
||||
import static com.cpop.jambox.business.entity.table.BrandExtendTableDef.BRAND_EXTEND;
|
||||
import static com.cpop.mall.business.entity.table.OrderEvaluateTableDef.ORDER_EVALUATE;
|
||||
import static com.cpop.mall.business.entity.table.OrderTableDef.ORDER;
|
||||
import static com.cpop.mall.business.entity.table.ProductRecordTableDef.PRODUCT_RECORD;
|
||||
import static com.cpop.mall.business.entity.table.ProductSpecificationTableDef.PRODUCT_SPECIFICATION;
|
||||
import static com.cpop.mall.business.entity.table.ProductTableDef.PRODUCT;
|
||||
import static com.cpop.system.business.entity.table.BrandTableDef.BRAND;
|
||||
|
||||
/**
|
||||
* 商城-商品表 服务层实现。
|
||||
@ -55,13 +71,22 @@ public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product> impl
|
||||
@Override
|
||||
public Page<ProductPageVo> getProductPage(ProductPageBo bo) {
|
||||
//获取当前用户品牌
|
||||
JSONObject loginStaffInfo = SecurityUtils.getInstance().getLoginStaffInfo();
|
||||
JSONObject loginStaffInfo = SecurityUtils.getInstance().getLoginUserInfo();
|
||||
PageDomain pageDomain = SqlUtils.getInstance().getPageDomain();
|
||||
QueryWrapper queryWrapper = QueryWrapper.create();
|
||||
if (null != bo.getPriceOrder()){
|
||||
if (bo.getPriceOrder()) {
|
||||
queryWrapper.orderBy(PRODUCT.MAX_PRICE.desc());
|
||||
} else {
|
||||
queryWrapper.orderBy(PRODUCT.MIN_PRICE.asc());
|
||||
}
|
||||
}
|
||||
return this.mapper.paginateWithRelationsAs(pageDomain.getPageNum(), pageDomain.getPageSize(),
|
||||
QueryWrapper.create()
|
||||
queryWrapper
|
||||
.where(PRODUCT.BRAND_ID.eq(loginStaffInfo.getString("brandId")))
|
||||
.and(PRODUCT.PRODUCT_NAME.like(bo.getProductName()))
|
||||
.and(PRODUCT.PRODUCT_TYPE.eq(bo.getProductType()))
|
||||
.and(PRODUCT.BUY_RESTRICT.eq(bo.getBuyRestrict()))
|
||||
.orderBy(pageDomain.getOrderByColumn()),
|
||||
ProductPageVo.class);
|
||||
}
|
||||
@ -115,7 +140,7 @@ public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product> impl
|
||||
public void insertProduct(ProductBo bo) {
|
||||
Product product = BeanUtils.mapToClass(bo, Product.class);
|
||||
if (StringUtils.isBlank(bo.getBrandId())){
|
||||
JSONObject loginStaffInfo = SecurityUtils.getInstance().getLoginStaffInfo();
|
||||
JSONObject loginStaffInfo = SecurityUtils.getInstance().getLoginUserInfo();
|
||||
product.setBrandId(loginStaffInfo.getString("brandId"));
|
||||
}
|
||||
this.save(product);
|
||||
@ -189,12 +214,96 @@ public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product> impl
|
||||
*/
|
||||
@Override
|
||||
public List<CardTemplateListVo> getJamboxCardTemplate() {
|
||||
JSONObject loginStaffInfo = SecurityUtils.getInstance().getLoginStaffInfo();
|
||||
JSONObject loginStaffInfo = SecurityUtils.getInstance().getLoginUserInfo();
|
||||
//获取果酱品牌拓展信息
|
||||
BrandExtendService brandExtendService = SpringUtils.getBean(BrandExtendService.class);
|
||||
BrandExtend brandExtend = brandExtendService.queryChain()
|
||||
.leftJoin(BRAND).on(BRAND.ID.eq(BRAND_EXTEND.BRAND_ID))
|
||||
.where(BRAND.ID.eq(loginStaffInfo.getString("brandId"))).one();
|
||||
//多数据源
|
||||
DataSourceKey.use("jambox");
|
||||
List<Row> rowList = Db.selectListByQuery("t_card_template", QueryWrapper.create()
|
||||
.select("template_id AS id,brand_id,name")
|
||||
.where("brand_id = ?", loginStaffInfo.getString("brandId")));
|
||||
return RowUtil.toEntityList(rowList, CardTemplateListVo.class);
|
||||
List<Row> rowList;
|
||||
List<CardTemplateListVo> cardTemplateListVos;
|
||||
try {
|
||||
DataSourceKey.use("jambox");
|
||||
rowList = Db.selectListByQuery("t_card_template", QueryWrapper.create()
|
||||
.select("tct.template_id AS id,tct.brand_id,tct.name")
|
||||
.from("t_card_template").as("tct")
|
||||
.leftJoin("t_brand_info").as("tbi").on("tbi.id = tct.brand_id")
|
||||
.where("tbi.brand_id = ?", brandExtend.getBrandCloudId()));
|
||||
cardTemplateListVos = RowUtil.toEntityList(rowList, CardTemplateListVo.class);
|
||||
} finally {
|
||||
DataSourceKey.clear();
|
||||
}
|
||||
return cardTemplateListVos;
|
||||
}
|
||||
|
||||
/**
|
||||
* @descriptions 下单需要选择店铺/校区
|
||||
* @author DB
|
||||
* @date 2023/10/26 15:34
|
||||
* @return: java.util.List<com.cpop.mall.business.vo.StoreListVo>
|
||||
*/
|
||||
@Override
|
||||
public List<StoreListVo> paySelectStore() {
|
||||
//获取当前用户信息
|
||||
JSONObject loginUserInfo = SecurityUtils.getInstance().getLoginUserInfo();
|
||||
SourceType sourceType = SourceType.valueOf(loginUserInfo.getString("sourceType"));
|
||||
switch (sourceType) {
|
||||
//果酱
|
||||
case JAMBOX:
|
||||
BrandExtend brandExtend = SpringUtils.getBean(BrandExtendService.class).queryChain()
|
||||
.from(BRAND_EXTEND)
|
||||
.leftJoin(BRAND).on(BRAND.ID.eq(BRAND_EXTEND.BRAND_ID))
|
||||
.where(BRAND.ID.eq(loginUserInfo.getString("brandId"))).one();
|
||||
return getJamboxStore(brandExtend.getBrandCloudId());
|
||||
case COMMON:
|
||||
break;
|
||||
default:
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* @descriptions 获取果酱校区信息
|
||||
* @author DB
|
||||
* @date 2023/10/26 15:54
|
||||
* @param brandCloudId 云平拍id
|
||||
* @return: java.util.List<com.cpop.mall.business.vo.StoreListVo>
|
||||
*/
|
||||
private List<StoreListVo> getJamboxStore(String brandCloudId) {
|
||||
try {
|
||||
DataSourceKey.use("jambox");
|
||||
//机构表
|
||||
List<Row> list = DbChain.table("t_mechanism_info")
|
||||
.select("tmi.mechanism as storeName", "tmi.mechanism_id as id")
|
||||
.from("t_mechanism_info").as("tmi")
|
||||
.leftJoin("t_brand_info").as("tbi").on("tbi.id = tmi.brand_id")
|
||||
.where("tbi.brand_id = ?", brandCloudId)
|
||||
.list();
|
||||
return RowUtil.toEntityList(list,StoreListVo.class);
|
||||
} finally {
|
||||
DataSourceKey.clear();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @descriptions 查询商品评价分页列表
|
||||
* @author DB
|
||||
* @date 2023/10/26 17:02
|
||||
* @param productId 商品id
|
||||
* @return: com.mybatisflex.core.paginate.Page<com.cpop.mall.business.vo.ProductEvaluateVo>
|
||||
*/
|
||||
@Override
|
||||
public Page<ProductEvaluateVo> getOrderEvaluatePage(String productId) {
|
||||
PageDomain pageDomain = SqlUtils.getInstance().getPageDomain();
|
||||
OrderEvaluateService evaluateService = SpringUtils.getBean(OrderEvaluateService.class);
|
||||
return evaluateService.getMapper().paginateAs(pageDomain.getPageNum(),pageDomain.getPageSize(),
|
||||
QueryWrapper.create()
|
||||
.select(ORDER_EVALUATE.ALL_COLUMNS)
|
||||
.from(ORDER_EVALUATE)
|
||||
.leftJoin(ORDER).on(ORDER.ID.eq(ORDER_EVALUATE.ORDER_ID))
|
||||
.leftJoin(PRODUCT).on(PRODUCT.ID.eq(ORDER_EVALUATE.PRODUCT_ID))
|
||||
.where(PRODUCT.ID.eq(productId)),
|
||||
ProductEvaluateVo.class);
|
||||
}
|
||||
}
|
||||
|
||||
@ -27,9 +27,9 @@ import org.springframework.transaction.annotation.Transactional;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import static com.cpop.jambox.business.entity.table.BrandTableDef.BRAND;
|
||||
import static com.cpop.mall.business.entity.table.RoleBrandTableDef.ROLE_BRAND;
|
||||
import static com.cpop.mall.business.entity.table.StaffTableDef.STAFF;
|
||||
import static com.cpop.system.business.entity.table.BrandTableDef.BRAND;
|
||||
import static com.cpop.system.business.entity.table.MenuTableDef.MENU;
|
||||
import static com.cpop.system.business.entity.table.RoleMenuTableDef.ROLE_MENU;
|
||||
import static com.cpop.system.business.entity.table.RoleTableDef.ROLE;
|
||||
@ -55,7 +55,7 @@ public class RoleBrandServiceImpl extends ServiceImpl<RoleBrandMapper, RoleBrand
|
||||
@Override
|
||||
public Page<MallRolePageVo> getMallRolePageList(MallRolePageBo bo) {
|
||||
//获取当前登录用户信息
|
||||
JSONObject staffInfo = SecurityUtils.getInstance().getLoginStaffInfo();
|
||||
JSONObject staffInfo = SecurityUtils.getInstance().getLoginUserInfo();
|
||||
//获取分页参数
|
||||
PageDomain pageDomain = SqlUtils.getInstance().getPageDomain();
|
||||
return this.mapper.paginateAs(pageDomain.getPageNum(), pageDomain.getPageSize(),
|
||||
@ -105,7 +105,7 @@ public class RoleBrandServiceImpl extends ServiceImpl<RoleBrandMapper, RoleBrand
|
||||
//录入商城角色品牌表
|
||||
RoleBrand roleBrand = new RoleBrand();
|
||||
if (StringUtils.isBlank(bo.getBrandId())){
|
||||
JSONObject loginStaffInfo = SecurityUtils.getInstance().getLoginStaffInfo();
|
||||
JSONObject loginStaffInfo = SecurityUtils.getInstance().getLoginUserInfo();
|
||||
roleBrand.setRoleId(role.getId())
|
||||
.setBrandId(loginStaffInfo.getString("brandId"));
|
||||
} else {
|
||||
|
||||
@ -8,6 +8,7 @@ import com.cpop.core.base.entity.LoginUser;
|
||||
import com.cpop.core.base.entity.PageDomain;
|
||||
import com.cpop.core.base.entity.loginInfo.MallStaffLoginInfo;
|
||||
import com.cpop.core.base.entity.loginInfo.OamStaffLoginInfo;
|
||||
import com.cpop.core.base.enums.SourceType;
|
||||
import com.cpop.core.base.enums.UserType;
|
||||
import com.cpop.core.base.exception.ServiceException;
|
||||
import com.cpop.core.base.table.SysUser;
|
||||
@ -23,6 +24,8 @@ import com.cpop.mall.business.entity.RoleBrand;
|
||||
import com.cpop.mall.business.service.RoleBrandService;
|
||||
import com.cpop.mall.business.vo.StaffInfoVo;
|
||||
import com.cpop.mall.business.vo.StaffPageVo;
|
||||
import com.cpop.system.business.entity.Brand;
|
||||
import com.cpop.system.business.service.BrandService;
|
||||
import com.mybatisflex.core.paginate.Page;
|
||||
import com.mybatisflex.core.query.QueryWrapper;
|
||||
import com.mybatisflex.core.row.DbChain;
|
||||
@ -39,6 +42,7 @@ import java.time.LocalDateTime;
|
||||
import static com.cpop.core.base.table.table.SysUserTableDef.SYS_USER;
|
||||
import static com.cpop.mall.business.entity.table.RoleBrandTableDef.ROLE_BRAND;
|
||||
import static com.cpop.mall.business.entity.table.StaffTableDef.STAFF;
|
||||
import static com.cpop.system.business.entity.table.BrandTableDef.BRAND;
|
||||
import static com.cpop.system.business.entity.table.RoleTableDef.ROLE;
|
||||
import static com.mybatisflex.core.query.QueryMethods.distinct;
|
||||
import static com.mybatisflex.core.query.QueryMethods.groupConcat;
|
||||
@ -68,11 +72,14 @@ public class StaffServiceImpl extends ServiceImpl<StaffMapper, Staff> implements
|
||||
.select(distinct(STAFF.ALL_COLUMNS))
|
||||
.select(SYS_USER.USER_NAME,SYS_USER.NICK_NAME, SYS_USER.EMAIL, SYS_USER.PHONE_NUMBER, SYS_USER.SEX, SYS_USER.AVATAR, SYS_USER.STATUS, SYS_USER.PASSWORD)
|
||||
.select(ROLE.ROLE_NAME)
|
||||
.select(ROLE_BRAND.BRAND_ID)
|
||||
.select(BRAND.BRAND_NAME)
|
||||
.from(STAFF)
|
||||
.leftJoin(SYS_USER).on(SYS_USER.ID.eq(STAFF.USER_ID))
|
||||
//关键中间表
|
||||
.leftJoin(ROLE_BRAND).on(ROLE_BRAND.ID.eq(STAFF.ROLE_BRAND_ID))
|
||||
.leftJoin(ROLE).on(ROLE.ID.eq(ROLE_BRAND.ROLE_ID))
|
||||
.leftJoin(BRAND).on(BRAND.ID.eq(ROLE_BRAND.BRAND_ID))
|
||||
//姓名
|
||||
.and(STAFF.NAME.like(bo.getName()))
|
||||
.and(SYS_USER.USER_NAME.ne(Constants.SUPER_ADMIN).or(SYS_USER.USER_NAME.isNull()))
|
||||
@ -116,15 +123,19 @@ public class StaffServiceImpl extends ServiceImpl<StaffMapper, Staff> implements
|
||||
roleBrand.setBrandId(bo.getBrandId());
|
||||
} else {
|
||||
//获取当前用户信息
|
||||
JSONObject loginStaffInfo = SecurityUtils.getInstance().getLoginStaffInfo();
|
||||
JSONObject loginStaffInfo = SecurityUtils.getInstance().getLoginUserInfo();
|
||||
roleBrand.setBrandId(loginStaffInfo.getString("brandId"));
|
||||
}
|
||||
roleBrand.setRoleId(bo.getRoleId());
|
||||
//获取品牌信息
|
||||
Brand brand = SpringUtils.getBean(BrandService.class).queryChain().where(BRAND.ID.eq(roleBrand.getBrandId())).one();
|
||||
//TODO:角色暂时不做处理,都是超级管理员
|
||||
//roleBrand.setRoleId(bo.getRoleId());
|
||||
//设置中间表
|
||||
roleBrandService.save(roleBrand);
|
||||
staff.setUserId(sysUser.getId())
|
||||
.setName(bo.getName())
|
||||
.setRoleBrandId(roleBrand.getId());
|
||||
.setRoleBrandId(roleBrand.getId())
|
||||
.setSourceType(brand.getSourceType());
|
||||
this.save(staff);
|
||||
}
|
||||
|
||||
@ -280,7 +291,7 @@ public class StaffServiceImpl extends ServiceImpl<StaffMapper, Staff> implements
|
||||
@Override
|
||||
public void modifyUserPassword(ModifyUserPasswordBo bo) {
|
||||
//只允许超级管理员或自己修改面膜
|
||||
JSONObject loginStaffInfo = SecurityUtils.getInstance().getLoginStaffInfo();
|
||||
JSONObject loginStaffInfo = SecurityUtils.getInstance().getLoginUserInfo();
|
||||
String userName = loginStaffInfo.getString("userName");
|
||||
//同数据库密码进行比较
|
||||
SysUser user = DbChain.table(SYS_USER)
|
||||
|
||||
@ -0,0 +1,32 @@
|
||||
package com.cpop.mall.business.vo;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* Description:
|
||||
* date: 2023/6/2 17:39
|
||||
*
|
||||
* @author DB
|
||||
*/
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
@ApiModel(value = "Brand对象", description = "品牌表")
|
||||
public class BrandListVo implements Serializable {
|
||||
|
||||
/**
|
||||
* 主键
|
||||
*/
|
||||
@ApiModelProperty("主键")
|
||||
private String id;
|
||||
|
||||
/**
|
||||
* 云函数id
|
||||
*/
|
||||
@ApiModelProperty("品牌名")
|
||||
private String brandName;
|
||||
}
|
||||
@ -0,0 +1,59 @@
|
||||
package com.cpop.mall.business.vo;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import com.mybatisflex.annotation.Id;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
/**
|
||||
* @author DB
|
||||
* @createTime 2023/10/26 17:02
|
||||
* @description
|
||||
*/
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
@ApiModel(value = "商城商品评价分页返回对象")
|
||||
public class ProductEvaluateVo implements Serializable {
|
||||
|
||||
/**
|
||||
* 主键
|
||||
*/
|
||||
@ApiModelProperty("主键")
|
||||
private String id;
|
||||
|
||||
/**
|
||||
* 产品id
|
||||
*/
|
||||
@ApiModelProperty("产品id")
|
||||
private String productId;
|
||||
|
||||
/**
|
||||
* 订单id
|
||||
*/
|
||||
@ApiModelProperty("订单id")
|
||||
private String orderId;
|
||||
|
||||
/**
|
||||
* 评价
|
||||
*/
|
||||
@ApiModelProperty("评价")
|
||||
private String evaluate;
|
||||
|
||||
/**
|
||||
* 星
|
||||
*/
|
||||
@ApiModelProperty("星")
|
||||
private Double start;
|
||||
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss" , timezone = "GMT+8")
|
||||
@ApiModelProperty("创建时间")
|
||||
private LocalDateTime createTime;
|
||||
}
|
||||
@ -1,6 +1,7 @@
|
||||
package com.cpop.mall.business.vo;
|
||||
|
||||
import com.cpop.mall.business.entity.ProductSpecification;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import com.mybatisflex.annotation.RelationOneToMany;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
@ -8,6 +9,8 @@ import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
@ -56,6 +59,12 @@ public class ProductPageVo implements Serializable {
|
||||
@ApiModelProperty("描述")
|
||||
private String description;
|
||||
|
||||
/**
|
||||
* 上下架
|
||||
*/
|
||||
@ApiModelProperty("上下架")
|
||||
private Boolean isUp;
|
||||
|
||||
/**
|
||||
* 商品图地址
|
||||
*/
|
||||
@ -68,17 +77,36 @@ public class ProductPageVo implements Serializable {
|
||||
@ApiModelProperty("购买限制(0:会员限制;1:新客限定;2:用户限购)")
|
||||
private Integer buyRestrict;
|
||||
|
||||
/**
|
||||
* 最高价
|
||||
*/
|
||||
@ApiModelProperty("最高价")
|
||||
private BigDecimal maxPrice;
|
||||
|
||||
/**
|
||||
* 最低价
|
||||
*/
|
||||
@ApiModelProperty("最低价")
|
||||
private BigDecimal minPrice;
|
||||
|
||||
/**
|
||||
* 产品规格
|
||||
*/
|
||||
@RelationOneToMany(selfField = "id", targetField = "productId")
|
||||
@RelationOneToMany(selfField = "id", targetField = "productId",targetTable = "cp_mall_product_specification")
|
||||
@ApiModelProperty("产品规格")
|
||||
private List<ProductSpecificationVo> productSpecificationVos;
|
||||
|
||||
/**
|
||||
* 产品规格记录
|
||||
*/
|
||||
@RelationOneToMany(selfField = "id", targetField = "productId")
|
||||
@RelationOneToMany(selfField = "id", targetField = "productId",targetTable = "cp_mall_product_record")
|
||||
@ApiModelProperty("产品规格记录")
|
||||
private List<ProductRecordVo> productRecordVos;
|
||||
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss" , timezone = "GMT+8")
|
||||
@ApiModelProperty("创建时间")
|
||||
private LocalDateTime createTime;
|
||||
}
|
||||
|
||||
@ -46,6 +46,18 @@ public class StaffPageVo implements Serializable {
|
||||
@ApiModelProperty("角色-品牌-id")
|
||||
private String roleBrandId;
|
||||
|
||||
/**
|
||||
* 品牌id
|
||||
*/
|
||||
@ApiModelProperty("品牌id")
|
||||
private String brandId;
|
||||
|
||||
/**
|
||||
* 品牌
|
||||
*/
|
||||
@ApiModelProperty("品牌")
|
||||
private String brandName;
|
||||
|
||||
/**
|
||||
* 用户名
|
||||
*/
|
||||
|
||||
@ -0,0 +1,29 @@
|
||||
package com.cpop.mall.business.vo;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
/**
|
||||
* @author DB
|
||||
* @createTime 2023/10/26 15:30
|
||||
* @description
|
||||
*/
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
@ApiModel(value = "店铺/校区返回对象")
|
||||
public class StoreListVo {
|
||||
|
||||
/**
|
||||
* 主键
|
||||
*/
|
||||
@ApiModelProperty("主键")
|
||||
private String id ;
|
||||
|
||||
/**
|
||||
* 店铺/校区名
|
||||
*/
|
||||
@ApiModelProperty("店铺/校区名")
|
||||
private String storeName;
|
||||
}
|
||||
@ -0,0 +1,9 @@
|
||||
package com.cpop.mall.framework.constant;
|
||||
|
||||
/**
|
||||
* 商城redis实体类
|
||||
*/
|
||||
public interface MallRedisConstant {
|
||||
|
||||
String STOCK_RECORD_NUM = "mall:stock:recordNum:";
|
||||
}
|
||||
@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.cpop.mall.business.mapper.OrderEvaluateMapper">
|
||||
|
||||
</mapper>
|
||||
7
Cpop-Mall/src/main/resources/mapper/ProductOutMapper.xml
Normal file
7
Cpop-Mall/src/main/resources/mapper/ProductOutMapper.xml
Normal file
@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.cpop.mall.business.mapper.ProductOutMapper">
|
||||
|
||||
</mapper>
|
||||
@ -59,9 +59,10 @@ public class MiniUser extends BaseEntity implements Serializable {
|
||||
*/
|
||||
private String avatar;
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 来源类型
|
||||
*/
|
||||
private String sourceType;
|
||||
|
||||
/**
|
||||
* 逻辑删除(0否1是)
|
||||
|
||||
@ -27,6 +27,10 @@
|
||||
<groupId>com.cpop</groupId>
|
||||
<artifactId>Cpop-Jambox</artifactId>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
<dependency>
|
||||
<groupId>com.cpop</groupId>
|
||||
<artifactId>Cpop-System</artifactId>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
</project>
|
||||
|
||||
@ -1,75 +0,0 @@
|
||||
package com.cpop.oam.business.controller;
|
||||
|
||||
import com.mybatisflex.core.paginate.Page;
|
||||
import com.cpop.core.base.R;
|
||||
import com.cpop.jambox.business.bo.BrandBo;
|
||||
import com.cpop.jambox.business.bo.BrandPageBo;
|
||||
import com.cpop.jambox.business.service.BrandService;
|
||||
import com.cpop.jambox.business.vo.BrandPageVo;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
/**
|
||||
* 品牌表 控制层。
|
||||
*
|
||||
* @author DB
|
||||
* @since 2023-09-13
|
||||
*/
|
||||
@RestController
|
||||
@Api(tags = "果酱-品牌接口")
|
||||
@RequestMapping("/brand")
|
||||
public class BrandController {
|
||||
|
||||
@Autowired
|
||||
private BrandService brandService;
|
||||
|
||||
/**
|
||||
* @descriptions 查询品牌分页列表
|
||||
* @author DB
|
||||
* @date 2023/09/13 17:55
|
||||
* @param bo 请求参数
|
||||
* @return com.cpop.core.base.R<com.mybatisflex.core.paginate.Page<com.cpop.jambox.business.vo.BrandPageVo>>
|
||||
*/
|
||||
@PreAuthorize("@aps.hasPermission('brandAndCampus:brand:list')")
|
||||
@ApiOperation("查询品牌分页列表")
|
||||
@GetMapping("/getBrandPage")
|
||||
public R<Page<BrandPageVo>> getBrandPageList(BrandPageBo bo) {
|
||||
Page<BrandPageVo> pageVo = brandService.getBrandPage(bo);
|
||||
return R.ok(pageVo);
|
||||
}
|
||||
|
||||
/**
|
||||
* @descriptions 修改品牌表
|
||||
* @author DB
|
||||
* @date 2023/09/14 11:40
|
||||
* @param bo 请求参数
|
||||
* @return com.cpop.core.base.R<java.lang.Void>
|
||||
*/
|
||||
@PreAuthorize("@aps.hasPermission('brandAndCampus:brand:update')")
|
||||
@ApiOperation("修改品牌")
|
||||
@PutMapping("/updateBrand")
|
||||
public R<Void> updateBrand(@RequestBody @Validated BrandBo bo) {
|
||||
brandService.updateBrand(bo);
|
||||
return R.ok();
|
||||
}
|
||||
|
||||
/**
|
||||
* @Description: 删除品牌
|
||||
* @param id 主键
|
||||
* @return: R<Void>
|
||||
* @Author: DB
|
||||
* @Date: 2023/6/5 10:03
|
||||
**/
|
||||
@PreAuthorize("@aps.hasPermission('brandAndCampus:brand:remove')")
|
||||
@ApiOperation("删除品牌")
|
||||
@DeleteMapping("/removeBrandById/{id}")
|
||||
public R<Void> removeBrandById(@PathVariable String id) {
|
||||
brandService.removeById(id);
|
||||
return R.ok();
|
||||
}
|
||||
|
||||
}
|
||||
@ -1,12 +1,12 @@
|
||||
package com.cpop.oam.business.controller;
|
||||
|
||||
import com.cpop.system.business.service.BrandService;
|
||||
import com.mybatisflex.core.paginate.Page;
|
||||
import com.mybatisflex.core.query.QueryWrapper;
|
||||
import com.cpop.core.base.R;
|
||||
import com.cpop.jambox.business.bo.BrandStaffBo;
|
||||
import com.cpop.jambox.business.bo.BrandStaffPageBo;
|
||||
import com.cpop.jambox.business.bo.CampusListByBrandBo;
|
||||
import com.cpop.jambox.business.service.BrandService;
|
||||
import com.cpop.jambox.business.service.BrandStaffService;
|
||||
import com.cpop.jambox.business.service.CampusService;
|
||||
import com.cpop.jambox.business.vo.BrandListVo;
|
||||
|
||||
@ -1,97 +0,0 @@
|
||||
package com.cpop.oam.business.controller;
|
||||
|
||||
import com.mybatisflex.core.paginate.Page;
|
||||
import com.mybatisflex.core.query.QueryWrapper;
|
||||
import com.cpop.core.base.R;
|
||||
import com.cpop.jambox.business.bo.CampusBo;
|
||||
import com.cpop.jambox.business.bo.CampusPageBo;
|
||||
import com.cpop.jambox.business.service.BrandService;
|
||||
import com.cpop.jambox.business.service.CampusService;
|
||||
import com.cpop.jambox.business.vo.BrandListVo;
|
||||
import com.cpop.jambox.business.vo.CampusPageVo;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 校区表 控制层。
|
||||
*
|
||||
* @author DB
|
||||
* @since 2023-09-13
|
||||
*/
|
||||
@RestController
|
||||
@Api(tags = "果酱-校区接口")
|
||||
@RequestMapping("/campus")
|
||||
public class CampusController {
|
||||
|
||||
@Autowired
|
||||
private CampusService campusService;
|
||||
|
||||
@Autowired
|
||||
private BrandService brandService;
|
||||
|
||||
/**
|
||||
* @Description: 查询校区分页列表
|
||||
* @param bo 请求参数
|
||||
* @return R<PageVo<CampusPageListVo>>
|
||||
* @Author Administrator
|
||||
* @Date: 2023/6/7 0007 10:18
|
||||
*/
|
||||
@PreAuthorize("@aps.hasPermission('brandAndCampus:campus:list')")
|
||||
@ApiOperation("查询校区分页列表")
|
||||
@GetMapping("/getCampusPage")
|
||||
public R<Page<CampusPageVo>> getCampusPage(CampusPageBo bo) {
|
||||
Page<CampusPageVo> pageVo = campusService.getCampusPage(bo);
|
||||
return R.ok(pageVo);
|
||||
}
|
||||
|
||||
/**
|
||||
* @descriptions 查询品牌列表
|
||||
* @author DB
|
||||
* @date 2023/09/13 17:55
|
||||
* @return com.cpop.core.base.R<com.mybatisflex.core.paginate.Page<com.cpop.jambox.business.vo.BrandPageVo>>
|
||||
*/
|
||||
@ApiOperation("查询品牌列表")
|
||||
@GetMapping("/getBrandList")
|
||||
public R<List<BrandListVo>> getBrandList() {
|
||||
List<BrandListVo> pageVo = brandService.listAs(QueryWrapper.create(), BrandListVo.class);
|
||||
return R.ok(pageVo);
|
||||
}
|
||||
|
||||
/**
|
||||
* @descriptions 修改校区
|
||||
* @author DB
|
||||
* @date 2023/09/14 11:40
|
||||
* @param bo 请求参数
|
||||
* @return com.cpop.core.base.R<java.lang.Void>
|
||||
*/
|
||||
@PreAuthorize("@aps.hasPermission('brandAndCampus:campus:update')")
|
||||
@ApiOperation("修改校区")
|
||||
@PutMapping("/updateCampus")
|
||||
public R<Void> updateCampus(@RequestBody @Validated CampusBo bo) {
|
||||
campusService.updateCampus(bo);
|
||||
return R.ok();
|
||||
}
|
||||
|
||||
/**
|
||||
* @Description: 删除校区
|
||||
* @param id 主键
|
||||
* @return: R<Void>
|
||||
* @Author: DB
|
||||
* @Date: 2023/6/5 10:03
|
||||
**/
|
||||
@PreAuthorize("@aps.hasPermission('brandAndCampus:campus:remove')")
|
||||
@ApiOperation("删除校区")
|
||||
@DeleteMapping("/removeCampusById/{id}")
|
||||
public R<Void> removeCampusById(@PathVariable String id) {
|
||||
brandService.removeById(id);
|
||||
//TODO:通知到云库
|
||||
return R.ok();
|
||||
}
|
||||
|
||||
}
|
||||
@ -33,11 +33,11 @@ import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import static com.cpop.jambox.business.entity.table.BrandTableDef.BRAND;
|
||||
import static com.cpop.jambox.business.entity.table.CampusTableDef.CAMPUS;
|
||||
import static com.cpop.oam.business.entity.table.StaffTableDef.STAFF;
|
||||
import static com.cpop.oam.business.entity.table.TaskDemandTableDef.TASK_DEMAND;
|
||||
import static com.cpop.oam.business.entity.table.TaskTableDef.TASK;
|
||||
import static com.cpop.system.business.entity.table.BrandTableDef.BRAND;
|
||||
|
||||
/**
|
||||
* OAM-任务-需求表 服务层实现。
|
||||
@ -74,7 +74,7 @@ public class TaskDemandServiceImpl extends ServiceImpl<TaskDemandMapper, TaskDem
|
||||
queryWrapper.select(TASK.ALL_COLUMNS)
|
||||
.select(TASK_DEMAND.DEMAND_TYPE.as(TaskDemandPageVo::getDemandType),TASK_DEMAND.RECORD_STAFF_ID,TASK_DEMAND.BRAND_ID,TASK_DEMAND.CAMPUS_ID)
|
||||
.select(CAMPUS.NAME.as(TaskDemandPageVo::getCampusName))
|
||||
.select(BRAND.NAME.as(TaskDemandPageVo::getBrandName))
|
||||
.select(BRAND.BRAND_NAME.as(TaskDemandPageVo::getBrandName))
|
||||
.select(STAFF.NAME.as(TaskDemandPageVo::getRecordStaffName))
|
||||
.from(TASK)
|
||||
//任务需求表
|
||||
|
||||
@ -46,7 +46,6 @@ import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static com.cpop.core.base.table.table.SysUserTableDef.SYS_USER;
|
||||
import static com.cpop.jambox.business.entity.table.BrandTableDef.BRAND;
|
||||
import static com.cpop.jambox.business.entity.table.CampusTableDef.CAMPUS;
|
||||
import static com.cpop.oam.business.entity.table.DutyTableDef.DUTY;
|
||||
import static com.cpop.oam.business.entity.table.StaffTableDef.STAFF;
|
||||
@ -54,6 +53,7 @@ import static com.cpop.oam.business.entity.table.TaskStaffGroupTableDef.TASK_STA
|
||||
import static com.cpop.oam.business.entity.table.TaskTableDef.TASK;
|
||||
import static com.cpop.oam.business.entity.table.TaskWorkOrderRecordTableDef.TASK_WORK_ORDER_RECORD;
|
||||
import static com.cpop.oam.business.entity.table.TaskWorkOrderTableDef.TASK_WORK_ORDER;
|
||||
import static com.cpop.system.business.entity.table.BrandTableDef.BRAND;
|
||||
|
||||
/**
|
||||
* 任务-工单表 服务层实现。
|
||||
@ -194,7 +194,7 @@ public class TaskWorkOrderServiceImpl extends ServiceImpl<TaskWorkOrderMapper, T
|
||||
TASK.ATTACHMENT_URL.as(TaskWorkOrderPageVo::getAttachmentUrl), TASK.RESPONSIBLE_STAFF_ID.as(TaskWorkOrderPageVo::getResponsibleStaffId),
|
||||
TASK.RESPONSIBLE_STAFF_ID.as(TaskWorkOrderPageVo::getResponsibleStaffId))
|
||||
.select(STAFF.NAME.as(TaskWorkOrderPageVo::getRecordStaffId))
|
||||
.select(BRAND.NAME.as(TaskWorkOrderPageVo::getBrandName))
|
||||
.select(BRAND.BRAND_NAME.as(TaskWorkOrderPageVo::getBrandName))
|
||||
.select(CAMPUS.NAME.as(TaskWorkOrderPageVo::getCampusName))
|
||||
.select("rs.name as responsibleStaffName")
|
||||
.from(TASK_WORK_ORDER)
|
||||
|
||||
@ -33,6 +33,11 @@
|
||||
<groupId>com.github.binarywang</groupId>
|
||||
<artifactId>weixin-java-cp</artifactId>
|
||||
</dependency>
|
||||
<!--微信支付-->
|
||||
<dependency>
|
||||
<groupId>com.github.binarywang</groupId>
|
||||
<artifactId>weixin-java-pay</artifactId>
|
||||
</dependency>
|
||||
<!-- 腾讯云-->
|
||||
<dependency>
|
||||
<groupId>com.qcloud</groupId>
|
||||
|
||||
@ -0,0 +1,46 @@
|
||||
package com.cpop.system.business.bo;
|
||||
|
||||
import com.mybatisflex.annotation.Id;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @author DB
|
||||
* @createTime 2023/10/25 16:43
|
||||
* @description
|
||||
*/
|
||||
@Data
|
||||
@ApiModel(value = "品牌参数")
|
||||
public class BrandBo {
|
||||
|
||||
/**
|
||||
* 主键
|
||||
*/
|
||||
@ApiModelProperty("主键")
|
||||
private String id;
|
||||
|
||||
/**
|
||||
* 品牌名
|
||||
*/
|
||||
@ApiModelProperty(value = "品牌名", required = true)
|
||||
private String brandName;
|
||||
|
||||
/**
|
||||
* 微信商户号
|
||||
*/
|
||||
@ApiModelProperty("微信商户号")
|
||||
private String wxMchId;
|
||||
|
||||
/**
|
||||
* 微信支付密钥
|
||||
*/
|
||||
@ApiModelProperty("微信支付密钥")
|
||||
private String wxMchKey;
|
||||
|
||||
/**
|
||||
* 微信支付keypath
|
||||
*/
|
||||
@ApiModelProperty("微信支付keypath")
|
||||
private String wxKeyPath;
|
||||
}
|
||||
@ -1,4 +1,4 @@
|
||||
package com.cpop.jambox.business.bo;
|
||||
package com.cpop.system.business.bo;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
@ -0,0 +1,87 @@
|
||||
package com.cpop.system.business.controller;
|
||||
|
||||
import com.cpop.common.utils.bean.BeanUtils;
|
||||
import com.cpop.core.base.R;
|
||||
import com.cpop.core.base.enums.SourceType;
|
||||
import com.cpop.system.business.bo.BrandBo;
|
||||
import com.cpop.system.business.bo.BrandPageBo;
|
||||
import com.cpop.system.business.vo.BrandPageVo;
|
||||
import com.mybatisflex.core.paginate.Page;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import org.springframework.web.bind.annotation.DeleteMapping;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.PathVariable;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.PutMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import com.cpop.system.business.entity.Brand;
|
||||
import com.cpop.system.business.service.BrandService;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import io.swagger.annotations.ApiParam;
|
||||
import java.io.Serializable;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 系统-品牌表 控制层。
|
||||
*
|
||||
* @author DB
|
||||
* @since 2023-10-25
|
||||
*/
|
||||
@RestController
|
||||
@Api(tags = "系统-品牌表接口")
|
||||
@RequestMapping("/brand")
|
||||
public class BrandController {
|
||||
|
||||
@Autowired
|
||||
private BrandService brandService;
|
||||
|
||||
/**
|
||||
* @descriptions 新增系统品牌
|
||||
* @author DB
|
||||
* @date 2023/10/25 16:53
|
||||
* @param brand 品牌参数
|
||||
* @return: com.cpop.core.base.R<java.lang.Void>
|
||||
*/
|
||||
@PostMapping("/insertSysBrand")
|
||||
@ApiOperation("新增系统品牌")
|
||||
public R<Void> insertSysBrand(@RequestBody @ApiParam("系统-品牌") BrandBo brand) {
|
||||
Brand entity = BeanUtils.mapToClass(brand, Brand.class);
|
||||
entity.setSourceType(SourceType.COMMON);
|
||||
brandService.save(entity);
|
||||
return R.ok();
|
||||
}
|
||||
|
||||
/**
|
||||
* @descriptions 导入果酱品牌
|
||||
* @author DB
|
||||
* @date 2023/10/25 15:53
|
||||
* @param brandId 果酱品牌信息
|
||||
* @return: boolean
|
||||
*/
|
||||
@PostMapping("/importJamboxBrand/{brandId}")
|
||||
@ApiOperation("导入果酱品牌")
|
||||
public R<Void> importJamboxBrand(@PathVariable String brandId) {
|
||||
brandService.importJamboxBrand(brandId);
|
||||
return R.ok();
|
||||
}
|
||||
|
||||
/**
|
||||
* @descriptions 查询品牌分页列表
|
||||
* @author DB
|
||||
* @date 2023/09/13 17:55
|
||||
* @param bo 请求参数
|
||||
* @return com.cpop.core.base.R<com.mybatisflex.core.paginate.Page<com.cpop.system.business.vo.BrandPageVo>>
|
||||
*/
|
||||
@PreAuthorize("@aps.hasPermission('brandAndCampus:brand:list')")
|
||||
@ApiOperation("查询品牌分页列表")
|
||||
@GetMapping("/getBrandPage")
|
||||
public R<Page<BrandPageVo>> getBrandPageList(BrandPageBo bo) {
|
||||
Page<BrandPageVo> pageVo = brandService.getBrandPage(bo);
|
||||
return R.ok(pageVo);
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,69 @@
|
||||
package com.cpop.system.business.entity;
|
||||
|
||||
import com.cpop.core.base.entity.BaseEntity;
|
||||
import com.cpop.core.base.entity.BaseInsertListener;
|
||||
import com.cpop.core.base.entity.BaseUpdateListener;
|
||||
import com.cpop.core.base.enums.SourceType;
|
||||
import com.mybatisflex.annotation.Column;
|
||||
import com.mybatisflex.annotation.Id;
|
||||
import com.mybatisflex.annotation.Table;
|
||||
import java.io.Serializable;
|
||||
import java.time.LocalDateTime;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.*;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
/**
|
||||
* 系统-品牌表 实体类。
|
||||
*
|
||||
* @author DB
|
||||
* @since 2023-10-25
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper=false)
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Accessors(chain = true)
|
||||
@Table(value = "cp_sys_brand", onInsert = BaseInsertListener.class, onUpdate = BaseUpdateListener.class, mapperGenerateEnable = false)
|
||||
public class Brand extends BaseEntity implements Serializable {
|
||||
|
||||
/**
|
||||
* 主键
|
||||
*/
|
||||
@Id
|
||||
private String id;
|
||||
|
||||
/**
|
||||
* 品牌名
|
||||
*/
|
||||
private String brandName;
|
||||
|
||||
/**
|
||||
* 微信商户号
|
||||
*/
|
||||
private String wxMchId;
|
||||
|
||||
/**
|
||||
* 微信支付密钥
|
||||
*/
|
||||
private String wxMchKey;
|
||||
|
||||
/**
|
||||
* 微信支付keypath
|
||||
*/
|
||||
private String wxKeyPath;
|
||||
|
||||
/**
|
||||
* 数据来源
|
||||
*/
|
||||
private SourceType sourceType;
|
||||
|
||||
/**
|
||||
* 逻辑删除(0否1是)
|
||||
*/
|
||||
@Column(isLogicDelete = true)
|
||||
private Boolean isDelete;
|
||||
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
package com.cpop.system.business.mapper;
|
||||
|
||||
import com.mybatisflex.core.BaseMapper;
|
||||
import com.cpop.system.business.entity.Brand;
|
||||
|
||||
/**
|
||||
* 系统-品牌表 映射层。
|
||||
*
|
||||
* @author DB
|
||||
* @since 2023-10-25
|
||||
*/
|
||||
public interface BrandMapper extends BaseMapper<Brand> {
|
||||
|
||||
}
|
||||
@ -0,0 +1,34 @@
|
||||
package com.cpop.system.business.service;
|
||||
|
||||
import com.cpop.system.business.bo.BrandPageBo;
|
||||
import com.cpop.system.business.vo.BrandPageVo;
|
||||
import com.mybatisflex.core.paginate.Page;
|
||||
import com.mybatisflex.core.service.IService;
|
||||
import com.cpop.system.business.entity.Brand;
|
||||
|
||||
/**
|
||||
* 系统-品牌表 服务层。
|
||||
*
|
||||
* @author DB
|
||||
* @since 2023-10-25
|
||||
*/
|
||||
public interface BrandService extends IService<Brand> {
|
||||
|
||||
/**
|
||||
* @descriptions 导入果酱品牌
|
||||
* @author DB
|
||||
* @date 2023/10/25 15:54
|
||||
* @param brandId 果酱品牌id
|
||||
* @return: void
|
||||
*/
|
||||
void importJamboxBrand(String brandId);
|
||||
|
||||
/**
|
||||
* @descriptions 查询品牌分页列表
|
||||
* @author DB
|
||||
* @date 2023/10/25 17:32
|
||||
* @param bo 请求参数
|
||||
* @return: com.mybatisflex.core.paginate.Page<com.cpop.system.business.vo.BrandPageVo>
|
||||
*/
|
||||
Page<BrandPageVo> getBrandPage(BrandPageBo bo);
|
||||
}
|
||||
@ -0,0 +1,108 @@
|
||||
package com.cpop.system.business.service.impl;
|
||||
|
||||
import com.cpop.core.base.entity.LoginUser;
|
||||
import com.cpop.core.base.entity.PageDomain;
|
||||
import com.cpop.core.base.enums.SourceType;
|
||||
import com.cpop.core.base.exception.ServiceException;
|
||||
import com.cpop.core.utils.SecurityUtils;
|
||||
import com.cpop.core.utils.sql.SqlUtils;
|
||||
import com.cpop.system.business.bo.BrandPageBo;
|
||||
import com.cpop.system.business.vo.BrandPageVo;
|
||||
import com.mybatisflex.core.datasource.DataSourceKey;
|
||||
import com.mybatisflex.core.paginate.Page;
|
||||
import com.mybatisflex.core.query.QueryWrapper;
|
||||
import com.mybatisflex.core.row.Db;
|
||||
import com.mybatisflex.core.row.DbChain;
|
||||
import com.mybatisflex.core.row.Row;
|
||||
import com.mybatisflex.core.row.RowKey;
|
||||
import com.mybatisflex.spring.service.impl.ServiceImpl;
|
||||
import com.cpop.system.business.entity.Brand;
|
||||
import com.cpop.system.business.mapper.BrandMapper;
|
||||
import com.cpop.system.business.service.BrandService;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
import static com.cpop.system.business.entity.table.BrandTableDef.BRAND;
|
||||
|
||||
/**
|
||||
* 系统-品牌表 服务层实现。
|
||||
*
|
||||
* @author DB
|
||||
* @since 2023-10-25
|
||||
*/
|
||||
@Service("brandService")
|
||||
public class BrandServiceImpl extends ServiceImpl<BrandMapper, Brand> implements BrandService {
|
||||
|
||||
/**
|
||||
* @descriptions 导入果酱品牌
|
||||
* @author DB
|
||||
* @date 2023/10/25 15:54
|
||||
* @param brandId 果酱品牌id
|
||||
* @return: void
|
||||
*/
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void importJamboxBrand(String brandId) {
|
||||
//获取果酱品牌信息
|
||||
Row brand;
|
||||
try {
|
||||
DataSourceKey.use("jambox");
|
||||
brand = Db.selectOneByQuery(QueryWrapper.create()
|
||||
.select()
|
||||
.from("t_brand_info")
|
||||
.where("id = ?", brandId));
|
||||
if (brand == null) {
|
||||
throw new ServiceException("获取果酱品牌失败,请联系相关人员");
|
||||
}
|
||||
} finally {
|
||||
DataSourceKey.clear();
|
||||
}
|
||||
//查询品牌是否已经录入
|
||||
long count = DbChain.table("cp_j_brand_extend")
|
||||
.where("brand_cloud_id = ?", brand.getString("brandId"))
|
||||
.and("is_delete = 0")
|
||||
.count();
|
||||
if (count > 0) {
|
||||
throw new ServiceException("当前品牌已导入,请勿重复导入");
|
||||
}
|
||||
Brand sysBrand = new Brand();
|
||||
sysBrand.setBrandName(brand.getString("name"))
|
||||
.setWxMchId(brand.getString("wxMchId"))
|
||||
.setWxMchKey(brand.getString("wxMchKey"))
|
||||
.setWxKeyPath(brand.getString("wxKeyPath"))
|
||||
.setSourceType(SourceType.JAMBOX);
|
||||
this.save(sysBrand);
|
||||
//果酱拓展表信息
|
||||
LocalDateTime now = LocalDateTime.now();
|
||||
LoginUser loginUser = SecurityUtils.getInstance().getLoginUser();
|
||||
DbChain.table("cp_j_brand_extend")
|
||||
.setId(RowKey.SNOW_FLAKE_ID)
|
||||
.set("brand_id", sysBrand.getId())
|
||||
.set("brand_cloud_id", brand.getString("brandId"))
|
||||
.set("background_url", brand.getString("brandBg"))
|
||||
.set("create_time", now)
|
||||
.set("update_time", now)
|
||||
.set("create_user_id", loginUser.getUserId())
|
||||
.set("update_user_id", loginUser.getUserId())
|
||||
.save();
|
||||
}
|
||||
|
||||
/**
|
||||
* @descriptions 查询品牌分页列表
|
||||
* @author DB
|
||||
* @date 2023/10/25 17:32
|
||||
* @param bo 请求参数
|
||||
* @return: com.mybatisflex.core.paginate.Page<com.cpop.system.business.vo.BrandPageVo>
|
||||
*/
|
||||
@Override
|
||||
public Page<BrandPageVo> getBrandPage(BrandPageBo bo) {
|
||||
PageDomain pageDomain = SqlUtils.getInstance().getPageDomain();
|
||||
return this.mapper.paginateAs(pageDomain.getPageNum(),pageDomain.getPageSize(),
|
||||
QueryWrapper.create()
|
||||
.select(BRAND.ID,BRAND.BRAND_NAME,BRAND.WX_MCH_ID,BRAND.CREATE_TIME)
|
||||
.and(BRAND.BRAND_NAME.like(bo.getName())),
|
||||
BrandPageVo.class);
|
||||
}
|
||||
}
|
||||
@ -36,7 +36,7 @@ public class LoginServiceImpl implements LoginService {
|
||||
//获取当前登录用户信息
|
||||
LoginUser loginUser = SecurityUtils.getInstance().getLoginUser();
|
||||
//获取申请员工信息
|
||||
JSONObject loginStaffInfo = SecurityUtils.getInstance().getLoginStaffInfo();
|
||||
JSONObject loginStaffInfo = SecurityUtils.getInstance().getLoginUserInfo();
|
||||
return new LoginUserInfoVo()
|
||||
.setUserId(loginUser.getUserId())
|
||||
.setUsername(loginUser.getUsername())
|
||||
|
||||
@ -45,7 +45,7 @@ public class MenuServiceImpl extends ServiceImpl<MenuMapper, Menu> implements Me
|
||||
//获取用户信息
|
||||
LoginUser user = SecurityUtils.getInstance().getLoginUser();
|
||||
//获取申请员工信息
|
||||
JSONObject loginStaffInfo = SecurityUtils.getInstance().getLoginStaffInfo();
|
||||
JSONObject loginStaffInfo = SecurityUtils.getInstance().getLoginUserInfo();
|
||||
//超级管理员
|
||||
if (Constants.SUPER_ADMIN.equals(user.getUsername())) {
|
||||
//获取菜单
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
package com.cpop.jambox.business.vo;
|
||||
package com.cpop.system.business.vo;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import com.cpop.core.annontation.StringArrayConvert;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
@ -13,8 +13,7 @@ import java.time.LocalDateTime;
|
||||
/**
|
||||
* Description:
|
||||
* date: 2023/6/1 18:08
|
||||
*
|
||||
* @Author ST
|
||||
* @author DB
|
||||
*/
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
@ -32,39 +31,14 @@ public class BrandPageVo implements Serializable {
|
||||
/**
|
||||
* 云函数id
|
||||
*/
|
||||
@ApiModelProperty("云函数id")
|
||||
private String brandCloudId;
|
||||
|
||||
/**
|
||||
* 品牌名
|
||||
*/
|
||||
@ApiModelProperty("品牌名")
|
||||
private String name;
|
||||
private String brandName;
|
||||
|
||||
/**
|
||||
* 背景地址
|
||||
* 微信商户号
|
||||
*/
|
||||
@StringArrayConvert
|
||||
@ApiModelProperty("背景地址")
|
||||
private String backgroundUrl;
|
||||
|
||||
/**
|
||||
* 顾问名
|
||||
*/
|
||||
@ApiModelProperty("顾问名")
|
||||
private String consultantName;
|
||||
|
||||
/**
|
||||
* 品牌管理员工id
|
||||
*/
|
||||
@ApiModelProperty("品牌管理员工id")
|
||||
private String brandStaffId;
|
||||
|
||||
/**
|
||||
* 品牌管理员工
|
||||
*/
|
||||
@ApiModelProperty("品牌管理员工")
|
||||
private String brandStaffName;
|
||||
@ApiModelProperty("微信商户号")
|
||||
private String wxMchId;
|
||||
|
||||
/**
|
||||
* 创建时间
|
||||
@ -2,6 +2,6 @@
|
||||
<!DOCTYPE mapper
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.cpop.jambox.business.mapper.BrandMapper">
|
||||
<mapper namespace="com.cpop.system.business.mapper.BrandMapper">
|
||||
|
||||
</mapper>
|
||||
6
pom.xml
6
pom.xml
@ -188,6 +188,12 @@
|
||||
<artifactId>weixin-java-cp</artifactId>
|
||||
<version>${wechat-java.version}</version>
|
||||
</dependency>
|
||||
<!--微信支付-->
|
||||
<dependency>
|
||||
<groupId>com.github.binarywang</groupId>
|
||||
<artifactId>weixin-java-pay</artifactId>
|
||||
<version>${wechat-java.version}</version>
|
||||
</dependency>
|
||||
<!-- 腾讯云-->
|
||||
<dependency>
|
||||
<groupId>com.qcloud</groupId>
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user