sgj
2026-03-05 8e4be3c0e5577fddae3ae30b0ca00f8b7a6c490e
fzzy-igdss-core/src/main/java/com/fzzy/work/service/WorkOrderService.java
@@ -3,9 +3,9 @@
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.fzzy.igds.constant.Constant;
import com.fzzy.igds.constant.InoutConstant;
import com.fzzy.igds.mapper.InoutNoticeInMapper;
import com.fzzy.igds.mapper.InoutNoticeOutMapper;
import com.fzzy.igds.service.InoutNoticeService;
import com.fzzy.igds.utils.ContextUtil;
import com.fzzy.igds.utils.DateUtil;
import com.fzzy.work.data.WorkNode;
@@ -18,11 +18,10 @@
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.utils.StringUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.*;
import javax.annotation.Resource;
@@ -31,14 +30,13 @@
 * @Author: Andy.jia
 * @Date: 2025/12/19
 */
@Slf4j
@Service
public class WorkOrderService {
    @Resource
    private WorkOrderMapper workOrderMapper;
    @Resource
    private InoutNoticeInMapper noticeInMapper;
    @Resource
    private InoutNoticeOutMapper noticeOutMapper;
    private InoutNoticeService noticeService;
    public void addData(WorkOrder data) {
@@ -60,43 +58,12 @@
        //获取当前登录人
        SysUser user = ContextUtil.getLoginUser();
        QueryWrapper<WorkOrder> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("company_id", user.getCompanyId());
        String scope = param.getScope();
        if (StringUtils.isEmpty(scope)) scope = WorkOrderParam.SCOPE_SELF;
        //监管用户-查看所有库区和待办
        if (Constant.USER_TYPE_10.equals(user.getUserType())) {
            if (WorkOrderParam.SCOPE_SELF.equals(scope)) {
                queryWrapper.eq("node", WorkNode.NODE2.getCode());
            }
        }
        //库区用户,如果是公司用户可以查看公司下属所有库区,如果为当前库区只查询当前库区
        if (Constant.USER_TYPE_30.equals(user.getUserType())) {
            if (ContextUtil.isDepotUser(user.getDeptId() + "")) {
                queryWrapper.eq("dept_id", user.getDeptId() + "");
            } else {
                queryWrapper.likeRight("dept_id", user.getDeptId() + "");
            }
            if (WorkOrderParam.SCOPE_SELF.equals(scope)) {
                queryWrapper.eq("node", WorkNode.NODE1.getCode());
            }
        }
        //银行用户,根据合同查询银行下所有库区
        if (Constant.USER_TYPE_20.equals(user.getUserType())) {
            //如果没有配置银行,设置一个不存在的银行号
            if (StringUtils.isBlank(user.getUserData())) user.setUserData("9");
            queryWrapper.eq("bank_id", user.getUserData());
            if (WorkOrderParam.SCOPE_SELF.equals(scope)) {
                queryWrapper.eq("node", WorkNode.NODE3.getCode());
            }
        }
        //更新查询条件
        this.updateQueryWrapper(queryWrapper, user, scope);
        queryWrapper.eq(null != param.getDeptId(), "dept_id", param.getDeptId());
        queryWrapper.like(null != param.getName(), "title", param.getName());
@@ -109,6 +76,7 @@
            queryWrapper.lt("create_time", DateUtil.getCurZero(param.getEnd()));
        }
        queryWrapper.orderByDesc("id");
        workOrderMapper.selectPage(page, queryWrapper);
    }
