企业初始化

This commit is contained in:
zhangchenbiao
2023-05-29 14:08:05 +08:00
parent 10ea204bfd
commit 112d874931
54 changed files with 1915 additions and 62 deletions

View File

@@ -57,5 +57,19 @@
<orderEntry type="library" name="Maven: org.springframework:spring-aop:5.2.5.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-context:5.2.5.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-expression:5.2.5.RELEASE" level="project" />
<orderEntry type="library" name="Maven: cn.hutool:hutool-all:5.0.7" level="project" />
<orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper-spring-boot-starter:1.4.6" level="project" />
<orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-starter:2.2.2" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-jdbc:3.0.2" level="project" />
<orderEntry type="library" name="Maven: com.zaxxer:HikariCP:3.4.2" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-jdbc:5.2.5.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-tx:5.2.5.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-autoconfigure:2.2.2" level="project" />
<orderEntry type="library" name="Maven: org.mybatis:mybatis:3.5.9" level="project" />
<orderEntry type="library" name="Maven: org.mybatis:mybatis-spring:2.0.7" level="project" />
<orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper-spring-boot-autoconfigure:1.4.6" level="project" />
<orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper:5.3.2" level="project" />
<orderEntry type="library" name="Maven: com.github.jsqlparser:jsqlparser:4.5" level="project" />
<orderEntry type="library" name="Maven: com.coolstore:coolstore-base:1.5.3" level="project" />
</component>
</module>

View File

@@ -58,6 +58,18 @@
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
</dependency>
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>com.coolstore</groupId>
<artifactId>coolstore-base</artifactId>
</dependency>
</dependencies>
</project>

View File

