1、优化配送派单消息推送功能

2、优化送水订单配送状态、水票标识查询,回显品名、水票标识、订单状态业务
3、优化送水订单接单、送达业务
4、优化资金表、资金流水表资金变更同步业务
This commit is contained in:
2026-05-28 17:01:35 +08:00
parent 30363735df
commit 61b1d16937
15 changed files with 246 additions and 66 deletions

View File

@@ -80,7 +80,7 @@ public class MybatisPlusConfig {
@Override @Override
public boolean ignoreTable(String tableName) { public boolean ignoreTable(String tableName) {
TenantContext.setIgnoreTenant(Boolean.TRUE); // TenantContext.setIgnoreTenant(Boolean.TRUE);
// 如果当前上下文设置了忽略租户隔离,则忽略所有表的租户隔离 // 如果当前上下文设置了忽略租户隔离,则忽略所有表的租户隔离
if (TenantContext.isIgnoreTenant()) { if (TenantContext.isIgnoreTenant()) {
return true; return true;
@@ -93,17 +93,8 @@ public class MybatisPlusConfig {
"sys_dictionary_data", "sys_dictionary_data",
"apps_test_data", "apps_test_data",
"cms_lang", "cms_lang",
// "hjm_car",
// "hjm_fence"
// "cms_website"
// "sys_user"
// "cms_domain"
// "shop_order_goods",
"shop_goods", "shop_goods",
// "shop_users", "shop_order" ,
"shop_order" , // 移除shop_order改为通过注解控制
// "shop_order_info",
// "booking_user_invoice"
"shop_order_goods", "shop_order_goods",
"glt_ticket_template", "glt_ticket_template",
"glt_user_ticket", "glt_user_ticket",
@@ -111,7 +102,8 @@ public class MybatisPlusConfig {
"glt_user_ticket_log", "glt_user_ticket_log",
"shop_dealer_user", "shop_dealer_user",
"shop_dealer_order", "shop_dealer_order",
"shop_dealer_referee" "shop_dealer_referee",
"shop_store_rider"
).contains(tableName); ).contains(tableName);
} }
}; };

View File

@@ -299,6 +299,13 @@ public class GltTicketOrderController extends BaseController {
return success("确认送达"); 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()") @PreAuthorize("isAuthenticated()")
@Operation(summary = "用户确认收货") @Operation(summary = "用户确认收货")
@PostMapping("/{id}/confirm-receive") @PostMapping("/{id}/confirm-receive")
@@ -382,23 +389,14 @@ public class GltTicketOrderController extends BaseController {
} }
if (gltTicketOrderService.updateById(gltTicketOrder)) { if (gltTicketOrderService.updateById(gltTicketOrder)) {
// 后台指派配送员(直接改 riderId同步商城订单为“已发货”(deliveryStatus=20) gltTicketOrderService.markShopOrderShippedAfterRiderAssigned(gltTicketOrder.getId(), tenantId, gltTicketOrder.getRiderId());
if (gltTicketOrder != null
&& gltTicketOrder.getId() != null
&& gltTicketOrder.getRiderId() != null
&& gltTicketOrder.getRiderId() > 0) {
gltTicketOrderService.markShopOrderShippedAfterRiderAssigned(
gltTicketOrder.getId(),
tenantId,
gltTicketOrder.getRiderId()
);
}
// 后台直接改“已完成”(deliveryStatus=40)时,同步商城订单为“已完成”(orderStatus=1) // 后台直接改“已完成”(deliveryStatus=40)时,同步商城订单为“已完成”(orderStatus=1)
if (gltTicketOrder != null if (gltTicketOrder != null
&& gltTicketOrder.getId() != null && gltTicketOrder.getId() != null
&& gltTicketOrder.getDeliveryStatus() != null && gltTicketOrder.getDeliveryStatus() != null
&& gltTicketOrder.getDeliveryStatus() == GltTicketOrderService.DELIVERY_STATUS_FINISHED) { && gltTicketOrder.getDeliveryStatus() == GltTicketOrderService.DELIVERY_STATUS_FINISHED) {
gltTicketOrderService.markShopOrderCompletedAfterTicketFinished(gltTicketOrder.getId(), tenantId); gltTicketOrderService.markShopOrderCompletedAfterTicketFinished(gltTicketOrder.getId());
} }
return success("修改成功"); return success("修改成功");
} }

View File

@@ -46,6 +46,10 @@ public class GltTicketOrder implements Serializable {
@TableField(exist = false) @TableField(exist = false)
private String storeName; private String storeName;
@Schema(description = "品名")
@TableField(exist = false)
private String goodsName;
@Schema(description = "门店地址") @Schema(description = "门店地址")
@TableField(exist = false) @TableField(exist = false)
private String storeAddress; private String storeAddress;
@@ -213,6 +217,9 @@ public class GltTicketOrder implements Serializable {
@Schema(description = "状态, 0正常, 1冻结") @Schema(description = "状态, 0正常, 1冻结")
private Integer status; private Integer status;
@Schema(description = "水票标识 0-非 1-是")
private Integer waterTicketFlag;
@Schema(description = "是否删除, 0否, 1是") @Schema(description = "是否删除, 0否, 1是")
@TableLogic @TableLogic
private Integer deleted; private Integer deleted;

View File

@@ -20,7 +20,6 @@
LEFT JOIN shop_user_address d ON a.address_id = d.id 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 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 LEFT JOIN shop_order o ON f.order_id = o.order_id AND f.tenant_id = o.tenant_id AND o.deleted = 0
<where> <where>
<if test="param.id != null"> <if test="param.id != null">
AND a.id = #{param.id} AND a.id = #{param.id}
@@ -103,6 +102,12 @@
OR u.phone LIKE CONCAT('%', #{param.keywords}, '%') OR u.phone LIKE CONCAT('%', #{param.keywords}, '%')
) )
</if> </if>
<if test="param.waterTicketFlag != null">
AND a.water_ticket_flag = #{param.waterTicketFlag}
</if>
<if test="param.deliveryStatus != null and param.deliveryStatus == 10">
AND o.order_status in (0, 1, 5)
</if>
</where> </where>
</sql> </sql>

View File

@@ -94,4 +94,7 @@ public class GltTicketOrderParam extends BaseParam {
@QueryField(type = QueryType.EQ) @QueryField(type = QueryType.EQ)
private Integer orderStatus; private Integer orderStatus;
@Schema(description = "水票订单标识 0-否 1-是")
private Integer waterTicketFlag;
} }

View File

@@ -84,7 +84,7 @@ public interface GltTicketOrderService extends IService<GltTicketOrder> {
* *
* <p>用于后台直接改 deliveryStatus=40 等不经过 confirmReceive/autoConfirmTimeout 的兜底同步。</p> * <p>用于后台直接改 deliveryStatus=40 等不经过 confirmReceive/autoConfirmTimeout 的兜底同步。</p>
*/ */
void markShopOrderCompletedAfterTicketFinished(Integer ticketOrderId, Integer tenantId); void markShopOrderCompletedAfterTicketFinished(Integer id);
/** /**
* 配送员开始配送10 -> 20并写 sendStartTime。 * 配送员开始配送10 -> 20并写 sendStartTime。

View File

@@ -5,6 +5,7 @@ import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.gxwebsoft.common.core.exception.BusinessException; import com.gxwebsoft.common.core.exception.BusinessException;
import com.gxwebsoft.common.core.utils.DateTimeUtil;
import com.gxwebsoft.glt.dto.NoticeRiderNewOrderDto; import com.gxwebsoft.glt.dto.NoticeRiderNewOrderDto;
import com.gxwebsoft.glt.entity.GltTicketOrder; import com.gxwebsoft.glt.entity.GltTicketOrder;
import com.gxwebsoft.glt.service.GltSubscribeMessageService; 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("character_string1", Map.of("value", String.valueOf(entity.getOrderNo())));
data.put("thing22", Map.of("value", String.valueOf(entity.getGoodsName()))); data.put("thing22", Map.of("value", String.valueOf(entity.getGoodsName())));
data.put("number20", Map.of("value", String.valueOf(entity.getProductCount()))); 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); sendSubscribeMessage(accessToken, entity.getOpenId(), data);

View File

@@ -36,6 +36,7 @@ import com.gxwebsoft.shop.service.ShopDealerCapitalService;
import com.gxwebsoft.shop.service.ShopDealerUserService; import com.gxwebsoft.shop.service.ShopDealerUserService;
import com.gxwebsoft.shop.service.ShopOrderGoodsService; import com.gxwebsoft.shop.service.ShopOrderGoodsService;
import com.gxwebsoft.shop.service.ShopOrderService; import com.gxwebsoft.shop.service.ShopOrderService;
import com.gxwebsoft.shop.vo.ShopOrderGoodsInfoVO;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@@ -49,6 +50,7 @@ import java.math.RoundingMode;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicInteger;
@@ -122,15 +124,28 @@ public class GltTicketOrderServiceImpl extends ServiceImpl<GltTicketOrderMapper,
List<GltTicketOrder> list = baseMapper.selectPageRel(page, param); List<GltTicketOrder> list = baseMapper.selectPageRel(page, param);
if(CollectionUtils.isNotEmpty(list)){ if(CollectionUtils.isNotEmpty(list)){
List<Integer> addressIdList = list.stream().map(GltTicketOrder::getAddressId).distinct().collect(Collectors.toList()); List<Integer> addressIdList = list.stream().map(GltTicketOrder::getAddressId).distinct().collect(Collectors.toList());
List<ShopUserAddress> userAddressList = shopUserAddressMapper.selectBatchIds(addressIdList); List<String> orderNoList = list.stream().filter(gltTicketOrder -> StrUtil.isNotBlank(gltTicketOrder.getOrderNo())).map(GltTicketOrder::getOrderNo).distinct().collect(Collectors.toList());
if(CollectionUtils.isNotEmpty(userAddressList)){ List<ShopOrderGoodsInfoVO> orderGoodsInfoVOList = new ArrayList<>();
list.forEach(ticketOrder ->{ if(CollectionUtils.isNotEmpty(orderNoList)){
ShopUserAddress shopUserAddress = userAddressList.stream().filter(address -> ticketOrder.getAddressId().equals(address.getId())).findFirst().orElse(null); orderGoodsInfoVOList = shopOrderService.getOrderGoodsInfoByOrderNos(orderNoList);
if(shopUserAddress != null){
ticketOrder.setFullAddress(shopUserAddress.getFullAddress());
}
});
} }
List<ShopUserAddress> userAddressList = shopUserAddressMapper.selectBatchIds(addressIdList);
List<ShopOrderGoodsInfoVO> 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()); return new PageResult<>(list, page.getTotal());
} }
@@ -349,7 +364,7 @@ public class GltTicketOrderServiceImpl extends ServiceImpl<GltTicketOrderMapper,
.update(); .update();
if (ok) { if (ok) {
// 接单成功后同步商城订单发货状态10未发货 -> 20已发货 // 接单成功后同步商城订单发货状态10未发货 -> 20已发货
updateShopOrderDeliveryStatusAfterAccept(id, tenantId, riderId, now); updateShopOrderDeliveryStatusAfterAcceptV2(id, tenantId, riderId, now);
return; return;
} }
@@ -391,12 +406,12 @@ public class GltTicketOrderServiceImpl extends ServiceImpl<GltTicketOrderMapper,
@Override @Override
public void markShopOrderShippedAfterRiderAssigned(Integer ticketOrderId, Integer tenantId, Integer riderId) { public void markShopOrderShippedAfterRiderAssigned(Integer ticketOrderId, Integer tenantId, Integer riderId) {
updateShopOrderDeliveryStatusAfterAccept(ticketOrderId, tenantId, riderId, LocalDateTime.now()); updateShopOrderDeliveryStatusAfterAcceptV2(ticketOrderId, tenantId, riderId, LocalDateTime.now());
} }
@Override @Override
public void markShopOrderCompletedAfterTicketFinished(Integer ticketOrderId, Integer tenantId) { public void markShopOrderCompletedAfterTicketFinished(Integer id) {
updateShopOrderOrderStatusAfterTicketFinished(ticketOrderId, tenantId, LocalDateTime.now()); updateShopOrderOrderStatusAfterTicketFinishedV2(id);
} }
private void updateShopOrderDeliveryStatusAfterAccept(Integer ticketOrderId, Integer tenantId, Integer riderId, LocalDateTime now) { private void updateShopOrderDeliveryStatusAfterAccept(Integer ticketOrderId, Integer tenantId, Integer riderId, LocalDateTime now) {
@@ -466,22 +481,6 @@ public class GltTicketOrderServiceImpl extends ServiceImpl<GltTicketOrderMapper,
shopOrderNo = order.getOrderNo(); shopOrderNo = order.getOrderNo();
} }
} }
LambdaUpdateWrapper<GltUserTicket> backfill = new LambdaUpdateWrapper<GltUserTicket>()
.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<ShopOrder> uw = new LambdaUpdateWrapper<ShopOrder>() LambdaUpdateWrapper<ShopOrder> uw = new LambdaUpdateWrapper<ShopOrder>()
@@ -529,6 +528,20 @@ public class GltTicketOrderServiceImpl extends ServiceImpl<GltTicketOrderMapper,
} }
} }
private void updateShopOrderDeliveryStatusAfterAcceptV2(Integer ticketOrderId, Integer tenantId, Integer riderId, LocalDateTime now) {
GltTicketOrder gltTicketOrder = baseMapper.selectById(ticketOrderId);
if(gltTicketOrder != null && StrUtil.isNotBlank(gltTicketOrder.getOrderNo())){
String orderNo = gltTicketOrder.getOrderNo();
ShopOrder shopOrder = shopOrderService.getByOrderNo(orderNo, tenantId);
if(shopOrder != null && shopOrder.getOrderStatus() == 0){
shopOrder.setDeliveryStatus(20);
shopOrder.setUpdateTime(now);
shopOrderService.updateById(shopOrder);
}
}
}
@Override @Override
public void start(Integer id, Integer riderId, Integer tenantId) { public void start(Integer id, Integer riderId, Integer tenantId) {
if (id == null) { if (id == null) {
@@ -1018,6 +1031,104 @@ public class GltTicketOrderServiceImpl extends ServiceImpl<GltTicketOrderMapper,
} }
} }
/**
* 更新送水订单为已完成状态
* @param id 送水订单ID
*/
@Transactional
public void updateShopOrderOrderStatusAfterTicketFinishedV2(Integer id) {
LocalDateTime now = LocalDateTime.now();
if(id == null){
return;
}
//1.找到关联水票的商城订单
GltTicketOrder ticketOrder = baseMapper.selectById(id);
if (ticketOrder == null) {
return;
}
ShopOrder order = shopOrderService.getByOrderNo(ticketOrder.getOrderNo(), ticketOrder.getTenantId());
//2.配送提成(每桶0.1)
int qty = ticketOrder.getTotalNum() == null ? 0 : ticketOrder.getTotalNum();
if (qty > 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) { private void settleRiderCommissionIfEligible(Integer ticketOrderId, Integer tenantId, boolean requirePhoto) {
if (ticketOrderId == null || tenantId == null) { if (ticketOrderId == null || tenantId == null) {
return; return;

View File

@@ -190,7 +190,7 @@ public class ShopOrder implements Serializable {
@Schema(description = "0未使用1已完成2已取消3取消中4退款申请中5退款被拒绝6退款成功7客户端申请退款") @Schema(description = "0未使用1已完成2已取消3取消中4退款申请中5退款被拒绝6退款成功7客户端申请退款")
private Integer orderStatus; private Integer orderStatus;
@Schema(description = "发货状态(10未发货 20已发货 30部分发货)") @Schema(description = "发货状态(10未发货 20已发货 30部分发货 40已送达)")
private Integer deliveryStatus; private Integer deliveryStatus;
@Schema(description = "发货备注") @Schema(description = "发货备注")

View File

@@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.gxwebsoft.shop.dto.ShopOrderMyVerifyDto; import com.gxwebsoft.shop.dto.ShopOrderMyVerifyDto;
import com.gxwebsoft.shop.entity.ShopOrder; import com.gxwebsoft.shop.entity.ShopOrder;
import com.gxwebsoft.shop.param.ShopOrderParam; import com.gxwebsoft.shop.param.ShopOrderParam;
import com.gxwebsoft.shop.vo.ShopOrderGoodsInfoVO;
import com.gxwebsoft.shop.vo.ShopOrderGoodsVO; import com.gxwebsoft.shop.vo.ShopOrderGoodsVO;
import com.gxwebsoft.shop.vo.ShopOrderMyVerifyItemVO; import com.gxwebsoft.shop.vo.ShopOrderMyVerifyItemVO;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
@@ -79,4 +80,11 @@ public interface ShopOrderMapper extends BaseMapper<ShopOrder> {
*/ */
IPage<ShopOrderMyVerifyItemVO> getMyVerifyPageInfo(@Param("page") Page page, @Param("entity") ShopOrderMyVerifyDto entity); IPage<ShopOrderMyVerifyItemVO> getMyVerifyPageInfo(@Param("page") Page page, @Param("entity") ShopOrderMyVerifyDto entity);
/**
* 通过订单号查询订单商品名称
* @param orderNoList
* @return
*/
List<ShopOrderGoodsInfoVO> getOrderGoodsInfoByOrderNos(@Param("orderNoList") List<String> orderNoList);
} }

View File

@@ -241,7 +241,7 @@
</if> </if>
<if test="param.statusFilter == 1"> <if test="param.statusFilter == 1">
<!-- 1待发货已付款但未发货 --> <!-- 1待发货已付款但未发货 -->
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)
</if> </if>
<if test="param.statusFilter == 2"> <if test="param.statusFilter == 2">
<!-- 2待核销已付款但订单状态为未使用 --> <!-- 2待核销已付款但订单状态为未使用 -->
@@ -298,12 +298,12 @@
-- “全部”默认也会过滤已关闭(取消)订单statusFilter != 8 时会加 a.order_status != 2 -- “全部”默认也会过滤已关闭(取消)订单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.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 = 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.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 = 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 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 = 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 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 = 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 COALESCE(SUM(CASE WHEN a.deleted = 0 AND a.order_status = 2 THEN 1 ELSE 0 END), 0) AS canceled
FROM shop_order a FROM shop_order a
@@ -375,6 +375,23 @@
</if> </if>
ORDER BY a.create_time desc ORDER BY a.create_time desc
</select> </select>
<select id="getOrderGoodsInfoByOrderNos" resultType="com.gxwebsoft.shop.vo.ShopOrderGoodsInfoVO">
SELECT
a.order_no,
b.order_status,
c.goods_name
FROM
glt_ticket_order a
LEFT JOIN shop_order b ON a.order_no = b.order_no
LEFT JOIN shop_order_goods c ON b.order_id = c.order_id
WHERE
a.deleted = 0
AND b.deleted = 0
AND a.order_no in
<foreach collection="orderNoList" index="index" item="item" open="(" close=")" separator=",">
#{item}
</foreach>
</select>
<!-- 根据订单号修改订单 --> <!-- 根据订单号修改订单 -->
<update id="updateByOutTradeNo" parameterType="com.gxwebsoft.cms.entity.CmsWebsite"> <update id="updateByOutTradeNo" parameterType="com.gxwebsoft.cms.entity.CmsWebsite">
UPDATE shop_order UPDATE shop_order

View File

@@ -7,6 +7,7 @@ import com.gxwebsoft.shop.dto.UserOrderStats;
import com.gxwebsoft.shop.dto.VerifyShopOrderDto; import com.gxwebsoft.shop.dto.VerifyShopOrderDto;
import com.gxwebsoft.shop.entity.ShopOrder; import com.gxwebsoft.shop.entity.ShopOrder;
import com.gxwebsoft.shop.param.ShopOrderParam; import com.gxwebsoft.shop.param.ShopOrderParam;
import com.gxwebsoft.shop.vo.ShopOrderGoodsInfoVO;
import com.gxwebsoft.shop.vo.ShopOrderMyVerifyVO; import com.gxwebsoft.shop.vo.ShopOrderMyVerifyVO;
import java.math.BigDecimal; import java.math.BigDecimal;
@@ -102,4 +103,11 @@ public interface ShopOrderService extends IService<ShopOrder> {
* @return * @return
*/ */
Boolean verifyOrder(VerifyShopOrderDto verifyDto); Boolean verifyOrder(VerifyShopOrderDto verifyDto);
/**
* 通过订单号查询订单商品名称
* @param orderNoList
* @return
*/
List<ShopOrderGoodsInfoVO> getOrderGoodsInfoByOrderNos(List<String> orderNoList);
} }

View File

@@ -283,7 +283,7 @@ public class ShopDealerUserServiceImpl extends ServiceImpl<ShopDealerUserMapper,
ShopDealerCapitalUpdateEnum.MANAGEMENT_INCOME.getType(), ShopDealerCapitalUpdateEnum.DIVIDEND_INCOME.getType(), ShopDealerCapitalUpdateEnum.MANAGEMENT_INCOME.getType(), ShopDealerCapitalUpdateEnum.DIVIDEND_INCOME.getType(),
ShopDealerCapitalUpdateEnum.PROMOTION_INCOME.getType(), ShopDealerCapitalUpdateEnum.PROMOTION_PARENT_INCOME.getType(), ShopDealerCapitalUpdateEnum.PROMOTION_INCOME.getType(), ShopDealerCapitalUpdateEnum.PROMOTION_PARENT_INCOME.getType(),
ShopDealerCapitalUpdateEnum.FREEZE_MONEY_THAW.getType(), ShopDealerCapitalUpdateEnum.DELIVERY_INCOME.getType(), ShopDealerCapitalUpdateEnum.FREEZE_MONEY_THAW.getType(), ShopDealerCapitalUpdateEnum.DELIVERY_INCOME.getType(),
ShopDealerCapitalUpdateEnum.DELIVERY_REWARD.getType()), ShopDealerCapitalUpdateEnum.DELIVERY_FLOOR_FEE.getType()) ShopDealerCapitalUpdateEnum.DELIVERY_REWARD.getType(), ShopDealerCapitalUpdateEnum.DELIVERY_FLOOR_FEE.getType()))
.isNotNull(ShopDealerCapital::getUserId) .isNotNull(ShopDealerCapital::getUserId)
); );
@@ -328,15 +328,15 @@ public class ShopDealerUserServiceImpl extends ServiceImpl<ShopDealerUserMapper,
List<ShopDealerUser> finalShopDealerUserList = shopDealerUserList; List<ShopDealerUser> finalShopDealerUserList = shopDealerUserList;
BigDecimal finalRate = rate; BigDecimal finalRate = rate;
userDealerMap.forEach((k, value) ->{ userDealerMap.forEach((k, value) ->{
BigDecimal money = value.stream().map(ShopDealerCapital::getMoney).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); 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); ShopDealerUser dealerUser = finalShopDealerUserList.stream().filter(shopDealerUser -> k.equals(shopDealerUser.getUserId())).findFirst().orElse(null);
if(dealerUser != null){ if(dealerUser != null){
//11.修改分销用户账户信息 //11.修改分销用户账户信息
dealerUser.setMoney(dealerUser.getMoney().subtract(money)); dealerUser.setMoney(dealerUser.getMoney().subtract(money).compareTo(BigDecimal.ZERO) < 0 ? BigDecimal.ZERO : dealerUser.getMoney().subtract(money));
dealerUser.setFreezeMoney(dealerUser.getFreezeMoney().subtract(freezeMoney)); dealerUser.setFreezeMoney(dealerUser.getFreezeMoney().subtract(freezeMoney).compareTo(BigDecimal.ZERO) < 0 ? BigDecimal.ZERO : dealerUser.getFreezeMoney().subtract(freezeMoney));
dealerUser.setTotalMoney(dealerUser.getTotalMoney().subtract(money.add(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()); dealerUser.setUpdateTime(LocalDateTime.now());
shopDealerUserUpdateList.add(dealerUser); shopDealerUserUpdateList.add(dealerUser);

View File

@@ -32,6 +32,7 @@ import com.gxwebsoft.shop.entity.*;
import com.gxwebsoft.shop.mapper.*; import com.gxwebsoft.shop.mapper.*;
import com.gxwebsoft.shop.param.ShopOrderParam; import com.gxwebsoft.shop.param.ShopOrderParam;
import com.gxwebsoft.shop.service.*; import com.gxwebsoft.shop.service.*;
import com.gxwebsoft.shop.vo.ShopOrderGoodsInfoVO;
import com.gxwebsoft.shop.vo.ShopOrderMyVerifyItemVO; import com.gxwebsoft.shop.vo.ShopOrderMyVerifyItemVO;
import com.gxwebsoft.shop.vo.ShopOrderMyVerifyVO; import com.gxwebsoft.shop.vo.ShopOrderMyVerifyVO;
import com.wechat.pay.java.core.Config; import com.wechat.pay.java.core.Config;
@@ -629,6 +630,11 @@ public class ShopOrderServiceImpl extends ServiceImpl<ShopOrderMapper, ShopOrder
} }
} }
@Override
public List<ShopOrderGoodsInfoVO> getOrderGoodsInfoByOrderNos(List<String> orderNoList) {
return baseMapper.getOrderGoodsInfoByOrderNos(orderNoList);
}
private static Long getLong(Map<String, Object> raw, String key) { private static Long getLong(Map<String, Object> raw, String key) {
Object value = raw.get(key); Object value = raw.get(key);
if (value == null) { if (value == null) {

View File

@@ -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;
}