liu
2026-10-23 5421b8af862890dcf187c2ad5ece55423959ba85
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
package cn.iocoder.yudao.module.mes.dal.mysql.wm.stocktaking.task;
 
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.task.vo.MesWmStockTakingTaskPageReqVO;
import cn.iocoder.yudao.module.mes.dal.dataobject.wm.stocktaking.task.MesWmStockTakingTaskDO;
import cn.iocoder.yudao.module.mes.enums.wm.MesWmStockTakingTaskStatusEnum;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import org.apache.ibatis.annotations.Mapper;
 
import java.time.LocalDateTime;
 
/**
 * MES 盘点任务 Mapper
 *
 * @author 超级管理员
 */
@Mapper
public interface MesWmStockTakingTaskMapper extends BaseMapperX<MesWmStockTakingTaskDO> {
 
    default MesWmStockTakingTaskDO selectByCode(String code) {
        return selectOne(MesWmStockTakingTaskDO::getCode, code);
    }
 
    /**
     * 开始盘点:置为盘点中,并清空上一轮审核结果
     *
     * 用 UpdateWrapper 而非 updateById:MyBatis-Plus 默认更新策略忽略 null,
     * 直接 updateById 无法把审核人 / 审核时间 / 审核意见真正清空。
     *
     * @param id     盘点任务编号
     * @param status 目标状态(盘点中)
     * @return 影响行数
     */
    default int submitAndResetAuditInfo(Long id, Integer status) {
        return update(null, new LambdaUpdateWrapper<MesWmStockTakingTaskDO>()
                .eq(MesWmStockTakingTaskDO::getId, id)
                .set(MesWmStockTakingTaskDO::getStatus, status)
                .set(MesWmStockTakingTaskDO::getReviewerId, null)
                .set(MesWmStockTakingTaskDO::getReviewerName, null)
                .set(MesWmStockTakingTaskDO::getReviewTime, null)
                .set(MesWmStockTakingTaskDO::getReviewRemark, null));
    }
 
    /**
     * 提交结果审批:写入提交时间并清空上一轮的审核人与审核意见
     *
     * 任务状态保持「盘点中」不变(该状态同时承载盘点中与结果审批中两个阶段),
     * 以 reviewTime 非空且 reviewerId 为空表示「结果审批已提交、等待审核」。
     * 不修改 status 字段,故用 UpdateWrapper 精确写入。
     *
     * @param id 盘点任务编号
     * @return 影响行数
     */
    default int markResultApprovalSubmitted(Long id) {
        return update(null, new LambdaUpdateWrapper<MesWmStockTakingTaskDO>()
                .eq(MesWmStockTakingTaskDO::getId, id)
                .set(MesWmStockTakingTaskDO::getReviewTime, LocalDateTime.now())
                .set(MesWmStockTakingTaskDO::getReviewerId, null)
                .set(MesWmStockTakingTaskDO::getReviewerName, null)
                .set(MesWmStockTakingTaskDO::getReviewRemark, null));
    }
 
    /**
     * 审核结果:写入审核结果、审核人与审核意见
     *
     * @param id           盘点任务编号
     * @param status       目标状态(已完成 / 盘点中)
     * @param reviewerId   审核人编号
     * @param reviewerName 审核人姓名
     * @param reviewRemark 审核意见
     * @return 影响行数
     */
    default int auditStockTakingTask(Long id, Integer status, Long reviewerId,
                                     String reviewerName, String reviewRemark) {
        return update(null, new LambdaUpdateWrapper<MesWmStockTakingTaskDO>()
                .eq(MesWmStockTakingTaskDO::getId, id)
                .set(MesWmStockTakingTaskDO::getStatus, status)
                .set(MesWmStockTakingTaskDO::getReviewerId, reviewerId)
                .set(MesWmStockTakingTaskDO::getReviewerName, reviewerName)
                .set(MesWmStockTakingTaskDO::getReviewTime, LocalDateTime.now())
                .set(MesWmStockTakingTaskDO::getReviewRemark, reviewRemark));
    }
 
