package com.ruoyi.web.controller.api; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.ruoyi.common.annotation.Log; import com.ruoyi.common.basic.PageInfo; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.enums.BusinessType; import com.ruoyi.system.model.ContractTemplate; import com.ruoyi.system.model.ProjectInvestment; import com.ruoyi.system.model.ProjectMain; import com.ruoyi.system.model.ProjectSettleItem; import com.ruoyi.system.query.ContractTemplateListQuery; import com.ruoyi.system.query.ProjectMainListQuery; import com.ruoyi.system.query.ProjectPhaseListQuery; import com.ruoyi.system.service.ProjectInventoryService; import com.ruoyi.system.service.ProjectInvestmentService; import com.ruoyi.system.service.ProjectMainService; import com.ruoyi.system.service.ProjectSettleItemService; import com.ruoyi.system.vo.ProjectMainListVO; import com.ruoyi.system.vo.ProjectPhaseListVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.time.LocalDate; import java.util.Arrays; /** *

* 项目主表 前端控制器 *

* * @author WuGuanFengYue * @since 2025-10-16 */ @RestController @Api(tags = "项目管理") @RequestMapping("/project-main") public class ProjectMainController { @Resource private ProjectMainService projectMainService; @Resource private ProjectInvestmentService projectInvestmentService; @Resource private ProjectSettleItemService projectSettleItemService; @ApiOperation(value = "储备项目分页列表") @PostMapping(value = "/pageList") public R> pageList(@RequestBody ProjectMainListQuery query) { return R.ok(projectMainService.pageList(query)); } @ApiOperation(value = "添加") @Transactional @Log(title = "储备项目-添加", businessType = BusinessType.INSERT) @PostMapping(value = "/add") public R save(@RequestBody ProjectMain entity) { projectMainService.save(entity); ProjectInvestment projectInvestment1 = entity.getProjectInvestment1(); projectInvestment1.setInvestmentType(1); projectInvestment1.setProjectId(entity.getId()); projectInvestmentService.save(projectInvestment1); if (entity.getProjectInvestment2() !=null){ ProjectInvestment projectInvestment2 = entity.getProjectInvestment2(); projectInvestment2.setProjectId(entity.getId()); projectInvestment2.setInvestmentType(2); projectInvestmentService.save(projectInvestment2); } return R.ok(); } @ApiOperation(value = "修改") @Transactional @Log(title = "储备项目-修改", businessType = BusinessType.UPDATE) @PostMapping(value = "/edit") public R edit(@RequestBody ProjectMain entity) { projectMainService.updateById(entity); ProjectInvestment projectInvestment = entity.getProjectInvestment1(); projectInvestment.setProjectId(entity.getId()); projectInvestmentService.updateById(projectInvestment); if (entity.getProjectInvestment2() !=null){ ProjectInvestment projectInvestment2 = entity.getProjectInvestment2(); projectInvestment2.setProjectId(entity.getId()); projectInvestment2.setInvestmentType(2); projectInvestmentService.updateById(projectInvestment2); } return R.ok(); } @ApiOperation(value = "储备项目启动") @Log(title = "储备项目-启动", businessType = BusinessType.UPDATE) @GetMapping(value = "/start") public R start(Integer id) { ProjectMain projectMain = projectMainService.getById(id); if (projectMain.getStatus()!=1){ return R.fail("项目已经启动!"); } projectMain.setStatus(3); projectMainService.updateById(projectMain); return R.ok(); } @ApiOperation(value = "储备项目详情") @GetMapping(value = "/detail") public R detail(Integer id ) { ProjectMain projectMain = projectMainService.getById(id); ProjectInvestment projectInvestment1 = projectInvestmentService.lambdaQuery() .eq(ProjectInvestment::getProjectId, id) .eq(ProjectInvestment::getInvestmentType, 1) .last("limit 1").one(); projectMain.setProjectInvestment1(projectInvestment1); ProjectInvestment projectInvestment2 = projectInvestmentService.lambdaQuery() .eq(ProjectInvestment::getProjectId, id) .eq(ProjectInvestment::getInvestmentType, 2) .last("limit 1").one(); projectMain.setProjectInvestment1(projectInvestment2); return R.ok(projectMain); } @Log(title = "储备项目-删除", businessType = BusinessType.DELETE) @ApiOperation(value = "储备项目-删除") @Transactional @DeleteMapping(value = "/delete") public R delete(@RequestParam String ids) { projectInvestmentService.remove(new LambdaQueryWrapper() .in(ProjectInvestment::getProjectId, Arrays.asList(ids.split(",")))); projectMainService.removeByIds(Arrays.asList(ids.split(","))); return R.ok(); } @ApiOperation(value = "项目阶段分页列表") @PostMapping(value = "/pageListPhase") public R> pageListPhase(@RequestBody ProjectPhaseListQuery query) { return R.ok(projectMainService.pageListPhase(query)); } @ApiOperation(value = "项目阶段-添加事项") @Log(title = "项目阶段-添加事项", businessType = BusinessType.INSERT) @PostMapping(value = "/addSettleItem") public R addSettleItem(@RequestBody ProjectSettleItem entity) { if (StringUtils.hasLength(entity.getFileUrl())){ entity.setStatus(3); }else{ if (entity.getSettleTime().isBefore(LocalDate.now())) { entity.setStatus(2); } } projectSettleItemService.save(entity); return R.ok(); } @ApiOperation(value = "项目阶段-编辑事项") @Log(title = "项目阶段-编辑事项", businessType = BusinessType.UPDATE) @PostMapping(value = "/editSettleItem") public R editSettleItem(@RequestBody ProjectSettleItem entity) { if (StringUtils.hasLength(entity.getFileUrl())){ entity.setStatus(3); }else{ if (entity.getSettleTime().isBefore(LocalDate.now())) { entity.setStatus(2); } } projectSettleItemService.updateById(entity); return R.ok(); } @ApiOperation(value = "项目阶段-事项详情") @GetMapping(value = "/detailSettleItem") public R detailSettleItem(Integer id) { return R.ok(projectSettleItemService.getById(id)); } @Log(title = "项目阶段-删除事项", businessType = BusinessType.DELETE) @ApiOperation(value = "项目阶段-删除事项") @DeleteMapping(value = "/deleteSettleItem") public R deleteSettleItem(@RequestParam String ids) { projectSettleItemService.removeByIds(Arrays.asList(ids.split(","))); return R.ok(); } @ApiOperation(value = "项目进入下一阶段") @Log(title = "项目进入下一阶段", businessType = BusinessType.UPDATE) @GetMapping(value = "/next") public R next(Integer id) { ProjectMain projectMain = projectMainService.getById(id); if (projectMain.getStatus()==5){ return R.fail("当前项目已到最后阶段!"); } projectMain.setStatus(projectMain.getStatus()+1); projectMainService.updateById(projectMain); return R.ok(); } }