diff --git a/src/main/java/com/glxp/api/controller/dev/DeviceBusinessProjectController.java b/src/main/java/com/glxp/api/controller/dev/DeviceBusinessProjectController.java index 253e1d68f..0ee5dc558 100644 --- a/src/main/java/com/glxp/api/controller/dev/DeviceBusinessProjectController.java +++ b/src/main/java/com/glxp/api/controller/dev/DeviceBusinessProjectController.java @@ -20,6 +20,7 @@ import com.glxp.api.entity.dev.DeviceInfoEntity; import com.glxp.api.req.dev.DeviceBusinessProjectRequest; import com.glxp.api.req.dev.DeviceCheckQuery; import com.glxp.api.res.PageSimpleResponse; +import com.glxp.api.res.dev.DeviceBusinessProjectVo; import com.glxp.api.service.thrsys.DeviceBusinessProjectDeviceService; import com.glxp.api.service.thrsys.DeviceBusinessProjectService; import com.glxp.api.vo.dev.DeviceCheckVo; @@ -128,4 +129,25 @@ public class DeviceBusinessProjectController extends BaseController { return ResultVOUtils.success(); } + + + + + /** + * 分组查询收费项目的效益分析接口 + * + * @param query + * @return + */ + @AuthRuleAnnotation("") + @PostMapping("/udi/device/businessProject/businessPage") + public BaseResponse businessPage(@RequestBody DeviceBusinessProjectRequest query) { + List list = deviceBusinessProjectService.businessPage(query); + PageInfo pageInfo = new PageInfo<>(list); + PageSimpleResponse page = new PageSimpleResponse(); + page.setTotal(pageInfo.getTotal()); + page.setList(pageInfo.getList()); + return ResultVOUtils.success(page); + } + } diff --git a/src/main/java/com/glxp/api/dao/dev/DeviceBusinessProjectDeviceMapper.java b/src/main/java/com/glxp/api/dao/dev/DeviceBusinessProjectDeviceMapper.java index 44dec8bee..bf4e8db84 100644 --- a/src/main/java/com/glxp/api/dao/dev/DeviceBusinessProjectDeviceMapper.java +++ b/src/main/java/com/glxp/api/dao/dev/DeviceBusinessProjectDeviceMapper.java @@ -12,7 +12,7 @@ import java.util.List; @Mapper public interface DeviceBusinessProjectDeviceMapper extends BaseMapper { - List detailList(DeviceBusinessProjectRequest sfxm); + List detailList(DeviceBusinessProjectRequest query); List selectNotSelectDevice(DeviceBusinessProjectRequest query); } \ No newline at end of file diff --git a/src/main/java/com/glxp/api/dao/dev/DeviceBusinessProjectMapper.java b/src/main/java/com/glxp/api/dao/dev/DeviceBusinessProjectMapper.java index b94d5b4c2..a84a20947 100644 --- a/src/main/java/com/glxp/api/dao/dev/DeviceBusinessProjectMapper.java +++ b/src/main/java/com/glxp/api/dao/dev/DeviceBusinessProjectMapper.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.glxp.api.entity.dev.DeviceBusinessProject; import com.glxp.api.req.dev.DeviceBusinessProjectRequest; import com.glxp.api.req.dev.DeviceCheckQuery; +import com.glxp.api.res.dev.DeviceBusinessProjectVo; import com.glxp.api.vo.dev.DeviceCheckVo; import org.apache.ibatis.annotations.Mapper; @@ -13,4 +14,6 @@ import java.util.List; public interface DeviceBusinessProjectMapper extends BaseMapper { List pageVo(DeviceBusinessProjectRequest query); + + List businessPage(DeviceBusinessProjectRequest query); } \ No newline at end of file diff --git a/src/main/java/com/glxp/api/entity/dev/DeviceInfoEntity.java b/src/main/java/com/glxp/api/entity/dev/DeviceInfoEntity.java index 64b3924ff..18951e66c 100644 --- a/src/main/java/com/glxp/api/entity/dev/DeviceInfoEntity.java +++ b/src/main/java/com/glxp/api/entity/dev/DeviceInfoEntity.java @@ -614,4 +614,20 @@ public class DeviceInfoEntity implements Serializable { private String purPlanBillNo; + + + public Integer getNumber() { + if (this.number == null) { + return 0; + } + return number; + } + + + public BigDecimal getAssetValue() { + if (this.assetValue == null) { + return BigDecimal.ZERO; + } + return assetValue; + } } diff --git a/src/main/java/com/glxp/api/res/dev/DeviceBusinessProjectVo.java b/src/main/java/com/glxp/api/res/dev/DeviceBusinessProjectVo.java new file mode 100644 index 000000000..543cac212 --- /dev/null +++ b/src/main/java/com/glxp/api/res/dev/DeviceBusinessProjectVo.java @@ -0,0 +1,93 @@ +package com.glxp.api.res.dev; + +import com.baomidou.mybatisplus.annotation.TableField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public class DeviceBusinessProjectVo { + + + /** + * 当前部门编码 + */ + @TableField(value = "deptCode") + @ApiModelProperty(value="当前部门编码") + private String deptCode; + + /** + * 当前部门编码 + */ + @TableField(value = "deptName") + @ApiModelProperty(value="当前部门编码") + private String deptName; + + /** + * 收费项目 + */ + @TableField(value = "sfxm") + @ApiModelProperty(value="收费项目") + private String sfxm; + + /** + * 收费名称 + */ + @TableField(value = "sfmc") + @ApiModelProperty(value="收费名称") + private String sfmc; + + /** + * 收费mz + */ + @TableField(value = "sfmz") + @ApiModelProperty(value="收费mz") + private String sfmz; + + /** + * 项目总收益 + */ + @TableField(value = "totalProjectRevenue") + @ApiModelProperty(value="项目总收益") + private BigDecimal totalProjectRevenue; + + /** + * 项目总成本 + */ + @TableField(value = "totalProjectCost") + @ApiModelProperty(value="项目总成本") + private BigDecimal totalProjectCost; + + + /** + * 总投资回报率ROI + */ + @TableField(value = "totalROI") + @ApiModelProperty(value="总投资回报率ROI") + private BigDecimal totalROI; + + /** + * 平均年收益 + */ + @TableField(value = "averageAnnualRevenue") + @ApiModelProperty(value="平均年收益") + private BigDecimal averageAnnualRevenue; + + + /** + * 设备利用率 + */ + @TableField(value = "deviceUtilizationRate") + @ApiModelProperty(value="设备利用率") + private BigDecimal deviceUtilizationRate; + + /** + * 设备效益 + */ + @TableField(value = "totalDeviceBenefit") + @ApiModelProperty(value="设备效益") + private BigDecimal totalDeviceBenefit; + + +} diff --git a/src/main/java/com/glxp/api/service/thrsys/DeviceBusinessProjectService.java b/src/main/java/com/glxp/api/service/thrsys/DeviceBusinessProjectService.java index 186589d25..06632f447 100644 --- a/src/main/java/com/glxp/api/service/thrsys/DeviceBusinessProjectService.java +++ b/src/main/java/com/glxp/api/service/thrsys/DeviceBusinessProjectService.java @@ -1,10 +1,17 @@ package com.glxp.api.service.thrsys; +import cn.hutool.core.collection.CollUtil; import com.github.pagehelper.PageHelper; +import com.glxp.api.dao.dev.DeviceBusinessProjectDeviceMapper; +import com.glxp.api.entity.dev.DeviceBusinessProjectDevice; import com.glxp.api.req.dev.DeviceBusinessProjectRequest; +import com.glxp.api.res.dev.DeviceBusinessProjectVo; import com.glxp.api.vo.dev.DeviceCheckVo; +import com.glxp.api.vo.dev.DeviceInfoVo; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.math.BigDecimal; +import java.math.RoundingMode; import java.util.List; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.glxp.api.dao.dev.DeviceBusinessProjectMapper; @@ -12,12 +19,70 @@ import com.glxp.api.entity.dev.DeviceBusinessProject; @Service public class DeviceBusinessProjectService extends ServiceImpl { + @Resource + DeviceBusinessProjectDeviceMapper deviceBusinessProjectDeviceMapper; + public List pageList(DeviceBusinessProjectRequest query) { if (query.getPage() != null) { PageHelper.startPage(query.getPage(), query.getLimit()); } List list = this.baseMapper.pageVo(query); + return list; + } + + public List businessPage(DeviceBusinessProjectRequest query) { + if (query.getPage() != null) { + PageHelper.startPage(query.getPage(), query.getLimit()); + } + List list = this.baseMapper.businessPage(query); + if (CollUtil.isNotEmpty(list)){ + list.forEach( item -> { + String deptCode = item.getDeptCode(); + String sfxm = item.getSfxm(); + BigDecimal totalProjectRevenue = item.getTotalProjectRevenue();//项目总收益 + //查询该行数据下的 绑定设备信息列表 通过 收费项目和部门编码 + DeviceBusinessProjectRequest request = new DeviceBusinessProjectRequest(); + request.setSfxm(sfxm); + request.setDeptCode(deptCode); + List deviceInfoVos = deviceBusinessProjectDeviceMapper.detailList(request); + + BigDecimal totalProjectCost = BigDecimal.ZERO;//总成本 + //如果存在设备列表信息就进行一个数据的累加统计等操作 + if (CollUtil.isNotEmpty(deviceInfoVos)){ + for (int i = 0; i < deviceInfoVos.size(); i++) { + DeviceInfoVo deviceInfoVo = deviceInfoVos.get(i); + Integer number = deviceInfoVo.getNumber(); + BigDecimal assetValue = deviceInfoVo.getAssetValue(); + + // 将 Integer 转换为 BigDecimal 并进行乘法运算 + BigDecimal product = new BigDecimal(number).multiply(assetValue); + // 将乘法结果累加到 assetValueSum 中 + totalProjectCost = totalProjectCost.add(product); + } + } + + if (totalProjectCost.compareTo(BigDecimal.ZERO) == 0) { + BigDecimal totalDeviceBenefit = BigDecimal.ZERO; + BigDecimal totalROI = BigDecimal.ZERO; + + item.setTotalProjectCost(totalProjectCost);//项目总成本 + item.setTotalROI(totalROI);//总投资回报率ROI + item.setTotalDeviceBenefit(totalDeviceBenefit);//设备效益 + }else { + BigDecimal totalDeviceBenefit = totalProjectRevenue.divide(totalProjectCost, RoundingMode.HALF_UP); + BigDecimal totalROI = (totalProjectRevenue.subtract(totalProjectCost)).divide(totalProjectCost,RoundingMode.HALF_UP); + + item.setTotalProjectCost(totalProjectCost);//项目总成本 + item.setTotalROI(totalROI);//总投资回报率ROI + item.setTotalDeviceBenefit(totalDeviceBenefit);//设备效益 + } + + + }); + } + + return list; } } diff --git a/src/main/java/com/glxp/api/vo/dev/DeviceInfoVo.java b/src/main/java/com/glxp/api/vo/dev/DeviceInfoVo.java index 71880ffbd..0b724ad47 100644 --- a/src/main/java/com/glxp/api/vo/dev/DeviceInfoVo.java +++ b/src/main/java/com/glxp/api/vo/dev/DeviceInfoVo.java @@ -3,6 +3,8 @@ package com.glxp.api.vo.dev; import com.glxp.api.entity.dev.DeviceInfoEntity; import lombok.Data; +import java.math.BigDecimal; + @Data public class DeviceInfoVo extends DeviceInfoEntity { diff --git a/src/main/resources/mybatis/mapper/dev/DeviceBusinessProjectDeviceMapper.xml b/src/main/resources/mybatis/mapper/dev/DeviceBusinessProjectDeviceMapper.xml index 6c52cea75..a2c469a82 100644 --- a/src/main/resources/mybatis/mapper/dev/DeviceBusinessProjectDeviceMapper.xml +++ b/src/main/resources/mybatis/mapper/dev/DeviceBusinessProjectDeviceMapper.xml @@ -20,7 +20,10 @@ left join device_info di on di.deviceCode = device_business_project_device.deviceCode - AND sfxm like concat('%', #{sfxm}, '%') + AND sfxm = #{sfxm} + + + AND di.deptCode = #{deptCode} AND ( diff --git a/src/main/resources/mybatis/mapper/dev/DeviceBusinessProjectMapper.xml b/src/main/resources/mybatis/mapper/dev/DeviceBusinessProjectMapper.xml index 9e84e4e4b..7ecdf8bc5 100644 --- a/src/main/resources/mybatis/mapper/dev/DeviceBusinessProjectMapper.xml +++ b/src/main/resources/mybatis/mapper/dev/DeviceBusinessProjectMapper.xml @@ -38,4 +38,21 @@ group by sfxm,sfmc order by createTime desc + + + \ No newline at end of file diff --git a/src/main/resources/schemas/schema_v2.4.sql b/src/main/resources/schemas/schema_v2.4.sql index 3cb1db726..e2c691451 100644 --- a/src/main/resources/schemas/schema_v2.4.sql +++ b/src/main/resources/schemas/schema_v2.4.sql @@ -4032,4 +4032,18 @@ CREATE TABLE IF NOT EXISTS `device_business_project_device` ( `sfxm` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '收费项目', `updateTime` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=DYNAMIC COMMENT='设备收费项目-设备关联表'; \ No newline at end of file +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=DYNAMIC COMMENT='设备收费项目-设备关联表'; + + +INSERT ignore INTO `auth_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query_param`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, +`create_by`, `create_time`, `update_by`, `update_time`, `remark`) +VALUES (5237, '效益分析', 5235, 1, 'purchase/benefitManagement/deviceBenefit', 'purchase/benefitManagement/deviceBenefit', '', 1, 0, 'C', '0', '0', 'purchase:purApplyArgument:purApplyArgument', NULL, '超级用户', '2023-02-08 17:02:19', NULL, NULL, NULL); + +ALTER TABLE `device_info` + MODIFY COLUMN `assetValue` decimal(10, 2) NULL DEFAULT NULL COMMENT '单个资产价值' AFTER `dayHour`, + MODIFY COLUMN `ownFund` decimal(10, 2) NULL DEFAULT NULL COMMENT '自有资金' AFTER `assetValue`, + MODIFY COLUMN `financialAppropriation` decimal(10, 2) NULL DEFAULT NULL COMMENT '财政拨款' AFTER `ownFund`, + MODIFY COLUMN `educationFund` decimal(10, 2) NULL DEFAULT NULL COMMENT '科教基金' AFTER `financialAppropriation`, + MODIFY COLUMN `otherFund` decimal(10, 2) NULL DEFAULT NULL COMMENT '其他资金' AFTER `educationFund`, + MODIFY COLUMN `nonPeerFinancialAppropriation` decimal(10, 2) NULL DEFAULT NULL COMMENT '非同级财政拨款' AFTER `otherFund`, + MODIFY COLUMN `estimatedResidualValue` decimal(10, 2) NULL DEFAULT NULL COMMENT '预计残值' AFTER `endUser`; \ No newline at end of file