From a4e30eb43219ccc05b0826f49ecd5a3b639cf0c0 Mon Sep 17 00:00:00 2001
From: lyh <925863403@qq.com>
Date: 星期四, 28 八月 2025 09:27:20 +0800
Subject: [PATCH] 修改计算百分比位置
---
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamSecondMaintenanceOrderServiceImpl.java | 249 +++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 245 insertions(+), 4 deletions(-)
diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamSecondMaintenanceOrderServiceImpl.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamSecondMaintenanceOrderServiceImpl.java
index 429a12f..423acba 100644
--- a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamSecondMaintenanceOrderServiceImpl.java
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamSecondMaintenanceOrderServiceImpl.java
@@ -9,24 +9,30 @@
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import lombok.extern.slf4j.Slf4j;
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.constant.DataBaseConstant;
import org.jeecg.common.exception.JeecgBootException;
import org.jeecg.common.system.vo.LoginUser;
+import org.jeecg.common.util.DateUtils;
import org.jeecg.common.util.oConvertUtils;
import org.jeecg.modules.eam.aspect.annotation.EquipmentHistoryLog;
import org.jeecg.modules.eam.constant.*;
+import org.jeecg.modules.eam.dto.EamSecondMaintenanceOrderExport;
import org.jeecg.modules.eam.entity.*;
+import org.jeecg.modules.eam.mapper.EamEquipmentMapper;
+import org.jeecg.modules.eam.mapper.EamMaintenanceStandardMapper;
import org.jeecg.modules.eam.mapper.EamSecondMaintenanceOrderMapper;
import org.jeecg.modules.eam.request.EamSecondMaintenanceQuery;
import org.jeecg.modules.eam.request.EamSecondMaintenanceRequest;
import org.jeecg.modules.eam.service.*;
+import org.jeecg.modules.eam.tree.FindsEquipmentEamCenterUtil;
+import org.jeecg.modules.eam.vo.EamEquipmentTree;
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;
@@ -35,6 +41,7 @@
import org.jeecg.modules.flowable.service.IFlowTaskService;
import org.jeecg.modules.system.entity.BaseFactory;
import org.jeecg.modules.system.entity.BaseFactoryUser;
+import org.jeecg.modules.system.mapper.BaseFactoryMapper;
import org.jeecg.modules.system.service.IBaseFactoryService;
import org.jeecg.modules.system.service.IBaseFactoryUserService;
import org.jeecg.modules.system.service.ISysUserService;
@@ -45,7 +52,9 @@
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
+import java.text.SimpleDateFormat;
import java.util.*;
+import java.util.function.Function;
import java.util.stream.Collectors;
/**
@@ -55,12 +64,12 @@
* @Version: V1.0
*/
@Service("IEamSecondMaintenanceOrderService")
+@Slf4j
public class EamSecondMaintenanceOrderServiceImpl extends ServiceImpl<EamSecondMaintenanceOrderMapper, EamSecondMaintenanceOrder> implements IEamSecondMaintenanceOrderService, FlowCallBackServiceI {
@Resource
private EamSecondMaintenanceOrderMapper eamSecondMaintenanceOrderMapper;
@Autowired
private IEamSecondMaintenanceOrderDetailService secondMaintenanceOrderDetailService;
-
@Autowired
private FlowCommonService flowCommonService;
@Autowired
@@ -85,10 +94,21 @@
private IEamBaseHFCodeService hfCodeService;
@Autowired
private IEamMaintenanceStandardDetailService eamMaintenanceStandardDetailService;
+ @Autowired
+ private EamMaintenanceStandardMapper eamMaintenanceStandardMapper;
+ @Resource
+ private BaseFactoryMapper baseFactoryMapper;
+ @Autowired
+ private IEamSecondMaintenanceOrderDetailService eamSecondMaintenanceOrderDetailService;
+ @Autowired
+ private EamSecondMaintenanceOrderAsyncService eamSecondMaintenanceOrderAsyncService;
+ @Autowired
+ private IEamFactorySecondMaintPlanService factorySecondMaintPlanService;
@Override
public IPage<EamSecondMaintenanceOrder> queryPageList(Page<EamSecondMaintenanceOrder> page, EamSecondMaintenanceQuery query) {
QueryWrapper<EamSecondMaintenanceOrder> queryWrapper = new QueryWrapper<>();
+ queryWrapper.eq("wmo.del_flag",CommonConstant.DEL_FLAG_0.toString());
//鐢ㄦ埛鏁版嵁鏉冮檺
LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
if (sysUser == null) {
@@ -148,6 +168,146 @@
return eamSecondMaintenanceOrderMapper.queryPageList(page, queryWrapper);
}
+ /**
+ * 鎵归噺鏂板鏍戠粨鏋�
+ */
+ @Override
+ public List<EamEquipmentTree> getTree(){
+ LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+ if (sysUser == null) return Collections.emptyList();
+
+ // 鏋勫缓閫氱敤鏌ヨ鏉′欢
+ QueryWrapper<EamMaintenanceStandard> baseQuery = new QueryWrapper<EamMaintenanceStandard>()
+ .eq("ems.maintenance_category", "SECOND_MAINTENANCE")
+ .eq("ems.standard_status", MaintenanceStandardStatusEnum.START.name())
+ .eq("ems.del_flag", CommonConstant.DEL_FLAG_0.toString());
+
+ // 搴旂敤鏁版嵁鏉冮檺杩囨护
+ applyDataPermissionFilter(sysUser, baseQuery);
+
+ // 鍗曟鏌ヨ璁惧鍒楄〃
+ List<EamEquipment> equipmentList = eamMaintenanceStandardMapper.queryList(baseQuery);
+ if (CollectionUtils.isEmpty(equipmentList)) {
+ return Collections.emptyList();
+ }
+
+ // 鑾峰彇鍏宠仈鐨勫伐鍘備唬鐮�
+ Set<String> factoryOrgCodes = equipmentList.stream()
+ .map(EamEquipment::getFactoryOrgCode)
+ .collect(Collectors.toSet());
+
+ // 鍗曟鏌ヨ鎵�鏈夊伐鍘傛暟鎹紙鍖呭惈瀹屾暣鏍戠粨鏋勶級
+ List<BaseFactory> allFactories = baseFactoryService.list(
+ new LambdaQueryWrapper<BaseFactory>()
+ .eq(BaseFactory::getDelFlag, CommonConstant.DEL_FLAG_0.toString())
+ .orderByAsc(BaseFactory::getSorter));
+
+ // 鎻愬彇鏉冮檺鍏宠仈鐨勫伐鍘傝妭鐐笽D锛堝寘鍚墍鏈夌埗鑺傜偣锛�
+ Set<String> authorizedFactoryIds = extractAuthorizedFactoryIds(
+ allFactories, factoryOrgCodes);
+
+ // 杩囨护鍑烘湁鏁堝伐鍘傜粨鏋�
+ List<BaseFactory> validFactories = allFactories.stream()
+ .filter(f -> authorizedFactoryIds.contains(f.getId()))
+ .collect(Collectors.toList());
+
+ // ===鏋勫缓璁惧鏍� ===
+ Map<String, List<EamEquipment>> equipmentMap = equipmentList.stream()
+ .collect(Collectors.groupingBy(EamEquipment::getFactoryOrgCode));
+
+ // 鏋勫缓鍩虹鏍�
+ List<EamEquipmentTree> treeList = FindsEquipmentEamCenterUtil.wrapEquipmentBaseFactoryTreeList(validFactories);
+
+ // 濉厖璁惧鏁版嵁
+ populateEquipmentNodes(treeList, equipmentMap);
+ return treeList;
+ }
+
+ // 搴旂敤鏁版嵁鏉冮檺鏉′欢锛堝叡鐢ㄦ柟娉曪級
+ private void applyDataPermissionFilter(LoginUser user, QueryWrapper<EamMaintenanceStandard> query) {
+ if (StringUtils.isNotBlank(user.getEamEquipmentIds())) {
+ List<String> equipmentIds = Arrays.asList(user.getEamEquipmentIds().split(","));
+ query.in("e.equipment_code", equipmentIds);
+ } else {
+ List<BaseFactoryUser> factoryUsers = baseFactoryUserService.list(
+ new LambdaQueryWrapper<BaseFactoryUser>()
+ .eq(BaseFactoryUser::getUserId, user.getId()));
+
+ if (CollectionUtils.isNotEmpty(factoryUsers)) {
+ Set<String> factoryIds = factoryUsers.stream()
+ .map(BaseFactoryUser::getFactoryId)
+ .collect(Collectors.toSet());
+
+ Set<String> factoryCodes = baseFactoryService.listByIds(factoryIds).stream()
+ .map(BaseFactory::getOrgCode)
+ .collect(Collectors.toSet());
+
+ query.in("e.factory_org_code", factoryCodes);
+ }
+ }
+ }
+
+ // 鎻愬彇鎺堟潈宸ュ巶ID
+ private Set<String> extractAuthorizedFactoryIds(List<BaseFactory> allFactories, Set<String> authOrgCodes) {
+ Set<String> result = new HashSet<>();
+ // 鏋勫缓ID->宸ュ巶鐨勬槧灏�
+ Map<String, BaseFactory> factoryMap = allFactories.stream()
+ .collect(Collectors.toMap(BaseFactory::getId, Function.identity()));
+
+ // 閫嗗悜鏌ユ壘鐖惰妭鐐归摼
+ for (BaseFactory factory : allFactories) {
+ if (authOrgCodes.contains(factory.getOrgCode())) {
+ collectParentIds(factoryMap, factory.getId(), result);
+ }
+ }
+ return result;
+ }
+
+ // 閫掑綊鏀堕泦鐖惰妭鐐笽D
+ private void collectParentIds(Map<String, BaseFactory> factoryMap, String currentId, Set<String> idSet) {
+ if (StringUtils.isEmpty(currentId) || idSet.contains(currentId)) return;
+
+ idSet.add(currentId);
+ BaseFactory factory = factoryMap.get(currentId);
+ if (factory != null && StringUtils.isNotBlank(factory.getParentId())) {
+ collectParentIds(factoryMap, factory.getParentId(), idSet);
+ }
+ }
+
+ // 濉厖璁惧鑺傜偣锛堥潪閫掑綊锛�
+ private void populateEquipmentNodes(List<EamEquipmentTree> treeList,
+ Map<String, List<EamEquipment>> equipmentMap) {
+ for (EamEquipmentTree node : treeList) {
+
+ String orgCode = resolveOrgCodeFromTree(node); // 闇�瀹炵幇璇ラ�昏緫
+
+ // 鍏宠仈璁惧鏁版嵁
+ List<EamEquipment> devices = equipmentMap.getOrDefault(orgCode, Collections.emptyList());
+ if (!CollectionUtils.isEmpty(devices)) {
+ for (EamEquipment device : devices) {
+ EamEquipmentTree deviceNode = new EamEquipmentTree().convert(device);
+ deviceNode.setParentId(node.getKey());
+ deviceNode.setType(2);
+ deviceNode.setLeaf(true); // 鏄庣‘鏍囪涓哄彾瀛愯妭鐐�
+ node.getChildren().add(deviceNode);
+ }
+ // 鍙湁褰撳瓨鍦ㄨ澶囨椂鎵嶆爣璁颁负闈炲彾瀛�
+ node.setLeaf(false);
+ }
+
+ // 缁х画澶勭悊瀛愯妭鐐癸紙宸ュ巶灞傜骇锛�
+ if (!CollectionUtils.isEmpty(node.getChildren())) {
+ populateEquipmentNodes(node.getChildren(), equipmentMap);
+ }
+ }
+ }
+
+ // 瑙f瀽鏂规硶
+ private String resolveOrgCodeFromTree(EamEquipmentTree node) {
+ BaseFactory factory =baseFactoryMapper.selectById(node.getKey());
+ return factory != null ? factory.getOrgCode() : null;
+ }
+
@Override
@Transactional(rollbackFor = Exception.class)
public boolean addMaintenance(EamSecondMaintenanceRequest request) {
@@ -187,6 +347,11 @@
});
secondMaintenanceOrderDetailService.saveBatch(requestTableDetailList);
}
+ // 鎻掑叆棣栭〉浜屼繚鍏昏鍒�
+ // 浣跨敤 SimpleDateFormat 鐩存帴鏍煎紡鍖栦负鈥測yyy骞碝M鏈堚�濇牸寮�
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy骞碝M鏈�");
+ String formattedDate = sdf.format(order.getMaintenanceDate());
+ factorySecondMaintPlanService.add(order.getEquipmentId(), formattedDate);
return true;
}
@@ -204,9 +369,14 @@
if (!SecondMaintenanceStatusEnum.WAIT_MAINTENANCE.name().equals(entity.getMaintenanceStatus())) {
throw new JeecgBootException("鍙湁寰呬繚鍏荤姸鎬佺殑鏁版嵁鎵嶅彲缂栬緫锛�");
}
+ // 缂栬緫棣栭〉浜屼繚鍏昏鍒�
+ // 浣跨敤 SimpleDateFormat 鐩存帴鏍煎紡鍖栦负鈥測yyy骞碝M鏈堚�濇牸寮�
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy骞碝M鏈�");
+ String oldFormattedDate = sdf.format(entity.getMaintenanceDate());
+ String newFormattedDate = sdf.format(request.getMaintenanceDate());
+ factorySecondMaintPlanService.dateChange(entity.getEquipmentId(), oldFormattedDate,newFormattedDate);
entity.setMaintenanceDate(request.getMaintenanceDate());
entity.setRemark(request.getRemark());
-
eamSecondMaintenanceOrderMapper.updateById(entity);
//鍒ゆ柇鏄惁瀛樺湪淇濆吇浜� 濡傛灉瀛樺湪鍒欏惎鍔ㄦ祦绋�
if (StringUtils.isNotBlank(entity.getOperator())) {
@@ -236,7 +406,6 @@
eamEquipmentExtendService.updateEquipmentMaintenanceStatus(entity.getEquipmentId(), EquipmentMaintenanceStatus.UNDER_SECOND_MAINTENANCE.name());
return result.isSuccess();
}
-
}
return true;
}
@@ -512,9 +681,81 @@
}
//淇濆瓨宸ュ崟
eamSecondMaintenanceOrderMapper.updateById(entity);
+ //寮傛鐢熸垚涓嬫浜屼繚宸ュ崟
+ if (SecondMaintenanceStatusEnum.COMPLETE.name().equals(entity.getMaintenanceStatus())) {
+ try {
+ eamSecondMaintenanceOrderAsyncService.asyncGenerateNextMaintenanceOrder(entity.getId());
+ } catch (Exception e) {
+ log.error("瑙﹀彂寮傛鐢熸垚涓嬫宸ュ崟澶辫触锛屽伐鍗旾D: {}", entity.getId(), e);
+ }
+ }
+
return entity;
}
+ /**
+ * 鎵归噺鎵撳嵃浜屼繚宸ュ崟
+ * @param ids
+ * @return
+ */
+ @Override
+ public List<EamSecondMaintenanceOrderExport> export(String ids){
+ QueryWrapper<EamSecondMaintenanceOrderExport> queryWrapper = new QueryWrapper<>();
+ queryWrapper.eq("wmo.del_flag",CommonConstant.DEL_FLAG_0.toString());
+ queryWrapper.eq("wmo.maintenance_status",SecondMaintenanceStatusEnum.COMPLETE.name());
+ //鐢ㄦ埛鏁版嵁鏉冮檺
+ LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+ if (sysUser == null) {
+ return new ArrayList<>();
+ }
+ if (StringUtils.isNotBlank(sysUser.getEamEquipmentIds())) {
+ //閫夋嫨浜嗚澶囷紝鏍规嵁璁惧id杩囨护璁惧
+ List<String> equipArr = Arrays.asList(sysUser.getEamEquipmentIds().split(","));
+ queryWrapper.in("e.equipment_code", equipArr);
+ } else {
+ //娌℃湁閫夋嫨璁惧锛屾牴鎹腑蹇冭繃婊よ澶�
+ List<BaseFactoryUser> baseFactoryUserList=baseFactoryUserService.
+ list(new LambdaQueryWrapper<BaseFactoryUser>().eq(BaseFactoryUser::getUserId,sysUser.getId()));
+ if(!CollectionUtils.isEmpty(baseFactoryUserList)){
+ Set<String> factoryIds = baseFactoryUserList.stream().map(BaseFactoryUser::getFactoryId).collect(Collectors.toSet());
+ Set<String> factoryCode= baseFactoryService.listByIds(factoryIds).stream().map(BaseFactory::getOrgCode).collect(Collectors.toSet());
+ queryWrapper.in("e.factory_org_code", factoryCode);
+ } else {
+ return new ArrayList<>();
+ }
+ }
+ //鏌ヨ鏉′欢杩囨护
+ if (StrUtil.isNotEmpty(ids)) {
+ List<String> idList = Arrays.asList(ids.split(","));
+ queryWrapper.in("wmo.id", idList);
+ } else {
+ queryWrapper.orderByDesc("wmo.create_time");
+ }
+ List<EamSecondMaintenanceOrderExport> eamSecondMaintenanceOrderExports=eamSecondMaintenanceOrderMapper.queryList(queryWrapper);
+ //濉厖瀵瑰簲浜屼繚鏄庣粏
+ if (!eamSecondMaintenanceOrderExports.isEmpty()){
+ eamSecondMaintenanceOrderExports.forEach(item->{
+ //缁翠慨浜哄憳淇濆吇鍐呭
+ List<EamSecondMaintenanceOrderDetail> maintenanceOrderDetails=eamSecondMaintenanceOrderDetailService.
+ list(new QueryWrapper<EamSecondMaintenanceOrderDetail>().eq("order_id",item.getId()).
+ eq("item_category",EamMaintenanceStandardDetailCategory.REPAIRER_MAINTENANCE.name())
+ .orderByAsc("item_code"));
+ if (!maintenanceOrderDetails.isEmpty()){
+ item.setMaintenanceOrderDetails(maintenanceOrderDetails);
+ }
+ //鎿嶄綔浜哄憳淇濆吇鍐呭
+ List<EamSecondMaintenanceOrderDetail> operationOrderDetails=eamSecondMaintenanceOrderDetailService.
+ list(new QueryWrapper<EamSecondMaintenanceOrderDetail>().eq("order_id",item.getId()).
+ eq("item_category",EamMaintenanceStandardDetailCategory.OPERATOR_MAINTENANCE.name())
+ .orderByAsc("item_code"));
+ if (!operationOrderDetails.isEmpty()) {
+ item.setOperationOrderDetails(operationOrderDetails);
+ }
+ });
+ }
+ return eamSecondMaintenanceOrderExports;
+ }
+
private boolean isUserAuthorized(FlowMyBusiness flowMyBusiness, LoginUser user) {
List<String> todoUsers = JSON.parseArray(flowMyBusiness.getTodoUsers(), String.class);
return todoUsers != null && todoUsers.contains(user.getUsername());
--
Gitblit v1.9.3