feat: 详细清单统计

master
李小林 7 months ago
parent f5e54ba1aa
commit a101719d3d
  1. 1
      src/main/java/com/bellmann/controller/DeviceTypeController.java
  2. 7
      src/main/java/com/bellmann/controller/DomainController.java
  3. 47
      src/main/java/com/bellmann/controller/ReportController.java
  4. 7
      src/main/java/com/bellmann/converter/DeviceStaticConverter.java
  5. 1
      src/main/java/com/bellmann/mapper/DeviceStaticMapper.java
  6. 15
      src/main/java/com/bellmann/mapper/ViewDeviceTotalMapper.java
  7. 76
      src/main/java/com/bellmann/model/entity/ViewDeviceTotal.java
  8. 36
      src/main/java/com/bellmann/model/query/ReportBasicQuery.java
  9. 41
      src/main/java/com/bellmann/model/vo/DetailExportVO.java
  10. 37
      src/main/java/com/bellmann/model/vo/DetailInventoryStatisticsVO.java
  11. 9
      src/main/java/com/bellmann/service/DeviceStaticService.java
  12. 2
      src/main/java/com/bellmann/service/DomainService.java
  13. 14
      src/main/java/com/bellmann/service/ReportService.java
  14. 16
      src/main/java/com/bellmann/service/impl/DomainServiceImpl.java
  15. 52
      src/main/java/com/bellmann/service/impl/ReportServiceImpl.java
  16. 5
      src/main/resources/mapper/DeviceTypeMapper.xml
  17. 1
      src/main/resources/mapper/DomainMapper.xml
  18. 69
      src/main/resources/mapper/ViewDeviceTotalMapper.xml

@ -60,7 +60,6 @@ public class DeviceTypeController {
List<Option<String>> list = deviceTypeService.typeNameOption(vendorOui); List<Option<String>> list = deviceTypeService.typeNameOption(vendorOui);
return Result.success(list); return Result.success(list);
} }
@GetMapping("hard-ver-option/") @GetMapping("hard-ver-option/")
@Operation(summary = "查找设备硬件版本选择框") @Operation(summary = "查找设备硬件版本选择框")
public Result<List<Option<String>>> hardVerOption(@RequestParam String typeName){ public Result<List<Option<String>>> hardVerOption(@RequestParam String typeName){

@ -64,4 +64,11 @@ public class DomainController {
return domainService.transferOption(); return domainService.transferOption();
} }
@Operation(summary = "报表")
@GetMapping("/report-area/options/{groupId}")
public Result<List<Option<Long>>> reportArea(@PathVariable Long groupId) {
List<Option<Long>> list = domainService.reportArea(groupId);
return Result.success(list);
}
} }

@ -0,0 +1,47 @@
package com.bellmann.controller;
import com.alibaba.excel.EasyExcel;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.bellmann.common.result.PageResult;
import com.bellmann.model.query.ReportBasicQuery;
import com.bellmann.model.vo.DetailExportVO;
import com.bellmann.model.vo.DetailInventoryStatisticsVO;
import com.bellmann.service.ReportService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.URLEncoder;
import java.util.List;
@Tag(name = "31.家庭用户-报表")
@RestController
@RequiredArgsConstructor
@RequestMapping("/api/report/v1")
public class ReportController {
private final ReportService reportService;
@PostMapping("/detail-inventory-statistics")
@Operation(summary = "运行报表")
public PageResult<DetailInventoryStatisticsVO> detailPage(@RequestBody ReportBasicQuery query){
Page<DetailInventoryStatisticsVO> page = reportService.detailPage(query);
return PageResult.success(page);
}
@Operation(summary = "导出详细清单统计报表")
@GetMapping("/_export")
public void exportDetail(ReportBasicQuery queryParams, HttpServletResponse response) throws IOException {
String fileName = "详细清单统计报表.xlsx";
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(fileName, "UTF-8"));
List<DetailExportVO> exportUserList = reportService.listExportDetail(queryParams);
EasyExcel.write(response.getOutputStream(), DetailExportVO.class).sheet("详细清单统计报表")
.doWrite(exportUserList);
}
}

