From 08d4bb2bf4bfadc9ab5fcf6b0a2bfb543d22b2a0 Mon Sep 17 00:00:00 2001
From: linwei <872216696@qq.com>
Date: Thu, 05 Feb 2026 10:13:10 +0800
Subject: [PATCH] 工单优化

---
 drone-service/drone-gd/src/main/java/org/sxkj/gd/orderdata/service/impl/GdSupplyDemandServiceImpl.java |  212 +++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 205 insertions(+), 7 deletions(-)

diff --git a/drone-service/drone-gd/src/main/java/org/sxkj/gd/orderdata/service/impl/GdSupplyDemandServiceImpl.java b/drone-service/drone-gd/src/main/java/org/sxkj/gd/orderdata/service/impl/GdSupplyDemandServiceImpl.java
index 9cd923d..3f64131 100644
--- a/drone-service/drone-gd/src/main/java/org/sxkj/gd/orderdata/service/impl/GdSupplyDemandServiceImpl.java
+++ b/drone-service/drone-gd/src/main/java/org/sxkj/gd/orderdata/service/impl/GdSupplyDemandServiceImpl.java
@@ -16,17 +16,33 @@
  */
 package org.sxkj.gd.orderdata.service.impl;
 
-import org.sxkj.gd.orderdata.entity.GdSupplyDemandEntity;
-import org.sxkj.gd.orderdata.param.GdSupplyDemandPageParam;
-import org.sxkj.gd.orderdata.vo.GdSupplyDemandVO;
-import org.sxkj.gd.orderdata.excel.GdSupplyDemandExcel;
-import org.sxkj.gd.orderdata.mapper.GdSupplyDemandMapper;
-import org.sxkj.gd.orderdata.service.IGdSupplyDemandService;
-import org.springframework.stereotype.Service;
 import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import lombok.AllArgsConstructor;
+import org.springblade.core.log.exception.ServiceException;
 import org.springblade.core.mp.base.BaseServiceImpl;
+import org.springblade.core.secure.utils.AuthUtil;
+import org.springblade.core.tool.utils.BeanUtil;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.core.tool.utils.StringUtil;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.sxkj.gd.orderdata.dto.GdSupplyDemandDTO;
+import org.sxkj.gd.orderdata.entity.GdSupplyDemandAuditAttachmentEntity;
+import org.sxkj.gd.orderdata.entity.GdSupplyDemandAuditEntity;
+import org.sxkj.gd.orderdata.entity.GdSupplyDemandEntity;
+import org.sxkj.gd.orderdata.excel.GdSupplyDemandExcel;
+import org.sxkj.gd.orderdata.mapper.GdSupplyDemandMapper;
+import org.sxkj.gd.orderdata.param.GdSupplyDemandPageParam;
+import org.sxkj.gd.orderdata.service.IGdSupplyDemandAuditAttachmentService;
+import org.sxkj.gd.orderdata.service.IGdSupplyDemandAuditService;
+import org.sxkj.gd.orderdata.service.IGdSupplyDemandService;
+import org.sxkj.gd.orderdata.vo.GdSupplyDemandVO;
+import org.sxkj.system.cache.SysCache;
+
+import java.util.ArrayList;
 import java.util.List;
+import java.util.Objects;
 
 /**
  * 供需需求信息表 服务实现类
@@ -35,13 +51,195 @@
  * @since 2026-01-16
  */
 @Service
