装备管理 youhua

This commit is contained in:
lizhenhua 2025-07-04 15:06:28 +08:00
parent cbb674da58
commit ad8a12f8ad
10 changed files with 267 additions and 51 deletions

View File

@ -0,0 +1,23 @@
package com.bonus.material.equipment.domain;
import lombok.Data;
@Data
public class NewOwnerdomin {
private int companyId; // 公司ID
private String maName; // 装备类型ID或名称
private String companyName; // 公司名称
private Integer maNum; // 数量
public NewOwnerdomin() {
// 必须有无参构造函数
}
// 构造函数用于复制
public NewOwnerdomin(NewOwnerdomin o) {
this.companyId = o.companyId;
this.maName = o.maName;
this.maNum = o.maNum;
this.companyName = o.companyName;
}
}

View File

@ -0,0 +1,11 @@
package com.bonus.material.equipment.domain;
import lombok.Data;
@Data
public class NewmydevInfo {
private String companyId;
private String typeId;
private String typeName;
private Integer ownCount;
}

View File

@ -1,6 +1,8 @@
package com.bonus.material.equipment.mapper;
import com.bonus.material.equipment.domain.DeptEquipmentConfig;
import io.lettuce.core.dynamic.annotation.Param;
import org.apache.ibatis.annotations.Delete;
import java.util.List;
@ -8,4 +10,7 @@ public interface DeptEquipmentConfigMapper {
DeptEquipmentConfig selectConfig(Long deptId, Long typeId);
List<DeptEquipmentConfig> selectConfigByDept(Long deptId);
int insertOrUpdateBatch( DeptEquipmentConfig deptEquipmentConfig);
int deleteByDeptIdAndTypeId(DeptEquipmentConfig team);
}

View File

@ -26,4 +26,6 @@ public interface SysDeptMapper {
List<DeptTreeSelect> getTree();
List<EquipmentDetail> detailsInfo(EquipmentDetail equipmentDetail);
List<NewmydevInfo> listFromDevInfo(String companyId);
}

View File

@ -23,6 +23,12 @@ public class DeptEquipmentConfigServiceImpl implements IDeptEquipmentConfigServi
public int saveBatch(DeptEquipmentConfig configList) {
configList.setTypeId(configList.getEquipmentId());
configList.setConfigValue(configList.getBasicConfig());
//直接先删除对应的设备信息 通过公司id 和设备id进行删除
DeptEquipmentConfig team = new DeptEquipmentConfig();
team.setDeptId(configList.getDeptId());
team.setTypeId(configList.getTypeId());
mapper.deleteByDeptIdAndTypeId(team);
return mapper.insertOrUpdateBatch(configList);
}
}

View File