@@ -22,6 +22,13 @@ public class CommonConstants {
public static final int REFRESH_TOKEN_EXPIRE = 60*60*24*30;
/**
* 系统用户id
*/
public static final String SYSTEM_USER_ID = "system";
public static final String COMMA = ",";
public static final int ZERO = 0;
public static final int ONE = 1;
public static final int TWO = 2;

View File

@@ -0,0 +1,422 @@
package com.cool.store.utils;
import org.apache.commons.collections4.MapUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.ibatis.session.ExecutorType;
import org.apache.ibatis.session.SqlSession;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.SqlSessionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.support.EncodedResource;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.jdbc.datasource.init.*;
import org.springframework.lang.Nullable;
import org.springframework.stereotype.Component;
import org.springframework.util.Assert;
import org.springframework.util.StringUtils;
import java.io.IOException;
import java.io.LineNumberReader;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
/**
* @author zhangchenbiao
* @FileName: ScriptUtil
* @Description: 脚本工具
* @date 2022-01-21 16:48
*/
@Component
public class ScriptUtil {
/**
* Default statement separator within SQL scripts: {@code ";"}.
*/
public static final String DEFAULT_STATEMENT_SEPARATOR = ";";
/**
* Fallback statement separator within SQL scripts: {@code "\n"}.
* <p>Used if neither a custom separator nor the
* {@link #DEFAULT_STATEMENT_SEPARATOR} is present in a given script.
*/
public static final String FALLBACK_STATEMENT_SEPARATOR = "\n";
public static final String EOF_STATEMENT_SEPARATOR = "^^^ END OF SCRIPT ^^^";
/**
* Default prefix for single-line comments within SQL scripts: {@code "--"}.
*/
public static final String DEFAULT_COMMENT_PREFIX = "--";
/**
* Default start delimiter for block comments within SQL scripts: {@code "/*"}.
*/
public static final String DEFAULT_BLOCK_COMMENT_START_DELIMITER = "/*";
/**
* Default end delimiter for block comments within SQL scripts: <code>"*&#47;"</code>.
*/
public static final String DEFAULT_BLOCK_COMMENT_END_DELIMITER = "*/";
/**
* 变量开始字符$
*/
public static final String VARIABLE_START_DELIMITER = "\\$\\{";
/**
* 变量开始字符#
*/
public static final String VARIABLE_START_DELIMITER2 = "\\#\\{";
/**
* 变量结束字符
*/
public static final String VARIABLE_END_DELIMITER = "}";
/**
* 单引号
*/
public static final String SINGLE_QUOTE = "'";
private final SqlSessionTemplate sqlSessionTemplate;
private final DataSourceTransactionManager dataSourceTransactionManager;
@Autowired
public ScriptUtil(SqlSessionTemplate sqlSessionTemplate, DataSourceTransactionManager dataSourceTransactionManager) {
this.sqlSessionTemplate = sqlSessionTemplate;
this.dataSourceTransactionManager = dataSourceTransactionManager;
}
private static final Log logger = LogFactory.getLog(ScriptUtil.class);
/**
* Split an SQL script into separate statements delimited by the provided
* separator string. Each individual statement will be added to the provided
* {@code List}.
* <p>Within the script, the provided {@code commentPrefix} will be honored:
* any text beginning with the comment prefix and extending to the end of the
* line will be omitted from the output. Similarly, the provided
* {@code blockCommentStartDelimiter} and {@code blockCommentEndDelimiter}
* delimiters will be honored: any text enclosed in a block comment will be
* omitted from the output. In addition, multiple adjacent whitespace characters
* will be collapsed into a single space.
* @param resource the resource from which the script was read
* @param script the SQL script; never {@code null} or empty
* @param separator text separating each statement &mdash; typically a ';' or
* newline character; never {@code null}
* @param commentPrefix the prefix that identifies SQL line comments &mdash;
* typically "--"; never {@code null} or empty
* @param blockCommentStartDelimiter the <em>start</em> block comment delimiter;
* never {@code null} or empty
* @param blockCommentEndDelimiter the <em>end</em> block comment delimiter;
* never {@code null} or empty
* @param statements the list that will contain the individual statements
* @throws ScriptException if an error occurred while splitting the SQL script
*/
public static void splitSqlScript(@Nullable EncodedResource resource, String script,
String separator, String commentPrefix, String blockCommentStartDelimiter,
String blockCommentEndDelimiter, List<String> statements) throws ScriptException {
Assert.hasText(script, "'script' must not be null or empty");
Assert.notNull(separator, "'separator' must not be null");
Assert.hasText(commentPrefix, "'commentPrefix' must not be null or empty");
Assert.hasText(blockCommentStartDelimiter, "'blockCommentStartDelimiter' must not be null or empty");
Assert.hasText(blockCommentEndDelimiter, "'blockCommentEndDelimiter' must not be null or empty");
StringBuilder sb = new StringBuilder();
boolean inSingleQuote = false;
boolean inDoubleQuote = false;
boolean inEscape = false;
for (int i = 0; i < script.length(); i++) {
char c = script.charAt(i);
if (inEscape) {
inEscape = false;
sb.append(c);
continue;
}
// MySQL style escapes
if (c == '\\') {
inEscape = true;
sb.append(c);
continue;
}
if (!inDoubleQuote && (c == '\'')) {
inSingleQuote = !inSingleQuote;
}
else if (!inSingleQuote && (c == '"')) {
inDoubleQuote = !inDoubleQuote;
}
if (!inSingleQuote && !inDoubleQuote) {
if (script.startsWith(separator, i)) {
// We've reached the end of the current statement
if (sb.length() > 0) {
statements.add(sb.toString());
sb = new StringBuilder();
}
i += separator.length() - 1;
continue;
}
else if (script.startsWith(commentPrefix, i)) {
// Skip over any content from the start of the comment to the EOL
int indexOfNextNewline = script.indexOf('\n', i);
if (indexOfNextNewline > i) {
i = indexOfNextNewline;
continue;
}
else {
// If there's no EOL, we must be at the end of the script, so stop here.
break;
}
}
else if (script.startsWith(blockCommentStartDelimiter, i)) {
// Skip over any block comments
int indexOfCommentEnd = script.indexOf(blockCommentEndDelimiter, i);
if (indexOfCommentEnd > i) {
i = indexOfCommentEnd + blockCommentEndDelimiter.length() - 1;
continue;
}
else {
throw new ScriptParseException(
"Missing block comment end delimiter: " + blockCommentEndDelimiter, resource);
}
}
else if (c == ' ' || c == '\n' || c == '\t') {
// Avoid multiple adjacent whitespace characters
if (sb.length() > 0 && sb.charAt(sb.length() - 1) != ' ') {
c = ' ';
}
else {
continue;
}
}
}
sb.append(c);
}
if (StringUtils.hasText(sb)) {
statements.add(sb.toString());
}
}
/**
* Read a script from the provided resource, using the supplied comment prefix
* and statement separator, and build a {@code String} containing the lines.
* <p>Lines <em>beginning</em> with the comment prefix are excluded from the
* results; however, line comments anywhere else &mdash; for example, within
* a statement &mdash; will be included in the results.
* @param resource the {@code EncodedResource} containing the script
* to be processed
* @param commentPrefix the prefix that identifies comments in the SQL script &mdash;
* typically "--"
* @param separator the statement separator in the SQL script &mdash; typically ";"
* @return a {@code String} containing the script lines
* @throws IOException in case of I/O errors
*/
private static String readScript(EncodedResource resource, @Nullable String commentPrefix,
@Nullable String separator) throws IOException {
LineNumberReader lnr = new LineNumberReader(resource.getReader());
try {
return readScript(lnr, commentPrefix, separator);
}
finally {
lnr.close();
}
}
/**
* Read a script from the provided {@code LineNumberReader}, using the supplied
* comment prefix and statement separator, and build a {@code String} containing
* the lines.
* <p>Lines <em>beginning</em> with the comment prefix are excluded from the
* results; however, line comments anywhere else &mdash; for example, within
* a statement &mdash; will be included in the results.
* @param lineNumberReader the {@code LineNumberReader} containing the script
* to be processed
* @param commentPrefix the prefix that identifies comments in the SQL script &mdash;
* typically "--"
* @param separator the statement separator in the SQL script &mdash; typically ";"
* @return a {@code String} containing the script lines
* @throws IOException in case of I/O errors
*/
public static String readScript(LineNumberReader lineNumberReader, @Nullable String commentPrefix,
@Nullable String separator) throws IOException {
String currentStatement = lineNumberReader.readLine();
StringBuilder scriptBuilder = new StringBuilder();
while (currentStatement != null) {
if (commentPrefix != null && !currentStatement.startsWith(commentPrefix)) {
if (scriptBuilder.length() > 0) {
scriptBuilder.append('\n');
}
scriptBuilder.append(currentStatement);
}
currentStatement = lineNumberReader.readLine();
}
appendSeparatorToScriptIfNecessary(scriptBuilder, separator);
return scriptBuilder.toString();
}
private static void appendSeparatorToScriptIfNecessary(StringBuilder scriptBuilder, @Nullable String separator) {
if (separator == null) {
return;
}
String trimmed = separator.trim();
if (trimmed.length() == separator.length()) {
return;
}
// separator ends in whitespace, so we might want to see if the script is trying
// to end the same way
if (scriptBuilder.lastIndexOf(trimmed) == scriptBuilder.length() - trimmed.length()) {
scriptBuilder.append(separator.substring(trimmed.length()));
}
}
/**
* Does the provided SQL script contain the specified delimiter?
* @param script the SQL script
* @param delim the string delimiting each statement - typically a ';' character
*/
public static boolean containsSqlScriptDelimiters(String script, String delim) {
boolean inLiteral = false;
boolean inEscape = false;
for (int i = 0; i < script.length(); i++) {
char c = script.charAt(i);
if (inEscape) {
inEscape = false;
continue;
}
// MySQL style escapes
if (c == '\\') {
inEscape = true;
continue;
}
if (c == '\'') {
inLiteral = !inLiteral;
}
if (!inLiteral && script.startsWith(delim, i)) {
return true;
}
}
return false;
}
public void executeSqlScript(EncodedResource resource, Map<String, Object> params) throws ScriptException {
String commentPrefix = DEFAULT_COMMENT_PREFIX;
String separator = DEFAULT_STATEMENT_SEPARATOR;
try {
if (logger.isDebugEnabled()) {
logger.debug("Executing SQL script from " + resource);
}
long startTime = System.currentTimeMillis();
String script;
try {
script = readScript(resource, commentPrefix, separator);
}catch (IOException ex) {
throw new CannotReadScriptException(resource, ex);
}
if (!EOF_STATEMENT_SEPARATOR.equals(separator) && !containsSqlScriptDelimiters(script, separator)) {
separator = FALLBACK_STATEMENT_SEPARATOR;
}
List<String> statements = new ArrayList<>();
splitSqlScript(resource, script, separator, commentPrefix, DEFAULT_BLOCK_COMMENT_START_DELIMITER,
DEFAULT_BLOCK_COMMENT_END_DELIMITER, statements);
int stmtNumber = 0;
SqlSession sqlSession = SqlSessionUtils.getSqlSession(
sqlSessionTemplate.getSqlSessionFactory(), ExecutorType.BATCH,
sqlSessionTemplate.getPersistenceExceptionTranslator());
Connection connection = null;
Statement stmt = null;
try {
connection = sqlSession.getConnection();
stmt = connection.createStatement();
connection.setAutoCommit(false);
for (String statement : statements) {
stmtNumber++;
try {
statement = sqlVariableReplace(statement, params);
stmt.execute(statement);
int rowsAffected = stmt.getUpdateCount();
logger.info(rowsAffected + " returned as update count for SQL: " + statement);
}catch (SQLException ex) {
logger.error(ex);
ex.printStackTrace();
connection.rollback();
sqlSession.clearCache();
throw new ScriptStatementFailedException(statement, stmtNumber, resource, ex);
}
}
connection.commit();
sqlSession.clearCache();
}catch (Exception e){
logger.error(e);
e.printStackTrace();
connection.rollback();
sqlSession.clearCache();
throw new Exception(e);
}finally {
try {
if(Objects.nonNull(stmt)){
stmt.close();
}
}catch (Throwable ex) {
logger.trace("Could not close JDBC Statement", ex);
}
try {
if(Objects.nonNull(connection)){
connection.close();
}
} catch (SQLException throwables) {
logger.trace("Could not close JDBC Statement", throwables);
}
}
long elapsedTime = System.currentTimeMillis() - startTime;
if (logger.isDebugEnabled()) {
logger.debug("Executed SQL script from " + resource + " in " + elapsedTime + " ms.");
}
}catch (Exception ex) {
if (ex instanceof ScriptException) {
throw (ScriptException) ex;
}
throw new UncategorizedScriptException(
"Failed to execute database script from resource [" + resource + "]", ex);
}
}
/**
* 处理sql变量
* @param statement
* @param params
* @return
*/
public String sqlVariableReplace(String statement, Map<String, Object> params){
if(MapUtils.isEmpty(params)){
return statement;
}
if(!statement.contains(VARIABLE_START_DELIMITER) && !statement.contains(VARIABLE_END_DELIMITER)){
return statement;
}
for (String key : params.keySet()) {
String realKey = VARIABLE_START_DELIMITER + key + VARIABLE_END_DELIMITER;
String realKey2 = VARIABLE_START_DELIMITER2 + key + VARIABLE_END_DELIMITER;
statement = statement.replaceAll(realKey, params.get(key).toString());
statement = statement.replaceAll(realKey2, SINGLE_QUOTE + params.get(key) + SINGLE_QUOTE);
}
return statement;
}
}

View File

@@ -0,0 +1,30 @@
package com.cool.store.utils;
import cn.hutool.core.util.IdUtil;
import org.apache.commons.lang3.StringUtils;
/**
* 唯一性ID工具类
*
* @author Aaron
* @ClassName UUIDUtils
* @Description 唯一性ID工具类
*/
public class UUIDUtils {
/**
* 简化的UUID去掉了横线使用性能更好的ThreadLocalRandom生成UUID
*/
public static String get32UUID() {
return IdUtil.fastSimpleUUID();
}
public static String get8UUID() {
return StringUtils.substring(IdUtil.fastSimpleUUID(),1,9);
}
public static Long get8LongUuid() {
long uuid = (int) (Math.random() * 90000000 + 10000000);
return uuid;
}
}

View File

@@ -84,12 +84,7 @@
<orderEntry type="library" name="Maven: org.springframework:spring-webmvc:5.2.5.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-aop:5.2.5.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-expression:5.2.5.RELEASE" level="project" />
<orderEntry type="library" name="Maven: mysql:mysql-connector-java:8.0.18" level="project" />
<orderEntry type="library" name="Maven: com.google.protobuf:protobuf-java:3.6.1" level="project" />
<orderEntry type="library" name="Maven: com.alibaba:druid-spring-boot-starter:1.1.20" level="project" />
<orderEntry type="library" name="Maven: com.alibaba:druid:1.1.20" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.2.6.RELEASE" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.mybatis.generator:mybatis-generator-core:1.3.7" level="project" />
<orderEntry type="library" name="Maven: cn.hutool:hutool-all:5.0.7" level="project" />
<orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper-spring-boot-starter:1.4.6" level="project" />
<orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-starter:2.2.2" level="project" />
<orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-autoconfigure:2.2.2" level="project" />
@@ -98,5 +93,12 @@
<orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper-spring-boot-autoconfigure:1.4.6" level="project" />
<orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper:5.3.2" level="project" />
<orderEntry type="library" name="Maven: com.github.jsqlparser:jsqlparser:4.5" level="project" />
<orderEntry type="library" name="Maven: com.coolstore:coolstore-base:1.5.3" level="project" />
<orderEntry type="library" name="Maven: mysql:mysql-connector-java:8.0.18" level="project" />
<orderEntry type="library" name="Maven: com.google.protobuf:protobuf-java:3.6.1" level="project" />
<orderEntry type="library" name="Maven: com.alibaba:druid-spring-boot-starter:1.1.20" level="project" />
<orderEntry type="library" name="Maven: com.alibaba:druid:1.1.20" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.2.6.RELEASE" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.mybatis.generator:mybatis-generator-core:1.3.7" level="project" />
</component>
</module>

View File

@@ -50,10 +50,6 @@
<version>1.3.7</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
</dependency>
</dependencies>
</project>

View File

@@ -6,6 +6,8 @@ import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
/**
* @author zhangchenbiao
@@ -25,4 +27,18 @@ public class EnterpriseUserDAO {
return enterpriseUserMapper.getUserInfoById(enterpriseId, userId);
}
public void batchInsertOrUpdate(String eid, List<EnterpriseUserDO> users) {
List<EnterpriseUserDO> result = new ArrayList<>();
users.forEach(user -> {
if (StringUtils.isBlank(user.getUnionid()) || StringUtils.isBlank(user.getUserId())) {
return;
}
if (StringUtils.isBlank(user.getName())) {
user.setName(user.getUserId());
}
result.add(user);
});
enterpriseUserMapper.batchInsertOrUpdate(eid, result);
}
}

View File

@@ -1,7 +1,13 @@
package com.cool.store.dao;
import com.cool.store.dto.enterprise.EnterpriseUserRole;
import com.cool.store.mapper.EnterpriseUserMapper;
import com.cool.store.mapper.EnterpriseUserRoleMapper;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
/**
* @author zhangchenbiao
* @date 2023-05-19 02:59
@@ -9,4 +15,11 @@ import org.springframework.stereotype.Service;
@Service
public class EnterpriseUserRoleDAO {
@Resource
private EnterpriseUserRoleMapper enterpriseUserRoleMapper;
public Boolean insertBatchUserRole(String eid, List<EnterpriseUserRole> userRole) {
return enterpriseUserRoleMapper.insertBatchUserRole(eid, userRole);
}
}

View File

@@ -1,6 +1,7 @@
package com.cool.store.dao;
import com.cool.store.entity.SysRoleDO;
import com.cool.store.enums.RoleEnum;
import com.cool.store.mapper.SysRoleMapper;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
@@ -30,4 +31,13 @@ public class SysRoleDAO {
return sysRoleMapper.getHighestPrioritySysRoleDoByUserId(enterpriseId, userId);
}
public Long getRoleIdByRoleEnum(String eid, String roleEnum) {
SysRoleDO roleByRoleEnum = sysRoleMapper.getRoleByRoleEnum(eid, roleEnum);
if(roleByRoleEnum==null){
return Long.valueOf(RoleEnum.getByCode(roleEnum).getId());
}
return roleByRoleEnum.getId();
}
}

View File

@@ -3,6 +3,8 @@ package com.cool.store.mapper;
import com.cool.store.entity.EnterpriseUserDO;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* @author zhangchenbiao
* @date 2023-05-19 02:58
@@ -30,4 +32,12 @@ public interface EnterpriseUserMapper {
* @return
*/
EnterpriseUserDO getUserInfoById(@Param("enterpriseId")String enterpriseId, @Param("userId")String userId);
/**
* 批量插入或更新
* @param enterpriseId
* @param users
*/
void batchInsertOrUpdate(@Param("enterpriseId") String enterpriseId, @Param("list") List<EnterpriseUserDO> users);
}

View File

@@ -1,8 +1,11 @@
package com.cool.store.mapper;
import com.cool.store.dto.enterprise.EnterpriseUserRole;
import com.cool.store.entity.EnterpriseUserRoleDO;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* @author zhangchenbiao
* @date 2023-05-19 02:59
@@ -22,4 +25,12 @@ public interface EnterpriseUserRoleMapper {
* dateTime:2023-05-19 02:59
*/
int updateByPrimaryKeySelective(@Param("record") EnterpriseUserRoleDO record, @Param("enterpriseId") String enterpriseId);
/**
* 批量插入用户角色
* @param enterpriseId
* @param userRoles
* @return
*/
Boolean insertBatchUserRole(@Param("eid") String enterpriseId, @Param("userRoles") List<EnterpriseUserRole> userRoles);
}

View File

