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.core.domain.entity.SysUser;
import com.ruoyi.common.core.domain.entity.TDept;
import com.ruoyi.common.core.domain.model.LoginUser;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.framework.web.service.TokenService;
import com.ruoyi.system.dto.AddAssetRepairRequestDTO;
import com.ruoyi.system.dto.AddContractDTO;
import com.ruoyi.system.model.AssetMain;
import com.ruoyi.system.model.AssetRepairRequest;
import com.ruoyi.system.model.AssetRepairRequestItem;
import com.ruoyi.system.query.AssetRepairRequestListQuery;
import com.ruoyi.system.query.AssetStatisticsListQuery;
import com.ruoyi.system.service.*;
import com.ruoyi.system.service.AssetMainService;
import com.ruoyi.system.service.AssetRepairRecordService;
import com.ruoyi.system.service.TDeptService;
import com.ruoyi.system.vo.AssetRepairListVO;
import com.ruoyi.system.vo.AssetRepairRequestVO;
import com.ruoyi.system.vo.AssetStatisticsVO;
import com.ruoyi.system.vo.GrabListVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.models.auth.In;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
/**
*
* 资产报修主表 前端控制器
*
*
* @author WuGuanFengYue
* @since 2025-09-15
*/
@RestController
@RequestMapping("/asset-repair-request")
@Api(tags = {"资产报修"})
public class AssetRepairRequestController {
@Resource
private AssetRepairRecordService assetRepairRecordService;
@Resource
private AssetRepairRequestService assetRepairRequestService;
@Resource
private OaApprovalApplicationAssetItemService approvalApplicationAssetItemService;
@Resource
private AssetRepairRequestItemService assetRepairRequestItemService;
@Autowired
private TokenService tokenService;
@Autowired
private TDeptService deptService;
@Autowired
private ISysUserService sysUserService;
@Resource
private AssetMainService assetMainService;
@ApiOperation("资产报修分页列表")
@PostMapping("/pageList")
public R> pageList(@RequestBody AssetRepairRequestListQuery query) {
String deptId = tokenService.getLoginUser().getDeptId();
List deptIds = deptService.getAllSubDeptIds(deptId);
if (deptIds.isEmpty()) {
return R.ok(new PageInfo<>());
} else {
query.setDeptIds(deptIds);
List userIds = sysUserService.selectAllList().stream().filter(e -> deptIds.contains(Integer.valueOf(e.getDeptId())))
.map(SysUser::getUserId).collect(Collectors.toList());
if (userIds.isEmpty()){
return R.ok(new PageInfo<>());
}
}
return R.ok(assetRepairRecordService.pageList(query));
}
@ApiOperation("资产报修不分页列表")
@PostMapping("/listAll")
public R> listAll(@RequestBody AssetRepairRequestListQuery query) {
String deptId = tokenService.getLoginUser().getDeptId();
List deptIds = deptService.getAllSubDeptIds(deptId);
if (deptIds.isEmpty()) {
return R.ok(new ArrayList<>());
} else {
query.setDeptIds(deptIds);
List userIds = sysUserService.selectAllList().stream().filter(e -> deptIds.contains(Integer.valueOf(e.getDeptId())))
.map(SysUser::getUserId).collect(Collectors.toList());
if (userIds.isEmpty()){
return R.ok(new ArrayList<>());
}
}
List assetMainIds = assetMainService.lambdaQuery().in(AssetMain::getOwnershipDeptId, deptIds).list()
.stream().map(AssetMain::getId).collect(Collectors.toList());
if (assetMainIds.isEmpty()){
return R.ok(new ArrayList<>());
}
query.setAssetMainIds(assetMainIds);
return R.ok(assetRepairRecordService.listAll(query));
}
@Log(title = "资产报修-新增", businessType = BusinessType.INSERT)
@ApiOperation(value = "资产报修新增")
@PostMapping(value = "/add")
public R add(@RequestBody AddAssetRepairRequestDTO dto) {
dto.setRepairNo("1");
Long userId = tokenService.getLoginUser().getUserId();
dto.setReporterId(userId.intValue());
assetRepairRequestService.save(dto);
for (AssetRepairRequestItem assetRepairRequestItem : dto.getList()) {
assetRepairRequestItem.setRepairRequestId(dto.getId());
}
assetRepairRequestItemService.saveBatch(dto.getList());
return R.ok();
}
@Log(title = "资产报修-编辑", businessType = BusinessType.UPDATE)
@ApiOperation(value = "资产报修编辑")
@PostMapping(value = "/update")
public R update(@RequestBody AddAssetRepairRequestDTO dto) {
assetRepairRequestService.updateById(dto);
assetRepairRequestItemService.remove(new LambdaQueryWrapper()
.eq(AssetRepairRequestItem::getRepairRequestId, dto.getId()));
assetRepairRequestItemService.saveBatch(dto.getList());
return R.ok();
}
@ApiOperation(value = "资产报修详情")
@GetMapping(value = "/detail")
public R detail(Integer id) {
AddAssetRepairRequestDTO res = new AddAssetRepairRequestDTO();
AssetRepairRequest assetRepairRequest = assetRepairRequestService.getById(id);
BeanUtils.copyProperties(assetRepairRequest, res);
List items = assetRepairRequestItemService.listDetail(id);
res.setListDetail(items);
SysUser sysUser = sysUserService.selectUserById(Long.valueOf(assetRepairRequest.getReporterId()));
if (sysUser!=null){
res.setReporterName(sysUser.getNickName());
}
return R.ok(res);
}
@Log(title = "资产报修-删除", businessType = BusinessType.DELETE)
@ApiOperation(value = "资产报修-删除")
@DeleteMapping(value = "/delete")
public R delete(@RequestParam String ids) {
assetRepairRequestItemService.remove(new LambdaQueryWrapper()
.in(AssetRepairRequestItem::getRepairRequestId, Arrays.asList(ids.split(","))));
assetRepairRequestService.removeBatchByIds(Arrays.asList(ids.split(",")));
return R.ok();
}
}