@ -74,73 +74,160 @@ public class SysDeptServiceImpl implements ISysDeptService {
}
@Override
public List<DeptConfigRateSummary> selectDeptConfigRatePivot(DeptConfigRateSummary entity)
{
// 1. 获取配置率数据包含公司设备类型满分值基本配置数量设备名称
List<DeptConfigRateSummary> configList = mapper.selectDeptConfigRatePivot(entity);
public List<DeptConfigRateSummary> selectDeptConfigRatePivot(DeptConfigRateSummary entity) {
// 1. 查询配置率项每条代表一个公司+设备+评分项
List<DeptConfigRateSummary> configList = mapper.selectDeptConfigRatePivot(entity);
// 2. 获取所有设备数据包含设备名称来源自有数量
// 2. 查询 ma_own_manage 表中原始设备数据
List<Ownerdomin> ownListFromManage = ownerMapper.list(null);
List<Ownerdomin> ownList = ownerMapper.list(null);
// 3. 查询 ma_dev_info 表中聚合后的设备数据包含公司名
List<NewOwnerdomin> ownListFromDevInfo = ownerMapper.listGrouped();
// 3. 构建索引公司ID + 设备名称 设备记录
Map<String, List<Ownerdomin>> ownIndex = new HashMap<>();
for (Ownerdomin device : ownList) {
String key = device.getCompanyId() + "_" + device.getMaName();
ownIndex.computeIfAbsent(key, k -> new ArrayList<>()).add(device);
}
// 4. 构建设备索引 Map<公司ID_设备名, List<Ownerdomin>>
Map<String, List<Ownerdomin>> ownIndex = new HashMap<>();
// 4. 构建公司 汇总结果 Map
Map<String, DeptConfigRateSummary> companyMap = new LinkedHashMap<>();
for (Ownerdomin device : ownListFromManage) {
String key = device.getCompanyId() + "_" + device.getMaName();
ownIndex.computeIfAbsent(key, k -> new ArrayList<>()).add(device);
}
for (DeptConfigRateSummary config : configList) {
String company = config.getCompanyName();
String type = config.getConfigType().toPlainString(); // 0:线路 1:电缆 2:变电
String maName = config.getDeptName();
BigDecimal orderCount = config.getOrderCount();
Long configCompanyId = config.getCompanyId(); // 当前配置项的公司ID
for (NewOwnerdomin dev : ownListFromDevInfo) {
String key = dev.getCompanyId() + "_" + dev.getMaName();
List<Ownerdomin> existList = ownIndex.get(key);
// 构建唯一键公司ID + 设备名称
String key = configCompanyId + "_" + maName;
if (existList != null && !existList.isEmpty()) {
for (Ownerdomin device : existList) {
device.setMaNum(device.getMaNum() + dev.getMaNum());
}
} else {
Ownerdomin newDevice = new Ownerdomin();
newDevice.setCompanyId((long) dev.getCompanyId());
newDevice.setMaName(dev.getMaName());
newDevice.setMaNum(dev.getMaNum());
ownIndex.computeIfAbsent(key, k -> new ArrayList<>()).add(newDevice);
}
}
// 获取匹配的设备列表
List<Ownerdomin> sameCompanyDevices = ownIndex.getOrDefault(key, Collections.emptyList());
// 5. 构建公司 汇总对象 Map<String, DeptConfigRateSummary>
Map<String, DeptConfigRateSummary> companyMap = new LinkedHashMap<>();
// 计算当前这一项的得分 - 使用同公司设备
BigDecimal score = computeScoreByMaName(orderCount, sameCompanyDevices, config);
for (DeptConfigRateSummary config : configList) {
String company = config.getCompanyName();
String type = config.getConfigType().toPlainString(); // 0:线路 1:电缆 2:变电
String maName = config.getDeptName();
BigDecimal orderCount = config.getOrderCount();
Long configCompanyId = config.getCompanyId();
// 获取或创建公司维度的统计对象
DeptConfigRateSummary dto = companyMap.computeIfAbsent(company, k -> {
String key = configCompanyId + "_" + maName;
List<Ownerdomin> sameCompanyDevices = ownIndex.getOrDefault(key, Collections.emptyList());
BigDecimal score = computeScoreByMaName(orderCount, sameCompanyDevices, config);
DeptConfigRateSummary dto = companyMap.computeIfAbsent(company, k -> {
DeptConfigRateSummary d = new DeptConfigRateSummary();
d.setDeptName(company);
d.setCompanyId(configCompanyId);
d.setCompanyName(company);
d.setValueA(BigDecimal.ZERO);
d.setValueB(BigDecimal.ZERO);
d.setValueC(BigDecimal.ZERO);
return d;
});
switch (type) {
case "0":
dto.setValueA(dto.getValueA().add(score));
break;
case "1":
dto.setValueB(dto.getValueB().add(score));
break;
case "2":
dto.setValueC(dto.getValueC().add(score));
break;
}
}
// 5.x补充未出现在 configList 的公司/设备项
Set<String> configKeys = configList.stream()
.map(c -> c.getCompanyId() + "_" + c.getDeptName())
.collect(Collectors.toSet());
for (Map.Entry<String, List<Ownerdomin>> entry : ownIndex.entrySet()) {
String key = entry.getKey();
if (configKeys.contains(key)) continue;
List<Ownerdomin> devices = entry.getValue();
if (devices == null || devices.isEmpty()) continue;
Ownerdomin first = devices.get(0);
Long companyId = first.getCompanyId();
String maName = first.getMaName();
// devInfo 中找公司名称
Optional<NewOwnerdomin> matchDev = ownListFromDevInfo.stream()
.filter(d -> d.getCompanyId()==(new Long(companyId).intValue()) && d.getMaName().equals(maName))
.findFirst();
String companyName = matchDev.map(NewOwnerdomin::getCompanyName).orElse("未知公司");
DeptConfigRateSummary dto = companyMap.computeIfAbsent(companyName, k -> {
DeptConfigRateSummary d = new DeptConfigRateSummary();
d.setDeptName(companyName);
d.setCompanyId(companyId);
d.setCompanyName(companyName);
d.setValueA(BigDecimal.ZERO);
d.setValueB(BigDecimal.ZERO);
d.setValueC(BigDecimal.ZERO);
return d;
});
// 默认作为线路设备记入 valueA或根据 maName 判断类型再分类可拓展
BigDecimal score = computeScoreByMaName(BigDecimal.ZERO, devices, null);
dto.setValueA(dto.getValueA().add(score));
}
// 6. 返回汇总结果
return new ArrayList<>(companyMap.values());
}
// 可选添加没有配置项但有设备的公司
private void addCompaniesWithoutConfig(List<DeptConfigRateSummary> configList,
Map<String, DeptConfigRateSummary> companyMap,
Map<String, List<Ownerdomin>> ownIndex) {
// 获取所有配置表中出现的公司ID
Set<Long> configCompanyIds = configList.stream()
.map(DeptConfigRateSummary::getCompanyId)
.collect(Collectors.toSet());
// 获取所有设备公司ID
Set<Long> deviceCompanyIds = ownIndex.keySet().stream()
.map(key -> Long.parseLong(key.split("_")[0]))
.collect(Collectors.toSet());
// 找出有设备但没配置的公司ID
Set<Long> missingCompanyIds = new HashSet<>(deviceCompanyIds);
missingCompanyIds.removeAll(configCompanyIds);
// 为这些公司创建空汇总对象
for (Long companyId : missingCompanyIds) {
// 获取公司名称需要查询或从设备中提取
String companyName = "未知公司"; // 实际应从设备数据中获取
companyMap.computeIfAbsent(companyName, k -> {
DeptConfigRateSummary d = new DeptConfigRateSummary();
d.setDeptName(company);
d.setCompanyId(config.getCompanyId());
d.setCompanyName(company);
d.setDeptName(companyName);
d.setCompanyId(companyId);
d.setCompanyName(companyName);
d.setValueA(BigDecimal.ZERO);
d.setValueB(BigDecimal.ZERO);
d.setValueC(BigDecimal.ZERO);
return d;
});
// 根据 type 累加对应字段的分数
switch (type) {
case "0": // 线路
dto.setValueA(dto.getValueA().add(score));
break;
case "1": // 电缆
dto.setValueB(dto.getValueB().add(score));
break;
case "2": // 变电
dto.setValueC(dto.getValueC().add(score));
break;
}
}
// 5. 返回结果列表
return new ArrayList<>(companyMap.values());
}
private BigDecimal computeScoreByMaName(BigDecimal ordercount,List<Ownerdomin> owns, DeptConfigRateSummary config) {
if (config == null || owns == null || owns.isEmpty()) return BigDecimal.ZERO;
@ -184,9 +271,51 @@ private BigDecimal computeScoreByMaName(BigDecimal ordercount,List<Ownerdomin> o
@Override
public List<EquipmentDetail> detailsInfo(EquipmentDetail equipmentDetail) {
return mapper.detailsInfo(equipmentDetail);
// 1. 原查询返回 EquipmentDetail 列表
List<EquipmentDetail> equipmentDetails = mapper.detailsInfo(equipmentDetail);
// 2. 新增查询返回 NewmydevInfo 列表ma_dev_info 自有设备数据
List<NewmydevInfo> devInfoList = mapper.listFromDevInfo(equipmentDetail.getCompanyId());
// 3. 建立原有设备索引key = companyId + "_" + name
Map<String, EquipmentDetail> indexMap = new LinkedHashMap<>();
for (EquipmentDetail item : equipmentDetails) {
String key = item.getCompanyId() + "_" + item.getName();
indexMap.put(key, item);
}
// 4. 遍历 devInfoList合并到 equipmentDetails
for (NewmydevInfo devItem : devInfoList) {
String key = devItem.getCompanyId() + "_" + devItem.getTypeName();
EquipmentDetail existing = indexMap.get(key);
if (existing != null) {
// 已存在累加自有数量 own
if (existing.getOwn() == null) {
existing.setOwn(devItem.getOwnCount());
} else {
existing.setOwn(
existing.getOwn() + (devItem.getOwnCount() == null ? 0 : devItem.getOwnCount())
);
}
} else {
// 不存在新增一条 EquipmentDetail赋值必要字段
EquipmentDetail newItem = new EquipmentDetail();
newItem.setCompanyId(devItem.getCompanyId());
newItem.setName(devItem.getTypeName());
newItem.setOwn(devItem.getOwnCount());
// 其他字段可根据业务决定是否赋默认值
newItem.setDesc("来自装备配置管理");
equipmentDetails.add(newItem);
indexMap.put(key, newItem);
}
}
return equipmentDetails;
}
/**
* 查询部门管理数据
*

View File

@ -1,6 +1,7 @@
package com.bonus.material.owner.mapper;
import com.bonus.material.equipment.domain.NewOwnerdomin;
import com.bonus.material.owner.domain.Ownerdomin;
import java.util.List;
@ -15,4 +16,6 @@ public interface OwnerMapper {
Integer edit(Ownerdomin ownerdomin);
Integer del(Ownerdomin ownerdomin);
List<NewOwnerdomin> listGrouped();
}

View File

@ -1,6 +1,10 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.bonus.material.equipment.mapper.DeptEquipmentConfigMapper">
<delete id="deleteByDeptIdAndTypeId" parameterType="DeptEquipmentConfig">
DELETE FROM ma_dept_config WHERE dept_id = #{deptId} AND type_id = #{typeId}
</delete>
<select id="selectConfigByDept" resultType="DeptEquipmentConfig">
SELECT * FROM dept_equipment_config WHERE dept_id = #{deptId}
</select>

View File

@ -154,8 +154,7 @@
d.dept_id AS companyId,
mt.type_name AS NAME,
d.config_description as `desc`,
d.config_rate as `value`,
SUM(CAST(d.config_rate AS DECIMAL(10, 2))) AS `value`,
(
SELECT
CASE WHEN COUNT(1) > 0 THEN 1 ELSE 0 END
@ -210,6 +209,23 @@
d.config_type,
d.type_id;
</select>
<select id="listFromDevInfo" resultType="com.bonus.material.equipment.domain.NewmydevInfo">
SELECT
md.own_co AS companyId,
mt2.type_id AS typeId,
mt2.type_name as typeName,
SUM( 1 ) AS ownCount
FROM
ma_dev_info md
LEFT JOIN ma_type mt ON mt.type_id = md.type_id
LEFT JOIN ma_type mt2 on mt.parent_id = mt2.type_id
WHERE
md.is_active = '1'
AND md.own_co = 221
GROUP BY
mt.type_id
</select>
</mapper>

View File

@ -60,4 +60,21 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</if>
</where>
</select>
<select id="listGrouped" resultType="com.bonus.material.equipment.domain.NewOwnerdomin">
SELECT
md.own_co AS companyId,
sd.dept_name as companyName,
mt.type_name AS maName,
COUNT(*) AS maNum
FROM
ma_dev_info md
LEFT JOIN ma_type mt ON mt.type_id = md.type_id
LEFT JOIN sys_dept sd ON sd.dept_id = md.own_co
WHERE
md.is_active = '1'
GROUP BY
md.own_co,
mt.type_name
</select>
</mapper>