硬件版本数量计算修正

This commit is contained in:
SjS 2025-04-11 18:41:51 +08:00
parent 578adc465c
commit 490c15ad18
9 changed files with 181 additions and 1 deletions

View File

@ -2,6 +2,7 @@ package com.ruoyi.bst.complaint.service.impl;
import java.util.List;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.ServiceUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.bst.complaint.mapper.ComplaintMapper;
@ -56,6 +57,8 @@ public class ComplaintServiceImpl implements ComplaintService
public int insertComplaint(Complaint complaint)
{
complaint.setCreateTime(DateUtils.getNowDate());
ServiceUtil.assertion(complaint.getType()==null,"类型不能为空");
ServiceUtil.assertion(complaint.getContact()==null,"联系方式不能为空");
return complaintMapper.insertComplaint(complaint);
}

View File

@ -1,7 +1,15 @@
package com.ruoyi.bst.hardwareVersion.domain;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
@Data
public class HardwareVersionQuery extends HardwareVersion{
@ApiModelProperty("硬件版本列表")
private List<Long> hardwareVersionIds;
}

View File

@ -85,4 +85,7 @@ public interface HardwareVersionMapper
*/
int countUnBoundNum(Long id);
List<HardwareVersionVO> selectBoundCount(HardwareVersionQuery query);
List<HardwareVersionVO> selectUnBoundCount(HardwareVersionQuery query);
}

View File

@ -81,6 +81,26 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
select count(1) from bst_device where hardware_version_id = #{hardwareVersionId} and mch_id is null
</select>
<select id="selectBoundCount" resultType="com.ruoyi.bst.hardwareVersion.domain.HardwareVersionVO">
select bhv.id,count(1) as Bound
from bst_hardware_version bhv
left join bst_device bd
on bhv.id = bd.hardware_version_id
where bd.mch_id is not null
and bd.hardware_version_id is not null
group by bhv.id
</select>
<select id="selectUnBoundCount" resultType="com.ruoyi.bst.hardwareVersion.domain.HardwareVersionVO">
select bhv.id,count(1) as unBound
from bst_hardware_version bhv
left join bst_device bd
on bhv.id = bd.hardware_version_id
where bd.mch_id is null
and bd.hardware_version_id is not null
group by bhv.id
</select>
<insert id="insertHardwareVersion" parameterType="HardwareVersion" useGeneratedKeys="true" keyProperty="id">
insert into bst_hardware_version
<trim prefix="(" suffix=")" suffixOverrides=",">

View File

@ -0,0 +1,10 @@
package com.ruoyi.bst.hardwareVersion.service;
import com.ruoyi.bst.hardwareVersion.domain.HardwareVersionVO;
import java.util.List;
public interface HardwareVersionAssembler {
void assembleRevenue(List<HardwareVersionVO> list);
}

View File

@ -62,4 +62,8 @@ public interface HardwareVersionService
public int deleteHardwareVersionById(Long id);
List<HardwareVersionVO> computeNumber(HardwareVersionQuery query);
List<HardwareVersionVO> selectBoundCount(HardwareVersionQuery query);
List<HardwareVersionVO> selectUnBoundCount(HardwareVersionQuery query);
}

View File

