Administrator
2025-05-23 0d520631715ce7918a3da8cecd4ef8461a9aae66
feat(mall): 新增自提点核销功能

- 添加 ApiHappyOrderLeaderDto、ApiHappyOrderLeaderInsureDto、ApiHappyOrderLeaderItemVo 和 ApiHappyOrderLeaderVo 类用于自提点核销相关操作
- 在 ApiMallTeamLeaderController 中添加自提点核销相关的 API 接口- 在 ApiMallTeamLeaderServiceImpl 中实现自提点核销相关的业务逻辑
- 在 MallMember 和 MallMemberVo 中添加 checkLeader 字段,用于标识是否为订单核销员
- 在 MallOrderItem 中添加 leaderState 字段,用于标识商品状态(待自提/已自提)
- 更新 StateUpDownEnum 枚举,增加自提订单核销员和商品状态的含义
7 files modified
4 files added
249 ■■■■■ changed files
src/main/java/cc/mrbird/febs/common/enumerates/StateUpDownEnum.java 2 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/controller/teamLeader/ApiMallTeamLeaderController.java 19 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/dto/ApiHappyOrderLeaderDto.java 17 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/dto/ApiHappyOrderLeaderInsureDto.java 25 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/entity/MallMember.java 2 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/entity/MallOrderItem.java 3 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/service/IApiMallTeamLeaderService.java 4 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallTeamLeaderServiceImpl.java 96 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/vo/ApiHappyOrderLeaderItemVo.java 24 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/vo/ApiHappyOrderLeaderVo.java 54 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/vo/MallMemberVo.java 3 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/common/enumerates/StateUpDownEnum.java
@@ -84,6 +84,8 @@
     * 是否是核销员 0-否 1-是
     * 匿名状态 1:匿名 0:不匿名
     * 展示状态 1:显示 0:隐藏
     * 是否是自提订单核销员 0-否 1-是
     * 商品状态 0-待自提 1-已自提
     */
    DOWN(0),
    UP(1);
src/main/java/cc/mrbird/febs/mall/controller/teamLeader/ApiMallTeamLeaderController.java
@@ -3,8 +3,10 @@
import cc.mrbird.febs.common.annotation.ControllerEndpoint;
import cc.mrbird.febs.common.entity.FebsResponse;
import cc.mrbird.febs.mall.dto.*;
import cc.mrbird.febs.mall.dto.activity.ApiCheckOrderDto;
import cc.mrbird.febs.mall.service.IApiMallTeamLeaderService;
import cc.mrbird.febs.mall.vo.*;
import cc.mrbird.febs.mall.vo.activity.ApiCheckOrderVo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiResponse;
@@ -40,6 +42,23 @@
        return iApiMallTeamLeaderService.happyLeaderList();
    }
    @ApiOperation(value = "自提点核销", notes = "自提点核销")
    @ApiResponses({
            @ApiResponse(code = 200, message = "success", response = ApiHappyOrderLeaderVo.class)
    })
    @PostMapping(value = "/checkOrder")
    public FebsResponse checkOrder(@RequestBody @Validated ApiHappyOrderLeaderDto dto) {
        return iApiMallTeamLeaderService.checkOrder(dto);
    }
    @ApiOperation(value = "自提点核销-确认核销", notes = "自提点核销-确认核销")
    @PostMapping(value = "/insureOrder")
    public FebsResponse insureOrder(@RequestBody @Validated ApiHappyOrderLeaderInsureDto dto) {
        return iApiMallTeamLeaderService.insureOrder(dto);
    }
    /**
     * 申请团长
     */