@ -5,12 +5,13 @@ import com.bellmann.model.bo.EquipmentBO;
import com.bellmann.model.bo.RemoteEquipmentBO; import com.bellmann.model.bo.RemoteEquipmentBO;
import com.bellmann.model.entity.DeviceStatic; import com.bellmann.model.entity.DeviceStatic;
import com.bellmann.model.form.EquipmentAddForm; import com.bellmann.model.form.EquipmentAddForm;
import com.bellmann.model.vo.EquipmentVO; import com.bellmann.model.vo.*;
import com.bellmann.model.vo.RemoteEquipmentVO;
import org.mapstruct.Mapper; import org.mapstruct.Mapper;
import org.mapstruct.Mapping; import org.mapstruct.Mapping;
import org.mapstruct.Mappings; import org.mapstruct.Mappings;
import java.util.List;
@Mapper(componentModel = "spring") @Mapper(componentModel = "spring")
public interface DeviceStaticConverter { public interface DeviceStaticConverter {
@ -32,4 +33,6 @@ public interface DeviceStaticConverter {
}) })
RemoteEquipmentVO remoteBOPage2VOPage(RemoteEquipmentBO bo); RemoteEquipmentVO remoteBOPage2VOPage(RemoteEquipmentBO bo);
Page<RemoteEquipmentVO> remoteBOPage2VOPage(Page<RemoteEquipmentBO> boPage); Page<RemoteEquipmentVO> remoteBOPage2VOPage(Page<RemoteEquipmentBO> boPage);
List<DetailExportVO> detailVO2ExportVO(List<DetailInventoryStatisticsVO> records);
} }

@ -35,4 +35,5 @@ public interface DeviceStaticMapper extends BaseMapper<DeviceStatic> {
DeviceDetail findRDeviceDetailStructByDevId(@Param("devId") Long devId); DeviceDetail findRDeviceDetailStructByDevId(@Param("devId") Long devId);
String getLogicIdByDevId(@Param("devId") Long devId); String getLogicIdByDevId(@Param("devId") Long devId);
} }

@ -0,0 +1,15 @@
package com.bellmann.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.bellmann.model.entity.ViewDeviceTotal;
import com.bellmann.model.query.ReportBasicQuery;
import com.bellmann.model.vo.DetailInventoryStatisticsVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@Mapper
public interface ViewDeviceTotalMapper extends BaseMapper<ViewDeviceTotal> {
Page<DetailInventoryStatisticsVO> detailInventoryStatisticsPage(Page<DetailInventoryStatisticsVO> page, @Param("form") ReportBasicQuery query);
}

@ -0,0 +1,76 @@
package com.bellmann.model.entity;
import lombok.Data;
import java.util.Date;
import java.io.Serializable;
/**
* (VZjDeviceTotal)实体类
*
* @author makejava
* @since 2024-07-30 09:54:58
*/
@Data
public class ViewDeviceTotal implements Serializable {
private static final long serialVersionUID = 882370856173531679L;
private Long devId;
private Long typeAndVerId;
private Long custId;
private String devSno;
private String devPppoe;
private String devAdNo;
private String devStatus;
private Date devCreateTime;
private Date devModifyTime;
private Date devOnlineTime;
private String devRemark1;
private String devRemark3;
private String devRemark4;
private Long devTypeId;
private String softVer;
private Long tr069VerId;
private String devVendorName;
private String devVendorOui;
private String devTypeName;
private String devHardVer;
private String devAccessType;
private String devTypeNamea;
private String devTypeNameNew;
private Long groupid;
private String groupname;
private Long parentgroupid;
private String groupdescription;
private String groupcode;
}

@ -0,0 +1,36 @@
package com.bellmann.model.query;
import com.bellmann.common.base.BasePageQuery;
import lombok.Data;
import lombok.EqualsAndHashCode;
@EqualsAndHashCode(callSuper = true)
@Data
public class ReportBasicQuery extends BasePageQuery {
private Long area;
private Long subarea;
private String category;
private String devName;
private String accessType;
private String devType;
private String gateWayType;
private String firstStartTime;
private String firstEndTime;
private String lastStartTime;
private String lastEndTime;
private String onLineStartTime;
private String onLineEndTime;
}

