diff --git a/DB/version4.3toMASTER.sql b/DB/version4.3toMASTER.sql index 35c1fc31..8af84132 100644 --- a/DB/version4.3toMASTER.sql +++ b/DB/version4.3toMASTER.sql @@ -1,18 +1,24 @@ -CREATE TABLE `li_file_directory` ( - `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID', - `create_time` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '创建者', - `update_time` datetime NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', - `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '更新者', - `delete_flag` tinyint(1) NULL DEFAULT 0 COMMENT '删除标志 true/false 删除/未删除', - `directory_type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '文件目录类型', - `directory_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '拥有者名称', - `owner_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '拥有者id', - `parent_id` bigint NULL DEFAULT NULL COMMENT '父分类ID', - `level` int NULL DEFAULT NULL COMMENT '层级', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 1698937596963311619 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '文件夹' ROW_FORMAT = DYNAMIC; +CREATE TABLE `li_file_directory` +( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID', + `create_time` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '创建者', + `update_time` datetime NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '更新者', + `delete_flag` tinyint(1) NULL DEFAULT 0 COMMENT '删除标志 true/false 删除/未删除', + `directory_type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '文件目录类型', + `directory_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '拥有者名称', + `owner_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '拥有者id', + `parent_id` bigint NULL DEFAULT NULL COMMENT '父分类ID', + `level` int NULL DEFAULT NULL COMMENT '层级', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB + AUTO_INCREMENT = 1698937596963311619 + CHARACTER SET = utf8mb4 + COLLATE = utf8mb4_0900_ai_ci COMMENT = '文件夹' + ROW_FORMAT = DYNAMIC; SET FOREIGN_KEY_CHECKS = 1; -ALTER TABLE li_file ADD file_directory_id varchar(255) COMMENT '文件夹ID'; \ No newline at end of file +ALTER TABLE li_file + ADD file_directory_id varchar(255) COMMENT '文件夹ID'; \ No newline at end of file diff --git a/buyer-api/src/main/java/cn/lili/controller/passport/MemberBuyerController.java b/buyer-api/src/main/java/cn/lili/controller/passport/MemberBuyerController.java index a04b60c9..38f06a14 100644 --- a/buyer-api/src/main/java/cn/lili/controller/passport/MemberBuyerController.java +++ b/buyer-api/src/main/java/cn/lili/controller/passport/MemberBuyerController.java @@ -154,6 +154,28 @@ public class MemberBuyerController { } } + @ApiOperation(value = "绑定手机号") + @ApiImplicitParams({ + @ApiImplicitParam(name = "username", value = "用户名", required = true, paramType = "query"), + @ApiImplicitParam(name = "mobile", value = "手机号", required = true, paramType = "query"), + @ApiImplicitParam(name = "code", value = "验证码", required = true, paramType = "query"), + }) + @PostMapping("/bindMobile") + public ResultMessage bindMobile(@NotNull(message = "用户名不能为空") @RequestParam String username, + @NotNull(message = "手机号为空") @RequestParam String mobile, + @NotNull(message = "验证码为空") @RequestParam String code, + @RequestHeader String uuid) { + if (smsUtil.verifyCode(mobile, VerificationEnums.BIND_MOBILE, uuid, code)) { + Member member = memberService.findByUsername(username); + if (member == null) { + throw new ServiceException(ResultCode.USER_NOT_EXIST); + } + return ResultUtil.data(memberService.changeMobile(member.getId(), mobile)); + } else { + throw new ServiceException(ResultCode.VERIFICATION_SMS_CHECKED_ERROR); + } + } + @ApiOperation(value = "注册用户") @ApiImplicitParams({ @ApiImplicitParam(name = "username", value = "用户名", required = true, paramType = "query"), 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 afe5cfc8..f31091ce 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 @@ -255,9 +255,8 @@ public interface GoodsSkuService extends IService { * 更新商品sku评分 * * @param goodsId goodsId - * @param skuId skuId * @param grade 评分 * @param commentNum 评论数量 */ - void updateGoodsSkuGrade(String goodsId, String skuId, double grade,int commentNum); + void updateGoodsSkuGrade(String goodsId, double grade,int commentNum); } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsServiceImpl.java b/framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsServiceImpl.java index 98de2371..bab90070 100644 --- a/framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsServiceImpl.java @@ -474,7 +474,7 @@ public class GoodsServiceImpl extends ServiceImpl implements // 修改商品sku评价数量 - this.goodsSkuService.updateGoodsSkuGrade(goodsId, skuId, grade, goods.getCommentNum()); + this.goodsSkuService.updateGoodsSkuGrade(goodsId, grade, goods.getCommentNum()); Map updateIndexFieldsMap = EsIndexUtil.getUpdateIndexFieldsMap(MapUtil.builder(new HashMap()).put("goodsId", goodsId).build(), MapUtil.builder(new HashMap()).put("commentNum", goods.getCommentNum()).put("highPraiseNum", highPraiseNum).put("grade", grade).build()); applicationEventPublisher.publishEvent(new TransactionCommitSendMQEvent("更新商品索引信息", rocketmqCustomProperties.getGoodsTopic(), GoodsTagsEnum.UPDATE_GOODS_INDEX_FIELD.name(), JSONUtil.toJsonStr(updateIndexFieldsMap))); 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 a03abd7a..38c8bfae 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 @@ -659,13 +659,13 @@ public class GoodsSkuServiceImpl extends ServiceImpl i } @Override - public void updateGoodsSkuGrade(String goodsId, String skuId, double grade, int commentNum) { + public void updateGoodsSkuGrade(String goodsId, double grade, int commentNum) { LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); updateWrapper.eq(GoodsSku::getGoodsId, goodsId); updateWrapper.set(GoodsSku::getGrade, grade); updateWrapper.set(GoodsSku::getCommentNum, commentNum); this.update(updateWrapper); - clearCache(skuId); + this.getSkuIdsByGoodsId(goodsId).forEach(this::clearCache); } /** diff --git a/framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberEvaluationServiceImpl.java b/framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberEvaluationServiceImpl.java index b0127cb0..cc10d2f6 100644 --- a/framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberEvaluationServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberEvaluationServiceImpl.java @@ -194,6 +194,7 @@ public class MemberEvaluationServiceImpl extends ServiceImpl() .eq("have_image", 1) + .eq("status", SwitchEnum.OPEN.name()) .eq("goods_id", goodsId))); return evaluationNumberVO; diff --git a/framework/src/main/java/cn/lili/modules/promotion/service/AbstractPromotionsService.java b/framework/src/main/java/cn/lili/modules/promotion/service/AbstractPromotionsService.java index 18a65b7f..59096ba3 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/service/AbstractPromotionsService.java +++ b/framework/src/main/java/cn/lili/modules/promotion/service/AbstractPromotionsService.java @@ -121,6 +121,13 @@ public interface AbstractPromotionsService extends ISe */ void updateEsGoodsIndex(T promotions); + /** + * 发送更新商品索引消息 + * + * @param promotions 促销实体 + */ + void sendUpdateEsGoodsMsg(T promotions); + /** * 当前促销类型 * diff --git a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/AbstractPromotionsServiceImpl.java b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/AbstractPromotionsServiceImpl.java index a92abfb5..3eb688cf 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/AbstractPromotionsServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/AbstractPromotionsServiceImpl.java @@ -255,19 +255,25 @@ public abstract class AbstractPromotionsServiceImpl, T e //删除商品促销消息 applicationEventPublisher.publishEvent(new TransactionCommitSendMQEvent("删除商品促销事件", rocketmqCustomProperties.getGoodsTopic(), GoodsTagsEnum.DELETE_GOODS_INDEX_PROMOTIONS.name(), JSONUtil.toJsonStr(build))); } else { - - String esPromotionKey = this.getPromotionType().name() + "-" + promotions.getId(); - Map map = new HashMap<>(); - // es促销key - map.put("esPromotionKey", esPromotionKey); - // 促销类型全路径名 - map.put("promotionsType", promotions.getClass().getName()); - // 促销实体 - map.put("promotions", promotions); - applicationEventPublisher.publishEvent(new TransactionCommitSendMQEvent("更新商品索引促销事件", rocketmqCustomProperties.getGoodsTopic(), GoodsTagsEnum.UPDATE_GOODS_INDEX_PROMOTIONS.name(), JSONUtil.toJsonStr(map))); + this.sendUpdateEsGoodsMsg(promotions); } } + @Override + @Transactional(rollbackFor = Exception.class) + public void sendUpdateEsGoodsMsg(T promotions) { + + String esPromotionKey = this.getPromotionType().name() + "-" + promotions.getId(); + Map map = new HashMap<>(); + // es促销key + map.put("esPromotionKey", esPromotionKey); + // 促销类型全路径名 + map.put("promotionsType", promotions.getClass().getName()); + // 促销实体 + map.put("promotions", promotions); + applicationEventPublisher.publishEvent(new TransactionCommitSendMQEvent("更新商品索引促销事件", rocketmqCustomProperties.getGoodsTopic(), GoodsTagsEnum.UPDATE_GOODS_INDEX_PROMOTIONS.name(), JSONUtil.toJsonStr(map))); + } + @Override public boolean allowExistSame() { return false; diff --git a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponServiceImpl.java b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponServiceImpl.java index 88259b66..7e24ed94 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponServiceImpl.java @@ -1,10 +1,13 @@ package cn.lili.modules.promotion.serviceimpl; +import cn.hutool.core.map.MapBuilder; import cn.hutool.core.text.CharSequenceUtil; import cn.hutool.json.JSONUtil; import cn.lili.common.enums.PromotionTypeEnum; import cn.lili.common.enums.ResultCode; +import cn.lili.common.event.TransactionCommitSendMQEvent; import cn.lili.common.exception.ServiceException; +import cn.lili.common.properties.RocketmqCustomProperties; import cn.lili.common.utils.DateUtil; import cn.lili.common.vo.PageVO; import cn.lili.modules.goods.entity.dos.GoodsSku; @@ -24,15 +27,18 @@ import cn.lili.modules.promotion.mapper.CouponMapper; import cn.lili.modules.promotion.service.*; import cn.lili.modules.promotion.tools.PromotionTools; import cn.lili.mybatis.util.PageUtil; +import cn.lili.rocketmq.tags.GoodsTagsEnum; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationEventPublisher; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.Collections; import java.util.List; +import java.util.Map; import java.util.stream.Collectors; /** @@ -70,6 +76,12 @@ public class CouponServiceImpl extends AbstractPromotionsServiceImpl build = MapBuilder.create().put("promotionKey", this.getPromotionType() + "-" + promotions.getId()).put("scopeId", promotions.getScopeId()).build(); + //删除商品促销消息 + applicationEventPublisher.publishEvent(new TransactionCommitSendMQEvent("删除商品促销事件", rocketmqCustomProperties.getGoodsTopic(), GoodsTagsEnum.DELETE_GOODS_INDEX_PROMOTIONS.name(), JSONUtil.toJsonStr(build))); + } else { + super.sendUpdateEsGoodsMsg(promotions); + } } @Override diff --git a/framework/src/main/java/cn/lili/modules/search/serviceimpl/EsGoodsSearchServiceImpl.java b/framework/src/main/java/cn/lili/modules/search/serviceimpl/EsGoodsSearchServiceImpl.java index 4f574368..11ba3c74 100644 --- a/framework/src/main/java/cn/lili/modules/search/serviceimpl/EsGoodsSearchServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/search/serviceimpl/EsGoodsSearchServiceImpl.java @@ -97,6 +97,11 @@ public class EsGoodsSearchServiceImpl implements EsGoodsSearchService { @Override public Page searchGoodsByPage(EsGoodsSearchDTO searchDTO, PageVO pageVo) { + // 判断商品索引是否存在 + if (!restTemplate.indexOps(EsGoodsIndex.class).exists()) { + return null; + } + SearchPage esGoodsIndices = this.searchGoods(searchDTO, pageVo); Page resultPage = new Page<>(); if (esGoodsIndices != null && !esGoodsIndices.getContent().isEmpty()) { @@ -112,7 +117,12 @@ public class EsGoodsSearchServiceImpl implements EsGoodsSearchService { @Override public EsGoodsRelatedInfo getSelector(EsGoodsSearchDTO goodsSearch, PageVO pageVo) { - NativeSearchQueryBuilder builder = createSearchQueryBuilder(goodsSearch, pageVo); + // 判断商品索引是否存在 + if (!restTemplate.indexOps(EsGoodsIndex.class).exists()) { + return null; + } + + NativeSearchQueryBuilder builder = createSearchQueryBuilder(goodsSearch, null); //分类 AggregationBuilder categoryNameBuilder = AggregationBuilders.terms("categoryNameAgg").field("categoryNamePath.keyword"); builder.addAggregation(AggregationBuilders.terms("categoryAgg").field("categoryPath").subAggregation(categoryNameBuilder)); @@ -128,6 +138,7 @@ public class EsGoodsSearchServiceImpl implements EsGoodsSearchService { AggregationBuilder paramsNameBuilder = AggregationBuilders.terms("nameAgg").field(ATTR_NAME).subAggregation(sortBuilder).order(BucketOrder.aggregation("sortAgg", false)).subAggregation(valuesBuilder); builder.addAggregation(AggregationBuilders.nested("attrAgg", ATTR_PATH).subAggregation(paramsNameBuilder)); NativeSearchQuery searchQuery = builder.build(); + searchQuery.setMaxResults(0); SearchHits search = restTemplate.search(searchQuery, EsGoodsIndex.class); log.debug("getSelector DSL:{}", searchQuery.getQuery()); @@ -605,17 +616,11 @@ public class EsGoodsSearchServiceImpl implements EsGoodsSearchService { private List buildFunctionSearch() { List filterFunctionBuilders = new ArrayList<>(); -// GaussDecayFunctionBuilder skuNoScore = ScoreFunctionBuilders.gaussDecayFunction("skuSource", 100, 10).setWeight(2); -// FunctionScoreQueryBuilder.FilterFunctionBuilder skuNoBuilder = new FunctionScoreQueryBuilder.FilterFunctionBuilder(skuNoScore); -// filterFunctionBuilders.add(skuNoBuilder); + // 修改分数算法为无,数字最大分数越高 FieldValueFactorFunctionBuilder skuNoScore = ScoreFunctionBuilders.fieldValueFactorFunction("skuSource").modifier(FieldValueFactorFunction.Modifier.LOG1P).setWeight(3); FunctionScoreQueryBuilder.FilterFunctionBuilder skuNoBuilder = new FunctionScoreQueryBuilder.FilterFunctionBuilder(skuNoScore); filterFunctionBuilders.add(skuNoBuilder); - // 修改分数算法为无,数字最大分数越高 -// FieldValueFactorFunctionBuilder buyCountScore = ScoreFunctionBuilders.fieldValueFactorFunction("buyCount").modifier(FieldValueFactorFunction.Modifier.NONE).setWeight(10); -// FunctionScoreQueryBuilder.FilterFunctionBuilder buyCountBuilder = new FunctionScoreQueryBuilder.FilterFunctionBuilder(buyCountScore); -// filterFunctionBuilders.add(buyCountBuilder); return filterFunctionBuilders; } diff --git a/framework/src/main/java/cn/lili/modules/sms/impl/SmsUtilAliImplService.java b/framework/src/main/java/cn/lili/modules/sms/impl/SmsUtilAliImplService.java index 65fe31ba..20eb1b95 100644 --- a/framework/src/main/java/cn/lili/modules/sms/impl/SmsUtilAliImplService.java +++ b/framework/src/main/java/cn/lili/modules/sms/impl/SmsUtilAliImplService.java @@ -82,6 +82,7 @@ public class SmsUtilAliImplService implements SmsUtil { break; } //注册 + case BIND_MOBILE: case REGISTER: { templateCode = smsTemplateProperties.getREGISTER(); break; diff --git a/framework/src/main/java/cn/lili/modules/verification/entity/enums/VerificationEnums.java b/framework/src/main/java/cn/lili/modules/verification/entity/enums/VerificationEnums.java index 48b6b92b..fd3d617e 100644 --- a/framework/src/main/java/cn/lili/modules/verification/entity/enums/VerificationEnums.java +++ b/framework/src/main/java/cn/lili/modules/verification/entity/enums/VerificationEnums.java @@ -15,12 +15,14 @@ public enum VerificationEnums { * 找回用户 * 修改密码 * 支付钱包密码 + * 绑定手机号 */ LOGIN, REGISTER, FIND_USER, UPDATE_PASSWORD, - WALLET_PASSWORD; + WALLET_PASSWORD, + BIND_MOBILE; }