From df64c34d92cbe8501bbbfe837bc491a47452c0b6 Mon Sep 17 00:00:00 2001 From: baoshiwei <baoshiwei@shlanbao.cn> Date: 星期一, 09 六月 2025 10:58:19 +0800 Subject: [PATCH] feat(eims): 新增保养工单批量修改功能并优化相关领域对象 --- eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsMaintOrderServiceImpl.java | 218 ++++++++++++++++++++++++++++++++++++++++++++---------- 1 files changed, 176 insertions(+), 42 deletions(-) diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsMaintOrderServiceImpl.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsMaintOrderServiceImpl.java index 988fc92..c85145d 100644 --- a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsMaintOrderServiceImpl.java +++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsMaintOrderServiceImpl.java @@ -5,7 +5,9 @@ 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.MaintOrderService; +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; @@ -15,28 +17,28 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.RequiredArgsConstructor; -import org.dromara.eims.domain.EimsMaintOrditm; -import org.dromara.eims.domain.EimsMaintStand; -import org.dromara.eims.domain.vo.EimsMaintPlanVo; -import org.dromara.eims.domain.vo.EimsMaintStandVo; -import org.dromara.eims.domain.vo.EimsRepairResVo; -import org.dromara.eims.mapper.EimsMaintOrditmMapper; -import org.dromara.eims.mapper.EimsMaintStandMapper; + +import org.dromara.common.satoken.utils.LoginHelper; +import org.dromara.eims.domain.EimsMaintPlan; +import org.dromara.eims.domain.EimsSpareInout; +import org.dromara.eims.domain.bo.EimsSpareBo; +import org.dromara.eims.domain.bo.EimsSpareInoutBo; +import org.dromara.eims.domain.bo.MaintOrderBo; +import org.dromara.eims.domain.vo.*; +import org.dromara.eims.mapper.EimsEquMapper; +import org.dromara.eims.mapper.EimsMaintPlanMapper; +import org.dromara.eims.service.IEimsSpareInoutService; 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.EimsMaintOrderBo; -import org.dromara.eims.domain.vo.EimsMaintOrderVo; import org.dromara.eims.domain.EimsMaintOrder; import org.dromara.eims.mapper.EimsMaintOrderMapper; import org.dromara.eims.service.IEimsMaintOrderService; 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涓氬姟灞傚鐞� @@ -49,10 +51,11 @@ public class EimsMaintOrderServiceImpl implements IEimsMaintOrderService, MaintOrderService { private final EimsMaintOrderMapper baseMapper; - private final EimsMaintOrditmMapper orditmMapper; + private final EimsMaintPlanMapper planMapper; private final SysDeptMapper sysDeptMapper; + private final EimsEquMapper equMapper; + private final IEimsSpareInoutService spareInoutService; - private final EimsMaintStandMapper standMapper; /** * 鏌ヨ淇濆吇宸ュ崟 * @@ -61,7 +64,13 @@ */ @Override public EimsMaintOrderVo queryById(Long id){ - return baseMapper.selectVoById(id); + EimsMaintOrderVo orderVo = baseMapper.selectVoById(id); + EimsEquVo equVo = equMapper.selectVoById(orderVo.getEquId()); + if(equVo!=null){ + orderVo.setEquName(equVo.getEquName()); + orderVo.setAssetNo(equVo.getAssetNo()); + } + return orderVo; } /** @@ -84,6 +93,12 @@ return TableDataInfo.build(page); } + @Override + public TableDataInfo<MaintOrdeGroupVo> queryPageGroupList(EimsMaintOrderBo bo, PageQuery pageQuery) { + Page<MaintOrdeGroupVo> page = baseMapper.selectMaintOrderGroupList(pageQuery.build(), buildGroupWrapper(bo)); + return TableDataInfo.build(page); + } + /** * 鏌ヨ绗﹀悎鏉′欢鐨勪繚鍏诲伐鍗曞垪琛� * @@ -100,13 +115,35 @@ QueryWrapper<EimsMaintOrder> qw = Wrappers.query(); qw.like(StringUtils.isNotBlank(bo.getMaintCode()),"mo.maint_code", bo.getMaintCode()); qw.like(bo.getEquName() != null, "equ.equ_name", bo.getEquName()); + qw.like(bo.getEquId() != null, "equ.equ_id", bo.getEquId()); qw.eq(StringUtils.isNotBlank(bo.getMaintType()), "mo.maint_type", bo.getMaintType()); qw.eq(StringUtils.isNotBlank(bo.getMaintCycleUnit()), "mo.maint_cycle_unit", bo.getMaintCycleUnit()); qw.eq(StringUtils.isNotBlank(bo.getMaintRule()), "mo.maint_rule", bo.getMaintRule()); qw.eq(bo.getMaintUser() != null, "mo.maint_user", bo.getMaintUser()); qw.in(bo.getMaintDept() != null, "mo.maint_dept", getAllDescendantIds(bo.getMaintDept())); qw.eq(bo.getStatus() != null, "mo.status", bo.getStatus()); + qw.eq(bo.getPlanTime()!=null, + "mo.plan_time", bo.getPlanTime()); + qw.between(params.get("beginPlanTime") != null && params.get("endPlanTime") != null, + "mo.plan_time", params.get("beginPlanTime"), params.get("endPlanTime")); qw.orderByDesc("mo.create_time"); + return qw; + } + private QueryWrapper<EimsMaintOrder> buildGroupWrapper(EimsMaintOrderBo bo) { + Map<String, Object> params = bo.getParams(); + QueryWrapper<EimsMaintOrder> qw = Wrappers.query(); + qw.like(StringUtils.isNotBlank(bo.getMaintCode()),"mo.maint_code", bo.getMaintCode()); + qw.like(bo.getEquName() != null, "equ.equ_name", bo.getEquName()); + qw.eq(StringUtils.isNotBlank(bo.getMaintType()), "mo.maint_type", bo.getMaintType()); + qw.eq(StringUtils.isNotBlank(bo.getMaintCycleUnit()), "mo.maint_cycle_unit", bo.getMaintCycleUnit()); + qw.eq(StringUtils.isNotBlank(bo.getMaintRule()), "mo.maint_rule", bo.getMaintRule()); + qw.eq(bo.getMaintUser() != null, "mo.maint_user", bo.getMaintUser()); + qw.in(bo.getMaintDept() != null, "mo.maint_dept", getAllDescendantIds(bo.getMaintDept())); + qw.eq(bo.getStatus() != null, "mo.status", bo.getStatus()); + qw.between(params.get("beginPlanTime") != null && params.get("endPlanTime") != null, + "mo.plan_time", params.get("beginPlanTime"), params.get("endPlanTime")); + qw.groupBy(Arrays.asList("mo.equ_id","mo.plan_time")); + qw.orderByDesc("mo.plan_time"); return qw; } @@ -151,6 +188,8 @@ lqw.eq(StringUtils.isNotBlank(bo.getStatus()), EimsMaintOrder::getStatus, bo.getStatus()); lqw.eq(bo.getPlanTime() != null, EimsMaintOrder::getPlanTime, bo.getPlanTime()); lqw.eq(bo.getPlanId() != null, EimsMaintOrder::getPlanId, bo.getPlanId()); + // 鎸夊垱寤烘椂闂村�掑簭 + lqw.orderByDesc(EimsMaintOrder::getCreateTime); return lqw; } @@ -160,31 +199,71 @@ * @param bo 淇濆吇宸ュ崟 * @return 鏄惁鏂板鎴愬姛 */ + @Transactional(rollbackFor = Exception.class) @Override public Boolean insertByBo(EimsMaintOrderBo bo) { EimsMaintOrder add = MapstructUtils.convert(bo, EimsMaintOrder.class); + //閫氳繃淇濆吇璁″垝鐢熸垚鐨勬暟鎹渶瑕佹洿鏂颁繚鍏昏鍒� + Long planId = bo.getPlanId(); + if(planId!=null){ + EimsMaintPlan eimsMaintPlan = planMapper.selectById(planId); + setMaintNextTime(eimsMaintPlan); + planMapper.updateById(eimsMaintPlan); + } + + + validEntityBeforeSave(add); boolean flag = baseMapper.insert(add) > 0; if (flag) { bo.setId(add.getId()); - //鐢熸垚淇濆吇鏄庣粏 - Long equId = bo.getEquId(); - List<EimsMaintStandVo> standList = standMapper.selectVoList(new LambdaQueryWrapper<EimsMaintStand>().eq(EimsMaintStand::getEquId, equId)); - //TODO 娌℃湁淇濆吇椤癸紝娣诲姞寮傚父璁板綍 - for (int j = 0; j < standList.size(); j++) { - EimsMaintStandVo stand = standList.get(j); - EimsMaintOrditm itm = new EimsMaintOrditm(); - itm.setOrderId(bo.getId()); - itm.setEquId(equId); - itm.setItmName(stand.getName()); - itm.setItmAction(stand.getStand()); - itm.setItmUser(bo.getMaintUser()); - orditmMapper.insert(itm); - } - } return flag; + } + + /** + * 璁$畻淇濆吇璁″垝涓嬫鎵ц鏃堕棿 + */ + @SneakyThrows + private void setMaintNextTime(EimsMaintPlan bo) { + Date oldNext = bo.getMaintNextTime(); + //TODO 涓嬫淇濆吇鏃堕棿璁$畻瑙勫垯 0-鎸夊浐瀹氬懆鏈� 1-鎸変笂娆′繚鍏绘椂闂� + Date newNext = null; + + //涓嬫娆℃墽琛屾椂闂翠负绌烘姏鍑哄紓甯� + if (oldNext == null) { + throw new Exception("涓嬫淇濆吇鏃堕棿涓嶈兘涓虹┖!"); + } + //鍛ㄦ湡 + Long maintCycle = bo.getMaintCycle(); + //鍗曚綅 1-澶� 2-鍛� 3-鏈� 4-瀛� 5-骞� + String maintCycleUnit = bo.getMaintCycleUnit(); + switch (maintCycleUnit) { + case "1": + newNext = DateUtils.addDays(oldNext, maintCycle.intValue()); + break; + case "2": + newNext = DateUtils.addWeeks(oldNext, maintCycle.intValue()); + break; + case "3": + newNext = DateUtils.addMonths(oldNext, maintCycle.intValue()); + break; + case "4": + newNext = DateUtils.addMonths(oldNext, maintCycle.intValue() * 3); + break; + case "5": + newNext = DateUtils.addYears(oldNext, maintCycle.intValue()); + break; + + } + bo.setMaintNextTime(newNext); + if(bo.getMaintFirstTime()==null){ + bo.setMaintFirstTime(oldNext); + } + bo.setMaintLastTime(oldNext); + + } /** @@ -198,22 +277,61 @@ @Override public Boolean updateByBo(EimsMaintOrderBo bo) { EimsMaintOrder update = MapstructUtils.convert(bo, EimsMaintOrder.class); - - EimsMaintOrder old = baseMapper.selectById(bo.getId()); - - // 淇濆吇鐘舵�佸彉鏇村緟瀹℃牳鏃堕渶瑕佹牎楠屼繚鍏婚」鏁版嵁 - if(old.getStatus().equals(DictConstants.MAINT_ORDER_STATUS_DETAIL.BAOYANG)&&bo.getStatus().equals(DictConstants.MAINT_ORDER_STATUS_DETAIL.DAIYANZHENG)){ - LambdaQueryWrapper<EimsMaintOrditm> itmQueryWrapper = Wrappers.lambdaQuery(); - itmQueryWrapper.eq(EimsMaintOrditm::getOrderId, bo.getId()); - List<EimsMaintOrditm> eimsMaintOrditms = orditmMapper.selectList(itmQueryWrapper); - List<EimsMaintOrditm> wwc = eimsMaintOrditms.stream().filter(item->!item.getStatus().equals(DictConstants.EIMS_ORDITM_STATUS_DETAIL.YIWANCHENG)).toList(); - if(!wwc.isEmpty()){ - return false; - } + if(bo.getStatus().equals(DictConstants.MAINT_ORDER_STATUS_DETAIL.BAOYANG) && bo.getStartTime() == null){ + update.setStartTime(new Date()); } + + if(bo.getStatus().equals(DictConstants.MAINT_ORDER_STATUS_DETAIL.DAIYANZHENG) && bo.getEndTime() == null){ + update.setEndTime(new Date()); + } + + if(bo.getStatus().equals(DictConstants.MAINT_ORDER_STATUS_DETAIL.WANCHENG) && bo.getVerifyUser() == null){ + LoginUser loginUser = LoginHelper.getLoginUser(); + update.setVerifyUser(loginUser.getUserId()); + } + validEntityBeforeSave(update); return baseMapper.updateById(update) > 0; + } + + /** + * 鎵归噺淇敼淇濆吇宸ュ崟 + * + * @param bo 淇濆吇宸ュ崟 + * @return 鏄惁淇敼鎴愬姛 + */ + @Override + public boolean updateBatchByBo(MaintOrderBo bo) { + LoginUser loginUser = LoginHelper.getLoginUser(); + List<EimsMaintOrder> list = MapstructUtils.convert(bo.getMaintOrderList(), EimsMaintOrder.class); + list.forEach(e -> { + e.setStatus(DictConstants.MAINT_ORDER_STATUS_DETAIL.DAIYANZHENG); + e.setEndTime(new Date()); + e.setMaintUser(loginUser.getUserId()); + e.setUpdateTime(new Date()); + }); + bo.getMaintOrderList().forEach(item -> { + // 鍒ゆ柇澶囦欢鍒楄〃鏄惁涓虹┖锛屼笉涓虹┖鍒欐柊澧炰竴涓浠跺嚭搴撳崟锛屽悓鏃跺鍔犲嚭搴撴槑缁� + if (item.getSpareParts() != null && item.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(item.getSpareParts()); + spareInoutBo.setChargeUser(loginUser.getUserId()); + spareInoutBo.setChargeDept(loginUser.getDeptId()); + spareInoutBo.setAssociatedOrder(item.getMaintCode()); + // 淇濆瓨杩涙暟鎹簱 + Boolean b = spareInoutService.insertByBo(spareInoutBo); + + + } + }); + + return baseMapper.updateBatchById(list); } /** @@ -250,4 +368,20 @@ } return String.join(StringUtils.SEPARATOR, list); } + + + @Override + public List<EimsSpareVo> querySpareParts(String code) { + // 鏌ヨ鍏宠仈鐨勫浠讹紝鍏崇郴濡備笅锛氬浠跺嚭鍏ュ簱鍗曠殑associatedOrder 鍏宠仈浼犲叆鐨刢ode,澶囦欢鍑哄叆搴撴槑缁嗛�氳繃鍑哄叆搴撳崟鐨刬d鍏宠仈锛屽浠跺悕绉伴�氳繃鍑哄叆搴撴槑缁嗕腑鐨剆pareId鍏宠仈 + + 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(); + } } -- Gitblit v1.9.3