From fdf4b81f3df919c3f1ff98e112a68cf4df46b9a5 Mon Sep 17 00:00:00 2001
From: xiebin <vip_xiaobin810@163.com>
Date: Thu, 15 Jan 2026 14:55:51 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 drone-service/drone-gd/src/main/java/org/sxkj/gd/workOrder/vo/OperationalRevenueVo.java                    |   22 +++
 drone-service/drone-gd/src/main/java/org/sxkj/gd/workOrder/controller/OperationalRevenueController.java    |  133 +++++++++++++++++++
 drone-service/drone-gd/src/main/java/org/sxkj/gd/workOrder/entity/OperationalRevenue.java                  |  105 +++++++++++++++
 drone-service/drone-gd/src/main/java/org/sxkj/gd/workOrder/service/OperationalRevenueService.java          |   33 ++++
 drone-service/drone-gd/src/main/java/org/sxkj/gd/workOrder/mapper/OperationalRevenueMapper.java            |   13 +
 drone-service/drone-gd/src/main/java/org/sxkj/gd/workOrder/service/impl/OperationalRevenueServiceImpl.java |   94 +++++++++++++
 6 files changed, 400 insertions(+), 0 deletions(-)

diff --git a/drone-service/drone-gd/src/main/java/org/sxkj/gd/workOrder/controller/OperationalRevenueController.java b/drone-service/drone-gd/src/main/java/org/sxkj/gd/workOrder/controller/OperationalRevenueController.java
new file mode 100644
index 0000000..912d034
--- /dev/null
+++ b/drone-service/drone-gd/src/main/java/org/sxkj/gd/workOrder/controller/OperationalRevenueController.java
@@ -0,0 +1,133 @@
+package org.sxkj.gd.workOrder.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import org.springblade.core.secure.utils.AuthUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.sxkj.common.model.ResponseResult;
+import org.sxkj.gd.workOrder.entity.OperationalRevenue;
+import org.sxkj.gd.workOrder.service.OperationalRevenueService;
+import org.sxkj.gd.workOrder.vo.OperationalRevenueVo;
+
+import java.time.LocalDateTime;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 运营收益控制器
+ */
+@Api(tags = "运营收益管理")
+@RestController
+@RequestMapping("/revenue")
+public class OperationalRevenueController {
+
+	@Autowired
+	private OperationalRevenueService operationalRevenueService;
+
+	/**
+	 * 分页查询运营收益
+	 */
+	@ApiOperation("分页查询运营收益")
+	@GetMapping("/page")
+	public ResponseResult page(
+		@ApiParam("页码") @RequestParam(value = "current", defaultValue = "1") long current,
+		@ApiParam("每页大小") @RequestParam(value = "size", defaultValue = "10") long size,
+		@ApiParam("营业收入") @RequestParam(value = "operatingIncome", required = false) String operatingIncome,
+		@ApiParam("综合总成本费用") @RequestParam(value = "totalCost", required = false) String totalCost,
+		@ApiParam("净利润") @RequestParam(value = "netProfit", required = false) String netProfit,
+		@ApiParam("财务内部收益率") @RequestParam(value = "financialIrr", required = false) String financialIrr,
+		@ApiParam("市场空间") @RequestParam(value = "marketSpace", required = false) String marketSpace,
+		@ApiParam("创建人") @RequestParam(value = "nickName", required = false) String nickName
+	) {
+		Page<OperationalRevenue> page = new Page<>(current, size);
+		IPage<OperationalRevenue> result = operationalRevenueService.selectPage(page, operatingIncome, totalCost, netProfit, financialIrr, marketSpace, nickName);
+
+		// 转换为Vo分页
+		IPage<OperationalRevenueVo> voPage = result.convert(operationalRevenueService::convertToVo);
+		return ResponseResult.success(voPage);
+	}
+
+	/**
+	 * 查询所有运营收益
+	 */
+	@ApiOperation("查询所有运营收益")
+	@GetMapping("/list")
+	public ResponseResult list() {
+		List<OperationalRevenue> list = operationalRevenueService.list();
+
+		// 转换为Vo列表
+		List<OperationalRevenueVo> voList = list.stream()
+			.map(operationalRevenueService::convertToVo)
+			.collect(Collectors.toList());
+		return ResponseResult.success(voList);
+	}
+
+
+
+	/**
+	 * 根据ID查询运营收益
+	 */
+	@ApiOperation("根据ID查询运营收益")
+	@GetMapping("selectById/{id}")
+	public ResponseResult getById(@ApiParam("主键ID") @PathVariable Long id) {
+		OperationalRevenue operationalRevenue = operationalRevenueService.getById(id);
+
+		// 转换为Vo对象
+		OperationalRevenueVo vo = operationalRevenueService.convertToVo(operationalRevenue);
+		return ResponseResult.success(vo);
+	}
+
+	/**
+	 * 新增运营收益
+	 */
+	@ApiOperation("新增运营收益")
+	@PostMapping("/add")
+	public ResponseResult save(@RequestBody OperationalRevenue operationalRevenue) {
+		operationalRevenue.setCreateUser(String.valueOf(AuthUtil.getUserId()));
+		LocalDateTime now = LocalDateTime.now();
+		operationalRevenue.setCreateTime(now);
+		operationalRevenue.setUpdateTime(now);
+		operationalRevenue.setCreateDept(AuthUtil.getDeptId());
+		operationalRevenue.setUpdateUser(String.valueOf(AuthUtil.getUserId()));
+		operationalRevenue.setNickName(AuthUtil.getNickName());
+		boolean result = operationalRevenueService.save(operationalRevenue);
+		return ResponseResult.success(result);
+	}
+
+	/**
+	 * 修改运营收益
+	 */
+	@ApiOperation("修改运营收益")
+	@PutMapping("update")
+	public ResponseResult updateById(@RequestBody OperationalRevenue operationalRevenue) {
+		LocalDateTime now = LocalDateTime.now();
+		operationalRevenue.setUpdateTime(now);
+		operationalRevenue.setUpdateUser(String.valueOf(AuthUtil.getUserId()));
+		boolean result = operationalRevenueService.updateById(operationalRevenue);
+		return ResponseResult.success(result);
+	}
+
+	/**
+	 * 删除运营收益
+	 */
+	@ApiOperation("删除运营收益")
+	@DeleteMapping("delete/{id}")
+	public ResponseResult removeById(@ApiParam("主键ID") @PathVariable Long id) {
+		boolean result = operationalRevenueService.removeById(id);
+		return ResponseResult.success(result);
+	}
+
+	/**
+	 * 批量删除运营收益
+	 */
+	@ApiOperation("批量删除运营收益")
+	@DeleteMapping("/batch")
+	public ResponseResult removeByIds(@RequestBody List<Long> ids) {
+		boolean result = operationalRevenueService.removeByIds(ids);
+		return ResponseResult.success(result);
+	}
+}
diff --git a/drone-service/drone-gd/src/main/java/org/sxkj/gd/workOrder/entity/OperationalRevenue.java b/drone-service/drone-gd/src/main/java/org/sxkj/gd/workOrder/entity/OperationalRevenue.java
new file mode 100644
index 0000000..3ab2c2f
--- /dev/null
+++ b/drone-service/drone-gd/src/main/java/org/sxkj/gd/workOrder/entity/OperationalRevenue.java
@@ -0,0 +1,105 @@
+package org.sxkj.gd.workOrder.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+/**
+ * 运营收益实体类
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@TableName("ja_gd_operational_revenue")
+public class OperationalRevenue implements Serializable {
+
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 主键ID
+	 */
+	@TableId(value = "id", type = IdType.AUTO)
+	private Long id;
+
+	/**
+	 * 营业收入
+	 */
+	@TableField("operating_income")
+	private BigDecimal operatingIncome;
+
+	/**
+	 * 综合总成本费用
+	 */
+	@TableField("total_cost")
+	private BigDecimal totalCost;
+
+	/**
+	 * 净利润
+	 */
+	@TableField("net_profit")
+	private BigDecimal netProfit;
+
+	/**
+	 * 财务内部收益率(%)
+	 */
+	@TableField("financial_irr")
+	private BigDecimal financialIrr;
+
+	/**
+	 * 市场空间
+	 */
+	@TableField("market_space")
+	private String marketSpace;
+
+	/**
+	 * 创建时间
+	 */
+	@TableField(value = "create_time")
+	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private LocalDateTime createTime;
+
+	/**
+	 * 创建人
+	 */
+	@TableField(value = "create_user")
+	private String createUser;
+
+	/**
+	 * 创建部门
+	 */
+	@TableField(value = "create_dept")
+	private String createDept;
+
+	/**
+	 * 更新时间
+	 */
+	@TableField(value = "update_time")
+	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private LocalDateTime updateTime;
+
+	/**
+	 * 更新人
+	 */
+	@TableField(value = "update_user")
+	private String updateUser;
+
+	/**
+	 * 创建人名称
+	 */
+	@TableField("nick_name")
+	private String nickName;
+
+	@TableField(exist = false)
+	private String earnForecast;
+
+	/**
+	 * 删除标记(0:正常,1:删除)
+	 */
+	@TableLogic
+	@TableField("is_deleted")
+	private Integer isDeleted;
+}
diff --git a/drone-service/drone-gd/src/main/java/org/sxkj/gd/workOrder/mapper/OperationalRevenueMapper.java b/drone-service/drone-gd/src/main/java/org/sxkj/gd/workOrder/mapper/OperationalRevenueMapper.java
new file mode 100644
index 0000000..dfa7fdf
--- /dev/null
+++ b/drone-service/drone-gd/src/main/java/org/sxkj/gd/workOrder/mapper/OperationalRevenueMapper.java
@@ -0,0 +1,13 @@
+package org.sxkj.gd.workOrder.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import org.sxkj.gd.workOrder.entity.OperationalRevenue;
+
+/**
+ * 运营收益Mapper接口
+ */
+@Mapper
+public interface OperationalRevenueMapper extends BaseMapper<OperationalRevenue> {
+
+}
diff --git a/drone-service/drone-gd/src/main/java/org/sxkj/gd/workOrder/service/OperationalRevenueService.java b/drone-service/drone-gd/src/main/java/org/sxkj/gd/workOrder/service/OperationalRevenueService.java
new file mode 100644
index 0000000..30c1021
--- /dev/null
+++ b/drone-service/drone-gd/src/main/java/org/sxkj/gd/workOrder/service/OperationalRevenueService.java
@@ -0,0 +1,33 @@
+package org.sxkj.gd.workOrder.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.sxkj.gd.workOrder.entity.OperationalRevenue;
+import org.sxkj.gd.workOrder.vo.OperationalRevenueVo;
+
+/**
+ * 运营收益Service接口
+ */
+public interface OperationalRevenueService extends IService<OperationalRevenue> {
+
+	/**
+	 * 分页查询运营收益
+	 * @param page 分页参数
+	 * @param operatingIncome 营业收入
+	 * @param totalCost 综合总成本费用
+	 * @param netProfit 净利润
+	 * @param financialIrr 财务内部收益率
+	 * @param marketSpace 市场空间
+	 * @param nickName 创建人
+	 * @return 分页结果
+	 */
+	IPage<OperationalRevenue> selectPage(Page<OperationalRevenue> page, String operatingIncome, String totalCost, String netProfit, String financialIrr, String marketSpace, String nickName);
+
+	/**
+	 * 实体类转换Vo
+	 * @param entity 实体对象
+	 * @return Vo对象
+	 */
+	OperationalRevenueVo convertToVo(OperationalRevenue entity);
+}
diff --git a/drone-service/drone-gd/src/main/java/org/sxkj/gd/workOrder/service/impl/OperationalRevenueServiceImpl.java b/drone-service/drone-gd/src/main/java/org/sxkj/gd/workOrder/service/impl/OperationalRevenueServiceImpl.java
new file mode 100644
index 0000000..3354360
--- /dev/null
+++ b/drone-service/drone-gd/src/main/java/org/sxkj/gd/workOrder/service/impl/OperationalRevenueServiceImpl.java
@@ -0,0 +1,94 @@
+package org.sxkj.gd.workOrder.service.impl;
+
+import com.alibaba.nacos.common.utils.StringUtils;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+ import org.springframework.stereotype.Service;
+import org.sxkj.gd.workOrder.entity.OperationalRevenue;
+import org.sxkj.gd.workOrder.mapper.OperationalRevenueMapper;
+import org.sxkj.gd.workOrder.service.OperationalRevenueService;
+import org.sxkj.gd.workOrder.vo.OperationalRevenueVo;
+
+import java.math.BigDecimal;
+
+/**
+ * 运营收益Service实现类
+ */
+@Service
+public class OperationalRevenueServiceImpl extends ServiceImpl<OperationalRevenueMapper, OperationalRevenue>
+	implements OperationalRevenueService {
+
+	@Override
+	public IPage<OperationalRevenue> selectPage(Page<OperationalRevenue> page, String operatingIncome, String totalCost, String netProfit, String financialIrr, String marketSpace, String nickName) {
+		LambdaQueryWrapper<OperationalRevenue> queryWrapper = new LambdaQueryWrapper<>();
+
+		// 根据营业收入查询 (转换为精确查询)
+		if (StringUtils.hasText(operatingIncome)) {
+			try {
+				queryWrapper.eq(OperationalRevenue::getOperatingIncome, new BigDecimal(operatingIncome));
+			} catch (NumberFormatException e) {
+				// 如果转换失败,可以忽略或记录日志
+			}
+		}
+
+		// 根据综合总成本费用查询 (转换为精确查询)
+		if (StringUtils.hasText(totalCost)) {
+			try {
+				queryWrapper.eq(OperationalRevenue::getTotalCost, new BigDecimal(totalCost));
+			} catch (NumberFormatException e) {
+				//
+			}
+		}
+
+		// 根据净利润查询 (转换为精确查询)
+		if (StringUtils.hasText(netProfit)) {
+			try {
+				queryWrapper.eq(OperationalRevenue::getNetProfit, new BigDecimal(netProfit));
+			} catch (NumberFormatException e) {
+				//
+			}
+		}
+
+		// 根据财务内部收益率查询 (转换为精确查询)
+		if (StringUtils.hasText(financialIrr)) {
+			try {
+				queryWrapper.eq(OperationalRevenue::getFinancialIrr, new BigDecimal(financialIrr));
+			} catch (NumberFormatException e) {
+				//
+			}
+		}
+
+		// 根据市场空间模糊查询
+		if (StringUtils.hasText(marketSpace)) {
+			queryWrapper.like(OperationalRevenue::getMarketSpace, marketSpace);
+		}
+
+		// 根据创建人名称模糊查询
+		if (StringUtils.hasText(nickName)) {
+			queryWrapper.like(OperationalRevenue::getNickName, nickName);
+		}
+
+
+		// 按创建时间倒序
+		queryWrapper.orderByDesc(OperationalRevenue::getCreateTime);
+
+		return this.page(page, queryWrapper);
+	}
+
+	@Override
+	public OperationalRevenueVo convertToVo(OperationalRevenue entity) {
+		OperationalRevenueVo vo = new OperationalRevenueVo();
+		vo.setId(String.valueOf(entity.getId()));
+		vo.setOperatingIncome(entity.getOperatingIncome());
+		vo.setTotalCost(entity.getTotalCost());
+		vo.setNetProfit(entity.getNetProfit());
+		vo.setFinancialIrr(entity.getFinancialIrr());
+		vo.setMarketSpace(entity.getMarketSpace());
+		vo.setEarnForecast(entity.getEarnForecast());
+		vo.setNickName(entity.getNickName());
+		vo.setCreateTime(entity.getCreateTime());
+		return vo;
+	}
+}
diff --git a/drone-service/drone-gd/src/main/java/org/sxkj/gd/workOrder/vo/OperationalRevenueVo.java b/drone-service/drone-gd/src/main/java/org/sxkj/gd/workOrder/vo/OperationalRevenueVo.java
new file mode 100644
index 0000000..dd51be7
--- /dev/null
+++ b/drone-service/drone-gd/src/main/java/org/sxkj/gd/workOrder/vo/OperationalRevenueVo.java
@@ -0,0 +1,22 @@
+package org.sxkj.gd.workOrder.vo;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+/**
+ * 运营收益视图对象
+ */
+@Data
+public class OperationalRevenueVo {
+	private String id;
+	private BigDecimal operatingIncome;
+	private BigDecimal totalCost;
+	private BigDecimal netProfit;
+	private BigDecimal financialIrr;
+	private String marketSpace;
+	private String nickName;
+	private String earnForecast;
+	private LocalDateTime createTime;
+}

--
Gitblit v1.9.3