进度管理app

This commit is contained in:
lcj
2025-09-10 19:18:30 +08:00
parent 697beb67c4
commit 7dd6d97a3e
8 changed files with 117 additions and 38 deletions

View File

@ -82,13 +82,13 @@ public class PgsProgressPlanController extends BaseController {
/** /**
* 删除进度计划 * 删除进度计划
* *
* @param id 主键 * @param ids 主键
*/ */
@SaCheckPermission("progress:progressPlan:remove") @SaCheckPermission("progress:progressPlan:remove")
@Log(title = "进度计划", businessType = BusinessType.DELETE) @Log(title = "进度计划", businessType = BusinessType.DELETE)
@DeleteMapping("/{id}") @DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空") public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long id) { @PathVariable Long[] ids) {
return toAjax(pgsProgressPlanService.deleteById(id)); return toAjax(pgsProgressPlanService.deleteByIds(List.of(ids)));
} }
} }

View File

@ -15,6 +15,7 @@ import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import java.math.BigDecimal;
import java.util.List; import java.util.List;
/** /**
@ -62,4 +63,15 @@ public class PgsProgressCategoryAppController {
return R.ok(progressCategoryService.queryLastTimeById(id)); return R.ok(progressCategoryService.queryLastTimeById(id));
} }
/**
* 获取进度类别未完成数量
*
* @param id 主键
*/
@GetMapping("/unfinishNumber/{id}")
public R<BigDecimal> getUnFinishNumber(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(progressCategoryService.getUnFinishNumber(id));
}
} }

View File

@ -11,11 +11,14 @@ import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.web.core.BaseController; import org.dromara.common.web.core.BaseController;
import org.dromara.progress.domain.dto.progressplan.PgsProgressPlanCreateReq; import org.dromara.progress.domain.dto.progressplan.PgsProgressPlanCreateReq;
import org.dromara.progress.domain.dto.progressplan.PgsProgressPlanQueryReq; import org.dromara.progress.domain.dto.progressplan.PgsProgressPlanQueryReq;
import org.dromara.progress.domain.dto.progressplan.PgsProgressPlanRemoveReq;
import org.dromara.progress.domain.vo.progressplan.PgsProgressPlanVo; import org.dromara.progress.domain.vo.progressplan.PgsProgressPlanVo;
import org.dromara.progress.service.IPgsProgressPlanService; import org.dromara.progress.service.IPgsProgressPlanService;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.util.List;
/** /**
* 进度计划 app 接口 * 进度计划 app 接口
* *
@ -59,4 +62,14 @@ public class PgsProgressPlanAppController extends BaseController {
return R.ok(progressPlanService.insertByBo(req)); return R.ok(progressPlanService.insertByBo(req));
} }
/**
* 删除进度计划
*/
@Log(title = "进度计划", businessType = BusinessType.DELETE)
@PostMapping("/remove")
public R<Void> remove(@Validated @RequestBody PgsProgressPlanRemoveReq req) {
List<Long> ids = req.getIds();
return toAjax(progressPlanService.deleteByIds(ids));
}
} }

View File

@ -0,0 +1,25 @@
package org.dromara.progress.domain.dto.progressplan;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.List;
/**
* @author lilemy
* @date 2025-09-10 17:28
*/
@Data
public class PgsProgressPlanRemoveReq implements Serializable {
@Serial
private static final long serialVersionUID = -4690448781757278592L;
/**
* 主键串
*/
@NotNull(message = "主键不能为空")
private List<Long> ids;
}

View File

@ -188,4 +188,12 @@ public interface IPgsProgressCategoryService extends IService<PgsProgressCategor
* @return 项目进度百分比 * @return 项目进度百分比
*/ */
BigDecimal getCompletedPercentage(List<PgsProgressCategory> categoryList); BigDecimal getCompletedPercentage(List<PgsProgressCategory> categoryList);
/**
* 获取项目进度类别未完成数量
*
* @param id 主键
* @return 未完成数量
*/
BigDecimal getUnFinishNumber(Long id);
} }

