| | |
| | | import cn.hutool.core.convert.Convert; |
| | | import cn.hutool.core.util.ObjectUtil; |
| | | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
| | | import lombok.SneakyThrows; |
| | | import org.dromara.common.core.constant.DictConstants; |
| | | import org.dromara.common.core.domain.model.LoginUser; |
| | | import org.dromara.common.core.service.RepairResService; |
| | | import org.dromara.common.core.utils.DateUtils; |
| | | import org.dromara.common.core.utils.MapstructUtils; |
| | | import org.dromara.common.core.utils.SpringUtils; |
| | | import org.dromara.common.core.utils.StringUtils; |
| | |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
| | | import lombok.RequiredArgsConstructor; |
| | | import org.dromara.eims.domain.EimsEqu; |
| | | import org.dromara.eims.domain.EimsFixture; |
| | | import org.dromara.eims.domain.EimsRepairReq; |
| | | import org.dromara.eims.domain.vo.EimsRepairReqVo; |
| | | import org.dromara.eims.mapper.EimsRepairReqMapper; |
| | | import org.dromara.common.satoken.utils.LoginHelper; |
| | | import org.dromara.eims.domain.*; |
| | | import org.dromara.eims.domain.bo.EimsSpareInoutBo; |
| | | import org.dromara.eims.domain.vo.*; |
| | | import org.dromara.eims.mapper.*; |
| | | import org.dromara.eims.service.IEimsSpareInoutService; |
| | | import org.dromara.eims.utils.DataFilterUtil; |
| | | import org.dromara.system.domain.SysDept; |
| | | import org.dromara.system.domain.vo.SysDeptVo; |
| | | import org.dromara.system.mapper.SysDeptMapper; |
| | | import org.springframework.stereotype.Service; |
| | | import org.dromara.eims.domain.bo.EimsRepairResBo; |
| | | import org.dromara.eims.domain.vo.EimsRepairResVo; |
| | | import org.dromara.eims.domain.EimsRepairRes; |
| | | import org.dromara.eims.mapper.EimsRepairResMapper; |
| | | import org.dromara.eims.service.IEimsRepairResService; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | |
| | | import java.util.ArrayList; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Collection; |
| | | import java.util.*; |
| | | |
| | | /** |
| | | * 维修工单Service业务层处理 |
| | |
| | | private final EimsRepairResMapper baseMapper; |
| | | private final EimsRepairReqMapper reqMapper; |
| | | private final SysDeptMapper deptMapper; |
| | | private final EimsRepairRecordMapper recordMapper; |
| | | private final EimsEquMapper equMapper; |
| | | private final EimsFixtureMapper fixtureMapper; |
| | | private final IEimsSpareInoutService spareInoutService; |
| | | |
| | | /** |
| | | * 查询维修工单 |
| | |
| | | */ |
| | | @Override |
| | | public EimsRepairResVo queryById(Long id) { |
| | | return baseMapper.selectVoById(id); |
| | | EimsRepairResVo resVo = baseMapper.selectVoById(id); |
| | | Long reqId = resVo.getReqId(); |
| | | if(reqId!=null){ |
| | | EimsRepairReqVo reqVo = reqMapper.selectVoById(reqId); |
| | | resVo.setReqType(reqVo.getReqType()); |
| | | resVo.setReqCode(reqVo.getCode()); |
| | | resVo.setReqDesc(reqVo.getReqDesc()); |
| | | |
| | | if(reqVo.getEquId()!=null){ |
| | | EimsEquVo equVo = equMapper.selectVoById(reqVo.getEquId()); |
| | | if(equVo!=null){ |
| | | resVo.setAssetNo(equVo.getAssetNo()); |
| | | resVo.setEquName(equVo.getEquName()); |
| | | } |
| | | |
| | | } |
| | | if(reqVo.getFixtureId()!=null){ |
| | | EimsFixtureVo fixtureVo = fixtureMapper.selectVoById(reqVo.getFixtureId()); |
| | | if(fixtureVo!=null){ |
| | | resVo.setFixtureName(fixtureVo.getFixtureName()); |
| | | resVo.setAssetNo(fixtureVo.getAssetNo()); |
| | | } |
| | | } |
| | | |
| | | resVo.setSpareParts(querySpareParts(resVo.getResCode())); |
| | | |
| | | } |
| | | return resVo; |
| | | } |
| | | |
| | | |
| | | public List<EimsSpareVo> querySpareParts(String code) { |
| | | // 查询关联的备件,关系如下:备件出入库单的associatedOrder 关联传入的code,备件出入库明细通过出入库单的id关联,备件名称通过出入库明细中的spareId关联 |
| | | |
| | | EimsSpareInoutBo bo = new EimsSpareInoutBo(); |
| | | bo.setAssociatedOrder(code); |
| | | List<EimsSpareInoutVo> list = spareInoutService.queryList(bo); |
| | | if (!list.isEmpty()) { |
| | | // 查询备件明细和名称 |
| | | EimsSpareInoutVo eimsSpareInoutVo = spareInoutService.queryById(list.get(0).getId()); |
| | | return eimsSpareInoutVo.getSpareList(); |
| | | } |
| | | return List.of(); |
| | | } |
| | | |
| | | /** |
| | |
| | | EimsRepairRes::getStartTime, params.get("beginStartTime"), params.get("endStartTime")); |
| | | lqw.between(params.get("beginEndTime") != null && params.get("endEndTime") != null, |
| | | EimsRepairRes::getEndTime, params.get("beginEndTime"), params.get("endEndTime")); |
| | | // 按创建时间倒序 |
| | | lqw.orderByDesc(EimsRepairRes::getCreateTime); |
| | | return lqw; |
| | | } |
| | | |
| | |
| | | */ |
| | | @Transactional(rollbackFor = Exception.class) |
| | | @Override |
| | | public Boolean insertByBo(EimsRepairResBo bo) { |
| | | public synchronized Boolean insertByBo(EimsRepairResBo bo) { |
| | | EimsRepairRes add = MapstructUtils.convert(bo, EimsRepairRes.class); |
| | | validEntityBeforeSave(add); |
| | | boolean flag = baseMapper.insert(add) > 0; |
| | |
| | | // 新增维修工单的时候更新报修单数据 |
| | | EimsRepairReqVo reqVo = reqMapper.selectVoById(bo.getReqId()); |
| | | reqVo.setRepairId(add.getId()); |
| | | reqVo.setStatus(DictConstants.REPAIR_REQ_STATUS_DETAIL.WEIXIU); |
| | | reqVo.setStatus(DictConstants.REPAIR_REQ_STATUS_DETAIL.YIJIEDAN); |
| | | EimsRepairReq req = MapstructUtils.convert(reqVo, EimsRepairReq.class); |
| | | reqMapper.updateById(req); |
| | | |
| | | //将新增报修单时维修记录的维修工单id更新 |
| | | LambdaQueryWrapper<EimsRepairRecord> queryWrapper = new LambdaQueryWrapper<>(); |
| | | queryWrapper.eq(EimsRepairRecord::getReqId, add.getReqId()); |
| | | EimsRepairRecord one = recordMapper.selectOne(queryWrapper); |
| | | if(one!=null){ |
| | | one.setResId(add.getId()); |
| | | recordMapper.updateById(one); |
| | | } |
| | | |
| | | |
| | | //生成维修记录 |
| | | EimsRepairRecord record = new EimsRepairRecord(); |
| | | record.setReqId(add.getReqId()); |
| | | record.setResId(add.getId()); |
| | | record.setHandleTime(new Date()); |
| | | //接单状态 |
| | | record.setOpera(DictConstants.REPAIR_RECORD_HANDLE_DETAIL.YIJIEDAN); |
| | | record.setOperaUser(add.getCreateBy()); |
| | | record.setOperaResult("生成维修工单"); |
| | | //新增时生成记录 |
| | | recordMapper.insert(record); |
| | | |
| | | |
| | | } |
| | | return flag; |
| | | } |
| | | |
| | | @SneakyThrows |
| | | @Transactional(rollbackFor = Exception.class) |
| | | @Override |
| | | public Boolean insertBatchByBo(EimsRepairResBo bo){ |
| | | String batchReqIds = bo.getBatchReqIds(); |
| | | boolean result = StringUtils.isNotEmpty(batchReqIds); |
| | | for (String reqId : batchReqIds.split(",")) { |
| | | EimsRepairReqVo reqVo = reqMapper.selectVoById(reqId); |
| | | EimsRepairResBo insert = new EimsRepairResBo(); |
| | | insert.setReqId(reqVo.getId()); |
| | | insert.setReqUser(reqVo.getReqUser()); |
| | | insert.setReqDept(reqVo.getReqDept()); |
| | | insert.setResCode(reqVo.getCode().replace("BXD","WXD")); |
| | | insert.setResUser(bo.getResUser()); |
| | | insert.setResDept(bo.getResDept()); |
| | | insert.setStatus(DictConstants.REPAIR_RES_STATUS_DETAIL.YIJIEDAN); |
| | | Boolean b = insertByBo(insert); |
| | | if(!b)throw new Exception(""); |
| | | } |
| | | return result; |
| | | } |
| | | |
| | | /** |
| | |
| | | @Transactional(rollbackFor = Exception.class) |
| | | @Override |
| | | public Boolean updateByBo(EimsRepairResBo bo) { |
| | | LoginUser loginUser = LoginHelper.getLoginUser(); |
| | | EimsRepairRes update = MapstructUtils.convert(bo, EimsRepairRes.class); |
| | | |
| | | EimsRepairResVo resVo = baseMapper.selectVoById(bo.getId()); |
| | | String status = resVo.getStatus(); |
| | | //首次更新需要同步更新报修单状态 |
| | | //维修工单开始维修,同步更新报修单 以及 维修记录 |
| | | if (bo.getStatus().equals(DictConstants.REPAIR_RES_STATUS_DETAIL.WEIXIU) && |
| | | status.equals(DictConstants.REPAIR_RES_STATUS_DETAIL.YIJIEDAN)) { |
| | | //1.设置开始维修时间 |
| | | |
| | | //2.更新报修单为维修状态 |
| | | EimsRepairReqVo reqVo = reqMapper.selectVoById(bo.getReqId()); |
| | | reqVo.setStatus(DictConstants.REPAIR_REQ_STATUS_DETAIL.WEIXIU); |
| | | EimsRepairReq req = MapstructUtils.convert(reqVo, EimsRepairReq.class); |
| | | reqMapper.updateById(req); |
| | | |
| | | //3.生成维修记录 |
| | | EimsRepairRecord record = new EimsRepairRecord(); |
| | | record.setResId(bo.getId()); |
| | | record.setReqId(bo.getReqId()); |
| | | record.setHandleTime(new Date()); |
| | | record.setOpera(DictConstants.REPAIR_RECORD_HANDLE_DETAIL.WEIXIU); |
| | | assert loginUser != null; |
| | | record.setOperaUser(loginUser.getUserId()); |
| | | record.setOperaResult("开始维修"); |
| | | recordMapper.insert(record); |
| | | } |
| | | |
| | | |
| | | //维修工单完成,同步更新报修单 以及 维修记录 |
| | | if (bo.getStatus().equals(DictConstants.REPAIR_RES_STATUS_DETAIL.WANCHENG) && |
| | | status.equals(DictConstants.REPAIR_RES_STATUS_DETAIL.WEIXIU)) { |
| | | //1.设置结束维修时间 |
| | | |
| | | //2.更新报修单为完成状态 |
| | | EimsRepairReqVo reqVo = reqMapper.selectVoById(bo.getReqId()); |
| | | reqVo.setStatus(DictConstants.REPAIR_REQ_STATUS_DETAIL.WANCHENG); |
| | | EimsRepairReq req = MapstructUtils.convert(reqVo, EimsRepairReq.class); |
| | | reqMapper.updateById(req); |
| | | |
| | | //3.生成维修记录 |
| | | EimsRepairRecord record = new EimsRepairRecord(); |
| | | record.setResId(bo.getId()); |
| | | record.setReqId(bo.getReqId()); |
| | | record.setHandleTime(new Date()); |
| | | record.setOpera(DictConstants.REPAIR_RECORD_HANDLE_DETAIL.WANCHENG); |
| | | assert loginUser != null; |
| | | record.setOperaUser(loginUser.getUserId()); |
| | | record.setOperaResult("完成维修工单"); |
| | | recordMapper.insert(record); |
| | | } |
| | | validEntityBeforeSave(update); |
| | | // 判断备件列表是否为空,不为空则新增一个备件出库单,同时增加出库明细 |
| | | if (bo.getSpareParts() != null && bo.getSpareParts().size() > 0) { |
| | | EimsSpareInoutBo spareInoutBo = new EimsSpareInoutBo(); |
| | | // 根据日期生成单号,格式为CK+日期+流水号 |
| | | spareInoutBo.setOrderCode("CK"+ DateUtils.dateTimeNow("yyyyMMddHHmmss")); |
| | | spareInoutBo.setOrderTime(new Date()); |
| | | spareInoutBo.setType(DictConstants.SPARE_INOUT_TYPE_DETAIL.CK); |
| | | spareInoutBo.setPartnerName(loginUser.getNickname()); |
| | | spareInoutBo.setSpareList(bo.getSpareParts()); |
| | | spareInoutBo.setChargeUser(loginUser.getUserId()); |
| | | spareInoutBo.setChargeDept(loginUser.getDeptId()); |
| | | spareInoutBo.setAssociatedOrder(bo.getResCode()); |
| | | // 保存进数据库 |
| | | Boolean b = spareInoutService.insertByBo(spareInoutBo); |
| | | |
| | | |
| | | } |
| | | return baseMapper.updateById(update) > 0; |
| | | } |
| | | |
| | |
| | | |
| | | @Override |
| | | public TableDataInfo<EimsRepairResVo> queryPageListCustom(EimsRepairResBo bo, PageQuery pageQuery) { |
| | | DataFilterUtil.getInstance().filterRepairRes(bo); |
| | | Page<EimsRepairResVo> page = baseMapper.selectRepairResList(pageQuery.build(), buildWrapper(bo)); |
| | | return TableDataInfo.build(page); |
| | | } |
| | | |
| | | @Override |
| | | public Integer listUnfinished(String status) { |
| | | // 根据工单状态查询总数 |
| | | if (!status.isEmpty()) { |
| | | List<String> statusList = Arrays.asList(status.split(",")); |
| | | return baseMapper.listUnfinished(statusList); |
| | | } |
| | | return 0; |
| | | } |
| | | |
| | | private QueryWrapper<EimsRepairRes> buildWrapper(EimsRepairResBo bo) { |
| | |
| | | qw.like(StringUtils.isNotBlank(bo.getResCode()), "res.res_code", bo.getResCode()); |
| | | qw.like(StringUtils.isNotBlank(bo.getReqCode()), "req.code", bo.getReqCode()); |
| | | qw.eq(bo.getResUser() != null, "res.res_user", bo.getResUser()); |
| | | qw.eq(bo.getReqType() != null, "req.req_type", bo.getReqType()); |
| | | qw.eq(bo.getReqUser() != null, "res.req_user", bo.getReqUser()); |
| | | qw.eq(bo.getAssetNo() != null, "equ.asset_no", bo.getAssetNo()); |
| | | qw.eq(bo.getEquId() != null, "req.equ_id", bo.getEquId()); |
| | | |
| | | List<Long> allDescendantIds = getAllDescendantIds(bo.getResDept()); |
| | | qw.in(bo.getResDept() != null, "res.res_dept", allDescendantIds); |
| | | qw.between(params.get("beginReqTime") != null && params.get("endReqTime") != null, |
| | | "req.req_time", params.get("beginReqTime"), params.get("endReqTime")); |
| | | |
| | | List<Long> resDeptIds = getAllDescendantIds(bo.getResDept()); |
| | | qw.in(bo.getResDept() != null, "res.res_dept", resDeptIds); |
| | | |
| | | List<Long> reqDeptIds = getAllDescendantIds(bo.getReqDept()); |
| | | qw.in(bo.getReqDept() != null, "res.req_dept", reqDeptIds); |
| | | if (params.get("searchValue") != null && StringUtils.isNotBlank(params.get("searchValue").toString())) { |
| | | qw.and( wq ->wq.like("equ.equ_name", params.get("searchValue")) |
| | | .or().like("equ.asset_no", params.get("searchValue")) |
| | | ); |
| | | } |
| | | |
| | | qw.eq(StringUtils.isNotBlank(bo.getStatus()), "res.status", bo.getStatus()); |
| | | String s = params.get("status") == null ? "" : params.get("status").toString(); |
| | | String[] status = s.split(","); |
| | | qw.in(params.get("status") != null, "res.status", status); |
| | | qw.orderByDesc("res.create_time"); |
| | | return qw; |
| | | } |