src/main/java/cc/mrbird/febs/mall/dto/ApiHappyOrderLeaderDto.java
New file
@@ -0,0 +1,17 @@
package cc.mrbird.febs.mall.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
@Data
@ApiModel(value = "ApiHappyOrderLeaderDto", description = "参数接收类")
public class ApiHappyOrderLeaderDto {
    @NotBlank(message = "自提码")
    @ApiModelProperty(value = "自提码(手动输入,或者扫码)", example = "1")
    private String takeCode;
}
src/main/java/cc/mrbird/febs/mall/dto/ApiHappyOrderLeaderInsureDto.java
New file
@@ -0,0 +1,25 @@
package cc.mrbird.febs.mall.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
@Data
@ApiModel(value = "ApiHappyOrderLeaderInsureDto", description = "参数接收类")
public class ApiHappyOrderLeaderInsureDto {
    @NotBlank(message = "自提码不能为空")
    @ApiModelProperty(value = "自提码(手动输入,或者扫码)", example = "1")
    private String takeCode;
    @NotNull(message = "订单不能为空")
    @ApiModelProperty(value = "订单ID")
    private Long orderId;
    @NotNull(message = "订单不能为空")
    @ApiModelProperty(value = "订单子表ID")
    private String itemId;
}
src/main/java/cc/mrbird/febs/mall/entity/MallMember.java
@@ -193,4 +193,6 @@
    private Integer checkOrder;
    //是否领取新人礼 0-否 1-是
    private Integer newGift;
    //是否是订单核销员 0-否 1-是
    private Integer checkLeader;
}
src/main/java/cc/mrbird/febs/mall/entity/MallOrderItem.java
@@ -48,6 +48,9 @@
    private Integer isNormal;
    //商品状态 0-待自提 1-已自提
    private Integer leaderState;
    /**
     * 是否结清
     */