@ -0,0 +1,41 @@
package com.bellmann.model.vo;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import lombok.Data;
@Data
@ColumnWidth(25)
public class DetailExportVO {
@ExcelProperty(value = "分公司")
private String area;
@ExcelProperty(value = "区局")
private String subArea;
@ExcelProperty(value = "设备Id")
private Long devId;
@ExcelProperty(value = "厂商")
private String category;
@ExcelProperty(value = "设备型号")
private String oui;
@ExcelProperty(value = "设备序列号")
private String devSno;
@ExcelProperty(value = "硬件版本")
private String devHard;
@ExcelProperty(value = "软件版本")
private String devSoft;
@ExcelProperty(value = "网关类型")
private String gateWayType;
@ExcelProperty(value = "逻辑ID")
private String sno;
@ExcelProperty(value = "宽带账号")
private String pppoe;
@ExcelProperty(value = "首次装机时间")
private String createTime;
@ExcelProperty(value = "最近一次装机时间")
private String modifyTime;
@ExcelProperty(value = "最近一次上线时间")
private String onLineTime;
@ExcelProperty(value = "接入类型")
private String rgMode;
}

@ -0,0 +1,37 @@
package com.bellmann.model.vo;
import lombok.Data;
@Data
public class DetailInventoryStatisticsVO {
private String area;
private String subArea;
private Long devId;
private String category;
private String devName;
private String oui;
private String devSno;
private String devHard;
private String devSoft;
private String gateWayType;
private String sno;
private String pppoe;
private String createTime;
private String modifyTime;
private String onLineTime;
private String rgMode;
}

@ -5,11 +5,10 @@ import com.bellmann.common.result.PageResult;
import com.bellmann.common.result.Result; import com.bellmann.common.result.Result;
import com.bellmann.model.form.*; import com.bellmann.model.form.*;
import com.bellmann.model.query.DevOuiSnoQuery; import com.bellmann.model.query.DevOuiSnoQuery;
import com.bellmann.model.query.ReportBasicQuery;
import com.bellmann.model.query.SelectQuery; import com.bellmann.model.query.SelectQuery;
import com.bellmann.model.vo.EquipmentVO; import com.bellmann.model.vo.*;
import com.bellmann.model.vo.RemoteDevInfoVO; import org.apache.ibatis.annotations.Param;
import com.bellmann.model.vo.RemoteEquipmentVO;
import com.bellmann.model.vo.RemoteOperateResult;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -63,4 +62,6 @@ public interface DeviceStaticService {
Long setAccountPassword(Long devId); Long setAccountPassword(Long devId);
void exeCustomTaskByIds(Long devId, Integer[] ids); void exeCustomTaskByIds(Long devId, Integer[] ids);
} }

@ -55,4 +55,6 @@ public interface DomainService {
void refreshDomainCache(); void refreshDomainCache();
public List<Option<Long>> reportArea(Long groupId);
} }

@ -0,0 +1,14 @@
package com.bellmann.service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.bellmann.model.query.ReportBasicQuery;
import com.bellmann.model.vo.DetailExportVO;
import com.bellmann.model.vo.DetailInventoryStatisticsVO;
import java.util.List;
public interface ReportService {
Page<DetailInventoryStatisticsVO> detailPage(ReportBasicQuery query);
List<DetailExportVO> listExportDetail(ReportBasicQuery queryParams);
}

@ -11,8 +11,8 @@ import com.bellmann.mapper.DomainMapper;
import com.bellmann.model.entity.Domain; import com.bellmann.model.entity.Domain;
import com.bellmann.model.form.DomainForm; import com.bellmann.model.form.DomainForm;
import com.bellmann.model.query.DomainQuery; import com.bellmann.model.query.DomainQuery;
import com.bellmann.model.vo.TransferOption;
import com.bellmann.model.vo.DomainVO; import com.bellmann.model.vo.DomainVO;
import com.bellmann.model.vo.TransferOption;
import com.bellmann.service.DomainService; import com.bellmann.service.DomainService;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
@ -185,4 +185,18 @@ public class DomainServiceImpl implements DomainService {
return Result.success(collect); return Result.success(collect);
} }
@Override
public List<Option<Long>> reportArea(Long groupId) {
List<Domain> list = domainMapper.selectList(new LambdaQueryWrapper<Domain>()
.eq(Domain::getParentGroupId, groupId)
);
return list.stream().map(obj -> {
Option<Long> option = new Option<>();
option.setLabel(obj.getGroupName());
option.setValue(obj.getGroupId());
return option;
}).collect(Collectors.toList());
}
} }

