package com.ruoyi.web.controller.api;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.utils.SmsUtil;
import com.ruoyi.framework.web.service.TokenService;
import com.ruoyi.system.dto.TFaultRepairMessageDTO;
import com.ruoyi.system.model.*;
import com.ruoyi.system.service.*;
import com.ruoyi.system.vo.TFaultAreaDicVO;
import com.ruoyi.system.vo.TItemTypeVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
import java.time.LocalDate;
import java.util.List;
import java.util.stream.Collectors;
/**
*
* 报修管理 前端控制器
*
*
* @author xiaochen
* @since 2025-01-17
*/
@Api(tags = "报修管理")
@RestController
@RequestMapping("/t-fault-repair-message")
public class TFaultRepairMessageController {
private final TFaultRepairMessageService tFaultRepairMessageService;
private final TItemService itemService;
private final TItemTypeService itemTypeService;
private final TFaultAreaDicService faultAreaDicService;
private final TFaultDescribeDicService faultDescribeDicService;
private final TokenService tokenService;
private final TContractService contractService;
private final THouseService houseService;
private final SmsUtil smsUtil;
private final ISysUserService sysUserService;
@Autowired
public TFaultRepairMessageController(TFaultRepairMessageService tFaultRepairMessageService, TItemService itemService, TItemTypeService itemTypeService, TFaultAreaDicService faultAreaDicService, TFaultDescribeDicService faultDescribeDicService, TokenService tokenService, TContractService contractService, THouseService houseService,SmsUtil smsUtil
,ISysUserService sysUserService) {
this.tFaultRepairMessageService = tFaultRepairMessageService;
this.itemService = itemService;
this.itemTypeService = itemTypeService;
this.faultAreaDicService = faultAreaDicService;
this.faultDescribeDicService = faultDescribeDicService;
this.tokenService = tokenService;
this.contractService = contractService;
this.houseService = houseService;
this.smsUtil = smsUtil;
this.sysUserService = sysUserService;
}
/**
* 获取维修物品二级结构
*/
@ApiOperation(value = "获取维修物品二级结构")
@GetMapping(value = "/getItemList")
public R> getItemList(@RequestParam(required = false) String itemName) {
List itemTypes = itemTypeService.getItemList(itemName);
List items = itemService.list();
itemTypes.forEach(itemType -> {
itemType.setItemList(items.stream().filter(item -> itemType.getId().equals(item.getTypeId()) && item.getItemName().contains(itemName)).collect(Collectors.toList()));
});
return R.ok(itemTypes);
}
/**
* 获取故障区域列表
*/
@ApiOperation(value = "获取故障区域二级结构")
@PostMapping(value = "/getAreaDicList")
public R> getAreaDicList() {
List faultAreaDicVOS = faultAreaDicService.getAreaDicList();
List faultDescribeDicList = faultDescribeDicService.list();
faultAreaDicVOS.forEach(areaDicVO -> {
areaDicVO.setFaultDescribeDicList(faultDescribeDicList.stream().filter(item -> areaDicVO.getId().equals(item.getFaultId())).collect(Collectors.toList()));
});
return R.ok(faultAreaDicVOS);
}
/**
* 通过当前租户查询合同房源信息
*/
@ApiOperation(value = "通过当前租户查询合同房源信息")
@PostMapping(value = "/getConcatByTenantId")
public R> getConcatByTenantId() {
String tenantId = tokenService.getLoginUserApplet().getUserId();
// 查询合同信息
List list = contractService.list(Wrappers.lambdaQuery(TContract.class)
.eq(TContract::getTenantId, tenantId)
.eq(TContract::getStatus, 4));
if(CollectionUtils.isEmpty(list)){
return R.ok(list);
}
List houseIds = list.stream().map(TContract::getHouseId).collect(Collectors.toList());
List houseList = houseService.list(Wrappers.lambdaQuery(THouse.class)
.in(THouse::getId, houseIds));
list.forEach(item -> {
item.setHouseName(houseList.stream().filter(house -> house.getId().equals(item.getHouseId())).findFirst().orElse(new THouse()).getHouseName());
item.setHouseAddress(houseList.stream().filter(house -> house.getId().equals(item.getHouseId())).findFirst().orElse(new THouse()).getHouseAddress());
});
return R.ok(list);
}
/**
* 添加报修信息
*/
@ApiOperation(value = "添加报修信息")
@PostMapping(value = "/addFault")
public R addFault(@RequestBody TFaultRepairMessageDTO dto) {
dto.setTenantId(tokenService.getLoginUserApplet().getUserId());
LocalDate now = LocalDate.now();
String replace = (now + "").replace("-", "");
int size = tFaultRepairMessageService.list(new LambdaQueryWrapper()
.likeRight(TFaultRepairMessage::getCreateTime, LocalDate.now())).size();
dto.setCode(replace.substring(2)+String.format("%03d", size+1));
tFaultRepairMessageService.save(dto);
List sysUsers = sysUserService.selectList();
if (dto.getRepairType()==2){
for (SysUser sysUser : sysUsers) {
if (StringUtils.hasLength(sysUser.getPhonenumber())){
System.err.println("发送短信");
smsUtil.sendSms(sysUser.getPhonenumber(),"2375194",new String[]{});
}
}
}
return R.ok();
}
}