package com.fzzy.work.service; 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; /** * @Desc: * @Author: Andy.jia * @Date: 2025/12/19 */ @Slf4j @Service public class WorkOrderService { @Resource private WorkOrderMapper workOrderMapper; @Resource private InoutNoticeService noticeService; 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 page, WorkOrderParam param) { //获取当前登录人 SysUser user = ContextUtil.getLoginUser(); QueryWrapper 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 triggerStatus() { List list = new ArrayList(); for (WorkStatus w : WorkStatus.values()) { list.add(new SysDictData(w.getMsg(), w.getCode())); } return list; } public List triggerType() { List list = new ArrayList(); for (WorkBizType w : WorkBizType.values()) { list.add(new SysDictData(w.getMsg(), w.getCode())); } return list; } public List triggerBizType() { List list = new ArrayList(); for (WorkBizType w : WorkBizType.values()) { list.add(new SysDictData(w.getMsg(), w.getCode())); } return list; } public List triggerNode() { List list = new ArrayList(); for (WorkNode w : WorkNode.values()) { list.add(new SysDictData(w.getMsg(), w.getCode())); } return list; } public WorkOrder selectByBusinessId(String businessId) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("business_id", businessId); List list = workOrderMapper.selectList(queryWrapper); if (null == list || list.isEmpty()) return null; return list.get(0); } /** * 获取当前用户待办工单,根据用户类型或者没有指定处理人或者指定任务处理人的工单数量 * @param user * @return */ public Integer getTodoNumByUser(SysUser user) { QueryWrapper queryWrapper = new QueryWrapper<>(); this.updateQueryWrapper(queryWrapper, user, WorkOrderParam.SCOPE_SELF); return workOrderMapper.selectCount(queryWrapper); } /** * 获取页面汇总统计,我的待办工单;我的指派工单;今日待办工单;总待办工单 * * 查询所有的待办工单,然后进行汇总统计 * @return */ public Map pageSummary() { Map result = new HashMap<>(); //我的待办工单 result.put("selfTodo", "0"); //我的指派工单 result.put("assignTodo", "0"); //今日待办工单 result.put("todayTodo", "0"); //总待办工单数量 result.put("sumTodo", "0"); //获取总待办工单 SysUser user = ContextUtil.getLoginUser(); QueryWrapper queryWrapper = new QueryWrapper<>(); String scope = WorkOrderParam.SCOPE_SELF; this.updateQueryWrapper(queryWrapper, user, scope); //获取所有的工单 List 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 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); } }