فهرست منبع

Merge branch 'master' of http://124.220.229.80:9093/root/mall

linxk 2 هفته پیش
والد
کامیت
8de2ab7976
64فایلهای تغییر یافته به همراه2322 افزوده شده و 920 حذف شده
  1. 59 0
      mall-api/src/main/java/com/txz/mall/dto/CreateSequenceDTO.java
  2. 5 6
      mall-api/src/main/java/com/txz/mall/enums/NoticeEnum.java
  3. 5 2
      mall-api/src/main/java/com/txz/mall/service/NoticeDubboService.java
  4. 6 0
      mall-api/src/main/java/com/txz/mall/service/OrderDubboService.java
  5. 119 108
      mall-service/src/main/java/com/txz/mall/business/impl/OrderServiceBusinessImpl.java
  6. 15 5
      mall-service/src/main/java/com/txz/mall/business/impl/PinkServiceBusinessImpl.java
  7. 4 4
      mall-service/src/main/java/com/txz/mall/controller/CombinationController.java
  8. 13 0
      mall-service/src/main/java/com/txz/mall/controller/FlashActivityController.java
  9. 4 0
      mall-service/src/main/java/com/txz/mall/controller/OrderController.java
  10. 20 1
      mall-service/src/main/java/com/txz/mall/controller/ProductController.java
  11. 122 62
      mall-service/src/main/java/com/txz/mall/controller/appcontroller/AppCombinationController.java
  12. 2 2
      mall-service/src/main/java/com/txz/mall/controller/appcontroller/AppNoticeController.java
  13. 35 16
      mall-service/src/main/java/com/txz/mall/controller/appcontroller/AppOrderController.java
  14. 12 35
      mall-service/src/main/java/com/txz/mall/controller/appcontroller/AppUserAddressController.java
  15. 2 1
      mall-service/src/main/java/com/txz/mall/controller/appcontroller/MidFavoriteController.java
  16. 6 2
      mall-service/src/main/java/com/txz/mall/controller/i18nTestController.java
  17. 2 1
      mall-service/src/main/java/com/txz/mall/core/AuthService.java
  18. 81 80
      mall-service/src/main/java/com/txz/mall/core/ResultCode.java
  19. 7 0
      mall-service/src/main/java/com/txz/mall/dao/CreateSequenceMapper.java
  20. 12 1
      mall-service/src/main/java/com/txz/mall/dao/StoreCombinationMapper.java
  21. 7 2
      mall-service/src/main/java/com/txz/mall/dao/StoreOrderMapper.java
  22. 8 0
      mall-service/src/main/java/com/txz/mall/dao/StorePinkMapper.java
  23. 12 0
      mall-service/src/main/java/com/txz/mall/dao/impl/StoreCombinationMapperImpl.java
  24. 3 2
      mall-service/src/main/java/com/txz/mall/dubbo/client/CifRedEnvelopeDubboServiceClient.java
  25. 3 1
      mall-service/src/main/java/com/txz/mall/dubbo/client/OperatingConfigDubboServiceClient.java
  26. 15 11
      mall-service/src/main/java/com/txz/mall/dubbo/impl/NoticeDubboServiceImpl.java
  27. 12 0
      mall-service/src/main/java/com/txz/mall/dubbo/impl/OrderDubboServiceImpl.java
  28. 38 0
      mall-service/src/main/java/com/txz/mall/enums/SpuSortEnum.java
  29. 53 0
      mall-service/src/main/java/com/txz/mall/model/CreateSequence.java
  30. 56 51
      mall-service/src/main/java/com/txz/mall/model/StoreCombination.java
  31. 11 0
      mall-service/src/main/java/com/txz/mall/service/CreateSequenceService.java
  32. 1 1
      mall-service/src/main/java/com/txz/mall/service/NoticeService.java
  33. 13 5
      mall-service/src/main/java/com/txz/mall/service/StoreCombinationService.java
  34. 7 0
      mall-service/src/main/java/com/txz/mall/service/StoreFlashActivityService.java
  35. 6 0
      mall-service/src/main/java/com/txz/mall/service/StoreOrderService.java
  36. 11 0
      mall-service/src/main/java/com/txz/mall/service/UserAddressService.java
  37. 3 1
      mall-service/src/main/java/com/txz/mall/service/impl/CategoryServiceImpl.java
  38. 22 0
      mall-service/src/main/java/com/txz/mall/service/impl/CreateSequenceServiceImpl.java
  39. 2 1
      mall-service/src/main/java/com/txz/mall/service/impl/NoticeServiceImpl.java
  40. 82 26
      mall-service/src/main/java/com/txz/mall/service/impl/StoreCombinationServiceImpl.java
  41. 137 77
      mall-service/src/main/java/com/txz/mall/service/impl/StoreFlashActivityServiceImpl.java
  42. 282 253
      mall-service/src/main/java/com/txz/mall/service/impl/StoreOrderServiceImpl.java
  43. 32 8
      mall-service/src/main/java/com/txz/mall/service/impl/StorePinkServiceImpl.java
  44. 3 2
      mall-service/src/main/java/com/txz/mall/service/impl/StorePinkSummaryServiceImpl.java
  45. 2 1
      mall-service/src/main/java/com/txz/mall/service/impl/StoreProductRuleServiceImpl.java
  46. 56 12
      mall-service/src/main/java/com/txz/mall/service/impl/StoreProductServiceImpl.java
  47. 58 0
      mall-service/src/main/java/com/txz/mall/service/impl/UserAddressServiceImpl.java
  48. 2 1
      mall-service/src/main/java/com/txz/mall/service/impl/UserSignServiceImpl.java
  49. 19 4
      mall-service/src/main/java/com/txz/mall/util/I18nUtil.java
  50. 23 6
      mall-service/src/main/java/com/txz/mall/util/OrderUtils.java
  51. 18 0
      mall-service/src/main/java/com/txz/mall/web/param/result/StoreCombinationVO.java
  52. 3 2
      mall-service/src/main/java/com/txz/mall/web/ro/SendNoticeRO.java
  53. 37 0
      mall-service/src/main/java/com/txz/mall/web/vo/SpuListRO.java
  54. 138 120
      mall-service/src/main/java/dto/StoreOrderDTO.java
  55. 20 0
      mall-service/src/main/java/vo/PendingRedDotsVO.java
  56. 3 0
      mall-service/src/main/java/vo/StoreCombinationRankVO.java
  57. 6 0
      mall-service/src/main/java/vo/StorePinkDetailVO.java
  58. 0 1
      mall-service/src/main/resources/i18n/messages.properties
  59. 147 1
      mall-service/src/main/resources/i18n/messages_bn_BD.properties
  60. 142 2
      mall-service/src/main/resources/i18n/messages_en_US.properties
  61. 158 2
      mall-service/src/main/resources/i18n/messages_zh_CN.properties
  62. 11 0
      mall-service/src/main/resources/mapper/CreateSequenceMapper.xml
  63. 128 0
      mall-service/src/main/resources/mapper/StoreCombinationMapper.xml
  64. 1 1
      mall-service/src/test/java/CodeGenerator.java

+ 59 - 0
mall-api/src/main/java/com/txz/mall/dto/CreateSequenceDTO.java

@@ -0,0 +1,59 @@
+/*
+*
+* CreateSequenceDTO.java
+* Copyright(C) 2017-2020 fendo公司
+* @date 2025-09-10
+*/
+package com.txz.mall.dto;
+
+import java.io.Serializable;
+import java.util.Date;
+
+public class CreateSequenceDTO implements Serializable {
+    /**
+     * 
+     */
+    private Long id;
+
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+
+    /**
+     * m_create_sequence
+     */
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 
+     * @return id 
+     */
+    public Long getId() {
+        return id;
+    }
+
+    /**
+     * 
+     * @param id 
+     */
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    /**
+     * 创建时间
+     * @return create_time 创建时间
+     */
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    /**
+     * 创建时间
+     * @param createTime 创建时间
+     */
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+}

+ 5 - 6
mall-api/src/main/java/com/txz/mall/enums/NoticeEnum.java