@ -0,0 +1,52 @@
package com.bellmann.service.impl;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.bellmann.converter.DeviceStaticConverter;
import com.bellmann.manger.ServiceManager;
import com.bellmann.mapper.DeviceStaticMapper;
import com.bellmann.mapper.ViewDeviceTotalMapper;
import com.bellmann.model.query.ReportBasicQuery;
import com.bellmann.model.vo.DetailExportVO;
import com.bellmann.model.vo.DetailInventoryStatisticsVO;
import com.bellmann.service.ReportService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
@RequiredArgsConstructor
public class ReportServiceImpl implements ReportService {
private final ViewDeviceTotalMapper viewDeviceTotalMapper;
private final DeviceStaticMapper deviceStaticMapper;
private final ServiceManager serviceManager;
private final DeviceStaticConverter deviceStaticConverter;
@Override
public Page<DetailInventoryStatisticsVO> detailPage(ReportBasicQuery query) {
int pageNum = query.getPageNum();
int pageSize = query.getPageSize();
Page<DetailInventoryStatisticsVO> page = new Page<>(pageNum,pageSize);
Page<DetailInventoryStatisticsVO> voPage = viewDeviceTotalMapper.detailInventoryStatisticsPage(page, query);
voPage.getRecords().forEach(obj->{
obj.setRgMode(serviceManager.getConnType(obj.getDevId()));
});
return voPage;
}
@Override
public List<DetailExportVO> listExportDetail(ReportBasicQuery queryParams) {
int pageNum = queryParams.getPageNum();
int pageSize = queryParams.getPageSize();
Page<DetailInventoryStatisticsVO> page = new Page<>(pageNum,pageSize);
List<DetailInventoryStatisticsVO> records = viewDeviceTotalMapper.detailInventoryStatisticsPage(page, queryParams).getRecords();
records.forEach(obj->{
obj.setRgMode(serviceManager.getConnType(obj.getDevId()));
});
return deviceStaticConverter.detailVO2ExportVO(records);
}
}

@ -38,7 +38,7 @@
<select id="vendorNameOption" resultType="com.bellmann.model.entity.DeviceType"> <select id="vendorNameOption" resultType="com.bellmann.model.entity.DeviceType">
SELECT DISTINCT(dev_vendor_name) FROM itms_device_type SELECT DISTINCT(dev_vendor_name) FROM itms_device_type where dev_vendor_name is not null order by dev_vendor_name ASC
</select> </select>
<select id="hardVerOption"> <select id="hardVerOption">
SELECT DISTINCT SELECT DISTINCT
@ -50,6 +50,7 @@
<if test="typeName!=null and typeName!=''"> <if test="typeName!=null and typeName!=''">
and dev_type_name = #{typeName} and dev_type_name = #{typeName}
</if> </if>
order by dev_hard_ver ASC
</select> </select>
<select id="typeNameOption" resultType="com.bellmann.model.entity.DeviceType"> <select id="typeNameOption" resultType="com.bellmann.model.entity.DeviceType">
@ -63,6 +64,7 @@
<if test="vendorOui!=null and vendorOui!=''"> <if test="vendorOui!=null and vendorOui!=''">
and dev_vendor_oui = #{vendorOui} and dev_vendor_oui = #{vendorOui}
</if> </if>
order by dev_type_name ASC
</select> </select>
<select id="vendorOuiOption" resultType="com.bellmann.model.entity.DeviceType"> <select id="vendorOuiOption" resultType="com.bellmann.model.entity.DeviceType">
@ -76,6 +78,7 @@
<if test="vendorName!=null and vendorName!=''"> <if test="vendorName!=null and vendorName!=''">
and dev_vendor_name = #{vendorName} and dev_vendor_name = #{vendorName}
</if> </if>
order by dev_vendor_oui ASC
</select> </select>
<select id="countJoinStaticJoinVer" resultType="java.lang.Long"> <select id="countJoinStaticJoinVer" resultType="java.lang.Long">
SELECT COUNT SELECT COUNT

