diff --git a/src/main/java/com/gxwebsoft/common/core/config/MybatisPlusConfig.java b/src/main/java/com/gxwebsoft/common/core/config/MybatisPlusConfig.java index e8e7a91..c5e5f34 100644 --- a/src/main/java/com/gxwebsoft/common/core/config/MybatisPlusConfig.java +++ b/src/main/java/com/gxwebsoft/common/core/config/MybatisPlusConfig.java @@ -80,7 +80,7 @@ public class MybatisPlusConfig { @Override public boolean ignoreTable(String tableName) { - TenantContext.setIgnoreTenant(Boolean.TRUE); +// TenantContext.setIgnoreTenant(Boolean.TRUE); // 如果当前上下文设置了忽略租户隔离,则忽略所有表的租户隔离 if (TenantContext.isIgnoreTenant()) { return true; @@ -93,17 +93,8 @@ public class MybatisPlusConfig { "sys_dictionary_data", "apps_test_data", "cms_lang", -// "hjm_car", -// "hjm_fence" -// "cms_website" -// "sys_user" -// "cms_domain" -// "shop_order_goods", "shop_goods", -// "shop_users", - "shop_order" , // 移除shop_order,改为通过注解控制 -// "shop_order_info", -// "booking_user_invoice" + "shop_order" , "shop_order_goods", "glt_ticket_template", "glt_user_ticket", @@ -111,7 +102,8 @@ public class MybatisPlusConfig { "glt_user_ticket_log", "shop_dealer_user", "shop_dealer_order", - "shop_dealer_referee" + "shop_dealer_referee", + "shop_store_rider" ).contains(tableName); } }; diff --git a/src/main/java/com/gxwebsoft/glt/controller/GltTicketOrderController.java b/src/main/java/com/gxwebsoft/glt/controller/GltTicketOrderController.java index 0f7c031..4c1dc4c 100644 --- a/src/main/java/com/gxwebsoft/glt/controller/GltTicketOrderController.java +++ b/src/main/java/com/gxwebsoft/glt/controller/GltTicketOrderController.java @@ -299,6 +299,13 @@ public class GltTicketOrderController extends BaseController { return success("确认送达"); } + @Operation(summary = "订单调度") + @PostMapping("/dispatchOrder") + public ApiResult dispatchOrder(@RequestParam("orderNo") String orderNo, @RequestParam("tenantId") Integer tenantId) { + gltTicketOrderService.dispatchOrder(orderNo, tenantId); + return success("success!"); + } + @PreAuthorize("isAuthenticated()") @Operation(summary = "用户确认收货") @PostMapping("/{id}/confirm-receive") @@ -382,23 +389,14 @@ public class GltTicketOrderController extends BaseController { } if (gltTicketOrderService.updateById(gltTicketOrder)) { - // 后台指派配送员(直接改 riderId)时,同步商城订单为“已发货”(deliveryStatus=20) - if (gltTicketOrder != null - && gltTicketOrder.getId() != null - && gltTicketOrder.getRiderId() != null - && gltTicketOrder.getRiderId() > 0) { - gltTicketOrderService.markShopOrderShippedAfterRiderAssigned( - gltTicketOrder.getId(), - tenantId, - gltTicketOrder.getRiderId() - ); - } + gltTicketOrderService.markShopOrderShippedAfterRiderAssigned(gltTicketOrder.getId(), tenantId, gltTicketOrder.getRiderId()); + // 后台直接改“已完成”(deliveryStatus=40)时,同步商城订单为“已完成”(orderStatus=1) if (gltTicketOrder != null && gltTicketOrder.getId() != null && gltTicketOrder.getDeliveryStatus() != null && gltTicketOrder.getDeliveryStatus() == GltTicketOrderService.DELIVERY_STATUS_FINISHED) { - gltTicketOrderService.markShopOrderCompletedAfterTicketFinished(gltTicketOrder.getId(), tenantId); + gltTicketOrderService.markShopOrderCompletedAfterTicketFinished(gltTicketOrder.getId()); } return success("修改成功"); } diff --git a/src/main/java/com/gxwebsoft/glt/entity/GltTicketOrder.java b/src/main/java/com/gxwebsoft/glt/entity/GltTicketOrder.java index d0a8b69..7db3ba1 100644 --- a/src/main/java/com/gxwebsoft/glt/entity/GltTicketOrder.java +++ b/src/main/java/com/gxwebsoft/glt/entity/GltTicketOrder.java @@ -46,6 +46,10 @@ public class GltTicketOrder implements Serializable { @TableField(exist = false) private String storeName; + @Schema(description = "品名") + @TableField(exist = false) + private String goodsName; + @Schema(description = "门店地址") @TableField(exist = false) private String storeAddress; @@ -213,6 +217,9 @@ public class GltTicketOrder implements Serializable { @Schema(description = "状态, 0正常, 1冻结") private Integer status; + @Schema(description = "水票标识 0-非 1-是") + private Integer waterTicketFlag; + @Schema(description = "是否删除, 0否, 1是") @TableLogic private Integer deleted; diff --git a/src/main/java/com/gxwebsoft/glt/mapper/xml/GltTicketOrderMapper.xml b/src/main/java/com/gxwebsoft/glt/mapper/xml/GltTicketOrderMapper.xml index 396237f..d3b8c47 100644 --- a/src/main/java/com/gxwebsoft/glt/mapper/xml/GltTicketOrderMapper.xml +++ b/src/main/java/com/gxwebsoft/glt/mapper/xml/GltTicketOrderMapper.xml @@ -20,7 +20,6 @@ LEFT JOIN shop_user_address d ON a.address_id = d.id LEFT JOIN glt_user_ticket f ON a.user_ticket_id = f.id LEFT JOIN shop_order o ON f.order_id = o.order_id AND f.tenant_id = o.tenant_id AND o.deleted = 0 - AND a.id = #{param.id} @@ -103,6 +102,12 @@ OR u.phone LIKE CONCAT('%', #{param.keywords}, '%') ) + + AND a.water_ticket_flag = #{param.waterTicketFlag} + + + AND o.order_status in (0, 1, 5) + diff --git a/src/main/java/com/gxwebsoft/glt/param/GltTicketOrderParam.java b/src/main/java/com/gxwebsoft/glt/param/GltTicketOrderParam.java index d05e078..bc64b8f 100644 --- a/src/main/java/com/gxwebsoft/glt/param/GltTicketOrderParam.java +++ b/src/main/java/com/gxwebsoft/glt/param/GltTicketOrderParam.java @@ -94,4 +94,7 @@ public class GltTicketOrderParam extends BaseParam { @QueryField(type = QueryType.EQ) private Integer orderStatus; + @Schema(description = "水票订单标识 0-否 1-是") + private Integer waterTicketFlag; + } diff --git a/src/main/java/com/gxwebsoft/glt/service/GltTicketOrderService.java b/src/main/java/com/gxwebsoft/glt/service/GltTicketOrderService.java index d5ba7f8..3a34fe9 100644 --- a/src/main/java/com/gxwebsoft/glt/service/GltTicketOrderService.java +++ b/src/main/java/com/gxwebsoft/glt/service/GltTicketOrderService.java @@ -84,7 +84,7 @@ public interface GltTicketOrderService extends IService { * *

用于后台直接改 deliveryStatus=40 等不经过 confirmReceive/autoConfirmTimeout 的兜底同步。

*/ - void markShopOrderCompletedAfterTicketFinished(Integer ticketOrderId, Integer tenantId); + void markShopOrderCompletedAfterTicketFinished(Integer id); /** * 配送员开始配送:10 -> 20,并写 sendStartTime。 diff --git a/src/main/java/com/gxwebsoft/glt/service/impl/GltSubscribeMessageServiceImpl.java b/src/main/java/com/gxwebsoft/glt/service/impl/GltSubscribeMessageServiceImpl.java index 5fce7ff..287fc03 100644 --- a/src/main/java/com/gxwebsoft/glt/service/impl/GltSubscribeMessageServiceImpl.java +++ b/src/main/java/com/gxwebsoft/glt/service/impl/GltSubscribeMessageServiceImpl.java @@ -5,6 +5,7 @@ import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.gxwebsoft.common.core.exception.BusinessException; +import com.gxwebsoft.common.core.utils.DateTimeUtil; import com.gxwebsoft.glt.dto.NoticeRiderNewOrderDto; import com.gxwebsoft.glt.entity.GltTicketOrder; import com.gxwebsoft.glt.service.GltSubscribeMessageService; @@ -64,7 +65,7 @@ public class GltSubscribeMessageServiceImpl implements GltSubscribeMessageServic data.put("character_string1", Map.of("value", String.valueOf(entity.getOrderNo()))); data.put("thing22", Map.of("value", String.valueOf(entity.getGoodsName()))); data.put("number20", Map.of("value", String.valueOf(entity.getProductCount()))); - data.put("time24", Map.of("value", String.valueOf(entity.getCreateTime()))); + data.put("time24", Map.of("value", DateTimeUtil.formatDateTime(entity.getCreateTime(), "yyyy-MM-dd HH:mm:ss"))); //推送订阅消息 sendSubscribeMessage(accessToken, entity.getOpenId(), data); diff --git a/src/main/java/com/gxwebsoft/glt/service/impl/GltTicketOrderServiceImpl.java b/src/main/java/com/gxwebsoft/glt/service/impl/GltTicketOrderServiceImpl.java index 5fb733e..cc8a5ce 100644 --- a/src/main/java/com/gxwebsoft/glt/service/impl/GltTicketOrderServiceImpl.java +++ b/src/main/java/com/gxwebsoft/glt/service/impl/GltTicketOrderServiceImpl.java @@ -36,6 +36,7 @@ import com.gxwebsoft.shop.service.ShopDealerCapitalService; import com.gxwebsoft.shop.service.ShopDealerUserService; import com.gxwebsoft.shop.service.ShopOrderGoodsService; import com.gxwebsoft.shop.service.ShopOrderService; +import com.gxwebsoft.shop.vo.ShopOrderGoodsInfoVO; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.springframework.stereotype.Service; @@ -49,6 +50,7 @@ import java.math.RoundingMode; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; +import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.concurrent.atomic.AtomicInteger; @@ -122,15 +124,28 @@ public class GltTicketOrderServiceImpl extends ServiceImpl list = baseMapper.selectPageRel(page, param); if(CollectionUtils.isNotEmpty(list)){ List addressIdList = list.stream().map(GltTicketOrder::getAddressId).distinct().collect(Collectors.toList()); - List userAddressList = shopUserAddressMapper.selectBatchIds(addressIdList); - if(CollectionUtils.isNotEmpty(userAddressList)){ - list.forEach(ticketOrder ->{ - ShopUserAddress shopUserAddress = userAddressList.stream().filter(address -> ticketOrder.getAddressId().equals(address.getId())).findFirst().orElse(null); - if(shopUserAddress != null){ - ticketOrder.setFullAddress(shopUserAddress.getFullAddress()); - } - }); + List orderNoList = list.stream().filter(gltTicketOrder -> StrUtil.isNotBlank(gltTicketOrder.getOrderNo())).map(GltTicketOrder::getOrderNo).distinct().collect(Collectors.toList()); + List orderGoodsInfoVOList = new ArrayList<>(); + if(CollectionUtils.isNotEmpty(orderNoList)){ + orderGoodsInfoVOList = shopOrderService.getOrderGoodsInfoByOrderNos(orderNoList); } + + List userAddressList = shopUserAddressMapper.selectBatchIds(addressIdList); + List finalOrderGoodsInfoVOList = orderGoodsInfoVOList; + list.forEach(ticketOrder ->{ + ShopUserAddress shopUserAddress = userAddressList.stream().filter(address -> ticketOrder.getAddressId().equals(address.getId())).findFirst().orElse(null); + if(shopUserAddress != null){ + ticketOrder.setFullAddress(shopUserAddress.getFullAddress()); + } + + if(StrUtil.isNotBlank(ticketOrder.getOrderNo())){ + ShopOrderGoodsInfoVO shopOrderGoodsInfoVO = finalOrderGoodsInfoVOList.stream().filter(orderGoodsInfoVO -> ticketOrder.getOrderNo().equals(orderGoodsInfoVO.getOrderNo())).findFirst().orElse(null); + if(shopOrderGoodsInfoVO != null){ + ticketOrder.setGoodsName(shopOrderGoodsInfoVO.getGoodsName()); + ticketOrder.setOrderStatus(shopOrderGoodsInfoVO.getOrderStatus()); + } + } + }); } return new PageResult<>(list, page.getTotal()); } @@ -349,7 +364,7 @@ public class GltTicketOrderServiceImpl extends ServiceImpl 20已发货 - updateShopOrderDeliveryStatusAfterAccept(id, tenantId, riderId, now); + updateShopOrderDeliveryStatusAfterAcceptV2(id, tenantId, riderId, now); return; } @@ -391,12 +406,12 @@ public class GltTicketOrderServiceImpl extends ServiceImpl backfill = new LambdaUpdateWrapper() - .eq(GltUserTicket::getTenantId, tenantId) - .eq(GltUserTicket::getDeleted, 0) - .eq(GltUserTicket::getId, userTicket.getId()); - backfill.set(GltUserTicket::getOrderId, shopOrderId); - if (!StringUtils.hasText(userTicket.getOrderNo()) && StringUtils.hasText(shopOrderNo)) { - backfill.set(GltUserTicket::getOrderNo, shopOrderNo); - } - backfill.set(GltUserTicket::getUpdateTime, now); - try { - gltUserTicketService.update(backfill); - } catch (Exception e) { - log.debug("回填水票关联商城订单信息失败(不影响主流程) - tenantId={}, userTicketId={}, orderId={}, orderNo={}", - tenantId, userTicket.getId(), shopOrderId, shopOrderNo, e); - } } LambdaUpdateWrapper uw = new LambdaUpdateWrapper() @@ -529,6 +528,20 @@ public class GltTicketOrderServiceImpl extends ServiceImpl 0) { + BigDecimal money = RIDER_UNIT_COMMISSION + .multiply(BigDecimal.valueOf(qty)) + .setScale(RIDER_COMMISSION_SCALE, RoundingMode.HALF_UP); + if (money.signum() > 0) { + ShopDealerUserReduceDto reduceDto = new ShopDealerUserReduceDto(); + reduceDto.setTypeEnum(ShopDealerTypeEnum.WITHDRAW_ACCOUNT); + reduceDto.setUserId(ticketOrder.getRiderId()); + reduceDto.setOrderUserId(ticketOrder.getUserId()); + if(Arrays.asList(1, 3).contains(order.getOrderType())){ + reduceDto.setOrderNo(order.getOrderNo()); + }else { + reduceDto.setOrderNo(ticketOrder.getNo()); + } + reduceDto.setPrice(money); + reduceDto.setUpdateEnum(ShopDealerCapitalUpdateEnum.DELIVERY_INCOME); + shopDealerUserService.reduceBalance(reduceDto); + } + } + + //3.配送奖励(按商品设置) + Integer goodsId = order.getFormId(); + ShopGoods shopGood = shopGoodsMapper.selectById(goodsId); + if(shopGood != null && order != null){ + Integer commissionType = shopGood.getCommissionType(); + BigDecimal money = BigDecimal.ZERO; + if(commissionType == 10){ //按金额 + money = shopGood.getDeliveryMoney(); + }else { //按比率 + money = order.getPayPrice().multiply(shopGood.getDeliveryMoney()).divide(BigDecimal.valueOf(100), 3, RoundingMode.HALF_UP); + } + if(money.compareTo(BigDecimal.ZERO) > 0){ + ShopDealerUserReduceDto reduceDto = new ShopDealerUserReduceDto(); + reduceDto.setTypeEnum(ShopDealerTypeEnum.WITHDRAW_ACCOUNT); + reduceDto.setUserId(ticketOrder.getRiderId()); + reduceDto.setOrderUserId(ticketOrder.getUserId()); + if(Arrays.asList(1, 3).contains(order.getOrderType())){ + reduceDto.setOrderNo(order.getOrderNo()); + }else { + reduceDto.setOrderNo(ticketOrder.getNo()); + } + reduceDto.setPrice(money); + reduceDto.setUpdateEnum(ShopDealerCapitalUpdateEnum.DELIVERY_REWARD); + shopDealerUserService.reduceBalance(reduceDto); + } + } + + //4.配送费结算 + if(Arrays.asList(1, 3).contains(order.getOrderType()) && order.getDeliveryFee().compareTo(BigDecimal.ZERO) > 0){ + ShopDealerUserReduceDto reduceDto = new ShopDealerUserReduceDto(); + reduceDto.setTypeEnum(ShopDealerTypeEnum.WITHDRAW_ACCOUNT); + reduceDto.setUserId(ticketOrder.getRiderId()); + reduceDto.setOrderUserId(ticketOrder.getUserId()); + reduceDto.setOrderNo(order.getOrderNo()); + reduceDto.setPrice(order.getDeliveryFee()); + reduceDto.setUpdateEnum(ShopDealerCapitalUpdateEnum.DELIVERY_FLOOR_FEE); + shopDealerUserService.reduceBalance(reduceDto); + } + + //5.查询未完成订单,完成资金解冻 + if(order != null && order.getOrderStatus() == 0){ + ShopDealerUserReduceDto reduceDto = new ShopDealerUserReduceDto(); + reduceDto.setTypeEnum(ShopDealerTypeEnum.DEFROST); + reduceDto.setOrderUserId(order.getUserId()); + reduceDto.setOrderNo(order.getOrderNo()); + reduceDto.setUpdateEnum(ShopDealerCapitalUpdateEnum.FREEZE_MONEY_THAW); + + //按订单号资金解冻 + shopDealerUserService.reduceBalance(reduceDto); + } + + //5.调整订单为已完成、配送完成状态 + order.setOrderStatus(1); + order.setDeliveryStatus(40); + order.setUpdateTime(now); + shopOrderService.updateById(order); + } + private void settleRiderCommissionIfEligible(Integer ticketOrderId, Integer tenantId, boolean requirePhoto) { if (ticketOrderId == null || tenantId == null) { return; diff --git a/src/main/java/com/gxwebsoft/shop/entity/ShopOrder.java b/src/main/java/com/gxwebsoft/shop/entity/ShopOrder.java index ce23b1c..5d95126 100644 --- a/src/main/java/com/gxwebsoft/shop/entity/ShopOrder.java +++ b/src/main/java/com/gxwebsoft/shop/entity/ShopOrder.java @@ -190,7 +190,7 @@ public class ShopOrder implements Serializable { @Schema(description = "0未使用,1已完成,2已取消,3取消中,4退款申请中,5退款被拒绝,6退款成功,7客户端申请退款") private Integer orderStatus; - @Schema(description = "发货状态(10未发货 20已发货 30部分发货)") + @Schema(description = "发货状态(10未发货 20已发货 30部分发货 40已送达)") private Integer deliveryStatus; @Schema(description = "发货备注") diff --git a/src/main/java/com/gxwebsoft/shop/mapper/ShopOrderMapper.java b/src/main/java/com/gxwebsoft/shop/mapper/ShopOrderMapper.java index f7a54f8..c5a7083 100644 --- a/src/main/java/com/gxwebsoft/shop/mapper/ShopOrderMapper.java +++ b/src/main/java/com/gxwebsoft/shop/mapper/ShopOrderMapper.java @@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.gxwebsoft.shop.dto.ShopOrderMyVerifyDto; import com.gxwebsoft.shop.entity.ShopOrder; import com.gxwebsoft.shop.param.ShopOrderParam; +import com.gxwebsoft.shop.vo.ShopOrderGoodsInfoVO; import com.gxwebsoft.shop.vo.ShopOrderGoodsVO; import com.gxwebsoft.shop.vo.ShopOrderMyVerifyItemVO; import org.apache.ibatis.annotations.Param; @@ -79,4 +80,11 @@ public interface ShopOrderMapper extends BaseMapper { */ IPage getMyVerifyPageInfo(@Param("page") Page page, @Param("entity") ShopOrderMyVerifyDto entity); + /** + * 通过订单号查询订单商品名称 + * @param orderNoList + * @return + */ + List getOrderGoodsInfoByOrderNos(@Param("orderNoList") List orderNoList); + } diff --git a/src/main/java/com/gxwebsoft/shop/mapper/xml/ShopOrderMapper.xml b/src/main/java/com/gxwebsoft/shop/mapper/xml/ShopOrderMapper.xml index f191dd9..a9a07ef 100644 --- a/src/main/java/com/gxwebsoft/shop/mapper/xml/ShopOrderMapper.xml +++ b/src/main/java/com/gxwebsoft/shop/mapper/xml/ShopOrderMapper.xml @@ -241,7 +241,7 @@ - AND a.pay_status = 1 AND a.delivery_status = 10 AND a.order_status = 0 AND a.order_type in(1, 3, 4) + AND a.pay_status = 1 AND a.delivery_status = 10 AND a.order_status = 0 AND a.order_type in(1, 3, 4, 5) @@ -298,12 +298,12 @@ -- “全部”默认也会过滤已关闭(取消)订单:statusFilter != 8 时会加 a.order_status != 2 COALESCE(SUM(CASE WHEN a.deleted = 0 AND a.order_status != 2 THEN 1 ELSE 0 END), 0) AS total, COALESCE(SUM(CASE WHEN a.deleted = 0 AND a.pay_status = 0 AND a.order_status = 0 THEN 1 ELSE 0 END), 0) AS waitPay, - COALESCE(SUM(CASE WHEN a.deleted = 0 AND a.pay_status = 1 AND a.order_status = 0 AND a.order_type in(1, 3, 4) AND a.delivery_status = 10 THEN 1 ELSE 0 END), 0) AS waitDeliver, + COALESCE(SUM(CASE WHEN a.deleted = 0 AND a.pay_status = 1 AND a.order_status = 0 AND a.order_type in(1, 3, 4, 5) AND a.delivery_status = 10 THEN 1 ELSE 0 END), 0) AS waitDeliver, COALESCE(SUM(CASE WHEN a.deleted = 0 AND a.pay_status = 1 AND a.order_status = 0 AND a.order_type = 2 THEN 1 ELSE 0 END), 0) AS waitVerify, COALESCE(SUM(CASE WHEN a.deleted = 0 AND a.pay_status = 1 AND a.order_status = 0 AND (a.delivery_status = 20 or (a.order_type = 2 and a.delivery_status = 10)) THEN 1 ELSE 0 END), 0) AS waitReceive, COALESCE(SUM(CASE WHEN a.deleted = 0 AND a.pay_status = 1 AND a.order_status = 1 AND a.evaluate_status = 0 THEN 1 ELSE 0 END), 0) AS waitComment, - COALESCE(SUM(CASE WHEN a.deleted = 0 AND a.pay_status = 1 AND a.order_status = 1 THEN 1 ELSE 0 END), 0) AS completed, - COALESCE(SUM(CASE WHEN a.deleted = 0 AND a.pay_status = 1 AND a.order_status in(4, 5, 6, 7) THEN 1 ELSE 0 END), 0) AS refund, +-- COALESCE(SUM(CASE WHEN a.deleted = 0 AND a.pay_status = 1 AND a.order_status = 1 THEN 1 ELSE 0 END), 0) AS completed, +-- COALESCE(SUM(CASE WHEN a.deleted = 0 AND a.pay_status = 1 AND a.order_status in(4, 5, 6, 7) THEN 1 ELSE 0 END), 0) AS refund, COALESCE(SUM(CASE WHEN a.deleted = 1 THEN 1 ELSE 0 END), 0) AS deleted, COALESCE(SUM(CASE WHEN a.deleted = 0 AND a.order_status = 2 THEN 1 ELSE 0 END), 0) AS canceled FROM shop_order a @@ -375,6 +375,23 @@ ORDER BY a.create_time desc + UPDATE shop_order diff --git a/src/main/java/com/gxwebsoft/shop/service/ShopOrderService.java b/src/main/java/com/gxwebsoft/shop/service/ShopOrderService.java index a9cd060..744e42c 100644 --- a/src/main/java/com/gxwebsoft/shop/service/ShopOrderService.java +++ b/src/main/java/com/gxwebsoft/shop/service/ShopOrderService.java @@ -7,6 +7,7 @@ import com.gxwebsoft.shop.dto.UserOrderStats; import com.gxwebsoft.shop.dto.VerifyShopOrderDto; import com.gxwebsoft.shop.entity.ShopOrder; import com.gxwebsoft.shop.param.ShopOrderParam; +import com.gxwebsoft.shop.vo.ShopOrderGoodsInfoVO; import com.gxwebsoft.shop.vo.ShopOrderMyVerifyVO; import java.math.BigDecimal; @@ -102,4 +103,11 @@ public interface ShopOrderService extends IService { * @return */ Boolean verifyOrder(VerifyShopOrderDto verifyDto); + + /** + * 通过订单号查询订单商品名称 + * @param orderNoList + * @return + */ + List getOrderGoodsInfoByOrderNos(List orderNoList); } diff --git a/src/main/java/com/gxwebsoft/shop/service/impl/ShopDealerUserServiceImpl.java b/src/main/java/com/gxwebsoft/shop/service/impl/ShopDealerUserServiceImpl.java index af12963..ecbaf42 100644 --- a/src/main/java/com/gxwebsoft/shop/service/impl/ShopDealerUserServiceImpl.java +++ b/src/main/java/com/gxwebsoft/shop/service/impl/ShopDealerUserServiceImpl.java @@ -283,7 +283,7 @@ public class ShopDealerUserServiceImpl extends ServiceImpl finalShopDealerUserList = shopDealerUserList; BigDecimal finalRate = rate; userDealerMap.forEach((k, value) ->{ - BigDecimal money = value.stream().map(ShopDealerCapital::getMoney).reduce(BigDecimal.ZERO, BigDecimal::add).multiply(finalRate); - BigDecimal freezeMoney = value.stream().map(ShopDealerCapital::getFreezeMoney).reduce(BigDecimal.ZERO, BigDecimal::add).multiply(finalRate); + BigDecimal money = value.stream().map(ShopDealerCapital::getMoney).reduce(BigDecimal.ZERO, BigDecimal::add).multiply(finalRate).setScale(3, RoundingMode.HALF_UP); + BigDecimal freezeMoney = value.stream().map(ShopDealerCapital::getFreezeMoney).reduce(BigDecimal.ZERO, BigDecimal::add).multiply(finalRate).setScale(3, RoundingMode.HALF_UP); ShopDealerUser dealerUser = finalShopDealerUserList.stream().filter(shopDealerUser -> k.equals(shopDealerUser.getUserId())).findFirst().orElse(null); if(dealerUser != null){ //11.修改分销用户账户信息 - dealerUser.setMoney(dealerUser.getMoney().subtract(money)); - dealerUser.setFreezeMoney(dealerUser.getFreezeMoney().subtract(freezeMoney)); - dealerUser.setTotalMoney(dealerUser.getTotalMoney().subtract(money.add(freezeMoney))); + dealerUser.setMoney(dealerUser.getMoney().subtract(money).compareTo(BigDecimal.ZERO) < 0 ? BigDecimal.ZERO : dealerUser.getMoney().subtract(money)); + dealerUser.setFreezeMoney(dealerUser.getFreezeMoney().subtract(freezeMoney).compareTo(BigDecimal.ZERO) < 0 ? BigDecimal.ZERO : dealerUser.getFreezeMoney().subtract(freezeMoney)); + dealerUser.setTotalMoney(dealerUser.getTotalMoney().subtract(money.add(freezeMoney)).compareTo(BigDecimal.ZERO) < 0 ? BigDecimal.ZERO : dealerUser.getTotalMoney().subtract(money.add(freezeMoney))); dealerUser.setUpdateTime(LocalDateTime.now()); shopDealerUserUpdateList.add(dealerUser); diff --git a/src/main/java/com/gxwebsoft/shop/service/impl/ShopOrderServiceImpl.java b/src/main/java/com/gxwebsoft/shop/service/impl/ShopOrderServiceImpl.java index 0a94859..cfc20a1 100644 --- a/src/main/java/com/gxwebsoft/shop/service/impl/ShopOrderServiceImpl.java +++ b/src/main/java/com/gxwebsoft/shop/service/impl/ShopOrderServiceImpl.java @@ -32,6 +32,7 @@ import com.gxwebsoft.shop.entity.*; import com.gxwebsoft.shop.mapper.*; import com.gxwebsoft.shop.param.ShopOrderParam; import com.gxwebsoft.shop.service.*; +import com.gxwebsoft.shop.vo.ShopOrderGoodsInfoVO; import com.gxwebsoft.shop.vo.ShopOrderMyVerifyItemVO; import com.gxwebsoft.shop.vo.ShopOrderMyVerifyVO; import com.wechat.pay.java.core.Config; @@ -629,6 +630,11 @@ public class ShopOrderServiceImpl extends ServiceImpl getOrderGoodsInfoByOrderNos(List orderNoList) { + return baseMapper.getOrderGoodsInfoByOrderNos(orderNoList); + } + private static Long getLong(Map raw, String key) { Object value = raw.get(key); if (value == null) { diff --git a/src/main/java/com/gxwebsoft/shop/vo/ShopOrderGoodsInfoVO.java b/src/main/java/com/gxwebsoft/shop/vo/ShopOrderGoodsInfoVO.java new file mode 100644 index 0000000..8857223 --- /dev/null +++ b/src/main/java/com/gxwebsoft/shop/vo/ShopOrderGoodsInfoVO.java @@ -0,0 +1,24 @@ +package com.gxwebsoft.shop.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +/** + * 订单商品信息 + * @author xm + * @since 2025-01-12 + */ +@Data +@Schema(description = "订单商品信息") +public class ShopOrderGoodsInfoVO { + + @Schema(description = "订单号") + private String orderNo; + + @Schema(description = "订单状态") + private Integer orderStatus; + + @Schema(description = "订单品名") + private String goodsName; + +}