> cache;
+
+ /**
+ * 程序启动时,获取最新的需要过滤的敏感词
+ *
+ * 这里即便缓存中为空也没关系,定时任务会定时重新加载敏感词
+ *
+ * @param args 启动参数
+ */
+ @Override
+ public void run(ApplicationArguments args) {
+ List sensitives = cache.get(CachePrefix.SENSITIVE.getPrefix());
+ log.info("系统初始化敏感词");
+ if (sensitives == null || sensitives.isEmpty()) {
+ return;
+ }
+ SensitiveWordsFilter.init(sensitives);
+ }
+
+}
diff --git a/framework/src/main/java/cn/lili/common/sensitive/quartz/QuartzConfig.java b/framework/src/main/java/cn/lili/common/sensitive/quartz/QuartzConfig.java
new file mode 100644
index 00000000..85e1d75a
--- /dev/null
+++ b/framework/src/main/java/cn/lili/common/sensitive/quartz/QuartzConfig.java
@@ -0,0 +1,32 @@
+package cn.lili.common.sensitive.quartz;
+
+import org.quartz.*;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * 定时执行配置
+ *
+ * @author Chopper
+ * @version v1.0
+ * 2021-11-23 16:30
+ */
+@Configuration
+public class QuartzConfig {
+
+ @Bean
+ public JobDetail sensitiveQuartzDetail() {
+ return JobBuilder.newJob(SensitiveQuartz.class).withIdentity("sensitiveQuartz").storeDurably().build();
+ }
+
+ @Bean
+ public Trigger sensitiveQuartzTrigger() {
+ SimpleScheduleBuilder scheduleBuilder = SimpleScheduleBuilder.simpleSchedule()
+ .withIntervalInSeconds(3600)
+ .repeatForever();
+ return TriggerBuilder.newTrigger().forJob(sensitiveQuartzDetail())
+ .withIdentity("sensitiveQuartz")
+ .withSchedule(scheduleBuilder)
+ .build();
+ }
+}
\ No newline at end of file
diff --git a/framework/src/main/java/cn/lili/common/sensitive/quartz/SensitiveQuartz.java b/framework/src/main/java/cn/lili/common/sensitive/quartz/SensitiveQuartz.java
new file mode 100644
index 00000000..4421aeaf
--- /dev/null
+++ b/framework/src/main/java/cn/lili/common/sensitive/quartz/SensitiveQuartz.java
@@ -0,0 +1,40 @@
+package cn.lili.common.sensitive.quartz;
+
+import cn.lili.cache.Cache;
+import cn.lili.cache.CachePrefix;
+import cn.lili.common.sensitive.SensitiveWordsFilter;
+import lombok.extern.slf4j.Slf4j;
+import org.quartz.JobExecutionContext;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.quartz.QuartzJobBean;
+
+import java.util.List;
+
+/**
+ * 间隔更新敏感词
+ *
+ * @author Chopper
+ * @version v1.0
+ * 2021-11-23 16:31
+ */
+@Slf4j
+public class SensitiveQuartz extends QuartzJobBean {
+
+ @Autowired
+ private Cache> cache;
+
+ /**
+ * 定时更新敏感词信息
+ *
+ * @param jobExecutionContext
+ */
+ @Override
+ protected void executeInternal(JobExecutionContext jobExecutionContext) {
+ log.info("敏感词定时更新");
+ List sensitives = cache.get(CachePrefix.SENSITIVE.getPrefix());
+ if (sensitives == null || sensitives.isEmpty()) {
+ return;
+ }
+ SensitiveWordsFilter.init(sensitives);
+ }
+}
\ No newline at end of file
diff --git a/framework/src/main/java/cn/lili/common/utils/Base64DecodeMultipartFile.java b/framework/src/main/java/cn/lili/common/utils/Base64DecodeMultipartFile.java
index b05d5662..b5059104 100644
--- a/framework/src/main/java/cn/lili/common/utils/Base64DecodeMultipartFile.java
+++ b/framework/src/main/java/cn/lili/common/utils/Base64DecodeMultipartFile.java
@@ -3,11 +3,10 @@ package cn.lili.common.utils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.multipart.MultipartFile;
+import java.io.*;
import java.util.Base64;
import java.util.Base64.Decoder;
-import java.io.*;
-
/**
* base64转为multipartFile工具类
*
@@ -55,7 +54,7 @@ public class Base64DecodeMultipartFile implements MultipartFile {
}
@Override
- public InputStream getInputStream() throws IOException {
+ public InputStream getInputStream() {
return new ByteArrayInputStream(imgContent);
}
@@ -66,8 +65,9 @@ public class Base64DecodeMultipartFile implements MultipartFile {
stream = new FileOutputStream(dest);
stream.write(imgContent);
} catch (IOException e) {
- log.error("transferTo错误",e);
- }finally {
+ log.error("transferTo错误", e);
+ } finally {
+ assert stream != null;
stream.close();
}
}
@@ -94,7 +94,7 @@ public class Base64DecodeMultipartFile implements MultipartFile {
byte[] bytes = Base64.getDecoder().decode(base64);
stream = new ByteArrayInputStream(bytes);
} catch (Exception e) {
- log.error("base64ToInputStream错误",e);
+ log.error("base64ToInputStream错误", e);
}
return stream;
}
@@ -111,13 +111,13 @@ public class Base64DecodeMultipartFile implements MultipartFile {
}
data = swapStream.toByteArray();
} catch (IOException e) {
- log.error("转码错误",e);
+ log.error("转码错误", e);
} finally {
if (in != null) {
try {
in.close();
} catch (IOException e) {
- log.error("inputStreamToStream错误",e);
+ log.error("inputStreamToStream错误", e);
}
}
}
diff --git a/framework/src/main/java/cn/lili/common/utils/BeanUtil.java b/framework/src/main/java/cn/lili/common/utils/BeanUtil.java
index 55eda005..a5e66e54 100644
--- a/framework/src/main/java/cn/lili/common/utils/BeanUtil.java
+++ b/framework/src/main/java/cn/lili/common/utils/BeanUtil.java
@@ -16,7 +16,7 @@ public class BeanUtil {
* 复制属性
*
* @param objectFrom 源自对象
- * @param objectTo 复制给对象
+ * @param objectTo 复制给对象
*/
public static void copyProperties(Object objectFrom, Object objectTo) {
BeanUtils.copyProperties(objectFrom, objectTo);
@@ -25,6 +25,7 @@ public class BeanUtil {
/**
* 获取属性名数组
+ *
* @param o 获取字段的对象
* @return 返回各个字段
*/
@@ -49,8 +50,9 @@ public class BeanUtil {
/**
* 根据属性名获取属性值
+ *
* @param fieldName 属性名
- * @param o 对象
+ * @param o 对象
* @return 属性值
*/
public static Object getFieldValueByName(String fieldName, Object o) {
@@ -69,6 +71,7 @@ public class BeanUtil {
/**
* 将对象转换为key value
* A=a&B=b&C=c 格式
+ *
* @param object 对象
* @return 格式化结果
*/
@@ -87,6 +90,7 @@ public class BeanUtil {
String key = fieldNames[j];
//获取值
Object value = BeanUtil.getFieldValueByName(key, object);
+ assert value != null;
stringBuffer.append(key).append("=").append(value.toString());
}
return stringBuffer.toString();
@@ -95,8 +99,9 @@ public class BeanUtil {
/**
* key value键值对 转换为 对象
* A=a&B=b&C=c 格式 转换为对象
+ *
* @param str 对象字符串
- * @param t 范型
+ * @param t 范型
* @param 范型
* @return 格式化结果
*/
diff --git a/framework/src/main/java/cn/lili/common/utils/CurrencyUtil.java b/framework/src/main/java/cn/lili/common/utils/CurrencyUtil.java
index eabf1df9..6b1b9aa2 100644
--- a/framework/src/main/java/cn/lili/common/utils/CurrencyUtil.java
+++ b/framework/src/main/java/cn/lili/common/utils/CurrencyUtil.java
@@ -1,6 +1,8 @@
package cn.lili.common.utils;
import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.util.Arrays;
/**
* 金额计算工具
@@ -23,27 +25,29 @@ public final class CurrencyUtil {
/**
* 提供精确的加法运算。
*
- * @param v1 被加数
- * @param v2 加数
- * @return 两个参数的和
+ * @return 累加之和
*/
- public static Double add(double v1, double v2) {
- BigDecimal b1 = new BigDecimal(v1);
- BigDecimal b2 = new BigDecimal(v2);
- return b1.add(b2).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
+ public static Double add(double... params) {
+ BigDecimal result = new BigDecimal("0");
+ for (double param : params) {
+ BigDecimal bigParam = BigDecimal.valueOf(param);
+ result = result.add(bigParam).setScale(2, RoundingMode.HALF_UP);
+ }
+ return result.doubleValue();
}
-
/**
- * 提供精确的减法运算。
+ * 提供精确的加法运算。
*
- * @param v1 被减数
- * @param v2 减数
- * @return 两个参数的差
+ * @return 累加之和
*/
- public static double sub(double v1, double v2) {
- BigDecimal b1 = new BigDecimal(v1);
- BigDecimal b2 = new BigDecimal(v2);
- return b1.subtract(b2).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
+ public static Double sub(double... params) {
+ BigDecimal result = BigDecimal.valueOf(params[0]);
+ params = Arrays.stream(params).skip(1).toArray();
+ for (double param : params) {
+ BigDecimal bigParam = BigDecimal.valueOf(param);
+ result = result.subtract(bigParam).setScale(2, RoundingMode.HALF_UP);
+ }
+ return result.doubleValue();
}
/**
@@ -54,9 +58,9 @@ public final class CurrencyUtil {
* @return 两个参数的积
*/
public static Double mul(double v1, double v2) {
- BigDecimal b1 = new BigDecimal(v1);
- BigDecimal b2 = new BigDecimal(v2);
- return b1.multiply(b2).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
+ BigDecimal b1 = BigDecimal.valueOf(v1);
+ BigDecimal b2 = BigDecimal.valueOf(v2);
+ return b1.multiply(b2).setScale(2, RoundingMode.HALF_UP).doubleValue();
}
/**
@@ -72,9 +76,9 @@ public final class CurrencyUtil {
throw new IllegalArgumentException(
"The scale must be a positive integer or zero");
}
- BigDecimal b1 = new BigDecimal(v1);
- BigDecimal b2 = new BigDecimal(v2);
- return b1.multiply(b2).setScale(scale, BigDecimal.ROUND_HALF_UP).doubleValue();
+ BigDecimal b1 = BigDecimal.valueOf(v1);
+ BigDecimal b2 = BigDecimal.valueOf(v2);
+ return b1.multiply(b2).setScale(scale, RoundingMode.HALF_UP).doubleValue();
}
/**
@@ -105,26 +109,9 @@ public final class CurrencyUtil {
if (v2 == 0) {
return 0;
}
- BigDecimal b1 = new BigDecimal(v1);
- BigDecimal b2 = new BigDecimal(v2);
- return b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
- }
-
- /**
- * 提供精确的小数位四舍五入处理。
- *
- * @param v 需要四舍五入的数字
- * @param scale 小数点后保留几位
- * @return 四舍五入后的结果
- */
- public static double round(double v, int scale) {
- if (scale < 0) {
- throw new IllegalArgumentException(
- "The scale must be a positive integer or zero");
- }
- BigDecimal b = new BigDecimal(v);
- BigDecimal one = new BigDecimal("1");
- return b.divide(one, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
+ BigDecimal b1 = BigDecimal.valueOf(v1);
+ BigDecimal b2 = BigDecimal.valueOf(v2);
+ return b1.divide(b2, scale, RoundingMode.HALF_UP).doubleValue();
}
/**
@@ -145,7 +132,6 @@ public final class CurrencyUtil {
* @return double类型分
*/
public static double reversalFen(Double money) {
- double price = div(money, 100);
- return price;
+ return div(money, 100);
}
}
\ No newline at end of file
diff --git a/framework/src/main/java/cn/lili/common/utils/DateUtil.java b/framework/src/main/java/cn/lili/common/utils/DateUtil.java
index 306cc0cd..b07f0bde 100644
--- a/framework/src/main/java/cn/lili/common/utils/DateUtil.java
+++ b/framework/src/main/java/cn/lili/common/utils/DateUtil.java
@@ -273,7 +273,7 @@ public class DateUtil {
* @return 时间戳
*/
public static long getDateline(String date) {
- return toDate(date, STANDARD_DATE_FORMAT).getTime() / 1000;
+ return Objects.requireNonNull(toDate(date, STANDARD_DATE_FORMAT)).getTime() / 1000;
}
/**
@@ -311,7 +311,7 @@ public class DateUtil {
* @return 时间戳
*/
public static long getDateline(String date, String pattern) {
- return toDate(date, pattern).getTime() / 1000;
+ return Objects.requireNonNull(toDate(date, pattern)).getTime() / 1000;
}
/**
diff --git a/framework/src/main/java/cn/lili/common/utils/HttpUtils.java b/framework/src/main/java/cn/lili/common/utils/HttpUtils.java
index 4f8e7a3e..706e805c 100644
--- a/framework/src/main/java/cn/lili/common/utils/HttpUtils.java
+++ b/framework/src/main/java/cn/lili/common/utils/HttpUtils.java
@@ -1,19 +1,25 @@
package cn.lili.common.utils;
+import com.alibaba.fastjson.JSONObject;
import com.xkcoding.http.HttpUtil;
import com.xkcoding.http.config.HttpConfig;
import com.xkcoding.http.support.HttpHeader;
import com.xkcoding.http.support.httpclient.HttpClientImpl;
+import lombok.extern.slf4j.Slf4j;
+import java.io.*;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.net.URLEncoder;
+import java.nio.charset.StandardCharsets;
+import java.util.Iterator;
import java.util.Map;
/**
- * HttpUtil 工具,统一处理 http 请求,方便对 simple-http 做定制
- *
- * @author yadong.zhang (yadong.zhang0415(a)gmail.com)
- * @version 4.1
- * @since 1.0.0
+ * HTTP 工具类
+ * @author liushuai
*/
+@Slf4j
public class HttpUtils {
public HttpUtils(HttpConfig config) {
@@ -105,4 +111,258 @@ public class HttpUtils {
public String post(String url, Map params, HttpHeader header, boolean encode) {
return HttpUtil.post(url, params, header, encode);
}
+
+
+ /**
+ * 静态方法运行参数
+ */
+ public static final int HTTP_CONN_TIMEOUT = 100000;
+ public static final int HTTP_SOCKET_TIMEOUT = 100000;
+
+ /**
+ * POST 静态方法请求
+ *
+ * @param reqUrl
+ * @param parameters
+ * @param encoding
+ * @param connectTimeout
+ * @param readTimeout
+ * @return
+ */
+ public static String doPost(String reqUrl, Map parameters, String encoding, int connectTimeout,
+ int readTimeout) {
+ HttpURLConnection urlConn = null;
+ try {
+ urlConn = sendPost(reqUrl, parameters, encoding, connectTimeout, readTimeout);
+ String responseContent = getContent(urlConn, encoding);
+ return responseContent.trim();
+ } finally {
+ if (urlConn != null) {
+ urlConn.disconnect();
+
+ }
+ }
+ }
+
+ /**
+ * post携带json请求 静态方法
+ *
+ * @param reqUrl 请求地址
+ * @param jsonParameters 参数
+ * @return
+ */
+ public static String doPostWithJson(String reqUrl, Map jsonParameters) {
+
+ BufferedReader reader = null;
+ try {
+ //创建连接
+ URL url = new URL(reqUrl);
+ HttpURLConnection connection = (HttpURLConnection) url.openConnection();
+ connection.setDoOutput(true);
+ connection.setDoInput(true);
+ connection.setUseCaches(false);
+ connection.setInstanceFollowRedirects(true);
+ //设置请求方式
+ connection.setRequestMethod("POST");
+ //设置发送数据的格式
+ connection.setRequestProperty("Content-Type", "application/json");
+ connection.connect();
+ //一定要用BufferedReader 来接收响应, 使用字节来接收响应的方法是接收不到内容的
+ //utf-8编码
+ OutputStreamWriter out = new OutputStreamWriter(connection.getOutputStream(), StandardCharsets.UTF_8);
+ out.append(JSONObject.toJSONString(jsonParameters));
+ out.flush();
+ out.close();
+ //读取响应
+ reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), StandardCharsets.UTF_8));
+ String line;
+ String res = "";
+ while ((line = reader.readLine()) != null) {
+ res += line;
+ }
+ reader.close();
+
+ return res;
+ } catch (IOException e) {
+ log.error("post请求错误", e);
+ }
+ //自定义错误信息
+ return "error";
+
+ }
+
+ /**
+ * post携带json请求 静态方法
+ *
+ * @param reqUrl 请求地址
+ * @param object 对象
+ * @return
+ */
+ public static String doPostWithJson(String reqUrl, Object object) {
+
+ BufferedReader reader = null;
+ try {
+ //创建连接
+ URL url = new URL(reqUrl);
+ HttpURLConnection connection = (HttpURLConnection) url.openConnection();
+ connection.setDoOutput(true);
+ connection.setDoInput(true);
+ connection.setUseCaches(false);
+ connection.setInstanceFollowRedirects(true);
+ //设置请求方式
+ connection.setRequestMethod("POST");
+ //设置发送数据的格式
+ connection.setRequestProperty("Content-Type", "application/json");
+ connection.connect();
+ //一定要用BufferedReader 来接收响应, 使用字节来接收响应的方法是接收不到内容的
+ //utf-8编码
+ OutputStreamWriter out = new OutputStreamWriter(connection.getOutputStream(), StandardCharsets.UTF_8);
+ out.append(JSONObject.toJSONString(object));
+ out.flush();
+ out.close();
+ //读取响应
+ reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), StandardCharsets.UTF_8));
+ String line;
+ String res = "";
+ while ((line = reader.readLine()) != null) {
+ res += line;
+ }
+ reader.close();
+
+ return res;
+ } catch (IOException e) {
+ log.error("post错误", e);
+ }
+ //自定义错误信息
+ return "error";
+
+ }
+
+ /**
+ * 发送post请求
+ *
+ * @param reqUrl
+ * @param parameters
+ * @param encoding
+ * @param connectTimeout
+ * @param readTimeout
+ * @return
+ */
+ private static HttpURLConnection sendPost(String reqUrl,
+ Map parameters, String encoding, int connectTimeout, int readTimeout) {
+ HttpURLConnection urlConn = null;
+ try {
+ String params = generatorParamString(parameters, encoding);
+ URL url = new URL(reqUrl);
+ urlConn = (HttpURLConnection) url.openConnection();
+ urlConn.setRequestMethod("POST");
+ //(单位:毫秒)jdk
+ urlConn.setConnectTimeout(connectTimeout);
+ //(单位:毫秒)jdk 1.5换成这个,读操作超时
+ urlConn.setReadTimeout(readTimeout);
+ urlConn.setDoOutput(true);
+ //String按照字节处理是一个好方法
+ byte[] b = params.getBytes(encoding);
+ urlConn.getOutputStream().write(b, 0, b.length);
+ urlConn.getOutputStream().flush();
+ urlConn.getOutputStream().close();
+ } catch (Exception e) {
+ throw new RuntimeException(e.getMessage(), e);
+ }
+ return urlConn;
+ }
+
+ /**
+ * get 请求 静态方法
+ *
+ * @param urlConn
+ * @param encoding
+ * @return
+ */
+ private static String getContent(HttpURLConnection urlConn, String encoding) {
+ try {
+ String responseContent = null;
+ InputStream in = urlConn.getInputStream();
+ BufferedReader rd = new BufferedReader(new InputStreamReader(in, encoding));
+ String tempLine = rd.readLine();
+ StringBuffer tempStr = new StringBuffer();
+ String crlf = System.getProperty("line.separator");
+ while (tempLine != null) {
+ tempStr.append(tempLine);
+ tempStr.append(crlf);
+ tempLine = rd.readLine();
+ }
+ responseContent = tempStr.toString();
+ rd.close();
+ in.close();
+ return responseContent;
+ } catch (Exception e) {
+ throw new RuntimeException(e.getMessage(), e);
+ }
+ }
+
+ /**
+ * get 请求 静态方法
+ *
+ * @param link
+ * @param encoding
+ * @return
+ */
+ public static String doGet(String link, String encoding, int connectTimeout, int readTimeout) {
+ HttpURLConnection conn = null;
+ try {
+ URL url = new URL(link);
+ conn = (HttpURLConnection) url.openConnection();
+ conn.setRequestMethod("GET");
+ conn.setConnectTimeout(connectTimeout);
+ conn.setReadTimeout(readTimeout);
+ BufferedInputStream in = new BufferedInputStream(
+ conn.getInputStream());
+ ByteArrayOutputStream out = new ByteArrayOutputStream();
+ byte[] buf = new byte[1024];
+ for (int i = 0; (i = in.read(buf)) > 0; ) {
+ out.write(buf, 0, i);
+ }
+ out.flush();
+ String s = out.toString(encoding);
+ return s;
+ } catch (Exception e) {
+ throw new RuntimeException(e.getMessage(), e);
+ } finally {
+ if (conn != null) {
+ conn.disconnect();
+ conn = null;
+ }
+ }
+ }
+
+ /**
+ * 将parameters中数据转换成用"&"链接的http请求参数形式
+ *
+ * @param parameters
+ * @return
+ */
+ private static String generatorParamString(Map parameters, String encoding) {
+ StringBuffer params = new StringBuffer();
+ if (parameters != null) {
+ for (Iterator iter = parameters.keySet().iterator(); iter
+ .hasNext(); ) {
+ String name = iter.next();
+ String value = parameters.get(name);
+ params.append(name + "=");
+ try {
+ params.append(URLEncoder.encode(value, encoding));
+ } catch (UnsupportedEncodingException e) {
+ throw new RuntimeException(e.getMessage(), e);
+ } catch (Exception e) {
+ String message = String.format("'%s'='%s'", name, value);
+ throw new RuntimeException(message, e);
+ }
+ if (iter.hasNext()) {
+ params.append("&");
+ }
+ }
+ }
+ return params.toString();
+ }
}
diff --git a/framework/src/main/java/cn/lili/modules/connect/util/UuidUtils.java b/framework/src/main/java/cn/lili/common/utils/UuidUtils.java
similarity index 98%
rename from framework/src/main/java/cn/lili/modules/connect/util/UuidUtils.java
rename to framework/src/main/java/cn/lili/common/utils/UuidUtils.java
index af9b2cdd..b9f17bcb 100644
--- a/framework/src/main/java/cn/lili/modules/connect/util/UuidUtils.java
+++ b/framework/src/main/java/cn/lili/common/utils/UuidUtils.java
@@ -1,4 +1,4 @@
-package cn.lili.modules.connect.util;
+package cn.lili.common.utils;
import java.nio.charset.StandardCharsets;
import java.util.concurrent.ThreadLocalRandom;
diff --git a/framework/src/main/java/cn/lili/common/vo/PageVO.java b/framework/src/main/java/cn/lili/common/vo/PageVO.java
index 6d7fca44..c782a6aa 100644
--- a/framework/src/main/java/cn/lili/common/vo/PageVO.java
+++ b/framework/src/main/java/cn/lili/common/vo/PageVO.java
@@ -1,5 +1,6 @@
package cn.lili.common.vo;
+import cn.hutool.core.text.CharSequenceUtil;
import cn.lili.common.utils.StringUtils;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@@ -31,17 +32,8 @@ public class PageVO implements Serializable {
@ApiModelProperty(value = "需要驼峰转换蛇形", notes = "一般不做处理,如果数据库中就是蛇形,则这块需要处理。")
private Boolean notConvert;
- public Integer getMongoPageNumber() {
- int i = pageNumber - 1;
- if (i < 0) {
- return pageNumber;
- } else {
- return i;
- }
- }
-
public String getSort() {
- if (!StringUtils.isEmpty(sort)) {
+ if (CharSequenceUtil.isNotEmpty(sort)) {
if (notConvert == null || Boolean.FALSE.equals(notConvert)) {
return StringUtils.camel2Underline(sort);
} else {
diff --git a/framework/src/main/java/cn/lili/common/vo/SearchVO.java b/framework/src/main/java/cn/lili/common/vo/SearchVO.java
index d0d6c818..3f752e79 100644
--- a/framework/src/main/java/cn/lili/common/vo/SearchVO.java
+++ b/framework/src/main/java/cn/lili/common/vo/SearchVO.java
@@ -31,8 +31,7 @@ public class SearchVO implements Serializable {
if (StringUtils.isEmpty(startDate)) {
return null;
}
- Date date = DateUtil.toDate(startDate, DateUtil.STANDARD_DATE_FORMAT);
- return date;
+ return DateUtil.toDate(startDate, DateUtil.STANDARD_DATE_FORMAT);
}
public Date getConvertEndDate() {
diff --git a/framework/src/main/java/cn/lili/elasticsearch/BaseElasticsearchService.java b/framework/src/main/java/cn/lili/elasticsearch/BaseElasticsearchService.java
index 8ece3359..5cc50ec4 100644
--- a/framework/src/main/java/cn/lili/elasticsearch/BaseElasticsearchService.java
+++ b/framework/src/main/java/cn/lili/elasticsearch/BaseElasticsearchService.java
@@ -244,7 +244,7 @@ public abstract class BaseElasticsearchService {
" }\n" +
" }\n" +
" },\n" +
- " \"isAuth\": {\n" +
+ " \"authFlag\": {\n" +
" \"type\": \"text\",\n" +
" \"fields\": {\n" +
" \"keyword\": {\n" +
@@ -331,6 +331,9 @@ public abstract class BaseElasticsearchService {
" }\n" +
" }\n" +
" },\n" +
+ " \"promotionMapJson\": {\n" +
+ " \"type\": \"text\"\n" +
+ " },\n" +
" \"thumbnail\": {\n" +
" \"type\": \"text\",\n" +
" \"fields\": {\n" +
diff --git a/framework/src/main/java/cn/lili/elasticsearch/EsSuffix.java b/framework/src/main/java/cn/lili/elasticsearch/EsSuffix.java
index 528f28c6..9b6e4a9b 100644
--- a/framework/src/main/java/cn/lili/elasticsearch/EsSuffix.java
+++ b/framework/src/main/java/cn/lili/elasticsearch/EsSuffix.java
@@ -13,4 +13,9 @@ public class EsSuffix {
*/
public static final String GOODS_INDEX_NAME = "goods";
+ /**
+ * 日志索引后缀
+ */
+ public static final String LOGS_INDEX_NAME = "logs";
+
}
diff --git a/framework/src/main/java/cn/lili/elasticsearch/config/ElasticsearchConfig.java b/framework/src/main/java/cn/lili/elasticsearch/config/ElasticsearchConfig.java
index f95b749d..38b63496 100644
--- a/framework/src/main/java/cn/lili/elasticsearch/config/ElasticsearchConfig.java
+++ b/framework/src/main/java/cn/lili/elasticsearch/config/ElasticsearchConfig.java
@@ -16,6 +16,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.elasticsearch.config.AbstractElasticsearchConfiguration;
+import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate;
import javax.annotation.PreDestroy;
import java.io.IOException;
@@ -56,18 +57,23 @@ public class ElasticsearchConfig extends AbstractElasticsearchConfiguration {
.setDefaultCredentialsProvider(credential)
.setKeepAliveStrategy(getConnectionKeepAliveStrategy())
.setMaxConnPerRoute(10)
- .setDefaultIOReactorConfig(IOReactorConfig.custom().setIoThreadCount(1).build()));
+ .setDefaultIOReactorConfig(IOReactorConfig.custom().setIoThreadCount(Runtime.getRuntime().availableProcessors()).build()));
}
restBuilder.setRequestConfigCallback(requestConfigBuilder ->
requestConfigBuilder.setConnectTimeout(1000) //time until a connection with the server is established.
.setSocketTimeout(12 * 1000) //time of inactivity to wait for packets[data] to receive.
- .setConnectionRequestTimeout(2 * 1000)); //time to fetch a connection from the connection pool 0 for infinite.
+ .setConnectionRequestTimeout(-1)); //time to fetch a connection from the connection pool 0 for infinite.
client = new RestHighLevelClient(restBuilder);
return client;
}
+ @Bean("elasticsearchRestTemplate")
+ public ElasticsearchRestTemplate elasticsearchRestTemplate() {
+ return new ElasticsearchRestTemplate(this.client);
+ }
+
private HttpHost[] getHttpHosts() {
List clusterNodes = elasticsearchProperties.getClusterNodes();
HttpHost[] httpHosts = new HttpHost[clusterNodes.size()];
diff --git a/framework/src/main/java/cn/lili/modules/connect/request/BaseAuthRequest.java b/framework/src/main/java/cn/lili/modules/connect/request/BaseAuthRequest.java
index 9e1274dc..6e695606 100644
--- a/framework/src/main/java/cn/lili/modules/connect/request/BaseAuthRequest.java
+++ b/framework/src/main/java/cn/lili/modules/connect/request/BaseAuthRequest.java
@@ -1,8 +1,10 @@
package cn.lili.modules.connect.request;
import cn.lili.cache.Cache;
+import cn.lili.common.utils.HttpUtils;
import cn.lili.common.utils.StringUtils;
import cn.lili.common.utils.UrlBuilder;
+import cn.lili.common.utils.UuidUtils;
import cn.lili.modules.connect.config.AuthConfig;
import cn.lili.modules.connect.config.ConnectAuth;
import cn.lili.modules.connect.entity.dto.AuthCallback;
@@ -12,8 +14,6 @@ import cn.lili.modules.connect.entity.dto.ConnectAuthUser;
import cn.lili.modules.connect.entity.enums.AuthResponseStatus;
import cn.lili.modules.connect.exception.AuthException;
import cn.lili.modules.connect.util.AuthChecker;
-import cn.lili.common.utils.HttpUtils;
-import cn.lili.modules.connect.util.UuidUtils;
import com.xkcoding.http.util.UrlUtil;
import lombok.extern.slf4j.Slf4j;
diff --git a/framework/src/main/java/cn/lili/modules/connect/service/ConnectService.java b/framework/src/main/java/cn/lili/modules/connect/service/ConnectService.java
index 7a33b102..6df3b143 100644
--- a/framework/src/main/java/cn/lili/modules/connect/service/ConnectService.java
+++ b/framework/src/main/java/cn/lili/modules/connect/service/ConnectService.java
@@ -5,6 +5,7 @@ import cn.lili.common.security.token.Token;
import cn.lili.modules.connect.entity.Connect;
import cn.lili.modules.connect.entity.dto.ConnectAuthUser;
import cn.lili.modules.connect.entity.dto.WechatMPLoginParams;
+import cn.lili.modules.member.entity.dto.ConnectQueryDTO;
import com.baomidou.mybatisplus.extension.service.IService;
import javax.naming.NoPermissionException;
@@ -103,4 +104,12 @@ public interface ConnectService extends IService {
* @return token
*/
Token miniProgramAutoLogin(WechatMPLoginParams params);
+
+ /**
+ * 根据查询dto获取查询对象
+ *
+ * @param connectQueryDTO
+ * @return
+ */
+ Connect queryConnect(ConnectQueryDTO connectQueryDTO);
}
\ No newline at end of file
diff --git a/framework/src/main/java/cn/lili/modules/connect/serviceimpl/ConnectServiceImpl.java b/framework/src/main/java/cn/lili/modules/connect/serviceimpl/ConnectServiceImpl.java
index 68ca20b6..0d0b1ab2 100644
--- a/framework/src/main/java/cn/lili/modules/connect/serviceimpl/ConnectServiceImpl.java
+++ b/framework/src/main/java/cn/lili/modules/connect/serviceimpl/ConnectServiceImpl.java
@@ -12,6 +12,7 @@ import cn.lili.common.security.AuthUser;
import cn.lili.common.security.context.UserContext;
import cn.lili.common.security.token.Token;
import cn.lili.common.utils.CookieUtil;
+import cn.lili.common.utils.HttpUtils;
import cn.lili.common.utils.StringUtils;
import cn.lili.modules.connect.entity.Connect;
import cn.lili.modules.connect.entity.dto.ConnectAuthUser;
@@ -20,6 +21,7 @@ import cn.lili.modules.connect.entity.enums.ConnectEnum;
import cn.lili.modules.connect.mapper.ConnectMapper;
import cn.lili.modules.connect.service.ConnectService;
import cn.lili.modules.member.entity.dos.Member;
+import cn.lili.modules.member.entity.dto.ConnectQueryDTO;
import cn.lili.modules.member.service.MemberService;
import cn.lili.modules.member.token.MemberTokenGenerate;
import cn.lili.modules.system.entity.dos.Setting;
@@ -27,7 +29,6 @@ import cn.lili.modules.system.entity.dto.connect.WechatConnectSetting;
import cn.lili.modules.system.entity.dto.connect.dto.WechatConnectSettingItem;
import cn.lili.modules.system.entity.enums.SettingEnum;
import cn.lili.modules.system.service.SettingService;
-import cn.lili.modules.system.utils.HttpUtils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.extern.slf4j.Slf4j;
@@ -232,6 +233,16 @@ public class ConnectServiceImpl extends ServiceImpl impl
return memberTokenGenerate.createToken(newMember.getUsername(), true);
}
+ @Override
+ public Connect queryConnect(ConnectQueryDTO connectQueryDTO) {
+
+ LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
+ queryWrapper.eq(StringUtils.isNotEmpty(connectQueryDTO.getUserId()), Connect::getUserId, connectQueryDTO.getUserId())
+ .eq(StringUtils.isNotEmpty(connectQueryDTO.getUnionType()), Connect::getUnionType, connectQueryDTO.getUnionType())
+ .eq(StringUtils.isNotEmpty(connectQueryDTO.getUnionId()), Connect::getUnionId, connectQueryDTO.getUnionId());
+ return this.getOne(queryWrapper);
+ }
+
/**
* 会员绑定 绑定微信小程序
*
diff --git a/framework/src/main/java/cn/lili/modules/distribution/entity/dos/DistributionCash.java b/framework/src/main/java/cn/lili/modules/distribution/entity/dos/DistributionCash.java
index b648f323..e04a5ff6 100644
--- a/framework/src/main/java/cn/lili/modules/distribution/entity/dos/DistributionCash.java
+++ b/framework/src/main/java/cn/lili/modules/distribution/entity/dos/DistributionCash.java
@@ -1,6 +1,6 @@
package cn.lili.modules.distribution.entity.dos;
-import cn.lili.modules.member.entity.enums.WithdrawStatusEnum;
+import cn.lili.modules.wallet.entity.enums.WithdrawStatusEnum;
import cn.lili.mybatis.BaseEntity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
diff --git a/framework/src/main/java/cn/lili/modules/distribution/entity/dos/DistributionOrder.java b/framework/src/main/java/cn/lili/modules/distribution/entity/dos/DistributionOrder.java
index 93404507..491a8faf 100644
--- a/framework/src/main/java/cn/lili/modules/distribution/entity/dos/DistributionOrder.java
+++ b/framework/src/main/java/cn/lili/modules/distribution/entity/dos/DistributionOrder.java
@@ -5,7 +5,6 @@ import cn.lili.modules.order.order.entity.dos.StoreFlow;
import cn.lili.mybatis.BaseIdEntity;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
@@ -31,11 +30,6 @@ public class DistributionOrder extends BaseIdEntity {
private static final long serialVersionUID = 501799944909496507L;
- @TableId
- @TableField
- @ApiModelProperty(value = "唯一标识", hidden = true)
- private String id;
-
@CreatedDate
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
diff --git a/framework/src/main/java/cn/lili/modules/distribution/entity/dto/DistributionGoodsSearchParams.java b/framework/src/main/java/cn/lili/modules/distribution/entity/dto/DistributionGoodsSearchParams.java
index d47a0d36..4f9cd438 100644
--- a/framework/src/main/java/cn/lili/modules/distribution/entity/dto/DistributionGoodsSearchParams.java
+++ b/framework/src/main/java/cn/lili/modules/distribution/entity/dto/DistributionGoodsSearchParams.java
@@ -1,11 +1,14 @@
package cn.lili.modules.distribution.entity.dto;
+import cn.hutool.core.text.CharSequenceUtil;
import cn.lili.common.security.context.UserContext;
-import cn.lili.common.utils.StringUtils;
import cn.lili.common.vo.PageVO;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.Objects;
/**
* 分销员商品查询条件
@@ -13,25 +16,35 @@ import lombok.Data;
* @author pikachu
* @since 2020-03-14 23:04:56
*/
+@EqualsAndHashCode(callSuper = true)
@Data
public class DistributionGoodsSearchParams extends PageVO {
+ @ApiModelProperty(value = "商品ID")
+ private String goodsId;
+
@ApiModelProperty(value = "商品名称")
private String goodsName;
@ApiModelProperty(value = "是否已选择")
private boolean isChecked;
+ public QueryWrapper queryWrapper() {
+ QueryWrapper queryWrapper = this.distributionQueryWrapper();
+ queryWrapper.eq(CharSequenceUtil.isNotEmpty(goodsId), "goods_id", goodsId);
+ queryWrapper.eq(CharSequenceUtil.isNotEmpty(goodsName), "goods_name", goodsId);
+ return queryWrapper;
+ }
public QueryWrapper storeQueryWrapper() {
QueryWrapper queryWrapper = this.distributionQueryWrapper();
- queryWrapper.eq("dg.store_id", UserContext.getCurrentUser().getStoreId());
+ queryWrapper.eq("dg.store_id", Objects.requireNonNull(UserContext.getCurrentUser()).getStoreId());
return queryWrapper;
}
public QueryWrapper distributionQueryWrapper() {
QueryWrapper queryWrapper = new QueryWrapper<>();
- queryWrapper.like(StringUtils.isNotEmpty(goodsName), "dg.goods_name", goodsName);
+ queryWrapper.like(CharSequenceUtil.isNotEmpty(goodsName), "dg.goods_name", goodsName);
return queryWrapper;
}
diff --git a/framework/src/main/java/cn/lili/modules/distribution/service/DistributionCashService.java b/framework/src/main/java/cn/lili/modules/distribution/service/DistributionCashService.java
index b5e75c01..2a107b9f 100644
--- a/framework/src/main/java/cn/lili/modules/distribution/service/DistributionCashService.java
+++ b/framework/src/main/java/cn/lili/modules/distribution/service/DistributionCashService.java
@@ -49,10 +49,4 @@ public interface DistributionCashService extends IService {
*/
DistributionCash audit(@PathVariable String id, @RequestParam String result);
- /**
- * 待处理分销员提现申请数量
- *
- * @return 待处理分销员提现申请数量
- */
- Integer newDistributionCash();
}
\ No newline at end of file
diff --git a/framework/src/main/java/cn/lili/modules/distribution/service/DistributionGoodsService.java b/framework/src/main/java/cn/lili/modules/distribution/service/DistributionGoodsService.java
index 4ec1478c..08df403a 100644
--- a/framework/src/main/java/cn/lili/modules/distribution/service/DistributionGoodsService.java
+++ b/framework/src/main/java/cn/lili/modules/distribution/service/DistributionGoodsService.java
@@ -21,10 +21,34 @@ public interface DistributionGoodsService extends IService {
* 根据条件分页查询分销商品信息
*
* @param distributionGoodsSearchParams 商品条件
- * @return
+ * @return 分页分销商品信息
*/
IPage goodsPage(DistributionGoodsSearchParams distributionGoodsSearchParams);
+
+ /**
+ * 根据条件查询分销商品信息列表
+ *
+ * @param distributionGoodsSearchParams 条件
+ * @return 分销商品信息列表
+ */
+ List getDistributionGoodsList(DistributionGoodsSearchParams distributionGoodsSearchParams);
+
+ /**
+ * 根据条件查询分销商品信息
+ *
+ * @param distributionGoodsSearchParams 条件
+ * @return 分销商品信息
+ */
+ DistributionGoods getDistributionGoods(DistributionGoodsSearchParams distributionGoodsSearchParams);
+
+ /**
+ * 根据条件删除分销商品
+ *
+ * @param distributionGoodsSearchParams 条件
+ */
+ boolean deleteDistributionGoods(DistributionGoodsSearchParams distributionGoodsSearchParams);
+
/**
* 获取分销商品
*
diff --git a/framework/src/main/java/cn/lili/modules/distribution/service/DistributionSelectedGoodsService.java b/framework/src/main/java/cn/lili/modules/distribution/service/DistributionSelectedGoodsService.java
index 86534f3b..5a11b548 100644
--- a/framework/src/main/java/cn/lili/modules/distribution/service/DistributionSelectedGoodsService.java
+++ b/framework/src/main/java/cn/lili/modules/distribution/service/DistributionSelectedGoodsService.java
@@ -13,14 +13,21 @@ public interface DistributionSelectedGoodsService extends IService getDistributionGoodsList(DistributionGoodsSearchParams distributionGoodsSearchParams) {
+ return this.list(distributionGoodsSearchParams.queryWrapper());
+ }
+
+ /**
+ * 根据条件查询分销商品信息
+ *
+ * @param distributionGoodsSearchParams 条件
+ * @return 分销商品信息
+ */
+ @Override
+ public DistributionGoods getDistributionGoods(DistributionGoodsSearchParams distributionGoodsSearchParams) {
+ return this.getOne(distributionGoodsSearchParams.queryWrapper(), false);
+ }
+
+ /**
+ * 根据条件删除分销商品
+ *
+ * @param distributionGoodsSearchParams 条件
+ */
+ @Override
+ public boolean deleteDistributionGoods(DistributionGoodsSearchParams distributionGoodsSearchParams) {
+ return this.remove(distributionGoodsSearchParams.queryWrapper());
+ }
+
@Override
public DistributionGoods distributionGoodsVO(String id) {
diff --git a/framework/src/main/java/cn/lili/modules/distribution/serviceimpl/DistributionOrderServiceImpl.java b/framework/src/main/java/cn/lili/modules/distribution/serviceimpl/DistributionOrderServiceImpl.java
index aed156ad..c1dc8f98 100644
--- a/framework/src/main/java/cn/lili/modules/distribution/serviceimpl/DistributionOrderServiceImpl.java
+++ b/framework/src/main/java/cn/lili/modules/distribution/serviceimpl/DistributionOrderServiceImpl.java
@@ -4,7 +4,6 @@ import cn.hutool.core.date.DateField;
import cn.hutool.core.date.DateTime;
import cn.hutool.json.JSONUtil;
import cn.lili.common.utils.CurrencyUtil;
-import cn.lili.mybatis.util.PageUtil;
import cn.lili.modules.distribution.entity.dos.Distribution;
import cn.lili.modules.distribution.entity.dos.DistributionOrder;
import cn.lili.modules.distribution.entity.enums.DistributionOrderStatusEnum;
@@ -14,6 +13,7 @@ import cn.lili.modules.distribution.service.DistributionOrderService;
import cn.lili.modules.distribution.service.DistributionService;
import cn.lili.modules.order.order.entity.dos.Order;
import cn.lili.modules.order.order.entity.dos.StoreFlow;
+import cn.lili.modules.order.order.entity.dto.StoreFlowQueryDTO;
import cn.lili.modules.order.order.entity.enums.PayStatusEnum;
import cn.lili.modules.order.order.service.OrderService;
import cn.lili.modules.order.order.service.StoreFlowService;
@@ -21,6 +21,7 @@ import cn.lili.modules.system.entity.dos.Setting;
import cn.lili.modules.system.entity.dto.DistributionSetting;
import cn.lili.modules.system.entity.enums.SettingEnum;
import cn.lili.modules.system.service.SettingService;
+import cn.lili.mybatis.util.PageUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -87,10 +88,9 @@ public class DistributionOrderServiceImpl extends ServiceImpl storeFlowList = storeFlowService.list(new LambdaQueryWrapper()
- .eq(StoreFlow::getOrderSn, orderSn)
- .isNotNull(StoreFlow::getDistributionRebate));
- Double rebate = 0.0;
+ List storeFlowList = storeFlowService
+ .listStoreFlow(StoreFlowQueryDTO.builder().justDistribution(true).orderSn(orderSn).build());
+ double rebate = 0.0;
//循环店铺流水记录判断是否包含分销商品
//包含分销商品则进行记录分销订单、计算分销总额
for (StoreFlow storeFlow : storeFlowList) {
@@ -165,7 +165,7 @@ public class DistributionOrderServiceImpl extends ServiceImpl()
- .eq(StoreFlow::getRefundSn, afterSaleSn)
- .isNotNull(StoreFlow::getDistributionRebate));
+ StoreFlow storeFlow = storeFlowService.queryOne(StoreFlowQueryDTO.builder().justDistribution(true).refundSn(afterSaleSn).build());
if (storeFlow != null) {
//获取收款分销订单
@@ -199,12 +197,7 @@ public class DistributionOrderServiceImpl extends ServiceImpl()
.eq(DistributionOrder::getOrderItemSn, storeFlow.getOrderItemSn())
.set(DistributionOrder::getDistributionOrderStatus, DistributionOrderStatusEnum.CANCEL.name()));
diff --git a/framework/src/main/java/cn/lili/modules/distribution/serviceimpl/DistributionSelectedGoodsServiceImpl.java b/framework/src/main/java/cn/lili/modules/distribution/serviceimpl/DistributionSelectedGoodsServiceImpl.java
index 972bc944..92ffc97b 100644
--- a/framework/src/main/java/cn/lili/modules/distribution/serviceimpl/DistributionSelectedGoodsServiceImpl.java
+++ b/framework/src/main/java/cn/lili/modules/distribution/serviceimpl/DistributionSelectedGoodsServiceImpl.java
@@ -46,4 +46,10 @@ public class DistributionSelectedGoodsServiceImpl extends ServiceImpl()
+ .eq(DistributionSelectedGoods::getDistributionGoodsId, distributionGoodsId));
+ }
}
diff --git a/framework/src/main/java/cn/lili/modules/file/plugin/FileManagerPlugin.java b/framework/src/main/java/cn/lili/modules/file/plugin/FileManagerPlugin.java
index 7aacc714..bd279d05 100644
--- a/framework/src/main/java/cn/lili/modules/file/plugin/FileManagerPlugin.java
+++ b/framework/src/main/java/cn/lili/modules/file/plugin/FileManagerPlugin.java
@@ -37,13 +37,4 @@ public interface FileManagerPlugin {
*/
void deleteFile(List key);
- /**
- * 根据原图生成规定尺寸的图片
- *
- * @param url 连接
- * @param width 宽
- * @param height 高
- * @return
- */
- String getUrl(String url, Integer width, Integer height);
}
diff --git a/framework/src/main/java/cn/lili/modules/file/plugin/impl/AliFileManagerPlugin.java b/framework/src/main/java/cn/lili/modules/file/plugin/impl/AliFileManagerPlugin.java
index e28bfc88..4ddbf899 100644
--- a/framework/src/main/java/cn/lili/modules/file/plugin/impl/AliFileManagerPlugin.java
+++ b/framework/src/main/java/cn/lili/modules/file/plugin/impl/AliFileManagerPlugin.java
@@ -183,11 +183,4 @@ public class AliFileManagerPlugin implements FileManagerPlugin {
ossClient.shutdown();
}
}
-
- @Override
- public String getUrl(String url, Integer width, Integer height) {
- //缩略图全路径
- //返回缩略图全路径
- return url + "?x-oss-process=style/" + width + "X" + height;
- }
}
diff --git a/framework/src/main/java/cn/lili/modules/file/util/FileUtil.java b/framework/src/main/java/cn/lili/modules/file/util/FileUtil.java
new file mode 100644
index 00000000..46cbf51f
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/file/util/FileUtil.java
@@ -0,0 +1,24 @@
+package cn.lili.modules.file.util;
+
+/**
+ * FileUtil
+ *
+ * @author Chopper
+ * @version v1.0
+ * 2021-11-22 11:19
+ */
+public class FileUtil {
+
+ /**
+ * 根据原图生成规定尺寸的图片
+ *
+ * @param url 连接
+ * @param width 宽
+ * @param height 高
+ * @return
+ */
+ public static String getUrl(String url, Integer width, Integer height) {
+ //缩略图全路径
+ return url + "?x-oss-process=style/" + width + "X" + height;
+ }
+}
diff --git a/framework/src/main/java/cn/lili/modules/goods/entity/dos/Goods.java b/framework/src/main/java/cn/lili/modules/goods/entity/dos/Goods.java
index dc8160e5..205672c0 100644
--- a/framework/src/main/java/cn/lili/modules/goods/entity/dos/Goods.java
+++ b/framework/src/main/java/cn/lili/modules/goods/entity/dos/Goods.java
@@ -8,6 +8,7 @@ import cn.lili.common.enums.ResultCode;
import cn.lili.common.exception.ServiceException;
import cn.lili.modules.goods.entity.dto.GoodsOperationDTO;
import cn.lili.modules.goods.entity.enums.GoodsStatusEnum;
+import cn.lili.modules.goods.entity.enums.GoodsTypeEnum;
import cn.lili.mybatis.BaseEntity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonIgnore;
@@ -107,7 +108,7 @@ public class Goods extends BaseEntity {
private String templateId;
@ApiModelProperty(value = "审核状态")
- private String isAuth;
+ private String authFlag;
@ApiModelProperty(value = "审核信息")
private String authMessage;
@@ -171,20 +172,20 @@ public class Goods extends BaseEntity {
//循环sku,判定sku是否有效
for (Map sku : goodsOperationDTO.getSkuList()) {
//判定参数不能为空
- if (sku.get("sn") == null) {
+ if (!sku.containsKey("sn") || sku.get("sn") == null) {
throw new ServiceException(ResultCode.GOODS_SKU_SN_ERROR);
}
- if (StringUtil.isEmpty(sku.get("price").toString()) || Convert.toDouble(sku.get("price")) <= 0) {
+ if (!sku.containsKey("price") || StringUtil.isEmpty(sku.get("price").toString()) || Convert.toDouble(sku.get("price")) <= 0) {
throw new ServiceException(ResultCode.GOODS_SKU_PRICE_ERROR);
}
- if (StringUtil.isEmpty(sku.get("cost").toString()) || Convert.toDouble(sku.get("cost")) <= 0) {
+ if (!sku.containsKey("cost") || StringUtil.isEmpty(sku.get("cost").toString()) || Convert.toDouble(sku.get("cost")) <= 0) {
throw new ServiceException(ResultCode.GOODS_SKU_COST_ERROR);
}
//虚拟商品没有重量字段
- if (sku.containsKey("weight") && (StringUtil.isEmpty(sku.get("weight").toString()) || Convert.toDouble(sku.get("weight").toString()) < 0)) {
+ if (this.goodsType.equals(GoodsTypeEnum.PHYSICAL_GOODS.name()) && (!sku.containsKey("weight") || sku.containsKey("weight") && (StringUtil.isEmpty(sku.get("weight").toString()) || Convert.toDouble(sku.get("weight").toString()) < 0))) {
throw new ServiceException(ResultCode.GOODS_SKU_WEIGHT_ERROR);
}
- if (StringUtil.isEmpty(sku.get("quantity").toString()) || Convert.toInt(sku.get("quantity").toString()) < 0) {
+ if (!sku.containsKey("quantity") || StringUtil.isEmpty(sku.get("quantity").toString()) || Convert.toInt(sku.get("quantity").toString()) < 0) {
throw new ServiceException(ResultCode.GOODS_SKU_QUANTITY_ERROR);
}
diff --git a/framework/src/main/java/cn/lili/modules/goods/entity/dos/GoodsSku.java b/framework/src/main/java/cn/lili/modules/goods/entity/dos/GoodsSku.java
index 0b0b0370..767fd0bb 100644
--- a/framework/src/main/java/cn/lili/modules/goods/entity/dos/GoodsSku.java
+++ b/framework/src/main/java/cn/lili/modules/goods/entity/dos/GoodsSku.java
@@ -42,7 +42,7 @@ public class GoodsSku extends BaseEntity {
private String freightTemplateId;
@ApiModelProperty(value = "是否是促销商品")
- private Boolean isPromotion;
+ private Boolean promotionFlag;
@ApiModelProperty(value = "促销价")
private Double promotionPrice;
@@ -130,7 +130,7 @@ public class GoodsSku extends BaseEntity {
* @see GoodsAuthEnum
*/
@ApiModelProperty(value = "审核状态")
- private String isAuth;
+ private String authFlag;
@ApiModelProperty(value = "审核信息")
private String authMessage;
diff --git a/framework/src/main/java/cn/lili/modules/goods/entity/dto/GoodsSearchParams.java b/framework/src/main/java/cn/lili/modules/goods/entity/dto/GoodsSearchParams.java
index 4b59c4c6..db523f1d 100644
--- a/framework/src/main/java/cn/lili/modules/goods/entity/dto/GoodsSearchParams.java
+++ b/framework/src/main/java/cn/lili/modules/goods/entity/dto/GoodsSearchParams.java
@@ -9,6 +9,8 @@ import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
+import java.util.Arrays;
+
/**
* 商品查询条件
*
@@ -58,10 +60,13 @@ public class GoodsSearchParams extends PageVO {
* @see GoodsAuthEnum
*/
@ApiModelProperty(value = "审核状态")
- private String isAuth;
+ private String authFlag;
@ApiModelProperty(value = "库存数量")
- private Integer quantity;
+ private Integer leQuantity;
+
+ @ApiModelProperty(value = "库存数量")
+ private Integer geQuantity;
@ApiModelProperty(value = "是否为推荐商品")
private Boolean recommend;
@@ -81,7 +86,7 @@ public class GoodsSearchParams extends PageVO {
queryWrapper.like("goods_name", goodsName);
}
if (CharSequenceUtil.isNotEmpty(id)) {
- queryWrapper.eq("id", id);
+ queryWrapper.in("id", Arrays.asList(id.split(",")));
}
if (CharSequenceUtil.isNotEmpty(storeId)) {
queryWrapper.eq("store_id", storeId);
@@ -101,11 +106,14 @@ public class GoodsSearchParams extends PageVO {
if (CharSequenceUtil.isNotEmpty(marketEnable)) {
queryWrapper.eq("market_enable", marketEnable);
}
- if (CharSequenceUtil.isNotEmpty(isAuth)) {
- queryWrapper.eq("is_auth", isAuth);
+ if (CharSequenceUtil.isNotEmpty(authFlag)) {
+ queryWrapper.eq("auth_flag", authFlag);
}
- if (quantity != null) {
- queryWrapper.le("quantity", quantity);
+ if (leQuantity != null) {
+ queryWrapper.le("quantity", leQuantity);
+ }
+ if (geQuantity != null) {
+ queryWrapper.ge("quantity", geQuantity);
}
if (recommend != null) {
queryWrapper.le("recommend", recommend);
@@ -123,9 +131,9 @@ public class GoodsSearchParams extends PageVO {
if (CharSequenceUtil.isNotEmpty(price)) {
String[] s = price.split("_");
if (s.length > 1) {
- queryWrapper.ge("price", s[1]);
+ queryWrapper.between("price", s[0], s[1]);
} else {
- queryWrapper.le("price", s[0]);
+ queryWrapper.ge("price", s[0]);
}
}
}
diff --git a/framework/src/main/java/cn/lili/modules/goods/entity/dto/SimpleCommodity.java b/framework/src/main/java/cn/lili/modules/goods/entity/dto/SimpleCommodity.java
deleted file mode 100644
index 50813010..00000000
--- a/framework/src/main/java/cn/lili/modules/goods/entity/dto/SimpleCommodity.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package cn.lili.modules.goods.entity.dto;
-
-import io.swagger.annotations.ApiModelProperty;
-
-/**
- * 用于直播间前台使用的直播间商品DTO
- *
- * @author Bulbasaur
- * @since 2021/5/20 2:34 下午
- */
-public class SimpleCommodity {
-
- @ApiModelProperty(value = "图片")
- private String goodsImage;
-
- @ApiModelProperty(value = "商品名称")
- private String name;
-}
diff --git a/framework/src/main/java/cn/lili/modules/goods/mapper/GoodsSkuMapper.java b/framework/src/main/java/cn/lili/modules/goods/mapper/GoodsSkuMapper.java
index 304b8cd9..62f65589 100644
--- a/framework/src/main/java/cn/lili/modules/goods/mapper/GoodsSkuMapper.java
+++ b/framework/src/main/java/cn/lili/modules/goods/mapper/GoodsSkuMapper.java
@@ -2,6 +2,9 @@ package cn.lili.modules.goods.mapper;
import cn.lili.modules.goods.entity.dos.GoodsSku;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Select;
+
+import java.util.List;
/**
* 规格项数据处理层
@@ -11,4 +14,13 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
*/
public interface GoodsSkuMapper extends BaseMapper {
+ /**
+ * 根据商品id获取全部skuId的集合
+ *
+ * @param goodsId goodsId
+ * @return 全部skuId的集合
+ */
+ @Select("SELECT id FROM li_goods_sku WHERE goods_id = #{goodsId}")
+ List getGoodsSkuIdByGoodsId(String goodsId);
+
}
\ No newline at end of file
diff --git a/framework/src/main/java/cn/lili/modules/goods/service/GoodsService.java b/framework/src/main/java/cn/lili/modules/goods/service/GoodsService.java
index dbf17a60..16ac93e4 100644
--- a/framework/src/main/java/cn/lili/modules/goods/service/GoodsService.java
+++ b/framework/src/main/java/cn/lili/modules/goods/service/GoodsService.java
@@ -6,6 +6,7 @@ import cn.lili.modules.goods.entity.dto.GoodsSearchParams;
import cn.lili.modules.goods.entity.enums.GoodsAuthEnum;
import cn.lili.modules.goods.entity.enums.GoodsStatusEnum;
import cn.lili.modules.goods.entity.vos.GoodsVO;
+import cn.lili.modules.store.entity.dos.Store;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
@@ -48,7 +49,7 @@ public interface GoodsService extends IService {
* @param categoryId 分类ID
* @return 商品数量
*/
- Integer getGoodsCountByCategory(String categoryId);
+ long getGoodsCountByCategory(String categoryId);
/**
* 添加商品
@@ -82,6 +83,15 @@ public interface GoodsService extends IService {
*/
IPage queryByParams(GoodsSearchParams goodsSearchParams);
+
+ /**
+ * 商品查询
+ *
+ * @param goodsSearchParams 查询参数
+ * @return 商品信息
+ */
+ List queryListByParams(GoodsSearchParams goodsSearchParams);
+
/**
* 批量审核商品
*
@@ -91,21 +101,6 @@ public interface GoodsService extends IService {
*/
boolean auditGoods(List goodsIds, GoodsAuthEnum goodsAuthEnum);
- /**
- * 获取所有的已上架的商品数量
- *
- * @param goodsAuthEnum 商品审核枚举
- * @param goodsStatusEnum 商品状态枚举
- * @return 所有的已上架的商品数量
- */
- Integer goodsNum(GoodsStatusEnum goodsStatusEnum, GoodsAuthEnum goodsAuthEnum);
-
- /**
- * 获取今天的已上架的商品数量
- *
- * @return 今天的已上架的商品数量
- */
- Integer todayUpperNum();
/**
* 更新商品上架状态状态
@@ -117,6 +112,15 @@ public interface GoodsService extends IService {
*/
Boolean updateGoodsMarketAble(List goodsIds, GoodsStatusEnum goodsStatusEnum, String underReason);
+ /**
+ * 更新商品上架状态状态
+ *
+ * @param goodsIds 商品ID集合
+ * @param goodsStatusEnum 更新的商品状态
+ * @param underReason 下架原因
+ * @return 更新结果
+ */
+ Boolean managerUpdateGoodsMarketAble(List goodsIds, GoodsStatusEnum goodsStatusEnum, String underReason);
/**
* 删除商品
*
@@ -143,9 +147,30 @@ public interface GoodsService extends IService {
void updateStock(String goodsId, Integer quantity);
/**
- * 更新SKU评价数量
+ * 更新商品评价数量
*
* @param goodsId 商品ID
*/
void updateGoodsCommentNum(String goodsId);
+
+ /**
+ * 更新商品的购买数量
+ *
+ * @param goodsId 商品ID
+ * @param buyCount 购买数量
+ */
+ void updateGoodsBuyCount(String goodsId, int buyCount);
+
+ /**
+ * 批量更新商品的店铺信息
+ * @param store
+ */
+ void updateStoreDetail(Store store);
+ /**
+ * 统计店铺的商品数量
+ * @param storeId 店铺id
+ * @return
+ */
+ long countStoreGoodsNum(String storeId);
+
}
\ No newline at end of file
diff --git a/framework/src/main/java/cn/lili/modules/goods/service/GoodsSkuService.java b/framework/src/main/java/cn/lili/modules/goods/service/GoodsSkuService.java
index 022e7917..c300a39b 100644
--- a/framework/src/main/java/cn/lili/modules/goods/service/GoodsSkuService.java
+++ b/framework/src/main/java/cn/lili/modules/goods/service/GoodsSkuService.java
@@ -136,10 +136,18 @@ public interface GoodsSkuService extends IService {
*/
IPage getGoodsSkuByPage(GoodsSearchParams searchParams);
+ /**
+ * 列表查询商品sku信息
+ *
+ * @param searchParams 查询参数
+ * @return 商品sku信息
+ */
+ List getGoodsSkuByList(GoodsSearchParams searchParams);
+
/**
* 更新商品sku状态
*
- * @param goods 商品信息(Id,MarketEnable/IsAuth)
+ * @param goods 商品信息(Id,MarketEnable/AuthFlag)
*/
void updateGoodsSkuStatus(Goods goods);
@@ -186,4 +194,20 @@ public interface GoodsSkuService extends IService {
* @param skuId SKUId
*/
void updateGoodsSkuCommentNum(String skuId);
+
+ /**
+ * 更新商品sku促销价格
+ *
+ * @param skuId skuId
+ * @param promotionPrice 促销价格
+ */
+ void updateGoodsSkuPromotion(String skuId, Double promotionPrice);
+
+ /**
+ * 根据商品id获取全部skuId的集合
+ *
+ * @param goodsId goodsId
+ * @return 全部skuId的集合
+ */
+ List getSkuIdsByGoodsId(String goodsId);
}
\ No newline at end of file
diff --git a/framework/src/main/java/cn/lili/modules/goods/serviceimpl/CommodityServiceImpl.java b/framework/src/main/java/cn/lili/modules/goods/serviceimpl/CommodityServiceImpl.java
index fe069032..983c56b5 100644
--- a/framework/src/main/java/cn/lili/modules/goods/serviceimpl/CommodityServiceImpl.java
+++ b/framework/src/main/java/cn/lili/modules/goods/serviceimpl/CommodityServiceImpl.java
@@ -70,7 +70,7 @@ public class CommodityServiceImpl extends ServiceImpl implements GoodsGalleryService {
- /**
- * 文件
- */
- @Autowired
- private FileManagerPlugin fileManagerPlugin;
/**
* 设置
*/
@@ -65,9 +60,9 @@ public class GoodsGalleryServiceImpl extends ServiceImpl implements
*/
@Autowired
private RocketmqCustomProperties rocketmqCustomProperties;
- /**
- * 分类-参数
- */
- @Autowired
- private CategoryParameterGroupService categoryParameterGroupService;
@Autowired
private FreightTemplateService freightTemplateService;
@@ -121,8 +116,8 @@ public class GoodsServiceImpl extends ServiceImpl implements
@Override
public List getByBrandIds(List brandIds) {
- LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper ();
- lambdaQueryWrapper.in(Goods::getBrandId,brandIds);
+ LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>();
+ lambdaQueryWrapper.in(Goods::getBrandId, brandIds);
return list(lambdaQueryWrapper);
}
@@ -149,7 +144,7 @@ public class GoodsServiceImpl extends ServiceImpl implements
}
@Override
- public final Integer getGoodsCountByCategory(String categoryId) {
+ public final long getGoodsCountByCategory(String categoryId) {
QueryWrapper queryWrapper = Wrappers.query();
queryWrapper.like("category_path", categoryId);
queryWrapper.eq("delete_flag", false);
@@ -199,6 +194,9 @@ public class GoodsServiceImpl extends ServiceImpl implements
if (goodsOperationDTO.getGoodsGalleryList() != null && !goodsOperationDTO.getGoodsGalleryList().isEmpty()) {
this.goodsGalleryService.add(goodsOperationDTO.getGoodsGalleryList(), goods.getId());
}
+ if (GoodsAuthEnum.TOBEAUDITED.name().equals(goods.getAuthFlag())) {
+ this.deleteEsGoods(Collections.singletonList(goodsId));
+ }
cache.remove(CachePrefix.GOODS.getPrefix() + goodsId);
}
@@ -246,7 +244,7 @@ public class GoodsServiceImpl extends ServiceImpl implements
if (CharSequenceUtil.isNotEmpty(goods.getParams())) {
goodsVO.setGoodsParamsDTOList(JSONUtil.toList(goods.getParams(), GoodsParamsDTO.class));
}
-
+ cache.put(CachePrefix.GOODS.getPrefix() + goodsId, goodsVO);
return goodsVO;
}
@@ -255,12 +253,23 @@ public class GoodsServiceImpl extends ServiceImpl implements
return this.page(PageUtil.initPage(goodsSearchParams), goodsSearchParams.queryWrapper());
}
+ /**
+ * 商品查询
+ *
+ * @param goodsSearchParams 查询参数
+ * @return 商品信息
+ */
+ @Override
+ public List queryListByParams(GoodsSearchParams goodsSearchParams) {
+ return this.list(goodsSearchParams.queryWrapper());
+ }
+
@Override
public boolean auditGoods(List goodsIds, GoodsAuthEnum goodsAuthEnum) {
boolean result = false;
for (String goodsId : goodsIds) {
Goods goods = this.checkExist(goodsId);
- goods.setIsAuth(goodsAuthEnum.name());
+ goods.setAuthFlag(goodsAuthEnum.name());
result = this.updateById(goods);
goodsSkuService.updateGoodsSkuStatus(goods);
//删除之前的缓存
@@ -273,33 +282,6 @@ public class GoodsServiceImpl extends ServiceImpl implements
return result;
}
- @Override
- public Integer goodsNum(GoodsStatusEnum goodsStatusEnum, GoodsAuthEnum goodsAuthEnum) {
- LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery();
-
- queryWrapper.eq(Goods::getDeleteFlag, false);
-
- if (goodsStatusEnum != null) {
- queryWrapper.eq(Goods::getMarketEnable, goodsStatusEnum.name());
- }
- if (goodsAuthEnum != null) {
- queryWrapper.eq(Goods::getIsAuth, goodsAuthEnum.name());
- }
- AuthUser currentUser = Objects.requireNonNull(UserContext.getCurrentUser());
- queryWrapper.eq(CharSequenceUtil.equals(currentUser.getRole().name(), UserEnums.STORE.name()),
- Goods::getStoreId, currentUser.getStoreId());
-
- return this.count(queryWrapper);
- }
-
- @Override
- public Integer todayUpperNum() {
- LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery();
- queryWrapper.eq(Goods::getMarketEnable, GoodsStatusEnum.UPPER.name());
- queryWrapper.ge(Goods::getCreateTime, DateUtil.beginOfDay(new DateTime()));
- return this.count(queryWrapper);
- }
-
@Override
public Boolean updateGoodsMarketAble(List goodsIds, GoodsStatusEnum goodsStatusEnum, String underReason) {
boolean result;
@@ -322,6 +304,41 @@ public class GoodsServiceImpl extends ServiceImpl implements
for (Goods goods : goodsList) {
goodsSkuService.updateGoodsSkuStatus(goods);
}
+
+ if (GoodsStatusEnum.DOWN.equals(goodsStatusEnum)) {
+ this.deleteEsGoods(goodsIds);
+ }
+ return result;
+ }
+
+ @Override
+ public Boolean managerUpdateGoodsMarketAble(List goodsIds, GoodsStatusEnum goodsStatusEnum, String underReason) {
+ boolean result;
+
+ //如果商品为空,直接返回
+ if (goodsIds == null || goodsIds.isEmpty()) {
+ return true;
+ }
+
+ //检测管理员权限
+ this.checkManagerAuthority();
+
+ LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>();
+ updateWrapper.set(Goods::getMarketEnable, goodsStatusEnum.name());
+ updateWrapper.set(Goods::getUnderMessage, underReason);
+ updateWrapper.in(Goods::getId, goodsIds);
+ result = this.update(updateWrapper);
+
+ //修改规格商品
+ LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
+ queryWrapper.in(Goods::getId, goodsIds);
+ List goodsList = this.list(queryWrapper);
+ for (Goods goods : goodsList) {
+ goodsSkuService.updateGoodsSkuStatus(goods);
+ }
+ if (GoodsStatusEnum.DOWN.equals(goodsStatusEnum)) {
+ this.deleteEsGoods(goodsIds);
+ }
return result;
}
@@ -341,12 +358,10 @@ public class GoodsServiceImpl extends ServiceImpl implements
for (Goods goods : goodsList) {
//修改SKU状态
goodsSkuService.updateGoodsSkuStatus(goods);
- //商品删除消息
- String destination = rocketmqCustomProperties.getGoodsTopic() + ":" + GoodsTagsEnum.GOODS_DELETE.name();
- //发送mq消息
- rocketMQTemplate.asyncSend(destination, JSONUtil.toJsonStr(goods), RocketmqSendCallbackBuilder.commonCallback());
}
+ this.deleteEsGoods(goodsIds);
+
return true;
}
@@ -389,13 +404,58 @@ public class GoodsServiceImpl extends ServiceImpl implements
goodEvaluationQueryWrapper.eq(MemberEvaluation::getId, goodsId);
goodEvaluationQueryWrapper.eq(MemberEvaluation::getGrade, EvaluationGradeEnum.GOOD.name());
//好评数量
- int highPraiseNum = memberEvaluationService.count(goodEvaluationQueryWrapper);
+ long highPraiseNum = memberEvaluationService.count(goodEvaluationQueryWrapper);
//好评率
double grade = NumberUtil.mul(NumberUtil.div(highPraiseNum, goods.getCommentNum().doubleValue(), 2), 100);
goods.setGrade(grade);
this.updateById(goods);
}
+ /**
+ * 更新商品的购买数量
+ *
+ * @param goodsId 商品ID
+ * @param buyCount 购买数量
+ */
+ @Override
+ public void updateGoodsBuyCount(String goodsId, int buyCount) {
+ this.update(new LambdaUpdateWrapper()
+ .eq(Goods::getId, goodsId)
+ .set(Goods::getBuyCount, buyCount));
+ }
+
+ @Override
+ public void updateStoreDetail(Store store) {
+ UpdateWrapper updateWrapper = new UpdateWrapper<>()
+ .eq("store_id", store.getId())
+ .set("store_name", store.getStoreName())
+ .set("self_operated", store.getSelfOperated());
+ this.update(updateWrapper);
+ goodsSkuService.update(updateWrapper);
+ }
+
+ @Override
+ public long countStoreGoodsNum(String storeId) {
+ return this.count(
+ new LambdaQueryWrapper()
+ .eq(Goods::getStoreId, storeId)
+ .eq(Goods::getAuthFlag, GoodsAuthEnum.PASS.name())
+ .eq(Goods::getMarketEnable, GoodsStatusEnum.UPPER.name()));
+ }
+
+
+ /**
+ * 发送删除es索引的信息
+ *
+ * @param goodsIds 商品id
+ */
+ private void deleteEsGoods(List goodsIds) {
+ //商品删除消息
+ String destination = rocketmqCustomProperties.getGoodsTopic() + ":" + GoodsTagsEnum.GOODS_DELETE.name();
+ //发送mq消息
+ rocketMQTemplate.asyncSend(destination, JSONUtil.toJsonStr(goodsIds), RocketmqSendCallbackBuilder.commonCallback());
+ }
+
/**
* 添加商品默认图片
*
@@ -453,7 +513,7 @@ public class GoodsServiceImpl extends ServiceImpl implements
Setting setting = settingService.get(SettingEnum.GOODS_SETTING.name());
GoodsSetting goodsSetting = JSONUtil.toBean(setting.getSettingValue(), GoodsSetting.class);
//是否需要审核
- goods.setIsAuth(Boolean.TRUE.equals(goodsSetting.getGoodsCheck()) ? GoodsAuthEnum.TOBEAUDITED.name() : GoodsAuthEnum.PASS.name());
+ goods.setAuthFlag(Boolean.TRUE.equals(goodsSetting.getGoodsCheck()) ? GoodsAuthEnum.TOBEAUDITED.name() : GoodsAuthEnum.PASS.name());
//判断当前用户是否为店铺
if (Objects.requireNonNull(UserContext.getCurrentUser()).getRole().equals(UserEnums.STORE)) {
StoreVO storeDetail = this.storeService.getStoreDetail();
@@ -471,8 +531,8 @@ public class GoodsServiceImpl extends ServiceImpl implements
/**
* 判断商品是否存在
*
- * @param goodsId
- * @return
+ * @param goodsId 商品id
+ * @return 商品信息
*/
private Goods checkExist(String goodsId) {
Goods goods = getById(goodsId);
@@ -483,20 +543,6 @@ public class GoodsServiceImpl extends ServiceImpl implements
return goods;
}
- /**
- * 检查当前登录的店铺
- *
- * @return 当前登录的店铺
- */
- private AuthUser checkStoreAuthority() {
- AuthUser currentUser = UserContext.getCurrentUser();
- if (currentUser == null || (currentUser.getRole().equals(UserEnums.STORE) && currentUser.getStoreId() == null)) {
- throw new ServiceException(ResultCode.USER_AUTHORITY_ERROR);
- } else if (currentUser.getRole().equals(UserEnums.STORE) && currentUser.getStoreId() != null) {
- return currentUser;
- }
- return null;
- }
/**
* 获取UpdateWrapper(检查用户越权)
@@ -512,6 +558,36 @@ public class GoodsServiceImpl extends ServiceImpl implements
return updateWrapper;
}
+
+ /**
+ * 检查当前登录的店铺
+ *
+ * @return 当前登录的店铺
+ */
+ private AuthUser checkStoreAuthority() {
+ AuthUser currentUser = UserContext.getCurrentUser();
+ //如果当前会员不为空,且为店铺角色
+ if (currentUser != null && (currentUser.getRole().equals(UserEnums.STORE) && currentUser.getStoreId() != null)) {
+ return currentUser;
+ }
+ return null;
+ }
+
+ /**
+ * 检查当前登录的店铺
+ *
+ * @return 当前登录的店铺
+ */
+ private AuthUser checkManagerAuthority() {
+ AuthUser currentUser = UserContext.getCurrentUser();
+ //如果当前会员不为空,且为店铺角色
+ if (currentUser != null && (currentUser.getRole().equals(UserEnums.MANAGER))) {
+ return currentUser;
+ } else {
+ throw new ServiceException(ResultCode.USER_AUTHORITY_ERROR);
+ }
+ }
+
/**
* 获取QueryWrapper(检查用户越权)
*
diff --git a/framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsSkuServiceImpl.java b/framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsSkuServiceImpl.java
index b6c8fc5a..0badc920 100644
--- a/framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsSkuServiceImpl.java
+++ b/framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsSkuServiceImpl.java
@@ -2,11 +2,12 @@ package cn.lili.modules.goods.serviceimpl;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.map.MapUtil;
+import cn.hutool.core.text.CharSequenceUtil;
import cn.hutool.core.util.NumberUtil;
-import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import cn.lili.cache.Cache;
+import cn.lili.common.enums.PromotionTypeEnum;
import cn.lili.common.enums.ResultCode;
import cn.lili.common.exception.ServiceException;
import cn.lili.common.properties.RocketmqCustomProperties;
@@ -30,6 +31,10 @@ import cn.lili.modules.member.entity.dos.FootPrint;
import cn.lili.modules.member.entity.dos.MemberEvaluation;
import cn.lili.modules.member.entity.enums.EvaluationGradeEnum;
import cn.lili.modules.member.service.MemberEvaluationService;
+import cn.lili.modules.promotion.entity.dos.PromotionGoods;
+import cn.lili.modules.promotion.entity.dto.search.PromotionGoodsSearchParams;
+import cn.lili.modules.promotion.entity.enums.CouponGetEnum;
+import cn.lili.modules.promotion.service.PromotionGoodsService;
import cn.lili.modules.search.entity.dos.EsGoodsAttribute;
import cn.lili.modules.search.entity.dos.EsGoodsIndex;
import cn.lili.modules.search.service.EsGoodsIndexService;
@@ -45,6 +50,8 @@ import org.apache.rocketmq.spring.core.RocketMQTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
+import org.springframework.transaction.event.TransactionPhase;
+import org.springframework.transaction.event.TransactionalEventListener;
import java.util.*;
import java.util.stream.Collectors;
@@ -100,6 +107,9 @@ public class GoodsSkuServiceImpl extends ServiceImpl i
@Autowired
private EsGoodsIndexService goodsIndexService;
+ @Autowired
+ private PromotionGoodsService promotionGoodsService;
+
@Override
public void add(List