@@ -1,8 +1,11 @@
package com.cool.store.mapper;
import com.cool.store.dto.enterprise.EnterpriseUserRole;
import com.cool.store.entity.SysRoleDO;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* @author zhangchenbiao
* @date 2023-05-19 03:00
@@ -25,4 +28,6 @@ public interface SysRoleMapper {
SysRoleDO getHighestPrioritySysRoleDoByUserId(@Param("enterpriseId") String enterpriseId, @Param("userId") String userId);
SysRoleDO getRoleByRoleEnum(@Param("eid") String enterpriseId, @Param("roleEnum") String roleEnum);
}

View File

@@ -398,4 +398,73 @@
where
user_id = #{userId}
</select>
<insert id="batchInsertOrUpdate" parameterType="java.util.List">
insert into enterprise_user_${eid} (
id,
user_id,
`name`,
mobile,
email,
active,
order_in_depts,
main_admin,
is_admin,
is_boss,
dingId,
unionid,
is_leader_in_depts,
is_hide,
departments,
`position`,
avatar,
jobnumber,
extattr,
roles,
is_leader,
create_time
) values
<foreach collection="list" item="it" separator=",">
(
#{it.id, jdbcType=VARCHAR},
#{it.userId, jdbcType=VARCHAR},
#{it.name, jdbcType=VARCHAR},
#{it.mobile, jdbcType=VARCHAR},
#{it.email, jdbcType=VARCHAR},
#{it.active, jdbcType=BOOLEAN},
#{it.orderInDepts, jdbcType=VARCHAR},
#{it.mainAdmin, jdbcType=BOOLEAN},
#{it.isAdmin, jdbcType=BOOLEAN},
#{it.isBoss, jdbcType=BOOLEAN},
#{it.dingid, jdbcType=VARCHAR},
#{it.unionid, jdbcType=VARCHAR},
#{it.isLeaderInDepts, jdbcType=VARCHAR},
#{it.isHide, jdbcType=BOOLEAN},
#{it.departments, jdbcType=VARCHAR},
#{it.position, jdbcType=VARCHAR},
#{it.avatar, jdbcType=VARCHAR},
#{it.jobnumber, jdbcType=VARCHAR},
#{it.extattr, jdbcType=VARCHAR},
#{it.roles, jdbcType=VARCHAR},
#{it.isLeader, jdbcType=BOOLEAN},
sysdate()
)
</foreach>
ON DUPLICATE KEY UPDATE
departments=values(departments),
`name`=values(name),
main_admin=values(main_admin),
is_admin=values(is_admin),
mobile = values(mobile),
order_in_depts=values(order_in_depts),
is_leader_in_depts=values(is_leader_in_depts),
avatar=values(avatar),
active=values(active),
`position`=values(position),
roles=values(roles),
jobnumber=values(jobnumber)
</insert>
</mapper>

View File

@@ -60,4 +60,13 @@
</set>
where id = #{record.id}
</update>
<insert id="insertBatchUserRole">
insert ignore into enterprise_user_role_${eid}
(role_id, user_id ,create_time)
values
<foreach collection="userRoles" item="userRole" separator=",">
(#{userRole.roleId}, #{userRole.userId} ,#{userRole.createTime})
</foreach>
</insert>
</mapper>

View File

@@ -180,4 +180,21 @@
c.priority is null, c.priority, position_type desc
LIMIT 1
</select>
<select id="getRoleByRoleEnum" resultMap="BaseResultMap">
select
id as id,
role_name as roleName,
role_auth as roleAuth,
is_internal as isInternal,
`source` as source,
priority as priority,
app_menu as appMenu,
position_type as positionType,
role_enum as roleEnum
from
sys_role_${eid}
where
role_enum = #{roleEnum}
</select>
</mapper>

View File

@@ -58,6 +58,20 @@
<orderEntry type="library" name="Maven: org.springframework:spring-aop:5.2.5.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-context:5.2.5.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-expression:5.2.5.RELEASE" level="project" />
<orderEntry type="library" name="Maven: cn.hutool:hutool-all:5.0.7" level="project" />
<orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper-spring-boot-starter:1.4.6" level="project" />
<orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-starter:2.2.2" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-jdbc:3.0.2" level="project" />
<orderEntry type="library" name="Maven: com.zaxxer:HikariCP:3.4.2" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-jdbc:5.2.5.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-tx:5.2.5.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-autoconfigure:2.2.2" level="project" />
<orderEntry type="library" name="Maven: org.mybatis:mybatis:3.5.9" level="project" />
<orderEntry type="library" name="Maven: org.mybatis:mybatis-spring:2.0.7" level="project" />
<orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper-spring-boot-autoconfigure:1.4.6" level="project" />
<orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper:5.3.2" level="project" />
<orderEntry type="library" name="Maven: com.github.jsqlparser:jsqlparser:4.5" level="project" />
<orderEntry type="library" name="Maven: com.coolstore:coolstore-base:1.5.3" level="project" />
<orderEntry type="library" name="Maven: com.github.xiaoymin:knife4j-spring-boot-starter:2.0.4" level="project" />
<orderEntry type="library" name="Maven: com.github.xiaoymin:knife4j-spring-boot-autoconfigure:2.0.4" level="project" />
<orderEntry type="library" name="Maven: com.github.xiaoymin:knife4j-spring:2.0.4" level="project" />

View File

@@ -0,0 +1,21 @@
package com.cool.store.dto.enterprise;
import lombok.Data;
/**
* @author chenyupeng
* @since 2022/1/26
*/
@Data
public class EnterpriseInitDTO {
private String appType;
private String corpId;
private String eid;
private String dbName;
private String userId;
}

View File

@@ -0,0 +1,42 @@
package com.cool.store.dto.enterprise;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 企业开通相关的参数
* @author xugangkun
* @date 2022/2/11 14:14
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class EnterpriseOpenMsg {
/**
* 企业id
*/
private String eid;
/**
* corpId
*/
private String corpId;
/**
* 开通类型
*/
private String appType;
/**
* 授权用户id
*/
private String authUserId;
/**
* 数据库名
*/
private String dbName;
}

View File

@@ -0,0 +1,156 @@
package com.cool.store.dto.enterprise;
import com.alibaba.fastjson.JSONObject;
import com.cool.store.entity.EnterpriseUserDO;
import com.cool.store.utils.UUIDUtils;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
/**
*
* @author zhangchenbiao
* @date 2022-01-18 04:40
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class EnterpriseUserDTO implements Serializable {
@ApiModelProperty("分机号")
private String tel;
@ApiModelProperty("")
private String workPlace;
@ApiModelProperty("备注")
private String remark;
@ApiModelProperty("用户主键id")
private String id;
@ApiModelProperty("钉钉用户id")
private String userId;
@ApiModelProperty("")
private String name;
@ApiModelProperty("是否已经激活, true表示已激活, false表示未激活")
private Boolean active;
@ApiModelProperty("是否是主管理员01")
private Byte mainAdmin;
@ApiModelProperty("是否为企业的管理员, true表示是, false表示不是")
private Boolean isAdmin;
@ApiModelProperty("手机号码")
private String mobile;
@ApiModelProperty("员工的电子邮箱")
private String email;
@ApiModelProperty("在当前isv全局范围内唯一标识一个用户的身份,用户无法修改")
private String unionid;
@ApiModelProperty("是否号码隐藏, true表示隐藏, false表示不隐藏")
private Boolean isHide;
@ApiModelProperty("")
private String position;
@ApiModelProperty("员工的企业邮箱")
private String orgEmail;
@ApiModelProperty("是否为企业的老板, true表示是, false表示不是")
private Boolean isBoss;
@ApiModelProperty("钉钉Id,在钉钉全局范围内标识用户的身份,但用户可以自行修改一次")
private String dingid;
@ApiModelProperty("头像url")
private String avatar;
@ApiModelProperty("")
private String roles;
@ApiModelProperty("是否是部门的主管, true表示是, false表示不是")
private Boolean isLeader;
@ApiModelProperty("扩展属性,可以设置多种属性(但手机上最多只能显示10个扩展属性具体显示哪些属性请到OA管理后台->设置->通讯录信息设置和OA管理后台->设置->手机端显示信息设置)性")
private String extattr;
@ApiModelProperty("")
private Boolean isEnterprise;
@ApiModelProperty("用户创建时间")
private Date createTime;
@ApiModelProperty("第三方OA系统唯一标识")
private String thirdOaUniqueFlag;
@ApiModelProperty("")
private String orderInDepts;
@ApiModelProperty("")
private List<String> isLeaderInDepts;
@ApiModelProperty("用户语言环境:en_us/英语_美国,zh_cn/中文_简体,zh_hk/中文_繁体_HK")
private String language;
@ApiModelProperty("用户来源默认dingding钉钉,qw企业微信 mobile")
private String appType;
@ApiModelProperty("登录密码")
private String password;
@ApiModelProperty("")
private String monitoredDepartments;
@ApiModelProperty("工号")
private String jobnumber;
private String openUserid;
@ApiModelProperty("")
private List<String> departmentLists;
/**
* 管理范围
*/
private List<Long> scopeList;
private List<Long> storeList;
public static EnterpriseUserDO transUserDtoToDo(EnterpriseUserDTO enterpriseUserDTO) {
EnterpriseUserDO enterpriseUserDO = new EnterpriseUserDO();
enterpriseUserDO.setTel(enterpriseUserDTO.getTel());
enterpriseUserDO.setWorkPlace(enterpriseUserDTO.getWorkPlace());
enterpriseUserDO.setRemark(enterpriseUserDTO.getRemark());
enterpriseUserDO.setPosition(enterpriseUserDTO.getPosition());
enterpriseUserDO.setMobile(enterpriseUserDTO.getMobile());
enterpriseUserDO.setId(UUIDUtils.get32UUID());
enterpriseUserDO.setUserId(enterpriseUserDTO.getUserId());
enterpriseUserDO.setName(enterpriseUserDTO.getName());
enterpriseUserDO.setEmail(enterpriseUserDTO.getEmail());
enterpriseUserDO.setOrgEmail(enterpriseUserDTO.getOrgEmail());
enterpriseUserDO.setActive(Boolean.TRUE);
enterpriseUserDO.setIsBoss(enterpriseUserDTO.getIsBoss());
enterpriseUserDO.setUnionid(enterpriseUserDTO.getUnionid());
enterpriseUserDO.setAvatar(enterpriseUserDTO.getAvatar());
enterpriseUserDO.setIsLeaderInDepts(JSONObject.toJSONString(enterpriseUserDTO.getIsLeaderInDepts()));
enterpriseUserDO.setExtattr(enterpriseUserDTO.getExtattr());
enterpriseUserDO.setCreateTime(new Date());
enterpriseUserDO.setJobnumber(enterpriseUserDTO.getJobnumber());
return enterpriseUserDO;
}
}

View File

