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

lh_dev_fifo
chenhc 7 months ago
parent 1bc9fce499
commit 3f4ee2f3e7

@ -1,9 +1,13 @@
package com.glxp.api.controller.dev;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
import com.alibaba.excel.EasyExcel;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.glxp.api.annotation.AuthRuleAnnotation;
import com.glxp.api.common.enums.ResultEnum;
@ -20,6 +24,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.DeviceBusinessProjectExportVo;
import com.glxp.api.res.dev.DeviceBusinessProjectVo;
import com.glxp.api.service.thrsys.DeviceBusinessProjectDeviceService;
import com.glxp.api.service.thrsys.DeviceBusinessProjectService;
@ -27,13 +32,14 @@ import com.glxp.api.vo.dev.DeviceCheckVo;
import com.glxp.api.vo.dev.DeviceInfoVo;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.lang.reflect.Array;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.Date;
import java.util.List;
import java.util.Map;
@ -142,6 +148,9 @@ public class DeviceBusinessProjectController extends BaseController {
@AuthRuleAnnotation("")
@PostMapping("/udi/device/businessProject/businessPage")
public BaseResponse businessPage(@RequestBody DeviceBusinessProjectRequest query) {
if (query.getPage() != null) {
PageHelper.startPage(query.getPage(), query.getLimit());
}
List<DeviceBusinessProjectVo> list = deviceBusinessProjectService.businessPage(query);
PageInfo pageInfo = new PageInfo<>(list);
PageSimpleResponse page = new PageSimpleResponse();
@ -150,4 +159,37 @@ public class DeviceBusinessProjectController extends BaseController {
return ResultVOUtils.success(page);
}
@PostMapping("/udi/device/businessProject/selectExportExcel")
public void orderDeptProductOutSelectExportExcel(@RequestBody DeviceBusinessProjectRequest request, HttpServletResponse response) throws IOException {
// 模拟数据库获取数据
List<DeviceBusinessProjectVo> list = request.getList();
List<DeviceBusinessProjectExportVo> orderDetailVos = BeanUtil.copyToList(list, DeviceBusinessProjectExportVo.class);
response.setCharacterEncoding(StandardCharsets.UTF_8.name());
response.setHeader("content-Type", "application/vnd.ms-excel");
response.setHeader("Content-Disposition",
"attachment;filename=" + URLEncoder.encode("效益分析统计" + DateUtil.format(new Date(), "yyyy-MM-dd") + ".xlsx", StandardCharsets.UTF_8.name()));
EasyExcel.write(response.getOutputStream(), DeviceBusinessProjectExportVo.class).sheet().doWrite(orderDetailVos);
}
@GetMapping("/udi/device/businessProject/exportExcel")
public void orderDeptProductOutExportTemplate(DeviceBusinessProjectRequest request, HttpServletResponse response) throws IOException {
// 模拟数据库获取数据
List<DeviceBusinessProjectVo> list = deviceBusinessProjectService.businessPage(request);
List<DeviceBusinessProjectExportVo> orderDetailVos = BeanUtil.copyToList(list, DeviceBusinessProjectExportVo.class);
response.setCharacterEncoding(StandardCharsets.UTF_8.name());
response.setHeader("content-Type", "application/vnd.ms-excel");
response.setHeader("Content-Disposition",
"attachment;filename=" + URLEncoder.encode("效益分析统计" + DateUtil.format(new Date(), "yyyy-MM-dd") + ".xlsx", StandardCharsets.UTF_8.name()));
EasyExcel.write(response.getOutputStream(), DeviceBusinessProjectExportVo.class).sheet().doWrite(orderDetailVos);
}
}

@ -3,12 +3,14 @@ package com.glxp.api.req.dev;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.glxp.api.res.dev.DeviceBusinessProjectVo;
import com.glxp.api.util.page.ListPageRequest;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
@Data
public class DeviceBusinessProjectRequest extends ListPageRequest {
@ -94,6 +96,8 @@ public class DeviceBusinessProjectRequest extends ListPageRequest {
@ApiModelProperty(value="更新时间")
private Date updateTime;
private String startChargTime;
private String endChargTime;
private String key;
private List<DeviceBusinessProjectVo> list;
}

@ -0,0 +1,100 @@
package com.glxp.api.res.dev;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.format.NumberFormat;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import com.baomidou.mybatisplus.annotation.TableField;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class DeviceBusinessProjectExportVo {
@TableField(value = "deptName")
@ExcelProperty(value = "部门名称", index = 0)
@ColumnWidth(30)
private String deptName;
/**
*
*/
@TableField(value = "sfxm")
@ExcelProperty(value = "收费项目", index = 1)
@ApiModelProperty(value="收费项目")
@ColumnWidth(30)
private String sfxm;
/**
*
*/
@TableField(value = "sfmc")
@ExcelProperty(value = "收费名称", index = 2)
@ApiModelProperty(value="收费名称")
@ColumnWidth(30)
private String sfmc;
/**
*
*/
@TableField(value = "totalProjectRevenue")
@ApiModelProperty(value="项目总收益")
@ExcelProperty(value = "项目总收益", index = 3)
@ColumnWidth(30)
private BigDecimal totalProjectRevenue;
/**
*
*/
@TableField(value = "totalProjectCost")
@ExcelProperty(value = "项目总成本", index = 4)
@ApiModelProperty(value="项目总成本")
@ColumnWidth(30)
private BigDecimal totalProjectCost;
/**
* ROI
*/
@TableField(value = "totalROI")
@ExcelProperty(value = "总投资回报率ROI", index = 5)
@ApiModelProperty(value="总投资回报率ROI")
@NumberFormat("#0.00%")
@ColumnWidth(30)
private BigDecimal totalROI;
// /**
// * 平均年收益
// */
// @TableField(value = "averageAnnualRevenue")
// @ExcelProperty(value = "平均年收益", index = 6)
// @ApiModelProperty(value="平均年收益")
// @ColumnWidth(30)
// private BigDecimal averageAnnualRevenue;
// /**
// * 设备利用率
// */
// @TableField(value = "deviceUtilizationRate")
// @ExcelProperty(value = "设备利用率", index = 7)
// @ApiModelProperty(value="设备利用率")
// @NumberFormat("#0.00%")
// @ColumnWidth(30)
// private BigDecimal deviceUtilizationRate;
/**
*
*/
@TableField(value = "totalDeviceBenefit")
@ApiModelProperty(value="设备效益")
@ExcelProperty(value = "设备效益", index = 6)
@NumberFormat("#0.00%")
@ColumnWidth(30)
private BigDecimal totalDeviceBenefit;
}

@ -11,6 +11,7 @@ import com.glxp.api.vo.dev.DeviceInfoVo;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.math.MathContext;
import java.math.RoundingMode;
import java.util.List;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@ -32,9 +33,6 @@ public class DeviceBusinessProjectService extends ServiceImpl<DeviceBusinessProj
}
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 -> {
@ -62,7 +60,7 @@ public class DeviceBusinessProjectService extends ServiceImpl<DeviceBusinessProj
}
}
if (totalProjectCost.compareTo(BigDecimal.ZERO) == 0) {
if (totalProjectCost.compareTo(BigDecimal.ZERO) == 0 || totalProjectRevenue.compareTo(BigDecimal.ZERO) == 0) {
BigDecimal totalDeviceBenefit = BigDecimal.ZERO;
BigDecimal totalROI = BigDecimal.ZERO;
@ -70,8 +68,8 @@ public class DeviceBusinessProjectService extends ServiceImpl<DeviceBusinessProj
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);
BigDecimal totalDeviceBenefit = totalProjectRevenue.divide(totalProjectCost, new MathContext(18)).setScale(4, RoundingMode.DOWN);
BigDecimal totalROI = (totalProjectRevenue.subtract(totalProjectCost)).divide(totalProjectCost, new MathContext(18)).setScale(4, RoundingMode.DOWN);
item.setTotalProjectCost(totalProjectCost);//项目总成本
item.setTotalROI(totalROI);//总投资回报率ROI

@ -40,9 +40,23 @@
</select>
<select id="businessPage" resultType="com.glxp.api.res.dev.DeviceBusinessProjectVo">
select sfxm,sfmc,deptCode, deptName,
SUM(je) AS totalProjectRevenue
<select id="businessPage" resultType="com.glxp.api.res.dev.DeviceBusinessProjectVo">
select sfxm,
sfmc,
deptCode,
deptName,
(
SELECT IFNULL (SUM(je),0)
from device_business_project a2
<where>
a2.sfxm = device_business_project.sfxm
AND a2.deptCode = device_business_project.deptCode
<if test="startChargTime != null and startChargTime != '' and endChargTime != null and endChargTime != ''">
AND date_format(a2.chargTime, '%Y-%m-%d') between date_format(#{startChargTime}, '%Y-%m-%d') and date_format(#{endChargTime}, '%Y-%m-%d')
</if>
</where>
)
AS totalProjectRevenue
from device_business_project
<where>
<if test="sfmc != null and sfmc != ''">
@ -51,8 +65,12 @@
<if test="deptName != null and deptName != ''">
AND deptName like concat('%', #{deptName}, '%')
</if>
<if test="sfxm != null and sfxm != ''">
AND sfxm like concat('%', #{sfxm}, '%')
</if>
</where>
group by sfxm,sfmc,deptCode, deptName
group by sfxm, sfmc, deptCode, deptName
order by createTime desc
</select>
</mapper>
Loading…
Cancel
Save