修改了物业一些bug
Some checks failed
Build and Push to Target Registry / 构建并推送镜像到目标仓库 (push) Failing after 12m36s
Some checks failed
Build and Push to Target Registry / 构建并推送镜像到目标仓库 (push) Failing after 12m36s
This commit is contained in:
@@ -26,7 +26,7 @@ import java.util.List;
|
||||
|
||||
/**
|
||||
* 【业务管理-工单处理】
|
||||
* 前端访问路由地址为:/system/workOrders
|
||||
* 前端访问路由地址为:/property/workOrders
|
||||
*
|
||||
* @author mocheng
|
||||
* @date 2025-07-07
|
||||
@@ -42,7 +42,7 @@ public class ServiceWorkOrdersController extends BaseController {
|
||||
/**
|
||||
* 查询【工单处理】列表
|
||||
*/
|
||||
//@SaCheckPermission("system:workOrders:list")
|
||||
@SaCheckPermission("property:workOrders:list")
|
||||
@GetMapping("/list")
|
||||
public TableDataInfo<ServiceWorkOrdersVo> list(ServiceWorkOrdersBo bo, PageQuery pageQuery) {
|
||||
return serviceWorkOrdersService.queryPageList(bo, pageQuery);
|
||||
@@ -51,7 +51,7 @@ public class ServiceWorkOrdersController extends BaseController {
|
||||
/**
|
||||
* 导出【工单处理】列表
|
||||
*/
|
||||
// @SaCheckPermission("system:workOrders:export")
|
||||
@SaCheckPermission("property:workOrders:export")
|
||||
@Log(title = "【工单处理】", businessType = BusinessType.EXPORT)
|
||||
@PostMapping("/export")
|
||||
public void export(ServiceWorkOrdersBo bo, HttpServletResponse response) {
|
||||
@@ -64,7 +64,7 @@ public class ServiceWorkOrdersController extends BaseController {
|
||||
*
|
||||
* @param id 主键
|
||||
*/
|
||||
// @SaCheckPermission("system:workOrders:query")
|
||||
@SaCheckPermission("property:workOrders:query")
|
||||
@GetMapping("/{id}")
|
||||
public R<ServiceWorkOrdersInfoVo> getInfo(@NotNull(message = "主键不能为空")
|
||||
@PathVariable("id") Long id) {
|
||||
@@ -74,7 +74,7 @@ public class ServiceWorkOrdersController extends BaseController {
|
||||
/**
|
||||
* 新增【工单处理】
|
||||
*/
|
||||
// @SaCheckPermission("system:workOrders:add")
|
||||
@SaCheckPermission("property:workOrders:add")
|
||||
@Log(title = "【工单处理】", businessType = BusinessType.INSERT)
|
||||
@RepeatSubmit()
|
||||
@PostMapping()
|
||||
@@ -85,20 +85,40 @@ public class ServiceWorkOrdersController extends BaseController {
|
||||
/**
|
||||
* 修改【工单处理】
|
||||
*/
|
||||
//@SaCheckPermission("system:workOrders:edit")
|
||||
@SaCheckPermission("property:workOrders:edit")
|
||||
@Log(title = "【工单处理】", businessType = BusinessType.UPDATE)
|
||||
@RepeatSubmit()
|
||||
@PutMapping()
|
||||
public R<Void> edit(@Validated(EditGroup.class) @RequestBody ServiceWorkOrdersBo bo) {
|
||||
return toAjax(serviceWorkOrdersService.updateByBo(bo));
|
||||
}
|
||||
/**
|
||||
* 派单【工单处理】
|
||||
*/
|
||||
@SaCheckPermission("property:workOrders:dispatch")
|
||||
@Log(title = "【工单处理】", businessType = BusinessType.UPDATE)
|
||||
@RepeatSubmit()
|
||||
@PutMapping("/dispatch")
|
||||
public R<Void> dispatch(@Validated(EditGroup.class) @RequestBody ServiceWorkOrdersBo bo) {
|
||||
return toAjax(serviceWorkOrdersService.updateByBo(bo));
|
||||
}
|
||||
|
||||
/**
|
||||
* 抢单【工单处理】
|
||||
*/
|
||||
@SaCheckPermission("property:workOrders:grab")
|
||||
@Log(title = "【工单处理】", businessType = BusinessType.UPDATE)
|
||||
@RepeatSubmit()
|
||||
@PutMapping("grab")
|
||||
public R<Void> grab(@Validated(EditGroup.class) @RequestBody ServiceWorkOrdersBo bo) {
|
||||
return toAjax(serviceWorkOrdersService.updateByBo(bo));
|
||||
}
|
||||
/**
|
||||
* 删除【工单处理】
|
||||
*
|
||||
* @param ids 主键串
|
||||
*/
|
||||
// @SaCheckPermission("system:workOrders:remove")
|
||||
@SaCheckPermission("property:workOrders:remove")
|
||||
@Log(title = "【工单处理】", businessType = BusinessType.DELETE)
|
||||
@DeleteMapping("/{ids}")
|
||||
public R<Void> remove(@NotEmpty(message = "主键不能为空")
|
||||
|
@@ -47,7 +47,7 @@ public class ServiceWorkOrders extends TenantEntity {
|
||||
private Long type;
|
||||
|
||||
/**
|
||||
* 状态
|
||||
* 状态(0创建工单,1已派单2已抢单3处理中,4已完成,5已评价)
|
||||
*/
|
||||
private String status;
|
||||
|
||||
|
@@ -38,7 +38,7 @@ public class ServiceWorkOrdersType extends TenantEntity {
|
||||
private String orderTypeName;
|
||||
|
||||
/**
|
||||
* 运作模式
|
||||
* 运作模式(0派单+抢单,1派单,2自动派单)
|
||||
*/
|
||||
private String operationMode;
|
||||
|
||||
@@ -56,7 +56,10 @@ public class ServiceWorkOrdersType extends TenantEntity {
|
||||
* 是否支持转单(0支持,1不支持)
|
||||
*/
|
||||
private Integer isTransfers;
|
||||
|
||||
/**
|
||||
* 权重(1一般2紧急3危急)
|
||||
*/
|
||||
private String processingWeight;
|
||||
/**
|
||||
* 搜索值
|
||||
*/
|
||||
|
@@ -50,6 +50,11 @@ public class CostCarChargeBo extends BaseEntity {
|
||||
* 车位
|
||||
*/
|
||||
private String location;
|
||||
/**
|
||||
* 车位名称
|
||||
*/
|
||||
private String locationName;
|
||||
|
||||
/**
|
||||
* 缴费状态
|
||||
*/
|
||||
|
@@ -54,7 +54,10 @@ public class ServiceWorkOrdersTypeBo extends BaseEntity {
|
||||
*/
|
||||
@NotNull(message = "完成时效不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private Integer completionNumber;
|
||||
|
||||
/**
|
||||
* 权重(1一般2紧急3危急)
|
||||
*/
|
||||
private String processingWeight;
|
||||
/**
|
||||
* 是否支持转单(0支持,1不支持)
|
||||
*/
|
||||
|
@@ -0,0 +1,28 @@
|
||||
package org.dromara.property.domain.enums;
|
||||
|
||||
/**
|
||||
* 工单上报类型
|
||||
*/
|
||||
public enum OrderReportingTypeEnum {
|
||||
TELEPHONE_REPORT("电话上报", "1"),
|
||||
SCENE_REPORT("现场上报", "2"),
|
||||
SYSTEM_REPORT("系统上报", "3"),
|
||||
PHONE_REPORT("手机上报", "4");
|
||||
|
||||
|
||||
private final String name;
|
||||
private final String value;
|
||||
|
||||
OrderReportingTypeEnum(String name, String value) {
|
||||
this.name = name;
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return this.name;
|
||||
}
|
||||
|
||||
public String getValue() {
|
||||
return this.value;
|
||||
}
|
||||
}
|
@@ -0,0 +1,28 @@
|
||||
package org.dromara.property.domain.enums;
|
||||
/**
|
||||
* @Author:yuyongle
|
||||
* @Date:2025/7/4 10:35
|
||||
* @Description:工单类型运作模式
|
||||
**/
|
||||
public enum OrderTypeOperationEnum {
|
||||
DISPATCH_ORDERS_AND_GRAB_ORDERS("派单+抢单", "0"),
|
||||
DISPATCH("派单", "1"),
|
||||
AUTOMATE_DISPATCH("自动派单", "2");
|
||||
|
||||
|
||||
private final String name;
|
||||
private final String value;
|
||||
|
||||
OrderTypeOperationEnum(String name, String value) {
|
||||
this.name = name;
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return this.name;
|
||||
}
|
||||
|
||||
public String getValue() {
|
||||
return this.value;
|
||||
}
|
||||
}
|
@@ -35,6 +35,10 @@ public class CostHouseChargeDetailVo implements Serializable {
|
||||
*/
|
||||
@ExcelProperty(value = "房屋")
|
||||
private Long roomId;
|
||||
/**
|
||||
* 房屋名称
|
||||
*/
|
||||
private String roomName;
|
||||
/**
|
||||
* 业主
|
||||
*/
|
||||
|
@@ -42,6 +42,11 @@ public class CostHouseChargeVo implements Serializable {
|
||||
*/
|
||||
@ExcelProperty(value = "房屋")
|
||||
private Long roomId;
|
||||
|
||||
/**
|
||||
* 房屋名称
|
||||
*/
|
||||
private String roomName;
|
||||
/**
|
||||
* 业主
|
||||
*/
|
||||
|
@@ -45,6 +45,10 @@ public class CostMeterWaterVo implements Serializable {
|
||||
* 费用类型
|
||||
*/
|
||||
private String costType;
|
||||
/**
|
||||
* 费用名称
|
||||
*/
|
||||
private String costTypeName;
|
||||
/**
|
||||
* 房间id
|
||||
*/
|
||||
|
@@ -57,7 +57,10 @@ public class ServiceWorkOrdersInfoVo implements Serializable {
|
||||
*/
|
||||
@ExcelProperty(value = "权重")
|
||||
private String processingWeight;
|
||||
|
||||
/**
|
||||
* 运作模式(0派单+抢单,1派单,2自动派单)
|
||||
*/
|
||||
private String operationMode;
|
||||
/**
|
||||
* 状态
|
||||
*/
|
||||
|
@@ -68,7 +68,10 @@ public class ServiceWorkOrdersTypeVo implements Serializable {
|
||||
*/
|
||||
@ExcelProperty(value = "是否支持转单(0支持,1不支持)")
|
||||
private Integer isTransfers;
|
||||
|
||||
/**
|
||||
* 权重(1一般2紧急3危急)
|
||||
*/
|
||||
private String processingWeight;
|
||||
|
||||
/**
|
||||
* 搜索值
|
||||
|
@@ -67,7 +67,7 @@ public class ServiceWorkOrdersVo implements Serializable {
|
||||
/**
|
||||
* 状态
|
||||
*/
|
||||
@ExcelProperty(value = "状态")
|
||||
@ExcelProperty(value = "状态(0创建工单,1已派单2已抢单3处理中,4已完成,5已评价)")
|
||||
private String status;
|
||||
|
||||
/**
|
||||
@@ -75,7 +75,10 @@ public class ServiceWorkOrdersVo implements Serializable {
|
||||
*/
|
||||
@ExcelProperty(value = "派单时间")
|
||||
private Date dispatchTime;
|
||||
|
||||
/**
|
||||
* 运作模式(0派单+抢单,1派单,2自动派单)
|
||||
*/
|
||||
private String operationMode;
|
||||
/**
|
||||
* 发起人
|
||||
*/
|
||||
|
@@ -20,5 +20,5 @@ public interface TbRoomMapper extends BaseMapperPlus<TbRoom, TbRoomVo> {
|
||||
|
||||
//查询房间名称
|
||||
String queryRoomName(Long roomId);
|
||||
Map<Long,String> queryRoomNameList(@Param("ids") List<Long> ids);
|
||||
List<String> queryRoomNameList(@Param("ids") List<Long> ids);
|
||||
}
|
||||
|
@@ -9,6 +9,7 @@ import org.dromara.common.mybatis.core.page.PageQuery;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 房间信息Service接口
|
||||
@@ -76,5 +77,11 @@ public interface ITbRoomService {
|
||||
* @return 房间名称
|
||||
*/
|
||||
String queryRoomName(Long roomId);
|
||||
/**
|
||||
* 获取详细房间名称
|
||||
* @param ids 房间id集合
|
||||
* @return 房间名称
|
||||
*/
|
||||
List<String> queryRoomNameList(List<Long> ids);
|
||||
|
||||
}
|
||||
|
@@ -73,7 +73,7 @@ public class AssetTypeServiceImpl implements IAssetTypeService {
|
||||
private LambdaQueryWrapper<AssetType> buildQueryWrapper(AssetTypeBo bo) {
|
||||
Map<String, Object> params = bo.getParams();
|
||||
LambdaQueryWrapper<AssetType> lqw = Wrappers.lambdaQuery();
|
||||
lqw.orderByAsc(AssetType::getId);
|
||||
lqw.orderByAsc(AssetType::getSort);
|
||||
lqw.like(StringUtils.isNotBlank(bo.getAssetTypeName()), AssetType::getAssetTypeName, bo.getAssetTypeName());
|
||||
lqw.eq(bo.getSort() != null, AssetType::getSort, bo.getSort());
|
||||
return lqw;
|
||||
|
@@ -82,6 +82,7 @@ public class CostCarChargeServiceImpl implements ICostCarChargeService {
|
||||
// List<Long> residentPersonIdList = result.getRecords().stream().map(vo -> vo.getPersonId()).distinct().collect(Collectors.toList());
|
||||
// List<RemoteUserVo> remoteUserVos = remoteUserService.selectListByIds(residentPersonIdList);
|
||||
List<ResidentPerson> residentPeoplelist = residentPersonMapper.selectList();
|
||||
List<String> roomNames = roomService.queryRoomNameList(idList);
|
||||
result.getRecords().stream().forEach(s -> {
|
||||
if (CollUtil.isNotEmpty(residentPeoplelist)) {
|
||||
ResidentPerson residentPerson = residentPeoplelist.stream()
|
||||
|
@@ -55,6 +55,7 @@ public class CostHouseChargeServiceImpl implements ICostHouseChargeService {
|
||||
private final ResidentPersonMapper residentPersonMapper;
|
||||
@DubboReference
|
||||
private RemoteUserService remoteUserService;
|
||||
|
||||
/**
|
||||
* 查询房屋收费
|
||||
*
|
||||
@@ -71,6 +72,8 @@ public class CostHouseChargeServiceImpl implements ICostHouseChargeService {
|
||||
costHouseChargeDetailVo.setRoomVo(ObjectUtil.isNotEmpty(tbRoomVo) ? tbRoomVo : null);
|
||||
ResidentPersonVo residentPersonVo = residentPersonMapper.selectVoById(costHouseChargeVo.getPersonId());
|
||||
//RemoteUserVo userInfo = remoteUserService.getUserInfoById(costHouseChargeVo.getPersonId());
|
||||
String roomName = tbRoomMapper.queryRoomName(costHouseChargeDetailVo.getRoomId());
|
||||
costHouseChargeDetailVo.setRoomName(StringUtils.isNotBlank(roomName) ? roomName : null);
|
||||
costHouseChargeDetailVo.setPersonName(ObjectUtil.isNotEmpty(residentPersonVo) ? residentPersonVo.getUserName() : null);
|
||||
return costHouseChargeDetailVo;
|
||||
}
|
||||
@@ -92,6 +95,8 @@ public class CostHouseChargeServiceImpl implements ICostHouseChargeService {
|
||||
ResidentPerson residentPerson = residentPeoplelist.stream()
|
||||
.filter(vo -> vo.getId() != null && vo.getId().equals(s.getPersonId())).findFirst().orElse(null);
|
||||
s.setPersonName(ObjectUtil.isNotEmpty(residentPerson) ? residentPerson.getUserName() : null);
|
||||
String roomName = tbRoomMapper.queryRoomName(s.getRoomId());
|
||||
s.setRoomName(StringUtils.isNotBlank(roomName) ? roomName : null);
|
||||
}
|
||||
});
|
||||
return TableDataInfo.build(result);
|
||||
@@ -189,8 +194,7 @@ public class CostHouseChargeServiceImpl implements ICostHouseChargeService {
|
||||
.setUserId(costHouseChargeVo.getPersonId())
|
||||
.setPayNo(costHouseChargeVo.getId().toString())
|
||||
.setPayAcount(costHouseChargeVo.getAmountReceivable())
|
||||
.setState("0")
|
||||
;
|
||||
.setState("0");
|
||||
boolean flag = costReturnPayFeeMapper.insert(CostReturnPayFee) > 0;
|
||||
CostHouseCharge costHouseCharge = BeanUtil.copyProperties(costHouseChargeVo, CostHouseCharge.class);
|
||||
costHouseCharge.setChargeStatus(ChargeStatusEnum.REFUND_PENDING_REVIEW.getValue());
|
||||
|
@@ -1,6 +1,8 @@
|
||||
package org.dromara.property.service.impl;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import org.dromara.common.core.utils.MapstructUtils;
|
||||
import org.dromara.common.core.utils.StringUtils;
|
||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||
@@ -10,6 +12,8 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.dromara.property.domain.vo.CostMeterTypeVo;
|
||||
import org.dromara.property.mapper.CostMeterTypeMapper;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.dromara.property.domain.bo.CostMeterWaterBo;
|
||||
import org.dromara.property.domain.vo.CostMeterWaterVo;
|
||||
@@ -35,6 +39,7 @@ import java.util.Collection;
|
||||
public class CostMeterWaterServiceImpl implements ICostMeterWaterService {
|
||||
|
||||
private final CostMeterWaterMapper baseMapper;
|
||||
private final CostMeterTypeMapper costMeterTypeMapper;
|
||||
|
||||
/**
|
||||
* 查询费用-水电抄
|
||||
@@ -58,6 +63,16 @@ public class CostMeterWaterServiceImpl implements ICostMeterWaterService {
|
||||
public TableDataInfo<CostMeterWaterVo> queryPageList(CostMeterWaterBo bo, PageQuery pageQuery) {
|
||||
LambdaQueryWrapper<CostMeterWater> lqw = buildQueryWrapper(bo);
|
||||
Page<CostMeterWaterVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
|
||||
if (CollUtil.isNotEmpty(result.getRecords())){
|
||||
//收集抄表类型id
|
||||
List<Long> meterTypeIds = result.getRecords().stream().map(CostMeterWaterVo::getMeterTypeId).toList();
|
||||
List<CostMeterTypeVo> costMeterTypeVos = costMeterTypeMapper.selectVoByIds(meterTypeIds);
|
||||
result.getRecords().stream().forEach(s -> {
|
||||
//查找抄表类型名称
|
||||
CostMeterTypeVo costMeterTypeVo = costMeterTypeVos.stream().filter(vo -> vo.getId() != null && vo.getId().equals(s.getMeterTypeId())).findFirst().orElse(null);
|
||||
s.setCostTypeName(ObjectUtil.isNotEmpty(costMeterTypeVo)?costMeterTypeVo.getName():null);
|
||||
});
|
||||
}
|
||||
return TableDataInfo.build(result);
|
||||
}
|
||||
|
||||
@@ -79,6 +94,7 @@ public class CostMeterWaterServiceImpl implements ICostMeterWaterService {
|
||||
lqw.orderByAsc(CostMeterWater::getId);
|
||||
lqw.eq(bo.getItemId() != null, CostMeterWater::getItemId, bo.getItemId());
|
||||
lqw.eq(bo.getMeterTypeId() != null, CostMeterWater::getMeterTypeId, bo.getMeterTypeId());
|
||||
lqw.eq(StringUtils.isNotBlank(bo.getCostType()), CostMeterWater::getCostType, bo.getCostType());
|
||||
lqw.like(StringUtils.isNotBlank(bo.getObjName()), CostMeterWater::getObjName, bo.getObjName());
|
||||
lqw.eq(StringUtils.isNotBlank(bo.getCurDegrees()), CostMeterWater::getCurDegrees, bo.getCurDegrees());
|
||||
lqw.eq(StringUtils.isNotBlank(bo.getPreDegrees()), CostMeterWater::getPreDegrees, bo.getPreDegrees());
|
||||
|
@@ -92,7 +92,7 @@ public class CostPayFeeAuditServiceImpl implements ICostPayFeeAuditService {
|
||||
}
|
||||
if (CollUtil.isNotEmpty(roomVoList)) {
|
||||
TbRoomVo tbRoomVo = roomVoList.stream()
|
||||
.filter(vo -> vo.getId() != null && vo.getId().equals(s.getChargeId())).findFirst().orElse(null);
|
||||
.filter(vo -> vo.getId() != null && vo.getId().equals(s.getRoomNumber())).findFirst().orElse(null);
|
||||
s.setRoomNumber(ObjectUtil.isNotEmpty(tbRoomVo) ? tbRoomVo.getRoomNumber() : null);
|
||||
}
|
||||
costPayFeeAuditVoList.add(s);
|
||||
|
@@ -63,16 +63,16 @@ public class MeetServiceImpl implements IMeetService {
|
||||
@Override
|
||||
public MeetVo queryById(Long id) {
|
||||
MeetVo meetVo = baseMapper.selectVoById(id);
|
||||
ResidentPersonVo residentPersonVo = residentPersonMapper.selectVoById(meetVo.getPrincipals());
|
||||
if(ObjectUtil.isNotEmpty(residentPersonVo)){
|
||||
meetVo.setPrincipalsName(residentPersonVo.getUserName());
|
||||
meetVo.setPhoneNo(residentPersonVo.getPhone());
|
||||
}
|
||||
// RemoteUserVo userInfo = remoteUserService.getUserInfoById(Long.valueOf(meetVo.getPrincipals()));
|
||||
// if (ObjectUtil.isNotEmpty(userInfo)) {
|
||||
// meetVo.setPrincipalsName(userInfo.getNickName());
|
||||
// meetVo.setPhoneNo(userInfo.getPhonenumber());
|
||||
// ResidentPersonVo residentPersonVo = residentPersonMapper.selectVoById(meetVo.getPrincipals());
|
||||
// if(ObjectUtil.isNotEmpty(residentPersonVo)){
|
||||
// meetVo.setPrincipalsName(residentPersonVo.getUserName());
|
||||
// meetVo.setPhoneNo(residentPersonVo.getPhone());
|
||||
// }
|
||||
RemoteUserVo userInfo = remoteUserService.getUserInfoById(Long.valueOf(meetVo.getPrincipals()));
|
||||
if (ObjectUtil.isNotEmpty(userInfo)) {
|
||||
meetVo.setPrincipalsName(userInfo.getNickName());
|
||||
meetVo.setPhoneNo(userInfo.getPhonenumber());
|
||||
}
|
||||
String locationName = roomMapper.queryRoomName(Long.valueOf(meetVo.getLocation()));
|
||||
meetVo.setLocationName(locationName);
|
||||
return meetVo;
|
||||
@@ -172,7 +172,7 @@ public class MeetServiceImpl implements IMeetService {
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public Boolean insertByBo(MeetBo bo) {
|
||||
Meet add = MapstructUtils.convert(bo, Meet.class);
|
||||
bo.setStatus(1);
|
||||
bo.setStatus(0);
|
||||
validEntityBeforeSave(add);
|
||||
boolean flag = baseMapper.insert(add) > 0;
|
||||
if (flag) {
|
||||
|
@@ -1,5 +1,6 @@
|
||||
package org.dromara.property.service.impl;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import org.dromara.common.core.utils.MapstructUtils;
|
||||
import org.dromara.common.core.utils.StringUtils;
|
||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||
@@ -18,9 +19,11 @@ import org.dromara.property.domain.ResidentUnit;
|
||||
import org.dromara.property.mapper.ResidentUnitMapper;
|
||||
import org.dromara.property.service.IResidentUnitService;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Collection;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 入驻单位Service业务层处理
|
||||
@@ -50,8 +53,18 @@ public class ResidentUnitServiceImpl implements IResidentUnitService {
|
||||
ResidentUnitVo residentUnitVo = baseMapper.selectVoById(id);
|
||||
//获取入驻位置详情
|
||||
if(StringUtils.isNotBlank(residentUnitVo.getLocation())){
|
||||
String roomName = roomService.queryRoomName(Long.valueOf(residentUnitVo.getLocation()));
|
||||
residentUnitVo.setLocationDetail(roomName);
|
||||
// 修改后的代码
|
||||
List<Long> idList = Arrays.stream(residentUnitVo.getLocation().split(","))
|
||||
.map(String::trim)
|
||||
.map(Long::parseLong)
|
||||
.collect(Collectors.toList());
|
||||
|
||||
List<String> roomNames = roomService.queryRoomNameList(idList);
|
||||
// 元素用,拼接成字符串
|
||||
if(CollUtil.isNotEmpty(roomNames)){
|
||||
String locationDetail = String.join(",", roomNames);
|
||||
residentUnitVo.setLocationDetail(locationDetail);
|
||||
}
|
||||
}
|
||||
Long num = personService.queryPersonCount(residentUnitVo.getId());
|
||||
residentUnitVo.setNumber(num);
|
||||
|
@@ -2,6 +2,7 @@ package org.dromara.property.service.impl;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.lang.Assert;
|
||||
import cn.hutool.core.util.IdUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
@@ -16,15 +17,20 @@ import org.dromara.common.core.utils.MapstructUtils;
|
||||
import org.dromara.common.core.utils.StringUtils;
|
||||
import org.dromara.common.mybatis.core.page.PageQuery;
|
||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||
import org.dromara.common.redis.utils.RedisUtils;
|
||||
import org.dromara.common.satoken.utils.LoginHelper;
|
||||
import org.dromara.property.domain.*;
|
||||
import org.dromara.property.domain.bo.ServiceWorkOrdersBo;
|
||||
import org.dromara.property.domain.bo.mobile.MServiceWorkOrdersBo;
|
||||
import org.dromara.property.domain.enums.OrderReportingTypeEnum;
|
||||
import org.dromara.property.domain.enums.OrderTypeOperationEnum;
|
||||
import org.dromara.property.domain.enums.WorkOrderStatusEnum;
|
||||
import org.dromara.property.domain.vo.*;
|
||||
import org.dromara.property.mapper.ResidentPersonMapper;
|
||||
import org.dromara.property.mapper.ServiceWorkOrdersMapper;
|
||||
import org.dromara.property.mapper.ServiceWorkOrdersRecordMapper;
|
||||
import org.dromara.property.mapper.ServiceWorkOrdersTypeMapper;
|
||||
import org.dromara.property.mapper.attendanceMapper.AttendanceUserGroupMapper;
|
||||
import org.dromara.property.service.IServiceWorkOrdersService;
|
||||
import org.dromara.system.api.RemoteUserService;
|
||||
import org.dromara.system.api.domain.vo.RemoteUserVo;
|
||||
@@ -54,6 +60,7 @@ public class ServiceWorkOrdersServiceImpl implements IServiceWorkOrdersService {
|
||||
private final ServiceWorkOrdersRecordMapper workOrdersRecordMapper;
|
||||
@DubboReference
|
||||
private RemoteUserService remoteUserService;
|
||||
private final AttendanceUserGroupMapper attendanceUserGroupMapper;
|
||||
|
||||
/**
|
||||
* 查询【工单处理】
|
||||
@@ -71,6 +78,8 @@ public class ServiceWorkOrdersServiceImpl implements IServiceWorkOrdersService {
|
||||
ServiceWorkOrdersTypeVo serviceWorkOrdersTypeVo = typesMapper.selectVoById(serviceWorkOrdersVo.getType());
|
||||
if (Objects.nonNull(serviceWorkOrdersTypeVo)) {
|
||||
serviceWorkOrdersInfoVo.setTypeName(serviceWorkOrdersTypeVo.getOrderTypeName());
|
||||
serviceWorkOrdersInfoVo.setOperationMode(ObjectUtil.isNotNull(serviceWorkOrdersTypeVo) ? serviceWorkOrdersTypeVo.getOperationMode() : null);
|
||||
|
||||
}
|
||||
//ResidentPersonVo residentPersonHandler = residentPersonMapper.selectVoById(Long.valueOf(serviceWorkOrdersVo.getHandler()));
|
||||
|
||||
@@ -123,6 +132,7 @@ public class ServiceWorkOrdersServiceImpl implements IServiceWorkOrdersService {
|
||||
ServiceWorkOrdersTypeVo serviceWorkOrdersTypeVo = serviceWorkOrdersTypeVoList.stream().filter(vo -> vo.getId() != null && vo.getId().equals(s.getType())).findFirst().orElse(null);
|
||||
|
||||
s.setTypeName(ObjectUtil.isNotNull(serviceWorkOrdersTypeVo) ? serviceWorkOrdersTypeVo.getOrderTypeName() : null);
|
||||
s.setOperationMode(ObjectUtil.isNotNull(serviceWorkOrdersTypeVo) ? serviceWorkOrdersTypeVo.getOperationMode() : null);
|
||||
serviceWorkOrdersVoList.add(s);
|
||||
});
|
||||
return TableDataInfo.build(new Page<ServiceWorkOrdersVo>().setRecords(serviceWorkOrdersVoList).setTotal(result.getTotal()));
|
||||
@@ -151,6 +161,7 @@ public class ServiceWorkOrdersServiceImpl implements IServiceWorkOrdersService {
|
||||
ServiceWorkOrdersTypeVo serviceWorkOrdersTypeVo = serviceWorkOrdersTypeVoList.stream().filter(vo -> vo.getId() != null && vo.getId().equals(s.getType())).findFirst().orElse(null);
|
||||
|
||||
s.setTypeName(ObjectUtil.isNotNull(serviceWorkOrdersTypeVo) ? serviceWorkOrdersTypeVo.getOrderTypeName() : null);
|
||||
s.setOperationMode(ObjectUtil.isNotNull(serviceWorkOrdersTypeVo) ? serviceWorkOrdersTypeVo.getOperationMode() : null);
|
||||
serviceWorkOrdersVoList.add(s);
|
||||
});
|
||||
return serviceWorkOrdersVoList;
|
||||
@@ -197,11 +208,14 @@ public class ServiceWorkOrdersServiceImpl implements IServiceWorkOrdersService {
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public Boolean insertByBo(ServiceWorkOrdersBo bo) {
|
||||
//查询工单类型
|
||||
ServiceWorkOrdersType serviceWorkOrdersType = typesMapper.selectById(bo.getType());
|
||||
ServiceWorkOrders add = MapstructUtils.convert(bo, ServiceWorkOrders.class);
|
||||
LoginUser user = LoginHelper.getLoginUser();
|
||||
add.setOrderNo("GD" + IdUtil.getSnowflakeNextIdStr());
|
||||
add.setStatus("0");
|
||||
add.setStatus(WorkOrderStatusEnum.CREATE_ORDER.getValue());
|
||||
add.setInitiatorPeople(user.getNickname());
|
||||
add.setProcessingWeight(serviceWorkOrdersType.getProcessingWeight());
|
||||
validEntityBeforeSave(add);
|
||||
boolean flag = baseMapper.insert(add) > 0;
|
||||
if (flag) {
|
||||
@@ -210,11 +224,67 @@ public class ServiceWorkOrdersServiceImpl implements IServiceWorkOrdersService {
|
||||
serviceWorkOrdersRecord.setOrderId(add.getId());
|
||||
serviceWorkOrdersRecord.setStatus(add.getStatus());
|
||||
//serviceWorkOrdersRecord.setHandler(add.getHandler());
|
||||
workOrdersRecordMapper.insert(serviceWorkOrdersRecord);
|
||||
boolean flags = workOrdersRecordMapper.insert(serviceWorkOrdersRecord) > 0;
|
||||
if (flags) {
|
||||
if (serviceWorkOrdersType.getOperationMode().equals(OrderTypeOperationEnum.AUTOMATE_DISPATCH.getValue())) {
|
||||
handleServiceWorkOrder(add);
|
||||
}
|
||||
}
|
||||
}
|
||||
return flag;
|
||||
}
|
||||
|
||||
//自动派单
|
||||
private void handleServiceWorkOrder(ServiceWorkOrders serviceWorkOrders) {
|
||||
LocalDate today = LocalDate.now();
|
||||
// 1. 获取今日排班人员(优先查缓存,未命中则查询数据库并缓存)
|
||||
List<AttendanceUserGroup> attendanceUserGroups = RedisUtils.getCacheList(DateUtil.today());
|
||||
if (CollUtil.isEmpty(attendanceUserGroups)) {
|
||||
attendanceUserGroups = attendanceUserGroupMapper.selectList(
|
||||
new LambdaQueryWrapper<AttendanceUserGroup>()
|
||||
.le(AttendanceUserGroup::getStartDate, today)
|
||||
.ge(AttendanceUserGroup::getEndDate, today)
|
||||
.orderByAsc(AttendanceUserGroup::getCreateTime)
|
||||
);
|
||||
Assert.isTrue(CollUtil.isNotEmpty(attendanceUserGroups),"暂无排班人员");
|
||||
// 缓存当天排班数据(假设当天不会变)
|
||||
RedisUtils.setCacheList(DateUtil.today(), attendanceUserGroups);
|
||||
}
|
||||
|
||||
// 2. 获取并更新轮询索引(原子性很重要)
|
||||
int currentIndex;
|
||||
Integer lastScheduleId = RedisUtils.getCacheObject(DateUtil.today()+"LastScheduleId");
|
||||
if (lastScheduleId == null || lastScheduleId < 0 || lastScheduleId >= attendanceUserGroups.size()) {
|
||||
currentIndex = 0; // 越界或未设置,重置为0
|
||||
} else {
|
||||
currentIndex = lastScheduleId + 1;
|
||||
if (currentIndex >= attendanceUserGroups.size()) {
|
||||
currentIndex = 0; // 循环轮询
|
||||
}
|
||||
}
|
||||
RedisUtils.setCacheObject(DateUtil.today()+"LastScheduleId", currentIndex);
|
||||
|
||||
// 3. 分配处理人
|
||||
AttendanceUserGroup assignedGroup = attendanceUserGroups.get(currentIndex);
|
||||
Long employeeId = assignedGroup.getEmployeeId();
|
||||
|
||||
serviceWorkOrders.setHandler(employeeId);
|
||||
serviceWorkOrders.setStatus(WorkOrderStatusEnum.DISPATCHED.getValue());
|
||||
|
||||
// 4. 插入记录
|
||||
ServiceWorkOrdersRecord record = new ServiceWorkOrdersRecord();
|
||||
record.setOrderId(serviceWorkOrders.getId());
|
||||
record.setHandler(employeeId);
|
||||
record.setStatus(WorkOrderStatusEnum.DISPATCHED.getValue());
|
||||
workOrdersRecordMapper.insert(record);
|
||||
|
||||
// 5. 更新工单
|
||||
serviceWorkOrders.setDispatchTime(new Date());
|
||||
baseMapper.updateById(serviceWorkOrders);
|
||||
|
||||
log.info("成功派单,工单号:{}", serviceWorkOrders.getOrderNo());
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改【工单处理】
|
||||
*
|
||||
@@ -497,16 +567,17 @@ public class ServiceWorkOrdersServiceImpl implements IServiceWorkOrdersService {
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
//小程序端新增
|
||||
@Override
|
||||
public Boolean insertMServiceWorkOrdersBo(MServiceWorkOrdersBo bo) {
|
||||
//查询工单类型
|
||||
ServiceWorkOrdersType serviceWorkOrdersType = typesMapper.selectById(bo.getType());
|
||||
ServiceWorkOrders add = MapstructUtils.convert(bo, ServiceWorkOrders.class);
|
||||
LoginUser user = LoginHelper.getLoginUser();
|
||||
add.setOrderNo("GD" + IdUtil.getSnowflakeNextIdStr());
|
||||
add.setOrderName("工单名称");
|
||||
add.setStatus("0");
|
||||
add.setStatus(WorkOrderStatusEnum.CREATE_ORDER.getValue());
|
||||
add.setReportingType(OrderReportingTypeEnum.PHONE_REPORT.getValue());
|
||||
add.setInitiatorPeople(user.getNickname());
|
||||
validEntityBeforeSave(add);
|
||||
boolean flag = baseMapper.insert(add) > 0;
|
||||
@@ -515,15 +586,22 @@ public class ServiceWorkOrdersServiceImpl implements IServiceWorkOrdersService {
|
||||
ServiceWorkOrdersRecord serviceWorkOrdersRecord = new ServiceWorkOrdersRecord();
|
||||
serviceWorkOrdersRecord.setOrderId(add.getId());
|
||||
serviceWorkOrdersRecord.setStatus(add.getStatus());
|
||||
workOrdersRecordMapper.insert(serviceWorkOrdersRecord);
|
||||
boolean flags = workOrdersRecordMapper.insert(serviceWorkOrdersRecord) > 0;
|
||||
if (flags) {
|
||||
if (serviceWorkOrdersType.getOperationMode().equals(OrderTypeOperationEnum.AUTOMATE_DISPATCH.getValue())) {
|
||||
handleServiceWorkOrder(add);
|
||||
}
|
||||
}
|
||||
}
|
||||
return flag;
|
||||
}
|
||||
|
||||
public List<ServiceWorkOrders> getList() {
|
||||
LambdaQueryWrapper<ServiceWorkOrders> serviceWorkOrdersWrapper = new LambdaQueryWrapper<>();
|
||||
return baseMapper.selectList(serviceWorkOrdersWrapper);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Map<Object, Object>> getServiceWorkOrdersHandler(String type) {
|
||||
return switch (type) {
|
||||
|
@@ -158,5 +158,13 @@ public class TbRoomServiceImpl implements ITbRoomService {
|
||||
@Override
|
||||
public String queryRoomName(Long roomId) {
|
||||
return baseMapper.queryRoomName(roomId);
|
||||
} /**
|
||||
* 获取房间名称
|
||||
* @param
|
||||
* @return 房间名称
|
||||
*/
|
||||
@Override
|
||||
public List<String> queryRoomNameList(List<Long> ids) {
|
||||
return baseMapper.queryRoomNameList(ids);
|
||||
}
|
||||
}
|
||||
|
@@ -9,10 +9,14 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.dromara.common.redis.utils.RedisUtils;
|
||||
import org.dromara.property.domain.AttendanceUserGroup;
|
||||
import org.dromara.property.domain.ServiceWorkOrders;
|
||||
import org.dromara.property.domain.ServiceWorkOrdersRecord;
|
||||
import org.dromara.property.domain.ServiceWorkOrdersType;
|
||||
import org.dromara.property.domain.enums.OrderTypeOperationEnum;
|
||||
import org.dromara.property.domain.enums.WorkOrderStatusEnum;
|
||||
import org.dromara.property.mapper.ServiceWorkOrdersTypeMapper;
|
||||
import org.dromara.property.mapper.attendanceMapper.AttendanceUserGroupMapper;
|
||||
import org.dromara.property.mapper.ServiceWorkOrdersMapper;
|
||||
import org.dromara.property.mapper.ServiceWorkOrdersRecordMapper;
|
||||
@@ -40,21 +44,18 @@ import org.springframework.web.bind.annotation.RestController;
|
||||
//@RestController
|
||||
//@RequestMapping("/serviceWorkOrderTasks")
|
||||
public class ServiceWorkOrderTasks {
|
||||
private ServiceWorkOrdersMapper workOrdersMapper;
|
||||
private ServiceWorkOrdersRecordMapper workOrdersRecordMapper;
|
||||
private AttendanceUserGroupMapper attendanceUserGroupMapper;
|
||||
private final ServiceWorkOrdersMapper workOrdersMapper;
|
||||
private final ServiceWorkOrdersTypeMapper workOrdersTypeMapper;
|
||||
private final ServiceWorkOrdersRecordMapper workOrdersRecordMapper;
|
||||
private final AttendanceUserGroupMapper attendanceUserGroupMapper;
|
||||
|
||||
/**
|
||||
* 查询状态为创建工单的工单,查询当天排班人员,为工单自动派单
|
||||
*/
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
@Scheduled(cron = "0 0 */1 * * ?")
|
||||
@Scheduled(cron = "0 0,30 * * * ?")
|
||||
//@GetMapping("/serviceWorkOrderTaskId")
|
||||
private void handleServiceWorkOrder() {
|
||||
List<ServiceWorkOrders> serviceWorkOrderList = workOrdersMapper.selectList(
|
||||
new LambdaQueryWrapper<ServiceWorkOrders>()
|
||||
.eq(ServiceWorkOrders::getStatus, WorkOrderStatusEnum.CREATE_ORDER.getValue()));
|
||||
if(CollUtil.isNotEmpty(serviceWorkOrderList)){
|
||||
LocalDate today = LocalDate.now();
|
||||
List<AttendanceUserGroup> attendanceUserGroups = attendanceUserGroupMapper.selectList(
|
||||
new LambdaQueryWrapper<AttendanceUserGroup>()
|
||||
@@ -62,28 +63,64 @@ public class ServiceWorkOrderTasks {
|
||||
.le(AttendanceUserGroup::getStartDate, today)
|
||||
.ge(AttendanceUserGroup::getEndDate, today)
|
||||
);
|
||||
if (CollUtil.isEmpty(attendanceUserGroups)) {
|
||||
if (!RedisUtils.isExistsObject("today")) {
|
||||
//缓存今天排班人员
|
||||
RedisUtils.setCacheList("today", attendanceUserGroups);
|
||||
}
|
||||
//查询工单类型
|
||||
List<ServiceWorkOrdersType> serviceWorkOrdersTypes = workOrdersTypeMapper.selectList(
|
||||
new LambdaQueryWrapper<ServiceWorkOrdersType>()
|
||||
.eq(ServiceWorkOrdersType::getOperationMode, OrderTypeOperationEnum.AUTOMATE_DISPATCH.getValue())
|
||||
);
|
||||
if (CollUtil.isEmpty(serviceWorkOrdersTypes)) {
|
||||
//收集工单类型id
|
||||
List<Long> typeIds = serviceWorkOrdersTypes.stream().map(ServiceWorkOrdersType::getId).toList();
|
||||
List<ServiceWorkOrders> serviceWorkOrderList = workOrdersMapper.selectList(
|
||||
new LambdaQueryWrapper<ServiceWorkOrders>()
|
||||
.eq(ServiceWorkOrders::getStatus, WorkOrderStatusEnum.CREATE_ORDER.getValue())
|
||||
.in(ServiceWorkOrders::getType, typeIds)
|
||||
);
|
||||
if (CollUtil.isNotEmpty(serviceWorkOrderList)) {
|
||||
serviceWorkOrderList.stream().forEach(s -> {
|
||||
if(CollUtil.isNotEmpty(attendanceUserGroups)){
|
||||
attendanceUserGroups.stream().forEach(s1->{
|
||||
//获取处理人
|
||||
List<AttendanceUserGroup> attendanceUserGroupList = RedisUtils.getCacheList("today");
|
||||
ServiceWorkOrdersRecord serviceWorkOrdersRecord = new ServiceWorkOrdersRecord();
|
||||
//获取上次排班人员序号
|
||||
if (!RedisUtils.isExistsObject("LastScheduleId")) {
|
||||
RedisUtils.setCacheObject("LastScheduleId", 0);
|
||||
serviceWorkOrdersRecord.setHandler(attendanceUserGroupList.get(0).getEmployeeId());
|
||||
s.setHandler(attendanceUserGroupList.get(0).getEmployeeId());
|
||||
} else {
|
||||
Integer lastScheduleId = RedisUtils.getCacheObject("LastScheduleId");
|
||||
int lastScheduleIdUpdate = lastScheduleId + 1;
|
||||
AttendanceUserGroup attendanceUserGroup = attendanceUserGroupList.get(lastScheduleIdUpdate);
|
||||
if (ObjectUtil.isNotEmpty(attendanceUserGroup)) {
|
||||
serviceWorkOrdersRecord.setHandler(attendanceUserGroup.getEmployeeId());
|
||||
s.setHandler(attendanceUserGroup.getEmployeeId());
|
||||
RedisUtils.setCacheObject("LastScheduleId", lastScheduleIdUpdate);
|
||||
} else {
|
||||
serviceWorkOrdersRecord.setHandler(attendanceUserGroupList.get(0).getEmployeeId());
|
||||
s.setHandler(attendanceUserGroupList.get(0).getEmployeeId());
|
||||
RedisUtils.setCacheObject("LastScheduleId", 0);
|
||||
}
|
||||
}
|
||||
|
||||
serviceWorkOrdersRecord.setOrderId(s.getId());
|
||||
serviceWorkOrdersRecord.setStatus(WorkOrderStatusEnum.DISPATCHED.getValue());
|
||||
serviceWorkOrdersRecord.setHandler(s1.getEmployeeId());
|
||||
|
||||
workOrdersRecordMapper.insert(serviceWorkOrdersRecord);
|
||||
s.setStatus(WorkOrderStatusEnum.DISPATCHED.getValue());
|
||||
s.setHandler(s1.getEmployeeId());
|
||||
|
||||
workOrdersMapper.updateById(s);
|
||||
log.info("派单工单号为:{}", s.getOrderNo());
|
||||
log.info("处理人为:{}",s1.getEmployeeId());
|
||||
});
|
||||
}else {
|
||||
log.info("当天无排班人员");
|
||||
}
|
||||
});
|
||||
} else {
|
||||
log.info("派单工单为:{}", serviceWorkOrderList.size());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理超过30分钟的工单
|
||||
|
@@ -15,9 +15,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
where r.id=#{roomId}
|
||||
</select>
|
||||
|
||||
<select id="queryRoomNameList" parameterType="list" resultType="java.util.Map">
|
||||
<select id="queryRoomNameList" resultType="java.lang.String" parameterType="list">
|
||||
SELECT
|
||||
r.id,
|
||||
concat(c.community_name, b.building_name, f.floor_name, r.room_number) AS room_name
|
||||
FROM
|
||||
tb_room r
|
||||
|
Reference in New Issue
Block a user