Commit 66cdf4ca4ce0100bb32da9c689f5d5dae00b58aa

Authored by owen
2 parents 8d40f1d7 fef808d8

Merge remote-tracking branch 'origin/feature/mall_product' into feature/mall_product

Showing 45 changed files with 110 additions and 214 deletions
yudao-framework/yudao-spring-boot-starter-biz-ip/src/main/java/cn/iocoder/yudao/framework/ip/core/utils/AreaUtils.java
@@ -132,7 +132,9 @@ public class AreaUtils { @@ -132,7 +132,9 @@ public class AreaUtils {
132 return convertList(areas.values(), func, area -> type.getType().equals(area.getType())); 132 return convertList(areas.values(), func, area -> type.getType().equals(area.getType()));
133 } 133 }
134 134
  135 + // TODO @疯狂:注释写下;
135 public static Integer getParentIdByType(Integer id, @NonNull AreaTypeEnum type) { 136 public static Integer getParentIdByType(Integer id, @NonNull AreaTypeEnum type) {
  137 + // TODO @疯狂:这种不要用 while true;因为万一脏数据,可能会死循环;可以转换成 for (int i = 0; i < Byte.MAX; i++) 一般是优先层级;
136 do { 138 do {
137 Area area = AreaUtils.getArea(id); 139 Area area = AreaUtils.getArea(id);
138 if (area == null) { 140 if (area == null) {
yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/api/combination/CombinationRecordApi.java
@@ -6,8 +6,6 @@ import cn.iocoder.yudao.module.promotion.api.combination.dto.CombinationValidate @@ -6,8 +6,6 @@ import cn.iocoder.yudao.module.promotion.api.combination.dto.CombinationValidate
6 6
7 import javax.validation.Valid; 7 import javax.validation.Valid;
8 8
9 -// TODO @芋艿:后面也再撸撸这几个接口  
10 -  
11 /** 9 /**
12 * 拼团记录 API 接口 10 * 拼团记录 API 接口
13 * 11 *
@@ -30,7 +28,7 @@ public interface CombinationRecordApi { @@ -30,7 +28,7 @@ public interface CombinationRecordApi {
30 * 创建开团记录 28 * 创建开团记录
31 * 29 *
32 * @param reqDTO 请求 DTO 30 * @param reqDTO 请求 DTO
33 - * @return key 开团记录编号 value 团长编号 31 + * @return key 开团记录编号、value 团长编号
34 */ 32 */
35 KeyValue<Long, Long> createCombinationRecord(@Valid CombinationRecordCreateReqDTO reqDTO); 33 KeyValue<Long, Long> createCombinationRecord(@Valid CombinationRecordCreateReqDTO reqDTO);
36 34
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/api/combination/CombinationRecordApiImpl.java
@@ -29,6 +29,7 @@ public class CombinationRecordApiImpl implements CombinationRecordApi { @@ -29,6 +29,7 @@ public class CombinationRecordApiImpl implements CombinationRecordApi {
29 recordService.validateCombinationRecord(userId, activityId, headId, skuId, count); 29 recordService.validateCombinationRecord(userId, activityId, headId, skuId, count);
30 } 30 }
31 31
  32 + // TODO @puhui999:搞个创建的 RespDTO 哈;
32 @Override 33 @Override
33 public KeyValue<Long, Long> createCombinationRecord(CombinationRecordCreateReqDTO reqDTO) { 34 public KeyValue<Long, Long> createCombinationRecord(CombinationRecordCreateReqDTO reqDTO) {
34 return recordService.createCombinationRecord(reqDTO); 35 return recordService.createCombinationRecord(reqDTO);
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/combination/CombinationRecordController.java
@@ -40,6 +40,9 @@ public class CombinationRecordController { @@ -40,6 +40,9 @@ public class CombinationRecordController {
40 @Lazy 40 @Lazy
41 private CombinationRecordService combinationRecordService; 41 private CombinationRecordService combinationRecordService;
42 42
  43 + // TODO @puhui999:getBargainRecordPage 和 getBargainRecordPage 是不是可以合并;然后 CombinationRecordReqPageVO 加一个 headId;
  44 + // 然后如果 headId 非空,并且第一页,单独多查询一条 head ;放到第 0 个位置;相当于说,第一页特殊一点;
  45 +
43 @GetMapping("/page") 46 @GetMapping("/page")
44 @Operation(summary = "获得拼团记录分页") 47 @Operation(summary = "获得拼团记录分页")
45 @PreAuthorize("@ss.hasPermission('promotion:combination-record:query')") 48 @PreAuthorize("@ss.hasPermission('promotion:combination-record:query')")
@@ -47,6 +50,7 @@ public class CombinationRecordController { @@ -47,6 +50,7 @@ public class CombinationRecordController {
47 PageResult<CombinationRecordDO> recordPage = combinationRecordService.getCombinationRecordPage(pageVO); 50 PageResult<CombinationRecordDO> recordPage = combinationRecordService.getCombinationRecordPage(pageVO);
48 List<CombinationActivityDO> activities = combinationActivityService.getCombinationActivityListByIds( 51 List<CombinationActivityDO> activities = combinationActivityService.getCombinationActivityListByIds(
49 convertSet(recordPage.getList(), CombinationRecordDO::getActivityId)); 52 convertSet(recordPage.getList(), CombinationRecordDO::getActivityId));
  53 + // TODO @puhui999:商品没读取
50 return success(CombinationActivityConvert.INSTANCE.convert(recordPage, activities)); 54 return success(CombinationActivityConvert.INSTANCE.convert(recordPage, activities));
51 } 55 }
52 56
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/bargain/AppBargainRecordController.java
@@ -27,7 +27,6 @@ import io.swagger.v3.oas.annotations.Operation; @@ -27,7 +27,6 @@ import io.swagger.v3.oas.annotations.Operation;
27 import io.swagger.v3.oas.annotations.Parameter; 27 import io.swagger.v3.oas.annotations.Parameter;
28 import io.swagger.v3.oas.annotations.Parameters; 28 import io.swagger.v3.oas.annotations.Parameters;
29 import io.swagger.v3.oas.annotations.tags.Tag; 29 import io.swagger.v3.oas.annotations.tags.Tag;
30 -import org.springframework.context.annotation.Lazy;  
31 import org.springframework.validation.annotation.Validated; 30 import org.springframework.validation.annotation.Validated;
32 import org.springframework.web.bind.annotation.*; 31 import org.springframework.web.bind.annotation.*;
33 32
@@ -49,20 +48,15 @@ public class AppBargainRecordController { @@ -49,20 +48,15 @@ public class AppBargainRecordController {
49 @Resource 48 @Resource
50 private BargainHelpService bargainHelpService; 49 private BargainHelpService bargainHelpService;
51 @Resource 50 @Resource
52 - @Lazy  
53 private BargainRecordService bargainRecordService; 51 private BargainRecordService bargainRecordService;
54 @Resource 52 @Resource
55 - @Lazy  
56 private BargainActivityService bargainActivityService; 53 private BargainActivityService bargainActivityService;
57 54
58 -  
59 @Resource 55 @Resource
60 private TradeOrderApi tradeOrderApi; 56 private TradeOrderApi tradeOrderApi;
61 @Resource 57 @Resource
62 - @Lazy  
63 private MemberUserApi memberUserApi; 58 private MemberUserApi memberUserApi;
64 @Resource 59 @Resource
65 - @Lazy  
66 private ProductSpuApi productSpuApi; 60 private ProductSpuApi productSpuApi;
67 61
68 @GetMapping("/get-summary") 62 @GetMapping("/get-summary")
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/mysql/bargain/BargainActivityMapper.java
@@ -9,7 +9,6 @@ import cn.iocoder.yudao.module.promotion.dal.dataobject.bargain.BargainActivityD @@ -9,7 +9,6 @@ import cn.iocoder.yudao.module.promotion.dal.dataobject.bargain.BargainActivityD
9 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; 9 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
10 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; 10 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
11 import org.apache.ibatis.annotations.Mapper; 11 import org.apache.ibatis.annotations.Mapper;
12 -import org.apache.ibatis.annotations.Param;  
13 12
14 import java.time.LocalDateTime; 13 import java.time.LocalDateTime;
15 import java.util.Collection; 14 import java.util.Collection;
@@ -87,6 +86,7 @@ public interface BargainActivityMapper extends BaseMapperX&lt;BargainActivityDO&gt; { @@ -87,6 +86,7 @@ public interface BargainActivityMapper extends BaseMapperX&lt;BargainActivityDO&gt; {
87 .last("LIMIT " + count)); 86 .last("LIMIT " + count));
88 } 87 }
89 88
  89 + // TODO @puhui999:是不是返回 BargainActivityDO 更干净哈?
90 /** 90 /**
91 * 查询出指定 spuId 的 spu 参加的活动最接近现在的一条记录。多个的话,一个 spuId 对应一个最近的活动编号 91 * 查询出指定 spuId 的 spu 参加的活动最接近现在的一条记录。多个的话,一个 spuId 对应一个最近的活动编号
92 * 92 *
@@ -94,7 +94,7 @@ public interface BargainActivityMapper extends BaseMapperX&lt;BargainActivityDO&gt; { @@ -94,7 +94,7 @@ public interface BargainActivityMapper extends BaseMapperX&lt;BargainActivityDO&gt; {
94 * @param status 状态 94 * @param status 状态
95 * @return 包含 spuId 和 activityId 的 map 对象列表 95 * @return 包含 spuId 和 activityId 的 map 对象列表
96 */ 96 */
97 - default List<Map<String, Object>> selectSpuIdAndActivityIdMapsBySpuIdsAndStatus(@Param("spuIds") Collection<Long> spuIds, @Param("status") Integer status) { 97 + default List<Map<String, Object>> selectSpuIdAndActivityIdMapsBySpuIdsAndStatus(Collection<Long> spuIds, Integer status) {
98 return selectMaps(new QueryWrapper<BargainActivityDO>() 98 return selectMaps(new QueryWrapper<BargainActivityDO>()
99 .select("spu_id AS spuId, MAX(DISTINCT(id)) AS activityId") // 时间越大 id 也越大 直接用 id 99 .select("spu_id AS spuId, MAX(DISTINCT(id)) AS activityId") // 时间越大 id 也越大 直接用 id
100 .in("spu_id", spuIds) 100 .in("spu_id", spuIds)
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/mysql/combination/CombinationRecordMapper.java
@@ -120,6 +120,7 @@ public interface CombinationRecordMapper extends BaseMapperX&lt;CombinationRecordDO @@ -120,6 +120,7 @@ public interface CombinationRecordMapper extends BaseMapperX&lt;CombinationRecordDO
120 */ 120 */
121 default Long selectCountByHeadAndStatusAndVirtualGroup(Integer status, Boolean virtualGroup, Long headId) { 121 default Long selectCountByHeadAndStatusAndVirtualGroup(Integer status, Boolean virtualGroup, Long headId) {
122 return selectCount(new QueryWrapper<CombinationRecordDO>() 122 return selectCount(new QueryWrapper<CombinationRecordDO>()
  123 + // TODO @puhui999:这种偏逻辑性的,不要给 mapper 哈;可以考虑拆成 2 个 mapper,上层也是 2 个 service;
123 .select(status == null && virtualGroup == null && headId == null, "DISTINCT (user_id)") 124 .select(status == null && virtualGroup == null && headId == null, "DISTINCT (user_id)")
124 .eq(status != null, "status", status) 125 .eq(status != null, "status", status)
125 .eq(virtualGroup != null, "virtual_group", virtualGroup) 126 .eq(virtualGroup != null, "virtual_group", virtualGroup)
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/job/combination/CombinationRecordExpireJob.java
@@ -22,7 +22,7 @@ public class CombinationRecordExpireJob implements JobHandler { @@ -22,7 +22,7 @@ public class CombinationRecordExpireJob implements JobHandler {
22 22
23 @Override 23 @Override
24 @TenantJob 24 @TenantJob
25 - public String execute(String param) throws Exception { 25 + public String execute(String param) {
26 KeyValue<Integer, Integer> keyValue = combinationRecordService.expireCombinationRecord(); 26 KeyValue<Integer, Integer> keyValue = combinationRecordService.expireCombinationRecord();
27 return StrUtil.format("过期拼团 {} 个, 虚拟成团 {} 个", keyValue.getKey(), keyValue.getValue()); 27 return StrUtil.format("过期拼团 {} 个, 虚拟成团 {} 个", keyValue.getKey(), keyValue.getValue());
28 } 28 }
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/bargain/BargainActivityServiceImpl.java
@@ -94,7 +94,6 @@ public class BargainActivityServiceImpl implements BargainActivityService { @@ -94,7 +94,6 @@ public class BargainActivityServiceImpl implements BargainActivityService {
94 } else if (count > 0) { 94 } else if (count > 0) {
95 bargainActivityMapper.updateStock(id, count); 95 bargainActivityMapper.updateStock(id, count);
96 } 96 }
97 -  
98 } 97 }
99 98
100 private void validateBargainConflict(Long spuId, Long activityId) { 99 private void validateBargainConflict(Long spuId, Long activityId) {
@@ -184,12 +183,13 @@ public class BargainActivityServiceImpl implements BargainActivityService { @@ -184,12 +183,13 @@ public class BargainActivityServiceImpl implements BargainActivityService {
184 183
185 @Override 184 @Override
186 public List<BargainActivityDO> getBargainActivityBySpuIdsAndStatus(Collection<Long> spuIds, Integer status) { 185 public List<BargainActivityDO> getBargainActivityBySpuIdsAndStatus(Collection<Long> spuIds, Integer status) {
187 - // 1.查询出指定 spuId 的 spu 参加的活动最接近现在的一条记录。多个的话,一个 spuId 对应一个最近的活动编号 186 + // 1. 查询出指定 spuId 的 spu 参加的活动最接近现在的一条记录。多个的话,一个 spuId 对应一个最近的活动编号
  187 + // TODO @puhui999:我想了下,这种是不是只展示当前正在进行中的。已经结束、或者未开始的,可能没啥意义?
188 List<Map<String, Object>> spuIdAndActivityIdMaps = bargainActivityMapper.selectSpuIdAndActivityIdMapsBySpuIdsAndStatus(spuIds, status); 188 List<Map<String, Object>> spuIdAndActivityIdMaps = bargainActivityMapper.selectSpuIdAndActivityIdMapsBySpuIdsAndStatus(spuIds, status);
189 if (CollUtil.isEmpty(spuIdAndActivityIdMaps)) { 189 if (CollUtil.isEmpty(spuIdAndActivityIdMaps)) {
190 return Collections.emptyList(); 190 return Collections.emptyList();
191 } 191 }
192 - // 2.查询活动详情 192 + // 2. 查询活动详情
193 return bargainActivityMapper.selectListByIds(convertSet(spuIdAndActivityIdMaps, map -> MapUtil.getLong(map, "activityId"))); 193 return bargainActivityMapper.selectListByIds(convertSet(spuIdAndActivityIdMaps, map -> MapUtil.getLong(map, "activityId")));
194 } 194 }
195 195
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/combination/CombinationRecordService.java
@@ -146,7 +146,6 @@ public interface CombinationRecordService { @@ -146,7 +146,6 @@ public interface CombinationRecordService {
146 */ 146 */
147 PageResult<CombinationRecordDO> getCombinationRecordPage2(CombinationRecordReqPage2VO pageVO); 147 PageResult<CombinationRecordDO> getCombinationRecordPage2(CombinationRecordReqPage2VO pageVO);
148 148
149 -  
150 /** 149 /**
151 * 【拼团活动】获得拼团记录数量 Map 150 * 【拼团活动】获得拼团记录数量 Map
152 * 151 *
@@ -159,7 +158,6 @@ public interface CombinationRecordService { @@ -159,7 +158,6 @@ public interface CombinationRecordService {
159 @Nullable Integer status, 158 @Nullable Integer status,
160 @Nullable Long headId); 159 @Nullable Long headId);
161 160
162 -  
163 /** 161 /**
164 * 获取拼团记录 162 * 获取拼团记录
165 * 163 *
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/combination/CombinationRecordServiceImpl.java
@@ -23,7 +23,6 @@ import cn.iocoder.yudao.module.promotion.dal.dataobject.combination.CombinationR @@ -23,7 +23,6 @@ import cn.iocoder.yudao.module.promotion.dal.dataobject.combination.CombinationR
23 import cn.iocoder.yudao.module.promotion.dal.mysql.combination.CombinationRecordMapper; 23 import cn.iocoder.yudao.module.promotion.dal.mysql.combination.CombinationRecordMapper;
24 import cn.iocoder.yudao.module.promotion.enums.combination.CombinationRecordStatusEnum; 24 import cn.iocoder.yudao.module.promotion.enums.combination.CombinationRecordStatusEnum;
25 import cn.iocoder.yudao.module.trade.api.order.TradeOrderApi; 25 import cn.iocoder.yudao.module.trade.api.order.TradeOrderApi;
26 -import org.springframework.context.annotation.Lazy;  
27 import org.springframework.scheduling.annotation.Async; 26 import org.springframework.scheduling.annotation.Async;
28 import org.springframework.stereotype.Service; 27 import org.springframework.stereotype.Service;
29 import org.springframework.transaction.annotation.Transactional; 28 import org.springframework.transaction.annotation.Transactional;
@@ -52,7 +51,6 @@ import static cn.iocoder.yudao.module.promotion.enums.ErrorCodeConstants.*; @@ -52,7 +51,6 @@ import static cn.iocoder.yudao.module.promotion.enums.ErrorCodeConstants.*;
52 public class CombinationRecordServiceImpl implements CombinationRecordService { 51 public class CombinationRecordServiceImpl implements CombinationRecordService {
53 52
54 @Resource 53 @Resource
55 - @Lazy  
56 private CombinationActivityService combinationActivityService; 54 private CombinationActivityService combinationActivityService;
57 @Resource 55 @Resource
58 private CombinationRecordMapper combinationRecordMapper; 56 private CombinationRecordMapper combinationRecordMapper;
@@ -60,16 +58,13 @@ public class CombinationRecordServiceImpl implements CombinationRecordService { @@ -60,16 +58,13 @@ public class CombinationRecordServiceImpl implements CombinationRecordService {
60 @Resource 58 @Resource
61 private MemberUserApi memberUserApi; 59 private MemberUserApi memberUserApi;
62 @Resource 60 @Resource
63 - @Lazy  
64 private ProductSpuApi productSpuApi; 61 private ProductSpuApi productSpuApi;
65 @Resource 62 @Resource
66 - @Lazy  
67 private ProductSkuApi productSkuApi; 63 private ProductSkuApi productSkuApi;
68 64
69 @Resource 65 @Resource
70 private TradeOrderApi tradeOrderApi; 66 private TradeOrderApi tradeOrderApi;
71 67
72 - // TODO @芋艿:在详细预览下;  
73 @Override 68 @Override
74 @Transactional(rollbackFor = Exception.class) 69 @Transactional(rollbackFor = Exception.class)
75 public void updateCombinationRecordStatusByUserIdAndOrderId(Integer status, Long userId, Long orderId) { 70 public void updateCombinationRecordStatusByUserIdAndOrderId(Integer status, Long userId, Long orderId) {
@@ -77,6 +72,7 @@ public class CombinationRecordServiceImpl implements CombinationRecordService { @@ -77,6 +72,7 @@ public class CombinationRecordServiceImpl implements CombinationRecordService {
77 CombinationRecordDO record = validateCombinationRecord(userId, orderId); 72 CombinationRecordDO record = validateCombinationRecord(userId, orderId);
78 73
79 // 更新状态 74 // 更新状态
  75 + // TODO @puhui999:不要整个更新,new 一个出来;why?例如说,两个线程都去更新,这样存在相互覆盖的问题
80 record.setStatus(status); 76 record.setStatus(status);
81 combinationRecordMapper.updateById(record); 77 combinationRecordMapper.updateById(record);
82 } 78 }
@@ -169,16 +165,16 @@ public class CombinationRecordServiceImpl implements CombinationRecordService { @@ -169,16 +165,16 @@ public class CombinationRecordServiceImpl implements CombinationRecordService {
169 @Override 165 @Override
170 @Transactional(rollbackFor = Exception.class) 166 @Transactional(rollbackFor = Exception.class)
171 public KeyValue<Long, Long> createCombinationRecord(CombinationRecordCreateReqDTO reqDTO) { 167 public KeyValue<Long, Long> createCombinationRecord(CombinationRecordCreateReqDTO reqDTO) {
172 - // 1.校验拼团活动 168 + // 1. 校验拼团活动
173 KeyValue<CombinationActivityDO, CombinationProductDO> keyValue = validateCombinationRecord(reqDTO.getUserId(), 169 KeyValue<CombinationActivityDO, CombinationProductDO> keyValue = validateCombinationRecord(reqDTO.getUserId(),
174 reqDTO.getActivityId(), reqDTO.getHeadId(), reqDTO.getSkuId(), reqDTO.getCount()); 170 reqDTO.getActivityId(), reqDTO.getHeadId(), reqDTO.getSkuId(), reqDTO.getCount());
175 171
176 - // 2.组合数据创建拼团记录 172 + // 2. 组合数据创建拼团记录
177 MemberUserRespDTO user = memberUserApi.getUser(reqDTO.getUserId()); 173 MemberUserRespDTO user = memberUserApi.getUser(reqDTO.getUserId());
178 ProductSpuRespDTO spu = productSpuApi.getSpu(reqDTO.getSpuId()); 174 ProductSpuRespDTO spu = productSpuApi.getSpu(reqDTO.getSpuId());
179 ProductSkuRespDTO sku = productSkuApi.getSku(reqDTO.getSkuId()); 175 ProductSkuRespDTO sku = productSkuApi.getSku(reqDTO.getSkuId());
180 CombinationRecordDO record = CombinationActivityConvert.INSTANCE.convert(reqDTO, keyValue.getKey(), user, spu, sku); 176 CombinationRecordDO record = CombinationActivityConvert.INSTANCE.convert(reqDTO, keyValue.getKey(), user, spu, sku);
181 - // 2.1.如果是团长需要设置 headId 为 CombinationRecordDO#HEAD_ID_GROUP 177 + // 2.1. 如果是团长需要设置 headId 为 CombinationRecordDO#HEAD_ID_GROUP
182 if (record.getHeadId() == null) { 178 if (record.getHeadId() == null) {
183 record.setStartTime(LocalDateTime.now()) 179 record.setStartTime(LocalDateTime.now())
184 .setExpireTime(keyValue.getKey().getStartTime().plusHours(keyValue.getKey().getLimitDuration())) 180 .setExpireTime(keyValue.getKey().getStartTime().plusHours(keyValue.getKey().getLimitDuration()))
@@ -191,12 +187,10 @@ public class CombinationRecordServiceImpl implements CombinationRecordService { @@ -191,12 +187,10 @@ public class CombinationRecordServiceImpl implements CombinationRecordService {
191 } 187 }
192 combinationRecordMapper.insert(record); 188 combinationRecordMapper.insert(record);
193 189
194 - if (ObjUtil.equal(CombinationRecordDO.HEAD_ID_GROUP, record.getHeadId())) {  
195 - return new KeyValue<>(record.getId(), record.getHeadId()); 190 + // 3. 更新拼团记录
  191 + if (ObjUtil.notEqual(CombinationRecordDO.HEAD_ID_GROUP, record.getHeadId())) {
  192 + updateCombinationRecordWhenCreate(reqDTO.getHeadId(), keyValue.getKey());
196 } 193 }
197 -  
198 - // 3、更新拼团记录  
199 - updateCombinationRecordWhenCreate(reqDTO.getHeadId(), keyValue.getKey());  
200 return new KeyValue<>(record.getId(), record.getHeadId()); 194 return new KeyValue<>(record.getId(), record.getHeadId());
201 } 195 }
202 196
@@ -349,6 +343,7 @@ public class CombinationRecordServiceImpl implements CombinationRecordService { @@ -349,6 +343,7 @@ public class CombinationRecordServiceImpl implements CombinationRecordService {
349 343
350 @Override 344 @Override
351 public KeyValue<Integer, Integer> expireCombinationRecord() { 345 public KeyValue<Integer, Integer> expireCombinationRecord() {
  346 + // TODO @puhui999:数字一般是 1. 2. 这种格式哈
352 // 1。获取所有正在进行中的过期的父拼团 347 // 1。获取所有正在进行中的过期的父拼团
353 List<CombinationRecordDO> headExpireRecords = combinationRecordMapper.selectListByHeadIdAndStatusAndExpireTimeLt( 348 List<CombinationRecordDO> headExpireRecords = combinationRecordMapper.selectListByHeadIdAndStatusAndExpireTimeLt(
354 CombinationRecordDO.HEAD_ID_GROUP, CombinationRecordStatusEnum.IN_PROGRESS.getStatus(), LocalDateTime.now()); 349 CombinationRecordDO.HEAD_ID_GROUP, CombinationRecordStatusEnum.IN_PROGRESS.getStatus(), LocalDateTime.now());
@@ -356,18 +351,21 @@ public class CombinationRecordServiceImpl implements CombinationRecordService { @@ -356,18 +351,21 @@ public class CombinationRecordServiceImpl implements CombinationRecordService {
356 return new KeyValue<>(0, 0); 351 return new KeyValue<>(0, 0);
357 } 352 }
358 353
359 - // 2.获取拼团活动 354 + // 2. 获取拼团活动
  355 + // TODO @puhui999:在自己模块里,变量可以简略点;例如说 activityList
360 List<CombinationActivityDO> combinationActivities = combinationActivityService.getCombinationActivityListByIds( 356 List<CombinationActivityDO> combinationActivities = combinationActivityService.getCombinationActivityListByIds(
361 convertSet(headExpireRecords, CombinationRecordDO::getActivityId)); 357 convertSet(headExpireRecords, CombinationRecordDO::getActivityId));
362 Map<Long, CombinationActivityDO> activityMap = convertMap(combinationActivities, CombinationActivityDO::getId); 358 Map<Long, CombinationActivityDO> activityMap = convertMap(combinationActivities, CombinationActivityDO::getId);
363 359
364 - // 3.校验是否虚拟成团 360 + // TODO @puhui999:job 一般不建议异步跑;因为可能下次跑,结果上次还没跑完;
  361 + // TODO 这里,我们可以每个 record 处理下;然后按照是否需要虚拟拼团,各搞一个方法逻辑 + 事务;这样,保证 job 里面尽量不要大事务,而是 n 个独立小事务的处理。
  362 + // 3. 校验是否虚拟成团
365 List<CombinationRecordDO> virtualGroupHeadRecords = new ArrayList<>(); // 虚拟成团 363 List<CombinationRecordDO> virtualGroupHeadRecords = new ArrayList<>(); // 虚拟成团
366 for (Iterator<CombinationRecordDO> iterator = headExpireRecords.iterator(); iterator.hasNext(); ) { 364 for (Iterator<CombinationRecordDO> iterator = headExpireRecords.iterator(); iterator.hasNext(); ) {
367 CombinationRecordDO record = iterator.next(); 365 CombinationRecordDO record = iterator.next();
368 // 3.1 不匹配,则直接跳过 366 // 3.1 不匹配,则直接跳过
369 - CombinationActivityDO activityDO = activityMap.get(record.getActivityId());  
370 - if (activityDO == null || !activityDO.getVirtualGroup()) { // 取不到活动的或者不是虚拟拼团的 367 + CombinationActivityDO activity = activityMap.get(record.getActivityId());
  368 + if (activity == null || !activity.getVirtualGroup()) { // 取不到活动的或者不是虚拟拼团的
371 continue; 369 continue;
372 } 370 }
373 // 3.2 匹配,则移除,添加到虚拟成团中,并结束寻找 371 // 3.2 匹配,则移除,添加到虚拟成团中,并结束寻找
@@ -380,7 +378,6 @@ public class CombinationRecordServiceImpl implements CombinationRecordService { @@ -380,7 +378,6 @@ public class CombinationRecordServiceImpl implements CombinationRecordService {
380 getSelf().handleExpireRecord(headExpireRecords); 378 getSelf().handleExpireRecord(headExpireRecords);
381 // 5.虚拟成团 379 // 5.虚拟成团
382 getSelf().handleVirtualGroupRecord(virtualGroupHeadRecords); 380 getSelf().handleVirtualGroupRecord(virtualGroupHeadRecords);
383 -  
384 return new KeyValue<>(headExpireRecords.size(), virtualGroupHeadRecords.size()); 381 return new KeyValue<>(headExpireRecords.size(), virtualGroupHeadRecords.size());
385 } 382 }
386 383
@@ -401,7 +398,6 @@ public class CombinationRecordServiceImpl implements CombinationRecordService { @@ -401,7 +398,6 @@ public class CombinationRecordServiceImpl implements CombinationRecordService {
401 headsAndRecords.forEach(item -> { 398 headsAndRecords.forEach(item -> {
402 tradeOrderApi.cancelPaidOrder(item.getUserId(), item.getOrderId()); 399 tradeOrderApi.cancelPaidOrder(item.getUserId(), item.getOrderId());
403 }); 400 });
404 -  
405 } 401 }
406 402
407 @Async 403 @Async
@@ -410,9 +406,9 @@ public class CombinationRecordServiceImpl implements CombinationRecordService { @@ -410,9 +406,9 @@ public class CombinationRecordServiceImpl implements CombinationRecordService {
410 return; 406 return;
411 } 407 }
412 408
413 - // 1.团员补齐 409 + // 1. 团员补齐
414 combinationRecordMapper.insertBatch(CombinationActivityConvert.INSTANCE.convertVirtualGroupList(virtualGroupHeadRecords)); 410 combinationRecordMapper.insertBatch(CombinationActivityConvert.INSTANCE.convertVirtualGroupList(virtualGroupHeadRecords));
415 - // 2.更新拼团记录 411 + // 2. 更新拼团记录
416 updateBatchCombinationRecords(virtualGroupHeadRecords, CombinationRecordStatusEnum.SUCCESS); 412 updateBatchCombinationRecords(virtualGroupHeadRecords, CombinationRecordStatusEnum.SUCCESS);
417 } 413 }
418 414
yudao-module-mall/yudao-module-statistics-biz/src/main/java/cn/iocoder/yudao/module/statistics/dal/mysql/infra/ApiAccessLogStatisticsMapper.java
@@ -7,15 +7,17 @@ import org.apache.ibatis.annotations.Param; @@ -7,15 +7,17 @@ import org.apache.ibatis.annotations.Param;
7 import java.time.LocalDateTime; 7 import java.time.LocalDateTime;
8 8
9 /** 9 /**
10 - * API 访问日志统计 Mapper 10 + * API 访问日志的统计 Mapper
11 * 11 *
12 * @author owen 12 * @author owen
13 */ 13 */
14 @Mapper 14 @Mapper
15 public interface ApiAccessLogStatisticsMapper extends BaseMapperX<Object> { 15 public interface ApiAccessLogStatisticsMapper extends BaseMapperX<Object> {
16 16
17 - Integer selectCountByIp(@Param("beginTime") LocalDateTime beginTime, @Param("endTime") LocalDateTime endTime); 17 + Integer selectCountByIp(@Param("beginTime") LocalDateTime beginTime,
  18 + @Param("endTime") LocalDateTime endTime);
18 19
19 - Integer selectCountByUserId(@Param("beginTime") LocalDateTime beginTime, @Param("endTime") LocalDateTime endTime); 20 + Integer selectCountByUserId(@Param("beginTime") LocalDateTime beginTime,
  21 + @Param("endTime") LocalDateTime endTime);
20 22
21 } 23 }
yudao-module-mall/yudao-module-statistics-biz/src/main/java/cn/iocoder/yudao/module/statistics/dal/mysql/member/MemberStatisticsMapper.java
@@ -10,7 +10,7 @@ import java.time.LocalDateTime; @@ -10,7 +10,7 @@ import java.time.LocalDateTime;
10 import java.util.List; 10 import java.util.List;
11 11
12 /** 12 /**
13 - * 会员统计 Mapper 13 + * 会员信息的统计 Mapper
14 * 14 *
15 * @author owen 15 * @author owen
16 */ 16 */
@@ -21,6 +21,7 @@ public interface MemberStatisticsMapper extends BaseMapperX&lt;Object&gt; { @@ -21,6 +21,7 @@ public interface MemberStatisticsMapper extends BaseMapperX&lt;Object&gt; {
21 21
22 List<MemberSexStatisticsRespVO> selectSummaryListBySex(); 22 List<MemberSexStatisticsRespVO> selectSummaryListBySex();
23 23
24 - Integer selectUserCount(@Param("beginTime") LocalDateTime beginTime, @Param("endTime") LocalDateTime endTime); 24 + Integer selectUserCount(@Param("beginTime") LocalDateTime beginTime,
  25 + @Param("endTime") LocalDateTime endTime);
25 26
26 } 27 }
yudao-module-mall/yudao-module-statistics-biz/src/main/java/cn/iocoder/yudao/module/statistics/dal/mysql/pay/PayWalletStatisticsMapper.java
@@ -10,7 +10,7 @@ import org.apache.ibatis.annotations.Param; @@ -10,7 +10,7 @@ import org.apache.ibatis.annotations.Param;
10 import java.time.LocalDateTime; 10 import java.time.LocalDateTime;
11 11
12 /** 12 /**
13 - * 交易统计 Mapper 13 + * 支付钱包的统计 Mapper
14 * 14 *
15 * @author owen 15 * @author owen
16 */ 16 */
@@ -29,6 +29,7 @@ public interface PayWalletStatisticsMapper extends BaseMapperX&lt;TradeStatisticsDO @@ -29,6 +29,7 @@ public interface PayWalletStatisticsMapper extends BaseMapperX&lt;TradeStatisticsDO
29 @Param("endTime") LocalDateTime endTime, 29 @Param("endTime") LocalDateTime endTime,
30 @Param("bizType") Integer bizType); 30 @Param("bizType") Integer bizType);
31 31
  32 + // TODO @疯狂:是不是搞个单独的 BO 呀;
32 MemberSummaryRespVO selectRechargeSummaryGroupByWalletId(@Param("beginTime") LocalDateTime beginTime, 33 MemberSummaryRespVO selectRechargeSummaryGroupByWalletId(@Param("beginTime") LocalDateTime beginTime,
33 @Param("endTime") LocalDateTime endTime, 34 @Param("endTime") LocalDateTime endTime,
34 @Param("payStatus") Boolean payStatus); 35 @Param("payStatus") Boolean payStatus);
yudao-module-mall/yudao-module-statistics-biz/src/main/java/cn/iocoder/yudao/module/statistics/dal/mysql/trade/AfterSaleStatisticsMapper.java
@@ -9,7 +9,7 @@ import org.apache.ibatis.annotations.Param; @@ -9,7 +9,7 @@ import org.apache.ibatis.annotations.Param;
9 import java.time.LocalDateTime; 9 import java.time.LocalDateTime;
10 10
11 /** 11 /**
12 - * 交易统计 Mapper 12 + * 售后订单的统计 Mapper
13 * 13 *
14 * @author owen 14 * @author owen
15 */ 15 */
yudao-module-mall/yudao-module-statistics-biz/src/main/java/cn/iocoder/yudao/module/statistics/dal/mysql/trade/BrokerageStatisticsMapper.java
@@ -8,7 +8,7 @@ import org.apache.ibatis.annotations.Param; @@ -8,7 +8,7 @@ import org.apache.ibatis.annotations.Param;
8 import java.time.LocalDateTime; 8 import java.time.LocalDateTime;
9 9
10 /** 10 /**
11 - * 交易统计 Mapper 11 + * 订单分销的统计 Mapper
12 * 12 *
13 * @author owen 13 * @author owen
14 */ 14 */
yudao-module-mall/yudao-module-statistics-biz/src/main/java/cn/iocoder/yudao/module/statistics/dal/mysql/trade/TradeOrderStatisticsMapper.java
@@ -10,7 +10,7 @@ import java.time.LocalDateTime; @@ -10,7 +10,7 @@ import java.time.LocalDateTime;
10 import java.util.List; 10 import java.util.List;
11 11
12 /** 12 /**
13 - * 交易统计 Mapper 13 + * 交易订单的统计 Mapper
14 * 14 *
15 * @author owen 15 * @author owen
16 */ 16 */
yudao-module-mall/yudao-module-statistics-biz/src/main/java/cn/iocoder/yudao/module/statistics/dal/mysql/trade/TradeStatisticsMapper.java
@@ -19,6 +19,7 @@ import java.util.List; @@ -19,6 +19,7 @@ import java.util.List;
19 @Mapper 19 @Mapper
20 public interface TradeStatisticsMapper extends BaseMapperX<TradeStatisticsDO> { 20 public interface TradeStatisticsMapper extends BaseMapperX<TradeStatisticsDO> {
21 21
  22 + // TODO @疯狂:这个要不要也挪到 xml 里,保持统一?
22 @Select("SELECT IFNULL(SUM(order_create_count), 0) AS count, IFNULL(SUM(order_pay_price), 0) AS summary " + 23 @Select("SELECT IFNULL(SUM(order_create_count), 0) AS count, IFNULL(SUM(order_pay_price), 0) AS summary " +
23 "FROM trade_statistics " + 24 "FROM trade_statistics " +
24 "WHERE time BETWEEN #{beginTime} AND #{endTime} AND deleted = FALSE") 25 "WHERE time BETWEEN #{beginTime} AND #{endTime} AND deleted = FALSE")
@@ -33,4 +34,5 @@ public interface TradeStatisticsMapper extends BaseMapperX&lt;TradeStatisticsDO&gt; { @@ -33,4 +34,5 @@ public interface TradeStatisticsMapper extends BaseMapperX&lt;TradeStatisticsDO&gt; {
33 34
34 Integer selectExpensePriceByTimeBetween(@Param("beginTime") LocalDateTime beginTime, 35 Integer selectExpensePriceByTimeBetween(@Param("beginTime") LocalDateTime beginTime,
35 @Param("endTime") LocalDateTime endTime); 36 @Param("endTime") LocalDateTime endTime);
  37 +
36 } 38 }
yudao-module-mall/yudao-module-statistics-biz/src/main/java/cn/iocoder/yudao/module/statistics/service/infra/ApiAccessLogStatisticsService.java
@@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.statistics.service.infra; @@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.statistics.service.infra;
3 import java.time.LocalDateTime; 3 import java.time.LocalDateTime;
4 4
5 /** 5 /**
6 - * API 访问日志统计 Service 接口 6 + * API 访问日志的统计 Service 接口
7 * 7 *
8 * @author owen 8 * @author owen
9 */ 9 */
yudao-module-mall/yudao-module-statistics-biz/src/main/java/cn/iocoder/yudao/module/statistics/service/infra/ApiAccessLogStatisticsServiceImpl.java
@@ -8,7 +8,7 @@ import javax.annotation.Resource; @@ -8,7 +8,7 @@ import javax.annotation.Resource;
8 import java.time.LocalDateTime; 8 import java.time.LocalDateTime;
9 9
10 /** 10 /**
11 - * API 访问日志统计 Service 实现类 11 + * API 访问日志的统计 Service 实现类
12 * 12 *
13 * @author owen 13 * @author owen
14 */ 14 */
yudao-module-mall/yudao-module-statistics-biz/src/main/java/cn/iocoder/yudao/module/statistics/service/member/MemberStatisticsService.java
@@ -9,7 +9,7 @@ import java.time.LocalDateTime; @@ -9,7 +9,7 @@ import java.time.LocalDateTime;
9 import java.util.List; 9 import java.util.List;
10 10
11 /** 11 /**
12 - * 会员统计 Service 接口 12 + * 会员信息的统计 Service 接口
13 * 13 *
14 * @author owen 14 * @author owen
15 */ 15 */
yudao-module-mall/yudao-module-statistics-biz/src/main/java/cn/iocoder/yudao/module/statistics/service/member/MemberStatisticsServiceImpl.java
@@ -24,7 +24,7 @@ import java.util.Optional; @@ -24,7 +24,7 @@ import java.util.Optional;
24 import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap; 24 import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap;
25 25
26 /** 26 /**
27 - * 会员统计 Service 实现类 27 + * 会员信息的统计 Service 实现类
28 * 28 *
29 * @author owen 29 * @author owen
30 */ 30 */
yudao-module-mall/yudao-module-statistics-biz/src/main/java/cn/iocoder/yudao/module/statistics/service/pay/PayWalletStatisticsService.java
@@ -6,7 +6,7 @@ import cn.iocoder.yudao.module.statistics.service.trade.bo.WalletSummaryRespBO; @@ -6,7 +6,7 @@ import cn.iocoder.yudao.module.statistics.service.trade.bo.WalletSummaryRespBO;
6 import java.time.LocalDateTime; 6 import java.time.LocalDateTime;
7 7
8 /** 8 /**
9 - * 钱包统计 Service 接口 9 + * 钱包的统计 Service 接口
10 * 10 *
11 * @author owen 11 * @author owen
12 */ 12 */
yudao-module-mall/yudao-module-statistics-biz/src/main/java/cn/iocoder/yudao/module/statistics/service/pay/PayWalletStatisticsServiceImpl.java
@@ -12,7 +12,7 @@ import javax.annotation.Resource; @@ -12,7 +12,7 @@ import javax.annotation.Resource;
12 import java.time.LocalDateTime; 12 import java.time.LocalDateTime;
13 13
14 /** 14 /**
15 - * 钱包统计 Service 实现类 15 + * 钱包的统计 Service 实现类
16 * 16 *
17 * @author owen 17 * @author owen
18 */ 18 */
@@ -31,11 +31,10 @@ public class PayWalletStatisticsServiceImpl implements PayWalletStatisticsServic @@ -31,11 +31,10 @@ public class PayWalletStatisticsServiceImpl implements PayWalletStatisticsServic
31 beginTime, endTime, PayRefundStatusEnum.SUCCESS.getStatus()); 31 beginTime, endTime, PayRefundStatusEnum.SUCCESS.getStatus());
32 Integer walletPayPrice = payWalletStatisticsMapper.selectPriceSummaryByBizTypeAndCreateTimeBetween( 32 Integer walletPayPrice = payWalletStatisticsMapper.selectPriceSummaryByBizTypeAndCreateTimeBetween(
33 beginTime, endTime, PayWalletBizTypeEnum.PAYMENT.getType()); 33 beginTime, endTime, PayWalletBizTypeEnum.PAYMENT.getType());
34 -  
35 - paySummary.setOrderWalletPayPrice(walletPayPrice);  
36 - paySummary.setRechargeRefundCount(refundSummary.getRechargeRefundCount());  
37 - paySummary.setRechargeRefundPrice(refundSummary.getRechargeRefundPrice());  
38 - 34 + // 拼接
  35 + paySummary.setOrderWalletPayPrice(walletPayPrice)
  36 + .setRechargeRefundCount(refundSummary.getRechargeRefundCount())
  37 + .setRechargeRefundPrice(refundSummary.getRechargeRefundPrice());
39 return paySummary; 38 return paySummary;
40 } 39 }
41 40
yudao-module-mall/yudao-module-statistics-biz/src/main/java/cn/iocoder/yudao/module/statistics/service/trade/TradeOrderStatisticsService.java
@@ -7,7 +7,7 @@ import java.time.LocalDateTime; @@ -7,7 +7,7 @@ import java.time.LocalDateTime;
7 import java.util.List; 7 import java.util.List;
8 8
9 /** 9 /**
10 - * 交易订单统计 Service 接口 10 + * 交易订单的统计 Service 接口
11 * 11 *
12 * @author owen 12 * @author owen
13 */ 13 */
yudao-module-mall/yudao-module-statistics-biz/src/main/java/cn/iocoder/yudao/module/statistics/service/trade/TradeStatisticsServiceImpl.java
@@ -45,16 +45,15 @@ public class TradeStatisticsServiceImpl implements TradeStatisticsService { @@ -45,16 +45,15 @@ public class TradeStatisticsServiceImpl implements TradeStatisticsService {
45 45
46 @Override 46 @Override
47 public TradeStatisticsComparisonRespVO<TradeSummaryRespVO> getTradeSummaryComparison() { 47 public TradeStatisticsComparisonRespVO<TradeSummaryRespVO> getTradeSummaryComparison() {
48 - // 昨天的数据 48 + // 1.1 昨天的数据
49 TradeSummaryRespBO yesterdayData = getTradeSummaryByDays(-1); 49 TradeSummaryRespBO yesterdayData = getTradeSummaryByDays(-1);
50 - // 前天的数据(用于对照昨天的数据) 50 + // 1.2 前天的数据(用于对照昨天的数据)
51 TradeSummaryRespBO beforeYesterdayData = getTradeSummaryByDays(-2); 51 TradeSummaryRespBO beforeYesterdayData = getTradeSummaryByDays(-2);
52 -  
53 - // 本月数据; 52 + // 2.1 本月数据
54 TradeSummaryRespBO monthData = getTradeSummaryByMonths(0); 53 TradeSummaryRespBO monthData = getTradeSummaryByMonths(0);
55 - // 上月数据(用于对照本月的数据) 54 + // 2.2 上月数据(用于对照本月的数据)
56 TradeSummaryRespBO lastMonthData = getTradeSummaryByMonths(-1); 55 TradeSummaryRespBO lastMonthData = getTradeSummaryByMonths(-1);
57 - 56 + // 转换返回
58 return TradeStatisticsConvert.INSTANCE.convert(yesterdayData, beforeYesterdayData, monthData, lastMonthData); 57 return TradeStatisticsConvert.INSTANCE.convert(yesterdayData, beforeYesterdayData, monthData, lastMonthData);
59 } 58 }
60 59
@@ -81,31 +80,31 @@ public class TradeStatisticsServiceImpl implements TradeStatisticsService { @@ -81,31 +80,31 @@ public class TradeStatisticsServiceImpl implements TradeStatisticsService {
81 80
82 @Override 81 @Override
83 public String statisticsYesterdayTrade() { 82 public String statisticsYesterdayTrade() {
84 - // 处理统计参数  
85 LocalDateTime yesterday = LocalDateTime.now().minusDays(1); 83 LocalDateTime yesterday = LocalDateTime.now().minusDays(1);
86 LocalDateTime beginTime = LocalDateTimeUtil.beginOfDay(yesterday); 84 LocalDateTime beginTime = LocalDateTimeUtil.beginOfDay(yesterday);
87 LocalDateTime endTime = LocalDateTimeUtil.endOfDay(yesterday); 85 LocalDateTime endTime = LocalDateTimeUtil.endOfDay(yesterday);
88 - // 统计 86 + // 1.1 统计订单
89 StopWatch stopWatch = new StopWatch("交易统计"); 87 StopWatch stopWatch = new StopWatch("交易统计");
90 stopWatch.start("统计订单"); 88 stopWatch.start("统计订单");
91 TradeOrderSummaryRespBO orderSummary = tradeOrderStatisticsService.getOrderSummary(beginTime, endTime); 89 TradeOrderSummaryRespBO orderSummary = tradeOrderStatisticsService.getOrderSummary(beginTime, endTime);
92 stopWatch.stop(); 90 stopWatch.stop();
93 - 91 + // 1.2 统计售后
94 stopWatch.start("统计售后"); 92 stopWatch.start("统计售后");
95 AfterSaleSummaryRespBO afterSaleSummary = afterSaleStatisticsService.getAfterSaleSummary(beginTime, endTime); 93 AfterSaleSummaryRespBO afterSaleSummary = afterSaleStatisticsService.getAfterSaleSummary(beginTime, endTime);
96 stopWatch.stop(); 94 stopWatch.stop();
97 - 95 + // 1.3 统计佣金
98 stopWatch.start("统计佣金"); 96 stopWatch.start("统计佣金");
99 Integer brokerageSettlementPrice = brokerageStatisticsService.getBrokerageSettlementPriceSummary(beginTime, endTime); 97 Integer brokerageSettlementPrice = brokerageStatisticsService.getBrokerageSettlementPriceSummary(beginTime, endTime);
100 stopWatch.stop(); 98 stopWatch.stop();
101 - 99 + // 1.4 统计充值
102 stopWatch.start("统计充值"); 100 stopWatch.start("统计充值");
103 WalletSummaryRespBO walletSummary = payWalletStatisticsService.getWalletSummary(beginTime, endTime); 101 WalletSummaryRespBO walletSummary = payWalletStatisticsService.getWalletSummary(beginTime, endTime);
104 stopWatch.stop(); 102 stopWatch.stop();
105 - // 插入数据  
106 - TradeStatisticsDO entity = TradeStatisticsConvert.INSTANCE.convert(yesterday, orderSummary, afterSaleSummary, brokerageSettlementPrice, walletSummary); 103 +
  104 + // 2. 插入数据
  105 + TradeStatisticsDO entity = TradeStatisticsConvert.INSTANCE.convert(yesterday, orderSummary, afterSaleSummary,
  106 + brokerageSettlementPrice, walletSummary);
107 tradeStatisticsMapper.insert(entity); 107 tradeStatisticsMapper.insert(entity);
108 - // 返回计时结果  
109 return stopWatch.prettyPrint(); 108 return stopWatch.prettyPrint();
110 } 109 }
111 110
yudao-module-mall/yudao-module-statistics-biz/src/main/java/cn/iocoder/yudao/module/statistics/service/trade/bo/WalletSummaryRespBO.java
@@ -9,6 +9,7 @@ import lombok.Data; @@ -9,6 +9,7 @@ import lombok.Data;
9 */ 9 */
10 @Data 10 @Data
11 public class WalletSummaryRespBO { 11 public class WalletSummaryRespBO {
  12 +
12 /** 13 /**
13 * 总支付金额(余额),单位:分 14 * 总支付金额(余额),单位:分
14 */ 15 */
yudao-module-mall/yudao-module-statistics-biz/src/main/resources/mapper/infra/ApiAccessLogStatisticsMapper.xml
1 <?xml version="1.0" encoding="UTF-8"?> 1 <?xml version="1.0" encoding="UTF-8"?>
2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
3 <mapper namespace="cn.iocoder.yudao.module.statistics.dal.mysql.infra.ApiAccessLogStatisticsMapper"> 3 <mapper namespace="cn.iocoder.yudao.module.statistics.dal.mysql.infra.ApiAccessLogStatisticsMapper">
  4 +
4 <select id="selectCountByIp" resultType="java.lang.Integer"> 5 <select id="selectCountByIp" resultType="java.lang.Integer">
5 SELECT COUNT(1) 6 SELECT COUNT(1)
6 FROM infra_api_access_log 7 FROM infra_api_access_log
7 - WHERE deleted = FALSE  
8 - AND create_time BETWEEN #{beginTime} AND #{endTime} 8 + WHERE create_time BETWEEN #{beginTime} AND #{endTime}
  9 + AND deleted = FALSE
9 GROUP BY user_ip 10 GROUP BY user_ip
10 </select> 11 </select>
11 12
12 <select id="selectCountByUserId" resultType="java.lang.Integer"> 13 <select id="selectCountByUserId" resultType="java.lang.Integer">
13 SELECT COUNT(1) 14 SELECT COUNT(1)
14 FROM infra_api_access_log 15 FROM infra_api_access_log
15 - WHERE user_id != 0  
16 - AND deleted = FALSE 16 + WHERE user_id > 0
17 AND create_time BETWEEN #{beginTime} AND #{endTime} 17 AND create_time BETWEEN #{beginTime} AND #{endTime}
  18 + AND deleted = FALSE
18 GROUP BY user_id 19 GROUP BY user_id
19 </select> 20 </select>
  21 +
20 </mapper> 22 </mapper>
yudao-module-mall/yudao-module-statistics-biz/src/main/resources/mapper/member/MemberStatisticsMapper.xml
@@ -8,6 +8,7 @@ @@ -8,6 +8,7 @@
8 FROM member_user 8 FROM member_user
9 WHERE deleted = FALSE 9 WHERE deleted = FALSE
10 GROUP BY area_id 10 GROUP BY area_id
  11 + <!-- TODO @疯狂:order by 是不是交给内存哈 -->
11 ORDER BY userCount DESC 12 ORDER BY userCount DESC
12 </select> 13 </select>
13 14
@@ -17,6 +18,7 @@ @@ -17,6 +18,7 @@
17 FROM member_user 18 FROM member_user
18 WHERE deleted = FALSE 19 WHERE deleted = FALSE
19 GROUP BY sex 20 GROUP BY sex
  21 + <!-- TODO @疯狂:order by 是不是交给内存哈 -->
20 ORDER BY userCount DESC 22 ORDER BY userCount DESC
21 </select> 23 </select>
22 24
@@ -31,4 +33,5 @@ @@ -31,4 +33,5 @@
31 AND create_time &lt;= #{endTime} 33 AND create_time &lt;= #{endTime}
32 </if> 34 </if>
33 </select> 35 </select>
34 -</mapper>  
35 \ No newline at end of file 36 \ No newline at end of file
  37 +
  38 +</mapper>
yudao-module-mall/yudao-module-statistics-biz/src/main/resources/mapper/pay/PayWalletStatisticsMapper.xml
@@ -7,8 +7,8 @@ @@ -7,8 +7,8 @@
7 SUM(pay_price) AS rechargePayPrice 7 SUM(pay_price) AS rechargePayPrice
8 FROM pay_wallet_recharge 8 FROM pay_wallet_recharge
9 WHERE pay_status = #{payStatus} 9 WHERE pay_status = #{payStatus}
10 - AND deleted = FALSE  
11 AND pay_time BETWEEN #{beginTime} AND #{endTime} 10 AND pay_time BETWEEN #{beginTime} AND #{endTime}
  11 + AND deleted = FALSE
12 </select> 12 </select>
13 13
14 <select id="selectRechargeSummaryByRefundTimeBetween" 14 <select id="selectRechargeSummaryByRefundTimeBetween"
@@ -17,16 +17,16 @@ @@ -17,16 +17,16 @@
17 SUM(pay_price) AS rechargeRefundPrice 17 SUM(pay_price) AS rechargeRefundPrice
18 FROM pay_wallet_recharge 18 FROM pay_wallet_recharge
19 WHERE refund_status = #{refundStatus} 19 WHERE refund_status = #{refundStatus}
20 - AND deleted = FALSE  
21 AND refund_time BETWEEN #{beginTime} AND #{endTime} 20 AND refund_time BETWEEN #{beginTime} AND #{endTime}
  21 + AND deleted = FALSE
22 </select> 22 </select>
23 23
24 <select id="selectPriceSummaryByBizTypeAndCreateTimeBetween" resultType="java.lang.Integer"> 24 <select id="selectPriceSummaryByBizTypeAndCreateTimeBetween" resultType="java.lang.Integer">
25 SELECT SUM(price) 25 SELECT SUM(price)
26 FROM pay_wallet_transaction 26 FROM pay_wallet_transaction
27 WHERE biz_type = #{bizType} 27 WHERE biz_type = #{bizType}
28 - AND deleted = FALSE  
29 AND create_time BETWEEN #{beginTime} AND #{endTime} 28 AND create_time BETWEEN #{beginTime} AND #{endTime}
  29 + AND deleted = FALSE
30 </select> 30 </select>
31 31
32 <select id="selectRechargeSummaryGroupByWalletId" 32 <select id="selectRechargeSummaryGroupByWalletId"
@@ -35,13 +35,14 @@ @@ -35,13 +35,14 @@
35 SUM(pay_price) AS rechargePrice 35 SUM(pay_price) AS rechargePrice
36 FROM pay_wallet_recharge 36 FROM pay_wallet_recharge
37 WHERE pay_status = #{payStatus} 37 WHERE pay_status = #{payStatus}
38 - AND deleted = FALSE  
39 <if test="beginTime != null"> 38 <if test="beginTime != null">
40 AND pay_time >= #{beginTime} 39 AND pay_time >= #{beginTime}
41 </if> 40 </if>
42 <if test="endTime != null"> 41 <if test="endTime != null">
43 AND pay_time &lt;= #{endTime} 42 AND pay_time &lt;= #{endTime}
44 </if> 43 </if>
  44 + AND deleted = FALSE
45 GROUP BY wallet_id 45 GROUP BY wallet_id
46 </select> 46 </select>
  47 +
47 </mapper> 48 </mapper>
yudao-module-mall/yudao-module-statistics-biz/src/main/resources/mapper/trade/AfterSaleStatisticsMapper.xml
1 <?xml version="1.0" encoding="UTF-8"?> 1 <?xml version="1.0" encoding="UTF-8"?>
2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
3 <mapper namespace="cn.iocoder.yudao.module.statistics.dal.mysql.trade.AfterSaleStatisticsMapper"> 3 <mapper namespace="cn.iocoder.yudao.module.statistics.dal.mysql.trade.AfterSaleStatisticsMapper">
  4 +
4 <select id="selectSummaryByRefundTimeBetween" 5 <select id="selectSummaryByRefundTimeBetween"
5 resultType="cn.iocoder.yudao.module.statistics.service.trade.bo.AfterSaleSummaryRespBO"> 6 resultType="cn.iocoder.yudao.module.statistics.service.trade.bo.AfterSaleSummaryRespBO">
6 SELECT COUNT(1) AS afterSaleCount, 7 SELECT COUNT(1) AS afterSaleCount,
7 SUM(refund_price) AS afterSaleRefundPrice 8 SUM(refund_price) AS afterSaleRefundPrice
8 FROM trade_after_sale 9 FROM trade_after_sale
9 - WHERE deleted = FALSE  
10 - AND refund_time BETWEEN #{beginTime} AND #{endTime} 10 + WHERE refund_time BETWEEN #{beginTime} AND #{endTime}
  11 + AND deleted = FALSE
11 </select> 12 </select>
  13 +
12 </mapper> 14 </mapper>
yudao-module-mall/yudao-module-statistics-biz/src/main/resources/mapper/trade/BrokerageStatisticsMapper.xml
1 <?xml version="1.0" encoding="UTF-8"?> 1 <?xml version="1.0" encoding="UTF-8"?>
2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
3 <mapper namespace="cn.iocoder.yudao.module.statistics.dal.mysql.trade.BrokerageStatisticsMapper"> 3 <mapper namespace="cn.iocoder.yudao.module.statistics.dal.mysql.trade.BrokerageStatisticsMapper">
  4 +
4 <select id="selectSummaryPriceByStatusAndUnfreezeTimeBetween" resultType="java.lang.Integer"> 5 <select id="selectSummaryPriceByStatusAndUnfreezeTimeBetween" resultType="java.lang.Integer">
5 SELECT SUM(price) 6 SELECT SUM(price)
6 FROM trade_brokerage_record 7 FROM trade_brokerage_record
7 WHERE biz_type = #{bizType} 8 WHERE biz_type = #{bizType}
8 AND status = #{status} 9 AND status = #{status}
9 - AND deleted = FALSE  
10 AND unfreeze_time BETWEEN #{beginTime} AND #{endTime} 10 AND unfreeze_time BETWEEN #{beginTime} AND #{endTime}
  11 + AND deleted = FALSE
11 </select> 12 </select>
  13 +
12 </mapper> 14 </mapper>
yudao-module-mall/yudao-module-statistics-biz/src/main/resources/mapper/trade/TradeOrderStatisticsMapper.xml
1 <?xml version="1.0" encoding="UTF-8"?> 1 <?xml version="1.0" encoding="UTF-8"?>
2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
3 <mapper namespace="cn.iocoder.yudao.module.statistics.dal.mysql.trade.TradeOrderStatisticsMapper"> 3 <mapper namespace="cn.iocoder.yudao.module.statistics.dal.mysql.trade.TradeOrderStatisticsMapper">
  4 +
4 <select id="selectSummaryListByAreaId" 5 <select id="selectSummaryListByAreaId"
5 resultType="cn.iocoder.yudao.module.statistics.controller.admin.member.vo.MemberAreaStatisticsRespVO"> 6 resultType="cn.iocoder.yudao.module.statistics.controller.admin.member.vo.MemberAreaStatisticsRespVO">
6 SELECT receiver_area_id AS areaId, 7 SELECT receiver_area_id AS areaId,
@@ -33,25 +34,25 @@ @@ -33,25 +34,25 @@
33 <select id="selectUserCountByPayTimeBetween" resultType="java.lang.Integer"> 34 <select id="selectUserCountByPayTimeBetween" resultType="java.lang.Integer">
34 SELECT COUNT(1) 35 SELECT COUNT(1)
35 FROM trade_order 36 FROM trade_order
36 - WHERE deleted = FALSE 37 + WHERE pay_time BETWEEN #{beginTime} AND #{endTime}
37 AND pay_status = TRUE 38 AND pay_status = TRUE
38 - AND pay_time BETWEEN #{beginTime} AND #{endTime} 39 + AND deleted = FALSE
39 GROUP BY user_id 40 GROUP BY user_id
40 </select> 41 </select>
41 42
42 <select id="selectCountByCreateTimeBetween" resultType="java.lang.Integer"> 43 <select id="selectCountByCreateTimeBetween" resultType="java.lang.Integer">
43 SELECT COUNT(1) 44 SELECT COUNT(1)
44 FROM trade_order 45 FROM trade_order
45 - WHERE deleted = FALSE  
46 - AND create_time BETWEEN #{beginTime} AND #{endTime} 46 + WHERE create_time BETWEEN #{beginTime} AND #{endTime}
  47 + AND deleted = FALSE
47 </select> 48 </select>
48 49
49 <select id="selectCountByPayTimeBetween" resultType="java.lang.Integer"> 50 <select id="selectCountByPayTimeBetween" resultType="java.lang.Integer">
50 SELECT COUNT(1) 51 SELECT COUNT(1)
51 FROM trade_order 52 FROM trade_order
52 WHERE pay_status = TRUE 53 WHERE pay_status = TRUE
53 - AND deleted = FALSE  
54 AND create_time BETWEEN #{beginTime} AND #{endTime} 54 AND create_time BETWEEN #{beginTime} AND #{endTime}
  55 + AND deleted = FALSE
55 </select> 56 </select>
56 57
57 <select id="selectSummaryPriceByPayTimeBetween" resultType="java.lang.Integer"> 58 <select id="selectSummaryPriceByPayTimeBetween" resultType="java.lang.Integer">
@@ -61,4 +62,5 @@ @@ -61,4 +62,5 @@
61 AND deleted = FALSE 62 AND deleted = FALSE
62 AND create_time BETWEEN #{beginTime} AND #{endTime} 63 AND create_time BETWEEN #{beginTime} AND #{endTime}
63 </select> 64 </select>
  65 +
64 </mapper> 66 </mapper>
yudao-module-mall/yudao-module-statistics-biz/src/main/resources/mapper/trade/TradeStatisticsMapper.xml
1 <?xml version="1.0" encoding="UTF-8"?> 1 <?xml version="1.0" encoding="UTF-8"?>
2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
3 <mapper namespace="cn.iocoder.yudao.module.statistics.dal.mysql.trade.TradeStatisticsMapper"> 3 <mapper namespace="cn.iocoder.yudao.module.statistics.dal.mysql.trade.TradeStatisticsMapper">
  4 +
4 <select id="selectByTimeBetween" 5 <select id="selectByTimeBetween"
5 resultType="cn.iocoder.yudao.module.statistics.controller.admin.trade.vo.TradeTrendSummaryRespVO"> 6 resultType="cn.iocoder.yudao.module.statistics.controller.admin.trade.vo.TradeTrendSummaryRespVO">
6 SELECT 7 SELECT
@@ -48,4 +49,5 @@ @@ -48,4 +49,5 @@
48 AND time &lt;= #{endTime} 49 AND time &lt;= #{endTime}
49 </if> 50 </if>
50 </select> 51 </select>
  52 +
51 </mapper> 53 </mapper>
yudao-module-mall/yudao-module-trade-api/src/main/java/cn/iocoder/yudao/module/trade/api/aftersale/TradeAfterSaleApi.java deleted
1 -package cn.iocoder.yudao.module.trade.api.aftersale;  
2 -  
3 -/**  
4 - * 售后 API 接口  
5 - *  
6 - * @author owen  
7 - */  
8 -public interface TradeAfterSaleApi {  
9 -  
10 -}  
yudao-module-mall/yudao-module-trade-api/src/main/java/cn/iocoder/yudao/module/trade/api/brokerage/TradeBrokerageApi.java deleted
1 -package cn.iocoder.yudao.module.trade.api.brokerage;  
2 -  
3 -/**  
4 - * 分销 API 接口  
5 - *  
6 - * @author owen  
7 - */  
8 -public interface TradeBrokerageApi {  
9 -  
10 -}  
yudao-module-mall/yudao-module-trade-api/src/main/java/cn/iocoder/yudao/module/trade/api/order/TradeOrderApi.java
@@ -28,16 +28,7 @@ public interface TradeOrderApi { @@ -28,16 +28,7 @@ public interface TradeOrderApi {
28 */ 28 */
29 TradeOrderRespDTO getOrder(Long id); 29 TradeOrderRespDTO getOrder(Long id);
30 30
31 - /**  
32 - * 更新拼团相关信息到订单  
33 - *  
34 - * @param orderId 订单编号  
35 - * @param activityId 拼团活动编号  
36 - * @param combinationRecordId 拼团记录编号  
37 - * @param headId 团长编号  
38 - */  
39 - void updateOrderCombinationInfo(Long orderId, Long activityId, Long combinationRecordId, Long headId);  
40 - 31 + // TODO 芋艿:需要优化下;
41 /** 32 /**
42 * 取消支付订单 33 * 取消支付订单
43 * 34 *
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/api/aftersale/TradeAfterSaleApiImpl.java deleted
1 -package cn.iocoder.yudao.module.trade.api.aftersale;  
2 -  
3 -import cn.iocoder.yudao.module.trade.service.aftersale.AfterSaleService;  
4 -import org.springframework.stereotype.Service;  
5 -import org.springframework.validation.annotation.Validated;  
6 -  
7 -import javax.annotation.Resource;  
8 -  
9 -/**  
10 - * 售后 API 接口实现类  
11 - *  
12 - * @author owen  
13 - */  
14 -@Service  
15 -@Validated  
16 -public class TradeAfterSaleApiImpl implements TradeAfterSaleApi {  
17 -  
18 - @Resource  
19 - private AfterSaleService afterSaleService;  
20 -  
21 -}  
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/api/brokerage/TradeBrokerageApiImpl.java deleted
1 -package cn.iocoder.yudao.module.trade.api.brokerage;  
2 -  
3 -import cn.iocoder.yudao.module.trade.service.brokerage.BrokerageRecordService;  
4 -import org.springframework.stereotype.Service;  
5 -import org.springframework.validation.annotation.Validated;  
6 -  
7 -import javax.annotation.Resource;  
8 -  
9 -/**  
10 - * 订单 API 接口实现类  
11 - *  
12 - * @author HUIHUI  
13 - */  
14 -@Service  
15 -@Validated  
16 -public class TradeBrokerageApiImpl implements TradeBrokerageApi {  
17 -  
18 - @Resource  
19 - private BrokerageRecordService brokerageRecordService;  
20 -  
21 -}  
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/api/order/TradeOrderApiImpl.java
@@ -2,10 +2,8 @@ package cn.iocoder.yudao.module.trade.api.order; @@ -2,10 +2,8 @@ package cn.iocoder.yudao.module.trade.api.order;
2 2
3 import cn.iocoder.yudao.module.trade.api.order.dto.TradeOrderRespDTO; 3 import cn.iocoder.yudao.module.trade.api.order.dto.TradeOrderRespDTO;
4 import cn.iocoder.yudao.module.trade.convert.order.TradeOrderConvert; 4 import cn.iocoder.yudao.module.trade.convert.order.TradeOrderConvert;
5 -import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderDO;  
6 import cn.iocoder.yudao.module.trade.service.order.TradeOrderQueryService; 5 import cn.iocoder.yudao.module.trade.service.order.TradeOrderQueryService;
7 import cn.iocoder.yudao.module.trade.service.order.TradeOrderUpdateService; 6 import cn.iocoder.yudao.module.trade.service.order.TradeOrderUpdateService;
8 -import org.springframework.context.annotation.Lazy;  
9 import org.springframework.stereotype.Service; 7 import org.springframework.stereotype.Service;
10 import org.springframework.validation.annotation.Validated; 8 import org.springframework.validation.annotation.Validated;
11 9
@@ -13,9 +11,6 @@ import javax.annotation.Resource; @@ -13,9 +11,6 @@ import javax.annotation.Resource;
13 import java.util.Collection; 11 import java.util.Collection;
14 import java.util.List; 12 import java.util.List;
15 13
16 -import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;  
17 -import static cn.iocoder.yudao.module.trade.enums.ErrorCodeConstants.ORDER_NOT_FOUND;  
18 -  
19 /** 14 /**
20 * 订单 API 接口实现类 15 * 订单 API 接口实现类
21 * 16 *
@@ -28,7 +23,6 @@ public class TradeOrderApiImpl implements TradeOrderApi { @@ -28,7 +23,6 @@ public class TradeOrderApiImpl implements TradeOrderApi {
28 @Resource 23 @Resource
29 private TradeOrderUpdateService tradeOrderUpdateService; 24 private TradeOrderUpdateService tradeOrderUpdateService;
30 @Resource 25 @Resource
31 - @Lazy  
32 private TradeOrderQueryService tradeOrderQueryService; 26 private TradeOrderQueryService tradeOrderQueryService;
33 27
34 @Override 28 @Override
@@ -42,11 +36,6 @@ public class TradeOrderApiImpl implements TradeOrderApi { @@ -42,11 +36,6 @@ public class TradeOrderApiImpl implements TradeOrderApi {
42 } 36 }
43 37
44 @Override 38 @Override
45 - public void updateOrderCombinationInfo(Long orderId, Long activityId, Long combinationRecordId, Long headId) {  
46 - tradeOrderUpdateService.updateOrderCombinationInfo(orderId, activityId, combinationRecordId, headId);  
47 - }  
48 -  
49 - @Override  
50 public void cancelPaidOrder(Long userId, Long orderId) { 39 public void cancelPaidOrder(Long userId, Long orderId) {
51 tradeOrderUpdateService.cancelPaidOrder(userId, orderId); 40 tradeOrderUpdateService.cancelPaidOrder(userId, orderId);
52 } 41 }
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/dal/mysql/order/TradeOrderMapper.java
@@ -93,6 +93,7 @@ public interface TradeOrderMapper extends BaseMapperX&lt;TradeOrderDO&gt; { @@ -93,6 +93,7 @@ public interface TradeOrderMapper extends BaseMapperX&lt;TradeOrderDO&gt; {
93 return selectOne(TradeOrderDO::getPickUpVerifyCode, pickUpVerifyCode); 93 return selectOne(TradeOrderDO::getPickUpVerifyCode, pickUpVerifyCode);
94 } 94 }
95 95
  96 + // TODO @hui999:是不是只针对 combinationActivityId 的查询呀?
96 default TradeOrderDO selectByUserIdAndActivityIdAndStatus(Long userId, Long activityId, Integer status) { 97 default TradeOrderDO selectByUserIdAndActivityIdAndStatus(Long userId, Long activityId, Integer status) {
97 return selectOne(new LambdaQueryWrapperX<TradeOrderDO>() 98 return selectOne(new LambdaQueryWrapperX<TradeOrderDO>()
98 .and(q -> q.eq(TradeOrderDO::getUserId, userId) 99 .and(q -> q.eq(TradeOrderDO::getUserId, userId)
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/TradeOrderUpdateServiceImpl.java
@@ -657,7 +657,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { @@ -657,7 +657,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
657 public void updateOrderAddress(TradeOrderUpdateAddressReqVO reqVO) { 657 public void updateOrderAddress(TradeOrderUpdateAddressReqVO reqVO) {
658 // 校验交易订单 658 // 校验交易订单
659 TradeOrderDO order = validateOrderExists(reqVO.getId()); 659 TradeOrderDO order = validateOrderExists(reqVO.getId());
660 - // 只有待发货状态才可以修改订单收货地址; 660 + // 只有待发货状态,才可以修改订单收货地址;
661 if (!TradeOrderStatusEnum.isUndelivered(order.getStatus())) { 661 if (!TradeOrderStatusEnum.isUndelivered(order.getStatus())) {
662 throw exception(ORDER_UPDATE_ADDRESS_FAIL_STATUS_NOT_DELIVERED); 662 throw exception(ORDER_UPDATE_ADDRESS_FAIL_STATUS_NOT_DELIVERED);
663 } 663 }
@@ -823,11 +823,11 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { @@ -823,11 +823,11 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
823 @Override 823 @Override
824 @Transactional(rollbackFor = Exception.class) 824 @Transactional(rollbackFor = Exception.class)
825 public void cancelPaidOrder(Long userId, Long orderId) { 825 public void cancelPaidOrder(Long userId, Long orderId) {
  826 + // TODO 芋艿:这里实现要优化下;
826 TradeOrderDO order = tradeOrderMapper.selectOrderByIdAndUserId(orderId, userId); 827 TradeOrderDO order = tradeOrderMapper.selectOrderByIdAndUserId(orderId, userId);
827 if (order == null) { 828 if (order == null) {
828 throw exception(ORDER_NOT_FOUND); 829 throw exception(ORDER_NOT_FOUND);
829 } 830 }
830 -  
831 cancelOrder0(order, TradeOrderCancelTypeEnum.MEMBER_CANCEL); 831 cancelOrder0(order, TradeOrderCancelTypeEnum.MEMBER_CANCEL);
832 } 832 }
833 833
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/handler/TradeCombinationOrderHandler.java
@@ -10,7 +10,6 @@ import cn.iocoder.yudao.module.trade.enums.order.TradeOrderStatusEnum; @@ -10,7 +10,6 @@ import cn.iocoder.yudao.module.trade.enums.order.TradeOrderStatusEnum;
10 import cn.iocoder.yudao.module.trade.enums.order.TradeOrderTypeEnum; 10 import cn.iocoder.yudao.module.trade.enums.order.TradeOrderTypeEnum;
11 import cn.iocoder.yudao.module.trade.service.order.TradeOrderQueryService; 11 import cn.iocoder.yudao.module.trade.service.order.TradeOrderQueryService;
12 import cn.iocoder.yudao.module.trade.service.order.TradeOrderUpdateService; 12 import cn.iocoder.yudao.module.trade.service.order.TradeOrderUpdateService;
13 -import org.springframework.context.annotation.Lazy;  
14 import org.springframework.stereotype.Component; 13 import org.springframework.stereotype.Component;
15 14
16 import javax.annotation.Resource; 15 import javax.annotation.Resource;
@@ -29,14 +28,11 @@ import static cn.iocoder.yudao.module.trade.enums.ErrorCodeConstants.ORDER_DELIV @@ -29,14 +28,11 @@ import static cn.iocoder.yudao.module.trade.enums.ErrorCodeConstants.ORDER_DELIV
29 public class TradeCombinationOrderHandler implements TradeOrderHandler { 28 public class TradeCombinationOrderHandler implements TradeOrderHandler {
30 29
31 @Resource 30 @Resource
32 - @Lazy  
33 private TradeOrderUpdateService orderUpdateService; 31 private TradeOrderUpdateService orderUpdateService;
34 @Resource 32 @Resource
35 - @Lazy  
36 private TradeOrderQueryService orderQueryService; 33 private TradeOrderQueryService orderQueryService;
37 34
38 @Resource 35 @Resource
39 - @Lazy  
40 private CombinationRecordApi combinationRecordApi; 36 private CombinationRecordApi combinationRecordApi;
41 37
42 @Override 38 @Override
@@ -51,7 +47,9 @@ public class TradeCombinationOrderHandler implements TradeOrderHandler { @@ -51,7 +47,9 @@ public class TradeCombinationOrderHandler implements TradeOrderHandler {
51 TradeOrderItemDO item = orderItems.get(0); 47 TradeOrderItemDO item = orderItems.get(0);
52 combinationRecordApi.validateCombinationRecord(order.getUserId(), order.getCombinationActivityId(), 48 combinationRecordApi.validateCombinationRecord(order.getUserId(), order.getCombinationActivityId(),
53 order.getCombinationHeadId(), item.getSkuId(), item.getCount()); 49 order.getCombinationHeadId(), item.getSkuId(), item.getCount());
54 - // 2. 校验该用户是否存在未支付的拼团活动订单;就是还没支付的时候,重复下单了;需要校验下;不然的话,一个拼团可以下多个单子了; 50 +
  51 + // 2. 校验该用户是否存在未支付的拼团活动订单,避免一个拼团可以下多个单子了
  52 + // TODO @puhui999:只校验未支付的拼团订单噢
55 TradeOrderDO activityOrder = orderQueryService.getActivityOrderByUserIdAndActivityIdAndStatus( 53 TradeOrderDO activityOrder = orderQueryService.getActivityOrderByUserIdAndActivityIdAndStatus(
56 order.getUserId(), order.getCombinationActivityId(), TradeOrderStatusEnum.UNPAID.getStatus()); 54 order.getUserId(), order.getCombinationActivityId(), TradeOrderStatusEnum.UNPAID.getStatus());
57 if (activityOrder != null) { 55 if (activityOrder != null) {
yudao-module-pay/yudao-module-pay-api/src/main/java/cn/iocoder/yudao/module/pay/api/wallet/PayWalletApi.java deleted
1 -package cn.iocoder.yudao.module.pay.api.wallet;  
2 -  
3 -/**  
4 - * 钱包 API 接口  
5 - *  
6 - * @author owen  
7 - */  
8 -public interface PayWalletApi {  
9 -  
10 -}  
yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/api/wallet/PayWalletApiImpl.java deleted
1 -package cn.iocoder.yudao.module.pay.api.wallet;  
2 -  
3 -import cn.iocoder.yudao.module.pay.service.wallet.PayWalletRechargeService;  
4 -import cn.iocoder.yudao.module.pay.service.wallet.PayWalletTransactionService;  
5 -import org.springframework.stereotype.Service;  
6 -import org.springframework.validation.annotation.Validated;  
7 -  
8 -import javax.annotation.Resource;  
9 -  
10 -/**  
11 - * 钱包 API 接口实现类  
12 - *  
13 - * @author owen  
14 - */  
15 -@Service  
16 -@Validated  
17 -public class PayWalletApiImpl implements PayWalletApi {  
18 -  
19 - @Resource  
20 - private PayWalletRechargeService payWalletRechargeService;  
21 - @Resource  
22 - private PayWalletTransactionService payWalletTransactionService;  
23 -  
24 -}