1、优化配送派单消息推送功能
2、优化送水订单配送状态、水票标识查询,回显品名、水票标识、订单状态业务 3、优化送水订单接单、送达业务 4、优化资金表、资金流水表资金变更同步业务
This commit is contained in:
@@ -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);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -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("修改成功");
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
<where>
|
||||
<if test="param.id != null">
|
||||
AND a.id = #{param.id}
|
||||
@@ -103,6 +102,12 @@
|
||||
OR u.phone LIKE CONCAT('%', #{param.keywords}, '%')
|
||||
)
|
||||
</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>
|
||||
</sql>
|
||||
|
||||
|
||||
@@ -94,4 +94,7 @@ public class GltTicketOrderParam extends BaseParam {
|
||||
@QueryField(type = QueryType.EQ)
|
||||
private Integer orderStatus;
|
||||
|
||||
@Schema(description = "水票订单标识 0-否 1-是")
|
||||
private Integer waterTicketFlag;
|
||||
|
||||
}
|
||||
|
||||
@@ -84,7 +84,7 @@ public interface GltTicketOrderService extends IService<GltTicketOrder> {
|
||||
*
|
||||
* <p>用于后台直接改 deliveryStatus=40 等不经过 confirmReceive/autoConfirmTimeout 的兜底同步。</p>
|
||||
*/
|
||||
void markShopOrderCompletedAfterTicketFinished(Integer ticketOrderId, Integer tenantId);
|
||||
void markShopOrderCompletedAfterTicketFinished(Integer id);
|
||||
|
||||
/**
|
||||
* 配送员开始配送:10 -> 20,并写 sendStartTime。
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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<GltTicketOrderMapper,
|
||||
List<GltTicketOrder> list = baseMapper.selectPageRel(page, param);
|
||||
if(CollectionUtils.isNotEmpty(list)){
|
||||
List<Integer> addressIdList = list.stream().map(GltTicketOrder::getAddressId).distinct().collect(Collectors.toList());
|
||||
List<ShopUserAddress> 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<String> orderNoList = list.stream().filter(gltTicketOrder -> StrUtil.isNotBlank(gltTicketOrder.getOrderNo())).map(GltTicketOrder::getOrderNo).distinct().collect(Collectors.toList());
|
||||
List<ShopOrderGoodsInfoVO> orderGoodsInfoVOList = new ArrayList<>();
|
||||
if(CollectionUtils.isNotEmpty(orderNoList)){
|
||||
orderGoodsInfoVOList = shopOrderService.getOrderGoodsInfoByOrderNos(orderNoList);
|
||||
}
|
||||
|
||||
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());
|
||||
}
|
||||
@@ -349,7 +364,7 @@ public class GltTicketOrderServiceImpl extends ServiceImpl<GltTicketOrderMapper,
|
||||
.update();
|
||||
if (ok) {
|
||||
// 接单成功后,同步商城订单发货状态:10未发货 -> 20已发货
|
||||
updateShopOrderDeliveryStatusAfterAccept(id, tenantId, riderId, now);
|
||||
updateShopOrderDeliveryStatusAfterAcceptV2(id, tenantId, riderId, now);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -391,12 +406,12 @@ public class GltTicketOrderServiceImpl extends ServiceImpl<GltTicketOrderMapper,
|
||||
|
||||
@Override
|
||||
public void markShopOrderShippedAfterRiderAssigned(Integer ticketOrderId, Integer tenantId, Integer riderId) {
|
||||
updateShopOrderDeliveryStatusAfterAccept(ticketOrderId, tenantId, riderId, LocalDateTime.now());
|
||||
updateShopOrderDeliveryStatusAfterAcceptV2(ticketOrderId, tenantId, riderId, LocalDateTime.now());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void markShopOrderCompletedAfterTicketFinished(Integer ticketOrderId, Integer tenantId) {
|
||||
updateShopOrderOrderStatusAfterTicketFinished(ticketOrderId, tenantId, LocalDateTime.now());
|
||||
public void markShopOrderCompletedAfterTicketFinished(Integer id) {
|
||||
updateShopOrderOrderStatusAfterTicketFinishedV2(id);
|
||||
}
|
||||
|
||||
private void updateShopOrderDeliveryStatusAfterAccept(Integer ticketOrderId, Integer tenantId, Integer riderId, LocalDateTime now) {
|
||||
@@ -466,22 +481,6 @@ public class GltTicketOrderServiceImpl extends ServiceImpl<GltTicketOrderMapper,
|
||||
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>()
|
||||
@@ -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
|
||||
public void start(Integer id, Integer riderId, Integer tenantId) {
|
||||
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) {
|
||||
if (ticketOrderId == null || tenantId == null) {
|
||||
return;
|
||||
|
||||
@@ -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 = "发货备注")
|
||||
|
||||
@@ -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<ShopOrder> {
|
||||
*/
|
||||
IPage<ShopOrderMyVerifyItemVO> getMyVerifyPageInfo(@Param("page") Page page, @Param("entity") ShopOrderMyVerifyDto entity);
|
||||
|
||||
/**
|
||||
* 通过订单号查询订单商品名称
|
||||
* @param orderNoList
|
||||
* @return
|
||||
*/
|
||||
List<ShopOrderGoodsInfoVO> getOrderGoodsInfoByOrderNos(@Param("orderNoList") List<String> orderNoList);
|
||||
|
||||
}
|
||||
|
||||
@@ -241,7 +241,7 @@
|
||||
</if>
|
||||
<if test="param.statusFilter == 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 test="param.statusFilter == 2">
|
||||
<!-- 2待核销:已付款但订单状态为未使用 -->
|
||||
@@ -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 @@
|
||||
</if>
|
||||
ORDER BY a.create_time desc
|
||||
</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 shop_order
|
||||
|
||||
@@ -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<ShopOrder> {
|
||||
* @return
|
||||
*/
|
||||
Boolean verifyOrder(VerifyShopOrderDto verifyDto);
|
||||
|
||||
/**
|
||||
* 通过订单号查询订单商品名称
|
||||
* @param orderNoList
|
||||
* @return
|
||||
*/
|
||||
List<ShopOrderGoodsInfoVO> getOrderGoodsInfoByOrderNos(List<String> orderNoList);
|
||||
}
|
||||
|
||||
@@ -283,7 +283,7 @@ public class ShopDealerUserServiceImpl extends ServiceImpl<ShopDealerUserMapper,
|
||||
ShopDealerCapitalUpdateEnum.MANAGEMENT_INCOME.getType(), ShopDealerCapitalUpdateEnum.DIVIDEND_INCOME.getType(),
|
||||
ShopDealerCapitalUpdateEnum.PROMOTION_INCOME.getType(), ShopDealerCapitalUpdateEnum.PROMOTION_PARENT_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)
|
||||
);
|
||||
|
||||
@@ -328,15 +328,15 @@ public class ShopDealerUserServiceImpl extends ServiceImpl<ShopDealerUserMapper,
|
||||
List<ShopDealerUser> 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);
|
||||
|
||||
|
||||
@@ -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<ShopOrderMapper, ShopOrder
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ShopOrderGoodsInfoVO> getOrderGoodsInfoByOrderNos(List<String> orderNoList) {
|
||||
return baseMapper.getOrderGoodsInfoByOrderNos(orderNoList);
|
||||
}
|
||||
|
||||
private static Long getLong(Map<String, Object> raw, String key) {
|
||||
Object value = raw.get(key);
|
||||
if (value == null) {
|
||||
|
||||
@@ -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;
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user