+@AllArgsConstructor
 public class GdSupplyDemandServiceImpl extends BaseServiceImpl<GdSupplyDemandMapper, GdSupplyDemandEntity> implements IGdSupplyDemandService {
+
+	/**
+	 * 需求状态常量:0-草稿、1-申请中、2-审核通过、3-拒绝申请
+	 */
+	private static final String STATUS_DRAFT = "0";
+	private static final String STATUS_APPLY = "1";
+	private static final String STATUS_APPROVED = "2";
+	private static final String STATUS_REJECTED = "3";
+
+	/**
+	 * 审核状态常量:0-待审核、1-审核通过、2-审核拒绝
+	 */
+	private static final String AUDIT_PENDING = "0";
+	private static final String AUDIT_PASS = "1";
+	private static final String AUDIT_REJECT = "2";
+
+	private final IGdSupplyDemandAuditService gdSupplyDemandAuditService;
+	private final IGdSupplyDemandAuditAttachmentService gdSupplyDemandAuditAttachmentService;
 
 	@Override
 	public IPage<GdSupplyDemandVO> selectGdSupplyDemandPage(IPage<GdSupplyDemandVO> page, GdSupplyDemandPageParam gdSupplyDemand) {
+		List<Long> deptList = new ArrayList<>();
+		if (!AuthUtil.isAdministrator()) {
+			deptList = SysCache.getDeptChildIds(Long.valueOf(AuthUtil.getDeptId()));
+		}
+		gdSupplyDemand.setDeptList(deptList);
 		return page.setRecords(baseMapper.selectGdSupplyDemandPage(page, gdSupplyDemand));
 	}
 
+	@Override
+	public IPage<GdSupplyDemandEntity> selectGdSupplyDemandList(IPage<GdSupplyDemandEntity> page, GdSupplyDemandDTO gdSupplyDemand) {
+		return page.setRecords(baseMapper.selectGdSupplyDemandList(page, gdSupplyDemand));
+	}
+
+	@Override
+	public GdSupplyDemandEntity detailSupplyDemand(GdSupplyDemandDTO gdSupplyDemand) {
+		if (Func.isEmpty(gdSupplyDemand)) {
+			throw new ServiceException("需求参数不能为空");
+		}
+		List<Long> deptList = new ArrayList<>();
+		if (!AuthUtil.isAdministrator()) {
+			deptList = SysCache.getDeptChildIds(Long.valueOf(AuthUtil.getDeptId()));
+		}
+		GdSupplyDemandEntity detail = baseMapper.selectGdSupplyDemandDetail(gdSupplyDemand, deptList);
+		if (detail == null) {
+			throw new ServiceException("未查询到数据");
+		}
+		return detail;
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public boolean submitSupplyDemand(GdSupplyDemandDTO gdSupplyDemand) {
+		if (Func.isEmpty(gdSupplyDemand)) {
+			throw new ServiceException("需求参数不能为空");
+		}
+		GdSupplyDemandEntity supplyDemand = Objects.requireNonNull(BeanUtil.copy(gdSupplyDemand, GdSupplyDemandEntity.class));
+
+		// 获取前端传入的需求状态
+		String demandStatus = supplyDemand.getDemandStatus();
+		if (StringUtil.isBlank(demandStatus)) {
+			throw new ServiceException("需求状态不能为空");
+		}
+
+		// 校验状态值有效性
+		if (!STATUS_DRAFT.equals(demandStatus) && !STATUS_APPLY.equals(demandStatus)) {
+			throw new ServiceException("需求状态值无效,仅支持 0(草稿) 或 1(申请中)");
+		}
+
+		boolean isInsert = Func.isEmpty(supplyDemand.getId());
+		Long userId = AuthUtil.getUserId();
+		Long deptId = Long.valueOf(AuthUtil.getDeptId());
+		supplyDemand.setUpdateUser(userId);
+
+		boolean saved;
+		if (isInsert) {
+			supplyDemand.setCreateUser(userId);
+			supplyDemand.setCreateDept(deptId);
+			saved = baseMapper.insertGdSupplyDemand(supplyDemand) > 0;
+		} else {
+			saved = baseMapper.updateGdSupplyDemand(supplyDemand) > 0;
+		}
+
+		if (!saved) {
+			return false;
+		}
+
+		// 仅当状态为"申请中"(1)时才创建审核记录
+		if (STATUS_APPLY.equals(demandStatus)) {
+			GdSupplyDemandEntity auditDemand = loadSupplyDemandForAudit(supplyDemand.getId());
+			GdSupplyDemandAuditEntity auditEntity = buildAuditEntity(auditDemand, AUDIT_PENDING, null);
+			return gdSupplyDemandAuditService.saveSupplyDemandAudit(auditEntity);
+		}
+
+		// 状态为"草稿"(0)时直接返回成功
+		return true;
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public boolean approveSupplyDemand(Long demandId, String auditOpinion, List<Long> attachIds) {
+		GdSupplyDemandEntity supplyDemand = loadSupplyDemandForAudit(demandId);
+		Long userId = AuthUtil.getUserId();
+		GdSupplyDemandEntity update = new GdSupplyDemandEntity();
+		update.setId(demandId);
+		update.setDemandStatus(STATUS_APPROVED);
+		update.setUpdateUser(userId);
+		boolean updated = baseMapper.updateGdSupplyDemand(update) > 0;
+		if (!updated) {
+			return false;
+		}
+		GdSupplyDemandAuditEntity auditEntity = buildAuditEntity(supplyDemand, AUDIT_PASS, auditOpinion);
+		boolean auditSaved = gdSupplyDemandAuditService.saveSupplyDemandAudit(auditEntity);
+		if (!auditSaved) {
+			return false;
+		}
+		if (Func.isEmpty(attachIds)) {
+			return true;
+		}
+		List<GdSupplyDemandAuditAttachmentEntity> attachments = new ArrayList<>();
+		Long deptId = Long.valueOf(AuthUtil.getDeptId());
+		attachIds.forEach(attachId -> {
+			if (attachId == null) {
+				return;
+			}
+			GdSupplyDemandAuditAttachmentEntity attachment = new GdSupplyDemandAuditAttachmentEntity();
+			attachment.setDemandId(demandId);
+			attachment.setAttachId(attachId);
+			attachment.setAreaCode(supplyDemand.getAreaCode());
+			attachment.setCreateUser(userId);
+			attachment.setCreateDept(deptId);
+			attachments.add(attachment);
+		});
+		if (attachments.isEmpty()) {
+			return true;
+		}
+		return gdSupplyDemandAuditAttachmentService.saveSupplyDemandAuditAttachments(attachments);
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public boolean rejectSupplyDemand(Long demandId, String auditOpinion) {
+		if (StringUtil.isBlank(auditOpinion)) {
+			throw new ServiceException("拒绝原因不能为空");
+		}
+		GdSupplyDemandEntity supplyDemand = loadSupplyDemandForAudit(demandId);
+		Long userId = AuthUtil.getUserId();
+		GdSupplyDemandEntity update = new GdSupplyDemandEntity();
+		update.setId(demandId);
+		update.setDemandStatus(STATUS_REJECTED);
+		update.setUpdateUser(userId);
+		boolean updated = baseMapper.updateGdSupplyDemand(update) > 0;
+		if (!updated) {
+			return false;
+		}
+		GdSupplyDemandAuditEntity auditEntity = buildAuditEntity(supplyDemand, AUDIT_REJECT, auditOpinion);
+		return gdSupplyDemandAuditService.saveSupplyDemandAudit(auditEntity);
+	}
+
+	private GdSupplyDemandAuditEntity buildAuditEntity(GdSupplyDemandEntity supplyDemand, String auditStatus, String auditOpinion) {
+		if (Func.isEmpty(supplyDemand) || supplyDemand.getId() == null) {
+			throw new ServiceException("需求数据不存在");
+		}
+		Long userId = AuthUtil.getUserId();
+		Long deptId = Long.valueOf(AuthUtil.getDeptId());
+		GdSupplyDemandAuditEntity auditEntity = new GdSupplyDemandAuditEntity();
+		auditEntity.setDemandId(supplyDemand.getId());
+		auditEntity.setAuditStatus(auditStatus);
+		auditEntity.setAuditOpinion(StringUtil.isBlank(auditOpinion) ? null : auditOpinion);
+		auditEntity.setAreaCode(supplyDemand.getAreaCode());
+		auditEntity.setCreateUser(userId);
+		auditEntity.setCreateDept(deptId);
+		return auditEntity;
+	}
+
+	private GdSupplyDemandEntity loadSupplyDemandForAudit(Long demandId) {
+		if (demandId == null) {
+			throw new ServiceException("需求编号不能为空");
+		}
+		GdSupplyDemandDTO query = new GdSupplyDemandDTO();
+		query.setId(demandId);
+		GdSupplyDemandEntity detail = baseMapper.selectGdSupplyDemandDetail(query, SysCache.getDeptChildIds(Long.valueOf(AuthUtil.getDeptId())));
+		if (detail == null) {
+			throw new ServiceException("需求数据不存在");
+		}
+		return detail;
+	}
 
 	@Override
 	public List<GdSupplyDemandExcel> exportGdSupplyDemand(Wrapper<GdSupplyDemandEntity> queryWrapper) {

--
Gitblit v1.9.3