From c793c47d45e9843e0c2d66b30c62e58d1886e983 Mon Sep 17 00:00:00 2001 From: misworga831 Date: Tue, 14 Mar 2023 19:37:22 +0800 Subject: [PATCH 1/4] =?UTF-8?q?fix:=20=E4=BC=98=E5=8C=96=E6=97=A5=E5=BF=97?= =?UTF-8?q?=E6=90=9C=E7=B4=A2=EF=BC=8C=E5=85=B3=E9=97=AD=E5=95=86=E5=93=81?= =?UTF-8?q?=E5=88=A0=E9=99=A4=E7=B4=A2=E5=BC=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../goods/serviceimpl/GoodsServiceImpl.java | 2 +- .../serviceimpl/SystemLogServiceImpl.java | 20 +++++++++---------- .../store/serviceimpl/StoreServiceImpl.java | 11 +++++++--- 3 files changed, 18 insertions(+), 15 deletions(-) diff --git a/framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsServiceImpl.java b/framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsServiceImpl.java index e56898cb..c1ae964b 100644 --- a/framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsServiceImpl.java @@ -133,7 +133,7 @@ public class GoodsServiceImpl extends ServiceImpl implements //获取商品ID列表 List list = this.baseMapper.getGoodsIdByStoreId(storeId); //下架店铺下的商品 - updateGoodsMarketAble(list, GoodsStatusEnum.DOWN, "店铺关闭"); + this.updateGoodsMarketAbleByStoreId(storeId, GoodsStatusEnum.DOWN, "店铺关闭"); applicationEventPublisher.publishEvent(new TransactionCommitSendMQEvent("下架商品", rocketmqCustomProperties.getGoodsTopic(), GoodsTagsEnum.DOWN.name(), JSONUtil.toJsonStr(list))); diff --git a/framework/src/main/java/cn/lili/modules/permission/serviceimpl/SystemLogServiceImpl.java b/framework/src/main/java/cn/lili/modules/permission/serviceimpl/SystemLogServiceImpl.java index 693794c0..bd8f6386 100644 --- a/framework/src/main/java/cn/lili/modules/permission/serviceimpl/SystemLogServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/permission/serviceimpl/SystemLogServiceImpl.java @@ -1,6 +1,5 @@ package cn.lili.modules.permission.serviceimpl; -import cn.hutool.core.date.DateUtil; import cn.hutool.core.text.CharSequenceUtil; import cn.lili.common.vo.PageVO; import cn.lili.common.vo.SearchVO; @@ -9,7 +8,9 @@ import cn.lili.modules.permission.repository.SystemLogRepository; import cn.lili.modules.permission.service.SystemLogService; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.elasticsearch.common.unit.Fuzziness; import org.elasticsearch.index.query.BoolQueryBuilder; +import org.elasticsearch.index.query.MultiMatchQueryBuilder; import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.search.sort.SortBuilders; import org.elasticsearch.search.sort.SortOrder; @@ -82,25 +83,22 @@ public class SystemLogServiceImpl implements SystemLogService { } if (CharSequenceUtil.isNotEmpty(operatorName)) { - nativeSearchQueryBuilder.withFilter(QueryBuilders.wildcardQuery("username", "*" + operatorName + "*")); + nativeSearchQueryBuilder.withQuery(QueryBuilders.matchQuery("username", operatorName)); } if (CharSequenceUtil.isNotEmpty(key)) { - BoolQueryBuilder filterBuilder = new BoolQueryBuilder(); - filterBuilder.should(QueryBuilders.wildcardQuery("requestUrl", "*" + key + "*")) - .should(QueryBuilders.wildcardQuery("requestParam", "*" + key + "*")) - .should(QueryBuilders.wildcardQuery("responseBody", "*" + key + "*")) - .should(QueryBuilders.wildcardQuery("name", "*" + key + "*")); - nativeSearchQueryBuilder.withFilter(filterBuilder); + MultiMatchQueryBuilder multiMatchQueryBuilder = QueryBuilders.multiMatchQuery(key, "requestUrl", "requestParam", "responseBody", "name"); + multiMatchQueryBuilder.fuzziness(Fuzziness.AUTO); + nativeSearchQueryBuilder.withFilter(multiMatchQueryBuilder); } //时间有效性判定 if (searchVo.getConvertStartDate() != null && searchVo.getConvertEndDate() != null) { BoolQueryBuilder filterBuilder = new BoolQueryBuilder(); //大于方法 - filterBuilder.must( + filterBuilder.filter( QueryBuilders.rangeQuery("createTime") - .gte(DateUtil.format(searchVo.getConvertStartDate(), "dd/MM/yyyy")) - .lte(DateUtil.format(searchVo.getConvertEndDate(), "dd/MM/yyyy")).format("dd/MM/yyyy||yyyy")); + .gte(searchVo.getConvertStartDate().getTime()) + .lte(searchVo.getConvertEndDate().getTime())); nativeSearchQueryBuilder.withFilter(filterBuilder); } diff --git a/framework/src/main/java/cn/lili/modules/store/serviceimpl/StoreServiceImpl.java b/framework/src/main/java/cn/lili/modules/store/serviceimpl/StoreServiceImpl.java index 4c6931c9..e7928cf4 100644 --- a/framework/src/main/java/cn/lili/modules/store/serviceimpl/StoreServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/store/serviceimpl/StoreServiceImpl.java @@ -235,11 +235,16 @@ public class StoreServiceImpl extends ServiceImpl implements public boolean disable(String id) { Store store = this.getById(id); if (store != null) { - store.setStoreDisable(StoreStatusEnum.CLOSED.value()); + LambdaUpdateWrapper storeLambdaUpdateWrapper = new LambdaUpdateWrapper<>(); + storeLambdaUpdateWrapper.eq(Store::getId, id); + storeLambdaUpdateWrapper.set(Store::getStoreDisable, StoreStatusEnum.CLOSED.value()); + boolean update = this.update(storeLambdaUpdateWrapper); //下架所有此店铺商品 - goodsService.underStoreGoods(id); - return this.updateById(store); + if (update) { + goodsService.underStoreGoods(id); + } + return update; } throw new ServiceException(ResultCode.STORE_NOT_EXIST); From 0c652eac6379cf686711974c6e7283fcd5787452 Mon Sep 17 00:00:00 2001 From: misworga831 Date: Tue, 21 Mar 2023 14:39:53 +0800 Subject: [PATCH 2/4] =?UTF-8?q?fix:=20hutool=20=E4=BE=9D=E8=B5=96=E6=9B=B4?= =?UTF-8?q?=E6=96=B0,=E4=BE=9D=E8=B5=96=E4=BC=98=E5=8C=96=EF=BC=8C?= =?UTF-8?q?=E8=8E=B7=E5=8F=96=E5=95=86=E5=93=81=E8=AF=A6=E6=83=85=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- framework/pom.xml | 4 ---- .../lili/modules/goods/serviceimpl/GoodsSkuServiceImpl.java | 5 ++--- im-api/pom.xml | 5 +++++ pom.xml | 2 +- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/framework/pom.xml b/framework/pom.xml index 3003fb45..c14cf371 100644 --- a/framework/pom.xml +++ b/framework/pom.xml @@ -51,10 +51,6 @@ - - org.springframework.boot - spring-boot-starter-websocket - org.springframework.boot spring-boot-starter-web diff --git a/framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsSkuServiceImpl.java b/framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsSkuServiceImpl.java index 2cc364b1..c516b6c2 100644 --- a/framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsSkuServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsSkuServiceImpl.java @@ -312,9 +312,8 @@ public class GoodsSkuServiceImpl extends ServiceImpl i map.put("data", goodsSkuDetail); //获取分类 - String[] split = goodsSkuDetail.getCategoryPath().split(","); - map.put("wholesaleList", wholesaleService.findByGoodsId(goodsSkuDetail.getGoodsId())); - map.put("categoryName", categoryService.getCategoryNameByIds(Arrays.asList(split))); + map.put("wholesaleList", GoodsSalesModeEnum.WHOLESALE.name().equals(goodsVO.getSalesModel()) ? wholesaleService.findByGoodsId(goodsSkuDetail.getGoodsId()) : Collections.emptyList()); + map.put("categoryName", CharSequenceUtil.isNotEmpty(goodsIndex.getCategoryNamePath()) ? goodsIndex.getCategoryNamePath().split(",") : null); //获取规格信息 map.put("specs", this.groupBySkuAndSpec(goodsVO.getSkuList())); diff --git a/im-api/pom.xml b/im-api/pom.xml index 7f823cf4..8f6efc47 100644 --- a/im-api/pom.xml +++ b/im-api/pom.xml @@ -19,6 +19,11 @@ framework ${revision} + + + org.springframework.boot + spring-boot-starter-websocket + diff --git a/pom.xml b/pom.xml index 1d30464c..e4706366 100644 --- a/pom.xml +++ b/pom.xml @@ -26,7 +26,7 @@ 1 4.22.32.ALL 3.5.1 - 5.8.0 + 5.8.14 2.0.3.RELEASE 3.0.4 2.9.10 From fae4dcaae26d818d223946567a5657f0202025ea Mon Sep 17 00:00:00 2001 From: misworga831 Date: Thu, 23 Mar 2023 09:59:35 +0800 Subject: [PATCH 3/4] =?UTF-8?q?fix:=20=E4=BC=98=E5=8C=96=E4=BC=9A=E5=91=98?= =?UTF-8?q?=E4=BC=98=E6=83=A0=E5=88=B8=E9=80=80=E8=BF=98=E5=90=8E=EF=BC=8C?= =?UTF-8?q?=E5=8F=AF=E8=83=BD=E6=97=A0=E6=B3=95=E5=86=8D=E6=AC=A1=E4=BD=BF?= =?UTF-8?q?=E7=94=A8=E9=97=AE=E9=A2=98=E3=80=82=E4=BC=98=E5=8C=96=E5=88=A0?= =?UTF-8?q?=E9=99=A4=E5=95=86=E5=93=81=E7=B4=A2=E5=BC=95=EF=BC=8C=E5=8F=AF?= =?UTF-8?q?=E8=83=BD=E5=A4=B1=E8=B4=A5=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../modules/promotion/serviceimpl/MemberCouponServiceImpl.java | 1 + .../modules/search/serviceimpl/EsGoodsIndexServiceImpl.java | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/MemberCouponServiceImpl.java b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/MemberCouponServiceImpl.java index 1e130dc2..467d4862 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/MemberCouponServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/MemberCouponServiceImpl.java @@ -293,6 +293,7 @@ public class MemberCouponServiceImpl extends ServiceImpl updateWrapper = new LambdaUpdateWrapper<>(); updateWrapper.in(MemberCoupon::getId, memberCouponIds); updateWrapper.set(MemberCoupon::getMemberCouponStatus, MemberCouponStatusEnum.NEW.name()); + updateWrapper.set(MemberCoupon::getConsumptionTime, null); return this.update(updateWrapper); } diff --git a/framework/src/main/java/cn/lili/modules/search/serviceimpl/EsGoodsIndexServiceImpl.java b/framework/src/main/java/cn/lili/modules/search/serviceimpl/EsGoodsIndexServiceImpl.java index 56211660..3c12ceef 100644 --- a/framework/src/main/java/cn/lili/modules/search/serviceimpl/EsGoodsIndexServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/search/serviceimpl/EsGoodsIndexServiceImpl.java @@ -455,7 +455,7 @@ public class EsGoodsIndexServiceImpl extends BaseElasticsearchService implements public void deleteIndex(Map queryFields) { BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery(); for (Map.Entry entry : queryFields.entrySet()) { - boolQueryBuilder.filter(QueryBuilders.termsQuery(entry.getKey(), entry.getValue())); + boolQueryBuilder.filter(QueryBuilders.termsQuery(entry.getKey(), entry.getValue().toString())); } DeleteByQueryRequest deleteByQueryRequest = new DeleteByQueryRequest(); From 917d9437b666aabec71f5668a9cb1f070c867470 Mon Sep 17 00:00:00 2001 From: 17600048398 <277692624@qq.com> Date: Thu, 23 Mar 2023 11:31:30 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E5=88=86=E9=94=80=E8=AE=A2=E5=8D=95?= =?UTF-8?q?=E4=BD=A3=E9=87=91=E7=BB=93=E7=AE=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../event/impl/DistributionOrderExecute.java | 27 ++- .../impl/order/OrderEveryDayTaskExecute.java | 15 ++ .../entity/dos/DistributionOrder.java | 2 +- .../enums/DistributionOrderStatusEnum.java | 2 + .../service/DistributionOrderService.java | 17 ++ .../DistributionOrderServiceImpl.java | 158 ++++++++++++++++-- 6 files changed, 195 insertions(+), 26 deletions(-) diff --git a/consumer/src/main/java/cn/lili/event/impl/DistributionOrderExecute.java b/consumer/src/main/java/cn/lili/event/impl/DistributionOrderExecute.java index 4edd7f41..53812919 100644 --- a/consumer/src/main/java/cn/lili/event/impl/DistributionOrderExecute.java +++ b/consumer/src/main/java/cn/lili/event/impl/DistributionOrderExecute.java @@ -1,6 +1,8 @@ package cn.lili.event.impl; +import cn.hutool.core.date.DateField; import cn.hutool.core.date.DateTime; +import cn.hutool.json.JSONUtil; import cn.lili.event.AfterSaleStatusChangeEvent; import cn.lili.event.OrderStatusChangeEvent; import cn.lili.modules.distribution.entity.dos.DistributionOrder; @@ -10,6 +12,10 @@ import cn.lili.modules.distribution.service.DistributionOrderService; import cn.lili.modules.order.aftersale.entity.dos.AfterSale; import cn.lili.modules.order.order.entity.dto.OrderMessage; import cn.lili.modules.order.trade.entity.enums.AfterSaleStatusEnum; +import cn.lili.modules.system.entity.dos.Setting; +import cn.lili.modules.system.entity.dto.DistributionSetting; +import cn.lili.modules.system.entity.enums.SettingEnum; +import cn.lili.modules.system.service.SettingService; import cn.lili.timetask.handler.EveryDayExecute; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import lombok.extern.slf4j.Slf4j; @@ -39,6 +45,9 @@ public class DistributionOrderExecute implements OrderStatusChangeEvent, EveryDa @Resource private DistributionOrderMapper distributionOrderMapper; + @Autowired + private SettingService settingService; + @Override public void orderChange(OrderMessage orderMessage) { @@ -65,14 +74,16 @@ public class DistributionOrderExecute implements OrderStatusChangeEvent, EveryDa @Override public void execute() { - //计算分销提佣 - distributionOrderMapper.rebate(DistributionOrderStatusEnum.WAIT_BILL.name(), new DateTime()); - - //修改分销订单状态 - distributionOrderService.update(new LambdaUpdateWrapper() - .eq(DistributionOrder::getDistributionOrderStatus, DistributionOrderStatusEnum.WAIT_BILL.name()) - .le(DistributionOrder::getSettleCycle, new DateTime()) - .set(DistributionOrder::getDistributionOrderStatus, DistributionOrderStatusEnum.WAIT_CASH.name())); + log.info("分销订单定时开始执行"); + //设置结算天数(解冻日期) + Setting setting = settingService.get(SettingEnum.DISTRIBUTION_SETTING.name()); + DistributionSetting distributionSetting = JSONUtil.toBean(setting.getSettingValue(), DistributionSetting.class); + //解冻时间 + DateTime dateTime = new DateTime(); + //当前时间-结算天数=最终结算时间 + dateTime = dateTime.offsetNew(DateField.DAY_OF_MONTH, -distributionSetting.getCashDay()); + //分销人员订单结算 + distributionOrderService.updateRebate(dateTime,DistributionOrderStatusEnum.WAIT_BILL.name()); } diff --git a/consumer/src/main/java/cn/lili/timetask/handler/impl/order/OrderEveryDayTaskExecute.java b/consumer/src/main/java/cn/lili/timetask/handler/impl/order/OrderEveryDayTaskExecute.java index ade5ea90..6370b260 100644 --- a/consumer/src/main/java/cn/lili/timetask/handler/impl/order/OrderEveryDayTaskExecute.java +++ b/consumer/src/main/java/cn/lili/timetask/handler/impl/order/OrderEveryDayTaskExecute.java @@ -2,9 +2,12 @@ package cn.lili.timetask.handler.impl.order; import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONUtil; import cn.lili.common.enums.ResultCode; import cn.lili.common.exception.ServiceException; +import cn.lili.modules.distribution.service.DistributionOrderService; import cn.lili.modules.member.entity.dto.MemberEvaluationDTO; import cn.lili.modules.member.entity.enums.EvaluationGradeEnum; import cn.lili.modules.member.service.MemberEvaluationService; @@ -69,6 +72,9 @@ public class OrderEveryDayTaskExecute implements EveryDayExecute { @Autowired private AfterSaleService afterSaleService; + @Autowired + private DistributionOrderService distributionOrderService; + /** * 执行每日任务 */ @@ -179,6 +185,15 @@ public class OrderEveryDayTaskExecute implements EveryDayExecute { .set(OrderItem::getAfterSaleStatus, OrderItemAfterSaleStatusEnum.EXPIRED.name()) .in(OrderItem::getId, orderItemIdList); orderItemService.update(lambdaUpdateWrapper); + //修改订售后状态 + List orderItemsList = orderItems.stream() + .map((orderItem)->{ + orderItem.setAfterSaleStatus(OrderItemAfterSaleStatusEnum.EXPIRED.name()); + return orderItem; + }) + .collect(Collectors.toList()); + //修改对应分销订单状态 + distributionOrderService.updateDistributionOrderStatus(orderItemsList); } } diff --git a/framework/src/main/java/cn/lili/modules/distribution/entity/dos/DistributionOrder.java b/framework/src/main/java/cn/lili/modules/distribution/entity/dos/DistributionOrder.java index fc760ac4..f29b9987 100644 --- a/framework/src/main/java/cn/lili/modules/distribution/entity/dos/DistributionOrder.java +++ b/framework/src/main/java/cn/lili/modules/distribution/entity/dos/DistributionOrder.java @@ -81,7 +81,7 @@ public class DistributionOrder extends BaseIdEntity { private Integer num; public DistributionOrder(StoreFlow storeFlow) { - distributionOrderStatus = DistributionOrderStatusEnum.WAIT_BILL.name(); + distributionOrderStatus = DistributionOrderStatusEnum.NO_COMPLETED.name(); memberId = storeFlow.getMemberId(); memberName = storeFlow.getMemberName(); rebate = storeFlow.getDistributionRebate(); diff --git a/framework/src/main/java/cn/lili/modules/distribution/entity/enums/DistributionOrderStatusEnum.java b/framework/src/main/java/cn/lili/modules/distribution/entity/enums/DistributionOrderStatusEnum.java index 16c6fdc0..240b9752 100644 --- a/framework/src/main/java/cn/lili/modules/distribution/entity/enums/DistributionOrderStatusEnum.java +++ b/framework/src/main/java/cn/lili/modules/distribution/entity/enums/DistributionOrderStatusEnum.java @@ -6,6 +6,8 @@ package cn.lili.modules.distribution.entity.enums; * @author pikachu */ public enum DistributionOrderStatusEnum { + //未完成 + NO_COMPLETED("未完成"), //待结算(冻结) WAIT_BILL("待结算"), //待提现 diff --git a/framework/src/main/java/cn/lili/modules/distribution/service/DistributionOrderService.java b/framework/src/main/java/cn/lili/modules/distribution/service/DistributionOrderService.java index 122ba134..7b52cf36 100644 --- a/framework/src/main/java/cn/lili/modules/distribution/service/DistributionOrderService.java +++ b/framework/src/main/java/cn/lili/modules/distribution/service/DistributionOrderService.java @@ -1,10 +1,14 @@ package cn.lili.modules.distribution.service; +import cn.hutool.core.date.DateTime; import cn.lili.modules.distribution.entity.dos.DistributionOrder; import cn.lili.modules.distribution.entity.vos.DistributionOrderSearchParams; +import cn.lili.modules.order.order.entity.dos.OrderItem; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.IService; +import java.util.List; + /** * 分销订单业务层 @@ -45,4 +49,17 @@ public interface DistributionOrderService extends IService { */ void refundOrder(String afterSaleSn); + /** + * 分销订单状态修改 + * + * @param orderItems + */ + void updateDistributionOrderStatus(List orderItems); + + /** + * 分销订单结算 + * @param dateTime + * @param distributionOrderStatus + */ + void updateRebate(DateTime dateTime, String distributionOrderStatus); } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/distribution/serviceimpl/DistributionOrderServiceImpl.java b/framework/src/main/java/cn/lili/modules/distribution/serviceimpl/DistributionOrderServiceImpl.java index 6fb74ad7..c44efde8 100644 --- a/framework/src/main/java/cn/lili/modules/distribution/serviceimpl/DistributionOrderServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/distribution/serviceimpl/DistributionOrderServiceImpl.java @@ -1,19 +1,26 @@ package cn.lili.modules.distribution.serviceimpl; +import cn.hutool.core.collection.ListUtil; import cn.hutool.core.date.DateField; import cn.hutool.core.date.DateTime; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONUtil; import cn.lili.common.utils.CurrencyUtil; +import cn.lili.common.utils.SpringContextUtil; import cn.lili.modules.distribution.entity.dos.Distribution; import cn.lili.modules.distribution.entity.dos.DistributionOrder; import cn.lili.modules.distribution.entity.enums.DistributionOrderStatusEnum; +import cn.lili.modules.distribution.entity.enums.DistributionStatusEnum; import cn.lili.modules.distribution.entity.vos.DistributionOrderSearchParams; import cn.lili.modules.distribution.mapper.DistributionOrderMapper; import cn.lili.modules.distribution.service.DistributionOrderService; import cn.lili.modules.distribution.service.DistributionService; import cn.lili.modules.order.order.entity.dos.Order; +import cn.lili.modules.order.order.entity.dos.OrderItem; import cn.lili.modules.order.order.entity.dos.StoreFlow; import cn.lili.modules.order.order.entity.dto.StoreFlowQueryDTO; +import cn.lili.modules.order.order.entity.enums.OrderItemAfterSaleStatusEnum; import cn.lili.modules.order.order.entity.enums.PayStatusEnum; import cn.lili.modules.order.order.service.OrderService; import cn.lili.modules.order.order.service.StoreFlowService; @@ -31,7 +38,11 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.ArrayList; +import java.util.Date; import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; /** @@ -107,14 +118,7 @@ public class DistributionOrderServiceImpl extends ServiceImpl() - .eq(DistributionOrder::getDistributionOrderStatus, DistributionOrderStatusEnum.WAIT_BILL.name()) - .le(DistributionOrder::getSettleCycle, dateTime) - .set(DistributionOrder::getDistributionOrderStatus, DistributionOrderStatusEnum.WAIT_CASH.name())); + dateTime = dateTime.offsetNew(DateField.DAY_OF_MONTH, -distributionSetting.getCashDay()); + //防止事务失效,采用上下文获取bean + DistributionOrderService bean = SpringContextUtil.getBean(DistributionOrderService.class); + //分销订单结算 + bean.updateRebate(dateTime, DistributionOrderStatusEnum.WAIT_BILL.name()); } } @@ -214,4 +214,128 @@ public class DistributionOrderServiceImpl extends ServiceImpl orderItems) { + if (orderItems.isEmpty()) { + return; + } + + //获取未完成分销订单 + List distributionOrderList = this.list(new LambdaQueryWrapper() + .eq(DistributionOrder::getDistributionOrderStatus, DistributionOrderStatusEnum.NO_COMPLETED.name())); + + if (distributionOrderList.isEmpty()) { + return; + } + + List list = ListUtil.list(false); + + orderItems.stream().forEach(orderItem -> { + //订单售后状态为已失效并且投诉状态为已失效 + if (StrUtil.equals(OrderItemAfterSaleStatusEnum.EXPIRED.name(), orderItem.getAfterSaleStatus())) { + + + List collect = distributionOrderList.stream() + .filter(distributionOrder -> StrUtil.equals(distributionOrder.getOrderItemSn(), orderItem.getSn())) + .map((distributionOrder) -> { + distributionOrder.setDistributionOrderStatus(DistributionOrderStatusEnum.WAIT_BILL.name()); + distributionOrder.setSettleCycle(new Date()); + return distributionOrder; + }) + .collect(Collectors.toList()); + + list.addAll(collect); + } + + }); + + if (!list.isEmpty()) { + //批量修改分销订单结算状态 + this.updateBatchById(list); + } + } + + @Override + public void updateRebate(DateTime dateTime, String distributionOrderStatus) { + //结算时间延后五分钟 + dateTime = dateTime.offsetNew(DateField.MINUTE, 5); + //获取待结算订单 + List distributionOrderList = this.list(new LambdaQueryWrapper() + .eq(DistributionOrder::getDistributionOrderStatus, distributionOrderStatus) + .isNotNull(DistributionOrder::getSettleCycle) + .le(DistributionOrder::getSettleCycle, dateTime)); + //校验待结算订单 + if (ObjectUtil.isNotNull(distributionOrderList) && distributionOrderList.size() > 0) { + //结算分销人员信息列表 + List distributionUpdateList = new ArrayList<>(); + //获取分销员信息 + List distributionList = distributionService.list(new LambdaQueryWrapper() + .eq(Distribution::getDistributionStatus, DistributionStatusEnum.PASS.name())); + //根据销人员获取对应分销订单 + Map> distributionOrderList1 = distributionOrderList.stream() + .collect(Collectors.groupingBy(DistributionOrder::getDistributionId)); + + //校验分销订单不为空 + if (ObjectUtil.isNotNull(distributionOrderList1) && distributionOrderList1.size() > 0) { + //遍历分销订单map + distributionOrderList1.forEach((key, value) -> { + //计算分销结算金额 + distributionUpdateList.add(checkDistribution(key, value, distributionList)); + }); + } + + //校验分销信息列表不为空 + if (ObjectUtil.isNotNull(distributionUpdateList) && !distributionUpdateList.isEmpty()) { + //修改分销员收益 + distributionService.updateBatchById(distributionUpdateList); + distributionOrderList.stream().forEach(distributionOrder -> { + //修改分销订单状态为待提现 + distributionOrder.setDistributionOrderStatus(DistributionOrderStatusEnum.WAIT_CASH.name()); + }); + } + + //修改分销订单状态 + this.updateBatchById(distributionOrderList); + } + + + } + + + /** + * 计算分销结算金额 + * + * @param distributionId 分销ID + * @param list 分销订单 + * @param distributionList 分销列表 + * @return + */ + public Distribution checkDistribution(String distributionId, List list, List distributionList) { + //获取所有待结算订单分销人员信息 + Distribution distribution = distributionList.parallelStream().filter(a -> StrUtil.equals(a.getId(), distributionId)).collect(Collectors.toList()).get(0); + + //获取分销订单总金额 + double rebate = list.stream().mapToDouble(DistributionOrder::getRebate).sum(); + + //检验单分销人员冻结金额为负数时.扣除负数冻结金额后再结算 + if (distribution.getCommissionFrozen() < 0) { + rebate = CurrencyUtil.add(distribution.getCommissionFrozen() == null ? 0.0 : distribution.getCommissionFrozen(), rebate); + } + //结算订单总金额+分销可提现金额 + Double canRebate = CurrencyUtil.add(rebate, distribution.getCanRebate() == null ? 0.0 : distribution.getCanRebate()); + //结算金额小于0 + if (canRebate < 0) { + //结算订单总金额+分销可提现金额 + distribution.setCanRebate(0.0); + //冻结金额 + distribution.setCommissionFrozen(canRebate); + } else { + //结算订单总金额+分销可提现金额 + distribution.setCanRebate(canRebate); + //冻结金额 + distribution.setCommissionFrozen(0.0); + } + + return distribution; + } } \ No newline at end of file