View File

@ -58,10 +58,10 @@ public interface IPgsProgressPlanService extends IService<PgsProgressPlan> {
/** /**
* 删除进度计划信息 * 删除进度计划信息
* *
* @param id 待删除的主键 * @param ids 待删除的主键
* @return 是否删除成功 * @return 是否删除成功
*/ */
Boolean deleteById(Long id); Boolean deleteByIds(List<Long> ids);
/** /**
* 获取进度计划视图对象 * 获取进度计划视图对象

View File

@ -1348,4 +1348,27 @@ public class PgsProgressCategoryServiceImpl extends ServiceImpl<PgsProgressCateg
return BigDecimalUtil.toPercentage(completedTotal, allTotal); return BigDecimalUtil.toPercentage(completedTotal, allTotal);
} }
/**
* 获取项目进度类别未完成数量
*
* @param id 主键
* @return 未完成数量
*/
@Override
public BigDecimal getUnFinishNumber(Long id) {
PgsProgressCategory category = this.getById(id);
if (category == null) {
return BigDecimal.ZERO;
}
BigDecimal total = category.getTotal();
BigDecimal completed = category.getCompleted();
// 如果是百分比,需要转换为数值
if (PgsProgressUnitTypeEnum.PERCENTAGE.getValue().equals(category.getUnitType())) {
completed = completed
.divide(BigDecimal.valueOf(100L), 2, RoundingMode.HALF_UP)
.multiply(total);
}
return total.subtract(completed);
}
} }

View File

@ -11,7 +11,6 @@ import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.ObjectUtils; import org.dromara.common.core.utils.ObjectUtils;
import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.facility.domain.FacMatrix; import org.dromara.facility.domain.FacMatrix;
import org.dromara.facility.service.IFacMatrixService; import org.dromara.facility.service.IFacMatrixService;
import org.dromara.progress.domain.PgsProgressCategory; import org.dromara.progress.domain.PgsProgressCategory;
@ -190,19 +189,17 @@ public class PgsProgressPlanServiceImpl extends ServiceImpl<PgsProgressPlanMappe
/** /**
* 删除进度计划信息 * 删除进度计划信息
* *
* @param id 待删除的主键 * @param ids 待删除的主键
* @return 是否删除成功 * @return 是否删除成功
*/ */
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public Boolean deleteById(Long id) { public Boolean deleteByIds(List<Long> ids) {
Long userId = LoginHelper.getUserId(); for (Long id : ids) {
PgsProgressPlan progressPlan = this.getById(id); PgsProgressPlan progressPlan = this.getById(id);
if (progressPlan == null) { if (progressPlan == null) {
throw new ServiceException("进度计划信息不存在", HttpStatus.NOT_FOUND); throw new ServiceException("进度计划信息不存在", HttpStatus.NOT_FOUND);
} }
Long projectId = progressPlan.getProjectId();
projectService.validAuth(projectId, userId);
if (progressPlan.getPlanNumber() != null && progressPlan.getPlanNumber().compareTo(BigDecimal.ZERO) != 0) { if (progressPlan.getPlanNumber() != null && progressPlan.getPlanNumber().compareTo(BigDecimal.ZERO) != 0) {
throw new ServiceException("已存在完成的设施,无法删除", HttpStatus.CONFLICT); throw new ServiceException("已存在完成的设施,无法删除", HttpStatus.CONFLICT);
} }
@ -226,6 +223,7 @@ public class PgsProgressPlanServiceImpl extends ServiceImpl<PgsProgressPlanMappe
if (!remove) { if (!remove) {
throw new ServiceException("删除进度计划详情失败,数据库异常", HttpStatus.ERROR); throw new ServiceException("删除进度计划详情失败,数据库异常", HttpStatus.ERROR);
} }
}
return true; return true;
} }