@ -0,0 +1,117 @@
package com.ruoyi.bst.hardwareVersion.service.impl;
import com.ruoyi.bst.hardwareVersion.domain.HardwareVersion;
import com.ruoyi.bst.hardwareVersion.domain.HardwareVersionQuery;
import com.ruoyi.bst.hardwareVersion.domain.HardwareVersionVO;
import com.ruoyi.bst.hardwareVersion.service.HardwareVersionAssembler;
import com.ruoyi.bst.hardwareVersion.service.HardwareVersionService;
import com.ruoyi.common.utils.collection.CollectionUtils;
import org.checkerframework.checker.units.qual.A;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@Service
public class HardwareVersionAssemblerImpl implements HardwareVersionAssembler {
@Autowired
private HardwareVersionService hardwareVersionService;
@Override
public void assembleRevenue(List<HardwareVersionVO> list) {
if (CollectionUtils.isEmptyElement(list)) {
return;
}
// 子版本
// 计算已绑定设备数量
this.assembleBoundCount(list);
// 计算未绑定设备数量
this.assembleUnboundCount(list);
// 计算已录入的设备数量
this.assembleEnteredNum(list);
// 父版本
// 累加子版本的数据
this.aggregateParentData(list);
// 计算丢算的设备数量
this.assembleLost(list);
}
// 拼接已绑定数量
private void assembleBoundCount(List<HardwareVersionVO> list) {
if (CollectionUtils.isEmpty(list)) {
return;
}
HardwareVersionQuery query = new HardwareVersionQuery();
query.setHardwareVersionIds(list.stream().map(HardwareVersionVO::getId).collect(Collectors.toList()));
List<HardwareVersionVO> hardwareVersionList = hardwareVersionService.selectBoundCount(query);
Map<Long, Integer> idToBoundMap = hardwareVersionList.stream().collect(Collectors.toMap(HardwareVersionVO::getId, HardwareVersion::getBound));
list.forEach(vo->{
vo.setBound(idToBoundMap.getOrDefault(vo.getId(), 0));
});
}
// 拼接未绑定数量
private void assembleUnboundCount(List<HardwareVersionVO> list) {
if (CollectionUtils.isEmpty(list)) {
return;
}
HardwareVersionQuery query = new HardwareVersionQuery();
query.setHardwareVersionIds(list.stream().map(HardwareVersionVO::getId).collect(Collectors.toList()));
List<HardwareVersionVO> hardwareVersionList = hardwareVersionService.selectUnBoundCount(query);
Map<Long, Integer> idToBoundMap = hardwareVersionList.stream().collect(Collectors.toMap(HardwareVersionVO::getId, HardwareVersion::getUnBound));
list.forEach(vo->{
vo.setUnBound(idToBoundMap.getOrDefault(vo.getId(), 0));
});
}
// 拼接已录入数量
private void assembleEnteredNum(List<HardwareVersionVO> list) {
list.forEach(vo->{
int enteredNum = vo.getBound()+vo.getUnBound();
vo.setEnteredNum(enteredNum);
});
}
// 计算父版本数量
private void aggregateParentData(List<HardwareVersionVO> list) {
// 创建映射表
Map<Long, List<HardwareVersionVO>> parentChildMap = list.stream()
.filter(vo -> vo.getParentId() != 0)
.collect(Collectors.groupingBy(HardwareVersionVO::getParentId));
// 处理父版本数据
list.stream()
.filter(vo -> vo.getParentId() == 0)
.forEach(parent -> {
List<HardwareVersionVO> children = parentChildMap.getOrDefault(parent.getId(), Collections.emptyList());
// 初始化父版本统计值
parent.setBound(0);
parent.setUnBound(0);
parent.setEnteredNum(0);
// 单次遍历累加子版本数据
for (HardwareVersionVO child : children) {
parent.setBound(parent.getBound() + child.getBound());
parent.setUnBound(parent.getUnBound() + child.getUnBound());
parent.setEnteredNum(parent.getEnteredNum() + child.getEnteredNum());
}
});
}
// 拼接丢损的数量
private void assembleLost(List<HardwareVersionVO> list) {
list.stream()
.filter(vo -> vo.getParentId() == 0) // 仅处理父版本
.forEach(vo -> {
int lost = vo.getQuantity() - vo.getEnteredNum() - vo.getNotEnteredNum();
vo.setLost(lost);
});
}
}

View File

@ -1,5 +1,6 @@
package com.ruoyi.bst.hardwareVersion.service.impl;
import java.util.Collections;
import java.util.List;
import com.ruoyi.bst.hardwareVersion.domain.enums.SelectCondition;
@ -138,4 +139,14 @@ public class HardwareVersionServiceImpl implements HardwareVersionService
}
return list;
}
@Override
public List<HardwareVersionVO> selectBoundCount(HardwareVersionQuery query) {
return hardwareVersionMapper.selectBoundCount(query);
}
@Override
public List<HardwareVersionVO> selectUnBoundCount(HardwareVersionQuery query) {
return hardwareVersionMapper.selectUnBoundCount(query);
}
}

View File

@ -3,6 +3,7 @@ package com.ruoyi.web.bst;
import com.ruoyi.bst.hardwareVersion.domain.HardwareVersion;
import com.ruoyi.bst.hardwareVersion.domain.HardwareVersionQuery;
import com.ruoyi.bst.hardwareVersion.domain.HardwareVersionVO;
import com.ruoyi.bst.hardwareVersion.service.HardwareVersionAssembler;
import com.ruoyi.bst.hardwareVersion.service.HardwareVersionService;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
@ -30,6 +31,8 @@ public class HardwareVersionController extends BaseController
@Autowired
private HardwareVersionService hardwareVersionService;
@Autowired
private HardwareVersionAssembler hardwareVersionAssembler;
/**
* 查询硬件版本列表
*/
@ -39,7 +42,8 @@ public class HardwareVersionController extends BaseController
{
startPage();
startOrderBy();
List<HardwareVersionVO> list = hardwareVersionService.computeNumber(query);
List<HardwareVersionVO> list = hardwareVersionService.selectHardwareVersionList(query);
hardwareVersionAssembler.assembleRevenue(list);
return getDataTable(list);
}