From 97c1fb4b6119d5e721d93523c2cc38ff694f4511 Mon Sep 17 00:00:00 2001 From: shih <510524130@qq.com> Date: Thu, 16 Apr 2026 16:28:33 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=9D=E5=85=BB=E7=AE=A1=E7=90=86=20?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=E4=BF=AE=E6=94=B9=20=E5=AE=A1=E6=89=B9=20?= =?UTF-8?q?=E9=AA=8C=E6=94=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../framework/controller/ByglController.java | 28 ++ .../example/report/bygl/ByglBygdBjPlugin.java | 282 +++++++++++++----- .../example/report/bygl/ByglByjhLbPlugin.java | 29 +- .../example/report/bygl/ByglByjhPlugin.java | 9 + .../core/framework/entity/ByManagementGd.java | 77 ++++- .../core/framework/entity/ByManagementJl.java | 45 ++- .../framework/entity/ByManagementPlan.java | 94 ++++++ .../core/framework/entity/ByManagementYs.java | 45 ++- .../mapper/ByManagementGdMapper.java | 4 +- .../mapper/ByManagementPlanMapper.java | 13 + .../core/framework/mapper/ByglByfaMapper.java | 2 + .../framework/service/IByglByfaService.java | 6 + .../service/impl/ByglByfaServiceImpl.java | 210 ++++++++++++- .../resources/mapper/bygl/ByglByfaMapper.xml | 11 + .../resources/mapper/bygl/ByglByjhMapper.xml | 2 +- .../common/constant/ByglConstant.java | 12 +- 16 files changed, 771 insertions(+), 98 deletions(-) create mode 100644 lidee-core/src/main/java/com/lideeyunji/core/framework/entity/ByManagementPlan.java create mode 100644 lidee-core/src/main/java/com/lideeyunji/core/framework/mapper/ByManagementPlanMapper.java diff --git a/lidee-core/src/main/java/com/lideeyunji/core/framework/controller/ByglController.java b/lidee-core/src/main/java/com/lideeyunji/core/framework/controller/ByglController.java index 21ff0e3..3282f10 100644 --- a/lidee-core/src/main/java/com/lideeyunji/core/framework/controller/ByglController.java +++ b/lidee-core/src/main/java/com/lideeyunji/core/framework/controller/ByglController.java @@ -55,4 +55,32 @@ public class ByglController extends BaseController { } + @PostMapping("/generateWorkOrder") + public BaseWebResult generateWorkOrder(@RequestBody Map model) { + Long id = lideeYunJiUtils.getMap2Long(model, "id"); + byglByfaService.generateWorkOrder(id); + return BaseWebResult.success("成功"); + } + + + @PostMapping("/auditNotPass") + public BaseWebResult auditNotPass(@RequestBody Map model) { + Long id = lideeYunJiUtils.getMap2Long(model, "id"); + if(id == null){ + return BaseWebResult.error(FrameErrorCodeConstants.FRAME_OP_ERROR); + } + byglByfaService.auditNotPass(id); + return BaseWebResult.success("审批成功"); + } + + + @PostMapping("/orderAuditNotPass") + public BaseWebResult orderAuditNotPass(@RequestBody Map model) { + Long id = lideeYunJiUtils.getMap2Long(model, "id"); + if(id == null){ + return BaseWebResult.error(FrameErrorCodeConstants.FRAME_OP_ERROR); + } + byglByfaService.orderAuditNotPass(id); + return BaseWebResult.success("审批成功"); + } } diff --git a/lidee-core/src/main/java/com/lideeyunji/core/framework/enhance/example/report/bygl/ByglBygdBjPlugin.java b/lidee-core/src/main/java/com/lideeyunji/core/framework/enhance/example/report/bygl/ByglBygdBjPlugin.java index 2b117f2..a032e77 100644 --- a/lidee-core/src/main/java/com/lideeyunji/core/framework/enhance/example/report/bygl/ByglBygdBjPlugin.java +++ b/lidee-core/src/main/java/com/lideeyunji/core/framework/enhance/example/report/bygl/ByglBygdBjPlugin.java @@ -1,19 +1,20 @@ package com.lideeyunji.core.framework.enhance.example.report.bygl; import cn.hutool.core.date.DateUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.lideeyunji.core.framework.adapter.FrameWorkAdapter; import com.lideeyunji.core.framework.config.aspect.enhance.model.EnhanceContext; import com.lideeyunji.core.framework.config.aspect.enhance.plugin.AroundAdvicePlugin; import com.lideeyunji.core.framework.entity.ByManagementGd; import com.lideeyunji.core.framework.entity.ByManagementJl; +import com.lideeyunji.core.framework.entity.ByManagementPlan; import com.lideeyunji.core.framework.entity.ByManagementYs; -import com.lideeyunji.core.framework.mapper.ByManagementGdMapper; -import com.lideeyunji.core.framework.mapper.ByManagementJlMapper; -import com.lideeyunji.core.framework.mapper.ByManagementYsMapper; -import com.lideeyunji.core.framework.mapper.ByglByjhMapper; +import com.lideeyunji.core.framework.mapper.*; import com.lideeyunji.tool.framework.common.constant.ByglConstant; import com.lideeyunji.tool.framework.common.util.object.BeanUtils; +import com.lideeyunji.tool.framework.security.core.LoginUser; +import com.lideeyunji.tool.framework.security.core.util.SecurityFrameworkUtils; import com.lideeyunji.tool.framework.yunji.tool.spring.SpringUtils; import com.lideeyunji.tool.framework.yunji.utils.lideeYunJiUtils; import lombok.extern.slf4j.Slf4j; @@ -21,7 +22,12 @@ import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import javax.annotation.Resource; +import java.time.LocalDate; import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.Date; +import java.util.List; import java.util.Map; /** @@ -34,7 +40,11 @@ public class ByglBygdBjPlugin implements AroundAdvicePlugin { /** * 操作类型常量 */ - private static final String SUBMIT_TYPE_CL = "cl"; + private static final String SUBMIT_TYPE_CJZRCL = "cjzrcl"; + private static final String SUBMIT_TYPE_WBZRCL = "wbzrcl"; + private static final String SUBMIT_TYPE_SQRCL = "sqrcl"; + + private static final String SUBMIT_TYPE_YS = "ys"; /** @@ -42,18 +52,19 @@ public class ByglBygdBjPlugin implements AroundAdvicePlugin { */ private static final int NOT_DELETED = 0; - @Autowired - private ByglByjhMapper byglByjhMapper; - @Autowired + @Resource private ByManagementJlMapper byManagementJlMapper; - @Autowired + @Resource private ByManagementYsMapper byManagementYsMapper; - @Autowired + @Resource private ByManagementGdMapper byManagementGdMapper; + @Resource + private ByManagementPlanMapper byManagementPlanMapper; + @Override public void beforeExecute(EnhanceContext enhanceContext) { Map params = enhanceContext.getParam().getParams(); @@ -64,12 +75,20 @@ public class ByglBygdBjPlugin implements AroundAdvicePlugin { return; } String id = lideeYunJiUtils.getMap2Str(params, "id"); - validateParams(id, submit_type); + if(StringUtils.isBlank(id)){ + throw new IllegalArgumentException("工单ID不能为空"); + } FrameWorkAdapter adapter = SpringUtils.getBean(FrameWorkAdapter.class); switch (submit_type) { - case SUBMIT_TYPE_CL://处理操作 - handleClOperation(id, params, adapter); + case SUBMIT_TYPE_CJZRCL://车间主任处理操作 + handleCjzrclOperation(id, params, adapter); + break; + case SUBMIT_TYPE_WBZRCL://维保主任处理操作 + handleWbzrclOperation(id, params, adapter); + break; + case SUBMIT_TYPE_SQRCL://申请人处理操作 + handleSqrclOperation(id, params, adapter); break; case SUBMIT_TYPE_YS://验收操作 handleYsOperation(id, params, adapter); @@ -79,7 +98,24 @@ public class ByglBygdBjPlugin implements AroundAdvicePlugin { @Override public void afterExecute(EnhanceContext enhanceContext) { - + Map params = enhanceContext.getParam().getParams(); + Long id = lideeYunJiUtils.getMap2Long(params, "id"); + if (id == null) { + return; + } + ByManagementGd gd = byManagementGdMapper.selectOne("id", id); + if (gd == null) { + return; + } + if(ByglConstant.GD_STATE_BTG.equals(gd.getOrderState())){ + gd.setOrderState(ByglConstant.GD_STATE_DKS); + gd.setLeaderUserYj(null); + gd.setWbcjzrUserYj(null); + gd.setLeaderUpkeepTime(null); + gd.setLeaderUserZt(0); + gd.setWbcjzrUserZt(0); + byManagementGdMapper.updateById(gd); + } } @@ -88,90 +124,180 @@ public class ByglBygdBjPlugin implements AroundAdvicePlugin { */ private void handleYsOperation(String id, Map params, FrameWorkAdapter adapter) { String gdys_yj = lideeYunJiUtils.getMap2Str(params, "gdys_yj"); - String pjxj = lideeYunJiUtils.getMap2Str(params, "pjxj"); - ByManagementJl jl = byManagementJlMapper.selectById(id); + ByManagementYs ys = byManagementYsMapper.selectById(id); - jl.setYsTime(DateUtil.now()); - jl.setPjxj(pjxj); - jl.setState(ByglConstant.YSZT_STATE_YYS); - jl.setGdysYj(gdys_yj); - jl.setUpdateTime(LocalDateTime.now()); - jl.setUpdateUser(adapter.getOnlineUserId()); + LoginUser loginUser = SecurityFrameworkUtils.getLoginUser(); + if (loginUser == null) { + return; + } + Long userId = loginUser.getId(); - byManagementJlMapper.updateById(jl); + if(ys.getWbcjzrYsZt() == 0 && userId.equals(ys.getWbcjzrUserId())){ + ys.setWbcjzrYsZt(1); + ys.setWbcjzrYsYj(gdys_yj); + } - ByManagementYs ys = BeanUtils.toBean(jl, ByManagementYs.class); - if(ys == null){ + + if(ys.getLeaderYsZt() == 0 && userId.equals(ys.getLeaderUserId())){ + ys.setLeaderYsZt(1); + ys.setLeaderYsYj(gdys_yj); + } + if(ys.getLeaderYsZt() == 1 && ys.getWbcjzrYsZt() == 1){ + ys.setYsTime(DateUtil.now()); + ys.setState(ByglConstant.YSZT_STATE_YYS); + ys.setUpdateTime(LocalDateTime.now()); + ys.setUpdateUser(adapter.getOnlineUserId()); + + //验收完之后需要修改计划表数据 + //当前工单 修改为已完成 + ByManagementGd gd = byManagementGdMapper.selectOne("order_id", ys.getOrderId()); + gd.setOrderState(ByglConstant.BY_STATE_YWC); + byManagementGdMapper.updateById(gd); + + String planId = gd.getPlanId(); + + //查询当前计划的工单 + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(ByManagementGd::getPlanId, planId); + wrapper.eq(ByManagementGd::getOrderState, ByglConstant.BY_STATE_YWC); + List byManagementGds = byManagementGdMapper.selectList(wrapper); + + + //当前计划 + ByManagementPlan plan = byManagementPlanMapper.selectById(planId); + + //保养周期 + String interval = plan.getScheduledInterval(); + if("1".equals(interval)) {//周期为180天 + //如果有两条已完成的工单,则将计划状态修改为已完成 + if(byManagementGds.size() >= 2) { + plan.setPlanState(ByglConstant.JH_STATE_YWC); + byManagementPlanMapper.updateById(plan); + }else{ + String planUpkeepTime = gd.getPlanUpkeepTime(); + // 解析完成时间(只有日期部分,需要转换为LocalDateTime) + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + LocalDate completeLocalDate = LocalDate.parse(planUpkeepTime, formatter); + LocalDateTime completeDate = completeLocalDate.atStartOfDay(); + + // 往后推180天 + LocalDateTime nextMaintenanceDate = adjustToNextMonthFirstDayIfNeeded(completeDate.plusDays(180)); + + // 判断是否超过本年 + int completeYear = completeDate.getYear(); + int nextMaintenanceYear = nextMaintenanceDate.getYear(); + boolean isCrossYear = nextMaintenanceYear > completeYear; + + if(isCrossYear){ + plan.setPlanState(ByglConstant.JH_STATE_YWC); + byManagementPlanMapper.updateById(plan); + }else{ + DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + String nextMaintenanceDateStr = nextMaintenanceDate.format(dateFormatter); + plan.setNextUpkeepTime(nextMaintenanceDateStr); + byManagementPlanMapper.updateById(plan); + } + } + }else if("2".equals(interval)) {//周期为360天 + plan.setPlanState(ByglConstant.JH_STATE_YWC); + byManagementPlanMapper.updateById(plan); + } + } + + byManagementYsMapper.updateById(ys); + + ByManagementJl jl = BeanUtils.toBean(ys, ByManagementJl.class); + jl.setId(null); + if(jl == null){ throw new RuntimeException("对象转换失败"); } - byManagementYsMapper.updateById(ys); + byManagementJlMapper.insert(jl); log.info("工单验收成功,ID: {}", id); } /** - * 处理操作 + * 车间主任处理操作 */ - private void handleClOperation(String id, Map params, FrameWorkAdapter adapter) { - String bygd_cljg = lideeYunJiUtils.getMap2Str(params, "bygd_cljg"); - - int result = byglByjhMapper.updateClBygd(id, bygd_cljg, ByglConstant.BY_STATE_YWC); - - if (result <= 0) { - log.info("工单处理失败,ID: {}", id); - return; - } + private void handleCjzrclOperation(String id, Map params, FrameWorkAdapter adapter) { + String leader_user_yj = lideeYunJiUtils.getMap2Str(params, "leader_user_yj"); + String leader_upkeep_time = lideeYunJiUtils.getMap2Str(params, "leader_upkeep_time"); ByManagementGd gd = byManagementGdMapper.selectById(id); - ByManagementJl jl = createByManagementJl(gd, adapter); - byManagementJlMapper.insert(jl); - syncToYsTable(jl); - - log.info("工单处理成功,ID: {}", id); - } - - /** - * 创建保养记录 - */ - private ByManagementJl createByManagementJl(ByManagementGd gd, FrameWorkAdapter adapter) { - ByManagementJl jl = new ByManagementJl(); - jl.setId(IdWorker.getId()); - jl.setOrderId(gd.getOrderId()); - jl.setOrderName(gd.getOrderName()); - jl.setEquipmentInfo(gd.getEquipmentInfo()); - jl.setEquipmentCode(gd.getEquipmentCode()); - jl.setUpkeepLevel(gd.getUpkeepLevel()); - jl.setUpkeepTime(gd.getUpkeepTime()); - jl.setPriority(gd.getPriority()); - jl.setState(ByglConstant.YSZT_STATE_DYS); - jl.setExecutor(gd.getExecutor()); - jl.setCreateTime(LocalDateTime.now()); - jl.setCreateUser(adapter.getOnlineUserId()); - jl.setIsDeleted(NOT_DELETED); - return jl; - } - - /** - * 同步到验收表 - */ - private void syncToYsTable(ByManagementJl jl) { - ByManagementYs ys = BeanUtils.toBean(jl, ByManagementYs.class); - if(ys == null){ - throw new RuntimeException("对象转换失败"); + gd.setLeaderUserYj(leader_user_yj); + gd.setLeaderUserZt(1); + gd.setLeaderUpkeepTime(leader_upkeep_time); + if(ByglConstant.GD_STATE_DKS.equals(gd.getOrderState())){ + gd.setOrderState(ByglConstant.GD_STATE_JXZ); } + byManagementGdMapper.updateById(gd); + } + + /** + * 维保主任处理操作 + */ + private void handleWbzrclOperation(String id, Map params, FrameWorkAdapter adapter) { + String wbcjzr_user_yj = lideeYunJiUtils.getMap2Str(params, "wbcjzr_user_yj"); + ByManagementGd gd = byManagementGdMapper.selectById(id); + gd.setWbcjzrUserYj(wbcjzr_user_yj); + gd.setWbcjzrUserZt(1); + if(ByglConstant.GD_STATE_DKS.equals(gd.getOrderState())){ + gd.setOrderState(ByglConstant.GD_STATE_JXZ); + } + byManagementGdMapper.updateById(gd); + } + + /** + * 申请人处理操作 + */ + private void handleSqrclOperation(String id, Map params, FrameWorkAdapter adapter) { + String bygd_cljg = lideeYunJiUtils.getMap2Str(params, "bygd_cljg"); + String maintainer = lideeYunJiUtils.getMap2Str(params, "maintainer"); + String schemeInfo = lideeYunJiUtils.getMap2Str(params, "scheme_info"); + ByManagementGd gd = byManagementGdMapper.selectById(id); + gd.setBygdCljg(bygd_cljg); + gd.setMaintainer(maintainer); + gd.setSchemeInfo(schemeInfo); + gd.setOrderState(ByglConstant.GD_STATE_DYS); + gd.setUpkeepTime(LocalDate.now().toString()); + byManagementGdMapper.updateById(gd); + + ByManagementYs ys = new ByManagementYs(); + ys.setOrderId(gd.getOrderId()); + ys.setOrderName(gd.getOrderName()); + ys.setEquipmentInfo(gd.getEquipmentInfo()); + ys.setEquipmentCode(gd.getEquipmentCode()); + ys.setUpkeepLevel(gd.getUpkeepLevel()); + ys.setUpkeepTime(gd.getUpkeepTime()); + ys.setPriority(gd.getPriority()); + ys.setState(ByglConstant.YSZT_STATE_DYS); + ys.setExecutor(gd.getExecutor()); + ys.setLeaderUserId(gd.getLeaderUserId()); + ys.setWbcjzrUserId(gd.getWbcjzrUserId()); + ys.setLeaderYsZt(0); + ys.setWbcjzrYsZt(0); + ys.setMaintainer(gd.getMaintainer()); + ys.setSchemeInfo(gd.getSchemeInfo()); + ys.setCreateTime(LocalDateTime.now()); + ys.setCreateUser(adapter.getOnlineUserId()); + ys.setIsDeleted(NOT_DELETED); + byManagementYsMapper.insert(ys); + } + + /** - * 参数校验 + * 如果日期是28号、29号、30号或31号,顺延到下个月1号 */ - private void validateParams(String id, String submit_type) { - if(StringUtils.isBlank(id)){ - throw new IllegalArgumentException("工单ID不能为空"); - } - if(!SUBMIT_TYPE_CL.equals(submit_type) && !SUBMIT_TYPE_YS.equals(submit_type)){ - throw new IllegalArgumentException("不支持的操作类型: " + submit_type); + private LocalDateTime adjustToNextMonthFirstDayIfNeeded(LocalDateTime date) { + int dayOfMonth = date.getDayOfMonth(); + if (dayOfMonth >= 28) { + // 顺延到下个月1号 + return date.plusMonths(1).withDayOfMonth(1); } + return date; } } \ No newline at end of file diff --git a/lidee-core/src/main/java/com/lideeyunji/core/framework/enhance/example/report/bygl/ByglByjhLbPlugin.java b/lidee-core/src/main/java/com/lideeyunji/core/framework/enhance/example/report/bygl/ByglByjhLbPlugin.java index 26a471b..c609096 100644 --- a/lidee-core/src/main/java/com/lideeyunji/core/framework/enhance/example/report/bygl/ByglByjhLbPlugin.java +++ b/lidee-core/src/main/java/com/lideeyunji/core/framework/enhance/example/report/bygl/ByglByjhLbPlugin.java @@ -9,6 +9,8 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import java.time.LocalDate; +import java.time.temporal.ChronoUnit; import java.util.List; import java.util.Map; @@ -24,7 +26,6 @@ public class ByglByjhLbPlugin implements AroundAdvicePlugin { @Override public void beforeExecute(EnhanceContext enhanceContext) { - } @Override @@ -38,6 +39,32 @@ public class ByglByjhLbPlugin implements AroundAdvicePlugin { Map countByPlanId = byglByjhMapper.getCountByPlanId(plan_id); record.put("plan_count",lideeYunJiUtils.getMap2Long(countByPlanId,"jhs")); record.put("completed_count",lideeYunJiUtils.getMap2Long(countByPlanId,"wcs")); + + // 计算距离下次保养时间还有几天(order_state为1时不计算) + String planState = lideeYunJiUtils.getMap2Str(record, "plan_state"); + record.put("days_until_next_upkeep", "-"); + if (!"1".equals(planState)) { + String nextUpkeepTimeStr = lideeYunJiUtils.getMap2Str(record, "next_upkeep_time"); + if (Func.isNotEmpty(nextUpkeepTimeStr)) { + try { + // 解析日期字符串(格式:yyyy-MM-dd) + LocalDate nextUpkeepTime = LocalDate.parse(nextUpkeepTimeStr.substring(0, 10)); + LocalDate today = LocalDate.now(); + // 计算天数差(可能为负数,表示已过期) + long daysUntilNext = ChronoUnit.DAYS.between(today, nextUpkeepTime); + if(daysUntilNext<0){ + record.put("days_until_next_upkeep", "已超期"+Math.abs(daysUntilNext)+"天"); + }else { + record.put("days_until_next_upkeep", daysUntilNext+"天"); + } + + } catch (Exception e) { + log.warn("解析下次保养时间失败: {}", nextUpkeepTimeStr, e); + } + } + }else { + record.put("next_upkeep_time", "-"); + } } } } \ No newline at end of file diff --git a/lidee-core/src/main/java/com/lideeyunji/core/framework/enhance/example/report/bygl/ByglByjhPlugin.java b/lidee-core/src/main/java/com/lideeyunji/core/framework/enhance/example/report/bygl/ByglByjhPlugin.java index 759a7ee..c5ec005 100644 --- a/lidee-core/src/main/java/com/lideeyunji/core/framework/enhance/example/report/bygl/ByglByjhPlugin.java +++ b/lidee-core/src/main/java/com/lideeyunji/core/framework/enhance/example/report/bygl/ByglByjhPlugin.java @@ -33,6 +33,15 @@ public class ByglByjhPlugin implements AroundAdvicePlugin { @Override public void beforeExecute(EnhanceContext enhanceContext) { Map params = enhanceContext.getParam().getParams(); + + String scheduledDate = lideeYunJiUtils.getMap2Str(params, "scheduled_date"); + String[] dates = scheduledDate.split(","); + if(dates.length > 0){ + // 创建工单并设置planUpkeepTime + String planUpkeepTime = dates[0].trim(); + params.put("next_upkeep_time", planUpkeepTime); + } + //新增方法默认状态字段 params.put("plan_state", ByglConstant.JH_STATE_JXZ); String plan_id = lideeYunJiUtils.getMap2Str(params, "plan_id"); diff --git a/lidee-core/src/main/java/com/lideeyunji/core/framework/entity/ByManagementGd.java b/lidee-core/src/main/java/com/lideeyunji/core/framework/entity/ByManagementGd.java index 006d690..75c9f25 100644 --- a/lidee-core/src/main/java/com/lideeyunji/core/framework/entity/ByManagementGd.java +++ b/lidee-core/src/main/java/com/lideeyunji/core/framework/entity/ByManagementGd.java @@ -1,11 +1,15 @@ package com.lideeyunji.core.framework.entity; +import com.baomidou.mybatisplus.annotation.FieldStrategy; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.lideeyunji.tool.framework.yunji.model.global.BaseTenantEntity; import lombok.Data; import lombok.EqualsAndHashCode; +import java.util.Date; + /** * 保养管理-保养工单 */ @@ -100,15 +104,80 @@ public class ByManagementGd extends BaseTenantEntity { */ private String schemeId; - /** - * 处理结果 - */ - private String bygdCljg; + /** * 计划id */ private String planId; + + /** + * 保养内容 + */ + private String schemeInfo; + + + + /** + * 保养人 + */ + private String maintainer; + + + /** + * 设备所属车间领导 + */ + private Long leaderUserId; + + + /** + * 维保中心领导 + */ + private Long wbcjzrUserId; + + + /** + * 设备所属车间领导意见 + */ + @TableField(updateStrategy = FieldStrategy.ALWAYS) + private String leaderUserYj; + + + /** + * 维保中心领导意见 + */ + @TableField(updateStrategy = FieldStrategy.ALWAYS) + private String wbcjzrUserYj; + + + /** + * 车间领导确定保养时间 + */ + @TableField(updateStrategy = FieldStrategy.ALWAYS) + private String leaderUpkeepTime; + + + /** + * 处理结果 + */ + private String bygdCljg; + + /** + * 车间领导审批状态 + */ + private Integer leaderUserZt; + + + /** + * 维保领导审批状态 + */ + private Integer wbcjzrUserZt; + + + + + + } diff --git a/lidee-core/src/main/java/com/lideeyunji/core/framework/entity/ByManagementJl.java b/lidee-core/src/main/java/com/lideeyunji/core/framework/entity/ByManagementJl.java index 123a953..57e5ea3 100644 --- a/lidee-core/src/main/java/com/lideeyunji/core/framework/entity/ByManagementJl.java +++ b/lidee-core/src/main/java/com/lideeyunji/core/framework/entity/ByManagementJl.java @@ -67,16 +67,51 @@ public class ByManagementJl extends BaseTenantEntity { *验收时间 */ private String ysTime; + /** + * 设备所属车间领导 + */ + private Long leaderUserId; + /** - *评价星级 + * 维保中心领导 */ - private String pjxj; + private Long wbcjzrUserId; + /** - *验收意见 + * 车间领导验收状态 */ - private String gdysYj; - + private Integer leaderYsZt; + + + /** + * 维保领导验收状态 + */ + private Integer wbcjzrYsZt; + + + /** + * 车间领导验收意见 + */ + private String leaderYsYj; + + + /** + * 维保领导验收意见 + */ + private String wbcjzrYsYj; + + /** + * 保养人 + */ + private String maintainer; + + + /** + * 保养内容 + */ + private String schemeInfo; + } diff --git a/lidee-core/src/main/java/com/lideeyunji/core/framework/entity/ByManagementPlan.java b/lidee-core/src/main/java/com/lideeyunji/core/framework/entity/ByManagementPlan.java new file mode 100644 index 0000000..6d38e63 --- /dev/null +++ b/lidee-core/src/main/java/com/lideeyunji/core/framework/entity/ByManagementPlan.java @@ -0,0 +1,94 @@ +package com.lideeyunji.core.framework.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.lideeyunji.tool.framework.yunji.model.global.BaseTenantEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 保养管理-保养计划 + */ +@TableName("by_management_plan") +@Data +@EqualsAndHashCode +public class ByManagementPlan extends BaseTenantEntity { + /** + * 主键 + */ + private Long id; + + /** + * 计划编号 + */ + private String planId; + + /** + * 计划名称 + */ + private String planName; + + /** + * 生产线 + */ + private String deviceTypeName; + + /** + * 设备 + */ + private String equipmentInfo; + + /** + * 设备编号 + */ + private String equipmentCode; + + /** + * 保养级别 + */ + private String upkeepLevel; + + /** + * 保养方案 + */ + private String schemeId; + + /** + * 可能更换零件 + */ + private String possibleReplacements; + + /** + * 保养周期 + */ + private String scheduledInterval; + + /** + * 下次保养时间 + */ + private String nextUpkeepTime; + + /** + * 执行人 + */ + private String executor; + + /** + * 状态 + */ + private String planState; + + /** + * 备注 + */ + private String remark; + + /** + * 起止时间 + */ + private String scheduledDate; + + /** + * 保养内容 + */ + private String schemeInfo; +} diff --git a/lidee-core/src/main/java/com/lideeyunji/core/framework/entity/ByManagementYs.java b/lidee-core/src/main/java/com/lideeyunji/core/framework/entity/ByManagementYs.java index 9063e26..4f074d1 100644 --- a/lidee-core/src/main/java/com/lideeyunji/core/framework/entity/ByManagementYs.java +++ b/lidee-core/src/main/java/com/lideeyunji/core/framework/entity/ByManagementYs.java @@ -70,14 +70,51 @@ public class ByManagementYs extends BaseTenantEntity { private String ysTime; /** - *评价星级 + * 设备所属车间领导 */ - private String pjxj; + private Long leaderUserId; + /** - *验收意见 + * 维保中心领导 */ - private String gdysYj; + private Long wbcjzrUserId; + + + /** + * 车间领导验收状态 + */ + private Integer leaderYsZt; + + + /** + * 维保领导验收状态 + */ + private Integer wbcjzrYsZt; + + + /** + * 车间领导验收意见 + */ + private String leaderYsYj; + + + /** + * 维保领导验收意见 + */ + private String wbcjzrYsYj; + + /** + * 保养人 + */ + private String maintainer; + + + /** + * 保养内容 + */ + private String schemeInfo; + } diff --git a/lidee-core/src/main/java/com/lideeyunji/core/framework/mapper/ByManagementGdMapper.java b/lidee-core/src/main/java/com/lideeyunji/core/framework/mapper/ByManagementGdMapper.java index 190c5a8..2b5e661 100644 --- a/lidee-core/src/main/java/com/lideeyunji/core/framework/mapper/ByManagementGdMapper.java +++ b/lidee-core/src/main/java/com/lideeyunji/core/framework/mapper/ByManagementGdMapper.java @@ -1,13 +1,13 @@ package com.lideeyunji.core.framework.mapper; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.lideeyunji.core.framework.entity.ByManagementGd; +import com.lideeyunji.tool.framework.mybatis.core.mapper.BaseMapperX; /** * 保养管理-保养工单Mapper接口 * * @date 2026-03-20 */ -public interface ByManagementGdMapper extends BaseMapper { +public interface ByManagementGdMapper extends BaseMapperX { } diff --git a/lidee-core/src/main/java/com/lideeyunji/core/framework/mapper/ByManagementPlanMapper.java b/lidee-core/src/main/java/com/lideeyunji/core/framework/mapper/ByManagementPlanMapper.java new file mode 100644 index 0000000..acc9811 --- /dev/null +++ b/lidee-core/src/main/java/com/lideeyunji/core/framework/mapper/ByManagementPlanMapper.java @@ -0,0 +1,13 @@ +package com.lideeyunji.core.framework.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.lideeyunji.core.framework.entity.ByManagementPlan; + +/** + * 保养管理-保养计划Mapper接口 + * + * @date 2026-04-15 + */ +public interface ByManagementPlanMapper extends BaseMapper { + +} \ No newline at end of file diff --git a/lidee-core/src/main/java/com/lideeyunji/core/framework/mapper/ByglByfaMapper.java b/lidee-core/src/main/java/com/lideeyunji/core/framework/mapper/ByglByfaMapper.java index ce19df2..7da84ea 100644 --- a/lidee-core/src/main/java/com/lideeyunji/core/framework/mapper/ByglByfaMapper.java +++ b/lidee-core/src/main/java/com/lideeyunji/core/framework/mapper/ByglByfaMapper.java @@ -17,4 +17,6 @@ public interface ByglByfaMapper { List> getByXx(String dev_type, String dev_code); List> getWxXx(String dev_type, String dev_code); + + Map getScxXx(String scx); } diff --git a/lidee-core/src/main/java/com/lideeyunji/core/framework/service/IByglByfaService.java b/lidee-core/src/main/java/com/lideeyunji/core/framework/service/IByglByfaService.java index 6ef6dc0..671dc57 100644 --- a/lidee-core/src/main/java/com/lideeyunji/core/framework/service/IByglByfaService.java +++ b/lidee-core/src/main/java/com/lideeyunji/core/framework/service/IByglByfaService.java @@ -14,4 +14,10 @@ public interface IByglByfaService { List> getByXx(String dev_type, String dev_code); List> getWxXx(String dev_type, String dev_code); + + void generateWorkOrder(Long id); + + void auditNotPass(Long id); + + void orderAuditNotPass(Long id); } diff --git a/lidee-core/src/main/java/com/lideeyunji/core/framework/service/impl/ByglByfaServiceImpl.java b/lidee-core/src/main/java/com/lideeyunji/core/framework/service/impl/ByglByfaServiceImpl.java index ffc15ee..cd70a19 100644 --- a/lidee-core/src/main/java/com/lideeyunji/core/framework/service/impl/ByglByfaServiceImpl.java +++ b/lidee-core/src/main/java/com/lideeyunji/core/framework/service/impl/ByglByfaServiceImpl.java @@ -2,13 +2,31 @@ package com.lideeyunji.core.framework.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.lideeyunji.core.framework.entity.ByManagementGd; +import com.lideeyunji.core.framework.entity.ByManagementPlan; +import com.lideeyunji.core.framework.entity.ByManagementYs; +import com.lideeyunji.core.framework.mapper.ByManagementGdMapper; +import com.lideeyunji.core.framework.mapper.ByManagementPlanMapper; +import com.lideeyunji.core.framework.mapper.ByManagementYsMapper; import com.lideeyunji.core.framework.mapper.ByglByfaMapper; import com.lideeyunji.core.framework.service.IByglByfaService; -import org.springframework.beans.factory.annotation.Autowired; +import com.lideeyunji.service.system.api.IApiDeptApi; +import com.lideeyunji.service.system.dto.DeptRespDTO; +import com.lideeyunji.tool.framework.common.constant.ByglConstant; +import com.lideeyunji.tool.framework.common.util.object.BeanUtils; +import com.lideeyunji.tool.framework.yunji.enums.AcceptanceStatusEnum; +import com.lideeyunji.tool.framework.yunji.utils.lideeYunJiUtils; import org.springframework.stereotype.Service; +import javax.annotation.Resource; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.Comparator; import java.util.List; import java.util.Map; +import java.util.Optional; /** *保养管理-保养方案 @@ -16,9 +34,27 @@ import java.util.Map; @Service public class ByglByfaServiceImpl implements IByglByfaService { - @Autowired + private static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyyMMddHHmmss"); + + private static final String ORDER_ID_PREFIX = "GD"; + + private static final Long WBCJ_ID = 145L; + + @Resource private ByglByfaMapper byglByfaMapper; + @Resource + private ByManagementPlanMapper byManagementPlanMapper; + + @Resource + private ByManagementGdMapper byManagementGdMapper; + + @Resource + private ByManagementYsMapper byManagementYsMapper; + + @Resource + private IApiDeptApi apiDeptApi; + @Override public int changeFaState(String id, String state) { int result = byglByfaMapper.changeFaState(id, state); @@ -36,4 +72,174 @@ public class ByglByfaServiceImpl implements IByglByfaService { return byglByfaMapper.getWxXx(dev_type, dev_code); } + + @Override + public void generateWorkOrder(Long id) { + //查询当前保养计划 + ByManagementPlan plan = byManagementPlanMapper.selectById(id); + //查询当前计划的工单 + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(ByManagementGd::getPlanId, id); + List byManagementGds = byManagementGdMapper.selectList(wrapper); + + ByManagementGd order = BeanUtils.toBean(plan, ByManagementGd.class); + order.setId(null); + order.setOrderId(generateOrderId()); + order.setOrderName(plan.getPlanName()); + order.setOrderState("0"); + order.setPriority(order.getUpkeepLevel()); + order.setApplyForParts("0"); + order.setIsStopped("0"); + order.setPlanId(id+""); + order.setSchemeInfo(plan.getSchemeInfo()); + + //需要查询对应设备车间的车间主任 维保主任 + String scx = order.getDeviceTypeName();//生成线 需要去sblx查询对应车间 + Map map= byglByfaMapper.getScxXx(scx); + Long deptId = lideeYunJiUtils.getMap2Long(map, "dept_id"); + // 通过部门ID获取部门信息,进而获取负责人ID + Long leaderUserId = null; + if (deptId != null) { + DeptRespDTO dept = apiDeptApi.getDept(deptId); + if (dept != null) { + leaderUserId = dept.getLeaderUserId(); + } + } + order.setLeaderUserId(leaderUserId); + //维保车间145 主任 + Long wbcjzrUserId = null; + if (deptId != null) { + DeptRespDTO dept = apiDeptApi.getDept(WBCJ_ID); + if (dept != null) { + wbcjzrUserId = dept.getLeaderUserId(); + } + } + order.setWbcjzrUserId(wbcjzrUserId); + + //找到planUpkeepTime最近的一条工单 + Optional latestCompleted = byManagementGds.stream() + .filter(gd -> gd.getPlanUpkeepTime() != null && !gd.getPlanUpkeepTime().isEmpty()) + .max(Comparator.comparing(gd -> { + try { + // 尝试解析完成时间,支持多种格式 + String time = gd.getPlanUpkeepTime(); + if (time.contains("T")) { + return LocalDateTime.parse(time, DateTimeFormatter.ISO_LOCAL_DATE_TIME); + } else if (time.contains(" ")) { + return LocalDateTime.parse(time, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); + } else { + return LocalDateTime.parse(time + "T00:00:00", DateTimeFormatter.ISO_LOCAL_DATE_TIME); + } + } catch (Exception e) { + return LocalDateTime.MIN; + } + })); + + String interval = plan.getScheduledInterval();//保养周期 + String scheduledDate = plan.getScheduledDate();//首次保养时间区间 + if("1".equals(interval)){//周期为180天 + //判断最近的工单 + if(latestCompleted.isPresent()){ + if(byManagementGds.size() >= 2 ){//周期为180天左右半年1次 1年最多2次 超过就返回 + return; + } + + ByManagementGd completedGd = latestCompleted.get(); + String planUpkeepTime = completedGd.getPlanUpkeepTime(); + + // 解析完成时间(只有日期部分,需要转换为LocalDateTime) + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + LocalDate completeLocalDate = LocalDate.parse(planUpkeepTime, formatter); + LocalDateTime completeDate = completeLocalDate.atStartOfDay(); + + // 往后推180天 + LocalDateTime nextMaintenanceDate = adjustToNextMonthFirstDayIfNeeded(completeDate.plusDays(180)); + + // 判断是否超过本年 + int completeYear = completeDate.getYear(); + int nextMaintenanceYear = nextMaintenanceDate.getYear(); + boolean isCrossYear = nextMaintenanceYear > completeYear; + + if(isCrossYear){ + return; + }else{ + // 未超过本年,在当年内 保存工单 + DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + String nextMaintenanceDateStr = nextMaintenanceDate.format(dateFormatter); + order.setPlanUpkeepTime(nextMaintenanceDateStr); + + byManagementGdMapper.insert(order); + } + }else{ + // 没有已完成的工单,使用scheduledDate的第一个时间 + if(scheduledDate != null && !scheduledDate.isEmpty()){ + String[] dates = scheduledDate.split(","); + if(dates.length > 0){ + // 创建工单并设置planUpkeepTime + String planUpkeepTime = dates[0].trim(); + order.setPlanUpkeepTime(planUpkeepTime); + byManagementGdMapper.insert(order); + + } + } + } + }else if("2".equals(interval)){//周期为360天 + //周期为360天 要是没有工单可以生成 有工单直接返回 + if(!latestCompleted.isPresent()){ + // 没有已完成的工单,使用scheduledDate的第一个时间 + if(scheduledDate != null && !scheduledDate.isEmpty()){ + String[] dates = scheduledDate.split(","); + if(dates.length > 0){ + // 创建工单并设置planUpkeepTime + String planUpkeepTime = dates[0].trim(); + order.setPlanUpkeepTime(planUpkeepTime); + byManagementGdMapper.insert(order); + } + } + } + } + } + + @Override + public void auditNotPass(Long id) { + ByManagementGd gzbx = new ByManagementGd(); + gzbx.setId(id); + gzbx.setOrderState(ByglConstant.GD_STATE_BTG); + byManagementGdMapper.updateById(gzbx); + + } + + @Override + public void orderAuditNotPass(Long id) { + ByManagementYs ys = byManagementYsMapper.selectById(id); + ByManagementGd gd = byManagementGdMapper.selectOne("order_id", ys.getOrderId()); + gd.setOrderState(ByglConstant.GD_STATE_YSBTG); + byManagementGdMapper.updateById(gd); + + byManagementYsMapper.deleteById(id); + } + + /** + * 生成工单ID + * 格式:GD + 时间戳(yyyyMMddHHmmss) + */ + private String generateOrderId() { + return ORDER_ID_PREFIX + LocalDateTime.now().format(DATE_TIME_FORMATTER); + } + + /** + * 如果日期是28号、29号、30号或31号,顺延到下个月1号 + */ + private LocalDateTime adjustToNextMonthFirstDayIfNeeded(LocalDateTime date) { + int dayOfMonth = date.getDayOfMonth(); + if (dayOfMonth >= 28) { + // 顺延到下个月1号 + return date.plusMonths(1).withDayOfMonth(1); + } + return date; + } + } + + + diff --git a/lidee-core/src/main/resources/mapper/bygl/ByglByfaMapper.xml b/lidee-core/src/main/resources/mapper/bygl/ByglByfaMapper.xml index c3ab81a..310745b 100644 --- a/lidee-core/src/main/resources/mapper/bygl/ByglByfaMapper.xml +++ b/lidee-core/src/main/resources/mapper/bygl/ByglByfaMapper.xml @@ -28,4 +28,15 @@ is_deleted = 0 AND dev_type = #{dev_type} AND dev_no = #{dev_code} + + + diff --git a/lidee-core/src/main/resources/mapper/bygl/ByglByjhMapper.xml b/lidee-core/src/main/resources/mapper/bygl/ByglByjhMapper.xml index 0307378..5e98546 100644 --- a/lidee-core/src/main/resources/mapper/bygl/ByglByjhMapper.xml +++ b/lidee-core/src/main/resources/mapper/bygl/ByglByjhMapper.xml @@ -5,7 +5,7 @@