diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/AdminUserController.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/AdminUserController.java index 993ddeaf..1d4d30da 100644 --- a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/AdminUserController.java +++ b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/AdminUserController.java @@ -26,7 +26,7 @@ import com.nflg.mobilebroken.starter.service.EmailService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.cloud.context.config.annotation.RefreshScope; -import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.http.MediaType; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; @@ -79,7 +79,7 @@ public class AdminUserController extends ControllerBase { private IDictionaryItemTranslateService dictionaryItemTranslateService; @Resource - private RedisTemplate redisTemplate; + private StringRedisTemplate stringRedisTemplate; /** * 获取部门列表 @@ -304,11 +304,11 @@ public class AdminUserController extends ControllerBase { @ApiMark(moduleName = "账号管理", apiName = "修改密码") public ApiResult updatePassword(@Valid @RequestBody UpdatePasswordRequest request) { String redisKey = StrUtil.format(Constant.REDIS_KEY_USER_UPDATE_KAPTCHA_ADMIN, AdminUserUtil.getEmail()); - String captcha = redisTemplate.opsForValue().get(redisKey); + String captcha = stringRedisTemplate.opsForValue().get(redisKey); VUtils.trueThrowBusinessError(StrUtil.isBlank(captcha)).throwMessage("验证码已失效,请重新获取"); VUtils.trueThrowBusinessError(!StrUtil.equals(captcha, request.getCaptcha())).throwMessage("验证码不正确"); adminUserService.updatePassword(AdminUserUtil.getUserId(), request.getNewPassword()); - redisTemplate.delete(redisKey); + stringRedisTemplate.delete(redisKey); return ApiResult.success(); } @@ -322,7 +322,7 @@ public class AdminUserController extends ControllerBase { String email = AdminUserUtil.getEmail(); String kaptcha = RandomUtil.randomString(6); // 将生成的验证码存入redis - redisTemplate.opsForValue().set(StrUtil.format(Constant.REDIS_KEY_USER_UPDATE_KAPTCHA_ADMIN, email), kaptcha, Duration.ofHours(72)); + stringRedisTemplate.opsForValue().set(StrUtil.format(Constant.REDIS_KEY_USER_UPDATE_KAPTCHA_ADMIN, email), kaptcha, Duration.ofHours(72)); String subject = dictionaryItemTranslateService.getValueByCode(Constant.DICTIONARY_EMAIL_NOTIFY, Constant.DICTIONARY_ITEM_EMAIL_TITLE_ACCOUNT_CHANGE_PASSWORD, Constant.DEFAULT_LANGUAGE_CODE); String content = dictionaryItemTranslateService.getValueByCode(Constant.DICTIONARY_EMAIL_NOTIFY, Constant.DICTIONARY_ITEM_EMAIL_CONTENT_ACCOUNT_CHANGE_PASSWORD, Constant.DEFAULT_LANGUAGE_CODE) .replace("${loginName}",email) @@ -380,8 +380,8 @@ public class AdminUserController extends ControllerBase { .exists()) .throwMessage("已存在相同的登录名"); String code= RandomUtil.randomString(6); - redisTemplate.opsForValue().set(Constant.REDIS_KEY_CHANGE_EMAIL_CODE + user.getLoginName(), code, Duration.ofHours(72)); - redisTemplate.opsForValue().set(Constant.REDIS_KEY_CHANGE_EMAIL_CODE + code, request.getEmail(), Duration.ofHours(72)); + stringRedisTemplate.opsForValue().set(Constant.REDIS_KEY_CHANGE_EMAIL_CODE + user.getLoginName(), code, Duration.ofHours(72)); + stringRedisTemplate.opsForValue().set(Constant.REDIS_KEY_CHANGE_EMAIL_CODE + code, request.getEmail(), Duration.ofHours(72)); String subject = dictionaryItemTranslateService.getValueByCode(Constant.DICTIONARY_EMAIL_NOTIFY, Constant.DICTIONARY_ITEM_EMAIL_TITLE_CHANGE_EMAIL, Constant.DEFAULT_LANGUAGE_CODE); String content = dictionaryItemTranslateService.getValueByCode(Constant.DICTIONARY_EMAIL_NOTIFY, Constant.DICTIONARY_ITEM_EMAIL_CONTENT_CHANGE_EMAIL, Constant.DEFAULT_LANGUAGE_CODE) .replace("${email}", user.getLoginName()) diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/AppUserController.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/AppUserController.java index 378f43a3..b4ce48d0 100644 --- a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/AppUserController.java +++ b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/AppUserController.java @@ -24,7 +24,7 @@ import com.nflg.mobilebroken.starter.service.EmailService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.cloud.context.config.annotation.RefreshScope; -import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; @@ -70,7 +70,7 @@ public class AppUserController extends ControllerBase { private IDictionaryItemTranslateService dictionaryItemTranslateService; @Resource - private RedisTemplate redisTemplate; + private StringRedisTemplate stringRedisTemplate; @Resource private ITBasePositionService positionService; @@ -448,8 +448,8 @@ public class AppUserController extends ControllerBase { .exists()) .throwMessage("已存在相同的登录名"); String code= RandomUtil.randomString(6); - redisTemplate.opsForValue().set(Constant.REDIS_KEY_CHANGE_EMAIL_CODE + user.getLoginName(), code, Duration.ofHours(72)); - redisTemplate.opsForValue().set(Constant.REDIS_KEY_CHANGE_EMAIL_CODE + code, request.getEmail(), Duration.ofHours(72)); + stringRedisTemplate.opsForValue().set(Constant.REDIS_KEY_CHANGE_EMAIL_CODE + user.getLoginName(), code, Duration.ofHours(72)); + stringRedisTemplate.opsForValue().set(Constant.REDIS_KEY_CHANGE_EMAIL_CODE + code, request.getEmail(), Duration.ofHours(72)); String subject = dictionaryItemTranslateService.getValueByCode(Constant.DICTIONARY_EMAIL_NOTIFY, Constant.DICTIONARY_ITEM_EMAIL_TITLE_CHANGE_EMAIL, Constant.DEFAULT_LANGUAGE_CODE); String content = dictionaryItemTranslateService.getValueByCode(Constant.DICTIONARY_EMAIL_NOTIFY, Constant.DICTIONARY_ITEM_EMAIL_CONTENT_CHANGE_EMAIL, Constant.DEFAULT_LANGUAGE_CODE) .replace("${email}", user.getLoginName()) diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/ProductModelController.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/ProductModelController.java index df4a6df0..5f662b9d 100644 --- a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/ProductModelController.java +++ b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/ProductModelController.java @@ -2,7 +2,11 @@ package com.nflg.mobilebroken.admin.controller; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.convert.Convert; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; +import com.nflg.mobilebroken.admin.service.ITranslate; +import com.nflg.mobilebroken.common.constant.Constant; import com.nflg.mobilebroken.common.constant.PublishState; import com.nflg.mobilebroken.common.constant.STATE; import com.nflg.mobilebroken.common.exception.NflgException; @@ -23,7 +27,6 @@ import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; -import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotNull; import java.io.IOException; import java.util.*; @@ -61,6 +64,12 @@ public class ProductModelController extends ControllerBase{ @Resource private IProductModelHotimageService productModelHotimageService; + @Resource + private ILanguageService languageService; + + @Resource + private ITranslate translate; + /** * 添加机型 * @param request 请求参数 @@ -299,19 +308,33 @@ public class ProductModelController extends ControllerBase{ * @param request 请求参数 */ @PostMapping("/addParamsItem") - public ApiResult addParamsItem(@Valid @RequestBody ProductModelParamsItemAddRequest1 request){ + public ApiResult addParamsItem(@Valid @RequestBody ProductModelParamsItemAddRequest1 request){ VUtils.trueThrowBusinessError(Objects.isNull(request.getModelParamsId())).throwMessage("机型参数id不能为空"); ProductModelParams info = productModelParamsService.getById(request.getModelParamsId()); VUtils.trueThrowBusinessError(Objects.isNull(info)).throwMessage("无效的数据"); if (Objects.equals(info.getState(), PublishState.Published.getState())) { - Integer oldId=request.getModelParamsId(); + Integer oldId = request.getModelParamsId(); request.setModelParamsId(productModelParamsService.add(request.getModelId())); - productModelParamsService.copyItems(oldId,request.getModelParamsId()); + productModelParamsService.copyItems(oldId, request.getModelParamsId()); } - ParamsItemVO vo=new ParamsItemVO(); - vo.setModelParamsId(request.getModelParamsId()); - vo.setModelParamsItemId(productModelParamsItemService.addItem(request)); - return ApiResult.success(vo); + String batchNumber = IdUtil.getSnowflakeNextIdStr(); + List languages = languageService.getLanguages(); + request.setLanguageCode(Constant.DEFAULT_LANGUAGE_CODE); + request.setBatchNumber(batchNumber); + List datas = new ArrayList<>(); + datas.add(request); + languages.forEach(language -> { + if (!StrUtil.equals(language.getCode(), Constant.DEFAULT_LANGUAGE_CODE)) { + ProductModelParamsItemAddRequest1 copy = ObjectUtil.cloneByStream(request); + copy.setLanguageCode(language.getCode()); + copy.setIndexName(translate.translateWord(request.getIndexName(), language.getTranslateCode())); + copy.setName(translate.translateWord(request.getName(), language.getTranslateCode())); + copy.setValue(translate.translateWord(request.getValue(), language.getTranslateCode())); + datas.add(copy); + } + }); + productModelParamsItemService.addItem(datas); + return ApiResult.success(request.getModelParamsId()); } /** @@ -359,8 +382,10 @@ public class ProductModelController extends ControllerBase{ Integer oldId = request.getModelParamsId(); request.setModelParamsId(productModelParamsService.add(request.getModelId())); productModelParamsService.copyItems(oldId, request.getModelParamsId()); - ProductModelParamsItem oldItem=productModelParamsItemService.getById(request.getModelParamsItemId()); + ProductModelParamsItem oldItem = productModelParamsItemService.getById(request.getModelParamsItemId()); VUtils.trueThrowBusinessError(Objects.isNull(oldItem)).throwMessage("无效的数据"); + VUtils.trueThrowBusinessError(!StrUtil.equals(oldItem.getLanguageCode(), Constant.DEFAULT_LANGUAGE_CODE)) + .throwMessage("只能删除中文环境参数"); ProductModelParamsItem item = productModelParamsItemService.lambdaQuery() .eq(ProductModelParamsItem::getModelParamsId, request.getModelParamsId()) .eq(ProductModelParamsItem::getLanguageCode, oldItem.getLanguageCode()) @@ -370,7 +395,7 @@ public class ProductModelController extends ControllerBase{ VUtils.trueThrowBusinessError(Objects.isNull(item)).throwMessage("删除失败"); request.setModelParamsItemId(item.getId()); } - productModelParamsItemService.delete(request); + productModelParamsItemService.deleteParam(request); return ApiResult.success(request.getModelParamsId()); } @@ -617,7 +642,7 @@ public class ProductModelController extends ControllerBase{ * @param request 请求参数 */ @PostMapping("/addFile") - public ApiResult addFile(@Valid @RequestBody @NotEmpty ProductModelFileAddRequest request){ + public ApiResult addFile(@Valid @RequestBody ProductModelFileAddRequest request){ productModelFileService.add(request); return ApiResult.success(); } diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/TicketController.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/TicketController.java index 6956f625..509c6aed 100644 --- a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/TicketController.java +++ b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/TicketController.java @@ -29,7 +29,7 @@ import org.apache.poi.ss.util.RegionUtil; import org.apache.poi.util.IOUtils; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.springframework.core.io.ClassPathResource; -import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; import org.springframework.transaction.annotation.Transactional; @@ -104,7 +104,7 @@ public class TicketController extends ControllerBase { private TicketEventPublisher ticketEventPublisher; @Resource - private RedisTemplate redisTemplate; + private StringRedisTemplate stringRedisTemplate; @Resource private ITicketFavoritesService ticketFavoritesService; @@ -694,7 +694,7 @@ public class TicketController extends ControllerBase { List messageVOS = ticketChatService.getMessages(ticketId, userId); vo.setMessages(messageVOS); String key = "chatMessage:readed:" + ticketId + ":admin:" + userId; - Set readeds = redisTemplate.opsForSet().members(key); + Set readeds = stringRedisTemplate.opsForSet().members(key); Set notReadeds = new LinkedHashSet<>(); if (CollectionUtil.isEmpty(readeds)) { notReadeds = messageVOS.stream() @@ -711,7 +711,7 @@ public class TicketController extends ControllerBase { } } if (CollectionUtil.isNotEmpty(notReadeds)) { - redisTemplate.opsForSet().add(key, notReadeds.stream().toArray(String[]::new)); + stringRedisTemplate.opsForSet().add(key, notReadeds.stream().toArray(String[]::new)); vo.setNotReadCount(notReadeds.size()); vo.setFirstMessageId(notReadeds.iterator().next()); } diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/service/ITranslate.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/service/ITranslate.java index 7a771724..1366328e 100644 --- a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/service/ITranslate.java +++ b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/service/ITranslate.java @@ -3,4 +3,8 @@ package com.nflg.mobilebroken.admin.service; public interface ITranslate { String translateWord(String text,String sourceLanguage,String targetLanguage,String formatType); + + String translateWord(String text,String targetLanguage,String formatType); + + String translateWord(String text,String targetLanguage); } diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/service/WXQRCodeService.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/service/WXQRCodeService.java index b87d5f4f..2403a3d3 100644 --- a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/service/WXQRCodeService.java +++ b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/service/WXQRCodeService.java @@ -8,7 +8,7 @@ import com.nflg.mobilebroken.common.pojo.request.WXQrcodeRequest; import com.nflg.mobilebroken.common.pojo.request.WXQrcodeScene; import com.nflg.mobilebroken.common.pojo.vo.WXQrcodeVO; import com.nflg.mobilebroken.common.util.QRCodeUtil; -import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Component; import org.springframework.web.client.RestTemplate; @@ -20,14 +20,14 @@ import java.util.Objects; public class WXQRCodeService { @Resource - private RedisTemplate redisTemplate; + private StringRedisTemplate stringRedisTemplate; public byte[] generateQRCode(Integer userId) throws Exception { return QRCodeUtil.generateQRCode(getFollowUrl(userId), 200, 200); } public String getFollowUrl(Integer userId) { - Object obj = redisTemplate.opsForHash().get("wx:url:follow:admin", userId); + Object obj = stringRedisTemplate.opsForHash().get("wx:url:follow:admin", userId); if (Objects.isNull(obj)) { RestTemplate restTemplate = new RestTemplate(); ResponseEntity response1 = restTemplate.getForEntity(Constant.WX_TOKEN_URL, String.class); @@ -39,7 +39,7 @@ public class WXQRCodeService { WXQrcodeRequest req = new WXQrcodeRequest().setAction_info(new WXQrcodeActionInfo().setScene(new WXQrcodeScene().setScene_str(scene_str))); WXQrcodeVO qvo = restTemplate.postForObject(url, req, WXQrcodeVO.class); obj = qvo.getUrl(); - redisTemplate.opsForHash().put("wx:url:follow:admin", userId, obj); + stringRedisTemplate.opsForHash().put("wx:url:follow:admin", userId, obj); } return obj.toString(); } diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/service/impl/AliYunTranslate.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/service/impl/AliYunTranslate.java index 91069a9b..bdd6ba34 100644 --- a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/service/impl/AliYunTranslate.java +++ b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/service/impl/AliYunTranslate.java @@ -1,5 +1,7 @@ package com.nflg.mobilebroken.admin.service.impl; +import cn.hutool.core.util.StrUtil; +import cn.hutool.crypto.SecureUtil; import cn.hutool.json.JSONUtil; import com.aliyun.alimt20181012.models.TranslateGeneralResponse; import com.aliyun.credentials.Client; @@ -12,9 +14,12 @@ import com.nflg.mobilebroken.common.util.VUtils; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.stereotype.Service; import javax.annotation.PostConstruct; +import javax.annotation.Resource; +import java.util.concurrent.TimeUnit; @Service @ConditionalOnProperty(name = "translate.platform", havingValue = "aliyun") @@ -32,6 +37,9 @@ public class AliYunTranslate implements ITranslate { private com.aliyun.alimt20181012.Client client; + @Resource + private StringRedisTemplate stringRedisTemplate; + @PostConstruct public void init() throws Exception { Config credentialConfig = new Config(); @@ -54,15 +62,25 @@ public class AliYunTranslate implements ITranslate { .setFormatType(formatType) .setSourceText(text); log.info("翻译,请求参数:{}", JSONUtil.toJsonStr(request)); + System.out.println("Key serializer: " + stringRedisTemplate.getKeySerializer()); + System.out.println("Value serializer: " + stringRedisTemplate.getValueSerializer()); + String key = "translate:" + SecureUtil.md5(text) + ":" + targetLanguage; + String result = stringRedisTemplate.opsForValue().get(key); + if (StrUtil.isNotBlank(result)) { + log.info("翻译,响应,从缓存读取,翻译结果:{}", result); + return result; + } try { // 复制代码运行请自行打印 API 的返回值 TranslateGeneralResponse response = client.translateGeneralWithOptions(request, new com.aliyun.teautil.models.RuntimeOptions()); - VUtils.trueThrowBusinessError(response.statusCode != 200).throwMessage("翻译失败:"+response.getBody().getMessage()); + VUtils.trueThrowBusinessError(response.statusCode != 200).throwMessage("翻译失败:" + response.getBody().getMessage()); log.info("翻译,响应,识别到的原始语言:{},字数:{},翻译结果:{}" , response.getBody().getData().getDetectedLanguage() - ,response.getBody().getData().getWordCount() - ,JSONUtil.toJsonStr(response.getBody().getData().getTranslated())); - return response.body.getData().getTranslated(); + , response.getBody().getData().getWordCount() + , JSONUtil.toJsonStr(response.getBody().getData().getTranslated())); + result = response.body.getData().getTranslated(); + stringRedisTemplate.opsForValue().set(key, result, 30, TimeUnit.DAYS); + return result; } catch (Exception ex) { TeaException error = new TeaException(ex.getMessage(), ex); // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。 @@ -73,4 +91,14 @@ public class AliYunTranslate implements ITranslate { throw new NflgException(STATE.BusinessError, "翻译失败:" + error.getMessage()); } } + + @Override + public String translateWord(String text, String targetLanguage, String formatType) { + return translateWord(text, "auto", targetLanguage, formatType); + } + + @Override + public String translateWord(String text, String targetLanguage) { + return translateWord(text, targetLanguage, "text"); + } } diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/service/impl/WXINotifyPushService.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/service/impl/WXINotifyPushService.java index 81de50b5..b4ea8510 100644 --- a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/service/impl/WXINotifyPushService.java +++ b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/service/impl/WXINotifyPushService.java @@ -5,8 +5,6 @@ import com.nflg.mobilebroken.common.constant.Constant; import com.nflg.mobilebroken.common.pojo.dto.UserDTO; import com.nflg.mobilebroken.starter.service.INotifyPushService; import lombok.extern.slf4j.Slf4j; -import me.chanjar.weixin.mp.api.WxMpService; -import me.chanjar.weixin.mp.config.WxMpConfigStorage; import org.springframework.beans.factory.annotation.Value; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; @@ -21,11 +19,11 @@ public class WXINotifyPushService implements INotifyPushService { @Value("${wx.mp.templateMessage.config.templateId}") private String templateId; - @Resource - private WxMpService wxMpService; - - @Resource - private WxMpConfigStorage wxMpConfigStorage; +// @Resource +// private WxMpService wxMpService; +// +// @Resource +// private WxMpConfigStorage wxMpConfigStorage; @Resource private RedisTemplate redisTemplate; diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/task/ProductScheduledTasks.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/task/ProductScheduledTasks.java new file mode 100644 index 00000000..aa619b4d --- /dev/null +++ b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/task/ProductScheduledTasks.java @@ -0,0 +1,33 @@ +package com.nflg.mobilebroken.admin.task; + +import com.nflg.mobilebroken.repository.entity.ProductModel; +import com.nflg.mobilebroken.repository.service.IProductModelService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.time.LocalDateTime; + +@Slf4j +@Component +public class ProductScheduledTasks { + + @Resource + private IProductModelService productModelService; + + /** + * 机型是否新版本设置 + * 每天午夜12点执行一次 + */ + @Scheduled(cron = "0 0 0 * * ?") + public void resetRecommend() { + log.info("【产品中心-机型-新品】开始执行"); + productModelService.lambdaUpdate() + .set(ProductModel::getRecommend, false) + .eq(ProductModel::getRecommend, true) + .gt(ProductModel::getRecommendTime, LocalDateTime.now().minusYears(2)) + .update(); + log.info("【产品中心-机型-新品】执行完毕"); + } +} diff --git a/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/controller/AnonymousTicketController.java b/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/controller/AnonymousTicketController.java index 9679dba5..822796bf 100644 --- a/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/controller/AnonymousTicketController.java +++ b/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/controller/AnonymousTicketController.java @@ -8,7 +8,7 @@ import com.nflg.mobilebroken.repository.service.IAnonymousTicketService; import com.wf.captcha.SpecCaptcha; import com.wf.captcha.base.Captcha; import org.springframework.data.redis.core.BoundValueOperations; -import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; @@ -29,7 +29,7 @@ public class AnonymousTicketController extends ControllerBase{ private IAnonymousTicketService anonymousTicketService; @Resource - private RedisTemplate redisTemplate; + private StringRedisTemplate stringRedisTemplate; /** * 获取验证码 @@ -47,7 +47,7 @@ public class AnonymousTicketController extends ControllerBase{ // specCaptcha.setFont(new Font("Verdana", Font.PLAIN, 32)); // 有默认字体,可以不用设置 // 设置类型,纯数字、纯字母、字母数字混合 specCaptcha.setCharType(Captcha.TYPE_ONLY_NUMBER); - BoundValueOperations bo=redisTemplate.boundValueOps("anonymous:ticket:captcha:"+email); + BoundValueOperations bo=stringRedisTemplate.boundValueOps("anonymous:ticket:captcha:"+email); bo.set(specCaptcha.text(), Duration.ofMinutes(10)); // 输出图片流 specCaptcha.out(response.getOutputStream()); @@ -59,10 +59,10 @@ public class AnonymousTicketController extends ControllerBase{ @PostMapping("/addAnonymousTicket") public ApiResult addAnonymousTicket(@Valid @RequestBody AnonymousTicketAddRequest request){ String captcha=request.getCode(); - BoundValueOperations bo=redisTemplate.boundValueOps("anonymous:ticket:captcha:"+request.getEmail()); + BoundValueOperations bo=stringRedisTemplate.boundValueOps("anonymous:ticket:captcha:"+request.getEmail()); VUtils.trueThrowBusinessError(!StrUtil.equals(captcha,bo.get())).throwMessage("验证码不正确或已失效"); anonymousTicketService.add(request); - redisTemplate.delete("anonymous:ticket:captcha:"+request.getEmail()); + stringRedisTemplate.delete("anonymous:ticket:captcha:"+request.getEmail()); return ApiResult.success(); } } diff --git a/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/controller/TicketController.java b/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/controller/TicketController.java index 72d49e8d..1fd78d0c 100644 --- a/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/controller/TicketController.java +++ b/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/controller/TicketController.java @@ -21,7 +21,7 @@ import com.nflg.mobilebroken.repository.entity.*; import com.nflg.mobilebroken.repository.service.*; import com.nflg.mobilebroken.starter.service.UniPushService; import lombok.extern.slf4j.Slf4j; -import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; @@ -82,7 +82,7 @@ public class TicketController extends ControllerBase { private TicketEventPublisher ticketEventPublisher; @Resource - private RedisTemplate redisTemplate; + private StringRedisTemplate stringRedisTemplate; @Resource private ITBasePartService partService; @@ -303,7 +303,7 @@ public class TicketController extends ControllerBase { List messageVOS = ticketChatService.getMessages(ticketId, userId); vo.setMessages(messageVOS); String key = "chatMessage:readed:" + ticketId + ":app:" + userId; - Set readeds = redisTemplate.opsForSet().members(key); + Set readeds = stringRedisTemplate.opsForSet().members(key); Set notReadeds = new LinkedHashSet<>(); if (CollectionUtil.isEmpty(readeds)) { notReadeds = messageVOS.stream() @@ -320,7 +320,7 @@ public class TicketController extends ControllerBase { } } if (CollectionUtil.isNotEmpty(notReadeds)) { - redisTemplate.opsForSet().add(key, notReadeds.toArray(String[]::new)); + stringRedisTemplate.opsForSet().add(key, notReadeds.toArray(String[]::new)); vo.setNotReadCount(notReadeds.size()); vo.setFirstMessageId(notReadeds.iterator().next()); } diff --git a/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/controller/UserController.java b/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/controller/UserController.java index e59d6e7a..762bdc03 100644 --- a/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/controller/UserController.java +++ b/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/controller/UserController.java @@ -26,7 +26,7 @@ import com.nflg.mobilebroken.repository.service.*; import com.nflg.mobilebroken.starter.service.EmailService; import org.springframework.beans.factory.annotation.Value; import org.springframework.cloud.context.config.annotation.RefreshScope; -import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.http.MediaType; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; @@ -70,7 +70,7 @@ public class UserController extends ControllerBase { private IAppUserApplyforService appUserApplyforService; @Resource - private RedisTemplate redisTemplate; + private StringRedisTemplate stringRedisTemplate; @Resource private ITBaseCustomerService customerService; @@ -132,7 +132,7 @@ public class UserController extends ControllerBase { String email = AppUserUtil.getEmail(); String kaptcha = RandomUtil.randomString(6); // 将生成的验证码存入redis - redisTemplate.opsForValue().set(StrUtil.format(Constant.REDIS_KEY_USER_UPDATE_KAPTCHA_APP, email), kaptcha, Duration.ofHours(72)); + stringRedisTemplate.opsForValue().set(StrUtil.format(Constant.REDIS_KEY_USER_UPDATE_KAPTCHA_APP, email), kaptcha, Duration.ofHours(72)); String subject = dictionaryItemTranslateService.getValueByCode(Constant.DICTIONARY_EMAIL_NOTIFY, Constant.DICTIONARY_ITEM_EMAIL_TITLE_ACCOUNT_CHANGE_PASSWORD, Constant.DEFAULT_LANGUAGE_CODE); String content = dictionaryItemTranslateService.getValueByCode(Constant.DICTIONARY_EMAIL_NOTIFY, Constant.DICTIONARY_ITEM_EMAIL_CONTENT_ACCOUNT_CHANGE_PASSWORD, Constant.DEFAULT_LANGUAGE_CODE) .replace("${loginName}",email) @@ -152,11 +152,11 @@ public class UserController extends ControllerBase { @PostMapping("updatePassword") public ApiResult updatePassword(@Valid @RequestBody UpdatePasswordRequest request){ String redisKey = StrUtil.format(Constant.REDIS_KEY_USER_UPDATE_KAPTCHA_APP, AppUserUtil.getEmail()); - String captcha = redisTemplate.opsForValue().get(redisKey); + String captcha = stringRedisTemplate.opsForValue().get(redisKey); VUtils.trueThrowBusinessError(StrUtil.isBlank(captcha)).throwMessage("验证码已失效,请重新获取"); VUtils.trueThrowBusinessError(!StrUtil.equals(captcha, request.getCaptcha())).throwMessage("验证码不正确"); appUserService.updatePassword(AppUserUtil.getUserId(), request.getNewPassword()); - redisTemplate.delete(redisKey); + stringRedisTemplate.delete(redisKey); return ApiResult.success(); } diff --git a/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/service/WXQRCodeService.java b/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/service/WXQRCodeService.java index 1bce632f..4050959e 100644 --- a/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/service/WXQRCodeService.java +++ b/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/service/WXQRCodeService.java @@ -8,7 +8,7 @@ import com.nflg.mobilebroken.common.pojo.request.WXQrcodeRequest; import com.nflg.mobilebroken.common.pojo.request.WXQrcodeScene; import com.nflg.mobilebroken.common.pojo.vo.WXQrcodeVO; import com.nflg.mobilebroken.common.util.QRCodeUtil; -import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Component; import org.springframework.web.client.RestTemplate; @@ -20,14 +20,14 @@ import java.util.Objects; public class WXQRCodeService { @Resource - private RedisTemplate redisTemplate; + private StringRedisTemplate stringRedisTemplate; public byte[] generateQRCode(Integer userId) throws Exception { return QRCodeUtil.generateQRCode(getFollowUrl(userId), 200, 200); } public String getFollowUrl(Integer userId) { - Object obj = redisTemplate.opsForHash().get("wx:url:follow:app", userId); + Object obj = stringRedisTemplate.opsForHash().get("wx:url:follow:app", userId); if (Objects.isNull(obj)) { RestTemplate restTemplate = new RestTemplate(); ResponseEntity response1 = restTemplate.getForEntity(Constant.WX_TOKEN_URL, String.class); @@ -39,7 +39,7 @@ public class WXQRCodeService { WXQrcodeRequest req = new WXQrcodeRequest().setAction_info(new WXQrcodeActionInfo().setScene(new WXQrcodeScene().setScene_str(scene_str))); WXQrcodeVO qvo = restTemplate.postForObject(url, req, WXQrcodeVO.class); obj = qvo.getUrl(); - redisTemplate.opsForHash().put("wx:url:follow:app", userId, obj); + stringRedisTemplate.opsForHash().put("wx:url:follow:app", userId, obj); } return obj.toString(); } diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ParamsIndexNameDeleteRequest.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ParamsIndexNameDeleteRequest.java index d20d3ada..718caf63 100644 --- a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ParamsIndexNameDeleteRequest.java +++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ParamsIndexNameDeleteRequest.java @@ -21,8 +21,8 @@ public class ParamsIndexNameDeleteRequest { private String languageCode; /** - * 指标名称 + * 批次号 */ @NotBlank - private String indexName; -} + private String batchNumber; +} \ No newline at end of file diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductModelFileAddRequest.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductModelFileAddRequest.java index 5c6428b3..2e63a35d 100644 --- a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductModelFileAddRequest.java +++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductModelFileAddRequest.java @@ -4,6 +4,7 @@ import lombok.Data; import org.apache.commons.io.FilenameUtils; import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotNull; import java.util.List; @@ -40,6 +41,7 @@ public class ProductModelFileAddRequest { /** * 多语言数据 */ + @NotEmpty private List items; /** diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductModelParamsItemAddRequest.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductModelParamsItemAddRequest.java index c38563a8..cfc73206 100644 --- a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductModelParamsItemAddRequest.java +++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductModelParamsItemAddRequest.java @@ -1,11 +1,13 @@ package com.nflg.mobilebroken.common.pojo.request; +import com.fasterxml.jackson.annotation.JsonIgnore; import lombok.Data; import javax.validation.constraints.NotBlank; +import java.io.Serializable; @Data -public class ProductModelParamsItemAddRequest { +public class ProductModelParamsItemAddRequest implements Serializable { /** * 语言编码 @@ -19,6 +21,12 @@ public class ProductModelParamsItemAddRequest { @NotBlank private String indexName; + /** + * 批次号 + */ + @JsonIgnore + private String batchNumber; + /** * 参数名称 */ diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductModelParamsItemAddRequest1.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductModelParamsItemAddRequest1.java index 125e2aa3..46d3e5f2 100644 --- a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductModelParamsItemAddRequest1.java +++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductModelParamsItemAddRequest1.java @@ -3,9 +3,10 @@ package com.nflg.mobilebroken.common.pojo.request; import lombok.Data; import javax.validation.constraints.NotNull; +import java.io.Serializable; @Data -public class ProductModelParamsItemAddRequest1 extends ProductModelParamsItemAddRequest { +public class ProductModelParamsItemAddRequest1 extends ProductModelParamsItemAddRequest implements Serializable { /** * 机型id diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductModelMainParamsItemChildrenVO.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductModelMainParamsItemChildrenVO.java index 7e717016..f9ba9bdb 100644 --- a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductModelMainParamsItemChildrenVO.java +++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductModelMainParamsItemChildrenVO.java @@ -14,5 +14,10 @@ public class ProductModelMainParamsItemChildrenVO { */ private String indexName; + /** + * 批次号 + */ + private String batchNumber; + private List items; } diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductModelParamsItemVO.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductModelParamsItemVO.java index 4046c372..8968d709 100644 --- a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductModelParamsItemVO.java +++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductModelParamsItemVO.java @@ -3,6 +3,7 @@ package com.nflg.mobilebroken.common.pojo.vo; import lombok.Data; import lombok.experimental.Accessors; +import java.util.ArrayList; import java.util.List; @Data @@ -14,5 +15,5 @@ public class ProductModelParamsItemVO { */ private String languageCode; - private List items; + private List items=new ArrayList<>(); } diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductParamsItemVO.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductParamsItemVO.java index 1d7eda65..a3491943 100644 --- a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductParamsItemVO.java +++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductParamsItemVO.java @@ -11,6 +11,11 @@ public class ProductParamsItemVO { private Integer id; + /** + * 批次号 + */ + private String batchNumber; + /** * 参数名称 */ diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/ProductModel.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/ProductModel.java index 156468bc..f1c5f654 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/ProductModel.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/ProductModel.java @@ -59,6 +59,11 @@ public class ProductModel implements Serializable { */ private Boolean recommend; + /** + * 设置为新品的时间 + */ + private LocalDateTime recommendTime; + /** * 排序 */ diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/ProductModelParamsItem.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/ProductModelParamsItem.java index 8c5d17a3..cb20f651 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/ProductModelParamsItem.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/ProductModelParamsItem.java @@ -44,6 +44,11 @@ public class ProductModelParamsItem implements Serializable { */ private String indexName; + /** + * 批次号 + */ + private String batchNumber; + /** * 参数名称 */ diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductModelParamsItemService.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductModelParamsItemService.java index 57157214..07451286 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductModelParamsItemService.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductModelParamsItemService.java @@ -22,9 +22,9 @@ import java.util.List; */ public interface IProductModelParamsItemService extends IService { - void add(Integer paramsId, @NotEmpty List items); +// void add(Integer paramsId, @NotEmpty List items); - void update(Integer paramsId, @NotEmpty List items); +// void update(Integer paramsId, @NotEmpty List items); void deleteByParamsIds(@NotEmpty List ids); @@ -34,11 +34,11 @@ public interface IProductModelParamsItemService extends IService request); void updateIndexName(@Valid ProductModelParamsNameUpdateRequest request); - void delete(@Valid ProductModelParamsItemDeleteRequest request); + void deleteParam(@Valid ProductModelParamsItemDeleteRequest request); void importModelParamsItem(@Valid @NotNull Integer modelParamsId, List datas); diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductModelParamsService.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductModelParamsService.java index 64d87023..76c6149e 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductModelParamsService.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductModelParamsService.java @@ -4,7 +4,6 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.IService; import com.nflg.mobilebroken.common.pojo.request.BatchDeleteRequest; import com.nflg.mobilebroken.common.pojo.request.ProductModelIntroSearchRequest; -import com.nflg.mobilebroken.common.pojo.request.ProductModelParamsAddRequest; import com.nflg.mobilebroken.common.pojo.request.ProductPublishRequest; import com.nflg.mobilebroken.common.pojo.vo.ProductModelMainParamsItemChildrenVO; import com.nflg.mobilebroken.common.pojo.vo.ProductModelParamVO; @@ -25,11 +24,11 @@ import java.util.List; */ public interface IProductModelParamsService extends IService { - void add(@Valid ProductModelParamsAddRequest request); +// void add(@Valid ProductModelParamsAddRequest request); Integer add(Integer modelId); - void update(@Valid ProductModelParamsAddRequest request); +// void update(@Valid ProductModelParamsAddRequest request); void delete(@Valid BatchDeleteRequest request); diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/AdminUserServiceImpl.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/AdminUserServiceImpl.java index a10ae63b..9c3c46c7 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/AdminUserServiceImpl.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/AdminUserServiceImpl.java @@ -21,7 +21,7 @@ import com.nflg.mobilebroken.common.util.VUtils; import com.nflg.mobilebroken.repository.entity.*; import com.nflg.mobilebroken.repository.mapper.AdminUserMapper; import com.nflg.mobilebroken.repository.service.*; -import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Service; @@ -59,7 +59,7 @@ public class AdminUserServiceImpl extends ServiceImpl redisTemplate; + private StringRedisTemplate stringRedisTemplate; @Resource private ITBaseDeviceTypeService deviceTypeService; @@ -239,10 +239,10 @@ public class AdminUserServiceImpl extends ServiceImpl impl private IAdminRoleService roleService; @Resource - private RedisTemplate redisTemplate; + private StringRedisTemplate stringRedisTemplate; @Override public AppUser getUser(String userName, String password) { @@ -691,10 +691,10 @@ public class AppUserServiceImpl extends ServiceImpl impl updateById(appUser); }else if (StrUtil.equals("1", type)){ //修改邮箱 - code=redisTemplate.opsForValue().get(Constant.REDIS_KEY_CHANGE_EMAIL_CODE + email); + code=stringRedisTemplate.opsForValue().get(Constant.REDIS_KEY_CHANGE_EMAIL_CODE + email); VUtils.trueThrowBusinessError(!StrUtil.equals(code, request.getRandomCode())) .throwMessage("无效的激活码"); - String email1=redisTemplate.opsForValue().get(Constant.REDIS_KEY_CHANGE_EMAIL_CODE + code); + String email1=stringRedisTemplate.opsForValue().get(Constant.REDIS_KEY_CHANGE_EMAIL_CODE + code); VUtils.trueThrowBusinessError(StrUtil.isBlank(email1)) .throwMessage("无效的激活码"); AppUser user = lambdaQuery().eq(AppUser::getIsDel, 0).eq(AppUser::getLoginName, email).one(); diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductModelParamsItemServiceImpl.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductModelParamsItemServiceImpl.java index 2cb2d8d9..de3b2d5a 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductModelParamsItemServiceImpl.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductModelParamsItemServiceImpl.java @@ -14,9 +14,11 @@ import com.nflg.mobilebroken.common.pojo.vo.ProductModelParamsItemVO; import com.nflg.mobilebroken.common.pojo.vo.ProductParamsItemVO; import com.nflg.mobilebroken.common.util.AdminUserUtil; import com.nflg.mobilebroken.repository.entity.DictionaryItemTranslate; +import com.nflg.mobilebroken.repository.entity.Language; import com.nflg.mobilebroken.repository.entity.ProductModelParamsItem; import com.nflg.mobilebroken.repository.mapper.ProductModelParamsItemMapper; import com.nflg.mobilebroken.repository.service.IDictionaryItemTranslateService; +import com.nflg.mobilebroken.repository.service.ILanguageService; import com.nflg.mobilebroken.repository.service.IProductModelParamsItemService; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -43,51 +45,54 @@ public class ProductModelParamsItemServiceImpl extends ServiceImpl items) { - if (CollectionUtil.isNotEmpty(items)){ - saveBatch( - items.stream() - .map(it -> new ProductModelParamsItem() - .setModelParamsId(paramsId) - .setLanguageCode(it.getLanguageCode()) - .setName(it.getName()) - .setIndexName(it.getIndexName()) - .setValue(it.getValue()) - .setMain(it.getMain()) - .setCompare(it.getCompare()) - .setCreateBy(AdminUserUtil.getUserName()) - .setCreateTime(LocalDateTime.now()) - ) - .collect(Collectors.toList()) - ); - } - } + @Resource + private ILanguageService languageService; - @Transactional - @Override - public void update(Integer paramsId, List items) { - remove(new LambdaQueryWrapper() - .eq(ProductModelParamsItem::getModelParamsId, paramsId)); - if (CollectionUtil.isNotEmpty(items)){ - saveBatch( - items.stream() - .map(it -> new ProductModelParamsItem() - .setModelParamsId(paramsId) - .setLanguageCode(it.getLanguageCode()) - .setName(it.getName()) - .setIndexName(it.getIndexName()) - .setValue(it.getValue()) - .setMain(it.getMain()) - .setCompare(it.getCompare()) - .setUpdateBy(AdminUserUtil.getUserName()) - .setUpdateTime(LocalDateTime.now()) - ) - .collect(Collectors.toList()) - ); - } - } +// @Transactional +// @Override +// public void add(Integer paramsId, List items) { +// if (CollectionUtil.isNotEmpty(items)){ +// saveBatch( +// items.stream() +// .map(it -> new ProductModelParamsItem() +// .setModelParamsId(paramsId) +// .setLanguageCode(it.getLanguageCode()) +// .setName(it.getName()) +// .setIndexName(it.getIndexName()) +// .setValue(it.getValue()) +// .setMain(it.getMain()) +// .setCompare(it.getCompare()) +// .setCreateBy(AdminUserUtil.getUserName()) +// .setCreateTime(LocalDateTime.now()) +// ) +// .collect(Collectors.toList()) +// ); +// } +// } + +// @Transactional +// @Override +// public void update(Integer paramsId, List items) { +// remove(new LambdaQueryWrapper() +// .eq(ProductModelParamsItem::getModelParamsId, paramsId)); +// if (CollectionUtil.isNotEmpty(items)){ +// saveBatch( +// items.stream() +// .map(it -> new ProductModelParamsItem() +// .setModelParamsId(paramsId) +// .setLanguageCode(it.getLanguageCode()) +// .setName(it.getName()) +// .setIndexName(it.getIndexName()) +// .setValue(it.getValue()) +// .setMain(it.getMain()) +// .setCompare(it.getCompare()) +// .setUpdateBy(AdminUserUtil.getUserName()) +// .setUpdateTime(LocalDateTime.now()) +// ) +// .collect(Collectors.toList()) +// ); +// } +// } @Override public void deleteByParamsIds(List ids) { @@ -141,16 +146,17 @@ public class ProductModelParamsItemServiceImpl extends ServiceImpl { ProductModelParamsItemVO vo = new ProductModelParamsItemVO() .setLanguageCode(languageCode); + vos.add(vo); Map> itemMap = data.stream().collect(Collectors.groupingBy(ProductModelParamsItem::getIndexName)); itemMap.forEach((indexName, itemData) -> { - vo.setItems(data.stream().map(it -> new ProductModelMainParamsItemChildrenVO() - .setIndexName(indexName) - .setItems(itemData.stream() - .filter(pi->StrUtil.isNotBlank(pi.getName())) - .map(pi -> Convert.convert(ProductParamsItemVO.class, pi)) - .collect(Collectors.toList()))) + ProductModelMainParamsItemChildrenVO ivo=new ProductModelMainParamsItemChildrenVO() + .setIndexName(indexName) + .setBatchNumber(CollectionUtil.isNotEmpty(itemData) ? itemData.get(0).getBatchNumber() : "") + .setItems(itemData.stream() + .filter(pi -> StrUtil.isNotBlank(pi.getName())) + .map(pi -> Convert.convert(ProductParamsItemVO.class, pi)) .collect(Collectors.toList())); - vos.add(vo); + vo.getItems().add(ivo); }); }); return vos; @@ -172,18 +178,20 @@ public class ProductModelParamsItemServiceImpl extends ServiceImpl request) { + saveBatch(request.stream().map(it -> new ProductModelParamsItem() + .setModelParamsId(it.getModelParamsId()) + .setLanguageCode(it.getLanguageCode()) + .setBatchNumber(it.getBatchNumber()) + .setIndexName(it.getIndexName()) + .setName(it.getName()) + .setValue(it.getValue()) + .setCreateBy(AdminUserUtil.getUserName()) + .setCreateTime(LocalDateTime.now())) + .collect(Collectors.toList()) + ); } @Override @@ -198,9 +206,14 @@ public class ProductModelParamsItemServiceImpl extends ServiceImpl() + .eq(ProductModelParamsItem::getBatchNumber,info.getBatchNumber()) + .eq(ProductModelParamsItem::getModelParamsId,request.getModelParamsId()) + ); } @Transactional @@ -255,11 +268,23 @@ public class ProductModelParamsItemServiceImpl extends ServiceImpl() - .eq(ProductModelParamsItem::getModelParamsId, request.getModelParamsId()) - .eq(ProductModelParamsItem::getLanguageCode, request.getLanguageCode()) - .eq(ProductModelParamsItem::getIndexName, request.getIndexName())); + List languages = languageService.getAllLanguages(); + languages.forEach(lang -> { + ProductModelParamsItem item = lambdaQuery() + .eq(ProductModelParamsItem::getBatchNumber, request.getBatchNumber()) + .eq(ProductModelParamsItem::getModelParamsId, request.getModelParamsId()) + .eq(ProductModelParamsItem::getLanguageCode, lang.getCode()) + .one(); + if (Objects.nonNull(item)) { + remove(new LambdaQueryWrapper() + .eq(ProductModelParamsItem::getModelParamsId, request.getModelParamsId()) + .eq(ProductModelParamsItem::getLanguageCode, lang.getCode()) + .eq(ProductModelParamsItem::getIndexName, item.getIndexName()) + ); + } + }); } } \ No newline at end of file diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductModelParamsServiceImpl.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductModelParamsServiceImpl.java index a0d03c33..d848995b 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductModelParamsServiceImpl.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductModelParamsServiceImpl.java @@ -9,7 +9,6 @@ import com.nflg.mobilebroken.common.constant.Constant; import com.nflg.mobilebroken.common.constant.PublishState; import com.nflg.mobilebroken.common.pojo.request.BatchDeleteRequest; import com.nflg.mobilebroken.common.pojo.request.ProductModelIntroSearchRequest; -import com.nflg.mobilebroken.common.pojo.request.ProductModelParamsAddRequest; import com.nflg.mobilebroken.common.pojo.request.ProductPublishRequest; import com.nflg.mobilebroken.common.pojo.vo.ProductModelMainParamsItemChildrenVO; import com.nflg.mobilebroken.common.pojo.vo.ProductModelParamVO; @@ -43,14 +42,14 @@ public class ProductModelParamsServiceImpl extends ServiceImplactivation--> - - com.github.binarywang - wx-java-mp-spring-boot-starter - 4.6.0 - org.springframework.boot spring-boot-starter-data-redis + + + + + org.springframework.boot spring-boot-starter-mail diff --git a/nflg-mobilebroken-starter/src/main/java/com/nflg/mobilebroken/starter/config/RedisConfig.java b/nflg-mobilebroken-starter/src/main/java/com/nflg/mobilebroken/starter/config/RedisConfig.java index 43ad46dd..8531fc5c 100644 --- a/nflg-mobilebroken-starter/src/main/java/com/nflg/mobilebroken/starter/config/RedisConfig.java +++ b/nflg-mobilebroken-starter/src/main/java/com/nflg/mobilebroken/starter/config/RedisConfig.java @@ -7,7 +7,7 @@ import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.connection.RedisStandaloneConfiguration; import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory; import org.springframework.data.redis.core.RedisTemplate; -import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer; +import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.data.redis.serializer.StringRedisSerializer; @Configuration @@ -42,11 +42,11 @@ public class RedisConfig { // 设置 Key 的序列化器 template.setKeySerializer(new StringRedisSerializer()); // 设置 Value 的序列化器 - template.setValueSerializer(new GenericJackson2JsonRedisSerializer()); + template.setValueSerializer(new StringRedisSerializer()); // 设置 Hash Key 的序列化器 template.setHashKeySerializer(new StringRedisSerializer()); // 设置 Hash Value 的序列化器 - template.setHashValueSerializer(new GenericJackson2JsonRedisSerializer()); + template.setHashValueSerializer(new StringRedisSerializer()); return template; } @@ -57,11 +57,17 @@ public class RedisConfig { // 设置 Key 的序列化器 template.setKeySerializer(new StringRedisSerializer()); // 设置 Value 的序列化器 - template.setValueSerializer(new GenericJackson2JsonRedisSerializer()); + template.setValueSerializer(new StringRedisSerializer()); // 设置 Hash Key 的序列化器 template.setHashKeySerializer(new StringRedisSerializer()); // 设置 Hash Value 的序列化器 template.setHashValueSerializer(new StringRedisSerializer()); + template.afterPropertiesSet(); return template; } + + @Bean + public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory factory) { + return new StringRedisTemplate(factory); + } }