|
|
@@ -6,6 +6,7 @@ import cn.start.tz.framework.common.pojo.CommonResult;
|
|
|
import cn.start.tz.framework.ip.core.Area;
|
|
|
import cn.start.tz.framework.ip.core.utils.AreaUtils;
|
|
|
import cn.start.tz.framework.mybatis.core.query.LambdaQueryWrapperX;
|
|
|
+import cn.start.tz.framework.web.core.util.WebFrameworkUtils;
|
|
|
import cn.start.tz.module.pressure.enums.AcceptOrderStatusEnum;
|
|
|
import cn.start.tz.module.pressure.enums.TaskOrderStatusEnum;
|
|
|
import cn.start.tz.module.pressure2.controller.admin.appointmentconfirmorder.vo.AppointmentSubmitVO;
|
|
|
@@ -21,6 +22,10 @@ import cn.start.tz.module.pressure2.dal.dataobject.equipboilerschedulingitem.Equ
|
|
|
import cn.start.tz.module.pressure2.dal.dataobject.equipboilerschedulingitem.EquipBoilerSchedulingItemDO;
|
|
|
import cn.start.tz.module.pressure2.dal.dataobject.equipboilerschedulinguser.EquipBoilerSchedulingUserDO;
|
|
|
import cn.start.tz.module.pressure2.dal.mysql.appointmentconfirmorder.AppointmentConfirmOrderMapper;
|
|
|
+import cn.start.tz.module.pressure2.dal.mysql.appointmentconfirmorderrefuseitem.AppointmentConfirmOrderRefuseItemMapper;
|
|
|
+import cn.start.tz.module.pressure2.dal.dataobject.appointmentconfirmorderrefuseitem.AppointmentConfirmOrderRefuseItemDO;
|
|
|
+import cn.start.tz.module.pressure2.controller.admin.equipboilerscheduling.vo.BoilerRefuseItemReqVO;
|
|
|
+import cn.start.tz.module.pressure2.controller.admin.equipboilerscheduling.vo.BoilerRefuseItemResultVO;
|
|
|
import cn.start.tz.module.pressure2.dal.mysql.boilerappointmentconfirmorderitem.BoilerAppointmentConfirmOrderItemMapper;
|
|
|
import cn.start.tz.module.pressure2.dal.mysql.boilerappointmentconfirmorderuser.BoilerAppointmentConfirmOrderUserMapper;
|
|
|
import cn.start.tz.module.pressure2.dal.mysql.equipboiler.EquipBoilerMapper;
|
|
|
@@ -41,9 +46,12 @@ import cn.start.tz.module.system.api.clientunit.ClientUnitApi;
|
|
|
import cn.start.tz.module.system.api.clientunit.dto.ClientUnitDTO;
|
|
|
import cn.start.tz.module.system.api.dept.DeptApi;
|
|
|
import cn.start.tz.module.system.api.dept.dto.DeptRespDTO;
|
|
|
+import cn.start.tz.module.system.api.dict.DictDataApi;
|
|
|
+import cn.start.tz.module.system.api.dict.dto.DictDataRespDTO;
|
|
|
import cn.start.tz.module.system.api.user.AdminUserApi;
|
|
|
import cn.start.tz.module.system.api.user.dto.AdminUserRespDTO;
|
|
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.context.annotation.Lazy;
|
|
|
@@ -55,6 +63,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
|
import java.time.LocalDate;
|
|
|
+import java.time.LocalDateTime;
|
|
|
import java.util.*;
|
|
|
import java.util.concurrent.atomic.AtomicReference;
|
|
|
import java.util.function.Function;
|
|
|
@@ -81,6 +90,7 @@ import static cn.start.tz.module.system.enums.ErrorCodeConstants.EQUIP_CONTAINER
|
|
|
*/
|
|
|
@Service
|
|
|
@Validated
|
|
|
+@Slf4j
|
|
|
public class EquipBoilerSchedulingServiceImpl extends ServiceImpl<EquipBoilerSchedulingMapper, EquipBoilerSchedulingDO> implements EquipBoilerSchedulingService {
|
|
|
|
|
|
private static final Double tzAddressLat = 23.17578;
|
|
|
@@ -99,8 +109,10 @@ public class EquipBoilerSchedulingServiceImpl extends ServiceImpl<EquipBoilerSch
|
|
|
|
|
|
@Resource
|
|
|
private AppointmentConfirmOrderMapper appointmentConfirmOrderMapper;
|
|
|
+
|
|
|
@Resource
|
|
|
private BoilerAppointmentConfirmOrderItemMapper appointmentConfirmOrderItemMapper;
|
|
|
+
|
|
|
@Resource
|
|
|
private BoilerAppointmentConfirmOrderUserMapper appointmentConfirmOrderUserMapper;
|
|
|
|
|
|
@@ -128,12 +140,19 @@ public class EquipBoilerSchedulingServiceImpl extends ServiceImpl<EquipBoilerSch
|
|
|
|
|
|
@Resource
|
|
|
private AdminUserApi adminUserApi;
|
|
|
+
|
|
|
@Resource
|
|
|
private ClientUnitApi clientUnitApi;
|
|
|
|
|
|
+ @Resource
|
|
|
+ private DictDataApi dictDataApi;
|
|
|
+
|
|
|
@Resource
|
|
|
private DeptApi deptApi;
|
|
|
|
|
|
+ @Resource
|
|
|
+ private AppointmentConfirmOrderRefuseItemMapper appointmentConfirmOrderRefuseItemMapper;
|
|
|
+
|
|
|
@Override
|
|
|
public PageResult<EquipBoilerSchedulingRespVO> getEquipBoilerSchedulingPage(EquipBoilerSchedulingPageReqVO pageReqVO) {
|
|
|
|
|
|
@@ -153,6 +172,49 @@ public class EquipBoilerSchedulingServiceImpl extends ServiceImpl<EquipBoilerSch
|
|
|
item.setEquipDistrictName(area.getName());
|
|
|
}
|
|
|
});
|
|
|
+
|
|
|
+ // 收集所有设备ID,批量查询拒检信息
|
|
|
+ Set<String> allEquipIds = new HashSet<>();
|
|
|
+ for (EquipBoilerSchedulingRespVO item : list) {
|
|
|
+ if (StringUtils.isNotBlank(item.getId())) {
|
|
|
+ allEquipIds.add(item.getId());
|
|
|
+ }
|
|
|
+ if (StringUtils.isNotBlank(item.getInEquipIds())) {
|
|
|
+ Arrays.stream(item.getInEquipIds().split(","))
|
|
|
+ .filter(StringUtils::isNotBlank)
|
|
|
+ .forEach(allEquipIds::add);
|
|
|
+ }
|
|
|
+ if (StringUtils.isNotBlank(item.getOutEquipIds())) {
|
|
|
+ Arrays.stream(item.getOutEquipIds().split(","))
|
|
|
+ .filter(StringUtils::isNotBlank)
|
|
|
+ .forEach(allEquipIds::add);
|
|
|
+ }
|
|
|
+ if (StringUtils.isNotBlank(item.getPreEquipIds())) {
|
|
|
+ Arrays.stream(item.getPreEquipIds().split(","))
|
|
|
+ .filter(StringUtils::isNotBlank)
|
|
|
+ .forEach(allEquipIds::add);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 批量查询拒检记录,按equipId分组
|
|
|
+ Map<String, AppointmentConfirmOrderRefuseItemDO> refuseMap = new HashMap<>();
|
|
|
+ if (!allEquipIds.isEmpty()) {
|
|
|
+ List<AppointmentConfirmOrderRefuseItemDO> refuseItems = appointmentConfirmOrderRefuseItemMapper.selectList(
|
|
|
+ new LambdaQueryWrapperX<AppointmentConfirmOrderRefuseItemDO>()
|
|
|
+ .in(AppointmentConfirmOrderRefuseItemDO::getEquipId, allEquipIds));
|
|
|
+ for (AppointmentConfirmOrderRefuseItemDO refuseItem : refuseItems) {
|
|
|
+ refuseMap.putIfAbsent(refuseItem.getEquipId(), refuseItem);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 填充拒检原因到结果列表
|
|
|
+ for (EquipBoilerSchedulingRespVO item : list) {
|
|
|
+ AppointmentConfirmOrderRefuseItemDO refuseItem = refuseMap.get(item.getId());
|
|
|
+ if (refuseItem != null) {
|
|
|
+ item.setRefuseReasonDict(refuseItem.getReasonDict());
|
|
|
+ item.setRefuseReason(refuseItem.getReason());
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
pageResult.setList(list);
|
|
|
@@ -180,6 +242,32 @@ public class EquipBoilerSchedulingServiceImpl extends ServiceImpl<EquipBoilerSch
|
|
|
item.setEquipDistrictName(area.getName());
|
|
|
}
|
|
|
});
|
|
|
+
|
|
|
+ // 批量查询拒检记录,填充 refuseReasonDict
|
|
|
+ List<String> equipIds = list.stream()
|
|
|
+ .map(EquipBoilerSchedulingBoilersRespVO::getId)
|
|
|
+ .filter(Objects::nonNull)
|
|
|
+ .distinct()
|
|
|
+ .toList();
|
|
|
+ if (!equipIds.isEmpty()) {
|
|
|
+ LambdaQueryWrapperX<AppointmentConfirmOrderRefuseItemDO> refuseQuery = new LambdaQueryWrapperX<>();
|
|
|
+ refuseQuery.in(AppointmentConfirmOrderRefuseItemDO::getEquipId, equipIds);
|
|
|
+ List<AppointmentConfirmOrderRefuseItemDO> refuseItems = appointmentConfirmOrderRefuseItemMapper.selectList(refuseQuery);
|
|
|
+ if (CollUtil.isNotEmpty(refuseItems)) {
|
|
|
+ Map<String, AppointmentConfirmOrderRefuseItemDO> refuseMap = new HashMap<>();
|
|
|
+ for (AppointmentConfirmOrderRefuseItemDO refuseItem : refuseItems) {
|
|
|
+ if (refuseItem.getEquipId() != null) {
|
|
|
+ refuseMap.putIfAbsent(refuseItem.getEquipId(), refuseItem);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ for (EquipBoilerSchedulingBoilersRespVO item : list) {
|
|
|
+ AppointmentConfirmOrderRefuseItemDO refuse = refuseMap.get(item.getId());
|
|
|
+ if (refuse != null) {
|
|
|
+ item.setRefuseReasonDict(refuse.getReasonDict());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
pageResult.setList(list);
|
|
|
@@ -935,4 +1023,109 @@ public class EquipBoilerSchedulingServiceImpl extends ServiceImpl<EquipBoilerSch
|
|
|
}
|
|
|
|
|
|
}
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<BoilerRefuseItemResultVO> refuseItem(BoilerRefuseItemReqVO reqVO) {
|
|
|
+ List<BoilerRefuseItemResultVO> results = new ArrayList<>();
|
|
|
+
|
|
|
+ if (reqVO.getEquipIds() == null || reqVO.getEquipIds().isEmpty()) {
|
|
|
+ return results;
|
|
|
+ }
|
|
|
+
|
|
|
+ List<DictDataRespDTO> checkTypeDTOS = dictDataApi.getDictDataList("pressure_inspection_nature_boiler").getData();
|
|
|
+ List<DictDataRespDTO> boilerStatusDTOS = dictDataApi.getDictDataList("system_equip_boiler_status").getData();
|
|
|
+
|
|
|
+ for (String equipId : reqVO.getEquipIds()) {
|
|
|
+ try {
|
|
|
+ EquipBoilerDO boiler = equipBoilerMapper.selectById(equipId);
|
|
|
+ if (boiler == null) {
|
|
|
+ results.add(BoilerRefuseItemResultVO.fail(equipId, null, "锅炉设备信息不存在"));
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ String equipCode = boiler.getEquipCode();
|
|
|
+
|
|
|
+ // 检查是否已在拒检池中(审核中状态)
|
|
|
+ LambdaQueryWrapperX<AppointmentConfirmOrderRefuseItemDO> query = new LambdaQueryWrapperX<>();
|
|
|
+ query.eq(AppointmentConfirmOrderRefuseItemDO::getEquipId, equipId);
|
|
|
+ query.in(AppointmentConfirmOrderRefuseItemDO::getStatus, List.of(0, 1));
|
|
|
+ List<AppointmentConfirmOrderRefuseItemDO> existingItems = appointmentConfirmOrderRefuseItemMapper.selectList(query);
|
|
|
+ if (CollUtil.isNotEmpty(existingItems)) {
|
|
|
+ results.add(BoilerRefuseItemResultVO.fail(equipId, equipCode, "该设备已在拒检池中,状态为【审核中】,请处理后再进行设备上报"));
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 创建拒检记录
|
|
|
+ AppointmentConfirmOrderRefuseItemDO refuseItem = new AppointmentConfirmOrderRefuseItemDO();
|
|
|
+ refuseItem.setEquipId(equipId);
|
|
|
+
|
|
|
+ refuseItem.setCheckType(100); //锅炉的都是定检
|
|
|
+ Integer checkType = reqVO.getCheckType();
|
|
|
+ if (CollUtil.isNotEmpty(checkTypeDTOS)){
|
|
|
+ String checkTypeName = checkTypeDTOS.stream()
|
|
|
+ .filter(dict -> dict.getValue().equals(checkType.toString()))
|
|
|
+ .map(DictDataRespDTO::getLabel)
|
|
|
+ .findFirst()
|
|
|
+ .orElse("");
|
|
|
+ refuseItem.setCheckTypeName(checkTypeName);
|
|
|
+ }
|
|
|
+
|
|
|
+ refuseItem.setReasonDict(reqVO.getReasonDict());
|
|
|
+ refuseItem.setReason(reqVO.getReason());
|
|
|
+ refuseItem.setUnitName(boiler.getUnitName());
|
|
|
+ refuseItem.setUnitCode(boiler.getUnitCode());
|
|
|
+ refuseItem.setEquipMainType(200); // 200=锅炉
|
|
|
+ refuseItem.setStatus(0);
|
|
|
+ refuseItem.setRejectionSource(1); // 1=窗口约检
|
|
|
+
|
|
|
+ refuseItem.setSubmitId(getLoginUserId());
|
|
|
+ refuseItem.setSubmitTime(LocalDateTime.now());
|
|
|
+
|
|
|
+ refuseItem.setEquipCode(equipCode);
|
|
|
+ refuseItem.setEquipDistrict(boiler.getEquipDistrict());
|
|
|
+ refuseItem.setEquipStreet(boiler.getEquipStreet());
|
|
|
+ refuseItem.setEquipType(boiler.getType());
|
|
|
+ refuseItem.setAreaType(boiler.getAreaType());
|
|
|
+ refuseItem.setUnitCode(boiler.getUnitCode());
|
|
|
+ refuseItem.setUnitName(boiler.getUnitName());
|
|
|
+ refuseItem.setUseRegisterNo(boiler.getUseRegisterNo());
|
|
|
+ refuseItem.setProductNo(boiler.getProductCode());
|
|
|
+ refuseItem.setEquipStatus(boiler.getStatus());
|
|
|
+ if (CollUtil.isNotEmpty(boilerStatusDTOS)){
|
|
|
+ String equipStatusName = boilerStatusDTOS.stream()
|
|
|
+ .filter(dict -> dict.getValue().equals(boiler.getStatus()))
|
|
|
+ .map(DictDataRespDTO::getLabel)
|
|
|
+ .findFirst()
|
|
|
+ .orElse("");
|
|
|
+ refuseItem.setEquipStatusName(equipStatusName);
|
|
|
+ }
|
|
|
+ refuseItem.setContact(boiler.getContact());
|
|
|
+ refuseItem.setContactPhone(boiler.getContactPhone());
|
|
|
+
|
|
|
+ refuseItem.setIsReportCity(false);
|
|
|
+
|
|
|
+ appointmentConfirmOrderRefuseItemMapper.insert(refuseItem);
|
|
|
+
|
|
|
+ // 更新锅炉排期标识
|
|
|
+ EquipBoilerDO updateBoiler = new EquipBoilerDO();
|
|
|
+ updateBoiler.setId(equipId);
|
|
|
+ if (Integer.valueOf(100).equals(reqVO.getCheckType())) {
|
|
|
+ updateBoiler.setHasInternal(false);
|
|
|
+ } else if (Integer.valueOf(200).equals(reqVO.getCheckType())) {
|
|
|
+ updateBoiler.setHasExternal(false);
|
|
|
+ } else if (Integer.valueOf(300).equals(reqVO.getCheckType())) {
|
|
|
+ updateBoiler.setHasPressure(false);
|
|
|
+ }
|
|
|
+ equipBoilerMapper.updateById(updateBoiler);
|
|
|
+
|
|
|
+ results.add(BoilerRefuseItemResultVO.success(equipId, equipCode));
|
|
|
+
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("[refuseItem] 锅炉设备上报失败, equipId={}", equipId, e);
|
|
|
+ results.add(BoilerRefuseItemResultVO.fail(equipId, null, "处理失败: " + e.getMessage()));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return results;
|
|
|
+ }
|
|
|
}
|