package org.dromara.eims.service.impl; import cn.hutool.core.convert.Convert; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import lombok.RequiredArgsConstructor; 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.MapstructUtils; import org.dromara.common.core.utils.SpringUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.eims.domain.EimsRepairRecord; import org.dromara.eims.domain.EimsRepairReq; import org.dromara.eims.domain.EimsRepairRes; import org.dromara.eims.domain.bo.EimsRepairResBo; import org.dromara.eims.domain.vo.EimsEquVo; import org.dromara.eims.domain.vo.EimsFixtureVo; import org.dromara.eims.domain.vo.EimsRepairReqVo; import org.dromara.eims.domain.vo.EimsRepairResVo; import org.dromara.eims.mapper.*; import org.dromara.eims.service.IEimsRepairResService; import org.dromara.eims.service.IMobileService; 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.springframework.transaction.annotation.Transactional; import java.util.*; @RequiredArgsConstructor @Service public class MobileServiceImpl implements IMobileService { private final EimsRepairResMapper repairResMapper; private final EimsRepairReqMapper reqMapper; private final EimsRepairRecordMapper recordMapper; @Transactional(rollbackFor = Exception.class) @Override public synchronized EimsRepairResVo receiveOrderRepair(EimsRepairResBo bo) { /** * TODO 注意接口调整后需调整(此操作原本为移动端依次传递数据调用接口,现为保证原子性一次性调用多个接口) */ //1.新增维修工单 EimsRepairRes add = MapstructUtils.convert(bo, EimsRepairRes.class); boolean flag = repairResMapper.insert(add) > 0; if (flag) { bo.setId(add.getId()); // 新增维修工单的时候更新报修单数据 EimsRepairReqVo reqVo = reqMapper.selectVoById(bo.getReqId()); reqVo.setRepairId(add.getId()); reqVo.setStatus(DictConstants.REPAIR_REQ_STATUS_DETAIL.YIJIEDAN); EimsRepairReq req = MapstructUtils.convert(reqVo, EimsRepairReq.class); reqMapper.updateById(req); //将新增报修单时维修记录的维修工单id更新 LambdaQueryWrapper 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); } //2.更新维修工单 LoginUser loginUser = LoginHelper.getLoginUser(); bo.setStartTime(new Date()); bo.setStatus("2"); EimsRepairRes update = MapstructUtils.convert(bo, EimsRepairRes.class); EimsRepairResVo resVo = repairResMapper.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)) { //2.1.设置开始维修时间和状态 TODO //2.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); //2.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); } repairResMapper.updateById(update); return repairResMapper.selectVoById(update.getId()); } }