@@ -136,23 +104,140 @@
        return list;
    }
    /**
     * 获取用户待处理工单数
     * @param status
     * @param userId
     * @return
     */
    public Integer getNumByUser(String status, String userId) {
    public List<SysDictData> triggerNode() {
        List<SysDictData> list = new ArrayList<SysDictData>();
        for (WorkNode w : WorkNode.values()) {
            list.add(new SysDictData(w.getMsg(), w.getCode()));
        }
        return list;
    }
    public WorkOrder selectByBusinessId(String businessId) {
        QueryWrapper<WorkOrder> queryWrapper = new QueryWrapper<>();
        if (StringUtils.isBlank(userId) || StringUtils.isBlank(status)) {
            return 0;
        }
        queryWrapper.eq("business_id", businessId);
        queryWrapper.eq("assignee_id", userId);
        queryWrapper.eq("status", status);
        List<WorkOrder> list = workOrderMapper.selectList(queryWrapper);
        if (null == list || list.isEmpty()) return null;
        return list.get(0);
    }
    /**
     * 获取当前用户待办工单,根据用户类型或者没有指定处理人或者指定任务处理人的工单数量
     * @param user
     * @return
     */
    public Integer getTodoNumByUser(SysUser user) {
        QueryWrapper<WorkOrder> queryWrapper = new QueryWrapper<>();
        this.updateQueryWrapper(queryWrapper, user, WorkOrderParam.SCOPE_SELF);
        return workOrderMapper.selectCount(queryWrapper);
    }
    /**
     * 获取页面汇总统计,我的待办工单;我的指派工单;今日待办工单;总待办工单
     *
     * 查询所有的待办工单,然后进行汇总统计
     * @return
     */
    public Map<String, String> pageSummary() {
        Map<String, String> result = new HashMap<>();
        //我的待办工单
        result.put("selfTodo", "0");
        //我的指派工单
        result.put("assignTodo", "0");
        //今日待办工单
        result.put("todayTodo", "0");
        //总待办工单数量
        result.put("sumTodo", "0");
        //获取总待办工单
        SysUser user = ContextUtil.getLoginUser();
        QueryWrapper<WorkOrder> queryWrapper = new QueryWrapper<>();
        String scope = WorkOrderParam.SCOPE_SELF;
        this.updateQueryWrapper(queryWrapper, user, scope);
        //获取所有的工单
        List<WorkOrder> list = workOrderMapper.selectList(queryWrapper);
        if (null == list || list.isEmpty()) {
            log.info("---------工单汇总结果---------{}", result);
            return result;
        }
        int selfTodo = 0, assignTodo = 0, todayTodo = 0, sumTodo = list.size();
        for (WorkOrder work : list) {
            if (null == work.getAssigneeId()) {
                selfTodo++;
            }
            if (null != work.getAssigneeId() && work.getAssigneeId().equals(user.getLoginName())) {
                if(!WorkNode.NODE_END.getCode().equals(work.getNode())){
                    selfTodo++;
                    assignTodo++;
                }
            }
            if (DateUtil.isToday(work.getCreateTime())) {
                todayTodo++;
            }
        }
        //我的待办工单
        result.put("selfTodo", selfTodo + "");
        //我的指派工单
        result.put("assignTodo", assignTodo + "");
        //今日待办工单
        result.put("todayTodo", todayTodo + "");
        //总待办工单数量
        result.put("sumTodo", sumTodo + "");
        log.info("---------工单汇总结果---------{}", result);
        return result;
    }
    private void updateQueryWrapper(QueryWrapper<WorkOrder> queryWrapper, SysUser user, String scope) {
        queryWrapper.eq("company_id", user.getCompanyId());
        //监管用户-查看所有库区和待办
        if (Constant.USER_TYPE_10.equals(user.getUserType())) {
            if (WorkOrderParam.SCOPE_SELF.equals(scope)) {
                queryWrapper.eq("node", WorkNode.NODE2.getCode());
            }
        }
        //库区用户,如果是公司用户可以查看公司下属所有库区,如果为当前库区只查询当前库区
        if (Constant.USER_TYPE_30.equals(user.getUserType())) {
            if (WorkOrderParam.SCOPE_SELF.equals(scope)) {
                queryWrapper.eq("node", WorkNode.NODE1.getCode());
            }
            if (ContextUtil.isDepotUser(user.getDeptId() + "")) {
                queryWrapper.eq("dept_id", user.getDeptId() + "");
            } else {
                queryWrapper.likeRight("dept_id", user.getDeptId() + "");
            }
        }
        //银行用户,根据合同查询银行下所有库区
        if (Constant.USER_TYPE_20.equals(user.getUserType())) {
            //如果没有配置银行,设置一个不存在的银行号
            if (StringUtils.isBlank(user.getUserData())) user.setUserData("9");
                queryWrapper.eq("bank_id", user.getUserData());
            if (WorkOrderParam.SCOPE_SELF.equals(scope)) {
                queryWrapper.eq("node", WorkNode.NODE3.getCode());
            }
        }
        //如果是个人工单,处理人为空或者为当前人
        if (WorkOrderParam.SCOPE_SELF.equals(scope)) {
            queryWrapper.isNull("assignee_id").or().eq("assignee_id", user.getLoginName());
        }
    }
@@ -167,14 +252,19 @@
        //更新入库通知单状态
        if (work.getBizType().equals(WorkBizType.TYPE_10.getCode())) {
            noticeInMapper.auditComplete(work.getBusinessId(), work.getStatus());
            noticeService.updateNoticeInStatus(work.getBusinessId(), work.getStatus());
        }
        //更新入库通知单状态
        //更新出库通知单状态
        if (work.getBizType().equals(WorkBizType.TYPE_20.getCode())) {
            noticeOutMapper.auditComplete(work.getBusinessId(), work.getStatus());
            noticeService.updateNoticeOutStatus(work.getBusinessId(), work.getStatus());
        }
    }
    public void updateData(WorkOrder work) {
        workOrderMapper.updateById(work);
    }
}