yubin 3 долоо хоног өмнө
parent
commit
1e4221d832
24 өөрчлөгдсөн 626 нэмэгдсэн , 149 устгасан
  1. 2 1
      mall-service/src/main/java/com/txz/mall/business/impl/OrderServiceBusinessImpl.java
  2. 4 3
      mall-service/src/main/java/com/txz/mall/business/impl/PinkServiceBusinessImpl.java
  3. 3 2
      mall-service/src/main/java/com/txz/mall/controller/CombinationController.java
  4. 3 2
      mall-service/src/main/java/com/txz/mall/controller/appcontroller/AppCombinationController.java
  5. 2 1
      mall-service/src/main/java/com/txz/mall/controller/appcontroller/MidFavoriteController.java
  6. 6 2
      mall-service/src/main/java/com/txz/mall/controller/i18nTestController.java
  7. 2 1
      mall-service/src/main/java/com/txz/mall/core/AuthService.java
  8. 3 1
      mall-service/src/main/java/com/txz/mall/core/ResultCode.java
  9. 3 1
      mall-service/src/main/java/com/txz/mall/dubbo/client/OperatingConfigDubboServiceClient.java
  10. 3 1
      mall-service/src/main/java/com/txz/mall/service/impl/CategoryServiceImpl.java
  11. 8 7
      mall-service/src/main/java/com/txz/mall/service/impl/StoreCombinationServiceImpl.java
  12. 4 2
      mall-service/src/main/java/com/txz/mall/service/impl/StoreFlashActivityServiceImpl.java
  13. 87 89
      mall-service/src/main/java/com/txz/mall/service/impl/StoreOrderServiceImpl.java
  14. 10 8
      mall-service/src/main/java/com/txz/mall/service/impl/StorePinkServiceImpl.java
  15. 3 2
      mall-service/src/main/java/com/txz/mall/service/impl/StorePinkSummaryServiceImpl.java
  16. 2 1
      mall-service/src/main/java/com/txz/mall/service/impl/StoreProductRuleServiceImpl.java
  17. 13 12
      mall-service/src/main/java/com/txz/mall/service/impl/StoreProductServiceImpl.java
  18. 2 1
      mall-service/src/main/java/com/txz/mall/service/impl/UserSignServiceImpl.java
  19. 19 4
      mall-service/src/main/java/com/txz/mall/util/I18nUtil.java
  20. 3 2
      mall-service/src/main/java/com/txz/mall/web/ro/SendNoticeRO.java
  21. 0 1
      mall-service/src/main/resources/i18n/messages.properties
  22. 147 1
      mall-service/src/main/resources/i18n/messages_bn_BD.properties
  23. 139 2
      mall-service/src/main/resources/i18n/messages_en_US.properties
  24. 158 2
      mall-service/src/main/resources/i18n/messages_zh_CN.properties

+ 2 - 1
mall-service/src/main/java/com/txz/mall/business/impl/OrderServiceBusinessImpl.java

@@ -13,6 +13,7 @@ import com.txz.mall.dubbo.client.CifUserDubboServiceClient;
 import com.txz.mall.enums.PinkOrderStatusEnum;
 import com.txz.mall.model.*;
 import com.txz.mall.service.*;
+import com.txz.mall.util.I18nUtil;
 import lombok.AllArgsConstructor;
 import org.apache.commons.lang.time.DateUtils;
 import org.springframework.beans.BeanUtils;
@@ -57,7 +58,7 @@ public class OrderServiceBusinessImpl implements OrderServiceBusiness {
         }
 
         if(ObjectUtils.isEmpty(storeOrder)){
-            throw new ServiceException("订单不存在 ID:"+id);
+            throw new ServiceException(I18nUtil.get("order.does.not.exist.id")+id);
         }
         id =storeOrder.getId();
         Condition infoCondition = new Condition(StoreOrderInfo.class);

+ 4 - 3
mall-service/src/main/java/com/txz/mall/business/impl/PinkServiceBusinessImpl.java

@@ -15,6 +15,7 @@ import com.txz.mall.model.StorePink;
 import com.txz.mall.service.StoreCombinationService;
 import com.txz.mall.service.StoreOrderService;
 import com.txz.mall.service.StorePinkService;
+import com.txz.mall.util.I18nUtil;
 import lombok.AllArgsConstructor;
 import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
