fzzy-igdss-core/src/main/java/com/fzzy/work/service/WorkOrderService.java
@@ -2,11 +2,26 @@
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.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;
import com.fzzy.work.data.WorkStatus;
import com.fzzy.work.data.WorkBizType;
import com.fzzy.work.data.WorkOrderParam;
import com.fzzy.work.domain.WorkOrder;
import com.fzzy.work.mapper.WorkOrderMapper;
import com.ruoyi.common.core.domain.entity.SysDictData;
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.*;
import javax.annotation.Resource;
@@ -15,22 +30,241 @@
 * @Author: Andy.jia
 * @Date: 2025/12/19
 */
@Slf4j
@Service
public class WorkOrderService {
    @Resource
    private WorkOrderMapper workOrderMapper;
    @Resource
    private InoutNoticeService noticeService;
    public void pageQuery(Page<WorkOrder> page, WorkOrderParam param) {
    public void addData(WorkOrder data) {
        if (null == data.getId()) data.setId(ContextUtil.generateOrderId("GD"));
        if (null == data.getCompanyId()) data.setCompanyId(ContextUtil.getCompanyId());
        if (null == data.getCreateBy()) {
            SysUser user = ContextUtil.getLoginUser();
            data.setCreateBy(user.getUserName());
            data.setCreateById(user.getLoginName());
        }
        data.setUpdateTime(new Date());
        workOrderMapper.insert(data);
    }
    public void pageQueryByUserType(Page<WorkOrder> page, WorkOrderParam param) {
        //获取当前登录人
        SysUser user = ContextUtil.getLoginUser();
        QueryWrapper<WorkOrder> queryWrapper = new QueryWrapper<>();
        String scope = param.getScope();
        if (StringUtils.isEmpty(scope)) scope = WorkOrderParam.SCOPE_SELF;
        //更新查询条件
        this.updateQueryWrapper(queryWrapper, user, scope);
        queryWrapper.eq(null != param.getDeptId(), "dept_id", param.getDeptId());
        queryWrapper.like(null != param.getName(), "title", param.getName());
        queryWrapper.eq(null != param.getStatus(), "status", param.getStatus());
        if (null != param.getStart()) {
            queryWrapper.gt("create_time", DateUtil.getNextZero(param.getStart()));
        }
        if (null != param.getEnd()) {
            queryWrapper.lt("create_time", DateUtil.getCurZero(param.getEnd()));
        }
        queryWrapper.orderByDesc("id");
        workOrderMapper.selectPage(page, queryWrapper);
    }
    public List<SysDictData> triggerStatus() {
        List<SysDictData> list = new ArrayList<SysDictData>();
        for (WorkStatus w : WorkStatus.values()) {
            list.add(new SysDictData(w.getMsg(), w.getCode()));
        }
        return list;
    }
    public List<SysDictData> triggerType() {
        List<SysDictData> list = new ArrayList<SysDictData>();
        for (WorkBizType w : WorkBizType.values()) {
            list.add(new SysDictData(w.getMsg(), w.getCode()));
        }
        return list;
    }
    public List<SysDictData> triggerBizType() {
        List<SysDictData> list = new ArrayList<SysDictData>();
        for (WorkBizType w : WorkBizType.values()) {
            list.add(new SysDictData(w.getMsg(), w.getCode()));
        }
        return list;
    }
    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<>();
        queryWrapper.eq("business_id", businessId);
        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<>();
        if (null == param) {
            param = new WorkOrderParam();
        }
        param.setCompanyId(ContextUtil.getCompanyId());
        this.updateQueryWrapper(queryWrapper, user, WorkOrderParam.SCOPE_SELF);
        queryWrapper.eq("company_id", param.getCompanyId());
        workOrderMapper.selectPage(page, queryWrapper);
        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());
        }
    }
    public WorkOrder selectById(String orderId) {
        if (null == orderId) return null;
        return workOrderMapper.selectById(orderId);
    }
    public void complete(WorkOrder work) {
        //更新工单
        workOrderMapper.updateById(work);
        //更新入库通知单状态
        if (work.getBizType().equals(WorkBizType.TYPE_10.getCode())) {
            noticeService.updateNoticeInStatus(work.getBusinessId(), work.getStatus());
        }
        //更新出库通知单状态
        if (work.getBizType().equals(WorkBizType.TYPE_20.getCode())) {
            noticeService.updateNoticeOutStatus(work.getBusinessId(), work.getStatus());
        }
    }
    public void updateData(WorkOrder work) {
        workOrderMapper.updateById(work);
    }
}