@@ -55,18 +55,17 @@ public enum NoticeEnum {
      * 收益通知_开团奖励
      */
     REWARD_OPEN_GROUP_BUY("REWARD_OPEN_GROUP_BUY", "收益通知_开团奖励"),
-
-
+    
     /**
      * 收益通知_一级佣金奖励
      */
-    REWARD_FIRST_COMMISSION( "REWARD_FIRST_COMMISSION", "一级佣金"),
-
+    REWARD_FIRST_COMMISSION("REWARD_FIRST_COMMISSION", "一级佣金"),
+    
     /**
      * 收益通知_二级佣金奖励
      */
-    REWARD_SECONDARY_COMMISSION( "REWARD_SECONDARY_COMMISSION", "二级佣金"),
-
+    REWARD_SECONDARY_COMMISSION("REWARD_SECONDARY_COMMISSION", "二级佣金"),
+    
     /**
      * 收益通知_邀请好友奖励
      */

+ 5 - 2
mall-api/src/main/java/com/txz/mall/service/NoticeDubboService.java

@@ -15,12 +15,15 @@ public interface NoticeDubboService {
      */
     void addOtherNotice(Long otherId, String noticeTitle, String noticeMessage, String pages, Long... uids);
     
-    
+    /**
+     * 添加订单通知
+     */
+    void addOrderNotice(NoticeEnum noticeType, String noticeMessage, Long... uids);
     
     /**
      * 添加收益通知
      */
-    void addRewardNotice(NoticeEnum noticeType, Long... uids);
+    void addRewardNotice(NoticeEnum noticeType, String noticeMessage, Long... uids);
     
     /**
      * 添加充值/提现通知

+ 6 - 0
mall-api/src/main/java/com/txz/mall/service/OrderDubboService.java

@@ -17,4 +17,10 @@ public interface OrderDubboService {
      */
     void orderTimeoutAutomaticCancel();
 
+    /**
+     * 活动状态定时任务
+     */
+    void activityStatusJudgmentTimedTask();
+
+
 }

+ 119 - 108
mall-service/src/main/java/com/txz/mall/business/impl/OrderServiceBusinessImpl.java

@@ -4,15 +4,18 @@ import cn.hutool.core.date.DateUtil;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.txz.cif.dto.EarningsDTO;
+import com.txz.cif.dto.OrderParam;
 import com.txz.mall.business.OrderServiceBusiness;
 import com.txz.mall.core.RedisUtil;
 import com.txz.mall.core.ServiceException;
+import com.txz.mall.dao.StoreOrderMapper;
 import com.txz.mall.dao.StorePinkMapper;
 import com.txz.mall.dubbo.client.CifRedEnvelopeDubboServiceClient;
 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;
@@ -21,6 +24,7 @@ import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.ObjectUtils;
 import tk.mybatis.mapper.entity.Condition;
 import tk.mybatis.mapper.entity.Example;
+import tk.mybatis.mapper.entity.SqlsCriteria;
 import vo.StoreCombinationRankVO;
 import vo.StoreOrderVO;
 
@@ -45,21 +49,22 @@ public class OrderServiceBusinessImpl implements OrderServiceBusiness {
     private final StorePinkService storePinkService;
     private final RedisUtil redisUtil;
     private final CifRedEnvelopeDubboServiceClient cifRedEnvelopeDubboServiceClient;
+    private final StoreOrderMapper storeOrderMapper;
 
     @Override
-    public StoreOrderVO orderDetail(Long id ,String orderNo) {
+    public StoreOrderVO orderDetail(Long id, String orderNo) {
         StoreOrderVO vo = new StoreOrderVO();
         StoreOrder storeOrder = null;
-        if(!ObjectUtils.isEmpty(id)){
-            storeOrder =   storeOrderService.findById(id);
-        }else if(!ObjectUtils.isEmpty(orderNo)){
-            storeOrder =  storeOrderService.findBy("orderId",orderNo);
+        if (!ObjectUtils.isEmpty(id)) {
+            storeOrder = storeOrderService.findById(id);
+        } else if (!ObjectUtils.isEmpty(orderNo)) {
+            storeOrder = storeOrderService.findBy("orderId", orderNo);
         }
 
-        if(ObjectUtils.isEmpty(storeOrder)){
-            throw new ServiceException("订单不存在 ID:"+id);
+        if (ObjectUtils.isEmpty(storeOrder)) {
+            throw new ServiceException(I18nUtil.get("order.does.not.exist.id") + id);
         }
-        id =storeOrder.getId();
+        id = storeOrder.getId();
         Condition infoCondition = new Condition(StoreOrderInfo.class);
         Example.Criteria infoCriteria = infoCondition.createCriteria();
         infoCriteria.andEqualTo("isDelete", 0);
@@ -73,28 +78,31 @@ public class OrderServiceBusinessImpl implements OrderServiceBusiness {
         storePinkCriteria.andEqualTo("orderIdKey", id);
 
         List<StorePink> byCondition = storePinkService.findByCondition(storePinkCondition);
-        if(!org.springframework.util.CollectionUtils.isEmpty(byCondition)){
+        if (!org.springframework.util.CollectionUtils.isEmpty(byCondition)) {
             StorePink storePink = byCondition.get(0);
             vo.setStorePink(storePink);
         }
-//        UserDTO user = userDubboServiceClient.getUser(storeOrder.getUid());
+        //        UserDTO user = userDubboServiceClient.getUser(storeOrder.getUid());
         UserAddress userAddress = userAddressService.findById(storeOrder.getAddressId());
 
 
-        List<String> orderCodeList = new ArrayList<>();
-        orderCodeList.add(storeOrder.getOrderId());
+        List<OrderParam> orderCodeList = new ArrayList<>();
+        OrderParam orderParam = new OrderParam();
+        orderParam.setOrderNo(storeOrder.getOrderId());
+        orderParam.setUserId(storeOrder.getUid());
+        orderCodeList.add(orderParam);
 
         Map<String, EarningsDTO> collect = new HashMap<>();
-        //查询订单收益
+        // 查询订单收益
         List<EarningsDTO> earningsByOrders = cifRedEnvelopeDubboServiceClient.getEarningsByOrders(orderCodeList);
-        if(!org.springframework.util.CollectionUtils.isEmpty(earningsByOrders)){
-             collect = earningsByOrders.stream().filter(a -> !ObjectUtils.isEmpty(a)).collect(Collectors.toMap(EarningsDTO::getOrderNo, a -> a, (b, c) -> c));
+        if (!org.springframework.util.CollectionUtils.isEmpty(earningsByOrders)) {
+            collect = earningsByOrders.stream().filter(a -> !ObjectUtils.isEmpty(a)).collect(Collectors.toMap(EarningsDTO::getOrderNo, a -> a, (b, c) -> c));
 
         }
 
         BeanUtils.copyProperties(storeOrder, vo);
         EarningsDTO earningsDTO = collect.get(storeOrder.getOrderId());
-        if(!ObjectUtils.isEmpty(earningsDTO)){
+        if (!ObjectUtils.isEmpty(earningsDTO)) {
             vo.setBrokerage(earningsDTO.getEarnings());
         }
 
@@ -102,14 +110,67 @@ public class OrderServiceBusinessImpl implements OrderServiceBusiness {
         vo.setOrderAddressVO(userAddress);
         vo.setOrderStatusVO(logList);
 
-//        vo.setUserVO(user);
+        //        vo.setUserVO(user);
         return vo;
     }
 
-//
-//    @Override
-//    public List<StoreCombinationRankVO> getRank() {
-//        List<StoreCombinationRankVO> list = new ArrayList<>();
+    //
+    //    @Override
+    //    public List<StoreCombinationRankVO> getRank() {
+    //        List<StoreCombinationRankVO> list = new ArrayList<>();
+    //        String key = "order:rank:";
+    //        boolean exists = redisUtil.hasKey("order:rank");
+    //        if (exists) {
+    //            String orderVoString = redisUtil.get(key).toString();
+    //            list = JSONObject.parseArray(orderVoString, StoreCombinationRankVO.class);
+    //            return list;
+    //        }
+    //
+    //        Condition orderCondition = new Condition(StoreOrder.class);
+    //        Example.Criteria orderCriteria = orderCondition.createCriteria();
+    //        Date date = new Date();
+    //        Date startDate = DateUtil.beginOfDay(DateUtils.addDays(date, -7));
+    //        Date endDate = DateUtil.endOfDay(date);
+    //        orderCriteria.andEqualTo("isDelete", 0);
+    //        orderCriteria.andBetween("createTime", startDate, endDate);
+    //        orderCriteria.andEqualTo("paid", 1);
+    //        List<StoreOrder> orderList = storeOrderService.findByCondition(orderCondition);
+    //        Map<Long, Long> combinationCountMap = orderList.stream()
+    //                .collect(Collectors.groupingBy(
+    //                        StoreOrder::getCombinationId,
+    //                        Collectors.counting()
+    //                ));
+    //
+    //        // 获取前10个热门商品组合
+    //        List<Map.Entry<Long, Long>> topCombinations = combinationCountMap.entrySet()
+    //                .stream()
+    //                .sorted(Map.Entry.<Long, Long>comparingByValue().reversed())
+    //                .collect(Collectors.toList());
+    //
+    //        List<StoreCombination> combinationList = storeCombinationService.findByIds(String.join(",", topCombinations.stream().map(Map.Entry::getKey).map(Object::toString).collect(Collectors.toList())));
+    //        for (StoreCombination storeCombination : combinationList) {
+    //            List<StoreCombination> collect = combinationList.stream().filter(c -> c.getId().equals(storeCombination.getId())).collect(Collectors.toList());
+    //            if (CollectionUtils.isNotEmpty(collect)) {
+    //                StoreCombination combination = collect.get(0);
+    //                StoreCombinationRankVO rankVO = new StoreCombinationRankVO();
+    //                rankVO.setProductId(combination.getProductId());
+    //                rankVO.setProductName(combination.getProductName());
+    //                rankVO.setSales(combination.getSales());
+    //                rankVO.setImage(combination.getImage());
+    //                rankVO.setPrice(combination.getPrice());
+    //                list.add(rankVO);
+    //            }
+    //        }
+    //        redisUtil.set(key, list);
+    //        return list;
+    //    }
+    private StorePinkMapper storePinkMapper;
+
+    @Override
+    public List<StoreCombinationRankVO> getRank() {
+
+
+        List<StoreCombinationRankVO> list = new ArrayList<>();
 //        String key = "order:rank:";
 //        boolean exists = redisUtil.hasKey("order:rank");
 //        if (exists) {
@@ -117,101 +178,51 @@ public class OrderServiceBusinessImpl implements OrderServiceBusiness {
 //            list = JSONObject.parseArray(orderVoString, StoreCombinationRankVO.class);
 //            return list;
 //        }
-//
-//        Condition orderCondition = new Condition(StoreOrder.class);
-//        Example.Criteria orderCriteria = orderCondition.createCriteria();
-//        Date date = new Date();
-//        Date startDate = DateUtil.beginOfDay(DateUtils.addDays(date, -7));
-//        Date endDate = DateUtil.endOfDay(date);
-//        orderCriteria.andEqualTo("isDelete", 0);
-//        orderCriteria.andBetween("createTime", startDate, endDate);
-//        orderCriteria.andEqualTo("paid", 1);
-//        List<StoreOrder> orderList = storeOrderService.findByCondition(orderCondition);
-//        Map<Long, Long> combinationCountMap = orderList.stream()
-//                .collect(Collectors.groupingBy(
-//                        StoreOrder::getCombinationId,
-//                        Collectors.counting()
-//                ));
-//
-//        // 获取前10个热门商品组合
-//        List<Map.Entry<Long, Long>> topCombinations = combinationCountMap.entrySet()
-//                .stream()
-//                .sorted(Map.Entry.<Long, Long>comparingByValue().reversed())
-//                .collect(Collectors.toList());
-//
-//        List<StoreCombination> combinationList = storeCombinationService.findByIds(String.join(",", topCombinations.stream().map(Map.Entry::getKey).map(Object::toString).collect(Collectors.toList())));
-//        for (StoreCombination storeCombination : combinationList) {
-//            List<StoreCombination> collect = combinationList.stream().filter(c -> c.getId().equals(storeCombination.getId())).collect(Collectors.toList());
-//            if (CollectionUtils.isNotEmpty(collect)) {
-//                StoreCombination combination = collect.get(0);
-//                StoreCombinationRankVO rankVO = new StoreCombinationRankVO();
-//                rankVO.setProductId(combination.getProductId());
-//                rankVO.setProductName(combination.getProductName());
-//                rankVO.setSales(combination.getSales());
-//                rankVO.setImage(combination.getImage());
-//                rankVO.setPrice(combination.getPrice());
-//                list.add(rankVO);
-//            }
-//        }
-//        redisUtil.set(key, list);
-//        return list;
-//    }
 
+        Date date = new Date();
+        Date date1 = DateUtils.addDays(date, -7);
+       // List<Map<String, Object>> rank = storeOrderMapper.getRank(date1);
+        List<Map<String, Object>> rank = storePinkMapper.getRank(date1);
+
+
+        if (!CollectionUtils.isEmpty(rank)) {
+            Map<Long, Map<String, Object>> saleMap = rank.stream().collect(Collectors.toMap(a -> Long.valueOf(a.get("pid")+"") , a -> a, (b, c) -> c));
+            List<Long> pidList = rank.stream().map(a -> Long.valueOf(a.get("pid")+"")).collect(Collectors.toList());
+
+            Condition storeCombinationCondition = new Condition(StoreCombination.class);
+            Example.Criteria storeCombinationCriteria = storeCombinationCondition.createCriteria();
+            storeCombinationCriteria.andIn("productId", pidList);
+            List<StoreCombination> combinationList = storeCombinationService.findByCondition(storeCombinationCondition);
+            Map<Long, StoreCombination> storeCombinationMap = new HashMap<>();
+            if(!CollectionUtils.isEmpty(combinationList)){
+                 storeCombinationMap = combinationList.stream().collect(Collectors.toMap(StoreCombination::getProductId, a -> a, (b, c) -> c));
+            }
+            for (Map<String, Object> stringObjectMap : rank) {
 
 
-    @Override
-    public List<StoreCombinationRankVO> getRank() {
-        List<StoreCombinationRankVO> list = new ArrayList<>();
-        String key = "order:rank:";
-        boolean exists = redisUtil.hasKey("order:rank");
-        if (exists) {
-            String orderVoString = redisUtil.get(key).toString();
-            list = JSONObject.parseArray(orderVoString, StoreCombinationRankVO.class);
-            return list;
-        }
+                Object pid = stringObjectMap.get("pid");
+                Object num = stringObjectMap.get("num");
 
-        Condition orderCondition = new Condition(StoreOrder.class);
-        Example.Criteria orderCriteria = orderCondition.createCriteria();
-        Date date = new Date();
-        Date startDate = DateUtil.beginOfDay(DateUtils.addDays(date, -7));
-        Date endDate = DateUtil.endOfDay(date);
-        orderCriteria.andEqualTo("isDelete", 0);
-        orderCriteria.andBetween("createTime", startDate, endDate);
-        List<Integer> statusList = new ArrayList<>();
-        statusList.add(PinkOrderStatusEnum.GROUP_ORDER_TO_RECEIVE.getKey());
-        statusList.add(PinkOrderStatusEnum.GROUP_ORDER_TO_SHIP.getKey());
-        statusList.add(PinkOrderStatusEnum.GROUP_ORDER_COMPLETED.getKey());
-        statusList.add(PinkOrderStatusEnum.GROUP_ORDER_CLOSED.getKey());
-        orderCriteria.andIn("status", statusList);
-        List<StoreOrder> orderList = storeOrderService.findByCondition(orderCondition);
-        Map<Long, Long> combinationCountMap = orderList.stream()
-                .collect(Collectors.groupingBy(
-                        StoreOrder::getCombinationId,
-                        Collectors.counting()
-                ));
-
-        // 获取前10个热门商品组合
-        List<Map.Entry<Long, Long>> topCombinations = combinationCountMap.entrySet()
-                .stream()
-                .sorted(Map.Entry.<Long, Long>comparingByValue().reversed())
-                .limit(10)
-                .collect(Collectors.toList());
-
-        List<StoreCombination> combinationList = storeCombinationService.findByIds(String.join(",", topCombinations.stream().map(Map.Entry::getKey).map(Object::toString).collect(Collectors.toList())));
-        for (StoreCombination storeCombination : combinationList) {
-            List<StoreCombination> collect = combinationList.stream().filter(c -> c.getId().equals(storeCombination.getId())).collect(Collectors.toList());
-            if (CollectionUtils.isNotEmpty(collect)) {
-                StoreCombination combination = collect.get(0);
+                StoreCombination storeCombination = storeCombinationMap.get(Long.parseLong(pid + ""));
                 StoreCombinationRankVO rankVO = new StoreCombinationRankVO();
-                rankVO.setProductId(combination.getProductId());
-                rankVO.setProductName(combination.getProductName());
-                rankVO.setSales(combination.getSales());
-                rankVO.setImage(combination.getImage());
-                rankVO.setPrice(combination.getPrice());
+                rankVO.setProductId(storeCombination.getProductId());
+                rankVO.setProductName(storeCombination.getProductName());
+                rankVO.setSales(Integer.valueOf(num+""));
+                rankVO.setFicti(Integer.valueOf(num+""));
+                rankVO.setImage(storeCombination.getImage());
+                rankVO.setPrice(storeCombination.getPrice());
                 list.add(rankVO);
             }
+
+            if(!CollectionUtils.isEmpty(list)){
+                list =list.stream().sorted(Comparator.comparing(StoreCombinationRankVO::getSales).reversed()).collect(Collectors.toList());
+            }
+
         }
-        redisUtil.set(key, list);
+
+
+
+        // redisUtil.set(key, list);
         return list;
     }
 

+ 15 - 5
mall-service/src/main/java/com/txz/mall/business/impl/PinkServiceBusinessImpl.java

@@ -3,6 +3,7 @@ package com.txz.mall.business.impl;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.ObjectUtil;
 import com.txz.cif.dto.EarningsDTO;
+import com.txz.cif.dto.OrderParam;
 import com.txz.cif.dto.UserDTO;
 import com.txz.mall.business.PinkServiceBusiness;
 import com.txz.mall.core.ServiceException;
@@ -15,6 +16,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 +50,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())) {
@@ -88,7 +90,12 @@ public class PinkServiceBusinessImpl implements PinkServiceBusiness {
 
 
                 List<String> orderCodeList = pinkList.stream().map(StorePink::getOrderId).collect(Collectors.toList());
-
+                List<OrderParam> orderParamList = pinkList.stream().map(a -> {
+                    OrderParam orderParam = new OrderParam();
+                    orderParam.setUserId(a.getUid());
+                    orderParam.setOrderNo(a.getOrderId());
+                    return orderParam;
+                }).collect(Collectors.toList());
 
                 Condition conditionOrder = new Condition(StoreOrder.class);
                 Example.Criteria criteriaOrder = conditionOrder.createCriteria();
@@ -97,7 +104,7 @@ public class PinkServiceBusinessImpl implements PinkServiceBusiness {
                 List<StoreOrder> storeOrderList = storeOrderService.findByCondition(conditionOrder);
 
                 //查询订单收益
-                List<EarningsDTO> earningsByOrders = cifRedEnvelopeDubboServiceClient.getEarningsByOrders(orderCodeList);
+                List<EarningsDTO> earningsByOrders = cifRedEnvelopeDubboServiceClient.getEarningsByOrders(orderParamList);
                 if(!CollectionUtils.isEmpty(earningsByOrders)){
                     earningsDTOMap = earningsByOrders.stream().filter(a->!ObjectUtils.isEmpty(a)).collect(Collectors.toMap(EarningsDTO::getOrderNo, a -> a, (b, c) -> c));
 
@@ -139,6 +146,9 @@ public class PinkServiceBusinessImpl implements PinkServiceBusiness {
                         }
                         storePinkDetailVO.setNickname(userDTO.getName());
                         storePinkDetailVO.setUid(userDTO.getId());
+                        storePinkDetailVO.setLId(pink.getLId());
+                        storePinkDetailVO.setKId(pink.getKId());
+                        storePinkDetailVO.setSpsId(pink.getSpsId());
                     }
                     resultList.add(storePinkDetailVO);
                 }
@@ -217,7 +227,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()) {

+ 4 - 4
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,13 +178,12 @@ 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);
         }
-        storeCombinationService.addActivityProduct(storeCombinationAddParam.getList(), storeCombinationAddParam.getActivityId());
-        return Result.success();
+        return Result.success(storeCombinationService.addActivityProduct(storeCombinationAddParam.getList(), storeCombinationAddParam.getActivityId()));
     }
 
     @GetMapping("/getActivityProductIds")

+ 13 - 0
mall-service/src/main/java/com/txz/mall/controller/FlashActivityController.java

@@ -118,4 +118,17 @@ public class FlashActivityController {
     }
 
 
+    @PostMapping("/activityStatusJudgmentTimedTask")
+    @ApiOperation(value = "activityStatusJudgmentTimedTask")
+    public Result activityStatusJudgmentTimedTask() {
+
+        storeFlashActivityService.activityStatusJudgmentTimedTask();
+
+        return Result.success();
+    }
+
+
+
+
+
 }

+ 4 - 0
mall-service/src/main/java/com/txz/mall/controller/OrderController.java

@@ -292,4 +292,8 @@ public class OrderController {
         return Result.success();
     }
 
+
+
+
+
 }

+ 20 - 1
mall-service/src/main/java/com/txz/mall/controller/ProductController.java

@@ -1,5 +1,6 @@
 package com.txz.mall.controller;
 
+import cn.hutool.core.util.ObjectUtil;
 import com.alibaba.fastjson.annotation.JSONField;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.github.pagehelper.PageHelper;
@@ -109,10 +110,13 @@ public class ProductController {
         Condition condition = new Condition(StoreProduct.class);
         Criteria criteria = condition.createCriteria();
         criteria.andEqualTo("isDelete", 0);
-        condition.setOrderByClause("create_time DESC");
+      //  condition.setOrderByClause("create_time DESC");
         if (StringUtils.isNotBlank(dto.getStoreName())) {
             criteria.andLike("storeName", "%" + dto.getStoreName() + "%");
         }
+        if (ObjectUtil.isNotNull(dto.getId())) {
+            criteria.andEqualTo("id", dto.getId());
+        }
         if (StringUtils.isNotBlank(dto.getItemNumber())) {
             criteria.andLike("itemNumber", "%" + dto.getItemNumber() + "%");
         }
@@ -128,6 +132,21 @@ public class ProductController {
         if (dto.getMinPrice() != null && dto.getMaxPrice() != null) {
             criteria.andBetween("price", dto.getMinPrice(), dto.getMaxPrice());
         }
+
+        if (new Integer(0).equals(dto.getSortWay())) {
+            condition.setOrderByClause("create_time desc");
+        } else if (new Integer(1).equals(dto.getSortWay())) {
+            condition.setOrderByClause("price asc");
+        } else if (new Integer(2).equals(dto.getSortWay())) {
+            condition.setOrderByClause("price desc");
+        } else if (new Integer(3).equals(dto.getSortWay())) {
+            condition.setOrderByClause("ficti asc");
+        } else if (new Integer(4).equals(dto.getSortWay())) {
+            condition.setOrderByClause("ficti desc");
+        }else{
+            condition.setOrderByClause("create_time desc");
+        }
+
         PageInfo pageInfo = null;
         try {
             List<StoreProduct> list = storeProductService.findByCondition(condition);

+ 122 - 62
mall-service/src/main/java/com/txz/mall/controller/appcontroller/AppCombinationController.java

@@ -1,5 +1,7 @@
 package com.txz.mall.controller.appcontroller;
 
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
@@ -8,16 +10,20 @@ 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.model.StoreProduct;
 import com.txz.mall.service.StoreCombinationService;
 import com.txz.mall.service.StoreOrderService;
+import com.txz.mall.service.StoreProductService;
+import com.txz.mall.util.I18nUtil;
 import com.txz.mall.web.param.addparam.StoreCombinationAddParam;
+import com.txz.mall.web.param.result.StoreCombinationVO;
+import com.txz.mall.web.vo.SpuListRO;
 import dto.GoPinkDTO;
-import dto.StoreProductDTO;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.springframework.util.ObjectUtils;
+import org.springframework.beans.BeanUtils;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 import tk.mybatis.mapper.entity.Condition;
@@ -25,8 +31,9 @@ import tk.mybatis.mapper.entity.Example;
 import vo.StoreCombinationRankVO;
 
 import javax.annotation.Resource;
-import java.util.Date;
+import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 import java.util.stream.Collectors;
 
 /**
@@ -75,7 +82,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();
@@ -126,70 +133,123 @@ public class AppCombinationController {
         return Result.success(storeCombination);
     }
     
-    @PostMapping("/app/list")
-    @ApiOperation(value = "拼团商品表获取列表")
-    public Result<List<StoreCombination>> list(@RequestBody StoreProductDTO dto) {
-        PageHelper.startPage(dto.getPage(), dto.getSize());
-        
-        Condition condition = new Condition(StoreCombination.class);
-        Example.Criteria criteria = condition.createCriteria();
-        criteria.andEqualTo("isDelete", 0);
-        criteria.andEqualTo("isShow", 1);
-        
-        if (dto.getSortWay() == null) {
-            dto.setSortWay(0);
-        }
-        switch (dto.getSortWay()) {
-            case 1:
-                condition.setOrderByClause("price ASC");
-                break;
-            case 2:
-                condition.setOrderByClause("price DESC");
-                break;
-            case 3:
-                condition.setOrderByClause("sales DESC");
-                break;
-            case 4:
-                condition.setOrderByClause("sales ASC");
-                break;
-            default:
-                condition.setOrderByClause("create_time DESC");
-                break;
-        }
-        
-        // if (dto.getIsNew() != null) {
-        //     criteria.andEqualTo("isNew", 1);
-        // }
-        
-        // if (dto.getMinPrice() != null && dto.getMaxPrice() != null) {
-        //     criteria.andBetween("price", dto.getMinPrice(), dto.getMaxPrice());
-        // }
-        if (dto.getMaxPrice() != null) {
-            criteria.andEqualTo("price", dto.getMaxPrice());
-        }
-        Date now = new Date();
-        criteria.andLessThanOrEqualTo("startTime", now);
-        criteria.andGreaterThanOrEqualTo("stopTime", now);
-        if(!ObjectUtils.isEmpty(dto.getStoreName())){
-            criteria.andLike("productName", "%" + dto.getStoreName() + "%");
-        }
+    // @PostMapping("/app/list")
+    // @ApiOperation(value = "拼团商品表获取列表")
+    // public Result<List<StoreCombination>> list(@RequestBody StoreProductDTO dto) {
+    //     PageHelper.startPage(dto.getPage(), dto.getSize());
+    //
+    //     Condition condition = new Condition(StoreCombination.class);
+    //     Example.Criteria criteria = condition.createCriteria();
+    //     criteria.andEqualTo("isDelete", 0);
+    //     criteria.andEqualTo("isShow", 1);
+    //
+    //     if (dto.getSortWay() == null) {
+    //         dto.setSortWay(0);
+    //     }
+    //     switch (dto.getSortWay()) {
+    //         case 1:
+    //             condition.setOrderByClause("price ASC");
+    //             break;
+    //         case 2:
+    //             condition.setOrderByClause("price DESC");
+    //             break;
+    //         case 3:
+    //             condition.setOrderByClause("sales DESC");
+    //             break;
+    //         case 4:
+    //             condition.setOrderByClause("sales ASC");
+    //             break;
+    //         default:
+    //             condition.setOrderByClause("create_time DESC");
+    //             break;
+    //     }
+    //
+    //     // if (dto.getIsNew() != null) {
+    //     //     criteria.andEqualTo("isNew", 1);
+    //     // }
+    //
+    //     // if (dto.getMinPrice() != null && dto.getMaxPrice() != null) {
+    //     //     criteria.andBetween("price", dto.getMinPrice(), dto.getMaxPrice());
+    //     // }
+    //     if (dto.getMaxPrice() != null) {
+    //         criteria.andEqualTo("price", dto.getMaxPrice());
+    //     }
+    //     Date now = new Date();
+    //     criteria.andLessThanOrEqualTo("startTime", now);
+    //     criteria.andGreaterThanOrEqualTo("stopTime", now);
+    //     if(!ObjectUtils.isEmpty(dto.getStoreName())){
+    //         criteria.andLike("productName", "%" + dto.getStoreName() + "%");
+    //     }
+    //
+    //     PageInfo pageInfo = null;
+    //     try {
+    //         List<StoreCombination> list = storeCombinationService.findByCondition(condition);
+    //         pageInfo = new PageInfo(list);
+    //     } catch (Exception e) {
+    //         log.error("查询对象操作异常e:{}", e);
+    //         return Result.fail(ResultCode.INTERNAL_SERVER_ERROR);
+    //     }
+    //     return Result.success(pageInfo);
+    // }
 
-        PageInfo pageInfo = null;
-        try {
-            List<StoreCombination> list = storeCombinationService.findByCondition(condition);
-            pageInfo = new PageInfo(list);
-        } catch (Exception e) {
-            log.error("查询对象操作异常e:{}", e);
-            return Result.fail(ResultCode.INTERNAL_SERVER_ERROR);
-        }
-        return Result.success(pageInfo);
+    @Resource
+    private StoreProductService storeProductService;
+
+    /**
+     * 商品列表
+     */
+    @GetMapping("/app/list")
+    public Result<PageInfo<List<StoreCombinationVO>>> spuList(@Validated SpuListRO ro, Integer page, Integer size) {
+        PageHelper.startPage(page, size);
+
+        List<StoreCombinationVO> storeCombinationVOS1 = storeCombinationService.spuList(ro);
+
+//        Condition condition = new Condition(StoreCombination.class);
+//        Example.Criteria criteria = condition.createCriteria();
+//        criteria.andEqualTo("isDelete", 0);
+//        criteria.andEqualTo("isShow", 1);
+//
+//        if (StrUtil.isNotBlank(ro.getStoreName())) {
+//            criteria.andLike("productName", "%" + ro.getStoreName() + "%");
+//        }
+//        if (StrUtil.isNotBlank(ro.getCateId())) {
+//            criteria.andEqualTo("cateId", ro.getCateId());
+//        }
+//        if (ObjectUtil.isNotNull(ro.getPrice())) {
+//            criteria.andEqualTo("price", ro.getPrice());
+//        }
+//        condition.setOrderByClause(ro.getSort().getSort());
+//        List<StoreCombination> byCondition = storeCombinationService.findByCondition(condition);
+//        List<StoreCombinationVO> storeCombinationVOS = new ArrayList<>();
+//
+//        if(!CollectionUtils.isEmpty(byCondition)){
+//            List<Long> productIdList = byCondition.stream().map(StoreCombination::getProductId).collect(Collectors.toList());
+//
+//            Condition conditionStoreProduct = new Condition(StoreProduct.class);
+//            Example.Criteria criteriaStoreProduct = conditionStoreProduct.createCriteria();
+//            criteriaStoreProduct.andEqualTo("isDelete", 0);
+//            criteriaStoreProduct.andIn("id",productIdList);
+//            List<StoreProduct> storeProductList = storeProductService.findByCondition(conditionStoreProduct);
+//            Map<Long, StoreProduct> storeProductMap = storeProductList.stream().collect(Collectors.toMap(StoreProduct::getId, a -> a, (b, c) -> c));
+//            for (StoreCombination storeCombination : byCondition) {
+//                StoreCombinationVO storeCombinationVO = new StoreCombinationVO();
+//                BeanUtils.copyProperties(storeCombination,storeCombinationVO);
+//                StoreProduct storeProduct = storeProductMap.get(storeCombination.getProductId());
+//                storeCombinationVO.setFicti(storeProduct.getFicti());
+//                storeCombinationVOS.add(storeCombinationVO);
+//            }
+//        }
+
+
+        return Result.success(new PageInfo(storeCombinationVOS1));
     }
     
+    
     @PostMapping("/addActivityProduct")
     @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);
@@ -254,7 +314,7 @@ public class AppCombinationController {
     @ApiOperation(value = "排行榜")
     @GetMapping(value = "/rank")
     public Result<List<StoreCombinationRankVO>> getRank(@RequestParam(defaultValue = "1") Integer page, @RequestParam(defaultValue = "10") Integer size) {
-        PageHelper.startPage(page, size);
+      //  PageHelper.startPage(page, size);
         PageInfo pageInfo = null;
         try {
             List<StoreCombinationRankVO> list = orderServiceBusiness.getRank();

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

@@ -56,7 +56,7 @@ public class AppNoticeController {
                 // .likeRight(ObjectUtil.isNotEmpty(type), Notice::getNoticeType, type.getData())
                 .eq(Notice::getUid, AuthService.getTokenUserId(null))
                 .eq(Notice::getUserDel, Boolean.FALSE)
-                .orderByAsc(Notice::getReadFlag)
+                // .orderByAsc(Notice::getReadFlag)
                 .orderByDesc(Notice::getCreateTime);
         if (ObjectUtil.isNotEmpty(type)) {
             eq.likeRight(Notice::getNoticeType, type.getData());
@@ -87,7 +87,7 @@ public class AppNoticeController {
     /**
      * 一键已读
      */
-    @PutMapping("readAll")
+    @GetMapping("readAll")
     public Result readAll(NoticeGroupEnum type) {
         LambdaUpdateWrapper<Notice> updateWrapper = Wrappers.<Notice>lambdaUpdate()
                 .eq(Notice::getUid, AuthService.getTokenUserId(null))

+ 35 - 16
mall-service/src/main/java/com/txz/mall/controller/appcontroller/AppOrderController.java

@@ -2,10 +2,12 @@ package com.txz.mall.controller.appcontroller;
 
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
+import com.txz.cif.dto.UserDTO;
 import com.txz.mall.business.OrderServiceBusiness;
 import com.txz.mall.core.AuthService;
 import com.txz.mall.core.Result;
 import com.txz.mall.core.ResultCode;
+import com.txz.mall.dubbo.client.CifUserDubboServiceClient;
 import com.txz.mall.model.StoreOrder;
 import com.txz.mall.service.StoreOrderService;
 import com.txz.mall.util.EasyToUseUtil;
@@ -41,6 +43,9 @@ public class AppOrderController {
     @Resource
     private OrderServiceBusiness orderServiceBusiness;
     
+    @Resource
+    private CifUserDubboServiceClient userDubboServiceClient;
+    
     @PostMapping("/add")
     @ApiOperation(value = "创建订单")
     public Result add(@Validated @RequestBody CreateOrderRequest orderRequest) {
@@ -50,6 +55,11 @@ public class AppOrderController {
             return Result.fail(ResultCode.OBJECT_IS_NULL);
         }
         Long tokenUserId = AuthService.getTokenUserId(null);
+        UserDTO user = userDubboServiceClient.getUser(tokenUserId);
+        if (user.getHasOrder() != 1) {
+            return Result.fail(ResultCode.USER_STATUS_IS_ERROR);
+        }
+        
         orderRequest.setUserId(tokenUserId);
         MyRecord record = storeOrderService.createOrder(orderRequest);
         return Result.success(record);
@@ -112,29 +122,29 @@ public class AppOrderController {
     }
     
     
-//    @GetMapping("/detail")
-//    @ApiOperation(value = "订单获取详情")
-//    public Result<StoreOrderVO> detail(@RequestParam Long id) {
-//        if (id == null) {
-//            return Result.fail(ResultCode.ID_IS_NULL);
-//        }
-//        StoreOrderVO vo = orderServiceBusiness.orderDetail(id,null);
-//        return Result.success(vo);
-//    }
-
+    //    @GetMapping("/detail")
+    //    @ApiOperation(value = "订单获取详情")
+    //    public Result<StoreOrderVO> detail(@RequestParam Long id) {
+    //        if (id == null) {
+    //            return Result.fail(ResultCode.ID_IS_NULL);
+    //        }
+    //        StoreOrderVO vo = orderServiceBusiness.orderDetail(id,null);
+    //        return Result.success(vo);
+    //    }
+    
     @GetMapping("/detail")
     @ApiOperation(value = "订单获取详情")
     public Result<StoreOrderVO> detail(@RequestParam(value = "id", required = false) Long id
-            ,@RequestParam(value = "orderNo", required = false) String orderNo) {
-
-        if (ObjectUtils.isEmpty(id) && ObjectUtils.isEmpty(orderNo) ) {
+            , @RequestParam(value = "orderNo", required = false) String orderNo) {
+        
+        if (ObjectUtils.isEmpty(id) && ObjectUtils.isEmpty(orderNo)) {
             return Result.fail(ResultCode.ID_IS_NULL);
         }
-        StoreOrderVO vo = orderServiceBusiness.orderDetail(id,orderNo);
+        StoreOrderVO vo = orderServiceBusiness.orderDetail(id, orderNo);
         return Result.success(vo);
     }
-
-
+    
+    
     @PostMapping("/list")
     @ApiOperation(value = "订单获取列表")
     public Result<List<StoreOrderVO>> list(@RequestBody StoreOrderDTO dto) {
@@ -261,4 +271,13 @@ public class AppOrderController {
     //        storeOrderService.importDelivery(file);
     //        return Result.success();
     //    }
+    
+    
+    @ApiOperation("待处理红点数")
+    @GetMapping("/pendingRedDots")
+    public Result pendingRedDots() {
+        return Result.success(storeOrderService.pendingRedDots());
+    }
+    
+    
 }

+ 12 - 35
mall-service/src/main/java/com/txz/mall/controller/appcontroller/AppUserAddressController.java

@@ -39,7 +39,7 @@ public class AppUserAddressController {
 
     @PostMapping("/add")
     @ApiOperation(value = "收获地址新增")
-    public Result<Long> add(@RequestBody UserAddress userAddress) {
+    public Result<Long> addUserAddress(@RequestBody UserAddress userAddress) {
         Long tokenUserId = AuthService.getTokenUserId(null);
         userAddress.setUid(tokenUserId);
         if (userAddress == null) {
@@ -48,10 +48,9 @@ public class AppUserAddressController {
         try {
             userAddress.setCreateTime(new Date());
             userAddress.setCreateUserId(userAddress.getUid());
-            userAddressService.save(userAddress);
-            if (userAddress.getIsDefault() == 1) {
-                checkOnlyAddress(userAddress, userAddress.getId());
-            }
+            userAddress.setUid(userAddress.getUid());
+            userAddressService.addUserAddress(userAddress);
+
         } catch (Exception e) {
             log.error("新增对象操作异常e:{}", e);
             return Result.fail(ResultCode.INTERNAL_SERVER_ERROR);
@@ -79,7 +78,7 @@ public class AppUserAddressController {
 
     @PutMapping("/update")
     @ApiOperation(value = "收获地址更新")
-    public Result update(@RequestBody UserAddress userAddress) {
+    public Result updateAddress(@RequestBody UserAddress userAddress) {
         Long tokenUserId = AuthService.getTokenUserId(null);
         userAddress.setUid(tokenUserId);
         if (userAddress == null) {
@@ -90,11 +89,9 @@ public class AppUserAddressController {
         }
         try {
             userAddress.setUpdateTime(new Date());
-//    		userAddress.setUpdateUserId(userId);
-            userAddressService.update(userAddress);
-            if (userAddress.getIsDefault() == 1) {
-                checkOnlyAddress(userAddress, userAddress.getId());
-            }
+     		userAddress.setUpdateUserId(tokenUserId);
+            userAddressService.updateAddress(userAddress);
+
         } catch (Exception e) {
             log.error("更新对象操作异常e:{}", e);
             return Result.fail(ResultCode.INTERNAL_SERVER_ERROR);
@@ -151,18 +148,10 @@ public class AppUserAddressController {
             return Result.fail(ResultCode.OBJECT_IS_NULL);
         }
         try {
-            UserAddress userAddress = new UserAddress();
-            userAddress.setUpdateTime(new Date());
-//    		userAddress.setUpdateUserId(userId);
-            userAddress.setId(id);
-            userAddress.setIsDefault(1);
-            userAddressService.update(userAddress);
 
-            UserAddress address = userAddressService.findById(id);
-            if (address == null) {
-                return Result.fail(ResultCode.OBJECT_IS_NULL);
-            }
-            checkOnlyAddress(address, id);
+            userAddressService.defaultAddress(id);
+
+
         } catch (Exception e) {
             log.error("更新对象操作异常e:{}", e);
             return Result.fail(ResultCode.INTERNAL_SERVER_ERROR);
@@ -180,17 +169,5 @@ public class AppUserAddressController {
         return Result.success(userAddress);
     }
 
-    private void checkOnlyAddress(UserAddress userAddress, Long defaultId) {
-        Condition condition = new Condition(UserAddress.class);
-        Example.Criteria criteria = condition.createCriteria();
-        criteria.andEqualTo("isDelete", 0);
-        criteria.andEqualTo("uid", userAddress.getUid());
-        criteria.andNotEqualTo("id", defaultId);
-        criteria.andEqualTo("isDefault", 1);
-        List<UserAddress> list = userAddressService.findByCondition(condition);
-        for (UserAddress ua : list) {
-            ua.setIsDefault(0);
-            userAddressService.update(ua);
-        }
-    }
+
 }

+ 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"));
         }
         
     }

+ 81 - 80
mall-service/src/main/java/com/txz/mall/core/ResultCode.java

@@ -7,124 +7,125 @@ public enum ResultCode {
     /**
      * 系统错误
      */
-    SUCCESS("200","成功"),//成功
-    FAIL("400","失败"),//失败
-    UNAUTHORIZED("401","未认证(签名错误)"),//未认证(签名错误)
-    NOT_FOUND("404","接口不存在"),//接口不存在
-    INTERNAL_SERVER_ERROR("500","服务器内部错误"),
-    PERMISSION_NOT_HAS("409","没有操作权限"),
-    BACKSTAGE_IS_ERROR("501","网关异常"),
-
-
+    SUCCESS("200", "成功"),// 成功
+    FAIL("400", "失败"),// 失败
+    UNAUTHORIZED("401", "未认证(签名错误)"),// 未认证(签名错误)
+    NOT_FOUND("404", "接口不存在"),// 接口不存在
+    INTERNAL_SERVER_ERROR("500", "服务器内部错误"),
+    PERMISSION_NOT_HAS("409", "没有操作权限"),
+    BACKSTAGE_IS_ERROR("501", "网关异常"),
+    
+    
     APPCODE_IS_NULL("1005", "应用编号不能为空"),
-
+    
     /**
      * 业务错误
      */
-    OBJECT_IS_NULL("6000","对象不能为空"),
-    ID_IS_NULL("6001","对象ID不能为空"),
-    CODE_IS_NULL("6002","编号不能为空"),
-    NAME_IS_NULL("6003","名称不能为空"),
-    SEQ_IS_NULL("6004","排序不能为空"),
-    LEVEL_IS_NULL("6005","级别不能为空"),
-    USERID_IS_NULL("6006","用户id不能为空"),
-    RESULT_IS_NULL("6007","查询结果为空"),
-    TYPE_IS_NULL("6008","类型为空"),
-    SQL_ERROR("6009","数据库异常"),
-    IDENTITY_IS_NULL("6010","身份证不能为空"),
-    CUSTOMERID_IS_NULL("6011","客户号不能为空"),
-    CUSTOMERID_IS_ERROR("6012","未查询到用户信息"),
-    SELECT_IS_ERROR("6013","数据异常查询失败,请联系检查用户信息"),
-    IDENTITYUPKEY_IS_ERROR("6014","身份证正面照片key不能为空"),
-    CODE_IS_INVALID("6015","验证码无效"),
-    TOKEN_IS_NULL("6016","TOKEN不能为空"),
+    OBJECT_IS_NULL("6000", "对象不能为空"),
+    ID_IS_NULL("6001", "对象ID不能为空"),
+    CODE_IS_NULL("6002", "编号不能为空"),
+    NAME_IS_NULL("6003", "名称不能为空"),
+    SEQ_IS_NULL("6004", "排序不能为空"),
+    LEVEL_IS_NULL("6005", "级别不能为空"),
+    USERID_IS_NULL("6006", "user id cannot be empty"),
+    RESULT_IS_NULL("6007", "查询结果为空"),
+    TYPE_IS_NULL("6008", "类型为空"),
+    SQL_ERROR("6009", "数据库异常"),
+    IDENTITY_IS_NULL("6010", "身份证不能为空"),
+    CUSTOMERID_IS_NULL("6011", "客户号不能为空"),
+    CUSTOMERID_IS_ERROR("6012", "未查询到用户信息"),
+    SELECT_IS_ERROR("6013", "数据异常查询失败,请联系检查用户信息"),
+    IDENTITYUPKEY_IS_ERROR("6014", "身份证正面照片key不能为空"),
+    CODE_IS_INVALID("6015", "验证码无效"),
+    TOKEN_IS_NULL("6016", "TOKEN不能为空"),
     INSUFFICIENT_BALANCE("8000", "余额不足"),
-
-
-
+    
+    
     /**
      * 缺少请求参数
      */
-    REQUEST_ARGS_IS_NULL("6000","缺少请求参数"),
-
-    PROVINCE_IS_NULL("6001", "未找到省信息" )
-    , CITY_IS_NULL("6002","未找到城市信息" ),
-
-    CITY_TYPE_IS_ERROR("6003", "城市类型错误" ),
+    REQUEST_ARGS_IS_NULL("6000", "缺少请求参数"),
+    USER_STATUS_IS_ERROR("1062", "用户状态异常,请联系管理员"),
+    
+    PROVINCE_IS_NULL("6001", "未找到省信息"), CITY_IS_NULL("6002", "未找到城市信息"),
+    
+    CITY_TYPE_IS_ERROR("6003", "城市类型错误"),
     CONTENT_IS_NULL("6004", "通知内容不能为空"),
-    STARTTIME_IS_NULL("6005","开始时间不能为空" ),
-    ENDTIME_IS_NULL("6006","结束时间不能为空" ),
-    TYPE_SEQ_IS_EXIST("6007","改类型排序已存在"),
-    LIFT_OBJECT_IS_NULL("6008","通知排序已经在顶部或者底部"),
-    AREACODE_IS_NULL("6009","地区码不能为空"),
-    GROUPID_IS_NULL("6010","分组id不能为空"),
-    LOTTERYID_IS_NULL("6011","抽奖id不能为空" ),
-    USER_IS_NULL("6012","用户未找到" ),
-    SCHOOL_IS_NULL("6013","学校未找到" ),
-    STATUS_IS_ERROR("6014","状态异常:未上架" ),
-    STATUS_HAS_ERROR("6026","状态异常:已上架" ),
-    CONVERSIONCODE_IS_UESD("6015","兑换码已使用完" ),
-    TIME_IS_ERROR("6016","无效的领奖时间" ),
-    NUM_IS_NULL("6017","数量不能为空或0" ),
-    NUM_IS_BIG("6018","数量太大"), BATCH_IS_ERROR("6019","批次已用完" ),
-    USER_NUM_ERROR("6020","用户兑换次数已满" ), CONVERSION_IS_NULL("6021","兑换码不存在,更多兑换码公众号活动获取" ),
-    AWARD_ERROR("6022","领奖失败" ),
-    CREATENAME_IS_NULL("6023","创建人为空" ), STATUS_IS_NULL("6024", "状态不能为空"),
-    VERSION_IS_NULL("6025", "版本号不能为空" ),
-    DISPOSE_STATUS_IS_ERROR("6027", "处理状态异常:未处理" ),
-    DISPOSE_STATUS_HAS_ERROR("6028", "处理状态异常:已处理" ),
-    STATION_IS_NULL("6029", "基站信息未找到" ),
-    AREA_IS_NULL("6030", "地区码未找到" ),
+    STARTTIME_IS_NULL("6005", "开始时间不能为空"),
+    ENDTIME_IS_NULL("6006", "结束时间不能为空"),
+    TYPE_SEQ_IS_EXIST("6007", "改类型排序已存在"),
+    LIFT_OBJECT_IS_NULL("6008", "通知排序已经在顶部或者底部"),
+    AREACODE_IS_NULL("6009", "地区码不能为空"),
+    GROUPID_IS_NULL("6010", "分组id不能为空"),
+    LOTTERYID_IS_NULL("6011", "抽奖id不能为空"),
+    USER_IS_NULL("6012", "用户未找到"),
+    SCHOOL_IS_NULL("6013", "学校未找到"),
+    STATUS_IS_ERROR("6014", "状态异常:未上架"),
+    STATUS_HAS_ERROR("6026", "状态异常:已上架"),
+    CONVERSIONCODE_IS_UESD("6015", "兑换码已使用完"),
+    TIME_IS_ERROR("6016", "无效的领奖时间"),
+    NUM_IS_NULL("6017", "数量不能为空或0"),
+    NUM_IS_BIG("6018", "数量太大"), BATCH_IS_ERROR("6019", "批次已用完"),
+    USER_NUM_ERROR("6020", "用户兑换次数已满"), CONVERSION_IS_NULL("6021", "兑换码不存在,更多兑换码公众号活动获取"),
+    AWARD_ERROR("6022", "领奖失败"),
+    CREATENAME_IS_NULL("6023", "创建人为空"), STATUS_IS_NULL("6024", "状态不能为空"),
+    VERSION_IS_NULL("6025", "版本号不能为空"),
+    DISPOSE_STATUS_IS_ERROR("6027", "处理状态异常:未处理"),
+    DISPOSE_STATUS_HAS_ERROR("6028", "处理状态异常:已处理"),
+    STATION_IS_NULL("6029", "基站信息未找到"),
+    AREA_IS_NULL("6030", "地区码未找到"),
     BAIDU_API_ERROR("6031", "获取百度接口异常"),
-    STARTTIME_IS_ERROR("6032", "活动未开始" ),
-    ENDTIME_IS_ERROR("6033", "活动已结束" ),
-    WEEK_CONVERSION_CODE_IS_NULL("6034", "周末兑换码未配置,请联系客服" ),
-
+    STARTTIME_IS_ERROR("6032", "活动未开始"),
+    ENDTIME_IS_ERROR("6033", "活动已结束"),
+    WEEK_CONVERSION_CODE_IS_NULL("6034", "周末兑换码未配置,请联系客服"),
+    
     APPCODE_IS_ERROR("6035", "应用编码异常"),
     PRIZE_IS_NULL("6036", "奖品为空,请联系管理员"),
-    PRIZE_IS_DRAW("6037", "奖品已领取" ),
-    USER_IS_NOT_VIP("6038", "您还不是会员,不能领取哦") ,
-    USER_IS_NOT_SVIP("6038", "您还不是永久会员,不能领取哦") ,
-    USER_IS_LOGIN_NUM_LESS("6039", "您登录次数不足,不能领取哦" ),
-    PERMIT_IS_UPDATED("6040", "通行证天数已更新") ,
-    PERMIT_SERVICE_IS_OFF("6041", "通行证服务未开启" ),
-    SIGNED_ERROR("6043", "已签到" ),
+    PRIZE_IS_DRAW("6037", "奖品已领取"),
+    USER_IS_NOT_VIP("6038", "您还不是会员,不能领取哦"),
+    USER_IS_NOT_SVIP("6038", "您还不是永久会员,不能领取哦"),
+    USER_IS_LOGIN_NUM_LESS("6039", "您登录次数不足,不能领取哦"),
+    PERMIT_IS_UPDATED("6040", "通行证天数已更新"),
+    PERMIT_SERVICE_IS_OFF("6041", "通行证服务未开启"),
+    SIGNED_ERROR("6043", "已签到"),
     ACTIVITY_IS_NOT_FINISH("6044", "未达到领取条件,请按活动规则领取。"),
-    ACTIVITY_IS_NOT_INTYPE("6045", "活动达标类型是空" ),
-    PRIZE_IS_ERROR("6046", "奖品配置异常" ),
+    ACTIVITY_IS_NOT_INTYPE("6045", "活动达标类型是空"),
+    PRIZE_IS_ERROR("6046", "奖品配置异常"),
     ACTIVITY_IS_END("6058", "活动已结束"),
-
+    
     ;
     /**
      * 状态码
      */
     private final String code;
     private final String message;
-
+    
     ResultCode(String code, String message) {
         this.code = code;
         this.message = message;
     }
-
+    
     public String code() {
         return code;
     }
-
+    
     public String message() {
         return message;
     }
-
+    
     public String getCode() {
         return code;
     }
-
+    
     public String getMessage() {
         return message;
     }
-
+    
     /**
      * 通过状态码获取ENUM的名字
+     *
      * @param code
+     *
      * @return
      */
     public static ResultCode getEnumByStatusCode(String code) {
@@ -133,7 +134,7 @@ public enum ResultCode {
                 return p;
             }
         }
-
+        
         return null;
     }
 }

+ 7 - 0
mall-service/src/main/java/com/txz/mall/dao/CreateSequenceMapper.java

@@ -0,0 +1,7 @@
+package com.txz.mall.dao;
+
+import com.txz.mall.core.Mapper;
+import com.txz.mall.model.CreateSequence;
+
+public interface CreateSequenceMapper extends Mapper<CreateSequence> {
+}

+ 12 - 1
mall-service/src/main/java/com/txz/mall/dao/StoreCombinationMapper.java

@@ -3,8 +3,9 @@ package com.txz.mall.dao;
 import com.txz.mall.core.Mapper;
 import com.txz.mall.dao.impl.StoreCombinationMapperImpl;
 import com.txz.mall.model.StoreCombination;
+import com.txz.mall.web.param.result.StoreCombinationVO;
+import com.txz.mall.web.vo.SpuListRO;
 import dto.StoreProductAddRequest;
-import org.apache.ibatis.annotations.Select;
 import org.apache.ibatis.annotations.SelectProvider;
 import org.apache.ibatis.annotations.UpdateProvider;
 
@@ -17,4 +18,14 @@ public interface StoreCombinationMapper extends Mapper<StoreCombination> {
     
     @SelectProvider(type = StoreCombinationMapperImpl.class, method = "getIdByProductId")
     Long getIdByProductId(Long productId);
+
+
+//    @Select("SELECT id,product_id,activity_id,product_name,cate_id,image,images,title,attr,people,info,price,sort,sales,stock,is_new,is_hot,is_show,combination,is_postage,postage,start_time,stop_time,effective_time,cost,browse,unit_name,temp_id,weight,volume,num,quota,quota_show,ot_price,once_num,virtual_ration,create_time,update_time,create_user_id,update_user_id,is_delete,version FROM m_store_combination left join m_store_product on m_store_combination.product_id = m_store_product.id  WHERE  is_delete = 0 and is_show = 1 and price = ? and cate_id =? and product_name = ? \n" +
+//            "\n" +
+//            " order by sales desc LIMIT ?")
+    List<StoreCombinationVO> spuList(SpuListRO ro);
+
+    
+    @SelectProvider(type = StoreCombinationMapperImpl.class, method = "getAcSpuId")
+    List<Long> getAcSpuId(String productIds, Long activityId);
 }

+ 7 - 2
mall-service/src/main/java/com/txz/mall/dao/StoreOrderMapper.java

@@ -1,14 +1,19 @@
 package com.txz.mall.dao;
 
 import com.txz.mall.core.Mapper;
+import com.txz.mall.enums.PinkOrderStatusEnum;
 import com.txz.mall.model.StoreOrder;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
 import vo.StoreCombinationRankVO;
 
+import java.util.Date;
 import java.util.List;
+import java.util.Map;
 
 public interface StoreOrderMapper extends Mapper<StoreOrder> {
 
-
-    List<StoreCombinationRankVO> getRank();
+    @Select("select combination_id ,count(*) as num from m_store_order where status in (7,5,8,6) and create_time > #{date} group by combination_id ORDER BY num desc limit 20")
+    List<Map<String,Object>> getRank(@Param("date") Date date);
 
 }

+ 8 - 0
mall-service/src/main/java/com/txz/mall/dao/StorePinkMapper.java

@@ -4,13 +4,21 @@ import com.txz.mall.core.Mapper;
 import com.txz.mall.dao.impl.StorePinkMapperImpl;
 import com.txz.mall.model.StorePink;
 import dto.ProductCarouselDTO;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
 import org.apache.ibatis.annotations.SelectProvider;
 
+import java.util.Date;
 import java.util.List;
+import java.util.Map;
 
 public interface StorePinkMapper extends Mapper<StorePink> {
     
     @SelectProvider(type = StorePinkMapperImpl.class, method = "pinkByProductId")
     List<ProductCarouselDTO> pinkByProductId(Long productId);
+
+
+    @Select("select pid as pid ,count(*) as num from m_store_pink where (order_status in (3,4,5,6,7,8) or l_id in(1) )and create_time > #{date} group by pid ORDER BY num desc limit 20")
+    List<Map<String,Object>> getRank(@Param("date") Date date);
     
 }

+ 12 - 0
mall-service/src/main/java/com/txz/mall/dao/impl/StoreCombinationMapperImpl.java

@@ -26,4 +26,16 @@ public class StoreCombinationMapperImpl {
         return "select id from m_store_combination where product_id = #{productId} and is_delete = 0 and start_time <= now() and stop_time >= now() and is_show = 1 order by start_time limit 1 ";
     }
     
+    
+    public String getAcSpuId(String productIds, Long activityId) {
+        String sql = " SELECT msc.product_id " +
+                " FROM m_store_flash_activity msfa " +
+                " LEFT JOIN m_store_combination msc ON msfa.id = msc.activity_id " +
+                " WHERE msfa.active_state != 2 " +
+                " AND msc.product_id IN (${productIds})" +
+                " AND msfa.id != #{activityId} " +
+                " GROUP BY msc.product_id ";
+        return sql;
+    }
+    
 }

+ 3 - 2
mall-service/src/main/java/com/txz/mall/dubbo/client/CifRedEnvelopeDubboServiceClient.java

@@ -1,6 +1,7 @@
 package com.txz.mall.dubbo.client;
 
 import com.txz.cif.dto.EarningsDTO;
+import com.txz.cif.dto.OrderParam;
 import com.txz.cif.service.AccountDubboService;
 import com.txz.cif.service.RedEnvelopeDubboService;
 import lombok.extern.slf4j.Slf4j;
@@ -17,8 +18,8 @@ public class CifRedEnvelopeDubboServiceClient {
     private RedEnvelopeDubboService redEnvelopeDubboService;
 
 
-   public List<EarningsDTO> getEarningsByOrders(List<String> var1){
-       return redEnvelopeDubboService.getEarningsByOrders(var1);
+   public List<EarningsDTO> getEarningsByOrders(List<OrderParam> params){
+       return redEnvelopeDubboService.getEarningsByOrders(params);
    }
 
 

+ 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"));
         }
     }
 }

+ 15 - 11
mall-service/src/main/java/com/txz/mall/dubbo/impl/NoticeServiceImpl.java → mall-service/src/main/java/com/txz/mall/dubbo/impl/NoticeDubboServiceImpl.java

@@ -3,32 +3,36 @@ package com.txz.mall.dubbo.impl;
 import com.txz.mall.enums.NoticeEnum;
 import com.txz.mall.service.NoticeDubboService;
 import com.txz.mall.service.NoticeService;
-import com.txz.mall.service.OrderDubboService;
-import com.txz.mall.service.StoreOrderService;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.dubbo.config.annotation.DubboService;
 
 import javax.annotation.Resource;
+
 @Slf4j
 @DubboService(timeout = 1200000)
-public class NoticeServiceImpl implements NoticeDubboService {
-
+public class NoticeDubboServiceImpl implements NoticeDubboService {
+    
     @Resource
     private NoticeService noticeService;
-
-
+    
+    
     @Override
     public void addOtherNotice(Long otherId, String noticeTitle, String noticeMessage, String pages, Long... uids) {
         noticeService.addOtherNotice(otherId, noticeTitle, noticeMessage, pages, uids);
     }
-
+    
     @Override
-    public void addRewardNotice(NoticeEnum noticeType, Long... uids) {
-        noticeService.addRewardNotice(noticeType,uids);
+    public void addOrderNotice(NoticeEnum noticeType, String noticeMessage, Long... uids) {
+        noticeService.addOrderNotice(noticeType, noticeMessage, uids);
     }
-
+    
+    @Override
+    public void addRewardNotice(NoticeEnum noticeType, String noticeMessage, Long... uids) {
+        noticeService.addRewardNotice(noticeType, noticeMessage, uids);
+    }
+    
     @Override
     public void addMoneyNotice(NoticeEnum noticeType, Long... uids) {
-        noticeService.addMoneyNotice(noticeType,uids);
+        noticeService.addMoneyNotice(noticeType, uids);
     }
 }

+ 12 - 0
mall-service/src/main/java/com/txz/mall/dubbo/impl/OrderDubboServiceImpl.java

@@ -1,6 +1,7 @@
 package com.txz.mall.dubbo.impl;
 
 import com.txz.mall.service.OrderDubboService;
+import com.txz.mall.service.StoreFlashActivityService;
 import com.txz.mall.service.StoreOrderService;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.dubbo.config.annotation.DubboService;
@@ -13,6 +14,9 @@ public class OrderDubboServiceImpl implements OrderDubboService {
     @Resource
     private StoreOrderService storeOrderService;
 
+
+    @Resource
+    private StoreFlashActivityService storeFlashActivityService;
     /**
      * 拼团超时关闭定时任务
      */
@@ -42,4 +46,12 @@ public class OrderDubboServiceImpl implements OrderDubboService {
         storeOrderService.orderTimeoutAutomaticCancel();
         log.info("Mall:orderTimeoutAutomaticCancel end");
     }
+
+
+    @Override
+    public void activityStatusJudgmentTimedTask() {
+        log.info("Mall:activityStatusJudgmentTimedTask start");
+        storeFlashActivityService.activityStatusJudgmentTimedTask();
+        log.info("Mall:activityStatusJudgmentTimedTask end");
+    }
 }

+ 38 - 0
mall-service/src/main/java/com/txz/mall/enums/SpuSortEnum.java

@@ -0,0 +1,38 @@
+package com.txz.mall.enums;
+
+import com.fasterxml.jackson.annotation.JsonValue;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @author: MTD®️
+ * @date: 2025/9/12
+ */
+@AllArgsConstructor
+public enum SpuSortEnum {
+    
+    /**
+     * 销量倒序
+     */
+    SALES_DESC("SALES_DESC", "ficti desc"),
+
+    SALES_ASC("SALES_ASC", "ficti asc"),
+    
+    /**
+     * 创建时间倒序
+     */
+    CREATE_DESC("CREATE_DESC", "create_time desc"),
+    
+    ;
+    
+    @JsonValue
+    @Getter
+    @Setter
+    private String data;
+    
+    @Getter
+    @Setter
+    private String sort;
+    
+}

+ 53 - 0
mall-service/src/main/java/com/txz/mall/model/CreateSequence.java

@@ -0,0 +1,53 @@
+package com.txz.mall.model;
+
+import java.util.Date;
+import javax.persistence.*;
+
+/**
+ * 表名:m_create_sequence
+ * 表注释:自增序列
+*/
+@Table(name = "m_create_sequence")
+public class CreateSequence {
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Long id;
+
+    /**
+     * 创建时间
+     */
+    @Column(name = "create_time")
+    private Date createTime;
+
+    /**
+     * @return id
+     */
+    public Long getId() {
+        return id;
+    }
+
+    /**
+     * @param id
+     */
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    /**
+     * 获取创建时间
+     *
+     * @return createTime - 创建时间
+     */
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    /**
+     * 设置创建时间
+     *
+     * @param createTime 创建时间
+     */
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+}

+ 56 - 51
mall-service/src/main/java/com/txz/mall/model/StoreCombination.java

@@ -16,270 +16,275 @@ public class StoreCombination {
     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY)
     private Long id;
-
+    
     /**
      * 商品id
      */
     @Column(name = "product_id")
     @ApiModelProperty(value = "商品id")
     private Long productId;
-
+    
     /**
      * 活动id
      */
     @Column(name = "activity_id")
     @ApiModelProperty(value = "活动id")
     private Long activityId;
-
+    
     /**
      * 商品名称
      */
     @Column(name = "product_name")
     @ApiModelProperty(value = "商品名称")
     private String productName;
-
+    
     /**
      * 商户id
      */
-//    @Column(name = "mer_id")
-//    private Long merId;
-
+    //    @Column(name = "mer_id")
+    //    private Long merId;
+    
+    /**
+     * 分类id
+     */
+    private String cateId;
+    
     /**
      * 推荐图
      */
     @ApiModelProperty(value = "推荐图")
     private String image;
-
+    
     /**
      * 轮播图
      */
     @ApiModelProperty(value = "轮播图")
     private String images;
-
+    
     /**
      * 活动标题
      */
     @ApiModelProperty(value = "活动标题")
     private String title;
-
+    
     /**
      * 活动属性
      */
     @ApiModelProperty(value = "活动属性")
     private String attr;
-
+    
     /**
      * 参团人数
      */
     @ApiModelProperty(value = "参团人数")
     private Integer people;
-
+    
     /**
      * 简介
      */
     @ApiModelProperty(value = "简介")
     private String info;
-
+    
     /**
      * 价格
      */
     @ApiModelProperty(value = "价格")
     private BigDecimal price;
-
+    
     /**
      * 排序
      */
     @ApiModelProperty(value = "排序")
     private Integer sort;
-
+    
     /**
      * 销量
      */
     @ApiModelProperty(value = "销量")
     private Integer sales;
-
+    
     /**
      * 库存
      */
     @ApiModelProperty(value = "库存")
     private Integer stock;
-
+    
     @Column(name = "is_new")
     @ApiModelProperty(value = "是否新品")
     private Integer isNew;
-
+    
     /**
      * 推荐
      */
     @Column(name = "is_hot")
     @ApiModelProperty(value = "推荐")
     private Integer isHot;
-
+    
     /**
      * 商品状态
      */
     @Column(name = "is_show")
     @ApiModelProperty(value = "商品状态")
     private Integer isShow;
-
+    
     /**
      * 拼团
      */
     private Integer combination;
-
-//    /**
-//     * 商户是否可用 1可用 0不可用
-//     */
-//    @Column(name = "mer_use")
-//    @ApiModelProperty(value = "商户是否可用 1可用 0不可用")
-//    private Integer merUse;
-
+    
+    //    /**
+    //     * 商户是否可用 1可用 0不可用
+    //     */
+    //    @Column(name = "mer_use")
+    //    @ApiModelProperty(value = "商户是否可用 1可用 0不可用")
+    //    private Integer merUse;
+    
     /**
      * 是否包邮 1是 0否
      */
     @Column(name = "is_postage")
     @ApiModelProperty(value = "是否包邮 1是 0否")
     private Integer isPostage;
-
+    
     /**
      * 邮费
      */
     @ApiModelProperty(value = "邮费")
     private BigDecimal postage;
-
+    
     /**
      * 拼团开始时间
      */
     @Column(name = "start_time")
     @ApiModelProperty(value = "拼团开始时间")
     private Date startTime;
-
+    
     /**
      * 拼团结束时间
      */
     @Column(name = "stop_time")
     @ApiModelProperty(value = "拼团结束时间")
     private Date stopTime;
-
+    
     /**
      * 拼团订单有效时间(小时)
      */
     @Column(name = "effective_time")
     @ApiModelProperty(value = "拼团订单有效时间(分)")
     private Integer effectiveTime;
-
+    
     /**
      * 拼图商品成本
      */
     @ApiModelProperty(value = "拼图商品成本")
     private BigDecimal cost;
-
+    
     /**
      * 浏览量
      */
     @ApiModelProperty(value = "浏览量")
     private Integer browse;
-
+    
     /**
      * 单位名
      */
     @Column(name = "unit_name")
     @ApiModelProperty(value = "单位名")
     private String unitName;
-
+    
     /**
      * 运费模板ID
      */
     @Column(name = "temp_id")
     @ApiModelProperty(value = "运费模板ID")
     private Long tempId;
-
+    
     /**
      * 重量
      */
     @ApiModelProperty(value = "重量")
     private BigDecimal weight;
-
+    
     /**
      * 体积
      */
     @ApiModelProperty(value = "体积")
     private BigDecimal volume;
-
+    
     /**
      * 单次购买数量
      */
     @ApiModelProperty(value = "单次购买数量")
     private Integer num;
-
+    
     /**
      * 限购总数
      */
     @ApiModelProperty(value = "限购总数")
     private Integer quota;
-
+    
     /**
      * 限量总数显示
      */
     @Column(name = "quota_show")
     @ApiModelProperty(value = "限量总数显示")
     private Integer quotaShow;
-
+    
     /**
      * 原价
      */
     @Column(name = "ot_price")
     @ApiModelProperty(value = "原价")
     private BigDecimal otPrice;
-
+    
     /**
      * 每个订单可购买数量
      */
     @Column(name = "once_num")
     @ApiModelProperty(value = "每个订单可购买数量")
     private Integer onceNum;
-
+    
     /**
      * 虚拟成团百分比
      */
     @Column(name = "virtual_ration")
     @ApiModelProperty(value = "虚拟成团百分比")
     private Integer virtualRation;
-
+    
     /**
      * 创建时间
      */
     @Column(name = "create_time")
     private Date createTime;
-
+    
     /**
      * 更新时间
      */
     @Column(name = "update_time")
     private Date updateTime;
-
+    
     /**
      * 创建人id
      */
     @Column(name = "create_user_id")
     private Long createUserId;
-
+    
     /**
      * 更新人id
      */
     @Column(name = "update_user_id")
     private Long updateUserId;
-
+    
     /**
      * 是否删除
      */
     @Column(name = "is_delete")
     private Integer isDelete;
-
+    
     /**
      * 数据版本
      */
     @Column(name = "version")
     private Integer version;
-
+    
 }

+ 11 - 0
mall-service/src/main/java/com/txz/mall/service/CreateSequenceService.java

@@ -0,0 +1,11 @@
+package com.txz.mall.service;
+import com.txz.mall.model.CreateSequence;
+import com.txz.mall.core.Service;
+
+
+/**
+ * Created by CodeGenerator on 2025/09/10.
+ */
+public interface CreateSequenceService extends Service<CreateSequence> {
+
+}

+ 1 - 1
mall-service/src/main/java/com/txz/mall/service/NoticeService.java

@@ -30,7 +30,7 @@ public interface NoticeService extends IService<Notice> {
     /**
      * 添加收益通知
      */
-    void addRewardNotice(NoticeEnum noticeType, Long... uids);
+    void addRewardNotice(NoticeEnum noticeType, String noticeMessage, Long... uids);
     
     /**
      * 添加充值/提现通知

+ 13 - 5
mall-service/src/main/java/com/txz/mall/service/StoreCombinationService.java

@@ -2,6 +2,8 @@ package com.txz.mall.service;
 
 import com.txz.mall.core.Service;
 import com.txz.mall.model.StoreCombination;
+import com.txz.mall.web.param.result.StoreCombinationVO;
+import com.txz.mall.web.vo.SpuListRO;
 
 import java.util.List;
 
@@ -10,28 +12,29 @@ import java.util.List;
  * Created by CodeGenerator on 2025/07/14.
  */
 public interface StoreCombinationService extends Service<StoreCombination> {
-
+    
     /**
      * 添加活动商品
      *
      * @param list
      * @param activityId
      */
-    void addActivityProduct(List<StoreCombination> list, Long activityId);
-
+    String addActivityProduct(List<StoreCombination> list, Long activityId);
+    
     /**
      * 更多拼团信息
      */
     List<StoreCombination> getMore(Integer comId);
-
+    
     /**
      * 查询带异常
      *
      * @param id 秒杀商品id
+     *
      * @return StoreSeckill
      */
     StoreCombination getByIdException(Long id);
-
+    
     /**
      * 添加/扣减库存
      *
@@ -40,4 +43,9 @@ public interface StoreCombinationService extends Service<StoreCombination> {
      * @param type 类型:add—添加,sub—扣减
      */
     void operationStock(Long id, Integer num, String type);
+
+
+    List<StoreCombinationVO> spuList(SpuListRO ro);
+
+
 }

+ 7 - 0
mall-service/src/main/java/com/txz/mall/service/StoreFlashActivityService.java

@@ -28,4 +28,11 @@ public interface StoreFlashActivityService extends Service<StoreFlashActivity> {
 
 
     void delete(StoreFlashActivity storeFlashActivity);
+
+
+    /**
+     * 活动状态处理定时任务
+     */
+    void activityStatusJudgmentTimedTask();
+
 }

+ 6 - 0
mall-service/src/main/java/com/txz/mall/service/StoreOrderService.java

@@ -9,6 +9,7 @@ import vo.*;
 
 import javax.servlet.http.HttpServletResponse;
 import java.util.List;
+import java.util.Map;
 
 
 /**
@@ -164,6 +165,11 @@ public interface StoreOrderService extends Service<StoreOrder> {
 
     void batchSigning();
 
+    /**
+     * 待处理红点数
+     * @return
+     */
+    PendingRedDotsVO pendingRedDots();
 
     List<StoreCombinationRankVO> getRank();
 

+ 11 - 0
mall-service/src/main/java/com/txz/mall/service/UserAddressService.java

@@ -1,7 +1,9 @@
 package com.txz.mall.service;
 
+import com.txz.mall.core.Result;
 import com.txz.mall.core.Service;
 import com.txz.mall.model.UserAddress;
+import org.springframework.web.bind.annotation.RequestBody;
 
 
 /**
@@ -15,4 +17,13 @@ public interface UserAddressService extends Service<UserAddress> {
      * @return UserAddress
      */
     UserAddress getDefaultByUid(Long uid);
+
+
+    void defaultAddress(Long id);
+
+
+    void updateAddress(UserAddress userAddress);
+
+
+    void addUserAddress(UserAddress userAddress);
 }

+ 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();

+ 22 - 0
mall-service/src/main/java/com/txz/mall/service/impl/CreateSequenceServiceImpl.java

@@ -0,0 +1,22 @@
+package com.txz.mall.service.impl;
+
+import com.txz.mall.dao.CreateSequenceMapper;
+import com.txz.mall.model.CreateSequence;
+import com.txz.mall.service.CreateSequenceService;
+import com.txz.mall.core.AbstractService;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+
+
+/**
+ * Created by CodeGenerator on 2025/09/10.
+ */
+@Service
+@Transactional
+public class CreateSequenceServiceImpl extends AbstractService<CreateSequence> implements CreateSequenceService {
+    @Resource
+    private CreateSequenceMapper mCreateSequenceMapper;
+
+}

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

@@ -63,9 +63,10 @@ public class NoticeServiceImpl extends ServiceImpl<NoticeMapper, Notice> impleme
     }
     
     @Override
-    public void addRewardNotice(NoticeEnum noticeType, Long... uids) {
+    public void addRewardNotice(NoticeEnum noticeType, String noticeMessage, Long... uids) {
         this.addNotice(NoticeDTO.builder()
                         .noticeType(noticeType)
+                        .noticeMessage(noticeMessage)
                         .build()
                 , uids
         );

+ 82 - 26
mall-service/src/main/java/com/txz/mall/service/impl/StoreCombinationServiceImpl.java

@@ -1,8 +1,8 @@
 package com.txz.mall.service.impl;
 
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson.JSONObject;
-import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.txz.mall.core.AbstractService;
 import com.txz.mall.core.ServiceException;
@@ -14,6 +14,9 @@ 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 com.txz.mall.web.param.result.StoreCombinationVO;
+import com.txz.mall.web.vo.SpuListRO;
 import lombok.AllArgsConstructor;
 import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
@@ -24,6 +27,7 @@ import tk.mybatis.mapper.entity.Example;
 import vo.FlashActivityVO;
 
 import javax.annotation.Resource;
+import java.util.Arrays;
 import java.util.Date;
 import java.util.List;
 import java.util.stream.Collectors;
@@ -36,21 +40,63 @@ import java.util.stream.Collectors;
 @Transactional
 @AllArgsConstructor
 public class StoreCombinationServiceImpl extends AbstractService<StoreCombination> implements StoreCombinationService {
-
+    
     private final StoreProductService storeProductService;
     private final StoreFlashActivityService storeFlashActivityService;
     private final StorePinkService storePinkService;
 
+
+    
+    @Resource
+    private StoreCombinationMapper storeCombinationMapper;
+    
     @Override
-    public void addActivityProduct(List<StoreCombination> list, Long activityId) {
+    public String 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()
                 .map(storeCombination -> storeCombination.getProductId().toString())
                 .collect(Collectors.joining(","));
+        
+        String duplicateIdStr = "";
+        
+        List<Long> acSpuId = storeCombinationMapper.getAcSpuId(idsStr, activityId);
+        if (CollectionUtils.isNotEmpty(acSpuId)) {
+            List<Long> reqIds = Arrays.stream(idsStr.split(","))
+                    .map(String::trim)
+                    .filter(StrUtil::isNotBlank)
+                    .map(Long::valueOf)
+                    .collect(Collectors.toList());
+            
+            // 找出重复的ID
+            List<Long> duplicateIds = reqIds.stream()
+                    .filter(acSpuId::contains)
+                    .collect(Collectors.toList());
+            
+            duplicateIdStr = duplicateIds.stream()
+                    .map(String::valueOf)
+                    .collect(Collectors.joining(","));
+            
+            // 从reqIds中删除重复项
+            reqIds.removeAll(duplicateIds);
+            
+            // 重新生成idsStr
+            idsStr = reqIds.stream()
+                    .map(String::valueOf)
+                    .collect(Collectors.joining(","));
+            
+            // 从list中删除重复的元素
+            list.removeIf(storeCombination ->
+                    duplicateIds.contains(storeCombination.getProductId()));
+        }
+        
+        if (StrUtil.isBlank(idsStr)) {
+            return duplicateIdStr;
+        }
+        
         List<StoreProduct> productList = storeProductService.findByIds(idsStr);
         for (StoreCombination storeCombination : list) {
             List<StoreProduct> productCollect = productList.stream()
@@ -64,9 +110,10 @@ public class StoreCombinationServiceImpl extends AbstractService<StoreCombinatio
             storeCombination.setImages(storeProduct.getSliderImage());
             storeCombination.setInfo(storeProduct.getStoreInfo());
             storeCombination.setStock(storeProduct.getStock());
-            storeCombination.setOnceNum(10);
-            storeCombination.setQuota(10);
-            storeCombination.setNum(10);
+            storeCombination.setCateId(storeProduct.getCateId());
+            storeCombination.setOnceNum(storeProduct.getStock());
+            storeCombination.setQuota(storeProduct.getStock());
+            storeCombination.setNum(storeProduct.getStock());
             storeCombination.setCost(storeProduct.getCost());
             storeCombination.setStartTime(flashActivity.getStartTime());
             storeCombination.setStopTime(flashActivity.getEndTime());
@@ -89,13 +136,18 @@ public class StoreCombinationServiceImpl extends AbstractService<StoreCombinatio
         if (CollUtil.isNotEmpty(activityList)) {
             activityList.forEach(item -> {
                 item.setIsDelete(1);
+                item.setIsShow(0);
                 update(item);
             });
         }
         save(list);
-    }
 
 
+        
+        return duplicateIdStr;
+    }
+    
+    
     @Override
     public List<StoreCombination> getMore(Integer comId) {
         Condition condition = new Condition(StoreCombination.class);
@@ -111,7 +163,7 @@ public class StoreCombinationServiceImpl extends AbstractService<StoreCombinatio
         condition.setOrderByClause("sort DESC, id DESC");
         return findByCondition(condition);
     }
-
+    
     @Override
     public StoreCombination getByIdException(Long combinationId) {
         Condition condition = new Condition(StoreCombination.class);
@@ -121,20 +173,17 @@ 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);
     }
 
-    @Resource
-    private StoreCombinationMapper storeCombinationMapper;
-
     @Override
     public synchronized void operationStock(Long id, Integer num, String type) {
         StoreCombination combination = findById(id);
-       if(ObjectUtils.isEmpty(combination)){
-           throw new ServiceException("拼团活动不存在id:" + id);
-       }
+        if (ObjectUtils.isEmpty(combination)) {
+            throw new ServiceException(I18nUtil.get("group.buying.activity.does.not.exist.id") + id);
+        }
 
         StoreCombination storeCombinationForUpdate = new StoreCombination();
         if ("add".equals(type)) {
@@ -142,8 +191,8 @@ public class StoreCombinationServiceImpl extends AbstractService<StoreCombinatio
             int sales = combination.getSales() - num;
             int stock = combination.getStock() + num;
             int quota = combination.getQuota() + num;
-            if(sales<0){
-                throw new ServiceException("拼团活动m_store_combination销量扣减为负数id:"+id);
+            if (sales < 0) {
+                throw new ServiceException(I18nUtil.get("the.sales.deduction.of.group.buying.activity.m_store_combination.is.negative.id") + id);
             }
 
             storeCombinationForUpdate.setSales(sales);
@@ -155,11 +204,11 @@ public class StoreCombinationServiceImpl extends AbstractService<StoreCombinatio
             int sales = combination.getSales() + num;
             int stock = combination.getStock() - num;
             int quota = combination.getQuota() - num;
-            if(stock<0){
-                throw new ServiceException("拼团活动m_store_combination.stock扣减为负数id:"+id);
+            if (stock < 0) {
+                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);
+            if (quota < 0) {
+                throw new ServiceException(I18nUtil.get("the.quota.deduction.of.group.buying.activity.m_store_combination.is.negative.id") + id);
             }
 
             storeCombinationForUpdate.setSales(sales);
@@ -167,12 +216,12 @@ public class StoreCombinationServiceImpl extends AbstractService<StoreCombinatio
             storeCombinationForUpdate.setQuota(quota);
 
         }
-        storeCombinationForUpdate.setVersion(combination.getVersion()+1);
+        storeCombinationForUpdate.setVersion(combination.getVersion() + 1);
         Example example = new Example(StoreCombination.class);
-        example.createCriteria().andEqualTo("id",id).andEqualTo("version",combination.getVersion());
+        example.createCriteria().andEqualTo("id", id).andEqualTo("version", combination.getVersion());
         int i = storeCombinationMapper.updateByConditionSelective(storeCombinationForUpdate, example);
-        if(!(i==1)){
-            throw new ServiceException("StoreCombination库存操作失败id:"+id);
+        if (!(i == 1)) {
+            throw new ServiceException(I18nUtil.get("storecombination.inventory.operation.failed.id") + id);
         }
 
     }
@@ -205,4 +254,11 @@ public class StoreCombinationServiceImpl extends AbstractService<StoreCombinatio
 //        }
 //        update(combination);
 //    }
+
+
+    @Override
+    public List<StoreCombinationVO> spuList(SpuListRO ro) {
+        List<StoreCombinationVO> storeCombinationVOS = storeCombinationMapper.spuList(ro);
+        return storeCombinationVOS;
+    }
 }

+ 137 - 77
mall-service/src/main/java/com/txz/mall/service/impl/StoreFlashActivityServiceImpl.java

@@ -1,5 +1,6 @@
 package com.txz.mall.service.impl;
 
+import cn.hutool.core.util.ObjectUtil;
 import com.alibaba.fastjson.JSONObject;
 import com.github.pagehelper.PageHelper;
 import com.txz.mall.core.AbstractService;
@@ -9,15 +10,15 @@ import com.txz.mall.dao.StoreCombinationMapper;
 import com.txz.mall.dao.StoreFlashActivityMapper;
 import com.txz.mall.model.StoreCombination;
 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;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
 import org.springframework.util.ObjectUtils;
 import tk.mybatis.mapper.entity.Condition;
 import tk.mybatis.mapper.entity.Example;
@@ -34,16 +35,17 @@ import java.util.List;
 @Service
 @Transactional
 public class StoreFlashActivityServiceImpl extends AbstractService<StoreFlashActivity> implements StoreFlashActivityService {
-
+    
     @Resource
     private StoreFlashActivityMapper storeFlashActivityMapper;
-
+    
     @Lazy
     @Resource
     private StoreCombinationMapper storeCombinationMapper;
-
+    
     @Override
     public List<StoreFlashActivity> activityList(StoreFlashActivity storeFlashActivity, Integer page, Integer size) {
+        this.activityStatusJudgmentTimedTask();
         PageHelper.startPage(page, size);
         Condition condition = new Condition(storeFlashActivity.getClass());
         Example.Criteria criteria = condition.createCriteria();
@@ -58,69 +60,78 @@ public class StoreFlashActivityServiceImpl extends AbstractService<StoreFlashAct
         if (storeFlashActivity.getStatus() != null) {
             criteria.andEqualTo("status", storeFlashActivity.getStatus());
         }
-        if (storeFlashActivity.getActiveState() != null) {
-            criteria.andEqualTo("activeState", storeFlashActivity.getActiveState());
-        }
-        Date date = new Date();
+         if (storeFlashActivity.getActiveState() != null) {
+             criteria.andEqualTo("activeState", storeFlashActivity.getActiveState());
+         }
+        
+        // 不知道哪个臭SB写的,减少改动,暂时先这样处理
+//        Date now = new Date();
+//        if (ObjectUtil.isNotEmpty(storeFlashActivity.getActiveState())) {
+//
+//            switch (storeFlashActivity.getActiveState()) {
+//                case 0:
+//                    criteria.andGreaterThan("startTime", now);
+//                    break;
+//                case 1:
+//                    criteria.andLessThanOrEqualTo("startTime", now);
+//                    criteria.andGreaterThanOrEqualTo("endTime", now);
+//                    break;
+//                case 2:
+//                    criteria.andLessThan("endTime", now);
+//                    break;
+//            }
+//        }
+//
         List<StoreFlashActivity> activityList = findByCondition(condition);
-        for (StoreFlashActivity flashActivity : activityList) {
-            Date startTime = flashActivity.getStartTime();
-            Date endTime = flashActivity.getEndTime();
-            if (startTime.getTime() > date.getTime()) {
-                flashActivity.setActiveState(0);
-            } else if (endTime.getTime() < date.getTime()) {
-                flashActivity.setActiveState(2);
-            } else {
-                flashActivity.setActiveState(1);
-            }
-        }
+
         return activityList;
     }
-
+    
     @Override
     public void modify(StoreFlashActivityDTO dto) {
-
+        
         StoreFlashActivity storeFlashActivityOri = findById(dto.getId());
-        if(ObjectUtils.isEmpty(storeFlashActivityOri)){
-            throw new ServiceException("活动不存在id:"+storeFlashActivityOri.getId());
+        if (ObjectUtils.isEmpty(storeFlashActivityOri)) {
+            String s = I18nUtil.get("activity.does.not.exist.id");
+            throw new ServiceException(s + storeFlashActivityOri.getId());
         }
-//        FlashActivityVO activityVOOri = new FlashActivityVO();
-//        //数据库中的现有数据
-//        Integer statusOri = storeFlashActivityOri.getStatus();  //目测这也是可以控制活动是否开启的 也对应对应m_store_combination.isshow
-//        String contentOri = storeFlashActivityOri.getContent();  //解析出来对应 `effective_time`拼团订单有效时间(小时)', `people` stock
-//        if(!ObjectUtils.isEmpty(contentOri)) {
-//             activityVOOri = JSONObject.parseObject(storeFlashActivityOri.getContent(), FlashActivityVO.class);
-//        }
-//        Date startTimeOri = storeFlashActivityOri.getStartTime();
-//        Date endTimeOri = storeFlashActivityOri.getEndTime();
-//        Integer isDeleteOri = storeFlashActivityOri.getIsDelete();
-//        Integer activeStateOri = storeFlashActivityOri.getActiveState();//活动状态目测是定时任务来时时修改的  对应m_store_combination.isshow
-
-//        storeCombination.setPeople(activityVO.getGroupNumber());
-//        storeCombination.setEffectiveTime(activityVO.getCountdownTime());
-//        if (activityVO.getInventory() != null) {
-//            storeCombination.setStock(activityVO.getInventory());
-//        }
-
-
+        //        FlashActivityVO activityVOOri = new FlashActivityVO();
+        //        //数据库中的现有数据
+        //        Integer statusOri = storeFlashActivityOri.getStatus();  //目测这也是可以控制活动是否开启的 也对应对应m_store_combination.isshow
+        //        String contentOri = storeFlashActivityOri.getContent();  //解析出来对应 `effective_time`拼团订单有效时间(小时)', `people` stock
+        //        if(!ObjectUtils.isEmpty(contentOri)) {
+        //             activityVOOri = JSONObject.parseObject(storeFlashActivityOri.getContent(), FlashActivityVO.class);
+        //        }
+        //        Date startTimeOri = storeFlashActivityOri.getStartTime();
+        //        Date endTimeOri = storeFlashActivityOri.getEndTime();
+        //        Integer isDeleteOri = storeFlashActivityOri.getIsDelete();
+        //        Integer activeStateOri = storeFlashActivityOri.getActiveState();//活动状态目测是定时任务来时时修改的  对应m_store_combination.isshow
+        
+        //        storeCombination.setPeople(activityVO.getGroupNumber());
+        //        storeCombination.setEffectiveTime(activityVO.getCountdownTime());
+        //        if (activityVO.getInventory() != null) {
+        //            storeCombination.setStock(activityVO.getInventory());
+        //        }
+        
+        
         StoreFlashActivity storeFlashActivity = new StoreFlashActivity();
         BeanUtils.copyProperties(dto, storeFlashActivity);
         FlashActivityVO contentNow = dto.getContent();
         storeFlashActivity.setContent(JSONObject.toJSONString(dto.getContent()));
-
+        
         JSONObject tokenUser = UserUtil.getTokenUser(null);
         Long tokenUserId = 0L;
-
-
-        if(!ObjectUtils.isEmpty(tokenUser)){
-            if(!ObjectUtils.isEmpty(tokenUser.getLongValue("id"))){
+        
+        
+        if (!ObjectUtils.isEmpty(tokenUser)) {
+            if (!ObjectUtils.isEmpty(tokenUser.getLongValue("id"))) {
                 tokenUserId = tokenUser.getLongValue("id");
             }
         }
         Date date = new Date();
-
-        if((!ObjectUtils.isEmpty(storeFlashActivity.getStartTime())) && (!ObjectUtils.isEmpty(storeFlashActivity.getEndTime()))) {
-
+        
+        if ((!ObjectUtils.isEmpty(storeFlashActivity.getStartTime())) && (!ObjectUtils.isEmpty(storeFlashActivity.getEndTime()))) {
+            
             if (date.compareTo(storeFlashActivity.getStartTime()) < 0) {
                 storeFlashActivity.setActiveState(0);
             } else if (date.compareTo(storeFlashActivity.getStartTime()) >= 0 && date.compareTo(storeFlashActivity.getEndTime()) <= 0) {
@@ -131,40 +142,38 @@ public class StoreFlashActivityServiceImpl extends AbstractService<StoreFlashAct
         }
         storeFlashActivity.setUpdateTime(date);
         storeFlashActivity.setUpdateUserId(tokenUserId);
-
-
-
+        
+        
         update(storeFlashActivity);
-
-        //活动商品信息联动
-
+        
+        // 活动商品信息联动
+        
         Example exampleStoreCombination = new Example(StoreCombination.class);
         exampleStoreCombination.createCriteria()
-                .andEqualTo("activityId",dto.getId());
-
+                .andEqualTo("activityId", dto.getId());
+        
         StoreCombination storeCombination = new StoreCombination();
-       // storeCombination.setStock();
+        // storeCombination.setStock();
         storeCombination.setEffectiveTime(contentNow.getCountdownTime());
         storeCombination.setPeople(contentNow.getGroupNumber());
         Integer statusOne = 1;
         Integer statusZero = 0;
-
-
+        
+        
         //
-        if(statusOne.equals(storeFlashActivity.getActiveState())
-               //  && statusOne.equals(storeFlashActivity.getStatus())
-                &&  statusZero.equals(storeFlashActivity.getIsDelete())
-        ){
+        if (statusOne.equals(storeFlashActivity.getActiveState())
+                //  && statusOne.equals(storeFlashActivity.getStatus())
+                && statusZero.equals(storeFlashActivity.getIsDelete())
+        ) {
             storeCombination.setIsShow(1);
-        }else{
+        } else {
             storeCombination.setIsShow(0);
         }
         storeCombination.setStartTime(storeFlashActivity.getStartTime());
         storeCombination.setStopTime(storeFlashActivity.getEndTime());
-//        storeCombination.setIsDelete(storeFlashActivity.getIsDelete());
+        //        storeCombination.setIsDelete(storeFlashActivity.getIsDelete());
         storeCombination.setUpdateUserId(storeFlashActivity.getUpdateUserId());
-        storeCombinationMapper.updateByConditionSelective(storeCombination,exampleStoreCombination);
-
+        storeCombinationMapper.updateByConditionSelective(storeCombination, exampleStoreCombination);
 
 
     }
@@ -174,15 +183,15 @@ public class StoreFlashActivityServiceImpl extends AbstractService<StoreFlashAct
     public void delete(StoreFlashActivity storeFlashActivity) {
 
         StoreFlashActivity storeFlashActivityOri = findById(storeFlashActivity.getId());
-        if(ObjectUtils.isEmpty(storeFlashActivityOri)){
-            throw new ServiceException("活动不存在id:"+storeFlashActivityOri.getId());
+        if (ObjectUtils.isEmpty(storeFlashActivityOri)) {
+            throw new ServiceException(I18nUtil.get("activity.does.not.exist.id") + storeFlashActivityOri.getId());
         }
 
         JSONObject tokenUser = UserUtil.getTokenUser(null);
         Long tokenUserId = 0L;
 
-        if(!ObjectUtils.isEmpty(tokenUser)){
-            if(!ObjectUtils.isEmpty(tokenUser.getLongValue("id"))){
+        if (!ObjectUtils.isEmpty(tokenUser)) {
+            if (!ObjectUtils.isEmpty(tokenUser.getLongValue("id"))) {
                 tokenUserId = tokenUser.getLongValue("id");
             }
         }
@@ -193,16 +202,67 @@ public class StoreFlashActivityServiceImpl extends AbstractService<StoreFlashAct
 
         update(storeFlashActivity);
 
-        //活动商品信息联动
+        // 活动商品信息联动
 
         Example exampleStoreCombination = new Example(StoreCombination.class);
         exampleStoreCombination.createCriteria()
-                .andEqualTo("activityId",storeFlashActivity.getId());
+                .andEqualTo("activityId", storeFlashActivity.getId());
 
         StoreCombination storeCombination = new StoreCombination();
         storeCombination.setIsShow(0);
         storeCombination.setIsDelete(storeFlashActivity.getIsDelete());
         storeCombination.setUpdateUserId(storeFlashActivity.getUpdateUserId());
-        storeCombinationMapper.updateByConditionSelective(storeCombination,exampleStoreCombination);
+        storeCombinationMapper.updateByConditionSelective(storeCombination, exampleStoreCombination);
+    }
+
+    @Override
+    public void activityStatusJudgmentTimedTask() {
+
+        Condition conditionStoreFlashActivity = new Condition(StoreFlashActivity.class);
+        conditionStoreFlashActivity.createCriteria().andEqualTo("isDelete",0);
+        List<StoreFlashActivity> storeFlashActivityList = this.findByCondition(conditionStoreFlashActivity);
+        Long tokenUserId = 99999L;
+        Date date = new Date();
+        if(!CollectionUtils.isEmpty(storeFlashActivityList)){
+
+            for (StoreFlashActivity flashActivity : storeFlashActivityList) {
+
+                StoreFlashActivity storeFlashActivity = new StoreFlashActivity();
+                BeanUtils.copyProperties(flashActivity, storeFlashActivity);
+                if((!ObjectUtils.isEmpty(storeFlashActivity.getStartTime())) && (!ObjectUtils.isEmpty(storeFlashActivity.getEndTime()))) {
+
+                    if (date.compareTo(storeFlashActivity.getStartTime()) < 0) {
+                        storeFlashActivity.setActiveState(0);
+                    } else if (date.compareTo(storeFlashActivity.getStartTime()) >= 0 && date.compareTo(storeFlashActivity.getEndTime()) <= 0) {
+                        storeFlashActivity.setActiveState(1);
+                    } else if (date.compareTo(storeFlashActivity.getEndTime()) > 0) {
+                        storeFlashActivity.setActiveState(2);
+                    }
+                }
+                storeFlashActivity.setUpdateTime(date);
+                storeFlashActivity.setUpdateUserId(tokenUserId);
+                update(storeFlashActivity);
+
+                //活动商品信息联动
+
+                Example exampleStoreCombination = new Example(StoreCombination.class);
+                exampleStoreCombination.createCriteria()
+                        .andEqualTo("activityId",flashActivity.getId());
+                StoreCombination storeCombination = new StoreCombination();
+                Integer statusOne = 1;
+                Integer statusZero = 0;
+
+                if(statusOne.equals(storeFlashActivity.getActiveState())
+                        &&  statusZero.equals(storeFlashActivity.getIsDelete())
+                ){
+                    storeCombination.setIsShow(1);
+                }else{
+                    storeCombination.setIsShow(0);
+                }
+
+                storeCombination.setUpdateUserId(storeFlashActivity.getUpdateUserId());
+                storeCombinationMapper.updateByConditionSelective(storeCombination,exampleStoreCombination);
+            }
+        }
     }
 }

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 282 - 253
mall-service/src/main/java/com/txz/mall/service/impl/StoreOrderServiceImpl.java


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

@@ -14,6 +14,7 @@ import com.txz.mall.constants.Constants;
 import com.txz.mall.core.AbstractService;
 import com.txz.mall.core.ServiceException;
 import com.txz.mall.dao.StorePinkMapper;
+import com.txz.mall.dao.StoreProductMapper;
 import com.txz.mall.dubbo.client.CifAccountDubboServiceClient;
 import com.txz.mall.enums.NoticeEnum;
 import com.txz.mall.enums.OrderEventsEnum;
@@ -23,7 +24,9 @@ import com.txz.mall.enums.StorePinkStatusEnum;
 import com.txz.mall.model.StoreOrder;
 import com.txz.mall.model.StorePink;
 import com.txz.mall.model.StorePinkSummary;
+import com.txz.mall.model.StoreProduct;
 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;
@@ -62,6 +65,9 @@ public class StorePinkServiceImpl extends AbstractService<StorePink> implements
     @Resource
     private NoticeService noticeService;
 
+    @Resource
+    private StoreProductMapper storeProductMapper;
+
     @Override
     public List<StorePink> getListByCidAndKid(Long cid, Long kid) {
         Condition condition = new Condition(StorePink.class);
@@ -100,6 +106,23 @@ public class StorePinkServiceImpl extends AbstractService<StorePink> implements
         storeOrderStatusService.createLog(storeOrder.getId(), Constants.ORDER_LOG_PAY_SUCCESS, "支付成功");
         noticeService.addOrderNotice(NoticeEnum.ORDER_GROUP_BUY_PAYMENT_SUCCESS,storeOrder.getOrderId(),storeOrder.getUid());
 
+        //累计虚拟销量,虚拟销量和下单数挂钩,和是否退款或者成团或者是否中奖都无关  只累加不扣减
+        Long pid = teamPink.getPid();
+
+        StoreProduct storeProduct = storeProductService.findById(pid);
+
+        StoreProduct storeProductForUpdate = new StoreProduct();
+        storeProductForUpdate.setFicti(storeProduct.getFicti()+teamPink.getTotalNum());
+        storeProductForUpdate.setVersion(storeProduct.getVersion()+1);
+
+
+        Example exampleStoreProduct = new Example(StoreProduct.class);
+        exampleStoreProduct.createCriteria().andEqualTo("id", pid).andEqualTo(storeProduct.getVersion());
+        int i = storeProductMapper.updateByConditionSelective(storeProductForUpdate, exampleStoreProduct);
+        if(i==0){
+            throw new ServiceException(I18nUtil.get("failed.to.increase.virtual.sales.during.payment")+pid);
+        }
+
         memberList.add(teamPink);
 //        memberList.forEach(i -> {
 //            i.setStatus(2);
@@ -136,11 +159,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 +206,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 +245,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 +280,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 +332,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);
     }

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

@@ -2,6 +2,7 @@ package com.txz.mall.service.impl;
 
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.io.FileUtil;
+import cn.hutool.core.math.Combination;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
 import com.alibaba.excel.EasyExcel;
@@ -23,6 +24,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 +79,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 +99,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 +114,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 +247,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 +262,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();
@@ -367,14 +369,53 @@ public class StoreProductServiceImpl extends AbstractService<StoreProduct> imple
     @Transactional
     public void update(StoreProductAddRequest request) {
         assignAttributes(request, 1);
+
         combinationMapper.updateCombinationByProductId(request);
+
+        //联动更新活动商品表的库存
+        if(!ObjectUtils.isEmpty(request)){
+            List<StoreProductAttrValueAddRequest> attrValueAddRequestList = request.getAttrValue();
+            if(!CollectionUtils.isEmpty(attrValueAddRequestList)){
+                Condition conditionFindCondition = new Condition(StoreCombination.class);
+                Example.Criteria criteriaConditionFindCondition = conditionFindCondition.createCriteria();
+                criteriaConditionFindCondition.andEqualTo("productId", request.getId());
+                criteriaConditionFindCondition.andEqualTo("isDelete",0);
+                List<StoreCombination> storeCombinations = combinationMapper.selectByCondition(conditionFindCondition);
+                if(!CollectionUtils.isEmpty(storeCombinations)){
+
+                    int sum = attrValueAddRequestList.stream().mapToInt(StoreProductAttrValueAddRequest::getStock).sum();
+                    for (StoreCombination storeCombination : storeCombinations) {
+
+                        Example exampleStoreCombination = new Example(StoreCombination.class);
+                        exampleStoreCombination
+                                .createCriteria()
+                                .andEqualTo("id",storeCombination.getId())
+                                .andEqualTo("version",storeCombination.getVersion());
+
+                        StoreCombination storeCombinationForUpdate = new StoreCombination();
+                        storeCombinationForUpdate.setStock(sum);
+                        storeCombinationForUpdate.setQuota(sum);
+                        storeCombinationForUpdate.setQuotaShow(sum);
+                        storeCombinationForUpdate.setNum(sum);
+                        storeCombinationForUpdate.setOnceNum(sum);
+                        storeCombinationForUpdate.setPrice(request.getPrice());
+                        storeCombinationForUpdate.setOtPrice(request.getOtPrice());
+                        storeCombinationForUpdate.setVersion(storeCombination.getVersion()+1);
+                        int i = combinationMapper.updateByConditionSelective(storeCombinationForUpdate,exampleStoreCombination);
+                        if(i==0){
+                            throw new ServiceException(I18nUtil.get("linkage.update.of.activity.inventory.failed.when.modifying.products"+storeCombination.getId()));
+                        }
+                    }
+                }
+            }
+        }
     }
 
     @Override
     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,18 +423,21 @@ 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);
             forUpdatestoreProduct.setSales(sales);
+            //累计虚拟销量,虚拟销量和下单数挂钩,和是否退款或者成团或者是否中奖都无关  只累加不扣减
+//            int ficti = storeProduct.getFicti()+num;
+//            forUpdatestoreProduct.setFicti(ficti);
 
         }
         if ("sub".equals(type)) {
             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 +447,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);
         }
     }
 

+ 58 - 0
mall-service/src/main/java/com/txz/mall/service/impl/UserAddressServiceImpl.java

@@ -2,15 +2,20 @@ package com.txz.mall.service.impl;
 
 import cn.hutool.core.collection.CollUtil;
 import com.txz.mall.core.AbstractService;
+import com.txz.mall.core.Result;
+import com.txz.mall.core.ResultCode;
+import com.txz.mall.core.ServiceException;
 import com.txz.mall.dao.UserAddressMapper;
 import com.txz.mall.model.UserAddress;
 import com.txz.mall.service.UserAddressService;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
 import tk.mybatis.mapper.entity.Condition;
 import tk.mybatis.mapper.entity.Example;
 
 import javax.annotation.Resource;
+import java.util.Date;
 import java.util.List;
 
 
@@ -35,4 +40,57 @@ public class UserAddressServiceImpl extends AbstractService<UserAddress> impleme
         }
         return null;
     }
+
+    @Override
+    public void defaultAddress(Long id) {
+
+        UserAddress userAddress = new UserAddress();
+        userAddress.setUpdateTime(new Date());
+//    		userAddress.setUpdateUserId(userId);
+        userAddress.setId(id);
+        userAddress.setIsDefault(1);
+        update(userAddress);
+        UserAddress address = findById(id);
+        if (address == null) {
+            throw new ServiceException(ResultCode.OBJECT_IS_NULL);
+        }
+        checkOnlyAddress(address, id);
+
+
+    }
+
+    @Override
+    public void updateAddress(UserAddress userAddress) {
+
+        update(userAddress);
+        if (userAddress.getIsDefault() == 1) {
+            checkOnlyAddress(userAddress, userAddress.getId());
+        }
+    }
+
+    @Override
+    public void addUserAddress(UserAddress userAddress) {
+        save(userAddress);
+        if (userAddress.getIsDefault() == 1) {
+            checkOnlyAddress(userAddress, userAddress.getId());
+        }
+    }
+
+    private void checkOnlyAddress(UserAddress userAddress, Long defaultId) {
+        Condition condition = new Condition(UserAddress.class);
+        Example.Criteria criteria = condition.createCriteria();
+        criteria.andEqualTo("isDelete", 0);
+        criteria.andEqualTo("uid", userAddress.getUid());
+        criteria.andNotEqualTo("id", defaultId);
+        criteria.andEqualTo("isDefault", 1);
+        List<UserAddress> list = findByCondition(condition);
+        if (!CollectionUtils.isEmpty(list)) {
+            for (UserAddress ua : list) {
+                ua.setIsDefault(0);
+                update(ua);
+            }
+        }
+    }
+
+
 }

+ 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
 
 
 
+
+
+
 }

+ 23 - 6
mall-service/src/main/java/com/txz/mall/util/OrderUtils.java

@@ -13,7 +13,7 @@ public class OrderUtils {
     /**
      * 订单类别头
      */
-    private static final String ORDER_CODE = "DD";
+    private static final String ORDER_CODE = "BH";
 
     /**
      * 团购类别头
@@ -73,7 +73,7 @@ public class OrderUtils {
     /**
      * 生成时间戳
      */
-    private static String getDateTime() {
+    public static String getDateTime() {
         DateFormat sdf = new SimpleDateFormat("yyMMddHHmmss");
         return sdf.format(new Date());
     }
@@ -121,7 +121,22 @@ public class OrderUtils {
      */
 
     public static String getOrderCode() {
-        return ORDER_CODE + getCode();
+
+        DateFormat sdf = new SimpleDateFormat("yyMMdd");
+        String format = sdf.format(new Date());
+      //  String code = getCode()+"";
+
+        return ORDER_CODE + format;
+    }
+
+
+    public static String getPreOrderCode() {
+
+//        DateFormat sdf = new SimpleDateFormat("yyMMdd");
+//        String format = sdf.format(new Date());
+          String code = getCode()+"";
+
+        return ORDER_CODE + code;
     }
 
     /**
@@ -177,8 +192,10 @@ public class OrderUtils {
     }
 
     public static void main(String[] args) {
-        String withdrawalCode = getWithdrawalCode();
-        System.out.println(withdrawalCode);
-        System.out.println(withdrawalCode.length());
+        String orderCode = getOrderCode();
+        System.out.println(orderCode);
+//        String withdrawalCode = getWithdrawalCode();
+//        System.out.println(withdrawalCode);
+//        System.out.println(withdrawalCode.length());
     }
 }

+ 18 - 0
mall-service/src/main/java/com/txz/mall/web/param/result/StoreCombinationVO.java

@@ -0,0 +1,18 @@
+package com.txz.mall.web.param.result;
+
+import com.txz.mall.model.StoreCombination;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class StoreCombinationVO extends StoreCombination implements Serializable {
+
+    /**
+     * 虚拟销量
+     */
+    @ApiModelProperty(value = "虚拟销量")
+    private Integer ficti;
+
+}

+ 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 {

+ 37 - 0
mall-service/src/main/java/com/txz/mall/web/vo/SpuListRO.java

@@ -0,0 +1,37 @@
+package com.txz.mall.web.vo;
+
+import com.txz.mall.enums.SpuSortEnum;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+
+/**
+ * @author: MTD®️
+ * @date: 2025/9/12
+ */
+@Data
+public class SpuListRO {
+    
+    /**
+     * 搜索关键字
+     */
+    private String storeName;
+    
+    /**
+     * 分类id
+     */
+    private String cateId;
+    
+    /**
+     * 价格
+     */
+    private BigDecimal price;
+    
+    /**
+     * 排序
+     */
+    @NotNull(message = "排序不能为空")
+    private SpuSortEnum sort;
+    
+}

+ 138 - 120
mall-service/src/main/java/dto/StoreOrderDTO.java

@@ -10,352 +10,370 @@ import com.txz.mall.web.param.BasePageParam;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
-import java.io.Serializable;
 import java.math.BigDecimal;
 import java.util.Date;
 
 @Data
 public class StoreOrderDTO extends BasePageParam {
-
+    
     private Long id;
-
+    
     /**
      * 订单号
      */
     @ApiModelProperty(value = "订单号")
     private String orderId;
-
+    
     /**
      * 用户id
      */
     @ApiModelProperty(value = "用户id")
     private Long uid;
-
+    
     /**
      * 用户姓名
      */
     @ApiModelProperty(value = "用户姓名")
     private String realName;
-
+    
     /**
      * 用户电话
      */
     @ApiModelProperty(value = "用户电话")
     private String userPhone;
-
+    
     /**
      * 详细地址
      */
     @ApiModelProperty(value = "详细地址")
     private String userAddress;
-
+    
     /**
      * 运费金额
      */
     @ApiModelProperty(value = "运费金额")
     private BigDecimal freightPrice;
-
+    
     /**
      * 订单商品总数
      */
     @ApiModelProperty(value = "订单商品总数")
     private Integer totalNum;
-
+    
     /**
      * 订单总价
      */
     @ApiModelProperty(value = "订单总价")
     private BigDecimal totalPrice;
-
+    
     /**
      * 邮费
      */
     @ApiModelProperty(value = "邮费")
     private BigDecimal totalPostage;
-
+    
     /**
      * 实际支付金额
      */
     @ApiModelProperty(value = "实际支付金额")
     private BigDecimal payPrice;
-
+    
     /**
      * 支付邮费
      */
     @ApiModelProperty(value = "支付邮费")
     private BigDecimal payPostage;
-
+    
     /**
      * 抵扣金额
      */
     @ApiModelProperty(value = "抵扣金额")
     private BigDecimal deductionPrice;
-
+    
     /**
      * 优惠券id
      */
     @ApiModelProperty(value = "优惠券id")
     private Long couponId;
-
+    
     /**
      * 优惠券金额
      */
     @ApiModelProperty(value = "优惠券金额")
     private BigDecimal couponPrice;
-
+    
     /**
      * 支付状态
      */
     @ApiModelProperty(value = "支付状态 0-待付款  1-已付款")
     private Integer paid;
-
+    
     /**
      * 支付时间
      */
     @ApiModelProperty(value = "支付时间")
     private Date payTime;
-
+    
     /**
      * 支付方式
      */
     @ApiModelProperty(value = "支付方式")
     private String payType;
-
+    
     /**
      * 创建时间
      */
     @ApiModelProperty(value = "创建时间")
     private Date createTime;
-
+    
     /**
      * 订单状态(0:待发货;1:待收货;2:已收货,待评价;3:已完成;)
      */
     @ApiModelProperty(value = "订单状态(0:待发货;1:待收货;3:已完成; 4:已关闭  5:已取消)")
     private Integer status;
-
+    
     /**
      * 0 未退款 1 申请中 2 已退款 3 退款中
      */
     @ApiModelProperty(value = "0 未退款 1 申请中 2 已退款 3 退款中")
     private Integer refundStatus;
-
+    
     /**
      * 退款图片
      */
     @ApiModelProperty(value = "退款图片")
     private String refundReasonWapImg;
-
+    
     /**
      * 退款用户说明
      */
     @ApiModelProperty(value = "退款用户说明")
     private String refundReasonWapExplain;
-
+    
     /**
      * 前台退款原因
      */
     @ApiModelProperty(value = "前台退款原因")
     private String refundReasonWap;
-
+    
     /**
      * 不退款的理由
      */
     @ApiModelProperty(value = "不退款的理由")
     private String refundReason;
-
+    
     /**
      * 退款时间
      */
     @ApiModelProperty(value = "退款时间")
     private Date refundReasonTime;
-
+    
     /**
      * 退款金额
      */
     @ApiModelProperty(value = "退款金额")
     private BigDecimal refundPrice;
-
+    
     /**
      * 快递名称/送货人姓名
      */
     @ApiModelProperty(value = "快递名称/送货人姓名")
     private String deliveryName;
-
+    
     /**
      * 发货类型
      */
     @ApiModelProperty(value = "发货类型")
     private String deliveryType;
-
+    
     /**
      * 快递单号/手机号
      */
     @ApiModelProperty(value = "快递单号/手机号")
     private String deliveryId;
-
-//    /**
-//     * 消费赚取积分
-//     */
-//    @ApiModelProperty(value = "消费赚取积分")
-//    @Column(name = "gain_integral")
-//    private Integer gainIntegral;
-//
-//    /**
-//     * 使用积分
-//     */
-//    @ApiModelProperty(value = "使用积分")
-//    @Column(name = "use_integral")
-//    private Integer useIntegral;
-//
-//    /**
-//     * 给用户退了多少积分
-//     */
-//    @ApiModelProperty(value = "给用户退了多少积分")
-//    @Column(name = "back_integral")
-//    private Integer backIntegral;
-
+    
+    //    /**
+    //     * 消费赚取积分
+    //     */
+    //    @ApiModelProperty(value = "消费赚取积分")
+    //    @Column(name = "gain_integral")
+    //    private Integer gainIntegral;
+    //
+    //    /**
+    //     * 使用积分
+    //     */
+    //    @ApiModelProperty(value = "使用积分")
+    //    @Column(name = "use_integral")
+    //    private Integer useIntegral;
+    //
+    //    /**
+    //     * 给用户退了多少积分
+    //     */
+    //    @ApiModelProperty(value = "给用户退了多少积分")
+    //    @Column(name = "back_integral")
+    //    private Integer backIntegral;
+    
     /**
      * 备注
      */
     @ApiModelProperty(value = "备注")
     private String mark;
-
+    
     /**
      * 管理员备注
      */
     @ApiModelProperty(value = "管理员备注")
     private String remark;
-
-//    /**
-//     * 商户ID
-//     */
-//    @ApiModelProperty(value = "商户ID")
-//    @Column(name = "mer_id")
-//    private Long merId;
-//
-//    /**
-//     * 是否是商户商品
-//     */
-//    @ApiModelProperty(value = "是否是商户商品")
-//    @Column(name = "is_mer_check")
-//    private Integer isMerCheck;
-
+    
+    //    /**
+    //     * 商户ID
+    //     */
+    //    @ApiModelProperty(value = "商户ID")
+    //    @Column(name = "mer_id")
+    //    private Long merId;
+    //
+    //    /**
+    //     * 是否是商户商品
+    //     */
+    //    @ApiModelProperty(value = "是否是商户商品")
+    //    @Column(name = "is_mer_check")
+    //    private Integer isMerCheck;
+    
     /**
      * 拼团商品id0一般商品
      */
     @ApiModelProperty(value = "拼团商品id 0一般商品")
     private Integer combinationId;
-
+    
     /**
      * 拼团id 0没有拼团
      */
     @ApiModelProperty(value = "拼团id 0没有拼团")
     private Long pinkId;
-
+    
     /**
      * 成本价
      */
     @ApiModelProperty(value = "成本价")
     private BigDecimal cost;
-
-//    /**
-//     * 秒杀商品ID
-//     */
-//    @ApiModelProperty(value = "秒杀商品ID")
-//    @Column(name = "seckill_id")
-//    private Long seckillId;
-//
-//    /**
-//     * 砍价id
-//     */
-//    @ApiModelProperty(value = "砍价id")
-//    @Column(name = "bargain_id")
-//    private Long bargainId;
-//
-//    /**
-//     * 核销码
-//     */
-//    @ApiModelProperty(value = "核销码")
-//    @Column(name = "verify_code")
-//    private String verifyCode;
-//
-//    /**
-//     * 门店id
-//     */
-//    @ApiModelProperty(value = "门店id")
-//    @Column(name = "store_id")
-//    private Long storeId;
-
+    
+    //    /**
+    //     * 秒杀商品ID
+    //     */
+    //    @ApiModelProperty(value = "秒杀商品ID")
+    //    @Column(name = "seckill_id")
+    //    private Long seckillId;
+    //
+    //    /**
+    //     * 砍价id
+    //     */
+    //    @ApiModelProperty(value = "砍价id")
+    //    @Column(name = "bargain_id")
+    //    private Long bargainId;
+    //
+    //    /**
+    //     * 核销码
+    //     */
+    //    @ApiModelProperty(value = "核销码")
+    //    @Column(name = "verify_code")
+    //    private String verifyCode;
+    //
+    //    /**
+    //     * 门店id
+    //     */
+    //    @ApiModelProperty(value = "门店id")
+    //    @Column(name = "store_id")
+    //    private Long storeId;
+    
     /**
      * 配送方式 1=快递 ,2=门店自提
      */
     @ApiModelProperty(value = "配送方式 1=快递 ,2=门店自提")
     private Integer shippingType;
-//
-//    /**
-//     * 店员id/核销员id
-//     */
-//    @ApiModelProperty(value = "店员id/核销员id")
-//    @Column(name = "clerk_id")
-//    private Integer clerkId;
-
+    //
+    //    /**
+    //     * 店员id/核销员id
+    //     */
+    //    @ApiModelProperty(value = "店员id/核销员id")
+    //    @Column(name = "clerk_id")
+    //    private Integer clerkId;
+    
     /**
      * 支付渠道(0微信公众号1微信小程序2余额)
      */
     @ApiModelProperty(value = "支付渠道(0微信公众号1微信小程序2余额)")
     private Integer isChannel;
-
+    
     /**
      * 消息提醒
      */
     @ApiModelProperty(value = "消息提醒")
     private Integer isRemind;
-
+    
     /**
      * 快递公司简称
      */
     @ApiModelProperty(value = "快递公司简称")
     private String deliveryCode;
-
+    
     /**
      * 用户拼团活动id 0没有
      */
     @ApiModelProperty(value = "用户拼团活动id 0没有")
     private Integer bargainUserId;
-
+    
     /**
      * 订单类型:0-普通订单,1-视频号订单
      */
     @ApiModelProperty(value = "订单类型:0-普通订单,1-视频号订单")
     private Integer type;
-
+    
     /**
      * 商品总价
      */
     @ApiModelProperty(value = "商品总价")
     private BigDecimal proTotalPrice;
-
+    
     /**
      * 改价前支付金额
      */
     @ApiModelProperty(value = "改价前支付金额")
     private BigDecimal beforePayPrice;
-
+    
     /**
      * 是否改价,0-否,1-是
      */
     @ApiModelProperty(value = "是否改价,0-否,1-是")
     private Integer isAlterPrice;
-
+    
     /**
      * 商户系统内部的订单号,32个字符内、可包含字母, 其他说明见商户订单号
      */
     @ApiModelProperty(value = "商户系统内部的订单号,32个字符内、可包含字母, 其他说明见商户订单号")
     private String outTradeNo;
-
-    @ApiModelProperty(value = "开始时间")
+    
+    @ApiModelProperty(value = "下单开始时间")
     private Date startTime;
-
-    @ApiModelProperty(value = "结束时间")
+    
+    @ApiModelProperty(value = "下单结束时间")
     private Date endTime;
+    
+    @ApiModelProperty(value = "支付开始时间")
+    private Date payStartTime;
+    
+    @ApiModelProperty(value = "支付结束时间")
+    private Date payEndTime;
+    
+    @ApiModelProperty(value = "发货开始时间")
+    private Date deliveryStartTime;
+    
+    @ApiModelProperty(value = "发货结束时间")
+    private Date deliveryEndTime;
+    
+    @ApiModelProperty(value = "完成开始时间")
+    private Date finishStartTime;
+    
+    @ApiModelProperty(value = "完成结束时间")
+    private Date finishEndTime;
+    
 }

+ 20 - 0
mall-service/src/main/java/vo/PendingRedDotsVO.java

@@ -0,0 +1,20 @@
+package vo;
+
+import lombok.Builder;
+import lombok.Data;
+
+/**
+ * @author: MTD®️
+ * @date: 2025/9/11
+ */
+@Data
+@Builder
+public class PendingRedDotsVO {
+    
+    private Integer toPayNum;
+    
+    private Integer successNum;
+    
+    private Integer rewardNum;
+    
+}

+ 3 - 0
mall-service/src/main/java/vo/StoreCombinationRankVO.java

@@ -27,4 +27,7 @@ public class StoreCombinationRankVO implements Serializable {
     @ApiModelProperty(value = "销量")
     private Integer sales;
 
+    @ApiModelProperty(value = "虚拟销量")
+    private Integer ficti;
+
 }

+ 6 - 0
mall-service/src/main/java/vo/StorePinkDetailVO.java

@@ -63,4 +63,10 @@ public class StorePinkDetailVO implements Serializable {
     @ApiModelProperty(value = "奖励佣金")
     private BigDecimal commission;
 
+    @ApiModelProperty(value = "天选 默认0  1为天选',")
+    private Integer lId;
+    @ApiModelProperty(value = "拼团汇总表id")
+    private Long spsId;
+    @ApiModelProperty(value = "团长id 0为团长")
+    private Integer kId;
 }

+ 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=

+ 142 - 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,145 @@ 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
+
+new.add=new.add
+linkage.update.of.activity.inventory.failed.when.modifying.products=linkage update of activity inventory failed when modifying products
+failed.to.increase.virtual.sales.during.payment=failed to increase virtual sales during payment

+ 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
+
+

+ 11 - 0
mall-service/src/main/resources/mapper/CreateSequenceMapper.xml

@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.txz.mall.dao.CreateSequenceMapper">
+  <resultMap id="BaseResultMap" type="com.txz.mall.model.CreateSequence">
+    <!--
+      WARNING - @mbg.generated
+    -->
+    <id column="id" jdbcType="BIGINT" property="id" />
+    <result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
+  </resultMap>
+</mapper>

+ 128 - 0
mall-service/src/main/resources/mapper/StoreCombinationMapper.xml

@@ -48,4 +48,132 @@
         <result column="activity_id" jdbcType="BIGINT" property="activityId"/>
         <result column="is_new" jdbcType="INTEGER" property="isNew"/>
     </resultMap>
+
+
+    <resultMap id="storeCombinationVOMap" type="com.txz.mall.web.param.result.StoreCombinationVO">
+        <!--
+          WARNING - @mbg.generated
+        -->
+        <id column="id" jdbcType="BIGINT" property="id"/>
+        <result column="product_id" jdbcType="BIGINT" property="productId"/>
+        <result column="product_name" jdbcType="VARCHAR" property="productName"/>
+        <result column="mer_id" jdbcType="BIGINT" property="merId"/>
+        <result column="image" jdbcType="VARCHAR" property="image"/>
+        <result column="images" jdbcType="VARCHAR" property="images"/>
+        <result column="title" jdbcType="VARCHAR" property="title"/>
+        <result column="attr" jdbcType="VARCHAR" property="attr"/>
+        <result column="people" jdbcType="INTEGER" property="people"/>
+        <result column="info" jdbcType="VARCHAR" property="info"/>
+        <result column="price" jdbcType="DECIMAL" property="price"/>
+        <result column="sort" jdbcType="INTEGER" property="sort"/>
+        <result column="sales" jdbcType="INTEGER" property="sales"/>
+        <result column="stock" jdbcType="INTEGER" property="stock"/>
+        <result column="is_hot" jdbcType="INTEGER" property="isHot"/>
+        <result column="is_show" jdbcType="INTEGER" property="isShow"/>
+        <result column="combination" jdbcType="INTEGER" property="combination"/>
+        <result column="mer_use" jdbcType="INTEGER" property="merUse"/>
+        <result column="is_postage" jdbcType="INTEGER" property="isPostage"/>
+        <result column="postage" jdbcType="DECIMAL" property="postage"/>
+        <result column="start_time" jdbcType="TIMESTAMP" property="startTime"/>
+        <result column="stop_time" jdbcType="TIMESTAMP" property="stopTime"/>
+        <result column="effective_time" jdbcType="INTEGER" property="effectiveTime"/>
+        <result column="cost" jdbcType="DECIMAL" property="cost"/>
+        <result column="browse" jdbcType="INTEGER" property="browse"/>
+        <result column="unit_name" jdbcType="VARCHAR" property="unitName"/>
+        <result column="temp_id" jdbcType="BIGINT" property="tempId"/>
+        <result column="weight" jdbcType="DECIMAL" property="weight"/>
+        <result column="volume" jdbcType="DECIMAL" property="volume"/>
+        <result column="num" jdbcType="INTEGER" property="num"/>
+        <result column="quota" jdbcType="INTEGER" property="quota"/>
+        <result column="quota_show" jdbcType="INTEGER" property="quotaShow"/>
+        <result column="ot_price" jdbcType="DECIMAL" property="otPrice"/>
+        <result column="once_num" jdbcType="INTEGER" property="onceNum"/>
+        <result column="virtual_ration" jdbcType="INTEGER" property="virtualRation"/>
+        <result column="create_time" jdbcType="TIMESTAMP" property="createTime"/>
+        <result column="update_time" jdbcType="TIMESTAMP" property="updateTime"/>
+        <result column="create_user_id" jdbcType="BIGINT" property="createUserId"/>
+        <result column="update_user_id" jdbcType="BIGINT" property="updateUserId"/>
+        <result column="is_delete" jdbcType="INTEGER" property="isDelete"/>
+        <result column="activity_id" jdbcType="BIGINT" property="activityId"/>
+        <result column="is_new" jdbcType="INTEGER" property="isNew"/>
+        <result column="ficti" jdbcType="INTEGER" property="ficti"/>
+
+    </resultMap>
+
+
+    <select id="spuList" resultMap="storeCombinationVOMap" parameterType="com.txz.mall.web.vo.SpuListRO">
+
+        SELECT
+        m_store_combination.id,
+        m_store_combination.product_id,
+        m_store_combination.activity_id,
+        m_store_combination.product_name,
+        m_store_combination.cate_id,
+        m_store_combination.image,
+        m_store_combination.images,
+        m_store_combination.title,
+        m_store_combination.attr,
+        m_store_combination.people,
+        m_store_combination.info,
+        m_store_combination.price,
+        m_store_combination.sort,
+        m_store_combination.sales,
+        m_store_combination.stock,
+        m_store_combination.is_new,
+        m_store_combination.is_hot,
+        m_store_combination.is_show,
+        m_store_combination.combination,
+        m_store_combination.is_postage,
+        m_store_combination.postage,
+        m_store_combination.start_time,
+        m_store_combination.stop_time,
+        m_store_combination.effective_time,
+        m_store_combination.cost,
+        m_store_combination.browse,
+        m_store_combination.unit_name,
+        m_store_combination.temp_id,
+        m_store_combination.weight,
+        m_store_combination.volume,
+        m_store_combination.num,
+        m_store_combination.quota,
+        m_store_combination.quota_show,
+        m_store_combination.ot_price,
+        m_store_combination.once_num,
+        m_store_combination.virtual_ration,
+        m_store_combination.create_time,
+        m_store_combination.update_time,
+        m_store_combination.create_user_id,
+        m_store_combination.update_user_id,
+        m_store_combination.is_delete,
+        m_store_combination.version,
+        m_store_product.ficti
+        FROM m_store_combination left join m_store_product on m_store_combination.product_id = m_store_product.id
+        WHERE m_store_combination.is_delete = 0 and m_store_combination.is_show = 1
+        <if test="price != null">
+          AND m_store_combination.price = #{price}
+        </if>
+        <if test="cateId != null">
+          AND m_store_combination.cate_id = #{cateId}
+        </if>
+        <if test="storeName != null and storeName != ''">
+          AND m_store_combination.product_name LIKE CONCAT('%', #{storeName}, '%')
+        </if>
+
+        <choose>
+            <when test="sort == @com.txz.mall.enums.SpuSortEnum@SALES_DESC">
+                ORDER BY m_store_product.ficti desc
+            </when>
+            <when test="sort == @com.txz.mall.enums.SpuSortEnum@SALES_ASC">
+                ORDER BY m_store_product.ficti asc
+            </when>
+            <when test="sort == @com.txz.mall.enums.SpuSortEnum@CREATE_DESC">
+                ORDER BY m_store_combination.create_time desc
+            </when>
+            <otherwise>
+                order by m_store_product.ficti desc
+            </otherwise>
+        </choose>
+
+     </select>
+
 </mapper>

+ 1 - 1
mall-service/src/test/java/CodeGenerator.java

@@ -47,7 +47,7 @@ public class CodeGenerator {
 	public static void main(String[] args) {
 //		genCode("o_lottery","o_lottery_prize","o_lottery_record");
 		// genCode("输入表名","输入自定义Model名称");
-		genCode("m_mid_favorite");
+		genCode("m_create_sequence");
 		//genCode("c_member_coupon");
 	}
 

برخی فایل ها در این مقایسه diff نمایش داده نمی شوند زیرا تعداد فایل ها بسیار زیاد است