@@ -48,13 +49,13 @@ public class PinkServiceBusinessImpl implements PinkServiceBusiness {
     public List<StorePinkDetailVO> getAdminList(Long pinkId,String terminal) {
 
         if (ObjectUtils.isEmpty(pinkId)) {
-            throw new ServiceException("拼团id为空");
+            throw new ServiceException(I18nUtil.get("group.buying.id.is.empty"));
         }
         StorePink storePink = storePinkService.findById(pinkId);
 
 
         if (ObjectUtils.isEmpty(storePink)) {
-            throw new ServiceException("拼团数据不存在id:"+pinkId);
+            throw new ServiceException(I18nUtil.get("group.buying.data.does.not.exist.id")+pinkId);
         }
         List<StorePinkDetailVO> resultList = new ArrayList<>();
       //  if (StorePinkStatusEnum.RESULTS_ANNOUNCED.getKey().equals(storePink.getStatus())) {
@@ -220,7 +221,7 @@ public class PinkServiceBusinessImpl implements PinkServiceBusiness {
         if (!applyList.isEmpty()) {
             boolean task = storeOrderService.refundApplyTask(applyList);
             if (!task) {
-                throw new ServiceException("拼团未成功,订单申请退款失败");
+                throw new ServiceException(I18nUtil.get("group.buying.failed.order.refund.application.failed"));
             }
         }
         if (CollUtil.isNotEmpty(pinkSuccessList) && !pinkSuccessList.isEmpty()) {

+ 3 - 2
mall-service/src/main/java/com/txz/mall/controller/CombinationController.java

@@ -10,6 +10,7 @@ import com.txz.mall.core.ServiceException;
 import com.txz.mall.model.StoreCombination;
 import com.txz.mall.service.StoreCombinationService;
 import com.txz.mall.service.StoreOrderService;
+import com.txz.mall.util.I18nUtil;
 import com.txz.mall.web.param.addparam.StoreCombinationAddParam;
 import dto.GoPinkDTO;
 import dto.StoreProductDTO;
@@ -74,7 +75,7 @@ public class CombinationController {
         }
         Date date = new Date();
         if (combination.getIsShow().equals(1) && combination.getStartTime().before(date) && combination.getStopTime().after(date)) {
-            throw new ServiceException("活动开启中,商品不支持删除");
+            throw new ServiceException("the.activity.is.ongoing.and.the.product.does.not.support.deletion");
         }
         try {
             StoreCombination storeCombination = new StoreCombination();
@@ -177,7 +178,7 @@ public class CombinationController {
     @ApiOperation(value = "添加活动商品")
     public Result addActivityProduct(@RequestBody StoreCombinationAddParam storeCombinationAddParam) {
         if (CollectionUtils.isEmpty(storeCombinationAddParam.getList())) {
-            throw new ServiceException("添加商品不能为空");
+            throw new ServiceException(I18nUtil.get("the.added.product.cannot.be.empty"));
         }
         if (storeCombinationAddParam.getActivityId() == null) {
             return Result.fail(ResultCode.ID_IS_NULL);

+ 3 - 2
mall-service/src/main/java/com/txz/mall/controller/appcontroller/AppCombinationController.java

@@ -10,6 +10,7 @@ import com.txz.mall.core.ServiceException;
 import com.txz.mall.model.StoreCombination;
 import com.txz.mall.service.StoreCombinationService;
 import com.txz.mall.service.StoreOrderService;
+import com.txz.mall.util.I18nUtil;
 import com.txz.mall.web.param.addparam.StoreCombinationAddParam;
 import dto.GoPinkDTO;
 import dto.StoreProductDTO;
@@ -75,7 +76,7 @@ public class AppCombinationController {
     //        }
     //        Date date = new Date();
     //        if (combination.getIsShow().equals(1) && combination.getStartTime().before(date) && combination.getStopTime().after(date)) {
-    //            throw new ServiceException("活动开启中,商品不支持删除");
+    //            throw new ServiceException(I18nUtil.get("the.activity.is.ongoing.and.the.product.does.not.support.deletion"));
     //        }
     //        try {
     //            StoreCombination storeCombination = new StoreCombination();
@@ -189,7 +190,7 @@ public class AppCombinationController {
     @ApiOperation(value = "添加活动商品")
     public Result addActivityProduct(@RequestBody StoreCombinationAddParam storeCombinationAddParam) {
         if (CollectionUtils.isEmpty(storeCombinationAddParam.getList())) {
-            throw new ServiceException("添加商品不能为空");
+            throw new ServiceException("the.added.product.cannot.be.empty");
         }
         if (storeCombinationAddParam.getActivityId() == null) {
             return Result.fail(ResultCode.ID_IS_NULL);

+ 2 - 1
mall-service/src/main/java/com/txz/mall/controller/appcontroller/MidFavoriteController.java

@@ -19,6 +19,7 @@ import com.github.pagehelper.PageInfo;
 import com.txz.mall.service.StoreCombinationService;
 import com.txz.mall.service.StoreProductService;
 import com.txz.mall.util.EasyToUseUtil;
+import com.txz.mall.util.I18nUtil;
 import com.txz.mall.web.bo.MidFavoriteBO;
 import com.txz.mall.web.param.BasePageParam;
 import com.txz.mall.web.param.MidFavoriteParam;
@@ -94,7 +95,7 @@ public class MidFavoriteController {
 
 		List<MidFavorite> list = midFavoriteService.findByCondition(condition);
 		if(!CollectionUtils.isEmpty(list)){
-			throw new ServiceException("重复收藏同样的商品");
+			throw new ServiceException(I18nUtil.get("duplicate.favorite.of.the.same.product"));
 		}
 		List<MidFavorite> midFavoriteList = new ArrayList<>();
 

+ 6 - 2
mall-service/src/main/java/com/txz/mall/controller/i18nTestController.java

@@ -4,6 +4,7 @@ import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
 import com.txz.mall.core.Result;
 import com.txz.mall.core.ResultCode;
+import com.txz.mall.core.ServiceException;
 import com.txz.mall.model.StoreCombination;
 import com.txz.mall.util.I18nUtil;
 import io.swagger.annotations.ApiOperation;
@@ -32,8 +33,11 @@ public class i18nTestController {
     public String getMore() {
 
         String lala = I18nUtil.get("order.does.not.exist");
-
-        return lala;
+        System.out.println(I18nUtil.get("product.export.template"));
+//        if(true) {
+//            throw new ServiceException(I18nUtil.get("product.export.template"));
+//        }
+        return I18nUtil.get("product.export.template")+"3";
     }
 
 

+ 2 - 1
mall-service/src/main/java/com/txz/mall/core/AuthService.java

@@ -2,6 +2,7 @@ package com.txz.mall.core;
 
 import cn.hutool.core.date.DateField;
 import cn.hutool.core.date.DateUtil;
+import com.txz.mall.util.I18nUtil;
 import io.jsonwebtoken.Claims;
 import io.jsonwebtoken.ExpiredJwtException;
 import io.jsonwebtoken.Jwts;
@@ -49,7 +50,7 @@ public class AuthService {
             }
             return claims;
         } catch (Exception e) {
-            throw new ServiceException("请先登录");
+            throw new ServiceException(I18nUtil.get("please.log.in.first"));
         }
         
     }

+ 3 - 1
mall-service/src/main/java/com/txz/mall/core/ResultCode.java

@@ -1,5 +1,7 @@
 package com.txz.mall.core;
 
+import com.txz.mall.util.I18nUtil;
+
 /**
  * 响应码枚举,参考HTTP状态码的语义
  */
@@ -27,7 +29,7 @@ public enum ResultCode {
     NAME_IS_NULL("6003","名称不能为空"),
     SEQ_IS_NULL("6004","排序不能为空"),
     LEVEL_IS_NULL("6005","级别不能为空"),
-    USERID_IS_NULL("6006","用户id不能为空"),
+    USERID_IS_NULL("6006", "user id cannot be empty"),
     RESULT_IS_NULL("6007","查询结果为空"),
     TYPE_IS_NULL("6008","类型为空"),
     SQL_ERROR("6009","数据库异常"),

+ 3 - 1
mall-service/src/main/java/com/txz/mall/dubbo/client/OperatingConfigDubboServiceClient.java

@@ -1,6 +1,7 @@
 package com.txz.mall.dubbo.client;
 
 import com.txz.mall.core.ServiceException;
+import com.txz.mall.util.I18nUtil;
 import com.txz.operating.dto.ConfigDTO;
 import com.txz.operating.result.Result;
 import com.txz.operating.service.OperatingConfigDubboService;
@@ -26,7 +27,8 @@ public class OperatingConfigDubboServiceClient {
         if (configByCode.getCode().equals("200") && configByCode.getData() != null) {
             return configByCode.getData();
         } else {
-            throw new ServiceException("获取配置失败");
+
+            throw new ServiceException(I18nUtil.get("failed.to.get.configuration"));
         }
     }
 }

+ 3 - 1
mall-service/src/main/java/com/txz/mall/service/impl/CategoryServiceImpl.java

@@ -8,6 +8,7 @@ import com.txz.mall.core.ServiceException;
 import com.txz.mall.dao.CategoryMapper;
 import com.txz.mall.model.Category;
 import com.txz.mall.service.CategoryService;
+import com.txz.mall.util.I18nUtil;
 import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -54,7 +55,8 @@ public class CategoryServiceImpl extends AbstractService<Category> implements Ca
     public void delete(Long id) {
         //查看是否有子类, 物理删除
         if (getChildCountByPid(id) > 0) {
-            throw new ServiceException("当前分类下有子类,请先删除子类!");
+            String s = I18nUtil.get("there.are.subcategories.under.the.current.category.please.delete.the.subcategories.first");
+            throw new ServiceException(s);
         }
 
         Category category = new Category();

+ 8 - 7
mall-service/src/main/java/com/txz/mall/service/impl/StoreCombinationServiceImpl.java

@@ -14,6 +14,7 @@ import com.txz.mall.service.StoreCombinationService;
 import com.txz.mall.service.StoreFlashActivityService;
 import com.txz.mall.service.StorePinkService;
 import com.txz.mall.service.StoreProductService;
+import com.txz.mall.util.I18nUtil;
 import lombok.AllArgsConstructor;
 import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
@@ -45,7 +46,7 @@ public class StoreCombinationServiceImpl extends AbstractService<StoreCombinatio
     public void addActivityProduct(List<StoreCombination> list, Long activityId) {
         StoreFlashActivity flashActivity = storeFlashActivityService.findById(activityId);
         if (flashActivity == null || flashActivity.getIsDelete().equals(1)) {
-            throw new ServiceException("找不到对应的活动");
+            throw new ServiceException(I18nUtil.get("cannot.find.the.corresponding.activity"));
         }
         FlashActivityVO activityVO = JSONObject.parseObject(flashActivity.getContent(), FlashActivityVO.class);
         String idsStr = list.stream()
@@ -121,7 +122,7 @@ public class StoreCombinationServiceImpl extends AbstractService<StoreCombinatio
         criteria.andEqualTo("isShow", 1);
         List<StoreCombination> combinationList = findByCondition(condition);
         if (CollUtil.isEmpty(combinationList)) {
-            throw new ServiceException("拼团商品不存在或未开启");
+            throw new ServiceException(I18nUtil.get("group.buying.product.does.not.exist.or.is.not.activated"));
         }
         return combinationList.get(0);
     }
@@ -133,7 +134,7 @@ public class StoreCombinationServiceImpl extends AbstractService<StoreCombinatio
     public synchronized void operationStock(Long id, Integer num, String type) {
         StoreCombination combination = findById(id);
        if(ObjectUtils.isEmpty(combination)){
-           throw new ServiceException("拼团活动不存在id:" + id);
+           throw new ServiceException(I18nUtil.get("group.buying.activity.does.not.exist.id") + id);
        }
 
         StoreCombination storeCombinationForUpdate = new StoreCombination();
@@ -143,7 +144,7 @@ public class StoreCombinationServiceImpl extends AbstractService<StoreCombinatio
             int stock = combination.getStock() + num;
             int quota = combination.getQuota() + num;
             if(sales<0){
-                throw new ServiceException("拼团活动m_store_combination销量扣减为负数id:"+id);
+                throw new ServiceException(I18nUtil.get("the.sales.deduction.of.group.buying.activity.m_store_combination.is.negative.id")+id);
             }
 
             storeCombinationForUpdate.setSales(sales);
@@ -156,10 +157,10 @@ public class StoreCombinationServiceImpl extends AbstractService<StoreCombinatio
             int stock = combination.getStock() - num;
             int quota = combination.getQuota() - num;
             if(stock<0){
-                throw new ServiceException("拼团活动m_store_combination.stock扣减为负数id:"+id);
+                throw new ServiceException(I18nUtil.get("the.stock.deduction.of.group.buying.activity.m_store_combination.is.negative.id")+id);
             }
             if(quota<0){
-                throw new ServiceException("拼团活动m_store_combination.quota扣减为负数id:"+id);
+                throw new ServiceException(I18nUtil.get("the.quota.deduction.of.group.buying.activity.m_store_combination.is.negative.id")+id);
             }
 
             storeCombinationForUpdate.setSales(sales);
@@ -172,7 +173,7 @@ public class StoreCombinationServiceImpl extends AbstractService<StoreCombinatio
         example.createCriteria().andEqualTo("id",id).andEqualTo("version",combination.getVersion());
         int i = storeCombinationMapper.updateByConditionSelective(storeCombinationForUpdate, example);
         if(!(i==1)){
-            throw new ServiceException("StoreCombination库存操作失败id:"+id);
+            throw new ServiceException(I18nUtil.get("storecombination.inventory.operation.failed.id")+id);
         }
 
     }

+ 4 - 2
mall-service/src/main/java/com/txz/mall/service/impl/StoreFlashActivityServiceImpl.java

@@ -12,6 +12,7 @@ import com.txz.mall.model.StoreFlashActivity;
 import com.txz.mall.service.StoreCombinationService;
 import com.txz.mall.service.StoreFlashActivityService;
 import com.txz.mall.util.EasyToUseUtil;
+import com.txz.mall.util.I18nUtil;
 import dto.StoreFlashActivityDTO;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.BeanUtils;
@@ -82,7 +83,8 @@ public class StoreFlashActivityServiceImpl extends AbstractService<StoreFlashAct
 
         StoreFlashActivity storeFlashActivityOri = findById(dto.getId());
         if(ObjectUtils.isEmpty(storeFlashActivityOri)){
-            throw new ServiceException("活动不存在id:"+storeFlashActivityOri.getId());
+            String s = I18nUtil.get("activity.does.not.exist.id");
+            throw new ServiceException(s+storeFlashActivityOri.getId());
         }
 //        FlashActivityVO activityVOOri = new FlashActivityVO();
 //        //数据库中的现有数据
@@ -175,7 +177,7 @@ public class StoreFlashActivityServiceImpl extends AbstractService<StoreFlashAct
 
         StoreFlashActivity storeFlashActivityOri = findById(storeFlashActivity.getId());
         if(ObjectUtils.isEmpty(storeFlashActivityOri)){
-            throw new ServiceException("活动不存在id:"+storeFlashActivityOri.getId());
+            throw new ServiceException(I18nUtil.get("activity.does.not.exist.id")+storeFlashActivityOri.getId());
         }
 
         JSONObject tokenUser = UserUtil.getTokenUser(null);

+ 87 - 89
mall-service/src/main/java/com/txz/mall/service/impl/StoreOrderServiceImpl.java

@@ -32,10 +32,7 @@ import com.txz.mall.enums.PinkOrderStatusEnum;
 import com.txz.mall.enums.StorePinkStatusEnum;
 import com.txz.mall.model.*;
 import com.txz.mall.service.*;
-import com.txz.mall.util.EasyExcelUtil;
-import com.txz.mall.util.EasyToUseUtil;
-import com.txz.mall.util.OrderStateMachine;
-import com.txz.mall.util.OrderUtils;
+import com.txz.mall.util.*;
 import dto.*;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -119,7 +116,7 @@ public class StoreOrderServiceImpl extends AbstractService<StoreOrder> implement
     //    public void goOpen(String orderId) {
     //        StoreOrder storeOrder = findBy("orderId", orderId);
     //        if (storeOrder == null) {
-    //            throw new ServiceException("订单不存在");
+    //            throw new ServiceException(I18nUtil.get("order.does.not.exist"));
     //        }
     //        StorePink storePink = new StorePink();
 
@@ -177,7 +174,8 @@ public class StoreOrderServiceImpl extends AbstractService<StoreOrder> implement
     public void goOpen(String orderId) {
         StoreOrder storeOrder = findBy("orderId", orderId);
         if (storeOrder == null) {
-            throw new ServiceException("订单不存在");
+            String s = I18nUtil.get("order.does.not.exist");
+            throw new ServiceException(s);
         }
         UserDTO user = userDubboServiceClient.getUser(storeOrder.getUid());
         StorePink storePink = new StorePink();
@@ -246,7 +244,7 @@ public class StoreOrderServiceImpl extends AbstractService<StoreOrder> implement
     //        if (dto.getPinkId() != null) {
     //            StorePink teamPink = storePinkService.findById(dto.getPinkId());
     //            if (ObjectUtil.isNull(teamPink) || teamPink.getIsRefund().equals(1)) {
-    //                throw new ServiceException("对应的拼团不存在");
+    //                throw new ServiceException(I18nUtil.get("the.corresponding.group.buying.does.not.exist"));
     //            }
     //            Condition condition = new Condition(StoreCombination.class);
     //            Example.Criteria criteria = condition.createCriteria();
@@ -258,7 +256,7 @@ public class StoreOrderServiceImpl extends AbstractService<StoreOrder> implement
     //
     //            List<StoreCombination> combinationList = storeCombinationService.findByCondition(condition);
     //            if (CollUtil.isEmpty(combinationList)) {
-    //                throw new ServiceException("拼团商品不存在或未开启");
+    //                throw new ServiceException(I18nUtil.get("group.buying.product.does.not.exist.or.is.not.activated"));
     //            }
     //
     //            Condition pinkCondition = new Condition(StorePink.class);
@@ -269,7 +267,7 @@ public class StoreOrderServiceImpl extends AbstractService<StoreOrder> implement
     //            List<StorePink> pinkList = storePinkService.findByCondition(pinkCondition);
     //            int count = teamPink.getPeople() - (CollUtil.isEmpty(pinkList) ? 0 : pinkList.size());
     //            if (count < 1) {
-    //                throw new ServiceException("拼团已满");
+    //                throw new ServiceException(I18nUtil.get("group.buying.is.full"));
     //            }
     //            List<Long> uidList = pinkList.stream().map(StorePink::getUid).collect(Collectors.toList());
     //            if (uidList.contains(dto.getUserId())) {
@@ -290,7 +288,7 @@ public class StoreOrderServiceImpl extends AbstractService<StoreOrder> implement
         if (dto.getPinkId() != null) {
             StorePink teamPink = storePinkService.findById(dto.getPinkId());
             if (ObjectUtil.isNull(teamPink) || teamPink.getIsRefund().equals(1)) {
-                throw new ServiceException("对应的拼团不存在");
+                throw new ServiceException(I18nUtil.get("the.corresponding.group.buying.does.not.exist"));
             }
             Condition condition = new Condition(StoreCombination.class);
             Example.Criteria criteria = condition.createCriteria();
@@ -302,7 +300,7 @@ public class StoreOrderServiceImpl extends AbstractService<StoreOrder> implement
 
             List<StoreCombination> combinationList = storeCombinationService.findByCondition(condition);
             if (CollUtil.isEmpty(combinationList)) {
-                throw new ServiceException("拼团商品不存在或未开启");
+                throw new ServiceException(I18nUtil.get("group.buying.product.does.not.exist.or.is.not.activated"));
             }
 
             Condition pinkCondition = new Condition(StorePink.class);
@@ -313,13 +311,13 @@ public class StoreOrderServiceImpl extends AbstractService<StoreOrder> implement
             List<StorePink> pinkList = storePinkService.findByCondition(pinkCondition);
             int count = teamPink.getPeople() - (CollUtil.isEmpty(pinkList) ? 0 : pinkList.size());
             if (count < 1) {
-                throw new ServiceException("拼团已满");
+                throw new ServiceException(I18nUtil.get("group.buying.is.full"));
             }
 
             //记得将重复拼团校验放开
             List<Long> uidList = pinkList.stream().map(StorePink::getUid).collect(Collectors.toList());
             if (uidList.contains(dto.getUserId())) {
-                throw new ServiceException("重复拼团");
+                throw new ServiceException(I18nUtil.get("duplicate.group.buying"));
             }
             joinGroup(teamPink, dto, count, pinkList.size());
         }
@@ -388,7 +386,7 @@ public class StoreOrderServiceImpl extends AbstractService<StoreOrder> implement
         // 找一个最快能成团的
         StoreCombination storeCombination = storeCombinationService.findById(dto.getCid());
         if (ObjectUtil.isNull(storeCombination) || storeCombination.getIsDelete().equals(1)) {
-            throw new ServiceException("对应拼团商品不存在");
+            throw new ServiceException(I18nUtil.get("the.corresponding.group.buying.product.does.not.exist"));
         }
         //这里要排除掉团长未付款的拼团
 
@@ -405,7 +403,7 @@ public class StoreOrderServiceImpl extends AbstractService<StoreOrder> implement
 
 
         if (CollUtil.isEmpty(pinkSummaryList)) {
-            throw new ServiceException("暂时没有可加入的团");
+            throw new ServiceException(I18nUtil.get("there.is.no.group.to.join.temporarily"));
         }
 
         List<Long> storePinkSummaryId = pinkSummaryList.stream().map(StorePinkSummary::getId).collect(Collectors.toList());
@@ -435,7 +433,7 @@ public class StoreOrderServiceImpl extends AbstractService<StoreOrder> implement
         log.info("availableGroups:" + availableGroups.toString());
         // 如果没有用户未参与的拼团,直接返回,让调用方处理创建新团的逻辑
         if (CollUtil.isEmpty(availableGroups)) {
-            throw new ServiceException("所有的团均已参加");
+            throw new ServiceException(I18nUtil.get("all.groups.have.been.joined"));
         }
         // 找出最多value对应的key
         //        List<StorePink> maxPinkList = availableGroups.stream()
@@ -459,7 +457,7 @@ public class StoreOrderServiceImpl extends AbstractService<StoreOrder> implement
                     dto.setSpsId(pink.getSpsId()); //拼团汇总表id
                     joinGroup(pink, dto, count, pinkList.size());
                 } else {
-                    throw new ServiceException("拼团人数超员请重新发起拼团 pinkid:" + pink.getId());
+                    throw new ServiceException(I18nUtil.get("the.number.of.group.buying.participants.exceeds.the.limit.please.initiate.group.buying.again.pinkid") + pink.getId());
                 }
             }
         }
@@ -535,14 +533,14 @@ public class StoreOrderServiceImpl extends AbstractService<StoreOrder> implement
     @Override
     public void batchDelivery(List<StoreOrderDeliveryDTO> dto) {
         if (CollectionUtils.isEmpty(dto)) {
-            throw new ServiceException("批量发货入参为空dto:" + dto);
+            throw new ServiceException(I18nUtil.get("batch.delivery.input.parameter.is.empty.dto") + dto);
         }
         List<String> orderIdList = dto.stream().map(StoreOrderDeliveryDTO::getOrderId).collect(Collectors.toList());
         if (CollectionUtils.isEmpty(orderIdList)) {
-            throw new ServiceException("批量发货订单orderid为空orderIdList:" + orderIdList);
+            throw new ServiceException(I18nUtil.get("batch.delivery.order.orderid.is.empty.orderidlist") + orderIdList);
         }
         if (dto.size() > 500) {
-            throw new ServiceException("1次批量发货订单不要超过500条");
+            throw new ServiceException(I18nUtil.get("do.not.exceed.500.orders.for.one.batch.delivery"));
         }
 
         Condition condition = new Condition(StoreOrder.class);
@@ -551,14 +549,14 @@ public class StoreOrderServiceImpl extends AbstractService<StoreOrder> implement
         criteria.andEqualTo("isDelete", 0);
         List<StoreOrder> storeOrderList = findByCondition(condition);
         if (CollectionUtils.isEmpty(storeOrderList)) {
-            throw new ServiceException("批量发货订单订单列表不存在:" + storeOrderList);
+            throw new ServiceException(I18nUtil.get("order.list.for.batch.shipment.does.not.exist") + storeOrderList);
         }
         Map<String, StoreOrderDeliveryDTO> storeOrderDeliveryMap = dto.stream().collect(Collectors.toMap(StoreOrderDeliveryDTO::getOrderId, a -> a, (b, c) -> b));
         for (StoreOrder storeOrder : storeOrderList) {
             StoreOrderDeliveryDTO storeOrderDeliveryDTO = storeOrderDeliveryMap.get(storeOrder.getOrderId());
             PinkOrderStatusEnum pinkOrderStatusEnum = OrderStateMachine.handleEvent(storeOrder, OrderEventsEnum.GROUP_PURCHASE_DELIVER, null);
             if (ObjectUtils.isEmpty(pinkOrderStatusEnum)) {
-                throw new ServiceException("当前状态不支持发货storeOrder:" + storeOrder.toString());
+                throw new ServiceException(I18nUtil.get("the.current.status.does.not.support.delivery.storeorder") + storeOrder.toString());
             }
             Date date = DateUtil.date();
             StoreOrder storeOrderForUpdate = new StoreOrder();
@@ -587,15 +585,15 @@ public class StoreOrderServiceImpl extends AbstractService<StoreOrder> implement
     @Override
     public String preOrder(PreOrderRequest request) {
         if (CollUtil.isEmpty(request.getOrderDetails())) {
-            throw new ServiceException("预下单订单详情列表不能为空");
+            throw new ServiceException(I18nUtil.get("the.pre-order.details.list.cannot.be.empty"));
         }
         Long userId = request.getUserId();
         if (userId == null) {
-            throw new ServiceException("用户id不能为空");
+            throw new ServiceException(I18nUtil.get("user.id.cannot.be.empty"));
         }
         UserDTO user = userDubboServiceClient.getUser(userId);
         if (ObjectUtils.isEmpty(user)) {
-            throw new ServiceException("用户为空userId:" + userId);
+            throw new ServiceException(I18nUtil.get("user.is.empty.userid") + userId);
         }
         // 校验预下单商品信息
         OrderInfoVO orderInfoVo = validatePreOrderRequest(request, user);
@@ -789,35 +787,35 @@ public class StoreOrderServiceImpl extends AbstractService<StoreOrder> implement
             } else {
                 // 普通商品
                 if (ObjectUtil.isNull(detailRequest.getProductId())) {
-                    throw new ServiceException("商品编号不能为空");
+                    throw new ServiceException(I18nUtil.get("product.number.cannot.be.empty"));
                 }
                 if (ObjectUtil.isNull(detailRequest.getAttrValueId())) {
-                    throw new ServiceException("商品规格属性值不能为空");
+                    throw new ServiceException(I18nUtil.get("product.specification.attribute.value.cannot.be.empty"));
                 }
                 if (ObjectUtil.isNull(detailRequest.getProductNum()) || detailRequest.getProductNum() < 0) {
-                    throw new ServiceException("购买数量必须大于0");
+                    throw new ServiceException(I18nUtil.get("the.purchase.quantity.must.be.greater.than.0"));
                 }
                 // 查询商品信息
                 StoreProduct storeProduct = storeProductService.findById(detailRequest.getProductId());
                 if (ObjectUtil.isNull(storeProduct)) {
-                    throw new ServiceException("商品信息不存在,请刷新后重新选择");
+                    throw new ServiceException(I18nUtil.get("product.information.does.not.exist.please.refresh.and.reselect"));
                 }
                 if (storeProduct.getIsDelete().equals(1)) {
-                    throw new ServiceException("商品已删除,请刷新后重新选择");
+                    throw new ServiceException(I18nUtil.get("the.product.has.been.deleted.please.refresh.and.reselect"));
                 }
                 if (storeProduct.getIsShow().equals(0)) {
-                    throw new ServiceException("商品已下架,请刷新后重新选择");
+                    throw new ServiceException(I18nUtil.get("the.product.has.been.removed.from.the.shelves.please.refresh.and.reselect"));
                 }
                 if (storeProduct.getStock() < detailRequest.getProductNum()) {
-                    throw new ServiceException("商品库存不足,请刷新后重新选择");
+                    throw new ServiceException(I18nUtil.get("insufficient.product.inventory.please.refresh.and.reselect"));
                 }
                 // 查询商品规格属性值信息
                 ProductAttrValue attrValue = productAttrValueService.getByIdAndProductIdAndType(detailRequest.getAttrValueId(), detailRequest.getProductId(), Constants.PRODUCT_TYPE_NORMAL);
                 if (ObjectUtil.isNull(attrValue)) {
-                    throw new ServiceException("商品规格信息不存在,请刷新后重新选择");
+                    throw new ServiceException(I18nUtil.get("product.specification.information.does.not.exist.please.refresh.and.reselect"));
                 }
                 if (attrValue.getStock() < detailRequest.getProductNum()) {
-                    throw new ServiceException("商品规格库存不足,请刷新后重新选择");
+                    throw new ServiceException(I18nUtil.get("insufficient.product.specification.inventory.please.refresh.and.reselect"));
                 }
 //                SystemUserLevel userLevel = null;
 //                if (user.getLevel() > 0) {
@@ -863,11 +861,11 @@ public class StoreOrderServiceImpl extends AbstractService<StoreOrder> implement
         Long combinationId = detailRequest.getCId();
         StoreCombination storeCombination = storeCombinationService.getByIdException(combinationId);
         if (storeCombination.getStock().equals(0) || detailRequest.getProductNum() > storeCombination.getStock()) {
-            throw new ServiceException("拼团商品库存不足");
+            throw new ServiceException(I18nUtil.get("insufficient.group.buying.product.inventory"));
         }
         ProductAttrValue combinationAttrValue = productAttrValueService.getByIdAndProductIdAndType(detailRequest.getAttrValueId(), detailRequest.getProductId(), Constants.PRODUCT_TYPE_PINGTUAN);
         if (ObjectUtil.isNull(combinationAttrValue)) {
-            throw new ServiceException("拼团商品规格不存在");
+            throw new ServiceException(I18nUtil.get("group.buying.product.specification.does.not.exist"));
         }
         commonValidateCombination(storeCombination, combinationAttrValue, user, detailRequest.getProductNum());
 
@@ -899,10 +897,10 @@ public class StoreOrderServiceImpl extends AbstractService<StoreOrder> implement
         // 判断拼团时间段
         Date date = new Date();
         if (date.before(storeCombination.getStartTime())) {
-            throw new ServiceException("拼团商品活动未开始");
+            throw new ServiceException(I18nUtil.get("group.buying.product.activity.has.not.started"));
         }
         if (date.after(storeCombination.getStopTime())) {
-            throw new ServiceException("拼团商品已过期");
+            throw new ServiceException(I18nUtil.get("group.buying.product.has.expired"));
         }
         // 判断购买数量
         //        if (productNum > storeCombination.getOnceNum()) {
@@ -910,23 +908,23 @@ public class StoreOrderServiceImpl extends AbstractService<StoreOrder> implement
         //        }
 
         if (combinationAttrValue.getStock() <= 0 || productNum > combinationAttrValue.getStock()) {
-            throw new ServiceException("拼团商品规格库存不足");
+            throw new ServiceException(I18nUtil.get("insufficient.inventory.of.group.buying.product.specifications"));
         }
         // 普通商品部分判断
         StoreProduct product = storeProductService.findById(storeCombination.getProductId());
         if (ObjectUtil.isNull(product) || product.getIsDelete().equals(1)) {
-            throw new ServiceException("拼团主商品不存在");
+            throw new ServiceException(I18nUtil.get("main.group.buying.product.does.not.exist"));
         }
         if (product.getStock().equals(0) || productNum > product.getStock()) {
-            throw new ServiceException("拼团主商品库存不足");
+            throw new ServiceException(I18nUtil.get("insufficient.inventory.of.group.buying.main.product"));
         }
         // 主商品sku
         ProductAttrValue productAttrValue = productAttrValueService.getByProductIdAndSkuAndType(storeCombination.getProductId(), combinationAttrValue.getSuk(), Constants.PRODUCT_TYPE_PINGTUAN);
         if (ObjectUtil.isNull(productAttrValue)) {
-            throw new ServiceException("拼团主商品规格不存在");
+            throw new ServiceException(I18nUtil.get("group.buying.main.product.specification.does.not.exist"));
         }
         if (productAttrValue.getStock() <= 0 || productNum > productAttrValue.getStock()) {
-            throw new ServiceException("拼团主商品规格库存不足");
+            throw new ServiceException(I18nUtil.get("insufficient.inventory.of.group.buying.main.product.specifications"));
         }
 
         // 用户参与活动的次数
@@ -959,7 +957,7 @@ public class StoreOrderServiceImpl extends AbstractService<StoreOrder> implement
 
         ConfigMemberDTO configByLevel = userDubboServiceClient.getConfigByLevel(user.getVipLevel());
         if (ObjectUtils.isEmpty(configByLevel)) {
-            throw new ServiceException("用户等级对应的购买次数配置不存在");
+            throw new ServiceException(I18nUtil.get("the.purchase.times.configuration.corresponding.to.the.user.level.does.not.exist"));
         }
 
         if (CollUtil.isNotEmpty(storeOrderList)) {
@@ -970,7 +968,7 @@ public class StoreOrderServiceImpl extends AbstractService<StoreOrder> implement
 //            }
             int payNum = storeOrderList.stream().mapToInt(StoreOrder::getTotalNum).sum();
             if (configByLevel.getJoinedGroupsNo() < payNum) {
-                throw new ServiceException("您已达到该商品拼团活动上限");
+                throw new ServiceException(I18nUtil.get("you.have.reached.the.upper.limit.of.the.group.buying.activity.for.this.product"));
             }
 //            if ((payNum + productNum) > storeCombination.getNum()) {
 //                throw new ServiceException("超过该商品拼团活动您的购买上限");
@@ -989,7 +987,7 @@ public class StoreOrderServiceImpl extends AbstractService<StoreOrder> implement
         String key = "user_order:" + request.getPreOrderNo();
         boolean exists = redisUtil.hasKey(key);
         if (!exists) {
-            throw new ServiceException("预下单订单不存在");
+            throw new ServiceException(I18nUtil.get("pre-order.does.not.exist"));
         }
         String orderVoString = redisUtil.get(key).toString();
         OrderInfoVO orderInfoVo = JSONObject.parseObject(orderVoString, OrderInfoVO.class);
@@ -1464,7 +1462,7 @@ public class StoreOrderServiceImpl extends AbstractService<StoreOrder> implement
         String key = "user_order:" + preOrderNo;
         boolean exists = redisUtil.hasKey(key);
         if (!exists) {
-            throw new ServiceException("预下单订单不存在");
+            throw new ServiceException(I18nUtil.get("pre-order.does.not.exist"));
         }
         String orderVoString = redisUtil.get(key).toString();
         OrderInfoVO orderInfoVo = JSONObject.parseObject(orderVoString, OrderInfoVO.class);
@@ -1482,7 +1480,7 @@ public class StoreOrderServiceImpl extends AbstractService<StoreOrder> implement
         String key = "user_order:" + request.getPreOrderNo();
         boolean exists = redisUtil.hasKey(key);
         if (!exists) {
-            throw new ServiceException("预下单订单不存在");
+            throw new ServiceException(I18nUtil.get("pre-order.does.not.exist"));
         }
         String orderVoString = redisUtil.get(key).toString();
         OrderInfoVO orderInfoVo = JSONObject.parseObject(orderVoString, OrderInfoVO.class);
@@ -1505,11 +1503,11 @@ public class StoreOrderServiceImpl extends AbstractService<StoreOrder> implement
         String userAddressStr = "";
         if (request.getAddressId() != null) {
             if (request.getAddressId() <= 0) {
-                throw new ServiceException("请选择收货地址");
+                throw new ServiceException(I18nUtil.get("please.select.a.delivery.address"));
             }
             UserAddress userAddress = userAddressService.findById(request.getAddressId());
             if (ObjectUtil.isNull(userAddress) || userAddress.getIsDelete().equals(1)) {
-                throw new ServiceException("收货地址有误");
+                throw new ServiceException(I18nUtil.get("delivery.address.is.incorrect"));
             }
         }
         //        UserAddress userAddress = userAddressService.getDefaultByUid(user.getId());
@@ -1692,16 +1690,16 @@ public class StoreOrderServiceImpl extends AbstractService<StoreOrder> implement
     public Boolean goPay(GoPinkDTO dto) {
         StoreOrder storeOrder = findBy("orderId", dto.getOrderId());
         if (ObjectUtils.isEmpty(storeOrder)) {
-            throw new ServiceException("订单为空orderId:" + dto.getOrderId());
+            throw new ServiceException(I18nUtil.get("order.is.empty.orderid") + dto.getOrderId());
         }
         if (storeOrder.getStatus().equals(PinkOrderStatusEnum.GROUP_ORDER_PAID.getKey())) {
-            throw new ServiceException("订单已支付orderId:" + dto.getOrderId());
+            throw new ServiceException(I18nUtil.get("order.has.been.paid.orderid") + dto.getOrderId());
         }
 
         PinkOrderStatusEnum pinkOrderStatusEnum = OrderStateMachine.handleEvent(storeOrder, OrderEventsEnum.GROUP_PURCHASE_PAY, null);
 
         if (ObjectUtils.isEmpty(pinkOrderStatusEnum)) {
-            throw new ServiceException("当前状态不支持去支持去支付orderId:" + dto.getOrderId());
+            throw new ServiceException(I18nUtil.get("current.status.does.not.support.payment.orderid") + dto.getOrderId());
         }
 
         log.info("accountDubboServiceClient.getWalletAccount");
@@ -1714,7 +1712,7 @@ public class StoreOrderServiceImpl extends AbstractService<StoreOrder> implement
                 throw new ServiceException(ResultCode.INSUFFICIENT_BALANCE);
             }
         } else {
-            throw new ServiceException("获取用户钱包账户失败");
+            throw new ServiceException(I18nUtil.get("failed.to.obtain.user.wallet.account"));
         }
 
 
@@ -1730,7 +1728,7 @@ public class StoreOrderServiceImpl extends AbstractService<StoreOrder> implement
             Result result1 = accountDubboServiceClient.openGroup(openParam);
             log.info("accountDubboServiceClient.openGroup result1" + result1);
             if (!result1.getCode().equals("200")) {
-                throw new ServiceException("支付失败" + result1.getMessage());
+                throw new ServiceException(I18nUtil.get("payment.failed") + result1.getMessage());
             }
             updateOrderStatus(storeOrder.getId(), pinkOrderStatusEnum.getKey());
             log.info("pinkSuccess storeOrder1" + storeOrder);
@@ -1750,7 +1748,7 @@ public class StoreOrderServiceImpl extends AbstractService<StoreOrder> implement
             Result result1 = accountDubboServiceClient.joinGroup(joinParam);
             log.info("accountDubboServiceClient.joinGroup2 result1:" + result1);
             if (!result1.getCode().equals("200")) {
-                throw new ServiceException("支付失败" + result1.getMessage());
+                throw new ServiceException(I18nUtil.get("payment.failed") + result1.getMessage());
             }
             updateOrderStatus(storeOrder.getId(), pinkOrderStatusEnum.getKey());
             log.info("storePinkService.pinkSuccess1 :" + storeOrder);
@@ -1786,24 +1784,24 @@ public class StoreOrderServiceImpl extends AbstractService<StoreOrder> implement
 //
 //
         if (ObjectUtils.isEmpty(storeOrder)) {
-            throw new ServiceException("订单主动退款时订单不存在id:" + id);
+            throw new ServiceException(I18nUtil.get("order.does.not.exist.when.initiating.active.refund.id") + id);
         }
 
         PinkOrderStatusEnum pinkOrderStatusEnum = OrderStateMachine.handleEvent(storeOrder, OrderEventsEnum.GROUP_PURCHASE_FAIL, null);
         if (ObjectUtils.isEmpty(pinkOrderStatusEnum)) {
-            throw new ServiceException("当前状态不支持退款关闭id:" + id);
+            throw new ServiceException(I18nUtil.get("current.status.does.not.support.refund.cancellation.id") + id);
         }
 
         StorePink storePink = storePinkService.findById(storeOrder.getPinkId());
         Integer status = 0;
         //团长在未成团时不能退款
         if (storePink.getKId().equals(status) && storePink.getStatus().equals(StorePinkStatusEnum.NOT_DRAWN.getKey())) {
-            throw new ServiceException("当前成员是团长,且该团未开奖,暂时不支持退款:" + id);
+            throw new ServiceException(I18nUtil.get("current.member.is.the.group.leader.and.the.group.has.not.drawn.a.prize.refund.is.temporarily.not.supported") + id);
         }
 
         // 批量退款接口调用 这块要前置,退款成功后再去改状态
         if (ObjectUtils.isEmpty(storePink)) {
-            throw new ServiceException("拼团时间过期关闭时时拼团信息不存在ID:" + storeOrder.getPinkId());
+            throw new ServiceException(I18nUtil.get("group.buying.information.does.not.exist.when.closing.due.to.group.buying.timeout.id") + storeOrder.getPinkId());
         }
 
         Date date = new Date();
@@ -1818,7 +1816,7 @@ public class StoreOrderServiceImpl extends AbstractService<StoreOrder> implement
         Result result = accountDubboServiceClient.cancelGroup(param);
         boolean equals = result.getCode().equals("200");
         if (!equals) {
-            throw new ServiceException("退款失败请重新发起");
+            throw new ServiceException(I18nUtil.get("refund.failed.please.initiate.again"));
         }
         updateOrderStatus(storeOrder.getId(), pinkOrderStatusEnum.getKey());
         //订单状态回退
@@ -1866,7 +1864,7 @@ public class StoreOrderServiceImpl extends AbstractService<StoreOrder> implement
                 PinkOrderStatusEnum pinkOrderStatusEnum = OrderStateMachine.handleEvent(storeOrder, OrderEventsEnum.GROUP_PURCHASE_CANCEL, null);
 
                 if (ObjectUtils.isEmpty(pinkOrderStatusEnum)) {
-                    throw new ServiceException("当前状态不支持取消");
+                    throw new ServiceException(I18nUtil.get("current.status.does.not.support.cancellation"));
                 }
                 //订单状态回退
                 updateOrderStatus(storeOrder.getId(), pinkOrderStatusEnum.getKey());
@@ -1874,7 +1872,7 @@ public class StoreOrderServiceImpl extends AbstractService<StoreOrder> implement
                 //拼团状态回退
                 StorePink storePink = storePinkService.findById(storeOrder.getPinkId());
                 if (ObjectUtils.isEmpty(storePink)) {
-                    throw new ServiceException("订单取消时拼团信息不存在ID:" + storeOrder.getPinkId());
+                    throw new ServiceException(I18nUtil.get("group.buying.information.does.not.exist.when.canceling.the.order.id") + storeOrder.getPinkId());
                 }
                 StorePink storePinkForUpdate = new StorePink();
                 storePinkForUpdate.setId(storeOrder.getPinkId());
@@ -1895,7 +1893,7 @@ public class StoreOrderServiceImpl extends AbstractService<StoreOrder> implement
 
                 PinkOrderStatusEnum pinkOrderStatusEnum = OrderStateMachine.handleEvent(storeOrder, OrderEventsEnum.GROUP_PURCHASE_FAIL, null);
                 if (ObjectUtils.isEmpty(pinkOrderStatusEnum)) {
-                    throw new ServiceException("当前状态不支持退款关闭");
+                    throw new ServiceException(I18nUtil.get("current.status.does.not.support.refund.cancellation"));
                 }
 
                 //订单状态回退
@@ -1903,7 +1901,7 @@ public class StoreOrderServiceImpl extends AbstractService<StoreOrder> implement
                 StorePink storePink = storePinkService.findById(storeOrder.getPinkId());
 
                 if (ObjectUtils.isEmpty(storePink)) {
-                    throw new ServiceException("主动发起退款时拼团信息不存在ID:" + storeOrder.getPinkId());
+                    throw new ServiceException(I18nUtil.get("group.buying.information.does.not.exist.when.initiating.active.refund.id") + storeOrder.getPinkId());
                 }
 
                 Date date = new Date();
@@ -1918,7 +1916,7 @@ public class StoreOrderServiceImpl extends AbstractService<StoreOrder> implement
                 Result result = accountDubboServiceClient.cancelGroup(param);
                 boolean equals = result.getCode().equals("200");
                 if (!equals) {
-                    throw new ServiceException("退款失败请重新发起orderId:" + storeOrder.getOrderId());
+                    throw new ServiceException(I18nUtil.get("refund.failed.please.initiate.again.orderid") + storeOrder.getOrderId());
                 }
 
                 updateOrderStatus(storeOrder.getId(), pinkOrderStatusEnum.getKey());
@@ -1939,10 +1937,10 @@ public class StoreOrderServiceImpl extends AbstractService<StoreOrder> implement
                 noticeService.addOrderNotice(NoticeEnum.ORDER_GROUP_BUY_FAIL, storeOrder.getOrderId(), storeOrder.getUid());
 
             } else {
-                throw new ServiceException("当前状态不支持退款关闭:id" + id);
+                throw new ServiceException(I18nUtil.get("current.status.does.not.support.refund.cancellationid") + id);
             }
         } catch (Exception e) {
-            log.error("定时任务关单处理失败订单id:" + id, e);
+            log.error(I18nUtil.get("scheduled.task.failed.to.close.the.order.order.id") + id, e);
         }
 
         //如果是已支付状态状态推到拼团失败退款状态
@@ -2003,12 +2001,12 @@ public class StoreOrderServiceImpl extends AbstractService<StoreOrder> implement
     public void cancel(Long id) {
         StoreOrder storeOrder = findById(id);
         if (ObjectUtils.isEmpty(storeOrder)) {
-            throw new ServiceException("订单取消时订单不存在id:" + id);
+            throw new ServiceException(I18nUtil.get("order.does.not.exist.when.canceling.the.order.id") + id);
         }
         PinkOrderStatusEnum pinkOrderStatusEnum = OrderStateMachine.handleEvent(storeOrder, OrderEventsEnum.GROUP_PURCHASE_CANCEL, null);
 
         if (ObjectUtils.isEmpty(pinkOrderStatusEnum)) {
-            throw new ServiceException("当前状态不支持取消");
+            throw new ServiceException(I18nUtil.get("current.status.does.not.support.cancellation"));
         }
 
         //订单状态回退
@@ -2018,7 +2016,7 @@ public class StoreOrderServiceImpl extends AbstractService<StoreOrder> implement
         //拼团状态回退
         StorePink storePink = storePinkService.findById(storeOrder.getPinkId());
         if (ObjectUtils.isEmpty(storePink)) {
-            throw new ServiceException("订单取消时拼团信息不存在ID:" + storeOrder.getPinkId());
+            throw new ServiceException(I18nUtil.get("group.buying.information.does.not.exist.when.canceling.the.order.id") + storeOrder.getPinkId());
         }
         StorePink storePinkForUpdate = new StorePink();
         storePinkForUpdate.setId(storeOrder.getPinkId());
@@ -2075,7 +2073,7 @@ public class StoreOrderServiceImpl extends AbstractService<StoreOrder> implement
                     cancel(storeOrder.getId());
                 }
             } catch (Exception e) {
-                log.error("orderTimeoutAutomaticCancel处理失败", e);
+                log.error(I18nUtil.get("failed.to.process.ordertimeoutautomaticcancel"), e);
             }
 
         }
@@ -2090,7 +2088,7 @@ public class StoreOrderServiceImpl extends AbstractService<StoreOrder> implement
         String suffix = FileUtil.extName(name);
         log.info("获取到的文件名为----->{},后缀为----->{},入参------->{}", name, suffix);
         if (!"xlsx".equals(suffix) && !"xls".equals(suffix)) {
-            throw new ServiceException("请传入xlsx或xls文档格式文件");
+            throw new ServiceException(I18nUtil.get("please.upload.files.in.xlsx.or.xls.format"));
         }
         try {
             List<StoreOrderExportPO> list = EasyExcelUtil.syncReadModel(file.getInputStream(),
@@ -2099,7 +2097,7 @@ public class StoreOrderServiceImpl extends AbstractService<StoreOrder> implement
                     1);
 
             if (CollUtil.isEmpty(list)) {
-                throw new ServiceException("请填写内容后再提交!");
+                throw new ServiceException(I18nUtil.get("please.fill.in.the.content.before.submitting"));
             }
 
             List<StoreOrderExportPO> errors = new ArrayList<>();
@@ -2107,13 +2105,13 @@ public class StoreOrderServiceImpl extends AbstractService<StoreOrder> implement
                 StoreOrder storeOrder = this.findById(po.getId());
                 PinkOrderStatusEnum pinkOrderStatusEnum = OrderStateMachine.handleEvent(storeOrder, OrderEventsEnum.GROUP_PURCHASE_DELIVER, null);
                 if (ObjectUtil.isEmpty(pinkOrderStatusEnum)) {
-                    po.setErrorMsg("当前状态不支持发货");
+                    po.setErrorMsg(I18nUtil.get("current.status.does.not.support.shipment"));
                     errors.add(po);
                     continue;
                 }
 
                 if (StrUtil.isBlank(po.getDeliveryId()) || StrUtil.isBlank(po.getDeliveryName())) {
-                    po.setErrorMsg("快递单号或快递公司不能为空");
+                    po.setErrorMsg(I18nUtil.get("courier.tracking.number.or.courier.company.cannot.be.empty"));
                     errors.add(po);
                     continue;
                 }
@@ -2236,7 +2234,7 @@ public class StoreOrderServiceImpl extends AbstractService<StoreOrder> implement
             StoreCombination storeCombination = storeCombinationService.getByIdException(combinationId);
             ProductAttrValue combinationAttrValue = productAttrValueService.getByIdAndProductIdAndType(detailVo.getAttrValueId(), detailVo.getProductId(), Constants.PRODUCT_TYPE_PINGTUAN);
             if (ObjectUtil.isNull(combinationAttrValue)) {
-                throw new ServiceException("拼团商品规格不存在");
+                throw new ServiceException(I18nUtil.get("group.buying.product.specification.does.not.exist"));
             }
             MyRecord combinationRecord = commonValidateCombination(storeCombination, combinationAttrValue, user, detailVo.getPayNum());
             ProductAttrValue productAttrValue = combinationRecord.get("productAttrValue");
@@ -2256,24 +2254,24 @@ public class StoreOrderServiceImpl extends AbstractService<StoreOrder> implement
             // 查询商品信息
             StoreProduct storeProduct = storeProductService.findById(e.getProductId());
             if (ObjectUtil.isNull(storeProduct)) {
-                throw new ServiceException("购买的商品信息不存在");
+                throw new ServiceException(I18nUtil.get("purchased.product.information.does.not.exist"));
             }
             if (storeProduct.getIsDelete().equals(1)) {
-                throw new ServiceException("购买的商品已删除");
+                throw new ServiceException(I18nUtil.get("purchased.product.has.been.deleted"));
             }
             if (storeProduct.getIsShow().equals(0)) {
-                throw new ServiceException("购买的商品已下架");
+                throw new ServiceException(I18nUtil.get("purchased.product.has.been.removed.from.shelves"));
             }
             if (storeProduct.getStock().equals(0) || e.getPayNum() > storeProduct.getStock()) {
-                throw new ServiceException("购买的商品库存不足");
+                throw new ServiceException(I18nUtil.get("insufficient.inventory.for.the.purchased.product"));
             }
             // 查询商品规格属性值信息
             ProductAttrValue attrValue = productAttrValueService.getByIdAndProductIdAndType(e.getAttrValueId(), e.getProductId(), Constants.PRODUCT_TYPE_NORMAL);
             if (ObjectUtil.isNull(attrValue)) {
-                throw new ServiceException("购买的商品规格信息不存在");
+                throw new ServiceException(I18nUtil.get("specification.information.of.the.purchased.product.does.not.exist"));
             }
             if (attrValue.getStock() < e.getPayNum()) {
-                throw new ServiceException("购买的商品库存不足");
+                throw new ServiceException(I18nUtil.get("insufficient.inventory.for.the.purchased.product"));
             }
             MyRecord record = new MyRecord();
             record.set("productId", e.getProductId());
@@ -2299,7 +2297,7 @@ public class StoreOrderServiceImpl extends AbstractService<StoreOrder> implement
         List<StoreOrder> byCondition = findByCondition(conditionStoreOrder);
 
         if (org.springframework.util.CollectionUtils.isEmpty(byCondition)) {
-            throw new ServiceException("订单不存在OrderId:" + storeOrder.getOrderId());
+            throw new ServiceException(I18nUtil.get("order.does.not.exist.orderid") + storeOrder.getOrderId());
         }
         StoreOrder storeOrderOri = byCondition.get(0);
 
@@ -2310,7 +2308,7 @@ public class StoreOrderServiceImpl extends AbstractService<StoreOrder> implement
         criteriaStorePink.andEqualTo("isDelete", 0);
         List<StorePink> storePinks = storePinkMapper.selectByCondition(conditionStorePink);
         if (CollectionUtils.isEmpty(storePinks)) {
-            throw new ServiceException("拼团数据不存在:" + storeOrder.getId());
+            throw new ServiceException(I18nUtil.get("group.buying.data.does.not.exist") + storeOrder.getId());
         }
         StorePink storePink = storePinks.get(0);
         Integer winner = 1;
@@ -2319,7 +2317,7 @@ public class StoreOrderServiceImpl extends AbstractService<StoreOrder> implement
         if (equals1 && equals) {
             PinkOrderStatusEnum pinkOrderStatusEnum = OrderStateMachine.handleEvent(storeOrderOri, OrderEventsEnum.GROUP_PURCHASE_WIN, null);
             if (ObjectUtils.isEmpty(pinkOrderStatusEnum)) {
-                throw new ServiceException("当前订单状态不允许推进到待发货order.id:" + storeOrder.getId());
+                throw new ServiceException(I18nUtil.get("current.order.status.does.not.allow.progression.to.pending.shipment.orderid") + storeOrder.getId());
             }
             storeOrder.setStatus(pinkOrderStatusEnum.getKey());
             StorePink storePinkForUpdate = new StorePink();
@@ -2357,7 +2355,7 @@ public class StoreOrderServiceImpl extends AbstractService<StoreOrder> implement
                 for (StoreOrder storeOrder : storeOrderList) {
                     PinkOrderStatusEnum pinkOrderStatusEnum = OrderStateMachine.handleEvent(storeOrder, OrderEventsEnum.GROUP_PURCHASE_CONFIRM_RECEIPT, null);
                     if (ObjectUtils.isEmpty(pinkOrderStatusEnum)) {
-                        throw new ServiceException("当前状态不支持签收storeOrder:" + storeOrder.toString());
+                        throw new ServiceException(I18nUtil.get("current.status.does.not.support.receipt.confirmation.storeorder") + storeOrder.toString());
                     }
                     StoreOrder storeOrderForUpdate = new StoreOrder();
                     storeOrderForUpdate.setStatus(pinkOrderStatusEnum.getKey());
@@ -2367,7 +2365,7 @@ public class StoreOrderServiceImpl extends AbstractService<StoreOrder> implement
                     storeOrderMapper.updateByConditionSelective(storeOrderForUpdate, example);
 
 
-                    storeOrderStatusService.createLog(storeOrder.getId(), Constants.ORDER_STATUS_RECEIVE_ORDER, "订单自动签收");
+                    storeOrderStatusService.createLog(storeOrder.getId(), Constants.ORDER_STATUS_RECEIVE_ORDER, I18nUtil.get("automatic.order.receipt.confirmation"));
 
                     //维护拼团订单状态
                     StorePink storePinkForUpdate = new StorePink();
@@ -2400,7 +2398,7 @@ public class StoreOrderServiceImpl extends AbstractService<StoreOrder> implement
        Map<Integer,Integer> resultMap = new HashMap<>();
         Long tokenUserId = AuthService.getTokenUserId(null);
         if(ObjectUtils.isEmpty(tokenUserId)){
-            throw new ServiceException("登陆用户不存在tokenUserId:"+tokenUserId);
+            throw new ServiceException("user not exist tokenUserId:"+tokenUserId);
         }
         //待支付数量
         Condition conditionStoreStorePinkToPay = new Condition(StorePink.class);

+ 10 - 8
mall-service/src/main/java/com/txz/mall/service/impl/StorePinkServiceImpl.java

@@ -24,6 +24,7 @@ import com.txz.mall.model.StoreOrder;
 import com.txz.mall.model.StorePink;
 import com.txz.mall.model.StorePinkSummary;
 import com.txz.mall.service.*;
+import com.txz.mall.util.I18nUtil;
 import com.txz.mall.util.OrderStateMachine;
 import com.txz.mall.util.RandomUtil;
 import com.txz.mall.web.vo.ProductCarouselVO;
@@ -136,11 +137,11 @@ public class StorePinkServiceImpl extends AbstractService<StorePink> implements
 //        criteria.andEqualTo("status", 1);
 //        List<StorePink> list = findByCondition(condition);
 //        if (CollUtil.isEmpty(list)) {
-//            throw new ServiceException("没有拼团订单");
+//            throw new ServiceException(I18nUtil.get("no.group.buying.orders"));
 //        }
 //        long count = list.stream().filter(i -> i.getLId().equals(1)).count();
 //        if (count >= luckNum) {
-//            throw new ServiceException("已有天选");
+//            throw new ServiceException(I18nUtil.get("already.have.a.chosen.one"));
 //        }
 //
 //        List<Long> idCollect = list.stream().map(StorePink::getId).collect(Collectors.toList());
@@ -183,17 +184,18 @@ public class StorePinkServiceImpl extends AbstractService<StorePink> implements
         criteria.andEqualTo("orderStatus", PinkOrderStatusEnum.GROUP_ORDER_PAID.getKey());
         List<StorePink> list = findByCondition(condition);
         if (CollUtil.isEmpty(list)) {
-            throw new ServiceException("没有拼团订单"+spsId);
+            String s = I18nUtil.get("no.group.buying.orders");
+            throw new ServiceException(s+spsId);
         }
         long count = list.stream().filter(i -> i.getLId().equals(1)).count();
         if (count >= luckNum) {
-            throw new ServiceException("已有天选"+spsId);
+            throw new ServiceException(I18nUtil.get("already.have.a.chosen.one")+spsId);
         }
 
 
         StorePinkSummary storePinkSummary = storePinkSummaryService.findById(spsId);
         if(ObjectUtils.isEmpty(storePinkSummary)){
-            throw new ServiceException("没有拼团汇总记录"+spsId);
+            throw new ServiceException(I18nUtil.get("no.group.buying.summary.records")+spsId);
         }
 
 
@@ -221,7 +223,7 @@ public class StorePinkServiceImpl extends AbstractService<StorePink> implements
 
             PinkOrderStatusEnum pinkOrderStatusEnum = OrderStateMachine.handleEvent(storeOrder, OrderEventsEnum.GROUP_PURCHASE_WIN, null);
             if(ObjectUtils.isEmpty(pinkOrderStatusEnum)){
-                throw new ServiceException("当前订单状态不允许推进到待发货order.id:"+storePink.getOrderIdKey());
+                throw new ServiceException(I18nUtil.get("current.order.status.does.not.allow.progression.to.pending.shipment.orderid")+storePink.getOrderIdKey());
             }
             if(!ObjectUtils.isEmpty(storeOrder.getAddressId())) {
                 luckPink.setOrderStatus(PinkOrderStatusEnum.GROUP_ORDER_TO_SHIP.getKey());
@@ -256,7 +258,7 @@ public class StorePinkServiceImpl extends AbstractService<StorePink> implements
             StoreOrder storeOrder = storeOrderService.findById(a.getOrderIdKey());
             PinkOrderStatusEnum pinkOrderStatusEnum = OrderStateMachine.handleEvent(storeOrder, OrderEventsEnum.GROUP_PURCHASE_NOT_WIN, null);
             if(ObjectUtils.isEmpty(pinkOrderStatusEnum)){
-                throw new ServiceException("当前订单状态不允许推进到未中奖订单关闭状态 order.id:"+a.getOrderIdKey());
+                throw new ServiceException(I18nUtil.get("the.current.order.status.does.not.allow.advancement.to.the.closed.status.of.unwinning.orders.orderid")+a.getOrderIdKey());
             }
             // storePink2.setStopTime(date);
             StorePink unLuckPink = new StorePink();
@@ -308,7 +310,7 @@ public class StorePinkServiceImpl extends AbstractService<StorePink> implements
         Result result = cifAccountDubboServiceClient.accomplishGroup(param);
         log.info("cifAccountDubboServiceClient.accomplishGroup result"+result);
         if(!result.getCode().equals("200")){
-            throw new ServiceException("拼团成团未中奖用户退款失败message:"+result.getMessage());
+            throw new ServiceException(I18nUtil.get("refund.failed.for.users.who.did.not.win.the.group.buying.message")+result.getMessage());
         }
 
 

+ 3 - 2
mall-service/src/main/java/com/txz/mall/service/impl/StorePinkSummaryServiceImpl.java

@@ -9,6 +9,7 @@ import com.txz.mall.model.StorePink;
 import com.txz.mall.model.StorePinkSummary;
 import com.txz.mall.service.StorePinkSummaryService;
 import com.txz.mall.core.AbstractService;
+import com.txz.mall.util.I18nUtil;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
@@ -50,7 +51,7 @@ public class StorePinkSummaryServiceImpl extends AbstractService<StorePinkSummar
 
         StorePinkSummary storePinkSummary = mStorePinkSummaryMapper.selectByPrimaryKey(id);
         if(ObjectUtils.isEmpty(storePinkSummary)){
-            throw new ServiceException("拼团汇总不存在 id:"+id);
+            throw new ServiceException(I18nUtil.get("group.buying.summary.does.not.exist.id")+id);
         }
 
         Integer status = storePinkSummary.getStatus();
@@ -93,7 +94,7 @@ public class StorePinkSummaryServiceImpl extends AbstractService<StorePinkSummar
 
 
             if(stipulatedNumber < sumUnpayAndPaid){
-                throw new ServiceException("拼团超员 id:"+id);
+                throw new ServiceException(I18nUtil.get("group.buying.overcrowded.id")+id);
             }
 
 

+ 2 - 1
mall-service/src/main/java/com/txz/mall/service/impl/StoreProductRuleServiceImpl.java

@@ -6,6 +6,7 @@ import com.txz.mall.core.ServiceException;
 import com.txz.mall.dao.StoreProductRuleMapper;
 import com.txz.mall.model.StoreProductRule;
 import com.txz.mall.service.StoreProductRuleService;
+import com.txz.mall.util.I18nUtil;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -30,7 +31,7 @@ public class StoreProductRuleServiceImpl extends AbstractService<StoreProductRul
     public void saveRule(StoreProductRule storeProductRule) {
         // 格式  {"id":573,"ruleName":"衣服规格1","ruleValue":"[{\"value\":\"颜色\",\"detail\":[\"蓝色\",\"黄色\"],\"inputVisible\":false},{\"value\":\"尺码\",\"detail\":[\"s码\",\"m码\",\"l码\"],\"inputVisible\":false}]"}
         if (CollectionUtils.isEmpty(getListByRuleName(storeProductRule.getRuleName()))) {
-            throw new ServiceException("此规格值已经存在");
+            throw new ServiceException(I18nUtil.get("his.specification.value.already.exists"));
         }
         save(storeProductRule);
     }

+ 13 - 12
mall-service/src/main/java/com/txz/mall/service/impl/StoreProductServiceImpl.java

@@ -23,6 +23,7 @@ import com.txz.mall.service.ProductAttrService;
 import com.txz.mall.service.ProductAttrValueService;
 import com.txz.mall.service.StoreProductService;
 import com.txz.mall.util.EasyExcelUtil;
+import com.txz.mall.util.I18nUtil;
 import dto.FavoriteDTO;
 import dto.StoreProductAddRequest;
 import dto.StoreProductAttrAddRequest;
@@ -77,12 +78,12 @@ public class StoreProductServiceImpl extends AbstractService<StoreProduct> imple
         String suffix = FileUtil.extName(name);
         log.info("获取到的文件名为----->{},后缀为----->{}", name, suffix);
         if ("xlsx".equals(suffix) || "xls".equals(suffix)) {
-            throw new ServiceException("请传入xlsx或xls文档格式文件");
+            throw new ServiceException(I18nUtil.get("please.upload.files.in.xlsx.or.xls.format"));
         }
         try {
             List<StoreProduct> list = EasyExcelUtil.syncReadModel(file.getInputStream(), StoreProduct.class, 0, 1);
             if (CollectionUtils.isEmpty(list)) {
-                throw new ServiceException("请填写内容后再提交!");
+                throw new ServiceException(I18nUtil.get("please.fill.in.the.content.before.submitting"));
             }
 
         } catch (Exception e) {
@@ -97,14 +98,14 @@ public class StoreProductServiceImpl extends AbstractService<StoreProduct> imple
             outputStream = response.getOutputStream();
             response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
             response.setCharacterEncoding("utf-8");
-            String fileName = URLEncoder.encode("商品导出模板", "UTF-8").replaceAll("\\+", "%20");
+            String fileName = URLEncoder.encode(I18nUtil.get("product.export.template"), "UTF-8").replaceAll("\\+", "%20");
             response.setHeader(
                     "Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
             List<StoreProduct> list = new ArrayList<>();
-            EasyExcel.write(outputStream, StoreProduct.class).sheet("商品导出模板").doWrite(list);
+            EasyExcel.write(outputStream, StoreProduct.class).sheet(I18nUtil.get("product.export.template")).doWrite(list);
         } catch (Exception e) {
             log.error("模板下载失败", e);
-            throw new ServiceException("模板下载失败, 请联系管理员");
+            throw new ServiceException(I18nUtil.get("template.download.failed.please.contact.the.administrator"));
         }
     }
 
@@ -112,7 +113,7 @@ public class StoreProductServiceImpl extends AbstractService<StoreProduct> imple
     public StoreProductInfoVO getInfo(Long id) {
         StoreProduct storeProduct = findById(id);
         if (ObjectUtil.isNull(storeProduct)) {
-            throw new ServiceException("未找到对应商品信息");
+            throw new ServiceException(I18nUtil.get("corresponding.product.information.not.found"));
         }
         StoreProductInfoVO storeProductResponse = new StoreProductInfoVO();
         BeanUtils.copyProperties(storeProduct, storeProductResponse);
@@ -245,7 +246,7 @@ public class StoreProductServiceImpl extends AbstractService<StoreProduct> imple
     @Transactional
     public void save(StoreProductAddRequest request) {
         if (request.getId() != null) {
-            throw new ServiceException("商品已存在");
+            throw new ServiceException(I18nUtil.get("product.already.exists"));
         }
         assignAttributes(request, 0);
     }
@@ -260,7 +261,7 @@ public class StoreProductServiceImpl extends AbstractService<StoreProduct> imple
         // 多规格需要校验规格参数
         if (request.getSpecType().equals(0)) {
             if (request.getAttrValue().size() > 1) {
-                throw new ServiceException("单规格商品属性值不能大于1");
+                throw new ServiceException(I18nUtil.get("the.attribute.value.of.a.single.specification.product.cannot.be.greater.than.1"));
             }
         }
         StoreProduct storeProduct = new StoreProduct();
@@ -374,7 +375,7 @@ public class StoreProductServiceImpl extends AbstractService<StoreProduct> imple
     public void operationStock(Long id, Integer num, String type) {
         StoreProduct storeProduct = storeProductMapper.selectByPrimaryKey(id);
         if(ObjectUtils.isEmpty(storeProduct)){
-            throw new ServiceException("商品不存在id:"+id);
+            throw new ServiceException(I18nUtil.get("product.does.not.exist.id")+id);
         }
 
         StoreProduct forUpdatestoreProduct = new StoreProduct();
@@ -382,7 +383,7 @@ public class StoreProductServiceImpl extends AbstractService<StoreProduct> imple
             int stock = storeProduct.getStock()+num;
             int sales = storeProduct.getSales()-num;
             if(sales<0){
-                throw new ServiceException("销量扣减为负数productId:"+id);
+                throw new ServiceException(I18nUtil.get("sales.deduction.is.negative.productid")+id);
             }
 
             forUpdatestoreProduct.setStock(stock);
@@ -393,7 +394,7 @@ public class StoreProductServiceImpl extends AbstractService<StoreProduct> imple
             int stock = storeProduct.getStock()-num;
             int sales = storeProduct.getSales()+num;
             if(stock<0){
-                throw new ServiceException("库存扣减为负数productId:"+id);
+                throw new ServiceException(I18nUtil.get("inventory.deduction.is.negative.productid")+id);
             }
             forUpdatestoreProduct.setStock(stock);
             forUpdatestoreProduct.setSales(sales);
@@ -403,7 +404,7 @@ public class StoreProductServiceImpl extends AbstractService<StoreProduct> imple
         example.createCriteria().andEqualTo("id",id).andEqualTo("version",storeProduct.getVersion());
         int i = storeProductMapper.updateByConditionSelective(forUpdatestoreProduct, example);
         if (!(i==1)) {
-            throw new ServiceException("更新商品库存失败!商品id = " + id);
+            throw new ServiceException(I18nUtil.get("failed.to.update.product.inventory.product.id") + id);
         }
     }
 

+ 2 - 1
mall-service/src/main/java/com/txz/mall/service/impl/UserSignServiceImpl.java

@@ -9,6 +9,7 @@ import com.txz.mall.dubbo.client.CifAccountDubboServiceClient;
 import com.txz.mall.dubbo.client.OperatingConfigDubboServiceClient;
 import com.txz.mall.model.UserSign;
 import com.txz.mall.service.UserSignService;
+import com.txz.mall.util.I18nUtil;
 import com.txz.mall.util.OrderUtils;
 import com.txz.operating.dto.ConfigDTO;
 import org.apache.commons.lang.time.DateUtils;
@@ -66,7 +67,7 @@ public class UserSignServiceImpl extends AbstractService<UserSign> implements Us
         // 2. 判断今天是否已经签到
         boolean hasSignedToday = hasSignedToday(uid);
         if (hasSignedToday) {
-            throw new RuntimeException("今天已经签到过了!");
+            throw new RuntimeException(I18nUtil.get("you.have.already.checked.in.today"));
         }
 
         // 3. 获取昨天的签到记录,判断是否连续签到

+ 19 - 4
mall-service/src/main/java/com/txz/mall/util/I18nUtil.java

@@ -4,6 +4,9 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.MessageSource;
 import org.springframework.context.i18n.LocaleContextHolder;
 import org.springframework.stereotype.Component;
+import org.springframework.util.ObjectUtils;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
 
 import javax.annotation.PostConstruct;
 import javax.annotation.Resource;
@@ -39,10 +42,19 @@ public class I18nUtil
     // 静态 get 方法(同上)
     public static String get(String msgKey) {
         try {
-            LocaleContextHolder.setLocale(Locale.US); //英文
-
-          //  Locale bengaliLocale = new Locale("bn", "BD"); //孟加拉文
-         //   LocaleContextHolder.setLocale(bengaliLocale);
+            ServletRequestAttributes sra = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
+            String header = sra.getRequest().getHeader("accept-language");
+            LocaleContextHolder.setLocale(Locale.US);
+            if(ObjectUtils.isEmpty(header)) {
+                if ("en".equals(header)) {
+                    LocaleContextHolder.setLocale(Locale.US);
+                } else if ("zh".equals(header)) {
+                    LocaleContextHolder.setLocale(Locale.SIMPLIFIED_CHINESE);
+                } else if ("bd".equals(header)) {
+                    Locale bengaliLocale = new Locale("bn", "BD"); //孟加拉文
+                    LocaleContextHolder.setLocale(bengaliLocale);
+                }
+            }
 
             return staticMessageSource.getMessage(msgKey, null, LocaleContextHolder.getLocale());
         } catch (Exception e) {
@@ -52,4 +64,7 @@ public class I18nUtil
 
 
 
+
+
+
 }

+ 3 - 2
mall-service/src/main/java/com/txz/mall/web/ro/SendNoticeRO.java

@@ -1,5 +1,6 @@
 package com.txz.mall.web.ro;
 
+import com.txz.mall.util.I18nUtil;
 import lombok.Data;
 
 import javax.validation.constraints.NotNull;
@@ -22,8 +23,8 @@ public class SendNoticeRO {
     /**
      * 用户id
      */
-    @NotNull(message = "用户id不能为空", groups = {Send.class})
-    @Size(min = 1, message = "用户id不能为空", groups = {Send.class})
+    @NotNull(message = "user.id.cannot.be.empty", groups = {Send.class})
+    @Size(min = 1, message = "user.id.cannot.be.empty", groups = {Send.class})
     private List<Long> uids;
     
     public interface Send {

+ 0 - 1
mall-service/src/main/resources/i18n/messages.properties

@@ -1 +0,0 @@
-lala.sasa.qq=hello world

+ 147 - 1
mall-service/src/main/resources/i18n/messages_bn_BD.properties

@@ -1 +1,147 @@
-order.does.not.exist=\u0985\u09B0\u09CD\u09A1\u09BE\u09B0 \u09A8\u09C7\u0987
+order.does.not.exist=\u0985\u09B0\u09CD\u09A1\u09BE\u09B0 \u09A8\u09C7\u0987
+
+
+
+
+this.specification.value.already.exists=
+order.does.not.exist.id=
+group.buying.id.is.empty=
+group.buying.data.does.not.exist.id=
+group.buying.failed.order.refund.application.failed=
+the.activity.is.ongoing.and.the.product.does.not.support.deletion=
+the.added.product.cannot.be.empty=
+product.id.does.not.exist=
+repeatedly.collect.the.same.product=
+please.log.in.first=
+user.not.logged.in=
+failed.to.get.configuration=
+there.are.subcategories.under.the.current.category.please.delete.the.subcategories.firs=
+cannot.find.the.corresponding.activity=
+group.buying.product.does.not.exist.or.is.not.activated=
+group.buying.activity.does.not.exist.id=
+the.sales.deduction.of.group.buying.activity.m_store_combination.is.negative.id=
+the.stock.deduction.of.group.buying.activity.m_store_combination.is.negative.id=
+the.quota.deduction.of.group.buying.activity.m_store_combination.is.negative.id=
+storecombination.inventory.operation.failed.id=
+activity.does.not.exist.id=
+order.does.not.exist=
+the.corresponding.group.buying.does.not.exist=
+group.buying.product.does.not.exist.or.is.not.activated=
+group.buying.is.full=
+the.corresponding.group.buying.product.does.not.exist=
+there.is.no.group.to.join.temporarily=
+all.groups.have.been.joined=
+the.number.of.group.buying.participants.exceeds.the.limit.please.initiate.group.buying.again.pinkid=
+batch.delivery.input.parameter.is.empty.dto=
+batch.delivery.order.orderid.is.empty.orderidlist=
+do.not.exceed.500.orders.for.one.batch.delivery=
+batch.delivery.order.list.does.not.exist=
+the.current.status.does.not.support.delivery.storeorder=
+the.pre-order.details.list.cannot.be.empty=
+user.id.cannot.be.empty=
+user.is.empty.userid=
+product.number.cannot.be.empty=
+product.specification.attribute.value.cannot.be.empty=
+the.purchase.quantity.must.be.greater.than.0=
+product.information.does.not.exist.please.refresh.and.reselect=
+the.product.has.been.deleted.please.refresh.and.reselect=
+the.product.has.been.removed.from.the.shelves.please.refresh.and.reselect=
+insufficient.product.inventory.please.refresh.and.reselect=
+product.specification.information.does.not.exist.please.refresh.and.reselect=
+insufficient.product.specification.inventory.please.refresh.and.reselect=
+insufficient.group.buying.product.inventory=
+group.buying.product.specification.does.not.exist=
+group.buying.product.activity.has.not.started=
+group.buying.product.has.expired=
+insufficient.inventory.of.group.buying.product.specifications=
+group.buying.main.product.does.not.exist=
+insufficient.inventory.of.group.buying.main.product=
+group.buying.main.product.specification.does.not.exist=
+insufficient.inventory.of.group.buying.main.product.specifications=
+the.purchase.times.configuration.corresponding.to.the.user.level.does.not.exist=
+you.have.reached.the.upper.limit.of.the.group.buying.activity.for.this.product=
+pre-order.does.not.exist=
+no.group.buying.orders=
+already.have.a.chosen.one=
+no.group.buying.summary.records=
+the.previous.order.status.does.not.allow.advancement.to.pending.delivery.orderid=
+the.current.order.status.does.not.allow.advancement.to.the.closed.status.of.unwinning.orders.orderid=
+refund.failed.for.users.who.did.not.win.the.group.buying.message=
+group.buying.summary.does.not.exist.id=
+group.buying.overcrowded.id=
+please.upload.files.in.xlsx.or.xls.format=
+please.fill.in.the.content.before.submitting=
+template.download.failed.please.contact.the.administrator=
+corresponding.product.information.not.found=
+product.already.exists=
+the.attribute.value.of.a.single.specification.product.cannot.be.greater.than.1=
+product.does.not.exist.id=
+sales.deduction.is.negative.productid=
+inventory.deduction.is.negative.productid=
+failed.to.update.product.inventory.product.id=
+
+
+duplicate.group.buying=
+duplicate.favorite.of.the.same.product=
+order.list.for.batch.shipment.does.not.exist=
+main.group.buying.product.does.not.exist=
+current.order.status.does.not.allow.progression.to.pending.shipment.orderid=
+failed.to.update.product.inventory.product.id.=
+id=
+order.number=
+user.id=
+user.registered.mobile.phone.number=
+order.status=
+order.amount=
+order.placement.time=
+payment.time=
+product.id=
+product.name=
+product.specification=
+purchase.quantity=
+recipient.name=
+recipient.mobile.phone=
+recipient.detailed.address=
+postcode=
+courier.company=
+express.delivery.courier=
+please.select.a.delivery.address=
+delivery.address.is.incorrect=
+order.is.empty.orderid=
+order.has.been.paid.orderid=
+current.status.does.not.support.payment.orderid=
+failed.to.obtain.user's.wallet.account=
+payment.failed=
+order.does.not.exist.when.initiating.active.refund.id=
+current.status.does.not.support.refund.cancellation.id=
+current.member.is.the.group.leader.and.the.group.has.not.drawn.a.prize;.refund.is.temporarily.not.supported=
+group.buying.information.does.not.exist.when.closing.due.to.group.buying.timeout.id=
+refund.failed.please.initiate.again=
+order.does.not.exist.id=
+current.status.does.not.support.cancellation=
+group.buying.information.does.not.exist.when.canceling.the.order.id=
+current.status.does.not.support.refund.cancellation=
+group.buying.information.does.not.exist.when.initiating.active.refund.id=
+refund.failed.please.initiate.again.orderid=
+current.status.does.not.support.refund.cancellationid=
+scheduled.task.failed.to.close.the.order.order.id=
+order.does.not.exist.when.canceling.the.order.id=
+current.status.does.not.support.cancellation=
+group.buying.information.does.not.exist.when.canceling.the.order.id=
+failed.to.process.ordertimeoutautomaticcancel=
+current.status.does.not.support.shipment=
+courier.tracking.number.or.courier.company.cannot.be.empty=
+purchased.product.information.does.not.exist=
+purchased.product.has.been.deleted=
+purchased.product.has.been.removed.from.shelves=
+insufficient.inventory.for.the.purchased.product=
+specification.information.of.the.purchased.product.does.not.exist=
+insufficient.inventory.for.the.purchased.product=
+order.does.not.exist.orderid=
+group.buying.data.does.not.exist=
+current.order.status.does.not.allow.progression.to.pending.shipment.orderid=
+current.status.does.not.support.receipt.confirmation.storeorder=
+automatic.order.receipt.confirmation=
+current.order.status.does.not.allow.progression.to.pending.shipment.orderid=
+product.export.template=
+you.have.already.checked.in.today=

+ 139 - 2
mall-service/src/main/resources/i18n/messages_en_US.properties

@@ -1,4 +1,3 @@
-order.does.not.exist=Order does not exist
 
 group.order.to.pay=To Pay
 PinkOrderStatusEnum.GROUP_ORDER_TO_PAY=To Pay
@@ -15,4 +14,142 @@ PinkOrderStatusEnum.GROUP_ORDER_CLOSED=Closed
 group.order.to.receive=To Receive
 PinkOrderStatusEnum.GROUP_ORDER_TO_RECEIVE=To Receive
 group.order.completed=Completed
-PinkOrderStatusEnum.GROUP_ORDER_COMPLETED=Completed
+PinkOrderStatusEnum.GROUP_ORDER_COMPLETED=Completed
+
+
+this.specification.value.already.exists=this specification value already exists
+order.does.not.exist.id=order does not exist id
+group.buying.id.is.empty=group buying id is empty
+group.buying.data.does.not.exist.id=group buying data does not exist id
+group.buying.failed.order.refund.application.failed=group buying failed order refund application failed
+the.activity.is.ongoing.and.the.product.does.not.support.deletion=the activity is ongoing and the product does not support deletion
+the.added.product.cannot.be.empty=the added product cannot be empty
+product.id.does.not.exist=product id does not exist
+repeatedly.collect.the.same.product=repeatedly collect the same product
+please.log.in.first=please log in first
+user.not.logged.in=user not logged in
+failed.to.get.configuration=failed to get configuration
+there.are.subcategories.under.the.current.category.please.delete.the.subcategories.firs=there are subcategories under the current category please delete the subcategories first
+cannot.find.the.corresponding.activity=cannot find the corresponding activity
+group.buying.product.does.not.exist.or.is.not.activated=group buying product does not exist or is not activated
+group.buying.activity.does.not.exist.id=group buying activity does not exist id
+the.sales.deduction.of.group.buying.activity.m_store_combination.is.negative.id=the sales deduction of group buying activity m_store_combination is negative id
+the.stock.deduction.of.group.buying.activity.m_store_combination.is.negative.id=the stock deduction of group buying activity m_store_combination is negative id
+the.quota.deduction.of.group.buying.activity.m_store_combination.is.negative.id=the quota deduction of group buying activity m_store_combination is negative id
+storecombination.inventory.operation.failed.id=storecombination inventory operation failed id
+activity.does.not.exist.id=activity does not exist id
+order.does.not.exist=order does not exist
+the.corresponding.group.buying.does.not.exist=the corresponding group buying does not exist
+group.buying.is.full=group buying is full
+the.corresponding.group.buying.product.does.not.exist=the corresponding group buying product does not exist
+there.is.no.group.to.join.temporarily=there is no group to join temporarily
+all.groups.have.been.joined=all groups have been joined
+the.number.of.group.buying.participants.exceeds.the.limit.please.initiate.group.buying.again.pinkid=the number of group buying participants exceeds the limit please initiate group buying again pinkid
+batch.delivery.input.parameter.is.empty.dto=batch delivery input parameter is empty dto
+batch.delivery.order.orderid.is.empty.orderidlist=batch delivery order orderid is empty orderidlist
+do.not.exceed.500.orders.for.one.batch.delivery=do not exceed 500 orders for one batch delivery
+batch.delivery.order.list.does.not.exist=batch delivery order list does not exist
+the.current.status.does.not.support.delivery.storeorder=the current status does not support delivery storeorder
+the.pre-order.details.list.cannot.be.empty=the pre-order details list cannot be empty
+user.id.cannot.be.empty=user id cannot be empty
+user.is.empty.userid=user is empty userid
+product.number.cannot.be.empty=product number cannot be empty
+product.specification.attribute.value.cannot.be.empty=product specification attribute value cannot be empty
+the.purchase.quantity.must.be.greater.than.0=the purchase quantity must be greater than 0
+product.information.does.not.exist.please.refresh.and.reselect=product information does not exist please refresh and reselect
+the.product.has.been.deleted.please.refresh.and.reselect=the product has been deleted please refresh and reselect
+the.product.has.been.removed.from.the.shelves.please.refresh.and.reselect=the product has been removed from the shelves please refresh and reselect
+insufficient.product.inventory.please.refresh.and.reselect=insufficient product inventory please refresh and reselect
+product.specification.information.does.not.exist.please.refresh.and.reselect=product specification information does not exist please refresh and reselect
+insufficient.product.specification.inventory.please.refresh.and.reselect=insufficient product specification inventory please refresh and reselect
+insufficient.group.buying.product.inventory=insufficient group buying product inventory
+group.buying.product.specification.does.not.exist=group buying product specification does not exist
+group.buying.product.activity.has.not.started=group buying product activity has not started
+group.buying.product.has.expired=group buying product has expired
+insufficient.inventory.of.group.buying.product.specifications=insufficient inventory of group buying product specifications
+group.buying.main.product.does.not.exist=group buying main product does not exist
+insufficient.inventory.of.group.buying.main.product=insufficient inventory of group buying main product
+group.buying.main.product.specification.does.not.exist=group buying main product specification does not exist
+insufficient.inventory.of.group.buying.main.product.specifications=insufficient inventory of group buying main product specifications
+the.purchase.times.configuration.corresponding.to.the.user.level.does.not.exist=the purchase times configuration corresponding to the user level does not exist
+you.have.reached.the.upper.limit.of.the.group.buying.activity.for.this.product=you have reached the upper limit of the group buying activity for this product
+pre-order.does.not.exist=pre-order does not exist
+no.group.buying.orders=no group buying orders
+already.have.a.chosen.one=already have a chosen one
+no.group.buying.summary.records=no group buying summary records
+the.previous.order.status.does.not.allow.advancement.to.pending.delivery.orderid=the previous order status does not allow advancement to pending delivery orderid
+the.current.order.status.does.not.allow.advancement.to.the.closed.status.of.unwinning.orders.orderid=the current order status does not allow advancement to the closed status of unwinning orders orderid
+refund.failed.for.users.who.did.not.win.the.group.buying.message=refund failed for users who did not win the group buying message
+group.buying.summary.does.not.exist.id=group buying summary does not exist id
+group.buying.overcrowded.id=group buying overcrowded id
+please.upload.files.in.xlsx.or.xls.format=please upload files in xlsx or xls format
+please.fill.in.the.content.before.submitting=please fill in the content before submitting
+template.download.failed.please.contact.the.administrator=template download failed please contact the administrator
+corresponding.product.information.not.found=corresponding product information not found
+product.already.exists=product already exists
+the.attribute.value.of.a.single.specification.product.cannot.be.greater.than.1=the attribute value of a single specification product cannot be greater than 1
+product.does.not.exist.id=product does not exist id
+sales.deduction.is.negative.productid=sales deduction is negative productid
+inventory.deduction.is.negative.productid=inventory deduction is negative productid
+failed.to.update.product.inventory.product.id=failed to update product inventory product id
+
+
+duplicate.group.buying=duplicate group buying
+duplicate.favorite.of.the.same.product=duplicate favorite of the same product
+order.list.for.batch.shipment.does.not.exist=order list for batch shipment does not exist
+main.group.buying.product.does.not.exist=main group buying product does not exist
+current.order.status.does.not.allow.progression.to.pending.shipment.orderid=current order status does not allow progression to pending shipment orderid
+id=id
+order.number=order number
+user.id=user id
+user.registered.mobile.phone.number=user's registered mobile phone number
+order.status=order status
+order.amount=order amount
+order.placement.time=order placement time
+payment.time=payment time
+product.id=product id
+product.name=product name
+product.specification=product specification
+purchase.quantity=purchase quantity
+recipient.name=recipient's name
+recipient.mobile.phone=recipient's mobile phone
+recipient.detailed.address=recipient's detailed address
+postcode=postcode
+courier.company=courier company
+express.delivery.courier=express delivery courier
+please.select.a.delivery.address=please select a delivery address
+delivery.address.is.incorrect=delivery address is incorrect
+order.is.empty.orderid=order is empty orderid
+order.has.been.paid.orderid=order has been paid orderid
+current.status.does.not.support.payment.orderid=current status does not support payment orderid
+failed.to.obtain.user.wallet.account=failed to obtain user's wallet account
+payment.failed=payment failed
+order.does.not.exist.when.initiating.active.refund.id=order does not exist when initiating active refund id
+current.status.does.not.support.refund.cancellation.id=current status does not support refund cancellation id
+current.member.is.the.group.leader.and.the.group.has.not.drawn.a.prize.refund.is.temporarily.not.supported=current member is the group leader, and the group has not drawn a prize; refund is temporarily not supported:
+group.buying.information.does.not.exist.when.closing.due.to.group.buying.timeout.id=group buying information does not exist when closing due to group buying timeout id
+refund.failed.please.initiate.again=refund failed, please initiate again
+current.status.does.not.support.cancellation=current status does not support cancellation
+group.buying.information.does.not.exist.when.canceling.the.order.id=group buying information does not exist when canceling the order id
+current.status.does.not.support.refund.cancellation=current status does not support refund cancellation
+group.buying.information.does.not.exist.when.initiating.active.refund.id=group buying information does not exist when initiating active refund id
+refund.failed.please.initiate.again.orderid=refund failed, please initiate again orderid
+current.status.does.not.support.refund.cancellationid=current status does not support refund cancellationid
+scheduled.task.failed.to.close.the.order.order.id=scheduled task failed to close the order order id
+order.does.not.exist.when.canceling.the.order.id=order does not exist when canceling the order id
+failed.to.process.ordertimeoutautomaticcancel=failed to process ordertimeoutautomaticcancel
+current.status.does.not.support.shipment=current status does not support shipment
+courier.tracking.number.or.courier.company.cannot.be.empty=courier tracking number or courier company cannot be empty
+purchased.product.information.does.not.exist=purchased product information does not exist
+purchased.product.has.been.deleted=purchased product has been deleted
+purchased.product.has.been.removed.from.shelves=purchased product has been removed from shelves
+insufficient.inventory.for.the.purchased.product=insufficient inventory for the purchased product
+specification.information.of.the.purchased.product.does.not.exist=specification information of the purchased product does not exist
+
+order.does.not.exist.orderid=order does not exist orderid
+group.buying.data.does.not.exist=group buying data does not exist:
+current.status.does.not.support.receipt.confirmation.storeorder=current status does not support receipt confirmation storeorder
+automatic.order.receipt.confirmation=automatic order receipt confirmation
+product.export.template=product export template
+you.have.already.checked.in.today=you have already checked in today
+

+ 158 - 2
mall-service/src/main/resources/i18n/messages_zh_CN.properties

@@ -1,2 +1,158 @@
-\u8BA2\u5355\u4E0D\u5B58\u5728 ID
-\u62FC\u56E2id\u4E3A\u7A7A
+
+group.order.to.pay=To Pay
+PinkOrderStatusEnum.GROUP_ORDER_TO_PAY=To Pay
+group.order.cancellation=Cancellation
+PinkOrderStatusEnum.GROUP_ORDER_CANCELLATION=Cancellation
+group.order.paid=Paid
+PinkOrderStatusEnum.GROUP_ORDER_PAID=Paid
+group.order.refund=Refund
+PinkOrderStatusEnum.GROUP_ORDER_REFUND=Refund
+group.order.to.ship=To Ship
+PinkOrderStatusEnum.GROUP_ORDER_TO_SHIP=To Ship
+group.order.closed=Closed
+PinkOrderStatusEnum.GROUP_ORDER_CLOSED=Closed
+group.order.to.receive=To Receive
+PinkOrderStatusEnum.GROUP_ORDER_TO_RECEIVE=To Receive
+group.order.completed=Completed
+PinkOrderStatusEnum.GROUP_ORDER_COMPLETED=Completed
+
+
+this.specification.value.already.exists=\u6B64\u89C4\u683C\u503C\u5DF2\u7ECF\u5B58\u5728
+order.does.not.exist.id=\u8BA2\u5355\u4E0D\u5B58\u5728 ID\uFF1A
+group.buying.id.is.empty=\u62FC\u56E2id\u4E3A\u7A7A
+group.buying.data.does.not.exist.id=\u62FC\u56E2\u6570\u636E\u4E0D\u5B58\u5728id:
+group.buying.failed.order.refund.application.failed=\u62FC\u56E2\u672A\u6210\u529F,\u8BA2\u5355\u7533\u8BF7\u9000\u6B3E\u5931\u8D25
+the.activity.is.ongoing.and.the.product.does.not.support.deletion=\u6D3B\u52A8\u5F00\u542F\u4E2D\uFF0C\u5546\u54C1\u4E0D\u652F\u6301\u5220\u9664
+the.added.product.cannot.be.empty=\u6DFB\u52A0\u5546\u54C1\u4E0D\u80FD\u4E3A\u7A7A
+product.id.does.not.exist=\u5546\u54C1id\u4E0D\u5B58\u5728
+repeatedly.collect.the.same.product=\u91CD\u590D\u6536\u85CF\u540C\u6837\u7684\u5546\u54C1
+please.log.in.first=\u8BF7\u5148\u767B\u5F55
+user.not.logged.in=\u7528\u6237\u672A\u767B\u9646
+failed.to.get.configuration=\u83B7\u53D6\u914D\u7F6E\u5931\u8D25
+there.are.subcategories.under.the.current.category.please.delete.the.subcategories.first=\u5F53\u524D\u5206\u7C7B\u4E0B\u6709\u5B50\u7C7B\uFF0C\u8BF7\u5148\u5220\u9664\u5B50\u7C7B\uFF01
+cannot.find.the.corresponding.activity=\u627E\u4E0D\u5230\u5BF9\u5E94\u7684\u6D3B\u52A8
+group.buying.product.does.not.exist.or.is.not.activated=\u62FC\u56E2\u5546\u54C1\u4E0D\u5B58\u5728\u6216\u672A\u5F00\u542F
+group.buying.activity.does.not.exist.id=\u62FC\u56E2\u6D3B\u52A8\u4E0D\u5B58\u5728id\uFF1A
+the.sales.deduction.of.group.buying.activity.m_store_combination.is.negative.id=\u62FC\u56E2\u6D3B\u52A8m_store_combination\u9500\u91CF\u6263\u51CF\u4E3A\u8D1F\u6570id\uFF1A
+the.stock.deduction.of.group.buying.activity.m_store_combination.is.negative.id=\u62FC\u56E2\u6D3B\u52A8m_store_combination.stock\u6263\u51CF\u4E3A\u8D1F\u6570id\uFF1A
+the.quota.deduction.of.group.buying.activity.m_store_combination.is.negative.id=\u62FC\u56E2\u6D3B\u52A8m_store_combination.quota\u6263\u51CF\u4E3A\u8D1F\u6570id\uFF1A
+storecombination.inventory.operation.failed.id=StoreCombination\u5E93\u5B58\u64CD\u4F5C\u5931\u8D25id:
+activity.does.not.exist.id=\u6D3B\u52A8\u4E0D\u5B58\u5728id\uFF1A
+order.does.not.exist=\u8BA2\u5355\u4E0D\u5B58\u5728
+the.corresponding.group.buying.does.not.exist=\u5BF9\u5E94\u7684\u62FC\u56E2\u4E0D\u5B58\u5728
+group.buying.product.does.not.exist.or.is.not.activated=\u62FC\u56E2\u5546\u54C1\u4E0D\u5B58\u5728\u6216\u672A\u5F00\u542F
+group.buying.is.full=\u62FC\u56E2\u5DF2\u6EE1
+the.corresponding.group.buying.product.does.not.exist=\u5BF9\u5E94\u62FC\u56E2\u5546\u54C1\u4E0D\u5B58\u5728
+there.is.no.group.to.join.temporarily=\u6682\u65F6\u6CA1\u6709\u53EF\u52A0\u5165\u7684\u56E2
+all.groups.have.been.joined=\u6240\u6709\u7684\u56E2\u5747\u5DF2\u53C2\u52A0
+the.number.of.group.buying.participants.exceeds.the.limit.please.initiate.group.buying.again.pinkid=\u62FC\u56E2\u4EBA\u6570\u8D85\u5458\u8BF7\u91CD\u65B0\u53D1\u8D77\u62FC\u56E2 pinkid\uFF1A
+batch.delivery.input.parameter.is.empty.dto=\u6279\u91CF\u53D1\u8D27\u5165\u53C2\u4E3A\u7A7Adto\uFF1A
+batch.delivery.order.orderid.is.empty.orderidlist=\u6279\u91CF\u53D1\u8D27\u8BA2\u5355orderid\u4E3A\u7A7AorderIdList\uFF1A
+do.not.exceed.500.orders.for.one.batch.delivery=1\u6B21\u6279\u91CF\u53D1\u8D27\u8BA2\u5355\u4E0D\u8981\u8D85\u8FC7500\u6761
+batch.delivery.order.list.does.not.exist=\u6279\u91CF\u53D1\u8D27\u8BA2\u5355\u8BA2\u5355\u5217\u8868\u4E0D\u5B58\u5728\uFF1A
+the.current.status.does.not.support.delivery.storeorder=\u5F53\u524D\u72B6\u6001\u4E0D\u652F\u6301\u53D1\u8D27storeOrder:
+the.pre-order.details.list.cannot.be.empty=\u9884\u4E0B\u5355\u8BA2\u5355\u8BE6\u60C5\u5217\u8868\u4E0D\u80FD\u4E3A\u7A7A
+user.id.cannot.be.empty=\u7528\u6237id\u4E0D\u80FD\u4E3A\u7A7A
+user.is.empty.userid=\u7528\u6237\u4E3A\u7A7AuserId:
+product.number.cannot.be.empty=\u5546\u54C1\u7F16\u53F7\u4E0D\u80FD\u4E3A\u7A7A
+product.specification.attribute.value.cannot.be.empty=\u5546\u54C1\u89C4\u683C\u5C5E\u6027\u503C\u4E0D\u80FD\u4E3A\u7A7A
+the.purchase.quantity.must.be.greater.than.0=\u8D2D\u4E70\u6570\u91CF\u5FC5\u987B\u5927\u4E8E0
+product.information.does.not.exist.please.refresh.and.reselect=\u5546\u54C1\u4FE1\u606F\u4E0D\u5B58\u5728\uFF0C\u8BF7\u5237\u65B0\u540E\u91CD\u65B0\u9009\u62E9
+the.product.has.been.deleted.please.refresh.and.reselect=\u5546\u54C1\u5DF2\u5220\u9664\uFF0C\u8BF7\u5237\u65B0\u540E\u91CD\u65B0\u9009\u62E9
+the.product.has.been.removed.from.the.shelves.please.refresh.and.reselect=\u5546\u54C1\u5DF2\u4E0B\u67B6\uFF0C\u8BF7\u5237\u65B0\u540E\u91CD\u65B0\u9009\u62E9
+insufficient.product.inventory.please.refresh.and.reselect=\u5546\u54C1\u5E93\u5B58\u4E0D\u8DB3\uFF0C\u8BF7\u5237\u65B0\u540E\u91CD\u65B0\u9009\u62E9
+product.specification.information.does.not.exist.please.refresh.and.reselect=\u5546\u54C1\u89C4\u683C\u4FE1\u606F\u4E0D\u5B58\u5728\uFF0C\u8BF7\u5237\u65B0\u540E\u91CD\u65B0\u9009\u62E9
+insufficient.product.specification.inventory.please.refresh.and.reselect=\u5546\u54C1\u89C4\u683C\u5E93\u5B58\u4E0D\u8DB3\uFF0C\u8BF7\u5237\u65B0\u540E\u91CD\u65B0\u9009\u62E9
+insufficient.group.buying.product.inventory=\u62FC\u56E2\u5546\u54C1\u5E93\u5B58\u4E0D\u8DB3
+group.buying.product.specification.does.not.exist=\u62FC\u56E2\u5546\u54C1\u89C4\u683C\u4E0D\u5B58\u5728
+group.buying.product.activity.has.not.started=\u62FC\u56E2\u5546\u54C1\u6D3B\u52A8\u672A\u5F00\u59CB
+group.buying.product.has.expired=\u62FC\u56E2\u5546\u54C1\u5DF2\u8FC7\u671F
+insufficient.inventory.of.group.buying.product.specifications=\u62FC\u56E2\u5546\u54C1\u89C4\u683C\u5E93\u5B58\u4E0D\u8DB3
+group.buying.main.product.does.not.exist=\u62FC\u56E2\u4E3B\u5546\u54C1\u4E0D\u5B58\u5728
+insufficient.inventory.of.group.buying.main.product=\u62FC\u56E2\u4E3B\u5546\u54C1\u5E93\u5B58\u4E0D\u8DB3
+group.buying.main.product.specification.does.not.exist=\u62FC\u56E2\u4E3B\u5546\u54C1\u89C4\u683C\u4E0D\u5B58\u5728
+insufficient.inventory.of.group.buying.main.product.specifications=\u62FC\u56E2\u4E3B\u5546\u54C1\u89C4\u683C\u5E93\u5B58\u4E0D\u8DB3
+the.purchase.times.configuration.corresponding.to.the.user.level.does.not.exist=\u7528\u6237\u7B49\u7EA7\u5BF9\u5E94\u7684\u8D2D\u4E70\u6B21\u6570\u914D\u7F6E\u4E0D\u5B58\u5728
+you.have.reached.the.upper.limit.of.the.group.buying.activity.for.this.product=\u60A8\u5DF2\u8FBE\u5230\u8BE5\u5546\u54C1\u62FC\u56E2\u6D3B\u52A8\u4E0A\u9650
+pre-order.does.not.exist=\u9884\u4E0B\u5355\u8BA2\u5355\u4E0D\u5B58\u5728
+no.group.buying.orders=\u6CA1\u6709\u62FC\u56E2\u8BA2\u5355
+already.have.a.chosen.one=\u5DF2\u6709\u5929\u9009
+no.group.buying.summary.records=\u6CA1\u6709\u62FC\u56E2\u6C47\u603B\u8BB0\u5F55
+the.previous.order.status.does.not.allow.advancement.to.pending.delivery.orderid=\u524D\u8BA2\u5355\u72B6\u6001\u4E0D\u5141\u8BB8\u63A8\u8FDB\u5230\u5F85\u53D1\u8D27order.id\uFF1A
+the.current.order.status.does.not.allow.advancement.to.the.closed.status.of.unwinning.orders.orderid=\u5F53\u524D\u8BA2\u5355\u72B6\u6001\u4E0D\u5141\u8BB8\u63A8\u8FDB\u5230\u672A\u4E2D\u5956\u8BA2\u5355\u5173\u95ED\u72B6\u6001 order.id\uFF1A
+refund.failed.for.users.who.did.not.win.the.group.buying.message=\u62FC\u56E2\u6210\u56E2\u672A\u4E2D\u5956\u7528\u6237\u9000\u6B3E\u5931\u8D25message:
+group.buying.summary.does.not.exist.id=\u62FC\u56E2\u6C47\u603B\u4E0D\u5B58\u5728 id:
+group.buying.overcrowded.id=\u62FC\u56E2\u8D85\u5458 id:
+please.upload.files.in.xlsx.or.xls.format=\u8BF7\u4F20\u5165xlsx\u6216xls\u6587\u6863\u683C\u5F0F\u6587\u4EF6
+please.fill.in.the.content.before.submitting=\u8BF7\u586B\u5199\u5185\u5BB9\u540E\u518D\u63D0\u4EA4!
+template.download.failed.please.contact.the.administrator=\u6A21\u677F\u4E0B\u8F7D\u5931\u8D25, \u8BF7\u8054\u7CFB\u7BA1\u7406\u5458
+corresponding.product.information.not.found=\u672A\u627E\u5230\u5BF9\u5E94\u5546\u54C1\u4FE1\u606F
+product.already.exists=\u5546\u54C1\u5DF2\u5B58\u5728
+the.attribute.value.of.a.single.specification.product.cannot.be.greater.than.1=\u5355\u89C4\u683C\u5546\u54C1\u5C5E\u6027\u503C\u4E0D\u80FD\u5927\u4E8E1
+product.does.not.exist.id=\u5546\u54C1\u4E0D\u5B58\u5728id\uFF1A
+sales.deduction.is.negative.productid=\u9500\u91CF\u6263\u51CF\u4E3A\u8D1F\u6570productId\uFF1A
+inventory.deduction.is.negative.productid=\u5E93\u5B58\u6263\u51CF\u4E3A\u8D1F\u6570productId\uFF1A
+failed.to.update.product.inventory.product.id=\u66F4\u65B0\u5546\u54C1\u5E93\u5B58\u5931\u8D25\uFF01\u5546\u54C1id =
+
+
+
+
+duplicate.group.buying=\u91CD\u590D\u62FC\u56E2
+duplicate.favorite.of.the.same.product=\u91CD\u590D\u6536\u85CF\u540C\u6837\u7684\u5546\u54C1
+order.list.for.batch.shipment.does.not.exist=\u6279\u91CF\u53D1\u8D27\u8BA2\u5355\u8BA2\u5355\u5217\u8868\u4E0D\u5B58\u5728\uFF1A
+main.group.buying.product.does.not.exist=\u62FC\u56E2\u4E3B\u5546\u54C1\u4E0D\u5B58\u5728
+current.order.status.does.not.allow.progression.to.pending.shipment.orderid=\u5F53\u524D\u8BA2\u5355\u72B6\u6001\u4E0D\u5141\u8BB8\u63A8\u8FDB\u5230\u5F85\u53D1\u8D27order.id\uFF1A
+id=ID
+order.number=\u8BA2\u5355\u53F7
+user.id=\u7528\u6237ID
+user.registered.mobile.phone.number=\u7528\u6237\u6CE8\u518C\u624B\u673A\u53F7
+order.status=\u8BA2\u5355\u72B6\u6001
+order.amount=\u8BA2\u5355\u91D1\u989D
+order.placement.time=\u4E0B\u5355\u65F6\u95F4
+payment.time=\u652F\u4ED8\u65F6\u95F4
+product.id=\u5546\u54C1ID
+product.name=\u5546\u54C1\u540D\u79F0
+product.specification=\u5546\u54C1\u89C4\u683C
+purchase.quantity=\u8D2D\u4E70\u6570\u91CF
+recipient.name=\u6536\u4EF6\u4EBA\u59D3\u540D
+recipient.mobile.phone=\u6536\u4EF6\u4EBA\u624B\u673A
+recipient.detailed.address=\u6536\u4EF6\u4EBA\u8BE6\u7EC6\u5730\u5740
+postcode=\u90AE\u7F16
+courier.company=\u5FEB\u9012\u516C\u53F8
+express.delivery.courier=\u5FEB\u9012
+please.select.a.delivery.address=\u8BF7\u9009\u62E9\u6536\u8D27\u5730\u5740
+delivery.address.is.incorrect=\u6536\u8D27\u5730\u5740\u6709\u8BEF
+order.is.empty.orderid=\u8BA2\u5355\u4E3A\u7A7AorderId:
+order.has.been.paid.orderid=\u8BA2\u5355\u5DF2\u652F\u4ED8orderId:
+current.status.does.not.support.payment.orderid=\u5F53\u524D\u72B6\u6001\u4E0D\u652F\u6301\u53BB\u652F\u6301\u53BB\u652F\u4ED8orderId:
+failed.to.obtain.user.wallet.account=\u83B7\u53D6\u7528\u6237\u94B1\u5305\u8D26\u6237\u5931\u8D25
+payment.failed=\u652F\u4ED8\u5931\u8D25
+order.does.not.exist.when.initiating.active.refund.id=\u8BA2\u5355\u4E3B\u52A8\u9000\u6B3E\u65F6\u8BA2\u5355\u4E0D\u5B58\u5728id:
+current.status.does.not.support.refund.cancellation.id=\u5F53\u524D\u72B6\u6001\u4E0D\u652F\u6301\u9000\u6B3E\u5173\u95EDid\uFF1A
+current.member.is.the.group.leader.and.the.group.has.not.drawn.a.prize.refund.is.temporarily.not.supported=\u5F53\u524D\u6210\u5458\u662F\u56E2\u957F\uFF0C\u4E14\u8BE5\u56E2\u672A\u5F00\u5956\uFF0C\u6682\u65F6\u4E0D\u652F\u6301\u9000\u6B3E\uFF1A
+group.buying.information.does.not.exist.when.closing.due.to.group.buying.timeout.id=\u62FC\u56E2\u65F6\u95F4\u8FC7\u671F\u5173\u95ED\u65F6\u65F6\u62FC\u56E2\u4FE1\u606F\u4E0D\u5B58\u5728ID\uFF1A
+refund.failed.please.initiate.again=\u9000\u6B3E\u5931\u8D25\u8BF7\u91CD\u65B0\u53D1\u8D77
+current.status.does.not.support.cancellation=\u5F53\u524D\u72B6\u6001\u4E0D\u652F\u6301\u53D6\u6D88
+group.buying.information.does.not.exist.when.canceling.the.order.id=\u8BA2\u5355\u53D6\u6D88\u65F6\u62FC\u56E2\u4FE1\u606F\u4E0D\u5B58\u5728ID\uFF1A
+current.status.does.not.support.refund.cancellation=\u5F53\u524D\u72B6\u6001\u4E0D\u652F\u6301\u9000\u6B3E\u5173\u95ED
+group.buying.information.does.not.exist.when.initiating.active.refund.id=\u4E3B\u52A8\u53D1\u8D77\u9000\u6B3E\u65F6\u62FC\u56E2\u4FE1\u606F\u4E0D\u5B58\u5728ID\uFF1A
+refund.failed.please.initiate.again.orderid=\u9000\u6B3E\u5931\u8D25\u8BF7\u91CD\u65B0\u53D1\u8D77orderId:
+current.status.does.not.support.refund.cancellationid=\u5F53\u524D\u72B6\u6001\u4E0D\u652F\u6301\u9000\u6B3E\u5173\u95ED:id
+scheduled.task.failed.to.close.the.order.order.id=\u5B9A\u65F6\u4EFB\u52A1\u5173\u5355\u5904\u7406\u5931\u8D25\u8BA2\u5355id\uFF1A
+order.does.not.exist.when.canceling.the.order.id=\u8BA2\u5355\u53D6\u6D88\u65F6\u8BA2\u5355\u4E0D\u5B58\u5728id:
+failed.to.process.ordertimeoutautomaticcancel=orderTimeoutAutomaticCancel\u5904\u7406\u5931\u8D25
+current.status.does.not.support.shipment=\u5F53\u524D\u72B6\u6001\u4E0D\u652F\u6301\u53D1\u8D27
+courier.tracking.number.or.courier.company.cannot.be.empty=\u5FEB\u9012\u5355\u53F7\u6216\u5FEB\u9012\u516C\u53F8\u4E0D\u80FD\u4E3A\u7A7A
+purchased.product.information.does.not.exist=\u8D2D\u4E70\u7684\u5546\u54C1\u4FE1\u606F\u4E0D\u5B58\u5728
+purchased.product.has.been.deleted=\u8D2D\u4E70\u7684\u5546\u54C1\u5DF2\u5220\u9664
+purchased.product.has.been.removed.from.shelves=\u8D2D\u4E70\u7684\u5546\u54C1\u5DF2\u4E0B\u67B6
+insufficient.inventory.for.the.purchased.product=\u8D2D\u4E70\u7684\u5546\u54C1\u5E93\u5B58\u4E0D\u8DB3
+specification.information.of.the.purchased.product.does.not.exist=\u8D2D\u4E70\u7684\u5546\u54C1\u89C4\u683C\u4FE1\u606F\u4E0D\u5B58\u5728
+order.does.not.exist.orderid=\u8BA2\u5355\u4E0D\u5B58\u5728OrderId\uFF1A
+group.buying.data.does.not.exist=\u62FC\u56E2\u6570\u636E\u4E0D\u5B58\u5728\uFF1A
+current.status.does.not.support.receipt.confirmation.storeorder=\u5F53\u524D\u72B6\u6001\u4E0D\u652F\u6301\u7B7E\u6536storeOrder:
+automatic.order.receipt.confirmation=\u8BA2\u5355\u81EA\u52A8\u7B7E\u6536
+product.export.template=\u5546\u54C1\u5BFC\u51FA\u6A21\u677F
+you.have.already.checked.in.today=\u4ECA\u5929\u5DF2\u7ECF\u7B7E\u5230\u8FC7\u4E86\uFF01
+
+