feat: 科室设备经营分析功能

lh_dev_fifo
chenhc 7 months ago
parent 2f58a0d25b
commit 1bc9fce499

@ -20,6 +20,7 @@ import com.glxp.api.entity.dev.DeviceInfoEntity;
import com.glxp.api.req.dev.DeviceBusinessProjectRequest; import com.glxp.api.req.dev.DeviceBusinessProjectRequest;
import com.glxp.api.req.dev.DeviceCheckQuery; import com.glxp.api.req.dev.DeviceCheckQuery;
import com.glxp.api.res.PageSimpleResponse; 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.DeviceBusinessProjectDeviceService;
import com.glxp.api.service.thrsys.DeviceBusinessProjectService; import com.glxp.api.service.thrsys.DeviceBusinessProjectService;
import com.glxp.api.vo.dev.DeviceCheckVo; import com.glxp.api.vo.dev.DeviceCheckVo;
@ -128,4 +129,25 @@ public class DeviceBusinessProjectController extends BaseController {
return ResultVOUtils.success(); return ResultVOUtils.success();
} }
/**
*
*
* @param query
* @return
*/
@AuthRuleAnnotation("")
@PostMapping("/udi/device/businessProject/businessPage")
public BaseResponse businessPage(@RequestBody DeviceBusinessProjectRequest query) {
List<DeviceBusinessProjectVo> 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);
}
} }

@ -12,7 +12,7 @@ import java.util.List;
@Mapper @Mapper
public interface DeviceBusinessProjectDeviceMapper extends BaseMapper<DeviceBusinessProjectDevice> { public interface DeviceBusinessProjectDeviceMapper extends BaseMapper<DeviceBusinessProjectDevice> {
List<DeviceInfoVo> detailList(DeviceBusinessProjectRequest sfxm); List<DeviceInfoVo> detailList(DeviceBusinessProjectRequest query);
List<DeviceInfoVo> selectNotSelectDevice(DeviceBusinessProjectRequest query); List<DeviceInfoVo> selectNotSelectDevice(DeviceBusinessProjectRequest query);
} }

@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.glxp.api.entity.dev.DeviceBusinessProject; import com.glxp.api.entity.dev.DeviceBusinessProject;
import com.glxp.api.req.dev.DeviceBusinessProjectRequest; import com.glxp.api.req.dev.DeviceBusinessProjectRequest;
import com.glxp.api.req.dev.DeviceCheckQuery; import com.glxp.api.req.dev.DeviceCheckQuery;
import com.glxp.api.res.dev.DeviceBusinessProjectVo;
import com.glxp.api.vo.dev.DeviceCheckVo; import com.glxp.api.vo.dev.DeviceCheckVo;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
@ -13,4 +14,6 @@ import java.util.List;
public interface DeviceBusinessProjectMapper extends BaseMapper<DeviceBusinessProject> { public interface DeviceBusinessProjectMapper extends BaseMapper<DeviceBusinessProject> {
List<DeviceBusinessProject> pageVo(DeviceBusinessProjectRequest query); List<DeviceBusinessProject> pageVo(DeviceBusinessProjectRequest query);
List<DeviceBusinessProjectVo> businessPage(DeviceBusinessProjectRequest query);
} }

@ -614,4 +614,20 @@ public class DeviceInfoEntity implements Serializable {
private String purPlanBillNo; 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;
}
} }

@ -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;
}

@ -1,10 +1,17 @@
package com.glxp.api.service.thrsys; package com.glxp.api.service.thrsys;
import cn.hutool.core.collection.CollUtil;
import com.github.pagehelper.PageHelper; 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.req.dev.DeviceBusinessProjectRequest;
import com.glxp.api.res.dev.DeviceBusinessProjectVo;
import com.glxp.api.vo.dev.DeviceCheckVo; import com.glxp.api.vo.dev.DeviceCheckVo;
import com.glxp.api.vo.dev.DeviceInfoVo;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.List; import java.util.List;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.glxp.api.dao.dev.DeviceBusinessProjectMapper; import com.glxp.api.dao.dev.DeviceBusinessProjectMapper;
@ -12,12 +19,70 @@ import com.glxp.api.entity.dev.DeviceBusinessProject;
@Service @Service
public class DeviceBusinessProjectService extends ServiceImpl<DeviceBusinessProjectMapper, DeviceBusinessProject> { public class DeviceBusinessProjectService extends ServiceImpl<DeviceBusinessProjectMapper, DeviceBusinessProject> {
@Resource
DeviceBusinessProjectDeviceMapper deviceBusinessProjectDeviceMapper;
public List<DeviceBusinessProject> pageList(DeviceBusinessProjectRequest query) { public List<DeviceBusinessProject> pageList(DeviceBusinessProjectRequest query) {
if (query.getPage() != null) { if (query.getPage() != null) {
PageHelper.startPage(query.getPage(), query.getLimit()); PageHelper.startPage(query.getPage(), query.getLimit());
} }
List<DeviceBusinessProject> list = this.baseMapper.pageVo(query); List<DeviceBusinessProject> list = this.baseMapper.pageVo(query);
return list;
}
public List<DeviceBusinessProjectVo> businessPage(DeviceBusinessProjectRequest query) {
if (query.getPage() != null) {
PageHelper.startPage(query.getPage(), query.getLimit());
}
List<DeviceBusinessProjectVo> 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<DeviceInfoVo> 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; return list;
} }
} }

@ -3,6 +3,8 @@ package com.glxp.api.vo.dev;
import com.glxp.api.entity.dev.DeviceInfoEntity; import com.glxp.api.entity.dev.DeviceInfoEntity;
import lombok.Data; import lombok.Data;
import java.math.BigDecimal;
@Data @Data
public class DeviceInfoVo extends DeviceInfoEntity { public class DeviceInfoVo extends DeviceInfoEntity {

@ -20,7 +20,10 @@
left join device_info di on di.deviceCode = device_business_project_device.deviceCode left join device_info di on di.deviceCode = device_business_project_device.deviceCode
<where> <where>
<if test="sfxm != null and sfxm != ''"> <if test="sfxm != null and sfxm != ''">
AND sfxm like concat('%', #{sfxm}, '%') AND sfxm = #{sfxm}
</if>
<if test="deptCode != null and deptCode != ''">
AND di.deptCode = #{deptCode}
</if> </if>
<if test="key != null and key != ''"> <if test="key != null and key != ''">
AND ( AND (

@ -38,4 +38,21 @@
group by sfxm,sfmc group by sfxm,sfmc
order by createTime desc order by createTime desc
</select> </select>
<select id="businessPage" resultType="com.glxp.api.res.dev.DeviceBusinessProjectVo">
select sfxm,sfmc,deptCode, deptName,
SUM(je) AS totalProjectRevenue
from device_business_project
<where>
<if test="sfmc != null and sfmc != ''">
AND sfmc like concat('%', #{sfmc}, '%')
</if>
<if test="deptName != null and deptName != ''">
AND deptName like concat('%', #{deptName}, '%')
</if>
</where>
group by sfxm,sfmc,deptCode, deptName
order by createTime desc
</select>
</mapper> </mapper>

@ -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 '收费项目', `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, `updateTime` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`) USING BTREE PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=DYNAMIC COMMENT='设备收费项目-设备关联表'; ) 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`;
Loading…
Cancel
Save