    /**
     * BPM 审批通过回写:仅当任务处于「盘点中 + 结果审批待审核」时更新为已完成
     *
     * 待审核的判断条件与服务层 isResultApprovalPending 一致:reviewTime 非空且 reviewerId 为空,
     * 避免重复 / 过期事件覆盖人工审核结果。
     *
     * @param id           盘点任务编号
     * @param status       目标状态(已完成)
     * @param reviewRemark 审批意见
     * @return 影响行数
     */
    default int updateAuditStatusByBpm(Long id, Integer status, String reviewRemark) {
        return update(null, new LambdaUpdateWrapper<MesWmStockTakingTaskDO>()
                .eq(MesWmStockTakingTaskDO::getId, id)
                .eq(MesWmStockTakingTaskDO::getStatus, MesWmStockTakingTaskStatusEnum.APPROVING.getStatus())
                .isNotNull(MesWmStockTakingTaskDO::getReviewTime)
                .isNull(MesWmStockTakingTaskDO::getReviewerId)
                .set(MesWmStockTakingTaskDO::getStatus, status)
                .set(MesWmStockTakingTaskDO::getReviewTime, LocalDateTime.now())
                .set(MesWmStockTakingTaskDO::getReviewRemark, reviewRemark));
    }
 
    /**
     * BPM 审批不通过 / 撤销回写:任务保持盘点中,清空提交标记以便重新提交结果审批
     *
     * 清空 reviewTime(提交标记)后 isResultApprovalPending 返回 false,
     * 允许用户修改实盘后重新提交;保留 reviewRemark 供用户查看不通过原因。
     *
     * @param id           盘点任务编号
     * @param reviewRemark 审批意见 / 取消原因
     * @return 影响行数
     */
    default int resetResultApprovalByBpm(Long id, String reviewRemark) {
        return update(null, new LambdaUpdateWrapper<MesWmStockTakingTaskDO>()
                .eq(MesWmStockTakingTaskDO::getId, id)
                .eq(MesWmStockTakingTaskDO::getStatus, MesWmStockTakingTaskStatusEnum.APPROVING.getStatus())
                .isNotNull(MesWmStockTakingTaskDO::getReviewTime)
                .isNull(MesWmStockTakingTaskDO::getReviewerId)
                .set(MesWmStockTakingTaskDO::getReviewTime, null)
                .set(MesWmStockTakingTaskDO::getReviewRemark, reviewRemark));
    }
 
    /**
     * 清空审核标记
     *
     * 用于任务取消后清除结果审批痕迹
     *
     * @param id 盘点任务编号
     */
    default void clearAuditInfo(Long id) {
        update(null, new LambdaUpdateWrapper<MesWmStockTakingTaskDO>()
                .eq(MesWmStockTakingTaskDO::getId, id)
                .set(MesWmStockTakingTaskDO::getReviewerId, null)
                .set(MesWmStockTakingTaskDO::getReviewerName, null)
                .set(MesWmStockTakingTaskDO::getReviewTime, null)
                .set(MesWmStockTakingTaskDO::getReviewRemark, null));
    }
 
    default PageResult<MesWmStockTakingTaskDO> selectPage(MesWmStockTakingTaskPageReqVO reqVO) {
        return selectPage(reqVO, new LambdaQueryWrapperX<MesWmStockTakingTaskDO>()
                .likeIfPresent(MesWmStockTakingTaskDO::getCode, reqVO.getCode())
                .likeIfPresent(MesWmStockTakingTaskDO::getName, reqVO.getName())
                .eqIfPresent(MesWmStockTakingTaskDO::getType, reqVO.getType())
                .eqIfPresent(MesWmStockTakingTaskDO::getStatus, reqVO.getStatus())
                .eqIfPresent(MesWmStockTakingTaskDO::getUserId, reqVO.getUserId())
                .eqIfPresent(MesWmStockTakingTaskDO::getPlanId, reqVO.getPlanId())
                .betweenIfPresent(MesWmStockTakingTaskDO::getTakingDate, reqVO.getTakingDate())
                .orderByDesc(MesWmStockTakingTaskDO::getId));
    }
 
}