lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/constant/ReportRepairEnum.java
@@ -7,4 +7,15 @@ WAIT_CONFIRM, // å¾ ç¡®è®¤ COMPLETE, // 已宿 ABOLISH, // å·²ä½åº ; public static ReportRepairEnum getInstance(String code) { ReportRepairEnum[] values = ReportRepairEnum.values(); for (ReportRepairEnum value : values) { if (value.name().equals(code)) { return value; } } return null; } } lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/EamRepairOrderController.java
@@ -1,32 +1,21 @@ package org.jeecg.modules.eam.controller; import java.util.Arrays; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import cn.hutool.core.util.StrUtil; import org.apache.commons.lang3.StringUtils; import org.apache.shiro.SecurityUtils; import org.jeecg.common.api.vo.Result; import org.jeecg.common.constant.CommonConstant; import org.jeecg.common.system.query.QueryGenerator; import org.jeecg.common.aspect.annotation.AutoLog; import org.jeecg.common.system.vo.LoginUser; import org.jeecg.modules.eam.constant.BusinessCodeConst; import org.jeecg.modules.eam.constant.ReportRepairEnum; import org.jeecg.modules.eam.entity.EamRepairOrder; import org.jeecg.modules.eam.entity.EamReportRepair; import org.jeecg.modules.eam.request.EamRepairOrderQuery; import org.jeecg.modules.eam.request.EamRepairOrderRequest; import org.jeecg.modules.eam.request.EamRepairOrderResponse; import org.jeecg.modules.eam.service.IEamRepairOrderService; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import lombok.extern.slf4j.Slf4j; import org.jeecg.common.system.base.controller.JeecgController; import org.jeecg.modules.eam.service.IEamReportRepairService; import org.jeecg.modules.flowable.apithird.service.FlowCommonService; import org.jeecg.modules.mdc.util.DateUtils; import org.jeecg.modules.system.service.ISysBusinessCodeRuleService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import org.springframework.web.servlet.ModelAndView; import io.swagger.annotations.Api; @@ -82,18 +71,27 @@ } /** * æ§è¡ç»´ä¿® * æçå¾ å æ§è¡/å®¡æ¹ * * @param eamRepairOrder * @param request * @return */ @AutoLog(value = "维修工å-æ§è¡") @ApiOperation(value = "维修工å-æ§è¡", notes = "维修工å-æ§è¡") @AutoLog(value = "维修工å-æ§è¡/审æ¹") @ApiOperation(value = "维修工å-æ§è¡/审æ¹", notes = "维修工å-æ§è¡/审æ¹") @PostMapping(value = "/perform") public Result<?> perform(@RequestBody EamRepairOrder eamRepairOrder) { // eamRepairOrderService.updateById(eamRepairOrder); return Result.OK("æ§è¡æå!"); public Result<?> perform(@RequestBody EamRepairOrderRequest request) { if (request == null) { return Result.error("审æ¹ç对象ä¸è½ä¸ºç©ºï¼"); } // æ£æ¥è¯·æ±åæ° if (StrUtil.isBlank(request.getTaskId()) || StrUtil.isBlank(request.getDataId()) || StrUtil.isBlank(request.getInstanceId())) { return Result.error("审æ¹ä»»å¡é误æä¸åå¨ï¼"); } EamRepairOrder b = eamRepairOrderService.perform(request); if(b == null) { return Result.error("æä½å¤±è´¥ï¼"); } return Result.OK("æä½æå!"); } /** @@ -106,7 +104,7 @@ @ApiOperation(value = "维修工å-éè¿idæ¥è¯¢", notes = "维修工å-éè¿idæ¥è¯¢") @GetMapping(value = "/queryById") public Result<?> queryById(@RequestParam(name = "id", required = true) String id) { EamRepairOrder eamRepairOrder = eamRepairOrderService.getById(id); EamRepairOrderResponse eamRepairOrder = eamRepairOrderService.findById(id); return Result.OK(eamRepairOrder); } lxzn-module-eam/src/main/java/org/jeecg/modules/eam/request/EamRepairOrderQuery.java
@@ -1,6 +1,7 @@ package org.jeecg.modules.eam.request; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; @@ -24,5 +25,6 @@ /** * 设å¤ç¼ç */ @ApiModelProperty(value = "设å¤ç¼ç ") private String equipmentCode; } lxzn-module-eam/src/main/java/org/jeecg/modules/eam/request/EamRepairOrderRequest.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,67 @@ package org.jeecg.modules.eam.request; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; import org.jeecg.common.api.vo.FileUploadResult; import org.jeecg.common.aspect.annotation.Dict; import org.jeecg.modules.flowable.domain.vo.FlowTaskVo; import org.jeecgframework.poi.excel.annotation.Excel; import java.io.Serializable; import java.util.List; /** * @Author: Lius * @CreateTime: 2025-04-21 * @Description: */ @Data @EqualsAndHashCode(callSuper = false) @Accessors(chain = true) public class EamRepairOrderRequest extends FlowTaskVo implements Serializable { private static final long serialVersionUID = 3844096033304425984L; /**主é®*/ @ApiModelProperty(value = "主é®") private String id; /**设å¤ID*/ @ApiModelProperty(value = "设å¤ID") private String equipmentId; /** * ç»´ä¿®ç¶æ */ @ApiModelProperty(value = "ç»´ä¿®ç¶æ") private String repairStatus; /** * æ¯å¦éè¦é¢ç¨å¤ä»¶ 1:æ¯ 0:å¦ */ @ApiModelProperty(value = "æ¯å¦éè¦é¢ç¨å¤ä»¶") private Integer status; /** * æ éåå */ @ApiModelProperty(value = "æ éåå ") private String faultReason; /** * ç»´ä¿®ç»ææè¿° */ @ApiModelProperty(value = "ç»´ä¿®ç»ææè¿°") private String repairDescription; /** * ç §çæä»¶ids;id以éå·åé */ @ApiModelProperty(value = "ç §çæä»¶ids;id以éå·åé") private String imageFiles; /**ç»´ä¿®å¾ç*/ @ApiModelProperty(value = "ç»´ä¿®å¾çéå") private List<FileUploadResult> imageFilesResult; } lxzn-module-eam/src/main/java/org/jeecg/modules/eam/request/EamRepairOrderResponse.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,80 @@ package org.jeecg.modules.eam.request; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; import org.jeecg.common.aspect.annotation.Dict; import org.jeecg.modules.eam.entity.EamRepairOrder; import org.jeecg.modules.eam.entity.EamReportRepair; import org.jeecgframework.poi.excel.annotation.Excel; import org.springframework.beans.BeanUtils; import org.springframework.format.annotation.DateTimeFormat; import java.io.Serializable; import java.util.Date; /** * @Author: Lius * @CreateTime: 2025-04-21 * @Description: */ @Data @EqualsAndHashCode(callSuper = false) @Accessors(chain = true) @ApiModel(value="è¿å对象", description="维修工å详ç»") public class EamRepairOrderResponse extends EamRepairOrder implements Serializable { private static final long serialVersionUID = 367152649525625307L; /** * æ éå¼å§æ¶é´ */ @ApiModelProperty(value = "æ éå¼å§æ¶é´") @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date faultStartTime; /** * æ¯å¦åæº */ @ApiModelProperty(value = "æ¯å¦åæº") @Dict(dicCode = "breakdown_flag") private String breakdownFlag; /** * æ éç®ç§° */ @ApiModelProperty(value = "æ éç®ç§°") private String faultName; /** * æ éåç±» */ @ApiModelProperty(value = "æ éåç±»") @Dict(dicCode = "fault_reason_category") private String faultType; /** * æ éæè¿° */ @ApiModelProperty(value = "æ éæè¿°") private String faultDescription; /** * æ¥ä¿®ç¶æ */ @ApiModelProperty(value = "æ¥ä¿®ç¶æ") @Dict(dicCode = "report_repair_status") private String reportStatus; /** * ç §çæä»¶ids;id以éå·åé */ @ApiModelProperty(value = "æ¥ä¿®ç §ç") private String reportImageFiles; /** * 夿³¨ */ @Excel(name = "夿³¨", width = 15) @ApiModelProperty(value = "夿³¨") private String remark; } lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IEamRepairOrderService.java
@@ -5,6 +5,8 @@ import org.jeecg.modules.eam.entity.EamRepairOrder; import com.baomidou.mybatisplus.extension.service.IService; import org.jeecg.modules.eam.request.EamRepairOrderQuery; import org.jeecg.modules.eam.request.EamRepairOrderRequest; import org.jeecg.modules.eam.request.EamRepairOrderResponse; /** * @Description: 维修工å @@ -26,4 +28,13 @@ * @param eamRepairOrder */ void saveRepairOrder(EamRepairOrder eamRepairOrder); /** * æµç¨æä½ * @param request * @return */ EamRepairOrder perform(EamRepairOrderRequest request); EamRepairOrderResponse findById(String id); } lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamRepairOrderServiceImpl.java
@@ -1,28 +1,48 @@ package org.jeecg.modules.eam.service.impl; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.commons.lang3.StringUtils; import org.apache.shiro.SecurityUtils; import org.flowable.engine.TaskService; import org.flowable.task.api.Task; import org.jeecg.common.api.vo.FileUploadResult; import org.jeecg.common.api.vo.Result; import org.jeecg.common.constant.CommonConstant; import org.jeecg.common.exception.JeecgBootException; import org.jeecg.common.system.vo.LoginUser; import org.jeecg.modules.eam.aspect.annotation.EquipmentHistoryLog; import org.jeecg.modules.eam.constant.BusinessCodeConst; import org.jeecg.modules.eam.constant.EquipmentOperationTagEnum; import org.jeecg.modules.eam.constant.ReportRepairEnum; import org.jeecg.modules.eam.constant.WeekMaintenanceStatusEnum; import org.jeecg.modules.eam.entity.EamEquipment; import org.jeecg.modules.eam.entity.EamRepairOrder; import org.jeecg.modules.eam.entity.EamReportRepair; import org.jeecg.modules.eam.mapper.EamRepairOrderMapper; import org.jeecg.modules.eam.request.EamRepairOrderQuery; import org.jeecg.modules.eam.request.EamRepairOrderRequest; import org.jeecg.modules.eam.request.EamRepairOrderResponse; import org.jeecg.modules.eam.service.IEamEquipmentService; import org.jeecg.modules.eam.service.IEamRepairOrderService; import org.jeecg.modules.eam.service.IEamReportRepairService; import org.jeecg.modules.flowable.apithird.business.entity.FlowMyBusiness; import org.jeecg.modules.flowable.apithird.business.service.IFlowMyBusinessService; import org.jeecg.modules.flowable.apithird.service.FlowCallBackServiceI; import org.jeecg.modules.flowable.apithird.service.FlowCommonService; import org.jeecg.modules.flowable.service.IFlowDefinitionService; import org.jeecg.modules.flowable.service.IFlowTaskService; import org.jeecg.modules.mdc.util.DateUtils; import org.jeecg.modules.system.service.ISysBusinessCodeRuleService; import org.jeecg.modules.system.service.ISysUserService; import org.jeecg.modules.system.vo.UserSelector; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -53,6 +73,18 @@ @Resource private IEamEquipmentService eamEquipmentService; @Resource private IFlowMyBusinessService flowMyBusinessService; @Resource private TaskService taskService; @Resource private IFlowTaskService flowTaskService; @Resource private ISysUserService sysUserService; /** * å页å表 @@ -113,6 +145,160 @@ } } /** * æµç¨æä½ * * @param request * @return */ @Override @Transactional(rollbackFor = Exception.class) @EquipmentHistoryLog(operationTag = EquipmentOperationTagEnum.REPAIRED, businessTable = "eam_repair_order") public EamRepairOrder perform(EamRepairOrderRequest request) { EamRepairOrder eamRepairOrder = this.baseMapper.selectById(request.getId()); if (eamRepairOrder == null) { throw new JeecgBootException("审æ¹çæ°æ®å·²å é¤ï¼è¯·å·æ°éè¯ï¼"); } // è·åå½åç»å½ç¨æ· LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); if (user == null || StrUtil.isBlank(user.getId())) { throw new JeecgBootException("æªè·åå°ç»å½ç¨æ·ï¼è¯·éæ°ç»å½ååè¯ï¼"); } request.setAssignee(user.getUsername()); // è·åæµç¨ä¸å¡è®°å½ FlowMyBusiness flowMyBusiness = flowMyBusinessService.getFlowMyBusiness(request.getInstanceId()); if (flowMyBusiness == null) { throw new JeecgBootException("æµç¨å®ä¾ä¸åå¨ï¼è¯·å·æ°åéè¯ï¼"); } boolean userAuthorized = isUserAuthorized(flowMyBusiness, user); if (!userAuthorized) { throw new JeecgBootException("ç¨æ·æ ææä½æ¤ä»»å¡ï¼è¯·å·æ°åéè¯ï¼"); } // 认é¢ä»»å¡ if (!claimTask(flowMyBusiness.getTaskId(), user)) { throw new JeecgBootException("ä»»å¡ä¸åå¨ã已宿æå·²è¢«ä»äººè®¤é¢ï¼"); } EamEquipment equipment = eamEquipmentService.getById(request.getEquipmentId()); if (equipment == null) { throw new JeecgBootException("设å¤ä¸åå¨ï¼è¯·æ£æ¥ï¼"); } ReportRepairEnum status = ReportRepairEnum.getInstance(request.getRepairStatus()); if (status == null) { return null; } //æµç¨åé Map<String, Object> values = new HashMap<>(); switch (status) { case UNDER_REPAIR: //ç»´ä¿®ä¸ï¼ä¸ä¸æ¥ 夿æ¯å¦éè¦å¤ä»¶, éè¦å¤ä»¶è½¬è®¾å¤ç®¡çåé¢ç¨å¤ä»¶, ä¸éè¦å转å°è®¾å¤æ¥ä¿®åç¡®è®¤ç»´ä¿®å®æ if (request.getStatus() == 1) { // éè¦ List<UserSelector> userSelectors = sysUserService.selectOperatorList(equipment.getEquipmentCode(), equipment.getOrgId(), BusinessCodeConst.PCR0004); if (CollectionUtil.isEmpty(userSelectors)) { throw new JeecgBootException("è®¾å¤æªåé 设å¤ç®¡çåï¼æ æ³è¿å ¥ä¸çº§å®¡æ¹ï¼"); } values.put("dataId", eamRepairOrder.getId()); values.put("organization", "维修工åè¿å ¥çå¤ä»¶ç¶æ"); values.put("comment", "维修工åè¿å ¥çå¤ä»¶ç¶æ"); values.put("NextAssignee", userSelectors); values.put("status", 1); request.setComment("维修工åè¿å ¥çå¤ä»¶ç¶æ"); eamRepairOrder.setRepairStatus(ReportRepairEnum.WAIT_SPARES.name()); } else { // ä¸éè¦ EamReportRepair eamReportRepair = eamReportRepairService.getById(eamRepairOrder.getReportId()); values.put("dataId", eamRepairOrder.getId()); values.put("organization", "维修工åè¿å ¥æ¥ä¿®åç¡®è®¤é¶æ®µ"); values.put("comment", "维修工åè¿å ¥æ¥ä¿®åç¡®è®¤é¶æ®µ"); values.put("NextAssignee", eamReportRepair.getCreateBy()); values.put("status", 0); request.setComment("维修工åè¿å ¥æ¥ä¿®åç¡®è®¤é¶æ®µ"); eamRepairOrder.setRepairStatus(ReportRepairEnum.WAIT_CONFIRM.name()); eamRepairOrder.setFaultReason(request.getFaultReason()); eamRepairOrder.setRepairDescription(request.getRepairDescription()); // å¤çéä»¶ if (CollectionUtil.isNotEmpty(request.getImageFilesResult())) { List<FileUploadResult> fileUploadResultList = request.getImageFilesResult(); ObjectMapper mapper = new ObjectMapper(); try { String referenceFile = mapper.writeValueAsString(fileUploadResultList); eamRepairOrder.setImageFiles(referenceFile); } catch (JsonProcessingException e) { log.error("JSON转æ¢å¤±è´¥ï¼" + e.getMessage(), e); } } } break; case WAIT_SPARES: // çå¤ä»¶, 管çå确认å¤ä»¶å°ä½ï¼æµç¨è½¬å°ç»´ä¿®åç»§ç»ç»´ä¿®,ç¶æè½¬ä¸ºç»´ä¿®ä¸ values.put("dataId", eamRepairOrder.getId()); values.put("organization", "维修工åè¿å ¥ç»´ä¿®åç»§ç»ç»´ä¿®é¶æ®µ"); values.put("comment", "维修工åè¿å ¥ç»´ä¿®åç»§ç»ç»´ä¿®é¶æ®µ"); values.put("NextAssignee", eamRepairOrder.getRepairer()); values.put("status", 0); request.setComment("维修工åè¿å ¥ç»´ä¿®åç»§ç»ç»´ä¿®é¶æ®µ"); eamRepairOrder.setRepairStatus(ReportRepairEnum.UNDER_REPAIR.name()); break; case WAIT_CONFIRM: // å¾ ç¡®è®¤, ç»´ä¿®åç»´ä¿®å®æï¼æ¥ä¿®äººç¡®è®¤ç»ææµç¨ EamReportRepair eamReportRepair = eamReportRepairService.getById(eamRepairOrder.getReportId()); values.put("dataId", eamRepairOrder.getId()); values.put("organization", "ç»´ä¿®å·¥åæµç¨ç»æ"); values.put("comment", "ç»´ä¿®å·¥åæµç¨ç»æ"); values.put("NextAssignee", eamReportRepair.getCreateBy()); values.put("status", 0); request.setComment("维修工åè¿å ¥æ¥ä¿®åç¡®è®¤é¶æ®µ"); eamRepairOrder.setRepairStatus(ReportRepairEnum.COMPLETE.name()); eamRepairOrder.setActualEndTime(new Date()); break; } request.setValues(values); // 宿æµç¨ä»»å¡ Result result = flowTaskService.complete(request); if (!result.isSuccess()) { throw new JeecgBootException("审æ¹å¤±è´¥ï¼è¯·å·æ°æ¥çï¼"); } //ä¿åå·¥å this.baseMapper.updateById(eamRepairOrder); return eamRepairOrder; } @Override public EamRepairOrderResponse findById(String id) { EamRepairOrderResponse eamRepairOrderResponse = new EamRepairOrderResponse(); EamRepairOrder eamRepairOrder = this.baseMapper.selectById(id); BeanUtils.copyProperties(eamRepairOrder, eamRepairOrderResponse); EamReportRepair eamReportRepair = eamReportRepairService.getById(eamRepairOrder.getReportId()); BeanUtils.copyProperties(eamReportRepair, eamRepairOrderResponse); eamRepairOrderResponse.setReportImageFiles(eamReportRepair.getImageFiles()); return eamRepairOrderResponse; } private boolean claimTask(String taskId, LoginUser user) { Task task = taskService.createTaskQuery().taskId(taskId).singleResult(); if (task == null) { return false; } if (task.getAssignee() != null && !task.getAssignee().equals(user.getUsername())) { return false; } taskService.claim(taskId, user.getUsername()); return true; } /** * å¤æç¨æ·æ¯å¦æ¥ææ¤æé * @param flowMyBusiness * @param user * @return */ private boolean isUserAuthorized(FlowMyBusiness flowMyBusiness, LoginUser user) { List<String> todoUsers = JSON.parseArray(flowMyBusiness.getTodoUsers(), String.class); return todoUsers != null && todoUsers.contains(user.getUsername()); } @Override public void afterFlowHandle(FlowMyBusiness business) { @@ -132,7 +318,7 @@ @Override public List<String> flowCandidateUsernamesOfTask(String taskNameId, Map<String, Object> values) { //è·åä¸ä¸æ¥å¤ç人 Object object=values.get("NextAssignee"); Object object = values.get("NextAssignee"); return (List<String>) object; } } lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcOeeInfoServiceImpl.java
@@ -169,8 +169,8 @@ @Transactional(rollbackFor = Exception.class) public void computeOee(MdcOeeComputeVo mdcOeeComputeVo) { List<MdcOeeInfo> result = new ArrayList<>(); String startDate = mdcOeeComputeVo.getStartDate(); String endDate = mdcOeeComputeVo.getEndDate(); String startDate = mdcOeeComputeVo.getStartTime(); String endDate = mdcOeeComputeVo.getEndTime(); List<String> dateList = DateUtils.getDatesStringList(DateUtils.getShortDate(startDate), DateUtils.getShortDate(endDate)); if (!dateList.isEmpty()) { //è·å设å¤å表 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/vo/MdcOeeComputeVo.java
@@ -8,6 +8,6 @@ */ @Data public class MdcOeeComputeVo { private String startDate; private String endDate; private String startTime; private String endTime; } lxzn-module-system/lxzn-system-start/src/main/java/org/jeecg/JeecgSystemApplication.java
@@ -1,7 +1,7 @@ package org.jeecg; import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure; import lombok.extern.slf4j.Slf4j; import org.flowable.spring.boot.eventregistry.EventRegistryServicesAutoConfiguration; import org.jeecg.common.util.oConvertUtils; import org.springframework.boot.SpringApplication; import org.springframework.boot.actuate.autoconfigure.security.servlet.ManagementWebSecurityAutoConfiguration; @@ -21,7 +21,7 @@ */ @Slf4j @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class, ManagementWebSecurityAutoConfiguration.class, EventRegistryServicesAutoConfiguration.class}) ManagementWebSecurityAutoConfiguration.class, DruidDataSourceAutoConfigure.class}) public class JeecgSystemApplication extends SpringBootServletInitializer { @Override