@@ -0,0 +1,32 @@
package com.cool.store.dto.enterprise;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
/**
* @ClassName EnterpriseUserRole
* @Description 用一句话描述什么
* @author 首亮
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class EnterpriseUserRole {
private Long id;
private String roleId;
private String userId;
//创建时间
private Date createTime;
//更新时间
public EnterpriseUserRole(String roleId, String userId) {
this.roleId = roleId;
this.userId = userId;
this.createTime = new Date();
}
private Date updateTime;
}

View File

@@ -0,0 +1,28 @@
package com.cool.store.dto.login;
import lombok.Data;
/**
* @author zhangchenbiao
* @FileName: UserIdInfoDTO
* @Description:
* @date 2023-05-29 10:58
*/
@Data
public class UserIdInfoDTO {
private String openId;
private String unionId;
private String userId;
private String corpId;
public UserIdInfoDTO(String openId, String unionId, String userId, String corpId) {
this.openId = openId;
this.unionId = unionId;
this.userId = userId;
this.corpId = corpId;
}
}

View File

@@ -53,7 +53,7 @@ public class EnterpriseUserDO implements Serializable {
private String orderInDepts;
@ApiModelProperty("是否是主管理员01")
private Integer mainAdmin;
private Boolean mainAdmin;
@ApiModelProperty("是否为企业的管理员, true表示是, false表示不是")
private Boolean isAdmin;

View File

@@ -57,6 +57,16 @@
<orderEntry type="library" name="Maven: org.springframework:spring-aop:5.2.5.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-context:5.2.5.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-expression:5.2.5.RELEASE" level="project" />
<orderEntry type="library" name="Maven: cn.hutool:hutool-all:5.0.7" level="project" />
<orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper-spring-boot-starter:1.4.6" level="project" />
<orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-starter:2.2.2" level="project" />
<orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-autoconfigure:2.2.2" level="project" />
<orderEntry type="library" name="Maven: org.mybatis:mybatis:3.5.9" level="project" />
<orderEntry type="library" name="Maven: org.mybatis:mybatis-spring:2.0.7" level="project" />
<orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper-spring-boot-autoconfigure:1.4.6" level="project" />
<orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper:5.3.2" level="project" />
<orderEntry type="library" name="Maven: com.github.jsqlparser:jsqlparser:4.5" level="project" />
<orderEntry type="library" name="Maven: com.coolstore:coolstore-base:1.5.3" level="project" />
<orderEntry type="module" module-name="coolstore-partner-dao" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-jdbc:3.0.2" level="project" />
<orderEntry type="library" name="Maven: com.zaxxer:HikariCP:3.4.2" level="project" />
@@ -67,14 +77,6 @@
<orderEntry type="library" name="Maven: com.alibaba:druid-spring-boot-starter:1.1.20" level="project" />
<orderEntry type="library" name="Maven: com.alibaba:druid:1.1.20" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.2.6.RELEASE" level="project" />
<orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper-spring-boot-starter:1.4.6" level="project" />
<orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-starter:2.2.2" level="project" />
<orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-autoconfigure:2.2.2" level="project" />
<orderEntry type="library" name="Maven: org.mybatis:mybatis:3.5.9" level="project" />
<orderEntry type="library" name="Maven: org.mybatis:mybatis-spring:2.0.7" level="project" />
<orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper-spring-boot-autoconfigure:1.4.6" level="project" />
<orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper:5.3.2" level="project" />
<orderEntry type="library" name="Maven: com.github.jsqlparser:jsqlparser:4.5" level="project" />
<orderEntry type="module" module-name="coolstore-partner-model" />
<orderEntry type="library" name="Maven: com.github.xiaoymin:knife4j-spring-boot-starter:2.0.4" level="project" />
<orderEntry type="library" name="Maven: com.github.xiaoymin:knife4j-spring-boot-autoconfigure:2.0.4" level="project" />
@@ -99,5 +101,24 @@
<orderEntry type="library" name="Maven: com.github.xiaoymin:knife4j-spring-ui:2.0.4" level="project" />
<orderEntry type="library" name="Maven: org.apache.shiro:shiro-core:1.2.3" level="project" />
<orderEntry type="library" name="Maven: commons-beanutils:commons-beanutils:1.8.3" level="project" />
<orderEntry type="library" name="Maven: com.aliyun.openservices:ons-client:1.8.8.3.Final" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:tea-openapi:0.0.19" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:tea-util:0.2.12" level="project" />
<orderEntry type="library" name="Maven: com.google.code.gson:gson:2.8.6" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:credentials-java:0.2.4" level="project" />
<orderEntry type="library" name="Maven: org.ini4j:ini4j:0.5.4" level="project" />
<orderEntry type="library" name="Maven: org.jacoco:org.jacoco.agent:runtime:0.8.3" level="project" />
<orderEntry type="library" name="Maven: javax.xml.bind:jaxb-api:2.3.1" level="project" />
<orderEntry type="library" name="Maven: javax.activation:javax.activation-api:1.2.0" level="project" />
<orderEntry type="library" name="Maven: com.sun.xml.bind:jaxb-core:2.3.0" level="project" />
<orderEntry type="library" name="Maven: com.sun.xml.bind:jaxb-impl:2.3.0" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:openapiutil:0.1.9" level="project" />
<orderEntry type="library" name="Maven: org.bouncycastle:bcpkix-jdk15on:1.65" level="project" />
<orderEntry type="library" name="Maven: org.bouncycastle:bcprov-jdk15on:1.65" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:tea:1.2.7" level="project" />
<orderEntry type="library" name="Maven: com.squareup.okhttp3:okhttp:3.14.7" level="project" />
<orderEntry type="library" name="Maven: com.squareup.okio:okio:1.17.2" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:ons20190214:1.0.0" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:endpoint-util:0.0.6" level="project" />
</component>
</module>

View File

@@ -33,6 +33,18 @@
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-core</artifactId>
</dependency>
<dependency>
<groupId>com.aliyun.openservices</groupId>
<artifactId>ons-client</artifactId>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>tea-openapi</artifactId>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>ons20190214</artifactId>
</dependency>
</dependencies>
</project>

View File

@@ -1,7 +1,10 @@
package com.cool.store.http;
import com.alibaba.fastjson.JSONObject;
import com.cool.store.dto.enterprise.EnterpriseUserDTO;
import com.cool.store.dto.login.UserIdInfoDTO;
import com.cool.store.utils.RestTemplateUtil;
import com.coolstore.base.dto.ResultDTO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.ResponseEntity;
@@ -26,18 +29,33 @@ public class ISVHttpRequest {
private String getUserIdByCode;
public JSONObject getUserIdByCode(String paramStr){
String url = isvDomain + getUserIdByCode + paramStr;
ResponseEntity<JSONObject> responseEntity = null;
public UserIdInfoDTO getUserIdByCode(String paramStr){
String url = isvDomain + "/isv/user/getUserIdByCode" + paramStr;
ResponseEntity<ResultDTO> responseEntity = null;
try {
responseEntity = RestTemplateUtil.loadGet(url, JSONObject.class);
responseEntity = RestTemplateUtil.loadGet(url, ResultDTO.class);
log.info("url:{}, response:{}", url, JSONObject.toJSONString(responseEntity));
if(Objects.nonNull(responseEntity.getBody()) && responseEntity.getBody().isSuccess()){
return JSONObject.parseObject(JSONObject.toJSONString(responseEntity.getBody().getData()), UserIdInfoDTO.class);
}
} catch (Exception e) {
log.info("调用isv出错{}", e);
}
if(Objects.isNull(responseEntity)){
return null;
return null;
}
public EnterpriseUserDTO getUserDetailByUserId(String corpId, String userId, String appType){
String url = isvDomain + "/isv/user/getUserDetail";
ResponseEntity<ResultDTO> responseEntity = null;
try {
responseEntity = RestTemplateUtil.loadGet(url, ResultDTO.class);
log.info("url:{}, response:{}", url, JSONObject.toJSONString(responseEntity));
if(Objects.nonNull(responseEntity.getBody()) && responseEntity.getBody().isSuccess()){
return JSONObject.parseObject(JSONObject.toJSONString(responseEntity.getBody().getData()), EnterpriseUserDTO.class);
}
} catch (Exception e) {
log.info("调用isv出错{}", e);
}
return responseEntity.getBody();
return null;
}
}

View File

@@ -0,0 +1,23 @@
package com.cool.store.mq;
import com.aliyun.openservices.ons.api.SendResult;
import com.coolstore.base.enums.RocketMqTagEnum;
/**
* @author zhangchenbiao
* @FileName: OrderMessageService
* @Description: 顺序消息生产者
* @date 2021-12-22 17:37
*/
public interface OrderMessageService {
/**
* 发送顺序消息
* @param message
* @param tag
* @param shardingKey
* @return
*/
SendResult send(String message, RocketMqTagEnum tag, final String shardingKey);
}

View File

@@ -0,0 +1,45 @@
package com.cool.store.mq;
import com.aliyun.openservices.ons.api.bean.OrderProducerBean;
import com.aliyun.openservices.ons.api.bean.ProducerBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
/**
* @author zhangchenbiao
* @FileName: ProducerClient
* @Description: 普通消息client
* @date 2021-12-21 11:33
*/
@Configuration
public class ProducerClient {
@Autowired
private RocketMqConfig rocketMqConfig;
/**
* 普通消息
* @return
*/
@Primary
@Bean(initMethod = "start", destroyMethod = "shutdown")
public ProducerBean producerBean() {
ProducerBean producer = new ProducerBean();
producer.setProperties(rocketMqConfig.getMqProperties());
return producer;
}
/**
* 分区顺序消息
* @return
*/
@Bean(initMethod = "start", destroyMethod = "shutdown")
public OrderProducerBean orderProducerBean() {
OrderProducerBean producer = new OrderProducerBean();
producer.setProperties(rocketMqConfig.getMqProperties());
return producer;
}
}

View File

@@ -0,0 +1,78 @@
package com.cool.store.mq;
import com.aliyun.openservices.ons.api.PropertyKeyConst;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import java.util.Properties;
/**
* @author zhangchenbiao
* @FileName: RocketMqConfig
* @Description: 该服务的rocketmq的配置 以及生产者的topic
* @date 2021-12-21 11:33
*/
@Configuration
@ConfigurationProperties(prefix = "rocketmq")
public class RocketMqConfig {
private String accessKey;
private String secretKey;
private String nameSrvAdder;
/**
* 普通消息的topic
*/
private String topic;
/**
* 分区顺序消息topic
*/
private String orderTopic;
public Properties getMqProperties() {
Properties properties = new Properties();
properties.setProperty(PropertyKeyConst.AccessKey, this.accessKey);
properties.setProperty(PropertyKeyConst.SecretKey, this.secretKey);
properties.setProperty(PropertyKeyConst.NAMESRV_ADDR, this.nameSrvAdder);
return properties;
}
public String getAccessKey() {
return accessKey;
}
public void setAccessKey(String accessKey) {
this.accessKey = accessKey;
}
public String getSecretKey() {
return secretKey;
}
public void setSecretKey(String secretKey) {
this.secretKey = secretKey;
}
public String getNameSrvAdder() {
return nameSrvAdder;
}
public void setNameSrvAdder(String nameSrvAdder) {
this.nameSrvAdder = nameSrvAdder;
}
public String getTopic() {
return topic;
}
public void setTopic(String topic) {
this.topic = topic;
}
public String getOrderTopic() {
return orderTopic;
}
public void setOrderTopic(String orderTopic) {
this.orderTopic = orderTopic;
}
}

View File

@@ -0,0 +1,46 @@
package com.cool.store.mq;
import com.aliyun.openservices.ons.api.SendCallback;
import com.aliyun.openservices.ons.api.SendResult;
import com.coolstore.base.enums.RocketMqTagEnum;
/**
* @author zhangchenbiao
* @FileName: MessageProducerService
* @Description: rocketmq 消息生产者
* @date 2021-12-22 16:12
*/
public interface SimpleMessageService {
/**
* 同步发送
* @param message 消息
* @param tag tag
* @return
*/
SendResult send(String message, RocketMqTagEnum tag);
/**
* 单向发送
* @param message 消息
* @param tag tag
*/
void sendOneway(String message, RocketMqTagEnum tag);
/**
* 异步发送
* @param message 消息
* @param tag tag
* @param sendCallback 回调
*/
void sendAsync(String message, RocketMqTagEnum tag, SendCallback sendCallback);
/**
* 同步发送(延时)
* @param message
* @param tag
* @param startDeliverTime
* @return
*/
SendResult send(String message, RocketMqTagEnum tag, Long startDeliverTime);
}

View File

@@ -0,0 +1,57 @@
package com.cool.store.mq.impl;
import com.aliyun.openservices.ons.api.Message;
import com.aliyun.openservices.ons.api.SendResult;
import com.aliyun.openservices.ons.api.bean.OrderProducerBean;
import com.cool.store.constants.CommonConstants;
import com.cool.store.mq.OrderMessageService;
import com.cool.store.mq.RocketMqConfig;
import com.cool.store.utils.UUIDUtils;
import com.coolstore.base.enums.RocketMqTagEnum;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.MDC;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.Objects;
import java.util.Properties;
/**
* @author zhangchenbiao
* @FileName: OrderMessageServiceImpl
* @Description: 顺序消息生产实现
* @date 2021-12-22 17:38
*/
@Slf4j
@Service
public class OrderMessageServiceImpl implements OrderMessageService {
@Resource
private RocketMqConfig rocketMqConfig;
@Resource
private OrderProducerBean orderProducerBean;
@Override
public SendResult send(String message, RocketMqTagEnum tag, String shardingKey) {
if(StringUtils.isAnyBlank(message, shardingKey) || Objects.isNull(tag)){
return new SendResult();
}
try {
Message msg = new Message(rocketMqConfig.getOrderTopic(), tag.getTag(), message.getBytes("UTF-8"));
Properties properties = new Properties();
String requestId = MDC.get(CommonConstants.REQUEST_ID);
if(StringUtils.isBlank(requestId)){
requestId = UUIDUtils.get32UUID();
}
properties.setProperty(CommonConstants.REQUEST_ID, requestId);
msg.setUserProperties(properties);
SendResult send = orderProducerBean.send(msg, shardingKey);
return send;
} catch (Exception e) {
log.error("send@@@@@@@@@ddd", e);
}
return null;
}
}

View File

@@ -0,0 +1,129 @@
package com.cool.store.mq.impl;
import com.alibaba.fastjson.JSONObject;
import com.aliyun.openservices.ons.api.Message;
import com.aliyun.openservices.ons.api.SendCallback;
import com.aliyun.openservices.ons.api.SendResult;
import com.aliyun.openservices.ons.api.bean.ProducerBean;
import com.cool.store.constants.CommonConstants;
import com.cool.store.mq.RocketMqConfig;
import com.cool.store.mq.SimpleMessageService;
import com.cool.store.utils.UUIDUtils;
import com.coolstore.base.enums.RocketMqTagEnum;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.MDC;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.Date;
import java.util.Objects;
import java.util.Properties;
/**
* @author zhangchenbiao
* @FileName: MessageProducerServiceImpl
* @Description: 消息生产者实现
* @date 2021-12-22 16:12
*/
@Service
@Slf4j
public class SimpleMessageServiceImpl implements SimpleMessageService {
@Resource
private RocketMqConfig rocketMqConfig;
@Resource
private ProducerBean producer;
@Override
public SendResult send(String message, RocketMqTagEnum tag) {
if(StringUtils.isBlank(message) || Objects.isNull(tag)){
return new SendResult();
}
try {
Message msg = new Message(rocketMqConfig.getTopic(), tag.getTag(), message.getBytes("UTF-8"));
Properties properties = new Properties();
String requestId = MDC.get(CommonConstants.REQUEST_ID);
if(StringUtils.isBlank(requestId)){
requestId = UUIDUtils.get32UUID();
}
properties.setProperty(CommonConstants.REQUEST_ID, requestId);
msg.setUserProperties(properties);
SendResult send = producer.send(msg);
log.info("消息发送send response:{}", JSONObject.toJSONString(send));
return send;
} catch (Exception e) {
log.error("send#######", e);
}
return new SendResult();
}
@Override
public void sendOneway(String message, RocketMqTagEnum tag) {
if(StringUtils.isBlank(message) || Objects.isNull(tag)){
return;
}
try {
Message msg = new Message(rocketMqConfig.getTopic(), tag.getTag(), message.getBytes("UTF-8"));
Properties properties = new Properties();
String requestId = MDC.get(CommonConstants.REQUEST_ID);
if(StringUtils.isBlank(requestId)){
requestId = UUIDUtils.get32UUID();
}
properties.setProperty(CommonConstants.REQUEST_ID, requestId);
msg.setUserProperties(properties);
producer.sendOneway(msg);
} catch (Exception e) {
log.error("send@@@@@@", e);
}
}
@Override
public void sendAsync(String message, RocketMqTagEnum tag, SendCallback sendCallback) {
if(StringUtils.isBlank(message) || Objects.isNull(tag)){
return;
}
try {
Message msg = new Message(rocketMqConfig.getTopic(), tag.getTag(), message.getBytes("UTF-8"));
Properties properties = new Properties();
String requestId = MDC.get(CommonConstants.REQUEST_ID);
if(StringUtils.isBlank(requestId)){
requestId = UUIDUtils.get32UUID();
}
properties.setProperty(CommonConstants.REQUEST_ID, requestId);
msg.setUserProperties(properties);
producer.sendAsync(msg, sendCallback);
} catch (Exception e) {
log.error("sendAsync@@@@@@", e);
}
}
@Override
public SendResult send(String message, RocketMqTagEnum tag, Long startDeliverTime) {
if(StringUtils.isBlank(message) || Objects.isNull(tag)){
return new SendResult();
}
try {
Message msg = new Message(rocketMqConfig.getTopic(), tag.getTag(), message.getBytes("UTF-8"));
if(Objects.nonNull(startDeliverTime)) {
log.info("{} startDeliverTime:{}", tag.getTag(),new Date(startDeliverTime));
msg.setStartDeliverTime(startDeliverTime);
}
Properties properties = new Properties();
String requestId = MDC.get(CommonConstants.REQUEST_ID);
if(StringUtils.isBlank(requestId)){
requestId = UUIDUtils.get32UUID();
}
properties.setProperty(CommonConstants.REQUEST_ID, requestId);
msg.setUserProperties(properties);
SendResult send = producer.send(msg);
log.info("发送消息data:{}", JSONObject.toJSONString(send));
return send;
} catch (Exception e) {
log.error("send@@@@@@@@@", e);
}
return new SendResult();
}
}

View File

@@ -0,0 +1,197 @@
package com.cool.store.mq.util;
import com.aliyun.ons20190214.*;
import com.aliyun.ons20190214.models.*;
import com.aliyun.teaopenapi.models.Config;
import com.cool.store.constants.CommonConstants;
import com.coolstore.base.enums.RocketMqGroupEnum;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.ListUtils;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @author chenyupeng
* @since 2022/1/5
*/
@Slf4j
public class RocketMqUtil {
private static final String INSTANCE_ID = "MQ_INST_1947409023213164_BX3sLZnA";
/**
* 本地
*/
private static final String LOCAL_INSTANCE_ID = "MQ_INST_1255228665351616_BX3wfyPO";
private static final String INSTANCE_ID_ONLINE_HD_PRE = "MQ_INST_1947409023213164_BX5N7rwl";
private static final String ACCESS_KEY = "LTAI5t5ouXZuFgxJMbQea3b2";
private static final String ACCESS_SECRET = "yuomDstRjSdihtN5zo8viDbWu8Z0ig";
/**
* 使用AK&SK初始化账号Client
* @param accessKeyId
* @param accessKeySecret
* @return Client
* @throws Exception
*/
public static Client createClient(String accessKeyId, String accessKeySecret) throws Exception {
Config config = new Config()
// 您的AccessKey ID
.setAccessKeyId(accessKeyId)
// 您的AccessKey Secret
.setAccessKeySecret(accessKeySecret);
// 访问的域名
config.endpoint = "ons.cn-hangzhou.aliyuncs.com";
return new Client(config);
}
public static Client createLocalClient(String accessKeyId, String accessKeySecret) throws Exception {
Config config = new Config()
// 您的AccessKey ID
.setAccessKeyId(accessKeyId)
// 您的AccessKey Secret
.setAccessKeySecret(accessKeySecret);
// 访问的域名
config.endpoint = "ons.mq-internet-access.aliyuncs.com";
return new Client(config);
}
/**
* 新增测试、开发环境的group
* @author chenyupeng
* @date 2022/1/13
* @param profiles 环境后缀,逗号分隔 例如: dev,dev2
* @return void
*/
public static void initGroup(String profiles) throws Exception {
Client client = RocketMqUtil.createClient(ACCESS_KEY, ACCESS_SECRET);
List<String> profileList = Arrays.asList(profiles.split(CommonConstants.COMMA));
if(CollectionUtils.isEmpty(profileList)){
return;
}
OnsGroupListRequest onsGroupListRequest = new OnsGroupListRequest();
onsGroupListRequest.setInstanceId(INSTANCE_ID);
OnsGroupListResponse onsGroupListResponse = client.onsGroupList(onsGroupListRequest);
List<OnsGroupListResponseBody.OnsGroupListResponseBodyDataSubscribeInfoDo> subscribeInfoDo = onsGroupListResponse.getBody().getData().getSubscribeInfoDo();
Map<String, OnsGroupListResponseBody.OnsGroupListResponseBodyDataSubscribeInfoDo> collect = ListUtils.emptyIfNull(subscribeInfoDo).stream().
collect(Collectors.toMap(OnsGroupListResponseBody.OnsGroupListResponseBodyDataSubscribeInfoDo::getGroupId, data -> data, (a, b) -> a));
for (String profile : profileList) {
for (RocketMqGroupEnum groupEnum : RocketMqGroupEnum.values()) {
String groupId = groupEnum.getDefaultGroup() + "_" + profile;
//已经创建就继续
if(collect.get(groupId) != null){
continue;
}
OnsGroupCreateRequest onsGroupCreateRequest = new OnsGroupCreateRequest();
onsGroupCreateRequest.setGroupId(groupId);
onsGroupCreateRequest.setInstanceId(INSTANCE_ID);
// 复制代码运行请自行打印 API 的返回值
try {
client.onsGroupCreate(onsGroupCreateRequest);
}catch (Exception e){
log.error("initGroupAndTag fail",e);
}
Thread.sleep(1000);
}
}
}
public static void initLocalGroup(String profiles) throws Exception {
Client client = RocketMqUtil.createLocalClient("LTAI5tPWCTeCyngfYLqoSGWk", "jkzIXlvNF17ne5TPPEFP1sQhcfg4Je");
List<String> profileList = Arrays.asList(profiles.split(CommonConstants.COMMA));
if(CollectionUtils.isEmpty(profileList)){
return;
}
OnsGroupListRequest onsGroupListRequest = new OnsGroupListRequest();
onsGroupListRequest.setInstanceId(LOCAL_INSTANCE_ID);
OnsGroupListResponse onsGroupListResponse = client.onsGroupList(onsGroupListRequest);
List<OnsGroupListResponseBody.OnsGroupListResponseBodyDataSubscribeInfoDo> subscribeInfoDo = onsGroupListResponse.getBody().getData().getSubscribeInfoDo();
Map<String, OnsGroupListResponseBody.OnsGroupListResponseBodyDataSubscribeInfoDo> collect = ListUtils.emptyIfNull(subscribeInfoDo).stream().
collect(Collectors.toMap(OnsGroupListResponseBody.OnsGroupListResponseBodyDataSubscribeInfoDo::getGroupId, data -> data, (a, b) -> a));
for (String profile : profileList) {
for (RocketMqGroupEnum groupEnum : RocketMqGroupEnum.values()) {
String groupId = groupEnum.getDefaultGroup() + "_" + profile;
//已经创建就继续
if(collect.get(groupId) != null){
continue;
}
OnsGroupCreateRequest onsGroupCreateRequest = new OnsGroupCreateRequest();
onsGroupCreateRequest.setGroupId(groupId);
onsGroupCreateRequest.setInstanceId(LOCAL_INSTANCE_ID);
// 复制代码运行请自行打印 API 的返回值
try {
client.onsGroupCreate(onsGroupCreateRequest);
}catch (Exception e){
log.error("initGroupAndTag fail",e);
}
Thread.sleep(1000);
}
}
}
/**
* 新增线上、灰度、预发环境的group
* @author chenyupeng
* @date 2022/1/13
* @param profiles 环境后缀,逗号分隔 例如: online,hd,pre
* @return void
*/
public static void initOnlineAndHdAndPreGroup(String profiles) throws Exception {
Client client = RocketMqUtil.createClient(ACCESS_KEY, ACCESS_SECRET);
List<String> profileList = Arrays.asList(profiles.split(CommonConstants.COMMA));
if(CollectionUtils.isEmpty(profileList)){
return;
}
OnsGroupListRequest onsGroupListRequest = new OnsGroupListRequest();
onsGroupListRequest.setInstanceId(INSTANCE_ID_ONLINE_HD_PRE);
OnsGroupListResponse onsGroupListResponse = client.onsGroupList(onsGroupListRequest);
List<OnsGroupListResponseBody.OnsGroupListResponseBodyDataSubscribeInfoDo> subscribeInfoDo = onsGroupListResponse.getBody().getData().getSubscribeInfoDo();
Map<String, OnsGroupListResponseBody.OnsGroupListResponseBodyDataSubscribeInfoDo> collect = ListUtils.emptyIfNull(subscribeInfoDo).stream().
collect(Collectors.toMap(OnsGroupListResponseBody.OnsGroupListResponseBodyDataSubscribeInfoDo::getGroupId, data -> data, (a, b) -> a));
for (String profile : profileList) {
for (RocketMqGroupEnum groupEnum : RocketMqGroupEnum.values()) {
String groupId = groupEnum.getDefaultGroup() + "_" + profile;
//已经创建就继续
if(collect.get(groupId) != null){
continue;
}
OnsGroupCreateRequest onsGroupCreateRequest = new OnsGroupCreateRequest();
onsGroupCreateRequest.setGroupId(groupId);
onsGroupCreateRequest.setInstanceId(INSTANCE_ID_ONLINE_HD_PRE);
// 复制代码运行请自行打印 API 的返回值
try {
client.onsGroupCreate(onsGroupCreateRequest);
}catch (Exception e){
log.error("initGroupAndTag fail",e);
}
Thread.sleep(1000);
}
}
}
/**
* 删除测试、开发环境的group
* @author chenyupeng
* @date 2022/1/13
* @param groupId
* @return void
*/
public static void deleteGroupById(String groupId) throws Exception {
Client client = RocketMqUtil.createClient(ACCESS_KEY, ACCESS_SECRET);
OnsGroupDeleteRequest request = new OnsGroupDeleteRequest();
request.setGroupId(groupId);
request.setInstanceId(INSTANCE_ID);
client.onsGroupDelete(request);
}
}

View File

@@ -0,0 +1,110 @@
package com.cool.store.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.cool.store.constants.CommonConstants;
import com.cool.store.dao.EnterpriseUserDAO;
import com.cool.store.dao.EnterpriseUserRoleDAO;
import com.cool.store.dao.SysRoleDAO;
import com.cool.store.dto.enterprise.EnterpriseInitDTO;
import com.cool.store.dto.enterprise.EnterpriseOpenMsg;
import com.cool.store.dto.enterprise.EnterpriseUserDTO;
import com.cool.store.dto.enterprise.EnterpriseUserRole;
import com.cool.store.entity.EnterpriseUserDO;
import com.cool.store.enums.RoleEnum;
import com.cool.store.http.ISVHttpRequest;
import com.cool.store.mq.SimpleMessageService;
import com.cool.store.utils.DataSourceHelper;
import com.cool.store.utils.ScriptUtil;
import com.cool.store.utils.UUIDUtils;
import com.coolstore.base.enums.RocketMqTagEnum;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.support.EncodedResource;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.*;
/**
* @author zhangchenbiao
* @FileName: EnterpriseInitService
* @Description: 企业初始化
* @date 2023-05-26 16:28
*/
@Slf4j
@Service
public class EnterpriseInitServiceImpl {
@Resource
protected ScriptUtil scriptUtil;
@Resource
private SysRoleDAO sysRoleDAO;
@Resource
private EnterpriseUserRoleDAO enterpriseUserRoleDAO;
@Resource
private EnterpriseUserDAO enterpriseUserDAO;
@Resource
private SimpleMessageService simpleMessageService;
@Resource
private ISVHttpRequest isvHttpRequest;
public void runEnterpriseScript(EnterpriseOpenMsg msg) {
runEnterpriseScriptAndInitAuthUser(msg);
//抛出开始数据同步消息
EnterpriseInitDTO enterpriseInitDTO = new EnterpriseInitDTO();
enterpriseInitDTO.setEid(msg.getEid());
enterpriseInitDTO.setAppType(msg.getAppType());
enterpriseInitDTO.setCorpId(msg.getCorpId());
enterpriseInitDTO.setDbName(msg.getDbName());
enterpriseInitDTO.setUserId(msg.getAuthUserId());
log.info("send msg to enterprise_open_data_sync, eid:{}, appType:{}, corpId:{}, dbName:{}", msg.getEid(), msg.getAppType(), msg.getCorpId(), msg.getDbName(), msg.getAuthUserId());
simpleMessageService.send(JSONObject.toJSONString(enterpriseInitDTO), RocketMqTagEnum.ENTERPRISE_OPEN_DATA_SYNC);
}
public void runEnterpriseScriptAndInitAuthUser(EnterpriseOpenMsg msg) {
DataSourceHelper.changeToSpecificDataSource(msg.getDbName());
//执行脚本代码
ClassPathResource rc = new ClassPathResource("script/enterpriseInit.sql");
EncodedResource er = new EncodedResource(rc, "utf-8");
HashMap<String, Object> objectObjectHashMap = new HashMap<>();
objectObjectHashMap.put("enterpriseId", msg.getEid());
String userId = msg.getAuthUserId();
if(StringUtils.isBlank(userId)){
objectObjectHashMap.put("userId", CommonConstants.SYSTEM_USER_ID);
} else {
objectObjectHashMap.put("userId", userId);
}
String groupId = UUIDUtils.get32UUID();
objectObjectHashMap.put("groupId", groupId);
scriptUtil.executeSqlScript(er, objectObjectHashMap);
log.info("初始化开通用户");
if (StringUtils.isNotBlank(msg.getAuthUserId())) {
//初始化开通用户
initAuthUser(msg.getEid(), msg.getCorpId(), msg.getAppType(), msg.getAuthUserId(), userId, msg.getDbName());
}
}
public void initAuthUser(String eid, String corpId, String appType, String authUserId, String userId, String dbName) {
List<EnterpriseUserRole> userRoles = new ArrayList<>();
Long roleIdByRoleEnum = sysRoleDAO.getRoleIdByRoleEnum(eid, RoleEnum.MASTER.getRoleEnum());
Long shopOwner = sysRoleDAO.getRoleIdByRoleEnum(eid, RoleEnum.SHOPOWNER.getRoleEnum());
Long subMaster = sysRoleDAO.getRoleIdByRoleEnum(eid, RoleEnum.SUB_MASTER.getRoleEnum());
//钉钉或者企业走用户app开通不需要
EnterpriseUserDTO userDTO = null;
try {
userDTO = isvHttpRequest.getUserDetailByUserId(corpId, authUserId, appType);
} catch (Exception e) {
log.error("getUserDetailByUserId error", e);
}
EnterpriseUserDO userDO = EnterpriseUserDTO.transUserDtoToDo(userDTO);
userDO.setMainAdmin(true);
userDO.setIsAdmin(true);
enterpriseUserDAO.batchInsertOrUpdate(eid, Collections.singletonList(userDO));
userRoles.add(new EnterpriseUserRole(roleIdByRoleEnum.toString(), userId));
userRoles.add(new EnterpriseUserRole(shopOwner.toString(), userId));
userRoles.add(new EnterpriseUserRole(subMaster.toString(), userId));
enterpriseUserRoleDAO.insertBatchUserRole(eid, userRoles);
}
}

View File

@@ -23,6 +23,16 @@
<orderEntry type="library" name="Maven: xerces:xercesImpl:2.11.0" level="project" />
<orderEntry type="library" name="Maven: xml-apis:xml-apis:1.4.01" level="project" />
<orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.30" level="project" />
<orderEntry type="library" name="Maven: cn.hutool:hutool-all:5.0.7" level="project" />
<orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper-spring-boot-starter:1.4.6" level="project" />
<orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-starter:2.2.2" level="project" />
<orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-autoconfigure:2.2.2" level="project" />
<orderEntry type="library" name="Maven: org.mybatis:mybatis:3.5.9" level="project" />
<orderEntry type="library" name="Maven: org.mybatis:mybatis-spring:2.0.7" level="project" />
<orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper-spring-boot-autoconfigure:1.4.6" level="project" />
<orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper:5.3.2" level="project" />
<orderEntry type="library" name="Maven: com.github.jsqlparser:jsqlparser:4.5" level="project" />
<orderEntry type="library" name="Maven: com.coolstore:coolstore-base:1.5.3" level="project" />
<orderEntry type="module" module-name="coolstore-partner-dao" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-jdbc:3.0.2" level="project" />
<orderEntry type="library" name="Maven: com.zaxxer:HikariCP:3.4.2" level="project" />
@@ -32,14 +42,6 @@
<orderEntry type="library" name="Maven: com.google.protobuf:protobuf-java:3.6.1" level="project" />
<orderEntry type="library" name="Maven: com.alibaba:druid-spring-boot-starter:1.1.20" level="project" />
<orderEntry type="library" name="Maven: com.alibaba:druid:1.1.20" level="project" />
<orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper-spring-boot-starter:1.4.6" level="project" />
<orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-starter:2.2.2" level="project" />
<orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-autoconfigure:2.2.2" level="project" />
<orderEntry type="library" name="Maven: org.mybatis:mybatis:3.5.9" level="project" />
<orderEntry type="library" name="Maven: org.mybatis:mybatis-spring:2.0.7" level="project" />
<orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper-spring-boot-autoconfigure:1.4.6" level="project" />
<orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper:5.3.2" level="project" />
<orderEntry type="library" name="Maven: com.github.jsqlparser:jsqlparser:4.5" level="project" />
<orderEntry type="module" module-name="coolstore-partner-model" />
<orderEntry type="library" name="Maven: com.github.xiaoymin:knife4j-spring-boot-starter:2.0.4" level="project" />
<orderEntry type="library" name="Maven: com.github.xiaoymin:knife4j-spring-boot-autoconfigure:2.0.4" level="project" />
@@ -64,6 +66,25 @@
<orderEntry type="library" name="Maven: com.github.xiaoymin:knife4j-spring-ui:2.0.4" level="project" />
<orderEntry type="library" name="Maven: org.apache.shiro:shiro-core:1.2.3" level="project" />
<orderEntry type="library" name="Maven: commons-beanutils:commons-beanutils:1.8.3" level="project" />
<orderEntry type="library" name="Maven: com.aliyun.openservices:ons-client:1.8.8.3.Final" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:tea-openapi:0.0.19" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:tea-util:0.2.12" level="project" />
<orderEntry type="library" name="Maven: com.google.code.gson:gson:2.8.6" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:credentials-java:0.2.4" level="project" />
<orderEntry type="library" name="Maven: org.ini4j:ini4j:0.5.4" level="project" />
<orderEntry type="library" name="Maven: org.jacoco:org.jacoco.agent:runtime:0.8.3" level="project" />
<orderEntry type="library" name="Maven: javax.xml.bind:jaxb-api:2.3.1" level="project" />
<orderEntry type="library" name="Maven: javax.activation:javax.activation-api:1.2.0" level="project" />
<orderEntry type="library" name="Maven: com.sun.xml.bind:jaxb-core:2.3.0" level="project" />
<orderEntry type="library" name="Maven: com.sun.xml.bind:jaxb-impl:2.3.0" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:openapiutil:0.1.9" level="project" />
<orderEntry type="library" name="Maven: org.bouncycastle:bcpkix-jdk15on:1.65" level="project" />
<orderEntry type="library" name="Maven: org.bouncycastle:bcprov-jdk15on:1.65" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:tea:1.2.7" level="project" />
<orderEntry type="library" name="Maven: com.squareup.okhttp3:okhttp:3.14.7" level="project" />
<orderEntry type="library" name="Maven: com.squareup.okio:okio:1.17.2" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:ons20190214:1.0.0" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:endpoint-util:0.0.6" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:2.2.6.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.2.6.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.2.6.RELEASE" level="project" />

View File

@@ -40,7 +40,7 @@ public class TokenValidateFilter implements Filter {
private static List<String> patternList =
Lists.newArrayList("/web/check/ok","/check/ok", "/partner/doc.html",
Lists.newArrayList("/web/check/ok","/check/ok", "/partner/doc.html","/**/test/**",
"/**/swagger*/**",
"/**/webjars/**");

View File

@@ -3,6 +3,7 @@ package com.cool.store.controller;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.cool.store.dto.login.FeiShuLoginDTO;
import com.cool.store.dto.login.UserIdInfoDTO;
import com.cool.store.enums.AppTypeEnum;
import com.cool.store.enums.ErrorCodeEnum;
import com.cool.store.exception.ServiceException;
@@ -42,17 +43,13 @@ public class LoginController {
String userId = "", corpId = "", appType = AppTypeEnum.FEI_SHU.getValue();
try {
String value = "code=" + code + "&appType=" + appType + "&appId=" + appId;
JSONObject userInfo = isvHttpRequest.getUserIdByCode(value);
UserIdInfoDTO userInfo = isvHttpRequest.getUserIdByCode(value);
if(Objects.isNull(userInfo)){
throw new ServiceException(ErrorCodeEnum.LOGIN_ERROR);
}
log.info("userInfo:{}", JSONObject.toJSONString(userInfo));
userId = userInfo.getString("openId");
corpId = userInfo.getString("corpId");
String errorCode = userInfo.getString("error_code");
if (StringUtils.isBlank(userId) && StringUtils.isNotBlank(errorCode)) {
throw new ServiceException(ErrorCodeEnum.LOGIN_ERROR);
}
userId = userInfo.getOpenId();
corpId = userInfo.getCorpId();
return loginService.feiShuLogin(userId, corpId, Boolean.TRUE, appType, StringUtils.EMPTY);
} catch (ServiceException e) {
log.error(e.getMessage(), e);

View File

@@ -0,0 +1,30 @@
package com.cool.store.controller;
import com.cool.store.entity.EnterpriseConfigDO;
import com.cool.store.service.EnterpriseConfigService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
/**
* @author zhangchenbiao
* @FileName: TestController
* @Description:
* @date 2023-05-26 11:32
*/
@RestController
@RequestMapping("test/")
public class TestController {
@Resource
private EnterpriseConfigService enterpriseConfigService;
@GetMapping("/selectByEnterpriseId")
public EnterpriseConfigDO selectByEnterpriseId(@RequestParam("enterpriseId") String enterpriseId){
return enterpriseConfigService.selectByEnterpriseId(enterpriseId);
}
}

View File

@@ -34,4 +34,10 @@ mybatis.configuration.call-setters-on-nulls=true
mybatis.configuration.map-underscore-to-camel-case=true
isv.domain = https://tstore-isv.coolcollege.cn
get.user.id.by.code = /isv/v2/get_user_id_by_code
#rocketmq \u914D\u7F6E
rocketmq.accessKey=LTAI5t5ouXZuFgxJMbQea3b2
rocketmq.secretKey=yuomDstRjSdihtN5zo8viDbWu8Z0ig
rocketmq.nameSrvAdder=http://MQ_INST_1947409023213164_BX3sLZnA.cn-hangzhou.mq-internal.aliyuncs.com:8080
rocketmq.topic=simple_message
rocketmq.orderTopic=order_message

View File

@@ -38,4 +38,10 @@ mybatis.configuration.call-setters-on-nulls=true
mybatis.configuration.map-underscore-to-camel-case=true
isv.domain = https://dstore-isv.coolcollege.cn
get.user.id.by.code = /isv/v2/get_user_id_by_code
#rocketmq \u914D\u7F6E
rocketmq.accessKey=LTAI5t5ouXZuFgxJMbQea3b2
rocketmq.secretKey=yuomDstRjSdihtN5zo8viDbWu8Z0ig
rocketmq.nameSrvAdder=http://MQ_INST_1947409023213164_BX3sLZnA.cn-hangzhou.mq-internal.aliyuncs.com:8080
rocketmq.topic=simple_message
rocketmq.orderTopic=order_message

View File

@@ -34,4 +34,10 @@ mybatis.configuration.call-setters-on-nulls=true
mybatis.configuration.map-underscore-to-camel-case=true
isv.domain = https://hdstore-isv.coolcollege.cn
get.user.id.by.code = /isv/v2/get_user_id_by_code
#rocketmq \u914D\u7F6E
rocketmq.accessKey=LTAI5t5ouXZuFgxJMbQea3b2
rocketmq.secretKey=yuomDstRjSdihtN5zo8viDbWu8Z0ig
rocketmq.nameSrvAdder=http://MQ_INST_1947409023213164_BX5N7rwl.cn-hangzhou.mq-internal.aliyuncs.com:8080
rocketmq.topic=simple_message
rocketmq.orderTopic=order_message

View File

@@ -41,4 +41,10 @@ mybatis.configuration.call-setters-on-nulls=true
mybatis.configuration.map-underscore-to-camel-case=true
isv.domain = https://tstore-isv.coolcollege.cn
get.user.id.by.code = /isv/v2/get_user_id_by_code
#rocketmq \u914D\u7F6E
rocketmq.accessKey=LTAI5t5ouXZuFgxJMbQea3b2
rocketmq.secretKey=yuomDstRjSdihtN5zo8viDbWu8Z0ig
rocketmq.nameSrvAdder=http://MQ_INST_1947409023213164_BX3sLZnA.cn-hangzhou.mq-internal.aliyuncs.com:8080
rocketmq.topic=simple_message
rocketmq.orderTopic=order_message

View File

@@ -34,4 +34,10 @@ mybatis.configuration.call-setters-on-nulls=true
mybatis.configuration.map-underscore-to-camel-case=true
isv.domain = https://store-isv.coolcollege.cn
get.user.id.by.code = /isv/v2/get_user_id_by_code
#rocketmq \u914D\u7F6E
rocketmq.accessKey=LTAI5t5ouXZuFgxJMbQea3b2
rocketmq.secretKey=yuomDstRjSdihtN5zo8viDbWu8Z0ig
rocketmq.nameSrvAdder=http://MQ_INST_1947409023213164_BX5N7rwl.cn-hangzhou.mq-internal.aliyuncs.com:8080
rocketmq.topic=simple_message
rocketmq.orderTopic=order_message

View File

@@ -34,4 +34,10 @@ mybatis.configuration.call-setters-on-nulls=true
mybatis.configuration.map-underscore-to-camel-case=true
isv.domain = https://store-isv.coolcollege.cn
get.user.id.by.code = /isv/v2/get_user_id_by_code
#rocketmq \u914D\u7F6E
rocketmq.accessKey=LTAI5t5ouXZuFgxJMbQea3b2
rocketmq.secretKey=yuomDstRjSdihtN5zo8viDbWu8Z0ig
rocketmq.nameSrvAdder=http://MQ_INST_1947409023213164_BX5N7rwl.cn-hangzhou.mq-internal.aliyuncs.com:8080
rocketmq.topic=simple_message
rocketmq.orderTopic=order_message

View File

@@ -34,4 +34,10 @@ mybatis.configuration.call-setters-on-nulls=true
mybatis.configuration.map-underscore-to-camel-case=true
isv.domain = https://tstore-isv.coolcollege.cn
get.user.id.by.code = /isv/v2/get_user_id_by_code
#rocketmq \u914D\u7F6E
rocketmq.accessKey=LTAI5t5ouXZuFgxJMbQea3b2
rocketmq.secretKey=yuomDstRjSdihtN5zo8viDbWu8Z0ig
rocketmq.nameSrvAdder=http://MQ_INST_1947409023213164_BX3sLZnA.cn-hangzhou.mq-internal.aliyuncs.com:8080
rocketmq.topic=simple_message
rocketmq.orderTopic=order_message

View File

@@ -23,6 +23,16 @@
<orderEntry type="library" name="Maven: xerces:xercesImpl:2.11.0" level="project" />
<orderEntry type="library" name="Maven: xml-apis:xml-apis:1.4.01" level="project" />
<orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.30" level="project" />
<orderEntry type="library" name="Maven: cn.hutool:hutool-all:5.0.7" level="project" />
<orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper-spring-boot-starter:1.4.6" level="project" />
<orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-starter:2.2.2" level="project" />
<orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-autoconfigure:2.2.2" level="project" />
<orderEntry type="library" name="Maven: org.mybatis:mybatis:3.5.9" level="project" />
<orderEntry type="library" name="Maven: org.mybatis:mybatis-spring:2.0.7" level="project" />
<orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper-spring-boot-autoconfigure:1.4.6" level="project" />
<orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper:5.3.2" level="project" />
<orderEntry type="library" name="Maven: com.github.jsqlparser:jsqlparser:4.5" level="project" />
<orderEntry type="library" name="Maven: com.coolstore:coolstore-base:1.5.3" level="project" />
<orderEntry type="module" module-name="coolstore-partner-dao" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-jdbc:3.0.2" level="project" />
<orderEntry type="library" name="Maven: com.zaxxer:HikariCP:3.4.2" level="project" />
@@ -32,14 +42,6 @@
<orderEntry type="library" name="Maven: com.google.protobuf:protobuf-java:3.6.1" level="project" />
<orderEntry type="library" name="Maven: com.alibaba:druid-spring-boot-starter:1.1.20" level="project" />
<orderEntry type="library" name="Maven: com.alibaba:druid:1.1.20" level="project" />
<orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper-spring-boot-starter:1.4.6" level="project" />
<orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-starter:2.2.2" level="project" />
<orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-autoconfigure:2.2.2" level="project" />
<orderEntry type="library" name="Maven: org.mybatis:mybatis:3.5.9" level="project" />
<orderEntry type="library" name="Maven: org.mybatis:mybatis-spring:2.0.7" level="project" />
<orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper-spring-boot-autoconfigure:1.4.6" level="project" />
<orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper:5.3.2" level="project" />
<orderEntry type="library" name="Maven: com.github.jsqlparser:jsqlparser:4.5" level="project" />
<orderEntry type="module" module-name="coolstore-partner-model" />
<orderEntry type="library" name="Maven: com.github.xiaoymin:knife4j-spring-boot-starter:2.0.4" level="project" />
<orderEntry type="library" name="Maven: com.github.xiaoymin:knife4j-spring-boot-autoconfigure:2.0.4" level="project" />
@@ -64,6 +66,25 @@
<orderEntry type="library" name="Maven: com.github.xiaoymin:knife4j-spring-ui:2.0.4" level="project" />
<orderEntry type="library" name="Maven: org.apache.shiro:shiro-core:1.2.3" level="project" />
<orderEntry type="library" name="Maven: commons-beanutils:commons-beanutils:1.8.3" level="project" />
<orderEntry type="library" name="Maven: com.aliyun.openservices:ons-client:1.8.8.3.Final" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:tea-openapi:0.0.19" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:tea-util:0.2.12" level="project" />
<orderEntry type="library" name="Maven: com.google.code.gson:gson:2.8.6" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:credentials-java:0.2.4" level="project" />
<orderEntry type="library" name="Maven: org.ini4j:ini4j:0.5.4" level="project" />
<orderEntry type="library" name="Maven: org.jacoco:org.jacoco.agent:runtime:0.8.3" level="project" />
<orderEntry type="library" name="Maven: javax.xml.bind:jaxb-api:2.3.1" level="project" />
<orderEntry type="library" name="Maven: javax.activation:javax.activation-api:1.2.0" level="project" />
<orderEntry type="library" name="Maven: com.sun.xml.bind:jaxb-core:2.3.0" level="project" />
<orderEntry type="library" name="Maven: com.sun.xml.bind:jaxb-impl:2.3.0" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:openapiutil:0.1.9" level="project" />
<orderEntry type="library" name="Maven: org.bouncycastle:bcpkix-jdk15on:1.65" level="project" />
<orderEntry type="library" name="Maven: org.bouncycastle:bcprov-jdk15on:1.65" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:tea:1.2.7" level="project" />
<orderEntry type="library" name="Maven: com.squareup.okhttp3:okhttp:3.14.7" level="project" />
<orderEntry type="library" name="Maven: com.squareup.okio:okio:1.17.2" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:ons20190214:1.0.0" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:endpoint-util:0.0.6" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:2.2.6.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-json:2.2.6.RELEASE" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.10.3" level="project" />

View File

@@ -32,3 +32,11 @@ mybatis.mapper-locations=classpath*:mapper/**/*Mapper.xml
mybatis.configuration.call-setters-on-nulls=true
mybatis.configuration.map-underscore-to-camel-case=true
#rocketmq \u914D\u7F6E
rocketmq.accessKey=LTAI5t5ouXZuFgxJMbQea3b2
rocketmq.secretKey=yuomDstRjSdihtN5zo8viDbWu8Z0ig
rocketmq.nameSrvAdder=http://MQ_INST_1947409023213164_BX3sLZnA.cn-hangzhou.mq-internal.aliyuncs.com:8080
rocketmq.topic=simple_message
rocketmq.orderTopic=order_message

View File

@@ -35,4 +35,11 @@ spring.mvc.async.request-timeout=60000
mybatis.mapper-locations=classpath*:mapper/**/*Mapper.xml
mybatis.configuration.call-setters-on-nulls=true
mybatis.configuration.map-underscore-to-camel-case=true
mybatis.configuration.map-underscore-to-camel-case=true
#rocketmq \u914D\u7F6E
rocketmq.accessKey=LTAI5t5ouXZuFgxJMbQea3b2
rocketmq.secretKey=yuomDstRjSdihtN5zo8viDbWu8Z0ig
rocketmq.nameSrvAdder=http://MQ_INST_1947409023213164_BX3sLZnA.cn-hangzhou.mq-internal.aliyuncs.com:8080
rocketmq.topic=simple_message
rocketmq.orderTopic=order_message

View File

@@ -31,4 +31,11 @@ spring.mvc.async.request-timeout=60000
mybatis.mapper-locations=classpath*:mapper/**/*Mapper.xml
mybatis.configuration.call-setters-on-nulls=true
mybatis.configuration.map-underscore-to-camel-case=true
mybatis.configuration.map-underscore-to-camel-case=true
#rocketmq \u914D\u7F6E
rocketmq.accessKey=LTAI5t5ouXZuFgxJMbQea3b2
rocketmq.secretKey=yuomDstRjSdihtN5zo8viDbWu8Z0ig
rocketmq.nameSrvAdder=http://MQ_INST_1947409023213164_BX5N7rwl.cn-hangzhou.mq-internal.aliyuncs.com:8080
rocketmq.topic=simple_message
rocketmq.orderTopic=order_message

View File

@@ -39,3 +39,10 @@ customize_sub_table_size=10
mybatis.configuration.call-setters-on-nulls=true
mybatis.configuration.map-underscore-to-camel-case=true
#rocketmq \u914D\u7F6E
rocketmq.accessKey=LTAI5t5ouXZuFgxJMbQea3b2
rocketmq.secretKey=yuomDstRjSdihtN5zo8viDbWu8Z0ig
rocketmq.nameSrvAdder=http://MQ_INST_1947409023213164_BX3sLZnA.cn-hangzhou.mq-internal.aliyuncs.com:8080
rocketmq.topic=simple_message
rocketmq.orderTopic=order_message

View File

@@ -31,4 +31,11 @@ spring.mvc.async.request-timeout=60000
mybatis.mapper-locations=classpath*:mapper/**/*Mapper.xml
mybatis.configuration.call-setters-on-nulls=true
mybatis.configuration.map-underscore-to-camel-case=true
mybatis.configuration.map-underscore-to-camel-case=true
#rocketmq \u914D\u7F6E
rocketmq.accessKey=LTAI5t5ouXZuFgxJMbQea3b2
rocketmq.secretKey=yuomDstRjSdihtN5zo8viDbWu8Z0ig
rocketmq.nameSrvAdder=http://MQ_INST_1947409023213164_BX5N7rwl.cn-hangzhou.mq-internal.aliyuncs.com:8080
rocketmq.topic=simple_message
rocketmq.orderTopic=order_message

View File

@@ -31,4 +31,11 @@ spring.mvc.async.request-timeout=60000
mybatis.mapper-locations=classpath*:mapper/**/*Mapper.xml
mybatis.configuration.call-setters-on-nulls=true
mybatis.configuration.map-underscore-to-camel-case=true
mybatis.configuration.map-underscore-to-camel-case=true
#rocketmq \u914D\u7F6E
rocketmq.accessKey=LTAI5t5ouXZuFgxJMbQea3b2
rocketmq.secretKey=yuomDstRjSdihtN5zo8viDbWu8Z0ig
rocketmq.nameSrvAdder=http://MQ_INST_1947409023213164_BX5N7rwl.cn-hangzhou.mq-internal.aliyuncs.com:8080
rocketmq.topic=simple_message
rocketmq.orderTopic=order_message

View File

@@ -31,4 +31,11 @@ spring.mvc.async.request-timeout=60000
mybatis.mapper-locations=classpath*:mapper/**/*Mapper.xml
mybatis.configuration.call-setters-on-nulls=true
mybatis.configuration.map-underscore-to-camel-case=true
mybatis.configuration.map-underscore-to-camel-case=true
#rocketmq \u914D\u7F6E
rocketmq.accessKey=LTAI5t5ouXZuFgxJMbQea3b2
rocketmq.secretKey=yuomDstRjSdihtN5zo8viDbWu8Z0ig
rocketmq.nameSrvAdder=http://MQ_INST_1947409023213164_BX3sLZnA.cn-hangzhou.mq-internal.aliyuncs.com:8080
rocketmq.topic=simple_message
rocketmq.orderTopic=order_message

20
pom.xml
View File

@@ -131,6 +131,26 @@
<artifactId>ons-client</artifactId>
<version>1.8.8.3.Final</version>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.0.7</version>
</dependency>
<dependency>
<groupId>com.coolstore</groupId>
<artifactId>coolstore-base</artifactId>
<version>1.5.3</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>tea-openapi</artifactId>
<version>0.0.19</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>ons20190214</artifactId>
<version>1.0.0</version>
</dependency>
</dependencies>
</dependencyManagement>