@ -13,4 +13,5 @@
WHERE WHERE
itms_devtypever_sysdomain_map.type_and_ver_id= #{typeAndVerId} itms_devtypever_sysdomain_map.type_and_ver_id= #{typeAndVerId}
</select> </select>
</mapper> </mapper>

@ -0,0 +1,69 @@
<?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.bellmann.mapper.ViewDeviceTotalMapper">
<select id="detailInventoryStatisticsPage" resultType="com.bellmann.model.vo.DetailInventoryStatisticsVO">
SELECT
t2.groupname AS area,
t1.groupname AS subArea,
t1.dev_id AS devId,
t1.dev_vendor_name AS category,
t1.dev_type_name AS devName,
t1.dev_remark3 AS oui,
t1.dev_sno AS devSno,
t1.dev_hard_ver AS devHard,
t1.soft_ver AS devSoft,
CASE
t1.dev_type_name_new
WHEN 'ITMS' THEN
'家庭'
WHEN 'BBMS' THEN
'政企' ELSE'其他'
END AS gateWayType,
t1.dev_ad_no AS sno,
t1.dev_pppoe AS pppoe,
to_char( t1.dev_create_time, 'yyyy-MM-dd HH:mm:ss' ) AS createTime,
to_char( t1.dev_modify_time, 'yyyy-MM-dd HH:mm:ss' ) AS modifyTime,
to_char( t1.dev_online_time, 'yyyy-MM-dd HH:mm:ss' ) AS onLineTime
FROM
V_ZJ_DEVICE_TOTAL t1
LEFT JOIN GROUP_INFO_TAB t2 ON t1.parentgroupid = t2.groupid
<where>
<if test="form.area !=0 and form.area!=null">
and t1.PARENTGROUPID = #{form.area}
</if>
<if test="form.subarea !=null ">
and t1.groupid = #{form.subarea}
</if>
<if test="form.category!=null and form.category!= '' and form.category!= '-1' ">
and UPPER(t1.DEV_VENDOR_NAME) = UPPER(#{form.category})
</if>
<if test="form.devName!=null and form.devName!='' and form.devName!='-1' ">
and t1.DEV_TYPE_NAME = #{form.devName}
</if>
<if test="form.accessType!=null and form.accessType!=''">
and t1.DEV_ACCESS_TYPE = #{form.accessType}
</if>
<if test="form.devType!=null and form.devType!=''">
and t1.dev_type_namea = #{form.devType}
</if>
<if test="form.gateWayType!=null and form.gateWayType!=''">
and t1.dev_type_name_new = #{form.gateWayType}
</if>
<if test="form.firstStartTime!=null and form.firstEndTime!=null">
and t1.dev_create_time >= to_date(#{form.firstStartTime}, 'yyyy-MM-dd HH24:mi:ss')
and t1.dev_create_time&lt;= to_date(#{form.firstEndTime},'yyyy-MM-dd HH24:mi:ss')
</if>
<if test="form.lastStartTime!=null and form.lastEndTime!=null ">
and t1.dev_modify_time >= to_date(#{form.lastStartTime}, 'yyyy-MM-dd HH24:mi:ss')
and t1.dev_modify_time&lt;= to_date(#{form.lastEndTime},'yyyy-MM-dd HH24:mi:ss')
</if>
<if test="form.onLineStartTime!=null and form.onLineEndTime!=null">
and t1.dev_online_time >= to_date(#{form.onLineStartTime}, 'yyyy-MM-dd HH24:mi:ss')
and t1.dev_online_time&lt;= to_date(#{form.onLineEndTime},'yyyy-MM-dd HH24:mi:ss')
</if>
</where>
</select>
</mapper>
Loading…
Cancel
Save