src/main/java/cc/mrbird/febs/mall/service/IApiMallTeamLeaderService.java
@@ -41,4 +41,8 @@
    FebsResponse noLoginLeaderTitle(ApiLeaderTitleDto apiLeaderTitleDto);
    FebsResponse happyLeaderList();
    FebsResponse checkOrder(ApiHappyOrderLeaderDto dto);
    FebsResponse insureOrder(ApiHappyOrderLeaderInsureDto dto);
}
src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallTeamLeaderServiceImpl.java
@@ -16,6 +16,7 @@
import cc.mrbird.febs.mall.service.IApiMallTeamLeaderService;
import cc.mrbird.febs.mall.service.IMallMoneyFlowService;
import cc.mrbird.febs.mall.vo.*;
import cc.mrbird.febs.mall.vo.activity.ApiCheckOrderVo;
import cc.mrbird.febs.pay.model.OrderStateDto;
import cc.mrbird.febs.pay.service.IXcxPayService;
import cc.mrbird.febs.pay.util.WeixinServiceUtil;
@@ -697,4 +698,99 @@
        return new FebsResponse().success().data(apiHappyLeaderInfoVos);
    }
    @Override
    public FebsResponse checkOrder(ApiHappyOrderLeaderDto dto) {
        // 获取当前登录用户的ID
        Long memberId = LoginUserUtil.getLoginUser().getId();
        MallMember mallMember = mallMemberMapper.selectById(memberId);
        if(StateUpDownEnum.UP.getCode() != mallMember.getCheckLeader()){
            throw new FebsException("您不是订单核销员!");
        }
        String takeCode = dto.getTakeCode();
        MallOrderInfo mallOrderInfo = mallOrderInfoMapper.selectOne(
                new LambdaQueryWrapper<MallOrderInfo>()
                        .eq(MallOrderInfo::getTakeCode, takeCode)
                        .last("limit 1")
        );
        if(mallOrderInfo == null){
            throw new FebsException("自提码不存在!");
        }
        MallTeamLeader mallTeamLeader = mallTeamLeaderMapper.selectLeaderByUniqueCode(mallOrderInfo.getTakeUniqueCode());
        if(mallTeamLeader==null){
            throw new FebsException("自提点不存在!");
        }
        ArrayList<ApiHappyOrderLeaderVo> apiHappyOrderLeaderVos = new ArrayList<>();
        List<MallOrderItem> mallOrderItems = mallOrderItemMapper.selectList(
                new LambdaQueryWrapper<MallOrderItem>()
                        .eq(MallOrderItem::getOrderId, mallOrderInfo.getId())
                        .eq(MallOrderItem::getLeaderState, StateUpDownEnum.DOWN.getCode())
                );
        if(CollUtil.isNotEmpty(mallOrderItems)){
            for(MallOrderItem item : mallOrderItems){
                ApiHappyOrderLeaderVo apiHappyOrderLeaderVo = new ApiHappyOrderLeaderVo();
                apiHappyOrderLeaderVo.setAddressArea(mallTeamLeader.getAddressArea());
                apiHappyOrderLeaderVo.setName(mallTeamLeader.getName());
                apiHappyOrderLeaderVo.setPhone(mallTeamLeader.getPhone());
                apiHappyOrderLeaderVo.setOrderId(mallOrderInfo.getId());
                apiHappyOrderLeaderVo.setOrderState(mallOrderInfo.getStatus());
                apiHappyOrderLeaderVo.setTakeCode(takeCode);
                apiHappyOrderLeaderVo.setGoodsName(item.getGoodsName());
                apiHappyOrderLeaderVo.setGoodsSku(item.getSkuName());
                apiHappyOrderLeaderVo.setGoodsCnt(item.getCnt());
                apiHappyOrderLeaderVo.setGoodsPrice(item.getPrice());
                apiHappyOrderLeaderVo.setLeaderState(item.getLeaderState());
                apiHappyOrderLeaderVos.add(apiHappyOrderLeaderVo);
            }
        }
        return new FebsResponse().success().data(apiHappyOrderLeaderVos);
    }
    @Override
    public FebsResponse insureOrder(ApiHappyOrderLeaderInsureDto dto) {
        // 获取当前登录用户的ID
        Long memberId = LoginUserUtil.getLoginUser().getId();
        MallMember mallMember = mallMemberMapper.selectById(memberId);
        if(StateUpDownEnum.UP.getCode() != mallMember.getCheckLeader()){
            throw new FebsException("您不是订单核销员!");
        }
        MallOrderInfo mallOrderInfo = mallOrderInfoMapper.selectById(dto.getOrderId());
        if(mallOrderInfo == null){
            throw new FebsException("订单不存在!");
        }
        MallTeamLeader mallTeamLeader = mallTeamLeaderMapper.selectLeaderByUniqueCode(mallOrderInfo.getTakeUniqueCode());
        if(mallTeamLeader==null){
            throw new FebsException("自提点不存在!");
        }
        MallOrderItem mallOrderItem = mallOrderItemMapper.selectById(dto.getItemId());
        if(mallOrderItem==null){
            throw new FebsException("订单不存在!");
        }
        if(mallOrderItem.getLeaderState()==1){
            throw new FebsException("订单已自提!");
        }
        mallOrderItem.setLeaderState(1);
        mallOrderItemMapper.updateById(mallOrderItem);
        return new FebsResponse().success().message("操作成功");
    }
}
src/main/java/cc/mrbird/febs/mall/vo/ApiHappyOrderLeaderItemVo.java
New file
@@ -0,0 +1,24 @@
package cc.mrbird.febs.mall.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
@Data
@ApiModel(value = "ApiHappyOrderLeaderItemVo", description = "信息返回类")
public class ApiHappyOrderLeaderItemVo {
    @ApiModelProperty(value = "商品名称")
    private String goodsName;
    @ApiModelProperty(value = "商品规格")
    private String goodsSku;
    @ApiModelProperty(value = "商品数量")
    private Integer goodsCnt;
    @ApiModelProperty(value = "商品单价")
    private BigDecimal goodsPrice;
}
src/main/java/cc/mrbird/febs/mall/vo/ApiHappyOrderLeaderVo.java
New file
@@ -0,0 +1,54 @@
package cc.mrbird.febs.mall.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
@Data
@ApiModel(value = "ApiHappyOrderLeaderVo", description = "信息返回类")
public class ApiHappyOrderLeaderVo {
    @ApiModelProperty(value = "自提点名称")
    private String addressArea;
    @ApiModelProperty(value = "自提点联系人")
    private String name;
    @ApiModelProperty(value = "自提点联系电话")
    private String phone;
    @ApiModelProperty(value = "提货码", example = "1")
    private String takeCode;
    @ApiModelProperty(value = "订单ID")
    private Long orderId;
    @ApiModelProperty(value = "订单状态 1-待支付2-待发货3-待收货4-已完成")
    private Integer orderState;
//    @ApiModelProperty(value = "订单详情")
//    private List<ApiHappyOrderLeaderItemVo> items;
    @ApiModelProperty(value = "订单子表ID")
    private String itemId;
    @ApiModelProperty(value = "商品名称")
    private String goodsName;
    @ApiModelProperty(value = "商品规格")
    private String goodsSku;
    @ApiModelProperty(value = "商品数量")
    private Integer goodsCnt;
    @ApiModelProperty(value = "商品单价")
    private BigDecimal goodsPrice;
    @ApiModelProperty(value = "商品状态 0-待自提 1-已自提")
    private Integer leaderState;
}
src/main/java/cc/mrbird/febs/mall/vo/MallMemberVo.java
@@ -119,6 +119,9 @@
    @ApiModelProperty(value = "是否是核销员 0-否 1-是")
    private Integer checkOrder;
    @ApiModelProperty(value = "是否是自提核销员 0-否 1-是")
    private Integer checkLeader;
    @ApiModelProperty(value = "是否领取新人礼 0-否 1-是")
    private Integer newGift;
}